(function () {
  var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17, _templateObject18, _templateObject19, _templateObject20, _templateObject21, _templateObject22, _templateObject23, _templateObject24, _templateObject25, _templateObject26, _templateObject27, _templateObject28, _templateObject29, _templateObject30, _templateObject31, _templateObject32, _templateObject33, _templateObject34, _templateObject35, _templateObject36;

  function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct2(Class, arguments, _getPrototypeOf2(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf2(Wrapper, Class); }; return _wrapNativeSuper(Class); }

  function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }

  function _construct2(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct2 = Reflect.construct; } else { _construct2 = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf2(instance, Class.prototype); return instance; }; } return _construct2.apply(null, arguments); }

  function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }

  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

  function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }

  function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e3) { throw _e3; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e4) { didErr = true; err = _e4; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }

  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }

  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }

  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }

  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }

  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }

  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }

  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }

  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }

  function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }

  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }

  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

  function _createClass2(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

  function _get2(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get2 = Reflect.get; } else { _get2 = function _get(target, property, receiver) { var base = _superPropBase2(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get2(target, property, receiver || target); }

  function _superPropBase2(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf2(object); if (object === null) break; } return object; }

  function _classCallCheck2(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

  function _inherits2(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf2(subClass, superClass); }

  function _setPrototypeOf2(o, p) { _setPrototypeOf2 = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf2(o, p); }

  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf2(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf2(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn2(this, result); }; }

  function _possibleConstructorReturn2(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized2(self); }

  function _assertThisInitialized2(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }

  function _getPrototypeOf2(o) { _getPrototypeOf2 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf2(o); }

  (window["webpackJsonp"] = window["webpackJsonp"] || []).push([["vendor"], {
    /***/
    "+0xr":
    /*!***********************************************************************!*\
      !*** ./node_modules/@angular/material/__ivy_ngcc__/fesm2015/table.js ***!
      \***********************************************************************/

    /*! exports provided: MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatFooterRow, MatFooterRowDef, MatHeaderCell, MatHeaderCellDef, MatHeaderRow, MatHeaderRowDef, MatNoDataRow, MatRow, MatRowDef, MatTable, MatTableDataSource, MatTableModule, MatTextColumn, _MatTableDataSource */

    /***/
    function xr(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatCell", function () {
        return MatCell;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatCellDef", function () {
        return MatCellDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatColumnDef", function () {
        return MatColumnDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatFooterCell", function () {
        return MatFooterCell;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatFooterCellDef", function () {
        return MatFooterCellDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatFooterRow", function () {
        return MatFooterRow;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatFooterRowDef", function () {
        return MatFooterRowDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatHeaderCell", function () {
        return MatHeaderCell;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatHeaderCellDef", function () {
        return MatHeaderCellDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatHeaderRow", function () {
        return MatHeaderRow;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatHeaderRowDef", function () {
        return MatHeaderRowDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatNoDataRow", function () {
        return MatNoDataRow;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatRow", function () {
        return MatRow;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatRowDef", function () {
        return MatRowDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatTable", function () {
        return MatTable;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatTableDataSource", function () {
        return MatTableDataSource;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatTableModule", function () {
        return MatTableModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatTextColumn", function () {
        return MatTextColumn;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "_MatTableDataSource", function () {
        return _MatTableDataSource;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/cdk/table */
      "f6nW");
      /* harmony import */


      var _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/cdk/collections */
      "0EQZ");
      /* harmony import */


      var _angular_material_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/material/core */
      "FKr1");
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Wrapper for the CdkTable with Material design styles.
       */


      var _c0 = [[["caption"]], [["colgroup"], ["col"]]];
      var _c1 = ["caption", "colgroup, col"];

      function MatTextColumn_th_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "th", 3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("text-align", ctx_r0.justify);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"](" ", ctx_r0.headerText, " ");
        }
      }

      function MatTextColumn_td_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "td", 4);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var data_r2 = ctx.$implicit;

          var ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("text-align", ctx_r1.justify);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"](" ", ctx_r1.dataAccessor(data_r2, ctx_r1.name), " ");
        }
      }

      var MatTable = /*#__PURE__*/function (_angular_cdk_table__W) {
        _inherits2(MatTable, _angular_cdk_table__W);

        var _super2 = _createSuper(MatTable);

        function MatTable() {
          var _this2;

          _classCallCheck2(this, MatTable);

          _this2 = _super2.apply(this, arguments);
          /** Overrides the sticky CSS class set by the `CdkTable`. */

          _this2.stickyCssClass = 'mat-table-sticky';
          /** Overrides the need to add position: sticky on every sticky cell element in `CdkTable`. */

          _this2.needsPositionStickyOnElement = false;
          return _this2;
        }

        return MatTable;
      }(_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkTable"]);

      MatTable.ɵfac = function MatTable_Factory(t) {
        return ɵMatTable_BaseFactory(t || MatTable);
      };

      MatTable.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: MatTable,
        selectors: [["mat-table"], ["table", "mat-table", ""]],
        hostAttrs: [1, "mat-table"],
        hostVars: 2,
        hostBindings: function MatTable_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("mat-table-fixed-layout", ctx.fixedLayout);
          }
        },
        exportAs: ["matTable"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([// TODO(michaeljamesparsons) Abstract the view repeater strategy to a directive API so this code
        //  is only included in the build if used.
        {
          provide: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_2__["_VIEW_REPEATER_STRATEGY"],
          useClass: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_2__["_DisposeViewRepeaterStrategy"]
        }, {
          provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkTable"],
          useExisting: MatTable
        }, {
          provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CDK_TABLE"],
          useExisting: MatTable
        }, {
          provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["_COALESCED_STYLE_SCHEDULER"],
          useClass: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["_CoalescedStyleScheduler"]
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]],
        ngContentSelectors: _c1,
        decls: 6,
        vars: 0,
        consts: [["headerRowOutlet", ""], ["rowOutlet", ""], ["noDataRowOutlet", ""], ["footerRowOutlet", ""]],
        template: function MatTable_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"](_c0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](1, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainer"](2, 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainer"](3, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainer"](4, 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainer"](5, 3);
          }
        },
        directives: [_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["HeaderRowOutlet"], _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["DataRowOutlet"], _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["NoDataRowOutlet"], _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["FooterRowOutlet"]],
        styles: ["mat-table{display:block}mat-header-row{min-height:56px}mat-row,mat-footer-row{min-height:48px}mat-row,mat-header-row,mat-footer-row{display:flex;border-width:0;border-bottom-width:1px;border-style:solid;align-items:center;box-sizing:border-box}mat-row::after,mat-header-row::after,mat-footer-row::after{display:inline-block;min-height:inherit;content:\"\"}mat-cell:first-of-type,mat-header-cell:first-of-type,mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] mat-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}mat-cell:last-of-type,mat-header-cell:last-of-type,mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] mat-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}mat-cell,mat-header-cell,mat-footer-cell{flex:1;display:flex;align-items:center;overflow:hidden;word-wrap:break-word;min-height:inherit}table.mat-table{border-spacing:0}tr.mat-header-row{height:56px}tr.mat-row,tr.mat-footer-row{height:48px}th.mat-header-cell{text-align:left}[dir=rtl] th.mat-header-cell{text-align:right}th.mat-header-cell,td.mat-cell,td.mat-footer-cell{padding:0;border-bottom-width:1px;border-bottom-style:solid}th.mat-header-cell:first-of-type,td.mat-cell:first-of-type,td.mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] th.mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] td.mat-cell:first-of-type:not(:only-of-type),[dir=rtl] td.mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}th.mat-header-cell:last-of-type,td.mat-cell:last-of-type,td.mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] th.mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] td.mat-cell:last-of-type:not(:only-of-type),[dir=rtl] td.mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}.mat-table-sticky{position:-webkit-sticky !important;position:sticky !important}.mat-table-fixed-layout{table-layout:fixed}\n"],
        encapsulation: 2
      });

      var ɵMatTable_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](MatTable);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatTable, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'mat-table, table[mat-table]',
            exportAs: 'matTable',
            template: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CDK_TABLE_TEMPLATE"],
            host: {
              'class': 'mat-table',
              '[class.mat-table-fixed-layout]': 'fixedLayout'
            },
            providers: [// TODO(michaeljamesparsons) Abstract the view repeater strategy to a directive API so this code
            //  is only included in the build if used.
            {
              provide: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_2__["_VIEW_REPEATER_STRATEGY"],
              useClass: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_2__["_DisposeViewRepeaterStrategy"]
            }, {
              provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkTable"],
              useExisting: MatTable
            }, {
              provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CDK_TABLE"],
              useExisting: MatTable
            }, {
              provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["_COALESCED_STYLE_SCHEDULER"],
              useClass: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["_CoalescedStyleScheduler"]
            }],
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            // See note on CdkTable for explanation on why this uses the default change detection strategy.
            // tslint:disable-next-line:validate-decorators
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].Default,
            styles: ["mat-table{display:block}mat-header-row{min-height:56px}mat-row,mat-footer-row{min-height:48px}mat-row,mat-header-row,mat-footer-row{display:flex;border-width:0;border-bottom-width:1px;border-style:solid;align-items:center;box-sizing:border-box}mat-row::after,mat-header-row::after,mat-footer-row::after{display:inline-block;min-height:inherit;content:\"\"}mat-cell:first-of-type,mat-header-cell:first-of-type,mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] mat-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}mat-cell:last-of-type,mat-header-cell:last-of-type,mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] mat-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}mat-cell,mat-header-cell,mat-footer-cell{flex:1;display:flex;align-items:center;overflow:hidden;word-wrap:break-word;min-height:inherit}table.mat-table{border-spacing:0}tr.mat-header-row{height:56px}tr.mat-row,tr.mat-footer-row{height:48px}th.mat-header-cell{text-align:left}[dir=rtl] th.mat-header-cell{text-align:right}th.mat-header-cell,td.mat-cell,td.mat-footer-cell{padding:0;border-bottom-width:1px;border-bottom-style:solid}th.mat-header-cell:first-of-type,td.mat-cell:first-of-type,td.mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] th.mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] td.mat-cell:first-of-type:not(:only-of-type),[dir=rtl] td.mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}th.mat-header-cell:last-of-type,td.mat-cell:last-of-type,td.mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] th.mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] td.mat-cell:last-of-type:not(:only-of-type),[dir=rtl] td.mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}.mat-table-sticky{position:-webkit-sticky !important;position:sticky !important}.mat-table-fixed-layout{table-layout:fixed}\n"]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Cell definition for the mat-table.
       * Captures the template of a column's data row cell as well as cell-specific properties.
       */


      var MatCellDef = /*#__PURE__*/function (_angular_cdk_table__W2) {
        _inherits2(MatCellDef, _angular_cdk_table__W2);

        var _super3 = _createSuper(MatCellDef);

        function MatCellDef() {
          _classCallCheck2(this, MatCellDef);

          return _super3.apply(this, arguments);
        }

        return MatCellDef;
      }(_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkCellDef"]);

      MatCellDef.ɵfac = function MatCellDef_Factory(t) {
        return ɵMatCellDef_BaseFactory(t || MatCellDef);
      };

      MatCellDef.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatCellDef,
        selectors: [["", "matCellDef", ""]],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkCellDef"],
          useExisting: MatCellDef
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      var ɵMatCellDef_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](MatCellDef);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatCellDef, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[matCellDef]',
            providers: [{
              provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkCellDef"],
              useExisting: MatCellDef
            }]
          }]
        }], null, null);
      })();
      /**
       * Header cell definition for the mat-table.
       * Captures the template of a column's header cell and as well as cell-specific properties.
       */


      var MatHeaderCellDef = /*#__PURE__*/function (_angular_cdk_table__W3) {
        _inherits2(MatHeaderCellDef, _angular_cdk_table__W3);

        var _super4 = _createSuper(MatHeaderCellDef);

        function MatHeaderCellDef() {
          _classCallCheck2(this, MatHeaderCellDef);

          return _super4.apply(this, arguments);
        }

        return MatHeaderCellDef;
      }(_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkHeaderCellDef"]);

      MatHeaderCellDef.ɵfac = function MatHeaderCellDef_Factory(t) {
        return ɵMatHeaderCellDef_BaseFactory(t || MatHeaderCellDef);
      };

      MatHeaderCellDef.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatHeaderCellDef,
        selectors: [["", "matHeaderCellDef", ""]],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkHeaderCellDef"],
          useExisting: MatHeaderCellDef
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      var ɵMatHeaderCellDef_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](MatHeaderCellDef);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatHeaderCellDef, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[matHeaderCellDef]',
            providers: [{
              provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkHeaderCellDef"],
              useExisting: MatHeaderCellDef
            }]
          }]
        }], null, null);
      })();
      /**
       * Footer cell definition for the mat-table.
       * Captures the template of a column's footer cell and as well as cell-specific properties.
       */


      var MatFooterCellDef = /*#__PURE__*/function (_angular_cdk_table__W4) {
        _inherits2(MatFooterCellDef, _angular_cdk_table__W4);

        var _super5 = _createSuper(MatFooterCellDef);

        function MatFooterCellDef() {
          _classCallCheck2(this, MatFooterCellDef);

          return _super5.apply(this, arguments);
        }

        return MatFooterCellDef;
      }(_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkFooterCellDef"]);

      MatFooterCellDef.ɵfac = function MatFooterCellDef_Factory(t) {
        return ɵMatFooterCellDef_BaseFactory(t || MatFooterCellDef);
      };

      MatFooterCellDef.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatFooterCellDef,
        selectors: [["", "matFooterCellDef", ""]],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkFooterCellDef"],
          useExisting: MatFooterCellDef
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      var ɵMatFooterCellDef_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](MatFooterCellDef);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatFooterCellDef, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[matFooterCellDef]',
            providers: [{
              provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkFooterCellDef"],
              useExisting: MatFooterCellDef
            }]
          }]
        }], null, null);
      })();
      /**
       * Column definition for the mat-table.
       * Defines a set of cells available for a table column.
       */


      var MatColumnDef = /*#__PURE__*/function (_angular_cdk_table__W5) {
        _inherits2(MatColumnDef, _angular_cdk_table__W5);

        var _super6 = _createSuper(MatColumnDef);

        function MatColumnDef() {
          _classCallCheck2(this, MatColumnDef);

          return _super6.apply(this, arguments);
        }

        _createClass2(MatColumnDef, [{
          key: "name",
          get:
          /** Unique name for this column. */
          function get() {
            return this._name;
          },
          set: function set(name) {
            this._setNameInput(name);
          }
          /**
           * Add "mat-column-" prefix in addition to "cdk-column-" prefix.
           * In the future, this will only add "mat-column-" and columnCssClassName
           * will change from type string[] to string.
           * @docs-private
           */

        }, {
          key: "_updateColumnCssClassName",
          value: function _updateColumnCssClassName() {
            _get2(_getPrototypeOf2(MatColumnDef.prototype), "_updateColumnCssClassName", this).call(this);

            this._columnCssClassName.push("mat-column-".concat(this.cssClassFriendlyName));
          }
        }]);

        return MatColumnDef;
      }(_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkColumnDef"]);

      MatColumnDef.ɵfac = function MatColumnDef_Factory(t) {
        return ɵMatColumnDef_BaseFactory(t || MatColumnDef);
      };

      MatColumnDef.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatColumnDef,
        selectors: [["", "matColumnDef", ""]],
        inputs: {
          sticky: "sticky",
          name: ["matColumnDef", "name"]
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkColumnDef"],
          useExisting: MatColumnDef
        }, {
          provide: 'MAT_SORT_HEADER_COLUMN_DEF',
          useExisting: MatColumnDef
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });
      MatColumnDef.propDecorators = {
        name: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['matColumnDef']
        }]
      };

      var ɵMatColumnDef_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](MatColumnDef);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatColumnDef, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[matColumnDef]',
            inputs: ['sticky'],
            providers: [{
              provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkColumnDef"],
              useExisting: MatColumnDef
            }, {
              provide: 'MAT_SORT_HEADER_COLUMN_DEF',
              useExisting: MatColumnDef
            }]
          }]
        }], null, {
          name: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['matColumnDef']
          }]
        });
      })();
      /** Header cell template container that adds the right classes and role. */


      var MatHeaderCell = /*#__PURE__*/function (_angular_cdk_table__W6) {
        _inherits2(MatHeaderCell, _angular_cdk_table__W6);

        var _super7 = _createSuper(MatHeaderCell);

        function MatHeaderCell() {
          _classCallCheck2(this, MatHeaderCell);

          return _super7.apply(this, arguments);
        }

        return MatHeaderCell;
      }(_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkHeaderCell"]);

      MatHeaderCell.ɵfac = function MatHeaderCell_Factory(t) {
        return ɵMatHeaderCell_BaseFactory(t || MatHeaderCell);
      };

      MatHeaderCell.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatHeaderCell,
        selectors: [["mat-header-cell"], ["th", "mat-header-cell", ""]],
        hostAttrs: ["role", "columnheader", 1, "mat-header-cell"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      var ɵMatHeaderCell_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](MatHeaderCell);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatHeaderCell, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'mat-header-cell, th[mat-header-cell]',
            host: {
              'class': 'mat-header-cell',
              'role': 'columnheader'
            }
          }]
        }], null, null);
      })();
      /** Footer cell template container that adds the right classes and role. */


      var MatFooterCell = /*#__PURE__*/function (_angular_cdk_table__W7) {
        _inherits2(MatFooterCell, _angular_cdk_table__W7);

        var _super8 = _createSuper(MatFooterCell);

        function MatFooterCell() {
          _classCallCheck2(this, MatFooterCell);

          return _super8.apply(this, arguments);
        }

        return MatFooterCell;
      }(_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkFooterCell"]);

      MatFooterCell.ɵfac = function MatFooterCell_Factory(t) {
        return ɵMatFooterCell_BaseFactory(t || MatFooterCell);
      };

      MatFooterCell.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatFooterCell,
        selectors: [["mat-footer-cell"], ["td", "mat-footer-cell", ""]],
        hostAttrs: ["role", "gridcell", 1, "mat-footer-cell"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      var ɵMatFooterCell_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](MatFooterCell);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatFooterCell, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'mat-footer-cell, td[mat-footer-cell]',
            host: {
              'class': 'mat-footer-cell',
              'role': 'gridcell'
            }
          }]
        }], null, null);
      })();
      /** Cell template container that adds the right classes and role. */


      var MatCell = /*#__PURE__*/function (_angular_cdk_table__W8) {
        _inherits2(MatCell, _angular_cdk_table__W8);

        var _super9 = _createSuper(MatCell);

        function MatCell() {
          _classCallCheck2(this, MatCell);

          return _super9.apply(this, arguments);
        }

        return MatCell;
      }(_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkCell"]);

      MatCell.ɵfac = function MatCell_Factory(t) {
        return ɵMatCell_BaseFactory(t || MatCell);
      };

      MatCell.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatCell,
        selectors: [["mat-cell"], ["td", "mat-cell", ""]],
        hostAttrs: ["role", "gridcell", 1, "mat-cell"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      var ɵMatCell_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](MatCell);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatCell, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'mat-cell, td[mat-cell]',
            host: {
              'class': 'mat-cell',
              'role': 'gridcell'
            }
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Header row definition for the mat-table.
       * Captures the header row's template and other header properties such as the columns to display.
       */


      var MatHeaderRowDef = /*#__PURE__*/function (_angular_cdk_table__W9) {
        _inherits2(MatHeaderRowDef, _angular_cdk_table__W9);

        var _super10 = _createSuper(MatHeaderRowDef);

        function MatHeaderRowDef() {
          _classCallCheck2(this, MatHeaderRowDef);

          return _super10.apply(this, arguments);
        }

        return MatHeaderRowDef;
      }(_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkHeaderRowDef"]);

      MatHeaderRowDef.ɵfac = function MatHeaderRowDef_Factory(t) {
        return ɵMatHeaderRowDef_BaseFactory(t || MatHeaderRowDef);
      };

      MatHeaderRowDef.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatHeaderRowDef,
        selectors: [["", "matHeaderRowDef", ""]],
        inputs: {
          columns: ["matHeaderRowDef", "columns"],
          sticky: ["matHeaderRowDefSticky", "sticky"]
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkHeaderRowDef"],
          useExisting: MatHeaderRowDef
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      var ɵMatHeaderRowDef_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](MatHeaderRowDef);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatHeaderRowDef, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[matHeaderRowDef]',
            providers: [{
              provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkHeaderRowDef"],
              useExisting: MatHeaderRowDef
            }],
            inputs: ['columns: matHeaderRowDef', 'sticky: matHeaderRowDefSticky']
          }]
        }], null, null);
      })();
      /**
       * Footer row definition for the mat-table.
       * Captures the footer row's template and other footer properties such as the columns to display.
       */


      var MatFooterRowDef = /*#__PURE__*/function (_angular_cdk_table__W10) {
        _inherits2(MatFooterRowDef, _angular_cdk_table__W10);

        var _super11 = _createSuper(MatFooterRowDef);

        function MatFooterRowDef() {
          _classCallCheck2(this, MatFooterRowDef);

          return _super11.apply(this, arguments);
        }

        return MatFooterRowDef;
      }(_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkFooterRowDef"]);

      MatFooterRowDef.ɵfac = function MatFooterRowDef_Factory(t) {
        return ɵMatFooterRowDef_BaseFactory(t || MatFooterRowDef);
      };

      MatFooterRowDef.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatFooterRowDef,
        selectors: [["", "matFooterRowDef", ""]],
        inputs: {
          columns: ["matFooterRowDef", "columns"],
          sticky: ["matFooterRowDefSticky", "sticky"]
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkFooterRowDef"],
          useExisting: MatFooterRowDef
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      var ɵMatFooterRowDef_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](MatFooterRowDef);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatFooterRowDef, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[matFooterRowDef]',
            providers: [{
              provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkFooterRowDef"],
              useExisting: MatFooterRowDef
            }],
            inputs: ['columns: matFooterRowDef', 'sticky: matFooterRowDefSticky']
          }]
        }], null, null);
      })();
      /**
       * Data row definition for the mat-table.
       * Captures the data row's template and other properties such as the columns to display and
       * a when predicate that describes when this row should be used.
       */


      var MatRowDef = /*#__PURE__*/function (_angular_cdk_table__W11) {
        _inherits2(MatRowDef, _angular_cdk_table__W11);

        var _super12 = _createSuper(MatRowDef);

        function MatRowDef() {
          _classCallCheck2(this, MatRowDef);

          return _super12.apply(this, arguments);
        }

        return MatRowDef;
      }(_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkRowDef"]);

      MatRowDef.ɵfac = function MatRowDef_Factory(t) {
        return ɵMatRowDef_BaseFactory(t || MatRowDef);
      };

      MatRowDef.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatRowDef,
        selectors: [["", "matRowDef", ""]],
        inputs: {
          columns: ["matRowDefColumns", "columns"],
          when: ["matRowDefWhen", "when"]
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkRowDef"],
          useExisting: MatRowDef
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      var ɵMatRowDef_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](MatRowDef);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatRowDef, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[matRowDef]',
            providers: [{
              provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkRowDef"],
              useExisting: MatRowDef
            }],
            inputs: ['columns: matRowDefColumns', 'when: matRowDefWhen']
          }]
        }], null, null);
      })();
      /** Header template container that contains the cell outlet. Adds the right class and role. */


      var MatHeaderRow = /*#__PURE__*/function (_angular_cdk_table__W12) {
        _inherits2(MatHeaderRow, _angular_cdk_table__W12);

        var _super13 = _createSuper(MatHeaderRow);

        function MatHeaderRow() {
          _classCallCheck2(this, MatHeaderRow);

          return _super13.apply(this, arguments);
        }

        return MatHeaderRow;
      }(_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkHeaderRow"]);

      MatHeaderRow.ɵfac = function MatHeaderRow_Factory(t) {
        return ɵMatHeaderRow_BaseFactory(t || MatHeaderRow);
      };

      MatHeaderRow.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: MatHeaderRow,
        selectors: [["mat-header-row"], ["tr", "mat-header-row", ""]],
        hostAttrs: ["role", "row", 1, "mat-header-row"],
        exportAs: ["matHeaderRow"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkHeaderRow"],
          useExisting: MatHeaderRow
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]],
        decls: 1,
        vars: 0,
        consts: [["cdkCellOutlet", ""]],
        template: function MatHeaderRow_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainer"](0, 0);
          }
        },
        directives: [_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkCellOutlet"]],
        encapsulation: 2
      });

      var ɵMatHeaderRow_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](MatHeaderRow);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatHeaderRow, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'mat-header-row, tr[mat-header-row]',
            template: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CDK_ROW_TEMPLATE"],
            host: {
              'class': 'mat-header-row',
              'role': 'row'
            },
            // See note on CdkTable for explanation on why this uses the default change detection strategy.
            // tslint:disable-next-line:validate-decorators
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].Default,
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            exportAs: 'matHeaderRow',
            providers: [{
              provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkHeaderRow"],
              useExisting: MatHeaderRow
            }]
          }]
        }], null, null);
      })();
      /** Footer template container that contains the cell outlet. Adds the right class and role. */


      var MatFooterRow = /*#__PURE__*/function (_angular_cdk_table__W13) {
        _inherits2(MatFooterRow, _angular_cdk_table__W13);

        var _super14 = _createSuper(MatFooterRow);

        function MatFooterRow() {
          _classCallCheck2(this, MatFooterRow);

          return _super14.apply(this, arguments);
        }

        return MatFooterRow;
      }(_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkFooterRow"]);

      MatFooterRow.ɵfac = function MatFooterRow_Factory(t) {
        return ɵMatFooterRow_BaseFactory(t || MatFooterRow);
      };

      MatFooterRow.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: MatFooterRow,
        selectors: [["mat-footer-row"], ["tr", "mat-footer-row", ""]],
        hostAttrs: ["role", "row", 1, "mat-footer-row"],
        exportAs: ["matFooterRow"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkFooterRow"],
          useExisting: MatFooterRow
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]],
        decls: 1,
        vars: 0,
        consts: [["cdkCellOutlet", ""]],
        template: function MatFooterRow_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainer"](0, 0);
          }
        },
        directives: [_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkCellOutlet"]],
        encapsulation: 2
      });

      var ɵMatFooterRow_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](MatFooterRow);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatFooterRow, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'mat-footer-row, tr[mat-footer-row]',
            template: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CDK_ROW_TEMPLATE"],
            host: {
              'class': 'mat-footer-row',
              'role': 'row'
            },
            // See note on CdkTable for explanation on why this uses the default change detection strategy.
            // tslint:disable-next-line:validate-decorators
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].Default,
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            exportAs: 'matFooterRow',
            providers: [{
              provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkFooterRow"],
              useExisting: MatFooterRow
            }]
          }]
        }], null, null);
      })();
      /** Data row template container that contains the cell outlet. Adds the right class and role. */


      var MatRow = /*#__PURE__*/function (_angular_cdk_table__W14) {
        _inherits2(MatRow, _angular_cdk_table__W14);

        var _super15 = _createSuper(MatRow);

        function MatRow() {
          _classCallCheck2(this, MatRow);

          return _super15.apply(this, arguments);
        }

        return MatRow;
      }(_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkRow"]);

      MatRow.ɵfac = function MatRow_Factory(t) {
        return ɵMatRow_BaseFactory(t || MatRow);
      };

      MatRow.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: MatRow,
        selectors: [["mat-row"], ["tr", "mat-row", ""]],
        hostAttrs: ["role", "row", 1, "mat-row"],
        exportAs: ["matRow"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkRow"],
          useExisting: MatRow
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]],
        decls: 1,
        vars: 0,
        consts: [["cdkCellOutlet", ""]],
        template: function MatRow_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainer"](0, 0);
          }
        },
        directives: [_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkCellOutlet"]],
        encapsulation: 2
      });

      var ɵMatRow_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](MatRow);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatRow, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'mat-row, tr[mat-row]',
            template: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CDK_ROW_TEMPLATE"],
            host: {
              'class': 'mat-row',
              'role': 'row'
            },
            // See note on CdkTable for explanation on why this uses the default change detection strategy.
            // tslint:disable-next-line:validate-decorators
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].Default,
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            exportAs: 'matRow',
            providers: [{
              provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkRow"],
              useExisting: MatRow
            }]
          }]
        }], null, null);
      })();
      /** Row that can be used to display a message when no data is shown in the table. */


      var MatNoDataRow = /*#__PURE__*/function (_angular_cdk_table__W15) {
        _inherits2(MatNoDataRow, _angular_cdk_table__W15);

        var _super16 = _createSuper(MatNoDataRow);

        function MatNoDataRow() {
          _classCallCheck2(this, MatNoDataRow);

          return _super16.apply(this, arguments);
        }

        return MatNoDataRow;
      }(_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkNoDataRow"]);

      MatNoDataRow.ɵfac = function MatNoDataRow_Factory(t) {
        return ɵMatNoDataRow_BaseFactory(t || MatNoDataRow);
      };

      MatNoDataRow.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatNoDataRow,
        selectors: [["ng-template", "matNoDataRow", ""]],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkNoDataRow"],
          useExisting: MatNoDataRow
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      var ɵMatNoDataRow_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](MatNoDataRow);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatNoDataRow, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'ng-template[matNoDataRow]',
            providers: [{
              provide: _angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkNoDataRow"],
              useExisting: MatNoDataRow
            }]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Column that simply shows text content for the header and row cells. Assumes that the table
       * is using the native table implementation (`<table>`).
       *
       * By default, the name of this column will be the header text and data property accessor.
       * The header text can be overridden with the `headerText` input. Cell values can be overridden with
       * the `dataAccessor` input. Change the text justification to the start or end using the `justify`
       * input.
       */


      var MatTextColumn = /*#__PURE__*/function (_angular_cdk_table__W16) {
        _inherits2(MatTextColumn, _angular_cdk_table__W16);

        var _super17 = _createSuper(MatTextColumn);

        function MatTextColumn() {
          _classCallCheck2(this, MatTextColumn);

          return _super17.apply(this, arguments);
        }

        return MatTextColumn;
      }(_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkTextColumn"]);

      MatTextColumn.ɵfac = function MatTextColumn_Factory(t) {
        return ɵMatTextColumn_BaseFactory(t || MatTextColumn);
      };

      MatTextColumn.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: MatTextColumn,
        selectors: [["mat-text-column"]],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]],
        decls: 3,
        vars: 0,
        consts: [["matColumnDef", ""], ["mat-header-cell", "", 3, "text-align", 4, "matHeaderCellDef"], ["mat-cell", "", 3, "text-align", 4, "matCellDef"], ["mat-header-cell", ""], ["mat-cell", ""]],
        template: function MatTextColumn_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerStart"](0, 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, MatTextColumn_th_1_Template, 2, 3, "th", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, MatTextColumn_td_2_Template, 2, 3, "td", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerEnd"]();
          }
        },
        directives: [MatColumnDef, MatHeaderCellDef, MatCellDef, MatHeaderCell, MatCell],
        encapsulation: 2
      });

      var ɵMatTextColumn_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](MatTextColumn);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatTextColumn, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'mat-text-column',
            template: "\n    <ng-container matColumnDef>\n      <th mat-header-cell *matHeaderCellDef [style.text-align]=\"justify\">\n        {{headerText}}\n      </th>\n      <td mat-cell *matCellDef=\"let data\" [style.text-align]=\"justify\">\n        {{dataAccessor(data, name)}}\n      </td>\n    </ng-container>\n  ",
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            // Change detection is intentionally not set to OnPush. This component's template will be provided
            // to the table to be inserted into its view. This is problematic when change detection runs since
            // the bindings in this template will be evaluated _after_ the table's view is evaluated, which
            // mean's the template in the table's view will not have the updated value (and in fact will cause
            // an ExpressionChangedAfterItHasBeenCheckedError).
            // tslint:disable-next-line:validate-decorators
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].Default
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var EXPORTED_DECLARATIONS = [// Table
      MatTable, // Template defs
      MatHeaderCellDef, MatHeaderRowDef, MatColumnDef, MatCellDef, MatRowDef, MatFooterCellDef, MatFooterRowDef, // Cell directives
      MatHeaderCell, MatCell, MatFooterCell, // Row directives
      MatHeaderRow, MatRow, MatFooterRow, MatNoDataRow, MatTextColumn];

      var MatTableModule = function MatTableModule() {
        _classCallCheck2(this, MatTableModule);
      };

      MatTableModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: MatTableModule
      });
      MatTableModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function MatTableModule_Factory(t) {
          return new (t || MatTableModule)();
        },
        imports: [[_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkTableModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatCommonModule"]], _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatCommonModule"]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](MatTableModule, {
          declarations: function declarations() {
            return [MatTable, MatHeaderCellDef, MatHeaderRowDef, MatColumnDef, MatCellDef, MatRowDef, MatFooterCellDef, MatFooterRowDef, MatHeaderCell, MatCell, MatFooterCell, MatHeaderRow, MatRow, MatFooterRow, MatNoDataRow, MatTextColumn];
          },
          imports: function imports() {
            return [_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkTableModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatCommonModule"]];
          },
          exports: function exports() {
            return [_angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatCommonModule"], MatTable, MatHeaderCellDef, MatHeaderRowDef, MatColumnDef, MatCellDef, MatRowDef, MatFooterCellDef, MatFooterRowDef, MatHeaderCell, MatCell, MatFooterCell, MatHeaderRow, MatRow, MatFooterRow, MatNoDataRow, MatTextColumn];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatTableModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            imports: [_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["CdkTableModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatCommonModule"]],
            exports: [_angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatCommonModule"], EXPORTED_DECLARATIONS],
            declarations: EXPORTED_DECLARATIONS
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Corresponds to `Number.MAX_SAFE_INTEGER`. Moved out into a variable here due to
       * flaky browser support and the value not being defined in Closure's typings.
       */


      var MAX_SAFE_INTEGER = 9007199254740991;
      /** Shared base class with MDC-based implementation. */

      var _MatTableDataSource = /*#__PURE__*/function (_angular_cdk_table__W17) {
        _inherits2(_MatTableDataSource, _angular_cdk_table__W17);

        var _super18 = _createSuper(_MatTableDataSource);

        function _MatTableDataSource() {
          var _this3;

          var initialData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];

          _classCallCheck2(this, _MatTableDataSource);

          _this3 = _super18.call(this);
          /** Stream emitting render data to the table (depends on ordered data changes). */

          _this3._renderData = new rxjs__WEBPACK_IMPORTED_MODULE_5__["BehaviorSubject"]([]);
          /** Stream that emits when a new filter string is set on the data source. */

          _this3._filter = new rxjs__WEBPACK_IMPORTED_MODULE_5__["BehaviorSubject"]('');
          /** Used to react to internal changes of the paginator that are made by the data source itself. */

          _this3._internalPageChanges = new rxjs__WEBPACK_IMPORTED_MODULE_5__["Subject"]();
          /**
           * Subscription to the changes that should trigger an update to the table's rendered rows, such
           * as filtering, sorting, pagination, or base data changes.
           */

          _this3._renderChangesSubscription = null;
          /**
           * Data accessor function that is used for accessing data properties for sorting through
           * the default sortData function.
           * This default function assumes that the sort header IDs (which defaults to the column name)
           * matches the data's properties (e.g. column Xyz represents data['Xyz']).
           * May be set to a custom function for different behavior.
           * @param data Data object that is being accessed.
           * @param sortHeaderId The name of the column that represents the data.
           */

          _this3.sortingDataAccessor = function (data, sortHeaderId) {
            var value = data[sortHeaderId];

            if (Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_4__["_isNumberValue"])(value)) {
              var numberValue = Number(value); // Numbers beyond `MAX_SAFE_INTEGER` can't be compared reliably so we
              // leave them as strings. For more info: https://goo.gl/y5vbSg

              return numberValue < MAX_SAFE_INTEGER ? numberValue : value;
            }

            return value;
          };
          /**
           * Gets a sorted copy of the data array based on the state of the MatSort. Called
           * after changes are made to the filtered data or when sort changes are emitted from MatSort.
           * By default, the function retrieves the active sort and its direction and compares data
           * by retrieving data using the sortingDataAccessor. May be overridden for a custom implementation
           * of data ordering.
           * @param data The array of data that should be sorted.
           * @param sort The connected MatSort that holds the current sort state.
           */


          _this3.sortData = function (data, sort) {
            var active = sort.active;
            var direction = sort.direction;

            if (!active || direction == '') {
              return data;
            }

            return data.sort(function (a, b) {
              var valueA = _this3.sortingDataAccessor(a, active);

              var valueB = _this3.sortingDataAccessor(b, active); // If there are data in the column that can be converted to a number,
              // it must be ensured that the rest of the data
              // is of the same type so as not to order incorrectly.


              var valueAType = typeof valueA;
              var valueBType = typeof valueB;

              if (valueAType !== valueBType) {
                if (valueAType === 'number') {
                  valueA += '';
                }

                if (valueBType === 'number') {
                  valueB += '';
                }
              } // If both valueA and valueB exist (truthy), then compare the two. Otherwise, check if
              // one value exists while the other doesn't. In this case, existing value should come last.
              // This avoids inconsistent results when comparing values to undefined/null.
              // If neither value exists, return 0 (equal).


              var comparatorResult = 0;

              if (valueA != null && valueB != null) {
                // Check if one value is greater than the other; if equal, comparatorResult should remain 0.
                if (valueA > valueB) {
                  comparatorResult = 1;
                } else if (valueA < valueB) {
                  comparatorResult = -1;
                }
              } else if (valueA != null) {
                comparatorResult = 1;
              } else if (valueB != null) {
                comparatorResult = -1;
              }

              return comparatorResult * (direction == 'asc' ? 1 : -1);
            });
          };
          /**
           * Checks if a data object matches the data source's filter string. By default, each data object
           * is converted to a string of its properties and returns true if the filter has
           * at least one occurrence in that string. By default, the filter string has its whitespace
           * trimmed and the match is case-insensitive. May be overridden for a custom implementation of
           * filter matching.
           * @param data Data object used to check against the filter.
           * @param filter Filter string that has been set on the data source.
           * @returns Whether the filter matches against the data
           */


          _this3.filterPredicate = function (data, filter) {
            // Transform the data into a lowercase string of all property values.
            var dataStr = Object.keys(data).reduce(function (currentTerm, key) {
              // Use an obscure Unicode character to delimit the words in the concatenated string.
              // This avoids matches where the values of two columns combined will match the user's query
              // (e.g. `Flute` and `Stop` will match `Test`). The character is intended to be something
              // that has a very low chance of being typed in by somebody in a text field. This one in
              // particular is "White up-pointing triangle with dot" from
              // https://en.wikipedia.org/wiki/List_of_Unicode_characters
              return currentTerm + data[key] + '◬';
            }, '').toLowerCase(); // Transform the filter by converting it to lowercase and removing whitespace.

            var transformedFilter = filter.trim().toLowerCase();
            return dataStr.indexOf(transformedFilter) != -1;
          };

          _this3._data = new rxjs__WEBPACK_IMPORTED_MODULE_5__["BehaviorSubject"](initialData);

          _this3._updateChangeSubscription();

          return _this3;
        }
        /** Array of data that should be rendered by the table, where each object represents one row. */


        _createClass2(_MatTableDataSource, [{
          key: "data",
          get: function get() {
            return this._data.value;
          },
          set: function set(data) {
            this._data.next(data);
          }
          /**
           * Filter term that should be used to filter out objects from the data array. To override how
           * data objects match to this filter string, provide a custom function for filterPredicate.
           */

        }, {
          key: "filter",
          get: function get() {
            return this._filter.value;
          },
          set: function set(filter) {
            this._filter.next(filter);
          }
          /**
           * Instance of the MatSort directive used by the table to control its sorting. Sort changes
           * emitted by the MatSort will trigger an update to the table's rendered data.
           */

        }, {
          key: "sort",
          get: function get() {
            return this._sort;
          },
          set: function set(sort) {
            this._sort = sort;

            this._updateChangeSubscription();
          }
          /**
           * Instance of the MatPaginator component used by the table to control what page of the data is
           * displayed. Page changes emitted by the MatPaginator will trigger an update to the
           * table's rendered data.
           *
           * Note that the data source uses the paginator's properties to calculate which page of data
           * should be displayed. If the paginator receives its properties as template inputs,
           * e.g. `[pageLength]=100` or `[pageIndex]=1`, then be sure that the paginator's view has been
           * initialized before assigning it to this data source.
           */

        }, {
          key: "paginator",
          get: function get() {
            return this._paginator;
          },
          set: function set(paginator) {
            this._paginator = paginator;

            this._updateChangeSubscription();
          }
          /**
           * Subscribe to changes that should trigger an update to the table's rendered rows. When the
           * changes occur, process the current state of the filter, sort, and pagination along with
           * the provided base data and send it to the table for rendering.
           */

        }, {
          key: "_updateChangeSubscription",
          value: function _updateChangeSubscription() {
            var _this4 = this;

            var _a; // Sorting and/or pagination should be watched if MatSort and/or MatPaginator are provided.
            // The events should emit whenever the component emits a change or initializes, or if no
            // component is provided, a stream with just a null event should be provided.
            // The `sortChange` and `pageChange` acts as a signal to the combineLatests below so that the
            // pipeline can progress to the next step. Note that the value from these streams are not used,
            // they purely act as a signal to progress in the pipeline.


            var sortChange = this._sort ? Object(rxjs__WEBPACK_IMPORTED_MODULE_5__["merge"])(this._sort.sortChange, this._sort.initialized) : Object(rxjs__WEBPACK_IMPORTED_MODULE_5__["of"])(null);
            var pageChange = this._paginator ? Object(rxjs__WEBPACK_IMPORTED_MODULE_5__["merge"])(this._paginator.page, this._internalPageChanges, this._paginator.initialized) : Object(rxjs__WEBPACK_IMPORTED_MODULE_5__["of"])(null);
            var dataStream = this._data; // Watch for base data or filter changes to provide a filtered set of data.

            var filteredData = Object(rxjs__WEBPACK_IMPORTED_MODULE_5__["combineLatest"])([dataStream, this._filter]).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_6__["map"])(function (_ref2) {
              var _ref3 = _slicedToArray(_ref2, 1),
                  data = _ref3[0];

              return _this4._filterData(data);
            })); // Watch for filtered data or sort changes to provide an ordered set of data.

            var orderedData = Object(rxjs__WEBPACK_IMPORTED_MODULE_5__["combineLatest"])([filteredData, sortChange]).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_6__["map"])(function (_ref4) {
              var _ref5 = _slicedToArray(_ref4, 1),
                  data = _ref5[0];

              return _this4._orderData(data);
            })); // Watch for ordered data or page changes to provide a paged set of data.

            var paginatedData = Object(rxjs__WEBPACK_IMPORTED_MODULE_5__["combineLatest"])([orderedData, pageChange]).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_6__["map"])(function (_ref6) {
              var _ref7 = _slicedToArray(_ref6, 1),
                  data = _ref7[0];

              return _this4._pageData(data);
            })); // Watched for paged data changes and send the result to the table to render.

            (_a = this._renderChangesSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
            this._renderChangesSubscription = paginatedData.subscribe(function (data) {
              return _this4._renderData.next(data);
            });
          }
          /**
           * Returns a filtered data array where each filter object contains the filter string within
           * the result of the filterTermAccessor function. If no filter is set, returns the data array
           * as provided.
           */

        }, {
          key: "_filterData",
          value: function _filterData(data) {
            var _this5 = this;

            // If there is a filter string, filter out data that does not contain it.
            // Each data object is converted to a string using the function defined by filterTermAccessor.
            // May be overridden for customization.
            this.filteredData = this.filter == null || this.filter === '' ? data : data.filter(function (obj) {
              return _this5.filterPredicate(obj, _this5.filter);
            });

            if (this.paginator) {
              this._updatePaginator(this.filteredData.length);
            }

            return this.filteredData;
          }
          /**
           * Returns a sorted copy of the data if MatSort has a sort applied, otherwise just returns the
           * data array as provided. Uses the default data accessor for data lookup, unless a
           * sortDataAccessor function is defined.
           */

        }, {
          key: "_orderData",
          value: function _orderData(data) {
            // If there is no active sort or direction, return the data without trying to sort.
            if (!this.sort) {
              return data;
            }

            return this.sortData(data.slice(), this.sort);
          }
          /**
           * Returns a paged slice of the provided data array according to the provided MatPaginator's page
           * index and length. If there is no paginator provided, returns the data array as provided.
           */

        }, {
          key: "_pageData",
          value: function _pageData(data) {
            if (!this.paginator) {
              return data;
            }

            var startIndex = this.paginator.pageIndex * this.paginator.pageSize;
            return data.slice(startIndex, startIndex + this.paginator.pageSize);
          }
          /**
           * Updates the paginator to reflect the length of the filtered data, and makes sure that the page
           * index does not exceed the paginator's last page. Values are changed in a resolved promise to
           * guard against making property changes within a round of change detection.
           */

        }, {
          key: "_updatePaginator",
          value: function _updatePaginator(filteredDataLength) {
            var _this6 = this;

            Promise.resolve().then(function () {
              var paginator = _this6.paginator;

              if (!paginator) {
                return;
              }

              paginator.length = filteredDataLength; // If the page index is set beyond the page, reduce it to the last page.

              if (paginator.pageIndex > 0) {
                var lastPageIndex = Math.ceil(paginator.length / paginator.pageSize) - 1 || 0;
                var newPageIndex = Math.min(paginator.pageIndex, lastPageIndex);

                if (newPageIndex !== paginator.pageIndex) {
                  paginator.pageIndex = newPageIndex; // Since the paginator only emits after user-generated changes,
                  // we need our own stream so we know to should re-render the data.

                  _this6._internalPageChanges.next();
                }
              }
            });
          }
          /**
           * Used by the MatTable. Called when it connects to the data source.
           * @docs-private
           */

        }, {
          key: "connect",
          value: function connect() {
            if (!this._renderChangesSubscription) {
              this._updateChangeSubscription();
            }

            return this._renderData;
          }
          /**
           * Used by the MatTable. Called when it disconnects from the data source.
           * @docs-private
           */

        }, {
          key: "disconnect",
          value: function disconnect() {
            var _a;

            (_a = this._renderChangesSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
            this._renderChangesSubscription = null;
          }
        }]);

        return _MatTableDataSource;
      }(_angular_cdk_table__WEBPACK_IMPORTED_MODULE_1__["DataSource"]);
      /**
       * Data source that accepts a client-side data array and includes native support of filtering,
       * sorting (using MatSort), and pagination (using MatPaginator).
       *
       * Allows for sort customization by overriding sortingDataAccessor, which defines how data
       * properties are accessed. Also allows for filter customization by overriding filterTermAccessor,
       * which defines how row data is converted to a string for filter matching.
       *
       * **Note:** This class is meant to be a simple data source to help you get started. As such
       * it isn't equipped to handle some more advanced cases like robust i18n support or server-side
       * interactions. If your app needs to support more advanced use cases, consider implementing your
       * own `DataSource`.
       */


      var MatTableDataSource = /*#__PURE__*/function (_MatTableDataSource2) {
        _inherits2(MatTableDataSource, _MatTableDataSource2);

        var _super19 = _createSuper(MatTableDataSource);

        function MatTableDataSource() {
          _classCallCheck2(this, MatTableDataSource);

          return _super19.apply(this, arguments);
        }

        return MatTableDataSource;
      }(_MatTableDataSource);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=table.js.map

      /***/

    },

    /***/
    "+OK2":
    /*!*************************************************!*\
      !*** ./node_modules/aws-sdk/lib/browserHmac.js ***!
      \*************************************************/

    /*! no static exports found */

    /***/
    function OK2(module, exports, __webpack_require__) {
      var hashUtils = __webpack_require__(
      /*! ./browserHashUtils */
      "oGmC");
      /**
       * @api private
       */


      function Hmac(hashCtor, secret) {
        this.hash = new hashCtor();
        this.outer = new hashCtor();
        var inner = bufferFromSecret(hashCtor, secret);
        var outer = new Uint8Array(hashCtor.BLOCK_SIZE);
        outer.set(inner);

        for (var i = 0; i < hashCtor.BLOCK_SIZE; i++) {
          inner[i] ^= 0x36;
          outer[i] ^= 0x5c;
        }

        this.hash.update(inner);
        this.outer.update(outer); // Zero out the copied key buffer.

        for (var i = 0; i < inner.byteLength; i++) {
          inner[i] = 0;
        }
      }
      /**
       * @api private
       */


      module.exports = exports = Hmac;

      Hmac.prototype.update = function (toHash) {
        if (hashUtils.isEmptyData(toHash) || this.error) {
          return this;
        }

        try {
          this.hash.update(hashUtils.convertToBuffer(toHash));
        } catch (e) {
          this.error = e;
        }

        return this;
      };

      Hmac.prototype.digest = function (encoding) {
        if (!this.outer.finished) {
          this.outer.update(this.hash.digest());
        }

        return this.outer.digest(encoding);
      };

      function bufferFromSecret(hashCtor, secret) {
        var input = hashUtils.convertToBuffer(secret);

        if (input.byteLength > hashCtor.BLOCK_SIZE) {
          var bufferHash = new hashCtor();
          bufferHash.update(input);
          input = bufferHash.digest();
        }

        var buffer = new Uint8Array(hashCtor.BLOCK_SIZE);
        buffer.set(input);
        return buffer;
      }
      /***/

    },

    /***/
    "+Vou":
    /*!*************************************************!*\
      !*** ./node_modules/zone.js/dist/zone-error.js ***!
      \*************************************************/

    /*! no static exports found */

    /***/
    function Vou(module, exports, __webpack_require__) {
      var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;
      /**
      * @license Angular v9.1.0-next.4+61.sha-e552591.with-local-changes
      * (c) 2010-2020 Google LLC. https://angular.io/
      * License: MIT
      */


      (function (factory) {
        true ? !(__WEBPACK_AMD_DEFINE_FACTORY__ = factory, __WEBPACK_AMD_DEFINE_RESULT__ = typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? __WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module) : __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : undefined;
      })(function () {
        'use strict';
        /**
         * @license
         * Copyright Google Inc. All Rights Reserved.
         *
         * Use of this source code is governed by an MIT-style license that can be
         * found in the LICENSE file at https://angular.io/license
         */

        /**
         * @fileoverview
         * @suppress {globalThis,undefinedVars}
         */

        Zone.__load_patch('Error', function (global, Zone, api) {
          /*
           * This code patches Error so that:
           *   - It ignores un-needed stack frames.
           *   - It Shows the associated Zone for reach frame.
           */
          var blacklistedStackFramesSymbol = api.symbol('blacklistedStackFrames');
          var NativeError = global[api.symbol('Error')] = global['Error']; // Store the frames which should be removed from the stack frames

          var blackListedStackFrames = {}; // We must find the frame where Error was created, otherwise we assume we don't understand stack

          var zoneAwareFrame1;
          var zoneAwareFrame2;
          var zoneAwareFrame1WithoutNew;
          var zoneAwareFrame2WithoutNew;
          var zoneAwareFrame3WithoutNew;
          global['Error'] = ZoneAwareError;
          var stackRewrite = 'stackRewrite';
          var blackListedStackFramesPolicy = global['__Zone_Error_BlacklistedStackFrames_policy'] || 'default';

          function buildZoneFrameNames(zoneFrame) {
            var zoneFrameName = {
              zoneName: zoneFrame.zone.name
            };
            var result = zoneFrameName;

            while (zoneFrame.parent) {
              zoneFrame = zoneFrame.parent;
              var parentZoneFrameName = {
                zoneName: zoneFrame.zone.name
              };
              zoneFrameName.parent = parentZoneFrameName;
              zoneFrameName = parentZoneFrameName;
            }

            return result;
          }

          function buildZoneAwareStackFrames(originalStack, zoneFrame, isZoneFrame) {
            if (isZoneFrame === void 0) {
              isZoneFrame = true;
            }

            var frames = originalStack.split('\n');
            var i = 0; // Find the first frame

            while (!(frames[i] === zoneAwareFrame1 || frames[i] === zoneAwareFrame2 || frames[i] === zoneAwareFrame1WithoutNew || frames[i] === zoneAwareFrame2WithoutNew || frames[i] === zoneAwareFrame3WithoutNew) && i < frames.length) {
              i++;
            }

            for (; i < frames.length && zoneFrame; i++) {
              var frame = frames[i];

              if (frame.trim()) {
                switch (blackListedStackFrames[frame]) {
                  case 0
                  /* blackList */
                  :
                    frames.splice(i, 1);
                    i--;
                    break;

                  case 1
                  /* transition */
                  :
                    if (zoneFrame.parent) {
                      // This is the special frame where zone changed. Print and process it accordingly
                      zoneFrame = zoneFrame.parent;
                    } else {
                      zoneFrame = null;
                    }

                    frames.splice(i, 1);
                    i--;
                    break;

                  default:
                    frames[i] += isZoneFrame ? " [" + zoneFrame.zone.name + "]" : " [" + zoneFrame.zoneName + "]";
                }
              }
            }

            return frames.join('\n');
          }
          /**
           * This is ZoneAwareError which processes the stack frame and cleans up extra frames as well as
           * adds zone information to it.
           */


          function ZoneAwareError() {
            var _this = this; // We always have to return native error otherwise the browser console will not work.


            var error = NativeError.apply(this, arguments); // Save original stack trace

            var originalStack = error['originalStack'] = error.stack; // Process the stack trace and rewrite the frames.

            if (ZoneAwareError[stackRewrite] && originalStack) {
              var zoneFrame = api.currentZoneFrame();

              if (blackListedStackFramesPolicy === 'lazy') {
                // don't handle stack trace now
                error[api.symbol('zoneFrameNames')] = buildZoneFrameNames(zoneFrame);
              } else if (blackListedStackFramesPolicy === 'default') {
                try {
                  error.stack = error.zoneAwareStack = buildZoneAwareStackFrames(originalStack, zoneFrame);
                } catch (e) {// ignore as some browsers don't allow overriding of stack
                }
              }
            }

            if (this instanceof NativeError && this.constructor != NativeError) {
              // We got called with a `new` operator AND we are subclass of ZoneAwareError
              // in that case we have to copy all of our properties to `this`.
              Object.keys(error).concat('stack', 'message').forEach(function (key) {
                var value = error[key];

                if (value !== undefined) {
                  try {
                    _this[key] = value;
                  } catch (e) {// ignore the assignment in case it is a setter and it throws.
                  }
                }
              });
              return this;
            }

            return error;
          } // Copy the prototype so that instanceof operator works as expected


          ZoneAwareError.prototype = NativeError.prototype;
          ZoneAwareError[blacklistedStackFramesSymbol] = blackListedStackFrames;
          ZoneAwareError[stackRewrite] = false;
          var zoneAwareStackSymbol = api.symbol('zoneAwareStack'); // try to define zoneAwareStack property when blackListed
          // policy is delay

          if (blackListedStackFramesPolicy === 'lazy') {
            Object.defineProperty(ZoneAwareError.prototype, 'zoneAwareStack', {
              configurable: true,
              enumerable: true,
              get: function get() {
                if (!this[zoneAwareStackSymbol]) {
                  this[zoneAwareStackSymbol] = buildZoneAwareStackFrames(this.originalStack, this[api.symbol('zoneFrameNames')], false);
                }

                return this[zoneAwareStackSymbol];
              },
              set: function set(newStack) {
                this.originalStack = newStack;
                this[zoneAwareStackSymbol] = buildZoneAwareStackFrames(this.originalStack, this[api.symbol('zoneFrameNames')], false);
              }
            });
          } // those properties need special handling


          var specialPropertyNames = ['stackTraceLimit', 'captureStackTrace', 'prepareStackTrace']; // those properties of NativeError should be set to ZoneAwareError

          var nativeErrorProperties = Object.keys(NativeError);

          if (nativeErrorProperties) {
            nativeErrorProperties.forEach(function (prop) {
              if (specialPropertyNames.filter(function (sp) {
                return sp === prop;
              }).length === 0) {
                Object.defineProperty(ZoneAwareError, prop, {
                  get: function get() {
                    return NativeError[prop];
                  },
                  set: function set(value) {
                    NativeError[prop] = value;
                  }
                });
              }
            });
          }

          if (NativeError.hasOwnProperty('stackTraceLimit')) {
            // Extend default stack limit as we will be removing few frames.
            NativeError.stackTraceLimit = Math.max(NativeError.stackTraceLimit, 15); // make sure that ZoneAwareError has the same property which forwards to NativeError.

            Object.defineProperty(ZoneAwareError, 'stackTraceLimit', {
              get: function get() {
                return NativeError.stackTraceLimit;
              },
              set: function set(value) {
                return NativeError.stackTraceLimit = value;
              }
            });
          }

          if (NativeError.hasOwnProperty('captureStackTrace')) {
            Object.defineProperty(ZoneAwareError, 'captureStackTrace', {
              // add named function here because we need to remove this
              // stack frame when prepareStackTrace below
              value: function zoneCaptureStackTrace(targetObject, constructorOpt) {
                NativeError.captureStackTrace(targetObject, constructorOpt);
              }
            });
          }

          var ZONE_CAPTURESTACKTRACE = 'zoneCaptureStackTrace';
          Object.defineProperty(ZoneAwareError, 'prepareStackTrace', {
            get: function get() {
              return NativeError.prepareStackTrace;
            },
            set: function set(value) {
              if (!value || typeof value !== 'function') {
                return NativeError.prepareStackTrace = value;
              }

              return NativeError.prepareStackTrace = function (error, structuredStackTrace) {
                // remove additional stack information from ZoneAwareError.captureStackTrace
                if (structuredStackTrace) {
                  for (var i = 0; i < structuredStackTrace.length; i++) {
                    var st = structuredStackTrace[i]; // remove the first function which name is zoneCaptureStackTrace

                    if (st.getFunctionName() === ZONE_CAPTURESTACKTRACE) {
                      structuredStackTrace.splice(i, 1);
                      break;
                    }
                  }
                }

                return value.call(this, error, structuredStackTrace);
              };
            }
          });

          if (blackListedStackFramesPolicy === 'disable') {
            // don't need to run detectZone to populate
            // blacklisted stack frames
            return;
          } // Now we need to populate the `blacklistedStackFrames` as well as find the
          // run/runGuarded/runTask frames. This is done by creating a detect zone and then threading
          // the execution through all of the above methods so that we can look at the stack trace and
          // find the frames of interest.


          var detectZone = Zone.current.fork({
            name: 'detect',
            onHandleError: function onHandleError(parentZD, current, target, error) {
              if (error.originalStack && Error === ZoneAwareError) {
                var frames_1 = error.originalStack.split(/\n/);
                var runFrame = false,
                    runGuardedFrame = false,
                    runTaskFrame = false;

                while (frames_1.length) {
                  var frame = frames_1.shift(); // On safari it is possible to have stack frame with no line number.
                  // This check makes sure that we don't filter frames on name only (must have
                  // line number or exact equals to `ZoneAwareError`)

                  if (/:\d+:\d+/.test(frame) || frame === 'ZoneAwareError') {
                    // Get rid of the path so that we don't accidentally find function name in path.
                    // In chrome the separator is `(` and `@` in FF and safari
                    // Chrome: at Zone.run (zone.js:100)
                    // Chrome: at Zone.run (http://localhost:9876/base/build/lib/zone.js:100:24)
                    // FireFox: Zone.prototype.run@http://localhost:9876/base/build/lib/zone.js:101:24
                    // Safari: run@http://localhost:9876/base/build/lib/zone.js:101:24
                    var fnName = frame.split('(')[0].split('@')[0];
                    var frameType = 1
                    /* transition */
                    ;

                    if (fnName.indexOf('ZoneAwareError') !== -1) {
                      if (fnName.indexOf('new ZoneAwareError') !== -1) {
                        zoneAwareFrame1 = frame;
                        zoneAwareFrame2 = frame.replace('new ZoneAwareError', 'new Error.ZoneAwareError');
                      } else {
                        zoneAwareFrame1WithoutNew = frame;
                        zoneAwareFrame2WithoutNew = frame.replace('Error.', '');

                        if (frame.indexOf('Error.ZoneAwareError') === -1) {
                          zoneAwareFrame3WithoutNew = frame.replace('ZoneAwareError', 'Error.ZoneAwareError');
                        }
                      }

                      blackListedStackFrames[zoneAwareFrame2] = 0
                      /* blackList */
                      ;
                    }

                    if (fnName.indexOf('runGuarded') !== -1) {
                      runGuardedFrame = true;
                    } else if (fnName.indexOf('runTask') !== -1) {
                      runTaskFrame = true;
                    } else if (fnName.indexOf('run') !== -1) {
                      runFrame = true;
                    } else {
                      frameType = 0
                      /* blackList */
                      ;
                    }

                    blackListedStackFrames[frame] = frameType; // Once we find all of the frames we can stop looking.

                    if (runFrame && runGuardedFrame && runTaskFrame) {
                      ZoneAwareError[stackRewrite] = true;
                      break;
                    }
                  }
                }
              }

              return false;
            }
          }); // carefully constructor a stack frame which contains all of the frames of interest which
          // need to be detected and blacklisted.

          var childDetectZone = detectZone.fork({
            name: 'child',
            onScheduleTask: function onScheduleTask(delegate, curr, target, task) {
              return delegate.scheduleTask(target, task);
            },
            onInvokeTask: function onInvokeTask(delegate, curr, target, task, applyThis, applyArgs) {
              return delegate.invokeTask(target, task, applyThis, applyArgs);
            },
            onCancelTask: function onCancelTask(delegate, curr, target, task) {
              return delegate.cancelTask(target, task);
            },
            onInvoke: function onInvoke(delegate, curr, target, callback, applyThis, applyArgs, source) {
              return delegate.invoke(target, callback, applyThis, applyArgs, source);
            }
          }); // we need to detect all zone related frames, it will
          // exceed default stackTraceLimit, so we set it to
          // larger number here, and restore it after detect finish.
          // We cast through any so we don't need to depend on nodejs typings.

          var originalStackTraceLimit = Error.stackTraceLimit;
          Error.stackTraceLimit = 100; // we schedule event/micro/macro task, and invoke them
          // when onSchedule, so we can get all stack traces for
          // all kinds of tasks with one error thrown.

          childDetectZone.run(function () {
            childDetectZone.runGuarded(function () {
              var fakeTransitionTo = function fakeTransitionTo() {};

              childDetectZone.scheduleEventTask(blacklistedStackFramesSymbol, function () {
                childDetectZone.scheduleMacroTask(blacklistedStackFramesSymbol, function () {
                  childDetectZone.scheduleMicroTask(blacklistedStackFramesSymbol, function () {
                    throw new Error();
                  }, undefined, function (t) {
                    t._transitionTo = fakeTransitionTo;
                    t.invoke();
                  });
                  childDetectZone.scheduleMicroTask(blacklistedStackFramesSymbol, function () {
                    throw Error();
                  }, undefined, function (t) {
                    t._transitionTo = fakeTransitionTo;
                    t.invoke();
                  });
                }, undefined, function (t) {
                  t._transitionTo = fakeTransitionTo;
                  t.invoke();
                }, function () {});
              }, undefined, function (t) {
                t._transitionTo = fakeTransitionTo;
                t.invoke();
              }, function () {});
            });
          });
          Error.stackTraceLimit = originalStackTraceLimit;
        });
      });
      /***/

    },

    /***/
    "+qE3":
    /*!***************************************!*\
      !*** ./node_modules/events/events.js ***!
      \***************************************/

    /*! no static exports found */

    /***/
    function qE3(module, exports) {
      // Copyright Joyent, Inc. and other Node contributors.
      //
      // Permission is hereby granted, free of charge, to any person obtaining a
      // copy of this software and associated documentation files (the
      // "Software"), to deal in the Software without restriction, including
      // without limitation the rights to use, copy, modify, merge, publish,
      // distribute, sublicense, and/or sell copies of the Software, and to permit
      // persons to whom the Software is furnished to do so, subject to the
      // following conditions:
      //
      // The above copyright notice and this permission notice shall be included
      // in all copies or substantial portions of the Software.
      //
      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
      // USE OR OTHER DEALINGS IN THE SOFTWARE.
      function EventEmitter() {
        this._events = this._events || {};
        this._maxListeners = this._maxListeners || undefined;
      }

      module.exports = EventEmitter; // Backwards-compat with node 0.10.x

      EventEmitter.EventEmitter = EventEmitter;
      EventEmitter.prototype._events = undefined;
      EventEmitter.prototype._maxListeners = undefined; // By default EventEmitters will print a warning if more than 10 listeners are
      // added to it. This is a useful default which helps finding memory leaks.

      EventEmitter.defaultMaxListeners = 10; // Obviously not all Emitters should be limited to 10. This function allows
      // that to be increased. Set to zero for unlimited.

      EventEmitter.prototype.setMaxListeners = function (n) {
        if (!isNumber(n) || n < 0 || isNaN(n)) throw TypeError('n must be a positive number');
        this._maxListeners = n;
        return this;
      };

      EventEmitter.prototype.emit = function (type) {
        var er, handler, len, args, i, listeners;
        if (!this._events) this._events = {}; // If there is no 'error' event listener then throw.

        if (type === 'error') {
          if (!this._events.error || isObject(this._events.error) && !this._events.error.length) {
            er = arguments[1];

            if (er instanceof Error) {
              throw er; // Unhandled 'error' event
            } else {
              // At least give some kind of context to the user
              var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
              err.context = er;
              throw err;
            }
          }
        }

        handler = this._events[type];
        if (isUndefined(handler)) return false;

        if (isFunction(handler)) {
          switch (arguments.length) {
            // fast cases
            case 1:
              handler.call(this);
              break;

            case 2:
              handler.call(this, arguments[1]);
              break;

            case 3:
              handler.call(this, arguments[1], arguments[2]);
              break;
            // slower

            default:
              args = Array.prototype.slice.call(arguments, 1);
              handler.apply(this, args);
          }
        } else if (isObject(handler)) {
          args = Array.prototype.slice.call(arguments, 1);
          listeners = handler.slice();
          len = listeners.length;

          for (i = 0; i < len; i++) {
            listeners[i].apply(this, args);
          }
        }

        return true;
      };

      EventEmitter.prototype.addListener = function (type, listener) {
        var m;
        if (!isFunction(listener)) throw TypeError('listener must be a function');
        if (!this._events) this._events = {}; // To avoid recursion in the case that type === "newListener"! Before
        // adding it to the listeners, first emit "newListener".

        if (this._events.newListener) this.emit('newListener', type, isFunction(listener.listener) ? listener.listener : listener);
        if (!this._events[type]) // Optimize the case of one listener. Don't need the extra array object.
          this._events[type] = listener;else if (isObject(this._events[type])) // If we've already got an array, just append.
          this._events[type].push(listener);else // Adding the second element, need to change to array.
          this._events[type] = [this._events[type], listener]; // Check for listener leak

        if (isObject(this._events[type]) && !this._events[type].warned) {
          if (!isUndefined(this._maxListeners)) {
            m = this._maxListeners;
          } else {
            m = EventEmitter.defaultMaxListeners;
          }

          if (m && m > 0 && this._events[type].length > m) {
            this._events[type].warned = true;
            console.error('(node) warning: possible EventEmitter memory ' + 'leak detected. %d listeners added. ' + 'Use emitter.setMaxListeners() to increase limit.', this._events[type].length);

            if (typeof console.trace === 'function') {
              // not supported in IE 10
              console.trace();
            }
          }
        }

        return this;
      };

      EventEmitter.prototype.on = EventEmitter.prototype.addListener;

      EventEmitter.prototype.once = function (type, listener) {
        if (!isFunction(listener)) throw TypeError('listener must be a function');
        var fired = false;

        function g() {
          this.removeListener(type, g);

          if (!fired) {
            fired = true;
            listener.apply(this, arguments);
          }
        }

        g.listener = listener;
        this.on(type, g);
        return this;
      }; // emits a 'removeListener' event iff the listener was removed


      EventEmitter.prototype.removeListener = function (type, listener) {
        var list, position, length, i;
        if (!isFunction(listener)) throw TypeError('listener must be a function');
        if (!this._events || !this._events[type]) return this;
        list = this._events[type];
        length = list.length;
        position = -1;

        if (list === listener || isFunction(list.listener) && list.listener === listener) {
          delete this._events[type];
          if (this._events.removeListener) this.emit('removeListener', type, listener);
        } else if (isObject(list)) {
          for (i = length; i-- > 0;) {
            if (list[i] === listener || list[i].listener && list[i].listener === listener) {
              position = i;
              break;
            }
          }

          if (position < 0) return this;

          if (list.length === 1) {
            list.length = 0;
            delete this._events[type];
          } else {
            list.splice(position, 1);
          }

          if (this._events.removeListener) this.emit('removeListener', type, listener);
        }

        return this;
      };

      EventEmitter.prototype.removeAllListeners = function (type) {
        var key, listeners;
        if (!this._events) return this; // not listening for removeListener, no need to emit

        if (!this._events.removeListener) {
          if (arguments.length === 0) this._events = {};else if (this._events[type]) delete this._events[type];
          return this;
        } // emit removeListener for all listeners on all events


        if (arguments.length === 0) {
          for (key in this._events) {
            if (key === 'removeListener') continue;
            this.removeAllListeners(key);
          }

          this.removeAllListeners('removeListener');
          this._events = {};
          return this;
        }

        listeners = this._events[type];

        if (isFunction(listeners)) {
          this.removeListener(type, listeners);
        } else if (listeners) {
          // LIFO order
          while (listeners.length) {
            this.removeListener(type, listeners[listeners.length - 1]);
          }
        }

        delete this._events[type];
        return this;
      };

      EventEmitter.prototype.listeners = function (type) {
        var ret;
        if (!this._events || !this._events[type]) ret = [];else if (isFunction(this._events[type])) ret = [this._events[type]];else ret = this._events[type].slice();
        return ret;
      };

      EventEmitter.prototype.listenerCount = function (type) {
        if (this._events) {
          var evlistener = this._events[type];
          if (isFunction(evlistener)) return 1;else if (evlistener) return evlistener.length;
        }

        return 0;
      };

      EventEmitter.listenerCount = function (emitter, type) {
        return emitter.listenerCount(type);
      };

      function isFunction(arg) {
        return typeof arg === 'function';
      }

      function isNumber(arg) {
        return typeof arg === 'number';
      }

      function isObject(arg) {
        return typeof arg === 'object' && arg !== null;
      }

      function isUndefined(arg) {
        return arg === void 0;
      }
      /***/

    },

    /***/
    "+rOU":
    /*!*******************************************************************!*\
      !*** ./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/portal.js ***!
      \*******************************************************************/

    /*! exports provided: BasePortalHost, BasePortalOutlet, CdkPortal, CdkPortalOutlet, ComponentPortal, DomPortal, DomPortalHost, DomPortalOutlet, Portal, PortalHostDirective, PortalInjector, PortalModule, TemplatePortal, TemplatePortalDirective */

    /***/
    function rOU(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BasePortalHost", function () {
        return BasePortalHost;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BasePortalOutlet", function () {
        return BasePortalOutlet;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkPortal", function () {
        return CdkPortal;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkPortalOutlet", function () {
        return CdkPortalOutlet;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ComponentPortal", function () {
        return ComponentPortal;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DomPortal", function () {
        return DomPortal;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DomPortalHost", function () {
        return DomPortalHost;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DomPortalOutlet", function () {
        return DomPortalOutlet;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Portal", function () {
        return Portal;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PortalHostDirective", function () {
        return PortalHostDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PortalInjector", function () {
        return PortalInjector;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PortalModule", function () {
        return PortalModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TemplatePortal", function () {
        return TemplatePortal;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TemplatePortalDirective", function () {
        return TemplatePortalDirective;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Throws an exception when attempting to attach a null portal to a host.
       * @docs-private
       */


      function throwNullPortalError() {
        throw Error('Must provide a portal to attach');
      }
      /**
       * Throws an exception when attempting to attach a portal to a host that is already attached.
       * @docs-private
       */


      function throwPortalAlreadyAttachedError() {
        throw Error('Host already has a portal attached');
      }
      /**
       * Throws an exception when attempting to attach a portal to an already-disposed host.
       * @docs-private
       */


      function throwPortalOutletAlreadyDisposedError() {
        throw Error('This PortalOutlet has already been disposed');
      }
      /**
       * Throws an exception when attempting to attach an unknown portal type.
       * @docs-private
       */


      function throwUnknownPortalTypeError() {
        throw Error('Attempting to attach an unknown Portal type. BasePortalOutlet accepts either ' + 'a ComponentPortal or a TemplatePortal.');
      }
      /**
       * Throws an exception when attempting to attach a portal to a null host.
       * @docs-private
       */


      function throwNullPortalOutletError() {
        throw Error('Attempting to attach a portal to a null PortalOutlet');
      }
      /**
       * Throws an exception when attempting to detach a portal that is not attached.
       * @docs-private
       */


      function throwNoPortalAttachedError() {
        throw Error('Attempting to detach a portal that is not attached to a host');
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A `Portal` is something that you want to render somewhere else.
       * It can be attach to / detached from a `PortalOutlet`.
       */


      var Portal = /*#__PURE__*/function () {
        function Portal() {
          _classCallCheck2(this, Portal);
        }

        _createClass2(Portal, [{
          key: "attach",
          value:
          /** Attach this portal to a host. */
          function attach(host) {
            if (typeof ngDevMode === 'undefined' || ngDevMode) {
              if (host == null) {
                throwNullPortalOutletError();
              }

              if (host.hasAttached()) {
                throwPortalAlreadyAttachedError();
              }
            }

            this._attachedHost = host;
            return host.attach(this);
          }
          /** Detach this portal from its host */

        }, {
          key: "detach",
          value: function detach() {
            var host = this._attachedHost;

            if (host != null) {
              this._attachedHost = null;
              host.detach();
            } else if (typeof ngDevMode === 'undefined' || ngDevMode) {
              throwNoPortalAttachedError();
            }
          }
          /** Whether this portal is attached to a host. */

        }, {
          key: "isAttached",
          get: function get() {
            return this._attachedHost != null;
          }
          /**
           * Sets the PortalOutlet reference without performing `attach()`. This is used directly by
           * the PortalOutlet when it is performing an `attach()` or `detach()`.
           */

        }, {
          key: "setAttachedHost",
          value: function setAttachedHost(host) {
            this._attachedHost = host;
          }
        }]);

        return Portal;
      }();
      /**
       * A `ComponentPortal` is a portal that instantiates some Component upon attachment.
       */


      var ComponentPortal = /*#__PURE__*/function (_Portal) {
        _inherits2(ComponentPortal, _Portal);

        var _super20 = _createSuper(ComponentPortal);

        function ComponentPortal(component, viewContainerRef, injector, componentFactoryResolver) {
          var _this7;

          _classCallCheck2(this, ComponentPortal);

          _this7 = _super20.call(this);
          _this7.component = component;
          _this7.viewContainerRef = viewContainerRef;
          _this7.injector = injector;
          _this7.componentFactoryResolver = componentFactoryResolver;
          return _this7;
        }

        return ComponentPortal;
      }(Portal);
      /**
       * A `TemplatePortal` is a portal that represents some embedded template (TemplateRef).
       */


      var TemplatePortal = /*#__PURE__*/function (_Portal2) {
        _inherits2(TemplatePortal, _Portal2);

        var _super21 = _createSuper(TemplatePortal);

        function TemplatePortal(template, viewContainerRef, context) {
          var _this8;

          _classCallCheck2(this, TemplatePortal);

          _this8 = _super21.call(this);
          _this8.templateRef = template;
          _this8.viewContainerRef = viewContainerRef;
          _this8.context = context;
          return _this8;
        }

        _createClass2(TemplatePortal, [{
          key: "origin",
          get: function get() {
            return this.templateRef.elementRef;
          }
          /**
           * Attach the portal to the provided `PortalOutlet`.
           * When a context is provided it will override the `context` property of the `TemplatePortal`
           * instance.
           */

        }, {
          key: "attach",
          value: function attach(host) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.context;
            this.context = context;
            return _get2(_getPrototypeOf2(TemplatePortal.prototype), "attach", this).call(this, host);
          }
        }, {
          key: "detach",
          value: function detach() {
            this.context = undefined;
            return _get2(_getPrototypeOf2(TemplatePortal.prototype), "detach", this).call(this);
          }
        }]);

        return TemplatePortal;
      }(Portal);
      /**
       * A `DomPortal` is a portal whose DOM element will be taken from its current position
       * in the DOM and moved into a portal outlet, when it is attached. On detach, the content
       * will be restored to its original position.
       */


      var DomPortal = /*#__PURE__*/function (_Portal3) {
        _inherits2(DomPortal, _Portal3);

        var _super22 = _createSuper(DomPortal);

        function DomPortal(element) {
          var _this9;

          _classCallCheck2(this, DomPortal);

          _this9 = _super22.call(this);
          _this9.element = element instanceof _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] ? element.nativeElement : element;
          return _this9;
        }

        return DomPortal;
      }(Portal);
      /**
       * Partial implementation of PortalOutlet that handles attaching
       * ComponentPortal and TemplatePortal.
       */


      var BasePortalOutlet = /*#__PURE__*/function () {
        function BasePortalOutlet() {
          _classCallCheck2(this, BasePortalOutlet);

          /** Whether this host has already been permanently disposed. */
          this._isDisposed = false; // @breaking-change 10.0.0 `attachDomPortal` to become a required abstract method.

          this.attachDomPortal = null;
        }
        /** Whether this host has an attached portal. */


        _createClass2(BasePortalOutlet, [{
          key: "hasAttached",
          value: function hasAttached() {
            return !!this._attachedPortal;
          }
          /** Attaches a portal. */

        }, {
          key: "attach",
          value: function attach(portal) {
            if (typeof ngDevMode === 'undefined' || ngDevMode) {
              if (!portal) {
                throwNullPortalError();
              }

              if (this.hasAttached()) {
                throwPortalAlreadyAttachedError();
              }

              if (this._isDisposed) {
                throwPortalOutletAlreadyDisposedError();
              }
            }

            if (portal instanceof ComponentPortal) {
              this._attachedPortal = portal;
              return this.attachComponentPortal(portal);
            } else if (portal instanceof TemplatePortal) {
              this._attachedPortal = portal;
              return this.attachTemplatePortal(portal); // @breaking-change 10.0.0 remove null check for `this.attachDomPortal`.
            } else if (this.attachDomPortal && portal instanceof DomPortal) {
              this._attachedPortal = portal;
              return this.attachDomPortal(portal);
            }

            if (typeof ngDevMode === 'undefined' || ngDevMode) {
              throwUnknownPortalTypeError();
            }
          }
          /** Detaches a previously attached portal. */

        }, {
          key: "detach",
          value: function detach() {
            if (this._attachedPortal) {
              this._attachedPortal.setAttachedHost(null);

              this._attachedPortal = null;
            }

            this._invokeDisposeFn();
          }
          /** Permanently dispose of this portal host. */

        }, {
          key: "dispose",
          value: function dispose() {
            if (this.hasAttached()) {
              this.detach();
            }

            this._invokeDisposeFn();

            this._isDisposed = true;
          }
          /** @docs-private */

        }, {
          key: "setDisposeFn",
          value: function setDisposeFn(fn) {
            this._disposeFn = fn;
          }
        }, {
          key: "_invokeDisposeFn",
          value: function _invokeDisposeFn() {
            if (this._disposeFn) {
              this._disposeFn();

              this._disposeFn = null;
            }
          }
        }]);

        return BasePortalOutlet;
      }();
      /**
       * @deprecated Use `BasePortalOutlet` instead.
       * @breaking-change 9.0.0
       */


      var BasePortalHost = /*#__PURE__*/function (_BasePortalOutlet) {
        _inherits2(BasePortalHost, _BasePortalOutlet);

        var _super23 = _createSuper(BasePortalHost);

        function BasePortalHost() {
          _classCallCheck2(this, BasePortalHost);

          return _super23.apply(this, arguments);
        }

        return BasePortalHost;
      }(BasePortalOutlet);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A PortalOutlet for attaching portals to an arbitrary DOM element outside of the Angular
       * application context.
       */


      var DomPortalOutlet = /*#__PURE__*/function (_BasePortalOutlet2) {
        _inherits2(DomPortalOutlet, _BasePortalOutlet2);

        var _super24 = _createSuper(DomPortalOutlet);

        function DomPortalOutlet(
        /** Element into which the content is projected. */
        outletElement, _componentFactoryResolver, _appRef, _defaultInjector,
        /**
         * @deprecated `_document` Parameter to be made required.
         * @breaking-change 10.0.0
         */
        _document) {
          var _thisSuper, _this10;

          _classCallCheck2(this, DomPortalOutlet);

          _this10 = _super24.call(this);
          _this10.outletElement = outletElement;
          _this10._componentFactoryResolver = _componentFactoryResolver;
          _this10._appRef = _appRef;
          _this10._defaultInjector = _defaultInjector;
          /**
           * Attaches a DOM portal by transferring its content into the outlet.
           * @param portal Portal to be attached.
           * @deprecated To be turned into a method.
           * @breaking-change 10.0.0
           */

          _this10.attachDomPortal = function (portal) {
            // @breaking-change 10.0.0 Remove check and error once the
            // `_document` constructor parameter is required.
            if (!_this10._document && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw Error('Cannot attach DOM portal without _document constructor parameter');
            }

            var element = portal.element;

            if (!element.parentNode && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw Error('DOM portal content must be attached to a parent node.');
            } // Anchor used to save the element's previous position so
            // that we can restore it when the portal is detached.


            var anchorNode = _this10._document.createComment('dom-portal');

            element.parentNode.insertBefore(anchorNode, element);

            _this10.outletElement.appendChild(element);

            _get2((_thisSuper = _assertThisInitialized2(_this10), _getPrototypeOf2(DomPortalOutlet.prototype)), "setDisposeFn", _thisSuper).call(_thisSuper, function () {
              // We can't use `replaceWith` here because IE doesn't support it.
              if (anchorNode.parentNode) {
                anchorNode.parentNode.replaceChild(element, anchorNode);
              }
            });
          };

          _this10._document = _document;
          return _this10;
        }
        /**
         * Attach the given ComponentPortal to DOM element using the ComponentFactoryResolver.
         * @param portal Portal to be attached
         * @returns Reference to the created component.
         */


        _createClass2(DomPortalOutlet, [{
          key: "attachComponentPortal",
          value: function attachComponentPortal(portal) {
            var _this11 = this;

            var resolver = portal.componentFactoryResolver || this._componentFactoryResolver;
            var componentFactory = resolver.resolveComponentFactory(portal.component);
            var componentRef; // If the portal specifies a ViewContainerRef, we will use that as the attachment point
            // for the component (in terms of Angular's component tree, not rendering).
            // When the ViewContainerRef is missing, we use the factory to create the component directly
            // and then manually attach the view to the application.

            if (portal.viewContainerRef) {
              componentRef = portal.viewContainerRef.createComponent(componentFactory, portal.viewContainerRef.length, portal.injector || portal.viewContainerRef.injector);
              this.setDisposeFn(function () {
                return componentRef.destroy();
              });
            } else {
              componentRef = componentFactory.create(portal.injector || this._defaultInjector);

              this._appRef.attachView(componentRef.hostView);

              this.setDisposeFn(function () {
                _this11._appRef.detachView(componentRef.hostView);

                componentRef.destroy();
              });
            } // At this point the component has been instantiated, so we move it to the location in the DOM
            // where we want it to be rendered.


            this.outletElement.appendChild(this._getComponentRootNode(componentRef));
            return componentRef;
          }
          /**
           * Attaches a template portal to the DOM as an embedded view.
           * @param portal Portal to be attached.
           * @returns Reference to the created embedded view.
           */

        }, {
          key: "attachTemplatePortal",
          value: function attachTemplatePortal(portal) {
            var _this12 = this;

            var viewContainer = portal.viewContainerRef;
            var viewRef = viewContainer.createEmbeddedView(portal.templateRef, portal.context); // The method `createEmbeddedView` will add the view as a child of the viewContainer.
            // But for the DomPortalOutlet the view can be added everywhere in the DOM
            // (e.g Overlay Container) To move the view to the specified host element. We just
            // re-append the existing root nodes.

            viewRef.rootNodes.forEach(function (rootNode) {
              return _this12.outletElement.appendChild(rootNode);
            }); // Note that we want to detect changes after the nodes have been moved so that
            // any directives inside the portal that are looking at the DOM inside a lifecycle
            // hook won't be invoked too early.

            viewRef.detectChanges();
            this.setDisposeFn(function () {
              var index = viewContainer.indexOf(viewRef);

              if (index !== -1) {
                viewContainer.remove(index);
              }
            }); // TODO(jelbourn): Return locals from view.

            return viewRef;
          }
          /**
           * Clears out a portal from the DOM.
           */

        }, {
          key: "dispose",
          value: function dispose() {
            _get2(_getPrototypeOf2(DomPortalOutlet.prototype), "dispose", this).call(this);

            if (this.outletElement.parentNode != null) {
              this.outletElement.parentNode.removeChild(this.outletElement);
            }
          }
          /** Gets the root HTMLElement for an instantiated component. */

        }, {
          key: "_getComponentRootNode",
          value: function _getComponentRootNode(componentRef) {
            return componentRef.hostView.rootNodes[0];
          }
        }]);

        return DomPortalOutlet;
      }(BasePortalOutlet);
      /**
       * @deprecated Use `DomPortalOutlet` instead.
       * @breaking-change 9.0.0
       */


      var DomPortalHost = /*#__PURE__*/function (_DomPortalOutlet) {
        _inherits2(DomPortalHost, _DomPortalOutlet);

        var _super25 = _createSuper(DomPortalHost);

        function DomPortalHost() {
          _classCallCheck2(this, DomPortalHost);

          return _super25.apply(this, arguments);
        }

        return DomPortalHost;
      }(DomPortalOutlet);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Directive version of a `TemplatePortal`. Because the directive *is* a TemplatePortal,
       * the directive instance itself can be attached to a host, enabling declarative use of portals.
       */


      var CdkPortal = /*#__PURE__*/function (_TemplatePortal) {
        _inherits2(CdkPortal, _TemplatePortal);

        var _super26 = _createSuper(CdkPortal);

        function CdkPortal(templateRef, viewContainerRef) {
          _classCallCheck2(this, CdkPortal);

          return _super26.call(this, templateRef, viewContainerRef);
        }

        return CdkPortal;
      }(TemplatePortal);

      CdkPortal.ɵfac = function CdkPortal_Factory(t) {
        return new (t || CdkPortal)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]));
      };

      CdkPortal.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: CdkPortal,
        selectors: [["", "cdkPortal", ""]],
        exportAs: ["cdkPortal"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      CdkPortal.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CdkPortal, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[cdkPortal]',
            exportAs: 'cdkPortal'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
          }];
        }, null);
      })();
      /**
       * @deprecated Use `CdkPortal` instead.
       * @breaking-change 9.0.0
       */


      var TemplatePortalDirective = /*#__PURE__*/function (_CdkPortal) {
        _inherits2(TemplatePortalDirective, _CdkPortal);

        var _super27 = _createSuper(TemplatePortalDirective);

        function TemplatePortalDirective() {
          _classCallCheck2(this, TemplatePortalDirective);

          return _super27.apply(this, arguments);
        }

        return TemplatePortalDirective;
      }(CdkPortal);

      TemplatePortalDirective.ɵfac = function TemplatePortalDirective_Factory(t) {
        return ɵTemplatePortalDirective_BaseFactory(t || TemplatePortalDirective);
      };

      TemplatePortalDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: TemplatePortalDirective,
        selectors: [["", "cdk-portal", ""], ["", "portal", ""]],
        exportAs: ["cdkPortal"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: CdkPortal,
          useExisting: TemplatePortalDirective
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      var ɵTemplatePortalDirective_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](TemplatePortalDirective);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](TemplatePortalDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[cdk-portal], [portal]',
            exportAs: 'cdkPortal',
            providers: [{
              provide: CdkPortal,
              useExisting: TemplatePortalDirective
            }]
          }]
        }], null, null);
      })();
      /**
       * Directive version of a PortalOutlet. Because the directive *is* a PortalOutlet, portals can be
       * directly attached to it, enabling declarative use.
       *
       * Usage:
       * `<ng-template [cdkPortalOutlet]="greeting"></ng-template>`
       */


      var CdkPortalOutlet = /*#__PURE__*/function (_BasePortalOutlet3) {
        _inherits2(CdkPortalOutlet, _BasePortalOutlet3);

        var _super28 = _createSuper(CdkPortalOutlet);

        function CdkPortalOutlet(_componentFactoryResolver, _viewContainerRef,
        /**
         * @deprecated `_document` parameter to be made required.
         * @breaking-change 9.0.0
         */
        _document) {
          var _thisSuper2, _this13;

          _classCallCheck2(this, CdkPortalOutlet);

          _this13 = _super28.call(this);
          _this13._componentFactoryResolver = _componentFactoryResolver;
          _this13._viewContainerRef = _viewContainerRef;
          /** Whether the portal component is initialized. */

          _this13._isInitialized = false;
          /** Emits when a portal is attached to the outlet. */

          _this13.attached = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * Attaches the given DomPortal to this PortalHost by moving all of the portal content into it.
           * @param portal Portal to be attached.
           * @deprecated To be turned into a method.
           * @breaking-change 10.0.0
           */

          _this13.attachDomPortal = function (portal) {
            // @breaking-change 9.0.0 Remove check and error once the
            // `_document` constructor parameter is required.
            if (!_this13._document && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw Error('Cannot attach DOM portal without _document constructor parameter');
            }

            var element = portal.element;

            if (!element.parentNode && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw Error('DOM portal content must be attached to a parent node.');
            } // Anchor used to save the element's previous position so
            // that we can restore it when the portal is detached.


            var anchorNode = _this13._document.createComment('dom-portal');

            portal.setAttachedHost(_assertThisInitialized2(_this13));
            element.parentNode.insertBefore(anchorNode, element);

            _this13._getRootNode().appendChild(element);

            _get2((_thisSuper2 = _assertThisInitialized2(_this13), _getPrototypeOf2(CdkPortalOutlet.prototype)), "setDisposeFn", _thisSuper2).call(_thisSuper2, function () {
              if (anchorNode.parentNode) {
                anchorNode.parentNode.replaceChild(element, anchorNode);
              }
            });
          };

          _this13._document = _document;
          return _this13;
        }
        /** Portal associated with the Portal outlet. */


        _createClass2(CdkPortalOutlet, [{
          key: "portal",
          get: function get() {
            return this._attachedPortal;
          },
          set: function set(portal) {
            // Ignore the cases where the `portal` is set to a falsy value before the lifecycle hooks have
            // run. This handles the cases where the user might do something like `<div cdkPortalOutlet>`
            // and attach a portal programmatically in the parent component. When Angular does the first CD
            // round, it will fire the setter with empty string, causing the user's content to be cleared.
            if (this.hasAttached() && !portal && !this._isInitialized) {
              return;
            }

            if (this.hasAttached()) {
              _get2(_getPrototypeOf2(CdkPortalOutlet.prototype), "detach", this).call(this);
            }

            if (portal) {
              _get2(_getPrototypeOf2(CdkPortalOutlet.prototype), "attach", this).call(this, portal);
            }

            this._attachedPortal = portal;
          }
          /** Component or view reference that is attached to the portal. */

        }, {
          key: "attachedRef",
          get: function get() {
            return this._attachedRef;
          }
        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            this._isInitialized = true;
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            _get2(_getPrototypeOf2(CdkPortalOutlet.prototype), "dispose", this).call(this);

            this._attachedPortal = null;
            this._attachedRef = null;
          }
          /**
           * Attach the given ComponentPortal to this PortalOutlet using the ComponentFactoryResolver.
           *
           * @param portal Portal to be attached to the portal outlet.
           * @returns Reference to the created component.
           */

        }, {
          key: "attachComponentPortal",
          value: function attachComponentPortal(portal) {
            portal.setAttachedHost(this); // If the portal specifies an origin, use that as the logical location of the component
            // in the application tree. Otherwise use the location of this PortalOutlet.

            var viewContainerRef = portal.viewContainerRef != null ? portal.viewContainerRef : this._viewContainerRef;
            var resolver = portal.componentFactoryResolver || this._componentFactoryResolver;
            var componentFactory = resolver.resolveComponentFactory(portal.component);
            var ref = viewContainerRef.createComponent(componentFactory, viewContainerRef.length, portal.injector || viewContainerRef.injector); // If we're using a view container that's different from the injected one (e.g. when the portal
            // specifies its own) we need to move the component into the outlet, otherwise it'll be rendered
            // inside of the alternate view container.

            if (viewContainerRef !== this._viewContainerRef) {
              this._getRootNode().appendChild(ref.hostView.rootNodes[0]);
            }

            _get2(_getPrototypeOf2(CdkPortalOutlet.prototype), "setDisposeFn", this).call(this, function () {
              return ref.destroy();
            });

            this._attachedPortal = portal;
            this._attachedRef = ref;
            this.attached.emit(ref);
            return ref;
          }
          /**
           * Attach the given TemplatePortal to this PortalHost as an embedded View.
           * @param portal Portal to be attached.
           * @returns Reference to the created embedded view.
           */

        }, {
          key: "attachTemplatePortal",
          value: function attachTemplatePortal(portal) {
            var _this14 = this;

            portal.setAttachedHost(this);

            var viewRef = this._viewContainerRef.createEmbeddedView(portal.templateRef, portal.context);

            _get2(_getPrototypeOf2(CdkPortalOutlet.prototype), "setDisposeFn", this).call(this, function () {
              return _this14._viewContainerRef.clear();
            });

            this._attachedPortal = portal;
            this._attachedRef = viewRef;
            this.attached.emit(viewRef);
            return viewRef;
          }
          /** Gets the root node of the portal outlet. */

        }, {
          key: "_getRootNode",
          value: function _getRootNode() {
            var nativeElement = this._viewContainerRef.element.nativeElement; // The directive could be set on a template which will result in a comment
            // node being the root. Use the comment's parent node if that is the case.

            return nativeElement.nodeType === nativeElement.ELEMENT_NODE ? nativeElement : nativeElement.parentNode;
          }
        }]);

        return CdkPortalOutlet;
      }(BasePortalOutlet);

      CdkPortalOutlet.ɵfac = function CdkPortalOutlet_Factory(t) {
        return new (t || CdkPortalOutlet)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]));
      };

      CdkPortalOutlet.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: CdkPortalOutlet,
        selectors: [["", "cdkPortalOutlet", ""]],
        inputs: {
          portal: ["cdkPortalOutlet", "portal"]
        },
        outputs: {
          attached: "attached"
        },
        exportAs: ["cdkPortalOutlet"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      CdkPortalOutlet.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
          }]
        }];
      };

      CdkPortalOutlet.propDecorators = {
        attached: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CdkPortalOutlet, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[cdkPortalOutlet]',
            exportAs: 'cdkPortalOutlet',
            inputs: ['portal: cdkPortalOutlet']
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
            }]
          }];
        }, {
          attached: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }]
        });
      })();
      /**
       * @deprecated Use `CdkPortalOutlet` instead.
       * @breaking-change 9.0.0
       */


      var PortalHostDirective = /*#__PURE__*/function (_CdkPortalOutlet) {
        _inherits2(PortalHostDirective, _CdkPortalOutlet);

        var _super29 = _createSuper(PortalHostDirective);

        function PortalHostDirective() {
          _classCallCheck2(this, PortalHostDirective);

          return _super29.apply(this, arguments);
        }

        return PortalHostDirective;
      }(CdkPortalOutlet);

      PortalHostDirective.ɵfac = function PortalHostDirective_Factory(t) {
        return ɵPortalHostDirective_BaseFactory(t || PortalHostDirective);
      };

      PortalHostDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: PortalHostDirective,
        selectors: [["", "cdkPortalHost", ""], ["", "portalHost", ""]],
        inputs: {
          portal: ["cdkPortalHost", "portal"]
        },
        exportAs: ["cdkPortalHost"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: CdkPortalOutlet,
          useExisting: PortalHostDirective
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      var ɵPortalHostDirective_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](PortalHostDirective);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](PortalHostDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[cdkPortalHost], [portalHost]',
            exportAs: 'cdkPortalHost',
            inputs: ['portal: cdkPortalHost'],
            providers: [{
              provide: CdkPortalOutlet,
              useExisting: PortalHostDirective
            }]
          }]
        }], null, null);
      })();

      var PortalModule = function PortalModule() {
        _classCallCheck2(this, PortalModule);
      };

      PortalModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: PortalModule
      });
      PortalModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function PortalModule_Factory(t) {
          return new (t || PortalModule)();
        }
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](PortalModule, {
          declarations: [CdkPortal, CdkPortalOutlet, TemplatePortalDirective, PortalHostDirective],
          exports: [CdkPortal, CdkPortalOutlet, TemplatePortalDirective, PortalHostDirective]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](PortalModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            exports: [CdkPortal, CdkPortalOutlet, TemplatePortalDirective, PortalHostDirective],
            declarations: [CdkPortal, CdkPortalOutlet, TemplatePortalDirective, PortalHostDirective]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Custom injector to be used when providing custom
       * injection tokens to components inside a portal.
       * @docs-private
       * @deprecated Use `Injector.create` instead.
       * @breaking-change 11.0.0
       */


      var PortalInjector = /*#__PURE__*/function () {
        function PortalInjector(_parentInjector, _customTokens) {
          _classCallCheck2(this, PortalInjector);

          this._parentInjector = _parentInjector;
          this._customTokens = _customTokens;
        }

        _createClass2(PortalInjector, [{
          key: "get",
          value: function get(token, notFoundValue) {
            var value = this._customTokens.get(token);

            if (typeof value !== 'undefined') {
              return value;
            }

            return this._parentInjector.get(token, notFoundValue);
          }
        }]);

        return PortalInjector;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=portal.js.map

      /***/

    },

    /***/
    "+s0g":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/nl.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function s0g(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Dutch [nl]
      //! author : Joris Röling : https://github.com/jorisroling
      //! author : Jacob Middag : https://github.com/middagj
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),
            monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),
            monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i],
            monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
        var nl = moment.defineLocale('nl', {
          months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),
          monthsShort: function monthsShort(m, format) {
            if (!m) {
              return monthsShortWithDots;
            } else if (/-MMM-/.test(format)) {
              return monthsShortWithoutDots[m.month()];
            } else {
              return monthsShortWithDots[m.month()];
            }
          },
          monthsRegex: monthsRegex,
          monthsShortRegex: monthsRegex,
          monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
          monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
          monthsParse: monthsParse,
          longMonthsParse: monthsParse,
          shortMonthsParse: monthsParse,
          weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
          weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
          weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD-MM-YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[vandaag om] LT',
            nextDay: '[morgen om] LT',
            nextWeek: 'dddd [om] LT',
            lastDay: '[gisteren om] LT',
            lastWeek: '[afgelopen] dddd [om] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'over %s',
            past: '%s geleden',
            s: 'een paar seconden',
            ss: '%d seconden',
            m: 'één minuut',
            mm: '%d minuten',
            h: 'één uur',
            hh: '%d uur',
            d: 'één dag',
            dd: '%d dagen',
            w: 'één week',
            ww: '%d weken',
            M: 'één maand',
            MM: '%d maanden',
            y: 'één jaar',
            yy: '%d jaar'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
          ordinal: function ordinal(number) {
            return number + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de');
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return nl;
      });
      /***/

    },

    /***/
    "//9w":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/se.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function w(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Northern Sami [se]
      //! authors : Bård Rolstad Henriksen : https://github.com/karamell
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var se = moment.defineLocale('se', {
          months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),
          monthsShort: 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),
          weekdays: 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),
          weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),
          weekdaysMin: 's_v_m_g_d_b_L'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'MMMM D. [b.] YYYY',
            LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',
            LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'
          },
          calendar: {
            sameDay: '[otne ti] LT',
            nextDay: '[ihttin ti] LT',
            nextWeek: 'dddd [ti] LT',
            lastDay: '[ikte ti] LT',
            lastWeek: '[ovddit] dddd [ti] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s geažes',
            past: 'maŋit %s',
            s: 'moadde sekunddat',
            ss: '%d sekunddat',
            m: 'okta minuhta',
            mm: '%d minuhtat',
            h: 'okta diimmu',
            hh: '%d diimmut',
            d: 'okta beaivi',
            dd: '%d beaivvit',
            M: 'okta mánnu',
            MM: '%d mánut',
            y: 'okta jahki',
            yy: '%d jagit'
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return se;
      });
      /***/

    },

    /***/
    "/6Yf":
    /*!************************************************************!*\
      !*** ./node_modules/@firebase/component/dist/index.esm.js ***!
      \************************************************************/

    /*! exports provided: Component, ComponentContainer, Provider */

    /***/
    function Yf(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Component", function () {
        return Component;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ComponentContainer", function () {
        return ComponentContainer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Provider", function () {
        return Provider;
      });
      /* harmony import */


      var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! tslib */
      "Tr+X");
      /* harmony import */


      var _firebase_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @firebase/util */
      "qOnz");
      /**
       * Component for service name T, e.g. `auth`, `auth-internal`
       */


      var Component =
      /** @class */
      function () {
        /**
         *
         * @param name The public service name, e.g. app, auth, firestore, database
         * @param instanceFactory Service factory responsible for creating the public interface
         * @param type whether the service provided by the component is public or private
         */
        function Component(name, instanceFactory, type) {
          this.name = name;
          this.instanceFactory = instanceFactory;
          this.type = type;
          this.multipleInstances = false;
          /**
           * Properties to be added to the service namespace
           */

          this.serviceProps = {};
          this.instantiationMode = "LAZY"
          /* LAZY */
          ;
          this.onInstanceCreated = null;
        }

        Component.prototype.setInstantiationMode = function (mode) {
          this.instantiationMode = mode;
          return this;
        };

        Component.prototype.setMultipleInstances = function (multipleInstances) {
          this.multipleInstances = multipleInstances;
          return this;
        };

        Component.prototype.setServiceProps = function (props) {
          this.serviceProps = props;
          return this;
        };

        Component.prototype.setInstanceCreatedCallback = function (callback) {
          this.onInstanceCreated = callback;
          return this;
        };

        return Component;
      }();
      /**
       * @license
       * Copyright 2019 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */


      var DEFAULT_ENTRY_NAME = '[DEFAULT]';
      /**
       * @license
       * Copyright 2019 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */

      /**
       * Provider for instance for service name T, e.g. 'auth', 'auth-internal'
       * NameServiceMapping[T] is an alias for the type of the instance
       */

      var Provider =
      /** @class */
      function () {
        function Provider(name, container) {
          this.name = name;
          this.container = container;
          this.component = null;
          this.instances = new Map();
          this.instancesDeferred = new Map();
          this.onInitCallbacks = new Set();
        }
        /**
         * @param identifier A provider can provide mulitple instances of a service
         * if this.component.multipleInstances is true.
         */


        Provider.prototype.get = function (identifier) {
          if (identifier === void 0) {
            identifier = DEFAULT_ENTRY_NAME;
          } // if multipleInstances is not supported, use the default name


          var normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);

          if (!this.instancesDeferred.has(normalizedIdentifier)) {
            var deferred = new _firebase_util__WEBPACK_IMPORTED_MODULE_1__["Deferred"]();
            this.instancesDeferred.set(normalizedIdentifier, deferred);

            if (this.isInitialized(normalizedIdentifier) || this.shouldAutoInitialize()) {
              // initialize the service if it can be auto-initialized
              try {
                var instance = this.getOrInitializeService({
                  instanceIdentifier: normalizedIdentifier
                });

                if (instance) {
                  deferred.resolve(instance);
                }
              } catch (e) {// when the instance factory throws an exception during get(), it should not cause
                // a fatal error. We just return the unresolved promise in this case.
              }
            }
          }

          return this.instancesDeferred.get(normalizedIdentifier).promise;
        };

        Provider.prototype.getImmediate = function (options) {
          var _a, _b;

          var identifier = (_a = options === null || options === void 0 ? void 0 : options.identifier) !== null && _a !== void 0 ? _a : DEFAULT_ENTRY_NAME;
          var optional = (_b = options === null || options === void 0 ? void 0 : options.optional) !== null && _b !== void 0 ? _b : false; // if multipleInstances is not supported, use the default name

          var normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);

          if (this.isInitialized(normalizedIdentifier) || this.shouldAutoInitialize()) {
            try {
              return this.getOrInitializeService({
                instanceIdentifier: normalizedIdentifier
              });
            } catch (e) {
              if (optional) {
                return null;
              } else {
                throw e;
              }
            }
          } else {
            // In case a component is not initialized and should/can not be auto-initialized at the moment, return null if the optional flag is set, or throw
            if (optional) {
              return null;
            } else {
              throw Error("Service " + this.name + " is not available");
            }
          }
        };

        Provider.prototype.getComponent = function () {
          return this.component;
        };

        Provider.prototype.setComponent = function (component) {
          var e_1, _a;

          if (component.name !== this.name) {
            throw Error("Mismatching Component " + component.name + " for Provider " + this.name + ".");
          }

          if (this.component) {
            throw Error("Component for " + this.name + " has already been provided");
          }

          this.component = component; // return early without attempting to initialize the component if the component requires explicit initialization (calling `Provider.initialize()`)

          if (!this.shouldAutoInitialize()) {
            return;
          } // if the service is eager, initialize the default instance


          if (isComponentEager(component)) {
            try {
              this.getOrInitializeService({
                instanceIdentifier: DEFAULT_ENTRY_NAME
              });
            } catch (e) {// when the instance factory for an eager Component throws an exception during the eager
              // initialization, it should not cause a fatal error.
              // TODO: Investigate if we need to make it configurable, because some component may want to cause
              // a fatal error in this case?
            }
          }

          try {
            // Create service instances for the pending promises and resolve them
            // NOTE: if this.multipleInstances is false, only the default instance will be created
            // and all promises with resolve with it regardless of the identifier.
            for (var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(this.instancesDeferred.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {
              var _d = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_c.value, 2),
                  instanceIdentifier = _d[0],
                  instanceDeferred = _d[1];

              var normalizedIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);

              try {
                // `getOrInitializeService()` should always return a valid instance since a component is guaranteed. use ! to make typescript happy.
                var instance = this.getOrInitializeService({
                  instanceIdentifier: normalizedIdentifier
                });
                instanceDeferred.resolve(instance);
              } catch (e) {// when the instance factory throws an exception, it should not cause
                // a fatal error. We just leave the promise unresolved.
              }
            }
          } catch (e_1_1) {
            e_1 = {
              error: e_1_1
            };
          } finally {
            try {
              if (_c && !_c.done && (_a = _b["return"])) _a.call(_b);
            } finally {
              if (e_1) throw e_1.error;
            }
          }
        };

        Provider.prototype.clearInstance = function (identifier) {
          if (identifier === void 0) {
            identifier = DEFAULT_ENTRY_NAME;
          }

          this.instancesDeferred["delete"](identifier);
          this.instances["delete"](identifier);
        }; // app.delete() will call this method on every provider to delete the services
        // TODO: should we mark the provider as deleted?


        Provider.prototype["delete"] = function () {
          return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () {
            var services;
            return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) {
              switch (_a.label) {
                case 0:
                  services = Array.from(this.instances.values());
                  return [4
                  /*yield*/
                  , Promise.all(Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spreadArray"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spreadArray"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(services.filter(function (service) {
                    return 'INTERNAL' in service;
                  }) // legacy services
                  // eslint-disable-next-line @typescript-eslint/no-explicit-any
                  .map(function (service) {
                    return service.INTERNAL["delete"]();
                  }))), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(services.filter(function (service) {
                    return '_delete' in service;
                  }) // modularized services
                  // eslint-disable-next-line @typescript-eslint/no-explicit-any
                  .map(function (service) {
                    return service._delete();
                  }))))];

                case 1:
                  _a.sent();

                  return [2
                  /*return*/
                  ];
              }
            });
          });
        };

        Provider.prototype.isComponentSet = function () {
          return this.component != null;
        };

        Provider.prototype.isInitialized = function (identifier) {
          if (identifier === void 0) {
            identifier = DEFAULT_ENTRY_NAME;
          }

          return this.instances.has(identifier);
        };

        Provider.prototype.initialize = function (opts) {
          var e_2, _a;

          if (opts === void 0) {
            opts = {};
          }

          var _b = opts.instanceIdentifier,
              instanceIdentifier = _b === void 0 ? DEFAULT_ENTRY_NAME : _b,
              _c = opts.options,
              options = _c === void 0 ? {} : _c;
          var normalizedIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);

          if (this.isInitialized(normalizedIdentifier)) {
            throw Error(this.name + "(" + normalizedIdentifier + ") has already been initialized");
          }

          if (!this.isComponentSet()) {
            throw Error("Component " + this.name + " has not been registered yet");
          }

          var instance = this.getOrInitializeService({
            instanceIdentifier: normalizedIdentifier,
            options: options
          });

          try {
            // resolve any pending promise waiting for the service instance
            for (var _d = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(this.instancesDeferred.entries()), _e = _d.next(); !_e.done; _e = _d.next()) {
              var _f = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_e.value, 2),
                  instanceIdentifier_1 = _f[0],
                  instanceDeferred = _f[1];

              var normalizedDeferredIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier_1);

              if (normalizedIdentifier === normalizedDeferredIdentifier) {
                instanceDeferred.resolve(instance);
              }
            }
          } catch (e_2_1) {
            e_2 = {
              error: e_2_1
            };
          } finally {
            try {
              if (_e && !_e.done && (_a = _d["return"])) _a.call(_d);
            } finally {
              if (e_2) throw e_2.error;
            }
          }

          this.invokeOnInitCallbacks(instance, normalizedIdentifier);
          return instance;
        };
        /**
         *
         * @param callback - a function that will be invoked  after the provider has been initialized by calling provider.initialize().
         * The function is invoked SYNCHRONOUSLY, so it should not execute any longrunning tasks in order to not block the program.
         *
         * @returns a function to unregister the callback
         */


        Provider.prototype.onInit = function (callback) {
          var _this = this;

          this.onInitCallbacks.add(callback);
          return function () {
            _this.onInitCallbacks["delete"](callback);
          };
        };
        /**
         * Invoke onInit callbacks synchronously
         * @param instance the service instance`
         */


        Provider.prototype.invokeOnInitCallbacks = function (instance, identifier) {
          var e_3, _a;

          try {
            for (var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(this.onInitCallbacks), _c = _b.next(); !_c.done; _c = _b.next()) {
              var callback = _c.value;

              try {
                callback(instance, identifier);
              } catch (_d) {// ignore errors in the onInit callback
              }
            }
          } catch (e_3_1) {
            e_3 = {
              error: e_3_1
            };
          } finally {
            try {
              if (_c && !_c.done && (_a = _b["return"])) _a.call(_b);
            } finally {
              if (e_3) throw e_3.error;
            }
          }
        };

        Provider.prototype.getOrInitializeService = function (_a) {
          var instanceIdentifier = _a.instanceIdentifier,
              _b = _a.options,
              options = _b === void 0 ? {} : _b;
          var instance = this.instances.get(instanceIdentifier);

          if (!instance && this.component) {
            instance = this.component.instanceFactory(this.container, {
              instanceIdentifier: normalizeIdentifierForFactory(instanceIdentifier),
              options: options
            });
            this.instances.set(instanceIdentifier, instance);
            /**
             * Order is important
             * onInstanceCreated() should be called after this.instances.set(instanceIdentifier, instance); which
             * makes `isInitialized()` return true.
             */

            if (this.component.onInstanceCreated) {
              try {
                this.component.onInstanceCreated(this.container, instanceIdentifier, instance);
              } catch (_c) {// ignore errors in the onInstanceCreatedCallback
              }
            }
          }

          return instance || null;
        };

        Provider.prototype.normalizeInstanceIdentifier = function (identifier) {
          if (this.component) {
            return this.component.multipleInstances ? identifier : DEFAULT_ENTRY_NAME;
          } else {
            return identifier; // assume multiple instances are supported before the component is provided.
          }
        };

        Provider.prototype.shouldAutoInitialize = function () {
          return !!this.component && this.component.instantiationMode !== "EXPLICIT"
          /* EXPLICIT */
          ;
        };

        return Provider;
      }(); // undefined should be passed to the service factory for the default instance


      function normalizeIdentifierForFactory(identifier) {
        return identifier === DEFAULT_ENTRY_NAME ? undefined : identifier;
      }

      function isComponentEager(component) {
        return component.instantiationMode === "EAGER"
        /* EAGER */
        ;
      }
      /**
       * @license
       * Copyright 2019 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */

      /**
       * ComponentContainer that provides Providers for service name T, e.g. `auth`, `auth-internal`
       */


      var ComponentContainer =
      /** @class */
      function () {
        function ComponentContainer(name) {
          this.name = name;
          this.providers = new Map();
        }
        /**
         *
         * @param component Component being added
         * @param overwrite When a component with the same name has already been registered,
         * if overwrite is true: overwrite the existing component with the new component and create a new
         * provider with the new component. It can be useful in tests where you want to use different mocks
         * for different tests.
         * if overwrite is false: throw an exception
         */


        ComponentContainer.prototype.addComponent = function (component) {
          var provider = this.getProvider(component.name);

          if (provider.isComponentSet()) {
            throw new Error("Component " + component.name + " has already been registered with " + this.name);
          }

          provider.setComponent(component);
        };

        ComponentContainer.prototype.addOrOverwriteComponent = function (component) {
          var provider = this.getProvider(component.name);

          if (provider.isComponentSet()) {
            // delete the existing provider from the container, so we can register the new component
            this.providers["delete"](component.name);
          }

          this.addComponent(component);
        };
        /**
         * getProvider provides a type safe interface where it can only be called with a field name
         * present in NameServiceMapping interface.
         *
         * Firebase SDKs providing services should extend NameServiceMapping interface to register
         * themselves.
         */


        ComponentContainer.prototype.getProvider = function (name) {
          if (this.providers.has(name)) {
            return this.providers.get(name);
          } // create a Provider for a service that hasn't registered with Firebase


          var provider = new Provider(name, this);
          this.providers.set(name, provider);
          return provider;
        };

        ComponentContainer.prototype.getProviders = function () {
          return Array.from(this.providers.values());
        };

        return ComponentContainer;
      }(); //# sourceMappingURL=index.esm.js.map

      /***/

    },

    /***/
    "/X5v":
    /*!************************************************!*\
      !*** ./node_modules/moment/locale/x-pseudo.js ***!
      \************************************************/

    /*! no static exports found */

    /***/
    function X5v(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Pseudo [x-pseudo]
      //! author : Andrew Hood : https://github.com/andrewhood125
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var xPseudo = moment.defineLocale('x-pseudo', {
          months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),
          monthsShort: 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),
          monthsParseExact: true,
          weekdays: 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),
          weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),
          weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[T~ódá~ý át] LT',
            nextDay: '[T~ómó~rró~w át] LT',
            nextWeek: 'dddd [át] LT',
            lastDay: '[Ý~ést~érdá~ý át] LT',
            lastWeek: '[L~ást] dddd [át] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'í~ñ %s',
            past: '%s á~gó',
            s: 'á ~féw ~sécó~ñds',
            ss: '%d s~écóñ~ds',
            m: 'á ~míñ~úté',
            mm: '%d m~íñú~tés',
            h: 'á~ñ hó~úr',
            hh: '%d h~óúrs',
            d: 'á ~dáý',
            dd: '%d d~áýs',
            M: 'á ~móñ~th',
            MM: '%d m~óñt~hs',
            y: 'á ~ýéár',
            yy: '%d ý~éárs'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
          ordinal: function ordinal(number) {
            var b = number % 10,
                output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';
            return number + output;
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return xPseudo;
      });
      /***/

    },

    /***/
    "/d8p":
    /*!*****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/repeat.js ***!
      \*****************************************************************/

    /*! exports provided: repeat */

    /***/
    function d8p(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "repeat", function () {
        return repeat;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");
      /* harmony import */


      var _observable_empty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../observable/empty */
      "EY2u");

      function repeat() {
        var count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1;
        return function (source) {
          if (count === 0) {
            return Object(_observable_empty__WEBPACK_IMPORTED_MODULE_1__["empty"])();
          } else if (count < 0) {
            return source.lift(new RepeatOperator(-1, source));
          } else {
            return source.lift(new RepeatOperator(count - 1, source));
          }
        };
      }

      var RepeatOperator = /*#__PURE__*/function () {
        function RepeatOperator(count, source) {
          _classCallCheck2(this, RepeatOperator);

          this.count = count;
          this.source = source;
        }

        _createClass2(RepeatOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new RepeatSubscriber(subscriber, this.count, this.source));
          }
        }]);

        return RepeatOperator;
      }();

      var RepeatSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_) {
        _inherits2(RepeatSubscriber, _Subscriber__WEBPACK_);

        var _super30 = _createSuper(RepeatSubscriber);

        function RepeatSubscriber(destination, count, source) {
          var _this15;

          _classCallCheck2(this, RepeatSubscriber);

          _this15 = _super30.call(this, destination);
          _this15.count = count;
          _this15.source = source;
          return _this15;
        }

        _createClass2(RepeatSubscriber, [{
          key: "complete",
          value: function complete() {
            if (!this.isStopped) {
              var source = this.source,
                  count = this.count;

              if (count === 0) {
                return _get2(_getPrototypeOf2(RepeatSubscriber.prototype), "complete", this).call(this);
              } else if (count > -1) {
                this.count = count - 1;
              }

              source.subscribe(this._unsubscribeAndRecycle());
            }
          }
        }]);

        return RepeatSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=repeat.js.map

      /***/

    },

    /***/
    "/iSe":
    /*!******************************************************************************************!*\
      !*** ./node_modules/angular-datatables/__ivy_ngcc__/src/angular-datatables.directive.js ***!
      \******************************************************************************************/

    /*! exports provided: DataTableDirective */

    /***/
    function iSe(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DataTableDirective", function () {
        return DataTableDirective;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /**
       * @license
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://raw.githubusercontent.com/l-lin/angular-datatables/master/LICENSE
       */


      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var __metadata = undefined && undefined.__metadata || function (k, v) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
      };

      var DataTableDirective =
      /** @class */
      function () {
        function DataTableDirective(el) {
          this.el = el;
          /**
           * The DataTable option you pass to configure your table.
           */

          this.dtOptions = {};
        }

        DataTableDirective.prototype.ngOnInit = function () {
          var _this = this;

          if (this.dtTrigger) {
            this.dtTrigger.subscribe(function () {
              _this.displayTable();
            });
          } else {
            this.displayTable();
          }
        };

        DataTableDirective.prototype.ngOnDestroy = function () {
          if (this.dtTrigger) {
            this.dtTrigger.unsubscribe();
          }

          if (this.dt) {
            this.dt.destroy(true);
          }
        };

        DataTableDirective.prototype.displayTable = function () {
          var _this = this;

          this.dtInstance = new Promise(function (resolve, reject) {
            Promise.resolve(_this.dtOptions).then(function (dtOptions) {
              // Using setTimeout as a "hack" to be "part" of NgZone
              setTimeout(function () {
                _this.dt = $(_this.el.nativeElement).DataTable(dtOptions);
                resolve(_this.dt);
              });
            });
          });
        };

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object)], DataTableDirective.prototype, "dtOptions", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", rxjs__WEBPACK_IMPORTED_MODULE_1__["Subject"])], DataTableDirective.prototype, "dtTrigger", void 0);

        DataTableDirective = __decorate([__metadata("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]])], DataTableDirective);

        DataTableDirective.ɵfac = function DataTableDirective_Factory(t) {
          return new (t || DataTableDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]));
        };

        DataTableDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
          type: DataTableDirective,
          selectors: [["", "datatable", ""]],
          inputs: {
            dtOptions: "dtOptions",
            dtTrigger: "dtTrigger"
          }
        });

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DataTableDirective, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
            args: [{
              selector: '[datatable]'
            }]
          }], function () {
            return [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
            }];
          }, {
            dtOptions: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            dtTrigger: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }]
          });
        })();

        return DataTableDirective;
      }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64, 

      /***/

    },

    /***/
    "/uUt":
    /*!*******************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/distinctUntilChanged.js ***!
      \*******************************************************************************/

    /*! exports provided: distinctUntilChanged */

    /***/
    function uUt(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "distinctUntilChanged", function () {
        return distinctUntilChanged;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");

      function distinctUntilChanged(compare, keySelector) {
        return function (source) {
          return source.lift(new DistinctUntilChangedOperator(compare, keySelector));
        };
      }

      var DistinctUntilChangedOperator = /*#__PURE__*/function () {
        function DistinctUntilChangedOperator(compare, keySelector) {
          _classCallCheck2(this, DistinctUntilChangedOperator);

          this.compare = compare;
          this.keySelector = keySelector;
        }

        _createClass2(DistinctUntilChangedOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new DistinctUntilChangedSubscriber(subscriber, this.compare, this.keySelector));
          }
        }]);

        return DistinctUntilChangedOperator;
      }();

      var DistinctUntilChangedSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_2) {
        _inherits2(DistinctUntilChangedSubscriber, _Subscriber__WEBPACK_2);

        var _super31 = _createSuper(DistinctUntilChangedSubscriber);

        function DistinctUntilChangedSubscriber(destination, compare, keySelector) {
          var _this16;

          _classCallCheck2(this, DistinctUntilChangedSubscriber);

          _this16 = _super31.call(this, destination);
          _this16.keySelector = keySelector;
          _this16.hasKey = false;

          if (typeof compare === 'function') {
            _this16.compare = compare;
          }

          return _this16;
        }

        _createClass2(DistinctUntilChangedSubscriber, [{
          key: "compare",
          value: function compare(x, y) {
            return x === y;
          }
        }, {
          key: "_next",
          value: function _next(value) {
            var key;

            try {
              var keySelector = this.keySelector;
              key = keySelector ? keySelector(value) : value;
            } catch (err) {
              return this.destination.error(err);
            }

            var result = false;

            if (this.hasKey) {
              try {
                var compare = this.compare;
                result = compare(this.key, key);
              } catch (err) {
                return this.destination.error(err);
              }
            } else {
              this.hasKey = true;
            }

            if (!result) {
              this.key = key;
              this.destination.next(value);
            }
          }
        }]);

        return DistinctUntilChangedSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=distinctUntilChanged.js.map

      /***/

    },

    /***/
    "02Lk":
    /*!*******************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/distinct.js ***!
      \*******************************************************************/

    /*! exports provided: distinct, DistinctSubscriber */

    /***/
    function Lk(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "distinct", function () {
        return distinct;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DistinctSubscriber", function () {
        return DistinctSubscriber;
      });
      /* harmony import */


      var _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../innerSubscribe */
      "zx2A");

      function distinct(keySelector, flushes) {
        return function (source) {
          return source.lift(new DistinctOperator(keySelector, flushes));
        };
      }

      var DistinctOperator = /*#__PURE__*/function () {
        function DistinctOperator(keySelector, flushes) {
          _classCallCheck2(this, DistinctOperator);

          this.keySelector = keySelector;
          this.flushes = flushes;
        }

        _createClass2(DistinctOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new DistinctSubscriber(subscriber, this.keySelector, this.flushes));
          }
        }]);

        return DistinctOperator;
      }();

      var DistinctSubscriber = /*#__PURE__*/function (_innerSubscribe__WEBP) {
        _inherits2(DistinctSubscriber, _innerSubscribe__WEBP);

        var _super32 = _createSuper(DistinctSubscriber);

        function DistinctSubscriber(destination, keySelector, flushes) {
          var _this17;

          _classCallCheck2(this, DistinctSubscriber);

          _this17 = _super32.call(this, destination);
          _this17.keySelector = keySelector;
          _this17.values = new Set();

          if (flushes) {
            _this17.add(Object(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["innerSubscribe"])(flushes, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleInnerSubscriber"](_assertThisInitialized2(_this17))));
          }

          return _this17;
        }

        _createClass2(DistinctSubscriber, [{
          key: "notifyNext",
          value: function notifyNext() {
            this.values.clear();
          }
        }, {
          key: "notifyError",
          value: function notifyError(error) {
            this._error(error);
          }
        }, {
          key: "_next",
          value: function _next(value) {
            if (this.keySelector) {
              this._useKeySelector(value);
            } else {
              this._finalizeNext(value, value);
            }
          }
        }, {
          key: "_useKeySelector",
          value: function _useKeySelector(value) {
            var key;
            var destination = this.destination;

            try {
              key = this.keySelector(value);
            } catch (err) {
              destination.error(err);
              return;
            }

            this._finalizeNext(key, value);
          }
        }, {
          key: "_finalizeNext",
          value: function _finalizeNext(key, value) {
            var values = this.values;

            if (!values.has(key)) {
              values.add(key);
              this.destination.next(value);
            }
          }
        }]);

        return DistinctSubscriber;
      }(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleOuterSubscriber"]); //# sourceMappingURL=distinct.js.map

      /***/

    },

    /***/
    "04ZW":
    /*!****************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/fromEventPattern.js ***!
      \****************************************************************************/

    /*! exports provided: fromEventPattern */

    /***/
    function ZW(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "fromEventPattern", function () {
        return fromEventPattern;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/isArray */
      "DH7j");
      /* harmony import */


      var _util_isFunction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../util/isFunction */
      "n6bG");
      /* harmony import */


      var _operators_map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ../operators/map */
      "lJxs");

      function fromEventPattern(addHandler, removeHandler, resultSelector) {
        if (resultSelector) {
          return fromEventPattern(addHandler, removeHandler).pipe(Object(_operators_map__WEBPACK_IMPORTED_MODULE_3__["map"])(function (args) {
            return Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(args) ? resultSelector.apply(void 0, _toConsumableArray(args)) : resultSelector(args);
          }));
        }

        return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
          var handler = function handler() {
            for (var _len2 = arguments.length, e = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
              e[_key2] = arguments[_key2];
            }

            return subscriber.next(e.length === 1 ? e[0] : e);
          };

          var retValue;

          try {
            retValue = addHandler(handler);
          } catch (err) {
            subscriber.error(err);
            return undefined;
          }

          if (!Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_2__["isFunction"])(removeHandler)) {
            return undefined;
          }

          return function () {
            return removeHandler(handler, retValue);
          };
        });
      } //# sourceMappingURL=fromEventPattern.js.map

      /***/

    },

    /***/
    "05l1":
    /*!************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/publishReplay.js ***!
      \************************************************************************/

    /*! exports provided: publishReplay */

    /***/
    function l1(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "publishReplay", function () {
        return publishReplay;
      });
      /* harmony import */


      var _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../ReplaySubject */
      "jtHE");
      /* harmony import */


      var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./multicast */
      "oB13");

      function publishReplay(bufferSize, windowTime, selectorOrScheduler, scheduler) {
        if (selectorOrScheduler && typeof selectorOrScheduler !== 'function') {
          scheduler = selectorOrScheduler;
        }

        var selector = typeof selectorOrScheduler === 'function' ? selectorOrScheduler : undefined;
        var subject = new _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__["ReplaySubject"](bufferSize, windowTime, scheduler);
        return function (source) {
          return Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(function () {
            return subject;
          }, selector)(source);
        };
      } //# sourceMappingURL=publishReplay.js.map

      /***/

    },

    /***/
    "0EQZ":
    /*!************************************************************************!*\
      !*** ./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/collections.js ***!
      \************************************************************************/

    /*! exports provided: ArrayDataSource, DataSource, SelectionModel, UniqueSelectionDispatcher, _DisposeViewRepeaterStrategy, _RecycleViewRepeaterStrategy, _VIEW_REPEATER_STRATEGY, getMultipleValuesInSingleSelectionError, isDataSource */

    /***/
    function EQZ(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ArrayDataSource", function () {
        return ArrayDataSource;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DataSource", function () {
        return DataSource;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SelectionModel", function () {
        return SelectionModel;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "UniqueSelectionDispatcher", function () {
        return UniqueSelectionDispatcher;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "_DisposeViewRepeaterStrategy", function () {
        return _DisposeViewRepeaterStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "_RecycleViewRepeaterStrategy", function () {
        return _RecycleViewRepeaterStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "_VIEW_REPEATER_STRATEGY", function () {
        return _VIEW_REPEATER_STRATEGY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getMultipleValuesInSingleSelectionError", function () {
        return getMultipleValuesInSingleSelectionError;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isDataSource", function () {
        return isDataSource;
      });
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var DataSource = function DataSource() {
        _classCallCheck2(this, DataSource);
      };
      /** Checks whether an object is a data source. */


      function isDataSource(value) {
        // Check if the value is a DataSource by observing if it has a connect function. Cannot
        // be checked as an `instanceof DataSource` since people could create their own sources
        // that match the interface, but don't extend DataSource.
        return value && typeof value.connect === 'function';
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** DataSource wrapper for a native array. */


      var ArrayDataSource = /*#__PURE__*/function (_DataSource) {
        _inherits2(ArrayDataSource, _DataSource);

        var _super33 = _createSuper(ArrayDataSource);

        function ArrayDataSource(_data) {
          var _this18;

          _classCallCheck2(this, ArrayDataSource);

          _this18 = _super33.call(this);
          _this18._data = _data;
          return _this18;
        }

        _createClass2(ArrayDataSource, [{
          key: "connect",
          value: function connect() {
            return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["isObservable"])(this._data) ? this._data : Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["of"])(this._data);
          }
        }, {
          key: "disconnect",
          value: function disconnect() {}
        }]);

        return ArrayDataSource;
      }(DataSource);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A repeater that destroys views when they are removed from a
       * {@link ViewContainerRef}. When new items are inserted into the container,
       * the repeater will always construct a new embedded view for each item.
       *
       * @template T The type for the embedded view's $implicit property.
       * @template R The type for the item in each IterableDiffer change record.
       * @template C The type for the context passed to each embedded view.
       */


      var _DisposeViewRepeaterStrategy = /*#__PURE__*/function () {
        function _DisposeViewRepeaterStrategy() {
          _classCallCheck2(this, _DisposeViewRepeaterStrategy);
        }

        _createClass2(_DisposeViewRepeaterStrategy, [{
          key: "applyChanges",
          value: function applyChanges(changes, viewContainerRef, itemContextFactory, itemValueResolver, itemViewChanged) {
            changes.forEachOperation(function (record, adjustedPreviousIndex, currentIndex) {
              var view;
              var operation;

              if (record.previousIndex == null) {
                var insertContext = itemContextFactory(record, adjustedPreviousIndex, currentIndex);
                view = viewContainerRef.createEmbeddedView(insertContext.templateRef, insertContext.context, insertContext.index);
                operation = 1
                /* INSERTED */
                ;
              } else if (currentIndex == null) {
                viewContainerRef.remove(adjustedPreviousIndex);
                operation = 3
                /* REMOVED */
                ;
              } else {
                view = viewContainerRef.get(adjustedPreviousIndex);
                viewContainerRef.move(view, currentIndex);
                operation = 2
                /* MOVED */
                ;
              }

              if (itemViewChanged) {
                itemViewChanged({
                  context: view === null || view === void 0 ? void 0 : view.context,
                  operation: operation,
                  record: record
                });
              }
            });
          }
        }, {
          key: "detach",
          value: function detach() {}
        }]);

        return _DisposeViewRepeaterStrategy;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A repeater that caches views when they are removed from a
       * {@link ViewContainerRef}. When new items are inserted into the container,
       * the repeater will reuse one of the cached views instead of creating a new
       * embedded view. Recycling cached views reduces the quantity of expensive DOM
       * inserts.
       *
       * @template T The type for the embedded view's $implicit property.
       * @template R The type for the item in each IterableDiffer change record.
       * @template C The type for the context passed to each embedded view.
       */


      var _RecycleViewRepeaterStrategy = /*#__PURE__*/function () {
        function _RecycleViewRepeaterStrategy() {
          _classCallCheck2(this, _RecycleViewRepeaterStrategy);

          /**
           * The size of the cache used to store unused views.
           * Setting the cache size to `0` will disable caching. Defaults to 20 views.
           */
          this.viewCacheSize = 20;
          /**
           * View cache that stores embedded view instances that have been previously stamped out,
           * but don't are not currently rendered. The view repeater will reuse these views rather than
           * creating brand new ones.
           *
           * TODO(michaeljamesparsons) Investigate whether using a linked list would improve performance.
           */

          this._viewCache = [];
        }
        /** Apply changes to the DOM. */


        _createClass2(_RecycleViewRepeaterStrategy, [{
          key: "applyChanges",
          value: function applyChanges(changes, viewContainerRef, itemContextFactory, itemValueResolver, itemViewChanged) {
            var _this19 = this;

            // Rearrange the views to put them in the right location.
            changes.forEachOperation(function (record, adjustedPreviousIndex, currentIndex) {
              var view;
              var operation;

              if (record.previousIndex == null) {
                // Item added.
                var viewArgsFactory = function viewArgsFactory() {
                  return itemContextFactory(record, adjustedPreviousIndex, currentIndex);
                };

                view = _this19._insertView(viewArgsFactory, currentIndex, viewContainerRef, itemValueResolver(record));
                operation = view ? 1
                /* INSERTED */
                : 0
                /* REPLACED */
                ;
              } else if (currentIndex == null) {
                // Item removed.
                _this19._detachAndCacheView(adjustedPreviousIndex, viewContainerRef);

                operation = 3
                /* REMOVED */
                ;
              } else {
                // Item moved.
                view = _this19._moveView(adjustedPreviousIndex, currentIndex, viewContainerRef, itemValueResolver(record));
                operation = 2
                /* MOVED */
                ;
              }

              if (itemViewChanged) {
                itemViewChanged({
                  context: view === null || view === void 0 ? void 0 : view.context,
                  operation: operation,
                  record: record
                });
              }
            });
          }
        }, {
          key: "detach",
          value: function detach() {
            var _iterator = _createForOfIteratorHelper(this._viewCache),
                _step;

            try {
              for (_iterator.s(); !(_step = _iterator.n()).done;) {
                var view = _step.value;
                view.destroy();
              }
            } catch (err) {
              _iterator.e(err);
            } finally {
              _iterator.f();
            }

            this._viewCache = [];
          }
          /**
           * Inserts a view for a new item, either from the cache or by creating a new
           * one. Returns `undefined` if the item was inserted into a cached view.
           */

        }, {
          key: "_insertView",
          value: function _insertView(viewArgsFactory, currentIndex, viewContainerRef, value) {
            var cachedView = this._insertViewFromCache(currentIndex, viewContainerRef);

            if (cachedView) {
              cachedView.context.$implicit = value;
              return undefined;
            }

            var viewArgs = viewArgsFactory();
            return viewContainerRef.createEmbeddedView(viewArgs.templateRef, viewArgs.context, viewArgs.index);
          }
          /** Detaches the view at the given index and inserts into the view cache. */

        }, {
          key: "_detachAndCacheView",
          value: function _detachAndCacheView(index, viewContainerRef) {
            var detachedView = viewContainerRef.detach(index);

            this._maybeCacheView(detachedView, viewContainerRef);
          }
          /** Moves view at the previous index to the current index. */

        }, {
          key: "_moveView",
          value: function _moveView(adjustedPreviousIndex, currentIndex, viewContainerRef, value) {
            var view = viewContainerRef.get(adjustedPreviousIndex);
            viewContainerRef.move(view, currentIndex);
            view.context.$implicit = value;
            return view;
          }
          /**
           * Cache the given detached view. If the cache is full, the view will be
           * destroyed.
           */

        }, {
          key: "_maybeCacheView",
          value: function _maybeCacheView(view, viewContainerRef) {
            if (this._viewCache.length < this.viewCacheSize) {
              this._viewCache.push(view);
            } else {
              var index = viewContainerRef.indexOf(view); // The host component could remove views from the container outside of
              // the view repeater. It's unlikely this will occur, but just in case,
              // destroy the view on its own, otherwise destroy it through the
              // container to ensure that all the references are removed.

              if (index === -1) {
                view.destroy();
              } else {
                viewContainerRef.remove(index);
              }
            }
          }
          /** Inserts a recycled view from the cache at the given index. */

        }, {
          key: "_insertViewFromCache",
          value: function _insertViewFromCache(index, viewContainerRef) {
            var cachedView = this._viewCache.pop();

            if (cachedView) {
              viewContainerRef.insert(cachedView, index);
            }

            return cachedView || null;
          }
        }]);

        return _RecycleViewRepeaterStrategy;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Class to be used to power selecting one or more options from a list.
       */


      var SelectionModel = /*#__PURE__*/function () {
        function SelectionModel() {
          var _this20 = this;

          var _multiple = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;

          var initiallySelectedValues = arguments.length > 1 ? arguments[1] : undefined;

          var _emitChanges = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;

          _classCallCheck2(this, SelectionModel);

          this._multiple = _multiple;
          this._emitChanges = _emitChanges;
          /** Currently-selected values. */

          this._selection = new Set();
          /** Keeps track of the deselected options that haven't been emitted by the change event. */

          this._deselectedToEmit = [];
          /** Keeps track of the selected options that haven't been emitted by the change event. */

          this._selectedToEmit = [];
          /** Event emitted when the value has changed. */

          this.changed = new rxjs__WEBPACK_IMPORTED_MODULE_0__["Subject"]();

          if (initiallySelectedValues && initiallySelectedValues.length) {
            if (_multiple) {
              initiallySelectedValues.forEach(function (value) {
                return _this20._markSelected(value);
              });
            } else {
              this._markSelected(initiallySelectedValues[0]);
            } // Clear the array in order to avoid firing the change event for preselected values.


            this._selectedToEmit.length = 0;
          }
        }
        /** Selected values. */


        _createClass2(SelectionModel, [{
          key: "selected",
          get: function get() {
            if (!this._selected) {
              this._selected = Array.from(this._selection.values());
            }

            return this._selected;
          }
          /**
           * Selects a value or an array of values.
           */

        }, {
          key: "select",
          value: function select() {
            var _this21 = this;

            for (var _len3 = arguments.length, values = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
              values[_key3] = arguments[_key3];
            }

            this._verifyValueAssignment(values);

            values.forEach(function (value) {
              return _this21._markSelected(value);
            });

            this._emitChangeEvent();
          }
          /**
           * Deselects a value or an array of values.
           */

        }, {
          key: "deselect",
          value: function deselect() {
            var _this22 = this;

            for (var _len4 = arguments.length, values = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
              values[_key4] = arguments[_key4];
            }

            this._verifyValueAssignment(values);

            values.forEach(function (value) {
              return _this22._unmarkSelected(value);
            });

            this._emitChangeEvent();
          }
          /**
           * Toggles a value between selected and deselected.
           */

        }, {
          key: "toggle",
          value: function toggle(value) {
            this.isSelected(value) ? this.deselect(value) : this.select(value);
          }
          /**
           * Clears all of the selected values.
           */

        }, {
          key: "clear",
          value: function clear() {
            this._unmarkAll();

            this._emitChangeEvent();
          }
          /**
           * Determines whether a value is selected.
           */

        }, {
          key: "isSelected",
          value: function isSelected(value) {
            return this._selection.has(value);
          }
          /**
           * Determines whether the model does not have a value.
           */

        }, {
          key: "isEmpty",
          value: function isEmpty() {
            return this._selection.size === 0;
          }
          /**
           * Determines whether the model has a value.
           */

        }, {
          key: "hasValue",
          value: function hasValue() {
            return !this.isEmpty();
          }
          /**
           * Sorts the selected values based on a predicate function.
           */

        }, {
          key: "sort",
          value: function sort(predicate) {
            if (this._multiple && this.selected) {
              this._selected.sort(predicate);
            }
          }
          /**
           * Gets whether multiple values can be selected.
           */

        }, {
          key: "isMultipleSelection",
          value: function isMultipleSelection() {
            return this._multiple;
          }
          /** Emits a change event and clears the records of selected and deselected values. */

        }, {
          key: "_emitChangeEvent",
          value: function _emitChangeEvent() {
            // Clear the selected values so they can be re-cached.
            this._selected = null;

            if (this._selectedToEmit.length || this._deselectedToEmit.length) {
              this.changed.next({
                source: this,
                added: this._selectedToEmit,
                removed: this._deselectedToEmit
              });
              this._deselectedToEmit = [];
              this._selectedToEmit = [];
            }
          }
          /** Selects a value. */

        }, {
          key: "_markSelected",
          value: function _markSelected(value) {
            if (!this.isSelected(value)) {
              if (!this._multiple) {
                this._unmarkAll();
              }

              this._selection.add(value);

              if (this._emitChanges) {
                this._selectedToEmit.push(value);
              }
            }
          }
          /** Deselects a value. */

        }, {
          key: "_unmarkSelected",
          value: function _unmarkSelected(value) {
            if (this.isSelected(value)) {
              this._selection["delete"](value);

              if (this._emitChanges) {
                this._deselectedToEmit.push(value);
              }
            }
          }
          /** Clears out the selected values. */

        }, {
          key: "_unmarkAll",
          value: function _unmarkAll() {
            var _this23 = this;

            if (!this.isEmpty()) {
              this._selection.forEach(function (value) {
                return _this23._unmarkSelected(value);
              });
            }
          }
          /**
           * Verifies the value assignment and throws an error if the specified value array is
           * including multiple values while the selection model is not supporting multiple values.
           */

        }, {
          key: "_verifyValueAssignment",
          value: function _verifyValueAssignment(values) {
            if (values.length > 1 && !this._multiple && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw getMultipleValuesInSingleSelectionError();
            }
          }
        }]);

        return SelectionModel;
      }();
      /**
       * Returns an error that reports that multiple values are passed into a selection model
       * with a single value.
       * @docs-private
       */


      function getMultipleValuesInSingleSelectionError() {
        return Error('Cannot pass multiple values into SelectionModel with single-value mode.');
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Class to coordinate unique selection based on name.
       * Intended to be consumed as an Angular service.
       * This service is needed because native radio change events are only fired on the item currently
       * being selected, and we still need to uncheck the previous selection.
       *
       * This service does not *store* any IDs and names because they may change at any time, so it is
       * less error-prone if they are simply passed through when the events occur.
       */


      var UniqueSelectionDispatcher = /*#__PURE__*/function () {
        function UniqueSelectionDispatcher() {
          _classCallCheck2(this, UniqueSelectionDispatcher);

          this._listeners = [];
        }
        /**
         * Notify other items that selection for the given name has been set.
         * @param id ID of the item.
         * @param name Name of the item.
         */


        _createClass2(UniqueSelectionDispatcher, [{
          key: "notify",
          value: function notify(id, name) {
            var _iterator2 = _createForOfIteratorHelper(this._listeners),
                _step2;

            try {
              for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
                var listener = _step2.value;
                listener(id, name);
              }
            } catch (err) {
              _iterator2.e(err);
            } finally {
              _iterator2.f();
            }
          }
          /**
           * Listen for future changes to item selection.
           * @return Function used to deregister listener
           */

        }, {
          key: "listen",
          value: function listen(listener) {
            var _this24 = this;

            this._listeners.push(listener);

            return function () {
              _this24._listeners = _this24._listeners.filter(function (registered) {
                return listener !== registered;
              });
            };
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._listeners = [];
          }
        }]);

        return UniqueSelectionDispatcher;
      }();

      UniqueSelectionDispatcher.ɵfac = function UniqueSelectionDispatcher_Factory(t) {
        return new (t || UniqueSelectionDispatcher)();
      };

      UniqueSelectionDispatcher.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function UniqueSelectionDispatcher_Factory() {
          return new UniqueSelectionDispatcher();
        },
        token: UniqueSelectionDispatcher,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](UniqueSelectionDispatcher, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Injection token for {@link _ViewRepeater}. This token is for use by Angular Material only.
       * @docs-private
       */


      var _VIEW_REPEATER_STRATEGY = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('_ViewRepeater');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=collections.js.map

      /***/

    },

    /***/
    "0EUg":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/concatAll.js ***!
      \********************************************************************/

    /*! exports provided: concatAll */

    /***/
    function EUg(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "concatAll", function () {
        return concatAll;
      });
      /* harmony import */


      var _mergeAll__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./mergeAll */
      "bHdf");

      function concatAll() {
        return Object(_mergeAll__WEBPACK_IMPORTED_MODULE_0__["mergeAll"])(1);
      } //# sourceMappingURL=concatAll.js.map

      /***/

    },

    /***/
    "0FS3":
    /*!********************************************************************************!*\
      !*** ./node_modules/@ngx-formly/core/__ivy_ngcc__/fesm2015/ngx-formly-core.js ***!
      \********************************************************************************/

    /*! exports provided: FormlyForm, FormlyField, FormlyAttributes, FORMLY_CONFIG, FormlyConfig, FormlyFormBuilder, FieldType, Field, FieldArrayType, FieldWrapper, FormlyModule, ɵdefineHiddenProp, ɵreverseDeepMerge, ɵgetFieldInitialValue, ɵclone, ɵwrapProperty, ɵa, ɵe, ɵh, ɵg, ɵf, ɵd, ɵb, ɵc */

    /***/
    function FS3(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormlyForm", function () {
        return FormlyForm;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormlyField", function () {
        return FormlyField;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormlyAttributes", function () {
        return FormlyAttributes;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FORMLY_CONFIG", function () {
        return FORMLY_CONFIG;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormlyConfig", function () {
        return FormlyConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormlyFormBuilder", function () {
        return FormlyFormBuilder;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FieldType", function () {
        return FieldType;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Field", function () {
        return Field;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FieldArrayType", function () {
        return FieldArrayType;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FieldWrapper", function () {
        return FieldWrapper;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormlyModule", function () {
        return FormlyModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵdefineHiddenProp", function () {
        return defineHiddenProp;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵreverseDeepMerge", function () {
        return reverseDeepMerge;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵgetFieldInitialValue", function () {
        return getFieldInitialValue;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵclone", function () {
        return clone;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵwrapProperty", function () {
        return wrapProperty;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵa", function () {
        return defaultFormlyConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵe", function () {
        return CoreExtension;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵh", function () {
        return FieldExpressionExtension;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵg", function () {
        return FieldFormExtension;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵf", function () {
        return FieldValidationExtension;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵd", function () {
        return FormlyTemplateType;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵb", function () {
        return FormlyGroup;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵc", function () {
        return FormlyValidationMessage;
      });
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/platform-browser */
      "jhN1");
      /* harmony import */


      var tslib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! tslib */
      "mrSG");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var _angular_forms__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @angular/forms */
      "3Pt+");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} formId
       * @param {?} field
       * @param {?} index
       * @return {?}
       */


      var _c0 = ["content"];

      function FormlyForm_formly_field_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](0, "formly-field", 2);
        }

        if (rf & 2) {
          var field_r2 = ctx.$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("form", field_r2.form)("options", field_r2.options)("model", field_r2.model)("field", field_r2);
        }
      }

      var _c1 = ["*"];
      var _c2 = ["container"];

      function FormlyField_ng_template_0_Template(rf, ctx) {}

      var _c3 = ["fieldComponent"];

      function FormlyGroup_formly_field_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](0, "formly-field", 1);
        }

        if (rf & 2) {
          var f_r1 = ctx.$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("field", f_r1);
        }
      }

      function getFieldId(formId, field, index) {
        if (field.id) return field.id;
        /** @type {?} */

        var type = field.type;
        if (!type && field.template) type = 'template';
        return [formId, type, field.key, index].join('_');
      }
      /**
       * @param {?} field
       * @return {?}
       */


      function getKeyPath(field) {
        if (!field.key) {
          return [];
        }
        /* We store the keyPath in the field for performance reasons. This function will be called frequently. */


        if (!field._keyPath || field._keyPath.key !== field.key) {
          /** @type {?} */
          var path = [];

          if (typeof field.key === 'string') {
            /** @type {?} */
            var key = field.key.indexOf('[') === -1 ? field.key : field.key.replace(/\[(\w+)\]/g, '.$1');
            path = key.indexOf('.') !== -1 ? key.split('.') : [key];
          } else if (Array.isArray(field.key)) {
            path = field.key.slice(0);
          } else {
            path = ["".concat(field.key)];
          }

          field._keyPath = {
            key: field.key,
            path: path
          };
        }

        return field._keyPath.path.slice(0);
      }
      /** @type {?} */


      var FORMLY_VALIDATORS = ['required', 'pattern', 'minLength', 'maxLength', 'min', 'max'];
      /**
       * @param {?} field
       * @param {?} value
       * @return {?}
       */

      function assignFieldValue(field, value) {
        /** @type {?} */
        var paths = getKeyPath(field);

        if (paths.length === 0) {
          return;
        }
        /** @type {?} */


        var root = field;

        while (root.parent) {
          root = root.parent;
          paths = [].concat(_toConsumableArray(getKeyPath(root)), _toConsumableArray(paths));
        }

        if (value === undefined && field.resetOnHide) {
          /** @type {?} */
          var k = paths.pop();
          /** @type {?} */

          var m = paths.reduce(
          /**
          * @param {?} model
          * @param {?} path
          * @return {?}
          */
          function (model, path) {
            return model[path] || {};
          }, root.model);
          delete m[k];
          return;
        }

        assignModelValue(root.model, paths, value);
      }
      /**
       * @param {?} model
       * @param {?} paths
       * @param {?} value
       * @return {?}
       */


      function assignModelValue(model, paths, value) {
        for (var i = 0; i < paths.length - 1; i++) {
          /** @type {?} */
          var path = paths[i];

          if (!model[path] || !isObject(model[path])) {
            model[path] = /^\d+$/.test(paths[i + 1]) ? [] : {};
          }

          model = model[path];
        }

        model[paths[paths.length - 1]] = clone(value);
      }
      /**
       * @param {?} field
       * @return {?}
       */


      function getFieldInitialValue(field) {
        /** @type {?} */
        var value = field.options['_initialModel'];
        /** @type {?} */

        var paths = getKeyPath(field);

        while (field.parent) {
          field = field.parent;
          paths = [].concat(_toConsumableArray(getKeyPath(field)), _toConsumableArray(paths));
        }

        var _iterator3 = _createForOfIteratorHelper(paths),
            _step3;

        try {
          for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
            var path = _step3.value;

            if (!value) {
              return undefined;
            }

            value = value[path];
          }
        } catch (err) {
          _iterator3.e(err);
        } finally {
          _iterator3.f();
        }

        return value;
      }
      /**
       * @param {?} field
       * @return {?}
       */


      function getFieldValue(field) {
        /** @type {?} */
        var model = field.parent.model;

        var _iterator4 = _createForOfIteratorHelper(getKeyPath(field)),
            _step4;

        try {
          for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
            var path = _step4.value;

            if (!model) {
              return model;
            }

            model = model[path];
          }
        } catch (err) {
          _iterator4.e(err);
        } finally {
          _iterator4.f();
        }

        return model;
      }
      /**
       * @param {?} dest
       * @param {...?} args
       * @return {?}
       */


      function reverseDeepMerge(dest) {
        for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {
          args[_key5 - 1] = arguments[_key5];
        }

        args.forEach(
        /**
        * @param {?} src
        * @return {?}
        */
        function (src) {
          for (var srcArg in src) {
            if (isNullOrUndefined(dest[srcArg]) || isBlankString(dest[srcArg])) {
              dest[srcArg] = clone(src[srcArg]);
            } else if (objAndSameType(dest[srcArg], src[srcArg])) {
              reverseDeepMerge(dest[srcArg], src[srcArg]);
            }
          }
        });
        return dest;
      }
      /**
       * @param {?} value
       * @return {?}
       */


      function isNullOrUndefined(value) {
        return value === undefined || value === null;
      }
      /**
       * @param {?} value
       * @return {?}
       */


      function isUndefined(value) {
        return value === undefined;
      }
      /**
       * @param {?} value
       * @return {?}
       */


      function isBlankString(value) {
        return value === '';
      }
      /**
       * @param {?} value
       * @return {?}
       */


      function isFunction(value) {
        return typeof value === 'function';
      }
      /**
       * @param {?} obj1
       * @param {?} obj2
       * @return {?}
       */


      function objAndSameType(obj1, obj2) {
        return isObject(obj1) && isObject(obj2) && Object.getPrototypeOf(obj1) === Object.getPrototypeOf(obj2) && !(Array.isArray(obj1) || Array.isArray(obj2));
      }
      /**
       * @param {?} x
       * @return {?}
       */


      function isObject(x) {
        return x != null && typeof x === 'object';
      }
      /**
       * @param {?} obj
       * @return {?}
       */


      function isPromise(obj) {
        return !!obj && typeof obj.then === 'function';
      }
      /**
       * @param {?} value
       * @return {?}
       */


      function clone(value) {
        if (!isObject(value) || Object(rxjs__WEBPACK_IMPORTED_MODULE_6__["isObservable"])(value) ||
        /* instanceof SafeHtmlImpl */
        value.changingThisBreaksApplicationSecurity || ['RegExp', 'FileList', 'File', 'Blob'].indexOf(value.constructor.name) !== -1) {
          return value;
        } // https://github.com/moment/moment/blob/master/moment.js#L252


        if (value._isAMomentObject && isFunction(value.clone)) {
          return value.clone();
        }

        if (value instanceof _angular_forms__WEBPACK_IMPORTED_MODULE_5__["AbstractControl"]) {
          return null;
        }

        if (value instanceof Date) {
          return new Date(value.getTime());
        }

        if (Array.isArray(value)) {
          return value.slice(0).map(
          /**
          * @param {?} v
          * @return {?}
          */
          function (v) {
            return clone(v);
          });
        } // best way to clone a js object maybe
        // https://stackoverflow.com/questions/41474986/how-to-clone-a-javascript-es6-class-instance

        /** @type {?} */


        var proto = Object.getPrototypeOf(value);
        /** @type {?} */

        var c = Object.create(proto);
        c = Object.setPrototypeOf(c, proto); // need to make a deep copy so we dont use Object.assign
        // also Object.assign wont copy property descriptor exactly

        return Object.keys(value).reduce(
        /**
        * @param {?} newVal
        * @param {?} prop
        * @return {?}
        */
        function (newVal, prop) {
          /** @type {?} */
          var propDesc = Object.getOwnPropertyDescriptor(value, prop);

          if (propDesc.get) {
            Object.defineProperty(newVal, prop, propDesc);
          } else {
            newVal[prop] = clone(value[prop]);
          }

          return newVal;
        }, c);
      }
      /**
       * @param {?} field
       * @param {?} prop
       * @param {?} defaultValue
       * @return {?}
       */


      function defineHiddenProp(field, prop, defaultValue) {
        Object.defineProperty(field, prop, {
          enumerable: false,
          writable: true,
          configurable: true
        });
        field[prop] = defaultValue;
      }
      /**
       * @template T
       * @param {?} o
       * @param {?} prop
       * @param {?} setFn
       * @return {?}
       */


      function wrapProperty(o, prop, setFn) {
        if (!o._observers) {
          defineHiddenProp(o, '_observers', {});
        }

        if (!o._observers[prop]) {
          o._observers[prop] = [];
        }
        /** @type {?} */


        var fns = o._observers[prop];

        if (fns.indexOf(setFn) === -1) {
          fns.push(setFn);
          setFn({
            currentValue: o[prop],
            firstChange: true
          });

          if (fns.length === 1) {
            defineHiddenProp(o, "___$".concat(prop), o[prop]);
            Object.defineProperty(o, prop, {
              configurable: true,
              get:
              /**
              * @return {?}
              */
              function get() {
                return o["___$".concat(prop)];
              },
              set:
              /**
              * @param {?} currentValue
              * @return {?}
              */
              function set(currentValue) {
                if (currentValue !== o["___$".concat(prop)]) {
                  /** @type {?} */
                  var previousValue = o["___$".concat(prop)];
                  o["___$".concat(prop)] = currentValue;
                  fns.forEach(
                  /**
                  * @param {?} changeFn
                  * @return {?}
                  */
                  function (changeFn) {
                    return changeFn({
                      previousValue: previousValue,
                      currentValue: currentValue,
                      firstChange: false
                    });
                  });
                }
              }
            });
          }
        }

        return (
          /**
          * @return {?}
          */
          function () {
            return fns.splice(fns.indexOf(setFn), 1);
          }
        );
      }
      /**
       * @param {?} form
       * @param {?} action
       * @return {?}
       */


      function reduceFormUpdateValidityCalls(form, action) {
        /** @type {?} */
        var updateValidity = form._updateTreeValidity.bind(form);
        /** @type {?} */


        var updateValidityArgs = {
          called: false,
          emitEvent: false
        };

        form._updateTreeValidity =
        /**
        * @param {?=} __0
        * @return {?}
        */
        function () {
          var _ref8 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
            emitEvent: true
          },
              emitEvent = _ref8.emitEvent;

          return updateValidityArgs = {
            called: true,
            emitEvent: emitEvent || updateValidityArgs.emitEvent
          };
        };

        action();
        updateValidityArgs.called && updateValidity({
          emitEvent: updateValidityArgs.emitEvent
        });
        form._updateTreeValidity = updateValidity;
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /** @type {?} */


      var FORMLY_CONFIG = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('FORMLY_CONFIG');
      /**
       * Maintains list of formly field directive types. This can be used to register new field templates.
       */

      var FormlyConfig = /*#__PURE__*/function () {
        function FormlyConfig() {
          _classCallCheck2(this, FormlyConfig);

          this.types = {};
          this.validators = {};
          this.wrappers = {};
          this.messages = {};
          this.templateManipulators = {
            preWrapper: [],
            postWrapper: []
          };
          this.extras = {
            checkExpressionOn: 'changeDetectionCheck',
            lazyRender: false,
            showError:
            /**
            * @param {?} field
            * @return {?}
            */
            function showError(field) {
              return field.formControl && field.formControl.invalid && (field.formControl.touched || field.options.parentForm && field.options.parentForm.submitted || !!(field.field.validation && field.field.validation.show));
            }
          };
          this.extensions = {};
        }
        /**
         * @param {?} config
         * @return {?}
         */


        _createClass2(FormlyConfig, [{
          key: "addConfig",
          value: function addConfig(config) {
            var _this25 = this;

            if (config.types) {
              config.types.forEach(
              /**
              * @param {?} type
              * @return {?}
              */
              function (type) {
                return _this25.setType(type);
              });
            }

            if (config.validators) {
              config.validators.forEach(
              /**
              * @param {?} validator
              * @return {?}
              */
              function (validator) {
                return _this25.setValidator(validator);
              });
            }

            if (config.wrappers) {
              config.wrappers.forEach(
              /**
              * @param {?} wrapper
              * @return {?}
              */
              function (wrapper) {
                return _this25.setWrapper(wrapper);
              });
            }

            if (config.manipulators) {
              console.warn("NgxFormly: passing 'manipulators' config is deprecated, use custom extension instead.");
              config.manipulators.forEach(
              /**
              * @param {?} manipulator
              * @return {?}
              */
              function (manipulator) {
                return _this25.setManipulator(manipulator);
              });
            }

            if (config.validationMessages) {
              config.validationMessages.forEach(
              /**
              * @param {?} validation
              * @return {?}
              */
              function (validation) {
                return _this25.addValidatorMessage(validation.name, validation.message);
              });
            }

            if (config.extensions) {
              config.extensions.forEach(
              /**
              * @param {?} c
              * @return {?}
              */
              function (c) {
                return _this25.extensions[c.name] = c.extension;
              });
            }

            if (config.extras) {
              this.extras = Object.assign({}, this.extras, config.extras);
            }
          }
          /**
           * @param {?} options
           * @return {?}
           */

        }, {
          key: "setType",
          value: function setType(options) {
            var _this26 = this;

            if (Array.isArray(options)) {
              options.forEach(
              /**
              * @param {?} option
              * @return {?}
              */
              function (option) {
                return _this26.setType(option);
              });
            } else {
              if (!this.types[options.name]) {
                this.types[options.name] =
                /** @type {?} */
                {
                  name: options.name
                };
              }

              ['component', 'extends', 'defaultOptions', 'wrappers'].forEach(
              /**
              * @param {?} prop
              * @return {?}
              */
              function (prop) {
                if (options.hasOwnProperty(prop)) {
                  _this26.types[options.name][prop] = options[prop];
                }
              });
            }
          }
          /**
           * @param {?} name
           * @return {?}
           */

        }, {
          key: "getType",
          value: function getType(name) {
            if (!this.types[name]) {
              throw new Error("[Formly Error] The type \"".concat(name, "\" could not be found. Please make sure that is registered through the FormlyModule declaration."));
            }

            this.mergeExtendedType(name);
            return this.types[name];
          }
          /**
           * @param {?=} field
           * @return {?}
           */

        }, {
          key: "getMergedField",
          value: function getMergedField() {
            var _this27 = this;

            var field = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

            /** @type {?} */
            var type = this.getType(field.type);

            if (type.defaultOptions) {
              reverseDeepMerge(field, type.defaultOptions);
            }
            /** @type {?} */


            var extendDefaults = type["extends"] && this.getType(type["extends"]).defaultOptions;

            if (extendDefaults) {
              reverseDeepMerge(field, extendDefaults);
            }

            if (field && field.optionsTypes) {
              field.optionsTypes.forEach(
              /**
              * @param {?} option
              * @return {?}
              */
              function (option) {
                /** @type {?} */
                var defaultOptions = _this27.getType(option).defaultOptions;

                if (defaultOptions) {
                  reverseDeepMerge(field, defaultOptions);
                }
              });
            }
            /** @type {?} */


            var componentRef = this.resolveFieldTypeRef(field);

            if (componentRef && componentRef.instance && componentRef.instance.defaultOptions) {
              reverseDeepMerge(field, componentRef.instance.defaultOptions);
            }

            if (!field.wrappers && type.wrappers) {
              field.wrappers = _toConsumableArray(type.wrappers);
            }
          }
          /**
           * \@internal
           * @param {?=} field
           * @return {?}
           */

        }, {
          key: "resolveFieldTypeRef",
          value: function resolveFieldTypeRef() {
            var field = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

            if (!field.type) {
              return null;
            }
            /** @type {?} */


            var type = this.getType(field.type);

            if (!type.component || type['_componentRef']) {
              return type['_componentRef'];
            }

            var _field$parent$options = field.parent.options,
                _resolver = _field$parent$options._resolver,
                _injector = _field$parent$options._injector;
            /** @type {?} */

            var componentRef = _resolver.resolveComponentFactory(type.component).create(_injector);

            defineHiddenProp(type, '_componentRef', componentRef);
            componentRef.destroy();
            return type['_componentRef'];
          }
          /**
           * @param {?} options
           * @return {?}
           */

        }, {
          key: "setWrapper",
          value: function setWrapper(options) {
            var _this28 = this;

            this.wrappers[options.name] = options;

            if (options.types) {
              options.types.forEach(
              /**
              * @param {?} type
              * @return {?}
              */
              function (type) {
                _this28.setTypeWrapper(type, options.name);
              });
            }
          }
          /**
           * @param {?} name
           * @return {?}
           */

        }, {
          key: "getWrapper",
          value: function getWrapper(name) {
            if (!this.wrappers[name]) {
              throw new Error("[Formly Error] The wrapper \"".concat(name, "\" could not be found. Please make sure that is registered through the FormlyModule declaration."));
            }

            return this.wrappers[name];
          }
          /**
           * @param {?} type
           * @param {?} name
           * @return {?}
           */

        }, {
          key: "setTypeWrapper",
          value: function setTypeWrapper(type, name) {
            if (!this.types[type]) {
              this.types[type] =
              /** @type {?} */
              {};
            }

            if (!this.types[type].wrappers) {
              this.types[type].wrappers = [];
            }

            if (this.types[type].wrappers.indexOf(name) === -1) {
              this.types[type].wrappers.push(name);
            }
          }
          /**
           * @param {?} options
           * @return {?}
           */

        }, {
          key: "setValidator",
          value: function setValidator(options) {
            this.validators[options.name] = options;
          }
          /**
           * @param {?} name
           * @return {?}
           */

        }, {
          key: "getValidator",
          value: function getValidator(name) {
            if (!this.validators[name]) {
              throw new Error("[Formly Error] The validator \"".concat(name, "\" could not be found. Please make sure that is registered through the FormlyModule declaration."));
            }

            return this.validators[name];
          }
          /**
           * @param {?} name
           * @param {?} message
           * @return {?}
           */

        }, {
          key: "addValidatorMessage",
          value: function addValidatorMessage(name, message) {
            this.messages[name] = message;
          }
          /**
           * @param {?} name
           * @return {?}
           */

        }, {
          key: "getValidatorMessage",
          value: function getValidatorMessage(name) {
            return this.messages[name];
          }
          /**
           * @param {?} manipulator
           * @return {?}
           */

        }, {
          key: "setManipulator",
          value: function setManipulator(manipulator) {
            new manipulator["class"]()[manipulator.method](this);
          }
          /**
           * @private
           * @param {?} name
           * @return {?}
           */

        }, {
          key: "mergeExtendedType",
          value: function mergeExtendedType(name) {
            if (!this.types[name]["extends"]) {
              return;
            }
            /** @type {?} */


            var extendedType = this.getType(this.types[name]["extends"]);

            if (!this.types[name].component) {
              this.types[name].component = extendedType.component;
            }

            if (!this.types[name].wrappers) {
              this.types[name].wrappers = extendedType.wrappers;
            }
          }
        }]);

        return FormlyConfig;
      }();

      FormlyConfig.ɵfac = function FormlyConfig_Factory(t) {
        return new (t || FormlyConfig)();
      };

      FormlyConfig.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({
        token: FormlyConfig,
        factory: FormlyConfig.ɵfac,
        providedIn: 'root'
      });
      /** @nocollapse */

      FormlyConfig.ngInjectableDef = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["defineInjectable"])({
        factory: function FormlyConfig_Factory() {
          return new FormlyConfig();
        },
        token: FormlyConfig,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](FormlyConfig, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [];
        }, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var FormlyFormBuilder = /*#__PURE__*/function () {
        /**
         * @param {?} formlyConfig
         * @param {?} componentFactoryResolver
         * @param {?} injector
         */
        function FormlyFormBuilder(formlyConfig, componentFactoryResolver, injector) {
          _classCallCheck2(this, FormlyFormBuilder);

          this.formlyConfig = formlyConfig;
          this.componentFactoryResolver = componentFactoryResolver;
          this.injector = injector;
        }
        /**
         * @param {?} formControl
         * @param {?=} fieldGroup
         * @param {?=} model
         * @param {?=} options
         * @return {?}
         */


        _createClass2(FormlyFormBuilder, [{
          key: "buildForm",
          value: function buildForm(formControl) {
            var _this29 = this;

            var fieldGroup = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
            var model = arguments.length > 2 ? arguments[2] : undefined;
            var options = arguments.length > 3 ? arguments[3] : undefined;

            if (!this.formlyConfig.extensions.core) {
              throw new Error('NgxFormly: missing `forRoot()` call. use `forRoot()` when registering the `FormlyModule`.');
            }
            /** @type {?} */


            var field = {
              fieldGroup: fieldGroup,
              model: model,
              formControl: formControl,
              options: this._setOptions(options)
            };
            reduceFormUpdateValidityCalls(formControl,
            /**
            * @return {?}
            */
            function () {
              return _this29._buildForm(field);
            });

            field.options._checkField(field, true);
          }
          /**
           * @private
           * @param {?} field
           * @return {?}
           */

        }, {
          key: "_buildForm",
          value: function _buildForm(field) {
            var _this30 = this;

            this.getExtensions().forEach(
            /**
            * @param {?} extension
            * @return {?}
            */
            function (extension) {
              return extension.prePopulate && extension.prePopulate(field);
            });
            this.getExtensions().forEach(
            /**
            * @param {?} extension
            * @return {?}
            */
            function (extension) {
              return extension.onPopulate && extension.onPopulate(field);
            });

            if (field.fieldGroup) {
              field.fieldGroup.forEach(
              /**
              * @param {?} f
              * @return {?}
              */
              function (f) {
                return _this30._buildForm(f);
              });
            }

            this.getExtensions().forEach(
            /**
            * @param {?} extension
            * @return {?}
            */
            function (extension) {
              return extension.postPopulate && extension.postPopulate(field);
            });
          }
          /**
           * @private
           * @return {?}
           */

        }, {
          key: "getExtensions",
          value: function getExtensions() {
            var _this31 = this;

            return Object.keys(this.formlyConfig.extensions).map(
            /**
            * @param {?} name
            * @return {?}
            */
            function (name) {
              return _this31.formlyConfig.extensions[name];
            });
          }
          /**
           * @private
           * @param {?} options
           * @return {?}
           */

        }, {
          key: "_setOptions",
          value: function _setOptions(options) {
            var _this32 = this;

            options = options || {};
            options.formState = options.formState || {};

            if (!options.showError) {
              options.showError = this.formlyConfig.extras.showError;
            }

            if (!options.fieldChanges) {
              defineHiddenProp(options, 'fieldChanges', new rxjs__WEBPACK_IMPORTED_MODULE_6__["Subject"]());
            }

            if (!options._resolver) {
              defineHiddenProp(options, '_resolver', this.componentFactoryResolver);
            }

            if (!options._injector) {
              defineHiddenProp(options, '_injector', this.injector);
            }

            if (!options._hiddenFieldsForCheck) {
              options._hiddenFieldsForCheck = [];
            }

            if (!options._markForCheck) {
              options._markForCheck =
              /**
              * @param {?} field
              * @return {?}
              */
              function (field) {
                if (field._componentRefs) {
                  field._componentRefs.forEach(
                  /**
                  * @param {?} ref
                  * @return {?}
                  */
                  function (ref) {
                    // NOTE: we cannot use ref.changeDetectorRef, see https://github.com/ngx-formly/ngx-formly/issues/2191

                    /** @type {?} */
                    var changeDetectorRef = ref.injector.get(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"]);
                    changeDetectorRef.markForCheck();
                  });
                }

                if (field.fieldGroup) {
                  field.fieldGroup.forEach(
                  /**
                  * @param {?} f
                  * @return {?}
                  */
                  function (f) {
                    return options._markForCheck(f);
                  });
                }
              };
            }

            if (!options._buildField) {
              options._buildField =
              /**
              * @param {?} field
              * @return {?}
              */
              function (field) {
                _this32.buildForm(field.form, field.fieldGroup, field.model, field.options);

                return field;
              };
            }

            return options;
          }
        }]);

        return FormlyFormBuilder;
      }();

      FormlyFormBuilder.ɵfac = function FormlyFormBuilder_Factory(t) {
        return new (t || FormlyFormBuilder)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](FormlyConfig), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentFactoryResolver"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]));
      };

      FormlyFormBuilder.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({
        token: FormlyFormBuilder,
        factory: FormlyFormBuilder.ɵfac,
        providedIn: 'root'
      });
      /** @nocollapse */

      FormlyFormBuilder.ctorParameters = function () {
        return [{
          type: FormlyConfig
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentFactoryResolver"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]
        }];
      };
      /** @nocollapse */


      FormlyFormBuilder.ngInjectableDef = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["defineInjectable"])({
        factory: function FormlyFormBuilder_Factory() {
          return new FormlyFormBuilder(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["inject"])(FormlyConfig), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["inject"])(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentFactoryResolver"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["inject"])(_angular_core__WEBPACK_IMPORTED_MODULE_1__["INJECTOR"]));
        },
        token: FormlyFormBuilder,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](FormlyFormBuilder, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: FormlyConfig
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentFactoryResolver"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]
          }];
        }, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} field
       * @param {?=} emitEvent
       * @return {?}
       */


      function unregisterControl(field) {
        var emitEvent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;

        /** @type {?} */
        var form =
        /** @type {?} */
        field.formControl.parent;

        if (!form) {
          return;
        }
        /** @type {?} */


        var control = field.formControl;
        /** @type {?} */

        var opts = {
          emitEvent: emitEvent
        };

        if (form instanceof _angular_forms__WEBPACK_IMPORTED_MODULE_5__["FormArray"]) {
          /** @type {?} */
          var key = form.controls.findIndex(
          /**
          * @param {?} c
          * @return {?}
          */
          function (c) {
            return c === control;
          });

          if (key !== -1) {
            updateControl(form, opts,
            /**
            * @return {?}
            */
            function () {
              return form.removeAt(key);
            });
          }
        } else if (form instanceof _angular_forms__WEBPACK_IMPORTED_MODULE_5__["FormGroup"]) {
          /** @type {?} */
          var paths = getKeyPath(field);
          /** @type {?} */

          var _key6 = paths[paths.length - 1];

          if (form.get([_key6]) === control) {
            updateControl(form, opts,
            /**
            * @return {?}
            */
            function () {
              return form.removeControl(_key6);
            });
          }
        }

        control.setParent(null);
      }
      /**
       * @param {?} field
       * @return {?}
       */


      function findControl(field) {
        if (field.formControl) {
          return field.formControl;
        }

        if (field['shareFormControl'] === false) {
          return null;
        }
        /** @type {?} */


        var form =
        /** @type {?} */
        field.parent.formControl;
        return form ? form.get(getKeyPath(field)) : null;
      }
      /**
       * @param {?} field
       * @param {?=} control
       * @param {?=} emitEvent
       * @return {?}
       */


      function registerControl(field, control) {
        var emitEvent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
        control = control || field.formControl;

        if (!control['_fields']) {
          defineHiddenProp(control, '_fields', []);
        }

        if (control['_fields'].indexOf(field) === -1) {
          control['_fields'].push(field);
        }

        if (!field.formControl && control) {
          defineHiddenProp(field, 'formControl', control);
          field.templateOptions.disabled = !!field.templateOptions.disabled;
          wrapProperty(field.templateOptions, 'disabled',
          /**
          * @param {?} __0
          * @return {?}
          */
          function (_ref9) {
            var firstChange = _ref9.firstChange,
                currentValue = _ref9.currentValue;

            if (!firstChange) {
              currentValue ? field.formControl.disable() : field.formControl.enable();
            }
          });

          if (control.registerOnDisabledChange) {
            control.registerOnDisabledChange(
            /**
            * @param {?} value
            * @return {?}
            */
            function (value) {
              field.templateOptions['___$disabled'] = value; // TODO remove in V6

              field.options && field.options._markForCheck(field);
            });
          }
        }
        /** @type {?} */


        var parent =
        /** @type {?} */
        field.parent.formControl;

        if (!parent || !field.key) {
          return;
        }
        /** @type {?} */


        var paths = getKeyPath(field);
        /** @type {?} */

        var value = getFieldValue(field);

        if (!(isNullOrUndefined(control.value) && isNullOrUndefined(value)) && control.value !== value && control instanceof _angular_forms__WEBPACK_IMPORTED_MODULE_5__["FormControl"]) {
          control.patchValue(value);
        }

        var _loop = function _loop(i) {
          /** @type {?} */
          var path = paths[i];

          if (!parent.get([path])) {
            updateControl(parent, {
              emitEvent: emitEvent
            },
            /**
            * @return {?}
            */
            function () {
              return parent.setControl(path, new _angular_forms__WEBPACK_IMPORTED_MODULE_5__["FormGroup"]({}));
            });
          }

          parent =
          /** @type {?} */
          parent.get([path]);
        };

        for (var i = 0; i < paths.length - 1; i++) {
          _loop(i);
        }
        /** @type {?} */


        var key = paths[paths.length - 1];

        if (!field._hide && parent.get([key]) !== control) {
          updateControl(parent, {
            emitEvent: emitEvent
          },
          /**
          * @return {?}
          */
          function () {
            return parent.setControl(key, control);
          });
        }
      }
      /**
       * @param {?} c
       * @return {?}
       */


      function updateValidity(c) {
        /** @type {?} */
        var status = c.status;
        c.updateValueAndValidity({
          emitEvent: false
        });

        if (status !== c.status) {
          /** @type {?} */
          c.statusChanges.emit(c.status);
        }
      }
      /**
       * @param {?} form
       * @param {?} opts
       * @param {?} action
       * @return {?}
       */


      function updateControl(form, opts, action) {
        /**
         *  workaround for https://github.com/angular/angular/issues/27679
         */
        if (form instanceof _angular_forms__WEBPACK_IMPORTED_MODULE_5__["FormGroup"] && !form['__patchForEachChild']) {
          defineHiddenProp(form, '__patchForEachChild', true);

          /** @type {?} */
          form._forEachChild =
          /**
          * @param {?} cb
          * @return {?}
          */
          function (cb) {
            Object.keys(form.controls).forEach(
            /**
            * @param {?} k
            * @return {?}
            */
            function (k) {
              return form.controls[k] && cb(form.controls[k], k);
            });
          };
        }
        /**
         * workaround for https://github.com/angular/angular/issues/20439
         * @type {?}
         */


        var updateValueAndValidity = form.updateValueAndValidity.bind(form);

        if (opts.emitEvent === false) {
          form.updateValueAndValidity =
          /**
          * @param {?} opts
          * @return {?}
          */
          function (opts) {
            updateValueAndValidity(Object.assign({}, opts || {}, {
              emitEvent: false
            }));
          };
        }

        action();

        if (opts.emitEvent === false) {
          form.updateValueAndValidity = updateValueAndValidity;
        }
      }
      /**
       * @param {?} form
       * @return {?}
       */


      function clearControl(form) {
        form['_fields'] && delete form['_fields'];
        form.setValidators(null);
        form.setAsyncValidators(null);

        if (form instanceof _angular_forms__WEBPACK_IMPORTED_MODULE_5__["FormGroup"] || form instanceof _angular_forms__WEBPACK_IMPORTED_MODULE_5__["FormArray"]) {
          Object.keys(form.controls).forEach(
          /**
          * @param {?} k
          * @return {?}
          */
          function (k) {
            return clearControl(form.controls[k]);
          });
        }
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var FormlyForm = /*#__PURE__*/function () {
        /**
         * @param {?} formlyBuilder
         * @param {?} formlyConfig
         * @param {?} ngZone
         * @param {?} immutable
         * @param {?} parentFormGroup
         */
        function FormlyForm(formlyBuilder, formlyConfig, ngZone, // tslint:disable-next-line
        immutable, parentFormGroup) {
          var _this33 = this;

          _classCallCheck2(this, FormlyForm);

          this.formlyBuilder = formlyBuilder;
          this.formlyConfig = formlyConfig;
          this.ngZone = ngZone;
          this.parentFormGroup = parentFormGroup;
          this.modelChange = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["EventEmitter"]();
          this.immutable = false;
          this._modelChangeValue = {};
          this.modelChangeSubs = [];
          this.modelChange$ = new rxjs__WEBPACK_IMPORTED_MODULE_6__["Subject"]();
          this.modelChangeSub = this.modelChange$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["switchMap"])(
          /**
          * @return {?}
          */
          function () {
            return _this33.ngZone.onStable.asObservable().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["take"])(1));
          })).subscribe(
          /**
          * @return {?}
          */
          function () {
            return _this33.ngZone.runGuarded(
            /**
            * @return {?}
            */
            function () {
              // runGuarded is used to keep the expression changes in-sync
              // https://github.com/ngx-formly/ngx-formly/issues/2095
              _this33.checkExpressionChange();

              _this33.modelChange.emit(_this33._modelChangeValue = clone(_this33.model));
            });
          });

          if (immutable !== null) {
            console.warn("NgxFormly: passing 'immutable' attribute to 'formly-form' component is deprecated since v5.5, enable immutable mode through NgModule declaration instead.");
          }

          this.immutable = immutable !== null || !!formlyConfig.extras.immutable;
        }
        /**
         * @param {?} model
         * @return {?}
         */


        _createClass2(FormlyForm, [{
          key: "model",
          get:
          /**
           * @return {?}
           */
          function get() {
            if (!this._model) {
              this._model = {};
            }

            return this._model;
          }
          /**
           * @param {?} fields
           * @return {?}
           */
          ,
          set: function set(model) {
            this._model = this.immutable ? clone(model) : model;
          }
        }, {
          key: "fields",
          get:
          /**
           * @return {?}
           */
          function get() {
            return this._fields || [];
          }
          /**
           * @param {?} options
           * @return {?}
           */
          ,
          set: function set(fields) {
            this._fields = this.immutable ? clone(fields) : fields;
          }
        }, {
          key: "options",
          get:
          /**
           * @return {?}
           */
          function get() {
            return this._options;
          }
          /**
           * @param {?} content
           * @return {?}
           */
          ,
          set: function set(options) {
            this._options = this.immutable ? clone(options) : options;
          }
        }, {
          key: "content",
          set: function set(content) {
            if (content) {
              /** @type {?} */
              var hasContent = false;
              /** @type {?} */

              var node = content.nativeElement.nextSibling;

              while (node && !hasContent) {
                if (node.nodeType === Node.ELEMENT_NODE || node.nodeType === Node.TEXT_NODE && node.textContent && node.textContent.trim() !== '') {
                  hasContent = true;
                }

                node = node.nextSibling;
              }

              if (hasContent) {
                console.warn("NgxFormly: content projection for 'formly-form' component is deprecated since v5.5, you should avoid passing content inside the 'formly-form' tag.");
              }
            }
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngDoCheck",
          value: function ngDoCheck() {
            if (this.formlyConfig.extras.checkExpressionOn === 'changeDetectionCheck') {
              this.checkExpressionChange();
            }
          }
          /**
           * @param {?} changes
           * @return {?}
           */

        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            // https://github.com/ngx-formly/ngx-formly/issues/2294
            if (changes.model && this.field) {
              this.field.model = this.model;
            }

            if (changes.fields && this.form) {
              clearControl(this.form);
            }

            if (changes.fields || changes.form || changes.model && this._modelChangeValue !== changes.model.currentValue) {
              this.form = this.form || new _angular_forms__WEBPACK_IMPORTED_MODULE_5__["FormGroup"]({});
              this.setOptions();
              this.options.updateInitialValue();
              this.clearModelSubscriptions();
              this.formlyBuilder.buildForm(this.form, this.fields, this.model, this.options);
              this.trackModelChanges(this.fields);
            }
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.modelChangeSub.unsubscribe();
            this.clearModelSubscriptions();
          }
          /**
           * @param {?} __0
           * @return {?}
           */

        }, {
          key: "changeModel",
          value: function changeModel(_ref10) {
            var key = _ref10.key,
                value = _ref10.value,
                field = _ref10.field;
            assignFieldValue(field, value);
            this.modelChange$.next();
          }
          /**
           * @return {?}
           */

        }, {
          key: "setOptions",
          value: function setOptions() {
            var _this34 = this;

            if (!this.options) {
              this.options = {};
            }

            if (!this.options.resetModel) {
              this.options.resetModel =
              /**
              * @param {?=} model
              * @return {?}
              */
              function (model) {
                model = clone(isNullOrUndefined(model) ?
                /** @type {?} */
                _this34.options._initialModel : model);

                if (_this34.model) {
                  Object.keys(_this34.model).forEach(
                  /**
                  * @param {?} k
                  * @return {?}
                  */
                  function (k) {
                    return delete _this34.model[k];
                  });
                  Object.assign(_this34.model, model || {});
                }

                /** @type {?} */
                _this34.options._buildForm(); // we should call `NgForm::resetForm` to ensure changing `submitted` state after resetting form
                // but only when the current component is a root one.


                if (_this34.options.parentForm && _this34.options.parentForm.control === _this34.form) {
                  _this34.options.parentForm.resetForm(_this34.model);
                } else {
                  _this34.form.reset(_this34.model);
                }
              };
            }

            if (!this.options.parentForm && this.parentFormGroup) {
              defineHiddenProp(this.options, 'parentForm', this.parentFormGroup);
              wrapProperty(this.options.parentForm, 'submitted',
              /**
              * @param {?} __0
              * @return {?}
              */
              function (_ref11) {
                var firstChange = _ref11.firstChange;

                if (!firstChange) {
                  _this34.checkExpressionChange();

                  /** @type {?} */
                  _this34.options._markForCheck({
                    fieldGroup: _this34.fields,
                    model: _this34.model,
                    formControl: _this34.form,
                    options: _this34.options
                  });
                }
              });
            }

            if (!this.options.updateInitialValue) {
              this.options.updateInitialValue =
              /**
              * @return {?}
              */
              function () {
                return (
                  /** @type {?} */
                  _this34.options._initialModel = clone(_this34.model)
                );
              };
            }

            if (!
            /** @type {?} */
            this.options._buildForm) {
              /** @type {?} */
              this.options._buildForm =
              /**
              * @param {?=} emitModelChange
              * @return {?}
              */
              function () {
                var emitModelChange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;

                _this34.clearModelSubscriptions();

                _this34.formlyBuilder.buildForm(_this34.form, _this34.fields, _this34.model, _this34.options);

                _this34.trackModelChanges(_this34.fields);

                if (emitModelChange) {
                  _this34.modelChange.emit(_this34._modelChangeValue = clone(_this34.model));
                }
              };
            }
          }
          /**
           * @private
           * @return {?}
           */

        }, {
          key: "checkExpressionChange",
          value: function checkExpressionChange() {
            if (this.options &&
            /** @type {?} */
            this.options._checkField) {
              /** @type {?} */
              this.options._checkField({
                fieldGroup: this.fields,
                model: this.model,
                formControl: this.form,
                options: this.options
              });
            }
          }
          /**
           * @private
           * @param {?} fields
           * @param {?=} rootKey
           * @return {?}
           */

        }, {
          key: "trackModelChanges",
          value: function trackModelChanges(fields) {
            var _this35 = this;

            var rootKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
            fields.forEach(
            /**
            * @param {?} field
            * @return {?}
            */
            function (field) {
              if (field.key && !field.fieldGroup) {
                /** @type {?} */
                var control = field.formControl;
                /** @type {?} */

                var valueChanges = control.valueChanges.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["distinctUntilChanged"])(
                /**
                * @param {?} x
                * @param {?} y
                * @return {?}
                */
                function (x, y) {
                  if (x !== y || Array.isArray(x) || isObject(x)) {
                    return false;
                  }

                  return true;
                }));
                var _field$modelOptions = field.modelOptions,
                    updateOn = _field$modelOptions.updateOn,
                    debounce = _field$modelOptions.debounce;

                if ((!updateOn || updateOn === 'change') && debounce && debounce["default"] > 0) {
                  valueChanges = control.valueChanges.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["debounceTime"])(debounce["default"]));
                }

                _this35.modelChangeSubs.push(valueChanges.subscribe(
                /**
                * @param {?} value
                * @return {?}
                */
                function (value) {
                  // workaround for https://github.com/angular/angular/issues/13792
                  if (control instanceof _angular_forms__WEBPACK_IMPORTED_MODULE_5__["FormControl"] && control['_fields'] && control['_fields'].length > 1) {
                    control.patchValue(value, {
                      emitEvent: false,
                      onlySelf: true
                    });
                  }

                  if (field.parsers && field.parsers.length > 0) {
                    field.parsers.forEach(
                    /**
                    * @param {?} parserFn
                    * @return {?}
                    */
                    function (parserFn) {
                      return value = parserFn(value);
                    });
                  }

                  _this35.changeModel({
                    key: [].concat(_toConsumableArray(rootKey), _toConsumableArray(getKeyPath(field))).join('.'),
                    value: value,
                    field: field
                  });
                })); // workaround for v5 (https://github.com/ngx-formly/ngx-formly/issues/2061)

                /** @type {?} */


                var observers = control.valueChanges['observers'];

                if (observers && observers.length > 1) {
                  observers.unshift(observers.pop());
                }
              }

              if (field.fieldGroup && field.fieldGroup.length > 0) {
                _this35.trackModelChanges(field.fieldGroup, field.key ? [].concat(_toConsumableArray(rootKey), _toConsumableArray(getKeyPath(field))) : rootKey);
              }
            });
          }
          /**
           * @private
           * @return {?}
           */

        }, {
          key: "clearModelSubscriptions",
          value: function clearModelSubscriptions() {
            this.modelChangeSubs.forEach(
            /**
            * @param {?} sub
            * @return {?}
            */
            function (sub) {
              return sub.unsubscribe();
            });
            this.modelChangeSubs = [];
          }
          /**
           * @private
           * @return {?}
           */

        }, {
          key: "field",
          get: function get() {
            return this.fields && this.fields[0] && this.fields[0].parent;
          }
        }]);

        return FormlyForm;
      }();

      FormlyForm.ɵfac = function FormlyForm_Factory(t) {
        return new (t || FormlyForm)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](FormlyFormBuilder), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](FormlyConfig), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinjectAttribute"]('immutable'), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_forms__WEBPACK_IMPORTED_MODULE_5__["FormGroupDirective"], 8));
      };

      FormlyForm.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({
        type: FormlyForm,
        selectors: [["formly-form"]],
        viewQuery: function FormlyForm_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵviewQuery"](_c0, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx.content = _t.first);
          }
        },
        inputs: {
          model: "model",
          fields: "fields",
          options: "options",
          form: "form"
        },
        outputs: {
          modelChange: "modelChange"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵProvidersFeature"]([FormlyFormBuilder]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵNgOnChangesFeature"]],
        ngContentSelectors: _c1,
        decls: 4,
        vars: 1,
        consts: [["hide-deprecation", "", 3, "form", "options", "model", "field", 4, "ngFor", "ngForOf"], ["content", ""], ["hide-deprecation", "", 3, "form", "options", "model", "field"]],
        template: function FormlyForm_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵprojectionDef"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](0, FormlyForm_formly_field_0_Template, 1, 4, "formly-field", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerStart"](1, null, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵprojection"](3);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngForOf", ctx.fields);
          }
        },
        directives: function directives() {
          return [_angular_common__WEBPACK_IMPORTED_MODULE_0__["NgForOf"], FormlyField];
        },
        encapsulation: 2
      });
      /** @nocollapse */

      FormlyForm.ctorParameters = function () {
        return [{
          type: FormlyFormBuilder
        }, {
          type: FormlyConfig
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Attribute"],
            args: ['immutable']
          }]
        }, {
          type: _angular_forms__WEBPACK_IMPORTED_MODULE_5__["FormGroupDirective"],
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }]
        }];
      };

      FormlyForm.propDecorators = {
        form: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        model: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        fields: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        options: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        modelChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
        }],
        content: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewChild"],
          args: ['content']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](FormlyForm, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"],
          args: [{
            selector: 'formly-form',
            template: "\n    <formly-field *ngFor=\"let field of fields\"\n      hide-deprecation\n      [form]=\"field.form\"\n      [options]=\"field.options\"\n      [model]=\"field.model\"\n      [field]=\"field\">\n    </formly-field>\n    <ng-container #content>\n      <ng-content></ng-content>\n    </ng-container>\n  ",
            providers: [FormlyFormBuilder]
          }]
        }], function () {
          return [{
            type: FormlyFormBuilder
          }, {
            type: FormlyConfig
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Attribute"],
              args: ['immutable']
            }]
          }, {
            type: _angular_forms__WEBPACK_IMPORTED_MODULE_5__["FormGroupDirective"],
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }]
          }];
        }, {
          modelChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
          }],
          model: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          fields: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          options: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          content: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewChild"],
            args: ['content']
          }],
          form: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }]
        });
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var FormlyField = /*#__PURE__*/function () {
        /**
         * @param {?} formlyConfig
         * @param {?} renderer
         * @param {?} resolver
         * @param {?} elementRef
         * @param {?} hideDeprecation
         */
        function FormlyField(formlyConfig, renderer, resolver, elementRef, // tslint:disable-next-line
        hideDeprecation) {
          _classCallCheck2(this, FormlyField);

          this.formlyConfig = formlyConfig;
          this.renderer = renderer;
          this.resolver = resolver;
          this.elementRef = elementRef;
          this.warnDeprecation = false;
          this.modelChange = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["EventEmitter"]();
          this.hostObservers = [];
          this.componentRefs = [];
          this.hooksObservers = [];
          this.warnDeprecation = hideDeprecation === null;
        }
        /**
         * @param {?} m
         * @return {?}
         */


        _createClass2(FormlyField, [{
          key: "model",
          set: function set(m) {
            this.warnDeprecation && console.warn("NgxFormly: passing 'model' input to '".concat(this.constructor.name, "' component is not required anymore, you may remove it!"));
          }
          /**
           * @param {?} form
           * @return {?}
           */

        }, {
          key: "form",
          set: function set(form) {
            this.warnDeprecation && console.warn("NgxFormly: passing 'form' input to '".concat(this.constructor.name, "' component is not required anymore, you may remove it!"));
          }
          /**
           * @param {?} options
           * @return {?}
           */

        }, {
          key: "options",
          set: function set(options) {
            this.warnDeprecation && console.warn("NgxFormly: passing 'options' input to '".concat(this.constructor.name, "' component is not required anymore, you may remove it!"));
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngAfterContentInit",
          value: function ngAfterContentInit() {
            this.triggerHook('afterContentInit');
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngAfterContentChecked",
          value: function ngAfterContentChecked() {
            this.triggerHook('afterContentChecked');
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngAfterViewInit",
          value: function ngAfterViewInit() {
            this.triggerHook('afterViewInit');
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngAfterViewChecked",
          value: function ngAfterViewChecked() {
            this.triggerHook('afterViewChecked');
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngDoCheck",
          value: function ngDoCheck() {
            this.triggerHook('doCheck');
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            this.triggerHook('onInit');
          }
          /**
           * @param {?} changes
           * @return {?}
           */

        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            this.triggerHook('onChanges', changes);
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.resetRefs(this.field);
            this.hostObservers.forEach(
            /**
            * @param {?} unsubscribe
            * @return {?}
            */
            function (unsubscribe) {
              return unsubscribe();
            });
            this.hooksObservers.forEach(
            /**
            * @param {?} unsubscribe
            * @return {?}
            */
            function (unsubscribe) {
              return unsubscribe();
            });
            this.triggerHook('onDestroy');
          }
          /**
           * @private
           * @param {?} containerRef
           * @param {?} f
           * @param {?=} wrappers
           * @return {?}
           */

        }, {
          key: "renderField",
          value: function renderField(containerRef, f) {
            var _this36 = this;

            var wrappers = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];

            if (this.containerRef === containerRef) {
              this.resetRefs(this.field);
              this.containerRef.clear();
              wrappers = this.field ? this.field.wrappers : [];
            }

            if (wrappers && wrappers.length > 0) {
              var _wrappers = wrappers,
                  _wrappers2 = _toArray(_wrappers),
                  wrapper = _wrappers2[0],
                  wps = _wrappers2.slice(1);

              var _this$formlyConfig$ge = this.formlyConfig.getWrapper(wrapper),
                  component = _this$formlyConfig$ge.component;
              /** @type {?} */


              var ref = containerRef.createComponent(this.resolver.resolveComponentFactory(component));
              this.attachComponentRef(ref, f);
              wrapProperty(ref.instance, 'fieldComponent',
              /**
              * @param {?} __0
              * @return {?}
              */
              function (_ref12) {
                var firstChange = _ref12.firstChange,
                    previousValue = _ref12.previousValue,
                    currentValue = _ref12.currentValue;

                if (currentValue) {
                  /** @type {?} */
                  var viewRef = previousValue ? previousValue.detach() : null;

                  if (viewRef && !viewRef.destroyed) {
                    currentValue.insert(viewRef);
                  } else {
                    _this36.renderField(currentValue, f, wps);
                  }

                  !firstChange && ref.changeDetectorRef.detectChanges();
                }
              });
            } else if (f && f.type) {
              var _this$formlyConfig$ge2 = this.formlyConfig.getType(f.type),
                  _component2 = _this$formlyConfig$ge2.component;
              /** @type {?} */


              var _ref13 = containerRef.createComponent(this.resolver.resolveComponentFactory(_component2));

              this.attachComponentRef(_ref13, f);
            }
          }
          /**
           * @private
           * @param {?} name
           * @param {?=} changes
           * @return {?}
           */

        }, {
          key: "triggerHook",
          value: function triggerHook(name, changes) {
            if (this.field && this.field.hooks && this.field.hooks[name]) {
              if (!changes || changes.field) {
                /** @type {?} */
                var r = this.field.hooks[name](this.field);

                if (Object(rxjs__WEBPACK_IMPORTED_MODULE_6__["isObservable"])(r) && ['onInit', 'afterContentInit', 'afterViewInit'].indexOf(name) !== -1) {
                  /** @type {?} */
                  var sub = r.subscribe();
                  this.hooksObservers.push(
                  /**
                  * @return {?}
                  */
                  function () {
                    return sub.unsubscribe();
                  });
                }
              }
            }

            if (this.field && this.field.lifecycle && this.field.lifecycle[name]) {
              this.field.lifecycle[name](this.field.form, this.field, this.field.model, this.field.options);
            }

            if (name === 'onChanges' && changes.field) {
              this.resetRefs(changes.field.previousValue);
              this.render();
            }
          }
          /**
           * @private
           * @template T
           * @param {?} ref
           * @param {?} field
           * @return {?}
           */

        }, {
          key: "attachComponentRef",
          value: function attachComponentRef(ref, field) {
            this.componentRefs.push(ref);

            field._componentRefs.push(ref);

            Object.assign(ref.instance, {
              field: field
            });
          }
          /**
           * @private
           * @return {?}
           */

        }, {
          key: "render",
          value: function render() {
            var _this37 = this;

            if (!this.field) {
              return;
            }

            this.hostObservers.forEach(
            /**
            * @param {?} unsubscribe
            * @return {?}
            */
            function (unsubscribe) {
              return unsubscribe();
            });
            this.hostObservers = [wrapProperty(this.field, 'hide',
            /**
            * @param {?} __0
            * @return {?}
            */
            function (_ref14) {
              var firstChange = _ref14.firstChange,
                  currentValue = _ref14.currentValue;

              if (!_this37.formlyConfig.extras.lazyRender) {
                firstChange && _this37.renderField(_this37.containerRef, _this37.field);

                if (!firstChange || firstChange && currentValue) {
                  _this37.renderer.setStyle(_this37.elementRef.nativeElement, 'display', currentValue ? 'none' : '');
                }
              } else {
                if (currentValue) {
                  _this37.containerRef.clear();
                } else {
                  _this37.renderField(_this37.containerRef, _this37.field);
                }
              }
            }), wrapProperty(this.field, 'className',
            /**
            * @param {?} __0
            * @return {?}
            */
            function (_ref15) {
              var firstChange = _ref15.firstChange,
                  currentValue = _ref15.currentValue;

              if (!firstChange || firstChange && currentValue) {
                _this37.renderer.setAttribute(_this37.elementRef.nativeElement, 'class', currentValue);
              }
            })];
          }
          /**
           * @private
           * @param {?} field
           * @return {?}
           */

        }, {
          key: "resetRefs",
          value: function resetRefs(field) {
            var _this38 = this;

            if (field) {
              if (field._componentRefs) {
                field._componentRefs = field._componentRefs.filter(
                /**
                * @param {?} ref
                * @return {?}
                */
                function (ref) {
                  return _this38.componentRefs.indexOf(ref) === -1;
                });
              } else {
                defineHiddenProp(this.field, '_componentRefs', []);
              }
            }

            this.componentRefs = [];
          }
        }]);

        return FormlyField;
      }();

      FormlyField.ɵfac = function FormlyField_Factory(t) {
        return new (t || FormlyField)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](FormlyConfig), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentFactoryResolver"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinjectAttribute"]('hide-deprecation'));
      };

      FormlyField.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({
        type: FormlyField,
        selectors: [["formly-field"]],
        viewQuery: function FormlyField_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵviewQuery"](_c2, 3, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewContainerRef"]);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx.containerRef = _t.first);
          }
        },
        inputs: {
          model: "model",
          form: "form",
          options: "options",
          field: "field"
        },
        outputs: {
          modelChange: "modelChange"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵNgOnChangesFeature"]],
        decls: 2,
        vars: 0,
        consts: [["container", ""]],
        template: function FormlyField_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](0, FormlyField_ng_template_0_Template, 0, 0, "ng-template", null, 0, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplateRefExtractor"]);
          }
        },
        encapsulation: 2
      });
      /** @nocollapse */

      FormlyField.ctorParameters = function () {
        return [{
          type: FormlyConfig
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Renderer2"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentFactoryResolver"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Attribute"],
            args: ['hide-deprecation']
          }]
        }];
      };

      FormlyField.propDecorators = {
        field: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        model: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        form: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        options: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        modelChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
        }],
        containerRef: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewChild"],
          args: ['container',
          /** @type {?} */
          {
            read: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewContainerRef"],
            "static": true
          }]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](FormlyField, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"],
          args: [{
            selector: 'formly-field',
            template: "<ng-template #container></ng-template>"
          }]
        }], function () {
          return [{
            type: FormlyConfig
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Renderer2"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentFactoryResolver"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Attribute"],
              args: ['hide-deprecation']
            }]
          }];
        }, {
          modelChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
          }],
          model: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          form: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          options: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          field: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          containerRef: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewChild"],
            args: ['container',
            /** @type {?} */
            {
              read: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewContainerRef"],
              "static": true
            }]
          }]
        });
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var FormlyAttributes = /*#__PURE__*/function () {
        /**
         * @param {?} renderer
         * @param {?} elementRef
         * @param {?} _document
         */
        function FormlyAttributes(renderer, elementRef, _document) {
          _classCallCheck2(this, FormlyAttributes);

          this.renderer = renderer;
          this.elementRef = elementRef;
          this.uiAttributesCache = {};
          this.uiAttributes = [].concat(FORMLY_VALIDATORS, ['tabindex', 'placeholder', 'readonly', 'disabled', 'step']);
          /**
           * HostBinding doesn't register listeners conditionally which may produce some perf issues.
           *
           * Formly issue: https://github.com/ngx-formly/ngx-formly/issues/1991
           */

          this.uiEvents = {
            listeners: [],
            events: ['click', 'keyup', 'keydown', 'keypress']
          };
          this.document = _document;
        }
        /**
         * @return {?}
         */


        _createClass2(FormlyAttributes, [{
          key: "to",
          get: function get() {
            return this.field.templateOptions || {};
          }
          /**
           * @private
           * @return {?}
           */

        }, {
          key: "fieldAttrElements",
          get: function get() {
            return this.field && this.field['_elementRefs'] || [];
          }
          /**
           * @param {?} changes
           * @return {?}
           */

        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            var _this39 = this;

            if (changes.field) {
              this.field.name && this.setAttribute('name', this.field.name);
              this.uiEvents.listeners.forEach(
              /**
              * @param {?} listener
              * @return {?}
              */
              function (listener) {
                return listener();
              });
              this.uiEvents.events.forEach(
              /**
              * @param {?} eventName
              * @return {?}
              */
              function (eventName) {
                if (_this39.to && _this39.to[eventName]) {
                  _this39.uiEvents.listeners.push(_this39.renderer.listen(_this39.elementRef.nativeElement, eventName,
                  /**
                  * @param {?} e
                  * @return {?}
                  */
                  function (e) {
                    return _this39.to[eventName](_this39.field, e);
                  }));
                }
              });

              if (this.to && this.to.attributes) {
                wrapProperty(this.to, 'attributes',
                /**
                * @param {?} __0
                * @return {?}
                */
                function (_ref16) {
                  var currentValue = _ref16.currentValue,
                      previousValue = _ref16.previousValue;

                  if (previousValue) {
                    Object.keys(previousValue).forEach(
                    /**
                    * @param {?} attr
                    * @return {?}
                    */
                    function (attr) {
                      return _this39.removeAttribute(attr);
                    });
                  }

                  if (currentValue) {
                    Object.keys(currentValue).forEach(
                    /**
                    * @param {?} attr
                    * @return {?}
                    */
                    function (attr) {
                      return _this39.setAttribute(attr, currentValue[attr]);
                    });
                  }
                });
              }

              this.detachElementRef(changes.field.previousValue);
              this.attachElementRef(changes.field.currentValue);

              if (this.fieldAttrElements.length === 1) {
                !this.id && this.field.id && this.setAttribute('id', this.field.id);
                wrapProperty(this.field, 'focus',
                /**
                * @param {?} __0
                * @return {?}
                */
                function (_ref17) {
                  var currentValue = _ref17.currentValue;

                  _this39.toggleFocus(currentValue);
                });
              }
            }

            if (changes.id) {
              this.setAttribute('id', this.id);
            }
          }
          /**
           * We need to re-evaluate all the attributes on every change detection cycle, because
           * by using a HostBinding we run into certain edge cases. This means that whatever logic
           * is in here has to be super lean or we risk seriously damaging or destroying the performance.
           *
           * Formly issue: https://github.com/ngx-formly/ngx-formly/issues/1317
           * Material issue: https://github.com/angular/components/issues/14024
           * @return {?}
           */

        }, {
          key: "ngDoCheck",
          value: function ngDoCheck() {
            var _this40 = this;

            this.uiAttributes.forEach(
            /**
            * @param {?} attr
            * @return {?}
            */
            function (attr) {
              /** @type {?} */
              var value = _this40.to[attr];

              if (_this40.uiAttributesCache[attr] !== value) {
                _this40.uiAttributesCache[attr] = value;

                if (value || value === 0) {
                  _this40.setAttribute(attr, value === true ? attr : "".concat(value));
                } else {
                  _this40.removeAttribute(attr);
                }
              }
            });
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.uiEvents.listeners.forEach(
            /**
            * @param {?} listener
            * @return {?}
            */
            function (listener) {
              return listener();
            });
            this.detachElementRef(this.field);
          }
          /**
           * @param {?} value
           * @return {?}
           */

        }, {
          key: "toggleFocus",
          value: function toggleFocus(value) {
            var _this41 = this;

            /** @type {?} */
            var element = this.fieldAttrElements ? this.fieldAttrElements[0] : null;

            if (!element || !element.nativeElement.focus) {
              return;
            }
            /** @type {?} */


            var isFocused = !!this.document.activeElement && this.fieldAttrElements.some(
            /**
            * @param {?} __0
            * @return {?}
            */
            function (_ref18) {
              var nativeElement = _ref18.nativeElement;
              return _this41.document.activeElement === nativeElement || nativeElement.contains(_this41.document.activeElement);
            });

            if (value && !isFocused) {
              element.nativeElement.focus();
            } else if (!value && isFocused) {
              element.nativeElement.blur();
            }
          }
          /**
           * @param {?} $event
           * @return {?}
           */

        }, {
          key: "onFocus",
          value: function onFocus($event) {
            this.field['___$focus'] = true;

            if (this.to.focus) {
              this.to.focus(this.field, $event);
            }
          }
          /**
           * @param {?} $event
           * @return {?}
           */

        }, {
          key: "onBlur",
          value: function onBlur($event) {
            this.field['___$focus'] = false;

            if (this.to.blur) {
              this.to.blur(this.field, $event);
            }
          }
          /**
           * @param {?} $event
           * @return {?}
           */

        }, {
          key: "onChange",
          value: function onChange($event) {
            if (this.to.change) {
              this.to.change(this.field, $event);
            }

            if (this.field.formControl) {
              this.field.formControl.markAsDirty();
            }
          }
          /**
           * @private
           * @param {?} f
           * @return {?}
           */

        }, {
          key: "attachElementRef",
          value: function attachElementRef(f) {
            if (!f) {
              return;
            }

            if (f['_elementRefs'] && f['_elementRefs'].indexOf(this.elementRef) === -1) {
              f['_elementRefs'].push(this.elementRef);
            } else {
              defineHiddenProp(f, '_elementRefs', [this.elementRef]);
            }
          }
          /**
           * @private
           * @param {?} f
           * @return {?}
           */

        }, {
          key: "detachElementRef",
          value: function detachElementRef(f) {
            /** @type {?} */
            var index = f && f['_elementRefs'] ? this.fieldAttrElements.indexOf(this.elementRef) : -1;

            if (index !== -1) {
              this.field['_elementRefs'].splice(index, 1);
            }
          }
          /**
           * @private
           * @param {?} attr
           * @param {?} value
           * @return {?}
           */

        }, {
          key: "setAttribute",
          value: function setAttribute(attr, value) {
            this.renderer.setAttribute(this.elementRef.nativeElement, attr, value);
          }
          /**
           * @private
           * @param {?} attr
           * @return {?}
           */

        }, {
          key: "removeAttribute",
          value: function removeAttribute(attr) {
            this.renderer.removeAttribute(this.elementRef.nativeElement, attr);
          }
        }]);

        return FormlyAttributes;
      }();

      FormlyAttributes.ɵfac = function FormlyAttributes_Factory(t) {
        return new (t || FormlyAttributes)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]));
      };

      FormlyAttributes.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({
        type: FormlyAttributes,
        selectors: [["", "formlyAttributes", ""]],
        hostBindings: function FormlyAttributes_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("focus", function FormlyAttributes_focus_HostBindingHandler($event) {
              return ctx.onFocus($event);
            })("blur", function FormlyAttributes_blur_HostBindingHandler($event) {
              return ctx.onBlur($event);
            })("change", function FormlyAttributes_change_HostBindingHandler($event) {
              return ctx.onChange($event);
            });
          }
        },
        inputs: {
          field: ["formlyAttributes", "field"],
          id: "id"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵNgOnChangesFeature"]]
      });
      /** @nocollapse */

      FormlyAttributes.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Renderer2"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
          }]
        }];
      };

      FormlyAttributes.propDecorators = {
        field: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['formlyAttributes']
        }],
        id: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](FormlyAttributes, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
          args: [{
            selector: '[formlyAttributes]',
            host: {
              '(focus)': 'onFocus($event)',
              '(blur)': 'onBlur($event)',
              '(change)': 'onChange($event)'
            }
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Renderer2"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
            }]
          }];
        }, {
          field: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['formlyAttributes']
          }],
          id: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }]
        });
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @abstract
       * @template F
       */


      var FieldType = /*#__PURE__*/function () {
        function FieldType() {
          _classCallCheck2(this, FieldType);
        }

        _createClass2(FieldType, [{
          key: "model",
          get:
          /**
           * @return {?}
           */
          function get() {
            return this.field.model;
          }
          /**
           * @param {?} m
           * @return {?}
           */
          ,
          set: function set(m) {
            console.warn("NgxFormly: passing 'model' input to '".concat(this.constructor.name, "' component is not required anymore, you may remove it!"));
          }
          /**
           * @return {?}
           */

        }, {
          key: "form",
          get: function get() {
            return (
              /** @type {?} */
              this.field.parent.formControl
            );
          }
          /**
           * @param {?} form
           * @return {?}
           */
          ,
          set: function set(form) {
            console.warn("NgxFormly: passing 'form' input to '".concat(this.constructor.name, "' component is not required anymore, you may remove it!"));
          }
          /**
           * @return {?}
           */

        }, {
          key: "options",
          get: function get() {
            return this.field.options;
          }
          /**
           * @param {?} options
           * @return {?}
           */
          ,
          set: function set(options) {
            console.warn("NgxFormly: passing 'options' input to '".concat(this.constructor.name, "' component is not required anymore, you may remove it!"));
          }
          /**
           * @return {?}
           */

        }, {
          key: "key",
          get: function get() {
            return this.field.key;
          }
          /**
           * @return {?}
           */

        }, {
          key: "formControl",
          get: function get() {
            return this.field.formControl;
          }
          /**
           * @return {?}
           */

        }, {
          key: "to",
          get: function get() {
            return this.field.templateOptions || {};
          }
          /**
           * @return {?}
           */

        }, {
          key: "showError",
          get: function get() {
            return this.options.showError(this);
          }
          /**
           * @return {?}
           */

        }, {
          key: "id",
          get: function get() {
            return this.field.id;
          }
          /**
           * @return {?}
           */

        }, {
          key: "formState",
          get: function get() {
            return this.options.formState || {};
          }
        }]);

        return FieldType;
      }();

      FieldType.ɵfac = function FieldType_Factory(t) {
        return new (t || FieldType)();
      };

      FieldType.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({
        type: FieldType,
        inputs: {
          model: "model",
          form: "form",
          options: "options",
          field: "field"
        }
      });
      FieldType.propDecorators = {
        field: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        model: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        form: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        options: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }]
      };
      /**
       * @deprecated use `FieldType` instead
       * @abstract
       */

      var Field = /*#__PURE__*/function (_FieldType) {
        _inherits2(Field, _FieldType);

        var _super34 = _createSuper(Field);

        function Field() {
          var _this42;

          _classCallCheck2(this, Field);

          _this42 = _super34.call(this);
          console.warn("NgxFormly: 'Field' has been renamed to 'FieldType', extend 'FieldType' instead.");
          return _this42;
        }

        return Field;
      }(FieldType);
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */
      // TODO remove `selector` in V6
      // tslint:disable-next-line

      /**
       * @abstract
       * @template F
       */


      var FieldArrayType = /*#__PURE__*/function (_FieldType2) {
        _inherits2(FieldArrayType, _FieldType2);

        var _super35 = _createSuper(FieldArrayType);

        /**
         * @param {?=} builder
         */
        function FieldArrayType(builder) {
          var _this43;

          _classCallCheck2(this, FieldArrayType);

          _this43 = _super35.call(this);
          _this43.defaultOptions = {
            defaultValue: []
          };

          if (builder instanceof FormlyFormBuilder) {
            console.warn("NgxFormly: passing 'FormlyFormBuilder' to '".concat(_this43.constructor.name, "' type is not required anymore, you may remove it!"));
          }

          return _this43;
        }
        /**
         * @return {?}
         */


        _createClass2(FieldArrayType, [{
          key: "formControl",
          get: function get() {
            return (
              /** @type {?} */
              this.field.formControl
            );
          }
          /**
           * @param {?} field
           * @return {?}
           */

        }, {
          key: "onPopulate",
          value: function onPopulate(field) {
            if (!field.formControl && field.key) {
              /** @type {?} */
              var control = findControl(field);
              registerControl(field, control ? control : new _angular_forms__WEBPACK_IMPORTED_MODULE_5__["FormArray"]([], {
                updateOn: field.modelOptions.updateOn
              }));
            }

            field.fieldGroup = field.fieldGroup || [];
            /** @type {?} */

            var length = field.model ? field.model.length : 0;

            if (field.fieldGroup.length > length) {
              for (var i = field.fieldGroup.length - 1; i >= length; --i) {
                unregisterControl(field.fieldGroup[i]);
                field.fieldGroup.splice(i, 1);
              }
            }

            for (var _i2 = field.fieldGroup.length; _i2 < length; _i2++) {
              /** @type {?} */
              var f = Object.assign({}, clone(field.fieldArray), {
                key: "".concat(_i2)
              });
              field.fieldGroup.push(f);
            }
          }
          /**
           * @param {?=} i
           * @param {?=} initialModel
           * @param {?=} __2
           * @return {?}
           */

        }, {
          key: "add",
          value: function add(i, initialModel) {
            var _ref19 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
              markAsDirty: true
            },
                markAsDirty = _ref19.markAsDirty;

            i = isNullOrUndefined(i) ? this.field.fieldGroup.length : i;

            if (!this.model) {
              assignFieldValue(this.field, []);
            }

            this.model.splice(i, 0, initialModel ? clone(initialModel) : undefined);

            /** @type {?} */
            this.options._buildForm(true);

            markAsDirty && this.formControl.markAsDirty();
          }
          /**
           * @param {?} i
           * @param {?=} __1
           * @return {?}
           */

        }, {
          key: "remove",
          value: function remove(i) {
            var _ref20 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
              markAsDirty: true
            },
                markAsDirty = _ref20.markAsDirty;

            this.model.splice(i, 1);
            unregisterControl(this.field.fieldGroup[i], true);
            this.field.fieldGroup.splice(i, 1);
            this.field.fieldGroup.forEach(
            /**
            * @param {?} f
            * @param {?} key
            * @return {?}
            */
            function (f, key) {
              return f.key = "".concat(key);
            });

            /** @type {?} */
            this.options._buildForm(true);

            markAsDirty && this.formControl.markAsDirty();
          }
        }]);

        return FieldArrayType;
      }(FieldType);

      FieldArrayType.ɵfac = function FieldArrayType_Factory(t) {
        return new (t || FieldArrayType)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](FORMLY_CONFIG, 8));
      };

      FieldArrayType.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({
        type: FieldArrayType,
        selectors: [["fieldArray"]],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"]]
      });
      /** @nocollapse */

      FieldArrayType.ctorParameters = function () {
        return [{
          type: FormlyFormBuilder,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [FORMLY_CONFIG]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](FieldArrayType, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
          args: [{
            selector: '[ɵfieldArray]'
          }]
        }], function () {
          return [{
            type: FormlyFormBuilder,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [FORMLY_CONFIG]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }]
          }];
        }, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @abstract
       * @template F
       */


      var FieldWrapper = /*#__PURE__*/function (_FieldType3) {
        _inherits2(FieldWrapper, _FieldType3);

        var _super36 = _createSuper(FieldWrapper);

        function FieldWrapper() {
          _classCallCheck2(this, FieldWrapper);

          return _super36.apply(this, arguments);
        }

        return FieldWrapper;
      }(FieldType);

      FieldWrapper.ɵfac = function FieldWrapper_Factory(t) {
        return ɵFieldWrapper_BaseFactory(t || FieldWrapper);
      };

      FieldWrapper.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({
        type: FieldWrapper,
        viewQuery: function FieldWrapper_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵviewQuery"](_c3, 1, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewContainerRef"]);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx.fieldComponent = _t.first);
          }
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"]]
      });
      FieldWrapper.propDecorators = {
        fieldComponent: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewChild"],
          args: ['fieldComponent',
          /** @type {?} */
          {
            read: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewContainerRef"],
            "static": false
          }]
        }]
      };

      var ɵFieldWrapper_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetInheritedFactory"](FieldWrapper);
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var FormlyGroup = /*#__PURE__*/function (_FieldType4) {
        _inherits2(FormlyGroup, _FieldType4);

        var _super37 = _createSuper(FormlyGroup);

        function FormlyGroup() {
          var _this44;

          _classCallCheck2(this, FormlyGroup);

          _this44 = _super37.apply(this, arguments);
          _this44.defaultOptions = {
            defaultValue: {}
          };
          return _this44;
        }

        return FormlyGroup;
      }(FieldType);

      FormlyGroup.ɵfac = function FormlyGroup_Factory(t) {
        return ɵFormlyGroup_BaseFactory(t || FormlyGroup);
      };

      FormlyGroup.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({
        type: FormlyGroup,
        selectors: [["formly-group"]],
        hostVars: 2,
        hostBindings: function FormlyGroup_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassMap"](ctx.field.fieldGroupClassName || "");
          }
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"]],
        ngContentSelectors: _c1,
        decls: 2,
        vars: 1,
        consts: [[3, "field", 4, "ngFor", "ngForOf"], [3, "field"]],
        template: function FormlyGroup_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵprojectionDef"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](0, FormlyGroup_formly_field_0_Template, 1, 1, "formly-field", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵprojection"](1);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngForOf", ctx.field.fieldGroup);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["NgForOf"], FormlyField],
        encapsulation: 2
      });

      var ɵFormlyGroup_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetInheritedFactory"](FormlyGroup);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](FormlyGroup, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"],
          args: [{
            selector: 'formly-group',
            template: "\n    <formly-field *ngFor=\"let f of field.fieldGroup\" [field]=\"f\"></formly-field>\n    <ng-content></ng-content>\n  ",
            host: {
              '[class]': 'field.fieldGroupClassName || ""'
            }
          }]
        }], null, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var FormlyValidationMessage = /*#__PURE__*/function () {
        /**
         * @param {?} formlyConfig
         */
        function FormlyValidationMessage(formlyConfig) {
          _classCallCheck2(this, FormlyValidationMessage);

          this.formlyConfig = formlyConfig;
        }
        /**
         * @return {?}
         */


        _createClass2(FormlyValidationMessage, [{
          key: "ngOnChanges",
          value: function ngOnChanges() {
            var _this45 = this;

            this.errorMessage$ = this.field.formControl.statusChanges.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["startWith"])(null), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["switchMap"])(
            /**
            * @return {?}
            */
            function () {
              return Object(rxjs__WEBPACK_IMPORTED_MODULE_6__["isObservable"])(_this45.errorMessage) ? _this45.errorMessage : Object(rxjs__WEBPACK_IMPORTED_MODULE_6__["of"])(_this45.errorMessage);
            }));
          }
          /**
           * @return {?}
           */

        }, {
          key: "errorMessage",
          get: function get() {
            /** @type {?} */
            var fieldForm = this.field.formControl;

            for (var error in fieldForm.errors) {
              if (fieldForm.errors.hasOwnProperty(error)) {
                /** @type {?} */
                var message = this.formlyConfig.getValidatorMessage(error);

                if (isObject(fieldForm.errors[error])) {
                  if (fieldForm.errors[error].errorPath) {
                    return;
                  }

                  if (fieldForm.errors[error].message) {
                    message = fieldForm.errors[error].message;
                  }
                }

                if (this.field.validation && this.field.validation.messages && this.field.validation.messages[error]) {
                  message = this.field.validation.messages[error];
                }

                if (this.field.validators && this.field.validators[error] && this.field.validators[error].message) {
                  message = this.field.validators[error].message;
                }

                if (this.field.asyncValidators && this.field.asyncValidators[error] && this.field.asyncValidators[error].message) {
                  message = this.field.asyncValidators[error].message;
                }

                if (typeof message === 'function') {
                  return message(fieldForm.errors[error], this.field);
                }

                return message;
              }
            }
          }
        }]);

        return FormlyValidationMessage;
      }();

      FormlyValidationMessage.ɵfac = function FormlyValidationMessage_Factory(t) {
        return new (t || FormlyValidationMessage)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](FormlyConfig));
      };

      FormlyValidationMessage.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({
        type: FormlyValidationMessage,
        selectors: [["formly-validation-message"]],
        inputs: {
          field: "field"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵNgOnChangesFeature"]],
        decls: 2,
        vars: 3,
        template: function FormlyValidationMessage_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](0);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipe"](1, "async");
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipeBind1"](1, 1, ctx.errorMessage$));
          }
        },
        pipes: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["AsyncPipe"]],
        encapsulation: 2,
        changeDetection: 0
      });
      /** @nocollapse */

      FormlyValidationMessage.ctorParameters = function () {
        return [{
          type: FormlyConfig
        }];
      };

      FormlyValidationMessage.propDecorators = {
        field: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](FormlyValidationMessage, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"],
          args: [{
            selector: 'formly-validation-message',
            template: "{{ errorMessage$ | async }}",
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectionStrategy"].OnPush
          }]
        }], function () {
          return [{
            type: FormlyConfig
          }];
        }, {
          field: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }]
        });
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var FormlyTemplateType = /*#__PURE__*/function (_FieldType5) {
        _inherits2(FormlyTemplateType, _FieldType5);

        var _super38 = _createSuper(FormlyTemplateType);

        /**
         * @param {?} sanitizer
         */
        function FormlyTemplateType(sanitizer) {
          var _this46;

          _classCallCheck2(this, FormlyTemplateType);

          _this46 = _super38.call(this);
          _this46.sanitizer = sanitizer;
          _this46.innerHtml = {
            content: null,
            template: null
          };
          return _this46;
        }
        /**
         * @return {?}
         */


        _createClass2(FormlyTemplateType, [{
          key: "template",
          get: function get() {
            if (this.field && this.field.template !== this.innerHtml.template) {
              this.innerHtml = {
                template: this.field.template,
                content: this.to.safeHtml ? this.sanitizer.bypassSecurityTrustHtml(this.field.template) : this.field.template
              };
            }

            return this.innerHtml.content;
          }
        }]);

        return FormlyTemplateType;
      }(FieldType);

      FormlyTemplateType.ɵfac = function FormlyTemplateType_Factory(t) {
        return new (t || FormlyTemplateType)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_platform_browser__WEBPACK_IMPORTED_MODULE_2__["DomSanitizer"]));
      };

      FormlyTemplateType.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({
        type: FormlyTemplateType,
        selectors: [["formly-template"]],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"]],
        decls: 1,
        vars: 1,
        consts: [[3, "innerHtml"]],
        template: function FormlyTemplateType_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](0, "div", 0);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("innerHtml", ctx.template, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsanitizeHtml"]);
          }
        },
        encapsulation: 2
      });
      /** @nocollapse */

      FormlyTemplateType.ctorParameters = function () {
        return [{
          type: _angular_platform_browser__WEBPACK_IMPORTED_MODULE_2__["DomSanitizer"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](FormlyTemplateType, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"],
          args: [{
            selector: 'formly-template',
            template: "<div [innerHtml]=\"template\"></div>"
          }]
        }], function () {
          return [{
            type: _angular_platform_browser__WEBPACK_IMPORTED_MODULE_2__["DomSanitizer"]
          }];
        }, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} expression
       * @param {?} argNames
       * @return {?}
       */


      function evalStringExpression(expression, argNames) {
        try {
          if (expression.indexOf('this.field') !== -1) {
            console.warn("NgxFormly: using 'this.field' in expressionProperties is deprecated since v5.1, use 'field' instead.");
          }

          return (
            /** @type {?} */
            Function.apply(void 0, _toConsumableArray(argNames).concat(["return ".concat(expression, ";")]))
          );
        } catch (error) {
          console.error(error);
        }
      }
      /**
       * @param {?} expression
       * @param {?} thisArg
       * @param {?} argVal
       * @return {?}
       */


      function evalExpression(expression, thisArg, argVal) {
        if (expression instanceof Function) {
          return expression.apply(thisArg, argVal);
        } else {
          return expression ? true : false;
        }
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * \@experimental
       */


      var FieldExpressionExtension = /*#__PURE__*/function () {
        function FieldExpressionExtension() {
          _classCallCheck2(this, FieldExpressionExtension);
        }

        _createClass2(FieldExpressionExtension, [{
          key: "prePopulate",
          value:
          /**
           * @param {?} field
           * @return {?}
           */
          function prePopulate(field) {
            var _this47 = this;

            if (field.parent || field.options._checkField) {
              return;
            }
            /** @type {?} */


            var checkLocked = false;

            field.options._checkField =
            /**
            * @param {?} f
            * @param {?} ignoreCache
            * @return {?}
            */
            function (f, ignoreCache) {
              if (!checkLocked) {
                checkLocked = true;
                reduceFormUpdateValidityCalls(f.formControl,
                /**
                * @return {?}
                */
                function () {
                  return _this47.checkField(f, ignoreCache);
                });
                checkLocked = false;
              }
            };
          }
          /**
           * @param {?} field
           * @return {?}
           */

        }, {
          key: "postPopulate",
          value: function postPopulate(field) {
            var _this48 = this;

            if (!field.parent || field._expressionProperties) {
              return;
            } // cache built expression


            defineHiddenProp(field, '_expressionProperties', {});

            if (field.expressionProperties) {
              var _loop2 = function _loop2(key) {
                /** @type {?} */
                var expressionProperty = field.expressionProperties[key];

                if (typeof expressionProperty === 'string' || isFunction(expressionProperty)) {
                  field._expressionProperties[key] = {
                    expression: _this48._evalExpression(key, expressionProperty, key === 'templateOptions.disabled' && field.parent.expressionProperties && field.parent.expressionProperties.hasOwnProperty('templateOptions.disabled') ?
                    /**
                    * @return {?}
                    */
                    function () {
                      return field.parent.templateOptions.disabled;
                    } : undefined)
                  };

                  if (key === 'templateOptions.disabled') {
                    Object.defineProperty(field._expressionProperties[key], 'expressionValue', {
                      get:
                      /**
                      * @return {?}
                      */
                      function get() {
                        return field.templateOptions.disabled;
                      },
                      set:
                      /**
                      * @return {?}
                      */
                      function set() {},
                      enumerable: true,
                      configurable: true
                    });
                  }
                } else if (expressionProperty instanceof rxjs__WEBPACK_IMPORTED_MODULE_6__["Observable"]) {
                  /** @type {?} */
                  var subscribe =
                  /**
                  * @return {?}
                  */
                  function subscribe() {
                    return (
                      /** @type {?} */
                      expressionProperty.subscribe(
                      /**
                      * @param {?} v
                      * @return {?}
                      */
                      function (v) {
                        _this48.setExprValue(field, key, v);

                        if (field.options && field.options._markForCheck) {
                          field.options._markForCheck(field);
                        }
                      })
                    );
                  };
                  /** @type {?} */


                  var subscription = subscribe();
                  /** @type {?} */

                  var onInit = field.hooks.onInit;

                  field.hooks.onInit =
                  /**
                  * @return {?}
                  */
                  function () {
                    if (subscription === null) {
                      subscription = subscribe();
                    }

                    return onInit && onInit(field);
                  };
                  /** @type {?} */


                  var onDestroy = field.hooks.onDestroy;

                  field.hooks.onDestroy =
                  /**
                  * @return {?}
                  */
                  function () {
                    onDestroy && onDestroy(field);
                    subscription.unsubscribe();
                    subscription = null;
                  };
                }
              };

              for (var key in field.expressionProperties) {
                _loop2(key);
              }
            }

            if (field.hideExpression) {
              // delete hide value in order to force re-evaluate it in FormlyFormExpression.
              delete field.hide;
              field.hideExpression = this._evalExpression('hide', field.hideExpression,
              /**
              * @return {?}
              */
              function () {
                /** @type {?} */
                var root = field.parent;

                while (root.parent && !root.hide) {
                  root = root.parent;
                }

                return root.hide;
              });
            } else {
              wrapProperty(field, 'hide',
              /**
              * @param {?} __0
              * @return {?}
              */
              function (_ref21) {
                var currentValue = _ref21.currentValue,
                    firstChange = _ref21.firstChange;
                field._hide = currentValue;

                if (!firstChange || firstChange && currentValue === true) {
                  field.options._hiddenFieldsForCheck.push(field);
                }
              });
            }
          }
          /**
           * @private
           * @param {?} prop
           * @param {?} expression
           * @param {?=} parentExpression
           * @return {?}
           */

        }, {
          key: "_evalExpression",
          value: function _evalExpression(prop, _expression, parentExpression) {
            return (
              /**
              * @param {?} model
              * @param {?} formState
              * @param {?} field
              * @return {?}
              */
              function (model, formState, field) {
                try {
                  if (typeof _expression === 'string') {
                    _expression = evalStringExpression(_expression, ['model', 'formState', 'field']);
                  }

                  if (typeof _expression !== 'function') {
                    _expression =
                    /**
                    * @return {?}
                    */
                    function expression() {
                      return !!_expression;
                    };
                  }

                  return parentExpression && parentExpression() || _expression(model, formState, field);
                } catch (error) {
                  error.message = "[Formly Error] [Expression \"".concat(prop, "\"] ").concat(error.message);
                  throw error;
                }
              }
            );
          }
          /**
           * @private
           * @param {?} field
           * @param {?=} ignoreCache
           * @return {?}
           */

        }, {
          key: "checkField",
          value: function checkField(field) {
            var _this49 = this;

            var ignoreCache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;

            this._checkField(field, ignoreCache);

            field.options._hiddenFieldsForCheck.sort(
            /**
            * @param {?} f
            * @return {?}
            */
            function (f) {
              return f.hide ? -1 : 1;
            }).forEach(
            /**
            * @param {?} f
            * @return {?}
            */
            function (f) {
              return _this49.toggleFormControl(f, !!f.hide, !ignoreCache);
            });

            field.options._hiddenFieldsForCheck = [];
          }
          /**
           * @private
           * @param {?} field
           * @param {?=} ignoreCache
           * @return {?}
           */

        }, {
          key: "_checkField",
          value: function _checkField(field) {
            var _this50 = this;

            var ignoreCache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;

            /** @type {?} */
            var markForCheck = false;
            field.fieldGroup.forEach(
            /**
            * @param {?} f
            * @return {?}
            */
            function (f) {
              _this50.checkFieldExpressionChange(f, ignoreCache) && (markForCheck = true);

              if (_this50.checkFieldVisibilityChange(f, ignoreCache)) {
                field.options._hiddenFieldsForCheck.push(f);

                markForCheck = true;
              }

              if (f.fieldGroup && f.fieldGroup.length > 0) {
                _this50._checkField(f, ignoreCache);
              }
            });

            if (markForCheck && field.options && field.options._markForCheck) {
              field.options._markForCheck(field);
            }
          }
          /**
           * @private
           * @param {?} field
           * @param {?} ignoreCache
           * @return {?}
           */

        }, {
          key: "checkFieldExpressionChange",
          value: function checkFieldExpressionChange(field, ignoreCache) {
            if (!field || !field._expressionProperties) {
              return false;
            }
            /** @type {?} */


            var markForCheck = false;
            /** @type {?} */

            var expressionProperties = field._expressionProperties;

            for (var key in expressionProperties) {
              /** @type {?} */
              var expressionValue = evalExpression(expressionProperties[key].expression, {
                field: field
              }, [field.model, field.options.formState, field]);

              if (key === 'templateOptions.disabled') {
                expressionValue = !!expressionValue;
              }

              if (ignoreCache || expressionProperties[key].expressionValue !== expressionValue && (!isObject(expressionValue) || JSON.stringify(expressionValue) !== JSON.stringify(expressionProperties[key].expressionValue))) {
                markForCheck = true;
                expressionProperties[key].expressionValue = expressionValue;
                this.setExprValue(field, key, expressionValue);
              }
            }

            return markForCheck;
          }
          /**
           * @private
           * @param {?} field
           * @param {?} ignoreCache
           * @return {?}
           */

        }, {
          key: "checkFieldVisibilityChange",
          value: function checkFieldVisibilityChange(field, ignoreCache) {
            if (!field || isNullOrUndefined(field.hideExpression)) {
              return false;
            }
            /** @type {?} */


            var hideExpressionResult = !!evalExpression(field.hideExpression, {
              field: field
            }, [field.model, field.options.formState, field]);
            /** @type {?} */

            var markForCheck = false;

            if (hideExpressionResult !== field.hide || ignoreCache) {
              markForCheck = true; // toggle hide

              field.hide = hideExpressionResult;
              field.templateOptions.hidden = hideExpressionResult;
            }

            return markForCheck;
          }
          /**
           * @private
           * @param {?} field
           * @param {?} value
           * @return {?}
           */

        }, {
          key: "setDisabledState",
          value: function setDisabledState(field, value) {
            var _this51 = this;

            if (field.fieldGroup) {
              field.fieldGroup.filter(
              /**
              * @param {?} f
              * @return {?}
              */
              function (f) {
                return !f.expressionProperties || !f.expressionProperties.hasOwnProperty('templateOptions.disabled');
              }).forEach(
              /**
              * @param {?} f
              * @return {?}
              */
              function (f) {
                return _this51.setDisabledState(f, value);
              });
            }

            if (field.key && field.templateOptions.disabled !== value) {
              field.templateOptions.disabled = value;
            }
          }
          /**
           * @private
           * @param {?} field
           * @param {?} hide
           * @param {?} resetOnHide
           * @return {?}
           */

        }, {
          key: "toggleFormControl",
          value: function toggleFormControl(field, hide, resetOnHide) {
            var _this52 = this;

            if (field.formControl && field.key) {
              defineHiddenProp(field, '_hide', !!(hide || field.hide));
              /** @type {?} */

              var c = field.formControl;

              if (c['_fields'].length > 1) {
                updateValidity(c);
              }

              if (hide === true && c['_fields'].every(
              /**
              * @param {?} f
              * @return {?}
              */
              function (f) {
                return !!f._hide;
              })) {
                unregisterControl(field, true);

                if (resetOnHide && field.resetOnHide) {
                  field.formControl.reset({
                    value: undefined,
                    disabled: field.formControl.disabled
                  });

                  if (field.fieldGroup) {
                    assignFieldValue(field, undefined);

                    if (field.formControl instanceof _angular_forms__WEBPACK_IMPORTED_MODULE_5__["FormArray"]) {
                      field.fieldGroup.length = 0;
                    }
                  }
                }
              } else if (hide === false) {
                if (field.resetOnHide && field.parent && !isUndefined(field.defaultValue) && isUndefined(getFieldValue(field))) {
                  assignFieldValue(field, field.defaultValue);
                }

                registerControl(field, undefined, true);

                if (field.resetOnHide && field.fieldArray && (field.fieldGroup || []).length !== (field.model || []).length) {
                  /** @type {?} */
                  field.options._buildForm(true);
                }
              }
            }

            if (field.fieldGroup) {
              field.fieldGroup.filter(
              /**
              * @param {?} f
              * @return {?}
              */
              function (f) {
                return !f.hideExpression;
              }).forEach(
              /**
              * @param {?} f
              * @return {?}
              */
              function (f) {
                return _this52.toggleFormControl(f, hide, resetOnHide);
              });
            }

            if (field.options.fieldChanges) {
              field.options.fieldChanges.next(
              /** @type {?} */
              {
                field: field,
                type: 'hidden',
                value: hide
              });
            }
          }
          /**
           * @private
           * @param {?} field
           * @param {?} prop
           * @param {?} value
           * @return {?}
           */

        }, {
          key: "setExprValue",
          value: function setExprValue(field, prop, value) {
            try {
              /** @type {?} */
              var target = field;
              /** @type {?} */

              var paths = (prop.indexOf('[') === -1 ? prop : prop.replace(/\[(\w+)\]/g, '.$1')).split('.');
              /** @type {?} */

              var lastIndex = paths.length - 1;

              for (var i = 0; i < lastIndex; i++) {
                target = target[paths[i]];
              }

              target[paths[lastIndex]] = value;
            } catch (error) {
              error.message = "[Formly Error] [Expression \"".concat(prop, "\"] ").concat(error.message);
              throw error;
            }

            if (prop === 'templateOptions.disabled' && field.key) {
              this.setDisabledState(field, value);
            }

            if (prop.indexOf('model.') === 0) {
              /** @type {?} */
              var path = prop.replace(/^model\./, '');
              /** @type {?} */

              var control = field.key && prop === path ? field.formControl : field.parent.formControl.get(path);

              if (control && !(isNullOrUndefined(control.value) && isNullOrUndefined(value)) && control.value !== value) {
                control.patchValue(value, {
                  emitEvent: false
                });
              }
            }

            this.emitExpressionChanges(field, prop, value);
          }
          /**
           * @private
           * @param {?} field
           * @param {?} property
           * @param {?} value
           * @return {?}
           */

        }, {
          key: "emitExpressionChanges",
          value: function emitExpressionChanges(field, property, value) {
            if (!field.options.fieldChanges) {
              return;
            }

            field.options.fieldChanges.next({
              field: field,
              type: 'expressionChanges',
              property: property,
              value: value
            });
          }
        }]);

        return FieldExpressionExtension;
      }();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * \@experimental
       */


      var FieldValidationExtension = /*#__PURE__*/function () {
        /**
         * @param {?} formlyConfig
         */
        function FieldValidationExtension(formlyConfig) {
          _classCallCheck2(this, FieldValidationExtension);

          this.formlyConfig = formlyConfig;
        }
        /**
         * @param {?} field
         * @return {?}
         */


        _createClass2(FieldValidationExtension, [{
          key: "onPopulate",
          value: function onPopulate(field) {
            this.initFieldValidation(field, 'validators');
            this.initFieldValidation(field, 'asyncValidators');
          }
          /**
           * @private
           * @param {?} field
           * @param {?} type
           * @return {?}
           */

        }, {
          key: "initFieldValidation",
          value: function initFieldValidation(field, type) {
            var _this53 = this;

            /** @type {?} */
            var validators = [];

            if (type === 'validators' && !(field.hasOwnProperty('fieldGroup') && !field.key)) {
              validators.push(this.getPredefinedFieldValidation(field));
            }

            if (field[type]) {
              for (var validatorName in field[type]) {
                if (validatorName === 'validation' && !Array.isArray(field[type].validation)) {
                  field[type].validation = [field[type].validation];
                  console.warn("NgxFormly(".concat(field.key, "): passing a non array value to the 'validation' is deprecated, pass an array instead"));
                }

                validatorName === 'validation' ? validators.push.apply(validators, _toConsumableArray(field[type].validation.map(
                /**
                * @param {?} v
                * @return {?}
                */
                function (v) {
                  return _this53.wrapNgValidatorFn(field, v);
                }))) : validators.push(this.wrapNgValidatorFn(field, field[type][validatorName], validatorName));
              }
            }

            defineHiddenProp(field, '_' + type, validators);
          }
          /**
           * @private
           * @param {?} field
           * @return {?}
           */

        }, {
          key: "getPredefinedFieldValidation",
          value: function getPredefinedFieldValidation(field) {
            /** @type {?} */
            var VALIDATORS = [];
            FORMLY_VALIDATORS.forEach(
            /**
            * @param {?} opt
            * @return {?}
            */
            function (opt) {
              return wrapProperty(field.templateOptions, opt,
              /**
              * @param {?} __0
              * @return {?}
              */
              function (_ref22) {
                var currentValue = _ref22.currentValue,
                    firstChange = _ref22.firstChange;
                VALIDATORS = VALIDATORS.filter(
                /**
                * @param {?} o
                * @return {?}
                */
                function (o) {
                  return o !== opt;
                });

                if (currentValue != null && currentValue !== false) {
                  VALIDATORS.push(opt);
                }

                if (!firstChange && field.formControl) {
                  updateValidity(field.formControl);
                }
              });
            });
            return (
              /**
              * @param {?} control
              * @return {?}
              */
              function (control) {
                if (VALIDATORS.length === 0) {
                  return null;
                }

                return _angular_forms__WEBPACK_IMPORTED_MODULE_5__["Validators"].compose(VALIDATORS.map(
                /**
                * @param {?} opt
                * @return {?}
                */
                function (opt) {
                  return (
                    /**
                    * @return {?}
                    */
                    function () {
                      /** @type {?} */
                      var value = field.templateOptions[opt];

                      switch (opt) {
                        case 'required':
                          return _angular_forms__WEBPACK_IMPORTED_MODULE_5__["Validators"].required(control);

                        case 'pattern':
                          return _angular_forms__WEBPACK_IMPORTED_MODULE_5__["Validators"].pattern(value)(control);

                        case 'minLength':
                          return _angular_forms__WEBPACK_IMPORTED_MODULE_5__["Validators"].minLength(value)(control);

                        case 'maxLength':
                          return _angular_forms__WEBPACK_IMPORTED_MODULE_5__["Validators"].maxLength(value)(control);

                        case 'min':
                          return _angular_forms__WEBPACK_IMPORTED_MODULE_5__["Validators"].min(value)(control);

                        case 'max':
                          return _angular_forms__WEBPACK_IMPORTED_MODULE_5__["Validators"].max(value)(control);
                      }
                    }
                  );
                }))(control);
              }
            );
          }
          /**
           * @private
           * @param {?} field
           * @param {?} validator
           * @param {?=} validatorName
           * @return {?}
           */

        }, {
          key: "wrapNgValidatorFn",
          value: function wrapNgValidatorFn(field, validator, validatorName) {
            var _this54 = this;

            /** @type {?} */
            var validatorOption = null;

            if (typeof validator === 'string') {
              validatorOption = clone(this.formlyConfig.getValidator(validator));
            }

            if (typeof validator === 'object' && validator.name) {
              validatorOption = clone(this.formlyConfig.getValidator(validator.name));

              if (validator.options) {
                validatorOption.options = validator.options;
              }
            }

            if (typeof validator === 'object' && validator.expression) {
              var expression = validator.expression,
                  options = Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__rest"])(validator, ["expression"]);
              validatorOption = {
                name: validatorName,
                validation: expression,
                options: Object.keys(options).length > 0 ? options : null
              };
            }

            if (typeof validator === 'function') {
              validatorOption = {
                name: validatorName,
                validation: validator
              };
            }

            return (
              /**
              * @param {?} control
              * @return {?}
              */
              function (control) {
                /** @type {?} */
                var errors = validatorOption.validation(control, field, validatorOption.options);

                if (isPromise(errors)) {
                  return errors.then(
                  /**
                  * @param {?} v
                  * @return {?}
                  */
                  function (v) {
                    return _this54.handleAsyncResult(field, validatorName ? !!v : v, validatorOption);
                  });
                }

                if (Object(rxjs__WEBPACK_IMPORTED_MODULE_6__["isObservable"])(errors)) {
                  return errors.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["map"])(
                  /**
                  * @param {?} v
                  * @return {?}
                  */
                  function (v) {
                    return _this54.handleAsyncResult(field, validatorName ? !!v : v, validatorOption);
                  }));
                }

                return _this54.handleResult(field, validatorName ? !!errors : errors, validatorOption);
              }
            );
          }
          /**
           * @private
           * @param {?} field
           * @param {?} errors
           * @param {?} options
           * @return {?}
           */

        }, {
          key: "handleAsyncResult",
          value: function handleAsyncResult(field, errors, options) {
            // workaround for https://github.com/angular/angular/issues/13200
            if (field.options && field.options._markForCheck) {
              field.options._markForCheck(field);
            }

            return this.handleResult(field, errors, options);
          }
          /**
           * @private
           * @param {?} field
           * @param {?} errors
           * @param {?} __2
           * @return {?}
           */

        }, {
          key: "handleResult",
          value: function handleResult(field, errors, _ref23) {
            var name = _ref23.name,
                options = _ref23.options;

            if (typeof errors === 'boolean') {
              errors = errors ? null : _defineProperty({}, name, options ? options : true);
            }
            /** @type {?} */


            var ctrl = field.formControl;
            ctrl['_childrenErrors'] && ctrl['_childrenErrors'][name] && ctrl['_childrenErrors'][name]();

            if (isObject(errors)) {
              Object.keys(errors).forEach(
              /**
              * @param {?} name
              * @return {?}
              */
              function (name) {
                /** @type {?} */
                var errorPath = errors[name].errorPath ? errors[name].errorPath : (options || {}).errorPath;
                /** @type {?} */

                var childCtrl = errorPath ? field.formControl.get(errorPath) : null;

                if (childCtrl) {
                  var _a = errors[name],
                      opts = Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__rest"])(_a, ["errorPath"]);
                  childCtrl.setErrors(Object.assign({}, childCtrl.errors || {}, _defineProperty({}, name, opts)));
                  !ctrl['_childrenErrors'] && defineHiddenProp(ctrl, '_childrenErrors', {});

                  ctrl['_childrenErrors'][name] =
                  /**
                  * @return {?}
                  */
                  function () {
                    var _a = childCtrl.errors || {},
                        _b = name,
                        toDelete = _a[_b],
                        childErrors = Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__rest"])(_a, [typeof _b === "symbol" ? _b : _b + ""]);

                    childCtrl.setErrors(Object.keys(childErrors).length === 0 ? null : childErrors);
                  };
                }
              });
            }

            return errors;
          }
        }]);

        return FieldValidationExtension;
      }();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * \@experimental
       */


      var FieldFormExtension = /*#__PURE__*/function () {
        /**
         * @param {?} config
         */
        function FieldFormExtension(config) {
          _classCallCheck2(this, FieldFormExtension);

          this.config = config;
        }
        /**
         * @param {?} field
         * @return {?}
         */


        _createClass2(FieldFormExtension, [{
          key: "onPopulate",
          value: function onPopulate(field) {
            if (!field.parent) {
              return;
            }

            if (field.fieldGroup && !field.key) {
              defineHiddenProp(field, 'formControl', field.parent.formControl);
            } else {
              this.addFormControl(field);
            }
          }
          /**
           * @param {?} field
           * @return {?}
           */

        }, {
          key: "postPopulate",
          value: function postPopulate(field) {
            if (field.parent) {
              return;
            }
            /** @type {?} */


            var fieldsToUpdate = this.setValidators(field);

            if (fieldsToUpdate.length === 0) {
              return;
            }

            if (fieldsToUpdate.length === 1) {
              fieldsToUpdate[0].formControl.updateValueAndValidity();
            } else {
              /** @type {?} */
              field.formControl._updateTreeValidity();
            }
          }
          /**
           * @private
           * @param {?} field
           * @return {?}
           */

        }, {
          key: "addFormControl",
          value: function addFormControl(field) {
            /** @type {?} */
            var control = findControl(field);

            if (!control) {
              /** @type {?} */
              var controlOptions = {
                updateOn: field.modelOptions.updateOn
              };
              /** @type {?} */

              var value = field.key ? getFieldValue(field) : field.defaultValue;
              /** @type {?} */

              var ref = this.config ? this.config.resolveFieldTypeRef(field) : null;

              if (ref && ref.componentType && ref.componentType['createControl']) {
                /** @type {?} */
                var component = ref.componentType;
                console.warn("NgxFormly: '".concat(component.name, "::createControl' is deprecated since v5.0, use 'prePopulate' hook instead."));
                control = component['createControl'](value, field);
              } else if (field.fieldGroup) {
                // TODO: move to postPopulate
                control = new _angular_forms__WEBPACK_IMPORTED_MODULE_5__["FormGroup"]({}, controlOptions);
              } else {
                control = new _angular_forms__WEBPACK_IMPORTED_MODULE_5__["FormControl"](value, controlOptions);
              }
            }

            registerControl(field, control);
          }
          /**
           * @private
           * @param {?} field
           * @return {?}
           */

        }, {
          key: "setValidators",
          value: function setValidators(field) {
            var _this55 = this;

            /** @type {?} */
            var updateValidity$$1 = false;

            if (field.key || !field.parent || !field.key && !field.fieldGroup) {
              var c = field.formControl;
              /** @type {?} */

              var disabled = field.templateOptions ? field.templateOptions.disabled : false;

              if (disabled && c.enabled) {
                c.disable({
                  emitEvent: false,
                  onlySelf: true
                });

                if (!c.parent) {
                  updateValidity(c);
                } else {
                  updateValidity$$1 = true;
                }
              }

              if (null === c.validator || null === c.asyncValidator) {
                c.setValidators(
                /**
                * @return {?}
                */
                function () {
                  /** @type {?} */
                  var v = _angular_forms__WEBPACK_IMPORTED_MODULE_5__["Validators"].compose(_this55.mergeValidators(field, '_validators'));

                  return v ? v(c) : null;
                });
                c.setAsyncValidators(
                /**
                * @return {?}
                */
                function () {
                  /** @type {?} */
                  var v = _angular_forms__WEBPACK_IMPORTED_MODULE_5__["Validators"].composeAsync(_this55.mergeValidators(field, '_asyncValidators'));

                  return v ? v(c) : Object(rxjs__WEBPACK_IMPORTED_MODULE_6__["of"])(null);
                });

                if (!c.parent) {
                  updateValidity(c);
                } else {
                  updateValidity$$1 = true;
                }
              }
            }
            /** @type {?} */


            var fieldsToUpdate = updateValidity$$1 ? [field] : [];
            (field.fieldGroup || []).forEach(
            /**
            * @param {?} f
            * @return {?}
            */
            function (f) {
              /** @type {?} */
              var childrenToUpdate = _this55.setValidators(f);

              if (!updateValidity$$1) {
                fieldsToUpdate.push.apply(fieldsToUpdate, _toConsumableArray(childrenToUpdate));
              }
            });
            return fieldsToUpdate;
          }
          /**
           * @private
           * @template T
           * @param {?} field
           * @param {?} type
           * @return {?}
           */

        }, {
          key: "mergeValidators",
          value: function mergeValidators(field, type) {
            var _this56 = this;

            /** @type {?} */
            var validators = [];
            /** @type {?} */

            var c = field.formControl;

            if (c && c['_fields'] && c['_fields'].length > 1) {
              c['_fields'].filter(
              /**
              * @param {?} f
              * @return {?}
              */
              function (f) {
                return !f._hide;
              }).forEach(
              /**
              * @param {?} f
              * @return {?}
              */
              function (f) {
                return validators.push.apply(validators, _toConsumableArray(f[type]));
              });
            } else {
              validators.push.apply(validators, _toConsumableArray(field[type]));
            }

            if (field.fieldGroup) {
              field.fieldGroup.filter(
              /**
              * @param {?} f
              * @return {?}
              */
              function (f) {
                return !f.key && f.fieldGroup;
              }).forEach(
              /**
              * @param {?} f
              * @return {?}
              */
              function (f) {
                return validators.push.apply(validators, _toConsumableArray(_this56.mergeValidators(f, type)));
              });
            }

            return validators;
          }
        }]);

        return FieldFormExtension;
      }();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * \@experimental
       */


      var CoreExtension = /*#__PURE__*/function () {
        /**
         * @param {?} formlyConfig
         */
        function CoreExtension(formlyConfig) {
          _classCallCheck2(this, CoreExtension);

          this.formlyConfig = formlyConfig;
          this.formId = 0;
        }
        /**
         * @param {?} field
         * @return {?}
         */


        _createClass2(CoreExtension, [{
          key: "prePopulate",
          value: function prePopulate(field) {
            this.getFieldComponentInstance(field).prePopulate();

            if (field.parent) {
              return;
            }
            /** @type {?} */


            var fieldTransforms = field.options && field.options.fieldTransform || this.formlyConfig.extras.fieldTransform;
            (Array.isArray(fieldTransforms) ? fieldTransforms : [fieldTransforms]).forEach(
            /**
            * @param {?} fieldTransform
            * @return {?}
            */
            function (fieldTransform) {
              if (fieldTransform) {
                console.warn("NgxFormly: fieldTransform is deprecated since v5.0, use custom extension instead.");
                /** @type {?} */

                var fieldGroup = fieldTransform(field.fieldGroup, field.model,
                /** @type {?} */
                field.formControl, field.options);

                if (!fieldGroup) {
                  throw new Error('fieldTransform must return an array of fields');
                }
              }
            });
          }
          /**
           * @param {?} field
           * @return {?}
           */

        }, {
          key: "onPopulate",
          value: function onPopulate(field) {
            var _this57 = this;

            this.initFieldOptions(field);
            this.getFieldComponentInstance(field).onPopulate();

            if (field.fieldGroup) {
              field.fieldGroup.forEach(
              /**
              * @param {?} f
              * @param {?} index
              * @return {?}
              */
              function (f, index) {
                Object.defineProperty(f, 'parent', {
                  get:
                  /**
                  * @return {?}
                  */
                  function get() {
                    return field;
                  },
                  configurable: true
                });
                Object.defineProperty(f, 'index', {
                  get:
                  /**
                  * @return {?}
                  */
                  function get() {
                    return index;
                  },
                  configurable: true
                });
                _this57.formId++;
              });
            }
          }
          /**
           * @param {?} field
           * @return {?}
           */

        }, {
          key: "postPopulate",
          value: function postPopulate(field) {
            this.getFieldComponentInstance(field).postPopulate();
          }
          /**
           * @private
           * @param {?} field
           * @return {?}
           */

        }, {
          key: "initFieldOptions",
          value: function initFieldOptions(field) {
            /** @type {?} */
            var root =
            /** @type {?} */
            field.parent;

            if (!root) {
              return;
            }

            Object.defineProperty(field, 'form', {
              get:
              /**
              * @return {?}
              */
              function get() {
                return root.formControl;
              },
              configurable: true
            });
            Object.defineProperty(field, 'options', {
              get:
              /**
              * @return {?}
              */
              function get() {
                return root.options;
              },
              configurable: true
            });
            Object.defineProperty(field, 'model', {
              get:
              /**
              * @return {?}
              */
              function get() {
                return field.key && field.fieldGroup ? getFieldValue(field) : root.model;
              },
              configurable: true
            });
            reverseDeepMerge(field, {
              id: getFieldId("formly_".concat(this.formId), field, field['index']),
              hooks: {},
              modelOptions: {},
              templateOptions: !field.type || !field.key ? {} : {
                label: '',
                placeholder: '',
                focus: false,
                disabled: false
              }
            });

            if (this.formlyConfig.extras.resetFieldOnHide && field.resetOnHide !== false) {
              field.resetOnHide = true;
            }

            if (field.lifecycle) {
              console.warn("NgxFormly: 'lifecycle' is deprecated since v5.0, use 'hooks' instead.");
            }

            if (field.type !== 'formly-template' && (field.template || field.expressionProperties && field.expressionProperties.template)) {
              if (field.type) {
                console.warn("NgxFormly: passing 'type' property is not allowed when 'template' is set.");
              }

              field.type = 'formly-template';
            }

            if (!field.type && field.fieldGroup) {
              field.type = 'formly-group';
            }

            if (field.type) {
              this.formlyConfig.getMergedField(field);
            }

            if (field.parent) {
              /** @type {?} */
              var setDefaultValue = !isUndefined(field.key) && !isUndefined(field.defaultValue) && isUndefined(getFieldValue(field)) && (!field.resetOnHide || !(field.hide || field.hideExpression));

              if (setDefaultValue && field.resetOnHide) {
                /** @type {?} */
                var parent = field.parent;

                while (parent && !parent.hideExpression && !parent.hide) {
                  parent = parent.parent;
                }

                setDefaultValue = !parent || !(parent.hideExpression || parent.hide);
              }

              if (setDefaultValue) {
                assignFieldValue(field, field.defaultValue);
              }
            }

            this.initFieldWrappers(field);
          }
          /**
           * @private
           * @param {?} field
           * @return {?}
           */

        }, {
          key: "initFieldWrappers",
          value: function initFieldWrappers(field) {
            field.wrappers = field.wrappers || [];
            /** @type {?} */

            var fieldTemplateManipulators = Object.assign({
              preWrapper: [],
              postWrapper: []
            }, field.templateOptions.templateManipulators || {});
            field.wrappers = [].concat(_toConsumableArray(this.formlyConfig.templateManipulators.preWrapper.map(
            /**
            * @param {?} m
            * @return {?}
            */
            function (m) {
              return m(field);
            })), _toConsumableArray(fieldTemplateManipulators.preWrapper.map(
            /**
            * @param {?} m
            * @return {?}
            */
            function (m) {
              return m(field);
            })), _toConsumableArray(field.wrappers), _toConsumableArray(this.formlyConfig.templateManipulators.postWrapper.map(
            /**
            * @param {?} m
            * @return {?}
            */
            function (m) {
              return m(field);
            })), _toConsumableArray(fieldTemplateManipulators.postWrapper.map(
            /**
            * @param {?} m
            * @return {?}
            */
            function (m) {
              return m(field);
            }))).filter(
            /**
            * @param {?} el
            * @param {?} i
            * @param {?} a
            * @return {?}
            */
            function (el, i, a) {
              return el && i === a.indexOf(el);
            });
          }
          /**
           * @private
           * @param {?} field
           * @return {?}
           */

        }, {
          key: "getFieldComponentInstance",
          value: function getFieldComponentInstance(field) {
            /** @type {?} */
            var componentRef = this.formlyConfig.resolveFieldTypeRef(field);
            /** @type {?} */

            var instance = componentRef ?
            /** @type {?} */
            componentRef.instance : {};
            return {
              prePopulate:
              /**
              * @return {?}
              */
              function prePopulate() {
                return instance.prePopulate && instance.prePopulate(field);
              },
              onPopulate:
              /**
              * @return {?}
              */
              function onPopulate() {
                return instance.onPopulate && instance.onPopulate(field);
              },
              postPopulate:
              /**
              * @return {?}
              */
              function postPopulate() {
                return instance.postPopulate && instance.postPopulate(field);
              }
            };
          }
        }]);

        return CoreExtension;
      }();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} formlyConfig
       * @return {?}
       */


      function defaultFormlyConfig(formlyConfig) {
        return {
          types: [{
            name: 'formly-group',
            component: FormlyGroup
          }, {
            name: 'formly-template',
            component: FormlyTemplateType
          }],
          extensions: [{
            name: 'core',
            extension: new CoreExtension(formlyConfig)
          }, {
            name: 'field-validation',
            extension: new FieldValidationExtension(formlyConfig)
          }, {
            name: 'field-form',
            extension: new FieldFormExtension(formlyConfig)
          }, {
            name: 'field-expression',
            extension: new FieldExpressionExtension()
          }]
        };
      }

      var FormlyModule = /*#__PURE__*/function () {
        /**
         * @param {?} configService
         * @param {?=} configs
         */
        function FormlyModule(configService) {
          var configs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];

          _classCallCheck2(this, FormlyModule);

          if (!configs) {
            return;
          }

          configs.forEach(
          /**
          * @param {?} config
          * @return {?}
          */
          function (config) {
            return configService.addConfig(config);
          });
        }
        /**
         * @param {?=} config
         * @return {?}
         */


        _createClass2(FormlyModule, null, [{
          key: "forRoot",
          value: function forRoot() {
            var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            return {
              ngModule: FormlyModule,
              providers: [{
                provide: FORMLY_CONFIG,
                multi: true,
                useFactory: defaultFormlyConfig,
                deps: [FormlyConfig]
              }, {
                provide: FORMLY_CONFIG,
                useValue: config,
                multi: true
              }, {
                provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ANALYZE_FOR_ENTRY_COMPONENTS"],
                useValue: config,
                multi: true
              }, FormlyConfig, FormlyFormBuilder]
            };
          }
          /**
           * @param {?=} config
           * @return {?}
           */

        }, {
          key: "forChild",
          value: function forChild() {
            var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            return {
              ngModule: FormlyModule,
              providers: [{
                provide: FORMLY_CONFIG,
                multi: true,
                useFactory: defaultFormlyConfig,
                deps: [FormlyConfig]
              }, {
                provide: FORMLY_CONFIG,
                useValue: config,
                multi: true
              }, {
                provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ANALYZE_FOR_ENTRY_COMPONENTS"],
                useValue: config,
                multi: true
              }, FormlyFormBuilder]
            };
          }
        }]);

        return FormlyModule;
      }();

      FormlyModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({
        type: FormlyModule
      });
      FormlyModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({
        factory: function FormlyModule_Factory(t) {
          return new (t || FormlyModule)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](FormlyConfig), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](FORMLY_CONFIG, 8));
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_0__["CommonModule"]]]
      });
      /** @nocollapse */

      FormlyModule.ctorParameters = function () {
        return [{
          type: FormlyConfig
        }, {
          type: Array,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [FORMLY_CONFIG]
          }]
        }];
      };

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](FormlyModule, {
          declarations: function declarations() {
            return [FormlyForm, FormlyField, FormlyAttributes, FormlyGroup, FormlyValidationMessage, FormlyTemplateType, FieldArrayType];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_0__["CommonModule"]];
          },
          exports: function exports() {
            return [FormlyForm, FormlyField, FormlyAttributes, FormlyGroup, FormlyValidationMessage];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](FormlyModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
          args: [{
            declarations: [FormlyForm, FormlyField, FormlyAttributes, FormlyGroup, FormlyValidationMessage, FormlyTemplateType,
            /** @type {?} */
            FieldArrayType],
            entryComponents: [FormlyGroup, FormlyTemplateType],
            exports: [FormlyForm, FormlyField, FormlyAttributes, FormlyGroup, FormlyValidationMessage],
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["CommonModule"]]
          }]
        }], function () {
          return [{
            type: FormlyConfig
          }, {
            type: Array,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [FORMLY_CONFIG]
            }]
          }];
        }, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */
      //# sourceMappingURL=ngx-formly-core.js.map

      /***/

    },

    /***/
    "0JXb":
    /*!************************************************************************!*\
      !*** ./node_modules/aws-sdk/apis/cognito-identity-2014-06-30.min.json ***!
      \************************************************************************/

    /*! exports provided: version, metadata, operations, shapes, default */

    /***/
    function JXb(module) {
      module.exports = JSON.parse("{\"version\":\"2.0\",\"metadata\":{\"apiVersion\":\"2014-06-30\",\"endpointPrefix\":\"cognito-identity\",\"jsonVersion\":\"1.1\",\"protocol\":\"json\",\"serviceFullName\":\"Amazon Cognito Identity\",\"serviceId\":\"Cognito Identity\",\"signatureVersion\":\"v4\",\"targetPrefix\":\"AWSCognitoIdentityService\",\"uid\":\"cognito-identity-2014-06-30\"},\"operations\":{\"CreateIdentityPool\":{\"input\":{\"type\":\"structure\",\"required\":[\"IdentityPoolName\",\"AllowUnauthenticatedIdentities\"],\"members\":{\"IdentityPoolName\":{},\"AllowUnauthenticatedIdentities\":{\"type\":\"boolean\"},\"AllowClassicFlow\":{\"type\":\"boolean\"},\"SupportedLoginProviders\":{\"shape\":\"S5\"},\"DeveloperProviderName\":{},\"OpenIdConnectProviderARNs\":{\"shape\":\"S9\"},\"CognitoIdentityProviders\":{\"shape\":\"Sb\"},\"SamlProviderARNs\":{\"shape\":\"Sg\"},\"IdentityPoolTags\":{\"shape\":\"Sh\"}}},\"output\":{\"shape\":\"Sk\"}},\"DeleteIdentities\":{\"input\":{\"type\":\"structure\",\"required\":[\"IdentityIdsToDelete\"],\"members\":{\"IdentityIdsToDelete\":{\"type\":\"list\",\"member\":{}}}},\"output\":{\"type\":\"structure\",\"members\":{\"UnprocessedIdentityIds\":{\"type\":\"list\",\"member\":{\"type\":\"structure\",\"members\":{\"IdentityId\":{},\"ErrorCode\":{}}}}}}},\"DeleteIdentityPool\":{\"input\":{\"type\":\"structure\",\"required\":[\"IdentityPoolId\"],\"members\":{\"IdentityPoolId\":{}}}},\"DescribeIdentity\":{\"input\":{\"type\":\"structure\",\"required\":[\"IdentityId\"],\"members\":{\"IdentityId\":{}}},\"output\":{\"shape\":\"Sv\"}},\"DescribeIdentityPool\":{\"input\":{\"type\":\"structure\",\"required\":[\"IdentityPoolId\"],\"members\":{\"IdentityPoolId\":{}}},\"output\":{\"shape\":\"Sk\"}},\"GetCredentialsForIdentity\":{\"input\":{\"type\":\"structure\",\"required\":[\"IdentityId\"],\"members\":{\"IdentityId\":{},\"Logins\":{\"shape\":\"S10\"},\"CustomRoleArn\":{}}},\"output\":{\"type\":\"structure\",\"members\":{\"IdentityId\":{},\"Credentials\":{\"type\":\"structure\",\"members\":{\"AccessKeyId\":{},\"SecretKey\":{},\"SessionToken\":{},\"Expiration\":{\"type\":\"timestamp\"}}}}},\"authtype\":\"none\"},\"GetId\":{\"input\":{\"type\":\"structure\",\"required\":[\"IdentityPoolId\"],\"members\":{\"AccountId\":{},\"IdentityPoolId\":{},\"Logins\":{\"shape\":\"S10\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"IdentityId\":{}}},\"authtype\":\"none\"},\"GetIdentityPoolRoles\":{\"input\":{\"type\":\"structure\",\"required\":[\"IdentityPoolId\"],\"members\":{\"IdentityPoolId\":{}}},\"output\":{\"type\":\"structure\",\"members\":{\"IdentityPoolId\":{},\"Roles\":{\"shape\":\"S1c\"},\"RoleMappings\":{\"shape\":\"S1e\"}}}},\"GetOpenIdToken\":{\"input\":{\"type\":\"structure\",\"required\":[\"IdentityId\"],\"members\":{\"IdentityId\":{},\"Logins\":{\"shape\":\"S10\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"IdentityId\":{},\"Token\":{}}},\"authtype\":\"none\"},\"GetOpenIdTokenForDeveloperIdentity\":{\"input\":{\"type\":\"structure\",\"required\":[\"IdentityPoolId\",\"Logins\"],\"members\":{\"IdentityPoolId\":{},\"IdentityId\":{},\"Logins\":{\"shape\":\"S10\"},\"PrincipalTags\":{\"shape\":\"S1s\"},\"TokenDuration\":{\"type\":\"long\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"IdentityId\":{},\"Token\":{}}}},\"GetPrincipalTagAttributeMap\":{\"input\":{\"type\":\"structure\",\"required\":[\"IdentityPoolId\",\"IdentityProviderName\"],\"members\":{\"IdentityPoolId\":{},\"IdentityProviderName\":{}}},\"output\":{\"type\":\"structure\",\"members\":{\"IdentityPoolId\":{},\"IdentityProviderName\":{},\"UseDefaults\":{\"type\":\"boolean\"},\"PrincipalTags\":{\"shape\":\"S1s\"}}}},\"ListIdentities\":{\"input\":{\"type\":\"structure\",\"required\":[\"IdentityPoolId\",\"MaxResults\"],\"members\":{\"IdentityPoolId\":{},\"MaxResults\":{\"type\":\"integer\"},\"NextToken\":{},\"HideDisabled\":{\"type\":\"boolean\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"IdentityPoolId\":{},\"Identities\":{\"type\":\"list\",\"member\":{\"shape\":\"Sv\"}},\"NextToken\":{}}}},\"ListIdentityPools\":{\"input\":{\"type\":\"structure\",\"required\":[\"MaxResults\"],\"members\":{\"MaxResults\":{\"type\":\"integer\"},\"NextToken\":{}}},\"output\":{\"type\":\"structure\",\"members\":{\"IdentityPools\":{\"type\":\"list\",\"member\":{\"type\":\"structure\",\"members\":{\"IdentityPoolId\":{},\"IdentityPoolName\":{}}}},\"NextToken\":{}}}},\"ListTagsForResource\":{\"input\":{\"type\":\"structure\",\"required\":[\"ResourceArn\"],\"members\":{\"ResourceArn\":{}}},\"output\":{\"type\":\"structure\",\"members\":{\"Tags\":{\"shape\":\"Sh\"}}}},\"LookupDeveloperIdentity\":{\"input\":{\"type\":\"structure\",\"required\":[\"IdentityPoolId\"],\"members\":{\"IdentityPoolId\":{},\"IdentityId\":{},\"DeveloperUserIdentifier\":{},\"MaxResults\":{\"type\":\"integer\"},\"NextToken\":{}}},\"output\":{\"type\":\"structure\",\"members\":{\"IdentityId\":{},\"DeveloperUserIdentifierList\":{\"type\":\"list\",\"member\":{}},\"NextToken\":{}}}},\"MergeDeveloperIdentities\":{\"input\":{\"type\":\"structure\",\"required\":[\"SourceUserIdentifier\",\"DestinationUserIdentifier\",\"DeveloperProviderName\",\"IdentityPoolId\"],\"members\":{\"SourceUserIdentifier\":{},\"DestinationUserIdentifier\":{},\"DeveloperProviderName\":{},\"IdentityPoolId\":{}}},\"output\":{\"type\":\"structure\",\"members\":{\"IdentityId\":{}}}},\"SetIdentityPoolRoles\":{\"input\":{\"type\":\"structure\",\"required\":[\"IdentityPoolId\",\"Roles\"],\"members\":{\"IdentityPoolId\":{},\"Roles\":{\"shape\":\"S1c\"},\"RoleMappings\":{\"shape\":\"S1e\"}}}},\"SetPrincipalTagAttributeMap\":{\"input\":{\"type\":\"structure\",\"required\":[\"IdentityPoolId\",\"IdentityProviderName\"],\"members\":{\"IdentityPoolId\":{},\"IdentityProviderName\":{},\"UseDefaults\":{\"type\":\"boolean\"},\"PrincipalTags\":{\"shape\":\"S1s\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"IdentityPoolId\":{},\"IdentityProviderName\":{},\"UseDefaults\":{\"type\":\"boolean\"},\"PrincipalTags\":{\"shape\":\"S1s\"}}}},\"TagResource\":{\"input\":{\"type\":\"structure\",\"required\":[\"ResourceArn\",\"Tags\"],\"members\":{\"ResourceArn\":{},\"Tags\":{\"shape\":\"Sh\"}}},\"output\":{\"type\":\"structure\",\"members\":{}}},\"UnlinkDeveloperIdentity\":{\"input\":{\"type\":\"structure\",\"required\":[\"IdentityId\",\"IdentityPoolId\",\"DeveloperProviderName\",\"DeveloperUserIdentifier\"],\"members\":{\"IdentityId\":{},\"IdentityPoolId\":{},\"DeveloperProviderName\":{},\"DeveloperUserIdentifier\":{}}}},\"UnlinkIdentity\":{\"input\":{\"type\":\"structure\",\"required\":[\"IdentityId\",\"Logins\",\"LoginsToRemove\"],\"members\":{\"IdentityId\":{},\"Logins\":{\"shape\":\"S10\"},\"LoginsToRemove\":{\"shape\":\"Sw\"}}},\"authtype\":\"none\"},\"UntagResource\":{\"input\":{\"type\":\"structure\",\"required\":[\"ResourceArn\",\"TagKeys\"],\"members\":{\"ResourceArn\":{},\"TagKeys\":{\"type\":\"list\",\"member\":{}}}},\"output\":{\"type\":\"structure\",\"members\":{}}},\"UpdateIdentityPool\":{\"input\":{\"shape\":\"Sk\"},\"output\":{\"shape\":\"Sk\"}}},\"shapes\":{\"S5\":{\"type\":\"map\",\"key\":{},\"value\":{}},\"S9\":{\"type\":\"list\",\"member\":{}},\"Sb\":{\"type\":\"list\",\"member\":{\"type\":\"structure\",\"members\":{\"ProviderName\":{},\"ClientId\":{},\"ServerSideTokenCheck\":{\"type\":\"boolean\"}}}},\"Sg\":{\"type\":\"list\",\"member\":{}},\"Sh\":{\"type\":\"map\",\"key\":{},\"value\":{}},\"Sk\":{\"type\":\"structure\",\"required\":[\"IdentityPoolId\",\"IdentityPoolName\",\"AllowUnauthenticatedIdentities\"],\"members\":{\"IdentityPoolId\":{},\"IdentityPoolName\":{},\"AllowUnauthenticatedIdentities\":{\"type\":\"boolean\"},\"AllowClassicFlow\":{\"type\":\"boolean\"},\"SupportedLoginProviders\":{\"shape\":\"S5\"},\"DeveloperProviderName\":{},\"OpenIdConnectProviderARNs\":{\"shape\":\"S9\"},\"CognitoIdentityProviders\":{\"shape\":\"Sb\"},\"SamlProviderARNs\":{\"shape\":\"Sg\"},\"IdentityPoolTags\":{\"shape\":\"Sh\"}}},\"Sv\":{\"type\":\"structure\",\"members\":{\"IdentityId\":{},\"Logins\":{\"shape\":\"Sw\"},\"CreationDate\":{\"type\":\"timestamp\"},\"LastModifiedDate\":{\"type\":\"timestamp\"}}},\"Sw\":{\"type\":\"list\",\"member\":{}},\"S10\":{\"type\":\"map\",\"key\":{},\"value\":{}},\"S1c\":{\"type\":\"map\",\"key\":{},\"value\":{}},\"S1e\":{\"type\":\"map\",\"key\":{},\"value\":{\"type\":\"structure\",\"required\":[\"Type\"],\"members\":{\"Type\":{},\"AmbiguousRoleResolution\":{},\"RulesConfiguration\":{\"type\":\"structure\",\"required\":[\"Rules\"],\"members\":{\"Rules\":{\"type\":\"list\",\"member\":{\"type\":\"structure\",\"required\":[\"Claim\",\"MatchType\",\"Value\",\"RoleARN\"],\"members\":{\"Claim\":{},\"MatchType\":{},\"Value\":{},\"RoleARN\":{}}}}}}}}},\"S1s\":{\"type\":\"map\",\"key\":{},\"value\":{}}}}");
      /***/
    },

    /***/
    "0MNC":
    /*!*******************************************************************!*\
      !*** ./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/layout.js ***!
      \*******************************************************************/

    /*! exports provided: BreakpointObserver, Breakpoints, LayoutModule, MediaMatcher */

    /***/
    function MNC(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BreakpointObserver", function () {
        return BreakpointObserver;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Breakpoints", function () {
        return Breakpoints;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LayoutModule", function () {
        return LayoutModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MediaMatcher", function () {
        return MediaMatcher;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/cdk/platform */
      "nLfN");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var LayoutModule = function LayoutModule() {
        _classCallCheck2(this, LayoutModule);
      };

      LayoutModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: LayoutModule
      });
      LayoutModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function LayoutModule_Factory(t) {
          return new (t || LayoutModule)();
        }
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](LayoutModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{}]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Global registry for all dynamically-created, injected media queries. */


      var mediaQueriesForWebkitCompatibility = new Set();
      /** Style tag that holds all of the dynamically-created media queries. */

      var mediaQueryStyleNode;
      /** A utility for calling matchMedia queries. */

      var MediaMatcher = /*#__PURE__*/function () {
        function MediaMatcher(_platform) {
          _classCallCheck2(this, MediaMatcher);

          this._platform = _platform;
          this._matchMedia = this._platform.isBrowser && window.matchMedia ? // matchMedia is bound to the window scope intentionally as it is an illegal invocation to
          // call it from a different scope.
          window.matchMedia.bind(window) : noopMatchMedia;
        }
        /**
         * Evaluates the given media query and returns the native MediaQueryList from which results
         * can be retrieved.
         * Confirms the layout engine will trigger for the selector query provided and returns the
         * MediaQueryList for the query provided.
         */


        _createClass2(MediaMatcher, [{
          key: "matchMedia",
          value: function matchMedia(query) {
            if (this._platform.WEBKIT) {
              createEmptyStyleRule(query);
            }

            return this._matchMedia(query);
          }
        }]);

        return MediaMatcher;
      }();

      MediaMatcher.ɵfac = function MediaMatcher_Factory(t) {
        return new (t || MediaMatcher)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["Platform"]));
      };

      MediaMatcher.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({
        factory: function MediaMatcher_Factory() {
          return new MediaMatcher(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["Platform"]));
        },
        token: MediaMatcher,
        providedIn: "root"
      });

      MediaMatcher.ctorParameters = function () {
        return [{
          type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["Platform"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MediaMatcher, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["Platform"]
          }];
        }, null);
      })();
      /**
       * For Webkit engines that only trigger the MediaQueryListListener when
       * there is at least one CSS selector for the respective media query.
       */


      function createEmptyStyleRule(query) {
        if (mediaQueriesForWebkitCompatibility.has(query)) {
          return;
        }

        try {
          if (!mediaQueryStyleNode) {
            mediaQueryStyleNode = document.createElement('style');
            mediaQueryStyleNode.setAttribute('type', 'text/css');
            document.head.appendChild(mediaQueryStyleNode);
          }

          if (mediaQueryStyleNode.sheet) {
            mediaQueryStyleNode.sheet.insertRule("@media ".concat(query, " {.fx-query-test{ }}"), 0);
            mediaQueriesForWebkitCompatibility.add(query);
          }
        } catch (e) {
          console.error(e);
        }
      }
      /** No-op matchMedia replacement for non-browser platforms. */


      function noopMatchMedia(query) {
        // Use `as any` here to avoid adding additional necessary properties for
        // the noop matcher.
        return {
          matches: query === 'all' || query === '',
          media: query,
          addListener: function addListener() {},
          removeListener: function removeListener() {}
        };
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Utility for checking the matching state of @media queries. */


      var BreakpointObserver = /*#__PURE__*/function () {
        function BreakpointObserver(_mediaMatcher, _zone) {
          _classCallCheck2(this, BreakpointObserver);

          this._mediaMatcher = _mediaMatcher;
          this._zone = _zone;
          /**  A map of all media queries currently being listened for. */

          this._queries = new Map();
          /** A subject for all other observables to takeUntil based on. */

          this._destroySubject = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
        }
        /** Completes the active subject, signalling to all other observables to complete. */


        _createClass2(BreakpointObserver, [{
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._destroySubject.next();

            this._destroySubject.complete();
          }
          /**
           * Whether one or more media queries match the current viewport size.
           * @param value One or more media queries to check.
           * @returns Whether any of the media queries match.
           */

        }, {
          key: "isMatched",
          value: function isMatched(value) {
            var _this58 = this;

            var queries = splitQueries(Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_1__["coerceArray"])(value));
            return queries.some(function (mediaQuery) {
              return _this58._registerQuery(mediaQuery).mql.matches;
            });
          }
          /**
           * Gets an observable of results for the given queries that will emit new results for any changes
           * in matching of the given queries.
           * @param value One or more media queries to check.
           * @returns A stream of matches for the given queries.
           */

        }, {
          key: "observe",
          value: function observe(value) {
            var _this59 = this;

            var queries = splitQueries(Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_1__["coerceArray"])(value));
            var observables = queries.map(function (query) {
              return _this59._registerQuery(query).observable;
            });
            var stateObservable = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["combineLatest"])(observables); // Emit the first state immediately, and then debounce the subsequent emissions.

            stateObservable = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["concat"])(stateObservable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1)), stateObservable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["skip"])(1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["debounceTime"])(0)));
            return stateObservable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (breakpointStates) {
              var response = {
                matches: false,
                breakpoints: {}
              };
              breakpointStates.forEach(function (_ref25) {
                var matches = _ref25.matches,
                    query = _ref25.query;
                response.matches = response.matches || matches;
                response.breakpoints[query] = matches;
              });
              return response;
            }));
          }
          /** Registers a specific query to be listened for. */

        }, {
          key: "_registerQuery",
          value: function _registerQuery(query) {
            var _this60 = this;

            // Only set up a new MediaQueryList if it is not already being listened for.
            if (this._queries.has(query)) {
              return this._queries.get(query);
            }

            var mql = this._mediaMatcher.matchMedia(query); // Create callback for match changes and add it is as a listener.


            var queryObservable = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Observable"](function (observer) {
              // Listener callback methods are wrapped to be placed back in ngZone. Callbacks must be placed
              // back into the zone because matchMedia is only included in Zone.js by loading the
              // webapis-media-query.js file alongside the zone.js file.  Additionally, some browsers do not
              // have MediaQueryList inherit from EventTarget, which causes inconsistencies in how Zone.js
              // patches it.
              var handler = function handler(e) {
                return _this60._zone.run(function () {
                  return observer.next(e);
                });
              };

              mql.addListener(handler);
              return function () {
                mql.removeListener(handler);
              };
            }).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["startWith"])(mql), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_ref26) {
              var matches = _ref26.matches;
              return {
                query: query,
                matches: matches
              };
            }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this._destroySubject)); // Add the MediaQueryList to the set of queries.

            var output = {
              observable: queryObservable,
              mql: mql
            };

            this._queries.set(query, output);

            return output;
          }
        }]);

        return BreakpointObserver;
      }();

      BreakpointObserver.ɵfac = function BreakpointObserver_Factory(t) {
        return new (t || BreakpointObserver)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](MediaMatcher), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]));
      };

      BreakpointObserver.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({
        factory: function BreakpointObserver_Factory() {
          return new BreakpointObserver(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(MediaMatcher), Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]));
        },
        token: BreakpointObserver,
        providedIn: "root"
      });

      BreakpointObserver.ctorParameters = function () {
        return [{
          type: MediaMatcher
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BreakpointObserver, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: MediaMatcher
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }];
        }, null);
      })();
      /**
       * Split each query string into separate query strings if two queries are provided as comma
       * separated.
       */


      function splitQueries(queries) {
        return queries.map(function (query) {
          return query.split(',');
        }).reduce(function (a1, a2) {
          return a1.concat(a2);
        }).map(function (query) {
          return query.trim();
        });
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // PascalCase is being used as Breakpoints is used like an enum.
      // tslint:disable-next-line:variable-name


      var Breakpoints = {
        XSmall: '(max-width: 599.98px)',
        Small: '(min-width: 600px) and (max-width: 959.98px)',
        Medium: '(min-width: 960px) and (max-width: 1279.98px)',
        Large: '(min-width: 1280px) and (max-width: 1919.98px)',
        XLarge: '(min-width: 1920px)',
        Handset: '(max-width: 599.98px) and (orientation: portrait), ' + '(max-width: 959.98px) and (orientation: landscape)',
        Tablet: '(min-width: 600px) and (max-width: 839.98px) and (orientation: portrait), ' + '(min-width: 960px) and (max-width: 1279.98px) and (orientation: landscape)',
        Web: '(min-width: 840px) and (orientation: portrait), ' + '(min-width: 1280px) and (orientation: landscape)',
        HandsetPortrait: '(max-width: 599.98px) and (orientation: portrait)',
        TabletPortrait: '(min-width: 600px) and (max-width: 839.98px) and (orientation: portrait)',
        WebPortrait: '(min-width: 840px) and (orientation: portrait)',
        HandsetLandscape: '(max-width: 959.98px) and (orientation: landscape)',
        TabletLandscape: '(min-width: 960px) and (max-width: 1279.98px) and (orientation: landscape)',
        WebLandscape: '(min-width: 1280px) and (orientation: landscape)'
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=layout.js.map

      /***/
    },

    /***/
    "0Pi8":
    /*!******************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/endWith.js ***!
      \******************************************************************/

    /*! exports provided: endWith */

    /***/
    function Pi8(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "endWith", function () {
        return endWith;
      });
      /* harmony import */


      var _observable_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../observable/concat */
      "GyhO");
      /* harmony import */


      var _observable_of__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../observable/of */
      "LRne");

      function endWith() {
        for (var _len6 = arguments.length, array = new Array(_len6), _key7 = 0; _key7 < _len6; _key7++) {
          array[_key7] = arguments[_key7];
        }

        return function (source) {
          return Object(_observable_concat__WEBPACK_IMPORTED_MODULE_0__["concat"])(source, Object(_observable_of__WEBPACK_IMPORTED_MODULE_1__["of"]).apply(void 0, array));
        };
      } //# sourceMappingURL=endWith.js.map

      /***/

    },

    /***/
    "0mo+":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/bo.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function mo(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Tibetan [bo]
      //! author : Thupten N. Chakrishar : https://github.com/vajradog
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var symbolMap = {
          1: '༡',
          2: '༢',
          3: '༣',
          4: '༤',
          5: '༥',
          6: '༦',
          7: '༧',
          8: '༨',
          9: '༩',
          0: '༠'
        },
            numberMap = {
          '༡': '1',
          '༢': '2',
          '༣': '3',
          '༤': '4',
          '༥': '5',
          '༦': '6',
          '༧': '7',
          '༨': '8',
          '༩': '9',
          '༠': '0'
        };
        var bo = moment.defineLocale('bo', {
          months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
          monthsShort: 'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split('_'),
          monthsShortRegex: /^(ཟླ་\d{1,2})/,
          monthsParseExact: true,
          weekdays: 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),
          weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
          weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'),
          longDateFormat: {
            LT: 'A h:mm',
            LTS: 'A h:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm',
            LLLL: 'dddd, D MMMM YYYY, A h:mm'
          },
          calendar: {
            sameDay: '[དི་རིང] LT',
            nextDay: '[སང་ཉིན] LT',
            nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT',
            lastDay: '[ཁ་སང] LT',
            lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s ལ་',
            past: '%s སྔན་ལ',
            s: 'ལམ་སང',
            ss: '%d སྐར་ཆ།',
            m: 'སྐར་མ་གཅིག',
            mm: '%d སྐར་མ',
            h: 'ཆུ་ཚོད་གཅིག',
            hh: '%d ཆུ་ཚོད',
            d: 'ཉིན་གཅིག',
            dd: '%d ཉིན་',
            M: 'ཟླ་བ་གཅིག',
            MM: '%d ཟླ་བ',
            y: 'ལོ་གཅིག',
            yy: '%d ལོ'
          },
          preparse: function preparse(string) {
            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {
              return numberMap[match];
            });
          },
          postformat: function postformat(string) {
            return string.replace(/\d/g, function (match) {
              return symbolMap[match];
            });
          },
          meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === 'མཚན་མོ' && hour >= 4 || meridiem === 'ཉིན་གུང' && hour < 5 || meridiem === 'དགོང་དག') {
              return hour + 12;
            } else {
              return hour;
            }
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 4) {
              return 'མཚན་མོ';
            } else if (hour < 10) {
              return 'ཞོགས་ཀས';
            } else if (hour < 17) {
              return 'ཉིན་གུང';
            } else if (hour < 20) {
              return 'དགོང་དག';
            } else {
              return 'མཚན་མོ';
            }
          },
          week: {
            dow: 0,
            // Sunday is the first day of the week.
            doy: 6 // The week that contains Jan 6th is the first week of the year.

          }
        });
        return bo;
      });
      /***/

    },

    /***/
    "0tRk":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/pt-br.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function tRk(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Portuguese (Brazil) [pt-br]
      //! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var ptBr = moment.defineLocale('pt-br', {
          months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'),
          monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
          weekdays: 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split('_'),
          weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),
          weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',
            LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'
          },
          calendar: {
            sameDay: '[Hoje às] LT',
            nextDay: '[Amanhã às] LT',
            nextWeek: 'dddd [às] LT',
            lastDay: '[Ontem às] LT',
            lastWeek: function lastWeek() {
              return this.day() === 0 || this.day() === 6 ? '[Último] dddd [às] LT' // Saturday + Sunday
              : '[Última] dddd [às] LT'; // Monday - Friday
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: 'em %s',
            past: 'há %s',
            s: 'poucos segundos',
            ss: '%d segundos',
            m: 'um minuto',
            mm: '%d minutos',
            h: 'uma hora',
            hh: '%d horas',
            d: 'um dia',
            dd: '%d dias',
            M: 'um mês',
            MM: '%d meses',
            y: 'um ano',
            yy: '%d anos'
          },
          dayOfMonthOrdinalParse: /\d{1,2}º/,
          ordinal: '%dº',
          invalidDate: 'Data inválida'
        });
        return ptBr;
      });
      /***/

    },

    /***/
    "128B":
    /*!*****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/reduce.js ***!
      \*****************************************************************/

    /*! exports provided: reduce */

    /***/
    function B(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "reduce", function () {
        return reduce;
      });
      /* harmony import */


      var _scan__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./scan */
      "Kqap");
      /* harmony import */


      var _takeLast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./takeLast */
      "BFxc");
      /* harmony import */


      var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./defaultIfEmpty */
      "xbPD");
      /* harmony import */


      var _util_pipe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ../util/pipe */
      "mCNh");

      function reduce(accumulator, seed) {
        if (arguments.length >= 2) {
          return function reduceOperatorFunctionWithSeed(source) {
            return Object(_util_pipe__WEBPACK_IMPORTED_MODULE_3__["pipe"])(Object(_scan__WEBPACK_IMPORTED_MODULE_0__["scan"])(accumulator, seed), Object(_takeLast__WEBPACK_IMPORTED_MODULE_1__["takeLast"])(1), Object(_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_2__["defaultIfEmpty"])(seed))(source);
          };
        }

        return function reduceOperatorFunction(source) {
          return Object(_util_pipe__WEBPACK_IMPORTED_MODULE_3__["pipe"])(Object(_scan__WEBPACK_IMPORTED_MODULE_0__["scan"])(function (acc, value, index) {
            return accumulator(acc, value, index + 1);
          }), Object(_takeLast__WEBPACK_IMPORTED_MODULE_1__["takeLast"])(1))(source);
        };
      } //# sourceMappingURL=reduce.js.map

      /***/

    },

    /***/
    "13nz":
    /*!********************************************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/adapter/native-date-time-adapter.class.js ***!
      \********************************************************************************************************/

    /*! exports provided: NativeDateTimeAdapter, ɵ0 */

    /***/
    function nz(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NativeDateTimeAdapter", function () {
        return NativeDateTimeAdapter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵ0", function () {
        return ɵ0;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/cdk/platform */
      "nLfN");
      /* harmony import */


      var _date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./date-time-adapter.class */
      "1rjb");

      var __extends = undefined && undefined.__extends || function () {
        var _extendStatics = function extendStatics(d, b) {
          _extendStatics = Object.setPrototypeOf || {
            __proto__: []
          } instanceof Array && function (d, b) {
            d.__proto__ = b;
          } || function (d, b) {
            for (var p in b) {
              if (b.hasOwnProperty(p)) d[p] = b[p];
            }
          };

          return _extendStatics(d, b);
        };

        return function (d, b) {
          _extendStatics(d, b);

          function __() {
            this.constructor = d;
          }

          d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
        };
      }();

      var __assign = undefined && undefined.__assign || function () {
        __assign = Object.assign || function (t) {
          for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];

            for (var p in s) {
              if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
            }
          }

          return t;
        };

        return __assign.apply(this, arguments);
      };

      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var __metadata = undefined && undefined.__metadata || function (k, v) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
      };

      var __param = undefined && undefined.__param || function (paramIndex, decorator) {
        return function (target, key) {
          decorator(target, key, paramIndex);
        };
      };

      var DEFAULT_MONTH_NAMES = {
        'long': ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
        'short': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
        'narrow': ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D']
      };
      var DEFAULT_DAY_OF_WEEK_NAMES = {
        'long': ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
        'short': ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
        'narrow': ['S', 'M', 'T', 'W', 'T', 'F', 'S']
      };

      var ɵ0 = function ɵ0(i) {
        return String(i + 1);
      };

      var DEFAULT_DATE_NAMES = range(31, ɵ0);
      var SUPPORTS_INTL_API = typeof Intl !== 'undefined';
      var ISO_8601_REGEX = /^\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|(?:(?:\+|-)\d{2}:\d{2}))?)?$/;

      function range(length, valueFunction) {
        var valuesArray = Array(length);

        for (var i = 0; i < length; i++) {
          valuesArray[i] = valueFunction(i);
        }

        return valuesArray;
      }

      var NativeDateTimeAdapter = function (_super) {
        __extends(NativeDateTimeAdapter, _super);

        function NativeDateTimeAdapter(owlDateTimeLocale, platform) {
          var _this = _super.call(this) || this;

          _this.owlDateTimeLocale = owlDateTimeLocale;

          _super.prototype.setLocale.call(_this, owlDateTimeLocale);

          _this.useUtcForDisplay = !platform.TRIDENT;
          _this._clampDate = platform.TRIDENT || platform.EDGE;
          return _this;
        }

        NativeDateTimeAdapter.prototype.getYear = function (date) {
          return date.getFullYear();
        };

        NativeDateTimeAdapter.prototype.getMonth = function (date) {
          return date.getMonth();
        };

        NativeDateTimeAdapter.prototype.getDay = function (date) {
          return date.getDay();
        };

        NativeDateTimeAdapter.prototype.getDate = function (date) {
          return date.getDate();
        };

        NativeDateTimeAdapter.prototype.getHours = function (date) {
          return date.getHours();
        };

        NativeDateTimeAdapter.prototype.getMinutes = function (date) {
          return date.getMinutes();
        };

        NativeDateTimeAdapter.prototype.getSeconds = function (date) {
          return date.getSeconds();
        };

        NativeDateTimeAdapter.prototype.getTime = function (date) {
          return date.getTime();
        };

        NativeDateTimeAdapter.prototype.getNumDaysInMonth = function (date) {
          var lastDateOfMonth = this.createDateWithOverflow(this.getYear(date), this.getMonth(date) + 1, 0);
          return this.getDate(lastDateOfMonth);
        };

        NativeDateTimeAdapter.prototype.differenceInCalendarDays = function (dateLeft, dateRight) {
          if (this.isValid(dateLeft) && this.isValid(dateRight)) {
            var dateLeftStartOfDay = this.createDate(this.getYear(dateLeft), this.getMonth(dateLeft), this.getDate(dateLeft));
            var dateRightStartOfDay = this.createDate(this.getYear(dateRight), this.getMonth(dateRight), this.getDate(dateRight));
            var timeStampLeft = this.getTime(dateLeftStartOfDay) - dateLeftStartOfDay.getTimezoneOffset() * this.milliseondsInMinute;
            var timeStampRight = this.getTime(dateRightStartOfDay) - dateRightStartOfDay.getTimezoneOffset() * this.milliseondsInMinute;
            return Math.round((timeStampLeft - timeStampRight) / this.millisecondsInDay);
          } else {
            return null;
          }
        };

        NativeDateTimeAdapter.prototype.getYearName = function (date) {
          if (SUPPORTS_INTL_API) {
            var dtf = new Intl.DateTimeFormat(this.locale, {
              year: 'numeric',
              timeZone: 'utc'
            });
            return this.stripDirectionalityCharacters(this._format(dtf, date));
          }

          return String(this.getYear(date));
        };

        NativeDateTimeAdapter.prototype.getMonthNames = function (style) {
          var _this = this;

          if (SUPPORTS_INTL_API) {
            var dtf_1 = new Intl.DateTimeFormat(this.locale, {
              month: style,
              timeZone: 'utc'
            });
            return range(12, function (i) {
              return _this.stripDirectionalityCharacters(_this._format(dtf_1, new Date(2017, i, 1)));
            });
          }

          return DEFAULT_MONTH_NAMES[style];
        };

        NativeDateTimeAdapter.prototype.getDayOfWeekNames = function (style) {
          var _this = this;

          if (SUPPORTS_INTL_API) {
            var dtf_2 = new Intl.DateTimeFormat(this.locale, {
              weekday: style,
              timeZone: 'utc'
            });
            return range(7, function (i) {
              return _this.stripDirectionalityCharacters(_this._format(dtf_2, new Date(2017, 0, i + 1)));
            });
          }

          return DEFAULT_DAY_OF_WEEK_NAMES[style];
        };

        NativeDateTimeAdapter.prototype.getDateNames = function () {
          var _this = this;

          if (SUPPORTS_INTL_API) {
            var dtf_3 = new Intl.DateTimeFormat(this.locale, {
              day: 'numeric',
              timeZone: 'utc'
            });
            return range(31, function (i) {
              return _this.stripDirectionalityCharacters(_this._format(dtf_3, new Date(2017, 0, i + 1)));
            });
          }

          return DEFAULT_DATE_NAMES;
        };

        NativeDateTimeAdapter.prototype.toIso8601 = function (date) {
          return date.toISOString();
        };

        NativeDateTimeAdapter.prototype.isEqual = function (dateLeft, dateRight) {
          if (this.isValid(dateLeft) && this.isValid(dateRight)) {
            return dateLeft.getTime() === dateRight.getTime();
          } else {
            return false;
          }
        };

        NativeDateTimeAdapter.prototype.isSameDay = function (dateLeft, dateRight) {
          if (this.isValid(dateLeft) && this.isValid(dateRight)) {
            var dateLeftStartOfDay = this.clone(dateLeft);
            var dateRightStartOfDay = this.clone(dateRight);
            dateLeftStartOfDay.setHours(0, 0, 0, 0);
            dateRightStartOfDay.setHours(0, 0, 0, 0);
            return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime();
          } else {
            return false;
          }
        };

        NativeDateTimeAdapter.prototype.isValid = function (date) {
          return date && !isNaN(date.getTime());
        };

        NativeDateTimeAdapter.prototype.invalid = function () {
          return new Date(NaN);
        };

        NativeDateTimeAdapter.prototype.isDateInstance = function (obj) {
          return obj instanceof Date;
        };

        NativeDateTimeAdapter.prototype.addCalendarYears = function (date, amount) {
          return this.addCalendarMonths(date, amount * 12);
        };

        NativeDateTimeAdapter.prototype.addCalendarMonths = function (date, amount) {
          var result = this.clone(date);
          amount = Number(amount);
          var desiredMonth = result.getMonth() + amount;
          var dateWithDesiredMonth = new Date(0);
          dateWithDesiredMonth.setFullYear(result.getFullYear(), desiredMonth, 1);
          dateWithDesiredMonth.setHours(0, 0, 0, 0);
          var daysInMonth = this.getNumDaysInMonth(dateWithDesiredMonth);
          result.setMonth(desiredMonth, Math.min(daysInMonth, result.getDate()));
          return result;
        };

        NativeDateTimeAdapter.prototype.addCalendarDays = function (date, amount) {
          var result = this.clone(date);
          amount = Number(amount);
          result.setDate(result.getDate() + amount);
          return result;
        };

        NativeDateTimeAdapter.prototype.setHours = function (date, amount) {
          var result = this.clone(date);
          result.setHours(amount);
          return result;
        };

        NativeDateTimeAdapter.prototype.setMinutes = function (date, amount) {
          var result = this.clone(date);
          result.setMinutes(amount);
          return result;
        };

        NativeDateTimeAdapter.prototype.setSeconds = function (date, amount) {
          var result = this.clone(date);
          result.setSeconds(amount);
          return result;
        };

        NativeDateTimeAdapter.prototype.createDate = function (year, month, date, hours, minutes, seconds) {
          if (hours === void 0) {
            hours = 0;
          }

          if (minutes === void 0) {
            minutes = 0;
          }

          if (seconds === void 0) {
            seconds = 0;
          }

          if (month < 0 || month > 11) {
            throw Error("Invalid month index \"" + month + "\". Month index has to be between 0 and 11.");
          }

          if (date < 1) {
            throw Error("Invalid date \"" + date + "\". Date has to be greater than 0.");
          }

          if (hours < 0 || hours > 23) {
            throw Error("Invalid hours \"" + hours + "\". Hours has to be between 0 and 23.");
          }

          if (minutes < 0 || minutes > 59) {
            throw Error("Invalid minutes \"" + minutes + "\". Minutes has to between 0 and 59.");
          }

          if (seconds < 0 || seconds > 59) {
            throw Error("Invalid seconds \"" + seconds + "\". Seconds has to be between 0 and 59.");
          }

          var result = this.createDateWithOverflow(year, month, date, hours, minutes, seconds);

          if (result.getMonth() !== month) {
            throw Error("Invalid date \"" + date + "\" for month with index \"" + month + "\".");
          }

          return result;
        };

        NativeDateTimeAdapter.prototype.clone = function (date) {
          return this.createDate(this.getYear(date), this.getMonth(date), this.getDate(date), this.getHours(date), this.getMinutes(date), this.getSeconds(date));
        };

        NativeDateTimeAdapter.prototype.now = function () {
          return new Date();
        };

        NativeDateTimeAdapter.prototype.format = function (date, displayFormat) {
          if (!this.isValid(date)) {
            throw Error('JSNativeDate: Cannot format invalid date.');
          }

          if (SUPPORTS_INTL_API) {
            if (this._clampDate && (date.getFullYear() < 1 || date.getFullYear() > 9999)) {
              date = this.clone(date);
              date.setFullYear(Math.max(1, Math.min(9999, date.getFullYear())));
            }

            displayFormat = __assign({}, displayFormat, {
              timeZone: 'utc'
            });
            var dtf = new Intl.DateTimeFormat(this.locale, displayFormat);
            return this.stripDirectionalityCharacters(this._format(dtf, date));
          }

          return this.stripDirectionalityCharacters(date.toDateString());
        };

        NativeDateTimeAdapter.prototype.parse = function (value, parseFormat) {
          if (typeof value === 'number') {
            return new Date(value);
          }

          return value ? new Date(Date.parse(value)) : null;
        };

        NativeDateTimeAdapter.prototype.deserialize = function (value) {
          if (typeof value === 'string') {
            if (!value) {
              return null;
            }

            if (ISO_8601_REGEX.test(value)) {
              var date = new Date(value);

              if (this.isValid(date)) {
                return date;
              }
            }
          }

          return _super.prototype.deserialize.call(this, value);
        };

        NativeDateTimeAdapter.prototype.createDateWithOverflow = function (year, month, date, hours, minutes, seconds) {
          if (hours === void 0) {
            hours = 0;
          }

          if (minutes === void 0) {
            minutes = 0;
          }

          if (seconds === void 0) {
            seconds = 0;
          }

          var result = new Date(year, month, date, hours, minutes, seconds);

          if (year >= 0 && year < 100) {
            result.setFullYear(this.getYear(result) - 1900);
          }

          return result;
        };

        NativeDateTimeAdapter.prototype.stripDirectionalityCharacters = function (str) {
          return str.replace(/[\u200e\u200f]/g, '');
        };

        NativeDateTimeAdapter.prototype._format = function (dtf, date) {
          var d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));
          return dtf.format(d);
        };

        NativeDateTimeAdapter = __decorate([__param(0, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __param(0, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"])(_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__["OWL_DATE_TIME_LOCALE"])), __metadata("design:paramtypes", [String, _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__["Platform"]])], NativeDateTimeAdapter);

        NativeDateTimeAdapter.ɵfac = function NativeDateTimeAdapter_Factory(t) {
          return new (t || NativeDateTimeAdapter)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__["OWL_DATE_TIME_LOCALE"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__["Platform"]));
        };

        NativeDateTimeAdapter.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
          token: NativeDateTimeAdapter,
          factory: function factory(t) {
            return NativeDateTimeAdapter.ɵfac(t);
          }
        });

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NativeDateTimeAdapter, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
          }], function () {
            return [{
              type: String,
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
              }, {
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
                args: [_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__["OWL_DATE_TIME_LOCALE"]]
              }]
            }, {
              type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__["Platform"]
            }];
          }, null);
        })();

        return NativeDateTimeAdapter;
      }(_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__["DateTimeAdapter"]); //# sourceMappingURL=data:application/json;charset=utf-8;base64, 

      /***/

    },

    /***/
    "1FPZ":
    /*!************************************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/adapter/date-time-format.class.js ***!
      \************************************************************************************************/

    /*! exports provided: OWL_DATE_TIME_FORMATS */

    /***/
    function FPZ(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OWL_DATE_TIME_FORMATS", function () {
        return OWL_DATE_TIME_FORMATS;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");

      var OWL_DATE_TIME_FORMATS = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('OWL_DATE_TIME_FORMATS');
      /***/
    },

    /***/
    "1G5W":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/takeUntil.js ***!
      \********************************************************************/

    /*! exports provided: takeUntil */

    /***/
    function G5W(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "takeUntil", function () {
        return takeUntil;
      });
      /* harmony import */


      var _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../innerSubscribe */
      "zx2A");

      function takeUntil(notifier) {
        return function (source) {
          return source.lift(new TakeUntilOperator(notifier));
        };
      }

      var TakeUntilOperator = /*#__PURE__*/function () {
        function TakeUntilOperator(notifier) {
          _classCallCheck2(this, TakeUntilOperator);

          this.notifier = notifier;
        }

        _createClass2(TakeUntilOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            var takeUntilSubscriber = new TakeUntilSubscriber(subscriber);
            var notifierSubscription = Object(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["innerSubscribe"])(this.notifier, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleInnerSubscriber"](takeUntilSubscriber));

            if (notifierSubscription && !takeUntilSubscriber.seenValue) {
              takeUntilSubscriber.add(notifierSubscription);
              return source.subscribe(takeUntilSubscriber);
            }

            return takeUntilSubscriber;
          }
        }]);

        return TakeUntilOperator;
      }();

      var TakeUntilSubscriber = /*#__PURE__*/function (_innerSubscribe__WEBP2) {
        _inherits2(TakeUntilSubscriber, _innerSubscribe__WEBP2);

        var _super39 = _createSuper(TakeUntilSubscriber);

        function TakeUntilSubscriber(destination) {
          var _this61;

          _classCallCheck2(this, TakeUntilSubscriber);

          _this61 = _super39.call(this, destination);
          _this61.seenValue = false;
          return _this61;
        }

        _createClass2(TakeUntilSubscriber, [{
          key: "notifyNext",
          value: function notifyNext() {
            this.seenValue = true;
            this.complete();
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete() {}
        }]);

        return TakeUntilSubscriber;
      }(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleOuterSubscriber"]); //# sourceMappingURL=takeUntil.js.map

      /***/

    },

    /***/
    "1Ykd":
    /*!*********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/sampleTime.js ***!
      \*********************************************************************/

    /*! exports provided: sampleTime */

    /***/
    function Ykd(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "sampleTime", function () {
        return sampleTime;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");
      /* harmony import */


      var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../scheduler/async */
      "D0XW");

      function sampleTime(period) {
        var scheduler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
        return function (source) {
          return source.lift(new SampleTimeOperator(period, scheduler));
        };
      }

      var SampleTimeOperator = /*#__PURE__*/function () {
        function SampleTimeOperator(period, scheduler) {
          _classCallCheck2(this, SampleTimeOperator);

          this.period = period;
          this.scheduler = scheduler;
        }

        _createClass2(SampleTimeOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new SampleTimeSubscriber(subscriber, this.period, this.scheduler));
          }
        }]);

        return SampleTimeOperator;
      }();

      var SampleTimeSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_3) {
        _inherits2(SampleTimeSubscriber, _Subscriber__WEBPACK_3);

        var _super40 = _createSuper(SampleTimeSubscriber);

        function SampleTimeSubscriber(destination, period, scheduler) {
          var _this62;

          _classCallCheck2(this, SampleTimeSubscriber);

          _this62 = _super40.call(this, destination);
          _this62.period = period;
          _this62.scheduler = scheduler;
          _this62.hasValue = false;

          _this62.add(scheduler.schedule(dispatchNotification, period, {
            subscriber: _assertThisInitialized2(_this62),
            period: period
          }));

          return _this62;
        }

        _createClass2(SampleTimeSubscriber, [{
          key: "_next",
          value: function _next(value) {
            this.lastValue = value;
            this.hasValue = true;
          }
        }, {
          key: "notifyNext",
          value: function notifyNext() {
            if (this.hasValue) {
              this.hasValue = false;
              this.destination.next(this.lastValue);
            }
          }
        }]);

        return SampleTimeSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]);

      function dispatchNotification(state) {
        var subscriber = state.subscriber,
            period = state.period;
        subscriber.notifyNext();
        this.schedule(state, period);
      } //# sourceMappingURL=sampleTime.js.map

      /***/

    },

    /***/
    "1gqn":
    /*!******************************************************!*\
      !*** ./node_modules/util/support/isBufferBrowser.js ***!
      \******************************************************/

    /*! no static exports found */

    /***/
    function gqn(module, exports) {
      module.exports = function isBuffer(arg) {
        return arg && typeof arg === 'object' && typeof arg.copy === 'function' && typeof arg.fill === 'function' && typeof arg.readUInt8 === 'function';
      };
      /***/

    },

    /***/
    "1kSV":
    /*!***************************************************************************************!*\
      !*** ./node_modules/@ng-bootstrap/ng-bootstrap/__ivy_ngcc__/fesm2015/ng-bootstrap.js ***!
      \***************************************************************************************/

    /*! exports provided: ModalDismissReasons, NgbAccordion, NgbAccordionConfig, NgbAccordionModule, NgbActiveModal, NgbAlert, NgbAlertConfig, NgbAlertModule, NgbButtonLabel, NgbButtonsModule, NgbCalendar, NgbCalendarBuddhist, NgbCalendarGregorian, NgbCalendarHebrew, NgbCalendarIslamicCivil, NgbCalendarIslamicUmalqura, NgbCalendarPersian, NgbCarousel, NgbCarouselConfig, NgbCarouselModule, NgbCheckBox, NgbCollapse, NgbCollapseConfig, NgbCollapseModule, NgbConfig, NgbDate, NgbDateAdapter, NgbDateNativeAdapter, NgbDateNativeUTCAdapter, NgbDateParserFormatter, NgbDatepicker, NgbDatepickerConfig, NgbDatepickerContent, NgbDatepickerI18n, NgbDatepickerI18nDefault, NgbDatepickerI18nHebrew, NgbDatepickerKeyboardService, NgbDatepickerModule, NgbDatepickerMonth, NgbDropdown, NgbDropdownAnchor, NgbDropdownConfig, NgbDropdownItem, NgbDropdownMenu, NgbDropdownModule, NgbDropdownToggle, NgbHighlight, NgbInputDatepicker, NgbInputDatepickerConfig, NgbModal, NgbModalConfig, NgbModalModule, NgbModalRef, NgbModule, NgbNav, NgbNavConfig, NgbNavContent, NgbNavItem, NgbNavLink, NgbNavModule, NgbNavOutlet, NgbNavPane, NgbNavbar, NgbPagination, NgbPaginationConfig, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationModule, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPages, NgbPaginationPrevious, NgbPanel, NgbPanelContent, NgbPanelHeader, NgbPanelTitle, NgbPanelToggle, NgbPopover, NgbPopoverConfig, NgbPopoverModule, NgbProgressbar, NgbProgressbarConfig, NgbProgressbarModule, NgbRadio, NgbRadioGroup, NgbRating, NgbRatingConfig, NgbRatingModule, NgbSlide, NgbSlideEventDirection, NgbSlideEventSource, NgbTimeAdapter, NgbTimepicker, NgbTimepickerConfig, NgbTimepickerI18n, NgbTimepickerModule, NgbToast, NgbToastConfig, NgbToastHeader, NgbToastModule, NgbTooltip, NgbTooltipConfig, NgbTooltipModule, NgbTypeahead, NgbTypeaheadConfig, NgbTypeaheadModule, ɵa, ɵb, ɵba, ɵc, ɵd, ɵe, ɵf, ɵg, ɵh, ɵi, ɵj, ɵk, ɵl, ɵm, ɵn, ɵo, ɵp, ɵq, ɵr, ɵs, ɵt, ɵu, ɵv, ɵw, ɵx, ɵy, ɵz */

    /***/
    function kSV(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ModalDismissReasons", function () {
        return ModalDismissReasons;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbAccordion", function () {
        return NgbAccordion;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbAccordionConfig", function () {
        return NgbAccordionConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbAccordionModule", function () {
        return NgbAccordionModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbActiveModal", function () {
        return NgbActiveModal;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbAlert", function () {
        return NgbAlert;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbAlertConfig", function () {
        return NgbAlertConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbAlertModule", function () {
        return NgbAlertModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbButtonLabel", function () {
        return NgbButtonLabel;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbButtonsModule", function () {
        return NgbButtonsModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbCalendar", function () {
        return NgbCalendar;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbCalendarBuddhist", function () {
        return NgbCalendarBuddhist;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbCalendarGregorian", function () {
        return NgbCalendarGregorian;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbCalendarHebrew", function () {
        return NgbCalendarHebrew;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbCalendarIslamicCivil", function () {
        return NgbCalendarIslamicCivil;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbCalendarIslamicUmalqura", function () {
        return NgbCalendarIslamicUmalqura;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbCalendarPersian", function () {
        return NgbCalendarPersian;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbCarousel", function () {
        return NgbCarousel;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbCarouselConfig", function () {
        return NgbCarouselConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbCarouselModule", function () {
        return NgbCarouselModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbCheckBox", function () {
        return NgbCheckBox;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbCollapse", function () {
        return NgbCollapse;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbCollapseConfig", function () {
        return NgbCollapseConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbCollapseModule", function () {
        return NgbCollapseModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbConfig", function () {
        return NgbConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbDate", function () {
        return NgbDate;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbDateAdapter", function () {
        return NgbDateAdapter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbDateNativeAdapter", function () {
        return NgbDateNativeAdapter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbDateNativeUTCAdapter", function () {
        return NgbDateNativeUTCAdapter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbDateParserFormatter", function () {
        return NgbDateParserFormatter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbDatepicker", function () {
        return NgbDatepicker;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbDatepickerConfig", function () {
        return NgbDatepickerConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbDatepickerContent", function () {
        return NgbDatepickerContent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbDatepickerI18n", function () {
        return NgbDatepickerI18n;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbDatepickerI18nDefault", function () {
        return NgbDatepickerI18nDefault;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbDatepickerI18nHebrew", function () {
        return NgbDatepickerI18nHebrew;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbDatepickerKeyboardService", function () {
        return NgbDatepickerKeyboardService;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbDatepickerModule", function () {
        return NgbDatepickerModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbDatepickerMonth", function () {
        return NgbDatepickerMonth;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbDropdown", function () {
        return NgbDropdown;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbDropdownAnchor", function () {
        return NgbDropdownAnchor;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbDropdownConfig", function () {
        return NgbDropdownConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbDropdownItem", function () {
        return NgbDropdownItem;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbDropdownMenu", function () {
        return NgbDropdownMenu;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbDropdownModule", function () {
        return NgbDropdownModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbDropdownToggle", function () {
        return NgbDropdownToggle;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbHighlight", function () {
        return NgbHighlight;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbInputDatepicker", function () {
        return NgbInputDatepicker;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbInputDatepickerConfig", function () {
        return NgbInputDatepickerConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbModal", function () {
        return NgbModal;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbModalConfig", function () {
        return NgbModalConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbModalModule", function () {
        return NgbModalModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbModalRef", function () {
        return NgbModalRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbModule", function () {
        return NgbModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbNav", function () {
        return NgbNav;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbNavConfig", function () {
        return NgbNavConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbNavContent", function () {
        return NgbNavContent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbNavItem", function () {
        return NgbNavItem;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbNavLink", function () {
        return NgbNavLink;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbNavModule", function () {
        return NgbNavModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbNavOutlet", function () {
        return NgbNavOutlet;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbNavPane", function () {
        return NgbNavPane;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbNavbar", function () {
        return NgbNavbar;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbPagination", function () {
        return NgbPagination;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbPaginationConfig", function () {
        return NgbPaginationConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbPaginationEllipsis", function () {
        return NgbPaginationEllipsis;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbPaginationFirst", function () {
        return NgbPaginationFirst;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbPaginationLast", function () {
        return NgbPaginationLast;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbPaginationModule", function () {
        return NgbPaginationModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbPaginationNext", function () {
        return NgbPaginationNext;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbPaginationNumber", function () {
        return NgbPaginationNumber;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbPaginationPages", function () {
        return NgbPaginationPages;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbPaginationPrevious", function () {
        return NgbPaginationPrevious;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbPanel", function () {
        return NgbPanel;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbPanelContent", function () {
        return NgbPanelContent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbPanelHeader", function () {
        return NgbPanelHeader;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbPanelTitle", function () {
        return NgbPanelTitle;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbPanelToggle", function () {
        return NgbPanelToggle;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbPopover", function () {
        return NgbPopover;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbPopoverConfig", function () {
        return NgbPopoverConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbPopoverModule", function () {
        return NgbPopoverModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbProgressbar", function () {
        return NgbProgressbar;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbProgressbarConfig", function () {
        return NgbProgressbarConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbProgressbarModule", function () {
        return NgbProgressbarModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbRadio", function () {
        return NgbRadio;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbRadioGroup", function () {
        return NgbRadioGroup;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbRating", function () {
        return NgbRating;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbRatingConfig", function () {
        return NgbRatingConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbRatingModule", function () {
        return NgbRatingModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbSlide", function () {
        return NgbSlide;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbSlideEventDirection", function () {
        return NgbSlideEventDirection;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbSlideEventSource", function () {
        return NgbSlideEventSource;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbTimeAdapter", function () {
        return NgbTimeAdapter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbTimepicker", function () {
        return NgbTimepicker;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbTimepickerConfig", function () {
        return NgbTimepickerConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbTimepickerI18n", function () {
        return NgbTimepickerI18n;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbTimepickerModule", function () {
        return NgbTimepickerModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbToast", function () {
        return NgbToast;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbToastConfig", function () {
        return NgbToastConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbToastHeader", function () {
        return NgbToastHeader;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbToastModule", function () {
        return NgbToastModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbTooltip", function () {
        return NgbTooltip;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbTooltipConfig", function () {
        return NgbTooltipConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbTooltipModule", function () {
        return NgbTooltipModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbTypeahead", function () {
        return NgbTypeahead;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbTypeaheadConfig", function () {
        return NgbTypeaheadConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgbTypeaheadModule", function () {
        return NgbTypeaheadModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵa", function () {
        return NGB_CAROUSEL_DIRECTIVES;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵb", function () {
        return NGB_DATEPICKER_CALENDAR_FACTORY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵba", function () {
        return ContentRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵc", function () {
        return NgbDatepickerDayView;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵd", function () {
        return NgbDatepickerNavigation;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵe", function () {
        return NgbDatepickerNavigationSelect;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵf", function () {
        return NGB_DATEPICKER_18N_FACTORY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵg", function () {
        return NGB_DATEPICKER_DATE_ADAPTER_FACTORY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵh", function () {
        return NgbDateStructAdapter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵi", function () {
        return NGB_DATEPICKER_PARSER_FORMATTER_FACTORY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵj", function () {
        return NgbDateISOParserFormatter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵk", function () {
        return NgbPopoverWindow;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵl", function () {
        return NGB_DATEPICKER_TIME_ADAPTER_FACTORY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵm", function () {
        return NgbTimeStructAdapter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵn", function () {
        return NGB_TIMEPICKER_I18N_FACTORY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵo", function () {
        return NgbTimepickerI18nDefault;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵp", function () {
        return NgbTooltipWindow;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵq", function () {
        return NgbTypeaheadWindow;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵr", function () {
        return NgbDatepickerService;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵs", function () {
        return NgbModalBackdrop;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵt", function () {
        return NgbModalWindow;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵu", function () {
        return NgbModalStack;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵv", function () {
        return ScrollBar;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵw", function () {
        return ARIA_LIVE_DELAY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵx", function () {
        return ARIA_LIVE_DELAY_FACTORY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵy", function () {
        return Live;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵz", function () {
        return NgbCalendarHijri;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var _angular_forms__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/forms */
      "3Pt+");

      function NgbAccordion_ng_template_0_ng_template_2_Template(rf, ctx) {}

      function NgbAccordion_ng_template_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "button", 3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbAccordion_ng_template_0_ng_template_2_Template, 0, 0, "ng-template", 4);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var panel_r3 = ctx.$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngbPanelToggle", panel_r3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"](" ", panel_r3.title, "");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", panel_r3.titleTpl == null ? null : panel_r3.titleTpl.templateRef);
        }
      }

      function NgbAccordion_ng_template_2_ng_template_2_Template(rf, ctx) {}

      function NgbAccordion_ng_template_2_div_3_ng_template_2_Template(rf, ctx) {}

      function NgbAccordion_ng_template_2_div_3_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 8);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "div", 9);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbAccordion_ng_template_2_div_3_ng_template_2_Template, 0, 0, "ng-template", 4);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var panel_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpropertyInterpolate"]("id", panel_r5.id);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-labelledby", panel_r5.id + "-header");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", (panel_r5.contentTpl == null ? null : panel_r5.contentTpl.templateRef) || null);
        }
      }

      var _c0 = function _c0(a0, a1) {
        return {
          $implicit: a0,
          opened: a1
        };
      };

      function NgbAccordion_ng_template_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "div", 5);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbAccordion_ng_template_2_ng_template_2_Template, 0, 0, "ng-template", 6);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgbAccordion_ng_template_2_div_3_Template, 3, 3, "div", 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var panel_r5 = ctx.$implicit;

          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          var _r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"]("card " + (panel_r5.cardClass || ""));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"]("card-header " + (panel_r5.type ? "bg-" + panel_r5.type : ctx_r2.type ? "bg-" + ctx_r2.type : ""));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpropertyInterpolate1"]("id", "", panel_r5.id, "-header");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", (panel_r5.headerTpl == null ? null : panel_r5.headerTpl.templateRef) || _r0)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction2"](8, _c0, panel_r5, panel_r5.isOpen));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx_r2.destroyOnHide || panel_r5.isOpen || panel_r5.transitionRunning);
        }
      }

      function NgbAlert_button_1_Template(rf, ctx) {
        if (rf & 1) {
          var _r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "button", 1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbAlert_button_1_Template_button_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r2);

            var ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r1.close();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "span", 2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2, "\xD7");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }
      }

      var _c3 = ["*"];

      function NgbCarousel_li_1_Template(rf, ctx) {
        if (rf & 1) {
          var _r6 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li", 6);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbCarousel_li_1_Template_li_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r6);

            var slide_r4 = ctx.$implicit;

            var ctx_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            ctx_r5.focus();
            return ctx_r5.select(slide_r4.id, ctx_r5.NgbSlideEventSource.INDICATOR);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var slide_r4 = ctx.$implicit;

          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("active", slide_r4.id === ctx_r0.activeId);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-labelledby", "slide-" + slide_r4.id)("aria-controls", "slide-" + slide_r4.id)("aria-selected", slide_r4.id === ctx_r0.activeId);
        }
      }

      function NgbCarousel_div_3_ng_template_3_Template(rf, ctx) {}

      function NgbCarousel_div_3_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "span", 8);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](2, 9);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgbCarousel_div_3_ng_template_3_Template, 0, 0, "ng-template", 10);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var slide_r7 = ctx.$implicit;
          var i_r8 = ctx.index;
          var c_r9 = ctx.count;

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("id", "slide-" + slide_r7.id);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18nExp"](i_r8 + 1)(c_r9);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18nApply"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", slide_r7.tplRef);
        }
      }

      function NgbCarousel_a_4_Template(rf, ctx) {
        if (rf & 1) {
          var _r12 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "a", 11);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbCarousel_a_4_Template_a_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r12);

            var ctx_r11 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r11.arrowLeft();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "span", 12);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "span", 8);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](3, 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }
      }

      function NgbCarousel_a_5_Template(rf, ctx) {
        if (rf & 1) {
          var _r14 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "a", 14);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbCarousel_a_5_Template_a_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r14);

            var ctx_r13 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r13.arrowRight();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "span", 15);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "span", 8);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](3, 16);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }
      }

      var _c10 = ["defaultDayTemplate"];
      var _c11 = ["content"];

      function NgbDatepicker_ng_template_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div", 7);
        }

        if (rf & 2) {
          var date_r8 = ctx.date;
          var currentMonth_r9 = ctx.currentMonth;
          var selected_r10 = ctx.selected;
          var disabled_r11 = ctx.disabled;
          var focused_r12 = ctx.focused;

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("date", date_r8)("currentMonth", currentMonth_r9)("selected", selected_r10)("disabled", disabled_r11)("focused", focused_r12);
        }
      }

      function NgbDatepicker_ng_template_2_div_0_div_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 12);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var month_r14 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r16 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"](" ", ctx_r16.i18n.getMonthLabel(month_r14.firstDate), " ");
        }
      }

      function NgbDatepicker_ng_template_2_div_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 9);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbDatepicker_ng_template_2_div_0_div_1_Template, 2, 1, "div", 10);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](2, "ngb-datepicker-month", 11);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var month_r14 = ctx.$implicit;

          var ctx_r13 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r13.navigation === "none" || ctx_r13.displayMonths > 1 && ctx_r13.navigation === "select");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("month", month_r14.firstDate);
        }
      }

      function NgbDatepicker_ng_template_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbDatepicker_ng_template_2_div_0_Template, 3, 2, "div", 8);
        }

        if (rf & 2) {
          var ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx_r3.model.months);
        }
      }

      function NgbDatepicker_ngb_datepicker_navigation_5_Template(rf, ctx) {
        if (rf & 1) {
          var _r19 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "ngb-datepicker-navigation", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("navigate", function NgbDatepicker_ngb_datepicker_navigation_5_Template_ngb_datepicker_navigation_navigate_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r19);

            var ctx_r18 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r18.onNavigateEvent($event);
          })("select", function NgbDatepicker_ngb_datepicker_navigation_5_Template_ngb_datepicker_navigation_select_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r19);

            var ctx_r20 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r20.onNavigateDateSelect($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("date", ctx_r4.model.firstDate)("months", ctx_r4.model.months)("disabled", ctx_r4.model.disabled)("showSelect", ctx_r4.model.navigation === "select")("prevDisabled", ctx_r4.model.prevDisabled)("nextDisabled", ctx_r4.model.nextDisabled)("selectBoxes", ctx_r4.model.selectBoxes);
        }
      }

      function NgbDatepicker_ng_template_8_Template(rf, ctx) {}

      function NgbDatepicker_ng_template_9_Template(rf, ctx) {}

      function NgbDatepickerMonth_div_0_div_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 5);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r2.i18n.getWeekLabel());
        }
      }

      function NgbDatepickerMonth_div_0_div_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 6);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var weekday_r4 = ctx.$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](weekday_r4);
        }
      }

      function NgbDatepickerMonth_div_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbDatepickerMonth_div_0_div_1_Template, 2, 1, "div", 3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbDatepickerMonth_div_0_div_2_Template, 2, 1, "div", 4);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r0.datepicker.showWeekNumbers);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx_r0.viewModel.weekdays);
        }
      }

      function NgbDatepickerMonth_ng_template_1_div_0_div_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 11);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var week_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2).$implicit;

          var ctx_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r7.i18n.getWeekNumerals(week_r5.number));
        }
      }

      function NgbDatepickerMonth_ng_template_1_div_0_div_2_ng_template_1_ng_template_0_Template(rf, ctx) {}

      function NgbDatepickerMonth_ng_template_1_div_0_div_2_ng_template_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbDatepickerMonth_ng_template_1_div_0_div_2_ng_template_1_ng_template_0_Template, 0, 0, "ng-template", 14);
        }

        if (rf & 2) {
          var day_r10 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r11 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r11.datepicker.dayTemplate)("ngTemplateOutletContext", day_r10.context);
        }
      }

      function NgbDatepickerMonth_ng_template_1_div_0_div_2_Template(rf, ctx) {
        if (rf & 1) {
          var _r15 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 12);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbDatepickerMonth_ng_template_1_div_0_div_2_Template_div_click_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r15);

            var day_r10 = ctx.$implicit;

            var ctx_r14 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](3);

            ctx_r14.doSelect(day_r10);
            return $event.preventDefault();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbDatepickerMonth_ng_template_1_div_0_div_2_ng_template_1_Template, 1, 2, "ng-template", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var day_r10 = ctx.$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("disabled", day_r10.context.disabled)("hidden", day_r10.hidden)("ngb-dp-today", day_r10.context.today);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("tabindex", day_r10.tabindex);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-label", day_r10.ariaLabel);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !day_r10.hidden);
        }
      }

      function NgbDatepickerMonth_ng_template_1_div_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 8);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbDatepickerMonth_ng_template_1_div_0_div_1_Template, 2, 1, "div", 9);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbDatepickerMonth_ng_template_1_div_0_div_2_Template, 2, 9, "div", 10);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var week_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r6.datepicker.showWeekNumbers);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", week_r5.days);
        }
      }

      function NgbDatepickerMonth_ng_template_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbDatepickerMonth_ng_template_1_div_0_Template, 3, 2, "div", 7);
        }

        if (rf & 2) {
          var week_r5 = ctx.$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !week_r5.collapsed);
        }
      }

      function NgbDatepickerNavigation_ngb_datepicker_navigation_select_3_Template(rf, ctx) {
        if (rf & 1) {
          var _r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "ngb-datepicker-navigation-select", 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("select", function NgbDatepickerNavigation_ngb_datepicker_navigation_select_3_Template_ngb_datepicker_navigation_select_select_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r3);

            var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r2.select.emit($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("date", ctx_r0.date)("disabled", ctx_r0.disabled)("months", ctx_r0.selectBoxes.months)("years", ctx_r0.selectBoxes.years);
        }
      }

      function NgbDatepickerNavigation_4_ng_template_0_div_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div", 0);
        }
      }

      function NgbDatepickerNavigation_4_ng_template_0_div_3_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div", 0);
        }
      }

      function NgbDatepickerNavigation_4_ng_template_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbDatepickerNavigation_4_ng_template_0_div_0_Template, 1, 0, "div", 9);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "div", 10);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgbDatepickerNavigation_4_ng_template_0_div_3_Template, 1, 0, "div", 9);
        }

        if (rf & 2) {
          var month_r5 = ctx.$implicit;
          var i_r6 = ctx.index;

          var ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", i_r6 > 0);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"](" ", ctx_r4.i18n.getMonthLabel(month_r5.firstDate), " ");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", i_r6 !== ctx_r4.months.length - 1);
        }
      }

      function NgbDatepickerNavigation_4_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbDatepickerNavigation_4_ng_template_0_Template, 4, 3, "ng-template", 8);
        }

        if (rf & 2) {
          var ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx_r1.months);
        }
      }

      var _c20 = ["ngbDatepickerDayView", ""];
      var _c21 = ["month"];
      var _c22 = ["year"];

      function NgbDatepickerNavigationSelect_option_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "option", 5);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var m_r4 = ctx.$implicit;

          var ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("value", m_r4);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-label", ctx_r1.i18n.getMonthFullName(m_r4, ctx_r1.date == null ? null : ctx_r1.date.year));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r1.i18n.getMonthShortName(m_r4, ctx_r1.date == null ? null : ctx_r1.date.year));
        }
      }

      function NgbDatepickerNavigationSelect_option_5_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "option", 5);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var y_r5 = ctx.$implicit;

          var ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("value", y_r5);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r3.i18n.getYearNumerals(y_r5));
        }
      }

      var _c31 = ["dialog"];
      var _c32 = ["ngbNavOutlet", ""];

      function NgbNavOutlet_ng_template_0_div_0_ng_template_1_Template(rf, ctx) {}

      var _c33 = function _c33(a0) {
        return {
          $implicit: a0
        };
      };

      function NgbNavOutlet_ng_template_0_div_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbNavOutlet_ng_template_0_div_0_ng_template_1_Template, 0, 0, "ng-template", 3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var item_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("item", item_r1)("nav", ctx_r2.nav)("role", ctx_r2.paneRole);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", (item_r1.contentTpl == null ? null : item_r1.contentTpl.templateRef) || null)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](5, _c33, item_r1.active || ctx_r2.isPanelTransitioning(item_r1)));
        }
      }

      function NgbNavOutlet_ng_template_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbNavOutlet_ng_template_0_div_0_Template, 2, 7, "div", 1);
        }

        if (rf & 2) {
          var item_r1 = ctx.$implicit;

          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", item_r1.isPanelInDom() || ctx_r0.isPanelTransitioning(item_r1));
        }
      }

      function NgbPagination_ng_template_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 9);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](1, 10);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }
      }

      function NgbPagination_ng_template_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 9);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](1, 11);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }
      }

      function NgbPagination_ng_template_4_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 9);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](1, 12);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }
      }

      function NgbPagination_ng_template_6_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 9);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](1, 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }
      }

      function NgbPagination_ng_template_8_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](0, "...");
        }
      }

      function NgbPagination_ng_template_10_span_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 15);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1, "(current)");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }
      }

      function NgbPagination_ng_template_10_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbPagination_ng_template_10_span_1_Template, 2, 0, "span", 14);
        }

        if (rf & 2) {
          var page_r19 = ctx.$implicit;
          var currentPage_r20 = ctx.currentPage;

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"](" ", page_r19, " ");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", page_r19 === currentPage_r20);
        }
      }

      function NgbPagination_ng_template_12_li_0_a_1_ng_template_1_Template(rf, ctx) {}

      var _c42 = function _c42(a1) {
        return {
          disabled: true,
          currentPage: a1
        };
      };

      function NgbPagination_ng_template_12_li_0_a_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "a", 20);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbPagination_ng_template_12_li_0_a_1_ng_template_1_Template, 0, 0, "ng-template", 8);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var page_r22 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2).$implicit;

          var ctx_r27 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          var _r8 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](9);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", (ctx_r27.tplEllipsis == null ? null : ctx_r27.tplEllipsis.templateRef) || _r8)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](2, _c42, page_r22));
        }
      }

      function NgbPagination_ng_template_12_li_0_a_2_ng_template_1_Template(rf, ctx) {}

      var _c43 = function _c43(a0, a1, a2) {
        return {
          disabled: a0,
          $implicit: a1,
          currentPage: a2
        };
      };

      function NgbPagination_ng_template_12_li_0_a_2_Template(rf, ctx) {
        if (rf & 1) {
          var _r34 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "a", 21);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbPagination_ng_template_12_li_0_a_2_Template_a_click_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r34);

            var pageNumber_r26 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

            var ctx_r32 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            ctx_r32.selectPage(pageNumber_r26);
            return $event.preventDefault();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbPagination_ng_template_12_li_0_a_2_ng_template_1_Template, 0, 0, "ng-template", 8);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var pageNumber_r26 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r35 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          var disabled_r24 = ctx_r35.disabled;
          var page_r22 = ctx_r35.$implicit;

          var ctx_r28 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          var _r10 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](11);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("tabindex", disabled_r24 ? "-1" : null)("aria-disabled", disabled_r24 ? "true" : null);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", (ctx_r28.tplNumber == null ? null : ctx_r28.tplNumber.templateRef) || _r10)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction3"](4, _c43, disabled_r24, pageNumber_r26, page_r22));
        }
      }

      function NgbPagination_ng_template_12_li_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li", 17);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbPagination_ng_template_12_li_0_a_1_Template, 2, 4, "a", 18);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbPagination_ng_template_12_li_0_a_2_Template, 2, 8, "a", 19);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var pageNumber_r26 = ctx.$implicit;

          var ctx_r37 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          var page_r22 = ctx_r37.$implicit;
          var disabled_r24 = ctx_r37.disabled;

          var ctx_r25 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("active", pageNumber_r26 === page_r22)("disabled", ctx_r25.isEllipsis(pageNumber_r26) || disabled_r24);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-current", pageNumber_r26 === page_r22 ? "page" : null);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r25.isEllipsis(pageNumber_r26));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx_r25.isEllipsis(pageNumber_r26));
        }
      }

      function NgbPagination_ng_template_12_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbPagination_ng_template_12_li_0_Template, 3, 7, "li", 16);
        }

        if (rf & 2) {
          var pages_r23 = ctx.pages;

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", pages_r23);
        }
      }

      function NgbPagination_li_15_ng_template_2_Template(rf, ctx) {}

      var _c46 = function _c46(a0, a1) {
        return {
          disabled: a0,
          currentPage: a1
        };
      };

      function NgbPagination_li_15_Template(rf, ctx) {
        if (rf & 1) {
          var _r40 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li", 17);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "a", 22);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbPagination_li_15_Template_a_click_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r40);

            var ctx_r39 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            ctx_r39.selectPage(1);
            return $event.preventDefault();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbPagination_li_15_ng_template_2_Template, 0, 0, "ng-template", 8);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r14 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          var _r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("disabled", ctx_r14.previousDisabled());

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("tabindex", ctx_r14.previousDisabled() ? "-1" : null)("aria-disabled", ctx_r14.previousDisabled() ? "true" : null);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", (ctx_r14.tplFirst == null ? null : ctx_r14.tplFirst.templateRef) || _r0)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction2"](6, _c46, ctx_r14.previousDisabled(), ctx_r14.page));
        }
      }

      function NgbPagination_li_16_ng_template_2_Template(rf, ctx) {}

      var _c49 = function _c49(a0) {
        return {
          disabled: a0
        };
      };

      function NgbPagination_li_16_Template(rf, ctx) {
        if (rf & 1) {
          var _r43 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li", 17);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "a", 23);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbPagination_li_16_Template_a_click_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r43);

            var ctx_r42 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            ctx_r42.selectPage(ctx_r42.page - 1);
            return $event.preventDefault();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbPagination_li_16_ng_template_2_Template, 0, 0, "ng-template", 8);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r15 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          var _r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("disabled", ctx_r15.previousDisabled());

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("tabindex", ctx_r15.previousDisabled() ? "-1" : null)("aria-disabled", ctx_r15.previousDisabled() ? "true" : null);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", (ctx_r15.tplPrevious == null ? null : ctx_r15.tplPrevious.templateRef) || _r2)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](6, _c49, ctx_r15.previousDisabled()));
        }
      }

      function NgbPagination_ng_template_17_Template(rf, ctx) {}

      function NgbPagination_li_18_ng_template_2_Template(rf, ctx) {}

      function NgbPagination_li_18_Template(rf, ctx) {
        if (rf & 1) {
          var _r46 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li", 17);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "a", 24);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbPagination_li_18_Template_a_click_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r46);

            var ctx_r45 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            ctx_r45.selectPage(ctx_r45.page + 1);
            return $event.preventDefault();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbPagination_li_18_ng_template_2_Template, 0, 0, "ng-template", 8);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r17 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          var _r4 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](5);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("disabled", ctx_r17.nextDisabled());

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("tabindex", ctx_r17.nextDisabled() ? "-1" : null)("aria-disabled", ctx_r17.nextDisabled() ? "true" : null);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", (ctx_r17.tplNext == null ? null : ctx_r17.tplNext.templateRef) || _r4)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction2"](6, _c46, ctx_r17.nextDisabled(), ctx_r17.page));
        }
      }

      function NgbPagination_li_19_ng_template_2_Template(rf, ctx) {}

      function NgbPagination_li_19_Template(rf, ctx) {
        if (rf & 1) {
          var _r49 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li", 17);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "a", 25);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbPagination_li_19_Template_a_click_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r49);

            var ctx_r48 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            ctx_r48.selectPage(ctx_r48.pageCount);
            return $event.preventDefault();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbPagination_li_19_ng_template_2_Template, 0, 0, "ng-template", 8);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r18 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          var _r6 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](7);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("disabled", ctx_r18.nextDisabled());

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("tabindex", ctx_r18.nextDisabled() ? "-1" : null)("aria-disabled", ctx_r18.nextDisabled() ? "true" : null);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", (ctx_r18.tplLast == null ? null : ctx_r18.tplLast.templateRef) || _r6)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction2"](6, _c46, ctx_r18.nextDisabled(), ctx_r18.page));
        }
      }

      var _c54 = function _c54(a0, a1, a2) {
        return {
          $implicit: a0,
          pages: a1,
          disabled: a2
        };
      };

      function NgbPopoverWindow_h3_1_ng_template_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](0);
        }

        if (rf & 2) {
          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r2.title);
        }
      }

      function NgbPopoverWindow_h3_1_ng_template_3_Template(rf, ctx) {}

      function NgbPopoverWindow_h3_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "h3", 3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbPopoverWindow_h3_1_ng_template_1_Template, 1, 1, "ng-template", null, 4, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgbPopoverWindow_h3_1_ng_template_3_Template, 0, 0, "ng-template", 5);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var _r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](2);

          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r0.isTitleTemplate() ? ctx_r0.title : _r1)("ngTemplateOutletContext", ctx_r0.context);
        }
      }

      function NgbProgressbar_span_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](1, 2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpipe"](2, "percent");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18nExp"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpipeBind1"](2, 1, ctx_r0.getValue() / ctx_r0.max));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18nApply"](1);
        }
      }

      function NgbRating_ng_template_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](0);
        }

        if (rf & 2) {
          var fill_r3 = ctx.fill;

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](fill_r3 === 100 ? "\u2605" : "\u2606");
        }
      }

      function NgbRating_ng_template_2_ng_template_3_Template(rf, ctx) {}

      function NgbRating_ng_template_2_Template(rf, ctx) {
        if (rf & 1) {
          var _r7 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "span", 3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("mouseenter", function NgbRating_ng_template_2_Template_span_mouseenter_2_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r7);

            var index_r4 = ctx.index;

            var ctx_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r6.enter(index_r4 + 1);
          })("click", function NgbRating_ng_template_2_Template_span_click_2_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r7);

            var index_r4 = ctx.index;

            var ctx_r8 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r8.handleClick(index_r4 + 1);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgbRating_ng_template_2_ng_template_3_Template, 0, 0, "ng-template", 4);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var index_r4 = ctx.index;

          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          var _r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"]("(", index_r4 < ctx_r2.nextRate ? "*" : " ", ")");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("cursor", ctx_r2.isInteractive() ? "pointer" : "default");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r2.starTemplate || ctx_r2.starTemplateFromContent || _r0)("ngTemplateOutletContext", ctx_r2.contexts[index_r4]);
        }
      }

      function NgbTimepicker_button_3_Template(rf, ctx) {
        if (rf & 1) {
          var _r9 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "button", 11);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbTimepicker_button_3_Template_button_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r9);

            var ctx_r8 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r8.changeHour(ctx_r8.hourStep);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "span", 12);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "span", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](3, 14);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("btn-sm", ctx_r0.isSmallSize)("btn-lg", ctx_r0.isLargeSize)("disabled", ctx_r0.disabled);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx_r0.disabled);
        }
      }

      function NgbTimepicker_button_5_Template(rf, ctx) {
        if (rf & 1) {
          var _r11 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "button", 11);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbTimepicker_button_5_Template_button_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r11);

            var ctx_r10 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r10.changeHour(-ctx_r10.hourStep);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "span", 15);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "span", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](3, 16);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("btn-sm", ctx_r1.isSmallSize)("btn-lg", ctx_r1.isLargeSize)("disabled", ctx_r1.disabled);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx_r1.disabled);
        }
      }

      function NgbTimepicker_button_9_Template(rf, ctx) {
        if (rf & 1) {
          var _r13 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "button", 11);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbTimepicker_button_9_Template_button_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r13);

            var ctx_r12 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r12.changeMinute(ctx_r12.minuteStep);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "span", 12);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "span", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](3, 17);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("btn-sm", ctx_r2.isSmallSize)("btn-lg", ctx_r2.isLargeSize)("disabled", ctx_r2.disabled);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx_r2.disabled);
        }
      }

      function NgbTimepicker_button_11_Template(rf, ctx) {
        if (rf & 1) {
          var _r15 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "button", 11);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbTimepicker_button_11_Template_button_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r15);

            var ctx_r14 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r14.changeMinute(-ctx_r14.minuteStep);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "span", 15);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "span", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](3, 18);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("btn-sm", ctx_r3.isSmallSize)("btn-lg", ctx_r3.isLargeSize)("disabled", ctx_r3.disabled);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx_r3.disabled);
        }
      }

      function NgbTimepicker_div_12_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 5);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1, ":");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }
      }

      function NgbTimepicker_div_13_button_1_Template(rf, ctx) {
        if (rf & 1) {
          var _r19 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "button", 11);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbTimepicker_div_13_button_1_Template_button_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r19);

            var ctx_r18 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r18.changeSecond(ctx_r18.secondStep);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "span", 12);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "span", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](3, 21);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r16 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("btn-sm", ctx_r16.isSmallSize)("btn-lg", ctx_r16.isLargeSize)("disabled", ctx_r16.disabled);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx_r16.disabled);
        }
      }

      function NgbTimepicker_div_13_button_3_Template(rf, ctx) {
        if (rf & 1) {
          var _r21 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "button", 11);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbTimepicker_div_13_button_3_Template_button_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r21);

            var ctx_r20 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r20.changeSecond(-ctx_r20.secondStep);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "span", 15);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "span", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](3, 22);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r17 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("btn-sm", ctx_r17.isSmallSize)("btn-lg", ctx_r17.isLargeSize)("disabled", ctx_r17.disabled);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx_r17.disabled);
        }
      }

      function NgbTimepicker_div_13_Template(rf, ctx) {
        if (rf & 1) {
          var _r23 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 19);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbTimepicker_div_13_button_1_Template, 4, 7, "button", 3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "input", 20);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function NgbTimepicker_div_13_Template_input_change_2_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r23);

            var ctx_r22 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r22.updateSecond($event.target.value);
          })("blur", function NgbTimepicker_div_13_Template_input_blur_2_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r23);

            var ctx_r24 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r24.handleBlur();
          })("input", function NgbTimepicker_div_13_Template_input_input_2_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r23);

            var ctx_r25 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r25.formatInput($event.target);
          })("keydown.ArrowUp", function NgbTimepicker_div_13_Template_input_keydown_ArrowUp_2_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r23);

            var ctx_r26 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            ctx_r26.changeSecond(ctx_r26.secondStep);
            return $event.preventDefault();
          })("keydown.ArrowDown", function NgbTimepicker_div_13_Template_input_keydown_ArrowDown_2_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r23);

            var ctx_r27 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            ctx_r27.changeSecond(-ctx_r27.secondStep);
            return $event.preventDefault();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgbTimepicker_div_13_button_3_Template, 4, 7, "button", 3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r5.spinners);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("form-control-sm", ctx_r5.isSmallSize)("form-control-lg", ctx_r5.isLargeSize);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("value", ctx_r5.formatMinSec(ctx_r5.model == null ? null : ctx_r5.model.second))("readOnly", ctx_r5.readonlyInputs)("disabled", ctx_r5.disabled);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r5.spinners);
        }
      }

      function NgbTimepicker_div_14_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div", 5);
        }
      }

      function NgbTimepicker_div_15_ng_container_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](1, 27);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerEnd"]();
        }

        if (rf & 2) {
          var ctx_r28 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18nExp"](ctx_r28.i18n.getAfternoonPeriod());

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18nApply"](1);
        }
      }

      function NgbTimepicker_div_15_ng_template_3_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18n"](0, 28);
        }

        if (rf & 2) {
          var ctx_r30 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18nExp"](ctx_r30.i18n.getMorningPeriod());

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵi18nApply"](0);
        }
      }

      function NgbTimepicker_div_15_Template(rf, ctx) {
        if (rf & 1) {
          var _r32 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 23);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "button", 24);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbTimepicker_div_15_Template_button_click_1_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r32);

            var ctx_r31 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r31.toggleMeridian();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbTimepicker_div_15_ng_container_2_Template, 2, 1, "ng-container", 25);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgbTimepicker_div_15_ng_template_3_Template, 1, 1, "ng-template", null, 26, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var _r29 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](4);

          var ctx_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("btn-sm", ctx_r7.isSmallSize)("btn-lg", ctx_r7.isLargeSize)("disabled", ctx_r7.disabled);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx_r7.disabled);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r7.model && ctx_r7.model.hour >= 12)("ngIfElse", _r29);
        }
      }

      function NgbToast_ng_template_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "strong", 3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r1.header);
        }
      }

      function NgbToast_ng_template_2_ng_template_1_Template(rf, ctx) {}

      function NgbToast_ng_template_2_Template(rf, ctx) {
        if (rf & 1) {
          var _r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 4);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbToast_ng_template_2_ng_template_1_Template, 0, 0, "ng-template", 5);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "button", 6);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbToast_ng_template_2_Template_button_click_2_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r5);

            var ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r4.hide();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "span", 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](4, "\xD7");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          var _r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r2.contentHeaderTpl || _r0);
        }
      }

      function NgbHighlight_ng_template_0_span_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var part_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"](ctx_r3.highlightClass);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](part_r1);
        }
      }

      function NgbHighlight_ng_template_0_ng_template_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](0);
        }

        if (rf & 2) {
          var part_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](part_r1);
        }
      }

      function NgbHighlight_ng_template_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbHighlight_ng_template_0_span_0_Template, 2, 3, "span", 1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbHighlight_ng_template_0_ng_template_1_Template, 1, 1, "ng-template", null, 2, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
        }

        if (rf & 2) {
          var isOdd_r2 = ctx.odd;

          var _r4 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", isOdd_r2)("ngIfElse", _r4);
        }
      }

      function NgbTypeaheadWindow_ng_template_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "ngb-highlight", 2);
        }

        if (rf & 2) {
          var result_r3 = ctx.result;
          var term_r4 = ctx.term;
          var formatter_r5 = ctx.formatter;

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("result", formatter_r5(result_r3))("term", term_r4);
        }
      }

      function NgbTypeaheadWindow_ng_template_2_ng_template_1_Template(rf, ctx) {}

      var _c87 = function _c87(a0, a1, a2) {
        return {
          result: a0,
          term: a1,
          formatter: a2
        };
      };

      function NgbTypeaheadWindow_ng_template_2_Template(rf, ctx) {
        if (rf & 1) {
          var _r10 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "button", 3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("mouseenter", function NgbTypeaheadWindow_ng_template_2_Template_button_mouseenter_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r10);

            var idx_r7 = ctx.index;

            var ctx_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r9.markActive(idx_r7);
          })("click", function NgbTypeaheadWindow_ng_template_2_Template_button_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r10);

            var result_r6 = ctx.$implicit;

            var ctx_r11 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r11.select(result_r6);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbTypeaheadWindow_ng_template_2_ng_template_1_Template, 0, 0, "ng-template", 4);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var result_r6 = ctx.$implicit;
          var idx_r7 = ctx.index;

          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          var _r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("active", idx_r7 === ctx_r2.activeIdx);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("id", ctx_r2.id + "-" + idx_r7);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r2.resultTemplate || _r0)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction3"](5, _c87, result_r6, ctx_r2.term, ctx_r2.formatter));
        }
      }

      function toInteger(value) {
        return parseInt("".concat(value), 10);
      }

      function toString(value) {
        return value !== undefined && value !== null ? "".concat(value) : '';
      }

      function getValueInRange(value, max) {
        var min = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
        return Math.max(Math.min(value, max), min);
      }

      function isString(value) {
        return typeof value === 'string';
      }

      function isNumber(value) {
        return !isNaN(toInteger(value));
      }

      function isInteger(value) {
        return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;
      }

      function isDefined(value) {
        return value !== undefined && value !== null;
      }

      function padNumber(value) {
        if (isNumber(value)) {
          return "0".concat(value).slice(-2);
        } else {
          return '';
        }
      }

      function regExpEscape(text) {
        return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
      }

      function hasClassName(element, className) {
        return element && element.className && element.className.split && element.className.split(/\s+/).indexOf(className) >= 0;
      }

      if (typeof Element !== 'undefined' && !Element.prototype.closest) {
        // Polyfill for ie10+
        if (!Element.prototype.matches) {
          // IE uses the non-standard name: msMatchesSelector
          Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;
        }

        Element.prototype.closest = function (s) {
          var el = this;

          if (!document.documentElement.contains(el)) {
            return null;
          }

          do {
            if (el.matches(s)) {
              return el;
            }

            el = el.parentElement || el.parentNode;
          } while (el !== null && el.nodeType === 1);

          return null;
        };
      }

      function closest(element, selector) {
        if (!selector) {
          return null;
        }
        /*
         * In certain browsers (e.g. Edge 44.18362.449.0) HTMLDocument does
         * not support `Element.prototype.closest`. To emulate the correct behaviour
         * we return null when the method is missing.
         *
         * Note that in evergreen browsers `closest(document.documentElement, 'html')`
         * will return the document element whilst in Edge null will be returned. This
         * compromise was deemed good enough.
         */


        if (typeof element.closest === 'undefined') {
          return null;
        }

        return element.closest(selector);
      }
      /**
       * Force a browser reflow
       * @param element element where to apply the reflow
       */


      function reflow(element) {
        return (element || document.body).getBoundingClientRect();
      }
      /**
       * Creates an observable where all callbacks are executed inside a given zone
       *
       * @param zone
       */


      function runInZone(zone) {
        return function (source) {
          return new rxjs__WEBPACK_IMPORTED_MODULE_2__["Observable"](function (observer) {
            var onNext = function onNext(value) {
              return zone.run(function () {
                return observer.next(value);
              });
            };

            var onError = function onError(e) {
              return zone.run(function () {
                return observer.error(e);
              });
            };

            var onComplete = function onComplete() {
              return zone.run(function () {
                return observer.complete();
              });
            };

            return source.subscribe(onNext, onError, onComplete);
          });
        };
      }

      function removeAccents(str) {
        return str.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
      }

      var environment = {
        animation: true,
        transitionTimerDelayMs: 5
      };
      /**
       * Global ng-bootstrap config
       *
       * @since 8.0.0
       */

      var NgbConfig = function NgbConfig() {
        _classCallCheck2(this, NgbConfig);

        this.animation = environment.animation;
      };

      NgbConfig.ɵfac = function NgbConfig_Factory(t) {
        return new (t || NgbConfig)();
      };

      NgbConfig.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function NgbConfig_Factory() {
          return new NgbConfig();
        },
        token: NgbConfig,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbConfig, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [];
        }, null);
      })();
      /**
       * A configuration service for the [NgbAccordion](#/components/accordion/api#NgbAccordion) component.
       *
       * You can inject this service, typically in your root component, and customize its properties
       * to provide default values for all accordions used in the application.
       */


      var NgbAccordionConfig = /*#__PURE__*/function () {
        function NgbAccordionConfig(_ngbConfig) {
          _classCallCheck2(this, NgbAccordionConfig);

          this._ngbConfig = _ngbConfig;
          this.closeOthers = false;
        }

        _createClass2(NgbAccordionConfig, [{
          key: "animation",
          get: function get() {
            return this._animation === undefined ? this._ngbConfig.animation : this._animation;
          },
          set: function set(animation) {
            this._animation = animation;
          }
        }]);

        return NgbAccordionConfig;
      }();

      NgbAccordionConfig.ɵfac = function NgbAccordionConfig_Factory(t) {
        return new (t || NgbAccordionConfig)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig));
      };

      NgbAccordionConfig.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function NgbAccordionConfig_Factory() {
          return new NgbAccordionConfig(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig));
        },
        token: NgbAccordionConfig,
        providedIn: "root"
      });

      NgbAccordionConfig.ctorParameters = function () {
        return [{
          type: NgbConfig
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbAccordionConfig, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: NgbConfig
          }];
        }, null);
      })();

      function getTransitionDurationMs(element) {
        var _window$getComputedSt = window.getComputedStyle(element),
            transitionDelay = _window$getComputedSt.transitionDelay,
            transitionDuration = _window$getComputedSt.transitionDuration;

        var transitionDelaySec = parseFloat(transitionDelay);
        var transitionDurationSec = parseFloat(transitionDuration);
        return (transitionDelaySec + transitionDurationSec) * 1000;
      }

      var noopFn = function noopFn() {};

      var ɵ0$5 = noopFn;
      var transitionTimerDelayMs = environment.transitionTimerDelayMs;
      var runningTransitions = new Map();

      var ngbRunTransition = function ngbRunTransition(zone, element, startFn, options) {
        // Getting initial context from options
        var context = options.context || {}; // Checking if there are already running transitions on the given element.

        var running = runningTransitions.get(element);

        if (running) {
          switch (options.runningTransition) {
            // If there is one running and we want for it to 'continue' to run, we have to cancel the new one.
            // We're not emitting any values, but simply completing the observable (EMPTY).
            case 'continue':
              return rxjs__WEBPACK_IMPORTED_MODULE_2__["EMPTY"];
            // If there is one running and we want for it to 'stop', we have to complete the running one.
            // We're simply completing the running one and not emitting any values and merging newly provided context
            // with the one coming from currently running transition.

            case 'stop':
              zone.run(function () {
                return running.transition$.complete();
              });
              context = Object.assign(running.context, context);
              runningTransitions["delete"](element);
          }
        } // Running the start function


        var endFn = startFn(element, options.animation, context) || noopFn; // If 'prefer-reduced-motion' is enabled, the 'transition' will be set to 'none'.
        // If animations are disabled, we have to emit a value and complete the observable
        // In this case we have to call the end function, but can finish immediately by emitting a value,
        // completing the observable and executing end functions synchronously.

        if (!options.animation || window.getComputedStyle(element).transitionProperty === 'none') {
          zone.run(function () {
            return endFn();
          });
          return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(undefined).pipe(runInZone(zone));
        } // Starting a new transition


        var transition$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
        var finishTransition$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
        var stop$ = transition$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["endWith"])(true));
        runningTransitions.set(element, {
          transition$: transition$,
          complete: function complete() {
            finishTransition$.next();
            finishTransition$.complete();
          },
          context: context
        });
        var transitionDurationMs = getTransitionDurationMs(element); // 1. We have to both listen for the 'transitionend' event and have a 'just-in-case' timer,
        // because 'transitionend' event might not be fired in some browsers, if the transitioning
        // element becomes invisible (ex. when scrolling, making browser tab inactive, etc.). The timer
        // guarantees, that we'll release the DOM element and complete 'ngbRunTransition'.
        // 2. We need to filter transition end events, because they might bubble from shorter transitions
        // on inner DOM elements. We're only interested in the transition on the 'element' itself.

        zone.runOutsideAngular(function () {
          var transitionEnd$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(element, 'transitionend').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(stop$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(function (_ref27) {
            var target = _ref27.target;
            return target === element;
          }));
          var timer$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["timer"])(transitionDurationMs + transitionTimerDelayMs).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(stop$));
          Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["race"])(timer$, transitionEnd$, finishTransition$).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(stop$)).subscribe(function () {
            runningTransitions["delete"](element);
            zone.run(function () {
              endFn();
              transition$.next();
              transition$.complete();
            });
          });
        });
        return transition$.asObservable();
      };

      var ngbCompleteTransition = function ngbCompleteTransition(element) {
        var _a;

        (_a = runningTransitions.get(element)) === null || _a === void 0 ? void 0 : _a.complete();
      };

      function measureCollapsingElementHeightPx(element) {
        // SSR fix for without injecting the PlatformId
        if (typeof navigator === 'undefined') {
          return '0px';
        }

        var classList = element.classList;
        var hasShownClass = classList.contains('show');

        if (!hasShownClass) {
          classList.add('show');
        }

        element.style.height = '';
        var height = element.getBoundingClientRect().height + 'px';

        if (!hasShownClass) {
          classList.remove('show');
        }

        return height;
      }

      var ngbCollapsingTransition = function ngbCollapsingTransition(element, animation, context) {
        var direction = context.direction,
            maxHeight = context.maxHeight;
        var classList = element.classList;

        function setInitialClasses() {
          classList.add('collapse');

          if (direction === 'show') {
            classList.add('show');
          } else {
            classList.remove('show');
          }
        } // without animations we just need to set initial classes


        if (!animation) {
          setInitialClasses();
          return;
        } // No maxHeight -> running the transition for the first time


        if (!maxHeight) {
          maxHeight = measureCollapsingElementHeightPx(element);
          context.maxHeight = maxHeight; // Fix the height before starting the animation

          element.style.height = direction !== 'show' ? maxHeight : '0px';
          classList.remove('collapse');
          classList.remove('collapsing');
          classList.remove('show');
          reflow(element); // Start the animation

          classList.add('collapsing');
        } // Start or revert the animation


        element.style.height = direction === 'show' ? maxHeight : '0px';
        return function () {
          setInitialClasses();
          classList.remove('collapsing');
          element.style.height = '';
        };
      };

      var nextId$4 = 0;
      /**
       * A directive that wraps an accordion panel header with any HTML markup and a toggling button
       * marked with [`NgbPanelToggle`](#/components/accordion/api#NgbPanelToggle).
       * See the [header customization demo](#/components/accordion/examples#header) for more details.
       *
       * You can also use [`NgbPanelTitle`](#/components/accordion/api#NgbPanelTitle) to customize only the panel title.
       *
       * @since 4.1.0
       */

      var NgbPanelHeader = function NgbPanelHeader(templateRef) {
        _classCallCheck2(this, NgbPanelHeader);

        this.templateRef = templateRef;
      };

      NgbPanelHeader.ɵfac = function NgbPanelHeader_Factory(t) {
        return new (t || NgbPanelHeader)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]));
      };

      NgbPanelHeader.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbPanelHeader,
        selectors: [["ng-template", "ngbPanelHeader", ""]]
      });

      NgbPanelHeader.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPanelHeader, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'ng-template[ngbPanelHeader]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }];
        }, null);
      })();
      /**
       * A directive that wraps only the panel title with HTML markup inside.
       *
       * You can also use [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader) to customize the full panel header.
       */


      var NgbPanelTitle = function NgbPanelTitle(templateRef) {
        _classCallCheck2(this, NgbPanelTitle);

        this.templateRef = templateRef;
      };

      NgbPanelTitle.ɵfac = function NgbPanelTitle_Factory(t) {
        return new (t || NgbPanelTitle)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]));
      };

      NgbPanelTitle.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbPanelTitle,
        selectors: [["ng-template", "ngbPanelTitle", ""]]
      });

      NgbPanelTitle.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPanelTitle, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'ng-template[ngbPanelTitle]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }];
        }, null);
      })();
      /**
       * A directive that wraps the accordion panel content.
       */


      var NgbPanelContent = function NgbPanelContent(templateRef) {
        _classCallCheck2(this, NgbPanelContent);

        this.templateRef = templateRef;
      };

      NgbPanelContent.ɵfac = function NgbPanelContent_Factory(t) {
        return new (t || NgbPanelContent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]));
      };

      NgbPanelContent.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbPanelContent,
        selectors: [["ng-template", "ngbPanelContent", ""]]
      });

      NgbPanelContent.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPanelContent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'ng-template[ngbPanelContent]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }];
        }, null);
      })();
      /**
       * A directive that wraps an individual accordion panel with title and collapsible content.
       */


      var NgbPanel = /*#__PURE__*/function () {
        function NgbPanel() {
          _classCallCheck2(this, NgbPanel);

          /**
           *  If `true`, the panel is disabled an can't be toggled.
           */
          this.disabled = false;
          /**
           *  An optional id for the panel that must be unique on the page.
           *
           *  If not provided, it will be auto-generated in the `ngb-panel-xxx` format.
           */

          this.id = "ngb-panel-".concat(nextId$4++);
          this.isOpen = false;
          /* A flag to specified that the transition panel classes have been initialized */

          this.initClassDone = false;
          /* A flag to specified if the panel is currently being animated, to ensure its presence in the dom */

          this.transitionRunning = false;
          /**
           * An event emitted when the panel is shown, after the transition. It has no payload.
           *
           * @since 8.0.0
           */

          this.shown = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * An event emitted when the panel is hidden, after the transition. It has no payload.
           *
           * @since 8.0.0
           */

          this.hidden = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        }

        _createClass2(NgbPanel, [{
          key: "ngAfterContentChecked",
          value: function ngAfterContentChecked() {
            // We are using @ContentChildren instead of @ContentChild as in the Angular version being used
            // only @ContentChildren allows us to specify the {descendants: false} option.
            // Without {descendants: false} we are hitting bugs described in:
            // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240
            this.titleTpl = this.titleTpls.first;
            this.headerTpl = this.headerTpls.first;
            this.contentTpl = this.contentTpls.first;
          }
        }]);

        return NgbPanel;
      }();

      NgbPanel.ɵfac = function NgbPanel_Factory(t) {
        return new (t || NgbPanel)();
      };

      NgbPanel.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbPanel,
        selectors: [["ngb-panel"]],
        contentQueries: function NgbPanel_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbPanelTitle, 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbPanelHeader, 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbPanelContent, 0);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.titleTpls = _t);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.headerTpls = _t);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.contentTpls = _t);
          }
        },
        inputs: {
          disabled: "disabled",
          id: "id",
          title: "title",
          type: "type",
          cardClass: "cardClass"
        },
        outputs: {
          shown: "shown",
          hidden: "hidden"
        }
      });
      NgbPanel.propDecorators = {
        disabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        id: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        title: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        type: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        cardClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        shown: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        hidden: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        titleTpls: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
          args: [NgbPanelTitle, {
            descendants: false
          }]
        }],
        headerTpls: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
          args: [NgbPanelHeader, {
            descendants: false
          }]
        }],
        contentTpls: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
          args: [NgbPanelContent, {
            descendants: false
          }]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPanel, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'ngb-panel'
          }]
        }], function () {
          return [];
        }, {
          disabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          id: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          shown: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          hidden: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          title: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          type: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          cardClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          titleTpls: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
            args: [NgbPanelTitle, {
              descendants: false
            }]
          }],
          headerTpls: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
            args: [NgbPanelHeader, {
              descendants: false
            }]
          }],
          contentTpls: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
            args: [NgbPanelContent, {
              descendants: false
            }]
          }]
        });
      })();
      /**
       * Accordion is a collection of collapsible panels (bootstrap cards).
       *
       * It can ensure only one panel is opened at a time and allows to customize panel
       * headers.
       */


      var NgbAccordion = /*#__PURE__*/function () {
        function NgbAccordion(config, _element, _ngZone, _changeDetector) {
          _classCallCheck2(this, NgbAccordion);

          this._element = _element;
          this._ngZone = _ngZone;
          this._changeDetector = _changeDetector;
          /**
           * An array or comma separated strings of panel ids that should be opened **initially**.
           *
           * For subsequent changes use methods like `expand()`, `collapse()`, etc. and
           * the `(panelChange)` event.
           */

          this.activeIds = [];
          /**
           * If `true`, panel content will be detached from DOM and not simply hidden when the panel is collapsed.
           */

          this.destroyOnHide = true;
          /**
           * Event emitted right before the panel toggle happens.
           *
           * See [NgbPanelChangeEvent](#/components/accordion/api#NgbPanelChangeEvent) for payload details.
           */

          this.panelChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * An event emitted when the expanding animation is finished on the panel. The payload is the panel id.
           *
           * @since 8.0.0
           */

          this.shown = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * An event emitted when the collapsing animation is finished on the panel, and before the panel element is removed.
           * The payload is the panel id.
           *
           * @since 8.0.0
           */

          this.hidden = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.animation = config.animation;
          this.type = config.type;
          this.closeOtherPanels = config.closeOthers;
        }
        /**
         * Checks if a panel with a given id is expanded.
         */


        _createClass2(NgbAccordion, [{
          key: "isExpanded",
          value: function isExpanded(panelId) {
            return this.activeIds.indexOf(panelId) > -1;
          }
          /**
           * Expands a panel with a given id.
           *
           * Has no effect if the panel is already expanded or disabled.
           */

        }, {
          key: "expand",
          value: function expand(panelId) {
            this._changeOpenState(this._findPanelById(panelId), true);
          }
          /**
           * Expands all panels, if `[closeOthers]` is `false`.
           *
           * If `[closeOthers]` is `true`, it will expand the first panel, unless there is already a panel opened.
           */

        }, {
          key: "expandAll",
          value: function expandAll() {
            var _this63 = this;

            if (this.closeOtherPanels) {
              if (this.activeIds.length === 0 && this.panels.length) {
                this._changeOpenState(this.panels.first, true);
              }
            } else {
              this.panels.forEach(function (panel) {
                return _this63._changeOpenState(panel, true);
              });
            }
          }
          /**
           * Collapses a panel with the given id.
           *
           * Has no effect if the panel is already collapsed or disabled.
           */

        }, {
          key: "collapse",
          value: function collapse(panelId) {
            this._changeOpenState(this._findPanelById(panelId), false);
          }
          /**
           * Collapses all opened panels.
           */

        }, {
          key: "collapseAll",
          value: function collapseAll() {
            var _this64 = this;

            this.panels.forEach(function (panel) {
              _this64._changeOpenState(panel, false);
            });
          }
          /**
           * Toggles a panel with the given id.
           *
           * Has no effect if the panel is disabled.
           */

        }, {
          key: "toggle",
          value: function toggle(panelId) {
            var panel = this._findPanelById(panelId);

            if (panel) {
              this._changeOpenState(panel, !panel.isOpen);
            }
          }
        }, {
          key: "ngAfterContentChecked",
          value: function ngAfterContentChecked() {
            var _this65 = this;

            // active id updates
            if (isString(this.activeIds)) {
              this.activeIds = this.activeIds.split(/\s*,\s*/);
            } // update panels open states


            this.panels.forEach(function (panel) {
              panel.isOpen = !panel.disabled && _this65.activeIds.indexOf(panel.id) > -1;
            }); // closeOthers updates

            if (this.activeIds.length > 1 && this.closeOtherPanels) {
              this._closeOthers(this.activeIds[0], false);

              this._updateActiveIds();
            } // Setup the initial classes here


            this._ngZone.onStable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1)).subscribe(function () {
              _this65.panels.forEach(function (panel) {
                var panelElement = _this65._getPanelElement(panel.id);

                if (panelElement) {
                  if (!panel.initClassDone) {
                    panel.initClassDone = true;
                    ngbRunTransition(_this65._ngZone, panelElement, ngbCollapsingTransition, {
                      animation: false,
                      runningTransition: 'continue',
                      context: {
                        direction: panel.isOpen ? 'show' : 'hide'
                      }
                    });
                  }
                } else {
                  // Classes must be initialized next time it will be in the dom
                  panel.initClassDone = false;
                }
              });
            });
          }
        }, {
          key: "_changeOpenState",
          value: function _changeOpenState(panel, nextState) {
            if (panel != null && !panel.disabled && panel.isOpen !== nextState) {
              var defaultPrevented = false;
              this.panelChange.emit({
                panelId: panel.id,
                nextState: nextState,
                preventDefault: function preventDefault() {
                  defaultPrevented = true;
                }
              });

              if (!defaultPrevented) {
                panel.isOpen = nextState;
                panel.transitionRunning = true;

                if (nextState && this.closeOtherPanels) {
                  this._closeOthers(panel.id);
                }

                this._updateActiveIds();

                this._runTransitions(this.animation);
              }
            }
          }
        }, {
          key: "_closeOthers",
          value: function _closeOthers(panelId) {
            var enableTransition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
            this.panels.forEach(function (panel) {
              if (panel.id !== panelId && panel.isOpen) {
                panel.isOpen = false;
                panel.transitionRunning = enableTransition;
              }
            });
          }
        }, {
          key: "_findPanelById",
          value: function _findPanelById(panelId) {
            return this.panels.find(function (p) {
              return p.id === panelId;
            }) || null;
          }
        }, {
          key: "_updateActiveIds",
          value: function _updateActiveIds() {
            this.activeIds = this.panels.filter(function (panel) {
              return panel.isOpen && !panel.disabled;
            }).map(function (panel) {
              return panel.id;
            });
          }
        }, {
          key: "_runTransitions",
          value: function _runTransitions(animation) {
            var _this66 = this;

            // detectChanges is performed to ensure that all panels are in the dom (via transitionRunning = true)
            // before starting the animation
            this._changeDetector.detectChanges();

            this.panels.forEach(function (panel) {
              // When panel.transitionRunning is true, the transition needs to be started OR reversed,
              // The direction (show or hide) is choosen by each panel.isOpen state
              if (panel.transitionRunning) {
                var panelElement = _this66._getPanelElement(panel.id);

                ngbRunTransition(_this66._ngZone, panelElement, ngbCollapsingTransition, {
                  animation: animation,
                  runningTransition: 'stop',
                  context: {
                    direction: panel.isOpen ? 'show' : 'hide'
                  }
                }).subscribe(function () {
                  panel.transitionRunning = false;
                  var id = panel.id;

                  if (panel.isOpen) {
                    panel.shown.emit();

                    _this66.shown.emit(id);
                  } else {
                    panel.hidden.emit();

                    _this66.hidden.emit(id);
                  }
                });
              }
            });
          }
        }, {
          key: "_getPanelElement",
          value: function _getPanelElement(panelId) {
            return this._element.nativeElement.querySelector('#' + panelId);
          }
        }]);

        return NgbAccordion;
      }();

      NgbAccordion.ɵfac = function NgbAccordion_Factory(t) {
        return new (t || NgbAccordion)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbAccordionConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]));
      };

      NgbAccordion.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: NgbAccordion,
        selectors: [["ngb-accordion"]],
        contentQueries: function NgbAccordion_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbPanel, 0);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.panels = _t);
          }
        },
        hostAttrs: ["role", "tablist", 1, "accordion"],
        hostVars: 1,
        hostBindings: function NgbAccordion_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-multiselectable", !ctx.closeOtherPanels);
          }
        },
        inputs: {
          activeIds: "activeIds",
          destroyOnHide: "destroyOnHide",
          animation: "animation",
          type: "type",
          closeOtherPanels: ["closeOthers", "closeOtherPanels"]
        },
        outputs: {
          panelChange: "panelChange",
          shown: "shown",
          hidden: "hidden"
        },
        exportAs: ["ngbAccordion"],
        decls: 3,
        vars: 1,
        consts: [["ngbPanelHeader", ""], ["t", ""], ["ngFor", "", 3, "ngForOf"], [1, "btn", "btn-link", 3, "ngbPanelToggle"], [3, "ngTemplateOutlet"], ["role", "tab", 3, "id"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], ["role", "tabpanel", 3, "id", 4, "ngIf"], ["role", "tabpanel", 3, "id"], [1, "card-body"]],
        template: function NgbAccordion_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbAccordion_ng_template_0_Template, 3, 3, "ng-template", 0, 1, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbAccordion_ng_template_2_Template, 4, 11, "ng-template", 2);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.panels);
          }
        },
        directives: function directives() {
          return [NgbPanelHeader, _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], NgbPanelToggle, _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"]];
        },
        encapsulation: 2
      });

      NgbAccordion.ctorParameters = function () {
        return [{
          type: NgbAccordionConfig
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }];
      };

      NgbAccordion.propDecorators = {
        panels: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
          args: [NgbPanel]
        }],
        animation: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        activeIds: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        closeOtherPanels: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['closeOthers']
        }],
        destroyOnHide: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        type: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        panelChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        shown: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        hidden: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbAccordion, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'ngb-accordion',
            exportAs: 'ngbAccordion',
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            host: {
              'class': 'accordion',
              'role': 'tablist',
              '[attr.aria-multiselectable]': '!closeOtherPanels'
            },
            template: "\n    <ng-template #t ngbPanelHeader let-panel>\n      <button class=\"btn btn-link\" [ngbPanelToggle]=\"panel\">\n        {{panel.title}}<ng-template [ngTemplateOutlet]=\"panel.titleTpl?.templateRef\"></ng-template>\n      </button>\n    </ng-template>\n    <ng-template ngFor let-panel [ngForOf]=\"panels\">\n      <div [class]=\"'card ' + (panel.cardClass || '')\">\n        <div role=\"tab\" id=\"{{panel.id}}-header\" [class]=\"'card-header ' + (panel.type ? 'bg-'+panel.type: type ? 'bg-'+type : '')\">\n          <ng-template [ngTemplateOutlet]=\"panel.headerTpl?.templateRef || t\"\n                       [ngTemplateOutletContext]=\"{$implicit: panel, opened: panel.isOpen}\"></ng-template>\n        </div>\n        <div id=\"{{panel.id}}\" role=\"tabpanel\" [attr.aria-labelledby]=\"panel.id + '-header'\"\n             *ngIf=\"!destroyOnHide || panel.isOpen || panel.transitionRunning\">\n          <div class=\"card-body\">\n               <ng-template [ngTemplateOutlet]=\"panel.contentTpl?.templateRef || null\"></ng-template>\n          </div>\n        </div>\n      </div>\n    </ng-template>\n  "
          }]
        }], function () {
          return [{
            type: NgbAccordionConfig
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }];
        }, {
          activeIds: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          destroyOnHide: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          panelChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          shown: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          hidden: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          animation: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          type: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          closeOtherPanels: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['closeOthers']
          }],
          panels: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
            args: [NgbPanel]
          }]
        });
      })();
      /**
       * A directive to put on a button that toggles panel opening and closing.
       *
       * To be used inside the [`NgbPanelHeader`](#/components/accordion/api#NgbPanelHeader)
       *
       * @since 4.1.0
       */


      var NgbPanelToggle = /*#__PURE__*/function () {
        function NgbPanelToggle(accordion, panel) {
          _classCallCheck2(this, NgbPanelToggle);

          this.accordion = accordion;
          this.panel = panel;
        }

        _createClass2(NgbPanelToggle, [{
          key: "ngbPanelToggle",
          set: function set(panel) {
            if (panel) {
              this.panel = panel;
            }
          }
        }]);

        return NgbPanelToggle;
      }();

      NgbPanelToggle.ɵfac = function NgbPanelToggle_Factory(t) {
        return new (t || NgbPanelToggle)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbAccordion), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbPanel, 9));
      };

      NgbPanelToggle.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbPanelToggle,
        selectors: [["button", "ngbPanelToggle", ""]],
        hostAttrs: ["type", "button"],
        hostVars: 5,
        hostBindings: function NgbPanelToggle_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbPanelToggle_click_HostBindingHandler() {
              return ctx.accordion.toggle(ctx.panel.id);
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("disabled", ctx.panel.disabled);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-expanded", ctx.panel.isOpen)("aria-controls", ctx.panel.id);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("collapsed", !ctx.panel.isOpen);
          }
        },
        inputs: {
          ngbPanelToggle: "ngbPanelToggle"
        }
      });

      NgbPanelToggle.ctorParameters = function () {
        return [{
          type: NgbAccordion
        }, {
          type: NgbPanel,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
          }]
        }];
      };

      NgbPanelToggle.propDecorators = {
        ngbPanelToggle: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPanelToggle, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'button[ngbPanelToggle]',
            host: {
              'type': 'button',
              '[disabled]': 'panel.disabled',
              '[class.collapsed]': '!panel.isOpen',
              '[attr.aria-expanded]': 'panel.isOpen',
              '[attr.aria-controls]': 'panel.id',
              '(click)': 'accordion.toggle(panel.id)'
            }
          }]
        }], function () {
          return [{
            type: NgbAccordion
          }, {
            type: NgbPanel,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
            }]
          }];
        }, {
          ngbPanelToggle: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var NGB_ACCORDION_DIRECTIVES = [NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle];

      var NgbAccordionModule = function NgbAccordionModule() {
        _classCallCheck2(this, NgbAccordionModule);
      };

      NgbAccordionModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NgbAccordionModule
      });
      NgbAccordionModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NgbAccordionModule_Factory(t) {
          return new (t || NgbAccordionModule)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbAccordionModule, {
          declarations: function declarations() {
            return [NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]];
          },
          exports: function exports() {
            return [NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelHeader, NgbPanelToggle];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbAccordionModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            declarations: NGB_ACCORDION_DIRECTIVES,
            exports: NGB_ACCORDION_DIRECTIVES,
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]
          }]
        }], null, null);
      })();
      /**
       * A configuration service for the [NgbAlert](#/components/alert/api#NgbAlert) component.
       *
       * You can inject this service, typically in your root component, and customize its properties
       * to provide default values for all alerts used in the application.
       */


      var NgbAlertConfig = /*#__PURE__*/function () {
        function NgbAlertConfig(_ngbConfig) {
          _classCallCheck2(this, NgbAlertConfig);

          this._ngbConfig = _ngbConfig;
          this.dismissible = true;
          this.type = 'warning';
        }

        _createClass2(NgbAlertConfig, [{
          key: "animation",
          get: function get() {
            return this._animation === undefined ? this._ngbConfig.animation : this._animation;
          },
          set: function set(animation) {
            this._animation = animation;
          }
        }]);

        return NgbAlertConfig;
      }();

      NgbAlertConfig.ɵfac = function NgbAlertConfig_Factory(t) {
        return new (t || NgbAlertConfig)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig));
      };

      NgbAlertConfig.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function NgbAlertConfig_Factory() {
          return new NgbAlertConfig(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig));
        },
        token: NgbAlertConfig,
        providedIn: "root"
      });

      NgbAlertConfig.ctorParameters = function () {
        return [{
          type: NgbConfig
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbAlertConfig, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: NgbConfig
          }];
        }, null);
      })();

      var ngbAlertFadingTransition = function ngbAlertFadingTransition(_ref28) {
        var classList = _ref28.classList;
        classList.remove('show');
      };
      /**
       * Alert is a component to provide contextual feedback messages for user.
       *
       * It supports several alert types and can be dismissed.
       */


      var NgbAlert = /*#__PURE__*/function () {
        function NgbAlert(config, _renderer, _element, _zone) {
          _classCallCheck2(this, NgbAlert);

          this._renderer = _renderer;
          this._element = _element;
          this._zone = _zone;
          /**
           * An event emitted when the close button is clicked. It has no payload and only relevant for dismissible alerts.
           *
           * @since 8.0.0
           */

          this.closed = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.dismissible = config.dismissible;
          this.type = config.type;
          this.animation = config.animation;
        }
        /**
         * Triggers alert closing programmatically (same as clicking on the close button (×)).
         *
         * The returned observable will emit and be completed once the closing transition has finished.
         * If the animations are turned off this happens synchronously.
         *
         * Alternatively you could listen or subscribe to the `(closed)` output
         *
         * @since 8.0.0
         */


        _createClass2(NgbAlert, [{
          key: "close",
          value: function close() {
            var _this67 = this;

            var transition = ngbRunTransition(this._zone, this._element.nativeElement, ngbAlertFadingTransition, {
              animation: this.animation,
              runningTransition: 'continue'
            });
            transition.subscribe(function () {
              return _this67.closed.emit();
            });
            return transition;
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            var typeChange = changes['type'];

            if (typeChange && !typeChange.firstChange) {
              this._renderer.removeClass(this._element.nativeElement, "alert-".concat(typeChange.previousValue));

              this._renderer.addClass(this._element.nativeElement, "alert-".concat(typeChange.currentValue));
            }
          }
        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            this._renderer.addClass(this._element.nativeElement, "alert-".concat(this.type));
          }
        }]);

        return NgbAlert;
      }();

      NgbAlert.ɵfac = function NgbAlert_Factory(t) {
        return new (t || NgbAlert)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbAlertConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]));
      };

      NgbAlert.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: NgbAlert,
        selectors: [["ngb-alert"]],
        hostAttrs: ["role", "alert", 1, "alert", "show"],
        hostVars: 4,
        hostBindings: function NgbAlert_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("fade", ctx.animation)("alert-dismissible", ctx.dismissible);
          }
        },
        inputs: {
          dismissible: "dismissible",
          type: "type",
          animation: "animation"
        },
        outputs: {
          closed: "closed"
        },
        exportAs: ["ngbAlert"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]],
        ngContentSelectors: _c3,
        decls: 2,
        vars: 1,
        consts: function consts() {
          var i18n_1;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_alert_close$$FESM2015_NG_BOOTSTRAP_JS_2 = goog.getMsg("Close");
            i18n_1 = MSG_EXTERNAL_ngb_alert_close$$FESM2015_NG_BOOTSTRAP_JS_2;
          } else {
            i18n_1 = $localize(_templateObject || (_templateObject = _taggedTemplateLiteral([":@@ngb.alert.close\u241Ff4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8\u241F7819314041543176992:Close"])));
          }

          return [["type", "button", "class", "close", "aria-label", i18n_1, 3, "click", 4, "ngIf"], ["type", "button", "aria-label", i18n_1, 1, "close", 3, "click"], ["aria-hidden", "true"]];
        },
        template: function NgbAlert_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbAlert_button_1_Template, 3, 0, "button", 0);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.dismissible);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"]],
        styles: ["ngb-alert{display:block}"],
        encapsulation: 2,
        changeDetection: 0
      });

      NgbAlert.ctorParameters = function () {
        return [{
          type: NgbAlertConfig
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }];
      };

      NgbAlert.propDecorators = {
        animation: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        dismissible: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        type: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        closed: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbAlert, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'ngb-alert',
            exportAs: 'ngbAlert',
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            host: {
              'role': 'alert',
              'class': 'alert show',
              '[class.fade]': 'animation',
              '[class.alert-dismissible]': 'dismissible'
            },
            template: "\n    <ng-content></ng-content>\n    <button *ngIf=\"dismissible\" type=\"button\" class=\"close\" aria-label=\"Close\" i18n-aria-label=\"@@ngb.alert.close\"\n      (click)=\"close()\">\n      <span aria-hidden=\"true\">&times;</span>\n    </button>\n    ",
            styles: ["ngb-alert{display:block}"]
          }]
        }], function () {
          return [{
            type: NgbAlertConfig
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }];
        }, {
          closed: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          dismissible: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          type: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          animation: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var NgbAlertModule = function NgbAlertModule() {
        _classCallCheck2(this, NgbAlertModule);
      };

      NgbAlertModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NgbAlertModule
      });
      NgbAlertModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NgbAlertModule_Factory(t) {
          return new (t || NgbAlertModule)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbAlertModule, {
          declarations: function declarations() {
            return [NgbAlert];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]];
          },
          exports: function exports() {
            return [NgbAlert];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbAlertModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            declarations: [NgbAlert],
            exports: [NgbAlert],
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]],
            entryComponents: [NgbAlert]
          }]
        }], null, null);
      })();

      var NgbButtonLabel = function NgbButtonLabel() {
        _classCallCheck2(this, NgbButtonLabel);
      };

      NgbButtonLabel.ɵfac = function NgbButtonLabel_Factory(t) {
        return new (t || NgbButtonLabel)();
      };

      NgbButtonLabel.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbButtonLabel,
        selectors: [["", "ngbButtonLabel", ""]],
        hostVars: 8,
        hostBindings: function NgbButtonLabel_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("btn", true)("active", ctx.active)("disabled", ctx.disabled)("focus", ctx.focused);
          }
        }
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbButtonLabel, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngbButtonLabel]',
            host: {
              '[class.btn]': 'true',
              '[class.active]': 'active',
              '[class.disabled]': 'disabled',
              '[class.focus]': 'focused'
            }
          }]
        }], null, null);
      })();
      /**
       * Allows to easily create Bootstrap-style checkbox buttons.
       *
       * Integrates with forms, so the value of a checked button is bound to the underlying form control
       * either in a reactive or template-driven way.
       */


      var NgbCheckBox = /*#__PURE__*/function () {
        function NgbCheckBox(_label, _cd) {
          _classCallCheck2(this, NgbCheckBox);

          this._label = _label;
          this._cd = _cd;
          /**
           * If `true`, the checkbox button will be disabled
           */

          this.disabled = false;
          /**
           * The form control value when the checkbox is checked.
           */

          this.valueChecked = true;
          /**
           * The form control value when the checkbox is unchecked.
           */

          this.valueUnChecked = false;

          this.onChange = function (_) {};

          this.onTouched = function () {};
        }

        _createClass2(NgbCheckBox, [{
          key: "focused",
          set: function set(isFocused) {
            this._label.focused = isFocused;

            if (!isFocused) {
              this.onTouched();
            }
          }
        }, {
          key: "onInputChange",
          value: function onInputChange($event) {
            var modelToPropagate = $event.target.checked ? this.valueChecked : this.valueUnChecked;
            this.onChange(modelToPropagate);
            this.onTouched();
            this.writeValue(modelToPropagate);
          }
        }, {
          key: "registerOnChange",
          value: function registerOnChange(fn) {
            this.onChange = fn;
          }
        }, {
          key: "registerOnTouched",
          value: function registerOnTouched(fn) {
            this.onTouched = fn;
          }
        }, {
          key: "setDisabledState",
          value: function setDisabledState(isDisabled) {
            this.disabled = isDisabled;
            this._label.disabled = isDisabled;
          }
        }, {
          key: "writeValue",
          value: function writeValue(value) {
            this.checked = value === this.valueChecked;
            this._label.active = this.checked; // label won't be updated, if it is inside the OnPush component when [ngModel] changes

            this._cd.markForCheck();
          }
        }]);

        return NgbCheckBox;
      }();

      NgbCheckBox.ɵfac = function NgbCheckBox_Factory(t) {
        return new (t || NgbCheckBox)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbButtonLabel), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]));
      };

      NgbCheckBox.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbCheckBox,
        selectors: [["", "ngbButton", "", "type", "checkbox"]],
        hostVars: 2,
        hostBindings: function NgbCheckBox_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function NgbCheckBox_change_HostBindingHandler($event) {
              return ctx.onInputChange($event);
            })("focus", function NgbCheckBox_focus_HostBindingHandler() {
              return ctx.focused = true;
            })("blur", function NgbCheckBox_blur_HostBindingHandler() {
              return ctx.focused = false;
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("checked", ctx.checked)("disabled", ctx.disabled);
          }
        },
        inputs: {
          disabled: "disabled",
          valueChecked: "valueChecked",
          valueUnChecked: "valueUnChecked"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALUE_ACCESSOR"],
          useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
            return NgbCheckBox;
          }),
          multi: true
        }])]
      });

      NgbCheckBox.ctorParameters = function () {
        return [{
          type: NgbButtonLabel
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }];
      };

      NgbCheckBox.propDecorators = {
        disabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        valueChecked: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        valueUnChecked: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCheckBox, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngbButton][type=checkbox]',
            host: {
              '[checked]': 'checked',
              '[disabled]': 'disabled',
              '(change)': 'onInputChange($event)',
              '(focus)': 'focused = true',
              '(blur)': 'focused = false'
            },
            providers: [{
              provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALUE_ACCESSOR"],
              useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
                return NgbCheckBox;
              }),
              multi: true
            }]
          }]
        }], function () {
          return [{
            type: NgbButtonLabel
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }];
        }, {
          disabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          valueChecked: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          valueUnChecked: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var nextId$3 = 0;
      /**
       * Allows to easily create Bootstrap-style radio buttons.
       *
       * Integrates with forms, so the value of a checked button is bound to the underlying form control
       * either in a reactive or template-driven way.
       */

      var NgbRadioGroup = /*#__PURE__*/function () {
        function NgbRadioGroup() {
          _classCallCheck2(this, NgbRadioGroup);

          this._radios = new Set();
          this._value = null;
          /**
           * Name of the radio group applied to radio input elements.
           *
           * Will be applied to all radio input elements inside the group,
           * unless [`NgbRadio`](#/components/buttons/api#NgbRadio)'s specify names themselves.
           *
           * If not provided, will be generated in the `ngb-radio-xx` format.
           */

          this.name = "ngb-radio-".concat(nextId$3++);

          this.onChange = function (_) {};

          this.onTouched = function () {};
        }

        _createClass2(NgbRadioGroup, [{
          key: "disabled",
          get: function get() {
            return this._disabled;
          },
          set: function set(isDisabled) {
            this.setDisabledState(isDisabled);
          }
        }, {
          key: "onRadioChange",
          value: function onRadioChange(radio) {
            this.writeValue(radio.value);
            this.onChange(radio.value);
          }
        }, {
          key: "onRadioValueUpdate",
          value: function onRadioValueUpdate() {
            this._updateRadiosValue();
          }
        }, {
          key: "register",
          value: function register(radio) {
            this._radios.add(radio);
          }
        }, {
          key: "registerOnChange",
          value: function registerOnChange(fn) {
            this.onChange = fn;
          }
        }, {
          key: "registerOnTouched",
          value: function registerOnTouched(fn) {
            this.onTouched = fn;
          }
        }, {
          key: "setDisabledState",
          value: function setDisabledState(isDisabled) {
            this._disabled = isDisabled;

            this._updateRadiosDisabled();
          }
        }, {
          key: "unregister",
          value: function unregister(radio) {
            this._radios["delete"](radio);
          }
        }, {
          key: "writeValue",
          value: function writeValue(value) {
            this._value = value;

            this._updateRadiosValue();
          }
        }, {
          key: "_updateRadiosValue",
          value: function _updateRadiosValue() {
            var _this68 = this;

            this._radios.forEach(function (radio) {
              return radio.updateValue(_this68._value);
            });
          }
        }, {
          key: "_updateRadiosDisabled",
          value: function _updateRadiosDisabled() {
            this._radios.forEach(function (radio) {
              return radio.updateDisabled();
            });
          }
        }]);

        return NgbRadioGroup;
      }();

      NgbRadioGroup.ɵfac = function NgbRadioGroup_Factory(t) {
        return new (t || NgbRadioGroup)();
      };

      NgbRadioGroup.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbRadioGroup,
        selectors: [["", "ngbRadioGroup", ""]],
        hostAttrs: ["role", "radiogroup"],
        inputs: {
          name: "name"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALUE_ACCESSOR"],
          useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
            return NgbRadioGroup;
          }),
          multi: true
        }])]
      });
      NgbRadioGroup.propDecorators = {
        name: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbRadioGroup, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngbRadioGroup]',
            host: {
              'role': 'radiogroup'
            },
            providers: [{
              provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALUE_ACCESSOR"],
              useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
                return NgbRadioGroup;
              }),
              multi: true
            }]
          }]
        }], function () {
          return [];
        }, {
          name: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * A directive that marks an input of type "radio" as a part of the
       * [`NgbRadioGroup`](#/components/buttons/api#NgbRadioGroup).
       */


      var NgbRadio = /*#__PURE__*/function () {
        function NgbRadio(_group, _label, _renderer, _element, _cd) {
          _classCallCheck2(this, NgbRadio);

          this._group = _group;
          this._label = _label;
          this._renderer = _renderer;
          this._element = _element;
          this._cd = _cd;
          this._value = null;

          this._group.register(this);

          this.updateDisabled();
        }
        /**
         * The form control value when current radio button is checked.
         */


        _createClass2(NgbRadio, [{
          key: "value",
          get: function get() {
            return this._value;
          },
          set: function set(value) {
            this._value = value;
            var stringValue = value ? value.toString() : '';

            this._renderer.setProperty(this._element.nativeElement, 'value', stringValue);

            this._group.onRadioValueUpdate();
          }
          /**
           * If `true`, current radio button will be disabled.
           */

        }, {
          key: "disabled",
          get: function get() {
            return this._group.disabled || this._disabled;
          },
          set: function set(isDisabled) {
            this._disabled = isDisabled !== false;
            this.updateDisabled();
          }
        }, {
          key: "focused",
          set: function set(isFocused) {
            if (this._label) {
              this._label.focused = isFocused;
            }

            if (!isFocused) {
              this._group.onTouched();
            }
          }
        }, {
          key: "checked",
          get: function get() {
            return this._checked;
          }
        }, {
          key: "nameAttr",
          get: function get() {
            return this.name || this._group.name;
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._group.unregister(this);
          }
        }, {
          key: "onChange",
          value: function onChange() {
            this._group.onRadioChange(this);
          }
        }, {
          key: "updateValue",
          value: function updateValue(value) {
            // label won't be updated, if it is inside the OnPush component when [ngModel] changes
            if (this.value !== value) {
              this._cd.markForCheck();
            }

            this._checked = this.value === value;
            this._label.active = this._checked;
          }
        }, {
          key: "updateDisabled",
          value: function updateDisabled() {
            this._label.disabled = this.disabled;
          }
        }]);

        return NgbRadio;
      }();

      NgbRadio.ɵfac = function NgbRadio_Factory(t) {
        return new (t || NgbRadio)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbRadioGroup), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbButtonLabel), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]));
      };

      NgbRadio.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbRadio,
        selectors: [["", "ngbButton", "", "type", "radio"]],
        hostVars: 3,
        hostBindings: function NgbRadio_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function NgbRadio_change_HostBindingHandler() {
              return ctx.onChange();
            })("focus", function NgbRadio_focus_HostBindingHandler() {
              return ctx.focused = true;
            })("blur", function NgbRadio_blur_HostBindingHandler() {
              return ctx.focused = false;
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("checked", ctx.checked)("disabled", ctx.disabled)("name", ctx.nameAttr);
          }
        },
        inputs: {
          value: "value",
          disabled: "disabled",
          name: "name"
        }
      });

      NgbRadio.ctorParameters = function () {
        return [{
          type: NgbRadioGroup
        }, {
          type: NgbButtonLabel
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }];
      };

      NgbRadio.propDecorators = {
        name: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        value: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['value']
        }],
        disabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['disabled']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbRadio, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngbButton][type=radio]',
            host: {
              '[checked]': 'checked',
              '[disabled]': 'disabled',
              '[name]': 'nameAttr',
              '(change)': 'onChange()',
              '(focus)': 'focused = true',
              '(blur)': 'focused = false'
            }
          }]
        }], function () {
          return [{
            type: NgbRadioGroup
          }, {
            type: NgbButtonLabel
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }];
        }, {
          value: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['value']
          }],
          disabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['disabled']
          }],
          name: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var NGB_BUTTON_DIRECTIVES = [NgbButtonLabel, NgbCheckBox, NgbRadioGroup, NgbRadio];

      var NgbButtonsModule = function NgbButtonsModule() {
        _classCallCheck2(this, NgbButtonsModule);
      };

      NgbButtonsModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NgbButtonsModule
      });
      NgbButtonsModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NgbButtonsModule_Factory(t) {
          return new (t || NgbButtonsModule)();
        }
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbButtonsModule, {
          declarations: [NgbButtonLabel, NgbCheckBox, NgbRadioGroup, NgbRadio],
          exports: [NgbButtonLabel, NgbCheckBox, NgbRadioGroup, NgbRadio]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbButtonsModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            declarations: NGB_BUTTON_DIRECTIVES,
            exports: NGB_BUTTON_DIRECTIVES
          }]
        }], null, null);
      })();
      /**
       * A configuration service for the [NgbCarousel](#/components/carousel/api#NgbCarousel) component.
       *
       * You can inject this service, typically in your root component, and customize its properties
       * to provide default values for all carousels used in the application.
       */


      var NgbCarouselConfig = /*#__PURE__*/function () {
        function NgbCarouselConfig(_ngbConfig) {
          _classCallCheck2(this, NgbCarouselConfig);

          this._ngbConfig = _ngbConfig;
          this.interval = 5000;
          this.wrap = true;
          this.keyboard = true;
          this.pauseOnHover = true;
          this.pauseOnFocus = true;
          this.showNavigationArrows = true;
          this.showNavigationIndicators = true;
        }

        _createClass2(NgbCarouselConfig, [{
          key: "animation",
          get: function get() {
            return this._animation === undefined ? this._ngbConfig.animation : this._animation;
          },
          set: function set(animation) {
            this._animation = animation;
          }
        }]);

        return NgbCarouselConfig;
      }();

      NgbCarouselConfig.ɵfac = function NgbCarouselConfig_Factory(t) {
        return new (t || NgbCarouselConfig)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig));
      };

      NgbCarouselConfig.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function NgbCarouselConfig_Factory() {
          return new NgbCarouselConfig(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig));
        },
        token: NgbCarouselConfig,
        providedIn: "root"
      });

      NgbCarouselConfig.ctorParameters = function () {
        return [{
          type: NgbConfig
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCarouselConfig, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: NgbConfig
          }];
        }, null);
      })();
      /**
       * Defines the carousel slide transition direction.
       */


      var NgbSlideEventDirection;

      (function (NgbSlideEventDirection) {
        NgbSlideEventDirection["LEFT"] = "left";
        NgbSlideEventDirection["RIGHT"] = "right";
      })(NgbSlideEventDirection || (NgbSlideEventDirection = {}));

      var isBeingAnimated = function isBeingAnimated(_ref29) {
        var classList = _ref29.classList;
        return classList.contains('carousel-item-left') || classList.contains('carousel-item-right');
      };

      var ɵ0$4 = isBeingAnimated;

      var removeDirectionClasses = function removeDirectionClasses(classList) {
        classList.remove('carousel-item-left');
        classList.remove('carousel-item-right');
      };

      var ɵ1$1 = removeDirectionClasses;

      var removeClasses = function removeClasses(classList) {
        removeDirectionClasses(classList);
        classList.remove('carousel-item-prev');
        classList.remove('carousel-item-next');
      };

      var ɵ2$1 = removeClasses;

      var ngbCarouselTransitionIn = function ngbCarouselTransitionIn(element, animation, _ref30) {
        var direction = _ref30.direction;
        var classList = element.classList;

        if (!animation) {
          removeDirectionClasses(classList);
          removeClasses(classList);
          classList.add('active');
          return;
        }

        if (isBeingAnimated(element)) {
          // Revert the transition
          removeDirectionClasses(classList);
        } else {
          // For the 'in' transition, a 'pre-class' is applied to the element to ensure its visibility
          classList.add('carousel-item-' + (direction === NgbSlideEventDirection.LEFT ? 'next' : 'prev'));
          reflow(element);
          classList.add('carousel-item-' + direction);
        }

        return function () {
          removeClasses(classList);
          classList.add('active');
        };
      };

      var ngbCarouselTransitionOut = function ngbCarouselTransitionOut(element, animation, _ref31) {
        var direction = _ref31.direction;
        var classList = element.classList;

        if (!animation) {
          removeDirectionClasses(classList);
          removeClasses(classList);
          classList.remove('active');
          return;
        } //  direction is left or right, depending on the way the slide goes out.


        if (isBeingAnimated(element)) {
          // Revert the transition
          removeDirectionClasses(classList);
        } else {
          classList.add('carousel-item-' + direction);
        }

        return function () {
          removeClasses(classList);
          classList.remove('active');
        };
      };

      var nextId$2 = 0;
      /**
       * A directive that wraps the individual carousel slide.
       */

      var NgbSlide = function NgbSlide(tplRef) {
        _classCallCheck2(this, NgbSlide);

        this.tplRef = tplRef;
        /**
         * Slide id that must be unique for the entire document.
         *
         * If not provided, will be generated in the `ngb-slide-xx` format.
         */

        this.id = "ngb-slide-".concat(nextId$2++);
        /**
         * An event emitted when the slide transition is finished
         *
         * @since 8.0.0
         */

        this.slid = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
      };

      NgbSlide.ɵfac = function NgbSlide_Factory(t) {
        return new (t || NgbSlide)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]));
      };

      NgbSlide.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbSlide,
        selectors: [["ng-template", "ngbSlide", ""]],
        inputs: {
          id: "id"
        },
        outputs: {
          slid: "slid"
        }
      });

      NgbSlide.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }];
      };

      NgbSlide.propDecorators = {
        id: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        slid: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbSlide, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'ng-template[ngbSlide]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }];
        }, {
          id: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          slid: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }]
        });
      })();
      /**
       * Carousel is a component to easily create and control slideshows.
       *
       * Allows to set intervals, change the way user interacts with the slides and provides a programmatic API.
       */


      var NgbCarousel = /*#__PURE__*/function () {
        function NgbCarousel(config, _platformId, _ngZone, _cd, _container) {
          _classCallCheck2(this, NgbCarousel);

          this._platformId = _platformId;
          this._ngZone = _ngZone;
          this._cd = _cd;
          this._container = _container;
          this.NgbSlideEventSource = NgbSlideEventSource;
          this._destroy$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          this._interval$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](0);
          this._mouseHover$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](false);
          this._focused$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](false);
          this._pauseOnHover$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](false);
          this._pauseOnFocus$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](false);
          this._pause$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](false);
          this._wrap$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](false);
          /**
           * An event emitted just before the slide transition starts.
           *
           * See [`NgbSlideEvent`](#/components/carousel/api#NgbSlideEvent) for payload details.
           */

          this.slide = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * An event emitted right after the slide transition is completed.
           *
           * See [`NgbSlideEvent`](#/components/carousel/api#NgbSlideEvent) for payload details.
           *
           * @since 8.0.0
           */

          this.slid = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /*
           * Keep the ids of the panels currently transitionning
           * in order to allow only the transition revertion
           */

          this._transitionIds = null;
          this.animation = config.animation;
          this.interval = config.interval;
          this.wrap = config.wrap;
          this.keyboard = config.keyboard;
          this.pauseOnHover = config.pauseOnHover;
          this.pauseOnFocus = config.pauseOnFocus;
          this.showNavigationArrows = config.showNavigationArrows;
          this.showNavigationIndicators = config.showNavigationIndicators;
        }
        /**
         * Time in milliseconds before the next slide is shown.
         */


        _createClass2(NgbCarousel, [{
          key: "interval",
          get: function get() {
            return this._interval$.value;
          }
          /**
           * If `true`, will 'wrap' the carousel by switching from the last slide back to the first.
           */
          ,
          set: function set(value) {
            this._interval$.next(value);
          }
        }, {
          key: "wrap",
          get: function get() {
            return this._wrap$.value;
          }
          /**
           * If `true`, will pause slide switching when mouse cursor hovers the slide.
           *
           * @since 2.2.0
           */
          ,
          set: function set(value) {
            this._wrap$.next(value);
          }
        }, {
          key: "pauseOnHover",
          get: function get() {
            return this._pauseOnHover$.value;
          }
          /**
           * If `true`, will pause slide switching when the focus is inside the carousel.
           */
          ,
          set: function set(value) {
            this._pauseOnHover$.next(value);
          }
        }, {
          key: "pauseOnFocus",
          get: function get() {
            return this._pauseOnFocus$.value;
          },
          set: function set(value) {
            this._pauseOnFocus$.next(value);
          }
        }, {
          key: "mouseHover",
          get: function get() {
            return this._mouseHover$.value;
          },
          set: function set(value) {
            this._mouseHover$.next(value);
          }
        }, {
          key: "focused",
          get: function get() {
            return this._focused$.value;
          },
          set: function set(value) {
            this._focused$.next(value);
          }
        }, {
          key: "arrowLeft",
          value: function arrowLeft() {
            this.focus();
            this.prev(NgbSlideEventSource.ARROW_LEFT);
          }
        }, {
          key: "arrowRight",
          value: function arrowRight() {
            this.focus();
            this.next(NgbSlideEventSource.ARROW_RIGHT);
          }
        }, {
          key: "ngAfterContentInit",
          value: function ngAfterContentInit() {
            var _this69 = this;

            // setInterval() doesn't play well with SSR and protractor,
            // so we should run it in the browser and outside Angular
            if (Object(_angular_common__WEBPACK_IMPORTED_MODULE_1__["isPlatformBrowser"])(this._platformId)) {
              this._ngZone.runOutsideAngular(function () {
                var hasNextSlide$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["combineLatest"])([_this69.slide.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (slideEvent) {
                  return slideEvent.current;
                }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["startWith"])(_this69.activeId)), _this69._wrap$, _this69.slides.changes.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["startWith"])(null))]).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_ref32) {
                  var _ref33 = _slicedToArray(_ref32, 2),
                      currentSlideId = _ref33[0],
                      wrap = _ref33[1];

                  var slideArr = _this69.slides.toArray();

                  var currentSlideIdx = _this69._getSlideIdxById(currentSlideId);

                  return wrap ? slideArr.length > 1 : currentSlideIdx < slideArr.length - 1;
                }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["distinctUntilChanged"])());
                Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["combineLatest"])([_this69._pause$, _this69._pauseOnHover$, _this69._mouseHover$, _this69._pauseOnFocus$, _this69._focused$, _this69._interval$, hasNextSlide$]).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_ref34) {
                  var _ref35 = _slicedToArray(_ref34, 7),
                      pause = _ref35[0],
                      pauseOnHover = _ref35[1],
                      mouseHover = _ref35[2],
                      pauseOnFocus = _ref35[3],
                      focused = _ref35[4],
                      interval = _ref35[5],
                      hasNextSlide = _ref35[6];

                  return pause || pauseOnHover && mouseHover || pauseOnFocus && focused || !hasNextSlide ? 0 : interval;
                }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["distinctUntilChanged"])(), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(function (interval) {
                  return interval > 0 ? Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["timer"])(interval, interval) : rxjs__WEBPACK_IMPORTED_MODULE_2__["NEVER"];
                }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(_this69._destroy$)).subscribe(function () {
                  return _this69._ngZone.run(function () {
                    return _this69.next(NgbSlideEventSource.TIMER);
                  });
                });
              });
            }

            this.slides.changes.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this._destroy$)).subscribe(function () {
              var _a;

              (_a = _this69._transitionIds) === null || _a === void 0 ? void 0 : _a.forEach(function (id) {
                return ngbCompleteTransition(_this69._getSlideElement(id));
              });
              _this69._transitionIds = null;

              _this69._cd.markForCheck(); // The following code need to be done asynchronously, after the dom becomes stable,
              // otherwise all changes will be undone.


              _this69._ngZone.onStable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1)).subscribe(function () {
                var _iterator5 = _createForOfIteratorHelper(_this69.slides),
                    _step5;

                try {
                  for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
                    var id = _step5.value.id;

                    var element = _this69._getSlideElement(id);

                    if (id === _this69.activeId) {
                      element.classList.add('active');
                    } else {
                      element.classList.remove('active');
                    }
                  }
                } catch (err) {
                  _iterator5.e(err);
                } finally {
                  _iterator5.f();
                }
              });
            });
          }
        }, {
          key: "ngAfterContentChecked",
          value: function ngAfterContentChecked() {
            var activeSlide = this._getSlideById(this.activeId);

            this.activeId = activeSlide ? activeSlide.id : this.slides.length ? this.slides.first.id : '';
          }
        }, {
          key: "ngAfterViewInit",
          value: function ngAfterViewInit() {
            // Initialize the 'active' class (not managed by the template)
            if (this.activeId) {
              var element = this._getSlideElement(this.activeId);

              if (element) {
                element.classList.add('active');
              }
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._destroy$.next();
          }
          /**
           * Navigates to a slide with the specified identifier.
           */

        }, {
          key: "select",
          value: function select(slideId, source) {
            this._cycleToSelected(slideId, this._getSlideEventDirection(this.activeId, slideId), source);
          }
          /**
           * Navigates to the previous slide.
           */

        }, {
          key: "prev",
          value: function prev(source) {
            this._cycleToSelected(this._getPrevSlide(this.activeId), NgbSlideEventDirection.RIGHT, source);
          }
          /**
           * Navigates to the next slide.
           */

        }, {
          key: "next",
          value: function next(source) {
            this._cycleToSelected(this._getNextSlide(this.activeId), NgbSlideEventDirection.LEFT, source);
          }
          /**
           * Pauses cycling through the slides.
           */

        }, {
          key: "pause",
          value: function pause() {
            this._pause$.next(true);
          }
          /**
           * Restarts cycling through the slides from left to right.
           */

        }, {
          key: "cycle",
          value: function cycle() {
            this._pause$.next(false);
          }
          /**
           * Set the focus on the carousel.
           */

        }, {
          key: "focus",
          value: function focus() {
            this._container.nativeElement.focus();
          }
        }, {
          key: "_cycleToSelected",
          value: function _cycleToSelected(slideIdx, direction, source) {
            var _this70 = this;

            var transitionIds = this._transitionIds;

            if (transitionIds && (transitionIds[0] !== slideIdx || transitionIds[1] !== this.activeId)) {
              // Revert prevented
              return;
            }

            var selectedSlide = this._getSlideById(slideIdx);

            if (selectedSlide && selectedSlide.id !== this.activeId) {
              this._transitionIds = [this.activeId, slideIdx];
              this.slide.emit({
                prev: this.activeId,
                current: selectedSlide.id,
                direction: direction,
                paused: this._pause$.value,
                source: source
              });
              var options = {
                animation: this.animation,
                runningTransition: 'stop',
                context: {
                  direction: direction
                }
              };
              var transitions = [];

              var activeSlide = this._getSlideById(this.activeId);

              if (activeSlide) {
                var activeSlideTransition = ngbRunTransition(this._ngZone, this._getSlideElement(activeSlide.id), ngbCarouselTransitionOut, options);
                activeSlideTransition.subscribe(function () {
                  activeSlide.slid.emit({
                    isShown: false,
                    direction: direction,
                    source: source
                  });
                });
                transitions.push(activeSlideTransition);
              }

              var previousId = this.activeId;
              this.activeId = selectedSlide.id;

              var nextSlide = this._getSlideById(this.activeId);

              var transition = ngbRunTransition(this._ngZone, this._getSlideElement(selectedSlide.id), ngbCarouselTransitionIn, options);
              transition.subscribe(function () {
                nextSlide === null || nextSlide === void 0 ? void 0 : nextSlide.slid.emit({
                  isShown: true,
                  direction: direction,
                  source: source
                });
              });
              transitions.push(transition);
              Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["zip"]).apply(void 0, transitions).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1)).subscribe(function () {
                _this70._transitionIds = null;

                _this70.slid.emit({
                  prev: previousId,
                  current: selectedSlide.id,
                  direction: direction,
                  paused: _this70._pause$.value,
                  source: source
                });
              });
            } // we get here after the interval fires or any external API call like next(), prev() or select()


            this._cd.markForCheck();
          }
        }, {
          key: "_getSlideEventDirection",
          value: function _getSlideEventDirection(currentActiveSlideId, nextActiveSlideId) {
            var currentActiveSlideIdx = this._getSlideIdxById(currentActiveSlideId);

            var nextActiveSlideIdx = this._getSlideIdxById(nextActiveSlideId);

            return currentActiveSlideIdx > nextActiveSlideIdx ? NgbSlideEventDirection.RIGHT : NgbSlideEventDirection.LEFT;
          }
        }, {
          key: "_getSlideById",
          value: function _getSlideById(slideId) {
            return this.slides.find(function (slide) {
              return slide.id === slideId;
            }) || null;
          }
        }, {
          key: "_getSlideIdxById",
          value: function _getSlideIdxById(slideId) {
            var slide = this._getSlideById(slideId);

            return slide != null ? this.slides.toArray().indexOf(slide) : -1;
          }
        }, {
          key: "_getNextSlide",
          value: function _getNextSlide(currentSlideId) {
            var slideArr = this.slides.toArray();

            var currentSlideIdx = this._getSlideIdxById(currentSlideId);

            var isLastSlide = currentSlideIdx === slideArr.length - 1;
            return isLastSlide ? this.wrap ? slideArr[0].id : slideArr[slideArr.length - 1].id : slideArr[currentSlideIdx + 1].id;
          }
        }, {
          key: "_getPrevSlide",
          value: function _getPrevSlide(currentSlideId) {
            var slideArr = this.slides.toArray();

            var currentSlideIdx = this._getSlideIdxById(currentSlideId);

            var isFirstSlide = currentSlideIdx === 0;
            return isFirstSlide ? this.wrap ? slideArr[slideArr.length - 1].id : slideArr[0].id : slideArr[currentSlideIdx - 1].id;
          }
        }, {
          key: "_getSlideElement",
          value: function _getSlideElement(slideId) {
            return this._container.nativeElement.querySelector("#slide-".concat(slideId));
          }
        }]);

        return NgbCarousel;
      }();

      NgbCarousel.ɵfac = function NgbCarousel_Factory(t) {
        return new (t || NgbCarousel)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbCarouselConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]));
      };

      NgbCarousel.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: NgbCarousel,
        selectors: [["ngb-carousel"]],
        contentQueries: function NgbCarousel_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbSlide, 0);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.slides = _t);
          }
        },
        hostAttrs: ["tabIndex", "0", 1, "carousel", "slide"],
        hostVars: 3,
        hostBindings: function NgbCarousel_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("keydown.arrowLeft", function NgbCarousel_keydown_arrowLeft_HostBindingHandler() {
              return ctx.keyboard && ctx.arrowLeft();
            })("keydown.arrowRight", function NgbCarousel_keydown_arrowRight_HostBindingHandler() {
              return ctx.keyboard && ctx.arrowRight();
            })("mouseenter", function NgbCarousel_mouseenter_HostBindingHandler() {
              return ctx.mouseHover = true;
            })("mouseleave", function NgbCarousel_mouseleave_HostBindingHandler() {
              return ctx.mouseHover = false;
            })("focusin", function NgbCarousel_focusin_HostBindingHandler() {
              return ctx.focused = true;
            })("focusout", function NgbCarousel_focusout_HostBindingHandler() {
              return ctx.focused = false;
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-activedescendant", "slide-" + ctx.activeId);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("display", "block");
          }
        },
        inputs: {
          animation: "animation",
          interval: "interval",
          wrap: "wrap",
          keyboard: "keyboard",
          pauseOnHover: "pauseOnHover",
          pauseOnFocus: "pauseOnFocus",
          showNavigationArrows: "showNavigationArrows",
          showNavigationIndicators: "showNavigationIndicators",
          activeId: "activeId"
        },
        outputs: {
          slide: "slide",
          slid: "slid"
        },
        exportAs: ["ngbCarousel"],
        decls: 6,
        vars: 6,
        consts: function consts() {
          var i18n_4;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            /**
             * @desc Currently selected slide number read by screen reader
             */
            var MSG_EXTERNAL_ngb_carousel_slide_number$$FESM2015_NG_BOOTSTRAP_JS__5 = goog.getMsg(" Slide {$interpolation} of {$interpolation_1} ", {
              "interpolation": "\uFFFD0\uFFFD",
              "interpolation_1": "\uFFFD1\uFFFD"
            });
            i18n_4 = MSG_EXTERNAL_ngb_carousel_slide_number$$FESM2015_NG_BOOTSTRAP_JS__5;
          } else {
            i18n_4 = $localize(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral([":Currently selected slide number read by screen reader@@ngb.carousel.slide-number\u241Fa65b1b49aa7dd8c4f3004da6a8c2241814dae621\u241F783273603869937627: Slide ", ":INTERPOLATION: of ", ":INTERPOLATION_1: "])), "\uFFFD0\uFFFD", "\uFFFD1\uFFFD");
          }

          var i18n_6;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_carousel_previous$$FESM2015_NG_BOOTSTRAP_JS__7 = goog.getMsg("Previous");
            i18n_6 = MSG_EXTERNAL_ngb_carousel_previous$$FESM2015_NG_BOOTSTRAP_JS__7;
          } else {
            i18n_6 = $localize(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral([":@@ngb.carousel.previous\u241F680d5c75b7fd8d37961083608b9fcdc4167b4c43\u241F4452427314943113135:Previous"])));
          }

          var i18n_8;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_carousel_next$$FESM2015_NG_BOOTSTRAP_JS__9 = goog.getMsg("Next");
            i18n_8 = MSG_EXTERNAL_ngb_carousel_next$$FESM2015_NG_BOOTSTRAP_JS__9;
          } else {
            i18n_8 = $localize(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral([":@@ngb.carousel.next\u241Ff732c304c7433e5a83ffcd862c3dce709a0f4982\u241F3885497195825665706:Next"])));
          }

          return [["role", "tablist", 1, "carousel-indicators"], ["role", "tab", 3, "active", "click", 4, "ngFor", "ngForOf"], [1, "carousel-inner"], ["class", "carousel-item", "role", "tabpanel", 3, "id", 4, "ngFor", "ngForOf"], ["class", "carousel-control-prev", "role", "button", 3, "click", 4, "ngIf"], ["class", "carousel-control-next", "role", "button", 3, "click", 4, "ngIf"], ["role", "tab", 3, "click"], ["role", "tabpanel", 1, "carousel-item", 3, "id"], [1, "sr-only"], i18n_4, [3, "ngTemplateOutlet"], ["role", "button", 1, "carousel-control-prev", 3, "click"], ["aria-hidden", "true", 1, "carousel-control-prev-icon"], i18n_6, ["role", "button", 1, "carousel-control-next", 3, "click"], ["aria-hidden", "true", 1, "carousel-control-next-icon"], i18n_8];
        },
        template: function NgbCarousel_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "ol", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbCarousel_li_1_Template, 1, 5, "li", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "div", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgbCarousel_div_3_Template, 4, 4, "div", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](4, NgbCarousel_a_4_Template, 4, 0, "a", 4);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](5, NgbCarousel_a_5_Template, 4, 0, "a", 5);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("sr-only", !ctx.showNavigationIndicators);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.slides);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.slides);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.showNavigationArrows);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.showNavigationArrows);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"]],
        encapsulation: 2,
        changeDetection: 0
      });

      NgbCarousel.ctorParameters = function () {
        return [{
          type: NgbCarouselConfig
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }];
      };

      NgbCarousel.propDecorators = {
        slides: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
          args: [NgbSlide]
        }],
        animation: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        activeId: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        interval: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        wrap: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        keyboard: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        pauseOnHover: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        pauseOnFocus: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        showNavigationArrows: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        showNavigationIndicators: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        slide: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        slid: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCarousel, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'ngb-carousel',
            exportAs: 'ngbCarousel',
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            host: {
              'class': 'carousel slide',
              '[style.display]': '"block"',
              'tabIndex': '0',
              '(keydown.arrowLeft)': 'keyboard && arrowLeft()',
              '(keydown.arrowRight)': 'keyboard && arrowRight()',
              '(mouseenter)': 'mouseHover = true',
              '(mouseleave)': 'mouseHover = false',
              '(focusin)': 'focused = true',
              '(focusout)': 'focused = false',
              '[attr.aria-activedescendant]': "'slide-' + activeId"
            },
            template: "\n    <ol class=\"carousel-indicators\" [class.sr-only]=\"!showNavigationIndicators\" role=\"tablist\">\n      <li *ngFor=\"let slide of slides\" [class.active]=\"slide.id === activeId\"\n          role=\"tab\" [attr.aria-labelledby]=\"'slide-' + slide.id\" [attr.aria-controls]=\"'slide-' + slide.id\"\n          [attr.aria-selected]=\"slide.id === activeId\"\n          (click)=\"focus();select(slide.id, NgbSlideEventSource.INDICATOR);\"></li>\n    </ol>\n    <div class=\"carousel-inner\">\n      <div *ngFor=\"let slide of slides; index as i; count as c\" class=\"carousel-item\" [id]=\"'slide-' + slide.id\" role=\"tabpanel\">\n        <span class=\"sr-only\" i18n=\"Currently selected slide number read by screen reader@@ngb.carousel.slide-number\">\n          Slide {{i + 1}} of {{c}}\n        </span>\n        <ng-template [ngTemplateOutlet]=\"slide.tplRef\"></ng-template>\n      </div>\n    </div>\n    <a class=\"carousel-control-prev\" role=\"button\" (click)=\"arrowLeft()\" *ngIf=\"showNavigationArrows\">\n      <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n      <span class=\"sr-only\" i18n=\"@@ngb.carousel.previous\">Previous</span>\n    </a>\n    <a class=\"carousel-control-next\" role=\"button\" (click)=\"arrowRight()\" *ngIf=\"showNavigationArrows\">\n      <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n      <span class=\"sr-only\" i18n=\"@@ngb.carousel.next\">Next</span>\n    </a>\n  "
          }]
        }], function () {
          return [{
            type: NgbCarouselConfig
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }];
        }, {
          slide: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          slid: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          animation: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          interval: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          wrap: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          keyboard: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          pauseOnHover: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          pauseOnFocus: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          showNavigationArrows: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          showNavigationIndicators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          activeId: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          slides: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
            args: [NgbSlide]
          }]
        });
      })();

      var NgbSlideEventSource;

      (function (NgbSlideEventSource) {
        NgbSlideEventSource["TIMER"] = "timer";
        NgbSlideEventSource["ARROW_LEFT"] = "arrowLeft";
        NgbSlideEventSource["ARROW_RIGHT"] = "arrowRight";
        NgbSlideEventSource["INDICATOR"] = "indicator";
      })(NgbSlideEventSource || (NgbSlideEventSource = {}));

      var NGB_CAROUSEL_DIRECTIVES = [NgbCarousel, NgbSlide];

      var NgbCarouselModule = function NgbCarouselModule() {
        _classCallCheck2(this, NgbCarouselModule);
      };

      NgbCarouselModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NgbCarouselModule
      });
      NgbCarouselModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NgbCarouselModule_Factory(t) {
          return new (t || NgbCarouselModule)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbCarouselModule, {
          declarations: function declarations() {
            return [NgbCarousel, NgbSlide];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]];
          },
          exports: function exports() {
            return [NgbCarousel, NgbSlide];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCarouselModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            declarations: NGB_CAROUSEL_DIRECTIVES,
            exports: NGB_CAROUSEL_DIRECTIVES,
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]
          }]
        }], null, null);
      })();
      /**
       * A configuration service for the [NgbCollapse](#/components/collapse/api#NgbCollapse) component.
       *
       * You can inject this service, typically in your root component, and customize its properties
       * to provide default values for all collapses used in the application.
       */


      var NgbCollapseConfig = /*#__PURE__*/function () {
        function NgbCollapseConfig(_ngbConfig) {
          _classCallCheck2(this, NgbCollapseConfig);

          this._ngbConfig = _ngbConfig;
        }

        _createClass2(NgbCollapseConfig, [{
          key: "animation",
          get: function get() {
            return this._animation === undefined ? this._ngbConfig.animation : this._animation;
          },
          set: function set(animation) {
            this._animation = animation;
          }
        }]);

        return NgbCollapseConfig;
      }();

      NgbCollapseConfig.ɵfac = function NgbCollapseConfig_Factory(t) {
        return new (t || NgbCollapseConfig)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig));
      };

      NgbCollapseConfig.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function NgbCollapseConfig_Factory() {
          return new NgbCollapseConfig(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig));
        },
        token: NgbCollapseConfig,
        providedIn: "root"
      });

      NgbCollapseConfig.ctorParameters = function () {
        return [{
          type: NgbConfig
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCollapseConfig, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: NgbConfig
          }];
        }, null);
      })();
      /**
       * A directive to provide a simple way of hiding and showing elements on the page.
       */


      var NgbCollapse = /*#__PURE__*/function () {
        function NgbCollapse(_element, config, _zone) {
          _classCallCheck2(this, NgbCollapse);

          this._element = _element;
          this._zone = _zone;
          /**
           * If `true`, will collapse the element or show it otherwise.
           */

          this.collapsed = false;
          this.ngbCollapseChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * An event emitted when the collapse element is shown, after the transition. It has no payload.
           *
           * @since 8.0.0
           */

          this.shown = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * An event emitted when the collapse element is hidden, after the transition. It has no payload.
           *
           * @since 8.0.0
           */

          this.hidden = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.animation = config.animation;
        }

        _createClass2(NgbCollapse, [{
          key: "ngOnInit",
          value: function ngOnInit() {
            this._runTransition(this.collapsed, false);
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(_ref36) {
            var collapsed = _ref36.collapsed;

            if (!collapsed.firstChange) {
              this._runTransitionWithEvents(this.collapsed, this.animation);
            }
          }
          /**
           * Triggers collapsing programmatically.
           *
           * If there is a collapsing transition running already, it will be reversed.
           * If the animations are turned off this happens synchronously.
           *
           * @since 8.0.0
           */

        }, {
          key: "toggle",
          value: function toggle() {
            var open = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.collapsed;
            this.collapsed = !open;
            this.ngbCollapseChange.next(this.collapsed);

            this._runTransitionWithEvents(this.collapsed, this.animation);
          }
        }, {
          key: "_runTransition",
          value: function _runTransition(collapsed, animation) {
            return ngbRunTransition(this._zone, this._element.nativeElement, ngbCollapsingTransition, {
              animation: animation,
              runningTransition: 'stop',
              context: {
                direction: collapsed ? 'hide' : 'show'
              }
            });
          }
        }, {
          key: "_runTransitionWithEvents",
          value: function _runTransitionWithEvents(collapsed, animation) {
            var _this71 = this;

            this._runTransition(collapsed, animation).subscribe(function () {
              if (collapsed) {
                _this71.hidden.emit();
              } else {
                _this71.shown.emit();
              }
            });
          }
        }]);

        return NgbCollapse;
      }();

      NgbCollapse.ɵfac = function NgbCollapse_Factory(t) {
        return new (t || NgbCollapse)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbCollapseConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]));
      };

      NgbCollapse.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbCollapse,
        selectors: [["", "ngbCollapse", ""]],
        inputs: {
          collapsed: ["ngbCollapse", "collapsed"],
          animation: "animation"
        },
        outputs: {
          ngbCollapseChange: "ngbCollapseChange",
          shown: "shown",
          hidden: "hidden"
        },
        exportAs: ["ngbCollapse"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
      });

      NgbCollapse.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: NgbCollapseConfig
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }];
      };

      NgbCollapse.propDecorators = {
        animation: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        collapsed: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['ngbCollapse']
        }],
        ngbCollapseChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        shown: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        hidden: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCollapse, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngbCollapse]',
            exportAs: 'ngbCollapse'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: NgbCollapseConfig
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }];
        }, {
          collapsed: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['ngbCollapse']
          }],
          ngbCollapseChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          shown: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          hidden: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          animation: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var NgbCollapseModule = function NgbCollapseModule() {
        _classCallCheck2(this, NgbCollapseModule);
      };

      NgbCollapseModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NgbCollapseModule
      });
      NgbCollapseModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NgbCollapseModule_Factory(t) {
          return new (t || NgbCollapseModule)();
        }
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbCollapseModule, {
          declarations: [NgbCollapse],
          exports: [NgbCollapse]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCollapseModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            declarations: [NgbCollapse],
            exports: [NgbCollapse]
          }]
        }], null, null);
      })();
      /**
       * A simple class that represents a date that datepicker also uses internally.
       *
       * It is the implementation of the `NgbDateStruct` interface that adds some convenience methods,
       * like `.equals()`, `.before()`, etc.
       *
       * All datepicker APIs consume `NgbDateStruct`, but return `NgbDate`.
       *
       * In many cases it is simpler to manipulate these objects together with
       * [`NgbCalendar`](#/components/datepicker/api#NgbCalendar) than native JS Dates.
       *
       * See the [date format overview](#/components/datepicker/overview#date-model) for more details.
       *
       * @since 3.0.0
       */


      var NgbDate = /*#__PURE__*/function () {
        function NgbDate(year, month, day) {
          _classCallCheck2(this, NgbDate);

          this.year = isInteger(year) ? year : null;
          this.month = isInteger(month) ? month : null;
          this.day = isInteger(day) ? day : null;
        }
        /**
         * A **static method** that creates a new date object from the `NgbDateStruct`,
         *
         * ex. `NgbDate.from({year: 2000, month: 5, day: 1})`.
         *
         * If the `date` is already of `NgbDate` type, the method will return the same object.
         */


        _createClass2(NgbDate, [{
          key: "equals",
          value:
          /**
           * Checks if the current date is equal to another date.
           */
          function equals(other) {
            return other != null && this.year === other.year && this.month === other.month && this.day === other.day;
          }
          /**
           * Checks if the current date is before another date.
           */

        }, {
          key: "before",
          value: function before(other) {
            if (!other) {
              return false;
            }

            if (this.year === other.year) {
              if (this.month === other.month) {
                return this.day === other.day ? false : this.day < other.day;
              } else {
                return this.month < other.month;
              }
            } else {
              return this.year < other.year;
            }
          }
          /**
           * Checks if the current date is after another date.
           */

        }, {
          key: "after",
          value: function after(other) {
            if (!other) {
              return false;
            }

            if (this.year === other.year) {
              if (this.month === other.month) {
                return this.day === other.day ? false : this.day > other.day;
              } else {
                return this.month > other.month;
              }
            } else {
              return this.year > other.year;
            }
          }
        }], [{
          key: "from",
          value: function from(date) {
            if (date instanceof NgbDate) {
              return date;
            }

            return date ? new NgbDate(date.year, date.month, date.day) : null;
          }
        }]);

        return NgbDate;
      }();

      function fromJSDate(jsDate) {
        return new NgbDate(jsDate.getFullYear(), jsDate.getMonth() + 1, jsDate.getDate());
      }

      function toJSDate(date) {
        var jsDate = new Date(date.year, date.month - 1, date.day, 12); // this is done avoid 30 -> 1930 conversion

        if (!isNaN(jsDate.getTime())) {
          jsDate.setFullYear(date.year);
        }

        return jsDate;
      }

      function NGB_DATEPICKER_CALENDAR_FACTORY() {
        return new NgbCalendarGregorian();
      }
      /**
       * A service that represents the calendar used by the datepicker.
       *
       * The default implementation uses the Gregorian calendar. You can inject it in your own
       * implementations if necessary to simplify `NgbDate` calculations.
       */


      var NgbCalendar = function NgbCalendar() {
        _classCallCheck2(this, NgbCalendar);
      };

      NgbCalendar.ɵfac = function NgbCalendar_Factory(t) {
        return new (t || NgbCalendar)();
      };

      NgbCalendar.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: NGB_DATEPICKER_CALENDAR_FACTORY,
        token: NgbCalendar,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCalendar, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root',
            useFactory: NGB_DATEPICKER_CALENDAR_FACTORY
          }]
        }], null, null);
      })();

      var NgbCalendarGregorian = /*#__PURE__*/function (_NgbCalendar) {
        _inherits2(NgbCalendarGregorian, _NgbCalendar);

        var _super41 = _createSuper(NgbCalendarGregorian);

        function NgbCalendarGregorian() {
          _classCallCheck2(this, NgbCalendarGregorian);

          return _super41.apply(this, arguments);
        }

        _createClass2(NgbCalendarGregorian, [{
          key: "getDaysPerWeek",
          value: function getDaysPerWeek() {
            return 7;
          }
        }, {
          key: "getMonths",
          value: function getMonths() {
            return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
          }
        }, {
          key: "getWeeksPerMonth",
          value: function getWeeksPerMonth() {
            return 6;
          }
        }, {
          key: "getNext",
          value: function getNext(date) {
            var period = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'd';
            var number = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
            var jsDate = toJSDate(date);
            var checkMonth = true;
            var expectedMonth = jsDate.getMonth();

            switch (period) {
              case 'y':
                jsDate.setFullYear(jsDate.getFullYear() + number);
                break;

              case 'm':
                expectedMonth += number;
                jsDate.setMonth(expectedMonth);
                expectedMonth = expectedMonth % 12;

                if (expectedMonth < 0) {
                  expectedMonth = expectedMonth + 12;
                }

                break;

              case 'd':
                jsDate.setDate(jsDate.getDate() + number);
                checkMonth = false;
                break;

              default:
                return date;
            }

            if (checkMonth && jsDate.getMonth() !== expectedMonth) {
              // this means the destination month has less days than the initial month
              // let's go back to the end of the previous month:
              jsDate.setDate(0);
            }

            return fromJSDate(jsDate);
          }
        }, {
          key: "getPrev",
          value: function getPrev(date) {
            var period = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'd';
            var number = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
            return this.getNext(date, period, -number);
          }
        }, {
          key: "getWeekday",
          value: function getWeekday(date) {
            var jsDate = toJSDate(date);
            var day = jsDate.getDay(); // in JS Date Sun=0, in ISO 8601 Sun=7

            return day === 0 ? 7 : day;
          }
        }, {
          key: "getWeekNumber",
          value: function getWeekNumber(week, firstDayOfWeek) {
            // in JS Date Sun=0, in ISO 8601 Sun=7
            if (firstDayOfWeek === 7) {
              firstDayOfWeek = 0;
            }

            var thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;
            var date = week[thursdayIndex];
            var jsDate = toJSDate(date);
            jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday

            var time = jsDate.getTime();
            jsDate.setMonth(0); // Compare with Jan 1

            jsDate.setDate(1);
            return Math.floor(Math.round((time - jsDate.getTime()) / 86400000) / 7) + 1;
          }
        }, {
          key: "getToday",
          value: function getToday() {
            return fromJSDate(new Date());
          }
        }, {
          key: "isValid",
          value: function isValid(date) {
            if (!date || !isInteger(date.year) || !isInteger(date.month) || !isInteger(date.day)) {
              return false;
            } // year 0 doesn't exist in Gregorian calendar


            if (date.year === 0) {
              return false;
            }

            var jsDate = toJSDate(date);
            return !isNaN(jsDate.getTime()) && jsDate.getFullYear() === date.year && jsDate.getMonth() + 1 === date.month && jsDate.getDate() === date.day;
          }
        }]);

        return NgbCalendarGregorian;
      }(NgbCalendar);

      NgbCalendarGregorian.ɵfac = function NgbCalendarGregorian_Factory(t) {
        return ɵNgbCalendarGregorian_BaseFactory(t || NgbCalendarGregorian);
      };

      NgbCalendarGregorian.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: NgbCalendarGregorian,
        factory: NgbCalendarGregorian.ɵfac
      });

      var ɵNgbCalendarGregorian_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbCalendarGregorian);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCalendarGregorian, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], null, null);
      })();

      function isChangedDate(prev, next) {
        return !dateComparator(prev, next);
      }

      function isChangedMonth(prev, next) {
        return !prev && !next ? false : !prev || !next ? true : prev.year !== next.year || prev.month !== next.month;
      }

      function dateComparator(prev, next) {
        return !prev && !next || !!prev && !!next && prev.equals(next);
      }

      function checkMinBeforeMax(minDate, maxDate) {
        if (maxDate && minDate && maxDate.before(minDate)) {
          throw new Error("'maxDate' ".concat(maxDate, " should be greater than 'minDate' ").concat(minDate));
        }
      }

      function checkDateInRange(date, minDate, maxDate) {
        if (date && minDate && date.before(minDate)) {
          return minDate;
        }

        if (date && maxDate && date.after(maxDate)) {
          return maxDate;
        }

        return date || null;
      }

      function isDateSelectable(date, state) {
        var minDate = state.minDate,
            maxDate = state.maxDate,
            disabled = state.disabled,
            markDisabled = state.markDisabled; // clang-format off

        return !(date === null || date === undefined || disabled || markDisabled && markDisabled(date, {
          year: date.year,
          month: date.month
        }) || minDate && date.before(minDate) || maxDate && date.after(maxDate)); // clang-format on
      }

      function generateSelectBoxMonths(calendar, date, minDate, maxDate) {
        if (!date) {
          return [];
        }

        var months = calendar.getMonths(date.year);

        if (minDate && date.year === minDate.year) {
          var index = months.findIndex(function (month) {
            return month === minDate.month;
          });
          months = months.slice(index);
        }

        if (maxDate && date.year === maxDate.year) {
          var _index2 = months.findIndex(function (month) {
            return month === maxDate.month;
          });

          months = months.slice(0, _index2 + 1);
        }

        return months;
      }

      function generateSelectBoxYears(date, minDate, maxDate) {
        if (!date) {
          return [];
        }

        var start = minDate ? Math.max(minDate.year, date.year - 500) : date.year - 10;
        var end = maxDate ? Math.min(maxDate.year, date.year + 500) : date.year + 10;
        var length = end - start + 1;
        var numbers = Array(length);

        for (var i = 0; i < length; i++) {
          numbers[i] = start + i;
        }

        return numbers;
      }

      function nextMonthDisabled(calendar, date, maxDate) {
        var nextDate = Object.assign(calendar.getNext(date, 'm'), {
          day: 1
        });
        return maxDate != null && nextDate.after(maxDate);
      }

      function prevMonthDisabled(calendar, date, minDate) {
        var prevDate = Object.assign(calendar.getPrev(date, 'm'), {
          day: 1
        });
        return minDate != null && (prevDate.year === minDate.year && prevDate.month < minDate.month || prevDate.year < minDate.year && minDate.month === 1);
      }

      function buildMonths(calendar, date, state, i18n, force) {
        var displayMonths = state.displayMonths,
            months = state.months; // move old months to a temporary array

        var monthsToReuse = months.splice(0, months.length); // generate new first dates, nullify or reuse months

        var firstDates = Array.from({
          length: displayMonths
        }, function (_, i) {
          var firstDate = Object.assign(calendar.getNext(date, 'm', i), {
            day: 1
          });
          months[i] = null;

          if (!force) {
            var reusedIndex = monthsToReuse.findIndex(function (month) {
              return month.firstDate.equals(firstDate);
            }); // move reused month back to months

            if (reusedIndex !== -1) {
              months[i] = monthsToReuse.splice(reusedIndex, 1)[0];
            }
          }

          return firstDate;
        }); // rebuild nullified months

        firstDates.forEach(function (firstDate, i) {
          if (months[i] === null) {
            months[i] = buildMonth(calendar, firstDate, state, i18n, monthsToReuse.shift() || {});
          }
        });
        return months;
      }

      function buildMonth(calendar, date, state, i18n) {
        var month = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
        var dayTemplateData = state.dayTemplateData,
            minDate = state.minDate,
            maxDate = state.maxDate,
            firstDayOfWeek = state.firstDayOfWeek,
            markDisabled = state.markDisabled,
            outsideDays = state.outsideDays,
            weekdayWidth = state.weekdayWidth,
            weekdaysVisible = state.weekdaysVisible;
        var calendarToday = calendar.getToday();
        month.firstDate = null;
        month.lastDate = null;
        month.number = date.month;
        month.year = date.year;
        month.weeks = month.weeks || [];
        month.weekdays = month.weekdays || [];
        date = getFirstViewDate(calendar, date, firstDayOfWeek); // clearing weekdays, if not visible

        if (!weekdaysVisible) {
          month.weekdays.length = 0;
        } // month has weeks


        for (var week = 0; week < calendar.getWeeksPerMonth(); week++) {
          var weekObject = month.weeks[week];

          if (!weekObject) {
            weekObject = month.weeks[week] = {
              number: 0,
              days: [],
              collapsed: true
            };
          }

          var days = weekObject.days; // week has days

          for (var day = 0; day < calendar.getDaysPerWeek(); day++) {
            if (week === 0 && weekdaysVisible) {
              month.weekdays[day] = i18n.getWeekdayLabel(calendar.getWeekday(date), weekdayWidth);
            }

            var newDate = new NgbDate(date.year, date.month, date.day);
            var nextDate = calendar.getNext(newDate);
            var ariaLabel = i18n.getDayAriaLabel(newDate); // marking date as disabled

            var disabled = !!(minDate && newDate.before(minDate) || maxDate && newDate.after(maxDate));

            if (!disabled && markDisabled) {
              disabled = markDisabled(newDate, {
                month: month.number,
                year: month.year
              });
            } // today


            var today = newDate.equals(calendarToday); // adding user-provided data to the context

            var contextUserData = dayTemplateData ? dayTemplateData(newDate, {
              month: month.number,
              year: month.year
            }) : undefined; // saving first date of the month

            if (month.firstDate === null && newDate.month === month.number) {
              month.firstDate = newDate;
            } // saving last date of the month


            if (newDate.month === month.number && nextDate.month !== month.number) {
              month.lastDate = newDate;
            }

            var dayObject = days[day];

            if (!dayObject) {
              dayObject = days[day] = {};
            }

            dayObject.date = newDate;
            dayObject.context = Object.assign(dayObject.context || {}, {
              $implicit: newDate,
              date: newDate,
              data: contextUserData,
              currentMonth: month.number,
              currentYear: month.year,
              disabled: disabled,
              focused: false,
              selected: false,
              today: today
            });
            dayObject.tabindex = -1;
            dayObject.ariaLabel = ariaLabel;
            dayObject.hidden = false;
            date = nextDate;
          }

          weekObject.number = calendar.getWeekNumber(days.map(function (day) {
            return day.date;
          }), firstDayOfWeek); // marking week as collapsed

          weekObject.collapsed = outsideDays === 'collapsed' && days[0].date.month !== month.number && days[days.length - 1].date.month !== month.number;
        }

        return month;
      }

      function getFirstViewDate(calendar, date, firstDayOfWeek) {
        var daysPerWeek = calendar.getDaysPerWeek();
        var firstMonthDate = new NgbDate(date.year, date.month, 1);
        var dayOfWeek = calendar.getWeekday(firstMonthDate) % daysPerWeek;
        return calendar.getPrev(firstMonthDate, 'd', (daysPerWeek + dayOfWeek - firstDayOfWeek) % daysPerWeek);
      }

      function NGB_DATEPICKER_18N_FACTORY(locale) {
        return new NgbDatepickerI18nDefault(locale);
      }
      /**
       * A service supplying i18n data to the datepicker component.
       *
       * The default implementation of this service uses the Angular locale and registered locale data for
       * weekdays and month names (as explained in the Angular i18n guide).
       *
       * It also provides a way to i18n data that depends on calendar calculations, like aria labels, day, week and year
       * numerals. For other static labels the datepicker uses the default Angular i18n.
       *
       * See the [i18n demo](#/components/datepicker/examples#i18n) and
       * [Hebrew calendar demo](#/components/datepicker/calendars#hebrew) on how to extend this class and define
       * a custom provider for i18n.
       */


      var NgbDatepickerI18n = /*#__PURE__*/function () {
        function NgbDatepickerI18n() {
          _classCallCheck2(this, NgbDatepickerI18n);
        }

        _createClass2(NgbDatepickerI18n, [{
          key: "getMonthLabel",
          value:
          /**
           * Returns the text label to display above the day view.
           *
           * @since 9.1.0
           */
          function getMonthLabel(date) {
            return "".concat(this.getMonthFullName(date.month, date.year), " ").concat(this.getYearNumerals(date.year));
          }
          /**
           * Returns the textual representation of a day that is rendered in a day cell.
           *
           * @since 3.0.0
           */

        }, {
          key: "getDayNumerals",
          value: function getDayNumerals(date) {
            return "".concat(date.day);
          }
          /**
           * Returns the textual representation of a week number rendered by datepicker.
           *
           * @since 3.0.0
           */

        }, {
          key: "getWeekNumerals",
          value: function getWeekNumerals(weekNumber) {
            return "".concat(weekNumber);
          }
          /**
           * Returns the textual representation of a year that is rendered in the datepicker year select box.
           *
           * @since 3.0.0
           */

        }, {
          key: "getYearNumerals",
          value: function getYearNumerals(year) {
            return "".concat(year);
          }
          /**
           * Returns the week label to display in the heading of the month view.
           *
           * @since 9.1.0
           */

        }, {
          key: "getWeekLabel",
          value: function getWeekLabel() {
            return '';
          }
        }]);

        return NgbDatepickerI18n;
      }();

      NgbDatepickerI18n.ɵfac = function NgbDatepickerI18n_Factory(t) {
        return new (t || NgbDatepickerI18n)();
      };

      NgbDatepickerI18n.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function NgbDatepickerI18n_Factory() {
          return NGB_DATEPICKER_18N_FACTORY(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]));
        },
        token: NgbDatepickerI18n,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerI18n, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root',
            useFactory: NGB_DATEPICKER_18N_FACTORY,
            deps: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]]
          }]
        }], null, null);
      })();
      /**
       * A service providing default implementation for the datepicker i18n.
       * It can be used as a base implementation if necessary.
       *
       * @since 9.1.0
       */


      var NgbDatepickerI18nDefault = /*#__PURE__*/function (_NgbDatepickerI18n) {
        _inherits2(NgbDatepickerI18nDefault, _NgbDatepickerI18n);

        var _super42 = _createSuper(NgbDatepickerI18nDefault);

        function NgbDatepickerI18nDefault(_locale) {
          var _this72;

          _classCallCheck2(this, NgbDatepickerI18nDefault);

          _this72 = _super42.call(this);
          _this72._locale = _locale;
          _this72._monthsShort = Object(_angular_common__WEBPACK_IMPORTED_MODULE_1__["getLocaleMonthNames"])(_locale, _angular_common__WEBPACK_IMPORTED_MODULE_1__["FormStyle"].Standalone, _angular_common__WEBPACK_IMPORTED_MODULE_1__["TranslationWidth"].Abbreviated);
          _this72._monthsFull = Object(_angular_common__WEBPACK_IMPORTED_MODULE_1__["getLocaleMonthNames"])(_locale, _angular_common__WEBPACK_IMPORTED_MODULE_1__["FormStyle"].Standalone, _angular_common__WEBPACK_IMPORTED_MODULE_1__["TranslationWidth"].Wide);
          return _this72;
        }

        _createClass2(NgbDatepickerI18nDefault, [{
          key: "getWeekdayLabel",
          value: function getWeekdayLabel(weekday, width) {
            var weekdaysStartingOnSunday = Object(_angular_common__WEBPACK_IMPORTED_MODULE_1__["getLocaleDayNames"])(this._locale, _angular_common__WEBPACK_IMPORTED_MODULE_1__["FormStyle"].Standalone, width === undefined ? _angular_common__WEBPACK_IMPORTED_MODULE_1__["TranslationWidth"].Short : width);
            var weekdays = weekdaysStartingOnSunday.map(function (day, index) {
              return weekdaysStartingOnSunday[(index + 1) % 7];
            });
            return weekdays[weekday - 1] || '';
          }
        }, {
          key: "getMonthShortName",
          value: function getMonthShortName(month) {
            return this._monthsShort[month - 1] || '';
          }
        }, {
          key: "getMonthFullName",
          value: function getMonthFullName(month) {
            return this._monthsFull[month - 1] || '';
          }
        }, {
          key: "getDayAriaLabel",
          value: function getDayAriaLabel(date) {
            var jsDate = new Date(date.year, date.month - 1, date.day);
            return Object(_angular_common__WEBPACK_IMPORTED_MODULE_1__["formatDate"])(jsDate, 'fullDate', this._locale);
          }
        }]);

        return NgbDatepickerI18nDefault;
      }(NgbDatepickerI18n);

      NgbDatepickerI18nDefault.ɵfac = function NgbDatepickerI18nDefault_Factory(t) {
        return new (t || NgbDatepickerI18nDefault)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]));
      };

      NgbDatepickerI18nDefault.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: NgbDatepickerI18nDefault,
        factory: NgbDatepickerI18nDefault.ɵfac
      });

      NgbDatepickerI18nDefault.ctorParameters = function () {
        return [{
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerI18nDefault, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]]
            }]
          }];
        }, null);
      })();

      var NgbDatepickerService = /*#__PURE__*/function () {
        function NgbDatepickerService(_calendar, _i18n) {
          var _this73 = this;

          _classCallCheck2(this, NgbDatepickerService);

          this._calendar = _calendar;
          this._i18n = _i18n;
          this._VALIDATORS = {
            dayTemplateData: function dayTemplateData(_dayTemplateData) {
              if (_this73._state.dayTemplateData !== _dayTemplateData) {
                return {
                  dayTemplateData: _dayTemplateData
                };
              }
            },
            displayMonths: function displayMonths(_displayMonths) {
              _displayMonths = toInteger(_displayMonths);

              if (isInteger(_displayMonths) && _displayMonths > 0 && _this73._state.displayMonths !== _displayMonths) {
                return {
                  displayMonths: _displayMonths
                };
              }
            },
            disabled: function disabled(_disabled) {
              if (_this73._state.disabled !== _disabled) {
                return {
                  disabled: _disabled
                };
              }
            },
            firstDayOfWeek: function firstDayOfWeek(_firstDayOfWeek) {
              _firstDayOfWeek = toInteger(_firstDayOfWeek);

              if (isInteger(_firstDayOfWeek) && _firstDayOfWeek >= 0 && _this73._state.firstDayOfWeek !== _firstDayOfWeek) {
                return {
                  firstDayOfWeek: _firstDayOfWeek
                };
              }
            },
            focusVisible: function focusVisible(_focusVisible) {
              if (_this73._state.focusVisible !== _focusVisible && !_this73._state.disabled) {
                return {
                  focusVisible: _focusVisible
                };
              }
            },
            markDisabled: function markDisabled(_markDisabled) {
              if (_this73._state.markDisabled !== _markDisabled) {
                return {
                  markDisabled: _markDisabled
                };
              }
            },
            maxDate: function maxDate(date) {
              var maxDate = _this73.toValidDate(date, null);

              if (isChangedDate(_this73._state.maxDate, maxDate)) {
                return {
                  maxDate: maxDate
                };
              }
            },
            minDate: function minDate(date) {
              var minDate = _this73.toValidDate(date, null);

              if (isChangedDate(_this73._state.minDate, minDate)) {
                return {
                  minDate: minDate
                };
              }
            },
            navigation: function navigation(_navigation) {
              if (_this73._state.navigation !== _navigation) {
                return {
                  navigation: _navigation
                };
              }
            },
            outsideDays: function outsideDays(_outsideDays) {
              if (_this73._state.outsideDays !== _outsideDays) {
                return {
                  outsideDays: _outsideDays
                };
              }
            },
            weekdays: function weekdays(_weekdays) {
              var weekdayWidth = _weekdays === true || _weekdays === false ? _angular_common__WEBPACK_IMPORTED_MODULE_1__["TranslationWidth"].Short : _weekdays;
              var weekdaysVisible = _weekdays === true || _weekdays === false ? _weekdays : true;

              if (_this73._state.weekdayWidth !== weekdayWidth || _this73._state.weekdaysVisible !== weekdaysVisible) {
                return {
                  weekdayWidth: weekdayWidth,
                  weekdaysVisible: weekdaysVisible
                };
              }
            }
          };
          this._model$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          this._dateSelect$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          this._state = {
            dayTemplateData: null,
            markDisabled: null,
            maxDate: null,
            minDate: null,
            disabled: false,
            displayMonths: 1,
            firstDate: null,
            firstDayOfWeek: 1,
            lastDate: null,
            focusDate: null,
            focusVisible: false,
            months: [],
            navigation: 'select',
            outsideDays: 'visible',
            prevDisabled: false,
            nextDisabled: false,
            selectedDate: null,
            selectBoxes: {
              years: [],
              months: []
            },
            weekdayWidth: _angular_common__WEBPACK_IMPORTED_MODULE_1__["TranslationWidth"].Short,
            weekdaysVisible: true
          };
        }

        _createClass2(NgbDatepickerService, [{
          key: "model$",
          get: function get() {
            return this._model$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(function (model) {
              return model.months.length > 0;
            }));
          }
        }, {
          key: "dateSelect$",
          get: function get() {
            return this._dateSelect$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(function (date) {
              return date !== null;
            }));
          }
        }, {
          key: "set",
          value: function set(options) {
            var _this74 = this;

            var patch = Object.keys(options).map(function (key) {
              return _this74._VALIDATORS[key](options[key]);
            }).reduce(function (obj, part) {
              return Object.assign(Object.assign({}, obj), part);
            }, {});

            if (Object.keys(patch).length > 0) {
              this._nextState(patch);
            }
          }
        }, {
          key: "focus",
          value: function focus(date) {
            var focusedDate = this.toValidDate(date, null);

            if (focusedDate != null && !this._state.disabled && isChangedDate(this._state.focusDate, focusedDate)) {
              this._nextState({
                focusDate: date
              });
            }
          }
        }, {
          key: "focusSelect",
          value: function focusSelect() {
            if (isDateSelectable(this._state.focusDate, this._state)) {
              this.select(this._state.focusDate, {
                emitEvent: true
              });
            }
          }
        }, {
          key: "open",
          value: function open(date) {
            var firstDate = this.toValidDate(date, this._calendar.getToday());

            if (firstDate != null && !this._state.disabled && (!this._state.firstDate || isChangedMonth(this._state.firstDate, firstDate))) {
              this._nextState({
                firstDate: firstDate
              });
            }
          }
        }, {
          key: "select",
          value: function select(date) {
            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
            var selectedDate = this.toValidDate(date, null);

            if (selectedDate != null && !this._state.disabled) {
              if (isChangedDate(this._state.selectedDate, selectedDate)) {
                this._nextState({
                  selectedDate: selectedDate
                });
              }

              if (options.emitEvent && isDateSelectable(selectedDate, this._state)) {
                this._dateSelect$.next(selectedDate);
              }
            }
          }
        }, {
          key: "toValidDate",
          value: function toValidDate(date, defaultValue) {
            var ngbDate = NgbDate.from(date);

            if (defaultValue === undefined) {
              defaultValue = this._calendar.getToday();
            }

            return this._calendar.isValid(ngbDate) ? ngbDate : defaultValue;
          }
        }, {
          key: "getMonth",
          value: function getMonth(struct) {
            var _iterator6 = _createForOfIteratorHelper(this._state.months),
                _step6;

            try {
              for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
                var month = _step6.value;

                if (struct.month === month.number && struct.year === month.year) {
                  return month;
                }
              }
            } catch (err) {
              _iterator6.e(err);
            } finally {
              _iterator6.f();
            }

            throw new Error("month ".concat(struct.month, " of year ").concat(struct.year, " not found"));
          }
        }, {
          key: "_nextState",
          value: function _nextState(patch) {
            var newState = this._updateState(patch);

            this._patchContexts(newState);

            this._state = newState;

            this._model$.next(this._state);
          }
        }, {
          key: "_patchContexts",
          value: function _patchContexts(state) {
            var months = state.months,
                displayMonths = state.displayMonths,
                selectedDate = state.selectedDate,
                focusDate = state.focusDate,
                focusVisible = state.focusVisible,
                disabled = state.disabled,
                outsideDays = state.outsideDays;
            state.months.forEach(function (month) {
              month.weeks.forEach(function (week) {
                week.days.forEach(function (day) {
                  // patch focus flag
                  if (focusDate) {
                    day.context.focused = focusDate.equals(day.date) && focusVisible;
                  } // calculating tabindex


                  day.tabindex = !disabled && focusDate && day.date.equals(focusDate) && focusDate.month === month.number ? 0 : -1; // override context disabled

                  if (disabled === true) {
                    day.context.disabled = true;
                  } // patch selection flag


                  if (selectedDate !== undefined) {
                    day.context.selected = selectedDate !== null && selectedDate.equals(day.date);
                  } // visibility


                  if (month.number !== day.date.month) {
                    day.hidden = outsideDays === 'hidden' || outsideDays === 'collapsed' || displayMonths > 1 && day.date.after(months[0].firstDate) && day.date.before(months[displayMonths - 1].lastDate);
                  }
                });
              });
            });
          }
        }, {
          key: "_updateState",
          value: function _updateState(patch) {
            // patching fields
            var state = Object.assign({}, this._state, patch);
            var startDate = state.firstDate; // min/max dates changed

            if ('minDate' in patch || 'maxDate' in patch) {
              checkMinBeforeMax(state.minDate, state.maxDate);
              state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate);
              state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate);
              startDate = state.focusDate;
            } // disabled


            if ('disabled' in patch) {
              state.focusVisible = false;
            } // initial rebuild via 'select()'


            if ('selectedDate' in patch && this._state.months.length === 0) {
              startDate = state.selectedDate;
            } // terminate early if only focus visibility was changed


            if ('focusVisible' in patch) {
              return state;
            } // focus date changed


            if ('focusDate' in patch) {
              state.focusDate = checkDateInRange(state.focusDate, state.minDate, state.maxDate);
              startDate = state.focusDate; // nothing to rebuild if only focus changed and it is still visible

              if (state.months.length !== 0 && state.focusDate && !state.focusDate.before(state.firstDate) && !state.focusDate.after(state.lastDate)) {
                return state;
              }
            } // first date changed


            if ('firstDate' in patch) {
              state.firstDate = checkDateInRange(state.firstDate, state.minDate, state.maxDate);
              startDate = state.firstDate;
            } // rebuilding months


            if (startDate) {
              var forceRebuild = 'dayTemplateData' in patch || 'firstDayOfWeek' in patch || 'markDisabled' in patch || 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch || 'outsideDays' in patch || 'weekdaysVisible' in patch;
              var months = buildMonths(this._calendar, startDate, state, this._i18n, forceRebuild); // updating months and boundary dates

              state.months = months;
              state.firstDate = months[0].firstDate;
              state.lastDate = months[months.length - 1].lastDate; // reset selected date if 'markDisabled' returns true

              if ('selectedDate' in patch && !isDateSelectable(state.selectedDate, state)) {
                state.selectedDate = null;
              } // adjusting focus after months were built


              if ('firstDate' in patch) {
                if (!state.focusDate || state.focusDate.before(state.firstDate) || state.focusDate.after(state.lastDate)) {
                  state.focusDate = startDate;
                }
              } // adjusting months/years for the select box navigation


              var yearChanged = !this._state.firstDate || this._state.firstDate.year !== state.firstDate.year;
              var monthChanged = !this._state.firstDate || this._state.firstDate.month !== state.firstDate.month;

              if (state.navigation === 'select') {
                // years ->  boundaries (min/max were changed)
                if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.years.length === 0 || yearChanged) {
                  state.selectBoxes.years = generateSelectBoxYears(state.firstDate, state.minDate, state.maxDate);
                } // months -> when current year or boundaries change


                if ('minDate' in patch || 'maxDate' in patch || state.selectBoxes.months.length === 0 || yearChanged) {
                  state.selectBoxes.months = generateSelectBoxMonths(this._calendar, state.firstDate, state.minDate, state.maxDate);
                }
              } else {
                state.selectBoxes = {
                  years: [],
                  months: []
                };
              } // updating navigation arrows -> boundaries change (min/max) or month/year changes


              if ((state.navigation === 'arrows' || state.navigation === 'select') && (monthChanged || yearChanged || 'minDate' in patch || 'maxDate' in patch || 'disabled' in patch)) {
                state.prevDisabled = state.disabled || prevMonthDisabled(this._calendar, state.firstDate, state.minDate);
                state.nextDisabled = state.disabled || nextMonthDisabled(this._calendar, state.lastDate, state.maxDate);
              }
            }

            return state;
          }
        }]);

        return NgbDatepickerService;
      }();

      NgbDatepickerService.ɵfac = function NgbDatepickerService_Factory(t) {
        return new (t || NgbDatepickerService)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbCalendar), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbDatepickerI18n));
      };

      NgbDatepickerService.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: NgbDatepickerService,
        factory: NgbDatepickerService.ɵfac
      });

      NgbDatepickerService.ctorParameters = function () {
        return [{
          type: NgbCalendar
        }, {
          type: NgbDatepickerI18n
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerService, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: NgbCalendar
          }, {
            type: NgbDatepickerI18n
          }];
        }, null);
      })(); // clang-format on


      var NavigationEvent;

      (function (NavigationEvent) {
        NavigationEvent[NavigationEvent["PREV"] = 0] = "PREV";
        NavigationEvent[NavigationEvent["NEXT"] = 1] = "NEXT";
      })(NavigationEvent || (NavigationEvent = {}));
      /**
       * A configuration service for the [`NgbDatepicker`](#/components/datepicker/api#NgbDatepicker) component.
       *
       * You can inject this service, typically in your root component, and customize the values of its properties in
       * order to provide default values for all the datepickers used in the application.
       */


      var NgbDatepickerConfig = function NgbDatepickerConfig() {
        _classCallCheck2(this, NgbDatepickerConfig);

        this.displayMonths = 1;
        this.firstDayOfWeek = 1;
        this.navigation = 'select';
        this.outsideDays = 'visible';
        this.showWeekNumbers = false;
        this.weekdays = _angular_common__WEBPACK_IMPORTED_MODULE_1__["TranslationWidth"].Short;
      };

      NgbDatepickerConfig.ɵfac = function NgbDatepickerConfig_Factory(t) {
        return new (t || NgbDatepickerConfig)();
      };

      NgbDatepickerConfig.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function NgbDatepickerConfig_Factory() {
          return new NgbDatepickerConfig();
        },
        token: NgbDatepickerConfig,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerConfig, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [];
        }, null);
      })();

      function NGB_DATEPICKER_DATE_ADAPTER_FACTORY() {
        return new NgbDateStructAdapter();
      }
      /**
       * An abstract service that does the conversion between the internal datepicker `NgbDateStruct` model and
       * any provided user date model `D`, ex. a string, a native date, etc.
       *
       * The adapter is used **only** for conversion when binding datepicker to a form control,
       * ex. `[(ngModel)]="userDateModel"`. Here `userDateModel` can be of any type.
       *
       * The default datepicker implementation assumes we use `NgbDateStruct` as a user model.
       *
       * See the [date format overview](#/components/datepicker/overview#date-model) for more details
       * and the [custom adapter demo](#/components/datepicker/examples#adapter) for an example.
       */


      var NgbDateAdapter = function NgbDateAdapter() {
        _classCallCheck2(this, NgbDateAdapter);
      };

      NgbDateAdapter.ɵfac = function NgbDateAdapter_Factory(t) {
        return new (t || NgbDateAdapter)();
      };

      NgbDateAdapter.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: NGB_DATEPICKER_DATE_ADAPTER_FACTORY,
        token: NgbDateAdapter,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDateAdapter, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root',
            useFactory: NGB_DATEPICKER_DATE_ADAPTER_FACTORY
          }]
        }], null, null);
      })();

      var NgbDateStructAdapter = /*#__PURE__*/function (_NgbDateAdapter) {
        _inherits2(NgbDateStructAdapter, _NgbDateAdapter);

        var _super43 = _createSuper(NgbDateStructAdapter);

        function NgbDateStructAdapter() {
          _classCallCheck2(this, NgbDateStructAdapter);

          return _super43.apply(this, arguments);
        }

        _createClass2(NgbDateStructAdapter, [{
          key: "fromModel",
          value:
          /**
           * Converts a NgbDateStruct value into NgbDateStruct value
           */
          function fromModel(date) {
            return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) ? {
              year: date.year,
              month: date.month,
              day: date.day
            } : null;
          }
          /**
           * Converts a NgbDateStruct value into NgbDateStruct value
           */

        }, {
          key: "toModel",
          value: function toModel(date) {
            return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) ? {
              year: date.year,
              month: date.month,
              day: date.day
            } : null;
          }
        }]);

        return NgbDateStructAdapter;
      }(NgbDateAdapter);

      NgbDateStructAdapter.ɵfac = function NgbDateStructAdapter_Factory(t) {
        return ɵNgbDateStructAdapter_BaseFactory(t || NgbDateStructAdapter);
      };

      NgbDateStructAdapter.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: NgbDateStructAdapter,
        factory: NgbDateStructAdapter.ɵfac
      });

      var ɵNgbDateStructAdapter_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbDateStructAdapter);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDateStructAdapter, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], null, null);
      })();
      /**
       * A directive that marks the content template that customizes the way datepicker months are displayed
       *
       * @since 5.3.0
       */


      var NgbDatepickerContent = function NgbDatepickerContent(templateRef) {
        _classCallCheck2(this, NgbDatepickerContent);

        this.templateRef = templateRef;
      };

      NgbDatepickerContent.ɵfac = function NgbDatepickerContent_Factory(t) {
        return new (t || NgbDatepickerContent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]));
      };

      NgbDatepickerContent.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbDatepickerContent,
        selectors: [["ng-template", "ngbDatepickerContent", ""]]
      });

      NgbDatepickerContent.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerContent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'ng-template[ngbDatepickerContent]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }];
        }, null);
      })();
      /**
       * A highly configurable component that helps you with selecting calendar dates.
       *
       * `NgbDatepicker` is meant to be displayed inline on a page or put inside a popup.
       */


      var NgbDatepicker = /*#__PURE__*/function () {
        function NgbDatepicker(_service, _calendar, i18n, config, cd, _elementRef, _ngbDateAdapter, _ngZone) {
          var _this75 = this;

          _classCallCheck2(this, NgbDatepicker);

          this._service = _service;
          this._calendar = _calendar;
          this.i18n = i18n;
          this._elementRef = _elementRef;
          this._ngbDateAdapter = _ngbDateAdapter;
          this._ngZone = _ngZone;
          this._controlValue = null;
          this._destroyed$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          this._publicState = {};
          /**
           * An event emitted right before the navigation happens and displayed month changes.
           *
           * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info.
           */

          this.navigate = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * An event emitted when user selects a date using keyboard or mouse.
           *
           * The payload of the event is currently selected `NgbDate`.
           *
           * @since 5.2.0
           */

          this.dateSelect = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();

          this.onChange = function (_) {};

          this.onTouched = function () {};

          ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate', 'maxDate', 'navigation', 'outsideDays', 'showWeekNumbers', 'startDate', 'weekdays'].forEach(function (input) {
            return _this75[input] = config[input];
          });

          _service.dateSelect$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this._destroyed$)).subscribe(function (date) {
            _this75.dateSelect.emit(date);
          });

          _service.model$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this._destroyed$)).subscribe(function (model) {
            var newDate = model.firstDate;
            var oldDate = _this75.model ? _this75.model.firstDate : null; // update public state

            _this75._publicState = {
              maxDate: model.maxDate,
              minDate: model.minDate,
              firstDate: model.firstDate,
              lastDate: model.lastDate,
              focusedDate: model.focusDate,
              months: model.months.map(function (viewModel) {
                return viewModel.firstDate;
              })
            };
            var navigationPrevented = false; // emitting navigation event if the first month changes

            if (!newDate.equals(oldDate)) {
              _this75.navigate.emit({
                current: oldDate ? {
                  year: oldDate.year,
                  month: oldDate.month
                } : null,
                next: {
                  year: newDate.year,
                  month: newDate.month
                },
                preventDefault: function preventDefault() {
                  return navigationPrevented = true;
                }
              }); // can't prevent the very first navigation


              if (navigationPrevented && oldDate !== null) {
                _this75._service.open(oldDate);

                return;
              }
            }

            var newSelectedDate = model.selectedDate;
            var newFocusedDate = model.focusDate;
            var oldFocusedDate = _this75.model ? _this75.model.focusDate : null;
            _this75.model = model; // handling selection change

            if (isChangedDate(newSelectedDate, _this75._controlValue)) {
              _this75._controlValue = newSelectedDate;

              _this75.onTouched();

              _this75.onChange(_this75._ngbDateAdapter.toModel(newSelectedDate));
            } // handling focus change


            if (isChangedDate(newFocusedDate, oldFocusedDate) && oldFocusedDate && model.focusVisible) {
              _this75.focus();
            }

            cd.markForCheck();
          });
        }
        /**
         *  Returns the readonly public state of the datepicker
         *
         * @since 5.2.0
         */


        _createClass2(NgbDatepicker, [{
          key: "state",
          get: function get() {
            return this._publicState;
          }
          /**
           *  Returns the calendar service used in the specific datepicker instance.
           *
           *  @since 5.3.0
           */

        }, {
          key: "calendar",
          get: function get() {
            return this._calendar;
          }
          /**
           *  Focuses on given date.
           */

        }, {
          key: "focusDate",
          value: function focusDate(date) {
            this._service.focus(NgbDate.from(date));
          }
          /**
           *  Selects focused date.
           */

        }, {
          key: "focusSelect",
          value: function focusSelect() {
            this._service.focusSelect();
          }
        }, {
          key: "focus",
          value: function focus() {
            var _this76 = this;

            this._ngZone.onStable.asObservable().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1)).subscribe(function () {
              var elementToFocus = _this76._elementRef.nativeElement.querySelector('div.ngb-dp-day[tabindex="0"]');

              if (elementToFocus) {
                elementToFocus.focus();
              }
            });
          }
          /**
           * Navigates to the provided date.
           *
           * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.
           * If nothing or invalid date provided calendar will open current month.
           *
           * Use the `[startDate]` input as an alternative.
           */

        }, {
          key: "navigateTo",
          value: function navigateTo(date) {
            this._service.open(NgbDate.from(date ? date.day ? date : Object.assign(Object.assign({}, date), {
              day: 1
            }) : null));
          }
        }, {
          key: "ngAfterViewInit",
          value: function ngAfterViewInit() {
            var _this77 = this;

            this._ngZone.runOutsideAngular(function () {
              var focusIns$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(_this77._contentEl.nativeElement, 'focusin');
              var focusOuts$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(_this77._contentEl.nativeElement, 'focusout');
              var nativeElement = _this77._elementRef.nativeElement; // we're changing 'focusVisible' only when entering or leaving months view
              // and ignoring all focus events where both 'target' and 'related' target are day cells

              Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["merge"])(focusIns$, focusOuts$).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(function (_ref37) {
                var target = _ref37.target,
                    relatedTarget = _ref37.relatedTarget;
                return !(hasClassName(target, 'ngb-dp-day') && hasClassName(relatedTarget, 'ngb-dp-day') && nativeElement.contains(target) && nativeElement.contains(relatedTarget));
              }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(_this77._destroyed$)).subscribe(function (_ref38) {
                var type = _ref38.type;
                return _this77._ngZone.run(function () {
                  return _this77._service.set({
                    focusVisible: type === 'focusin'
                  });
                });
              });
            });
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._destroyed$.next();
          }
        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            var _this78 = this;

            if (this.model === undefined) {
              var inputs = {};
              ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate', 'outsideDays', 'weekdays'].forEach(function (name) {
                return inputs[name] = _this78[name];
              });

              this._service.set(inputs);

              this.navigateTo(this.startDate);
            }

            if (!this.dayTemplate) {
              this.dayTemplate = this._defaultDayTemplate;
            }
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            var _this79 = this;

            var inputs = {};
            ['dayTemplateData', 'displayMonths', 'markDisabled', 'firstDayOfWeek', 'navigation', 'minDate', 'maxDate', 'outsideDays', 'weekdays'].filter(function (name) {
              return name in changes;
            }).forEach(function (name) {
              return inputs[name] = _this79[name];
            });

            this._service.set(inputs);

            if ('startDate' in changes) {
              var _changes$startDate = changes.startDate,
                  currentValue = _changes$startDate.currentValue,
                  previousValue = _changes$startDate.previousValue;

              if (isChangedMonth(previousValue, currentValue)) {
                this.navigateTo(this.startDate);
              }
            }
          }
        }, {
          key: "onDateSelect",
          value: function onDateSelect(date) {
            this._service.focus(date);

            this._service.select(date, {
              emitEvent: true
            });
          }
        }, {
          key: "onNavigateDateSelect",
          value: function onNavigateDateSelect(date) {
            this._service.open(date);
          }
        }, {
          key: "onNavigateEvent",
          value: function onNavigateEvent(event) {
            switch (event) {
              case NavigationEvent.PREV:
                this._service.open(this._calendar.getPrev(this.model.firstDate, 'm', 1));

                break;

              case NavigationEvent.NEXT:
                this._service.open(this._calendar.getNext(this.model.firstDate, 'm', 1));

                break;
            }
          }
        }, {
          key: "registerOnChange",
          value: function registerOnChange(fn) {
            this.onChange = fn;
          }
        }, {
          key: "registerOnTouched",
          value: function registerOnTouched(fn) {
            this.onTouched = fn;
          }
        }, {
          key: "setDisabledState",
          value: function setDisabledState(disabled) {
            this._service.set({
              disabled: disabled
            });
          }
        }, {
          key: "writeValue",
          value: function writeValue(value) {
            this._controlValue = NgbDate.from(this._ngbDateAdapter.fromModel(value));

            this._service.select(this._controlValue);
          }
        }]);

        return NgbDatepicker;
      }();

      NgbDatepicker.ɵfac = function NgbDatepicker_Factory(t) {
        return new (t || NgbDatepicker)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDatepickerService), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbCalendar), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDatepickerI18n), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDatepickerConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDateAdapter), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]));
      };

      NgbDatepicker.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: NgbDatepicker,
        selectors: [["ngb-datepicker"]],
        contentQueries: function NgbDatepicker_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbDatepickerContent, 3);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.contentTemplate = _t.first);
          }
        },
        viewQuery: function NgbDatepicker_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](_c10, 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](_c11, 3);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx._defaultDayTemplate = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx._contentEl = _t.first);
          }
        },
        inputs: {
          dayTemplate: "dayTemplate",
          dayTemplateData: "dayTemplateData",
          displayMonths: "displayMonths",
          firstDayOfWeek: "firstDayOfWeek",
          footerTemplate: "footerTemplate",
          markDisabled: "markDisabled",
          maxDate: "maxDate",
          minDate: "minDate",
          navigation: "navigation",
          outsideDays: "outsideDays",
          showWeekNumbers: "showWeekNumbers",
          startDate: "startDate",
          weekdays: "weekdays"
        },
        outputs: {
          navigate: "navigate",
          dateSelect: "dateSelect"
        },
        exportAs: ["ngbDatepicker"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALUE_ACCESSOR"],
          useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
            return NgbDatepicker;
          }),
          multi: true
        }, NgbDatepickerService]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]],
        decls: 10,
        vars: 5,
        consts: [["defaultDayTemplate", ""], ["defaultContentTemplate", ""], [1, "ngb-dp-header"], [3, "date", "months", "disabled", "showSelect", "prevDisabled", "nextDisabled", "selectBoxes", "navigate", "select", 4, "ngIf"], [1, "ngb-dp-content"], ["content", ""], [3, "ngTemplateOutlet"], ["ngbDatepickerDayView", "", 3, "date", "currentMonth", "selected", "disabled", "focused"], ["class", "ngb-dp-month", 4, "ngFor", "ngForOf"], [1, "ngb-dp-month"], ["class", "ngb-dp-month-name", 4, "ngIf"], [3, "month"], [1, "ngb-dp-month-name"], [3, "date", "months", "disabled", "showSelect", "prevDisabled", "nextDisabled", "selectBoxes", "navigate", "select"]],
        template: function NgbDatepicker_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbDatepicker_ng_template_0_Template, 1, 5, "ng-template", null, 0, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbDatepicker_ng_template_2_Template, 1, 1, "ng-template", null, 1, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](4, "div", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](5, NgbDatepicker_ngb_datepicker_navigation_5_Template, 1, 7, "ngb-datepicker-navigation", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](6, "div", 4, 5);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](8, NgbDatepicker_ng_template_8_Template, 0, 0, "ng-template", 6);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](9, NgbDatepicker_ng_template_9_Template, 0, 0, "ng-template", 6);
          }

          if (rf & 2) {
            var _r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](5);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.navigation !== "none");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("ngb-dp-months", !ctx.contentTemplate);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", (ctx.contentTemplate == null ? null : ctx.contentTemplate.templateRef) || _r2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx.footerTemplate);
          }
        },
        directives: function directives() {
          return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"], NgbDatepickerDayView, _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], NgbDatepickerMonth, NgbDatepickerNavigation];
        },
        styles: ["ngb-datepicker{border:1px solid #dfdfdf;border-radius:.25rem;display:inline-block}ngb-datepicker-month{pointer-events:auto}ngb-datepicker.dropdown-menu{padding:0}.ngb-dp-body{z-index:1050}.ngb-dp-header{border-bottom:0;border-radius:.25rem .25rem 0 0;padding-top:.25rem;background-color:#f8f9fa;background-color:var(--light)}.ngb-dp-months{display:flex}.ngb-dp-month{pointer-events:none}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center;background-color:#f8f9fa;background-color:var(--light)}.ngb-dp-month+.ngb-dp-month .ngb-dp-month-name,.ngb-dp-month+.ngb-dp-month .ngb-dp-week{padding-left:1rem}.ngb-dp-month:last-child .ngb-dp-week{padding-right:.25rem}.ngb-dp-month:first-child .ngb-dp-week{padding-left:.25rem}.ngb-dp-month .ngb-dp-week:last-child{padding-bottom:.25rem}"],
        encapsulation: 2,
        changeDetection: 0
      });

      NgbDatepicker.ctorParameters = function () {
        return [{
          type: NgbDatepickerService
        }, {
          type: NgbCalendar
        }, {
          type: NgbDatepickerI18n
        }, {
          type: NgbDatepickerConfig
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: NgbDateAdapter
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }];
      };

      NgbDatepicker.propDecorators = {
        _defaultDayTemplate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
          args: ['defaultDayTemplate', {
            "static": true
          }]
        }],
        _contentEl: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
          args: ['content', {
            "static": true
          }]
        }],
        contentTemplate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [NgbDatepickerContent, {
            "static": true
          }]
        }],
        dayTemplate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        dayTemplateData: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        displayMonths: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        firstDayOfWeek: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        footerTemplate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        markDisabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        maxDate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        minDate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        navigation: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        outsideDays: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        showWeekNumbers: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        startDate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        weekdays: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        navigate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        dateSelect: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepicker, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            exportAs: 'ngbDatepicker',
            selector: 'ngb-datepicker',
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            template: "\n    <ng-template #defaultDayTemplate let-date=\"date\" let-currentMonth=\"currentMonth\" let-selected=\"selected\"\n                 let-disabled=\"disabled\" let-focused=\"focused\">\n      <div ngbDatepickerDayView\n        [date]=\"date\"\n        [currentMonth]=\"currentMonth\"\n        [selected]=\"selected\"\n        [disabled]=\"disabled\"\n        [focused]=\"focused\">\n      </div>\n    </ng-template>\n\n    <ng-template #defaultContentTemplate>\n      <div *ngFor=\"let month of model.months; let i = index;\" class=\"ngb-dp-month\">\n        <div *ngIf=\"navigation === 'none' || (displayMonths > 1 && navigation === 'select')\" class=\"ngb-dp-month-name\">\n          {{ i18n.getMonthLabel(month.firstDate) }}\n        </div>\n        <ngb-datepicker-month [month]=\"month.firstDate\"></ngb-datepicker-month>\n      </div>\n    </ng-template>\n\n    <div class=\"ngb-dp-header\">\n      <ngb-datepicker-navigation *ngIf=\"navigation !== 'none'\"\n        [date]=\"model.firstDate!\"\n        [months]=\"model.months\"\n        [disabled]=\"model.disabled\"\n        [showSelect]=\"model.navigation === 'select'\"\n        [prevDisabled]=\"model.prevDisabled\"\n        [nextDisabled]=\"model.nextDisabled\"\n        [selectBoxes]=\"model.selectBoxes\"\n        (navigate)=\"onNavigateEvent($event)\"\n        (select)=\"onNavigateDateSelect($event)\">\n      </ngb-datepicker-navigation>\n    </div>\n\n    <div class=\"ngb-dp-content\" [class.ngb-dp-months]=\"!contentTemplate\" #content>\n      <ng-template [ngTemplateOutlet]=\"contentTemplate?.templateRef || defaultContentTemplate\"></ng-template>\n    </div>\n\n    <ng-template [ngTemplateOutlet]=\"footerTemplate\"></ng-template>\n  ",
            providers: [{
              provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALUE_ACCESSOR"],
              useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
                return NgbDatepicker;
              }),
              multi: true
            }, NgbDatepickerService],
            styles: ["ngb-datepicker{border:1px solid #dfdfdf;border-radius:.25rem;display:inline-block}ngb-datepicker-month{pointer-events:auto}ngb-datepicker.dropdown-menu{padding:0}.ngb-dp-body{z-index:1050}.ngb-dp-header{border-bottom:0;border-radius:.25rem .25rem 0 0;padding-top:.25rem;background-color:#f8f9fa;background-color:var(--light)}.ngb-dp-months{display:flex}.ngb-dp-month{pointer-events:none}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center;background-color:#f8f9fa;background-color:var(--light)}.ngb-dp-month+.ngb-dp-month .ngb-dp-month-name,.ngb-dp-month+.ngb-dp-month .ngb-dp-week{padding-left:1rem}.ngb-dp-month:last-child .ngb-dp-week{padding-right:.25rem}.ngb-dp-month:first-child .ngb-dp-week{padding-left:.25rem}.ngb-dp-month .ngb-dp-week:last-child{padding-bottom:.25rem}"]
          }]
        }], function () {
          return [{
            type: NgbDatepickerService
          }, {
            type: NgbCalendar
          }, {
            type: NgbDatepickerI18n
          }, {
            type: NgbDatepickerConfig
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: NgbDateAdapter
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }];
        }, {
          navigate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          dateSelect: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          dayTemplate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          _defaultDayTemplate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
            args: ['defaultDayTemplate', {
              "static": true
            }]
          }],
          _contentEl: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
            args: ['content', {
              "static": true
            }]
          }],
          contentTemplate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [NgbDatepickerContent, {
              "static": true
            }]
          }],
          dayTemplateData: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          displayMonths: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          firstDayOfWeek: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          footerTemplate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          markDisabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          maxDate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          minDate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          navigation: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          outsideDays: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          showWeekNumbers: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          startDate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          weekdays: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var Key;

      (function (Key) {
        Key[Key["Tab"] = 9] = "Tab";
        Key[Key["Enter"] = 13] = "Enter";
        Key[Key["Escape"] = 27] = "Escape";
        Key[Key["Space"] = 32] = "Space";
        Key[Key["PageUp"] = 33] = "PageUp";
        Key[Key["PageDown"] = 34] = "PageDown";
        Key[Key["End"] = 35] = "End";
        Key[Key["Home"] = 36] = "Home";
        Key[Key["ArrowLeft"] = 37] = "ArrowLeft";
        Key[Key["ArrowUp"] = 38] = "ArrowUp";
        Key[Key["ArrowRight"] = 39] = "ArrowRight";
        Key[Key["ArrowDown"] = 40] = "ArrowDown";
      })(Key || (Key = {}));
      /**
       * A service that represents the keyboard navigation.
       *
       * Default keyboard shortcuts [are documented in the overview](#/components/datepicker/overview#keyboard-shortcuts)
       *
       * @since 5.2.0
       */


      var NgbDatepickerKeyboardService = /*#__PURE__*/function () {
        function NgbDatepickerKeyboardService() {
          _classCallCheck2(this, NgbDatepickerKeyboardService);
        }

        _createClass2(NgbDatepickerKeyboardService, [{
          key: "processKey",
          value:
          /**
           * Processes a keyboard event.
           */
          function processKey(event, datepicker) {
            var state = datepicker.state,
                calendar = datepicker.calendar; // tslint:disable-next-line:deprecation

            switch (event.which) {
              case Key.PageUp:
                datepicker.focusDate(calendar.getPrev(state.focusedDate, event.shiftKey ? 'y' : 'm', 1));
                break;

              case Key.PageDown:
                datepicker.focusDate(calendar.getNext(state.focusedDate, event.shiftKey ? 'y' : 'm', 1));
                break;

              case Key.End:
                datepicker.focusDate(event.shiftKey ? state.maxDate : state.lastDate);
                break;

              case Key.Home:
                datepicker.focusDate(event.shiftKey ? state.minDate : state.firstDate);
                break;

              case Key.ArrowLeft:
                datepicker.focusDate(calendar.getPrev(state.focusedDate, 'd', 1));
                break;

              case Key.ArrowUp:
                datepicker.focusDate(calendar.getPrev(state.focusedDate, 'd', calendar.getDaysPerWeek()));
                break;

              case Key.ArrowRight:
                datepicker.focusDate(calendar.getNext(state.focusedDate, 'd', 1));
                break;

              case Key.ArrowDown:
                datepicker.focusDate(calendar.getNext(state.focusedDate, 'd', calendar.getDaysPerWeek()));
                break;

              case Key.Enter:
              case Key.Space:
                datepicker.focusSelect();
                break;

              default:
                return;
            }

            event.preventDefault();
            event.stopPropagation();
          }
        }]);

        return NgbDatepickerKeyboardService;
      }();

      NgbDatepickerKeyboardService.ɵfac = function NgbDatepickerKeyboardService_Factory(t) {
        return new (t || NgbDatepickerKeyboardService)();
      };

      NgbDatepickerKeyboardService.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function NgbDatepickerKeyboardService_Factory() {
          return new NgbDatepickerKeyboardService();
        },
        token: NgbDatepickerKeyboardService,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerKeyboardService, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], null, null);
      })();
      /**
       * A component that renders one month including all the days, weekdays and week numbers. Can be used inside
       * the `<ng-template ngbDatepickerMonths></ng-template>` when you want to customize months layout.
       *
       * For a usage example, see [custom month layout demo](#/components/datepicker/examples#custommonth)
       *
       * @since 5.3.0
       */


      var NgbDatepickerMonth = /*#__PURE__*/function () {
        function NgbDatepickerMonth(i18n, datepicker, _keyboardService, _service) {
          _classCallCheck2(this, NgbDatepickerMonth);

          this.i18n = i18n;
          this.datepicker = datepicker;
          this._keyboardService = _keyboardService;
          this._service = _service;
        }
        /**
         * The first date of month to be rendered.
         *
         * This month must one of the months present in the
         * [datepicker state](#/components/datepicker/api#NgbDatepickerState).
         */


        _createClass2(NgbDatepickerMonth, [{
          key: "month",
          set: function set(month) {
            this.viewModel = this._service.getMonth(month);
          }
        }, {
          key: "onKeyDown",
          value: function onKeyDown(event) {
            this._keyboardService.processKey(event, this.datepicker);
          }
        }, {
          key: "doSelect",
          value: function doSelect(day) {
            if (!day.context.disabled && !day.hidden) {
              this.datepicker.onDateSelect(day.date);
            }
          }
        }]);

        return NgbDatepickerMonth;
      }();

      NgbDatepickerMonth.ɵfac = function NgbDatepickerMonth_Factory(t) {
        return new (t || NgbDatepickerMonth)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDatepickerI18n), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDatepicker), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDatepickerKeyboardService), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDatepickerService));
      };

      NgbDatepickerMonth.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: NgbDatepickerMonth,
        selectors: [["ngb-datepicker-month"]],
        hostAttrs: ["role", "grid"],
        hostBindings: function NgbDatepickerMonth_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("keydown", function NgbDatepickerMonth_keydown_HostBindingHandler($event) {
              return ctx.onKeyDown($event);
            });
          }
        },
        inputs: {
          month: "month"
        },
        decls: 2,
        vars: 2,
        consts: [["class", "ngb-dp-week ngb-dp-weekdays", "role", "row", 4, "ngIf"], ["ngFor", "", 3, "ngForOf"], ["role", "row", 1, "ngb-dp-week", "ngb-dp-weekdays"], ["class", "ngb-dp-weekday ngb-dp-showweek small", 4, "ngIf"], ["class", "ngb-dp-weekday small", "role", "columnheader", 4, "ngFor", "ngForOf"], [1, "ngb-dp-weekday", "ngb-dp-showweek", "small"], ["role", "columnheader", 1, "ngb-dp-weekday", "small"], ["class", "ngb-dp-week", "role", "row", 4, "ngIf"], ["role", "row", 1, "ngb-dp-week"], ["class", "ngb-dp-week-number small text-muted", 4, "ngIf"], ["class", "ngb-dp-day", "role", "gridcell", 3, "disabled", "tabindex", "hidden", "ngb-dp-today", "click", 4, "ngFor", "ngForOf"], [1, "ngb-dp-week-number", "small", "text-muted"], ["role", "gridcell", 1, "ngb-dp-day", 3, "tabindex", "click"], [3, "ngIf"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"]],
        template: function NgbDatepickerMonth_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbDatepickerMonth_div_0_Template, 3, 2, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbDatepickerMonth_ng_template_1_Template, 1, 1, "ng-template", 1);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.viewModel.weekdays.length > 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.viewModel.weeks);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"]],
        styles: ["ngb-datepicker-month{display:block}.ngb-dp-week-number,.ngb-dp-weekday{line-height:2rem;text-align:center;font-style:italic}.ngb-dp-weekday{color:#5bc0de;color:var(--info)}.ngb-dp-week{border-radius:.25rem;display:flex}.ngb-dp-weekdays{border-bottom:1px solid rgba(0,0,0,.125);border-radius:0;background-color:#f8f9fa;background-color:var(--light)}.ngb-dp-day,.ngb-dp-week-number,.ngb-dp-weekday{width:2rem;height:2rem}.ngb-dp-day{cursor:pointer}.ngb-dp-day.disabled,.ngb-dp-day.hidden{cursor:default;pointer-events:none}.ngb-dp-day[tabindex=\"0\"]{z-index:1}"],
        encapsulation: 2
      });

      NgbDatepickerMonth.ctorParameters = function () {
        return [{
          type: NgbDatepickerI18n
        }, {
          type: NgbDatepicker
        }, {
          type: NgbDatepickerKeyboardService
        }, {
          type: NgbDatepickerService
        }];
      };

      NgbDatepickerMonth.propDecorators = {
        month: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerMonth, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'ngb-datepicker-month',
            host: {
              'role': 'grid',
              '(keydown)': 'onKeyDown($event)'
            },
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            template: "\n    <div *ngIf=\"viewModel.weekdays.length > 0\" class=\"ngb-dp-week ngb-dp-weekdays\" role=\"row\">\n      <div *ngIf=\"datepicker.showWeekNumbers\" class=\"ngb-dp-weekday ngb-dp-showweek small\">{{ i18n.getWeekLabel() }}</div>\n      <div *ngFor=\"let weekday of viewModel.weekdays\" class=\"ngb-dp-weekday small\" role=\"columnheader\">{{ weekday }}</div>\n    </div>\n    <ng-template ngFor let-week [ngForOf]=\"viewModel.weeks\">\n      <div *ngIf=\"!week.collapsed\" class=\"ngb-dp-week\" role=\"row\">\n        <div *ngIf=\"datepicker.showWeekNumbers\" class=\"ngb-dp-week-number small text-muted\">{{ i18n.getWeekNumerals(week.number) }}</div>\n        <div *ngFor=\"let day of week.days\" (click)=\"doSelect(day); $event.preventDefault()\" class=\"ngb-dp-day\" role=\"gridcell\"\n             [class.disabled]=\"day.context.disabled\"\n             [tabindex]=\"day.tabindex\"\n             [class.hidden]=\"day.hidden\"\n             [class.ngb-dp-today]=\"day.context.today\"\n             [attr.aria-label]=\"day.ariaLabel\">\n          <ng-template [ngIf]=\"!day.hidden\">\n            <ng-template [ngTemplateOutlet]=\"datepicker.dayTemplate\" [ngTemplateOutletContext]=\"day.context\"></ng-template>\n          </ng-template>\n        </div>\n      </div>\n    </ng-template>\n  ",
            styles: ["ngb-datepicker-month{display:block}.ngb-dp-week-number,.ngb-dp-weekday{line-height:2rem;text-align:center;font-style:italic}.ngb-dp-weekday{color:#5bc0de;color:var(--info)}.ngb-dp-week{border-radius:.25rem;display:flex}.ngb-dp-weekdays{border-bottom:1px solid rgba(0,0,0,.125);border-radius:0;background-color:#f8f9fa;background-color:var(--light)}.ngb-dp-day,.ngb-dp-week-number,.ngb-dp-weekday{width:2rem;height:2rem}.ngb-dp-day{cursor:pointer}.ngb-dp-day.disabled,.ngb-dp-day.hidden{cursor:default;pointer-events:none}.ngb-dp-day[tabindex=\"0\"]{z-index:1}"]
          }]
        }], function () {
          return [{
            type: NgbDatepickerI18n
          }, {
            type: NgbDatepicker
          }, {
            type: NgbDatepickerKeyboardService
          }, {
            type: NgbDatepickerService
          }];
        }, {
          month: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var NgbDatepickerNavigation = /*#__PURE__*/function () {
        function NgbDatepickerNavigation(i18n) {
          _classCallCheck2(this, NgbDatepickerNavigation);

          this.i18n = i18n;
          this.navigation = NavigationEvent;
          this.months = [];
          this.navigate = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.select = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        }

        _createClass2(NgbDatepickerNavigation, [{
          key: "onClickPrev",
          value: function onClickPrev(event) {
            event.currentTarget.focus();
            this.navigate.emit(this.navigation.PREV);
          }
        }, {
          key: "onClickNext",
          value: function onClickNext(event) {
            event.currentTarget.focus();
            this.navigate.emit(this.navigation.NEXT);
          }
        }]);

        return NgbDatepickerNavigation;
      }();

      NgbDatepickerNavigation.ɵfac = function NgbDatepickerNavigation_Factory(t) {
        return new (t || NgbDatepickerNavigation)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDatepickerI18n));
      };

      NgbDatepickerNavigation.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: NgbDatepickerNavigation,
        selectors: [["ngb-datepicker-navigation"]],
        inputs: {
          months: "months",
          date: "date",
          disabled: "disabled",
          showSelect: "showSelect",
          prevDisabled: "prevDisabled",
          nextDisabled: "nextDisabled",
          selectBoxes: "selectBoxes"
        },
        outputs: {
          navigate: "navigate",
          select: "select"
        },
        decls: 8,
        vars: 4,
        consts: function consts() {
          var i18n_12;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_datepicker_previous_month$$FESM2015_NG_BOOTSTRAP_JS_13 = goog.getMsg("Previous month");
            i18n_12 = MSG_EXTERNAL_ngb_datepicker_previous_month$$FESM2015_NG_BOOTSTRAP_JS_13;
          } else {
            i18n_12 = $localize(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral([":@@ngb.datepicker.previous-month\u241Fc3b08b07b5ab98e7cdcf18df39355690ab7d3884\u241F8586908745456864217:Previous month"])));
          }

          var i18n_14;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_datepicker_previous_month$$FESM2015_NG_BOOTSTRAP_JS_15 = goog.getMsg("Previous month");
            i18n_14 = MSG_EXTERNAL_ngb_datepicker_previous_month$$FESM2015_NG_BOOTSTRAP_JS_15;
          } else {
            i18n_14 = $localize(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral([":@@ngb.datepicker.previous-month\u241Fc3b08b07b5ab98e7cdcf18df39355690ab7d3884\u241F8586908745456864217:Previous month"])));
          }

          var i18n_16;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_datepicker_next_month$$FESM2015_NG_BOOTSTRAP_JS_17 = goog.getMsg("Next month");
            i18n_16 = MSG_EXTERNAL_ngb_datepicker_next_month$$FESM2015_NG_BOOTSTRAP_JS_17;
          } else {
            i18n_16 = $localize(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral([":@@ngb.datepicker.next-month\u241F4bd046985cfe13040d5ef0cd881edce0968a111a\u241F3628374603023447227:Next month"])));
          }

          var i18n_18;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_datepicker_next_month$$FESM2015_NG_BOOTSTRAP_JS_19 = goog.getMsg("Next month");
            i18n_18 = MSG_EXTERNAL_ngb_datepicker_next_month$$FESM2015_NG_BOOTSTRAP_JS_19;
          } else {
            i18n_18 = $localize(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral([":@@ngb.datepicker.next-month\u241F4bd046985cfe13040d5ef0cd881edce0968a111a\u241F3628374603023447227:Next month"])));
          }

          return [[1, "ngb-dp-arrow"], ["type", "button", "aria-label", i18n_12, "title", i18n_14, 1, "btn", "btn-link", "ngb-dp-arrow-btn", 3, "disabled", "click"], [1, "ngb-dp-navigation-chevron"], ["class", "ngb-dp-navigation-select", 3, "date", "disabled", "months", "years", "select", 4, "ngIf"], [4, "ngIf"], [1, "ngb-dp-arrow", "right"], ["type", "button", "aria-label", i18n_16, "title", i18n_18, 1, "btn", "btn-link", "ngb-dp-arrow-btn", 3, "disabled", "click"], [1, "ngb-dp-navigation-select", 3, "date", "disabled", "months", "years", "select"], ["ngFor", "", 3, "ngForOf"], ["class", "ngb-dp-arrow", 4, "ngIf"], [1, "ngb-dp-month-name"]];
        },
        template: function NgbDatepickerNavigation_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "button", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbDatepickerNavigation_Template_button_click_1_listener($event) {
              return ctx.onClickPrev($event);
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](2, "span", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgbDatepickerNavigation_ngb_datepicker_navigation_select_3_Template, 1, 4, "ngb-datepicker-navigation-select", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](4, NgbDatepickerNavigation_4_Template, 1, 1, undefined, 4);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "div", 5);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](6, "button", 6);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbDatepickerNavigation_Template_button_click_6_listener($event) {
              return ctx.onClickNext($event);
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](7, "span", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx.prevDisabled);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.showSelect);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx.showSelect);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx.nextDisabled);
          }
        },
        directives: function directives() {
          return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], NgbDatepickerNavigationSelect, _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"]];
        },
        styles: ["ngb-datepicker-navigation{display:flex;align-items:center}.ngb-dp-navigation-chevron{border-style:solid;border-width:.2em .2em 0 0;display:inline-block;width:.75em;height:.75em;margin-left:.25em;margin-right:.15em;transform:rotate(-135deg)}.ngb-dp-arrow{display:flex;flex:1 1 auto;padding-right:0;padding-left:0;margin:0;width:2rem;height:2rem}.ngb-dp-arrow.right{justify-content:flex-end}.ngb-dp-arrow.right .ngb-dp-navigation-chevron{transform:rotate(45deg);margin-left:.15em;margin-right:.25em}.ngb-dp-arrow-btn{padding:0 .25rem;margin:0 .5rem;border:none;background-color:transparent;z-index:1}.ngb-dp-arrow-btn:focus{outline-width:1px;outline-style:auto}@media (-ms-high-contrast:active),(-ms-high-contrast:none){.ngb-dp-arrow-btn:focus{outline-style:solid}}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center}.ngb-dp-navigation-select{display:flex;flex:1 1 9rem}"],
        encapsulation: 2,
        changeDetection: 0
      });

      NgbDatepickerNavigation.ctorParameters = function () {
        return [{
          type: NgbDatepickerI18n
        }];
      };

      NgbDatepickerNavigation.propDecorators = {
        date: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        disabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        months: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        showSelect: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        prevDisabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        nextDisabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        selectBoxes: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        navigate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        select: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerNavigation, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'ngb-datepicker-navigation',
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            template: "\n    <div class=\"ngb-dp-arrow\">\n      <button type=\"button\" class=\"btn btn-link ngb-dp-arrow-btn\" (click)=\"onClickPrev($event)\" [disabled]=\"prevDisabled\"\n              i18n-aria-label=\"@@ngb.datepicker.previous-month\" aria-label=\"Previous month\"\n              i18n-title=\"@@ngb.datepicker.previous-month\" title=\"Previous month\">\n        <span class=\"ngb-dp-navigation-chevron\"></span>\n      </button>\n    </div>\n    <ngb-datepicker-navigation-select *ngIf=\"showSelect\" class=\"ngb-dp-navigation-select\"\n      [date]=\"date\"\n      [disabled] = \"disabled\"\n      [months]=\"selectBoxes.months\"\n      [years]=\"selectBoxes.years\"\n      (select)=\"select.emit($event)\">\n    </ngb-datepicker-navigation-select>\n\n    <ng-template *ngIf=\"!showSelect\" ngFor let-month [ngForOf]=\"months\" let-i=\"index\">\n      <div class=\"ngb-dp-arrow\" *ngIf=\"i > 0\"></div>\n      <div class=\"ngb-dp-month-name\">\n        {{ i18n.getMonthLabel(month.firstDate) }}\n      </div>\n      <div class=\"ngb-dp-arrow\" *ngIf=\"i !== months.length - 1\"></div>\n    </ng-template>\n    <div class=\"ngb-dp-arrow right\">\n      <button type=\"button\" class=\"btn btn-link ngb-dp-arrow-btn\" (click)=\"onClickNext($event)\" [disabled]=\"nextDisabled\"\n              i18n-aria-label=\"@@ngb.datepicker.next-month\" aria-label=\"Next month\"\n              i18n-title=\"@@ngb.datepicker.next-month\" title=\"Next month\">\n        <span class=\"ngb-dp-navigation-chevron\"></span>\n      </button>\n    </div>\n    ",
            styles: ["ngb-datepicker-navigation{display:flex;align-items:center}.ngb-dp-navigation-chevron{border-style:solid;border-width:.2em .2em 0 0;display:inline-block;width:.75em;height:.75em;margin-left:.25em;margin-right:.15em;transform:rotate(-135deg)}.ngb-dp-arrow{display:flex;flex:1 1 auto;padding-right:0;padding-left:0;margin:0;width:2rem;height:2rem}.ngb-dp-arrow.right{justify-content:flex-end}.ngb-dp-arrow.right .ngb-dp-navigation-chevron{transform:rotate(45deg);margin-left:.15em;margin-right:.25em}.ngb-dp-arrow-btn{padding:0 .25rem;margin:0 .5rem;border:none;background-color:transparent;z-index:1}.ngb-dp-arrow-btn:focus{outline-width:1px;outline-style:auto}@media (-ms-high-contrast:active),(-ms-high-contrast:none){.ngb-dp-arrow-btn:focus{outline-style:solid}}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center}.ngb-dp-navigation-select{display:flex;flex:1 1 9rem}"]
          }]
        }], function () {
          return [{
            type: NgbDatepickerI18n
          }];
        }, {
          months: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          navigate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          select: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          date: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          disabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          showSelect: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          prevDisabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          nextDisabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          selectBoxes: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var isContainedIn = function isContainedIn(element, array) {
        return array ? array.some(function (item) {
          return item.contains(element);
        }) : false;
      };

      var ɵ0$3 = isContainedIn;

      var matchesSelectorIfAny = function matchesSelectorIfAny(element, selector) {
        return !selector || closest(element, selector) != null;
      };

      var ɵ1 = matchesSelectorIfAny;

      var ɵ2 = function ɵ2() {
        var isIOS = function isIOS() {
          return /iPad|iPhone|iPod/.test(navigator.userAgent) || /Macintosh/.test(navigator.userAgent) && navigator.maxTouchPoints && navigator.maxTouchPoints > 2;
        };

        var isAndroid = function isAndroid() {
          return /Android/.test(navigator.userAgent);
        };

        return typeof navigator !== 'undefined' ? !!navigator.userAgent && (isIOS() || isAndroid()) : false;
      }; // we have to add a more significant delay to avoid re-opening when handling (click) on a toggling element
      // TODO: use proper Angular platform detection when NgbAutoClose becomes a service and we can inject PLATFORM_ID


      var isMobile = ɵ2(); // setting 'ngbAutoClose' synchronously on mobile results in immediate popup closing
      // when tapping on the triggering element

      var wrapAsyncForMobile = function wrapAsyncForMobile(fn) {
        return isMobile ? function () {
          return setTimeout(function () {
            return fn();
          }, 100);
        } : fn;
      };

      var ɵ3 = wrapAsyncForMobile;

      function ngbAutoClose(zone, document, type, close, closed$, insideElements, ignoreElements, insideSelector) {
        // closing on ESC and outside clicks
        if (type) {
          zone.runOutsideAngular(wrapAsyncForMobile(function () {
            var shouldCloseOnClick = function shouldCloseOnClick(event) {
              var element = event.target;

              if (event.button === 2 || isContainedIn(element, ignoreElements)) {
                return false;
              }

              if (type === 'inside') {
                return isContainedIn(element, insideElements) && matchesSelectorIfAny(element, insideSelector);
              } else if (type === 'outside') {
                return !isContainedIn(element, insideElements);
              } else
                /* if (type === true) */
                {
                  return matchesSelectorIfAny(element, insideSelector) || !isContainedIn(element, insideElements);
                }
            };

            var escapes$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(document, 'keydown').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(closed$), // tslint:disable-next-line:deprecation
            Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(function (e) {
              return e.which === Key.Escape;
            }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (e) {
              return e.preventDefault();
            })); // we have to pre-calculate 'shouldCloseOnClick' on 'mousedown',
            // because on 'mouseup' DOM nodes might be detached

            var mouseDowns$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(document, 'mousedown').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(shouldCloseOnClick), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(closed$));
            var closeableClicks$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(document, 'mouseup').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["withLatestFrom"])(mouseDowns$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(function (_ref39) {
              var _ref40 = _slicedToArray(_ref39, 2),
                  _ = _ref40[0],
                  shouldClose = _ref40[1];

              return shouldClose;
            }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["delay"])(0), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(closed$));
            Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["race"])([escapes$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_) {
              return 0;
            }
            /* ESCAPE */
            )), closeableClicks$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_) {
              return 1;
            }
            /* CLICK */
            ))]).subscribe(function (source) {
              return zone.run(function () {
                return close(source);
              });
            });
          }));
        }
      }

      var FOCUSABLE_ELEMENTS_SELECTOR = ['a[href]', 'button:not([disabled])', 'input:not([disabled]):not([type="hidden"])', 'select:not([disabled])', 'textarea:not([disabled])', '[contenteditable]', '[tabindex]:not([tabindex="-1"])'].join(', ');
      /**
       * Returns first and last focusable elements inside of a given element based on specific CSS selector
       */

      function getFocusableBoundaryElements(element) {
        var list = Array.from(element.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR)).filter(function (el) {
          return el.tabIndex !== -1;
        });
        return [list[0], list[list.length - 1]];
      }
      /**
       * Function that enforces browser focus to be trapped inside a DOM element.
       *
       * Works only for clicks inside the element and navigation with 'Tab', ignoring clicks outside of the element
       *
       * @param zone Angular zone
       * @param element The element around which focus will be trapped inside
       * @param stopFocusTrap$ The observable stream. When completed the focus trap will clean up listeners
       * and free internal resources
       * @param refocusOnClick Put the focus back to the last focused element whenever a click occurs on element (default to
       * false)
       */


      var ngbFocusTrap = function ngbFocusTrap(zone, element, stopFocusTrap$) {
        var refocusOnClick = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
        zone.runOutsideAngular(function () {
          // last focused element
          var lastFocusedElement$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(element, 'focusin').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(stopFocusTrap$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (e) {
            return e.target;
          })); // 'tab' / 'shift+tab' stream

          Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(element, 'keydown').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(stopFocusTrap$), // tslint:disable:deprecation
          Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(function (e) {
            return e.which === Key.Tab;
          }), // tslint:enable:deprecation
          Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["withLatestFrom"])(lastFocusedElement$)).subscribe(function (_ref41) {
            var _ref42 = _slicedToArray(_ref41, 2),
                tabEvent = _ref42[0],
                focusedElement = _ref42[1];

            var _getFocusableBoundary = getFocusableBoundaryElements(element),
                _getFocusableBoundary2 = _slicedToArray(_getFocusableBoundary, 2),
                first = _getFocusableBoundary2[0],
                last = _getFocusableBoundary2[1];

            if ((focusedElement === first || focusedElement === element) && tabEvent.shiftKey) {
              last.focus();
              tabEvent.preventDefault();
            }

            if (focusedElement === last && !tabEvent.shiftKey) {
              first.focus();
              tabEvent.preventDefault();
            }
          }); // inside click

          if (refocusOnClick) {
            Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(element, 'click').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(stopFocusTrap$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["withLatestFrom"])(lastFocusedElement$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (arr) {
              return arr[1];
            })).subscribe(function (lastFocusedElement) {
              return lastFocusedElement.focus();
            });
          }
        });
      }; // previous version:
      // https://github.com/angular-ui/bootstrap/blob/07c31d0731f7cb068a1932b8e01d2312b796b4ec/src/position/position.js


      var Positioning = /*#__PURE__*/function () {
        function Positioning() {
          _classCallCheck2(this, Positioning);
        }

        _createClass2(Positioning, [{
          key: "getAllStyles",
          value: function getAllStyles(element) {
            return window.getComputedStyle(element);
          }
        }, {
          key: "getStyle",
          value: function getStyle(element, prop) {
            return this.getAllStyles(element)[prop];
          }
        }, {
          key: "isStaticPositioned",
          value: function isStaticPositioned(element) {
            return (this.getStyle(element, 'position') || 'static') === 'static';
          }
        }, {
          key: "offsetParent",
          value: function offsetParent(element) {
            var offsetParentEl = element.offsetParent || document.documentElement;

            while (offsetParentEl && offsetParentEl !== document.documentElement && this.isStaticPositioned(offsetParentEl)) {
              offsetParentEl = offsetParentEl.offsetParent;
            }

            return offsetParentEl || document.documentElement;
          }
        }, {
          key: "position",
          value: function position(element) {
            var round = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
            var elPosition;
            var parentOffset = {
              width: 0,
              height: 0,
              top: 0,
              bottom: 0,
              left: 0,
              right: 0
            };

            if (this.getStyle(element, 'position') === 'fixed') {
              elPosition = element.getBoundingClientRect();
              elPosition = {
                top: elPosition.top,
                bottom: elPosition.bottom,
                left: elPosition.left,
                right: elPosition.right,
                height: elPosition.height,
                width: elPosition.width
              };
            } else {
              var offsetParentEl = this.offsetParent(element);
              elPosition = this.offset(element, false);

              if (offsetParentEl !== document.documentElement) {
                parentOffset = this.offset(offsetParentEl, false);
              }

              parentOffset.top += offsetParentEl.clientTop;
              parentOffset.left += offsetParentEl.clientLeft;
            }

            elPosition.top -= parentOffset.top;
            elPosition.bottom -= parentOffset.top;
            elPosition.left -= parentOffset.left;
            elPosition.right -= parentOffset.left;

            if (round) {
              elPosition.top = Math.round(elPosition.top);
              elPosition.bottom = Math.round(elPosition.bottom);
              elPosition.left = Math.round(elPosition.left);
              elPosition.right = Math.round(elPosition.right);
            }

            return elPosition;
          }
        }, {
          key: "offset",
          value: function offset(element) {
            var round = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
            var elBcr = element.getBoundingClientRect();
            var viewportOffset = {
              top: window.pageYOffset - document.documentElement.clientTop,
              left: window.pageXOffset - document.documentElement.clientLeft
            };
            var elOffset = {
              height: elBcr.height || element.offsetHeight,
              width: elBcr.width || element.offsetWidth,
              top: elBcr.top + viewportOffset.top,
              bottom: elBcr.bottom + viewportOffset.top,
              left: elBcr.left + viewportOffset.left,
              right: elBcr.right + viewportOffset.left
            };

            if (round) {
              elOffset.height = Math.round(elOffset.height);
              elOffset.width = Math.round(elOffset.width);
              elOffset.top = Math.round(elOffset.top);
              elOffset.bottom = Math.round(elOffset.bottom);
              elOffset.left = Math.round(elOffset.left);
              elOffset.right = Math.round(elOffset.right);
            }

            return elOffset;
          }
          /*
            Return false if the element to position is outside the viewport
          */

        }, {
          key: "positionElements",
          value: function positionElements(hostElement, targetElement, placement, appendToBody) {
            var _placement$split = placement.split('-'),
                _placement$split2 = _slicedToArray(_placement$split, 2),
                _placement$split2$ = _placement$split2[0],
                placementPrimary = _placement$split2$ === void 0 ? 'top' : _placement$split2$,
                _placement$split2$2 = _placement$split2[1],
                placementSecondary = _placement$split2$2 === void 0 ? 'center' : _placement$split2$2;

            var hostElPosition = appendToBody ? this.offset(hostElement, false) : this.position(hostElement, false);
            var targetElStyles = this.getAllStyles(targetElement);
            var marginTop = parseFloat(targetElStyles.marginTop);
            var marginBottom = parseFloat(targetElStyles.marginBottom);
            var marginLeft = parseFloat(targetElStyles.marginLeft);
            var marginRight = parseFloat(targetElStyles.marginRight);
            var topPosition = 0;
            var leftPosition = 0;

            switch (placementPrimary) {
              case 'top':
                topPosition = hostElPosition.top - (targetElement.offsetHeight + marginTop + marginBottom);
                break;

              case 'bottom':
                topPosition = hostElPosition.top + hostElPosition.height;
                break;

              case 'left':
                leftPosition = hostElPosition.left - (targetElement.offsetWidth + marginLeft + marginRight);
                break;

              case 'right':
                leftPosition = hostElPosition.left + hostElPosition.width;
                break;
            }

            switch (placementSecondary) {
              case 'top':
                topPosition = hostElPosition.top;
                break;

              case 'bottom':
                topPosition = hostElPosition.top + hostElPosition.height - targetElement.offsetHeight;
                break;

              case 'left':
                leftPosition = hostElPosition.left;
                break;

              case 'right':
                leftPosition = hostElPosition.left + hostElPosition.width - targetElement.offsetWidth;
                break;

              case 'center':
                if (placementPrimary === 'top' || placementPrimary === 'bottom') {
                  leftPosition = hostElPosition.left + hostElPosition.width / 2 - targetElement.offsetWidth / 2;
                } else {
                  topPosition = hostElPosition.top + hostElPosition.height / 2 - targetElement.offsetHeight / 2;
                }

                break;
            } /// The translate3d/gpu acceleration render a blurry text on chrome, the next line is commented until a browser fix
            // targetElement.style.transform = `translate3d(${Math.round(leftPosition)}px, ${Math.floor(topPosition)}px, 0px)`;


            targetElement.style.transform = "translate(".concat(Math.round(leftPosition), "px, ").concat(Math.round(topPosition), "px)"); // Check if the targetElement is inside the viewport

            var targetElBCR = targetElement.getBoundingClientRect();
            var html = document.documentElement;
            var windowHeight = window.innerHeight || html.clientHeight;
            var windowWidth = window.innerWidth || html.clientWidth;
            return targetElBCR.left >= 0 && targetElBCR.top >= 0 && targetElBCR.right <= windowWidth && targetElBCR.bottom <= windowHeight;
          }
        }]);

        return Positioning;
      }();

      var placementSeparator = /\s+/;
      var positionService = new Positioning();
      /*
       * Accept the placement array and applies the appropriate placement dependent on the viewport.
       * Returns the applied placement.
       * In case of auto placement, placements are selected in order
       *   'top', 'bottom', 'left', 'right',
       *   'top-left', 'top-right',
       *   'bottom-left', 'bottom-right',
       *   'left-top', 'left-bottom',
       *   'right-top', 'right-bottom'.
       * */

      function positionElements(hostElement, targetElement, placement, appendToBody, baseClass) {
        var placementVals = Array.isArray(placement) ? placement : placement.split(placementSeparator);
        var allowedPlacements = ['top', 'bottom', 'left', 'right', 'top-left', 'top-right', 'bottom-left', 'bottom-right', 'left-top', 'left-bottom', 'right-top', 'right-bottom'];
        var classList = targetElement.classList;

        var addClassesToTarget = function addClassesToTarget(targetPlacement) {
          var _targetPlacement$spli = targetPlacement.split('-'),
              _targetPlacement$spli2 = _slicedToArray(_targetPlacement$spli, 2),
              primary = _targetPlacement$spli2[0],
              secondary = _targetPlacement$spli2[1];

          var classes = [];

          if (baseClass) {
            classes.push("".concat(baseClass, "-").concat(primary));

            if (secondary) {
              classes.push("".concat(baseClass, "-").concat(primary, "-").concat(secondary));
            }

            classes.forEach(function (classname) {
              classList.add(classname);
            });
          }

          return classes;
        }; // Remove old placement classes to avoid issues


        if (baseClass) {
          allowedPlacements.forEach(function (placementToRemove) {
            classList.remove("".concat(baseClass, "-").concat(placementToRemove));
          });
        } // replace auto placement with other placements


        var hasAuto = placementVals.findIndex(function (val) {
          return val === 'auto';
        });

        if (hasAuto >= 0) {
          allowedPlacements.forEach(function (obj) {
            if (placementVals.find(function (val) {
              return val.search('^' + obj) !== -1;
            }) == null) {
              placementVals.splice(hasAuto++, 1, obj);
            }
          });
        } // coordinates where to position
        // Required for transform:


        var style = targetElement.style;
        style.position = 'absolute';
        style.top = '0';
        style.left = '0';
        style['will-change'] = 'transform';
        var testPlacement = null;
        var isInViewport = false;

        var _iterator7 = _createForOfIteratorHelper(placementVals),
            _step7;

        try {
          for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
            testPlacement = _step7.value;
            var addedClasses = addClassesToTarget(testPlacement);

            if (positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody)) {
              isInViewport = true;
              break;
            } // Remove the baseClasses for further calculation


            if (baseClass) {
              addedClasses.forEach(function (classname) {
                classList.remove(classname);
              });
            }
          }
        } catch (err) {
          _iterator7.e(err);
        } finally {
          _iterator7.f();
        }

        if (!isInViewport) {
          // If nothing match, the first placement is the default one
          testPlacement = placementVals[0];
          addClassesToTarget(testPlacement);
          positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody);
        }

        return testPlacement;
      }

      function NGB_DATEPICKER_PARSER_FORMATTER_FACTORY() {
        return new NgbDateISOParserFormatter();
      }
      /**
       * An abstract service for parsing and formatting dates for the
       * [`NgbInputDatepicker`](#/components/datepicker/api#NgbInputDatepicker) directive.
       * Converts between the internal `NgbDateStruct` model presentation and a `string` that is displayed in the
       * input element.
       *
       * When user types something in the input this service attempts to parse it into a `NgbDateStruct` object.
       * And vice versa, when users selects a date in the calendar with the mouse, it must be displayed as a `string`
       * in the input.
       *
       * Default implementation uses the ISO 8601 format, but you can provide another implementation via DI
       * to use an alternative string format or a custom parsing logic.
       *
       * See the [date format overview](#/components/datepicker/overview#date-model) for more details.
       */


      var NgbDateParserFormatter = function NgbDateParserFormatter() {
        _classCallCheck2(this, NgbDateParserFormatter);
      };

      NgbDateParserFormatter.ɵfac = function NgbDateParserFormatter_Factory(t) {
        return new (t || NgbDateParserFormatter)();
      };

      NgbDateParserFormatter.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: NGB_DATEPICKER_PARSER_FORMATTER_FACTORY,
        token: NgbDateParserFormatter,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDateParserFormatter, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root',
            useFactory: NGB_DATEPICKER_PARSER_FORMATTER_FACTORY
          }]
        }], null, null);
      })();

      var NgbDateISOParserFormatter = /*#__PURE__*/function (_NgbDateParserFormatt) {
        _inherits2(NgbDateISOParserFormatter, _NgbDateParserFormatt);

        var _super44 = _createSuper(NgbDateISOParserFormatter);

        function NgbDateISOParserFormatter() {
          _classCallCheck2(this, NgbDateISOParserFormatter);

          return _super44.apply(this, arguments);
        }

        _createClass2(NgbDateISOParserFormatter, [{
          key: "parse",
          value: function parse(value) {
            if (value != null) {
              var dateParts = value.trim().split('-');

              if (dateParts.length === 1 && isNumber(dateParts[0])) {
                return {
                  year: toInteger(dateParts[0]),
                  month: null,
                  day: null
                };
              } else if (dateParts.length === 2 && isNumber(dateParts[0]) && isNumber(dateParts[1])) {
                return {
                  year: toInteger(dateParts[0]),
                  month: toInteger(dateParts[1]),
                  day: null
                };
              } else if (dateParts.length === 3 && isNumber(dateParts[0]) && isNumber(dateParts[1]) && isNumber(dateParts[2])) {
                return {
                  year: toInteger(dateParts[0]),
                  month: toInteger(dateParts[1]),
                  day: toInteger(dateParts[2])
                };
              }
            }

            return null;
          }
        }, {
          key: "format",
          value: function format(date) {
            return date ? "".concat(date.year, "-").concat(isNumber(date.month) ? padNumber(date.month) : '', "-").concat(isNumber(date.day) ? padNumber(date.day) : '') : '';
          }
        }]);

        return NgbDateISOParserFormatter;
      }(NgbDateParserFormatter);

      NgbDateISOParserFormatter.ɵfac = function NgbDateISOParserFormatter_Factory(t) {
        return ɵNgbDateISOParserFormatter_BaseFactory(t || NgbDateISOParserFormatter);
      };

      NgbDateISOParserFormatter.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: NgbDateISOParserFormatter,
        factory: NgbDateISOParserFormatter.ɵfac
      });

      var ɵNgbDateISOParserFormatter_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbDateISOParserFormatter);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDateISOParserFormatter, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], null, null);
      })();
      /**
       * A configuration service for the [`NgbDatepickerInput`](#/components/datepicker/api#NgbDatepicker) component.
       *
       * You can inject this service, typically in your root component, and customize the values of its properties in
       * order to provide default values for all the datepicker inputs used in the application.
       *
       * @since 5.2.0
       */


      var NgbInputDatepickerConfig = /*#__PURE__*/function (_NgbDatepickerConfig) {
        _inherits2(NgbInputDatepickerConfig, _NgbDatepickerConfig);

        var _super45 = _createSuper(NgbInputDatepickerConfig);

        function NgbInputDatepickerConfig() {
          var _this80;

          _classCallCheck2(this, NgbInputDatepickerConfig);

          _this80 = _super45.apply(this, arguments);
          _this80.autoClose = true;
          _this80.placement = ['bottom-left', 'bottom-right', 'top-left', 'top-right'];
          _this80.restoreFocus = true;
          return _this80;
        }

        return NgbInputDatepickerConfig;
      }(NgbDatepickerConfig);

      NgbInputDatepickerConfig.ɵfac = function NgbInputDatepickerConfig_Factory(t) {
        return ɵNgbInputDatepickerConfig_BaseFactory(t || NgbInputDatepickerConfig);
      };

      NgbInputDatepickerConfig.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function NgbInputDatepickerConfig_Factory() {
          return new NgbInputDatepickerConfig();
        },
        token: NgbInputDatepickerConfig,
        providedIn: "root"
      });

      var ɵNgbInputDatepickerConfig_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbInputDatepickerConfig);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbInputDatepickerConfig, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], null, null);
      })();
      /**
       * A directive that allows to stick a datepicker popup to an input field.
       *
       * Manages interaction with the input field itself, does value formatting and provides forms integration.
       */


      var NgbInputDatepicker = /*#__PURE__*/function () {
        function NgbInputDatepicker(_parserFormatter, _elRef, _vcRef, _renderer, _cfr, _ngZone, _calendar, _dateAdapter, _document, _changeDetector, config) {
          var _this81 = this;

          _classCallCheck2(this, NgbInputDatepicker);

          this._parserFormatter = _parserFormatter;
          this._elRef = _elRef;
          this._vcRef = _vcRef;
          this._renderer = _renderer;
          this._cfr = _cfr;
          this._ngZone = _ngZone;
          this._calendar = _calendar;
          this._dateAdapter = _dateAdapter;
          this._document = _document;
          this._changeDetector = _changeDetector;
          this._cRef = null;
          this._disabled = false;
          this._elWithFocus = null;
          this._model = null;
          /**
           * An event emitted when user selects a date using keyboard or mouse.
           *
           * The payload of the event is currently selected `NgbDate`.
           *
           * @since 1.1.1
           */

          this.dateSelect = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * Event emitted right after the navigation happens and displayed month changes.
           *
           * See [`NgbDatepickerNavigateEvent`](#/components/datepicker/api#NgbDatepickerNavigateEvent) for the payload info.
           */

          this.navigate = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * An event fired after closing datepicker window.
           *
           * @since 4.2.0
           */

          this.closed = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();

          this._onChange = function (_) {};

          this._onTouched = function () {};

          this._validatorChange = function () {};

          ['autoClose', 'container', 'positionTarget', 'placement'].forEach(function (input) {
            return _this81[input] = config[input];
          });
          this._zoneSubscription = _ngZone.onStable.subscribe(function () {
            return _this81._updatePopupPosition();
          });
        }

        _createClass2(NgbInputDatepicker, [{
          key: "disabled",
          get: function get() {
            return this._disabled;
          },
          set: function set(value) {
            this._disabled = value === '' || value && value !== 'false';

            if (this.isOpen()) {
              this._cRef.instance.setDisabledState(this._disabled);
            }
          }
        }, {
          key: "registerOnChange",
          value: function registerOnChange(fn) {
            this._onChange = fn;
          }
        }, {
          key: "registerOnTouched",
          value: function registerOnTouched(fn) {
            this._onTouched = fn;
          }
        }, {
          key: "registerOnValidatorChange",
          value: function registerOnValidatorChange(fn) {
            this._validatorChange = fn;
          }
        }, {
          key: "setDisabledState",
          value: function setDisabledState(isDisabled) {
            this.disabled = isDisabled;
          }
        }, {
          key: "validate",
          value: function validate(c) {
            var value = c.value;

            if (value != null) {
              var ngbDate = this._fromDateStruct(this._dateAdapter.fromModel(value));

              if (!ngbDate) {
                return {
                  'ngbDate': {
                    invalid: value
                  }
                };
              }

              if (this.minDate && ngbDate.before(NgbDate.from(this.minDate))) {
                return {
                  'ngbDate': {
                    minDate: {
                      minDate: this.minDate,
                      actual: value
                    }
                  }
                };
              }

              if (this.maxDate && ngbDate.after(NgbDate.from(this.maxDate))) {
                return {
                  'ngbDate': {
                    maxDate: {
                      maxDate: this.maxDate,
                      actual: value
                    }
                  }
                };
              }
            }

            return null;
          }
        }, {
          key: "writeValue",
          value: function writeValue(value) {
            this._model = this._fromDateStruct(this._dateAdapter.fromModel(value));

            this._writeModelValue(this._model);
          }
        }, {
          key: "manualDateChange",
          value: function manualDateChange(value) {
            var updateView = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
            var inputValueChanged = value !== this._inputValue;

            if (inputValueChanged) {
              this._inputValue = value;
              this._model = this._fromDateStruct(this._parserFormatter.parse(value));
            }

            if (inputValueChanged || !updateView) {
              this._onChange(this._model ? this._dateAdapter.toModel(this._model) : value === '' ? null : value);
            }

            if (updateView && this._model) {
              this._writeModelValue(this._model);
            }
          }
        }, {
          key: "isOpen",
          value: function isOpen() {
            return !!this._cRef;
          }
          /**
           * Opens the datepicker popup.
           *
           * If the related form control contains a valid date, the corresponding month will be opened.
           */

        }, {
          key: "open",
          value: function open() {
            var _this82 = this;

            if (!this.isOpen()) {
              var cf = this._cfr.resolveComponentFactory(NgbDatepicker);

              this._cRef = this._vcRef.createComponent(cf);

              this._applyPopupStyling(this._cRef.location.nativeElement);

              this._applyDatepickerInputs(this._cRef.instance);

              this._subscribeForDatepickerOutputs(this._cRef.instance);

              this._cRef.instance.ngOnInit();

              this._cRef.instance.writeValue(this._dateAdapter.toModel(this._model)); // date selection event handling


              this._cRef.instance.registerOnChange(function (selectedDate) {
                _this82.writeValue(selectedDate);

                _this82._onChange(selectedDate);

                _this82._onTouched();
              });

              this._cRef.changeDetectorRef.detectChanges();

              this._cRef.instance.setDisabledState(this.disabled);

              if (this.container === 'body') {
                this._document.querySelector(this.container).appendChild(this._cRef.location.nativeElement);
              } // focus handling


              this._elWithFocus = this._document.activeElement;
              ngbFocusTrap(this._ngZone, this._cRef.location.nativeElement, this.closed, true);

              this._cRef.instance.focus();

              ngbAutoClose(this._ngZone, this._document, this.autoClose, function () {
                return _this82.close();
              }, this.closed, [], [this._elRef.nativeElement, this._cRef.location.nativeElement]);
            }
          }
          /**
           * Closes the datepicker popup.
           */

        }, {
          key: "close",
          value: function close() {
            if (this.isOpen()) {
              this._vcRef.remove(this._vcRef.indexOf(this._cRef.hostView));

              this._cRef = null;
              this.closed.emit();

              this._changeDetector.markForCheck(); // restore focus


              var elementToFocus = this._elWithFocus;

              if (isString(this.restoreFocus)) {
                elementToFocus = this._document.querySelector(this.restoreFocus);
              } else if (this.restoreFocus !== undefined) {
                elementToFocus = this.restoreFocus;
              } // in IE document.activeElement can contain an object without 'focus()' sometimes


              if (elementToFocus && elementToFocus['focus']) {
                elementToFocus.focus();
              } else {
                this._document.body.focus();
              }
            }
          }
          /**
           * Toggles the datepicker popup.
           */

        }, {
          key: "toggle",
          value: function toggle() {
            if (this.isOpen()) {
              this.close();
            } else {
              this.open();
            }
          }
          /**
           * Navigates to the provided date.
           *
           * With the default calendar we use ISO 8601: 'month' is 1=Jan ... 12=Dec.
           * If nothing or invalid date provided calendar will open current month.
           *
           * Use the `[startDate]` input as an alternative.
           */

        }, {
          key: "navigateTo",
          value: function navigateTo(date) {
            if (this.isOpen()) {
              this._cRef.instance.navigateTo(date);
            }
          }
        }, {
          key: "onBlur",
          value: function onBlur() {
            this._onTouched();
          }
        }, {
          key: "onFocus",
          value: function onFocus() {
            this._elWithFocus = this._elRef.nativeElement;
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            if (changes['minDate'] || changes['maxDate']) {
              this._validatorChange();

              if (this.isOpen()) {
                if (changes['minDate']) {
                  this._cRef.instance.minDate = this.minDate;
                }

                if (changes['maxDate']) {
                  this._cRef.instance.maxDate = this.maxDate;
                }

                this._cRef.instance.ngOnChanges(changes);
              }
            }

            if (changes['datepickerClass']) {
              var _changes$datepickerCl = changes['datepickerClass'],
                  currentValue = _changes$datepickerCl.currentValue,
                  previousValue = _changes$datepickerCl.previousValue;

              this._applyPopupClass(currentValue, previousValue);
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.close();

            this._zoneSubscription.unsubscribe();
          }
        }, {
          key: "_applyDatepickerInputs",
          value: function _applyDatepickerInputs(datepickerInstance) {
            var _this83 = this;

            ['dayTemplate', 'dayTemplateData', 'displayMonths', 'firstDayOfWeek', 'footerTemplate', 'markDisabled', 'minDate', 'maxDate', 'navigation', 'outsideDays', 'showNavigation', 'showWeekNumbers', 'weekdays'].forEach(function (optionName) {
              if (_this83[optionName] !== undefined) {
                datepickerInstance[optionName] = _this83[optionName];
              }
            });
            datepickerInstance.startDate = this.startDate || this._model;
          }
        }, {
          key: "_applyPopupClass",
          value: function _applyPopupClass(newClass, oldClass) {
            var _a;

            var popupEl = (_a = this._cRef) === null || _a === void 0 ? void 0 : _a.location.nativeElement;

            if (popupEl) {
              if (newClass) {
                this._renderer.addClass(popupEl, newClass);
              }

              if (oldClass) {
                this._renderer.removeClass(popupEl, oldClass);
              }
            }
          }
        }, {
          key: "_applyPopupStyling",
          value: function _applyPopupStyling(nativeElement) {
            this._renderer.addClass(nativeElement, 'dropdown-menu');

            this._renderer.addClass(nativeElement, 'show');

            if (this.container === 'body') {
              this._renderer.addClass(nativeElement, 'ngb-dp-body');
            }

            this._applyPopupClass(this.datepickerClass);
          }
        }, {
          key: "_subscribeForDatepickerOutputs",
          value: function _subscribeForDatepickerOutputs(datepickerInstance) {
            var _this84 = this;

            datepickerInstance.navigate.subscribe(function (navigateEvent) {
              return _this84.navigate.emit(navigateEvent);
            });
            datepickerInstance.dateSelect.subscribe(function (date) {
              _this84.dateSelect.emit(date);

              if (_this84.autoClose === true || _this84.autoClose === 'inside') {
                _this84.close();
              }
            });
          }
        }, {
          key: "_writeModelValue",
          value: function _writeModelValue(model) {
            var value = this._parserFormatter.format(model);

            this._inputValue = value;

            this._renderer.setProperty(this._elRef.nativeElement, 'value', value);

            if (this.isOpen()) {
              this._cRef.instance.writeValue(this._dateAdapter.toModel(model));

              this._onTouched();
            }
          }
        }, {
          key: "_fromDateStruct",
          value: function _fromDateStruct(date) {
            var ngbDate = date ? new NgbDate(date.year, date.month, date.day) : null;
            return this._calendar.isValid(ngbDate) ? ngbDate : null;
          }
        }, {
          key: "_updatePopupPosition",
          value: function _updatePopupPosition() {
            if (!this._cRef) {
              return;
            }

            var hostElement;

            if (isString(this.positionTarget)) {
              hostElement = this._document.querySelector(this.positionTarget);
            } else if (this.positionTarget instanceof HTMLElement) {
              hostElement = this.positionTarget;
            } else {
              hostElement = this._elRef.nativeElement;
            }

            if (this.positionTarget && !hostElement) {
              throw new Error('ngbDatepicker could not find element declared in [positionTarget] to position against.');
            }

            positionElements(hostElement, this._cRef.location.nativeElement, this.placement, this.container === 'body');
          }
        }]);

        return NgbInputDatepicker;
      }();

      NgbInputDatepicker.ɵfac = function NgbInputDatepicker_Factory(t) {
        return new (t || NgbInputDatepicker)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDateParserFormatter), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbCalendar), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDateAdapter), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbInputDatepickerConfig));
      };

      NgbInputDatepicker.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbInputDatepicker,
        selectors: [["input", "ngbDatepicker", ""]],
        hostVars: 1,
        hostBindings: function NgbInputDatepicker_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("input", function NgbInputDatepicker_input_HostBindingHandler($event) {
              return ctx.manualDateChange($event.target.value);
            })("change", function NgbInputDatepicker_change_HostBindingHandler($event) {
              return ctx.manualDateChange($event.target.value, true);
            })("focus", function NgbInputDatepicker_focus_HostBindingHandler() {
              return ctx.onFocus();
            })("blur", function NgbInputDatepicker_blur_HostBindingHandler() {
              return ctx.onBlur();
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("disabled", ctx.disabled);
          }
        },
        inputs: {
          disabled: "disabled",
          autoClose: "autoClose",
          datepickerClass: "datepickerClass",
          dayTemplate: "dayTemplate",
          dayTemplateData: "dayTemplateData",
          displayMonths: "displayMonths",
          firstDayOfWeek: "firstDayOfWeek",
          footerTemplate: "footerTemplate",
          markDisabled: "markDisabled",
          minDate: "minDate",
          maxDate: "maxDate",
          navigation: "navigation",
          outsideDays: "outsideDays",
          placement: "placement",
          restoreFocus: "restoreFocus",
          showWeekNumbers: "showWeekNumbers",
          startDate: "startDate",
          container: "container",
          positionTarget: "positionTarget",
          weekdays: "weekdays"
        },
        outputs: {
          dateSelect: "dateSelect",
          navigate: "navigate",
          closed: "closed"
        },
        exportAs: ["ngbDatepicker"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALUE_ACCESSOR"],
          useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
            return NgbInputDatepicker;
          }),
          multi: true
        }, {
          provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALIDATORS"],
          useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
            return NgbInputDatepicker;
          }),
          multi: true
        }, {
          provide: NgbDatepickerConfig,
          useExisting: NgbInputDatepickerConfig
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
      });

      NgbInputDatepicker.ctorParameters = function () {
        return [{
          type: NgbDateParserFormatter
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }, {
          type: NgbCalendar
        }, {
          type: NgbDateAdapter
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }, {
          type: NgbInputDatepickerConfig
        }];
      };

      NgbInputDatepicker.propDecorators = {
        autoClose: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        datepickerClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        dayTemplate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        dayTemplateData: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        displayMonths: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        firstDayOfWeek: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        footerTemplate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        markDisabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        minDate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        maxDate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        navigation: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        outsideDays: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        placement: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        restoreFocus: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        showWeekNumbers: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        startDate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        container: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        positionTarget: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        weekdays: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        dateSelect: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        navigate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        closed: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        disabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbInputDatepicker, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'input[ngbDatepicker]',
            exportAs: 'ngbDatepicker',
            host: {
              '(input)': 'manualDateChange($event.target.value)',
              '(change)': 'manualDateChange($event.target.value, true)',
              '(focus)': 'onFocus()',
              '(blur)': 'onBlur()',
              '[disabled]': 'disabled'
            },
            providers: [{
              provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALUE_ACCESSOR"],
              useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
                return NgbInputDatepicker;
              }),
              multi: true
            }, {
              provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALIDATORS"],
              useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
                return NgbInputDatepicker;
              }),
              multi: true
            }, {
              provide: NgbDatepickerConfig,
              useExisting: NgbInputDatepickerConfig
            }]
          }]
        }], function () {
          return [{
            type: NgbDateParserFormatter
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }, {
            type: NgbCalendar
          }, {
            type: NgbDateAdapter
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }, {
            type: NgbInputDatepickerConfig
          }];
        }, {
          dateSelect: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          navigate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          closed: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          disabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          autoClose: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          datepickerClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          dayTemplate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          dayTemplateData: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          displayMonths: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          firstDayOfWeek: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          footerTemplate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          markDisabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          minDate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          maxDate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          navigation: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          outsideDays: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          placement: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          restoreFocus: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          showWeekNumbers: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          startDate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          container: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          positionTarget: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          weekdays: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var NgbDatepickerDayView = /*#__PURE__*/function () {
        function NgbDatepickerDayView(i18n) {
          _classCallCheck2(this, NgbDatepickerDayView);

          this.i18n = i18n;
        }

        _createClass2(NgbDatepickerDayView, [{
          key: "isMuted",
          value: function isMuted() {
            return !this.selected && (this.date.month !== this.currentMonth || this.disabled);
          }
        }]);

        return NgbDatepickerDayView;
      }();

      NgbDatepickerDayView.ɵfac = function NgbDatepickerDayView_Factory(t) {
        return new (t || NgbDatepickerDayView)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDatepickerI18n));
      };

      NgbDatepickerDayView.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: NgbDatepickerDayView,
        selectors: [["", "ngbDatepickerDayView", ""]],
        hostAttrs: [1, "btn-light"],
        hostVars: 10,
        hostBindings: function NgbDatepickerDayView_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("bg-primary", ctx.selected)("text-white", ctx.selected)("text-muted", ctx.isMuted())("outside", ctx.isMuted())("active", ctx.focused);
          }
        },
        inputs: {
          currentMonth: "currentMonth",
          date: "date",
          disabled: "disabled",
          focused: "focused",
          selected: "selected"
        },
        attrs: _c20,
        decls: 1,
        vars: 1,
        template: function NgbDatepickerDayView_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](0);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx.i18n.getDayNumerals(ctx.date));
          }
        },
        styles: ["[ngbDatepickerDayView]{text-align:center;width:2rem;height:2rem;line-height:2rem;border-radius:.25rem;background:transparent}[ngbDatepickerDayView].outside{opacity:.5}"],
        encapsulation: 2,
        changeDetection: 0
      });

      NgbDatepickerDayView.ctorParameters = function () {
        return [{
          type: NgbDatepickerI18n
        }];
      };

      NgbDatepickerDayView.propDecorators = {
        currentMonth: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        date: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        disabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        focused: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        selected: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerDayView, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: '[ngbDatepickerDayView]',
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            host: {
              'class': 'btn-light',
              '[class.bg-primary]': 'selected',
              '[class.text-white]': 'selected',
              '[class.text-muted]': 'isMuted()',
              '[class.outside]': 'isMuted()',
              '[class.active]': 'focused'
            },
            template: "{{ i18n.getDayNumerals(date) }}",
            styles: ["[ngbDatepickerDayView]{text-align:center;width:2rem;height:2rem;line-height:2rem;border-radius:.25rem;background:transparent}[ngbDatepickerDayView].outside{opacity:.5}"]
          }]
        }], function () {
          return [{
            type: NgbDatepickerI18n
          }];
        }, {
          currentMonth: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          date: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          disabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          focused: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          selected: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var NgbDatepickerNavigationSelect = /*#__PURE__*/function () {
        function NgbDatepickerNavigationSelect(i18n, _renderer) {
          _classCallCheck2(this, NgbDatepickerNavigationSelect);

          this.i18n = i18n;
          this._renderer = _renderer;
          this.select = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this._month = -1;
          this._year = -1;
        }

        _createClass2(NgbDatepickerNavigationSelect, [{
          key: "changeMonth",
          value: function changeMonth(month) {
            this.select.emit(new NgbDate(this.date.year, toInteger(month), 1));
          }
        }, {
          key: "changeYear",
          value: function changeYear(year) {
            this.select.emit(new NgbDate(toInteger(year), this.date.month, 1));
          }
        }, {
          key: "ngAfterViewChecked",
          value: function ngAfterViewChecked() {
            if (this.date) {
              if (this.date.month !== this._month) {
                this._month = this.date.month;

                this._renderer.setProperty(this.monthSelect.nativeElement, 'value', this._month);
              }

              if (this.date.year !== this._year) {
                this._year = this.date.year;

                this._renderer.setProperty(this.yearSelect.nativeElement, 'value', this._year);
              }
            }
          }
        }]);

        return NgbDatepickerNavigationSelect;
      }();

      NgbDatepickerNavigationSelect.ɵfac = function NgbDatepickerNavigationSelect_Factory(t) {
        return new (t || NgbDatepickerNavigationSelect)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDatepickerI18n), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]));
      };

      NgbDatepickerNavigationSelect.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: NgbDatepickerNavigationSelect,
        selectors: [["ngb-datepicker-navigation-select"]],
        viewQuery: function NgbDatepickerNavigationSelect_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](_c21, 3, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](_c22, 3, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.monthSelect = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.yearSelect = _t.first);
          }
        },
        inputs: {
          date: "date",
          disabled: "disabled",
          months: "months",
          years: "years"
        },
        outputs: {
          select: "select"
        },
        decls: 6,
        vars: 4,
        consts: function consts() {
          var i18n_23;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_datepicker_select_month$$FESM2015_NG_BOOTSTRAP_JS_24 = goog.getMsg("Select month");
            i18n_23 = MSG_EXTERNAL_ngb_datepicker_select_month$$FESM2015_NG_BOOTSTRAP_JS_24;
          } else {
            i18n_23 = $localize(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral([":@@ngb.datepicker.select-month\u241F1dbc84807f35518112f62e5775d1daebd3d8462b\u241F2253869508135064750:Select month"])));
          }

          var i18n_25;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_datepicker_select_month$$FESM2015_NG_BOOTSTRAP_JS_26 = goog.getMsg("Select month");
            i18n_25 = MSG_EXTERNAL_ngb_datepicker_select_month$$FESM2015_NG_BOOTSTRAP_JS_26;
          } else {
            i18n_25 = $localize(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral([":@@ngb.datepicker.select-month\u241F1dbc84807f35518112f62e5775d1daebd3d8462b\u241F2253869508135064750:Select month"])));
          }

          var i18n_27;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_datepicker_select_year$$FESM2015_NG_BOOTSTRAP_JS_28 = goog.getMsg("Select year");
            i18n_27 = MSG_EXTERNAL_ngb_datepicker_select_year$$FESM2015_NG_BOOTSTRAP_JS_28;
          } else {
            i18n_27 = $localize(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral([":@@ngb.datepicker.select-year\u241F8ceb09d002bf0c5d1cac171dfbffe1805d2b3962\u241F8852264961585484321:Select year"])));
          }

          var i18n_29;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_datepicker_select_year$$FESM2015_NG_BOOTSTRAP_JS_30 = goog.getMsg("Select year");
            i18n_29 = MSG_EXTERNAL_ngb_datepicker_select_year$$FESM2015_NG_BOOTSTRAP_JS_30;
          } else {
            i18n_29 = $localize(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral([":@@ngb.datepicker.select-year\u241F8ceb09d002bf0c5d1cac171dfbffe1805d2b3962\u241F8852264961585484321:Select year"])));
          }

          return [["aria-label", i18n_23, "title", i18n_25, 1, "custom-select", 3, "disabled", "change"], ["month", ""], [3, "value", 4, "ngFor", "ngForOf"], ["aria-label", i18n_27, "title", i18n_29, 1, "custom-select", 3, "disabled", "change"], ["year", ""], [3, "value"]];
        },
        template: function NgbDatepickerNavigationSelect_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "select", 0, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function NgbDatepickerNavigationSelect_Template_select_change_0_listener($event) {
              return ctx.changeMonth($event.target.value);
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbDatepickerNavigationSelect_option_2_Template, 2, 3, "option", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "select", 3, 4);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function NgbDatepickerNavigationSelect_Template_select_change_3_listener($event) {
              return ctx.changeYear($event.target.value);
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](5, NgbDatepickerNavigationSelect_option_5_Template, 2, 2, "option", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx.disabled);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.months);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx.disabled);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.years);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NgSelectOption"], _angular_forms__WEBPACK_IMPORTED_MODULE_4__["ɵangular_packages_forms_forms_x"]],
        styles: ["ngb-datepicker-navigation-select>.custom-select{flex:1 1 auto;padding:0 .5rem;font-size:.875rem;height:1.85rem}ngb-datepicker-navigation-select>.custom-select:focus{z-index:1}ngb-datepicker-navigation-select>.custom-select::-ms-value{background-color:transparent!important}"],
        encapsulation: 2,
        changeDetection: 0
      });

      NgbDatepickerNavigationSelect.ctorParameters = function () {
        return [{
          type: NgbDatepickerI18n
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }];
      };

      NgbDatepickerNavigationSelect.propDecorators = {
        date: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        disabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        months: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        years: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        select: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        monthSelect: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
          args: ['month', {
            "static": true,
            read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }]
        }],
        yearSelect: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
          args: ['year', {
            "static": true,
            read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerNavigationSelect, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'ngb-datepicker-navigation-select',
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            template: "\n    <select #month\n      [disabled]=\"disabled\"\n      class=\"custom-select\"\n      i18n-aria-label=\"@@ngb.datepicker.select-month\" aria-label=\"Select month\"\n      i18n-title=\"@@ngb.datepicker.select-month\" title=\"Select month\"\n      (change)=\"changeMonth($any($event).target.value)\">\n        <option *ngFor=\"let m of months\" [attr.aria-label]=\"i18n.getMonthFullName(m, date?.year)\"\n                [value]=\"m\">{{ i18n.getMonthShortName(m, date?.year) }}</option>\n    </select><select #year\n      [disabled]=\"disabled\"\n      class=\"custom-select\"\n      i18n-aria-label=\"@@ngb.datepicker.select-year\" aria-label=\"Select year\"\n      i18n-title=\"@@ngb.datepicker.select-year\" title=\"Select year\"\n      (change)=\"changeYear($any($event).target.value)\">\n        <option *ngFor=\"let y of years\" [value]=\"y\">{{ i18n.getYearNumerals(y) }}</option>\n    </select>\n  ",
            styles: ["ngb-datepicker-navigation-select>.custom-select{flex:1 1 auto;padding:0 .5rem;font-size:.875rem;height:1.85rem}ngb-datepicker-navigation-select>.custom-select:focus{z-index:1}ngb-datepicker-navigation-select>.custom-select::-ms-value{background-color:transparent!important}"]
          }]
        }], function () {
          return [{
            type: NgbDatepickerI18n
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }];
        }, {
          select: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          date: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          disabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          months: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          years: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          monthSelect: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
            args: ['month', {
              "static": true,
              read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
            }]
          }],
          yearSelect: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
            args: ['year', {
              "static": true,
              read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
            }]
          }]
        });
      })();

      var NgbCalendarHijri = /*#__PURE__*/function (_NgbCalendar2) {
        _inherits2(NgbCalendarHijri, _NgbCalendar2);

        var _super46 = _createSuper(NgbCalendarHijri);

        function NgbCalendarHijri() {
          _classCallCheck2(this, NgbCalendarHijri);

          return _super46.apply(this, arguments);
        }

        _createClass2(NgbCalendarHijri, [{
          key: "getDaysPerWeek",
          value: function getDaysPerWeek() {
            return 7;
          }
        }, {
          key: "getMonths",
          value: function getMonths() {
            return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
          }
        }, {
          key: "getWeeksPerMonth",
          value: function getWeeksPerMonth() {
            return 6;
          }
        }, {
          key: "getNext",
          value: function getNext(date) {
            var period = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'd';
            var number = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
            date = new NgbDate(date.year, date.month, date.day);

            switch (period) {
              case 'y':
                date = this._setYear(date, date.year + number);
                date.month = 1;
                date.day = 1;
                return date;

              case 'm':
                date = this._setMonth(date, date.month + number);
                date.day = 1;
                return date;

              case 'd':
                return this._setDay(date, date.day + number);

              default:
                return date;
            }
          }
        }, {
          key: "getPrev",
          value: function getPrev(date) {
            var period = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'd';
            var number = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
            return this.getNext(date, period, -number);
          }
        }, {
          key: "getWeekday",
          value: function getWeekday(date) {
            var day = this.toGregorian(date).getDay(); // in JS Date Sun=0, in ISO 8601 Sun=7

            return day === 0 ? 7 : day;
          }
        }, {
          key: "getWeekNumber",
          value: function getWeekNumber(week, firstDayOfWeek) {
            // in JS Date Sun=0, in ISO 8601 Sun=7
            if (firstDayOfWeek === 7) {
              firstDayOfWeek = 0;
            }

            var thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;
            var date = week[thursdayIndex];
            var jsDate = this.toGregorian(date);
            jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday

            var time = jsDate.getTime();
            var MuhDate = this.toGregorian(new NgbDate(date.year, 1, 1)); // Compare with Muharram 1

            return Math.floor(Math.round((time - MuhDate.getTime()) / 86400000) / 7) + 1;
          }
        }, {
          key: "getToday",
          value: function getToday() {
            return this.fromGregorian(new Date());
          }
        }, {
          key: "isValid",
          value: function isValid(date) {
            return date != null && isNumber(date.year) && isNumber(date.month) && isNumber(date.day) && !isNaN(this.toGregorian(date).getTime());
          }
        }, {
          key: "_setDay",
          value: function _setDay(date, day) {
            day = +day;
            var mDays = this.getDaysPerMonth(date.month, date.year);

            if (day <= 0) {
              while (day <= 0) {
                date = this._setMonth(date, date.month - 1);
                mDays = this.getDaysPerMonth(date.month, date.year);
                day += mDays;
              }
            } else if (day > mDays) {
              while (day > mDays) {
                day -= mDays;
                date = this._setMonth(date, date.month + 1);
                mDays = this.getDaysPerMonth(date.month, date.year);
              }
            }

            date.day = day;
            return date;
          }
        }, {
          key: "_setMonth",
          value: function _setMonth(date, month) {
            month = +month;
            date.year = date.year + Math.floor((month - 1) / 12);
            date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1;
            return date;
          }
        }, {
          key: "_setYear",
          value: function _setYear(date, year) {
            date.year = +year;
            return date;
          }
        }]);

        return NgbCalendarHijri;
      }(NgbCalendar);

      NgbCalendarHijri.ɵfac = function NgbCalendarHijri_Factory(t) {
        return ɵNgbCalendarHijri_BaseFactory(t || NgbCalendarHijri);
      };

      NgbCalendarHijri.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: NgbCalendarHijri,
        factory: NgbCalendarHijri.ɵfac
      });

      var ɵNgbCalendarHijri_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbCalendarHijri);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCalendarHijri, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], null, null);
      })();
      /**
       * Checks if islamic year is a leap year
       */


      function isIslamicLeapYear(hYear) {
        return (14 + 11 * hYear) % 30 < 11;
      }
      /**
       * Checks if gregorian years is a leap year
       */


      function isGregorianLeapYear$1(gDate) {
        var year = gDate.getFullYear();
        return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
      }
      /**
       * Returns the start of Hijri Month.
       * `hMonth` is 0 for Muharram, 1 for Safar, etc.
       * `hYear` is any Hijri hYear.
       */


      function getIslamicMonthStart(hYear, hMonth) {
        return Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30.0);
      }
      /**
       * Returns the start of Hijri year.
       * `year` is any Hijri year.
       */


      function getIslamicYearStart(year) {
        return (year - 1) * 354 + Math.floor((3 + 11 * year) / 30.0);
      }

      function mod$1(a, b) {
        return a - b * Math.floor(a / b);
      }
      /**
       * The civil calendar is one type of Hijri calendars used in islamic countries.
       * Uses a fixed cycle of alternating 29- and 30-day months,
       * with a leap day added to the last month of 11 out of every 30 years.
       * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types
       * All the calculations here are based on the equations from "Calendrical Calculations" By Edward M. Reingold, Nachum
       * Dershowitz.
       */


      var GREGORIAN_EPOCH$1 = 1721425.5;
      var ISLAMIC_EPOCH = 1948439.5;

      var NgbCalendarIslamicCivil = /*#__PURE__*/function (_NgbCalendarHijri) {
        _inherits2(NgbCalendarIslamicCivil, _NgbCalendarHijri);

        var _super47 = _createSuper(NgbCalendarIslamicCivil);

        function NgbCalendarIslamicCivil() {
          _classCallCheck2(this, NgbCalendarIslamicCivil);

          return _super47.apply(this, arguments);
        }

        _createClass2(NgbCalendarIslamicCivil, [{
          key: "fromGregorian",
          value:
          /**
           * Returns the equivalent islamic(civil) date value for a give input Gregorian date.
           * `gDate` is a JS Date to be converted to Hijri.
           */
          function fromGregorian(gDate) {
            var gYear = gDate.getFullYear(),
                gMonth = gDate.getMonth(),
                gDay = gDate.getDate();
            var julianDay = GREGORIAN_EPOCH$1 - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) + -Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) + Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear$1(gDate) ? -1 : -2) + gDay);
            julianDay = Math.floor(julianDay) + 0.5;
            var days = julianDay - ISLAMIC_EPOCH;
            var hYear = Math.floor((30 * days + 10646) / 10631.0);
            var hMonth = Math.ceil((days - 29 - getIslamicYearStart(hYear)) / 29.5);
            hMonth = Math.min(hMonth, 11);
            var hDay = Math.ceil(days - getIslamicMonthStart(hYear, hMonth)) + 1;
            return new NgbDate(hYear, hMonth + 1, hDay);
          }
          /**
           * Returns the equivalent JS date value for a give input islamic(civil) date.
           * `hDate` is an islamic(civil) date to be converted to Gregorian.
           */

        }, {
          key: "toGregorian",
          value: function toGregorian(hDate) {
            var hYear = hDate.year;
            var hMonth = hDate.month - 1;
            var hDay = hDate.day;
            var julianDay = hDay + Math.ceil(29.5 * hMonth) + (hYear - 1) * 354 + Math.floor((3 + 11 * hYear) / 30) + ISLAMIC_EPOCH - 1;
            var wjd = Math.floor(julianDay - 0.5) + 0.5,
                depoch = wjd - GREGORIAN_EPOCH$1,
                quadricent = Math.floor(depoch / 146097),
                dqc = mod$1(depoch, 146097),
                cent = Math.floor(dqc / 36524),
                dcent = mod$1(dqc, 36524),
                quad = Math.floor(dcent / 1461),
                dquad = mod$1(dcent, 1461),
                yindex = Math.floor(dquad / 365);
            var year = quadricent * 400 + cent * 100 + quad * 4 + yindex;

            if (!(cent === 4 || yindex === 4)) {
              year++;
            }

            var gYearStart = GREGORIAN_EPOCH$1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + Math.floor((year - 1) / 400);
            var yearday = wjd - gYearStart;
            var tjd = GREGORIAN_EPOCH$1 - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + Math.floor((year - 1) / 400) + Math.floor(739 / 12 + (isGregorianLeapYear$1(new Date(year, 3, 1)) ? -1 : -2) + 1);
            var leapadj = wjd < tjd ? 0 : isGregorianLeapYear$1(new Date(year, 3, 1)) ? 1 : 2;
            var month = Math.floor(((yearday + leapadj) * 12 + 373) / 367);
            var tjd2 = GREGORIAN_EPOCH$1 - 1 + 365 * (year - 1) + Math.floor((year - 1) / 4) - Math.floor((year - 1) / 100) + Math.floor((year - 1) / 400) + Math.floor((367 * month - 362) / 12 + (month <= 2 ? 0 : isGregorianLeapYear$1(new Date(year, month - 1, 1)) ? -1 : -2) + 1);
            var day = wjd - tjd2 + 1;
            return new Date(year, month - 1, day);
          }
          /**
           * Returns the number of days in a specific Hijri month.
           * `month` is 1 for Muharram, 2 for Safar, etc.
           * `year` is any Hijri year.
           */

        }, {
          key: "getDaysPerMonth",
          value: function getDaysPerMonth(month, year) {
            year = year + Math.floor(month / 13);
            month = (month - 1) % 12 + 1;
            var length = 29 + month % 2;

            if (month === 12 && isIslamicLeapYear(year)) {
              length++;
            }

            return length;
          }
        }]);

        return NgbCalendarIslamicCivil;
      }(NgbCalendarHijri);

      NgbCalendarIslamicCivil.ɵfac = function NgbCalendarIslamicCivil_Factory(t) {
        return ɵNgbCalendarIslamicCivil_BaseFactory(t || NgbCalendarIslamicCivil);
      };

      NgbCalendarIslamicCivil.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: NgbCalendarIslamicCivil,
        factory: NgbCalendarIslamicCivil.ɵfac
      });

      var ɵNgbCalendarIslamicCivil_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbCalendarIslamicCivil);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCalendarIslamicCivil, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], null, null);
      })();
      /**
       * Umalqura calendar is one type of Hijri calendars used in islamic countries.
       * This Calendar is used by Saudi Arabia for administrative purpose.
       * Unlike tabular calendars, the algorithm involves astronomical calculation, but it's still deterministic.
       * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types
       */


      var GREGORIAN_FIRST_DATE = new Date(1882, 10, 12);
      var GREGORIAN_LAST_DATE = new Date(2174, 10, 25);
      var HIJRI_BEGIN = 1300;
      var HIJRI_END = 1600;
      var ONE_DAY = 1000 * 60 * 60 * 24;
      var MONTH_LENGTH = [// 1300-1304
      '101010101010', '110101010100', '111011001001', '011011010100', '011011101010', // 1305-1309
      '001101101100', '101010101101', '010101010101', '011010101001', '011110010010', // 1310-1314
      '101110101001', '010111010100', '101011011010', '010101011100', '110100101101', // 1315-1319
      '011010010101', '011101001010', '101101010100', '101101101010', '010110101101', // 1320-1324
      '010010101110', '101001001111', '010100010111', '011010001011', '011010100101', // 1325-1329
      '101011010101', '001011010110', '100101011011', '010010011101', '101001001101', // 1330-1334
      '110100100110', '110110010101', '010110101100', '100110110110', '001010111010', // 1335-1339
      '101001011011', '010100101011', '101010010101', '011011001010', '101011101001', // 1340-1344
      '001011110100', '100101110110', '001010110110', '100101010110', '101011001010', // 1345-1349
      '101110100100', '101111010010', '010111011001', '001011011100', '100101101101', // 1350-1354
      '010101001101', '101010100101', '101101010010', '101110100101', '010110110100', // 1355-1359
      '100110110110', '010101010111', '001010010111', '010101001011', '011010100011', // 1360-1364
      '011101010010', '101101100101', '010101101010', '101010101011', '010100101011', // 1365-1369
      '110010010101', '110101001010', '110110100101', '010111001010', '101011010110', // 1370-1374
      '100101010111', '010010101011', '100101001011', '101010100101', '101101010010', // 1375-1379
      '101101101010', '010101110101', '001001110110', '100010110111', '010001011011', // 1380-1384
      '010101010101', '010110101001', '010110110100', '100111011010', '010011011101', // 1385-1389
      '001001101110', '100100110110', '101010101010', '110101010100', '110110110010', // 1390-1394
      '010111010101', '001011011010', '100101011011', '010010101011', '101001010101', // 1395-1399
      '101101001001', '101101100100', '101101110001', '010110110100', '101010110101', // 1400-1404
      '101001010101', '110100100101', '111010010010', '111011001001', '011011010100', // 1405-1409
      '101011101001', '100101101011', '010010101011', '101010010011', '110101001001', // 1410-1414
      '110110100100', '110110110010', '101010111001', '010010111010', '101001011011', // 1415-1419
      '010100101011', '101010010101', '101100101010', '101101010101', '010101011100', // 1420-1424
      '010010111101', '001000111101', '100100011101', '101010010101', '101101001010', // 1425-1429
      '101101011010', '010101101101', '001010110110', '100100111011', '010010011011', // 1430-1434
      '011001010101', '011010101001', '011101010100', '101101101010', '010101101100', // 1435-1439
      '101010101101', '010101010101', '101100101001', '101110010010', '101110101001', // 1440-1444
      '010111010100', '101011011010', '010101011010', '101010101011', '010110010101', // 1445-1449
      '011101001001', '011101100100', '101110101010', '010110110101', '001010110110', // 1450-1454
      '101001010110', '111001001101', '101100100101', '101101010010', '101101101010', // 1455-1459
      '010110101101', '001010101110', '100100101111', '010010010111', '011001001011', // 1460-1464
      '011010100101', '011010101100', '101011010110', '010101011101', '010010011101', // 1465-1469
      '101001001101', '110100010110', '110110010101', '010110101010', '010110110101', // 1470-1474
      '001011011010', '100101011011', '010010101101', '010110010101', '011011001010', // 1475-1479
      '011011100100', '101011101010', '010011110101', '001010110110', '100101010110', // 1480-1484
      '101010101010', '101101010100', '101111010010', '010111011001', '001011101010', // 1485-1489
      '100101101101', '010010101101', '101010010101', '101101001010', '101110100101', // 1490-1494
      '010110110010', '100110110101', '010011010110', '101010010111', '010101000111', // 1495-1499
      '011010010011', '011101001001', '101101010101', '010101101010', '101001101011', // 1500-1504
      '010100101011', '101010001011', '110101000110', '110110100011', '010111001010', // 1505-1509
      '101011010110', '010011011011', '001001101011', '100101001011', '101010100101', // 1510-1514
      '101101010010', '101101101001', '010101110101', '000101110110', '100010110111', // 1515-1519
      '001001011011', '010100101011', '010101100101', '010110110100', '100111011010', // 1520-1524
      '010011101101', '000101101101', '100010110110', '101010100110', '110101010010', // 1525-1529
      '110110101001', '010111010100', '101011011010', '100101011011', '010010101011', // 1530-1534
      '011001010011', '011100101001', '011101100010', '101110101001', '010110110010', // 1535-1539
      '101010110101', '010101010101', '101100100101', '110110010010', '111011001001', // 1540-1544
      '011011010010', '101011101001', '010101101011', '010010101011', '101001010101', // 1545-1549
      '110100101001', '110101010100', '110110101010', '100110110101', '010010111010', // 1550-1554
      '101000111011', '010010011011', '101001001101', '101010101010', '101011010101', // 1555-1559
      '001011011010', '100101011101', '010001011110', '101000101110', '110010011010', // 1560-1564
      '110101010101', '011010110010', '011010111001', '010010111010', '101001011101', // 1565-1569
      '010100101101', '101010010101', '101101010010', '101110101000', '101110110100', // 1570-1574
      '010110111001', '001011011010', '100101011010', '101101001010', '110110100100', // 1575-1579
      '111011010001', '011011101000', '101101101010', '010101101101', '010100110101', // 1580-1584
      '011010010101', '110101001010', '110110101000', '110111010100', '011011011010', // 1585-1589
      '010101011011', '001010011101', '011000101011', '101100010101', '101101001010', // 1590-1594
      '101110010101', '010110101010', '101010101110', '100100101110', '110010001111', // 1595-1599
      '010100100111', '011010010101', '011010101010', '101011010110', '010101011101', // 1600
      '001010011101'];

      function getDaysDiff(date1, date2) {
        // Ignores the time part in date1 and date2:
        var time1 = Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate());
        var time2 = Date.UTC(date2.getFullYear(), date2.getMonth(), date2.getDate());
        var diff = Math.abs(time1 - time2);
        return Math.round(diff / ONE_DAY);
      }

      var NgbCalendarIslamicUmalqura = /*#__PURE__*/function (_NgbCalendarIslamicCi) {
        _inherits2(NgbCalendarIslamicUmalqura, _NgbCalendarIslamicCi);

        var _super48 = _createSuper(NgbCalendarIslamicUmalqura);

        function NgbCalendarIslamicUmalqura() {
          _classCallCheck2(this, NgbCalendarIslamicUmalqura);

          return _super48.apply(this, arguments);
        }

        _createClass2(NgbCalendarIslamicUmalqura, [{
          key: "fromGregorian",
          value:
          /**
          * Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date.
          * `gdate` is s JS Date to be converted to Hijri.
          */
          function fromGregorian(gDate) {
            var hDay = 1,
                hMonth = 0,
                hYear = 1300;
            var daysDiff = getDaysDiff(gDate, GREGORIAN_FIRST_DATE);

            if (gDate.getTime() - GREGORIAN_FIRST_DATE.getTime() >= 0 && gDate.getTime() - GREGORIAN_LAST_DATE.getTime() <= 0) {
              var year = 1300;

              for (var i = 0; i < MONTH_LENGTH.length; i++, year++) {
                for (var j = 0; j < 12; j++) {
                  var numOfDays = +MONTH_LENGTH[i][j] + 29;

                  if (daysDiff <= numOfDays) {
                    hDay = daysDiff + 1;

                    if (hDay > numOfDays) {
                      hDay = 1;
                      j++;
                    }

                    if (j > 11) {
                      j = 0;
                      year++;
                    }

                    hMonth = j;
                    hYear = year;
                    return new NgbDate(hYear, hMonth + 1, hDay);
                  }

                  daysDiff = daysDiff - numOfDays;
                }
              }

              return null;
            } else {
              return _get2(_getPrototypeOf2(NgbCalendarIslamicUmalqura.prototype), "fromGregorian", this).call(this, gDate);
            }
          }
          /**
          * Converts the current Hijri date to Gregorian.
          */

        }, {
          key: "toGregorian",
          value: function toGregorian(hDate) {
            var hYear = hDate.year;
            var hMonth = hDate.month - 1;
            var hDay = hDate.day;
            var gDate = new Date(GREGORIAN_FIRST_DATE);
            var dayDiff = hDay - 1;

            if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) {
              for (var y = 0; y < hYear - HIJRI_BEGIN; y++) {
                for (var m = 0; m < 12; m++) {
                  dayDiff += +MONTH_LENGTH[y][m] + 29;
                }
              }

              for (var _m = 0; _m < hMonth; _m++) {
                dayDiff += +MONTH_LENGTH[hYear - HIJRI_BEGIN][_m] + 29;
              }

              gDate.setDate(GREGORIAN_FIRST_DATE.getDate() + dayDiff);
            } else {
              gDate = _get2(_getPrototypeOf2(NgbCalendarIslamicUmalqura.prototype), "toGregorian", this).call(this, hDate);
            }

            return gDate;
          }
          /**
          * Returns the number of days in a specific Hijri hMonth.
          * `hMonth` is 1 for Muharram, 2 for Safar, etc.
          * `hYear` is any Hijri hYear.
          */

        }, {
          key: "getDaysPerMonth",
          value: function getDaysPerMonth(hMonth, hYear) {
            if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) {
              var pos = hYear - HIJRI_BEGIN;
              return +MONTH_LENGTH[pos][hMonth - 1] + 29;
            }

            return _get2(_getPrototypeOf2(NgbCalendarIslamicUmalqura.prototype), "getDaysPerMonth", this).call(this, hMonth, hYear);
          }
        }]);

        return NgbCalendarIslamicUmalqura;
      }(NgbCalendarIslamicCivil);

      NgbCalendarIslamicUmalqura.ɵfac = function NgbCalendarIslamicUmalqura_Factory(t) {
        return ɵNgbCalendarIslamicUmalqura_BaseFactory(t || NgbCalendarIslamicUmalqura);
      };

      NgbCalendarIslamicUmalqura.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: NgbCalendarIslamicUmalqura,
        factory: NgbCalendarIslamicUmalqura.ɵfac
      });

      var ɵNgbCalendarIslamicUmalqura_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbCalendarIslamicUmalqura);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCalendarIslamicUmalqura, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], null, null);
      })();
      /**
       * Returns the equivalent JS date value for a give input Jalali date.
       * `jalaliDate` is an Jalali date to be converted to Gregorian.
       */


      function toGregorian$2(jalaliDate) {
        var jdn = jalaliToJulian(jalaliDate.year, jalaliDate.month, jalaliDate.day);
        var date = julianToGregorian(jdn);
        date.setHours(6, 30, 3, 200);
        return date;
      }
      /**
       * Returns the equivalent jalali date value for a give input Gregorian date.
       * `gdate` is a JS Date to be converted to jalali.
       * utc to local
       */


      function fromGregorian$2(gdate) {
        var g2d = gregorianToJulian(gdate.getFullYear(), gdate.getMonth() + 1, gdate.getDate());
        return julianToJalali(g2d);
      }

      function setJalaliYear(date, yearValue) {
        date.year = +yearValue;
        return date;
      }

      function setJalaliMonth(date, month) {
        month = +month;
        date.year = date.year + Math.floor((month - 1) / 12);
        date.month = Math.floor(((month - 1) % 12 + 12) % 12) + 1;
        return date;
      }

      function setJalaliDay(date, day) {
        var mDays = getDaysPerMonth(date.month, date.year);

        if (day <= 0) {
          while (day <= 0) {
            date = setJalaliMonth(date, date.month - 1);
            mDays = getDaysPerMonth(date.month, date.year);
            day += mDays;
          }
        } else if (day > mDays) {
          while (day > mDays) {
            day -= mDays;
            date = setJalaliMonth(date, date.month + 1);
            mDays = getDaysPerMonth(date.month, date.year);
          }
        }

        date.day = day;
        return date;
      }

      function mod(a, b) {
        return a - b * Math.floor(a / b);
      }

      function div(a, b) {
        return Math.trunc(a / b);
      }
      /*
       This function determines if the Jalali (Persian) year is
       leap (366-day long) or is the common year (365 days), and
       finds the day in March (Gregorian calendar) of the first
       day of the Jalali year (jalaliYear).
       @param jalaliYear Jalali calendar year (-61 to 3177)
       @return
       leap: number of years since the last leap year (0 to 4)
       gYear: Gregorian year of the beginning of Jalali year
       march: the March day of Farvardin the 1st (1st day of jalaliYear)
       @see: http://www.astro.uni.torun.pl/~kb/Papers/EMP/PersianC-EMP.htm
       @see: http://www.fourmilab.ch/documents/calendar/
       */


      function jalCal(jalaliYear) {
        // Jalali years starting the 33-year rule.
        var breaks = [-61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178];
        var breaksLength = breaks.length;
        var gYear = jalaliYear + 621;
        var leapJ = -14;
        var jp = breaks[0];

        if (jalaliYear < jp || jalaliYear >= breaks[breaksLength - 1]) {
          throw new Error('Invalid Jalali year ' + jalaliYear);
        } // Find the limiting years for the Jalali year jalaliYear.


        var jump;

        for (var i = 1; i < breaksLength; i += 1) {
          var jm = breaks[i];
          jump = jm - jp;

          if (jalaliYear < jm) {
            break;
          }

          leapJ = leapJ + div(jump, 33) * 8 + div(mod(jump, 33), 4);
          jp = jm;
        }

        var n = jalaliYear - jp; // Find the number of leap years from AD 621 to the beginning
        // of the current Jalali year in the Persian calendar.

        leapJ = leapJ + div(n, 33) * 8 + div(mod(n, 33) + 3, 4);

        if (mod(jump, 33) === 4 && jump - n === 4) {
          leapJ += 1;
        } // And the same in the Gregorian calendar (until the year gYear).


        var leapG = div(gYear, 4) - div((div(gYear, 100) + 1) * 3, 4) - 150; // Determine the Gregorian date of Farvardin the 1st.

        var march = 20 + leapJ - leapG; // Find how many years have passed since the last leap year.

        if (jump - n < 6) {
          n = n - jump + div(jump + 4, 33) * 33;
        }

        var leap = mod(mod(n + 1, 33) - 1, 4);

        if (leap === -1) {
          leap = 4;
        }

        return {
          leap: leap,
          gy: gYear,
          march: march
        };
      }
      /*
       Calculates Gregorian and Julian calendar dates from the Julian Day number
       (jdn) for the period since jdn=-34839655 (i.e. the year -100100 of both
       calendars) to some millions years ahead of the present.
       @param jdn Julian Day number
       @return
       gYear: Calendar year (years BC numbered 0, -1, -2, ...)
       gMonth: Calendar month (1 to 12)
       gDay: Calendar day of the month M (1 to 28/29/30/31)
       */


      function julianToGregorian(julianDayNumber) {
        var j = 4 * julianDayNumber + 139361631;
        j = j + div(div(4 * julianDayNumber + 183187720, 146097) * 3, 4) * 4 - 3908;
        var i = div(mod(j, 1461), 4) * 5 + 308;
        var gDay = div(mod(i, 153), 5) + 1;
        var gMonth = mod(div(i, 153), 12) + 1;
        var gYear = div(j, 1461) - 100100 + div(8 - gMonth, 6);
        return new Date(gYear, gMonth - 1, gDay);
      }
      /*
       Converts a date of the Jalali calendar to the Julian Day number.
       @param jy Jalali year (1 to 3100)
       @param jm Jalali month (1 to 12)
       @param jd Jalali day (1 to 29/31)
       @return Julian Day number
       */


      function gregorianToJulian(gy, gm, gd) {
        var d = div((gy + div(gm - 8, 6) + 100100) * 1461, 4) + div(153 * mod(gm + 9, 12) + 2, 5) + gd - 34840408;
        d = d - div(div(gy + 100100 + div(gm - 8, 6), 100) * 3, 4) + 752;
        return d;
      }
      /*
       Converts the Julian Day number to a date in the Jalali calendar.
       @param julianDayNumber Julian Day number
       @return
       jalaliYear: Jalali year (1 to 3100)
       jalaliMonth: Jalali month (1 to 12)
       jalaliDay: Jalali day (1 to 29/31)
       */


      function julianToJalali(julianDayNumber) {
        var gy = julianToGregorian(julianDayNumber).getFullYear() // Calculate Gregorian year (gy).
        ,
            jalaliYear = gy - 621,
            r = jalCal(jalaliYear),
            gregorianDay = gregorianToJulian(gy, 3, r.march),
            jalaliDay,
            jalaliMonth,
            numberOfDays; // Find number of days that passed since 1 Farvardin.

        numberOfDays = julianDayNumber - gregorianDay;

        if (numberOfDays >= 0) {
          if (numberOfDays <= 185) {
            // The first 6 months.
            jalaliMonth = 1 + div(numberOfDays, 31);
            jalaliDay = mod(numberOfDays, 31) + 1;
            return new NgbDate(jalaliYear, jalaliMonth, jalaliDay);
          } else {
            // The remaining months.
            numberOfDays -= 186;
          }
        } else {
          // Previous Jalali year.
          jalaliYear -= 1;
          numberOfDays += 179;

          if (r.leap === 1) {
            numberOfDays += 1;
          }
        }

        jalaliMonth = 7 + div(numberOfDays, 30);
        jalaliDay = mod(numberOfDays, 30) + 1;
        return new NgbDate(jalaliYear, jalaliMonth, jalaliDay);
      }
      /*
       Converts a date of the Jalali calendar to the Julian Day number.
       @param jYear Jalali year (1 to 3100)
       @param jMonth Jalali month (1 to 12)
       @param jDay Jalali day (1 to 29/31)
       @return Julian Day number
       */


      function jalaliToJulian(jYear, jMonth, jDay) {
        var r = jalCal(jYear);
        return gregorianToJulian(r.gy, 3, r.march) + (jMonth - 1) * 31 - div(jMonth, 7) * (jMonth - 7) + jDay - 1;
      }
      /**
       * Returns the number of days in a specific jalali month.
       */


      function getDaysPerMonth(month, year) {
        if (month <= 6) {
          return 31;
        }

        if (month <= 11) {
          return 30;
        }

        if (jalCal(year).leap === 0) {
          return 30;
        }

        return 29;
      }

      var NgbCalendarPersian = /*#__PURE__*/function (_NgbCalendar3) {
        _inherits2(NgbCalendarPersian, _NgbCalendar3);

        var _super49 = _createSuper(NgbCalendarPersian);

        function NgbCalendarPersian() {
          _classCallCheck2(this, NgbCalendarPersian);

          return _super49.apply(this, arguments);
        }

        _createClass2(NgbCalendarPersian, [{
          key: "getDaysPerWeek",
          value: function getDaysPerWeek() {
            return 7;
          }
        }, {
          key: "getMonths",
          value: function getMonths() {
            return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
          }
        }, {
          key: "getWeeksPerMonth",
          value: function getWeeksPerMonth() {
            return 6;
          }
        }, {
          key: "getNext",
          value: function getNext(date) {
            var period = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'd';
            var number = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
            date = new NgbDate(date.year, date.month, date.day);

            switch (period) {
              case 'y':
                date = setJalaliYear(date, date.year + number);
                date.month = 1;
                date.day = 1;
                return date;

              case 'm':
                date = setJalaliMonth(date, date.month + number);
                date.day = 1;
                return date;

              case 'd':
                return setJalaliDay(date, date.day + number);

              default:
                return date;
            }
          }
        }, {
          key: "getPrev",
          value: function getPrev(date) {
            var period = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'd';
            var number = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
            return this.getNext(date, period, -number);
          }
        }, {
          key: "getWeekday",
          value: function getWeekday(date) {
            var day = toGregorian$2(date).getDay(); // in JS Date Sun=0, in ISO 8601 Sun=7

            return day === 0 ? 7 : day;
          }
        }, {
          key: "getWeekNumber",
          value: function getWeekNumber(week, firstDayOfWeek) {
            // in JS Date Sun=0, in ISO 8601 Sun=7
            if (firstDayOfWeek === 7) {
              firstDayOfWeek = 0;
            }

            var thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;
            var date = week[thursdayIndex];
            var jsDate = toGregorian$2(date);
            jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday

            var time = jsDate.getTime();
            var startDate = toGregorian$2(new NgbDate(date.year, 1, 1));
            return Math.floor(Math.round((time - startDate.getTime()) / 86400000) / 7) + 1;
          }
        }, {
          key: "getToday",
          value: function getToday() {
            return fromGregorian$2(new Date());
          }
        }, {
          key: "isValid",
          value: function isValid(date) {
            return date != null && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) && !isNaN(toGregorian$2(date).getTime());
          }
        }]);

        return NgbCalendarPersian;
      }(NgbCalendar);

      NgbCalendarPersian.ɵfac = function NgbCalendarPersian_Factory(t) {
        return ɵNgbCalendarPersian_BaseFactory(t || NgbCalendarPersian);
      };

      NgbCalendarPersian.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: NgbCalendarPersian,
        factory: NgbCalendarPersian.ɵfac
      });

      var ɵNgbCalendarPersian_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbCalendarPersian);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCalendarPersian, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], null, null);
      })();

      var PARTS_PER_HOUR = 1080;
      var PARTS_PER_DAY = 24 * PARTS_PER_HOUR;
      var PARTS_FRACTIONAL_MONTH = 12 * PARTS_PER_HOUR + 793;
      var PARTS_PER_MONTH = 29 * PARTS_PER_DAY + PARTS_FRACTIONAL_MONTH;
      var BAHARAD = 11 * PARTS_PER_HOUR + 204;
      var HEBREW_DAY_ON_JAN_1_1970 = 2092591;
      var GREGORIAN_EPOCH = 1721425.5;

      function isGregorianLeapYear(year) {
        return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
      }

      function numberOfFirstDayInYear(year) {
        var monthsBeforeYear = Math.floor((235 * year - 234) / 19);
        var fractionalMonthsBeforeYear = monthsBeforeYear * PARTS_FRACTIONAL_MONTH + BAHARAD;
        var dayNumber = monthsBeforeYear * 29 + Math.floor(fractionalMonthsBeforeYear / PARTS_PER_DAY);
        var timeOfDay = fractionalMonthsBeforeYear % PARTS_PER_DAY;
        var dayOfWeek = dayNumber % 7; // 0 == Monday

        if (dayOfWeek === 2 || dayOfWeek === 4 || dayOfWeek === 6) {
          dayNumber++;
          dayOfWeek = dayNumber % 7;
        }

        if (dayOfWeek === 1 && timeOfDay > 15 * PARTS_PER_HOUR + 204 && !isHebrewLeapYear(year)) {
          dayNumber += 2;
        } else if (dayOfWeek === 0 && timeOfDay > 21 * PARTS_PER_HOUR + 589 && isHebrewLeapYear(year - 1)) {
          dayNumber++;
        }

        return dayNumber;
      }

      function getDaysInGregorianMonth(month, year) {
        var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

        if (isGregorianLeapYear(year)) {
          days[1]++;
        }

        return days[month - 1];
      }

      function getHebrewMonths(year) {
        return isHebrewLeapYear(year) ? 13 : 12;
      }
      /**
       * Returns the number of days in a specific Hebrew year.
       * `year` is any Hebrew year.
       */


      function getDaysInHebrewYear(year) {
        return numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year);
      }

      function isHebrewLeapYear(year) {
        if (year != null) {
          var b = (year * 12 + 17) % 19;
          return b >= (b < 0 ? -7 : 12);
        }

        return false;
      }
      /**
       * Returns the number of days in a specific Hebrew month.
       * `month` is 1 for Nisan, 2 for Iyar etc. Note: Hebrew leap year contains 13 months.
       * `year` is any Hebrew year.
       */


      function getDaysInHebrewMonth(month, year) {
        var yearLength = numberOfFirstDayInYear(year + 1) - numberOfFirstDayInYear(year);
        var yearType = (yearLength <= 380 ? yearLength : yearLength - 30) - 353;
        var leapYear = isHebrewLeapYear(year);
        var daysInMonth = leapYear ? [30, 29, 29, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29] : [30, 29, 29, 29, 30, 29, 30, 29, 30, 29, 30, 29];

        if (yearType > 0) {
          daysInMonth[2]++; // Kislev gets an extra day in normal or complete years.
        }

        if (yearType > 1) {
          daysInMonth[1]++; // Heshvan gets an extra day in complete years only.
        }

        return daysInMonth[month - 1];
      }

      function getDayNumberInHebrewYear(date) {
        var numberOfDay = 0;

        for (var i = 1; i < date.month; i++) {
          numberOfDay += getDaysInHebrewMonth(i, date.year);
        }

        return numberOfDay + date.day;
      }

      function setHebrewMonth(date, val) {
        var after = val >= 0;

        if (!after) {
          val = -val;
        }

        while (val > 0) {
          if (after) {
            if (val > getHebrewMonths(date.year) - date.month) {
              val -= getHebrewMonths(date.year) - date.month + 1;
              date.year++;
              date.month = 1;
            } else {
              date.month += val;
              val = 0;
            }
          } else {
            if (val >= date.month) {
              date.year--;
              val -= date.month;
              date.month = getHebrewMonths(date.year);
            } else {
              date.month -= val;
              val = 0;
            }
          }
        }

        return date;
      }

      function setHebrewDay(date, val) {
        var after = val >= 0;

        if (!after) {
          val = -val;
        }

        while (val > 0) {
          if (after) {
            if (val > getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date)) {
              val -= getDaysInHebrewYear(date.year) - getDayNumberInHebrewYear(date) + 1;
              date.year++;
              date.month = 1;
              date.day = 1;
            } else if (val > getDaysInHebrewMonth(date.month, date.year) - date.day) {
              val -= getDaysInHebrewMonth(date.month, date.year) - date.day + 1;
              date.month++;
              date.day = 1;
            } else {
              date.day += val;
              val = 0;
            }
          } else {
            if (val >= date.day) {
              val -= date.day;
              date.month--;

              if (date.month === 0) {
                date.year--;
                date.month = getHebrewMonths(date.year);
              }

              date.day = getDaysInHebrewMonth(date.month, date.year);
            } else {
              date.day -= val;
              val = 0;
            }
          }
        }

        return date;
      }
      /**
       * Returns the equivalent Hebrew date value for a give input Gregorian date.
       * `gdate` is a JS Date to be converted to Hebrew date.
       */


      function fromGregorian$1(gdate) {
        var date = new Date(gdate);
        var gYear = date.getFullYear(),
            gMonth = date.getMonth(),
            gDay = date.getDate();
        var julianDay = GREGORIAN_EPOCH - 1 + 365 * (gYear - 1) + Math.floor((gYear - 1) / 4) - Math.floor((gYear - 1) / 100) + Math.floor((gYear - 1) / 400) + Math.floor((367 * (gMonth + 1) - 362) / 12 + (gMonth + 1 <= 2 ? 0 : isGregorianLeapYear(gYear) ? -1 : -2) + gDay);
        julianDay = Math.floor(julianDay + 0.5);
        var daysSinceHebEpoch = julianDay - 347997;
        var monthsSinceHebEpoch = Math.floor(daysSinceHebEpoch * PARTS_PER_DAY / PARTS_PER_MONTH);
        var hYear = Math.floor((monthsSinceHebEpoch * 19 + 234) / 235) + 1;
        var firstDayOfThisYear = numberOfFirstDayInYear(hYear);
        var dayOfYear = daysSinceHebEpoch - firstDayOfThisYear;

        while (dayOfYear < 1) {
          hYear--;
          firstDayOfThisYear = numberOfFirstDayInYear(hYear);
          dayOfYear = daysSinceHebEpoch - firstDayOfThisYear;
        }

        var hMonth = 1;
        var hDay = dayOfYear;

        while (hDay > getDaysInHebrewMonth(hMonth, hYear)) {
          hDay -= getDaysInHebrewMonth(hMonth, hYear);
          hMonth++;
        }

        return new NgbDate(hYear, hMonth, hDay);
      }
      /**
       * Returns the equivalent JS date value for a given Hebrew date.
       * `hebrewDate` is an Hebrew date to be converted to Gregorian.
       */


      function toGregorian$1(hebrewDate) {
        var hYear = hebrewDate.year;
        var hMonth = hebrewDate.month;
        var hDay = hebrewDate.day;
        var days = numberOfFirstDayInYear(hYear);

        for (var i = 1; i < hMonth; i++) {
          days += getDaysInHebrewMonth(i, hYear);
        }

        days += hDay;
        var diffDays = days - HEBREW_DAY_ON_JAN_1_1970;
        var after = diffDays >= 0;

        if (!after) {
          diffDays = -diffDays;
        }

        var gYear = 1970;
        var gMonth = 1;
        var gDay = 1;

        while (diffDays > 0) {
          if (after) {
            if (diffDays >= (isGregorianLeapYear(gYear) ? 366 : 365)) {
              diffDays -= isGregorianLeapYear(gYear) ? 366 : 365;
              gYear++;
            } else if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) {
              diffDays -= getDaysInGregorianMonth(gMonth, gYear);
              gMonth++;
            } else {
              gDay += diffDays;
              diffDays = 0;
            }
          } else {
            if (diffDays >= (isGregorianLeapYear(gYear - 1) ? 366 : 365)) {
              diffDays -= isGregorianLeapYear(gYear - 1) ? 366 : 365;
              gYear--;
            } else {
              if (gMonth > 1) {
                gMonth--;
              } else {
                gMonth = 12;
                gYear--;
              }

              if (diffDays >= getDaysInGregorianMonth(gMonth, gYear)) {
                diffDays -= getDaysInGregorianMonth(gMonth, gYear);
              } else {
                gDay = getDaysInGregorianMonth(gMonth, gYear) - diffDays + 1;
                diffDays = 0;
              }
            }
          }
        }

        return new Date(gYear, gMonth - 1, gDay);
      }

      function hebrewNumerals(numerals) {
        if (!numerals) {
          return '';
        }

        var hArray0_9 = ['', "\u05D0", "\u05D1", "\u05D2", "\u05D3", "\u05D4", "\u05D5", "\u05D6", "\u05D7", "\u05D8"];
        var hArray10_19 = ["\u05D9", "\u05D9\u05D0", "\u05D9\u05D1", "\u05D9\u05D2", "\u05D9\u05D3", "\u05D8\u05D5", "\u05D8\u05D6", "\u05D9\u05D6", "\u05D9\u05D7", "\u05D9\u05D8"];
        var hArray20_90 = ['', '', "\u05DB", "\u05DC", "\u05DE", "\u05E0", "\u05E1", "\u05E2", "\u05E4", "\u05E6"];
        var hArray100_900 = ['', "\u05E7", "\u05E8", "\u05E9", "\u05EA", "\u05EA\u05E7", "\u05EA\u05E8", "\u05EA\u05E9", "\u05EA\u05EA", "\u05EA\u05EA\u05E7"];
        var hArray1000_9000 = ['', "\u05D0", "\u05D1", "\u05D1\u05D0", "\u05D1\u05D1", "\u05D4", "\u05D4\u05D0", "\u05D4\u05D1", "\u05D4\u05D1\u05D0", "\u05D4\u05D1\u05D1"];
        var geresh = "\u05F3",
            gershaim = "\u05F4";
        var mem = 0;
        var result = [];
        var step = 0;

        while (numerals > 0) {
          var m = numerals % 10;

          if (step === 0) {
            mem = m;
          } else if (step === 1) {
            if (m !== 1) {
              result.unshift(hArray20_90[m], hArray0_9[mem]);
            } else {
              result.unshift(hArray10_19[mem]);
            }
          } else if (step === 2) {
            result.unshift(hArray100_900[m]);
          } else {
            if (m !== 5) {
              result.unshift(hArray1000_9000[m], geresh, ' ');
            }

            break;
          }

          numerals = Math.floor(numerals / 10);

          if (step === 0 && numerals === 0) {
            result.unshift(hArray0_9[m]);
          }

          step++;
        }

        result = result.join('').split('');

        if (result.length === 1) {
          result.push(geresh);
        } else if (result.length > 1) {
          result.splice(result.length - 1, 0, gershaim);
        }

        return result.join('');
      }
      /**
       * @since 3.2.0
       */


      var NgbCalendarHebrew = /*#__PURE__*/function (_NgbCalendar4) {
        _inherits2(NgbCalendarHebrew, _NgbCalendar4);

        var _super50 = _createSuper(NgbCalendarHebrew);

        function NgbCalendarHebrew() {
          _classCallCheck2(this, NgbCalendarHebrew);

          return _super50.apply(this, arguments);
        }

        _createClass2(NgbCalendarHebrew, [{
          key: "getDaysPerWeek",
          value: function getDaysPerWeek() {
            return 7;
          }
        }, {
          key: "getMonths",
          value: function getMonths(year) {
            if (year && isHebrewLeapYear(year)) {
              return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
            } else {
              return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
            }
          }
        }, {
          key: "getWeeksPerMonth",
          value: function getWeeksPerMonth() {
            return 6;
          }
        }, {
          key: "isValid",
          value: function isValid(date) {
            if (date != null) {
              var b = isNumber(date.year) && isNumber(date.month) && isNumber(date.day);
              b = b && date.month > 0 && date.month <= (isHebrewLeapYear(date.year) ? 13 : 12);
              b = b && date.day > 0 && date.day <= getDaysInHebrewMonth(date.month, date.year);
              return b && !isNaN(toGregorian$1(date).getTime());
            }

            return false;
          }
        }, {
          key: "getNext",
          value: function getNext(date) {
            var period = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'd';
            var number = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
            date = new NgbDate(date.year, date.month, date.day);

            switch (period) {
              case 'y':
                date.year += number;
                date.month = 1;
                date.day = 1;
                return date;

              case 'm':
                date = setHebrewMonth(date, number);
                date.day = 1;
                return date;

              case 'd':
                return setHebrewDay(date, number);

              default:
                return date;
            }
          }
        }, {
          key: "getPrev",
          value: function getPrev(date) {
            var period = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'd';
            var number = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
            return this.getNext(date, period, -number);
          }
        }, {
          key: "getWeekday",
          value: function getWeekday(date) {
            var day = toGregorian$1(date).getDay(); // in JS Date Sun=0, in ISO 8601 Sun=7

            return day === 0 ? 7 : day;
          }
        }, {
          key: "getWeekNumber",
          value: function getWeekNumber(week, firstDayOfWeek) {
            var date = week[week.length - 1];
            return Math.ceil(getDayNumberInHebrewYear(date) / 7);
          }
        }, {
          key: "getToday",
          value: function getToday() {
            return fromGregorian$1(new Date());
          }
          /**
           * @since 3.4.0
           */

        }, {
          key: "toGregorian",
          value: function toGregorian(date) {
            return fromJSDate(toGregorian$1(date));
          }
          /**
           * @since 3.4.0
           */

        }, {
          key: "fromGregorian",
          value: function fromGregorian(date) {
            return fromGregorian$1(toJSDate(date));
          }
        }]);

        return NgbCalendarHebrew;
      }(NgbCalendar);

      NgbCalendarHebrew.ɵfac = function NgbCalendarHebrew_Factory(t) {
        return ɵNgbCalendarHebrew_BaseFactory(t || NgbCalendarHebrew);
      };

      NgbCalendarHebrew.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: NgbCalendarHebrew,
        factory: NgbCalendarHebrew.ɵfac
      });

      var ɵNgbCalendarHebrew_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbCalendarHebrew);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCalendarHebrew, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], null, null);
      })();

      var WEEKDAYS = ['שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת', 'ראשון'];
      var MONTHS = ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול'];
      var MONTHS_LEAP = ['תשרי', 'חשון', 'כסלו', 'טבת', 'שבט', 'אדר א׳', 'אדר ב׳', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול'];
      /**
       * @since 3.2.0
       */

      var NgbDatepickerI18nHebrew = /*#__PURE__*/function (_NgbDatepickerI18n2) {
        _inherits2(NgbDatepickerI18nHebrew, _NgbDatepickerI18n2);

        var _super51 = _createSuper(NgbDatepickerI18nHebrew);

        function NgbDatepickerI18nHebrew() {
          _classCallCheck2(this, NgbDatepickerI18nHebrew);

          return _super51.apply(this, arguments);
        }

        _createClass2(NgbDatepickerI18nHebrew, [{
          key: "getMonthShortName",
          value: function getMonthShortName(month, year) {
            return this.getMonthFullName(month, year);
          }
        }, {
          key: "getMonthFullName",
          value: function getMonthFullName(month, year) {
            return isHebrewLeapYear(year) ? MONTHS_LEAP[month - 1] || '' : MONTHS[month - 1] || '';
          }
        }, {
          key: "getWeekdayLabel",
          value: function getWeekdayLabel(weekday, width) {
            return WEEKDAYS[weekday - 1] || '';
          }
        }, {
          key: "getDayAriaLabel",
          value: function getDayAriaLabel(date) {
            return "".concat(hebrewNumerals(date.day), " ").concat(this.getMonthFullName(date.month, date.year), " ").concat(hebrewNumerals(date.year));
          }
        }, {
          key: "getDayNumerals",
          value: function getDayNumerals(date) {
            return hebrewNumerals(date.day);
          }
        }, {
          key: "getWeekNumerals",
          value: function getWeekNumerals(weekNumber) {
            return hebrewNumerals(weekNumber);
          }
        }, {
          key: "getYearNumerals",
          value: function getYearNumerals(year) {
            return hebrewNumerals(year);
          }
        }]);

        return NgbDatepickerI18nHebrew;
      }(NgbDatepickerI18n);

      NgbDatepickerI18nHebrew.ɵfac = function NgbDatepickerI18nHebrew_Factory(t) {
        return ɵNgbDatepickerI18nHebrew_BaseFactory(t || NgbDatepickerI18nHebrew);
      };

      NgbDatepickerI18nHebrew.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: NgbDatepickerI18nHebrew,
        factory: NgbDatepickerI18nHebrew.ɵfac
      });

      var ɵNgbDatepickerI18nHebrew_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbDatepickerI18nHebrew);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerI18nHebrew, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], null, null);
      })();
      /**
       * Returns the equivalent JS date value for a give input Buddhist date.
       * `date` is an Buddhist date to be converted to Gregorian.
       */


      function toGregorian(date) {
        return new Date(date.year - 543, date.month - 1, date.day);
      }
      /**
       * Returns the equivalent Buddhist date value for a give input Gregorian date.
       * `gdate` is a JS Date to be converted to Buddhist.
       * utc to local
       */


      function fromGregorian(gdate) {
        return new NgbDate(gdate.getFullYear() + 543, gdate.getMonth() + 1, gdate.getDate());
      }
      /**
       * @since 9.1.0
       */


      var NgbCalendarBuddhist = /*#__PURE__*/function (_NgbCalendarGregorian) {
        _inherits2(NgbCalendarBuddhist, _NgbCalendarGregorian);

        var _super52 = _createSuper(NgbCalendarBuddhist);

        function NgbCalendarBuddhist() {
          _classCallCheck2(this, NgbCalendarBuddhist);

          return _super52.apply(this, arguments);
        }

        _createClass2(NgbCalendarBuddhist, [{
          key: "getToday",
          value: function getToday() {
            return fromGregorian(new Date());
          }
        }, {
          key: "getNext",
          value: function getNext(date) {
            var period = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'd';
            var number = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
            var jsDate = toGregorian(date);
            var checkMonth = true;
            var expectedMonth = jsDate.getMonth();

            switch (period) {
              case 'y':
                jsDate.setFullYear(jsDate.getFullYear() + number);
                break;

              case 'm':
                expectedMonth += number;
                jsDate.setMonth(expectedMonth);
                expectedMonth = expectedMonth % 12;

                if (expectedMonth < 0) {
                  expectedMonth = expectedMonth + 12;
                }

                break;

              case 'd':
                jsDate.setDate(jsDate.getDate() + number);
                checkMonth = false;
                break;

              default:
                return date;
            }

            if (checkMonth && jsDate.getMonth() !== expectedMonth) {
              // this means the destination month has less days than the initial month
              // let's go back to the end of the previous month:
              jsDate.setDate(0);
            }

            return fromGregorian(jsDate);
          }
        }, {
          key: "getPrev",
          value: function getPrev(date) {
            var period = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'd';
            var number = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
            return this.getNext(date, period, -number);
          }
        }, {
          key: "getWeekday",
          value: function getWeekday(date) {
            var jsDate = toGregorian(date);
            var day = jsDate.getDay(); // in JS Date Sun=0, in ISO 8601 Sun=7

            return day === 0 ? 7 : day;
          }
        }, {
          key: "getWeekNumber",
          value: function getWeekNumber(week, firstDayOfWeek) {
            // in JS Date Sun=0, in ISO 8601 Sun=7
            if (firstDayOfWeek === 7) {
              firstDayOfWeek = 0;
            }

            var thursdayIndex = (4 + 7 - firstDayOfWeek) % 7;
            var date = week[thursdayIndex];
            var jsDate = toGregorian(date);
            jsDate.setDate(jsDate.getDate() + 4 - (jsDate.getDay() || 7)); // Thursday

            var time = jsDate.getTime();
            jsDate.setMonth(0); // Compare with Jan 1

            jsDate.setDate(1);
            return Math.floor(Math.round((time - jsDate.getTime()) / 86400000) / 7) + 1;
          }
        }, {
          key: "isValid",
          value: function isValid(date) {
            if (!date || !isInteger(date.year) || !isInteger(date.month) || !isInteger(date.day)) {
              return false;
            } // year 0 doesn't exist in Gregorian calendar


            if (date.year === 0) {
              return false;
            }

            var jsDate = toGregorian(date);
            return !isNaN(jsDate.getTime()) && jsDate.getFullYear() === date.year - 543 && jsDate.getMonth() + 1 === date.month && jsDate.getDate() === date.day;
          }
        }]);

        return NgbCalendarBuddhist;
      }(NgbCalendarGregorian);

      NgbCalendarBuddhist.ɵfac = function NgbCalendarBuddhist_Factory(t) {
        return ɵNgbCalendarBuddhist_BaseFactory(t || NgbCalendarBuddhist);
      };

      NgbCalendarBuddhist.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: NgbCalendarBuddhist,
        factory: NgbCalendarBuddhist.ɵfac
      });

      var ɵNgbCalendarBuddhist_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbCalendarBuddhist);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbCalendarBuddhist, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], null, null);
      })();
      /**
       * [`NgbDateAdapter`](#/components/datepicker/api#NgbDateAdapter) implementation that uses
       * native javascript dates as a user date model.
       */


      var NgbDateNativeAdapter = /*#__PURE__*/function (_NgbDateAdapter2) {
        _inherits2(NgbDateNativeAdapter, _NgbDateAdapter2);

        var _super53 = _createSuper(NgbDateNativeAdapter);

        function NgbDateNativeAdapter() {
          _classCallCheck2(this, NgbDateNativeAdapter);

          return _super53.apply(this, arguments);
        }

        _createClass2(NgbDateNativeAdapter, [{
          key: "fromModel",
          value:
          /**
           * Converts a native `Date` to a `NgbDateStruct`.
           */
          function fromModel(date) {
            return date instanceof Date && !isNaN(date.getTime()) ? this._fromNativeDate(date) : null;
          }
          /**
           * Converts a `NgbDateStruct` to a native `Date`.
           */

        }, {
          key: "toModel",
          value: function toModel(date) {
            return date && isInteger(date.year) && isInteger(date.month) && isInteger(date.day) ? this._toNativeDate(date) : null;
          }
        }, {
          key: "_fromNativeDate",
          value: function _fromNativeDate(date) {
            return {
              year: date.getFullYear(),
              month: date.getMonth() + 1,
              day: date.getDate()
            };
          }
        }, {
          key: "_toNativeDate",
          value: function _toNativeDate(date) {
            var jsDate = new Date(date.year, date.month - 1, date.day, 12); // avoid 30 -> 1930 conversion

            jsDate.setFullYear(date.year);
            return jsDate;
          }
        }]);

        return NgbDateNativeAdapter;
      }(NgbDateAdapter);

      NgbDateNativeAdapter.ɵfac = function NgbDateNativeAdapter_Factory(t) {
        return ɵNgbDateNativeAdapter_BaseFactory(t || NgbDateNativeAdapter);
      };

      NgbDateNativeAdapter.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: NgbDateNativeAdapter,
        factory: NgbDateNativeAdapter.ɵfac
      });

      var ɵNgbDateNativeAdapter_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbDateNativeAdapter);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDateNativeAdapter, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], null, null);
      })();
      /**
       * Same as [`NgbDateNativeAdapter`](#/components/datepicker/api#NgbDateNativeAdapter), but with UTC dates.
       *
       * @since 3.2.0
       */


      var NgbDateNativeUTCAdapter = /*#__PURE__*/function (_NgbDateNativeAdapter) {
        _inherits2(NgbDateNativeUTCAdapter, _NgbDateNativeAdapter);

        var _super54 = _createSuper(NgbDateNativeUTCAdapter);

        function NgbDateNativeUTCAdapter() {
          _classCallCheck2(this, NgbDateNativeUTCAdapter);

          return _super54.apply(this, arguments);
        }

        _createClass2(NgbDateNativeUTCAdapter, [{
          key: "_fromNativeDate",
          value: function _fromNativeDate(date) {
            return {
              year: date.getUTCFullYear(),
              month: date.getUTCMonth() + 1,
              day: date.getUTCDate()
            };
          }
        }, {
          key: "_toNativeDate",
          value: function _toNativeDate(date) {
            var jsDate = new Date(Date.UTC(date.year, date.month - 1, date.day)); // avoid 30 -> 1930 conversion

            jsDate.setUTCFullYear(date.year);
            return jsDate;
          }
        }]);

        return NgbDateNativeUTCAdapter;
      }(NgbDateNativeAdapter);

      NgbDateNativeUTCAdapter.ɵfac = function NgbDateNativeUTCAdapter_Factory(t) {
        return ɵNgbDateNativeUTCAdapter_BaseFactory(t || NgbDateNativeUTCAdapter);
      };

      NgbDateNativeUTCAdapter.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: NgbDateNativeUTCAdapter,
        factory: NgbDateNativeUTCAdapter.ɵfac
      });

      var ɵNgbDateNativeUTCAdapter_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbDateNativeUTCAdapter);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDateNativeUTCAdapter, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], null, null);
      })();

      var NgbDatepickerModule = function NgbDatepickerModule() {
        _classCallCheck2(this, NgbDatepickerModule);
      };

      NgbDatepickerModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NgbDatepickerModule
      });
      NgbDatepickerModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NgbDatepickerModule_Factory(t) {
          return new (t || NgbDatepickerModule)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_4__["FormsModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbDatepickerModule, {
          declarations: function declarations() {
            return [NgbDatepicker, NgbDatepickerContent, NgbDatepickerMonth, NgbDatepickerNavigation, NgbDatepickerNavigationSelect, NgbDatepickerDayView, NgbInputDatepicker];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_4__["FormsModule"]];
          },
          exports: function exports() {
            return [NgbDatepicker, NgbDatepickerContent, NgbInputDatepicker, NgbDatepickerMonth];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDatepickerModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            declarations: [NgbDatepicker, NgbDatepickerContent, NgbDatepickerMonth, NgbDatepickerNavigation, NgbDatepickerNavigationSelect, NgbDatepickerDayView, NgbInputDatepicker],
            exports: [NgbDatepicker, NgbDatepickerContent, NgbInputDatepicker, NgbDatepickerMonth],
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_4__["FormsModule"]],
            entryComponents: [NgbDatepicker]
          }]
        }], null, null);
      })();
      /**
       * A configuration service for the [`NgbDropdown`](#/components/dropdown/api#NgbDropdown) component.
       *
       * You can inject this service, typically in your root component, and customize the values of its properties in
       * order to provide default values for all the dropdowns used in the application.
       */


      var NgbDropdownConfig = function NgbDropdownConfig() {
        _classCallCheck2(this, NgbDropdownConfig);

        this.autoClose = true;
        this.placement = ['bottom-left', 'bottom-right', 'top-left', 'top-right'];
      };

      NgbDropdownConfig.ɵfac = function NgbDropdownConfig_Factory(t) {
        return new (t || NgbDropdownConfig)();
      };

      NgbDropdownConfig.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function NgbDropdownConfig_Factory() {
          return new NgbDropdownConfig();
        },
        token: NgbDropdownConfig,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDropdownConfig, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [];
        }, null);
      })();

      var NgbNavbar = function NgbNavbar() {
        _classCallCheck2(this, NgbNavbar);
      };

      NgbNavbar.ɵfac = function NgbNavbar_Factory(t) {
        return new (t || NgbNavbar)();
      };

      NgbNavbar.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbNavbar,
        selectors: [["", 8, "navbar"]]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbNavbar, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '.navbar'
          }]
        }], null, null);
      })();
      /**
       * A directive you should put on a dropdown item to enable keyboard navigation.
       * Arrow keys will move focus between items marked with this directive.
       *
       * @since 4.1.0
       */


      var NgbDropdownItem = /*#__PURE__*/function () {
        function NgbDropdownItem(elementRef) {
          _classCallCheck2(this, NgbDropdownItem);

          this.elementRef = elementRef;
          this._disabled = false;
        }

        _createClass2(NgbDropdownItem, [{
          key: "disabled",
          get: function get() {
            return this._disabled;
          },
          set: function set(value) {
            this._disabled = value === '' || value === true; // accept an empty attribute as true
          }
        }]);

        return NgbDropdownItem;
      }();

      NgbDropdownItem.ɵfac = function NgbDropdownItem_Factory(t) {
        return new (t || NgbDropdownItem)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]));
      };

      NgbDropdownItem.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbDropdownItem,
        selectors: [["", "ngbDropdownItem", ""]],
        hostAttrs: [1, "dropdown-item"],
        hostVars: 2,
        hostBindings: function NgbDropdownItem_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("disabled", ctx.disabled);
          }
        },
        inputs: {
          disabled: "disabled"
        }
      });

      NgbDropdownItem.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }];
      };

      NgbDropdownItem.propDecorators = {
        disabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDropdownItem, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngbDropdownItem]',
            host: {
              'class': 'dropdown-item',
              '[class.disabled]': 'disabled'
            }
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }];
        }, {
          disabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * A directive that wraps dropdown menu content and dropdown items.
       */


      var NgbDropdownMenu = function NgbDropdownMenu(dropdown, _elementRef) {
        _classCallCheck2(this, NgbDropdownMenu);

        this.dropdown = dropdown;
        this.placement = 'bottom';
        this.isOpen = false;
        this.nativeElement = _elementRef.nativeElement;
      };

      NgbDropdownMenu.ɵfac = function NgbDropdownMenu_Factory(t) {
        return new (t || NgbDropdownMenu)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return NgbDropdown;
        })), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]));
      };

      NgbDropdownMenu.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbDropdownMenu,
        selectors: [["", "ngbDropdownMenu", ""]],
        contentQueries: function NgbDropdownMenu_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbDropdownItem, 0);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.menuItems = _t);
          }
        },
        hostVars: 5,
        hostBindings: function NgbDropdownMenu_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("keydown.ArrowUp", function NgbDropdownMenu_keydown_ArrowUp_HostBindingHandler($event) {
              return ctx.dropdown.onKeyDown($event);
            })("keydown.ArrowDown", function NgbDropdownMenu_keydown_ArrowDown_HostBindingHandler($event) {
              return ctx.dropdown.onKeyDown($event);
            })("keydown.Home", function NgbDropdownMenu_keydown_Home_HostBindingHandler($event) {
              return ctx.dropdown.onKeyDown($event);
            })("keydown.End", function NgbDropdownMenu_keydown_End_HostBindingHandler($event) {
              return ctx.dropdown.onKeyDown($event);
            })("keydown.Enter", function NgbDropdownMenu_keydown_Enter_HostBindingHandler($event) {
              return ctx.dropdown.onKeyDown($event);
            })("keydown.Space", function NgbDropdownMenu_keydown_Space_HostBindingHandler($event) {
              return ctx.dropdown.onKeyDown($event);
            })("keydown.Tab", function NgbDropdownMenu_keydown_Tab_HostBindingHandler($event) {
              return ctx.dropdown.onKeyDown($event);
            })("keydown.Shift.Tab", function NgbDropdownMenu_keydown_Shift_Tab_HostBindingHandler($event) {
              return ctx.dropdown.onKeyDown($event);
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("x-placement", ctx.placement);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("dropdown-menu", true)("show", ctx.dropdown.isOpen());
          }
        }
      });

      NgbDropdownMenu.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
              return NgbDropdown;
            })]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }];
      };

      NgbDropdownMenu.propDecorators = {
        menuItems: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
          args: [NgbDropdownItem]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDropdownMenu, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngbDropdownMenu]',
            host: {
              '[class.dropdown-menu]': 'true',
              '[class.show]': 'dropdown.isOpen()',
              '[attr.x-placement]': 'placement',
              '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)',
              '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)',
              '(keydown.Home)': 'dropdown.onKeyDown($event)',
              '(keydown.End)': 'dropdown.onKeyDown($event)',
              '(keydown.Enter)': 'dropdown.onKeyDown($event)',
              '(keydown.Space)': 'dropdown.onKeyDown($event)',
              '(keydown.Tab)': 'dropdown.onKeyDown($event)',
              '(keydown.Shift.Tab)': 'dropdown.onKeyDown($event)'
            }
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
                return NgbDropdown;
              })]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }];
        }, {
          menuItems: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
            args: [NgbDropdownItem]
          }]
        });
      })();
      /**
       * A directive to mark an element to which dropdown menu will be anchored.
       *
       * This is a simple version of the `NgbDropdownToggle` directive.
       * It plays the same role, but doesn't listen to click events to toggle dropdown menu thus enabling support
       * for events other than click.
       *
       * @since 1.1.0
       */


      var NgbDropdownAnchor = function NgbDropdownAnchor(dropdown, _elementRef) {
        _classCallCheck2(this, NgbDropdownAnchor);

        this.dropdown = dropdown;
        this.nativeElement = _elementRef.nativeElement;
      };

      NgbDropdownAnchor.ɵfac = function NgbDropdownAnchor_Factory(t) {
        return new (t || NgbDropdownAnchor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return NgbDropdown;
        })), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]));
      };

      NgbDropdownAnchor.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbDropdownAnchor,
        selectors: [["", "ngbDropdownAnchor", ""]],
        hostAttrs: [1, "dropdown-toggle"],
        hostVars: 1,
        hostBindings: function NgbDropdownAnchor_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-expanded", ctx.dropdown.isOpen());
          }
        }
      });

      NgbDropdownAnchor.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
              return NgbDropdown;
            })]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDropdownAnchor, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngbDropdownAnchor]',
            host: {
              'class': 'dropdown-toggle',
              '[attr.aria-expanded]': 'dropdown.isOpen()'
            }
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
                return NgbDropdown;
              })]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }];
        }, null);
      })();
      /**
       * A directive to mark an element that will toggle dropdown via the `click` event.
       *
       * You can also use `NgbDropdownAnchor` as an alternative.
       */


      var NgbDropdownToggle = /*#__PURE__*/function (_NgbDropdownAnchor) {
        _inherits2(NgbDropdownToggle, _NgbDropdownAnchor);

        var _super55 = _createSuper(NgbDropdownToggle);

        function NgbDropdownToggle(dropdown, elementRef) {
          _classCallCheck2(this, NgbDropdownToggle);

          return _super55.call(this, dropdown, elementRef);
        }

        return NgbDropdownToggle;
      }(NgbDropdownAnchor);

      NgbDropdownToggle.ɵfac = function NgbDropdownToggle_Factory(t) {
        return new (t || NgbDropdownToggle)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return NgbDropdown;
        })), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]));
      };

      NgbDropdownToggle.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbDropdownToggle,
        selectors: [["", "ngbDropdownToggle", ""]],
        hostAttrs: [1, "dropdown-toggle"],
        hostVars: 1,
        hostBindings: function NgbDropdownToggle_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbDropdownToggle_click_HostBindingHandler() {
              return ctx.dropdown.toggle();
            })("keydown.ArrowUp", function NgbDropdownToggle_keydown_ArrowUp_HostBindingHandler($event) {
              return ctx.dropdown.onKeyDown($event);
            })("keydown.ArrowDown", function NgbDropdownToggle_keydown_ArrowDown_HostBindingHandler($event) {
              return ctx.dropdown.onKeyDown($event);
            })("keydown.Home", function NgbDropdownToggle_keydown_Home_HostBindingHandler($event) {
              return ctx.dropdown.onKeyDown($event);
            })("keydown.End", function NgbDropdownToggle_keydown_End_HostBindingHandler($event) {
              return ctx.dropdown.onKeyDown($event);
            })("keydown.Tab", function NgbDropdownToggle_keydown_Tab_HostBindingHandler($event) {
              return ctx.dropdown.onKeyDown($event);
            })("keydown.Shift.Tab", function NgbDropdownToggle_keydown_Shift_Tab_HostBindingHandler($event) {
              return ctx.dropdown.onKeyDown($event);
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-expanded", ctx.dropdown.isOpen());
          }
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: NgbDropdownAnchor,
          useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
            return NgbDropdownToggle;
          })
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      NgbDropdownToggle.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
              return NgbDropdown;
            })]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDropdownToggle, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngbDropdownToggle]',
            host: {
              'class': 'dropdown-toggle',
              '[attr.aria-expanded]': 'dropdown.isOpen()',
              '(click)': 'dropdown.toggle()',
              '(keydown.ArrowUp)': 'dropdown.onKeyDown($event)',
              '(keydown.ArrowDown)': 'dropdown.onKeyDown($event)',
              '(keydown.Home)': 'dropdown.onKeyDown($event)',
              '(keydown.End)': 'dropdown.onKeyDown($event)',
              '(keydown.Tab)': 'dropdown.onKeyDown($event)',
              '(keydown.Shift.Tab)': 'dropdown.onKeyDown($event)'
            },
            providers: [{
              provide: NgbDropdownAnchor,
              useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
                return NgbDropdownToggle;
              })
            }]
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
                return NgbDropdown;
              })]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }];
        }, null);
      })();
      /**
       * A directive that provides contextual overlays for displaying lists of links and more.
       */


      var NgbDropdown = /*#__PURE__*/function () {
        function NgbDropdown(_changeDetector, config, _document, _ngZone, _elementRef, _renderer, ngbNavbar) {
          var _this85 = this;

          _classCallCheck2(this, NgbDropdown);

          this._changeDetector = _changeDetector;
          this._document = _document;
          this._ngZone = _ngZone;
          this._elementRef = _elementRef;
          this._renderer = _renderer;
          this._closed$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          this._bodyContainer = null;
          /**
           * Defines whether or not the dropdown menu is opened initially.
           */

          this._open = false;
          /**
           * An event fired when the dropdown is opened or closed.
           *
           * The event payload is a `boolean`:
           * * `true` - the dropdown was opened
           * * `false` - the dropdown was closed
           */

          this.openChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.placement = config.placement;
          this.container = config.container;
          this.autoClose = config.autoClose;
          this.display = ngbNavbar ? 'static' : 'dynamic';
          this._zoneSubscription = _ngZone.onStable.subscribe(function () {
            _this85._positionMenu();
          });
        }

        _createClass2(NgbDropdown, [{
          key: "ngAfterContentInit",
          value: function ngAfterContentInit() {
            var _this86 = this;

            this._ngZone.onStable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1)).subscribe(function () {
              _this86._applyPlacementClasses();

              if (_this86._open) {
                _this86._setCloseHandlers();
              }
            });
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            if (changes.container && this._open) {
              this._applyContainer(this.container);
            }

            if (changes.placement && !changes.placement.isFirstChange) {
              this._applyPlacementClasses();
            }

            if (changes.dropdownClass) {
              var _changes$dropdownClas = changes.dropdownClass,
                  currentValue = _changes$dropdownClas.currentValue,
                  previousValue = _changes$dropdownClas.previousValue;

              this._applyCustomDropdownClass(currentValue, previousValue);
            }
          }
          /**
           * Checks if the dropdown menu is open.
           */

        }, {
          key: "isOpen",
          value: function isOpen() {
            return this._open;
          }
          /**
           * Opens the dropdown menu.
           */

        }, {
          key: "open",
          value: function open() {
            if (!this._open) {
              this._open = true;

              this._applyContainer(this.container);

              this.openChange.emit(true);

              this._setCloseHandlers();

              if (this._anchor) {
                this._anchor.nativeElement.focus();
              }
            }
          }
        }, {
          key: "_setCloseHandlers",
          value: function _setCloseHandlers() {
            var _this87 = this;

            ngbAutoClose(this._ngZone, this._document, this.autoClose, function (source) {
              _this87.close();

              if (source === 0
              /* ESCAPE */
              ) {
                  _this87._anchor.nativeElement.focus();
                }
            }, this._closed$, this._menu ? [this._menu.nativeElement] : [], this._anchor ? [this._anchor.nativeElement] : [], '.dropdown-item,.dropdown-divider');
          }
          /**
           * Closes the dropdown menu.
           */

        }, {
          key: "close",
          value: function close() {
            if (this._open) {
              this._open = false;

              this._resetContainer();

              this._closed$.next();

              this.openChange.emit(false);

              this._changeDetector.markForCheck();
            }
          }
          /**
           * Toggles the dropdown menu.
           */

        }, {
          key: "toggle",
          value: function toggle() {
            if (this.isOpen()) {
              this.close();
            } else {
              this.open();
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._resetContainer();

            this._closed$.next();

            this._zoneSubscription.unsubscribe();
          }
        }, {
          key: "onKeyDown",
          value: function onKeyDown(event) {
            var _this88 = this;

            // tslint:disable-next-line:deprecation
            var key = event.which;

            var itemElements = this._getMenuElements();

            var position = -1;
            var itemElement = null;

            var isEventFromToggle = this._isEventFromToggle(event);

            if (!isEventFromToggle && itemElements.length) {
              itemElements.forEach(function (item, index) {
                if (item.contains(event.target)) {
                  itemElement = item;
                }

                if (item === _this88._document.activeElement) {
                  position = index;
                }
              });
            } // closing on Enter / Space


            if (key === Key.Space || key === Key.Enter) {
              if (itemElement && (this.autoClose === true || this.autoClose === 'inside')) {
                // Item is either a button or a link, so click will be triggered by the browser on Enter or Space.
                // So we have to register a one-time click handler that will fire after any user defined click handlers
                // to close the dropdown
                Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(itemElement, 'click').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1)).subscribe(function () {
                  return _this88.close();
                });
              }

              return;
            }

            if (key === Key.Tab) {
              if (event.target && this.isOpen() && this.autoClose) {
                if (this._anchor.nativeElement === event.target) {
                  if (this.container === 'body' && !event.shiftKey) {
                    /* This case is special: user is using [Tab] from the anchor/toggle.
                       User expects the next focusable element in the dropdown menu to get focus.
                       But the menu is not a sibling to anchor/toggle, it is at the end of the body.
                       Trick is to synchronously focus the menu element, and let the [keydown.Tab] go
                       so that browser will focus the proper element (first one focusable in the menu) */
                    this._renderer.setAttribute(this._menu.nativeElement, 'tabindex', '0');

                    this._menu.nativeElement.focus();

                    this._renderer.removeAttribute(this._menu.nativeElement, 'tabindex');
                  } else if (event.shiftKey) {
                    this.close();
                  }

                  return;
                } else if (this.container === 'body') {
                  var focusableElements = this._menu.nativeElement.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR);

                  if (event.shiftKey && event.target === focusableElements[0]) {
                    this._anchor.nativeElement.focus();

                    event.preventDefault();
                  } else if (!event.shiftKey && event.target === focusableElements[focusableElements.length - 1]) {
                    this._anchor.nativeElement.focus();

                    this.close();
                  }
                } else {
                  Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(event.target, 'focusout').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1)).subscribe(function (_ref43) {
                    var relatedTarget = _ref43.relatedTarget;

                    if (!_this88._elementRef.nativeElement.contains(relatedTarget)) {
                      _this88.close();
                    }
                  });
                }
              }

              return;
            } // opening / navigating


            if (isEventFromToggle || itemElement) {
              this.open();

              if (itemElements.length) {
                switch (key) {
                  case Key.ArrowDown:
                    position = Math.min(position + 1, itemElements.length - 1);
                    break;

                  case Key.ArrowUp:
                    if (this._isDropup() && position === -1) {
                      position = itemElements.length - 1;
                      break;
                    }

                    position = Math.max(position - 1, 0);
                    break;

                  case Key.Home:
                    position = 0;
                    break;

                  case Key.End:
                    position = itemElements.length - 1;
                    break;
                }

                itemElements[position].focus();
              }

              event.preventDefault();
            }
          }
        }, {
          key: "_isDropup",
          value: function _isDropup() {
            return this._elementRef.nativeElement.classList.contains('dropup');
          }
        }, {
          key: "_isEventFromToggle",
          value: function _isEventFromToggle(event) {
            return this._anchor.nativeElement.contains(event.target);
          }
        }, {
          key: "_getMenuElements",
          value: function _getMenuElements() {
            var menu = this._menu;

            if (menu == null) {
              return [];
            }

            return menu.menuItems.filter(function (item) {
              return !item.disabled;
            }).map(function (item) {
              return item.elementRef.nativeElement;
            });
          }
        }, {
          key: "_positionMenu",
          value: function _positionMenu() {
            var menu = this._menu;

            if (this.isOpen() && menu) {
              this._applyPlacementClasses(this.display === 'dynamic' ? positionElements(this._anchor.nativeElement, this._bodyContainer || this._menu.nativeElement, this.placement, this.container === 'body') : this._getFirstPlacement(this.placement));
            }
          }
        }, {
          key: "_getFirstPlacement",
          value: function _getFirstPlacement(placement) {
            return Array.isArray(placement) ? placement[0] : placement.split(' ')[0];
          }
        }, {
          key: "_resetContainer",
          value: function _resetContainer() {
            var renderer = this._renderer;

            if (this._menu) {
              var dropdownElement = this._elementRef.nativeElement;
              var dropdownMenuElement = this._menu.nativeElement;
              renderer.appendChild(dropdownElement, dropdownMenuElement);
              renderer.removeStyle(dropdownMenuElement, 'position');
              renderer.removeStyle(dropdownMenuElement, 'transform');
            }

            if (this._bodyContainer) {
              renderer.removeChild(this._document.body, this._bodyContainer);
              this._bodyContainer = null;
            }
          }
        }, {
          key: "_applyContainer",
          value: function _applyContainer() {
            var container = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;

            this._resetContainer();

            if (container === 'body') {
              var renderer = this._renderer;
              var dropdownMenuElement = this._menu.nativeElement;
              var bodyContainer = this._bodyContainer = this._bodyContainer || renderer.createElement('div'); // Override some styles to have the positioning working

              renderer.setStyle(bodyContainer, 'position', 'absolute');
              renderer.setStyle(dropdownMenuElement, 'position', 'static');
              renderer.setStyle(bodyContainer, 'z-index', '1050');
              renderer.appendChild(bodyContainer, dropdownMenuElement);
              renderer.appendChild(this._document.body, bodyContainer);
            }

            this._applyCustomDropdownClass(this.dropdownClass);
          }
        }, {
          key: "_applyCustomDropdownClass",
          value: function _applyCustomDropdownClass(newClass, oldClass) {
            var targetElement = this.container === 'body' ? this._bodyContainer : this._elementRef.nativeElement;

            if (targetElement) {
              if (oldClass) {
                this._renderer.removeClass(targetElement, oldClass);
              }

              if (newClass) {
                this._renderer.addClass(targetElement, newClass);
              }
            }
          }
        }, {
          key: "_applyPlacementClasses",
          value: function _applyPlacementClasses(placement) {
            var menu = this._menu;

            if (menu) {
              if (!placement) {
                placement = this._getFirstPlacement(this.placement);
              }

              var renderer = this._renderer;
              var dropdownElement = this._elementRef.nativeElement; // remove the current placement classes

              renderer.removeClass(dropdownElement, 'dropup');
              renderer.removeClass(dropdownElement, 'dropdown');
              menu.placement = this.display === 'static' ? null : placement;
              /*
              * apply the new placement
              * in case of top use up-arrow or down-arrow otherwise
              */

              var dropdownClass = placement.search('^top') !== -1 ? 'dropup' : 'dropdown';
              renderer.addClass(dropdownElement, dropdownClass);
              var bodyContainer = this._bodyContainer;

              if (bodyContainer) {
                renderer.removeClass(bodyContainer, 'dropup');
                renderer.removeClass(bodyContainer, 'dropdown');
                renderer.addClass(bodyContainer, dropdownClass);
              }
            }
          }
        }]);

        return NgbDropdown;
      }();

      NgbDropdown.ɵfac = function NgbDropdown_Factory(t) {
        return new (t || NgbDropdown)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbDropdownConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbNavbar, 8));
      };

      NgbDropdown.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbDropdown,
        selectors: [["", "ngbDropdown", ""]],
        contentQueries: function NgbDropdown_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbDropdownMenu, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbDropdownAnchor, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx._menu = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx._anchor = _t.first);
          }
        },
        hostVars: 2,
        hostBindings: function NgbDropdown_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("show", ctx.isOpen());
          }
        },
        inputs: {
          _open: ["open", "_open"],
          placement: "placement",
          container: "container",
          autoClose: "autoClose",
          display: "display",
          dropdownClass: "dropdownClass"
        },
        outputs: {
          openChange: "openChange"
        },
        exportAs: ["ngbDropdown"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
      });

      NgbDropdown.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }, {
          type: NgbDropdownConfig
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }, {
          type: NgbNavbar,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }]
        }];
      };

      NgbDropdown.propDecorators = {
        _menu: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [NgbDropdownMenu, {
            "static": false
          }]
        }],
        _anchor: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [NgbDropdownAnchor, {
            "static": false
          }]
        }],
        autoClose: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        dropdownClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        _open: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['open']
        }],
        placement: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        container: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        display: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        openChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDropdown, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngbDropdown]',
            exportAs: 'ngbDropdown',
            host: {
              '[class.show]': 'isOpen()'
            }
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }, {
            type: NgbDropdownConfig
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }, {
            type: NgbNavbar,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }]
          }];
        }, {
          _open: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['open']
          }],
          openChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          placement: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          container: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          autoClose: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          display: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          _menu: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [NgbDropdownMenu, {
              "static": false
            }]
          }],
          _anchor: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [NgbDropdownAnchor, {
              "static": false
            }]
          }],
          dropdownClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var NGB_DROPDOWN_DIRECTIVES = [NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, NgbNavbar];

      var NgbDropdownModule = function NgbDropdownModule() {
        _classCallCheck2(this, NgbDropdownModule);
      };

      NgbDropdownModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NgbDropdownModule
      });
      NgbDropdownModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NgbDropdownModule_Factory(t) {
          return new (t || NgbDropdownModule)();
        }
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbDropdownModule, {
          declarations: [NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, NgbNavbar],
          exports: [NgbDropdown, NgbDropdownAnchor, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, NgbNavbar]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbDropdownModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            declarations: NGB_DROPDOWN_DIRECTIVES,
            exports: NGB_DROPDOWN_DIRECTIVES
          }]
        }], null, null);
      })();
      /**
       * A configuration service for the [`NgbModal`](#/components/modal/api#NgbModal) service.
       *
       * You can inject this service, typically in your root component, and customize the values of its properties in
       * order to provide default values for all modals used in the application.
      *
      * @since 3.1.0
      */


      var NgbModalConfig = /*#__PURE__*/function () {
        function NgbModalConfig(_ngbConfig) {
          _classCallCheck2(this, NgbModalConfig);

          this._ngbConfig = _ngbConfig;
          this.backdrop = true;
          this.keyboard = true;
        }

        _createClass2(NgbModalConfig, [{
          key: "animation",
          get: function get() {
            return this._animation === undefined ? this._ngbConfig.animation : this._animation;
          },
          set: function set(animation) {
            this._animation = animation;
          }
        }]);

        return NgbModalConfig;
      }();

      NgbModalConfig.ɵfac = function NgbModalConfig_Factory(t) {
        return new (t || NgbModalConfig)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig));
      };

      NgbModalConfig.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function NgbModalConfig_Factory() {
          return new NgbModalConfig(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig));
        },
        token: NgbModalConfig,
        providedIn: "root"
      });

      NgbModalConfig.ctorParameters = function () {
        return [{
          type: NgbConfig
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbModalConfig, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: NgbConfig
          }];
        }, null);
      })();

      var ContentRef = function ContentRef(nodes, viewRef, componentRef) {
        _classCallCheck2(this, ContentRef);

        this.nodes = nodes;
        this.viewRef = viewRef;
        this.componentRef = componentRef;
      };

      var PopupService = /*#__PURE__*/function () {
        function PopupService(_type, _injector, _viewContainerRef, _renderer, _ngZone, _componentFactoryResolver, _applicationRef) {
          _classCallCheck2(this, PopupService);

          this._type = _type;
          this._injector = _injector;
          this._viewContainerRef = _viewContainerRef;
          this._renderer = _renderer;
          this._ngZone = _ngZone;
          this._componentFactoryResolver = _componentFactoryResolver;
          this._applicationRef = _applicationRef;
          this._windowRef = null;
          this._contentRef = null;
        }

        _createClass2(PopupService, [{
          key: "open",
          value: function open(content, context) {
            var _this89 = this;

            var animation = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;

            if (!this._windowRef) {
              this._contentRef = this._getContentRef(content, context);
              this._windowRef = this._viewContainerRef.createComponent(this._componentFactoryResolver.resolveComponentFactory(this._type), this._viewContainerRef.length, this._injector, this._contentRef.nodes);
            }

            var nativeElement = this._windowRef.location.nativeElement;

            var transition$ = this._ngZone.onStable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])(function () {
              return ngbRunTransition(_this89._ngZone, nativeElement, function (_ref44) {
                var classList = _ref44.classList;
                return classList.add('show');
              }, {
                animation: animation,
                runningTransition: 'continue'
              });
            }));

            return {
              windowRef: this._windowRef,
              transition$: transition$
            };
          }
        }, {
          key: "close",
          value: function close() {
            var _this90 = this;

            var animation = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;

            if (!this._windowRef) {
              return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(undefined);
            }

            return ngbRunTransition(this._ngZone, this._windowRef.location.nativeElement, function (_ref45) {
              var classList = _ref45.classList;
              return classList.remove('show');
            }, {
              animation: animation,
              runningTransition: 'stop'
            }).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function () {
              var _a;

              if (_this90._windowRef) {
                // this is required because of the container='body' option
                _this90._viewContainerRef.remove(_this90._viewContainerRef.indexOf(_this90._windowRef.hostView));

                _this90._windowRef = null;
              }

              if ((_a = _this90._contentRef) === null || _a === void 0 ? void 0 : _a.viewRef) {
                _this90._applicationRef.detachView(_this90._contentRef.viewRef);

                _this90._contentRef.viewRef.destroy();

                _this90._contentRef = null;
              }
            }));
          }
        }, {
          key: "_getContentRef",
          value: function _getContentRef(content, context) {
            if (!content) {
              return new ContentRef([]);
            } else if (content instanceof _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]) {
              var viewRef = content.createEmbeddedView(context);

              this._applicationRef.attachView(viewRef);

              return new ContentRef([viewRef.rootNodes], viewRef);
            } else {
              return new ContentRef([[this._renderer.createText("".concat(content))]]);
            }
          }
        }]);

        return PopupService;
      }();

      var noop = function noop() {};

      var ɵ0$2 = noop;
      /**
       * Utility to handle the scrollbar.
       *
       * It allows to compensate the lack of a vertical scrollbar by adding an
       * equivalent padding on the right of the body, and to remove this compensation.
       */

      var ScrollBar = /*#__PURE__*/function () {
        function ScrollBar(_document) {
          _classCallCheck2(this, ScrollBar);

          this._document = _document;
        }
        /**
         * To be called right before a potential vertical scrollbar would be removed:
         *
         * - if there was a scrollbar, adds some compensation padding to the body
         * to keep the same layout as when the scrollbar is there
         * - if there was none, there is nothing to do
         *
         * @return a callback used to revert the compensation (noop if there was none,
         * otherwise a function removing the padding)
         */


        _createClass2(ScrollBar, [{
          key: "compensate",
          value: function compensate() {
            var width = this._getWidth();

            return !this._isPresent(width) ? noop : this._adjustBody(width);
          }
          /**
           * Adds a padding of the given width on the right of the body.
           *
           * @return a callback used to revert the padding to its previous value
           */

        }, {
          key: "_adjustBody",
          value: function _adjustBody(scrollbarWidth) {
            var body = this._document.body;
            var userSetPaddingStyle = body.style.paddingRight;
            var actualPadding = parseFloat(window.getComputedStyle(body)['padding-right']);
            body.style['padding-right'] = "".concat(actualPadding + scrollbarWidth, "px");
            return function () {
              return body.style['padding-right'] = userSetPaddingStyle;
            };
          }
          /**
           * Tells whether a scrollbar is currently present on the body.
           *
           * @return true if scrollbar is present, false otherwise
           */

        }, {
          key: "_isPresent",
          value: function _isPresent(scrollbarWidth) {
            var rect = this._document.body.getBoundingClientRect();

            var bodyToViewportGap = window.innerWidth - (rect.left + rect.right);
            var uncertainty = 0.1 * scrollbarWidth;
            return bodyToViewportGap >= scrollbarWidth - uncertainty;
          }
          /**
           * Calculates and returns the width of a scrollbar.
           *
           * @return the width of a scrollbar on this page
           */

        }, {
          key: "_getWidth",
          value: function _getWidth() {
            var measurer = this._document.createElement('div');

            measurer.className = 'modal-scrollbar-measure';
            var body = this._document.body;
            body.appendChild(measurer);
            var width = measurer.getBoundingClientRect().width - measurer.clientWidth;
            body.removeChild(measurer);
            return width;
          }
        }]);

        return ScrollBar;
      }();

      ScrollBar.ɵfac = function ScrollBar_Factory(t) {
        return new (t || ScrollBar)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]));
      };

      ScrollBar.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function ScrollBar_Factory() {
          return new ScrollBar(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]));
        },
        token: ScrollBar,
        providedIn: "root"
      });

      ScrollBar.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ScrollBar, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
            }]
          }];
        }, null);
      })();

      var NgbModalBackdrop = /*#__PURE__*/function () {
        function NgbModalBackdrop(_el, _zone) {
          _classCallCheck2(this, NgbModalBackdrop);

          this._el = _el;
          this._zone = _zone;
        }

        _createClass2(NgbModalBackdrop, [{
          key: "ngOnInit",
          value: function ngOnInit() {
            var _this91 = this;

            this._zone.onStable.asObservable().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1)).subscribe(function () {
              ngbRunTransition(_this91._zone, _this91._el.nativeElement, function (element, animation) {
                if (animation) {
                  reflow(element);
                }

                element.classList.add('show');
              }, {
                animation: _this91.animation,
                runningTransition: 'continue'
              });
            });
          }
        }, {
          key: "hide",
          value: function hide() {
            return ngbRunTransition(this._zone, this._el.nativeElement, function (_ref46) {
              var classList = _ref46.classList;
              return classList.remove('show');
            }, {
              animation: this.animation,
              runningTransition: 'stop'
            });
          }
        }]);

        return NgbModalBackdrop;
      }();

      NgbModalBackdrop.ɵfac = function NgbModalBackdrop_Factory(t) {
        return new (t || NgbModalBackdrop)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]));
      };

      NgbModalBackdrop.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: NgbModalBackdrop,
        selectors: [["ngb-modal-backdrop"]],
        hostAttrs: [2, "z-index", "1050"],
        hostVars: 6,
        hostBindings: function NgbModalBackdrop_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"]("modal-backdrop" + (ctx.backdropClass ? " " + ctx.backdropClass : ""));

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("show", !ctx.animation)("fade", ctx.animation);
          }
        },
        inputs: {
          animation: "animation",
          backdropClass: "backdropClass"
        },
        decls: 0,
        vars: 0,
        template: function NgbModalBackdrop_Template(rf, ctx) {},
        encapsulation: 2
      });

      NgbModalBackdrop.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }];
      };

      NgbModalBackdrop.propDecorators = {
        animation: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        backdropClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbModalBackdrop, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'ngb-modal-backdrop',
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            template: '',
            host: {
              '[class]': '"modal-backdrop" + (backdropClass ? " " + backdropClass : "")',
              '[class.show]': '!animation',
              '[class.fade]': 'animation',
              'style': 'z-index: 1050'
            }
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }];
        }, {
          animation: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          backdropClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * A reference to the currently opened (active) modal.
       *
       * Instances of this class can be injected into your component passed as modal content.
       * So you can `.close()` or `.dismiss()` the modal window from your component.
       */


      var NgbActiveModal = /*#__PURE__*/function () {
        function NgbActiveModal() {
          _classCallCheck2(this, NgbActiveModal);
        }

        _createClass2(NgbActiveModal, [{
          key: "close",
          value:
          /**
           * Closes the modal with an optional `result` value.
           *
           * The `NgbModalRef.result` promise will be resolved with the provided value.
           */
          function close(result) {}
          /**
           * Dismisses the modal with an optional `reason` value.
           *
           * The `NgbModalRef.result` promise will be rejected with the provided value.
           */

        }, {
          key: "dismiss",
          value: function dismiss(reason) {}
        }]);

        return NgbActiveModal;
      }();
      /**
       * A reference to the newly opened modal returned by the `NgbModal.open()` method.
       */


      var NgbModalRef = /*#__PURE__*/function () {
        function NgbModalRef(_windowCmptRef, _contentRef, _backdropCmptRef, _beforeDismiss) {
          var _this92 = this;

          _classCallCheck2(this, NgbModalRef);

          this._windowCmptRef = _windowCmptRef;
          this._contentRef = _contentRef;
          this._backdropCmptRef = _backdropCmptRef;
          this._beforeDismiss = _beforeDismiss;
          this._closed = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          this._dismissed = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          this._hidden = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();

          _windowCmptRef.instance.dismissEvent.subscribe(function (reason) {
            _this92.dismiss(reason);
          });

          this.result = new Promise(function (resolve, reject) {
            _this92._resolve = resolve;
            _this92._reject = reject;
          });
          this.result.then(null, function () {});
        }
        /**
         * The instance of a component used for the modal content.
         *
         * When a `TemplateRef` is used as the content or when the modal is closed, will return `undefined`.
         */


        _createClass2(NgbModalRef, [{
          key: "componentInstance",
          get: function get() {
            if (this._contentRef && this._contentRef.componentRef) {
              return this._contentRef.componentRef.instance;
            }
          }
          /**
           * The observable that emits when the modal is closed via the `.close()` method.
           *
           * It will emit the result passed to the `.close()` method.
           *
           * @since 8.0.0
           */

        }, {
          key: "closed",
          get: function get() {
            return this._closed.asObservable().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this._hidden));
          }
          /**
           * The observable that emits when the modal is dismissed via the `.dismiss()` method.
           *
           * It will emit the reason passed to the `.dismissed()` method by the user, or one of the internal
           * reasons like backdrop click or ESC key press.
           *
           * @since 8.0.0
           */

        }, {
          key: "dismissed",
          get: function get() {
            return this._dismissed.asObservable().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this._hidden));
          }
          /**
           * The observable that emits when both modal window and backdrop are closed and animations were finished.
           * At this point modal and backdrop elements will be removed from the DOM tree.
           *
           * This observable will be completed after emitting.
           *
           * @since 8.0.0
           */

        }, {
          key: "hidden",
          get: function get() {
            return this._hidden.asObservable();
          }
          /**
           * The observable that emits when modal is fully visible and animation was finished.
           * Modal DOM element is always available synchronously after calling 'modal.open()' service.
           *
           * This observable will be completed after emitting.
           * It will not emit, if modal is closed before open animation is finished.
           *
           * @since 8.0.0
           */

        }, {
          key: "shown",
          get: function get() {
            return this._windowCmptRef.instance.shown.asObservable();
          }
          /**
           * Closes the modal with an optional `result` value.
           *
           * The `NgbMobalRef.result` promise will be resolved with the provided value.
           */

        }, {
          key: "close",
          value: function close(result) {
            if (this._windowCmptRef) {
              this._closed.next(result);

              this._resolve(result);

              this._removeModalElements();
            }
          }
        }, {
          key: "_dismiss",
          value: function _dismiss(reason) {
            this._dismissed.next(reason);

            this._reject(reason);

            this._removeModalElements();
          }
          /**
           * Dismisses the modal with an optional `reason` value.
           *
           * The `NgbModalRef.result` promise will be rejected with the provided value.
           */

        }, {
          key: "dismiss",
          value: function dismiss(reason) {
            var _this93 = this;

            if (this._windowCmptRef) {
              if (!this._beforeDismiss) {
                this._dismiss(reason);
              } else {
                var dismiss = this._beforeDismiss();

                if (dismiss && dismiss.then) {
                  dismiss.then(function (result) {
                    if (result !== false) {
                      _this93._dismiss(reason);
                    }
                  }, function () {});
                } else if (dismiss !== false) {
                  this._dismiss(reason);
                }
              }
            }
          }
        }, {
          key: "_removeModalElements",
          value: function _removeModalElements() {
            var _this94 = this;

            var windowTransition$ = this._windowCmptRef.instance.hide();

            var backdropTransition$ = this._backdropCmptRef ? this._backdropCmptRef.instance.hide() : Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(undefined); // hiding window

            windowTransition$.subscribe(function () {
              var nativeElement = _this94._windowCmptRef.location.nativeElement;
              nativeElement.parentNode.removeChild(nativeElement);

              _this94._windowCmptRef.destroy();

              if (_this94._contentRef && _this94._contentRef.viewRef) {
                _this94._contentRef.viewRef.destroy();
              }

              _this94._windowCmptRef = null;
              _this94._contentRef = null;
            }); // hiding backdrop

            backdropTransition$.subscribe(function () {
              if (_this94._backdropCmptRef) {
                var nativeElement = _this94._backdropCmptRef.location.nativeElement;
                nativeElement.parentNode.removeChild(nativeElement);

                _this94._backdropCmptRef.destroy();

                _this94._backdropCmptRef = null;
              }
            }); // all done

            Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["zip"])(windowTransition$, backdropTransition$).subscribe(function () {
              _this94._hidden.next();

              _this94._hidden.complete();
            });
          }
        }]);

        return NgbModalRef;
      }();

      var ModalDismissReasons;

      (function (ModalDismissReasons) {
        ModalDismissReasons[ModalDismissReasons["BACKDROP_CLICK"] = 0] = "BACKDROP_CLICK";
        ModalDismissReasons[ModalDismissReasons["ESC"] = 1] = "ESC";
      })(ModalDismissReasons || (ModalDismissReasons = {}));

      var NgbModalWindow = /*#__PURE__*/function () {
        function NgbModalWindow(_document, _elRef, _zone) {
          _classCallCheck2(this, NgbModalWindow);

          this._document = _document;
          this._elRef = _elRef;
          this._zone = _zone;
          this._closed$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          this._elWithFocus = null; // element that is focused prior to modal opening

          this.backdrop = true;
          this.keyboard = true;
          this.dismissEvent = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.shown = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          this.hidden = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
        }

        _createClass2(NgbModalWindow, [{
          key: "dismiss",
          value: function dismiss(reason) {
            this.dismissEvent.emit(reason);
          }
        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            var _this95 = this;

            this._elWithFocus = this._document.activeElement;

            this._zone.onStable.asObservable().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1)).subscribe(function () {
              _this95._show();
            });
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._disableEventHandling();
          }
        }, {
          key: "hide",
          value: function hide() {
            var _this96 = this;

            var nativeElement = this._elRef.nativeElement;
            var context = {
              animation: this.animation,
              runningTransition: 'stop'
            };
            var windowTransition$ = ngbRunTransition(this._zone, nativeElement, function () {
              return nativeElement.classList.remove('show');
            }, context);
            var dialogTransition$ = ngbRunTransition(this._zone, this._dialogEl.nativeElement, function () {}, context);
            var transitions$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["zip"])(windowTransition$, dialogTransition$);
            transitions$.subscribe(function () {
              _this96.hidden.next();

              _this96.hidden.complete();
            });

            this._disableEventHandling();

            this._restoreFocus();

            return transitions$;
          }
        }, {
          key: "_show",
          value: function _show() {
            var _this97 = this;

            var context = {
              animation: this.animation,
              runningTransition: 'continue'
            };
            var windowTransition$ = ngbRunTransition(this._zone, this._elRef.nativeElement, function (element, animation) {
              if (animation) {
                reflow(element);
              }

              element.classList.add('show');
            }, context);
            var dialogTransition$ = ngbRunTransition(this._zone, this._dialogEl.nativeElement, function () {}, context);
            Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["zip"])(windowTransition$, dialogTransition$).subscribe(function () {
              _this97.shown.next();

              _this97.shown.complete();
            });

            this._enableEventHandling();

            this._setFocus();
          }
        }, {
          key: "_enableEventHandling",
          value: function _enableEventHandling() {
            var _this98 = this;

            var nativeElement = this._elRef.nativeElement;

            this._zone.runOutsideAngular(function () {
              Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(nativeElement, 'keydown').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(_this98._closed$), // tslint:disable-next-line:deprecation
              Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(function (e) {
                return e.which === Key.Escape;
              })).subscribe(function (event) {
                if (_this98.keyboard) {
                  requestAnimationFrame(function () {
                    if (!event.defaultPrevented) {
                      _this98._zone.run(function () {
                        return _this98.dismiss(ModalDismissReasons.ESC);
                      });
                    }
                  });
                } else if (_this98.backdrop === 'static') {
                  _this98._bumpBackdrop();
                }
              }); // We're listening to 'mousedown' and 'mouseup' to prevent modal from closing when pressing the mouse
              // inside the modal dialog and releasing it outside

              var preventClose = false;
              Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(_this98._dialogEl.nativeElement, 'mousedown').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(_this98._closed$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function () {
                return preventClose = false;
              }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(function () {
                return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(nativeElement, 'mouseup').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(_this98._closed$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1));
              }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(function (_ref47) {
                var target = _ref47.target;
                return nativeElement === target;
              })).subscribe(function () {
                preventClose = true;
              }); // We're listening to 'click' to dismiss modal on modal window click, except when:
              // 1. clicking on modal dialog itself
              // 2. closing was prevented by mousedown/up handlers
              // 3. clicking on scrollbar when the viewport is too small and modal doesn't fit (click is not triggered at all)

              Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(nativeElement, 'click').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(_this98._closed$)).subscribe(function (_ref48) {
                var target = _ref48.target;

                if (nativeElement === target) {
                  if (_this98.backdrop === 'static') {
                    _this98._bumpBackdrop();
                  } else if (_this98.backdrop === true && !preventClose) {
                    _this98._zone.run(function () {
                      return _this98.dismiss(ModalDismissReasons.BACKDROP_CLICK);
                    });
                  }
                }

                preventClose = false;
              });
            });
          }
        }, {
          key: "_disableEventHandling",
          value: function _disableEventHandling() {
            this._closed$.next();
          }
        }, {
          key: "_setFocus",
          value: function _setFocus() {
            var nativeElement = this._elRef.nativeElement;

            if (!nativeElement.contains(document.activeElement)) {
              var autoFocusable = nativeElement.querySelector("[ngbAutofocus]");
              var firstFocusable = getFocusableBoundaryElements(nativeElement)[0];
              var elementToFocus = autoFocusable || firstFocusable || nativeElement;
              elementToFocus.focus();
            }
          }
        }, {
          key: "_restoreFocus",
          value: function _restoreFocus() {
            var _this99 = this;

            var body = this._document.body;
            var elWithFocus = this._elWithFocus;
            var elementToFocus;

            if (elWithFocus && elWithFocus['focus'] && body.contains(elWithFocus)) {
              elementToFocus = elWithFocus;
            } else {
              elementToFocus = body;
            }

            this._zone.runOutsideAngular(function () {
              setTimeout(function () {
                return elementToFocus.focus();
              });
              _this99._elWithFocus = null;
            });
          }
        }, {
          key: "_bumpBackdrop",
          value: function _bumpBackdrop() {
            if (this.backdrop === 'static') {
              ngbRunTransition(this._zone, this._elRef.nativeElement, function (_ref49) {
                var classList = _ref49.classList;
                classList.add('modal-static');
                return function () {
                  return classList.remove('modal-static');
                };
              }, {
                animation: this.animation,
                runningTransition: 'continue'
              });
            }
          }
        }]);

        return NgbModalWindow;
      }();

      NgbModalWindow.ɵfac = function NgbModalWindow_Factory(t) {
        return new (t || NgbModalWindow)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]));
      };

      NgbModalWindow.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: NgbModalWindow,
        selectors: [["ngb-modal-window"]],
        viewQuery: function NgbModalWindow_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](_c31, 3);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx._dialogEl = _t.first);
          }
        },
        hostAttrs: ["role", "dialog", "tabindex", "-1"],
        hostVars: 7,
        hostBindings: function NgbModalWindow_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-modal", true)("aria-labelledby", ctx.ariaLabelledBy)("aria-describedby", ctx.ariaDescribedBy);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"]("modal d-block" + (ctx.windowClass ? " " + ctx.windowClass : ""));

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("fade", ctx.animation);
          }
        },
        inputs: {
          backdrop: "backdrop",
          keyboard: "keyboard",
          animation: "animation",
          ariaLabelledBy: "ariaLabelledBy",
          ariaDescribedBy: "ariaDescribedBy",
          centered: "centered",
          scrollable: "scrollable",
          size: "size",
          windowClass: "windowClass",
          modalDialogClass: "modalDialogClass"
        },
        outputs: {
          dismissEvent: "dismiss"
        },
        ngContentSelectors: _c3,
        decls: 4,
        vars: 2,
        consts: [["role", "document"], ["dialog", ""], [1, "modal-content"]],
        template: function NgbModalWindow_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "div", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"]("modal-dialog" + (ctx.size ? " modal-" + ctx.size : "") + (ctx.centered ? " modal-dialog-centered" : "") + (ctx.scrollable ? " modal-dialog-scrollable" : "") + (ctx.modalDialogClass ? " " + ctx.modalDialogClass : ""));
          }
        },
        styles: ["ngb-modal-window .component-host-scrollable{display:flex;flex-direction:column;overflow:hidden}"],
        encapsulation: 2
      });

      NgbModalWindow.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }];
      };

      NgbModalWindow.propDecorators = {
        _dialogEl: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
          args: ['dialog', {
            "static": true
          }]
        }],
        animation: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        ariaLabelledBy: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        ariaDescribedBy: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        backdrop: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        centered: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        keyboard: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        scrollable: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        size: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        windowClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        modalDialogClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        dismissEvent: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
          args: ['dismiss']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbModalWindow, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'ngb-modal-window',
            host: {
              '[class]': '"modal d-block" + (windowClass ? " " + windowClass : "")',
              '[class.fade]': 'animation',
              'role': 'dialog',
              'tabindex': '-1',
              '[attr.aria-modal]': 'true',
              '[attr.aria-labelledby]': 'ariaLabelledBy',
              '[attr.aria-describedby]': 'ariaDescribedBy'
            },
            template: "\n    <div #dialog [class]=\"'modal-dialog' + (size ? ' modal-' + size : '') + (centered ? ' modal-dialog-centered' : '') +\n     (scrollable ? ' modal-dialog-scrollable' : '') + (modalDialogClass ? ' ' + modalDialogClass : '')\" role=\"document\">\n        <div class=\"modal-content\"><ng-content></ng-content></div>\n    </div>\n    ",
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            styles: ["ngb-modal-window .component-host-scrollable{display:flex;flex-direction:column;overflow:hidden}"]
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }];
        }, {
          backdrop: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          keyboard: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          dismissEvent: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
            args: ['dismiss']
          }],
          _dialogEl: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
            args: ['dialog', {
              "static": true
            }]
          }],
          animation: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          ariaLabelledBy: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          ariaDescribedBy: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          centered: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          scrollable: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          size: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          windowClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          modalDialogClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var NgbModalStack = /*#__PURE__*/function () {
        function NgbModalStack(_applicationRef, _injector, _document, _scrollBar, _rendererFactory, _ngZone) {
          var _this100 = this;

          _classCallCheck2(this, NgbModalStack);

          this._applicationRef = _applicationRef;
          this._injector = _injector;
          this._document = _document;
          this._scrollBar = _scrollBar;
          this._rendererFactory = _rendererFactory;
          this._ngZone = _ngZone;
          this._activeWindowCmptHasChanged = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          this._ariaHiddenValues = new Map();
          this._backdropAttributes = ['animation', 'backdropClass'];
          this._modalRefs = [];
          this._windowAttributes = ['animation', 'ariaLabelledBy', 'ariaDescribedBy', 'backdrop', 'centered', 'keyboard', 'scrollable', 'size', 'windowClass', 'modalDialogClass'];
          this._windowCmpts = [];
          this._activeInstances = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"](); // Trap focus on active WindowCmpt

          this._activeWindowCmptHasChanged.subscribe(function () {
            if (_this100._windowCmpts.length) {
              var activeWindowCmpt = _this100._windowCmpts[_this100._windowCmpts.length - 1];
              ngbFocusTrap(_this100._ngZone, activeWindowCmpt.location.nativeElement, _this100._activeWindowCmptHasChanged);

              _this100._revertAriaHidden();

              _this100._setAriaHidden(activeWindowCmpt.location.nativeElement);
            }
          });
        }

        _createClass2(NgbModalStack, [{
          key: "open",
          value: function open(moduleCFR, contentInjector, content, options) {
            var _this101 = this;

            var containerEl = options.container instanceof HTMLElement ? options.container : isDefined(options.container) ? this._document.querySelector(options.container) : this._document.body;

            var renderer = this._rendererFactory.createRenderer(null, null);

            var revertPaddingForScrollBar = this._scrollBar.compensate();

            var removeBodyClass = function removeBodyClass() {
              if (!_this101._modalRefs.length) {
                renderer.removeClass(_this101._document.body, 'modal-open');

                _this101._revertAriaHidden();
              }
            };

            if (!containerEl) {
              throw new Error("The specified modal container \"".concat(options.container || 'body', "\" was not found in the DOM."));
            }

            var activeModal = new NgbActiveModal();

            var contentRef = this._getContentRef(moduleCFR, options.injector || contentInjector, content, activeModal, options);

            var backdropCmptRef = options.backdrop !== false ? this._attachBackdrop(moduleCFR, containerEl) : undefined;

            var windowCmptRef = this._attachWindowComponent(moduleCFR, containerEl, contentRef);

            var ngbModalRef = new NgbModalRef(windowCmptRef, contentRef, backdropCmptRef, options.beforeDismiss);

            this._registerModalRef(ngbModalRef);

            this._registerWindowCmpt(windowCmptRef);

            ngbModalRef.result.then(revertPaddingForScrollBar, revertPaddingForScrollBar);
            ngbModalRef.result.then(removeBodyClass, removeBodyClass);

            activeModal.close = function (result) {
              ngbModalRef.close(result);
            };

            activeModal.dismiss = function (reason) {
              ngbModalRef.dismiss(reason);
            };

            this._applyWindowOptions(windowCmptRef.instance, options);

            if (this._modalRefs.length === 1) {
              renderer.addClass(this._document.body, 'modal-open');
            }

            if (backdropCmptRef && backdropCmptRef.instance) {
              this._applyBackdropOptions(backdropCmptRef.instance, options);

              backdropCmptRef.changeDetectorRef.detectChanges();
            }

            windowCmptRef.changeDetectorRef.detectChanges();
            return ngbModalRef;
          }
        }, {
          key: "activeInstances",
          get: function get() {
            return this._activeInstances;
          }
        }, {
          key: "dismissAll",
          value: function dismissAll(reason) {
            this._modalRefs.forEach(function (ngbModalRef) {
              return ngbModalRef.dismiss(reason);
            });
          }
        }, {
          key: "hasOpenModals",
          value: function hasOpenModals() {
            return this._modalRefs.length > 0;
          }
        }, {
          key: "_attachBackdrop",
          value: function _attachBackdrop(moduleCFR, containerEl) {
            var backdropFactory = moduleCFR.resolveComponentFactory(NgbModalBackdrop);
            var backdropCmptRef = backdropFactory.create(this._injector);

            this._applicationRef.attachView(backdropCmptRef.hostView);

            containerEl.appendChild(backdropCmptRef.location.nativeElement);
            return backdropCmptRef;
          }
        }, {
          key: "_attachWindowComponent",
          value: function _attachWindowComponent(moduleCFR, containerEl, contentRef) {
            var windowFactory = moduleCFR.resolveComponentFactory(NgbModalWindow);
            var windowCmptRef = windowFactory.create(this._injector, contentRef.nodes);

            this._applicationRef.attachView(windowCmptRef.hostView);

            containerEl.appendChild(windowCmptRef.location.nativeElement);
            return windowCmptRef;
          }
        }, {
          key: "_applyWindowOptions",
          value: function _applyWindowOptions(windowInstance, options) {
            this._windowAttributes.forEach(function (optionName) {
              if (isDefined(options[optionName])) {
                windowInstance[optionName] = options[optionName];
              }
            });
          }
        }, {
          key: "_applyBackdropOptions",
          value: function _applyBackdropOptions(backdropInstance, options) {
            this._backdropAttributes.forEach(function (optionName) {
              if (isDefined(options[optionName])) {
                backdropInstance[optionName] = options[optionName];
              }
            });
          }
        }, {
          key: "_getContentRef",
          value: function _getContentRef(moduleCFR, contentInjector, content, activeModal, options) {
            if (!content) {
              return new ContentRef([]);
            } else if (content instanceof _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]) {
              return this._createFromTemplateRef(content, activeModal);
            } else if (isString(content)) {
              return this._createFromString(content);
            } else {
              return this._createFromComponent(moduleCFR, contentInjector, content, activeModal, options);
            }
          }
        }, {
          key: "_createFromTemplateRef",
          value: function _createFromTemplateRef(content, activeModal) {
            var context = {
              $implicit: activeModal,
              close: function close(result) {
                activeModal.close(result);
              },
              dismiss: function dismiss(reason) {
                activeModal.dismiss(reason);
              }
            };
            var viewRef = content.createEmbeddedView(context);

            this._applicationRef.attachView(viewRef);

            return new ContentRef([viewRef.rootNodes], viewRef);
          }
        }, {
          key: "_createFromString",
          value: function _createFromString(content) {
            var component = this._document.createTextNode("".concat(content));

            return new ContentRef([[component]]);
          }
        }, {
          key: "_createFromComponent",
          value: function _createFromComponent(moduleCFR, contentInjector, content, context, options) {
            var contentCmptFactory = moduleCFR.resolveComponentFactory(content);

            var modalContentInjector = _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"].create({
              providers: [{
                provide: NgbActiveModal,
                useValue: context
              }],
              parent: contentInjector
            });

            var componentRef = contentCmptFactory.create(modalContentInjector);
            var componentNativeEl = componentRef.location.nativeElement;

            if (options.scrollable) {
              componentNativeEl.classList.add('component-host-scrollable');
            }

            this._applicationRef.attachView(componentRef.hostView); // FIXME: we should here get rid of the component nativeElement
            // and use `[Array.from(componentNativeEl.childNodes)]` instead and remove the above CSS class.


            return new ContentRef([[componentNativeEl]], componentRef.hostView, componentRef);
          }
        }, {
          key: "_setAriaHidden",
          value: function _setAriaHidden(element) {
            var _this102 = this;

            var parent = element.parentElement;

            if (parent && element !== this._document.body) {
              Array.from(parent.children).forEach(function (sibling) {
                if (sibling !== element && sibling.nodeName !== 'SCRIPT') {
                  _this102._ariaHiddenValues.set(sibling, sibling.getAttribute('aria-hidden'));

                  sibling.setAttribute('aria-hidden', 'true');
                }
              });

              this._setAriaHidden(parent);
            }
          }
        }, {
          key: "_revertAriaHidden",
          value: function _revertAriaHidden() {
            this._ariaHiddenValues.forEach(function (value, element) {
              if (value) {
                element.setAttribute('aria-hidden', value);
              } else {
                element.removeAttribute('aria-hidden');
              }
            });

            this._ariaHiddenValues.clear();
          }
        }, {
          key: "_registerModalRef",
          value: function _registerModalRef(ngbModalRef) {
            var _this103 = this;

            var unregisterModalRef = function unregisterModalRef() {
              var index = _this103._modalRefs.indexOf(ngbModalRef);

              if (index > -1) {
                _this103._modalRefs.splice(index, 1);

                _this103._activeInstances.emit(_this103._modalRefs);
              }
            };

            this._modalRefs.push(ngbModalRef);

            this._activeInstances.emit(this._modalRefs);

            ngbModalRef.result.then(unregisterModalRef, unregisterModalRef);
          }
        }, {
          key: "_registerWindowCmpt",
          value: function _registerWindowCmpt(ngbWindowCmpt) {
            var _this104 = this;

            this._windowCmpts.push(ngbWindowCmpt);

            this._activeWindowCmptHasChanged.next();

            ngbWindowCmpt.onDestroy(function () {
              var index = _this104._windowCmpts.indexOf(ngbWindowCmpt);

              if (index > -1) {
                _this104._windowCmpts.splice(index, 1);

                _this104._activeWindowCmptHasChanged.next();
              }
            });
          }
        }]);

        return NgbModalStack;
      }();

      NgbModalStack.ɵfac = function NgbModalStack_Factory(t) {
        return new (t || NgbModalStack)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](ScrollBar), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]));
      };

      NgbModalStack.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function NgbModalStack_Factory() {
          return new NgbModalStack(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["INJECTOR"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](ScrollBar), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]));
        },
        token: NgbModalStack,
        providedIn: "root"
      });

      NgbModalStack.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
          }]
        }, {
          type: ScrollBar
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbModalStack, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
            }]
          }, {
            type: ScrollBar
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }];
        }, null);
      })();
      /**
       * A service for opening modal windows.
       *
       * Creating a modal is straightforward: create a component or a template and pass it as an argument to
       * the `.open()` method.
       */


      var NgbModal = /*#__PURE__*/function () {
        function NgbModal(_moduleCFR, _injector, _modalStack, _config) {
          _classCallCheck2(this, NgbModal);

          this._moduleCFR = _moduleCFR;
          this._injector = _injector;
          this._modalStack = _modalStack;
          this._config = _config;
        }
        /**
         * Opens a new modal window with the specified content and supplied options.
         *
         * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content,
         * then instances of those components can be injected with an instance of the `NgbActiveModal` class. You can then
         * use `NgbActiveModal` methods to close / dismiss modals from "inside" of your component.
         *
         * Also see the [`NgbModalOptions`](#/components/modal/api#NgbModalOptions) for the list of supported options.
         */


        _createClass2(NgbModal, [{
          key: "open",
          value: function open(content) {
            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
            var combinedOptions = Object.assign(Object.assign(Object.assign({}, this._config), {
              animation: this._config.animation
            }), options);
            return this._modalStack.open(this._moduleCFR, this._injector, content, combinedOptions);
          }
          /**
           * Returns an observable that holds the active modal instances.
           */

        }, {
          key: "activeInstances",
          get: function get() {
            return this._modalStack.activeInstances;
          }
          /**
           * Dismisses all currently displayed modal windows with the supplied reason.
           *
           * @since 3.1.0
           */

        }, {
          key: "dismissAll",
          value: function dismissAll(reason) {
            this._modalStack.dismissAll(reason);
          }
          /**
           * Indicates if there are currently any open modal windows in the application.
           *
           * @since 3.3.0
           */

        }, {
          key: "hasOpenModals",
          value: function hasOpenModals() {
            return this._modalStack.hasOpenModals();
          }
        }]);

        return NgbModal;
      }();

      NgbModal.ɵfac = function NgbModal_Factory(t) {
        return new (t || NgbModal)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbModalStack), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbModalConfig));
      };

      NgbModal.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function NgbModal_Factory() {
          return new NgbModal(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["INJECTOR"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbModalStack), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbModalConfig));
        },
        token: NgbModal,
        providedIn: "root"
      });

      NgbModal.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]
        }, {
          type: NgbModalStack
        }, {
          type: NgbModalConfig
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbModal, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]
          }, {
            type: NgbModalStack
          }, {
            type: NgbModalConfig
          }];
        }, null);
      })();

      var NgbModalModule = function NgbModalModule() {
        _classCallCheck2(this, NgbModalModule);
      };

      NgbModalModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NgbModalModule
      });
      NgbModalModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NgbModalModule_Factory(t) {
          return new (t || NgbModalModule)();
        },
        providers: [NgbModal]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbModalModule, {
          declarations: [NgbModalBackdrop, NgbModalWindow]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbModalModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            declarations: [NgbModalBackdrop, NgbModalWindow],
            entryComponents: [NgbModalBackdrop, NgbModalWindow],
            providers: [NgbModal]
          }]
        }], null, null);
      })();
      /**
       * A configuration service for the [`NgbNav`](#/components/nav/api#NgbNav) component.
       *
       * You can inject this service, typically in your root component, and customize the values of its properties in
       * order to provide default values for all the navs used in the application.
       *
       * @since 5.2.0
       */


      var NgbNavConfig = /*#__PURE__*/function () {
        function NgbNavConfig(_ngbConfig) {
          _classCallCheck2(this, NgbNavConfig);

          this._ngbConfig = _ngbConfig;
          this.destroyOnHide = true;
          this.orientation = 'horizontal';
          this.roles = 'tablist';
          this.keyboard = false;
        }

        _createClass2(NgbNavConfig, [{
          key: "animation",
          get: function get() {
            return this._animation === undefined ? this._ngbConfig.animation : this._animation;
          },
          set: function set(animation) {
            this._animation = animation;
          }
        }]);

        return NgbNavConfig;
      }();

      NgbNavConfig.ɵfac = function NgbNavConfig_Factory(t) {
        return new (t || NgbNavConfig)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig));
      };

      NgbNavConfig.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function NgbNavConfig_Factory() {
          return new NgbNavConfig(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig));
        },
        token: NgbNavConfig,
        providedIn: "root"
      });

      NgbNavConfig.ctorParameters = function () {
        return [{
          type: NgbConfig
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbNavConfig, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: NgbConfig
          }];
        }, null);
      })();

      var isValidNavId = function isValidNavId(id) {
        return isDefined(id) && id !== '';
      };

      var ɵ0$1 = isValidNavId;
      var navCounter = 0;
      /**
       * This directive must be used to wrap content to be displayed in the nav.
       *
       * @since 5.2.0
       */

      var NgbNavContent = function NgbNavContent(templateRef) {
        _classCallCheck2(this, NgbNavContent);

        this.templateRef = templateRef;
      };

      NgbNavContent.ɵfac = function NgbNavContent_Factory(t) {
        return new (t || NgbNavContent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]));
      };

      NgbNavContent.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbNavContent,
        selectors: [["ng-template", "ngbNavContent", ""]]
      });

      NgbNavContent.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbNavContent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'ng-template[ngbNavContent]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }];
        }, null);
      })();
      /**
       * The directive used to group nav link and related nav content. As well as set nav identifier and some options.
       *
       * @since 5.2.0
       */


      var NgbNavItem = /*#__PURE__*/function () {
        function NgbNavItem(nav, elementRef) {
          _classCallCheck2(this, NgbNavItem);

          this.elementRef = elementRef;
          /**
           * If `true`, the current nav item is disabled and can't be toggled by user.
           *
           * Nevertheless disabled nav can be selected programmatically via the `.select()` method and the `[activeId]` binding.
           */

          this.disabled = false;
          /**
           * An event emitted when the fade in transition is finished on the related nav content
           *
           * @since 8.0.0
           */

          this.shown = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * An event emitted when the fade out transition is finished on the related nav content
           *
           * @since 8.0.0
           */

          this.hidden = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"](); // TODO: cf https://github.com/angular/angular/issues/30106

          this._nav = nav;
        }

        _createClass2(NgbNavItem, [{
          key: "ngAfterContentChecked",
          value: function ngAfterContentChecked() {
            // We are using @ContentChildren instead of @ContentChild as in the Angular version being used
            // only @ContentChildren allows us to specify the {descendants: false} option.
            // Without {descendants: false} we are hitting bugs described in:
            // https://github.com/ng-bootstrap/ng-bootstrap/issues/2240
            this.contentTpl = this.contentTpls.first;
          }
        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            if (!isDefined(this.domId)) {
              this.domId = "ngb-nav-".concat(navCounter++);
            }
          }
        }, {
          key: "active",
          get: function get() {
            return this._nav.activeId === this.id;
          }
        }, {
          key: "id",
          get: function get() {
            return isValidNavId(this._id) ? this._id : this.domId;
          }
        }, {
          key: "panelDomId",
          get: function get() {
            return "".concat(this.domId, "-panel");
          }
        }, {
          key: "isPanelInDom",
          value: function isPanelInDom() {
            return (isDefined(this.destroyOnHide) ? !this.destroyOnHide : !this._nav.destroyOnHide) || this.active;
          }
        }]);

        return NgbNavItem;
      }();

      NgbNavItem.ɵfac = function NgbNavItem_Factory(t) {
        return new (t || NgbNavItem)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return NgbNav;
        })), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]));
      };

      NgbNavItem.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbNavItem,
        selectors: [["", "ngbNavItem", ""]],
        contentQueries: function NgbNavItem_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbNavContent, 0);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.contentTpls = _t);
          }
        },
        hostVars: 2,
        hostBindings: function NgbNavItem_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("nav-item", true);
          }
        },
        inputs: {
          disabled: "disabled",
          domId: "domId",
          destroyOnHide: "destroyOnHide",
          _id: ["ngbNavItem", "_id"]
        },
        outputs: {
          shown: "shown",
          hidden: "hidden"
        },
        exportAs: ["ngbNavItem"]
      });

      NgbNavItem.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
              return NgbNav;
            })]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }];
      };

      NgbNavItem.propDecorators = {
        destroyOnHide: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        disabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        domId: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        _id: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['ngbNavItem']
        }],
        shown: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        hidden: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        contentTpls: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
          args: [NgbNavContent, {
            descendants: false
          }]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbNavItem, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngbNavItem]',
            exportAs: 'ngbNavItem',
            host: {
              '[class.nav-item]': 'true'
            }
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
                return NgbNav;
              })]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }];
        }, {
          disabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          shown: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          hidden: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          domId: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          destroyOnHide: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          _id: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['ngbNavItem']
          }],
          contentTpls: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
            args: [NgbNavContent, {
              descendants: false
            }]
          }]
        });
      })();
      /**
       * A nav directive that helps with implementing tabbed navigation components.
       *
       * @since 5.2.0
       */


      var NgbNav = /*#__PURE__*/function () {
        function NgbNav(role, config, _cd, _document) {
          _classCallCheck2(this, NgbNav);

          this.role = role;
          this._cd = _cd;
          this._document = _document;
          /**
           * The event emitted after the active nav changes
           * The payload of the event is the newly active nav id
           *
           * If you want to prevent nav change, you should use `(navChange)` event
           */

          this.activeIdChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * An event emitted when the fade in transition is finished for one of the items.
           *
           * Payload of the event is the nav id that was just shown.
           *
           * @since 8.0.0
           */

          this.shown = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * An event emitted when the fade out transition is finished for one of the items.
           *
           * Payload of the event is the nav id that was just hidden.
           *
           * @since 8.0.0
           */

          this.hidden = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.destroy$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          this.navItemChange$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          /**
           * The nav change event emitted right before the nav change happens on user click.
           *
           * This event won't be emitted if nav is changed programmatically via `[activeId]` or `.select()`.
           *
           * See [`NgbNavChangeEvent`](#/components/nav/api#NgbNavChangeEvent) for payload details.
           */

          this.navChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.animation = config.animation;
          this.destroyOnHide = config.destroyOnHide;
          this.orientation = config.orientation;
          this.roles = config.roles;
          this.keyboard = config.keyboard;
        }

        _createClass2(NgbNav, [{
          key: "click",
          value: function click(item) {
            if (!item.disabled) {
              this._updateActiveId(item.id);
            }
          }
        }, {
          key: "onKeyDown",
          value: function onKeyDown(event) {
            var _this105 = this;

            if (this.roles !== 'tablist' || !this.keyboard) {
              return;
            } // tslint:disable-next-line: deprecation


            var key = event.which;
            var enabledLinks = this.links.filter(function (link) {
              return !link.navItem.disabled;
            });
            var length = enabledLinks.length;
            var position = -1;
            enabledLinks.forEach(function (link, index) {
              if (link.elRef.nativeElement === _this105._document.activeElement) {
                position = index;
              }
            });

            if (length) {
              switch (key) {
                case Key.ArrowLeft:
                  if (this.orientation === 'vertical') {
                    return;
                  }

                  position = (position - 1 + length) % length;
                  break;

                case Key.ArrowRight:
                  if (this.orientation === 'vertical') {
                    return;
                  }

                  position = (position + 1) % length;
                  break;

                case Key.ArrowDown:
                  if (this.orientation === 'horizontal') {
                    return;
                  }

                  position = (position + 1) % length;
                  break;

                case Key.ArrowUp:
                  if (this.orientation === 'horizontal') {
                    return;
                  }

                  position = (position - 1 + length) % length;
                  break;

                case Key.Home:
                  position = 0;
                  break;

                case Key.End:
                  position = length - 1;
                  break;
              }

              if (this.keyboard === 'changeWithArrows') {
                this.select(enabledLinks[position].navItem.id);
              }

              enabledLinks[position].elRef.nativeElement.focus();
              event.preventDefault();
            }
          }
          /**
           * Selects the nav with the given id and shows its associated pane.
           * Any other nav that was previously selected becomes unselected and its associated pane is hidden.
           */

        }, {
          key: "select",
          value: function select(id) {
            this._updateActiveId(id, false);
          }
        }, {
          key: "ngAfterContentInit",
          value: function ngAfterContentInit() {
            var _this106 = this;

            if (!isDefined(this.activeId)) {
              var _nextId = this.items.first ? this.items.first.id : null;

              if (isValidNavId(_nextId)) {
                this._updateActiveId(_nextId, false);

                this._cd.detectChanges();
              }
            }

            this.items.changes.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this.destroy$)).subscribe(function () {
              return _this106._notifyItemChanged(_this106.activeId);
            });
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(_ref50) {
            var activeId = _ref50.activeId;

            if (activeId && !activeId.firstChange) {
              this._notifyItemChanged(activeId.currentValue);
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.destroy$.next();
          }
        }, {
          key: "_updateActiveId",
          value: function _updateActiveId(nextId) {
            var emitNavChange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;

            if (this.activeId !== nextId) {
              var defaultPrevented = false;

              if (emitNavChange) {
                this.navChange.emit({
                  activeId: this.activeId,
                  nextId: nextId,
                  preventDefault: function preventDefault() {
                    defaultPrevented = true;
                  }
                });
              }

              if (!defaultPrevented) {
                this.activeId = nextId;
                this.activeIdChange.emit(nextId);

                this._notifyItemChanged(nextId);
              }
            }
          }
        }, {
          key: "_notifyItemChanged",
          value: function _notifyItemChanged(nextItemId) {
            this.navItemChange$.next(this._getItemById(nextItemId));
          }
        }, {
          key: "_getItemById",
          value: function _getItemById(itemId) {
            return this.items && this.items.find(function (item) {
              return item.id === itemId;
            }) || null;
          }
        }]);

        return NgbNav;
      }();

      NgbNav.ɵfac = function NgbNav_Factory(t) {
        return new (t || NgbNav)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinjectAttribute"]('role'), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbNavConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]));
      };

      NgbNav.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbNav,
        selectors: [["", "ngbNav", ""]],
        contentQueries: function NgbNav_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbNavItem, 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbNavLink, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.items = _t);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.links = _t);
          }
        },
        hostVars: 6,
        hostBindings: function NgbNav_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("keydown.arrowLeft", function NgbNav_keydown_arrowLeft_HostBindingHandler($event) {
              return ctx.onKeyDown($event);
            })("keydown.arrowRight", function NgbNav_keydown_arrowRight_HostBindingHandler($event) {
              return ctx.onKeyDown($event);
            })("keydown.arrowDown", function NgbNav_keydown_arrowDown_HostBindingHandler($event) {
              return ctx.onKeyDown($event);
            })("keydown.arrowUp", function NgbNav_keydown_arrowUp_HostBindingHandler($event) {
              return ctx.onKeyDown($event);
            })("keydown.Home", function NgbNav_keydown_Home_HostBindingHandler($event) {
              return ctx.onKeyDown($event);
            })("keydown.End", function NgbNav_keydown_End_HostBindingHandler($event) {
              return ctx.onKeyDown($event);
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-orientation", ctx.orientation === "vertical" && ctx.roles === "tablist" ? "vertical" : undefined)("role", ctx.role ? ctx.role : ctx.roles ? "tablist" : undefined);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("nav", true)("flex-column", ctx.orientation === "vertical");
          }
        },
        inputs: {
          animation: "animation",
          destroyOnHide: "destroyOnHide",
          orientation: "orientation",
          roles: "roles",
          keyboard: "keyboard",
          activeId: "activeId"
        },
        outputs: {
          activeIdChange: "activeIdChange",
          shown: "shown",
          hidden: "hidden",
          navChange: "navChange"
        },
        exportAs: ["ngbNav"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
      });

      NgbNav.ctorParameters = function () {
        return [{
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Attribute"],
            args: ['role']
          }]
        }, {
          type: NgbNavConfig
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
          }]
        }];
      };

      NgbNav.propDecorators = {
        activeId: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        activeIdChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        animation: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        destroyOnHide: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        orientation: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        roles: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        keyboard: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        shown: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        hidden: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        items: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
          args: [NgbNavItem]
        }],
        links: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
          args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
            return NgbNavLink;
          }), {
            descendants: true
          }]
        }],
        navChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbNav, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngbNav]',
            exportAs: 'ngbNav',
            host: {
              '[class.nav]': 'true',
              '[class.flex-column]': "orientation === 'vertical'",
              '[attr.aria-orientation]': "orientation === 'vertical' && roles === 'tablist' ? 'vertical' : undefined",
              '[attr.role]': "role ? role : roles ? 'tablist' : undefined",
              '(keydown.arrowLeft)': 'onKeyDown($event)',
              '(keydown.arrowRight)': 'onKeyDown($event)',
              '(keydown.arrowDown)': 'onKeyDown($event)',
              '(keydown.arrowUp)': 'onKeyDown($event)',
              '(keydown.Home)': 'onKeyDown($event)',
              '(keydown.End)': 'onKeyDown($event)'
            }
          }]
        }], function () {
          return [{
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Attribute"],
              args: ['role']
            }]
          }, {
            type: NgbNavConfig
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
            }]
          }];
        }, {
          activeIdChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          shown: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          hidden: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          navChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          animation: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          destroyOnHide: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          orientation: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          roles: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          keyboard: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          activeId: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          items: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
            args: [NgbNavItem]
          }],
          links: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
            args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
              return NgbNavLink;
            }), {
              descendants: true
            }]
          }]
        });
      })();
      /**
       * A directive to put on the nav link.
       *
       * @since 5.2.0
       */


      var NgbNavLink = /*#__PURE__*/function () {
        function NgbNavLink(role, navItem, nav, elRef) {
          _classCallCheck2(this, NgbNavLink);

          this.role = role;
          this.navItem = navItem;
          this.nav = nav;
          this.elRef = elRef;
        }

        _createClass2(NgbNavLink, [{
          key: "hasNavItemClass",
          value: function hasNavItemClass() {
            // with alternative markup we have to add `.nav-item` class, because `ngbNavItem` is on the ng-container
            return this.navItem.elementRef.nativeElement.nodeType === Node.COMMENT_NODE;
          }
        }]);

        return NgbNavLink;
      }();

      NgbNavLink.ɵfac = function NgbNavLink_Factory(t) {
        return new (t || NgbNavLink)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinjectAttribute"]('role'), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbNavItem), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbNav), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]));
      };

      NgbNavLink.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbNavLink,
        selectors: [["a", "ngbNavLink", ""]],
        hostAttrs: ["href", ""],
        hostVars: 14,
        hostBindings: function NgbNavLink_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function NgbNavLink_click_HostBindingHandler($event) {
              ctx.nav.click(ctx.navItem);
              return $event.preventDefault();
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("id", ctx.navItem.domId);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("role", ctx.role ? ctx.role : ctx.nav.roles ? "tab" : undefined)("tabindex", ctx.navItem.disabled ? -1 : undefined)("aria-controls", ctx.navItem.isPanelInDom() ? ctx.navItem.panelDomId : null)("aria-selected", ctx.navItem.active)("aria-disabled", ctx.navItem.disabled);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("nav-link", true)("nav-item", ctx.hasNavItemClass())("active", ctx.navItem.active)("disabled", ctx.navItem.disabled);
          }
        }
      });

      NgbNavLink.ctorParameters = function () {
        return [{
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Attribute"],
            args: ['role']
          }]
        }, {
          type: NgbNavItem
        }, {
          type: NgbNav
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbNavLink, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'a[ngbNavLink]',
            host: {
              '[id]': 'navItem.domId',
              '[class.nav-link]': 'true',
              '[class.nav-item]': 'hasNavItemClass()',
              '[attr.role]': "role ? role : nav.roles ? 'tab' : undefined",
              'href': '',
              '[class.active]': 'navItem.active',
              '[class.disabled]': 'navItem.disabled',
              '[attr.tabindex]': 'navItem.disabled ? -1 : undefined',
              '[attr.aria-controls]': 'navItem.isPanelInDom() ? navItem.panelDomId : null',
              '[attr.aria-selected]': 'navItem.active',
              '[attr.aria-disabled]': 'navItem.disabled',
              '(click)': 'nav.click(navItem); $event.preventDefault()'
            }
          }]
        }], function () {
          return [{
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Attribute"],
              args: ['role']
            }]
          }, {
            type: NgbNavItem
          }, {
            type: NgbNav
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }];
        }, null);
      })();

      var ngbNavFadeOutTransition = function ngbNavFadeOutTransition(_ref51) {
        var classList = _ref51.classList;
        classList.remove('show');
        return function () {
          return classList.remove('active');
        };
      };

      var ngbNavFadeInTransition = function ngbNavFadeInTransition(element, animation) {
        if (animation) {
          reflow(element);
        }

        element.classList.add('show');
      };

      var NgbNavPane = function NgbNavPane(elRef) {
        _classCallCheck2(this, NgbNavPane);

        this.elRef = elRef;
      };

      NgbNavPane.ɵfac = function NgbNavPane_Factory(t) {
        return new (t || NgbNavPane)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]));
      };

      NgbNavPane.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbNavPane,
        selectors: [["", "ngbNavPane", ""]],
        hostAttrs: [1, "tab-pane"],
        hostVars: 5,
        hostBindings: function NgbNavPane_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("id", ctx.item.panelDomId);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("role", ctx.role ? ctx.role : ctx.nav.roles ? "tabpanel" : undefined)("aria-labelledby", ctx.item.domId);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("fade", ctx.nav.animation);
          }
        },
        inputs: {
          item: "item",
          nav: "nav",
          role: "role"
        }
      });

      NgbNavPane.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }];
      };

      NgbNavPane.propDecorators = {
        item: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        nav: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        role: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbNavPane, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngbNavPane]',
            host: {
              '[id]': 'item.panelDomId',
              'class': 'tab-pane',
              '[class.fade]': 'nav.animation',
              '[attr.role]': 'role ? role : nav.roles ? "tabpanel" : undefined',
              '[attr.aria-labelledby]': 'item.domId'
            }
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }];
        }, {
          item: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          nav: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          role: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * The outlet where currently active nav content will be displayed.
       *
       * @since 5.2.0
       */


      var NgbNavOutlet = /*#__PURE__*/function () {
        function NgbNavOutlet(_cd, _ngZone) {
          _classCallCheck2(this, NgbNavOutlet);

          this._cd = _cd;
          this._ngZone = _ngZone;
          this._activePane = null;
        }

        _createClass2(NgbNavOutlet, [{
          key: "isPanelTransitioning",
          value: function isPanelTransitioning(item) {
            var _a;

            return ((_a = this._activePane) === null || _a === void 0 ? void 0 : _a.item) === item;
          }
        }, {
          key: "ngAfterViewInit",
          value: function ngAfterViewInit() {
            var _this107 = this;

            var _a; // initial display


            this._updateActivePane(); // this will be emitted for all 3 types of nav changes: .select(), [activeId] or (click)


            this.nav.navItemChange$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this.nav.destroy$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["startWith"])(((_a = this._activePane) === null || _a === void 0 ? void 0 : _a.item) || null), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["distinctUntilChanged"])(), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["skip"])(1)).subscribe(function (nextItem) {
              var options = {
                animation: _this107.nav.animation,
                runningTransition: 'stop'
              }; // next panel we're switching to will only appear in DOM after the change detection is done
              // and `this._panes` will be updated

              _this107._cd.detectChanges(); // fading out


              if (_this107._activePane) {
                ngbRunTransition(_this107._ngZone, _this107._activePane.elRef.nativeElement, ngbNavFadeOutTransition, options).subscribe(function () {
                  var _a;

                  var activeItem = (_a = _this107._activePane) === null || _a === void 0 ? void 0 : _a.item;
                  _this107._activePane = _this107._getPaneForItem(nextItem); // mark for check when transition finishes as outlet or parent containers might be OnPush
                  // without this the panes that have "faded out" will stay in DOM

                  _this107._cd.markForCheck(); // fading in


                  if (_this107._activePane) {
                    // we have to add the '.active' class before running the transition,
                    // because it should be in place before `ngbRunTransition` does `reflow()`
                    _this107._activePane.elRef.nativeElement.classList.add('active');

                    ngbRunTransition(_this107._ngZone, _this107._activePane.elRef.nativeElement, ngbNavFadeInTransition, options).subscribe(function () {
                      if (nextItem) {
                        nextItem.shown.emit();

                        _this107.nav.shown.emit(nextItem.id);
                      }
                    });
                  }

                  if (activeItem) {
                    activeItem.hidden.emit();

                    _this107.nav.hidden.emit(activeItem.id);
                  }
                });
              } else {
                _this107._updateActivePane();
              }
            });
          }
        }, {
          key: "_updateActivePane",
          value: function _updateActivePane() {
            var _a, _b;

            this._activePane = this._getActivePane();
            (_a = this._activePane) === null || _a === void 0 ? void 0 : _a.elRef.nativeElement.classList.add('show');
            (_b = this._activePane) === null || _b === void 0 ? void 0 : _b.elRef.nativeElement.classList.add('active');
          }
        }, {
          key: "_getPaneForItem",
          value: function _getPaneForItem(item) {
            return this._panes && this._panes.find(function (pane) {
              return pane.item === item;
            }) || null;
          }
        }, {
          key: "_getActivePane",
          value: function _getActivePane() {
            return this._panes && this._panes.find(function (pane) {
              return pane.item.active;
            }) || null;
          }
        }]);

        return NgbNavOutlet;
      }();

      NgbNavOutlet.ɵfac = function NgbNavOutlet_Factory(t) {
        return new (t || NgbNavOutlet)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]));
      };

      NgbNavOutlet.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: NgbNavOutlet,
        selectors: [["", "ngbNavOutlet", ""]],
        viewQuery: function NgbNavOutlet_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](NgbNavPane, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx._panes = _t);
          }
        },
        hostVars: 2,
        hostBindings: function NgbNavOutlet_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("tab-content", true);
          }
        },
        inputs: {
          paneRole: "paneRole",
          nav: ["ngbNavOutlet", "nav"]
        },
        attrs: _c32,
        decls: 1,
        vars: 1,
        consts: [["ngFor", "", 3, "ngForOf"], ["ngbNavPane", "", 3, "item", "nav", "role", 4, "ngIf"], ["ngbNavPane", "", 3, "item", "nav", "role"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"]],
        template: function NgbNavOutlet_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbNavOutlet_ng_template_0_Template, 1, 1, "ng-template", 0);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.nav.items);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], NgbNavPane, _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"]],
        encapsulation: 2,
        changeDetection: 0
      });

      NgbNavOutlet.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }];
      };

      NgbNavOutlet.propDecorators = {
        _panes: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChildren"],
          args: [NgbNavPane]
        }],
        paneRole: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        nav: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['ngbNavOutlet']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbNavOutlet, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: '[ngbNavOutlet]',
            host: {
              '[class.tab-content]': 'true'
            },
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            template: "\n    <ng-template ngFor let-item [ngForOf]=\"nav.items\">\n      <div ngbNavPane *ngIf=\"item.isPanelInDom() || isPanelTransitioning(item)\" [item]=\"item\" [nav]=\"nav\" [role]=\"paneRole\">\n        <ng-template [ngTemplateOutlet]=\"item.contentTpl?.templateRef || null\"\n                     [ngTemplateOutletContext]=\"{$implicit: item.active || isPanelTransitioning(item)}\"></ng-template>\n      </div>\n    </ng-template>\n  "
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }];
        }, {
          _panes: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChildren"],
            args: [NgbNavPane]
          }],
          paneRole: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          nav: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['ngbNavOutlet']
          }]
        });
      })();

      var NGB_NAV_DIRECTIVES = [NgbNavContent, NgbNav, NgbNavItem, NgbNavLink, NgbNavOutlet, NgbNavPane];

      var NgbNavModule = function NgbNavModule() {
        _classCallCheck2(this, NgbNavModule);
      };

      NgbNavModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NgbNavModule
      });
      NgbNavModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NgbNavModule_Factory(t) {
          return new (t || NgbNavModule)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbNavModule, {
          declarations: function declarations() {
            return [NgbNavContent, NgbNav, NgbNavItem, NgbNavLink, NgbNavOutlet, NgbNavPane];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]];
          },
          exports: function exports() {
            return [NgbNavContent, NgbNav, NgbNavItem, NgbNavLink, NgbNavOutlet, NgbNavPane];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbNavModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            declarations: NGB_NAV_DIRECTIVES,
            exports: NGB_NAV_DIRECTIVES,
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]
          }]
        }], null, null);
      })();
      /**
       * A configuration service for the [`NgbPagination`](#/components/pagination/api#NgbPagination) component.
       *
       * You can inject this service, typically in your root component, and customize the values of its properties in
       * order to provide default values for all the paginations used in the application.
       */


      var NgbPaginationConfig = function NgbPaginationConfig() {
        _classCallCheck2(this, NgbPaginationConfig);

        this.disabled = false;
        this.boundaryLinks = false;
        this.directionLinks = true;
        this.ellipses = true;
        this.maxSize = 0;
        this.pageSize = 10;
        this.rotate = false;
      };

      NgbPaginationConfig.ɵfac = function NgbPaginationConfig_Factory(t) {
        return new (t || NgbPaginationConfig)();
      };

      NgbPaginationConfig.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function NgbPaginationConfig_Factory() {
          return new NgbPaginationConfig();
        },
        token: NgbPaginationConfig,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPaginationConfig, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [];
        }, null);
      })();
      /**
       * A directive to match the 'ellipsis' link template
       *
       * @since 4.1.0
       */


      var NgbPaginationEllipsis = function NgbPaginationEllipsis(templateRef) {
        _classCallCheck2(this, NgbPaginationEllipsis);

        this.templateRef = templateRef;
      };

      NgbPaginationEllipsis.ɵfac = function NgbPaginationEllipsis_Factory(t) {
        return new (t || NgbPaginationEllipsis)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]));
      };

      NgbPaginationEllipsis.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbPaginationEllipsis,
        selectors: [["ng-template", "ngbPaginationEllipsis", ""]]
      });

      NgbPaginationEllipsis.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPaginationEllipsis, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'ng-template[ngbPaginationEllipsis]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }];
        }, null);
      })();
      /**
       * A directive to match the 'first' link template
       *
       * @since 4.1.0
       */


      var NgbPaginationFirst = function NgbPaginationFirst(templateRef) {
        _classCallCheck2(this, NgbPaginationFirst);

        this.templateRef = templateRef;
      };

      NgbPaginationFirst.ɵfac = function NgbPaginationFirst_Factory(t) {
        return new (t || NgbPaginationFirst)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]));
      };

      NgbPaginationFirst.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbPaginationFirst,
        selectors: [["ng-template", "ngbPaginationFirst", ""]]
      });

      NgbPaginationFirst.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPaginationFirst, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'ng-template[ngbPaginationFirst]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }];
        }, null);
      })();
      /**
       * A directive to match the 'last' link template
       *
       * @since 4.1.0
       */


      var NgbPaginationLast = function NgbPaginationLast(templateRef) {
        _classCallCheck2(this, NgbPaginationLast);

        this.templateRef = templateRef;
      };

      NgbPaginationLast.ɵfac = function NgbPaginationLast_Factory(t) {
        return new (t || NgbPaginationLast)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]));
      };

      NgbPaginationLast.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbPaginationLast,
        selectors: [["ng-template", "ngbPaginationLast", ""]]
      });

      NgbPaginationLast.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPaginationLast, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'ng-template[ngbPaginationLast]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }];
        }, null);
      })();
      /**
       * A directive to match the 'next' link template
       *
       * @since 4.1.0
       */


      var NgbPaginationNext = function NgbPaginationNext(templateRef) {
        _classCallCheck2(this, NgbPaginationNext);

        this.templateRef = templateRef;
      };

      NgbPaginationNext.ɵfac = function NgbPaginationNext_Factory(t) {
        return new (t || NgbPaginationNext)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]));
      };

      NgbPaginationNext.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbPaginationNext,
        selectors: [["ng-template", "ngbPaginationNext", ""]]
      });

      NgbPaginationNext.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPaginationNext, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'ng-template[ngbPaginationNext]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }];
        }, null);
      })();
      /**
       * A directive to match the page 'number' link template
       *
       * @since 4.1.0
       */


      var NgbPaginationNumber = function NgbPaginationNumber(templateRef) {
        _classCallCheck2(this, NgbPaginationNumber);

        this.templateRef = templateRef;
      };

      NgbPaginationNumber.ɵfac = function NgbPaginationNumber_Factory(t) {
        return new (t || NgbPaginationNumber)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]));
      };

      NgbPaginationNumber.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbPaginationNumber,
        selectors: [["ng-template", "ngbPaginationNumber", ""]]
      });

      NgbPaginationNumber.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPaginationNumber, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'ng-template[ngbPaginationNumber]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }];
        }, null);
      })();
      /**
       * A directive to match the 'previous' link template
       *
       * @since 4.1.0
       */


      var NgbPaginationPrevious = function NgbPaginationPrevious(templateRef) {
        _classCallCheck2(this, NgbPaginationPrevious);

        this.templateRef = templateRef;
      };

      NgbPaginationPrevious.ɵfac = function NgbPaginationPrevious_Factory(t) {
        return new (t || NgbPaginationPrevious)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]));
      };

      NgbPaginationPrevious.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbPaginationPrevious,
        selectors: [["ng-template", "ngbPaginationPrevious", ""]]
      });

      NgbPaginationPrevious.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPaginationPrevious, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'ng-template[ngbPaginationPrevious]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }];
        }, null);
      })();
      /**
       * A directive to match the 'pages' whole content
       *
       * @since 9.1.0
       */


      var NgbPaginationPages = function NgbPaginationPages(templateRef) {
        _classCallCheck2(this, NgbPaginationPages);

        this.templateRef = templateRef;
      };

      NgbPaginationPages.ɵfac = function NgbPaginationPages_Factory(t) {
        return new (t || NgbPaginationPages)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]));
      };

      NgbPaginationPages.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbPaginationPages,
        selectors: [["ng-template", "ngbPaginationPages", ""]]
      });

      NgbPaginationPages.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPaginationPages, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'ng-template[ngbPaginationPages]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }];
        }, null);
      })();
      /**
       * A component that displays page numbers and allows to customize them in several ways.
       */


      var NgbPagination = /*#__PURE__*/function () {
        function NgbPagination(config) {
          _classCallCheck2(this, NgbPagination);

          this.pageCount = 0;
          this.pages = [];
          /**
           *  The current page.
           *
           *  Page numbers start with `1`.
           */

          this.page = 1;
          /**
           *  An event fired when the page is changed. Will fire only if collection size is set and all values are valid.
           *
           *  Event payload is the number of the newly selected page.
           *
           *  Page numbers start with `1`.
           */

          this.pageChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"](true);
          this.disabled = config.disabled;
          this.boundaryLinks = config.boundaryLinks;
          this.directionLinks = config.directionLinks;
          this.ellipses = config.ellipses;
          this.maxSize = config.maxSize;
          this.pageSize = config.pageSize;
          this.rotate = config.rotate;
          this.size = config.size;
        }

        _createClass2(NgbPagination, [{
          key: "hasPrevious",
          value: function hasPrevious() {
            return this.page > 1;
          }
        }, {
          key: "hasNext",
          value: function hasNext() {
            return this.page < this.pageCount;
          }
        }, {
          key: "nextDisabled",
          value: function nextDisabled() {
            return !this.hasNext() || this.disabled;
          }
        }, {
          key: "previousDisabled",
          value: function previousDisabled() {
            return !this.hasPrevious() || this.disabled;
          }
        }, {
          key: "selectPage",
          value: function selectPage(pageNumber) {
            this._updatePages(pageNumber);
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            this._updatePages(this.page);
          }
        }, {
          key: "isEllipsis",
          value: function isEllipsis(pageNumber) {
            return pageNumber === -1;
          }
          /**
           * Appends ellipses and first/last page number to the displayed pages
           */

        }, {
          key: "_applyEllipses",
          value: function _applyEllipses(start, end) {
            if (this.ellipses) {
              if (start > 0) {
                // The first page will always be included. If the displayed range
                // starts after the third page, then add ellipsis. But if the range
                // starts on the third page, then add the second page instead of
                // an ellipsis, because the ellipsis would only hide a single page.
                if (start > 2) {
                  this.pages.unshift(-1);
                } else if (start === 2) {
                  this.pages.unshift(2);
                }

                this.pages.unshift(1);
              }

              if (end < this.pageCount) {
                // The last page will always be included. If the displayed range
                // ends before the third-last page, then add ellipsis. But if the range
                // ends on third-last page, then add the second-last page instead of
                // an ellipsis, because the ellipsis would only hide a single page.
                if (end < this.pageCount - 2) {
                  this.pages.push(-1);
                } else if (end === this.pageCount - 2) {
                  this.pages.push(this.pageCount - 1);
                }

                this.pages.push(this.pageCount);
              }
            }
          }
          /**
           * Rotates page numbers based on maxSize items visible.
           * Currently selected page stays in the middle:
           *
           * Ex. for selected page = 6:
           * [5,*6*,7] for maxSize = 3
           * [4,5,*6*,7] for maxSize = 4
           */

        }, {
          key: "_applyRotation",
          value: function _applyRotation() {
            var start = 0;
            var end = this.pageCount;
            var leftOffset = Math.floor(this.maxSize / 2);
            var rightOffset = this.maxSize % 2 === 0 ? leftOffset - 1 : leftOffset;

            if (this.page <= leftOffset) {
              // very beginning, no rotation -> [0..maxSize]
              end = this.maxSize;
            } else if (this.pageCount - this.page < leftOffset) {
              // very end, no rotation -> [len-maxSize..len]
              start = this.pageCount - this.maxSize;
            } else {
              // rotate
              start = this.page - leftOffset - 1;
              end = this.page + rightOffset;
            }

            return [start, end];
          }
          /**
           * Paginates page numbers based on maxSize items per page.
           */

        }, {
          key: "_applyPagination",
          value: function _applyPagination() {
            var page = Math.ceil(this.page / this.maxSize) - 1;
            var start = page * this.maxSize;
            var end = start + this.maxSize;
            return [start, end];
          }
        }, {
          key: "_setPageInRange",
          value: function _setPageInRange(newPageNo) {
            var prevPageNo = this.page;
            this.page = getValueInRange(newPageNo, this.pageCount, 1);

            if (this.page !== prevPageNo && isNumber(this.collectionSize)) {
              this.pageChange.emit(this.page);
            }
          }
        }, {
          key: "_updatePages",
          value: function _updatePages(newPage) {
            this.pageCount = Math.ceil(this.collectionSize / this.pageSize);

            if (!isNumber(this.pageCount)) {
              this.pageCount = 0;
            } // fill-in model needed to render pages


            this.pages.length = 0;

            for (var i = 1; i <= this.pageCount; i++) {
              this.pages.push(i);
            } // set page within 1..max range


            this._setPageInRange(newPage); // apply maxSize if necessary


            if (this.maxSize > 0 && this.pageCount > this.maxSize) {
              var start = 0;
              var end = this.pageCount; // either paginating or rotating page numbers

              if (this.rotate) {
                var _this$_applyRotation = this._applyRotation();

                var _this$_applyRotation2 = _slicedToArray(_this$_applyRotation, 2);

                start = _this$_applyRotation2[0];
                end = _this$_applyRotation2[1];
              } else {
                var _this$_applyPaginatio = this._applyPagination();

                var _this$_applyPaginatio2 = _slicedToArray(_this$_applyPaginatio, 2);

                start = _this$_applyPaginatio2[0];
                end = _this$_applyPaginatio2[1];
              }

              this.pages = this.pages.slice(start, end); // adding ellipses

              this._applyEllipses(start, end);
            }
          }
        }]);

        return NgbPagination;
      }();

      NgbPagination.ɵfac = function NgbPagination_Factory(t) {
        return new (t || NgbPagination)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbPaginationConfig));
      };

      NgbPagination.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: NgbPagination,
        selectors: [["ngb-pagination"]],
        contentQueries: function NgbPagination_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbPaginationEllipsis, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbPaginationFirst, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbPaginationLast, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbPaginationNext, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbPaginationNumber, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbPaginationPrevious, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbPaginationPages, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.tplEllipsis = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.tplFirst = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.tplLast = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.tplNext = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.tplNumber = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.tplPrevious = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.tplPages = _t.first);
          }
        },
        hostAttrs: ["role", "navigation"],
        inputs: {
          page: "page",
          disabled: "disabled",
          boundaryLinks: "boundaryLinks",
          directionLinks: "directionLinks",
          ellipses: "ellipses",
          maxSize: "maxSize",
          pageSize: "pageSize",
          rotate: "rotate",
          size: "size",
          collectionSize: "collectionSize"
        },
        outputs: {
          pageChange: "pageChange"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]],
        decls: 20,
        vars: 12,
        consts: function consts() {
          var i18n_34;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_pagination_first$$FESM2015_NG_BOOTSTRAP_JS__35 = goog.getMsg("\xAB\xAB");
            i18n_34 = MSG_EXTERNAL_ngb_pagination_first$$FESM2015_NG_BOOTSTRAP_JS__35;
          } else {
            i18n_34 = $localize(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral([":@@ngb.pagination.first\u241F656506dfd46380956a655f919f1498d018f75ca0\u241F6867721956102594380:\xAB\xAB"])));
          }

          var i18n_36;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_pagination_previous$$FESM2015_NG_BOOTSTRAP_JS__37 = goog.getMsg("\xAB");
            i18n_36 = MSG_EXTERNAL_ngb_pagination_previous$$FESM2015_NG_BOOTSTRAP_JS__37;
          } else {
            i18n_36 = $localize(_templateObject14 || (_templateObject14 = _taggedTemplateLiteral([":@@ngb.pagination.previous\u241F6e52b6ee77a4848d899dd21b591c6fd499e3aef3\u241F6479320895410098858:\xAB"])));
          }

          var i18n_38;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_pagination_next$$FESM2015_NG_BOOTSTRAP_JS__39 = goog.getMsg("\xBB");
            i18n_38 = MSG_EXTERNAL_ngb_pagination_next$$FESM2015_NG_BOOTSTRAP_JS__39;
          } else {
            i18n_38 = $localize(_templateObject15 || (_templateObject15 = _taggedTemplateLiteral([":@@ngb.pagination.next\u241Fba9cbb4ff311464308a3627e4f1c3345d9fe6d7d\u241F5458177150283468089:\xBB"])));
          }

          var i18n_40;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_pagination_last$$FESM2015_NG_BOOTSTRAP_JS__41 = goog.getMsg("\xBB\xBB");
            i18n_40 = MSG_EXTERNAL_ngb_pagination_last$$FESM2015_NG_BOOTSTRAP_JS__41;
          } else {
            i18n_40 = $localize(_templateObject16 || (_templateObject16 = _taggedTemplateLiteral([":@@ngb.pagination.last\u241F49f27a460bc97e7e00be5b37098bfa79884fc7d9\u241F5277020320267646988:\xBB\xBB"])));
          }

          var i18n_44;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_pagination_first_aria$$FESM2015_NG_BOOTSTRAP_JS__45 = goog.getMsg("First");
            i18n_44 = MSG_EXTERNAL_ngb_pagination_first_aria$$FESM2015_NG_BOOTSTRAP_JS__45;
          } else {
            i18n_44 = $localize(_templateObject17 || (_templateObject17 = _taggedTemplateLiteral([":@@ngb.pagination.first-aria\u241Ff2f852318759c6396b5d3d17031d53817d7b38cc\u241F2241508602425256033:First"])));
          }

          var i18n_47;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_pagination_previous_aria$$FESM2015_NG_BOOTSTRAP_JS__48 = goog.getMsg("Previous");
            i18n_47 = MSG_EXTERNAL_ngb_pagination_previous_aria$$FESM2015_NG_BOOTSTRAP_JS__48;
          } else {
            i18n_47 = $localize(_templateObject18 || (_templateObject18 = _taggedTemplateLiteral([":@@ngb.pagination.previous-aria\u241F680d5c75b7fd8d37961083608b9fcdc4167b4c43\u241F4452427314943113135:Previous"])));
          }

          var i18n_50;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_pagination_next_aria$$FESM2015_NG_BOOTSTRAP_JS__51 = goog.getMsg("Next");
            i18n_50 = MSG_EXTERNAL_ngb_pagination_next_aria$$FESM2015_NG_BOOTSTRAP_JS__51;
          } else {
            i18n_50 = $localize(_templateObject19 || (_templateObject19 = _taggedTemplateLiteral([":@@ngb.pagination.next-aria\u241Ff732c304c7433e5a83ffcd862c3dce709a0f4982\u241F3885497195825665706:Next"])));
          }

          var i18n_52;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_pagination_last_aria$$FESM2015_NG_BOOTSTRAP_JS__53 = goog.getMsg("Last");
            i18n_52 = MSG_EXTERNAL_ngb_pagination_last_aria$$FESM2015_NG_BOOTSTRAP_JS__53;
          } else {
            i18n_52 = $localize(_templateObject20 || (_templateObject20 = _taggedTemplateLiteral([":@@ngb.pagination.last-aria\u241F5c729788ba138508aca1bec050b610f7bf81db3e\u241F4882268002141858767:Last"])));
          }

          return [["first", ""], ["previous", ""], ["next", ""], ["last", ""], ["ellipsis", ""], ["defaultNumber", ""], ["defaultPages", ""], ["class", "page-item", 3, "disabled", 4, "ngIf"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], ["aria-hidden", "true"], i18n_34, i18n_36, i18n_38, i18n_40, ["class", "sr-only", 4, "ngIf"], [1, "sr-only"], ["class", "page-item", 3, "active", "disabled", 4, "ngFor", "ngForOf"], [1, "page-item"], ["class", "page-link", "tabindex", "-1", "aria-disabled", "true", 4, "ngIf"], ["class", "page-link", "href", "", 3, "click", 4, "ngIf"], ["tabindex", "-1", "aria-disabled", "true", 1, "page-link"], ["href", "", 1, "page-link", 3, "click"], ["aria-label", i18n_44, "href", "", 1, "page-link", 3, "click"], ["aria-label", i18n_47, "href", "", 1, "page-link", 3, "click"], ["aria-label", i18n_50, "href", "", 1, "page-link", 3, "click"], ["aria-label", i18n_52, "href", "", 1, "page-link", 3, "click"]];
        },
        template: function NgbPagination_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbPagination_ng_template_0_Template, 2, 0, "ng-template", null, 0, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbPagination_ng_template_2_Template, 2, 0, "ng-template", null, 1, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](4, NgbPagination_ng_template_4_Template, 2, 0, "ng-template", null, 2, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](6, NgbPagination_ng_template_6_Template, 2, 0, "ng-template", null, 3, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](8, NgbPagination_ng_template_8_Template, 1, 0, "ng-template", null, 4, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](10, NgbPagination_ng_template_10_Template, 2, 2, "ng-template", null, 5, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](12, NgbPagination_ng_template_12_Template, 1, 1, "ng-template", null, 6, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](14, "ul");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](15, NgbPagination_li_15_Template, 3, 9, "li", 7);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](16, NgbPagination_li_16_Template, 3, 8, "li", 7);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](17, NgbPagination_ng_template_17_Template, 0, 0, "ng-template", 8);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](18, NgbPagination_li_18_Template, 3, 9, "li", 7);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](19, NgbPagination_li_19_Template, 3, 9, "li", 7);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            var _r12 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](13);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](14);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"]("pagination" + (ctx.size ? " pagination-" + ctx.size : ""));

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.boundaryLinks);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.directionLinks);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", (ctx.tplPages == null ? null : ctx.tplPages.templateRef) || _r12)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction3"](8, _c54, ctx.page, ctx.pages, ctx.disabled));

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.directionLinks);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.boundaryLinks);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"]],
        encapsulation: 2,
        changeDetection: 0
      });

      NgbPagination.ctorParameters = function () {
        return [{
          type: NgbPaginationConfig
        }];
      };

      NgbPagination.propDecorators = {
        tplEllipsis: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [NgbPaginationEllipsis, {
            "static": false
          }]
        }],
        tplFirst: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [NgbPaginationFirst, {
            "static": false
          }]
        }],
        tplLast: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [NgbPaginationLast, {
            "static": false
          }]
        }],
        tplNext: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [NgbPaginationNext, {
            "static": false
          }]
        }],
        tplNumber: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [NgbPaginationNumber, {
            "static": false
          }]
        }],
        tplPrevious: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [NgbPaginationPrevious, {
            "static": false
          }]
        }],
        tplPages: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [NgbPaginationPages, {
            "static": false
          }]
        }],
        disabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        boundaryLinks: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        directionLinks: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        ellipses: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        rotate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        collectionSize: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        maxSize: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        page: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        pageSize: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        pageChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        size: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPagination, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'ngb-pagination',
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            host: {
              'role': 'navigation'
            },
            template: "\n    <ng-template #first><span aria-hidden=\"true\" i18n=\"@@ngb.pagination.first\">&laquo;&laquo;</span></ng-template>\n    <ng-template #previous><span aria-hidden=\"true\" i18n=\"@@ngb.pagination.previous\">&laquo;</span></ng-template>\n    <ng-template #next><span aria-hidden=\"true\" i18n=\"@@ngb.pagination.next\">&raquo;</span></ng-template>\n    <ng-template #last><span aria-hidden=\"true\" i18n=\"@@ngb.pagination.last\">&raquo;&raquo;</span></ng-template>\n    <ng-template #ellipsis>...</ng-template>\n    <ng-template #defaultNumber let-page let-currentPage=\"currentPage\">\n      {{ page }}\n      <span *ngIf=\"page === currentPage\" class=\"sr-only\">(current)</span>\n    </ng-template>\n    <ng-template #defaultPages let-page let-pages=\"pages\" let-disabled=\"disabled\">\n      <li *ngFor=\"let pageNumber of pages\" class=\"page-item\" [class.active]=\"pageNumber === page\"\n        [class.disabled]=\"isEllipsis(pageNumber) || disabled\" [attr.aria-current]=\"(pageNumber === page ? 'page' : null)\">\n        <a *ngIf=\"isEllipsis(pageNumber)\" class=\"page-link\" tabindex=\"-1\" aria-disabled=\"true\">\n          <ng-template [ngTemplateOutlet]=\"tplEllipsis?.templateRef || ellipsis\"\n                      [ngTemplateOutletContext]=\"{disabled: true, currentPage: page}\"></ng-template>\n        </a>\n        <a *ngIf=\"!isEllipsis(pageNumber)\" class=\"page-link\" href (click)=\"selectPage(pageNumber); $event.preventDefault()\"\n          [attr.tabindex]=\"disabled ? '-1' : null\" [attr.aria-disabled]=\"disabled ? 'true' : null\">\n          <ng-template [ngTemplateOutlet]=\"tplNumber?.templateRef || defaultNumber\"\n                      [ngTemplateOutletContext]=\"{disabled: disabled, $implicit: pageNumber, currentPage: page}\"></ng-template>\n        </a>\n      </li>\n    </ng-template>\n    <ul [class]=\"'pagination' + (size ? ' pagination-' + size : '')\">\n      <li *ngIf=\"boundaryLinks\" class=\"page-item\"\n        [class.disabled]=\"previousDisabled()\">\n        <a aria-label=\"First\" i18n-aria-label=\"@@ngb.pagination.first-aria\" class=\"page-link\" href\n          (click)=\"selectPage(1); $event.preventDefault()\" [attr.tabindex]=\"previousDisabled() ? '-1' : null\"\n          [attr.aria-disabled]=\"previousDisabled() ? 'true' : null\">\n          <ng-template [ngTemplateOutlet]=\"tplFirst?.templateRef || first\"\n                       [ngTemplateOutletContext]=\"{disabled: previousDisabled(), currentPage: page}\"></ng-template>\n        </a>\n      </li>\n\n      <li *ngIf=\"directionLinks\" class=\"page-item\"\n        [class.disabled]=\"previousDisabled()\">\n        <a aria-label=\"Previous\" i18n-aria-label=\"@@ngb.pagination.previous-aria\" class=\"page-link\" href\n          (click)=\"selectPage(page-1); $event.preventDefault()\" [attr.tabindex]=\"previousDisabled() ? '-1' : null\"\n          [attr.aria-disabled]=\"previousDisabled() ? 'true' : null\">\n          <ng-template [ngTemplateOutlet]=\"tplPrevious?.templateRef || previous\"\n                       [ngTemplateOutletContext]=\"{disabled: previousDisabled()}\"></ng-template>\n        </a>\n      </li>\n      <ng-template\n        [ngTemplateOutlet]=\"tplPages?.templateRef || defaultPages\"\n        [ngTemplateOutletContext]=\"{ $implicit: page, pages: pages, disabled: disabled }\"\n      >\n      </ng-template>\n      <li *ngIf=\"directionLinks\" class=\"page-item\" [class.disabled]=\"nextDisabled()\">\n        <a aria-label=\"Next\" i18n-aria-label=\"@@ngb.pagination.next-aria\" class=\"page-link\" href\n          (click)=\"selectPage(page+1); $event.preventDefault()\" [attr.tabindex]=\"nextDisabled() ? '-1' : null\"\n          [attr.aria-disabled]=\"nextDisabled() ? 'true' : null\">\n          <ng-template [ngTemplateOutlet]=\"tplNext?.templateRef || next\"\n                       [ngTemplateOutletContext]=\"{disabled: nextDisabled(), currentPage: page}\"></ng-template>\n        </a>\n      </li>\n\n      <li *ngIf=\"boundaryLinks\" class=\"page-item\" [class.disabled]=\"nextDisabled()\">\n        <a aria-label=\"Last\" i18n-aria-label=\"@@ngb.pagination.last-aria\" class=\"page-link\" href\n          (click)=\"selectPage(pageCount); $event.preventDefault()\" [attr.tabindex]=\"nextDisabled() ? '-1' : null\"\n          [attr.aria-disabled]=\"nextDisabled() ? 'true' : null\">\n          <ng-template [ngTemplateOutlet]=\"tplLast?.templateRef || last\"\n                       [ngTemplateOutletContext]=\"{disabled: nextDisabled(), currentPage: page}\"></ng-template>\n        </a>\n      </li>\n    </ul>\n  "
          }]
        }], function () {
          return [{
            type: NgbPaginationConfig
          }];
        }, {
          page: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          pageChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          disabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          boundaryLinks: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          directionLinks: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          ellipses: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          maxSize: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          pageSize: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          rotate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          size: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          tplEllipsis: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [NgbPaginationEllipsis, {
              "static": false
            }]
          }],
          tplFirst: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [NgbPaginationFirst, {
              "static": false
            }]
          }],
          tplLast: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [NgbPaginationLast, {
              "static": false
            }]
          }],
          tplNext: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [NgbPaginationNext, {
              "static": false
            }]
          }],
          tplNumber: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [NgbPaginationNumber, {
              "static": false
            }]
          }],
          tplPrevious: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [NgbPaginationPrevious, {
              "static": false
            }]
          }],
          tplPages: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [NgbPaginationPages, {
              "static": false
            }]
          }],
          collectionSize: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var DIRECTIVES = [NgbPagination, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPrevious, NgbPaginationPages];

      var NgbPaginationModule = function NgbPaginationModule() {
        _classCallCheck2(this, NgbPaginationModule);
      };

      NgbPaginationModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NgbPaginationModule
      });
      NgbPaginationModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NgbPaginationModule_Factory(t) {
          return new (t || NgbPaginationModule)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbPaginationModule, {
          declarations: function declarations() {
            return [NgbPagination, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPrevious, NgbPaginationPages];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]];
          },
          exports: function exports() {
            return [NgbPagination, NgbPaginationEllipsis, NgbPaginationFirst, NgbPaginationLast, NgbPaginationNext, NgbPaginationNumber, NgbPaginationPrevious, NgbPaginationPages];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPaginationModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            declarations: DIRECTIVES,
            exports: DIRECTIVES,
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]
          }]
        }], null, null);
      })();

      var Trigger = /*#__PURE__*/function () {
        function Trigger(open, close) {
          _classCallCheck2(this, Trigger);

          this.open = open;
          this.close = close;

          if (!close) {
            this.close = open;
          }
        }

        _createClass2(Trigger, [{
          key: "isManual",
          value: function isManual() {
            return this.open === 'manual' || this.close === 'manual';
          }
        }]);

        return Trigger;
      }();

      var DEFAULT_ALIASES = {
        'hover': ['mouseenter', 'mouseleave'],
        'focus': ['focusin', 'focusout']
      };

      function parseTriggers(triggers) {
        var aliases = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_ALIASES;
        var trimmedTriggers = (triggers || '').trim();

        if (trimmedTriggers.length === 0) {
          return [];
        }

        var parsedTriggers = trimmedTriggers.split(/\s+/).map(function (trigger) {
          return trigger.split(':');
        }).map(function (triggerPair) {
          var alias = aliases[triggerPair[0]] || triggerPair;
          return new Trigger(alias[0], alias[1]);
        });
        var manualTriggers = parsedTriggers.filter(function (triggerPair) {
          return triggerPair.isManual();
        });

        if (manualTriggers.length > 1) {
          throw 'Triggers parse error: only one manual trigger is allowed';
        }

        if (manualTriggers.length === 1 && parsedTriggers.length > 1) {
          throw 'Triggers parse error: manual trigger can\'t be mixed with other triggers';
        }

        return parsedTriggers;
      }

      function observeTriggers(renderer, nativeElement, triggers, isOpenedFn) {
        return new rxjs__WEBPACK_IMPORTED_MODULE_2__["Observable"](function (subscriber) {
          var listeners = [];

          var openFn = function openFn() {
            return subscriber.next(true);
          };

          var closeFn = function closeFn() {
            return subscriber.next(false);
          };

          var toggleFn = function toggleFn() {
            return subscriber.next(!isOpenedFn());
          };

          triggers.forEach(function (trigger) {
            if (trigger.open === trigger.close) {
              listeners.push(renderer.listen(nativeElement, trigger.open, toggleFn));
            } else {
              listeners.push(renderer.listen(nativeElement, trigger.open, openFn), renderer.listen(nativeElement, trigger.close, closeFn));
            }
          });
          return function () {
            listeners.forEach(function (unsubscribeFn) {
              return unsubscribeFn();
            });
          };
        });
      }

      var delayOrNoop = function delayOrNoop(time) {
        return time > 0 ? Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["delay"])(time) : function (a) {
          return a;
        };
      };

      var ɵ0 = delayOrNoop;

      function triggerDelay(openDelay, closeDelay, isOpenedFn) {
        return function (input$) {
          var pending = null;
          var filteredInput$ = input$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (open) {
            return {
              open: open
            };
          }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(function (event) {
            var currentlyOpen = isOpenedFn();

            if (currentlyOpen !== event.open && (!pending || pending.open === currentlyOpen)) {
              pending = event;
              return true;
            }

            if (pending && pending.open !== event.open) {
              pending = null;
            }

            return false;
          }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["share"])());
          var delayedOpen$ = filteredInput$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(function (event) {
            return event.open;
          }), delayOrNoop(openDelay));
          var delayedClose$ = filteredInput$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(function (event) {
            return !event.open;
          }), delayOrNoop(closeDelay));
          return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["merge"])(delayedOpen$, delayedClose$).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(function (event) {
            if (event === pending) {
              pending = null;
              return event.open !== isOpenedFn();
            }

            return false;
          }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (event) {
            return event.open;
          }));
        };
      }

      function listenToTriggers(renderer, nativeElement, triggers, isOpenedFn, openFn, closeFn) {
        var openDelay = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;
        var closeDelay = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 0;
        var parsedTriggers = parseTriggers(triggers);

        if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) {
          return function () {};
        }

        var subscription = observeTriggers(renderer, nativeElement, parsedTriggers, isOpenedFn).pipe(triggerDelay(openDelay, closeDelay, isOpenedFn)).subscribe(function (open) {
          return open ? openFn() : closeFn();
        });
        return function () {
          return subscription.unsubscribe();
        };
      }
      /**
       * A configuration service for the [`NgbPopover`](#/components/popover/api#NgbPopover) component.
       *
       * You can inject this service, typically in your root component, and customize the values of its properties in
       * order to provide default values for all the popovers used in the application.
       */


      var NgbPopoverConfig = /*#__PURE__*/function () {
        function NgbPopoverConfig(_ngbConfig) {
          _classCallCheck2(this, NgbPopoverConfig);

          this._ngbConfig = _ngbConfig;
          this.autoClose = true;
          this.placement = 'auto';
          this.triggers = 'click';
          this.disablePopover = false;
          this.openDelay = 0;
          this.closeDelay = 0;
        }

        _createClass2(NgbPopoverConfig, [{
          key: "animation",
          get: function get() {
            return this._animation === undefined ? this._ngbConfig.animation : this._animation;
          },
          set: function set(animation) {
            this._animation = animation;
          }
        }]);

        return NgbPopoverConfig;
      }();

      NgbPopoverConfig.ɵfac = function NgbPopoverConfig_Factory(t) {
        return new (t || NgbPopoverConfig)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig));
      };

      NgbPopoverConfig.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function NgbPopoverConfig_Factory() {
          return new NgbPopoverConfig(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig));
        },
        token: NgbPopoverConfig,
        providedIn: "root"
      });

      NgbPopoverConfig.ctorParameters = function () {
        return [{
          type: NgbConfig
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPopoverConfig, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: NgbConfig
          }];
        }, null);
      })();

      var nextId$1 = 0;

      var NgbPopoverWindow = /*#__PURE__*/function () {
        function NgbPopoverWindow() {
          _classCallCheck2(this, NgbPopoverWindow);
        }

        _createClass2(NgbPopoverWindow, [{
          key: "isTitleTemplate",
          value: function isTitleTemplate() {
            return this.title instanceof _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"];
          }
        }]);

        return NgbPopoverWindow;
      }();

      NgbPopoverWindow.ɵfac = function NgbPopoverWindow_Factory(t) {
        return new (t || NgbPopoverWindow)();
      };

      NgbPopoverWindow.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: NgbPopoverWindow,
        selectors: [["ngb-popover-window"]],
        hostAttrs: ["role", "tooltip"],
        hostVars: 5,
        hostBindings: function NgbPopoverWindow_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("id", ctx.id);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"]("popover" + (ctx.popoverClass ? " " + ctx.popoverClass : ""));

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("fade", ctx.animation);
          }
        },
        inputs: {
          animation: "animation",
          title: "title",
          id: "id",
          popoverClass: "popoverClass",
          context: "context"
        },
        ngContentSelectors: _c3,
        decls: 4,
        vars: 1,
        consts: [[1, "arrow"], ["class", "popover-header", 4, "ngIf"], [1, "popover-body"], [1, "popover-header"], ["simpleTitle", ""], [3, "ngTemplateOutlet", "ngTemplateOutletContext"]],
        template: function NgbPopoverWindow_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbPopoverWindow_h3_1_Template, 4, 2, "h3", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "div", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.title);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"]],
        styles: ["ngb-popover-window.bs-popover-bottom>.arrow,ngb-popover-window.bs-popover-top>.arrow{left:50%;margin-left:-.5rem}ngb-popover-window.bs-popover-bottom-left>.arrow,ngb-popover-window.bs-popover-top-left>.arrow{left:2em}ngb-popover-window.bs-popover-bottom-right>.arrow,ngb-popover-window.bs-popover-top-right>.arrow{left:auto;right:2em}ngb-popover-window.bs-popover-left>.arrow,ngb-popover-window.bs-popover-right>.arrow{top:50%;margin-top:-.5rem}ngb-popover-window.bs-popover-left-top>.arrow,ngb-popover-window.bs-popover-right-top>.arrow{top:.7em}ngb-popover-window.bs-popover-left-bottom>.arrow,ngb-popover-window.bs-popover-right-bottom>.arrow{top:auto;bottom:.7em}"],
        encapsulation: 2,
        changeDetection: 0
      });
      NgbPopoverWindow.propDecorators = {
        animation: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        title: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        id: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        popoverClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        context: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPopoverWindow, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'ngb-popover-window',
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            host: {
              '[class]': '"popover" + (popoverClass ? " " + popoverClass : "")',
              '[class.fade]': 'animation',
              'role': 'tooltip',
              '[id]': 'id'
            },
            template: "\n    <div class=\"arrow\"></div>\n    <h3 class=\"popover-header\" *ngIf=\"title\">\n      <ng-template #simpleTitle>{{title}}</ng-template>\n      <ng-template [ngTemplateOutlet]=\"isTitleTemplate() ? $any(title) : simpleTitle\" [ngTemplateOutletContext]=\"context\"></ng-template>\n    </h3>\n    <div class=\"popover-body\"><ng-content></ng-content></div>",
            styles: ["ngb-popover-window.bs-popover-bottom>.arrow,ngb-popover-window.bs-popover-top>.arrow{left:50%;margin-left:-.5rem}ngb-popover-window.bs-popover-bottom-left>.arrow,ngb-popover-window.bs-popover-top-left>.arrow{left:2em}ngb-popover-window.bs-popover-bottom-right>.arrow,ngb-popover-window.bs-popover-top-right>.arrow{left:auto;right:2em}ngb-popover-window.bs-popover-left>.arrow,ngb-popover-window.bs-popover-right>.arrow{top:50%;margin-top:-.5rem}ngb-popover-window.bs-popover-left-top>.arrow,ngb-popover-window.bs-popover-right-top>.arrow{top:.7em}ngb-popover-window.bs-popover-left-bottom>.arrow,ngb-popover-window.bs-popover-right-bottom>.arrow{top:auto;bottom:.7em}"]
          }]
        }], null, {
          animation: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          title: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          id: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          popoverClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          context: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * A lightweight and extensible directive for fancy popover creation.
       */


      var NgbPopover = /*#__PURE__*/function () {
        function NgbPopover(_elementRef, _renderer, injector, componentFactoryResolver, viewContainerRef, config, _ngZone, _document, _changeDetector, applicationRef) {
          var _this108 = this;

          _classCallCheck2(this, NgbPopover);

          this._elementRef = _elementRef;
          this._renderer = _renderer;
          this._ngZone = _ngZone;
          this._document = _document;
          this._changeDetector = _changeDetector;
          /**
           * An event emitted when the popover opening animation has finished. Contains no payload.
           */

          this.shown = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * An event emitted when the popover closing animation has finished. Contains no payload.
           *
           * At this point popover is not in the DOM anymore.
           */

          this.hidden = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this._ngbPopoverWindowId = "ngb-popover-".concat(nextId$1++);
          this._windowRef = null;
          this.animation = config.animation;
          this.autoClose = config.autoClose;
          this.placement = config.placement;
          this.triggers = config.triggers;
          this.container = config.container;
          this.disablePopover = config.disablePopover;
          this.popoverClass = config.popoverClass;
          this.openDelay = config.openDelay;
          this.closeDelay = config.closeDelay;
          this._popupService = new PopupService(NgbPopoverWindow, injector, viewContainerRef, _renderer, this._ngZone, componentFactoryResolver, applicationRef);
          this._zoneSubscription = _ngZone.onStable.subscribe(function () {
            if (_this108._windowRef) {
              positionElements(_this108._elementRef.nativeElement, _this108._windowRef.location.nativeElement, _this108.placement, _this108.container === 'body', 'bs-popover');
            }
          });
        }

        _createClass2(NgbPopover, [{
          key: "_isDisabled",
          value: function _isDisabled() {
            if (this.disablePopover) {
              return true;
            }

            if (!this.ngbPopover && !this.popoverTitle) {
              return true;
            }

            return false;
          }
          /**
           * Opens the popover.
           *
           * This is considered to be a "manual" triggering.
           * The `context` is an optional value to be injected into the popover template when it is created.
           */

        }, {
          key: "open",
          value: function open(context) {
            var _this109 = this;

            if (!this._windowRef && !this._isDisabled()) {
              // this type assertion is safe because otherwise _isDisabled would return true
              var _this$_popupService$o = this._popupService.open(this.ngbPopover, context, this.animation),
                  windowRef = _this$_popupService$o.windowRef,
                  transition$ = _this$_popupService$o.transition$;

              this._windowRef = windowRef;
              this._windowRef.instance.animation = this.animation;
              this._windowRef.instance.title = this.popoverTitle;
              this._windowRef.instance.context = context;
              this._windowRef.instance.popoverClass = this.popoverClass;
              this._windowRef.instance.id = this._ngbPopoverWindowId;

              this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbPopoverWindowId);

              if (this.container === 'body') {
                this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement);
              } // We need to detect changes, because we don't know where .open() might be called from.
              // Ex. opening popover from one of lifecycle hooks that run after the CD
              // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception


              this._windowRef.changeDetectorRef.detectChanges(); // We need to mark for check, because popover won't work inside the OnPush component.
              // Ex. when we use expression like `{{ popover.isOpen() : 'opened' : 'closed' }}`
              // inside the template of an OnPush component and we change the popover from
              // open -> closed, the expression in question won't be updated unless we explicitly
              // mark the parent component to be checked.


              this._windowRef.changeDetectorRef.markForCheck();

              ngbAutoClose(this._ngZone, this._document, this.autoClose, function () {
                return _this109.close();
              }, this.hidden, [this._windowRef.location.nativeElement]);
              transition$.subscribe(function () {
                return _this109.shown.emit();
              });
            }
          }
          /**
           * Closes the popover.
           *
           * This is considered to be a "manual" triggering of the popover.
           */

        }, {
          key: "close",
          value: function close() {
            var _this110 = this;

            if (this._windowRef) {
              this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby');

              this._popupService.close(this.animation).subscribe(function () {
                _this110._windowRef = null;

                _this110.hidden.emit();

                _this110._changeDetector.markForCheck();
              });
            }
          }
          /**
           * Toggles the popover.
           *
           * This is considered to be a "manual" triggering of the popover.
           */

        }, {
          key: "toggle",
          value: function toggle() {
            if (this._windowRef) {
              this.close();
            } else {
              this.open();
            }
          }
          /**
           * Returns `true`, if the popover is currently shown.
           */

        }, {
          key: "isOpen",
          value: function isOpen() {
            return this._windowRef != null;
          }
        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            this._unregisterListenersFn = listenToTriggers(this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this), this.close.bind(this), +this.openDelay, +this.closeDelay);
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(_ref52) {
            var ngbPopover = _ref52.ngbPopover,
                popoverTitle = _ref52.popoverTitle,
                disablePopover = _ref52.disablePopover,
                popoverClass = _ref52.popoverClass;

            if (popoverClass && this.isOpen()) {
              this._windowRef.instance.popoverClass = popoverClass.currentValue;
            } // close popover if title and content become empty, or disablePopover set to true


            if ((ngbPopover || popoverTitle || disablePopover) && this._isDisabled()) {
              this.close();
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.close(); // This check is needed as it might happen that ngOnDestroy is called before ngOnInit
            // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199

            if (this._unregisterListenersFn) {
              this._unregisterListenersFn();
            }

            this._zoneSubscription.unsubscribe();
          }
        }]);

        return NgbPopover;
      }();

      NgbPopover.ɵfac = function NgbPopover_Factory(t) {
        return new (t || NgbPopover)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbPopoverConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"]));
      };

      NgbPopover.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbPopover,
        selectors: [["", "ngbPopover", ""]],
        inputs: {
          animation: "animation",
          autoClose: "autoClose",
          placement: "placement",
          triggers: "triggers",
          container: "container",
          disablePopover: "disablePopover",
          popoverClass: "popoverClass",
          openDelay: "openDelay",
          closeDelay: "closeDelay",
          ngbPopover: "ngbPopover",
          popoverTitle: "popoverTitle"
        },
        outputs: {
          shown: "shown",
          hidden: "hidden"
        },
        exportAs: ["ngbPopover"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
      });

      NgbPopover.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
        }, {
          type: NgbPopoverConfig
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"]
        }];
      };

      NgbPopover.propDecorators = {
        animation: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        autoClose: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        ngbPopover: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        popoverTitle: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        placement: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        triggers: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        container: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        disablePopover: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        popoverClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        openDelay: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        closeDelay: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        shown: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        hidden: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPopover, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngbPopover]',
            exportAs: 'ngbPopover'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
          }, {
            type: NgbPopoverConfig
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"]
          }];
        }, {
          shown: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          hidden: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          animation: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          autoClose: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          placement: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          triggers: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          container: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          disablePopover: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          popoverClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          openDelay: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          closeDelay: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          ngbPopover: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          popoverTitle: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var NgbPopoverModule = function NgbPopoverModule() {
        _classCallCheck2(this, NgbPopoverModule);
      };

      NgbPopoverModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NgbPopoverModule
      });
      NgbPopoverModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NgbPopoverModule_Factory(t) {
          return new (t || NgbPopoverModule)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbPopoverModule, {
          declarations: function declarations() {
            return [NgbPopover, NgbPopoverWindow];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]];
          },
          exports: function exports() {
            return [NgbPopover];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbPopoverModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            declarations: [NgbPopover, NgbPopoverWindow],
            exports: [NgbPopover],
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]],
            entryComponents: [NgbPopoverWindow]
          }]
        }], null, null);
      })();
      /**
       * A configuration service for the [`NgbProgressbar`](#/components/progressbar/api#NgbProgressbar) component.
       *
       * You can inject this service, typically in your root component, and customize the values of its properties in
       * order to provide default values for all the progress bars used in the application.
       */


      var NgbProgressbarConfig = function NgbProgressbarConfig() {
        _classCallCheck2(this, NgbProgressbarConfig);

        this.max = 100;
        this.animated = false;
        this.striped = false;
        this.showValue = false;
      };

      NgbProgressbarConfig.ɵfac = function NgbProgressbarConfig_Factory(t) {
        return new (t || NgbProgressbarConfig)();
      };

      NgbProgressbarConfig.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function NgbProgressbarConfig_Factory() {
          return new NgbProgressbarConfig();
        },
        token: NgbProgressbarConfig,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbProgressbarConfig, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [];
        }, null);
      })();
      /**
       * A directive that provides feedback on the progress of a workflow or an action.
       */


      var NgbProgressbar = /*#__PURE__*/function () {
        function NgbProgressbar(config) {
          _classCallCheck2(this, NgbProgressbar);

          /**
           * The current value for the progress bar.
           *
           * Should be in the `[0, max]` range.
           */
          this.value = 0;
          this.max = config.max;
          this.animated = config.animated;
          this.striped = config.striped;
          this.textType = config.textType;
          this.type = config.type;
          this.showValue = config.showValue;
          this.height = config.height;
        }
        /**
         * The maximal value to be displayed in the progress bar.
         *
         * Should be a positive number. Will default to 100 otherwise.
         */


        _createClass2(NgbProgressbar, [{
          key: "max",
          get: function get() {
            return this._max;
          },
          set: function set(max) {
            this._max = !isNumber(max) || max <= 0 ? 100 : max;
          }
        }, {
          key: "getValue",
          value: function getValue() {
            return getValueInRange(this.value, this.max);
          }
        }, {
          key: "getPercentValue",
          value: function getPercentValue() {
            return 100 * this.getValue() / this.max;
          }
        }]);

        return NgbProgressbar;
      }();

      NgbProgressbar.ɵfac = function NgbProgressbar_Factory(t) {
        return new (t || NgbProgressbar)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbProgressbarConfig));
      };

      NgbProgressbar.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: NgbProgressbar,
        selectors: [["ngb-progressbar"]],
        hostAttrs: [1, "progress"],
        hostVars: 2,
        hostBindings: function NgbProgressbar_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("height", ctx.height);
          }
        },
        inputs: {
          value: "value",
          max: "max",
          animated: "animated",
          striped: "striped",
          textType: "textType",
          type: "type",
          showValue: "showValue",
          height: "height"
        },
        ngContentSelectors: _c3,
        decls: 3,
        vars: 11,
        consts: function consts() {
          var i18n_55;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_progressbar_value$$FESM2015_NG_BOOTSTRAP_JS__56 = goog.getMsg("{$interpolation}", {
              "interpolation": "\uFFFD0\uFFFD"
            });
            i18n_55 = MSG_EXTERNAL_ngb_progressbar_value$$FESM2015_NG_BOOTSTRAP_JS__56;
          } else {
            i18n_55 = $localize(_templateObject21 || (_templateObject21 = _taggedTemplateLiteral([":@@ngb.progressbar.value\u241Ff8e9a947b9db4252c0e9905765338712f2fd032f\u241F3720830768741091151:", ":INTERPOLATION:"])), "\uFFFD0\uFFFD");
          }

          return [["role", "progressbar", "aria-valuemin", "0"], [4, "ngIf"], i18n_55];
        },
        template: function NgbProgressbar_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgbProgressbar_span_1_Template, 3, 3, "span", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMapInterpolate4"]("progress-bar", ctx.type ? " bg-" + ctx.type : "", "", ctx.textType ? " text-" + ctx.textType : "", "\n    ", ctx.animated ? " progress-bar-animated" : "", "", ctx.striped ? " progress-bar-striped" : "", "");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("width", ctx.getPercentValue(), "%");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-valuenow", ctx.getValue())("aria-valuemax", ctx.max);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.showValue);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"]],
        pipes: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["PercentPipe"]],
        encapsulation: 2,
        changeDetection: 0
      });

      NgbProgressbar.ctorParameters = function () {
        return [{
          type: NgbProgressbarConfig
        }];
      };

      NgbProgressbar.propDecorators = {
        max: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        animated: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        striped: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        showValue: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        textType: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        type: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        value: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        height: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['style.height']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbProgressbar, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'ngb-progressbar',
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            host: {
              "class": 'progress'
            },
            template: "\n    <div class=\"progress-bar{{type ? ' bg-' + type : ''}}{{textType ? ' text-' + textType : ''}}\n    {{animated ? ' progress-bar-animated' : ''}}{{striped ? ' progress-bar-striped' : ''}}\"\n    role=\"progressbar\" [style.width.%]=\"getPercentValue()\"\n    [attr.aria-valuenow]=\"getValue()\" aria-valuemin=\"0\" [attr.aria-valuemax]=\"max\">\n      <span *ngIf=\"showValue\" i18n=\"@@ngb.progressbar.value\">{{getValue() / max | percent}}</span><ng-content></ng-content>\n    </div>\n  "
          }]
        }], function () {
          return [{
            type: NgbProgressbarConfig
          }];
        }, {
          value: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          max: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          animated: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          striped: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          textType: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          type: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          showValue: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          height: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['style.height']
          }]
        });
      })();

      var NgbProgressbarModule = function NgbProgressbarModule() {
        _classCallCheck2(this, NgbProgressbarModule);
      };

      NgbProgressbarModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NgbProgressbarModule
      });
      NgbProgressbarModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NgbProgressbarModule_Factory(t) {
          return new (t || NgbProgressbarModule)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbProgressbarModule, {
          declarations: function declarations() {
            return [NgbProgressbar];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]];
          },
          exports: function exports() {
            return [NgbProgressbar];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbProgressbarModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            declarations: [NgbProgressbar],
            exports: [NgbProgressbar],
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]
          }]
        }], null, null);
      })();
      /**
       * A configuration service for the [`NgbRating`](#/components/rating/api#NgbRating) component.
       *
       * You can inject this service, typically in your root component, and customize the values of its properties in
       * order to provide default values for all the ratings used in the application.
       */


      var NgbRatingConfig = function NgbRatingConfig() {
        _classCallCheck2(this, NgbRatingConfig);

        this.max = 10;
        this.readonly = false;
        this.resettable = false;
      };

      NgbRatingConfig.ɵfac = function NgbRatingConfig_Factory(t) {
        return new (t || NgbRatingConfig)();
      };

      NgbRatingConfig.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function NgbRatingConfig_Factory() {
          return new NgbRatingConfig();
        },
        token: NgbRatingConfig,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbRatingConfig, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [];
        }, null);
      })();
      /**
       * A directive that helps visualising and interacting with a star rating bar.
       */


      var NgbRating = /*#__PURE__*/function () {
        function NgbRating(config, _changeDetectorRef) {
          _classCallCheck2(this, NgbRating);

          this._changeDetectorRef = _changeDetectorRef;
          this.contexts = [];
          this.disabled = false;
          /**
           * An event emitted when the user is hovering over a given rating.
           *
           * Event payload equals to the rating being hovered over.
           */

          this.hover = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * An event emitted when the user stops hovering over a given rating.
           *
           * Event payload equals to the rating of the last item being hovered over.
           */

          this.leave = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * An event emitted when the user selects a new rating.
           *
           * Event payload equals to the newly selected rating.
           */

          this.rateChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"](true);

          this.onChange = function (_) {};

          this.onTouched = function () {};

          this.max = config.max;
          this.readonly = config.readonly;
        }

        _createClass2(NgbRating, [{
          key: "ariaValueText",
          value: function ariaValueText() {
            return "".concat(this.nextRate, " out of ").concat(this.max);
          }
        }, {
          key: "isInteractive",
          value: function isInteractive() {
            return !this.readonly && !this.disabled;
          }
        }, {
          key: "enter",
          value: function enter(value) {
            if (this.isInteractive()) {
              this._updateState(value);
            }

            this.hover.emit(value);
          }
        }, {
          key: "handleBlur",
          value: function handleBlur() {
            this.onTouched();
          }
        }, {
          key: "handleClick",
          value: function handleClick(value) {
            if (this.isInteractive()) {
              this.update(this.resettable && this.rate === value ? 0 : value);
            }
          }
        }, {
          key: "handleKeyDown",
          value: function handleKeyDown(event) {
            // tslint:disable-next-line:deprecation
            switch (event.which) {
              case Key.ArrowDown:
              case Key.ArrowLeft:
                this.update(this.rate - 1);
                break;

              case Key.ArrowUp:
              case Key.ArrowRight:
                this.update(this.rate + 1);
                break;

              case Key.Home:
                this.update(0);
                break;

              case Key.End:
                this.update(this.max);
                break;

              default:
                return;
            } // note 'return' in default case


            event.preventDefault();
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            if (changes['rate']) {
              this.update(this.rate);
            }
          }
        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            this.contexts = Array.from({
              length: this.max
            }, function (v, k) {
              return {
                fill: 0,
                index: k
              };
            });

            this._updateState(this.rate);
          }
        }, {
          key: "registerOnChange",
          value: function registerOnChange(fn) {
            this.onChange = fn;
          }
        }, {
          key: "registerOnTouched",
          value: function registerOnTouched(fn) {
            this.onTouched = fn;
          }
        }, {
          key: "reset",
          value: function reset() {
            this.leave.emit(this.nextRate);

            this._updateState(this.rate);
          }
        }, {
          key: "setDisabledState",
          value: function setDisabledState(isDisabled) {
            this.disabled = isDisabled;
          }
        }, {
          key: "update",
          value: function update(value) {
            var internalChange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
            var newRate = getValueInRange(value, this.max, 0);

            if (this.isInteractive() && this.rate !== newRate) {
              this.rate = newRate;
              this.rateChange.emit(this.rate);
            }

            if (internalChange) {
              this.onChange(this.rate);
              this.onTouched();
            }

            this._updateState(this.rate);
          }
        }, {
          key: "writeValue",
          value: function writeValue(value) {
            this.update(value, false);

            this._changeDetectorRef.markForCheck();
          }
        }, {
          key: "_updateState",
          value: function _updateState(nextValue) {
            this.nextRate = nextValue;
            this.contexts.forEach(function (context, index) {
              return context.fill = Math.round(getValueInRange(nextValue - index, 1, 0) * 100);
            });
          }
        }]);

        return NgbRating;
      }();

      NgbRating.ɵfac = function NgbRating_Factory(t) {
        return new (t || NgbRating)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbRatingConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]));
      };

      NgbRating.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: NgbRating,
        selectors: [["ngb-rating"]],
        contentQueries: function NgbRating_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"], 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.starTemplateFromContent = _t.first);
          }
        },
        hostAttrs: ["role", "slider", "aria-valuemin", "0", 1, "d-inline-flex"],
        hostVars: 5,
        hostBindings: function NgbRating_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("blur", function NgbRating_blur_HostBindingHandler() {
              return ctx.handleBlur();
            })("keydown", function NgbRating_keydown_HostBindingHandler($event) {
              return ctx.handleKeyDown($event);
            })("mouseleave", function NgbRating_mouseleave_HostBindingHandler() {
              return ctx.reset();
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("tabindex", ctx.disabled ? -1 : 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-valuemax", ctx.max)("aria-valuenow", ctx.nextRate)("aria-valuetext", ctx.ariaValueText())("aria-disabled", ctx.readonly ? true : null);
          }
        },
        inputs: {
          max: "max",
          readonly: "readonly",
          rate: "rate",
          resettable: "resettable",
          starTemplate: "starTemplate"
        },
        outputs: {
          hover: "hover",
          leave: "leave",
          rateChange: "rateChange"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALUE_ACCESSOR"],
          useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
            return NgbRating;
          }),
          multi: true
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]],
        decls: 3,
        vars: 1,
        consts: [["t", ""], ["ngFor", "", 3, "ngForOf"], [1, "sr-only"], [3, "mouseenter", "click"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"]],
        template: function NgbRating_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbRating_ng_template_0_Template, 1, 1, "ng-template", null, 0, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbRating_ng_template_2_Template, 4, 5, "ng-template", 1);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.contexts);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"]],
        encapsulation: 2,
        changeDetection: 0
      });

      NgbRating.ctorParameters = function () {
        return [{
          type: NgbRatingConfig
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }];
      };

      NgbRating.propDecorators = {
        max: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        rate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        readonly: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        resettable: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        starTemplate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        starTemplateFromContent: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"], {
            "static": false
          }]
        }],
        hover: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        leave: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        rateChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbRating, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'ngb-rating',
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            host: {
              'class': 'd-inline-flex',
              '[tabindex]': 'disabled ? -1 : 0',
              'role': 'slider',
              'aria-valuemin': '0',
              '[attr.aria-valuemax]': 'max',
              '[attr.aria-valuenow]': 'nextRate',
              '[attr.aria-valuetext]': 'ariaValueText()',
              '[attr.aria-disabled]': 'readonly ? true : null',
              '(blur)': 'handleBlur()',
              '(keydown)': 'handleKeyDown($event)',
              '(mouseleave)': 'reset()'
            },
            template: "\n    <ng-template #t let-fill=\"fill\">{{ fill === 100 ? '&#9733;' : '&#9734;' }}</ng-template>\n    <ng-template ngFor [ngForOf]=\"contexts\" let-index=\"index\">\n      <span class=\"sr-only\">({{ index < nextRate ? '*' : ' ' }})</span>\n      <span (mouseenter)=\"enter(index + 1)\" (click)=\"handleClick(index + 1)\" [style.cursor]=\"isInteractive() ? 'pointer' : 'default'\">\n        <ng-template [ngTemplateOutlet]=\"starTemplate || starTemplateFromContent || t\" [ngTemplateOutletContext]=\"contexts[index]\">\n        </ng-template>\n      </span>\n    </ng-template>\n  ",
            providers: [{
              provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALUE_ACCESSOR"],
              useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
                return NgbRating;
              }),
              multi: true
            }]
          }]
        }], function () {
          return [{
            type: NgbRatingConfig
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }];
        }, {
          hover: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          leave: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          rateChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          max: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          readonly: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          rate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          resettable: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          starTemplate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          starTemplateFromContent: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"], {
              "static": false
            }]
          }]
        });
      })();

      var NgbRatingModule = function NgbRatingModule() {
        _classCallCheck2(this, NgbRatingModule);
      };

      NgbRatingModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NgbRatingModule
      });
      NgbRatingModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NgbRatingModule_Factory(t) {
          return new (t || NgbRatingModule)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbRatingModule, {
          declarations: function declarations() {
            return [NgbRating];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]];
          },
          exports: function exports() {
            return [NgbRating];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbRatingModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            declarations: [NgbRating],
            exports: [NgbRating],
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]
          }]
        }], null, null);
      })();

      var NgbTime = /*#__PURE__*/function () {
        function NgbTime(hour, minute, second) {
          _classCallCheck2(this, NgbTime);

          this.hour = toInteger(hour);
          this.minute = toInteger(minute);
          this.second = toInteger(second);
        }

        _createClass2(NgbTime, [{
          key: "changeHour",
          value: function changeHour() {
            var step = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
            this.updateHour((isNaN(this.hour) ? 0 : this.hour) + step);
          }
        }, {
          key: "updateHour",
          value: function updateHour(hour) {
            if (isNumber(hour)) {
              this.hour = (hour < 0 ? 24 + hour : hour) % 24;
            } else {
              this.hour = NaN;
            }
          }
        }, {
          key: "changeMinute",
          value: function changeMinute() {
            var step = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
            this.updateMinute((isNaN(this.minute) ? 0 : this.minute) + step);
          }
        }, {
          key: "updateMinute",
          value: function updateMinute(minute) {
            if (isNumber(minute)) {
              this.minute = minute % 60 < 0 ? 60 + minute % 60 : minute % 60;
              this.changeHour(Math.floor(minute / 60));
            } else {
              this.minute = NaN;
            }
          }
        }, {
          key: "changeSecond",
          value: function changeSecond() {
            var step = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
            this.updateSecond((isNaN(this.second) ? 0 : this.second) + step);
          }
        }, {
          key: "updateSecond",
          value: function updateSecond(second) {
            if (isNumber(second)) {
              this.second = second < 0 ? 60 + second % 60 : second % 60;
              this.changeMinute(Math.floor(second / 60));
            } else {
              this.second = NaN;
            }
          }
        }, {
          key: "isValid",
          value: function isValid() {
            var checkSecs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
            return isNumber(this.hour) && isNumber(this.minute) && (checkSecs ? isNumber(this.second) : true);
          }
        }, {
          key: "toString",
          value: function toString() {
            return "".concat(this.hour || 0, ":").concat(this.minute || 0, ":").concat(this.second || 0);
          }
        }]);

        return NgbTime;
      }();
      /**
       * A configuration service for the [`NgbTimepicker`](#/components/timepicker/api#NgbTimepicker) component.
       *
       * You can inject this service, typically in your root component, and customize the values of its properties in
       * order to provide default values for all the timepickers used in the application.
       */


      var NgbTimepickerConfig = function NgbTimepickerConfig() {
        _classCallCheck2(this, NgbTimepickerConfig);

        this.meridian = false;
        this.spinners = true;
        this.seconds = false;
        this.hourStep = 1;
        this.minuteStep = 1;
        this.secondStep = 1;
        this.disabled = false;
        this.readonlyInputs = false;
        this.size = 'medium';
      };

      NgbTimepickerConfig.ɵfac = function NgbTimepickerConfig_Factory(t) {
        return new (t || NgbTimepickerConfig)();
      };

      NgbTimepickerConfig.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function NgbTimepickerConfig_Factory() {
          return new NgbTimepickerConfig();
        },
        token: NgbTimepickerConfig,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTimepickerConfig, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [];
        }, null);
      })();

      function NGB_DATEPICKER_TIME_ADAPTER_FACTORY() {
        return new NgbTimeStructAdapter();
      }
      /**
       * An abstract service that does the conversion between the internal timepicker `NgbTimeStruct` model and
       * any provided user time model `T`, ex. a string, a native date, etc.
       *
       * The adapter is used **only** for conversion when binding timepicker to a form control,
       * ex. `[(ngModel)]="userTimeModel"`. Here `userTimeModel` can be of any type.
       *
       * The default timepicker implementation assumes we use `NgbTimeStruct` as a user model.
       *
       * See the [custom time adapter demo](#/components/timepicker/examples#adapter) for an example.
       *
       * @since 2.2.0
       */


      var NgbTimeAdapter = function NgbTimeAdapter() {
        _classCallCheck2(this, NgbTimeAdapter);
      };

      NgbTimeAdapter.ɵfac = function NgbTimeAdapter_Factory(t) {
        return new (t || NgbTimeAdapter)();
      };

      NgbTimeAdapter.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: NGB_DATEPICKER_TIME_ADAPTER_FACTORY,
        token: NgbTimeAdapter,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTimeAdapter, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root',
            useFactory: NGB_DATEPICKER_TIME_ADAPTER_FACTORY
          }]
        }], null, null);
      })();

      var NgbTimeStructAdapter = /*#__PURE__*/function (_NgbTimeAdapter) {
        _inherits2(NgbTimeStructAdapter, _NgbTimeAdapter);

        var _super56 = _createSuper(NgbTimeStructAdapter);

        function NgbTimeStructAdapter() {
          _classCallCheck2(this, NgbTimeStructAdapter);

          return _super56.apply(this, arguments);
        }

        _createClass2(NgbTimeStructAdapter, [{
          key: "fromModel",
          value:
          /**
           * Converts a NgbTimeStruct value into NgbTimeStruct value
           */
          function fromModel(time) {
            return time && isInteger(time.hour) && isInteger(time.minute) ? {
              hour: time.hour,
              minute: time.minute,
              second: isInteger(time.second) ? time.second : null
            } : null;
          }
          /**
           * Converts a NgbTimeStruct value into NgbTimeStruct value
           */

        }, {
          key: "toModel",
          value: function toModel(time) {
            return time && isInteger(time.hour) && isInteger(time.minute) ? {
              hour: time.hour,
              minute: time.minute,
              second: isInteger(time.second) ? time.second : null
            } : null;
          }
        }]);

        return NgbTimeStructAdapter;
      }(NgbTimeAdapter);

      NgbTimeStructAdapter.ɵfac = function NgbTimeStructAdapter_Factory(t) {
        return ɵNgbTimeStructAdapter_BaseFactory(t || NgbTimeStructAdapter);
      };

      NgbTimeStructAdapter.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: NgbTimeStructAdapter,
        factory: NgbTimeStructAdapter.ɵfac
      });

      var ɵNgbTimeStructAdapter_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](NgbTimeStructAdapter);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTimeStructAdapter, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], null, null);
      })();

      function NGB_TIMEPICKER_I18N_FACTORY(locale) {
        return new NgbTimepickerI18nDefault(locale);
      }
      /**
       * Type of the service supplying day periods (for example, 'AM' and 'PM') to NgbTimepicker component.
       * The default implementation of this service honors the Angular locale, and uses the registered locale data,
       * as explained in the Angular i18n guide.
       */


      var NgbTimepickerI18n = function NgbTimepickerI18n() {
        _classCallCheck2(this, NgbTimepickerI18n);
      };

      NgbTimepickerI18n.ɵfac = function NgbTimepickerI18n_Factory(t) {
        return new (t || NgbTimepickerI18n)();
      };

      NgbTimepickerI18n.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function NgbTimepickerI18n_Factory() {
          return NGB_TIMEPICKER_I18N_FACTORY(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]));
        },
        token: NgbTimepickerI18n,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTimepickerI18n, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root',
            useFactory: NGB_TIMEPICKER_I18N_FACTORY,
            deps: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]]
          }]
        }], null, null);
      })();

      var NgbTimepickerI18nDefault = /*#__PURE__*/function (_NgbTimepickerI18n) {
        _inherits2(NgbTimepickerI18nDefault, _NgbTimepickerI18n);

        var _super57 = _createSuper(NgbTimepickerI18nDefault);

        function NgbTimepickerI18nDefault(locale) {
          var _this111;

          _classCallCheck2(this, NgbTimepickerI18nDefault);

          _this111 = _super57.call(this);
          _this111._periods = Object(_angular_common__WEBPACK_IMPORTED_MODULE_1__["getLocaleDayPeriods"])(locale, _angular_common__WEBPACK_IMPORTED_MODULE_1__["FormStyle"].Standalone, _angular_common__WEBPACK_IMPORTED_MODULE_1__["TranslationWidth"].Narrow);
          return _this111;
        }

        _createClass2(NgbTimepickerI18nDefault, [{
          key: "getMorningPeriod",
          value: function getMorningPeriod() {
            return this._periods[0];
          }
        }, {
          key: "getAfternoonPeriod",
          value: function getAfternoonPeriod() {
            return this._periods[1];
          }
        }]);

        return NgbTimepickerI18nDefault;
      }(NgbTimepickerI18n);

      NgbTimepickerI18nDefault.ɵfac = function NgbTimepickerI18nDefault_Factory(t) {
        return new (t || NgbTimepickerI18nDefault)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]));
      };

      NgbTimepickerI18nDefault.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: NgbTimepickerI18nDefault,
        factory: NgbTimepickerI18nDefault.ɵfac
      });

      NgbTimepickerI18nDefault.ctorParameters = function () {
        return [{
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTimepickerI18nDefault, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]]
            }]
          }];
        }, null);
      })();

      var FILTER_REGEX = /[^0-9]/g;
      /**
       * A directive that helps with wth picking hours, minutes and seconds.
       */

      var NgbTimepicker = /*#__PURE__*/function () {
        function NgbTimepicker(_config, _ngbTimeAdapter, _cd, i18n) {
          _classCallCheck2(this, NgbTimepicker);

          this._config = _config;
          this._ngbTimeAdapter = _ngbTimeAdapter;
          this._cd = _cd;
          this.i18n = i18n;

          this.onChange = function (_) {};

          this.onTouched = function () {};

          this.meridian = _config.meridian;
          this.spinners = _config.spinners;
          this.seconds = _config.seconds;
          this.hourStep = _config.hourStep;
          this.minuteStep = _config.minuteStep;
          this.secondStep = _config.secondStep;
          this.disabled = _config.disabled;
          this.readonlyInputs = _config.readonlyInputs;
          this.size = _config.size;
        }
        /**
         * The number of hours to add/subtract when clicking hour spinners.
         */


        _createClass2(NgbTimepicker, [{
          key: "hourStep",
          get: function get() {
            return this._hourStep;
          }
          /**
           * The number of minutes to add/subtract when clicking minute spinners.
           */
          ,
          set: function set(step) {
            this._hourStep = isInteger(step) ? step : this._config.hourStep;
          }
        }, {
          key: "minuteStep",
          get: function get() {
            return this._minuteStep;
          }
          /**
           * The number of seconds to add/subtract when clicking second spinners.
           */
          ,
          set: function set(step) {
            this._minuteStep = isInteger(step) ? step : this._config.minuteStep;
          }
        }, {
          key: "secondStep",
          get: function get() {
            return this._secondStep;
          },
          set: function set(step) {
            this._secondStep = isInteger(step) ? step : this._config.secondStep;
          }
        }, {
          key: "writeValue",
          value: function writeValue(value) {
            var structValue = this._ngbTimeAdapter.fromModel(value);

            this.model = structValue ? new NgbTime(structValue.hour, structValue.minute, structValue.second) : new NgbTime();

            if (!this.seconds && (!structValue || !isNumber(structValue.second))) {
              this.model.second = 0;
            }

            this._cd.markForCheck();
          }
        }, {
          key: "registerOnChange",
          value: function registerOnChange(fn) {
            this.onChange = fn;
          }
        }, {
          key: "registerOnTouched",
          value: function registerOnTouched(fn) {
            this.onTouched = fn;
          }
        }, {
          key: "setDisabledState",
          value: function setDisabledState(isDisabled) {
            this.disabled = isDisabled;
          }
        }, {
          key: "changeHour",
          value: function changeHour(step) {
            this.model.changeHour(step);
            this.propagateModelChange();
          }
        }, {
          key: "changeMinute",
          value: function changeMinute(step) {
            this.model.changeMinute(step);
            this.propagateModelChange();
          }
        }, {
          key: "changeSecond",
          value: function changeSecond(step) {
            this.model.changeSecond(step);
            this.propagateModelChange();
          }
        }, {
          key: "updateHour",
          value: function updateHour(newVal) {
            var isPM = this.model.hour >= 12;
            var enteredHour = toInteger(newVal);

            if (this.meridian && (isPM && enteredHour < 12 || !isPM && enteredHour === 12)) {
              this.model.updateHour(enteredHour + 12);
            } else {
              this.model.updateHour(enteredHour);
            }

            this.propagateModelChange();
          }
        }, {
          key: "updateMinute",
          value: function updateMinute(newVal) {
            this.model.updateMinute(toInteger(newVal));
            this.propagateModelChange();
          }
        }, {
          key: "updateSecond",
          value: function updateSecond(newVal) {
            this.model.updateSecond(toInteger(newVal));
            this.propagateModelChange();
          }
        }, {
          key: "toggleMeridian",
          value: function toggleMeridian() {
            if (this.meridian) {
              this.changeHour(12);
            }
          }
        }, {
          key: "formatInput",
          value: function formatInput(input) {
            input.value = input.value.replace(FILTER_REGEX, '');
          }
        }, {
          key: "formatHour",
          value: function formatHour(value) {
            if (isNumber(value)) {
              if (this.meridian) {
                return padNumber(value % 12 === 0 ? 12 : value % 12);
              } else {
                return padNumber(value % 24);
              }
            } else {
              return padNumber(NaN);
            }
          }
        }, {
          key: "formatMinSec",
          value: function formatMinSec(value) {
            return padNumber(isNumber(value) ? value : NaN);
          }
        }, {
          key: "handleBlur",
          value: function handleBlur() {
            this.onTouched();
          }
        }, {
          key: "isSmallSize",
          get: function get() {
            return this.size === 'small';
          }
        }, {
          key: "isLargeSize",
          get: function get() {
            return this.size === 'large';
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            if (changes['seconds'] && !this.seconds && this.model && !isNumber(this.model.second)) {
              this.model.second = 0;
              this.propagateModelChange(false);
            }
          }
        }, {
          key: "propagateModelChange",
          value: function propagateModelChange() {
            var touched = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;

            if (touched) {
              this.onTouched();
            }

            if (this.model.isValid(this.seconds)) {
              this.onChange(this._ngbTimeAdapter.toModel({
                hour: this.model.hour,
                minute: this.model.minute,
                second: this.model.second
              }));
            } else {
              this.onChange(this._ngbTimeAdapter.toModel(null));
            }
          }
        }]);

        return NgbTimepicker;
      }();

      NgbTimepicker.ɵfac = function NgbTimepicker_Factory(t) {
        return new (t || NgbTimepicker)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbTimepickerConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbTimeAdapter), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbTimepickerI18n));
      };

      NgbTimepicker.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: NgbTimepicker,
        selectors: [["ngb-timepicker"]],
        inputs: {
          meridian: "meridian",
          spinners: "spinners",
          seconds: "seconds",
          hourStep: "hourStep",
          minuteStep: "minuteStep",
          secondStep: "secondStep",
          readonlyInputs: "readonlyInputs",
          size: "size"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALUE_ACCESSOR"],
          useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
            return NgbTimepicker;
          }),
          multi: true
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]],
        decls: 16,
        vars: 25,
        consts: function consts() {
          var i18n_57;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_timepicker_HH$$FESM2015_NG_BOOTSTRAP_JS_58 = goog.getMsg("HH");
            i18n_57 = MSG_EXTERNAL_ngb_timepicker_HH$$FESM2015_NG_BOOTSTRAP_JS_58;
          } else {
            i18n_57 = $localize(_templateObject22 || (_templateObject22 = _taggedTemplateLiteral([":@@ngb.timepicker.HH\u241Fce676ab1d6d98f85c836381cf100a4a91ef95a1f\u241F4043638465245303811:HH"])));
          }

          var i18n_59;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_timepicker_hours$$FESM2015_NG_BOOTSTRAP_JS_60 = goog.getMsg("Hours");
            i18n_59 = MSG_EXTERNAL_ngb_timepicker_hours$$FESM2015_NG_BOOTSTRAP_JS_60;
          } else {
            i18n_59 = $localize(_templateObject23 || (_templateObject23 = _taggedTemplateLiteral([":@@ngb.timepicker.hours\u241F3bbce5fef7e1151da052a4e529453edb340e3912\u241F8070396816726827304:Hours"])));
          }

          var i18n_61;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_timepicker_MM$$FESM2015_NG_BOOTSTRAP_JS_62 = goog.getMsg("MM");
            i18n_61 = MSG_EXTERNAL_ngb_timepicker_MM$$FESM2015_NG_BOOTSTRAP_JS_62;
          } else {
            i18n_61 = $localize(_templateObject24 || (_templateObject24 = _taggedTemplateLiteral([":@@ngb.timepicker.MM\u241F72c8edf6a50068a05bde70991e36b1e881f4ca54\u241F1647282246509919852:MM"])));
          }

          var i18n_63;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_timepicker_minutes$$FESM2015_NG_BOOTSTRAP_JS_64 = goog.getMsg("Minutes");
            i18n_63 = MSG_EXTERNAL_ngb_timepicker_minutes$$FESM2015_NG_BOOTSTRAP_JS_64;
          } else {
            i18n_63 = $localize(_templateObject25 || (_templateObject25 = _taggedTemplateLiteral([":@@ngb.timepicker.minutes\u241F41e62daa962947c0d23ded0981975d1bddf0bf38\u241F5531237363767747080:Minutes"])));
          }

          var i18n_65;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_timepicker_increment_hours$$FESM2015_NG_BOOTSTRAP_JS__66 = goog.getMsg("Increment hours");
            i18n_65 = MSG_EXTERNAL_ngb_timepicker_increment_hours$$FESM2015_NG_BOOTSTRAP_JS__66;
          } else {
            i18n_65 = $localize(_templateObject26 || (_templateObject26 = _taggedTemplateLiteral([":@@ngb.timepicker.increment-hours\u241Fcb74bc1d625a6c1742f0d7d47306cf495780c218\u241F5939278348542933629:Increment hours"])));
          }

          var i18n_67;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_timepicker_decrement_hours$$FESM2015_NG_BOOTSTRAP_JS__68 = goog.getMsg("Decrement hours");
            i18n_67 = MSG_EXTERNAL_ngb_timepicker_decrement_hours$$FESM2015_NG_BOOTSTRAP_JS__68;
          } else {
            i18n_67 = $localize(_templateObject27 || (_templateObject27 = _taggedTemplateLiteral([":@@ngb.timepicker.decrement-hours\u241F147c7a19429da7d999e247d22e33fee370b1691b\u241F3651829882940481818:Decrement hours"])));
          }

          var i18n_69;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_timepicker_increment_minutes$$FESM2015_NG_BOOTSTRAP_JS__70 = goog.getMsg("Increment minutes");
            i18n_69 = MSG_EXTERNAL_ngb_timepicker_increment_minutes$$FESM2015_NG_BOOTSTRAP_JS__70;
          } else {
            i18n_69 = $localize(_templateObject28 || (_templateObject28 = _taggedTemplateLiteral([":@@ngb.timepicker.increment-minutes\u241Ff5a4a3bc05e053f6732475d0e74875ec01c3a348\u241F180147720391025024:Increment minutes"])));
          }

          var i18n_71;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_timepicker_decrement_minutes$$FESM2015_NG_BOOTSTRAP_JS__72 = goog.getMsg("Decrement minutes");
            i18n_71 = MSG_EXTERNAL_ngb_timepicker_decrement_minutes$$FESM2015_NG_BOOTSTRAP_JS__72;
          } else {
            i18n_71 = $localize(_templateObject29 || (_templateObject29 = _taggedTemplateLiteral([":@@ngb.timepicker.decrement-minutes\u241Fc1a6899e529c096da5b660385d4e77fe1f7ad271\u241F7447789825403243588:Decrement minutes"])));
          }

          var i18n_73;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_timepicker_SS$$FESM2015_NG_BOOTSTRAP_JS__74 = goog.getMsg("SS");
            i18n_73 = MSG_EXTERNAL_ngb_timepicker_SS$$FESM2015_NG_BOOTSTRAP_JS__74;
          } else {
            i18n_73 = $localize(_templateObject30 || (_templateObject30 = _taggedTemplateLiteral([":@@ngb.timepicker.SS\u241Febe38d36a40a2383c5fefa9b4608ffbda08bd4a3\u241F3628127143071124194:SS"])));
          }

          var i18n_75;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_timepicker_seconds$$FESM2015_NG_BOOTSTRAP_JS__76 = goog.getMsg("Seconds");
            i18n_75 = MSG_EXTERNAL_ngb_timepicker_seconds$$FESM2015_NG_BOOTSTRAP_JS__76;
          } else {
            i18n_75 = $localize(_templateObject31 || (_templateObject31 = _taggedTemplateLiteral([":@@ngb.timepicker.seconds\u241F4f2ed9e71a7c981db3e50ae2fedb28aff2ec4e6c\u241F8874012390997067175:Seconds"])));
          }

          var i18n_77;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_timepicker_increment_seconds$$FESM2015_NG_BOOTSTRAP_JS___78 = goog.getMsg("Increment seconds");
            i18n_77 = MSG_EXTERNAL_ngb_timepicker_increment_seconds$$FESM2015_NG_BOOTSTRAP_JS___78;
          } else {
            i18n_77 = $localize(_templateObject32 || (_templateObject32 = _taggedTemplateLiteral([":@@ngb.timepicker.increment-seconds\u241F912322ecee7d659d04dcf494a70e22e49d334b26\u241F5364772110539092174:Increment seconds"])));
          }

          var i18n_79;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_timepicker_decrement_seconds$$FESM2015_NG_BOOTSTRAP_JS___80 = goog.getMsg("Decrement seconds");
            i18n_79 = MSG_EXTERNAL_ngb_timepicker_decrement_seconds$$FESM2015_NG_BOOTSTRAP_JS___80;
          } else {
            i18n_79 = $localize(_templateObject33 || (_templateObject33 = _taggedTemplateLiteral([":@@ngb.timepicker.decrement-seconds\u241F5db47ac104294243a70eb9124fbea9d0004ddf69\u241F753633511487974857:Decrement seconds"])));
          }

          var i18n_81;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_timepicker_PM$$FESM2015_NG_BOOTSTRAP_JS___82 = goog.getMsg("{$interpolation}", {
              "interpolation": "\uFFFD0\uFFFD"
            });
            i18n_81 = MSG_EXTERNAL_ngb_timepicker_PM$$FESM2015_NG_BOOTSTRAP_JS___82;
          } else {
            i18n_81 = $localize(_templateObject34 || (_templateObject34 = _taggedTemplateLiteral([":@@ngb.timepicker.PM\u241F8d6e691e10306c1b34c6b26805151aaea320ef7f\u241F3564199131264287502:", ":INTERPOLATION:"])), "\uFFFD0\uFFFD");
          }

          var i18n_83;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_timepicker_AM$$FESM2015_NG_BOOTSTRAP_JS___84 = goog.getMsg("{$interpolation}", {
              "interpolation": "\uFFFD0\uFFFD"
            });
            i18n_83 = MSG_EXTERNAL_ngb_timepicker_AM$$FESM2015_NG_BOOTSTRAP_JS___84;
          } else {
            i18n_83 = $localize(_templateObject35 || (_templateObject35 = _taggedTemplateLiteral([":@@ngb.timepicker.AM\u241F69a1f176a93998876952adac57c3bc3863b6105e\u241F4592818992509942761:", ":INTERPOLATION:"])), "\uFFFD0\uFFFD");
          }

          return [[3, "disabled"], [1, "ngb-tp"], [1, "ngb-tp-input-container", "ngb-tp-hour"], ["tabindex", "-1", "type", "button", "class", "btn btn-link", 3, "btn-sm", "btn-lg", "disabled", "click", 4, "ngIf"], ["type", "text", "maxlength", "2", "inputmode", "numeric", "placeholder", i18n_57, "aria-label", i18n_59, 1, "ngb-tp-input", "form-control", 3, "value", "readOnly", "disabled", "change", "blur", "input", "keydown.ArrowUp", "keydown.ArrowDown"], [1, "ngb-tp-spacer"], [1, "ngb-tp-input-container", "ngb-tp-minute"], ["type", "text", "maxlength", "2", "inputmode", "numeric", "placeholder", i18n_61, "aria-label", i18n_63, 1, "ngb-tp-input", "form-control", 3, "value", "readOnly", "disabled", "change", "blur", "input", "keydown.ArrowUp", "keydown.ArrowDown"], ["class", "ngb-tp-spacer", 4, "ngIf"], ["class", "ngb-tp-input-container ngb-tp-second", 4, "ngIf"], ["class", "ngb-tp-meridian", 4, "ngIf"], ["tabindex", "-1", "type", "button", 1, "btn", "btn-link", 3, "disabled", "click"], [1, "chevron", "ngb-tp-chevron"], [1, "sr-only"], i18n_65, [1, "chevron", "ngb-tp-chevron", "bottom"], i18n_67, i18n_69, i18n_71, [1, "ngb-tp-input-container", "ngb-tp-second"], ["type", "text", "maxlength", "2", "inputmode", "numeric", "placeholder", i18n_73, "aria-label", i18n_75, 1, "ngb-tp-input", "form-control", 3, "value", "readOnly", "disabled", "change", "blur", "input", "keydown.ArrowUp", "keydown.ArrowDown"], i18n_77, i18n_79, [1, "ngb-tp-meridian"], ["type", "button", 1, "btn", "btn-outline-primary", 3, "disabled", "click"], [4, "ngIf", "ngIfElse"], ["am", ""], i18n_81, i18n_83];
        },
        template: function NgbTimepicker_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "fieldset", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "div", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "div", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, NgbTimepicker_button_3_Template, 4, 7, "button", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](4, "input", 4);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function NgbTimepicker_Template_input_change_4_listener($event) {
              return ctx.updateHour($event.target.value);
            })("blur", function NgbTimepicker_Template_input_blur_4_listener() {
              return ctx.handleBlur();
            })("input", function NgbTimepicker_Template_input_input_4_listener($event) {
              return ctx.formatInput($event.target);
            })("keydown.ArrowUp", function NgbTimepicker_Template_input_keydown_ArrowUp_4_listener($event) {
              ctx.changeHour(ctx.hourStep);
              return $event.preventDefault();
            })("keydown.ArrowDown", function NgbTimepicker_Template_input_keydown_ArrowDown_4_listener($event) {
              ctx.changeHour(-ctx.hourStep);
              return $event.preventDefault();
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](5, NgbTimepicker_button_5_Template, 4, 7, "button", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](6, "div", 5);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](7, ":");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](8, "div", 6);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](9, NgbTimepicker_button_9_Template, 4, 7, "button", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](10, "input", 7);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function NgbTimepicker_Template_input_change_10_listener($event) {
              return ctx.updateMinute($event.target.value);
            })("blur", function NgbTimepicker_Template_input_blur_10_listener() {
              return ctx.handleBlur();
            })("input", function NgbTimepicker_Template_input_input_10_listener($event) {
              return ctx.formatInput($event.target);
            })("keydown.ArrowUp", function NgbTimepicker_Template_input_keydown_ArrowUp_10_listener($event) {
              ctx.changeMinute(ctx.minuteStep);
              return $event.preventDefault();
            })("keydown.ArrowDown", function NgbTimepicker_Template_input_keydown_ArrowDown_10_listener($event) {
              ctx.changeMinute(-ctx.minuteStep);
              return $event.preventDefault();
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](11, NgbTimepicker_button_11_Template, 4, 7, "button", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](12, NgbTimepicker_div_12_Template, 2, 0, "div", 8);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](13, NgbTimepicker_div_13_Template, 4, 9, "div", 9);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](14, NgbTimepicker_div_14_Template, 1, 0, "div", 8);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](15, NgbTimepicker_div_15_Template, 5, 9, "div", 10);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("disabled", ctx.disabled);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx.disabled);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.spinners);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("form-control-sm", ctx.isSmallSize)("form-control-lg", ctx.isLargeSize);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("value", ctx.formatHour(ctx.model == null ? null : ctx.model.hour))("readOnly", ctx.readonlyInputs)("disabled", ctx.disabled);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.spinners);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](4);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.spinners);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("form-control-sm", ctx.isSmallSize)("form-control-lg", ctx.isLargeSize);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("value", ctx.formatMinSec(ctx.model == null ? null : ctx.model.minute))("readOnly", ctx.readonlyInputs)("disabled", ctx.disabled);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.spinners);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.seconds);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.seconds);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.meridian);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.meridian);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"]],
        styles: ["ngb-timepicker{font-size:1rem}.ngb-tp{display:flex;align-items:center}.ngb-tp-input-container{width:4em}.ngb-tp-chevron:before{border-style:solid;border-width:.29em .29em 0 0;content:\"\";display:inline-block;height:.69em;left:.05em;position:relative;top:.15em;transform:rotate(-45deg);vertical-align:middle;width:.69em}.ngb-tp-chevron.bottom:before{top:-.3em;transform:rotate(135deg)}.ngb-tp-input{text-align:center}.ngb-tp-hour,.ngb-tp-meridian,.ngb-tp-minute,.ngb-tp-second{display:flex;flex-direction:column;align-items:center;justify-content:space-around}.ngb-tp-spacer{width:1em;text-align:center}"],
        encapsulation: 2
      });

      NgbTimepicker.ctorParameters = function () {
        return [{
          type: NgbTimepickerConfig
        }, {
          type: NgbTimeAdapter
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }, {
          type: NgbTimepickerI18n
        }];
      };

      NgbTimepicker.propDecorators = {
        meridian: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        spinners: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        seconds: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        hourStep: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        minuteStep: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        secondStep: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        readonlyInputs: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        size: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTimepicker, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'ngb-timepicker',
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            template: "\n    <fieldset [disabled]=\"disabled\" [class.disabled]=\"disabled\">\n      <div class=\"ngb-tp\">\n        <div class=\"ngb-tp-input-container ngb-tp-hour\">\n          <button *ngIf=\"spinners\" tabindex=\"-1\" type=\"button\" (click)=\"changeHour(hourStep)\"\n            class=\"btn btn-link\" [class.btn-sm]=\"isSmallSize\" [class.btn-lg]=\"isLargeSize\" [class.disabled]=\"disabled\"\n            [disabled]=\"disabled\">\n            <span class=\"chevron ngb-tp-chevron\"></span>\n            <span class=\"sr-only\" i18n=\"@@ngb.timepicker.increment-hours\">Increment hours</span>\n          </button>\n          <input type=\"text\" class=\"ngb-tp-input form-control\" [class.form-control-sm]=\"isSmallSize\"\n            [class.form-control-lg]=\"isLargeSize\"\n            maxlength=\"2\" inputmode=\"numeric\" placeholder=\"HH\" i18n-placeholder=\"@@ngb.timepicker.HH\"\n            [value]=\"formatHour(model?.hour)\" (change)=\"updateHour($any($event).target.value)\"\n            [readOnly]=\"readonlyInputs\" [disabled]=\"disabled\" aria-label=\"Hours\" i18n-aria-label=\"@@ngb.timepicker.hours\"\n            (blur)=\"handleBlur()\"\n            (input)=\"formatInput($any($event).target)\"\n            (keydown.ArrowUp)=\"changeHour(hourStep); $event.preventDefault()\"\n            (keydown.ArrowDown)=\"changeHour(-hourStep); $event.preventDefault()\">\n          <button *ngIf=\"spinners\" tabindex=\"-1\" type=\"button\" (click)=\"changeHour(-hourStep)\"\n            class=\"btn btn-link\" [class.btn-sm]=\"isSmallSize\" [class.btn-lg]=\"isLargeSize\" [class.disabled]=\"disabled\"\n            [disabled]=\"disabled\">\n            <span class=\"chevron ngb-tp-chevron bottom\"></span>\n            <span class=\"sr-only\" i18n=\"@@ngb.timepicker.decrement-hours\">Decrement hours</span>\n          </button>\n        </div>\n        <div class=\"ngb-tp-spacer\">:</div>\n        <div class=\"ngb-tp-input-container ngb-tp-minute\">\n          <button *ngIf=\"spinners\" tabindex=\"-1\" type=\"button\" (click)=\"changeMinute(minuteStep)\"\n            class=\"btn btn-link\" [class.btn-sm]=\"isSmallSize\" [class.btn-lg]=\"isLargeSize\" [class.disabled]=\"disabled\"\n            [disabled]=\"disabled\">\n            <span class=\"chevron ngb-tp-chevron\"></span>\n            <span class=\"sr-only\" i18n=\"@@ngb.timepicker.increment-minutes\">Increment minutes</span>\n          </button>\n          <input type=\"text\" class=\"ngb-tp-input form-control\" [class.form-control-sm]=\"isSmallSize\" [class.form-control-lg]=\"isLargeSize\"\n            maxlength=\"2\" inputmode=\"numeric\" placeholder=\"MM\" i18n-placeholder=\"@@ngb.timepicker.MM\"\n            [value]=\"formatMinSec(model?.minute)\" (change)=\"updateMinute($any($event).target.value)\"\n            [readOnly]=\"readonlyInputs\" [disabled]=\"disabled\" aria-label=\"Minutes\" i18n-aria-label=\"@@ngb.timepicker.minutes\"\n            (blur)=\"handleBlur()\"\n            (input)=\"formatInput($any($event).target)\"\n            (keydown.ArrowUp)=\"changeMinute(minuteStep); $event.preventDefault()\"\n            (keydown.ArrowDown)=\"changeMinute(-minuteStep); $event.preventDefault()\">\n          <button *ngIf=\"spinners\" tabindex=\"-1\" type=\"button\" (click)=\"changeMinute(-minuteStep)\"\n            class=\"btn btn-link\" [class.btn-sm]=\"isSmallSize\" [class.btn-lg]=\"isLargeSize\"  [class.disabled]=\"disabled\"\n            [disabled]=\"disabled\">\n            <span class=\"chevron ngb-tp-chevron bottom\"></span>\n            <span class=\"sr-only\"  i18n=\"@@ngb.timepicker.decrement-minutes\">Decrement minutes</span>\n          </button>\n        </div>\n        <div *ngIf=\"seconds\" class=\"ngb-tp-spacer\">:</div>\n        <div *ngIf=\"seconds\" class=\"ngb-tp-input-container ngb-tp-second\">\n          <button *ngIf=\"spinners\" tabindex=\"-1\" type=\"button\" (click)=\"changeSecond(secondStep)\"\n            class=\"btn btn-link\" [class.btn-sm]=\"isSmallSize\" [class.btn-lg]=\"isLargeSize\" [class.disabled]=\"disabled\"\n            [disabled]=\"disabled\">\n            <span class=\"chevron ngb-tp-chevron\"></span>\n            <span class=\"sr-only\" i18n=\"@@ngb.timepicker.increment-seconds\">Increment seconds</span>\n          </button>\n          <input type=\"text\" class=\"ngb-tp-input form-control\" [class.form-control-sm]=\"isSmallSize\" [class.form-control-lg]=\"isLargeSize\"\n            maxlength=\"2\" inputmode=\"numeric\" placeholder=\"SS\" i18n-placeholder=\"@@ngb.timepicker.SS\"\n            [value]=\"formatMinSec(model?.second)\" (change)=\"updateSecond($any($event).target.value)\"\n            [readOnly]=\"readonlyInputs\" [disabled]=\"disabled\" aria-label=\"Seconds\" i18n-aria-label=\"@@ngb.timepicker.seconds\"\n            (blur)=\"handleBlur()\"\n            (input)=\"formatInput($any($event).target)\"\n            (keydown.ArrowUp)=\"changeSecond(secondStep); $event.preventDefault()\"\n            (keydown.ArrowDown)=\"changeSecond(-secondStep); $event.preventDefault()\">\n          <button *ngIf=\"spinners\" tabindex=\"-1\" type=\"button\" (click)=\"changeSecond(-secondStep)\"\n            class=\"btn btn-link\" [class.btn-sm]=\"isSmallSize\" [class.btn-lg]=\"isLargeSize\"  [class.disabled]=\"disabled\"\n            [disabled]=\"disabled\">\n            <span class=\"chevron ngb-tp-chevron bottom\"></span>\n            <span class=\"sr-only\" i18n=\"@@ngb.timepicker.decrement-seconds\">Decrement seconds</span>\n          </button>\n        </div>\n        <div *ngIf=\"meridian\" class=\"ngb-tp-spacer\"></div>\n        <div *ngIf=\"meridian\" class=\"ngb-tp-meridian\">\n          <button type=\"button\" class=\"btn btn-outline-primary\" [class.btn-sm]=\"isSmallSize\" [class.btn-lg]=\"isLargeSize\"\n            [disabled]=\"disabled\" [class.disabled]=\"disabled\"\n                  (click)=\"toggleMeridian()\">\n            <ng-container *ngIf=\"model && model.hour >= 12; else am\"\n                          i18n=\"@@ngb.timepicker.PM\">{{ i18n.getAfternoonPeriod() }}</ng-container>\n            <ng-template #am i18n=\"@@ngb.timepicker.AM\">{{ i18n.getMorningPeriod() }}</ng-template>\n          </button>\n        </div>\n      </div>\n    </fieldset>\n  ",
            providers: [{
              provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALUE_ACCESSOR"],
              useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
                return NgbTimepicker;
              }),
              multi: true
            }],
            styles: ["ngb-timepicker{font-size:1rem}.ngb-tp{display:flex;align-items:center}.ngb-tp-input-container{width:4em}.ngb-tp-chevron:before{border-style:solid;border-width:.29em .29em 0 0;content:\"\";display:inline-block;height:.69em;left:.05em;position:relative;top:.15em;transform:rotate(-45deg);vertical-align:middle;width:.69em}.ngb-tp-chevron.bottom:before{top:-.3em;transform:rotate(135deg)}.ngb-tp-input{text-align:center}.ngb-tp-hour,.ngb-tp-meridian,.ngb-tp-minute,.ngb-tp-second{display:flex;flex-direction:column;align-items:center;justify-content:space-around}.ngb-tp-spacer{width:1em;text-align:center}"]
          }]
        }], function () {
          return [{
            type: NgbTimepickerConfig
          }, {
            type: NgbTimeAdapter
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }, {
            type: NgbTimepickerI18n
          }];
        }, {
          meridian: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          spinners: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          seconds: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          hourStep: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          minuteStep: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          secondStep: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          readonlyInputs: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          size: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var NgbTimepickerModule = function NgbTimepickerModule() {
        _classCallCheck2(this, NgbTimepickerModule);
      };

      NgbTimepickerModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NgbTimepickerModule
      });
      NgbTimepickerModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NgbTimepickerModule_Factory(t) {
          return new (t || NgbTimepickerModule)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbTimepickerModule, {
          declarations: function declarations() {
            return [NgbTimepicker];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]];
          },
          exports: function exports() {
            return [NgbTimepicker];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTimepickerModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            declarations: [NgbTimepicker],
            exports: [NgbTimepicker],
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]
          }]
        }], null, null);
      })();
      /**
       * Configuration service for the NgbToast component. You can inject this service, typically in your root component,
       * and customize the values of its properties in order to provide default values for all the toasts used in the
       * application.
       *
       * @since 5.0.0
       */


      var NgbToastConfig = /*#__PURE__*/function () {
        function NgbToastConfig(_ngbConfig) {
          _classCallCheck2(this, NgbToastConfig);

          this._ngbConfig = _ngbConfig;
          this.autohide = true;
          this.delay = 500;
          this.ariaLive = 'polite';
        }

        _createClass2(NgbToastConfig, [{
          key: "animation",
          get: function get() {
            return this._animation === undefined ? this._ngbConfig.animation : this._animation;
          },
          set: function set(animation) {
            this._animation = animation;
          }
        }]);

        return NgbToastConfig;
      }();

      NgbToastConfig.ɵfac = function NgbToastConfig_Factory(t) {
        return new (t || NgbToastConfig)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig));
      };

      NgbToastConfig.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function NgbToastConfig_Factory() {
          return new NgbToastConfig(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig));
        },
        token: NgbToastConfig,
        providedIn: "root"
      });

      NgbToastConfig.ctorParameters = function () {
        return [{
          type: NgbConfig
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbToastConfig, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: NgbConfig
          }];
        }, null);
      })();

      var ngbToastFadeInTransition = function ngbToastFadeInTransition(element, animation) {
        var classList = element.classList;

        if (!animation) {
          classList.add('show');
          return;
        }

        classList.remove('hide');
        reflow(element);
        classList.add('showing');
        return function () {
          classList.remove('showing');
          classList.add('show');
        };
      };

      var ngbToastFadeOutTransition = function ngbToastFadeOutTransition(_ref53) {
        var classList = _ref53.classList;
        classList.remove('show');
        return function () {
          classList.add('hide');
        };
      };
      /**
       * This directive allows the usage of HTML markup or other directives
       * inside of the toast's header.
       *
       * @since 5.0.0
       */


      var NgbToastHeader = function NgbToastHeader() {
        _classCallCheck2(this, NgbToastHeader);
      };

      NgbToastHeader.ɵfac = function NgbToastHeader_Factory(t) {
        return new (t || NgbToastHeader)();
      };

      NgbToastHeader.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbToastHeader,
        selectors: [["", "ngbToastHeader", ""]]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbToastHeader, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngbToastHeader]'
          }]
        }], null, null);
      })();
      /**
       * Toasts provide feedback messages as notifications to the user.
       * Goal is to mimic the push notifications available both on mobile and desktop operating systems.
       *
       * @since 5.0.0
       */


      var NgbToast = /*#__PURE__*/function () {
        function NgbToast(ariaLive, config, _zone, _element) {
          _classCallCheck2(this, NgbToast);

          this.ariaLive = ariaLive;
          this._zone = _zone;
          this._element = _element;
          /**
           * A template like `<ng-template ngbToastHeader></ng-template>` can be
           * used in the projected content to allow markup usage.
           */

          this.contentHeaderTpl = null;
          /**
           * An event fired after the animation triggered by calling `.show()` method has finished.
           *
           * @since 8.0.0
           */

          this.shown = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * An event fired after the animation triggered by calling `.hide()` method has finished.
           *
           * It can only occur in 2 different scenarios:
           * - `autohide` timeout fires
           * - user clicks on a closing cross
           *
           * Additionally this output is purely informative. The toast won't be removed from DOM automatically, it's up
           * to the user to take care of that.
           *
           * @since 8.0.0
           */

          this.hidden = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();

          if (this.ariaLive == null) {
            this.ariaLive = config.ariaLive;
          }

          this.delay = config.delay;
          this.autohide = config.autohide;
          this.animation = config.animation;
        }

        _createClass2(NgbToast, [{
          key: "ngAfterContentInit",
          value: function ngAfterContentInit() {
            var _this112 = this;

            this._zone.onStable.asObservable().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1)).subscribe(function () {
              _this112._init();

              _this112.show();
            });
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            if ('autohide' in changes) {
              this._clearTimeout();

              this._init();
            }
          }
          /**
           * Triggers toast closing programmatically.
           *
           * The returned observable will emit and be completed once the closing transition has finished.
           * If the animations are turned off this happens synchronously.
           *
           * Alternatively you could listen or subscribe to the `(hidden)` output
           *
           * @since 8.0.0
           */

        }, {
          key: "hide",
          value: function hide() {
            var _this113 = this;

            this._clearTimeout();

            var transition = ngbRunTransition(this._zone, this._element.nativeElement, ngbToastFadeOutTransition, {
              animation: this.animation,
              runningTransition: 'stop'
            });
            transition.subscribe(function () {
              _this113.hidden.emit();
            });
            return transition;
          }
          /**
           * Triggers toast opening programmatically.
           *
           * The returned observable will emit and be completed once the opening transition has finished.
           * If the animations are turned off this happens synchronously.
           *
           * Alternatively you could listen or subscribe to the `(shown)` output
           *
           * @since 8.0.0
           */

        }, {
          key: "show",
          value: function show() {
            var _this114 = this;

            var transition = ngbRunTransition(this._zone, this._element.nativeElement, ngbToastFadeInTransition, {
              animation: this.animation,
              runningTransition: 'continue'
            });
            transition.subscribe(function () {
              _this114.shown.emit();
            });
            return transition;
          }
        }, {
          key: "_init",
          value: function _init() {
            var _this115 = this;

            if (this.autohide && !this._timeoutID) {
              this._timeoutID = setTimeout(function () {
                return _this115.hide();
              }, this.delay);
            }
          }
        }, {
          key: "_clearTimeout",
          value: function _clearTimeout() {
            if (this._timeoutID) {
              clearTimeout(this._timeoutID);
              this._timeoutID = null;
            }
          }
        }]);

        return NgbToast;
      }();

      NgbToast.ɵfac = function NgbToast_Factory(t) {
        return new (t || NgbToast)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinjectAttribute"]('aria-live'), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbToastConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]));
      };

      NgbToast.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: NgbToast,
        selectors: [["ngb-toast"]],
        contentQueries: function NgbToast_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, NgbToastHeader, 3, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.contentHeaderTpl = _t.first);
          }
        },
        hostAttrs: ["role", "alert", "aria-atomic", "true", 1, "toast"],
        hostVars: 3,
        hostBindings: function NgbToast_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-live", ctx.ariaLive);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("fade", ctx.animation);
          }
        },
        inputs: {
          delay: "delay",
          autohide: "autohide",
          animation: "animation",
          header: "header"
        },
        outputs: {
          shown: "shown",
          hidden: "hidden"
        },
        exportAs: ["ngbToast"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]],
        ngContentSelectors: _c3,
        decls: 5,
        vars: 1,
        consts: function consts() {
          var i18n_85;

          if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
            var MSG_EXTERNAL_ngb_toast_close_aria$$FESM2015_NG_BOOTSTRAP_JS__86 = goog.getMsg("Close");
            i18n_85 = MSG_EXTERNAL_ngb_toast_close_aria$$FESM2015_NG_BOOTSTRAP_JS__86;
          } else {
            i18n_85 = $localize(_templateObject36 || (_templateObject36 = _taggedTemplateLiteral([":@@ngb.toast.close-aria\u241Ff4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8\u241F7819314041543176992:Close"])));
          }

          return [["headerTpl", ""], [3, "ngIf"], [1, "toast-body"], [1, "mr-auto"], [1, "toast-header"], [3, "ngTemplateOutlet"], ["type", "button", "aria-label", i18n_85, 1, "close", 3, "click"], ["aria-hidden", "true"]];
        },
        template: function NgbToast_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbToast_ng_template_0_Template, 2, 1, "ng-template", null, 0, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbToast_ng_template_2_Template, 5, 1, "ng-template", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "div", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](4);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.contentHeaderTpl || ctx.header);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"]],
        styles: [".ngb-toasts{position:fixed;top:0;right:0;margin:.5em;z-index:1200}ngb-toast{display:block}ngb-toast .toast-header .close{margin-left:auto;margin-bottom:.25rem}"],
        encapsulation: 2
      });

      NgbToast.ctorParameters = function () {
        return [{
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Attribute"],
            args: ['aria-live']
          }]
        }, {
          type: NgbToastConfig
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }];
      };

      NgbToast.propDecorators = {
        animation: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        delay: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        autohide: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        header: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        contentHeaderTpl: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [NgbToastHeader, {
            read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"],
            "static": true
          }]
        }],
        shown: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        hidden: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbToast, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'ngb-toast',
            exportAs: 'ngbToast',
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            host: {
              'role': 'alert',
              '[attr.aria-live]': 'ariaLive',
              'aria-atomic': 'true',
              'class': 'toast',
              '[class.fade]': 'animation'
            },
            template: "\n    <ng-template #headerTpl>\n      <strong class=\"mr-auto\">{{header}}</strong>\n    </ng-template>\n    <ng-template [ngIf]=\"contentHeaderTpl || header\">\n      <div class=\"toast-header\">\n        <ng-template [ngTemplateOutlet]=\"contentHeaderTpl || headerTpl\"></ng-template>\n        <button type=\"button\" class=\"close\" aria-label=\"Close\" i18n-aria-label=\"@@ngb.toast.close-aria\" (click)=\"hide()\">\n          <span aria-hidden=\"true\">&times;</span>\n        </button>\n      </div>\n    </ng-template>\n    <div class=\"toast-body\">\n      <ng-content></ng-content>\n    </div>\n  ",
            styles: [".ngb-toasts{position:fixed;top:0;right:0;margin:.5em;z-index:1200}ngb-toast{display:block}ngb-toast .toast-header .close{margin-left:auto;margin-bottom:.25rem}"]
          }]
        }], function () {
          return [{
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Attribute"],
              args: ['aria-live']
            }]
          }, {
            type: NgbToastConfig
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }];
        }, {
          contentHeaderTpl: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [NgbToastHeader, {
              read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"],
              "static": true
            }]
          }],
          shown: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          hidden: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          delay: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          autohide: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          animation: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          header: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var NgbToastModule = function NgbToastModule() {
        _classCallCheck2(this, NgbToastModule);
      };

      NgbToastModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NgbToastModule
      });
      NgbToastModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NgbToastModule_Factory(t) {
          return new (t || NgbToastModule)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbToastModule, {
          declarations: function declarations() {
            return [NgbToast, NgbToastHeader];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]];
          },
          exports: function exports() {
            return [NgbToast, NgbToastHeader];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbToastModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            declarations: [NgbToast, NgbToastHeader],
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]],
            exports: [NgbToast, NgbToastHeader]
          }]
        }], null, null);
      })();
      /**
       * A configuration service for the [`NgbTooltip`](#/components/tooltip/api#NgbTooltip) component.
       *
       * You can inject this service, typically in your root component, and customize the values of its properties in
       * order to provide default values for all the tooltips used in the application.
       */


      var NgbTooltipConfig = /*#__PURE__*/function () {
        function NgbTooltipConfig(_ngbConfig) {
          _classCallCheck2(this, NgbTooltipConfig);

          this._ngbConfig = _ngbConfig;
          this.autoClose = true;
          this.placement = 'auto';
          this.triggers = 'hover focus';
          this.disableTooltip = false;
          this.openDelay = 0;
          this.closeDelay = 0;
        }

        _createClass2(NgbTooltipConfig, [{
          key: "animation",
          get: function get() {
            return this._animation === undefined ? this._ngbConfig.animation : this._animation;
          },
          set: function set(animation) {
            this._animation = animation;
          }
        }]);

        return NgbTooltipConfig;
      }();

      NgbTooltipConfig.ɵfac = function NgbTooltipConfig_Factory(t) {
        return new (t || NgbTooltipConfig)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig));
      };

      NgbTooltipConfig.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function NgbTooltipConfig_Factory() {
          return new NgbTooltipConfig(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgbConfig));
        },
        token: NgbTooltipConfig,
        providedIn: "root"
      });

      NgbTooltipConfig.ctorParameters = function () {
        return [{
          type: NgbConfig
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTooltipConfig, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: NgbConfig
          }];
        }, null);
      })();

      var nextId = 0;

      var NgbTooltipWindow = function NgbTooltipWindow() {
        _classCallCheck2(this, NgbTooltipWindow);
      };

      NgbTooltipWindow.ɵfac = function NgbTooltipWindow_Factory(t) {
        return new (t || NgbTooltipWindow)();
      };

      NgbTooltipWindow.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: NgbTooltipWindow,
        selectors: [["ngb-tooltip-window"]],
        hostAttrs: ["role", "tooltip"],
        hostVars: 5,
        hostBindings: function NgbTooltipWindow_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("id", ctx.id);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"]("tooltip" + (ctx.tooltipClass ? " " + ctx.tooltipClass : ""));

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("fade", ctx.animation);
          }
        },
        inputs: {
          animation: "animation",
          id: "id",
          tooltipClass: "tooltipClass"
        },
        ngContentSelectors: _c3,
        decls: 3,
        vars: 0,
        consts: [[1, "arrow"], [1, "tooltip-inner"]],
        template: function NgbTooltipWindow_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "div", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
          }
        },
        styles: ["ngb-tooltip-window{pointer-events:none}ngb-tooltip-window .tooltip-inner{pointer-events:auto}ngb-tooltip-window.bs-tooltip-bottom .arrow,ngb-tooltip-window.bs-tooltip-top .arrow{left:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-bottom-left .arrow,ngb-tooltip-window.bs-tooltip-top-left .arrow{left:1em}ngb-tooltip-window.bs-tooltip-bottom-right .arrow,ngb-tooltip-window.bs-tooltip-top-right .arrow{left:auto;right:.8rem}ngb-tooltip-window.bs-tooltip-left .arrow,ngb-tooltip-window.bs-tooltip-right .arrow{top:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-left-top .arrow,ngb-tooltip-window.bs-tooltip-right-top .arrow{top:.4rem}ngb-tooltip-window.bs-tooltip-left-bottom .arrow,ngb-tooltip-window.bs-tooltip-right-bottom .arrow{top:auto;bottom:.4rem}"],
        encapsulation: 2,
        changeDetection: 0
      });
      NgbTooltipWindow.propDecorators = {
        animation: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        id: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        tooltipClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTooltipWindow, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'ngb-tooltip-window',
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            host: {
              '[class]': '"tooltip" + (tooltipClass ? " " + tooltipClass : "")',
              '[class.fade]': 'animation',
              'role': 'tooltip',
              '[id]': 'id'
            },
            template: "<div class=\"arrow\"></div><div class=\"tooltip-inner\"><ng-content></ng-content></div>",
            styles: ["ngb-tooltip-window{pointer-events:none}ngb-tooltip-window .tooltip-inner{pointer-events:auto}ngb-tooltip-window.bs-tooltip-bottom .arrow,ngb-tooltip-window.bs-tooltip-top .arrow{left:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-bottom-left .arrow,ngb-tooltip-window.bs-tooltip-top-left .arrow{left:1em}ngb-tooltip-window.bs-tooltip-bottom-right .arrow,ngb-tooltip-window.bs-tooltip-top-right .arrow{left:auto;right:.8rem}ngb-tooltip-window.bs-tooltip-left .arrow,ngb-tooltip-window.bs-tooltip-right .arrow{top:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-left-top .arrow,ngb-tooltip-window.bs-tooltip-right-top .arrow{top:.4rem}ngb-tooltip-window.bs-tooltip-left-bottom .arrow,ngb-tooltip-window.bs-tooltip-right-bottom .arrow{top:auto;bottom:.4rem}"]
          }]
        }], null, {
          animation: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          id: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          tooltipClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * A lightweight and extensible directive for fancy tooltip creation.
       */


      var NgbTooltip = /*#__PURE__*/function () {
        function NgbTooltip(_elementRef, _renderer, injector, componentFactoryResolver, viewContainerRef, config, _ngZone, _document, _changeDetector, applicationRef) {
          var _this116 = this;

          _classCallCheck2(this, NgbTooltip);

          this._elementRef = _elementRef;
          this._renderer = _renderer;
          this._ngZone = _ngZone;
          this._document = _document;
          this._changeDetector = _changeDetector;
          /**
           * An event emitted when the tooltip opening animation has finished. Contains no payload.
           */

          this.shown = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * An event emitted when the tooltip closing animation has finished. Contains no payload.
           */

          this.hidden = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this._ngbTooltipWindowId = "ngb-tooltip-".concat(nextId++);
          this._windowRef = null;
          this.animation = config.animation;
          this.autoClose = config.autoClose;
          this.placement = config.placement;
          this.triggers = config.triggers;
          this.container = config.container;
          this.disableTooltip = config.disableTooltip;
          this.tooltipClass = config.tooltipClass;
          this.openDelay = config.openDelay;
          this.closeDelay = config.closeDelay;
          this._popupService = new PopupService(NgbTooltipWindow, injector, viewContainerRef, _renderer, this._ngZone, componentFactoryResolver, applicationRef);
          this._zoneSubscription = _ngZone.onStable.subscribe(function () {
            if (_this116._windowRef) {
              positionElements(_this116._elementRef.nativeElement, _this116._windowRef.location.nativeElement, _this116.placement, _this116.container === 'body', 'bs-tooltip');
            }
          });
        }
        /**
         * The string content or a `TemplateRef` for the content to be displayed in the tooltip.
         *
         * If the content if falsy, the tooltip won't open.
         */


        _createClass2(NgbTooltip, [{
          key: "ngbTooltip",
          get: function get() {
            return this._ngbTooltip;
          }
          /**
           * Opens the tooltip.
           *
           * This is considered to be a "manual" triggering.
           * The `context` is an optional value to be injected into the tooltip template when it is created.
           */
          ,
          set: function set(value) {
            this._ngbTooltip = value;

            if (!value && this._windowRef) {
              this.close();
            }
          }
        }, {
          key: "open",
          value: function open(context) {
            var _this117 = this;

            if (!this._windowRef && this._ngbTooltip && !this.disableTooltip) {
              var _this$_popupService$o2 = this._popupService.open(this._ngbTooltip, context, this.animation),
                  windowRef = _this$_popupService$o2.windowRef,
                  transition$ = _this$_popupService$o2.transition$;

              this._windowRef = windowRef;
              this._windowRef.instance.animation = this.animation;
              this._windowRef.instance.tooltipClass = this.tooltipClass;
              this._windowRef.instance.id = this._ngbTooltipWindowId;

              this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ngbTooltipWindowId);

              if (this.container === 'body') {
                this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement);
              } // We need to detect changes, because we don't know where .open() might be called from.
              // Ex. opening tooltip from one of lifecycle hooks that run after the CD
              // (say from ngAfterViewInit) will result in 'ExpressionHasChanged' exception


              this._windowRef.changeDetectorRef.detectChanges(); // We need to mark for check, because tooltip won't work inside the OnPush component.
              // Ex. when we use expression like `{{ tooltip.isOpen() : 'opened' : 'closed' }}`
              // inside the template of an OnPush component and we change the tooltip from
              // open -> closed, the expression in question won't be updated unless we explicitly
              // mark the parent component to be checked.


              this._windowRef.changeDetectorRef.markForCheck();

              ngbAutoClose(this._ngZone, this._document, this.autoClose, function () {
                return _this117.close();
              }, this.hidden, [this._windowRef.location.nativeElement]);
              transition$.subscribe(function () {
                return _this117.shown.emit();
              });
            }
          }
          /**
           * Closes the tooltip.
           *
           * This is considered to be a "manual" triggering of the tooltip.
           */

        }, {
          key: "close",
          value: function close() {
            var _this118 = this;

            if (this._windowRef != null) {
              this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby');

              this._popupService.close(this.animation).subscribe(function () {
                _this118._windowRef = null;

                _this118.hidden.emit();

                _this118._changeDetector.markForCheck();
              });
            }
          }
          /**
           * Toggles the tooltip.
           *
           * This is considered to be a "manual" triggering of the tooltip.
           */

        }, {
          key: "toggle",
          value: function toggle() {
            if (this._windowRef) {
              this.close();
            } else {
              this.open();
            }
          }
          /**
           * Returns `true`, if the popover is currently shown.
           */

        }, {
          key: "isOpen",
          value: function isOpen() {
            return this._windowRef != null;
          }
        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            this._unregisterListenersFn = listenToTriggers(this._renderer, this._elementRef.nativeElement, this.triggers, this.isOpen.bind(this), this.open.bind(this), this.close.bind(this), +this.openDelay, +this.closeDelay);
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(_ref54) {
            var tooltipClass = _ref54.tooltipClass;

            if (tooltipClass && this.isOpen()) {
              this._windowRef.instance.tooltipClass = tooltipClass.currentValue;
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.close(); // This check is needed as it might happen that ngOnDestroy is called before ngOnInit
            // under certain conditions, see: https://github.com/ng-bootstrap/ng-bootstrap/issues/2199

            if (this._unregisterListenersFn) {
              this._unregisterListenersFn();
            }

            this._zoneSubscription.unsubscribe();
          }
        }]);

        return NgbTooltip;
      }();

      NgbTooltip.ɵfac = function NgbTooltip_Factory(t) {
        return new (t || NgbTooltip)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbTooltipConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"]));
      };

      NgbTooltip.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbTooltip,
        selectors: [["", "ngbTooltip", ""]],
        inputs: {
          animation: "animation",
          autoClose: "autoClose",
          placement: "placement",
          triggers: "triggers",
          container: "container",
          disableTooltip: "disableTooltip",
          tooltipClass: "tooltipClass",
          openDelay: "openDelay",
          closeDelay: "closeDelay",
          ngbTooltip: "ngbTooltip"
        },
        outputs: {
          shown: "shown",
          hidden: "hidden"
        },
        exportAs: ["ngbTooltip"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
      });

      NgbTooltip.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
        }, {
          type: NgbTooltipConfig
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"]
        }];
      };

      NgbTooltip.propDecorators = {
        animation: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        autoClose: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        placement: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        triggers: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        container: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        disableTooltip: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        tooltipClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        openDelay: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        closeDelay: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        shown: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        hidden: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        ngbTooltip: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTooltip, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngbTooltip]',
            exportAs: 'ngbTooltip'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
          }, {
            type: NgbTooltipConfig
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"]
          }];
        }, {
          shown: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          hidden: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          animation: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          autoClose: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          placement: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          triggers: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          container: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          disableTooltip: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          tooltipClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          openDelay: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          closeDelay: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          ngbTooltip: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var NgbTooltipModule = function NgbTooltipModule() {
        _classCallCheck2(this, NgbTooltipModule);
      };

      NgbTooltipModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NgbTooltipModule
      });
      NgbTooltipModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NgbTooltipModule_Factory(t) {
          return new (t || NgbTooltipModule)();
        }
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbTooltipModule, {
          declarations: [NgbTooltip, NgbTooltipWindow],
          exports: [NgbTooltip]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTooltipModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            declarations: [NgbTooltip, NgbTooltipWindow],
            exports: [NgbTooltip],
            entryComponents: [NgbTooltipWindow]
          }]
        }], null, null);
      })();
      /**
       * A component that helps with text highlighting.
       *
       * If splits the `result` text into parts that contain the searched `term` and generates the HTML markup to simplify
       * highlighting:
       *
       * Ex. `result="Alaska"` and `term="as"` will produce `Al<span class="ngb-highlight">as</span>ka`.
       */


      var NgbHighlight = /*#__PURE__*/function () {
        function NgbHighlight() {
          _classCallCheck2(this, NgbHighlight);

          /**
           * The CSS class for `<span>` elements wrapping the `term` inside the `result`.
           */
          this.highlightClass = 'ngb-highlight';
          /**
           * Boolean option to determine if the highlighting should be sensitive to accents or not.
           *
           * This feature is only available for browsers that implement the `String.normalize` function
           * (typically not Internet Explorer).
           * If you want to use this feature in a browser that does not implement `String.normalize`,
           * you will have to include a polyfill in your application (`unorm` for example).
           *
           * @since 9.1.0
           */

          this.accentSensitive = true;
        }

        _createClass2(NgbHighlight, [{
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            var _this119 = this;

            if (!this.accentSensitive && !String.prototype.normalize) {
              console.warn('The `accentSensitive` input in `ngb-highlight` cannot be set to `false` in a browser ' + 'that does not implement the `String.normalize` function. ' + 'You will have to include a polyfill in your application to use this feature in the current browser.');
              this.accentSensitive = true;
            }

            var result = toString(this.result);
            var terms = Array.isArray(this.term) ? this.term : [this.term];

            var prepareTerm = function prepareTerm(term) {
              return _this119.accentSensitive ? term : removeAccents(term);
            };

            var escapedTerms = terms.map(function (term) {
              return regExpEscape(prepareTerm(toString(term)));
            }).filter(function (term) {
              return term;
            });
            var toSplit = this.accentSensitive ? result : removeAccents(result);
            var parts = escapedTerms.length ? toSplit.split(new RegExp("(".concat(escapedTerms.join('|'), ")"), 'gmi')) : [result];

            if (this.accentSensitive) {
              this.parts = parts;
            } else {
              var offset = 0;
              this.parts = parts.map(function (part) {
                return result.substring(offset, offset += part.length);
              });
            }
          }
        }]);

        return NgbHighlight;
      }();

      NgbHighlight.ɵfac = function NgbHighlight_Factory(t) {
        return new (t || NgbHighlight)();
      };

      NgbHighlight.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: NgbHighlight,
        selectors: [["ngb-highlight"]],
        inputs: {
          highlightClass: "highlightClass",
          accentSensitive: "accentSensitive",
          result: "result",
          term: "term"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]],
        decls: 1,
        vars: 1,
        consts: [["ngFor", "", 3, "ngForOf"], [3, "class", 4, "ngIf", "ngIfElse"], ["even", ""]],
        template: function NgbHighlight_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbHighlight_ng_template_0_Template, 3, 2, "ng-template", 0);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.parts);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"]],
        styles: [".ngb-highlight{font-weight:700}"],
        encapsulation: 2,
        changeDetection: 0
      });
      NgbHighlight.propDecorators = {
        highlightClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        result: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        term: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        accentSensitive: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbHighlight, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'ngb-highlight',
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            template: "<ng-template ngFor [ngForOf]=\"parts\" let-part let-isOdd=\"odd\">" + "<span *ngIf=\"isOdd; else even\" [class]=\"highlightClass\">{{part}}</span><ng-template #even>{{part}}</ng-template>" + "</ng-template>",
            styles: [".ngb-highlight{font-weight:700}"]
          }]
        }], function () {
          return [];
        }, {
          highlightClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          accentSensitive: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          result: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          term: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var NgbTypeaheadWindow = /*#__PURE__*/function () {
        function NgbTypeaheadWindow() {
          _classCallCheck2(this, NgbTypeaheadWindow);

          this.activeIdx = 0;
          /**
           * Flag indicating if the first row should be active initially
           */

          this.focusFirst = true;
          /**
           * A function used to format a given result before display. This function should return a formatted string without any
           * HTML markup
           */

          this.formatter = toString;
          /**
           * Event raised when user selects a particular result row
           */

          this.selectEvent = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.activeChangeEvent = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        }

        _createClass2(NgbTypeaheadWindow, [{
          key: "hasActive",
          value: function hasActive() {
            return this.activeIdx > -1 && this.activeIdx < this.results.length;
          }
        }, {
          key: "getActive",
          value: function getActive() {
            return this.results[this.activeIdx];
          }
        }, {
          key: "markActive",
          value: function markActive(activeIdx) {
            this.activeIdx = activeIdx;

            this._activeChanged();
          }
        }, {
          key: "next",
          value: function next() {
            if (this.activeIdx === this.results.length - 1) {
              this.activeIdx = this.focusFirst ? (this.activeIdx + 1) % this.results.length : -1;
            } else {
              this.activeIdx++;
            }

            this._activeChanged();
          }
        }, {
          key: "prev",
          value: function prev() {
            if (this.activeIdx < 0) {
              this.activeIdx = this.results.length - 1;
            } else if (this.activeIdx === 0) {
              this.activeIdx = this.focusFirst ? this.results.length - 1 : -1;
            } else {
              this.activeIdx--;
            }

            this._activeChanged();
          }
        }, {
          key: "resetActive",
          value: function resetActive() {
            this.activeIdx = this.focusFirst ? 0 : -1;

            this._activeChanged();
          }
        }, {
          key: "select",
          value: function select(item) {
            this.selectEvent.emit(item);
          }
        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            this.resetActive();
          }
        }, {
          key: "_activeChanged",
          value: function _activeChanged() {
            this.activeChangeEvent.emit(this.activeIdx >= 0 ? this.id + '-' + this.activeIdx : undefined);
          }
        }]);

        return NgbTypeaheadWindow;
      }();

      NgbTypeaheadWindow.ɵfac = function NgbTypeaheadWindow_Factory(t) {
        return new (t || NgbTypeaheadWindow)();
      };

      NgbTypeaheadWindow.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: NgbTypeaheadWindow,
        selectors: [["ngb-typeahead-window"]],
        hostAttrs: ["role", "listbox"],
        hostVars: 3,
        hostBindings: function NgbTypeaheadWindow_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("mousedown", function NgbTypeaheadWindow_mousedown_HostBindingHandler($event) {
              return $event.preventDefault();
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("id", ctx.id);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"]("dropdown-menu show" + (ctx.popupClass ? " " + ctx.popupClass : ""));
          }
        },
        inputs: {
          focusFirst: "focusFirst",
          formatter: "formatter",
          id: "id",
          results: "results",
          term: "term",
          resultTemplate: "resultTemplate",
          popupClass: "popupClass"
        },
        outputs: {
          selectEvent: "select",
          activeChangeEvent: "activeChange"
        },
        exportAs: ["ngbTypeaheadWindow"],
        decls: 3,
        vars: 1,
        consts: [["rt", ""], ["ngFor", "", 3, "ngForOf"], [3, "result", "term"], ["type", "button", "role", "option", 1, "dropdown-item", 3, "id", "mouseenter", "click"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"]],
        template: function NgbTypeaheadWindow_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgbTypeaheadWindow_ng_template_0_Template, 1, 2, "ng-template", null, 0, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgbTypeaheadWindow_ng_template_2_Template, 2, 9, "ng-template", 1);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.results);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], NgbHighlight, _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"]],
        encapsulation: 2
      });
      NgbTypeaheadWindow.propDecorators = {
        id: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        focusFirst: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        results: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        term: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        formatter: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        resultTemplate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        popupClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        selectEvent: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
          args: ['select']
        }],
        activeChangeEvent: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
          args: ['activeChange']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTypeaheadWindow, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'ngb-typeahead-window',
            exportAs: 'ngbTypeaheadWindow',
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            host: {
              '(mousedown)': '$event.preventDefault()',
              '[class]': '"dropdown-menu show" + (popupClass ? " " + popupClass : "")',
              'role': 'listbox',
              '[id]': 'id'
            },
            template: "\n    <ng-template #rt let-result=\"result\" let-term=\"term\" let-formatter=\"formatter\">\n      <ngb-highlight [result]=\"formatter(result)\" [term]=\"term\"></ngb-highlight>\n    </ng-template>\n    <ng-template ngFor [ngForOf]=\"results\" let-result let-idx=\"index\">\n      <button type=\"button\" class=\"dropdown-item\" role=\"option\"\n        [id]=\"id + '-' + idx\"\n        [class.active]=\"idx === activeIdx\"\n        (mouseenter)=\"markActive(idx)\"\n        (click)=\"select(result)\">\n          <ng-template [ngTemplateOutlet]=\"resultTemplate || rt\"\n          [ngTemplateOutletContext]=\"{result: result, term: term, formatter: formatter}\"></ng-template>\n      </button>\n    </ng-template>\n  "
          }]
        }], function () {
          return [];
        }, {
          focusFirst: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          formatter: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          selectEvent: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
            args: ['select']
          }],
          activeChangeEvent: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
            args: ['activeChange']
          }],
          id: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          results: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          term: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          resultTemplate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          popupClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var ARIA_LIVE_DELAY = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('live announcer delay', {
        providedIn: 'root',
        factory: ARIA_LIVE_DELAY_FACTORY
      });

      function ARIA_LIVE_DELAY_FACTORY() {
        return 100;
      }

      function getLiveElement(document) {
        var lazyCreate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
        var element = document.body.querySelector('#ngb-live');

        if (element == null && lazyCreate) {
          element = document.createElement('div');
          element.setAttribute('id', 'ngb-live');
          element.setAttribute('aria-live', 'polite');
          element.setAttribute('aria-atomic', 'true');
          element.classList.add('sr-only');
          document.body.appendChild(element);
        }

        return element;
      }

      var Live = /*#__PURE__*/function () {
        function Live(_document, _delay) {
          _classCallCheck2(this, Live);

          this._document = _document;
          this._delay = _delay;
        }

        _createClass2(Live, [{
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            var element = getLiveElement(this._document);

            if (element) {
              // if exists, it will always be attached to the <body>
              element.parentElement.removeChild(element);
            }
          }
        }, {
          key: "say",
          value: function say(message) {
            var element = getLiveElement(this._document, true);
            var delay = this._delay;

            if (element != null) {
              element.textContent = '';

              var setText = function setText() {
                return element.textContent = message;
              };

              if (delay === null) {
                setText();
              } else {
                setTimeout(setText, delay);
              }
            }
          }
        }]);

        return Live;
      }();

      Live.ɵfac = function Live_Factory(t) {
        return new (t || Live)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](ARIA_LIVE_DELAY));
      };

      Live.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function Live_Factory() {
          return new Live(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](ARIA_LIVE_DELAY));
        },
        token: Live,
        providedIn: "root"
      });

      Live.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [ARIA_LIVE_DELAY]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](Live, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [ARIA_LIVE_DELAY]
            }]
          }];
        }, null);
      })();
      /**
       * A configuration service for the [`NgbTypeahead`](#/components/typeahead/api#NgbTypeahead) component.
       *
       * You can inject this service, typically in your root component, and customize the values of its properties in
       * order to provide default values for all the typeaheads used in the application.
       */


      var NgbTypeaheadConfig = function NgbTypeaheadConfig() {
        _classCallCheck2(this, NgbTypeaheadConfig);

        this.editable = true;
        this.focusFirst = true;
        this.showHint = false;
        this.placement = ['bottom-left', 'bottom-right', 'top-left', 'top-right'];
      };

      NgbTypeaheadConfig.ɵfac = function NgbTypeaheadConfig_Factory(t) {
        return new (t || NgbTypeaheadConfig)();
      };

      NgbTypeaheadConfig.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function NgbTypeaheadConfig_Factory() {
          return new NgbTypeaheadConfig();
        },
        token: NgbTypeaheadConfig,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTypeaheadConfig, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [];
        }, null);
      })();

      var nextWindowId = 0;
      /**
       * A directive providing a simple way of creating powerful typeaheads from any text input.
       */

      var NgbTypeahead = /*#__PURE__*/function () {
        function NgbTypeahead(_elementRef, viewContainerRef, _renderer, injector, componentFactoryResolver, config, ngZone, _live, _document, _ngZone, _changeDetector, applicationRef) {
          var _this120 = this;

          _classCallCheck2(this, NgbTypeahead);

          this._elementRef = _elementRef;
          this._renderer = _renderer;
          this._live = _live;
          this._document = _document;
          this._ngZone = _ngZone;
          this._changeDetector = _changeDetector;
          this._subscription = null;
          this._closed$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          this._inputValueBackup = null;
          this._windowRef = null;
          /**
           * The value for the `autocomplete` attribute for the `<input>` element.
           *
           * Defaults to `"off"` to disable the native browser autocomplete, but you can override it if necessary.
           *
           * @since 2.1.0
           */

          this.autocomplete = 'off';
          /**
           * The preferred placement of the typeahead.
           *
           * Possible values are `"top"`, `"top-left"`, `"top-right"`, `"bottom"`, `"bottom-left"`,
           * `"bottom-right"`, `"left"`, `"left-top"`, `"left-bottom"`, `"right"`, `"right-top"`,
           * `"right-bottom"`
           *
           * Accepts an array of strings or a string with space separated possible values.
           *
           * The default order of preference is `"bottom-left bottom-right top-left top-right"`
           *
           * Please see the [positioning overview](#/positioning) for more details.
           */

          this.placement = 'bottom-left';
          /**
           * An event emitted right before an item is selected from the result list.
           *
           * Event payload is of type [`NgbTypeaheadSelectItemEvent`](#/components/typeahead/api#NgbTypeaheadSelectItemEvent).
           */

          this.selectItem = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.activeDescendant = null;
          this.popupId = "ngb-typeahead-".concat(nextWindowId++);

          this._onTouched = function () {};

          this._onChange = function (_) {};

          this.container = config.container;
          this.editable = config.editable;
          this.focusFirst = config.focusFirst;
          this.showHint = config.showHint;
          this.placement = config.placement;
          this._valueChanges = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(_elementRef.nativeElement, 'input').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function ($event) {
            return $event.target.value;
          }));
          this._resubscribeTypeahead = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](null);
          this._popupService = new PopupService(NgbTypeaheadWindow, injector, viewContainerRef, _renderer, this._ngZone, componentFactoryResolver, applicationRef);
          this._zoneSubscription = ngZone.onStable.subscribe(function () {
            if (_this120.isPopupOpen()) {
              positionElements(_this120._elementRef.nativeElement, _this120._windowRef.location.nativeElement, _this120.placement, _this120.container === 'body');
            }
          });
        }

        _createClass2(NgbTypeahead, [{
          key: "ngOnInit",
          value: function ngOnInit() {
            this._subscribeToUserInput();
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(_ref55) {
            var ngbTypeahead = _ref55.ngbTypeahead;

            if (ngbTypeahead && !ngbTypeahead.firstChange) {
              this._unsubscribeFromUserInput();

              this._subscribeToUserInput();
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._closePopup();

            this._unsubscribeFromUserInput();

            this._zoneSubscription.unsubscribe();
          }
        }, {
          key: "registerOnChange",
          value: function registerOnChange(fn) {
            this._onChange = fn;
          }
        }, {
          key: "registerOnTouched",
          value: function registerOnTouched(fn) {
            this._onTouched = fn;
          }
        }, {
          key: "writeValue",
          value: function writeValue(value) {
            this._writeInputValue(this._formatItemForInput(value));

            if (this.showHint) {
              this._inputValueBackup = value;
            }
          }
        }, {
          key: "setDisabledState",
          value: function setDisabledState(isDisabled) {
            this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
          }
          /**
           * Dismisses typeahead popup window
           */

        }, {
          key: "dismissPopup",
          value: function dismissPopup() {
            if (this.isPopupOpen()) {
              this._resubscribeTypeahead.next(null);

              this._closePopup();

              if (this.showHint && this._inputValueBackup !== null) {
                this._writeInputValue(this._inputValueBackup);
              }

              this._changeDetector.markForCheck();
            }
          }
          /**
           * Returns true if the typeahead popup window is displayed
           */

        }, {
          key: "isPopupOpen",
          value: function isPopupOpen() {
            return this._windowRef != null;
          }
        }, {
          key: "handleBlur",
          value: function handleBlur() {
            this._resubscribeTypeahead.next(null);

            this._onTouched();
          }
        }, {
          key: "handleKeyDown",
          value: function handleKeyDown(event) {
            if (!this.isPopupOpen()) {
              return;
            } // tslint:disable-next-line:deprecation


            switch (event.which) {
              case Key.ArrowDown:
                event.preventDefault();

                this._windowRef.instance.next();

                this._showHint();

                break;

              case Key.ArrowUp:
                event.preventDefault();

                this._windowRef.instance.prev();

                this._showHint();

                break;

              case Key.Enter:
              case Key.Tab:
                var result = this._windowRef.instance.getActive();

                if (isDefined(result)) {
                  event.preventDefault();
                  event.stopPropagation();

                  this._selectResult(result);
                }

                this._closePopup();

                break;
            }
          }
        }, {
          key: "_openPopup",
          value: function _openPopup() {
            var _this121 = this;

            if (!this.isPopupOpen()) {
              this._inputValueBackup = this._elementRef.nativeElement.value;

              var _this$_popupService$o3 = this._popupService.open(),
                  windowRef = _this$_popupService$o3.windowRef;

              this._windowRef = windowRef;
              this._windowRef.instance.id = this.popupId;

              this._windowRef.instance.selectEvent.subscribe(function (result) {
                return _this121._selectResultClosePopup(result);
              });

              this._windowRef.instance.activeChangeEvent.subscribe(function (activeId) {
                return _this121.activeDescendant = activeId;
              });

              this._windowRef.instance.popupClass = this.popupClass;

              if (this.container === 'body') {
                this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement);
              }

              this._changeDetector.markForCheck();

              ngbAutoClose(this._ngZone, this._document, 'outside', function () {
                return _this121.dismissPopup();
              }, this._closed$, [this._elementRef.nativeElement, this._windowRef.location.nativeElement]);
            }
          }
        }, {
          key: "_closePopup",
          value: function _closePopup() {
            var _this122 = this;

            this._popupService.close().subscribe(function () {
              _this122._closed$.next();

              _this122._windowRef = null;
              _this122.activeDescendant = null;
            });
          }
        }, {
          key: "_selectResult",
          value: function _selectResult(result) {
            var defaultPrevented = false;
            this.selectItem.emit({
              item: result,
              preventDefault: function preventDefault() {
                defaultPrevented = true;
              }
            });

            this._resubscribeTypeahead.next(null);

            if (!defaultPrevented) {
              this.writeValue(result);

              this._onChange(result);
            }
          }
        }, {
          key: "_selectResultClosePopup",
          value: function _selectResultClosePopup(result) {
            this._selectResult(result);

            this._closePopup();
          }
        }, {
          key: "_showHint",
          value: function _showHint() {
            var _a;

            if (this.showHint && ((_a = this._windowRef) === null || _a === void 0 ? void 0 : _a.instance.hasActive()) && this._inputValueBackup != null) {
              var userInputLowerCase = this._inputValueBackup.toLowerCase();

              var formattedVal = this._formatItemForInput(this._windowRef.instance.getActive());

              if (userInputLowerCase === formattedVal.substr(0, this._inputValueBackup.length).toLowerCase()) {
                this._writeInputValue(this._inputValueBackup + formattedVal.substr(this._inputValueBackup.length));

                this._elementRef.nativeElement['setSelectionRange'].apply(this._elementRef.nativeElement, [this._inputValueBackup.length, formattedVal.length]);
              } else {
                this._writeInputValue(formattedVal);
              }
            }
          }
        }, {
          key: "_formatItemForInput",
          value: function _formatItemForInput(item) {
            return item != null && this.inputFormatter ? this.inputFormatter(item) : toString(item);
          }
        }, {
          key: "_writeInputValue",
          value: function _writeInputValue(value) {
            this._renderer.setProperty(this._elementRef.nativeElement, 'value', toString(value));
          }
        }, {
          key: "_subscribeToUserInput",
          value: function _subscribeToUserInput() {
            var _this123 = this;

            var results$ = this._valueChanges.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (value) {
              _this123._inputValueBackup = _this123.showHint ? value : null;

              _this123._onChange(_this123.editable ? value : undefined);
            }), this.ngbTypeahead ? this.ngbTypeahead : function () {
              return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])([]);
            });

            this._subscription = this._resubscribeTypeahead.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(function () {
              return results$;
            })).subscribe(function (results) {
              if (!results || results.length === 0) {
                _this123._closePopup();
              } else {
                _this123._openPopup();

                _this123._windowRef.instance.focusFirst = _this123.focusFirst;
                _this123._windowRef.instance.results = results;
                _this123._windowRef.instance.term = _this123._elementRef.nativeElement.value;

                if (_this123.resultFormatter) {
                  _this123._windowRef.instance.formatter = _this123.resultFormatter;
                }

                if (_this123.resultTemplate) {
                  _this123._windowRef.instance.resultTemplate = _this123.resultTemplate;
                }

                _this123._windowRef.instance.resetActive(); // The observable stream we are subscribing to might have async steps
                // and if a component containing typeahead is using the OnPush strategy
                // the change detection turn wouldn't be invoked automatically.


                _this123._windowRef.changeDetectorRef.detectChanges();

                _this123._showHint();
              } // live announcer


              var count = results ? results.length : 0;

              _this123._live.say(count === 0 ? 'No results available' : "".concat(count, " result").concat(count === 1 ? '' : 's', " available"));
            });
          }
        }, {
          key: "_unsubscribeFromUserInput",
          value: function _unsubscribeFromUserInput() {
            if (this._subscription) {
              this._subscription.unsubscribe();
            }

            this._subscription = null;
          }
        }]);

        return NgbTypeahead;
      }();

      NgbTypeahead.ɵfac = function NgbTypeahead_Factory(t) {
        return new (t || NgbTypeahead)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgbTypeaheadConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](Live), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"]));
      };

      NgbTypeahead.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgbTypeahead,
        selectors: [["input", "ngbTypeahead", ""]],
        hostAttrs: ["autocapitalize", "off", "autocorrect", "off", "role", "combobox", "aria-multiline", "false"],
        hostVars: 7,
        hostBindings: function NgbTypeahead_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("blur", function NgbTypeahead_blur_HostBindingHandler() {
              return ctx.handleBlur();
            })("keydown", function NgbTypeahead_keydown_HostBindingHandler($event) {
              return ctx.handleKeyDown($event);
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("autocomplete", ctx.autocomplete);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-autocomplete", ctx.showHint ? "both" : "list")("aria-activedescendant", ctx.activeDescendant)("aria-owns", ctx.isPopupOpen() ? ctx.popupId : null)("aria-expanded", ctx.isPopupOpen());

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("open", ctx.isPopupOpen());
          }
        },
        inputs: {
          autocomplete: "autocomplete",
          placement: "placement",
          container: "container",
          editable: "editable",
          focusFirst: "focusFirst",
          showHint: "showHint",
          inputFormatter: "inputFormatter",
          ngbTypeahead: "ngbTypeahead",
          resultFormatter: "resultFormatter",
          resultTemplate: "resultTemplate",
          popupClass: "popupClass"
        },
        outputs: {
          selectItem: "selectItem"
        },
        exportAs: ["ngbTypeahead"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALUE_ACCESSOR"],
          useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
            return NgbTypeahead;
          }),
          multi: true
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
      });

      NgbTypeahead.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]
        }, {
          type: NgbTypeaheadConfig
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }, {
          type: Live
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"]
        }];
      };

      NgbTypeahead.propDecorators = {
        autocomplete: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        container: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        editable: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        focusFirst: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        inputFormatter: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        ngbTypeahead: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        resultFormatter: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        resultTemplate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        showHint: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        placement: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        popupClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        selectItem: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTypeahead, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'input[ngbTypeahead]',
            exportAs: 'ngbTypeahead',
            host: {
              '(blur)': 'handleBlur()',
              '[class.open]': 'isPopupOpen()',
              '(keydown)': 'handleKeyDown($event)',
              '[autocomplete]': 'autocomplete',
              'autocapitalize': 'off',
              'autocorrect': 'off',
              'role': 'combobox',
              'aria-multiline': 'false',
              '[attr.aria-autocomplete]': 'showHint ? "both" : "list"',
              '[attr.aria-activedescendant]': 'activeDescendant',
              '[attr.aria-owns]': 'isPopupOpen() ? popupId : null',
              '[attr.aria-expanded]': 'isPopupOpen()'
            },
            providers: [{
              provide: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NG_VALUE_ACCESSOR"],
              useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
                return NgbTypeahead;
              }),
              multi: true
            }]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]
          }, {
            type: NgbTypeaheadConfig
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }, {
            type: Live
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"]
          }];
        }, {
          autocomplete: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          placement: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          selectItem: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          container: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          editable: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          focusFirst: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          showHint: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          inputFormatter: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          ngbTypeahead: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          resultFormatter: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          resultTemplate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          popupClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var NgbTypeaheadModule = function NgbTypeaheadModule() {
        _classCallCheck2(this, NgbTypeaheadModule);
      };

      NgbTypeaheadModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NgbTypeaheadModule
      });
      NgbTypeaheadModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NgbTypeaheadModule_Factory(t) {
          return new (t || NgbTypeaheadModule)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbTypeaheadModule, {
          declarations: function declarations() {
            return [NgbTypeahead, NgbHighlight, NgbTypeaheadWindow];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]];
          },
          exports: function exports() {
            return [NgbTypeahead, NgbHighlight];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbTypeaheadModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            declarations: [NgbTypeahead, NgbHighlight, NgbTypeaheadWindow],
            exports: [NgbTypeahead, NgbHighlight],
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]],
            entryComponents: [NgbTypeaheadWindow]
          }]
        }], null, null);
      })();

      var NGB_MODULES = [NgbAccordionModule, NgbAlertModule, NgbButtonsModule, NgbCarouselModule, NgbCollapseModule, NgbDatepickerModule, NgbDropdownModule, NgbModalModule, NgbNavModule, NgbPaginationModule, NgbPopoverModule, NgbProgressbarModule, NgbRatingModule, NgbTimepickerModule, NgbToastModule, NgbTooltipModule, NgbTypeaheadModule];

      var NgbModule = function NgbModule() {
        _classCallCheck2(this, NgbModule);
      };

      NgbModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NgbModule
      });
      NgbModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NgbModule_Factory(t) {
          return new (t || NgbModule)();
        },
        imports: [NGB_MODULES, NgbAccordionModule, NgbAlertModule, NgbButtonsModule, NgbCarouselModule, NgbCollapseModule, NgbDatepickerModule, NgbDropdownModule, NgbModalModule, NgbNavModule, NgbPaginationModule, NgbPopoverModule, NgbProgressbarModule, NgbRatingModule, NgbTimepickerModule, NgbToastModule, NgbTooltipModule, NgbTypeaheadModule]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgbModule, {
          imports: [NgbAccordionModule, NgbAlertModule, NgbButtonsModule, NgbCarouselModule, NgbCollapseModule, NgbDatepickerModule, NgbDropdownModule, NgbModalModule, NgbNavModule, NgbPaginationModule, NgbPopoverModule, NgbProgressbarModule, NgbRatingModule, NgbTimepickerModule, NgbToastModule, NgbTooltipModule, NgbTypeaheadModule],
          exports: [NgbAccordionModule, NgbAlertModule, NgbButtonsModule, NgbCarouselModule, NgbCollapseModule, NgbDatepickerModule, NgbDropdownModule, NgbModalModule, NgbNavModule, NgbPaginationModule, NgbPopoverModule, NgbProgressbarModule, NgbRatingModule, NgbTimepickerModule, NgbToastModule, NgbTooltipModule, NgbTypeaheadModule]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgbModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            imports: NGB_MODULES,
            exports: NGB_MODULES
          }]
        }], null, null);
      })();
      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=ng-bootstrap.js.map

      /***/

    },

    /***/
    "1ppg":
    /*!*******************************************!*\
      !*** ./node_modules/moment/locale/fil.js ***!
      \*******************************************/

    /*! no static exports found */

    /***/
    function ppg(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Filipino [fil]
      //! author : Dan Hagman : https://github.com/hagmandan
      //! author : Matthew Co : https://github.com/matthewdeeco
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var fil = moment.defineLocale('fil', {
          months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),
          monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
          weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),
          weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
          weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'MM/D/YYYY',
            LL: 'MMMM D, YYYY',
            LLL: 'MMMM D, YYYY HH:mm',
            LLLL: 'dddd, MMMM DD, YYYY HH:mm'
          },
          calendar: {
            sameDay: 'LT [ngayong araw]',
            nextDay: '[Bukas ng] LT',
            nextWeek: 'LT [sa susunod na] dddd',
            lastDay: 'LT [kahapon]',
            lastWeek: 'LT [noong nakaraang] dddd',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'sa loob ng %s',
            past: '%s ang nakalipas',
            s: 'ilang segundo',
            ss: '%d segundo',
            m: 'isang minuto',
            mm: '%d minuto',
            h: 'isang oras',
            hh: '%d oras',
            d: 'isang araw',
            dd: '%d araw',
            M: 'isang buwan',
            MM: '%d buwan',
            y: 'isang taon',
            yy: '%d taon'
          },
          dayOfMonthOrdinalParse: /\d{1,2}/,
          ordinal: function ordinal(number) {
            return number;
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return fil;
      });
      /***/

    },

    /***/
    "1rYy":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/hy-am.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function rYy(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Armenian [hy-am]
      //! author : Armendarabyan : https://github.com/armendarabyan
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var hyAm = moment.defineLocale('hy-am', {
          months: {
            format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),
            standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')
          },
          monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),
          weekdays: 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),
          weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
          weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY թ.',
            LLL: 'D MMMM YYYY թ., HH:mm',
            LLLL: 'dddd, D MMMM YYYY թ., HH:mm'
          },
          calendar: {
            sameDay: '[այսօր] LT',
            nextDay: '[վաղը] LT',
            lastDay: '[երեկ] LT',
            nextWeek: function nextWeek() {
              return 'dddd [օրը ժամը] LT';
            },
            lastWeek: function lastWeek() {
              return '[անցած] dddd [օրը ժամը] LT';
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s հետո',
            past: '%s առաջ',
            s: 'մի քանի վայրկյան',
            ss: '%d վայրկյան',
            m: 'րոպե',
            mm: '%d րոպե',
            h: 'ժամ',
            hh: '%d ժամ',
            d: 'օր',
            dd: '%d օր',
            M: 'ամիս',
            MM: '%d ամիս',
            y: 'տարի',
            yy: '%d տարի'
          },
          meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,
          isPM: function isPM(input) {
            return /^(ցերեկվա|երեկոյան)$/.test(input);
          },
          meridiem: function meridiem(hour) {
            if (hour < 4) {
              return 'գիշերվա';
            } else if (hour < 12) {
              return 'առավոտվա';
            } else if (hour < 17) {
              return 'ցերեկվա';
            } else {
              return 'երեկոյան';
            }
          },
          dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/,
          ordinal: function ordinal(number, period) {
            switch (period) {
              case 'DDD':
              case 'w':
              case 'W':
              case 'DDDo':
                if (number === 1) {
                  return number + '-ին';
                }

                return number + '-րդ';

              default:
                return number;
            }
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return hyAm;
      });
      /***/

    },

    /***/
    "1rjb":
    /*!*************************************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/adapter/date-time-adapter.class.js ***!
      \*************************************************************************************************/

    /*! exports provided: OWL_DATE_TIME_LOCALE, OWL_DATE_TIME_LOCALE_FACTORY, OWL_DATE_TIME_LOCALE_PROVIDER, DateTimeAdapter */

    /***/
    function rjb(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OWL_DATE_TIME_LOCALE", function () {
        return OWL_DATE_TIME_LOCALE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OWL_DATE_TIME_LOCALE_FACTORY", function () {
        return OWL_DATE_TIME_LOCALE_FACTORY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OWL_DATE_TIME_LOCALE_PROVIDER", function () {
        return OWL_DATE_TIME_LOCALE_PROVIDER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DateTimeAdapter", function () {
        return DateTimeAdapter;
      });
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");

      var OWL_DATE_TIME_LOCALE = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('OWL_DATE_TIME_LOCALE', {
        providedIn: 'root',
        factory: OWL_DATE_TIME_LOCALE_FACTORY
      });

      function OWL_DATE_TIME_LOCALE_FACTORY() {
        return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["inject"])(_angular_core__WEBPACK_IMPORTED_MODULE_1__["LOCALE_ID"]);
      }

      var OWL_DATE_TIME_LOCALE_PROVIDER = {
        provide: OWL_DATE_TIME_LOCALE,
        useExisting: _angular_core__WEBPACK_IMPORTED_MODULE_1__["LOCALE_ID"]
      };

      var DateTimeAdapter = function () {
        function DateTimeAdapter() {
          this._localeChanges = new rxjs__WEBPACK_IMPORTED_MODULE_0__["Subject"]();
          this.millisecondsInDay = 86400000;
          this.milliseondsInMinute = 60000;
        }

        Object.defineProperty(DateTimeAdapter.prototype, "localeChanges", {
          get: function get() {
            return this._localeChanges;
          },
          enumerable: true,
          configurable: true
        });

        DateTimeAdapter.prototype.compare = function (first, second) {
          if (!this.isValid(first) || !this.isValid(second)) {
            throw Error('JSNativeDate: Cannot compare invalid dates.');
          }

          var dateFirst = this.clone(first);
          var dateSecond = this.clone(second);
          var diff = this.getTime(dateFirst) - this.getTime(dateSecond);

          if (diff < 0) {
            return -1;
          } else if (diff > 0) {
            return 1;
          } else {
            return diff;
          }
        };

        DateTimeAdapter.prototype.compareYear = function (first, second) {
          if (!this.isValid(first) || !this.isValid(second)) {
            throw Error('JSNativeDate: Cannot compare invalid dates.');
          }

          var yearLeft = this.getYear(first);
          var yearRight = this.getYear(second);
          var diff = yearLeft - yearRight;

          if (diff < 0) {
            return -1;
          } else if (diff > 0) {
            return 1;
          } else {
            return 0;
          }
        };

        DateTimeAdapter.prototype.deserialize = function (value) {
          if (value == null || this.isDateInstance(value) && this.isValid(value)) {
            return value;
          }

          return this.invalid();
        };

        DateTimeAdapter.prototype.setLocale = function (locale) {
          this.locale = locale;

          this._localeChanges.next();
        };

        DateTimeAdapter.prototype.clampDate = function (date, min, max) {
          if (min && this.compare(date, min) < 0) {
            return min;
          }

          if (max && this.compare(date, max) > 0) {
            return max;
          }

          return date;
        };

        return DateTimeAdapter;
      }();
      /***/

    },

    /***/
    "1uSB":
    /*!*************************************************************!*\
      !*** ./node_modules/@angular/compiler/fesm2015/compiler.js ***!
      \*************************************************************/

    /*! exports provided: AST, ASTWithName, ASTWithSource, AbsoluteSourceSpan, AotCompiler, AotSummaryResolver, ArrayType, AssertNotNull, AstMemoryEfficientTransformer, AstPath, AstTransformer, AttrAst, Attribute, Binary, BinaryOperator, BinaryOperatorExpr, BindingPipe, BoundDirectivePropertyAst, BoundElementProperty, BoundElementPropertyAst, BoundEventAst, BoundTextAst, BuiltinMethod, BuiltinType, BuiltinTypeName, BuiltinVar, CONTENT_ATTR, CUSTOM_ELEMENTS_SCHEMA, CastExpr, Chain, ClassField, ClassMethod, ClassStmt, CommaExpr, Comment, CompileDirectiveMetadata, CompileMetadataResolver, CompileNgModuleMetadata, CompilePipeMetadata, CompileReflector, CompileShallowModuleMetadata, CompileStylesheetMetadata, CompileSummaryKind, CompileTemplateMetadata, CompiledStylesheet, CompilerConfig, Conditional, ConditionalExpr, ConstantPool, CssSelector, DEFAULT_INTERPOLATION_CONFIG, DYNAMIC_TYPE, DeclareFunctionStmt, DeclareVarStmt, DirectiveAst, DirectiveNormalizer, DirectiveResolver, DomElementSchemaRegistry, EOF, ERROR_COMPONENT_TYPE, Element, ElementAst, ElementSchemaRegistry, EmbeddedTemplateAst, EmitterVisitorContext, EmptyExpr, Expansion, ExpansionCase, Expression, ExpressionBinding, ExpressionStatement, ExpressionType, ExternalExpr, ExternalReference, Extractor, FunctionCall, FunctionExpr, GeneratedFile, HOST_ATTR, HtmlParser, HtmlTagDefinition, I18NHtmlParser, Identifiers, IfStmt, ImplicitReceiver, InstantiateExpr, Interpolation, InterpolationConfig, InvokeFunctionExpr, InvokeMethodExpr, IvyParser, JSDocComment, JitCompiler, JitEvaluator, JitSummaryResolver, KeyedRead, KeyedWrite, LeadingComment, Lexer, LiteralArray, LiteralArrayExpr, LiteralExpr, LiteralMap, LiteralMapExpr, LiteralPrimitive, LocalizedString, MapType, MessageBundle, MethodCall, NAMED_ENTITIES, NGSP_UNICODE, NONE_TYPE, NO_ERRORS_SCHEMA, NgContentAst, NgModuleCompiler, NgModuleResolver, NodeWithI18n, NonNullAssert, NotExpr, NullTemplateVisitor, ParseError, ParseErrorLevel, ParseLocation, ParseSourceFile, ParseSourceSpan, ParseSpan, ParseTreeResult, ParsedEvent, ParsedProperty, ParsedPropertyType, ParsedVariable, Parser, ParserError, PipeResolver, PrefixNot, PropertyRead, PropertyWrite, ProviderAst, ProviderAstType, ProviderMeta, Quote, R3BoundTarget, R3FactoryTarget, R3Identifiers, R3ResolvedDependencyType, R3TargetBinder, ReadKeyExpr, ReadPropExpr, ReadVarExpr, RecursiveAstVisitor, RecursiveTemplateAstVisitor, RecursiveVisitor, ReferenceAst, ResolvedStaticSymbol, ResourceLoader, ReturnStatement, STRING_TYPE, SafeMethodCall, SafePropertyRead, SelectorContext, SelectorListContext, SelectorMatcher, Serializer, SplitInterpolation, Statement, StaticReflector, StaticSymbol, StaticSymbolCache, StaticSymbolResolver, StmtModifier, StyleCompiler, StylesCompileDependency, SummaryResolver, TagContentType, TaggedTemplateExpr, TemplateBindingParseResult, TemplateLiteral, TemplateLiteralElement, TemplateParseError, TemplateParseResult, TemplateParser, Text, TextAst, ThisReceiver, ThrowStmt, TmplAstBoundAttribute, TmplAstBoundEvent, TmplAstBoundText, TmplAstContent, TmplAstElement, TmplAstIcu, TmplAstRecursiveVisitor, TmplAstReference, TmplAstTemplate, TmplAstText, TmplAstTextAttribute, TmplAstVariable, Token, TokenType, TransitiveCompileNgModuleMetadata, TreeError, TryCatchStmt, Type, TypeScriptEmitter, TypeofExpr, Unary, UnaryOperator, UnaryOperatorExpr, UrlResolver, VERSION, VariableAst, VariableBinding, Version, ViewCompiler, WrappedNodeExpr, WriteKeyExpr, WritePropExpr, WriteVarExpr, Xliff, Xliff2, Xmb, XmlParser, Xtb, _ParseAST, analyzeAndValidateNgModules, analyzeFile, analyzeFileForInjectables, analyzeNgModules, collectExternalReferences, compileComponentFromMetadata, compileDeclareComponentFromMetadata, compileDeclareDirectiveFromMetadata, compileDeclarePipeFromMetadata, compileDirectiveFromMetadata, compileFactoryFunction, compileInjectable, compileInjector, compileNgModule, compilePipeFromMetadata, componentFactoryName, computeMsgId, core, createAotCompiler, createAotUrlResolver, createElementCssSelector, createLoweredSymbol, createOfflineCompileUrlResolver, createUrlResolverWithoutPackagePrefix, debugOutputAstAsTypeScript, devOnlyGuardedExpression, findNode, flatten, formattedError, getHtmlTagDefinition, getNsPrefix, getParseErrors, getSafePropertyAccessString, getUrlScheme, hostViewClassName, identifierModuleUrl, identifierName, isEmptyExpression, isFormattedError, isIdentifier, isLoweredSymbol, isNgContainer, isNgContent, isNgTemplate, isQuote, isSyntaxError, jsDocComment, leadingComment, literalMap, makeBindingParser, mergeAnalyzedFiles, mergeNsAndName, ngModuleJitUrl, parseHostBindings, parseTemplate, preserveWhitespacesDefault, publishFacade, r3JitTypeSourceSpan, removeSummaryDuplicates, rendererTypeName, sanitizeIdentifier, sharedStylesheetJitUrl, splitClasses, splitNsName, syntaxError, templateJitUrl, templateSourceUrl, templateVisitAll, toTypeScript, tokenName, tokenReference, typeSourceSpan, unescapeIdentifier, unwrapResolvedMetadata, verifyHostBindings, viewClassName, visitAll */

    /***/
    function uSB(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      var _BoundPropertyMapping;

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AST", function () {
        return AST;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ASTWithName", function () {
        return ASTWithName;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ASTWithSource", function () {
        return ASTWithSource;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AbsoluteSourceSpan", function () {
        return AbsoluteSourceSpan;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AotCompiler", function () {
        return AotCompiler;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AotSummaryResolver", function () {
        return AotSummaryResolver;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ArrayType", function () {
        return ArrayType;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AssertNotNull", function () {
        return AssertNotNull;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AstMemoryEfficientTransformer", function () {
        return AstMemoryEfficientTransformer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AstPath", function () {
        return AstPath;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AstTransformer", function () {
        return AstTransformer$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AttrAst", function () {
        return AttrAst;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Attribute", function () {
        return Attribute;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Binary", function () {
        return Binary;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BinaryOperator", function () {
        return BinaryOperator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BinaryOperatorExpr", function () {
        return BinaryOperatorExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BindingPipe", function () {
        return BindingPipe;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BoundDirectivePropertyAst", function () {
        return BoundDirectivePropertyAst;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BoundElementProperty", function () {
        return BoundElementProperty;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BoundElementPropertyAst", function () {
        return BoundElementPropertyAst;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BoundEventAst", function () {
        return BoundEventAst;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BoundTextAst", function () {
        return BoundTextAst;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BuiltinMethod", function () {
        return BuiltinMethod;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BuiltinType", function () {
        return BuiltinType;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BuiltinTypeName", function () {
        return BuiltinTypeName;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BuiltinVar", function () {
        return BuiltinVar;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CONTENT_ATTR", function () {
        return CONTENT_ATTR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CUSTOM_ELEMENTS_SCHEMA", function () {
        return CUSTOM_ELEMENTS_SCHEMA;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CastExpr", function () {
        return CastExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Chain", function () {
        return Chain;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ClassField", function () {
        return ClassField;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ClassMethod", function () {
        return ClassMethod;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ClassStmt", function () {
        return ClassStmt;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CommaExpr", function () {
        return CommaExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Comment", function () {
        return Comment;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CompileDirectiveMetadata", function () {
        return CompileDirectiveMetadata;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CompileMetadataResolver", function () {
        return CompileMetadataResolver;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CompileNgModuleMetadata", function () {
        return CompileNgModuleMetadata;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CompilePipeMetadata", function () {
        return CompilePipeMetadata;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CompileReflector", function () {
        return CompileReflector;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CompileShallowModuleMetadata", function () {
        return CompileShallowModuleMetadata;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CompileStylesheetMetadata", function () {
        return CompileStylesheetMetadata;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CompileSummaryKind", function () {
        return CompileSummaryKind;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CompileTemplateMetadata", function () {
        return CompileTemplateMetadata;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CompiledStylesheet", function () {
        return CompiledStylesheet;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CompilerConfig", function () {
        return CompilerConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Conditional", function () {
        return Conditional;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ConditionalExpr", function () {
        return ConditionalExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ConstantPool", function () {
        return ConstantPool;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CssSelector", function () {
        return CssSelector;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DEFAULT_INTERPOLATION_CONFIG", function () {
        return DEFAULT_INTERPOLATION_CONFIG;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DYNAMIC_TYPE", function () {
        return DYNAMIC_TYPE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DeclareFunctionStmt", function () {
        return DeclareFunctionStmt;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DeclareVarStmt", function () {
        return DeclareVarStmt;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DirectiveAst", function () {
        return DirectiveAst;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DirectiveNormalizer", function () {
        return DirectiveNormalizer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DirectiveResolver", function () {
        return DirectiveResolver;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DomElementSchemaRegistry", function () {
        return DomElementSchemaRegistry;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "EOF", function () {
        return EOF;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ERROR_COMPONENT_TYPE", function () {
        return ERROR_COMPONENT_TYPE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Element", function () {
        return Element$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ElementAst", function () {
        return ElementAst;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ElementSchemaRegistry", function () {
        return ElementSchemaRegistry;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "EmbeddedTemplateAst", function () {
        return EmbeddedTemplateAst;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "EmitterVisitorContext", function () {
        return EmitterVisitorContext;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "EmptyExpr", function () {
        return EmptyExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Expansion", function () {
        return Expansion;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ExpansionCase", function () {
        return ExpansionCase;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Expression", function () {
        return Expression;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ExpressionBinding", function () {
        return ExpressionBinding;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ExpressionStatement", function () {
        return ExpressionStatement;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ExpressionType", function () {
        return ExpressionType;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ExternalExpr", function () {
        return ExternalExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ExternalReference", function () {
        return ExternalReference;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Extractor", function () {
        return Extractor;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FunctionCall", function () {
        return FunctionCall;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FunctionExpr", function () {
        return FunctionExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "GeneratedFile", function () {
        return GeneratedFile;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HOST_ATTR", function () {
        return HOST_ATTR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HtmlParser", function () {
        return HtmlParser;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HtmlTagDefinition", function () {
        return HtmlTagDefinition;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "I18NHtmlParser", function () {
        return I18NHtmlParser;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Identifiers", function () {
        return Identifiers;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "IfStmt", function () {
        return IfStmt;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ImplicitReceiver", function () {
        return ImplicitReceiver;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "InstantiateExpr", function () {
        return InstantiateExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Interpolation", function () {
        return Interpolation;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "InterpolationConfig", function () {
        return InterpolationConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "InvokeFunctionExpr", function () {
        return InvokeFunctionExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "InvokeMethodExpr", function () {
        return InvokeMethodExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "IvyParser", function () {
        return IvyParser;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "JSDocComment", function () {
        return JSDocComment;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "JitCompiler", function () {
        return JitCompiler;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "JitEvaluator", function () {
        return JitEvaluator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "JitSummaryResolver", function () {
        return JitSummaryResolver;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "KeyedRead", function () {
        return KeyedRead;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "KeyedWrite", function () {
        return KeyedWrite;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LeadingComment", function () {
        return LeadingComment;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Lexer", function () {
        return Lexer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LiteralArray", function () {
        return LiteralArray;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LiteralArrayExpr", function () {
        return LiteralArrayExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LiteralExpr", function () {
        return LiteralExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LiteralMap", function () {
        return LiteralMap;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LiteralMapExpr", function () {
        return LiteralMapExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LiteralPrimitive", function () {
        return LiteralPrimitive;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LocalizedString", function () {
        return LocalizedString;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MapType", function () {
        return MapType;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MessageBundle", function () {
        return MessageBundle;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MethodCall", function () {
        return MethodCall;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NAMED_ENTITIES", function () {
        return NAMED_ENTITIES;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NGSP_UNICODE", function () {
        return NGSP_UNICODE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NONE_TYPE", function () {
        return NONE_TYPE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NO_ERRORS_SCHEMA", function () {
        return NO_ERRORS_SCHEMA;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgContentAst", function () {
        return NgContentAst;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgModuleCompiler", function () {
        return NgModuleCompiler;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgModuleResolver", function () {
        return NgModuleResolver;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NodeWithI18n", function () {
        return NodeWithI18n;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NonNullAssert", function () {
        return NonNullAssert;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NotExpr", function () {
        return NotExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NullTemplateVisitor", function () {
        return NullTemplateVisitor;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ParseError", function () {
        return ParseError;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ParseErrorLevel", function () {
        return ParseErrorLevel;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ParseLocation", function () {
        return ParseLocation;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ParseSourceFile", function () {
        return ParseSourceFile;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ParseSourceSpan", function () {
        return ParseSourceSpan;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ParseSpan", function () {
        return ParseSpan;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ParseTreeResult", function () {
        return ParseTreeResult;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ParsedEvent", function () {
        return ParsedEvent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ParsedProperty", function () {
        return ParsedProperty;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ParsedPropertyType", function () {
        return ParsedPropertyType;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ParsedVariable", function () {
        return ParsedVariable;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Parser", function () {
        return Parser$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ParserError", function () {
        return ParserError;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PipeResolver", function () {
        return PipeResolver;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PrefixNot", function () {
        return PrefixNot;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PropertyRead", function () {
        return PropertyRead;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PropertyWrite", function () {
        return PropertyWrite;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ProviderAst", function () {
        return ProviderAst;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ProviderAstType", function () {
        return ProviderAstType;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ProviderMeta", function () {
        return ProviderMeta;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Quote", function () {
        return Quote;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "R3BoundTarget", function () {
        return R3BoundTarget;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "R3FactoryTarget", function () {
        return R3FactoryTarget;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "R3Identifiers", function () {
        return Identifiers$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "R3ResolvedDependencyType", function () {
        return R3ResolvedDependencyType;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "R3TargetBinder", function () {
        return R3TargetBinder;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ReadKeyExpr", function () {
        return ReadKeyExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ReadPropExpr", function () {
        return ReadPropExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ReadVarExpr", function () {
        return ReadVarExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RecursiveAstVisitor", function () {
        return RecursiveAstVisitor$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RecursiveTemplateAstVisitor", function () {
        return RecursiveTemplateAstVisitor;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RecursiveVisitor", function () {
        return RecursiveVisitor$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ReferenceAst", function () {
        return ReferenceAst;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ResolvedStaticSymbol", function () {
        return ResolvedStaticSymbol;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ResourceLoader", function () {
        return ResourceLoader;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ReturnStatement", function () {
        return ReturnStatement;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "STRING_TYPE", function () {
        return STRING_TYPE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SafeMethodCall", function () {
        return SafeMethodCall;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SafePropertyRead", function () {
        return SafePropertyRead;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SelectorContext", function () {
        return SelectorContext;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SelectorListContext", function () {
        return SelectorListContext;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SelectorMatcher", function () {
        return SelectorMatcher;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Serializer", function () {
        return Serializer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SplitInterpolation", function () {
        return SplitInterpolation;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Statement", function () {
        return Statement;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "StaticReflector", function () {
        return StaticReflector;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "StaticSymbol", function () {
        return StaticSymbol;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "StaticSymbolCache", function () {
        return StaticSymbolCache;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "StaticSymbolResolver", function () {
        return StaticSymbolResolver;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "StmtModifier", function () {
        return StmtModifier;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "StyleCompiler", function () {
        return StyleCompiler;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "StylesCompileDependency", function () {
        return StylesCompileDependency;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SummaryResolver", function () {
        return SummaryResolver;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TagContentType", function () {
        return TagContentType;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TaggedTemplateExpr", function () {
        return TaggedTemplateExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TemplateBindingParseResult", function () {
        return TemplateBindingParseResult;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TemplateLiteral", function () {
        return TemplateLiteral;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TemplateLiteralElement", function () {
        return TemplateLiteralElement;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TemplateParseError", function () {
        return TemplateParseError;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TemplateParseResult", function () {
        return TemplateParseResult;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TemplateParser", function () {
        return TemplateParser;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Text", function () {
        return Text$3;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TextAst", function () {
        return TextAst;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ThisReceiver", function () {
        return ThisReceiver;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ThrowStmt", function () {
        return ThrowStmt;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TmplAstBoundAttribute", function () {
        return BoundAttribute;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TmplAstBoundEvent", function () {
        return BoundEvent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TmplAstBoundText", function () {
        return BoundText;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TmplAstContent", function () {
        return Content;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TmplAstElement", function () {
        return Element;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TmplAstIcu", function () {
        return Icu;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TmplAstRecursiveVisitor", function () {
        return RecursiveVisitor;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TmplAstReference", function () {
        return Reference;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TmplAstTemplate", function () {
        return Template;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TmplAstText", function () {
        return Text;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TmplAstTextAttribute", function () {
        return TextAttribute;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TmplAstVariable", function () {
        return Variable;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Token", function () {
        return Token$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TokenType", function () {
        return TokenType$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TransitiveCompileNgModuleMetadata", function () {
        return TransitiveCompileNgModuleMetadata;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TreeError", function () {
        return TreeError;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TryCatchStmt", function () {
        return TryCatchStmt;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Type", function () {
        return Type$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TypeScriptEmitter", function () {
        return TypeScriptEmitter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TypeofExpr", function () {
        return TypeofExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Unary", function () {
        return Unary;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "UnaryOperator", function () {
        return UnaryOperator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "UnaryOperatorExpr", function () {
        return UnaryOperatorExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "UrlResolver", function () {
        return UrlResolver;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "VERSION", function () {
        return VERSION$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "VariableAst", function () {
        return VariableAst;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "VariableBinding", function () {
        return VariableBinding;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Version", function () {
        return Version;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ViewCompiler", function () {
        return ViewCompiler;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "WrappedNodeExpr", function () {
        return WrappedNodeExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "WriteKeyExpr", function () {
        return WriteKeyExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "WritePropExpr", function () {
        return WritePropExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "WriteVarExpr", function () {
        return WriteVarExpr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Xliff", function () {
        return Xliff;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Xliff2", function () {
        return Xliff2;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Xmb", function () {
        return Xmb;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "XmlParser", function () {
        return XmlParser;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Xtb", function () {
        return Xtb;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "_ParseAST", function () {
        return _ParseAST;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "analyzeAndValidateNgModules", function () {
        return analyzeAndValidateNgModules;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "analyzeFile", function () {
        return analyzeFile;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "analyzeFileForInjectables", function () {
        return analyzeFileForInjectables;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "analyzeNgModules", function () {
        return analyzeNgModules;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "collectExternalReferences", function () {
        return collectExternalReferences;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "compileComponentFromMetadata", function () {
        return compileComponentFromMetadata;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "compileDeclareComponentFromMetadata", function () {
        return compileDeclareComponentFromMetadata;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "compileDeclareDirectiveFromMetadata", function () {
        return compileDeclareDirectiveFromMetadata;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "compileDeclarePipeFromMetadata", function () {
        return compileDeclarePipeFromMetadata;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "compileDirectiveFromMetadata", function () {
        return compileDirectiveFromMetadata;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "compileFactoryFunction", function () {
        return compileFactoryFunction;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "compileInjectable", function () {
        return _compileInjectable;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "compileInjector", function () {
        return _compileInjector;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "compileNgModule", function () {
        return _compileNgModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "compilePipeFromMetadata", function () {
        return compilePipeFromMetadata;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "componentFactoryName", function () {
        return componentFactoryName;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "computeMsgId", function () {
        return computeMsgId;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "core", function () {
        return core;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "createAotCompiler", function () {
        return createAotCompiler;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "createAotUrlResolver", function () {
        return createAotUrlResolver;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "createElementCssSelector", function () {
        return createElementCssSelector;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "createLoweredSymbol", function () {
        return createLoweredSymbol;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "createOfflineCompileUrlResolver", function () {
        return createOfflineCompileUrlResolver;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "createUrlResolverWithoutPackagePrefix", function () {
        return createUrlResolverWithoutPackagePrefix;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "debugOutputAstAsTypeScript", function () {
        return debugOutputAstAsTypeScript;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "devOnlyGuardedExpression", function () {
        return devOnlyGuardedExpression;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "findNode", function () {
        return findNode;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "flatten", function () {
        return flatten;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "formattedError", function () {
        return formattedError;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getHtmlTagDefinition", function () {
        return getHtmlTagDefinition;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getNsPrefix", function () {
        return getNsPrefix;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getParseErrors", function () {
        return getParseErrors;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getSafePropertyAccessString", function () {
        return getSafePropertyAccessString;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getUrlScheme", function () {
        return getUrlScheme;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "hostViewClassName", function () {
        return hostViewClassName;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "identifierModuleUrl", function () {
        return identifierModuleUrl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "identifierName", function () {
        return identifierName;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isEmptyExpression", function () {
        return isEmptyExpression;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isFormattedError", function () {
        return isFormattedError;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isIdentifier", function () {
        return isIdentifier;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isLoweredSymbol", function () {
        return isLoweredSymbol;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isNgContainer", function () {
        return isNgContainer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isNgContent", function () {
        return isNgContent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isNgTemplate", function () {
        return isNgTemplate;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isQuote", function () {
        return isQuote;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isSyntaxError", function () {
        return isSyntaxError;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "jsDocComment", function () {
        return jsDocComment;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "leadingComment", function () {
        return leadingComment;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "literalMap", function () {
        return literalMap;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "makeBindingParser", function () {
        return makeBindingParser;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "mergeAnalyzedFiles", function () {
        return mergeAnalyzedFiles;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "mergeNsAndName", function () {
        return mergeNsAndName;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ngModuleJitUrl", function () {
        return ngModuleJitUrl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "parseHostBindings", function () {
        return parseHostBindings;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "parseTemplate", function () {
        return parseTemplate;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "preserveWhitespacesDefault", function () {
        return preserveWhitespacesDefault;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "publishFacade", function () {
        return publishFacade;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "r3JitTypeSourceSpan", function () {
        return r3JitTypeSourceSpan;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "removeSummaryDuplicates", function () {
        return removeSummaryDuplicates;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "rendererTypeName", function () {
        return rendererTypeName;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "sanitizeIdentifier", function () {
        return sanitizeIdentifier;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "sharedStylesheetJitUrl", function () {
        return sharedStylesheetJitUrl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "splitClasses", function () {
        return splitClasses;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "splitNsName", function () {
        return splitNsName;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "syntaxError", function () {
        return syntaxError;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "templateJitUrl", function () {
        return templateJitUrl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "templateSourceUrl", function () {
        return templateSourceUrl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "templateVisitAll", function () {
        return templateVisitAll;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "toTypeScript", function () {
        return toTypeScript;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "tokenName", function () {
        return tokenName;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "tokenReference", function () {
        return tokenReference;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "typeSourceSpan", function () {
        return typeSourceSpan;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "unescapeIdentifier", function () {
        return unescapeIdentifier;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "unwrapResolvedMetadata", function () {
        return unwrapResolvedMetadata;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "verifyHostBindings", function () {
        return verifyHostBindings;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "viewClassName", function () {
        return viewClassName;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "visitAll", function () {
        return visitAll$1;
      });
      /**
       * @license Angular v12.0.0-next.1
       * (c) 2010-2020 Google LLC. https://angular.io/
       * License: MIT
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var TagContentType;

      (function (TagContentType) {
        TagContentType[TagContentType["RAW_TEXT"] = 0] = "RAW_TEXT";
        TagContentType[TagContentType["ESCAPABLE_RAW_TEXT"] = 1] = "ESCAPABLE_RAW_TEXT";
        TagContentType[TagContentType["PARSABLE_DATA"] = 2] = "PARSABLE_DATA";
      })(TagContentType || (TagContentType = {}));

      function splitNsName(elementName) {
        if (elementName[0] != ':') {
          return [null, elementName];
        }

        var colonIndex = elementName.indexOf(':', 1);

        if (colonIndex == -1) {
          throw new Error("Unsupported format \"".concat(elementName, "\" expecting \":namespace:name\""));
        }

        return [elementName.slice(1, colonIndex), elementName.slice(colonIndex + 1)];
      } // `<ng-container>` tags work the same regardless the namespace


      function isNgContainer(tagName) {
        return splitNsName(tagName)[1] === 'ng-container';
      } // `<ng-content>` tags work the same regardless the namespace


      function isNgContent(tagName) {
        return splitNsName(tagName)[1] === 'ng-content';
      } // `<ng-template>` tags work the same regardless the namespace


      function isNgTemplate(tagName) {
        return splitNsName(tagName)[1] === 'ng-template';
      }

      function getNsPrefix(fullName) {
        return fullName === null ? null : splitNsName(fullName)[0];
      }

      function mergeNsAndName(prefix, localName) {
        return prefix ? ":".concat(prefix, ":").concat(localName) : localName;
      } // see https://www.w3.org/TR/html51/syntax.html#named-character-references
      // see https://html.spec.whatwg.org/multipage/entities.json
      // This list is not exhaustive to keep the compiler footprint low.
      // The `&#123;` / `&#x1ab;` syntax should be used when the named character reference does not
      // exist.


      var NAMED_ENTITIES = {
        'Aacute': "\xC1",
        'aacute': "\xE1",
        'Acirc': "\xC2",
        'acirc': "\xE2",
        'acute': "\xB4",
        'AElig': "\xC6",
        'aelig': "\xE6",
        'Agrave': "\xC0",
        'agrave': "\xE0",
        'alefsym': "\u2135",
        'Alpha': "\u0391",
        'alpha': "\u03B1",
        'amp': '&',
        'and': "\u2227",
        'ang': "\u2220",
        'apos': "'",
        'Aring': "\xC5",
        'aring': "\xE5",
        'asymp': "\u2248",
        'Atilde': "\xC3",
        'atilde': "\xE3",
        'Auml': "\xC4",
        'auml': "\xE4",
        'bdquo': "\u201E",
        'Beta': "\u0392",
        'beta': "\u03B2",
        'brvbar': "\xA6",
        'bull': "\u2022",
        'cap': "\u2229",
        'Ccedil': "\xC7",
        'ccedil': "\xE7",
        'cedil': "\xB8",
        'cent': "\xA2",
        'Chi': "\u03A7",
        'chi': "\u03C7",
        'circ': "\u02C6",
        'clubs': "\u2663",
        'cong': "\u2245",
        'copy': "\xA9",
        'crarr': "\u21B5",
        'cup': "\u222A",
        'curren': "\xA4",
        'dagger': "\u2020",
        'Dagger': "\u2021",
        'darr': "\u2193",
        'dArr': "\u21D3",
        'deg': "\xB0",
        'Delta': "\u0394",
        'delta': "\u03B4",
        'diams': "\u2666",
        'divide': "\xF7",
        'Eacute': "\xC9",
        'eacute': "\xE9",
        'Ecirc': "\xCA",
        'ecirc': "\xEA",
        'Egrave': "\xC8",
        'egrave': "\xE8",
        'empty': "\u2205",
        'emsp': "\u2003",
        'ensp': "\u2002",
        'Epsilon': "\u0395",
        'epsilon': "\u03B5",
        'equiv': "\u2261",
        'Eta': "\u0397",
        'eta': "\u03B7",
        'ETH': "\xD0",
        'eth': "\xF0",
        'Euml': "\xCB",
        'euml': "\xEB",
        'euro': "\u20AC",
        'exist': "\u2203",
        'fnof': "\u0192",
        'forall': "\u2200",
        'frac12': "\xBD",
        'frac14': "\xBC",
        'frac34': "\xBE",
        'frasl': "\u2044",
        'Gamma': "\u0393",
        'gamma': "\u03B3",
        'ge': "\u2265",
        'gt': '>',
        'harr': "\u2194",
        'hArr': "\u21D4",
        'hearts': "\u2665",
        'hellip': "\u2026",
        'Iacute': "\xCD",
        'iacute': "\xED",
        'Icirc': "\xCE",
        'icirc': "\xEE",
        'iexcl': "\xA1",
        'Igrave': "\xCC",
        'igrave': "\xEC",
        'image': "\u2111",
        'infin': "\u221E",
        'int': "\u222B",
        'Iota': "\u0399",
        'iota': "\u03B9",
        'iquest': "\xBF",
        'isin': "\u2208",
        'Iuml': "\xCF",
        'iuml': "\xEF",
        'Kappa': "\u039A",
        'kappa': "\u03BA",
        'Lambda': "\u039B",
        'lambda': "\u03BB",
        'lang': "\u27E8",
        'laquo': "\xAB",
        'larr': "\u2190",
        'lArr': "\u21D0",
        'lceil': "\u2308",
        'ldquo': "\u201C",
        'le': "\u2264",
        'lfloor': "\u230A",
        'lowast': "\u2217",
        'loz': "\u25CA",
        'lrm': "\u200E",
        'lsaquo': "\u2039",
        'lsquo': "\u2018",
        'lt': '<',
        'macr': "\xAF",
        'mdash': "\u2014",
        'micro': "\xB5",
        'middot': "\xB7",
        'minus': "\u2212",
        'Mu': "\u039C",
        'mu': "\u03BC",
        'nabla': "\u2207",
        'nbsp': "\xA0",
        'ndash': "\u2013",
        'ne': "\u2260",
        'ni': "\u220B",
        'not': "\xAC",
        'notin': "\u2209",
        'nsub': "\u2284",
        'Ntilde': "\xD1",
        'ntilde': "\xF1",
        'Nu': "\u039D",
        'nu': "\u03BD",
        'Oacute': "\xD3",
        'oacute': "\xF3",
        'Ocirc': "\xD4",
        'ocirc': "\xF4",
        'OElig': "\u0152",
        'oelig': "\u0153",
        'Ograve': "\xD2",
        'ograve': "\xF2",
        'oline': "\u203E",
        'Omega': "\u03A9",
        'omega': "\u03C9",
        'Omicron': "\u039F",
        'omicron': "\u03BF",
        'oplus': "\u2295",
        'or': "\u2228",
        'ordf': "\xAA",
        'ordm': "\xBA",
        'Oslash': "\xD8",
        'oslash': "\xF8",
        'Otilde': "\xD5",
        'otilde': "\xF5",
        'otimes': "\u2297",
        'Ouml': "\xD6",
        'ouml': "\xF6",
        'para': "\xB6",
        'permil': "\u2030",
        'perp': "\u22A5",
        'Phi': "\u03A6",
        'phi': "\u03C6",
        'Pi': "\u03A0",
        'pi': "\u03C0",
        'piv': "\u03D6",
        'plusmn': "\xB1",
        'pound': "\xA3",
        'prime': "\u2032",
        'Prime': "\u2033",
        'prod': "\u220F",
        'prop': "\u221D",
        'Psi': "\u03A8",
        'psi': "\u03C8",
        'quot': "\"",
        'radic': "\u221A",
        'rang': "\u27E9",
        'raquo': "\xBB",
        'rarr': "\u2192",
        'rArr': "\u21D2",
        'rceil': "\u2309",
        'rdquo': "\u201D",
        'real': "\u211C",
        'reg': "\xAE",
        'rfloor': "\u230B",
        'Rho': "\u03A1",
        'rho': "\u03C1",
        'rlm': "\u200F",
        'rsaquo': "\u203A",
        'rsquo': "\u2019",
        'sbquo': "\u201A",
        'Scaron': "\u0160",
        'scaron': "\u0161",
        'sdot': "\u22C5",
        'sect': "\xA7",
        'shy': "\xAD",
        'Sigma': "\u03A3",
        'sigma': "\u03C3",
        'sigmaf': "\u03C2",
        'sim': "\u223C",
        'spades': "\u2660",
        'sub': "\u2282",
        'sube': "\u2286",
        'sum': "\u2211",
        'sup': "\u2283",
        'sup1': "\xB9",
        'sup2': "\xB2",
        'sup3': "\xB3",
        'supe': "\u2287",
        'szlig': "\xDF",
        'Tau': "\u03A4",
        'tau': "\u03C4",
        'there4': "\u2234",
        'Theta': "\u0398",
        'theta': "\u03B8",
        'thetasym': "\u03D1",
        'thinsp': "\u2009",
        'THORN': "\xDE",
        'thorn': "\xFE",
        'tilde': "\u02DC",
        'times': "\xD7",
        'trade': "\u2122",
        'Uacute': "\xDA",
        'uacute': "\xFA",
        'uarr': "\u2191",
        'uArr': "\u21D1",
        'Ucirc': "\xDB",
        'ucirc': "\xFB",
        'Ugrave': "\xD9",
        'ugrave': "\xF9",
        'uml': "\xA8",
        'upsih': "\u03D2",
        'Upsilon': "\u03A5",
        'upsilon': "\u03C5",
        'Uuml': "\xDC",
        'uuml': "\xFC",
        'weierp': "\u2118",
        'Xi': "\u039E",
        'xi': "\u03BE",
        'Yacute': "\xDD",
        'yacute': "\xFD",
        'yen': "\xA5",
        'yuml': "\xFF",
        'Yuml': "\u0178",
        'Zeta': "\u0396",
        'zeta': "\u03B6",
        'zwj': "\u200D",
        'zwnj': "\u200C"
      }; // The &ngsp; pseudo-entity is denoting a space. see:
      // https://github.com/dart-lang/angular/blob/0bb611387d29d65b5af7f9d2515ab571fd3fbee4/_tests/test/compiler/preserve_whitespace_test.dart

      var NGSP_UNICODE = "\uE500";
      NAMED_ENTITIES['ngsp'] = NGSP_UNICODE;
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var HtmlTagDefinition = /*#__PURE__*/function () {
        function HtmlTagDefinition() {
          var _this124 = this;

          var _ref56 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
              closedByChildren = _ref56.closedByChildren,
              implicitNamespacePrefix = _ref56.implicitNamespacePrefix,
              _ref56$contentType = _ref56.contentType,
              contentType = _ref56$contentType === void 0 ? TagContentType.PARSABLE_DATA : _ref56$contentType,
              _ref56$closedByParent = _ref56.closedByParent,
              closedByParent = _ref56$closedByParent === void 0 ? false : _ref56$closedByParent,
              _ref56$isVoid = _ref56.isVoid,
              isVoid = _ref56$isVoid === void 0 ? false : _ref56$isVoid,
              _ref56$ignoreFirstLf = _ref56.ignoreFirstLf,
              ignoreFirstLf = _ref56$ignoreFirstLf === void 0 ? false : _ref56$ignoreFirstLf,
              _ref56$preventNamespa = _ref56.preventNamespaceInheritance,
              preventNamespaceInheritance = _ref56$preventNamespa === void 0 ? false : _ref56$preventNamespa;

          _classCallCheck2(this, HtmlTagDefinition);

          this.closedByChildren = {};
          this.closedByParent = false;
          this.canSelfClose = false;

          if (closedByChildren && closedByChildren.length > 0) {
            closedByChildren.forEach(function (tagName) {
              return _this124.closedByChildren[tagName] = true;
            });
          }

          this.isVoid = isVoid;
          this.closedByParent = closedByParent || isVoid;
          this.implicitNamespacePrefix = implicitNamespacePrefix || null;
          this.contentType = contentType;
          this.ignoreFirstLf = ignoreFirstLf;
          this.preventNamespaceInheritance = preventNamespaceInheritance;
        }

        _createClass2(HtmlTagDefinition, [{
          key: "isClosedByChild",
          value: function isClosedByChild(name) {
            return this.isVoid || name.toLowerCase() in this.closedByChildren;
          }
        }, {
          key: "getContentType",
          value: function getContentType(prefix) {
            if (typeof this.contentType === 'object') {
              var overrideType = prefix == null ? undefined : this.contentType[prefix];
              return overrideType !== null && overrideType !== void 0 ? overrideType : this.contentType["default"];
            }

            return this.contentType;
          }
        }]);

        return HtmlTagDefinition;
      }();

      var _DEFAULT_TAG_DEFINITION; // see https://www.w3.org/TR/html51/syntax.html#optional-tags
      // This implementation does not fully conform to the HTML5 spec.


      var TAG_DEFINITIONS;

      function getHtmlTagDefinition(tagName) {
        var _a, _b;

        if (!TAG_DEFINITIONS) {
          _DEFAULT_TAG_DEFINITION = new HtmlTagDefinition();
          TAG_DEFINITIONS = {
            'base': new HtmlTagDefinition({
              isVoid: true
            }),
            'meta': new HtmlTagDefinition({
              isVoid: true
            }),
            'area': new HtmlTagDefinition({
              isVoid: true
            }),
            'embed': new HtmlTagDefinition({
              isVoid: true
            }),
            'link': new HtmlTagDefinition({
              isVoid: true
            }),
            'img': new HtmlTagDefinition({
              isVoid: true
            }),
            'input': new HtmlTagDefinition({
              isVoid: true
            }),
            'param': new HtmlTagDefinition({
              isVoid: true
            }),
            'hr': new HtmlTagDefinition({
              isVoid: true
            }),
            'br': new HtmlTagDefinition({
              isVoid: true
            }),
            'source': new HtmlTagDefinition({
              isVoid: true
            }),
            'track': new HtmlTagDefinition({
              isVoid: true
            }),
            'wbr': new HtmlTagDefinition({
              isVoid: true
            }),
            'p': new HtmlTagDefinition({
              closedByChildren: ['address', 'article', 'aside', 'blockquote', 'div', 'dl', 'fieldset', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr', 'main', 'nav', 'ol', 'p', 'pre', 'section', 'table', 'ul'],
              closedByParent: true
            }),
            'thead': new HtmlTagDefinition({
              closedByChildren: ['tbody', 'tfoot']
            }),
            'tbody': new HtmlTagDefinition({
              closedByChildren: ['tbody', 'tfoot'],
              closedByParent: true
            }),
            'tfoot': new HtmlTagDefinition({
              closedByChildren: ['tbody'],
              closedByParent: true
            }),
            'tr': new HtmlTagDefinition({
              closedByChildren: ['tr'],
              closedByParent: true
            }),
            'td': new HtmlTagDefinition({
              closedByChildren: ['td', 'th'],
              closedByParent: true
            }),
            'th': new HtmlTagDefinition({
              closedByChildren: ['td', 'th'],
              closedByParent: true
            }),
            'col': new HtmlTagDefinition({
              isVoid: true
            }),
            'svg': new HtmlTagDefinition({
              implicitNamespacePrefix: 'svg'
            }),
            'foreignObject': new HtmlTagDefinition({
              // Usually the implicit namespace here would be redundant since it will be inherited from
              // the parent `svg`, but we have to do it for `foreignObject`, because the way the parser
              // works is that the parent node of an end tag is its own start tag which means that
              // the `preventNamespaceInheritance` on `foreignObject` would have it default to the
              // implicit namespace which is `html`, unless specified otherwise.
              implicitNamespacePrefix: 'svg',
              // We want to prevent children of foreignObject from inheriting its namespace, because
              // the point of the element is to allow nodes from other namespaces to be inserted.
              preventNamespaceInheritance: true
            }),
            'math': new HtmlTagDefinition({
              implicitNamespacePrefix: 'math'
            }),
            'li': new HtmlTagDefinition({
              closedByChildren: ['li'],
              closedByParent: true
            }),
            'dt': new HtmlTagDefinition({
              closedByChildren: ['dt', 'dd']
            }),
            'dd': new HtmlTagDefinition({
              closedByChildren: ['dt', 'dd'],
              closedByParent: true
            }),
            'rb': new HtmlTagDefinition({
              closedByChildren: ['rb', 'rt', 'rtc', 'rp'],
              closedByParent: true
            }),
            'rt': new HtmlTagDefinition({
              closedByChildren: ['rb', 'rt', 'rtc', 'rp'],
              closedByParent: true
            }),
            'rtc': new HtmlTagDefinition({
              closedByChildren: ['rb', 'rtc', 'rp'],
              closedByParent: true
            }),
            'rp': new HtmlTagDefinition({
              closedByChildren: ['rb', 'rt', 'rtc', 'rp'],
              closedByParent: true
            }),
            'optgroup': new HtmlTagDefinition({
              closedByChildren: ['optgroup'],
              closedByParent: true
            }),
            'option': new HtmlTagDefinition({
              closedByChildren: ['option', 'optgroup'],
              closedByParent: true
            }),
            'pre': new HtmlTagDefinition({
              ignoreFirstLf: true
            }),
            'listing': new HtmlTagDefinition({
              ignoreFirstLf: true
            }),
            'style': new HtmlTagDefinition({
              contentType: TagContentType.RAW_TEXT
            }),
            'script': new HtmlTagDefinition({
              contentType: TagContentType.RAW_TEXT
            }),
            'title': new HtmlTagDefinition({
              // The browser supports two separate `title` tags which have to use
              // a different content type: `HTMLTitleElement` and `SVGTitleElement`
              contentType: {
                "default": TagContentType.ESCAPABLE_RAW_TEXT,
                svg: TagContentType.PARSABLE_DATA
              }
            }),
            'textarea': new HtmlTagDefinition({
              contentType: TagContentType.ESCAPABLE_RAW_TEXT,
              ignoreFirstLf: true
            })
          };
        } // We have to make both a case-sensitive and a case-insesitive lookup, because
        // HTML tag names are case insensitive, whereas some SVG tags are case sensitive.


        return (_b = (_a = TAG_DEFINITIONS[tagName]) !== null && _a !== void 0 ? _a : TAG_DEFINITIONS[tagName.toLowerCase()]) !== null && _b !== void 0 ? _b : _DEFAULT_TAG_DEFINITION;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var _SELECTOR_REGEXP = new RegExp('(\\:not\\()|' + // 1: ":not("
      '(([\\.\\#]?)[-\\w]+)|' + // 2: "tag"; 3: "."/"#";
      // "-" should appear first in the regexp below as FF31 parses "[.-\w]" as a range
      // 4: attribute; 5: attribute_string; 6: attribute_value
      '(?:\\[([-.\\w*]+)(?:=([\"\']?)([^\\]\"\']*)\\5)?\\])|' + // "[name]", "[name=value]",
      // "[name="value"]",
      // "[name='value']"
      '(\\))|' + // 7: ")"
      '(\\s*,\\s*)', // 8: ","
      'g');
      /**
       * A css selector contains an element name,
       * css classes and attribute/value pairs with the purpose
       * of selecting subsets out of them.
       */


      var CssSelector = /*#__PURE__*/function () {
        function CssSelector() {
          _classCallCheck2(this, CssSelector);

          this.element = null;
          this.classNames = [];
          /**
           * The selectors are encoded in pairs where:
           * - even locations are attribute names
           * - odd locations are attribute values.
           *
           * Example:
           * Selector: `[key1=value1][key2]` would parse to:
           * ```
           * ['key1', 'value1', 'key2', '']
           * ```
           */

          this.attrs = [];
          this.notSelectors = [];
        }

        _createClass2(CssSelector, [{
          key: "isElementSelector",
          value: function isElementSelector() {
            return this.hasElementSelector() && this.classNames.length == 0 && this.attrs.length == 0 && this.notSelectors.length === 0;
          }
        }, {
          key: "hasElementSelector",
          value: function hasElementSelector() {
            return !!this.element;
          }
        }, {
          key: "setElement",
          value: function setElement() {
            var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
            this.element = element;
          }
          /** Gets a template string for an element that matches the selector. */

        }, {
          key: "getMatchingElementTemplate",
          value: function getMatchingElementTemplate() {
            var tagName = this.element || 'div';
            var classAttr = this.classNames.length > 0 ? " class=\"".concat(this.classNames.join(' '), "\"") : '';
            var attrs = '';

            for (var i = 0; i < this.attrs.length; i += 2) {
              var attrName = this.attrs[i];
              var attrValue = this.attrs[i + 1] !== '' ? "=\"".concat(this.attrs[i + 1], "\"") : '';
              attrs += " ".concat(attrName).concat(attrValue);
            }

            return getHtmlTagDefinition(tagName).isVoid ? "<".concat(tagName).concat(classAttr).concat(attrs, "/>") : "<".concat(tagName).concat(classAttr).concat(attrs, "></").concat(tagName, ">");
          }
        }, {
          key: "getAttrs",
          value: function getAttrs() {
            var result = [];

            if (this.classNames.length > 0) {
              result.push('class', this.classNames.join(' '));
            }

            return result.concat(this.attrs);
          }
        }, {
          key: "addAttribute",
          value: function addAttribute(name) {
            var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
            this.attrs.push(name, value && value.toLowerCase() || '');
          }
        }, {
          key: "addClassName",
          value: function addClassName(name) {
            this.classNames.push(name.toLowerCase());
          }
        }, {
          key: "toString",
          value: function toString() {
            var res = this.element || '';

            if (this.classNames) {
              this.classNames.forEach(function (klass) {
                return res += ".".concat(klass);
              });
            }

            if (this.attrs) {
              for (var i = 0; i < this.attrs.length; i += 2) {
                var name = this.attrs[i];
                var value = this.attrs[i + 1];
                res += "[".concat(name).concat(value ? '=' + value : '', "]");
              }
            }

            this.notSelectors.forEach(function (notSelector) {
              return res += ":not(".concat(notSelector, ")");
            });
            return res;
          }
        }], [{
          key: "parse",
          value: function parse(selector) {
            var results = [];

            var _addResult = function _addResult(res, cssSel) {
              if (cssSel.notSelectors.length > 0 && !cssSel.element && cssSel.classNames.length == 0 && cssSel.attrs.length == 0) {
                cssSel.element = '*';
              }

              res.push(cssSel);
            };

            var cssSelector = new CssSelector();
            var match;
            var current = cssSelector;
            var inNot = false;
            _SELECTOR_REGEXP.lastIndex = 0;

            while (match = _SELECTOR_REGEXP.exec(selector)) {
              if (match[1
              /* NOT */
              ]) {
                if (inNot) {
                  throw new Error('Nesting :not in a selector is not allowed');
                }

                inNot = true;
                current = new CssSelector();
                cssSelector.notSelectors.push(current);
              }

              var tag = match[2
              /* TAG */
              ];

              if (tag) {
                var prefix = match[3
                /* PREFIX */
                ];

                if (prefix === '#') {
                  // #hash
                  current.addAttribute('id', tag.substr(1));
                } else if (prefix === '.') {
                  // Class
                  current.addClassName(tag.substr(1));
                } else {
                  // Element
                  current.setElement(tag);
                }
              }

              var attribute = match[4
              /* ATTRIBUTE */
              ];

              if (attribute) {
                current.addAttribute(attribute, match[6
                /* ATTRIBUTE_VALUE */
                ]);
              }

              if (match[7
              /* NOT_END */
              ]) {
                inNot = false;
                current = cssSelector;
              }

              if (match[8
              /* SEPARATOR */
              ]) {
                if (inNot) {
                  throw new Error('Multiple selectors in :not are not supported');
                }

                _addResult(results, cssSelector);

                cssSelector = current = new CssSelector();
              }
            }

            _addResult(results, cssSelector);

            return results;
          }
        }]);

        return CssSelector;
      }();
      /**
       * Reads a list of CssSelectors and allows to calculate which ones
       * are contained in a given CssSelector.
       */


      var SelectorMatcher = /*#__PURE__*/function () {
        function SelectorMatcher() {
          _classCallCheck2(this, SelectorMatcher);

          this._elementMap = new Map();
          this._elementPartialMap = new Map();
          this._classMap = new Map();
          this._classPartialMap = new Map();
          this._attrValueMap = new Map();
          this._attrValuePartialMap = new Map();
          this._listContexts = [];
        }

        _createClass2(SelectorMatcher, [{
          key: "addSelectables",
          value: function addSelectables(cssSelectors, callbackCtxt) {
            var listContext = null;

            if (cssSelectors.length > 1) {
              listContext = new SelectorListContext(cssSelectors);

              this._listContexts.push(listContext);
            }

            for (var i = 0; i < cssSelectors.length; i++) {
              this._addSelectable(cssSelectors[i], callbackCtxt, listContext);
            }
          }
          /**
           * Add an object that can be found later on by calling `match`.
           * @param cssSelector A css selector
           * @param callbackCtxt An opaque object that will be given to the callback of the `match` function
           */

        }, {
          key: "_addSelectable",
          value: function _addSelectable(cssSelector, callbackCtxt, listContext) {
            var matcher = this;
            var element = cssSelector.element;
            var classNames = cssSelector.classNames;
            var attrs = cssSelector.attrs;
            var selectable = new SelectorContext(cssSelector, callbackCtxt, listContext);

            if (element) {
              var isTerminal = attrs.length === 0 && classNames.length === 0;

              if (isTerminal) {
                this._addTerminal(matcher._elementMap, element, selectable);
              } else {
                matcher = this._addPartial(matcher._elementPartialMap, element);
              }
            }

            if (classNames) {
              for (var i = 0; i < classNames.length; i++) {
                var _isTerminal = attrs.length === 0 && i === classNames.length - 1;

                var className = classNames[i];

                if (_isTerminal) {
                  this._addTerminal(matcher._classMap, className, selectable);
                } else {
                  matcher = this._addPartial(matcher._classPartialMap, className);
                }
              }
            }

            if (attrs) {
              for (var _i3 = 0; _i3 < attrs.length; _i3 += 2) {
                var _isTerminal2 = _i3 === attrs.length - 2;

                var name = attrs[_i3];
                var value = attrs[_i3 + 1];

                if (_isTerminal2) {
                  var terminalMap = matcher._attrValueMap;
                  var terminalValuesMap = terminalMap.get(name);

                  if (!terminalValuesMap) {
                    terminalValuesMap = new Map();
                    terminalMap.set(name, terminalValuesMap);
                  }

                  this._addTerminal(terminalValuesMap, value, selectable);
                } else {
                  var partialMap = matcher._attrValuePartialMap;
                  var partialValuesMap = partialMap.get(name);

                  if (!partialValuesMap) {
                    partialValuesMap = new Map();
                    partialMap.set(name, partialValuesMap);
                  }

                  matcher = this._addPartial(partialValuesMap, value);
                }
              }
            }
          }
        }, {
          key: "_addTerminal",
          value: function _addTerminal(map, name, selectable) {
            var terminalList = map.get(name);

            if (!terminalList) {
              terminalList = [];
              map.set(name, terminalList);
            }

            terminalList.push(selectable);
          }
        }, {
          key: "_addPartial",
          value: function _addPartial(map, name) {
            var matcher = map.get(name);

            if (!matcher) {
              matcher = new SelectorMatcher();
              map.set(name, matcher);
            }

            return matcher;
          }
          /**
           * Find the objects that have been added via `addSelectable`
           * whose css selector is contained in the given css selector.
           * @param cssSelector A css selector
           * @param matchedCallback This callback will be called with the object handed into `addSelectable`
           * @return boolean true if a match was found
           */

        }, {
          key: "match",
          value: function match(cssSelector, matchedCallback) {
            var result = false;
            var element = cssSelector.element;
            var classNames = cssSelector.classNames;
            var attrs = cssSelector.attrs;

            for (var i = 0; i < this._listContexts.length; i++) {
              this._listContexts[i].alreadyMatched = false;
            }

            result = this._matchTerminal(this._elementMap, element, cssSelector, matchedCallback) || result;
            result = this._matchPartial(this._elementPartialMap, element, cssSelector, matchedCallback) || result;

            if (classNames) {
              for (var _i4 = 0; _i4 < classNames.length; _i4++) {
                var className = classNames[_i4];
                result = this._matchTerminal(this._classMap, className, cssSelector, matchedCallback) || result;
                result = this._matchPartial(this._classPartialMap, className, cssSelector, matchedCallback) || result;
              }
            }

            if (attrs) {
              for (var _i5 = 0; _i5 < attrs.length; _i5 += 2) {
                var name = attrs[_i5];
                var value = attrs[_i5 + 1];

                var terminalValuesMap = this._attrValueMap.get(name);

                if (value) {
                  result = this._matchTerminal(terminalValuesMap, '', cssSelector, matchedCallback) || result;
                }

                result = this._matchTerminal(terminalValuesMap, value, cssSelector, matchedCallback) || result;

                var partialValuesMap = this._attrValuePartialMap.get(name);

                if (value) {
                  result = this._matchPartial(partialValuesMap, '', cssSelector, matchedCallback) || result;
                }

                result = this._matchPartial(partialValuesMap, value, cssSelector, matchedCallback) || result;
              }
            }

            return result;
          }
          /** @internal */

        }, {
          key: "_matchTerminal",
          value: function _matchTerminal(map, name, cssSelector, matchedCallback) {
            if (!map || typeof name !== 'string') {
              return false;
            }

            var selectables = map.get(name) || [];
            var starSelectables = map.get('*');

            if (starSelectables) {
              selectables = selectables.concat(starSelectables);
            }

            if (selectables.length === 0) {
              return false;
            }

            var selectable;
            var result = false;

            for (var i = 0; i < selectables.length; i++) {
              selectable = selectables[i];
              result = selectable.finalize(cssSelector, matchedCallback) || result;
            }

            return result;
          }
          /** @internal */

        }, {
          key: "_matchPartial",
          value: function _matchPartial(map, name, cssSelector, matchedCallback) {
            if (!map || typeof name !== 'string') {
              return false;
            }

            var nestedSelector = map.get(name);

            if (!nestedSelector) {
              return false;
            } // TODO(perf): get rid of recursion and measure again
            // TODO(perf): don't pass the whole selector into the recursion,
            // but only the not processed parts


            return nestedSelector.match(cssSelector, matchedCallback);
          }
        }], [{
          key: "createNotMatcher",
          value: function createNotMatcher(notSelectors) {
            var notMatcher = new SelectorMatcher();
            notMatcher.addSelectables(notSelectors, null);
            return notMatcher;
          }
        }]);

        return SelectorMatcher;
      }();

      var SelectorListContext = function SelectorListContext(selectors) {
        _classCallCheck2(this, SelectorListContext);

        this.selectors = selectors;
        this.alreadyMatched = false;
      }; // Store context to pass back selector and context when a selector is matched


      var SelectorContext = /*#__PURE__*/function () {
        function SelectorContext(selector, cbContext, listContext) {
          _classCallCheck2(this, SelectorContext);

          this.selector = selector;
          this.cbContext = cbContext;
          this.listContext = listContext;
          this.notSelectors = selector.notSelectors;
        }

        _createClass2(SelectorContext, [{
          key: "finalize",
          value: function finalize(cssSelector, callback) {
            var result = true;

            if (this.notSelectors.length > 0 && (!this.listContext || !this.listContext.alreadyMatched)) {
              var notMatcher = SelectorMatcher.createNotMatcher(this.notSelectors);
              result = !notMatcher.match(cssSelector, null);
            }

            if (result && callback && (!this.listContext || !this.listContext.alreadyMatched)) {
              if (this.listContext) {
                this.listContext.alreadyMatched = true;
              }

              callback(this.selector, this.cbContext);
            }

            return result;
          }
        }]);

        return SelectorContext;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var createInject = makeMetadataFactory('Inject', function (token) {
        return {
          token: token
        };
      });
      var createInjectionToken = makeMetadataFactory('InjectionToken', function (desc) {
        return {
          _desc: desc,
          ɵprov: undefined
        };
      });
      var createAttribute = makeMetadataFactory('Attribute', function (attributeName) {
        return {
          attributeName: attributeName
        };
      }); // Stores the default value of `emitDistinctChangesOnly` when the `emitDistinctChangesOnly` is not
      // explicitly set. This value will be changed to `true` in v12.
      // TODO(misko): switch the default in v12 to `true`. See: packages/core/src/metadata/di.ts

      var emitDistinctChangesOnlyDefaultValue = false;
      var createContentChildren = makeMetadataFactory('ContentChildren', function (selector) {
        var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
        return Object.assign({
          selector: selector,
          first: false,
          isViewQuery: false,
          descendants: false,
          emitDistinctChangesOnly: emitDistinctChangesOnlyDefaultValue
        }, data);
      });
      var createContentChild = makeMetadataFactory('ContentChild', function (selector) {
        var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
        return Object.assign({
          selector: selector,
          first: true,
          isViewQuery: false,
          descendants: true
        }, data);
      });
      var createViewChildren = makeMetadataFactory('ViewChildren', function (selector) {
        var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
        return Object.assign({
          selector: selector,
          first: false,
          isViewQuery: true,
          descendants: true,
          emitDistinctChangesOnly: emitDistinctChangesOnlyDefaultValue
        }, data);
      });
      var createViewChild = makeMetadataFactory('ViewChild', function (selector, data) {
        return Object.assign({
          selector: selector,
          first: true,
          isViewQuery: true,
          descendants: true
        }, data);
      });
      var createDirective = makeMetadataFactory('Directive', function () {
        var dir = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
        return dir;
      });
      var ViewEncapsulation;

      (function (ViewEncapsulation) {
        ViewEncapsulation[ViewEncapsulation["Emulated"] = 0] = "Emulated"; // Historically the 1 value was for `Native` encapsulation which has been removed as of v11.

        ViewEncapsulation[ViewEncapsulation["None"] = 2] = "None";
        ViewEncapsulation[ViewEncapsulation["ShadowDom"] = 3] = "ShadowDom";
      })(ViewEncapsulation || (ViewEncapsulation = {}));

      var ChangeDetectionStrategy;

      (function (ChangeDetectionStrategy) {
        ChangeDetectionStrategy[ChangeDetectionStrategy["OnPush"] = 0] = "OnPush";
        ChangeDetectionStrategy[ChangeDetectionStrategy["Default"] = 1] = "Default";
      })(ChangeDetectionStrategy || (ChangeDetectionStrategy = {}));

      var createComponent = makeMetadataFactory('Component', function () {
        var c = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
        return Object.assign({
          changeDetection: ChangeDetectionStrategy.Default
        }, c);
      });
      var createPipe = makeMetadataFactory('Pipe', function (p) {
        return Object.assign({
          pure: true
        }, p);
      });
      var createInput = makeMetadataFactory('Input', function (bindingPropertyName) {
        return {
          bindingPropertyName: bindingPropertyName
        };
      });
      var createOutput = makeMetadataFactory('Output', function (bindingPropertyName) {
        return {
          bindingPropertyName: bindingPropertyName
        };
      });
      var createHostBinding = makeMetadataFactory('HostBinding', function (hostPropertyName) {
        return {
          hostPropertyName: hostPropertyName
        };
      });
      var createHostListener = makeMetadataFactory('HostListener', function (eventName, args) {
        return {
          eventName: eventName,
          args: args
        };
      });
      var createNgModule = makeMetadataFactory('NgModule', function (ngModule) {
        return ngModule;
      });
      var createInjectable = makeMetadataFactory('Injectable', function () {
        var injectable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
        return injectable;
      });
      var CUSTOM_ELEMENTS_SCHEMA = {
        name: 'custom-elements'
      };
      var NO_ERRORS_SCHEMA = {
        name: 'no-errors-schema'
      };
      var createOptional = makeMetadataFactory('Optional');
      var createSelf = makeMetadataFactory('Self');
      var createSkipSelf = makeMetadataFactory('SkipSelf');
      var createHost = makeMetadataFactory('Host');
      var Type = Function;
      var SecurityContext;

      (function (SecurityContext) {
        SecurityContext[SecurityContext["NONE"] = 0] = "NONE";
        SecurityContext[SecurityContext["HTML"] = 1] = "HTML";
        SecurityContext[SecurityContext["STYLE"] = 2] = "STYLE";
        SecurityContext[SecurityContext["SCRIPT"] = 3] = "SCRIPT";
        SecurityContext[SecurityContext["URL"] = 4] = "URL";
        SecurityContext[SecurityContext["RESOURCE_URL"] = 5] = "RESOURCE_URL";
      })(SecurityContext || (SecurityContext = {}));

      var MissingTranslationStrategy;

      (function (MissingTranslationStrategy) {
        MissingTranslationStrategy[MissingTranslationStrategy["Error"] = 0] = "Error";
        MissingTranslationStrategy[MissingTranslationStrategy["Warning"] = 1] = "Warning";
        MissingTranslationStrategy[MissingTranslationStrategy["Ignore"] = 2] = "Ignore";
      })(MissingTranslationStrategy || (MissingTranslationStrategy = {}));

      function makeMetadataFactory(name, props) {
        // This must be declared as a function, not a fat arrow, so that ES2015 devmode produces code
        // that works with the static_reflector.ts in the ViewEngine compiler.
        // In particular, `_registerDecoratorOrConstructor` assumes that the value returned here can be
        // new'ed.
        function factory() {
          var values = props ? props.apply(void 0, arguments) : {};
          return Object.assign({
            ngMetadataName: name
          }, values);
        }

        factory.isTypeOf = function (obj) {
          return obj && obj.ngMetadataName === name;
        };

        factory.ngMetadataName = name;
        return factory;
      }

      function parserSelectorToSimpleSelector(selector) {
        var classes = selector.classNames && selector.classNames.length ? [8
        /* CLASS */
        ].concat(_toConsumableArray(selector.classNames)) : [];
        var elementName = selector.element && selector.element !== '*' ? selector.element : '';
        return [elementName].concat(_toConsumableArray(selector.attrs), _toConsumableArray(classes));
      }

      function parserSelectorToNegativeSelector(selector) {
        var classes = selector.classNames && selector.classNames.length ? [8
        /* CLASS */
        ].concat(_toConsumableArray(selector.classNames)) : [];

        if (selector.element) {
          return [1
          /* NOT */
          | 4
          /* ELEMENT */
          , selector.element].concat(_toConsumableArray(selector.attrs), _toConsumableArray(classes));
        } else if (selector.attrs.length) {
          return [1
          /* NOT */
          | 2
          /* ATTRIBUTE */
          ].concat(_toConsumableArray(selector.attrs), _toConsumableArray(classes));
        } else {
          return selector.classNames && selector.classNames.length ? [1
          /* NOT */
          | 8
          /* CLASS */
          ].concat(_toConsumableArray(selector.classNames)) : [];
        }
      }

      function parserSelectorToR3Selector(selector) {
        var positive = parserSelectorToSimpleSelector(selector);
        var negative = selector.notSelectors && selector.notSelectors.length ? selector.notSelectors.map(function (notSelector) {
          return parserSelectorToNegativeSelector(notSelector);
        }) : [];
        return positive.concat.apply(positive, _toConsumableArray(negative));
      }

      function parseSelectorToR3Selector(selector) {
        return selector ? CssSelector.parse(selector).map(parserSelectorToR3Selector) : [];
      }

      var core = /*#__PURE__*/Object.freeze({
        __proto__: null,
        createInject: createInject,
        createInjectionToken: createInjectionToken,
        createAttribute: createAttribute,
        emitDistinctChangesOnlyDefaultValue: emitDistinctChangesOnlyDefaultValue,
        createContentChildren: createContentChildren,
        createContentChild: createContentChild,
        createViewChildren: createViewChildren,
        createViewChild: createViewChild,
        createDirective: createDirective,

        get ViewEncapsulation() {
          return ViewEncapsulation;
        },

        get ChangeDetectionStrategy() {
          return ChangeDetectionStrategy;
        },

        createComponent: createComponent,
        createPipe: createPipe,
        createInput: createInput,
        createOutput: createOutput,
        createHostBinding: createHostBinding,
        createHostListener: createHostListener,
        createNgModule: createNgModule,
        createInjectable: createInjectable,
        CUSTOM_ELEMENTS_SCHEMA: CUSTOM_ELEMENTS_SCHEMA,
        NO_ERRORS_SCHEMA: NO_ERRORS_SCHEMA,
        createOptional: createOptional,
        createSelf: createSelf,
        createSkipSelf: createSkipSelf,
        createHost: createHost,
        Type: Type,

        get SecurityContext() {
          return SecurityContext;
        },

        get MissingTranslationStrategy() {
          return MissingTranslationStrategy;
        },

        parseSelectorToR3Selector: parseSelectorToR3Selector
      });
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      //// Types

      var TypeModifier;

      (function (TypeModifier) {
        TypeModifier[TypeModifier["Const"] = 0] = "Const";
      })(TypeModifier || (TypeModifier = {}));

      var Type$1 = /*#__PURE__*/function () {
        function Type$1() {
          var modifiers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];

          _classCallCheck2(this, Type$1);

          this.modifiers = modifiers;
        }

        _createClass2(Type$1, [{
          key: "hasModifier",
          value: function hasModifier(modifier) {
            return this.modifiers.indexOf(modifier) !== -1;
          }
        }]);

        return Type$1;
      }();

      var BuiltinTypeName;

      (function (BuiltinTypeName) {
        BuiltinTypeName[BuiltinTypeName["Dynamic"] = 0] = "Dynamic";
        BuiltinTypeName[BuiltinTypeName["Bool"] = 1] = "Bool";
        BuiltinTypeName[BuiltinTypeName["String"] = 2] = "String";
        BuiltinTypeName[BuiltinTypeName["Int"] = 3] = "Int";
        BuiltinTypeName[BuiltinTypeName["Number"] = 4] = "Number";
        BuiltinTypeName[BuiltinTypeName["Function"] = 5] = "Function";
        BuiltinTypeName[BuiltinTypeName["Inferred"] = 6] = "Inferred";
        BuiltinTypeName[BuiltinTypeName["None"] = 7] = "None";
      })(BuiltinTypeName || (BuiltinTypeName = {}));

      var BuiltinType = /*#__PURE__*/function (_Type$) {
        _inherits2(BuiltinType, _Type$);

        var _super58 = _createSuper(BuiltinType);

        function BuiltinType(name, modifiers) {
          var _this125;

          _classCallCheck2(this, BuiltinType);

          _this125 = _super58.call(this, modifiers);
          _this125.name = name;
          return _this125;
        }

        _createClass2(BuiltinType, [{
          key: "visitType",
          value: function visitType(visitor, context) {
            return visitor.visitBuiltinType(this, context);
          }
        }]);

        return BuiltinType;
      }(Type$1);

      var ExpressionType = /*#__PURE__*/function (_Type$2) {
        _inherits2(ExpressionType, _Type$2);

        var _super59 = _createSuper(ExpressionType);

        function ExpressionType(value, modifiers) {
          var _this126;

          var typeParams = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;

          _classCallCheck2(this, ExpressionType);

          _this126 = _super59.call(this, modifiers);
          _this126.value = value;
          _this126.typeParams = typeParams;
          return _this126;
        }

        _createClass2(ExpressionType, [{
          key: "visitType",
          value: function visitType(visitor, context) {
            return visitor.visitExpressionType(this, context);
          }
        }]);

        return ExpressionType;
      }(Type$1);

      var ArrayType = /*#__PURE__*/function (_Type$3) {
        _inherits2(ArrayType, _Type$3);

        var _super60 = _createSuper(ArrayType);

        function ArrayType(of, modifiers) {
          var _this127;

          _classCallCheck2(this, ArrayType);

          _this127 = _super60.call(this, modifiers);
          _this127.of = of;
          return _this127;
        }

        _createClass2(ArrayType, [{
          key: "visitType",
          value: function visitType(visitor, context) {
            return visitor.visitArrayType(this, context);
          }
        }]);

        return ArrayType;
      }(Type$1);

      var MapType = /*#__PURE__*/function (_Type$4) {
        _inherits2(MapType, _Type$4);

        var _super61 = _createSuper(MapType);

        function MapType(valueType, modifiers) {
          var _this128;

          _classCallCheck2(this, MapType);

          _this128 = _super61.call(this, modifiers);
          _this128.valueType = valueType || null;
          return _this128;
        }

        _createClass2(MapType, [{
          key: "visitType",
          value: function visitType(visitor, context) {
            return visitor.visitMapType(this, context);
          }
        }]);

        return MapType;
      }(Type$1);

      var DYNAMIC_TYPE = new BuiltinType(BuiltinTypeName.Dynamic);
      var INFERRED_TYPE = new BuiltinType(BuiltinTypeName.Inferred);
      var BOOL_TYPE = new BuiltinType(BuiltinTypeName.Bool);
      var INT_TYPE = new BuiltinType(BuiltinTypeName.Int);
      var NUMBER_TYPE = new BuiltinType(BuiltinTypeName.Number);
      var STRING_TYPE = new BuiltinType(BuiltinTypeName.String);
      var FUNCTION_TYPE = new BuiltinType(BuiltinTypeName.Function);
      var NONE_TYPE = new BuiltinType(BuiltinTypeName.None); ///// Expressions

      var UnaryOperator;

      (function (UnaryOperator) {
        UnaryOperator[UnaryOperator["Minus"] = 0] = "Minus";
        UnaryOperator[UnaryOperator["Plus"] = 1] = "Plus";
      })(UnaryOperator || (UnaryOperator = {}));

      var BinaryOperator;

      (function (BinaryOperator) {
        BinaryOperator[BinaryOperator["Equals"] = 0] = "Equals";
        BinaryOperator[BinaryOperator["NotEquals"] = 1] = "NotEquals";
        BinaryOperator[BinaryOperator["Identical"] = 2] = "Identical";
        BinaryOperator[BinaryOperator["NotIdentical"] = 3] = "NotIdentical";
        BinaryOperator[BinaryOperator["Minus"] = 4] = "Minus";
        BinaryOperator[BinaryOperator["Plus"] = 5] = "Plus";
        BinaryOperator[BinaryOperator["Divide"] = 6] = "Divide";
        BinaryOperator[BinaryOperator["Multiply"] = 7] = "Multiply";
        BinaryOperator[BinaryOperator["Modulo"] = 8] = "Modulo";
        BinaryOperator[BinaryOperator["And"] = 9] = "And";
        BinaryOperator[BinaryOperator["Or"] = 10] = "Or";
        BinaryOperator[BinaryOperator["BitwiseAnd"] = 11] = "BitwiseAnd";
        BinaryOperator[BinaryOperator["Lower"] = 12] = "Lower";
        BinaryOperator[BinaryOperator["LowerEquals"] = 13] = "LowerEquals";
        BinaryOperator[BinaryOperator["Bigger"] = 14] = "Bigger";
        BinaryOperator[BinaryOperator["BiggerEquals"] = 15] = "BiggerEquals";
      })(BinaryOperator || (BinaryOperator = {}));

      function nullSafeIsEquivalent(base, other) {
        if (base == null || other == null) {
          return base == other;
        }

        return base.isEquivalent(other);
      }

      function areAllEquivalentPredicate(base, other, equivalentPredicate) {
        var len = base.length;

        if (len !== other.length) {
          return false;
        }

        for (var i = 0; i < len; i++) {
          if (!equivalentPredicate(base[i], other[i])) {
            return false;
          }
        }

        return true;
      }

      function areAllEquivalent(base, other) {
        return areAllEquivalentPredicate(base, other, function (baseElement, otherElement) {
          return baseElement.isEquivalent(otherElement);
        });
      }

      var Expression = /*#__PURE__*/function () {
        function Expression(type, sourceSpan) {
          _classCallCheck2(this, Expression);

          this.type = type || null;
          this.sourceSpan = sourceSpan || null;
        }

        _createClass2(Expression, [{
          key: "prop",
          value: function prop(name, sourceSpan) {
            return new ReadPropExpr(this, name, null, sourceSpan);
          }
        }, {
          key: "key",
          value: function key(index, type, sourceSpan) {
            return new ReadKeyExpr(this, index, type, sourceSpan);
          }
        }, {
          key: "callMethod",
          value: function callMethod(name, params, sourceSpan) {
            return new InvokeMethodExpr(this, name, params, null, sourceSpan);
          }
        }, {
          key: "callFn",
          value: function callFn(params, sourceSpan, pure) {
            return new InvokeFunctionExpr(this, params, null, sourceSpan, pure);
          }
        }, {
          key: "instantiate",
          value: function instantiate(params, type, sourceSpan) {
            return new InstantiateExpr(this, params, type, sourceSpan);
          }
        }, {
          key: "conditional",
          value: function conditional(trueCase) {
            var falseCase = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            var sourceSpan = arguments.length > 2 ? arguments[2] : undefined;
            return new ConditionalExpr(this, trueCase, falseCase, null, sourceSpan);
          }
        }, {
          key: "equals",
          value: function equals(rhs, sourceSpan) {
            return new BinaryOperatorExpr(BinaryOperator.Equals, this, rhs, null, sourceSpan);
          }
        }, {
          key: "notEquals",
          value: function notEquals(rhs, sourceSpan) {
            return new BinaryOperatorExpr(BinaryOperator.NotEquals, this, rhs, null, sourceSpan);
          }
        }, {
          key: "identical",
          value: function identical(rhs, sourceSpan) {
            return new BinaryOperatorExpr(BinaryOperator.Identical, this, rhs, null, sourceSpan);
          }
        }, {
          key: "notIdentical",
          value: function notIdentical(rhs, sourceSpan) {
            return new BinaryOperatorExpr(BinaryOperator.NotIdentical, this, rhs, null, sourceSpan);
          }
        }, {
          key: "minus",
          value: function minus(rhs, sourceSpan) {
            return new BinaryOperatorExpr(BinaryOperator.Minus, this, rhs, null, sourceSpan);
          }
        }, {
          key: "plus",
          value: function plus(rhs, sourceSpan) {
            return new BinaryOperatorExpr(BinaryOperator.Plus, this, rhs, null, sourceSpan);
          }
        }, {
          key: "divide",
          value: function divide(rhs, sourceSpan) {
            return new BinaryOperatorExpr(BinaryOperator.Divide, this, rhs, null, sourceSpan);
          }
        }, {
          key: "multiply",
          value: function multiply(rhs, sourceSpan) {
            return new BinaryOperatorExpr(BinaryOperator.Multiply, this, rhs, null, sourceSpan);
          }
        }, {
          key: "modulo",
          value: function modulo(rhs, sourceSpan) {
            return new BinaryOperatorExpr(BinaryOperator.Modulo, this, rhs, null, sourceSpan);
          }
        }, {
          key: "and",
          value: function and(rhs, sourceSpan) {
            return new BinaryOperatorExpr(BinaryOperator.And, this, rhs, null, sourceSpan);
          }
        }, {
          key: "bitwiseAnd",
          value: function bitwiseAnd(rhs, sourceSpan) {
            var parens = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
            return new BinaryOperatorExpr(BinaryOperator.BitwiseAnd, this, rhs, null, sourceSpan, parens);
          }
        }, {
          key: "or",
          value: function or(rhs, sourceSpan) {
            return new BinaryOperatorExpr(BinaryOperator.Or, this, rhs, null, sourceSpan);
          }
        }, {
          key: "lower",
          value: function lower(rhs, sourceSpan) {
            return new BinaryOperatorExpr(BinaryOperator.Lower, this, rhs, null, sourceSpan);
          }
        }, {
          key: "lowerEquals",
          value: function lowerEquals(rhs, sourceSpan) {
            return new BinaryOperatorExpr(BinaryOperator.LowerEquals, this, rhs, null, sourceSpan);
          }
        }, {
          key: "bigger",
          value: function bigger(rhs, sourceSpan) {
            return new BinaryOperatorExpr(BinaryOperator.Bigger, this, rhs, null, sourceSpan);
          }
        }, {
          key: "biggerEquals",
          value: function biggerEquals(rhs, sourceSpan) {
            return new BinaryOperatorExpr(BinaryOperator.BiggerEquals, this, rhs, null, sourceSpan);
          }
        }, {
          key: "isBlank",
          value: function isBlank(sourceSpan) {
            // Note: We use equals by purpose here to compare to null and undefined in JS.
            // We use the typed null to allow strictNullChecks to narrow types.
            return this.equals(TYPED_NULL_EXPR, sourceSpan);
          }
        }, {
          key: "cast",
          value: function cast(type, sourceSpan) {
            return new CastExpr(this, type, sourceSpan);
          }
        }, {
          key: "toStmt",
          value: function toStmt() {
            return new ExpressionStatement(this, null);
          }
        }]);

        return Expression;
      }();

      var BuiltinVar;

      (function (BuiltinVar) {
        BuiltinVar[BuiltinVar["This"] = 0] = "This";
        BuiltinVar[BuiltinVar["Super"] = 1] = "Super";
        BuiltinVar[BuiltinVar["CatchError"] = 2] = "CatchError";
        BuiltinVar[BuiltinVar["CatchStack"] = 3] = "CatchStack";
      })(BuiltinVar || (BuiltinVar = {}));

      var ReadVarExpr = /*#__PURE__*/function (_Expression) {
        _inherits2(ReadVarExpr, _Expression);

        var _super62 = _createSuper(ReadVarExpr);

        function ReadVarExpr(name, type, sourceSpan) {
          var _this129;

          _classCallCheck2(this, ReadVarExpr);

          _this129 = _super62.call(this, type, sourceSpan);

          if (typeof name === 'string') {
            _this129.name = name;
            _this129.builtin = null;
          } else {
            _this129.name = null;
            _this129.builtin = name;
          }

          return _this129;
        }

        _createClass2(ReadVarExpr, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof ReadVarExpr && this.name === e.name && this.builtin === e.builtin;
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return false;
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitReadVarExpr(this, context);
          }
        }, {
          key: "set",
          value: function set(value) {
            if (!this.name) {
              throw new Error("Built in variable ".concat(this.builtin, " can not be assigned to."));
            }

            return new WriteVarExpr(this.name, value, null, this.sourceSpan);
          }
        }]);

        return ReadVarExpr;
      }(Expression);

      var TypeofExpr = /*#__PURE__*/function (_Expression2) {
        _inherits2(TypeofExpr, _Expression2);

        var _super63 = _createSuper(TypeofExpr);

        function TypeofExpr(expr, type, sourceSpan) {
          var _this130;

          _classCallCheck2(this, TypeofExpr);

          _this130 = _super63.call(this, type, sourceSpan);
          _this130.expr = expr;
          return _this130;
        }

        _createClass2(TypeofExpr, [{
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitTypeofExpr(this, context);
          }
        }, {
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof TypeofExpr && e.expr.isEquivalent(this.expr);
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return this.expr.isConstant();
          }
        }]);

        return TypeofExpr;
      }(Expression);

      var WrappedNodeExpr = /*#__PURE__*/function (_Expression3) {
        _inherits2(WrappedNodeExpr, _Expression3);

        var _super64 = _createSuper(WrappedNodeExpr);

        function WrappedNodeExpr(node, type, sourceSpan) {
          var _this131;

          _classCallCheck2(this, WrappedNodeExpr);

          _this131 = _super64.call(this, type, sourceSpan);
          _this131.node = node;
          return _this131;
        }

        _createClass2(WrappedNodeExpr, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof WrappedNodeExpr && this.node === e.node;
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return false;
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitWrappedNodeExpr(this, context);
          }
        }]);

        return WrappedNodeExpr;
      }(Expression);

      var WriteVarExpr = /*#__PURE__*/function (_Expression4) {
        _inherits2(WriteVarExpr, _Expression4);

        var _super65 = _createSuper(WriteVarExpr);

        function WriteVarExpr(name, value, type, sourceSpan) {
          var _this132;

          _classCallCheck2(this, WriteVarExpr);

          _this132 = _super65.call(this, type || value.type, sourceSpan);
          _this132.name = name;
          _this132.value = value;
          return _this132;
        }

        _createClass2(WriteVarExpr, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof WriteVarExpr && this.name === e.name && this.value.isEquivalent(e.value);
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return false;
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitWriteVarExpr(this, context);
          }
        }, {
          key: "toDeclStmt",
          value: function toDeclStmt(type, modifiers) {
            return new DeclareVarStmt(this.name, this.value, type, modifiers, this.sourceSpan);
          }
        }, {
          key: "toConstDecl",
          value: function toConstDecl() {
            return this.toDeclStmt(INFERRED_TYPE, [StmtModifier.Final]);
          }
        }]);

        return WriteVarExpr;
      }(Expression);

      var WriteKeyExpr = /*#__PURE__*/function (_Expression5) {
        _inherits2(WriteKeyExpr, _Expression5);

        var _super66 = _createSuper(WriteKeyExpr);

        function WriteKeyExpr(receiver, index, value, type, sourceSpan) {
          var _this133;

          _classCallCheck2(this, WriteKeyExpr);

          _this133 = _super66.call(this, type || value.type, sourceSpan);
          _this133.receiver = receiver;
          _this133.index = index;
          _this133.value = value;
          return _this133;
        }

        _createClass2(WriteKeyExpr, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof WriteKeyExpr && this.receiver.isEquivalent(e.receiver) && this.index.isEquivalent(e.index) && this.value.isEquivalent(e.value);
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return false;
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitWriteKeyExpr(this, context);
          }
        }]);

        return WriteKeyExpr;
      }(Expression);

      var WritePropExpr = /*#__PURE__*/function (_Expression6) {
        _inherits2(WritePropExpr, _Expression6);

        var _super67 = _createSuper(WritePropExpr);

        function WritePropExpr(receiver, name, value, type, sourceSpan) {
          var _this134;

          _classCallCheck2(this, WritePropExpr);

          _this134 = _super67.call(this, type || value.type, sourceSpan);
          _this134.receiver = receiver;
          _this134.name = name;
          _this134.value = value;
          return _this134;
        }

        _createClass2(WritePropExpr, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof WritePropExpr && this.receiver.isEquivalent(e.receiver) && this.name === e.name && this.value.isEquivalent(e.value);
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return false;
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitWritePropExpr(this, context);
          }
        }]);

        return WritePropExpr;
      }(Expression);

      var BuiltinMethod;

      (function (BuiltinMethod) {
        BuiltinMethod[BuiltinMethod["ConcatArray"] = 0] = "ConcatArray";
        BuiltinMethod[BuiltinMethod["SubscribeObservable"] = 1] = "SubscribeObservable";
        BuiltinMethod[BuiltinMethod["Bind"] = 2] = "Bind";
      })(BuiltinMethod || (BuiltinMethod = {}));

      var InvokeMethodExpr = /*#__PURE__*/function (_Expression7) {
        _inherits2(InvokeMethodExpr, _Expression7);

        var _super68 = _createSuper(InvokeMethodExpr);

        function InvokeMethodExpr(receiver, method, args, type, sourceSpan) {
          var _this135;

          _classCallCheck2(this, InvokeMethodExpr);

          _this135 = _super68.call(this, type, sourceSpan);
          _this135.receiver = receiver;
          _this135.args = args;

          if (typeof method === 'string') {
            _this135.name = method;
            _this135.builtin = null;
          } else {
            _this135.name = null;
            _this135.builtin = method;
          }

          return _this135;
        }

        _createClass2(InvokeMethodExpr, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof InvokeMethodExpr && this.receiver.isEquivalent(e.receiver) && this.name === e.name && this.builtin === e.builtin && areAllEquivalent(this.args, e.args);
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return false;
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitInvokeMethodExpr(this, context);
          }
        }]);

        return InvokeMethodExpr;
      }(Expression);

      var InvokeFunctionExpr = /*#__PURE__*/function (_Expression8) {
        _inherits2(InvokeFunctionExpr, _Expression8);

        var _super69 = _createSuper(InvokeFunctionExpr);

        function InvokeFunctionExpr(fn, args, type, sourceSpan) {
          var _this136;

          var pure = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;

          _classCallCheck2(this, InvokeFunctionExpr);

          _this136 = _super69.call(this, type, sourceSpan);
          _this136.fn = fn;
          _this136.args = args;
          _this136.pure = pure;
          return _this136;
        }

        _createClass2(InvokeFunctionExpr, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof InvokeFunctionExpr && this.fn.isEquivalent(e.fn) && areAllEquivalent(this.args, e.args) && this.pure === e.pure;
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return false;
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitInvokeFunctionExpr(this, context);
          }
        }]);

        return InvokeFunctionExpr;
      }(Expression);

      var TaggedTemplateExpr = /*#__PURE__*/function (_Expression9) {
        _inherits2(TaggedTemplateExpr, _Expression9);

        var _super70 = _createSuper(TaggedTemplateExpr);

        function TaggedTemplateExpr(tag, template, type, sourceSpan) {
          var _this137;

          _classCallCheck2(this, TaggedTemplateExpr);

          _this137 = _super70.call(this, type, sourceSpan);
          _this137.tag = tag;
          _this137.template = template;
          return _this137;
        }

        _createClass2(TaggedTemplateExpr, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof TaggedTemplateExpr && this.tag.isEquivalent(e.tag) && areAllEquivalentPredicate(this.template.elements, e.template.elements, function (a, b) {
              return a.text === b.text;
            }) && areAllEquivalent(this.template.expressions, e.template.expressions);
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return false;
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitTaggedTemplateExpr(this, context);
          }
        }]);

        return TaggedTemplateExpr;
      }(Expression);

      var InstantiateExpr = /*#__PURE__*/function (_Expression10) {
        _inherits2(InstantiateExpr, _Expression10);

        var _super71 = _createSuper(InstantiateExpr);

        function InstantiateExpr(classExpr, args, type, sourceSpan) {
          var _this138;

          _classCallCheck2(this, InstantiateExpr);

          _this138 = _super71.call(this, type, sourceSpan);
          _this138.classExpr = classExpr;
          _this138.args = args;
          return _this138;
        }

        _createClass2(InstantiateExpr, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof InstantiateExpr && this.classExpr.isEquivalent(e.classExpr) && areAllEquivalent(this.args, e.args);
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return false;
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitInstantiateExpr(this, context);
          }
        }]);

        return InstantiateExpr;
      }(Expression);

      var LiteralExpr = /*#__PURE__*/function (_Expression11) {
        _inherits2(LiteralExpr, _Expression11);

        var _super72 = _createSuper(LiteralExpr);

        function LiteralExpr(value, type, sourceSpan) {
          var _this139;

          _classCallCheck2(this, LiteralExpr);

          _this139 = _super72.call(this, type, sourceSpan);
          _this139.value = value;
          return _this139;
        }

        _createClass2(LiteralExpr, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof LiteralExpr && this.value === e.value;
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return true;
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitLiteralExpr(this, context);
          }
        }]);

        return LiteralExpr;
      }(Expression);

      var TemplateLiteral = function TemplateLiteral(elements, expressions) {
        _classCallCheck2(this, TemplateLiteral);

        this.elements = elements;
        this.expressions = expressions;
      };

      var TemplateLiteralElement = function TemplateLiteralElement(text, sourceSpan, rawText) {
        _classCallCheck2(this, TemplateLiteralElement);

        var _a;

        this.text = text;
        this.sourceSpan = sourceSpan; // If `rawText` is not provided, try to extract the raw string from its
        // associated `sourceSpan`. If that is also not available, "fake" the raw
        // string instead by escaping the following control sequences:
        // - "\" would otherwise indicate that the next character is a control character.
        // - "`" and "${" are template string control sequences that would otherwise prematurely
        // indicate the end of the template literal element.

        this.rawText = (_a = rawText !== null && rawText !== void 0 ? rawText : sourceSpan === null || sourceSpan === void 0 ? void 0 : sourceSpan.toString()) !== null && _a !== void 0 ? _a : escapeForTemplateLiteral(escapeSlashes(text));
      };

      var MessagePiece = function MessagePiece(text, sourceSpan) {
        _classCallCheck2(this, MessagePiece);

        this.text = text;
        this.sourceSpan = sourceSpan;
      };

      var LiteralPiece = /*#__PURE__*/function (_MessagePiece) {
        _inherits2(LiteralPiece, _MessagePiece);

        var _super73 = _createSuper(LiteralPiece);

        function LiteralPiece() {
          _classCallCheck2(this, LiteralPiece);

          return _super73.apply(this, arguments);
        }

        return LiteralPiece;
      }(MessagePiece);

      var PlaceholderPiece = /*#__PURE__*/function (_MessagePiece2) {
        _inherits2(PlaceholderPiece, _MessagePiece2);

        var _super74 = _createSuper(PlaceholderPiece);

        function PlaceholderPiece() {
          _classCallCheck2(this, PlaceholderPiece);

          return _super74.apply(this, arguments);
        }

        return PlaceholderPiece;
      }(MessagePiece);

      var LocalizedString = /*#__PURE__*/function (_Expression12) {
        _inherits2(LocalizedString, _Expression12);

        var _super75 = _createSuper(LocalizedString);

        function LocalizedString(metaBlock, messageParts, placeHolderNames, expressions, sourceSpan) {
          var _this140;

          _classCallCheck2(this, LocalizedString);

          _this140 = _super75.call(this, STRING_TYPE, sourceSpan);
          _this140.metaBlock = metaBlock;
          _this140.messageParts = messageParts;
          _this140.placeHolderNames = placeHolderNames;
          _this140.expressions = expressions;
          return _this140;
        }

        _createClass2(LocalizedString, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            // return e instanceof LocalizedString && this.message === e.message;
            return false;
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return false;
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitLocalizedString(this, context);
          }
          /**
           * Serialize the given `meta` and `messagePart` into "cooked" and "raw" strings that can be used
           * in a `$localize` tagged string. The format of the metadata is the same as that parsed by
           * `parseI18nMeta()`.
           *
           * @param meta The metadata to serialize
           * @param messagePart The first part of the tagged string
           */

        }, {
          key: "serializeI18nHead",
          value: function serializeI18nHead() {
            var MEANING_SEPARATOR = '|';
            var ID_SEPARATOR = '@@';
            var LEGACY_ID_INDICATOR = '␟';
            var metaBlock = this.metaBlock.description || '';

            if (this.metaBlock.meaning) {
              metaBlock = "".concat(this.metaBlock.meaning).concat(MEANING_SEPARATOR).concat(metaBlock);
            }

            if (this.metaBlock.customId) {
              metaBlock = "".concat(metaBlock).concat(ID_SEPARATOR).concat(this.metaBlock.customId);
            }

            if (this.metaBlock.legacyIds) {
              this.metaBlock.legacyIds.forEach(function (legacyId) {
                metaBlock = "".concat(metaBlock).concat(LEGACY_ID_INDICATOR).concat(legacyId);
              });
            }

            return createCookedRawString(metaBlock, this.messageParts[0].text, this.getMessagePartSourceSpan(0));
          }
        }, {
          key: "getMessagePartSourceSpan",
          value: function getMessagePartSourceSpan(i) {
            var _a, _b;

            return (_b = (_a = this.messageParts[i]) === null || _a === void 0 ? void 0 : _a.sourceSpan) !== null && _b !== void 0 ? _b : this.sourceSpan;
          }
        }, {
          key: "getPlaceholderSourceSpan",
          value: function getPlaceholderSourceSpan(i) {
            var _a, _b, _c, _d;

            return (_d = (_b = (_a = this.placeHolderNames[i]) === null || _a === void 0 ? void 0 : _a.sourceSpan) !== null && _b !== void 0 ? _b : (_c = this.expressions[i]) === null || _c === void 0 ? void 0 : _c.sourceSpan) !== null && _d !== void 0 ? _d : this.sourceSpan;
          }
          /**
           * Serialize the given `placeholderName` and `messagePart` into "cooked" and "raw" strings that
           * can be used in a `$localize` tagged string.
           *
           * @param placeholderName The placeholder name to serialize
           * @param messagePart The following message string after this placeholder
           */

        }, {
          key: "serializeI18nTemplatePart",
          value: function serializeI18nTemplatePart(partIndex) {
            var placeholderName = this.placeHolderNames[partIndex - 1].text;
            var messagePart = this.messageParts[partIndex];
            return createCookedRawString(placeholderName, messagePart.text, this.getMessagePartSourceSpan(partIndex));
          }
        }]);

        return LocalizedString;
      }(Expression);

      var escapeSlashes = function escapeSlashes(str) {
        return str.replace(/\\/g, '\\\\');
      };

      var escapeStartingColon = function escapeStartingColon(str) {
        return str.replace(/^:/, '\\:');
      };

      var escapeColons = function escapeColons(str) {
        return str.replace(/:/g, '\\:');
      };

      var escapeForTemplateLiteral = function escapeForTemplateLiteral(str) {
        return str.replace(/`/g, '\\`').replace(/\${/g, '$\\{');
      };
      /**
       * Creates a `{cooked, raw}` object from the `metaBlock` and `messagePart`.
       *
       * The `raw` text must have various character sequences escaped:
       * * "\" would otherwise indicate that the next character is a control character.
       * * "`" and "${" are template string control sequences that would otherwise prematurely indicate
       *   the end of a message part.
       * * ":" inside a metablock would prematurely indicate the end of the metablock.
       * * ":" at the start of a messagePart with no metablock would erroneously indicate the start of a
       *   metablock.
       *
       * @param metaBlock Any metadata that should be prepended to the string
       * @param messagePart The message part of the string
       */


      function createCookedRawString(metaBlock, messagePart, range) {
        if (metaBlock === '') {
          return {
            cooked: messagePart,
            raw: escapeForTemplateLiteral(escapeStartingColon(escapeSlashes(messagePart))),
            range: range
          };
        } else {
          return {
            cooked: ":".concat(metaBlock, ":").concat(messagePart),
            raw: escapeForTemplateLiteral(":".concat(escapeColons(escapeSlashes(metaBlock)), ":").concat(escapeSlashes(messagePart))),
            range: range
          };
        }
      }

      var ExternalExpr = /*#__PURE__*/function (_Expression13) {
        _inherits2(ExternalExpr, _Expression13);

        var _super76 = _createSuper(ExternalExpr);

        function ExternalExpr(value, type) {
          var _this141;

          var typeParams = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
          var sourceSpan = arguments.length > 3 ? arguments[3] : undefined;

          _classCallCheck2(this, ExternalExpr);

          _this141 = _super76.call(this, type, sourceSpan);
          _this141.value = value;
          _this141.typeParams = typeParams;
          return _this141;
        }

        _createClass2(ExternalExpr, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof ExternalExpr && this.value.name === e.value.name && this.value.moduleName === e.value.moduleName && this.value.runtime === e.value.runtime;
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return false;
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitExternalExpr(this, context);
          }
        }]);

        return ExternalExpr;
      }(Expression);

      var ExternalReference = function ExternalReference(moduleName, name, runtime) {
        _classCallCheck2(this, ExternalReference);

        this.moduleName = moduleName;
        this.name = name;
        this.runtime = runtime;
      };

      var ConditionalExpr = /*#__PURE__*/function (_Expression14) {
        _inherits2(ConditionalExpr, _Expression14);

        var _super77 = _createSuper(ConditionalExpr);

        function ConditionalExpr(condition, trueCase) {
          var _this142;

          var falseCase = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
          var type = arguments.length > 3 ? arguments[3] : undefined;
          var sourceSpan = arguments.length > 4 ? arguments[4] : undefined;

          _classCallCheck2(this, ConditionalExpr);

          _this142 = _super77.call(this, type || trueCase.type, sourceSpan);
          _this142.condition = condition;
          _this142.falseCase = falseCase;
          _this142.trueCase = trueCase;
          return _this142;
        }

        _createClass2(ConditionalExpr, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof ConditionalExpr && this.condition.isEquivalent(e.condition) && this.trueCase.isEquivalent(e.trueCase) && nullSafeIsEquivalent(this.falseCase, e.falseCase);
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return false;
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitConditionalExpr(this, context);
          }
        }]);

        return ConditionalExpr;
      }(Expression);

      var NotExpr = /*#__PURE__*/function (_Expression15) {
        _inherits2(NotExpr, _Expression15);

        var _super78 = _createSuper(NotExpr);

        function NotExpr(condition, sourceSpan) {
          var _this143;

          _classCallCheck2(this, NotExpr);

          _this143 = _super78.call(this, BOOL_TYPE, sourceSpan);
          _this143.condition = condition;
          return _this143;
        }

        _createClass2(NotExpr, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof NotExpr && this.condition.isEquivalent(e.condition);
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return false;
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitNotExpr(this, context);
          }
        }]);

        return NotExpr;
      }(Expression);

      var AssertNotNull = /*#__PURE__*/function (_Expression16) {
        _inherits2(AssertNotNull, _Expression16);

        var _super79 = _createSuper(AssertNotNull);

        function AssertNotNull(condition, sourceSpan) {
          var _this144;

          _classCallCheck2(this, AssertNotNull);

          _this144 = _super79.call(this, condition.type, sourceSpan);
          _this144.condition = condition;
          return _this144;
        }

        _createClass2(AssertNotNull, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof AssertNotNull && this.condition.isEquivalent(e.condition);
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return false;
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitAssertNotNullExpr(this, context);
          }
        }]);

        return AssertNotNull;
      }(Expression);

      var CastExpr = /*#__PURE__*/function (_Expression17) {
        _inherits2(CastExpr, _Expression17);

        var _super80 = _createSuper(CastExpr);

        function CastExpr(value, type, sourceSpan) {
          var _this145;

          _classCallCheck2(this, CastExpr);

          _this145 = _super80.call(this, type, sourceSpan);
          _this145.value = value;
          return _this145;
        }

        _createClass2(CastExpr, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof CastExpr && this.value.isEquivalent(e.value);
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return false;
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitCastExpr(this, context);
          }
        }]);

        return CastExpr;
      }(Expression);

      var FnParam = /*#__PURE__*/function () {
        function FnParam(name) {
          var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;

          _classCallCheck2(this, FnParam);

          this.name = name;
          this.type = type;
        }

        _createClass2(FnParam, [{
          key: "isEquivalent",
          value: function isEquivalent(param) {
            return this.name === param.name;
          }
        }]);

        return FnParam;
      }();

      var FunctionExpr = /*#__PURE__*/function (_Expression18) {
        _inherits2(FunctionExpr, _Expression18);

        var _super81 = _createSuper(FunctionExpr);

        function FunctionExpr(params, statements, type, sourceSpan, name) {
          var _this146;

          _classCallCheck2(this, FunctionExpr);

          _this146 = _super81.call(this, type, sourceSpan);
          _this146.params = params;
          _this146.statements = statements;
          _this146.name = name;
          return _this146;
        }

        _createClass2(FunctionExpr, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof FunctionExpr && areAllEquivalent(this.params, e.params) && areAllEquivalent(this.statements, e.statements);
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return false;
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitFunctionExpr(this, context);
          }
        }, {
          key: "toDeclStmt",
          value: function toDeclStmt(name, modifiers) {
            return new DeclareFunctionStmt(name, this.params, this.statements, this.type, modifiers, this.sourceSpan);
          }
        }]);

        return FunctionExpr;
      }(Expression);

      var UnaryOperatorExpr = /*#__PURE__*/function (_Expression19) {
        _inherits2(UnaryOperatorExpr, _Expression19);

        var _super82 = _createSuper(UnaryOperatorExpr);

        function UnaryOperatorExpr(operator, expr, type, sourceSpan) {
          var _this147;

          var parens = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;

          _classCallCheck2(this, UnaryOperatorExpr);

          _this147 = _super82.call(this, type || NUMBER_TYPE, sourceSpan);
          _this147.operator = operator;
          _this147.expr = expr;
          _this147.parens = parens;
          return _this147;
        }

        _createClass2(UnaryOperatorExpr, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof UnaryOperatorExpr && this.operator === e.operator && this.expr.isEquivalent(e.expr);
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return false;
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitUnaryOperatorExpr(this, context);
          }
        }]);

        return UnaryOperatorExpr;
      }(Expression);

      var BinaryOperatorExpr = /*#__PURE__*/function (_Expression20) {
        _inherits2(BinaryOperatorExpr, _Expression20);

        var _super83 = _createSuper(BinaryOperatorExpr);

        function BinaryOperatorExpr(operator, lhs, rhs, type, sourceSpan) {
          var _this148;

          var parens = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;

          _classCallCheck2(this, BinaryOperatorExpr);

          _this148 = _super83.call(this, type || lhs.type, sourceSpan);
          _this148.operator = operator;
          _this148.rhs = rhs;
          _this148.parens = parens;
          _this148.lhs = lhs;
          return _this148;
        }

        _createClass2(BinaryOperatorExpr, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof BinaryOperatorExpr && this.operator === e.operator && this.lhs.isEquivalent(e.lhs) && this.rhs.isEquivalent(e.rhs);
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return false;
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitBinaryOperatorExpr(this, context);
          }
        }]);

        return BinaryOperatorExpr;
      }(Expression);

      var ReadPropExpr = /*#__PURE__*/function (_Expression21) {
        _inherits2(ReadPropExpr, _Expression21);

        var _super84 = _createSuper(ReadPropExpr);

        function ReadPropExpr(receiver, name, type, sourceSpan) {
          var _this149;

          _classCallCheck2(this, ReadPropExpr);

          _this149 = _super84.call(this, type, sourceSpan);
          _this149.receiver = receiver;
          _this149.name = name;
          return _this149;
        }

        _createClass2(ReadPropExpr, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof ReadPropExpr && this.receiver.isEquivalent(e.receiver) && this.name === e.name;
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return false;
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitReadPropExpr(this, context);
          }
        }, {
          key: "set",
          value: function set(value) {
            return new WritePropExpr(this.receiver, this.name, value, null, this.sourceSpan);
          }
        }]);

        return ReadPropExpr;
      }(Expression);

      var ReadKeyExpr = /*#__PURE__*/function (_Expression22) {
        _inherits2(ReadKeyExpr, _Expression22);

        var _super85 = _createSuper(ReadKeyExpr);

        function ReadKeyExpr(receiver, index, type, sourceSpan) {
          var _this150;

          _classCallCheck2(this, ReadKeyExpr);

          _this150 = _super85.call(this, type, sourceSpan);
          _this150.receiver = receiver;
          _this150.index = index;
          return _this150;
        }

        _createClass2(ReadKeyExpr, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof ReadKeyExpr && this.receiver.isEquivalent(e.receiver) && this.index.isEquivalent(e.index);
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return false;
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitReadKeyExpr(this, context);
          }
        }, {
          key: "set",
          value: function set(value) {
            return new WriteKeyExpr(this.receiver, this.index, value, null, this.sourceSpan);
          }
        }]);

        return ReadKeyExpr;
      }(Expression);

      var LiteralArrayExpr = /*#__PURE__*/function (_Expression23) {
        _inherits2(LiteralArrayExpr, _Expression23);

        var _super86 = _createSuper(LiteralArrayExpr);

        function LiteralArrayExpr(entries, type, sourceSpan) {
          var _this151;

          _classCallCheck2(this, LiteralArrayExpr);

          _this151 = _super86.call(this, type, sourceSpan);
          _this151.entries = entries;
          return _this151;
        }

        _createClass2(LiteralArrayExpr, [{
          key: "isConstant",
          value: function isConstant() {
            return this.entries.every(function (e) {
              return e.isConstant();
            });
          }
        }, {
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof LiteralArrayExpr && areAllEquivalent(this.entries, e.entries);
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitLiteralArrayExpr(this, context);
          }
        }]);

        return LiteralArrayExpr;
      }(Expression);

      var LiteralMapEntry = /*#__PURE__*/function () {
        function LiteralMapEntry(key, value, quoted) {
          _classCallCheck2(this, LiteralMapEntry);

          this.key = key;
          this.value = value;
          this.quoted = quoted;
        }

        _createClass2(LiteralMapEntry, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return this.key === e.key && this.value.isEquivalent(e.value);
          }
        }]);

        return LiteralMapEntry;
      }();

      var LiteralMapExpr = /*#__PURE__*/function (_Expression24) {
        _inherits2(LiteralMapExpr, _Expression24);

        var _super87 = _createSuper(LiteralMapExpr);

        function LiteralMapExpr(entries, type, sourceSpan) {
          var _this152;

          _classCallCheck2(this, LiteralMapExpr);

          _this152 = _super87.call(this, type, sourceSpan);
          _this152.entries = entries;
          _this152.valueType = null;

          if (type) {
            _this152.valueType = type.valueType;
          }

          return _this152;
        }

        _createClass2(LiteralMapExpr, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof LiteralMapExpr && areAllEquivalent(this.entries, e.entries);
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return this.entries.every(function (e) {
              return e.value.isConstant();
            });
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitLiteralMapExpr(this, context);
          }
        }]);

        return LiteralMapExpr;
      }(Expression);

      var CommaExpr = /*#__PURE__*/function (_Expression25) {
        _inherits2(CommaExpr, _Expression25);

        var _super88 = _createSuper(CommaExpr);

        function CommaExpr(parts, sourceSpan) {
          var _this153;

          _classCallCheck2(this, CommaExpr);

          _this153 = _super88.call(this, parts[parts.length - 1].type, sourceSpan);
          _this153.parts = parts;
          return _this153;
        }

        _createClass2(CommaExpr, [{
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof CommaExpr && areAllEquivalent(this.parts, e.parts);
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return false;
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            return visitor.visitCommaExpr(this, context);
          }
        }]);

        return CommaExpr;
      }(Expression);

      var THIS_EXPR = new ReadVarExpr(BuiltinVar.This, null, null);
      var SUPER_EXPR = new ReadVarExpr(BuiltinVar.Super, null, null);
      var CATCH_ERROR_VAR = new ReadVarExpr(BuiltinVar.CatchError, null, null);
      var CATCH_STACK_VAR = new ReadVarExpr(BuiltinVar.CatchStack, null, null);
      var NULL_EXPR = new LiteralExpr(null, null, null);
      var TYPED_NULL_EXPR = new LiteralExpr(null, INFERRED_TYPE, null); //// Statements

      var StmtModifier;

      (function (StmtModifier) {
        StmtModifier[StmtModifier["Final"] = 0] = "Final";
        StmtModifier[StmtModifier["Private"] = 1] = "Private";
        StmtModifier[StmtModifier["Exported"] = 2] = "Exported";
        StmtModifier[StmtModifier["Static"] = 3] = "Static";
      })(StmtModifier || (StmtModifier = {}));

      var LeadingComment = /*#__PURE__*/function () {
        function LeadingComment(text, multiline, trailingNewline) {
          _classCallCheck2(this, LeadingComment);

          this.text = text;
          this.multiline = multiline;
          this.trailingNewline = trailingNewline;
        }

        _createClass2(LeadingComment, [{
          key: "toString",
          value: function toString() {
            return this.multiline ? " ".concat(this.text, " ") : this.text;
          }
        }]);

        return LeadingComment;
      }();

      var JSDocComment = /*#__PURE__*/function (_LeadingComment) {
        _inherits2(JSDocComment, _LeadingComment);

        var _super89 = _createSuper(JSDocComment);

        function JSDocComment(tags) {
          var _this154;

          _classCallCheck2(this, JSDocComment);

          _this154 = _super89.call(this, '',
          /* multiline */
          true,
          /* trailingNewline */
          true);
          _this154.tags = tags;
          return _this154;
        }

        _createClass2(JSDocComment, [{
          key: "toString",
          value: function toString() {
            return serializeTags(this.tags);
          }
        }]);

        return JSDocComment;
      }(LeadingComment);

      var Statement = /*#__PURE__*/function () {
        function Statement() {
          var modifiers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
          var sourceSpan = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
          var leadingComments = arguments.length > 2 ? arguments[2] : undefined;

          _classCallCheck2(this, Statement);

          this.modifiers = modifiers;
          this.sourceSpan = sourceSpan;
          this.leadingComments = leadingComments;
        }

        _createClass2(Statement, [{
          key: "hasModifier",
          value: function hasModifier(modifier) {
            return this.modifiers.indexOf(modifier) !== -1;
          }
        }, {
          key: "addLeadingComment",
          value: function addLeadingComment(leadingComment) {
            var _a;

            this.leadingComments = (_a = this.leadingComments) !== null && _a !== void 0 ? _a : [];
            this.leadingComments.push(leadingComment);
          }
        }]);

        return Statement;
      }();

      var DeclareVarStmt = /*#__PURE__*/function (_Statement) {
        _inherits2(DeclareVarStmt, _Statement);

        var _super90 = _createSuper(DeclareVarStmt);

        function DeclareVarStmt(name, value, type, modifiers, sourceSpan, leadingComments) {
          var _this155;

          _classCallCheck2(this, DeclareVarStmt);

          _this155 = _super90.call(this, modifiers, sourceSpan, leadingComments);
          _this155.name = name;
          _this155.value = value;
          _this155.type = type || value && value.type || null;
          return _this155;
        }

        _createClass2(DeclareVarStmt, [{
          key: "isEquivalent",
          value: function isEquivalent(stmt) {
            return stmt instanceof DeclareVarStmt && this.name === stmt.name && (this.value ? !!stmt.value && this.value.isEquivalent(stmt.value) : !stmt.value);
          }
        }, {
          key: "visitStatement",
          value: function visitStatement(visitor, context) {
            return visitor.visitDeclareVarStmt(this, context);
          }
        }]);

        return DeclareVarStmt;
      }(Statement);

      var DeclareFunctionStmt = /*#__PURE__*/function (_Statement2) {
        _inherits2(DeclareFunctionStmt, _Statement2);

        var _super91 = _createSuper(DeclareFunctionStmt);

        function DeclareFunctionStmt(name, params, statements, type, modifiers, sourceSpan, leadingComments) {
          var _this156;

          _classCallCheck2(this, DeclareFunctionStmt);

          _this156 = _super91.call(this, modifiers, sourceSpan, leadingComments);
          _this156.name = name;
          _this156.params = params;
          _this156.statements = statements;
          _this156.type = type || null;
          return _this156;
        }

        _createClass2(DeclareFunctionStmt, [{
          key: "isEquivalent",
          value: function isEquivalent(stmt) {
            return stmt instanceof DeclareFunctionStmt && areAllEquivalent(this.params, stmt.params) && areAllEquivalent(this.statements, stmt.statements);
          }
        }, {
          key: "visitStatement",
          value: function visitStatement(visitor, context) {
            return visitor.visitDeclareFunctionStmt(this, context);
          }
        }]);

        return DeclareFunctionStmt;
      }(Statement);

      var ExpressionStatement = /*#__PURE__*/function (_Statement3) {
        _inherits2(ExpressionStatement, _Statement3);

        var _super92 = _createSuper(ExpressionStatement);

        function ExpressionStatement(expr, sourceSpan, leadingComments) {
          var _this157;

          _classCallCheck2(this, ExpressionStatement);

          _this157 = _super92.call(this, [], sourceSpan, leadingComments);
          _this157.expr = expr;
          return _this157;
        }

        _createClass2(ExpressionStatement, [{
          key: "isEquivalent",
          value: function isEquivalent(stmt) {
            return stmt instanceof ExpressionStatement && this.expr.isEquivalent(stmt.expr);
          }
        }, {
          key: "visitStatement",
          value: function visitStatement(visitor, context) {
            return visitor.visitExpressionStmt(this, context);
          }
        }]);

        return ExpressionStatement;
      }(Statement);

      var ReturnStatement = /*#__PURE__*/function (_Statement4) {
        _inherits2(ReturnStatement, _Statement4);

        var _super93 = _createSuper(ReturnStatement);

        function ReturnStatement(value) {
          var _this158;

          var sourceSpan = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
          var leadingComments = arguments.length > 2 ? arguments[2] : undefined;

          _classCallCheck2(this, ReturnStatement);

          _this158 = _super93.call(this, [], sourceSpan, leadingComments);
          _this158.value = value;
          return _this158;
        }

        _createClass2(ReturnStatement, [{
          key: "isEquivalent",
          value: function isEquivalent(stmt) {
            return stmt instanceof ReturnStatement && this.value.isEquivalent(stmt.value);
          }
        }, {
          key: "visitStatement",
          value: function visitStatement(visitor, context) {
            return visitor.visitReturnStmt(this, context);
          }
        }]);

        return ReturnStatement;
      }(Statement);

      var AbstractClassPart = /*#__PURE__*/function () {
        function AbstractClassPart() {
          var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
          var modifiers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];

          _classCallCheck2(this, AbstractClassPart);

          this.type = type;
          this.modifiers = modifiers;
        }

        _createClass2(AbstractClassPart, [{
          key: "hasModifier",
          value: function hasModifier(modifier) {
            return this.modifiers.indexOf(modifier) !== -1;
          }
        }]);

        return AbstractClassPart;
      }();

      var ClassField = /*#__PURE__*/function (_AbstractClassPart) {
        _inherits2(ClassField, _AbstractClassPart);

        var _super94 = _createSuper(ClassField);

        function ClassField(name, type, modifiers, initializer) {
          var _this159;

          _classCallCheck2(this, ClassField);

          _this159 = _super94.call(this, type, modifiers);
          _this159.name = name;
          _this159.initializer = initializer;
          return _this159;
        }

        _createClass2(ClassField, [{
          key: "isEquivalent",
          value: function isEquivalent(f) {
            return this.name === f.name;
          }
        }]);

        return ClassField;
      }(AbstractClassPart);

      var ClassMethod = /*#__PURE__*/function (_AbstractClassPart2) {
        _inherits2(ClassMethod, _AbstractClassPart2);

        var _super95 = _createSuper(ClassMethod);

        function ClassMethod(name, params, body, type, modifiers) {
          var _this160;

          _classCallCheck2(this, ClassMethod);

          _this160 = _super95.call(this, type, modifiers);
          _this160.name = name;
          _this160.params = params;
          _this160.body = body;
          return _this160;
        }

        _createClass2(ClassMethod, [{
          key: "isEquivalent",
          value: function isEquivalent(m) {
            return this.name === m.name && areAllEquivalent(this.body, m.body);
          }
        }]);

        return ClassMethod;
      }(AbstractClassPart);

      var ClassGetter = /*#__PURE__*/function (_AbstractClassPart3) {
        _inherits2(ClassGetter, _AbstractClassPart3);

        var _super96 = _createSuper(ClassGetter);

        function ClassGetter(name, body, type, modifiers) {
          var _this161;

          _classCallCheck2(this, ClassGetter);

          _this161 = _super96.call(this, type, modifiers);
          _this161.name = name;
          _this161.body = body;
          return _this161;
        }

        _createClass2(ClassGetter, [{
          key: "isEquivalent",
          value: function isEquivalent(m) {
            return this.name === m.name && areAllEquivalent(this.body, m.body);
          }
        }]);

        return ClassGetter;
      }(AbstractClassPart);

      var ClassStmt = /*#__PURE__*/function (_Statement5) {
        _inherits2(ClassStmt, _Statement5);

        var _super97 = _createSuper(ClassStmt);

        function ClassStmt(name, parent, fields, getters, constructorMethod, methods, modifiers, sourceSpan, leadingComments) {
          var _this162;

          _classCallCheck2(this, ClassStmt);

          _this162 = _super97.call(this, modifiers, sourceSpan, leadingComments);
          _this162.name = name;
          _this162.parent = parent;
          _this162.fields = fields;
          _this162.getters = getters;
          _this162.constructorMethod = constructorMethod;
          _this162.methods = methods;
          return _this162;
        }

        _createClass2(ClassStmt, [{
          key: "isEquivalent",
          value: function isEquivalent(stmt) {
            return stmt instanceof ClassStmt && this.name === stmt.name && nullSafeIsEquivalent(this.parent, stmt.parent) && areAllEquivalent(this.fields, stmt.fields) && areAllEquivalent(this.getters, stmt.getters) && this.constructorMethod.isEquivalent(stmt.constructorMethod) && areAllEquivalent(this.methods, stmt.methods);
          }
        }, {
          key: "visitStatement",
          value: function visitStatement(visitor, context) {
            return visitor.visitDeclareClassStmt(this, context);
          }
        }]);

        return ClassStmt;
      }(Statement);

      var IfStmt = /*#__PURE__*/function (_Statement6) {
        _inherits2(IfStmt, _Statement6);

        var _super98 = _createSuper(IfStmt);

        function IfStmt(condition, trueCase) {
          var _this163;

          var falseCase = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
          var sourceSpan = arguments.length > 3 ? arguments[3] : undefined;
          var leadingComments = arguments.length > 4 ? arguments[4] : undefined;

          _classCallCheck2(this, IfStmt);

          _this163 = _super98.call(this, [], sourceSpan, leadingComments);
          _this163.condition = condition;
          _this163.trueCase = trueCase;
          _this163.falseCase = falseCase;
          return _this163;
        }

        _createClass2(IfStmt, [{
          key: "isEquivalent",
          value: function isEquivalent(stmt) {
            return stmt instanceof IfStmt && this.condition.isEquivalent(stmt.condition) && areAllEquivalent(this.trueCase, stmt.trueCase) && areAllEquivalent(this.falseCase, stmt.falseCase);
          }
        }, {
          key: "visitStatement",
          value: function visitStatement(visitor, context) {
            return visitor.visitIfStmt(this, context);
          }
        }]);

        return IfStmt;
      }(Statement);

      var TryCatchStmt = /*#__PURE__*/function (_Statement7) {
        _inherits2(TryCatchStmt, _Statement7);

        var _super99 = _createSuper(TryCatchStmt);

        function TryCatchStmt(bodyStmts, catchStmts) {
          var _this164;

          var sourceSpan = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
          var leadingComments = arguments.length > 3 ? arguments[3] : undefined;

          _classCallCheck2(this, TryCatchStmt);

          _this164 = _super99.call(this, [], sourceSpan, leadingComments);
          _this164.bodyStmts = bodyStmts;
          _this164.catchStmts = catchStmts;
          return _this164;
        }

        _createClass2(TryCatchStmt, [{
          key: "isEquivalent",
          value: function isEquivalent(stmt) {
            return stmt instanceof TryCatchStmt && areAllEquivalent(this.bodyStmts, stmt.bodyStmts) && areAllEquivalent(this.catchStmts, stmt.catchStmts);
          }
        }, {
          key: "visitStatement",
          value: function visitStatement(visitor, context) {
            return visitor.visitTryCatchStmt(this, context);
          }
        }]);

        return TryCatchStmt;
      }(Statement);

      var ThrowStmt = /*#__PURE__*/function (_Statement8) {
        _inherits2(ThrowStmt, _Statement8);

        var _super100 = _createSuper(ThrowStmt);

        function ThrowStmt(error) {
          var _this165;

          var sourceSpan = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
          var leadingComments = arguments.length > 2 ? arguments[2] : undefined;

          _classCallCheck2(this, ThrowStmt);

          _this165 = _super100.call(this, [], sourceSpan, leadingComments);
          _this165.error = error;
          return _this165;
        }

        _createClass2(ThrowStmt, [{
          key: "isEquivalent",
          value: function isEquivalent(stmt) {
            return stmt instanceof TryCatchStmt && this.error.isEquivalent(stmt.error);
          }
        }, {
          key: "visitStatement",
          value: function visitStatement(visitor, context) {
            return visitor.visitThrowStmt(this, context);
          }
        }]);

        return ThrowStmt;
      }(Statement);

      var AstTransformer = /*#__PURE__*/function () {
        function AstTransformer() {
          _classCallCheck2(this, AstTransformer);
        }

        _createClass2(AstTransformer, [{
          key: "transformExpr",
          value: function transformExpr(expr, context) {
            return expr;
          }
        }, {
          key: "transformStmt",
          value: function transformStmt(stmt, context) {
            return stmt;
          }
        }, {
          key: "visitReadVarExpr",
          value: function visitReadVarExpr(ast, context) {
            return this.transformExpr(ast, context);
          }
        }, {
          key: "visitWrappedNodeExpr",
          value: function visitWrappedNodeExpr(ast, context) {
            return this.transformExpr(ast, context);
          }
        }, {
          key: "visitTypeofExpr",
          value: function visitTypeofExpr(expr, context) {
            return this.transformExpr(new TypeofExpr(expr.expr.visitExpression(this, context), expr.type, expr.sourceSpan), context);
          }
        }, {
          key: "visitWriteVarExpr",
          value: function visitWriteVarExpr(expr, context) {
            return this.transformExpr(new WriteVarExpr(expr.name, expr.value.visitExpression(this, context), expr.type, expr.sourceSpan), context);
          }
        }, {
          key: "visitWriteKeyExpr",
          value: function visitWriteKeyExpr(expr, context) {
            return this.transformExpr(new WriteKeyExpr(expr.receiver.visitExpression(this, context), expr.index.visitExpression(this, context), expr.value.visitExpression(this, context), expr.type, expr.sourceSpan), context);
          }
        }, {
          key: "visitWritePropExpr",
          value: function visitWritePropExpr(expr, context) {
            return this.transformExpr(new WritePropExpr(expr.receiver.visitExpression(this, context), expr.name, expr.value.visitExpression(this, context), expr.type, expr.sourceSpan), context);
          }
        }, {
          key: "visitInvokeMethodExpr",
          value: function visitInvokeMethodExpr(ast, context) {
            var method = ast.builtin || ast.name;
            return this.transformExpr(new InvokeMethodExpr(ast.receiver.visitExpression(this, context), method, this.visitAllExpressions(ast.args, context), ast.type, ast.sourceSpan), context);
          }
        }, {
          key: "visitInvokeFunctionExpr",
          value: function visitInvokeFunctionExpr(ast, context) {
            return this.transformExpr(new InvokeFunctionExpr(ast.fn.visitExpression(this, context), this.visitAllExpressions(ast.args, context), ast.type, ast.sourceSpan), context);
          }
        }, {
          key: "visitTaggedTemplateExpr",
          value: function visitTaggedTemplateExpr(ast, context) {
            var _this166 = this;

            return this.transformExpr(new TaggedTemplateExpr(ast.tag.visitExpression(this, context), new TemplateLiteral(ast.template.elements, ast.template.expressions.map(function (e) {
              return e.visitExpression(_this166, context);
            })), ast.type, ast.sourceSpan), context);
          }
        }, {
          key: "visitInstantiateExpr",
          value: function visitInstantiateExpr(ast, context) {
            return this.transformExpr(new InstantiateExpr(ast.classExpr.visitExpression(this, context), this.visitAllExpressions(ast.args, context), ast.type, ast.sourceSpan), context);
          }
        }, {
          key: "visitLiteralExpr",
          value: function visitLiteralExpr(ast, context) {
            return this.transformExpr(ast, context);
          }
        }, {
          key: "visitLocalizedString",
          value: function visitLocalizedString(ast, context) {
            return this.transformExpr(new LocalizedString(ast.metaBlock, ast.messageParts, ast.placeHolderNames, this.visitAllExpressions(ast.expressions, context), ast.sourceSpan), context);
          }
        }, {
          key: "visitExternalExpr",
          value: function visitExternalExpr(ast, context) {
            return this.transformExpr(ast, context);
          }
        }, {
          key: "visitConditionalExpr",
          value: function visitConditionalExpr(ast, context) {
            return this.transformExpr(new ConditionalExpr(ast.condition.visitExpression(this, context), ast.trueCase.visitExpression(this, context), ast.falseCase.visitExpression(this, context), ast.type, ast.sourceSpan), context);
          }
        }, {
          key: "visitNotExpr",
          value: function visitNotExpr(ast, context) {
            return this.transformExpr(new NotExpr(ast.condition.visitExpression(this, context), ast.sourceSpan), context);
          }
        }, {
          key: "visitAssertNotNullExpr",
          value: function visitAssertNotNullExpr(ast, context) {
            return this.transformExpr(new AssertNotNull(ast.condition.visitExpression(this, context), ast.sourceSpan), context);
          }
        }, {
          key: "visitCastExpr",
          value: function visitCastExpr(ast, context) {
            return this.transformExpr(new CastExpr(ast.value.visitExpression(this, context), ast.type, ast.sourceSpan), context);
          }
        }, {
          key: "visitFunctionExpr",
          value: function visitFunctionExpr(ast, context) {
            return this.transformExpr(new FunctionExpr(ast.params, this.visitAllStatements(ast.statements, context), ast.type, ast.sourceSpan), context);
          }
        }, {
          key: "visitUnaryOperatorExpr",
          value: function visitUnaryOperatorExpr(ast, context) {
            return this.transformExpr(new UnaryOperatorExpr(ast.operator, ast.expr.visitExpression(this, context), ast.type, ast.sourceSpan), context);
          }
        }, {
          key: "visitBinaryOperatorExpr",
          value: function visitBinaryOperatorExpr(ast, context) {
            return this.transformExpr(new BinaryOperatorExpr(ast.operator, ast.lhs.visitExpression(this, context), ast.rhs.visitExpression(this, context), ast.type, ast.sourceSpan), context);
          }
        }, {
          key: "visitReadPropExpr",
          value: function visitReadPropExpr(ast, context) {
            return this.transformExpr(new ReadPropExpr(ast.receiver.visitExpression(this, context), ast.name, ast.type, ast.sourceSpan), context);
          }
        }, {
          key: "visitReadKeyExpr",
          value: function visitReadKeyExpr(ast, context) {
            return this.transformExpr(new ReadKeyExpr(ast.receiver.visitExpression(this, context), ast.index.visitExpression(this, context), ast.type, ast.sourceSpan), context);
          }
        }, {
          key: "visitLiteralArrayExpr",
          value: function visitLiteralArrayExpr(ast, context) {
            return this.transformExpr(new LiteralArrayExpr(this.visitAllExpressions(ast.entries, context), ast.type, ast.sourceSpan), context);
          }
        }, {
          key: "visitLiteralMapExpr",
          value: function visitLiteralMapExpr(ast, context) {
            var _this167 = this;

            var entries = ast.entries.map(function (entry) {
              return new LiteralMapEntry(entry.key, entry.value.visitExpression(_this167, context), entry.quoted);
            });
            var mapType = new MapType(ast.valueType);
            return this.transformExpr(new LiteralMapExpr(entries, mapType, ast.sourceSpan), context);
          }
        }, {
          key: "visitCommaExpr",
          value: function visitCommaExpr(ast, context) {
            return this.transformExpr(new CommaExpr(this.visitAllExpressions(ast.parts, context), ast.sourceSpan), context);
          }
        }, {
          key: "visitAllExpressions",
          value: function visitAllExpressions(exprs, context) {
            var _this168 = this;

            return exprs.map(function (expr) {
              return expr.visitExpression(_this168, context);
            });
          }
        }, {
          key: "visitDeclareVarStmt",
          value: function visitDeclareVarStmt(stmt, context) {
            var value = stmt.value && stmt.value.visitExpression(this, context);
            return this.transformStmt(new DeclareVarStmt(stmt.name, value, stmt.type, stmt.modifiers, stmt.sourceSpan, stmt.leadingComments), context);
          }
        }, {
          key: "visitDeclareFunctionStmt",
          value: function visitDeclareFunctionStmt(stmt, context) {
            return this.transformStmt(new DeclareFunctionStmt(stmt.name, stmt.params, this.visitAllStatements(stmt.statements, context), stmt.type, stmt.modifiers, stmt.sourceSpan, stmt.leadingComments), context);
          }
        }, {
          key: "visitExpressionStmt",
          value: function visitExpressionStmt(stmt, context) {
            return this.transformStmt(new ExpressionStatement(stmt.expr.visitExpression(this, context), stmt.sourceSpan, stmt.leadingComments), context);
          }
        }, {
          key: "visitReturnStmt",
          value: function visitReturnStmt(stmt, context) {
            return this.transformStmt(new ReturnStatement(stmt.value.visitExpression(this, context), stmt.sourceSpan, stmt.leadingComments), context);
          }
        }, {
          key: "visitDeclareClassStmt",
          value: function visitDeclareClassStmt(stmt, context) {
            var _this169 = this;

            var parent = stmt.parent.visitExpression(this, context);
            var getters = stmt.getters.map(function (getter) {
              return new ClassGetter(getter.name, _this169.visitAllStatements(getter.body, context), getter.type, getter.modifiers);
            });
            var ctorMethod = stmt.constructorMethod && new ClassMethod(stmt.constructorMethod.name, stmt.constructorMethod.params, this.visitAllStatements(stmt.constructorMethod.body, context), stmt.constructorMethod.type, stmt.constructorMethod.modifiers);
            var methods = stmt.methods.map(function (method) {
              return new ClassMethod(method.name, method.params, _this169.visitAllStatements(method.body, context), method.type, method.modifiers);
            });
            return this.transformStmt(new ClassStmt(stmt.name, parent, stmt.fields, getters, ctorMethod, methods, stmt.modifiers, stmt.sourceSpan), context);
          }
        }, {
          key: "visitIfStmt",
          value: function visitIfStmt(stmt, context) {
            return this.transformStmt(new IfStmt(stmt.condition.visitExpression(this, context), this.visitAllStatements(stmt.trueCase, context), this.visitAllStatements(stmt.falseCase, context), stmt.sourceSpan, stmt.leadingComments), context);
          }
        }, {
          key: "visitTryCatchStmt",
          value: function visitTryCatchStmt(stmt, context) {
            return this.transformStmt(new TryCatchStmt(this.visitAllStatements(stmt.bodyStmts, context), this.visitAllStatements(stmt.catchStmts, context), stmt.sourceSpan, stmt.leadingComments), context);
          }
        }, {
          key: "visitThrowStmt",
          value: function visitThrowStmt(stmt, context) {
            return this.transformStmt(new ThrowStmt(stmt.error.visitExpression(this, context), stmt.sourceSpan, stmt.leadingComments), context);
          }
        }, {
          key: "visitAllStatements",
          value: function visitAllStatements(stmts, context) {
            var _this170 = this;

            return stmts.map(function (stmt) {
              return stmt.visitStatement(_this170, context);
            });
          }
        }]);

        return AstTransformer;
      }();

      var RecursiveAstVisitor = /*#__PURE__*/function () {
        function RecursiveAstVisitor() {
          _classCallCheck2(this, RecursiveAstVisitor);
        }

        _createClass2(RecursiveAstVisitor, [{
          key: "visitType",
          value: function visitType(ast, context) {
            return ast;
          }
        }, {
          key: "visitExpression",
          value: function visitExpression(ast, context) {
            if (ast.type) {
              ast.type.visitType(this, context);
            }

            return ast;
          }
        }, {
          key: "visitBuiltinType",
          value: function visitBuiltinType(type, context) {
            return this.visitType(type, context);
          }
        }, {
          key: "visitExpressionType",
          value: function visitExpressionType(type, context) {
            var _this171 = this;

            type.value.visitExpression(this, context);

            if (type.typeParams !== null) {
              type.typeParams.forEach(function (param) {
                return _this171.visitType(param, context);
              });
            }

            return this.visitType(type, context);
          }
        }, {
          key: "visitArrayType",
          value: function visitArrayType(type, context) {
            return this.visitType(type, context);
          }
        }, {
          key: "visitMapType",
          value: function visitMapType(type, context) {
            return this.visitType(type, context);
          }
        }, {
          key: "visitWrappedNodeExpr",
          value: function visitWrappedNodeExpr(ast, context) {
            return ast;
          }
        }, {
          key: "visitTypeofExpr",
          value: function visitTypeofExpr(ast, context) {
            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitReadVarExpr",
          value: function visitReadVarExpr(ast, context) {
            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitWriteVarExpr",
          value: function visitWriteVarExpr(ast, context) {
            ast.value.visitExpression(this, context);
            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitWriteKeyExpr",
          value: function visitWriteKeyExpr(ast, context) {
            ast.receiver.visitExpression(this, context);
            ast.index.visitExpression(this, context);
            ast.value.visitExpression(this, context);
            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitWritePropExpr",
          value: function visitWritePropExpr(ast, context) {
            ast.receiver.visitExpression(this, context);
            ast.value.visitExpression(this, context);
            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitInvokeMethodExpr",
          value: function visitInvokeMethodExpr(ast, context) {
            ast.receiver.visitExpression(this, context);
            this.visitAllExpressions(ast.args, context);
            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitInvokeFunctionExpr",
          value: function visitInvokeFunctionExpr(ast, context) {
            ast.fn.visitExpression(this, context);
            this.visitAllExpressions(ast.args, context);
            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitTaggedTemplateExpr",
          value: function visitTaggedTemplateExpr(ast, context) {
            ast.tag.visitExpression(this, context);
            this.visitAllExpressions(ast.template.expressions, context);
            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitInstantiateExpr",
          value: function visitInstantiateExpr(ast, context) {
            ast.classExpr.visitExpression(this, context);
            this.visitAllExpressions(ast.args, context);
            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitLiteralExpr",
          value: function visitLiteralExpr(ast, context) {
            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitLocalizedString",
          value: function visitLocalizedString(ast, context) {
            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitExternalExpr",
          value: function visitExternalExpr(ast, context) {
            var _this172 = this;

            if (ast.typeParams) {
              ast.typeParams.forEach(function (type) {
                return type.visitType(_this172, context);
              });
            }

            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitConditionalExpr",
          value: function visitConditionalExpr(ast, context) {
            ast.condition.visitExpression(this, context);
            ast.trueCase.visitExpression(this, context);
            ast.falseCase.visitExpression(this, context);
            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitNotExpr",
          value: function visitNotExpr(ast, context) {
            ast.condition.visitExpression(this, context);
            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitAssertNotNullExpr",
          value: function visitAssertNotNullExpr(ast, context) {
            ast.condition.visitExpression(this, context);
            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitCastExpr",
          value: function visitCastExpr(ast, context) {
            ast.value.visitExpression(this, context);
            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitFunctionExpr",
          value: function visitFunctionExpr(ast, context) {
            this.visitAllStatements(ast.statements, context);
            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitUnaryOperatorExpr",
          value: function visitUnaryOperatorExpr(ast, context) {
            ast.expr.visitExpression(this, context);
            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitBinaryOperatorExpr",
          value: function visitBinaryOperatorExpr(ast, context) {
            ast.lhs.visitExpression(this, context);
            ast.rhs.visitExpression(this, context);
            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitReadPropExpr",
          value: function visitReadPropExpr(ast, context) {
            ast.receiver.visitExpression(this, context);
            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitReadKeyExpr",
          value: function visitReadKeyExpr(ast, context) {
            ast.receiver.visitExpression(this, context);
            ast.index.visitExpression(this, context);
            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitLiteralArrayExpr",
          value: function visitLiteralArrayExpr(ast, context) {
            this.visitAllExpressions(ast.entries, context);
            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitLiteralMapExpr",
          value: function visitLiteralMapExpr(ast, context) {
            var _this173 = this;

            ast.entries.forEach(function (entry) {
              return entry.value.visitExpression(_this173, context);
            });
            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitCommaExpr",
          value: function visitCommaExpr(ast, context) {
            this.visitAllExpressions(ast.parts, context);
            return this.visitExpression(ast, context);
          }
        }, {
          key: "visitAllExpressions",
          value: function visitAllExpressions(exprs, context) {
            var _this174 = this;

            exprs.forEach(function (expr) {
              return expr.visitExpression(_this174, context);
            });
          }
        }, {
          key: "visitDeclareVarStmt",
          value: function visitDeclareVarStmt(stmt, context) {
            if (stmt.value) {
              stmt.value.visitExpression(this, context);
            }

            if (stmt.type) {
              stmt.type.visitType(this, context);
            }

            return stmt;
          }
        }, {
          key: "visitDeclareFunctionStmt",
          value: function visitDeclareFunctionStmt(stmt, context) {
            this.visitAllStatements(stmt.statements, context);

            if (stmt.type) {
              stmt.type.visitType(this, context);
            }

            return stmt;
          }
        }, {
          key: "visitExpressionStmt",
          value: function visitExpressionStmt(stmt, context) {
            stmt.expr.visitExpression(this, context);
            return stmt;
          }
        }, {
          key: "visitReturnStmt",
          value: function visitReturnStmt(stmt, context) {
            stmt.value.visitExpression(this, context);
            return stmt;
          }
        }, {
          key: "visitDeclareClassStmt",
          value: function visitDeclareClassStmt(stmt, context) {
            var _this175 = this;

            stmt.parent.visitExpression(this, context);
            stmt.getters.forEach(function (getter) {
              return _this175.visitAllStatements(getter.body, context);
            });

            if (stmt.constructorMethod) {
              this.visitAllStatements(stmt.constructorMethod.body, context);
            }

            stmt.methods.forEach(function (method) {
              return _this175.visitAllStatements(method.body, context);
            });
            return stmt;
          }
        }, {
          key: "visitIfStmt",
          value: function visitIfStmt(stmt, context) {
            stmt.condition.visitExpression(this, context);
            this.visitAllStatements(stmt.trueCase, context);
            this.visitAllStatements(stmt.falseCase, context);
            return stmt;
          }
        }, {
          key: "visitTryCatchStmt",
          value: function visitTryCatchStmt(stmt, context) {
            this.visitAllStatements(stmt.bodyStmts, context);
            this.visitAllStatements(stmt.catchStmts, context);
            return stmt;
          }
        }, {
          key: "visitThrowStmt",
          value: function visitThrowStmt(stmt, context) {
            stmt.error.visitExpression(this, context);
            return stmt;
          }
        }, {
          key: "visitAllStatements",
          value: function visitAllStatements(stmts, context) {
            var _this176 = this;

            stmts.forEach(function (stmt) {
              return stmt.visitStatement(_this176, context);
            });
          }
        }]);

        return RecursiveAstVisitor;
      }();

      function findReadVarNames(stmts) {
        var visitor = new _ReadVarVisitor();
        visitor.visitAllStatements(stmts, null);
        return visitor.varNames;
      }

      var _ReadVarVisitor = /*#__PURE__*/function (_RecursiveAstVisitor) {
        _inherits2(_ReadVarVisitor, _RecursiveAstVisitor);

        var _super101 = _createSuper(_ReadVarVisitor);

        function _ReadVarVisitor() {
          var _this177;

          _classCallCheck2(this, _ReadVarVisitor);

          _this177 = _super101.apply(this, arguments);
          _this177.varNames = new Set();
          return _this177;
        }

        _createClass2(_ReadVarVisitor, [{
          key: "visitDeclareFunctionStmt",
          value: function visitDeclareFunctionStmt(stmt, context) {
            // Don't descend into nested functions
            return stmt;
          }
        }, {
          key: "visitDeclareClassStmt",
          value: function visitDeclareClassStmt(stmt, context) {
            // Don't descend into nested classes
            return stmt;
          }
        }, {
          key: "visitReadVarExpr",
          value: function visitReadVarExpr(ast, context) {
            if (ast.name) {
              this.varNames.add(ast.name);
            }

            return null;
          }
        }]);

        return _ReadVarVisitor;
      }(RecursiveAstVisitor);

      function collectExternalReferences(stmts) {
        var visitor = new _FindExternalReferencesVisitor();
        visitor.visitAllStatements(stmts, null);
        return visitor.externalReferences;
      }

      var _FindExternalReferencesVisitor = /*#__PURE__*/function (_RecursiveAstVisitor2) {
        _inherits2(_FindExternalReferencesVisitor, _RecursiveAstVisitor2);

        var _super102 = _createSuper(_FindExternalReferencesVisitor);

        function _FindExternalReferencesVisitor() {
          var _this178;

          _classCallCheck2(this, _FindExternalReferencesVisitor);

          _this178 = _super102.apply(this, arguments);
          _this178.externalReferences = [];
          return _this178;
        }

        _createClass2(_FindExternalReferencesVisitor, [{
          key: "visitExternalExpr",
          value: function visitExternalExpr(e, context) {
            this.externalReferences.push(e.value);
            return _get2(_getPrototypeOf2(_FindExternalReferencesVisitor.prototype), "visitExternalExpr", this).call(this, e, context);
          }
        }]);

        return _FindExternalReferencesVisitor;
      }(RecursiveAstVisitor);

      function applySourceSpanToStatementIfNeeded(stmt, sourceSpan) {
        if (!sourceSpan) {
          return stmt;
        }

        var transformer = new _ApplySourceSpanTransformer(sourceSpan);
        return stmt.visitStatement(transformer, null);
      }

      function applySourceSpanToExpressionIfNeeded(expr, sourceSpan) {
        if (!sourceSpan) {
          return expr;
        }

        var transformer = new _ApplySourceSpanTransformer(sourceSpan);
        return expr.visitExpression(transformer, null);
      }

      var _ApplySourceSpanTransformer = /*#__PURE__*/function (_AstTransformer) {
        _inherits2(_ApplySourceSpanTransformer, _AstTransformer);

        var _super103 = _createSuper(_ApplySourceSpanTransformer);

        function _ApplySourceSpanTransformer(sourceSpan) {
          var _this179;

          _classCallCheck2(this, _ApplySourceSpanTransformer);

          _this179 = _super103.call(this);
          _this179.sourceSpan = sourceSpan;
          return _this179;
        }

        _createClass2(_ApplySourceSpanTransformer, [{
          key: "_clone",
          value: function _clone(obj) {
            var clone = Object.create(obj.constructor.prototype);

            for (var _i6 = 0, _Object$keys = Object.keys(obj); _i6 < _Object$keys.length; _i6++) {
              var prop = _Object$keys[_i6];
              clone[prop] = obj[prop];
            }

            return clone;
          }
        }, {
          key: "transformExpr",
          value: function transformExpr(expr, context) {
            if (!expr.sourceSpan) {
              expr = this._clone(expr);
              expr.sourceSpan = this.sourceSpan;
            }

            return expr;
          }
        }, {
          key: "transformStmt",
          value: function transformStmt(stmt, context) {
            if (!stmt.sourceSpan) {
              stmt = this._clone(stmt);
              stmt.sourceSpan = this.sourceSpan;
            }

            return stmt;
          }
        }]);

        return _ApplySourceSpanTransformer;
      }(AstTransformer);

      function leadingComment(text) {
        var multiline = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
        var trailingNewline = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
        return new LeadingComment(text, multiline, trailingNewline);
      }

      function jsDocComment() {
        var tags = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
        return new JSDocComment(tags);
      }

      function variable(name, type, sourceSpan) {
        return new ReadVarExpr(name, type, sourceSpan);
      }

      function importExpr(id) {
        var typeParams = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
        var sourceSpan = arguments.length > 2 ? arguments[2] : undefined;
        return new ExternalExpr(id, null, typeParams, sourceSpan);
      }

      function importType(id, typeParams, typeModifiers) {
        return id != null ? expressionType(importExpr(id, typeParams, null), typeModifiers) : null;
      }

      function expressionType(expr, typeModifiers, typeParams) {
        return new ExpressionType(expr, typeModifiers, typeParams);
      }

      function typeofExpr(expr) {
        return new TypeofExpr(expr);
      }

      function literalArr(values, type, sourceSpan) {
        return new LiteralArrayExpr(values, type, sourceSpan);
      }

      function literalMap(values) {
        var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
        return new LiteralMapExpr(values.map(function (e) {
          return new LiteralMapEntry(e.key, e.value, e.quoted);
        }), type, null);
      }

      function unary(operator, expr, type, sourceSpan) {
        return new UnaryOperatorExpr(operator, expr, type, sourceSpan);
      }

      function not(expr, sourceSpan) {
        return new NotExpr(expr, sourceSpan);
      }

      function assertNotNull(expr, sourceSpan) {
        return new AssertNotNull(expr, sourceSpan);
      }

      function fn(params, body, type, sourceSpan, name) {
        return new FunctionExpr(params, body, type, sourceSpan, name);
      }

      function ifStmt(condition, thenClause, elseClause, sourceSpan, leadingComments) {
        return new IfStmt(condition, thenClause, elseClause, sourceSpan, leadingComments);
      }

      function taggedTemplate(tag, template, type, sourceSpan) {
        return new TaggedTemplateExpr(tag, template, type, sourceSpan);
      }

      function literal(value, type, sourceSpan) {
        return new LiteralExpr(value, type, sourceSpan);
      }

      function localizedString(metaBlock, messageParts, placeholderNames, expressions, sourceSpan) {
        return new LocalizedString(metaBlock, messageParts, placeholderNames, expressions, sourceSpan);
      }

      function isNull(exp) {
        return exp instanceof LiteralExpr && exp.value === null;
      }
      /*
       * Serializes a `Tag` into a string.
       * Returns a string like " @foo {bar} baz" (note the leading whitespace before `@foo`).
       */


      function tagToString(tag) {
        var out = '';

        if (tag.tagName) {
          out += " @".concat(tag.tagName);
        }

        if (tag.text) {
          if (tag.text.match(/\/\*|\*\//)) {
            throw new Error('JSDoc text cannot contain "/*" and "*/"');
          }

          out += ' ' + tag.text.replace(/@/g, '\\@');
        }

        return out;
      }

      function serializeTags(tags) {
        if (tags.length === 0) return '';

        if (tags.length === 1 && tags[0].tagName && !tags[0].text) {
          // The JSDOC comment is a single simple tag: e.g `/** @tagname */`.
          return "*".concat(tagToString(tags[0]), " ");
        }

        var out = '*\n';

        var _iterator8 = _createForOfIteratorHelper(tags),
            _step8;

        try {
          for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
            var tag = _step8.value;
            out += ' *'; // If the tagToString is multi-line, insert " * " prefixes on lines.

            out += tagToString(tag).replace(/\n/g, '\n * ');
            out += '\n';
          }
        } catch (err) {
          _iterator8.e(err);
        } finally {
          _iterator8.f();
        }

        out += ' ';
        return out;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var DASH_CASE_REGEXP = /-+([a-z0-9])/g;

      function dashCaseToCamelCase(input) {
        return input.replace(DASH_CASE_REGEXP, function () {
          for (var _len7 = arguments.length, m = new Array(_len7), _key8 = 0; _key8 < _len7; _key8++) {
            m[_key8] = arguments[_key8];
          }

          return m[1].toUpperCase();
        });
      }

      function splitAtColon(input, defaultValues) {
        return _splitAt(input, ':', defaultValues);
      }

      function splitAtPeriod(input, defaultValues) {
        return _splitAt(input, '.', defaultValues);
      }

      function _splitAt(input, character, defaultValues) {
        var characterIndex = input.indexOf(character);
        if (characterIndex == -1) return defaultValues;
        return [input.slice(0, characterIndex).trim(), input.slice(characterIndex + 1).trim()];
      }

      function visitValue(value, visitor, context) {
        if (Array.isArray(value)) {
          return visitor.visitArray(value, context);
        }

        if (isStrictStringMap(value)) {
          return visitor.visitStringMap(value, context);
        }

        if (value == null || typeof value == 'string' || typeof value == 'number' || typeof value == 'boolean') {
          return visitor.visitPrimitive(value, context);
        }

        return visitor.visitOther(value, context);
      }

      function isDefined(val) {
        return val !== null && val !== undefined;
      }

      function noUndefined(val) {
        return val === undefined ? null : val;
      }

      var ValueTransformer = /*#__PURE__*/function () {
        function ValueTransformer() {
          _classCallCheck2(this, ValueTransformer);
        }

        _createClass2(ValueTransformer, [{
          key: "visitArray",
          value: function visitArray(arr, context) {
            var _this180 = this;

            return arr.map(function (value) {
              return visitValue(value, _this180, context);
            });
          }
        }, {
          key: "visitStringMap",
          value: function visitStringMap(map, context) {
            var _this181 = this;

            var result = {};
            Object.keys(map).forEach(function (key) {
              result[key] = visitValue(map[key], _this181, context);
            });
            return result;
          }
        }, {
          key: "visitPrimitive",
          value: function visitPrimitive(value, context) {
            return value;
          }
        }, {
          key: "visitOther",
          value: function visitOther(value, context) {
            return value;
          }
        }]);

        return ValueTransformer;
      }();

      var SyncAsync = {
        assertSync: function assertSync(value) {
          if (isPromise(value)) {
            throw new Error("Illegal state: value cannot be a promise");
          }

          return value;
        },
        then: function then(value, cb) {
          return isPromise(value) ? value.then(cb) : cb(value);
        },
        all: function all(syncAsyncValues) {
          return syncAsyncValues.some(isPromise) ? Promise.all(syncAsyncValues) : syncAsyncValues;
        }
      };

      function error(msg) {
        throw new Error("Internal Error: ".concat(msg));
      }

      function syntaxError(msg, parseErrors) {
        var error = Error(msg);
        error[ERROR_SYNTAX_ERROR] = true;
        if (parseErrors) error[ERROR_PARSE_ERRORS] = parseErrors;
        return error;
      }

      var ERROR_SYNTAX_ERROR = 'ngSyntaxError';
      var ERROR_PARSE_ERRORS = 'ngParseErrors';

      function isSyntaxError(error) {
        return error[ERROR_SYNTAX_ERROR];
      }

      function getParseErrors(error) {
        return error[ERROR_PARSE_ERRORS] || [];
      } // Escape characters that have a special meaning in Regular Expressions


      function escapeRegExp(s) {
        return s.replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
      }

      var STRING_MAP_PROTO = Object.getPrototypeOf({});

      function isStrictStringMap(obj) {
        return typeof obj === 'object' && obj !== null && Object.getPrototypeOf(obj) === STRING_MAP_PROTO;
      }

      function utf8Encode(str) {
        var encoded = [];

        for (var index = 0; index < str.length; index++) {
          var codePoint = str.charCodeAt(index); // decode surrogate
          // see https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae

          if (codePoint >= 0xd800 && codePoint <= 0xdbff && str.length > index + 1) {
            var low = str.charCodeAt(index + 1);

            if (low >= 0xdc00 && low <= 0xdfff) {
              index++;
              codePoint = (codePoint - 0xd800 << 10) + low - 0xdc00 + 0x10000;
            }
          }

          if (codePoint <= 0x7f) {
            encoded.push(codePoint);
          } else if (codePoint <= 0x7ff) {
            encoded.push(codePoint >> 6 & 0x1F | 0xc0, codePoint & 0x3f | 0x80);
          } else if (codePoint <= 0xffff) {
            encoded.push(codePoint >> 12 | 0xe0, codePoint >> 6 & 0x3f | 0x80, codePoint & 0x3f | 0x80);
          } else if (codePoint <= 0x1fffff) {
            encoded.push(codePoint >> 18 & 0x07 | 0xf0, codePoint >> 12 & 0x3f | 0x80, codePoint >> 6 & 0x3f | 0x80, codePoint & 0x3f | 0x80);
          }
        }

        return encoded;
      }

      function stringify(token) {
        if (typeof token === 'string') {
          return token;
        }

        if (Array.isArray(token)) {
          return '[' + token.map(stringify).join(', ') + ']';
        }

        if (token == null) {
          return '' + token;
        }

        if (token.overriddenName) {
          return "".concat(token.overriddenName);
        }

        if (token.name) {
          return "".concat(token.name);
        }

        if (!token.toString) {
          return 'object';
        } // WARNING: do not try to `JSON.stringify(token)` here
        // see https://github.com/angular/angular/issues/23440


        var res = token.toString();

        if (res == null) {
          return '' + res;
        }

        var newLineIndex = res.indexOf('\n');
        return newLineIndex === -1 ? res : res.substring(0, newLineIndex);
      }
      /**
       * Lazily retrieves the reference value from a forwardRef.
       */


      function resolveForwardRef(type) {
        if (typeof type === 'function' && type.hasOwnProperty('__forward_ref__')) {
          return type();
        } else {
          return type;
        }
      }
      /**
       * Determine if the argument is shaped like a Promise
       */


      function isPromise(obj) {
        // allow any Promise/A+ compliant thenable.
        // It's up to the caller to ensure that obj.then conforms to the spec
        return !!obj && typeof obj.then === 'function';
      }

      var Version = function Version(full) {
        _classCallCheck2(this, Version);

        this.full = full;
        var splits = full.split('.');
        this.major = splits[0];
        this.minor = splits[1];
        this.patch = splits.slice(2).join('.');
      };

      var __window = typeof window !== 'undefined' && window;

      var __self = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope && self;

      var __global = typeof global !== 'undefined' && global; // Check __global first, because in Node tests both __global and __window may be defined and _global
      // should be __global in that case.


      var _global = __global || __window || __self;

      function newArray(size, value) {
        var list = [];

        for (var i = 0; i < size; i++) {
          list.push(value);
        }

        return list;
      }
      /**
       * Partitions a given array into 2 arrays, based on a boolean value returned by the condition
       * function.
       *
       * @param arr Input array that should be partitioned
       * @param conditionFn Condition function that is called for each item in a given array and returns a
       * boolean value.
       */


      function partitionArray(arr, conditionFn) {
        var truthy = [];
        var falsy = [];

        var _iterator9 = _createForOfIteratorHelper(arr),
            _step9;

        try {
          for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
            var item = _step9.value;
            (conditionFn(item) ? truthy : falsy).push(item);
          }
        } catch (err) {
          _iterator9.e(err);
        } finally {
          _iterator9.f();
        }

        return [truthy, falsy];
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var CONSTANT_PREFIX = '_c';
      /**
       * `ConstantPool` tries to reuse literal factories when two or more literals are identical.
       * We determine whether literals are identical by creating a key out of their AST using the
       * `KeyVisitor`. This constant is used to replace dynamic expressions which can't be safely
       * converted into a key. E.g. given an expression `{foo: bar()}`, since we don't know what
       * the result of `bar` will be, we create a key that looks like `{foo: <unknown>}`. Note
       * that we use a variable, rather than something like `null` in order to avoid collisions.
       */

      var UNKNOWN_VALUE_KEY = variable('<unknown>');
      /**
       * Context to use when producing a key.
       *
       * This ensures we see the constant not the reference variable when producing
       * a key.
       */

      var KEY_CONTEXT = {};
      /**
       * Generally all primitive values are excluded from the `ConstantPool`, but there is an exclusion
       * for strings that reach a certain length threshold. This constant defines the length threshold for
       * strings.
       */

      var POOL_INCLUSION_LENGTH_THRESHOLD_FOR_STRINGS = 50;
      /**
       * A node that is a place-holder that allows the node to be replaced when the actual
       * node is known.
       *
       * This allows the constant pool to change an expression from a direct reference to
       * a constant to a shared constant. It returns a fix-up node that is later allowed to
       * change the referenced expression.
       */

      var FixupExpression = /*#__PURE__*/function (_Expression26) {
        _inherits2(FixupExpression, _Expression26);

        var _super104 = _createSuper(FixupExpression);

        function FixupExpression(resolved) {
          var _this182;

          _classCallCheck2(this, FixupExpression);

          _this182 = _super104.call(this, resolved.type);
          _this182.resolved = resolved;
          _this182.original = resolved;
          return _this182;
        }

        _createClass2(FixupExpression, [{
          key: "visitExpression",
          value: function visitExpression(visitor, context) {
            if (context === KEY_CONTEXT) {
              // When producing a key we want to traverse the constant not the
              // variable used to refer to it.
              return this.original.visitExpression(visitor, context);
            } else {
              return this.resolved.visitExpression(visitor, context);
            }
          }
        }, {
          key: "isEquivalent",
          value: function isEquivalent(e) {
            return e instanceof FixupExpression && this.resolved.isEquivalent(e.resolved);
          }
        }, {
          key: "isConstant",
          value: function isConstant() {
            return true;
          }
        }, {
          key: "fixup",
          value: function fixup(expression) {
            this.resolved = expression;
            this.shared = true;
          }
        }]);

        return FixupExpression;
      }(Expression);
      /**
       * A constant pool allows a code emitter to share constant in an output context.
       *
       * The constant pool also supports sharing access to ivy definitions references.
       */


      var ConstantPool = /*#__PURE__*/function () {
        function ConstantPool() {
          var isClosureCompilerEnabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;

          _classCallCheck2(this, ConstantPool);

          this.isClosureCompilerEnabled = isClosureCompilerEnabled;
          this.statements = [];
          this.literals = new Map();
          this.literalFactories = new Map();
          this.injectorDefinitions = new Map();
          this.directiveDefinitions = new Map();
          this.componentDefinitions = new Map();
          this.pipeDefinitions = new Map();
          this.nextNameIndex = 0;
        }

        _createClass2(ConstantPool, [{
          key: "getConstLiteral",
          value: function getConstLiteral(literal, forceShared) {
            if (literal instanceof LiteralExpr && !isLongStringLiteral(literal) || literal instanceof FixupExpression) {
              // Do no put simple literals into the constant pool or try to produce a constant for a
              // reference to a constant.
              return literal;
            }

            var key = this.keyOf(literal);
            var fixup = this.literals.get(key);
            var newValue = false;

            if (!fixup) {
              fixup = new FixupExpression(literal);
              this.literals.set(key, fixup);
              newValue = true;
            }

            if (!newValue && !fixup.shared || newValue && forceShared) {
              // Replace the expression with a variable
              var name = this.freshName();
              var definition;
              var usage;

              if (this.isClosureCompilerEnabled && isLongStringLiteral(literal)) {
                // For string literals, Closure will **always** inline the string at
                // **all** usages, duplicating it each time. For large strings, this
                // unnecessarily bloats bundle size. To work around this restriction, we
                // wrap the string in a function, and call that function for each usage.
                // This tricks Closure into using inline logic for functions instead of
                // string literals. Function calls are only inlined if the body is small
                // enough to be worth it. By doing this, very large strings will be
                // shared across multiple usages, rather than duplicating the string at
                // each usage site.
                //
                // const myStr = function() { return "very very very long string"; };
                // const usage1 = myStr();
                // const usage2 = myStr();
                definition = variable(name).set(new FunctionExpr([], // Params.
                [// Statements.
                new ReturnStatement(literal)]));
                usage = variable(name).callFn([]);
              } else {
                // Just declare and use the variable directly, without a function call
                // indirection. This saves a few bytes and avoids an unncessary call.
                definition = variable(name).set(literal);
                usage = variable(name);
              }

              this.statements.push(definition.toDeclStmt(INFERRED_TYPE, [StmtModifier.Final]));
              fixup.fixup(usage);
            }

            return fixup;
          }
        }, {
          key: "getDefinition",
          value: function getDefinition(type, kind, ctx) {
            var forceShared = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
            var definitions = this.definitionsOf(kind);
            var fixup = definitions.get(type);
            var newValue = false;

            if (!fixup) {
              var property = this.propertyNameOf(kind);
              fixup = new FixupExpression(ctx.importExpr(type).prop(property));
              definitions.set(type, fixup);
              newValue = true;
            }

            if (!newValue && !fixup.shared || newValue && forceShared) {
              var name = this.freshName();
              this.statements.push(variable(name).set(fixup.resolved).toDeclStmt(INFERRED_TYPE, [StmtModifier.Final]));
              fixup.fixup(variable(name));
            }

            return fixup;
          }
        }, {
          key: "getLiteralFactory",
          value: function getLiteralFactory(literal) {
            // Create a pure function that builds an array of a mix of constant and variable expressions
            if (literal instanceof LiteralArrayExpr) {
              var argumentsForKey = literal.entries.map(function (e) {
                return e.isConstant() ? e : UNKNOWN_VALUE_KEY;
              });
              var key = this.keyOf(literalArr(argumentsForKey));
              return this._getLiteralFactory(key, literal.entries, function (entries) {
                return literalArr(entries);
              });
            } else {
              var expressionForKey = literalMap(literal.entries.map(function (e) {
                return {
                  key: e.key,
                  value: e.value.isConstant() ? e.value : UNKNOWN_VALUE_KEY,
                  quoted: e.quoted
                };
              }));

              var _key9 = this.keyOf(expressionForKey);

              return this._getLiteralFactory(_key9, literal.entries.map(function (e) {
                return e.value;
              }), function (entries) {
                return literalMap(entries.map(function (value, index) {
                  return {
                    key: literal.entries[index].key,
                    value: value,
                    quoted: literal.entries[index].quoted
                  };
                }));
              });
            }
          }
        }, {
          key: "_getLiteralFactory",
          value: function _getLiteralFactory(key, values, resultMap) {
            var _this183 = this;

            var literalFactory = this.literalFactories.get(key);
            var literalFactoryArguments = values.filter(function (e) {
              return !e.isConstant();
            });

            if (!literalFactory) {
              var resultExpressions = values.map(function (e, index) {
                return e.isConstant() ? _this183.getConstLiteral(e, true) : variable("a".concat(index));
              });
              var parameters = resultExpressions.filter(isVariable).map(function (e) {
                return new FnParam(e.name, DYNAMIC_TYPE);
              });
              var pureFunctionDeclaration = fn(parameters, [new ReturnStatement(resultMap(resultExpressions))], INFERRED_TYPE);
              var name = this.freshName();
              this.statements.push(variable(name).set(pureFunctionDeclaration).toDeclStmt(INFERRED_TYPE, [StmtModifier.Final]));
              literalFactory = variable(name);
              this.literalFactories.set(key, literalFactory);
            }

            return {
              literalFactory: literalFactory,
              literalFactoryArguments: literalFactoryArguments
            };
          }
          /**
           * Produce a unique name.
           *
           * The name might be unique among different prefixes if any of the prefixes end in
           * a digit so the prefix should be a constant string (not based on user input) and
           * must not end in a digit.
           */

        }, {
          key: "uniqueName",
          value: function uniqueName(prefix) {
            return "".concat(prefix).concat(this.nextNameIndex++);
          }
        }, {
          key: "definitionsOf",
          value: function definitionsOf(kind) {
            switch (kind) {
              case 2
              /* Component */
              :
                return this.componentDefinitions;

              case 1
              /* Directive */
              :
                return this.directiveDefinitions;

              case 0
              /* Injector */
              :
                return this.injectorDefinitions;

              case 3
              /* Pipe */
              :
                return this.pipeDefinitions;
            }

            error("Unknown definition kind ".concat(kind));
            return this.componentDefinitions;
          }
        }, {
          key: "propertyNameOf",
          value: function propertyNameOf(kind) {
            switch (kind) {
              case 2
              /* Component */
              :
                return 'ɵcmp';

              case 1
              /* Directive */
              :
                return 'ɵdir';

              case 0
              /* Injector */
              :
                return 'ɵinj';

              case 3
              /* Pipe */
              :
                return 'ɵpipe';
            }

            error("Unknown definition kind ".concat(kind));
            return '<unknown>';
          }
        }, {
          key: "freshName",
          value: function freshName() {
            return this.uniqueName(CONSTANT_PREFIX);
          }
        }, {
          key: "keyOf",
          value: function keyOf(expression) {
            return expression.visitExpression(new KeyVisitor(), KEY_CONTEXT);
          }
        }]);

        return ConstantPool;
      }();
      /**
       * Visitor used to determine if 2 expressions are equivalent and can be shared in the
       * `ConstantPool`.
       *
       * When the id (string) generated by the visitor is equal, expressions are considered equivalent.
       */


      var KeyVisitor = /*#__PURE__*/function () {
        function KeyVisitor() {
          _classCallCheck2(this, KeyVisitor);

          this.visitWrappedNodeExpr = invalid;
          this.visitWriteVarExpr = invalid;
          this.visitWriteKeyExpr = invalid;
          this.visitWritePropExpr = invalid;
          this.visitInvokeMethodExpr = invalid;
          this.visitInvokeFunctionExpr = invalid;
          this.visitTaggedTemplateExpr = invalid;
          this.visitInstantiateExpr = invalid;
          this.visitConditionalExpr = invalid;
          this.visitNotExpr = invalid;
          this.visitAssertNotNullExpr = invalid;
          this.visitCastExpr = invalid;
          this.visitFunctionExpr = invalid;
          this.visitUnaryOperatorExpr = invalid;
          this.visitBinaryOperatorExpr = invalid;
          this.visitReadPropExpr = invalid;
          this.visitReadKeyExpr = invalid;
          this.visitCommaExpr = invalid;
          this.visitLocalizedString = invalid;
        }

        _createClass2(KeyVisitor, [{
          key: "visitLiteralExpr",
          value: function visitLiteralExpr(ast) {
            return "".concat(typeof ast.value === 'string' ? '"' + ast.value + '"' : ast.value);
          }
        }, {
          key: "visitLiteralArrayExpr",
          value: function visitLiteralArrayExpr(ast, context) {
            var _this184 = this;

            return "[".concat(ast.entries.map(function (entry) {
              return entry.visitExpression(_this184, context);
            }).join(','), "]");
          }
        }, {
          key: "visitLiteralMapExpr",
          value: function visitLiteralMapExpr(ast, context) {
            var _this185 = this;

            var mapKey = function mapKey(entry) {
              var quote = entry.quoted ? '"' : '';
              return "".concat(quote).concat(entry.key).concat(quote);
            };

            var mapEntry = function mapEntry(entry) {
              return "".concat(mapKey(entry), ":").concat(entry.value.visitExpression(_this185, context));
            };

            return "{".concat(ast.entries.map(mapEntry).join(','));
          }
        }, {
          key: "visitExternalExpr",
          value: function visitExternalExpr(ast) {
            return ast.value.moduleName ? "EX:".concat(ast.value.moduleName, ":").concat(ast.value.name) : "EX:".concat(ast.value.runtime.name);
          }
        }, {
          key: "visitReadVarExpr",
          value: function visitReadVarExpr(node) {
            return "VAR:".concat(node.name);
          }
        }, {
          key: "visitTypeofExpr",
          value: function visitTypeofExpr(node, context) {
            return "TYPEOF:".concat(node.expr.visitExpression(this, context));
          }
        }]);

        return KeyVisitor;
      }();

      function invalid(arg) {
        throw new Error("Invalid state: Visitor ".concat(this.constructor.name, " doesn't handle ").concat(arg.constructor.name));
      }

      function isVariable(e) {
        return e instanceof ReadVarExpr;
      }

      function isLongStringLiteral(expr) {
        return expr instanceof LiteralExpr && typeof expr.value === 'string' && expr.value.length >= POOL_INCLUSION_LENGTH_THRESHOLD_FOR_STRINGS;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var CORE = '@angular/core';

      var Identifiers = function Identifiers() {
        _classCallCheck2(this, Identifiers);
      };

      Identifiers.ANALYZE_FOR_ENTRY_COMPONENTS = {
        name: 'ANALYZE_FOR_ENTRY_COMPONENTS',
        moduleName: CORE
      };
      Identifiers.ElementRef = {
        name: 'ElementRef',
        moduleName: CORE
      };
      Identifiers.NgModuleRef = {
        name: 'NgModuleRef',
        moduleName: CORE
      };
      Identifiers.ViewContainerRef = {
        name: 'ViewContainerRef',
        moduleName: CORE
      };
      Identifiers.ChangeDetectorRef = {
        name: 'ChangeDetectorRef',
        moduleName: CORE
      };
      Identifiers.QueryList = {
        name: 'QueryList',
        moduleName: CORE
      };
      Identifiers.TemplateRef = {
        name: 'TemplateRef',
        moduleName: CORE
      };
      Identifiers.Renderer2 = {
        name: 'Renderer2',
        moduleName: CORE
      };
      Identifiers.CodegenComponentFactoryResolver = {
        name: 'ɵCodegenComponentFactoryResolver',
        moduleName: CORE
      };
      Identifiers.ComponentFactoryResolver = {
        name: 'ComponentFactoryResolver',
        moduleName: CORE
      };
      Identifiers.ComponentFactory = {
        name: 'ComponentFactory',
        moduleName: CORE
      };
      Identifiers.ComponentRef = {
        name: 'ComponentRef',
        moduleName: CORE
      };
      Identifiers.NgModuleFactory = {
        name: 'NgModuleFactory',
        moduleName: CORE
      };
      Identifiers.createModuleFactory = {
        name: 'ɵcmf',
        moduleName: CORE
      };
      Identifiers.moduleDef = {
        name: 'ɵmod',
        moduleName: CORE
      };
      Identifiers.moduleProviderDef = {
        name: 'ɵmpd',
        moduleName: CORE
      };
      Identifiers.RegisterModuleFactoryFn = {
        name: 'ɵregisterModuleFactory',
        moduleName: CORE
      };
      Identifiers.inject = {
        name: 'ɵɵinject',
        moduleName: CORE
      };
      Identifiers.directiveInject = {
        name: 'ɵɵdirectiveInject',
        moduleName: CORE
      };
      Identifiers.INJECTOR = {
        name: 'INJECTOR',
        moduleName: CORE
      };
      Identifiers.Injector = {
        name: 'Injector',
        moduleName: CORE
      };
      Identifiers.ɵɵdefineInjectable = {
        name: 'ɵɵdefineInjectable',
        moduleName: CORE
      };
      Identifiers.InjectableDef = {
        name: 'ɵɵInjectableDef',
        moduleName: CORE
      };
      Identifiers.ViewEncapsulation = {
        name: 'ViewEncapsulation',
        moduleName: CORE
      };
      Identifiers.ChangeDetectionStrategy = {
        name: 'ChangeDetectionStrategy',
        moduleName: CORE
      };
      Identifiers.SecurityContext = {
        name: 'SecurityContext',
        moduleName: CORE
      };
      Identifiers.LOCALE_ID = {
        name: 'LOCALE_ID',
        moduleName: CORE
      };
      Identifiers.TRANSLATIONS_FORMAT = {
        name: 'TRANSLATIONS_FORMAT',
        moduleName: CORE
      };
      Identifiers.inlineInterpolate = {
        name: 'ɵinlineInterpolate',
        moduleName: CORE
      };
      Identifiers.interpolate = {
        name: 'ɵinterpolate',
        moduleName: CORE
      };
      Identifiers.EMPTY_ARRAY = {
        name: 'ɵEMPTY_ARRAY',
        moduleName: CORE
      };
      Identifiers.EMPTY_MAP = {
        name: 'ɵEMPTY_MAP',
        moduleName: CORE
      };
      Identifiers.Renderer = {
        name: 'Renderer',
        moduleName: CORE
      };
      Identifiers.viewDef = {
        name: 'ɵvid',
        moduleName: CORE
      };
      Identifiers.elementDef = {
        name: 'ɵeld',
        moduleName: CORE
      };
      Identifiers.anchorDef = {
        name: 'ɵand',
        moduleName: CORE
      };
      Identifiers.textDef = {
        name: 'ɵted',
        moduleName: CORE
      };
      Identifiers.directiveDef = {
        name: 'ɵdid',
        moduleName: CORE
      };
      Identifiers.providerDef = {
        name: 'ɵprd',
        moduleName: CORE
      };
      Identifiers.queryDef = {
        name: 'ɵqud',
        moduleName: CORE
      };
      Identifiers.pureArrayDef = {
        name: 'ɵpad',
        moduleName: CORE
      };
      Identifiers.pureObjectDef = {
        name: 'ɵpod',
        moduleName: CORE
      };
      Identifiers.purePipeDef = {
        name: 'ɵppd',
        moduleName: CORE
      };
      Identifiers.pipeDef = {
        name: 'ɵpid',
        moduleName: CORE
      };
      Identifiers.nodeValue = {
        name: 'ɵnov',
        moduleName: CORE
      };
      Identifiers.ngContentDef = {
        name: 'ɵncd',
        moduleName: CORE
      };
      Identifiers.unwrapValue = {
        name: 'ɵunv',
        moduleName: CORE
      };
      Identifiers.createRendererType2 = {
        name: 'ɵcrt',
        moduleName: CORE
      }; // type only

      Identifiers.RendererType2 = {
        name: 'RendererType2',
        moduleName: CORE
      }; // type only

      Identifiers.ViewDefinition = {
        name: 'ɵViewDefinition',
        moduleName: CORE
      };
      Identifiers.createComponentFactory = {
        name: 'ɵccf',
        moduleName: CORE
      };
      Identifiers.setClassMetadata = {
        name: 'ɵsetClassMetadata',
        moduleName: CORE
      };

      function createTokenForReference(reference) {
        return {
          identifier: {
            reference: reference
          }
        };
      }

      function createTokenForExternalReference(reflector, reference) {
        return createTokenForReference(reflector.resolveExternalReference(reference));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A token representing the a reference to a static type.
       *
       * This token is unique for a filePath and name and can be used as a hash table key.
       */


      var StaticSymbol = /*#__PURE__*/function () {
        function StaticSymbol(filePath, name, members) {
          _classCallCheck2(this, StaticSymbol);

          this.filePath = filePath;
          this.name = name;
          this.members = members;
        }

        _createClass2(StaticSymbol, [{
          key: "assertNoMembers",
          value: function assertNoMembers() {
            if (this.members.length) {
              throw new Error("Illegal state: symbol without members expected, but got ".concat(JSON.stringify(this), "."));
            }
          }
        }]);

        return StaticSymbol;
      }();
      /**
       * A cache of static symbol used by the StaticReflector to return the same symbol for the
       * same symbol values.
       */


      var StaticSymbolCache = /*#__PURE__*/function () {
        function StaticSymbolCache() {
          _classCallCheck2(this, StaticSymbolCache);

          this.cache = new Map();
        }

        _createClass2(StaticSymbolCache, [{
          key: "get",
          value: function get(declarationFile, name, members) {
            members = members || [];
            var memberSuffix = members.length ? ".".concat(members.join('.')) : '';
            var key = "\"".concat(declarationFile, "\".").concat(name).concat(memberSuffix);
            var result = this.cache.get(key);

            if (!result) {
              result = new StaticSymbol(declarationFile, name, members);
              this.cache.set(key, result);
            }

            return result;
          }
        }]);

        return StaticSymbolCache;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // group 0: "[prop] or (event) or @trigger"
      // group 1: "prop" from "[prop]"
      // group 2: "event" from "(event)"
      // group 3: "@trigger" from "@trigger"


      var HOST_REG_EXP = /^(?:(?:\[([^\]]+)\])|(?:\(([^\)]+)\)))|(\@[-\w]+)$/;

      function sanitizeIdentifier(name) {
        return name.replace(/\W/g, '_');
      }

      var _anonymousTypeIndex = 0;

      function identifierName(compileIdentifier) {
        if (!compileIdentifier || !compileIdentifier.reference) {
          return null;
        }

        var ref = compileIdentifier.reference;

        if (ref instanceof StaticSymbol) {
          return ref.name;
        }

        if (ref['__anonymousType']) {
          return ref['__anonymousType'];
        }

        var identifier = stringify(ref);

        if (identifier.indexOf('(') >= 0) {
          // case: anonymous functions!
          identifier = "anonymous_".concat(_anonymousTypeIndex++);
          ref['__anonymousType'] = identifier;
        } else {
          identifier = sanitizeIdentifier(identifier);
        }

        return identifier;
      }

      function identifierModuleUrl(compileIdentifier) {
        var ref = compileIdentifier.reference;

        if (ref instanceof StaticSymbol) {
          return ref.filePath;
        } // Runtime type


        return "./".concat(stringify(ref));
      }

      function viewClassName(compType, embeddedTemplateIndex) {
        return "View_".concat(identifierName({
          reference: compType
        }), "_").concat(embeddedTemplateIndex);
      }

      function rendererTypeName(compType) {
        return "RenderType_".concat(identifierName({
          reference: compType
        }));
      }

      function hostViewClassName(compType) {
        return "HostView_".concat(identifierName({
          reference: compType
        }));
      }

      function componentFactoryName(compType) {
        return "".concat(identifierName({
          reference: compType
        }), "NgFactory");
      }

      var CompileSummaryKind;

      (function (CompileSummaryKind) {
        CompileSummaryKind[CompileSummaryKind["Pipe"] = 0] = "Pipe";
        CompileSummaryKind[CompileSummaryKind["Directive"] = 1] = "Directive";
        CompileSummaryKind[CompileSummaryKind["NgModule"] = 2] = "NgModule";
        CompileSummaryKind[CompileSummaryKind["Injectable"] = 3] = "Injectable";
      })(CompileSummaryKind || (CompileSummaryKind = {}));

      function tokenName(token) {
        return token.value != null ? sanitizeIdentifier(token.value) : identifierName(token.identifier);
      }

      function tokenReference(token) {
        if (token.identifier != null) {
          return token.identifier.reference;
        } else {
          return token.value;
        }
      }
      /**
       * Metadata about a stylesheet
       */


      var CompileStylesheetMetadata = function CompileStylesheetMetadata() {
        var _ref57 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
            moduleUrl = _ref57.moduleUrl,
            styles = _ref57.styles,
            styleUrls = _ref57.styleUrls;

        _classCallCheck2(this, CompileStylesheetMetadata);

        this.moduleUrl = moduleUrl || null;
        this.styles = _normalizeArray(styles);
        this.styleUrls = _normalizeArray(styleUrls);
      };
      /**
       * Metadata regarding compilation of a template.
       */


      var CompileTemplateMetadata = /*#__PURE__*/function () {
        function CompileTemplateMetadata(_ref58) {
          var encapsulation = _ref58.encapsulation,
              template = _ref58.template,
              templateUrl = _ref58.templateUrl,
              htmlAst = _ref58.htmlAst,
              styles = _ref58.styles,
              styleUrls = _ref58.styleUrls,
              externalStylesheets = _ref58.externalStylesheets,
              animations = _ref58.animations,
              ngContentSelectors = _ref58.ngContentSelectors,
              interpolation = _ref58.interpolation,
              isInline = _ref58.isInline,
              preserveWhitespaces = _ref58.preserveWhitespaces;

          _classCallCheck2(this, CompileTemplateMetadata);

          this.encapsulation = encapsulation;
          this.template = template;
          this.templateUrl = templateUrl;
          this.htmlAst = htmlAst;
          this.styles = _normalizeArray(styles);
          this.styleUrls = _normalizeArray(styleUrls);
          this.externalStylesheets = _normalizeArray(externalStylesheets);
          this.animations = animations ? flatten(animations) : [];
          this.ngContentSelectors = ngContentSelectors || [];

          if (interpolation && interpolation.length != 2) {
            throw new Error("'interpolation' should have a start and an end symbol.");
          }

          this.interpolation = interpolation;
          this.isInline = isInline;
          this.preserveWhitespaces = preserveWhitespaces;
        }

        _createClass2(CompileTemplateMetadata, [{
          key: "toSummary",
          value: function toSummary() {
            return {
              ngContentSelectors: this.ngContentSelectors,
              encapsulation: this.encapsulation,
              styles: this.styles,
              animations: this.animations
            };
          }
        }]);

        return CompileTemplateMetadata;
      }();
      /**
       * Metadata regarding compilation of a directive.
       */


      var CompileDirectiveMetadata = /*#__PURE__*/function () {
        function CompileDirectiveMetadata(_ref59) {
          var isHost = _ref59.isHost,
              type = _ref59.type,
              isComponent = _ref59.isComponent,
              selector = _ref59.selector,
              exportAs = _ref59.exportAs,
              changeDetection = _ref59.changeDetection,
              inputs = _ref59.inputs,
              outputs = _ref59.outputs,
              hostListeners = _ref59.hostListeners,
              hostProperties = _ref59.hostProperties,
              hostAttributes = _ref59.hostAttributes,
              providers = _ref59.providers,
              viewProviders = _ref59.viewProviders,
              queries = _ref59.queries,
              guards = _ref59.guards,
              viewQueries = _ref59.viewQueries,
              entryComponents = _ref59.entryComponents,
              template = _ref59.template,
              componentViewType = _ref59.componentViewType,
              rendererType = _ref59.rendererType,
              componentFactory = _ref59.componentFactory;

          _classCallCheck2(this, CompileDirectiveMetadata);

          this.isHost = !!isHost;
          this.type = type;
          this.isComponent = isComponent;
          this.selector = selector;
          this.exportAs = exportAs;
          this.changeDetection = changeDetection;
          this.inputs = inputs;
          this.outputs = outputs;
          this.hostListeners = hostListeners;
          this.hostProperties = hostProperties;
          this.hostAttributes = hostAttributes;
          this.providers = _normalizeArray(providers);
          this.viewProviders = _normalizeArray(viewProviders);
          this.queries = _normalizeArray(queries);
          this.guards = guards;
          this.viewQueries = _normalizeArray(viewQueries);
          this.entryComponents = _normalizeArray(entryComponents);
          this.template = template;
          this.componentViewType = componentViewType;
          this.rendererType = rendererType;
          this.componentFactory = componentFactory;
        }

        _createClass2(CompileDirectiveMetadata, [{
          key: "toSummary",
          value: function toSummary() {
            return {
              summaryKind: CompileSummaryKind.Directive,
              type: this.type,
              isComponent: this.isComponent,
              selector: this.selector,
              exportAs: this.exportAs,
              inputs: this.inputs,
              outputs: this.outputs,
              hostListeners: this.hostListeners,
              hostProperties: this.hostProperties,
              hostAttributes: this.hostAttributes,
              providers: this.providers,
              viewProviders: this.viewProviders,
              queries: this.queries,
              guards: this.guards,
              viewQueries: this.viewQueries,
              entryComponents: this.entryComponents,
              changeDetection: this.changeDetection,
              template: this.template && this.template.toSummary(),
              componentViewType: this.componentViewType,
              rendererType: this.rendererType,
              componentFactory: this.componentFactory
            };
          }
        }], [{
          key: "create",
          value: function create(_ref60) {
            var isHost = _ref60.isHost,
                type = _ref60.type,
                isComponent = _ref60.isComponent,
                selector = _ref60.selector,
                exportAs = _ref60.exportAs,
                changeDetection = _ref60.changeDetection,
                inputs = _ref60.inputs,
                outputs = _ref60.outputs,
                host = _ref60.host,
                providers = _ref60.providers,
                viewProviders = _ref60.viewProviders,
                queries = _ref60.queries,
                guards = _ref60.guards,
                viewQueries = _ref60.viewQueries,
                entryComponents = _ref60.entryComponents,
                template = _ref60.template,
                componentViewType = _ref60.componentViewType,
                rendererType = _ref60.rendererType,
                componentFactory = _ref60.componentFactory;
            var hostListeners = {};
            var hostProperties = {};
            var hostAttributes = {};

            if (host != null) {
              Object.keys(host).forEach(function (key) {
                var value = host[key];
                var matches = key.match(HOST_REG_EXP);

                if (matches === null) {
                  hostAttributes[key] = value;
                } else if (matches[1] != null) {
                  hostProperties[matches[1]] = value;
                } else if (matches[2] != null) {
                  hostListeners[matches[2]] = value;
                }
              });
            }

            var inputsMap = {};

            if (inputs != null) {
              inputs.forEach(function (bindConfig) {
                // canonical syntax: `dirProp: elProp`
                // if there is no `:`, use dirProp = elProp
                var parts = splitAtColon(bindConfig, [bindConfig, bindConfig]);
                inputsMap[parts[0]] = parts[1];
              });
            }

            var outputsMap = {};

            if (outputs != null) {
              outputs.forEach(function (bindConfig) {
                // canonical syntax: `dirProp: elProp`
                // if there is no `:`, use dirProp = elProp
                var parts = splitAtColon(bindConfig, [bindConfig, bindConfig]);
                outputsMap[parts[0]] = parts[1];
              });
            }

            return new CompileDirectiveMetadata({
              isHost: isHost,
              type: type,
              isComponent: !!isComponent,
              selector: selector,
              exportAs: exportAs,
              changeDetection: changeDetection,
              inputs: inputsMap,
              outputs: outputsMap,
              hostListeners: hostListeners,
              hostProperties: hostProperties,
              hostAttributes: hostAttributes,
              providers: providers,
              viewProviders: viewProviders,
              queries: queries,
              guards: guards,
              viewQueries: viewQueries,
              entryComponents: entryComponents,
              template: template,
              componentViewType: componentViewType,
              rendererType: rendererType,
              componentFactory: componentFactory
            });
          }
        }]);

        return CompileDirectiveMetadata;
      }();

      var CompilePipeMetadata = /*#__PURE__*/function () {
        function CompilePipeMetadata(_ref61) {
          var type = _ref61.type,
              name = _ref61.name,
              pure = _ref61.pure;

          _classCallCheck2(this, CompilePipeMetadata);

          this.type = type;
          this.name = name;
          this.pure = !!pure;
        }

        _createClass2(CompilePipeMetadata, [{
          key: "toSummary",
          value: function toSummary() {
            return {
              summaryKind: CompileSummaryKind.Pipe,
              type: this.type,
              name: this.name,
              pure: this.pure
            };
          }
        }]);

        return CompilePipeMetadata;
      }();

      var CompileShallowModuleMetadata = function CompileShallowModuleMetadata() {
        _classCallCheck2(this, CompileShallowModuleMetadata);
      };
      /**
       * Metadata regarding compilation of a module.
       */


      var CompileNgModuleMetadata = /*#__PURE__*/function () {
        function CompileNgModuleMetadata(_ref62) {
          var type = _ref62.type,
              providers = _ref62.providers,
              declaredDirectives = _ref62.declaredDirectives,
              exportedDirectives = _ref62.exportedDirectives,
              declaredPipes = _ref62.declaredPipes,
              exportedPipes = _ref62.exportedPipes,
              entryComponents = _ref62.entryComponents,
              bootstrapComponents = _ref62.bootstrapComponents,
              importedModules = _ref62.importedModules,
              exportedModules = _ref62.exportedModules,
              schemas = _ref62.schemas,
              transitiveModule = _ref62.transitiveModule,
              id = _ref62.id;

          _classCallCheck2(this, CompileNgModuleMetadata);

          this.type = type || null;
          this.declaredDirectives = _normalizeArray(declaredDirectives);
          this.exportedDirectives = _normalizeArray(exportedDirectives);
          this.declaredPipes = _normalizeArray(declaredPipes);
          this.exportedPipes = _normalizeArray(exportedPipes);
          this.providers = _normalizeArray(providers);
          this.entryComponents = _normalizeArray(entryComponents);
          this.bootstrapComponents = _normalizeArray(bootstrapComponents);
          this.importedModules = _normalizeArray(importedModules);
          this.exportedModules = _normalizeArray(exportedModules);
          this.schemas = _normalizeArray(schemas);
          this.id = id || null;
          this.transitiveModule = transitiveModule || null;
        }

        _createClass2(CompileNgModuleMetadata, [{
          key: "toSummary",
          value: function toSummary() {
            var module = this.transitiveModule;
            return {
              summaryKind: CompileSummaryKind.NgModule,
              type: this.type,
              entryComponents: module.entryComponents,
              providers: module.providers,
              modules: module.modules,
              exportedDirectives: module.exportedDirectives,
              exportedPipes: module.exportedPipes
            };
          }
        }]);

        return CompileNgModuleMetadata;
      }();

      var TransitiveCompileNgModuleMetadata = /*#__PURE__*/function () {
        function TransitiveCompileNgModuleMetadata() {
          _classCallCheck2(this, TransitiveCompileNgModuleMetadata);

          this.directivesSet = new Set();
          this.directives = [];
          this.exportedDirectivesSet = new Set();
          this.exportedDirectives = [];
          this.pipesSet = new Set();
          this.pipes = [];
          this.exportedPipesSet = new Set();
          this.exportedPipes = [];
          this.modulesSet = new Set();
          this.modules = [];
          this.entryComponentsSet = new Set();
          this.entryComponents = [];
          this.providers = [];
        }

        _createClass2(TransitiveCompileNgModuleMetadata, [{
          key: "addProvider",
          value: function addProvider(provider, module) {
            this.providers.push({
              provider: provider,
              module: module
            });
          }
        }, {
          key: "addDirective",
          value: function addDirective(id) {
            if (!this.directivesSet.has(id.reference)) {
              this.directivesSet.add(id.reference);
              this.directives.push(id);
            }
          }
        }, {
          key: "addExportedDirective",
          value: function addExportedDirective(id) {
            if (!this.exportedDirectivesSet.has(id.reference)) {
              this.exportedDirectivesSet.add(id.reference);
              this.exportedDirectives.push(id);
            }
          }
        }, {
          key: "addPipe",
          value: function addPipe(id) {
            if (!this.pipesSet.has(id.reference)) {
              this.pipesSet.add(id.reference);
              this.pipes.push(id);
            }
          }
        }, {
          key: "addExportedPipe",
          value: function addExportedPipe(id) {
            if (!this.exportedPipesSet.has(id.reference)) {
              this.exportedPipesSet.add(id.reference);
              this.exportedPipes.push(id);
            }
          }
        }, {
          key: "addModule",
          value: function addModule(id) {
            if (!this.modulesSet.has(id.reference)) {
              this.modulesSet.add(id.reference);
              this.modules.push(id);
            }
          }
        }, {
          key: "addEntryComponent",
          value: function addEntryComponent(ec) {
            if (!this.entryComponentsSet.has(ec.componentType)) {
              this.entryComponentsSet.add(ec.componentType);
              this.entryComponents.push(ec);
            }
          }
        }]);

        return TransitiveCompileNgModuleMetadata;
      }();

      function _normalizeArray(obj) {
        return obj || [];
      }

      var ProviderMeta = function ProviderMeta(token, _ref63) {
        var useClass = _ref63.useClass,
            useValue = _ref63.useValue,
            useExisting = _ref63.useExisting,
            useFactory = _ref63.useFactory,
            deps = _ref63.deps,
            multi = _ref63.multi;

        _classCallCheck2(this, ProviderMeta);

        this.token = token;
        this.useClass = useClass || null;
        this.useValue = useValue;
        this.useExisting = useExisting;
        this.useFactory = useFactory || null;
        this.dependencies = deps || null;
        this.multi = !!multi;
      };

      function flatten(list) {
        return list.reduce(function (flat, item) {
          var flatItem = Array.isArray(item) ? flatten(item) : item;
          return flat.concat(flatItem);
        }, []);
      }

      function jitSourceUrl(url) {
        // Note: We need 3 "/" so that ng shows up as a separate domain
        // in the chrome dev tools.
        return url.replace(/(\w+:\/\/[\w:-]+)?(\/+)?/, 'ng:///');
      }

      function templateSourceUrl(ngModuleType, compMeta, templateMeta) {
        var url;

        if (templateMeta.isInline) {
          if (compMeta.type.reference instanceof StaticSymbol) {
            // Note: a .ts file might contain multiple components with inline templates,
            // so we need to give them unique urls, as these will be used for sourcemaps.
            url = "".concat(compMeta.type.reference.filePath, ".").concat(compMeta.type.reference.name, ".html");
          } else {
            url = "".concat(identifierName(ngModuleType), "/").concat(identifierName(compMeta.type), ".html");
          }
        } else {
          url = templateMeta.templateUrl;
        }

        return compMeta.type.reference instanceof StaticSymbol ? url : jitSourceUrl(url);
      }

      function sharedStylesheetJitUrl(meta, id) {
        var pathParts = meta.moduleUrl.split(/\/\\/g);
        var baseName = pathParts[pathParts.length - 1];
        return jitSourceUrl("css/".concat(id).concat(baseName, ".ngstyle.js"));
      }

      function ngModuleJitUrl(moduleMeta) {
        return jitSourceUrl("".concat(identifierName(moduleMeta.type), "/module.ngfactory.js"));
      }

      function templateJitUrl(ngModuleType, compMeta) {
        return jitSourceUrl("".concat(identifierName(ngModuleType), "/").concat(identifierName(compMeta.type), ".ngfactory.js"));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var CORE$1 = '@angular/core';

      var Identifiers$1 = function Identifiers$1() {
        _classCallCheck2(this, Identifiers$1);
      };
      /* Methods */


      Identifiers$1.NEW_METHOD = 'factory';
      Identifiers$1.TRANSFORM_METHOD = 'transform';
      Identifiers$1.PATCH_DEPS = 'patchedDeps';
      Identifiers$1.core = {
        name: null,
        moduleName: CORE$1
      };
      /* Instructions */

      Identifiers$1.namespaceHTML = {
        name: 'ɵɵnamespaceHTML',
        moduleName: CORE$1
      };
      Identifiers$1.namespaceMathML = {
        name: 'ɵɵnamespaceMathML',
        moduleName: CORE$1
      };
      Identifiers$1.namespaceSVG = {
        name: 'ɵɵnamespaceSVG',
        moduleName: CORE$1
      };
      Identifiers$1.element = {
        name: 'ɵɵelement',
        moduleName: CORE$1
      };
      Identifiers$1.elementStart = {
        name: 'ɵɵelementStart',
        moduleName: CORE$1
      };
      Identifiers$1.elementEnd = {
        name: 'ɵɵelementEnd',
        moduleName: CORE$1
      };
      Identifiers$1.advance = {
        name: 'ɵɵadvance',
        moduleName: CORE$1
      };
      Identifiers$1.syntheticHostProperty = {
        name: 'ɵɵsyntheticHostProperty',
        moduleName: CORE$1
      };
      Identifiers$1.syntheticHostListener = {
        name: 'ɵɵsyntheticHostListener',
        moduleName: CORE$1
      };
      Identifiers$1.attribute = {
        name: 'ɵɵattribute',
        moduleName: CORE$1
      };
      Identifiers$1.attributeInterpolate1 = {
        name: 'ɵɵattributeInterpolate1',
        moduleName: CORE$1
      };
      Identifiers$1.attributeInterpolate2 = {
        name: 'ɵɵattributeInterpolate2',
        moduleName: CORE$1
      };
      Identifiers$1.attributeInterpolate3 = {
        name: 'ɵɵattributeInterpolate3',
        moduleName: CORE$1
      };
      Identifiers$1.attributeInterpolate4 = {
        name: 'ɵɵattributeInterpolate4',
        moduleName: CORE$1
      };
      Identifiers$1.attributeInterpolate5 = {
        name: 'ɵɵattributeInterpolate5',
        moduleName: CORE$1
      };
      Identifiers$1.attributeInterpolate6 = {
        name: 'ɵɵattributeInterpolate6',
        moduleName: CORE$1
      };
      Identifiers$1.attributeInterpolate7 = {
        name: 'ɵɵattributeInterpolate7',
        moduleName: CORE$1
      };
      Identifiers$1.attributeInterpolate8 = {
        name: 'ɵɵattributeInterpolate8',
        moduleName: CORE$1
      };
      Identifiers$1.attributeInterpolateV = {
        name: 'ɵɵattributeInterpolateV',
        moduleName: CORE$1
      };
      Identifiers$1.classProp = {
        name: 'ɵɵclassProp',
        moduleName: CORE$1
      };
      Identifiers$1.elementContainerStart = {
        name: 'ɵɵelementContainerStart',
        moduleName: CORE$1
      };
      Identifiers$1.elementContainerEnd = {
        name: 'ɵɵelementContainerEnd',
        moduleName: CORE$1
      };
      Identifiers$1.elementContainer = {
        name: 'ɵɵelementContainer',
        moduleName: CORE$1
      };
      Identifiers$1.styleMap = {
        name: 'ɵɵstyleMap',
        moduleName: CORE$1
      };
      Identifiers$1.styleMapInterpolate1 = {
        name: 'ɵɵstyleMapInterpolate1',
        moduleName: CORE$1
      };
      Identifiers$1.styleMapInterpolate2 = {
        name: 'ɵɵstyleMapInterpolate2',
        moduleName: CORE$1
      };
      Identifiers$1.styleMapInterpolate3 = {
        name: 'ɵɵstyleMapInterpolate3',
        moduleName: CORE$1
      };
      Identifiers$1.styleMapInterpolate4 = {
        name: 'ɵɵstyleMapInterpolate4',
        moduleName: CORE$1
      };
      Identifiers$1.styleMapInterpolate5 = {
        name: 'ɵɵstyleMapInterpolate5',
        moduleName: CORE$1
      };
      Identifiers$1.styleMapInterpolate6 = {
        name: 'ɵɵstyleMapInterpolate6',
        moduleName: CORE$1
      };
      Identifiers$1.styleMapInterpolate7 = {
        name: 'ɵɵstyleMapInterpolate7',
        moduleName: CORE$1
      };
      Identifiers$1.styleMapInterpolate8 = {
        name: 'ɵɵstyleMapInterpolate8',
        moduleName: CORE$1
      };
      Identifiers$1.styleMapInterpolateV = {
        name: 'ɵɵstyleMapInterpolateV',
        moduleName: CORE$1
      };
      Identifiers$1.classMap = {
        name: 'ɵɵclassMap',
        moduleName: CORE$1
      };
      Identifiers$1.classMapInterpolate1 = {
        name: 'ɵɵclassMapInterpolate1',
        moduleName: CORE$1
      };
      Identifiers$1.classMapInterpolate2 = {
        name: 'ɵɵclassMapInterpolate2',
        moduleName: CORE$1
      };
      Identifiers$1.classMapInterpolate3 = {
        name: 'ɵɵclassMapInterpolate3',
        moduleName: CORE$1
      };
      Identifiers$1.classMapInterpolate4 = {
        name: 'ɵɵclassMapInterpolate4',
        moduleName: CORE$1
      };
      Identifiers$1.classMapInterpolate5 = {
        name: 'ɵɵclassMapInterpolate5',
        moduleName: CORE$1
      };
      Identifiers$1.classMapInterpolate6 = {
        name: 'ɵɵclassMapInterpolate6',
        moduleName: CORE$1
      };
      Identifiers$1.classMapInterpolate7 = {
        name: 'ɵɵclassMapInterpolate7',
        moduleName: CORE$1
      };
      Identifiers$1.classMapInterpolate8 = {
        name: 'ɵɵclassMapInterpolate8',
        moduleName: CORE$1
      };
      Identifiers$1.classMapInterpolateV = {
        name: 'ɵɵclassMapInterpolateV',
        moduleName: CORE$1
      };
      Identifiers$1.styleProp = {
        name: 'ɵɵstyleProp',
        moduleName: CORE$1
      };
      Identifiers$1.stylePropInterpolate1 = {
        name: 'ɵɵstylePropInterpolate1',
        moduleName: CORE$1
      };
      Identifiers$1.stylePropInterpolate2 = {
        name: 'ɵɵstylePropInterpolate2',
        moduleName: CORE$1
      };
      Identifiers$1.stylePropInterpolate3 = {
        name: 'ɵɵstylePropInterpolate3',
        moduleName: CORE$1
      };
      Identifiers$1.stylePropInterpolate4 = {
        name: 'ɵɵstylePropInterpolate4',
        moduleName: CORE$1
      };
      Identifiers$1.stylePropInterpolate5 = {
        name: 'ɵɵstylePropInterpolate5',
        moduleName: CORE$1
      };
      Identifiers$1.stylePropInterpolate6 = {
        name: 'ɵɵstylePropInterpolate6',
        moduleName: CORE$1
      };
      Identifiers$1.stylePropInterpolate7 = {
        name: 'ɵɵstylePropInterpolate7',
        moduleName: CORE$1
      };
      Identifiers$1.stylePropInterpolate8 = {
        name: 'ɵɵstylePropInterpolate8',
        moduleName: CORE$1
      };
      Identifiers$1.stylePropInterpolateV = {
        name: 'ɵɵstylePropInterpolateV',
        moduleName: CORE$1
      };
      Identifiers$1.nextContext = {
        name: 'ɵɵnextContext',
        moduleName: CORE$1
      };
      Identifiers$1.templateCreate = {
        name: 'ɵɵtemplate',
        moduleName: CORE$1
      };
      Identifiers$1.text = {
        name: 'ɵɵtext',
        moduleName: CORE$1
      };
      Identifiers$1.enableBindings = {
        name: 'ɵɵenableBindings',
        moduleName: CORE$1
      };
      Identifiers$1.disableBindings = {
        name: 'ɵɵdisableBindings',
        moduleName: CORE$1
      };
      Identifiers$1.getCurrentView = {
        name: 'ɵɵgetCurrentView',
        moduleName: CORE$1
      };
      Identifiers$1.textInterpolate = {
        name: 'ɵɵtextInterpolate',
        moduleName: CORE$1
      };
      Identifiers$1.textInterpolate1 = {
        name: 'ɵɵtextInterpolate1',
        moduleName: CORE$1
      };
      Identifiers$1.textInterpolate2 = {
        name: 'ɵɵtextInterpolate2',
        moduleName: CORE$1
      };
      Identifiers$1.textInterpolate3 = {
        name: 'ɵɵtextInterpolate3',
        moduleName: CORE$1
      };
      Identifiers$1.textInterpolate4 = {
        name: 'ɵɵtextInterpolate4',
        moduleName: CORE$1
      };
      Identifiers$1.textInterpolate5 = {
        name: 'ɵɵtextInterpolate5',
        moduleName: CORE$1
      };
      Identifiers$1.textInterpolate6 = {
        name: 'ɵɵtextInterpolate6',
        moduleName: CORE$1
      };
      Identifiers$1.textInterpolate7 = {
        name: 'ɵɵtextInterpolate7',
        moduleName: CORE$1
      };
      Identifiers$1.textInterpolate8 = {
        name: 'ɵɵtextInterpolate8',
        moduleName: CORE$1
      };
      Identifiers$1.textInterpolateV = {
        name: 'ɵɵtextInterpolateV',
        moduleName: CORE$1
      };
      Identifiers$1.restoreView = {
        name: 'ɵɵrestoreView',
        moduleName: CORE$1
      };
      Identifiers$1.pureFunction0 = {
        name: 'ɵɵpureFunction0',
        moduleName: CORE$1
      };
      Identifiers$1.pureFunction1 = {
        name: 'ɵɵpureFunction1',
        moduleName: CORE$1
      };
      Identifiers$1.pureFunction2 = {
        name: 'ɵɵpureFunction2',
        moduleName: CORE$1
      };
      Identifiers$1.pureFunction3 = {
        name: 'ɵɵpureFunction3',
        moduleName: CORE$1
      };
      Identifiers$1.pureFunction4 = {
        name: 'ɵɵpureFunction4',
        moduleName: CORE$1
      };
      Identifiers$1.pureFunction5 = {
        name: 'ɵɵpureFunction5',
        moduleName: CORE$1
      };
      Identifiers$1.pureFunction6 = {
        name: 'ɵɵpureFunction6',
        moduleName: CORE$1
      };
      Identifiers$1.pureFunction7 = {
        name: 'ɵɵpureFunction7',
        moduleName: CORE$1
      };
      Identifiers$1.pureFunction8 = {
        name: 'ɵɵpureFunction8',
        moduleName: CORE$1
      };
      Identifiers$1.pureFunctionV = {
        name: 'ɵɵpureFunctionV',
        moduleName: CORE$1
      };
      Identifiers$1.pipeBind1 = {
        name: 'ɵɵpipeBind1',
        moduleName: CORE$1
      };
      Identifiers$1.pipeBind2 = {
        name: 'ɵɵpipeBind2',
        moduleName: CORE$1
      };
      Identifiers$1.pipeBind3 = {
        name: 'ɵɵpipeBind3',
        moduleName: CORE$1
      };
      Identifiers$1.pipeBind4 = {
        name: 'ɵɵpipeBind4',
        moduleName: CORE$1
      };
      Identifiers$1.pipeBindV = {
        name: 'ɵɵpipeBindV',
        moduleName: CORE$1
      };
      Identifiers$1.hostProperty = {
        name: 'ɵɵhostProperty',
        moduleName: CORE$1
      };
      Identifiers$1.property = {
        name: 'ɵɵproperty',
        moduleName: CORE$1
      };
      Identifiers$1.propertyInterpolate = {
        name: 'ɵɵpropertyInterpolate',
        moduleName: CORE$1
      };
      Identifiers$1.propertyInterpolate1 = {
        name: 'ɵɵpropertyInterpolate1',
        moduleName: CORE$1
      };
      Identifiers$1.propertyInterpolate2 = {
        name: 'ɵɵpropertyInterpolate2',
        moduleName: CORE$1
      };
      Identifiers$1.propertyInterpolate3 = {
        name: 'ɵɵpropertyInterpolate3',
        moduleName: CORE$1
      };
      Identifiers$1.propertyInterpolate4 = {
        name: 'ɵɵpropertyInterpolate4',
        moduleName: CORE$1
      };
      Identifiers$1.propertyInterpolate5 = {
        name: 'ɵɵpropertyInterpolate5',
        moduleName: CORE$1
      };
      Identifiers$1.propertyInterpolate6 = {
        name: 'ɵɵpropertyInterpolate6',
        moduleName: CORE$1
      };
      Identifiers$1.propertyInterpolate7 = {
        name: 'ɵɵpropertyInterpolate7',
        moduleName: CORE$1
      };
      Identifiers$1.propertyInterpolate8 = {
        name: 'ɵɵpropertyInterpolate8',
        moduleName: CORE$1
      };
      Identifiers$1.propertyInterpolateV = {
        name: 'ɵɵpropertyInterpolateV',
        moduleName: CORE$1
      };
      Identifiers$1.i18n = {
        name: 'ɵɵi18n',
        moduleName: CORE$1
      };
      Identifiers$1.i18nAttributes = {
        name: 'ɵɵi18nAttributes',
        moduleName: CORE$1
      };
      Identifiers$1.i18nExp = {
        name: 'ɵɵi18nExp',
        moduleName: CORE$1
      };
      Identifiers$1.i18nStart = {
        name: 'ɵɵi18nStart',
        moduleName: CORE$1
      };
      Identifiers$1.i18nEnd = {
        name: 'ɵɵi18nEnd',
        moduleName: CORE$1
      };
      Identifiers$1.i18nApply = {
        name: 'ɵɵi18nApply',
        moduleName: CORE$1
      };
      Identifiers$1.i18nPostprocess = {
        name: 'ɵɵi18nPostprocess',
        moduleName: CORE$1
      };
      Identifiers$1.pipe = {
        name: 'ɵɵpipe',
        moduleName: CORE$1
      };
      Identifiers$1.projection = {
        name: 'ɵɵprojection',
        moduleName: CORE$1
      };
      Identifiers$1.projectionDef = {
        name: 'ɵɵprojectionDef',
        moduleName: CORE$1
      };
      Identifiers$1.reference = {
        name: 'ɵɵreference',
        moduleName: CORE$1
      };
      Identifiers$1.inject = {
        name: 'ɵɵinject',
        moduleName: CORE$1
      };
      Identifiers$1.injectAttribute = {
        name: 'ɵɵinjectAttribute',
        moduleName: CORE$1
      };
      Identifiers$1.injectPipeChangeDetectorRef = {
        name: 'ɵɵinjectPipeChangeDetectorRef',
        moduleName: CORE$1
      };
      Identifiers$1.directiveInject = {
        name: 'ɵɵdirectiveInject',
        moduleName: CORE$1
      };
      Identifiers$1.invalidFactory = {
        name: 'ɵɵinvalidFactory',
        moduleName: CORE$1
      };
      Identifiers$1.invalidFactoryDep = {
        name: 'ɵɵinvalidFactoryDep',
        moduleName: CORE$1
      };
      Identifiers$1.templateRefExtractor = {
        name: 'ɵɵtemplateRefExtractor',
        moduleName: CORE$1
      };
      Identifiers$1.forwardRef = {
        name: 'forwardRef',
        moduleName: CORE$1
      };
      Identifiers$1.resolveForwardRef = {
        name: 'resolveForwardRef',
        moduleName: CORE$1
      };
      Identifiers$1.resolveWindow = {
        name: 'ɵɵresolveWindow',
        moduleName: CORE$1
      };
      Identifiers$1.resolveDocument = {
        name: 'ɵɵresolveDocument',
        moduleName: CORE$1
      };
      Identifiers$1.resolveBody = {
        name: 'ɵɵresolveBody',
        moduleName: CORE$1
      };
      Identifiers$1.defineComponent = {
        name: 'ɵɵdefineComponent',
        moduleName: CORE$1
      };
      Identifiers$1.declareComponent = {
        name: 'ɵɵngDeclareComponent',
        moduleName: CORE$1
      };
      Identifiers$1.setComponentScope = {
        name: 'ɵɵsetComponentScope',
        moduleName: CORE$1
      };
      Identifiers$1.ChangeDetectionStrategy = {
        name: 'ChangeDetectionStrategy',
        moduleName: CORE$1
      };
      Identifiers$1.ViewEncapsulation = {
        name: 'ViewEncapsulation',
        moduleName: CORE$1
      };
      Identifiers$1.ComponentDefWithMeta = {
        name: 'ɵɵComponentDefWithMeta',
        moduleName: CORE$1
      };
      Identifiers$1.FactoryDef = {
        name: 'ɵɵFactoryDef',
        moduleName: CORE$1
      };
      Identifiers$1.defineDirective = {
        name: 'ɵɵdefineDirective',
        moduleName: CORE$1
      };
      Identifiers$1.declareDirective = {
        name: 'ɵɵngDeclareDirective',
        moduleName: CORE$1
      };
      Identifiers$1.DirectiveDefWithMeta = {
        name: 'ɵɵDirectiveDefWithMeta',
        moduleName: CORE$1
      };
      Identifiers$1.InjectorDef = {
        name: 'ɵɵInjectorDef',
        moduleName: CORE$1
      };
      Identifiers$1.defineInjector = {
        name: 'ɵɵdefineInjector',
        moduleName: CORE$1
      };
      Identifiers$1.NgModuleDefWithMeta = {
        name: 'ɵɵNgModuleDefWithMeta',
        moduleName: CORE$1
      };
      Identifiers$1.ModuleWithProviders = {
        name: 'ModuleWithProviders',
        moduleName: CORE$1
      };
      Identifiers$1.defineNgModule = {
        name: 'ɵɵdefineNgModule',
        moduleName: CORE$1
      };
      Identifiers$1.setNgModuleScope = {
        name: 'ɵɵsetNgModuleScope',
        moduleName: CORE$1
      };
      Identifiers$1.PipeDefWithMeta = {
        name: 'ɵɵPipeDefWithMeta',
        moduleName: CORE$1
      };
      Identifiers$1.definePipe = {
        name: 'ɵɵdefinePipe',
        moduleName: CORE$1
      };
      Identifiers$1.declarePipe = {
        name: 'ɵɵngDeclarePipe',
        moduleName: CORE$1
      };
      Identifiers$1.queryRefresh = {
        name: 'ɵɵqueryRefresh',
        moduleName: CORE$1
      };
      Identifiers$1.viewQuery = {
        name: 'ɵɵviewQuery',
        moduleName: CORE$1
      };
      Identifiers$1.loadQuery = {
        name: 'ɵɵloadQuery',
        moduleName: CORE$1
      };
      Identifiers$1.contentQuery = {
        name: 'ɵɵcontentQuery',
        moduleName: CORE$1
      };
      Identifiers$1.NgOnChangesFeature = {
        name: 'ɵɵNgOnChangesFeature',
        moduleName: CORE$1
      };
      Identifiers$1.InheritDefinitionFeature = {
        name: 'ɵɵInheritDefinitionFeature',
        moduleName: CORE$1
      };
      Identifiers$1.CopyDefinitionFeature = {
        name: 'ɵɵCopyDefinitionFeature',
        moduleName: CORE$1
      };
      Identifiers$1.ProvidersFeature = {
        name: 'ɵɵProvidersFeature',
        moduleName: CORE$1
      };
      Identifiers$1.listener = {
        name: 'ɵɵlistener',
        moduleName: CORE$1
      };
      Identifiers$1.getFactoryOf = {
        name: 'ɵɵgetFactoryOf',
        moduleName: CORE$1
      };
      Identifiers$1.getInheritedFactory = {
        name: 'ɵɵgetInheritedFactory',
        moduleName: CORE$1
      }; // sanitization-related functions

      Identifiers$1.sanitizeHtml = {
        name: 'ɵɵsanitizeHtml',
        moduleName: CORE$1
      };
      Identifiers$1.sanitizeStyle = {
        name: 'ɵɵsanitizeStyle',
        moduleName: CORE$1
      };
      Identifiers$1.sanitizeResourceUrl = {
        name: 'ɵɵsanitizeResourceUrl',
        moduleName: CORE$1
      };
      Identifiers$1.sanitizeScript = {
        name: 'ɵɵsanitizeScript',
        moduleName: CORE$1
      };
      Identifiers$1.sanitizeUrl = {
        name: 'ɵɵsanitizeUrl',
        moduleName: CORE$1
      };
      Identifiers$1.sanitizeUrlOrResourceUrl = {
        name: 'ɵɵsanitizeUrlOrResourceUrl',
        moduleName: CORE$1
      };
      Identifiers$1.trustConstantHtml = {
        name: 'ɵɵtrustConstantHtml',
        moduleName: CORE$1
      };
      Identifiers$1.trustConstantResourceUrl = {
        name: 'ɵɵtrustConstantResourceUrl',
        moduleName: CORE$1
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit

      var VERSION = 3;
      var JS_B64_PREFIX = '# sourceMappingURL=data:application/json;base64,';

      var SourceMapGenerator = /*#__PURE__*/function () {
        function SourceMapGenerator() {
          var file = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;

          _classCallCheck2(this, SourceMapGenerator);

          this.file = file;
          this.sourcesContent = new Map();
          this.lines = [];
          this.lastCol0 = 0;
          this.hasMappings = false;
        } // The content is `null` when the content is expected to be loaded using the URL


        _createClass2(SourceMapGenerator, [{
          key: "addSource",
          value: function addSource(url) {
            var content = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;

            if (!this.sourcesContent.has(url)) {
              this.sourcesContent.set(url, content);
            }

            return this;
          }
        }, {
          key: "addLine",
          value: function addLine() {
            this.lines.push([]);
            this.lastCol0 = 0;
            return this;
          }
        }, {
          key: "addMapping",
          value: function addMapping(col0, sourceUrl, sourceLine0, sourceCol0) {
            if (!this.currentLine) {
              throw new Error("A line must be added before mappings can be added");
            }

            if (sourceUrl != null && !this.sourcesContent.has(sourceUrl)) {
              throw new Error("Unknown source file \"".concat(sourceUrl, "\""));
            }

            if (col0 == null) {
              throw new Error("The column in the generated code must be provided");
            }

            if (col0 < this.lastCol0) {
              throw new Error("Mapping should be added in output order");
            }

            if (sourceUrl && (sourceLine0 == null || sourceCol0 == null)) {
              throw new Error("The source location must be provided when a source url is provided");
            }

            this.hasMappings = true;
            this.lastCol0 = col0;
            this.currentLine.push({
              col0: col0,
              sourceUrl: sourceUrl,
              sourceLine0: sourceLine0,
              sourceCol0: sourceCol0
            });
            return this;
          }
          /**
           * @internal strip this from published d.ts files due to
           * https://github.com/microsoft/TypeScript/issues/36216
           */

        }, {
          key: "currentLine",
          get: function get() {
            return this.lines.slice(-1)[0];
          }
        }, {
          key: "toJSON",
          value: function toJSON() {
            var _this186 = this;

            if (!this.hasMappings) {
              return null;
            }

            var sourcesIndex = new Map();
            var sources = [];
            var sourcesContent = [];
            Array.from(this.sourcesContent.keys()).forEach(function (url, i) {
              sourcesIndex.set(url, i);
              sources.push(url);
              sourcesContent.push(_this186.sourcesContent.get(url) || null);
            });
            var mappings = '';
            var lastCol0 = 0;
            var lastSourceIndex = 0;
            var lastSourceLine0 = 0;
            var lastSourceCol0 = 0;
            this.lines.forEach(function (segments) {
              lastCol0 = 0;
              mappings += segments.map(function (segment) {
                // zero-based starting column of the line in the generated code
                var segAsStr = toBase64VLQ(segment.col0 - lastCol0);
                lastCol0 = segment.col0;

                if (segment.sourceUrl != null) {
                  // zero-based index into the “sources” list
                  segAsStr += toBase64VLQ(sourcesIndex.get(segment.sourceUrl) - lastSourceIndex);
                  lastSourceIndex = sourcesIndex.get(segment.sourceUrl); // the zero-based starting line in the original source

                  segAsStr += toBase64VLQ(segment.sourceLine0 - lastSourceLine0);
                  lastSourceLine0 = segment.sourceLine0; // the zero-based starting column in the original source

                  segAsStr += toBase64VLQ(segment.sourceCol0 - lastSourceCol0);
                  lastSourceCol0 = segment.sourceCol0;
                }

                return segAsStr;
              }).join(',');
              mappings += ';';
            });
            mappings = mappings.slice(0, -1);
            return {
              'file': this.file || '',
              'version': VERSION,
              'sourceRoot': '',
              'sources': sources,
              'sourcesContent': sourcesContent,
              'mappings': mappings
            };
          }
        }, {
          key: "toJsComment",
          value: function toJsComment() {
            return this.hasMappings ? '//' + JS_B64_PREFIX + toBase64String(JSON.stringify(this, null, 0)) : '';
          }
        }]);

        return SourceMapGenerator;
      }();

      function toBase64String(value) {
        var b64 = '';
        var encoded = utf8Encode(value);

        for (var i = 0; i < encoded.length;) {
          var i1 = encoded[i++];
          var i2 = i < encoded.length ? encoded[i++] : null;
          var i3 = i < encoded.length ? encoded[i++] : null;
          b64 += toBase64Digit(i1 >> 2);
          b64 += toBase64Digit((i1 & 3) << 4 | (i2 === null ? 0 : i2 >> 4));
          b64 += i2 === null ? '=' : toBase64Digit((i2 & 15) << 2 | (i3 === null ? 0 : i3 >> 6));
          b64 += i2 === null || i3 === null ? '=' : toBase64Digit(i3 & 63);
        }

        return b64;
      }

      function toBase64VLQ(value) {
        value = value < 0 ? (-value << 1) + 1 : value << 1;
        var out = '';

        do {
          var digit = value & 31;
          value = value >> 5;

          if (value > 0) {
            digit = digit | 32;
          }

          out += toBase64Digit(digit);
        } while (value > 0);

        return out;
      }

      var B64_DIGITS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

      function toBase64Digit(value) {
        if (value < 0 || value >= 64) {
          throw new Error("Can only encode value in the range [0, 63]");
        }

        return B64_DIGITS[value];
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var _SINGLE_QUOTE_ESCAPE_STRING_RE = /'|\\|\n|\r|\$/g;
      var _LEGAL_IDENTIFIER_RE = /^[$A-Z_][0-9A-Z_$]*$/i;
      var _INDENT_WITH = '  ';
      var CATCH_ERROR_VAR$1 = variable('error', null, null);
      var CATCH_STACK_VAR$1 = variable('stack', null, null);

      var _EmittedLine = function _EmittedLine(indent) {
        _classCallCheck2(this, _EmittedLine);

        this.indent = indent;
        this.partsLength = 0;
        this.parts = [];
        this.srcSpans = [];
      };

      var EmitterVisitorContext = /*#__PURE__*/function () {
        function EmitterVisitorContext(_indent) {
          _classCallCheck2(this, EmitterVisitorContext);

          this._indent = _indent;
          this._classes = [];
          this._preambleLineCount = 0;
          this._lines = [new _EmittedLine(_indent)];
        }

        _createClass2(EmitterVisitorContext, [{
          key: "_currentLine",
          get:
          /**
           * @internal strip this from published d.ts files due to
           * https://github.com/microsoft/TypeScript/issues/36216
           */
          function get() {
            return this._lines[this._lines.length - 1];
          }
        }, {
          key: "println",
          value: function println(from) {
            var lastPart = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
            this.print(from || null, lastPart, true);
          }
        }, {
          key: "lineIsEmpty",
          value: function lineIsEmpty() {
            return this._currentLine.parts.length === 0;
          }
        }, {
          key: "lineLength",
          value: function lineLength() {
            return this._currentLine.indent * _INDENT_WITH.length + this._currentLine.partsLength;
          }
        }, {
          key: "print",
          value: function print(from, part) {
            var newLine = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;

            if (part.length > 0) {
              this._currentLine.parts.push(part);

              this._currentLine.partsLength += part.length;

              this._currentLine.srcSpans.push(from && from.sourceSpan || null);
            }

            if (newLine) {
              this._lines.push(new _EmittedLine(this._indent));
            }
          }
        }, {
          key: "removeEmptyLastLine",
          value: function removeEmptyLastLine() {
            if (this.lineIsEmpty()) {
              this._lines.pop();
            }
          }
        }, {
          key: "incIndent",
          value: function incIndent() {
            this._indent++;

            if (this.lineIsEmpty()) {
              this._currentLine.indent = this._indent;
            }
          }
        }, {
          key: "decIndent",
          value: function decIndent() {
            this._indent--;

            if (this.lineIsEmpty()) {
              this._currentLine.indent = this._indent;
            }
          }
        }, {
          key: "pushClass",
          value: function pushClass(clazz) {
            this._classes.push(clazz);
          }
        }, {
          key: "popClass",
          value: function popClass() {
            return this._classes.pop();
          }
        }, {
          key: "currentClass",
          get: function get() {
            return this._classes.length > 0 ? this._classes[this._classes.length - 1] : null;
          }
        }, {
          key: "toSource",
          value: function toSource() {
            return this.sourceLines.map(function (l) {
              return l.parts.length > 0 ? _createIndent(l.indent) + l.parts.join('') : '';
            }).join('\n');
          }
        }, {
          key: "toSourceMapGenerator",
          value: function toSourceMapGenerator(genFilePath) {
            var startsAtLine = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
            var map = new SourceMapGenerator(genFilePath);
            var firstOffsetMapped = false;

            var mapFirstOffsetIfNeeded = function mapFirstOffsetIfNeeded() {
              if (!firstOffsetMapped) {
                // Add a single space so that tools won't try to load the file from disk.
                // Note: We are using virtual urls like `ng:///`, so we have to
                // provide a content here.
                map.addSource(genFilePath, ' ').addMapping(0, genFilePath, 0, 0);
                firstOffsetMapped = true;
              }
            };

            for (var i = 0; i < startsAtLine; i++) {
              map.addLine();
              mapFirstOffsetIfNeeded();
            }

            this.sourceLines.forEach(function (line, lineIdx) {
              map.addLine();
              var spans = line.srcSpans;
              var parts = line.parts;
              var col0 = line.indent * _INDENT_WITH.length;
              var spanIdx = 0; // skip leading parts without source spans

              while (spanIdx < spans.length && !spans[spanIdx]) {
                col0 += parts[spanIdx].length;
                spanIdx++;
              }

              if (spanIdx < spans.length && lineIdx === 0 && col0 === 0) {
                firstOffsetMapped = true;
              } else {
                mapFirstOffsetIfNeeded();
              }

              while (spanIdx < spans.length) {
                var span = spans[spanIdx];
                var source = span.start.file;
                var sourceLine = span.start.line;
                var sourceCol = span.start.col;
                map.addSource(source.url, source.content).addMapping(col0, source.url, sourceLine, sourceCol);
                col0 += parts[spanIdx].length;
                spanIdx++; // assign parts without span or the same span to the previous segment

                while (spanIdx < spans.length && (span === spans[spanIdx] || !spans[spanIdx])) {
                  col0 += parts[spanIdx].length;
                  spanIdx++;
                }
              }
            });
            return map;
          }
        }, {
          key: "setPreambleLineCount",
          value: function setPreambleLineCount(count) {
            return this._preambleLineCount = count;
          }
        }, {
          key: "spanOf",
          value: function spanOf(line, column) {
            var emittedLine = this._lines[line - this._preambleLineCount];

            if (emittedLine) {
              var columnsLeft = column - _createIndent(emittedLine.indent).length;

              for (var partIndex = 0; partIndex < emittedLine.parts.length; partIndex++) {
                var part = emittedLine.parts[partIndex];

                if (part.length > columnsLeft) {
                  return emittedLine.srcSpans[partIndex];
                }

                columnsLeft -= part.length;
              }
            }

            return null;
          }
          /**
           * @internal strip this from published d.ts files due to
           * https://github.com/microsoft/TypeScript/issues/36216
           */

        }, {
          key: "sourceLines",
          get: function get() {
            if (this._lines.length && this._lines[this._lines.length - 1].parts.length === 0) {
              return this._lines.slice(0, -1);
            }

            return this._lines;
          }
        }], [{
          key: "createRoot",
          value: function createRoot() {
            return new EmitterVisitorContext(0);
          }
        }]);

        return EmitterVisitorContext;
      }();

      var AbstractEmitterVisitor = /*#__PURE__*/function () {
        function AbstractEmitterVisitor(_escapeDollarInStrings) {
          _classCallCheck2(this, AbstractEmitterVisitor);

          this._escapeDollarInStrings = _escapeDollarInStrings;
        }

        _createClass2(AbstractEmitterVisitor, [{
          key: "printLeadingComments",
          value: function printLeadingComments(stmt, ctx) {
            if (stmt.leadingComments === undefined) {
              return;
            }

            var _iterator10 = _createForOfIteratorHelper(stmt.leadingComments),
                _step10;

            try {
              for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
                var comment = _step10.value;

                if (comment instanceof JSDocComment) {
                  ctx.print(stmt, "/*".concat(comment.toString(), "*/"), comment.trailingNewline);
                } else {
                  if (comment.multiline) {
                    ctx.print(stmt, "/* ".concat(comment.text, " */"), comment.trailingNewline);
                  } else {
                    comment.text.split('\n').forEach(function (line) {
                      ctx.println(stmt, "// ".concat(line));
                    });
                  }
                }
              }
            } catch (err) {
              _iterator10.e(err);
            } finally {
              _iterator10.f();
            }
          }
        }, {
          key: "visitExpressionStmt",
          value: function visitExpressionStmt(stmt, ctx) {
            this.printLeadingComments(stmt, ctx);
            stmt.expr.visitExpression(this, ctx);
            ctx.println(stmt, ';');
            return null;
          }
        }, {
          key: "visitReturnStmt",
          value: function visitReturnStmt(stmt, ctx) {
            this.printLeadingComments(stmt, ctx);
            ctx.print(stmt, "return ");
            stmt.value.visitExpression(this, ctx);
            ctx.println(stmt, ';');
            return null;
          }
        }, {
          key: "visitIfStmt",
          value: function visitIfStmt(stmt, ctx) {
            this.printLeadingComments(stmt, ctx);
            ctx.print(stmt, "if (");
            stmt.condition.visitExpression(this, ctx);
            ctx.print(stmt, ") {");
            var hasElseCase = stmt.falseCase != null && stmt.falseCase.length > 0;

            if (stmt.trueCase.length <= 1 && !hasElseCase) {
              ctx.print(stmt, " ");
              this.visitAllStatements(stmt.trueCase, ctx);
              ctx.removeEmptyLastLine();
              ctx.print(stmt, " ");
            } else {
              ctx.println();
              ctx.incIndent();
              this.visitAllStatements(stmt.trueCase, ctx);
              ctx.decIndent();

              if (hasElseCase) {
                ctx.println(stmt, "} else {");
                ctx.incIndent();
                this.visitAllStatements(stmt.falseCase, ctx);
                ctx.decIndent();
              }
            }

            ctx.println(stmt, "}");
            return null;
          }
        }, {
          key: "visitThrowStmt",
          value: function visitThrowStmt(stmt, ctx) {
            this.printLeadingComments(stmt, ctx);
            ctx.print(stmt, "throw ");
            stmt.error.visitExpression(this, ctx);
            ctx.println(stmt, ";");
            return null;
          }
        }, {
          key: "visitWriteVarExpr",
          value: function visitWriteVarExpr(expr, ctx) {
            var lineWasEmpty = ctx.lineIsEmpty();

            if (!lineWasEmpty) {
              ctx.print(expr, '(');
            }

            ctx.print(expr, "".concat(expr.name, " = "));
            expr.value.visitExpression(this, ctx);

            if (!lineWasEmpty) {
              ctx.print(expr, ')');
            }

            return null;
          }
        }, {
          key: "visitWriteKeyExpr",
          value: function visitWriteKeyExpr(expr, ctx) {
            var lineWasEmpty = ctx.lineIsEmpty();

            if (!lineWasEmpty) {
              ctx.print(expr, '(');
            }

            expr.receiver.visitExpression(this, ctx);
            ctx.print(expr, "[");
            expr.index.visitExpression(this, ctx);
            ctx.print(expr, "] = ");
            expr.value.visitExpression(this, ctx);

            if (!lineWasEmpty) {
              ctx.print(expr, ')');
            }

            return null;
          }
        }, {
          key: "visitWritePropExpr",
          value: function visitWritePropExpr(expr, ctx) {
            var lineWasEmpty = ctx.lineIsEmpty();

            if (!lineWasEmpty) {
              ctx.print(expr, '(');
            }

            expr.receiver.visitExpression(this, ctx);
            ctx.print(expr, ".".concat(expr.name, " = "));
            expr.value.visitExpression(this, ctx);

            if (!lineWasEmpty) {
              ctx.print(expr, ')');
            }

            return null;
          }
        }, {
          key: "visitInvokeMethodExpr",
          value: function visitInvokeMethodExpr(expr, ctx) {
            expr.receiver.visitExpression(this, ctx);
            var name = expr.name;

            if (expr.builtin != null) {
              name = this.getBuiltinMethodName(expr.builtin);

              if (name == null) {
                // some builtins just mean to skip the call.
                return null;
              }
            }

            ctx.print(expr, ".".concat(name, "("));
            this.visitAllExpressions(expr.args, ctx, ",");
            ctx.print(expr, ")");
            return null;
          }
        }, {
          key: "visitInvokeFunctionExpr",
          value: function visitInvokeFunctionExpr(expr, ctx) {
            expr.fn.visitExpression(this, ctx);
            ctx.print(expr, "(");
            this.visitAllExpressions(expr.args, ctx, ',');
            ctx.print(expr, ")");
            return null;
          }
        }, {
          key: "visitTaggedTemplateExpr",
          value: function visitTaggedTemplateExpr(expr, ctx) {
            expr.tag.visitExpression(this, ctx);
            ctx.print(expr, '`' + expr.template.elements[0].rawText);

            for (var i = 1; i < expr.template.elements.length; i++) {
              ctx.print(expr, '${');
              expr.template.expressions[i - 1].visitExpression(this, ctx);
              ctx.print(expr, "}".concat(expr.template.elements[i].rawText));
            }

            ctx.print(expr, '`');
            return null;
          }
        }, {
          key: "visitWrappedNodeExpr",
          value: function visitWrappedNodeExpr(ast, ctx) {
            throw new Error('Abstract emitter cannot visit WrappedNodeExpr.');
          }
        }, {
          key: "visitTypeofExpr",
          value: function visitTypeofExpr(expr, ctx) {
            ctx.print(expr, 'typeof ');
            expr.expr.visitExpression(this, ctx);
          }
        }, {
          key: "visitReadVarExpr",
          value: function visitReadVarExpr(ast, ctx) {
            var varName = ast.name;

            if (ast.builtin != null) {
              switch (ast.builtin) {
                case BuiltinVar.Super:
                  varName = 'super';
                  break;

                case BuiltinVar.This:
                  varName = 'this';
                  break;

                case BuiltinVar.CatchError:
                  varName = CATCH_ERROR_VAR$1.name;
                  break;

                case BuiltinVar.CatchStack:
                  varName = CATCH_STACK_VAR$1.name;
                  break;

                default:
                  throw new Error("Unknown builtin variable ".concat(ast.builtin));
              }
            }

            ctx.print(ast, varName);
            return null;
          }
        }, {
          key: "visitInstantiateExpr",
          value: function visitInstantiateExpr(ast, ctx) {
            ctx.print(ast, "new ");
            ast.classExpr.visitExpression(this, ctx);
            ctx.print(ast, "(");
            this.visitAllExpressions(ast.args, ctx, ',');
            ctx.print(ast, ")");
            return null;
          }
        }, {
          key: "visitLiteralExpr",
          value: function visitLiteralExpr(ast, ctx) {
            var value = ast.value;

            if (typeof value === 'string') {
              ctx.print(ast, escapeIdentifier(value, this._escapeDollarInStrings));
            } else {
              ctx.print(ast, "".concat(value));
            }

            return null;
          }
        }, {
          key: "visitLocalizedString",
          value: function visitLocalizedString(ast, ctx) {
            var head = ast.serializeI18nHead();
            ctx.print(ast, '$localize `' + head.raw);

            for (var i = 1; i < ast.messageParts.length; i++) {
              ctx.print(ast, '${');
              ast.expressions[i - 1].visitExpression(this, ctx);
              ctx.print(ast, "}".concat(ast.serializeI18nTemplatePart(i).raw));
            }

            ctx.print(ast, '`');
            return null;
          }
        }, {
          key: "visitConditionalExpr",
          value: function visitConditionalExpr(ast, ctx) {
            ctx.print(ast, "(");
            ast.condition.visitExpression(this, ctx);
            ctx.print(ast, '? ');
            ast.trueCase.visitExpression(this, ctx);
            ctx.print(ast, ': ');
            ast.falseCase.visitExpression(this, ctx);
            ctx.print(ast, ")");
            return null;
          }
        }, {
          key: "visitNotExpr",
          value: function visitNotExpr(ast, ctx) {
            ctx.print(ast, '!');
            ast.condition.visitExpression(this, ctx);
            return null;
          }
        }, {
          key: "visitAssertNotNullExpr",
          value: function visitAssertNotNullExpr(ast, ctx) {
            ast.condition.visitExpression(this, ctx);
            return null;
          }
        }, {
          key: "visitUnaryOperatorExpr",
          value: function visitUnaryOperatorExpr(ast, ctx) {
            var opStr;

            switch (ast.operator) {
              case UnaryOperator.Plus:
                opStr = '+';
                break;

              case UnaryOperator.Minus:
                opStr = '-';
                break;

              default:
                throw new Error("Unknown operator ".concat(ast.operator));
            }

            if (ast.parens) ctx.print(ast, "(");
            ctx.print(ast, opStr);
            ast.expr.visitExpression(this, ctx);
            if (ast.parens) ctx.print(ast, ")");
            return null;
          }
        }, {
          key: "visitBinaryOperatorExpr",
          value: function visitBinaryOperatorExpr(ast, ctx) {
            var opStr;

            switch (ast.operator) {
              case BinaryOperator.Equals:
                opStr = '==';
                break;

              case BinaryOperator.Identical:
                opStr = '===';
                break;

              case BinaryOperator.NotEquals:
                opStr = '!=';
                break;

              case BinaryOperator.NotIdentical:
                opStr = '!==';
                break;

              case BinaryOperator.And:
                opStr = '&&';
                break;

              case BinaryOperator.BitwiseAnd:
                opStr = '&';
                break;

              case BinaryOperator.Or:
                opStr = '||';
                break;

              case BinaryOperator.Plus:
                opStr = '+';
                break;

              case BinaryOperator.Minus:
                opStr = '-';
                break;

              case BinaryOperator.Divide:
                opStr = '/';
                break;

              case BinaryOperator.Multiply:
                opStr = '*';
                break;

              case BinaryOperator.Modulo:
                opStr = '%';
                break;

              case BinaryOperator.Lower:
                opStr = '<';
                break;

              case BinaryOperator.LowerEquals:
                opStr = '<=';
                break;

              case BinaryOperator.Bigger:
                opStr = '>';
                break;

              case BinaryOperator.BiggerEquals:
                opStr = '>=';
                break;

              default:
                throw new Error("Unknown operator ".concat(ast.operator));
            }

            if (ast.parens) ctx.print(ast, "(");
            ast.lhs.visitExpression(this, ctx);
            ctx.print(ast, " ".concat(opStr, " "));
            ast.rhs.visitExpression(this, ctx);
            if (ast.parens) ctx.print(ast, ")");
            return null;
          }
        }, {
          key: "visitReadPropExpr",
          value: function visitReadPropExpr(ast, ctx) {
            ast.receiver.visitExpression(this, ctx);
            ctx.print(ast, ".");
            ctx.print(ast, ast.name);
            return null;
          }
        }, {
          key: "visitReadKeyExpr",
          value: function visitReadKeyExpr(ast, ctx) {
            ast.receiver.visitExpression(this, ctx);
            ctx.print(ast, "[");
            ast.index.visitExpression(this, ctx);
            ctx.print(ast, "]");
            return null;
          }
        }, {
          key: "visitLiteralArrayExpr",
          value: function visitLiteralArrayExpr(ast, ctx) {
            ctx.print(ast, "[");
            this.visitAllExpressions(ast.entries, ctx, ',');
            ctx.print(ast, "]");
            return null;
          }
        }, {
          key: "visitLiteralMapExpr",
          value: function visitLiteralMapExpr(ast, ctx) {
            var _this187 = this;

            ctx.print(ast, "{");
            this.visitAllObjects(function (entry) {
              ctx.print(ast, "".concat(escapeIdentifier(entry.key, _this187._escapeDollarInStrings, entry.quoted), ":"));
              entry.value.visitExpression(_this187, ctx);
            }, ast.entries, ctx, ',');
            ctx.print(ast, "}");
            return null;
          }
        }, {
          key: "visitCommaExpr",
          value: function visitCommaExpr(ast, ctx) {
            ctx.print(ast, '(');
            this.visitAllExpressions(ast.parts, ctx, ',');
            ctx.print(ast, ')');
            return null;
          }
        }, {
          key: "visitAllExpressions",
          value: function visitAllExpressions(expressions, ctx, separator) {
            var _this188 = this;

            this.visitAllObjects(function (expr) {
              return expr.visitExpression(_this188, ctx);
            }, expressions, ctx, separator);
          }
        }, {
          key: "visitAllObjects",
          value: function visitAllObjects(handler, expressions, ctx, separator) {
            var incrementedIndent = false;

            for (var i = 0; i < expressions.length; i++) {
              if (i > 0) {
                if (ctx.lineLength() > 80) {
                  ctx.print(null, separator, true);

                  if (!incrementedIndent) {
                    // continuation are marked with double indent.
                    ctx.incIndent();
                    ctx.incIndent();
                    incrementedIndent = true;
                  }
                } else {
                  ctx.print(null, separator, false);
                }
              }

              handler(expressions[i]);
            }

            if (incrementedIndent) {
              // continuation are marked with double indent.
              ctx.decIndent();
              ctx.decIndent();
            }
          }
        }, {
          key: "visitAllStatements",
          value: function visitAllStatements(statements, ctx) {
            var _this189 = this;

            statements.forEach(function (stmt) {
              return stmt.visitStatement(_this189, ctx);
            });
          }
        }]);

        return AbstractEmitterVisitor;
      }();

      function escapeIdentifier(input, escapeDollar) {
        var alwaysQuote = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;

        if (input == null) {
          return null;
        }

        var body = input.replace(_SINGLE_QUOTE_ESCAPE_STRING_RE, function () {
          if ((arguments.length <= 0 ? undefined : arguments[0]) == '$') {
            return escapeDollar ? '\\$' : '$';
          } else if ((arguments.length <= 0 ? undefined : arguments[0]) == '\n') {
            return '\\n';
          } else if ((arguments.length <= 0 ? undefined : arguments[0]) == '\r') {
            return '\\r';
          } else {
            return "\\".concat(arguments.length <= 0 ? undefined : arguments[0]);
          }
        });
        var requiresQuotes = alwaysQuote || !_LEGAL_IDENTIFIER_RE.test(body);
        return requiresQuotes ? "'".concat(body, "'") : body;
      }

      function _createIndent(count) {
        var res = '';

        for (var i = 0; i < count; i++) {
          res += _INDENT_WITH;
        }

        return res;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Convert an object map with `Expression` values into a `LiteralMapExpr`.
       */


      function mapToMapExpression(map) {
        var result = Object.keys(map).map(function (key) {
          return {
            key: key,
            // The assertion here is because really TypeScript doesn't allow us to express that if the
            // key is present, it will have a value, but this is true in reality.
            value: map[key],
            quoted: false
          };
        });
        return literalMap(result);
      }
      /**
       * Convert metadata into an `Expression` in the given `OutputContext`.
       *
       * This operation will handle arrays, references to symbols, or literal `null` or `undefined`.
       */


      function convertMetaToOutput(meta, ctx) {
        if (Array.isArray(meta)) {
          return literalArr(meta.map(function (entry) {
            return convertMetaToOutput(entry, ctx);
          }));
        }

        if (meta instanceof StaticSymbol) {
          return ctx.importExpr(meta);
        }

        if (meta == null) {
          return literal(meta);
        }

        throw new Error("Internal error: Unsupported or unknown metadata: ".concat(meta));
      }

      function typeWithParameters(type, numParams) {
        if (numParams === 0) {
          return expressionType(type);
        }

        var params = [];

        for (var i = 0; i < numParams; i++) {
          params.push(DYNAMIC_TYPE);
        }

        return expressionType(type, undefined, params);
      }

      var ANIMATE_SYMBOL_PREFIX = '@';

      function prepareSyntheticPropertyName(name) {
        return "".concat(ANIMATE_SYMBOL_PREFIX).concat(name);
      }

      function prepareSyntheticListenerName(name, phase) {
        return "".concat(ANIMATE_SYMBOL_PREFIX).concat(name, ".").concat(phase);
      }

      function isSyntheticPropertyOrListener(name) {
        return name.charAt(0) == ANIMATE_SYMBOL_PREFIX;
      }

      function getSyntheticPropertyName(name) {
        // this will strip out listener phase values...
        // @foo.start => @foo
        var i = name.indexOf('.');
        name = i > 0 ? name.substring(0, i) : name;

        if (name.charAt(0) !== ANIMATE_SYMBOL_PREFIX) {
          name = ANIMATE_SYMBOL_PREFIX + name;
        }

        return name;
      }

      function getSafePropertyAccessString(accessor, name) {
        var escapedName = escapeIdentifier(name, false, false);
        return escapedName !== name ? "".concat(accessor, "[").concat(escapedName, "]") : "".concat(accessor, ".").concat(name);
      }

      function prepareSyntheticListenerFunctionName(name, phase) {
        return "animation_".concat(name, "_").concat(phase);
      }

      function jitOnlyGuardedExpression(expr) {
        return guardedExpression('ngJitMode', expr);
      }

      function devOnlyGuardedExpression(expr) {
        return guardedExpression('ngDevMode', expr);
      }

      function guardedExpression(guard, expr) {
        var guardExpr = new ExternalExpr({
          name: guard,
          moduleName: null
        });
        var guardNotDefined = new BinaryOperatorExpr(BinaryOperator.Identical, new TypeofExpr(guardExpr), literal('undefined'));
        var guardUndefinedOrTrue = new BinaryOperatorExpr(BinaryOperator.Or, guardNotDefined, guardExpr,
        /* type */
        undefined,
        /* sourceSpan */
        undefined, true);
        return new BinaryOperatorExpr(BinaryOperator.And, guardUndefinedOrTrue, expr);
      }

      function wrapReference(value) {
        var wrapped = new WrappedNodeExpr(value);
        return {
          value: wrapped,
          type: wrapped
        };
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var Text = /*#__PURE__*/function () {
        function Text(value, sourceSpan) {
          _classCallCheck2(this, Text);

          this.value = value;
          this.sourceSpan = sourceSpan;
        }

        _createClass2(Text, [{
          key: "visit",
          value: function visit(visitor) {
            return visitor.visitText(this);
          }
        }]);

        return Text;
      }();

      var BoundText = /*#__PURE__*/function () {
        function BoundText(value, sourceSpan, i18n) {
          _classCallCheck2(this, BoundText);

          this.value = value;
          this.sourceSpan = sourceSpan;
          this.i18n = i18n;
        }

        _createClass2(BoundText, [{
          key: "visit",
          value: function visit(visitor) {
            return visitor.visitBoundText(this);
          }
        }]);

        return BoundText;
      }();
      /**
       * Represents a text attribute in the template.
       *
       * `valueSpan` may not be present in cases where there is no value `<div a></div>`.
       * `keySpan` may also not be present for synthetic attributes from ICU expansions.
       */


      var TextAttribute = /*#__PURE__*/function () {
        function TextAttribute(name, value, sourceSpan, keySpan, valueSpan, i18n) {
          _classCallCheck2(this, TextAttribute);

          this.name = name;
          this.value = value;
          this.sourceSpan = sourceSpan;
          this.keySpan = keySpan;
          this.valueSpan = valueSpan;
          this.i18n = i18n;
        }

        _createClass2(TextAttribute, [{
          key: "visit",
          value: function visit(visitor) {
            return visitor.visitTextAttribute(this);
          }
        }]);

        return TextAttribute;
      }();

      var BoundAttribute = /*#__PURE__*/function () {
        function BoundAttribute(name, type, securityContext, value, unit, sourceSpan, keySpan, valueSpan, i18n) {
          _classCallCheck2(this, BoundAttribute);

          this.name = name;
          this.type = type;
          this.securityContext = securityContext;
          this.value = value;
          this.unit = unit;
          this.sourceSpan = sourceSpan;
          this.keySpan = keySpan;
          this.valueSpan = valueSpan;
          this.i18n = i18n;
        }

        _createClass2(BoundAttribute, [{
          key: "visit",
          value: function visit(visitor) {
            return visitor.visitBoundAttribute(this);
          }
        }], [{
          key: "fromBoundElementProperty",
          value: function fromBoundElementProperty(prop, i18n) {
            if (prop.keySpan === undefined) {
              throw new Error("Unexpected state: keySpan must be defined for bound attributes but was not for ".concat(prop.name, ": ").concat(prop.sourceSpan));
            }

            return new BoundAttribute(prop.name, prop.type, prop.securityContext, prop.value, prop.unit, prop.sourceSpan, prop.keySpan, prop.valueSpan, i18n);
          }
        }]);

        return BoundAttribute;
      }();

      var BoundEvent = /*#__PURE__*/function () {
        function BoundEvent(name, type, handler, target, phase, sourceSpan, handlerSpan, keySpan) {
          _classCallCheck2(this, BoundEvent);

          this.name = name;
          this.type = type;
          this.handler = handler;
          this.target = target;
          this.phase = phase;
          this.sourceSpan = sourceSpan;
          this.handlerSpan = handlerSpan;
          this.keySpan = keySpan;
        }

        _createClass2(BoundEvent, [{
          key: "visit",
          value: function visit(visitor) {
            return visitor.visitBoundEvent(this);
          }
        }], [{
          key: "fromParsedEvent",
          value: function fromParsedEvent(event) {
            var target = event.type === 0
            /* Regular */
            ? event.targetOrPhase : null;
            var phase = event.type === 1
            /* Animation */
            ? event.targetOrPhase : null;

            if (event.keySpan === undefined) {
              throw new Error("Unexpected state: keySpan must be defined for bound event but was not for ".concat(event.name, ": ").concat(event.sourceSpan));
            }

            return new BoundEvent(event.name, event.type, event.handler, target, phase, event.sourceSpan, event.handlerSpan, event.keySpan);
          }
        }]);

        return BoundEvent;
      }();

      var Element = /*#__PURE__*/function () {
        function Element(name, attributes, inputs, outputs, children, references, sourceSpan, startSourceSpan, endSourceSpan, i18n) {
          _classCallCheck2(this, Element);

          this.name = name;
          this.attributes = attributes;
          this.inputs = inputs;
          this.outputs = outputs;
          this.children = children;
          this.references = references;
          this.sourceSpan = sourceSpan;
          this.startSourceSpan = startSourceSpan;
          this.endSourceSpan = endSourceSpan;
          this.i18n = i18n;
        }

        _createClass2(Element, [{
          key: "visit",
          value: function visit(visitor) {
            return visitor.visitElement(this);
          }
        }]);

        return Element;
      }();

      var Template = /*#__PURE__*/function () {
        function Template(tagName, attributes, inputs, outputs, templateAttrs, children, references, variables, sourceSpan, startSourceSpan, endSourceSpan, i18n) {
          _classCallCheck2(this, Template);

          this.tagName = tagName;
          this.attributes = attributes;
          this.inputs = inputs;
          this.outputs = outputs;
          this.templateAttrs = templateAttrs;
          this.children = children;
          this.references = references;
          this.variables = variables;
          this.sourceSpan = sourceSpan;
          this.startSourceSpan = startSourceSpan;
          this.endSourceSpan = endSourceSpan;
          this.i18n = i18n;
        }

        _createClass2(Template, [{
          key: "visit",
          value: function visit(visitor) {
            return visitor.visitTemplate(this);
          }
        }]);

        return Template;
      }();

      var Content = /*#__PURE__*/function () {
        function Content(selector, attributes, sourceSpan, i18n) {
          _classCallCheck2(this, Content);

          this.selector = selector;
          this.attributes = attributes;
          this.sourceSpan = sourceSpan;
          this.i18n = i18n;
          this.name = 'ng-content';
        }

        _createClass2(Content, [{
          key: "visit",
          value: function visit(visitor) {
            return visitor.visitContent(this);
          }
        }]);

        return Content;
      }();

      var Variable = /*#__PURE__*/function () {
        function Variable(name, value, sourceSpan, keySpan, valueSpan) {
          _classCallCheck2(this, Variable);

          this.name = name;
          this.value = value;
          this.sourceSpan = sourceSpan;
          this.keySpan = keySpan;
          this.valueSpan = valueSpan;
        }

        _createClass2(Variable, [{
          key: "visit",
          value: function visit(visitor) {
            return visitor.visitVariable(this);
          }
        }]);

        return Variable;
      }();

      var Reference = /*#__PURE__*/function () {
        function Reference(name, value, sourceSpan, keySpan, valueSpan) {
          _classCallCheck2(this, Reference);

          this.name = name;
          this.value = value;
          this.sourceSpan = sourceSpan;
          this.keySpan = keySpan;
          this.valueSpan = valueSpan;
        }

        _createClass2(Reference, [{
          key: "visit",
          value: function visit(visitor) {
            return visitor.visitReference(this);
          }
        }]);

        return Reference;
      }();

      var Icu = /*#__PURE__*/function () {
        function Icu(vars, placeholders, sourceSpan, i18n) {
          _classCallCheck2(this, Icu);

          this.vars = vars;
          this.placeholders = placeholders;
          this.sourceSpan = sourceSpan;
          this.i18n = i18n;
        }

        _createClass2(Icu, [{
          key: "visit",
          value: function visit(visitor) {
            return visitor.visitIcu(this);
          }
        }]);

        return Icu;
      }();

      var NullVisitor = /*#__PURE__*/function () {
        function NullVisitor() {
          _classCallCheck2(this, NullVisitor);
        }

        _createClass2(NullVisitor, [{
          key: "visitElement",
          value: function visitElement(element) {}
        }, {
          key: "visitTemplate",
          value: function visitTemplate(template) {}
        }, {
          key: "visitContent",
          value: function visitContent(content) {}
        }, {
          key: "visitVariable",
          value: function visitVariable(variable) {}
        }, {
          key: "visitReference",
          value: function visitReference(reference) {}
        }, {
          key: "visitTextAttribute",
          value: function visitTextAttribute(attribute) {}
        }, {
          key: "visitBoundAttribute",
          value: function visitBoundAttribute(attribute) {}
        }, {
          key: "visitBoundEvent",
          value: function visitBoundEvent(attribute) {}
        }, {
          key: "visitText",
          value: function visitText(text) {}
        }, {
          key: "visitBoundText",
          value: function visitBoundText(text) {}
        }, {
          key: "visitIcu",
          value: function visitIcu(icu) {}
        }]);

        return NullVisitor;
      }();

      var RecursiveVisitor = /*#__PURE__*/function () {
        function RecursiveVisitor() {
          _classCallCheck2(this, RecursiveVisitor);
        }

        _createClass2(RecursiveVisitor, [{
          key: "visitElement",
          value: function visitElement(element) {
            visitAll(this, element.attributes);
            visitAll(this, element.children);
            visitAll(this, element.references);
          }
        }, {
          key: "visitTemplate",
          value: function visitTemplate(template) {
            visitAll(this, template.attributes);
            visitAll(this, template.children);
            visitAll(this, template.references);
            visitAll(this, template.variables);
          }
        }, {
          key: "visitContent",
          value: function visitContent(content) {}
        }, {
          key: "visitVariable",
          value: function visitVariable(variable) {}
        }, {
          key: "visitReference",
          value: function visitReference(reference) {}
        }, {
          key: "visitTextAttribute",
          value: function visitTextAttribute(attribute) {}
        }, {
          key: "visitBoundAttribute",
          value: function visitBoundAttribute(attribute) {}
        }, {
          key: "visitBoundEvent",
          value: function visitBoundEvent(attribute) {}
        }, {
          key: "visitText",
          value: function visitText(text) {}
        }, {
          key: "visitBoundText",
          value: function visitBoundText(text) {}
        }, {
          key: "visitIcu",
          value: function visitIcu(icu) {}
        }]);

        return RecursiveVisitor;
      }();

      var TransformVisitor = /*#__PURE__*/function () {
        function TransformVisitor() {
          _classCallCheck2(this, TransformVisitor);
        }

        _createClass2(TransformVisitor, [{
          key: "visitElement",
          value: function visitElement(element) {
            var newAttributes = transformAll(this, element.attributes);
            var newInputs = transformAll(this, element.inputs);
            var newOutputs = transformAll(this, element.outputs);
            var newChildren = transformAll(this, element.children);
            var newReferences = transformAll(this, element.references);

            if (newAttributes != element.attributes || newInputs != element.inputs || newOutputs != element.outputs || newChildren != element.children || newReferences != element.references) {
              return new Element(element.name, newAttributes, newInputs, newOutputs, newChildren, newReferences, element.sourceSpan, element.startSourceSpan, element.endSourceSpan);
            }

            return element;
          }
        }, {
          key: "visitTemplate",
          value: function visitTemplate(template) {
            var newAttributes = transformAll(this, template.attributes);
            var newInputs = transformAll(this, template.inputs);
            var newOutputs = transformAll(this, template.outputs);
            var newTemplateAttrs = transformAll(this, template.templateAttrs);
            var newChildren = transformAll(this, template.children);
            var newReferences = transformAll(this, template.references);
            var newVariables = transformAll(this, template.variables);

            if (newAttributes != template.attributes || newInputs != template.inputs || newOutputs != template.outputs || newTemplateAttrs != template.templateAttrs || newChildren != template.children || newReferences != template.references || newVariables != template.variables) {
              return new Template(template.tagName, newAttributes, newInputs, newOutputs, newTemplateAttrs, newChildren, newReferences, newVariables, template.sourceSpan, template.startSourceSpan, template.endSourceSpan);
            }

            return template;
          }
        }, {
          key: "visitContent",
          value: function visitContent(content) {
            return content;
          }
        }, {
          key: "visitVariable",
          value: function visitVariable(variable) {
            return variable;
          }
        }, {
          key: "visitReference",
          value: function visitReference(reference) {
            return reference;
          }
        }, {
          key: "visitTextAttribute",
          value: function visitTextAttribute(attribute) {
            return attribute;
          }
        }, {
          key: "visitBoundAttribute",
          value: function visitBoundAttribute(attribute) {
            return attribute;
          }
        }, {
          key: "visitBoundEvent",
          value: function visitBoundEvent(attribute) {
            return attribute;
          }
        }, {
          key: "visitText",
          value: function visitText(text) {
            return text;
          }
        }, {
          key: "visitBoundText",
          value: function visitBoundText(text) {
            return text;
          }
        }, {
          key: "visitIcu",
          value: function visitIcu(icu) {
            return icu;
          }
        }]);

        return TransformVisitor;
      }();

      function visitAll(visitor, nodes) {
        var result = [];

        if (visitor.visit) {
          var _iterator11 = _createForOfIteratorHelper(nodes),
              _step11;

          try {
            for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
              var node = _step11.value;
              var newNode = visitor.visit(node) || node.visit(visitor);
            }
          } catch (err) {
            _iterator11.e(err);
          } finally {
            _iterator11.f();
          }
        } else {
          var _iterator12 = _createForOfIteratorHelper(nodes),
              _step12;

          try {
            for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
              var _node2 = _step12.value;

              var _newNode = _node2.visit(visitor);

              if (_newNode) {
                result.push(_newNode);
              }
            }
          } catch (err) {
            _iterator12.e(err);
          } finally {
            _iterator12.f();
          }
        }

        return result;
      }

      function transformAll(visitor, nodes) {
        var result = [];
        var changed = false;

        var _iterator13 = _createForOfIteratorHelper(nodes),
            _step13;

        try {
          for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
            var node = _step13.value;
            var newNode = node.visit(visitor);

            if (newNode) {
              result.push(newNode);
            }

            changed = changed || newNode != node;
          }
        } catch (err) {
          _iterator13.e(err);
        } finally {
          _iterator13.f();
        }

        return changed ? result : nodes;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var Message =
      /**
       * @param nodes message AST
       * @param placeholders maps placeholder names to static content and their source spans
       * @param placeholderToMessage maps placeholder names to messages (used for nested ICU messages)
       * @param meaning
       * @param description
       * @param customId
       */
      function Message(nodes, placeholders, placeholderToMessage, meaning, description, customId) {
        _classCallCheck2(this, Message);

        this.nodes = nodes;
        this.placeholders = placeholders;
        this.placeholderToMessage = placeholderToMessage;
        this.meaning = meaning;
        this.description = description;
        this.customId = customId;
        this.id = this.customId;
        /** The ids to use if there are no custom id and if `i18nLegacyMessageIdFormat` is not empty */

        this.legacyIds = [];

        if (nodes.length) {
          this.sources = [{
            filePath: nodes[0].sourceSpan.start.file.url,
            startLine: nodes[0].sourceSpan.start.line + 1,
            startCol: nodes[0].sourceSpan.start.col + 1,
            endLine: nodes[nodes.length - 1].sourceSpan.end.line + 1,
            endCol: nodes[0].sourceSpan.start.col + 1
          }];
        } else {
          this.sources = [];
        }
      };

      var Text$1 = /*#__PURE__*/function () {
        function Text$1(value, sourceSpan) {
          _classCallCheck2(this, Text$1);

          this.value = value;
          this.sourceSpan = sourceSpan;
        }

        _createClass2(Text$1, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitText(this, context);
          }
        }]);

        return Text$1;
      }(); // TODO(vicb): do we really need this node (vs an array) ?


      var Container = /*#__PURE__*/function () {
        function Container(children, sourceSpan) {
          _classCallCheck2(this, Container);

          this.children = children;
          this.sourceSpan = sourceSpan;
        }

        _createClass2(Container, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitContainer(this, context);
          }
        }]);

        return Container;
      }();

      var Icu$1 = /*#__PURE__*/function () {
        function Icu$1(expression, type, cases, sourceSpan) {
          _classCallCheck2(this, Icu$1);

          this.expression = expression;
          this.type = type;
          this.cases = cases;
          this.sourceSpan = sourceSpan;
        }

        _createClass2(Icu$1, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitIcu(this, context);
          }
        }]);

        return Icu$1;
      }();

      var TagPlaceholder = /*#__PURE__*/function () {
        function TagPlaceholder(tag, attrs, startName, closeName, children, isVoid, // TODO sourceSpan should cover all (we need a startSourceSpan and endSourceSpan)
        sourceSpan, startSourceSpan, endSourceSpan) {
          _classCallCheck2(this, TagPlaceholder);

          this.tag = tag;
          this.attrs = attrs;
          this.startName = startName;
          this.closeName = closeName;
          this.children = children;
          this.isVoid = isVoid;
          this.sourceSpan = sourceSpan;
          this.startSourceSpan = startSourceSpan;
          this.endSourceSpan = endSourceSpan;
        }

        _createClass2(TagPlaceholder, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitTagPlaceholder(this, context);
          }
        }]);

        return TagPlaceholder;
      }();

      var Placeholder = /*#__PURE__*/function () {
        function Placeholder(value, name, sourceSpan) {
          _classCallCheck2(this, Placeholder);

          this.value = value;
          this.name = name;
          this.sourceSpan = sourceSpan;
        }

        _createClass2(Placeholder, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitPlaceholder(this, context);
          }
        }]);

        return Placeholder;
      }();

      var IcuPlaceholder = /*#__PURE__*/function () {
        function IcuPlaceholder(value, name, sourceSpan) {
          _classCallCheck2(this, IcuPlaceholder);

          this.value = value;
          this.name = name;
          this.sourceSpan = sourceSpan;
        }

        _createClass2(IcuPlaceholder, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitIcuPlaceholder(this, context);
          }
        }]);

        return IcuPlaceholder;
      }(); // Clone the AST


      var CloneVisitor = /*#__PURE__*/function () {
        function CloneVisitor() {
          _classCallCheck2(this, CloneVisitor);
        }

        _createClass2(CloneVisitor, [{
          key: "visitText",
          value: function visitText(text, context) {
            return new Text$1(text.value, text.sourceSpan);
          }
        }, {
          key: "visitContainer",
          value: function visitContainer(container, context) {
            var _this190 = this;

            var children = container.children.map(function (n) {
              return n.visit(_this190, context);
            });
            return new Container(children, container.sourceSpan);
          }
        }, {
          key: "visitIcu",
          value: function visitIcu(icu, context) {
            var _this191 = this;

            var cases = {};
            Object.keys(icu.cases).forEach(function (key) {
              return cases[key] = icu.cases[key].visit(_this191, context);
            });
            var msg = new Icu$1(icu.expression, icu.type, cases, icu.sourceSpan);
            msg.expressionPlaceholder = icu.expressionPlaceholder;
            return msg;
          }
        }, {
          key: "visitTagPlaceholder",
          value: function visitTagPlaceholder(ph, context) {
            var _this192 = this;

            var children = ph.children.map(function (n) {
              return n.visit(_this192, context);
            });
            return new TagPlaceholder(ph.tag, ph.attrs, ph.startName, ph.closeName, children, ph.isVoid, ph.sourceSpan, ph.startSourceSpan, ph.endSourceSpan);
          }
        }, {
          key: "visitPlaceholder",
          value: function visitPlaceholder(ph, context) {
            return new Placeholder(ph.value, ph.name, ph.sourceSpan);
          }
        }, {
          key: "visitIcuPlaceholder",
          value: function visitIcuPlaceholder(ph, context) {
            return new IcuPlaceholder(ph.value, ph.name, ph.sourceSpan);
          }
        }]);

        return CloneVisitor;
      }(); // Visit all the nodes recursively


      var RecurseVisitor = /*#__PURE__*/function () {
        function RecurseVisitor() {
          _classCallCheck2(this, RecurseVisitor);
        }

        _createClass2(RecurseVisitor, [{
          key: "visitText",
          value: function visitText(text, context) {}
        }, {
          key: "visitContainer",
          value: function visitContainer(container, context) {
            var _this193 = this;

            container.children.forEach(function (child) {
              return child.visit(_this193);
            });
          }
        }, {
          key: "visitIcu",
          value: function visitIcu(icu, context) {
            var _this194 = this;

            Object.keys(icu.cases).forEach(function (k) {
              icu.cases[k].visit(_this194);
            });
          }
        }, {
          key: "visitTagPlaceholder",
          value: function visitTagPlaceholder(ph, context) {
            var _this195 = this;

            ph.children.forEach(function (child) {
              return child.visit(_this195);
            });
          }
        }, {
          key: "visitPlaceholder",
          value: function visitPlaceholder(ph, context) {}
        }, {
          key: "visitIcuPlaceholder",
          value: function visitIcuPlaceholder(ph, context) {}
        }]);

        return RecurseVisitor;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Represents a big integer using a buffer of its individual digits, with the least significant
       * digit stored at the beginning of the array (little endian).
       *
       * For performance reasons, each instance is mutable. The addition operation can be done in-place
       * to reduce memory pressure of allocation for the digits array.
       */


      var BigInteger = /*#__PURE__*/function () {
        /**
         * Creates a big integer using its individual digits in little endian storage.
         */
        function BigInteger(digits) {
          _classCallCheck2(this, BigInteger);

          this.digits = digits;
        }

        _createClass2(BigInteger, [{
          key: "clone",
          value:
          /**
           * Creates a clone of this instance.
           */
          function clone() {
            return new BigInteger(this.digits.slice());
          }
          /**
           * Returns a new big integer with the sum of `this` and `other` as its value. This does not mutate
           * `this` but instead returns a new instance, unlike `addToSelf`.
           */

        }, {
          key: "add",
          value: function add(other) {
            var result = this.clone();
            result.addToSelf(other);
            return result;
          }
          /**
           * Adds `other` to the instance itself, thereby mutating its value.
           */

        }, {
          key: "addToSelf",
          value: function addToSelf(other) {
            var maxNrOfDigits = Math.max(this.digits.length, other.digits.length);
            var carry = 0;

            for (var i = 0; i < maxNrOfDigits; i++) {
              var digitSum = carry;

              if (i < this.digits.length) {
                digitSum += this.digits[i];
              }

              if (i < other.digits.length) {
                digitSum += other.digits[i];
              }

              if (digitSum >= 10) {
                this.digits[i] = digitSum - 10;
                carry = 1;
              } else {
                this.digits[i] = digitSum;
                carry = 0;
              }
            } // Apply a remaining carry if needed.


            if (carry > 0) {
              this.digits[maxNrOfDigits] = 1;
            }
          }
          /**
           * Builds the decimal string representation of the big integer. As this is stored in
           * little endian, the digits are concatenated in reverse order.
           */

        }, {
          key: "toString",
          value: function toString() {
            var res = '';

            for (var i = this.digits.length - 1; i >= 0; i--) {
              res += this.digits[i];
            }

            return res;
          }
        }], [{
          key: "zero",
          value: function zero() {
            return new BigInteger([0]);
          }
        }, {
          key: "one",
          value: function one() {
            return new BigInteger([1]);
          }
        }]);

        return BigInteger;
      }();
      /**
       * Represents a big integer which is optimized for multiplication operations, as its power-of-twos
       * are memoized. See `multiplyBy()` for details on the multiplication algorithm.
       */


      var BigIntForMultiplication = /*#__PURE__*/function () {
        function BigIntForMultiplication(value) {
          _classCallCheck2(this, BigIntForMultiplication);

          this.powerOfTwos = [value];
        }
        /**
         * Returns the big integer itself.
         */


        _createClass2(BigIntForMultiplication, [{
          key: "getValue",
          value: function getValue() {
            return this.powerOfTwos[0];
          }
          /**
           * Computes the value for `num * b`, where `num` is a JS number and `b` is a big integer. The
           * value for `b` is represented by a storage model that is optimized for this computation.
           *
           * This operation is implemented in N(log2(num)) by continuous halving of the number, where the
           * least-significant bit (LSB) is tested in each iteration. If the bit is set, the bit's index is
           * used as exponent into the power-of-two multiplication of `b`.
           *
           * As an example, consider the multiplication num=42, b=1337. In binary 42 is 0b00101010 and the
           * algorithm unrolls into the following iterations:
           *
           *  Iteration | num        | LSB  | b * 2^iter | Add? | product
           * -----------|------------|------|------------|------|--------
           *  0         | 0b00101010 | 0    | 1337       | No   | 0
           *  1         | 0b00010101 | 1    | 2674       | Yes  | 2674
           *  2         | 0b00001010 | 0    | 5348       | No   | 2674
           *  3         | 0b00000101 | 1    | 10696      | Yes  | 13370
           *  4         | 0b00000010 | 0    | 21392      | No   | 13370
           *  5         | 0b00000001 | 1    | 42784      | Yes  | 56154
           *  6         | 0b00000000 | 0    | 85568      | No   | 56154
           *
           * The computed product of 56154 is indeed the correct result.
           *
           * The `BigIntForMultiplication` representation for a big integer provides memoized access to the
           * power-of-two values to reduce the workload in computing those values.
           */

        }, {
          key: "multiplyBy",
          value: function multiplyBy(num) {
            var product = BigInteger.zero();
            this.multiplyByAndAddTo(num, product);
            return product;
          }
          /**
           * See `multiplyBy()` for details. This function allows for the computed product to be added
           * directly to the provided result big integer.
           */

        }, {
          key: "multiplyByAndAddTo",
          value: function multiplyByAndAddTo(num, result) {
            for (var exponent = 0; num !== 0; num = num >>> 1, exponent++) {
              if (num & 1) {
                var value = this.getMultipliedByPowerOfTwo(exponent);
                result.addToSelf(value);
              }
            }
          }
          /**
           * Computes and memoizes the big integer value for `this.number * 2^exponent`.
           */

        }, {
          key: "getMultipliedByPowerOfTwo",
          value: function getMultipliedByPowerOfTwo(exponent) {
            // Compute the powers up until the requested exponent, where each value is computed from its
            // predecessor. This is simple as `this.number * 2^(exponent - 1)` only has to be doubled (i.e.
            // added to itself) to reach `this.number * 2^exponent`.
            for (var i = this.powerOfTwos.length; i <= exponent; i++) {
              var previousPower = this.powerOfTwos[i - 1];
              this.powerOfTwos[i] = previousPower.add(previousPower);
            }

            return this.powerOfTwos[exponent];
          }
        }]);

        return BigIntForMultiplication;
      }();
      /**
       * Represents an exponentiation operation for the provided base, of which exponents are computed and
       * memoized. The results are represented by a `BigIntForMultiplication` which is tailored for
       * multiplication operations by memoizing the power-of-twos. This effectively results in a matrix
       * representation that is lazily computed upon request.
       */


      var BigIntExponentiation = /*#__PURE__*/function () {
        function BigIntExponentiation(base) {
          _classCallCheck2(this, BigIntExponentiation);

          this.base = base;
          this.exponents = [new BigIntForMultiplication(BigInteger.one())];
        }
        /**
         * Compute the value for `this.base^exponent`, resulting in a big integer that is optimized for
         * further multiplication operations.
         */


        _createClass2(BigIntExponentiation, [{
          key: "toThePowerOf",
          value: function toThePowerOf(exponent) {
            // Compute the results up until the requested exponent, where every value is computed from its
            // predecessor. This is because `this.base^(exponent - 1)` only has to be multiplied by `base`
            // to reach `this.base^exponent`.
            for (var i = this.exponents.length; i <= exponent; i++) {
              var value = this.exponents[i - 1].multiplyBy(this.base);
              this.exponents[i] = new BigIntForMultiplication(value);
            }

            return this.exponents[exponent];
          }
        }]);

        return BigIntExponentiation;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Return the message id or compute it using the XLIFF1 digest.
       */


      function _digest2(message) {
        return message.id || computeDigest(message);
      }
      /**
       * Compute the message id using the XLIFF1 digest.
       */


      function computeDigest(message) {
        return sha1(serializeNodes(message.nodes).join('') + "[".concat(message.meaning, "]"));
      }
      /**
       * Return the message id or compute it using the XLIFF2/XMB/$localize digest.
       */


      function decimalDigest(message) {
        return message.id || computeDecimalDigest(message);
      }
      /**
       * Compute the message id using the XLIFF2/XMB/$localize digest.
       */


      function computeDecimalDigest(message) {
        var visitor = new _SerializerIgnoreIcuExpVisitor();
        var parts = message.nodes.map(function (a) {
          return a.visit(visitor, null);
        });
        return computeMsgId(parts.join(''), message.meaning);
      }
      /**
       * Serialize the i18n ast to something xml-like in order to generate an UID.
       *
       * The visitor is also used in the i18n parser tests
       *
       * @internal
       */


      var _SerializerVisitor = /*#__PURE__*/function () {
        function _SerializerVisitor() {
          _classCallCheck2(this, _SerializerVisitor);
        }

        _createClass2(_SerializerVisitor, [{
          key: "visitText",
          value: function visitText(text, context) {
            return text.value;
          }
        }, {
          key: "visitContainer",
          value: function visitContainer(container, context) {
            var _this196 = this;

            return "[".concat(container.children.map(function (child) {
              return child.visit(_this196);
            }).join(', '), "]");
          }
        }, {
          key: "visitIcu",
          value: function visitIcu(icu, context) {
            var _this197 = this;

            var strCases = Object.keys(icu.cases).map(function (k) {
              return "".concat(k, " {").concat(icu.cases[k].visit(_this197), "}");
            });
            return "{".concat(icu.expression, ", ").concat(icu.type, ", ").concat(strCases.join(', '), "}");
          }
        }, {
          key: "visitTagPlaceholder",
          value: function visitTagPlaceholder(ph, context) {
            var _this198 = this;

            return ph.isVoid ? "<ph tag name=\"".concat(ph.startName, "\"/>") : "<ph tag name=\"".concat(ph.startName, "\">").concat(ph.children.map(function (child) {
              return child.visit(_this198);
            }).join(', '), "</ph name=\"").concat(ph.closeName, "\">");
          }
        }, {
          key: "visitPlaceholder",
          value: function visitPlaceholder(ph, context) {
            return ph.value ? "<ph name=\"".concat(ph.name, "\">").concat(ph.value, "</ph>") : "<ph name=\"".concat(ph.name, "\"/>");
          }
        }, {
          key: "visitIcuPlaceholder",
          value: function visitIcuPlaceholder(ph, context) {
            return "<ph icu name=\"".concat(ph.name, "\">").concat(ph.value.visit(this), "</ph>");
          }
        }]);

        return _SerializerVisitor;
      }();

      var serializerVisitor = new _SerializerVisitor();

      function serializeNodes(nodes) {
        return nodes.map(function (a) {
          return a.visit(serializerVisitor, null);
        });
      }
      /**
       * Serialize the i18n ast to something xml-like in order to generate an UID.
       *
       * Ignore the ICU expressions so that message IDs stays identical if only the expression changes.
       *
       * @internal
       */


      var _SerializerIgnoreIcuExpVisitor = /*#__PURE__*/function (_SerializerVisitor2) {
        _inherits2(_SerializerIgnoreIcuExpVisitor, _SerializerVisitor2);

        var _super105 = _createSuper(_SerializerIgnoreIcuExpVisitor);

        function _SerializerIgnoreIcuExpVisitor() {
          _classCallCheck2(this, _SerializerIgnoreIcuExpVisitor);

          return _super105.apply(this, arguments);
        }

        _createClass2(_SerializerIgnoreIcuExpVisitor, [{
          key: "visitIcu",
          value: function visitIcu(icu, context) {
            var _this199 = this;

            var strCases = Object.keys(icu.cases).map(function (k) {
              return "".concat(k, " {").concat(icu.cases[k].visit(_this199), "}");
            }); // Do not take the expression into account

            return "{".concat(icu.type, ", ").concat(strCases.join(', '), "}");
          }
        }]);

        return _SerializerIgnoreIcuExpVisitor;
      }(_SerializerVisitor);
      /**
       * Compute the SHA1 of the given string
       *
       * see https://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
       *
       * WARNING: this function has not been designed not tested with security in mind.
       *          DO NOT USE IT IN A SECURITY SENSITIVE CONTEXT.
       */


      function sha1(str) {
        var utf8 = utf8Encode(str);
        var words32 = bytesToWords32(utf8, Endian.Big);
        var len = utf8.length * 8;
        var w = newArray(80);
        var a = 0x67452301,
            b = 0xefcdab89,
            c = 0x98badcfe,
            d = 0x10325476,
            e = 0xc3d2e1f0;
        words32[len >> 5] |= 0x80 << 24 - len % 32;
        words32[(len + 64 >> 9 << 4) + 15] = len;

        for (var i = 0; i < words32.length; i += 16) {
          var h0 = a,
              h1 = b,
              h2 = c,
              h3 = d,
              h4 = e;

          for (var j = 0; j < 80; j++) {
            if (j < 16) {
              w[j] = words32[i + j];
            } else {
              w[j] = rol32(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1);
            }

            var fkVal = fk(j, b, c, d);
            var f = fkVal[0];
            var k = fkVal[1];
            var temp = [rol32(a, 5), f, e, k, w[j]].reduce(add32);
            e = d;
            d = c;
            c = rol32(b, 30);
            b = a;
            a = temp;
          }

          a = add32(a, h0);
          b = add32(b, h1);
          c = add32(c, h2);
          d = add32(d, h3);
          e = add32(e, h4);
        }

        return bytesToHexString(words32ToByteString([a, b, c, d, e]));
      }

      function fk(index, b, c, d) {
        if (index < 20) {
          return [b & c | ~b & d, 0x5a827999];
        }

        if (index < 40) {
          return [b ^ c ^ d, 0x6ed9eba1];
        }

        if (index < 60) {
          return [b & c | b & d | c & d, 0x8f1bbcdc];
        }

        return [b ^ c ^ d, 0xca62c1d6];
      }
      /**
       * Compute the fingerprint of the given string
       *
       * The output is 64 bit number encoded as a decimal string
       *
       * based on:
       * https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/GoogleJsMessageIdGenerator.java
       */


      function fingerprint(str) {
        var utf8 = utf8Encode(str);
        var hi = hash32(utf8, 0);
        var lo = hash32(utf8, 102072);

        if (hi == 0 && (lo == 0 || lo == 1)) {
          hi = hi ^ 0x130f9bef;
          lo = lo ^ -0x6b5f56d8;
        }

        return [hi, lo];
      }

      function computeMsgId(msg) {
        var meaning = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
        var msgFingerprint = fingerprint(msg);

        if (meaning) {
          var meaningFingerprint = fingerprint(meaning);
          msgFingerprint = add64(rol64(msgFingerprint, 1), meaningFingerprint);
        }

        var hi = msgFingerprint[0];
        var lo = msgFingerprint[1];
        return wordsToDecimalString(hi & 0x7fffffff, lo);
      }

      function hash32(bytes, c) {
        var a = 0x9e3779b9,
            b = 0x9e3779b9;
        var i;
        var len = bytes.length;

        for (i = 0; i + 12 <= len; i += 12) {
          a = add32(a, wordAt(bytes, i, Endian.Little));
          b = add32(b, wordAt(bytes, i + 4, Endian.Little));
          c = add32(c, wordAt(bytes, i + 8, Endian.Little));
          var res = mix(a, b, c);
          a = res[0], b = res[1], c = res[2];
        }

        a = add32(a, wordAt(bytes, i, Endian.Little));
        b = add32(b, wordAt(bytes, i + 4, Endian.Little)); // the first byte of c is reserved for the length

        c = add32(c, len);
        c = add32(c, wordAt(bytes, i + 8, Endian.Little) << 8);
        return mix(a, b, c)[2];
      } // clang-format off


      function mix(a, b, c) {
        a = sub32(a, b);
        a = sub32(a, c);
        a ^= c >>> 13;
        b = sub32(b, c);
        b = sub32(b, a);
        b ^= a << 8;
        c = sub32(c, a);
        c = sub32(c, b);
        c ^= b >>> 13;
        a = sub32(a, b);
        a = sub32(a, c);
        a ^= c >>> 12;
        b = sub32(b, c);
        b = sub32(b, a);
        b ^= a << 16;
        c = sub32(c, a);
        c = sub32(c, b);
        c ^= b >>> 5;
        a = sub32(a, b);
        a = sub32(a, c);
        a ^= c >>> 3;
        b = sub32(b, c);
        b = sub32(b, a);
        b ^= a << 10;
        c = sub32(c, a);
        c = sub32(c, b);
        c ^= b >>> 15;
        return [a, b, c];
      } // clang-format on
      // Utils


      var Endian;

      (function (Endian) {
        Endian[Endian["Little"] = 0] = "Little";
        Endian[Endian["Big"] = 1] = "Big";
      })(Endian || (Endian = {}));

      function add32(a, b) {
        return add32to64(a, b)[1];
      }

      function add32to64(a, b) {
        var low = (a & 0xffff) + (b & 0xffff);
        var high = (a >>> 16) + (b >>> 16) + (low >>> 16);
        return [high >>> 16, high << 16 | low & 0xffff];
      }

      function add64(a, b) {
        var ah = a[0],
            al = a[1];
        var bh = b[0],
            bl = b[1];
        var result = add32to64(al, bl);
        var carry = result[0];
        var l = result[1];
        var h = add32(add32(ah, bh), carry);
        return [h, l];
      }

      function sub32(a, b) {
        var low = (a & 0xffff) - (b & 0xffff);
        var high = (a >> 16) - (b >> 16) + (low >> 16);
        return high << 16 | low & 0xffff;
      } // Rotate a 32b number left `count` position


      function rol32(a, count) {
        return a << count | a >>> 32 - count;
      } // Rotate a 64b number left `count` position


      function rol64(num, count) {
        var hi = num[0],
            lo = num[1];
        var h = hi << count | lo >>> 32 - count;
        var l = lo << count | hi >>> 32 - count;
        return [h, l];
      }

      function bytesToWords32(bytes, endian) {
        var size = bytes.length + 3 >>> 2;
        var words32 = [];

        for (var i = 0; i < size; i++) {
          words32[i] = wordAt(bytes, i * 4, endian);
        }

        return words32;
      }

      function byteAt(bytes, index) {
        return index >= bytes.length ? 0 : bytes[index];
      }

      function wordAt(bytes, index, endian) {
        var word = 0;

        if (endian === Endian.Big) {
          for (var i = 0; i < 4; i++) {
            word += byteAt(bytes, index + i) << 24 - 8 * i;
          }
        } else {
          for (var _i7 = 0; _i7 < 4; _i7++) {
            word += byteAt(bytes, index + _i7) << 8 * _i7;
          }
        }

        return word;
      }

      function words32ToByteString(words32) {
        return words32.reduce(function (bytes, word) {
          return bytes.concat(word32ToByteString(word));
        }, []);
      }

      function word32ToByteString(word) {
        var bytes = [];

        for (var i = 0; i < 4; i++) {
          bytes.push(word >>> 8 * (3 - i) & 0xff);
        }

        return bytes;
      }

      function bytesToHexString(bytes) {
        var hex = '';

        for (var i = 0; i < bytes.length; i++) {
          var b = byteAt(bytes, i);
          hex += (b >>> 4).toString(16) + (b & 0x0f).toString(16);
        }

        return hex.toLowerCase();
      }
      /**
       * Create a shared exponentiation pool for base-256 computations. This shared pool provides memoized
       * power-of-256 results with memoized power-of-two computations for efficient multiplication.
       *
       * For our purposes, this can be safely stored as a global without memory concerns. The reason is
       * that we encode two words, so only need the 0th (for the low word) and 4th (for the high word)
       * exponent.
       */


      var base256 = new BigIntExponentiation(256);
      /**
       * Represents two 32-bit words as a single decimal number. This requires a big integer storage
       * model as JS numbers are not accurate enough to represent the 64-bit number.
       *
       * Based on https://www.danvk.org/hex2dec.html
       */

      function wordsToDecimalString(hi, lo) {
        // Encode the four bytes in lo in the lower digits of the decimal number.
        // Note: the multiplication results in lo itself but represented by a big integer using its
        // decimal digits.
        var decimal = base256.toThePowerOf(0).multiplyBy(lo); // Encode the four bytes in hi above the four lo bytes. lo is a maximum of (2^8)^4, which is why
        // this multiplication factor is applied.

        base256.toThePowerOf(4).multiplyByAndAddTo(hi, decimal);
        return decimal.toString();
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var Serializer = /*#__PURE__*/function () {
        function Serializer() {
          _classCallCheck2(this, Serializer);
        }

        _createClass2(Serializer, [{
          key: "createNameMapper",
          value: // Creates a name mapper, see `PlaceholderMapper`
          // Returning `null` means that no name mapping is used.
          function createNameMapper(message) {
            return null;
          }
        }]);

        return Serializer;
      }();
      /**
       * A simple mapper that take a function to transform an internal name to a public name
       */


      var SimplePlaceholderMapper = /*#__PURE__*/function (_RecurseVisitor) {
        _inherits2(SimplePlaceholderMapper, _RecurseVisitor);

        var _super106 = _createSuper(SimplePlaceholderMapper);

        // create a mapping from the message
        function SimplePlaceholderMapper(message, mapName) {
          var _this200;

          _classCallCheck2(this, SimplePlaceholderMapper);

          _this200 = _super106.call(this);
          _this200.mapName = mapName;
          _this200.internalToPublic = {};
          _this200.publicToNextId = {};
          _this200.publicToInternal = {};
          message.nodes.forEach(function (node) {
            return node.visit(_assertThisInitialized2(_this200));
          });
          return _this200;
        }

        _createClass2(SimplePlaceholderMapper, [{
          key: "toPublicName",
          value: function toPublicName(internalName) {
            return this.internalToPublic.hasOwnProperty(internalName) ? this.internalToPublic[internalName] : null;
          }
        }, {
          key: "toInternalName",
          value: function toInternalName(publicName) {
            return this.publicToInternal.hasOwnProperty(publicName) ? this.publicToInternal[publicName] : null;
          }
        }, {
          key: "visitText",
          value: function visitText(text, context) {
            return null;
          }
        }, {
          key: "visitTagPlaceholder",
          value: function visitTagPlaceholder(ph, context) {
            this.visitPlaceholderName(ph.startName);

            _get2(_getPrototypeOf2(SimplePlaceholderMapper.prototype), "visitTagPlaceholder", this).call(this, ph, context);

            this.visitPlaceholderName(ph.closeName);
          }
        }, {
          key: "visitPlaceholder",
          value: function visitPlaceholder(ph, context) {
            this.visitPlaceholderName(ph.name);
          }
        }, {
          key: "visitIcuPlaceholder",
          value: function visitIcuPlaceholder(ph, context) {
            this.visitPlaceholderName(ph.name);
          } // XMB placeholders could only contains A-Z, 0-9 and _

        }, {
          key: "visitPlaceholderName",
          value: function visitPlaceholderName(internalName) {
            if (!internalName || this.internalToPublic.hasOwnProperty(internalName)) {
              return;
            }

            var publicName = this.mapName(internalName);

            if (this.publicToInternal.hasOwnProperty(publicName)) {
              // Create a new XMB when it has already been used
              var nextId = this.publicToNextId[publicName];
              this.publicToNextId[publicName] = nextId + 1;
              publicName = "".concat(publicName, "_").concat(nextId);
            } else {
              this.publicToNextId[publicName] = 1;
            }

            this.internalToPublic[internalName] = publicName;
            this.publicToInternal[publicName] = internalName;
          }
        }]);

        return SimplePlaceholderMapper;
      }(RecurseVisitor);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var _Visitor = /*#__PURE__*/function () {
        function _Visitor() {
          _classCallCheck2(this, _Visitor);
        }

        _createClass2(_Visitor, [{
          key: "visitTag",
          value: function visitTag(tag) {
            var _this201 = this;

            var strAttrs = this._serializeAttributes(tag.attrs);

            if (tag.children.length == 0) {
              return "<".concat(tag.name).concat(strAttrs, "/>");
            }

            var strChildren = tag.children.map(function (node) {
              return node.visit(_this201);
            });
            return "<".concat(tag.name).concat(strAttrs, ">").concat(strChildren.join(''), "</").concat(tag.name, ">");
          }
        }, {
          key: "visitText",
          value: function visitText(text) {
            return text.value;
          }
        }, {
          key: "visitDeclaration",
          value: function visitDeclaration(decl) {
            return "<?xml".concat(this._serializeAttributes(decl.attrs), " ?>");
          }
        }, {
          key: "_serializeAttributes",
          value: function _serializeAttributes(attrs) {
            var strAttrs = Object.keys(attrs).map(function (name) {
              return "".concat(name, "=\"").concat(attrs[name], "\"");
            }).join(' ');
            return strAttrs.length > 0 ? ' ' + strAttrs : '';
          }
        }, {
          key: "visitDoctype",
          value: function visitDoctype(doctype) {
            return "<!DOCTYPE ".concat(doctype.rootTag, " [\n").concat(doctype.dtd, "\n]>");
          }
        }]);

        return _Visitor;
      }();

      var _visitor = new _Visitor();

      function serialize(nodes) {
        return nodes.map(function (node) {
          return node.visit(_visitor);
        }).join('');
      }

      var Declaration = /*#__PURE__*/function () {
        function Declaration(unescapedAttrs) {
          var _this202 = this;

          _classCallCheck2(this, Declaration);

          this.attrs = {};
          Object.keys(unescapedAttrs).forEach(function (k) {
            _this202.attrs[k] = escapeXml(unescapedAttrs[k]);
          });
        }

        _createClass2(Declaration, [{
          key: "visit",
          value: function visit(visitor) {
            return visitor.visitDeclaration(this);
          }
        }]);

        return Declaration;
      }();

      var Doctype = /*#__PURE__*/function () {
        function Doctype(rootTag, dtd) {
          _classCallCheck2(this, Doctype);

          this.rootTag = rootTag;
          this.dtd = dtd;
        }

        _createClass2(Doctype, [{
          key: "visit",
          value: function visit(visitor) {
            return visitor.visitDoctype(this);
          }
        }]);

        return Doctype;
      }();

      var Tag = /*#__PURE__*/function () {
        function Tag(name) {
          var _this203 = this;

          var unescapedAttrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
          var children = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];

          _classCallCheck2(this, Tag);

          this.name = name;
          this.children = children;
          this.attrs = {};
          Object.keys(unescapedAttrs).forEach(function (k) {
            _this203.attrs[k] = escapeXml(unescapedAttrs[k]);
          });
        }

        _createClass2(Tag, [{
          key: "visit",
          value: function visit(visitor) {
            return visitor.visitTag(this);
          }
        }]);

        return Tag;
      }();

      var Text$2 = /*#__PURE__*/function () {
        function Text$2(unescapedValue) {
          _classCallCheck2(this, Text$2);

          this.value = escapeXml(unescapedValue);
        }

        _createClass2(Text$2, [{
          key: "visit",
          value: function visit(visitor) {
            return visitor.visitText(this);
          }
        }]);

        return Text$2;
      }();

      var CR = /*#__PURE__*/function (_Text$) {
        _inherits2(CR, _Text$);

        var _super107 = _createSuper(CR);

        function CR() {
          var ws = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;

          _classCallCheck2(this, CR);

          return _super107.call(this, "\n".concat(new Array(ws + 1).join(' ')));
        }

        return CR;
      }(Text$2);

      var _ESCAPED_CHARS = [[/&/g, '&amp;'], [/"/g, '&quot;'], [/'/g, '&apos;'], [/</g, '&lt;'], [/>/g, '&gt;']]; // Escape `_ESCAPED_CHARS` characters in the given text with encoded entities

      function escapeXml(text) {
        return _ESCAPED_CHARS.reduce(function (text, entry) {
          return text.replace(entry[0], entry[1]);
        }, text);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var _MESSAGES_TAG = 'messagebundle';
      var _MESSAGE_TAG = 'msg';
      var _PLACEHOLDER_TAG = 'ph';
      var _EXAMPLE_TAG = 'ex';
      var _SOURCE_TAG = 'source';
      var _DOCTYPE = "<!ELEMENT messagebundle (msg)*>\n<!ATTLIST messagebundle class CDATA #IMPLIED>\n\n<!ELEMENT msg (#PCDATA|ph|source)*>\n<!ATTLIST msg id CDATA #IMPLIED>\n<!ATTLIST msg seq CDATA #IMPLIED>\n<!ATTLIST msg name CDATA #IMPLIED>\n<!ATTLIST msg desc CDATA #IMPLIED>\n<!ATTLIST msg meaning CDATA #IMPLIED>\n<!ATTLIST msg obsolete (obsolete) #IMPLIED>\n<!ATTLIST msg xml:space (default|preserve) \"default\">\n<!ATTLIST msg is_hidden CDATA #IMPLIED>\n\n<!ELEMENT source (#PCDATA)>\n\n<!ELEMENT ph (#PCDATA|ex)*>\n<!ATTLIST ph name CDATA #REQUIRED>\n\n<!ELEMENT ex (#PCDATA)>";

      var Xmb = /*#__PURE__*/function (_Serializer) {
        _inherits2(Xmb, _Serializer);

        var _super108 = _createSuper(Xmb);

        function Xmb() {
          _classCallCheck2(this, Xmb);

          return _super108.apply(this, arguments);
        }

        _createClass2(Xmb, [{
          key: "write",
          value: function write(messages, locale) {
            var exampleVisitor = new ExampleVisitor();
            var visitor = new _Visitor$1();
            var rootNode = new Tag(_MESSAGES_TAG);
            messages.forEach(function (message) {
              var attrs = {
                id: message.id
              };

              if (message.description) {
                attrs['desc'] = message.description;
              }

              if (message.meaning) {
                attrs['meaning'] = message.meaning;
              }

              var sourceTags = [];
              message.sources.forEach(function (source) {
                sourceTags.push(new Tag(_SOURCE_TAG, {}, [new Text$2("".concat(source.filePath, ":").concat(source.startLine).concat(source.endLine !== source.startLine ? ',' + source.endLine : ''))]));
              });
              rootNode.children.push(new CR(2), new Tag(_MESSAGE_TAG, attrs, [].concat(sourceTags, _toConsumableArray(visitor.serialize(message.nodes)))));
            });
            rootNode.children.push(new CR());
            return serialize([new Declaration({
              version: '1.0',
              encoding: 'UTF-8'
            }), new CR(), new Doctype(_MESSAGES_TAG, _DOCTYPE), new CR(), exampleVisitor.addDefaultExamples(rootNode), new CR()]);
          }
        }, {
          key: "load",
          value: function load(content, url) {
            throw new Error('Unsupported');
          }
        }, {
          key: "digest",
          value: function digest(message) {
            return digest$1(message);
          }
        }, {
          key: "createNameMapper",
          value: function createNameMapper(message) {
            return new SimplePlaceholderMapper(message, toPublicName);
          }
        }]);

        return Xmb;
      }(Serializer);

      var _Visitor$1 = /*#__PURE__*/function () {
        function _Visitor$1() {
          _classCallCheck2(this, _Visitor$1);
        }

        _createClass2(_Visitor$1, [{
          key: "visitText",
          value: function visitText(text, context) {
            return [new Text$2(text.value)];
          }
        }, {
          key: "visitContainer",
          value: function visitContainer(container, context) {
            var _this204 = this;

            var nodes = [];
            container.children.forEach(function (node) {
              return nodes.push.apply(nodes, _toConsumableArray(node.visit(_this204)));
            });
            return nodes;
          }
        }, {
          key: "visitIcu",
          value: function visitIcu(icu, context) {
            var _this205 = this;

            var nodes = [new Text$2("{".concat(icu.expressionPlaceholder, ", ").concat(icu.type, ", "))];
            Object.keys(icu.cases).forEach(function (c) {
              nodes.push.apply(nodes, [new Text$2("".concat(c, " {"))].concat(_toConsumableArray(icu.cases[c].visit(_this205)), [new Text$2("} ")]));
            });
            nodes.push(new Text$2("}"));
            return nodes;
          }
        }, {
          key: "visitTagPlaceholder",
          value: function visitTagPlaceholder(ph, context) {
            var startTagAsText = new Text$2("<".concat(ph.tag, ">"));
            var startEx = new Tag(_EXAMPLE_TAG, {}, [startTagAsText]); // TC requires PH to have a non empty EX, and uses the text node to show the "original" value.

            var startTagPh = new Tag(_PLACEHOLDER_TAG, {
              name: ph.startName
            }, [startEx, startTagAsText]);

            if (ph.isVoid) {
              // void tags have no children nor closing tags
              return [startTagPh];
            }

            var closeTagAsText = new Text$2("</".concat(ph.tag, ">"));
            var closeEx = new Tag(_EXAMPLE_TAG, {}, [closeTagAsText]); // TC requires PH to have a non empty EX, and uses the text node to show the "original" value.

            var closeTagPh = new Tag(_PLACEHOLDER_TAG, {
              name: ph.closeName
            }, [closeEx, closeTagAsText]);
            return [startTagPh].concat(_toConsumableArray(this.serialize(ph.children)), [closeTagPh]);
          }
        }, {
          key: "visitPlaceholder",
          value: function visitPlaceholder(ph, context) {
            var interpolationAsText = new Text$2("{{".concat(ph.value, "}}")); // Example tag needs to be not-empty for TC.

            var exTag = new Tag(_EXAMPLE_TAG, {}, [interpolationAsText]);
            return [// TC requires PH to have a non empty EX, and uses the text node to show the "original" value.
            new Tag(_PLACEHOLDER_TAG, {
              name: ph.name
            }, [exTag, interpolationAsText])];
          }
        }, {
          key: "visitIcuPlaceholder",
          value: function visitIcuPlaceholder(ph, context) {
            var icuExpression = ph.value.expression;
            var icuType = ph.value.type;
            var icuCases = Object.keys(ph.value.cases).map(function (value) {
              return value + ' {...}';
            }).join(' ');
            var icuAsText = new Text$2("{".concat(icuExpression, ", ").concat(icuType, ", ").concat(icuCases, "}"));
            var exTag = new Tag(_EXAMPLE_TAG, {}, [icuAsText]);
            return [// TC requires PH to have a non empty EX, and uses the text node to show the "original" value.
            new Tag(_PLACEHOLDER_TAG, {
              name: ph.name
            }, [exTag, icuAsText])];
          }
        }, {
          key: "serialize",
          value: function serialize(nodes) {
            var _ref64,
                _this206 = this;

            return (_ref64 = []).concat.apply(_ref64, _toConsumableArray(nodes.map(function (node) {
              return node.visit(_this206);
            })));
          }
        }]);

        return _Visitor$1;
      }();

      function digest$1(message) {
        return decimalDigest(message);
      } // TC requires at least one non-empty example on placeholders


      var ExampleVisitor = /*#__PURE__*/function () {
        function ExampleVisitor() {
          _classCallCheck2(this, ExampleVisitor);
        }

        _createClass2(ExampleVisitor, [{
          key: "addDefaultExamples",
          value: function addDefaultExamples(node) {
            node.visit(this);
            return node;
          }
        }, {
          key: "visitTag",
          value: function visitTag(tag) {
            var _this207 = this;

            if (tag.name === _PLACEHOLDER_TAG) {
              if (!tag.children || tag.children.length == 0) {
                var exText = new Text$2(tag.attrs['name'] || '...');
                tag.children = [new Tag(_EXAMPLE_TAG, {}, [exText])];
              }
            } else if (tag.children) {
              tag.children.forEach(function (node) {
                return node.visit(_this207);
              });
            }
          }
        }, {
          key: "visitText",
          value: function visitText(text) {}
        }, {
          key: "visitDeclaration",
          value: function visitDeclaration(decl) {}
        }, {
          key: "visitDoctype",
          value: function visitDoctype(doctype) {}
        }]);

        return ExampleVisitor;
      }(); // XMB/XTB placeholders can only contain A-Z, 0-9 and _


      function toPublicName(internalName) {
        return internalName.toUpperCase().replace(/[^A-Z0-9_]/g, '_');
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /* Closure variables holding messages must be named `MSG_[A-Z0-9]+` */


      var CLOSURE_TRANSLATION_VAR_PREFIX = 'MSG_';
      /**
       * Prefix for non-`goog.getMsg` i18n-related vars.
       * Note: the prefix uses lowercase characters intentionally due to a Closure behavior that
       * considers variables like `I18N_0` as constants and throws an error when their value changes.
       */

      var TRANSLATION_VAR_PREFIX = 'i18n_';
      /** Name of the i18n attributes **/

      var I18N_ATTR = 'i18n';
      var I18N_ATTR_PREFIX = 'i18n-';
      /** Prefix of var expressions used in ICUs */

      var I18N_ICU_VAR_PREFIX = 'VAR_';
      /** Prefix of ICU expressions for post processing */

      var I18N_ICU_MAPPING_PREFIX = 'I18N_EXP_';
      /** Placeholder wrapper for i18n expressions **/

      var I18N_PLACEHOLDER_SYMBOL = '�';

      function isI18nAttribute(name) {
        return name === I18N_ATTR || name.startsWith(I18N_ATTR_PREFIX);
      }

      function isI18nRootNode(meta) {
        return meta instanceof Message;
      }

      function isSingleI18nIcu(meta) {
        return isI18nRootNode(meta) && meta.nodes.length === 1 && meta.nodes[0] instanceof Icu$1;
      }

      function hasI18nMeta(node) {
        return !!node.i18n;
      }

      function hasI18nAttrs(element) {
        return element.attrs.some(function (attr) {
          return isI18nAttribute(attr.name);
        });
      }

      function icuFromI18nMessage(message) {
        return message.nodes[0];
      }

      function wrapI18nPlaceholder(content) {
        var contextId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
        var blockId = contextId > 0 ? ":".concat(contextId) : '';
        return "".concat(I18N_PLACEHOLDER_SYMBOL).concat(content).concat(blockId).concat(I18N_PLACEHOLDER_SYMBOL);
      }

      function assembleI18nBoundString(strings) {
        var bindingStartIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
        var contextId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
        if (!strings.length) return '';
        var acc = '';
        var lastIdx = strings.length - 1;

        for (var i = 0; i < lastIdx; i++) {
          acc += "".concat(strings[i]).concat(wrapI18nPlaceholder(bindingStartIndex + i, contextId));
        }

        acc += strings[lastIdx];
        return acc;
      }

      function getSeqNumberGenerator() {
        var startsAt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
        var current = startsAt;
        return function () {
          return current++;
        };
      }

      function placeholdersToParams(placeholders) {
        var params = {};
        placeholders.forEach(function (values, key) {
          params[key] = literal(values.length > 1 ? "[".concat(values.join('|'), "]") : values[0]);
        });
        return params;
      }

      function updatePlaceholderMap(map, name) {
        var current = map.get(name) || [];

        for (var _len8 = arguments.length, values = new Array(_len8 > 2 ? _len8 - 2 : 0), _key10 = 2; _key10 < _len8; _key10++) {
          values[_key10 - 2] = arguments[_key10];
        }

        current.push.apply(current, values);
        map.set(name, current);
      }

      function assembleBoundTextPlaceholders(meta) {
        var bindingStartIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
        var contextId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
        var startIdx = bindingStartIndex;
        var placeholders = new Map();
        var node = meta instanceof Message ? meta.nodes.find(function (node) {
          return node instanceof Container;
        }) : meta;

        if (node) {
          node.children.filter(function (child) {
            return child instanceof Placeholder;
          }).forEach(function (child, idx) {
            var content = wrapI18nPlaceholder(startIdx + idx, contextId);
            updatePlaceholderMap(placeholders, child.name, content);
          });
        }

        return placeholders;
      }
      /**
       * Format the placeholder names in a map of placeholders to expressions.
       *
       * The placeholder names are converted from "internal" format (e.g. `START_TAG_DIV_1`) to "external"
       * format (e.g. `startTagDiv_1`).
       *
       * @param params A map of placeholder names to expressions.
       * @param useCamelCase whether to camelCase the placeholder name when formatting.
       * @returns A new map of formatted placeholder names to expressions.
       */


      function i18nFormatPlaceholderNames() {
        var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
        var useCamelCase = arguments.length > 1 ? arguments[1] : undefined;
        var _params = {};

        if (params && Object.keys(params).length) {
          Object.keys(params).forEach(function (key) {
            return _params[formatI18nPlaceholderName(key, useCamelCase)] = params[key];
          });
        }

        return _params;
      }
      /**
       * Converts internal placeholder names to public-facing format
       * (for example to use in goog.getMsg call).
       * Example: `START_TAG_DIV_1` is converted to `startTagDiv_1`.
       *
       * @param name The placeholder name that should be formatted
       * @returns Formatted placeholder name
       */


      function formatI18nPlaceholderName(name) {
        var useCamelCase = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
        var publicName = toPublicName(name);

        if (!useCamelCase) {
          return publicName;
        }

        var chunks = publicName.split('_');

        if (chunks.length === 1) {
          // if no "_" found - just lowercase the value
          return name.toLowerCase();
        }

        var postfix; // eject last element if it's a number

        if (/^\d+$/.test(chunks[chunks.length - 1])) {
          postfix = chunks.pop();
        }

        var raw = chunks.shift().toLowerCase();

        if (chunks.length) {
          raw += chunks.map(function (c) {
            return c.charAt(0).toUpperCase() + c.slice(1).toLowerCase();
          }).join('');
        }

        return postfix ? "".concat(raw, "_").concat(postfix) : raw;
      }
      /**
       * Generates a prefix for translation const name.
       *
       * @param extra Additional local prefix that should be injected into translation var name
       * @returns Complete translation const prefix
       */


      function getTranslationConstPrefix(extra) {
        return "".concat(CLOSURE_TRANSLATION_VAR_PREFIX).concat(extra).toUpperCase();
      }
      /**
       * Generate AST to declare a variable. E.g. `var I18N_1;`.
       * @param variable the name of the variable to declare.
       */


      function declareI18nVariable(variable) {
        return new DeclareVarStmt(variable.name, undefined, INFERRED_TYPE, undefined, variable.sourceSpan);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Checks whether an object key contains potentially unsafe chars, thus the key should be wrapped in
       * quotes. Note: we do not wrap all keys into quotes, as it may have impact on minification and may
       * bot work in some cases when object keys are mangled by minifier.
       *
       * TODO(FW-1136): this is a temporary solution, we need to come up with a better way of working with
       * inputs that contain potentially unsafe chars.
       */


      var UNSAFE_OBJECT_KEY_NAME_REGEXP = /[-.]/;
      /** Name of the temporary to use during data binding */

      var TEMPORARY_NAME = '_t';
      /** Name of the context parameter passed into a template function */

      var CONTEXT_NAME = 'ctx';
      /** Name of the RenderFlag passed into a template function */

      var RENDER_FLAGS = 'rf';
      /** The prefix reference variables */

      var REFERENCE_PREFIX = '_r';
      /** The name of the implicit context reference */

      var IMPLICIT_REFERENCE = '$implicit';
      /** Non bindable attribute name **/

      var NON_BINDABLE_ATTR = 'ngNonBindable';
      /**
       * Creates an allocator for a temporary variable.
       *
       * A variable declaration is added to the statements the first time the allocator is invoked.
       */

      function temporaryAllocator(statements, name) {
        var temp = null;
        return function () {
          if (!temp) {
            statements.push(new DeclareVarStmt(TEMPORARY_NAME, undefined, DYNAMIC_TYPE));
            temp = variable(name);
          }

          return temp;
        };
      }

      function unsupported(feature) {
        if (this) {
          throw new Error("Builder ".concat(this.constructor.name, " doesn't support ").concat(feature, " yet"));
        }

        throw new Error("Feature ".concat(feature, " is not supported yet"));
      }

      function invalid$1(arg) {
        throw new Error("Invalid state: Visitor ".concat(this.constructor.name, " doesn't handle ").concat(arg.constructor.name));
      }

      function asLiteral(value) {
        if (Array.isArray(value)) {
          return literalArr(value.map(asLiteral));
        }

        return literal(value, INFERRED_TYPE);
      }

      function conditionallyCreateMapObjectLiteral(keys, keepDeclared) {
        if (Object.getOwnPropertyNames(keys).length > 0) {
          return mapToExpression(keys, keepDeclared);
        }

        return null;
      }

      function mapToExpression(map, keepDeclared) {
        return literalMap(Object.getOwnPropertyNames(map).map(function (key) {
          // canonical syntax: `dirProp: publicProp`
          // if there is no `:`, use dirProp = elProp
          var value = map[key];
          var declaredName;
          var publicName;
          var minifiedName;
          var needsDeclaredName;

          if (Array.isArray(value)) {
            var _value2 = _slicedToArray(value, 2);

            publicName = _value2[0];
            declaredName = _value2[1];
            minifiedName = key;
            needsDeclaredName = publicName !== declaredName;
          } else {
            var _splitAtColon = splitAtColon(key, [key, value]);

            var _splitAtColon2 = _slicedToArray(_splitAtColon, 2);

            declaredName = _splitAtColon2[0];
            publicName = _splitAtColon2[1];
            minifiedName = declaredName; // Only include the declared name if extracted from the key, i.e. the key contains a colon.
            // Otherwise the declared name should be omitted even if it is different from the public name,
            // as it may have already been minified.

            needsDeclaredName = publicName !== declaredName && key.includes(':');
          }

          return {
            key: minifiedName,
            // put quotes around keys that contain potentially unsafe characters
            quoted: UNSAFE_OBJECT_KEY_NAME_REGEXP.test(minifiedName),
            value: keepDeclared && needsDeclaredName ? literalArr([asLiteral(publicName), asLiteral(declaredName)]) : asLiteral(publicName)
          };
        }));
      }
      /**
       *  Remove trailing null nodes as they are implied.
       */


      function trimTrailingNulls(parameters) {
        while (isNull(parameters[parameters.length - 1])) {
          parameters.pop();
        }

        return parameters;
      }

      function getQueryPredicate(query, constantPool) {
        if (Array.isArray(query.predicate)) {
          var predicate = [];
          query.predicate.forEach(function (selector) {
            // Each item in predicates array may contain strings with comma-separated refs
            // (for ex. 'ref, ref1, ..., refN'), thus we extract individual refs and store them
            // as separate array entities
            var selectors = selector.split(',').map(function (token) {
              return literal(token.trim());
            });
            predicate.push.apply(predicate, _toConsumableArray(selectors));
          });
          return constantPool.getConstLiteral(literalArr(predicate), true);
        } else {
          return query.predicate;
        }
      }
      /**
       * A representation for an object literal used during codegen of definition objects. The generic
       * type `T` allows to reference a documented type of the generated structure, such that the
       * property names that are set can be resolved to their documented declaration.
       */


      var DefinitionMap = /*#__PURE__*/function () {
        function DefinitionMap() {
          _classCallCheck2(this, DefinitionMap);

          this.values = [];
        }

        _createClass2(DefinitionMap, [{
          key: "set",
          value: function set(key, value) {
            if (value) {
              this.values.push({
                key: key,
                value: value,
                quoted: false
              });
            }
          }
        }, {
          key: "toLiteralMap",
          value: function toLiteralMap() {
            return literalMap(this.values);
          }
        }]);

        return DefinitionMap;
      }();
      /**
       * Extract a map of properties to values for a given element or template node, which can be used
       * by the directive matching machinery.
       *
       * @param elOrTpl the element or template in question
       * @return an object set up for directive matching. For attributes on the element/template, this
       * object maps a property name to its (static) value. For any bindings, this map simply maps the
       * property name to an empty string.
       */


      function getAttrsForDirectiveMatching(elOrTpl) {
        var attributesMap = {};

        if (elOrTpl instanceof Template && elOrTpl.tagName !== 'ng-template') {
          elOrTpl.templateAttrs.forEach(function (a) {
            return attributesMap[a.name] = '';
          });
        } else {
          elOrTpl.attributes.forEach(function (a) {
            if (!isI18nAttribute(a.name)) {
              attributesMap[a.name] = a.value;
            }
          });
          elOrTpl.inputs.forEach(function (i) {
            attributesMap[i.name] = '';
          });
          elOrTpl.outputs.forEach(function (o) {
            attributesMap[o.name] = '';
          });
        }

        return attributesMap;
      }
      /** Returns a call expression to a chained instruction, e.g. `property(params[0])(params[1])`. */


      function chainedInstruction(reference, calls, span) {
        var expression = importExpr(reference, null, span);

        if (calls.length > 0) {
          for (var i = 0; i < calls.length; i++) {
            expression = expression.callFn(calls[i], span);
          }
        } else {
          // Add a blank invocation, in case the `calls` array is empty.
          expression = expression.callFn([], span);
        }

        return expression;
      }
      /**
       * Gets the number of arguments expected to be passed to a generated instruction in the case of
       * interpolation instructions.
       * @param interpolation An interpolation ast
       */


      function getInterpolationArgsLength(interpolation) {
        var expressions = interpolation.expressions,
            strings = interpolation.strings;

        if (expressions.length === 1 && strings.length === 2 && strings[0] === '' && strings[1] === '') {
          // If the interpolation has one interpolated value, but the prefix and suffix are both empty
          // strings, we only pass one argument, to a special instruction like `propertyInterpolate` or
          // `textInterpolate`.
          return 1;
        } else {
          return expressions.length + strings.length;
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var R3FactoryDelegateType;

      (function (R3FactoryDelegateType) {
        R3FactoryDelegateType[R3FactoryDelegateType["Class"] = 0] = "Class";
        R3FactoryDelegateType[R3FactoryDelegateType["Function"] = 1] = "Function";
        R3FactoryDelegateType[R3FactoryDelegateType["Factory"] = 2] = "Factory";
      })(R3FactoryDelegateType || (R3FactoryDelegateType = {}));

      var R3FactoryTarget;

      (function (R3FactoryTarget) {
        R3FactoryTarget[R3FactoryTarget["Directive"] = 0] = "Directive";
        R3FactoryTarget[R3FactoryTarget["Component"] = 1] = "Component";
        R3FactoryTarget[R3FactoryTarget["Injectable"] = 2] = "Injectable";
        R3FactoryTarget[R3FactoryTarget["Pipe"] = 3] = "Pipe";
        R3FactoryTarget[R3FactoryTarget["NgModule"] = 4] = "NgModule";
      })(R3FactoryTarget || (R3FactoryTarget = {}));
      /**
       * Resolved type of a dependency.
       *
       * Occasionally, dependencies will have special significance which is known statically. In that
       * case the `R3ResolvedDependencyType` informs the factory generator that a particular dependency
       * should be generated specially (usually by calling a special injection function instead of the
       * standard one).
       */


      var R3ResolvedDependencyType;

      (function (R3ResolvedDependencyType) {
        /**
         * A normal token dependency.
         */
        R3ResolvedDependencyType[R3ResolvedDependencyType["Token"] = 0] = "Token";
        /**
         * The dependency is for an attribute.
         *
         * The token expression is a string representing the attribute name.
         */

        R3ResolvedDependencyType[R3ResolvedDependencyType["Attribute"] = 1] = "Attribute";
        /**
         * Injecting the `ChangeDetectorRef` token. Needs special handling when injected into a pipe.
         */

        R3ResolvedDependencyType[R3ResolvedDependencyType["ChangeDetectorRef"] = 2] = "ChangeDetectorRef";
        /**
         * An invalid dependency (no token could be determined). An error should be thrown at runtime.
         */

        R3ResolvedDependencyType[R3ResolvedDependencyType["Invalid"] = 3] = "Invalid";
      })(R3ResolvedDependencyType || (R3ResolvedDependencyType = {}));
      /**
       * Construct a factory function expression for the given `R3FactoryMetadata`.
       */


      function compileFactoryFunction(meta) {
        var t = variable('t');
        var statements = [];
        var ctorDepsType = NONE_TYPE; // The type to instantiate via constructor invocation. If there is no delegated factory, meaning
        // this type is always created by constructor invocation, then this is the type-to-create
        // parameter provided by the user (t) if specified, or the current type if not. If there is a
        // delegated factory (which is used to create the current type) then this is only the type-to-
        // create parameter (t).

        var typeForCtor = !isDelegatedMetadata(meta) ? new BinaryOperatorExpr(BinaryOperator.Or, t, meta.internalType) : t;
        var ctorExpr = null;

        if (meta.deps !== null) {
          // There is a constructor (either explicitly or implicitly defined).
          if (meta.deps !== 'invalid') {
            ctorExpr = new InstantiateExpr(typeForCtor, injectDependencies(meta.deps, meta.injectFn, meta.target === R3FactoryTarget.Pipe));
            ctorDepsType = createCtorDepsType(meta.deps);
          }
        } else {
          var baseFactory = variable("\u0275".concat(meta.name, "_BaseFactory"));
          var getInheritedFactory = importExpr(Identifiers$1.getInheritedFactory);
          var baseFactoryStmt = baseFactory.set(getInheritedFactory.callFn([meta.internalType],
          /* sourceSpan */
          undefined,
          /* pure */
          true)).toDeclStmt(INFERRED_TYPE, [StmtModifier.Exported, StmtModifier.Final]);
          statements.push(baseFactoryStmt); // There is no constructor, use the base class' factory to construct typeForCtor.

          ctorExpr = baseFactory.callFn([typeForCtor]);
        }

        var ctorExprFinal = ctorExpr;
        var body = [];
        var retExpr = null;

        function makeConditionalFactory(nonCtorExpr) {
          var r = variable('r');
          body.push(r.set(NULL_EXPR).toDeclStmt());
          var ctorStmt = null;

          if (ctorExprFinal !== null) {
            ctorStmt = r.set(ctorExprFinal).toStmt();
          } else {
            ctorStmt = importExpr(Identifiers$1.invalidFactory).callFn([]).toStmt();
          }

          body.push(ifStmt(t, [ctorStmt], [r.set(nonCtorExpr).toStmt()]));
          return r;
        }

        if (isDelegatedMetadata(meta) && meta.delegateType === R3FactoryDelegateType.Factory) {
          var delegateFactory = variable("\u0275".concat(meta.name, "_BaseFactory"));
          var getFactoryOf = importExpr(Identifiers$1.getFactoryOf);

          if (meta.delegate.isEquivalent(meta.internalType)) {
            throw new Error("Illegal state: compiling factory that delegates to itself");
          }

          var delegateFactoryStmt = delegateFactory.set(getFactoryOf.callFn([meta.delegate])).toDeclStmt(INFERRED_TYPE, [StmtModifier.Exported, StmtModifier.Final]);
          statements.push(delegateFactoryStmt);
          retExpr = makeConditionalFactory(delegateFactory.callFn([]));
        } else if (isDelegatedMetadata(meta)) {
          // This type is created with a delegated factory. If a type parameter is not specified, call
          // the factory instead.
          var delegateArgs = injectDependencies(meta.delegateDeps, meta.injectFn, meta.target === R3FactoryTarget.Pipe); // Either call `new delegate(...)` or `delegate(...)` depending on meta.delegateType.

          var factoryExpr = new (meta.delegateType === R3FactoryDelegateType.Class ? InstantiateExpr : InvokeFunctionExpr)(meta.delegate, delegateArgs);
          retExpr = makeConditionalFactory(factoryExpr);
        } else if (isExpressionFactoryMetadata(meta)) {
          // TODO(alxhub): decide whether to lower the value here or in the caller
          retExpr = makeConditionalFactory(meta.expression);
        } else {
          retExpr = ctorExpr;
        }

        if (retExpr !== null) {
          body.push(new ReturnStatement(retExpr));
        } else {
          body.push(importExpr(Identifiers$1.invalidFactory).callFn([]).toStmt());
        }

        return {
          factory: fn([new FnParam('t', DYNAMIC_TYPE)], body, INFERRED_TYPE, undefined, "".concat(meta.name, "_Factory")),
          statements: statements,
          type: expressionType(importExpr(Identifiers$1.FactoryDef, [typeWithParameters(meta.type.type, meta.typeArgumentCount), ctorDepsType]))
        };
      }

      function injectDependencies(deps, injectFn, isPipe) {
        return deps.map(function (dep, index) {
          return compileInjectDependency(dep, injectFn, isPipe, index);
        });
      }

      function compileInjectDependency(dep, injectFn, isPipe, index) {
        // Interpret the dependency according to its resolved type.
        switch (dep.resolved) {
          case R3ResolvedDependencyType.Token:
          case R3ResolvedDependencyType.ChangeDetectorRef:
            // Build up the injection flags according to the metadata.
            var flags = 0
            /* Default */
            | (dep.self ? 2
            /* Self */
            : 0) | (dep.skipSelf ? 4
            /* SkipSelf */
            : 0) | (dep.host ? 1
            /* Host */
            : 0) | (dep.optional ? 8
            /* Optional */
            : 0); // If this dependency is optional or otherwise has non-default flags, then additional
            // parameters describing how to inject the dependency must be passed to the inject function
            // that's being used.

            var flagsParam = flags !== 0
            /* Default */
            || dep.optional ? literal(flags) : null; // We have a separate instruction for injecting ChangeDetectorRef into a pipe.

            if (isPipe && dep.resolved === R3ResolvedDependencyType.ChangeDetectorRef) {
              return importExpr(Identifiers$1.injectPipeChangeDetectorRef).callFn(flagsParam ? [flagsParam] : []);
            } // Build up the arguments to the injectFn call.


            var injectArgs = [dep.token];

            if (flagsParam) {
              injectArgs.push(flagsParam);
            }

            return importExpr(injectFn).callFn(injectArgs);

          case R3ResolvedDependencyType.Attribute:
            // In the case of attributes, the attribute name in question is given as the token.
            return importExpr(Identifiers$1.injectAttribute).callFn([dep.token]);

          case R3ResolvedDependencyType.Invalid:
            return importExpr(Identifiers$1.invalidFactoryDep).callFn([literal(index)]);

          default:
            return unsupported("Unknown R3ResolvedDependencyType: ".concat(R3ResolvedDependencyType[dep.resolved]));
        }
      }

      function createCtorDepsType(deps) {
        var hasTypes = false;
        var attributeTypes = deps.map(function (dep) {
          var type = createCtorDepType(dep);

          if (type !== null) {
            hasTypes = true;
            return type;
          } else {
            return literal(null);
          }
        });

        if (hasTypes) {
          return expressionType(literalArr(attributeTypes));
        } else {
          return NONE_TYPE;
        }
      }

      function createCtorDepType(dep) {
        var entries = [];

        if (dep.resolved === R3ResolvedDependencyType.Attribute) {
          if (dep.attribute !== null) {
            entries.push({
              key: 'attribute',
              value: dep.attribute,
              quoted: false
            });
          }
        }

        if (dep.optional) {
          entries.push({
            key: 'optional',
            value: literal(true),
            quoted: false
          });
        }

        if (dep.host) {
          entries.push({
            key: 'host',
            value: literal(true),
            quoted: false
          });
        }

        if (dep.self) {
          entries.push({
            key: 'self',
            value: literal(true),
            quoted: false
          });
        }

        if (dep.skipSelf) {
          entries.push({
            key: 'skipSelf',
            value: literal(true),
            quoted: false
          });
        }

        return entries.length > 0 ? literalMap(entries) : null;
      }
      /**
       * A helper function useful for extracting `R3DependencyMetadata` from a Render2
       * `CompileTypeMetadata` instance.
       */


      function dependenciesFromGlobalMetadata(type, outputCtx, reflector) {
        // Use the `CompileReflector` to look up references to some well-known Angular types. These will
        // be compared with the token to statically determine whether the token has significance to
        // Angular, and set the correct `R3ResolvedDependencyType` as a result.
        var injectorRef = reflector.resolveExternalReference(Identifiers.Injector); // Iterate through the type's DI dependencies and produce `R3DependencyMetadata` for each of them.

        var deps = [];

        var _iterator14 = _createForOfIteratorHelper(type.diDeps),
            _step14;

        try {
          for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
            var dependency = _step14.value;

            if (dependency.token) {
              var tokenRef = tokenReference(dependency.token);
              var resolved = dependency.isAttribute ? R3ResolvedDependencyType.Attribute : R3ResolvedDependencyType.Token; // In the case of most dependencies, the token will be a reference to a type. Sometimes,
              // however, it can be a string, in the case of older Angular code or @Attribute injection.

              var token = tokenRef instanceof StaticSymbol ? outputCtx.importExpr(tokenRef) : literal(tokenRef); // Construct the dependency.

              deps.push({
                token: token,
                attribute: null,
                resolved: resolved,
                host: !!dependency.isHost,
                optional: !!dependency.isOptional,
                self: !!dependency.isSelf,
                skipSelf: !!dependency.isSkipSelf
              });
            } else {
              unsupported('dependency without a token');
            }
          }
        } catch (err) {
          _iterator14.e(err);
        } finally {
          _iterator14.f();
        }

        return deps;
      }

      function isDelegatedMetadata(meta) {
        return meta.delegateType !== undefined;
      }

      function isExpressionFactoryMetadata(meta) {
        return meta.expression !== undefined;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function _compileInjectable(meta) {
        var result = null;
        var factoryMeta = {
          name: meta.name,
          type: meta.type,
          internalType: meta.internalType,
          typeArgumentCount: meta.typeArgumentCount,
          deps: [],
          injectFn: Identifiers.inject,
          target: R3FactoryTarget.Injectable
        };

        if (meta.useClass !== undefined) {
          // meta.useClass has two modes of operation. Either deps are specified, in which case `new` is
          // used to instantiate the class with dependencies injected, or deps are not specified and
          // the factory of the class is used to instantiate it.
          //
          // A special case exists for useClass: Type where Type is the injectable type itself and no
          // deps are specified, in which case 'useClass' is effectively ignored.
          var useClassOnSelf = meta.useClass.isEquivalent(meta.internalType);
          var deps = undefined;

          if (meta.userDeps !== undefined) {
            deps = meta.userDeps;
          }

          if (deps !== undefined) {
            // factory: () => new meta.useClass(...deps)
            result = compileFactoryFunction(Object.assign(Object.assign({}, factoryMeta), {
              delegate: meta.useClass,
              delegateDeps: deps,
              delegateType: R3FactoryDelegateType.Class
            }));
          } else if (useClassOnSelf) {
            result = compileFactoryFunction(factoryMeta);
          } else {
            result = delegateToFactory(meta.type.value, meta.useClass);
          }
        } else if (meta.useFactory !== undefined) {
          if (meta.userDeps !== undefined) {
            result = compileFactoryFunction(Object.assign(Object.assign({}, factoryMeta), {
              delegate: meta.useFactory,
              delegateDeps: meta.userDeps || [],
              delegateType: R3FactoryDelegateType.Function
            }));
          } else {
            result = {
              statements: [],
              factory: fn([], [new ReturnStatement(meta.useFactory.callFn([]))])
            };
          }
        } else if (meta.useValue !== undefined) {
          // Note: it's safe to use `meta.useValue` instead of the `USE_VALUE in meta` check used for
          // client code because meta.useValue is an Expression which will be defined even if the actual
          // value is undefined.
          result = compileFactoryFunction(Object.assign(Object.assign({}, factoryMeta), {
            expression: meta.useValue
          }));
        } else if (meta.useExisting !== undefined) {
          // useExisting is an `inject` call on the existing token.
          result = compileFactoryFunction(Object.assign(Object.assign({}, factoryMeta), {
            expression: importExpr(Identifiers.inject).callFn([meta.useExisting])
          }));
        } else {
          result = delegateToFactory(meta.type.value, meta.internalType);
        }

        var token = meta.internalType;
        var injectableProps = {
          token: token,
          factory: result.factory
        }; // Only generate providedIn property if it has a non-null value

        if (meta.providedIn.value !== null) {
          injectableProps.providedIn = meta.providedIn;
        }

        var expression = importExpr(Identifiers.ɵɵdefineInjectable).callFn([mapToMapExpression(injectableProps)]);
        var type = new ExpressionType(importExpr(Identifiers.InjectableDef, [typeWithParameters(meta.type.type, meta.typeArgumentCount)]));
        return {
          expression: expression,
          type: type,
          statements: result.statements
        };
      }

      function delegateToFactory(type, internalType) {
        return {
          statements: [],
          // If types are the same, we can generate `factory: type.ɵfac`
          // If types are different, we have to generate a wrapper function to ensure
          // the internal type has been resolved (`factory: function(t) { return type.ɵfac(t); }`)
          factory: type.node === internalType.node ? internalType.prop('ɵfac') : fn([new FnParam('t', DYNAMIC_TYPE)], [new ReturnStatement(internalType.callMethod('ɵfac', [variable('t')]))])
        };
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function assertArrayOfStrings(identifier, value) {
        if (value == null) {
          return;
        }

        if (!Array.isArray(value)) {
          throw new Error("Expected '".concat(identifier, "' to be an array of strings."));
        }

        for (var i = 0; i < value.length; i += 1) {
          if (typeof value[i] !== 'string') {
            throw new Error("Expected '".concat(identifier, "' to be an array of strings."));
          }
        }
      }

      var UNUSABLE_INTERPOLATION_REGEXPS = [/^\s*$/, /[<>]/, /^[{}]$/, /&(#|[a-z])/i, /^\/\//];

      function assertInterpolationSymbols(identifier, value) {
        if (value != null && !(Array.isArray(value) && value.length == 2)) {
          throw new Error("Expected '".concat(identifier, "' to be an array, [start, end]."));
        } else if (value != null) {
          var start = value[0];
          var end = value[1]; // Check for unusable interpolation symbols

          UNUSABLE_INTERPOLATION_REGEXPS.forEach(function (regexp) {
            if (regexp.test(start) || regexp.test(end)) {
              throw new Error("['".concat(start, "', '").concat(end, "'] contains unusable interpolation symbol."));
            }
          });
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var InterpolationConfig = /*#__PURE__*/function () {
        function InterpolationConfig(start, end) {
          _classCallCheck2(this, InterpolationConfig);

          this.start = start;
          this.end = end;
        }

        _createClass2(InterpolationConfig, null, [{
          key: "fromArray",
          value: function fromArray(markers) {
            if (!markers) {
              return DEFAULT_INTERPOLATION_CONFIG;
            }

            assertInterpolationSymbols('interpolation', markers);
            return new InterpolationConfig(markers[0], markers[1]);
          }
        }]);

        return InterpolationConfig;
      }();

      var DEFAULT_INTERPOLATION_CONFIG = new InterpolationConfig('{{', '}}');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * In TypeScript, tagged template functions expect a "template object", which is an array of
       * "cooked" strings plus a `raw` property that contains an array of "raw" strings. This is
       * typically constructed with a function called `__makeTemplateObject(cooked, raw)`, but it may not
       * be available in all environments.
       *
       * This is a JavaScript polyfill that uses __makeTemplateObject when it's available, but otherwise
       * creates an inline helper with the same functionality.
       *
       * In the inline function, if `Object.defineProperty` is available we use that to attach the `raw`
       * array.
       */

      var makeTemplateObjectPolyfill = '(this&&this.__makeTemplateObject||function(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e})';

      var AbstractJsEmitterVisitor = /*#__PURE__*/function (_AbstractEmitterVisit) {
        _inherits2(AbstractJsEmitterVisitor, _AbstractEmitterVisit);

        var _super109 = _createSuper(AbstractJsEmitterVisitor);

        function AbstractJsEmitterVisitor() {
          _classCallCheck2(this, AbstractJsEmitterVisitor);

          return _super109.call(this, false);
        }

        _createClass2(AbstractJsEmitterVisitor, [{
          key: "visitDeclareClassStmt",
          value: function visitDeclareClassStmt(stmt, ctx) {
            var _this208 = this;

            ctx.pushClass(stmt);

            this._visitClassConstructor(stmt, ctx);

            if (stmt.parent != null) {
              ctx.print(stmt, "".concat(stmt.name, ".prototype = Object.create("));
              stmt.parent.visitExpression(this, ctx);
              ctx.println(stmt, ".prototype);");
            }

            stmt.getters.forEach(function (getter) {
              return _this208._visitClassGetter(stmt, getter, ctx);
            });
            stmt.methods.forEach(function (method) {
              return _this208._visitClassMethod(stmt, method, ctx);
            });
            ctx.popClass();
            return null;
          }
        }, {
          key: "_visitClassConstructor",
          value: function _visitClassConstructor(stmt, ctx) {
            ctx.print(stmt, "function ".concat(stmt.name, "("));

            if (stmt.constructorMethod != null) {
              this._visitParams(stmt.constructorMethod.params, ctx);
            }

            ctx.println(stmt, ") {");
            ctx.incIndent();

            if (stmt.constructorMethod != null) {
              if (stmt.constructorMethod.body.length > 0) {
                ctx.println(stmt, "var self = this;");
                this.visitAllStatements(stmt.constructorMethod.body, ctx);
              }
            }

            ctx.decIndent();
            ctx.println(stmt, "}");
          }
        }, {
          key: "_visitClassGetter",
          value: function _visitClassGetter(stmt, getter, ctx) {
            ctx.println(stmt, "Object.defineProperty(".concat(stmt.name, ".prototype, '").concat(getter.name, "', { get: function() {"));
            ctx.incIndent();

            if (getter.body.length > 0) {
              ctx.println(stmt, "var self = this;");
              this.visitAllStatements(getter.body, ctx);
            }

            ctx.decIndent();
            ctx.println(stmt, "}});");
          }
        }, {
          key: "_visitClassMethod",
          value: function _visitClassMethod(stmt, method, ctx) {
            ctx.print(stmt, "".concat(stmt.name, ".prototype.").concat(method.name, " = function("));

            this._visitParams(method.params, ctx);

            ctx.println(stmt, ") {");
            ctx.incIndent();

            if (method.body.length > 0) {
              ctx.println(stmt, "var self = this;");
              this.visitAllStatements(method.body, ctx);
            }

            ctx.decIndent();
            ctx.println(stmt, "};");
          }
        }, {
          key: "visitWrappedNodeExpr",
          value: function visitWrappedNodeExpr(ast, ctx) {
            throw new Error('Cannot emit a WrappedNodeExpr in Javascript.');
          }
        }, {
          key: "visitReadVarExpr",
          value: function visitReadVarExpr(ast, ctx) {
            if (ast.builtin === BuiltinVar.This) {
              ctx.print(ast, 'self');
            } else if (ast.builtin === BuiltinVar.Super) {
              throw new Error("'super' needs to be handled at a parent ast node, not at the variable level!");
            } else {
              _get2(_getPrototypeOf2(AbstractJsEmitterVisitor.prototype), "visitReadVarExpr", this).call(this, ast, ctx);
            }

            return null;
          }
        }, {
          key: "visitDeclareVarStmt",
          value: function visitDeclareVarStmt(stmt, ctx) {
            ctx.print(stmt, "var ".concat(stmt.name));

            if (stmt.value) {
              ctx.print(stmt, ' = ');
              stmt.value.visitExpression(this, ctx);
            }

            ctx.println(stmt, ";");
            return null;
          }
        }, {
          key: "visitCastExpr",
          value: function visitCastExpr(ast, ctx) {
            ast.value.visitExpression(this, ctx);
            return null;
          }
        }, {
          key: "visitInvokeFunctionExpr",
          value: function visitInvokeFunctionExpr(expr, ctx) {
            var fnExpr = expr.fn;

            if (fnExpr instanceof ReadVarExpr && fnExpr.builtin === BuiltinVar.Super) {
              ctx.currentClass.parent.visitExpression(this, ctx);
              ctx.print(expr, ".call(this");

              if (expr.args.length > 0) {
                ctx.print(expr, ", ");
                this.visitAllExpressions(expr.args, ctx, ',');
              }

              ctx.print(expr, ")");
            } else {
              _get2(_getPrototypeOf2(AbstractJsEmitterVisitor.prototype), "visitInvokeFunctionExpr", this).call(this, expr, ctx);
            }

            return null;
          }
        }, {
          key: "visitTaggedTemplateExpr",
          value: function visitTaggedTemplateExpr(ast, ctx) {
            var _this209 = this;

            // The following convoluted piece of code is effectively the downlevelled equivalent of
            // ```
            // tag`...`
            // ```
            // which is effectively like:
            // ```
            // tag(__makeTemplateObject(cooked, raw), expression1, expression2, ...);
            // ```
            var elements = ast.template.elements;
            ast.tag.visitExpression(this, ctx);
            ctx.print(ast, "(".concat(makeTemplateObjectPolyfill, "("));
            ctx.print(ast, "[".concat(elements.map(function (part) {
              return escapeIdentifier(part.text, false);
            }).join(', '), "], "));
            ctx.print(ast, "[".concat(elements.map(function (part) {
              return escapeIdentifier(part.rawText, false);
            }).join(', '), "])"));
            ast.template.expressions.forEach(function (expression) {
              ctx.print(ast, ', ');
              expression.visitExpression(_this209, ctx);
            });
            ctx.print(ast, ')');
            return null;
          }
        }, {
          key: "visitFunctionExpr",
          value: function visitFunctionExpr(ast, ctx) {
            ctx.print(ast, "function".concat(ast.name ? ' ' + ast.name : '', "("));

            this._visitParams(ast.params, ctx);

            ctx.println(ast, ") {");
            ctx.incIndent();
            this.visitAllStatements(ast.statements, ctx);
            ctx.decIndent();
            ctx.print(ast, "}");
            return null;
          }
        }, {
          key: "visitDeclareFunctionStmt",
          value: function visitDeclareFunctionStmt(stmt, ctx) {
            ctx.print(stmt, "function ".concat(stmt.name, "("));

            this._visitParams(stmt.params, ctx);

            ctx.println(stmt, ") {");
            ctx.incIndent();
            this.visitAllStatements(stmt.statements, ctx);
            ctx.decIndent();
            ctx.println(stmt, "}");
            return null;
          }
        }, {
          key: "visitTryCatchStmt",
          value: function visitTryCatchStmt(stmt, ctx) {
            ctx.println(stmt, "try {");
            ctx.incIndent();
            this.visitAllStatements(stmt.bodyStmts, ctx);
            ctx.decIndent();
            ctx.println(stmt, "} catch (".concat(CATCH_ERROR_VAR$1.name, ") {"));
            ctx.incIndent();
            var catchStmts = [CATCH_STACK_VAR$1.set(CATCH_ERROR_VAR$1.prop('stack')).toDeclStmt(null, [StmtModifier.Final])].concat(stmt.catchStmts);
            this.visitAllStatements(catchStmts, ctx);
            ctx.decIndent();
            ctx.println(stmt, "}");
            return null;
          }
        }, {
          key: "visitLocalizedString",
          value: function visitLocalizedString(ast, ctx) {
            var _this210 = this;

            // The following convoluted piece of code is effectively the downlevelled equivalent of
            // ```
            // $localize `...`
            // ```
            // which is effectively like:
            // ```
            // $localize(__makeTemplateObject(cooked, raw), expression1, expression2, ...);
            // ```
            ctx.print(ast, "$localize(".concat(makeTemplateObjectPolyfill, "("));
            var parts = [ast.serializeI18nHead()];

            for (var i = 1; i < ast.messageParts.length; i++) {
              parts.push(ast.serializeI18nTemplatePart(i));
            }

            ctx.print(ast, "[".concat(parts.map(function (part) {
              return escapeIdentifier(part.cooked, false);
            }).join(', '), "], "));
            ctx.print(ast, "[".concat(parts.map(function (part) {
              return escapeIdentifier(part.raw, false);
            }).join(', '), "])"));
            ast.expressions.forEach(function (expression) {
              ctx.print(ast, ', ');
              expression.visitExpression(_this210, ctx);
            });
            ctx.print(ast, ')');
            return null;
          }
        }, {
          key: "_visitParams",
          value: function _visitParams(params, ctx) {
            this.visitAllObjects(function (param) {
              return ctx.print(null, param.name);
            }, params, ctx, ',');
          }
        }, {
          key: "getBuiltinMethodName",
          value: function getBuiltinMethodName(method) {
            var name;

            switch (method) {
              case BuiltinMethod.ConcatArray:
                name = 'concat';
                break;

              case BuiltinMethod.SubscribeObservable:
                name = 'subscribe';
                break;

              case BuiltinMethod.Bind:
                name = 'bind';
                break;

              default:
                throw new Error("Unknown builtin method: ".concat(method));
            }

            return name;
          }
        }]);

        return AbstractJsEmitterVisitor;
      }(AbstractEmitterVisitor);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * The Trusted Types policy, or null if Trusted Types are not
       * enabled/supported, or undefined if the policy has not been created yet.
       */


      var policy;
      /**
       * Returns the Trusted Types policy, or null if Trusted Types are not
       * enabled/supported. The first call to this function will create the policy.
       */

      function getPolicy() {
        if (policy === undefined) {
          policy = null;

          if (_global.trustedTypes) {
            try {
              policy = _global.trustedTypes.createPolicy('angular#unsafe-jit', {
                createScript: function createScript(s) {
                  return s;
                }
              });
            } catch (_a) {// trustedTypes.createPolicy throws if called with a name that is
              // already registered, even in report-only mode. Until the API changes,
              // catch the error not to break the applications functionally. In such
              // cases, the code will fall back to using strings.
            }
          }
        }

        return policy;
      }
      /**
       * Unsafely promote a string to a TrustedScript, falling back to strings when
       * Trusted Types are not available.
       * @security In particular, it must be assured that the provided string will
       * never cause an XSS vulnerability if used in a context that will be
       * interpreted and executed as a script by a browser, e.g. when calling eval.
       */


      function trustedScriptFromString(script) {
        var _a;

        return ((_a = getPolicy()) === null || _a === void 0 ? void 0 : _a.createScript(script)) || script;
      }
      /**
       * Unsafely call the Function constructor with the given string arguments.
       * @security This is a security-sensitive function; any use of this function
       * must go through security review. In particular, it must be assured that it
       * is only called from the JIT compiler, as use in other code can lead to XSS
       * vulnerabilities.
       */


      function newTrustedFunctionForJIT() {
        for (var _len9 = arguments.length, args = new Array(_len9), _key11 = 0; _key11 < _len9; _key11++) {
          args[_key11] = arguments[_key11];
        }

        if (!_global.trustedTypes) {
          // In environments that don't support Trusted Types, fall back to the most
          // straightforward implementation:
          return _construct2(Function, args);
        } // Chrome currently does not support passing TrustedScript to the Function
        // constructor. The following implements the workaround proposed on the page
        // below, where the Chromium bug is also referenced:
        // https://github.com/w3c/webappsec-trusted-types/wiki/Trusted-Types-for-function-constructor


        var fnArgs = args.slice(0, -1).join(',');
        var fnBody = args[args.length - 1];
        var body = "(function anonymous(".concat(fnArgs, "\n) { ").concat(fnBody, "\n})"); // Using eval directly confuses the compiler and prevents this module from
        // being stripped out of JS binaries even if not used. The global['eval']
        // indirection fixes that.

        var fn = _global['eval'](trustedScriptFromString(body));

        if (fn.bind === undefined) {
          // Workaround for a browser bug that only exists in Chrome 83, where passing
          // a TrustedScript to eval just returns the TrustedScript back without
          // evaluating it. In that case, fall back to the most straightforward
          // implementation:
          return _construct2(Function, args);
        } // To completely mimic the behavior of calling "new Function", two more
        // things need to happen:
        // 1. Stringifying the resulting function should return its source code


        fn.toString = function () {
          return body;
        }; // 2. When calling the resulting function, `this` should refer to `global`


        return fn.bind(_global); // When Trusted Types support in Function constructors is widely available,
        // the implementation of this function can be simplified to:
        // return new Function(...args.map(a => trustedScriptFromString(a)));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A helper class to manage the evaluation of JIT generated code.
       */


      var JitEvaluator = /*#__PURE__*/function () {
        function JitEvaluator() {
          _classCallCheck2(this, JitEvaluator);
        }

        _createClass2(JitEvaluator, [{
          key: "evaluateStatements",
          value:
          /**
           *
           * @param sourceUrl The URL of the generated code.
           * @param statements An array of Angular statement AST nodes to be evaluated.
           * @param reflector A helper used when converting the statements to executable code.
           * @param createSourceMaps If true then create a source-map for the generated code and include it
           * inline as a source-map comment.
           * @returns A map of all the variables in the generated code.
           */
          function evaluateStatements(sourceUrl, statements, reflector, createSourceMaps) {
            var converter = new JitEmitterVisitor(reflector);
            var ctx = EmitterVisitorContext.createRoot(); // Ensure generated code is in strict mode

            if (statements.length > 0 && !isUseStrictStatement(statements[0])) {
              statements = [literal('use strict').toStmt()].concat(_toConsumableArray(statements));
            }

            converter.visitAllStatements(statements, ctx);
            converter.createReturnStmt(ctx);
            return this.evaluateCode(sourceUrl, ctx, converter.getArgs(), createSourceMaps);
          }
          /**
           * Evaluate a piece of JIT generated code.
           * @param sourceUrl The URL of this generated code.
           * @param ctx A context object that contains an AST of the code to be evaluated.
           * @param vars A map containing the names and values of variables that the evaluated code might
           * reference.
           * @param createSourceMap If true then create a source-map for the generated code and include it
           * inline as a source-map comment.
           * @returns The result of evaluating the code.
           */

        }, {
          key: "evaluateCode",
          value: function evaluateCode(sourceUrl, ctx, vars, createSourceMap) {
            var fnBody = "\"use strict\";".concat(ctx.toSource(), "\n//# sourceURL=").concat(sourceUrl);
            var fnArgNames = [];
            var fnArgValues = [];

            for (var argName in vars) {
              fnArgValues.push(vars[argName]);
              fnArgNames.push(argName);
            }

            if (createSourceMap) {
              // using `new Function(...)` generates a header, 1 line of no arguments, 2 lines otherwise
              // E.g. ```
              // function anonymous(a,b,c
              // /**/) { ... }```
              // We don't want to hard code this fact, so we auto detect it via an empty function first.
              var emptyFn = newTrustedFunctionForJIT.apply(void 0, _toConsumableArray(fnArgNames.concat('return null;'))).toString();
              var headerLines = emptyFn.slice(0, emptyFn.indexOf('return null;')).split('\n').length - 1;
              fnBody += "\n".concat(ctx.toSourceMapGenerator(sourceUrl, headerLines).toJsComment());
            }

            var fn = newTrustedFunctionForJIT.apply(void 0, _toConsumableArray(fnArgNames.concat(fnBody)));
            return this.executeFunction(fn, fnArgValues);
          }
          /**
           * Execute a JIT generated function by calling it.
           *
           * This method can be overridden in tests to capture the functions that are generated
           * by this `JitEvaluator` class.
           *
           * @param fn A function to execute.
           * @param args The arguments to pass to the function being executed.
           * @returns The return value of the executed function.
           */

        }, {
          key: "executeFunction",
          value: function executeFunction(fn, args) {
            return fn.apply(void 0, _toConsumableArray(args));
          }
        }]);

        return JitEvaluator;
      }();
      /**
       * An Angular AST visitor that converts AST nodes into executable JavaScript code.
       */


      var JitEmitterVisitor = /*#__PURE__*/function (_AbstractJsEmitterVis) {
        _inherits2(JitEmitterVisitor, _AbstractJsEmitterVis);

        var _super110 = _createSuper(JitEmitterVisitor);

        function JitEmitterVisitor(reflector) {
          var _this211;

          _classCallCheck2(this, JitEmitterVisitor);

          _this211 = _super110.call(this);
          _this211.reflector = reflector;
          _this211._evalArgNames = [];
          _this211._evalArgValues = [];
          _this211._evalExportedVars = [];
          return _this211;
        }

        _createClass2(JitEmitterVisitor, [{
          key: "createReturnStmt",
          value: function createReturnStmt(ctx) {
            var stmt = new ReturnStatement(new LiteralMapExpr(this._evalExportedVars.map(function (resultVar) {
              return new LiteralMapEntry(resultVar, variable(resultVar), false);
            })));
            stmt.visitStatement(this, ctx);
          }
        }, {
          key: "getArgs",
          value: function getArgs() {
            var result = {};

            for (var i = 0; i < this._evalArgNames.length; i++) {
              result[this._evalArgNames[i]] = this._evalArgValues[i];
            }

            return result;
          }
        }, {
          key: "visitExternalExpr",
          value: function visitExternalExpr(ast, ctx) {
            this._emitReferenceToExternal(ast, this.reflector.resolveExternalReference(ast.value), ctx);

            return null;
          }
        }, {
          key: "visitWrappedNodeExpr",
          value: function visitWrappedNodeExpr(ast, ctx) {
            this._emitReferenceToExternal(ast, ast.node, ctx);

            return null;
          }
        }, {
          key: "visitDeclareVarStmt",
          value: function visitDeclareVarStmt(stmt, ctx) {
            if (stmt.hasModifier(StmtModifier.Exported)) {
              this._evalExportedVars.push(stmt.name);
            }

            return _get2(_getPrototypeOf2(JitEmitterVisitor.prototype), "visitDeclareVarStmt", this).call(this, stmt, ctx);
          }
        }, {
          key: "visitDeclareFunctionStmt",
          value: function visitDeclareFunctionStmt(stmt, ctx) {
            if (stmt.hasModifier(StmtModifier.Exported)) {
              this._evalExportedVars.push(stmt.name);
            }

            return _get2(_getPrototypeOf2(JitEmitterVisitor.prototype), "visitDeclareFunctionStmt", this).call(this, stmt, ctx);
          }
        }, {
          key: "visitDeclareClassStmt",
          value: function visitDeclareClassStmt(stmt, ctx) {
            if (stmt.hasModifier(StmtModifier.Exported)) {
              this._evalExportedVars.push(stmt.name);
            }

            return _get2(_getPrototypeOf2(JitEmitterVisitor.prototype), "visitDeclareClassStmt", this).call(this, stmt, ctx);
          }
        }, {
          key: "_emitReferenceToExternal",
          value: function _emitReferenceToExternal(ast, value, ctx) {
            var id = this._evalArgValues.indexOf(value);

            if (id === -1) {
              id = this._evalArgValues.length;

              this._evalArgValues.push(value);

              var name = identifierName({
                reference: value
              }) || 'val';

              this._evalArgNames.push("jit_".concat(name, "_").concat(id));
            }

            ctx.print(ast, this._evalArgNames[id]);
          }
        }]);

        return JitEmitterVisitor;
      }(AbstractJsEmitterVisitor);

      function isUseStrictStatement(statement) {
        return statement.isEquivalent(literal('use strict').toStmt());
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var $EOF = 0;
      var $BSPACE = 8;
      var $TAB = 9;
      var $LF = 10;
      var $VTAB = 11;
      var $FF = 12;
      var $CR = 13;
      var $SPACE = 32;
      var $BANG = 33;
      var $DQ = 34;
      var $HASH = 35;
      var $$ = 36;
      var $PERCENT = 37;
      var $AMPERSAND = 38;
      var $SQ = 39;
      var $LPAREN = 40;
      var $RPAREN = 41;
      var $STAR = 42;
      var $PLUS = 43;
      var $COMMA = 44;
      var $MINUS = 45;
      var $PERIOD = 46;
      var $SLASH = 47;
      var $COLON = 58;
      var $SEMICOLON = 59;
      var $LT = 60;
      var $EQ = 61;
      var $GT = 62;
      var $QUESTION = 63;
      var $0 = 48;
      var $7 = 55;
      var $9 = 57;
      var $A = 65;
      var $E = 69;
      var $F = 70;
      var $X = 88;
      var $Z = 90;
      var $LBRACKET = 91;
      var $BACKSLASH = 92;
      var $RBRACKET = 93;
      var $CARET = 94;
      var $_ = 95;
      var $a = 97;
      var $b = 98;
      var $e = 101;
      var $f = 102;
      var $n = 110;
      var $r = 114;
      var $t = 116;
      var $u = 117;
      var $v = 118;
      var $x = 120;
      var $z = 122;
      var $LBRACE = 123;
      var $BAR = 124;
      var $RBRACE = 125;
      var $NBSP = 160;
      var $PIPE = 124;
      var $TILDA = 126;
      var $AT = 64;
      var $BT = 96;

      function isWhitespace(code) {
        return code >= $TAB && code <= $SPACE || code == $NBSP;
      }

      function isDigit(code) {
        return $0 <= code && code <= $9;
      }

      function isAsciiLetter(code) {
        return code >= $a && code <= $z || code >= $A && code <= $Z;
      }

      function isAsciiHexDigit(code) {
        return code >= $a && code <= $f || code >= $A && code <= $F || isDigit(code);
      }

      function isNewLine(code) {
        return code === $LF || code === $CR;
      }

      function isOctalDigit(code) {
        return $0 <= code && code <= $7;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ParseLocation = /*#__PURE__*/function () {
        function ParseLocation(file, offset, line, col) {
          _classCallCheck2(this, ParseLocation);

          this.file = file;
          this.offset = offset;
          this.line = line;
          this.col = col;
        }

        _createClass2(ParseLocation, [{
          key: "toString",
          value: function toString() {
            return this.offset != null ? "".concat(this.file.url, "@").concat(this.line, ":").concat(this.col) : this.file.url;
          }
        }, {
          key: "moveBy",
          value: function moveBy(delta) {
            var source = this.file.content;
            var len = source.length;
            var offset = this.offset;
            var line = this.line;
            var col = this.col;

            while (offset > 0 && delta < 0) {
              offset--;
              delta++;
              var ch = source.charCodeAt(offset);

              if (ch == $LF) {
                line--;
                var priorLine = source.substr(0, offset - 1).lastIndexOf(String.fromCharCode($LF));
                col = priorLine > 0 ? offset - priorLine : offset;
              } else {
                col--;
              }
            }

            while (offset < len && delta > 0) {
              var _ch = source.charCodeAt(offset);

              offset++;
              delta--;

              if (_ch == $LF) {
                line++;
                col = 0;
              } else {
                col++;
              }
            }

            return new ParseLocation(this.file, offset, line, col);
          } // Return the source around the location
          // Up to `maxChars` or `maxLines` on each side of the location

        }, {
          key: "getContext",
          value: function getContext(maxChars, maxLines) {
            var content = this.file.content;
            var startOffset = this.offset;

            if (startOffset != null) {
              if (startOffset > content.length - 1) {
                startOffset = content.length - 1;
              }

              var endOffset = startOffset;
              var ctxChars = 0;
              var ctxLines = 0;

              while (ctxChars < maxChars && startOffset > 0) {
                startOffset--;
                ctxChars++;

                if (content[startOffset] == '\n') {
                  if (++ctxLines == maxLines) {
                    break;
                  }
                }
              }

              ctxChars = 0;
              ctxLines = 0;

              while (ctxChars < maxChars && endOffset < content.length - 1) {
                endOffset++;
                ctxChars++;

                if (content[endOffset] == '\n') {
                  if (++ctxLines == maxLines) {
                    break;
                  }
                }
              }

              return {
                before: content.substring(startOffset, this.offset),
                after: content.substring(this.offset, endOffset + 1)
              };
            }

            return null;
          }
        }]);

        return ParseLocation;
      }();

      var ParseSourceFile = function ParseSourceFile(content, url) {
        _classCallCheck2(this, ParseSourceFile);

        this.content = content;
        this.url = url;
      };

      var ParseSourceSpan = /*#__PURE__*/function () {
        /**
         * Create an object that holds information about spans of tokens/nodes captured during
         * lexing/parsing of text.
         *
         * @param start
         * The location of the start of the span (having skipped leading trivia).
         * Skipping leading trivia makes source-spans more "user friendly", since things like HTML
         * elements will appear to begin at the start of the opening tag, rather than at the start of any
         * leading trivia, which could include newlines.
         *
         * @param end
         * The location of the end of the span.
         *
         * @param fullStart
         * The start of the token without skipping the leading trivia.
         * This is used by tooling that splits tokens further, such as extracting Angular interpolations
         * from text tokens. Such tooling creates new source-spans relative to the original token's
         * source-span. If leading trivia characters have been skipped then the new source-spans may be
         * incorrectly offset.
         *
         * @param details
         * Additional information (such as identifier names) that should be associated with the span.
         */
        function ParseSourceSpan(start, end) {
          var fullStart = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : start;
          var details = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;

          _classCallCheck2(this, ParseSourceSpan);

          this.start = start;
          this.end = end;
          this.fullStart = fullStart;
          this.details = details;
        }

        _createClass2(ParseSourceSpan, [{
          key: "toString",
          value: function toString() {
            return this.start.file.content.substring(this.start.offset, this.end.offset);
          }
        }]);

        return ParseSourceSpan;
      }();

      var ParseErrorLevel;

      (function (ParseErrorLevel) {
        ParseErrorLevel[ParseErrorLevel["WARNING"] = 0] = "WARNING";
        ParseErrorLevel[ParseErrorLevel["ERROR"] = 1] = "ERROR";
      })(ParseErrorLevel || (ParseErrorLevel = {}));

      var ParseError = /*#__PURE__*/function () {
        function ParseError(span, msg) {
          var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ParseErrorLevel.ERROR;

          _classCallCheck2(this, ParseError);

          this.span = span;
          this.msg = msg;
          this.level = level;
        }

        _createClass2(ParseError, [{
          key: "contextualMessage",
          value: function contextualMessage() {
            var ctx = this.span.start.getContext(100, 3);
            return ctx ? "".concat(this.msg, " (\"").concat(ctx.before, "[").concat(ParseErrorLevel[this.level], " ->]").concat(ctx.after, "\")") : this.msg;
          }
        }, {
          key: "toString",
          value: function toString() {
            var details = this.span.details ? ", ".concat(this.span.details) : '';
            return "".concat(this.contextualMessage(), ": ").concat(this.span.start).concat(details);
          }
        }]);

        return ParseError;
      }();

      function typeSourceSpan(kind, type) {
        var moduleUrl = identifierModuleUrl(type);
        var sourceFileName = moduleUrl != null ? "in ".concat(kind, " ").concat(identifierName(type), " in ").concat(moduleUrl) : "in ".concat(kind, " ").concat(identifierName(type));
        var sourceFile = new ParseSourceFile('', sourceFileName);
        return new ParseSourceSpan(new ParseLocation(sourceFile, -1, -1, -1), new ParseLocation(sourceFile, -1, -1, -1));
      }
      /**
       * Generates Source Span object for a given R3 Type for JIT mode.
       *
       * @param kind Component or Directive.
       * @param typeName name of the Component or Directive.
       * @param sourceUrl reference to Component or Directive source.
       * @returns instance of ParseSourceSpan that represent a given Component or Directive.
       */


      function r3JitTypeSourceSpan(kind, typeName, sourceUrl) {
        var sourceFileName = "in ".concat(kind, " ").concat(typeName, " in ").concat(sourceUrl);
        var sourceFile = new ParseSourceFile('', sourceFileName);
        return new ParseSourceSpan(new ParseLocation(sourceFile, -1, -1, -1), new ParseLocation(sourceFile, -1, -1, -1));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Implementation of `CompileReflector` which resolves references to @angular/core
       * symbols at runtime, according to a consumer-provided mapping.
       *
       * Only supports `resolveExternalReference`, all other methods throw.
       */


      var R3JitReflector = /*#__PURE__*/function () {
        function R3JitReflector(context) {
          _classCallCheck2(this, R3JitReflector);

          this.context = context;
        }

        _createClass2(R3JitReflector, [{
          key: "resolveExternalReference",
          value: function resolveExternalReference(ref) {
            // This reflector only handles @angular/core imports.
            if (ref.moduleName !== '@angular/core') {
              throw new Error("Cannot resolve external reference to ".concat(ref.moduleName, ", only references to @angular/core are supported."));
            }

            if (!this.context.hasOwnProperty(ref.name)) {
              throw new Error("No value provided for @angular/core symbol '".concat(ref.name, "'."));
            }

            return this.context[ref.name];
          }
        }, {
          key: "parameters",
          value: function parameters(typeOrFunc) {
            throw new Error('Not implemented.');
          }
        }, {
          key: "annotations",
          value: function annotations(typeOrFunc) {
            throw new Error('Not implemented.');
          }
        }, {
          key: "shallowAnnotations",
          value: function shallowAnnotations(typeOrFunc) {
            throw new Error('Not implemented.');
          }
        }, {
          key: "tryAnnotations",
          value: function tryAnnotations(typeOrFunc) {
            throw new Error('Not implemented.');
          }
        }, {
          key: "propMetadata",
          value: function propMetadata(typeOrFunc) {
            throw new Error('Not implemented.');
          }
        }, {
          key: "hasLifecycleHook",
          value: function hasLifecycleHook(type, lcProperty) {
            throw new Error('Not implemented.');
          }
        }, {
          key: "guards",
          value: function guards(typeOrFunc) {
            throw new Error('Not implemented.');
          }
        }, {
          key: "componentModuleUrl",
          value: function componentModuleUrl(type, cmpMetadata) {
            throw new Error('Not implemented.');
          }
        }]);

        return R3JitReflector;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function mapEntry(key, value) {
        return {
          key: key,
          value: value,
          quoted: false
        };
      }

      function mapLiteral(obj) {
        var quoted = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
        return literalMap(Object.keys(obj).map(function (key) {
          return {
            key: key,
            quoted: quoted,
            value: obj[key]
          };
        }));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Construct an `R3NgModuleDef` for the given `R3NgModuleMetadata`.
       */


      function _compileNgModule(meta) {
        var internalType = meta.internalType,
            moduleType = meta.type,
            bootstrap = meta.bootstrap,
            declarations = meta.declarations,
            imports = meta.imports,
            exports = meta.exports,
            schemas = meta.schemas,
            containsForwardDecls = meta.containsForwardDecls,
            emitInline = meta.emitInline,
            id = meta.id;
        var additionalStatements = [];
        var definitionMap = {
          type: internalType
        }; // Only generate the keys in the metadata if the arrays have values.

        if (bootstrap.length) {
          definitionMap.bootstrap = refsToArray(bootstrap, containsForwardDecls);
        } // If requested to emit scope information inline, pass the declarations, imports and exports to
        // the `ɵɵdefineNgModule` call. The JIT compilation uses this.


        if (emitInline) {
          if (declarations.length) {
            definitionMap.declarations = refsToArray(declarations, containsForwardDecls);
          }

          if (imports.length) {
            definitionMap.imports = refsToArray(imports, containsForwardDecls);
          }

          if (exports.length) {
            definitionMap.exports = refsToArray(exports, containsForwardDecls);
          }
        } // If not emitting inline, the scope information is not passed into `ɵɵdefineNgModule` as it would
        // prevent tree-shaking of the declarations, imports and exports references.
        else {
            var setNgModuleScopeCall = generateSetNgModuleScopeCall(meta);

            if (setNgModuleScopeCall !== null) {
              additionalStatements.push(setNgModuleScopeCall);
            }
          }

        if (schemas && schemas.length) {
          definitionMap.schemas = literalArr(schemas.map(function (ref) {
            return ref.value;
          }));
        }

        if (id) {
          definitionMap.id = id;
        }

        var expression = importExpr(Identifiers$1.defineNgModule).callFn([mapToMapExpression(definitionMap)]);
        var type = new ExpressionType(importExpr(Identifiers$1.NgModuleDefWithMeta, [new ExpressionType(moduleType.type), tupleTypeOf(declarations), tupleTypeOf(imports), tupleTypeOf(exports)]));
        return {
          expression: expression,
          type: type,
          additionalStatements: additionalStatements
        };
      }
      /**
       * Generates a function call to `ɵɵsetNgModuleScope` with all necessary information so that the
       * transitive module scope can be computed during runtime in JIT mode. This call is marked pure
       * such that the references to declarations, imports and exports may be elided causing these
       * symbols to become tree-shakeable.
       */


      function generateSetNgModuleScopeCall(meta) {
        var moduleType = meta.adjacentType,
            declarations = meta.declarations,
            imports = meta.imports,
            exports = meta.exports,
            containsForwardDecls = meta.containsForwardDecls;
        var scopeMap = {};

        if (declarations.length) {
          scopeMap.declarations = refsToArray(declarations, containsForwardDecls);
        }

        if (imports.length) {
          scopeMap.imports = refsToArray(imports, containsForwardDecls);
        }

        if (exports.length) {
          scopeMap.exports = refsToArray(exports, containsForwardDecls);
        }

        if (Object.keys(scopeMap).length === 0) {
          return null;
        } // setNgModuleScope(...)


        var fnCall = new InvokeFunctionExpr(
        /* fn */
        importExpr(Identifiers$1.setNgModuleScope),
        /* args */
        [moduleType, mapToMapExpression(scopeMap)]); // (ngJitMode guard) && setNgModuleScope(...)

        var guardedCall = jitOnlyGuardedExpression(fnCall); // function() { (ngJitMode guard) && setNgModuleScope(...); }

        var iife = new FunctionExpr(
        /* params */
        [],
        /* statements */
        [guardedCall.toStmt()]); // (function() { (ngJitMode guard) && setNgModuleScope(...); })()

        var iifeCall = new InvokeFunctionExpr(
        /* fn */
        iife,
        /* args */
        []);
        return iifeCall.toStmt();
      }

      function _compileInjector(meta) {
        var result = compileFactoryFunction({
          name: meta.name,
          type: meta.type,
          internalType: meta.internalType,
          typeArgumentCount: 0,
          deps: meta.deps,
          injectFn: Identifiers$1.inject,
          target: R3FactoryTarget.NgModule
        });
        var definitionMap = {
          factory: result.factory
        };

        if (meta.providers !== null) {
          definitionMap.providers = meta.providers;
        }

        if (meta.imports.length > 0) {
          definitionMap.imports = literalArr(meta.imports);
        }

        var expression = importExpr(Identifiers$1.defineInjector).callFn([mapToMapExpression(definitionMap)]);
        var type = new ExpressionType(importExpr(Identifiers$1.InjectorDef, [new ExpressionType(meta.type.type)]));
        return {
          expression: expression,
          type: type,
          statements: result.statements
        };
      } // TODO(alxhub): integrate this with `compileNgModule`. Currently the two are separate operations.


      function compileNgModuleFromRender2(ctx, ngModule, injectableCompiler) {
        var className = identifierName(ngModule.type);
        var rawImports = ngModule.rawImports ? [ngModule.rawImports] : [];
        var rawExports = ngModule.rawExports ? [ngModule.rawExports] : [];
        var injectorDefArg = mapLiteral({
          'factory': injectableCompiler.factoryFor({
            type: ngModule.type,
            symbol: ngModule.type.reference
          }, ctx),
          'providers': convertMetaToOutput(ngModule.rawProviders, ctx),
          'imports': convertMetaToOutput([].concat(rawImports, rawExports), ctx)
        });
        var injectorDef = importExpr(Identifiers$1.defineInjector).callFn([injectorDefArg]);
        ctx.statements.push(new ClassStmt(
        /* name */
        className,
        /* parent */
        null,
        /* fields */
        [new ClassField(
        /* name */
        'ɵinj',
        /* type */
        INFERRED_TYPE,
        /* modifiers */
        [StmtModifier.Static],
        /* initializer */
        injectorDef)],
        /* getters */
        [],
        /* constructorMethod */
        new ClassMethod(null, [], []),
        /* methods */
        []));
      }

      function accessExportScope(module) {
        var selectorScope = new ReadPropExpr(module, 'ɵmod');
        return new ReadPropExpr(selectorScope, 'exported');
      }

      function tupleTypeOf(exp) {
        var types = exp.map(function (ref) {
          return typeofExpr(ref.type);
        });
        return exp.length > 0 ? expressionType(literalArr(types)) : NONE_TYPE;
      }

      function refsToArray(refs, shouldForwardDeclare) {
        var values = literalArr(refs.map(function (ref) {
          return ref.value;
        }));
        return shouldForwardDeclare ? fn([], [new ReturnStatement(values)]) : values;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function compilePipeFromMetadata(metadata) {
        var definitionMapValues = []; // e.g. `name: 'myPipe'`

        definitionMapValues.push({
          key: 'name',
          value: literal(metadata.pipeName),
          quoted: false
        }); // e.g. `type: MyPipe`

        definitionMapValues.push({
          key: 'type',
          value: metadata.type.value,
          quoted: false
        }); // e.g. `pure: true`

        definitionMapValues.push({
          key: 'pure',
          value: literal(metadata.pure),
          quoted: false
        });
        var expression = importExpr(Identifiers$1.definePipe).callFn([literalMap(definitionMapValues)]);
        var type = createPipeType(metadata);
        return {
          expression: expression,
          type: type
        };
      }

      function createPipeType(metadata) {
        return new ExpressionType(importExpr(Identifiers$1.PipeDefWithMeta, [typeWithParameters(metadata.type.type, metadata.typeArgumentCount), new ExpressionType(new LiteralExpr(metadata.pipeName))]));
      }
      /**
       * Write a pipe definition to the output context.
       */


      function compilePipeFromRender2(outputCtx, pipe, reflector) {
        var name = identifierName(pipe.type);

        if (!name) {
          return error("Cannot resolve the name of ".concat(pipe.type));
        }

        var type = outputCtx.importExpr(pipe.type.reference);
        var metadata = {
          name: name,
          type: wrapReference(type),
          internalType: type,
          pipeName: pipe.name,
          typeArgumentCount: 0,
          deps: dependenciesFromGlobalMetadata(pipe.type, outputCtx, reflector),
          pure: pipe.pure
        };
        var res = compilePipeFromMetadata(metadata);
        var factoryRes = compileFactoryFunction(Object.assign(Object.assign({}, metadata), {
          injectFn: Identifiers$1.directiveInject,
          target: R3FactoryTarget.Pipe
        }));
        var definitionField = outputCtx.constantPool.propertyNameOf(3
        /* Pipe */
        );
        var ngFactoryDefStatement = new ClassStmt(
        /* name */
        name,
        /* parent */
        null,
        /* fields */
        [new ClassField(
        /* name */
        'ɵfac',
        /* type */
        INFERRED_TYPE,
        /* modifiers */
        [StmtModifier.Static],
        /* initializer */
        factoryRes.factory)],
        /* getters */
        [],
        /* constructorMethod */
        new ClassMethod(null, [], []),
        /* methods */
        []);
        var pipeDefStatement = new ClassStmt(
        /* name */
        name,
        /* parent */
        null,
        /* fields */
        [new ClassField(
        /* name */
        definitionField,
        /* type */
        INFERRED_TYPE,
        /* modifiers */
        [StmtModifier.Static],
        /* initializer */
        res.expression)],
        /* getters */
        [],
        /* constructorMethod */
        new ClassMethod(null, [], []),
        /* methods */
        []);
        outputCtx.statements.push(ngFactoryDefStatement, pipeDefStatement);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ParserError = function ParserError(message, input, errLocation, ctxLocation) {
        _classCallCheck2(this, ParserError);

        this.input = input;
        this.errLocation = errLocation;
        this.ctxLocation = ctxLocation;
        this.message = "Parser Error: ".concat(message, " ").concat(errLocation, " [").concat(input, "] in ").concat(ctxLocation);
      };

      var ParseSpan = /*#__PURE__*/function () {
        function ParseSpan(start, end) {
          _classCallCheck2(this, ParseSpan);

          this.start = start;
          this.end = end;
        }

        _createClass2(ParseSpan, [{
          key: "toAbsolute",
          value: function toAbsolute(absoluteOffset) {
            return new AbsoluteSourceSpan(absoluteOffset + this.start, absoluteOffset + this.end);
          }
        }]);

        return ParseSpan;
      }();

      var AST = /*#__PURE__*/function () {
        function AST(span,
        /**
         * Absolute location of the expression AST in a source code file.
         */
        sourceSpan) {
          _classCallCheck2(this, AST);

          this.span = span;
          this.sourceSpan = sourceSpan;
        }

        _createClass2(AST, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            return null;
          }
        }, {
          key: "toString",
          value: function toString() {
            return 'AST';
          }
        }]);

        return AST;
      }();

      var ASTWithName = /*#__PURE__*/function (_AST) {
        _inherits2(ASTWithName, _AST);

        var _super111 = _createSuper(ASTWithName);

        function ASTWithName(span, sourceSpan, nameSpan) {
          var _this212;

          _classCallCheck2(this, ASTWithName);

          _this212 = _super111.call(this, span, sourceSpan);
          _this212.nameSpan = nameSpan;
          return _this212;
        }

        return ASTWithName;
      }(AST);
      /**
       * Represents a quoted expression of the form:
       *
       * quote = prefix `:` uninterpretedExpression
       * prefix = identifier
       * uninterpretedExpression = arbitrary string
       *
       * A quoted expression is meant to be pre-processed by an AST transformer that
       * converts it into another AST that no longer contains quoted expressions.
       * It is meant to allow third-party developers to extend Angular template
       * expression language. The `uninterpretedExpression` part of the quote is
       * therefore not interpreted by the Angular's own expression parser.
       */


      var Quote = /*#__PURE__*/function (_AST2) {
        _inherits2(Quote, _AST2);

        var _super112 = _createSuper(Quote);

        function Quote(span, sourceSpan, prefix, uninterpretedExpression, location) {
          var _this213;

          _classCallCheck2(this, Quote);

          _this213 = _super112.call(this, span, sourceSpan);
          _this213.prefix = prefix;
          _this213.uninterpretedExpression = uninterpretedExpression;
          _this213.location = location;
          return _this213;
        }

        _createClass2(Quote, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            return visitor.visitQuote(this, context);
          }
        }, {
          key: "toString",
          value: function toString() {
            return 'Quote';
          }
        }]);

        return Quote;
      }(AST);

      var EmptyExpr = /*#__PURE__*/function (_AST3) {
        _inherits2(EmptyExpr, _AST3);

        var _super113 = _createSuper(EmptyExpr);

        function EmptyExpr() {
          _classCallCheck2(this, EmptyExpr);

          return _super113.apply(this, arguments);
        }

        _createClass2(EmptyExpr, [{
          key: "visit",
          value: function visit(visitor) {// do nothing

            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
          }
        }]);

        return EmptyExpr;
      }(AST);

      var ImplicitReceiver = /*#__PURE__*/function (_AST4) {
        _inherits2(ImplicitReceiver, _AST4);

        var _super114 = _createSuper(ImplicitReceiver);

        function ImplicitReceiver() {
          _classCallCheck2(this, ImplicitReceiver);

          return _super114.apply(this, arguments);
        }

        _createClass2(ImplicitReceiver, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            return visitor.visitImplicitReceiver(this, context);
          }
        }]);

        return ImplicitReceiver;
      }(AST);
      /**
       * Receiver when something is accessed through `this` (e.g. `this.foo`). Note that this class
       * inherits from `ImplicitReceiver`, because accessing something through `this` is treated the
       * same as accessing it implicitly inside of an Angular template (e.g. `[attr.title]="this.title"`
       * is the same as `[attr.title]="title"`.). Inheriting allows for the `this` accesses to be treated
       * the same as implicit ones, except for a couple of exceptions like `$event` and `$any`.
       * TODO: we should find a way for this class not to extend from `ImplicitReceiver` in the future.
       */


      var ThisReceiver = /*#__PURE__*/function (_ImplicitReceiver) {
        _inherits2(ThisReceiver, _ImplicitReceiver);

        var _super115 = _createSuper(ThisReceiver);

        function ThisReceiver() {
          _classCallCheck2(this, ThisReceiver);

          return _super115.apply(this, arguments);
        }

        _createClass2(ThisReceiver, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;

            var _a;

            return (_a = visitor.visitThisReceiver) === null || _a === void 0 ? void 0 : _a.call(visitor, this, context);
          }
        }]);

        return ThisReceiver;
      }(ImplicitReceiver);
      /**
       * Multiple expressions separated by a semicolon.
       */


      var Chain = /*#__PURE__*/function (_AST5) {
        _inherits2(Chain, _AST5);

        var _super116 = _createSuper(Chain);

        function Chain(span, sourceSpan, expressions) {
          var _this214;

          _classCallCheck2(this, Chain);

          _this214 = _super116.call(this, span, sourceSpan);
          _this214.expressions = expressions;
          return _this214;
        }

        _createClass2(Chain, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            return visitor.visitChain(this, context);
          }
        }]);

        return Chain;
      }(AST);

      var Conditional = /*#__PURE__*/function (_AST6) {
        _inherits2(Conditional, _AST6);

        var _super117 = _createSuper(Conditional);

        function Conditional(span, sourceSpan, condition, trueExp, falseExp) {
          var _this215;

          _classCallCheck2(this, Conditional);

          _this215 = _super117.call(this, span, sourceSpan);
          _this215.condition = condition;
          _this215.trueExp = trueExp;
          _this215.falseExp = falseExp;
          return _this215;
        }

        _createClass2(Conditional, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            return visitor.visitConditional(this, context);
          }
        }]);

        return Conditional;
      }(AST);

      var PropertyRead = /*#__PURE__*/function (_ASTWithName) {
        _inherits2(PropertyRead, _ASTWithName);

        var _super118 = _createSuper(PropertyRead);

        function PropertyRead(span, sourceSpan, nameSpan, receiver, name) {
          var _this216;

          _classCallCheck2(this, PropertyRead);

          _this216 = _super118.call(this, span, sourceSpan, nameSpan);
          _this216.receiver = receiver;
          _this216.name = name;
          return _this216;
        }

        _createClass2(PropertyRead, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            return visitor.visitPropertyRead(this, context);
          }
        }]);

        return PropertyRead;
      }(ASTWithName);

      var PropertyWrite = /*#__PURE__*/function (_ASTWithName2) {
        _inherits2(PropertyWrite, _ASTWithName2);

        var _super119 = _createSuper(PropertyWrite);

        function PropertyWrite(span, sourceSpan, nameSpan, receiver, name, value) {
          var _this217;

          _classCallCheck2(this, PropertyWrite);

          _this217 = _super119.call(this, span, sourceSpan, nameSpan);
          _this217.receiver = receiver;
          _this217.name = name;
          _this217.value = value;
          return _this217;
        }

        _createClass2(PropertyWrite, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            return visitor.visitPropertyWrite(this, context);
          }
        }]);

        return PropertyWrite;
      }(ASTWithName);

      var SafePropertyRead = /*#__PURE__*/function (_ASTWithName3) {
        _inherits2(SafePropertyRead, _ASTWithName3);

        var _super120 = _createSuper(SafePropertyRead);

        function SafePropertyRead(span, sourceSpan, nameSpan, receiver, name) {
          var _this218;

          _classCallCheck2(this, SafePropertyRead);

          _this218 = _super120.call(this, span, sourceSpan, nameSpan);
          _this218.receiver = receiver;
          _this218.name = name;
          return _this218;
        }

        _createClass2(SafePropertyRead, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            return visitor.visitSafePropertyRead(this, context);
          }
        }]);

        return SafePropertyRead;
      }(ASTWithName);

      var KeyedRead = /*#__PURE__*/function (_AST7) {
        _inherits2(KeyedRead, _AST7);

        var _super121 = _createSuper(KeyedRead);

        function KeyedRead(span, sourceSpan, obj, key) {
          var _this219;

          _classCallCheck2(this, KeyedRead);

          _this219 = _super121.call(this, span, sourceSpan);
          _this219.obj = obj;
          _this219.key = key;
          return _this219;
        }

        _createClass2(KeyedRead, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            return visitor.visitKeyedRead(this, context);
          }
        }]);

        return KeyedRead;
      }(AST);

      var KeyedWrite = /*#__PURE__*/function (_AST8) {
        _inherits2(KeyedWrite, _AST8);

        var _super122 = _createSuper(KeyedWrite);

        function KeyedWrite(span, sourceSpan, obj, key, value) {
          var _this220;

          _classCallCheck2(this, KeyedWrite);

          _this220 = _super122.call(this, span, sourceSpan);
          _this220.obj = obj;
          _this220.key = key;
          _this220.value = value;
          return _this220;
        }

        _createClass2(KeyedWrite, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            return visitor.visitKeyedWrite(this, context);
          }
        }]);

        return KeyedWrite;
      }(AST);

      var BindingPipe = /*#__PURE__*/function (_ASTWithName4) {
        _inherits2(BindingPipe, _ASTWithName4);

        var _super123 = _createSuper(BindingPipe);

        function BindingPipe(span, sourceSpan, exp, name, args, nameSpan) {
          var _this221;

          _classCallCheck2(this, BindingPipe);

          _this221 = _super123.call(this, span, sourceSpan, nameSpan);
          _this221.exp = exp;
          _this221.name = name;
          _this221.args = args;
          return _this221;
        }

        _createClass2(BindingPipe, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            return visitor.visitPipe(this, context);
          }
        }]);

        return BindingPipe;
      }(ASTWithName);

      var LiteralPrimitive = /*#__PURE__*/function (_AST9) {
        _inherits2(LiteralPrimitive, _AST9);

        var _super124 = _createSuper(LiteralPrimitive);

        function LiteralPrimitive(span, sourceSpan, value) {
          var _this222;

          _classCallCheck2(this, LiteralPrimitive);

          _this222 = _super124.call(this, span, sourceSpan);
          _this222.value = value;
          return _this222;
        }

        _createClass2(LiteralPrimitive, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            return visitor.visitLiteralPrimitive(this, context);
          }
        }]);

        return LiteralPrimitive;
      }(AST);

      var LiteralArray = /*#__PURE__*/function (_AST10) {
        _inherits2(LiteralArray, _AST10);

        var _super125 = _createSuper(LiteralArray);

        function LiteralArray(span, sourceSpan, expressions) {
          var _this223;

          _classCallCheck2(this, LiteralArray);

          _this223 = _super125.call(this, span, sourceSpan);
          _this223.expressions = expressions;
          return _this223;
        }

        _createClass2(LiteralArray, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            return visitor.visitLiteralArray(this, context);
          }
        }]);

        return LiteralArray;
      }(AST);

      var LiteralMap = /*#__PURE__*/function (_AST11) {
        _inherits2(LiteralMap, _AST11);

        var _super126 = _createSuper(LiteralMap);

        function LiteralMap(span, sourceSpan, keys, values) {
          var _this224;

          _classCallCheck2(this, LiteralMap);

          _this224 = _super126.call(this, span, sourceSpan);
          _this224.keys = keys;
          _this224.values = values;
          return _this224;
        }

        _createClass2(LiteralMap, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            return visitor.visitLiteralMap(this, context);
          }
        }]);

        return LiteralMap;
      }(AST);

      var Interpolation = /*#__PURE__*/function (_AST12) {
        _inherits2(Interpolation, _AST12);

        var _super127 = _createSuper(Interpolation);

        function Interpolation(span, sourceSpan, strings, expressions) {
          var _this225;

          _classCallCheck2(this, Interpolation);

          _this225 = _super127.call(this, span, sourceSpan);
          _this225.strings = strings;
          _this225.expressions = expressions;
          return _this225;
        }

        _createClass2(Interpolation, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            return visitor.visitInterpolation(this, context);
          }
        }]);

        return Interpolation;
      }(AST);

      var Binary = /*#__PURE__*/function (_AST13) {
        _inherits2(Binary, _AST13);

        var _super128 = _createSuper(Binary);

        function Binary(span, sourceSpan, operation, left, right) {
          var _this226;

          _classCallCheck2(this, Binary);

          _this226 = _super128.call(this, span, sourceSpan);
          _this226.operation = operation;
          _this226.left = left;
          _this226.right = right;
          return _this226;
        }

        _createClass2(Binary, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            return visitor.visitBinary(this, context);
          }
        }]);

        return Binary;
      }(AST);
      /**
       * For backwards compatibility reasons, `Unary` inherits from `Binary` and mimics the binary AST
       * node that was originally used. This inheritance relation can be deleted in some future major,
       * after consumers have been given a chance to fully support Unary.
       */


      var Unary = /*#__PURE__*/function (_Binary) {
        _inherits2(Unary, _Binary);

        var _super129 = _createSuper(Unary);

        /**
         * During the deprecation period this constructor is private, to avoid consumers from creating
         * a `Unary` with the fallback properties for `Binary`.
         */
        function Unary(span, sourceSpan, operator, expr, binaryOp, binaryLeft, binaryRight) {
          var _this227;

          _classCallCheck2(this, Unary);

          _this227 = _super129.call(this, span, sourceSpan, binaryOp, binaryLeft, binaryRight);
          _this227.operator = operator;
          _this227.expr = expr;
          return _this227;
        }
        /**
         * Creates a unary minus expression "-x", represented as `Binary` using "0 - x".
         */


        _createClass2(Unary, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;

            if (visitor.visitUnary !== undefined) {
              return visitor.visitUnary(this, context);
            }

            return visitor.visitBinary(this, context);
          }
        }], [{
          key: "createMinus",
          value: function createMinus(span, sourceSpan, expr) {
            return new Unary(span, sourceSpan, '-', expr, '-', new LiteralPrimitive(span, sourceSpan, 0), expr);
          }
          /**
           * Creates a unary plus expression "+x", represented as `Binary` using "x - 0".
           */

        }, {
          key: "createPlus",
          value: function createPlus(span, sourceSpan, expr) {
            return new Unary(span, sourceSpan, '+', expr, '-', expr, new LiteralPrimitive(span, sourceSpan, 0));
          }
        }]);

        return Unary;
      }(Binary);

      var PrefixNot = /*#__PURE__*/function (_AST14) {
        _inherits2(PrefixNot, _AST14);

        var _super130 = _createSuper(PrefixNot);

        function PrefixNot(span, sourceSpan, expression) {
          var _this228;

          _classCallCheck2(this, PrefixNot);

          _this228 = _super130.call(this, span, sourceSpan);
          _this228.expression = expression;
          return _this228;
        }

        _createClass2(PrefixNot, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            return visitor.visitPrefixNot(this, context);
          }
        }]);

        return PrefixNot;
      }(AST);

      var NonNullAssert = /*#__PURE__*/function (_AST15) {
        _inherits2(NonNullAssert, _AST15);

        var _super131 = _createSuper(NonNullAssert);

        function NonNullAssert(span, sourceSpan, expression) {
          var _this229;

          _classCallCheck2(this, NonNullAssert);

          _this229 = _super131.call(this, span, sourceSpan);
          _this229.expression = expression;
          return _this229;
        }

        _createClass2(NonNullAssert, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            return visitor.visitNonNullAssert(this, context);
          }
        }]);

        return NonNullAssert;
      }(AST);

      var MethodCall = /*#__PURE__*/function (_ASTWithName5) {
        _inherits2(MethodCall, _ASTWithName5);

        var _super132 = _createSuper(MethodCall);

        function MethodCall(span, sourceSpan, nameSpan, receiver, name, args) {
          var _this230;

          _classCallCheck2(this, MethodCall);

          _this230 = _super132.call(this, span, sourceSpan, nameSpan);
          _this230.receiver = receiver;
          _this230.name = name;
          _this230.args = args;
          return _this230;
        }

        _createClass2(MethodCall, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            return visitor.visitMethodCall(this, context);
          }
        }]);

        return MethodCall;
      }(ASTWithName);

      var SafeMethodCall = /*#__PURE__*/function (_ASTWithName6) {
        _inherits2(SafeMethodCall, _ASTWithName6);

        var _super133 = _createSuper(SafeMethodCall);

        function SafeMethodCall(span, sourceSpan, nameSpan, receiver, name, args) {
          var _this231;

          _classCallCheck2(this, SafeMethodCall);

          _this231 = _super133.call(this, span, sourceSpan, nameSpan);
          _this231.receiver = receiver;
          _this231.name = name;
          _this231.args = args;
          return _this231;
        }

        _createClass2(SafeMethodCall, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            return visitor.visitSafeMethodCall(this, context);
          }
        }]);

        return SafeMethodCall;
      }(ASTWithName);

      var FunctionCall = /*#__PURE__*/function (_AST16) {
        _inherits2(FunctionCall, _AST16);

        var _super134 = _createSuper(FunctionCall);

        function FunctionCall(span, sourceSpan, target, args) {
          var _this232;

          _classCallCheck2(this, FunctionCall);

          _this232 = _super134.call(this, span, sourceSpan);
          _this232.target = target;
          _this232.args = args;
          return _this232;
        }

        _createClass2(FunctionCall, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            return visitor.visitFunctionCall(this, context);
          }
        }]);

        return FunctionCall;
      }(AST);
      /**
       * Records the absolute position of a text span in a source file, where `start` and `end` are the
       * starting and ending byte offsets, respectively, of the text span in a source file.
       */


      var AbsoluteSourceSpan = function AbsoluteSourceSpan(start, end) {
        _classCallCheck2(this, AbsoluteSourceSpan);

        this.start = start;
        this.end = end;
      };

      var ASTWithSource = /*#__PURE__*/function (_AST17) {
        _inherits2(ASTWithSource, _AST17);

        var _super135 = _createSuper(ASTWithSource);

        function ASTWithSource(ast, source, location, absoluteOffset, errors) {
          var _this233;

          _classCallCheck2(this, ASTWithSource);

          _this233 = _super135.call(this, new ParseSpan(0, source === null ? 0 : source.length), new AbsoluteSourceSpan(absoluteOffset, source === null ? absoluteOffset : absoluteOffset + source.length));
          _this233.ast = ast;
          _this233.source = source;
          _this233.location = location;
          _this233.errors = errors;
          return _this233;
        }

        _createClass2(ASTWithSource, [{
          key: "visit",
          value: function visit(visitor) {
            var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;

            if (visitor.visitASTWithSource) {
              return visitor.visitASTWithSource(this, context);
            }

            return this.ast.visit(visitor, context);
          }
        }, {
          key: "toString",
          value: function toString() {
            return "".concat(this.source, " in ").concat(this.location);
          }
        }]);

        return ASTWithSource;
      }(AST);

      var VariableBinding =
      /**
       * @param sourceSpan entire span of the binding.
       * @param key name of the LHS along with its span.
       * @param value optional value for the RHS along with its span.
       */
      function VariableBinding(sourceSpan, key, value) {
        _classCallCheck2(this, VariableBinding);

        this.sourceSpan = sourceSpan;
        this.key = key;
        this.value = value;
      };

      var ExpressionBinding =
      /**
       * @param sourceSpan entire span of the binding.
       * @param key binding name, like ngForOf, ngForTrackBy, ngIf, along with its
       * span. Note that the length of the span may not be the same as
       * `key.source.length`. For example,
       * 1. key.source = ngFor, key.span is for "ngFor"
       * 2. key.source = ngForOf, key.span is for "of"
       * 3. key.source = ngForTrackBy, key.span is for "trackBy"
       * @param value optional expression for the RHS.
       */
      function ExpressionBinding(sourceSpan, key, value) {
        _classCallCheck2(this, ExpressionBinding);

        this.sourceSpan = sourceSpan;
        this.key = key;
        this.value = value;
      };

      var RecursiveAstVisitor$1 = /*#__PURE__*/function () {
        function RecursiveAstVisitor$1() {
          _classCallCheck2(this, RecursiveAstVisitor$1);
        }

        _createClass2(RecursiveAstVisitor$1, [{
          key: "visit",
          value: function visit(ast, context) {
            // The default implementation just visits every node.
            // Classes that extend RecursiveAstVisitor should override this function
            // to selectively visit the specified node.
            ast.visit(this, context);
          }
        }, {
          key: "visitUnary",
          value: function visitUnary(ast, context) {
            this.visit(ast.expr, context);
          }
        }, {
          key: "visitBinary",
          value: function visitBinary(ast, context) {
            this.visit(ast.left, context);
            this.visit(ast.right, context);
          }
        }, {
          key: "visitChain",
          value: function visitChain(ast, context) {
            this.visitAll(ast.expressions, context);
          }
        }, {
          key: "visitConditional",
          value: function visitConditional(ast, context) {
            this.visit(ast.condition, context);
            this.visit(ast.trueExp, context);
            this.visit(ast.falseExp, context);
          }
        }, {
          key: "visitPipe",
          value: function visitPipe(ast, context) {
            this.visit(ast.exp, context);
            this.visitAll(ast.args, context);
          }
        }, {
          key: "visitFunctionCall",
          value: function visitFunctionCall(ast, context) {
            if (ast.target) {
              this.visit(ast.target, context);
            }

            this.visitAll(ast.args, context);
          }
        }, {
          key: "visitImplicitReceiver",
          value: function visitImplicitReceiver(ast, context) {}
        }, {
          key: "visitThisReceiver",
          value: function visitThisReceiver(ast, context) {}
        }, {
          key: "visitInterpolation",
          value: function visitInterpolation(ast, context) {
            this.visitAll(ast.expressions, context);
          }
        }, {
          key: "visitKeyedRead",
          value: function visitKeyedRead(ast, context) {
            this.visit(ast.obj, context);
            this.visit(ast.key, context);
          }
        }, {
          key: "visitKeyedWrite",
          value: function visitKeyedWrite(ast, context) {
            this.visit(ast.obj, context);
            this.visit(ast.key, context);
            this.visit(ast.value, context);
          }
        }, {
          key: "visitLiteralArray",
          value: function visitLiteralArray(ast, context) {
            this.visitAll(ast.expressions, context);
          }
        }, {
          key: "visitLiteralMap",
          value: function visitLiteralMap(ast, context) {
            this.visitAll(ast.values, context);
          }
        }, {
          key: "visitLiteralPrimitive",
          value: function visitLiteralPrimitive(ast, context) {}
        }, {
          key: "visitMethodCall",
          value: function visitMethodCall(ast, context) {
            this.visit(ast.receiver, context);
            this.visitAll(ast.args, context);
          }
        }, {
          key: "visitPrefixNot",
          value: function visitPrefixNot(ast, context) {
            this.visit(ast.expression, context);
          }
        }, {
          key: "visitNonNullAssert",
          value: function visitNonNullAssert(ast, context) {
            this.visit(ast.expression, context);
          }
        }, {
          key: "visitPropertyRead",
          value: function visitPropertyRead(ast, context) {
            this.visit(ast.receiver, context);
          }
        }, {
          key: "visitPropertyWrite",
          value: function visitPropertyWrite(ast, context) {
            this.visit(ast.receiver, context);
            this.visit(ast.value, context);
          }
        }, {
          key: "visitSafePropertyRead",
          value: function visitSafePropertyRead(ast, context) {
            this.visit(ast.receiver, context);
          }
        }, {
          key: "visitSafeMethodCall",
          value: function visitSafeMethodCall(ast, context) {
            this.visit(ast.receiver, context);
            this.visitAll(ast.args, context);
          }
        }, {
          key: "visitQuote",
          value: function visitQuote(ast, context) {} // This is not part of the AstVisitor interface, just a helper method

        }, {
          key: "visitAll",
          value: function visitAll(asts, context) {
            var _iterator15 = _createForOfIteratorHelper(asts),
                _step15;

            try {
              for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
                var ast = _step15.value;
                this.visit(ast, context);
              }
            } catch (err) {
              _iterator15.e(err);
            } finally {
              _iterator15.f();
            }
          }
        }]);

        return RecursiveAstVisitor$1;
      }();

      var AstTransformer$1 = /*#__PURE__*/function () {
        function AstTransformer$1() {
          _classCallCheck2(this, AstTransformer$1);
        }

        _createClass2(AstTransformer$1, [{
          key: "visitImplicitReceiver",
          value: function visitImplicitReceiver(ast, context) {
            return ast;
          }
        }, {
          key: "visitThisReceiver",
          value: function visitThisReceiver(ast, context) {
            return ast;
          }
        }, {
          key: "visitInterpolation",
          value: function visitInterpolation(ast, context) {
            return new Interpolation(ast.span, ast.sourceSpan, ast.strings, this.visitAll(ast.expressions));
          }
        }, {
          key: "visitLiteralPrimitive",
          value: function visitLiteralPrimitive(ast, context) {
            return new LiteralPrimitive(ast.span, ast.sourceSpan, ast.value);
          }
        }, {
          key: "visitPropertyRead",
          value: function visitPropertyRead(ast, context) {
            return new PropertyRead(ast.span, ast.sourceSpan, ast.nameSpan, ast.receiver.visit(this), ast.name);
          }
        }, {
          key: "visitPropertyWrite",
          value: function visitPropertyWrite(ast, context) {
            return new PropertyWrite(ast.span, ast.sourceSpan, ast.nameSpan, ast.receiver.visit(this), ast.name, ast.value.visit(this));
          }
        }, {
          key: "visitSafePropertyRead",
          value: function visitSafePropertyRead(ast, context) {
            return new SafePropertyRead(ast.span, ast.sourceSpan, ast.nameSpan, ast.receiver.visit(this), ast.name);
          }
        }, {
          key: "visitMethodCall",
          value: function visitMethodCall(ast, context) {
            return new MethodCall(ast.span, ast.sourceSpan, ast.nameSpan, ast.receiver.visit(this), ast.name, this.visitAll(ast.args));
          }
        }, {
          key: "visitSafeMethodCall",
          value: function visitSafeMethodCall(ast, context) {
            return new SafeMethodCall(ast.span, ast.sourceSpan, ast.nameSpan, ast.receiver.visit(this), ast.name, this.visitAll(ast.args));
          }
        }, {
          key: "visitFunctionCall",
          value: function visitFunctionCall(ast, context) {
            return new FunctionCall(ast.span, ast.sourceSpan, ast.target.visit(this), this.visitAll(ast.args));
          }
        }, {
          key: "visitLiteralArray",
          value: function visitLiteralArray(ast, context) {
            return new LiteralArray(ast.span, ast.sourceSpan, this.visitAll(ast.expressions));
          }
        }, {
          key: "visitLiteralMap",
          value: function visitLiteralMap(ast, context) {
            return new LiteralMap(ast.span, ast.sourceSpan, ast.keys, this.visitAll(ast.values));
          }
        }, {
          key: "visitUnary",
          value: function visitUnary(ast, context) {
            switch (ast.operator) {
              case '+':
                return Unary.createPlus(ast.span, ast.sourceSpan, ast.expr.visit(this));

              case '-':
                return Unary.createMinus(ast.span, ast.sourceSpan, ast.expr.visit(this));

              default:
                throw new Error("Unknown unary operator ".concat(ast.operator));
            }
          }
        }, {
          key: "visitBinary",
          value: function visitBinary(ast, context) {
            return new Binary(ast.span, ast.sourceSpan, ast.operation, ast.left.visit(this), ast.right.visit(this));
          }
        }, {
          key: "visitPrefixNot",
          value: function visitPrefixNot(ast, context) {
            return new PrefixNot(ast.span, ast.sourceSpan, ast.expression.visit(this));
          }
        }, {
          key: "visitNonNullAssert",
          value: function visitNonNullAssert(ast, context) {
            return new NonNullAssert(ast.span, ast.sourceSpan, ast.expression.visit(this));
          }
        }, {
          key: "visitConditional",
          value: function visitConditional(ast, context) {
            return new Conditional(ast.span, ast.sourceSpan, ast.condition.visit(this), ast.trueExp.visit(this), ast.falseExp.visit(this));
          }
        }, {
          key: "visitPipe",
          value: function visitPipe(ast, context) {
            return new BindingPipe(ast.span, ast.sourceSpan, ast.exp.visit(this), ast.name, this.visitAll(ast.args), ast.nameSpan);
          }
        }, {
          key: "visitKeyedRead",
          value: function visitKeyedRead(ast, context) {
            return new KeyedRead(ast.span, ast.sourceSpan, ast.obj.visit(this), ast.key.visit(this));
          }
        }, {
          key: "visitKeyedWrite",
          value: function visitKeyedWrite(ast, context) {
            return new KeyedWrite(ast.span, ast.sourceSpan, ast.obj.visit(this), ast.key.visit(this), ast.value.visit(this));
          }
        }, {
          key: "visitAll",
          value: function visitAll(asts) {
            var res = [];

            for (var i = 0; i < asts.length; ++i) {
              res[i] = asts[i].visit(this);
            }

            return res;
          }
        }, {
          key: "visitChain",
          value: function visitChain(ast, context) {
            return new Chain(ast.span, ast.sourceSpan, this.visitAll(ast.expressions));
          }
        }, {
          key: "visitQuote",
          value: function visitQuote(ast, context) {
            return new Quote(ast.span, ast.sourceSpan, ast.prefix, ast.uninterpretedExpression, ast.location);
          }
        }]);

        return AstTransformer$1;
      }(); // A transformer that only creates new nodes if the transformer makes a change or
      // a change is made a child node.


      var AstMemoryEfficientTransformer = /*#__PURE__*/function () {
        function AstMemoryEfficientTransformer() {
          _classCallCheck2(this, AstMemoryEfficientTransformer);
        }

        _createClass2(AstMemoryEfficientTransformer, [{
          key: "visitImplicitReceiver",
          value: function visitImplicitReceiver(ast, context) {
            return ast;
          }
        }, {
          key: "visitThisReceiver",
          value: function visitThisReceiver(ast, context) {
            return ast;
          }
        }, {
          key: "visitInterpolation",
          value: function visitInterpolation(ast, context) {
            var expressions = this.visitAll(ast.expressions);
            if (expressions !== ast.expressions) return new Interpolation(ast.span, ast.sourceSpan, ast.strings, expressions);
            return ast;
          }
        }, {
          key: "visitLiteralPrimitive",
          value: function visitLiteralPrimitive(ast, context) {
            return ast;
          }
        }, {
          key: "visitPropertyRead",
          value: function visitPropertyRead(ast, context) {
            var receiver = ast.receiver.visit(this);

            if (receiver !== ast.receiver) {
              return new PropertyRead(ast.span, ast.sourceSpan, ast.nameSpan, receiver, ast.name);
            }

            return ast;
          }
        }, {
          key: "visitPropertyWrite",
          value: function visitPropertyWrite(ast, context) {
            var receiver = ast.receiver.visit(this);
            var value = ast.value.visit(this);

            if (receiver !== ast.receiver || value !== ast.value) {
              return new PropertyWrite(ast.span, ast.sourceSpan, ast.nameSpan, receiver, ast.name, value);
            }

            return ast;
          }
        }, {
          key: "visitSafePropertyRead",
          value: function visitSafePropertyRead(ast, context) {
            var receiver = ast.receiver.visit(this);

            if (receiver !== ast.receiver) {
              return new SafePropertyRead(ast.span, ast.sourceSpan, ast.nameSpan, receiver, ast.name);
            }

            return ast;
          }
        }, {
          key: "visitMethodCall",
          value: function visitMethodCall(ast, context) {
            var receiver = ast.receiver.visit(this);
            var args = this.visitAll(ast.args);

            if (receiver !== ast.receiver || args !== ast.args) {
              return new MethodCall(ast.span, ast.sourceSpan, ast.nameSpan, receiver, ast.name, args);
            }

            return ast;
          }
        }, {
          key: "visitSafeMethodCall",
          value: function visitSafeMethodCall(ast, context) {
            var receiver = ast.receiver.visit(this);
            var args = this.visitAll(ast.args);

            if (receiver !== ast.receiver || args !== ast.args) {
              return new SafeMethodCall(ast.span, ast.sourceSpan, ast.nameSpan, receiver, ast.name, args);
            }

            return ast;
          }
        }, {
          key: "visitFunctionCall",
          value: function visitFunctionCall(ast, context) {
            var target = ast.target && ast.target.visit(this);
            var args = this.visitAll(ast.args);

            if (target !== ast.target || args !== ast.args) {
              return new FunctionCall(ast.span, ast.sourceSpan, target, args);
            }

            return ast;
          }
        }, {
          key: "visitLiteralArray",
          value: function visitLiteralArray(ast, context) {
            var expressions = this.visitAll(ast.expressions);

            if (expressions !== ast.expressions) {
              return new LiteralArray(ast.span, ast.sourceSpan, expressions);
            }

            return ast;
          }
        }, {
          key: "visitLiteralMap",
          value: function visitLiteralMap(ast, context) {
            var values = this.visitAll(ast.values);

            if (values !== ast.values) {
              return new LiteralMap(ast.span, ast.sourceSpan, ast.keys, values);
            }

            return ast;
          }
        }, {
          key: "visitUnary",
          value: function visitUnary(ast, context) {
            var expr = ast.expr.visit(this);

            if (expr !== ast.expr) {
              switch (ast.operator) {
                case '+':
                  return Unary.createPlus(ast.span, ast.sourceSpan, expr);

                case '-':
                  return Unary.createMinus(ast.span, ast.sourceSpan, expr);

                default:
                  throw new Error("Unknown unary operator ".concat(ast.operator));
              }
            }

            return ast;
          }
        }, {
          key: "visitBinary",
          value: function visitBinary(ast, context) {
            var left = ast.left.visit(this);
            var right = ast.right.visit(this);

            if (left !== ast.left || right !== ast.right) {
              return new Binary(ast.span, ast.sourceSpan, ast.operation, left, right);
            }

            return ast;
          }
        }, {
          key: "visitPrefixNot",
          value: function visitPrefixNot(ast, context) {
            var expression = ast.expression.visit(this);

            if (expression !== ast.expression) {
              return new PrefixNot(ast.span, ast.sourceSpan, expression);
            }

            return ast;
          }
        }, {
          key: "visitNonNullAssert",
          value: function visitNonNullAssert(ast, context) {
            var expression = ast.expression.visit(this);

            if (expression !== ast.expression) {
              return new NonNullAssert(ast.span, ast.sourceSpan, expression);
            }

            return ast;
          }
        }, {
          key: "visitConditional",
          value: function visitConditional(ast, context) {
            var condition = ast.condition.visit(this);
            var trueExp = ast.trueExp.visit(this);
            var falseExp = ast.falseExp.visit(this);

            if (condition !== ast.condition || trueExp !== ast.trueExp || falseExp !== ast.falseExp) {
              return new Conditional(ast.span, ast.sourceSpan, condition, trueExp, falseExp);
            }

            return ast;
          }
        }, {
          key: "visitPipe",
          value: function visitPipe(ast, context) {
            var exp = ast.exp.visit(this);
            var args = this.visitAll(ast.args);

            if (exp !== ast.exp || args !== ast.args) {
              return new BindingPipe(ast.span, ast.sourceSpan, exp, ast.name, args, ast.nameSpan);
            }

            return ast;
          }
        }, {
          key: "visitKeyedRead",
          value: function visitKeyedRead(ast, context) {
            var obj = ast.obj.visit(this);
            var key = ast.key.visit(this);

            if (obj !== ast.obj || key !== ast.key) {
              return new KeyedRead(ast.span, ast.sourceSpan, obj, key);
            }

            return ast;
          }
        }, {
          key: "visitKeyedWrite",
          value: function visitKeyedWrite(ast, context) {
            var obj = ast.obj.visit(this);
            var key = ast.key.visit(this);
            var value = ast.value.visit(this);

            if (obj !== ast.obj || key !== ast.key || value !== ast.value) {
              return new KeyedWrite(ast.span, ast.sourceSpan, obj, key, value);
            }

            return ast;
          }
        }, {
          key: "visitAll",
          value: function visitAll(asts) {
            var res = [];
            var modified = false;

            for (var i = 0; i < asts.length; ++i) {
              var original = asts[i];
              var value = original.visit(this);
              res[i] = value;
              modified = modified || value !== original;
            }

            return modified ? res : asts;
          }
        }, {
          key: "visitChain",
          value: function visitChain(ast, context) {
            var expressions = this.visitAll(ast.expressions);

            if (expressions !== ast.expressions) {
              return new Chain(ast.span, ast.sourceSpan, expressions);
            }

            return ast;
          }
        }, {
          key: "visitQuote",
          value: function visitQuote(ast, context) {
            return ast;
          }
        }]);

        return AstMemoryEfficientTransformer;
      }(); // Bindings


      var ParsedProperty = function ParsedProperty(name, expression, type, // TODO(FW-2095): `keySpan` should really be required but allows `undefined` so VE does
      // not need to be updated. Make `keySpan` required when VE is removed.
      sourceSpan, keySpan, valueSpan) {
        _classCallCheck2(this, ParsedProperty);

        this.name = name;
        this.expression = expression;
        this.type = type;
        this.sourceSpan = sourceSpan;
        this.keySpan = keySpan;
        this.valueSpan = valueSpan;
        this.isLiteral = this.type === ParsedPropertyType.LITERAL_ATTR;
        this.isAnimation = this.type === ParsedPropertyType.ANIMATION;
      };

      var ParsedPropertyType;

      (function (ParsedPropertyType) {
        ParsedPropertyType[ParsedPropertyType["DEFAULT"] = 0] = "DEFAULT";
        ParsedPropertyType[ParsedPropertyType["LITERAL_ATTR"] = 1] = "LITERAL_ATTR";
        ParsedPropertyType[ParsedPropertyType["ANIMATION"] = 2] = "ANIMATION";
      })(ParsedPropertyType || (ParsedPropertyType = {}));

      var ParsedEvent = // Regular events have a target
      // Animation events have a phase
      function ParsedEvent(name, targetOrPhase, type, handler, sourceSpan, // TODO(FW-2095): keySpan should be required but was made optional to avoid changing VE
      handlerSpan, keySpan) {
        _classCallCheck2(this, ParsedEvent);

        this.name = name;
        this.targetOrPhase = targetOrPhase;
        this.type = type;
        this.handler = handler;
        this.sourceSpan = sourceSpan;
        this.handlerSpan = handlerSpan;
        this.keySpan = keySpan;
      };
      /**
       * ParsedVariable represents a variable declaration in a microsyntax expression.
       */


      var ParsedVariable = function ParsedVariable(name, value, sourceSpan, keySpan, valueSpan) {
        _classCallCheck2(this, ParsedVariable);

        this.name = name;
        this.value = value;
        this.sourceSpan = sourceSpan;
        this.keySpan = keySpan;
        this.valueSpan = valueSpan;
      };

      var BoundElementProperty = function BoundElementProperty(name, type, securityContext, value, unit, sourceSpan, keySpan, valueSpan) {
        _classCallCheck2(this, BoundElementProperty);

        this.name = name;
        this.type = type;
        this.securityContext = securityContext;
        this.value = value;
        this.unit = unit;
        this.sourceSpan = sourceSpan;
        this.keySpan = keySpan;
        this.valueSpan = valueSpan;
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var EventHandlerVars = function EventHandlerVars() {
        _classCallCheck2(this, EventHandlerVars);
      };

      EventHandlerVars.event = variable('$event');

      var ConvertActionBindingResult = function ConvertActionBindingResult(
      /**
       * Render2 compatible statements,
       */
      stmts,
      /**
       * Variable name used with render2 compatible statements.
       */
      allowDefault) {
        _classCallCheck2(this, ConvertActionBindingResult);

        this.stmts = stmts;
        this.allowDefault = allowDefault;
        /**
         * This is bit of a hack. It converts statements which render2 expects to statements which are
         * expected by render3.
         *
         * Example: `<div click="doSomething($event)">` will generate:
         *
         * Render3:
         * ```
         * const pd_b:any = ((<any>ctx.doSomething($event)) !== false);
         * return pd_b;
         * ```
         *
         * but render2 expects:
         * ```
         * return ctx.doSomething($event);
         * ```
         */
        // TODO(misko): remove this hack once we no longer support ViewEngine.

        this.render3Stmts = stmts.map(function (statement) {
          if (statement instanceof DeclareVarStmt && statement.name == allowDefault.name && statement.value instanceof BinaryOperatorExpr) {
            var lhs = statement.value.lhs;
            return new ReturnStatement(lhs.value);
          }

          return statement;
        });
      };
      /**
       * Converts the given expression AST into an executable output AST, assuming the expression is
       * used in an action binding (e.g. an event handler).
       */


      function convertActionBinding(localResolver, implicitReceiver, action, bindingId, interpolationFunction, baseSourceSpan, implicitReceiverAccesses, globals) {
        if (!localResolver) {
          localResolver = new DefaultLocalResolver(globals);
        }

        var actionWithoutBuiltins = convertPropertyBindingBuiltins({
          createLiteralArrayConverter: function createLiteralArrayConverter(argCount) {
            // Note: no caching for literal arrays in actions.
            return function (args) {
              return literalArr(args);
            };
          },
          createLiteralMapConverter: function createLiteralMapConverter(keys) {
            // Note: no caching for literal maps in actions.
            return function (values) {
              var entries = keys.map(function (k, i) {
                return {
                  key: k.key,
                  value: values[i],
                  quoted: k.quoted
                };
              });
              return literalMap(entries);
            };
          },
          createPipeConverter: function createPipeConverter(name) {
            throw new Error("Illegal State: Actions are not allowed to contain pipes. Pipe: ".concat(name));
          }
        }, action);
        var visitor = new _AstToIrVisitor(localResolver, implicitReceiver, bindingId, interpolationFunction, baseSourceSpan, implicitReceiverAccesses);
        var actionStmts = [];
        flattenStatements(actionWithoutBuiltins.visit(visitor, _Mode.Statement), actionStmts);
        prependTemporaryDecls(visitor.temporaryCount, bindingId, actionStmts);

        if (visitor.usesImplicitReceiver) {
          localResolver.notifyImplicitReceiverUse();
        }

        var lastIndex = actionStmts.length - 1;
        var preventDefaultVar = null;

        if (lastIndex >= 0) {
          var lastStatement = actionStmts[lastIndex];
          var returnExpr = convertStmtIntoExpression(lastStatement);

          if (returnExpr) {
            // Note: We need to cast the result of the method call to dynamic,
            // as it might be a void method!
            preventDefaultVar = createPreventDefaultVar(bindingId);
            actionStmts[lastIndex] = preventDefaultVar.set(returnExpr.cast(DYNAMIC_TYPE).notIdentical(literal(false))).toDeclStmt(null, [StmtModifier.Final]);
          }
        }

        return new ConvertActionBindingResult(actionStmts, preventDefaultVar);
      }

      function convertPropertyBindingBuiltins(converterFactory, ast) {
        return convertBuiltins(converterFactory, ast);
      }

      var ConvertPropertyBindingResult = function ConvertPropertyBindingResult(stmts, currValExpr) {
        _classCallCheck2(this, ConvertPropertyBindingResult);

        this.stmts = stmts;
        this.currValExpr = currValExpr;
      };

      var BindingForm;

      (function (BindingForm) {
        // The general form of binding expression, supports all expressions.
        BindingForm[BindingForm["General"] = 0] = "General"; // Try to generate a simple binding (no temporaries or statements)
        // otherwise generate a general binding

        BindingForm[BindingForm["TrySimple"] = 1] = "TrySimple"; // Inlines assignment of temporaries into the generated expression. The result may still
        // have statements attached for declarations of temporary variables.
        // This is the only relevant form for Ivy, the other forms are only used in ViewEngine.

        BindingForm[BindingForm["Expression"] = 2] = "Expression";
      })(BindingForm || (BindingForm = {}));
      /**
       * Converts the given expression AST into an executable output AST, assuming the expression
       * is used in property binding. The expression has to be preprocessed via
       * `convertPropertyBindingBuiltins`.
       */


      function _convertPropertyBinding(localResolver, implicitReceiver, expressionWithoutBuiltins, bindingId, form, interpolationFunction) {
        if (!localResolver) {
          localResolver = new DefaultLocalResolver();
        }

        var visitor = new _AstToIrVisitor(localResolver, implicitReceiver, bindingId, interpolationFunction);
        var outputExpr = expressionWithoutBuiltins.visit(visitor, _Mode.Expression);
        var stmts = getStatementsFromVisitor(visitor, bindingId);

        if (visitor.usesImplicitReceiver) {
          localResolver.notifyImplicitReceiverUse();
        }

        if (visitor.temporaryCount === 0 && form == BindingForm.TrySimple) {
          return new ConvertPropertyBindingResult([], outputExpr);
        } else if (form === BindingForm.Expression) {
          return new ConvertPropertyBindingResult(stmts, outputExpr);
        }

        var currValExpr = createCurrValueExpr(bindingId);
        stmts.push(currValExpr.set(outputExpr).toDeclStmt(DYNAMIC_TYPE, [StmtModifier.Final]));
        return new ConvertPropertyBindingResult(stmts, currValExpr);
      }
      /**
       * Given some expression, such as a binding or interpolation expression, and a context expression to
       * look values up on, visit each facet of the given expression resolving values from the context
       * expression such that a list of arguments can be derived from the found values that can be used as
       * arguments to an external update instruction.
       *
       * @param localResolver The resolver to use to look up expressions by name appropriately
       * @param contextVariableExpression The expression representing the context variable used to create
       * the final argument expressions
       * @param expressionWithArgumentsToExtract The expression to visit to figure out what values need to
       * be resolved and what arguments list to build.
       * @param bindingId A name prefix used to create temporary variable names if they're needed for the
       * arguments generated
       * @returns An array of expressions that can be passed as arguments to instruction expressions like
       * `o.importExpr(R3.propertyInterpolate).callFn(result)`
       */


      function convertUpdateArguments(localResolver, contextVariableExpression, expressionWithArgumentsToExtract, bindingId) {
        var visitor = new _AstToIrVisitor(localResolver, contextVariableExpression, bindingId, undefined);
        var outputExpr = expressionWithArgumentsToExtract.visit(visitor, _Mode.Expression);

        if (visitor.usesImplicitReceiver) {
          localResolver.notifyImplicitReceiverUse();
        }

        var stmts = getStatementsFromVisitor(visitor, bindingId); // Removing the first argument, because it was a length for ViewEngine, not Ivy.

        var args = outputExpr.args.slice(1);

        if (expressionWithArgumentsToExtract instanceof Interpolation) {
          // If we're dealing with an interpolation of 1 value with an empty prefix and suffix, reduce the
          // args returned to just the value, because we're going to pass it to a special instruction.
          var strings = expressionWithArgumentsToExtract.strings;

          if (args.length === 3 && strings[0] === '' && strings[1] === '') {
            // Single argument interpolate instructions.
            args = [args[1]];
          } else if (args.length >= 19) {
            // 19 or more arguments must be passed to the `interpolateV`-style instructions, which accept
            // an array of arguments
            args = [literalArr(args)];
          }
        }

        return {
          stmts: stmts,
          args: args
        };
      }

      function getStatementsFromVisitor(visitor, bindingId) {
        var stmts = [];

        for (var i = 0; i < visitor.temporaryCount; i++) {
          stmts.push(temporaryDeclaration(bindingId, i));
        }

        return stmts;
      }

      function convertBuiltins(converterFactory, ast) {
        var visitor = new _BuiltinAstConverter(converterFactory);
        return ast.visit(visitor);
      }

      function temporaryName(bindingId, temporaryNumber) {
        return "tmp_".concat(bindingId, "_").concat(temporaryNumber);
      }

      function temporaryDeclaration(bindingId, temporaryNumber) {
        return new DeclareVarStmt(temporaryName(bindingId, temporaryNumber), NULL_EXPR);
      }

      function prependTemporaryDecls(temporaryCount, bindingId, statements) {
        for (var i = temporaryCount - 1; i >= 0; i--) {
          statements.unshift(temporaryDeclaration(bindingId, i));
        }
      }

      var _Mode;

      (function (_Mode) {
        _Mode[_Mode["Statement"] = 0] = "Statement";
        _Mode[_Mode["Expression"] = 1] = "Expression";
      })(_Mode || (_Mode = {}));

      function ensureStatementMode(mode, ast) {
        if (mode !== _Mode.Statement) {
          throw new Error("Expected a statement, but saw ".concat(ast));
        }
      }

      function ensureExpressionMode(mode, ast) {
        if (mode !== _Mode.Expression) {
          throw new Error("Expected an expression, but saw ".concat(ast));
        }
      }

      function convertToStatementIfNeeded(mode, expr) {
        if (mode === _Mode.Statement) {
          return expr.toStmt();
        } else {
          return expr;
        }
      }

      var _BuiltinAstConverter = /*#__PURE__*/function (_AstTransformer$) {
        _inherits2(_BuiltinAstConverter, _AstTransformer$);

        var _super136 = _createSuper(_BuiltinAstConverter);

        function _BuiltinAstConverter(_converterFactory) {
          var _this234;

          _classCallCheck2(this, _BuiltinAstConverter);

          _this234 = _super136.call(this);
          _this234._converterFactory = _converterFactory;
          return _this234;
        }

        _createClass2(_BuiltinAstConverter, [{
          key: "visitPipe",
          value: function visitPipe(ast, context) {
            var _this235 = this;

            var args = [ast.exp].concat(_toConsumableArray(ast.args)).map(function (ast) {
              return ast.visit(_this235, context);
            });
            return new BuiltinFunctionCall(ast.span, ast.sourceSpan, args, this._converterFactory.createPipeConverter(ast.name, args.length));
          }
        }, {
          key: "visitLiteralArray",
          value: function visitLiteralArray(ast, context) {
            var _this236 = this;

            var args = ast.expressions.map(function (ast) {
              return ast.visit(_this236, context);
            });
            return new BuiltinFunctionCall(ast.span, ast.sourceSpan, args, this._converterFactory.createLiteralArrayConverter(ast.expressions.length));
          }
        }, {
          key: "visitLiteralMap",
          value: function visitLiteralMap(ast, context) {
            var _this237 = this;

            var args = ast.values.map(function (ast) {
              return ast.visit(_this237, context);
            });
            return new BuiltinFunctionCall(ast.span, ast.sourceSpan, args, this._converterFactory.createLiteralMapConverter(ast.keys));
          }
        }]);

        return _BuiltinAstConverter;
      }(AstTransformer$1);

      var _AstToIrVisitor = /*#__PURE__*/function () {
        function _AstToIrVisitor(_localResolver, _implicitReceiver, bindingId, interpolationFunction, baseSourceSpan, implicitReceiverAccesses) {
          _classCallCheck2(this, _AstToIrVisitor);

          this._localResolver = _localResolver;
          this._implicitReceiver = _implicitReceiver;
          this.bindingId = bindingId;
          this.interpolationFunction = interpolationFunction;
          this.baseSourceSpan = baseSourceSpan;
          this.implicitReceiverAccesses = implicitReceiverAccesses;
          this._nodeMap = new Map();
          this._resultMap = new Map();
          this._currentTemporary = 0;
          this.temporaryCount = 0;
          this.usesImplicitReceiver = false;
        }

        _createClass2(_AstToIrVisitor, [{
          key: "visitUnary",
          value: function visitUnary(ast, mode) {
            var op;

            switch (ast.operator) {
              case '+':
                op = UnaryOperator.Plus;
                break;

              case '-':
                op = UnaryOperator.Minus;
                break;

              default:
                throw new Error("Unsupported operator ".concat(ast.operator));
            }

            return convertToStatementIfNeeded(mode, new UnaryOperatorExpr(op, this._visit(ast.expr, _Mode.Expression), undefined, this.convertSourceSpan(ast.span)));
          }
        }, {
          key: "visitBinary",
          value: function visitBinary(ast, mode) {
            var op;

            switch (ast.operation) {
              case '+':
                op = BinaryOperator.Plus;
                break;

              case '-':
                op = BinaryOperator.Minus;
                break;

              case '*':
                op = BinaryOperator.Multiply;
                break;

              case '/':
                op = BinaryOperator.Divide;
                break;

              case '%':
                op = BinaryOperator.Modulo;
                break;

              case '&&':
                op = BinaryOperator.And;
                break;

              case '||':
                op = BinaryOperator.Or;
                break;

              case '==':
                op = BinaryOperator.Equals;
                break;

              case '!=':
                op = BinaryOperator.NotEquals;
                break;

              case '===':
                op = BinaryOperator.Identical;
                break;

              case '!==':
                op = BinaryOperator.NotIdentical;
                break;

              case '<':
                op = BinaryOperator.Lower;
                break;

              case '>':
                op = BinaryOperator.Bigger;
                break;

              case '<=':
                op = BinaryOperator.LowerEquals;
                break;

              case '>=':
                op = BinaryOperator.BiggerEquals;
                break;

              default:
                throw new Error("Unsupported operation ".concat(ast.operation));
            }

            return convertToStatementIfNeeded(mode, new BinaryOperatorExpr(op, this._visit(ast.left, _Mode.Expression), this._visit(ast.right, _Mode.Expression), undefined, this.convertSourceSpan(ast.span)));
          }
        }, {
          key: "visitChain",
          value: function visitChain(ast, mode) {
            ensureStatementMode(mode, ast);
            return this.visitAll(ast.expressions, mode);
          }
        }, {
          key: "visitConditional",
          value: function visitConditional(ast, mode) {
            var value = this._visit(ast.condition, _Mode.Expression);

            return convertToStatementIfNeeded(mode, value.conditional(this._visit(ast.trueExp, _Mode.Expression), this._visit(ast.falseExp, _Mode.Expression), this.convertSourceSpan(ast.span)));
          }
        }, {
          key: "visitPipe",
          value: function visitPipe(ast, mode) {
            throw new Error("Illegal state: Pipes should have been converted into functions. Pipe: ".concat(ast.name));
          }
        }, {
          key: "visitFunctionCall",
          value: function visitFunctionCall(ast, mode) {
            var convertedArgs = this.visitAll(ast.args, _Mode.Expression);
            var fnResult;

            if (ast instanceof BuiltinFunctionCall) {
              fnResult = ast.converter(convertedArgs);
            } else {
              fnResult = this._visit(ast.target, _Mode.Expression).callFn(convertedArgs, this.convertSourceSpan(ast.span));
            }

            return convertToStatementIfNeeded(mode, fnResult);
          }
        }, {
          key: "visitImplicitReceiver",
          value: function visitImplicitReceiver(ast, mode) {
            ensureExpressionMode(mode, ast);
            this.usesImplicitReceiver = true;
            return this._implicitReceiver;
          }
        }, {
          key: "visitThisReceiver",
          value: function visitThisReceiver(ast, mode) {
            return this.visitImplicitReceiver(ast, mode);
          }
        }, {
          key: "visitInterpolation",
          value: function visitInterpolation(ast, mode) {
            ensureExpressionMode(mode, ast);
            var args = [literal(ast.expressions.length)];

            for (var i = 0; i < ast.strings.length - 1; i++) {
              args.push(literal(ast.strings[i]));
              args.push(this._visit(ast.expressions[i], _Mode.Expression));
            }

            args.push(literal(ast.strings[ast.strings.length - 1]));

            if (this.interpolationFunction) {
              return this.interpolationFunction(args);
            }

            return ast.expressions.length <= 9 ? importExpr(Identifiers.inlineInterpolate).callFn(args) : importExpr(Identifiers.interpolate).callFn([args[0], literalArr(args.slice(1), undefined, this.convertSourceSpan(ast.span))]);
          }
        }, {
          key: "visitKeyedRead",
          value: function visitKeyedRead(ast, mode) {
            var leftMostSafe = this.leftMostSafeNode(ast);

            if (leftMostSafe) {
              return this.convertSafeAccess(ast, leftMostSafe, mode);
            } else {
              return convertToStatementIfNeeded(mode, this._visit(ast.obj, _Mode.Expression).key(this._visit(ast.key, _Mode.Expression)));
            }
          }
        }, {
          key: "visitKeyedWrite",
          value: function visitKeyedWrite(ast, mode) {
            var obj = this._visit(ast.obj, _Mode.Expression);

            var key = this._visit(ast.key, _Mode.Expression);

            var value = this._visit(ast.value, _Mode.Expression);

            return convertToStatementIfNeeded(mode, obj.key(key).set(value));
          }
        }, {
          key: "visitLiteralArray",
          value: function visitLiteralArray(ast, mode) {
            throw new Error("Illegal State: literal arrays should have been converted into functions");
          }
        }, {
          key: "visitLiteralMap",
          value: function visitLiteralMap(ast, mode) {
            throw new Error("Illegal State: literal maps should have been converted into functions");
          }
        }, {
          key: "visitLiteralPrimitive",
          value: function visitLiteralPrimitive(ast, mode) {
            // For literal values of null, undefined, true, or false allow type interference
            // to infer the type.
            var type = ast.value === null || ast.value === undefined || ast.value === true || ast.value === true ? INFERRED_TYPE : undefined;
            return convertToStatementIfNeeded(mode, literal(ast.value, type, this.convertSourceSpan(ast.span)));
          }
        }, {
          key: "_getLocal",
          value: function _getLocal(name, receiver) {
            var _a;

            if (((_a = this._localResolver.globals) === null || _a === void 0 ? void 0 : _a.has(name)) && receiver instanceof ThisReceiver) {
              return null;
            }

            return this._localResolver.getLocal(name);
          }
        }, {
          key: "visitMethodCall",
          value: function visitMethodCall(ast, mode) {
            if (ast.receiver instanceof ImplicitReceiver && !(ast.receiver instanceof ThisReceiver) && ast.name === '$any') {
              var args = this.visitAll(ast.args, _Mode.Expression);

              if (args.length != 1) {
                throw new Error("Invalid call to $any, expected 1 argument but received ".concat(args.length || 'none'));
              }

              return args[0].cast(DYNAMIC_TYPE, this.convertSourceSpan(ast.span));
            }

            var leftMostSafe = this.leftMostSafeNode(ast);

            if (leftMostSafe) {
              return this.convertSafeAccess(ast, leftMostSafe, mode);
            } else {
              var _args = this.visitAll(ast.args, _Mode.Expression);

              var prevUsesImplicitReceiver = this.usesImplicitReceiver;
              var result = null;

              var receiver = this._visit(ast.receiver, _Mode.Expression);

              if (receiver === this._implicitReceiver) {
                var varExpr = this._getLocal(ast.name, ast.receiver);

                if (varExpr) {
                  // Restore the previous "usesImplicitReceiver" state since the implicit
                  // receiver has been replaced with a resolved local expression.
                  this.usesImplicitReceiver = prevUsesImplicitReceiver;
                  result = varExpr.callFn(_args);
                  this.addImplicitReceiverAccess(ast.name);
                }
              }

              if (result == null) {
                result = receiver.callMethod(ast.name, _args, this.convertSourceSpan(ast.span));
              }

              return convertToStatementIfNeeded(mode, result);
            }
          }
        }, {
          key: "visitPrefixNot",
          value: function visitPrefixNot(ast, mode) {
            return convertToStatementIfNeeded(mode, not(this._visit(ast.expression, _Mode.Expression)));
          }
        }, {
          key: "visitNonNullAssert",
          value: function visitNonNullAssert(ast, mode) {
            return convertToStatementIfNeeded(mode, assertNotNull(this._visit(ast.expression, _Mode.Expression)));
          }
        }, {
          key: "visitPropertyRead",
          value: function visitPropertyRead(ast, mode) {
            var leftMostSafe = this.leftMostSafeNode(ast);

            if (leftMostSafe) {
              return this.convertSafeAccess(ast, leftMostSafe, mode);
            } else {
              var result = null;
              var prevUsesImplicitReceiver = this.usesImplicitReceiver;

              var receiver = this._visit(ast.receiver, _Mode.Expression);

              if (receiver === this._implicitReceiver) {
                result = this._getLocal(ast.name, ast.receiver);

                if (result) {
                  // Restore the previous "usesImplicitReceiver" state since the implicit
                  // receiver has been replaced with a resolved local expression.
                  this.usesImplicitReceiver = prevUsesImplicitReceiver;
                  this.addImplicitReceiverAccess(ast.name);
                }
              }

              if (result == null) {
                result = receiver.prop(ast.name);
              }

              return convertToStatementIfNeeded(mode, result);
            }
          }
        }, {
          key: "visitPropertyWrite",
          value: function visitPropertyWrite(ast, mode) {
            var receiver = this._visit(ast.receiver, _Mode.Expression);

            var prevUsesImplicitReceiver = this.usesImplicitReceiver;
            var varExpr = null;

            if (receiver === this._implicitReceiver) {
              var localExpr = this._getLocal(ast.name, ast.receiver);

              if (localExpr) {
                if (localExpr instanceof ReadPropExpr) {
                  // If the local variable is a property read expression, it's a reference
                  // to a 'context.property' value and will be used as the target of the
                  // write expression.
                  varExpr = localExpr; // Restore the previous "usesImplicitReceiver" state since the implicit
                  // receiver has been replaced with a resolved local expression.

                  this.usesImplicitReceiver = prevUsesImplicitReceiver;
                  this.addImplicitReceiverAccess(ast.name);
                } else {
                  // Otherwise it's an error.
                  var _receiver = ast.name;
                  var value = ast.value instanceof PropertyRead ? ast.value.name : undefined;
                  throw new Error("Cannot assign value \"".concat(value, "\" to template variable \"").concat(_receiver, "\". Template variables are read-only."));
                }
              }
            } // If no local expression could be produced, use the original receiver's
            // property as the target.


            if (varExpr === null) {
              varExpr = receiver.prop(ast.name);
            }

            return convertToStatementIfNeeded(mode, varExpr.set(this._visit(ast.value, _Mode.Expression)));
          }
        }, {
          key: "visitSafePropertyRead",
          value: function visitSafePropertyRead(ast, mode) {
            return this.convertSafeAccess(ast, this.leftMostSafeNode(ast), mode);
          }
        }, {
          key: "visitSafeMethodCall",
          value: function visitSafeMethodCall(ast, mode) {
            return this.convertSafeAccess(ast, this.leftMostSafeNode(ast), mode);
          }
        }, {
          key: "visitAll",
          value: function visitAll(asts, mode) {
            var _this238 = this;

            return asts.map(function (ast) {
              return _this238._visit(ast, mode);
            });
          }
        }, {
          key: "visitQuote",
          value: function visitQuote(ast, mode) {
            throw new Error("Quotes are not supported for evaluation!\n        Statement: ".concat(ast.uninterpretedExpression, " located at ").concat(ast.location));
          }
        }, {
          key: "_visit",
          value: function _visit(ast, mode) {
            var result = this._resultMap.get(ast);

            if (result) return result;
            return (this._nodeMap.get(ast) || ast).visit(this, mode);
          }
        }, {
          key: "convertSafeAccess",
          value: function convertSafeAccess(ast, leftMostSafe, mode) {
            // If the expression contains a safe access node on the left it needs to be converted to
            // an expression that guards the access to the member by checking the receiver for blank. As
            // execution proceeds from left to right, the left most part of the expression must be guarded
            // first but, because member access is left associative, the right side of the expression is at
            // the top of the AST. The desired result requires lifting a copy of the left part of the
            // expression up to test it for blank before generating the unguarded version.
            // Consider, for example the following expression: a?.b.c?.d.e
            // This results in the ast:
            //         .
            //        / \
            //       ?.   e
            //      /  \
            //     .    d
            //    / \
            //   ?.  c
            //  /  \
            // a    b
            // The following tree should be generated:
            //
            //        /---- ? ----\
            //       /      |      \
            //     a   /--- ? ---\  null
            //        /     |     \
            //       .      .     null
            //      / \    / \
            //     .  c   .   e
            //    / \    / \
            //   a   b  .   d
            //         / \
            //        .   c
            //       / \
            //      a   b
            //
            // Notice that the first guard condition is the left hand of the left most safe access node
            // which comes in as leftMostSafe to this routine.
            var guardedExpression = this._visit(leftMostSafe.receiver, _Mode.Expression);

            var temporary = undefined;

            if (this.needsTemporary(leftMostSafe.receiver)) {
              // If the expression has method calls or pipes then we need to save the result into a
              // temporary variable to avoid calling stateful or impure code more than once.
              temporary = this.allocateTemporary(); // Preserve the result in the temporary variable

              guardedExpression = temporary.set(guardedExpression); // Ensure all further references to the guarded expression refer to the temporary instead.

              this._resultMap.set(leftMostSafe.receiver, temporary);
            }

            var condition = guardedExpression.isBlank(); // Convert the ast to an unguarded access to the receiver's member. The map will substitute
            // leftMostNode with its unguarded version in the call to `this.visit()`.

            if (leftMostSafe instanceof SafeMethodCall) {
              this._nodeMap.set(leftMostSafe, new MethodCall(leftMostSafe.span, leftMostSafe.sourceSpan, leftMostSafe.nameSpan, leftMostSafe.receiver, leftMostSafe.name, leftMostSafe.args));
            } else {
              this._nodeMap.set(leftMostSafe, new PropertyRead(leftMostSafe.span, leftMostSafe.sourceSpan, leftMostSafe.nameSpan, leftMostSafe.receiver, leftMostSafe.name));
            } // Recursively convert the node now without the guarded member access.


            var access = this._visit(ast, _Mode.Expression); // Remove the mapping. This is not strictly required as the converter only traverses each node
            // once but is safer if the conversion is changed to traverse the nodes more than once.


            this._nodeMap["delete"](leftMostSafe); // If we allocated a temporary, release it.


            if (temporary) {
              this.releaseTemporary(temporary);
            } // Produce the conditional


            return convertToStatementIfNeeded(mode, condition.conditional(literal(null), access));
          } // Given an expression of the form a?.b.c?.d.e then the left most safe node is
          // the (a?.b). The . and ?. are left associative thus can be rewritten as:
          // ((((a?.c).b).c)?.d).e. This returns the most deeply nested safe read or
          // safe method call as this needs to be transformed initially to:
          //   a == null ? null : a.c.b.c?.d.e
          // then to:
          //   a == null ? null : a.b.c == null ? null : a.b.c.d.e

        }, {
          key: "leftMostSafeNode",
          value: function leftMostSafeNode(ast) {
            var _this239 = this;

            var visit = function visit(visitor, ast) {
              return (_this239._nodeMap.get(ast) || ast).visit(visitor);
            };

            return ast.visit({
              visitUnary: function visitUnary(ast) {
                return null;
              },
              visitBinary: function visitBinary(ast) {
                return null;
              },
              visitChain: function visitChain(ast) {
                return null;
              },
              visitConditional: function visitConditional(ast) {
                return null;
              },
              visitFunctionCall: function visitFunctionCall(ast) {
                return null;
              },
              visitImplicitReceiver: function visitImplicitReceiver(ast) {
                return null;
              },
              visitThisReceiver: function visitThisReceiver(ast) {
                return null;
              },
              visitInterpolation: function visitInterpolation(ast) {
                return null;
              },
              visitKeyedRead: function visitKeyedRead(ast) {
                return visit(this, ast.obj);
              },
              visitKeyedWrite: function visitKeyedWrite(ast) {
                return null;
              },
              visitLiteralArray: function visitLiteralArray(ast) {
                return null;
              },
              visitLiteralMap: function visitLiteralMap(ast) {
                return null;
              },
              visitLiteralPrimitive: function visitLiteralPrimitive(ast) {
                return null;
              },
              visitMethodCall: function visitMethodCall(ast) {
                return visit(this, ast.receiver);
              },
              visitPipe: function visitPipe(ast) {
                return null;
              },
              visitPrefixNot: function visitPrefixNot(ast) {
                return null;
              },
              visitNonNullAssert: function visitNonNullAssert(ast) {
                return null;
              },
              visitPropertyRead: function visitPropertyRead(ast) {
                return visit(this, ast.receiver);
              },
              visitPropertyWrite: function visitPropertyWrite(ast) {
                return null;
              },
              visitQuote: function visitQuote(ast) {
                return null;
              },
              visitSafeMethodCall: function visitSafeMethodCall(ast) {
                return visit(this, ast.receiver) || ast;
              },
              visitSafePropertyRead: function visitSafePropertyRead(ast) {
                return visit(this, ast.receiver) || ast;
              }
            });
          } // Returns true of the AST includes a method or a pipe indicating that, if the
          // expression is used as the target of a safe property or method access then
          // the expression should be stored into a temporary variable.

        }, {
          key: "needsTemporary",
          value: function needsTemporary(ast) {
            var _this240 = this;

            var visit = function visit(visitor, ast) {
              return ast && (_this240._nodeMap.get(ast) || ast).visit(visitor);
            };

            var visitSome = function visitSome(visitor, ast) {
              return ast.some(function (ast) {
                return visit(visitor, ast);
              });
            };

            return ast.visit({
              visitUnary: function visitUnary(ast) {
                return visit(this, ast.expr);
              },
              visitBinary: function visitBinary(ast) {
                return visit(this, ast.left) || visit(this, ast.right);
              },
              visitChain: function visitChain(ast) {
                return false;
              },
              visitConditional: function visitConditional(ast) {
                return visit(this, ast.condition) || visit(this, ast.trueExp) || visit(this, ast.falseExp);
              },
              visitFunctionCall: function visitFunctionCall(ast) {
                return true;
              },
              visitImplicitReceiver: function visitImplicitReceiver(ast) {
                return false;
              },
              visitThisReceiver: function visitThisReceiver(ast) {
                return false;
              },
              visitInterpolation: function visitInterpolation(ast) {
                return visitSome(this, ast.expressions);
              },
              visitKeyedRead: function visitKeyedRead(ast) {
                return false;
              },
              visitKeyedWrite: function visitKeyedWrite(ast) {
                return false;
              },
              visitLiteralArray: function visitLiteralArray(ast) {
                return true;
              },
              visitLiteralMap: function visitLiteralMap(ast) {
                return true;
              },
              visitLiteralPrimitive: function visitLiteralPrimitive(ast) {
                return false;
              },
              visitMethodCall: function visitMethodCall(ast) {
                return true;
              },
              visitPipe: function visitPipe(ast) {
                return true;
              },
              visitPrefixNot: function visitPrefixNot(ast) {
                return visit(this, ast.expression);
              },
              visitNonNullAssert: function visitNonNullAssert(ast) {
                return visit(this, ast.expression);
              },
              visitPropertyRead: function visitPropertyRead(ast) {
                return false;
              },
              visitPropertyWrite: function visitPropertyWrite(ast) {
                return false;
              },
              visitQuote: function visitQuote(ast) {
                return false;
              },
              visitSafeMethodCall: function visitSafeMethodCall(ast) {
                return true;
              },
              visitSafePropertyRead: function visitSafePropertyRead(ast) {
                return false;
              }
            });
          }
        }, {
          key: "allocateTemporary",
          value: function allocateTemporary() {
            var tempNumber = this._currentTemporary++;
            this.temporaryCount = Math.max(this._currentTemporary, this.temporaryCount);
            return new ReadVarExpr(temporaryName(this.bindingId, tempNumber));
          }
        }, {
          key: "releaseTemporary",
          value: function releaseTemporary(temporary) {
            this._currentTemporary--;

            if (temporary.name != temporaryName(this.bindingId, this._currentTemporary)) {
              throw new Error("Temporary ".concat(temporary.name, " released out of order"));
            }
          }
          /**
           * Creates an absolute `ParseSourceSpan` from the relative `ParseSpan`.
           *
           * `ParseSpan` objects are relative to the start of the expression.
           * This method converts these to full `ParseSourceSpan` objects that
           * show where the span is within the overall source file.
           *
           * @param span the relative span to convert.
           * @returns a `ParseSourceSpan` for the given span or null if no
           * `baseSourceSpan` was provided to this class.
           */

        }, {
          key: "convertSourceSpan",
          value: function convertSourceSpan(span) {
            if (this.baseSourceSpan) {
              var _start = this.baseSourceSpan.start.moveBy(span.start);

              var end = this.baseSourceSpan.start.moveBy(span.end);
              var fullStart = this.baseSourceSpan.fullStart.moveBy(span.start);
              return new ParseSourceSpan(_start, end, fullStart);
            } else {
              return null;
            }
          }
          /** Adds the name of an AST to the list of implicit receiver accesses. */

        }, {
          key: "addImplicitReceiverAccess",
          value: function addImplicitReceiverAccess(name) {
            if (this.implicitReceiverAccesses) {
              this.implicitReceiverAccesses.add(name);
            }
          }
        }]);

        return _AstToIrVisitor;
      }();

      function flattenStatements(arg, output) {
        if (Array.isArray(arg)) {
          arg.forEach(function (entry) {
            return flattenStatements(entry, output);
          });
        } else {
          output.push(arg);
        }
      }

      var DefaultLocalResolver = /*#__PURE__*/function () {
        function DefaultLocalResolver(globals) {
          _classCallCheck2(this, DefaultLocalResolver);

          this.globals = globals;
        }

        _createClass2(DefaultLocalResolver, [{
          key: "notifyImplicitReceiverUse",
          value: function notifyImplicitReceiverUse() {}
        }, {
          key: "getLocal",
          value: function getLocal(name) {
            if (name === EventHandlerVars.event.name) {
              return EventHandlerVars.event;
            }

            return null;
          }
        }]);

        return DefaultLocalResolver;
      }();

      function createCurrValueExpr(bindingId) {
        return variable("currVal_".concat(bindingId)); // fix syntax highlighting: `
      }

      function createPreventDefaultVar(bindingId) {
        return variable("pd_".concat(bindingId));
      }

      function convertStmtIntoExpression(stmt) {
        if (stmt instanceof ExpressionStatement) {
          return stmt.expr;
        } else if (stmt instanceof ReturnStatement) {
          return stmt.value;
        }

        return null;
      }

      var BuiltinFunctionCall = /*#__PURE__*/function (_FunctionCall) {
        _inherits2(BuiltinFunctionCall, _FunctionCall);

        var _super137 = _createSuper(BuiltinFunctionCall);

        function BuiltinFunctionCall(span, sourceSpan, args, converter) {
          var _this241;

          _classCallCheck2(this, BuiltinFunctionCall);

          _this241 = _super137.call(this, span, sourceSpan, null, args);
          _this241.args = args;
          _this241.converter = converter;
          return _this241;
        }

        return BuiltinFunctionCall;
      }(FunctionCall);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * This file is a port of shadowCSS from webcomponents.js to TypeScript.
       *
       * Please make sure to keep to edits in sync with the source file.
       *
       * Source:
       * https://github.com/webcomponents/webcomponentsjs/blob/4efecd7e0e/src/ShadowCSS/ShadowCSS.js
       *
       * The original file level comment is reproduced below
       */

      /*
        This is a limited shim for ShadowDOM css styling.
        https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#styles
      
        The intention here is to support only the styling features which can be
        relatively simply implemented. The goal is to allow users to avoid the
        most obvious pitfalls and do so without compromising performance significantly.
        For ShadowDOM styling that's not covered here, a set of best practices
        can be provided that should allow users to accomplish more complex styling.
      
        The following is a list of specific ShadowDOM styling features and a brief
        discussion of the approach used to shim.
      
        Shimmed features:
      
        * :host, :host-context: ShadowDOM allows styling of the shadowRoot's host
        element using the :host rule. To shim this feature, the :host styles are
        reformatted and prefixed with a given scope name and promoted to a
        document level stylesheet.
        For example, given a scope name of .foo, a rule like this:
      
          :host {
              background: red;
            }
          }
      
        becomes:
      
          .foo {
            background: red;
          }
      
        * encapsulation: Styles defined within ShadowDOM, apply only to
        dom inside the ShadowDOM. Polymer uses one of two techniques to implement
        this feature.
      
        By default, rules are prefixed with the host element tag name
        as a descendant selector. This ensures styling does not leak out of the 'top'
        of the element's ShadowDOM. For example,
      
        div {
            font-weight: bold;
          }
      
        becomes:
      
        x-foo div {
            font-weight: bold;
          }
      
        becomes:
      
      
        Alternatively, if WebComponents.ShadowCSS.strictStyling is set to true then
        selectors are scoped by adding an attribute selector suffix to each
        simple selector that contains the host element tag name. Each element
        in the element's ShadowDOM template is also given the scope attribute.
        Thus, these rules match only elements that have the scope attribute.
        For example, given a scope name of x-foo, a rule like this:
      
          div {
            font-weight: bold;
          }
      
        becomes:
      
          div[x-foo] {
            font-weight: bold;
          }
      
        Note that elements that are dynamically added to a scope must have the scope
        selector added to them manually.
      
        * upper/lower bound encapsulation: Styles which are defined outside a
        shadowRoot should not cross the ShadowDOM boundary and should not apply
        inside a shadowRoot.
      
        This styling behavior is not emulated. Some possible ways to do this that
        were rejected due to complexity and/or performance concerns include: (1) reset
        every possible property for every possible selector for a given scope name;
        (2) re-implement css in javascript.
      
        As an alternative, users should make sure to use selectors
        specific to the scope in which they are working.
      
        * ::distributed: This behavior is not emulated. It's often not necessary
        to style the contents of a specific insertion point and instead, descendants
        of the host element can be styled selectively. Users can also create an
        extra node around an insertion point and style that node's contents
        via descendent selectors. For example, with a shadowRoot like this:
      
          <style>
            ::content(div) {
              background: red;
            }
          </style>
          <content></content>
      
        could become:
      
          <style>
            / *@polyfill .content-container div * /
            ::content(div) {
              background: red;
            }
          </style>
          <div class="content-container">
            <content></content>
          </div>
      
        Note the use of @polyfill in the comment above a ShadowDOM specific style
        declaration. This is a directive to the styling shim to use the selector
        in comments in lieu of the next selector when running under polyfill.
      */


      var ShadowCss = /*#__PURE__*/function () {
        function ShadowCss() {
          _classCallCheck2(this, ShadowCss);

          this.strictStyling = true;
        }
        /*
         * Shim some cssText with the given selector. Returns cssText that can
         * be included in the document via WebComponents.ShadowCSS.addCssToDocument(css).
         *
         * When strictStyling is true:
         * - selector is the attribute added to all elements inside the host,
         * - hostSelector is the attribute added to the host itself.
         */


        _createClass2(ShadowCss, [{
          key: "shimCssText",
          value: function shimCssText(cssText, selector) {
            var hostSelector = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
            var commentsWithHash = extractCommentsWithHash(cssText);
            cssText = stripComments(cssText);
            cssText = this._insertDirectives(cssText);

            var scopedCssText = this._scopeCssText(cssText, selector, hostSelector);

            return [scopedCssText].concat(_toConsumableArray(commentsWithHash)).join('\n');
          }
        }, {
          key: "_insertDirectives",
          value: function _insertDirectives(cssText) {
            cssText = this._insertPolyfillDirectivesInCssText(cssText);
            return this._insertPolyfillRulesInCssText(cssText);
          }
          /*
           * Process styles to convert native ShadowDOM rules that will trip
           * up the css parser; we rely on decorating the stylesheet with inert rules.
           *
           * For example, we convert this rule:
           *
           * polyfill-next-selector { content: ':host menu-item'; }
           * ::content menu-item {
           *
           * to this:
           *
           * scopeName menu-item {
           *
           **/

        }, {
          key: "_insertPolyfillDirectivesInCssText",
          value: function _insertPolyfillDirectivesInCssText(cssText) {
            // Difference with webcomponents.js: does not handle comments
            return cssText.replace(_cssContentNextSelectorRe, function () {
              return (arguments.length <= 2 ? undefined : arguments[2]) + '{';
            });
          }
          /*
           * Process styles to add rules which will only apply under the polyfill
           *
           * For example, we convert this rule:
           *
           * polyfill-rule {
           *   content: ':host menu-item';
           * ...
           * }
           *
           * to this:
           *
           * scopeName menu-item {...}
           *
           **/

        }, {
          key: "_insertPolyfillRulesInCssText",
          value: function _insertPolyfillRulesInCssText(cssText) {
            // Difference with webcomponents.js: does not handle comments
            return cssText.replace(_cssContentRuleRe, function () {
              for (var _len10 = arguments.length, m = new Array(_len10), _key12 = 0; _key12 < _len10; _key12++) {
                m[_key12] = arguments[_key12];
              }

              var rule = m[0].replace(m[1], '').replace(m[2], '');
              return m[4] + rule;
            });
          }
          /* Ensure styles are scoped. Pseudo-scoping takes a rule like:
           *
           *  .foo {... }
           *
           *  and converts this to
           *
           *  scopeName .foo { ... }
           */

        }, {
          key: "_scopeCssText",
          value: function _scopeCssText(cssText, scopeSelector, hostSelector) {
            var unscopedRules = this._extractUnscopedRulesFromCssText(cssText); // replace :host and :host-context -shadowcsshost and -shadowcsshost respectively


            cssText = this._insertPolyfillHostInCssText(cssText);
            cssText = this._convertColonHost(cssText);
            cssText = this._convertColonHostContext(cssText);
            cssText = this._convertShadowDOMSelectors(cssText);

            if (scopeSelector) {
              cssText = this._scopeSelectors(cssText, scopeSelector, hostSelector);
            }

            cssText = cssText + '\n' + unscopedRules;
            return cssText.trim();
          }
          /*
           * Process styles to add rules which will only apply under the polyfill
           * and do not process via CSSOM. (CSSOM is destructive to rules on rare
           * occasions, e.g. -webkit-calc on Safari.)
           * For example, we convert this rule:
           *
           * @polyfill-unscoped-rule {
           *   content: 'menu-item';
           * ... }
           *
           * to this:
           *
           * menu-item {...}
           *
           **/

        }, {
          key: "_extractUnscopedRulesFromCssText",
          value: function _extractUnscopedRulesFromCssText(cssText) {
            // Difference with webcomponents.js: does not handle comments
            var r = '';
            var m;
            _cssContentUnscopedRuleRe.lastIndex = 0;

            while ((m = _cssContentUnscopedRuleRe.exec(cssText)) !== null) {
              var rule = m[0].replace(m[2], '').replace(m[1], m[4]);
              r += rule + '\n\n';
            }

            return r;
          }
          /*
           * convert a rule like :host(.foo) > .bar { }
           *
           * to
           *
           * .foo<scopeName> > .bar
           */

        }, {
          key: "_convertColonHost",
          value: function _convertColonHost(cssText) {
            return cssText.replace(_cssColonHostRe, function (_, hostSelectors, otherSelectors) {
              if (hostSelectors) {
                var convertedSelectors = [];
                var hostSelectorArray = hostSelectors.split(',').map(function (p) {
                  return p.trim();
                });

                var _iterator16 = _createForOfIteratorHelper(hostSelectorArray),
                    _step16;

                try {
                  for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
                    var hostSelector = _step16.value;
                    if (!hostSelector) break;
                    var convertedSelector = _polyfillHostNoCombinator + hostSelector.replace(_polyfillHost, '') + otherSelectors;
                    convertedSelectors.push(convertedSelector);
                  }
                } catch (err) {
                  _iterator16.e(err);
                } finally {
                  _iterator16.f();
                }

                return convertedSelectors.join(',');
              } else {
                return _polyfillHostNoCombinator + otherSelectors;
              }
            });
          }
          /*
           * convert a rule like :host-context(.foo) > .bar { }
           *
           * to
           *
           * .foo<scopeName> > .bar, .foo <scopeName> > .bar { }
           *
           * and
           *
           * :host-context(.foo:host) .bar { ... }
           *
           * to
           *
           * .foo<scopeName> .bar { ... }
           */

        }, {
          key: "_convertColonHostContext",
          value: function _convertColonHostContext(cssText) {
            return cssText.replace(_cssColonHostContextReGlobal, function (selectorText) {
              // We have captured a selector that contains a `:host-context` rule.
              var _a; // For backward compatibility `:host-context` may contain a comma separated list of selectors.
              // Each context selector group will contain a list of host-context selectors that must match
              // an ancestor of the host.
              // (Normally `contextSelectorGroups` will only contain a single array of context selectors.)


              var contextSelectorGroups = [[]]; // There may be more than `:host-context` in this selector so `selectorText` could look like:
              // `:host-context(.one):host-context(.two)`.
              // Execute `_cssColonHostContextRe` over and over until we have extracted all the
              // `:host-context` selectors from this selector.

              var match;

              while (match = _cssColonHostContextRe.exec(selectorText)) {
                // `match` = [':host-context(<selectors>)<rest>', <selectors>, <rest>]
                // The `<selectors>` could actually be a comma separated list: `:host-context(.one, .two)`.
                var newContextSelectors = ((_a = match[1]) !== null && _a !== void 0 ? _a : '').trim().split(',').map(function (m) {
                  return m.trim();
                }).filter(function (m) {
                  return m !== '';
                }); // We must duplicate the current selector group for each of these new selectors.
                // For example if the current groups are:
                // ```
                // [
                //   ['a', 'b', 'c'],
                //   ['x', 'y', 'z'],
                // ]
                // ```
                // And we have a new set of comma separated selectors: `:host-context(m,n)` then the new
                // groups are:
                // ```
                // [
                //   ['a', 'b', 'c', 'm'],
                //   ['x', 'y', 'z', 'm'],
                //   ['a', 'b', 'c', 'n'],
                //   ['x', 'y', 'z', 'n'],
                // ]
                // ```

                var contextSelectorGroupsLength = contextSelectorGroups.length;
                repeatGroups(contextSelectorGroups, newContextSelectors.length);

                for (var i = 0; i < newContextSelectors.length; i++) {
                  for (var j = 0; j < contextSelectorGroupsLength; j++) {
                    contextSelectorGroups[j + i * contextSelectorGroupsLength].push(newContextSelectors[i]);
                  }
                } // Update the `selectorText` and see repeat to see if there are more `:host-context`s.


                selectorText = match[2];
              } // The context selectors now must be combined with each other to capture all the possible
              // selectors that `:host-context` can match. See `combineHostContextSelectors()` for more
              // info about how this is done.


              return contextSelectorGroups.map(function (contextSelectors) {
                return combineHostContextSelectors(contextSelectors, selectorText);
              }).join(', ');
            });
          }
          /*
           * Convert combinators like ::shadow and pseudo-elements like ::content
           * by replacing with space.
           */

        }, {
          key: "_convertShadowDOMSelectors",
          value: function _convertShadowDOMSelectors(cssText) {
            return _shadowDOMSelectorsRe.reduce(function (result, pattern) {
              return result.replace(pattern, ' ');
            }, cssText);
          } // change a selector like 'div' to 'name div'

        }, {
          key: "_scopeSelectors",
          value: function _scopeSelectors(cssText, scopeSelector, hostSelector) {
            var _this242 = this;

            return processRules(cssText, function (rule) {
              var selector = rule.selector;
              var content = rule.content;

              if (rule.selector[0] != '@') {
                selector = _this242._scopeSelector(rule.selector, scopeSelector, hostSelector, _this242.strictStyling);
              } else if (rule.selector.startsWith('@media') || rule.selector.startsWith('@supports') || rule.selector.startsWith('@page') || rule.selector.startsWith('@document')) {
                content = _this242._scopeSelectors(rule.content, scopeSelector, hostSelector);
              }

              return new CssRule(selector, content);
            });
          }
        }, {
          key: "_scopeSelector",
          value: function _scopeSelector(selector, scopeSelector, hostSelector, strict) {
            var _this243 = this;

            return selector.split(',').map(function (part) {
              return part.trim().split(_shadowDeepSelectors);
            }).map(function (deepParts) {
              var _deepParts = _toArray(deepParts),
                  shallowPart = _deepParts[0],
                  otherParts = _deepParts.slice(1);

              var applyScope = function applyScope(shallowPart) {
                if (_this243._selectorNeedsScoping(shallowPart, scopeSelector)) {
                  return strict ? _this243._applyStrictSelectorScope(shallowPart, scopeSelector, hostSelector) : _this243._applySelectorScope(shallowPart, scopeSelector, hostSelector);
                } else {
                  return shallowPart;
                }
              };

              return [applyScope(shallowPart)].concat(_toConsumableArray(otherParts)).join(' ');
            }).join(', ');
          }
        }, {
          key: "_selectorNeedsScoping",
          value: function _selectorNeedsScoping(selector, scopeSelector) {
            var re = this._makeScopeMatcher(scopeSelector);

            return !re.test(selector);
          }
        }, {
          key: "_makeScopeMatcher",
          value: function _makeScopeMatcher(scopeSelector) {
            var lre = /\[/g;
            var rre = /\]/g;
            scopeSelector = scopeSelector.replace(lre, '\\[').replace(rre, '\\]');
            return new RegExp('^(' + scopeSelector + ')' + _selectorReSuffix, 'm');
          }
        }, {
          key: "_applySelectorScope",
          value: function _applySelectorScope(selector, scopeSelector, hostSelector) {
            // Difference from webcomponents.js: scopeSelector could not be an array
            return this._applySimpleSelectorScope(selector, scopeSelector, hostSelector);
          } // scope via name and [is=name]

        }, {
          key: "_applySimpleSelectorScope",
          value: function _applySimpleSelectorScope(selector, scopeSelector, hostSelector) {
            // In Android browser, the lastIndex is not reset when the regex is used in String.replace()
            _polyfillHostRe.lastIndex = 0;

            if (_polyfillHostRe.test(selector)) {
              var replaceBy = this.strictStyling ? "[".concat(hostSelector, "]") : scopeSelector;
              return selector.replace(_polyfillHostNoCombinatorRe, function (hnc, selector) {
                return selector.replace(/([^:]*)(:*)(.*)/, function (_, before, colon, after) {
                  return before + replaceBy + colon + after;
                });
              }).replace(_polyfillHostRe, replaceBy + ' ');
            }

            return scopeSelector + ' ' + selector;
          } // return a selector with [name] suffix on each simple selector
          // e.g. .foo.bar > .zot becomes .foo[name].bar[name] > .zot[name]  /** @internal */

        }, {
          key: "_applyStrictSelectorScope",
          value: function _applyStrictSelectorScope(selector, scopeSelector, hostSelector) {
            var _this244 = this;

            var isRe = /\[is=([^\]]*)\]/g;
            scopeSelector = scopeSelector.replace(isRe, function (_) {
              return arguments.length <= 1 ? undefined : arguments[1];
            });
            var attrName = '[' + scopeSelector + ']';

            var _scopeSelectorPart = function _scopeSelectorPart(p) {
              var scopedP = p.trim();

              if (!scopedP) {
                return '';
              }

              if (p.indexOf(_polyfillHostNoCombinator) > -1) {
                scopedP = _this244._applySimpleSelectorScope(p, scopeSelector, hostSelector);
              } else {
                // remove :host since it should be unnecessary
                var t = p.replace(_polyfillHostRe, '');

                if (t.length > 0) {
                  var matches = t.match(/([^:]*)(:*)(.*)/);

                  if (matches) {
                    scopedP = matches[1] + attrName + matches[2] + matches[3];
                  }
                }
              }

              return scopedP;
            };

            var safeContent = new SafeSelector(selector);
            selector = safeContent.content();
            var scopedSelector = '';
            var startIndex = 0;
            var res;
            var sep = /( |>|\+|~(?!=))\s*/g; // If a selector appears before :host it should not be shimmed as it
            // matches on ancestor elements and not on elements in the host's shadow
            // `:host-context(div)` is transformed to
            // `-shadowcsshost-no-combinatordiv, div -shadowcsshost-no-combinator`
            // the `div` is not part of the component in the 2nd selectors and should not be scoped.
            // Historically `component-tag:host` was matching the component so we also want to preserve
            // this behavior to avoid breaking legacy apps (it should not match).
            // The behavior should be:
            // - `tag:host` -> `tag[h]` (this is to avoid breaking legacy apps, should not match anything)
            // - `tag :host` -> `tag [h]` (`tag` is not scoped because it's considered part of a
            //   `:host-context(tag)`)

            var hasHost = selector.indexOf(_polyfillHostNoCombinator) > -1; // Only scope parts after the first `-shadowcsshost-no-combinator` when it is present

            var shouldScope = !hasHost;

            while ((res = sep.exec(selector)) !== null) {
              var separator = res[1];

              var _part = selector.slice(startIndex, res.index).trim();

              shouldScope = shouldScope || _part.indexOf(_polyfillHostNoCombinator) > -1;
              var scopedPart = shouldScope ? _scopeSelectorPart(_part) : _part;
              scopedSelector += "".concat(scopedPart, " ").concat(separator, " ");
              startIndex = sep.lastIndex;
            }

            var part = selector.substring(startIndex);
            shouldScope = shouldScope || part.indexOf(_polyfillHostNoCombinator) > -1;
            scopedSelector += shouldScope ? _scopeSelectorPart(part) : part; // replace the placeholders with their original values

            return safeContent.restore(scopedSelector);
          }
        }, {
          key: "_insertPolyfillHostInCssText",
          value: function _insertPolyfillHostInCssText(selector) {
            return selector.replace(_colonHostContextRe, _polyfillHostContext).replace(_colonHostRe, _polyfillHost);
          }
        }]);

        return ShadowCss;
      }();

      var SafeSelector = /*#__PURE__*/function () {
        function SafeSelector(selector) {
          var _this245 = this;

          _classCallCheck2(this, SafeSelector);

          this.placeholders = [];
          this.index = 0; // Replaces attribute selectors with placeholders.
          // The WS in [attr="va lue"] would otherwise be interpreted as a selector separator.

          selector = this._escapeRegexMatches(selector, /(\[[^\]]*\])/g); // CSS allows for certain special characters to be used in selectors if they're escaped.
          // E.g. `.foo:blue` won't match a class called `foo:blue`, because the colon denotes a
          // pseudo-class, but writing `.foo\:blue` will match, because the colon was escaped.
          // Replace all escape sequences (`\` followed by a character) with a placeholder so
          // that our handling of pseudo-selectors doesn't mess with them.

          selector = this._escapeRegexMatches(selector, /(\\.)/g); // Replaces the expression in `:nth-child(2n + 1)` with a placeholder.
          // WS and "+" would otherwise be interpreted as selector separators.

          this._content = selector.replace(/(:nth-[-\w]+)(\([^)]+\))/g, function (_, pseudo, exp) {
            var replaceBy = "__ph-".concat(_this245.index, "__");

            _this245.placeholders.push(exp);

            _this245.index++;
            return pseudo + replaceBy;
          });
        }

        _createClass2(SafeSelector, [{
          key: "restore",
          value: function restore(content) {
            var _this246 = this;

            return content.replace(/__ph-(\d+)__/g, function (_ph, index) {
              return _this246.placeholders[+index];
            });
          }
        }, {
          key: "content",
          value: function content() {
            return this._content;
          }
          /**
           * Replaces all of the substrings that match a regex within a
           * special string (e.g. `__ph-0__`, `__ph-1__`, etc).
           */

        }, {
          key: "_escapeRegexMatches",
          value: function _escapeRegexMatches(content, pattern) {
            var _this247 = this;

            return content.replace(pattern, function (_, keep) {
              var replaceBy = "__ph-".concat(_this247.index, "__");

              _this247.placeholders.push(keep);

              _this247.index++;
              return replaceBy;
            });
          }
        }]);

        return SafeSelector;
      }();

      var _cssContentNextSelectorRe = /polyfill-next-selector[^}]*content:[\s]*?(['"])(.*?)\1[;\s]*}([^{]*?){/gim;
      var _cssContentRuleRe = /(polyfill-rule)[^}]*(content:[\s]*(['"])(.*?)\3)[;\s]*[^}]*}/gim;
      var _cssContentUnscopedRuleRe = /(polyfill-unscoped-rule)[^}]*(content:[\s]*(['"])(.*?)\3)[;\s]*[^}]*}/gim;
      var _polyfillHost = '-shadowcsshost'; // note: :host-context pre-processed to -shadowcsshostcontext.

      var _polyfillHostContext = '-shadowcsscontext';

      var _parenSuffix = '(?:\\((' + '(?:\\([^)(]*\\)|[^)(]*)+?' + ')\\))?([^,{]*)';

      var _cssColonHostRe = new RegExp(_polyfillHost + _parenSuffix, 'gim');

      var _cssColonHostContextReGlobal = new RegExp(_polyfillHostContext + _parenSuffix, 'gim');

      var _cssColonHostContextRe = new RegExp(_polyfillHostContext + _parenSuffix, 'im');

      var _polyfillHostNoCombinator = _polyfillHost + '-no-combinator';

      var _polyfillHostNoCombinatorRe = /-shadowcsshost-no-combinator([^\s]*)/;
      var _shadowDOMSelectorsRe = [/::shadow/g, /::content/g, // Deprecated selectors
      /\/shadow-deep\//g, /\/shadow\//g]; // The deep combinator is deprecated in the CSS spec
      // Support for `>>>`, `deep`, `::ng-deep` is then also deprecated and will be removed in the future.
      // see https://github.com/angular/angular/pull/17677

      var _shadowDeepSelectors = /(?:>>>)|(?:\/deep\/)|(?:::ng-deep)/g;
      var _selectorReSuffix = '([>\\s~+\[.,{:][\\s\\S]*)?$';
      var _polyfillHostRe = /-shadowcsshost/gim;
      var _colonHostRe = /:host/gim;
      var _colonHostContextRe = /:host-context/gim;
      var _commentRe = /\/\*\s*[\s\S]*?\*\//g;

      function stripComments(input) {
        return input.replace(_commentRe, '');
      }

      var _commentWithHashRe = /\/\*\s*#\s*source(Mapping)?URL=[\s\S]+?\*\//g;

      function extractCommentsWithHash(input) {
        return input.match(_commentWithHashRe) || [];
      }

      var BLOCK_PLACEHOLDER = '%BLOCK%';
      var QUOTE_PLACEHOLDER = '%QUOTED%';
      var _ruleRe = /(\s*)([^;\{\}]+?)(\s*)((?:{%BLOCK%}?\s*;?)|(?:\s*;))/g;
      var _quotedRe = /%QUOTED%/g;
      var CONTENT_PAIRS = new Map([['{', '}']]);
      var QUOTE_PAIRS = new Map([["\"", "\""], ["'", "'"]]);

      var CssRule = function CssRule(selector, content) {
        _classCallCheck2(this, CssRule);

        this.selector = selector;
        this.content = content;
      };

      function processRules(input, ruleCallback) {
        var inputWithEscapedQuotes = escapeBlocks(input, QUOTE_PAIRS, QUOTE_PLACEHOLDER);
        var inputWithEscapedBlocks = escapeBlocks(inputWithEscapedQuotes.escapedString, CONTENT_PAIRS, BLOCK_PLACEHOLDER);
        var nextBlockIndex = 0;
        var nextQuoteIndex = 0;
        return inputWithEscapedBlocks.escapedString.replace(_ruleRe, function () {
          var selector = arguments.length <= 2 ? undefined : arguments[2];
          var content = '';
          var suffix = arguments.length <= 4 ? undefined : arguments[4];
          var contentPrefix = '';

          if (suffix && suffix.startsWith('{' + BLOCK_PLACEHOLDER)) {
            content = inputWithEscapedBlocks.blocks[nextBlockIndex++];
            suffix = suffix.substring(BLOCK_PLACEHOLDER.length + 1);
            contentPrefix = '{';
          }

          var rule = ruleCallback(new CssRule(selector, content));
          return "".concat(arguments.length <= 1 ? undefined : arguments[1]).concat(rule.selector).concat(arguments.length <= 3 ? undefined : arguments[3]).concat(contentPrefix).concat(rule.content).concat(suffix);
        }).replace(_quotedRe, function () {
          return inputWithEscapedQuotes.blocks[nextQuoteIndex++];
        });
      }

      var StringWithEscapedBlocks = function StringWithEscapedBlocks(escapedString, blocks) {
        _classCallCheck2(this, StringWithEscapedBlocks);

        this.escapedString = escapedString;
        this.blocks = blocks;
      };

      function escapeBlocks(input, charPairs, placeholder) {
        var resultParts = [];
        var escapedBlocks = [];
        var openCharCount = 0;
        var nonBlockStartIndex = 0;
        var blockStartIndex = -1;
        var openChar;
        var closeChar;

        for (var i = 0; i < input.length; i++) {
          var _char = input[i];

          if (_char === '\\') {
            i++;
          } else if (_char === closeChar) {
            openCharCount--;

            if (openCharCount === 0) {
              escapedBlocks.push(input.substring(blockStartIndex, i));
              resultParts.push(placeholder);
              nonBlockStartIndex = i;
              blockStartIndex = -1;
              openChar = closeChar = undefined;
            }
          } else if (_char === openChar) {
            openCharCount++;
          } else if (openCharCount === 0 && charPairs.has(_char)) {
            openChar = _char;
            closeChar = charPairs.get(_char);
            openCharCount = 1;
            blockStartIndex = i + 1;
            resultParts.push(input.substring(nonBlockStartIndex, blockStartIndex));
          }
        }

        if (blockStartIndex !== -1) {
          escapedBlocks.push(input.substring(blockStartIndex));
          resultParts.push(placeholder);
        } else {
          resultParts.push(input.substring(nonBlockStartIndex));
        }

        return new StringWithEscapedBlocks(resultParts.join(''), escapedBlocks);
      }
      /**
       * Combine the `contextSelectors` with the `hostMarker` and the `otherSelectors`
       * to create a selector that matches the same as `:host-context()`.
       *
       * Given a single context selector `A` we need to output selectors that match on the host and as an
       * ancestor of the host:
       *
       * ```
       * A <hostMarker>, A<hostMarker> {}
       * ```
       *
       * When there is more than one context selector we also have to create combinations of those
       * selectors with each other. For example if there are `A` and `B` selectors the output is:
       *
       * ```
       * AB<hostMarker>, AB <hostMarker>, A B<hostMarker>,
       * B A<hostMarker>, A B <hostMarker>, B A <hostMarker> {}
       * ```
       *
       * And so on...
       *
       * @param hostMarker the string that selects the host element.
       * @param contextSelectors an array of context selectors that will be combined.
       * @param otherSelectors the rest of the selectors that are not context selectors.
       */


      function combineHostContextSelectors(contextSelectors, otherSelectors) {
        var hostMarker = _polyfillHostNoCombinator;

        var otherSelectorsHasHost = _polyfillHostRe.test(otherSelectors); // If there are no context selectors then just output a host marker


        if (contextSelectors.length === 0) {
          return hostMarker + otherSelectors;
        }

        var combined = [contextSelectors.pop() || ''];

        while (contextSelectors.length > 0) {
          var length = combined.length;
          var contextSelector = contextSelectors.pop();

          for (var i = 0; i < length; i++) {
            var previousSelectors = combined[i]; // Add the new selector as a descendant of the previous selectors

            combined[length * 2 + i] = previousSelectors + ' ' + contextSelector; // Add the new selector as an ancestor of the previous selectors

            combined[length + i] = contextSelector + ' ' + previousSelectors; // Add the new selector to act on the same element as the previous selectors

            combined[i] = contextSelector + previousSelectors;
          }
        } // Finally connect the selector to the `hostMarker`s: either acting directly on the host
        // (A<hostMarker>) or as an ancestor (A <hostMarker>).


        return combined.map(function (s) {
          return otherSelectorsHasHost ? "".concat(s).concat(otherSelectors) : "".concat(s).concat(hostMarker).concat(otherSelectors, ", ").concat(s, " ").concat(hostMarker).concat(otherSelectors);
        }).join(',');
      }
      /**
       * Mutate the given `groups` array so that there are `multiples` clones of the original array
       * stored.
       *
       * For example `repeatGroups([a, b], 3)` will result in `[a, b, a, b, a, b]` - but importantly the
       * newly added groups will be clones of the original.
       *
       * @param groups An array of groups of strings that will be repeated. This array is mutated
       *     in-place.
       * @param multiples The number of times the current groups should appear.
       */


      function repeatGroups(groups, multiples) {
        var length = groups.length;

        for (var i = 1; i < multiples; i++) {
          for (var j = 0; j < length; j++) {
            groups[j + i * length] = groups[j].slice(0);
          }
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var COMPONENT_VARIABLE = '%COMP%';
      var HOST_ATTR = "_nghost-".concat(COMPONENT_VARIABLE);
      var CONTENT_ATTR = "_ngcontent-".concat(COMPONENT_VARIABLE);

      var StylesCompileDependency = function StylesCompileDependency(name, moduleUrl, setValue) {
        _classCallCheck2(this, StylesCompileDependency);

        this.name = name;
        this.moduleUrl = moduleUrl;
        this.setValue = setValue;
      };

      var CompiledStylesheet = function CompiledStylesheet(outputCtx, stylesVar, dependencies, isShimmed, meta) {
        _classCallCheck2(this, CompiledStylesheet);

        this.outputCtx = outputCtx;
        this.stylesVar = stylesVar;
        this.dependencies = dependencies;
        this.isShimmed = isShimmed;
        this.meta = meta;
      };

      var StyleCompiler = /*#__PURE__*/function () {
        function StyleCompiler(_urlResolver) {
          _classCallCheck2(this, StyleCompiler);

          this._urlResolver = _urlResolver;
          this._shadowCss = new ShadowCss();
        }

        _createClass2(StyleCompiler, [{
          key: "compileComponent",
          value: function compileComponent(outputCtx, comp) {
            var template = comp.template;
            return this._compileStyles(outputCtx, comp, new CompileStylesheetMetadata({
              styles: template.styles,
              styleUrls: template.styleUrls,
              moduleUrl: identifierModuleUrl(comp.type)
            }), this.needsStyleShim(comp), true);
          }
        }, {
          key: "compileStyles",
          value: function compileStyles(outputCtx, comp, stylesheet) {
            var shim = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : this.needsStyleShim(comp);
            return this._compileStyles(outputCtx, comp, stylesheet, shim, false);
          }
        }, {
          key: "needsStyleShim",
          value: function needsStyleShim(comp) {
            return comp.template.encapsulation === ViewEncapsulation.Emulated;
          }
        }, {
          key: "_compileStyles",
          value: function _compileStyles(outputCtx, comp, stylesheet, shim, isComponentStylesheet) {
            var _this248 = this;

            var styleExpressions = stylesheet.styles.map(function (plainStyle) {
              return literal(_this248._shimIfNeeded(plainStyle, shim));
            });
            var dependencies = [];
            stylesheet.styleUrls.forEach(function (styleUrl) {
              var exprIndex = styleExpressions.length; // Note: This placeholder will be filled later.

              styleExpressions.push(null);
              dependencies.push(new StylesCompileDependency(getStylesVarName(null), styleUrl, function (value) {
                return styleExpressions[exprIndex] = outputCtx.importExpr(value);
              }));
            }); // styles variable contains plain strings and arrays of other styles arrays (recursive),
            // so we set its type to dynamic.

            var stylesVar = getStylesVarName(isComponentStylesheet ? comp : null);
            var stmt = variable(stylesVar).set(literalArr(styleExpressions, new ArrayType(DYNAMIC_TYPE, [TypeModifier.Const]))).toDeclStmt(null, isComponentStylesheet ? [StmtModifier.Final] : [StmtModifier.Final, StmtModifier.Exported]);
            outputCtx.statements.push(stmt);
            return new CompiledStylesheet(outputCtx, stylesVar, dependencies, shim, stylesheet);
          }
        }, {
          key: "_shimIfNeeded",
          value: function _shimIfNeeded(style, shim) {
            return shim ? this._shadowCss.shimCssText(style, CONTENT_ATTR, HOST_ATTR) : style;
          }
        }]);

        return StyleCompiler;
      }();

      function getStylesVarName(component) {
        var result = "styles";

        if (component) {
          result += "_".concat(identifierName(component.type));
        }

        return result;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A path is an ordered set of elements. Typically a path is to  a
       * particular offset in a source file. The head of the list is the top
       * most node. The tail is the node that contains the offset directly.
       *
       * For example, the expression `a + b + c` might have an ast that looks
       * like:
       *     +
       *    / \
       *   a   +
       *      / \
       *     b   c
       *
       * The path to the node at offset 9 would be `['+' at 1-10, '+' at 7-10,
       * 'c' at 9-10]` and the path the node at offset 1 would be
       * `['+' at 1-10, 'a' at 1-2]`.
       */


      var AstPath = /*#__PURE__*/function () {
        function AstPath(path) {
          var position = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;

          _classCallCheck2(this, AstPath);

          this.path = path;
          this.position = position;
        }

        _createClass2(AstPath, [{
          key: "empty",
          get: function get() {
            return !this.path || !this.path.length;
          }
        }, {
          key: "head",
          get: function get() {
            return this.path[0];
          }
        }, {
          key: "tail",
          get: function get() {
            return this.path[this.path.length - 1];
          }
        }, {
          key: "parentOf",
          value: function parentOf(node) {
            return node && this.path[this.path.indexOf(node) - 1];
          }
        }, {
          key: "childOf",
          value: function childOf(node) {
            return this.path[this.path.indexOf(node) + 1];
          }
        }, {
          key: "first",
          value: function first(ctor) {
            for (var i = this.path.length - 1; i >= 0; i--) {
              var item = this.path[i];
              if (item instanceof ctor) return item;
            }
          }
        }, {
          key: "push",
          value: function push(node) {
            this.path.push(node);
          }
        }, {
          key: "pop",
          value: function pop() {
            return this.path.pop();
          }
        }]);

        return AstPath;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var NodeWithI18n = function NodeWithI18n(sourceSpan, i18n) {
        _classCallCheck2(this, NodeWithI18n);

        this.sourceSpan = sourceSpan;
        this.i18n = i18n;
      };

      var Text$3 = /*#__PURE__*/function (_NodeWithI18n) {
        _inherits2(Text$3, _NodeWithI18n);

        var _super138 = _createSuper(Text$3);

        function Text$3(value, sourceSpan, i18n) {
          var _this249;

          _classCallCheck2(this, Text$3);

          _this249 = _super138.call(this, sourceSpan, i18n);
          _this249.value = value;
          return _this249;
        }

        _createClass2(Text$3, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitText(this, context);
          }
        }]);

        return Text$3;
      }(NodeWithI18n);

      var Expansion = /*#__PURE__*/function (_NodeWithI18n2) {
        _inherits2(Expansion, _NodeWithI18n2);

        var _super139 = _createSuper(Expansion);

        function Expansion(switchValue, type, cases, sourceSpan, switchValueSourceSpan, i18n) {
          var _this250;

          _classCallCheck2(this, Expansion);

          _this250 = _super139.call(this, sourceSpan, i18n);
          _this250.switchValue = switchValue;
          _this250.type = type;
          _this250.cases = cases;
          _this250.switchValueSourceSpan = switchValueSourceSpan;
          return _this250;
        }

        _createClass2(Expansion, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitExpansion(this, context);
          }
        }]);

        return Expansion;
      }(NodeWithI18n);

      var ExpansionCase = /*#__PURE__*/function () {
        function ExpansionCase(value, expression, sourceSpan, valueSourceSpan, expSourceSpan) {
          _classCallCheck2(this, ExpansionCase);

          this.value = value;
          this.expression = expression;
          this.sourceSpan = sourceSpan;
          this.valueSourceSpan = valueSourceSpan;
          this.expSourceSpan = expSourceSpan;
        }

        _createClass2(ExpansionCase, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitExpansionCase(this, context);
          }
        }]);

        return ExpansionCase;
      }();

      var Attribute = /*#__PURE__*/function (_NodeWithI18n3) {
        _inherits2(Attribute, _NodeWithI18n3);

        var _super140 = _createSuper(Attribute);

        function Attribute(name, value, sourceSpan, keySpan, valueSpan, i18n) {
          var _this251;

          _classCallCheck2(this, Attribute);

          _this251 = _super140.call(this, sourceSpan, i18n);
          _this251.name = name;
          _this251.value = value;
          _this251.keySpan = keySpan;
          _this251.valueSpan = valueSpan;
          return _this251;
        }

        _createClass2(Attribute, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitAttribute(this, context);
          }
        }]);

        return Attribute;
      }(NodeWithI18n);

      var Element$1 = /*#__PURE__*/function (_NodeWithI18n4) {
        _inherits2(Element$1, _NodeWithI18n4);

        var _super141 = _createSuper(Element$1);

        function Element$1(name, attrs, children, sourceSpan, startSourceSpan) {
          var _this252;

          var endSourceSpan = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;
          var i18n = arguments.length > 6 ? arguments[6] : undefined;

          _classCallCheck2(this, Element$1);

          _this252 = _super141.call(this, sourceSpan, i18n);
          _this252.name = name;
          _this252.attrs = attrs;
          _this252.children = children;
          _this252.startSourceSpan = startSourceSpan;
          _this252.endSourceSpan = endSourceSpan;
          return _this252;
        }

        _createClass2(Element$1, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitElement(this, context);
          }
        }]);

        return Element$1;
      }(NodeWithI18n);

      var Comment = /*#__PURE__*/function () {
        function Comment(value, sourceSpan) {
          _classCallCheck2(this, Comment);

          this.value = value;
          this.sourceSpan = sourceSpan;
        }

        _createClass2(Comment, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitComment(this, context);
          }
        }]);

        return Comment;
      }();

      function visitAll$1(visitor, nodes) {
        var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
        var result = [];
        var visit = visitor.visit ? function (ast) {
          return visitor.visit(ast, context) || ast.visit(visitor, context);
        } : function (ast) {
          return ast.visit(visitor, context);
        };
        nodes.forEach(function (ast) {
          var astResult = visit(ast);

          if (astResult) {
            result.push(astResult);
          }
        });
        return result;
      }

      var RecursiveVisitor$1 = /*#__PURE__*/function () {
        function RecursiveVisitor$1() {
          _classCallCheck2(this, RecursiveVisitor$1);
        }

        _createClass2(RecursiveVisitor$1, [{
          key: "visitElement",
          value: function visitElement(ast, context) {
            this.visitChildren(context, function (visit) {
              visit(ast.attrs);
              visit(ast.children);
            });
          }
        }, {
          key: "visitAttribute",
          value: function visitAttribute(ast, context) {}
        }, {
          key: "visitText",
          value: function visitText(ast, context) {}
        }, {
          key: "visitComment",
          value: function visitComment(ast, context) {}
        }, {
          key: "visitExpansion",
          value: function visitExpansion(ast, context) {
            return this.visitChildren(context, function (visit) {
              visit(ast.cases);
            });
          }
        }, {
          key: "visitExpansionCase",
          value: function visitExpansionCase(ast, context) {}
        }, {
          key: "visitChildren",
          value: function visitChildren(context, cb) {
            var results = [];
            var t = this;

            function visit(children) {
              if (children) results.push(visitAll$1(t, children, context));
            }

            cb(visit);
            return Array.prototype.concat.apply([], results);
          }
        }]);

        return RecursiveVisitor$1;
      }();

      function spanOf(ast) {
        var start = ast.sourceSpan.start.offset;
        var end = ast.sourceSpan.end.offset;

        if (ast instanceof Element$1) {
          if (ast.endSourceSpan) {
            end = ast.endSourceSpan.end.offset;
          } else if (ast.children && ast.children.length) {
            end = spanOf(ast.children[ast.children.length - 1]).end;
          }
        }

        return {
          start: start,
          end: end
        };
      }

      function findNode(nodes, position) {
        var path = [];
        var visitor = new ( /*#__PURE__*/function (_RecursiveVisitor$) {
          _inherits2(_class, _RecursiveVisitor$);

          var _super142 = _createSuper(_class);

          function _class() {
            _classCallCheck2(this, _class);

            return _super142.apply(this, arguments);
          }

          _createClass2(_class, [{
            key: "visit",
            value: function visit(ast, context) {
              var span = spanOf(ast);

              if (span.start <= position && position < span.end) {
                path.push(ast);
              } else {
                // Returning a value here will result in the children being skipped.
                return true;
              }
            }
          }]);

          return _class;
        }(RecursiveVisitor$1))();
        visitAll$1(visitor, nodes);
        return new AstPath(path, position);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var TokenType;

      (function (TokenType) {
        TokenType[TokenType["TAG_OPEN_START"] = 0] = "TAG_OPEN_START";
        TokenType[TokenType["TAG_OPEN_END"] = 1] = "TAG_OPEN_END";
        TokenType[TokenType["TAG_OPEN_END_VOID"] = 2] = "TAG_OPEN_END_VOID";
        TokenType[TokenType["TAG_CLOSE"] = 3] = "TAG_CLOSE";
        TokenType[TokenType["INCOMPLETE_TAG_OPEN"] = 4] = "INCOMPLETE_TAG_OPEN";
        TokenType[TokenType["TEXT"] = 5] = "TEXT";
        TokenType[TokenType["ESCAPABLE_RAW_TEXT"] = 6] = "ESCAPABLE_RAW_TEXT";
        TokenType[TokenType["RAW_TEXT"] = 7] = "RAW_TEXT";
        TokenType[TokenType["COMMENT_START"] = 8] = "COMMENT_START";
        TokenType[TokenType["COMMENT_END"] = 9] = "COMMENT_END";
        TokenType[TokenType["CDATA_START"] = 10] = "CDATA_START";
        TokenType[TokenType["CDATA_END"] = 11] = "CDATA_END";
        TokenType[TokenType["ATTR_NAME"] = 12] = "ATTR_NAME";
        TokenType[TokenType["ATTR_QUOTE"] = 13] = "ATTR_QUOTE";
        TokenType[TokenType["ATTR_VALUE"] = 14] = "ATTR_VALUE";
        TokenType[TokenType["DOC_TYPE"] = 15] = "DOC_TYPE";
        TokenType[TokenType["EXPANSION_FORM_START"] = 16] = "EXPANSION_FORM_START";
        TokenType[TokenType["EXPANSION_CASE_VALUE"] = 17] = "EXPANSION_CASE_VALUE";
        TokenType[TokenType["EXPANSION_CASE_EXP_START"] = 18] = "EXPANSION_CASE_EXP_START";
        TokenType[TokenType["EXPANSION_CASE_EXP_END"] = 19] = "EXPANSION_CASE_EXP_END";
        TokenType[TokenType["EXPANSION_FORM_END"] = 20] = "EXPANSION_FORM_END";
        TokenType[TokenType["EOF"] = 21] = "EOF";
      })(TokenType || (TokenType = {}));

      var Token = function Token(type, parts, sourceSpan) {
        _classCallCheck2(this, Token);

        this.type = type;
        this.parts = parts;
        this.sourceSpan = sourceSpan;
      };

      var TokenError = /*#__PURE__*/function (_ParseError) {
        _inherits2(TokenError, _ParseError);

        var _super143 = _createSuper(TokenError);

        function TokenError(errorMsg, tokenType, span) {
          var _this253;

          _classCallCheck2(this, TokenError);

          _this253 = _super143.call(this, span, errorMsg);
          _this253.tokenType = tokenType;
          return _this253;
        }

        return TokenError;
      }(ParseError);

      var TokenizeResult = function TokenizeResult(tokens, errors, nonNormalizedIcuExpressions) {
        _classCallCheck2(this, TokenizeResult);

        this.tokens = tokens;
        this.errors = errors;
        this.nonNormalizedIcuExpressions = nonNormalizedIcuExpressions;
      };

      function tokenize(source, url, getTagDefinition) {
        var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
        var tokenizer = new _Tokenizer(new ParseSourceFile(source, url), getTagDefinition, options);
        tokenizer.tokenize();
        return new TokenizeResult(mergeTextTokens(tokenizer.tokens), tokenizer.errors, tokenizer.nonNormalizedIcuExpressions);
      }

      var _CR_OR_CRLF_REGEXP = /\r\n?/g;

      function _unexpectedCharacterErrorMsg(charCode) {
        var _char2 = charCode === $EOF ? 'EOF' : String.fromCharCode(charCode);

        return "Unexpected character \"".concat(_char2, "\"");
      }

      function _unknownEntityErrorMsg(entitySrc) {
        return "Unknown entity \"".concat(entitySrc, "\" - use the \"&#<decimal>;\" or  \"&#x<hex>;\" syntax");
      }

      function _unparsableEntityErrorMsg(type, entityStr) {
        return "Unable to parse entity \"".concat(entityStr, "\" - ").concat(type, " character reference entities must end with \";\"");
      }

      var CharacterReferenceType;

      (function (CharacterReferenceType) {
        CharacterReferenceType["HEX"] = "hexadecimal";
        CharacterReferenceType["DEC"] = "decimal";
      })(CharacterReferenceType || (CharacterReferenceType = {}));

      var _ControlFlowError = function _ControlFlowError(error) {
        _classCallCheck2(this, _ControlFlowError);

        this.error = error;
      }; // See https://www.w3.org/TR/html51/syntax.html#writing-html-documents


      var _Tokenizer = /*#__PURE__*/function () {
        /**
         * @param _file The html source file being tokenized.
         * @param _getTagDefinition A function that will retrieve a tag definition for a given tag name.
         * @param options Configuration of the tokenization.
         */
        function _Tokenizer(_file, _getTagDefinition, options) {
          _classCallCheck2(this, _Tokenizer);

          this._getTagDefinition = _getTagDefinition;
          this._currentTokenStart = null;
          this._currentTokenType = null;
          this._expansionCaseStack = [];
          this._inInterpolation = false;
          this.tokens = [];
          this.errors = [];
          this.nonNormalizedIcuExpressions = [];
          this._tokenizeIcu = options.tokenizeExpansionForms || false;
          this._interpolationConfig = options.interpolationConfig || DEFAULT_INTERPOLATION_CONFIG;
          this._leadingTriviaCodePoints = options.leadingTriviaChars && options.leadingTriviaChars.map(function (c) {
            return c.codePointAt(0) || 0;
          });
          var range = options.range || {
            endPos: _file.content.length,
            startPos: 0,
            startLine: 0,
            startCol: 0
          };
          this._cursor = options.escapedString ? new EscapedCharacterCursor(_file, range) : new PlainCharacterCursor(_file, range);
          this._preserveLineEndings = options.preserveLineEndings || false;
          this._escapedString = options.escapedString || false;
          this._i18nNormalizeLineEndingsInICUs = options.i18nNormalizeLineEndingsInICUs || false;

          try {
            this._cursor.init();
          } catch (e) {
            this.handleError(e);
          }
        }

        _createClass2(_Tokenizer, [{
          key: "_processCarriageReturns",
          value: function _processCarriageReturns(content) {
            if (this._preserveLineEndings) {
              return content;
            } // https://www.w3.org/TR/html51/syntax.html#preprocessing-the-input-stream
            // In order to keep the original position in the source, we can not
            // pre-process it.
            // Instead CRs are processed right before instantiating the tokens.


            return content.replace(_CR_OR_CRLF_REGEXP, '\n');
          }
        }, {
          key: "tokenize",
          value: function tokenize() {
            while (this._cursor.peek() !== $EOF) {
              var _start2 = this._cursor.clone();

              try {
                if (this._attemptCharCode($LT)) {
                  if (this._attemptCharCode($BANG)) {
                    if (this._attemptCharCode($LBRACKET)) {
                      this._consumeCdata(_start2);
                    } else if (this._attemptCharCode($MINUS)) {
                      this._consumeComment(_start2);
                    } else {
                      this._consumeDocType(_start2);
                    }
                  } else if (this._attemptCharCode($SLASH)) {
                    this._consumeTagClose(_start2);
                  } else {
                    this._consumeTagOpen(_start2);
                  }
                } else if (!(this._tokenizeIcu && this._tokenizeExpansionForm())) {
                  this._consumeText();
                }
              } catch (e) {
                this.handleError(e);
              }
            }

            this._beginToken(TokenType.EOF);

            this._endToken([]);
          }
          /**
           * @returns whether an ICU token has been created
           * @internal
           */

        }, {
          key: "_tokenizeExpansionForm",
          value: function _tokenizeExpansionForm() {
            if (this.isExpansionFormStart()) {
              this._consumeExpansionFormStart();

              return true;
            }

            if (isExpansionCaseStart(this._cursor.peek()) && this._isInExpansionForm()) {
              this._consumeExpansionCaseStart();

              return true;
            }

            if (this._cursor.peek() === $RBRACE) {
              if (this._isInExpansionCase()) {
                this._consumeExpansionCaseEnd();

                return true;
              }

              if (this._isInExpansionForm()) {
                this._consumeExpansionFormEnd();

                return true;
              }
            }

            return false;
          }
        }, {
          key: "_beginToken",
          value: function _beginToken(type) {
            var start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._cursor.clone();
            this._currentTokenStart = start;
            this._currentTokenType = type;
          }
        }, {
          key: "_endToken",
          value: function _endToken(parts, end) {
            if (this._currentTokenStart === null) {
              throw new TokenError('Programming error - attempted to end a token when there was no start to the token', this._currentTokenType, this._cursor.getSpan(end));
            }

            if (this._currentTokenType === null) {
              throw new TokenError('Programming error - attempted to end a token which has no token type', null, this._cursor.getSpan(this._currentTokenStart));
            }

            var token = new Token(this._currentTokenType, parts, this._cursor.getSpan(this._currentTokenStart, this._leadingTriviaCodePoints));
            this.tokens.push(token);
            this._currentTokenStart = null;
            this._currentTokenType = null;
            return token;
          }
        }, {
          key: "_createError",
          value: function _createError(msg, span) {
            if (this._isInExpansionForm()) {
              msg += " (Do you have an unescaped \"{\" in your template? Use \"{{ '{' }}\") to escape it.)";
            }

            var error = new TokenError(msg, this._currentTokenType, span);
            this._currentTokenStart = null;
            this._currentTokenType = null;
            return new _ControlFlowError(error);
          }
        }, {
          key: "handleError",
          value: function handleError(e) {
            if (e instanceof CursorError) {
              e = this._createError(e.msg, this._cursor.getSpan(e.cursor));
            }

            if (e instanceof _ControlFlowError) {
              this.errors.push(e.error);
            } else {
              throw e;
            }
          }
        }, {
          key: "_attemptCharCode",
          value: function _attemptCharCode(charCode) {
            if (this._cursor.peek() === charCode) {
              this._cursor.advance();

              return true;
            }

            return false;
          }
        }, {
          key: "_attemptCharCodeCaseInsensitive",
          value: function _attemptCharCodeCaseInsensitive(charCode) {
            if (compareCharCodeCaseInsensitive(this._cursor.peek(), charCode)) {
              this._cursor.advance();

              return true;
            }

            return false;
          }
        }, {
          key: "_requireCharCode",
          value: function _requireCharCode(charCode) {
            var location = this._cursor.clone();

            if (!this._attemptCharCode(charCode)) {
              throw this._createError(_unexpectedCharacterErrorMsg(this._cursor.peek()), this._cursor.getSpan(location));
            }
          }
        }, {
          key: "_attemptStr",
          value: function _attemptStr(chars) {
            var len = chars.length;

            if (this._cursor.charsLeft() < len) {
              return false;
            }

            var initialPosition = this._cursor.clone();

            for (var i = 0; i < len; i++) {
              if (!this._attemptCharCode(chars.charCodeAt(i))) {
                // If attempting to parse the string fails, we want to reset the parser
                // to where it was before the attempt
                this._cursor = initialPosition;
                return false;
              }
            }

            return true;
          }
        }, {
          key: "_attemptStrCaseInsensitive",
          value: function _attemptStrCaseInsensitive(chars) {
            for (var i = 0; i < chars.length; i++) {
              if (!this._attemptCharCodeCaseInsensitive(chars.charCodeAt(i))) {
                return false;
              }
            }

            return true;
          }
        }, {
          key: "_requireStr",
          value: function _requireStr(chars) {
            var location = this._cursor.clone();

            if (!this._attemptStr(chars)) {
              throw this._createError(_unexpectedCharacterErrorMsg(this._cursor.peek()), this._cursor.getSpan(location));
            }
          }
        }, {
          key: "_attemptCharCodeUntilFn",
          value: function _attemptCharCodeUntilFn(predicate) {
            while (!predicate(this._cursor.peek())) {
              this._cursor.advance();
            }
          }
        }, {
          key: "_requireCharCodeUntilFn",
          value: function _requireCharCodeUntilFn(predicate, len) {
            var start = this._cursor.clone();

            this._attemptCharCodeUntilFn(predicate);

            if (this._cursor.diff(start) < len) {
              throw this._createError(_unexpectedCharacterErrorMsg(this._cursor.peek()), this._cursor.getSpan(start));
            }
          }
        }, {
          key: "_attemptUntilChar",
          value: function _attemptUntilChar(_char3) {
            while (this._cursor.peek() !== _char3) {
              this._cursor.advance();
            }
          }
        }, {
          key: "_readChar",
          value: function _readChar(decodeEntities) {
            if (decodeEntities && this._cursor.peek() === $AMPERSAND) {
              return this._decodeEntity();
            } else {
              // Don't rely upon reading directly from `_input` as the actual char value
              // may have been generated from an escape sequence.
              var _char4 = String.fromCodePoint(this._cursor.peek());

              this._cursor.advance();

              return _char4;
            }
          }
        }, {
          key: "_decodeEntity",
          value: function _decodeEntity() {
            var start = this._cursor.clone();

            this._cursor.advance();

            if (this._attemptCharCode($HASH)) {
              var isHex = this._attemptCharCode($x) || this._attemptCharCode($X);

              var codeStart = this._cursor.clone();

              this._attemptCharCodeUntilFn(isDigitEntityEnd);

              if (this._cursor.peek() != $SEMICOLON) {
                // Advance cursor to include the peeked character in the string provided to the error
                // message.
                this._cursor.advance();

                var entityType = isHex ? CharacterReferenceType.HEX : CharacterReferenceType.DEC;
                throw this._createError(_unparsableEntityErrorMsg(entityType, this._cursor.getChars(start)), this._cursor.getSpan());
              }

              var strNum = this._cursor.getChars(codeStart);

              this._cursor.advance();

              try {
                var charCode = parseInt(strNum, isHex ? 16 : 10);
                return String.fromCharCode(charCode);
              } catch (_a) {
                throw this._createError(_unknownEntityErrorMsg(this._cursor.getChars(start)), this._cursor.getSpan());
              }
            } else {
              var nameStart = this._cursor.clone();

              this._attemptCharCodeUntilFn(isNamedEntityEnd);

              if (this._cursor.peek() != $SEMICOLON) {
                this._cursor = nameStart;
                return '&';
              }

              var name = this._cursor.getChars(nameStart);

              this._cursor.advance();

              var _char5 = NAMED_ENTITIES[name];

              if (!_char5) {
                throw this._createError(_unknownEntityErrorMsg(name), this._cursor.getSpan(start));
              }

              return _char5;
            }
          }
        }, {
          key: "_consumeRawText",
          value: function _consumeRawText(decodeEntities, endMarkerPredicate) {
            this._beginToken(decodeEntities ? TokenType.ESCAPABLE_RAW_TEXT : TokenType.RAW_TEXT);

            var parts = [];

            while (true) {
              var tagCloseStart = this._cursor.clone();

              var foundEndMarker = endMarkerPredicate();
              this._cursor = tagCloseStart;

              if (foundEndMarker) {
                break;
              }

              parts.push(this._readChar(decodeEntities));
            }

            return this._endToken([this._processCarriageReturns(parts.join(''))]);
          }
        }, {
          key: "_consumeComment",
          value: function _consumeComment(start) {
            var _this254 = this;

            this._beginToken(TokenType.COMMENT_START, start);

            this._requireCharCode($MINUS);

            this._endToken([]);

            this._consumeRawText(false, function () {
              return _this254._attemptStr('-->');
            });

            this._beginToken(TokenType.COMMENT_END);

            this._requireStr('-->');

            this._endToken([]);
          }
        }, {
          key: "_consumeCdata",
          value: function _consumeCdata(start) {
            var _this255 = this;

            this._beginToken(TokenType.CDATA_START, start);

            this._requireStr('CDATA[');

            this._endToken([]);

            this._consumeRawText(false, function () {
              return _this255._attemptStr(']]>');
            });

            this._beginToken(TokenType.CDATA_END);

            this._requireStr(']]>');

            this._endToken([]);
          }
        }, {
          key: "_consumeDocType",
          value: function _consumeDocType(start) {
            this._beginToken(TokenType.DOC_TYPE, start);

            var contentStart = this._cursor.clone();

            this._attemptUntilChar($GT);

            var content = this._cursor.getChars(contentStart);

            this._cursor.advance();

            this._endToken([content]);
          }
        }, {
          key: "_consumePrefixAndName",
          value: function _consumePrefixAndName() {
            var nameOrPrefixStart = this._cursor.clone();

            var prefix = '';

            while (this._cursor.peek() !== $COLON && !isPrefixEnd(this._cursor.peek())) {
              this._cursor.advance();
            }

            var nameStart;

            if (this._cursor.peek() === $COLON) {
              prefix = this._cursor.getChars(nameOrPrefixStart);

              this._cursor.advance();

              nameStart = this._cursor.clone();
            } else {
              nameStart = nameOrPrefixStart;
            }

            this._requireCharCodeUntilFn(isNameEnd, prefix === '' ? 0 : 1);

            var name = this._cursor.getChars(nameStart);

            return [prefix, name];
          }
        }, {
          key: "_consumeTagOpen",
          value: function _consumeTagOpen(start) {
            var tagName;
            var prefix;
            var openTagToken;

            try {
              if (!isAsciiLetter(this._cursor.peek())) {
                throw this._createError(_unexpectedCharacterErrorMsg(this._cursor.peek()), this._cursor.getSpan(start));
              }

              openTagToken = this._consumeTagOpenStart(start);
              prefix = openTagToken.parts[0];
              tagName = openTagToken.parts[1];

              this._attemptCharCodeUntilFn(isNotWhitespace);

              while (this._cursor.peek() !== $SLASH && this._cursor.peek() !== $GT && this._cursor.peek() !== $LT) {
                this._consumeAttributeName();

                this._attemptCharCodeUntilFn(isNotWhitespace);

                if (this._attemptCharCode($EQ)) {
                  this._attemptCharCodeUntilFn(isNotWhitespace);

                  this._consumeAttributeValue();
                }

                this._attemptCharCodeUntilFn(isNotWhitespace);
              }

              this._consumeTagOpenEnd();
            } catch (e) {
              if (e instanceof _ControlFlowError) {
                if (openTagToken) {
                  // We errored before we could close the opening tag, so it is incomplete.
                  openTagToken.type = TokenType.INCOMPLETE_TAG_OPEN;
                } else {
                  // When the start tag is invalid, assume we want a "<" as text.
                  // Back to back text tokens are merged at the end.
                  this._beginToken(TokenType.TEXT, start);

                  this._endToken(['<']);
                }

                return;
              }

              throw e;
            }

            var contentTokenType = this._getTagDefinition(tagName).getContentType(prefix);

            if (contentTokenType === TagContentType.RAW_TEXT) {
              this._consumeRawTextWithTagClose(prefix, tagName, false);
            } else if (contentTokenType === TagContentType.ESCAPABLE_RAW_TEXT) {
              this._consumeRawTextWithTagClose(prefix, tagName, true);
            }
          }
        }, {
          key: "_consumeRawTextWithTagClose",
          value: function _consumeRawTextWithTagClose(prefix, tagName, decodeEntities) {
            var _this256 = this;

            this._consumeRawText(decodeEntities, function () {
              if (!_this256._attemptCharCode($LT)) return false;
              if (!_this256._attemptCharCode($SLASH)) return false;

              _this256._attemptCharCodeUntilFn(isNotWhitespace);

              if (!_this256._attemptStrCaseInsensitive(tagName)) return false;

              _this256._attemptCharCodeUntilFn(isNotWhitespace);

              return _this256._attemptCharCode($GT);
            });

            this._beginToken(TokenType.TAG_CLOSE);

            this._requireCharCodeUntilFn(function (code) {
              return code === $GT;
            }, 3);

            this._cursor.advance(); // Consume the `>`


            this._endToken([prefix, tagName]);
          }
        }, {
          key: "_consumeTagOpenStart",
          value: function _consumeTagOpenStart(start) {
            this._beginToken(TokenType.TAG_OPEN_START, start);

            var parts = this._consumePrefixAndName();

            return this._endToken(parts);
          }
        }, {
          key: "_consumeAttributeName",
          value: function _consumeAttributeName() {
            var attrNameStart = this._cursor.peek();

            if (attrNameStart === $SQ || attrNameStart === $DQ) {
              throw this._createError(_unexpectedCharacterErrorMsg(attrNameStart), this._cursor.getSpan());
            }

            this._beginToken(TokenType.ATTR_NAME);

            var prefixAndName = this._consumePrefixAndName();

            this._endToken(prefixAndName);
          }
        }, {
          key: "_consumeAttributeValue",
          value: function _consumeAttributeValue() {
            var value;

            if (this._cursor.peek() === $SQ || this._cursor.peek() === $DQ) {
              this._beginToken(TokenType.ATTR_QUOTE);

              var quoteChar = this._cursor.peek();

              this._cursor.advance();

              this._endToken([String.fromCodePoint(quoteChar)]);

              this._beginToken(TokenType.ATTR_VALUE);

              var parts = [];

              while (this._cursor.peek() !== quoteChar) {
                parts.push(this._readChar(true));
              }

              value = parts.join('');

              this._endToken([this._processCarriageReturns(value)]);

              this._beginToken(TokenType.ATTR_QUOTE);

              this._cursor.advance();

              this._endToken([String.fromCodePoint(quoteChar)]);
            } else {
              this._beginToken(TokenType.ATTR_VALUE);

              var valueStart = this._cursor.clone();

              this._requireCharCodeUntilFn(isNameEnd, 1);

              value = this._cursor.getChars(valueStart);

              this._endToken([this._processCarriageReturns(value)]);
            }
          }
        }, {
          key: "_consumeTagOpenEnd",
          value: function _consumeTagOpenEnd() {
            var tokenType = this._attemptCharCode($SLASH) ? TokenType.TAG_OPEN_END_VOID : TokenType.TAG_OPEN_END;

            this._beginToken(tokenType);

            this._requireCharCode($GT);

            this._endToken([]);
          }
        }, {
          key: "_consumeTagClose",
          value: function _consumeTagClose(start) {
            this._beginToken(TokenType.TAG_CLOSE, start);

            this._attemptCharCodeUntilFn(isNotWhitespace);

            var prefixAndName = this._consumePrefixAndName();

            this._attemptCharCodeUntilFn(isNotWhitespace);

            this._requireCharCode($GT);

            this._endToken(prefixAndName);
          }
        }, {
          key: "_consumeExpansionFormStart",
          value: function _consumeExpansionFormStart() {
            this._beginToken(TokenType.EXPANSION_FORM_START);

            this._requireCharCode($LBRACE);

            this._endToken([]);

            this._expansionCaseStack.push(TokenType.EXPANSION_FORM_START);

            this._beginToken(TokenType.RAW_TEXT);

            var condition = this._readUntil($COMMA);

            var normalizedCondition = this._processCarriageReturns(condition);

            if (this._i18nNormalizeLineEndingsInICUs) {
              // We explicitly want to normalize line endings for this text.
              this._endToken([normalizedCondition]);
            } else {
              // We are not normalizing line endings.
              var conditionToken = this._endToken([condition]);

              if (normalizedCondition !== condition) {
                this.nonNormalizedIcuExpressions.push(conditionToken);
              }
            }

            this._requireCharCode($COMMA);

            this._attemptCharCodeUntilFn(isNotWhitespace);

            this._beginToken(TokenType.RAW_TEXT);

            var type = this._readUntil($COMMA);

            this._endToken([type]);

            this._requireCharCode($COMMA);

            this._attemptCharCodeUntilFn(isNotWhitespace);
          }
        }, {
          key: "_consumeExpansionCaseStart",
          value: function _consumeExpansionCaseStart() {
            this._beginToken(TokenType.EXPANSION_CASE_VALUE);

            var value = this._readUntil($LBRACE).trim();

            this._endToken([value]);

            this._attemptCharCodeUntilFn(isNotWhitespace);

            this._beginToken(TokenType.EXPANSION_CASE_EXP_START);

            this._requireCharCode($LBRACE);

            this._endToken([]);

            this._attemptCharCodeUntilFn(isNotWhitespace);

            this._expansionCaseStack.push(TokenType.EXPANSION_CASE_EXP_START);
          }
        }, {
          key: "_consumeExpansionCaseEnd",
          value: function _consumeExpansionCaseEnd() {
            this._beginToken(TokenType.EXPANSION_CASE_EXP_END);

            this._requireCharCode($RBRACE);

            this._endToken([]);

            this._attemptCharCodeUntilFn(isNotWhitespace);

            this._expansionCaseStack.pop();
          }
        }, {
          key: "_consumeExpansionFormEnd",
          value: function _consumeExpansionFormEnd() {
            this._beginToken(TokenType.EXPANSION_FORM_END);

            this._requireCharCode($RBRACE);

            this._endToken([]);

            this._expansionCaseStack.pop();
          }
        }, {
          key: "_consumeText",
          value: function _consumeText() {
            var start = this._cursor.clone();

            this._beginToken(TokenType.TEXT, start);

            var parts = [];

            do {
              if (this._interpolationConfig && this._attemptStr(this._interpolationConfig.start)) {
                parts.push(this._interpolationConfig.start);
                this._inInterpolation = true;
              } else if (this._interpolationConfig && this._inInterpolation && this._attemptStr(this._interpolationConfig.end)) {
                parts.push(this._interpolationConfig.end);
                this._inInterpolation = false;
              } else {
                parts.push(this._readChar(true));
              }
            } while (!this._isTextEnd());

            this._endToken([this._processCarriageReturns(parts.join(''))]);
          }
        }, {
          key: "_isTextEnd",
          value: function _isTextEnd() {
            if (this._cursor.peek() === $LT || this._cursor.peek() === $EOF) {
              return true;
            }

            if (this._tokenizeIcu && !this._inInterpolation) {
              if (this.isExpansionFormStart()) {
                // start of an expansion form
                return true;
              }

              if (this._cursor.peek() === $RBRACE && this._isInExpansionCase()) {
                // end of and expansion case
                return true;
              }
            }

            return false;
          }
        }, {
          key: "_readUntil",
          value: function _readUntil(_char6) {
            var start = this._cursor.clone();

            this._attemptUntilChar(_char6);

            return this._cursor.getChars(start);
          }
        }, {
          key: "_isInExpansionCase",
          value: function _isInExpansionCase() {
            return this._expansionCaseStack.length > 0 && this._expansionCaseStack[this._expansionCaseStack.length - 1] === TokenType.EXPANSION_CASE_EXP_START;
          }
        }, {
          key: "_isInExpansionForm",
          value: function _isInExpansionForm() {
            return this._expansionCaseStack.length > 0 && this._expansionCaseStack[this._expansionCaseStack.length - 1] === TokenType.EXPANSION_FORM_START;
          }
        }, {
          key: "isExpansionFormStart",
          value: function isExpansionFormStart() {
            if (this._cursor.peek() !== $LBRACE) {
              return false;
            }

            if (this._interpolationConfig) {
              var _start3 = this._cursor.clone();

              var isInterpolation = this._attemptStr(this._interpolationConfig.start);

              this._cursor = _start3;
              return !isInterpolation;
            }

            return true;
          }
        }]);

        return _Tokenizer;
      }();

      function isNotWhitespace(code) {
        return !isWhitespace(code) || code === $EOF;
      }

      function isNameEnd(code) {
        return isWhitespace(code) || code === $GT || code === $LT || code === $SLASH || code === $SQ || code === $DQ || code === $EQ;
      }

      function isPrefixEnd(code) {
        return (code < $a || $z < code) && (code < $A || $Z < code) && (code < $0 || code > $9);
      }

      function isDigitEntityEnd(code) {
        return code == $SEMICOLON || code == $EOF || !isAsciiHexDigit(code);
      }

      function isNamedEntityEnd(code) {
        return code == $SEMICOLON || code == $EOF || !isAsciiLetter(code);
      }

      function isExpansionCaseStart(peek) {
        return peek !== $RBRACE;
      }

      function compareCharCodeCaseInsensitive(code1, code2) {
        return toUpperCaseCharCode(code1) == toUpperCaseCharCode(code2);
      }

      function toUpperCaseCharCode(code) {
        return code >= $a && code <= $z ? code - $a + $A : code;
      }

      function mergeTextTokens(srcTokens) {
        var dstTokens = [];
        var lastDstToken = undefined;

        for (var i = 0; i < srcTokens.length; i++) {
          var token = srcTokens[i];

          if (lastDstToken && lastDstToken.type == TokenType.TEXT && token.type == TokenType.TEXT) {
            lastDstToken.parts[0] += token.parts[0];
            lastDstToken.sourceSpan.end = token.sourceSpan.end;
          } else {
            lastDstToken = token;
            dstTokens.push(lastDstToken);
          }
        }

        return dstTokens;
      }

      var PlainCharacterCursor = /*#__PURE__*/function () {
        function PlainCharacterCursor(fileOrCursor, range) {
          _classCallCheck2(this, PlainCharacterCursor);

          if (fileOrCursor instanceof PlainCharacterCursor) {
            this.file = fileOrCursor.file;
            this.input = fileOrCursor.input;
            this.end = fileOrCursor.end;
            var state = fileOrCursor.state; // Note: avoid using `{...fileOrCursor.state}` here as that has a severe performance penalty.
            // In ES5 bundles the object spread operator is translated into the `__assign` helper, which
            // is not optimized by VMs as efficiently as a raw object literal. Since this constructor is
            // called in tight loops, this difference matters.

            this.state = {
              peek: state.peek,
              offset: state.offset,
              line: state.line,
              column: state.column
            };
          } else {
            if (!range) {
              throw new Error('Programming error: the range argument must be provided with a file argument.');
            }

            this.file = fileOrCursor;
            this.input = fileOrCursor.content;
            this.end = range.endPos;
            this.state = {
              peek: -1,
              offset: range.startPos,
              line: range.startLine,
              column: range.startCol
            };
          }
        }

        _createClass2(PlainCharacterCursor, [{
          key: "clone",
          value: function clone() {
            return new PlainCharacterCursor(this);
          }
        }, {
          key: "peek",
          value: function peek() {
            return this.state.peek;
          }
        }, {
          key: "charsLeft",
          value: function charsLeft() {
            return this.end - this.state.offset;
          }
        }, {
          key: "diff",
          value: function diff(other) {
            return this.state.offset - other.state.offset;
          }
        }, {
          key: "advance",
          value: function advance() {
            this.advanceState(this.state);
          }
        }, {
          key: "init",
          value: function init() {
            this.updatePeek(this.state);
          }
        }, {
          key: "getSpan",
          value: function getSpan(start, leadingTriviaCodePoints) {
            start = start || this;
            var fullStart = start;

            if (leadingTriviaCodePoints) {
              while (this.diff(start) > 0 && leadingTriviaCodePoints.indexOf(start.peek()) !== -1) {
                if (fullStart === start) {
                  start = start.clone();
                }

                start.advance();
              }
            }

            var startLocation = this.locationFromCursor(start);
            var endLocation = this.locationFromCursor(this);
            var fullStartLocation = fullStart !== start ? this.locationFromCursor(fullStart) : startLocation;
            return new ParseSourceSpan(startLocation, endLocation, fullStartLocation);
          }
        }, {
          key: "getChars",
          value: function getChars(start) {
            return this.input.substring(start.state.offset, this.state.offset);
          }
        }, {
          key: "charAt",
          value: function charAt(pos) {
            return this.input.charCodeAt(pos);
          }
        }, {
          key: "advanceState",
          value: function advanceState(state) {
            if (state.offset >= this.end) {
              this.state = state;
              throw new CursorError('Unexpected character "EOF"', this);
            }

            var currentChar = this.charAt(state.offset);

            if (currentChar === $LF) {
              state.line++;
              state.column = 0;
            } else if (!isNewLine(currentChar)) {
              state.column++;
            }

            state.offset++;
            this.updatePeek(state);
          }
        }, {
          key: "updatePeek",
          value: function updatePeek(state) {
            state.peek = state.offset >= this.end ? $EOF : this.charAt(state.offset);
          }
        }, {
          key: "locationFromCursor",
          value: function locationFromCursor(cursor) {
            return new ParseLocation(cursor.file, cursor.state.offset, cursor.state.line, cursor.state.column);
          }
        }]);

        return PlainCharacterCursor;
      }();

      var EscapedCharacterCursor = /*#__PURE__*/function (_PlainCharacterCursor) {
        _inherits2(EscapedCharacterCursor, _PlainCharacterCursor);

        var _super144 = _createSuper(EscapedCharacterCursor);

        function EscapedCharacterCursor(fileOrCursor, range) {
          var _this257;

          _classCallCheck2(this, EscapedCharacterCursor);

          if (fileOrCursor instanceof EscapedCharacterCursor) {
            _this257 = _super144.call(this, fileOrCursor);
            _this257.internalState = Object.assign({}, fileOrCursor.internalState);
          } else {
            _this257 = _super144.call(this, fileOrCursor, range);
            _this257.internalState = _this257.state;
          }

          return _possibleConstructorReturn2(_this257);
        }

        _createClass2(EscapedCharacterCursor, [{
          key: "advance",
          value: function advance() {
            this.state = this.internalState;

            _get2(_getPrototypeOf2(EscapedCharacterCursor.prototype), "advance", this).call(this);

            this.processEscapeSequence();
          }
        }, {
          key: "init",
          value: function init() {
            _get2(_getPrototypeOf2(EscapedCharacterCursor.prototype), "init", this).call(this);

            this.processEscapeSequence();
          }
        }, {
          key: "clone",
          value: function clone() {
            return new EscapedCharacterCursor(this);
          }
        }, {
          key: "getChars",
          value: function getChars(start) {
            var cursor = start.clone();
            var chars = '';

            while (cursor.internalState.offset < this.internalState.offset) {
              chars += String.fromCodePoint(cursor.peek());
              cursor.advance();
            }

            return chars;
          }
          /**
           * Process the escape sequence that starts at the current position in the text.
           *
           * This method is called to ensure that `peek` has the unescaped value of escape sequences.
           */

        }, {
          key: "processEscapeSequence",
          value: function processEscapeSequence() {
            var _this258 = this;

            var peek = function peek() {
              return _this258.internalState.peek;
            };

            if (peek() === $BACKSLASH) {
              // We have hit an escape sequence so we need the internal state to become independent
              // of the external state.
              this.internalState = Object.assign({}, this.state); // Move past the backslash

              this.advanceState(this.internalState); // First check for standard control char sequences

              if (peek() === $n) {
                this.state.peek = $LF;
              } else if (peek() === $r) {
                this.state.peek = $CR;
              } else if (peek() === $v) {
                this.state.peek = $VTAB;
              } else if (peek() === $t) {
                this.state.peek = $TAB;
              } else if (peek() === $b) {
                this.state.peek = $BSPACE;
              } else if (peek() === $f) {
                this.state.peek = $FF;
              } // Now consider more complex sequences
              else if (peek() === $u) {
                  // Unicode code-point sequence
                  this.advanceState(this.internalState); // advance past the `u` char

                  if (peek() === $LBRACE) {
                    // Variable length Unicode, e.g. `\x{123}`
                    this.advanceState(this.internalState); // advance past the `{` char
                    // Advance past the variable number of hex digits until we hit a `}` char

                    var digitStart = this.clone();
                    var length = 0;

                    while (peek() !== $RBRACE) {
                      this.advanceState(this.internalState);
                      length++;
                    }

                    this.state.peek = this.decodeHexDigits(digitStart, length);
                  } else {
                    // Fixed length Unicode, e.g. `\u1234`
                    var _digitStart = this.clone();

                    this.advanceState(this.internalState);
                    this.advanceState(this.internalState);
                    this.advanceState(this.internalState);
                    this.state.peek = this.decodeHexDigits(_digitStart, 4);
                  }
                } else if (peek() === $x) {
                  // Hex char code, e.g. `\x2F`
                  this.advanceState(this.internalState); // advance past the `x` char

                  var _digitStart2 = this.clone();

                  this.advanceState(this.internalState);
                  this.state.peek = this.decodeHexDigits(_digitStart2, 2);
                } else if (isOctalDigit(peek())) {
                  // Octal char code, e.g. `\012`,
                  var octal = '';
                  var _length = 0;
                  var previous = this.clone();

                  while (isOctalDigit(peek()) && _length < 3) {
                    previous = this.clone();
                    octal += String.fromCodePoint(peek());
                    this.advanceState(this.internalState);
                    _length++;
                  }

                  this.state.peek = parseInt(octal, 8); // Backup one char

                  this.internalState = previous.internalState;
                } else if (isNewLine(this.internalState.peek)) {
                  // Line continuation `\` followed by a new line
                  this.advanceState(this.internalState); // advance over the newline

                  this.state = this.internalState;
                } else {
                  // If none of the `if` blocks were executed then we just have an escaped normal character.
                  // In that case we just, effectively, skip the backslash from the character.
                  this.state.peek = this.internalState.peek;
                }
            }
          }
        }, {
          key: "decodeHexDigits",
          value: function decodeHexDigits(start, length) {
            var hex = this.input.substr(start.internalState.offset, length);
            var charCode = parseInt(hex, 16);

            if (!isNaN(charCode)) {
              return charCode;
            } else {
              start.state = start.internalState;
              throw new CursorError('Invalid hexadecimal escape sequence', start);
            }
          }
        }]);

        return EscapedCharacterCursor;
      }(PlainCharacterCursor);

      var CursorError = function CursorError(msg, cursor) {
        _classCallCheck2(this, CursorError);

        this.msg = msg;
        this.cursor = cursor;
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var TreeError = /*#__PURE__*/function (_ParseError2) {
        _inherits2(TreeError, _ParseError2);

        var _super145 = _createSuper(TreeError);

        function TreeError(elementName, span, msg) {
          var _this259;

          _classCallCheck2(this, TreeError);

          _this259 = _super145.call(this, span, msg);
          _this259.elementName = elementName;
          return _this259;
        }

        _createClass2(TreeError, null, [{
          key: "create",
          value: function create(elementName, span, msg) {
            return new TreeError(elementName, span, msg);
          }
        }]);

        return TreeError;
      }(ParseError);

      var ParseTreeResult = function ParseTreeResult(rootNodes, errors) {
        _classCallCheck2(this, ParseTreeResult);

        this.rootNodes = rootNodes;
        this.errors = errors;
      };

      var Parser = /*#__PURE__*/function () {
        function Parser(getTagDefinition) {
          _classCallCheck2(this, Parser);

          this.getTagDefinition = getTagDefinition;
        }

        _createClass2(Parser, [{
          key: "parse",
          value: function parse(source, url, options) {
            var tokenizeResult = tokenize(source, url, this.getTagDefinition, options);
            var parser = new _TreeBuilder(tokenizeResult.tokens, this.getTagDefinition);
            parser.build();
            return new ParseTreeResult(parser.rootNodes, tokenizeResult.errors.concat(parser.errors));
          }
        }]);

        return Parser;
      }();

      var _TreeBuilder = /*#__PURE__*/function () {
        function _TreeBuilder(tokens, getTagDefinition) {
          _classCallCheck2(this, _TreeBuilder);

          this.tokens = tokens;
          this.getTagDefinition = getTagDefinition;
          this._index = -1;
          this._elementStack = [];
          this.rootNodes = [];
          this.errors = [];

          this._advance();
        }

        _createClass2(_TreeBuilder, [{
          key: "build",
          value: function build() {
            while (this._peek.type !== TokenType.EOF) {
              if (this._peek.type === TokenType.TAG_OPEN_START || this._peek.type === TokenType.INCOMPLETE_TAG_OPEN) {
                this._consumeStartTag(this._advance());
              } else if (this._peek.type === TokenType.TAG_CLOSE) {
                this._consumeEndTag(this._advance());
              } else if (this._peek.type === TokenType.CDATA_START) {
                this._closeVoidElement();

                this._consumeCdata(this._advance());
              } else if (this._peek.type === TokenType.COMMENT_START) {
                this._closeVoidElement();

                this._consumeComment(this._advance());
              } else if (this._peek.type === TokenType.TEXT || this._peek.type === TokenType.RAW_TEXT || this._peek.type === TokenType.ESCAPABLE_RAW_TEXT) {
                this._closeVoidElement();

                this._consumeText(this._advance());
              } else if (this._peek.type === TokenType.EXPANSION_FORM_START) {
                this._consumeExpansion(this._advance());
              } else {
                // Skip all other tokens...
                this._advance();
              }
            }
          }
        }, {
          key: "_advance",
          value: function _advance() {
            var prev = this._peek;

            if (this._index < this.tokens.length - 1) {
              // Note: there is always an EOF token at the end
              this._index++;
            }

            this._peek = this.tokens[this._index];
            return prev;
          }
        }, {
          key: "_advanceIf",
          value: function _advanceIf(type) {
            if (this._peek.type === type) {
              return this._advance();
            }

            return null;
          }
        }, {
          key: "_consumeCdata",
          value: function _consumeCdata(_startToken) {
            this._consumeText(this._advance());

            this._advanceIf(TokenType.CDATA_END);
          }
        }, {
          key: "_consumeComment",
          value: function _consumeComment(token) {
            var text = this._advanceIf(TokenType.RAW_TEXT);

            this._advanceIf(TokenType.COMMENT_END);

            var value = text != null ? text.parts[0].trim() : null;

            this._addToParent(new Comment(value, token.sourceSpan));
          }
        }, {
          key: "_consumeExpansion",
          value: function _consumeExpansion(token) {
            var switchValue = this._advance();

            var type = this._advance();

            var cases = []; // read =

            while (this._peek.type === TokenType.EXPANSION_CASE_VALUE) {
              var expCase = this._parseExpansionCase();

              if (!expCase) return; // error

              cases.push(expCase);
            } // read the final }


            if (this._peek.type !== TokenType.EXPANSION_FORM_END) {
              this.errors.push(TreeError.create(null, this._peek.sourceSpan, "Invalid ICU message. Missing '}'."));
              return;
            }

            var sourceSpan = new ParseSourceSpan(token.sourceSpan.start, this._peek.sourceSpan.end, token.sourceSpan.fullStart);

            this._addToParent(new Expansion(switchValue.parts[0], type.parts[0], cases, sourceSpan, switchValue.sourceSpan));

            this._advance();
          }
        }, {
          key: "_parseExpansionCase",
          value: function _parseExpansionCase() {
            var value = this._advance(); // read {


            if (this._peek.type !== TokenType.EXPANSION_CASE_EXP_START) {
              this.errors.push(TreeError.create(null, this._peek.sourceSpan, "Invalid ICU message. Missing '{'."));
              return null;
            } // read until }


            var start = this._advance();

            var exp = this._collectExpansionExpTokens(start);

            if (!exp) return null;

            var end = this._advance();

            exp.push(new Token(TokenType.EOF, [], end.sourceSpan)); // parse everything in between { and }

            var expansionCaseParser = new _TreeBuilder(exp, this.getTagDefinition);
            expansionCaseParser.build();

            if (expansionCaseParser.errors.length > 0) {
              this.errors = this.errors.concat(expansionCaseParser.errors);
              return null;
            }

            var sourceSpan = new ParseSourceSpan(value.sourceSpan.start, end.sourceSpan.end, value.sourceSpan.fullStart);
            var expSourceSpan = new ParseSourceSpan(start.sourceSpan.start, end.sourceSpan.end, start.sourceSpan.fullStart);
            return new ExpansionCase(value.parts[0], expansionCaseParser.rootNodes, sourceSpan, value.sourceSpan, expSourceSpan);
          }
        }, {
          key: "_collectExpansionExpTokens",
          value: function _collectExpansionExpTokens(start) {
            var exp = [];
            var expansionFormStack = [TokenType.EXPANSION_CASE_EXP_START];

            while (true) {
              if (this._peek.type === TokenType.EXPANSION_FORM_START || this._peek.type === TokenType.EXPANSION_CASE_EXP_START) {
                expansionFormStack.push(this._peek.type);
              }

              if (this._peek.type === TokenType.EXPANSION_CASE_EXP_END) {
                if (lastOnStack(expansionFormStack, TokenType.EXPANSION_CASE_EXP_START)) {
                  expansionFormStack.pop();
                  if (expansionFormStack.length == 0) return exp;
                } else {
                  this.errors.push(TreeError.create(null, start.sourceSpan, "Invalid ICU message. Missing '}'."));
                  return null;
                }
              }

              if (this._peek.type === TokenType.EXPANSION_FORM_END) {
                if (lastOnStack(expansionFormStack, TokenType.EXPANSION_FORM_START)) {
                  expansionFormStack.pop();
                } else {
                  this.errors.push(TreeError.create(null, start.sourceSpan, "Invalid ICU message. Missing '}'."));
                  return null;
                }
              }

              if (this._peek.type === TokenType.EOF) {
                this.errors.push(TreeError.create(null, start.sourceSpan, "Invalid ICU message. Missing '}'."));
                return null;
              }

              exp.push(this._advance());
            }
          }
        }, {
          key: "_consumeText",
          value: function _consumeText(token) {
            var text = token.parts[0];

            if (text.length > 0 && text[0] == '\n') {
              var parent = this._getParentElement();

              if (parent != null && parent.children.length == 0 && this.getTagDefinition(parent.name).ignoreFirstLf) {
                text = text.substring(1);
              }
            }

            if (text.length > 0) {
              this._addToParent(new Text$3(text, token.sourceSpan));
            }
          }
        }, {
          key: "_closeVoidElement",
          value: function _closeVoidElement() {
            var el = this._getParentElement();

            if (el && this.getTagDefinition(el.name).isVoid) {
              this._elementStack.pop();
            }
          }
        }, {
          key: "_consumeStartTag",
          value: function _consumeStartTag(startTagToken) {
            var _startTagToken$parts = _slicedToArray(startTagToken.parts, 2),
                prefix = _startTagToken$parts[0],
                name = _startTagToken$parts[1];

            var attrs = [];

            while (this._peek.type === TokenType.ATTR_NAME) {
              attrs.push(this._consumeAttr(this._advance()));
            }

            var fullName = this._getElementFullName(prefix, name, this._getParentElement());

            var selfClosing = false; // Note: There could have been a tokenizer error
            // so that we don't get a token for the end tag...

            if (this._peek.type === TokenType.TAG_OPEN_END_VOID) {
              this._advance();

              selfClosing = true;
              var tagDef = this.getTagDefinition(fullName);

              if (!(tagDef.canSelfClose || getNsPrefix(fullName) !== null || tagDef.isVoid)) {
                this.errors.push(TreeError.create(fullName, startTagToken.sourceSpan, "Only void and foreign elements can be self closed \"".concat(startTagToken.parts[1], "\"")));
              }
            } else if (this._peek.type === TokenType.TAG_OPEN_END) {
              this._advance();

              selfClosing = false;
            }

            var end = this._peek.sourceSpan.fullStart;
            var span = new ParseSourceSpan(startTagToken.sourceSpan.start, end, startTagToken.sourceSpan.fullStart); // Create a separate `startSpan` because `span` will be modified when there is an `end` span.

            var startSpan = new ParseSourceSpan(startTagToken.sourceSpan.start, end, startTagToken.sourceSpan.fullStart);
            var el = new Element$1(fullName, attrs, [], span, startSpan, undefined);

            this._pushElement(el);

            if (selfClosing) {
              // Elements that are self-closed have their `endSourceSpan` set to the full span, as the
              // element start tag also represents the end tag.
              this._popElement(fullName, span);
            } else if (startTagToken.type === TokenType.INCOMPLETE_TAG_OPEN) {
              // We already know the opening tag is not complete, so it is unlikely it has a corresponding
              // close tag. Let's optimistically parse it as a full element and emit an error.
              this._popElement(fullName, null);

              this.errors.push(TreeError.create(fullName, span, "Opening tag \"".concat(fullName, "\" not terminated.")));
            }
          }
        }, {
          key: "_pushElement",
          value: function _pushElement(el) {
            var parentEl = this._getParentElement();

            if (parentEl && this.getTagDefinition(parentEl.name).isClosedByChild(el.name)) {
              this._elementStack.pop();
            }

            this._addToParent(el);

            this._elementStack.push(el);
          }
        }, {
          key: "_consumeEndTag",
          value: function _consumeEndTag(endTagToken) {
            var fullName = this._getElementFullName(endTagToken.parts[0], endTagToken.parts[1], this._getParentElement());

            if (this.getTagDefinition(fullName).isVoid) {
              this.errors.push(TreeError.create(fullName, endTagToken.sourceSpan, "Void elements do not have end tags \"".concat(endTagToken.parts[1], "\"")));
            } else if (!this._popElement(fullName, endTagToken.sourceSpan)) {
              var errMsg = "Unexpected closing tag \"".concat(fullName, "\". It may happen when the tag has already been closed by another tag. For more info see https://www.w3.org/TR/html5/syntax.html#closing-elements-that-have-implied-end-tags");
              this.errors.push(TreeError.create(fullName, endTagToken.sourceSpan, errMsg));
            }
          }
          /**
           * Closes the nearest element with the tag name `fullName` in the parse tree.
           * `endSourceSpan` is the span of the closing tag, or null if the element does
           * not have a closing tag (for example, this happens when an incomplete
           * opening tag is recovered).
           */

        }, {
          key: "_popElement",
          value: function _popElement(fullName, endSourceSpan) {
            for (var stackIndex = this._elementStack.length - 1; stackIndex >= 0; stackIndex--) {
              var el = this._elementStack[stackIndex];

              if (el.name == fullName) {
                // Record the parse span with the element that is being closed. Any elements that are
                // removed from the element stack at this point are closed implicitly, so they won't get
                // an end source span (as there is no explicit closing element).
                el.endSourceSpan = endSourceSpan;
                el.sourceSpan.end = endSourceSpan !== null ? endSourceSpan.end : el.sourceSpan.end;

                this._elementStack.splice(stackIndex, this._elementStack.length - stackIndex);

                return true;
              }

              if (!this.getTagDefinition(el.name).closedByParent) {
                return false;
              }
            }

            return false;
          }
        }, {
          key: "_consumeAttr",
          value: function _consumeAttr(attrName) {
            var fullName = mergeNsAndName(attrName.parts[0], attrName.parts[1]);
            var end = attrName.sourceSpan.end;
            var value = '';
            var valueSpan = undefined;

            if (this._peek.type === TokenType.ATTR_QUOTE) {
              this._advance();
            }

            if (this._peek.type === TokenType.ATTR_VALUE) {
              var valueToken = this._advance();

              value = valueToken.parts[0];
              end = valueToken.sourceSpan.end;
              valueSpan = valueToken.sourceSpan;
            }

            if (this._peek.type === TokenType.ATTR_QUOTE) {
              var quoteToken = this._advance();

              end = quoteToken.sourceSpan.end;
            }

            var keySpan = new ParseSourceSpan(attrName.sourceSpan.start, attrName.sourceSpan.end);
            return new Attribute(fullName, value, new ParseSourceSpan(attrName.sourceSpan.start, end, attrName.sourceSpan.fullStart), keySpan, valueSpan);
          }
        }, {
          key: "_getParentElement",
          value: function _getParentElement() {
            return this._elementStack.length > 0 ? this._elementStack[this._elementStack.length - 1] : null;
          }
        }, {
          key: "_addToParent",
          value: function _addToParent(node) {
            var parent = this._getParentElement();

            if (parent != null) {
              parent.children.push(node);
            } else {
              this.rootNodes.push(node);
            }
          }
        }, {
          key: "_getElementFullName",
          value: function _getElementFullName(prefix, localName, parentElement) {
            if (prefix === '') {
              prefix = this.getTagDefinition(localName).implicitNamespacePrefix || '';

              if (prefix === '' && parentElement != null) {
                var parentTagName = splitNsName(parentElement.name)[1];
                var parentTagDefinition = this.getTagDefinition(parentTagName);

                if (!parentTagDefinition.preventNamespaceInheritance) {
                  prefix = getNsPrefix(parentElement.name);
                }
              }
            }

            return mergeNsAndName(prefix, localName);
          }
        }]);

        return _TreeBuilder;
      }();

      function lastOnStack(stack, element) {
        return stack.length > 0 && stack[stack.length - 1] === element;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var HtmlParser = /*#__PURE__*/function (_Parser) {
        _inherits2(HtmlParser, _Parser);

        var _super146 = _createSuper(HtmlParser);

        function HtmlParser() {
          _classCallCheck2(this, HtmlParser);

          return _super146.call(this, getHtmlTagDefinition);
        }

        _createClass2(HtmlParser, [{
          key: "parse",
          value: function parse(source, url, options) {
            return _get2(_getPrototypeOf2(HtmlParser.prototype), "parse", this).call(this, source, url, options);
          }
        }]);

        return HtmlParser;
      }(Parser);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var PRESERVE_WS_ATTR_NAME = 'ngPreserveWhitespaces';
      var SKIP_WS_TRIM_TAGS = new Set(['pre', 'template', 'textarea', 'script', 'style']); // Equivalent to \s with \u00a0 (non-breaking space) excluded.
      // Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp

      var WS_CHARS = " \f\n\r\t\x0B\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF";
      var NO_WS_REGEXP = new RegExp("[^".concat(WS_CHARS, "]"));
      var WS_REPLACE_REGEXP = new RegExp("[".concat(WS_CHARS, "]{2,}"), 'g');

      function hasPreserveWhitespacesAttr(attrs) {
        return attrs.some(function (attr) {
          return attr.name === PRESERVE_WS_ATTR_NAME;
        });
      }
      /**
       * Angular Dart introduced &ngsp; as a placeholder for non-removable space, see:
       * https://github.com/dart-lang/angular/blob/0bb611387d29d65b5af7f9d2515ab571fd3fbee4/_tests/test/compiler/preserve_whitespace_test.dart#L25-L32
       * In Angular Dart &ngsp; is converted to the 0xE500 PUA (Private Use Areas) unicode character
       * and later on replaced by a space. We are re-implementing the same idea here.
       */


      function replaceNgsp(value) {
        // lexer is replacing the &ngsp; pseudo-entity with NGSP_UNICODE
        return value.replace(new RegExp(NGSP_UNICODE, 'g'), ' ');
      }
      /**
       * This visitor can walk HTML parse tree and remove / trim text nodes using the following rules:
       * - consider spaces, tabs and new lines as whitespace characters;
       * - drop text nodes consisting of whitespace characters only;
       * - for all other text nodes replace consecutive whitespace characters with one space;
       * - convert &ngsp; pseudo-entity to a single space;
       *
       * Removal and trimming of whitespaces have positive performance impact (less code to generate
       * while compiling templates, faster view creation). At the same time it can be "destructive"
       * in some cases (whitespaces can influence layout). Because of the potential of breaking layout
       * this visitor is not activated by default in Angular 5 and people need to explicitly opt-in for
       * whitespace removal. The default option for whitespace removal will be revisited in Angular 6
       * and might be changed to "on" by default.
       */


      var WhitespaceVisitor = /*#__PURE__*/function () {
        function WhitespaceVisitor() {
          _classCallCheck2(this, WhitespaceVisitor);
        }

        _createClass2(WhitespaceVisitor, [{
          key: "visitElement",
          value: function visitElement(element, context) {
            if (SKIP_WS_TRIM_TAGS.has(element.name) || hasPreserveWhitespacesAttr(element.attrs)) {
              // don't descent into elements where we need to preserve whitespaces
              // but still visit all attributes to eliminate one used as a market to preserve WS
              return new Element$1(element.name, visitAll$1(this, element.attrs), element.children, element.sourceSpan, element.startSourceSpan, element.endSourceSpan, element.i18n);
            }

            return new Element$1(element.name, element.attrs, visitAllWithSiblings(this, element.children), element.sourceSpan, element.startSourceSpan, element.endSourceSpan, element.i18n);
          }
        }, {
          key: "visitAttribute",
          value: function visitAttribute(attribute, context) {
            return attribute.name !== PRESERVE_WS_ATTR_NAME ? attribute : null;
          }
        }, {
          key: "visitText",
          value: function visitText(text, context) {
            var isNotBlank = text.value.match(NO_WS_REGEXP);
            var hasExpansionSibling = context && (context.prev instanceof Expansion || context.next instanceof Expansion);

            if (isNotBlank || hasExpansionSibling) {
              return new Text$3(replaceNgsp(text.value).replace(WS_REPLACE_REGEXP, ' '), text.sourceSpan, text.i18n);
            }

            return null;
          }
        }, {
          key: "visitComment",
          value: function visitComment(comment, context) {
            return comment;
          }
        }, {
          key: "visitExpansion",
          value: function visitExpansion(expansion, context) {
            return expansion;
          }
        }, {
          key: "visitExpansionCase",
          value: function visitExpansionCase(expansionCase, context) {
            return expansionCase;
          }
        }]);

        return WhitespaceVisitor;
      }();

      function removeWhitespaces(htmlAstWithErrors) {
        return new ParseTreeResult(visitAll$1(new WhitespaceVisitor(), htmlAstWithErrors.rootNodes), htmlAstWithErrors.errors);
      }

      function visitAllWithSiblings(visitor, nodes) {
        var result = [];
        nodes.forEach(function (ast, i) {
          var context = {
            prev: nodes[i - 1],
            next: nodes[i + 1]
          };
          var astResult = ast.visit(visitor, context);

          if (astResult) {
            result.push(astResult);
          }
        });
        return result;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // http://cldr.unicode.org/index/cldr-spec/plural-rules


      var PLURAL_CASES = ['zero', 'one', 'two', 'few', 'many', 'other'];
      /**
       * Expands special forms into elements.
       *
       * For example,
       *
       * ```
       * { messages.length, plural,
       *   =0 {zero}
       *   =1 {one}
       *   other {more than one}
       * }
       * ```
       *
       * will be expanded into
       *
       * ```
       * <ng-container [ngPlural]="messages.length">
       *   <ng-template ngPluralCase="=0">zero</ng-template>
       *   <ng-template ngPluralCase="=1">one</ng-template>
       *   <ng-template ngPluralCase="other">more than one</ng-template>
       * </ng-container>
       * ```
       */

      function expandNodes(nodes) {
        var expander = new _Expander();
        return new ExpansionResult(visitAll$1(expander, nodes), expander.isExpanded, expander.errors);
      }

      var ExpansionResult = function ExpansionResult(nodes, expanded, errors) {
        _classCallCheck2(this, ExpansionResult);

        this.nodes = nodes;
        this.expanded = expanded;
        this.errors = errors;
      };

      var ExpansionError = /*#__PURE__*/function (_ParseError3) {
        _inherits2(ExpansionError, _ParseError3);

        var _super147 = _createSuper(ExpansionError);

        function ExpansionError(span, errorMsg) {
          _classCallCheck2(this, ExpansionError);

          return _super147.call(this, span, errorMsg);
        }

        return ExpansionError;
      }(ParseError);
      /**
       * Expand expansion forms (plural, select) to directives
       *
       * @internal
       */


      var _Expander = /*#__PURE__*/function () {
        function _Expander() {
          _classCallCheck2(this, _Expander);

          this.isExpanded = false;
          this.errors = [];
        }

        _createClass2(_Expander, [{
          key: "visitElement",
          value: function visitElement(element, context) {
            return new Element$1(element.name, element.attrs, visitAll$1(this, element.children), element.sourceSpan, element.startSourceSpan, element.endSourceSpan);
          }
        }, {
          key: "visitAttribute",
          value: function visitAttribute(attribute, context) {
            return attribute;
          }
        }, {
          key: "visitText",
          value: function visitText(text, context) {
            return text;
          }
        }, {
          key: "visitComment",
          value: function visitComment(comment, context) {
            return comment;
          }
        }, {
          key: "visitExpansion",
          value: function visitExpansion(icu, context) {
            this.isExpanded = true;
            return icu.type == 'plural' ? _expandPluralForm(icu, this.errors) : _expandDefaultForm(icu, this.errors);
          }
        }, {
          key: "visitExpansionCase",
          value: function visitExpansionCase(icuCase, context) {
            throw new Error('Should not be reached');
          }
        }]);

        return _Expander;
      }(); // Plural forms are expanded to `NgPlural` and `NgPluralCase`s


      function _expandPluralForm(ast, errors) {
        var children = ast.cases.map(function (c) {
          if (PLURAL_CASES.indexOf(c.value) == -1 && !c.value.match(/^=\d+$/)) {
            errors.push(new ExpansionError(c.valueSourceSpan, "Plural cases should be \"=<number>\" or one of ".concat(PLURAL_CASES.join(', '))));
          }

          var expansionResult = expandNodes(c.expression);
          errors.push.apply(errors, _toConsumableArray(expansionResult.errors));
          return new Element$1("ng-template", [new Attribute('ngPluralCase', "".concat(c.value), c.valueSourceSpan, undefined
          /* keySpan */
          , undefined
          /* valueSpan */
          , undefined
          /* i18n */
          )], expansionResult.nodes, c.sourceSpan, c.sourceSpan, c.sourceSpan);
        });
        var switchAttr = new Attribute('[ngPlural]', ast.switchValue, ast.switchValueSourceSpan, undefined
        /* keySpan */
        , undefined
        /* valueSpan */
        , undefined
        /* i18n */
        );
        return new Element$1('ng-container', [switchAttr], children, ast.sourceSpan, ast.sourceSpan, ast.sourceSpan);
      } // ICU messages (excluding plural form) are expanded to `NgSwitch`  and `NgSwitchCase`s


      function _expandDefaultForm(ast, errors) {
        var children = ast.cases.map(function (c) {
          var expansionResult = expandNodes(c.expression);
          errors.push.apply(errors, _toConsumableArray(expansionResult.errors));

          if (c.value === 'other') {
            // other is the default case when no values match
            return new Element$1("ng-template", [new Attribute('ngSwitchDefault', '', c.valueSourceSpan, undefined
            /* keySpan */
            , undefined
            /* valueSpan */
            , undefined
            /* i18n */
            )], expansionResult.nodes, c.sourceSpan, c.sourceSpan, c.sourceSpan);
          }

          return new Element$1("ng-template", [new Attribute('ngSwitchCase', "".concat(c.value), c.valueSourceSpan, undefined
          /* keySpan */
          , undefined
          /* valueSpan */
          , undefined
          /* i18n */
          )], expansionResult.nodes, c.sourceSpan, c.sourceSpan, c.sourceSpan);
        });
        var switchAttr = new Attribute('[ngSwitch]', ast.switchValue, ast.switchValueSourceSpan, undefined
        /* keySpan */
        , undefined
        /* valueSpan */
        , undefined
        /* i18n */
        );
        return new Element$1('ng-container', [switchAttr], children, ast.sourceSpan, ast.sourceSpan, ast.sourceSpan);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A segment of text within the template.
       */


      var TextAst = /*#__PURE__*/function () {
        function TextAst(value, ngContentIndex, sourceSpan) {
          _classCallCheck2(this, TextAst);

          this.value = value;
          this.ngContentIndex = ngContentIndex;
          this.sourceSpan = sourceSpan;
        }

        _createClass2(TextAst, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitText(this, context);
          }
        }]);

        return TextAst;
      }();
      /**
       * A bound expression within the text of a template.
       */


      var BoundTextAst = /*#__PURE__*/function () {
        function BoundTextAst(value, ngContentIndex, sourceSpan) {
          _classCallCheck2(this, BoundTextAst);

          this.value = value;
          this.ngContentIndex = ngContentIndex;
          this.sourceSpan = sourceSpan;
        }

        _createClass2(BoundTextAst, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitBoundText(this, context);
          }
        }]);

        return BoundTextAst;
      }();
      /**
       * A plain attribute on an element.
       */


      var AttrAst = /*#__PURE__*/function () {
        function AttrAst(name, value, sourceSpan) {
          _classCallCheck2(this, AttrAst);

          this.name = name;
          this.value = value;
          this.sourceSpan = sourceSpan;
        }

        _createClass2(AttrAst, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitAttr(this, context);
          }
        }]);

        return AttrAst;
      }();

      var BoundPropertyMapping = (_BoundPropertyMapping = {}, _defineProperty(_BoundPropertyMapping, 4
      /* Animation */
      , 4), _defineProperty(_BoundPropertyMapping, 1
      /* Attribute */
      ,
      /* Animation */
      1), _defineProperty(_BoundPropertyMapping, 2
      /* Class */
      ,
      /* Attribute */
      2), _defineProperty(_BoundPropertyMapping, 0
      /* Property */
      ,
      /* Class */
      0), _defineProperty(_BoundPropertyMapping, 3
      /* Style */
      ,
      /* Property */
      3), _BoundPropertyMapping);
      /**
       * A binding for an element property (e.g. `[property]="expression"`) or an animation trigger (e.g.
       * `[@trigger]="stateExp"`)
       */

      var BoundElementPropertyAst = /*#__PURE__*/function () {
        function BoundElementPropertyAst(name, type, securityContext, value, unit, sourceSpan) {
          _classCallCheck2(this, BoundElementPropertyAst);

          this.name = name;
          this.type = type;
          this.securityContext = securityContext;
          this.value = value;
          this.unit = unit;
          this.sourceSpan = sourceSpan;
          this.isAnimation = this.type === 4
          /* Animation */
          ;
        }

        _createClass2(BoundElementPropertyAst, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitElementProperty(this, context);
          }
        }], [{
          key: "fromBoundProperty",
          value: function fromBoundProperty(prop) {
            var type = BoundPropertyMapping[prop.type];
            return new BoundElementPropertyAst(prop.name, type, prop.securityContext, prop.value, prop.unit, prop.sourceSpan);
          }
        }]);

        return BoundElementPropertyAst;
      }();
      /**
       * A binding for an element event (e.g. `(event)="handler()"`) or an animation trigger event (e.g.
       * `(@trigger.phase)="callback($event)"`).
       */


      var BoundEventAst = /*#__PURE__*/function () {
        function BoundEventAst(name, target, phase, handler, sourceSpan, handlerSpan) {
          _classCallCheck2(this, BoundEventAst);

          this.name = name;
          this.target = target;
          this.phase = phase;
          this.handler = handler;
          this.sourceSpan = sourceSpan;
          this.handlerSpan = handlerSpan;
          this.fullName = BoundEventAst.calcFullName(this.name, this.target, this.phase);
          this.isAnimation = !!this.phase;
        }

        _createClass2(BoundEventAst, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitEvent(this, context);
          }
        }], [{
          key: "calcFullName",
          value: function calcFullName(name, target, phase) {
            if (target) {
              return "".concat(target, ":").concat(name);
            }

            if (phase) {
              return "@".concat(name, ".").concat(phase);
            }

            return name;
          }
        }, {
          key: "fromParsedEvent",
          value: function fromParsedEvent(event) {
            var target = event.type === 0
            /* Regular */
            ? event.targetOrPhase : null;
            var phase = event.type === 1
            /* Animation */
            ? event.targetOrPhase : null;
            return new BoundEventAst(event.name, target, phase, event.handler, event.sourceSpan, event.handlerSpan);
          }
        }]);

        return BoundEventAst;
      }();
      /**
       * A reference declaration on an element (e.g. `let someName="expression"`).
       */


      var ReferenceAst = /*#__PURE__*/function () {
        function ReferenceAst(name, value, originalValue, sourceSpan) {
          _classCallCheck2(this, ReferenceAst);

          this.name = name;
          this.value = value;
          this.originalValue = originalValue;
          this.sourceSpan = sourceSpan;
        }

        _createClass2(ReferenceAst, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitReference(this, context);
          }
        }]);

        return ReferenceAst;
      }();
      /**
       * A variable declaration on a <ng-template> (e.g. `var-someName="someLocalName"`).
       */


      var VariableAst = /*#__PURE__*/function () {
        function VariableAst(name, value, sourceSpan, valueSpan) {
          _classCallCheck2(this, VariableAst);

          this.name = name;
          this.value = value;
          this.sourceSpan = sourceSpan;
          this.valueSpan = valueSpan;
        }

        _createClass2(VariableAst, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitVariable(this, context);
          }
        }], [{
          key: "fromParsedVariable",
          value: function fromParsedVariable(v) {
            return new VariableAst(v.name, v.value, v.sourceSpan, v.valueSpan);
          }
        }]);

        return VariableAst;
      }();
      /**
       * An element declaration in a template.
       */


      var ElementAst = /*#__PURE__*/function () {
        function ElementAst(name, attrs, inputs, outputs, references, directives, providers, hasViewContainer, queryMatches, children, ngContentIndex, sourceSpan, endSourceSpan) {
          _classCallCheck2(this, ElementAst);

          this.name = name;
          this.attrs = attrs;
          this.inputs = inputs;
          this.outputs = outputs;
          this.references = references;
          this.directives = directives;
          this.providers = providers;
          this.hasViewContainer = hasViewContainer;
          this.queryMatches = queryMatches;
          this.children = children;
          this.ngContentIndex = ngContentIndex;
          this.sourceSpan = sourceSpan;
          this.endSourceSpan = endSourceSpan;
        }

        _createClass2(ElementAst, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitElement(this, context);
          }
        }]);

        return ElementAst;
      }();
      /**
       * A `<ng-template>` element included in an Angular template.
       */


      var EmbeddedTemplateAst = /*#__PURE__*/function () {
        function EmbeddedTemplateAst(attrs, outputs, references, variables, directives, providers, hasViewContainer, queryMatches, children, ngContentIndex, sourceSpan) {
          _classCallCheck2(this, EmbeddedTemplateAst);

          this.attrs = attrs;
          this.outputs = outputs;
          this.references = references;
          this.variables = variables;
          this.directives = directives;
          this.providers = providers;
          this.hasViewContainer = hasViewContainer;
          this.queryMatches = queryMatches;
          this.children = children;
          this.ngContentIndex = ngContentIndex;
          this.sourceSpan = sourceSpan;
        }

        _createClass2(EmbeddedTemplateAst, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitEmbeddedTemplate(this, context);
          }
        }]);

        return EmbeddedTemplateAst;
      }();
      /**
       * A directive property with a bound value (e.g. `*ngIf="condition").
       */


      var BoundDirectivePropertyAst = /*#__PURE__*/function () {
        function BoundDirectivePropertyAst(directiveName, templateName, value, sourceSpan) {
          _classCallCheck2(this, BoundDirectivePropertyAst);

          this.directiveName = directiveName;
          this.templateName = templateName;
          this.value = value;
          this.sourceSpan = sourceSpan;
        }

        _createClass2(BoundDirectivePropertyAst, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitDirectiveProperty(this, context);
          }
        }]);

        return BoundDirectivePropertyAst;
      }();
      /**
       * A directive declared on an element.
       */


      var DirectiveAst = /*#__PURE__*/function () {
        function DirectiveAst(directive, inputs, hostProperties, hostEvents, contentQueryStartId, sourceSpan) {
          _classCallCheck2(this, DirectiveAst);

          this.directive = directive;
          this.inputs = inputs;
          this.hostProperties = hostProperties;
          this.hostEvents = hostEvents;
          this.contentQueryStartId = contentQueryStartId;
          this.sourceSpan = sourceSpan;
        }

        _createClass2(DirectiveAst, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitDirective(this, context);
          }
        }]);

        return DirectiveAst;
      }();
      /**
       * A provider declared on an element
       */


      var ProviderAst = /*#__PURE__*/function () {
        function ProviderAst(token, multiProvider, eager, providers, providerType, lifecycleHooks, sourceSpan, isModule) {
          _classCallCheck2(this, ProviderAst);

          this.token = token;
          this.multiProvider = multiProvider;
          this.eager = eager;
          this.providers = providers;
          this.providerType = providerType;
          this.lifecycleHooks = lifecycleHooks;
          this.sourceSpan = sourceSpan;
          this.isModule = isModule;
        }

        _createClass2(ProviderAst, [{
          key: "visit",
          value: function visit(visitor, context) {
            // No visit method in the visitor for now...
            return null;
          }
        }]);

        return ProviderAst;
      }();

      var ProviderAstType;

      (function (ProviderAstType) {
        ProviderAstType[ProviderAstType["PublicService"] = 0] = "PublicService";
        ProviderAstType[ProviderAstType["PrivateService"] = 1] = "PrivateService";
        ProviderAstType[ProviderAstType["Component"] = 2] = "Component";
        ProviderAstType[ProviderAstType["Directive"] = 3] = "Directive";
        ProviderAstType[ProviderAstType["Builtin"] = 4] = "Builtin";
      })(ProviderAstType || (ProviderAstType = {}));
      /**
       * Position where content is to be projected (instance of `<ng-content>` in a template).
       */


      var NgContentAst = /*#__PURE__*/function () {
        function NgContentAst(index, ngContentIndex, sourceSpan) {
          _classCallCheck2(this, NgContentAst);

          this.index = index;
          this.ngContentIndex = ngContentIndex;
          this.sourceSpan = sourceSpan;
        }

        _createClass2(NgContentAst, [{
          key: "visit",
          value: function visit(visitor, context) {
            return visitor.visitNgContent(this, context);
          }
        }]);

        return NgContentAst;
      }();
      /**
       * A visitor that accepts each node but doesn't do anything. It is intended to be used
       * as the base class for a visitor that is only interested in a subset of the node types.
       */


      var NullTemplateVisitor = /*#__PURE__*/function () {
        function NullTemplateVisitor() {
          _classCallCheck2(this, NullTemplateVisitor);
        }

        _createClass2(NullTemplateVisitor, [{
          key: "visitNgContent",
          value: function visitNgContent(ast, context) {}
        }, {
          key: "visitEmbeddedTemplate",
          value: function visitEmbeddedTemplate(ast, context) {}
        }, {
          key: "visitElement",
          value: function visitElement(ast, context) {}
        }, {
          key: "visitReference",
          value: function visitReference(ast, context) {}
        }, {
          key: "visitVariable",
          value: function visitVariable(ast, context) {}
        }, {
          key: "visitEvent",
          value: function visitEvent(ast, context) {}
        }, {
          key: "visitElementProperty",
          value: function visitElementProperty(ast, context) {}
        }, {
          key: "visitAttr",
          value: function visitAttr(ast, context) {}
        }, {
          key: "visitBoundText",
          value: function visitBoundText(ast, context) {}
        }, {
          key: "visitText",
          value: function visitText(ast, context) {}
        }, {
          key: "visitDirective",
          value: function visitDirective(ast, context) {}
        }, {
          key: "visitDirectiveProperty",
          value: function visitDirectiveProperty(ast, context) {}
        }]);

        return NullTemplateVisitor;
      }();
      /**
       * Base class that can be used to build a visitor that visits each node
       * in an template ast recursively.
       */


      var RecursiveTemplateAstVisitor = /*#__PURE__*/function (_NullTemplateVisitor) {
        _inherits2(RecursiveTemplateAstVisitor, _NullTemplateVisitor);

        var _super148 = _createSuper(RecursiveTemplateAstVisitor);

        function RecursiveTemplateAstVisitor() {
          _classCallCheck2(this, RecursiveTemplateAstVisitor);

          return _super148.call(this);
        } // Nodes with children


        _createClass2(RecursiveTemplateAstVisitor, [{
          key: "visitEmbeddedTemplate",
          value: function visitEmbeddedTemplate(ast, context) {
            return this.visitChildren(context, function (visit) {
              visit(ast.attrs);
              visit(ast.references);
              visit(ast.variables);
              visit(ast.directives);
              visit(ast.providers);
              visit(ast.children);
            });
          }
        }, {
          key: "visitElement",
          value: function visitElement(ast, context) {
            return this.visitChildren(context, function (visit) {
              visit(ast.attrs);
              visit(ast.inputs);
              visit(ast.outputs);
              visit(ast.references);
              visit(ast.directives);
              visit(ast.providers);
              visit(ast.children);
            });
          }
        }, {
          key: "visitDirective",
          value: function visitDirective(ast, context) {
            return this.visitChildren(context, function (visit) {
              visit(ast.inputs);
              visit(ast.hostProperties);
              visit(ast.hostEvents);
            });
          }
        }, {
          key: "visitChildren",
          value: function visitChildren(context, cb) {
            var results = [];
            var t = this;

            function visit(children) {
              if (children && children.length) results.push(templateVisitAll(t, children, context));
            }

            cb(visit);
            return Array.prototype.concat.apply([], results);
          }
        }]);

        return RecursiveTemplateAstVisitor;
      }(NullTemplateVisitor);
      /**
       * Visit every node in a list of {@link TemplateAst}s with the given {@link TemplateAstVisitor}.
       */


      function templateVisitAll(visitor, asts) {
        var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
        var result = [];
        var visit = visitor.visit ? function (ast) {
          return visitor.visit(ast, context) || ast.visit(visitor, context);
        } : function (ast) {
          return ast.visit(visitor, context);
        };
        asts.forEach(function (ast) {
          var astResult = visit(ast);

          if (astResult) {
            result.push(astResult);
          }
        });
        return result;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ProviderError = /*#__PURE__*/function (_ParseError4) {
        _inherits2(ProviderError, _ParseError4);

        var _super149 = _createSuper(ProviderError);

        function ProviderError(message, span) {
          _classCallCheck2(this, ProviderError);

          return _super149.call(this, span, message);
        }

        return ProviderError;
      }(ParseError);

      var ProviderViewContext = function ProviderViewContext(reflector, component) {
        var _this260 = this;

        _classCallCheck2(this, ProviderViewContext);

        this.reflector = reflector;
        this.component = component;
        this.errors = [];
        this.viewQueries = _getViewQueries(component);
        this.viewProviders = new Map();
        component.viewProviders.forEach(function (provider) {
          if (_this260.viewProviders.get(tokenReference(provider.token)) == null) {
            _this260.viewProviders.set(tokenReference(provider.token), true);
          }
        });
      };

      var ProviderElementContext = /*#__PURE__*/function () {
        function ProviderElementContext(viewContext, _parent, _isViewRoot, _directiveAsts, attrs, refs, isTemplate, contentQueryStartId, _sourceSpan) {
          var _this261 = this;

          _classCallCheck2(this, ProviderElementContext);

          this.viewContext = viewContext;
          this._parent = _parent;
          this._isViewRoot = _isViewRoot;
          this._directiveAsts = _directiveAsts;
          this._sourceSpan = _sourceSpan;
          this._transformedProviders = new Map();
          this._seenProviders = new Map();
          this._queriedTokens = new Map();
          this.transformedHasViewContainer = false;
          this._attrs = {};
          attrs.forEach(function (attrAst) {
            return _this261._attrs[attrAst.name] = attrAst.value;
          });

          var directivesMeta = _directiveAsts.map(function (directiveAst) {
            return directiveAst.directive;
          });

          this._allProviders = _resolveProvidersFromDirectives(directivesMeta, _sourceSpan, viewContext.errors);
          this._contentQueries = _getContentQueries(contentQueryStartId, directivesMeta);
          Array.from(this._allProviders.values()).forEach(function (provider) {
            _this261._addQueryReadsTo(provider.token, provider.token, _this261._queriedTokens);
          });

          if (isTemplate) {
            var templateRefId = createTokenForExternalReference(this.viewContext.reflector, Identifiers.TemplateRef);

            this._addQueryReadsTo(templateRefId, templateRefId, this._queriedTokens);
          }

          refs.forEach(function (refAst) {
            var defaultQueryValue = refAst.value || createTokenForExternalReference(_this261.viewContext.reflector, Identifiers.ElementRef);

            _this261._addQueryReadsTo({
              value: refAst.name
            }, defaultQueryValue, _this261._queriedTokens);
          });

          if (this._queriedTokens.get(this.viewContext.reflector.resolveExternalReference(Identifiers.ViewContainerRef))) {
            this.transformedHasViewContainer = true;
          } // create the providers that we know are eager first


          Array.from(this._allProviders.values()).forEach(function (provider) {
            var eager = provider.eager || _this261._queriedTokens.get(tokenReference(provider.token));

            if (eager) {
              _this261._getOrCreateLocalProvider(provider.providerType, provider.token, true);
            }
          });
        }

        _createClass2(ProviderElementContext, [{
          key: "afterElement",
          value: function afterElement() {
            var _this262 = this;

            // collect lazy providers
            Array.from(this._allProviders.values()).forEach(function (provider) {
              _this262._getOrCreateLocalProvider(provider.providerType, provider.token, false);
            });
          }
        }, {
          key: "transformProviders",
          get: function get() {
            // Note: Maps keep their insertion order.
            var lazyProviders = [];
            var eagerProviders = [];

            this._transformedProviders.forEach(function (provider) {
              if (provider.eager) {
                eagerProviders.push(provider);
              } else {
                lazyProviders.push(provider);
              }
            });

            return lazyProviders.concat(eagerProviders);
          }
        }, {
          key: "transformedDirectiveAsts",
          get: function get() {
            var sortedProviderTypes = this.transformProviders.map(function (provider) {
              return provider.token.identifier;
            });

            var sortedDirectives = this._directiveAsts.slice();

            sortedDirectives.sort(function (dir1, dir2) {
              return sortedProviderTypes.indexOf(dir1.directive.type) - sortedProviderTypes.indexOf(dir2.directive.type);
            });
            return sortedDirectives;
          }
        }, {
          key: "queryMatches",
          get: function get() {
            var allMatches = [];

            this._queriedTokens.forEach(function (matches) {
              allMatches.push.apply(allMatches, _toConsumableArray(matches));
            });

            return allMatches;
          }
        }, {
          key: "_addQueryReadsTo",
          value: function _addQueryReadsTo(token, defaultValue, queryReadTokens) {
            this._getQueriesFor(token).forEach(function (query) {
              var queryValue = query.meta.read || defaultValue;
              var tokenRef = tokenReference(queryValue);
              var queryMatches = queryReadTokens.get(tokenRef);

              if (!queryMatches) {
                queryMatches = [];
                queryReadTokens.set(tokenRef, queryMatches);
              }

              queryMatches.push({
                queryId: query.queryId,
                value: queryValue
              });
            });
          }
        }, {
          key: "_getQueriesFor",
          value: function _getQueriesFor(token) {
            var result = [];
            var currentEl = this;
            var distance = 0;
            var queries;

            while (currentEl !== null) {
              queries = currentEl._contentQueries.get(tokenReference(token));

              if (queries) {
                result.push.apply(result, _toConsumableArray(queries.filter(function (query) {
                  return query.meta.descendants || distance <= 1;
                })));
              }

              if (currentEl._directiveAsts.length > 0) {
                distance++;
              }

              currentEl = currentEl._parent;
            }

            queries = this.viewContext.viewQueries.get(tokenReference(token));

            if (queries) {
              result.push.apply(result, _toConsumableArray(queries));
            }

            return result;
          }
        }, {
          key: "_getOrCreateLocalProvider",
          value: function _getOrCreateLocalProvider(requestingProviderType, token, eager) {
            var _this263 = this;

            var resolvedProvider = this._allProviders.get(tokenReference(token));

            if (!resolvedProvider || (requestingProviderType === ProviderAstType.Directive || requestingProviderType === ProviderAstType.PublicService) && resolvedProvider.providerType === ProviderAstType.PrivateService || (requestingProviderType === ProviderAstType.PrivateService || requestingProviderType === ProviderAstType.PublicService) && resolvedProvider.providerType === ProviderAstType.Builtin) {
              return null;
            }

            var transformedProviderAst = this._transformedProviders.get(tokenReference(token));

            if (transformedProviderAst) {
              return transformedProviderAst;
            }

            if (this._seenProviders.get(tokenReference(token)) != null) {
              this.viewContext.errors.push(new ProviderError("Cannot instantiate cyclic dependency! ".concat(tokenName(token)), this._sourceSpan));
              return null;
            }

            this._seenProviders.set(tokenReference(token), true);

            var transformedProviders = resolvedProvider.providers.map(function (provider) {
              var transformedUseValue = provider.useValue;
              var transformedUseExisting = provider.useExisting;
              var transformedDeps = undefined;

              if (provider.useExisting != null) {
                var existingDiDep = _this263._getDependency(resolvedProvider.providerType, {
                  token: provider.useExisting
                }, eager);

                if (existingDiDep.token != null) {
                  transformedUseExisting = existingDiDep.token;
                } else {
                  transformedUseExisting = null;
                  transformedUseValue = existingDiDep.value;
                }
              } else if (provider.useFactory) {
                var deps = provider.deps || provider.useFactory.diDeps;
                transformedDeps = deps.map(function (dep) {
                  return _this263._getDependency(resolvedProvider.providerType, dep, eager);
                });
              } else if (provider.useClass) {
                var _deps = provider.deps || provider.useClass.diDeps;

                transformedDeps = _deps.map(function (dep) {
                  return _this263._getDependency(resolvedProvider.providerType, dep, eager);
                });
              }

              return _transformProvider(provider, {
                useExisting: transformedUseExisting,
                useValue: transformedUseValue,
                deps: transformedDeps
              });
            });
            transformedProviderAst = _transformProviderAst(resolvedProvider, {
              eager: eager,
              providers: transformedProviders
            });

            this._transformedProviders.set(tokenReference(token), transformedProviderAst);

            return transformedProviderAst;
          }
        }, {
          key: "_getLocalDependency",
          value: function _getLocalDependency(requestingProviderType, dep) {
            var eager = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;

            if (dep.isAttribute) {
              var attrValue = this._attrs[dep.token.value];
              return {
                isValue: true,
                value: attrValue == null ? null : attrValue
              };
            }

            if (dep.token != null) {
              // access builtints
              if (requestingProviderType === ProviderAstType.Directive || requestingProviderType === ProviderAstType.Component) {
                if (tokenReference(dep.token) === this.viewContext.reflector.resolveExternalReference(Identifiers.Renderer) || tokenReference(dep.token) === this.viewContext.reflector.resolveExternalReference(Identifiers.ElementRef) || tokenReference(dep.token) === this.viewContext.reflector.resolveExternalReference(Identifiers.ChangeDetectorRef) || tokenReference(dep.token) === this.viewContext.reflector.resolveExternalReference(Identifiers.TemplateRef)) {
                  return dep;
                }

                if (tokenReference(dep.token) === this.viewContext.reflector.resolveExternalReference(Identifiers.ViewContainerRef)) {
                  this.transformedHasViewContainer = true;
                }
              } // access the injector


              if (tokenReference(dep.token) === this.viewContext.reflector.resolveExternalReference(Identifiers.Injector)) {
                return dep;
              } // access providers


              if (this._getOrCreateLocalProvider(requestingProviderType, dep.token, eager) != null) {
                return dep;
              }
            }

            return null;
          }
        }, {
          key: "_getDependency",
          value: function _getDependency(requestingProviderType, dep) {
            var eager = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
            var currElement = this;
            var currEager = eager;
            var result = null;

            if (!dep.isSkipSelf) {
              result = this._getLocalDependency(requestingProviderType, dep, eager);
            }

            if (dep.isSelf) {
              if (!result && dep.isOptional) {
                result = {
                  isValue: true,
                  value: null
                };
              }
            } else {
              // check parent elements
              while (!result && currElement._parent) {
                var prevElement = currElement;
                currElement = currElement._parent;

                if (prevElement._isViewRoot) {
                  currEager = false;
                }

                result = currElement._getLocalDependency(ProviderAstType.PublicService, dep, currEager);
              } // check @Host restriction


              if (!result) {
                if (!dep.isHost || this.viewContext.component.isHost || this.viewContext.component.type.reference === tokenReference(dep.token) || this.viewContext.viewProviders.get(tokenReference(dep.token)) != null) {
                  result = dep;
                } else {
                  result = dep.isOptional ? {
                    isValue: true,
                    value: null
                  } : null;
                }
              }
            }

            if (!result) {
              this.viewContext.errors.push(new ProviderError("No provider for ".concat(tokenName(dep.token)), this._sourceSpan));
            }

            return result;
          }
        }]);

        return ProviderElementContext;
      }();

      var NgModuleProviderAnalyzer = /*#__PURE__*/function () {
        function NgModuleProviderAnalyzer(reflector, ngModule, extraProviders, sourceSpan) {
          var _this264 = this;

          _classCallCheck2(this, NgModuleProviderAnalyzer);

          this.reflector = reflector;
          this._transformedProviders = new Map();
          this._seenProviders = new Map();
          this._errors = [];
          this._allProviders = new Map();
          ngModule.transitiveModule.modules.forEach(function (ngModuleType) {
            var ngModuleProvider = {
              token: {
                identifier: ngModuleType
              },
              useClass: ngModuleType
            };

            _resolveProviders([ngModuleProvider], ProviderAstType.PublicService, true, sourceSpan, _this264._errors, _this264._allProviders,
            /* isModule */
            true);
          });

          _resolveProviders(ngModule.transitiveModule.providers.map(function (entry) {
            return entry.provider;
          }).concat(extraProviders), ProviderAstType.PublicService, false, sourceSpan, this._errors, this._allProviders,
          /* isModule */
          false);
        }

        _createClass2(NgModuleProviderAnalyzer, [{
          key: "parse",
          value: function parse() {
            var _this265 = this;

            Array.from(this._allProviders.values()).forEach(function (provider) {
              _this265._getOrCreateLocalProvider(provider.token, provider.eager);
            });

            if (this._errors.length > 0) {
              var errorString = this._errors.join('\n');

              throw new Error("Provider parse errors:\n".concat(errorString));
            } // Note: Maps keep their insertion order.


            var lazyProviders = [];
            var eagerProviders = [];

            this._transformedProviders.forEach(function (provider) {
              if (provider.eager) {
                eagerProviders.push(provider);
              } else {
                lazyProviders.push(provider);
              }
            });

            return lazyProviders.concat(eagerProviders);
          }
        }, {
          key: "_getOrCreateLocalProvider",
          value: function _getOrCreateLocalProvider(token, eager) {
            var _this266 = this;

            var resolvedProvider = this._allProviders.get(tokenReference(token));

            if (!resolvedProvider) {
              return null;
            }

            var transformedProviderAst = this._transformedProviders.get(tokenReference(token));

            if (transformedProviderAst) {
              return transformedProviderAst;
            }

            if (this._seenProviders.get(tokenReference(token)) != null) {
              this._errors.push(new ProviderError("Cannot instantiate cyclic dependency! ".concat(tokenName(token)), resolvedProvider.sourceSpan));

              return null;
            }

            this._seenProviders.set(tokenReference(token), true);

            var transformedProviders = resolvedProvider.providers.map(function (provider) {
              var transformedUseValue = provider.useValue;
              var transformedUseExisting = provider.useExisting;
              var transformedDeps = undefined;

              if (provider.useExisting != null) {
                var existingDiDep = _this266._getDependency({
                  token: provider.useExisting
                }, eager, resolvedProvider.sourceSpan);

                if (existingDiDep.token != null) {
                  transformedUseExisting = existingDiDep.token;
                } else {
                  transformedUseExisting = null;
                  transformedUseValue = existingDiDep.value;
                }
              } else if (provider.useFactory) {
                var deps = provider.deps || provider.useFactory.diDeps;
                transformedDeps = deps.map(function (dep) {
                  return _this266._getDependency(dep, eager, resolvedProvider.sourceSpan);
                });
              } else if (provider.useClass) {
                var _deps2 = provider.deps || provider.useClass.diDeps;

                transformedDeps = _deps2.map(function (dep) {
                  return _this266._getDependency(dep, eager, resolvedProvider.sourceSpan);
                });
              }

              return _transformProvider(provider, {
                useExisting: transformedUseExisting,
                useValue: transformedUseValue,
                deps: transformedDeps
              });
            });
            transformedProviderAst = _transformProviderAst(resolvedProvider, {
              eager: eager,
              providers: transformedProviders
            });

            this._transformedProviders.set(tokenReference(token), transformedProviderAst);

            return transformedProviderAst;
          }
        }, {
          key: "_getDependency",
          value: function _getDependency(dep) {
            var eager = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
            var requestorSourceSpan = arguments.length > 2 ? arguments[2] : undefined;
            var foundLocal = false;

            if (!dep.isSkipSelf && dep.token != null) {
              // access the injector
              if (tokenReference(dep.token) === this.reflector.resolveExternalReference(Identifiers.Injector) || tokenReference(dep.token) === this.reflector.resolveExternalReference(Identifiers.ComponentFactoryResolver)) {
                foundLocal = true; // access providers
              } else if (this._getOrCreateLocalProvider(dep.token, eager) != null) {
                foundLocal = true;
              }
            }

            return dep;
          }
        }]);

        return NgModuleProviderAnalyzer;
      }();

      function _transformProvider(provider, _ref65) {
        var useExisting = _ref65.useExisting,
            useValue = _ref65.useValue,
            deps = _ref65.deps;
        return {
          token: provider.token,
          useClass: provider.useClass,
          useExisting: useExisting,
          useFactory: provider.useFactory,
          useValue: useValue,
          deps: deps,
          multi: provider.multi
        };
      }

      function _transformProviderAst(provider, _ref66) {
        var eager = _ref66.eager,
            providers = _ref66.providers;
        return new ProviderAst(provider.token, provider.multiProvider, provider.eager || eager, providers, provider.providerType, provider.lifecycleHooks, provider.sourceSpan, provider.isModule);
      }

      function _resolveProvidersFromDirectives(directives, sourceSpan, targetErrors) {
        var providersByToken = new Map();
        directives.forEach(function (directive) {
          var dirProvider = {
            token: {
              identifier: directive.type
            },
            useClass: directive.type
          };

          _resolveProviders([dirProvider], directive.isComponent ? ProviderAstType.Component : ProviderAstType.Directive, true, sourceSpan, targetErrors, providersByToken,
          /* isModule */
          false);
        }); // Note: directives need to be able to overwrite providers of a component!

        var directivesWithComponentFirst = directives.filter(function (dir) {
          return dir.isComponent;
        }).concat(directives.filter(function (dir) {
          return !dir.isComponent;
        }));
        directivesWithComponentFirst.forEach(function (directive) {
          _resolveProviders(directive.providers, ProviderAstType.PublicService, false, sourceSpan, targetErrors, providersByToken,
          /* isModule */
          false);

          _resolveProviders(directive.viewProviders, ProviderAstType.PrivateService, false, sourceSpan, targetErrors, providersByToken,
          /* isModule */
          false);
        });
        return providersByToken;
      }

      function _resolveProviders(providers, providerType, eager, sourceSpan, targetErrors, targetProvidersByToken, isModule) {
        providers.forEach(function (provider) {
          var resolvedProvider = targetProvidersByToken.get(tokenReference(provider.token));

          if (resolvedProvider != null && !!resolvedProvider.multiProvider !== !!provider.multi) {
            targetErrors.push(new ProviderError("Mixing multi and non multi provider is not possible for token ".concat(tokenName(resolvedProvider.token)), sourceSpan));
          }

          if (!resolvedProvider) {
            var lifecycleHooks = provider.token.identifier && provider.token.identifier.lifecycleHooks ? provider.token.identifier.lifecycleHooks : [];
            var isUseValue = !(provider.useClass || provider.useExisting || provider.useFactory);
            resolvedProvider = new ProviderAst(provider.token, !!provider.multi, eager || isUseValue, [provider], providerType, lifecycleHooks, sourceSpan, isModule);
            targetProvidersByToken.set(tokenReference(provider.token), resolvedProvider);
          } else {
            if (!provider.multi) {
              resolvedProvider.providers.length = 0;
            }

            resolvedProvider.providers.push(provider);
          }
        });
      }

      function _getViewQueries(component) {
        // Note: queries start with id 1 so we can use the number in a Bloom filter!
        var viewQueryId = 1;
        var viewQueries = new Map();

        if (component.viewQueries) {
          component.viewQueries.forEach(function (query) {
            return _addQueryToTokenMap(viewQueries, {
              meta: query,
              queryId: viewQueryId++
            });
          });
        }

        return viewQueries;
      }

      function _getContentQueries(contentQueryStartId, directives) {
        var contentQueryId = contentQueryStartId;
        var contentQueries = new Map();
        directives.forEach(function (directive, directiveIndex) {
          if (directive.queries) {
            directive.queries.forEach(function (query) {
              return _addQueryToTokenMap(contentQueries, {
                meta: query,
                queryId: contentQueryId++
              });
            });
          }
        });
        return contentQueries;
      }

      function _addQueryToTokenMap(map, query) {
        query.meta.selectors.forEach(function (token) {
          var entry = map.get(tokenReference(token));

          if (!entry) {
            entry = [];
            map.set(tokenReference(token), entry);
          }

          entry.push(query);
        });
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var StyleWithImports = function StyleWithImports(style, styleUrls) {
        _classCallCheck2(this, StyleWithImports);

        this.style = style;
        this.styleUrls = styleUrls;
      };

      function isStyleUrlResolvable(url) {
        if (url == null || url.length === 0 || url[0] == '/') return false;
        var schemeMatch = url.match(URL_WITH_SCHEMA_REGEXP);
        return schemeMatch === null || schemeMatch[1] == 'package' || schemeMatch[1] == 'asset';
      }
      /**
       * Rewrites stylesheets by resolving and removing the @import urls that
       * are either relative or don't have a `package:` scheme
       */


      function extractStyleUrls(resolver, baseUrl, cssText) {
        var foundUrls = [];
        var modifiedCssText = cssText.replace(CSS_STRIPPABLE_COMMENT_REGEXP, '').replace(CSS_IMPORT_REGEXP, function () {
          var url = (arguments.length <= 1 ? undefined : arguments[1]) || (arguments.length <= 2 ? undefined : arguments[2]);

          if (!isStyleUrlResolvable(url)) {
            // Do not attempt to resolve non-package absolute URLs with URI
            // scheme
            return arguments.length <= 0 ? undefined : arguments[0];
          }

          foundUrls.push(resolver.resolve(baseUrl, url));
          return '';
        });
        return new StyleWithImports(modifiedCssText, foundUrls);
      }

      var CSS_IMPORT_REGEXP = /@import\s+(?:url\()?\s*(?:(?:['"]([^'"]*))|([^;\)\s]*))[^;]*;?/g;
      var CSS_STRIPPABLE_COMMENT_REGEXP = /\/\*(?!#\s*(?:sourceURL|sourceMappingURL)=)[\s\S]+?\*\//g;
      var URL_WITH_SCHEMA_REGEXP = /^([^:/?#]+):/;
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var PROPERTY_PARTS_SEPARATOR = '.';
      var ATTRIBUTE_PREFIX = 'attr';
      var CLASS_PREFIX = 'class';
      var STYLE_PREFIX = 'style';
      var TEMPLATE_ATTR_PREFIX = '*';
      var ANIMATE_PROP_PREFIX = 'animate-';
      /**
       * Parses bindings in templates and in the directive host area.
       */

      var BindingParser = /*#__PURE__*/function () {
        function BindingParser(_exprParser, _interpolationConfig, _schemaRegistry, pipes, errors) {
          _classCallCheck2(this, BindingParser);

          this._exprParser = _exprParser;
          this._interpolationConfig = _interpolationConfig;
          this._schemaRegistry = _schemaRegistry;
          this.errors = errors;
          this.pipesByName = null;
          this._usedPipes = new Map(); // When the `pipes` parameter is `null`, do not check for used pipes
          // This is used in IVY when we might not know the available pipes at compile time

          if (pipes) {
            var pipesByName = new Map();
            pipes.forEach(function (pipe) {
              return pipesByName.set(pipe.name, pipe);
            });
            this.pipesByName = pipesByName;
          }
        }

        _createClass2(BindingParser, [{
          key: "interpolationConfig",
          get: function get() {
            return this._interpolationConfig;
          }
        }, {
          key: "getUsedPipes",
          value: function getUsedPipes() {
            return Array.from(this._usedPipes.values());
          }
        }, {
          key: "createBoundHostProperties",
          value: function createBoundHostProperties(dirMeta, sourceSpan) {
            var _this267 = this;

            if (dirMeta.hostProperties) {
              var boundProps = [];
              Object.keys(dirMeta.hostProperties).forEach(function (propName) {
                var expression = dirMeta.hostProperties[propName];

                if (typeof expression === 'string') {
                  _this267.parsePropertyBinding(propName, expression, true, sourceSpan, sourceSpan.start.offset, undefined, [], // Use the `sourceSpan` for  `keySpan`. This isn't really accurate, but neither is the
                  // sourceSpan, as it represents the sourceSpan of the host itself rather than the
                  // source of the host binding (which doesn't exist in the template). Regardless,
                  // neither of these values are used in Ivy but are only here to satisfy the function
                  // signature. This should likely be refactored in the future so that `sourceSpan`
                  // isn't being used inaccurately.
                  boundProps, sourceSpan);
                } else {
                  _this267._reportError("Value of the host property binding \"".concat(propName, "\" needs to be a string representing an expression but got \"").concat(expression, "\" (").concat(typeof expression, ")"), sourceSpan);
                }
              });
              return boundProps;
            }

            return null;
          }
        }, {
          key: "createDirectiveHostPropertyAsts",
          value: function createDirectiveHostPropertyAsts(dirMeta, elementSelector, sourceSpan) {
            var _this268 = this;

            var boundProps = this.createBoundHostProperties(dirMeta, sourceSpan);
            return boundProps && boundProps.map(function (prop) {
              return _this268.createBoundElementProperty(elementSelector, prop);
            });
          }
        }, {
          key: "createDirectiveHostEventAsts",
          value: function createDirectiveHostEventAsts(dirMeta, sourceSpan) {
            var _this269 = this;

            if (dirMeta.hostListeners) {
              var targetEvents = [];
              Object.keys(dirMeta.hostListeners).forEach(function (propName) {
                var expression = dirMeta.hostListeners[propName];

                if (typeof expression === 'string') {
                  // Use the `sourceSpan` for  `keySpan` and `handlerSpan`. This isn't really accurate, but
                  // neither is the `sourceSpan`, as it represents the `sourceSpan` of the host itself
                  // rather than the source of the host binding (which doesn't exist in the template).
                  // Regardless, neither of these values are used in Ivy but are only here to satisfy the
                  // function signature. This should likely be refactored in the future so that `sourceSpan`
                  // isn't being used inaccurately.
                  _this269.parseEvent(propName, expression, sourceSpan, sourceSpan, [], targetEvents, sourceSpan);
                } else {
                  _this269._reportError("Value of the host listener \"".concat(propName, "\" needs to be a string representing an expression but got \"").concat(expression, "\" (").concat(typeof expression, ")"), sourceSpan);
                }
              });
              return targetEvents;
            }

            return null;
          }
        }, {
          key: "parseInterpolation",
          value: function parseInterpolation(value, sourceSpan) {
            var sourceInfo = sourceSpan.start.toString();
            var absoluteOffset = sourceSpan.fullStart.offset;

            try {
              var ast = this._exprParser.parseInterpolation(value, sourceInfo, absoluteOffset, this._interpolationConfig);

              if (ast) this._reportExpressionParserErrors(ast.errors, sourceSpan);

              this._checkPipes(ast, sourceSpan);

              return ast;
            } catch (e) {
              this._reportError("".concat(e), sourceSpan);

              return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo, absoluteOffset);
            }
          }
          /**
           * Similar to `parseInterpolation`, but treats the provided string as a single expression
           * element that would normally appear within the interpolation prefix and suffix (`{{` and `}}`).
           * This is used for parsing the switch expression in ICUs.
           */

        }, {
          key: "parseInterpolationExpression",
          value: function parseInterpolationExpression(expression, sourceSpan) {
            var sourceInfo = sourceSpan.start.toString();
            var absoluteOffset = sourceSpan.start.offset;

            try {
              var ast = this._exprParser.parseInterpolationExpression(expression, sourceInfo, absoluteOffset);

              if (ast) this._reportExpressionParserErrors(ast.errors, sourceSpan);

              this._checkPipes(ast, sourceSpan);

              return ast;
            } catch (e) {
              this._reportError("".concat(e), sourceSpan);

              return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo, absoluteOffset);
            }
          }
          /**
           * Parses the bindings in a microsyntax expression, and converts them to
           * `ParsedProperty` or `ParsedVariable`.
           *
           * @param tplKey template binding name
           * @param tplValue template binding value
           * @param sourceSpan span of template binding relative to entire the template
           * @param absoluteValueOffset start of the tplValue relative to the entire template
           * @param targetMatchableAttrs potential attributes to match in the template
           * @param targetProps target property bindings in the template
           * @param targetVars target variables in the template
           */

        }, {
          key: "parseInlineTemplateBinding",
          value: function parseInlineTemplateBinding(tplKey, tplValue, sourceSpan, absoluteValueOffset, targetMatchableAttrs, targetProps, targetVars, isIvyAst) {
            var absoluteKeyOffset = sourceSpan.start.offset + TEMPLATE_ATTR_PREFIX.length;

            var bindings = this._parseTemplateBindings(tplKey, tplValue, sourceSpan, absoluteKeyOffset, absoluteValueOffset);

            var _iterator17 = _createForOfIteratorHelper(bindings),
                _step17;

            try {
              for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
                var binding = _step17.value;
                // sourceSpan is for the entire HTML attribute. bindingSpan is for a particular
                // binding within the microsyntax expression so it's more narrow than sourceSpan.
                var bindingSpan = moveParseSourceSpan(sourceSpan, binding.sourceSpan);
                var key = binding.key.source;
                var keySpan = moveParseSourceSpan(sourceSpan, binding.key.span);

                if (binding instanceof VariableBinding) {
                  var value = binding.value ? binding.value.source : '$implicit';
                  var valueSpan = binding.value ? moveParseSourceSpan(sourceSpan, binding.value.span) : undefined;
                  targetVars.push(new ParsedVariable(key, value, bindingSpan, keySpan, valueSpan));
                } else if (binding.value) {
                  var srcSpan = isIvyAst ? bindingSpan : sourceSpan;

                  var _valueSpan = moveParseSourceSpan(sourceSpan, binding.value.ast.sourceSpan);

                  this._parsePropertyAst(key, binding.value, srcSpan, keySpan, _valueSpan, targetMatchableAttrs, targetProps);
                } else {
                  targetMatchableAttrs.push([key, ''
                  /* value */
                  ]); // Since this is a literal attribute with no RHS, source span should be
                  // just the key span.

                  this.parseLiteralAttr(key, null
                  /* value */
                  , keySpan, absoluteValueOffset, undefined
                  /* valueSpan */
                  , targetMatchableAttrs, targetProps, keySpan);
                }
              }
            } catch (err) {
              _iterator17.e(err);
            } finally {
              _iterator17.f();
            }
          }
          /**
           * Parses the bindings in a microsyntax expression, e.g.
           * ```
           *    <tag *tplKey="let value1 = prop; let value2 = localVar">
           * ```
           *
           * @param tplKey template binding name
           * @param tplValue template binding value
           * @param sourceSpan span of template binding relative to entire the template
           * @param absoluteKeyOffset start of the `tplKey`
           * @param absoluteValueOffset start of the `tplValue`
           */

        }, {
          key: "_parseTemplateBindings",
          value: function _parseTemplateBindings(tplKey, tplValue, sourceSpan, absoluteKeyOffset, absoluteValueOffset) {
            var _this270 = this;

            var sourceInfo = sourceSpan.start.toString();

            try {
              var bindingsResult = this._exprParser.parseTemplateBindings(tplKey, tplValue, sourceInfo, absoluteKeyOffset, absoluteValueOffset);

              this._reportExpressionParserErrors(bindingsResult.errors, sourceSpan);

              bindingsResult.templateBindings.forEach(function (binding) {
                if (binding.value instanceof ASTWithSource) {
                  _this270._checkPipes(binding.value, sourceSpan);
                }
              });
              bindingsResult.warnings.forEach(function (warning) {
                _this270._reportError(warning, sourceSpan, ParseErrorLevel.WARNING);
              });
              return bindingsResult.templateBindings;
            } catch (e) {
              this._reportError("".concat(e), sourceSpan);

              return [];
            }
          }
        }, {
          key: "parseLiteralAttr",
          value: function parseLiteralAttr(name, value, sourceSpan, absoluteOffset, valueSpan, targetMatchableAttrs, // TODO(atscott): keySpan is only optional here so VE template parser implementation does not
          // have to change This should be required when VE is removed.
          targetProps, keySpan) {
            if (isAnimationLabel(name)) {
              name = name.substring(1);

              if (keySpan !== undefined) {
                keySpan = moveParseSourceSpan(keySpan, new AbsoluteSourceSpan(keySpan.start.offset + 1, keySpan.end.offset));
              }

              if (value) {
                this._reportError("Assigning animation triggers via @prop=\"exp\" attributes with an expression is invalid." + " Use property bindings (e.g. [@prop]=\"exp\") or use an attribute without a value (e.g. @prop) instead.", sourceSpan, ParseErrorLevel.ERROR);
              }

              this._parseAnimation(name, value, sourceSpan, absoluteOffset, keySpan, valueSpan, targetMatchableAttrs, targetProps);
            } else {
              targetProps.push(new ParsedProperty(name, this._exprParser.wrapLiteralPrimitive(value, '', absoluteOffset), ParsedPropertyType.LITERAL_ATTR, sourceSpan, keySpan, valueSpan));
            }
          }
        }, {
          key: "parsePropertyBinding",
          value: function parsePropertyBinding(name, expression, isHost, sourceSpan, absoluteOffset, valueSpan, // TODO(atscott): keySpan is only optional here so VE template parser implementation does not
          // have to change This should be required when VE is removed.
          targetMatchableAttrs, targetProps, keySpan) {
            if (name.length === 0) {
              this._reportError("Property name is missing in binding", sourceSpan);
            }

            var isAnimationProp = false;

            if (name.startsWith(ANIMATE_PROP_PREFIX)) {
              isAnimationProp = true;
              name = name.substring(ANIMATE_PROP_PREFIX.length);

              if (keySpan !== undefined) {
                keySpan = moveParseSourceSpan(keySpan, new AbsoluteSourceSpan(keySpan.start.offset + ANIMATE_PROP_PREFIX.length, keySpan.end.offset));
              }
            } else if (isAnimationLabel(name)) {
              isAnimationProp = true;
              name = name.substring(1);

              if (keySpan !== undefined) {
                keySpan = moveParseSourceSpan(keySpan, new AbsoluteSourceSpan(keySpan.start.offset + 1, keySpan.end.offset));
              }
            }

            if (isAnimationProp) {
              this._parseAnimation(name, expression, sourceSpan, absoluteOffset, keySpan, valueSpan, targetMatchableAttrs, targetProps);
            } else {
              this._parsePropertyAst(name, this._parseBinding(expression, isHost, valueSpan || sourceSpan, absoluteOffset), sourceSpan, keySpan, valueSpan, targetMatchableAttrs, targetProps);
            }
          }
        }, {
          key: "parsePropertyInterpolation",
          value: function parsePropertyInterpolation(name, value, sourceSpan, valueSpan, targetMatchableAttrs, // TODO(atscott): keySpan is only optional here so VE template parser implementation does not
          // have to change This should be required when VE is removed.
          targetProps, keySpan) {
            var expr = this.parseInterpolation(value, valueSpan || sourceSpan);

            if (expr) {
              this._parsePropertyAst(name, expr, sourceSpan, keySpan, valueSpan, targetMatchableAttrs, targetProps);

              return true;
            }

            return false;
          }
        }, {
          key: "_parsePropertyAst",
          value: function _parsePropertyAst(name, ast, sourceSpan, keySpan, valueSpan, targetMatchableAttrs, targetProps) {
            targetMatchableAttrs.push([name, ast.source]);
            targetProps.push(new ParsedProperty(name, ast, ParsedPropertyType.DEFAULT, sourceSpan, keySpan, valueSpan));
          }
        }, {
          key: "_parseAnimation",
          value: function _parseAnimation(name, expression, sourceSpan, absoluteOffset, keySpan, valueSpan, targetMatchableAttrs, targetProps) {
            if (name.length === 0) {
              this._reportError('Animation trigger is missing', sourceSpan);
            } // This will occur when a @trigger is not paired with an expression.
            // For animations it is valid to not have an expression since */void
            // states will be applied by angular when the element is attached/detached


            var ast = this._parseBinding(expression || 'undefined', false, valueSpan || sourceSpan, absoluteOffset);

            targetMatchableAttrs.push([name, ast.source]);
            targetProps.push(new ParsedProperty(name, ast, ParsedPropertyType.ANIMATION, sourceSpan, keySpan, valueSpan));
          }
        }, {
          key: "_parseBinding",
          value: function _parseBinding(value, isHostBinding, sourceSpan, absoluteOffset) {
            var sourceInfo = (sourceSpan && sourceSpan.start || '(unknown)').toString();

            try {
              var ast = isHostBinding ? this._exprParser.parseSimpleBinding(value, sourceInfo, absoluteOffset, this._interpolationConfig) : this._exprParser.parseBinding(value, sourceInfo, absoluteOffset, this._interpolationConfig);
              if (ast) this._reportExpressionParserErrors(ast.errors, sourceSpan);

              this._checkPipes(ast, sourceSpan);

              return ast;
            } catch (e) {
              this._reportError("".concat(e), sourceSpan);

              return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo, absoluteOffset);
            }
          }
        }, {
          key: "createBoundElementProperty",
          value: function createBoundElementProperty(elementSelector, boundProp) {
            var skipValidation = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
            var mapPropertyName = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;

            if (boundProp.isAnimation) {
              return new BoundElementProperty(boundProp.name, 4
              /* Animation */
              , SecurityContext.NONE, boundProp.expression, null, boundProp.sourceSpan, boundProp.keySpan, boundProp.valueSpan);
            }

            var unit = null;
            var bindingType = undefined;
            var boundPropertyName = null;
            var parts = boundProp.name.split(PROPERTY_PARTS_SEPARATOR);
            var securityContexts = undefined; // Check for special cases (prefix style, attr, class)

            if (parts.length > 1) {
              if (parts[0] == ATTRIBUTE_PREFIX) {
                boundPropertyName = parts.slice(1).join(PROPERTY_PARTS_SEPARATOR);

                if (!skipValidation) {
                  this._validatePropertyOrAttributeName(boundPropertyName, boundProp.sourceSpan, true);
                }

                securityContexts = _calcPossibleSecurityContexts(this._schemaRegistry, elementSelector, boundPropertyName, true);
                var nsSeparatorIdx = boundPropertyName.indexOf(':');

                if (nsSeparatorIdx > -1) {
                  var ns = boundPropertyName.substring(0, nsSeparatorIdx);
                  var name = boundPropertyName.substring(nsSeparatorIdx + 1);
                  boundPropertyName = mergeNsAndName(ns, name);
                }

                bindingType = 1
                /* Attribute */
                ;
              } else if (parts[0] == CLASS_PREFIX) {
                boundPropertyName = parts[1];
                bindingType = 2
                /* Class */
                ;
                securityContexts = [SecurityContext.NONE];
              } else if (parts[0] == STYLE_PREFIX) {
                unit = parts.length > 2 ? parts[2] : null;
                boundPropertyName = parts[1];
                bindingType = 3
                /* Style */
                ;
                securityContexts = [SecurityContext.STYLE];
              }
            } // If not a special case, use the full property name


            if (boundPropertyName === null) {
              var mappedPropName = this._schemaRegistry.getMappedPropName(boundProp.name);

              boundPropertyName = mapPropertyName ? mappedPropName : boundProp.name;
              securityContexts = _calcPossibleSecurityContexts(this._schemaRegistry, elementSelector, mappedPropName, false);
              bindingType = 0
              /* Property */
              ;

              if (!skipValidation) {
                this._validatePropertyOrAttributeName(mappedPropName, boundProp.sourceSpan, false);
              }
            }

            return new BoundElementProperty(boundPropertyName, bindingType, securityContexts[0], boundProp.expression, unit, boundProp.sourceSpan, boundProp.keySpan, boundProp.valueSpan);
          } // TODO: keySpan should be required but was made optional to avoid changing VE parser.

        }, {
          key: "parseEvent",
          value: function parseEvent(name, expression, sourceSpan, handlerSpan, targetMatchableAttrs, targetEvents, keySpan) {
            if (name.length === 0) {
              this._reportError("Event name is missing in binding", sourceSpan);
            }

            if (isAnimationLabel(name)) {
              name = name.substr(1);

              if (keySpan !== undefined) {
                keySpan = moveParseSourceSpan(keySpan, new AbsoluteSourceSpan(keySpan.start.offset + 1, keySpan.end.offset));
              }

              this._parseAnimationEvent(name, expression, sourceSpan, handlerSpan, targetEvents, keySpan);
            } else {
              this._parseRegularEvent(name, expression, sourceSpan, handlerSpan, targetMatchableAttrs, targetEvents, keySpan);
            }
          }
        }, {
          key: "calcPossibleSecurityContexts",
          value: function calcPossibleSecurityContexts(selector, propName, isAttribute) {
            var prop = this._schemaRegistry.getMappedPropName(propName);

            return _calcPossibleSecurityContexts(this._schemaRegistry, selector, prop, isAttribute);
          }
        }, {
          key: "_parseAnimationEvent",
          value: function _parseAnimationEvent(name, expression, sourceSpan, handlerSpan, targetEvents, keySpan) {
            var matches = splitAtPeriod(name, [name, '']);
            var eventName = matches[0];
            var phase = matches[1].toLowerCase();

            var ast = this._parseAction(expression, handlerSpan);

            targetEvents.push(new ParsedEvent(eventName, phase, 1
            /* Animation */
            , ast, sourceSpan, handlerSpan, keySpan));

            if (eventName.length === 0) {
              this._reportError("Animation event name is missing in binding", sourceSpan);
            }

            if (phase) {
              if (phase !== 'start' && phase !== 'done') {
                this._reportError("The provided animation output phase value \"".concat(phase, "\" for \"@").concat(eventName, "\" is not supported (use start or done)"), sourceSpan);
              }
            } else {
              this._reportError("The animation trigger output event (@".concat(eventName, ") is missing its phase value name (start or done are currently supported)"), sourceSpan);
            }
          }
        }, {
          key: "_parseRegularEvent",
          value: function _parseRegularEvent(name, expression, sourceSpan, handlerSpan, targetMatchableAttrs, targetEvents, keySpan) {
            // long format: 'target: eventName'
            var _splitAtColon3 = splitAtColon(name, [null, name]),
                _splitAtColon4 = _slicedToArray(_splitAtColon3, 2),
                target = _splitAtColon4[0],
                eventName = _splitAtColon4[1];

            var ast = this._parseAction(expression, handlerSpan);

            targetMatchableAttrs.push([name, ast.source]);
            targetEvents.push(new ParsedEvent(eventName, target, 0
            /* Regular */
            , ast, sourceSpan, handlerSpan, keySpan)); // Don't detect directives for event names for now,
            // so don't add the event name to the matchableAttrs
          }
        }, {
          key: "_parseAction",
          value: function _parseAction(value, sourceSpan) {
            var sourceInfo = (sourceSpan && sourceSpan.start || '(unknown').toString();
            var absoluteOffset = sourceSpan && sourceSpan.start ? sourceSpan.start.offset : 0;

            try {
              var ast = this._exprParser.parseAction(value, sourceInfo, absoluteOffset, this._interpolationConfig);

              if (ast) {
                this._reportExpressionParserErrors(ast.errors, sourceSpan);
              }

              if (!ast || ast.ast instanceof EmptyExpr) {
                this._reportError("Empty expressions are not allowed", sourceSpan);

                return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo, absoluteOffset);
              }

              this._checkPipes(ast, sourceSpan);

              return ast;
            } catch (e) {
              this._reportError("".concat(e), sourceSpan);

              return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo, absoluteOffset);
            }
          }
        }, {
          key: "_reportError",
          value: function _reportError(message, sourceSpan) {
            var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ParseErrorLevel.ERROR;
            this.errors.push(new ParseError(sourceSpan, message, level));
          }
        }, {
          key: "_reportExpressionParserErrors",
          value: function _reportExpressionParserErrors(errors, sourceSpan) {
            var _iterator18 = _createForOfIteratorHelper(errors),
                _step18;

            try {
              for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
                var _error = _step18.value;

                this._reportError(_error.message, sourceSpan);
              }
            } catch (err) {
              _iterator18.e(err);
            } finally {
              _iterator18.f();
            }
          } // Make sure all the used pipes are known in `this.pipesByName`

        }, {
          key: "_checkPipes",
          value: function _checkPipes(ast, sourceSpan) {
            var _this271 = this;

            if (ast && this.pipesByName) {
              var collector = new PipeCollector();
              ast.visit(collector);
              collector.pipes.forEach(function (ast, pipeName) {
                var pipeMeta = _this271.pipesByName.get(pipeName);

                if (!pipeMeta) {
                  _this271._reportError("The pipe '".concat(pipeName, "' could not be found"), new ParseSourceSpan(sourceSpan.start.moveBy(ast.span.start), sourceSpan.start.moveBy(ast.span.end)));
                } else {
                  _this271._usedPipes.set(pipeName, pipeMeta);
                }
              });
            }
          }
          /**
           * @param propName the name of the property / attribute
           * @param sourceSpan
           * @param isAttr true when binding to an attribute
           */

        }, {
          key: "_validatePropertyOrAttributeName",
          value: function _validatePropertyOrAttributeName(propName, sourceSpan, isAttr) {
            var report = isAttr ? this._schemaRegistry.validateAttribute(propName) : this._schemaRegistry.validateProperty(propName);

            if (report.error) {
              this._reportError(report.msg, sourceSpan, ParseErrorLevel.ERROR);
            }
          }
        }]);

        return BindingParser;
      }();

      var PipeCollector = /*#__PURE__*/function (_RecursiveAstVisitor$) {
        _inherits2(PipeCollector, _RecursiveAstVisitor$);

        var _super150 = _createSuper(PipeCollector);

        function PipeCollector() {
          var _this272;

          _classCallCheck2(this, PipeCollector);

          _this272 = _super150.apply(this, arguments);
          _this272.pipes = new Map();
          return _this272;
        }

        _createClass2(PipeCollector, [{
          key: "visitPipe",
          value: function visitPipe(ast, context) {
            this.pipes.set(ast.name, ast);
            ast.exp.visit(this);
            this.visitAll(ast.args, context);
            return null;
          }
        }]);

        return PipeCollector;
      }(RecursiveAstVisitor$1);

      function isAnimationLabel(name) {
        return name[0] == '@';
      }

      function _calcPossibleSecurityContexts(registry, selector, propName, isAttribute) {
        var ctxs = [];
        CssSelector.parse(selector).forEach(function (selector) {
          var elementNames = selector.element ? [selector.element] : registry.allKnownElementNames();
          var notElementNames = new Set(selector.notSelectors.filter(function (selector) {
            return selector.isElementSelector();
          }).map(function (selector) {
            return selector.element;
          }));
          var possibleElementNames = elementNames.filter(function (elementName) {
            return !notElementNames.has(elementName);
          });
          ctxs.push.apply(ctxs, _toConsumableArray(possibleElementNames.map(function (elementName) {
            return registry.securityContext(elementName, propName, isAttribute);
          })));
        });
        return ctxs.length === 0 ? [SecurityContext.NONE] : Array.from(new Set(ctxs)).sort();
      }
      /**
       * Compute a new ParseSourceSpan based off an original `sourceSpan` by using
       * absolute offsets from the specified `absoluteSpan`.
       *
       * @param sourceSpan original source span
       * @param absoluteSpan absolute source span to move to
       */


      function moveParseSourceSpan(sourceSpan, absoluteSpan) {
        // The difference of two absolute offsets provide the relative offset
        var startDiff = absoluteSpan.start - sourceSpan.start.offset;
        var endDiff = absoluteSpan.end - sourceSpan.end.offset;
        return new ParseSourceSpan(sourceSpan.start.moveBy(startDiff), sourceSpan.end.moveBy(endDiff), sourceSpan.fullStart.moveBy(startDiff), sourceSpan.details);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var NG_CONTENT_SELECT_ATTR = 'select';
      var LINK_ELEMENT = 'link';
      var LINK_STYLE_REL_ATTR = 'rel';
      var LINK_STYLE_HREF_ATTR = 'href';
      var LINK_STYLE_REL_VALUE = 'stylesheet';
      var STYLE_ELEMENT = 'style';
      var SCRIPT_ELEMENT = 'script';
      var NG_NON_BINDABLE_ATTR = 'ngNonBindable';
      var NG_PROJECT_AS = 'ngProjectAs';

      function preparseElement(ast) {
        var selectAttr = null;
        var hrefAttr = null;
        var relAttr = null;
        var nonBindable = false;
        var projectAs = '';
        ast.attrs.forEach(function (attr) {
          var lcAttrName = attr.name.toLowerCase();

          if (lcAttrName == NG_CONTENT_SELECT_ATTR) {
            selectAttr = attr.value;
          } else if (lcAttrName == LINK_STYLE_HREF_ATTR) {
            hrefAttr = attr.value;
          } else if (lcAttrName == LINK_STYLE_REL_ATTR) {
            relAttr = attr.value;
          } else if (attr.name == NG_NON_BINDABLE_ATTR) {
            nonBindable = true;
          } else if (attr.name == NG_PROJECT_AS) {
            if (attr.value.length > 0) {
              projectAs = attr.value;
            }
          }
        });
        selectAttr = normalizeNgContentSelect(selectAttr);
        var nodeName = ast.name.toLowerCase();
        var type = PreparsedElementType.OTHER;

        if (isNgContent(nodeName)) {
          type = PreparsedElementType.NG_CONTENT;
        } else if (nodeName == STYLE_ELEMENT) {
          type = PreparsedElementType.STYLE;
        } else if (nodeName == SCRIPT_ELEMENT) {
          type = PreparsedElementType.SCRIPT;
        } else if (nodeName == LINK_ELEMENT && relAttr == LINK_STYLE_REL_VALUE) {
          type = PreparsedElementType.STYLESHEET;
        }

        return new PreparsedElement(type, selectAttr, hrefAttr, nonBindable, projectAs);
      }

      var PreparsedElementType;

      (function (PreparsedElementType) {
        PreparsedElementType[PreparsedElementType["NG_CONTENT"] = 0] = "NG_CONTENT";
        PreparsedElementType[PreparsedElementType["STYLE"] = 1] = "STYLE";
        PreparsedElementType[PreparsedElementType["STYLESHEET"] = 2] = "STYLESHEET";
        PreparsedElementType[PreparsedElementType["SCRIPT"] = 3] = "SCRIPT";
        PreparsedElementType[PreparsedElementType["OTHER"] = 4] = "OTHER";
      })(PreparsedElementType || (PreparsedElementType = {}));

      var PreparsedElement = function PreparsedElement(type, selectAttr, hrefAttr, nonBindable, projectAs) {
        _classCallCheck2(this, PreparsedElement);

        this.type = type;
        this.selectAttr = selectAttr;
        this.hrefAttr = hrefAttr;
        this.nonBindable = nonBindable;
        this.projectAs = projectAs;
      };

      function normalizeNgContentSelect(selectAttr) {
        if (selectAttr === null || selectAttr.length === 0) {
          return '*';
        }

        return selectAttr;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var BIND_NAME_REGEXP = /^(?:(?:(?:(bind-)|(let-)|(ref-|#)|(on-)|(bindon-)|(@))(.*))|\[\(([^\)]+)\)\]|\[([^\]]+)\]|\(([^\)]+)\))$/; // Group 1 = "bind-"

      var KW_BIND_IDX = 1; // Group 2 = "let-"

      var KW_LET_IDX = 2; // Group 3 = "ref-/#"

      var KW_REF_IDX = 3; // Group 4 = "on-"

      var KW_ON_IDX = 4; // Group 5 = "bindon-"

      var KW_BINDON_IDX = 5; // Group 6 = "@"

      var KW_AT_IDX = 6; // Group 7 = the identifier after "bind-", "let-", "ref-/#", "on-", "bindon-" or "@"

      var IDENT_KW_IDX = 7; // Group 8 = identifier inside [()]

      var IDENT_BANANA_BOX_IDX = 8; // Group 9 = identifier inside []

      var IDENT_PROPERTY_IDX = 9; // Group 10 = identifier inside ()

      var IDENT_EVENT_IDX = 10;
      var TEMPLATE_ATTR_PREFIX$1 = '*';
      var CLASS_ATTR = 'class';

      var _TEXT_CSS_SELECTOR;

      function TEXT_CSS_SELECTOR() {
        if (!_TEXT_CSS_SELECTOR) {
          _TEXT_CSS_SELECTOR = CssSelector.parse('*')[0];
        }

        return _TEXT_CSS_SELECTOR;
      }

      var TemplateParseError = /*#__PURE__*/function (_ParseError5) {
        _inherits2(TemplateParseError, _ParseError5);

        var _super151 = _createSuper(TemplateParseError);

        function TemplateParseError(message, span, level) {
          _classCallCheck2(this, TemplateParseError);

          return _super151.call(this, span, message, level);
        }

        return TemplateParseError;
      }(ParseError);

      var TemplateParseResult = function TemplateParseResult(templateAst, usedPipes, errors) {
        _classCallCheck2(this, TemplateParseResult);

        this.templateAst = templateAst;
        this.usedPipes = usedPipes;
        this.errors = errors;
      };

      var TemplateParser = /*#__PURE__*/function () {
        function TemplateParser(_config, _reflector, _exprParser, _schemaRegistry, _htmlParser, _console, transforms) {
          _classCallCheck2(this, TemplateParser);

          this._config = _config;
          this._reflector = _reflector;
          this._exprParser = _exprParser;
          this._schemaRegistry = _schemaRegistry;
          this._htmlParser = _htmlParser;
          this._console = _console;
          this.transforms = transforms;
        }

        _createClass2(TemplateParser, [{
          key: "expressionParser",
          get: function get() {
            return this._exprParser;
          }
        }, {
          key: "parse",
          value: function parse(component, template, directives, pipes, schemas, templateUrl, preserveWhitespaces) {
            var _a;

            var result = this.tryParse(component, template, directives, pipes, schemas, templateUrl, preserveWhitespaces);
            var warnings = result.errors.filter(function (error) {
              return error.level === ParseErrorLevel.WARNING;
            });
            var errors = result.errors.filter(function (error) {
              return error.level === ParseErrorLevel.ERROR;
            });

            if (warnings.length > 0) {
              (_a = this._console) === null || _a === void 0 ? void 0 : _a.warn("Template parse warnings:\n".concat(warnings.join('\n')));
            }

            if (errors.length > 0) {
              var errorString = errors.join('\n');
              throw syntaxError("Template parse errors:\n".concat(errorString), errors);
            }

            return {
              template: result.templateAst,
              pipes: result.usedPipes
            };
          }
        }, {
          key: "tryParse",
          value: function tryParse(component, template, directives, pipes, schemas, templateUrl, preserveWhitespaces) {
            var htmlParseResult = typeof template === 'string' ? this._htmlParser.parse(template, templateUrl, {
              tokenizeExpansionForms: true,
              interpolationConfig: this.getInterpolationConfig(component)
            }) : template;

            if (!preserveWhitespaces) {
              htmlParseResult = removeWhitespaces(htmlParseResult);
            }

            return this.tryParseHtml(this.expandHtml(htmlParseResult), component, directives, pipes, schemas);
          }
        }, {
          key: "tryParseHtml",
          value: function tryParseHtml(htmlAstWithErrors, component, directives, pipes, schemas) {
            var result;
            var errors = htmlAstWithErrors.errors;
            var usedPipes = [];

            if (htmlAstWithErrors.rootNodes.length > 0) {
              var uniqDirectives = removeSummaryDuplicates(directives);
              var uniqPipes = removeSummaryDuplicates(pipes);
              var providerViewContext = new ProviderViewContext(this._reflector, component);
              var interpolationConfig = undefined;

              if (component.template && component.template.interpolation) {
                interpolationConfig = {
                  start: component.template.interpolation[0],
                  end: component.template.interpolation[1]
                };
              }

              var bindingParser = new BindingParser(this._exprParser, interpolationConfig, this._schemaRegistry, uniqPipes, errors);
              var parseVisitor = new TemplateParseVisitor(this._reflector, this._config, providerViewContext, uniqDirectives, bindingParser, this._schemaRegistry, schemas, errors);
              result = visitAll$1(parseVisitor, htmlAstWithErrors.rootNodes, EMPTY_ELEMENT_CONTEXT);
              errors.push.apply(errors, _toConsumableArray(providerViewContext.errors));
              usedPipes.push.apply(usedPipes, _toConsumableArray(bindingParser.getUsedPipes()));
            } else {
              result = [];
            }

            this._assertNoReferenceDuplicationOnTemplate(result, errors);

            if (errors.length > 0) {
              return new TemplateParseResult(result, usedPipes, errors);
            }

            if (this.transforms) {
              this.transforms.forEach(function (transform) {
                result = templateVisitAll(transform, result);
              });
            }

            return new TemplateParseResult(result, usedPipes, errors);
          }
        }, {
          key: "expandHtml",
          value: function expandHtml(htmlAstWithErrors) {
            var forced = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
            var errors = htmlAstWithErrors.errors;

            if (errors.length == 0 || forced) {
              // Transform ICU messages to angular directives
              var expandedHtmlAst = expandNodes(htmlAstWithErrors.rootNodes);
              errors.push.apply(errors, _toConsumableArray(expandedHtmlAst.errors));
              htmlAstWithErrors = new ParseTreeResult(expandedHtmlAst.nodes, errors);
            }

            return htmlAstWithErrors;
          }
        }, {
          key: "getInterpolationConfig",
          value: function getInterpolationConfig(component) {
            if (component.template) {
              return InterpolationConfig.fromArray(component.template.interpolation);
            }

            return undefined;
          }
          /** @internal */

        }, {
          key: "_assertNoReferenceDuplicationOnTemplate",
          value: function _assertNoReferenceDuplicationOnTemplate(result, errors) {
            var existingReferences = [];
            result.filter(function (element) {
              return !!element.references;
            }).forEach(function (element) {
              return element.references.forEach(function (reference) {
                var name = reference.name;

                if (existingReferences.indexOf(name) < 0) {
                  existingReferences.push(name);
                } else {
                  var _error2 = new TemplateParseError("Reference \"#".concat(name, "\" is defined several times"), reference.sourceSpan, ParseErrorLevel.ERROR);

                  errors.push(_error2);
                }
              });
            });
          }
        }]);

        return TemplateParser;
      }();

      var TemplateParseVisitor = /*#__PURE__*/function () {
        function TemplateParseVisitor(reflector, config, providerViewContext, directives, _bindingParser, _schemaRegistry, _schemas, _targetErrors) {
          var _this273 = this;

          _classCallCheck2(this, TemplateParseVisitor);

          this.reflector = reflector;
          this.config = config;
          this.providerViewContext = providerViewContext;
          this._bindingParser = _bindingParser;
          this._schemaRegistry = _schemaRegistry;
          this._schemas = _schemas;
          this._targetErrors = _targetErrors;
          this.selectorMatcher = new SelectorMatcher();
          this.directivesIndex = new Map();
          this.ngContentCount = 0; // Note: queries start with id 1 so we can use the number in a Bloom filter!

          this.contentQueryStartId = providerViewContext.component.viewQueries.length + 1;
          directives.forEach(function (directive, index) {
            var selector = CssSelector.parse(directive.selector);

            _this273.selectorMatcher.addSelectables(selector, directive);

            _this273.directivesIndex.set(directive, index);
          });
        }

        _createClass2(TemplateParseVisitor, [{
          key: "visitExpansion",
          value: function visitExpansion(expansion, context) {
            return null;
          }
        }, {
          key: "visitExpansionCase",
          value: function visitExpansionCase(expansionCase, context) {
            return null;
          }
        }, {
          key: "visitText",
          value: function visitText(text, parent) {
            var ngContentIndex = parent.findNgContentIndex(TEXT_CSS_SELECTOR());
            var valueNoNgsp = replaceNgsp(text.value);

            var expr = this._bindingParser.parseInterpolation(valueNoNgsp, text.sourceSpan);

            return expr ? new BoundTextAst(expr, ngContentIndex, text.sourceSpan) : new TextAst(valueNoNgsp, ngContentIndex, text.sourceSpan);
          }
        }, {
          key: "visitAttribute",
          value: function visitAttribute(attribute, context) {
            return new AttrAst(attribute.name, attribute.value, attribute.sourceSpan);
          }
        }, {
          key: "visitComment",
          value: function visitComment(comment, context) {
            return null;
          }
        }, {
          key: "visitElement",
          value: function visitElement(element, parent) {
            var _this274 = this;

            var queryStartIndex = this.contentQueryStartId;
            var elName = element.name;
            var preparsedElement = preparseElement(element);

            if (preparsedElement.type === PreparsedElementType.SCRIPT || preparsedElement.type === PreparsedElementType.STYLE) {
              // Skipping <script> for security reasons
              // Skipping <style> as we already processed them
              // in the StyleCompiler
              return null;
            }

            if (preparsedElement.type === PreparsedElementType.STYLESHEET && isStyleUrlResolvable(preparsedElement.hrefAttr)) {
              // Skipping stylesheets with either relative urls or package scheme as we already processed
              // them in the StyleCompiler
              return null;
            }

            var matchableAttrs = [];
            var elementOrDirectiveProps = [];
            var elementOrDirectiveRefs = [];
            var elementVars = [];
            var events = [];
            var templateElementOrDirectiveProps = [];
            var templateMatchableAttrs = [];
            var templateElementVars = [];
            var hasInlineTemplates = false;
            var attrs = [];
            var isTemplateElement = isNgTemplate(element.name);
            element.attrs.forEach(function (attr) {
              var parsedVariables = [];

              var hasBinding = _this274._parseAttr(isTemplateElement, attr, matchableAttrs, elementOrDirectiveProps, events, elementOrDirectiveRefs, elementVars);

              elementVars.push.apply(elementVars, _toConsumableArray(parsedVariables.map(function (v) {
                return VariableAst.fromParsedVariable(v);
              })));
              var templateValue;
              var templateKey;

              var normalizedName = _this274._normalizeAttributeName(attr.name);

              if (normalizedName.startsWith(TEMPLATE_ATTR_PREFIX$1)) {
                templateValue = attr.value;
                templateKey = normalizedName.substring(TEMPLATE_ATTR_PREFIX$1.length);
              }

              var hasTemplateBinding = templateValue != null;

              if (hasTemplateBinding) {
                if (hasInlineTemplates) {
                  _this274._reportError("Can't have multiple template bindings on one element. Use only one attribute prefixed with *", attr.sourceSpan);
                }

                hasInlineTemplates = true;
                var _parsedVariables = [];
                var absoluteOffset = (attr.valueSpan || attr.sourceSpan).start.offset;

                _this274._bindingParser.parseInlineTemplateBinding(templateKey, templateValue, attr.sourceSpan, absoluteOffset, templateMatchableAttrs, templateElementOrDirectiveProps, _parsedVariables, false
                /* isIvyAst */
                );

                templateElementVars.push.apply(templateElementVars, _toConsumableArray(_parsedVariables.map(function (v) {
                  return VariableAst.fromParsedVariable(v);
                })));
              }

              if (!hasBinding && !hasTemplateBinding) {
                // don't include the bindings as attributes as well in the AST
                attrs.push(_this274.visitAttribute(attr, null));
                matchableAttrs.push([attr.name, attr.value]);
              }
            });
            var elementCssSelector = createElementCssSelector(elName, matchableAttrs);

            var _this$_parseDirective = this._parseDirectives(this.selectorMatcher, elementCssSelector),
                directiveMetas = _this$_parseDirective.directives,
                matchElement = _this$_parseDirective.matchElement;

            var references = [];
            var boundDirectivePropNames = new Set();

            var directiveAsts = this._createDirectiveAsts(isTemplateElement, element.name, directiveMetas, elementOrDirectiveProps, elementOrDirectiveRefs, element.sourceSpan, references, boundDirectivePropNames);

            var elementProps = this._createElementPropertyAsts(element.name, elementOrDirectiveProps, boundDirectivePropNames);

            var isViewRoot = parent.isTemplateElement || hasInlineTemplates;
            var providerContext = new ProviderElementContext(this.providerViewContext, parent.providerContext, isViewRoot, directiveAsts, attrs, references, isTemplateElement, queryStartIndex, element.sourceSpan);
            var children = visitAll$1(preparsedElement.nonBindable ? NON_BINDABLE_VISITOR : this, element.children, ElementContext.create(isTemplateElement, directiveAsts, isTemplateElement ? parent.providerContext : providerContext));
            providerContext.afterElement(); // Override the actual selector when the `ngProjectAs` attribute is provided

            var projectionSelector = preparsedElement.projectAs != '' ? CssSelector.parse(preparsedElement.projectAs)[0] : elementCssSelector;
            var ngContentIndex = parent.findNgContentIndex(projectionSelector);
            var parsedElement;

            if (preparsedElement.type === PreparsedElementType.NG_CONTENT) {
              // `<ng-content>` element
              if (element.children && !element.children.every(_isEmptyTextNode)) {
                this._reportError("<ng-content> element cannot have content.", element.sourceSpan);
              }

              parsedElement = new NgContentAst(this.ngContentCount++, hasInlineTemplates ? null : ngContentIndex, element.sourceSpan);
            } else if (isTemplateElement) {
              // `<ng-template>` element
              this._assertAllEventsPublishedByDirectives(directiveAsts, events);

              this._assertNoComponentsNorElementBindingsOnTemplate(directiveAsts, elementProps, element.sourceSpan);

              parsedElement = new EmbeddedTemplateAst(attrs, events, references, elementVars, providerContext.transformedDirectiveAsts, providerContext.transformProviders, providerContext.transformedHasViewContainer, providerContext.queryMatches, children, hasInlineTemplates ? null : ngContentIndex, element.sourceSpan);
            } else {
              // element other than `<ng-content>` and `<ng-template>`
              this._assertElementExists(matchElement, element);

              this._assertOnlyOneComponent(directiveAsts, element.sourceSpan);

              var _ngContentIndex = hasInlineTemplates ? null : parent.findNgContentIndex(projectionSelector);

              parsedElement = new ElementAst(elName, attrs, elementProps, events, references, providerContext.transformedDirectiveAsts, providerContext.transformProviders, providerContext.transformedHasViewContainer, providerContext.queryMatches, children, hasInlineTemplates ? null : _ngContentIndex, element.sourceSpan, element.endSourceSpan || null);
            }

            if (hasInlineTemplates) {
              // The element as a *-attribute
              var templateQueryStartIndex = this.contentQueryStartId;
              var templateSelector = createElementCssSelector('ng-template', templateMatchableAttrs);

              var _this$_parseDirective2 = this._parseDirectives(this.selectorMatcher, templateSelector),
                  directives = _this$_parseDirective2.directives;

              var templateBoundDirectivePropNames = new Set();

              var templateDirectiveAsts = this._createDirectiveAsts(true, elName, directives, templateElementOrDirectiveProps, [], element.sourceSpan, [], templateBoundDirectivePropNames);

              var templateElementProps = this._createElementPropertyAsts(elName, templateElementOrDirectiveProps, templateBoundDirectivePropNames);

              this._assertNoComponentsNorElementBindingsOnTemplate(templateDirectiveAsts, templateElementProps, element.sourceSpan);

              var templateProviderContext = new ProviderElementContext(this.providerViewContext, parent.providerContext, parent.isTemplateElement, templateDirectiveAsts, [], [], true, templateQueryStartIndex, element.sourceSpan);
              templateProviderContext.afterElement();
              parsedElement = new EmbeddedTemplateAst([], [], [], templateElementVars, templateProviderContext.transformedDirectiveAsts, templateProviderContext.transformProviders, templateProviderContext.transformedHasViewContainer, templateProviderContext.queryMatches, [parsedElement], ngContentIndex, element.sourceSpan);
            }

            return parsedElement;
          }
        }, {
          key: "_parseAttr",
          value: function _parseAttr(isTemplateElement, attr, targetMatchableAttrs, targetProps, targetEvents, targetRefs, targetVars) {
            var name = this._normalizeAttributeName(attr.name);

            var value = attr.value;
            var srcSpan = attr.sourceSpan;
            var absoluteOffset = attr.valueSpan ? attr.valueSpan.start.offset : srcSpan.start.offset;
            var boundEvents = [];
            var bindParts = name.match(BIND_NAME_REGEXP);
            var hasBinding = false;

            if (bindParts !== null) {
              hasBinding = true;

              if (bindParts[KW_BIND_IDX] != null) {
                this._bindingParser.parsePropertyBinding(bindParts[IDENT_KW_IDX], value, false, srcSpan, absoluteOffset, attr.valueSpan, targetMatchableAttrs, targetProps);
              } else if (bindParts[KW_LET_IDX]) {
                if (isTemplateElement) {
                  var identifier = bindParts[IDENT_KW_IDX];

                  this._parseVariable(identifier, value, srcSpan, targetVars);
                } else {
                  this._reportError("\"let-\" is only supported on ng-template elements.", srcSpan);
                }
              } else if (bindParts[KW_REF_IDX]) {
                var _identifier = bindParts[IDENT_KW_IDX];

                this._parseReference(_identifier, value, srcSpan, targetRefs);
              } else if (bindParts[KW_ON_IDX]) {
                this._bindingParser.parseEvent(bindParts[IDENT_KW_IDX], value, srcSpan, attr.valueSpan || srcSpan, targetMatchableAttrs, boundEvents);
              } else if (bindParts[KW_BINDON_IDX]) {
                this._bindingParser.parsePropertyBinding(bindParts[IDENT_KW_IDX], value, false, srcSpan, absoluteOffset, attr.valueSpan, targetMatchableAttrs, targetProps);

                this._parseAssignmentEvent(bindParts[IDENT_KW_IDX], value, srcSpan, attr.valueSpan || srcSpan, targetMatchableAttrs, boundEvents);
              } else if (bindParts[KW_AT_IDX]) {
                this._bindingParser.parseLiteralAttr(name, value, srcSpan, absoluteOffset, attr.valueSpan, targetMatchableAttrs, targetProps);
              } else if (bindParts[IDENT_BANANA_BOX_IDX]) {
                this._bindingParser.parsePropertyBinding(bindParts[IDENT_BANANA_BOX_IDX], value, false, srcSpan, absoluteOffset, attr.valueSpan, targetMatchableAttrs, targetProps);

                this._parseAssignmentEvent(bindParts[IDENT_BANANA_BOX_IDX], value, srcSpan, attr.valueSpan || srcSpan, targetMatchableAttrs, boundEvents);
              } else if (bindParts[IDENT_PROPERTY_IDX]) {
                this._bindingParser.parsePropertyBinding(bindParts[IDENT_PROPERTY_IDX], value, false, srcSpan, absoluteOffset, attr.valueSpan, targetMatchableAttrs, targetProps);
              } else if (bindParts[IDENT_EVENT_IDX]) {
                this._bindingParser.parseEvent(bindParts[IDENT_EVENT_IDX], value, srcSpan, attr.valueSpan || srcSpan, targetMatchableAttrs, boundEvents);
              }
            } else {
              hasBinding = this._bindingParser.parsePropertyInterpolation(name, value, srcSpan, attr.valueSpan, targetMatchableAttrs, targetProps);
            }

            if (!hasBinding) {
              this._bindingParser.parseLiteralAttr(name, value, srcSpan, absoluteOffset, attr.valueSpan, targetMatchableAttrs, targetProps);
            }

            targetEvents.push.apply(targetEvents, _toConsumableArray(boundEvents.map(function (e) {
              return BoundEventAst.fromParsedEvent(e);
            })));
            return hasBinding;
          }
        }, {
          key: "_normalizeAttributeName",
          value: function _normalizeAttributeName(attrName) {
            return /^data-/i.test(attrName) ? attrName.substring(5) : attrName;
          }
        }, {
          key: "_parseVariable",
          value: function _parseVariable(identifier, value, sourceSpan, targetVars) {
            if (identifier.indexOf('-') > -1) {
              this._reportError("\"-\" is not allowed in variable names", sourceSpan);
            } else if (identifier.length === 0) {
              this._reportError("Variable does not have a name", sourceSpan);
            }

            targetVars.push(new VariableAst(identifier, value, sourceSpan));
          }
        }, {
          key: "_parseReference",
          value: function _parseReference(identifier, value, sourceSpan, targetRefs) {
            if (identifier.indexOf('-') > -1) {
              this._reportError("\"-\" is not allowed in reference names", sourceSpan);
            } else if (identifier.length === 0) {
              this._reportError("Reference does not have a name", sourceSpan);
            }

            targetRefs.push(new ElementOrDirectiveRef(identifier, value, sourceSpan));
          }
        }, {
          key: "_parseAssignmentEvent",
          value: function _parseAssignmentEvent(name, expression, sourceSpan, valueSpan, targetMatchableAttrs, targetEvents) {
            this._bindingParser.parseEvent("".concat(name, "Change"), "".concat(expression, "=$event"), sourceSpan, valueSpan, targetMatchableAttrs, targetEvents);
          }
        }, {
          key: "_parseDirectives",
          value: function _parseDirectives(selectorMatcher, elementCssSelector) {
            var _this275 = this;

            // Need to sort the directives so that we get consistent results throughout,
            // as selectorMatcher uses Maps inside.
            // Also deduplicate directives as they might match more than one time!
            var directives = newArray(this.directivesIndex.size); // Whether any directive selector matches on the element name

            var matchElement = false;
            selectorMatcher.match(elementCssSelector, function (selector, directive) {
              directives[_this275.directivesIndex.get(directive)] = directive;
              matchElement = matchElement || selector.hasElementSelector();
            });
            return {
              directives: directives.filter(function (dir) {
                return !!dir;
              }),
              matchElement: matchElement
            };
          }
        }, {
          key: "_createDirectiveAsts",
          value: function _createDirectiveAsts(isTemplateElement, elementName, directives, props, elementOrDirectiveRefs, elementSourceSpan, targetReferences, targetBoundDirectivePropNames) {
            var _this276 = this;

            var matchedReferences = new Set();
            var component = null;
            var directiveAsts = directives.map(function (directive) {
              var sourceSpan = new ParseSourceSpan(elementSourceSpan.start, elementSourceSpan.end, elementSourceSpan.fullStart, "Directive ".concat(identifierName(directive.type)));

              if (directive.isComponent) {
                component = directive;
              }

              var directiveProperties = [];

              var boundProperties = _this276._bindingParser.createDirectiveHostPropertyAsts(directive, elementName, sourceSpan);

              var hostProperties = boundProperties.map(function (prop) {
                return BoundElementPropertyAst.fromBoundProperty(prop);
              }); // Note: We need to check the host properties here as well,
              // as we don't know the element name in the DirectiveWrapperCompiler yet.

              hostProperties = _this276._checkPropertiesInSchema(elementName, hostProperties);

              var parsedEvents = _this276._bindingParser.createDirectiveHostEventAsts(directive, sourceSpan);

              _this276._createDirectivePropertyAsts(directive.inputs, props, directiveProperties, targetBoundDirectivePropNames);

              elementOrDirectiveRefs.forEach(function (elOrDirRef) {
                if (elOrDirRef.value.length === 0 && directive.isComponent || elOrDirRef.isReferenceToDirective(directive)) {
                  targetReferences.push(new ReferenceAst(elOrDirRef.name, createTokenForReference(directive.type.reference), elOrDirRef.value, elOrDirRef.sourceSpan));
                  matchedReferences.add(elOrDirRef.name);
                }
              });
              var hostEvents = parsedEvents.map(function (e) {
                return BoundEventAst.fromParsedEvent(e);
              });
              var contentQueryStartId = _this276.contentQueryStartId;
              _this276.contentQueryStartId += directive.queries.length;
              return new DirectiveAst(directive, directiveProperties, hostProperties, hostEvents, contentQueryStartId, sourceSpan);
            });
            elementOrDirectiveRefs.forEach(function (elOrDirRef) {
              if (elOrDirRef.value.length > 0) {
                if (!matchedReferences.has(elOrDirRef.name)) {
                  _this276._reportError("There is no directive with \"exportAs\" set to \"".concat(elOrDirRef.value, "\""), elOrDirRef.sourceSpan);
                }
              } else if (!component) {
                var refToken = null;

                if (isTemplateElement) {
                  refToken = createTokenForExternalReference(_this276.reflector, Identifiers.TemplateRef);
                }

                targetReferences.push(new ReferenceAst(elOrDirRef.name, refToken, elOrDirRef.value, elOrDirRef.sourceSpan));
              }
            });
            return directiveAsts;
          }
        }, {
          key: "_createDirectivePropertyAsts",
          value: function _createDirectivePropertyAsts(directiveProperties, boundProps, targetBoundDirectiveProps, targetBoundDirectivePropNames) {
            if (directiveProperties) {
              var boundPropsByName = new Map();
              boundProps.forEach(function (boundProp) {
                var prevValue = boundPropsByName.get(boundProp.name);

                if (!prevValue || prevValue.isLiteral) {
                  // give [a]="b" a higher precedence than a="b" on the same element
                  boundPropsByName.set(boundProp.name, boundProp);
                }
              });
              Object.keys(directiveProperties).forEach(function (dirProp) {
                var elProp = directiveProperties[dirProp];
                var boundProp = boundPropsByName.get(elProp); // Bindings are optional, so this binding only needs to be set up if an expression is given.

                if (boundProp) {
                  targetBoundDirectivePropNames.add(boundProp.name);

                  if (!isEmptyExpression(boundProp.expression)) {
                    targetBoundDirectiveProps.push(new BoundDirectivePropertyAst(dirProp, boundProp.name, boundProp.expression, boundProp.sourceSpan));
                  }
                }
              });
            }
          }
        }, {
          key: "_createElementPropertyAsts",
          value: function _createElementPropertyAsts(elementName, props, boundDirectivePropNames) {
            var _this277 = this;

            var boundElementProps = [];
            props.forEach(function (prop) {
              if (!prop.isLiteral && !boundDirectivePropNames.has(prop.name)) {
                var boundProp = _this277._bindingParser.createBoundElementProperty(elementName, prop);

                boundElementProps.push(BoundElementPropertyAst.fromBoundProperty(boundProp));
              }
            });
            return this._checkPropertiesInSchema(elementName, boundElementProps);
          }
        }, {
          key: "_findComponentDirectives",
          value: function _findComponentDirectives(directives) {
            return directives.filter(function (directive) {
              return directive.directive.isComponent;
            });
          }
        }, {
          key: "_findComponentDirectiveNames",
          value: function _findComponentDirectiveNames(directives) {
            return this._findComponentDirectives(directives).map(function (directive) {
              return identifierName(directive.directive.type);
            });
          }
        }, {
          key: "_assertOnlyOneComponent",
          value: function _assertOnlyOneComponent(directives, sourceSpan) {
            var componentTypeNames = this._findComponentDirectiveNames(directives);

            if (componentTypeNames.length > 1) {
              this._reportError("More than one component matched on this element.\n" + "Make sure that only one component's selector can match a given element.\n" + "Conflicting components: ".concat(componentTypeNames.join(',')), sourceSpan);
            }
          }
          /**
           * Make sure that non-angular tags conform to the schemas.
           *
           * Note: An element is considered an angular tag when at least one directive selector matches the
           * tag name.
           *
           * @param matchElement Whether any directive has matched on the tag name
           * @param element the html element
           */

        }, {
          key: "_assertElementExists",
          value: function _assertElementExists(matchElement, element) {
            var elName = element.name.replace(/^:xhtml:/, '');

            if (!matchElement && !this._schemaRegistry.hasElement(elName, this._schemas)) {
              var errorMsg = "'".concat(elName, "' is not a known element:\n");
              errorMsg += "1. If '".concat(elName, "' is an Angular component, then verify that it is part of this module.\n");

              if (elName.indexOf('-') > -1) {
                errorMsg += "2. If '".concat(elName, "' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.");
              } else {
                errorMsg += "2. To allow any element add 'NO_ERRORS_SCHEMA' to the '@NgModule.schemas' of this component.";
              }

              this._reportError(errorMsg, element.sourceSpan);
            }
          }
        }, {
          key: "_assertNoComponentsNorElementBindingsOnTemplate",
          value: function _assertNoComponentsNorElementBindingsOnTemplate(directives, elementProps, sourceSpan) {
            var _this278 = this;

            var componentTypeNames = this._findComponentDirectiveNames(directives);

            if (componentTypeNames.length > 0) {
              this._reportError("Components on an embedded template: ".concat(componentTypeNames.join(',')), sourceSpan);
            }

            elementProps.forEach(function (prop) {
              _this278._reportError("Property binding ".concat(prop.name, " not used by any directive on an embedded template. Make sure that the property name is spelled correctly and all directives are listed in the \"@NgModule.declarations\"."), sourceSpan);
            });
          }
        }, {
          key: "_assertAllEventsPublishedByDirectives",
          value: function _assertAllEventsPublishedByDirectives(directives, events) {
            var _this279 = this;

            var allDirectiveEvents = new Set();
            directives.forEach(function (directive) {
              Object.keys(directive.directive.outputs).forEach(function (k) {
                var eventName = directive.directive.outputs[k];
                allDirectiveEvents.add(eventName);
              });
            });
            events.forEach(function (event) {
              if (event.target != null || !allDirectiveEvents.has(event.name)) {
                _this279._reportError("Event binding ".concat(event.fullName, " not emitted by any directive on an embedded template. Make sure that the event name is spelled correctly and all directives are listed in the \"@NgModule.declarations\"."), event.sourceSpan);
              }
            });
          }
        }, {
          key: "_checkPropertiesInSchema",
          value: function _checkPropertiesInSchema(elementName, boundProps) {
            var _this280 = this;

            // Note: We can't filter out empty expressions before this method,
            // as we still want to validate them!
            return boundProps.filter(function (boundProp) {
              if (boundProp.type === 0
              /* Property */
              && !_this280._schemaRegistry.hasProperty(elementName, boundProp.name, _this280._schemas)) {
                var errorMsg = "Can't bind to '".concat(boundProp.name, "' since it isn't a known property of '").concat(elementName, "'.");

                if (elementName.startsWith('ng-')) {
                  errorMsg += "\n1. If '".concat(boundProp.name, "' is an Angular directive, then add 'CommonModule' to the '@NgModule.imports' of this component.") + "\n2. To allow any property add 'NO_ERRORS_SCHEMA' to the '@NgModule.schemas' of this component.";
                } else if (elementName.indexOf('-') > -1) {
                  errorMsg += "\n1. If '".concat(elementName, "' is an Angular component and it has '").concat(boundProp.name, "' input, then verify that it is part of this module.") + "\n2. If '".concat(elementName, "' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.") + "\n3. To allow any property add 'NO_ERRORS_SCHEMA' to the '@NgModule.schemas' of this component.";
                }

                _this280._reportError(errorMsg, boundProp.sourceSpan);
              }

              return !isEmptyExpression(boundProp.value);
            });
          }
        }, {
          key: "_reportError",
          value: function _reportError(message, sourceSpan) {
            var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ParseErrorLevel.ERROR;

            this._targetErrors.push(new ParseError(sourceSpan, message, level));
          }
        }]);

        return TemplateParseVisitor;
      }();

      var NonBindableVisitor = /*#__PURE__*/function () {
        function NonBindableVisitor() {
          _classCallCheck2(this, NonBindableVisitor);
        }

        _createClass2(NonBindableVisitor, [{
          key: "visitElement",
          value: function visitElement(ast, parent) {
            var preparsedElement = preparseElement(ast);

            if (preparsedElement.type === PreparsedElementType.SCRIPT || preparsedElement.type === PreparsedElementType.STYLE || preparsedElement.type === PreparsedElementType.STYLESHEET) {
              // Skipping <script> for security reasons
              // Skipping <style> and stylesheets as we already processed them
              // in the StyleCompiler
              return null;
            }

            var attrNameAndValues = ast.attrs.map(function (attr) {
              return [attr.name, attr.value];
            });
            var selector = createElementCssSelector(ast.name, attrNameAndValues);
            var ngContentIndex = parent.findNgContentIndex(selector);
            var children = visitAll$1(this, ast.children, EMPTY_ELEMENT_CONTEXT);
            return new ElementAst(ast.name, visitAll$1(this, ast.attrs), [], [], [], [], [], false, [], children, ngContentIndex, ast.sourceSpan, ast.endSourceSpan);
          }
        }, {
          key: "visitComment",
          value: function visitComment(comment, context) {
            return null;
          }
        }, {
          key: "visitAttribute",
          value: function visitAttribute(attribute, context) {
            return new AttrAst(attribute.name, attribute.value, attribute.sourceSpan);
          }
        }, {
          key: "visitText",
          value: function visitText(text, parent) {
            var ngContentIndex = parent.findNgContentIndex(TEXT_CSS_SELECTOR());
            return new TextAst(text.value, ngContentIndex, text.sourceSpan);
          }
        }, {
          key: "visitExpansion",
          value: function visitExpansion(expansion, context) {
            return expansion;
          }
        }, {
          key: "visitExpansionCase",
          value: function visitExpansionCase(expansionCase, context) {
            return expansionCase;
          }
        }]);

        return NonBindableVisitor;
      }();
      /**
       * A reference to an element or directive in a template. E.g., the reference in this template:
       *
       * <div #myMenu="coolMenu">
       *
       * would be {name: 'myMenu', value: 'coolMenu', sourceSpan: ...}
       */


      var ElementOrDirectiveRef = /*#__PURE__*/function () {
        function ElementOrDirectiveRef(name, value, sourceSpan) {
          _classCallCheck2(this, ElementOrDirectiveRef);

          this.name = name;
          this.value = value;
          this.sourceSpan = sourceSpan;
        }
        /** Gets whether this is a reference to the given directive. */


        _createClass2(ElementOrDirectiveRef, [{
          key: "isReferenceToDirective",
          value: function isReferenceToDirective(directive) {
            return splitExportAs(directive.exportAs).indexOf(this.value) !== -1;
          }
        }]);

        return ElementOrDirectiveRef;
      }();
      /** Splits a raw, potentially comma-delimited `exportAs` value into an array of names. */


      function splitExportAs(exportAs) {
        return exportAs ? exportAs.split(',').map(function (e) {
          return e.trim();
        }) : [];
      }

      function splitClasses(classAttrValue) {
        return classAttrValue.trim().split(/\s+/g);
      }

      var ElementContext = /*#__PURE__*/function () {
        function ElementContext(isTemplateElement, _ngContentIndexMatcher, _wildcardNgContentIndex, providerContext) {
          _classCallCheck2(this, ElementContext);

          this.isTemplateElement = isTemplateElement;
          this._ngContentIndexMatcher = _ngContentIndexMatcher;
          this._wildcardNgContentIndex = _wildcardNgContentIndex;
          this.providerContext = providerContext;
        }

        _createClass2(ElementContext, [{
          key: "findNgContentIndex",
          value: function findNgContentIndex(selector) {
            var ngContentIndices = [];

            this._ngContentIndexMatcher.match(selector, function (selector, ngContentIndex) {
              ngContentIndices.push(ngContentIndex);
            });

            ngContentIndices.sort();

            if (this._wildcardNgContentIndex != null) {
              ngContentIndices.push(this._wildcardNgContentIndex);
            }

            return ngContentIndices.length > 0 ? ngContentIndices[0] : null;
          }
        }], [{
          key: "create",
          value: function create(isTemplateElement, directives, providerContext) {
            var matcher = new SelectorMatcher();
            var wildcardNgContentIndex = null;
            var component = directives.find(function (directive) {
              return directive.directive.isComponent;
            });

            if (component) {
              var ngContentSelectors = component.directive.template.ngContentSelectors;

              for (var i = 0; i < ngContentSelectors.length; i++) {
                var selector = ngContentSelectors[i];

                if (selector === '*') {
                  wildcardNgContentIndex = i;
                } else {
                  matcher.addSelectables(CssSelector.parse(ngContentSelectors[i]), i);
                }
              }
            }

            return new ElementContext(isTemplateElement, matcher, wildcardNgContentIndex, providerContext);
          }
        }]);

        return ElementContext;
      }();

      function createElementCssSelector(elementName, attributes) {
        var cssSelector = new CssSelector();
        var elNameNoNs = splitNsName(elementName)[1];
        cssSelector.setElement(elNameNoNs);

        for (var i = 0; i < attributes.length; i++) {
          var attrName = attributes[i][0];
          var attrNameNoNs = splitNsName(attrName)[1];
          var attrValue = attributes[i][1];
          cssSelector.addAttribute(attrNameNoNs, attrValue);

          if (attrName.toLowerCase() == CLASS_ATTR) {
            var classes = splitClasses(attrValue);
            classes.forEach(function (className) {
              return cssSelector.addClassName(className);
            });
          }
        }

        return cssSelector;
      }

      var EMPTY_ELEMENT_CONTEXT = new ElementContext(true, new SelectorMatcher(), null, null);
      var NON_BINDABLE_VISITOR = new NonBindableVisitor();

      function _isEmptyTextNode(node) {
        return node instanceof Text$3 && node.value.trim().length == 0;
      }

      function removeSummaryDuplicates(items) {
        var map = new Map();
        items.forEach(function (item) {
          if (!map.get(item.type.reference)) {
            map.set(item.type.reference, item);
          }
        });
        return Array.from(map.values());
      }

      function isEmptyExpression(ast) {
        if (ast instanceof ASTWithSource) {
          ast = ast.ast;
        }

        return ast instanceof EmptyExpr;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Parses string representation of a style and converts it into object literal.
       *
       * @param value string representation of style as used in the `style` attribute in HTML.
       *   Example: `color: red; height: auto`.
       * @returns An array of style property name and value pairs, e.g. `['color', 'red', 'height',
       * 'auto']`
       */


      function parse(value) {
        // we use a string array here instead of a string map
        // because a string-map is not guaranteed to retain the
        // order of the entries whereas a string array can be
        // constructed in a [key, value, key, value] format.
        var styles = [];
        var i = 0;
        var parenDepth = 0;
        var quote = 0
        /* QuoteNone */
        ;
        var valueStart = 0;
        var propStart = 0;
        var currentProp = null;
        var valueHasQuotes = false;

        while (i < value.length) {
          var token = value.charCodeAt(i++);

          switch (token) {
            case 40
            /* OpenParen */
            :
              parenDepth++;
              break;

            case 41
            /* CloseParen */
            :
              parenDepth--;
              break;

            case 39
            /* QuoteSingle */
            :
              // valueStart needs to be there since prop values don't
              // have quotes in CSS
              valueHasQuotes = valueHasQuotes || valueStart > 0;

              if (quote === 0
              /* QuoteNone */
              ) {
                  quote = 39
                  /* QuoteSingle */
                  ;
                } else if (quote === 39
              /* QuoteSingle */
              && value.charCodeAt(i - 1) !== 92
              /* BackSlash */
              ) {
                  quote = 0
                  /* QuoteNone */
                  ;
                }

              break;

            case 34
            /* QuoteDouble */
            :
              // same logic as above
              valueHasQuotes = valueHasQuotes || valueStart > 0;

              if (quote === 0
              /* QuoteNone */
              ) {
                  quote = 34
                  /* QuoteDouble */
                  ;
                } else if (quote === 34
              /* QuoteDouble */
              && value.charCodeAt(i - 1) !== 92
              /* BackSlash */
              ) {
                  quote = 0
                  /* QuoteNone */
                  ;
                }

              break;

            case 58
            /* Colon */
            :
              if (!currentProp && parenDepth === 0 && quote === 0
              /* QuoteNone */
              ) {
                  currentProp = hyphenate(value.substring(propStart, i - 1).trim());
                  valueStart = i;
                }

              break;

            case 59
            /* Semicolon */
            :
              if (currentProp && valueStart > 0 && parenDepth === 0 && quote === 0
              /* QuoteNone */
              ) {
                  var styleVal = value.substring(valueStart, i - 1).trim();
                  styles.push(currentProp, valueHasQuotes ? stripUnnecessaryQuotes(styleVal) : styleVal);
                  propStart = i;
                  valueStart = 0;
                  currentProp = null;
                  valueHasQuotes = false;
                }

              break;
          }
        }

        if (currentProp && valueStart) {
          var _styleVal = value.substr(valueStart).trim();

          styles.push(currentProp, valueHasQuotes ? stripUnnecessaryQuotes(_styleVal) : _styleVal);
        }

        return styles;
      }

      function stripUnnecessaryQuotes(value) {
        var qS = value.charCodeAt(0);
        var qE = value.charCodeAt(value.length - 1);

        if (qS == qE && (qS == 39
        /* QuoteSingle */
        || qS == 34
        /* QuoteDouble */
        )) {
          var tempValue = value.substring(1, value.length - 1); // special case to avoid using a multi-quoted string that was just chomped
          // (e.g. `font-family: "Verdana", "sans-serif"`)

          if (tempValue.indexOf('\'') == -1 && tempValue.indexOf('"') == -1) {
            value = tempValue;
          }
        }

        return value;
      }

      function hyphenate(value) {
        return value.replace(/[a-z][A-Z]/g, function (v) {
          return v.charAt(0) + '-' + v.charAt(1);
        }).toLowerCase();
      }

      var IMPORTANT_FLAG = '!important';
      /**
       * Minimum amount of binding slots required in the runtime for style/class bindings.
       *
       * Styling in Angular uses up two slots in the runtime LView/TData data structures to
       * record binding data, property information and metadata.
       *
       * When a binding is registered it will place the following information in the `LView`:
       *
       * slot 1) binding value
       * slot 2) cached value (all other values collected before it in string form)
       *
       * When a binding is registered it will place the following information in the `TData`:
       *
       * slot 1) prop name
       * slot 2) binding index that points to the previous style/class binding (and some extra config
       * values)
       *
       * Let's imagine we have a binding that looks like so:
       *
       * ```
       * <div [style.width]="x" [style.height]="y">
       * ```
       *
       * Our `LView` and `TData` data-structures look like so:
       *
       * ```typescript
       * LView = [
       *   // ...
       *   x, // value of x
       *   "width: x",
       *
       *   y, // value of y
       *   "width: x; height: y",
       *   // ...
       * ];
       *
       * TData = [
       *   // ...
       *   "width", // binding slot 20
       *   0,
       *
       *   "height",
       *   20,
       *   // ...
       * ];
       * ```
       *
       * */

      var MIN_STYLING_BINDING_SLOTS_REQUIRED = 2;
      /**
       * Produces creation/update instructions for all styling bindings (class and style)
       *
       * It also produces the creation instruction to register all initial styling values
       * (which are all the static class="..." and style="..." attribute values that exist
       * on an element within a template).
       *
       * The builder class below handles producing instructions for the following cases:
       *
       * - Static style/class attributes (style="..." and class="...")
       * - Dynamic style/class map bindings ([style]="map" and [class]="map|string")
       * - Dynamic style/class property bindings ([style.prop]="exp" and [class.name]="exp")
       *
       * Due to the complex relationship of all of these cases, the instructions generated
       * for these attributes/properties/bindings must be done so in the correct order. The
       * order which these must be generated is as follows:
       *
       * if (createMode) {
       *   styling(...)
       * }
       * if (updateMode) {
       *   styleMap(...)
       *   classMap(...)
       *   styleProp(...)
       *   classProp(...)
       * }
       *
       * The creation/update methods within the builder class produce these instructions.
       */

      var StylingBuilder = /*#__PURE__*/function () {
        function StylingBuilder(_directiveExpr) {
          _classCallCheck2(this, StylingBuilder);

          this._directiveExpr = _directiveExpr;
          /** Whether or not there are any static styling values present */

          this._hasInitialValues = false;
          /**
           *  Whether or not there are any styling bindings present
           *  (i.e. `[style]`, `[class]`, `[style.prop]` or `[class.name]`)
           */

          this.hasBindings = false;
          this.hasBindingsWithPipes = false;
          /** the input for [class] (if it exists) */

          this._classMapInput = null;
          /** the input for [style] (if it exists) */

          this._styleMapInput = null;
          /** an array of each [style.prop] input */

          this._singleStyleInputs = null;
          /** an array of each [class.name] input */

          this._singleClassInputs = null;
          this._lastStylingInput = null;
          this._firstStylingInput = null; // maps are used instead of hash maps because a Map will
          // retain the ordering of the keys

          /**
           * Represents the location of each style binding in the template
           * (e.g. `<div [style.width]="w" [style.height]="h">` implies
           * that `width=0` and `height=1`)
           */

          this._stylesIndex = new Map();
          /**
           * Represents the location of each class binding in the template
           * (e.g. `<div [class.big]="b" [class.hidden]="h">` implies
           * that `big=0` and `hidden=1`)
           */

          this._classesIndex = new Map();
          this._initialStyleValues = [];
          this._initialClassValues = [];
        }
        /**
         * Registers a given input to the styling builder to be later used when producing AOT code.
         *
         * The code below will only accept the input if it is somehow tied to styling (whether it be
         * style/class bindings or static style/class attributes).
         */


        _createClass2(StylingBuilder, [{
          key: "registerBoundInput",
          value: function registerBoundInput(input) {
            // [attr.style] or [attr.class] are skipped in the code below,
            // they should not be treated as styling-based bindings since
            // they are intended to be written directly to the attr and
            // will therefore skip all style/class resolution that is present
            // with style="", [style]="" and [style.prop]="", class="",
            // [class.prop]="". [class]="" assignments
            var binding = null;
            var name = input.name;

            switch (input.type) {
              case 0
              /* Property */
              :
                binding = this.registerInputBasedOnName(name, input.value, input.sourceSpan);
                break;

              case 3
              /* Style */
              :
                binding = this.registerStyleInput(name, false, input.value, input.sourceSpan, input.unit);
                break;

              case 2
              /* Class */
              :
                binding = this.registerClassInput(name, false, input.value, input.sourceSpan);
                break;
            }

            return binding ? true : false;
          }
        }, {
          key: "registerInputBasedOnName",
          value: function registerInputBasedOnName(name, expression, sourceSpan) {
            var binding = null;
            var prefix = name.substring(0, 6);
            var isStyle = name === 'style' || prefix === 'style.' || prefix === 'style!';
            var isClass = !isStyle && (name === 'class' || prefix === 'class.' || prefix === 'class!');

            if (isStyle || isClass) {
              var isMapBased = name.charAt(5) !== '.'; // style.prop or class.prop makes this a no

              var property = name.substr(isMapBased ? 5 : 6); // the dot explains why there's a +1

              if (isStyle) {
                binding = this.registerStyleInput(property, isMapBased, expression, sourceSpan);
              } else {
                binding = this.registerClassInput(property, isMapBased, expression, sourceSpan);
              }
            }

            return binding;
          }
        }, {
          key: "registerStyleInput",
          value: function registerStyleInput(name, isMapBased, value, sourceSpan, suffix) {
            if (isEmptyExpression(value)) {
              return null;
            }

            name = normalizePropName(name);

            var _parseProperty = parseProperty(name),
                property = _parseProperty.property,
                hasOverrideFlag = _parseProperty.hasOverrideFlag,
                bindingSuffix = _parseProperty.suffix;

            suffix = typeof suffix === 'string' && suffix.length !== 0 ? suffix : bindingSuffix;
            var entry = {
              name: property,
              suffix: suffix,
              value: value,
              sourceSpan: sourceSpan,
              hasOverrideFlag: hasOverrideFlag
            };

            if (isMapBased) {
              this._styleMapInput = entry;
            } else {
              (this._singleStyleInputs = this._singleStyleInputs || []).push(entry);
              registerIntoMap(this._stylesIndex, property);
            }

            this._lastStylingInput = entry;
            this._firstStylingInput = this._firstStylingInput || entry;

            this._checkForPipes(value);

            this.hasBindings = true;
            return entry;
          }
        }, {
          key: "registerClassInput",
          value: function registerClassInput(name, isMapBased, value, sourceSpan) {
            if (isEmptyExpression(value)) {
              return null;
            }

            var _parseProperty2 = parseProperty(name),
                property = _parseProperty2.property,
                hasOverrideFlag = _parseProperty2.hasOverrideFlag;

            var entry = {
              name: property,
              value: value,
              sourceSpan: sourceSpan,
              hasOverrideFlag: hasOverrideFlag,
              suffix: null
            };

            if (isMapBased) {
              if (this._classMapInput) {
                throw new Error('[class] and [className] bindings cannot be used on the same element simultaneously');
              }

              this._classMapInput = entry;
            } else {
              (this._singleClassInputs = this._singleClassInputs || []).push(entry);
              registerIntoMap(this._classesIndex, property);
            }

            this._lastStylingInput = entry;
            this._firstStylingInput = this._firstStylingInput || entry;

            this._checkForPipes(value);

            this.hasBindings = true;
            return entry;
          }
        }, {
          key: "_checkForPipes",
          value: function _checkForPipes(value) {
            if (value instanceof ASTWithSource && value.ast instanceof BindingPipe) {
              this.hasBindingsWithPipes = true;
            }
          }
          /**
           * Registers the element's static style string value to the builder.
           *
           * @param value the style string (e.g. `width:100px; height:200px;`)
           */

        }, {
          key: "registerStyleAttr",
          value: function registerStyleAttr(value) {
            this._initialStyleValues = parse(value);
            this._hasInitialValues = true;
          }
          /**
           * Registers the element's static class string value to the builder.
           *
           * @param value the className string (e.g. `disabled gold zoom`)
           */

        }, {
          key: "registerClassAttr",
          value: function registerClassAttr(value) {
            this._initialClassValues = value.trim().split(/\s+/g);
            this._hasInitialValues = true;
          }
          /**
           * Appends all styling-related expressions to the provided attrs array.
           *
           * @param attrs an existing array where each of the styling expressions
           * will be inserted into.
           */

        }, {
          key: "populateInitialStylingAttrs",
          value: function populateInitialStylingAttrs(attrs) {
            // [CLASS_MARKER, 'foo', 'bar', 'baz' ...]
            if (this._initialClassValues.length) {
              attrs.push(literal(1
              /* Classes */
              ));

              for (var i = 0; i < this._initialClassValues.length; i++) {
                attrs.push(literal(this._initialClassValues[i]));
              }
            } // [STYLE_MARKER, 'width', '200px', 'height', '100px', ...]


            if (this._initialStyleValues.length) {
              attrs.push(literal(2
              /* Styles */
              ));

              for (var _i8 = 0; _i8 < this._initialStyleValues.length; _i8 += 2) {
                attrs.push(literal(this._initialStyleValues[_i8]), literal(this._initialStyleValues[_i8 + 1]));
              }
            }
          }
          /**
           * Builds an instruction with all the expressions and parameters for `elementHostAttrs`.
           *
           * The instruction generation code below is used for producing the AOT statement code which is
           * responsible for registering initial styles (within a directive hostBindings' creation block),
           * as well as any of the provided attribute values, to the directive host element.
           */

        }, {
          key: "assignHostAttrs",
          value: function assignHostAttrs(attrs, definitionMap) {
            if (this._directiveExpr && (attrs.length || this._hasInitialValues)) {
              this.populateInitialStylingAttrs(attrs);
              definitionMap.set('hostAttrs', literalArr(attrs));
            }
          }
          /**
           * Builds an instruction with all the expressions and parameters for `classMap`.
           *
           * The instruction data will contain all expressions for `classMap` to function
           * which includes the `[class]` expression params.
           */

        }, {
          key: "buildClassMapInstruction",
          value: function buildClassMapInstruction(valueConverter) {
            if (this._classMapInput) {
              return this._buildMapBasedInstruction(valueConverter, true, this._classMapInput);
            }

            return null;
          }
          /**
           * Builds an instruction with all the expressions and parameters for `styleMap`.
           *
           * The instruction data will contain all expressions for `styleMap` to function
           * which includes the `[style]` expression params.
           */

        }, {
          key: "buildStyleMapInstruction",
          value: function buildStyleMapInstruction(valueConverter) {
            if (this._styleMapInput) {
              return this._buildMapBasedInstruction(valueConverter, false, this._styleMapInput);
            }

            return null;
          }
        }, {
          key: "_buildMapBasedInstruction",
          value: function _buildMapBasedInstruction(valueConverter, isClassBased, stylingInput) {
            // each styling binding value is stored in the LView
            // map-based bindings allocate two slots: one for the
            // previous binding value and another for the previous
            // className or style attribute value.
            var totalBindingSlotsRequired = MIN_STYLING_BINDING_SLOTS_REQUIRED; // these values must be outside of the update block so that they can
            // be evaluated (the AST visit call) during creation time so that any
            // pipes can be picked up in time before the template is built

            var mapValue = stylingInput.value.visit(valueConverter);
            var reference;

            if (mapValue instanceof Interpolation) {
              totalBindingSlotsRequired += mapValue.expressions.length;
              reference = isClassBased ? getClassMapInterpolationExpression(mapValue) : getStyleMapInterpolationExpression(mapValue);
            } else {
              reference = isClassBased ? Identifiers$1.classMap : Identifiers$1.styleMap;
            }

            return {
              reference: reference,
              calls: [{
                supportsInterpolation: true,
                sourceSpan: stylingInput.sourceSpan,
                allocateBindingSlots: totalBindingSlotsRequired,
                params: function params(convertFn) {
                  var convertResult = convertFn(mapValue);
                  var params = Array.isArray(convertResult) ? convertResult : [convertResult];
                  return params;
                }
              }]
            };
          }
        }, {
          key: "_buildSingleInputs",
          value: function _buildSingleInputs(reference, inputs, valueConverter, getInterpolationExpressionFn, isClassBased) {
            var instructions = [];
            inputs.forEach(function (input) {
              var previousInstruction = instructions[instructions.length - 1];
              var value = input.value.visit(valueConverter);
              var referenceForCall = reference; // each styling binding value is stored in the LView
              // but there are two values stored for each binding:
              //   1) the value itself
              //   2) an intermediate value (concatenation of style up to this point).
              //      We need to store the intermediate value so that we don't allocate
              //      the strings on each CD.

              var totalBindingSlotsRequired = MIN_STYLING_BINDING_SLOTS_REQUIRED;

              if (value instanceof Interpolation) {
                totalBindingSlotsRequired += value.expressions.length;

                if (getInterpolationExpressionFn) {
                  referenceForCall = getInterpolationExpressionFn(value);
                }
              }

              var call = {
                sourceSpan: input.sourceSpan,
                allocateBindingSlots: totalBindingSlotsRequired,
                supportsInterpolation: !!getInterpolationExpressionFn,
                params: function params(convertFn) {
                  // params => stylingProp(propName, value, suffix)
                  var params = [];
                  params.push(literal(input.name));
                  var convertResult = convertFn(value);

                  if (Array.isArray(convertResult)) {
                    params.push.apply(params, _toConsumableArray(convertResult));
                  } else {
                    params.push(convertResult);
                  } // [style.prop] bindings may use suffix values (e.g. px, em, etc...), therefore,
                  // if that is detected then we need to pass that in as an optional param.


                  if (!isClassBased && input.suffix !== null) {
                    params.push(literal(input.suffix));
                  }

                  return params;
                }
              }; // If we ended up generating a call to the same instruction as the previous styling property
              // we can chain the calls together safely to save some bytes, otherwise we have to generate
              // a separate instruction call. This is primarily a concern with interpolation instructions
              // where we may start off with one `reference`, but end up using another based on the
              // number of interpolations.

              if (previousInstruction && previousInstruction.reference === referenceForCall) {
                previousInstruction.calls.push(call);
              } else {
                instructions.push({
                  reference: referenceForCall,
                  calls: [call]
                });
              }
            });
            return instructions;
          }
        }, {
          key: "_buildClassInputs",
          value: function _buildClassInputs(valueConverter) {
            if (this._singleClassInputs) {
              return this._buildSingleInputs(Identifiers$1.classProp, this._singleClassInputs, valueConverter, null, true);
            }

            return [];
          }
        }, {
          key: "_buildStyleInputs",
          value: function _buildStyleInputs(valueConverter) {
            if (this._singleStyleInputs) {
              return this._buildSingleInputs(Identifiers$1.styleProp, this._singleStyleInputs, valueConverter, getStylePropInterpolationExpression, false);
            }

            return [];
          }
          /**
           * Constructs all instructions which contain the expressions that will be placed
           * into the update block of a template function or a directive hostBindings function.
           */

        }, {
          key: "buildUpdateLevelInstructions",
          value: function buildUpdateLevelInstructions(valueConverter) {
            var instructions = [];

            if (this.hasBindings) {
              var styleMapInstruction = this.buildStyleMapInstruction(valueConverter);

              if (styleMapInstruction) {
                instructions.push(styleMapInstruction);
              }

              var classMapInstruction = this.buildClassMapInstruction(valueConverter);

              if (classMapInstruction) {
                instructions.push(classMapInstruction);
              }

              instructions.push.apply(instructions, _toConsumableArray(this._buildStyleInputs(valueConverter)));
              instructions.push.apply(instructions, _toConsumableArray(this._buildClassInputs(valueConverter)));
            }

            return instructions;
          }
        }]);

        return StylingBuilder;
      }();

      function registerIntoMap(map, key) {
        if (!map.has(key)) {
          map.set(key, map.size);
        }
      }

      function parseProperty(name) {
        var hasOverrideFlag = false;
        var overrideIndex = name.indexOf(IMPORTANT_FLAG);

        if (overrideIndex !== -1) {
          name = overrideIndex > 0 ? name.substring(0, overrideIndex) : '';
          hasOverrideFlag = true;
        }

        var suffix = null;
        var property = name;
        var unitIndex = name.lastIndexOf('.');

        if (unitIndex > 0) {
          suffix = name.substr(unitIndex + 1);
          property = name.substring(0, unitIndex);
        }

        return {
          property: property,
          suffix: suffix,
          hasOverrideFlag: hasOverrideFlag
        };
      }
      /**
       * Gets the instruction to generate for an interpolated class map.
       * @param interpolation An Interpolation AST
       */


      function getClassMapInterpolationExpression(interpolation) {
        switch (getInterpolationArgsLength(interpolation)) {
          case 1:
            return Identifiers$1.classMap;

          case 3:
            return Identifiers$1.classMapInterpolate1;

          case 5:
            return Identifiers$1.classMapInterpolate2;

          case 7:
            return Identifiers$1.classMapInterpolate3;

          case 9:
            return Identifiers$1.classMapInterpolate4;

          case 11:
            return Identifiers$1.classMapInterpolate5;

          case 13:
            return Identifiers$1.classMapInterpolate6;

          case 15:
            return Identifiers$1.classMapInterpolate7;

          case 17:
            return Identifiers$1.classMapInterpolate8;

          default:
            return Identifiers$1.classMapInterpolateV;
        }
      }
      /**
       * Gets the instruction to generate for an interpolated style map.
       * @param interpolation An Interpolation AST
       */


      function getStyleMapInterpolationExpression(interpolation) {
        switch (getInterpolationArgsLength(interpolation)) {
          case 1:
            return Identifiers$1.styleMap;

          case 3:
            return Identifiers$1.styleMapInterpolate1;

          case 5:
            return Identifiers$1.styleMapInterpolate2;

          case 7:
            return Identifiers$1.styleMapInterpolate3;

          case 9:
            return Identifiers$1.styleMapInterpolate4;

          case 11:
            return Identifiers$1.styleMapInterpolate5;

          case 13:
            return Identifiers$1.styleMapInterpolate6;

          case 15:
            return Identifiers$1.styleMapInterpolate7;

          case 17:
            return Identifiers$1.styleMapInterpolate8;

          default:
            return Identifiers$1.styleMapInterpolateV;
        }
      }
      /**
       * Gets the instruction to generate for an interpolated style prop.
       * @param interpolation An Interpolation AST
       */


      function getStylePropInterpolationExpression(interpolation) {
        switch (getInterpolationArgsLength(interpolation)) {
          case 1:
            return Identifiers$1.styleProp;

          case 3:
            return Identifiers$1.stylePropInterpolate1;

          case 5:
            return Identifiers$1.stylePropInterpolate2;

          case 7:
            return Identifiers$1.stylePropInterpolate3;

          case 9:
            return Identifiers$1.stylePropInterpolate4;

          case 11:
            return Identifiers$1.stylePropInterpolate5;

          case 13:
            return Identifiers$1.stylePropInterpolate6;

          case 15:
            return Identifiers$1.stylePropInterpolate7;

          case 17:
            return Identifiers$1.stylePropInterpolate8;

          default:
            return Identifiers$1.stylePropInterpolateV;
        }
      }

      function normalizePropName(prop) {
        return hyphenate(prop);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var TokenType$1;

      (function (TokenType) {
        TokenType[TokenType["Character"] = 0] = "Character";
        TokenType[TokenType["Identifier"] = 1] = "Identifier";
        TokenType[TokenType["Keyword"] = 2] = "Keyword";
        TokenType[TokenType["String"] = 3] = "String";
        TokenType[TokenType["Operator"] = 4] = "Operator";
        TokenType[TokenType["Number"] = 5] = "Number";
        TokenType[TokenType["Error"] = 6] = "Error";
      })(TokenType$1 || (TokenType$1 = {}));

      var KEYWORDS = ['var', 'let', 'as', 'null', 'undefined', 'true', 'false', 'if', 'else', 'this'];

      var Lexer = /*#__PURE__*/function () {
        function Lexer() {
          _classCallCheck2(this, Lexer);
        }

        _createClass2(Lexer, [{
          key: "tokenize",
          value: function tokenize(text) {
            var scanner = new _Scanner(text);
            var tokens = [];
            var token = scanner.scanToken();

            while (token != null) {
              tokens.push(token);
              token = scanner.scanToken();
            }

            return tokens;
          }
        }]);

        return Lexer;
      }();

      var Token$1 = /*#__PURE__*/function () {
        function Token$1(index, end, type, numValue, strValue) {
          _classCallCheck2(this, Token$1);

          this.index = index;
          this.end = end;
          this.type = type;
          this.numValue = numValue;
          this.strValue = strValue;
        }

        _createClass2(Token$1, [{
          key: "isCharacter",
          value: function isCharacter(code) {
            return this.type == TokenType$1.Character && this.numValue == code;
          }
        }, {
          key: "isNumber",
          value: function isNumber() {
            return this.type == TokenType$1.Number;
          }
        }, {
          key: "isString",
          value: function isString() {
            return this.type == TokenType$1.String;
          }
        }, {
          key: "isOperator",
          value: function isOperator(operator) {
            return this.type == TokenType$1.Operator && this.strValue == operator;
          }
        }, {
          key: "isIdentifier",
          value: function isIdentifier() {
            return this.type == TokenType$1.Identifier;
          }
        }, {
          key: "isKeyword",
          value: function isKeyword() {
            return this.type == TokenType$1.Keyword;
          }
        }, {
          key: "isKeywordLet",
          value: function isKeywordLet() {
            return this.type == TokenType$1.Keyword && this.strValue == 'let';
          }
        }, {
          key: "isKeywordAs",
          value: function isKeywordAs() {
            return this.type == TokenType$1.Keyword && this.strValue == 'as';
          }
        }, {
          key: "isKeywordNull",
          value: function isKeywordNull() {
            return this.type == TokenType$1.Keyword && this.strValue == 'null';
          }
        }, {
          key: "isKeywordUndefined",
          value: function isKeywordUndefined() {
            return this.type == TokenType$1.Keyword && this.strValue == 'undefined';
          }
        }, {
          key: "isKeywordTrue",
          value: function isKeywordTrue() {
            return this.type == TokenType$1.Keyword && this.strValue == 'true';
          }
        }, {
          key: "isKeywordFalse",
          value: function isKeywordFalse() {
            return this.type == TokenType$1.Keyword && this.strValue == 'false';
          }
        }, {
          key: "isKeywordThis",
          value: function isKeywordThis() {
            return this.type == TokenType$1.Keyword && this.strValue == 'this';
          }
        }, {
          key: "isError",
          value: function isError() {
            return this.type == TokenType$1.Error;
          }
        }, {
          key: "toNumber",
          value: function toNumber() {
            return this.type == TokenType$1.Number ? this.numValue : -1;
          }
        }, {
          key: "toString",
          value: function toString() {
            switch (this.type) {
              case TokenType$1.Character:
              case TokenType$1.Identifier:
              case TokenType$1.Keyword:
              case TokenType$1.Operator:
              case TokenType$1.String:
              case TokenType$1.Error:
                return this.strValue;

              case TokenType$1.Number:
                return this.numValue.toString();

              default:
                return null;
            }
          }
        }]);

        return Token$1;
      }();

      function newCharacterToken(index, end, code) {
        return new Token$1(index, end, TokenType$1.Character, code, String.fromCharCode(code));
      }

      function newIdentifierToken(index, end, text) {
        return new Token$1(index, end, TokenType$1.Identifier, 0, text);
      }

      function newKeywordToken(index, end, text) {
        return new Token$1(index, end, TokenType$1.Keyword, 0, text);
      }

      function newOperatorToken(index, end, text) {
        return new Token$1(index, end, TokenType$1.Operator, 0, text);
      }

      function newStringToken(index, end, text) {
        return new Token$1(index, end, TokenType$1.String, 0, text);
      }

      function newNumberToken(index, end, n) {
        return new Token$1(index, end, TokenType$1.Number, n, '');
      }

      function newErrorToken(index, end, message) {
        return new Token$1(index, end, TokenType$1.Error, 0, message);
      }

      var EOF = new Token$1(-1, -1, TokenType$1.Character, 0, '');

      var _Scanner = /*#__PURE__*/function () {
        function _Scanner(input) {
          _classCallCheck2(this, _Scanner);

          this.input = input;
          this.peek = 0;
          this.index = -1;
          this.length = input.length;
          this.advance();
        }

        _createClass2(_Scanner, [{
          key: "advance",
          value: function advance() {
            this.peek = ++this.index >= this.length ? $EOF : this.input.charCodeAt(this.index);
          }
        }, {
          key: "scanToken",
          value: function scanToken() {
            var input = this.input,
                length = this.length;
            var peek = this.peek,
                index = this.index; // Skip whitespace.

            while (peek <= $SPACE) {
              if (++index >= length) {
                peek = $EOF;
                break;
              } else {
                peek = input.charCodeAt(index);
              }
            }

            this.peek = peek;
            this.index = index;

            if (index >= length) {
              return null;
            } // Handle identifiers and numbers.


            if (isIdentifierStart(peek)) return this.scanIdentifier();
            if (isDigit(peek)) return this.scanNumber(index);
            var start = index;

            switch (peek) {
              case $PERIOD:
                this.advance();
                return isDigit(this.peek) ? this.scanNumber(start) : newCharacterToken(start, this.index, $PERIOD);

              case $LPAREN:
              case $RPAREN:
              case $LBRACE:
              case $RBRACE:
              case $LBRACKET:
              case $RBRACKET:
              case $COMMA:
              case $COLON:
              case $SEMICOLON:
                return this.scanCharacter(start, peek);

              case $SQ:
              case $DQ:
                return this.scanString();

              case $HASH:
              case $PLUS:
              case $MINUS:
              case $STAR:
              case $SLASH:
              case $PERCENT:
              case $CARET:
                return this.scanOperator(start, String.fromCharCode(peek));

              case $QUESTION:
                return this.scanComplexOperator(start, '?', $PERIOD, '.');

              case $LT:
              case $GT:
                return this.scanComplexOperator(start, String.fromCharCode(peek), $EQ, '=');

              case $BANG:
              case $EQ:
                return this.scanComplexOperator(start, String.fromCharCode(peek), $EQ, '=', $EQ, '=');

              case $AMPERSAND:
                return this.scanComplexOperator(start, '&', $AMPERSAND, '&');

              case $BAR:
                return this.scanComplexOperator(start, '|', $BAR, '|');

              case $NBSP:
                while (isWhitespace(this.peek)) {
                  this.advance();
                }

                return this.scanToken();
            }

            this.advance();
            return this.error("Unexpected character [".concat(String.fromCharCode(peek), "]"), 0);
          }
        }, {
          key: "scanCharacter",
          value: function scanCharacter(start, code) {
            this.advance();
            return newCharacterToken(start, this.index, code);
          }
        }, {
          key: "scanOperator",
          value: function scanOperator(start, str) {
            this.advance();
            return newOperatorToken(start, this.index, str);
          }
          /**
           * Tokenize a 2/3 char long operator
           *
           * @param start start index in the expression
           * @param one first symbol (always part of the operator)
           * @param twoCode code point for the second symbol
           * @param two second symbol (part of the operator when the second code point matches)
           * @param threeCode code point for the third symbol
           * @param three third symbol (part of the operator when provided and matches source expression)
           */

        }, {
          key: "scanComplexOperator",
          value: function scanComplexOperator(start, one, twoCode, two, threeCode, three) {
            this.advance();
            var str = one;

            if (this.peek == twoCode) {
              this.advance();
              str += two;
            }

            if (threeCode != null && this.peek == threeCode) {
              this.advance();
              str += three;
            }

            return newOperatorToken(start, this.index, str);
          }
        }, {
          key: "scanIdentifier",
          value: function scanIdentifier() {
            var start = this.index;
            this.advance();

            while (isIdentifierPart(this.peek)) {
              this.advance();
            }

            var str = this.input.substring(start, this.index);
            return KEYWORDS.indexOf(str) > -1 ? newKeywordToken(start, this.index, str) : newIdentifierToken(start, this.index, str);
          }
        }, {
          key: "scanNumber",
          value: function scanNumber(start) {
            var simple = this.index === start;
            this.advance(); // Skip initial digit.

            while (true) {
              if (isDigit(this.peek)) {// Do nothing.
              } else if (this.peek == $PERIOD) {
                simple = false;
              } else if (isExponentStart(this.peek)) {
                this.advance();
                if (isExponentSign(this.peek)) this.advance();
                if (!isDigit(this.peek)) return this.error('Invalid exponent', -1);
                simple = false;
              } else {
                break;
              }

              this.advance();
            }

            var str = this.input.substring(start, this.index);
            var value = simple ? parseIntAutoRadix(str) : parseFloat(str);
            return newNumberToken(start, this.index, value);
          }
        }, {
          key: "scanString",
          value: function scanString() {
            var start = this.index;
            var quote = this.peek;
            this.advance(); // Skip initial quote.

            var buffer = '';
            var marker = this.index;
            var input = this.input;

            while (this.peek != quote) {
              if (this.peek == $BACKSLASH) {
                buffer += input.substring(marker, this.index);
                this.advance();
                var unescapedCode = void 0; // Workaround for TS2.1-introduced type strictness

                this.peek = this.peek;

                if (this.peek == $u) {
                  // 4 character hex code for unicode character.
                  var hex = input.substring(this.index + 1, this.index + 5);

                  if (/^[0-9a-f]+$/i.test(hex)) {
                    unescapedCode = parseInt(hex, 16);
                  } else {
                    return this.error("Invalid unicode escape [\\u".concat(hex, "]"), 0);
                  }

                  for (var i = 0; i < 5; i++) {
                    this.advance();
                  }
                } else {
                  unescapedCode = unescape(this.peek);
                  this.advance();
                }

                buffer += String.fromCharCode(unescapedCode);
                marker = this.index;
              } else if (this.peek == $EOF) {
                return this.error('Unterminated quote', 0);
              } else {
                this.advance();
              }
            }

            var last = input.substring(marker, this.index);
            this.advance(); // Skip terminating quote.

            return newStringToken(start, this.index, buffer + last);
          }
        }, {
          key: "error",
          value: function error(message, offset) {
            var position = this.index + offset;
            return newErrorToken(position, this.index, "Lexer Error: ".concat(message, " at column ").concat(position, " in expression [").concat(this.input, "]"));
          }
        }]);

        return _Scanner;
      }();

      function isIdentifierStart(code) {
        return $a <= code && code <= $z || $A <= code && code <= $Z || code == $_ || code == $$;
      }

      function isIdentifier(input) {
        if (input.length == 0) return false;
        var scanner = new _Scanner(input);
        if (!isIdentifierStart(scanner.peek)) return false;
        scanner.advance();

        while (scanner.peek !== $EOF) {
          if (!isIdentifierPart(scanner.peek)) return false;
          scanner.advance();
        }

        return true;
      }

      function isIdentifierPart(code) {
        return isAsciiLetter(code) || isDigit(code) || code == $_ || code == $$;
      }

      function isExponentStart(code) {
        return code == $e || code == $E;
      }

      function isExponentSign(code) {
        return code == $MINUS || code == $PLUS;
      }

      function isQuote(code) {
        return code === $SQ || code === $DQ || code === $BT;
      }

      function unescape(code) {
        switch (code) {
          case $n:
            return $LF;

          case $f:
            return $FF;

          case $r:
            return $CR;

          case $t:
            return $TAB;

          case $v:
            return $VTAB;

          default:
            return code;
        }
      }

      function parseIntAutoRadix(text) {
        var result = parseInt(text);

        if (isNaN(result)) {
          throw new Error('Invalid integer literal when parsing ' + text);
        }

        return result;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var SplitInterpolation = function SplitInterpolation(strings, expressions, offsets) {
        _classCallCheck2(this, SplitInterpolation);

        this.strings = strings;
        this.expressions = expressions;
        this.offsets = offsets;
      };

      var TemplateBindingParseResult = function TemplateBindingParseResult(templateBindings, warnings, errors) {
        _classCallCheck2(this, TemplateBindingParseResult);

        this.templateBindings = templateBindings;
        this.warnings = warnings;
        this.errors = errors;
      };

      var Parser$1 = /*#__PURE__*/function () {
        function Parser$1(_lexer) {
          _classCallCheck2(this, Parser$1);

          this._lexer = _lexer;
          this.errors = [];
          this.simpleExpressionChecker = SimpleExpressionChecker;
        }

        _createClass2(Parser$1, [{
          key: "parseAction",
          value: function parseAction(input, location, absoluteOffset) {
            var interpolationConfig = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULT_INTERPOLATION_CONFIG;

            this._checkNoInterpolation(input, location, interpolationConfig);

            var sourceToLex = this._stripComments(input);

            var tokens = this._lexer.tokenize(this._stripComments(input));

            var ast = new _ParseAST(input, location, absoluteOffset, tokens, sourceToLex.length, true, this.errors, input.length - sourceToLex.length).parseChain();
            return new ASTWithSource(ast, input, location, absoluteOffset, this.errors);
          }
        }, {
          key: "parseBinding",
          value: function parseBinding(input, location, absoluteOffset) {
            var interpolationConfig = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULT_INTERPOLATION_CONFIG;

            var ast = this._parseBindingAst(input, location, absoluteOffset, interpolationConfig);

            return new ASTWithSource(ast, input, location, absoluteOffset, this.errors);
          }
        }, {
          key: "checkSimpleExpression",
          value: function checkSimpleExpression(ast) {
            var checker = new this.simpleExpressionChecker();
            ast.visit(checker);
            return checker.errors;
          }
        }, {
          key: "parseSimpleBinding",
          value: function parseSimpleBinding(input, location, absoluteOffset) {
            var interpolationConfig = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULT_INTERPOLATION_CONFIG;

            var ast = this._parseBindingAst(input, location, absoluteOffset, interpolationConfig);

            var errors = this.checkSimpleExpression(ast);

            if (errors.length > 0) {
              this._reportError("Host binding expression cannot contain ".concat(errors.join(' ')), input, location);
            }

            return new ASTWithSource(ast, input, location, absoluteOffset, this.errors);
          }
        }, {
          key: "_reportError",
          value: function _reportError(message, input, errLocation, ctxLocation) {
            this.errors.push(new ParserError(message, input, errLocation, ctxLocation));
          }
        }, {
          key: "_parseBindingAst",
          value: function _parseBindingAst(input, location, absoluteOffset, interpolationConfig) {
            // Quotes expressions use 3rd-party expression language. We don't want to use
            // our lexer or parser for that, so we check for that ahead of time.
            var quote = this._parseQuote(input, location, absoluteOffset);

            if (quote != null) {
              return quote;
            }

            this._checkNoInterpolation(input, location, interpolationConfig);

            var sourceToLex = this._stripComments(input);

            var tokens = this._lexer.tokenize(sourceToLex);

            return new _ParseAST(input, location, absoluteOffset, tokens, sourceToLex.length, false, this.errors, input.length - sourceToLex.length).parseChain();
          }
        }, {
          key: "_parseQuote",
          value: function _parseQuote(input, location, absoluteOffset) {
            if (input == null) return null;
            var prefixSeparatorIndex = input.indexOf(':');
            if (prefixSeparatorIndex == -1) return null;
            var prefix = input.substring(0, prefixSeparatorIndex).trim();
            if (!isIdentifier(prefix)) return null;
            var uninterpretedExpression = input.substring(prefixSeparatorIndex + 1);
            var span = new ParseSpan(0, input.length);
            return new Quote(span, span.toAbsolute(absoluteOffset), prefix, uninterpretedExpression, location);
          }
          /**
           * Parse microsyntax template expression and return a list of bindings or
           * parsing errors in case the given expression is invalid.
           *
           * For example,
           * ```
           *   <div *ngFor="let item of items">
           *         ^      ^ absoluteValueOffset for `templateValue`
           *         absoluteKeyOffset for `templateKey`
           * ```
           * contains three bindings:
           * 1. ngFor -> null
           * 2. item -> NgForOfContext.$implicit
           * 3. ngForOf -> items
           *
           * This is apparent from the de-sugared template:
           * ```
           *   <ng-template ngFor let-item [ngForOf]="items">
           * ```
           *
           * @param templateKey name of directive, without the * prefix. For example: ngIf, ngFor
           * @param templateValue RHS of the microsyntax attribute
           * @param templateUrl template filename if it's external, component filename if it's inline
           * @param absoluteKeyOffset start of the `templateKey`
           * @param absoluteValueOffset start of the `templateValue`
           */

        }, {
          key: "parseTemplateBindings",
          value: function parseTemplateBindings(templateKey, templateValue, templateUrl, absoluteKeyOffset, absoluteValueOffset) {
            var tokens = this._lexer.tokenize(templateValue);

            var parser = new _ParseAST(templateValue, templateUrl, absoluteValueOffset, tokens, templateValue.length, false
            /* parseAction */
            , this.errors, 0
            /* relative offset */
            );
            return parser.parseTemplateBindings({
              source: templateKey,
              span: new AbsoluteSourceSpan(absoluteKeyOffset, absoluteKeyOffset + templateKey.length)
            });
          }
        }, {
          key: "parseInterpolation",
          value: function parseInterpolation(input, location, absoluteOffset) {
            var interpolationConfig = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULT_INTERPOLATION_CONFIG;

            var _this$splitInterpolat = this.splitInterpolation(input, location, interpolationConfig),
                strings = _this$splitInterpolat.strings,
                expressions = _this$splitInterpolat.expressions,
                offsets = _this$splitInterpolat.offsets;

            if (expressions.length === 0) return null;
            var expressionNodes = [];

            for (var i = 0; i < expressions.length; ++i) {
              var expressionText = expressions[i].text;

              var sourceToLex = this._stripComments(expressionText);

              var tokens = this._lexer.tokenize(sourceToLex);

              var ast = new _ParseAST(input, location, absoluteOffset, tokens, sourceToLex.length, false, this.errors, offsets[i] + (expressionText.length - sourceToLex.length)).parseChain();
              expressionNodes.push(ast);
            }

            return this.createInterpolationAst(strings.map(function (s) {
              return s.text;
            }), expressionNodes, input, location, absoluteOffset);
          }
          /**
           * Similar to `parseInterpolation`, but treats the provided string as a single expression
           * element that would normally appear within the interpolation prefix and suffix (`{{` and `}}`).
           * This is used for parsing the switch expression in ICUs.
           */

        }, {
          key: "parseInterpolationExpression",
          value: function parseInterpolationExpression(expression, location, absoluteOffset) {
            var sourceToLex = this._stripComments(expression);

            var tokens = this._lexer.tokenize(sourceToLex);

            var ast = new _ParseAST(expression, location, absoluteOffset, tokens, sourceToLex.length,
            /* parseAction */
            false, this.errors, 0).parseChain();
            var strings = ['', '']; // The prefix and suffix strings are both empty

            return this.createInterpolationAst(strings, [ast], expression, location, absoluteOffset);
          }
        }, {
          key: "createInterpolationAst",
          value: function createInterpolationAst(strings, expressions, input, location, absoluteOffset) {
            var span = new ParseSpan(0, input.length);
            var interpolation = new Interpolation(span, span.toAbsolute(absoluteOffset), strings, expressions);
            return new ASTWithSource(interpolation, input, location, absoluteOffset, this.errors);
          }
          /**
           * Splits a string of text into "raw" text segments and expressions present in interpolations in
           * the string.
           * Returns `null` if there are no interpolations, otherwise a
           * `SplitInterpolation` with splits that look like
           *   <raw text> <expression> <raw text> ... <raw text> <expression> <raw text>
           */

        }, {
          key: "splitInterpolation",
          value: function splitInterpolation(input, location) {
            var interpolationConfig = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_INTERPOLATION_CONFIG;
            var strings = [];
            var expressions = [];
            var offsets = [];
            var i = 0;
            var atInterpolation = false;
            var extendLastString = false;
            var interpStart = interpolationConfig.start,
                interpEnd = interpolationConfig.end;

            while (i < input.length) {
              if (!atInterpolation) {
                // parse until starting {{
                var _start4 = i;
                i = input.indexOf(interpStart, i);

                if (i === -1) {
                  i = input.length;
                }

                var text = input.substring(_start4, i);
                strings.push({
                  text: text,
                  start: _start4,
                  end: i
                });
                atInterpolation = true;
              } else {
                // parse from starting {{ to ending }} while ignoring content inside quotes.
                var fullStart = i;
                var exprStart = fullStart + interpStart.length;

                var exprEnd = this._getInterpolationEndIndex(input, interpEnd, exprStart);

                if (exprEnd === -1) {
                  // Could not find the end of the interpolation; do not parse an expression.
                  // Instead we should extend the content on the last raw string.
                  atInterpolation = false;
                  extendLastString = true;
                  break;
                }

                var fullEnd = exprEnd + interpEnd.length;

                var _text = input.substring(exprStart, exprEnd);

                if (_text.trim().length === 0) {
                  this._reportError('Blank expressions are not allowed in interpolated strings', input, "at column ".concat(i, " in"), location);
                }

                expressions.push({
                  text: _text,
                  start: fullStart,
                  end: fullEnd
                });
                offsets.push(exprStart);
                i = fullEnd;
                atInterpolation = false;
              }
            }

            if (!atInterpolation) {
              // If we are now at a text section, add the remaining content as a raw string.
              if (extendLastString) {
                var piece = strings[strings.length - 1];
                piece.text += input.substring(i);
                piece.end = input.length;
              } else {
                strings.push({
                  text: input.substring(i),
                  start: i,
                  end: input.length
                });
              }
            }

            return new SplitInterpolation(strings, expressions, offsets);
          }
        }, {
          key: "wrapLiteralPrimitive",
          value: function wrapLiteralPrimitive(input, location, absoluteOffset) {
            var span = new ParseSpan(0, input == null ? 0 : input.length);
            return new ASTWithSource(new LiteralPrimitive(span, span.toAbsolute(absoluteOffset), input), input, location, absoluteOffset, this.errors);
          }
        }, {
          key: "_stripComments",
          value: function _stripComments(input) {
            var i = this._commentStart(input);

            return i != null ? input.substring(0, i).trim() : input;
          }
        }, {
          key: "_commentStart",
          value: function _commentStart(input) {
            var outerQuote = null;

            for (var i = 0; i < input.length - 1; i++) {
              var _char7 = input.charCodeAt(i);

              var nextChar = input.charCodeAt(i + 1);
              if (_char7 === $SLASH && nextChar == $SLASH && outerQuote == null) return i;

              if (outerQuote === _char7) {
                outerQuote = null;
              } else if (outerQuote == null && isQuote(_char7)) {
                outerQuote = _char7;
              }
            }

            return null;
          }
        }, {
          key: "_checkNoInterpolation",
          value: function _checkNoInterpolation(input, location, _ref67) {
            var start = _ref67.start,
                end = _ref67.end;
            var startIndex = -1;
            var endIndex = -1;

            var _iterator19 = _createForOfIteratorHelper(this._forEachUnquotedChar(input, 0)),
                _step19;

            try {
              for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {
                var charIndex = _step19.value;

                if (startIndex === -1) {
                  if (input.startsWith(start)) {
                    startIndex = charIndex;
                  }
                } else {
                  endIndex = this._getInterpolationEndIndex(input, end, charIndex);

                  if (endIndex > -1) {
                    break;
                  }
                }
              }
            } catch (err) {
              _iterator19.e(err);
            } finally {
              _iterator19.f();
            }

            if (startIndex > -1 && endIndex > -1) {
              this._reportError("Got interpolation (".concat(start).concat(end, ") where expression was expected"), input, "at column ".concat(startIndex, " in"), location);
            }
          }
          /**
           * Finds the index of the end of an interpolation expression
           * while ignoring comments and quoted content.
           */

        }, {
          key: "_getInterpolationEndIndex",
          value: function _getInterpolationEndIndex(input, expressionEnd, start) {
            var _iterator20 = _createForOfIteratorHelper(this._forEachUnquotedChar(input, start)),
                _step20;

            try {
              for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {
                var charIndex = _step20.value;

                if (input.startsWith(expressionEnd, charIndex)) {
                  return charIndex;
                } // Nothing else in the expression matters after we've
                // hit a comment so look directly for the end token.


                if (input.startsWith('//', charIndex)) {
                  return input.indexOf(expressionEnd, charIndex);
                }
              }
            } catch (err) {
              _iterator20.e(err);
            } finally {
              _iterator20.f();
            }

            return -1;
          }
          /**
           * Generator used to iterate over the character indexes of a string that are outside of quotes.
           * @param input String to loop through.
           * @param start Index within the string at which to start.
           */

        }, {
          key: "_forEachUnquotedChar",
          value:
          /*#__PURE__*/
          regeneratorRuntime.mark(function _forEachUnquotedChar(input, start) {
            var currentQuote, escapeCount, i, _char8;

            return regeneratorRuntime.wrap(function _forEachUnquotedChar$(_context2) {
              while (1) {
                switch (_context2.prev = _context2.next) {
                  case 0:
                    currentQuote = null;
                    escapeCount = 0;
                    i = start;

                  case 3:
                    if (!(i < input.length)) {
                      _context2.next = 16;
                      break;
                    }

                    _char8 = input[i]; // Skip the characters inside quotes. Note that we only care about the outer-most
                    // quotes matching up and we need to account for escape characters.

                    if (!(isQuote(input.charCodeAt(i)) && (currentQuote === null || currentQuote === _char8) && escapeCount % 2 === 0)) {
                      _context2.next = 9;
                      break;
                    }

                    currentQuote = currentQuote === null ? _char8 : null;
                    _context2.next = 12;
                    break;

                  case 9:
                    if (!(currentQuote === null)) {
                      _context2.next = 12;
                      break;
                    }

                    _context2.next = 12;
                    return i;

                  case 12:
                    escapeCount = _char8 === '\\' ? escapeCount + 1 : 0;

                  case 13:
                    i++;
                    _context2.next = 3;
                    break;

                  case 16:
                  case "end":
                    return _context2.stop();
                }
              }
            }, _forEachUnquotedChar);
          })
        }]);

        return Parser$1;
      }();

      var IvyParser = /*#__PURE__*/function (_Parser$) {
        _inherits2(IvyParser, _Parser$);

        var _super152 = _createSuper(IvyParser);

        function IvyParser() {
          var _this281;

          _classCallCheck2(this, IvyParser);

          _this281 = _super152.apply(this, arguments);
          _this281.simpleExpressionChecker = IvySimpleExpressionChecker;
          return _this281;
        }

        return IvyParser;
      }(Parser$1);
      /** Describes a stateful context an expression parser is in. */


      var ParseContextFlags;

      (function (ParseContextFlags) {
        ParseContextFlags[ParseContextFlags["None"] = 0] = "None";
        /**
         * A Writable context is one in which a value may be written to an lvalue.
         * For example, after we see a property access, we may expect a write to the
         * property via the "=" operator.
         *   prop
         *        ^ possible "=" after
         */

        ParseContextFlags[ParseContextFlags["Writable"] = 1] = "Writable";
      })(ParseContextFlags || (ParseContextFlags = {}));

      var _ParseAST = /*#__PURE__*/function () {
        function _ParseAST(input, location, absoluteOffset, tokens, inputLength, parseAction, errors, offset) {
          _classCallCheck2(this, _ParseAST);

          this.input = input;
          this.location = location;
          this.absoluteOffset = absoluteOffset;
          this.tokens = tokens;
          this.inputLength = inputLength;
          this.parseAction = parseAction;
          this.errors = errors;
          this.offset = offset;
          this.rparensExpected = 0;
          this.rbracketsExpected = 0;
          this.rbracesExpected = 0;
          this.context = ParseContextFlags.None; // Cache of expression start and input indeces to the absolute source span they map to, used to
          // prevent creating superfluous source spans in `sourceSpan`.
          // A serial of the expression start and input index is used for mapping because both are stateful
          // and may change for subsequent expressions visited by the parser.

          this.sourceSpanCache = new Map();
          this.index = 0;
        }

        _createClass2(_ParseAST, [{
          key: "peek",
          value: function peek(offset) {
            var i = this.index + offset;
            return i < this.tokens.length ? this.tokens[i] : EOF;
          }
        }, {
          key: "next",
          get: function get() {
            return this.peek(0);
          }
          /** Whether all the parser input has been processed. */

        }, {
          key: "atEOF",
          get: function get() {
            return this.index >= this.tokens.length;
          }
          /**
           * Index of the next token to be processed, or the end of the last token if all have been
           * processed.
           */

        }, {
          key: "inputIndex",
          get: function get() {
            return this.atEOF ? this.currentEndIndex : this.next.index + this.offset;
          }
          /**
           * End index of the last processed token, or the start of the first token if none have been
           * processed.
           */

        }, {
          key: "currentEndIndex",
          get: function get() {
            if (this.index > 0) {
              var curToken = this.peek(-1);
              return curToken.end + this.offset;
            } // No tokens have been processed yet; return the next token's start or the length of the input
            // if there is no token.


            if (this.tokens.length === 0) {
              return this.inputLength + this.offset;
            }

            return this.next.index + this.offset;
          }
          /**
           * Returns the absolute offset of the start of the current token.
           */

        }, {
          key: "currentAbsoluteOffset",
          get: function get() {
            return this.absoluteOffset + this.inputIndex;
          }
          /**
           * Retrieve a `ParseSpan` from `start` to the current position (or to `artificialEndIndex` if
           * provided).
           *
           * @param start Position from which the `ParseSpan` will start.
           * @param artificialEndIndex Optional ending index to be used if provided (and if greater than the
           *     natural ending index)
           */

        }, {
          key: "span",
          value: function span(start, artificialEndIndex) {
            var endIndex = this.currentEndIndex;

            if (artificialEndIndex !== undefined && artificialEndIndex > this.currentEndIndex) {
              endIndex = artificialEndIndex;
            }

            return new ParseSpan(start, endIndex);
          }
        }, {
          key: "sourceSpan",
          value: function sourceSpan(start, artificialEndIndex) {
            var serial = "".concat(start, "@").concat(this.inputIndex, ":").concat(artificialEndIndex);

            if (!this.sourceSpanCache.has(serial)) {
              this.sourceSpanCache.set(serial, this.span(start, artificialEndIndex).toAbsolute(this.absoluteOffset));
            }

            return this.sourceSpanCache.get(serial);
          }
        }, {
          key: "advance",
          value: function advance() {
            this.index++;
          }
          /**
           * Executes a callback in the provided context.
           */

        }, {
          key: "withContext",
          value: function withContext(context, cb) {
            this.context |= context;
            var ret = cb();
            this.context ^= context;
            return ret;
          }
        }, {
          key: "consumeOptionalCharacter",
          value: function consumeOptionalCharacter(code) {
            if (this.next.isCharacter(code)) {
              this.advance();
              return true;
            } else {
              return false;
            }
          }
        }, {
          key: "peekKeywordLet",
          value: function peekKeywordLet() {
            return this.next.isKeywordLet();
          }
        }, {
          key: "peekKeywordAs",
          value: function peekKeywordAs() {
            return this.next.isKeywordAs();
          }
          /**
           * Consumes an expected character, otherwise emits an error about the missing expected character
           * and skips over the token stream until reaching a recoverable point.
           *
           * See `this.error` and `this.skip` for more details.
           */

        }, {
          key: "expectCharacter",
          value: function expectCharacter(code) {
            if (this.consumeOptionalCharacter(code)) return;
            this.error("Missing expected ".concat(String.fromCharCode(code)));
          }
        }, {
          key: "consumeOptionalOperator",
          value: function consumeOptionalOperator(op) {
            if (this.next.isOperator(op)) {
              this.advance();
              return true;
            } else {
              return false;
            }
          }
        }, {
          key: "expectOperator",
          value: function expectOperator(operator) {
            if (this.consumeOptionalOperator(operator)) return;
            this.error("Missing expected operator ".concat(operator));
          }
        }, {
          key: "prettyPrintToken",
          value: function prettyPrintToken(tok) {
            return tok === EOF ? 'end of input' : "token ".concat(tok);
          }
        }, {
          key: "expectIdentifierOrKeyword",
          value: function expectIdentifierOrKeyword() {
            var n = this.next;

            if (!n.isIdentifier() && !n.isKeyword()) {
              this.error("Unexpected ".concat(this.prettyPrintToken(n), ", expected identifier or keyword"));
              return null;
            }

            this.advance();
            return n.toString();
          }
        }, {
          key: "expectIdentifierOrKeywordOrString",
          value: function expectIdentifierOrKeywordOrString() {
            var n = this.next;

            if (!n.isIdentifier() && !n.isKeyword() && !n.isString()) {
              this.error("Unexpected ".concat(this.prettyPrintToken(n), ", expected identifier, keyword, or string"));
              return '';
            }

            this.advance();
            return n.toString();
          }
        }, {
          key: "parseChain",
          value: function parseChain() {
            var exprs = [];
            var start = this.inputIndex;

            while (this.index < this.tokens.length) {
              var expr = this.parsePipe();
              exprs.push(expr);

              if (this.consumeOptionalCharacter($SEMICOLON)) {
                if (!this.parseAction) {
                  this.error('Binding expression cannot contain chained expression');
                }

                while (this.consumeOptionalCharacter($SEMICOLON)) {} // read all semicolons

              } else if (this.index < this.tokens.length) {
                this.error("Unexpected token '".concat(this.next, "'"));
              }
            }

            if (exprs.length == 0) {
              // We have no expressions so create an empty expression that spans the entire input length
              var artificialStart = this.offset;
              var artificialEnd = this.offset + this.inputLength;
              return new EmptyExpr(this.span(artificialStart, artificialEnd), this.sourceSpan(artificialStart, artificialEnd));
            }

            if (exprs.length == 1) return exprs[0];
            return new Chain(this.span(start), this.sourceSpan(start), exprs);
          }
        }, {
          key: "parsePipe",
          value: function parsePipe() {
            var start = this.inputIndex;
            var result = this.parseExpression();

            if (this.consumeOptionalOperator('|')) {
              if (this.parseAction) {
                this.error('Cannot have a pipe in an action expression');
              }

              do {
                var nameStart = this.inputIndex;
                var nameId = this.expectIdentifierOrKeyword();
                var nameSpan = void 0;
                var fullSpanEnd = undefined;

                if (nameId !== null) {
                  nameSpan = this.sourceSpan(nameStart);
                } else {
                  // No valid identifier was found, so we'll assume an empty pipe name ('').
                  nameId = ''; // However, there may have been whitespace present between the pipe character and the next
                  // token in the sequence (or the end of input). We want to track this whitespace so that
                  // the `BindingPipe` we produce covers not just the pipe character, but any trailing
                  // whitespace beyond it. Another way of thinking about this is that the zero-length name
                  // is assumed to be at the end of any whitespace beyond the pipe character.
                  //
                  // Therefore, we push the end of the `ParseSpan` for this pipe all the way up to the
                  // beginning of the next token, or until the end of input if the next token is EOF.

                  fullSpanEnd = this.next.index !== -1 ? this.next.index : this.inputLength + this.offset; // The `nameSpan` for an empty pipe name is zero-length at the end of any whitespace
                  // beyond the pipe character.

                  nameSpan = new ParseSpan(fullSpanEnd, fullSpanEnd).toAbsolute(this.absoluteOffset);
                }

                var args = [];

                while (this.consumeOptionalCharacter($COLON)) {
                  args.push(this.parseExpression()); // If there are additional expressions beyond the name, then the artificial end for the
                  // name is no longer relevant.
                }

                result = new BindingPipe(this.span(start), this.sourceSpan(start, fullSpanEnd), result, nameId, args, nameSpan);
              } while (this.consumeOptionalOperator('|'));
            }

            return result;
          }
        }, {
          key: "parseExpression",
          value: function parseExpression() {
            return this.parseConditional();
          }
        }, {
          key: "parseConditional",
          value: function parseConditional() {
            var start = this.inputIndex;
            var result = this.parseLogicalOr();

            if (this.consumeOptionalOperator('?')) {
              var yes = this.parsePipe();
              var no;

              if (!this.consumeOptionalCharacter($COLON)) {
                var end = this.inputIndex;
                var expression = this.input.substring(start, end);
                this.error("Conditional expression ".concat(expression, " requires all 3 expressions"));
                no = new EmptyExpr(this.span(start), this.sourceSpan(start));
              } else {
                no = this.parsePipe();
              }

              return new Conditional(this.span(start), this.sourceSpan(start), result, yes, no);
            } else {
              return result;
            }
          }
        }, {
          key: "parseLogicalOr",
          value: function parseLogicalOr() {
            // '||'
            var start = this.inputIndex;
            var result = this.parseLogicalAnd();

            while (this.consumeOptionalOperator('||')) {
              var right = this.parseLogicalAnd();
              result = new Binary(this.span(start), this.sourceSpan(start), '||', result, right);
            }

            return result;
          }
        }, {
          key: "parseLogicalAnd",
          value: function parseLogicalAnd() {
            // '&&'
            var start = this.inputIndex;
            var result = this.parseEquality();

            while (this.consumeOptionalOperator('&&')) {
              var right = this.parseEquality();
              result = new Binary(this.span(start), this.sourceSpan(start), '&&', result, right);
            }

            return result;
          }
        }, {
          key: "parseEquality",
          value: function parseEquality() {
            // '==','!=','===','!=='
            var start = this.inputIndex;
            var result = this.parseRelational();

            while (this.next.type == TokenType$1.Operator) {
              var operator = this.next.strValue;

              switch (operator) {
                case '==':
                case '===':
                case '!=':
                case '!==':
                  this.advance();
                  var right = this.parseRelational();
                  result = new Binary(this.span(start), this.sourceSpan(start), operator, result, right);
                  continue;
              }

              break;
            }

            return result;
          }
        }, {
          key: "parseRelational",
          value: function parseRelational() {
            // '<', '>', '<=', '>='
            var start = this.inputIndex;
            var result = this.parseAdditive();

            while (this.next.type == TokenType$1.Operator) {
              var operator = this.next.strValue;

              switch (operator) {
                case '<':
                case '>':
                case '<=':
                case '>=':
                  this.advance();
                  var right = this.parseAdditive();
                  result = new Binary(this.span(start), this.sourceSpan(start), operator, result, right);
                  continue;
              }

              break;
            }

            return result;
          }
        }, {
          key: "parseAdditive",
          value: function parseAdditive() {
            // '+', '-'
            var start = this.inputIndex;
            var result = this.parseMultiplicative();

            while (this.next.type == TokenType$1.Operator) {
              var operator = this.next.strValue;

              switch (operator) {
                case '+':
                case '-':
                  this.advance();
                  var right = this.parseMultiplicative();
                  result = new Binary(this.span(start), this.sourceSpan(start), operator, result, right);
                  continue;
              }

              break;
            }

            return result;
          }
        }, {
          key: "parseMultiplicative",
          value: function parseMultiplicative() {
            // '*', '%', '/'
            var start = this.inputIndex;
            var result = this.parsePrefix();

            while (this.next.type == TokenType$1.Operator) {
              var operator = this.next.strValue;

              switch (operator) {
                case '*':
                case '%':
                case '/':
                  this.advance();
                  var right = this.parsePrefix();
                  result = new Binary(this.span(start), this.sourceSpan(start), operator, result, right);
                  continue;
              }

              break;
            }

            return result;
          }
        }, {
          key: "parsePrefix",
          value: function parsePrefix() {
            if (this.next.type == TokenType$1.Operator) {
              var _start5 = this.inputIndex;
              var operator = this.next.strValue;
              var result;

              switch (operator) {
                case '+':
                  this.advance();
                  result = this.parsePrefix();
                  return Unary.createPlus(this.span(_start5), this.sourceSpan(_start5), result);

                case '-':
                  this.advance();
                  result = this.parsePrefix();
                  return Unary.createMinus(this.span(_start5), this.sourceSpan(_start5), result);

                case '!':
                  this.advance();
                  result = this.parsePrefix();
                  return new PrefixNot(this.span(_start5), this.sourceSpan(_start5), result);
              }
            }

            return this.parseCallChain();
          }
        }, {
          key: "parseCallChain",
          value: function parseCallChain() {
            var _this282 = this;

            var start = this.inputIndex;
            var result = this.parsePrimary();

            while (true) {
              if (this.consumeOptionalCharacter($PERIOD)) {
                result = this.parseAccessMemberOrMethodCall(result, start, false);
              } else if (this.consumeOptionalOperator('?.')) {
                result = this.parseAccessMemberOrMethodCall(result, start, true);
              } else if (this.consumeOptionalCharacter($LBRACKET)) {
                this.withContext(ParseContextFlags.Writable, function () {
                  _this282.rbracketsExpected++;

                  var key = _this282.parsePipe();

                  if (key instanceof EmptyExpr) {
                    _this282.error("Key access cannot be empty");
                  }

                  _this282.rbracketsExpected--;

                  _this282.expectCharacter($RBRACKET);

                  if (_this282.consumeOptionalOperator('=')) {
                    var value = _this282.parseConditional();

                    result = new KeyedWrite(_this282.span(start), _this282.sourceSpan(start), result, key, value);
                  } else {
                    result = new KeyedRead(_this282.span(start), _this282.sourceSpan(start), result, key);
                  }
                });
              } else if (this.consumeOptionalCharacter($LPAREN)) {
                this.rparensExpected++;
                var args = this.parseCallArguments();
                this.rparensExpected--;
                this.expectCharacter($RPAREN);
                result = new FunctionCall(this.span(start), this.sourceSpan(start), result, args);
              } else if (this.consumeOptionalOperator('!')) {
                result = new NonNullAssert(this.span(start), this.sourceSpan(start), result);
              } else {
                return result;
              }
            }
          }
        }, {
          key: "parsePrimary",
          value: function parsePrimary() {
            var start = this.inputIndex;

            if (this.consumeOptionalCharacter($LPAREN)) {
              this.rparensExpected++;
              var result = this.parsePipe();
              this.rparensExpected--;
              this.expectCharacter($RPAREN);
              return result;
            } else if (this.next.isKeywordNull()) {
              this.advance();
              return new LiteralPrimitive(this.span(start), this.sourceSpan(start), null);
            } else if (this.next.isKeywordUndefined()) {
              this.advance();
              return new LiteralPrimitive(this.span(start), this.sourceSpan(start), void 0);
            } else if (this.next.isKeywordTrue()) {
              this.advance();
              return new LiteralPrimitive(this.span(start), this.sourceSpan(start), true);
            } else if (this.next.isKeywordFalse()) {
              this.advance();
              return new LiteralPrimitive(this.span(start), this.sourceSpan(start), false);
            } else if (this.next.isKeywordThis()) {
              this.advance();
              return new ThisReceiver(this.span(start), this.sourceSpan(start));
            } else if (this.consumeOptionalCharacter($LBRACKET)) {
              this.rbracketsExpected++;
              var elements = this.parseExpressionList($RBRACKET);
              this.rbracketsExpected--;
              this.expectCharacter($RBRACKET);
              return new LiteralArray(this.span(start), this.sourceSpan(start), elements);
            } else if (this.next.isCharacter($LBRACE)) {
              return this.parseLiteralMap();
            } else if (this.next.isIdentifier()) {
              return this.parseAccessMemberOrMethodCall(new ImplicitReceiver(this.span(start), this.sourceSpan(start)), start, false);
            } else if (this.next.isNumber()) {
              var value = this.next.toNumber();
              this.advance();
              return new LiteralPrimitive(this.span(start), this.sourceSpan(start), value);
            } else if (this.next.isString()) {
              var literalValue = this.next.toString();
              this.advance();
              return new LiteralPrimitive(this.span(start), this.sourceSpan(start), literalValue);
            } else if (this.index >= this.tokens.length) {
              this.error("Unexpected end of expression: ".concat(this.input));
              return new EmptyExpr(this.span(start), this.sourceSpan(start));
            } else {
              this.error("Unexpected token ".concat(this.next));
              return new EmptyExpr(this.span(start), this.sourceSpan(start));
            }
          }
        }, {
          key: "parseExpressionList",
          value: function parseExpressionList(terminator) {
            var result = [];

            do {
              if (!this.next.isCharacter(terminator)) {
                result.push(this.parsePipe());
              } else {
                break;
              }
            } while (this.consumeOptionalCharacter($COMMA));

            return result;
          }
        }, {
          key: "parseLiteralMap",
          value: function parseLiteralMap() {
            var keys = [];
            var values = [];
            var start = this.inputIndex;
            this.expectCharacter($LBRACE);

            if (!this.consumeOptionalCharacter($RBRACE)) {
              this.rbracesExpected++;

              do {
                var quoted = this.next.isString();
                var key = this.expectIdentifierOrKeywordOrString();
                keys.push({
                  key: key,
                  quoted: quoted
                });
                this.expectCharacter($COLON);
                values.push(this.parsePipe());
              } while (this.consumeOptionalCharacter($COMMA));

              this.rbracesExpected--;
              this.expectCharacter($RBRACE);
            }

            return new LiteralMap(this.span(start), this.sourceSpan(start), keys, values);
          }
        }, {
          key: "parseAccessMemberOrMethodCall",
          value: function parseAccessMemberOrMethodCall(receiver, start) {
            var _this283 = this;

            var isSafe = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
            var nameStart = this.inputIndex;
            var id = this.withContext(ParseContextFlags.Writable, function () {
              var _a;

              var id = (_a = _this283.expectIdentifierOrKeyword()) !== null && _a !== void 0 ? _a : '';

              if (id.length === 0) {
                _this283.error("Expected identifier for property access", receiver.span.end);
              }

              return id;
            });
            var nameSpan = this.sourceSpan(nameStart);

            if (this.consumeOptionalCharacter($LPAREN)) {
              this.rparensExpected++;
              var args = this.parseCallArguments();
              this.expectCharacter($RPAREN);
              this.rparensExpected--;
              var span = this.span(start);
              var sourceSpan = this.sourceSpan(start);
              return isSafe ? new SafeMethodCall(span, sourceSpan, nameSpan, receiver, id, args) : new MethodCall(span, sourceSpan, nameSpan, receiver, id, args);
            } else {
              if (isSafe) {
                if (this.consumeOptionalOperator('=')) {
                  this.error('The \'?.\' operator cannot be used in the assignment');
                  return new EmptyExpr(this.span(start), this.sourceSpan(start));
                } else {
                  return new SafePropertyRead(this.span(start), this.sourceSpan(start), nameSpan, receiver, id);
                }
              } else {
                if (this.consumeOptionalOperator('=')) {
                  if (!this.parseAction) {
                    this.error('Bindings cannot contain assignments');
                    return new EmptyExpr(this.span(start), this.sourceSpan(start));
                  }

                  var value = this.parseConditional();
                  return new PropertyWrite(this.span(start), this.sourceSpan(start), nameSpan, receiver, id, value);
                } else {
                  return new PropertyRead(this.span(start), this.sourceSpan(start), nameSpan, receiver, id);
                }
              }
            }
          }
        }, {
          key: "parseCallArguments",
          value: function parseCallArguments() {
            if (this.next.isCharacter($RPAREN)) return [];
            var positionals = [];

            do {
              positionals.push(this.parsePipe());
            } while (this.consumeOptionalCharacter($COMMA));

            return positionals;
          }
          /**
           * Parses an identifier, a keyword, a string with an optional `-` in between,
           * and returns the string along with its absolute source span.
           */

        }, {
          key: "expectTemplateBindingKey",
          value: function expectTemplateBindingKey() {
            var result = '';
            var operatorFound = false;
            var start = this.currentAbsoluteOffset;

            do {
              result += this.expectIdentifierOrKeywordOrString();
              operatorFound = this.consumeOptionalOperator('-');

              if (operatorFound) {
                result += '-';
              }
            } while (operatorFound);

            return {
              source: result,
              span: new AbsoluteSourceSpan(start, start + result.length)
            };
          }
          /**
           * Parse microsyntax template expression and return a list of bindings or
           * parsing errors in case the given expression is invalid.
           *
           * For example,
           * ```
           *   <div *ngFor="let item of items; index as i; trackBy: func">
           * ```
           * contains five bindings:
           * 1. ngFor -> null
           * 2. item -> NgForOfContext.$implicit
           * 3. ngForOf -> items
           * 4. i -> NgForOfContext.index
           * 5. ngForTrackBy -> func
           *
           * For a full description of the microsyntax grammar, see
           * https://gist.github.com/mhevery/d3530294cff2e4a1b3fe15ff75d08855
           *
           * @param templateKey name of the microsyntax directive, like ngIf, ngFor,
           * without the *, along with its absolute span.
           */

        }, {
          key: "parseTemplateBindings",
          value: function parseTemplateBindings(templateKey) {
            var bindings = []; // The first binding is for the template key itself
            // In *ngFor="let item of items", key = "ngFor", value = null
            // In *ngIf="cond | pipe", key = "ngIf", value = "cond | pipe"

            bindings.push.apply(bindings, _toConsumableArray(this.parseDirectiveKeywordBindings(templateKey)));

            while (this.index < this.tokens.length) {
              // If it starts with 'let', then this must be variable declaration
              var letBinding = this.parseLetBinding();

              if (letBinding) {
                bindings.push(letBinding);
              } else {
                // Two possible cases here, either `value "as" key` or
                // "directive-keyword expression". We don't know which case, but both
                // "value" and "directive-keyword" are template binding key, so consume
                // the key first.
                var key = this.expectTemplateBindingKey(); // Peek at the next token, if it is "as" then this must be variable
                // declaration.

                var binding = this.parseAsBinding(key);

                if (binding) {
                  bindings.push(binding);
                } else {
                  // Otherwise the key must be a directive keyword, like "of". Transform
                  // the key to actual key. Eg. of -> ngForOf, trackBy -> ngForTrackBy
                  key.source = templateKey.source + key.source.charAt(0).toUpperCase() + key.source.substring(1);
                  bindings.push.apply(bindings, _toConsumableArray(this.parseDirectiveKeywordBindings(key)));
                }
              }

              this.consumeStatementTerminator();
            }

            return new TemplateBindingParseResult(bindings, []
            /* warnings */
            , this.errors);
          }
          /**
           * Parse a directive keyword, followed by a mandatory expression.
           * For example, "of items", "trackBy: func".
           * The bindings are: ngForOf -> items, ngForTrackBy -> func
           * There could be an optional "as" binding that follows the expression.
           * For example,
           * ```
           *   *ngFor="let item of items | slice:0:1 as collection".
           *                    ^^ ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^
           *               keyword    bound target   optional 'as' binding
           * ```
           *
           * @param key binding key, for example, ngFor, ngIf, ngForOf, along with its
           * absolute span.
           */

        }, {
          key: "parseDirectiveKeywordBindings",
          value: function parseDirectiveKeywordBindings(key) {
            var bindings = [];
            this.consumeOptionalCharacter($COLON); // trackBy: trackByFunction

            var value = this.getDirectiveBoundTarget();
            var spanEnd = this.currentAbsoluteOffset; // The binding could optionally be followed by "as". For example,
            // *ngIf="cond | pipe as x". In this case, the key in the "as" binding
            // is "x" and the value is the template key itself ("ngIf"). Note that the
            // 'key' in the current context now becomes the "value" in the next binding.

            var asBinding = this.parseAsBinding(key);

            if (!asBinding) {
              this.consumeStatementTerminator();
              spanEnd = this.currentAbsoluteOffset;
            }

            var sourceSpan = new AbsoluteSourceSpan(key.span.start, spanEnd);
            bindings.push(new ExpressionBinding(sourceSpan, key, value));

            if (asBinding) {
              bindings.push(asBinding);
            }

            return bindings;
          }
          /**
           * Return the expression AST for the bound target of a directive keyword
           * binding. For example,
           * ```
           *   *ngIf="condition | pipe"
           *          ^^^^^^^^^^^^^^^^ bound target for "ngIf"
           *   *ngFor="let item of items"
           *                       ^^^^^ bound target for "ngForOf"
           * ```
           */

        }, {
          key: "getDirectiveBoundTarget",
          value: function getDirectiveBoundTarget() {
            if (this.next === EOF || this.peekKeywordAs() || this.peekKeywordLet()) {
              return null;
            }

            var ast = this.parsePipe(); // example: "condition | async"

            var _ast$span = ast.span,
                start = _ast$span.start,
                end = _ast$span.end;
            var value = this.input.substring(start, end);
            return new ASTWithSource(ast, value, this.location, this.absoluteOffset + start, this.errors);
          }
          /**
           * Return the binding for a variable declared using `as`. Note that the order
           * of the key-value pair in this declaration is reversed. For example,
           * ```
           *   *ngFor="let item of items; index as i"
           *                              ^^^^^    ^
           *                              value    key
           * ```
           *
           * @param value name of the value in the declaration, "ngIf" in the example
           * above, along with its absolute span.
           */

        }, {
          key: "parseAsBinding",
          value: function parseAsBinding(value) {
            if (!this.peekKeywordAs()) {
              return null;
            }

            this.advance(); // consume the 'as' keyword

            var key = this.expectTemplateBindingKey();
            this.consumeStatementTerminator();
            var sourceSpan = new AbsoluteSourceSpan(value.span.start, this.currentAbsoluteOffset);
            return new VariableBinding(sourceSpan, key, value);
          }
          /**
           * Return the binding for a variable declared using `let`. For example,
           * ```
           *   *ngFor="let item of items; let i=index;"
           *           ^^^^^^^^           ^^^^^^^^^^^
           * ```
           * In the first binding, `item` is bound to `NgForOfContext.$implicit`.
           * In the second binding, `i` is bound to `NgForOfContext.index`.
           */

        }, {
          key: "parseLetBinding",
          value: function parseLetBinding() {
            if (!this.peekKeywordLet()) {
              return null;
            }

            var spanStart = this.currentAbsoluteOffset;
            this.advance(); // consume the 'let' keyword

            var key = this.expectTemplateBindingKey();
            var value = null;

            if (this.consumeOptionalOperator('=')) {
              value = this.expectTemplateBindingKey();
            }

            this.consumeStatementTerminator();
            var sourceSpan = new AbsoluteSourceSpan(spanStart, this.currentAbsoluteOffset);
            return new VariableBinding(sourceSpan, key, value);
          }
          /**
           * Consume the optional statement terminator: semicolon or comma.
           */

        }, {
          key: "consumeStatementTerminator",
          value: function consumeStatementTerminator() {
            this.consumeOptionalCharacter($SEMICOLON) || this.consumeOptionalCharacter($COMMA);
          }
          /**
           * Records an error and skips over the token stream until reaching a recoverable point. See
           * `this.skip` for more details on token skipping.
           */

        }, {
          key: "error",
          value: function error(message) {
            var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            this.errors.push(new ParserError(message, this.input, this.locationText(index), this.location));
            this.skip();
          }
        }, {
          key: "locationText",
          value: function locationText() {
            var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
            if (index == null) index = this.index;
            return index < this.tokens.length ? "at column ".concat(this.tokens[index].index + 1, " in") : "at the end of the expression";
          }
          /**
           * Error recovery should skip tokens until it encounters a recovery point.
           *
           * The following are treated as unconditional recovery points:
           *   - end of input
           *   - ';' (parseChain() is always the root production, and it expects a ';')
           *   - '|' (since pipes may be chained and each pipe expression may be treated independently)
           *
           * The following are conditional recovery points:
           *   - ')', '}', ']' if one of calling productions is expecting one of these symbols
           *     - This allows skip() to recover from errors such as '(a.) + 1' allowing more of the AST to
           *       be retained (it doesn't skip any tokens as the ')' is retained because of the '(' begins
           *       an '(' <expr> ')' production).
           *       The recovery points of grouping symbols must be conditional as they must be skipped if
           *       none of the calling productions are not expecting the closing token else we will never
           *       make progress in the case of an extraneous group closing symbol (such as a stray ')').
           *       That is, we skip a closing symbol if we are not in a grouping production.
           *   - '=' in a `Writable` context
           *     - In this context, we are able to recover after seeing the `=` operator, which
           *       signals the presence of an independent rvalue expression following the `=` operator.
           *
           * If a production expects one of these token it increments the corresponding nesting count,
           * and then decrements it just prior to checking if the token is in the input.
           */

        }, {
          key: "skip",
          value: function skip() {
            var n = this.next;

            while (this.index < this.tokens.length && !n.isCharacter($SEMICOLON) && !n.isOperator('|') && (this.rparensExpected <= 0 || !n.isCharacter($RPAREN)) && (this.rbracesExpected <= 0 || !n.isCharacter($RBRACE)) && (this.rbracketsExpected <= 0 || !n.isCharacter($RBRACKET)) && (!(this.context & ParseContextFlags.Writable) || !n.isOperator('='))) {
              if (this.next.isError()) {
                this.errors.push(new ParserError(this.next.toString(), this.input, this.locationText(), this.location));
              }

              this.advance();
              n = this.next;
            }
          }
        }]);

        return _ParseAST;
      }();

      var SimpleExpressionChecker = /*#__PURE__*/function () {
        function SimpleExpressionChecker() {
          _classCallCheck2(this, SimpleExpressionChecker);

          this.errors = [];
        }

        _createClass2(SimpleExpressionChecker, [{
          key: "visitImplicitReceiver",
          value: function visitImplicitReceiver(ast, context) {}
        }, {
          key: "visitThisReceiver",
          value: function visitThisReceiver(ast, context) {}
        }, {
          key: "visitInterpolation",
          value: function visitInterpolation(ast, context) {}
        }, {
          key: "visitLiteralPrimitive",
          value: function visitLiteralPrimitive(ast, context) {}
        }, {
          key: "visitPropertyRead",
          value: function visitPropertyRead(ast, context) {}
        }, {
          key: "visitPropertyWrite",
          value: function visitPropertyWrite(ast, context) {}
        }, {
          key: "visitSafePropertyRead",
          value: function visitSafePropertyRead(ast, context) {}
        }, {
          key: "visitMethodCall",
          value: function visitMethodCall(ast, context) {}
        }, {
          key: "visitSafeMethodCall",
          value: function visitSafeMethodCall(ast, context) {}
        }, {
          key: "visitFunctionCall",
          value: function visitFunctionCall(ast, context) {}
        }, {
          key: "visitLiteralArray",
          value: function visitLiteralArray(ast, context) {
            this.visitAll(ast.expressions, context);
          }
        }, {
          key: "visitLiteralMap",
          value: function visitLiteralMap(ast, context) {
            this.visitAll(ast.values, context);
          }
        }, {
          key: "visitUnary",
          value: function visitUnary(ast, context) {}
        }, {
          key: "visitBinary",
          value: function visitBinary(ast, context) {}
        }, {
          key: "visitPrefixNot",
          value: function visitPrefixNot(ast, context) {}
        }, {
          key: "visitNonNullAssert",
          value: function visitNonNullAssert(ast, context) {}
        }, {
          key: "visitConditional",
          value: function visitConditional(ast, context) {}
        }, {
          key: "visitPipe",
          value: function visitPipe(ast, context) {
            this.errors.push('pipes');
          }
        }, {
          key: "visitKeyedRead",
          value: function visitKeyedRead(ast, context) {}
        }, {
          key: "visitKeyedWrite",
          value: function visitKeyedWrite(ast, context) {}
        }, {
          key: "visitAll",
          value: function visitAll(asts, context) {
            var _this284 = this;

            return asts.map(function (node) {
              return node.visit(_this284, context);
            });
          }
        }, {
          key: "visitChain",
          value: function visitChain(ast, context) {}
        }, {
          key: "visitQuote",
          value: function visitQuote(ast, context) {}
        }]);

        return SimpleExpressionChecker;
      }();
      /**
       * This class implements SimpleExpressionChecker used in View Engine and performs more strict checks
       * to make sure host bindings do not contain pipes. In View Engine, having pipes in host bindings is
       * not supported as well, but in some cases (like `!(value | async)`) the error is not triggered at
       * compile time. In order to preserve View Engine behavior, more strict checks are introduced for
       * Ivy mode only.
       */


      var IvySimpleExpressionChecker = /*#__PURE__*/function (_RecursiveAstVisitor$2) {
        _inherits2(IvySimpleExpressionChecker, _RecursiveAstVisitor$2);

        var _super153 = _createSuper(IvySimpleExpressionChecker);

        function IvySimpleExpressionChecker() {
          var _this285;

          _classCallCheck2(this, IvySimpleExpressionChecker);

          _this285 = _super153.apply(this, arguments);
          _this285.errors = [];
          return _this285;
        }

        _createClass2(IvySimpleExpressionChecker, [{
          key: "visitPipe",
          value: function visitPipe() {
            this.errors.push('pipes');
          }
        }]);

        return IvySimpleExpressionChecker;
      }(RecursiveAstVisitor$1);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // =================================================================================================
      // =================================================================================================
      // =========== S T O P   -  S T O P   -  S T O P   -  S T O P   -  S T O P   -  S T O P  ===========
      // =================================================================================================
      // =================================================================================================
      //
      //        DO NOT EDIT THIS LIST OF SECURITY SENSITIVE PROPERTIES WITHOUT A SECURITY REVIEW!
      //                               Reach out to mprobst for details.
      //
      // =================================================================================================

      /** Map from tagName|propertyName to SecurityContext. Properties applying to all tags use '*'. */


      var _SECURITY_SCHEMA;

      function SECURITY_SCHEMA() {
        if (!_SECURITY_SCHEMA) {
          _SECURITY_SCHEMA = {}; // Case is insignificant below, all element and attribute names are lower-cased for lookup.

          registerContext(SecurityContext.HTML, ['iframe|srcdoc', '*|innerHTML', '*|outerHTML']);
          registerContext(SecurityContext.STYLE, ['*|style']); // NB: no SCRIPT contexts here, they are never allowed due to the parser stripping them.

          registerContext(SecurityContext.URL, ['*|formAction', 'area|href', 'area|ping', 'audio|src', 'a|href', 'a|ping', 'blockquote|cite', 'body|background', 'del|cite', 'form|action', 'img|src', 'img|srcset', 'input|src', 'ins|cite', 'q|cite', 'source|src', 'source|srcset', 'track|src', 'video|poster', 'video|src']);
          registerContext(SecurityContext.RESOURCE_URL, ['applet|code', 'applet|codebase', 'base|href', 'embed|src', 'frame|src', 'head|profile', 'html|manifest', 'iframe|src', 'link|href', 'media|src', 'object|codebase', 'object|data', 'script|src']);
        }

        return _SECURITY_SCHEMA;
      }

      function registerContext(ctx, specs) {
        var _iterator21 = _createForOfIteratorHelper(specs),
            _step21;

        try {
          for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {
            var spec = _step21.value;
            _SECURITY_SCHEMA[spec.toLowerCase()] = ctx;
          }
        } catch (err) {
          _iterator21.e(err);
        } finally {
          _iterator21.f();
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ElementSchemaRegistry = function ElementSchemaRegistry() {
        _classCallCheck2(this, ElementSchemaRegistry);
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var BOOLEAN = 'boolean';
      var NUMBER = 'number';
      var STRING = 'string';
      var OBJECT = 'object';
      /**
       * This array represents the DOM schema. It encodes inheritance, properties, and events.
       *
       * ## Overview
       *
       * Each line represents one kind of element. The `element_inheritance` and properties are joined
       * using `element_inheritance|properties` syntax.
       *
       * ## Element Inheritance
       *
       * The `element_inheritance` can be further subdivided as `element1,element2,...^parentElement`.
       * Here the individual elements are separated by `,` (commas). Every element in the list
       * has identical properties.
       *
       * An `element` may inherit additional properties from `parentElement` If no `^parentElement` is
       * specified then `""` (blank) element is assumed.
       *
       * NOTE: The blank element inherits from root `[Element]` element, the super element of all
       * elements.
       *
       * NOTE an element prefix such as `:svg:` has no special meaning to the schema.
       *
       * ## Properties
       *
       * Each element has a set of properties separated by `,` (commas). Each property can be prefixed
       * by a special character designating its type:
       *
       * - (no prefix): property is a string.
       * - `*`: property represents an event.
       * - `!`: property is a boolean.
       * - `#`: property is a number.
       * - `%`: property is an object.
       *
       * ## Query
       *
       * The class creates an internal squas representation which allows to easily answer the query of
       * if a given property exist on a given element.
       *
       * NOTE: We don't yet support querying for types or events.
       * NOTE: This schema is auto extracted from `schema_extractor.ts` located in the test folder,
       *       see dom_element_schema_registry_spec.ts
       */
      // =================================================================================================
      // =================================================================================================
      // =========== S T O P   -  S T O P   -  S T O P   -  S T O P   -  S T O P   -  S T O P  ===========
      // =================================================================================================
      // =================================================================================================
      //
      //                       DO NOT EDIT THIS DOM SCHEMA WITHOUT A SECURITY REVIEW!
      //
      // Newly added properties must be security reviewed and assigned an appropriate SecurityContext in
      // dom_security_schema.ts. Reach out to mprobst & rjamet for details.
      //
      // =================================================================================================

      var SCHEMA = ['[Element]|textContent,%classList,className,id,innerHTML,*beforecopy,*beforecut,*beforepaste,*copy,*cut,*paste,*search,*selectstart,*webkitfullscreenchange,*webkitfullscreenerror,*wheel,outerHTML,#scrollLeft,#scrollTop,slot' +
      /* added manually to avoid breaking changes */
      ',*message,*mozfullscreenchange,*mozfullscreenerror,*mozpointerlockchange,*mozpointerlockerror,*webglcontextcreationerror,*webglcontextlost,*webglcontextrestored', '[HTMLElement]^[Element]|accessKey,contentEditable,dir,!draggable,!hidden,innerText,lang,*abort,*auxclick,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*cuechange,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*gotpointercapture,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*lostpointercapture,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*pause,*play,*playing,*pointercancel,*pointerdown,*pointerenter,*pointerleave,*pointermove,*pointerout,*pointerover,*pointerup,*progress,*ratechange,*reset,*resize,*scroll,*seeked,*seeking,*select,*show,*stalled,*submit,*suspend,*timeupdate,*toggle,*volumechange,*waiting,outerText,!spellcheck,%style,#tabIndex,title,!translate', 'abbr,address,article,aside,b,bdi,bdo,cite,code,dd,dfn,dt,em,figcaption,figure,footer,header,i,kbd,main,mark,nav,noscript,rb,rp,rt,rtc,ruby,s,samp,section,small,strong,sub,sup,u,var,wbr^[HTMLElement]|accessKey,contentEditable,dir,!draggable,!hidden,innerText,lang,*abort,*auxclick,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*cuechange,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*gotpointercapture,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*lostpointercapture,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*pause,*play,*playing,*pointercancel,*pointerdown,*pointerenter,*pointerleave,*pointermove,*pointerout,*pointerover,*pointerup,*progress,*ratechange,*reset,*resize,*scroll,*seeked,*seeking,*select,*show,*stalled,*submit,*suspend,*timeupdate,*toggle,*volumechange,*waiting,outerText,!spellcheck,%style,#tabIndex,title,!translate', 'media^[HTMLElement]|!autoplay,!controls,%controlsList,%crossOrigin,#currentTime,!defaultMuted,#defaultPlaybackRate,!disableRemotePlayback,!loop,!muted,*encrypted,*waitingforkey,#playbackRate,preload,src,%srcObject,#volume', ':svg:^[HTMLElement]|*abort,*auxclick,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*cuechange,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*gotpointercapture,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*lostpointercapture,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*pause,*play,*playing,*pointercancel,*pointerdown,*pointerenter,*pointerleave,*pointermove,*pointerout,*pointerover,*pointerup,*progress,*ratechange,*reset,*resize,*scroll,*seeked,*seeking,*select,*show,*stalled,*submit,*suspend,*timeupdate,*toggle,*volumechange,*waiting,%style,#tabIndex', ':svg:graphics^:svg:|', ':svg:animation^:svg:|*begin,*end,*repeat', ':svg:geometry^:svg:|', ':svg:componentTransferFunction^:svg:|', ':svg:gradient^:svg:|', ':svg:textContent^:svg:graphics|', ':svg:textPositioning^:svg:textContent|', 'a^[HTMLElement]|charset,coords,download,hash,host,hostname,href,hreflang,name,password,pathname,ping,port,protocol,referrerPolicy,rel,rev,search,shape,target,text,type,username', 'area^[HTMLElement]|alt,coords,download,hash,host,hostname,href,!noHref,password,pathname,ping,port,protocol,referrerPolicy,rel,search,shape,target,username', 'audio^media|', 'br^[HTMLElement]|clear', 'base^[HTMLElement]|href,target', 'body^[HTMLElement]|aLink,background,bgColor,link,*beforeunload,*blur,*error,*focus,*hashchange,*languagechange,*load,*message,*offline,*online,*pagehide,*pageshow,*popstate,*rejectionhandled,*resize,*scroll,*storage,*unhandledrejection,*unload,text,vLink', 'button^[HTMLElement]|!autofocus,!disabled,formAction,formEnctype,formMethod,!formNoValidate,formTarget,name,type,value', 'canvas^[HTMLElement]|#height,#width', 'content^[HTMLElement]|select', 'dl^[HTMLElement]|!compact', 'datalist^[HTMLElement]|', 'details^[HTMLElement]|!open', 'dialog^[HTMLElement]|!open,returnValue', 'dir^[HTMLElement]|!compact', 'div^[HTMLElement]|align', 'embed^[HTMLElement]|align,height,name,src,type,width', 'fieldset^[HTMLElement]|!disabled,name', 'font^[HTMLElement]|color,face,size', 'form^[HTMLElement]|acceptCharset,action,autocomplete,encoding,enctype,method,name,!noValidate,target', 'frame^[HTMLElement]|frameBorder,longDesc,marginHeight,marginWidth,name,!noResize,scrolling,src', 'frameset^[HTMLElement]|cols,*beforeunload,*blur,*error,*focus,*hashchange,*languagechange,*load,*message,*offline,*online,*pagehide,*pageshow,*popstate,*rejectionhandled,*resize,*scroll,*storage,*unhandledrejection,*unload,rows', 'hr^[HTMLElement]|align,color,!noShade,size,width', 'head^[HTMLElement]|', 'h1,h2,h3,h4,h5,h6^[HTMLElement]|align', 'html^[HTMLElement]|version', 'iframe^[HTMLElement]|align,!allowFullscreen,frameBorder,height,longDesc,marginHeight,marginWidth,name,referrerPolicy,%sandbox,scrolling,src,srcdoc,width', 'img^[HTMLElement]|align,alt,border,%crossOrigin,#height,#hspace,!isMap,longDesc,lowsrc,name,referrerPolicy,sizes,src,srcset,useMap,#vspace,#width', 'input^[HTMLElement]|accept,align,alt,autocapitalize,autocomplete,!autofocus,!checked,!defaultChecked,defaultValue,dirName,!disabled,%files,formAction,formEnctype,formMethod,!formNoValidate,formTarget,#height,!incremental,!indeterminate,max,#maxLength,min,#minLength,!multiple,name,pattern,placeholder,!readOnly,!required,selectionDirection,#selectionEnd,#selectionStart,#size,src,step,type,useMap,value,%valueAsDate,#valueAsNumber,#width', 'li^[HTMLElement]|type,#value', 'label^[HTMLElement]|htmlFor', 'legend^[HTMLElement]|align', 'link^[HTMLElement]|as,charset,%crossOrigin,!disabled,href,hreflang,integrity,media,referrerPolicy,rel,%relList,rev,%sizes,target,type', 'map^[HTMLElement]|name', 'marquee^[HTMLElement]|behavior,bgColor,direction,height,#hspace,#loop,#scrollAmount,#scrollDelay,!trueSpeed,#vspace,width', 'menu^[HTMLElement]|!compact', 'meta^[HTMLElement]|content,httpEquiv,name,scheme', 'meter^[HTMLElement]|#high,#low,#max,#min,#optimum,#value', 'ins,del^[HTMLElement]|cite,dateTime', 'ol^[HTMLElement]|!compact,!reversed,#start,type', 'object^[HTMLElement]|align,archive,border,code,codeBase,codeType,data,!declare,height,#hspace,name,standby,type,useMap,#vspace,width', 'optgroup^[HTMLElement]|!disabled,label', 'option^[HTMLElement]|!defaultSelected,!disabled,label,!selected,text,value', 'output^[HTMLElement]|defaultValue,%htmlFor,name,value', 'p^[HTMLElement]|align', 'param^[HTMLElement]|name,type,value,valueType', 'picture^[HTMLElement]|', 'pre^[HTMLElement]|#width', 'progress^[HTMLElement]|#max,#value', 'q,blockquote,cite^[HTMLElement]|', 'script^[HTMLElement]|!async,charset,%crossOrigin,!defer,event,htmlFor,integrity,src,text,type', 'select^[HTMLElement]|!autofocus,!disabled,#length,!multiple,name,!required,#selectedIndex,#size,value', 'shadow^[HTMLElement]|', 'slot^[HTMLElement]|name', 'source^[HTMLElement]|media,sizes,src,srcset,type', 'span^[HTMLElement]|', 'style^[HTMLElement]|!disabled,media,type', 'caption^[HTMLElement]|align', 'th,td^[HTMLElement]|abbr,align,axis,bgColor,ch,chOff,#colSpan,headers,height,!noWrap,#rowSpan,scope,vAlign,width', 'col,colgroup^[HTMLElement]|align,ch,chOff,#span,vAlign,width', 'table^[HTMLElement]|align,bgColor,border,%caption,cellPadding,cellSpacing,frame,rules,summary,%tFoot,%tHead,width', 'tr^[HTMLElement]|align,bgColor,ch,chOff,vAlign', 'tfoot,thead,tbody^[HTMLElement]|align,ch,chOff,vAlign', 'template^[HTMLElement]|', 'textarea^[HTMLElement]|autocapitalize,!autofocus,#cols,defaultValue,dirName,!disabled,#maxLength,#minLength,name,placeholder,!readOnly,!required,#rows,selectionDirection,#selectionEnd,#selectionStart,value,wrap', 'title^[HTMLElement]|text', 'track^[HTMLElement]|!default,kind,label,src,srclang', 'ul^[HTMLElement]|!compact,type', 'unknown^[HTMLElement]|', 'video^media|#height,poster,#width', ':svg:a^:svg:graphics|', ':svg:animate^:svg:animation|', ':svg:animateMotion^:svg:animation|', ':svg:animateTransform^:svg:animation|', ':svg:circle^:svg:geometry|', ':svg:clipPath^:svg:graphics|', ':svg:defs^:svg:graphics|', ':svg:desc^:svg:|', ':svg:discard^:svg:|', ':svg:ellipse^:svg:geometry|', ':svg:feBlend^:svg:|', ':svg:feColorMatrix^:svg:|', ':svg:feComponentTransfer^:svg:|', ':svg:feComposite^:svg:|', ':svg:feConvolveMatrix^:svg:|', ':svg:feDiffuseLighting^:svg:|', ':svg:feDisplacementMap^:svg:|', ':svg:feDistantLight^:svg:|', ':svg:feDropShadow^:svg:|', ':svg:feFlood^:svg:|', ':svg:feFuncA^:svg:componentTransferFunction|', ':svg:feFuncB^:svg:componentTransferFunction|', ':svg:feFuncG^:svg:componentTransferFunction|', ':svg:feFuncR^:svg:componentTransferFunction|', ':svg:feGaussianBlur^:svg:|', ':svg:feImage^:svg:|', ':svg:feMerge^:svg:|', ':svg:feMergeNode^:svg:|', ':svg:feMorphology^:svg:|', ':svg:feOffset^:svg:|', ':svg:fePointLight^:svg:|', ':svg:feSpecularLighting^:svg:|', ':svg:feSpotLight^:svg:|', ':svg:feTile^:svg:|', ':svg:feTurbulence^:svg:|', ':svg:filter^:svg:|', ':svg:foreignObject^:svg:graphics|', ':svg:g^:svg:graphics|', ':svg:image^:svg:graphics|', ':svg:line^:svg:geometry|', ':svg:linearGradient^:svg:gradient|', ':svg:mpath^:svg:|', ':svg:marker^:svg:|', ':svg:mask^:svg:|', ':svg:metadata^:svg:|', ':svg:path^:svg:geometry|', ':svg:pattern^:svg:|', ':svg:polygon^:svg:geometry|', ':svg:polyline^:svg:geometry|', ':svg:radialGradient^:svg:gradient|', ':svg:rect^:svg:geometry|', ':svg:svg^:svg:graphics|#currentScale,#zoomAndPan', ':svg:script^:svg:|type', ':svg:set^:svg:animation|', ':svg:stop^:svg:|', ':svg:style^:svg:|!disabled,media,title,type', ':svg:switch^:svg:graphics|', ':svg:symbol^:svg:|', ':svg:tspan^:svg:textPositioning|', ':svg:text^:svg:textPositioning|', ':svg:textPath^:svg:textContent|', ':svg:title^:svg:|', ':svg:use^:svg:graphics|', ':svg:view^:svg:|#zoomAndPan', 'data^[HTMLElement]|value', 'keygen^[HTMLElement]|!autofocus,challenge,!disabled,form,keytype,name', 'menuitem^[HTMLElement]|type,label,icon,!disabled,!checked,radiogroup,!default', 'summary^[HTMLElement]|', 'time^[HTMLElement]|dateTime', ':svg:cursor^:svg:|'];
      var _ATTR_TO_PROP = {
        'class': 'className',
        'for': 'htmlFor',
        'formaction': 'formAction',
        'innerHtml': 'innerHTML',
        'readonly': 'readOnly',
        'tabindex': 'tabIndex'
      }; // Invert _ATTR_TO_PROP.

      var _PROP_TO_ATTR = Object.keys(_ATTR_TO_PROP).reduce(function (inverted, attr) {
        inverted[_ATTR_TO_PROP[attr]] = attr;
        return inverted;
      }, {});

      var DomElementSchemaRegistry = /*#__PURE__*/function (_ElementSchemaRegistr) {
        _inherits2(DomElementSchemaRegistry, _ElementSchemaRegistr);

        var _super154 = _createSuper(DomElementSchemaRegistry);

        function DomElementSchemaRegistry() {
          var _this286;

          _classCallCheck2(this, DomElementSchemaRegistry);

          _this286 = _super154.call(this);
          _this286._schema = {};
          SCHEMA.forEach(function (encodedType) {
            var type = {};

            var _encodedType$split = encodedType.split('|'),
                _encodedType$split2 = _slicedToArray(_encodedType$split, 2),
                strType = _encodedType$split2[0],
                strProperties = _encodedType$split2[1];

            var properties = strProperties.split(',');

            var _strType$split = strType.split('^'),
                _strType$split2 = _slicedToArray(_strType$split, 2),
                typeNames = _strType$split2[0],
                superName = _strType$split2[1];

            typeNames.split(',').forEach(function (tag) {
              return _this286._schema[tag.toLowerCase()] = type;
            });

            var superType = superName && _this286._schema[superName.toLowerCase()];

            if (superType) {
              Object.keys(superType).forEach(function (prop) {
                type[prop] = superType[prop];
              });
            }

            properties.forEach(function (property) {
              if (property.length > 0) {
                switch (property[0]) {
                  case '*':
                    // We don't yet support events.
                    // If ever allowing to bind to events, GO THROUGH A SECURITY REVIEW, allowing events
                    // will
                    // almost certainly introduce bad XSS vulnerabilities.
                    // type[property.substring(1)] = EVENT;
                    break;

                  case '!':
                    type[property.substring(1)] = BOOLEAN;
                    break;

                  case '#':
                    type[property.substring(1)] = NUMBER;
                    break;

                  case '%':
                    type[property.substring(1)] = OBJECT;
                    break;

                  default:
                    type[property] = STRING;
                }
              }
            });
          });
          return _this286;
        }

        _createClass2(DomElementSchemaRegistry, [{
          key: "hasProperty",
          value: function hasProperty(tagName, propName, schemaMetas) {
            if (schemaMetas.some(function (schema) {
              return schema.name === NO_ERRORS_SCHEMA.name;
            })) {
              return true;
            }

            if (tagName.indexOf('-') > -1) {
              if (isNgContainer(tagName) || isNgContent(tagName)) {
                return false;
              }

              if (schemaMetas.some(function (schema) {
                return schema.name === CUSTOM_ELEMENTS_SCHEMA.name;
              })) {
                // Can't tell now as we don't know which properties a custom element will get
                // once it is instantiated
                return true;
              }
            }

            var elementProperties = this._schema[tagName.toLowerCase()] || this._schema['unknown'];

            return !!elementProperties[propName];
          }
        }, {
          key: "hasElement",
          value: function hasElement(tagName, schemaMetas) {
            if (schemaMetas.some(function (schema) {
              return schema.name === NO_ERRORS_SCHEMA.name;
            })) {
              return true;
            }

            if (tagName.indexOf('-') > -1) {
              if (isNgContainer(tagName) || isNgContent(tagName)) {
                return true;
              }

              if (schemaMetas.some(function (schema) {
                return schema.name === CUSTOM_ELEMENTS_SCHEMA.name;
              })) {
                // Allow any custom elements
                return true;
              }
            }

            return !!this._schema[tagName.toLowerCase()];
          }
          /**
           * securityContext returns the security context for the given property on the given DOM tag.
           *
           * Tag and property name are statically known and cannot change at runtime, i.e. it is not
           * possible to bind a value into a changing attribute or tag name.
           *
           * The filtering is based on a list of allowed tags|attributes. All attributes in the schema
           * above are assumed to have the 'NONE' security context, i.e. that they are safe inert
           * string values. Only specific well known attack vectors are assigned their appropriate context.
           */

        }, {
          key: "securityContext",
          value: function securityContext(tagName, propName, isAttribute) {
            if (isAttribute) {
              // NB: For security purposes, use the mapped property name, not the attribute name.
              propName = this.getMappedPropName(propName);
            } // Make sure comparisons are case insensitive, so that case differences between attribute and
            // property names do not have a security impact.


            tagName = tagName.toLowerCase();
            propName = propName.toLowerCase();
            var ctx = SECURITY_SCHEMA()[tagName + '|' + propName];

            if (ctx) {
              return ctx;
            }

            ctx = SECURITY_SCHEMA()['*|' + propName];
            return ctx ? ctx : SecurityContext.NONE;
          }
        }, {
          key: "getMappedPropName",
          value: function getMappedPropName(propName) {
            return _ATTR_TO_PROP[propName] || propName;
          }
        }, {
          key: "getDefaultComponentElementName",
          value: function getDefaultComponentElementName() {
            return 'ng-component';
          }
        }, {
          key: "validateProperty",
          value: function validateProperty(name) {
            if (name.toLowerCase().startsWith('on')) {
              var msg = "Binding to event property '".concat(name, "' is disallowed for security reasons, ") + "please use (".concat(name.slice(2), ")=...") + "\nIf '".concat(name, "' is a directive input, make sure the directive is imported by the") + " current module.";
              return {
                error: true,
                msg: msg
              };
            } else {
              return {
                error: false
              };
            }
          }
        }, {
          key: "validateAttribute",
          value: function validateAttribute(name) {
            if (name.toLowerCase().startsWith('on')) {
              var msg = "Binding to event attribute '".concat(name, "' is disallowed for security reasons, ") + "please use (".concat(name.slice(2), ")=...");
              return {
                error: true,
                msg: msg
              };
            } else {
              return {
                error: false
              };
            }
          }
        }, {
          key: "allKnownElementNames",
          value: function allKnownElementNames() {
            return Object.keys(this._schema);
          }
        }, {
          key: "allKnownAttributesOfElement",
          value: function allKnownAttributesOfElement(tagName) {
            var elementProperties = this._schema[tagName.toLowerCase()] || this._schema['unknown']; // Convert properties to attributes.


            return Object.keys(elementProperties).map(function (prop) {
              var _a;

              return (_a = _PROP_TO_ATTR[prop]) !== null && _a !== void 0 ? _a : prop;
            });
          }
        }, {
          key: "normalizeAnimationStyleProperty",
          value: function normalizeAnimationStyleProperty(propName) {
            return dashCaseToCamelCase(propName);
          }
        }, {
          key: "normalizeAnimationStyleValue",
          value: function normalizeAnimationStyleValue(camelCaseProp, userProvidedProp, val) {
            var unit = '';
            var strVal = val.toString().trim();
            var errorMsg = null;

            if (_isPixelDimensionStyle(camelCaseProp) && val !== 0 && val !== '0') {
              if (typeof val === 'number') {
                unit = 'px';
              } else {
                var valAndSuffixMatch = val.match(/^[+-]?[\d\.]+([a-z]*)$/);

                if (valAndSuffixMatch && valAndSuffixMatch[1].length == 0) {
                  errorMsg = "Please provide a CSS unit value for ".concat(userProvidedProp, ":").concat(val);
                }
              }
            }

            return {
              error: errorMsg,
              value: strVal + unit
            };
          }
        }]);

        return DomElementSchemaRegistry;
      }(ElementSchemaRegistry);

      function _isPixelDimensionStyle(prop) {
        switch (prop) {
          case 'width':
          case 'height':
          case 'minWidth':
          case 'minHeight':
          case 'maxWidth':
          case 'maxHeight':
          case 'left':
          case 'top':
          case 'bottom':
          case 'right':
          case 'fontSize':
          case 'outlineWidth':
          case 'outlineOffset':
          case 'paddingTop':
          case 'paddingLeft':
          case 'paddingBottom':
          case 'paddingRight':
          case 'marginTop':
          case 'marginLeft':
          case 'marginBottom':
          case 'marginRight':
          case 'borderRadius':
          case 'borderWidth':
          case 'borderTopWidth':
          case 'borderLeftWidth':
          case 'borderRightWidth':
          case 'borderBottomWidth':
          case 'textIndent':
            return true;

          default:
            return false;
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Set of tagName|propertyName corresponding to Trusted Types sinks. Properties applying to all
       * tags use '*'.
       *
       * Extracted from, and should be kept in sync with
       * https://w3c.github.io/webappsec-trusted-types/dist/spec/#integrations
       */


      var TRUSTED_TYPES_SINKS = new Set([// NOTE: All strings in this set *must* be lowercase!
      // TrustedHTML
      'iframe|srcdoc', '*|innerhtml', '*|outerhtml', // NB: no TrustedScript here, as the corresponding tags are stripped by the compiler.
      // TrustedScriptURL
      'embed|src', 'object|codebase', 'object|data']);
      /**
       * isTrustedTypesSink returns true if the given property on the given DOM tag is a Trusted Types
       * sink. In that case, use `ElementSchemaRegistry.securityContext` to determine which particular
       * Trusted Type is required for values passed to the sink:
       * - SecurityContext.HTML corresponds to TrustedHTML
       * - SecurityContext.RESOURCE_URL corresponds to TrustedScriptURL
       */

      function isTrustedTypesSink(tagName, propName) {
        // Make sure comparisons are case insensitive, so that case differences between attribute and
        // property names do not have a security impact.
        tagName = tagName.toLowerCase();
        propName = propName.toLowerCase();
        return TRUSTED_TYPES_SINKS.has(tagName + '|' + propName) || TRUSTED_TYPES_SINKS.has('*|' + propName);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var BIND_NAME_REGEXP$1 = /^(?:(bind-)|(let-)|(ref-|#)|(on-)|(bindon-)|(@))(.*)$/; // Group 1 = "bind-"

      var KW_BIND_IDX$1 = 1; // Group 2 = "let-"

      var KW_LET_IDX$1 = 2; // Group 3 = "ref-/#"

      var KW_REF_IDX$1 = 3; // Group 4 = "on-"

      var KW_ON_IDX$1 = 4; // Group 5 = "bindon-"

      var KW_BINDON_IDX$1 = 5; // Group 6 = "@"

      var KW_AT_IDX$1 = 6; // Group 7 = the identifier after "bind-", "let-", "ref-/#", "on-", "bindon-" or "@"

      var IDENT_KW_IDX$1 = 7;
      var BINDING_DELIMS = {
        BANANA_BOX: {
          start: '[(',
          end: ')]'
        },
        PROPERTY: {
          start: '[',
          end: ']'
        },
        EVENT: {
          start: '(',
          end: ')'
        }
      };
      var TEMPLATE_ATTR_PREFIX$2 = '*';

      function htmlAstToRender3Ast(htmlNodes, bindingParser) {
        var transformer = new HtmlAstToIvyAst(bindingParser);
        var ivyNodes = visitAll$1(transformer, htmlNodes); // Errors might originate in either the binding parser or the html to ivy transformer

        var allErrors = bindingParser.errors.concat(transformer.errors);
        return {
          nodes: ivyNodes,
          errors: allErrors,
          styleUrls: transformer.styleUrls,
          styles: transformer.styles,
          ngContentSelectors: transformer.ngContentSelectors
        };
      }

      var HtmlAstToIvyAst = /*#__PURE__*/function () {
        function HtmlAstToIvyAst(bindingParser) {
          _classCallCheck2(this, HtmlAstToIvyAst);

          this.bindingParser = bindingParser;
          this.errors = [];
          this.styles = [];
          this.styleUrls = [];
          this.ngContentSelectors = [];
          this.inI18nBlock = false;
        } // HTML visitor


        _createClass2(HtmlAstToIvyAst, [{
          key: "visitElement",
          value: function visitElement(element) {
            var _this287 = this;

            var isI18nRootElement = isI18nRootNode(element.i18n);

            if (isI18nRootElement) {
              if (this.inI18nBlock) {
                this.reportError('Cannot mark an element as translatable inside of a translatable section. Please remove the nested i18n marker.', element.sourceSpan);
              }

              this.inI18nBlock = true;
            }

            var preparsedElement = preparseElement(element);

            if (preparsedElement.type === PreparsedElementType.SCRIPT) {
              return null;
            } else if (preparsedElement.type === PreparsedElementType.STYLE) {
              var contents = textContents(element);

              if (contents !== null) {
                this.styles.push(contents);
              }

              return null;
            } else if (preparsedElement.type === PreparsedElementType.STYLESHEET && isStyleUrlResolvable(preparsedElement.hrefAttr)) {
              this.styleUrls.push(preparsedElement.hrefAttr);
              return null;
            } // Whether the element is a `<ng-template>`


            var isTemplateElement = isNgTemplate(element.name);
            var parsedProperties = [];
            var boundEvents = [];
            var variables = [];
            var references = [];
            var attributes = [];
            var i18nAttrsMeta = {};
            var templateParsedProperties = [];
            var templateVariables = []; // Whether the element has any *-attribute

            var elementHasInlineTemplate = false;

            var _iterator22 = _createForOfIteratorHelper(element.attrs),
                _step22;

            try {
              for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {
                var attribute = _step22.value;
                var hasBinding = false;
                var normalizedName = normalizeAttributeName(attribute.name); // `*attr` defines template bindings

                var isTemplateBinding = false;

                if (attribute.i18n) {
                  i18nAttrsMeta[attribute.name] = attribute.i18n;
                }

                if (normalizedName.startsWith(TEMPLATE_ATTR_PREFIX$2)) {
                  // *-attributes
                  if (elementHasInlineTemplate) {
                    this.reportError("Can't have multiple template bindings on one element. Use only one attribute prefixed with *", attribute.sourceSpan);
                  }

                  isTemplateBinding = true;
                  elementHasInlineTemplate = true;
                  var templateValue = attribute.value;
                  var templateKey = normalizedName.substring(TEMPLATE_ATTR_PREFIX$2.length);
                  var parsedVariables = [];
                  var absoluteValueOffset = attribute.valueSpan ? attribute.valueSpan.start.offset : // If there is no value span the attribute does not have a value, like `attr` in
                  //`<div attr></div>`. In this case, point to one character beyond the last character of
                  // the attribute name.
                  attribute.sourceSpan.start.offset + attribute.name.length;
                  this.bindingParser.parseInlineTemplateBinding(templateKey, templateValue, attribute.sourceSpan, absoluteValueOffset, [], templateParsedProperties, parsedVariables, true
                  /* isIvyAst */
                  );
                  templateVariables.push.apply(templateVariables, _toConsumableArray(parsedVariables.map(function (v) {
                    return new Variable(v.name, v.value, v.sourceSpan, v.keySpan, v.valueSpan);
                  })));
                } else {
                  // Check for variables, events, property bindings, interpolation
                  hasBinding = this.parseAttribute(isTemplateElement, attribute, [], parsedProperties, boundEvents, variables, references);
                }

                if (!hasBinding && !isTemplateBinding) {
                  // don't include the bindings as attributes as well in the AST
                  attributes.push(this.visitAttribute(attribute));
                }
              }
            } catch (err) {
              _iterator22.e(err);
            } finally {
              _iterator22.f();
            }

            var children = visitAll$1(preparsedElement.nonBindable ? NON_BINDABLE_VISITOR$1 : this, element.children);
            var parsedElement;

            if (preparsedElement.type === PreparsedElementType.NG_CONTENT) {
              // `<ng-content>`
              if (element.children && !element.children.every(function (node) {
                return isEmptyTextNode(node) || isCommentNode(node);
              })) {
                this.reportError("<ng-content> element cannot have content.", element.sourceSpan);
              }

              var selector = preparsedElement.selectAttr;
              var attrs = element.attrs.map(function (attr) {
                return _this287.visitAttribute(attr);
              });
              parsedElement = new Content(selector, attrs, element.sourceSpan, element.i18n);
              this.ngContentSelectors.push(selector);
            } else if (isTemplateElement) {
              // `<ng-template>`
              var _attrs = this.extractAttributes(element.name, parsedProperties, i18nAttrsMeta);

              parsedElement = new Template(element.name, attributes, _attrs.bound, boundEvents, [
                /* no template attributes */
              ], children, references, variables, element.sourceSpan, element.startSourceSpan, element.endSourceSpan, element.i18n);
            } else {
              var _attrs2 = this.extractAttributes(element.name, parsedProperties, i18nAttrsMeta);

              parsedElement = new Element(element.name, attributes, _attrs2.bound, boundEvents, children, references, element.sourceSpan, element.startSourceSpan, element.endSourceSpan, element.i18n);
            }

            if (elementHasInlineTemplate) {
              // If this node is an inline-template (e.g. has *ngFor) then we need to create a template
              // node that contains this node.
              // Moreover, if the node is an element, then we need to hoist its attributes to the template
              // node for matching against content projection selectors.
              var _attrs3 = this.extractAttributes('ng-template', templateParsedProperties, i18nAttrsMeta);

              var templateAttrs = [];

              _attrs3.literal.forEach(function (attr) {
                return templateAttrs.push(attr);
              });

              _attrs3.bound.forEach(function (attr) {
                return templateAttrs.push(attr);
              });

              var hoistedAttrs = parsedElement instanceof Element ? {
                attributes: parsedElement.attributes,
                inputs: parsedElement.inputs,
                outputs: parsedElement.outputs
              } : {
                attributes: [],
                inputs: [],
                outputs: []
              }; // For <ng-template>s with structural directives on them, avoid passing i18n information to
              // the wrapping template to prevent unnecessary i18n instructions from being generated. The
              // necessary i18n meta information will be extracted from child elements.

              var i18n = isTemplateElement && isI18nRootElement ? undefined : element.i18n; // TODO(pk): test for this case

              parsedElement = new Template(parsedElement.name, hoistedAttrs.attributes, hoistedAttrs.inputs, hoistedAttrs.outputs, templateAttrs, [parsedElement], [
                /* no references */
              ], templateVariables, element.sourceSpan, element.startSourceSpan, element.endSourceSpan, i18n);
            }

            if (isI18nRootElement) {
              this.inI18nBlock = false;
            }

            return parsedElement;
          }
        }, {
          key: "visitAttribute",
          value: function visitAttribute(attribute) {
            return new TextAttribute(attribute.name, attribute.value, attribute.sourceSpan, attribute.keySpan, attribute.valueSpan, attribute.i18n);
          }
        }, {
          key: "visitText",
          value: function visitText(text) {
            return this._visitTextWithInterpolation(text.value, text.sourceSpan, text.i18n);
          }
        }, {
          key: "visitExpansion",
          value: function visitExpansion(expansion) {
            var _this288 = this;

            if (!expansion.i18n) {
              // do not generate Icu in case it was created
              // outside of i18n block in a template
              return null;
            }

            if (!isI18nRootNode(expansion.i18n)) {
              throw new Error("Invalid type \"".concat(expansion.i18n.constructor, "\" for \"i18n\" property of ").concat(expansion.sourceSpan.toString(), ". Expected a \"Message\""));
            }

            var message = expansion.i18n;
            var vars = {};
            var placeholders = {}; // extract VARs from ICUs - we process them separately while
            // assembling resulting message via goog.getMsg function, since
            // we need to pass them to top-level goog.getMsg call

            Object.keys(message.placeholders).forEach(function (key) {
              var value = message.placeholders[key];

              if (key.startsWith(I18N_ICU_VAR_PREFIX)) {
                // Currently when the `plural` or `select` keywords in an ICU contain trailing spaces (e.g.
                // `{count, select , ...}`), these spaces are also included into the key names in ICU vars
                // (e.g. "VAR_SELECT "). These trailing spaces are not desirable, since they will later be
                // converted into `_` symbols while normalizing placeholder names, which might lead to
                // mismatches at runtime (i.e. placeholder will not be replaced with the correct value).
                var formattedKey = key.trim();

                var ast = _this288.bindingParser.parseInterpolationExpression(value.text, value.sourceSpan);

                vars[formattedKey] = new BoundText(ast, value.sourceSpan);
              } else {
                placeholders[key] = _this288._visitTextWithInterpolation(value.text, value.sourceSpan);
              }
            });
            return new Icu(vars, placeholders, expansion.sourceSpan, message);
          }
        }, {
          key: "visitExpansionCase",
          value: function visitExpansionCase(expansionCase) {
            return null;
          }
        }, {
          key: "visitComment",
          value: function visitComment(comment) {
            return null;
          } // convert view engine `ParsedProperty` to a format suitable for IVY

        }, {
          key: "extractAttributes",
          value: function extractAttributes(elementName, properties, i18nPropsMeta) {
            var _this289 = this;

            var bound = [];
            var literal = [];
            properties.forEach(function (prop) {
              var i18n = i18nPropsMeta[prop.name];

              if (prop.isLiteral) {
                literal.push(new TextAttribute(prop.name, prop.expression.source || '', prop.sourceSpan, prop.keySpan, prop.valueSpan, i18n));
              } else {
                // Note that validation is skipped and property mapping is disabled
                // due to the fact that we need to make sure a given prop is not an
                // input of a directive and directive matching happens at runtime.
                var bep = _this289.bindingParser.createBoundElementProperty(elementName, prop,
                /* skipValidation */
                true,
                /* mapPropertyName */
                false);

                bound.push(BoundAttribute.fromBoundElementProperty(bep, i18n));
              }
            });
            return {
              bound: bound,
              literal: literal
            };
          }
        }, {
          key: "parseAttribute",
          value: function parseAttribute(isTemplateElement, attribute, matchableAttributes, parsedProperties, boundEvents, variables, references) {
            var name = normalizeAttributeName(attribute.name);
            var value = attribute.value;
            var srcSpan = attribute.sourceSpan;
            var absoluteOffset = attribute.valueSpan ? attribute.valueSpan.start.offset : srcSpan.start.offset;

            function createKeySpan(srcSpan, prefix, identifier) {
              // We need to adjust the start location for the keySpan to account for the removed 'data-'
              // prefix from `normalizeAttributeName`.
              var normalizationAdjustment = attribute.name.length - name.length;
              var keySpanStart = srcSpan.start.moveBy(prefix.length + normalizationAdjustment);
              var keySpanEnd = keySpanStart.moveBy(identifier.length);
              return new ParseSourceSpan(keySpanStart, keySpanEnd, keySpanStart, identifier);
            }

            var bindParts = name.match(BIND_NAME_REGEXP$1);

            if (bindParts) {
              if (bindParts[KW_BIND_IDX$1] != null) {
                var identifier = bindParts[IDENT_KW_IDX$1];

                var _keySpan = createKeySpan(srcSpan, bindParts[KW_BIND_IDX$1], identifier);

                this.bindingParser.parsePropertyBinding(identifier, value, false, srcSpan, absoluteOffset, attribute.valueSpan, matchableAttributes, parsedProperties, _keySpan);
              } else if (bindParts[KW_LET_IDX$1]) {
                if (isTemplateElement) {
                  var _identifier2 = bindParts[IDENT_KW_IDX$1];

                  var _keySpan2 = createKeySpan(srcSpan, bindParts[KW_LET_IDX$1], _identifier2);

                  this.parseVariable(_identifier2, value, srcSpan, _keySpan2, attribute.valueSpan, variables);
                } else {
                  this.reportError("\"let-\" is only supported on ng-template elements.", srcSpan);
                }
              } else if (bindParts[KW_REF_IDX$1]) {
                var _identifier3 = bindParts[IDENT_KW_IDX$1];

                var _keySpan3 = createKeySpan(srcSpan, bindParts[KW_REF_IDX$1], _identifier3);

                this.parseReference(_identifier3, value, srcSpan, _keySpan3, attribute.valueSpan, references);
              } else if (bindParts[KW_ON_IDX$1]) {
                var events = [];
                var _identifier4 = bindParts[IDENT_KW_IDX$1];

                var _keySpan4 = createKeySpan(srcSpan, bindParts[KW_ON_IDX$1], _identifier4);

                this.bindingParser.parseEvent(_identifier4, value, srcSpan, attribute.valueSpan || srcSpan, matchableAttributes, events, _keySpan4);
                addEvents(events, boundEvents);
              } else if (bindParts[KW_BINDON_IDX$1]) {
                var _identifier5 = bindParts[IDENT_KW_IDX$1];

                var _keySpan5 = createKeySpan(srcSpan, bindParts[KW_BINDON_IDX$1], _identifier5);

                this.bindingParser.parsePropertyBinding(_identifier5, value, false, srcSpan, absoluteOffset, attribute.valueSpan, matchableAttributes, parsedProperties, _keySpan5);
                this.parseAssignmentEvent(_identifier5, value, srcSpan, attribute.valueSpan, matchableAttributes, boundEvents, _keySpan5);
              } else if (bindParts[KW_AT_IDX$1]) {
                var _keySpan6 = createKeySpan(srcSpan, '', name);

                this.bindingParser.parseLiteralAttr(name, value, srcSpan, absoluteOffset, attribute.valueSpan, matchableAttributes, parsedProperties, _keySpan6);
              }

              return true;
            } // We didn't see a kw-prefixed property binding, but we have not yet checked
            // for the []/()/[()] syntax.


            var delims = null;

            if (name.startsWith(BINDING_DELIMS.BANANA_BOX.start)) {
              delims = BINDING_DELIMS.BANANA_BOX;
            } else if (name.startsWith(BINDING_DELIMS.PROPERTY.start)) {
              delims = BINDING_DELIMS.PROPERTY;
            } else if (name.startsWith(BINDING_DELIMS.EVENT.start)) {
              delims = BINDING_DELIMS.EVENT;
            }

            if (delims !== null && // NOTE: older versions of the parser would match a start/end delimited
            // binding iff the property name was terminated by the ending delimiter
            // and the identifier in the binding was non-empty.
            // TODO(ayazhafiz): update this to handle malformed bindings.
            name.endsWith(delims.end) && name.length > delims.start.length + delims.end.length) {
              var _identifier6 = name.substring(delims.start.length, name.length - delims.end.length);

              var _keySpan7 = createKeySpan(srcSpan, delims.start, _identifier6);

              if (delims.start === BINDING_DELIMS.BANANA_BOX.start) {
                this.bindingParser.parsePropertyBinding(_identifier6, value, false, srcSpan, absoluteOffset, attribute.valueSpan, matchableAttributes, parsedProperties, _keySpan7);
                this.parseAssignmentEvent(_identifier6, value, srcSpan, attribute.valueSpan, matchableAttributes, boundEvents, _keySpan7);
              } else if (delims.start === BINDING_DELIMS.PROPERTY.start) {
                this.bindingParser.parsePropertyBinding(_identifier6, value, false, srcSpan, absoluteOffset, attribute.valueSpan, matchableAttributes, parsedProperties, _keySpan7);
              } else {
                var _events2 = [];
                this.bindingParser.parseEvent(_identifier6, value, srcSpan, attribute.valueSpan || srcSpan, matchableAttributes, _events2, _keySpan7);
                addEvents(_events2, boundEvents);
              }

              return true;
            } // No explicit binding found.


            var keySpan = createKeySpan(srcSpan, ''
            /* prefix */
            , name);
            var hasBinding = this.bindingParser.parsePropertyInterpolation(name, value, srcSpan, attribute.valueSpan, matchableAttributes, parsedProperties, keySpan);
            return hasBinding;
          }
        }, {
          key: "_visitTextWithInterpolation",
          value: function _visitTextWithInterpolation(value, sourceSpan, i18n) {
            var valueNoNgsp = replaceNgsp(value);
            var expr = this.bindingParser.parseInterpolation(valueNoNgsp, sourceSpan);
            return expr ? new BoundText(expr, sourceSpan, i18n) : new Text(valueNoNgsp, sourceSpan);
          }
        }, {
          key: "parseVariable",
          value: function parseVariable(identifier, value, sourceSpan, keySpan, valueSpan, variables) {
            if (identifier.indexOf('-') > -1) {
              this.reportError("\"-\" is not allowed in variable names", sourceSpan);
            } else if (identifier.length === 0) {
              this.reportError("Variable does not have a name", sourceSpan);
            }

            variables.push(new Variable(identifier, value, sourceSpan, keySpan, valueSpan));
          }
        }, {
          key: "parseReference",
          value: function parseReference(identifier, value, sourceSpan, keySpan, valueSpan, references) {
            if (identifier.indexOf('-') > -1) {
              this.reportError("\"-\" is not allowed in reference names", sourceSpan);
            } else if (identifier.length === 0) {
              this.reportError("Reference does not have a name", sourceSpan);
            } else if (references.some(function (reference) {
              return reference.name === identifier;
            })) {
              this.reportError("Reference \"#".concat(identifier, "\" is defined more than once"), sourceSpan);
            }

            references.push(new Reference(identifier, value, sourceSpan, keySpan, valueSpan));
          }
        }, {
          key: "parseAssignmentEvent",
          value: function parseAssignmentEvent(name, expression, sourceSpan, valueSpan, targetMatchableAttrs, boundEvents, keySpan) {
            var events = [];
            this.bindingParser.parseEvent("".concat(name, "Change"), "".concat(expression, "=$event"), sourceSpan, valueSpan || sourceSpan, targetMatchableAttrs, events, keySpan);
            addEvents(events, boundEvents);
          }
        }, {
          key: "reportError",
          value: function reportError(message, sourceSpan) {
            var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ParseErrorLevel.ERROR;
            this.errors.push(new ParseError(sourceSpan, message, level));
          }
        }]);

        return HtmlAstToIvyAst;
      }();

      var NonBindableVisitor$1 = /*#__PURE__*/function () {
        function NonBindableVisitor$1() {
          _classCallCheck2(this, NonBindableVisitor$1);
        }

        _createClass2(NonBindableVisitor$1, [{
          key: "visitElement",
          value: function visitElement(ast) {
            var preparsedElement = preparseElement(ast);

            if (preparsedElement.type === PreparsedElementType.SCRIPT || preparsedElement.type === PreparsedElementType.STYLE || preparsedElement.type === PreparsedElementType.STYLESHEET) {
              // Skipping <script> for security reasons
              // Skipping <style> and stylesheets as we already processed them
              // in the StyleCompiler
              return null;
            }

            var children = visitAll$1(this, ast.children, null);
            return new Element(ast.name, visitAll$1(this, ast.attrs),
            /* inputs */
            [],
            /* outputs */
            [], children,
            /* references */
            [], ast.sourceSpan, ast.startSourceSpan, ast.endSourceSpan);
          }
        }, {
          key: "visitComment",
          value: function visitComment(comment) {
            return null;
          }
        }, {
          key: "visitAttribute",
          value: function visitAttribute(attribute) {
            return new TextAttribute(attribute.name, attribute.value, attribute.sourceSpan, attribute.keySpan, attribute.valueSpan, attribute.i18n);
          }
        }, {
          key: "visitText",
          value: function visitText(text) {
            return new Text(text.value, text.sourceSpan);
          }
        }, {
          key: "visitExpansion",
          value: function visitExpansion(expansion) {
            return null;
          }
        }, {
          key: "visitExpansionCase",
          value: function visitExpansionCase(expansionCase) {
            return null;
          }
        }]);

        return NonBindableVisitor$1;
      }();

      var NON_BINDABLE_VISITOR$1 = new NonBindableVisitor$1();

      function normalizeAttributeName(attrName) {
        return /^data-/i.test(attrName) ? attrName.substring(5) : attrName;
      }

      function addEvents(events, boundEvents) {
        boundEvents.push.apply(boundEvents, _toConsumableArray(events.map(function (e) {
          return BoundEvent.fromParsedEvent(e);
        })));
      }

      function isEmptyTextNode(node) {
        return node instanceof Text$3 && node.value.trim().length == 0;
      }

      function isCommentNode(node) {
        return node instanceof Comment;
      }

      function textContents(node) {
        if (node.children.length !== 1 || !(node.children[0] instanceof Text$3)) {
          return null;
        } else {
          return node.children[0].value;
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var TagType;

      (function (TagType) {
        TagType[TagType["ELEMENT"] = 0] = "ELEMENT";
        TagType[TagType["TEMPLATE"] = 1] = "TEMPLATE";
      })(TagType || (TagType = {}));
      /**
       * Generates an object that is used as a shared state between parent and all child contexts.
       */


      function setupRegistry() {
        return {
          getUniqueId: getSeqNumberGenerator(),
          icus: new Map()
        };
      }
      /**
       * I18nContext is a helper class which keeps track of all i18n-related aspects
       * (accumulates placeholders, bindings, etc) between i18nStart and i18nEnd instructions.
       *
       * When we enter a nested template, the top-level context is being passed down
       * to the nested component, which uses this context to generate a child instance
       * of I18nContext class (to handle nested template) and at the end, reconciles it back
       * with the parent context.
       *
       * @param index Instruction index of i18nStart, which initiates this context
       * @param ref Reference to a translation const that represents the content if thus context
       * @param level Nestng level defined for child contexts
       * @param templateIndex Instruction index of a template which this context belongs to
       * @param meta Meta information (id, meaning, description, etc) associated with this context
       */


      var I18nContext = /*#__PURE__*/function () {
        function I18nContext(index, ref) {
          var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
          var templateIndex = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
          var meta = arguments.length > 4 ? arguments[4] : undefined;
          var registry = arguments.length > 5 ? arguments[5] : undefined;

          _classCallCheck2(this, I18nContext);

          this.index = index;
          this.ref = ref;
          this.level = level;
          this.templateIndex = templateIndex;
          this.meta = meta;
          this.registry = registry;
          this.bindings = new Set();
          this.placeholders = new Map();
          this.isEmitted = false;
          this._unresolvedCtxCount = 0;
          this._registry = registry || setupRegistry();
          this.id = this._registry.getUniqueId();
        }

        _createClass2(I18nContext, [{
          key: "appendTag",
          value: function appendTag(type, node, index, closed) {
            if (node.isVoid && closed) {
              return; // ignore "close" for void tags
            }

            var ph = node.isVoid || !closed ? node.startName : node.closeName;
            var content = {
              type: type,
              index: index,
              ctx: this.id,
              isVoid: node.isVoid,
              closed: closed
            };
            updatePlaceholderMap(this.placeholders, ph, content);
          }
        }, {
          key: "icus",
          get: function get() {
            return this._registry.icus;
          }
        }, {
          key: "isRoot",
          get: function get() {
            return this.level === 0;
          }
        }, {
          key: "isResolved",
          get: function get() {
            return this._unresolvedCtxCount === 0;
          }
        }, {
          key: "getSerializedPlaceholders",
          value: function getSerializedPlaceholders() {
            var result = new Map();
            this.placeholders.forEach(function (values, key) {
              return result.set(key, values.map(serializePlaceholderValue));
            });
            return result;
          } // public API to accumulate i18n-related content

        }, {
          key: "appendBinding",
          value: function appendBinding(binding) {
            this.bindings.add(binding);
          }
        }, {
          key: "appendIcu",
          value: function appendIcu(name, ref) {
            updatePlaceholderMap(this._registry.icus, name, ref);
          }
        }, {
          key: "appendBoundText",
          value: function appendBoundText(node) {
            var _this290 = this;

            var phs = assembleBoundTextPlaceholders(node, this.bindings.size, this.id);
            phs.forEach(function (values, key) {
              return updatePlaceholderMap.apply(void 0, [_this290.placeholders, key].concat(_toConsumableArray(values)));
            });
          }
        }, {
          key: "appendTemplate",
          value: function appendTemplate(node, index) {
            // add open and close tags at the same time,
            // since we process nested templates separately
            this.appendTag(TagType.TEMPLATE, node, index, false);
            this.appendTag(TagType.TEMPLATE, node, index, true);
            this._unresolvedCtxCount++;
          }
        }, {
          key: "appendElement",
          value: function appendElement(node, index, closed) {
            this.appendTag(TagType.ELEMENT, node, index, closed);
          }
        }, {
          key: "appendProjection",
          value: function appendProjection(node, index) {
            // Add open and close tags at the same time, since `<ng-content>` has no content,
            // so when we come across `<ng-content>` we can register both open and close tags.
            // Note: runtime i18n logic doesn't distinguish `<ng-content>` tag placeholders and
            // regular element tag placeholders, so we generate element placeholders for both types.
            this.appendTag(TagType.ELEMENT, node, index, false);
            this.appendTag(TagType.ELEMENT, node, index, true);
          }
          /**
           * Generates an instance of a child context based on the root one,
           * when we enter a nested template within I18n section.
           *
           * @param index Instruction index of corresponding i18nStart, which initiates this context
           * @param templateIndex Instruction index of a template which this context belongs to
           * @param meta Meta information (id, meaning, description, etc) associated with this context
           *
           * @returns I18nContext instance
           */

        }, {
          key: "forkChildContext",
          value: function forkChildContext(index, templateIndex, meta) {
            return new I18nContext(index, this.ref, this.level + 1, templateIndex, meta, this._registry);
          }
          /**
           * Reconciles child context into parent one once the end of the i18n block is reached (i18nEnd).
           *
           * @param context Child I18nContext instance to be reconciled with parent context.
           */

        }, {
          key: "reconcileChildContext",
          value: function reconcileChildContext(context) {
            var _this291 = this;

            // set the right context id for open and close
            // template tags, so we can use it as sub-block ids
            ['start', 'close'].forEach(function (op) {
              var key = context.meta["".concat(op, "Name")];
              var phs = _this291.placeholders.get(key) || [];
              var tag = phs.find(findTemplateFn(_this291.id, context.templateIndex));

              if (tag) {
                tag.ctx = context.id;
              }
            }); // reconcile placeholders

            var childPhs = context.placeholders;
            childPhs.forEach(function (values, key) {
              var phs = _this291.placeholders.get(key);

              if (!phs) {
                _this291.placeholders.set(key, values);

                return;
              } // try to find matching template...


              var tmplIdx = phs.findIndex(findTemplateFn(context.id, context.templateIndex));

              if (tmplIdx >= 0) {
                // ... if found - replace it with nested template content
                var isCloseTag = key.startsWith('CLOSE');
                var isTemplateTag = key.endsWith('NG-TEMPLATE');

                if (isTemplateTag) {
                  // current template's content is placed before or after
                  // parent template tag, depending on the open/close atrribute
                  phs.splice.apply(phs, [tmplIdx + (isCloseTag ? 0 : 1), 0].concat(_toConsumableArray(values)));
                } else {
                  var idx = isCloseTag ? values.length - 1 : 0;
                  values[idx].tmpl = phs[tmplIdx];
                  phs.splice.apply(phs, [tmplIdx, 1].concat(_toConsumableArray(values)));
                }
              } else {
                // ... otherwise just append content to placeholder value
                phs.push.apply(phs, _toConsumableArray(values));
              }

              _this291.placeholders.set(key, phs);
            });
            this._unresolvedCtxCount--;
          }
        }]);

        return I18nContext;
      }(); //
      // Helper methods
      //


      function wrap(symbol, index, contextId, closed) {
        var state = closed ? '/' : '';
        return wrapI18nPlaceholder("".concat(state).concat(symbol).concat(index), contextId);
      }

      function wrapTag(symbol, _ref68, closed) {
        var index = _ref68.index,
            ctx = _ref68.ctx,
            isVoid = _ref68.isVoid;
        return isVoid ? wrap(symbol, index, ctx) + wrap(symbol, index, ctx, true) : wrap(symbol, index, ctx, closed);
      }

      function findTemplateFn(ctx, templateIndex) {
        return function (token) {
          return typeof token === 'object' && token.type === TagType.TEMPLATE && token.index === templateIndex && token.ctx === ctx;
        };
      }

      function serializePlaceholderValue(value) {
        var element = function element(data, closed) {
          return wrapTag('#', data, closed);
        };

        var template = function template(data, closed) {
          return wrapTag('*', data, closed);
        };

        var projection = function projection(data, closed) {
          return wrapTag('!', data, closed);
        };

        switch (value.type) {
          case TagType.ELEMENT:
            // close element tag
            if (value.closed) {
              return element(value, true) + (value.tmpl ? template(value.tmpl, true) : '');
            } // open element tag that also initiates a template


            if (value.tmpl) {
              return template(value.tmpl) + element(value) + (value.isVoid ? template(value.tmpl, true) : '');
            }

            return element(value);

          case TagType.TEMPLATE:
            return template(value, value.closed);

          default:
            return value;
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var IcuSerializerVisitor = /*#__PURE__*/function () {
        function IcuSerializerVisitor() {
          _classCallCheck2(this, IcuSerializerVisitor);
        }

        _createClass2(IcuSerializerVisitor, [{
          key: "visitText",
          value: function visitText(text) {
            return text.value;
          }
        }, {
          key: "visitContainer",
          value: function visitContainer(container) {
            var _this292 = this;

            return container.children.map(function (child) {
              return child.visit(_this292);
            }).join('');
          }
        }, {
          key: "visitIcu",
          value: function visitIcu(icu) {
            var _this293 = this;

            var strCases = Object.keys(icu.cases).map(function (k) {
              return "".concat(k, " {").concat(icu.cases[k].visit(_this293), "}");
            });
            var result = "{".concat(icu.expressionPlaceholder, ", ").concat(icu.type, ", ").concat(strCases.join(' '), "}");
            return result;
          }
        }, {
          key: "visitTagPlaceholder",
          value: function visitTagPlaceholder(ph) {
            var _this294 = this;

            return ph.isVoid ? this.formatPh(ph.startName) : "".concat(this.formatPh(ph.startName)).concat(ph.children.map(function (child) {
              return child.visit(_this294);
            }).join('')).concat(this.formatPh(ph.closeName));
          }
        }, {
          key: "visitPlaceholder",
          value: function visitPlaceholder(ph) {
            return this.formatPh(ph.name);
          }
        }, {
          key: "visitIcuPlaceholder",
          value: function visitIcuPlaceholder(ph, context) {
            return this.formatPh(ph.name);
          }
        }, {
          key: "formatPh",
          value: function formatPh(value) {
            return "{".concat(formatI18nPlaceholderName(value,
            /* useCamelCase */
            false), "}");
          }
        }]);

        return IcuSerializerVisitor;
      }();

      var serializer = new IcuSerializerVisitor();

      function serializeIcuNode(icu) {
        return icu.visit(serializer);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var TAG_TO_PLACEHOLDER_NAMES = {
        'A': 'LINK',
        'B': 'BOLD_TEXT',
        'BR': 'LINE_BREAK',
        'EM': 'EMPHASISED_TEXT',
        'H1': 'HEADING_LEVEL1',
        'H2': 'HEADING_LEVEL2',
        'H3': 'HEADING_LEVEL3',
        'H4': 'HEADING_LEVEL4',
        'H5': 'HEADING_LEVEL5',
        'H6': 'HEADING_LEVEL6',
        'HR': 'HORIZONTAL_RULE',
        'I': 'ITALIC_TEXT',
        'LI': 'LIST_ITEM',
        'LINK': 'MEDIA_LINK',
        'OL': 'ORDERED_LIST',
        'P': 'PARAGRAPH',
        'Q': 'QUOTATION',
        'S': 'STRIKETHROUGH_TEXT',
        'SMALL': 'SMALL_TEXT',
        'SUB': 'SUBSTRIPT',
        'SUP': 'SUPERSCRIPT',
        'TBODY': 'TABLE_BODY',
        'TD': 'TABLE_CELL',
        'TFOOT': 'TABLE_FOOTER',
        'TH': 'TABLE_HEADER_CELL',
        'THEAD': 'TABLE_HEADER',
        'TR': 'TABLE_ROW',
        'TT': 'MONOSPACED_TEXT',
        'U': 'UNDERLINED_TEXT',
        'UL': 'UNORDERED_LIST'
      };
      /**
       * Creates unique names for placeholder with different content.
       *
       * Returns the same placeholder name when the content is identical.
       */

      var PlaceholderRegistry = /*#__PURE__*/function () {
        function PlaceholderRegistry() {
          _classCallCheck2(this, PlaceholderRegistry);

          // Count the occurrence of the base name top generate a unique name
          this._placeHolderNameCounts = {}; // Maps signature to placeholder names

          this._signatureToName = {};
        }

        _createClass2(PlaceholderRegistry, [{
          key: "getStartTagPlaceholderName",
          value: function getStartTagPlaceholderName(tag, attrs, isVoid) {
            var signature = this._hashTag(tag, attrs, isVoid);

            if (this._signatureToName[signature]) {
              return this._signatureToName[signature];
            }

            var upperTag = tag.toUpperCase();
            var baseName = TAG_TO_PLACEHOLDER_NAMES[upperTag] || "TAG_".concat(upperTag);

            var name = this._generateUniqueName(isVoid ? baseName : "START_".concat(baseName));

            this._signatureToName[signature] = name;
            return name;
          }
        }, {
          key: "getCloseTagPlaceholderName",
          value: function getCloseTagPlaceholderName(tag) {
            var signature = this._hashClosingTag(tag);

            if (this._signatureToName[signature]) {
              return this._signatureToName[signature];
            }

            var upperTag = tag.toUpperCase();
            var baseName = TAG_TO_PLACEHOLDER_NAMES[upperTag] || "TAG_".concat(upperTag);

            var name = this._generateUniqueName("CLOSE_".concat(baseName));

            this._signatureToName[signature] = name;
            return name;
          }
        }, {
          key: "getPlaceholderName",
          value: function getPlaceholderName(name, content) {
            var upperName = name.toUpperCase();
            var signature = "PH: ".concat(upperName, "=").concat(content);

            if (this._signatureToName[signature]) {
              return this._signatureToName[signature];
            }

            var uniqueName = this._generateUniqueName(upperName);

            this._signatureToName[signature] = uniqueName;
            return uniqueName;
          }
        }, {
          key: "getUniquePlaceholder",
          value: function getUniquePlaceholder(name) {
            return this._generateUniqueName(name.toUpperCase());
          } // Generate a hash for a tag - does not take attribute order into account

        }, {
          key: "_hashTag",
          value: function _hashTag(tag, attrs, isVoid) {
            var start = "<".concat(tag);
            var strAttrs = Object.keys(attrs).sort().map(function (name) {
              return " ".concat(name, "=").concat(attrs[name]);
            }).join('');
            var end = isVoid ? '/>' : "></".concat(tag, ">");
            return start + strAttrs + end;
          }
        }, {
          key: "_hashClosingTag",
          value: function _hashClosingTag(tag) {
            return this._hashTag("/".concat(tag), {}, false);
          }
        }, {
          key: "_generateUniqueName",
          value: function _generateUniqueName(base) {
            var seen = this._placeHolderNameCounts.hasOwnProperty(base);

            if (!seen) {
              this._placeHolderNameCounts[base] = 1;
              return base;
            }

            var id = this._placeHolderNameCounts[base];
            this._placeHolderNameCounts[base] = id + 1;
            return "".concat(base, "_").concat(id);
          }
        }]);

        return PlaceholderRegistry;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var _expParser = new Parser$1(new Lexer());
      /**
       * Returns a function converting html nodes to an i18n Message given an interpolationConfig
       */


      function createI18nMessageFactory(interpolationConfig) {
        var visitor = new _I18nVisitor(_expParser, interpolationConfig);
        return function (nodes, meaning, description, customId, visitNodeFn) {
          return visitor.toI18nMessage(nodes, meaning, description, customId, visitNodeFn);
        };
      }

      function noopVisitNodeFn(_html, i18n) {
        return i18n;
      }

      var _I18nVisitor = /*#__PURE__*/function () {
        function _I18nVisitor(_expressionParser, _interpolationConfig) {
          _classCallCheck2(this, _I18nVisitor);

          this._expressionParser = _expressionParser;
          this._interpolationConfig = _interpolationConfig;
        }

        _createClass2(_I18nVisitor, [{
          key: "toI18nMessage",
          value: function toI18nMessage(nodes) {
            var meaning = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
            var description = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
            var customId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
            var visitNodeFn = arguments.length > 4 ? arguments[4] : undefined;
            var context = {
              isIcu: nodes.length == 1 && nodes[0] instanceof Expansion,
              icuDepth: 0,
              placeholderRegistry: new PlaceholderRegistry(),
              placeholderToContent: {},
              placeholderToMessage: {},
              visitNodeFn: visitNodeFn || noopVisitNodeFn
            };
            var i18nodes = visitAll$1(this, nodes, context);
            return new Message(i18nodes, context.placeholderToContent, context.placeholderToMessage, meaning, description, customId);
          }
        }, {
          key: "visitElement",
          value: function visitElement(el, context) {
            var _a;

            var children = visitAll$1(this, el.children, context);
            var attrs = {};
            el.attrs.forEach(function (attr) {
              // Do not visit the attributes, translatable ones are top-level ASTs
              attrs[attr.name] = attr.value;
            });
            var isVoid = getHtmlTagDefinition(el.name).isVoid;
            var startPhName = context.placeholderRegistry.getStartTagPlaceholderName(el.name, attrs, isVoid);
            context.placeholderToContent[startPhName] = {
              text: el.startSourceSpan.toString(),
              sourceSpan: el.startSourceSpan
            };
            var closePhName = '';

            if (!isVoid) {
              closePhName = context.placeholderRegistry.getCloseTagPlaceholderName(el.name);
              context.placeholderToContent[closePhName] = {
                text: "</".concat(el.name, ">"),
                sourceSpan: (_a = el.endSourceSpan) !== null && _a !== void 0 ? _a : el.sourceSpan
              };
            }

            var node = new TagPlaceholder(el.name, attrs, startPhName, closePhName, children, isVoid, el.sourceSpan, el.startSourceSpan, el.endSourceSpan);
            return context.visitNodeFn(el, node);
          }
        }, {
          key: "visitAttribute",
          value: function visitAttribute(attribute, context) {
            var node = this._visitTextWithInterpolation(attribute.value, attribute.valueSpan || attribute.sourceSpan, context, attribute.i18n);

            return context.visitNodeFn(attribute, node);
          }
        }, {
          key: "visitText",
          value: function visitText(text, context) {
            var node = this._visitTextWithInterpolation(text.value, text.sourceSpan, context, text.i18n);

            return context.visitNodeFn(text, node);
          }
        }, {
          key: "visitComment",
          value: function visitComment(comment, context) {
            return null;
          }
        }, {
          key: "visitExpansion",
          value: function visitExpansion(icu, context) {
            var _this295 = this;

            context.icuDepth++;
            var i18nIcuCases = {};
            var i18nIcu = new Icu$1(icu.switchValue, icu.type, i18nIcuCases, icu.sourceSpan);
            icu.cases.forEach(function (caze) {
              i18nIcuCases[caze.value] = new Container(caze.expression.map(function (node) {
                return node.visit(_this295, context);
              }), caze.expSourceSpan);
            });
            context.icuDepth--;

            if (context.isIcu || context.icuDepth > 0) {
              // Returns an ICU node when:
              // - the message (vs a part of the message) is an ICU message, or
              // - the ICU message is nested.
              var expPh = context.placeholderRegistry.getUniquePlaceholder("VAR_".concat(icu.type));
              i18nIcu.expressionPlaceholder = expPh;
              context.placeholderToContent[expPh] = {
                text: icu.switchValue,
                sourceSpan: icu.switchValueSourceSpan
              };
              return context.visitNodeFn(icu, i18nIcu);
            } // Else returns a placeholder
            // ICU placeholders should not be replaced with their original content but with the their
            // translations.
            // TODO(vicb): add a html.Node -> i18n.Message cache to avoid having to re-create the msg


            var phName = context.placeholderRegistry.getPlaceholderName('ICU', icu.sourceSpan.toString());
            context.placeholderToMessage[phName] = this.toI18nMessage([icu], '', '', '', undefined);
            var node = new IcuPlaceholder(i18nIcu, phName, icu.sourceSpan);
            return context.visitNodeFn(icu, node);
          }
        }, {
          key: "visitExpansionCase",
          value: function visitExpansionCase(_icuCase, _context) {
            throw new Error('Unreachable code');
          }
          /**
           * Split the, potentially interpolated, text up into text and placeholder pieces.
           *
           * @param text The potentially interpolated string to be split.
           * @param sourceSpan The span of the whole of the `text` string.
           * @param context The current context of the visitor, used to compute and store placeholders.
           * @param previousI18n Any i18n metadata associated with this `text` from a previous pass.
           */

        }, {
          key: "_visitTextWithInterpolation",
          value: function _visitTextWithInterpolation(text, sourceSpan, context, previousI18n) {
            var _this$_expressionPars = this._expressionParser.splitInterpolation(text, sourceSpan.start.toString(), this._interpolationConfig),
                strings = _this$_expressionPars.strings,
                expressions = _this$_expressionPars.expressions; // No expressions, return a single text.


            if (expressions.length === 0) {
              return new Text$1(text, sourceSpan);
            } // Return a sequence of `Text` and `Placeholder` nodes grouped in a `Container`.


            var nodes = [];

            for (var i = 0; i < strings.length - 1; i++) {
              this._addText(nodes, strings[i], sourceSpan);

              this._addPlaceholder(nodes, context, expressions[i], sourceSpan);
            } // The last index contains no expression


            this._addText(nodes, strings[strings.length - 1], sourceSpan); // Whitespace removal may have invalidated the interpolation source-spans.


            reusePreviousSourceSpans(nodes, previousI18n);
            return new Container(nodes, sourceSpan);
          }
          /**
           * Create a new `Text` node from the `textPiece` and add it to the `nodes` collection.
           *
           * @param nodes The nodes to which the created `Text` node should be added.
           * @param textPiece The text and relative span information for this `Text` node.
           * @param interpolationSpan The span of the whole interpolated text.
           */

        }, {
          key: "_addText",
          value: function _addText(nodes, textPiece, interpolationSpan) {
            if (textPiece.text.length > 0) {
              // No need to add empty strings
              var stringSpan = getOffsetSourceSpan(interpolationSpan, textPiece);
              nodes.push(new Text$1(textPiece.text, stringSpan));
            }
          }
          /**
           * Create a new `Placeholder` node from the `expression` and add it to the `nodes` collection.
           *
           * @param nodes The nodes to which the created `Text` node should be added.
           * @param context The current context of the visitor, used to compute and store placeholders.
           * @param expression The expression text and relative span information for this `Placeholder`
           *     node.
           * @param interpolationSpan The span of the whole interpolated text.
           */

        }, {
          key: "_addPlaceholder",
          value: function _addPlaceholder(nodes, context, expression, interpolationSpan) {
            var sourceSpan = getOffsetSourceSpan(interpolationSpan, expression);
            var baseName = extractPlaceholderName(expression.text) || 'INTERPOLATION';
            var phName = context.placeholderRegistry.getPlaceholderName(baseName, expression.text);
            var text = this._interpolationConfig.start + expression.text + this._interpolationConfig.end;
            context.placeholderToContent[phName] = {
              text: text,
              sourceSpan: sourceSpan
            };
            nodes.push(new Placeholder(expression.text, phName, sourceSpan));
          }
        }]);

        return _I18nVisitor;
      }();
      /**
       * Re-use the source-spans from `previousI18n` metadata for the `nodes`.
       *
       * Whitespace removal can invalidate the source-spans of interpolation nodes, so we
       * reuse the source-span stored from a previous pass before the whitespace was removed.
       *
       * @param nodes The `Text` and `Placeholder` nodes to be processed.
       * @param previousI18n Any i18n metadata for these `nodes` stored from a previous pass.
       */


      function reusePreviousSourceSpans(nodes, previousI18n) {
        if (previousI18n instanceof Message) {
          // The `previousI18n` is an i18n `Message`, so we are processing an `Attribute` with i18n
          // metadata. The `Message` should consist only of a single `Container` that contains the
          // parts (`Text` and `Placeholder`) to process.
          assertSingleContainerMessage(previousI18n);
          previousI18n = previousI18n.nodes[0];
        }

        if (previousI18n instanceof Container) {
          // The `previousI18n` is a `Container`, which means that this is a second i18n extraction pass
          // after whitespace has been removed from the AST ndoes.
          assertEquivalentNodes(previousI18n.children, nodes); // Reuse the source-spans from the first pass.

          for (var i = 0; i < nodes.length; i++) {
            nodes[i].sourceSpan = previousI18n.children[i].sourceSpan;
          }
        }
      }
      /**
       * Asserts that the `message` contains exactly one `Container` node.
       */


      function assertSingleContainerMessage(message) {
        var nodes = message.nodes;

        if (nodes.length !== 1 || !(nodes[0] instanceof Container)) {
          throw new Error('Unexpected previous i18n message - expected it to consist of only a single `Container` node.');
        }
      }
      /**
       * Asserts that the `previousNodes` and `node` collections have the same number of elements and
       * corresponding elements have the same node type.
       */


      function assertEquivalentNodes(previousNodes, nodes) {
        if (previousNodes.length !== nodes.length) {
          throw new Error('The number of i18n message children changed between first and second pass.');
        }

        if (previousNodes.some(function (node, i) {
          return nodes[i].constructor !== node.constructor;
        })) {
          throw new Error('The types of the i18n message children changed between first and second pass.');
        }
      }
      /**
       * Create a new `ParseSourceSpan` from the `sourceSpan`, offset by the `start` and `end` values.
       */


      function getOffsetSourceSpan(sourceSpan, _ref69) {
        var start = _ref69.start,
            end = _ref69.end;
        return new ParseSourceSpan(sourceSpan.fullStart.moveBy(start), sourceSpan.fullStart.moveBy(end));
      }

      var _CUSTOM_PH_EXP = /\/\/[\s\S]*i18n[\s\S]*\([\s\S]*ph[\s\S]*=[\s\S]*("|')([\s\S]*?)\1[\s\S]*\)/g;

      function extractPlaceholderName(input) {
        return input.split(_CUSTOM_PH_EXP)[2];
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * An i18n error.
       */


      var I18nError = /*#__PURE__*/function (_ParseError6) {
        _inherits2(I18nError, _ParseError6);

        var _super155 = _createSuper(I18nError);

        function I18nError(span, msg) {
          _classCallCheck2(this, I18nError);

          return _super155.call(this, span, msg);
        }

        return I18nError;
      }(ParseError);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var setI18nRefs = function setI18nRefs(htmlNode, i18nNode) {
        if (htmlNode instanceof NodeWithI18n) {
          if (i18nNode instanceof IcuPlaceholder && htmlNode.i18n instanceof Message) {
            // This html node represents an ICU but this is a second processing pass, and the legacy id
            // was computed in the previous pass and stored in the `i18n` property as a message.
            // We are about to wipe out that property so capture the previous message to be reused when
            // generating the message for this ICU later. See `_generateI18nMessage()`.
            i18nNode.previousMessage = htmlNode.i18n;
          }

          htmlNode.i18n = i18nNode;
        }

        return i18nNode;
      };
      /**
       * This visitor walks over HTML parse tree and converts information stored in
       * i18n-related attributes ("i18n" and "i18n-*") into i18n meta object that is
       * stored with other element's and attribute's information.
       */


      var I18nMetaVisitor = /*#__PURE__*/function () {
        function I18nMetaVisitor() {
          var interpolationConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_INTERPOLATION_CONFIG;
          var keepI18nAttrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
          var enableI18nLegacyMessageIdFormat = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;

          _classCallCheck2(this, I18nMetaVisitor);

          this.interpolationConfig = interpolationConfig;
          this.keepI18nAttrs = keepI18nAttrs;
          this.enableI18nLegacyMessageIdFormat = enableI18nLegacyMessageIdFormat; // whether visited nodes contain i18n information

          this.hasI18nMeta = false;
          this._errors = []; // i18n message generation factory

          this._createI18nMessage = createI18nMessageFactory(this.interpolationConfig);
        }

        _createClass2(I18nMetaVisitor, [{
          key: "_generateI18nMessage",
          value: function _generateI18nMessage(nodes) {
            var meta = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
            var visitNodeFn = arguments.length > 2 ? arguments[2] : undefined;

            var _this$_parseMetadata = this._parseMetadata(meta),
                meaning = _this$_parseMetadata.meaning,
                description = _this$_parseMetadata.description,
                customId = _this$_parseMetadata.customId;

            var message = this._createI18nMessage(nodes, meaning, description, customId, visitNodeFn);

            this._setMessageId(message, meta);

            this._setLegacyIds(message, meta);

            return message;
          }
        }, {
          key: "visitAllWithErrors",
          value: function visitAllWithErrors(nodes) {
            var _this296 = this;

            var result = nodes.map(function (node) {
              return node.visit(_this296, null);
            });
            return new ParseTreeResult(result, this._errors);
          }
        }, {
          key: "visitElement",
          value: function visitElement(element) {
            if (hasI18nAttrs(element)) {
              this.hasI18nMeta = true;
              var attrs = [];
              var attrsMeta = {};

              var _iterator23 = _createForOfIteratorHelper(element.attrs),
                  _step23;

              try {
                for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {
                  var _attr = _step23.value;

                  if (_attr.name === I18N_ATTR) {
                    // root 'i18n' node attribute
                    var i18n = element.i18n || _attr.value;

                    var message = this._generateI18nMessage(element.children, i18n, setI18nRefs); // do not assign empty i18n meta


                    if (message.nodes.length) {
                      element.i18n = message;
                    }
                  } else if (_attr.name.startsWith(I18N_ATTR_PREFIX)) {
                    // 'i18n-*' attributes
                    var name = _attr.name.slice(I18N_ATTR_PREFIX.length);

                    if (isTrustedTypesSink(element.name, name)) {
                      this._reportError(_attr, "Translating attribute '".concat(name, "' is disallowed for security reasons."));
                    } else {
                      attrsMeta[name] = _attr.value;
                    }
                  } else {
                    // non-i18n attributes
                    attrs.push(_attr);
                  }
                } // set i18n meta for attributes

              } catch (err) {
                _iterator23.e(err);
              } finally {
                _iterator23.f();
              }

              if (Object.keys(attrsMeta).length) {
                var _iterator24 = _createForOfIteratorHelper(attrs),
                    _step24;

                try {
                  for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {
                    var attr = _step24.value;
                    var meta = attrsMeta[attr.name]; // do not create translation for empty attributes

                    if (meta !== undefined && attr.value) {
                      attr.i18n = this._generateI18nMessage([attr], attr.i18n || meta);
                    }
                  }
                } catch (err) {
                  _iterator24.e(err);
                } finally {
                  _iterator24.f();
                }
              }

              if (!this.keepI18nAttrs) {
                // update element's attributes,
                // keeping only non-i18n related ones
                element.attrs = attrs;
              }
            }

            visitAll$1(this, element.children, element.i18n);
            return element;
          }
        }, {
          key: "visitExpansion",
          value: function visitExpansion(expansion, currentMessage) {
            var message;
            var meta = expansion.i18n;
            this.hasI18nMeta = true;

            if (meta instanceof IcuPlaceholder) {
              // set ICU placeholder name (e.g. "ICU_1"),
              // generated while processing root element contents,
              // so we can reference it when we output translation
              var name = meta.name;
              message = this._generateI18nMessage([expansion], meta);
              var icu = icuFromI18nMessage(message);
              icu.name = name;
            } else {
              // ICU is a top level message, try to use metadata from container element if provided via
              // `context` argument. Note: context may not be available for standalone ICUs (without
              // wrapping element), so fallback to ICU metadata in this case.
              message = this._generateI18nMessage([expansion], currentMessage || meta);
            }

            expansion.i18n = message;
            return expansion;
          }
        }, {
          key: "visitText",
          value: function visitText(text) {
            return text;
          }
        }, {
          key: "visitAttribute",
          value: function visitAttribute(attribute) {
            return attribute;
          }
        }, {
          key: "visitComment",
          value: function visitComment(comment) {
            return comment;
          }
        }, {
          key: "visitExpansionCase",
          value: function visitExpansionCase(expansionCase) {
            return expansionCase;
          }
          /**
           * Parse the general form `meta` passed into extract the explicit metadata needed to create a
           * `Message`.
           *
           * There are three possibilities for the `meta` variable
           * 1) a string from an `i18n` template attribute: parse it to extract the metadata values.
           * 2) a `Message` from a previous processing pass: reuse the metadata values in the message.
           * 4) other: ignore this and just process the message metadata as normal
           *
           * @param meta the bucket that holds information about the message
           * @returns the parsed metadata.
           */

        }, {
          key: "_parseMetadata",
          value: function _parseMetadata(meta) {
            return typeof meta === 'string' ? parseI18nMeta(meta) : meta instanceof Message ? meta : {};
          }
          /**
           * Generate (or restore) message id if not specified already.
           */

        }, {
          key: "_setMessageId",
          value: function _setMessageId(message, meta) {
            if (!message.id) {
              message.id = meta instanceof Message && meta.id || decimalDigest(message);
            }
          }
          /**
           * Update the `message` with a `legacyId` if necessary.
           *
           * @param message the message whose legacy id should be set
           * @param meta information about the message being processed
           */

        }, {
          key: "_setLegacyIds",
          value: function _setLegacyIds(message, meta) {
            if (this.enableI18nLegacyMessageIdFormat) {
              message.legacyIds = [computeDigest(message), computeDecimalDigest(message)];
            } else if (typeof meta !== 'string') {
              // This occurs if we are doing the 2nd pass after whitespace removal (see `parseTemplate()` in
              // `packages/compiler/src/render3/view/template.ts`).
              // In that case we want to reuse the legacy message generated in the 1st pass (see
              // `setI18nRefs()`).
              var previousMessage = meta instanceof Message ? meta : meta instanceof IcuPlaceholder ? meta.previousMessage : undefined;
              message.legacyIds = previousMessage ? previousMessage.legacyIds : [];
            }
          }
        }, {
          key: "_reportError",
          value: function _reportError(node, msg) {
            this._errors.push(new I18nError(node.sourceSpan, msg));
          }
        }]);

        return I18nMetaVisitor;
      }();
      /** I18n separators for metadata **/


      var I18N_MEANING_SEPARATOR = '|';
      var I18N_ID_SEPARATOR = '@@';
      /**
       * Parses i18n metas like:
       *  - "@@id",
       *  - "description[@@id]",
       *  - "meaning|description[@@id]"
       * and returns an object with parsed output.
       *
       * @param meta String that represents i18n meta
       * @returns Object with id, meaning and description fields
       */

      function parseI18nMeta() {
        var meta = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
        var customId;
        var meaning;
        var description;
        meta = meta.trim();

        if (meta) {
          var idIndex = meta.indexOf(I18N_ID_SEPARATOR);
          var descIndex = meta.indexOf(I18N_MEANING_SEPARATOR);
          var meaningAndDesc;

          var _ref70 = idIndex > -1 ? [meta.slice(0, idIndex), meta.slice(idIndex + 2)] : [meta, ''];

          var _ref71 = _slicedToArray(_ref70, 2);

          meaningAndDesc = _ref71[0];
          customId = _ref71[1];

          var _ref72 = descIndex > -1 ? [meaningAndDesc.slice(0, descIndex), meaningAndDesc.slice(descIndex + 1)] : ['', meaningAndDesc];

          var _ref73 = _slicedToArray(_ref72, 2);

          meaning = _ref73[0];
          description = _ref73[1];
        }

        return {
          customId: customId,
          meaning: meaning,
          description: description
        };
      } // Converts i18n meta information for a message (id, description, meaning)
      // to a JsDoc statement formatted as expected by the Closure compiler.


      function i18nMetaToJSDoc(meta) {
        var tags = [];

        if (meta.description) {
          tags.push({
            tagName: "desc"
            /* Desc */
            ,
            text: meta.description
          });
        }

        if (meta.meaning) {
          tags.push({
            tagName: "meaning"
            /* Meaning */
            ,
            text: meta.meaning
          });
        }

        return tags.length == 0 ? null : jsDocComment(tags);
      }
      /** Closure uses `goog.getMsg(message)` to lookup translations */


      var GOOG_GET_MSG = 'goog.getMsg';

      function createGoogleGetMsgStatements(variable$1, message, closureVar, params) {
        var messageString = serializeI18nMessageForGetMsg(message);
        var args = [literal(messageString)];

        if (Object.keys(params).length) {
          args.push(mapLiteral(params, true));
        } // /**
        //  * @desc description of message
        //  * @meaning meaning of message
        //  */
        // const MSG_... = goog.getMsg(..);
        // I18N_X = MSG_...;


        var googGetMsgStmt = closureVar.set(variable(GOOG_GET_MSG).callFn(args)).toConstDecl();
        var metaComment = i18nMetaToJSDoc(message);

        if (metaComment !== null) {
          googGetMsgStmt.addLeadingComment(metaComment);
        }

        var i18nAssignmentStmt = new ExpressionStatement(variable$1.set(closureVar));
        return [googGetMsgStmt, i18nAssignmentStmt];
      }
      /**
       * This visitor walks over i18n tree and generates its string representation, including ICUs and
       * placeholders in `{$placeholder}` (for plain messages) or `{PLACEHOLDER}` (inside ICUs) format.
       */


      var GetMsgSerializerVisitor = /*#__PURE__*/function () {
        function GetMsgSerializerVisitor() {
          _classCallCheck2(this, GetMsgSerializerVisitor);
        }

        _createClass2(GetMsgSerializerVisitor, [{
          key: "formatPh",
          value: function formatPh(value) {
            return "{$".concat(formatI18nPlaceholderName(value), "}");
          }
        }, {
          key: "visitText",
          value: function visitText(text) {
            return text.value;
          }
        }, {
          key: "visitContainer",
          value: function visitContainer(container) {
            var _this297 = this;

            return container.children.map(function (child) {
              return child.visit(_this297);
            }).join('');
          }
        }, {
          key: "visitIcu",
          value: function visitIcu(icu) {
            return serializeIcuNode(icu);
          }
        }, {
          key: "visitTagPlaceholder",
          value: function visitTagPlaceholder(ph) {
            var _this298 = this;

            return ph.isVoid ? this.formatPh(ph.startName) : "".concat(this.formatPh(ph.startName)).concat(ph.children.map(function (child) {
              return child.visit(_this298);
            }).join('')).concat(this.formatPh(ph.closeName));
          }
        }, {
          key: "visitPlaceholder",
          value: function visitPlaceholder(ph) {
            return this.formatPh(ph.name);
          }
        }, {
          key: "visitIcuPlaceholder",
          value: function visitIcuPlaceholder(ph, context) {
            return this.formatPh(ph.name);
          }
        }]);

        return GetMsgSerializerVisitor;
      }();

      var serializerVisitor$1 = new GetMsgSerializerVisitor();

      function serializeI18nMessageForGetMsg(message) {
        return message.nodes.map(function (node) {
          return node.visit(serializerVisitor$1, null);
        }).join('');
      }

      function createLocalizeStatements(variable, message, params) {
        var _serializeI18nMessage = serializeI18nMessageForLocalize(message),
            messageParts = _serializeI18nMessage.messageParts,
            placeHolders = _serializeI18nMessage.placeHolders;

        var sourceSpan = getSourceSpan(message);
        var expressions = placeHolders.map(function (ph) {
          return params[ph.text];
        });
        var localizedString$1 = localizedString(message, messageParts, placeHolders, expressions, sourceSpan);
        var variableInitialization = variable.set(localizedString$1);
        return [new ExpressionStatement(variableInitialization)];
      }
      /**
       * This visitor walks over an i18n tree, capturing literal strings and placeholders.
       *
       * The result can be used for generating the `$localize` tagged template literals.
       */


      var LocalizeSerializerVisitor = /*#__PURE__*/function () {
        function LocalizeSerializerVisitor() {
          _classCallCheck2(this, LocalizeSerializerVisitor);
        }

        _createClass2(LocalizeSerializerVisitor, [{
          key: "visitText",
          value: function visitText(text, context) {
            if (context[context.length - 1] instanceof LiteralPiece) {
              // Two literal pieces in a row means that there was some comment node in-between.
              context[context.length - 1].text += text.value;
            } else {
              context.push(new LiteralPiece(text.value, text.sourceSpan));
            }
          }
        }, {
          key: "visitContainer",
          value: function visitContainer(container, context) {
            var _this299 = this;

            container.children.forEach(function (child) {
              return child.visit(_this299, context);
            });
          }
        }, {
          key: "visitIcu",
          value: function visitIcu(icu, context) {
            context.push(new LiteralPiece(serializeIcuNode(icu), icu.sourceSpan));
          }
        }, {
          key: "visitTagPlaceholder",
          value: function visitTagPlaceholder(ph, context) {
            var _this300 = this;

            var _a, _b;

            context.push(this.createPlaceholderPiece(ph.startName, (_a = ph.startSourceSpan) !== null && _a !== void 0 ? _a : ph.sourceSpan));

            if (!ph.isVoid) {
              ph.children.forEach(function (child) {
                return child.visit(_this300, context);
              });
              context.push(this.createPlaceholderPiece(ph.closeName, (_b = ph.endSourceSpan) !== null && _b !== void 0 ? _b : ph.sourceSpan));
            }
          }
        }, {
          key: "visitPlaceholder",
          value: function visitPlaceholder(ph, context) {
            context.push(this.createPlaceholderPiece(ph.name, ph.sourceSpan));
          }
        }, {
          key: "visitIcuPlaceholder",
          value: function visitIcuPlaceholder(ph, context) {
            context.push(this.createPlaceholderPiece(ph.name, ph.sourceSpan));
          }
        }, {
          key: "createPlaceholderPiece",
          value: function createPlaceholderPiece(name, sourceSpan) {
            return new PlaceholderPiece(formatI18nPlaceholderName(name,
            /* useCamelCase */
            false), sourceSpan);
          }
        }]);

        return LocalizeSerializerVisitor;
      }();

      var serializerVisitor$2 = new LocalizeSerializerVisitor();
      /**
       * Serialize an i18n message into two arrays: messageParts and placeholders.
       *
       * These arrays will be used to generate `$localize` tagged template literals.
       *
       * @param message The message to be serialized.
       * @returns an object containing the messageParts and placeholders.
       */

      function serializeI18nMessageForLocalize(message) {
        var pieces = [];
        message.nodes.forEach(function (node) {
          return node.visit(serializerVisitor$2, pieces);
        });
        return processMessagePieces(pieces);
      }

      function getSourceSpan(message) {
        var startNode = message.nodes[0];
        var endNode = message.nodes[message.nodes.length - 1];
        return new ParseSourceSpan(startNode.sourceSpan.start, endNode.sourceSpan.end, startNode.sourceSpan.fullStart, startNode.sourceSpan.details);
      }
      /**
       * Convert the list of serialized MessagePieces into two arrays.
       *
       * One contains the literal string pieces and the other the placeholders that will be replaced by
       * expressions when rendering `$localize` tagged template literals.
       *
       * @param pieces The pieces to process.
       * @returns an object containing the messageParts and placeholders.
       */


      function processMessagePieces(pieces) {
        var messageParts = [];
        var placeHolders = [];

        if (pieces[0] instanceof PlaceholderPiece) {
          // The first piece was a placeholder so we need to add an initial empty message part.
          messageParts.push(createEmptyMessagePart(pieces[0].sourceSpan.start));
        }

        for (var i = 0; i < pieces.length; i++) {
          var part = pieces[i];

          if (part instanceof LiteralPiece) {
            messageParts.push(part);
          } else {
            placeHolders.push(part);

            if (pieces[i - 1] instanceof PlaceholderPiece) {
              // There were two placeholders in a row, so we need to add an empty message part.
              messageParts.push(createEmptyMessagePart(pieces[i - 1].sourceSpan.end));
            }
          }
        }

        if (pieces[pieces.length - 1] instanceof PlaceholderPiece) {
          // The last piece was a placeholder so we need to add a final empty message part.
          messageParts.push(createEmptyMessagePart(pieces[pieces.length - 1].sourceSpan.end));
        }

        return {
          messageParts: messageParts,
          placeHolders: placeHolders
        };
      }

      function createEmptyMessagePart(location) {
        return new LiteralPiece('', new ParseSourceSpan(location, location));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // Selector attribute name of `<ng-content>`


      var NG_CONTENT_SELECT_ATTR$1 = 'select'; // Attribute name of `ngProjectAs`.

      var NG_PROJECT_AS_ATTR_NAME = 'ngProjectAs'; // Global symbols available only inside event bindings.

      var EVENT_BINDING_SCOPE_GLOBALS = new Set(['$event']); // List of supported global targets for event listeners

      var GLOBAL_TARGET_RESOLVERS = new Map([['window', Identifiers$1.resolveWindow], ['document', Identifiers$1.resolveDocument], ['body', Identifiers$1.resolveBody]]);
      var LEADING_TRIVIA_CHARS = [' ', '\n', '\r', '\t']; //  if (rf & flags) { .. }

      function renderFlagCheckIfStmt(flags, statements) {
        return ifStmt(variable(RENDER_FLAGS).bitwiseAnd(literal(flags), null, false), statements);
      }

      function prepareEventListenerParameters(eventAst) {
        var handlerName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
        var scope = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
        var type = eventAst.type,
            name = eventAst.name,
            target = eventAst.target,
            phase = eventAst.phase,
            handler = eventAst.handler;

        if (target && !GLOBAL_TARGET_RESOLVERS.has(target)) {
          throw new Error("Unexpected global target '".concat(target, "' defined for '").concat(name, "' event.\n        Supported list of global targets: ").concat(Array.from(GLOBAL_TARGET_RESOLVERS.keys()), "."));
        }

        var eventArgumentName = '$event';
        var implicitReceiverAccesses = new Set();
        var implicitReceiverExpr = scope === null || scope.bindingLevel === 0 ? variable(CONTEXT_NAME) : scope.getOrCreateSharedContextVar(0);
        var bindingExpr = convertActionBinding(scope, implicitReceiverExpr, handler, 'b', function () {
          return error('Unexpected interpolation');
        }, eventAst.handlerSpan, implicitReceiverAccesses, EVENT_BINDING_SCOPE_GLOBALS);
        var statements = [];

        if (scope) {
          statements.push.apply(statements, _toConsumableArray(scope.restoreViewStatement()));
          statements.push.apply(statements, _toConsumableArray(scope.variableDeclarations()));
        }

        statements.push.apply(statements, _toConsumableArray(bindingExpr.render3Stmts));
        var eventName = type === 1
        /* Animation */
        ? prepareSyntheticListenerName(name, phase) : name;
        var fnName = handlerName && sanitizeIdentifier(handlerName);
        var fnArgs = [];

        if (implicitReceiverAccesses.has(eventArgumentName)) {
          fnArgs.push(new FnParam(eventArgumentName, DYNAMIC_TYPE));
        }

        var handlerFn = fn(fnArgs, statements, INFERRED_TYPE, null, fnName);
        var params = [literal(eventName), handlerFn];

        if (target) {
          params.push(literal(false), // `useCapture` flag, defaults to `false`
          importExpr(GLOBAL_TARGET_RESOLVERS.get(target)));
        }

        return params;
      }

      function createComponentDefConsts() {
        return {
          prepareStatements: [],
          constExpressions: [],
          i18nVarRefsCache: new Map()
        };
      }

      var TemplateDefinitionBuilder = /*#__PURE__*/function () {
        function TemplateDefinitionBuilder(constantPool, parentBindingScope) {
          var _this301 = this;

          var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
          var contextName = arguments.length > 3 ? arguments[3] : undefined;
          var i18nContext = arguments.length > 4 ? arguments[4] : undefined;
          var templateIndex = arguments.length > 5 ? arguments[5] : undefined;
          var templateName = arguments.length > 6 ? arguments[6] : undefined;
          var directiveMatcher = arguments.length > 7 ? arguments[7] : undefined;
          var directives = arguments.length > 8 ? arguments[8] : undefined;
          var pipeTypeByName = arguments.length > 9 ? arguments[9] : undefined;
          var pipes = arguments.length > 10 ? arguments[10] : undefined;

          var _namespace = arguments.length > 11 ? arguments[11] : undefined;

          var relativeContextFilePath = arguments.length > 12 ? arguments[12] : undefined;
          var i18nUseExternalIds = arguments.length > 13 ? arguments[13] : undefined;

          var _constants = arguments.length > 14 && arguments[14] !== undefined ? arguments[14] : createComponentDefConsts();

          _classCallCheck2(this, TemplateDefinitionBuilder);

          this.constantPool = constantPool;
          this.level = level;
          this.contextName = contextName;
          this.i18nContext = i18nContext;
          this.templateIndex = templateIndex;
          this.templateName = templateName;
          this.directiveMatcher = directiveMatcher;
          this.directives = directives;
          this.pipeTypeByName = pipeTypeByName;
          this.pipes = pipes;
          this._namespace = _namespace;
          this.i18nUseExternalIds = i18nUseExternalIds;
          this._constants = _constants;
          this._dataIndex = 0;
          this._bindingContext = 0;
          this._prefixCode = [];
          /**
           * List of callbacks to generate creation mode instructions. We store them here as we process
           * the template so bindings in listeners are resolved only once all nodes have been visited.
           * This ensures all local refs and context variables are available for matching.
           */

          this._creationCodeFns = [];
          /**
           * List of callbacks to generate update mode instructions. We store them here as we process
           * the template so bindings are resolved only once all nodes have been visited. This ensures
           * all local refs and context variables are available for matching.
           */

          this._updateCodeFns = [];
          /** Index of the currently-selected node. */

          this._currentIndex = 0;
          /** Temporary variable declarations generated from visiting pipes, literals, etc. */

          this._tempVariables = [];
          /**
           * List of callbacks to build nested templates. Nested templates must not be visited until
           * after the parent template has finished visiting all of its nodes. This ensures that all
           * local ref bindings in nested templates are able to find local ref values if the refs
           * are defined after the template declaration.
           */

          this._nestedTemplateFns = [];
          this._unsupported = unsupported; // i18n context local to this template

          this.i18n = null; // Number of slots to reserve for pureFunctions

          this._pureFunctionSlots = 0; // Number of binding slots

          this._bindingSlots = 0; // Projection slots found in the template. Projection slots can distribute projected
          // nodes based on a selector, or can just use the wildcard selector to match
          // all nodes which aren't matching any selector.

          this._ngContentReservedSlots = []; // Number of non-default selectors found in all parent templates of this template. We need to
          // track it to properly adjust projection slot index in the `projection` instruction.

          this._ngContentSelectorsOffset = 0; // Expression that should be used as implicit receiver when converting template
          // expressions to output AST.

          this._implicitReceiverExpr = null; // These should be handled in the template or element directly.

          this.visitReference = invalid$1;
          this.visitVariable = invalid$1;
          this.visitTextAttribute = invalid$1;
          this.visitBoundAttribute = invalid$1;
          this.visitBoundEvent = invalid$1;
          this._bindingScope = parentBindingScope.nestedScope(level); // Turn the relative context file path into an identifier by replacing non-alphanumeric
          // characters with underscores.

          this.fileBasedI18nSuffix = relativeContextFilePath.replace(/[^A-Za-z0-9]/g, '_') + '_';
          this._valueConverter = new ValueConverter(constantPool, function () {
            return _this301.allocateDataSlot();
          }, function (numSlots) {
            return _this301.allocatePureFunctionSlots(numSlots);
          }, function (name, localName, slot, value) {
            var pipeType = pipeTypeByName.get(name);

            if (pipeType) {
              _this301.pipes.add(pipeType);
            }

            _this301._bindingScope.set(_this301.level, localName, value);

            _this301.creationInstruction(null, Identifiers$1.pipe, [literal(slot), literal(name)]);
          });
        }

        _createClass2(TemplateDefinitionBuilder, [{
          key: "buildTemplateFunction",
          value: function buildTemplateFunction(nodes, variables) {
            var _this302 = this;

            var ngContentSelectorsOffset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
            var i18n = arguments.length > 3 ? arguments[3] : undefined;
            this._ngContentSelectorsOffset = ngContentSelectorsOffset;

            if (this._namespace !== Identifiers$1.namespaceHTML) {
              this.creationInstruction(null, this._namespace);
            } // Create variable bindings


            variables.forEach(function (v) {
              return _this302.registerContextVariables(v);
            }); // Initiate i18n context in case:
            // - this template has parent i18n context
            // - or the template has i18n meta associated with it,
            //   but it's not initiated by the Element (e.g. <ng-template i18n>)

            var initI18nContext = this.i18nContext || isI18nRootNode(i18n) && !isSingleI18nIcu(i18n) && !(isSingleElementTemplate(nodes) && nodes[0].i18n === i18n);
            var selfClosingI18nInstruction = hasTextChildrenOnly(nodes);

            if (initI18nContext) {
              this.i18nStart(null, i18n, selfClosingI18nInstruction);
            } // This is the initial pass through the nodes of this template. In this pass, we
            // queue all creation mode and update mode instructions for generation in the second
            // pass. It's necessary to separate the passes to ensure local refs are defined before
            // resolving bindings. We also count bindings in this pass as we walk bound expressions.


            visitAll(this, nodes); // Add total binding count to pure function count so pure function instructions are
            // generated with the correct slot offset when update instructions are processed.

            this._pureFunctionSlots += this._bindingSlots; // Pipes are walked in the first pass (to enqueue `pipe()` creation instructions and
            // `pipeBind` update instructions), so we have to update the slot offsets manually
            // to account for bindings.

            this._valueConverter.updatePipeSlotOffsets(this._bindingSlots); // Nested templates must be processed before creation instructions so template()
            // instructions can be generated with the correct internal const count.


            this._nestedTemplateFns.forEach(function (buildTemplateFn) {
              return buildTemplateFn();
            }); // Output the `projectionDef` instruction when some `<ng-content>` tags are present.
            // The `projectionDef` instruction is only emitted for the component template and
            // is skipped for nested templates (<ng-template> tags).


            if (this.level === 0 && this._ngContentReservedSlots.length) {
              var parameters = []; // By default the `projectionDef` instructions creates one slot for the wildcard
              // selector if no parameters are passed. Therefore we only want to allocate a new
              // array for the projection slots if the default projection slot is not sufficient.

              if (this._ngContentReservedSlots.length > 1 || this._ngContentReservedSlots[0] !== '*') {
                var r3ReservedSlots = this._ngContentReservedSlots.map(function (s) {
                  return s !== '*' ? parseSelectorToR3Selector(s) : s;
                });

                parameters.push(this.constantPool.getConstLiteral(asLiteral(r3ReservedSlots), true));
              } // Since we accumulate ngContent selectors while processing template elements,
              // we *prepend* `projectionDef` to creation instructions block, to put it before
              // any `projection` instructions


              this.creationInstruction(null, Identifiers$1.projectionDef, parameters,
              /* prepend */
              true);
            }

            if (initI18nContext) {
              this.i18nEnd(null, selfClosingI18nInstruction);
            } // Generate all the creation mode instructions (e.g. resolve bindings in listeners)


            var creationStatements = this._creationCodeFns.map(function (fn) {
              return fn();
            }); // Generate all the update mode instructions (e.g. resolve property or text bindings)


            var updateStatements = this._updateCodeFns.map(function (fn) {
              return fn();
            }); //  Variable declaration must occur after binding resolution so we can generate context
            //  instructions that build on each other.
            // e.g. const b = nextContext().$implicit(); const b = nextContext();


            var creationVariables = this._bindingScope.viewSnapshotStatements();

            var updateVariables = this._bindingScope.variableDeclarations().concat(this._tempVariables);

            var creationBlock = creationStatements.length > 0 ? [renderFlagCheckIfStmt(1
            /* Create */
            , creationVariables.concat(creationStatements))] : [];
            var updateBlock = updateStatements.length > 0 ? [renderFlagCheckIfStmt(2
            /* Update */
            , updateVariables.concat(updateStatements))] : [];
            return fn( // i.e. (rf: RenderFlags, ctx: any)
            [new FnParam(RENDER_FLAGS, NUMBER_TYPE), new FnParam(CONTEXT_NAME, null)], [].concat(_toConsumableArray(this._prefixCode), creationBlock, updateBlock), INFERRED_TYPE, null, this.templateName);
          } // LocalResolver

        }, {
          key: "getLocal",
          value: function getLocal(name) {
            return this._bindingScope.get(name);
          } // LocalResolver

        }, {
          key: "notifyImplicitReceiverUse",
          value: function notifyImplicitReceiverUse() {
            this._bindingScope.notifyImplicitReceiverUse();
          }
        }, {
          key: "i18nTranslate",
          value: function i18nTranslate(message) {
            var _this$_constants$prep;

            var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
            var ref = arguments.length > 2 ? arguments[2] : undefined;
            var transformFn = arguments.length > 3 ? arguments[3] : undefined;

            var _ref = ref || this.i18nGenerateMainBlockVar(); // Closure Compiler requires const names to start with `MSG_` but disallows any other const to
            // start with `MSG_`. We define a variable starting with `MSG_` just for the `goog.getMsg` call


            var closureVar = this.i18nGenerateClosureVar(message.id);
            var statements = getTranslationDeclStmts(message, _ref, closureVar, params, transformFn);

            (_this$_constants$prep = this._constants.prepareStatements).push.apply(_this$_constants$prep, _toConsumableArray(statements));

            return _ref;
          }
        }, {
          key: "registerContextVariables",
          value: function registerContextVariables(variable$1) {
            var scopedName = this._bindingScope.freshReferenceName();

            var retrievalLevel = this.level;
            var lhs = variable(variable$1.name + scopedName);

            this._bindingScope.set(retrievalLevel, variable$1.name, lhs, 1
            /* CONTEXT */
            , function (scope, relativeLevel) {
              var rhs;

              if (scope.bindingLevel === retrievalLevel) {
                // e.g. ctx
                rhs = variable(CONTEXT_NAME);
              } else {
                var sharedCtxVar = scope.getSharedContextName(retrievalLevel); // e.g. ctx_r0   OR  x(2);

                rhs = sharedCtxVar ? sharedCtxVar : generateNextContextExpr(relativeLevel);
              } // e.g. const $item$ = x(2).$implicit;


              return [lhs.set(rhs.prop(variable$1.value || IMPLICIT_REFERENCE)).toConstDecl()];
            });
          }
        }, {
          key: "i18nAppendBindings",
          value: function i18nAppendBindings(expressions) {
            var _this303 = this;

            if (expressions.length > 0) {
              expressions.forEach(function (expression) {
                return _this303.i18n.appendBinding(expression);
              });
            }
          }
        }, {
          key: "i18nBindProps",
          value: function i18nBindProps(props) {
            var _this304 = this;

            var bound = {};
            Object.keys(props).forEach(function (key) {
              var prop = props[key];

              if (prop instanceof Text) {
                bound[key] = literal(prop.value);
              } else {
                var value = prop.value.visit(_this304._valueConverter);

                _this304.allocateBindingSlots(value);

                if (value instanceof Interpolation) {
                  var strings = value.strings,
                      expressions = value.expressions;
                  var _this304$i18n = _this304.i18n,
                      id = _this304$i18n.id,
                      bindings = _this304$i18n.bindings;
                  var label = assembleI18nBoundString(strings, bindings.size, id);

                  _this304.i18nAppendBindings(expressions);

                  bound[key] = literal(label);
                }
              }
            });
            return bound;
          } // Generates top level vars for i18n blocks (i.e. `i18n_N`).

        }, {
          key: "i18nGenerateMainBlockVar",
          value: function i18nGenerateMainBlockVar() {
            return variable(this.constantPool.uniqueName(TRANSLATION_VAR_PREFIX));
          } // Generates vars with Closure-specific names for i18n blocks (i.e. `MSG_XXX`).

        }, {
          key: "i18nGenerateClosureVar",
          value: function i18nGenerateClosureVar(messageId) {
            var name;
            var suffix = this.fileBasedI18nSuffix.toUpperCase();

            if (this.i18nUseExternalIds) {
              var prefix = getTranslationConstPrefix("EXTERNAL_");
              var uniqueSuffix = this.constantPool.uniqueName(suffix);
              name = "".concat(prefix).concat(sanitizeIdentifier(messageId), "$$").concat(uniqueSuffix);
            } else {
              var _prefix = getTranslationConstPrefix(suffix);

              name = this.constantPool.uniqueName(_prefix);
            }

            return variable(name);
          }
        }, {
          key: "i18nUpdateRef",
          value: function i18nUpdateRef(context) {
            var icus = context.icus,
                meta = context.meta,
                isRoot = context.isRoot,
                isResolved = context.isResolved,
                isEmitted = context.isEmitted;

            if (isRoot && isResolved && !isEmitted && !isSingleI18nIcu(meta)) {
              context.isEmitted = true;
              var placeholders = context.getSerializedPlaceholders();
              var icuMapping = {};
              var params = placeholders.size ? placeholdersToParams(placeholders) : {};

              if (icus.size) {
                icus.forEach(function (refs, key) {
                  if (refs.length === 1) {
                    // if we have one ICU defined for a given
                    // placeholder - just output its reference
                    params[key] = refs[0];
                  } else {
                    // ... otherwise we need to activate post-processing
                    // to replace ICU placeholders with proper values
                    var placeholder = wrapI18nPlaceholder("".concat(I18N_ICU_MAPPING_PREFIX).concat(key));
                    params[key] = literal(placeholder);
                    icuMapping[key] = literalArr(refs);
                  }
                });
              } // translation requires post processing in 2 cases:
              // - if we have placeholders with multiple values (ex. `START_DIV`: [�#1�, �#2�, ...])
              // - if we have multiple ICUs that refer to the same placeholder name


              var needsPostprocessing = Array.from(placeholders.values()).some(function (value) {
                return value.length > 1;
              }) || Object.keys(icuMapping).length;
              var transformFn;

              if (needsPostprocessing) {
                transformFn = function transformFn(raw) {
                  var args = [raw];

                  if (Object.keys(icuMapping).length) {
                    args.push(mapLiteral(icuMapping, true));
                  }

                  return instruction(null, Identifiers$1.i18nPostprocess, args);
                };
              }

              this.i18nTranslate(meta, params, context.ref, transformFn);
            }
          }
        }, {
          key: "i18nStart",
          value: function i18nStart() {
            var span = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
            var meta = arguments.length > 1 ? arguments[1] : undefined;
            var selfClosing = arguments.length > 2 ? arguments[2] : undefined;
            var index = this.allocateDataSlot();
            this.i18n = this.i18nContext ? this.i18nContext.forkChildContext(index, this.templateIndex, meta) : new I18nContext(index, this.i18nGenerateMainBlockVar(), 0, this.templateIndex, meta); // generate i18nStart instruction

            var _this$i18n = this.i18n,
                id = _this$i18n.id,
                ref = _this$i18n.ref;
            var params = [literal(index), this.addToConsts(ref)];

            if (id > 0) {
              // do not push 3rd argument (sub-block id)
              // into i18nStart call for top level i18n context
              params.push(literal(id));
            }

            this.creationInstruction(span, selfClosing ? Identifiers$1.i18n : Identifiers$1.i18nStart, params);
          }
        }, {
          key: "i18nEnd",
          value: function i18nEnd() {
            var _this305 = this;

            var span = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
            var selfClosing = arguments.length > 1 ? arguments[1] : undefined;

            if (!this.i18n) {
              throw new Error('i18nEnd is executed with no i18n context present');
            }

            if (this.i18nContext) {
              this.i18nContext.reconcileChildContext(this.i18n);
              this.i18nUpdateRef(this.i18nContext);
            } else {
              this.i18nUpdateRef(this.i18n);
            } // setup accumulated bindings


            var _this$i18n2 = this.i18n,
                index = _this$i18n2.index,
                bindings = _this$i18n2.bindings;

            if (bindings.size) {
              var chainBindings = [];
              bindings.forEach(function (binding) {
                chainBindings.push({
                  sourceSpan: span,
                  value: function value() {
                    return _this305.convertPropertyBinding(binding);
                  }
                });
              }); // for i18n block, advance to the most recent element index (by taking the current number of
              // elements and subtracting one) before invoking `i18nExp` instructions, to make sure the
              // necessary lifecycle hooks of components/directives are properly flushed.

              this.updateInstructionChainWithAdvance(this.getConstCount() - 1, Identifiers$1.i18nExp, chainBindings);
              this.updateInstruction(span, Identifiers$1.i18nApply, [literal(index)]);
            }

            if (!selfClosing) {
              this.creationInstruction(span, Identifiers$1.i18nEnd);
            }

            this.i18n = null; // reset local i18n context
          }
        }, {
          key: "i18nAttributesInstruction",
          value: function i18nAttributesInstruction(nodeIndex, attrs, sourceSpan) {
            var _this306 = this;

            var hasBindings = false;
            var i18nAttrArgs = [];
            var bindings = [];
            attrs.forEach(function (attr) {
              var message = attr.i18n;
              var converted = attr.value.visit(_this306._valueConverter);

              _this306.allocateBindingSlots(converted);

              if (converted instanceof Interpolation) {
                var placeholders = assembleBoundTextPlaceholders(message);
                var params = placeholdersToParams(placeholders);
                i18nAttrArgs.push(literal(attr.name), _this306.i18nTranslate(message, params));
                converted.expressions.forEach(function (expression) {
                  hasBindings = true;
                  bindings.push({
                    sourceSpan: sourceSpan,
                    value: function value() {
                      return _this306.convertPropertyBinding(expression);
                    }
                  });
                });
              }
            });

            if (bindings.length > 0) {
              this.updateInstructionChainWithAdvance(nodeIndex, Identifiers$1.i18nExp, bindings);
            }

            if (i18nAttrArgs.length > 0) {
              var index = literal(this.allocateDataSlot());
              var constIndex = this.addToConsts(literalArr(i18nAttrArgs));
              this.creationInstruction(sourceSpan, Identifiers$1.i18nAttributes, [index, constIndex]);

              if (hasBindings) {
                this.updateInstruction(sourceSpan, Identifiers$1.i18nApply, [index]);
              }
            }
          }
        }, {
          key: "getNamespaceInstruction",
          value: function getNamespaceInstruction(namespaceKey) {
            switch (namespaceKey) {
              case 'math':
                return Identifiers$1.namespaceMathML;

              case 'svg':
                return Identifiers$1.namespaceSVG;

              default:
                return Identifiers$1.namespaceHTML;
            }
          }
        }, {
          key: "addNamespaceInstruction",
          value: function addNamespaceInstruction(nsInstruction, element) {
            this._namespace = nsInstruction;
            this.creationInstruction(element.startSourceSpan, nsInstruction);
          }
          /**
           * Adds an update instruction for an interpolated property or attribute, such as
           * `prop="{{value}}"` or `attr.title="{{value}}"`
           */

        }, {
          key: "interpolatedUpdateInstruction",
          value: function interpolatedUpdateInstruction(instruction, elementIndex, attrName, input, value, params) {
            var _this307 = this;

            this.updateInstructionWithAdvance(elementIndex, input.sourceSpan, instruction, function () {
              return [literal(attrName)].concat(_toConsumableArray(_this307.getUpdateInstructionArguments(value)), _toConsumableArray(params));
            });
          }
        }, {
          key: "visitContent",
          value: function visitContent(ngContent) {
            var slot = this.allocateDataSlot();
            var projectionSlotIdx = this._ngContentSelectorsOffset + this._ngContentReservedSlots.length;
            var parameters = [literal(slot)];

            this._ngContentReservedSlots.push(ngContent.selector);

            var nonContentSelectAttributes = ngContent.attributes.filter(function (attr) {
              return attr.name.toLowerCase() !== NG_CONTENT_SELECT_ATTR$1;
            });
            var attributes = this.getAttributeExpressions(ngContent.name, nonContentSelectAttributes, [], []);

            if (attributes.length > 0) {
              parameters.push(literal(projectionSlotIdx), literalArr(attributes));
            } else if (projectionSlotIdx !== 0) {
              parameters.push(literal(projectionSlotIdx));
            }

            this.creationInstruction(ngContent.sourceSpan, Identifiers$1.projection, parameters);

            if (this.i18n) {
              this.i18n.appendProjection(ngContent.i18n, slot);
            }
          }
        }, {
          key: "visitElement",
          value: function visitElement(element) {
            var _this308 = this;

            var _a, _b;

            var elementIndex = this.allocateDataSlot();
            var stylingBuilder = new StylingBuilder(null);
            var isNonBindableMode = false;
            var isI18nRootElement = isI18nRootNode(element.i18n) && !isSingleI18nIcu(element.i18n);
            var outputAttrs = [];

            var _splitNsName = splitNsName(element.name),
                _splitNsName2 = _slicedToArray(_splitNsName, 2),
                namespaceKey = _splitNsName2[0],
                elementName = _splitNsName2[1];

            var isNgContainer$1 = isNgContainer(element.name); // Handle styling, i18n, ngNonBindable attributes

            var _iterator25 = _createForOfIteratorHelper(element.attributes),
                _step25;

            try {
              for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {
                var attr = _step25.value;
                var name = attr.name,
                    value = attr.value;

                if (name === NON_BINDABLE_ATTR) {
                  isNonBindableMode = true;
                } else if (name === 'style') {
                  stylingBuilder.registerStyleAttr(value);
                } else if (name === 'class') {
                  stylingBuilder.registerClassAttr(value);
                } else {
                  outputAttrs.push(attr);
                }
              } // Match directives on non i18n attributes

            } catch (err) {
              _iterator25.e(err);
            } finally {
              _iterator25.f();
            }

            this.matchDirectives(element.name, element); // Regular element or ng-container creation mode

            var parameters = [literal(elementIndex)];

            if (!isNgContainer$1) {
              parameters.push(literal(elementName));
            } // Add the attributes


            var allOtherInputs = [];
            var boundI18nAttrs = [];
            element.inputs.forEach(function (input) {
              var stylingInputWasSet = stylingBuilder.registerBoundInput(input);

              if (!stylingInputWasSet) {
                if (input.type === 0
                /* Property */
                && input.i18n) {
                  boundI18nAttrs.push(input);
                } else {
                  allOtherInputs.push(input);
                }
              }
            }); // add attributes for directive and projection matching purposes

            var attributes = this.getAttributeExpressions(element.name, outputAttrs, allOtherInputs, element.outputs, stylingBuilder, [], boundI18nAttrs);
            parameters.push(this.addAttrsToConsts(attributes)); // local refs (ex.: <div #foo #bar="baz">)

            var refs = this.prepareRefsArray(element.references);
            parameters.push(this.addToConsts(refs));
            var wasInNamespace = this._namespace;
            var currentNamespace = this.getNamespaceInstruction(namespaceKey); // If the namespace is changing now, include an instruction to change it
            // during element creation.

            if (currentNamespace !== wasInNamespace) {
              this.addNamespaceInstruction(currentNamespace, element);
            }

            if (this.i18n) {
              this.i18n.appendElement(element.i18n, elementIndex);
            } // Note that we do not append text node instructions and ICUs inside i18n section,
            // so we exclude them while calculating whether current element has children


            var hasChildren = !isI18nRootElement && this.i18n ? !hasTextChildrenOnly(element.children) : element.children.length > 0;
            var createSelfClosingInstruction = !stylingBuilder.hasBindingsWithPipes && element.outputs.length === 0 && boundI18nAttrs.length === 0 && !hasChildren;
            var createSelfClosingI18nInstruction = !createSelfClosingInstruction && hasTextChildrenOnly(element.children);

            if (createSelfClosingInstruction) {
              this.creationInstruction(element.sourceSpan, isNgContainer$1 ? Identifiers$1.elementContainer : Identifiers$1.element, trimTrailingNulls(parameters));
            } else {
              this.creationInstruction(element.startSourceSpan, isNgContainer$1 ? Identifiers$1.elementContainerStart : Identifiers$1.elementStart, trimTrailingNulls(parameters));

              if (isNonBindableMode) {
                this.creationInstruction(element.startSourceSpan, Identifiers$1.disableBindings);
              }

              if (boundI18nAttrs.length > 0) {
                this.i18nAttributesInstruction(elementIndex, boundI18nAttrs, (_a = element.startSourceSpan) !== null && _a !== void 0 ? _a : element.sourceSpan);
              } // Generate Listeners (outputs)


              if (element.outputs.length > 0) {
                var listeners = element.outputs.map(function (outputAst) {
                  return {
                    sourceSpan: outputAst.sourceSpan,
                    params: _this308.prepareListenerParameter(element.name, outputAst, elementIndex)
                  };
                });
                this.creationInstructionChain(Identifiers$1.listener, listeners);
              } // Note: it's important to keep i18n/i18nStart instructions after i18nAttributes and
              // listeners, to make sure i18nAttributes instruction targets current element at runtime.


              if (isI18nRootElement) {
                this.i18nStart(element.startSourceSpan, element.i18n, createSelfClosingI18nInstruction);
              }
            } // the code here will collect all update-level styling instructions and add them to the
            // update block of the template function AOT code. Instructions like `styleProp`,
            // `styleMap`, `classMap`, `classProp`
            // are all generated and assigned in the code below.


            var stylingInstructions = stylingBuilder.buildUpdateLevelInstructions(this._valueConverter);
            var limit = stylingInstructions.length - 1;

            for (var i = 0; i <= limit; i++) {
              var _instruction = stylingInstructions[i];
              this._bindingSlots += this.processStylingUpdateInstruction(elementIndex, _instruction);
            } // the reason why `undefined` is used is because the renderer understands this as a
            // special value to symbolize that there is no RHS to this binding
            // TODO (matsko): revisit this once FW-959 is approached


            var emptyValueBindInstruction = literal(undefined);
            var propertyBindings = [];
            var attributeBindings = []; // Generate element input bindings

            allOtherInputs.forEach(function (input) {
              var inputType = input.type;

              if (inputType === 4
              /* Animation */
              ) {
                  var _value3 = input.value.visit(_this308._valueConverter); // animation bindings can be presented in the following formats:
                  // 1. [@binding]="fooExp"
                  // 2. [@binding]="{value:fooExp, params:{...}}"
                  // 3. [@binding]
                  // 4. @binding
                  // All formats will be valid for when a synthetic binding is created.
                  // The reasoning for this is because the renderer should get each
                  // synthetic binding value in the order of the array that they are
                  // defined in...


                  var hasValue = _value3 instanceof LiteralPrimitive ? !!_value3.value : true;

                  _this308.allocateBindingSlots(_value3);

                  propertyBindings.push({
                    name: prepareSyntheticPropertyName(input.name),
                    sourceSpan: input.sourceSpan,
                    value: function value() {
                      return hasValue ? _this308.convertPropertyBinding(_value3) : emptyValueBindInstruction;
                    }
                  });
                } else {
                // we must skip attributes with associated i18n context, since these attributes are handled
                // separately and corresponding `i18nExp` and `i18nApply` instructions will be generated
                if (input.i18n) return;

                var _value4 = input.value.visit(_this308._valueConverter);

                if (_value4 !== undefined) {
                  var params = [];

                  var _splitNsName3 = splitNsName(input.name),
                      _splitNsName4 = _slicedToArray(_splitNsName3, 2),
                      attrNamespace = _splitNsName4[0],
                      attrName = _splitNsName4[1];

                  var isAttributeBinding = inputType === 1
                  /* Attribute */
                  ;
                  var sanitizationRef = resolveSanitizationFn(input.securityContext, isAttributeBinding);
                  if (sanitizationRef) params.push(sanitizationRef);

                  if (attrNamespace) {
                    var namespaceLiteral = literal(attrNamespace);

                    if (sanitizationRef) {
                      params.push(namespaceLiteral);
                    } else {
                      // If there wasn't a sanitization ref, we need to add
                      // an extra param so that we can pass in the namespace.
                      params.push(literal(null), namespaceLiteral);
                    }
                  }

                  _this308.allocateBindingSlots(_value4);

                  if (inputType === 0
                  /* Property */
                  ) {
                      if (_value4 instanceof Interpolation) {
                        // prop="{{value}}" and friends
                        _this308.interpolatedUpdateInstruction(getPropertyInterpolationExpression(_value4), elementIndex, attrName, input, _value4, params);
                      } else {
                        // [prop]="value"
                        // Collect all the properties so that we can chain into a single function at the end.
                        propertyBindings.push({
                          name: attrName,
                          sourceSpan: input.sourceSpan,
                          value: function value() {
                            return _this308.convertPropertyBinding(_value4);
                          },
                          params: params
                        });
                      }
                    } else if (inputType === 1
                  /* Attribute */
                  ) {
                      if (_value4 instanceof Interpolation && getInterpolationArgsLength(_value4) > 1) {
                        // attr.name="text{{value}}" and friends
                        _this308.interpolatedUpdateInstruction(getAttributeInterpolationExpression(_value4), elementIndex, attrName, input, _value4, params);
                      } else {
                        var boundValue = _value4 instanceof Interpolation ? _value4.expressions[0] : _value4; // [attr.name]="value" or attr.name="{{value}}"
                        // Collect the attribute bindings so that they can be chained at the end.

                        attributeBindings.push({
                          name: attrName,
                          sourceSpan: input.sourceSpan,
                          value: function value() {
                            return _this308.convertPropertyBinding(boundValue);
                          },
                          params: params
                        });
                      }
                    } else {
                    // class prop
                    _this308.updateInstructionWithAdvance(elementIndex, input.sourceSpan, Identifiers$1.classProp, function () {
                      return [literal(elementIndex), literal(attrName), _this308.convertPropertyBinding(_value4)].concat(params);
                    });
                  }
                }
              }
            });

            if (propertyBindings.length > 0) {
              this.updateInstructionChainWithAdvance(elementIndex, Identifiers$1.property, propertyBindings);
            }

            if (attributeBindings.length > 0) {
              this.updateInstructionChainWithAdvance(elementIndex, Identifiers$1.attribute, attributeBindings);
            } // Traverse element child nodes


            visitAll(this, element.children);

            if (!isI18nRootElement && this.i18n) {
              this.i18n.appendElement(element.i18n, elementIndex, true);
            }

            if (!createSelfClosingInstruction) {
              // Finish element construction mode.
              var span = (_b = element.endSourceSpan) !== null && _b !== void 0 ? _b : element.sourceSpan;

              if (isI18nRootElement) {
                this.i18nEnd(span, createSelfClosingI18nInstruction);
              }

              if (isNonBindableMode) {
                this.creationInstruction(span, Identifiers$1.enableBindings);
              }

              this.creationInstruction(span, isNgContainer$1 ? Identifiers$1.elementContainerEnd : Identifiers$1.elementEnd);
            }
          }
        }, {
          key: "visitTemplate",
          value: function visitTemplate(template) {
            var _this309 = this;

            var _a;

            var NG_TEMPLATE_TAG_NAME = 'ng-template';
            var templateIndex = this.allocateDataSlot();

            if (this.i18n) {
              this.i18n.appendTemplate(template.i18n, templateIndex);
            }

            var tagName = sanitizeIdentifier(template.tagName || '');
            var contextName = "".concat(this.contextName).concat(tagName ? '_' + tagName : '', "_").concat(templateIndex);
            var templateName = "".concat(contextName, "_Template");
            var parameters = [literal(templateIndex), variable(templateName), // We don't care about the tag's namespace here, because we infer
            // it based on the parent nodes inside the template instruction.
            literal(template.tagName ? splitNsName(template.tagName)[1] : template.tagName)]; // find directives matching on a given <ng-template> node

            this.matchDirectives(NG_TEMPLATE_TAG_NAME, template); // prepare attributes parameter (including attributes used for directive matching)

            var attrsExprs = this.getAttributeExpressions(NG_TEMPLATE_TAG_NAME, template.attributes, template.inputs, template.outputs, undefined
            /* styles */
            , template.templateAttrs);
            parameters.push(this.addAttrsToConsts(attrsExprs)); // local refs (ex.: <ng-template #foo>)

            if (template.references && template.references.length) {
              var refs = this.prepareRefsArray(template.references);
              parameters.push(this.addToConsts(refs));
              parameters.push(importExpr(Identifiers$1.templateRefExtractor));
            } // Create the template function


            var templateVisitor = new TemplateDefinitionBuilder(this.constantPool, this._bindingScope, this.level + 1, contextName, this.i18n, templateIndex, templateName, this.directiveMatcher, this.directives, this.pipeTypeByName, this.pipes, this._namespace, this.fileBasedI18nSuffix, this.i18nUseExternalIds, this._constants); // Nested templates must not be visited until after their parent templates have completed
            // processing, so they are queued here until after the initial pass. Otherwise, we wouldn't
            // be able to support bindings in nested templates to local refs that occur after the
            // template definition. e.g. <div *ngIf="showing">{{ foo }}</div>  <div #foo></div>

            this._nestedTemplateFns.push(function () {
              var templateFunctionExpr = templateVisitor.buildTemplateFunction(template.children, template.variables, _this309._ngContentReservedSlots.length + _this309._ngContentSelectorsOffset, template.i18n);

              _this309.constantPool.statements.push(templateFunctionExpr.toDeclStmt(templateName));

              if (templateVisitor._ngContentReservedSlots.length) {
                var _this309$_ngContentRe;

                (_this309$_ngContentRe = _this309._ngContentReservedSlots).push.apply(_this309$_ngContentRe, _toConsumableArray(templateVisitor._ngContentReservedSlots));
              }
            }); // e.g. template(1, MyComp_Template_1)


            this.creationInstruction(template.sourceSpan, Identifiers$1.templateCreate, function () {
              parameters.splice(2, 0, literal(templateVisitor.getConstCount()), literal(templateVisitor.getVarCount()));
              return trimTrailingNulls(parameters);
            }); // handle property bindings e.g. ɵɵproperty('ngForOf', ctx.items), et al;

            this.templatePropertyBindings(templateIndex, template.templateAttrs); // Only add normal input/output binding instructions on explicit <ng-template> elements.

            if (template.tagName === NG_TEMPLATE_TAG_NAME) {
              var _partitionArray = partitionArray(template.inputs, hasI18nMeta),
                  _partitionArray2 = _slicedToArray(_partitionArray, 2),
                  i18nInputs = _partitionArray2[0],
                  inputs = _partitionArray2[1]; // Add i18n attributes that may act as inputs to directives. If such attributes are present,
              // generate `i18nAttributes` instruction. Note: we generate it only for explicit <ng-template>
              // elements, in case of inline templates, corresponding instructions will be generated in the
              // nested template function.


              if (i18nInputs.length > 0) {
                this.i18nAttributesInstruction(templateIndex, i18nInputs, (_a = template.startSourceSpan) !== null && _a !== void 0 ? _a : template.sourceSpan);
              } // Add the input bindings


              if (inputs.length > 0) {
                this.templatePropertyBindings(templateIndex, inputs);
              } // Generate listeners for directive output


              if (template.outputs.length > 0) {
                var listeners = template.outputs.map(function (outputAst) {
                  return {
                    sourceSpan: outputAst.sourceSpan,
                    params: _this309.prepareListenerParameter('ng_template', outputAst, templateIndex)
                  };
                });
                this.creationInstructionChain(Identifiers$1.listener, listeners);
              }
            }
          }
        }, {
          key: "visitBoundText",
          value: function visitBoundText(text) {
            var _this310 = this;

            if (this.i18n) {
              var _value5 = text.value.visit(this._valueConverter);

              this.allocateBindingSlots(_value5);

              if (_value5 instanceof Interpolation) {
                this.i18n.appendBoundText(text.i18n);
                this.i18nAppendBindings(_value5.expressions);
              }

              return;
            }

            var nodeIndex = this.allocateDataSlot();
            this.creationInstruction(text.sourceSpan, Identifiers$1.text, [literal(nodeIndex)]);
            var value = text.value.visit(this._valueConverter);
            this.allocateBindingSlots(value);

            if (value instanceof Interpolation) {
              this.updateInstructionWithAdvance(nodeIndex, text.sourceSpan, getTextInterpolationExpression(value), function () {
                return _this310.getUpdateInstructionArguments(value);
              });
            } else {
              error('Text nodes should be interpolated and never bound directly.');
            }
          }
        }, {
          key: "visitText",
          value: function visitText(text) {
            // when a text element is located within a translatable
            // block, we exclude this text element from instructions set,
            // since it will be captured in i18n content and processed at runtime
            if (!this.i18n) {
              this.creationInstruction(text.sourceSpan, Identifiers$1.text, [literal(this.allocateDataSlot()), literal(text.value)]);
            }
          }
        }, {
          key: "visitIcu",
          value: function visitIcu(icu) {
            var initWasInvoked = false; // if an ICU was created outside of i18n block, we still treat
            // it as a translatable entity and invoke i18nStart and i18nEnd
            // to generate i18n context and the necessary instructions

            if (!this.i18n) {
              initWasInvoked = true;
              this.i18nStart(null, icu.i18n, true);
            }

            var i18n = this.i18n;
            var vars = this.i18nBindProps(icu.vars);
            var placeholders = this.i18nBindProps(icu.placeholders); // output ICU directly and keep ICU reference in context

            var message = icu.i18n; // we always need post-processing function for ICUs, to make sure that:
            // - all placeholders in a form of {PLACEHOLDER} are replaced with actual values (note:
            // `goog.getMsg` does not process ICUs and uses the `{PLACEHOLDER}` format for placeholders
            // inside ICUs)
            // - all ICU vars (such as `VAR_SELECT` or `VAR_PLURAL`) are replaced with correct values

            var transformFn = function transformFn(raw) {
              var params = Object.assign(Object.assign({}, vars), placeholders);
              var formatted = i18nFormatPlaceholderNames(params,
              /* useCamelCase */
              false);
              return instruction(null, Identifiers$1.i18nPostprocess, [raw, mapLiteral(formatted, true)]);
            }; // in case the whole i18n message is a single ICU - we do not need to
            // create a separate top-level translation, we can use the root ref instead
            // and make this ICU a top-level translation
            // note: ICU placeholders are replaced with actual values in `i18nPostprocess` function
            // separately, so we do not pass placeholders into `i18nTranslate` function.


            if (isSingleI18nIcu(i18n.meta)) {
              this.i18nTranslate(message,
              /* placeholders */
              {}, i18n.ref, transformFn);
            } else {
              // output ICU directly and keep ICU reference in context
              var ref = this.i18nTranslate(message,
              /* placeholders */
              {},
              /* ref */
              undefined, transformFn);
              i18n.appendIcu(icuFromI18nMessage(message).name, ref);
            }

            if (initWasInvoked) {
              this.i18nEnd(null, true);
            }

            return null;
          }
        }, {
          key: "allocateDataSlot",
          value: function allocateDataSlot() {
            return this._dataIndex++;
          }
        }, {
          key: "getConstCount",
          value: function getConstCount() {
            return this._dataIndex;
          }
        }, {
          key: "getVarCount",
          value: function getVarCount() {
            return this._pureFunctionSlots;
          }
        }, {
          key: "getConsts",
          value: function getConsts() {
            return this._constants;
          }
        }, {
          key: "getNgContentSelectors",
          value: function getNgContentSelectors() {
            return this._ngContentReservedSlots.length ? this.constantPool.getConstLiteral(asLiteral(this._ngContentReservedSlots), true) : null;
          }
        }, {
          key: "bindingContext",
          value: function bindingContext() {
            return "".concat(this._bindingContext++);
          }
        }, {
          key: "templatePropertyBindings",
          value: function templatePropertyBindings(templateIndex, attrs) {
            var _this311 = this;

            var propertyBindings = [];
            attrs.forEach(function (input) {
              if (input instanceof BoundAttribute) {
                var _value6 = input.value.visit(_this311._valueConverter);

                if (_value6 !== undefined) {
                  _this311.allocateBindingSlots(_value6);

                  if (_value6 instanceof Interpolation) {
                    // Params typically contain attribute namespace and value sanitizer, which is applicable
                    // for regular HTML elements, but not applicable for <ng-template> (since props act as
                    // inputs to directives), so keep params array empty.
                    var params = []; // prop="{{value}}" case

                    _this311.interpolatedUpdateInstruction(getPropertyInterpolationExpression(_value6), templateIndex, input.name, input, _value6, params);
                  } else {
                    // [prop]="value" case
                    propertyBindings.push({
                      name: input.name,
                      sourceSpan: input.sourceSpan,
                      value: function value() {
                        return _this311.convertPropertyBinding(_value6);
                      }
                    });
                  }
                }
              }
            });

            if (propertyBindings.length > 0) {
              this.updateInstructionChainWithAdvance(templateIndex, Identifiers$1.property, propertyBindings);
            }
          } // Bindings must only be resolved after all local refs have been visited, so all
          // instructions are queued in callbacks that execute once the initial pass has completed.
          // Otherwise, we wouldn't be able to support local refs that are defined after their
          // bindings. e.g. {{ foo }} <div #foo></div>

        }, {
          key: "instructionFn",
          value: function instructionFn(fns, span, reference, paramsOrFn) {
            var prepend = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
            fns[prepend ? 'unshift' : 'push'](function () {
              var params = Array.isArray(paramsOrFn) ? paramsOrFn : paramsOrFn();
              return instruction(span, reference, params).toStmt();
            });
          }
        }, {
          key: "processStylingUpdateInstruction",
          value: function processStylingUpdateInstruction(elementIndex, instruction) {
            var _this312 = this;

            var allocateBindingSlots = 0;

            if (instruction) {
              var calls = [];
              instruction.calls.forEach(function (call) {
                allocateBindingSlots += call.allocateBindingSlots;
                calls.push({
                  sourceSpan: call.sourceSpan,
                  value: function value() {
                    return call.params(function (value) {
                      return call.supportsInterpolation && value instanceof Interpolation ? _this312.getUpdateInstructionArguments(value) : _this312.convertPropertyBinding(value);
                    });
                  }
                });
              });
              this.updateInstructionChainWithAdvance(elementIndex, instruction.reference, calls);
            }

            return allocateBindingSlots;
          }
        }, {
          key: "creationInstruction",
          value: function creationInstruction(span, reference, paramsOrFn, prepend) {
            this.instructionFn(this._creationCodeFns, span, reference, paramsOrFn || [], prepend);
          }
        }, {
          key: "creationInstructionChain",
          value: function creationInstructionChain(reference, calls) {
            var span = calls.length ? calls[0].sourceSpan : null;

            this._creationCodeFns.push(function () {
              return chainedInstruction(reference, calls.map(function (call) {
                return call.params();
              }), span).toStmt();
            });
          }
        }, {
          key: "updateInstructionWithAdvance",
          value: function updateInstructionWithAdvance(nodeIndex, span, reference, paramsOrFn) {
            this.addAdvanceInstructionIfNecessary(nodeIndex, span);
            this.updateInstruction(span, reference, paramsOrFn);
          }
        }, {
          key: "updateInstruction",
          value: function updateInstruction(span, reference, paramsOrFn) {
            this.instructionFn(this._updateCodeFns, span, reference, paramsOrFn || []);
          }
        }, {
          key: "updateInstructionChain",
          value: function updateInstructionChain(reference, bindings) {
            var span = bindings.length ? bindings[0].sourceSpan : null;

            this._updateCodeFns.push(function () {
              var calls = bindings.map(function (property) {
                var value = property.value();
                var fnParams = Array.isArray(value) ? value : [value];

                if (property.params) {
                  fnParams.push.apply(fnParams, _toConsumableArray(property.params));
                }

                if (property.name) {
                  // We want the property name to always be the first function parameter.
                  fnParams.unshift(literal(property.name));
                }

                return fnParams;
              });
              return chainedInstruction(reference, calls, span).toStmt();
            });
          }
        }, {
          key: "updateInstructionChainWithAdvance",
          value: function updateInstructionChainWithAdvance(nodeIndex, reference, bindings) {
            this.addAdvanceInstructionIfNecessary(nodeIndex, bindings.length ? bindings[0].sourceSpan : null);
            this.updateInstructionChain(reference, bindings);
          }
        }, {
          key: "addAdvanceInstructionIfNecessary",
          value: function addAdvanceInstructionIfNecessary(nodeIndex, span) {
            if (nodeIndex !== this._currentIndex) {
              var delta = nodeIndex - this._currentIndex;

              if (delta < 1) {
                throw new Error('advance instruction can only go forwards');
              }

              this.instructionFn(this._updateCodeFns, span, Identifiers$1.advance, [literal(delta)]);
              this._currentIndex = nodeIndex;
            }
          }
        }, {
          key: "allocatePureFunctionSlots",
          value: function allocatePureFunctionSlots(numSlots) {
            var originalSlots = this._pureFunctionSlots;
            this._pureFunctionSlots += numSlots;
            return originalSlots;
          }
        }, {
          key: "allocateBindingSlots",
          value: function allocateBindingSlots(value) {
            this._bindingSlots += value instanceof Interpolation ? value.expressions.length : 1;
          }
          /**
           * Gets an expression that refers to the implicit receiver. The implicit
           * receiver is always the root level context.
           */

        }, {
          key: "getImplicitReceiverExpr",
          value: function getImplicitReceiverExpr() {
            if (this._implicitReceiverExpr) {
              return this._implicitReceiverExpr;
            }

            return this._implicitReceiverExpr = this.level === 0 ? variable(CONTEXT_NAME) : this._bindingScope.getOrCreateSharedContextVar(0);
          }
        }, {
          key: "convertPropertyBinding",
          value: function convertPropertyBinding(value) {
            var _this$_tempVariables;

            var convertedPropertyBinding = _convertPropertyBinding(this, this.getImplicitReceiverExpr(), value, this.bindingContext(), BindingForm.Expression, function () {
              return error('Unexpected interpolation');
            });

            var valExpr = convertedPropertyBinding.currValExpr;

            (_this$_tempVariables = this._tempVariables).push.apply(_this$_tempVariables, _toConsumableArray(convertedPropertyBinding.stmts));

            return valExpr;
          }
          /**
           * Gets a list of argument expressions to pass to an update instruction expression. Also updates
           * the temp variables state with temp variables that were identified as needing to be created
           * while visiting the arguments.
           * @param value The original expression we will be resolving an arguments list from.
           */

        }, {
          key: "getUpdateInstructionArguments",
          value: function getUpdateInstructionArguments(value) {
            var _this$_tempVariables2;

            var _convertUpdateArgumen = convertUpdateArguments(this, this.getImplicitReceiverExpr(), value, this.bindingContext()),
                args = _convertUpdateArgumen.args,
                stmts = _convertUpdateArgumen.stmts;

            (_this$_tempVariables2 = this._tempVariables).push.apply(_this$_tempVariables2, _toConsumableArray(stmts));

            return args;
          }
        }, {
          key: "matchDirectives",
          value: function matchDirectives(elementName, elOrTpl) {
            var _this313 = this;

            if (this.directiveMatcher) {
              var selector = createCssSelector(elementName, getAttrsForDirectiveMatching(elOrTpl));
              this.directiveMatcher.match(selector, function (cssSelector, staticType) {
                _this313.directives.add(staticType);
              });
            }
          }
          /**
           * Prepares all attribute expression values for the `TAttributes` array.
           *
           * The purpose of this function is to properly construct an attributes array that
           * is passed into the `elementStart` (or just `element`) functions. Because there
           * are many different types of attributes, the array needs to be constructed in a
           * special way so that `elementStart` can properly evaluate them.
           *
           * The format looks like this:
           *
           * ```
           * attrs = [prop, value, prop2, value2,
           *   PROJECT_AS, selector,
           *   CLASSES, class1, class2,
           *   STYLES, style1, value1, style2, value2,
           *   BINDINGS, name1, name2, name3,
           *   TEMPLATE, name4, name5, name6,
           *   I18N, name7, name8, ...]
           * ```
           *
           * Note that this function will fully ignore all synthetic (@foo) attribute values
           * because those values are intended to always be generated as property instructions.
           */

        }, {
          key: "getAttributeExpressions",
          value: function getAttributeExpressions(elementName, renderAttributes, inputs, outputs, styles) {
            var templateAttrs = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];
            var boundI18nAttrs = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : [];
            var alreadySeen = new Set();
            var attrExprs = [];
            var ngProjectAsAttr;

            var _iterator26 = _createForOfIteratorHelper(renderAttributes),
                _step26;

            try {
              for (_iterator26.s(); !(_step26 = _iterator26.n()).done;) {
                var attr = _step26.value;

                if (attr.name === NG_PROJECT_AS_ATTR_NAME) {
                  ngProjectAsAttr = attr;
                } // Note that static i18n attributes aren't in the i18n array,
                // because they're treated in the same way as regular attributes.


                if (attr.i18n) {
                  // When i18n attributes are present on elements with structural directives
                  // (e.g. `<div *ngIf title="Hello" i18n-title>`), we want to avoid generating
                  // duplicate i18n translation blocks for `ɵɵtemplate` and `ɵɵelement` instruction
                  // attributes. So we do a cache lookup to see if suitable i18n translation block
                  // already exists.
                  var i18nVarRefsCache = this._constants.i18nVarRefsCache;
                  var i18nVarRef = void 0;

                  if (i18nVarRefsCache.has(attr.i18n)) {
                    i18nVarRef = i18nVarRefsCache.get(attr.i18n);
                  } else {
                    i18nVarRef = this.i18nTranslate(attr.i18n);
                    i18nVarRefsCache.set(attr.i18n, i18nVarRef);
                  }

                  attrExprs.push(literal(attr.name), i18nVarRef);
                } else {
                  attrExprs.push.apply(attrExprs, _toConsumableArray(getAttributeNameLiterals(attr.name)).concat([trustedConstAttribute(elementName, attr)]));
                }
              } // Keep ngProjectAs next to the other name, value pairs so we can verify that we match
              // ngProjectAs marker in the attribute name slot.

            } catch (err) {
              _iterator26.e(err);
            } finally {
              _iterator26.f();
            }

            if (ngProjectAsAttr) {
              attrExprs.push.apply(attrExprs, _toConsumableArray(getNgProjectAsLiteral(ngProjectAsAttr)));
            }

            function addAttrExpr(key, value) {
              if (typeof key === 'string') {
                if (!alreadySeen.has(key)) {
                  attrExprs.push.apply(attrExprs, _toConsumableArray(getAttributeNameLiterals(key)));
                  value !== undefined && attrExprs.push(value);
                  alreadySeen.add(key);
                }
              } else {
                attrExprs.push(literal(key));
              }
            } // it's important that this occurs before BINDINGS and TEMPLATE because once `elementStart`
            // comes across the BINDINGS or TEMPLATE markers then it will continue reading each value as
            // as single property value cell by cell.


            if (styles) {
              styles.populateInitialStylingAttrs(attrExprs);
            }

            if (inputs.length || outputs.length) {
              var attrsLengthBeforeInputs = attrExprs.length;

              for (var i = 0; i < inputs.length; i++) {
                var input = inputs[i]; // We don't want the animation and attribute bindings in the
                // attributes array since they aren't used for directive matching.

                if (input.type !== 4
                /* Animation */
                && input.type !== 1
                /* Attribute */
                ) {
                    addAttrExpr(input.name);
                  }
              }

              for (var _i9 = 0; _i9 < outputs.length; _i9++) {
                var output = outputs[_i9];

                if (output.type !== 1
                /* Animation */
                ) {
                    addAttrExpr(output.name);
                  }
              } // this is a cheap way of adding the marker only after all the input/output
              // values have been filtered (by not including the animation ones) and added
              // to the expressions. The marker is important because it tells the runtime
              // code that this is where attributes without values start...


              if (attrExprs.length !== attrsLengthBeforeInputs) {
                attrExprs.splice(attrsLengthBeforeInputs, 0, literal(3
                /* Bindings */
                ));
              }
            }

            if (templateAttrs.length) {
              attrExprs.push(literal(4
              /* Template */
              ));
              templateAttrs.forEach(function (attr) {
                return addAttrExpr(attr.name);
              });
            }

            if (boundI18nAttrs.length) {
              attrExprs.push(literal(6
              /* I18n */
              ));
              boundI18nAttrs.forEach(function (attr) {
                return addAttrExpr(attr.name);
              });
            }

            return attrExprs;
          }
        }, {
          key: "addToConsts",
          value: function addToConsts(expression) {
            if (isNull(expression)) {
              return TYPED_NULL_EXPR;
            }

            var consts = this._constants.constExpressions; // Try to reuse a literal that's already in the array, if possible.

            for (var i = 0; i < consts.length; i++) {
              if (consts[i].isEquivalent(expression)) {
                return literal(i);
              }
            }

            return literal(consts.push(expression) - 1);
          }
        }, {
          key: "addAttrsToConsts",
          value: function addAttrsToConsts(attrs) {
            return attrs.length > 0 ? this.addToConsts(literalArr(attrs)) : TYPED_NULL_EXPR;
          }
        }, {
          key: "prepareRefsArray",
          value: function prepareRefsArray(references) {
            var _this314 = this;

            if (!references || references.length === 0) {
              return TYPED_NULL_EXPR;
            }

            var refsParam = flatten(references.map(function (reference) {
              var slot = _this314.allocateDataSlot(); // Generate the update temporary.


              var variableName = _this314._bindingScope.freshReferenceName();

              var retrievalLevel = _this314.level;
              var lhs = variable(variableName);

              _this314._bindingScope.set(retrievalLevel, reference.name, lhs, 0
              /* DEFAULT */
              , function (scope, relativeLevel) {
                // e.g. nextContext(2);
                var nextContextStmt = relativeLevel > 0 ? [generateNextContextExpr(relativeLevel).toStmt()] : []; // e.g. const $foo$ = reference(1);

                var refExpr = lhs.set(importExpr(Identifiers$1.reference).callFn([literal(slot)]));
                return nextContextStmt.concat(refExpr.toConstDecl());
              }, true);

              return [reference.name, reference.value];
            }));
            return asLiteral(refsParam);
          }
        }, {
          key: "prepareListenerParameter",
          value: function prepareListenerParameter(tagName, outputAst, index) {
            var _this315 = this;

            return function () {
              var eventName = outputAst.name;
              var bindingFnName = outputAst.type === 1
              /* Animation */
              ? // synthetic @listener.foo values are treated the exact same as are standard listeners
              prepareSyntheticListenerFunctionName(eventName, outputAst.phase) : sanitizeIdentifier(eventName);
              var handlerName = "".concat(_this315.templateName, "_").concat(tagName, "_").concat(bindingFnName, "_").concat(index, "_listener");

              var scope = _this315._bindingScope.nestedScope(_this315._bindingScope.bindingLevel, EVENT_BINDING_SCOPE_GLOBALS);

              return prepareEventListenerParameters(outputAst, handlerName, scope);
            };
          }
        }]);

        return TemplateDefinitionBuilder;
      }();

      var ValueConverter = /*#__PURE__*/function (_AstMemoryEfficientTr) {
        _inherits2(ValueConverter, _AstMemoryEfficientTr);

        var _super156 = _createSuper(ValueConverter);

        function ValueConverter(constantPool, allocateSlot, allocatePureFunctionSlots, definePipe) {
          var _this316;

          _classCallCheck2(this, ValueConverter);

          _this316 = _super156.call(this);
          _this316.constantPool = constantPool;
          _this316.allocateSlot = allocateSlot;
          _this316.allocatePureFunctionSlots = allocatePureFunctionSlots;
          _this316.definePipe = definePipe;
          _this316._pipeBindExprs = [];
          return _this316;
        } // AstMemoryEfficientTransformer


        _createClass2(ValueConverter, [{
          key: "visitPipe",
          value: function visitPipe(pipe, context) {
            // Allocate a slot to create the pipe
            var slot = this.allocateSlot();
            var slotPseudoLocal = "PIPE:".concat(slot); // Allocate one slot for the result plus one slot per pipe argument

            var pureFunctionSlot = this.allocatePureFunctionSlots(2 + pipe.args.length);
            var target = new PropertyRead(pipe.span, pipe.sourceSpan, pipe.nameSpan, new ImplicitReceiver(pipe.span, pipe.sourceSpan), slotPseudoLocal);

            var _pipeBindingCallInfo = pipeBindingCallInfo(pipe.args),
                identifier = _pipeBindingCallInfo.identifier,
                isVarLength = _pipeBindingCallInfo.isVarLength;

            this.definePipe(pipe.name, slotPseudoLocal, slot, importExpr(identifier));
            var args = [pipe.exp].concat(_toConsumableArray(pipe.args));
            var convertedArgs = isVarLength ? this.visitAll([new LiteralArray(pipe.span, pipe.sourceSpan, args)]) : this.visitAll(args);
            var pipeBindExpr = new FunctionCall(pipe.span, pipe.sourceSpan, target, [new LiteralPrimitive(pipe.span, pipe.sourceSpan, slot), new LiteralPrimitive(pipe.span, pipe.sourceSpan, pureFunctionSlot)].concat(_toConsumableArray(convertedArgs)));

            this._pipeBindExprs.push(pipeBindExpr);

            return pipeBindExpr;
          }
        }, {
          key: "updatePipeSlotOffsets",
          value: function updatePipeSlotOffsets(bindingSlots) {
            this._pipeBindExprs.forEach(function (pipe) {
              // update the slot offset arg (index 1) to account for binding slots
              var slotOffset = pipe.args[1];
              slotOffset.value += bindingSlots;
            });
          }
        }, {
          key: "visitLiteralArray",
          value: function visitLiteralArray(array, context) {
            var _this317 = this;

            return new BuiltinFunctionCall(array.span, array.sourceSpan, this.visitAll(array.expressions), function (values) {
              // If the literal has calculated (non-literal) elements transform it into
              // calls to literal factories that compose the literal and will cache intermediate
              // values.
              var literal = literalArr(values);
              return getLiteralFactory(_this317.constantPool, literal, _this317.allocatePureFunctionSlots);
            });
          }
        }, {
          key: "visitLiteralMap",
          value: function visitLiteralMap(map, context) {
            var _this318 = this;

            return new BuiltinFunctionCall(map.span, map.sourceSpan, this.visitAll(map.values), function (values) {
              // If the literal has calculated (non-literal) elements  transform it into
              // calls to literal factories that compose the literal and will cache intermediate
              // values.
              var literal = literalMap(values.map(function (value, index) {
                return {
                  key: map.keys[index].key,
                  value: value,
                  quoted: map.keys[index].quoted
                };
              }));
              return getLiteralFactory(_this318.constantPool, literal, _this318.allocatePureFunctionSlots);
            });
          }
        }]);

        return ValueConverter;
      }(AstMemoryEfficientTransformer); // Pipes always have at least one parameter, the value they operate on


      var pipeBindingIdentifiers = [Identifiers$1.pipeBind1, Identifiers$1.pipeBind2, Identifiers$1.pipeBind3, Identifiers$1.pipeBind4];

      function pipeBindingCallInfo(args) {
        var identifier = pipeBindingIdentifiers[args.length];
        return {
          identifier: identifier || Identifiers$1.pipeBindV,
          isVarLength: !identifier
        };
      }

      var pureFunctionIdentifiers = [Identifiers$1.pureFunction0, Identifiers$1.pureFunction1, Identifiers$1.pureFunction2, Identifiers$1.pureFunction3, Identifiers$1.pureFunction4, Identifiers$1.pureFunction5, Identifiers$1.pureFunction6, Identifiers$1.pureFunction7, Identifiers$1.pureFunction8];

      function pureFunctionCallInfo(args) {
        var identifier = pureFunctionIdentifiers[args.length];
        return {
          identifier: identifier || Identifiers$1.pureFunctionV,
          isVarLength: !identifier
        };
      }

      function instruction(span, reference, params) {
        return importExpr(reference, null, span).callFn(params, span);
      } // e.g. x(2);


      function generateNextContextExpr(relativeLevelDiff) {
        return importExpr(Identifiers$1.nextContext).callFn(relativeLevelDiff > 1 ? [literal(relativeLevelDiff)] : []);
      }

      function getLiteralFactory(constantPool, literal$1, allocateSlots) {
        var _constantPool$getLite = constantPool.getLiteralFactory(literal$1),
            literalFactory = _constantPool$getLite.literalFactory,
            literalFactoryArguments = _constantPool$getLite.literalFactoryArguments; // Allocate 1 slot for the result plus 1 per argument


        var startSlot = allocateSlots(1 + literalFactoryArguments.length);

        var _pureFunctionCallInfo = pureFunctionCallInfo(literalFactoryArguments),
            identifier = _pureFunctionCallInfo.identifier,
            isVarLength = _pureFunctionCallInfo.isVarLength; // Literal factories are pure functions that only need to be re-invoked when the parameters
        // change.


        var args = [literal(startSlot), literalFactory];

        if (isVarLength) {
          args.push(literalArr(literalFactoryArguments));
        } else {
          args.push.apply(args, _toConsumableArray(literalFactoryArguments));
        }

        return importExpr(identifier).callFn(args);
      }
      /**
       * Gets an array of literals that can be added to an expression
       * to represent the name and namespace of an attribute. E.g.
       * `:xlink:href` turns into `[AttributeMarker.NamespaceURI, 'xlink', 'href']`.
       *
       * @param name Name of the attribute, including the namespace.
       */


      function getAttributeNameLiterals(name) {
        var _splitNsName5 = splitNsName(name),
            _splitNsName6 = _slicedToArray(_splitNsName5, 2),
            attributeNamespace = _splitNsName6[0],
            attributeName = _splitNsName6[1];

        var nameLiteral = literal(attributeName);

        if (attributeNamespace) {
          return [literal(0
          /* NamespaceURI */
          ), literal(attributeNamespace), nameLiteral];
        }

        return [nameLiteral];
      }
      /** The prefix used to get a shared context in BindingScope's map. */


      var SHARED_CONTEXT_KEY = '$$shared_ctx$$';

      var BindingScope = /*#__PURE__*/function () {
        function BindingScope() {
          var bindingLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
          var parent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
          var globals = arguments.length > 2 ? arguments[2] : undefined;

          _classCallCheck2(this, BindingScope);

          this.bindingLevel = bindingLevel;
          this.parent = parent;
          this.globals = globals;
          /** Keeps a map from local variables to their BindingData. */

          this.map = new Map();
          this.referenceNameIndex = 0;
          this.restoreViewVariable = null;

          if (globals !== undefined) {
            var _iterator27 = _createForOfIteratorHelper(globals),
                _step27;

            try {
              for (_iterator27.s(); !(_step27 = _iterator27.n()).done;) {
                var name = _step27.value;
                this.set(0, name, variable(name));
              }
            } catch (err) {
              _iterator27.e(err);
            } finally {
              _iterator27.f();
            }
          }
        }

        _createClass2(BindingScope, [{
          key: "get",
          value: function get(name) {
            var current = this;

            while (current) {
              var value = current.map.get(name);

              if (value != null) {
                if (current !== this) {
                  // make a local copy and reset the `declare` state
                  value = {
                    retrievalLevel: value.retrievalLevel,
                    lhs: value.lhs,
                    declareLocalCallback: value.declareLocalCallback,
                    declare: false,
                    priority: value.priority,
                    localRef: value.localRef
                  }; // Cache the value locally.

                  this.map.set(name, value); // Possibly generate a shared context var

                  this.maybeGenerateSharedContextVar(value);
                  this.maybeRestoreView(value.retrievalLevel, value.localRef);
                }

                if (value.declareLocalCallback && !value.declare) {
                  value.declare = true;
                }

                return value.lhs;
              }

              current = current.parent;
            } // If we get to this point, we are looking for a property on the top level component
            // - If level === 0, we are on the top and don't need to re-declare `ctx`.
            // - If level > 0, we are in an embedded view. We need to retrieve the name of the
            // local var we used to store the component context, e.g. const $comp$ = x();


            return this.bindingLevel === 0 ? null : this.getComponentProperty(name);
          }
          /**
           * Create a local variable for later reference.
           *
           * @param retrievalLevel The level from which this value can be retrieved
           * @param name Name of the variable.
           * @param lhs AST representing the left hand side of the `let lhs = rhs;`.
           * @param priority The sorting priority of this var
           * @param declareLocalCallback The callback to invoke when declaring this local var
           * @param localRef Whether or not this is a local ref
           */

        }, {
          key: "set",
          value: function set(retrievalLevel, name, lhs) {
            var priority = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
            var
            /* DEFAULT */
            declareLocalCallback = arguments.length > 4 ? arguments[4] : undefined;
            var localRef = arguments.length > 5 ? arguments[5] : undefined;

            if (this.map.has(name)) {
              if (localRef) {
                // Do not throw an error if it's a local ref and do not update existing value,
                // so the first defined ref is always returned.
                return this;
              }

              error("The name ".concat(name, " is already defined in scope to be ").concat(this.map.get(name)));
            }

            this.map.set(name, {
              retrievalLevel: retrievalLevel,
              lhs: lhs,
              declare: false,
              declareLocalCallback: declareLocalCallback,
              priority: priority,
              localRef: localRef || false
            });
            return this;
          } // Implemented as part of LocalResolver.

        }, {
          key: "getLocal",
          value: function getLocal(name) {
            return this.get(name);
          } // Implemented as part of LocalResolver.

        }, {
          key: "notifyImplicitReceiverUse",
          value: function notifyImplicitReceiverUse() {
            if (this.bindingLevel !== 0) {
              // Since the implicit receiver is accessed in an embedded view, we need to
              // ensure that we declare a shared context variable for the current template
              // in the update variables.
              this.map.get(SHARED_CONTEXT_KEY + 0).declare = true;
            }
          }
        }, {
          key: "nestedScope",
          value: function nestedScope(level, globals) {
            var newScope = new BindingScope(level, this, globals);
            if (level > 0) newScope.generateSharedContextVar(0);
            return newScope;
          }
          /**
           * Gets or creates a shared context variable and returns its expression. Note that
           * this does not mean that the shared variable will be declared. Variables in the
           * binding scope will be only declared if they are used.
           */

        }, {
          key: "getOrCreateSharedContextVar",
          value: function getOrCreateSharedContextVar(retrievalLevel) {
            var bindingKey = SHARED_CONTEXT_KEY + retrievalLevel;

            if (!this.map.has(bindingKey)) {
              this.generateSharedContextVar(retrievalLevel);
            } // Shared context variables are always generated as "ReadVarExpr".


            return this.map.get(bindingKey).lhs;
          }
        }, {
          key: "getSharedContextName",
          value: function getSharedContextName(retrievalLevel) {
            var sharedCtxObj = this.map.get(SHARED_CONTEXT_KEY + retrievalLevel); // Shared context variables are always generated as "ReadVarExpr".

            return sharedCtxObj && sharedCtxObj.declare ? sharedCtxObj.lhs : null;
          }
        }, {
          key: "maybeGenerateSharedContextVar",
          value: function maybeGenerateSharedContextVar(value) {
            if (value.priority === 1
            /* CONTEXT */
            && value.retrievalLevel < this.bindingLevel) {
              var sharedCtxObj = this.map.get(SHARED_CONTEXT_KEY + value.retrievalLevel);

              if (sharedCtxObj) {
                sharedCtxObj.declare = true;
              } else {
                this.generateSharedContextVar(value.retrievalLevel);
              }
            }
          }
        }, {
          key: "generateSharedContextVar",
          value: function generateSharedContextVar(retrievalLevel) {
            var lhs = variable(CONTEXT_NAME + this.freshReferenceName());
            this.map.set(SHARED_CONTEXT_KEY + retrievalLevel, {
              retrievalLevel: retrievalLevel,
              lhs: lhs,
              declareLocalCallback: function declareLocalCallback(scope, relativeLevel) {
                // const ctx_r0 = nextContext(2);
                return [lhs.set(generateNextContextExpr(relativeLevel)).toConstDecl()];
              },
              declare: false,
              priority: 2
              /* SHARED_CONTEXT */
              ,
              localRef: false
            });
          }
        }, {
          key: "getComponentProperty",
          value: function getComponentProperty(name) {
            var componentValue = this.map.get(SHARED_CONTEXT_KEY + 0);
            componentValue.declare = true;
            this.maybeRestoreView(0, false);
            return componentValue.lhs.prop(name);
          }
        }, {
          key: "maybeRestoreView",
          value: function maybeRestoreView(retrievalLevel, localRefLookup) {
            // We want to restore the current view in listener fns if:
            // 1 - we are accessing a value in a parent view, which requires walking the view tree rather
            // than using the ctx arg. In this case, the retrieval and binding level will be different.
            // 2 - we are looking up a local ref, which requires restoring the view where the local
            // ref is stored
            if (this.isListenerScope() && (retrievalLevel < this.bindingLevel || localRefLookup)) {
              if (!this.parent.restoreViewVariable) {
                // parent saves variable to generate a shared `const $s$ = getCurrentView();` instruction
                this.parent.restoreViewVariable = variable(this.parent.freshReferenceName());
              }

              this.restoreViewVariable = this.parent.restoreViewVariable;
            }
          }
        }, {
          key: "restoreViewStatement",
          value: function restoreViewStatement() {
            // restoreView($state$);
            return this.restoreViewVariable ? [instruction(null, Identifiers$1.restoreView, [this.restoreViewVariable]).toStmt()] : [];
          }
        }, {
          key: "viewSnapshotStatements",
          value: function viewSnapshotStatements() {
            // const $state$ = getCurrentView();
            var getCurrentViewInstruction = instruction(null, Identifiers$1.getCurrentView, []);
            return this.restoreViewVariable ? [this.restoreViewVariable.set(getCurrentViewInstruction).toConstDecl()] : [];
          }
        }, {
          key: "isListenerScope",
          value: function isListenerScope() {
            return this.parent && this.parent.bindingLevel === this.bindingLevel;
          }
        }, {
          key: "variableDeclarations",
          value: function variableDeclarations() {
            var _this319 = this;

            var currentContextLevel = 0;
            return Array.from(this.map.values()).filter(function (value) {
              return value.declare;
            }).sort(function (a, b) {
              return b.retrievalLevel - a.retrievalLevel || b.priority - a.priority;
            }).reduce(function (stmts, value) {
              var levelDiff = _this319.bindingLevel - value.retrievalLevel;
              var currStmts = value.declareLocalCallback(_this319, levelDiff - currentContextLevel);
              currentContextLevel = levelDiff;
              return stmts.concat(currStmts);
            }, []);
          }
        }, {
          key: "freshReferenceName",
          value: function freshReferenceName() {
            var current = this; // Find the top scope as it maintains the global reference count

            while (current.parent) {
              current = current.parent;
            }

            var ref = "".concat(REFERENCE_PREFIX).concat(current.referenceNameIndex++);
            return ref;
          }
        }], [{
          key: "createRootScope",
          value: function createRootScope() {
            return new BindingScope();
          }
        }]);

        return BindingScope;
      }();
      /**
       * Creates a `CssSelector` given a tag name and a map of attributes
       */


      function createCssSelector(elementName, attributes) {
        var cssSelector = new CssSelector();
        var elementNameNoNs = splitNsName(elementName)[1];
        cssSelector.setElement(elementNameNoNs);
        Object.getOwnPropertyNames(attributes).forEach(function (name) {
          var nameNoNs = splitNsName(name)[1];
          var value = attributes[name];
          cssSelector.addAttribute(nameNoNs, value);

          if (name.toLowerCase() === 'class') {
            var classes = value.trim().split(/\s+/);
            classes.forEach(function (className) {
              return cssSelector.addClassName(className);
            });
          }
        });
        return cssSelector;
      }
      /**
       * Creates an array of expressions out of an `ngProjectAs` attributes
       * which can be added to the instruction parameters.
       */


      function getNgProjectAsLiteral(attribute) {
        // Parse the attribute value into a CssSelectorList. Note that we only take the
        // first selector, because we don't support multiple selectors in ngProjectAs.
        var parsedR3Selector = parseSelectorToR3Selector(attribute.value)[0];
        return [literal(5
        /* ProjectAs */
        ), asLiteral(parsedR3Selector)];
      }
      /**
       * Gets the instruction to generate for an interpolated property
       * @param interpolation An Interpolation AST
       */


      function getPropertyInterpolationExpression(interpolation) {
        switch (getInterpolationArgsLength(interpolation)) {
          case 1:
            return Identifiers$1.propertyInterpolate;

          case 3:
            return Identifiers$1.propertyInterpolate1;

          case 5:
            return Identifiers$1.propertyInterpolate2;

          case 7:
            return Identifiers$1.propertyInterpolate3;

          case 9:
            return Identifiers$1.propertyInterpolate4;

          case 11:
            return Identifiers$1.propertyInterpolate5;

          case 13:
            return Identifiers$1.propertyInterpolate6;

          case 15:
            return Identifiers$1.propertyInterpolate7;

          case 17:
            return Identifiers$1.propertyInterpolate8;

          default:
            return Identifiers$1.propertyInterpolateV;
        }
      }
      /**
       * Gets the instruction to generate for an interpolated attribute
       * @param interpolation An Interpolation AST
       */


      function getAttributeInterpolationExpression(interpolation) {
        switch (getInterpolationArgsLength(interpolation)) {
          case 3:
            return Identifiers$1.attributeInterpolate1;

          case 5:
            return Identifiers$1.attributeInterpolate2;

          case 7:
            return Identifiers$1.attributeInterpolate3;

          case 9:
            return Identifiers$1.attributeInterpolate4;

          case 11:
            return Identifiers$1.attributeInterpolate5;

          case 13:
            return Identifiers$1.attributeInterpolate6;

          case 15:
            return Identifiers$1.attributeInterpolate7;

          case 17:
            return Identifiers$1.attributeInterpolate8;

          default:
            return Identifiers$1.attributeInterpolateV;
        }
      }
      /**
       * Gets the instruction to generate for interpolated text.
       * @param interpolation An Interpolation AST
       */


      function getTextInterpolationExpression(interpolation) {
        switch (getInterpolationArgsLength(interpolation)) {
          case 1:
            return Identifiers$1.textInterpolate;

          case 3:
            return Identifiers$1.textInterpolate1;

          case 5:
            return Identifiers$1.textInterpolate2;

          case 7:
            return Identifiers$1.textInterpolate3;

          case 9:
            return Identifiers$1.textInterpolate4;

          case 11:
            return Identifiers$1.textInterpolate5;

          case 13:
            return Identifiers$1.textInterpolate6;

          case 15:
            return Identifiers$1.textInterpolate7;

          case 17:
            return Identifiers$1.textInterpolate8;

          default:
            return Identifiers$1.textInterpolateV;
        }
      }
      /**
       * Parse a template into render3 `Node`s and additional metadata, with no other dependencies.
       *
       * @param template text of the template to parse
       * @param templateUrl URL to use for source mapping of the parsed template
       * @param options options to modify how the template is parsed
       */


      function parseTemplate(template, templateUrl) {
        var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};

        var _a;

        var interpolationConfig = options.interpolationConfig,
            preserveWhitespaces = options.preserveWhitespaces,
            enableI18nLegacyMessageIdFormat = options.enableI18nLegacyMessageIdFormat;
        var isInline = (_a = options.isInline) !== null && _a !== void 0 ? _a : false;
        var bindingParser = makeBindingParser(interpolationConfig);
        var htmlParser = new HtmlParser();
        var parseResult = htmlParser.parse(template, templateUrl, Object.assign(Object.assign({
          leadingTriviaChars: LEADING_TRIVIA_CHARS
        }, options), {
          tokenizeExpansionForms: true
        }));

        if (parseResult.errors && parseResult.errors.length > 0) {
          // TODO(ayazhafiz): we may not always want to bail out at this point (e.g. in
          // the context of a language service).
          return {
            interpolationConfig: interpolationConfig,
            preserveWhitespaces: preserveWhitespaces,
            template: template,
            templateUrl: templateUrl,
            isInline: isInline,
            errors: parseResult.errors,
            nodes: [],
            styleUrls: [],
            styles: [],
            ngContentSelectors: []
          };
        }

        var rootNodes = parseResult.rootNodes; // process i18n meta information (scan attributes, generate ids)
        // before we run whitespace removal process, because existing i18n
        // extraction process (ng extract-i18n) relies on a raw content to generate
        // message ids

        var i18nMetaVisitor = new I18nMetaVisitor(interpolationConfig,
        /* keepI18nAttrs */
        !preserveWhitespaces, enableI18nLegacyMessageIdFormat);
        var i18nMetaResult = i18nMetaVisitor.visitAllWithErrors(rootNodes);

        if (i18nMetaResult.errors && i18nMetaResult.errors.length > 0) {
          return {
            interpolationConfig: interpolationConfig,
            preserveWhitespaces: preserveWhitespaces,
            template: template,
            templateUrl: templateUrl,
            isInline: isInline,
            errors: i18nMetaResult.errors,
            nodes: [],
            styleUrls: [],
            styles: [],
            ngContentSelectors: []
          };
        }

        rootNodes = i18nMetaResult.rootNodes;

        if (!preserveWhitespaces) {
          rootNodes = visitAll$1(new WhitespaceVisitor(), rootNodes); // run i18n meta visitor again in case whitespaces are removed (because that might affect
          // generated i18n message content) and first pass indicated that i18n content is present in a
          // template. During this pass i18n IDs generated at the first pass will be preserved, so we can
          // mimic existing extraction process (ng extract-i18n)

          if (i18nMetaVisitor.hasI18nMeta) {
            rootNodes = visitAll$1(new I18nMetaVisitor(interpolationConfig,
            /* keepI18nAttrs */
            false), rootNodes);
          }
        }

        var _htmlAstToRender3Ast = htmlAstToRender3Ast(rootNodes, bindingParser),
            nodes = _htmlAstToRender3Ast.nodes,
            errors = _htmlAstToRender3Ast.errors,
            styleUrls = _htmlAstToRender3Ast.styleUrls,
            styles = _htmlAstToRender3Ast.styles,
            ngContentSelectors = _htmlAstToRender3Ast.ngContentSelectors;

        return {
          interpolationConfig: interpolationConfig,
          preserveWhitespaces: preserveWhitespaces,
          errors: errors.length > 0 ? errors : null,
          template: template,
          templateUrl: templateUrl,
          isInline: isInline,
          nodes: nodes,
          styleUrls: styleUrls,
          styles: styles,
          ngContentSelectors: ngContentSelectors
        };
      }

      var elementRegistry = new DomElementSchemaRegistry();
      /**
       * Construct a `BindingParser` with a default configuration.
       */

      function makeBindingParser() {
        var interpolationConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_INTERPOLATION_CONFIG;
        return new BindingParser(new IvyParser(new Lexer()), interpolationConfig, elementRegistry, null, []);
      }

      function resolveSanitizationFn(context, isAttribute) {
        switch (context) {
          case SecurityContext.HTML:
            return importExpr(Identifiers$1.sanitizeHtml);

          case SecurityContext.SCRIPT:
            return importExpr(Identifiers$1.sanitizeScript);

          case SecurityContext.STYLE:
            // the compiler does not fill in an instruction for [style.prop?] binding
            // values because the style algorithm knows internally what props are subject
            // to sanitization (only [attr.style] values are explicitly sanitized)
            return isAttribute ? importExpr(Identifiers$1.sanitizeStyle) : null;

          case SecurityContext.URL:
            return importExpr(Identifiers$1.sanitizeUrl);

          case SecurityContext.RESOURCE_URL:
            return importExpr(Identifiers$1.sanitizeResourceUrl);

          default:
            return null;
        }
      }

      function trustedConstAttribute(tagName, attr) {
        var value = asLiteral(attr.value);

        if (isTrustedTypesSink(tagName, attr.name)) {
          switch (elementRegistry.securityContext(tagName, attr.name,
          /* isAttribute */
          true)) {
            case SecurityContext.HTML:
              return taggedTemplate(importExpr(Identifiers$1.trustConstantHtml), new TemplateLiteral([new TemplateLiteralElement(attr.value)], []), undefined, attr.valueSpan);
            // NB: no SecurityContext.SCRIPT here, as the corresponding tags are stripped by the compiler.

            case SecurityContext.RESOURCE_URL:
              return taggedTemplate(importExpr(Identifiers$1.trustConstantResourceUrl), new TemplateLiteral([new TemplateLiteralElement(attr.value)], []), undefined, attr.valueSpan);

            default:
              return value;
          }
        } else {
          return value;
        }
      }

      function isSingleElementTemplate(children) {
        return children.length === 1 && children[0] instanceof Element;
      }

      function isTextNode(node) {
        return node instanceof Text || node instanceof BoundText || node instanceof Icu;
      }

      function hasTextChildrenOnly(children) {
        return children.every(isTextNode);
      }
      /** Name of the global variable that is used to determine if we use Closure translations or not */


      var NG_I18N_CLOSURE_MODE = 'ngI18nClosureMode';
      /**
       * Generate statements that define a given translation message.
       *
       * ```
       * var I18N_1;
       * if (typeof ngI18nClosureMode !== undefined && ngI18nClosureMode) {
       *     var MSG_EXTERNAL_XXX = goog.getMsg(
       *          "Some message with {$interpolation}!",
       *          { "interpolation": "\uFFFD0\uFFFD" }
       *     );
       *     I18N_1 = MSG_EXTERNAL_XXX;
       * }
       * else {
       *     I18N_1 = $localize`Some message with ${'\uFFFD0\uFFFD'}!`;
       * }
       * ```
       *
       * @param message The original i18n AST message node
       * @param variable The variable that will be assigned the translation, e.g. `I18N_1`.
       * @param closureVar The variable for Closure `goog.getMsg` calls, e.g. `MSG_EXTERNAL_XXX`.
       * @param params Object mapping placeholder names to their values (e.g.
       * `{ "interpolation": "\uFFFD0\uFFFD" }`).
       * @param transformFn Optional transformation function that will be applied to the translation (e.g.
       * post-processing).
       * @returns An array of statements that defined a given translation.
       */

      function getTranslationDeclStmts(message, variable, closureVar) {
        var params = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
        var transformFn = arguments.length > 4 ? arguments[4] : undefined;
        var statements = [declareI18nVariable(variable), ifStmt(createClosureModeGuard(), createGoogleGetMsgStatements(variable, message, closureVar, i18nFormatPlaceholderNames(params,
        /* useCamelCase */
        true)), createLocalizeStatements(variable, message, i18nFormatPlaceholderNames(params,
        /* useCamelCase */
        false)))];

        if (transformFn) {
          statements.push(new ExpressionStatement(variable.set(transformFn(variable))));
        }

        return statements;
      }
      /**
       * Create the expression that will be used to guard the closure mode block
       * It is equivalent to:
       *
       * ```
       * typeof ngI18nClosureMode !== undefined && ngI18nClosureMode
       * ```
       */


      function createClosureModeGuard() {
        return typeofExpr(variable(NG_I18N_CLOSURE_MODE)).notIdentical(literal('undefined', STRING_TYPE)).and(variable(NG_I18N_CLOSURE_MODE));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var EMPTY_ARRAY = []; // This regex matches any binding names that contain the "attr." prefix, e.g. "attr.required"
      // If there is a match, the first matching group will contain the attribute name to bind.

      var ATTR_REGEX = /attr\.([^\]]+)/;

      function baseDirectiveFields(meta, constantPool, bindingParser) {
        var definitionMap = new DefinitionMap();
        var selectors = parseSelectorToR3Selector(meta.selector); // e.g. `type: MyDirective`

        definitionMap.set('type', meta.internalType); // e.g. `selectors: [['', 'someDir', '']]`

        if (selectors.length > 0) {
          definitionMap.set('selectors', asLiteral(selectors));
        }

        if (meta.queries.length > 0) {
          // e.g. `contentQueries: (rf, ctx, dirIndex) => { ... }
          definitionMap.set('contentQueries', createContentQueriesFunction(meta.queries, constantPool, meta.name));
        }

        if (meta.viewQueries.length) {
          definitionMap.set('viewQuery', createViewQueriesFunction(meta.viewQueries, constantPool, meta.name));
        } // e.g. `hostBindings: (rf, ctx) => { ... }


        definitionMap.set('hostBindings', createHostBindingsFunction(meta.host, meta.typeSourceSpan, bindingParser, constantPool, meta.selector || '', meta.name, definitionMap)); // e.g 'inputs: {a: 'a'}`

        definitionMap.set('inputs', conditionallyCreateMapObjectLiteral(meta.inputs, true)); // e.g 'outputs: {a: 'a'}`

        definitionMap.set('outputs', conditionallyCreateMapObjectLiteral(meta.outputs));

        if (meta.exportAs !== null) {
          definitionMap.set('exportAs', literalArr(meta.exportAs.map(function (e) {
            return literal(e);
          })));
        }

        return definitionMap;
      }
      /**
       * Add features to the definition map.
       */


      function addFeatures(definitionMap, meta) {
        // e.g. `features: [NgOnChangesFeature]`
        var features = [];
        var providers = meta.providers;
        var viewProviders = meta.viewProviders;

        if (providers || viewProviders) {
          var args = [providers || new LiteralArrayExpr([])];

          if (viewProviders) {
            args.push(viewProviders);
          }

          features.push(importExpr(Identifiers$1.ProvidersFeature).callFn(args));
        }

        if (meta.usesInheritance) {
          features.push(importExpr(Identifiers$1.InheritDefinitionFeature));
        }

        if (meta.fullInheritance) {
          features.push(importExpr(Identifiers$1.CopyDefinitionFeature));
        }

        if (meta.lifecycle.usesOnChanges) {
          features.push(importExpr(Identifiers$1.NgOnChangesFeature));
        }

        if (features.length) {
          definitionMap.set('features', literalArr(features));
        }
      }
      /**
       * Compile a directive for the render3 runtime as defined by the `R3DirectiveMetadata`.
       */


      function compileDirectiveFromMetadata(meta, constantPool, bindingParser) {
        var definitionMap = baseDirectiveFields(meta, constantPool, bindingParser);
        addFeatures(definitionMap, meta);
        var expression = importExpr(Identifiers$1.defineDirective).callFn([definitionMap.toLiteralMap()]);
        var type = createDirectiveType(meta);
        return {
          expression: expression,
          type: type
        };
      }
      /**
       * Compile a component for the render3 runtime as defined by the `R3ComponentMetadata`.
       */


      function compileComponentFromMetadata(meta, constantPool, bindingParser) {
        var definitionMap = baseDirectiveFields(meta, constantPool, bindingParser);
        addFeatures(definitionMap, meta);
        var selector = meta.selector && CssSelector.parse(meta.selector);
        var firstSelector = selector && selector[0]; // e.g. `attr: ["class", ".my.app"]`
        // This is optional an only included if the first selector of a component specifies attributes.

        if (firstSelector) {
          var selectorAttributes = firstSelector.getAttrs();

          if (selectorAttributes.length) {
            definitionMap.set('attrs', constantPool.getConstLiteral(literalArr(selectorAttributes.map(function (value) {
              return value != null ? literal(value) : literal(undefined);
            })),
            /* forceShared */
            true));
          }
        } // Generate the CSS matcher that recognize directive


        var directiveMatcher = null;

        if (meta.directives.length > 0) {
          var matcher = new SelectorMatcher();

          var _iterator28 = _createForOfIteratorHelper(meta.directives),
              _step28;

          try {
            for (_iterator28.s(); !(_step28 = _iterator28.n()).done;) {
              var _step28$value = _step28.value,
                  _selector = _step28$value.selector,
                  _type2 = _step28$value.type;
              matcher.addSelectables(CssSelector.parse(_selector), _type2);
            }
          } catch (err) {
            _iterator28.e(err);
          } finally {
            _iterator28.f();
          }

          directiveMatcher = matcher;
        } // e.g. `template: function MyComponent_Template(_ctx, _cm) {...}`


        var templateTypeName = meta.name;
        var templateName = templateTypeName ? "".concat(templateTypeName, "_Template") : null;
        var directivesUsed = new Set();
        var pipesUsed = new Set();
        var changeDetection = meta.changeDetection;
        var template = meta.template;
        var templateBuilder = new TemplateDefinitionBuilder(constantPool, BindingScope.createRootScope(), 0, templateTypeName, null, null, templateName, directiveMatcher, directivesUsed, meta.pipes, pipesUsed, Identifiers$1.namespaceHTML, meta.relativeContextFilePath, meta.i18nUseExternalIds);
        var templateFunctionExpression = templateBuilder.buildTemplateFunction(template.nodes, []); // We need to provide this so that dynamically generated components know what
        // projected content blocks to pass through to the component when it is instantiated.

        var ngContentSelectors = templateBuilder.getNgContentSelectors();

        if (ngContentSelectors) {
          definitionMap.set('ngContentSelectors', ngContentSelectors);
        } // e.g. `decls: 2`


        definitionMap.set('decls', literal(templateBuilder.getConstCount())); // e.g. `vars: 2`

        definitionMap.set('vars', literal(templateBuilder.getVarCount())); // Generate `consts` section of ComponentDef:
        // - either as an array:
        //   `consts: [['one', 'two'], ['three', 'four']]`
        // - or as a factory function in case additional statements are present (to support i18n):
        //   `consts: function() { var i18n_0; if (ngI18nClosureMode) {...} else {...} return [i18n_0]; }`

        var _templateBuilder$getC = templateBuilder.getConsts(),
            constExpressions = _templateBuilder$getC.constExpressions,
            prepareStatements = _templateBuilder$getC.prepareStatements;

        if (constExpressions.length > 0) {
          var constsExpr = literalArr(constExpressions); // Prepare statements are present - turn `consts` into a function.

          if (prepareStatements.length > 0) {
            constsExpr = fn([], [].concat(_toConsumableArray(prepareStatements), [new ReturnStatement(constsExpr)]));
          }

          definitionMap.set('consts', constsExpr);
        }

        definitionMap.set('template', templateFunctionExpression); // e.g. `directives: [MyDirective]`

        if (directivesUsed.size) {
          var directivesList = literalArr(Array.from(directivesUsed));
          var directivesExpr = compileDeclarationList(directivesList, meta.declarationListEmitMode);
          definitionMap.set('directives', directivesExpr);
        } // e.g. `pipes: [MyPipe]`


        if (pipesUsed.size) {
          var pipesList = literalArr(Array.from(pipesUsed));
          var pipesExpr = compileDeclarationList(pipesList, meta.declarationListEmitMode);
          definitionMap.set('pipes', pipesExpr);
        }

        if (meta.encapsulation === null) {
          meta.encapsulation = ViewEncapsulation.Emulated;
        } // e.g. `styles: [str1, str2]`


        if (meta.styles && meta.styles.length) {
          var styleValues = meta.encapsulation == ViewEncapsulation.Emulated ? compileStyles(meta.styles, CONTENT_ATTR, HOST_ATTR) : meta.styles;
          var strings = styleValues.map(function (str) {
            return constantPool.getConstLiteral(literal(str));
          });
          definitionMap.set('styles', literalArr(strings));
        } else if (meta.encapsulation === ViewEncapsulation.Emulated) {
          // If there is no style, don't generate css selectors on elements
          meta.encapsulation = ViewEncapsulation.None;
        } // Only set view encapsulation if it's not the default value


        if (meta.encapsulation !== ViewEncapsulation.Emulated) {
          definitionMap.set('encapsulation', literal(meta.encapsulation));
        } // e.g. `animation: [trigger('123', [])]`


        if (meta.animations !== null) {
          definitionMap.set('data', literalMap([{
            key: 'animation',
            value: meta.animations,
            quoted: false
          }]));
        } // Only set the change detection flag if it's defined and it's not the default.


        if (changeDetection != null && changeDetection !== ChangeDetectionStrategy.Default) {
          definitionMap.set('changeDetection', literal(changeDetection));
        }

        var expression = importExpr(Identifiers$1.defineComponent).callFn([definitionMap.toLiteralMap()]);
        var type = createComponentType(meta);
        return {
          expression: expression,
          type: type
        };
      }
      /**
       * Creates the type specification from the component meta. This type is inserted into .d.ts files
       * to be consumed by upstream compilations.
       */


      function createComponentType(meta) {
        var typeParams = createDirectiveTypeParams(meta);
        typeParams.push(stringArrayAsType(meta.template.ngContentSelectors));
        return expressionType(importExpr(Identifiers$1.ComponentDefWithMeta, typeParams));
      }
      /**
       * Compiles the array literal of declarations into an expression according to the provided emit
       * mode.
       */


      function compileDeclarationList(list, mode) {
        switch (mode) {
          case 0
          /* Direct */
          :
            // directives: [MyDir],
            return list;

          case 1
          /* Closure */
          :
            // directives: function () { return [MyDir]; }
            return fn([], [new ReturnStatement(list)]);

          case 2
          /* ClosureResolved */
          :
            // directives: function () { return [MyDir].map(ng.resolveForwardRef); }
            var resolvedList = list.callMethod('map', [importExpr(Identifiers$1.resolveForwardRef)]);
            return fn([], [new ReturnStatement(resolvedList)]);
        }
      }
      /**
       * A wrapper around `compileDirective` which depends on render2 global analysis data as its input
       * instead of the `R3DirectiveMetadata`.
       *
       * `R3DirectiveMetadata` is computed from `CompileDirectiveMetadata` and other statically reflected
       * information.
       */


      function compileDirectiveFromRender2(outputCtx, directive, reflector, bindingParser) {
        var name = identifierName(directive.type);
        name || error("Cannot resolver the name of ".concat(directive.type));
        var definitionField = outputCtx.constantPool.propertyNameOf(1
        /* Directive */
        );
        var meta = directiveMetadataFromGlobalMetadata(directive, outputCtx, reflector);
        var res = compileDirectiveFromMetadata(meta, outputCtx.constantPool, bindingParser);
        var factoryRes = compileFactoryFunction(Object.assign(Object.assign({}, meta), {
          injectFn: Identifiers$1.directiveInject,
          target: R3FactoryTarget.Directive
        }));
        var ngFactoryDefStatement = new ClassStmt(name, null, [new ClassField('ɵfac', INFERRED_TYPE, [StmtModifier.Static], factoryRes.factory)], [], new ClassMethod(null, [], []), []);
        var directiveDefStatement = new ClassStmt(name, null, [new ClassField(definitionField, INFERRED_TYPE, [StmtModifier.Static], res.expression)], [], new ClassMethod(null, [], []), []); // Create the partial class to be merged with the actual class.

        outputCtx.statements.push(ngFactoryDefStatement, directiveDefStatement);
      }
      /**
       * A wrapper around `compileComponent` which depends on render2 global analysis data as its input
       * instead of the `R3DirectiveMetadata`.
       *
       * `R3ComponentMetadata` is computed from `CompileDirectiveMetadata` and other statically reflected
       * information.
       */


      function compileComponentFromRender2(outputCtx, component, render3Ast, reflector, bindingParser, directiveTypeBySel, pipeTypeByName) {
        var name = identifierName(component.type);
        name || error("Cannot resolver the name of ".concat(component.type));
        var definitionField = outputCtx.constantPool.propertyNameOf(2
        /* Component */
        );
        var summary = component.toSummary(); // Compute the R3ComponentMetadata from the CompileDirectiveMetadata

        var meta = Object.assign(Object.assign({}, directiveMetadataFromGlobalMetadata(component, outputCtx, reflector)), {
          selector: component.selector,
          template: {
            nodes: render3Ast.nodes,
            ngContentSelectors: render3Ast.ngContentSelectors
          },
          directives: [],
          pipes: typeMapToExpressionMap(pipeTypeByName, outputCtx),
          viewQueries: queriesFromGlobalMetadata(component.viewQueries, outputCtx),
          declarationListEmitMode: 0
          /* Direct */
          ,
          styles: summary.template && summary.template.styles || EMPTY_ARRAY,
          encapsulation: summary.template && summary.template.encapsulation || ViewEncapsulation.Emulated,
          interpolation: DEFAULT_INTERPOLATION_CONFIG,
          animations: null,
          viewProviders: component.viewProviders.length > 0 ? new WrappedNodeExpr(component.viewProviders) : null,
          relativeContextFilePath: '',
          i18nUseExternalIds: true
        });
        var res = compileComponentFromMetadata(meta, outputCtx.constantPool, bindingParser);
        var factoryRes = compileFactoryFunction(Object.assign(Object.assign({}, meta), {
          injectFn: Identifiers$1.directiveInject,
          target: R3FactoryTarget.Directive
        }));
        var ngFactoryDefStatement = new ClassStmt(name, null, [new ClassField('ɵfac', INFERRED_TYPE, [StmtModifier.Static], factoryRes.factory)], [], new ClassMethod(null, [], []), []);
        var componentDefStatement = new ClassStmt(name, null, [new ClassField(definitionField, INFERRED_TYPE, [StmtModifier.Static], res.expression)], [], new ClassMethod(null, [], []), []); // Create the partial class to be merged with the actual class.

        outputCtx.statements.push(ngFactoryDefStatement, componentDefStatement);
      }
      /**
       * Compute `R3DirectiveMetadata` given `CompileDirectiveMetadata` and a `CompileReflector`.
       */


      function directiveMetadataFromGlobalMetadata(directive, outputCtx, reflector) {
        // The global-analysis based Ivy mode in ngc is no longer utilized/supported.
        throw new Error('unsupported');
      }
      /**
       * Convert `CompileQueryMetadata` into `R3QueryMetadata`.
       */


      function queriesFromGlobalMetadata(queries, outputCtx) {
        return queries.map(function (query) {
          var read = null;

          if (query.read && query.read.identifier) {
            read = outputCtx.importExpr(query.read.identifier.reference);
          }

          return {
            propertyName: query.propertyName,
            first: query.first,
            predicate: selectorsFromGlobalMetadata(query.selectors, outputCtx),
            descendants: query.descendants,
            read: read,
            emitDistinctChangesOnly: !!query.emitDistinctChangesOnly,
            "static": !!query["static"]
          };
        });
      }
      /**
       * Convert `CompileTokenMetadata` for query selectors into either an expression for a predicate
       * type, or a list of string predicates.
       */


      function selectorsFromGlobalMetadata(selectors, outputCtx) {
        if (selectors.length > 1 || selectors.length == 1 && selectors[0].value) {
          var selectorStrings = selectors.map(function (value) {
            return value.value;
          });
          selectorStrings.some(function (value) {
            return !value;
          }) && error('Found a type among the string selectors expected');
          return outputCtx.constantPool.getConstLiteral(literalArr(selectorStrings.map(function (value) {
            return literal(value);
          })));
        }

        if (selectors.length == 1) {
          var first = selectors[0];

          if (first.identifier) {
            return outputCtx.importExpr(first.identifier.reference);
          }
        }

        error('Unexpected query form');
        return NULL_EXPR;
      }

      function prepareQueryParams(query, constantPool) {
        var parameters = [getQueryPredicate(query, constantPool), literal(toQueryFlags(query))];

        if (query.read) {
          parameters.push(query.read);
        }

        return parameters;
      }
      /**
       * Translates query flags into `TQueryFlags` type in packages/core/src/render3/interfaces/query.ts
       * @param query
       */


      function toQueryFlags(query) {
        return (query.descendants ? 1
        /* descendants */
        : 0
        /* none */
        ) | (query["static"] ? 2
        /* isStatic */
        : 0
        /* none */
        ) | (query.emitDistinctChangesOnly ? 4
        /* emitDistinctChangesOnly */
        : 0
        /* none */
        );
      }

      function convertAttributesToExpressions(attributes) {
        var values = [];

        var _iterator29 = _createForOfIteratorHelper(Object.getOwnPropertyNames(attributes)),
            _step29;

        try {
          for (_iterator29.s(); !(_step29 = _iterator29.n()).done;) {
            var key = _step29.value;
            var value = attributes[key];
            values.push(literal(key), value);
          }
        } catch (err) {
          _iterator29.e(err);
        } finally {
          _iterator29.f();
        }

        return values;
      } // Define and update any content queries


      function createContentQueriesFunction(queries, constantPool, name) {
        var createStatements = [];
        var updateStatements = [];
        var tempAllocator = temporaryAllocator(updateStatements, TEMPORARY_NAME);

        var _iterator30 = _createForOfIteratorHelper(queries),
            _step30;

        try {
          for (_iterator30.s(); !(_step30 = _iterator30.n()).done;) {
            var query = _step30.value;
            // creation, e.g. r3.contentQuery(dirIndex, somePredicate, true, null);
            createStatements.push(importExpr(Identifiers$1.contentQuery).callFn([variable('dirIndex')].concat(_toConsumableArray(prepareQueryParams(query, constantPool)))).toStmt()); // update, e.g. (r3.queryRefresh(tmp = r3.loadQuery()) && (ctx.someDir = tmp));

            var temporary = tempAllocator();
            var getQueryList = importExpr(Identifiers$1.loadQuery).callFn([]);
            var refresh = importExpr(Identifiers$1.queryRefresh).callFn([temporary.set(getQueryList)]);
            var updateDirective = variable(CONTEXT_NAME).prop(query.propertyName).set(query.first ? temporary.prop('first') : temporary);
            updateStatements.push(refresh.and(updateDirective).toStmt());
          }
        } catch (err) {
          _iterator30.e(err);
        } finally {
          _iterator30.f();
        }

        var contentQueriesFnName = name ? "".concat(name, "_ContentQueries") : null;
        return fn([new FnParam(RENDER_FLAGS, NUMBER_TYPE), new FnParam(CONTEXT_NAME, null), new FnParam('dirIndex', null)], [renderFlagCheckIfStmt(1
        /* Create */
        , createStatements), renderFlagCheckIfStmt(2
        /* Update */
        , updateStatements)], INFERRED_TYPE, null, contentQueriesFnName);
      }

      function stringAsType(str) {
        return expressionType(literal(str));
      }

      function stringMapAsType(map) {
        var mapValues = Object.keys(map).map(function (key) {
          var value = Array.isArray(map[key]) ? map[key][0] : map[key];
          return {
            key: key,
            value: literal(value),
            quoted: true
          };
        });
        return expressionType(literalMap(mapValues));
      }

      function stringArrayAsType(arr) {
        return arr.length > 0 ? expressionType(literalArr(arr.map(function (value) {
          return literal(value);
        }))) : NONE_TYPE;
      }

      function createDirectiveTypeParams(meta) {
        // On the type side, remove newlines from the selector as it will need to fit into a TypeScript
        // string literal, which must be on one line.
        var selectorForType = meta.selector !== null ? meta.selector.replace(/\n/g, '') : null;
        return [typeWithParameters(meta.type.type, meta.typeArgumentCount), selectorForType !== null ? stringAsType(selectorForType) : NONE_TYPE, meta.exportAs !== null ? stringArrayAsType(meta.exportAs) : NONE_TYPE, stringMapAsType(meta.inputs), stringMapAsType(meta.outputs), stringArrayAsType(meta.queries.map(function (q) {
          return q.propertyName;
        }))];
      }
      /**
       * Creates the type specification from the directive meta. This type is inserted into .d.ts files
       * to be consumed by upstream compilations.
       */


      function createDirectiveType(meta) {
        var typeParams = createDirectiveTypeParams(meta);
        return expressionType(importExpr(Identifiers$1.DirectiveDefWithMeta, typeParams));
      } // Define and update any view queries


      function createViewQueriesFunction(viewQueries, constantPool, name) {
        var createStatements = [];
        var updateStatements = [];
        var tempAllocator = temporaryAllocator(updateStatements, TEMPORARY_NAME);
        viewQueries.forEach(function (query) {
          // creation, e.g. r3.viewQuery(somePredicate, true);
          var queryDefinition = importExpr(Identifiers$1.viewQuery).callFn(prepareQueryParams(query, constantPool));
          createStatements.push(queryDefinition.toStmt()); // update, e.g. (r3.queryRefresh(tmp = r3.loadQuery()) && (ctx.someDir = tmp));

          var temporary = tempAllocator();
          var getQueryList = importExpr(Identifiers$1.loadQuery).callFn([]);
          var refresh = importExpr(Identifiers$1.queryRefresh).callFn([temporary.set(getQueryList)]);
          var updateDirective = variable(CONTEXT_NAME).prop(query.propertyName).set(query.first ? temporary.prop('first') : temporary);
          updateStatements.push(refresh.and(updateDirective).toStmt());
        });
        var viewQueryFnName = name ? "".concat(name, "_Query") : null;
        return fn([new FnParam(RENDER_FLAGS, NUMBER_TYPE), new FnParam(CONTEXT_NAME, null)], [renderFlagCheckIfStmt(1
        /* Create */
        , createStatements), renderFlagCheckIfStmt(2
        /* Update */
        , updateStatements)], INFERRED_TYPE, null, viewQueryFnName);
      } // Return a host binding function or null if one is not necessary.


      function createHostBindingsFunction(hostBindingsMetadata, typeSourceSpan, bindingParser, constantPool, selector, name, definitionMap) {
        var bindingContext = variable(CONTEXT_NAME);
        var styleBuilder = new StylingBuilder(bindingContext);
        var _hostBindingsMetadata = hostBindingsMetadata.specialAttributes,
            styleAttr = _hostBindingsMetadata.styleAttr,
            classAttr = _hostBindingsMetadata.classAttr;

        if (styleAttr !== undefined) {
          styleBuilder.registerStyleAttr(styleAttr);
        }

        if (classAttr !== undefined) {
          styleBuilder.registerClassAttr(classAttr);
        }

        var createStatements = [];
        var updateStatements = [];
        var hostBindingSourceSpan = typeSourceSpan;
        var directiveSummary = metadataAsSummary(hostBindingsMetadata); // Calculate host event bindings

        var eventBindings = bindingParser.createDirectiveHostEventAsts(directiveSummary, hostBindingSourceSpan);

        if (eventBindings && eventBindings.length) {
          var listeners = createHostListeners(eventBindings, name);
          createStatements.push.apply(createStatements, _toConsumableArray(listeners));
        } // Calculate the host property bindings


        var bindings = bindingParser.createBoundHostProperties(directiveSummary, hostBindingSourceSpan);
        var allOtherBindings = []; // We need to calculate the total amount of binding slots required by
        // all the instructions together before any value conversions happen.
        // Value conversions may require additional slots for interpolation and
        // bindings with pipes. These calculates happen after this block.

        var totalHostVarsCount = 0;
        bindings && bindings.forEach(function (binding) {
          var stylingInputWasSet = styleBuilder.registerInputBasedOnName(binding.name, binding.expression, hostBindingSourceSpan);

          if (stylingInputWasSet) {
            totalHostVarsCount += MIN_STYLING_BINDING_SLOTS_REQUIRED;
          } else {
            allOtherBindings.push(binding);
            totalHostVarsCount++;
          }
        });
        var valueConverter;

        var getValueConverter = function getValueConverter() {
          if (!valueConverter) {
            var hostVarsCountFn = function hostVarsCountFn(numSlots) {
              var originalVarsCount = totalHostVarsCount;
              totalHostVarsCount += numSlots;
              return originalVarsCount;
            };

            valueConverter = new ValueConverter(constantPool, function () {
              return error('Unexpected node');
            }, // new nodes are illegal here
            hostVarsCountFn, function () {
              return error('Unexpected pipe');
            }); // pipes are illegal here
          }

          return valueConverter;
        };

        var propertyBindings = [];
        var attributeBindings = [];
        var syntheticHostBindings = [];
        allOtherBindings.forEach(function (binding) {
          // resolve literal arrays and literal objects
          var value = binding.expression.visit(getValueConverter());
          var bindingExpr = bindingFn(bindingContext, value);

          var _getBindingNameAndIns = getBindingNameAndInstruction(binding),
              bindingName = _getBindingNameAndIns.bindingName,
              instruction = _getBindingNameAndIns.instruction,
              isAttribute = _getBindingNameAndIns.isAttribute;

          var securityContexts = bindingParser.calcPossibleSecurityContexts(selector, bindingName, isAttribute).filter(function (context) {
            return context !== SecurityContext.NONE;
          });
          var sanitizerFn = null;

          if (securityContexts.length) {
            if (securityContexts.length === 2 && securityContexts.indexOf(SecurityContext.URL) > -1 && securityContexts.indexOf(SecurityContext.RESOURCE_URL) > -1) {
              // Special case for some URL attributes (such as "src" and "href") that may be a part
              // of different security contexts. In this case we use special santitization function and
              // select the actual sanitizer at runtime based on a tag name that is provided while
              // invoking sanitization function.
              sanitizerFn = importExpr(Identifiers$1.sanitizeUrlOrResourceUrl);
            } else {
              sanitizerFn = resolveSanitizationFn(securityContexts[0], isAttribute);
            }
          }

          var instructionParams = [literal(bindingName), bindingExpr.currValExpr];

          if (sanitizerFn) {
            instructionParams.push(sanitizerFn);
          }

          updateStatements.push.apply(updateStatements, _toConsumableArray(bindingExpr.stmts));

          if (instruction === Identifiers$1.hostProperty) {
            propertyBindings.push(instructionParams);
          } else if (instruction === Identifiers$1.attribute) {
            attributeBindings.push(instructionParams);
          } else if (instruction === Identifiers$1.syntheticHostProperty) {
            syntheticHostBindings.push(instructionParams);
          } else {
            updateStatements.push(importExpr(instruction).callFn(instructionParams).toStmt());
          }
        });

        if (propertyBindings.length > 0) {
          updateStatements.push(chainedInstruction(Identifiers$1.hostProperty, propertyBindings).toStmt());
        }

        if (attributeBindings.length > 0) {
          updateStatements.push(chainedInstruction(Identifiers$1.attribute, attributeBindings).toStmt());
        }

        if (syntheticHostBindings.length > 0) {
          updateStatements.push(chainedInstruction(Identifiers$1.syntheticHostProperty, syntheticHostBindings).toStmt());
        } // since we're dealing with directives/components and both have hostBinding
        // functions, we need to generate a special hostAttrs instruction that deals
        // with both the assignment of styling as well as static attributes to the host
        // element. The instruction below will instruct all initial styling (styling
        // that is inside of a host binding within a directive/component) to be attached
        // to the host element alongside any of the provided host attributes that were
        // collected earlier.


        var hostAttrs = convertAttributesToExpressions(hostBindingsMetadata.attributes);
        styleBuilder.assignHostAttrs(hostAttrs, definitionMap);

        if (styleBuilder.hasBindings) {
          // finally each binding that was registered in the statement above will need to be added to
          // the update block of a component/directive templateFn/hostBindingsFn so that the bindings
          // are evaluated and updated for the element.
          styleBuilder.buildUpdateLevelInstructions(getValueConverter()).forEach(function (instruction) {
            if (instruction.calls.length > 0) {
              var calls = [];
              instruction.calls.forEach(function (call) {
                // we subtract a value of `1` here because the binding slot was already allocated
                // at the top of this method when all the input bindings were counted.
                totalHostVarsCount += Math.max(call.allocateBindingSlots - MIN_STYLING_BINDING_SLOTS_REQUIRED, 0);
                calls.push(convertStylingCall(call, bindingContext, bindingFn));
              });
              updateStatements.push(chainedInstruction(instruction.reference, calls).toStmt());
            }
          });
        }

        if (totalHostVarsCount) {
          definitionMap.set('hostVars', literal(totalHostVarsCount));
        }

        if (createStatements.length > 0 || updateStatements.length > 0) {
          var hostBindingsFnName = name ? "".concat(name, "_HostBindings") : null;
          var statements = [];

          if (createStatements.length > 0) {
            statements.push(renderFlagCheckIfStmt(1
            /* Create */
            , createStatements));
          }

          if (updateStatements.length > 0) {
            statements.push(renderFlagCheckIfStmt(2
            /* Update */
            , updateStatements));
          }

          return fn([new FnParam(RENDER_FLAGS, NUMBER_TYPE), new FnParam(CONTEXT_NAME, null)], statements, INFERRED_TYPE, null, hostBindingsFnName);
        }

        return null;
      }

      function bindingFn(implicit, value) {
        return _convertPropertyBinding(null, implicit, value, 'b', BindingForm.Expression, function () {
          return error('Unexpected interpolation');
        });
      }

      function convertStylingCall(call, bindingContext, bindingFn) {
        return call.params(function (value) {
          return bindingFn(bindingContext, value).currValExpr;
        });
      }

      function getBindingNameAndInstruction(binding) {
        var bindingName = binding.name;
        var instruction; // Check to see if this is an attr binding or a property binding

        var attrMatches = bindingName.match(ATTR_REGEX);

        if (attrMatches) {
          bindingName = attrMatches[1];
          instruction = Identifiers$1.attribute;
        } else {
          if (binding.isAnimation) {
            bindingName = prepareSyntheticPropertyName(bindingName); // host bindings that have a synthetic property (e.g. @foo) should always be rendered
            // in the context of the component and not the parent. Therefore there is a special
            // compatibility instruction available for this purpose.

            instruction = Identifiers$1.syntheticHostProperty;
          } else {
            instruction = Identifiers$1.hostProperty;
          }
        }

        return {
          bindingName: bindingName,
          instruction: instruction,
          isAttribute: !!attrMatches
        };
      }

      function createHostListeners(eventBindings, name) {
        var listeners = [];
        var syntheticListeners = [];
        var instructions = [];
        eventBindings.forEach(function (binding) {
          var bindingName = binding.name && sanitizeIdentifier(binding.name);
          var bindingFnName = binding.type === 1
          /* Animation */
          ? prepareSyntheticListenerFunctionName(bindingName, binding.targetOrPhase) : bindingName;
          var handlerName = name && bindingName ? "".concat(name, "_").concat(bindingFnName, "_HostBindingHandler") : null;
          var params = prepareEventListenerParameters(BoundEvent.fromParsedEvent(binding), handlerName);

          if (binding.type == 1
          /* Animation */
          ) {
              syntheticListeners.push(params);
            } else {
            listeners.push(params);
          }
        });

        if (syntheticListeners.length > 0) {
          instructions.push(chainedInstruction(Identifiers$1.syntheticHostListener, syntheticListeners).toStmt());
        }

        if (listeners.length > 0) {
          instructions.push(chainedInstruction(Identifiers$1.listener, listeners).toStmt());
        }

        return instructions;
      }

      function metadataAsSummary(meta) {
        // clang-format off
        return {
          // This is used by the BindingParser, which only deals with listeners and properties. There's no
          // need to pass attributes to it.
          hostAttributes: {},
          hostListeners: meta.listeners,
          hostProperties: meta.properties
        }; // clang-format on
      }

      function typeMapToExpressionMap(map, outputCtx) {
        // Convert each map entry into another entry where the value is an expression importing the type.
        var entries = Array.from(map).map(function (_ref74) {
          var _ref75 = _slicedToArray(_ref74, 2),
              key = _ref75[0],
              type = _ref75[1];

          return [key, outputCtx.importExpr(type)];
        });
        return new Map(entries);
      }

      var HOST_REG_EXP$1 = /^(?:\[([^\]]+)\])|(?:\(([^\)]+)\))$/;

      function parseHostBindings(host) {
        var attributes = {};
        var listeners = {};
        var properties = {};
        var specialAttributes = {};

        for (var _i10 = 0, _Object$keys2 = Object.keys(host); _i10 < _Object$keys2.length; _i10++) {
          var key = _Object$keys2[_i10];
          var value = host[key];
          var matches = key.match(HOST_REG_EXP$1);

          if (matches === null) {
            switch (key) {
              case 'class':
                if (typeof value !== 'string') {
                  // TODO(alxhub): make this a diagnostic.
                  throw new Error("Class binding must be string");
                }

                specialAttributes.classAttr = value;
                break;

              case 'style':
                if (typeof value !== 'string') {
                  // TODO(alxhub): make this a diagnostic.
                  throw new Error("Style binding must be string");
                }

                specialAttributes.styleAttr = value;
                break;

              default:
                if (typeof value === 'string') {
                  attributes[key] = literal(value);
                } else {
                  attributes[key] = value;
                }

            }
          } else if (matches[1
          /* Binding */
          ] != null) {
            if (typeof value !== 'string') {
              // TODO(alxhub): make this a diagnostic.
              throw new Error("Property binding must be string");
            } // synthetic properties (the ones that have a `@` as a prefix)
            // are still treated the same as regular properties. Therefore
            // there is no point in storing them in a separate map.


            properties[matches[1
            /* Binding */
            ]] = value;
          } else if (matches[2
          /* Event */
          ] != null) {
            if (typeof value !== 'string') {
              // TODO(alxhub): make this a diagnostic.
              throw new Error("Event binding must be string");
            }

            listeners[matches[2
            /* Event */
            ]] = value;
          }
        }

        return {
          attributes: attributes,
          listeners: listeners,
          properties: properties,
          specialAttributes: specialAttributes
        };
      }
      /**
       * Verifies host bindings and returns the list of errors (if any). Empty array indicates that a
       * given set of host bindings has no errors.
       *
       * @param bindings set of host bindings to verify.
       * @param sourceSpan source span where host bindings were defined.
       * @returns array of errors associated with a given set of host bindings.
       */


      function verifyHostBindings(bindings, sourceSpan) {
        var summary = metadataAsSummary(bindings); // TODO: abstract out host bindings verification logic and use it instead of
        // creating events and properties ASTs to detect errors (FW-996)

        var bindingParser = makeBindingParser();
        bindingParser.createDirectiveHostEventAsts(summary, sourceSpan);
        bindingParser.createBoundHostProperties(summary, sourceSpan);
        return bindingParser.errors;
      }

      function compileStyles(styles, selector, hostSelector) {
        var shadowCss = new ShadowCss();
        return styles.map(function (style) {
          return shadowCss.shimCssText(style, selector, hostSelector);
        });
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * An interface for retrieving documents by URL that the compiler uses
       * to load templates.
       */


      var ResourceLoader = /*#__PURE__*/function () {
        function ResourceLoader() {
          _classCallCheck2(this, ResourceLoader);
        }

        _createClass2(ResourceLoader, [{
          key: "get",
          value: function get(url) {
            return '';
          }
        }]);

        return ResourceLoader;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var CompilerFacadeImpl = /*#__PURE__*/function () {
        function CompilerFacadeImpl() {
          var jitEvaluator = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new JitEvaluator();

          _classCallCheck2(this, CompilerFacadeImpl);

          this.jitEvaluator = jitEvaluator;
          this.R3ResolvedDependencyType = R3ResolvedDependencyType;
          this.R3FactoryTarget = R3FactoryTarget;
          this.ResourceLoader = ResourceLoader;
          this.elementSchemaRegistry = new DomElementSchemaRegistry();
        }

        _createClass2(CompilerFacadeImpl, [{
          key: "compilePipe",
          value: function compilePipe(angularCoreEnv, sourceMapUrl, facade) {
            var metadata = {
              name: facade.name,
              type: wrapReference$1(facade.type),
              internalType: new WrappedNodeExpr(facade.type),
              typeArgumentCount: facade.typeArgumentCount,
              deps: convertR3DependencyMetadataArray(facade.deps),
              pipeName: facade.pipeName,
              pure: facade.pure
            };
            var res = compilePipeFromMetadata(metadata);
            return this.jitExpression(res.expression, angularCoreEnv, sourceMapUrl, []);
          }
        }, {
          key: "compilePipeDeclaration",
          value: function compilePipeDeclaration(angularCoreEnv, sourceMapUrl, declaration) {
            var meta = convertDeclarePipeFacadeToMetadata(declaration);
            return compilePipeFromMetadata(meta);
          }
        }, {
          key: "compileInjectable",
          value: function compileInjectable(angularCoreEnv, sourceMapUrl, facade) {
            var _compileInjectable2 = _compileInjectable({
              name: facade.name,
              type: wrapReference$1(facade.type),
              internalType: new WrappedNodeExpr(facade.type),
              typeArgumentCount: facade.typeArgumentCount,
              providedIn: computeProvidedIn(facade.providedIn),
              useClass: wrapExpression(facade, USE_CLASS),
              useFactory: wrapExpression(facade, USE_FACTORY),
              useValue: wrapExpression(facade, USE_VALUE),
              useExisting: wrapExpression(facade, USE_EXISTING),
              userDeps: convertR3DependencyMetadataArray(facade.userDeps) || undefined
            }),
                expression = _compileInjectable2.expression,
                statements = _compileInjectable2.statements;

            return this.jitExpression(expression, angularCoreEnv, sourceMapUrl, statements);
          }
        }, {
          key: "compileInjector",
          value: function compileInjector(angularCoreEnv, sourceMapUrl, facade) {
            var meta = {
              name: facade.name,
              type: wrapReference$1(facade.type),
              internalType: new WrappedNodeExpr(facade.type),
              deps: convertR3DependencyMetadataArray(facade.deps),
              providers: new WrappedNodeExpr(facade.providers),
              imports: facade.imports.map(function (i) {
                return new WrappedNodeExpr(i);
              })
            };

            var res = _compileInjector(meta);

            return this.jitExpression(res.expression, angularCoreEnv, sourceMapUrl, res.statements);
          }
        }, {
          key: "compileNgModule",
          value: function compileNgModule(angularCoreEnv, sourceMapUrl, facade) {
            var meta = {
              type: wrapReference$1(facade.type),
              internalType: new WrappedNodeExpr(facade.type),
              adjacentType: new WrappedNodeExpr(facade.type),
              bootstrap: facade.bootstrap.map(wrapReference$1),
              declarations: facade.declarations.map(wrapReference$1),
              imports: facade.imports.map(wrapReference$1),
              exports: facade.exports.map(wrapReference$1),
              emitInline: true,
              containsForwardDecls: false,
              schemas: facade.schemas ? facade.schemas.map(wrapReference$1) : null,
              id: facade.id ? new WrappedNodeExpr(facade.id) : null
            };

            var res = _compileNgModule(meta);

            return this.jitExpression(res.expression, angularCoreEnv, sourceMapUrl, []);
          }
        }, {
          key: "compileDirective",
          value: function compileDirective(angularCoreEnv, sourceMapUrl, facade) {
            var meta = convertDirectiveFacadeToMetadata(facade);
            return this.compileDirectiveFromMeta(angularCoreEnv, sourceMapUrl, meta);
          }
        }, {
          key: "compileDirectiveDeclaration",
          value: function compileDirectiveDeclaration(angularCoreEnv, sourceMapUrl, declaration) {
            var typeSourceSpan = this.createParseSourceSpan('Directive', declaration.type.name, sourceMapUrl);
            var meta = convertDeclareDirectiveFacadeToMetadata(declaration, typeSourceSpan);
            return this.compileDirectiveFromMeta(angularCoreEnv, sourceMapUrl, meta);
          }
        }, {
          key: "compileDirectiveFromMeta",
          value: function compileDirectiveFromMeta(angularCoreEnv, sourceMapUrl, meta) {
            var constantPool = new ConstantPool();
            var bindingParser = makeBindingParser();
            var res = compileDirectiveFromMetadata(meta, constantPool, bindingParser);
            return this.jitExpression(res.expression, angularCoreEnv, sourceMapUrl, constantPool.statements);
          }
        }, {
          key: "compileComponent",
          value: function compileComponent(angularCoreEnv, sourceMapUrl, facade) {
            // Parse the template and check for errors.
            var _parseJitTemplate = parseJitTemplate(facade.template, facade.name, sourceMapUrl, facade.preserveWhitespaces, facade.interpolation),
                template = _parseJitTemplate.template,
                interpolation = _parseJitTemplate.interpolation; // Compile the component metadata, including template, into an expression.


            var meta = Object.assign(Object.assign(Object.assign({}, facade), convertDirectiveFacadeToMetadata(facade)), {
              selector: facade.selector || this.elementSchemaRegistry.getDefaultComponentElementName(),
              template: template,
              declarationListEmitMode: 0
              /* Direct */
              ,
              styles: [].concat(_toConsumableArray(facade.styles), _toConsumableArray(template.styles)),
              encapsulation: facade.encapsulation,
              interpolation: interpolation,
              changeDetection: facade.changeDetection,
              animations: facade.animations != null ? new WrappedNodeExpr(facade.animations) : null,
              viewProviders: facade.viewProviders != null ? new WrappedNodeExpr(facade.viewProviders) : null,
              relativeContextFilePath: '',
              i18nUseExternalIds: true
            });
            var jitExpressionSourceMap = "ng:///".concat(facade.name, ".js");
            return this.compileComponentFromMeta(angularCoreEnv, jitExpressionSourceMap, meta);
          }
        }, {
          key: "compileComponentDeclaration",
          value: function compileComponentDeclaration(angularCoreEnv, sourceMapUrl, declaration) {
            var typeSourceSpan = this.createParseSourceSpan('Component', declaration.type.name, sourceMapUrl);
            var meta = convertDeclareComponentFacadeToMetadata(declaration, typeSourceSpan, sourceMapUrl);
            return this.compileComponentFromMeta(angularCoreEnv, sourceMapUrl, meta);
          }
        }, {
          key: "compileComponentFromMeta",
          value: function compileComponentFromMeta(angularCoreEnv, sourceMapUrl, meta) {
            var constantPool = new ConstantPool();
            var bindingParser = makeBindingParser(meta.interpolation);
            var res = compileComponentFromMetadata(meta, constantPool, bindingParser);
            return this.jitExpression(res.expression, angularCoreEnv, sourceMapUrl, constantPool.statements);
          }
        }, {
          key: "compileFactory",
          value: function compileFactory(angularCoreEnv, sourceMapUrl, meta) {
            var factoryRes = compileFactoryFunction({
              name: meta.name,
              type: wrapReference$1(meta.type),
              internalType: new WrappedNodeExpr(meta.type),
              typeArgumentCount: meta.typeArgumentCount,
              deps: convertR3DependencyMetadataArray(meta.deps),
              injectFn: meta.injectFn === 'directiveInject' ? Identifiers.directiveInject : Identifiers.inject,
              target: meta.target
            });
            return this.jitExpression(factoryRes.factory, angularCoreEnv, sourceMapUrl, factoryRes.statements);
          }
        }, {
          key: "createParseSourceSpan",
          value: function createParseSourceSpan(kind, typeName, sourceUrl) {
            return r3JitTypeSourceSpan(kind, typeName, sourceUrl);
          }
          /**
           * JIT compiles an expression and returns the result of executing that expression.
           *
           * @param def the definition which will be compiled and executed to get the value to patch
           * @param context an object map of @angular/core symbol names to symbols which will be available
           * in the context of the compiled expression
           * @param sourceUrl a URL to use for the source map of the compiled expression
           * @param preStatements a collection of statements that should be evaluated before the expression.
           */

        }, {
          key: "jitExpression",
          value: function jitExpression(def, context, sourceUrl, preStatements) {
            // The ConstantPool may contain Statements which declare variables used in the final expression.
            // Therefore, its statements need to precede the actual JIT operation. The final statement is a
            // declaration of $def which is set to the expression being compiled.
            var statements = [].concat(_toConsumableArray(preStatements), [new DeclareVarStmt('$def', def, undefined, [StmtModifier.Exported])]);
            var res = this.jitEvaluator.evaluateStatements(sourceUrl, statements, new R3JitReflector(context),
            /* enableSourceMaps */
            true);
            return res['$def'];
          }
        }]);

        return CompilerFacadeImpl;
      }();

      var USE_CLASS = Object.keys({
        useClass: null
      })[0];
      var USE_FACTORY = Object.keys({
        useFactory: null
      })[0];
      var USE_VALUE = Object.keys({
        useValue: null
      })[0];
      var USE_EXISTING = Object.keys({
        useExisting: null
      })[0];

      var wrapReference$1 = function wrapReference$1(value) {
        var wrapped = new WrappedNodeExpr(value);
        return {
          value: wrapped,
          type: wrapped
        };
      };

      function convertToR3QueryMetadata(facade) {
        return Object.assign(Object.assign({}, facade), {
          predicate: Array.isArray(facade.predicate) ? facade.predicate : new WrappedNodeExpr(facade.predicate),
          read: facade.read ? new WrappedNodeExpr(facade.read) : null,
          "static": facade["static"],
          emitDistinctChangesOnly: facade.emitDistinctChangesOnly
        });
      }

      function convertQueryDeclarationToMetadata(declaration) {
        var _a, _b, _c, _d;

        return {
          propertyName: declaration.propertyName,
          first: (_a = declaration.first) !== null && _a !== void 0 ? _a : false,
          predicate: Array.isArray(declaration.predicate) ? declaration.predicate : new WrappedNodeExpr(declaration.predicate),
          descendants: (_b = declaration.descendants) !== null && _b !== void 0 ? _b : false,
          read: declaration.read ? new WrappedNodeExpr(declaration.read) : null,
          "static": (_c = declaration["static"]) !== null && _c !== void 0 ? _c : false,
          emitDistinctChangesOnly: (_d = declaration.emitDistinctChangesOnly) !== null && _d !== void 0 ? _d : true
        };
      }

      function convertDirectiveFacadeToMetadata(facade) {
        var inputsFromMetadata = parseInputOutputs(facade.inputs || []);
        var outputsFromMetadata = parseInputOutputs(facade.outputs || []);
        var propMetadata = facade.propMetadata;
        var inputsFromType = {};
        var outputsFromType = {};

        var _loop3 = function _loop3(field) {
          if (propMetadata.hasOwnProperty(field)) {
            propMetadata[field].forEach(function (ann) {
              if (isInput(ann)) {
                inputsFromType[field] = ann.bindingPropertyName ? [ann.bindingPropertyName, field] : field;
              } else if (isOutput(ann)) {
                outputsFromType[field] = ann.bindingPropertyName || field;
              }
            });
          }
        };

        for (var field in propMetadata) {
          _loop3(field);
        }

        return Object.assign(Object.assign({}, facade), {
          typeSourceSpan: facade.typeSourceSpan,
          type: wrapReference$1(facade.type),
          internalType: new WrappedNodeExpr(facade.type),
          deps: convertR3DependencyMetadataArray(facade.deps),
          host: extractHostBindings(facade.propMetadata, facade.typeSourceSpan, facade.host),
          inputs: Object.assign(Object.assign({}, inputsFromMetadata), inputsFromType),
          outputs: Object.assign(Object.assign({}, outputsFromMetadata), outputsFromType),
          queries: facade.queries.map(convertToR3QueryMetadata),
          providers: facade.providers != null ? new WrappedNodeExpr(facade.providers) : null,
          viewQueries: facade.viewQueries.map(convertToR3QueryMetadata),
          fullInheritance: false
        });
      }

      function convertDeclareDirectiveFacadeToMetadata(declaration, typeSourceSpan) {
        var _a, _b, _c, _d, _e, _f, _g, _h;

        return {
          name: declaration.type.name,
          type: wrapReference$1(declaration.type),
          typeSourceSpan: typeSourceSpan,
          internalType: new WrappedNodeExpr(declaration.type),
          selector: (_a = declaration.selector) !== null && _a !== void 0 ? _a : null,
          inputs: (_b = declaration.inputs) !== null && _b !== void 0 ? _b : {},
          outputs: (_c = declaration.outputs) !== null && _c !== void 0 ? _c : {},
          host: convertHostDeclarationToMetadata(declaration.host),
          queries: ((_d = declaration.queries) !== null && _d !== void 0 ? _d : []).map(convertQueryDeclarationToMetadata),
          viewQueries: ((_e = declaration.viewQueries) !== null && _e !== void 0 ? _e : []).map(convertQueryDeclarationToMetadata),
          providers: declaration.providers !== undefined ? new WrappedNodeExpr(declaration.providers) : null,
          exportAs: (_f = declaration.exportAs) !== null && _f !== void 0 ? _f : null,
          usesInheritance: (_g = declaration.usesInheritance) !== null && _g !== void 0 ? _g : false,
          lifecycle: {
            usesOnChanges: (_h = declaration.usesOnChanges) !== null && _h !== void 0 ? _h : false
          },
          deps: null,
          typeArgumentCount: 0,
          fullInheritance: false
        };
      }

      function convertHostDeclarationToMetadata() {
        var host = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

        var _a, _b, _c;

        return {
          attributes: convertOpaqueValuesToExpressions((_a = host.attributes) !== null && _a !== void 0 ? _a : {}),
          listeners: (_b = host.listeners) !== null && _b !== void 0 ? _b : {},
          properties: (_c = host.properties) !== null && _c !== void 0 ? _c : {},
          specialAttributes: {
            classAttr: host.classAttribute,
            styleAttr: host.styleAttribute
          }
        };
      }

      function convertOpaqueValuesToExpressions(obj) {
        var result = {};

        for (var _i11 = 0, _Object$keys3 = Object.keys(obj); _i11 < _Object$keys3.length; _i11++) {
          var key = _Object$keys3[_i11];
          result[key] = new WrappedNodeExpr(obj[key]);
        }

        return result;
      }

      function convertDeclareComponentFacadeToMetadata(declaration, typeSourceSpan, sourceMapUrl) {
        var _a, _b, _c, _d, _e;

        var _parseJitTemplate2 = parseJitTemplate(declaration.template, declaration.type.name, sourceMapUrl, (_a = declaration.preserveWhitespaces) !== null && _a !== void 0 ? _a : false, declaration.interpolation),
            template = _parseJitTemplate2.template,
            interpolation = _parseJitTemplate2.interpolation;

        return Object.assign(Object.assign({}, convertDeclareDirectiveFacadeToMetadata(declaration, typeSourceSpan)), {
          template: template,
          styles: (_b = declaration.styles) !== null && _b !== void 0 ? _b : [],
          directives: ((_c = declaration.directives) !== null && _c !== void 0 ? _c : []).map(convertUsedDirectiveDeclarationToMetadata),
          pipes: convertUsedPipesToMetadata(declaration.pipes),
          viewProviders: declaration.viewProviders !== undefined ? new WrappedNodeExpr(declaration.viewProviders) : null,
          animations: declaration.animations !== undefined ? new WrappedNodeExpr(declaration.animations) : null,
          changeDetection: (_d = declaration.changeDetection) !== null && _d !== void 0 ? _d : ChangeDetectionStrategy.Default,
          encapsulation: (_e = declaration.encapsulation) !== null && _e !== void 0 ? _e : ViewEncapsulation.Emulated,
          interpolation: interpolation,
          declarationListEmitMode: 2
          /* ClosureResolved */
          ,
          relativeContextFilePath: '',
          i18nUseExternalIds: true
        });
      }

      function convertUsedDirectiveDeclarationToMetadata(declaration) {
        var _a, _b, _c;

        return {
          selector: declaration.selector,
          type: new WrappedNodeExpr(declaration.type),
          inputs: (_a = declaration.inputs) !== null && _a !== void 0 ? _a : [],
          outputs: (_b = declaration.outputs) !== null && _b !== void 0 ? _b : [],
          exportAs: (_c = declaration.exportAs) !== null && _c !== void 0 ? _c : null
        };
      }

      function convertUsedPipesToMetadata(declaredPipes) {
        var pipes = new Map();

        if (declaredPipes === undefined) {
          return pipes;
        }

        for (var _i12 = 0, _Object$keys4 = Object.keys(declaredPipes); _i12 < _Object$keys4.length; _i12++) {
          var pipeName = _Object$keys4[_i12];
          var pipeType = declaredPipes[pipeName];
          pipes.set(pipeName, new WrappedNodeExpr(pipeType));
        }

        return pipes;
      }

      function parseJitTemplate(template, typeName, sourceMapUrl, preserveWhitespaces, interpolation) {
        var interpolationConfig = interpolation ? InterpolationConfig.fromArray(interpolation) : DEFAULT_INTERPOLATION_CONFIG; // Parse the template and check for errors.

        var parsed = parseTemplate(template, sourceMapUrl, {
          preserveWhitespaces: preserveWhitespaces,
          interpolationConfig: interpolationConfig
        });

        if (parsed.errors !== null) {
          var errors = parsed.errors.map(function (err) {
            return err.toString();
          }).join(', ');
          throw new Error("Errors during JIT compilation of template for ".concat(typeName, ": ").concat(errors));
        }

        return {
          template: parsed,
          interpolation: interpolationConfig
        };
      }

      function wrapExpression(obj, property) {
        if (obj.hasOwnProperty(property)) {
          return new WrappedNodeExpr(obj[property]);
        } else {
          return undefined;
        }
      }

      function computeProvidedIn(providedIn) {
        if (providedIn == null || typeof providedIn === 'string') {
          return new LiteralExpr(providedIn);
        } else {
          return new WrappedNodeExpr(providedIn);
        }
      }

      function convertR3DependencyMetadata(facade) {
        var tokenExpr;

        if (facade.token === null) {
          tokenExpr = new LiteralExpr(null);
        } else if (facade.resolved === R3ResolvedDependencyType.Attribute) {
          tokenExpr = new LiteralExpr(facade.token);
        } else {
          tokenExpr = new WrappedNodeExpr(facade.token);
        }

        return {
          token: tokenExpr,
          attribute: null,
          resolved: facade.resolved,
          host: facade.host,
          optional: facade.optional,
          self: facade.self,
          skipSelf: facade.skipSelf
        };
      }

      function convertR3DependencyMetadataArray(facades) {
        return facades == null ? null : facades.map(convertR3DependencyMetadata);
      }

      function extractHostBindings(propMetadata, sourceSpan, host) {
        // First parse the declarations from the metadata.
        var bindings = parseHostBindings(host || {}); // After that check host bindings for errors

        var errors = verifyHostBindings(bindings, sourceSpan);

        if (errors.length) {
          throw new Error(errors.map(function (error) {
            return error.msg;
          }).join('\n'));
        } // Next, loop over the properties of the object, looking for @HostBinding and @HostListener.


        var _loop4 = function _loop4(field) {
          if (propMetadata.hasOwnProperty(field)) {
            propMetadata[field].forEach(function (ann) {
              if (isHostBinding(ann)) {
                // Since this is a decorator, we know that the value is a class member. Always access it
                // through `this` so that further down the line it can't be confused for a literal value
                // (e.g. if there's a property called `true`).
                bindings.properties[ann.hostPropertyName || field] = getSafePropertyAccessString('this', field);
              } else if (isHostListener(ann)) {
                bindings.listeners[ann.eventName || field] = "".concat(field, "(").concat((ann.args || []).join(','), ")");
              }
            });
          }
        };

        for (var field in propMetadata) {
          _loop4(field);
        }

        return bindings;
      }

      function isHostBinding(value) {
        return value.ngMetadataName === 'HostBinding';
      }

      function isHostListener(value) {
        return value.ngMetadataName === 'HostListener';
      }

      function isInput(value) {
        return value.ngMetadataName === 'Input';
      }

      function isOutput(value) {
        return value.ngMetadataName === 'Output';
      }

      function parseInputOutputs(values) {
        return values.reduce(function (map, value) {
          var _value$split$map = value.split(',').map(function (piece) {
            return piece.trim();
          }),
              _value$split$map2 = _slicedToArray(_value$split$map, 2),
              field = _value$split$map2[0],
              property = _value$split$map2[1];

          map[field] = property || field;
          return map;
        }, {});
      }

      function convertDeclarePipeFacadeToMetadata(declaration) {
        var _a;

        return {
          name: declaration.type.name,
          type: wrapReference$1(declaration.type),
          internalType: new WrappedNodeExpr(declaration.type),
          typeArgumentCount: 0,
          pipeName: declaration.name,
          deps: null,
          pure: (_a = declaration.pure) !== null && _a !== void 0 ? _a : true
        };
      }

      function publishFacade(global) {
        var ng = global.ng || (global.ng = {});
        ng.ɵcompilerFacade = new CompilerFacadeImpl();
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var VERSION$1 = new Version('12.0.0-next.1');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var CompilerConfig = function CompilerConfig() {
        var _ref76 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
            _ref76$defaultEncapsu = _ref76.defaultEncapsulation,
            defaultEncapsulation = _ref76$defaultEncapsu === void 0 ? ViewEncapsulation.Emulated : _ref76$defaultEncapsu,
            _ref76$useJit = _ref76.useJit,
            useJit = _ref76$useJit === void 0 ? true : _ref76$useJit,
            _ref76$jitDevMode = _ref76.jitDevMode,
            jitDevMode = _ref76$jitDevMode === void 0 ? false : _ref76$jitDevMode,
            _ref76$missingTransla = _ref76.missingTranslation,
            missingTranslation = _ref76$missingTransla === void 0 ? null : _ref76$missingTransla,
            preserveWhitespaces = _ref76.preserveWhitespaces,
            strictInjectionParameters = _ref76.strictInjectionParameters;

        _classCallCheck2(this, CompilerConfig);

        this.defaultEncapsulation = defaultEncapsulation;
        this.useJit = !!useJit;
        this.jitDevMode = !!jitDevMode;
        this.missingTranslation = missingTranslation;
        this.preserveWhitespaces = preserveWhitespacesDefault(noUndefined(preserveWhitespaces));
        this.strictInjectionParameters = strictInjectionParameters === true;
      };

      function preserveWhitespacesDefault(preserveWhitespacesOption) {
        var defaultSetting = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
        return preserveWhitespacesOption === null ? defaultSetting : preserveWhitespacesOption;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var DirectiveNormalizer = /*#__PURE__*/function () {
        function DirectiveNormalizer(_resourceLoader, _urlResolver, _htmlParser, _config) {
          _classCallCheck2(this, DirectiveNormalizer);

          this._resourceLoader = _resourceLoader;
          this._urlResolver = _urlResolver;
          this._htmlParser = _htmlParser;
          this._config = _config;
          this._resourceLoaderCache = new Map();
        }

        _createClass2(DirectiveNormalizer, [{
          key: "clearCache",
          value: function clearCache() {
            this._resourceLoaderCache.clear();
          }
        }, {
          key: "clearCacheFor",
          value: function clearCacheFor(normalizedDirective) {
            var _this320 = this;

            if (!normalizedDirective.isComponent) {
              return;
            }

            var template = normalizedDirective.template;

            this._resourceLoaderCache["delete"](template.templateUrl);

            template.externalStylesheets.forEach(function (stylesheet) {
              _this320._resourceLoaderCache["delete"](stylesheet.moduleUrl);
            });
          }
        }, {
          key: "_fetch",
          value: function _fetch(url) {
            var result = this._resourceLoaderCache.get(url);

            if (!result) {
              result = this._resourceLoader.get(url);

              this._resourceLoaderCache.set(url, result);
            }

            return result;
          }
        }, {
          key: "normalizeTemplate",
          value: function normalizeTemplate(prenormData) {
            var _this321 = this;

            if (isDefined(prenormData.template)) {
              if (isDefined(prenormData.templateUrl)) {
                throw syntaxError("'".concat(stringify(prenormData.componentType), "' component cannot define both template and templateUrl"));
              }

              if (typeof prenormData.template !== 'string') {
                throw syntaxError("The template specified for component ".concat(stringify(prenormData.componentType), " is not a string"));
              }
            } else if (isDefined(prenormData.templateUrl)) {
              if (typeof prenormData.templateUrl !== 'string') {
                throw syntaxError("The templateUrl specified for component ".concat(stringify(prenormData.componentType), " is not a string"));
              }
            } else {
              throw syntaxError("No template specified for component ".concat(stringify(prenormData.componentType)));
            }

            if (isDefined(prenormData.preserveWhitespaces) && typeof prenormData.preserveWhitespaces !== 'boolean') {
              throw syntaxError("The preserveWhitespaces option for component ".concat(stringify(prenormData.componentType), " must be a boolean"));
            }

            return SyncAsync.then(this._preParseTemplate(prenormData), function (preparsedTemplate) {
              return _this321._normalizeTemplateMetadata(prenormData, preparsedTemplate);
            });
          }
        }, {
          key: "_preParseTemplate",
          value: function _preParseTemplate(prenomData) {
            var _this322 = this;

            var template;
            var templateUrl;

            if (prenomData.template != null) {
              template = prenomData.template;
              templateUrl = prenomData.moduleUrl;
            } else {
              templateUrl = this._urlResolver.resolve(prenomData.moduleUrl, prenomData.templateUrl);
              template = this._fetch(templateUrl);
            }

            return SyncAsync.then(template, function (template) {
              return _this322._preparseLoadedTemplate(prenomData, template, templateUrl);
            });
          }
        }, {
          key: "_preparseLoadedTemplate",
          value: function _preparseLoadedTemplate(prenormData, template, templateAbsUrl) {
            var isInline = !!prenormData.template;
            var interpolationConfig = InterpolationConfig.fromArray(prenormData.interpolation);
            var templateUrl = templateSourceUrl({
              reference: prenormData.ngModuleType
            }, {
              type: {
                reference: prenormData.componentType
              }
            }, {
              isInline: isInline,
              templateUrl: templateAbsUrl
            });

            var rootNodesAndErrors = this._htmlParser.parse(template, templateUrl, {
              tokenizeExpansionForms: true,
              interpolationConfig: interpolationConfig
            });

            if (rootNodesAndErrors.errors.length > 0) {
              var errorString = rootNodesAndErrors.errors.join('\n');
              throw syntaxError("Template parse errors:\n".concat(errorString));
            }

            var templateMetadataStyles = this._normalizeStylesheet(new CompileStylesheetMetadata({
              styles: prenormData.styles,
              moduleUrl: prenormData.moduleUrl
            }));

            var visitor = new TemplatePreparseVisitor();
            visitAll$1(visitor, rootNodesAndErrors.rootNodes);

            var templateStyles = this._normalizeStylesheet(new CompileStylesheetMetadata({
              styles: visitor.styles,
              styleUrls: visitor.styleUrls,
              moduleUrl: templateAbsUrl
            }));

            var styles = templateMetadataStyles.styles.concat(templateStyles.styles);
            var inlineStyleUrls = templateMetadataStyles.styleUrls.concat(templateStyles.styleUrls);

            var styleUrls = this._normalizeStylesheet(new CompileStylesheetMetadata({
              styleUrls: prenormData.styleUrls,
              moduleUrl: prenormData.moduleUrl
            })).styleUrls;

            return {
              template: template,
              templateUrl: templateAbsUrl,
              isInline: isInline,
              htmlAst: rootNodesAndErrors,
              styles: styles,
              inlineStyleUrls: inlineStyleUrls,
              styleUrls: styleUrls,
              ngContentSelectors: visitor.ngContentSelectors
            };
          }
        }, {
          key: "_normalizeTemplateMetadata",
          value: function _normalizeTemplateMetadata(prenormData, preparsedTemplate) {
            var _this323 = this;

            return SyncAsync.then(this._loadMissingExternalStylesheets(preparsedTemplate.styleUrls.concat(preparsedTemplate.inlineStyleUrls)), function (externalStylesheets) {
              return _this323._normalizeLoadedTemplateMetadata(prenormData, preparsedTemplate, externalStylesheets);
            });
          }
        }, {
          key: "_normalizeLoadedTemplateMetadata",
          value: function _normalizeLoadedTemplateMetadata(prenormData, preparsedTemplate, stylesheets) {
            var _this324 = this;

            // Algorithm:
            // - produce exactly 1 entry per original styleUrl in
            // CompileTemplateMetadata.externalStylesheets with all styles inlined
            // - inline all styles that are referenced by the template into CompileTemplateMetadata.styles.
            // Reason: be able to determine how many stylesheets there are even without loading
            // the template nor the stylesheets, so we can create a stub for TypeScript always synchronously
            // (as resource loading may be async)
            var styles = _toConsumableArray(preparsedTemplate.styles);

            this._inlineStyles(preparsedTemplate.inlineStyleUrls, stylesheets, styles);

            var styleUrls = preparsedTemplate.styleUrls;
            var externalStylesheets = styleUrls.map(function (styleUrl) {
              var stylesheet = stylesheets.get(styleUrl);

              var styles = _toConsumableArray(stylesheet.styles);

              _this324._inlineStyles(stylesheet.styleUrls, stylesheets, styles);

              return new CompileStylesheetMetadata({
                moduleUrl: styleUrl,
                styles: styles
              });
            });
            var encapsulation = prenormData.encapsulation;

            if (encapsulation == null) {
              encapsulation = this._config.defaultEncapsulation;
            }

            if (encapsulation === ViewEncapsulation.Emulated && styles.length === 0 && styleUrls.length === 0) {
              encapsulation = ViewEncapsulation.None;
            }

            return new CompileTemplateMetadata({
              encapsulation: encapsulation,
              template: preparsedTemplate.template,
              templateUrl: preparsedTemplate.templateUrl,
              htmlAst: preparsedTemplate.htmlAst,
              styles: styles,
              styleUrls: styleUrls,
              ngContentSelectors: preparsedTemplate.ngContentSelectors,
              animations: prenormData.animations,
              interpolation: prenormData.interpolation,
              isInline: preparsedTemplate.isInline,
              externalStylesheets: externalStylesheets,
              preserveWhitespaces: preserveWhitespacesDefault(prenormData.preserveWhitespaces, this._config.preserveWhitespaces)
            });
          }
        }, {
          key: "_inlineStyles",
          value: function _inlineStyles(styleUrls, stylesheets, targetStyles) {
            var _this325 = this;

            styleUrls.forEach(function (styleUrl) {
              var stylesheet = stylesheets.get(styleUrl);
              stylesheet.styles.forEach(function (style) {
                return targetStyles.push(style);
              });

              _this325._inlineStyles(stylesheet.styleUrls, stylesheets, targetStyles);
            });
          }
        }, {
          key: "_loadMissingExternalStylesheets",
          value: function _loadMissingExternalStylesheets(styleUrls) {
            var _this326 = this;

            var loadedStylesheets = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Map();
            return SyncAsync.then(SyncAsync.all(styleUrls.filter(function (styleUrl) {
              return !loadedStylesheets.has(styleUrl);
            }).map(function (styleUrl) {
              return SyncAsync.then(_this326._fetch(styleUrl), function (loadedStyle) {
                var stylesheet = _this326._normalizeStylesheet(new CompileStylesheetMetadata({
                  styles: [loadedStyle],
                  moduleUrl: styleUrl
                }));

                loadedStylesheets.set(styleUrl, stylesheet);
                return _this326._loadMissingExternalStylesheets(stylesheet.styleUrls, loadedStylesheets);
              });
            })), function (_) {
              return loadedStylesheets;
            });
          }
        }, {
          key: "_normalizeStylesheet",
          value: function _normalizeStylesheet(stylesheet) {
            var _this327 = this;

            var moduleUrl = stylesheet.moduleUrl;
            var allStyleUrls = stylesheet.styleUrls.filter(isStyleUrlResolvable).map(function (url) {
              return _this327._urlResolver.resolve(moduleUrl, url);
            });
            var allStyles = stylesheet.styles.map(function (style) {
              var styleWithImports = extractStyleUrls(_this327._urlResolver, moduleUrl, style);
              allStyleUrls.push.apply(allStyleUrls, _toConsumableArray(styleWithImports.styleUrls));
              return styleWithImports.style;
            });
            return new CompileStylesheetMetadata({
              styles: allStyles,
              styleUrls: allStyleUrls,
              moduleUrl: moduleUrl
            });
          }
        }]);

        return DirectiveNormalizer;
      }();

      var TemplatePreparseVisitor = /*#__PURE__*/function () {
        function TemplatePreparseVisitor() {
          _classCallCheck2(this, TemplatePreparseVisitor);

          this.ngContentSelectors = [];
          this.styles = [];
          this.styleUrls = [];
          this.ngNonBindableStackCount = 0;
        }

        _createClass2(TemplatePreparseVisitor, [{
          key: "visitElement",
          value: function visitElement(ast, context) {
            var preparsedElement = preparseElement(ast);

            switch (preparsedElement.type) {
              case PreparsedElementType.NG_CONTENT:
                if (this.ngNonBindableStackCount === 0) {
                  this.ngContentSelectors.push(preparsedElement.selectAttr);
                }

                break;

              case PreparsedElementType.STYLE:
                var textContent = '';
                ast.children.forEach(function (child) {
                  if (child instanceof Text$3) {
                    textContent += child.value;
                  }
                });
                this.styles.push(textContent);
                break;

              case PreparsedElementType.STYLESHEET:
                this.styleUrls.push(preparsedElement.hrefAttr);
                break;

              default:
                break;
            }

            if (preparsedElement.nonBindable) {
              this.ngNonBindableStackCount++;
            }

            visitAll$1(this, ast.children);

            if (preparsedElement.nonBindable) {
              this.ngNonBindableStackCount--;
            }

            return null;
          }
        }, {
          key: "visitExpansion",
          value: function visitExpansion(ast, context) {
            visitAll$1(this, ast.cases);
          }
        }, {
          key: "visitExpansionCase",
          value: function visitExpansionCase(ast, context) {
            visitAll$1(this, ast.expression);
          }
        }, {
          key: "visitComment",
          value: function visitComment(ast, context) {
            return null;
          }
        }, {
          key: "visitAttribute",
          value: function visitAttribute(ast, context) {
            return null;
          }
        }, {
          key: "visitText",
          value: function visitText(ast, context) {
            return null;
          }
        }]);

        return TemplatePreparseVisitor;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var QUERY_METADATA_IDENTIFIERS = [createViewChild, createViewChildren, createContentChild, createContentChildren];
      /*
       * Resolve a `Type` for {@link Directive}.
       *
       * This interface can be overridden by the application developer to create custom behavior.
       *
       * See {@link Compiler}
       */

      var DirectiveResolver = /*#__PURE__*/function () {
        function DirectiveResolver(_reflector) {
          _classCallCheck2(this, DirectiveResolver);

          this._reflector = _reflector;
        }

        _createClass2(DirectiveResolver, [{
          key: "isDirective",
          value: function isDirective(type) {
            var typeMetadata = this._reflector.annotations(resolveForwardRef(type));

            return typeMetadata && typeMetadata.some(isDirectiveMetadata);
          }
        }, {
          key: "resolve",
          value: function resolve(type) {
            var throwIfNotFound = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;

            var typeMetadata = this._reflector.annotations(resolveForwardRef(type));

            if (typeMetadata) {
              var metadata = findLast(typeMetadata, isDirectiveMetadata);

              if (metadata) {
                var propertyMetadata = this._reflector.propMetadata(type);

                var guards = this._reflector.guards(type);

                return this._mergeWithPropertyMetadata(metadata, propertyMetadata, guards, type);
              }
            }

            if (throwIfNotFound) {
              throw new Error("No Directive annotation found on ".concat(stringify(type)));
            }

            return null;
          }
        }, {
          key: "_mergeWithPropertyMetadata",
          value: function _mergeWithPropertyMetadata(dm, propertyMetadata, guards, directiveType) {
            var inputs = [];
            var outputs = [];
            var host = {};
            var queries = {};
            Object.keys(propertyMetadata).forEach(function (propName) {
              var input = findLast(propertyMetadata[propName], function (a) {
                return createInput.isTypeOf(a);
              });

              if (input) {
                if (input.bindingPropertyName) {
                  inputs.push("".concat(propName, ": ").concat(input.bindingPropertyName));
                } else {
                  inputs.push(propName);
                }
              }

              var output = findLast(propertyMetadata[propName], function (a) {
                return createOutput.isTypeOf(a);
              });

              if (output) {
                if (output.bindingPropertyName) {
                  outputs.push("".concat(propName, ": ").concat(output.bindingPropertyName));
                } else {
                  outputs.push(propName);
                }
              }

              var hostBindings = propertyMetadata[propName].filter(function (a) {
                return createHostBinding.isTypeOf(a);
              });
              hostBindings.forEach(function (hostBinding) {
                if (hostBinding.hostPropertyName) {
                  var startWith = hostBinding.hostPropertyName[0];

                  if (startWith === '(') {
                    throw new Error("@HostBinding can not bind to events. Use @HostListener instead.");
                  } else if (startWith === '[') {
                    throw new Error("@HostBinding parameter should be a property name, 'class.<name>', or 'attr.<name>'.");
                  }

                  host["[".concat(hostBinding.hostPropertyName, "]")] = propName;
                } else {
                  host["[".concat(propName, "]")] = propName;
                }
              });
              var hostListeners = propertyMetadata[propName].filter(function (a) {
                return createHostListener.isTypeOf(a);
              });
              hostListeners.forEach(function (hostListener) {
                var args = hostListener.args || [];
                host["(".concat(hostListener.eventName, ")")] = "".concat(propName, "(").concat(args.join(','), ")");
              });
              var query = findLast(propertyMetadata[propName], function (a) {
                return QUERY_METADATA_IDENTIFIERS.some(function (i) {
                  return i.isTypeOf(a);
                });
              });

              if (query) {
                queries[propName] = query;
              }
            });
            return this._merge(dm, inputs, outputs, host, queries, guards, directiveType);
          }
        }, {
          key: "_extractPublicName",
          value: function _extractPublicName(def) {
            return splitAtColon(def, [null, def])[1].trim();
          }
        }, {
          key: "_dedupeBindings",
          value: function _dedupeBindings(bindings) {
            var names = new Set();
            var publicNames = new Set();
            var reversedResult = []; // go last to first to allow later entries to overwrite previous entries

            for (var i = bindings.length - 1; i >= 0; i--) {
              var binding = bindings[i];

              var name = this._extractPublicName(binding);

              publicNames.add(name);

              if (!names.has(name)) {
                names.add(name);
                reversedResult.push(binding);
              }
            }

            return reversedResult.reverse();
          }
        }, {
          key: "_merge",
          value: function _merge(directive, inputs, outputs, host, queries, guards, directiveType) {
            var mergedInputs = this._dedupeBindings(directive.inputs ? directive.inputs.concat(inputs) : inputs);

            var mergedOutputs = this._dedupeBindings(directive.outputs ? directive.outputs.concat(outputs) : outputs);

            var mergedHost = directive.host ? Object.assign(Object.assign({}, directive.host), host) : host;
            var mergedQueries = directive.queries ? Object.assign(Object.assign({}, directive.queries), queries) : queries;

            if (createComponent.isTypeOf(directive)) {
              var comp = directive;
              return createComponent({
                selector: comp.selector,
                inputs: mergedInputs,
                outputs: mergedOutputs,
                host: mergedHost,
                exportAs: comp.exportAs,
                moduleId: comp.moduleId,
                queries: mergedQueries,
                changeDetection: comp.changeDetection,
                providers: comp.providers,
                viewProviders: comp.viewProviders,
                entryComponents: comp.entryComponents,
                template: comp.template,
                templateUrl: comp.templateUrl,
                styles: comp.styles,
                styleUrls: comp.styleUrls,
                encapsulation: comp.encapsulation,
                animations: comp.animations,
                interpolation: comp.interpolation,
                preserveWhitespaces: directive.preserveWhitespaces
              });
            } else {
              return createDirective({
                selector: directive.selector,
                inputs: mergedInputs,
                outputs: mergedOutputs,
                host: mergedHost,
                exportAs: directive.exportAs,
                queries: mergedQueries,
                providers: directive.providers,
                guards: guards
              });
            }
          }
        }]);

        return DirectiveResolver;
      }();

      function isDirectiveMetadata(type) {
        return createDirective.isTypeOf(type) || createComponent.isTypeOf(type);
      }

      function findLast(arr, condition) {
        for (var i = arr.length - 1; i >= 0; i--) {
          if (condition(arr[i])) {
            return arr[i];
          }
        }

        return null;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var _I18N_ATTR = 'i18n';
      var _I18N_ATTR_PREFIX = 'i18n-';
      var _I18N_COMMENT_PREFIX_REGEXP = /^i18n:?/;
      var MEANING_SEPARATOR = '|';
      var ID_SEPARATOR = '@@';
      var i18nCommentsWarned = false;
      /**
       * Extract translatable messages from an html AST
       */

      function extractMessages(nodes, interpolationConfig, implicitTags, implicitAttrs) {
        var visitor = new _Visitor$2(implicitTags, implicitAttrs);
        return visitor.extract(nodes, interpolationConfig);
      }

      function mergeTranslations(nodes, translations, interpolationConfig, implicitTags, implicitAttrs) {
        var visitor = new _Visitor$2(implicitTags, implicitAttrs);
        return visitor.merge(nodes, translations, interpolationConfig);
      }

      var ExtractionResult = function ExtractionResult(messages, errors) {
        _classCallCheck2(this, ExtractionResult);

        this.messages = messages;
        this.errors = errors;
      };

      var _VisitorMode;

      (function (_VisitorMode) {
        _VisitorMode[_VisitorMode["Extract"] = 0] = "Extract";
        _VisitorMode[_VisitorMode["Merge"] = 1] = "Merge";
      })(_VisitorMode || (_VisitorMode = {}));
      /**
       * This Visitor is used:
       * 1. to extract all the translatable strings from an html AST (see `extract()`),
       * 2. to replace the translatable strings with the actual translations (see `merge()`)
       *
       * @internal
       */


      var _Visitor$2 = /*#__PURE__*/function () {
        function _Visitor$2(_implicitTags, _implicitAttrs) {
          _classCallCheck2(this, _Visitor$2);

          this._implicitTags = _implicitTags;
          this._implicitAttrs = _implicitAttrs;
        }
        /**
         * Extracts the messages from the tree
         */


        _createClass2(_Visitor$2, [{
          key: "extract",
          value: function extract(nodes, interpolationConfig) {
            var _this328 = this;

            this._init(_VisitorMode.Extract, interpolationConfig);

            nodes.forEach(function (node) {
              return node.visit(_this328, null);
            });

            if (this._inI18nBlock) {
              this._reportError(nodes[nodes.length - 1], 'Unclosed block');
            }

            return new ExtractionResult(this._messages, this._errors);
          }
          /**
           * Returns a tree where all translatable nodes are translated
           */

        }, {
          key: "merge",
          value: function merge(nodes, translations, interpolationConfig) {
            this._init(_VisitorMode.Merge, interpolationConfig);

            this._translations = translations; // Construct a single fake root element

            var wrapper = new Element$1('wrapper', [], nodes, undefined, undefined, undefined);
            var translatedNode = wrapper.visit(this, null);

            if (this._inI18nBlock) {
              this._reportError(nodes[nodes.length - 1], 'Unclosed block');
            }

            return new ParseTreeResult(translatedNode.children, this._errors);
          }
        }, {
          key: "visitExpansionCase",
          value: function visitExpansionCase(icuCase, context) {
            // Parse cases for translatable html attributes
            var expression = visitAll$1(this, icuCase.expression, context);

            if (this._mode === _VisitorMode.Merge) {
              return new ExpansionCase(icuCase.value, expression, icuCase.sourceSpan, icuCase.valueSourceSpan, icuCase.expSourceSpan);
            }
          }
        }, {
          key: "visitExpansion",
          value: function visitExpansion(icu, context) {
            this._mayBeAddBlockChildren(icu);

            var wasInIcu = this._inIcu;

            if (!this._inIcu) {
              // nested ICU messages should not be extracted but top-level translated as a whole
              if (this._isInTranslatableSection) {
                this._addMessage([icu]);
              }

              this._inIcu = true;
            }

            var cases = visitAll$1(this, icu.cases, context);

            if (this._mode === _VisitorMode.Merge) {
              icu = new Expansion(icu.switchValue, icu.type, cases, icu.sourceSpan, icu.switchValueSourceSpan);
            }

            this._inIcu = wasInIcu;
            return icu;
          }
        }, {
          key: "visitComment",
          value: function visitComment(comment, context) {
            var isOpening = _isOpeningComment(comment);

            if (isOpening && this._isInTranslatableSection) {
              this._reportError(comment, 'Could not start a block inside a translatable section');

              return;
            }

            var isClosing = _isClosingComment(comment);

            if (isClosing && !this._inI18nBlock) {
              this._reportError(comment, 'Trying to close an unopened block');

              return;
            }

            if (!this._inI18nNode && !this._inIcu) {
              if (!this._inI18nBlock) {
                if (isOpening) {
                  // deprecated from v5 you should use <ng-container i18n> instead of i18n comments
                  if (!i18nCommentsWarned && console && console.warn) {
                    i18nCommentsWarned = true;
                    var details = comment.sourceSpan.details ? ", ".concat(comment.sourceSpan.details) : ''; // TODO(ocombe): use a log service once there is a public one available

                    console.warn("I18n comments are deprecated, use an <ng-container> element instead (".concat(comment.sourceSpan.start).concat(details, ")"));
                  }

                  this._inI18nBlock = true;
                  this._blockStartDepth = this._depth;
                  this._blockChildren = [];
                  this._blockMeaningAndDesc = comment.value.replace(_I18N_COMMENT_PREFIX_REGEXP, '').trim();

                  this._openTranslatableSection(comment);
                }
              } else {
                if (isClosing) {
                  if (this._depth == this._blockStartDepth) {
                    this._closeTranslatableSection(comment, this._blockChildren);

                    this._inI18nBlock = false;

                    var message = this._addMessage(this._blockChildren, this._blockMeaningAndDesc); // merge attributes in sections


                    var nodes = this._translateMessage(comment, message);

                    return visitAll$1(this, nodes);
                  } else {
                    this._reportError(comment, 'I18N blocks should not cross element boundaries');

                    return;
                  }
                }
              }
            }
          }
        }, {
          key: "visitText",
          value: function visitText(text, context) {
            if (this._isInTranslatableSection) {
              this._mayBeAddBlockChildren(text);
            }

            return text;
          }
        }, {
          key: "visitElement",
          value: function visitElement(el, context) {
            var _this329 = this;

            this._mayBeAddBlockChildren(el);

            this._depth++;
            var wasInI18nNode = this._inI18nNode;
            var wasInImplicitNode = this._inImplicitNode;
            var childNodes = [];
            var translatedChildNodes = undefined; // Extract:
            // - top level nodes with the (implicit) "i18n" attribute if not already in a section
            // - ICU messages

            var i18nAttr = _getI18nAttr(el);

            var i18nMeta = i18nAttr ? i18nAttr.value : '';
            var isImplicit = this._implicitTags.some(function (tag) {
              return el.name === tag;
            }) && !this._inIcu && !this._isInTranslatableSection;
            var isTopLevelImplicit = !wasInImplicitNode && isImplicit;
            this._inImplicitNode = wasInImplicitNode || isImplicit;

            if (!this._isInTranslatableSection && !this._inIcu) {
              if (i18nAttr || isTopLevelImplicit) {
                this._inI18nNode = true;

                var message = this._addMessage(el.children, i18nMeta);

                translatedChildNodes = this._translateMessage(el, message);
              }

              if (this._mode == _VisitorMode.Extract) {
                var isTranslatable = i18nAttr || isTopLevelImplicit;
                if (isTranslatable) this._openTranslatableSection(el);
                visitAll$1(this, el.children);
                if (isTranslatable) this._closeTranslatableSection(el, el.children);
              }
            } else {
              if (i18nAttr || isTopLevelImplicit) {
                this._reportError(el, 'Could not mark an element as translatable inside a translatable section');
              }

              if (this._mode == _VisitorMode.Extract) {
                // Descend into child nodes for extraction
                visitAll$1(this, el.children);
              }
            }

            if (this._mode === _VisitorMode.Merge) {
              var visitNodes = translatedChildNodes || el.children;
              visitNodes.forEach(function (child) {
                var visited = child.visit(_this329, context);

                if (visited && !_this329._isInTranslatableSection) {
                  // Do not add the children from translatable sections (= i18n blocks here)
                  // They will be added later in this loop when the block closes (i.e. on `<!-- /i18n -->`)
                  childNodes = childNodes.concat(visited);
                }
              });
            }

            this._visitAttributesOf(el);

            this._depth--;
            this._inI18nNode = wasInI18nNode;
            this._inImplicitNode = wasInImplicitNode;

            if (this._mode === _VisitorMode.Merge) {
              var translatedAttrs = this._translateAttributes(el);

              return new Element$1(el.name, translatedAttrs, childNodes, el.sourceSpan, el.startSourceSpan, el.endSourceSpan);
            }

            return null;
          }
        }, {
          key: "visitAttribute",
          value: function visitAttribute(attribute, context) {
            throw new Error('unreachable code');
          }
        }, {
          key: "_init",
          value: function _init(mode, interpolationConfig) {
            this._mode = mode;
            this._inI18nBlock = false;
            this._inI18nNode = false;
            this._depth = 0;
            this._inIcu = false;
            this._msgCountAtSectionStart = undefined;
            this._errors = [];
            this._messages = [];
            this._inImplicitNode = false;
            this._createI18nMessage = createI18nMessageFactory(interpolationConfig);
          } // looks for translatable attributes

        }, {
          key: "_visitAttributesOf",
          value: function _visitAttributesOf(el) {
            var _this330 = this;

            var explicitAttrNameToValue = {};
            var implicitAttrNames = this._implicitAttrs[el.name] || [];
            el.attrs.filter(function (attr) {
              return attr.name.startsWith(_I18N_ATTR_PREFIX);
            }).forEach(function (attr) {
              return explicitAttrNameToValue[attr.name.slice(_I18N_ATTR_PREFIX.length)] = attr.value;
            });
            el.attrs.forEach(function (attr) {
              if (attr.name in explicitAttrNameToValue) {
                _this330._addMessage([attr], explicitAttrNameToValue[attr.name]);
              } else if (implicitAttrNames.some(function (name) {
                return attr.name === name;
              })) {
                _this330._addMessage([attr]);
              }
            });
          } // add a translatable message

        }, {
          key: "_addMessage",
          value: function _addMessage(ast, msgMeta) {
            if (ast.length == 0 || ast.length == 1 && ast[0] instanceof Attribute && !ast[0].value) {
              // Do not create empty messages
              return null;
            }

            var _parseMessageMeta2 = _parseMessageMeta(msgMeta),
                meaning = _parseMessageMeta2.meaning,
                description = _parseMessageMeta2.description,
                id = _parseMessageMeta2.id;

            var message = this._createI18nMessage(ast, meaning, description, id);

            this._messages.push(message);

            return message;
          } // Translates the given message given the `TranslationBundle`
          // This is used for translating elements / blocks - see `_translateAttributes` for attributes
          // no-op when called in extraction mode (returns [])

        }, {
          key: "_translateMessage",
          value: function _translateMessage(el, message) {
            if (message && this._mode === _VisitorMode.Merge) {
              var nodes = this._translations.get(message);

              if (nodes) {
                return nodes;
              }

              this._reportError(el, "Translation unavailable for message id=\"".concat(this._translations.digest(message), "\""));
            }

            return [];
          } // translate the attributes of an element and remove i18n specific attributes

        }, {
          key: "_translateAttributes",
          value: function _translateAttributes(el) {
            var _this331 = this;

            var attributes = el.attrs;
            var i18nParsedMessageMeta = {};
            attributes.forEach(function (attr) {
              if (attr.name.startsWith(_I18N_ATTR_PREFIX)) {
                i18nParsedMessageMeta[attr.name.slice(_I18N_ATTR_PREFIX.length)] = _parseMessageMeta(attr.value);
              }
            });
            var translatedAttributes = [];
            attributes.forEach(function (attr) {
              if (attr.name === _I18N_ATTR || attr.name.startsWith(_I18N_ATTR_PREFIX)) {
                // strip i18n specific attributes
                return;
              }

              if (attr.value && attr.value != '' && i18nParsedMessageMeta.hasOwnProperty(attr.name)) {
                var _i18nParsedMessageMet = i18nParsedMessageMeta[attr.name],
                    meaning = _i18nParsedMessageMet.meaning,
                    description = _i18nParsedMessageMet.description,
                    id = _i18nParsedMessageMet.id;

                var message = _this331._createI18nMessage([attr], meaning, description, id);

                var nodes = _this331._translations.get(message);

                if (nodes) {
                  if (nodes.length == 0) {
                    translatedAttributes.push(new Attribute(attr.name, '', attr.sourceSpan, undefined
                    /* keySpan */
                    , undefined
                    /* valueSpan */
                    , undefined
                    /* i18n */
                    ));
                  } else if (nodes[0] instanceof Text$3) {
                    var value = nodes[0].value;
                    translatedAttributes.push(new Attribute(attr.name, value, attr.sourceSpan, undefined
                    /* keySpan */
                    , undefined
                    /* valueSpan */
                    , undefined
                    /* i18n */
                    ));
                  } else {
                    _this331._reportError(el, "Unexpected translation for attribute \"".concat(attr.name, "\" (id=\"").concat(id || _this331._translations.digest(message), "\")"));
                  }
                } else {
                  _this331._reportError(el, "Translation unavailable for attribute \"".concat(attr.name, "\" (id=\"").concat(id || _this331._translations.digest(message), "\")"));
                }
              } else {
                translatedAttributes.push(attr);
              }
            });
            return translatedAttributes;
          }
          /**
           * Add the node as a child of the block when:
           * - we are in a block,
           * - we are not inside a ICU message (those are handled separately),
           * - the node is a "direct child" of the block
           */

        }, {
          key: "_mayBeAddBlockChildren",
          value: function _mayBeAddBlockChildren(node) {
            if (this._inI18nBlock && !this._inIcu && this._depth == this._blockStartDepth) {
              this._blockChildren.push(node);
            }
          }
          /**
           * Marks the start of a section, see `_closeTranslatableSection`
           */

        }, {
          key: "_openTranslatableSection",
          value: function _openTranslatableSection(node) {
            if (this._isInTranslatableSection) {
              this._reportError(node, 'Unexpected section start');
            } else {
              this._msgCountAtSectionStart = this._messages.length;
            }
          }
          /**
           * A translatable section could be:
           * - the content of translatable element,
           * - nodes between `<!-- i18n -->` and `<!-- /i18n -->` comments
           */

        }, {
          key: "_isInTranslatableSection",
          get: function get() {
            return this._msgCountAtSectionStart !== void 0;
          }
          /**
           * Terminates a section.
           *
           * If a section has only one significant children (comments not significant) then we should not
           * keep the message from this children:
           *
           * `<p i18n="meaning|description">{ICU message}</p>` would produce two messages:
           * - one for the <p> content with meaning and description,
           * - another one for the ICU message.
           *
           * In this case the last message is discarded as it contains less information (the AST is
           * otherwise identical).
           *
           * Note that we should still keep messages extracted from attributes inside the section (ie in the
           * ICU message here)
           */

        }, {
          key: "_closeTranslatableSection",
          value: function _closeTranslatableSection(node, directChildren) {
            if (!this._isInTranslatableSection) {
              this._reportError(node, 'Unexpected section end');

              return;
            }

            var startIndex = this._msgCountAtSectionStart;
            var significantChildren = directChildren.reduce(function (count, node) {
              return count + (node instanceof Comment ? 0 : 1);
            }, 0);

            if (significantChildren == 1) {
              for (var i = this._messages.length - 1; i >= startIndex; i--) {
                var ast = this._messages[i].nodes;

                if (!(ast.length == 1 && ast[0] instanceof Text$1)) {
                  this._messages.splice(i, 1);

                  break;
                }
              }
            }

            this._msgCountAtSectionStart = undefined;
          }
        }, {
          key: "_reportError",
          value: function _reportError(node, msg) {
            this._errors.push(new I18nError(node.sourceSpan, msg));
          }
        }]);

        return _Visitor$2;
      }();

      function _isOpeningComment(n) {
        return !!(n instanceof Comment && n.value && n.value.startsWith('i18n'));
      }

      function _isClosingComment(n) {
        return !!(n instanceof Comment && n.value && n.value === '/i18n');
      }

      function _getI18nAttr(p) {
        return p.attrs.find(function (attr) {
          return attr.name === _I18N_ATTR;
        }) || null;
      }

      function _parseMessageMeta(i18n) {
        if (!i18n) return {
          meaning: '',
          description: '',
          id: ''
        };
        var idIndex = i18n.indexOf(ID_SEPARATOR);
        var descIndex = i18n.indexOf(MEANING_SEPARATOR);

        var _ref77 = idIndex > -1 ? [i18n.slice(0, idIndex), i18n.slice(idIndex + 2)] : [i18n, ''],
            _ref78 = _slicedToArray(_ref77, 2),
            meaningAndDesc = _ref78[0],
            id = _ref78[1];

        var _ref79 = descIndex > -1 ? [meaningAndDesc.slice(0, descIndex), meaningAndDesc.slice(descIndex + 1)] : ['', meaningAndDesc],
            _ref80 = _slicedToArray(_ref79, 2),
            meaning = _ref80[0],
            description = _ref80[1];

        return {
          meaning: meaning,
          description: description,
          id: id.trim()
        };
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var XmlTagDefinition = /*#__PURE__*/function () {
        function XmlTagDefinition() {
          _classCallCheck2(this, XmlTagDefinition);

          this.closedByParent = false;
          this.isVoid = false;
          this.ignoreFirstLf = false;
          this.canSelfClose = true;
          this.preventNamespaceInheritance = false;
        }

        _createClass2(XmlTagDefinition, [{
          key: "requireExtraParent",
          value: function requireExtraParent(currentParent) {
            return false;
          }
        }, {
          key: "isClosedByChild",
          value: function isClosedByChild(name) {
            return false;
          }
        }, {
          key: "getContentType",
          value: function getContentType() {
            return TagContentType.PARSABLE_DATA;
          }
        }]);

        return XmlTagDefinition;
      }();

      var _TAG_DEFINITION = new XmlTagDefinition();

      function getXmlTagDefinition(tagName) {
        return _TAG_DEFINITION;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var XmlParser = /*#__PURE__*/function (_Parser2) {
        _inherits2(XmlParser, _Parser2);

        var _super157 = _createSuper(XmlParser);

        function XmlParser() {
          _classCallCheck2(this, XmlParser);

          return _super157.call(this, getXmlTagDefinition);
        }

        _createClass2(XmlParser, [{
          key: "parse",
          value: function parse(source, url, options) {
            return _get2(_getPrototypeOf2(XmlParser.prototype), "parse", this).call(this, source, url, options);
          }
        }]);

        return XmlParser;
      }(Parser);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var _VERSION = '1.2';
      var _XMLNS = 'urn:oasis:names:tc:xliff:document:1.2'; // TODO(vicb): make this a param (s/_/-/)

      var _DEFAULT_SOURCE_LANG = 'en';
      var _PLACEHOLDER_TAG$1 = 'x';
      var _MARKER_TAG = 'mrk';
      var _FILE_TAG = 'file';
      var _SOURCE_TAG$1 = 'source';
      var _SEGMENT_SOURCE_TAG = 'seg-source';
      var _ALT_TRANS_TAG = 'alt-trans';
      var _TARGET_TAG = 'target';
      var _UNIT_TAG = 'trans-unit';
      var _CONTEXT_GROUP_TAG = 'context-group';
      var _CONTEXT_TAG = 'context'; // https://docs.oasis-open.org/xliff/v1.2/os/xliff-core.html
      // https://docs.oasis-open.org/xliff/v1.2/xliff-profile-html/xliff-profile-html-1.2.html

      var Xliff = /*#__PURE__*/function (_Serializer2) {
        _inherits2(Xliff, _Serializer2);

        var _super158 = _createSuper(Xliff);

        function Xliff() {
          _classCallCheck2(this, Xliff);

          return _super158.apply(this, arguments);
        }

        _createClass2(Xliff, [{
          key: "write",
          value: function write(messages, locale) {
            var visitor = new _WriteVisitor();
            var transUnits = [];
            messages.forEach(function (message) {
              var _transUnit$children;

              var contextTags = [];
              message.sources.forEach(function (source) {
                var contextGroupTag = new Tag(_CONTEXT_GROUP_TAG, {
                  purpose: 'location'
                });
                contextGroupTag.children.push(new CR(10), new Tag(_CONTEXT_TAG, {
                  'context-type': 'sourcefile'
                }, [new Text$2(source.filePath)]), new CR(10), new Tag(_CONTEXT_TAG, {
                  'context-type': 'linenumber'
                }, [new Text$2("".concat(source.startLine))]), new CR(8));
                contextTags.push(new CR(8), contextGroupTag);
              });
              var transUnit = new Tag(_UNIT_TAG, {
                id: message.id,
                datatype: 'html'
              });

              (_transUnit$children = transUnit.children).push.apply(_transUnit$children, [new CR(8), new Tag(_SOURCE_TAG$1, {}, visitor.serialize(message.nodes))].concat(contextTags));

              if (message.description) {
                transUnit.children.push(new CR(8), new Tag('note', {
                  priority: '1',
                  from: 'description'
                }, [new Text$2(message.description)]));
              }

              if (message.meaning) {
                transUnit.children.push(new CR(8), new Tag('note', {
                  priority: '1',
                  from: 'meaning'
                }, [new Text$2(message.meaning)]));
              }

              transUnit.children.push(new CR(6));
              transUnits.push(new CR(6), transUnit);
            });
            var body = new Tag('body', {}, [].concat(transUnits, [new CR(4)]));
            var file = new Tag('file', {
              'source-language': locale || _DEFAULT_SOURCE_LANG,
              datatype: 'plaintext',
              original: 'ng2.template'
            }, [new CR(4), body, new CR(2)]);
            var xliff = new Tag('xliff', {
              version: _VERSION,
              xmlns: _XMLNS
            }, [new CR(2), file, new CR()]);
            return serialize([new Declaration({
              version: '1.0',
              encoding: 'UTF-8'
            }), new CR(), xliff, new CR()]);
          }
        }, {
          key: "load",
          value: function load(content, url) {
            // xliff to xml nodes
            var xliffParser = new XliffParser();

            var _xliffParser$parse = xliffParser.parse(content, url),
                locale = _xliffParser$parse.locale,
                msgIdToHtml = _xliffParser$parse.msgIdToHtml,
                errors = _xliffParser$parse.errors; // xml nodes to i18n nodes


            var i18nNodesByMsgId = {};
            var converter = new XmlToI18n();
            Object.keys(msgIdToHtml).forEach(function (msgId) {
              var _converter$convert = converter.convert(msgIdToHtml[msgId], url),
                  i18nNodes = _converter$convert.i18nNodes,
                  e = _converter$convert.errors;

              errors.push.apply(errors, _toConsumableArray(e));
              i18nNodesByMsgId[msgId] = i18nNodes;
            });

            if (errors.length) {
              throw new Error("xliff parse errors:\n".concat(errors.join('\n')));
            }

            return {
              locale: locale,
              i18nNodesByMsgId: i18nNodesByMsgId
            };
          }
        }, {
          key: "digest",
          value: function digest(message) {
            return _digest2(message);
          }
        }]);

        return Xliff;
      }(Serializer);

      var _WriteVisitor = /*#__PURE__*/function () {
        function _WriteVisitor() {
          _classCallCheck2(this, _WriteVisitor);
        }

        _createClass2(_WriteVisitor, [{
          key: "visitText",
          value: function visitText(text, context) {
            return [new Text$2(text.value)];
          }
        }, {
          key: "visitContainer",
          value: function visitContainer(container, context) {
            var _this332 = this;

            var nodes = [];
            container.children.forEach(function (node) {
              return nodes.push.apply(nodes, _toConsumableArray(node.visit(_this332)));
            });
            return nodes;
          }
        }, {
          key: "visitIcu",
          value: function visitIcu(icu, context) {
            var _this333 = this;

            var nodes = [new Text$2("{".concat(icu.expressionPlaceholder, ", ").concat(icu.type, ", "))];
            Object.keys(icu.cases).forEach(function (c) {
              nodes.push.apply(nodes, [new Text$2("".concat(c, " {"))].concat(_toConsumableArray(icu.cases[c].visit(_this333)), [new Text$2("} ")]));
            });
            nodes.push(new Text$2("}"));
            return nodes;
          }
        }, {
          key: "visitTagPlaceholder",
          value: function visitTagPlaceholder(ph, context) {
            var ctype = getCtypeForTag(ph.tag);

            if (ph.isVoid) {
              // void tags have no children nor closing tags
              return [new Tag(_PLACEHOLDER_TAG$1, {
                id: ph.startName,
                ctype: ctype,
                'equiv-text': "<".concat(ph.tag, "/>")
              })];
            }

            var startTagPh = new Tag(_PLACEHOLDER_TAG$1, {
              id: ph.startName,
              ctype: ctype,
              'equiv-text': "<".concat(ph.tag, ">")
            });
            var closeTagPh = new Tag(_PLACEHOLDER_TAG$1, {
              id: ph.closeName,
              ctype: ctype,
              'equiv-text': "</".concat(ph.tag, ">")
            });
            return [startTagPh].concat(_toConsumableArray(this.serialize(ph.children)), [closeTagPh]);
          }
        }, {
          key: "visitPlaceholder",
          value: function visitPlaceholder(ph, context) {
            return [new Tag(_PLACEHOLDER_TAG$1, {
              id: ph.name,
              'equiv-text': "{{".concat(ph.value, "}}")
            })];
          }
        }, {
          key: "visitIcuPlaceholder",
          value: function visitIcuPlaceholder(ph, context) {
            var equivText = "{".concat(ph.value.expression, ", ").concat(ph.value.type, ", ").concat(Object.keys(ph.value.cases).map(function (value) {
              return value + ' {...}';
            }).join(' '), "}");
            return [new Tag(_PLACEHOLDER_TAG$1, {
              id: ph.name,
              'equiv-text': equivText
            })];
          }
        }, {
          key: "serialize",
          value: function serialize(nodes) {
            var _ref81,
                _this334 = this;

            return (_ref81 = []).concat.apply(_ref81, _toConsumableArray(nodes.map(function (node) {
              return node.visit(_this334);
            })));
          }
        }]);

        return _WriteVisitor;
      }(); // TODO(vicb): add error management (structure)
      // Extract messages as xml nodes from the xliff file


      var XliffParser = /*#__PURE__*/function () {
        function XliffParser() {
          _classCallCheck2(this, XliffParser);

          this._locale = null;
        }

        _createClass2(XliffParser, [{
          key: "parse",
          value: function parse(xliff, url) {
            this._unitMlString = null;
            this._msgIdToHtml = {};
            var xml = new XmlParser().parse(xliff, url);
            this._errors = xml.errors;
            visitAll$1(this, xml.rootNodes, null);
            return {
              msgIdToHtml: this._msgIdToHtml,
              errors: this._errors,
              locale: this._locale
            };
          }
        }, {
          key: "visitElement",
          value: function visitElement(element, context) {
            switch (element.name) {
              case _UNIT_TAG:
                this._unitMlString = null;
                var idAttr = element.attrs.find(function (attr) {
                  return attr.name === 'id';
                });

                if (!idAttr) {
                  this._addError(element, "<".concat(_UNIT_TAG, "> misses the \"id\" attribute"));
                } else {
                  var id = idAttr.value;

                  if (this._msgIdToHtml.hasOwnProperty(id)) {
                    this._addError(element, "Duplicated translations for msg ".concat(id));
                  } else {
                    visitAll$1(this, element.children, null);

                    if (typeof this._unitMlString === 'string') {
                      this._msgIdToHtml[id] = this._unitMlString;
                    } else {
                      this._addError(element, "Message ".concat(id, " misses a translation"));
                    }
                  }
                }

                break;
              // ignore those tags

              case _SOURCE_TAG$1:
              case _SEGMENT_SOURCE_TAG:
              case _ALT_TRANS_TAG:
                break;

              case _TARGET_TAG:
                var innerTextStart = element.startSourceSpan.end.offset;
                var innerTextEnd = element.endSourceSpan.start.offset;
                var content = element.startSourceSpan.start.file.content;
                var innerText = content.slice(innerTextStart, innerTextEnd);
                this._unitMlString = innerText;
                break;

              case _FILE_TAG:
                var localeAttr = element.attrs.find(function (attr) {
                  return attr.name === 'target-language';
                });

                if (localeAttr) {
                  this._locale = localeAttr.value;
                }

                visitAll$1(this, element.children, null);
                break;

              default:
                // TODO(vicb): assert file structure, xliff version
                // For now only recurse on unhandled nodes
                visitAll$1(this, element.children, null);
            }
          }
        }, {
          key: "visitAttribute",
          value: function visitAttribute(attribute, context) {}
        }, {
          key: "visitText",
          value: function visitText(text, context) {}
        }, {
          key: "visitComment",
          value: function visitComment(comment, context) {}
        }, {
          key: "visitExpansion",
          value: function visitExpansion(expansion, context) {}
        }, {
          key: "visitExpansionCase",
          value: function visitExpansionCase(expansionCase, context) {}
        }, {
          key: "_addError",
          value: function _addError(node, message) {
            this._errors.push(new I18nError(node.sourceSpan, message));
          }
        }]);

        return XliffParser;
      }(); // Convert ml nodes (xliff syntax) to i18n nodes


      var XmlToI18n = /*#__PURE__*/function () {
        function XmlToI18n() {
          _classCallCheck2(this, XmlToI18n);
        }

        _createClass2(XmlToI18n, [{
          key: "convert",
          value: function convert(message, url) {
            var _ref82;

            var xmlIcu = new XmlParser().parse(message, url, {
              tokenizeExpansionForms: true
            });
            this._errors = xmlIcu.errors;
            var i18nNodes = this._errors.length > 0 || xmlIcu.rootNodes.length == 0 ? [] : (_ref82 = []).concat.apply(_ref82, _toConsumableArray(visitAll$1(this, xmlIcu.rootNodes)));
            return {
              i18nNodes: i18nNodes,
              errors: this._errors
            };
          }
        }, {
          key: "visitText",
          value: function visitText(text, context) {
            return new Text$1(text.value, text.sourceSpan);
          }
        }, {
          key: "visitElement",
          value: function visitElement(el, context) {
            if (el.name === _PLACEHOLDER_TAG$1) {
              var nameAttr = el.attrs.find(function (attr) {
                return attr.name === 'id';
              });

              if (nameAttr) {
                return new Placeholder('', nameAttr.value, el.sourceSpan);
              }

              this._addError(el, "<".concat(_PLACEHOLDER_TAG$1, "> misses the \"id\" attribute"));

              return null;
            }

            if (el.name === _MARKER_TAG) {
              var _ref83;

              return (_ref83 = []).concat.apply(_ref83, _toConsumableArray(visitAll$1(this, el.children)));
            }

            this._addError(el, "Unexpected tag");

            return null;
          }
        }, {
          key: "visitExpansion",
          value: function visitExpansion(icu, context) {
            var caseMap = {};
            visitAll$1(this, icu.cases).forEach(function (c) {
              caseMap[c.value] = new Container(c.nodes, icu.sourceSpan);
            });
            return new Icu$1(icu.switchValue, icu.type, caseMap, icu.sourceSpan);
          }
        }, {
          key: "visitExpansionCase",
          value: function visitExpansionCase(icuCase, context) {
            return {
              value: icuCase.value,
              nodes: visitAll$1(this, icuCase.expression)
            };
          }
        }, {
          key: "visitComment",
          value: function visitComment(comment, context) {}
        }, {
          key: "visitAttribute",
          value: function visitAttribute(attribute, context) {}
        }, {
          key: "_addError",
          value: function _addError(node, message) {
            this._errors.push(new I18nError(node.sourceSpan, message));
          }
        }]);

        return XmlToI18n;
      }();

      function getCtypeForTag(tag) {
        switch (tag.toLowerCase()) {
          case 'br':
            return 'lb';

          case 'img':
            return 'image';

          default:
            return "x-".concat(tag);
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var _VERSION$1 = '2.0';
      var _XMLNS$1 = 'urn:oasis:names:tc:xliff:document:2.0'; // TODO(vicb): make this a param (s/_/-/)

      var _DEFAULT_SOURCE_LANG$1 = 'en';
      var _PLACEHOLDER_TAG$2 = 'ph';
      var _PLACEHOLDER_SPANNING_TAG = 'pc';
      var _MARKER_TAG$1 = 'mrk';
      var _XLIFF_TAG = 'xliff';
      var _SOURCE_TAG$2 = 'source';
      var _TARGET_TAG$1 = 'target';
      var _UNIT_TAG$1 = 'unit'; // https://docs.oasis-open.org/xliff/xliff-core/v2.0/os/xliff-core-v2.0-os.html

      var Xliff2 = /*#__PURE__*/function (_Serializer3) {
        _inherits2(Xliff2, _Serializer3);

        var _super159 = _createSuper(Xliff2);

        function Xliff2() {
          _classCallCheck2(this, Xliff2);

          return _super159.apply(this, arguments);
        }

        _createClass2(Xliff2, [{
          key: "write",
          value: function write(messages, locale) {
            var visitor = new _WriteVisitor$1();
            var units = [];
            messages.forEach(function (message) {
              var unit = new Tag(_UNIT_TAG$1, {
                id: message.id
              });
              var notes = new Tag('notes');

              if (message.description || message.meaning) {
                if (message.description) {
                  notes.children.push(new CR(8), new Tag('note', {
                    category: 'description'
                  }, [new Text$2(message.description)]));
                }

                if (message.meaning) {
                  notes.children.push(new CR(8), new Tag('note', {
                    category: 'meaning'
                  }, [new Text$2(message.meaning)]));
                }
              }

              message.sources.forEach(function (source) {
                notes.children.push(new CR(8), new Tag('note', {
                  category: 'location'
                }, [new Text$2("".concat(source.filePath, ":").concat(source.startLine).concat(source.endLine !== source.startLine ? ',' + source.endLine : ''))]));
              });
              notes.children.push(new CR(6));
              unit.children.push(new CR(6), notes);
              var segment = new Tag('segment');
              segment.children.push(new CR(8), new Tag(_SOURCE_TAG$2, {}, visitor.serialize(message.nodes)), new CR(6));
              unit.children.push(new CR(6), segment, new CR(4));
              units.push(new CR(4), unit);
            });
            var file = new Tag('file', {
              'original': 'ng.template',
              id: 'ngi18n'
            }, [].concat(units, [new CR(2)]));
            var xliff = new Tag(_XLIFF_TAG, {
              version: _VERSION$1,
              xmlns: _XMLNS$1,
              srcLang: locale || _DEFAULT_SOURCE_LANG$1
            }, [new CR(2), file, new CR()]);
            return serialize([new Declaration({
              version: '1.0',
              encoding: 'UTF-8'
            }), new CR(), xliff, new CR()]);
          }
        }, {
          key: "load",
          value: function load(content, url) {
            // xliff to xml nodes
            var xliff2Parser = new Xliff2Parser();

            var _xliff2Parser$parse = xliff2Parser.parse(content, url),
                locale = _xliff2Parser$parse.locale,
                msgIdToHtml = _xliff2Parser$parse.msgIdToHtml,
                errors = _xliff2Parser$parse.errors; // xml nodes to i18n nodes


            var i18nNodesByMsgId = {};
            var converter = new XmlToI18n$1();
            Object.keys(msgIdToHtml).forEach(function (msgId) {
              var _converter$convert2 = converter.convert(msgIdToHtml[msgId], url),
                  i18nNodes = _converter$convert2.i18nNodes,
                  e = _converter$convert2.errors;

              errors.push.apply(errors, _toConsumableArray(e));
              i18nNodesByMsgId[msgId] = i18nNodes;
            });

            if (errors.length) {
              throw new Error("xliff2 parse errors:\n".concat(errors.join('\n')));
            }

            return {
              locale: locale,
              i18nNodesByMsgId: i18nNodesByMsgId
            };
          }
        }, {
          key: "digest",
          value: function digest(message) {
            return decimalDigest(message);
          }
        }]);

        return Xliff2;
      }(Serializer);

      var _WriteVisitor$1 = /*#__PURE__*/function () {
        function _WriteVisitor$1() {
          _classCallCheck2(this, _WriteVisitor$1);
        }

        _createClass2(_WriteVisitor$1, [{
          key: "visitText",
          value: function visitText(text, context) {
            return [new Text$2(text.value)];
          }
        }, {
          key: "visitContainer",
          value: function visitContainer(container, context) {
            var _this335 = this;

            var nodes = [];
            container.children.forEach(function (node) {
              return nodes.push.apply(nodes, _toConsumableArray(node.visit(_this335)));
            });
            return nodes;
          }
        }, {
          key: "visitIcu",
          value: function visitIcu(icu, context) {
            var _this336 = this;

            var nodes = [new Text$2("{".concat(icu.expressionPlaceholder, ", ").concat(icu.type, ", "))];
            Object.keys(icu.cases).forEach(function (c) {
              nodes.push.apply(nodes, [new Text$2("".concat(c, " {"))].concat(_toConsumableArray(icu.cases[c].visit(_this336)), [new Text$2("} ")]));
            });
            nodes.push(new Text$2("}"));
            return nodes;
          }
        }, {
          key: "visitTagPlaceholder",
          value: function visitTagPlaceholder(ph, context) {
            var _ref84,
                _this337 = this;

            var type = getTypeForTag(ph.tag);

            if (ph.isVoid) {
              var tagPh = new Tag(_PLACEHOLDER_TAG$2, {
                id: (this._nextPlaceholderId++).toString(),
                equiv: ph.startName,
                type: type,
                disp: "<".concat(ph.tag, "/>")
              });
              return [tagPh];
            }

            var tagPc = new Tag(_PLACEHOLDER_SPANNING_TAG, {
              id: (this._nextPlaceholderId++).toString(),
              equivStart: ph.startName,
              equivEnd: ph.closeName,
              type: type,
              dispStart: "<".concat(ph.tag, ">"),
              dispEnd: "</".concat(ph.tag, ">")
            });

            var nodes = (_ref84 = []).concat.apply(_ref84, _toConsumableArray(ph.children.map(function (node) {
              return node.visit(_this337);
            })));

            if (nodes.length) {
              nodes.forEach(function (node) {
                return tagPc.children.push(node);
              });
            } else {
              tagPc.children.push(new Text$2(''));
            }

            return [tagPc];
          }
        }, {
          key: "visitPlaceholder",
          value: function visitPlaceholder(ph, context) {
            var idStr = (this._nextPlaceholderId++).toString();
            return [new Tag(_PLACEHOLDER_TAG$2, {
              id: idStr,
              equiv: ph.name,
              disp: "{{".concat(ph.value, "}}")
            })];
          }
        }, {
          key: "visitIcuPlaceholder",
          value: function visitIcuPlaceholder(ph, context) {
            var cases = Object.keys(ph.value.cases).map(function (value) {
              return value + ' {...}';
            }).join(' ');
            var idStr = (this._nextPlaceholderId++).toString();
            return [new Tag(_PLACEHOLDER_TAG$2, {
              id: idStr,
              equiv: ph.name,
              disp: "{".concat(ph.value.expression, ", ").concat(ph.value.type, ", ").concat(cases, "}")
            })];
          }
        }, {
          key: "serialize",
          value: function serialize(nodes) {
            var _ref85,
                _this338 = this;

            this._nextPlaceholderId = 0;
            return (_ref85 = []).concat.apply(_ref85, _toConsumableArray(nodes.map(function (node) {
              return node.visit(_this338);
            })));
          }
        }]);

        return _WriteVisitor$1;
      }(); // Extract messages as xml nodes from the xliff file


      var Xliff2Parser = /*#__PURE__*/function () {
        function Xliff2Parser() {
          _classCallCheck2(this, Xliff2Parser);

          this._locale = null;
        }

        _createClass2(Xliff2Parser, [{
          key: "parse",
          value: function parse(xliff, url) {
            this._unitMlString = null;
            this._msgIdToHtml = {};
            var xml = new XmlParser().parse(xliff, url);
            this._errors = xml.errors;
            visitAll$1(this, xml.rootNodes, null);
            return {
              msgIdToHtml: this._msgIdToHtml,
              errors: this._errors,
              locale: this._locale
            };
          }
        }, {
          key: "visitElement",
          value: function visitElement(element, context) {
            switch (element.name) {
              case _UNIT_TAG$1:
                this._unitMlString = null;
                var idAttr = element.attrs.find(function (attr) {
                  return attr.name === 'id';
                });

                if (!idAttr) {
                  this._addError(element, "<".concat(_UNIT_TAG$1, "> misses the \"id\" attribute"));
                } else {
                  var id = idAttr.value;

                  if (this._msgIdToHtml.hasOwnProperty(id)) {
                    this._addError(element, "Duplicated translations for msg ".concat(id));
                  } else {
                    visitAll$1(this, element.children, null);

                    if (typeof this._unitMlString === 'string') {
                      this._msgIdToHtml[id] = this._unitMlString;
                    } else {
                      this._addError(element, "Message ".concat(id, " misses a translation"));
                    }
                  }
                }

                break;

              case _SOURCE_TAG$2:
                // ignore source message
                break;

              case _TARGET_TAG$1:
                var innerTextStart = element.startSourceSpan.end.offset;
                var innerTextEnd = element.endSourceSpan.start.offset;
                var content = element.startSourceSpan.start.file.content;
                var innerText = content.slice(innerTextStart, innerTextEnd);
                this._unitMlString = innerText;
                break;

              case _XLIFF_TAG:
                var localeAttr = element.attrs.find(function (attr) {
                  return attr.name === 'trgLang';
                });

                if (localeAttr) {
                  this._locale = localeAttr.value;
                }

                var versionAttr = element.attrs.find(function (attr) {
                  return attr.name === 'version';
                });

                if (versionAttr) {
                  var version = versionAttr.value;

                  if (version !== '2.0') {
                    this._addError(element, "The XLIFF file version ".concat(version, " is not compatible with XLIFF 2.0 serializer"));
                  } else {
                    visitAll$1(this, element.children, null);
                  }
                }

                break;

              default:
                visitAll$1(this, element.children, null);
            }
          }
        }, {
          key: "visitAttribute",
          value: function visitAttribute(attribute, context) {}
        }, {
          key: "visitText",
          value: function visitText(text, context) {}
        }, {
          key: "visitComment",
          value: function visitComment(comment, context) {}
        }, {
          key: "visitExpansion",
          value: function visitExpansion(expansion, context) {}
        }, {
          key: "visitExpansionCase",
          value: function visitExpansionCase(expansionCase, context) {}
        }, {
          key: "_addError",
          value: function _addError(node, message) {
            this._errors.push(new I18nError(node.sourceSpan, message));
          }
        }]);

        return Xliff2Parser;
      }(); // Convert ml nodes (xliff syntax) to i18n nodes


      var XmlToI18n$1 = /*#__PURE__*/function () {
        function XmlToI18n$1() {
          _classCallCheck2(this, XmlToI18n$1);
        }

        _createClass2(XmlToI18n$1, [{
          key: "convert",
          value: function convert(message, url) {
            var _ref86;

            var xmlIcu = new XmlParser().parse(message, url, {
              tokenizeExpansionForms: true
            });
            this._errors = xmlIcu.errors;
            var i18nNodes = this._errors.length > 0 || xmlIcu.rootNodes.length == 0 ? [] : (_ref86 = []).concat.apply(_ref86, _toConsumableArray(visitAll$1(this, xmlIcu.rootNodes)));
            return {
              i18nNodes: i18nNodes,
              errors: this._errors
            };
          }
        }, {
          key: "visitText",
          value: function visitText(text, context) {
            return new Text$1(text.value, text.sourceSpan);
          }
        }, {
          key: "visitElement",
          value: function visitElement(el, context) {
            var _this339 = this,
                _ref87;

            switch (el.name) {
              case _PLACEHOLDER_TAG$2:
                var nameAttr = el.attrs.find(function (attr) {
                  return attr.name === 'equiv';
                });

                if (nameAttr) {
                  return [new Placeholder('', nameAttr.value, el.sourceSpan)];
                }

                this._addError(el, "<".concat(_PLACEHOLDER_TAG$2, "> misses the \"equiv\" attribute"));

                break;

              case _PLACEHOLDER_SPANNING_TAG:
                var startAttr = el.attrs.find(function (attr) {
                  return attr.name === 'equivStart';
                });
                var endAttr = el.attrs.find(function (attr) {
                  return attr.name === 'equivEnd';
                });

                if (!startAttr) {
                  this._addError(el, "<".concat(_PLACEHOLDER_TAG$2, "> misses the \"equivStart\" attribute"));
                } else if (!endAttr) {
                  this._addError(el, "<".concat(_PLACEHOLDER_TAG$2, "> misses the \"equivEnd\" attribute"));
                } else {
                  var startId = startAttr.value;
                  var endId = endAttr.value;
                  var nodes = [];
                  return nodes.concat.apply(nodes, [new Placeholder('', startId, el.sourceSpan)].concat(_toConsumableArray(el.children.map(function (node) {
                    return node.visit(_this339, null);
                  })), [new Placeholder('', endId, el.sourceSpan)]));
                }

                break;

              case _MARKER_TAG$1:
                return (_ref87 = []).concat.apply(_ref87, _toConsumableArray(visitAll$1(this, el.children)));

              default:
                this._addError(el, "Unexpected tag");

            }

            return null;
          }
        }, {
          key: "visitExpansion",
          value: function visitExpansion(icu, context) {
            var caseMap = {};
            visitAll$1(this, icu.cases).forEach(function (c) {
              caseMap[c.value] = new Container(c.nodes, icu.sourceSpan);
            });
            return new Icu$1(icu.switchValue, icu.type, caseMap, icu.sourceSpan);
          }
        }, {
          key: "visitExpansionCase",
          value: function visitExpansionCase(icuCase, context) {
            var _ref88;

            return {
              value: icuCase.value,
              nodes: (_ref88 = []).concat.apply(_ref88, _toConsumableArray(visitAll$1(this, icuCase.expression)))
            };
          }
        }, {
          key: "visitComment",
          value: function visitComment(comment, context) {}
        }, {
          key: "visitAttribute",
          value: function visitAttribute(attribute, context) {}
        }, {
          key: "_addError",
          value: function _addError(node, message) {
            this._errors.push(new I18nError(node.sourceSpan, message));
          }
        }]);

        return XmlToI18n$1;
      }();

      function getTypeForTag(tag) {
        switch (tag.toLowerCase()) {
          case 'br':
          case 'b':
          case 'i':
          case 'u':
            return 'fmt';

          case 'img':
            return 'image';

          case 'a':
            return 'link';

          default:
            return 'other';
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var _TRANSLATIONS_TAG = 'translationbundle';
      var _TRANSLATION_TAG = 'translation';
      var _PLACEHOLDER_TAG$3 = 'ph';

      var Xtb = /*#__PURE__*/function (_Serializer4) {
        _inherits2(Xtb, _Serializer4);

        var _super160 = _createSuper(Xtb);

        function Xtb() {
          _classCallCheck2(this, Xtb);

          return _super160.apply(this, arguments);
        }

        _createClass2(Xtb, [{
          key: "write",
          value: function write(messages, locale) {
            throw new Error('Unsupported');
          }
        }, {
          key: "load",
          value: function load(content, url) {
            // xtb to xml nodes
            var xtbParser = new XtbParser();

            var _xtbParser$parse = xtbParser.parse(content, url),
                locale = _xtbParser$parse.locale,
                msgIdToHtml = _xtbParser$parse.msgIdToHtml,
                errors = _xtbParser$parse.errors; // xml nodes to i18n nodes


            var i18nNodesByMsgId = {};
            var converter = new XmlToI18n$2(); // Because we should be able to load xtb files that rely on features not supported by angular,
            // we need to delay the conversion of html to i18n nodes so that non angular messages are not
            // converted

            Object.keys(msgIdToHtml).forEach(function (msgId) {
              var valueFn = function valueFn() {
                var _converter$convert3 = converter.convert(msgIdToHtml[msgId], url),
                    i18nNodes = _converter$convert3.i18nNodes,
                    errors = _converter$convert3.errors;

                if (errors.length) {
                  throw new Error("xtb parse errors:\n".concat(errors.join('\n')));
                }

                return i18nNodes;
              };

              createLazyProperty(i18nNodesByMsgId, msgId, valueFn);
            });

            if (errors.length) {
              throw new Error("xtb parse errors:\n".concat(errors.join('\n')));
            }

            return {
              locale: locale,
              i18nNodesByMsgId: i18nNodesByMsgId
            };
          }
        }, {
          key: "digest",
          value: function digest(message) {
            return digest$1(message);
          }
        }, {
          key: "createNameMapper",
          value: function createNameMapper(message) {
            return new SimplePlaceholderMapper(message, toPublicName);
          }
        }]);

        return Xtb;
      }(Serializer);

      function createLazyProperty(messages, id, valueFn) {
        Object.defineProperty(messages, id, {
          configurable: true,
          enumerable: true,
          get: function get() {
            var value = valueFn();
            Object.defineProperty(messages, id, {
              enumerable: true,
              value: value
            });
            return value;
          },
          set: function set(_) {
            throw new Error('Could not overwrite an XTB translation');
          }
        });
      } // Extract messages as xml nodes from the xtb file


      var XtbParser = /*#__PURE__*/function () {
        function XtbParser() {
          _classCallCheck2(this, XtbParser);

          this._locale = null;
        }

        _createClass2(XtbParser, [{
          key: "parse",
          value: function parse(xtb, url) {
            this._bundleDepth = 0;
            this._msgIdToHtml = {}; // We can not parse the ICU messages at this point as some messages might not originate
            // from Angular that could not be lex'd.

            var xml = new XmlParser().parse(xtb, url);
            this._errors = xml.errors;
            visitAll$1(this, xml.rootNodes);
            return {
              msgIdToHtml: this._msgIdToHtml,
              errors: this._errors,
              locale: this._locale
            };
          }
        }, {
          key: "visitElement",
          value: function visitElement(element, context) {
            switch (element.name) {
              case _TRANSLATIONS_TAG:
                this._bundleDepth++;

                if (this._bundleDepth > 1) {
                  this._addError(element, "<".concat(_TRANSLATIONS_TAG, "> elements can not be nested"));
                }

                var langAttr = element.attrs.find(function (attr) {
                  return attr.name === 'lang';
                });

                if (langAttr) {
                  this._locale = langAttr.value;
                }

                visitAll$1(this, element.children, null);
                this._bundleDepth--;
                break;

              case _TRANSLATION_TAG:
                var idAttr = element.attrs.find(function (attr) {
                  return attr.name === 'id';
                });

                if (!idAttr) {
                  this._addError(element, "<".concat(_TRANSLATION_TAG, "> misses the \"id\" attribute"));
                } else {
                  var id = idAttr.value;

                  if (this._msgIdToHtml.hasOwnProperty(id)) {
                    this._addError(element, "Duplicated translations for msg ".concat(id));
                  } else {
                    var innerTextStart = element.startSourceSpan.end.offset;
                    var innerTextEnd = element.endSourceSpan.start.offset;
                    var content = element.startSourceSpan.start.file.content;
                    var innerText = content.slice(innerTextStart, innerTextEnd);
                    this._msgIdToHtml[id] = innerText;
                  }
                }

                break;

              default:
                this._addError(element, 'Unexpected tag');

            }
          }
        }, {
          key: "visitAttribute",
          value: function visitAttribute(attribute, context) {}
        }, {
          key: "visitText",
          value: function visitText(text, context) {}
        }, {
          key: "visitComment",
          value: function visitComment(comment, context) {}
        }, {
          key: "visitExpansion",
          value: function visitExpansion(expansion, context) {}
        }, {
          key: "visitExpansionCase",
          value: function visitExpansionCase(expansionCase, context) {}
        }, {
          key: "_addError",
          value: function _addError(node, message) {
            this._errors.push(new I18nError(node.sourceSpan, message));
          }
        }]);

        return XtbParser;
      }(); // Convert ml nodes (xtb syntax) to i18n nodes


      var XmlToI18n$2 = /*#__PURE__*/function () {
        function XmlToI18n$2() {
          _classCallCheck2(this, XmlToI18n$2);
        }

        _createClass2(XmlToI18n$2, [{
          key: "convert",
          value: function convert(message, url) {
            var xmlIcu = new XmlParser().parse(message, url, {
              tokenizeExpansionForms: true
            });
            this._errors = xmlIcu.errors;
            var i18nNodes = this._errors.length > 0 || xmlIcu.rootNodes.length == 0 ? [] : visitAll$1(this, xmlIcu.rootNodes);
            return {
              i18nNodes: i18nNodes,
              errors: this._errors
            };
          }
        }, {
          key: "visitText",
          value: function visitText(text, context) {
            return new Text$1(text.value, text.sourceSpan);
          }
        }, {
          key: "visitExpansion",
          value: function visitExpansion(icu, context) {
            var caseMap = {};
            visitAll$1(this, icu.cases).forEach(function (c) {
              caseMap[c.value] = new Container(c.nodes, icu.sourceSpan);
            });
            return new Icu$1(icu.switchValue, icu.type, caseMap, icu.sourceSpan);
          }
        }, {
          key: "visitExpansionCase",
          value: function visitExpansionCase(icuCase, context) {
            return {
              value: icuCase.value,
              nodes: visitAll$1(this, icuCase.expression)
            };
          }
        }, {
          key: "visitElement",
          value: function visitElement(el, context) {
            if (el.name === _PLACEHOLDER_TAG$3) {
              var nameAttr = el.attrs.find(function (attr) {
                return attr.name === 'name';
              });

              if (nameAttr) {
                return new Placeholder('', nameAttr.value, el.sourceSpan);
              }

              this._addError(el, "<".concat(_PLACEHOLDER_TAG$3, "> misses the \"name\" attribute"));
            } else {
              this._addError(el, "Unexpected tag");
            }

            return null;
          }
        }, {
          key: "visitComment",
          value: function visitComment(comment, context) {}
        }, {
          key: "visitAttribute",
          value: function visitAttribute(attribute, context) {}
        }, {
          key: "_addError",
          value: function _addError(node, message) {
            this._errors.push(new I18nError(node.sourceSpan, message));
          }
        }]);

        return XmlToI18n$2;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A container for translated messages
       */


      var TranslationBundle = /*#__PURE__*/function () {
        function TranslationBundle() {
          var _i18nNodesByMsgId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

          var locale = arguments.length > 1 ? arguments[1] : undefined;
          var digest = arguments.length > 2 ? arguments[2] : undefined;
          var mapperFactory = arguments.length > 3 ? arguments[3] : undefined;
          var missingTranslationStrategy = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : MissingTranslationStrategy.Warning;
          var console = arguments.length > 5 ? arguments[5] : undefined;

          _classCallCheck2(this, TranslationBundle);

          this._i18nNodesByMsgId = _i18nNodesByMsgId;
          this.digest = digest;
          this.mapperFactory = mapperFactory;
          this._i18nToHtml = new I18nToHtmlVisitor(_i18nNodesByMsgId, locale, digest, mapperFactory, missingTranslationStrategy, console);
        } // Creates a `TranslationBundle` by parsing the given `content` with the `serializer`.


        _createClass2(TranslationBundle, [{
          key: "get",
          value: // Returns the translation as HTML nodes from the given source message.
          function get(srcMsg) {
            var html = this._i18nToHtml.convert(srcMsg);

            if (html.errors.length) {
              throw new Error(html.errors.join('\n'));
            }

            return html.nodes;
          }
        }, {
          key: "has",
          value: function has(srcMsg) {
            return this.digest(srcMsg) in this._i18nNodesByMsgId;
          }
        }], [{
          key: "load",
          value: function load(content, url, serializer, missingTranslationStrategy, console) {
            var _serializer$load = serializer.load(content, url),
                locale = _serializer$load.locale,
                i18nNodesByMsgId = _serializer$load.i18nNodesByMsgId;

            var digestFn = function digestFn(m) {
              return serializer.digest(m);
            };

            var mapperFactory = function mapperFactory(m) {
              return serializer.createNameMapper(m);
            };

            return new TranslationBundle(i18nNodesByMsgId, locale, digestFn, mapperFactory, missingTranslationStrategy, console);
          }
        }]);

        return TranslationBundle;
      }();

      var I18nToHtmlVisitor = /*#__PURE__*/function () {
        function I18nToHtmlVisitor() {
          var _i18nNodesByMsgId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

          var _locale = arguments.length > 1 ? arguments[1] : undefined;

          var _digest = arguments.length > 2 ? arguments[2] : undefined;

          var _mapperFactory = arguments.length > 3 ? arguments[3] : undefined;

          var _missingTranslationStrategy = arguments.length > 4 ? arguments[4] : undefined;

          var _console = arguments.length > 5 ? arguments[5] : undefined;

          _classCallCheck2(this, I18nToHtmlVisitor);

          this._i18nNodesByMsgId = _i18nNodesByMsgId;
          this._locale = _locale;
          this._digest = _digest;
          this._mapperFactory = _mapperFactory;
          this._missingTranslationStrategy = _missingTranslationStrategy;
          this._console = _console;
          this._contextStack = [];
          this._errors = [];
        }

        _createClass2(I18nToHtmlVisitor, [{
          key: "convert",
          value: function convert(srcMsg) {
            this._contextStack.length = 0;
            this._errors.length = 0; // i18n to text

            var text = this._convertToText(srcMsg); // text to html


            var url = srcMsg.nodes[0].sourceSpan.start.file.url;
            var html = new HtmlParser().parse(text, url, {
              tokenizeExpansionForms: true
            });
            return {
              nodes: html.rootNodes,
              errors: [].concat(_toConsumableArray(this._errors), _toConsumableArray(html.errors))
            };
          }
        }, {
          key: "visitText",
          value: function visitText(text, context) {
            // `convert()` uses an `HtmlParser` to return `html.Node`s
            // we should then make sure that any special characters are escaped
            return escapeXml(text.value);
          }
        }, {
          key: "visitContainer",
          value: function visitContainer(container, context) {
            var _this340 = this;

            return container.children.map(function (n) {
              return n.visit(_this340);
            }).join('');
          }
        }, {
          key: "visitIcu",
          value: function visitIcu(icu, context) {
            var _this341 = this;

            var cases = Object.keys(icu.cases).map(function (k) {
              return "".concat(k, " {").concat(icu.cases[k].visit(_this341), "}");
            }); // TODO(vicb): Once all format switch to using expression placeholders
            // we should throw when the placeholder is not in the source message

            var exp = this._srcMsg.placeholders.hasOwnProperty(icu.expression) ? this._srcMsg.placeholders[icu.expression].text : icu.expression;
            return "{".concat(exp, ", ").concat(icu.type, ", ").concat(cases.join(' '), "}");
          }
        }, {
          key: "visitPlaceholder",
          value: function visitPlaceholder(ph, context) {
            var phName = this._mapper(ph.name);

            if (this._srcMsg.placeholders.hasOwnProperty(phName)) {
              return this._srcMsg.placeholders[phName].text;
            }

            if (this._srcMsg.placeholderToMessage.hasOwnProperty(phName)) {
              return this._convertToText(this._srcMsg.placeholderToMessage[phName]);
            }

            this._addError(ph, "Unknown placeholder \"".concat(ph.name, "\""));

            return '';
          } // Loaded message contains only placeholders (vs tag and icu placeholders).
          // However when a translation can not be found, we need to serialize the source message
          // which can contain tag placeholders

        }, {
          key: "visitTagPlaceholder",
          value: function visitTagPlaceholder(ph, context) {
            var _this342 = this;

            var tag = "".concat(ph.tag);
            var attrs = Object.keys(ph.attrs).map(function (name) {
              return "".concat(name, "=\"").concat(ph.attrs[name], "\"");
            }).join(' ');

            if (ph.isVoid) {
              return "<".concat(tag, " ").concat(attrs, "/>");
            }

            var children = ph.children.map(function (c) {
              return c.visit(_this342);
            }).join('');
            return "<".concat(tag, " ").concat(attrs, ">").concat(children, "</").concat(tag, ">");
          } // Loaded message contains only placeholders (vs tag and icu placeholders).
          // However when a translation can not be found, we need to serialize the source message
          // which can contain tag placeholders

        }, {
          key: "visitIcuPlaceholder",
          value: function visitIcuPlaceholder(ph, context) {
            // An ICU placeholder references the source message to be serialized
            return this._convertToText(this._srcMsg.placeholderToMessage[ph.name]);
          }
          /**
           * Convert a source message to a translated text string:
           * - text nodes are replaced with their translation,
           * - placeholders are replaced with their content,
           * - ICU nodes are converted to ICU expressions.
           */

        }, {
          key: "_convertToText",
          value: function _convertToText(srcMsg) {
            var _this343 = this;

            var id = this._digest(srcMsg);

            var mapper = this._mapperFactory ? this._mapperFactory(srcMsg) : null;
            var nodes;

            this._contextStack.push({
              msg: this._srcMsg,
              mapper: this._mapper
            });

            this._srcMsg = srcMsg;

            if (this._i18nNodesByMsgId.hasOwnProperty(id)) {
              // When there is a translation use its nodes as the source
              // And create a mapper to convert serialized placeholder names to internal names
              nodes = this._i18nNodesByMsgId[id];

              this._mapper = function (name) {
                return mapper ? mapper.toInternalName(name) : name;
              };
            } else {
              // When no translation has been found
              // - report an error / a warning / nothing,
              // - use the nodes from the original message
              // - placeholders are already internal and need no mapper
              if (this._missingTranslationStrategy === MissingTranslationStrategy.Error) {
                var ctx = this._locale ? " for locale \"".concat(this._locale, "\"") : '';

                this._addError(srcMsg.nodes[0], "Missing translation for message \"".concat(id, "\"").concat(ctx));
              } else if (this._console && this._missingTranslationStrategy === MissingTranslationStrategy.Warning) {
                var _ctx2 = this._locale ? " for locale \"".concat(this._locale, "\"") : '';

                this._console.warn("Missing translation for message \"".concat(id, "\"").concat(_ctx2));
              }

              nodes = srcMsg.nodes;

              this._mapper = function (name) {
                return name;
              };
            }

            var text = nodes.map(function (node) {
              return node.visit(_this343);
            }).join('');

            var context = this._contextStack.pop();

            this._srcMsg = context.msg;
            this._mapper = context.mapper;
            return text;
          }
        }, {
          key: "_addError",
          value: function _addError(el, msg) {
            this._errors.push(new I18nError(el.sourceSpan, msg));
          }
        }]);

        return I18nToHtmlVisitor;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var I18NHtmlParser = /*#__PURE__*/function () {
        function I18NHtmlParser(_htmlParser, translations, translationsFormat) {
          var missingTranslation = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : MissingTranslationStrategy.Warning;
          var console = arguments.length > 4 ? arguments[4] : undefined;

          _classCallCheck2(this, I18NHtmlParser);

          this._htmlParser = _htmlParser;

          if (translations) {
            var _serializer = createSerializer(translationsFormat);

            this._translationBundle = TranslationBundle.load(translations, 'i18n', _serializer, missingTranslation, console);
          } else {
            this._translationBundle = new TranslationBundle({}, null, _digest2, undefined, missingTranslation, console);
          }
        }

        _createClass2(I18NHtmlParser, [{
          key: "parse",
          value: function parse(source, url) {
            var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
            var interpolationConfig = options.interpolationConfig || DEFAULT_INTERPOLATION_CONFIG;

            var parseResult = this._htmlParser.parse(source, url, Object.assign({
              interpolationConfig: interpolationConfig
            }, options));

            if (parseResult.errors.length) {
              return new ParseTreeResult(parseResult.rootNodes, parseResult.errors);
            }

            return mergeTranslations(parseResult.rootNodes, this._translationBundle, interpolationConfig, [], {});
          }
        }]);

        return I18NHtmlParser;
      }();

      function createSerializer(format) {
        format = (format || 'xlf').toLowerCase();

        switch (format) {
          case 'xmb':
            return new Xmb();

          case 'xtb':
            return new Xtb();

          case 'xliff2':
          case 'xlf2':
            return new Xliff2();

          case 'xliff':
          case 'xlf':
          default:
            return new Xliff();
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var QUOTED_KEYS = '$quoted$';

      function convertValueToOutputAst(ctx, value) {
        var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
        return visitValue(value, new _ValueOutputAstTransformer(ctx), type);
      }

      var _ValueOutputAstTransformer = /*#__PURE__*/function () {
        function _ValueOutputAstTransformer(ctx) {
          _classCallCheck2(this, _ValueOutputAstTransformer);

          this.ctx = ctx;
        }

        _createClass2(_ValueOutputAstTransformer, [{
          key: "visitArray",
          value: function visitArray(arr, type) {
            var values = []; // Note Array.map() must not be used to convert the values because it will
            // skip over empty elements in arrays constructed using `new Array(length)`,
            // resulting in `undefined` elements. This breaks the type guarantee that
            // all values in `o.LiteralArrayExpr` are of type `o.Expression`.
            // See test case in `value_util_spec.ts`.

            for (var i = 0; i < arr.length; ++i) {
              values.push(visitValue(arr[i], this, null
              /* context */
              ));
            }

            return literalArr(values, type);
          }
        }, {
          key: "visitStringMap",
          value: function visitStringMap(map, type) {
            var _this344 = this;

            var entries = [];
            var quotedSet = new Set(map && map[QUOTED_KEYS]);
            Object.keys(map).forEach(function (key) {
              entries.push(new LiteralMapEntry(key, visitValue(map[key], _this344, null), quotedSet.has(key)));
            });
            return new LiteralMapExpr(entries, type);
          }
        }, {
          key: "visitPrimitive",
          value: function visitPrimitive(value, type) {
            return literal(value, type);
          }
        }, {
          key: "visitOther",
          value: function visitOther(value, type) {
            if (value instanceof Expression) {
              return value;
            } else {
              return this.ctx.importExpr(value);
            }
          }
        }]);

        return _ValueOutputAstTransformer;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function mapEntry$1(key, value) {
        return {
          key: key,
          value: value,
          quoted: false
        };
      }

      var InjectableCompiler = /*#__PURE__*/function () {
        function InjectableCompiler(reflector, alwaysGenerateDef) {
          _classCallCheck2(this, InjectableCompiler);

          this.reflector = reflector;
          this.alwaysGenerateDef = alwaysGenerateDef;
          this.tokenInjector = reflector.resolveExternalReference(Identifiers.Injector);
        }

        _createClass2(InjectableCompiler, [{
          key: "depsArray",
          value: function depsArray(deps, ctx) {
            var _this345 = this;

            return deps.map(function (dep) {
              var token = dep;
              var args = [token];
              var flags = 0
              /* Default */
              ;

              if (Array.isArray(dep)) {
                for (var i = 0; i < dep.length; i++) {
                  var v = dep[i];

                  if (v) {
                    if (v.ngMetadataName === 'Optional') {
                      flags |= 8
                      /* Optional */
                      ;
                    } else if (v.ngMetadataName === 'SkipSelf') {
                      flags |= 4
                      /* SkipSelf */
                      ;
                    } else if (v.ngMetadataName === 'Self') {
                      flags |= 2
                      /* Self */
                      ;
                    } else if (v.ngMetadataName === 'Inject') {
                      token = v.token;
                    } else {
                      token = v;
                    }
                  }
                }
              }

              var tokenExpr;

              if (typeof token === 'string') {
                tokenExpr = literal(token);
              } else if (token === _this345.tokenInjector) {
                tokenExpr = importExpr(Identifiers.INJECTOR);
              } else {
                tokenExpr = ctx.importExpr(token);
              }

              if (flags !== 0
              /* Default */
              ) {
                  args = [tokenExpr, literal(flags)];
                } else {
                args = [tokenExpr];
              }

              return importExpr(Identifiers.inject).callFn(args);
            });
          }
        }, {
          key: "factoryFor",
          value: function factoryFor(injectable, ctx) {
            var retValue;

            if (injectable.useExisting) {
              retValue = importExpr(Identifiers.inject).callFn([ctx.importExpr(injectable.useExisting)]);
            } else if (injectable.useFactory) {
              var deps = injectable.deps || [];

              if (deps.length > 0) {
                retValue = ctx.importExpr(injectable.useFactory).callFn(this.depsArray(deps, ctx));
              } else {
                return ctx.importExpr(injectable.useFactory);
              }
            } else if (injectable.useValue) {
              retValue = convertValueToOutputAst(ctx, injectable.useValue);
            } else {
              var clazz = injectable.useClass || injectable.symbol;
              var depArgs = this.depsArray(this.reflector.parameters(clazz), ctx);
              retValue = new InstantiateExpr(ctx.importExpr(clazz), depArgs);
            }

            return fn([], [new ReturnStatement(retValue)], undefined, undefined, injectable.symbol.name + '_Factory');
          }
        }, {
          key: "injectableDef",
          value: function injectableDef(injectable, ctx) {
            var providedIn = NULL_EXPR;

            if (injectable.providedIn !== undefined) {
              if (injectable.providedIn === null) {
                providedIn = NULL_EXPR;
              } else if (typeof injectable.providedIn === 'string') {
                providedIn = literal(injectable.providedIn);
              } else {
                providedIn = ctx.importExpr(injectable.providedIn);
              }
            }

            var def = [mapEntry$1('factory', this.factoryFor(injectable, ctx)), mapEntry$1('token', ctx.importExpr(injectable.type.reference)), mapEntry$1('providedIn', providedIn)];
            return importExpr(Identifiers.ɵɵdefineInjectable).callFn([literalMap(def)]);
          }
        }, {
          key: "compile",
          value: function compile(injectable, ctx) {
            if (this.alwaysGenerateDef || injectable.providedIn !== undefined) {
              var className = identifierName(injectable.type);
              var clazz = new ClassStmt(className, null, [new ClassField('ɵprov', INFERRED_TYPE, [StmtModifier.Static], this.injectableDef(injectable, ctx))], [], new ClassMethod(null, [], []), []);
              ctx.statements.push(clazz);
            }
          }
        }]);

        return InjectableCompiler;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var STRIP_SRC_FILE_SUFFIXES = /(\.ts|\.d\.ts|\.js|\.jsx|\.tsx)$/;
      var GENERATED_FILE = /\.ngfactory\.|\.ngsummary\./;
      var JIT_SUMMARY_FILE = /\.ngsummary\./;
      var JIT_SUMMARY_NAME = /NgSummary$/;

      function ngfactoryFilePath(filePath) {
        var forceSourceFile = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
        var urlWithSuffix = splitTypescriptSuffix(filePath, forceSourceFile);
        return "".concat(urlWithSuffix[0], ".ngfactory").concat(normalizeGenFileSuffix(urlWithSuffix[1]));
      }

      function stripGeneratedFileSuffix(filePath) {
        return filePath.replace(GENERATED_FILE, '.');
      }

      function isGeneratedFile(filePath) {
        return GENERATED_FILE.test(filePath);
      }

      function splitTypescriptSuffix(path) {
        var forceSourceFile = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;

        if (path.endsWith('.d.ts')) {
          return [path.slice(0, -5), forceSourceFile ? '.ts' : '.d.ts'];
        }

        var lastDot = path.lastIndexOf('.');

        if (lastDot !== -1) {
          return [path.substring(0, lastDot), path.substring(lastDot)];
        }

        return [path, ''];
      }

      function normalizeGenFileSuffix(srcFileSuffix) {
        return srcFileSuffix === '.tsx' ? '.ts' : srcFileSuffix;
      }

      function summaryFileName(fileName) {
        var fileNameWithoutSuffix = fileName.replace(STRIP_SRC_FILE_SUFFIXES, '');
        return "".concat(fileNameWithoutSuffix, ".ngsummary.json");
      }

      function summaryForJitFileName(fileName) {
        var forceSourceFile = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
        var urlWithSuffix = splitTypescriptSuffix(stripGeneratedFileSuffix(fileName), forceSourceFile);
        return "".concat(urlWithSuffix[0], ".ngsummary").concat(urlWithSuffix[1]);
      }

      function stripSummaryForJitFileSuffix(filePath) {
        return filePath.replace(JIT_SUMMARY_FILE, '.');
      }

      function summaryForJitName(symbolName) {
        return "".concat(symbolName, "NgSummary");
      }

      function stripSummaryForJitNameSuffix(symbolName) {
        return symbolName.replace(JIT_SUMMARY_NAME, '');
      }

      var LOWERED_SYMBOL = /\u0275\d+/;

      function isLoweredSymbol(name) {
        return LOWERED_SYMBOL.test(name);
      }

      function createLoweredSymbol(id) {
        return "\u0275".concat(id);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var LifecycleHooks;

      (function (LifecycleHooks) {
        LifecycleHooks[LifecycleHooks["OnInit"] = 0] = "OnInit";
        LifecycleHooks[LifecycleHooks["OnDestroy"] = 1] = "OnDestroy";
        LifecycleHooks[LifecycleHooks["DoCheck"] = 2] = "DoCheck";
        LifecycleHooks[LifecycleHooks["OnChanges"] = 3] = "OnChanges";
        LifecycleHooks[LifecycleHooks["AfterContentInit"] = 4] = "AfterContentInit";
        LifecycleHooks[LifecycleHooks["AfterContentChecked"] = 5] = "AfterContentChecked";
        LifecycleHooks[LifecycleHooks["AfterViewInit"] = 6] = "AfterViewInit";
        LifecycleHooks[LifecycleHooks["AfterViewChecked"] = 7] = "AfterViewChecked";
      })(LifecycleHooks || (LifecycleHooks = {}));

      var LIFECYCLE_HOOKS_VALUES = [LifecycleHooks.OnInit, LifecycleHooks.OnDestroy, LifecycleHooks.DoCheck, LifecycleHooks.OnChanges, LifecycleHooks.AfterContentInit, LifecycleHooks.AfterContentChecked, LifecycleHooks.AfterViewInit, LifecycleHooks.AfterViewChecked];

      function hasLifecycleHook(reflector, hook, token) {
        return reflector.hasLifecycleHook(token, getHookName(hook));
      }

      function getAllLifecycleHooks(reflector, token) {
        return LIFECYCLE_HOOKS_VALUES.filter(function (hook) {
          return hasLifecycleHook(reflector, hook, token);
        });
      }

      function getHookName(hook) {
        switch (hook) {
          case LifecycleHooks.OnInit:
            return 'ngOnInit';

          case LifecycleHooks.OnDestroy:
            return 'ngOnDestroy';

          case LifecycleHooks.DoCheck:
            return 'ngDoCheck';

          case LifecycleHooks.OnChanges:
            return 'ngOnChanges';

          case LifecycleHooks.AfterContentInit:
            return 'ngAfterContentInit';

          case LifecycleHooks.AfterContentChecked:
            return 'ngAfterContentChecked';

          case LifecycleHooks.AfterViewInit:
            return 'ngAfterViewInit';

          case LifecycleHooks.AfterViewChecked:
            return 'ngAfterViewChecked';

          default:
            // This default case is not needed by TypeScript compiler, as the switch is exhaustive.
            // However Closure Compiler does not understand that and reports an error in typed mode.
            // The `throw new Error` below works around the problem, and the unexpected: never variable
            // makes sure tsc still checks this code is unreachable.
            var unexpected = hook;
            throw new Error("unexpected ".concat(unexpected));
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ERROR_COMPONENT_TYPE = 'ngComponentType'; // Design notes:
      // - don't lazily create metadata:
      //   For some metadata, we need to do async work sometimes,
      //   so the user has to kick off this loading.
      //   But we want to report errors even when the async work is
      //   not required to check that the user would have been able
      //   to wait correctly.

      var CompileMetadataResolver = /*#__PURE__*/function () {
        function CompileMetadataResolver(_config, _htmlParser, _ngModuleResolver, _directiveResolver, _pipeResolver, _summaryResolver, _schemaRegistry, _directiveNormalizer, _console, _staticSymbolCache, _reflector, _errorCollector) {
          _classCallCheck2(this, CompileMetadataResolver);

          this._config = _config;
          this._htmlParser = _htmlParser;
          this._ngModuleResolver = _ngModuleResolver;
          this._directiveResolver = _directiveResolver;
          this._pipeResolver = _pipeResolver;
          this._summaryResolver = _summaryResolver;
          this._schemaRegistry = _schemaRegistry;
          this._directiveNormalizer = _directiveNormalizer;
          this._console = _console;
          this._staticSymbolCache = _staticSymbolCache;
          this._reflector = _reflector;
          this._errorCollector = _errorCollector;
          this._nonNormalizedDirectiveCache = new Map();
          this._directiveCache = new Map();
          this._summaryCache = new Map();
          this._pipeCache = new Map();
          this._ngModuleCache = new Map();
          this._ngModuleOfTypes = new Map();
          this._shallowModuleCache = new Map();
        }

        _createClass2(CompileMetadataResolver, [{
          key: "getReflector",
          value: function getReflector() {
            return this._reflector;
          }
        }, {
          key: "clearCacheFor",
          value: function clearCacheFor(type) {
            var dirMeta = this._directiveCache.get(type);

            this._directiveCache["delete"](type);

            this._nonNormalizedDirectiveCache["delete"](type);

            this._summaryCache["delete"](type);

            this._pipeCache["delete"](type);

            this._ngModuleOfTypes["delete"](type); // Clear all of the NgModule as they contain transitive information!


            this._ngModuleCache.clear();

            if (dirMeta) {
              this._directiveNormalizer.clearCacheFor(dirMeta);
            }
          }
        }, {
          key: "clearCache",
          value: function clearCache() {
            this._directiveCache.clear();

            this._nonNormalizedDirectiveCache.clear();

            this._summaryCache.clear();

            this._pipeCache.clear();

            this._ngModuleCache.clear();

            this._ngModuleOfTypes.clear();

            this._directiveNormalizer.clearCache();
          }
        }, {
          key: "_createProxyClass",
          value: function _createProxyClass(baseType, name) {
            var delegate = null;

            var proxyClass = function proxyClass() {
              if (!delegate) {
                throw new Error("Illegal state: Class ".concat(name, " for type ").concat(stringify(baseType), " is not compiled yet!"));
              }

              return delegate.apply(this, arguments);
            };

            proxyClass.setDelegate = function (d) {
              delegate = d;
              proxyClass.prototype = d.prototype;
            }; // Make stringify work correctly


            proxyClass.overriddenName = name;
            return proxyClass;
          }
        }, {
          key: "getGeneratedClass",
          value: function getGeneratedClass(dirType, name) {
            if (dirType instanceof StaticSymbol) {
              return this._staticSymbolCache.get(ngfactoryFilePath(dirType.filePath), name);
            } else {
              return this._createProxyClass(dirType, name);
            }
          }
        }, {
          key: "getComponentViewClass",
          value: function getComponentViewClass(dirType) {
            return this.getGeneratedClass(dirType, viewClassName(dirType, 0));
          }
        }, {
          key: "getHostComponentViewClass",
          value: function getHostComponentViewClass(dirType) {
            return this.getGeneratedClass(dirType, hostViewClassName(dirType));
          }
        }, {
          key: "getHostComponentType",
          value: function getHostComponentType(dirType) {
            var name = "".concat(identifierName({
              reference: dirType
            }), "_Host");

            if (dirType instanceof StaticSymbol) {
              return this._staticSymbolCache.get(dirType.filePath, name);
            }

            return this._createProxyClass(dirType, name);
          }
        }, {
          key: "getRendererType",
          value: function getRendererType(dirType) {
            if (dirType instanceof StaticSymbol) {
              return this._staticSymbolCache.get(ngfactoryFilePath(dirType.filePath), rendererTypeName(dirType));
            } else {
              // returning an object as proxy,
              // that we fill later during runtime compilation.
              return {};
            }
          }
        }, {
          key: "getComponentFactory",
          value: function getComponentFactory(selector, dirType, inputs, outputs) {
            if (dirType instanceof StaticSymbol) {
              return this._staticSymbolCache.get(ngfactoryFilePath(dirType.filePath), componentFactoryName(dirType));
            } else {
              var hostView = this.getHostComponentViewClass(dirType); // Note: ngContentSelectors will be filled later once the template is
              // loaded.

              var createComponentFactory = this._reflector.resolveExternalReference(Identifiers.createComponentFactory);

              return createComponentFactory(selector, dirType, hostView, inputs, outputs, []);
            }
          }
        }, {
          key: "initComponentFactory",
          value: function initComponentFactory(factory, ngContentSelectors) {
            if (!(factory instanceof StaticSymbol)) {
              var _factory$ngContentSel;

              (_factory$ngContentSel = factory.ngContentSelectors).push.apply(_factory$ngContentSel, _toConsumableArray(ngContentSelectors));
            }
          }
        }, {
          key: "_loadSummary",
          value: function _loadSummary(type, kind) {
            var typeSummary = this._summaryCache.get(type);

            if (!typeSummary) {
              var summary = this._summaryResolver.resolveSummary(type);

              typeSummary = summary ? summary.type : null;

              this._summaryCache.set(type, typeSummary || null);
            }

            return typeSummary && typeSummary.summaryKind === kind ? typeSummary : null;
          }
        }, {
          key: "getHostComponentMetadata",
          value: function getHostComponentMetadata(compMeta, hostViewType) {
            var hostType = this.getHostComponentType(compMeta.type.reference);

            if (!hostViewType) {
              hostViewType = this.getHostComponentViewClass(hostType);
            } // Note: ! is ok here as this method should only be called with normalized directive
            // metadata, which always fills in the selector.


            var template = CssSelector.parse(compMeta.selector)[0].getMatchingElementTemplate();
            var templateUrl = '';

            var htmlAst = this._htmlParser.parse(template, templateUrl);

            return CompileDirectiveMetadata.create({
              isHost: true,
              type: {
                reference: hostType,
                diDeps: [],
                lifecycleHooks: []
              },
              template: new CompileTemplateMetadata({
                encapsulation: ViewEncapsulation.None,
                template: template,
                templateUrl: templateUrl,
                htmlAst: htmlAst,
                styles: [],
                styleUrls: [],
                ngContentSelectors: [],
                animations: [],
                isInline: true,
                externalStylesheets: [],
                interpolation: null,
                preserveWhitespaces: false
              }),
              exportAs: null,
              changeDetection: ChangeDetectionStrategy.Default,
              inputs: [],
              outputs: [],
              host: {},
              isComponent: true,
              selector: '*',
              providers: [],
              viewProviders: [],
              queries: [],
              guards: {},
              viewQueries: [],
              componentViewType: hostViewType,
              rendererType: {
                id: '__Host__',
                encapsulation: ViewEncapsulation.None,
                styles: [],
                data: {}
              },
              entryComponents: [],
              componentFactory: null
            });
          }
        }, {
          key: "loadDirectiveMetadata",
          value: function loadDirectiveMetadata(ngModuleType, directiveType, isSync) {
            var _this346 = this;

            if (this._directiveCache.has(directiveType)) {
              return null;
            }

            directiveType = resolveForwardRef(directiveType);

            var _this$getNonNormalize = this.getNonNormalizedDirectiveMetadata(directiveType),
                annotation = _this$getNonNormalize.annotation,
                metadata = _this$getNonNormalize.metadata;

            var createDirectiveMetadata = function createDirectiveMetadata(templateMetadata) {
              var normalizedDirMeta = new CompileDirectiveMetadata({
                isHost: false,
                type: metadata.type,
                isComponent: metadata.isComponent,
                selector: metadata.selector,
                exportAs: metadata.exportAs,
                changeDetection: metadata.changeDetection,
                inputs: metadata.inputs,
                outputs: metadata.outputs,
                hostListeners: metadata.hostListeners,
                hostProperties: metadata.hostProperties,
                hostAttributes: metadata.hostAttributes,
                providers: metadata.providers,
                viewProviders: metadata.viewProviders,
                queries: metadata.queries,
                guards: metadata.guards,
                viewQueries: metadata.viewQueries,
                entryComponents: metadata.entryComponents,
                componentViewType: metadata.componentViewType,
                rendererType: metadata.rendererType,
                componentFactory: metadata.componentFactory,
                template: templateMetadata
              });

              if (templateMetadata) {
                _this346.initComponentFactory(metadata.componentFactory, templateMetadata.ngContentSelectors);
              }

              _this346._directiveCache.set(directiveType, normalizedDirMeta);

              _this346._summaryCache.set(directiveType, normalizedDirMeta.toSummary());

              return null;
            };

            if (metadata.isComponent) {
              var template = metadata.template;

              var templateMeta = this._directiveNormalizer.normalizeTemplate({
                ngModuleType: ngModuleType,
                componentType: directiveType,
                moduleUrl: this._reflector.componentModuleUrl(directiveType, annotation),
                encapsulation: template.encapsulation,
                template: template.template,
                templateUrl: template.templateUrl,
                styles: template.styles,
                styleUrls: template.styleUrls,
                animations: template.animations,
                interpolation: template.interpolation,
                preserveWhitespaces: template.preserveWhitespaces
              });

              if (isPromise(templateMeta) && isSync) {
                this._reportError(componentStillLoadingError(directiveType), directiveType);

                return null;
              }

              return SyncAsync.then(templateMeta, createDirectiveMetadata);
            } else {
              // directive
              createDirectiveMetadata(null);
              return null;
            }
          }
        }, {
          key: "getNonNormalizedDirectiveMetadata",
          value: function getNonNormalizedDirectiveMetadata(directiveType) {
            var _this347 = this;

            directiveType = resolveForwardRef(directiveType);

            if (!directiveType) {
              return null;
            }

            var cacheEntry = this._nonNormalizedDirectiveCache.get(directiveType);

            if (cacheEntry) {
              return cacheEntry;
            }

            var dirMeta = this._directiveResolver.resolve(directiveType, false);

            if (!dirMeta) {
              return null;
            }

            var nonNormalizedTemplateMetadata = undefined;

            if (createComponent.isTypeOf(dirMeta)) {
              // component
              var compMeta = dirMeta;
              assertArrayOfStrings('styles', compMeta.styles);
              assertArrayOfStrings('styleUrls', compMeta.styleUrls);
              assertInterpolationSymbols('interpolation', compMeta.interpolation);
              var animations = compMeta.animations;
              nonNormalizedTemplateMetadata = new CompileTemplateMetadata({
                encapsulation: noUndefined(compMeta.encapsulation),
                template: noUndefined(compMeta.template),
                templateUrl: noUndefined(compMeta.templateUrl),
                htmlAst: null,
                styles: compMeta.styles || [],
                styleUrls: compMeta.styleUrls || [],
                animations: animations || [],
                interpolation: noUndefined(compMeta.interpolation),
                isInline: !!compMeta.template,
                externalStylesheets: [],
                ngContentSelectors: [],
                preserveWhitespaces: noUndefined(dirMeta.preserveWhitespaces)
              });
            }

            var changeDetectionStrategy = null;
            var viewProviders = [];
            var entryComponentMetadata = [];
            var selector = dirMeta.selector;

            if (createComponent.isTypeOf(dirMeta)) {
              // Component
              var _compMeta = dirMeta;
              changeDetectionStrategy = _compMeta.changeDetection;

              if (_compMeta.viewProviders) {
                viewProviders = this._getProvidersMetadata(_compMeta.viewProviders, entryComponentMetadata, "viewProviders for \"".concat(stringifyType(directiveType), "\""), [], directiveType);
              }

              if (_compMeta.entryComponents) {
                entryComponentMetadata = flattenAndDedupeArray(_compMeta.entryComponents).map(function (type) {
                  return _this347._getEntryComponentMetadata(type);
                }).concat(entryComponentMetadata);
              }

              if (!selector) {
                selector = this._schemaRegistry.getDefaultComponentElementName();
              }
            } else {
              // Directive
              if (!selector) {
                selector = null;
              }
            }

            var providers = [];

            if (dirMeta.providers != null) {
              providers = this._getProvidersMetadata(dirMeta.providers, entryComponentMetadata, "providers for \"".concat(stringifyType(directiveType), "\""), [], directiveType);
            }

            var queries = [];
            var viewQueries = [];

            if (dirMeta.queries != null) {
              queries = this._getQueriesMetadata(dirMeta.queries, false, directiveType);
              viewQueries = this._getQueriesMetadata(dirMeta.queries, true, directiveType);
            }

            var metadata = CompileDirectiveMetadata.create({
              isHost: false,
              selector: selector,
              exportAs: noUndefined(dirMeta.exportAs),
              isComponent: !!nonNormalizedTemplateMetadata,
              type: this._getTypeMetadata(directiveType),
              template: nonNormalizedTemplateMetadata,
              changeDetection: changeDetectionStrategy,
              inputs: dirMeta.inputs || [],
              outputs: dirMeta.outputs || [],
              host: dirMeta.host || {},
              providers: providers || [],
              viewProviders: viewProviders || [],
              queries: queries || [],
              guards: dirMeta.guards || {},
              viewQueries: viewQueries || [],
              entryComponents: entryComponentMetadata,
              componentViewType: nonNormalizedTemplateMetadata ? this.getComponentViewClass(directiveType) : null,
              rendererType: nonNormalizedTemplateMetadata ? this.getRendererType(directiveType) : null,
              componentFactory: null
            });

            if (nonNormalizedTemplateMetadata) {
              metadata.componentFactory = this.getComponentFactory(selector, directiveType, metadata.inputs, metadata.outputs);
            }

            cacheEntry = {
              metadata: metadata,
              annotation: dirMeta
            };

            this._nonNormalizedDirectiveCache.set(directiveType, cacheEntry);

            return cacheEntry;
          }
          /**
           * Gets the metadata for the given directive.
           * This assumes `loadNgModuleDirectiveAndPipeMetadata` has been called first.
           */

        }, {
          key: "getDirectiveMetadata",
          value: function getDirectiveMetadata(directiveType) {
            var dirMeta = this._directiveCache.get(directiveType);

            if (!dirMeta) {
              this._reportError(syntaxError("Illegal state: getDirectiveMetadata can only be called after loadNgModuleDirectiveAndPipeMetadata for a module that declares it. Directive ".concat(stringifyType(directiveType), ".")), directiveType);
            }

            return dirMeta;
          }
        }, {
          key: "getDirectiveSummary",
          value: function getDirectiveSummary(dirType) {
            var dirSummary = this._loadSummary(dirType, CompileSummaryKind.Directive);

            if (!dirSummary) {
              this._reportError(syntaxError("Illegal state: Could not load the summary for directive ".concat(stringifyType(dirType), ".")), dirType);
            }

            return dirSummary;
          }
        }, {
          key: "isDirective",
          value: function isDirective(type) {
            return !!this._loadSummary(type, CompileSummaryKind.Directive) || this._directiveResolver.isDirective(type);
          }
        }, {
          key: "isAbstractDirective",
          value: function isAbstractDirective(type) {
            var summary = this._loadSummary(type, CompileSummaryKind.Directive);

            if (summary && !summary.isComponent) {
              return !summary.selector;
            }

            var meta = this._directiveResolver.resolve(type, false);

            if (meta && !createComponent.isTypeOf(meta)) {
              return !meta.selector;
            }

            return false;
          }
        }, {
          key: "isPipe",
          value: function isPipe(type) {
            return !!this._loadSummary(type, CompileSummaryKind.Pipe) || this._pipeResolver.isPipe(type);
          }
        }, {
          key: "isNgModule",
          value: function isNgModule(type) {
            return !!this._loadSummary(type, CompileSummaryKind.NgModule) || this._ngModuleResolver.isNgModule(type);
          }
        }, {
          key: "getNgModuleSummary",
          value: function getNgModuleSummary(moduleType) {
            var alreadyCollecting = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;

            var moduleSummary = this._loadSummary(moduleType, CompileSummaryKind.NgModule);

            if (!moduleSummary) {
              var moduleMeta = this.getNgModuleMetadata(moduleType, false, alreadyCollecting);
              moduleSummary = moduleMeta ? moduleMeta.toSummary() : null;

              if (moduleSummary) {
                this._summaryCache.set(moduleType, moduleSummary);
              }
            }

            return moduleSummary;
          }
          /**
           * Loads the declared directives and pipes of an NgModule.
           */

        }, {
          key: "loadNgModuleDirectiveAndPipeMetadata",
          value: function loadNgModuleDirectiveAndPipeMetadata(moduleType, isSync) {
            var _this348 = this;

            var throwIfNotFound = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
            var ngModule = this.getNgModuleMetadata(moduleType, throwIfNotFound);
            var loading = [];

            if (ngModule) {
              ngModule.declaredDirectives.forEach(function (id) {
                var promise = _this348.loadDirectiveMetadata(moduleType, id.reference, isSync);

                if (promise) {
                  loading.push(promise);
                }
              });
              ngModule.declaredPipes.forEach(function (id) {
                return _this348._loadPipeMetadata(id.reference);
              });
            }

            return Promise.all(loading);
          }
        }, {
          key: "getShallowModuleMetadata",
          value: function getShallowModuleMetadata(moduleType) {
            var compileMeta = this._shallowModuleCache.get(moduleType);

            if (compileMeta) {
              return compileMeta;
            }

            var ngModuleMeta = findLast(this._reflector.shallowAnnotations(moduleType), createNgModule.isTypeOf);
            compileMeta = {
              type: this._getTypeMetadata(moduleType),
              rawExports: ngModuleMeta.exports,
              rawImports: ngModuleMeta.imports,
              rawProviders: ngModuleMeta.providers
            };

            this._shallowModuleCache.set(moduleType, compileMeta);

            return compileMeta;
          }
        }, {
          key: "getNgModuleMetadata",
          value: function getNgModuleMetadata(moduleType) {
            var _this349 = this;

            var throwIfNotFound = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
            var alreadyCollecting = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
            moduleType = resolveForwardRef(moduleType);

            var compileMeta = this._ngModuleCache.get(moduleType);

            if (compileMeta) {
              return compileMeta;
            }

            var meta = this._ngModuleResolver.resolve(moduleType, throwIfNotFound);

            if (!meta) {
              return null;
            }

            var declaredDirectives = [];
            var exportedNonModuleIdentifiers = [];
            var declaredPipes = [];
            var importedModules = [];
            var exportedModules = [];
            var providers = [];
            var entryComponents = [];
            var bootstrapComponents = [];
            var schemas = [];

            if (meta.imports) {
              flattenAndDedupeArray(meta.imports).forEach(function (importedType) {
                var importedModuleType = undefined;

                if (isValidType(importedType)) {
                  importedModuleType = importedType;
                } else if (importedType && importedType.ngModule) {
                  var moduleWithProviders = importedType;
                  importedModuleType = moduleWithProviders.ngModule;

                  if (moduleWithProviders.providers) {
                    providers.push.apply(providers, _toConsumableArray(_this349._getProvidersMetadata(moduleWithProviders.providers, entryComponents, "provider for the NgModule '".concat(stringifyType(importedModuleType), "'"), [], importedType)));
                  }
                }

                if (importedModuleType) {
                  if (_this349._checkSelfImport(moduleType, importedModuleType)) return;
                  if (!alreadyCollecting) alreadyCollecting = new Set();

                  if (alreadyCollecting.has(importedModuleType)) {
                    _this349._reportError(syntaxError("".concat(_this349._getTypeDescriptor(importedModuleType), " '").concat(stringifyType(importedType), "' is imported recursively by the module '").concat(stringifyType(moduleType), "'.")), moduleType);

                    return;
                  }

                  alreadyCollecting.add(importedModuleType);

                  var importedModuleSummary = _this349.getNgModuleSummary(importedModuleType, alreadyCollecting);

                  alreadyCollecting["delete"](importedModuleType);

                  if (!importedModuleSummary) {
                    _this349._reportError(syntaxError("Unexpected ".concat(_this349._getTypeDescriptor(importedType), " '").concat(stringifyType(importedType), "' imported by the module '").concat(stringifyType(moduleType), "'. Please add a @NgModule annotation.")), moduleType);

                    return;
                  }

                  importedModules.push(importedModuleSummary);
                } else {
                  _this349._reportError(syntaxError("Unexpected value '".concat(stringifyType(importedType), "' imported by the module '").concat(stringifyType(moduleType), "'")), moduleType);

                  return;
                }
              });
            }

            if (meta.exports) {
              flattenAndDedupeArray(meta.exports).forEach(function (exportedType) {
                if (!isValidType(exportedType)) {
                  _this349._reportError(syntaxError("Unexpected value '".concat(stringifyType(exportedType), "' exported by the module '").concat(stringifyType(moduleType), "'")), moduleType);

                  return;
                }

                if (!alreadyCollecting) alreadyCollecting = new Set();

                if (alreadyCollecting.has(exportedType)) {
                  _this349._reportError(syntaxError("".concat(_this349._getTypeDescriptor(exportedType), " '").concat(stringify(exportedType), "' is exported recursively by the module '").concat(stringifyType(moduleType), "'")), moduleType);

                  return;
                }

                alreadyCollecting.add(exportedType);

                var exportedModuleSummary = _this349.getNgModuleSummary(exportedType, alreadyCollecting);

                alreadyCollecting["delete"](exportedType);

                if (exportedModuleSummary) {
                  exportedModules.push(exportedModuleSummary);
                } else {
                  exportedNonModuleIdentifiers.push(_this349._getIdentifierMetadata(exportedType));
                }
              });
            } // Note: This will be modified later, so we rely on
            // getting a new instance every time!


            var transitiveModule = this._getTransitiveNgModuleMetadata(importedModules, exportedModules);

            if (meta.declarations) {
              flattenAndDedupeArray(meta.declarations).forEach(function (declaredType) {
                if (!isValidType(declaredType)) {
                  _this349._reportError(syntaxError("Unexpected value '".concat(stringifyType(declaredType), "' declared by the module '").concat(stringifyType(moduleType), "'")), moduleType);

                  return;
                }

                var declaredIdentifier = _this349._getIdentifierMetadata(declaredType);

                if (_this349.isDirective(declaredType)) {
                  if (_this349.isAbstractDirective(declaredType)) {
                    _this349._reportError(syntaxError("Directive ".concat(stringifyType(declaredType), " has no selector, please add it!")), declaredType);
                  }

                  transitiveModule.addDirective(declaredIdentifier);
                  declaredDirectives.push(declaredIdentifier);

                  _this349._addTypeToModule(declaredType, moduleType);
                } else if (_this349.isPipe(declaredType)) {
                  transitiveModule.addPipe(declaredIdentifier);
                  transitiveModule.pipes.push(declaredIdentifier);
                  declaredPipes.push(declaredIdentifier);

                  _this349._addTypeToModule(declaredType, moduleType);
                } else {
                  _this349._reportError(syntaxError("Unexpected ".concat(_this349._getTypeDescriptor(declaredType), " '").concat(stringifyType(declaredType), "' declared by the module '").concat(stringifyType(moduleType), "'. Please add a @Pipe/@Directive/@Component annotation.")), moduleType);

                  return;
                }
              });
            }

            var exportedDirectives = [];
            var exportedPipes = [];
            exportedNonModuleIdentifiers.forEach(function (exportedId) {
              if (transitiveModule.directivesSet.has(exportedId.reference)) {
                exportedDirectives.push(exportedId);
                transitiveModule.addExportedDirective(exportedId);
              } else if (transitiveModule.pipesSet.has(exportedId.reference)) {
                exportedPipes.push(exportedId);
                transitiveModule.addExportedPipe(exportedId);
              } else {
                _this349._reportError(syntaxError("Can't export ".concat(_this349._getTypeDescriptor(exportedId.reference), " ").concat(stringifyType(exportedId.reference), " from ").concat(stringifyType(moduleType), " as it was neither declared nor imported!")), moduleType);

                return;
              }
            }); // The providers of the module have to go last
            // so that they overwrite any other provider we already added.

            if (meta.providers) {
              providers.push.apply(providers, _toConsumableArray(this._getProvidersMetadata(meta.providers, entryComponents, "provider for the NgModule '".concat(stringifyType(moduleType), "'"), [], moduleType)));
            }

            if (meta.entryComponents) {
              entryComponents.push.apply(entryComponents, _toConsumableArray(flattenAndDedupeArray(meta.entryComponents).map(function (type) {
                return _this349._getEntryComponentMetadata(type);
              })));
            }

            if (meta.bootstrap) {
              flattenAndDedupeArray(meta.bootstrap).forEach(function (type) {
                if (!isValidType(type)) {
                  _this349._reportError(syntaxError("Unexpected value '".concat(stringifyType(type), "' used in the bootstrap property of module '").concat(stringifyType(moduleType), "'")), moduleType);

                  return;
                }

                bootstrapComponents.push(_this349._getIdentifierMetadata(type));
              });
            }

            entryComponents.push.apply(entryComponents, _toConsumableArray(bootstrapComponents.map(function (type) {
              return _this349._getEntryComponentMetadata(type.reference);
            })));

            if (meta.schemas) {
              schemas.push.apply(schemas, _toConsumableArray(flattenAndDedupeArray(meta.schemas)));
            }

            compileMeta = new CompileNgModuleMetadata({
              type: this._getTypeMetadata(moduleType),
              providers: providers,
              entryComponents: entryComponents,
              bootstrapComponents: bootstrapComponents,
              schemas: schemas,
              declaredDirectives: declaredDirectives,
              exportedDirectives: exportedDirectives,
              declaredPipes: declaredPipes,
              exportedPipes: exportedPipes,
              importedModules: importedModules,
              exportedModules: exportedModules,
              transitiveModule: transitiveModule,
              id: meta.id || null
            });
            entryComponents.forEach(function (id) {
              return transitiveModule.addEntryComponent(id);
            });
            providers.forEach(function (provider) {
              return transitiveModule.addProvider(provider, compileMeta.type);
            });
            transitiveModule.addModule(compileMeta.type);

            this._ngModuleCache.set(moduleType, compileMeta);

            return compileMeta;
          }
        }, {
          key: "_checkSelfImport",
          value: function _checkSelfImport(moduleType, importedModuleType) {
            if (moduleType === importedModuleType) {
              this._reportError(syntaxError("'".concat(stringifyType(moduleType), "' module can't import itself")), moduleType);

              return true;
            }

            return false;
          }
        }, {
          key: "_getTypeDescriptor",
          value: function _getTypeDescriptor(type) {
            if (isValidType(type)) {
              if (this.isDirective(type)) {
                return 'directive';
              }

              if (this.isPipe(type)) {
                return 'pipe';
              }

              if (this.isNgModule(type)) {
                return 'module';
              }
            }

            if (type.provide) {
              return 'provider';
            }

            return 'value';
          }
        }, {
          key: "_addTypeToModule",
          value: function _addTypeToModule(type, moduleType) {
            var oldModule = this._ngModuleOfTypes.get(type);

            if (oldModule && oldModule !== moduleType) {
              this._reportError(syntaxError("Type ".concat(stringifyType(type), " is part of the declarations of 2 modules: ").concat(stringifyType(oldModule), " and ").concat(stringifyType(moduleType), "! ") + "Please consider moving ".concat(stringifyType(type), " to a higher module that imports ").concat(stringifyType(oldModule), " and ").concat(stringifyType(moduleType), ". ") + "You can also create a new NgModule that exports and includes ".concat(stringifyType(type), " then import that NgModule in ").concat(stringifyType(oldModule), " and ").concat(stringifyType(moduleType), ".")), moduleType);

              return;
            }

            this._ngModuleOfTypes.set(type, moduleType);
          }
        }, {
          key: "_getTransitiveNgModuleMetadata",
          value: function _getTransitiveNgModuleMetadata(importedModules, exportedModules) {
            // collect `providers` / `entryComponents` from all imported and all exported modules
            var result = new TransitiveCompileNgModuleMetadata();
            var modulesByToken = new Map();
            importedModules.concat(exportedModules).forEach(function (modSummary) {
              modSummary.modules.forEach(function (mod) {
                return result.addModule(mod);
              });
              modSummary.entryComponents.forEach(function (comp) {
                return result.addEntryComponent(comp);
              });
              var addedTokens = new Set();
              modSummary.providers.forEach(function (entry) {
                var tokenRef = tokenReference(entry.provider.token);
                var prevModules = modulesByToken.get(tokenRef);

                if (!prevModules) {
                  prevModules = new Set();
                  modulesByToken.set(tokenRef, prevModules);
                }

                var moduleRef = entry.module.reference; // Note: the providers of one module may still contain multiple providers
                // per token (e.g. for multi providers), and we need to preserve these.

                if (addedTokens.has(tokenRef) || !prevModules.has(moduleRef)) {
                  prevModules.add(moduleRef);
                  addedTokens.add(tokenRef);
                  result.addProvider(entry.provider, entry.module);
                }
              });
            });
            exportedModules.forEach(function (modSummary) {
              modSummary.exportedDirectives.forEach(function (id) {
                return result.addExportedDirective(id);
              });
              modSummary.exportedPipes.forEach(function (id) {
                return result.addExportedPipe(id);
              });
            });
            importedModules.forEach(function (modSummary) {
              modSummary.exportedDirectives.forEach(function (id) {
                return result.addDirective(id);
              });
              modSummary.exportedPipes.forEach(function (id) {
                return result.addPipe(id);
              });
            });
            return result;
          }
        }, {
          key: "_getIdentifierMetadata",
          value: function _getIdentifierMetadata(type) {
            type = resolveForwardRef(type);
            return {
              reference: type
            };
          }
        }, {
          key: "isInjectable",
          value: function isInjectable(type) {
            var annotations = this._reflector.tryAnnotations(type);

            return annotations.some(function (ann) {
              return createInjectable.isTypeOf(ann);
            });
          }
        }, {
          key: "getInjectableSummary",
          value: function getInjectableSummary(type) {
            return {
              summaryKind: CompileSummaryKind.Injectable,
              type: this._getTypeMetadata(type, null, false)
            };
          }
        }, {
          key: "getInjectableMetadata",
          value: function getInjectableMetadata(type) {
            var dependencies = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            var throwOnUnknownDeps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;

            var typeSummary = this._loadSummary(type, CompileSummaryKind.Injectable);

            var typeMetadata = typeSummary ? typeSummary.type : this._getTypeMetadata(type, dependencies, throwOnUnknownDeps);

            var annotations = this._reflector.annotations(type).filter(function (ann) {
              return createInjectable.isTypeOf(ann);
            });

            if (annotations.length === 0) {
              return null;
            }

            var meta = annotations[annotations.length - 1];
            return {
              symbol: type,
              type: typeMetadata,
              providedIn: meta.providedIn,
              useValue: meta.useValue,
              useClass: meta.useClass,
              useExisting: meta.useExisting,
              useFactory: meta.useFactory,
              deps: meta.deps
            };
          }
        }, {
          key: "_getTypeMetadata",
          value: function _getTypeMetadata(type) {
            var dependencies = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            var throwOnUnknownDeps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;

            var identifier = this._getIdentifierMetadata(type);

            return {
              reference: identifier.reference,
              diDeps: this._getDependenciesMetadata(identifier.reference, dependencies, throwOnUnknownDeps),
              lifecycleHooks: getAllLifecycleHooks(this._reflector, identifier.reference)
            };
          }
        }, {
          key: "_getFactoryMetadata",
          value: function _getFactoryMetadata(factory) {
            var dependencies = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
            factory = resolveForwardRef(factory);
            return {
              reference: factory,
              diDeps: this._getDependenciesMetadata(factory, dependencies)
            };
          }
          /**
           * Gets the metadata for the given pipe.
           * This assumes `loadNgModuleDirectiveAndPipeMetadata` has been called first.
           */

        }, {
          key: "getPipeMetadata",
          value: function getPipeMetadata(pipeType) {
            var pipeMeta = this._pipeCache.get(pipeType);

            if (!pipeMeta) {
              this._reportError(syntaxError("Illegal state: getPipeMetadata can only be called after loadNgModuleDirectiveAndPipeMetadata for a module that declares it. Pipe ".concat(stringifyType(pipeType), ".")), pipeType);
            }

            return pipeMeta || null;
          }
        }, {
          key: "getPipeSummary",
          value: function getPipeSummary(pipeType) {
            var pipeSummary = this._loadSummary(pipeType, CompileSummaryKind.Pipe);

            if (!pipeSummary) {
              this._reportError(syntaxError("Illegal state: Could not load the summary for pipe ".concat(stringifyType(pipeType), ".")), pipeType);
            }

            return pipeSummary;
          }
        }, {
          key: "getOrLoadPipeMetadata",
          value: function getOrLoadPipeMetadata(pipeType) {
            var pipeMeta = this._pipeCache.get(pipeType);

            if (!pipeMeta) {
              pipeMeta = this._loadPipeMetadata(pipeType);
            }

            return pipeMeta;
          }
        }, {
          key: "_loadPipeMetadata",
          value: function _loadPipeMetadata(pipeType) {
            pipeType = resolveForwardRef(pipeType);

            var pipeAnnotation = this._pipeResolver.resolve(pipeType);

            var pipeMeta = new CompilePipeMetadata({
              type: this._getTypeMetadata(pipeType),
              name: pipeAnnotation.name,
              pure: !!pipeAnnotation.pure
            });

            this._pipeCache.set(pipeType, pipeMeta);

            this._summaryCache.set(pipeType, pipeMeta.toSummary());

            return pipeMeta;
          }
        }, {
          key: "_getDependenciesMetadata",
          value: function _getDependenciesMetadata(typeOrFunc, dependencies) {
            var _this350 = this;

            var throwOnUnknownDeps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
            var hasUnknownDeps = false;
            var params = dependencies || this._reflector.parameters(typeOrFunc) || [];
            var dependenciesMetadata = params.map(function (param) {
              var isAttribute = false;
              var isHost = false;
              var isSelf = false;
              var isSkipSelf = false;
              var isOptional = false;
              var token = null;

              if (Array.isArray(param)) {
                param.forEach(function (paramEntry) {
                  if (createHost.isTypeOf(paramEntry)) {
                    isHost = true;
                  } else if (createSelf.isTypeOf(paramEntry)) {
                    isSelf = true;
                  } else if (createSkipSelf.isTypeOf(paramEntry)) {
                    isSkipSelf = true;
                  } else if (createOptional.isTypeOf(paramEntry)) {
                    isOptional = true;
                  } else if (createAttribute.isTypeOf(paramEntry)) {
                    isAttribute = true;
                    token = paramEntry.attributeName;
                  } else if (createInject.isTypeOf(paramEntry)) {
                    token = paramEntry.token;
                  } else if (createInjectionToken.isTypeOf(paramEntry) || paramEntry instanceof StaticSymbol) {
                    token = paramEntry;
                  } else if (isValidType(paramEntry) && token == null) {
                    token = paramEntry;
                  }
                });
              } else {
                token = param;
              }

              if (token == null) {
                hasUnknownDeps = true;
                return {};
              }

              return {
                isAttribute: isAttribute,
                isHost: isHost,
                isSelf: isSelf,
                isSkipSelf: isSkipSelf,
                isOptional: isOptional,
                token: _this350._getTokenMetadata(token)
              };
            });

            if (hasUnknownDeps) {
              var depsTokens = dependenciesMetadata.map(function (dep) {
                return dep.token ? stringifyType(dep.token) : '?';
              }).join(', ');
              var message = "Can't resolve all parameters for ".concat(stringifyType(typeOrFunc), ": (").concat(depsTokens, ").");

              if (throwOnUnknownDeps || this._config.strictInjectionParameters) {
                this._reportError(syntaxError(message), typeOrFunc);
              }
            }

            return dependenciesMetadata;
          }
        }, {
          key: "_getTokenMetadata",
          value: function _getTokenMetadata(token) {
            token = resolveForwardRef(token);
            var compileToken;

            if (typeof token === 'string') {
              compileToken = {
                value: token
              };
            } else {
              compileToken = {
                identifier: {
                  reference: token
                }
              };
            }

            return compileToken;
          }
        }, {
          key: "_getProvidersMetadata",
          value: function _getProvidersMetadata(providers, targetEntryComponents, debugInfo) {
            var _this351 = this;

            var compileProviders = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
            var type = arguments.length > 4 ? arguments[4] : undefined;
            providers.forEach(function (provider, providerIdx) {
              if (Array.isArray(provider)) {
                _this351._getProvidersMetadata(provider, targetEntryComponents, debugInfo, compileProviders);
              } else {
                provider = resolveForwardRef(provider);
                var providerMeta = undefined;

                if (provider && typeof provider === 'object' && provider.hasOwnProperty('provide')) {
                  _this351._validateProvider(provider);

                  providerMeta = new ProviderMeta(provider.provide, provider);
                } else if (isValidType(provider)) {
                  providerMeta = new ProviderMeta(provider, {
                    useClass: provider
                  });
                } else if (provider === void 0) {
                  _this351._reportError(syntaxError("Encountered undefined provider! Usually this means you have a circular dependencies. This might be caused by using 'barrel' index.ts files."));

                  return;
                } else {
                  var providersInfo = providers.reduce(function (soFar, seenProvider, seenProviderIdx) {
                    if (seenProviderIdx < providerIdx) {
                      soFar.push("".concat(stringifyType(seenProvider)));
                    } else if (seenProviderIdx == providerIdx) {
                      soFar.push("?".concat(stringifyType(seenProvider), "?"));
                    } else if (seenProviderIdx == providerIdx + 1) {
                      soFar.push('...');
                    }

                    return soFar;
                  }, []).join(', ');

                  _this351._reportError(syntaxError("Invalid ".concat(debugInfo ? debugInfo : 'provider', " - only instances of Provider and Type are allowed, got: [").concat(providersInfo, "]")), type);

                  return;
                }

                if (providerMeta.token === _this351._reflector.resolveExternalReference(Identifiers.ANALYZE_FOR_ENTRY_COMPONENTS)) {
                  targetEntryComponents.push.apply(targetEntryComponents, _toConsumableArray(_this351._getEntryComponentsFromProvider(providerMeta, type)));
                } else {
                  compileProviders.push(_this351.getProviderMetadata(providerMeta));
                }
              }
            });
            return compileProviders;
          }
        }, {
          key: "_validateProvider",
          value: function _validateProvider(provider) {
            if (provider.hasOwnProperty('useClass') && provider.useClass == null) {
              this._reportError(syntaxError("Invalid provider for ".concat(stringifyType(provider.provide), ". useClass cannot be ").concat(provider.useClass, ".\n           Usually it happens when:\n           1. There's a circular dependency (might be caused by using index.ts (barrel) files).\n           2. Class was used before it was declared. Use forwardRef in this case.")));
            }
          }
        }, {
          key: "_getEntryComponentsFromProvider",
          value: function _getEntryComponentsFromProvider(provider, type) {
            var _this352 = this;

            var components = [];
            var collectedIdentifiers = [];

            if (provider.useFactory || provider.useExisting || provider.useClass) {
              this._reportError(syntaxError("The ANALYZE_FOR_ENTRY_COMPONENTS token only supports useValue!"), type);

              return [];
            }

            if (!provider.multi) {
              this._reportError(syntaxError("The ANALYZE_FOR_ENTRY_COMPONENTS token only supports 'multi = true'!"), type);

              return [];
            }

            extractIdentifiers(provider.useValue, collectedIdentifiers);
            collectedIdentifiers.forEach(function (identifier) {
              var entry = _this352._getEntryComponentMetadata(identifier.reference, false);

              if (entry) {
                components.push(entry);
              }
            });
            return components;
          }
        }, {
          key: "_getEntryComponentMetadata",
          value: function _getEntryComponentMetadata(dirType) {
            var throwIfNotFound = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
            var dirMeta = this.getNonNormalizedDirectiveMetadata(dirType);

            if (dirMeta && dirMeta.metadata.isComponent) {
              return {
                componentType: dirType,
                componentFactory: dirMeta.metadata.componentFactory
              };
            }

            var dirSummary = this._loadSummary(dirType, CompileSummaryKind.Directive);

            if (dirSummary && dirSummary.isComponent) {
              return {
                componentType: dirType,
                componentFactory: dirSummary.componentFactory
              };
            }

            if (throwIfNotFound) {
              throw syntaxError("".concat(dirType.name, " cannot be used as an entry component."));
            }

            return null;
          }
        }, {
          key: "_getInjectableTypeMetadata",
          value: function _getInjectableTypeMetadata(type) {
            var dependencies = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;

            var typeSummary = this._loadSummary(type, CompileSummaryKind.Injectable);

            if (typeSummary) {
              return typeSummary.type;
            }

            return this._getTypeMetadata(type, dependencies);
          }
        }, {
          key: "getProviderMetadata",
          value: function getProviderMetadata(provider) {
            var compileDeps = undefined;
            var compileTypeMetadata = null;
            var compileFactoryMetadata = null;

            var token = this._getTokenMetadata(provider.token);

            if (provider.useClass) {
              compileTypeMetadata = this._getInjectableTypeMetadata(provider.useClass, provider.dependencies);
              compileDeps = compileTypeMetadata.diDeps;

              if (provider.token === provider.useClass) {
                // use the compileTypeMetadata as it contains information about lifecycleHooks...
                token = {
                  identifier: compileTypeMetadata
                };
              }
            } else if (provider.useFactory) {
              compileFactoryMetadata = this._getFactoryMetadata(provider.useFactory, provider.dependencies);
              compileDeps = compileFactoryMetadata.diDeps;
            }

            return {
              token: token,
              useClass: compileTypeMetadata,
              useValue: provider.useValue,
              useFactory: compileFactoryMetadata,
              useExisting: provider.useExisting ? this._getTokenMetadata(provider.useExisting) : undefined,
              deps: compileDeps,
              multi: provider.multi
            };
          }
        }, {
          key: "_getQueriesMetadata",
          value: function _getQueriesMetadata(queries, isViewQuery, directiveType) {
            var _this353 = this;

            var res = [];
            Object.keys(queries).forEach(function (propertyName) {
              var query = queries[propertyName];

              if (query.isViewQuery === isViewQuery) {
                res.push(_this353._getQueryMetadata(query, propertyName, directiveType));
              }
            });
            return res;
          }
        }, {
          key: "_queryVarBindings",
          value: function _queryVarBindings(selector) {
            return selector.split(/\s*,\s*/);
          }
        }, {
          key: "_getQueryMetadata",
          value: function _getQueryMetadata(q, propertyName, typeOrFunc) {
            var _this354 = this;

            var selectors;

            if (typeof q.selector === 'string') {
              selectors = this._queryVarBindings(q.selector).map(function (varName) {
                return _this354._getTokenMetadata(varName);
              });
            } else {
              if (!q.selector) {
                this._reportError(syntaxError("Can't construct a query for the property \"".concat(propertyName, "\" of \"").concat(stringifyType(typeOrFunc), "\" since the query selector wasn't defined.")), typeOrFunc);

                selectors = [];
              } else {
                selectors = [this._getTokenMetadata(q.selector)];
              }
            }

            return {
              selectors: selectors,
              first: q.first,
              descendants: q.descendants,
              emitDistinctChangesOnly: q.emitDistinctChangesOnly,
              propertyName: propertyName,
              read: q.read ? this._getTokenMetadata(q.read) : null,
              "static": q["static"]
            };
          }
        }, {
          key: "_reportError",
          value: function _reportError(error, type, otherType) {
            if (this._errorCollector) {
              this._errorCollector(error, type);

              if (otherType) {
                this._errorCollector(error, otherType);
              }
            } else {
              throw error;
            }
          }
        }]);

        return CompileMetadataResolver;
      }();

      function flattenArray(tree) {
        var out = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];

        if (tree) {
          for (var i = 0; i < tree.length; i++) {
            var item = resolveForwardRef(tree[i]);

            if (Array.isArray(item)) {
              flattenArray(item, out);
            } else {
              out.push(item);
            }
          }
        }

        return out;
      }

      function dedupeArray(array) {
        if (array) {
          return Array.from(new Set(array));
        }

        return [];
      }

      function flattenAndDedupeArray(tree) {
        return dedupeArray(flattenArray(tree));
      }

      function isValidType(value) {
        return value instanceof StaticSymbol || value instanceof Type;
      }

      function extractIdentifiers(value, targetIdentifiers) {
        visitValue(value, new _CompileValueConverter(), targetIdentifiers);
      }

      var _CompileValueConverter = /*#__PURE__*/function (_ValueTransformer) {
        _inherits2(_CompileValueConverter, _ValueTransformer);

        var _super161 = _createSuper(_CompileValueConverter);

        function _CompileValueConverter() {
          _classCallCheck2(this, _CompileValueConverter);

          return _super161.apply(this, arguments);
        }

        _createClass2(_CompileValueConverter, [{
          key: "visitOther",
          value: function visitOther(value, targetIdentifiers) {
            targetIdentifiers.push({
              reference: value
            });
          }
        }]);

        return _CompileValueConverter;
      }(ValueTransformer);

      function stringifyType(type) {
        if (type instanceof StaticSymbol) {
          return "".concat(type.name, " in ").concat(type.filePath);
        } else {
          return stringify(type);
        }
      }
      /**
       * Indicates that a component is still being loaded in a synchronous compile.
       */


      function componentStillLoadingError(compType) {
        var error = Error("Can't compile synchronously as ".concat(stringify(compType), " is still being loaded!"));
        error[ERROR_COMPONENT_TYPE] = compType;
        return error;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function providerDef(ctx, providerAst) {
        var flags = 0
        /* None */
        ;

        if (!providerAst.eager) {
          flags |= 4096
          /* LazyProvider */
          ;
        }

        if (providerAst.providerType === ProviderAstType.PrivateService) {
          flags |= 8192
          /* PrivateProvider */
          ;
        }

        if (providerAst.isModule) {
          flags |= 1073741824
          /* TypeModuleProvider */
          ;
        }

        providerAst.lifecycleHooks.forEach(function (lifecycleHook) {
          // for regular providers, we only support ngOnDestroy
          if (lifecycleHook === LifecycleHooks.OnDestroy || providerAst.providerType === ProviderAstType.Directive || providerAst.providerType === ProviderAstType.Component) {
            flags |= lifecycleHookToNodeFlag(lifecycleHook);
          }
        });

        var _ref89 = providerAst.multiProvider ? multiProviderDef(ctx, flags, providerAst.providers) : singleProviderDef(ctx, flags, providerAst.providerType, providerAst.providers[0]),
            providerExpr = _ref89.providerExpr,
            providerFlags = _ref89.flags,
            depsExpr = _ref89.depsExpr;

        return {
          providerExpr: providerExpr,
          flags: providerFlags,
          depsExpr: depsExpr,
          tokenExpr: tokenExpr(ctx, providerAst.token)
        };
      }

      function multiProviderDef(ctx, flags, providers) {
        var allDepDefs = [];
        var allParams = [];
        var exprs = providers.map(function (provider, providerIndex) {
          var expr;

          if (provider.useClass) {
            var depExprs = convertDeps(providerIndex, provider.deps || provider.useClass.diDeps);
            expr = ctx.importExpr(provider.useClass.reference).instantiate(depExprs);
          } else if (provider.useFactory) {
            var _depExprs = convertDeps(providerIndex, provider.deps || provider.useFactory.diDeps);

            expr = ctx.importExpr(provider.useFactory.reference).callFn(_depExprs);
          } else if (provider.useExisting) {
            var _depExprs2 = convertDeps(providerIndex, [{
              token: provider.useExisting
            }]);

            expr = _depExprs2[0];
          } else {
            expr = convertValueToOutputAst(ctx, provider.useValue);
          }

          return expr;
        });
        var providerExpr = fn(allParams, [new ReturnStatement(literalArr(exprs))], INFERRED_TYPE);
        return {
          providerExpr: providerExpr,
          flags: flags | 1024
          /* TypeFactoryProvider */
          ,
          depsExpr: literalArr(allDepDefs)
        };

        function convertDeps(providerIndex, deps) {
          return deps.map(function (dep, depIndex) {
            var paramName = "p".concat(providerIndex, "_").concat(depIndex);
            allParams.push(new FnParam(paramName, DYNAMIC_TYPE));
            allDepDefs.push(depDef(ctx, dep));
            return variable(paramName);
          });
        }
      }

      function singleProviderDef(ctx, flags, providerType, providerMeta) {
        var providerExpr;
        var deps;

        if (providerType === ProviderAstType.Directive || providerType === ProviderAstType.Component) {
          providerExpr = ctx.importExpr(providerMeta.useClass.reference);
          flags |= 16384
          /* TypeDirective */
          ;
          deps = providerMeta.deps || providerMeta.useClass.diDeps;
        } else {
          if (providerMeta.useClass) {
            providerExpr = ctx.importExpr(providerMeta.useClass.reference);
            flags |= 512
            /* TypeClassProvider */
            ;
            deps = providerMeta.deps || providerMeta.useClass.diDeps;
          } else if (providerMeta.useFactory) {
            providerExpr = ctx.importExpr(providerMeta.useFactory.reference);
            flags |= 1024
            /* TypeFactoryProvider */
            ;
            deps = providerMeta.deps || providerMeta.useFactory.diDeps;
          } else if (providerMeta.useExisting) {
            providerExpr = NULL_EXPR;
            flags |= 2048
            /* TypeUseExistingProvider */
            ;
            deps = [{
              token: providerMeta.useExisting
            }];
          } else {
            providerExpr = convertValueToOutputAst(ctx, providerMeta.useValue);
            flags |= 256
            /* TypeValueProvider */
            ;
            deps = [];
          }
        }

        var depsExpr = literalArr(deps.map(function (dep) {
          return depDef(ctx, dep);
        }));
        return {
          providerExpr: providerExpr,
          flags: flags,
          depsExpr: depsExpr
        };
      }

      function tokenExpr(ctx, tokenMeta) {
        return tokenMeta.identifier ? ctx.importExpr(tokenMeta.identifier.reference) : literal(tokenMeta.value);
      }

      function depDef(ctx, dep) {
        // Note: the following fields have already been normalized out by provider_analyzer:
        // - isAttribute, isHost
        var expr = dep.isValue ? convertValueToOutputAst(ctx, dep.value) : tokenExpr(ctx, dep.token);
        var flags = 0
        /* None */
        ;

        if (dep.isSkipSelf) {
          flags |= 1
          /* SkipSelf */
          ;
        }

        if (dep.isOptional) {
          flags |= 2
          /* Optional */
          ;
        }

        if (dep.isSelf) {
          flags |= 4
          /* Self */
          ;
        }

        if (dep.isValue) {
          flags |= 8
          /* Value */
          ;
        }

        return flags === 0
        /* None */
        ? expr : literalArr([literal(flags), expr]);
      }

      function lifecycleHookToNodeFlag(lifecycleHook) {
        var nodeFlag = 0
        /* None */
        ;

        switch (lifecycleHook) {
          case LifecycleHooks.AfterContentChecked:
            nodeFlag = 2097152
            /* AfterContentChecked */
            ;
            break;

          case LifecycleHooks.AfterContentInit:
            nodeFlag = 1048576
            /* AfterContentInit */
            ;
            break;

          case LifecycleHooks.AfterViewChecked:
            nodeFlag = 8388608
            /* AfterViewChecked */
            ;
            break;

          case LifecycleHooks.AfterViewInit:
            nodeFlag = 4194304
            /* AfterViewInit */
            ;
            break;

          case LifecycleHooks.DoCheck:
            nodeFlag = 262144
            /* DoCheck */
            ;
            break;

          case LifecycleHooks.OnChanges:
            nodeFlag = 524288
            /* OnChanges */
            ;
            break;

          case LifecycleHooks.OnDestroy:
            nodeFlag = 131072
            /* OnDestroy */
            ;
            break;

          case LifecycleHooks.OnInit:
            nodeFlag = 65536
            /* OnInit */
            ;
            break;
        }

        return nodeFlag;
      }

      function componentFactoryResolverProviderDef(reflector, ctx, flags, entryComponents) {
        var entryComponentFactories = entryComponents.map(function (entryComponent) {
          return ctx.importExpr(entryComponent.componentFactory);
        });
        var token = createTokenForExternalReference(reflector, Identifiers.ComponentFactoryResolver);
        var classMeta = {
          diDeps: [{
            isValue: true,
            value: literalArr(entryComponentFactories)
          }, {
            token: token,
            isSkipSelf: true,
            isOptional: true
          }, {
            token: createTokenForExternalReference(reflector, Identifiers.NgModuleRef)
          }],
          lifecycleHooks: [],
          reference: reflector.resolveExternalReference(Identifiers.CodegenComponentFactoryResolver)
        };

        var _singleProviderDef = singleProviderDef(ctx, flags, ProviderAstType.PrivateService, {
          token: token,
          multi: false,
          useClass: classMeta
        }),
            providerExpr = _singleProviderDef.providerExpr,
            providerFlags = _singleProviderDef.flags,
            depsExpr = _singleProviderDef.depsExpr;

        return {
          providerExpr: providerExpr,
          flags: providerFlags,
          depsExpr: depsExpr,
          tokenExpr: tokenExpr(ctx, token)
        };
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var NgModuleCompileResult = function NgModuleCompileResult(ngModuleFactoryVar) {
        _classCallCheck2(this, NgModuleCompileResult);

        this.ngModuleFactoryVar = ngModuleFactoryVar;
      };

      var LOG_VAR = variable('_l');

      var NgModuleCompiler = /*#__PURE__*/function () {
        function NgModuleCompiler(reflector) {
          _classCallCheck2(this, NgModuleCompiler);

          this.reflector = reflector;
        }

        _createClass2(NgModuleCompiler, [{
          key: "compile",
          value: function compile(ctx, ngModuleMeta, extraProviders) {
            var sourceSpan = typeSourceSpan('NgModule', ngModuleMeta.type);
            var entryComponentFactories = ngModuleMeta.transitiveModule.entryComponents;
            var bootstrapComponents = ngModuleMeta.bootstrapComponents;
            var providerParser = new NgModuleProviderAnalyzer(this.reflector, ngModuleMeta, extraProviders, sourceSpan);
            var providerDefs = [componentFactoryResolverProviderDef(this.reflector, ctx, 0
            /* None */
            , entryComponentFactories)].concat(providerParser.parse().map(function (provider) {
              return providerDef(ctx, provider);
            })).map(function (_ref90) {
              var providerExpr = _ref90.providerExpr,
                  depsExpr = _ref90.depsExpr,
                  flags = _ref90.flags,
                  tokenExpr = _ref90.tokenExpr;
              return importExpr(Identifiers.moduleProviderDef).callFn([literal(flags), tokenExpr, providerExpr, depsExpr]);
            });
            var ngModuleDef = importExpr(Identifiers.moduleDef).callFn([literalArr(providerDefs)]);
            var ngModuleDefFactory = fn([new FnParam(LOG_VAR.name)], [new ReturnStatement(ngModuleDef)], INFERRED_TYPE);
            var ngModuleFactoryVar = "".concat(identifierName(ngModuleMeta.type), "NgFactory");

            this._createNgModuleFactory(ctx, ngModuleMeta.type.reference, importExpr(Identifiers.createModuleFactory).callFn([ctx.importExpr(ngModuleMeta.type.reference), literalArr(bootstrapComponents.map(function (id) {
              return ctx.importExpr(id.reference);
            })), ngModuleDefFactory]));

            if (ngModuleMeta.id) {
              var id = typeof ngModuleMeta.id === 'string' ? literal(ngModuleMeta.id) : ctx.importExpr(ngModuleMeta.id);
              var registerFactoryStmt = importExpr(Identifiers.RegisterModuleFactoryFn).callFn([id, variable(ngModuleFactoryVar)]).toStmt();
              ctx.statements.push(registerFactoryStmt);
            }

            return new NgModuleCompileResult(ngModuleFactoryVar);
          }
        }, {
          key: "createStub",
          value: function createStub(ctx, ngModuleReference) {
            this._createNgModuleFactory(ctx, ngModuleReference, NULL_EXPR);
          }
        }, {
          key: "_createNgModuleFactory",
          value: function _createNgModuleFactory(ctx, reference, value) {
            var ngModuleFactoryVar = "".concat(identifierName({
              reference: reference
            }), "NgFactory");
            var ngModuleFactoryStmt = variable(ngModuleFactoryVar).set(value).toDeclStmt(importType(Identifiers.NgModuleFactory, [expressionType(ctx.importExpr(reference))], [TypeModifier.Const]), [StmtModifier.Final, StmtModifier.Exported]);
            ctx.statements.push(ngModuleFactoryStmt);
          }
        }]);

        return NgModuleCompiler;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Resolves types to {@link NgModule}.
       */


      var NgModuleResolver = /*#__PURE__*/function () {
        function NgModuleResolver(_reflector) {
          _classCallCheck2(this, NgModuleResolver);

          this._reflector = _reflector;
        }

        _createClass2(NgModuleResolver, [{
          key: "isNgModule",
          value: function isNgModule(type) {
            return this._reflector.annotations(type).some(createNgModule.isTypeOf);
          }
        }, {
          key: "resolve",
          value: function resolve(type) {
            var throwIfNotFound = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
            var ngModuleMeta = findLast(this._reflector.annotations(type), createNgModule.isTypeOf);

            if (ngModuleMeta) {
              return ngModuleMeta;
            } else {
              if (throwIfNotFound) {
                throw new Error("No NgModule metadata found for '".concat(stringify(type), "'."));
              }

              return null;
            }
          }
        }]);

        return NgModuleResolver;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function debugOutputAstAsTypeScript(ast) {
        var converter = new _TsEmitterVisitor();
        var ctx = EmitterVisitorContext.createRoot();
        var asts = Array.isArray(ast) ? ast : [ast];
        asts.forEach(function (ast) {
          if (ast instanceof Statement) {
            ast.visitStatement(converter, ctx);
          } else if (ast instanceof Expression) {
            ast.visitExpression(converter, ctx);
          } else if (ast instanceof Type$1) {
            ast.visitType(converter, ctx);
          } else {
            throw new Error("Don't know how to print debug info for ".concat(ast));
          }
        });
        return ctx.toSource();
      }

      var TypeScriptEmitter = /*#__PURE__*/function () {
        function TypeScriptEmitter() {
          _classCallCheck2(this, TypeScriptEmitter);
        }

        _createClass2(TypeScriptEmitter, [{
          key: "emitStatementsAndContext",
          value: function emitStatementsAndContext(genFilePath, stmts) {
            var preamble = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
            var emitSourceMaps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
            var referenceFilter = arguments.length > 4 ? arguments[4] : undefined;
            var importFilter = arguments.length > 5 ? arguments[5] : undefined;
            var converter = new _TsEmitterVisitor(referenceFilter, importFilter);
            var ctx = EmitterVisitorContext.createRoot();
            converter.visitAllStatements(stmts, ctx);
            var preambleLines = preamble ? preamble.split('\n') : [];
            converter.reexports.forEach(function (reexports, exportedModuleName) {
              var reexportsCode = reexports.map(function (reexport) {
                return "".concat(reexport.name, " as ").concat(reexport.as);
              }).join(',');
              preambleLines.push("export {".concat(reexportsCode, "} from '").concat(exportedModuleName, "';"));
            });
            converter.importsWithPrefixes.forEach(function (prefix, importedModuleName) {
              // Note: can't write the real word for import as it screws up system.js auto detection...
              preambleLines.push("imp" + "ort * as ".concat(prefix, " from '").concat(importedModuleName, "';"));
            });
            var sm = emitSourceMaps ? ctx.toSourceMapGenerator(genFilePath, preambleLines.length).toJsComment() : '';
            var lines = [].concat(_toConsumableArray(preambleLines), [ctx.toSource(), sm]);

            if (sm) {
              // always add a newline at the end, as some tools have bugs without it.
              lines.push('');
            }

            ctx.setPreambleLineCount(preambleLines.length);
            return {
              sourceText: lines.join('\n'),
              context: ctx
            };
          }
        }, {
          key: "emitStatements",
          value: function emitStatements(genFilePath, stmts) {
            var preamble = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
            return this.emitStatementsAndContext(genFilePath, stmts, preamble).sourceText;
          }
        }]);

        return TypeScriptEmitter;
      }();

      var _TsEmitterVisitor = /*#__PURE__*/function (_AbstractEmitterVisit2) {
        _inherits2(_TsEmitterVisitor, _AbstractEmitterVisit2);

        var _super162 = _createSuper(_TsEmitterVisitor);

        function _TsEmitterVisitor(referenceFilter, importFilter) {
          var _this355;

          _classCallCheck2(this, _TsEmitterVisitor);

          _this355 = _super162.call(this, false);
          _this355.referenceFilter = referenceFilter;
          _this355.importFilter = importFilter;
          _this355.typeExpression = 0;
          _this355.importsWithPrefixes = new Map();
          _this355.reexports = new Map();
          return _this355;
        }

        _createClass2(_TsEmitterVisitor, [{
          key: "visitType",
          value: function visitType(t, ctx) {
            var defaultType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'any';

            if (t) {
              this.typeExpression++;
              t.visitType(this, ctx);
              this.typeExpression--;
            } else {
              ctx.print(null, defaultType);
            }
          }
        }, {
          key: "visitLiteralExpr",
          value: function visitLiteralExpr(ast, ctx) {
            var value = ast.value;

            if (value == null && ast.type != INFERRED_TYPE) {
              ctx.print(ast, "(".concat(value, " as any)"));
              return null;
            }

            return _get2(_getPrototypeOf2(_TsEmitterVisitor.prototype), "visitLiteralExpr", this).call(this, ast, ctx);
          } // Temporary workaround to support strictNullCheck enabled consumers of ngc emit.
          // In SNC mode, [] have the type never[], so we cast here to any[].
          // TODO: narrow the cast to a more explicit type, or use a pattern that does not
          // start with [].concat. see https://github.com/angular/angular/pull/11846

        }, {
          key: "visitLiteralArrayExpr",
          value: function visitLiteralArrayExpr(ast, ctx) {
            if (ast.entries.length === 0) {
              ctx.print(ast, '(');
            }

            var result = _get2(_getPrototypeOf2(_TsEmitterVisitor.prototype), "visitLiteralArrayExpr", this).call(this, ast, ctx);

            if (ast.entries.length === 0) {
              ctx.print(ast, ' as any[])');
            }

            return result;
          }
        }, {
          key: "visitExternalExpr",
          value: function visitExternalExpr(ast, ctx) {
            this._visitIdentifier(ast.value, ast.typeParams, ctx);

            return null;
          }
        }, {
          key: "visitAssertNotNullExpr",
          value: function visitAssertNotNullExpr(ast, ctx) {
            var result = _get2(_getPrototypeOf2(_TsEmitterVisitor.prototype), "visitAssertNotNullExpr", this).call(this, ast, ctx);

            ctx.print(ast, '!');
            return result;
          }
        }, {
          key: "visitDeclareVarStmt",
          value: function visitDeclareVarStmt(stmt, ctx) {
            if (stmt.hasModifier(StmtModifier.Exported) && stmt.value instanceof ExternalExpr && !stmt.type) {
              // check for a reexport
              var _stmt$value$value = stmt.value.value,
                  name = _stmt$value$value.name,
                  moduleName = _stmt$value$value.moduleName;

              if (moduleName) {
                var reexports = this.reexports.get(moduleName);

                if (!reexports) {
                  reexports = [];
                  this.reexports.set(moduleName, reexports);
                }

                reexports.push({
                  name: name,
                  as: stmt.name
                });
                return null;
              }
            }

            if (stmt.hasModifier(StmtModifier.Exported)) {
              ctx.print(stmt, "export ");
            }

            if (stmt.hasModifier(StmtModifier.Final)) {
              ctx.print(stmt, "const");
            } else {
              ctx.print(stmt, "var");
            }

            ctx.print(stmt, " ".concat(stmt.name));

            this._printColonType(stmt.type, ctx);

            if (stmt.value) {
              ctx.print(stmt, " = ");
              stmt.value.visitExpression(this, ctx);
            }

            ctx.println(stmt, ";");
            return null;
          }
        }, {
          key: "visitWrappedNodeExpr",
          value: function visitWrappedNodeExpr(ast, ctx) {
            throw new Error('Cannot visit a WrappedNodeExpr when outputting Typescript.');
          }
        }, {
          key: "visitCastExpr",
          value: function visitCastExpr(ast, ctx) {
            ctx.print(ast, "(<");
            ast.type.visitType(this, ctx);
            ctx.print(ast, ">");
            ast.value.visitExpression(this, ctx);
            ctx.print(ast, ")");
            return null;
          }
        }, {
          key: "visitInstantiateExpr",
          value: function visitInstantiateExpr(ast, ctx) {
            ctx.print(ast, "new ");
            this.typeExpression++;
            ast.classExpr.visitExpression(this, ctx);
            this.typeExpression--;
            ctx.print(ast, "(");
            this.visitAllExpressions(ast.args, ctx, ',');
            ctx.print(ast, ")");
            return null;
          }
        }, {
          key: "visitDeclareClassStmt",
          value: function visitDeclareClassStmt(stmt, ctx) {
            var _this356 = this;

            ctx.pushClass(stmt);

            if (stmt.hasModifier(StmtModifier.Exported)) {
              ctx.print(stmt, "export ");
            }

            ctx.print(stmt, "class ".concat(stmt.name));

            if (stmt.parent != null) {
              ctx.print(stmt, " extends ");
              this.typeExpression++;
              stmt.parent.visitExpression(this, ctx);
              this.typeExpression--;
            }

            ctx.println(stmt, " {");
            ctx.incIndent();
            stmt.fields.forEach(function (field) {
              return _this356._visitClassField(field, ctx);
            });

            if (stmt.constructorMethod != null) {
              this._visitClassConstructor(stmt, ctx);
            }

            stmt.getters.forEach(function (getter) {
              return _this356._visitClassGetter(getter, ctx);
            });
            stmt.methods.forEach(function (method) {
              return _this356._visitClassMethod(method, ctx);
            });
            ctx.decIndent();
            ctx.println(stmt, "}");
            ctx.popClass();
            return null;
          }
        }, {
          key: "_visitClassField",
          value: function _visitClassField(field, ctx) {
            if (field.hasModifier(StmtModifier.Private)) {
              // comment out as a workaround for #10967
              ctx.print(null, "/*private*/ ");
            }

            if (field.hasModifier(StmtModifier.Static)) {
              ctx.print(null, 'static ');
            }

            ctx.print(null, field.name);

            this._printColonType(field.type, ctx);

            if (field.initializer) {
              ctx.print(null, ' = ');
              field.initializer.visitExpression(this, ctx);
            }

            ctx.println(null, ";");
          }
        }, {
          key: "_visitClassGetter",
          value: function _visitClassGetter(getter, ctx) {
            if (getter.hasModifier(StmtModifier.Private)) {
              ctx.print(null, "private ");
            }

            ctx.print(null, "get ".concat(getter.name, "()"));

            this._printColonType(getter.type, ctx);

            ctx.println(null, " {");
            ctx.incIndent();
            this.visitAllStatements(getter.body, ctx);
            ctx.decIndent();
            ctx.println(null, "}");
          }
        }, {
          key: "_visitClassConstructor",
          value: function _visitClassConstructor(stmt, ctx) {
            ctx.print(stmt, "constructor(");

            this._visitParams(stmt.constructorMethod.params, ctx);

            ctx.println(stmt, ") {");
            ctx.incIndent();
            this.visitAllStatements(stmt.constructorMethod.body, ctx);
            ctx.decIndent();
            ctx.println(stmt, "}");
          }
        }, {
          key: "_visitClassMethod",
          value: function _visitClassMethod(method, ctx) {
            if (method.hasModifier(StmtModifier.Private)) {
              ctx.print(null, "private ");
            }

            ctx.print(null, "".concat(method.name, "("));

            this._visitParams(method.params, ctx);

            ctx.print(null, ")");

            this._printColonType(method.type, ctx, 'void');

            ctx.println(null, " {");
            ctx.incIndent();
            this.visitAllStatements(method.body, ctx);
            ctx.decIndent();
            ctx.println(null, "}");
          }
        }, {
          key: "visitFunctionExpr",
          value: function visitFunctionExpr(ast, ctx) {
            if (ast.name) {
              ctx.print(ast, 'function ');
              ctx.print(ast, ast.name);
            }

            ctx.print(ast, "(");

            this._visitParams(ast.params, ctx);

            ctx.print(ast, ")");

            this._printColonType(ast.type, ctx, 'void');

            if (!ast.name) {
              ctx.print(ast, " => ");
            }

            ctx.println(ast, '{');
            ctx.incIndent();
            this.visitAllStatements(ast.statements, ctx);
            ctx.decIndent();
            ctx.print(ast, "}");
            return null;
          }
        }, {
          key: "visitDeclareFunctionStmt",
          value: function visitDeclareFunctionStmt(stmt, ctx) {
            if (stmt.hasModifier(StmtModifier.Exported)) {
              ctx.print(stmt, "export ");
            }

            ctx.print(stmt, "function ".concat(stmt.name, "("));

            this._visitParams(stmt.params, ctx);

            ctx.print(stmt, ")");

            this._printColonType(stmt.type, ctx, 'void');

            ctx.println(stmt, " {");
            ctx.incIndent();
            this.visitAllStatements(stmt.statements, ctx);
            ctx.decIndent();
            ctx.println(stmt, "}");
            return null;
          }
        }, {
          key: "visitTryCatchStmt",
          value: function visitTryCatchStmt(stmt, ctx) {
            ctx.println(stmt, "try {");
            ctx.incIndent();
            this.visitAllStatements(stmt.bodyStmts, ctx);
            ctx.decIndent();
            ctx.println(stmt, "} catch (".concat(CATCH_ERROR_VAR$1.name, ") {"));
            ctx.incIndent();
            var catchStmts = [CATCH_STACK_VAR$1.set(CATCH_ERROR_VAR$1.prop('stack', null)).toDeclStmt(null, [StmtModifier.Final])].concat(stmt.catchStmts);
            this.visitAllStatements(catchStmts, ctx);
            ctx.decIndent();
            ctx.println(stmt, "}");
            return null;
          }
        }, {
          key: "visitBuiltinType",
          value: function visitBuiltinType(type, ctx) {
            var typeStr;

            switch (type.name) {
              case BuiltinTypeName.Bool:
                typeStr = 'boolean';
                break;

              case BuiltinTypeName.Dynamic:
                typeStr = 'any';
                break;

              case BuiltinTypeName.Function:
                typeStr = 'Function';
                break;

              case BuiltinTypeName.Number:
                typeStr = 'number';
                break;

              case BuiltinTypeName.Int:
                typeStr = 'number';
                break;

              case BuiltinTypeName.String:
                typeStr = 'string';
                break;

              case BuiltinTypeName.None:
                typeStr = 'never';
                break;

              default:
                throw new Error("Unsupported builtin type ".concat(type.name));
            }

            ctx.print(null, typeStr);
            return null;
          }
        }, {
          key: "visitExpressionType",
          value: function visitExpressionType(ast, ctx) {
            var _this357 = this;

            ast.value.visitExpression(this, ctx);

            if (ast.typeParams !== null) {
              ctx.print(null, '<');
              this.visitAllObjects(function (type) {
                return _this357.visitType(type, ctx);
              }, ast.typeParams, ctx, ',');
              ctx.print(null, '>');
            }

            return null;
          }
        }, {
          key: "visitArrayType",
          value: function visitArrayType(type, ctx) {
            this.visitType(type.of, ctx);
            ctx.print(null, "[]");
            return null;
          }
        }, {
          key: "visitMapType",
          value: function visitMapType(type, ctx) {
            ctx.print(null, "{[key: string]:");
            this.visitType(type.valueType, ctx);
            ctx.print(null, "}");
            return null;
          }
        }, {
          key: "getBuiltinMethodName",
          value: function getBuiltinMethodName(method) {
            var name;

            switch (method) {
              case BuiltinMethod.ConcatArray:
                name = 'concat';
                break;

              case BuiltinMethod.SubscribeObservable:
                name = 'subscribe';
                break;

              case BuiltinMethod.Bind:
                name = 'bind';
                break;

              default:
                throw new Error("Unknown builtin method: ".concat(method));
            }

            return name;
          }
        }, {
          key: "_visitParams",
          value: function _visitParams(params, ctx) {
            var _this358 = this;

            this.visitAllObjects(function (param) {
              ctx.print(null, param.name);

              _this358._printColonType(param.type, ctx);
            }, params, ctx, ',');
          }
        }, {
          key: "_visitIdentifier",
          value: function _visitIdentifier(value, typeParams, ctx) {
            var _this359 = this;

            var name = value.name,
                moduleName = value.moduleName;

            if (this.referenceFilter && this.referenceFilter(value)) {
              ctx.print(null, '(null as any)');
              return;
            }

            if (moduleName && (!this.importFilter || !this.importFilter(value))) {
              var prefix = this.importsWithPrefixes.get(moduleName);

              if (prefix == null) {
                prefix = "i".concat(this.importsWithPrefixes.size);
                this.importsWithPrefixes.set(moduleName, prefix);
              }

              ctx.print(null, "".concat(prefix, "."));
            }

            ctx.print(null, name);

            if (this.typeExpression > 0) {
              // If we are in a type expression that refers to a generic type then supply
              // the required type parameters. If there were not enough type parameters
              // supplied, supply any as the type. Outside a type expression the reference
              // should not supply type parameters and be treated as a simple value reference
              // to the constructor function itself.
              var suppliedParameters = typeParams || [];

              if (suppliedParameters.length > 0) {
                ctx.print(null, "<");
                this.visitAllObjects(function (type) {
                  return type.visitType(_this359, ctx);
                }, typeParams, ctx, ',');
                ctx.print(null, ">");
              }
            }
          }
        }, {
          key: "_printColonType",
          value: function _printColonType(type, ctx, defaultType) {
            if (type !== INFERRED_TYPE) {
              ctx.print(null, ':');
              this.visitType(type, ctx, defaultType);
            }
          }
        }]);

        return _TsEmitterVisitor;
      }(AbstractEmitterVisitor);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Resolve a `Type` for {@link Pipe}.
       *
       * This interface can be overridden by the application developer to create custom behavior.
       *
       * See {@link Compiler}
       */


      var PipeResolver = /*#__PURE__*/function () {
        function PipeResolver(_reflector) {
          _classCallCheck2(this, PipeResolver);

          this._reflector = _reflector;
        }

        _createClass2(PipeResolver, [{
          key: "isPipe",
          value: function isPipe(type) {
            var typeMetadata = this._reflector.annotations(resolveForwardRef(type));

            return typeMetadata && typeMetadata.some(createPipe.isTypeOf);
          }
          /**
           * Return {@link Pipe} for a given `Type`.
           */

        }, {
          key: "resolve",
          value: function resolve(type) {
            var throwIfNotFound = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;

            var metas = this._reflector.annotations(resolveForwardRef(type));

            if (metas) {
              var annotation = findLast(metas, createPipe.isTypeOf);

              if (annotation) {
                return annotation;
              }
            }

            if (throwIfNotFound) {
              throw new Error("No Pipe decorator found on ".concat(stringify(type)));
            }

            return null;
          }
        }]);

        return PipeResolver;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generates code that is used to type check templates.
       */


      var TypeCheckCompiler = /*#__PURE__*/function () {
        function TypeCheckCompiler(options, reflector) {
          _classCallCheck2(this, TypeCheckCompiler);

          this.options = options;
          this.reflector = reflector;
        }
        /**
         * Important notes:
         * - This must not produce new `import` statements, but only refer to types outside
         *   of the file via the variables provided via externalReferenceVars.
         *   This allows Typescript to reuse the old program's structure as no imports have changed.
         * - This must not produce any exports, as this would pollute the .d.ts file
         *   and also violate the point above.
         */


        _createClass2(TypeCheckCompiler, [{
          key: "compileComponent",
          value: function compileComponent(componentId, component, template, usedPipes, externalReferenceVars, ctx) {
            var _this360 = this;

            var pipes = new Map();
            usedPipes.forEach(function (p) {
              return pipes.set(p.name, p.type.reference);
            });
            var embeddedViewCount = 0;

            var viewBuilderFactory = function viewBuilderFactory(parent, guards) {
              var embeddedViewIndex = embeddedViewCount++;
              return new ViewBuilder(_this360.options, _this360.reflector, externalReferenceVars, parent, component.type.reference, component.isHost, embeddedViewIndex, pipes, guards, ctx, viewBuilderFactory);
            };

            var visitor = viewBuilderFactory(null, []);
            visitor.visitAll([], template);
            return visitor.build(componentId);
          }
        }]);

        return TypeCheckCompiler;
      }();

      var DYNAMIC_VAR_NAME = '_any';

      var TypeCheckLocalResolver = /*#__PURE__*/function () {
        function TypeCheckLocalResolver() {
          _classCallCheck2(this, TypeCheckLocalResolver);
        }

        _createClass2(TypeCheckLocalResolver, [{
          key: "notifyImplicitReceiverUse",
          value: function notifyImplicitReceiverUse() {}
        }, {
          key: "getLocal",
          value: function getLocal(name) {
            if (name === EventHandlerVars.event.name) {
              // References to the event should not be type-checked.
              // TODO(chuckj): determine a better type for the event.
              return variable(DYNAMIC_VAR_NAME);
            }

            return null;
          }
        }]);

        return TypeCheckLocalResolver;
      }();

      var defaultResolver = new TypeCheckLocalResolver();

      var ViewBuilder = /*#__PURE__*/function () {
        function ViewBuilder(options, reflector, externalReferenceVars, parent, component, isHostComponent, embeddedViewIndex, pipes, guards, ctx, viewBuilderFactory) {
          _classCallCheck2(this, ViewBuilder);

          this.options = options;
          this.reflector = reflector;
          this.externalReferenceVars = externalReferenceVars;
          this.parent = parent;
          this.component = component;
          this.isHostComponent = isHostComponent;
          this.embeddedViewIndex = embeddedViewIndex;
          this.pipes = pipes;
          this.guards = guards;
          this.ctx = ctx;
          this.viewBuilderFactory = viewBuilderFactory;
          this.refOutputVars = new Map();
          this.variables = [];
          this.children = [];
          this.updates = [];
          this.actions = [];
        }

        _createClass2(ViewBuilder, [{
          key: "getOutputVar",
          value: function getOutputVar(type) {
            var varName;

            if (type === this.component && this.isHostComponent) {
              varName = DYNAMIC_VAR_NAME;
            } else if (type instanceof StaticSymbol) {
              varName = this.externalReferenceVars.get(type);
            } else {
              varName = DYNAMIC_VAR_NAME;
            }

            if (!varName) {
              throw new Error("Illegal State: referring to a type without a variable ".concat(JSON.stringify(type)));
            }

            return varName;
          }
        }, {
          key: "getTypeGuardExpressions",
          value: function getTypeGuardExpressions(ast) {
            var result = _toConsumableArray(this.guards);

            var _iterator31 = _createForOfIteratorHelper(ast.directives),
                _step31;

            try {
              for (_iterator31.s(); !(_step31 = _iterator31.n()).done;) {
                var directive = _step31.value;

                var _iterator32 = _createForOfIteratorHelper(directive.inputs),
                    _step32;

                try {
                  for (_iterator32.s(); !(_step32 = _iterator32.n()).done;) {
                    var input = _step32.value;
                    var guard = directive.directive.guards[input.directiveName];

                    if (guard) {
                      var useIf = guard === 'UseIf';
                      result.push({
                        guard: guard,
                        useIf: useIf,
                        expression: {
                          context: this.component,
                          value: input.value,
                          sourceSpan: input.sourceSpan
                        }
                      });
                    }
                  }
                } catch (err) {
                  _iterator32.e(err);
                } finally {
                  _iterator32.f();
                }
              }
            } catch (err) {
              _iterator31.e(err);
            } finally {
              _iterator31.f();
            }

            return result;
          }
        }, {
          key: "visitAll",
          value: function visitAll(variables, astNodes) {
            this.variables = variables;
            templateVisitAll(this, astNodes);
          }
        }, {
          key: "build",
          value: function build(componentId) {
            var _this361 = this;

            var targetStatements = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
            this.children.forEach(function (child) {
              return child.build(componentId, targetStatements);
            });
            var viewStmts = [variable(DYNAMIC_VAR_NAME).set(NULL_EXPR).toDeclStmt(DYNAMIC_TYPE)];
            var bindingCount = 0;
            this.updates.forEach(function (expression) {
              var _viewStmts;

              var _this361$preprocessUp = _this361.preprocessUpdateExpression(expression),
                  sourceSpan = _this361$preprocessUp.sourceSpan,
                  context = _this361$preprocessUp.context,
                  value = _this361$preprocessUp.value;

              var bindingId = "".concat(bindingCount++);
              var nameResolver = context === _this361.component ? _this361 : defaultResolver;

              var _convertPropertyBindi = _convertPropertyBinding(nameResolver, variable(_this361.getOutputVar(context)), value, bindingId, BindingForm.General),
                  stmts = _convertPropertyBindi.stmts,
                  currValExpr = _convertPropertyBindi.currValExpr;

              stmts.push(new ExpressionStatement(currValExpr));

              (_viewStmts = viewStmts).push.apply(_viewStmts, _toConsumableArray(stmts.map(function (stmt) {
                return applySourceSpanToStatementIfNeeded(stmt, sourceSpan);
              })));
            });
            this.actions.forEach(function (_ref91) {
              var _viewStmts2;

              var sourceSpan = _ref91.sourceSpan,
                  context = _ref91.context,
                  value = _ref91.value;
              var bindingId = "".concat(bindingCount++);
              var nameResolver = context === _this361.component ? _this361 : defaultResolver;

              var _convertActionBinding = convertActionBinding(nameResolver, variable(_this361.getOutputVar(context)), value, bindingId),
                  stmts = _convertActionBinding.stmts;

              (_viewStmts2 = viewStmts).push.apply(_viewStmts2, _toConsumableArray(stmts.map(function (stmt) {
                return applySourceSpanToStatementIfNeeded(stmt, sourceSpan);
              })));
            });

            if (this.guards.length) {
              var guardExpression = undefined;

              var _iterator33 = _createForOfIteratorHelper(this.guards),
                  _step33;

              try {
                for (_iterator33.s(); !(_step33 = _iterator33.n()).done;) {
                  var guard = _step33.value;

                  var _this$preprocessUpdat = this.preprocessUpdateExpression(guard.expression),
                      context = _this$preprocessUpdat.context,
                      value = _this$preprocessUpdat.value;

                  var bindingId = "".concat(bindingCount++);
                  var nameResolver = context === this.component ? this : defaultResolver; // We only support support simple expressions and ignore others as they
                  // are unlikely to affect type narrowing.

                  var _convertPropertyBindi2 = _convertPropertyBinding(nameResolver, variable(this.getOutputVar(context)), value, bindingId, BindingForm.TrySimple),
                      stmts = _convertPropertyBindi2.stmts,
                      currValExpr = _convertPropertyBindi2.currValExpr;

                  if (stmts.length == 0) {
                    var guardClause = guard.useIf ? currValExpr : this.ctx.importExpr(guard.guard).callFn([currValExpr]);
                    guardExpression = guardExpression ? guardExpression.and(guardClause) : guardClause;
                  }
                }
              } catch (err) {
                _iterator33.e(err);
              } finally {
                _iterator33.f();
              }

              if (guardExpression) {
                viewStmts = [new IfStmt(guardExpression, viewStmts)];
              }
            }

            var viewName = "_View_".concat(componentId, "_").concat(this.embeddedViewIndex);
            var viewFactory = new DeclareFunctionStmt(viewName, [], viewStmts);
            targetStatements.push(viewFactory);
            return targetStatements;
          }
        }, {
          key: "visitBoundText",
          value: function visitBoundText(ast, context) {
            var _this362 = this;

            var astWithSource = ast.value;
            var inter = astWithSource.ast;
            inter.expressions.forEach(function (expr) {
              return _this362.updates.push({
                context: _this362.component,
                value: expr,
                sourceSpan: ast.sourceSpan
              });
            });
          }
        }, {
          key: "visitEmbeddedTemplate",
          value: function visitEmbeddedTemplate(ast, context) {
            this.visitElementOrTemplate(ast); // Note: The old view compiler used to use an `any` type
            // for the context in any embedded view.
            // We keep this behaivor behind a flag for now.

            if (this.options.fullTemplateTypeCheck) {
              // Find any applicable type guards. For example, NgIf has a type guard on ngIf
              // (see NgIf.ngIfTypeGuard) that can be used to indicate that a template is only
              // stamped out if ngIf is truthy so any bindings in the template can assume that,
              // if a nullable type is used for ngIf, that expression is not null or undefined.
              var guards = this.getTypeGuardExpressions(ast);
              var childVisitor = this.viewBuilderFactory(this, guards);
              this.children.push(childVisitor);
              childVisitor.visitAll(ast.variables, ast.children);
            }
          }
        }, {
          key: "visitElement",
          value: function visitElement(ast, context) {
            var _this363 = this;

            this.visitElementOrTemplate(ast);
            var inputDefs = [];
            var updateRendererExpressions = [];
            var outputDefs = [];
            ast.inputs.forEach(function (inputAst) {
              _this363.updates.push({
                context: _this363.component,
                value: inputAst.value,
                sourceSpan: inputAst.sourceSpan
              });
            });
            templateVisitAll(this, ast.children);
          }
        }, {
          key: "visitElementOrTemplate",
          value: function visitElementOrTemplate(ast) {
            var _this364 = this;

            ast.directives.forEach(function (dirAst) {
              _this364.visitDirective(dirAst);
            });
            ast.references.forEach(function (ref) {
              var outputVarType = null; // Note: The old view compiler used to use an `any` type
              // for directives exposed via `exportAs`.
              // We keep this behaivor behind a flag for now.

              if (ref.value && ref.value.identifier && _this364.options.fullTemplateTypeCheck) {
                outputVarType = ref.value.identifier.reference;
              } else {
                outputVarType = BuiltinTypeName.Dynamic;
              }

              _this364.refOutputVars.set(ref.name, outputVarType);
            });
            ast.outputs.forEach(function (outputAst) {
              _this364.actions.push({
                context: _this364.component,
                value: outputAst.handler,
                sourceSpan: outputAst.sourceSpan
              });
            });
          }
        }, {
          key: "visitDirective",
          value: function visitDirective(dirAst) {
            var _this365 = this;

            var dirType = dirAst.directive.type.reference;
            dirAst.inputs.forEach(function (input) {
              return _this365.updates.push({
                context: _this365.component,
                value: input.value,
                sourceSpan: input.sourceSpan
              });
            }); // Note: The old view compiler used to use an `any` type
            // for expressions in host properties / events.
            // We keep this behaivor behind a flag for now.

            if (this.options.fullTemplateTypeCheck) {
              dirAst.hostProperties.forEach(function (inputAst) {
                return _this365.updates.push({
                  context: dirType,
                  value: inputAst.value,
                  sourceSpan: inputAst.sourceSpan
                });
              });
              dirAst.hostEvents.forEach(function (hostEventAst) {
                return _this365.actions.push({
                  context: dirType,
                  value: hostEventAst.handler,
                  sourceSpan: hostEventAst.sourceSpan
                });
              });
            }
          }
        }, {
          key: "notifyImplicitReceiverUse",
          value: function notifyImplicitReceiverUse() {}
        }, {
          key: "getLocal",
          value: function getLocal(name) {
            if (name == EventHandlerVars.event.name) {
              return variable(this.getOutputVar(BuiltinTypeName.Dynamic));
            }

            for (var currBuilder = this; currBuilder; currBuilder = currBuilder.parent) {
              var outputVarType = void 0; // check references

              outputVarType = currBuilder.refOutputVars.get(name);

              if (outputVarType == null) {
                // check variables
                var varAst = currBuilder.variables.find(function (varAst) {
                  return varAst.name === name;
                });

                if (varAst) {
                  outputVarType = BuiltinTypeName.Dynamic;
                }
              }

              if (outputVarType != null) {
                return variable(this.getOutputVar(outputVarType));
              }
            }

            return null;
          }
        }, {
          key: "pipeOutputVar",
          value: function pipeOutputVar(name) {
            var pipe = this.pipes.get(name);

            if (!pipe) {
              throw new Error("Illegal State: Could not find pipe ".concat(name, " in template of ").concat(this.component));
            }

            return this.getOutputVar(pipe);
          }
        }, {
          key: "preprocessUpdateExpression",
          value: function preprocessUpdateExpression(expression) {
            var _this366 = this;

            return {
              sourceSpan: expression.sourceSpan,
              context: expression.context,
              value: convertPropertyBindingBuiltins({
                createLiteralArrayConverter: function createLiteralArrayConverter(argCount) {
                  return function (args) {
                    var arr = literalArr(args); // Note: The old view compiler used to use an `any` type
                    // for arrays.

                    return _this366.options.fullTemplateTypeCheck ? arr : arr.cast(DYNAMIC_TYPE);
                  };
                },
                createLiteralMapConverter: function createLiteralMapConverter(keys) {
                  return function (values) {
                    var entries = keys.map(function (k, i) {
                      return {
                        key: k.key,
                        value: values[i],
                        quoted: k.quoted
                      };
                    });
                    var map = literalMap(entries); // Note: The old view compiler used to use an `any` type
                    // for maps.

                    return _this366.options.fullTemplateTypeCheck ? map : map.cast(DYNAMIC_TYPE);
                  };
                },
                createPipeConverter: function createPipeConverter(name, argCount) {
                  return function (args) {
                    // Note: The old view compiler used to use an `any` type
                    // for pipes.
                    var pipeExpr = _this366.options.fullTemplateTypeCheck ? variable(_this366.pipeOutputVar(name)) : variable(_this366.getOutputVar(BuiltinTypeName.Dynamic));
                    return pipeExpr.callMethod('transform', args);
                  };
                }
              }, expression.value)
            };
          }
        }, {
          key: "visitNgContent",
          value: function visitNgContent(ast, context) {}
        }, {
          key: "visitText",
          value: function visitText(ast, context) {}
        }, {
          key: "visitDirectiveProperty",
          value: function visitDirectiveProperty(ast, context) {}
        }, {
          key: "visitReference",
          value: function visitReference(ast, context) {}
        }, {
          key: "visitVariable",
          value: function visitVariable(ast, context) {}
        }, {
          key: "visitEvent",
          value: function visitEvent(ast, context) {}
        }, {
          key: "visitElementProperty",
          value: function visitElementProperty(ast, context) {}
        }, {
          key: "visitAttr",
          value: function visitAttr(ast, context) {}
        }]);

        return ViewBuilder;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var CLASS_ATTR$1 = 'class';
      var STYLE_ATTR = 'style';
      var IMPLICIT_TEMPLATE_VAR = '\$implicit';

      var ViewCompileResult = function ViewCompileResult(viewClassVar, rendererTypeVar) {
        _classCallCheck2(this, ViewCompileResult);

        this.viewClassVar = viewClassVar;
        this.rendererTypeVar = rendererTypeVar;
      };

      var ViewCompiler = /*#__PURE__*/function () {
        function ViewCompiler(_reflector) {
          _classCallCheck2(this, ViewCompiler);

          this._reflector = _reflector;
        }

        _createClass2(ViewCompiler, [{
          key: "compileComponent",
          value: function compileComponent(outputCtx, component, template, styles, usedPipes) {
            var _this367 = this,
                _outputCtx$statements;

            var embeddedViewCount = 0;
            var renderComponentVarName = undefined;

            if (!component.isHost) {
              var _template2 = component.template;
              var customRenderData = [];

              if (_template2.animations && _template2.animations.length) {
                customRenderData.push(new LiteralMapEntry('animation', convertValueToOutputAst(outputCtx, _template2.animations), true));
              }

              var renderComponentVar = variable(rendererTypeName(component.type.reference));
              renderComponentVarName = renderComponentVar.name;
              outputCtx.statements.push(renderComponentVar.set(importExpr(Identifiers.createRendererType2).callFn([new LiteralMapExpr([new LiteralMapEntry('encapsulation', literal(_template2.encapsulation), false), new LiteralMapEntry('styles', styles, false), new LiteralMapEntry('data', new LiteralMapExpr(customRenderData), false)])])).toDeclStmt(importType(Identifiers.RendererType2), [StmtModifier.Final, StmtModifier.Exported]));
            }

            var viewBuilderFactory = function viewBuilderFactory(parent) {
              var embeddedViewIndex = embeddedViewCount++;
              return new ViewBuilder$1(_this367._reflector, outputCtx, parent, component, embeddedViewIndex, usedPipes, viewBuilderFactory);
            };

            var visitor = viewBuilderFactory(null);
            visitor.visitAll([], template);

            (_outputCtx$statements = outputCtx.statements).push.apply(_outputCtx$statements, _toConsumableArray(visitor.build()));

            return new ViewCompileResult(visitor.viewName, renderComponentVarName);
          }
        }]);

        return ViewCompiler;
      }();

      var LOG_VAR$1 = variable('_l');
      var VIEW_VAR = variable('_v');
      var CHECK_VAR = variable('_ck');
      var COMP_VAR = variable('_co');
      var EVENT_NAME_VAR = variable('en');
      var ALLOW_DEFAULT_VAR = variable("ad");

      var ViewBuilder$1 = /*#__PURE__*/function () {
        function ViewBuilder$1(reflector, outputCtx, parent, component, embeddedViewIndex, usedPipes, viewBuilderFactory) {
          _classCallCheck2(this, ViewBuilder$1);

          this.reflector = reflector;
          this.outputCtx = outputCtx;
          this.parent = parent;
          this.component = component;
          this.embeddedViewIndex = embeddedViewIndex;
          this.usedPipes = usedPipes;
          this.viewBuilderFactory = viewBuilderFactory;
          this.nodes = [];
          this.purePipeNodeIndices = Object.create(null); // Need Object.create so that we don't have builtin values...

          this.refNodeIndices = Object.create(null);
          this.variables = [];
          this.children = []; // TODO(tbosch): The old view compiler used to use an `any` type
          // for the context in any embedded view. We keep this behaivor for now
          // to be able to introduce the new view compiler without too many errors.

          this.compType = this.embeddedViewIndex > 0 ? DYNAMIC_TYPE : expressionType(outputCtx.importExpr(this.component.type.reference));
          this.viewName = viewClassName(this.component.type.reference, this.embeddedViewIndex);
        }

        _createClass2(ViewBuilder$1, [{
          key: "visitAll",
          value: function visitAll(variables, astNodes) {
            var _this368 = this;

            this.variables = variables; // create the pipes for the pure pipes immediately, so that we know their indices.

            if (!this.parent) {
              this.usedPipes.forEach(function (pipe) {
                if (pipe.pure) {
                  _this368.purePipeNodeIndices[pipe.name] = _this368._createPipe(null, pipe);
                }
              });
            }

            if (!this.parent) {
              this.component.viewQueries.forEach(function (query, queryIndex) {
                // Note: queries start with id 1 so we can use the number in a Bloom filter!
                var queryId = queryIndex + 1;
                var bindingType = query.first ? 0
                /* First */
                : 1
                /* All */
                ;
                var flags = 134217728
                /* TypeViewQuery */
                | calcQueryFlags(query);

                _this368.nodes.push(function () {
                  return {
                    sourceSpan: null,
                    nodeFlags: flags,
                    nodeDef: importExpr(Identifiers.queryDef).callFn([literal(flags), literal(queryId), new LiteralMapExpr([new LiteralMapEntry(query.propertyName, literal(bindingType), false)])])
                  };
                });
              });
            }

            templateVisitAll(this, astNodes);

            if (this.parent && (astNodes.length === 0 || needsAdditionalRootNode(astNodes))) {
              // if the view is an embedded view, then we need to add an additional root node in some cases
              this.nodes.push(function () {
                return {
                  sourceSpan: null,
                  nodeFlags: 1
                  /* TypeElement */
                  ,
                  nodeDef: importExpr(Identifiers.anchorDef).callFn([literal(0
                  /* None */
                  ), NULL_EXPR, NULL_EXPR, literal(0)])
                };
              });
            }
          }
        }, {
          key: "build",
          value: function build() {
            var targetStatements = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
            this.children.forEach(function (child) {
              return child.build(targetStatements);
            });

            var _this$_createNodeExpr = this._createNodeExpressions(),
                updateRendererStmts = _this$_createNodeExpr.updateRendererStmts,
                updateDirectivesStmts = _this$_createNodeExpr.updateDirectivesStmts,
                nodeDefExprs = _this$_createNodeExpr.nodeDefExprs;

            var updateRendererFn = this._createUpdateFn(updateRendererStmts);

            var updateDirectivesFn = this._createUpdateFn(updateDirectivesStmts);

            var viewFlags = 0
            /* None */
            ;

            if (!this.parent && this.component.changeDetection === ChangeDetectionStrategy.OnPush) {
              viewFlags |= 2
              /* OnPush */
              ;
            }

            var viewFactory = new DeclareFunctionStmt(this.viewName, [new FnParam(LOG_VAR$1.name)], [new ReturnStatement(importExpr(Identifiers.viewDef).callFn([literal(viewFlags), literalArr(nodeDefExprs), updateDirectivesFn, updateRendererFn]))], importType(Identifiers.ViewDefinition), this.embeddedViewIndex === 0 ? [StmtModifier.Exported] : []);
            targetStatements.push(viewFactory);
            return targetStatements;
          }
        }, {
          key: "_createUpdateFn",
          value: function _createUpdateFn(updateStmts) {
            var updateFn;

            if (updateStmts.length > 0) {
              var preStmts = [];

              if (!this.component.isHost && findReadVarNames(updateStmts).has(COMP_VAR.name)) {
                preStmts.push(COMP_VAR.set(VIEW_VAR.prop('component')).toDeclStmt(this.compType));
              }

              updateFn = fn([new FnParam(CHECK_VAR.name, INFERRED_TYPE), new FnParam(VIEW_VAR.name, INFERRED_TYPE)], [].concat(preStmts, _toConsumableArray(updateStmts)), INFERRED_TYPE);
            } else {
              updateFn = NULL_EXPR;
            }

            return updateFn;
          }
        }, {
          key: "visitNgContent",
          value: function visitNgContent(ast, context) {
            // ngContentDef(ngContentIndex: number, index: number): NodeDef;
            this.nodes.push(function () {
              return {
                sourceSpan: ast.sourceSpan,
                nodeFlags: 8
                /* TypeNgContent */
                ,
                nodeDef: importExpr(Identifiers.ngContentDef).callFn([literal(ast.ngContentIndex), literal(ast.index)])
              };
            });
          }
        }, {
          key: "visitText",
          value: function visitText(ast, context) {
            // Static text nodes have no check function
            var checkIndex = -1;
            this.nodes.push(function () {
              return {
                sourceSpan: ast.sourceSpan,
                nodeFlags: 2
                /* TypeText */
                ,
                nodeDef: importExpr(Identifiers.textDef).callFn([literal(checkIndex), literal(ast.ngContentIndex), literalArr([literal(ast.value)])])
              };
            });
          }
        }, {
          key: "visitBoundText",
          value: function visitBoundText(ast, context) {
            var _this369 = this;

            var nodeIndex = this.nodes.length; // reserve the space in the nodeDefs array

            this.nodes.push(null);
            var astWithSource = ast.value;
            var inter = astWithSource.ast;
            var updateRendererExpressions = inter.expressions.map(function (expr, bindingIndex) {
              return _this369._preprocessUpdateExpression({
                nodeIndex: nodeIndex,
                bindingIndex: bindingIndex,
                sourceSpan: ast.sourceSpan,
                context: COMP_VAR,
                value: expr
              });
            }); // Check index is the same as the node index during compilation
            // They might only differ at runtime

            var checkIndex = nodeIndex;

            this.nodes[nodeIndex] = function () {
              return {
                sourceSpan: ast.sourceSpan,
                nodeFlags: 2
                /* TypeText */
                ,
                nodeDef: importExpr(Identifiers.textDef).callFn([literal(checkIndex), literal(ast.ngContentIndex), literalArr(inter.strings.map(function (s) {
                  return literal(s);
                }))]),
                updateRenderer: updateRendererExpressions
              };
            };
          }
        }, {
          key: "visitEmbeddedTemplate",
          value: function visitEmbeddedTemplate(ast, context) {
            var _this370 = this;

            var nodeIndex = this.nodes.length; // reserve the space in the nodeDefs array

            this.nodes.push(null);

            var _this$_visitElementOr = this._visitElementOrTemplate(nodeIndex, ast),
                flags = _this$_visitElementOr.flags,
                queryMatchesExpr = _this$_visitElementOr.queryMatchesExpr,
                hostEvents = _this$_visitElementOr.hostEvents;

            var childVisitor = this.viewBuilderFactory(this);
            this.children.push(childVisitor);
            childVisitor.visitAll(ast.variables, ast.children);
            var childCount = this.nodes.length - nodeIndex - 1; // anchorDef(
            //   flags: NodeFlags, matchedQueries: [string, QueryValueType][], ngContentIndex: number,
            //   childCount: number, handleEventFn?: ElementHandleEventFn, templateFactory?:
            //   ViewDefinitionFactory): NodeDef;

            this.nodes[nodeIndex] = function () {
              return {
                sourceSpan: ast.sourceSpan,
                nodeFlags: 1
                /* TypeElement */
                | flags,
                nodeDef: importExpr(Identifiers.anchorDef).callFn([literal(flags), queryMatchesExpr, literal(ast.ngContentIndex), literal(childCount), _this370._createElementHandleEventFn(nodeIndex, hostEvents), variable(childVisitor.viewName)])
              };
            };
          }
        }, {
          key: "visitElement",
          value: function visitElement(ast, context) {
            var _this371 = this;

            var nodeIndex = this.nodes.length; // reserve the space in the nodeDefs array so we can add children

            this.nodes.push(null); // Using a null element name creates an anchor.

            var elName = isNgContainer(ast.name) ? null : ast.name;

            var _this$_visitElementOr2 = this._visitElementOrTemplate(nodeIndex, ast),
                flags = _this$_visitElementOr2.flags,
                usedEvents = _this$_visitElementOr2.usedEvents,
                queryMatchesExpr = _this$_visitElementOr2.queryMatchesExpr,
                dirHostBindings = _this$_visitElementOr2.hostBindings,
                hostEvents = _this$_visitElementOr2.hostEvents;

            var inputDefs = [];
            var updateRendererExpressions = [];
            var outputDefs = [];

            if (elName) {
              var hostBindings = ast.inputs.map(function (inputAst) {
                return {
                  context: COMP_VAR,
                  inputAst: inputAst,
                  dirAst: null
                };
              }).concat(dirHostBindings);

              if (hostBindings.length) {
                updateRendererExpressions = hostBindings.map(function (hostBinding, bindingIndex) {
                  return _this371._preprocessUpdateExpression({
                    context: hostBinding.context,
                    nodeIndex: nodeIndex,
                    bindingIndex: bindingIndex,
                    sourceSpan: hostBinding.inputAst.sourceSpan,
                    value: hostBinding.inputAst.value
                  });
                });
                inputDefs = hostBindings.map(function (hostBinding) {
                  return elementBindingDef(hostBinding.inputAst, hostBinding.dirAst);
                });
              }

              outputDefs = usedEvents.map(function (_ref92) {
                var _ref93 = _slicedToArray(_ref92, 2),
                    target = _ref93[0],
                    eventName = _ref93[1];

                return literalArr([literal(target), literal(eventName)]);
              });
            }

            templateVisitAll(this, ast.children);
            var childCount = this.nodes.length - nodeIndex - 1;
            var compAst = ast.directives.find(function (dirAst) {
              return dirAst.directive.isComponent;
            });
            var compRendererType = NULL_EXPR;
            var compView = NULL_EXPR;

            if (compAst) {
              compView = this.outputCtx.importExpr(compAst.directive.componentViewType);
              compRendererType = this.outputCtx.importExpr(compAst.directive.rendererType);
            } // Check index is the same as the node index during compilation
            // They might only differ at runtime


            var checkIndex = nodeIndex;

            this.nodes[nodeIndex] = function () {
              return {
                sourceSpan: ast.sourceSpan,
                nodeFlags: 1
                /* TypeElement */
                | flags,
                nodeDef: importExpr(Identifiers.elementDef).callFn([literal(checkIndex), literal(flags), queryMatchesExpr, literal(ast.ngContentIndex), literal(childCount), literal(elName), elName ? fixedAttrsDef(ast) : NULL_EXPR, inputDefs.length ? literalArr(inputDefs) : NULL_EXPR, outputDefs.length ? literalArr(outputDefs) : NULL_EXPR, _this371._createElementHandleEventFn(nodeIndex, hostEvents), compView, compRendererType]),
                updateRenderer: updateRendererExpressions
              };
            };
          }
        }, {
          key: "_visitElementOrTemplate",
          value: function _visitElementOrTemplate(nodeIndex, ast) {
            var _this372 = this;

            var flags = 0
            /* None */
            ;

            if (ast.hasViewContainer) {
              flags |= 16777216
              /* EmbeddedViews */
              ;
            }

            var usedEvents = new Map();
            ast.outputs.forEach(function (event) {
              var _elementEventNameAndT = elementEventNameAndTarget(event, null),
                  name = _elementEventNameAndT.name,
                  target = _elementEventNameAndT.target;

              usedEvents.set(elementEventFullName(target, name), [target, name]);
            });
            ast.directives.forEach(function (dirAst) {
              dirAst.hostEvents.forEach(function (event) {
                var _elementEventNameAndT2 = elementEventNameAndTarget(event, dirAst),
                    name = _elementEventNameAndT2.name,
                    target = _elementEventNameAndT2.target;

                usedEvents.set(elementEventFullName(target, name), [target, name]);
              });
            });
            var hostBindings = [];
            var hostEvents = [];

            this._visitComponentFactoryResolverProvider(ast.directives);

            ast.providers.forEach(function (providerAst) {
              var dirAst = undefined;
              ast.directives.forEach(function (localDirAst) {
                if (localDirAst.directive.type.reference === tokenReference(providerAst.token)) {
                  dirAst = localDirAst;
                }
              });

              if (dirAst) {
                var _this372$_visitDirect = _this372._visitDirective(providerAst, dirAst, ast.references, ast.queryMatches, usedEvents),
                    dirHostBindings = _this372$_visitDirect.hostBindings,
                    dirHostEvents = _this372$_visitDirect.hostEvents;

                hostBindings.push.apply(hostBindings, _toConsumableArray(dirHostBindings));
                hostEvents.push.apply(hostEvents, _toConsumableArray(dirHostEvents));
              } else {
                _this372._visitProvider(providerAst, ast.queryMatches);
              }
            });
            var queryMatchExprs = [];
            ast.queryMatches.forEach(function (match) {
              var valueType = undefined;

              if (tokenReference(match.value) === _this372.reflector.resolveExternalReference(Identifiers.ElementRef)) {
                valueType = 0
                /* ElementRef */
                ;
              } else if (tokenReference(match.value) === _this372.reflector.resolveExternalReference(Identifiers.ViewContainerRef)) {
                valueType = 3
                /* ViewContainerRef */
                ;
              } else if (tokenReference(match.value) === _this372.reflector.resolveExternalReference(Identifiers.TemplateRef)) {
                valueType = 2
                /* TemplateRef */
                ;
              }

              if (valueType != null) {
                queryMatchExprs.push(literalArr([literal(match.queryId), literal(valueType)]));
              }
            });
            ast.references.forEach(function (ref) {
              var valueType = undefined;

              if (!ref.value) {
                valueType = 1
                /* RenderElement */
                ;
              } else if (tokenReference(ref.value) === _this372.reflector.resolveExternalReference(Identifiers.TemplateRef)) {
                valueType = 2
                /* TemplateRef */
                ;
              }

              if (valueType != null) {
                _this372.refNodeIndices[ref.name] = nodeIndex;
                queryMatchExprs.push(literalArr([literal(ref.name), literal(valueType)]));
              }
            });
            ast.outputs.forEach(function (outputAst) {
              hostEvents.push({
                context: COMP_VAR,
                eventAst: outputAst,
                dirAst: null
              });
            });
            return {
              flags: flags,
              usedEvents: Array.from(usedEvents.values()),
              queryMatchesExpr: queryMatchExprs.length ? literalArr(queryMatchExprs) : NULL_EXPR,
              hostBindings: hostBindings,
              hostEvents: hostEvents
            };
          }
        }, {
          key: "_visitDirective",
          value: function _visitDirective(providerAst, dirAst, refs, queryMatches, usedEvents) {
            var _this373 = this;

            var nodeIndex = this.nodes.length; // reserve the space in the nodeDefs array so we can add children

            this.nodes.push(null);
            dirAst.directive.queries.forEach(function (query, queryIndex) {
              var queryId = dirAst.contentQueryStartId + queryIndex;
              var flags = 67108864
              /* TypeContentQuery */
              | calcQueryFlags(query);
              var bindingType = query.first ? 0
              /* First */
              : 1
              /* All */
              ;

              _this373.nodes.push(function () {
                return {
                  sourceSpan: dirAst.sourceSpan,
                  nodeFlags: flags,
                  nodeDef: importExpr(Identifiers.queryDef).callFn([literal(flags), literal(queryId), new LiteralMapExpr([new LiteralMapEntry(query.propertyName, literal(bindingType), false)])])
                };
              });
            }); // Note: the operation below might also create new nodeDefs,
            // but we don't want them to be a child of a directive,
            // as they might be a provider/pipe on their own.
            // I.e. we only allow queries as children of directives nodes.

            var childCount = this.nodes.length - nodeIndex - 1;

            var _this$_visitProviderO = this._visitProviderOrDirective(providerAst, queryMatches),
                flags = _this$_visitProviderO.flags,
                queryMatchExprs = _this$_visitProviderO.queryMatchExprs,
                providerExpr = _this$_visitProviderO.providerExpr,
                depsExpr = _this$_visitProviderO.depsExpr;

            refs.forEach(function (ref) {
              if (ref.value && tokenReference(ref.value) === tokenReference(providerAst.token)) {
                _this373.refNodeIndices[ref.name] = nodeIndex;
                queryMatchExprs.push(literalArr([literal(ref.name), literal(4
                /* Provider */
                )]));
              }
            });

            if (dirAst.directive.isComponent) {
              flags |= 32768
              /* Component */
              ;
            }

            var inputDefs = dirAst.inputs.map(function (inputAst, inputIndex) {
              var mapValue = literalArr([literal(inputIndex), literal(inputAst.directiveName)]); // Note: it's important to not quote the key so that we can capture renames by minifiers!

              return new LiteralMapEntry(inputAst.directiveName, mapValue, false);
            });
            var outputDefs = [];
            var dirMeta = dirAst.directive;
            Object.keys(dirMeta.outputs).forEach(function (propName) {
              var eventName = dirMeta.outputs[propName];

              if (usedEvents.has(eventName)) {
                // Note: it's important to not quote the key so that we can capture renames by minifiers!
                outputDefs.push(new LiteralMapEntry(propName, literal(eventName), false));
              }
            });
            var updateDirectiveExpressions = [];

            if (dirAst.inputs.length || (flags & (262144
            /* DoCheck */
            | 65536
            /* OnInit */
            )) > 0) {
              updateDirectiveExpressions = dirAst.inputs.map(function (input, bindingIndex) {
                return _this373._preprocessUpdateExpression({
                  nodeIndex: nodeIndex,
                  bindingIndex: bindingIndex,
                  sourceSpan: input.sourceSpan,
                  context: COMP_VAR,
                  value: input.value
                });
              });
            }

            var dirContextExpr = importExpr(Identifiers.nodeValue).callFn([VIEW_VAR, literal(nodeIndex)]);
            var hostBindings = dirAst.hostProperties.map(function (inputAst) {
              return {
                context: dirContextExpr,
                dirAst: dirAst,
                inputAst: inputAst
              };
            });
            var hostEvents = dirAst.hostEvents.map(function (hostEventAst) {
              return {
                context: dirContextExpr,
                eventAst: hostEventAst,
                dirAst: dirAst
              };
            }); // Check index is the same as the node index during compilation
            // They might only differ at runtime

            var checkIndex = nodeIndex;

            this.nodes[nodeIndex] = function () {
              return {
                sourceSpan: dirAst.sourceSpan,
                nodeFlags: 16384
                /* TypeDirective */
                | flags,
                nodeDef: importExpr(Identifiers.directiveDef).callFn([literal(checkIndex), literal(flags), queryMatchExprs.length ? literalArr(queryMatchExprs) : NULL_EXPR, literal(childCount), providerExpr, depsExpr, inputDefs.length ? new LiteralMapExpr(inputDefs) : NULL_EXPR, outputDefs.length ? new LiteralMapExpr(outputDefs) : NULL_EXPR]),
                updateDirectives: updateDirectiveExpressions,
                directive: dirAst.directive.type
              };
            };

            return {
              hostBindings: hostBindings,
              hostEvents: hostEvents
            };
          }
        }, {
          key: "_visitProvider",
          value: function _visitProvider(providerAst, queryMatches) {
            this._addProviderNode(this._visitProviderOrDirective(providerAst, queryMatches));
          }
        }, {
          key: "_visitComponentFactoryResolverProvider",
          value: function _visitComponentFactoryResolverProvider(directives) {
            var componentDirMeta = directives.find(function (dirAst) {
              return dirAst.directive.isComponent;
            });

            if (componentDirMeta && componentDirMeta.directive.entryComponents.length) {
              var _componentFactoryReso = componentFactoryResolverProviderDef(this.reflector, this.outputCtx, 8192
              /* PrivateProvider */
              , componentDirMeta.directive.entryComponents),
                  providerExpr = _componentFactoryReso.providerExpr,
                  depsExpr = _componentFactoryReso.depsExpr,
                  flags = _componentFactoryReso.flags,
                  _tokenExpr = _componentFactoryReso.tokenExpr;

              this._addProviderNode({
                providerExpr: providerExpr,
                depsExpr: depsExpr,
                flags: flags,
                tokenExpr: _tokenExpr,
                queryMatchExprs: [],
                sourceSpan: componentDirMeta.sourceSpan
              });
            }
          }
        }, {
          key: "_addProviderNode",
          value: function _addProviderNode(data) {
            // providerDef(
            //   flags: NodeFlags, matchedQueries: [string, QueryValueType][], token:any,
            //   value: any, deps: ([DepFlags, any] | any)[]): NodeDef;
            this.nodes.push(function () {
              return {
                sourceSpan: data.sourceSpan,
                nodeFlags: data.flags,
                nodeDef: importExpr(Identifiers.providerDef).callFn([literal(data.flags), data.queryMatchExprs.length ? literalArr(data.queryMatchExprs) : NULL_EXPR, data.tokenExpr, data.providerExpr, data.depsExpr])
              };
            });
          }
        }, {
          key: "_visitProviderOrDirective",
          value: function _visitProviderOrDirective(providerAst, queryMatches) {
            var flags = 0
            /* None */
            ;
            var queryMatchExprs = [];
            queryMatches.forEach(function (match) {
              if (tokenReference(match.value) === tokenReference(providerAst.token)) {
                queryMatchExprs.push(literalArr([literal(match.queryId), literal(4
                /* Provider */
                )]));
              }
            });

            var _providerDef = providerDef(this.outputCtx, providerAst),
                providerExpr = _providerDef.providerExpr,
                depsExpr = _providerDef.depsExpr,
                providerFlags = _providerDef.flags,
                tokenExpr = _providerDef.tokenExpr;

            return {
              flags: flags | providerFlags,
              queryMatchExprs: queryMatchExprs,
              providerExpr: providerExpr,
              depsExpr: depsExpr,
              tokenExpr: tokenExpr,
              sourceSpan: providerAst.sourceSpan
            };
          }
        }, {
          key: "getLocal",
          value: function getLocal(name) {
            if (name == EventHandlerVars.event.name) {
              return EventHandlerVars.event;
            }

            var currViewExpr = VIEW_VAR;

            for (var currBuilder = this; currBuilder; currBuilder = currBuilder.parent, currViewExpr = currViewExpr.prop('parent').cast(DYNAMIC_TYPE)) {
              // check references
              var refNodeIndex = currBuilder.refNodeIndices[name];

              if (refNodeIndex != null) {
                return importExpr(Identifiers.nodeValue).callFn([currViewExpr, literal(refNodeIndex)]);
              } // check variables


              var varAst = currBuilder.variables.find(function (varAst) {
                return varAst.name === name;
              });

              if (varAst) {
                var varValue = varAst.value || IMPLICIT_TEMPLATE_VAR;
                return currViewExpr.prop('context').prop(varValue);
              }
            }

            return null;
          }
        }, {
          key: "notifyImplicitReceiverUse",
          value: function notifyImplicitReceiverUse() {// Not needed in View Engine as View Engine walks through the generated
            // expressions to figure out if the implicit receiver is used and needs
            // to be generated as part of the pre-update statements.
          }
        }, {
          key: "_createLiteralArrayConverter",
          value: function _createLiteralArrayConverter(sourceSpan, argCount) {
            if (argCount === 0) {
              var valueExpr = importExpr(Identifiers.EMPTY_ARRAY);
              return function () {
                return valueExpr;
              };
            }

            var checkIndex = this.nodes.length;
            this.nodes.push(function () {
              return {
                sourceSpan: sourceSpan,
                nodeFlags: 32
                /* TypePureArray */
                ,
                nodeDef: importExpr(Identifiers.pureArrayDef).callFn([literal(checkIndex), literal(argCount)])
              };
            });
            return function (args) {
              return callCheckStmt(checkIndex, args);
            };
          }
        }, {
          key: "_createLiteralMapConverter",
          value: function _createLiteralMapConverter(sourceSpan, keys) {
            if (keys.length === 0) {
              var valueExpr = importExpr(Identifiers.EMPTY_MAP);
              return function () {
                return valueExpr;
              };
            }

            var map = literalMap(keys.map(function (e, i) {
              return Object.assign(Object.assign({}, e), {
                value: literal(i)
              });
            }));
            var checkIndex = this.nodes.length;
            this.nodes.push(function () {
              return {
                sourceSpan: sourceSpan,
                nodeFlags: 64
                /* TypePureObject */
                ,
                nodeDef: importExpr(Identifiers.pureObjectDef).callFn([literal(checkIndex), map])
              };
            });
            return function (args) {
              return callCheckStmt(checkIndex, args);
            };
          }
        }, {
          key: "_createPipeConverter",
          value: function _createPipeConverter(expression, name, argCount) {
            var pipe = this.usedPipes.find(function (pipeSummary) {
              return pipeSummary.name === name;
            });

            if (pipe.pure) {
              var checkIndex = this.nodes.length;
              this.nodes.push(function () {
                return {
                  sourceSpan: expression.sourceSpan,
                  nodeFlags: 128
                  /* TypePurePipe */
                  ,
                  nodeDef: importExpr(Identifiers.purePipeDef).callFn([literal(checkIndex), literal(argCount)])
                };
              }); // find underlying pipe in the component view

              var compViewExpr = VIEW_VAR;
              var compBuilder = this;

              while (compBuilder.parent) {
                compBuilder = compBuilder.parent;
                compViewExpr = compViewExpr.prop('parent').cast(DYNAMIC_TYPE);
              }

              var pipeNodeIndex = compBuilder.purePipeNodeIndices[name];
              var pipeValueExpr = importExpr(Identifiers.nodeValue).callFn([compViewExpr, literal(pipeNodeIndex)]);
              return function (args) {
                return callUnwrapValue(expression.nodeIndex, expression.bindingIndex, callCheckStmt(checkIndex, [pipeValueExpr].concat(args)));
              };
            } else {
              var nodeIndex = this._createPipe(expression.sourceSpan, pipe);

              var nodeValueExpr = importExpr(Identifiers.nodeValue).callFn([VIEW_VAR, literal(nodeIndex)]);
              return function (args) {
                return callUnwrapValue(expression.nodeIndex, expression.bindingIndex, nodeValueExpr.callMethod('transform', args));
              };
            }
          }
        }, {
          key: "_createPipe",
          value: function _createPipe(sourceSpan, pipe) {
            var _this374 = this;

            var nodeIndex = this.nodes.length;
            var flags = 0
            /* None */
            ;
            pipe.type.lifecycleHooks.forEach(function (lifecycleHook) {
              // for pipes, we only support ngOnDestroy
              if (lifecycleHook === LifecycleHooks.OnDestroy) {
                flags |= lifecycleHookToNodeFlag(lifecycleHook);
              }
            });
            var depExprs = pipe.type.diDeps.map(function (diDep) {
              return depDef(_this374.outputCtx, diDep);
            }); // function pipeDef(
            //   flags: NodeFlags, ctor: any, deps: ([DepFlags, any] | any)[]): NodeDef

            this.nodes.push(function () {
              return {
                sourceSpan: sourceSpan,
                nodeFlags: 16
                /* TypePipe */
                ,
                nodeDef: importExpr(Identifiers.pipeDef).callFn([literal(flags), _this374.outputCtx.importExpr(pipe.type.reference), literalArr(depExprs)])
              };
            });
            return nodeIndex;
          }
          /**
           * For the AST in `UpdateExpression.value`:
           * - create nodes for pipes, literal arrays and, literal maps,
           * - update the AST to replace pipes, literal arrays and, literal maps with calls to check fn.
           *
           * WARNING: This might create new nodeDefs (for pipes and literal arrays and literal maps)!
           */

        }, {
          key: "_preprocessUpdateExpression",
          value: function _preprocessUpdateExpression(expression) {
            var _this375 = this;

            return {
              nodeIndex: expression.nodeIndex,
              bindingIndex: expression.bindingIndex,
              sourceSpan: expression.sourceSpan,
              context: expression.context,
              value: convertPropertyBindingBuiltins({
                createLiteralArrayConverter: function createLiteralArrayConverter(argCount) {
                  return _this375._createLiteralArrayConverter(expression.sourceSpan, argCount);
                },
                createLiteralMapConverter: function createLiteralMapConverter(keys) {
                  return _this375._createLiteralMapConverter(expression.sourceSpan, keys);
                },
                createPipeConverter: function createPipeConverter(name, argCount) {
                  return _this375._createPipeConverter(expression, name, argCount);
                }
              }, expression.value)
            };
          }
        }, {
          key: "_createNodeExpressions",
          value: function _createNodeExpressions() {
            var self = this;
            var updateBindingCount = 0;
            var updateRendererStmts = [];
            var updateDirectivesStmts = [];
            var nodeDefExprs = this.nodes.map(function (factory, nodeIndex) {
              var _factory = factory(),
                  nodeDef = _factory.nodeDef,
                  nodeFlags = _factory.nodeFlags,
                  updateDirectives = _factory.updateDirectives,
                  updateRenderer = _factory.updateRenderer,
                  sourceSpan = _factory.sourceSpan;

              if (updateRenderer) {
                updateRendererStmts.push.apply(updateRendererStmts, _toConsumableArray(createUpdateStatements(nodeIndex, sourceSpan, updateRenderer, false)));
              }

              if (updateDirectives) {
                updateDirectivesStmts.push.apply(updateDirectivesStmts, _toConsumableArray(createUpdateStatements(nodeIndex, sourceSpan, updateDirectives, (nodeFlags & (262144
                /* DoCheck */
                | 65536
                /* OnInit */
                )) > 0)));
              } // We use a comma expression to call the log function before
              // the nodeDef function, but still use the result of the nodeDef function
              // as the value.
              // Note: We only add the logger to elements / text nodes,
              // so we don't generate too much code.


              var logWithNodeDef = nodeFlags & 3
              /* CatRenderNode */
              ? new CommaExpr([LOG_VAR$1.callFn([]).callFn([]), nodeDef]) : nodeDef;
              return applySourceSpanToExpressionIfNeeded(logWithNodeDef, sourceSpan);
            });
            return {
              updateRendererStmts: updateRendererStmts,
              updateDirectivesStmts: updateDirectivesStmts,
              nodeDefExprs: nodeDefExprs
            };

            function createUpdateStatements(nodeIndex, sourceSpan, expressions, allowEmptyExprs) {
              var updateStmts = [];
              var exprs = expressions.map(function (_ref94) {
                var sourceSpan = _ref94.sourceSpan,
                    context = _ref94.context,
                    value = _ref94.value;
                var bindingId = "".concat(updateBindingCount++);
                var nameResolver = context === COMP_VAR ? self : null;

                var _convertPropertyBindi3 = _convertPropertyBinding(nameResolver, context, value, bindingId, BindingForm.General),
                    stmts = _convertPropertyBindi3.stmts,
                    currValExpr = _convertPropertyBindi3.currValExpr;

                updateStmts.push.apply(updateStmts, _toConsumableArray(stmts.map(function (stmt) {
                  return applySourceSpanToStatementIfNeeded(stmt, sourceSpan);
                })));
                return applySourceSpanToExpressionIfNeeded(currValExpr, sourceSpan);
              });

              if (expressions.length || allowEmptyExprs) {
                updateStmts.push(applySourceSpanToStatementIfNeeded(callCheckStmt(nodeIndex, exprs).toStmt(), sourceSpan));
              }

              return updateStmts;
            }
          }
        }, {
          key: "_createElementHandleEventFn",
          value: function _createElementHandleEventFn(nodeIndex, handlers) {
            var _this376 = this;

            var handleEventStmts = [];
            var handleEventBindingCount = 0;
            handlers.forEach(function (_ref95) {
              var context = _ref95.context,
                  eventAst = _ref95.eventAst,
                  dirAst = _ref95.dirAst;
              var bindingId = "".concat(handleEventBindingCount++);
              var nameResolver = context === COMP_VAR ? _this376 : null;

              var _convertActionBinding2 = convertActionBinding(nameResolver, context, eventAst.handler, bindingId),
                  stmts = _convertActionBinding2.stmts,
                  allowDefault = _convertActionBinding2.allowDefault;

              var trueStmts = stmts;

              if (allowDefault) {
                trueStmts.push(ALLOW_DEFAULT_VAR.set(allowDefault.and(ALLOW_DEFAULT_VAR)).toStmt());
              }

              var _elementEventNameAndT3 = elementEventNameAndTarget(eventAst, dirAst),
                  eventTarget = _elementEventNameAndT3.target,
                  eventName = _elementEventNameAndT3.name;

              var fullEventName = elementEventFullName(eventTarget, eventName);
              handleEventStmts.push(applySourceSpanToStatementIfNeeded(new IfStmt(literal(fullEventName).identical(EVENT_NAME_VAR), trueStmts), eventAst.sourceSpan));
            });
            var handleEventFn;

            if (handleEventStmts.length > 0) {
              var preStmts = [ALLOW_DEFAULT_VAR.set(literal(true)).toDeclStmt(BOOL_TYPE)];

              if (!this.component.isHost && findReadVarNames(handleEventStmts).has(COMP_VAR.name)) {
                preStmts.push(COMP_VAR.set(VIEW_VAR.prop('component')).toDeclStmt(this.compType));
              }

              handleEventFn = fn([new FnParam(VIEW_VAR.name, INFERRED_TYPE), new FnParam(EVENT_NAME_VAR.name, INFERRED_TYPE), new FnParam(EventHandlerVars.event.name, INFERRED_TYPE)], [].concat(preStmts, handleEventStmts, [new ReturnStatement(ALLOW_DEFAULT_VAR)]), INFERRED_TYPE);
            } else {
              handleEventFn = NULL_EXPR;
            }

            return handleEventFn;
          }
        }, {
          key: "visitDirective",
          value: function visitDirective(ast, context) {}
        }, {
          key: "visitDirectiveProperty",
          value: function visitDirectiveProperty(ast, context) {}
        }, {
          key: "visitReference",
          value: function visitReference(ast, context) {}
        }, {
          key: "visitVariable",
          value: function visitVariable(ast, context) {}
        }, {
          key: "visitEvent",
          value: function visitEvent(ast, context) {}
        }, {
          key: "visitElementProperty",
          value: function visitElementProperty(ast, context) {}
        }, {
          key: "visitAttr",
          value: function visitAttr(ast, context) {}
        }]);

        return ViewBuilder$1;
      }();

      function needsAdditionalRootNode(astNodes) {
        var lastAstNode = astNodes[astNodes.length - 1];

        if (lastAstNode instanceof EmbeddedTemplateAst) {
          return lastAstNode.hasViewContainer;
        }

        if (lastAstNode instanceof ElementAst) {
          if (isNgContainer(lastAstNode.name) && lastAstNode.children.length) {
            return needsAdditionalRootNode(lastAstNode.children);
          }

          return lastAstNode.hasViewContainer;
        }

        return lastAstNode instanceof NgContentAst;
      }

      function elementBindingDef(inputAst, dirAst) {
        var inputType = inputAst.type;

        switch (inputType) {
          case 1
          /* Attribute */
          :
            return literalArr([literal(1
            /* TypeElementAttribute */
            ), literal(inputAst.name), literal(inputAst.securityContext)]);

          case 0
          /* Property */
          :
            return literalArr([literal(8
            /* TypeProperty */
            ), literal(inputAst.name), literal(inputAst.securityContext)]);

          case 4
          /* Animation */
          :
            var bindingType = 8
            /* TypeProperty */
            | (dirAst && dirAst.directive.isComponent ? 32
            /* SyntheticHostProperty */
            : 16
            /* SyntheticProperty */
            );
            return literalArr([literal(bindingType), literal('@' + inputAst.name), literal(inputAst.securityContext)]);

          case 2
          /* Class */
          :
            return literalArr([literal(2
            /* TypeElementClass */
            ), literal(inputAst.name), NULL_EXPR]);

          case 3
          /* Style */
          :
            return literalArr([literal(4
            /* TypeElementStyle */
            ), literal(inputAst.name), literal(inputAst.unit)]);

          default:
            // This default case is not needed by TypeScript compiler, as the switch is exhaustive.
            // However Closure Compiler does not understand that and reports an error in typed mode.
            // The `throw new Error` below works around the problem, and the unexpected: never variable
            // makes sure tsc still checks this code is unreachable.
            var unexpected = inputType;
            throw new Error("unexpected ".concat(unexpected));
        }
      }

      function fixedAttrsDef(elementAst) {
        var mapResult = Object.create(null);
        elementAst.attrs.forEach(function (attrAst) {
          mapResult[attrAst.name] = attrAst.value;
        });
        elementAst.directives.forEach(function (dirAst) {
          Object.keys(dirAst.directive.hostAttributes).forEach(function (name) {
            var value = dirAst.directive.hostAttributes[name];
            var prevValue = mapResult[name];
            mapResult[name] = prevValue != null ? mergeAttributeValue(name, prevValue, value) : value;
          });
        }); // Note: We need to sort to get a defined output order
        // for tests and for caching generated artifacts...

        return literalArr(Object.keys(mapResult).sort().map(function (attrName) {
          return literalArr([literal(attrName), literal(mapResult[attrName])]);
        }));
      }

      function mergeAttributeValue(attrName, attrValue1, attrValue2) {
        if (attrName == CLASS_ATTR$1 || attrName == STYLE_ATTR) {
          return "".concat(attrValue1, " ").concat(attrValue2);
        } else {
          return attrValue2;
        }
      }

      function callCheckStmt(nodeIndex, exprs) {
        if (exprs.length > 10) {
          return CHECK_VAR.callFn([VIEW_VAR, literal(nodeIndex), literal(1
          /* Dynamic */
          ), literalArr(exprs)]);
        } else {
          return CHECK_VAR.callFn([VIEW_VAR, literal(nodeIndex), literal(0
          /* Inline */
          )].concat(_toConsumableArray(exprs)));
        }
      }

      function callUnwrapValue(nodeIndex, bindingIdx, expr) {
        return importExpr(Identifiers.unwrapValue).callFn([VIEW_VAR, literal(nodeIndex), literal(bindingIdx), expr]);
      }

      function elementEventNameAndTarget(eventAst, dirAst) {
        if (eventAst.isAnimation) {
          return {
            name: "@".concat(eventAst.name, ".").concat(eventAst.phase),
            target: dirAst && dirAst.directive.isComponent ? 'component' : null
          };
        } else {
          return eventAst;
        }
      }

      function calcQueryFlags(query) {
        var flags = 0
        /* None */
        ; // Note: We only make queries static that query for a single item and the user specifically
        // set the to be static. This is because of backwards compatibility with the old view compiler...

        if (query.first && query["static"]) {
          flags |= 268435456
          /* StaticQuery */
          ;
        } else {
          flags |= 536870912
          /* DynamicQuery */
          ;
        }

        if (query.emitDistinctChangesOnly) {
          flags |= -2147483648
          /* EmitDistinctChangesOnly */
          ;
        }

        return flags;
      }

      function elementEventFullName(target, name) {
        return target ? "".concat(target, ":").concat(name) : name;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A container for message extracted from the templates.
       */


      var MessageBundle = /*#__PURE__*/function () {
        function MessageBundle(_htmlParser, _implicitTags, _implicitAttrs) {
          var _locale = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;

          _classCallCheck2(this, MessageBundle);

          this._htmlParser = _htmlParser;
          this._implicitTags = _implicitTags;
          this._implicitAttrs = _implicitAttrs;
          this._locale = _locale;
          this._messages = [];
        }

        _createClass2(MessageBundle, [{
          key: "updateFromTemplate",
          value: function updateFromTemplate(html, url, interpolationConfig) {
            var _this$_messages;

            var htmlParserResult = this._htmlParser.parse(html, url, {
              tokenizeExpansionForms: true,
              interpolationConfig: interpolationConfig
            });

            if (htmlParserResult.errors.length) {
              return htmlParserResult.errors;
            }

            var i18nParserResult = extractMessages(htmlParserResult.rootNodes, interpolationConfig, this._implicitTags, this._implicitAttrs);

            if (i18nParserResult.errors.length) {
              return i18nParserResult.errors;
            }

            (_this$_messages = this._messages).push.apply(_this$_messages, _toConsumableArray(i18nParserResult.messages));

            return [];
          } // Return the message in the internal format
          // The public (serialized) format might be different, see the `write` method.

        }, {
          key: "getMessages",
          value: function getMessages() {
            return this._messages;
          }
        }, {
          key: "write",
          value: function write(serializer, filterSources) {
            var messages = {};
            var mapperVisitor = new MapPlaceholderNames(); // Deduplicate messages based on their ID

            this._messages.forEach(function (message) {
              var id = serializer.digest(message);

              if (!messages.hasOwnProperty(id)) {
                messages[id] = message;
              } else {
                var _messages$id$sources;

                (_messages$id$sources = messages[id].sources).push.apply(_messages$id$sources, _toConsumableArray(message.sources));
              }
            }); // Transform placeholder names using the serializer mapping


            var msgList = Object.keys(messages).map(function (id) {
              var mapper = serializer.createNameMapper(messages[id]);
              var src = messages[id];
              var nodes = mapper ? mapperVisitor.convert(src.nodes, mapper) : src.nodes;
              var transformedMessage = new Message(nodes, {}, {}, src.meaning, src.description, id);
              transformedMessage.sources = src.sources;

              if (filterSources) {
                transformedMessage.sources.forEach(function (source) {
                  return source.filePath = filterSources(source.filePath);
                });
              }

              return transformedMessage;
            });
            return serializer.write(msgList, this._locale);
          }
        }]);

        return MessageBundle;
      }(); // Transform an i18n AST by renaming the placeholder nodes with the given mapper


      var MapPlaceholderNames = /*#__PURE__*/function (_CloneVisitor) {
        _inherits2(MapPlaceholderNames, _CloneVisitor);

        var _super163 = _createSuper(MapPlaceholderNames);

        function MapPlaceholderNames() {
          _classCallCheck2(this, MapPlaceholderNames);

          return _super163.apply(this, arguments);
        }

        _createClass2(MapPlaceholderNames, [{
          key: "convert",
          value: function convert(nodes, mapper) {
            var _this377 = this;

            return mapper ? nodes.map(function (n) {
              return n.visit(_this377, mapper);
            }) : nodes;
          }
        }, {
          key: "visitTagPlaceholder",
          value: function visitTagPlaceholder(ph, mapper) {
            var _this378 = this;

            var startName = mapper.toPublicName(ph.startName);
            var closeName = ph.closeName ? mapper.toPublicName(ph.closeName) : ph.closeName;
            var children = ph.children.map(function (n) {
              return n.visit(_this378, mapper);
            });
            return new TagPlaceholder(ph.tag, ph.attrs, startName, closeName, children, ph.isVoid, ph.sourceSpan, ph.startSourceSpan, ph.endSourceSpan);
          }
        }, {
          key: "visitPlaceholder",
          value: function visitPlaceholder(ph, mapper) {
            return new Placeholder(ph.value, mapper.toPublicName(ph.name), ph.sourceSpan);
          }
        }, {
          key: "visitIcuPlaceholder",
          value: function visitIcuPlaceholder(ph, mapper) {
            return new IcuPlaceholder(ph.value, mapper.toPublicName(ph.name), ph.sourceSpan);
          }
        }]);

        return MapPlaceholderNames;
      }(CloneVisitor);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var GeneratedFile = /*#__PURE__*/function () {
        function GeneratedFile(srcFileUrl, genFileUrl, sourceOrStmts) {
          _classCallCheck2(this, GeneratedFile);

          this.srcFileUrl = srcFileUrl;
          this.genFileUrl = genFileUrl;

          if (typeof sourceOrStmts === 'string') {
            this.source = sourceOrStmts;
            this.stmts = null;
          } else {
            this.source = null;
            this.stmts = sourceOrStmts;
          }
        }

        _createClass2(GeneratedFile, [{
          key: "isEquivalent",
          value: function isEquivalent(other) {
            if (this.genFileUrl !== other.genFileUrl) {
              return false;
            }

            if (this.source) {
              return this.source === other.source;
            }

            if (other.stmts == null) {
              return false;
            } // Note: the constructor guarantees that if this.source is not filled,
            // then this.stmts is.


            return areAllEquivalent(this.stmts, other.stmts);
          }
        }]);

        return GeneratedFile;
      }();

      function toTypeScript(file) {
        var preamble = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';

        if (!file.stmts) {
          throw new Error("Illegal state: No stmts present on GeneratedFile ".concat(file.genFileUrl));
        }

        return new TypeScriptEmitter().emitStatements(file.genFileUrl, file.stmts, preamble);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function _listLazyRoutes(moduleMeta, reflector) {
        var allLazyRoutes = [];

        var _iterator34 = _createForOfIteratorHelper(moduleMeta.transitiveModule.providers),
            _step34;

        try {
          for (_iterator34.s(); !(_step34 = _iterator34.n()).done;) {
            var _step34$value = _step34.value,
                provider = _step34$value.provider,
                _module = _step34$value.module;

            if (tokenReference(provider.token) === reflector.ROUTES) {
              var loadChildren = _collectLoadChildren(provider.useValue);

              var _iterator35 = _createForOfIteratorHelper(loadChildren),
                  _step35;

              try {
                for (_iterator35.s(); !(_step35 = _iterator35.n()).done;) {
                  var route = _step35.value;
                  allLazyRoutes.push(parseLazyRoute(route, reflector, _module.reference));
                }
              } catch (err) {
                _iterator35.e(err);
              } finally {
                _iterator35.f();
              }
            }
          }
        } catch (err) {
          _iterator34.e(err);
        } finally {
          _iterator34.f();
        }

        return allLazyRoutes;
      }

      function _collectLoadChildren(routes) {
        var target = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];

        if (typeof routes === 'string') {
          target.push(routes);
        } else if (Array.isArray(routes)) {
          var _iterator36 = _createForOfIteratorHelper(routes),
              _step36;

          try {
            for (_iterator36.s(); !(_step36 = _iterator36.n()).done;) {
              var route = _step36.value;

              _collectLoadChildren(route, target);
            }
          } catch (err) {
            _iterator36.e(err);
          } finally {
            _iterator36.f();
          }
        } else if (routes.loadChildren) {
          _collectLoadChildren(routes.loadChildren, target);
        } else if (routes.children) {
          _collectLoadChildren(routes.children, target);
        }

        return target;
      }

      function parseLazyRoute(route, reflector, module) {
        var _route$split = route.split('#'),
            _route$split2 = _slicedToArray(_route$split, 2),
            routePath = _route$split2[0],
            routeName = _route$split2[1];

        var referencedModule = reflector.resolveExternalReference({
          moduleName: routePath,
          name: routeName
        }, module ? module.filePath : undefined);
        return {
          route: route,
          module: module || referencedModule,
          referencedModule: referencedModule
        };
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var TS = /^(?!.*\.d\.ts$).*\.ts$/;

      var ResolvedStaticSymbol = function ResolvedStaticSymbol(symbol, metadata) {
        _classCallCheck2(this, ResolvedStaticSymbol);

        this.symbol = symbol;
        this.metadata = metadata;
      };

      var SUPPORTED_SCHEMA_VERSION = 4;
      /**
       * This class is responsible for loading metadata per symbol,
       * and normalizing references between symbols.
       *
       * Internally, it only uses symbols without members,
       * and deduces the values for symbols with members based
       * on these symbols.
       */

      var StaticSymbolResolver = /*#__PURE__*/function () {
        function StaticSymbolResolver(host, staticSymbolCache, summaryResolver, errorRecorder) {
          _classCallCheck2(this, StaticSymbolResolver);

          this.host = host;
          this.staticSymbolCache = staticSymbolCache;
          this.summaryResolver = summaryResolver;
          this.errorRecorder = errorRecorder;
          this.metadataCache = new Map(); // Note: this will only contain StaticSymbols without members!

          this.resolvedSymbols = new Map(); // Note: this will only contain StaticSymbols without members!

          this.importAs = new Map();
          this.symbolResourcePaths = new Map();
          this.symbolFromFile = new Map();
          this.knownFileNameToModuleNames = new Map();
        }

        _createClass2(StaticSymbolResolver, [{
          key: "resolveSymbol",
          value: function resolveSymbol(staticSymbol) {
            if (staticSymbol.members.length > 0) {
              return this._resolveSymbolMembers(staticSymbol);
            } // Note: always ask for a summary first,
            // as we might have read shallow metadata via a .d.ts file
            // for the symbol.


            var resultFromSummary = this._resolveSymbolFromSummary(staticSymbol);

            if (resultFromSummary) {
              return resultFromSummary;
            }

            var resultFromCache = this.resolvedSymbols.get(staticSymbol);

            if (resultFromCache) {
              return resultFromCache;
            } // Note: Some users use libraries that were not compiled with ngc, i.e. they don't
            // have summaries, only .d.ts files. So we always need to check both, the summary
            // and metadata.


            this._createSymbolsOf(staticSymbol.filePath);

            return this.resolvedSymbols.get(staticSymbol);
          }
          /**
           * getImportAs produces a symbol that can be used to import the given symbol.
           * The import might be different than the symbol if the symbol is exported from
           * a library with a summary; in which case we want to import the symbol from the
           * ngfactory re-export instead of directly to avoid introducing a direct dependency
           * on an otherwise indirect dependency.
           *
           * @param staticSymbol the symbol for which to generate a import symbol
           */

        }, {
          key: "getImportAs",
          value: function getImportAs(staticSymbol) {
            var useSummaries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;

            if (staticSymbol.members.length) {
              var baseSymbol = this.getStaticSymbol(staticSymbol.filePath, staticSymbol.name);
              var baseImportAs = this.getImportAs(baseSymbol, useSummaries);
              return baseImportAs ? this.getStaticSymbol(baseImportAs.filePath, baseImportAs.name, staticSymbol.members) : null;
            }

            var summarizedFileName = stripSummaryForJitFileSuffix(staticSymbol.filePath);

            if (summarizedFileName !== staticSymbol.filePath) {
              var summarizedName = stripSummaryForJitNameSuffix(staticSymbol.name);

              var _baseSymbol = this.getStaticSymbol(summarizedFileName, summarizedName, staticSymbol.members);

              var _baseImportAs = this.getImportAs(_baseSymbol, useSummaries);

              return _baseImportAs ? this.getStaticSymbol(summaryForJitFileName(_baseImportAs.filePath), summaryForJitName(_baseImportAs.name), _baseSymbol.members) : null;
            }

            var result = useSummaries && this.summaryResolver.getImportAs(staticSymbol) || null;

            if (!result) {
              result = this.importAs.get(staticSymbol);
            }

            return result;
          }
          /**
           * getResourcePath produces the path to the original location of the symbol and should
           * be used to determine the relative location of resource references recorded in
           * symbol metadata.
           */

        }, {
          key: "getResourcePath",
          value: function getResourcePath(staticSymbol) {
            return this.symbolResourcePaths.get(staticSymbol) || staticSymbol.filePath;
          }
          /**
           * getTypeArity returns the number of generic type parameters the given symbol
           * has. If the symbol is not a type the result is null.
           */

        }, {
          key: "getTypeArity",
          value: function getTypeArity(staticSymbol) {
            // If the file is a factory/ngsummary file, don't resolve the symbol as doing so would
            // cause the metadata for an factory/ngsummary file to be loaded which doesn't exist.
            // All references to generated classes must include the correct arity whenever
            // generating code.
            if (isGeneratedFile(staticSymbol.filePath)) {
              return null;
            }

            var resolvedSymbol = unwrapResolvedMetadata(this.resolveSymbol(staticSymbol));

            while (resolvedSymbol && resolvedSymbol.metadata instanceof StaticSymbol) {
              resolvedSymbol = unwrapResolvedMetadata(this.resolveSymbol(resolvedSymbol.metadata));
            }

            return resolvedSymbol && resolvedSymbol.metadata && resolvedSymbol.metadata.arity || null;
          }
        }, {
          key: "getKnownModuleName",
          value: function getKnownModuleName(filePath) {
            return this.knownFileNameToModuleNames.get(filePath) || null;
          }
        }, {
          key: "recordImportAs",
          value: function recordImportAs(sourceSymbol, targetSymbol) {
            sourceSymbol.assertNoMembers();
            targetSymbol.assertNoMembers();
            this.importAs.set(sourceSymbol, targetSymbol);
          }
        }, {
          key: "recordModuleNameForFileName",
          value: function recordModuleNameForFileName(fileName, moduleName) {
            this.knownFileNameToModuleNames.set(fileName, moduleName);
          }
          /**
           * Invalidate all information derived from the given file and return the
           * static symbols contained in the file.
           *
           * @param fileName the file to invalidate
           */

        }, {
          key: "invalidateFile",
          value: function invalidateFile(fileName) {
            this.metadataCache["delete"](fileName);
            var symbols = this.symbolFromFile.get(fileName);

            if (!symbols) {
              return [];
            }

            this.symbolFromFile["delete"](fileName);

            var _iterator37 = _createForOfIteratorHelper(symbols),
                _step37;

            try {
              for (_iterator37.s(); !(_step37 = _iterator37.n()).done;) {
                var symbol = _step37.value;
                this.resolvedSymbols["delete"](symbol);
                this.importAs["delete"](symbol);
                this.symbolResourcePaths["delete"](symbol);
              }
            } catch (err) {
              _iterator37.e(err);
            } finally {
              _iterator37.f();
            }

            return symbols;
          }
          /** @internal */

        }, {
          key: "ignoreErrorsFor",
          value: function ignoreErrorsFor(cb) {
            var recorder = this.errorRecorder;

            this.errorRecorder = function () {};

            try {
              return cb();
            } finally {
              this.errorRecorder = recorder;
            }
          }
        }, {
          key: "_resolveSymbolMembers",
          value: function _resolveSymbolMembers(staticSymbol) {
            var members = staticSymbol.members;
            var baseResolvedSymbol = this.resolveSymbol(this.getStaticSymbol(staticSymbol.filePath, staticSymbol.name));

            if (!baseResolvedSymbol) {
              return null;
            }

            var baseMetadata = unwrapResolvedMetadata(baseResolvedSymbol.metadata);

            if (baseMetadata instanceof StaticSymbol) {
              return new ResolvedStaticSymbol(staticSymbol, this.getStaticSymbol(baseMetadata.filePath, baseMetadata.name, members));
            } else if (baseMetadata && baseMetadata.__symbolic === 'class') {
              if (baseMetadata.statics && members.length === 1) {
                return new ResolvedStaticSymbol(staticSymbol, baseMetadata.statics[members[0]]);
              }
            } else {
              var value = baseMetadata;

              for (var i = 0; i < members.length && value; i++) {
                value = value[members[i]];
              }

              return new ResolvedStaticSymbol(staticSymbol, value);
            }

            return null;
          }
        }, {
          key: "_resolveSymbolFromSummary",
          value: function _resolveSymbolFromSummary(staticSymbol) {
            var summary = this.summaryResolver.resolveSummary(staticSymbol);
            return summary ? new ResolvedStaticSymbol(staticSymbol, summary.metadata) : null;
          }
          /**
           * getStaticSymbol produces a Type whose metadata is known but whose implementation is not loaded.
           * All types passed to the StaticResolver should be pseudo-types returned by this method.
           *
           * @param declarationFile the absolute path of the file where the symbol is declared
           * @param name the name of the type.
           * @param members a symbol for a static member of the named type
           */

        }, {
          key: "getStaticSymbol",
          value: function getStaticSymbol(declarationFile, name, members) {
            return this.staticSymbolCache.get(declarationFile, name, members);
          }
          /**
           * hasDecorators checks a file's metadata for the presence of decorators without evaluating the
           * metadata.
           *
           * @param filePath the absolute path to examine for decorators.
           * @returns true if any class in the file has a decorator.
           */

        }, {
          key: "hasDecorators",
          value: function hasDecorators(filePath) {
            var metadata = this.getModuleMetadata(filePath);

            if (metadata['metadata']) {
              return Object.keys(metadata['metadata']).some(function (metadataKey) {
                var entry = metadata['metadata'][metadataKey];
                return entry && entry.__symbolic === 'class' && entry.decorators;
              });
            }

            return false;
          }
        }, {
          key: "getSymbolsOf",
          value: function getSymbolsOf(filePath) {
            var summarySymbols = this.summaryResolver.getSymbolsOf(filePath);

            if (summarySymbols) {
              return summarySymbols;
            } // Note: Some users use libraries that were not compiled with ngc, i.e. they don't
            // have summaries, only .d.ts files, but `summaryResolver.isLibraryFile` returns true.


            this._createSymbolsOf(filePath);

            return this.symbolFromFile.get(filePath) || [];
          }
        }, {
          key: "_createSymbolsOf",
          value: function _createSymbolsOf(filePath) {
            var _this379 = this;

            if (this.symbolFromFile.has(filePath)) {
              return;
            }

            var resolvedSymbols = [];
            var metadata = this.getModuleMetadata(filePath);

            if (metadata['importAs']) {
              // Index bundle indices should use the importAs module name defined
              // in the bundle.
              this.knownFileNameToModuleNames.set(filePath, metadata['importAs']);
            } // handle the symbols in one of the re-export location


            if (metadata['exports']) {
              var _iterator38 = _createForOfIteratorHelper(metadata['exports']),
                  _step38;

              try {
                var _loop5 = function _loop5() {
                  var moduleExport = _step38.value;

                  // handle the symbols in the list of explicitly re-exported symbols.
                  if (moduleExport["export"]) {
                    moduleExport["export"].forEach(function (exportSymbol) {
                      var symbolName;

                      if (typeof exportSymbol === 'string') {
                        symbolName = exportSymbol;
                      } else {
                        symbolName = exportSymbol.as;
                      }

                      symbolName = unescapeIdentifier(symbolName);
                      var symName = symbolName;

                      if (typeof exportSymbol !== 'string') {
                        symName = unescapeIdentifier(exportSymbol.name);
                      }

                      var resolvedModule = _this379.resolveModule(moduleExport.from, filePath);

                      if (resolvedModule) {
                        var targetSymbol = _this379.getStaticSymbol(resolvedModule, symName);

                        var sourceSymbol = _this379.getStaticSymbol(filePath, symbolName);

                        resolvedSymbols.push(_this379.createExport(sourceSymbol, targetSymbol));
                      }
                    });
                  } else {
                    // Handle the symbols loaded by 'export *' directives.
                    var resolvedModule = _this379.resolveModule(moduleExport.from, filePath);

                    if (resolvedModule && resolvedModule !== filePath) {
                      var nestedExports = _this379.getSymbolsOf(resolvedModule);

                      nestedExports.forEach(function (targetSymbol) {
                        var sourceSymbol = _this379.getStaticSymbol(filePath, targetSymbol.name);

                        resolvedSymbols.push(_this379.createExport(sourceSymbol, targetSymbol));
                      });
                    }
                  }
                };

                for (_iterator38.s(); !(_step38 = _iterator38.n()).done;) {
                  _loop5();
                }
              } catch (err) {
                _iterator38.e(err);
              } finally {
                _iterator38.f();
              }
            } // handle the actual metadata. Has to be after the exports
            // as there might be collisions in the names, and we want the symbols
            // of the current module to win ofter reexports.


            if (metadata['metadata']) {
              // handle direct declarations of the symbol
              var topLevelSymbolNames = new Set(Object.keys(metadata['metadata']).map(unescapeIdentifier));
              var origins = metadata['origins'] || {};
              Object.keys(metadata['metadata']).forEach(function (metadataKey) {
                var symbolMeta = metadata['metadata'][metadataKey];
                var name = unescapeIdentifier(metadataKey);

                var symbol = _this379.getStaticSymbol(filePath, name);

                var origin = origins.hasOwnProperty(metadataKey) && origins[metadataKey];

                if (origin) {
                  // If the symbol is from a bundled index, use the declaration location of the
                  // symbol so relative references (such as './my.html') will be calculated
                  // correctly.
                  var originFilePath = _this379.resolveModule(origin, filePath);

                  if (!originFilePath) {
                    _this379.reportError(new Error("Couldn't resolve original symbol for ".concat(origin, " from ").concat(_this379.host.getOutputName(filePath))));
                  } else {
                    _this379.symbolResourcePaths.set(symbol, originFilePath);
                  }
                }

                resolvedSymbols.push(_this379.createResolvedSymbol(symbol, filePath, topLevelSymbolNames, symbolMeta));
              });
            }

            var uniqueSymbols = new Set();

            for (var _i13 = 0, _resolvedSymbols = resolvedSymbols; _i13 < _resolvedSymbols.length; _i13++) {
              var resolvedSymbol = _resolvedSymbols[_i13];
              this.resolvedSymbols.set(resolvedSymbol.symbol, resolvedSymbol);
              uniqueSymbols.add(resolvedSymbol.symbol);
            }

            this.symbolFromFile.set(filePath, Array.from(uniqueSymbols));
          }
        }, {
          key: "createResolvedSymbol",
          value: function createResolvedSymbol(sourceSymbol, topLevelPath, topLevelSymbolNames, metadata) {
            var _this380 = this;

            // For classes that don't have Angular summaries / metadata,
            // we only keep their arity, but nothing else
            // (e.g. their constructor parameters).
            // We do this to prevent introducing deep imports
            // as we didn't generate .ngfactory.ts files with proper reexports.
            var isTsFile = TS.test(sourceSymbol.filePath);

            if (this.summaryResolver.isLibraryFile(sourceSymbol.filePath) && !isTsFile && metadata && metadata['__symbolic'] === 'class') {
              var _transformedMeta = {
                __symbolic: 'class',
                arity: metadata.arity
              };
              return new ResolvedStaticSymbol(sourceSymbol, _transformedMeta);
            }

            var _originalFileMemo;

            var getOriginalName = function getOriginalName() {
              if (!_originalFileMemo) {
                // Guess what the original file name is from the reference. If it has a `.d.ts` extension
                // replace it with `.ts`. If it already has `.ts` just leave it in place. If it doesn't have
                // .ts or .d.ts, append `.ts'. Also, if it is in `node_modules`, trim the `node_module`
                // location as it is not important to finding the file.
                _originalFileMemo = _this380.host.getOutputName(topLevelPath.replace(/((\.ts)|(\.d\.ts)|)$/, '.ts').replace(/^.*node_modules[/\\]/, ''));
              }

              return _originalFileMemo;
            };

            var self = this;

            var ReferenceTransformer = /*#__PURE__*/function (_ValueTransformer2) {
              _inherits2(ReferenceTransformer, _ValueTransformer2);

              var _super164 = _createSuper(ReferenceTransformer);

              function ReferenceTransformer() {
                _classCallCheck2(this, ReferenceTransformer);

                return _super164.apply(this, arguments);
              }

              _createClass2(ReferenceTransformer, [{
                key: "visitStringMap",
                value: function visitStringMap(map, functionParams) {
                  var symbolic = map['__symbolic'];

                  if (symbolic === 'function') {
                    var oldLen = functionParams.length;
                    functionParams.push.apply(functionParams, _toConsumableArray(map['parameters'] || []));

                    var result = _get2(_getPrototypeOf2(ReferenceTransformer.prototype), "visitStringMap", this).call(this, map, functionParams);

                    functionParams.length = oldLen;
                    return result;
                  } else if (symbolic === 'reference') {
                    var _module2 = map['module'];
                    var name = map['name'] ? unescapeIdentifier(map['name']) : map['name'];

                    if (!name) {
                      return null;
                    }

                    var filePath;

                    if (_module2) {
                      filePath = self.resolveModule(_module2, sourceSymbol.filePath);

                      if (!filePath) {
                        return {
                          __symbolic: 'error',
                          message: "Could not resolve ".concat(_module2, " relative to ").concat(self.host.getMetadataFor(sourceSymbol.filePath), "."),
                          line: map['line'],
                          character: map['character'],
                          fileName: getOriginalName()
                        };
                      }

                      return {
                        __symbolic: 'resolved',
                        symbol: self.getStaticSymbol(filePath, name),
                        line: map['line'],
                        character: map['character'],
                        fileName: getOriginalName()
                      };
                    } else if (functionParams.indexOf(name) >= 0) {
                      // reference to a function parameter
                      return {
                        __symbolic: 'reference',
                        name: name
                      };
                    } else {
                      if (topLevelSymbolNames.has(name)) {
                        return self.getStaticSymbol(topLevelPath, name);
                      } // ambient value


                      null;
                    }
                  } else if (symbolic === 'error') {
                    return Object.assign(Object.assign({}, map), {
                      fileName: getOriginalName()
                    });
                  } else {
                    return _get2(_getPrototypeOf2(ReferenceTransformer.prototype), "visitStringMap", this).call(this, map, functionParams);
                  }
                }
              }]);

              return ReferenceTransformer;
            }(ValueTransformer);

            var transformedMeta = visitValue(metadata, new ReferenceTransformer(), []);
            var unwrappedTransformedMeta = unwrapResolvedMetadata(transformedMeta);

            if (unwrappedTransformedMeta instanceof StaticSymbol) {
              return this.createExport(sourceSymbol, unwrappedTransformedMeta);
            }

            return new ResolvedStaticSymbol(sourceSymbol, transformedMeta);
          }
        }, {
          key: "createExport",
          value: function createExport(sourceSymbol, targetSymbol) {
            sourceSymbol.assertNoMembers();
            targetSymbol.assertNoMembers();

            if (this.summaryResolver.isLibraryFile(sourceSymbol.filePath) && this.summaryResolver.isLibraryFile(targetSymbol.filePath)) {
              // This case is for an ng library importing symbols from a plain ts library
              // transitively.
              // Note: We rely on the fact that we discover symbols in the direction
              // from source files to library files
              this.importAs.set(targetSymbol, this.getImportAs(sourceSymbol) || sourceSymbol);
            }

            return new ResolvedStaticSymbol(sourceSymbol, targetSymbol);
          }
        }, {
          key: "reportError",
          value: function reportError(error, context, path) {
            if (this.errorRecorder) {
              this.errorRecorder(error, context && context.filePath || path);
            } else {
              throw error;
            }
          }
          /**
           * @param module an absolute path to a module file.
           */

        }, {
          key: "getModuleMetadata",
          value: function getModuleMetadata(module) {
            var moduleMetadata = this.metadataCache.get(module);

            if (!moduleMetadata) {
              var moduleMetadatas = this.host.getMetadataFor(module);

              if (moduleMetadatas) {
                var maxVersion = -1;
                moduleMetadatas.forEach(function (md) {
                  if (md && md['version'] > maxVersion) {
                    maxVersion = md['version'];
                    moduleMetadata = md;
                  }
                });
              }

              if (!moduleMetadata) {
                moduleMetadata = {
                  __symbolic: 'module',
                  version: SUPPORTED_SCHEMA_VERSION,
                  module: module,
                  metadata: {}
                };
              }

              if (moduleMetadata['version'] != SUPPORTED_SCHEMA_VERSION) {
                var errorMessage = moduleMetadata['version'] == 2 ? "Unsupported metadata version ".concat(moduleMetadata['version'], " for module ").concat(module, ". This module should be compiled with a newer version of ngc") : "Metadata version mismatch for module ".concat(this.host.getOutputName(module), ", found version ").concat(moduleMetadata['version'], ", expected ").concat(SUPPORTED_SCHEMA_VERSION);
                this.reportError(new Error(errorMessage));
              }

              this.metadataCache.set(module, moduleMetadata);
            }

            return moduleMetadata;
          }
        }, {
          key: "getSymbolByModule",
          value: function getSymbolByModule(module, symbolName, containingFile) {
            var filePath = this.resolveModule(module, containingFile);

            if (!filePath) {
              this.reportError(new Error("Could not resolve module ".concat(module).concat(containingFile ? ' relative to ' + this.host.getOutputName(containingFile) : '')));
              return this.getStaticSymbol("ERROR:".concat(module), symbolName);
            }

            return this.getStaticSymbol(filePath, symbolName);
          }
        }, {
          key: "resolveModule",
          value: function resolveModule(module, containingFile) {
            try {
              return this.host.moduleNameToFileName(module, containingFile);
            } catch (e) {
              console.error("Could not resolve module '".concat(module, "' relative to file ").concat(containingFile));
              this.reportError(e, undefined, containingFile);
            }

            return null;
          }
        }]);

        return StaticSymbolResolver;
      }(); // Remove extra underscore from escaped identifier.
      // See https://github.com/Microsoft/TypeScript/blob/master/src/compiler/utilities.ts


      function unescapeIdentifier(identifier) {
        return identifier.startsWith('___') ? identifier.substr(1) : identifier;
      }

      function unwrapResolvedMetadata(metadata) {
        if (metadata && metadata.__symbolic === 'resolved') {
          return metadata.symbol;
        }

        return metadata;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function serializeSummaries(srcFileName, forJitCtx, summaryResolver, symbolResolver, symbols, types) {
        var createExternalSymbolReexports = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false;
        var toJsonSerializer = new ToJsonSerializer(symbolResolver, summaryResolver, srcFileName); // for symbols, we use everything except for the class metadata itself
        // (we keep the statics though), as the class metadata is contained in the
        // CompileTypeSummary.

        symbols.forEach(function (resolvedSymbol) {
          return toJsonSerializer.addSummary({
            symbol: resolvedSymbol.symbol,
            metadata: resolvedSymbol.metadata
          });
        }); // Add type summaries.

        types.forEach(function (_ref96) {
          var summary = _ref96.summary,
              metadata = _ref96.metadata;
          toJsonSerializer.addSummary({
            symbol: summary.type.reference,
            metadata: undefined,
            type: summary
          });
        });

        var _toJsonSerializer$ser = toJsonSerializer.serialize(createExternalSymbolReexports),
            json = _toJsonSerializer$ser.json,
            exportAs = _toJsonSerializer$ser.exportAs;

        if (forJitCtx) {
          var forJitSerializer = new ForJitSerializer(forJitCtx, symbolResolver, summaryResolver);
          types.forEach(function (_ref97) {
            var summary = _ref97.summary,
                metadata = _ref97.metadata;
            forJitSerializer.addSourceType(summary, metadata);
          });
          toJsonSerializer.unprocessedSymbolSummariesBySymbol.forEach(function (summary) {
            if (summaryResolver.isLibraryFile(summary.symbol.filePath) && summary.type) {
              forJitSerializer.addLibType(summary.type);
            }
          });
          forJitSerializer.serialize(exportAs);
        }

        return {
          json: json,
          exportAs: exportAs
        };
      }

      function deserializeSummaries(symbolCache, summaryResolver, libraryFileName, json) {
        var deserializer = new FromJsonDeserializer(symbolCache, summaryResolver);
        return deserializer.deserialize(libraryFileName, json);
      }

      function createForJitStub(outputCtx, reference) {
        return createSummaryForJitFunction(outputCtx, reference, NULL_EXPR);
      }

      function createSummaryForJitFunction(outputCtx, reference, value) {
        var fnName = summaryForJitName(reference.name);
        outputCtx.statements.push(fn([], [new ReturnStatement(value)], new ArrayType(DYNAMIC_TYPE)).toDeclStmt(fnName, [StmtModifier.Final, StmtModifier.Exported]));
      }

      var ToJsonSerializer = /*#__PURE__*/function (_ValueTransformer3) {
        _inherits2(ToJsonSerializer, _ValueTransformer3);

        var _super165 = _createSuper(ToJsonSerializer);

        function ToJsonSerializer(symbolResolver, summaryResolver, srcFileName) {
          var _this381;

          _classCallCheck2(this, ToJsonSerializer);

          _this381 = _super165.call(this);
          _this381.symbolResolver = symbolResolver;
          _this381.summaryResolver = summaryResolver;
          _this381.srcFileName = srcFileName; // Note: This only contains symbols without members.

          _this381.symbols = [];
          _this381.indexBySymbol = new Map();
          _this381.reexportedBy = new Map(); // This now contains a `__symbol: number` in the place of
          // StaticSymbols, but otherwise has the same shape as the original objects.

          _this381.processedSummaryBySymbol = new Map();
          _this381.processedSummaries = [];
          _this381.unprocessedSymbolSummariesBySymbol = new Map();
          _this381.moduleName = symbolResolver.getKnownModuleName(srcFileName);
          return _this381;
        }

        _createClass2(ToJsonSerializer, [{
          key: "addSummary",
          value: function addSummary(summary) {
            var _this382 = this;

            var unprocessedSummary = this.unprocessedSymbolSummariesBySymbol.get(summary.symbol);
            var processedSummary = this.processedSummaryBySymbol.get(summary.symbol);

            if (!unprocessedSummary) {
              unprocessedSummary = {
                symbol: summary.symbol,
                metadata: undefined
              };
              this.unprocessedSymbolSummariesBySymbol.set(summary.symbol, unprocessedSummary);
              processedSummary = {
                symbol: this.processValue(summary.symbol, 0
                /* None */
                )
              };
              this.processedSummaries.push(processedSummary);
              this.processedSummaryBySymbol.set(summary.symbol, processedSummary);
            }

            if (!unprocessedSummary.metadata && summary.metadata) {
              var metadata = summary.metadata || {};

              if (metadata.__symbolic === 'class') {
                // For classes, we keep everything except their class decorators.
                // We need to keep e.g. the ctor args, method names, method decorators
                // so that the class can be extended in another compilation unit.
                // We don't keep the class decorators as
                // 1) they refer to data
                //   that should not cause a rebuild of downstream compilation units
                //   (e.g. inline templates of @Component, or @NgModule.declarations)
                // 2) their data is already captured in TypeSummaries, e.g. DirectiveSummary.
                var clone = {};
                Object.keys(metadata).forEach(function (propName) {
                  if (propName !== 'decorators') {
                    clone[propName] = metadata[propName];
                  }
                });
                metadata = clone;
              } else if (isCall(metadata)) {
                if (!isFunctionCall(metadata) && !isMethodCallOnVariable(metadata)) {
                  // Don't store complex calls as we won't be able to simplify them anyways later on.
                  metadata = {
                    __symbolic: 'error',
                    message: 'Complex function calls are not supported.'
                  };
                }
              } // Note: We need to keep storing ctor calls for e.g.
              // `export const x = new InjectionToken(...)`


              unprocessedSummary.metadata = metadata;
              processedSummary.metadata = this.processValue(metadata, 1
              /* ResolveValue */
              );

              if (metadata instanceof StaticSymbol && this.summaryResolver.isLibraryFile(metadata.filePath)) {
                var declarationSymbol = this.symbols[this.indexBySymbol.get(metadata)];

                if (!isLoweredSymbol(declarationSymbol.name)) {
                  // Note: symbols that were introduced during codegen in the user file can have a reexport
                  // if a user used `export *`. However, we can't rely on this as tsickle will change
                  // `export *` into named exports, using only the information from the typechecker.
                  // As we introduce the new symbols after typecheck, Tsickle does not know about them,
                  // and omits them when expanding `export *`.
                  // So we have to keep reexporting these symbols manually via .ngfactory files.
                  this.reexportedBy.set(declarationSymbol, summary.symbol);
                }
              }
            }

            if (!unprocessedSummary.type && summary.type) {
              unprocessedSummary.type = summary.type; // Note: We don't add the summaries of all referenced symbols as for the ResolvedSymbols,
              // as the type summaries already contain the transitive data that they require
              // (in a minimal way).

              processedSummary.type = this.processValue(summary.type, 0
              /* None */
              ); // except for reexported directives / pipes, so we need to store
              // their summaries explicitly.

              if (summary.type.summaryKind === CompileSummaryKind.NgModule) {
                var ngModuleSummary = summary.type;
                ngModuleSummary.exportedDirectives.concat(ngModuleSummary.exportedPipes).forEach(function (id) {
                  var symbol = id.reference;

                  if (_this382.summaryResolver.isLibraryFile(symbol.filePath) && !_this382.unprocessedSymbolSummariesBySymbol.has(symbol)) {
                    var _summary = _this382.summaryResolver.resolveSummary(symbol);

                    if (_summary) {
                      _this382.addSummary(_summary);
                    }
                  }
                });
              }
            }
          }
          /**
           * @param createExternalSymbolReexports Whether external static symbols should be re-exported.
           * This can be enabled if external symbols should be re-exported by the current module in
           * order to avoid dynamically generated module dependencies which can break strict dependency
           * enforcements (as in Google3). Read more here: https://github.com/angular/angular/issues/25644
           */

        }, {
          key: "serialize",
          value: function serialize(createExternalSymbolReexports) {
            var _this383 = this;

            var exportAs = [];
            var json = JSON.stringify({
              moduleName: this.moduleName,
              summaries: this.processedSummaries,
              symbols: this.symbols.map(function (symbol, index) {
                symbol.assertNoMembers();
                var importAs = undefined;

                if (_this383.summaryResolver.isLibraryFile(symbol.filePath)) {
                  var reexportSymbol = _this383.reexportedBy.get(symbol);

                  if (reexportSymbol) {
                    // In case the given external static symbol is already manually exported by the
                    // user, we just proxy the external static symbol reference to the manual export.
                    // This ensures that the AOT compiler imports the external symbol through the
                    // user export and does not introduce another dependency which is not needed.
                    importAs = _this383.indexBySymbol.get(reexportSymbol);
                  } else if (createExternalSymbolReexports) {
                    // In this case, the given external static symbol is *not* manually exported by
                    // the user, and we manually create a re-export in the factory file so that we
                    // don't introduce another module dependency. This is useful when running within
                    // Bazel so that the AOT compiler does not introduce any module dependencies
                    // which can break the strict dependency enforcement. (e.g. as in Google3)
                    // Read more about this here: https://github.com/angular/angular/issues/25644
                    var summary = _this383.unprocessedSymbolSummariesBySymbol.get(symbol);

                    if (!summary || !summary.metadata || summary.metadata.__symbolic !== 'interface') {
                      importAs = "".concat(symbol.name, "_").concat(index);
                      exportAs.push({
                        symbol: symbol,
                        exportAs: importAs
                      });
                    }
                  }
                }

                return {
                  __symbol: index,
                  name: symbol.name,
                  filePath: _this383.summaryResolver.toSummaryFileName(symbol.filePath, _this383.srcFileName),
                  importAs: importAs
                };
              })
            });
            return {
              json: json,
              exportAs: exportAs
            };
          }
        }, {
          key: "processValue",
          value: function processValue(value, flags) {
            return visitValue(value, this, flags);
          }
        }, {
          key: "visitOther",
          value: function visitOther(value, context) {
            if (value instanceof StaticSymbol) {
              var baseSymbol = this.symbolResolver.getStaticSymbol(value.filePath, value.name);
              var index = this.visitStaticSymbol(baseSymbol, context);
              return {
                __symbol: index,
                members: value.members
              };
            }
          }
          /**
           * Strip line and character numbers from ngsummaries.
           * Emitting them causes white spaces changes to retrigger upstream
           * recompilations in bazel.
           * TODO: find out a way to have line and character numbers in errors without
           * excessive recompilation in bazel.
           */

        }, {
          key: "visitStringMap",
          value: function visitStringMap(map, context) {
            if (map['__symbolic'] === 'resolved') {
              return visitValue(map['symbol'], this, context);
            }

            if (map['__symbolic'] === 'error') {
              delete map['line'];
              delete map['character'];
            }

            return _get2(_getPrototypeOf2(ToJsonSerializer.prototype), "visitStringMap", this).call(this, map, context);
          }
          /**
           * Returns null if the options.resolveValue is true, and the summary for the symbol
           * resolved to a type or could not be resolved.
           */

        }, {
          key: "visitStaticSymbol",
          value: function visitStaticSymbol(baseSymbol, flags) {
            var index = this.indexBySymbol.get(baseSymbol);
            var summary = null;

            if (flags & 1
            /* ResolveValue */
            && this.summaryResolver.isLibraryFile(baseSymbol.filePath)) {
              if (this.unprocessedSymbolSummariesBySymbol.has(baseSymbol)) {
                // the summary for this symbol was already added
                // -> nothing to do.
                return index;
              }

              summary = this.loadSummary(baseSymbol);

              if (summary && summary.metadata instanceof StaticSymbol) {
                // The summary is a reexport
                index = this.visitStaticSymbol(summary.metadata, flags); // reset the summary as it is just a reexport, so we don't want to store it.

                summary = null;
              }
            } else if (index != null) {
              // Note: == on purpose to compare with undefined!
              // No summary and the symbol is already added -> nothing to do.
              return index;
            } // Note: == on purpose to compare with undefined!


            if (index == null) {
              index = this.symbols.length;
              this.symbols.push(baseSymbol);
            }

            this.indexBySymbol.set(baseSymbol, index);

            if (summary) {
              this.addSummary(summary);
            }

            return index;
          }
        }, {
          key: "loadSummary",
          value: function loadSummary(symbol) {
            var summary = this.summaryResolver.resolveSummary(symbol);

            if (!summary) {
              // some symbols might originate from a plain typescript library
              // that just exported .d.ts and .metadata.json files, i.e. where no summary
              // files were created.
              var resolvedSymbol = this.symbolResolver.resolveSymbol(symbol);

              if (resolvedSymbol) {
                summary = {
                  symbol: resolvedSymbol.symbol,
                  metadata: resolvedSymbol.metadata
                };
              }
            }

            return summary;
          }
        }]);

        return ToJsonSerializer;
      }(ValueTransformer);

      var ForJitSerializer = /*#__PURE__*/function () {
        function ForJitSerializer(outputCtx, symbolResolver, summaryResolver) {
          _classCallCheck2(this, ForJitSerializer);

          this.outputCtx = outputCtx;
          this.symbolResolver = symbolResolver;
          this.summaryResolver = summaryResolver;
          this.data = [];
        }

        _createClass2(ForJitSerializer, [{
          key: "addSourceType",
          value: function addSourceType(summary, metadata) {
            this.data.push({
              summary: summary,
              metadata: metadata,
              isLibrary: false
            });
          }
        }, {
          key: "addLibType",
          value: function addLibType(summary) {
            this.data.push({
              summary: summary,
              metadata: null,
              isLibrary: true
            });
          }
        }, {
          key: "serialize",
          value: function serialize(exportAsArr) {
            var _this384 = this;

            var exportAsBySymbol = new Map();

            var _iterator39 = _createForOfIteratorHelper(exportAsArr),
                _step39;

            try {
              for (_iterator39.s(); !(_step39 = _iterator39.n()).done;) {
                var _step39$value = _step39.value,
                    symbol = _step39$value.symbol,
                    exportAs = _step39$value.exportAs;
                exportAsBySymbol.set(symbol, exportAs);
              }
            } catch (err) {
              _iterator39.e(err);
            } finally {
              _iterator39.f();
            }

            var ngModuleSymbols = new Set();

            var _iterator40 = _createForOfIteratorHelper(this.data),
                _step40;

            try {
              for (_iterator40.s(); !(_step40 = _iterator40.n()).done;) {
                var _step40$value = _step40.value,
                    summary = _step40$value.summary,
                    metadata = _step40$value.metadata,
                    isLibrary = _step40$value.isLibrary;

                if (summary.summaryKind === CompileSummaryKind.NgModule) {
                  // collect the symbols that refer to NgModule classes.
                  // Note: we can't just rely on `summary.type.summaryKind` to determine this as
                  // we don't add the summaries of all referenced symbols when we serialize type summaries.
                  // See serializeSummaries for details.
                  ngModuleSymbols.add(summary.type.reference);
                  var modSummary = summary;

                  var _iterator41 = _createForOfIteratorHelper(modSummary.modules),
                      _step41;

                  try {
                    for (_iterator41.s(); !(_step41 = _iterator41.n()).done;) {
                      var mod = _step41.value;
                      ngModuleSymbols.add(mod.reference);
                    }
                  } catch (err) {
                    _iterator41.e(err);
                  } finally {
                    _iterator41.f();
                  }
                }

                if (!isLibrary) {
                  var fnName = summaryForJitName(summary.type.reference.name);
                  createSummaryForJitFunction(this.outputCtx, summary.type.reference, this.serializeSummaryWithDeps(summary, metadata));
                }
              }
            } catch (err) {
              _iterator40.e(err);
            } finally {
              _iterator40.f();
            }

            ngModuleSymbols.forEach(function (ngModuleSymbol) {
              if (_this384.summaryResolver.isLibraryFile(ngModuleSymbol.filePath)) {
                var exportAs = exportAsBySymbol.get(ngModuleSymbol) || ngModuleSymbol.name;
                var jitExportAsName = summaryForJitName(exportAs);

                _this384.outputCtx.statements.push(variable(jitExportAsName).set(_this384.serializeSummaryRef(ngModuleSymbol)).toDeclStmt(null, [StmtModifier.Exported]));
              }
            });
          }
        }, {
          key: "serializeSummaryWithDeps",
          value: function serializeSummaryWithDeps(summary, metadata) {
            var _this385 = this;

            var expressions = [this.serializeSummary(summary)];
            var providers = [];

            if (metadata instanceof CompileNgModuleMetadata) {
              expressions.push.apply(expressions, _toConsumableArray( // For directives / pipes, we only add the declared ones,
              // and rely on transitively importing NgModules to get the transitive
              // summaries.
              metadata.declaredDirectives.concat(metadata.declaredPipes).map(function (type) {
                return type.reference;
              }) // For modules,
              // we also add the summaries for modules
              // from libraries.
              // This is ok as we produce reexports for all transitive modules.
              .concat(metadata.transitiveModule.modules.map(function (type) {
                return type.reference;
              }).filter(function (ref) {
                return ref !== metadata.type.reference;
              })).map(function (ref) {
                return _this385.serializeSummaryRef(ref);
              }))); // Note: We don't use `NgModuleSummary.providers`, as that one is transitive,
              // and we already have transitive modules.

              providers = metadata.providers;
            } else if (summary.summaryKind === CompileSummaryKind.Directive) {
              var dirSummary = summary;
              providers = dirSummary.providers.concat(dirSummary.viewProviders);
            } // Note: We can't just refer to the `ngsummary.ts` files for `useClass` providers (as we do for
            // declaredDirectives / declaredPipes), as we allow
            // providers without ctor arguments to skip the `@Injectable` decorator,
            // i.e. we didn't generate .ngsummary.ts files for these.


            expressions.push.apply(expressions, _toConsumableArray(providers.filter(function (provider) {
              return !!provider.useClass;
            }).map(function (provider) {
              return _this385.serializeSummary({
                summaryKind: CompileSummaryKind.Injectable,
                type: provider.useClass
              });
            })));
            return literalArr(expressions);
          }
        }, {
          key: "serializeSummaryRef",
          value: function serializeSummaryRef(typeSymbol) {
            var jitImportedSymbol = this.symbolResolver.getStaticSymbol(summaryForJitFileName(typeSymbol.filePath), summaryForJitName(typeSymbol.name));
            return this.outputCtx.importExpr(jitImportedSymbol);
          }
        }, {
          key: "serializeSummary",
          value: function serializeSummary(data) {
            var outputCtx = this.outputCtx;

            var Transformer = /*#__PURE__*/function () {
              function Transformer() {
                _classCallCheck2(this, Transformer);
              }

              _createClass2(Transformer, [{
                key: "visitArray",
                value: function visitArray(arr, context) {
                  var _this386 = this;

                  return literalArr(arr.map(function (entry) {
                    return visitValue(entry, _this386, context);
                  }));
                }
              }, {
                key: "visitStringMap",
                value: function visitStringMap(map, context) {
                  var _this387 = this;

                  return new LiteralMapExpr(Object.keys(map).map(function (key) {
                    return new LiteralMapEntry(key, visitValue(map[key], _this387, context), false);
                  }));
                }
              }, {
                key: "visitPrimitive",
                value: function visitPrimitive(value, context) {
                  return literal(value);
                }
              }, {
                key: "visitOther",
                value: function visitOther(value, context) {
                  if (value instanceof StaticSymbol) {
                    return outputCtx.importExpr(value);
                  } else {
                    throw new Error("Illegal State: Encountered value ".concat(value));
                  }
                }
              }]);

              return Transformer;
            }();

            return visitValue(data, new Transformer(), null);
          }
        }]);

        return ForJitSerializer;
      }();

      var FromJsonDeserializer = /*#__PURE__*/function (_ValueTransformer4) {
        _inherits2(FromJsonDeserializer, _ValueTransformer4);

        var _super166 = _createSuper(FromJsonDeserializer);

        function FromJsonDeserializer(symbolCache, summaryResolver) {
          var _this388;

          _classCallCheck2(this, FromJsonDeserializer);

          _this388 = _super166.call(this);
          _this388.symbolCache = symbolCache;
          _this388.summaryResolver = summaryResolver;
          return _this388;
        }

        _createClass2(FromJsonDeserializer, [{
          key: "deserialize",
          value: function deserialize(libraryFileName, json) {
            var _this389 = this;

            var data = JSON.parse(json);
            var allImportAs = [];
            this.symbols = data.symbols.map(function (serializedSymbol) {
              return _this389.symbolCache.get(_this389.summaryResolver.fromSummaryFileName(serializedSymbol.filePath, libraryFileName), serializedSymbol.name);
            });
            data.symbols.forEach(function (serializedSymbol, index) {
              var symbol = _this389.symbols[index];
              var importAs = serializedSymbol.importAs;

              if (typeof importAs === 'number') {
                allImportAs.push({
                  symbol: symbol,
                  importAs: _this389.symbols[importAs]
                });
              } else if (typeof importAs === 'string') {
                allImportAs.push({
                  symbol: symbol,
                  importAs: _this389.symbolCache.get(ngfactoryFilePath(libraryFileName), importAs)
                });
              }
            });
            var summaries = visitValue(data.summaries, this, null);
            return {
              moduleName: data.moduleName,
              summaries: summaries,
              importAs: allImportAs
            };
          }
        }, {
          key: "visitStringMap",
          value: function visitStringMap(map, context) {
            if ('__symbol' in map) {
              var baseSymbol = this.symbols[map['__symbol']];
              var members = map['members'];
              return members.length ? this.symbolCache.get(baseSymbol.filePath, baseSymbol.name, members) : baseSymbol;
            } else {
              return _get2(_getPrototypeOf2(FromJsonDeserializer.prototype), "visitStringMap", this).call(this, map, context);
            }
          }
        }]);

        return FromJsonDeserializer;
      }(ValueTransformer);

      function isCall(metadata) {
        return metadata && metadata.__symbolic === 'call';
      }

      function isFunctionCall(metadata) {
        return isCall(metadata) && unwrapResolvedMetadata(metadata.expression) instanceof StaticSymbol;
      }

      function isMethodCallOnVariable(metadata) {
        return isCall(metadata) && metadata.expression && metadata.expression.__symbolic === 'select' && unwrapResolvedMetadata(metadata.expression.expression) instanceof StaticSymbol;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var AotCompiler = /*#__PURE__*/function () {
        function AotCompiler(_config, _options, _host, reflector, _metadataResolver, _templateParser, _styleCompiler, _viewCompiler, _typeCheckCompiler, _ngModuleCompiler, _injectableCompiler, _outputEmitter, _summaryResolver, _symbolResolver) {
          _classCallCheck2(this, AotCompiler);

          this._config = _config;
          this._options = _options;
          this._host = _host;
          this.reflector = reflector;
          this._metadataResolver = _metadataResolver;
          this._templateParser = _templateParser;
          this._styleCompiler = _styleCompiler;
          this._viewCompiler = _viewCompiler;
          this._typeCheckCompiler = _typeCheckCompiler;
          this._ngModuleCompiler = _ngModuleCompiler;
          this._injectableCompiler = _injectableCompiler;
          this._outputEmitter = _outputEmitter;
          this._summaryResolver = _summaryResolver;
          this._symbolResolver = _symbolResolver;
          this._templateAstCache = new Map();
          this._analyzedFiles = new Map();
          this._analyzedFilesForInjectables = new Map();
        }

        _createClass2(AotCompiler, [{
          key: "clearCache",
          value: function clearCache() {
            this._metadataResolver.clearCache();
          }
        }, {
          key: "analyzeModulesSync",
          value: function analyzeModulesSync(rootFiles) {
            var _this390 = this;

            var analyzeResult = analyzeAndValidateNgModules(rootFiles, this._host, this._symbolResolver, this._metadataResolver);
            analyzeResult.ngModules.forEach(function (ngModule) {
              return _this390._metadataResolver.loadNgModuleDirectiveAndPipeMetadata(ngModule.type.reference, true);
            });
            return analyzeResult;
          }
        }, {
          key: "analyzeModulesAsync",
          value: function analyzeModulesAsync(rootFiles) {
            var _this391 = this;

            var analyzeResult = analyzeAndValidateNgModules(rootFiles, this._host, this._symbolResolver, this._metadataResolver);
            return Promise.all(analyzeResult.ngModules.map(function (ngModule) {
              return _this391._metadataResolver.loadNgModuleDirectiveAndPipeMetadata(ngModule.type.reference, false);
            })).then(function () {
              return analyzeResult;
            });
          }
        }, {
          key: "_analyzeFile",
          value: function _analyzeFile(fileName) {
            var analyzedFile = this._analyzedFiles.get(fileName);

            if (!analyzedFile) {
              analyzedFile = analyzeFile(this._host, this._symbolResolver, this._metadataResolver, fileName);

              this._analyzedFiles.set(fileName, analyzedFile);
            }

            return analyzedFile;
          }
        }, {
          key: "_analyzeFileForInjectables",
          value: function _analyzeFileForInjectables(fileName) {
            var analyzedFile = this._analyzedFilesForInjectables.get(fileName);

            if (!analyzedFile) {
              analyzedFile = analyzeFileForInjectables(this._host, this._symbolResolver, this._metadataResolver, fileName);

              this._analyzedFilesForInjectables.set(fileName, analyzedFile);
            }

            return analyzedFile;
          }
        }, {
          key: "findGeneratedFileNames",
          value: function findGeneratedFileNames(fileName) {
            var _this392 = this;

            var genFileNames = [];

            var file = this._analyzeFile(fileName); // Make sure we create a .ngfactory if we have a injectable/directive/pipe/NgModule
            // or a reference to a non source file.
            // Note: This is overestimating the required .ngfactory files as the real calculation is harder.
            // Only do this for StubEmitFlags.Basic, as adding a type check block
            // does not change this file (as we generate type check blocks based on NgModules).


            if (this._options.allowEmptyCodegenFiles || file.directives.length || file.pipes.length || file.injectables.length || file.ngModules.length || file.exportsNonSourceFiles) {
              genFileNames.push(ngfactoryFilePath(file.fileName, true));

              if (this._options.enableSummariesForJit) {
                genFileNames.push(summaryForJitFileName(file.fileName, true));
              }
            }

            var fileSuffix = normalizeGenFileSuffix(splitTypescriptSuffix(file.fileName, true)[1]);
            file.directives.forEach(function (dirSymbol) {
              var compMeta = _this392._metadataResolver.getNonNormalizedDirectiveMetadata(dirSymbol).metadata;

              if (!compMeta.isComponent) {
                return;
              } // Note: compMeta is a component and therefore template is non null.


              compMeta.template.styleUrls.forEach(function (styleUrl) {
                var normalizedUrl = _this392._host.resourceNameToFileName(styleUrl, file.fileName);

                if (!normalizedUrl) {
                  throw syntaxError("Couldn't resolve resource ".concat(styleUrl, " relative to ").concat(file.fileName));
                }

                var needsShim = (compMeta.template.encapsulation || _this392._config.defaultEncapsulation) === ViewEncapsulation.Emulated;
                genFileNames.push(_stylesModuleUrl(normalizedUrl, needsShim, fileSuffix));

                if (_this392._options.allowEmptyCodegenFiles) {
                  genFileNames.push(_stylesModuleUrl(normalizedUrl, !needsShim, fileSuffix));
                }
              });
            });
            return genFileNames;
          }
        }, {
          key: "emitBasicStub",
          value: function emitBasicStub(genFileName, originalFileName) {
            var outputCtx = this._createOutputContext(genFileName);

            if (genFileName.endsWith('.ngfactory.ts')) {
              if (!originalFileName) {
                throw new Error("Assertion error: require the original file for .ngfactory.ts stubs. File: ".concat(genFileName));
              }

              var originalFile = this._analyzeFile(originalFileName);

              this._createNgFactoryStub(outputCtx, originalFile, 1
              /* Basic */
              );
            } else if (genFileName.endsWith('.ngsummary.ts')) {
              if (this._options.enableSummariesForJit) {
                if (!originalFileName) {
                  throw new Error("Assertion error: require the original file for .ngsummary.ts stubs. File: ".concat(genFileName));
                }

                var _originalFile = this._analyzeFile(originalFileName);

                _createEmptyStub(outputCtx);

                _originalFile.ngModules.forEach(function (ngModule) {
                  // create exports that user code can reference
                  createForJitStub(outputCtx, ngModule.type.reference);
                });
              }
            } else if (genFileName.endsWith('.ngstyle.ts')) {
              _createEmptyStub(outputCtx);
            } // Note: for the stubs, we don't need a property srcFileUrl,
            // as later on in emitAllImpls we will create the proper GeneratedFiles with the
            // correct srcFileUrl.
            // This is good as e.g. for .ngstyle.ts files we can't derive
            // the url of components based on the genFileUrl.


            return this._codegenSourceModule('unknown', outputCtx);
          }
        }, {
          key: "emitTypeCheckStub",
          value: function emitTypeCheckStub(genFileName, originalFileName) {
            var originalFile = this._analyzeFile(originalFileName);

            var outputCtx = this._createOutputContext(genFileName);

            if (genFileName.endsWith('.ngfactory.ts')) {
              this._createNgFactoryStub(outputCtx, originalFile, 2
              /* TypeCheck */
              );
            }

            return outputCtx.statements.length > 0 ? this._codegenSourceModule(originalFile.fileName, outputCtx) : null;
          }
        }, {
          key: "loadFilesAsync",
          value: function loadFilesAsync(fileNames, tsFiles) {
            var _this393 = this;

            var files = fileNames.map(function (fileName) {
              return _this393._analyzeFile(fileName);
            });
            var loadingPromises = [];
            files.forEach(function (file) {
              return file.ngModules.forEach(function (ngModule) {
                return loadingPromises.push(_this393._metadataResolver.loadNgModuleDirectiveAndPipeMetadata(ngModule.type.reference, false));
              });
            });
            var analyzedInjectables = tsFiles.map(function (tsFile) {
              return _this393._analyzeFileForInjectables(tsFile);
            });
            return Promise.all(loadingPromises).then(function (_) {
              return {
                analyzedModules: mergeAndValidateNgFiles(files),
                analyzedInjectables: analyzedInjectables
              };
            });
          }
        }, {
          key: "loadFilesSync",
          value: function loadFilesSync(fileNames, tsFiles) {
            var _this394 = this;

            var files = fileNames.map(function (fileName) {
              return _this394._analyzeFile(fileName);
            });
            files.forEach(function (file) {
              return file.ngModules.forEach(function (ngModule) {
                return _this394._metadataResolver.loadNgModuleDirectiveAndPipeMetadata(ngModule.type.reference, true);
              });
            });
            var analyzedInjectables = tsFiles.map(function (tsFile) {
              return _this394._analyzeFileForInjectables(tsFile);
            });
            return {
              analyzedModules: mergeAndValidateNgFiles(files),
              analyzedInjectables: analyzedInjectables
            };
          }
        }, {
          key: "_createNgFactoryStub",
          value: function _createNgFactoryStub(outputCtx, file, emitFlags) {
            var _this395 = this;

            var componentId = 0;
            file.ngModules.forEach(function (ngModuleMeta, ngModuleIndex) {
              // Note: the code below needs to executed for StubEmitFlags.Basic and StubEmitFlags.TypeCheck,
              // so we don't change the .ngfactory file too much when adding the type-check block.
              // create exports that user code can reference
              _this395._ngModuleCompiler.createStub(outputCtx, ngModuleMeta.type.reference); // add references to the symbols from the metadata.
              // These can be used by the type check block for components,
              // and they also cause TypeScript to include these files into the program too,
              // which will make them part of the analyzedFiles.


              var externalReferences = [].concat(_toConsumableArray(ngModuleMeta.transitiveModule.directives.map(function (d) {
                return d.reference;
              })), _toConsumableArray(ngModuleMeta.transitiveModule.pipes.map(function (d) {
                return d.reference;
              })), _toConsumableArray(ngModuleMeta.importedModules.map(function (m) {
                return m.type.reference;
              })), _toConsumableArray(ngModuleMeta.exportedModules.map(function (m) {
                return m.type.reference;
              })), _toConsumableArray(_this395._externalIdentifierReferences([Identifiers.TemplateRef, Identifiers.ElementRef])));
              var externalReferenceVars = new Map();
              externalReferences.forEach(function (ref, typeIndex) {
                externalReferenceVars.set(ref, "_decl".concat(ngModuleIndex, "_").concat(typeIndex));
              });
              externalReferenceVars.forEach(function (varName, reference) {
                outputCtx.statements.push(variable(varName).set(NULL_EXPR.cast(DYNAMIC_TYPE)).toDeclStmt(expressionType(outputCtx.importExpr(reference,
                /* typeParams */
                null,
                /* useSummaries */
                false))));
              });

              if (emitFlags & 2
              /* TypeCheck */
              ) {
                  // add the type-check block for all components of the NgModule
                  ngModuleMeta.declaredDirectives.forEach(function (dirId) {
                    var compMeta = _this395._metadataResolver.getDirectiveMetadata(dirId.reference);

                    if (!compMeta.isComponent) {
                      return;
                    }

                    componentId++;

                    _this395._createTypeCheckBlock(outputCtx, "".concat(compMeta.type.reference.name, "_Host_").concat(componentId), ngModuleMeta, _this395._metadataResolver.getHostComponentMetadata(compMeta), [compMeta.type], externalReferenceVars);

                    _this395._createTypeCheckBlock(outputCtx, "".concat(compMeta.type.reference.name, "_").concat(componentId), ngModuleMeta, compMeta, ngModuleMeta.transitiveModule.directives, externalReferenceVars);
                  });
                }
            });

            if (outputCtx.statements.length === 0) {
              _createEmptyStub(outputCtx);
            }
          }
        }, {
          key: "_externalIdentifierReferences",
          value: function _externalIdentifierReferences(references) {
            var result = [];

            var _iterator42 = _createForOfIteratorHelper(references),
                _step42;

            try {
              for (_iterator42.s(); !(_step42 = _iterator42.n()).done;) {
                var reference = _step42.value;
                var token = createTokenForExternalReference(this.reflector, reference);

                if (token.identifier) {
                  result.push(token.identifier.reference);
                }
              }
            } catch (err) {
              _iterator42.e(err);
            } finally {
              _iterator42.f();
            }

            return result;
          }
        }, {
          key: "_createTypeCheckBlock",
          value: function _createTypeCheckBlock(ctx, componentId, moduleMeta, compMeta, directives, externalReferenceVars) {
            var _ctx$statements;

            var _this$_parseTemplate = this._parseTemplate(compMeta, moduleMeta, directives),
                parsedTemplate = _this$_parseTemplate.template,
                usedPipes = _this$_parseTemplate.pipes;

            (_ctx$statements = ctx.statements).push.apply(_ctx$statements, _toConsumableArray(this._typeCheckCompiler.compileComponent(componentId, compMeta, parsedTemplate, usedPipes, externalReferenceVars, ctx)));
          }
        }, {
          key: "emitMessageBundle",
          value: function emitMessageBundle(analyzeResult, locale) {
            var _this396 = this;

            var errors = [];
            var htmlParser = new HtmlParser(); // TODO(vicb): implicit tags & attributes

            var messageBundle = new MessageBundle(htmlParser, [], {}, locale);
            analyzeResult.files.forEach(function (file) {
              var compMetas = [];
              file.directives.forEach(function (directiveType) {
                var dirMeta = _this396._metadataResolver.getDirectiveMetadata(directiveType);

                if (dirMeta && dirMeta.isComponent) {
                  compMetas.push(dirMeta);
                }
              });
              compMetas.forEach(function (compMeta) {
                var html = compMeta.template.template; // Template URL points to either an HTML or TS file depending on whether
                // the file is used with `templateUrl:` or `template:`, respectively.

                var templateUrl = compMeta.template.templateUrl;
                var interpolationConfig = InterpolationConfig.fromArray(compMeta.template.interpolation);
                errors.push.apply(errors, _toConsumableArray(messageBundle.updateFromTemplate(html, templateUrl, interpolationConfig)));
              });
            });

            if (errors.length) {
              throw new Error(errors.map(function (e) {
                return e.toString();
              }).join('\n'));
            }

            return messageBundle;
          }
        }, {
          key: "emitAllPartialModules",
          value: function emitAllPartialModules(_ref98, r3Files) {
            var _this397 = this;

            var ngModuleByPipeOrDirective = _ref98.ngModuleByPipeOrDirective,
                files = _ref98.files;
            var contextMap = new Map();

            var getContext = function getContext(fileName) {
              if (!contextMap.has(fileName)) {
                contextMap.set(fileName, _this397._createOutputContext(fileName));
              }

              return contextMap.get(fileName);
            };

            files.forEach(function (file) {
              return _this397._compilePartialModule(file.fileName, ngModuleByPipeOrDirective, file.directives, file.pipes, file.ngModules, file.injectables, getContext(file.fileName));
            });
            r3Files.forEach(function (file) {
              return _this397._compileShallowModules(file.fileName, file.shallowModules, getContext(file.fileName));
            });
            return Array.from(contextMap.values()).map(function (context) {
              return {
                fileName: context.genFilePath,
                statements: [].concat(_toConsumableArray(context.constantPool.statements), _toConsumableArray(context.statements))
              };
            });
          }
        }, {
          key: "_compileShallowModules",
          value: function _compileShallowModules(fileName, shallowModules, context) {
            var _this398 = this;

            shallowModules.forEach(function (module) {
              return compileNgModuleFromRender2(context, module, _this398._injectableCompiler);
            });
          }
        }, {
          key: "_compilePartialModule",
          value: function _compilePartialModule(fileName, ngModuleByPipeOrDirective, directives, pipes, ngModules, injectables, context) {
            var _this399 = this;

            var errors = [];
            var schemaRegistry = new DomElementSchemaRegistry();
            var hostBindingParser = new BindingParser(this._templateParser.expressionParser, DEFAULT_INTERPOLATION_CONFIG, schemaRegistry, [], errors); // Process all components and directives

            directives.forEach(function (directiveType) {
              var directiveMetadata = _this399._metadataResolver.getDirectiveMetadata(directiveType);

              if (directiveMetadata.isComponent) {
                var _module3 = ngModuleByPipeOrDirective.get(directiveType);

                _module3 || error("Cannot determine the module for component '".concat(identifierName(directiveMetadata.type), "'"));
                var htmlAst = directiveMetadata.template.htmlAst;
                var preserveWhitespaces = directiveMetadata.template.preserveWhitespaces;

                if (!preserveWhitespaces) {
                  htmlAst = removeWhitespaces(htmlAst);
                }

                var render3Ast = htmlAstToRender3Ast(htmlAst.rootNodes, hostBindingParser); // Map of StaticType by directive selectors

                var directiveTypeBySel = new Map();

                var _directives = _module3.transitiveModule.directives.map(function (dir) {
                  return _this399._metadataResolver.getDirectiveSummary(dir.reference);
                });

                _directives.forEach(function (directive) {
                  if (directive.selector) {
                    directiveTypeBySel.set(directive.selector, directive.type.reference);
                  }
                }); // Map of StaticType by pipe names


                var pipeTypeByName = new Map();

                var _pipes = _module3.transitiveModule.pipes.map(function (pipe) {
                  return _this399._metadataResolver.getPipeSummary(pipe.reference);
                });

                _pipes.forEach(function (pipe) {
                  pipeTypeByName.set(pipe.name, pipe.type.reference);
                });

                compileComponentFromRender2(context, directiveMetadata, render3Ast, _this399.reflector, hostBindingParser, directiveTypeBySel, pipeTypeByName);
              } else {
                compileDirectiveFromRender2(context, directiveMetadata, _this399.reflector, hostBindingParser);
              }
            });
            pipes.forEach(function (pipeType) {
              var pipeMetadata = _this399._metadataResolver.getPipeMetadata(pipeType);

              if (pipeMetadata) {
                compilePipeFromRender2(context, pipeMetadata, _this399.reflector);
              }
            });
            injectables.forEach(function (injectable) {
              return _this399._injectableCompiler.compile(injectable, context);
            });
          }
        }, {
          key: "emitAllPartialModules2",
          value: function emitAllPartialModules2(files) {
            var _this400 = this;

            // Using reduce like this is a select many pattern (where map is a select pattern)
            return files.reduce(function (r, file) {
              r.push.apply(r, _toConsumableArray(_this400._emitPartialModule2(file.fileName, file.injectables)));
              return r;
            }, []);
          }
        }, {
          key: "_emitPartialModule2",
          value: function _emitPartialModule2(fileName, injectables) {
            var _this401 = this;

            var context = this._createOutputContext(fileName);

            injectables.forEach(function (injectable) {
              return _this401._injectableCompiler.compile(injectable, context);
            });

            if (context.statements && context.statements.length > 0) {
              return [{
                fileName: fileName,
                statements: [].concat(_toConsumableArray(context.constantPool.statements), _toConsumableArray(context.statements))
              }];
            }

            return [];
          }
        }, {
          key: "emitAllImpls",
          value: function emitAllImpls(analyzeResult) {
            var _this402 = this;

            var ngModuleByPipeOrDirective = analyzeResult.ngModuleByPipeOrDirective,
                files = analyzeResult.files;
            var sourceModules = files.map(function (file) {
              return _this402._compileImplFile(file.fileName, ngModuleByPipeOrDirective, file.directives, file.pipes, file.ngModules, file.injectables);
            });
            return flatten(sourceModules);
          }
        }, {
          key: "_compileImplFile",
          value: function _compileImplFile(srcFileUrl, ngModuleByPipeOrDirective, directives, pipes, ngModules, injectables) {
            var _this403 = this;

            var fileSuffix = normalizeGenFileSuffix(splitTypescriptSuffix(srcFileUrl, true)[1]);
            var generatedFiles = [];

            var outputCtx = this._createOutputContext(ngfactoryFilePath(srcFileUrl, true));

            generatedFiles.push.apply(generatedFiles, _toConsumableArray(this._createSummary(srcFileUrl, directives, pipes, ngModules, injectables, outputCtx))); // compile all ng modules

            ngModules.forEach(function (ngModuleMeta) {
              return _this403._compileModule(outputCtx, ngModuleMeta);
            }); // compile components

            directives.forEach(function (dirType) {
              var compMeta = _this403._metadataResolver.getDirectiveMetadata(dirType);

              if (!compMeta.isComponent) {
                return;
              }

              var ngModule = ngModuleByPipeOrDirective.get(dirType);

              if (!ngModule) {
                throw new Error("Internal Error: cannot determine the module for component ".concat(identifierName(compMeta.type), "!"));
              } // compile styles


              var componentStylesheet = _this403._styleCompiler.compileComponent(outputCtx, compMeta); // Note: compMeta is a component and therefore template is non null.


              compMeta.template.externalStylesheets.forEach(function (stylesheetMeta) {
                // Note: fill non shim and shim style files as they might
                // be shared by component with and without ViewEncapsulation.
                var shim = _this403._styleCompiler.needsStyleShim(compMeta);

                generatedFiles.push(_this403._codegenStyles(srcFileUrl, compMeta, stylesheetMeta, shim, fileSuffix));

                if (_this403._options.allowEmptyCodegenFiles) {
                  generatedFiles.push(_this403._codegenStyles(srcFileUrl, compMeta, stylesheetMeta, !shim, fileSuffix));
                }
              }); // compile components

              var compViewVars = _this403._compileComponent(outputCtx, compMeta, ngModule, ngModule.transitiveModule.directives, componentStylesheet, fileSuffix);

              _this403._compileComponentFactory(outputCtx, compMeta, ngModule, fileSuffix);
            });

            if (outputCtx.statements.length > 0 || this._options.allowEmptyCodegenFiles) {
              var srcModule = this._codegenSourceModule(srcFileUrl, outputCtx);

              generatedFiles.unshift(srcModule);
            }

            return generatedFiles;
          }
        }, {
          key: "_createSummary",
          value: function _createSummary(srcFileName, directives, pipes, ngModules, injectables, ngFactoryCtx) {
            var _this404 = this;

            var symbolSummaries = this._symbolResolver.getSymbolsOf(srcFileName).map(function (symbol) {
              return _this404._symbolResolver.resolveSymbol(symbol);
            });

            var typeData = [].concat(_toConsumableArray(ngModules.map(function (meta) {
              return {
                summary: _this404._metadataResolver.getNgModuleSummary(meta.type.reference),
                metadata: _this404._metadataResolver.getNgModuleMetadata(meta.type.reference)
              };
            })), _toConsumableArray(directives.map(function (ref) {
              return {
                summary: _this404._metadataResolver.getDirectiveSummary(ref),
                metadata: _this404._metadataResolver.getDirectiveMetadata(ref)
              };
            })), _toConsumableArray(pipes.map(function (ref) {
              return {
                summary: _this404._metadataResolver.getPipeSummary(ref),
                metadata: _this404._metadataResolver.getPipeMetadata(ref)
              };
            })), _toConsumableArray(injectables.map(function (ref) {
              return {
                summary: _this404._metadataResolver.getInjectableSummary(ref.symbol),
                metadata: _this404._metadataResolver.getInjectableSummary(ref.symbol).type
              };
            })));
            var forJitOutputCtx = this._options.enableSummariesForJit ? this._createOutputContext(summaryForJitFileName(srcFileName, true)) : null;

            var _serializeSummaries = serializeSummaries(srcFileName, forJitOutputCtx, this._summaryResolver, this._symbolResolver, symbolSummaries, typeData, this._options.createExternalSymbolFactoryReexports),
                json = _serializeSummaries.json,
                exportAs = _serializeSummaries.exportAs;

            exportAs.forEach(function (entry) {
              ngFactoryCtx.statements.push(variable(entry.exportAs).set(ngFactoryCtx.importExpr(entry.symbol)).toDeclStmt(null, [StmtModifier.Exported]));
            });
            var summaryJson = new GeneratedFile(srcFileName, summaryFileName(srcFileName), json);
            var result = [summaryJson];

            if (forJitOutputCtx) {
              result.push(this._codegenSourceModule(srcFileName, forJitOutputCtx));
            }

            return result;
          }
        }, {
          key: "_compileModule",
          value: function _compileModule(outputCtx, ngModule) {
            var providers = [];

            if (this._options.locale) {
              var normalizedLocale = this._options.locale.replace(/_/g, '-');

              providers.push({
                token: createTokenForExternalReference(this.reflector, Identifiers.LOCALE_ID),
                useValue: normalizedLocale
              });
            }

            if (this._options.i18nFormat) {
              providers.push({
                token: createTokenForExternalReference(this.reflector, Identifiers.TRANSLATIONS_FORMAT),
                useValue: this._options.i18nFormat
              });
            }

            this._ngModuleCompiler.compile(outputCtx, ngModule, providers);
          }
        }, {
          key: "_compileComponentFactory",
          value: function _compileComponentFactory(outputCtx, compMeta, ngModule, fileSuffix) {
            var hostMeta = this._metadataResolver.getHostComponentMetadata(compMeta);

            var hostViewFactoryVar = this._compileComponent(outputCtx, hostMeta, ngModule, [compMeta.type], null, fileSuffix).viewClassVar;

            var compFactoryVar = componentFactoryName(compMeta.type.reference);
            var inputsExprs = [];

            for (var propName in compMeta.inputs) {
              var templateName = compMeta.inputs[propName]; // Don't quote so that the key gets minified...

              inputsExprs.push(new LiteralMapEntry(propName, literal(templateName), false));
            }

            var outputsExprs = [];

            for (var _propName in compMeta.outputs) {
              var _templateName = compMeta.outputs[_propName]; // Don't quote so that the key gets minified...

              outputsExprs.push(new LiteralMapEntry(_propName, literal(_templateName), false));
            }

            outputCtx.statements.push(variable(compFactoryVar).set(importExpr(Identifiers.createComponentFactory).callFn([literal(compMeta.selector), outputCtx.importExpr(compMeta.type.reference), variable(hostViewFactoryVar), new LiteralMapExpr(inputsExprs), new LiteralMapExpr(outputsExprs), literalArr(compMeta.template.ngContentSelectors.map(function (selector) {
              return literal(selector);
            }))])).toDeclStmt(importType(Identifiers.ComponentFactory, [expressionType(outputCtx.importExpr(compMeta.type.reference))], [TypeModifier.Const]), [StmtModifier.Final, StmtModifier.Exported]));
          }
        }, {
          key: "_compileComponent",
          value: function _compileComponent(outputCtx, compMeta, ngModule, directiveIdentifiers, componentStyles, fileSuffix) {
            var _this$_parseTemplate2 = this._parseTemplate(compMeta, ngModule, directiveIdentifiers),
                parsedTemplate = _this$_parseTemplate2.template,
                usedPipes = _this$_parseTemplate2.pipes;

            var stylesExpr = componentStyles ? variable(componentStyles.stylesVar) : literalArr([]);

            var viewResult = this._viewCompiler.compileComponent(outputCtx, compMeta, parsedTemplate, stylesExpr, usedPipes);

            if (componentStyles) {
              _resolveStyleStatements(this._symbolResolver, componentStyles, this._styleCompiler.needsStyleShim(compMeta), fileSuffix);
            }

            return viewResult;
          }
        }, {
          key: "_parseTemplate",
          value: function _parseTemplate(compMeta, ngModule, directiveIdentifiers) {
            var _this405 = this;

            if (this._templateAstCache.has(compMeta.type.reference)) {
              return this._templateAstCache.get(compMeta.type.reference);
            }

            var preserveWhitespaces = compMeta.template.preserveWhitespaces;
            var directives = directiveIdentifiers.map(function (dir) {
              return _this405._metadataResolver.getDirectiveSummary(dir.reference);
            });
            var pipes = ngModule.transitiveModule.pipes.map(function (pipe) {
              return _this405._metadataResolver.getPipeSummary(pipe.reference);
            });

            var result = this._templateParser.parse(compMeta, compMeta.template.htmlAst, directives, pipes, ngModule.schemas, templateSourceUrl(ngModule.type, compMeta, compMeta.template), preserveWhitespaces);

            this._templateAstCache.set(compMeta.type.reference, result);

            return result;
          }
        }, {
          key: "_createOutputContext",
          value: function _createOutputContext(genFilePath) {
            var _this406 = this;

            var importExpr$1 = function importExpr$1(symbol) {
              var typeParams = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
              var useSummaries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;

              if (!(symbol instanceof StaticSymbol)) {
                throw new Error("Internal error: unknown identifier ".concat(JSON.stringify(symbol)));
              }

              var arity = _this406._symbolResolver.getTypeArity(symbol) || 0;

              var _ref99 = _this406._symbolResolver.getImportAs(symbol, useSummaries) || symbol,
                  filePath = _ref99.filePath,
                  name = _ref99.name,
                  members = _ref99.members;

              var importModule = _this406._fileNameToModuleName(filePath, genFilePath); // It should be good enough to compare filePath to genFilePath and if they are equal
              // there is a self reference. However, ngfactory files generate to .ts but their
              // symbols have .d.ts so a simple compare is insufficient. They should be canonical
              // and is tracked by #17705.


              var selfReference = _this406._fileNameToModuleName(genFilePath, genFilePath);

              var moduleName = importModule === selfReference ? null : importModule; // If we are in a type expression that refers to a generic type then supply
              // the required type parameters. If there were not enough type parameters
              // supplied, supply any as the type. Outside a type expression the reference
              // should not supply type parameters and be treated as a simple value reference
              // to the constructor function itself.

              var suppliedTypeParams = typeParams || [];
              var missingTypeParamsCount = arity - suppliedTypeParams.length;
              var allTypeParams = suppliedTypeParams.concat(newArray(missingTypeParamsCount, DYNAMIC_TYPE));
              return members.reduce(function (expr, memberName) {
                return expr.prop(memberName);
              }, importExpr(new ExternalReference(moduleName, name, null), allTypeParams));
            };

            return {
              statements: [],
              genFilePath: genFilePath,
              importExpr: importExpr$1,
              constantPool: new ConstantPool()
            };
          }
        }, {
          key: "_fileNameToModuleName",
          value: function _fileNameToModuleName(importedFilePath, containingFilePath) {
            return this._summaryResolver.getKnownModuleName(importedFilePath) || this._symbolResolver.getKnownModuleName(importedFilePath) || this._host.fileNameToModuleName(importedFilePath, containingFilePath);
          }
        }, {
          key: "_codegenStyles",
          value: function _codegenStyles(srcFileUrl, compMeta, stylesheetMetadata, isShimmed, fileSuffix) {
            var outputCtx = this._createOutputContext(_stylesModuleUrl(stylesheetMetadata.moduleUrl, isShimmed, fileSuffix));

            var compiledStylesheet = this._styleCompiler.compileStyles(outputCtx, compMeta, stylesheetMetadata, isShimmed);

            _resolveStyleStatements(this._symbolResolver, compiledStylesheet, isShimmed, fileSuffix);

            return this._codegenSourceModule(srcFileUrl, outputCtx);
          }
        }, {
          key: "_codegenSourceModule",
          value: function _codegenSourceModule(srcFileUrl, ctx) {
            return new GeneratedFile(srcFileUrl, ctx.genFilePath, ctx.statements);
          }
        }, {
          key: "listLazyRoutes",
          value: function listLazyRoutes(entryRoute, analyzedModules) {
            var self = this;

            if (entryRoute) {
              var symbol = parseLazyRoute(entryRoute, this.reflector).referencedModule;
              return visitLazyRoute(symbol);
            } else if (analyzedModules) {
              var allLazyRoutes = [];

              var _iterator43 = _createForOfIteratorHelper(analyzedModules.ngModules),
                  _step43;

              try {
                for (_iterator43.s(); !(_step43 = _iterator43.n()).done;) {
                  var ngModule = _step43.value;

                  var lazyRoutes = _listLazyRoutes(ngModule, this.reflector);

                  var _iterator44 = _createForOfIteratorHelper(lazyRoutes),
                      _step44;

                  try {
                    for (_iterator44.s(); !(_step44 = _iterator44.n()).done;) {
                      var lazyRoute = _step44.value;
                      allLazyRoutes.push(lazyRoute);
                    }
                  } catch (err) {
                    _iterator44.e(err);
                  } finally {
                    _iterator44.f();
                  }
                }
              } catch (err) {
                _iterator43.e(err);
              } finally {
                _iterator43.f();
              }

              return allLazyRoutes;
            } else {
              throw new Error("Either route or analyzedModules has to be specified!");
            }

            function visitLazyRoute(symbol) {
              var seenRoutes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Set();
              var allLazyRoutes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];

              // Support pointing to default exports, but stop recursing there,
              // as the StaticReflector does not yet support default exports.
              if (seenRoutes.has(symbol) || !symbol.name) {
                return allLazyRoutes;
              }

              seenRoutes.add(symbol);

              var lazyRoutes = _listLazyRoutes(self._metadataResolver.getNgModuleMetadata(symbol, true), self.reflector);

              var _iterator45 = _createForOfIteratorHelper(lazyRoutes),
                  _step45;

              try {
                for (_iterator45.s(); !(_step45 = _iterator45.n()).done;) {
                  var _lazyRoute = _step45.value;
                  allLazyRoutes.push(_lazyRoute);
                  visitLazyRoute(_lazyRoute.referencedModule, seenRoutes, allLazyRoutes);
                }
              } catch (err) {
                _iterator45.e(err);
              } finally {
                _iterator45.f();
              }

              return allLazyRoutes;
            }
          }
        }]);

        return AotCompiler;
      }();

      function _createEmptyStub(outputCtx) {
        // Note: We need to produce at least one import statement so that
        // TypeScript knows that the file is an es6 module. Otherwise our generated
        // exports / imports won't be emitted properly by TypeScript.
        outputCtx.statements.push(importExpr(Identifiers.ComponentFactory).toStmt());
      }

      function _resolveStyleStatements(symbolResolver, compileResult, needsShim, fileSuffix) {
        compileResult.dependencies.forEach(function (dep) {
          dep.setValue(symbolResolver.getStaticSymbol(_stylesModuleUrl(dep.moduleUrl, needsShim, fileSuffix), dep.name));
        });
      }

      function _stylesModuleUrl(stylesheetUrl, shim, suffix) {
        return "".concat(stylesheetUrl).concat(shim ? '.shim' : '', ".ngstyle").concat(suffix);
      }

      function analyzeNgModules(fileNames, host, staticSymbolResolver, metadataResolver) {
        var files = _analyzeFilesIncludingNonProgramFiles(fileNames, host, staticSymbolResolver, metadataResolver);

        return mergeAnalyzedFiles(files);
      }

      function analyzeAndValidateNgModules(fileNames, host, staticSymbolResolver, metadataResolver) {
        return validateAnalyzedModules(analyzeNgModules(fileNames, host, staticSymbolResolver, metadataResolver));
      }

      function validateAnalyzedModules(analyzedModules) {
        if (analyzedModules.symbolsMissingModule && analyzedModules.symbolsMissingModule.length) {
          var messages = analyzedModules.symbolsMissingModule.map(function (s) {
            return "Cannot determine the module for class ".concat(s.name, " in ").concat(s.filePath, "! Add ").concat(s.name, " to the NgModule to fix it.");
          });
          throw syntaxError(messages.join('\n'));
        }

        return analyzedModules;
      } // Analyzes all of the program files,
      // including files that are not part of the program
      // but are referenced by an NgModule.


      function _analyzeFilesIncludingNonProgramFiles(fileNames, host, staticSymbolResolver, metadataResolver) {
        var seenFiles = new Set();
        var files = [];

        var visitFile = function visitFile(fileName) {
          if (seenFiles.has(fileName) || !host.isSourceFile(fileName)) {
            return false;
          }

          seenFiles.add(fileName);
          var analyzedFile = analyzeFile(host, staticSymbolResolver, metadataResolver, fileName);
          files.push(analyzedFile);
          analyzedFile.ngModules.forEach(function (ngModule) {
            ngModule.transitiveModule.modules.forEach(function (modMeta) {
              return visitFile(modMeta.reference.filePath);
            });
          });
        };

        fileNames.forEach(function (fileName) {
          return visitFile(fileName);
        });
        return files;
      }

      function analyzeFile(host, staticSymbolResolver, metadataResolver, fileName) {
        var abstractDirectives = [];
        var directives = [];
        var pipes = [];
        var injectables = [];
        var ngModules = [];
        var hasDecorators = staticSymbolResolver.hasDecorators(fileName);
        var exportsNonSourceFiles = false;
        var isDeclarationFile = fileName.endsWith('.d.ts'); // Don't analyze .d.ts files that have no decorators as a shortcut
        // to speed up the analysis. This prevents us from
        // resolving the references in these files.
        // Note: exportsNonSourceFiles is only needed when compiling with summaries,
        // which is not the case when .d.ts files are treated as input files.

        if (!isDeclarationFile || hasDecorators) {
          staticSymbolResolver.getSymbolsOf(fileName).forEach(function (symbol) {
            var resolvedSymbol = staticSymbolResolver.resolveSymbol(symbol);
            var symbolMeta = resolvedSymbol.metadata;

            if (!symbolMeta || symbolMeta.__symbolic === 'error') {
              return;
            }

            var isNgSymbol = false;

            if (symbolMeta.__symbolic === 'class') {
              if (metadataResolver.isDirective(symbol)) {
                isNgSymbol = true; // This directive either has a selector or doesn't. Selector-less directives get tracked
                // in abstractDirectives, not directives. The compiler doesn't deal with selector-less
                // directives at all, really, other than to persist their metadata. This is done so that
                // apps will have an easier time migrating to Ivy, which requires the selector-less
                // annotations to be applied.

                if (!metadataResolver.isAbstractDirective(symbol)) {
                  // The directive is an ordinary directive.
                  directives.push(symbol);
                } else {
                  // The directive has no selector and is an "abstract" directive, so track it
                  // accordingly.
                  abstractDirectives.push(symbol);
                }
              } else if (metadataResolver.isPipe(symbol)) {
                isNgSymbol = true;
                pipes.push(symbol);
              } else if (metadataResolver.isNgModule(symbol)) {
                var ngModule = metadataResolver.getNgModuleMetadata(symbol, false);

                if (ngModule) {
                  isNgSymbol = true;
                  ngModules.push(ngModule);
                }
              } else if (metadataResolver.isInjectable(symbol)) {
                isNgSymbol = true;
                var injectable = metadataResolver.getInjectableMetadata(symbol, null, false);

                if (injectable) {
                  injectables.push(injectable);
                }
              }
            }

            if (!isNgSymbol) {
              exportsNonSourceFiles = exportsNonSourceFiles || isValueExportingNonSourceFile(host, symbolMeta);
            }
          });
        }

        return {
          fileName: fileName,
          directives: directives,
          abstractDirectives: abstractDirectives,
          pipes: pipes,
          ngModules: ngModules,
          injectables: injectables,
          exportsNonSourceFiles: exportsNonSourceFiles
        };
      }

      function analyzeFileForInjectables(host, staticSymbolResolver, metadataResolver, fileName) {
        var injectables = [];
        var shallowModules = [];

        if (staticSymbolResolver.hasDecorators(fileName)) {
          staticSymbolResolver.getSymbolsOf(fileName).forEach(function (symbol) {
            var resolvedSymbol = staticSymbolResolver.resolveSymbol(symbol);
            var symbolMeta = resolvedSymbol.metadata;

            if (!symbolMeta || symbolMeta.__symbolic === 'error') {
              return;
            }

            if (symbolMeta.__symbolic === 'class') {
              if (metadataResolver.isInjectable(symbol)) {
                var injectable = metadataResolver.getInjectableMetadata(symbol, null, false);

                if (injectable) {
                  injectables.push(injectable);
                }
              } else if (metadataResolver.isNgModule(symbol)) {
                var _module4 = metadataResolver.getShallowModuleMetadata(symbol);

                if (_module4) {
                  shallowModules.push(_module4);
                }
              }
            }
          });
        }

        return {
          fileName: fileName,
          injectables: injectables,
          shallowModules: shallowModules
        };
      }

      function isValueExportingNonSourceFile(host, metadata) {
        var exportsNonSourceFiles = false;

        var Visitor = /*#__PURE__*/function () {
          function Visitor() {
            _classCallCheck2(this, Visitor);
          }

          _createClass2(Visitor, [{
            key: "visitArray",
            value: function visitArray(arr, context) {
              var _this407 = this;

              arr.forEach(function (v) {
                return visitValue(v, _this407, context);
              });
            }
          }, {
            key: "visitStringMap",
            value: function visitStringMap(map, context) {
              var _this408 = this;

              Object.keys(map).forEach(function (key) {
                return visitValue(map[key], _this408, context);
              });
            }
          }, {
            key: "visitPrimitive",
            value: function visitPrimitive(value, context) {}
          }, {
            key: "visitOther",
            value: function visitOther(value, context) {
              if (value instanceof StaticSymbol && !host.isSourceFile(value.filePath)) {
                exportsNonSourceFiles = true;
              }
            }
          }]);

          return Visitor;
        }();

        visitValue(metadata, new Visitor(), null);
        return exportsNonSourceFiles;
      }

      function mergeAnalyzedFiles(analyzedFiles) {
        var allNgModules = [];
        var ngModuleByPipeOrDirective = new Map();
        var allPipesAndDirectives = new Set();
        analyzedFiles.forEach(function (af) {
          af.ngModules.forEach(function (ngModule) {
            allNgModules.push(ngModule);
            ngModule.declaredDirectives.forEach(function (d) {
              return ngModuleByPipeOrDirective.set(d.reference, ngModule);
            });
            ngModule.declaredPipes.forEach(function (p) {
              return ngModuleByPipeOrDirective.set(p.reference, ngModule);
            });
          });
          af.directives.forEach(function (d) {
            return allPipesAndDirectives.add(d);
          });
          af.pipes.forEach(function (p) {
            return allPipesAndDirectives.add(p);
          });
        });
        var symbolsMissingModule = [];
        allPipesAndDirectives.forEach(function (ref) {
          if (!ngModuleByPipeOrDirective.has(ref)) {
            symbolsMissingModule.push(ref);
          }
        });
        return {
          ngModules: allNgModules,
          ngModuleByPipeOrDirective: ngModuleByPipeOrDirective,
          symbolsMissingModule: symbolsMissingModule,
          files: analyzedFiles
        };
      }

      function mergeAndValidateNgFiles(files) {
        return validateAnalyzedModules(mergeAnalyzedFiles(files));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var FORMATTED_MESSAGE = 'ngFormattedMessage';

      function indentStr(level) {
        if (level <= 0) return '';
        if (level < 6) return ['', ' ', '  ', '   ', '    ', '     '][level];
        var half = indentStr(Math.floor(level / 2));
        return half + half + (level % 2 === 1 ? ' ' : '');
      }

      function formatChain(chain) {
        var indent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
        if (!chain) return '';
        var position = chain.position ? "".concat(chain.position.fileName, "(").concat(chain.position.line + 1, ",").concat(chain.position.column + 1, ")") : '';
        var prefix = position && indent === 0 ? "".concat(position, ": ") : '';
        var postfix = position && indent !== 0 ? " at ".concat(position) : '';
        var message = "".concat(prefix).concat(chain.message).concat(postfix);

        if (chain.next) {
          var _iterator46 = _createForOfIteratorHelper(chain.next),
              _step46;

          try {
            for (_iterator46.s(); !(_step46 = _iterator46.n()).done;) {
              var kid = _step46.value;
              message += '\n' + formatChain(kid, indent + 2);
            }
          } catch (err) {
            _iterator46.e(err);
          } finally {
            _iterator46.f();
          }
        }

        return "".concat(indentStr(indent)).concat(message);
      }

      function formattedError(chain) {
        var message = formatChain(chain) + '.';
        var error = syntaxError(message);
        error[FORMATTED_MESSAGE] = true;
        error.chain = chain;
        error.position = chain.position;
        return error;
      }

      function isFormattedError(error) {
        return !!error[FORMATTED_MESSAGE];
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ANGULAR_CORE = '@angular/core';
      var ANGULAR_ROUTER = '@angular/router';
      var HIDDEN_KEY = /^\$.*\$$/;
      var IGNORE = {
        __symbolic: 'ignore'
      };
      var USE_VALUE$1 = 'useValue';
      var PROVIDE = 'provide';
      var REFERENCE_SET = new Set([USE_VALUE$1, 'useFactory', 'data', 'id', 'loadChildren']);
      var TYPEGUARD_POSTFIX = 'TypeGuard';
      var USE_IF = 'UseIf';

      function shouldIgnore(value) {
        return value && value.__symbolic == 'ignore';
      }
      /**
       * A static reflector implements enough of the Reflector API that is necessary to compile
       * templates statically.
       */


      var StaticReflector = /*#__PURE__*/function () {
        function StaticReflector(summaryResolver, symbolResolver) {
          var _this409 = this;

          var knownMetadataClasses = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
          var knownMetadataFunctions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
          var errorRecorder = arguments.length > 4 ? arguments[4] : undefined;

          _classCallCheck2(this, StaticReflector);

          this.summaryResolver = summaryResolver;
          this.symbolResolver = symbolResolver;
          this.errorRecorder = errorRecorder;
          this.annotationCache = new Map();
          this.shallowAnnotationCache = new Map();
          this.propertyCache = new Map();
          this.parameterCache = new Map();
          this.methodCache = new Map();
          this.staticCache = new Map();
          this.conversionMap = new Map();
          this.resolvedExternalReferences = new Map();
          this.annotationForParentClassWithSummaryKind = new Map();
          this.initializeConversionMap();
          knownMetadataClasses.forEach(function (kc) {
            return _this409._registerDecoratorOrConstructor(_this409.getStaticSymbol(kc.filePath, kc.name), kc.ctor);
          });
          knownMetadataFunctions.forEach(function (kf) {
            return _this409._registerFunction(_this409.getStaticSymbol(kf.filePath, kf.name), kf.fn);
          });
          this.annotationForParentClassWithSummaryKind.set(CompileSummaryKind.Directive, [createDirective, createComponent]);
          this.annotationForParentClassWithSummaryKind.set(CompileSummaryKind.Pipe, [createPipe]);
          this.annotationForParentClassWithSummaryKind.set(CompileSummaryKind.NgModule, [createNgModule]);
          this.annotationForParentClassWithSummaryKind.set(CompileSummaryKind.Injectable, [createInjectable, createPipe, createDirective, createComponent, createNgModule]);
        }

        _createClass2(StaticReflector, [{
          key: "componentModuleUrl",
          value: function componentModuleUrl(typeOrFunc) {
            var staticSymbol = this.findSymbolDeclaration(typeOrFunc);
            return this.symbolResolver.getResourcePath(staticSymbol);
          }
          /**
           * Invalidate the specified `symbols` on program change.
           * @param symbols
           */

        }, {
          key: "invalidateSymbols",
          value: function invalidateSymbols(symbols) {
            var _iterator47 = _createForOfIteratorHelper(symbols),
                _step47;

            try {
              for (_iterator47.s(); !(_step47 = _iterator47.n()).done;) {
                var symbol = _step47.value;
                this.annotationCache["delete"](symbol);
                this.shallowAnnotationCache["delete"](symbol);
                this.propertyCache["delete"](symbol);
                this.parameterCache["delete"](symbol);
                this.methodCache["delete"](symbol);
                this.staticCache["delete"](symbol);
                this.conversionMap["delete"](symbol);
              }
            } catch (err) {
              _iterator47.e(err);
            } finally {
              _iterator47.f();
            }
          }
        }, {
          key: "resolveExternalReference",
          value: function resolveExternalReference(ref, containingFile) {
            var key = undefined;

            if (!containingFile) {
              key = "".concat(ref.moduleName, ":").concat(ref.name);

              var _declarationSymbol = this.resolvedExternalReferences.get(key);

              if (_declarationSymbol) return _declarationSymbol;
            }

            var refSymbol = this.symbolResolver.getSymbolByModule(ref.moduleName, ref.name, containingFile);
            var declarationSymbol = this.findSymbolDeclaration(refSymbol);

            if (!containingFile) {
              this.symbolResolver.recordModuleNameForFileName(refSymbol.filePath, ref.moduleName);
              this.symbolResolver.recordImportAs(declarationSymbol, refSymbol);
            }

            if (key) {
              this.resolvedExternalReferences.set(key, declarationSymbol);
            }

            return declarationSymbol;
          }
        }, {
          key: "findDeclaration",
          value: function findDeclaration(moduleUrl, name, containingFile) {
            return this.findSymbolDeclaration(this.symbolResolver.getSymbolByModule(moduleUrl, name, containingFile));
          }
        }, {
          key: "tryFindDeclaration",
          value: function tryFindDeclaration(moduleUrl, name, containingFile) {
            var _this410 = this;

            return this.symbolResolver.ignoreErrorsFor(function () {
              return _this410.findDeclaration(moduleUrl, name, containingFile);
            });
          }
        }, {
          key: "findSymbolDeclaration",
          value: function findSymbolDeclaration(symbol) {
            var resolvedSymbol = this.symbolResolver.resolveSymbol(symbol);

            if (resolvedSymbol) {
              var resolvedMetadata = resolvedSymbol.metadata;

              if (resolvedMetadata && resolvedMetadata.__symbolic === 'resolved') {
                resolvedMetadata = resolvedMetadata.symbol;
              }

              if (resolvedMetadata instanceof StaticSymbol) {
                return this.findSymbolDeclaration(resolvedSymbol.metadata);
              }
            }

            return symbol;
          }
        }, {
          key: "tryAnnotations",
          value: function tryAnnotations(type) {
            var originalRecorder = this.errorRecorder;

            this.errorRecorder = function (error, fileName) {};

            try {
              return this.annotations(type);
            } finally {
              this.errorRecorder = originalRecorder;
            }
          }
        }, {
          key: "annotations",
          value: function annotations(type) {
            var _this411 = this;

            return this._annotations(type, function (type, decorators) {
              return _this411.simplify(type, decorators);
            }, this.annotationCache);
          }
        }, {
          key: "shallowAnnotations",
          value: function shallowAnnotations(type) {
            var _this412 = this;

            return this._annotations(type, function (type, decorators) {
              return _this412.simplify(type, decorators, true);
            }, this.shallowAnnotationCache);
          }
        }, {
          key: "_annotations",
          value: function _annotations(type, simplify, annotationCache) {
            var annotations = annotationCache.get(type);

            if (!annotations) {
              annotations = [];
              var classMetadata = this.getTypeMetadata(type);
              var parentType = this.findParentType(type, classMetadata);

              if (parentType) {
                var _annotations2;

                var parentAnnotations = this.annotations(parentType);

                (_annotations2 = annotations).push.apply(_annotations2, _toConsumableArray(parentAnnotations));
              }

              var ownAnnotations = [];

              if (classMetadata['decorators']) {
                ownAnnotations = simplify(type, classMetadata['decorators']);

                if (ownAnnotations) {
                  var _annotations3;

                  (_annotations3 = annotations).push.apply(_annotations3, _toConsumableArray(ownAnnotations));
                }
              }

              if (parentType && !this.summaryResolver.isLibraryFile(type.filePath) && this.summaryResolver.isLibraryFile(parentType.filePath)) {
                var summary = this.summaryResolver.resolveSummary(parentType);

                if (summary && summary.type) {
                  var requiredAnnotationTypes = this.annotationForParentClassWithSummaryKind.get(summary.type.summaryKind);
                  var typeHasRequiredAnnotation = requiredAnnotationTypes.some(function (requiredType) {
                    return ownAnnotations.some(function (ann) {
                      return requiredType.isTypeOf(ann);
                    });
                  });

                  if (!typeHasRequiredAnnotation) {
                    this.reportError(formatMetadataError(metadataError("Class ".concat(type.name, " in ").concat(type.filePath, " extends from a ").concat(CompileSummaryKind[summary.type.summaryKind], " in another compilation unit without duplicating the decorator"),
                    /* summary */
                    undefined, "Please add a ".concat(requiredAnnotationTypes.map(function (type) {
                      return type.ngMetadataName;
                    }).join(' or '), " decorator to the class")), type), type);
                  }
                }
              }

              annotationCache.set(type, annotations.filter(function (ann) {
                return !!ann;
              }));
            }

            return annotations;
          }
        }, {
          key: "propMetadata",
          value: function propMetadata(type) {
            var _this413 = this;

            var propMetadata = this.propertyCache.get(type);

            if (!propMetadata) {
              var classMetadata = this.getTypeMetadata(type);
              propMetadata = {};
              var parentType = this.findParentType(type, classMetadata);

              if (parentType) {
                var parentPropMetadata = this.propMetadata(parentType);
                Object.keys(parentPropMetadata).forEach(function (parentProp) {
                  propMetadata[parentProp] = parentPropMetadata[parentProp];
                });
              }

              var members = classMetadata['members'] || {};
              Object.keys(members).forEach(function (propName) {
                var propData = members[propName];
                var prop = propData.find(function (a) {
                  return a['__symbolic'] == 'property' || a['__symbolic'] == 'method';
                });
                var decorators = []; // hasOwnProperty() is used here to make sure we do not look up methods
                // on `Object.prototype`.

                if (propMetadata === null || propMetadata === void 0 ? void 0 : propMetadata.hasOwnProperty(propName)) {
                  decorators.push.apply(decorators, _toConsumableArray(propMetadata[propName]));
                }

                propMetadata[propName] = decorators;

                if (prop && prop['decorators']) {
                  decorators.push.apply(decorators, _toConsumableArray(_this413.simplify(type, prop['decorators'])));
                }
              });
              this.propertyCache.set(type, propMetadata);
            }

            return propMetadata;
          }
        }, {
          key: "parameters",
          value: function parameters(type) {
            var _this414 = this;

            if (!(type instanceof StaticSymbol)) {
              this.reportError(new Error("parameters received ".concat(JSON.stringify(type), " which is not a StaticSymbol")), type);
              return [];
            }

            try {
              var parameters = this.parameterCache.get(type);

              if (!parameters) {
                var classMetadata = this.getTypeMetadata(type);
                var parentType = this.findParentType(type, classMetadata);
                var members = classMetadata ? classMetadata['members'] : null;
                var ctorData = members ? members['__ctor__'] : null;

                if (ctorData) {
                  var ctor = ctorData.find(function (a) {
                    return a['__symbolic'] == 'constructor';
                  });
                  var rawParameterTypes = ctor['parameters'] || [];
                  var parameterDecorators = this.simplify(type, ctor['parameterDecorators'] || []);
                  parameters = [];
                  rawParameterTypes.forEach(function (rawParamType, index) {
                    var nestedResult = [];

                    var paramType = _this414.trySimplify(type, rawParamType);

                    if (paramType) nestedResult.push(paramType);
                    var decorators = parameterDecorators ? parameterDecorators[index] : null;

                    if (decorators) {
                      nestedResult.push.apply(nestedResult, _toConsumableArray(decorators));
                    }

                    parameters.push(nestedResult);
                  });
                } else if (parentType) {
                  parameters = this.parameters(parentType);
                }

                if (!parameters) {
                  parameters = [];
                }

                this.parameterCache.set(type, parameters);
              }

              return parameters;
            } catch (e) {
              console.error("Failed on type ".concat(JSON.stringify(type), " with error ").concat(e));
              throw e;
            }
          }
        }, {
          key: "_methodNames",
          value: function _methodNames(type) {
            var methodNames = this.methodCache.get(type);

            if (!methodNames) {
              var classMetadata = this.getTypeMetadata(type);
              methodNames = {};
              var parentType = this.findParentType(type, classMetadata);

              if (parentType) {
                var parentMethodNames = this._methodNames(parentType);

                Object.keys(parentMethodNames).forEach(function (parentProp) {
                  methodNames[parentProp] = parentMethodNames[parentProp];
                });
              }

              var members = classMetadata['members'] || {};
              Object.keys(members).forEach(function (propName) {
                var propData = members[propName];
                var isMethod = propData.some(function (a) {
                  return a['__symbolic'] == 'method';
                });
                methodNames[propName] = methodNames[propName] || isMethod;
              });
              this.methodCache.set(type, methodNames);
            }

            return methodNames;
          }
        }, {
          key: "_staticMembers",
          value: function _staticMembers(type) {
            var staticMembers = this.staticCache.get(type);

            if (!staticMembers) {
              var classMetadata = this.getTypeMetadata(type);
              var staticMemberData = classMetadata['statics'] || {};
              staticMembers = Object.keys(staticMemberData);
              this.staticCache.set(type, staticMembers);
            }

            return staticMembers;
          }
        }, {
          key: "findParentType",
          value: function findParentType(type, classMetadata) {
            var parentType = this.trySimplify(type, classMetadata['extends']);

            if (parentType instanceof StaticSymbol) {
              return parentType;
            }
          }
        }, {
          key: "hasLifecycleHook",
          value: function hasLifecycleHook(type, lcProperty) {
            if (!(type instanceof StaticSymbol)) {
              this.reportError(new Error("hasLifecycleHook received ".concat(JSON.stringify(type), " which is not a StaticSymbol")), type);
            }

            try {
              return !!this._methodNames(type)[lcProperty];
            } catch (e) {
              console.error("Failed on type ".concat(JSON.stringify(type), " with error ").concat(e));
              throw e;
            }
          }
        }, {
          key: "guards",
          value: function guards(type) {
            if (!(type instanceof StaticSymbol)) {
              this.reportError(new Error("guards received ".concat(JSON.stringify(type), " which is not a StaticSymbol")), type);
              return {};
            }

            var staticMembers = this._staticMembers(type);

            var result = {};

            var _iterator48 = _createForOfIteratorHelper(staticMembers),
                _step48;

            try {
              for (_iterator48.s(); !(_step48 = _iterator48.n()).done;) {
                var name = _step48.value;

                if (name.endsWith(TYPEGUARD_POSTFIX)) {
                  var property = name.substr(0, name.length - TYPEGUARD_POSTFIX.length);
                  var value = void 0;

                  if (property.endsWith(USE_IF)) {
                    property = name.substr(0, property.length - USE_IF.length);
                    value = USE_IF;
                  } else {
                    value = this.getStaticSymbol(type.filePath, type.name, [name]);
                  }

                  result[property] = value;
                }
              }
            } catch (err) {
              _iterator48.e(err);
            } finally {
              _iterator48.f();
            }

            return result;
          }
        }, {
          key: "_registerDecoratorOrConstructor",
          value: function _registerDecoratorOrConstructor(type, ctor) {
            this.conversionMap.set(type, function (context, args) {
              return _construct2(ctor, _toConsumableArray(args));
            });
          }
        }, {
          key: "_registerFunction",
          value: function _registerFunction(type, fn) {
            this.conversionMap.set(type, function (context, args) {
              return fn.apply(undefined, args);
            });
          }
        }, {
          key: "initializeConversionMap",
          value: function initializeConversionMap() {
            this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Injectable'), createInjectable);

            this.injectionToken = this.findDeclaration(ANGULAR_CORE, 'InjectionToken');
            this.opaqueToken = this.findDeclaration(ANGULAR_CORE, 'OpaqueToken');
            this.ROUTES = this.tryFindDeclaration(ANGULAR_ROUTER, 'ROUTES');
            this.ANALYZE_FOR_ENTRY_COMPONENTS = this.findDeclaration(ANGULAR_CORE, 'ANALYZE_FOR_ENTRY_COMPONENTS');

            this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Host'), createHost);

            this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Self'), createSelf);

            this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'SkipSelf'), createSkipSelf);

            this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Inject'), createInject);

            this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Optional'), createOptional);

            this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Attribute'), createAttribute);

            this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'ContentChild'), createContentChild);

            this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'ContentChildren'), createContentChildren);

            this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'ViewChild'), createViewChild);

            this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'ViewChildren'), createViewChildren);

            this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Input'), createInput);

            this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Output'), createOutput);

            this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Pipe'), createPipe);

            this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'HostBinding'), createHostBinding);

            this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'HostListener'), createHostListener);

            this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Directive'), createDirective);

            this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Component'), createComponent);

            this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'NgModule'), createNgModule); // Note: Some metadata classes can be used directly with Provider.deps.


            this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Host'), createHost);

            this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Self'), createSelf);

            this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'SkipSelf'), createSkipSelf);

            this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Optional'), createOptional);
          }
          /**
           * getStaticSymbol produces a Type whose metadata is known but whose implementation is not loaded.
           * All types passed to the StaticResolver should be pseudo-types returned by this method.
           *
           * @param declarationFile the absolute path of the file where the symbol is declared
           * @param name the name of the type.
           */

        }, {
          key: "getStaticSymbol",
          value: function getStaticSymbol(declarationFile, name, members) {
            return this.symbolResolver.getStaticSymbol(declarationFile, name, members);
          }
          /**
           * Simplify but discard any errors
           */

        }, {
          key: "trySimplify",
          value: function trySimplify(context, value) {
            var originalRecorder = this.errorRecorder;

            this.errorRecorder = function (error, fileName) {};

            var result = this.simplify(context, value);
            this.errorRecorder = originalRecorder;
            return result;
          }
          /** @internal */

        }, {
          key: "simplify",
          value: function simplify(context, value) {
            var lazy = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
            var self = this;
            var scope = BindingScope$1.empty;
            var calling = new Map();
            var rootContext = context;

            function simplifyInContext(context, value, depth, references) {
              function resolveReferenceValue(staticSymbol) {
                var resolvedSymbol = self.symbolResolver.resolveSymbol(staticSymbol);
                return resolvedSymbol ? resolvedSymbol.metadata : null;
              }

              function simplifyEagerly(value) {
                return simplifyInContext(context, value, depth, 0);
              }

              function simplifyLazily(value) {
                return simplifyInContext(context, value, depth, references + 1);
              }

              function simplifyNested(nestedContext, value) {
                if (nestedContext === context) {
                  // If the context hasn't changed let the exception propagate unmodified.
                  return simplifyInContext(nestedContext, value, depth + 1, references);
                }

                try {
                  return simplifyInContext(nestedContext, value, depth + 1, references);
                } catch (e) {
                  if (isMetadataError(e)) {
                    // Propagate the message text up but add a message to the chain that explains how we got
                    // here.
                    // e.chain implies e.symbol
                    var summaryMsg = e.chain ? 'references \'' + e.symbol.name + '\'' : errorSummary(e);
                    var summary = "'".concat(nestedContext.name, "' ").concat(summaryMsg);
                    var chain = {
                      message: summary,
                      position: e.position,
                      next: e.chain
                    }; // TODO(chuckj): retrieve the position information indirectly from the collectors node
                    // map if the metadata is from a .ts file.

                    self.error({
                      message: e.message,
                      advise: e.advise,
                      context: e.context,
                      chain: chain,
                      symbol: nestedContext
                    }, context);
                  } else {
                    // It is probably an internal error.
                    throw e;
                  }
                }
              }

              function simplifyCall(functionSymbol, targetFunction, args, targetExpression) {
                if (targetFunction && targetFunction['__symbolic'] == 'function') {
                  if (calling.get(functionSymbol)) {
                    self.error({
                      message: 'Recursion is not supported',
                      summary: "called '".concat(functionSymbol.name, "' recursively"),
                      value: targetFunction
                    }, functionSymbol);
                  }

                  try {
                    var _value7 = targetFunction['value'];

                    if (_value7 && (depth != 0 || _value7.__symbolic != 'error')) {
                      var parameters = targetFunction['parameters'];
                      var defaults = targetFunction.defaults;
                      args = args.map(function (arg) {
                        return simplifyNested(context, arg);
                      }).map(function (arg) {
                        return shouldIgnore(arg) ? undefined : arg;
                      });

                      if (defaults && defaults.length > args.length) {
                        var _args3;

                        (_args3 = args).push.apply(_args3, _toConsumableArray(defaults.slice(args.length).map(function (value) {
                          return simplify(value);
                        })));
                      }

                      calling.set(functionSymbol, true);
                      var functionScope = BindingScope$1.build();

                      for (var i = 0; i < parameters.length; i++) {
                        functionScope.define(parameters[i], args[i]);
                      }

                      var oldScope = scope;

                      var _result;

                      try {
                        scope = functionScope.done();
                        _result = simplifyNested(functionSymbol, _value7);
                      } finally {
                        scope = oldScope;
                      }

                      return _result;
                    }
                  } finally {
                    calling["delete"](functionSymbol);
                  }
                }

                if (depth === 0) {
                  // If depth is 0 we are evaluating the top level expression that is describing element
                  // decorator. In this case, it is a decorator we don't understand, such as a custom
                  // non-angular decorator, and we should just ignore it.
                  return IGNORE;
                }

                var position = undefined;

                if (targetExpression && targetExpression.__symbolic == 'resolved') {
                  var line = targetExpression.line;
                  var character = targetExpression.character;
                  var fileName = targetExpression.fileName;

                  if (fileName != null && line != null && character != null) {
                    position = {
                      fileName: fileName,
                      line: line,
                      column: character
                    };
                  }
                }

                self.error({
                  message: FUNCTION_CALL_NOT_SUPPORTED,
                  context: functionSymbol,
                  value: targetFunction,
                  position: position
                }, context);
              }

              function simplify(expression) {
                if (isPrimitive(expression)) {
                  return expression;
                }

                if (Array.isArray(expression)) {
                  var _result2 = [];

                  var _iterator49 = _createForOfIteratorHelper(expression),
                      _step49;

                  try {
                    for (_iterator49.s(); !(_step49 = _iterator49.n()).done;) {
                      var item = _step49.value;

                      // Check for a spread expression
                      if (item && item.__symbolic === 'spread') {
                        // We call with references as 0 because we require the actual value and cannot
                        // tolerate a reference here.
                        var spreadArray = simplifyEagerly(item.expression);

                        if (Array.isArray(spreadArray)) {
                          var _iterator50 = _createForOfIteratorHelper(spreadArray),
                              _step50;

                          try {
                            for (_iterator50.s(); !(_step50 = _iterator50.n()).done;) {
                              var spreadItem = _step50.value;

                              _result2.push(spreadItem);
                            }
                          } catch (err) {
                            _iterator50.e(err);
                          } finally {
                            _iterator50.f();
                          }

                          continue;
                        }
                      }

                      var _value8 = simplify(item);

                      if (shouldIgnore(_value8)) {
                        continue;
                      }

                      _result2.push(_value8);
                    }
                  } catch (err) {
                    _iterator49.e(err);
                  } finally {
                    _iterator49.f();
                  }

                  return _result2;
                }

                if (expression instanceof StaticSymbol) {
                  // Stop simplification at builtin symbols or if we are in a reference context and
                  // the symbol doesn't have members.
                  if (expression === self.injectionToken || self.conversionMap.has(expression) || references > 0 && !expression.members.length) {
                    return expression;
                  } else {
                    var staticSymbol = expression;
                    var declarationValue = resolveReferenceValue(staticSymbol);

                    if (declarationValue != null) {
                      return simplifyNested(staticSymbol, declarationValue);
                    } else {
                      return staticSymbol;
                    }
                  }
                }

                if (expression) {
                  if (expression['__symbolic']) {
                    var _staticSymbol;

                    switch (expression['__symbolic']) {
                      case 'binop':
                        var left = simplify(expression['left']);
                        if (shouldIgnore(left)) return left;
                        var right = simplify(expression['right']);
                        if (shouldIgnore(right)) return right;

                        switch (expression['operator']) {
                          case '&&':
                            return left && right;

                          case '||':
                            return left || right;

                          case '|':
                            return left | right;

                          case '^':
                            return left ^ right;

                          case '&':
                            return left & right;

                          case '==':
                            return left == right;

                          case '!=':
                            return left != right;

                          case '===':
                            return left === right;

                          case '!==':
                            return left !== right;

                          case '<':
                            return left < right;

                          case '>':
                            return left > right;

                          case '<=':
                            return left <= right;

                          case '>=':
                            return left >= right;

                          case '<<':
                            return left << right;

                          case '>>':
                            return left >> right;

                          case '+':
                            return left + right;

                          case '-':
                            return left - right;

                          case '*':
                            return left * right;

                          case '/':
                            return left / right;

                          case '%':
                            return left % right;
                        }

                        return null;

                      case 'if':
                        var condition = simplify(expression['condition']);
                        return condition ? simplify(expression['thenExpression']) : simplify(expression['elseExpression']);

                      case 'pre':
                        var operand = simplify(expression['operand']);
                        if (shouldIgnore(operand)) return operand;

                        switch (expression['operator']) {
                          case '+':
                            return operand;

                          case '-':
                            return -operand;

                          case '!':
                            return !operand;

                          case '~':
                            return ~operand;
                        }

                        return null;

                      case 'index':
                        var indexTarget = simplifyEagerly(expression['expression']);
                        var index = simplifyEagerly(expression['index']);
                        if (indexTarget && isPrimitive(index)) return indexTarget[index];
                        return null;

                      case 'select':
                        var member = expression['member'];
                        var selectContext = context;
                        var selectTarget = simplify(expression['expression']);

                        if (selectTarget instanceof StaticSymbol) {
                          var members = selectTarget.members.concat(member);
                          selectContext = self.getStaticSymbol(selectTarget.filePath, selectTarget.name, members);

                          var _declarationValue = resolveReferenceValue(selectContext);

                          if (_declarationValue != null) {
                            return simplifyNested(selectContext, _declarationValue);
                          } else {
                            return selectContext;
                          }
                        }

                        if (selectTarget && isPrimitive(member)) return simplifyNested(selectContext, selectTarget[member]);
                        return null;

                      case 'reference':
                        // Note: This only has to deal with variable references, as symbol references have
                        // been converted into 'resolved'
                        // in the StaticSymbolResolver.
                        var name = expression['name'];
                        var localValue = scope.resolve(name);

                        if (localValue != BindingScope$1.missing) {
                          return localValue;
                        }

                        break;

                      case 'resolved':
                        try {
                          return simplify(expression.symbol);
                        } catch (e) {
                          // If an error is reported evaluating the symbol record the position of the
                          // reference in the error so it can
                          // be reported in the error message generated from the exception.
                          if (isMetadataError(e) && expression.fileName != null && expression.line != null && expression.character != null) {
                            e.position = {
                              fileName: expression.fileName,
                              line: expression.line,
                              column: expression.character
                            };
                          }

                          throw e;
                        }

                      case 'class':
                        return context;

                      case 'function':
                        return context;

                      case 'new':
                      case 'call':
                        // Determine if the function is a built-in conversion
                        _staticSymbol = simplifyInContext(context, expression['expression'], depth + 1,
                        /* references */
                        0);

                        if (_staticSymbol instanceof StaticSymbol) {
                          if (_staticSymbol === self.injectionToken || _staticSymbol === self.opaqueToken) {
                            // if somebody calls new InjectionToken, don't create an InjectionToken,
                            // but rather return the symbol to which the InjectionToken is assigned to.
                            // OpaqueToken is supported too as it is required by the language service to
                            // support v4 and prior versions of Angular.
                            return context;
                          }

                          var argExpressions = expression['arguments'] || [];
                          var converter = self.conversionMap.get(_staticSymbol);

                          if (converter) {
                            var args = argExpressions.map(function (arg) {
                              return simplifyNested(context, arg);
                            }).map(function (arg) {
                              return shouldIgnore(arg) ? undefined : arg;
                            });
                            return converter(context, args);
                          } else {
                            // Determine if the function is one we can simplify.
                            var targetFunction = resolveReferenceValue(_staticSymbol);
                            return simplifyCall(_staticSymbol, targetFunction, argExpressions, expression['expression']);
                          }
                        }

                        return IGNORE;

                      case 'error':
                        var message = expression.message;

                        if (expression['line'] != null) {
                          self.error({
                            message: message,
                            context: expression.context,
                            value: expression,
                            position: {
                              fileName: expression['fileName'],
                              line: expression['line'],
                              column: expression['character']
                            }
                          }, context);
                        } else {
                          self.error({
                            message: message,
                            context: expression.context
                          }, context);
                        }

                        return IGNORE;

                      case 'ignore':
                        return expression;
                    }

                    return null;
                  }

                  return mapStringMap(expression, function (value, name) {
                    if (REFERENCE_SET.has(name)) {
                      if (name === USE_VALUE$1 && PROVIDE in expression) {
                        // If this is a provider expression, check for special tokens that need the value
                        // during analysis.
                        var provide = simplify(expression.provide);

                        if (provide === self.ROUTES || provide == self.ANALYZE_FOR_ENTRY_COMPONENTS) {
                          return simplify(value);
                        }
                      }

                      return simplifyLazily(value);
                    }

                    return simplify(value);
                  });
                }

                return IGNORE;
              }

              return simplify(value);
            }

            var result;

            try {
              result = simplifyInContext(context, value, 0, lazy ? 1 : 0);
            } catch (e) {
              if (this.errorRecorder) {
                this.reportError(e, context);
              } else {
                throw formatMetadataError(e, context);
              }
            }

            if (shouldIgnore(result)) {
              return undefined;
            }

            return result;
          }
        }, {
          key: "getTypeMetadata",
          value: function getTypeMetadata(type) {
            var resolvedSymbol = this.symbolResolver.resolveSymbol(type);
            return resolvedSymbol && resolvedSymbol.metadata ? resolvedSymbol.metadata : {
              __symbolic: 'class'
            };
          }
        }, {
          key: "reportError",
          value: function reportError(error, context, path) {
            if (this.errorRecorder) {
              this.errorRecorder(formatMetadataError(error, context), context && context.filePath || path);
            } else {
              throw error;
            }
          }
        }, {
          key: "error",
          value: function error(_ref100, reportingContext) {
            var message = _ref100.message,
                summary = _ref100.summary,
                advise = _ref100.advise,
                position = _ref100.position,
                context = _ref100.context,
                value = _ref100.value,
                symbol = _ref100.symbol,
                chain = _ref100.chain;
            this.reportError(metadataError(message, summary, advise, position, symbol, context, chain), reportingContext);
          }
        }]);

        return StaticReflector;
      }();

      var METADATA_ERROR = 'ngMetadataError';

      function metadataError(message, summary, advise, position, symbol, context, chain) {
        var error = syntaxError(message);
        error[METADATA_ERROR] = true;
        if (advise) error.advise = advise;
        if (position) error.position = position;
        if (summary) error.summary = summary;
        if (context) error.context = context;
        if (chain) error.chain = chain;
        if (symbol) error.symbol = symbol;
        return error;
      }

      function isMetadataError(error) {
        return !!error[METADATA_ERROR];
      }

      var REFERENCE_TO_NONEXPORTED_CLASS = 'Reference to non-exported class';
      var VARIABLE_NOT_INITIALIZED = 'Variable not initialized';
      var DESTRUCTURE_NOT_SUPPORTED = 'Destructuring not supported';
      var COULD_NOT_RESOLVE_TYPE = 'Could not resolve type';
      var FUNCTION_CALL_NOT_SUPPORTED = 'Function call not supported';
      var REFERENCE_TO_LOCAL_SYMBOL = 'Reference to a local symbol';
      var LAMBDA_NOT_SUPPORTED = 'Lambda not supported';

      function expandedMessage(message, context) {
        switch (message) {
          case REFERENCE_TO_NONEXPORTED_CLASS:
            if (context && context.className) {
              return "References to a non-exported class are not supported in decorators but ".concat(context.className, " was referenced.");
            }

            break;

          case VARIABLE_NOT_INITIALIZED:
            return 'Only initialized variables and constants can be referenced in decorators because the value of this variable is needed by the template compiler';

          case DESTRUCTURE_NOT_SUPPORTED:
            return 'Referencing an exported destructured variable or constant is not supported in decorators and this value is needed by the template compiler';

          case COULD_NOT_RESOLVE_TYPE:
            if (context && context.typeName) {
              return "Could not resolve type ".concat(context.typeName);
            }

            break;

          case FUNCTION_CALL_NOT_SUPPORTED:
            if (context && context.name) {
              return "Function calls are not supported in decorators but '".concat(context.name, "' was called");
            }

            return 'Function calls are not supported in decorators';

          case REFERENCE_TO_LOCAL_SYMBOL:
            if (context && context.name) {
              return "Reference to a local (non-exported) symbols are not supported in decorators but '".concat(context.name, "' was referenced");
            }

            break;

          case LAMBDA_NOT_SUPPORTED:
            return "Function expressions are not supported in decorators";
        }

        return message;
      }

      function messageAdvise(message, context) {
        switch (message) {
          case REFERENCE_TO_NONEXPORTED_CLASS:
            if (context && context.className) {
              return "Consider exporting '".concat(context.className, "'");
            }

            break;

          case DESTRUCTURE_NOT_SUPPORTED:
            return 'Consider simplifying to avoid destructuring';

          case REFERENCE_TO_LOCAL_SYMBOL:
            if (context && context.name) {
              return "Consider exporting '".concat(context.name, "'");
            }

            break;

          case LAMBDA_NOT_SUPPORTED:
            return "Consider changing the function expression into an exported function";
        }

        return undefined;
      }

      function errorSummary(error) {
        if (error.summary) {
          return error.summary;
        }

        switch (error.message) {
          case REFERENCE_TO_NONEXPORTED_CLASS:
            if (error.context && error.context.className) {
              return "references non-exported class ".concat(error.context.className);
            }

            break;

          case VARIABLE_NOT_INITIALIZED:
            return 'is not initialized';

          case DESTRUCTURE_NOT_SUPPORTED:
            return 'is a destructured variable';

          case COULD_NOT_RESOLVE_TYPE:
            return 'could not be resolved';

          case FUNCTION_CALL_NOT_SUPPORTED:
            if (error.context && error.context.name) {
              return "calls '".concat(error.context.name, "'");
            }

            return "calls a function";

          case REFERENCE_TO_LOCAL_SYMBOL:
            if (error.context && error.context.name) {
              return "references local variable ".concat(error.context.name);
            }

            return "references a local variable";
        }

        return 'contains the error';
      }

      function mapStringMap(input, transform) {
        if (!input) return {};
        var result = {};
        Object.keys(input).forEach(function (key) {
          var value = transform(input[key], key);

          if (!shouldIgnore(value)) {
            if (HIDDEN_KEY.test(key)) {
              Object.defineProperty(result, key, {
                enumerable: false,
                configurable: true,
                value: value
              });
            } else {
              result[key] = value;
            }
          }
        });
        return result;
      }

      function isPrimitive(o) {
        return o === null || typeof o !== 'function' && typeof o !== 'object';
      }

      var BindingScope$1 = /*#__PURE__*/function () {
        function BindingScope$1() {
          _classCallCheck2(this, BindingScope$1);
        }

        _createClass2(BindingScope$1, null, [{
          key: "build",
          value: function build() {
            var current = new Map();
            return {
              define: function define(name, value) {
                current.set(name, value);
                return this;
              },
              done: function done() {
                return current.size > 0 ? new PopulatedScope(current) : BindingScope$1.empty;
              }
            };
          }
        }]);

        return BindingScope$1;
      }();

      BindingScope$1.missing = {};
      BindingScope$1.empty = {
        resolve: function resolve(name) {
          return BindingScope$1.missing;
        }
      };

      var PopulatedScope = /*#__PURE__*/function (_BindingScope$) {
        _inherits2(PopulatedScope, _BindingScope$);

        var _super167 = _createSuper(PopulatedScope);

        function PopulatedScope(bindings) {
          var _this415;

          _classCallCheck2(this, PopulatedScope);

          _this415 = _super167.call(this);
          _this415.bindings = bindings;
          return _this415;
        }

        _createClass2(PopulatedScope, [{
          key: "resolve",
          value: function resolve(name) {
            return this.bindings.has(name) ? this.bindings.get(name) : BindingScope$1.missing;
          }
        }]);

        return PopulatedScope;
      }(BindingScope$1);

      function formatMetadataMessageChain(chain, advise) {
        var expanded = expandedMessage(chain.message, chain.context);
        var nesting = chain.symbol ? " in '".concat(chain.symbol.name, "'") : '';
        var message = "".concat(expanded).concat(nesting);
        var position = chain.position;
        var next = chain.next ? formatMetadataMessageChain(chain.next, advise) : advise ? {
          message: advise
        } : undefined;
        return {
          message: message,
          position: position,
          next: next ? [next] : undefined
        };
      }

      function formatMetadataError(e, context) {
        if (isMetadataError(e)) {
          // Produce a formatted version of the and leaving enough information in the original error
          // to recover the formatting information to eventually produce a diagnostic error message.
          var position = e.position;
          var chain = {
            message: "Error during template compile of '".concat(context.name, "'"),
            position: position,
            next: {
              message: e.message,
              next: e.chain,
              context: e.context,
              symbol: e.symbol
            }
          };
          var advise = e.advise || messageAdvise(e.message, e.context);
          return formattedError(formatMetadataMessageChain(chain, advise));
        }

        return e;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var AotSummaryResolver = /*#__PURE__*/function () {
        function AotSummaryResolver(host, staticSymbolCache) {
          _classCallCheck2(this, AotSummaryResolver);

          this.host = host;
          this.staticSymbolCache = staticSymbolCache; // Note: this will only contain StaticSymbols without members!

          this.summaryCache = new Map();
          this.loadedFilePaths = new Map(); // Note: this will only contain StaticSymbols without members!

          this.importAs = new Map();
          this.knownFileNameToModuleNames = new Map();
        }

        _createClass2(AotSummaryResolver, [{
          key: "isLibraryFile",
          value: function isLibraryFile(filePath) {
            // Note: We need to strip the .ngfactory. file path,
            // so this method also works for generated files
            // (for which host.isSourceFile will always return false).
            return !this.host.isSourceFile(stripGeneratedFileSuffix(filePath));
          }
        }, {
          key: "toSummaryFileName",
          value: function toSummaryFileName(filePath, referringSrcFileName) {
            return this.host.toSummaryFileName(filePath, referringSrcFileName);
          }
        }, {
          key: "fromSummaryFileName",
          value: function fromSummaryFileName(fileName, referringLibFileName) {
            return this.host.fromSummaryFileName(fileName, referringLibFileName);
          }
        }, {
          key: "resolveSummary",
          value: function resolveSummary(staticSymbol) {
            var rootSymbol = staticSymbol.members.length ? this.staticSymbolCache.get(staticSymbol.filePath, staticSymbol.name) : staticSymbol;
            var summary = this.summaryCache.get(rootSymbol);

            if (!summary) {
              this._loadSummaryFile(staticSymbol.filePath);

              summary = this.summaryCache.get(staticSymbol);
            }

            return rootSymbol === staticSymbol && summary || null;
          }
        }, {
          key: "getSymbolsOf",
          value: function getSymbolsOf(filePath) {
            if (this._loadSummaryFile(filePath)) {
              return Array.from(this.summaryCache.keys()).filter(function (symbol) {
                return symbol.filePath === filePath;
              });
            }

            return null;
          }
        }, {
          key: "getImportAs",
          value: function getImportAs(staticSymbol) {
            staticSymbol.assertNoMembers();
            return this.importAs.get(staticSymbol);
          }
          /**
           * Converts a file path to a module name that can be used as an `import`.
           */

        }, {
          key: "getKnownModuleName",
          value: function getKnownModuleName(importedFilePath) {
            return this.knownFileNameToModuleNames.get(importedFilePath) || null;
          }
        }, {
          key: "addSummary",
          value: function addSummary(summary) {
            this.summaryCache.set(summary.symbol, summary);
          }
        }, {
          key: "_loadSummaryFile",
          value: function _loadSummaryFile(filePath) {
            var _this416 = this;

            var hasSummary = this.loadedFilePaths.get(filePath);

            if (hasSummary != null) {
              return hasSummary;
            }

            var json = null;

            if (this.isLibraryFile(filePath)) {
              var summaryFilePath = summaryFileName(filePath);

              try {
                json = this.host.loadSummary(summaryFilePath);
              } catch (e) {
                console.error("Error loading summary file ".concat(summaryFilePath));
                throw e;
              }
            }

            hasSummary = json != null;
            this.loadedFilePaths.set(filePath, hasSummary);

            if (json) {
              var _deserializeSummaries = deserializeSummaries(this.staticSymbolCache, this, filePath, json),
                  moduleName = _deserializeSummaries.moduleName,
                  summaries = _deserializeSummaries.summaries,
                  importAs = _deserializeSummaries.importAs;

              summaries.forEach(function (summary) {
                return _this416.summaryCache.set(summary.symbol, summary);
              });

              if (moduleName) {
                this.knownFileNameToModuleNames.set(filePath, moduleName);
              }

              importAs.forEach(function (importAs) {
                _this416.importAs.set(importAs.symbol, importAs.importAs);
              });
            }

            return hasSummary;
          }
        }]);

        return AotSummaryResolver;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function createAotUrlResolver(host) {
        return {
          resolve: function resolve(basePath, url) {
            var filePath = host.resourceNameToFileName(url, basePath);

            if (!filePath) {
              throw syntaxError("Couldn't resolve resource ".concat(url, " from ").concat(basePath));
            }

            return filePath;
          }
        };
      }
      /**
       * Creates a new AotCompiler based on options and a host.
       */


      function createAotCompiler(compilerHost, options, errorCollector) {
        var translations = options.translations || '';
        var urlResolver = createAotUrlResolver(compilerHost);
        var symbolCache = new StaticSymbolCache();
        var summaryResolver = new AotSummaryResolver(compilerHost, symbolCache);
        var symbolResolver = new StaticSymbolResolver(compilerHost, symbolCache, summaryResolver);
        var staticReflector = new StaticReflector(summaryResolver, symbolResolver, [], [], errorCollector);
        var htmlParser;

        if (!!options.enableIvy) {
          // Ivy handles i18n at the compiler level so we must use a regular parser
          htmlParser = new HtmlParser();
        } else {
          htmlParser = new I18NHtmlParser(new HtmlParser(), translations, options.i18nFormat, options.missingTranslation, console);
        }

        var config = new CompilerConfig({
          defaultEncapsulation: ViewEncapsulation.Emulated,
          useJit: false,
          missingTranslation: options.missingTranslation,
          preserveWhitespaces: options.preserveWhitespaces,
          strictInjectionParameters: options.strictInjectionParameters
        });
        var normalizer = new DirectiveNormalizer({
          get: function get(url) {
            return compilerHost.loadResource(url);
          }
        }, urlResolver, htmlParser, config);
        var expressionParser = new Parser$1(new Lexer());
        var elementSchemaRegistry = new DomElementSchemaRegistry();
        var tmplParser = new TemplateParser(config, staticReflector, expressionParser, elementSchemaRegistry, htmlParser, console, []);
        var resolver = new CompileMetadataResolver(config, htmlParser, new NgModuleResolver(staticReflector), new DirectiveResolver(staticReflector), new PipeResolver(staticReflector), summaryResolver, elementSchemaRegistry, normalizer, console, symbolCache, staticReflector, errorCollector); // TODO(vicb): do not pass options.i18nFormat here

        var viewCompiler = new ViewCompiler(staticReflector);
        var typeCheckCompiler = new TypeCheckCompiler(options, staticReflector);
        var compiler = new AotCompiler(config, options, compilerHost, staticReflector, resolver, tmplParser, new StyleCompiler(urlResolver), viewCompiler, typeCheckCompiler, new NgModuleCompiler(staticReflector), new InjectableCompiler(staticReflector, !!options.enableIvy), new TypeScriptEmitter(), summaryResolver, symbolResolver);
        return {
          compiler: compiler,
          reflector: staticReflector
        };
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var SummaryResolver = function SummaryResolver() {
        _classCallCheck2(this, SummaryResolver);
      };

      var JitSummaryResolver = /*#__PURE__*/function () {
        function JitSummaryResolver() {
          _classCallCheck2(this, JitSummaryResolver);

          this._summaries = new Map();
        }

        _createClass2(JitSummaryResolver, [{
          key: "isLibraryFile",
          value: function isLibraryFile() {
            return false;
          }
        }, {
          key: "toSummaryFileName",
          value: function toSummaryFileName(fileName) {
            return fileName;
          }
        }, {
          key: "fromSummaryFileName",
          value: function fromSummaryFileName(fileName) {
            return fileName;
          }
        }, {
          key: "resolveSummary",
          value: function resolveSummary(reference) {
            return this._summaries.get(reference) || null;
          }
        }, {
          key: "getSymbolsOf",
          value: function getSymbolsOf() {
            return [];
          }
        }, {
          key: "getImportAs",
          value: function getImportAs(reference) {
            return reference;
          }
        }, {
          key: "getKnownModuleName",
          value: function getKnownModuleName(fileName) {
            return null;
          }
        }, {
          key: "addSummary",
          value: function addSummary(summary) {
            this._summaries.set(summary.symbol, summary);
          }
        }]);

        return JitSummaryResolver;
      }();

      function interpretStatements(statements, reflector) {
        var ctx = new _ExecutionContext(null, null, null, new Map());
        var visitor = new StatementInterpreter(reflector);
        visitor.visitAllStatements(statements, ctx);
        var result = {};
        ctx.exports.forEach(function (exportName) {
          result[exportName] = ctx.vars.get(exportName);
        });
        return result;
      }

      function _executeFunctionStatements(varNames, varValues, statements, ctx, visitor) {
        var childCtx = ctx.createChildWihtLocalVars();

        for (var i = 0; i < varNames.length; i++) {
          childCtx.vars.set(varNames[i], varValues[i]);
        }

        var result = visitor.visitAllStatements(statements, childCtx);
        return result ? result.value : null;
      }

      var _ExecutionContext = /*#__PURE__*/function () {
        function _ExecutionContext(parent, instance, className, vars) {
          _classCallCheck2(this, _ExecutionContext);

          this.parent = parent;
          this.instance = instance;
          this.className = className;
          this.vars = vars;
          this.exports = [];
        }

        _createClass2(_ExecutionContext, [{
          key: "createChildWihtLocalVars",
          value: function createChildWihtLocalVars() {
            return new _ExecutionContext(this, this.instance, this.className, new Map());
          }
        }]);

        return _ExecutionContext;
      }();

      var ReturnValue = function ReturnValue(value) {
        _classCallCheck2(this, ReturnValue);

        this.value = value;
      };

      function createDynamicClass(_classStmt, _ctx, _visitor) {
        var propertyDescriptors = {};

        _classStmt.getters.forEach(function (getter) {
          // Note: use `function` instead of arrow function to capture `this`
          propertyDescriptors[getter.name] = {
            configurable: false,
            get: function get() {
              var instanceCtx = new _ExecutionContext(_ctx, this, _classStmt.name, _ctx.vars);
              return _executeFunctionStatements([], [], getter.body, instanceCtx, _visitor);
            }
          };
        });

        _classStmt.methods.forEach(function (method) {
          var paramNames = method.params.map(function (param) {
            return param.name;
          }); // Note: use `function` instead of arrow function to capture `this`

          propertyDescriptors[method.name] = {
            writable: false,
            configurable: false,
            value: function value() {
              var instanceCtx = new _ExecutionContext(_ctx, this, _classStmt.name, _ctx.vars);

              for (var _len11 = arguments.length, args = new Array(_len11), _key13 = 0; _key13 < _len11; _key13++) {
                args[_key13] = arguments[_key13];
              }

              return _executeFunctionStatements(paramNames, args, method.body, instanceCtx, _visitor);
            }
          };
        });

        var ctorParamNames = _classStmt.constructorMethod.params.map(function (param) {
          return param.name;
        }); // Note: use `function` instead of arrow function to capture `this`


        var ctor = function ctor() {
          var _this417 = this;

          var instanceCtx = new _ExecutionContext(_ctx, this, _classStmt.name, _ctx.vars);

          _classStmt.fields.forEach(function (field) {
            _this417[field.name] = undefined;
          });

          for (var _len12 = arguments.length, args = new Array(_len12), _key14 = 0; _key14 < _len12; _key14++) {
            args[_key14] = arguments[_key14];
          }

          _executeFunctionStatements(ctorParamNames, args, _classStmt.constructorMethod.body, instanceCtx, _visitor);
        };

        var superClass = _classStmt.parent ? _classStmt.parent.visitExpression(_visitor, _ctx) : Object;
        ctor.prototype = Object.create(superClass.prototype, propertyDescriptors);
        return ctor;
      }

      var StatementInterpreter = /*#__PURE__*/function () {
        function StatementInterpreter(reflector) {
          _classCallCheck2(this, StatementInterpreter);

          this.reflector = reflector;
        }

        _createClass2(StatementInterpreter, [{
          key: "debugAst",
          value: function debugAst(ast) {
            return debugOutputAstAsTypeScript(ast);
          }
        }, {
          key: "visitDeclareVarStmt",
          value: function visitDeclareVarStmt(stmt, ctx) {
            var initialValue = stmt.value ? stmt.value.visitExpression(this, ctx) : undefined;
            ctx.vars.set(stmt.name, initialValue);

            if (stmt.hasModifier(StmtModifier.Exported)) {
              ctx.exports.push(stmt.name);
            }

            return null;
          }
        }, {
          key: "visitWriteVarExpr",
          value: function visitWriteVarExpr(expr, ctx) {
            var value = expr.value.visitExpression(this, ctx);
            var currCtx = ctx;

            while (currCtx != null) {
              if (currCtx.vars.has(expr.name)) {
                currCtx.vars.set(expr.name, value);
                return value;
              }

              currCtx = currCtx.parent;
            }

            throw new Error("Not declared variable ".concat(expr.name));
          }
        }, {
          key: "visitWrappedNodeExpr",
          value: function visitWrappedNodeExpr(ast, ctx) {
            throw new Error('Cannot interpret a WrappedNodeExpr.');
          }
        }, {
          key: "visitTypeofExpr",
          value: function visitTypeofExpr(ast, ctx) {
            throw new Error('Cannot interpret a TypeofExpr');
          }
        }, {
          key: "visitReadVarExpr",
          value: function visitReadVarExpr(ast, ctx) {
            var varName = ast.name;

            if (ast.builtin != null) {
              switch (ast.builtin) {
                case BuiltinVar.Super:
                  return Object.getPrototypeOf(ctx.instance);

                case BuiltinVar.This:
                  return ctx.instance;

                case BuiltinVar.CatchError:
                  varName = CATCH_ERROR_VAR$2;
                  break;

                case BuiltinVar.CatchStack:
                  varName = CATCH_STACK_VAR$2;
                  break;

                default:
                  throw new Error("Unknown builtin variable ".concat(ast.builtin));
              }
            }

            var currCtx = ctx;

            while (currCtx != null) {
              if (currCtx.vars.has(varName)) {
                return currCtx.vars.get(varName);
              }

              currCtx = currCtx.parent;
            }

            throw new Error("Not declared variable ".concat(varName));
          }
        }, {
          key: "visitWriteKeyExpr",
          value: function visitWriteKeyExpr(expr, ctx) {
            var receiver = expr.receiver.visitExpression(this, ctx);
            var index = expr.index.visitExpression(this, ctx);
            var value = expr.value.visitExpression(this, ctx);
            receiver[index] = value;
            return value;
          }
        }, {
          key: "visitWritePropExpr",
          value: function visitWritePropExpr(expr, ctx) {
            var receiver = expr.receiver.visitExpression(this, ctx);
            var value = expr.value.visitExpression(this, ctx);
            receiver[expr.name] = value;
            return value;
          }
        }, {
          key: "visitInvokeMethodExpr",
          value: function visitInvokeMethodExpr(expr, ctx) {
            var receiver = expr.receiver.visitExpression(this, ctx);
            var args = this.visitAllExpressions(expr.args, ctx);
            var result;

            if (expr.builtin != null) {
              switch (expr.builtin) {
                case BuiltinMethod.ConcatArray:
                  result = receiver.concat.apply(receiver, _toConsumableArray(args));
                  break;

                case BuiltinMethod.SubscribeObservable:
                  result = receiver.subscribe({
                    next: args[0]
                  });
                  break;

                case BuiltinMethod.Bind:
                  result = receiver.bind.apply(receiver, _toConsumableArray(args));
                  break;

                default:
                  throw new Error("Unknown builtin method ".concat(expr.builtin));
              }
            } else {
              result = receiver[expr.name].apply(receiver, args);
            }

            return result;
          }
        }, {
          key: "visitInvokeFunctionExpr",
          value: function visitInvokeFunctionExpr(stmt, ctx) {
            var args = this.visitAllExpressions(stmt.args, ctx);
            var fnExpr = stmt.fn;

            if (fnExpr instanceof ReadVarExpr && fnExpr.builtin === BuiltinVar.Super) {
              ctx.instance.constructor.prototype.constructor.apply(ctx.instance, args);
              return null;
            } else {
              var _fn = stmt.fn.visitExpression(this, ctx);

              return _fn.apply(null, args);
            }
          }
        }, {
          key: "visitTaggedTemplateExpr",
          value: function visitTaggedTemplateExpr(expr, ctx) {
            var templateElements = expr.template.elements.map(function (e) {
              return e.text;
            });
            Object.defineProperty(templateElements, 'raw', {
              value: expr.template.elements.map(function (e) {
                return e.rawText;
              })
            });
            var args = this.visitAllExpressions(expr.template.expressions, ctx);
            args.unshift(templateElements);
            var tag = expr.tag.visitExpression(this, ctx);
            return tag.apply(null, args);
          }
        }, {
          key: "visitReturnStmt",
          value: function visitReturnStmt(stmt, ctx) {
            return new ReturnValue(stmt.value.visitExpression(this, ctx));
          }
        }, {
          key: "visitDeclareClassStmt",
          value: function visitDeclareClassStmt(stmt, ctx) {
            var clazz = createDynamicClass(stmt, ctx, this);
            ctx.vars.set(stmt.name, clazz);

            if (stmt.hasModifier(StmtModifier.Exported)) {
              ctx.exports.push(stmt.name);
            }

            return null;
          }
        }, {
          key: "visitExpressionStmt",
          value: function visitExpressionStmt(stmt, ctx) {
            return stmt.expr.visitExpression(this, ctx);
          }
        }, {
          key: "visitIfStmt",
          value: function visitIfStmt(stmt, ctx) {
            var condition = stmt.condition.visitExpression(this, ctx);

            if (condition) {
              return this.visitAllStatements(stmt.trueCase, ctx);
            } else if (stmt.falseCase != null) {
              return this.visitAllStatements(stmt.falseCase, ctx);
            }

            return null;
          }
        }, {
          key: "visitTryCatchStmt",
          value: function visitTryCatchStmt(stmt, ctx) {
            try {
              return this.visitAllStatements(stmt.bodyStmts, ctx);
            } catch (e) {
              var childCtx = ctx.createChildWihtLocalVars();
              childCtx.vars.set(CATCH_ERROR_VAR$2, e);
              childCtx.vars.set(CATCH_STACK_VAR$2, e.stack);
              return this.visitAllStatements(stmt.catchStmts, childCtx);
            }
          }
        }, {
          key: "visitThrowStmt",
          value: function visitThrowStmt(stmt, ctx) {
            throw stmt.error.visitExpression(this, ctx);
          }
        }, {
          key: "visitInstantiateExpr",
          value: function visitInstantiateExpr(ast, ctx) {
            var args = this.visitAllExpressions(ast.args, ctx);
            var clazz = ast.classExpr.visitExpression(this, ctx);
            return _construct2(clazz, _toConsumableArray(args));
          }
        }, {
          key: "visitLiteralExpr",
          value: function visitLiteralExpr(ast, ctx) {
            return ast.value;
          }
        }, {
          key: "visitLocalizedString",
          value: function visitLocalizedString(ast, context) {
            return null;
          }
        }, {
          key: "visitExternalExpr",
          value: function visitExternalExpr(ast, ctx) {
            return this.reflector.resolveExternalReference(ast.value);
          }
        }, {
          key: "visitConditionalExpr",
          value: function visitConditionalExpr(ast, ctx) {
            if (ast.condition.visitExpression(this, ctx)) {
              return ast.trueCase.visitExpression(this, ctx);
            } else if (ast.falseCase != null) {
              return ast.falseCase.visitExpression(this, ctx);
            }

            return null;
          }
        }, {
          key: "visitNotExpr",
          value: function visitNotExpr(ast, ctx) {
            return !ast.condition.visitExpression(this, ctx);
          }
        }, {
          key: "visitAssertNotNullExpr",
          value: function visitAssertNotNullExpr(ast, ctx) {
            return ast.condition.visitExpression(this, ctx);
          }
        }, {
          key: "visitCastExpr",
          value: function visitCastExpr(ast, ctx) {
            return ast.value.visitExpression(this, ctx);
          }
        }, {
          key: "visitFunctionExpr",
          value: function visitFunctionExpr(ast, ctx) {
            var paramNames = ast.params.map(function (param) {
              return param.name;
            });
            return _declareFn(paramNames, ast.statements, ctx, this);
          }
        }, {
          key: "visitDeclareFunctionStmt",
          value: function visitDeclareFunctionStmt(stmt, ctx) {
            var paramNames = stmt.params.map(function (param) {
              return param.name;
            });
            ctx.vars.set(stmt.name, _declareFn(paramNames, stmt.statements, ctx, this));

            if (stmt.hasModifier(StmtModifier.Exported)) {
              ctx.exports.push(stmt.name);
            }

            return null;
          }
        }, {
          key: "visitUnaryOperatorExpr",
          value: function visitUnaryOperatorExpr(ast, ctx) {
            var _this418 = this;

            var rhs = function rhs() {
              return ast.expr.visitExpression(_this418, ctx);
            };

            switch (ast.operator) {
              case UnaryOperator.Plus:
                return +rhs();

              case UnaryOperator.Minus:
                return -rhs();

              default:
                throw new Error("Unknown operator ".concat(ast.operator));
            }
          }
        }, {
          key: "visitBinaryOperatorExpr",
          value: function visitBinaryOperatorExpr(ast, ctx) {
            var _this419 = this;

            var lhs = function lhs() {
              return ast.lhs.visitExpression(_this419, ctx);
            };

            var rhs = function rhs() {
              return ast.rhs.visitExpression(_this419, ctx);
            };

            switch (ast.operator) {
              case BinaryOperator.Equals:
                return lhs() == rhs();

              case BinaryOperator.Identical:
                return lhs() === rhs();

              case BinaryOperator.NotEquals:
                return lhs() != rhs();

              case BinaryOperator.NotIdentical:
                return lhs() !== rhs();

              case BinaryOperator.And:
                return lhs() && rhs();

              case BinaryOperator.Or:
                return lhs() || rhs();

              case BinaryOperator.Plus:
                return lhs() + rhs();

              case BinaryOperator.Minus:
                return lhs() - rhs();

              case BinaryOperator.Divide:
                return lhs() / rhs();

              case BinaryOperator.Multiply:
                return lhs() * rhs();

              case BinaryOperator.Modulo:
                return lhs() % rhs();

              case BinaryOperator.Lower:
                return lhs() < rhs();

              case BinaryOperator.LowerEquals:
                return lhs() <= rhs();

              case BinaryOperator.Bigger:
                return lhs() > rhs();

              case BinaryOperator.BiggerEquals:
                return lhs() >= rhs();

              default:
                throw new Error("Unknown operator ".concat(ast.operator));
            }
          }
        }, {
          key: "visitReadPropExpr",
          value: function visitReadPropExpr(ast, ctx) {
            var result;
            var receiver = ast.receiver.visitExpression(this, ctx);
            result = receiver[ast.name];
            return result;
          }
        }, {
          key: "visitReadKeyExpr",
          value: function visitReadKeyExpr(ast, ctx) {
            var receiver = ast.receiver.visitExpression(this, ctx);
            var prop = ast.index.visitExpression(this, ctx);
            return receiver[prop];
          }
        }, {
          key: "visitLiteralArrayExpr",
          value: function visitLiteralArrayExpr(ast, ctx) {
            return this.visitAllExpressions(ast.entries, ctx);
          }
        }, {
          key: "visitLiteralMapExpr",
          value: function visitLiteralMapExpr(ast, ctx) {
            var _this420 = this;

            var result = {};
            ast.entries.forEach(function (entry) {
              return result[entry.key] = entry.value.visitExpression(_this420, ctx);
            });
            return result;
          }
        }, {
          key: "visitCommaExpr",
          value: function visitCommaExpr(ast, context) {
            var values = this.visitAllExpressions(ast.parts, context);
            return values[values.length - 1];
          }
        }, {
          key: "visitAllExpressions",
          value: function visitAllExpressions(expressions, ctx) {
            var _this421 = this;

            return expressions.map(function (expr) {
              return expr.visitExpression(_this421, ctx);
            });
          }
        }, {
          key: "visitAllStatements",
          value: function visitAllStatements(statements, ctx) {
            for (var i = 0; i < statements.length; i++) {
              var stmt = statements[i];
              var val = stmt.visitStatement(this, ctx);

              if (val instanceof ReturnValue) {
                return val;
              }
            }

            return null;
          }
        }]);

        return StatementInterpreter;
      }();

      function _declareFn(varNames, statements, ctx, visitor) {
        return function () {
          for (var _len13 = arguments.length, args = new Array(_len13), _key15 = 0; _key15 < _len13; _key15++) {
            args[_key15] = arguments[_key15];
          }

          return _executeFunctionStatements(varNames, args, statements, ctx, visitor);
        };
      }

      var CATCH_ERROR_VAR$2 = 'error';
      var CATCH_STACK_VAR$2 = 'stack';
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * An internal module of the Angular compiler that begins with component types,
       * extracts templates, and eventually produces a compiled version of the component
       * ready for linking into an application.
       *
       * @security  When compiling templates at runtime, you must ensure that the entire template comes
       * from a trusted source. Attacker-controlled data introduced by a template could expose your
       * application to XSS risks.  For more detail, see the [Security Guide](https://g.co/ng/security).
       */

      var JitCompiler = /*#__PURE__*/function () {
        function JitCompiler(_metadataResolver, _templateParser, _styleCompiler, _viewCompiler, _ngModuleCompiler, _summaryResolver, _reflector, _jitEvaluator, _compilerConfig, _console, getExtraNgModuleProviders) {
          _classCallCheck2(this, JitCompiler);

          this._metadataResolver = _metadataResolver;
          this._templateParser = _templateParser;
          this._styleCompiler = _styleCompiler;
          this._viewCompiler = _viewCompiler;
          this._ngModuleCompiler = _ngModuleCompiler;
          this._summaryResolver = _summaryResolver;
          this._reflector = _reflector;
          this._jitEvaluator = _jitEvaluator;
          this._compilerConfig = _compilerConfig;
          this._console = _console;
          this.getExtraNgModuleProviders = getExtraNgModuleProviders;
          this._compiledTemplateCache = new Map();
          this._compiledHostTemplateCache = new Map();
          this._compiledDirectiveWrapperCache = new Map();
          this._compiledNgModuleCache = new Map();
          this._sharedStylesheetCount = 0;
          this._addedAotSummaries = new Set();
        }

        _createClass2(JitCompiler, [{
          key: "compileModuleSync",
          value: function compileModuleSync(moduleType) {
            return SyncAsync.assertSync(this._compileModuleAndComponents(moduleType, true));
          }
        }, {
          key: "compileModuleAsync",
          value: function compileModuleAsync(moduleType) {
            return Promise.resolve(this._compileModuleAndComponents(moduleType, false));
          }
        }, {
          key: "compileModuleAndAllComponentsSync",
          value: function compileModuleAndAllComponentsSync(moduleType) {
            return SyncAsync.assertSync(this._compileModuleAndAllComponents(moduleType, true));
          }
        }, {
          key: "compileModuleAndAllComponentsAsync",
          value: function compileModuleAndAllComponentsAsync(moduleType) {
            return Promise.resolve(this._compileModuleAndAllComponents(moduleType, false));
          }
        }, {
          key: "getComponentFactory",
          value: function getComponentFactory(component) {
            var summary = this._metadataResolver.getDirectiveSummary(component);

            return summary.componentFactory;
          }
        }, {
          key: "loadAotSummaries",
          value: function loadAotSummaries(summaries) {
            this.clearCache();

            this._addAotSummaries(summaries);
          }
        }, {
          key: "_addAotSummaries",
          value: function _addAotSummaries(fn) {
            if (this._addedAotSummaries.has(fn)) {
              return;
            }

            this._addedAotSummaries.add(fn);

            var summaries = fn();

            for (var i = 0; i < summaries.length; i++) {
              var entry = summaries[i];

              if (typeof entry === 'function') {
                this._addAotSummaries(entry);
              } else {
                var summary = entry;

                this._summaryResolver.addSummary({
                  symbol: summary.type.reference,
                  metadata: null,
                  type: summary
                });
              }
            }
          }
        }, {
          key: "hasAotSummary",
          value: function hasAotSummary(ref) {
            return !!this._summaryResolver.resolveSummary(ref);
          }
        }, {
          key: "_filterJitIdentifiers",
          value: function _filterJitIdentifiers(ids) {
            var _this422 = this;

            return ids.map(function (mod) {
              return mod.reference;
            }).filter(function (ref) {
              return !_this422.hasAotSummary(ref);
            });
          }
        }, {
          key: "_compileModuleAndComponents",
          value: function _compileModuleAndComponents(moduleType, isSync) {
            var _this423 = this;

            return SyncAsync.then(this._loadModules(moduleType, isSync), function () {
              _this423._compileComponents(moduleType, null);

              return _this423._compileModule(moduleType);
            });
          }
        }, {
          key: "_compileModuleAndAllComponents",
          value: function _compileModuleAndAllComponents(moduleType, isSync) {
            var _this424 = this;

            return SyncAsync.then(this._loadModules(moduleType, isSync), function () {
              var componentFactories = [];

              _this424._compileComponents(moduleType, componentFactories);

              return {
                ngModuleFactory: _this424._compileModule(moduleType),
                componentFactories: componentFactories
              };
            });
          }
        }, {
          key: "_loadModules",
          value: function _loadModules(mainModule, isSync) {
            var _this425 = this;

            var loading = [];

            var mainNgModule = this._metadataResolver.getNgModuleMetadata(mainModule); // Note: for runtime compilation, we want to transitively compile all modules,
            // so we also need to load the declared directives / pipes for all nested modules.


            this._filterJitIdentifiers(mainNgModule.transitiveModule.modules).forEach(function (nestedNgModule) {
              // getNgModuleMetadata only returns null if the value passed in is not an NgModule
              var moduleMeta = _this425._metadataResolver.getNgModuleMetadata(nestedNgModule);

              _this425._filterJitIdentifiers(moduleMeta.declaredDirectives).forEach(function (ref) {
                var promise = _this425._metadataResolver.loadDirectiveMetadata(moduleMeta.type.reference, ref, isSync);

                if (promise) {
                  loading.push(promise);
                }
              });

              _this425._filterJitIdentifiers(moduleMeta.declaredPipes).forEach(function (ref) {
                return _this425._metadataResolver.getOrLoadPipeMetadata(ref);
              });
            });

            return SyncAsync.all(loading);
          }
        }, {
          key: "_compileModule",
          value: function _compileModule(moduleType) {
            var ngModuleFactory = this._compiledNgModuleCache.get(moduleType);

            if (!ngModuleFactory) {
              var moduleMeta = this._metadataResolver.getNgModuleMetadata(moduleType); // Always provide a bound Compiler


              var extraProviders = this.getExtraNgModuleProviders(moduleMeta.type.reference);
              var outputCtx = createOutputContext();

              var compileResult = this._ngModuleCompiler.compile(outputCtx, moduleMeta, extraProviders);

              ngModuleFactory = this._interpretOrJit(ngModuleJitUrl(moduleMeta), outputCtx.statements)[compileResult.ngModuleFactoryVar];

              this._compiledNgModuleCache.set(moduleMeta.type.reference, ngModuleFactory);
            }

            return ngModuleFactory;
          }
          /**
           * @internal
           */

        }, {
          key: "_compileComponents",
          value: function _compileComponents(mainModule, allComponentFactories) {
            var _this426 = this;

            var ngModule = this._metadataResolver.getNgModuleMetadata(mainModule);

            var moduleByJitDirective = new Map();
            var templates = new Set();

            var transJitModules = this._filterJitIdentifiers(ngModule.transitiveModule.modules);

            transJitModules.forEach(function (localMod) {
              var localModuleMeta = _this426._metadataResolver.getNgModuleMetadata(localMod);

              _this426._filterJitIdentifiers(localModuleMeta.declaredDirectives).forEach(function (dirRef) {
                moduleByJitDirective.set(dirRef, localModuleMeta);

                var dirMeta = _this426._metadataResolver.getDirectiveMetadata(dirRef);

                if (dirMeta.isComponent) {
                  templates.add(_this426._createCompiledTemplate(dirMeta, localModuleMeta));

                  if (allComponentFactories) {
                    var template = _this426._createCompiledHostTemplate(dirMeta.type.reference, localModuleMeta);

                    templates.add(template);
                    allComponentFactories.push(dirMeta.componentFactory);
                  }
                }
              });
            });
            transJitModules.forEach(function (localMod) {
              var localModuleMeta = _this426._metadataResolver.getNgModuleMetadata(localMod);

              _this426._filterJitIdentifiers(localModuleMeta.declaredDirectives).forEach(function (dirRef) {
                var dirMeta = _this426._metadataResolver.getDirectiveMetadata(dirRef);

                if (dirMeta.isComponent) {
                  dirMeta.entryComponents.forEach(function (entryComponentType) {
                    var moduleMeta = moduleByJitDirective.get(entryComponentType.componentType);
                    templates.add(_this426._createCompiledHostTemplate(entryComponentType.componentType, moduleMeta));
                  });
                }
              });

              localModuleMeta.entryComponents.forEach(function (entryComponentType) {
                if (!_this426.hasAotSummary(entryComponentType.componentType)) {
                  var moduleMeta = moduleByJitDirective.get(entryComponentType.componentType);
                  templates.add(_this426._createCompiledHostTemplate(entryComponentType.componentType, moduleMeta));
                }
              });
            });
            templates.forEach(function (template) {
              return _this426._compileTemplate(template);
            });
          }
        }, {
          key: "clearCacheFor",
          value: function clearCacheFor(type) {
            this._compiledNgModuleCache["delete"](type);

            this._metadataResolver.clearCacheFor(type);

            this._compiledHostTemplateCache["delete"](type);

            var compiledTemplate = this._compiledTemplateCache.get(type);

            if (compiledTemplate) {
              this._compiledTemplateCache["delete"](type);
            }
          }
        }, {
          key: "clearCache",
          value: function clearCache() {
            // Note: don't clear the _addedAotSummaries, as they don't change!
            this._metadataResolver.clearCache();

            this._compiledTemplateCache.clear();

            this._compiledHostTemplateCache.clear();

            this._compiledNgModuleCache.clear();
          }
        }, {
          key: "_createCompiledHostTemplate",
          value: function _createCompiledHostTemplate(compType, ngModule) {
            if (!ngModule) {
              throw new Error("Component ".concat(stringify(compType), " is not part of any NgModule or the module has not been imported into your module."));
            }

            var compiledTemplate = this._compiledHostTemplateCache.get(compType);

            if (!compiledTemplate) {
              var compMeta = this._metadataResolver.getDirectiveMetadata(compType);

              assertComponent(compMeta);

              var hostMeta = this._metadataResolver.getHostComponentMetadata(compMeta, compMeta.componentFactory.viewDefFactory);

              compiledTemplate = new CompiledTemplate(true, compMeta.type, hostMeta, ngModule, [compMeta.type]);

              this._compiledHostTemplateCache.set(compType, compiledTemplate);
            }

            return compiledTemplate;
          }
        }, {
          key: "_createCompiledTemplate",
          value: function _createCompiledTemplate(compMeta, ngModule) {
            var compiledTemplate = this._compiledTemplateCache.get(compMeta.type.reference);

            if (!compiledTemplate) {
              assertComponent(compMeta);
              compiledTemplate = new CompiledTemplate(false, compMeta.type, compMeta, ngModule, ngModule.transitiveModule.directives);

              this._compiledTemplateCache.set(compMeta.type.reference, compiledTemplate);
            }

            return compiledTemplate;
          }
        }, {
          key: "_compileTemplate",
          value: function _compileTemplate(template) {
            var _this427 = this;

            if (template.isCompiled) {
              return;
            }

            var compMeta = template.compMeta;
            var externalStylesheetsByModuleUrl = new Map();
            var outputContext = createOutputContext();

            var componentStylesheet = this._styleCompiler.compileComponent(outputContext, compMeta);

            compMeta.template.externalStylesheets.forEach(function (stylesheetMeta) {
              var compiledStylesheet = _this427._styleCompiler.compileStyles(createOutputContext(), compMeta, stylesheetMeta);

              externalStylesheetsByModuleUrl.set(stylesheetMeta.moduleUrl, compiledStylesheet);
            });

            this._resolveStylesCompileResult(componentStylesheet, externalStylesheetsByModuleUrl);

            var pipes = template.ngModule.transitiveModule.pipes.map(function (pipe) {
              return _this427._metadataResolver.getPipeSummary(pipe.reference);
            });

            var _this$_parseTemplate3 = this._parseTemplate(compMeta, template.ngModule, template.directives),
                parsedTemplate = _this$_parseTemplate3.template,
                usedPipes = _this$_parseTemplate3.pipes;

            var compileResult = this._viewCompiler.compileComponent(outputContext, compMeta, parsedTemplate, variable(componentStylesheet.stylesVar), usedPipes);

            var evalResult = this._interpretOrJit(templateJitUrl(template.ngModule.type, template.compMeta), outputContext.statements);

            var viewClass = evalResult[compileResult.viewClassVar];
            var rendererType = evalResult[compileResult.rendererTypeVar];
            template.compiled(viewClass, rendererType);
          }
        }, {
          key: "_parseTemplate",
          value: function _parseTemplate(compMeta, ngModule, directiveIdentifiers) {
            var _this428 = this;

            // Note: ! is ok here as components always have a template.
            var preserveWhitespaces = compMeta.template.preserveWhitespaces;
            var directives = directiveIdentifiers.map(function (dir) {
              return _this428._metadataResolver.getDirectiveSummary(dir.reference);
            });
            var pipes = ngModule.transitiveModule.pipes.map(function (pipe) {
              return _this428._metadataResolver.getPipeSummary(pipe.reference);
            });
            return this._templateParser.parse(compMeta, compMeta.template.htmlAst, directives, pipes, ngModule.schemas, templateSourceUrl(ngModule.type, compMeta, compMeta.template), preserveWhitespaces);
          }
        }, {
          key: "_resolveStylesCompileResult",
          value: function _resolveStylesCompileResult(result, externalStylesheetsByModuleUrl) {
            var _this429 = this;

            result.dependencies.forEach(function (dep, i) {
              var nestedCompileResult = externalStylesheetsByModuleUrl.get(dep.moduleUrl);

              var nestedStylesArr = _this429._resolveAndEvalStylesCompileResult(nestedCompileResult, externalStylesheetsByModuleUrl);

              dep.setValue(nestedStylesArr);
            });
          }
        }, {
          key: "_resolveAndEvalStylesCompileResult",
          value: function _resolveAndEvalStylesCompileResult(result, externalStylesheetsByModuleUrl) {
            this._resolveStylesCompileResult(result, externalStylesheetsByModuleUrl);

            return this._interpretOrJit(sharedStylesheetJitUrl(result.meta, this._sharedStylesheetCount++), result.outputCtx.statements)[result.stylesVar];
          }
        }, {
          key: "_interpretOrJit",
          value: function _interpretOrJit(sourceUrl, statements) {
            if (!this._compilerConfig.useJit) {
              return interpretStatements(statements, this._reflector);
            } else {
              return this._jitEvaluator.evaluateStatements(sourceUrl, statements, this._reflector, this._compilerConfig.jitDevMode);
            }
          }
        }]);

        return JitCompiler;
      }();

      var CompiledTemplate = /*#__PURE__*/function () {
        function CompiledTemplate(isHost, compType, compMeta, ngModule, directives) {
          _classCallCheck2(this, CompiledTemplate);

          this.isHost = isHost;
          this.compType = compType;
          this.compMeta = compMeta;
          this.ngModule = ngModule;
          this.directives = directives;
          this._viewClass = null;
          this.isCompiled = false;
        }

        _createClass2(CompiledTemplate, [{
          key: "compiled",
          value: function compiled(viewClass, rendererType) {
            this._viewClass = viewClass;
            this.compMeta.componentViewType.setDelegate(viewClass);

            for (var prop in rendererType) {
              this.compMeta.rendererType[prop] = rendererType[prop];
            }

            this.isCompiled = true;
          }
        }]);

        return CompiledTemplate;
      }();

      function assertComponent(meta) {
        if (!meta.isComponent) {
          throw new Error("Could not compile '".concat(identifierName(meta.type), "' because it is not a component."));
        }
      }

      function createOutputContext() {
        var importExpr$1 = function importExpr$1(symbol) {
          return importExpr({
            name: identifierName(symbol),
            moduleName: null,
            runtime: symbol
          });
        };

        return {
          statements: [],
          genFilePath: '',
          importExpr: importExpr$1,
          constantPool: new ConstantPool()
        };
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Provides access to reflection data about symbols that the compiler needs.
       */


      var CompileReflector = function CompileReflector() {
        _classCallCheck2(this, CompileReflector);
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Create a {@link UrlResolver} with no package prefix.
       */


      function createUrlResolverWithoutPackagePrefix() {
        return new UrlResolver();
      }

      function createOfflineCompileUrlResolver() {
        return new UrlResolver('.');
      }

      var UrlResolver = /*#__PURE__*/function () {
        function UrlResolverImpl() {
          var _packagePrefix = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;

          _classCallCheck2(this, UrlResolverImpl);

          this._packagePrefix = _packagePrefix;
        }
        /**
         * Resolves the `url` given the `baseUrl`:
         * - when the `url` is null, the `baseUrl` is returned,
         * - if `url` is relative ('path/to/here', './path/to/here'), the resolved url is a combination of
         * `baseUrl` and `url`,
         * - if `url` is absolute (it has a scheme: 'http://', 'https://' or start with '/'), the `url` is
         * returned as is (ignoring the `baseUrl`)
         */


        _createClass2(UrlResolverImpl, [{
          key: "resolve",
          value: function resolve(baseUrl, url) {
            var resolvedUrl = url;

            if (baseUrl != null && baseUrl.length > 0) {
              resolvedUrl = _resolveUrl(baseUrl, resolvedUrl);
            }

            var resolvedParts = _split(resolvedUrl);

            var prefix = this._packagePrefix;

            if (prefix != null && resolvedParts != null && resolvedParts[_ComponentIndex.Scheme] == 'package') {
              var path = resolvedParts[_ComponentIndex.Path];
              prefix = prefix.replace(/\/+$/, '');
              path = path.replace(/^\/+/, '');
              return "".concat(prefix, "/").concat(path);
            }

            return resolvedUrl;
          }
        }]);

        return UrlResolverImpl;
      }();
      /**
       * Extract the scheme of a URL.
       */


      function getUrlScheme(url) {
        var match = _split(url);

        return match && match[_ComponentIndex.Scheme] || '';
      } // The code below is adapted from Traceur:
      // https://github.com/google/traceur-compiler/blob/9511c1dafa972bf0de1202a8a863bad02f0f95a8/src/runtime/url.js

      /**
       * Builds a URI string from already-encoded parts.
       *
       * No encoding is performed.  Any component may be omitted as either null or
       * undefined.
       *
       * @param opt_scheme The scheme such as 'http'.
       * @param opt_userInfo The user name before the '@'.
       * @param opt_domain The domain such as 'www.google.com', already
       *     URI-encoded.
       * @param opt_port The port number.
       * @param opt_path The path, already URI-encoded.  If it is not
       *     empty, it must begin with a slash.
       * @param opt_queryData The URI-encoded query data.
       * @param opt_fragment The URI-encoded fragment identifier.
       * @return The fully combined URI.
       */


      function _buildFromEncodedParts(opt_scheme, opt_userInfo, opt_domain, opt_port, opt_path, opt_queryData, opt_fragment) {
        var out = [];

        if (opt_scheme != null) {
          out.push(opt_scheme + ':');
        }

        if (opt_domain != null) {
          out.push('//');

          if (opt_userInfo != null) {
            out.push(opt_userInfo + '@');
          }

          out.push(opt_domain);

          if (opt_port != null) {
            out.push(':' + opt_port);
          }
        }

        if (opt_path != null) {
          out.push(opt_path);
        }

        if (opt_queryData != null) {
          out.push('?' + opt_queryData);
        }

        if (opt_fragment != null) {
          out.push('#' + opt_fragment);
        }

        return out.join('');
      }
      /**
       * A regular expression for breaking a URI into its component parts.
       *
       * {@link https://tools.ietf.org/html/rfc3986#appendix-B} says
       * As the "first-match-wins" algorithm is identical to the "greedy"
       * disambiguation method used by POSIX regular expressions, it is natural and
       * commonplace to use a regular expression for parsing the potential five
       * components of a URI reference.
       *
       * The following line is the regular expression for breaking-down a
       * well-formed URI reference into its components.
       *
       * <pre>
       * ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
       *  12            3  4          5       6  7        8 9
       * </pre>
       *
       * The numbers in the second line above are only to assist readability; they
       * indicate the reference points for each subexpression (i.e., each paired
       * parenthesis). We refer to the value matched for subexpression <n> as $<n>.
       * For example, matching the above expression to
       * <pre>
       *     http://www.ics.uci.edu/pub/ietf/uri/#Related
       * </pre>
       * results in the following subexpression matches:
       * <pre>
       *    $1 = http:
       *    $2 = http
       *    $3 = //www.ics.uci.edu
       *    $4 = www.ics.uci.edu
       *    $5 = /pub/ietf/uri/
       *    $6 = <undefined>
       *    $7 = <undefined>
       *    $8 = #Related
       *    $9 = Related
       * </pre>
       * where <undefined> indicates that the component is not present, as is the
       * case for the query component in the above example. Therefore, we can
       * determine the value of the five components as
       * <pre>
       *    scheme    = $2
       *    authority = $4
       *    path      = $5
       *    query     = $7
       *    fragment  = $9
       * </pre>
       *
       * The regular expression has been modified slightly to expose the
       * userInfo, domain, and port separately from the authority.
       * The modified version yields
       * <pre>
       *    $1 = http              scheme
       *    $2 = <undefined>       userInfo -\
       *    $3 = www.ics.uci.edu   domain     | authority
       *    $4 = <undefined>       port     -/
       *    $5 = /pub/ietf/uri/    path
       *    $6 = <undefined>       query without ?
       *    $7 = Related           fragment without #
       * </pre>
       * @internal
       */


      var _splitRe = new RegExp('^' + '(?:' + '([^:/?#.]+)' + // scheme - ignore special characters
      // used by other URL parts such as :,
      // ?, /, #, and .
      ':)?' + '(?://' + '(?:([^/?#]*)@)?' + // userInfo
      "([\\w\\d\\-\\u0100-\\uffff.%]*)" + // domain - restrict to letters,
      // digits, dashes, dots, percent
      // escapes, and unicode characters.
      '(?::([0-9]+))?' + // port
      ')?' + '([^?#]+)?' + // path
      '(?:\\?([^#]*))?' + // query
      '(?:#(.*))?' + // fragment
      '$');
      /**
       * The index of each URI component in the return value of goog.uri.utils.split.
       * @enum {number}
       */


      var _ComponentIndex;

      (function (_ComponentIndex) {
        _ComponentIndex[_ComponentIndex["Scheme"] = 1] = "Scheme";
        _ComponentIndex[_ComponentIndex["UserInfo"] = 2] = "UserInfo";
        _ComponentIndex[_ComponentIndex["Domain"] = 3] = "Domain";
        _ComponentIndex[_ComponentIndex["Port"] = 4] = "Port";
        _ComponentIndex[_ComponentIndex["Path"] = 5] = "Path";
        _ComponentIndex[_ComponentIndex["QueryData"] = 6] = "QueryData";
        _ComponentIndex[_ComponentIndex["Fragment"] = 7] = "Fragment";
      })(_ComponentIndex || (_ComponentIndex = {}));
      /**
       * Splits a URI into its component parts.
       *
       * Each component can be accessed via the component indices; for example:
       * <pre>
       * goog.uri.utils.split(someStr)[goog.uri.utils.CompontentIndex.QUERY_DATA];
       * </pre>
       *
       * @param uri The URI string to examine.
       * @return Each component still URI-encoded.
       *     Each component that is present will contain the encoded value, whereas
       *     components that are not present will be undefined or empty, depending
       *     on the browser's regular expression implementation.  Never null, since
       *     arbitrary strings may still look like path names.
       */


      function _split(uri) {
        return uri.match(_splitRe);
      }
      /**
       * Removes dot segments in given path component, as described in
       * RFC 3986, section 5.2.4.
       *
       * @param path A non-empty path component.
       * @return Path component with removed dot segments.
       */


      function _removeDotSegments(path) {
        if (path == '/') return '/';
        var leadingSlash = path[0] == '/' ? '/' : '';
        var trailingSlash = path[path.length - 1] === '/' ? '/' : '';
        var segments = path.split('/');
        var out = [];
        var up = 0;

        for (var pos = 0; pos < segments.length; pos++) {
          var segment = segments[pos];

          switch (segment) {
            case '':
            case '.':
              break;

            case '..':
              if (out.length > 0) {
                out.pop();
              } else {
                up++;
              }

              break;

            default:
              out.push(segment);
          }
        }

        if (leadingSlash == '') {
          while (up-- > 0) {
            out.unshift('..');
          }

          if (out.length === 0) out.push('.');
        }

        return leadingSlash + out.join('/') + trailingSlash;
      }
      /**
       * Takes an array of the parts from split and canonicalizes the path part
       * and then joins all the parts.
       */


      function _joinAndCanonicalizePath(parts) {
        var path = parts[_ComponentIndex.Path];
        path = path == null ? '' : _removeDotSegments(path);
        parts[_ComponentIndex.Path] = path;
        return _buildFromEncodedParts(parts[_ComponentIndex.Scheme], parts[_ComponentIndex.UserInfo], parts[_ComponentIndex.Domain], parts[_ComponentIndex.Port], path, parts[_ComponentIndex.QueryData], parts[_ComponentIndex.Fragment]);
      }
      /**
       * Resolves a URL.
       * @param base The URL acting as the base URL.
       * @param to The URL to resolve.
       */


      function _resolveUrl(base, url) {
        var parts = _split(encodeURI(url));

        var baseParts = _split(base);

        if (parts[_ComponentIndex.Scheme] != null) {
          return _joinAndCanonicalizePath(parts);
        } else {
          parts[_ComponentIndex.Scheme] = baseParts[_ComponentIndex.Scheme];
        }

        for (var i = _ComponentIndex.Scheme; i <= _ComponentIndex.Port; i++) {
          if (parts[i] == null) {
            parts[i] = baseParts[i];
          }
        }

        if (parts[_ComponentIndex.Path][0] == '/') {
          return _joinAndCanonicalizePath(parts);
        }

        var path = baseParts[_ComponentIndex.Path];
        if (path == null) path = '/';
        var index = path.lastIndexOf('/');
        path = path.substring(0, index + 1) + parts[_ComponentIndex.Path];
        parts[_ComponentIndex.Path] = path;
        return _joinAndCanonicalizePath(parts);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var Extractor = /*#__PURE__*/function () {
        function Extractor(host, staticSymbolResolver, messageBundle, metadataResolver) {
          _classCallCheck2(this, Extractor);

          this.host = host;
          this.staticSymbolResolver = staticSymbolResolver;
          this.messageBundle = messageBundle;
          this.metadataResolver = metadataResolver;
        }

        _createClass2(Extractor, [{
          key: "extract",
          value: function extract(rootFiles) {
            var _this430 = this;

            var _analyzeAndValidateNg = analyzeAndValidateNgModules(rootFiles, this.host, this.staticSymbolResolver, this.metadataResolver),
                files = _analyzeAndValidateNg.files,
                ngModules = _analyzeAndValidateNg.ngModules;

            return Promise.all(ngModules.map(function (ngModule) {
              return _this430.metadataResolver.loadNgModuleDirectiveAndPipeMetadata(ngModule.type.reference, false);
            })).then(function () {
              var errors = [];
              files.forEach(function (file) {
                var compMetas = [];
                file.directives.forEach(function (directiveType) {
                  var dirMeta = _this430.metadataResolver.getDirectiveMetadata(directiveType);

                  if (dirMeta && dirMeta.isComponent) {
                    compMetas.push(dirMeta);
                  }
                });
                compMetas.forEach(function (compMeta) {
                  var html = compMeta.template.template; // Template URL points to either an HTML or TS file depending on
                  // whether the file is used with `templateUrl:` or `template:`,
                  // respectively.

                  var templateUrl = compMeta.template.templateUrl;
                  var interpolationConfig = InterpolationConfig.fromArray(compMeta.template.interpolation);
                  errors.push.apply(errors, _toConsumableArray(_this430.messageBundle.updateFromTemplate(html, templateUrl, interpolationConfig)));
                });
              });

              if (errors.length) {
                throw new Error(errors.map(function (e) {
                  return e.toString();
                }).join('\n'));
              }

              return _this430.messageBundle;
            });
          }
        }], [{
          key: "create",
          value: function create(host, locale) {
            var htmlParser = new HtmlParser();
            var urlResolver = createAotUrlResolver(host);
            var symbolCache = new StaticSymbolCache();
            var summaryResolver = new AotSummaryResolver(host, symbolCache);
            var staticSymbolResolver = new StaticSymbolResolver(host, symbolCache, summaryResolver);
            var staticReflector = new StaticReflector(summaryResolver, staticSymbolResolver);
            var config = new CompilerConfig({
              defaultEncapsulation: ViewEncapsulation.Emulated,
              useJit: false
            });
            var normalizer = new DirectiveNormalizer({
              get: function get(url) {
                return host.loadResource(url);
              }
            }, urlResolver, htmlParser, config);
            var elementSchemaRegistry = new DomElementSchemaRegistry();
            var resolver = new CompileMetadataResolver(config, htmlParser, new NgModuleResolver(staticReflector), new DirectiveResolver(staticReflector), new PipeResolver(staticReflector), summaryResolver, elementSchemaRegistry, normalizer, console, symbolCache, staticReflector); // TODO(vicb): implicit tags & attributes

            var messageBundle = new MessageBundle(htmlParser, [], {}, locale);
            var extractor = new Extractor(host, staticSymbolResolver, messageBundle, resolver);
            return {
              extractor: extractor,
              staticReflector: staticReflector
            };
          }
        }]);

        return Extractor;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Processes `Target`s with a given set of directives and performs a binding operation, which
       * returns an object similar to TypeScript's `ts.TypeChecker` that contains knowledge about the
       * target.
       */


      var R3TargetBinder = /*#__PURE__*/function () {
        function R3TargetBinder(directiveMatcher) {
          _classCallCheck2(this, R3TargetBinder);

          this.directiveMatcher = directiveMatcher;
        }
        /**
         * Perform a binding operation on the given `Target` and return a `BoundTarget` which contains
         * metadata about the types referenced in the template.
         */


        _createClass2(R3TargetBinder, [{
          key: "bind",
          value: function bind(target) {
            if (!target.template) {
              // TODO(alxhub): handle targets which contain things like HostBindings, etc.
              throw new Error('Binding without a template not yet supported');
            } // First, parse the template into a `Scope` structure. This operation captures the syntactic
            // scopes in the template and makes them available for later use.


            var scope = Scope.apply(target.template); // Use the `Scope` to extract the entities present at every level of the template.

            var templateEntities = extractTemplateEntities(scope); // Next, perform directive matching on the template using the `DirectiveBinder`. This returns:
            //   - directives: Map of nodes (elements & ng-templates) to the directives on them.
            //   - bindings: Map of inputs, outputs, and attributes to the directive/element that claims
            //     them. TODO(alxhub): handle multiple directives claiming an input/output/etc.
            //   - references: Map of #references to their targets.

            var _DirectiveBinder$appl = DirectiveBinder.apply(target.template, this.directiveMatcher),
                directives = _DirectiveBinder$appl.directives,
                bindings = _DirectiveBinder$appl.bindings,
                references = _DirectiveBinder$appl.references; // Finally, run the TemplateBinder to bind references, variables, and other entities within the
            // template. This extracts all the metadata that doesn't depend on directive matching.


            var _TemplateBinder$apply = TemplateBinder.apply(target.template, scope),
                expressions = _TemplateBinder$apply.expressions,
                symbols = _TemplateBinder$apply.symbols,
                nestingLevel = _TemplateBinder$apply.nestingLevel,
                usedPipes = _TemplateBinder$apply.usedPipes;

            return new R3BoundTarget(target, directives, bindings, references, expressions, symbols, nestingLevel, templateEntities, usedPipes);
          }
        }]);

        return R3TargetBinder;
      }();
      /**
       * Represents a binding scope within a template.
       *
       * Any variables, references, or other named entities declared within the template will
       * be captured and available by name in `namedEntities`. Additionally, child templates will
       * be analyzed and have their child `Scope`s available in `childScopes`.
       */


      var Scope = /*#__PURE__*/function () {
        function Scope(parentScope, template) {
          _classCallCheck2(this, Scope);

          this.parentScope = parentScope;
          this.template = template;
          /**
           * Named members of the `Scope`, such as `Reference`s or `Variable`s.
           */

          this.namedEntities = new Map();
          /**
           * Child `Scope`s for immediately nested `Template`s.
           */

          this.childScopes = new Map();
        }

        _createClass2(Scope, [{
          key: "ingest",
          value:
          /**
           * Internal method to process the template and populate the `Scope`.
           */
          function ingest(template) {
            var _this431 = this;

            if (template instanceof Template) {
              // Variables on an <ng-template> are defined in the inner scope.
              template.variables.forEach(function (node) {
                return _this431.visitVariable(node);
              }); // Process the nodes of the template.

              template.children.forEach(function (node) {
                return node.visit(_this431);
              });
            } else {
              // No overarching `Template` instance, so process the nodes directly.
              template.forEach(function (node) {
                return node.visit(_this431);
              });
            }
          }
        }, {
          key: "visitElement",
          value: function visitElement(element) {
            var _this432 = this;

            // `Element`s in the template may have `Reference`s which are captured in the scope.
            element.references.forEach(function (node) {
              return _this432.visitReference(node);
            }); // Recurse into the `Element`'s children.

            element.children.forEach(function (node) {
              return node.visit(_this432);
            });
          }
        }, {
          key: "visitTemplate",
          value: function visitTemplate(template) {
            var _this433 = this;

            // References on a <ng-template> are defined in the outer scope, so capture them before
            // processing the template's child scope.
            template.references.forEach(function (node) {
              return _this433.visitReference(node);
            }); // Next, create an inner scope and process the template within it.

            var scope = new Scope(this, template);
            scope.ingest(template);
            this.childScopes.set(template, scope);
          }
        }, {
          key: "visitVariable",
          value: function visitVariable(variable) {
            // Declare the variable if it's not already.
            this.maybeDeclare(variable);
          }
        }, {
          key: "visitReference",
          value: function visitReference(reference) {
            // Declare the variable if it's not already.
            this.maybeDeclare(reference);
          } // Unused visitors.

        }, {
          key: "visitContent",
          value: function visitContent(content) {}
        }, {
          key: "visitBoundAttribute",
          value: function visitBoundAttribute(attr) {}
        }, {
          key: "visitBoundEvent",
          value: function visitBoundEvent(event) {}
        }, {
          key: "visitBoundText",
          value: function visitBoundText(text) {}
        }, {
          key: "visitText",
          value: function visitText(text) {}
        }, {
          key: "visitTextAttribute",
          value: function visitTextAttribute(attr) {}
        }, {
          key: "visitIcu",
          value: function visitIcu(icu) {}
        }, {
          key: "maybeDeclare",
          value: function maybeDeclare(thing) {
            // Declare something with a name, as long as that name isn't taken.
            if (!this.namedEntities.has(thing.name)) {
              this.namedEntities.set(thing.name, thing);
            }
          }
          /**
           * Look up a variable within this `Scope`.
           *
           * This can recurse into a parent `Scope` if it's available.
           */

        }, {
          key: "lookup",
          value: function lookup(name) {
            if (this.namedEntities.has(name)) {
              // Found in the local scope.
              return this.namedEntities.get(name);
            } else if (this.parentScope !== null) {
              // Not in the local scope, but there's a parent scope so check there.
              return this.parentScope.lookup(name);
            } else {
              // At the top level and it wasn't found.
              return null;
            }
          }
          /**
           * Get the child scope for a `Template`.
           *
           * This should always be defined.
           */

        }, {
          key: "getChildScope",
          value: function getChildScope(template) {
            var res = this.childScopes.get(template);

            if (res === undefined) {
              throw new Error("Assertion error: child scope for ".concat(template, " not found"));
            }

            return res;
          }
        }], [{
          key: "newRootScope",
          value: function newRootScope() {
            return new Scope(null, null);
          }
          /**
           * Process a template (either as a `Template` sub-template with variables, or a plain array of
           * template `Node`s) and construct its `Scope`.
           */

        }, {
          key: "apply",
          value: function apply(template) {
            var scope = Scope.newRootScope();
            scope.ingest(template);
            return scope;
          }
        }]);

        return Scope;
      }();
      /**
       * Processes a template and matches directives on nodes (elements and templates).
       *
       * Usually used via the static `apply()` method.
       */


      var DirectiveBinder = /*#__PURE__*/function () {
        function DirectiveBinder(matcher, directives, bindings, references) {
          _classCallCheck2(this, DirectiveBinder);

          this.matcher = matcher;
          this.directives = directives;
          this.bindings = bindings;
          this.references = references;
        }
        /**
         * Process a template (list of `Node`s) and perform directive matching against each node.
         *
         * @param template the list of template `Node`s to match (recursively).
         * @param selectorMatcher a `SelectorMatcher` containing the directives that are in scope for
         * this template.
         * @returns three maps which contain information about directives in the template: the
         * `directives` map which lists directives matched on each node, the `bindings` map which
         * indicates which directives claimed which bindings (inputs, outputs, etc), and the `references`
         * map which resolves #references (`Reference`s) within the template to the named directive or
         * template node.
         */


        _createClass2(DirectiveBinder, [{
          key: "ingest",
          value: function ingest(template) {
            var _this434 = this;

            template.forEach(function (node) {
              return node.visit(_this434);
            });
          }
        }, {
          key: "visitElement",
          value: function visitElement(element) {
            this.visitElementOrTemplate(element.name, element);
          }
        }, {
          key: "visitTemplate",
          value: function visitTemplate(template) {
            this.visitElementOrTemplate('ng-template', template);
          }
        }, {
          key: "visitElementOrTemplate",
          value: function visitElementOrTemplate(elementName, node) {
            var _this435 = this;

            // First, determine the HTML shape of the node for the purpose of directive matching.
            // Do this by building up a `CssSelector` for the node.
            var cssSelector = createCssSelector(elementName, getAttrsForDirectiveMatching(node)); // Next, use the `SelectorMatcher` to get the list of directives on the node.

            var directives = [];
            this.matcher.match(cssSelector, function (_, directive) {
              return directives.push(directive);
            });

            if (directives.length > 0) {
              this.directives.set(node, directives);
            } // Resolve any references that are created on this node.


            node.references.forEach(function (ref) {
              var dirTarget = null; // If the reference expression is empty, then it matches the "primary" directive on the node
              // (if there is one). Otherwise it matches the host node itself (either an element or
              // <ng-template> node).

              if (ref.value.trim() === '') {
                // This could be a reference to a component if there is one.
                dirTarget = directives.find(function (dir) {
                  return dir.isComponent;
                }) || null;
              } else {
                // This should be a reference to a directive exported via exportAs.
                dirTarget = directives.find(function (dir) {
                  return dir.exportAs !== null && dir.exportAs.some(function (value) {
                    return value === ref.value;
                  });
                }) || null; // Check if a matching directive was found.

                if (dirTarget === null) {
                  // No matching directive was found - this reference points to an unknown target. Leave it
                  // unmapped.
                  return;
                }
              }

              if (dirTarget !== null) {
                // This reference points to a directive.
                _this435.references.set(ref, {
                  directive: dirTarget,
                  node: node
                });
              } else {
                // This reference points to the node itself.
                _this435.references.set(ref, node);
              }
            });

            var setAttributeBinding = function setAttributeBinding(attribute, ioType) {
              var dir = directives.find(function (dir) {
                return dir[ioType].hasBindingPropertyName(attribute.name);
              });
              var binding = dir !== undefined ? dir : node;

              _this435.bindings.set(attribute, binding);
            }; // Node inputs (bound attributes) and text attributes can be bound to an
            // input on a directive.


            node.inputs.forEach(function (input) {
              return setAttributeBinding(input, 'inputs');
            });
            node.attributes.forEach(function (attr) {
              return setAttributeBinding(attr, 'inputs');
            });

            if (node instanceof Template) {
              node.templateAttrs.forEach(function (attr) {
                return setAttributeBinding(attr, 'inputs');
              });
            } // Node outputs (bound events) can be bound to an output on a directive.


            node.outputs.forEach(function (output) {
              return setAttributeBinding(output, 'outputs');
            }); // Recurse into the node's children.

            node.children.forEach(function (child) {
              return child.visit(_this435);
            });
          } // Unused visitors.

        }, {
          key: "visitContent",
          value: function visitContent(content) {}
        }, {
          key: "visitVariable",
          value: function visitVariable(variable) {}
        }, {
          key: "visitReference",
          value: function visitReference(reference) {}
        }, {
          key: "visitTextAttribute",
          value: function visitTextAttribute(attribute) {}
        }, {
          key: "visitBoundAttribute",
          value: function visitBoundAttribute(attribute) {}
        }, {
          key: "visitBoundEvent",
          value: function visitBoundEvent(attribute) {}
        }, {
          key: "visitBoundAttributeOrEvent",
          value: function visitBoundAttributeOrEvent(node) {}
        }, {
          key: "visitText",
          value: function visitText(text) {}
        }, {
          key: "visitBoundText",
          value: function visitBoundText(text) {}
        }, {
          key: "visitIcu",
          value: function visitIcu(icu) {}
        }], [{
          key: "apply",
          value: function apply(template, selectorMatcher) {
            var directives = new Map();
            var bindings = new Map();
            var references = new Map();
            var matcher = new DirectiveBinder(selectorMatcher, directives, bindings, references);
            matcher.ingest(template);
            return {
              directives: directives,
              bindings: bindings,
              references: references
            };
          }
        }]);

        return DirectiveBinder;
      }();
      /**
       * Processes a template and extract metadata about expressions and symbols within.
       *
       * This is a companion to the `DirectiveBinder` that doesn't require knowledge of directives matched
       * within the template in order to operate.
       *
       * Expressions are visited by the superclass `RecursiveAstVisitor`, with custom logic provided
       * by overridden methods from that visitor.
       */


      var TemplateBinder = /*#__PURE__*/function (_RecursiveAstVisitor$3) {
        _inherits2(TemplateBinder, _RecursiveAstVisitor$3);

        var _super168 = _createSuper(TemplateBinder);

        function TemplateBinder(bindings, symbols, usedPipes, nestingLevel, scope, template, level) {
          var _this436;

          _classCallCheck2(this, TemplateBinder);

          _this436 = _super168.call(this);
          _this436.bindings = bindings;
          _this436.symbols = symbols;
          _this436.usedPipes = usedPipes;
          _this436.nestingLevel = nestingLevel;
          _this436.scope = scope;
          _this436.template = template;
          _this436.level = level;
          _this436.pipesUsed = []; // Save a bit of processing time by constructing this closure in advance.

          _this436.visitNode = function (node) {
            return node.visit(_assertThisInitialized2(_this436));
          };

          return _this436;
        } // This method is defined to reconcile the type of TemplateBinder since both
        // RecursiveAstVisitor and Visitor define the visit() method in their
        // interfaces.


        _createClass2(TemplateBinder, [{
          key: "visit",
          value: function visit(node, context) {
            if (node instanceof AST) {
              node.visit(this, context);
            } else {
              node.visit(this);
            }
          }
          /**
           * Process a template and extract metadata about expressions and symbols within.
           *
           * @param template the nodes of the template to process
           * @param scope the `Scope` of the template being processed.
           * @returns three maps which contain metadata about the template: `expressions` which interprets
           * special `AST` nodes in expressions as pointing to references or variables declared within the
           * template, `symbols` which maps those variables and references to the nested `Template` which
           * declares them, if any, and `nestingLevel` which associates each `Template` with a integer
           * nesting level (how many levels deep within the template structure the `Template` is), starting
           * at 1.
           */

        }, {
          key: "ingest",
          value: function ingest(template) {
            if (template instanceof Template) {
              // For <ng-template>s, process only variables and child nodes. Inputs, outputs, templateAttrs,
              // and references were all processed in the scope of the containing template.
              template.variables.forEach(this.visitNode);
              template.children.forEach(this.visitNode); // Set the nesting level.

              this.nestingLevel.set(template, this.level);
            } else {
              // Visit each node from the top-level template.
              template.forEach(this.visitNode);
            }
          }
        }, {
          key: "visitElement",
          value: function visitElement(element) {
            // Visit the inputs, outputs, and children of the element.
            element.inputs.forEach(this.visitNode);
            element.outputs.forEach(this.visitNode);
            element.children.forEach(this.visitNode);
          }
        }, {
          key: "visitTemplate",
          value: function visitTemplate(template) {
            // First, visit inputs, outputs and template attributes of the template node.
            template.inputs.forEach(this.visitNode);
            template.outputs.forEach(this.visitNode);
            template.templateAttrs.forEach(this.visitNode); // References are also evaluated in the outer context.

            template.references.forEach(this.visitNode); // Next, recurse into the template using its scope, and bumping the nesting level up by one.

            var childScope = this.scope.getChildScope(template);
            var binder = new TemplateBinder(this.bindings, this.symbols, this.usedPipes, this.nestingLevel, childScope, template, this.level + 1);
            binder.ingest(template);
          }
        }, {
          key: "visitVariable",
          value: function visitVariable(variable) {
            // Register the `Variable` as a symbol in the current `Template`.
            if (this.template !== null) {
              this.symbols.set(variable, this.template);
            }
          }
        }, {
          key: "visitReference",
          value: function visitReference(reference) {
            // Register the `Reference` as a symbol in the current `Template`.
            if (this.template !== null) {
              this.symbols.set(reference, this.template);
            }
          } // Unused template visitors

        }, {
          key: "visitText",
          value: function visitText(text) {}
        }, {
          key: "visitContent",
          value: function visitContent(content) {}
        }, {
          key: "visitTextAttribute",
          value: function visitTextAttribute(attribute) {}
        }, {
          key: "visitIcu",
          value: function visitIcu(icu) {
            var _this437 = this;

            Object.keys(icu.vars).forEach(function (key) {
              return icu.vars[key].visit(_this437);
            });
            Object.keys(icu.placeholders).forEach(function (key) {
              return icu.placeholders[key].visit(_this437);
            });
          } // The remaining visitors are concerned with processing AST expressions within template bindings

        }, {
          key: "visitBoundAttribute",
          value: function visitBoundAttribute(attribute) {
            attribute.value.visit(this);
          }
        }, {
          key: "visitBoundEvent",
          value: function visitBoundEvent(event) {
            event.handler.visit(this);
          }
        }, {
          key: "visitBoundText",
          value: function visitBoundText(text) {
            text.value.visit(this);
          }
        }, {
          key: "visitPipe",
          value: function visitPipe(ast, context) {
            this.usedPipes.add(ast.name);
            return _get2(_getPrototypeOf2(TemplateBinder.prototype), "visitPipe", this).call(this, ast, context);
          } // These five types of AST expressions can refer to expression roots, which could be variables
          // or references in the current scope.

        }, {
          key: "visitPropertyRead",
          value: function visitPropertyRead(ast, context) {
            this.maybeMap(context, ast, ast.name);
            return _get2(_getPrototypeOf2(TemplateBinder.prototype), "visitPropertyRead", this).call(this, ast, context);
          }
        }, {
          key: "visitSafePropertyRead",
          value: function visitSafePropertyRead(ast, context) {
            this.maybeMap(context, ast, ast.name);
            return _get2(_getPrototypeOf2(TemplateBinder.prototype), "visitSafePropertyRead", this).call(this, ast, context);
          }
        }, {
          key: "visitPropertyWrite",
          value: function visitPropertyWrite(ast, context) {
            this.maybeMap(context, ast, ast.name);
            return _get2(_getPrototypeOf2(TemplateBinder.prototype), "visitPropertyWrite", this).call(this, ast, context);
          }
        }, {
          key: "visitMethodCall",
          value: function visitMethodCall(ast, context) {
            this.maybeMap(context, ast, ast.name);
            return _get2(_getPrototypeOf2(TemplateBinder.prototype), "visitMethodCall", this).call(this, ast, context);
          }
        }, {
          key: "visitSafeMethodCall",
          value: function visitSafeMethodCall(ast, context) {
            this.maybeMap(context, ast, ast.name);
            return _get2(_getPrototypeOf2(TemplateBinder.prototype), "visitSafeMethodCall", this).call(this, ast, context);
          }
        }, {
          key: "maybeMap",
          value: function maybeMap(scope, ast, name) {
            // If the receiver of the expression isn't the `ImplicitReceiver`, this isn't the root of an
            // `AST` expression that maps to a `Variable` or `Reference`.
            if (!(ast.receiver instanceof ImplicitReceiver)) {
              return;
            } // Check whether the name exists in the current scope. If so, map it. Otherwise, the name is
            // probably a property on the top-level component context.


            var target = this.scope.lookup(name);

            if (target !== null) {
              this.bindings.set(ast, target);
            }
          }
        }], [{
          key: "apply",
          value: function apply(template, scope) {
            var expressions = new Map();
            var symbols = new Map();
            var nestingLevel = new Map();
            var usedPipes = new Set(); // The top-level template has nesting level 0.

            var binder = new TemplateBinder(expressions, symbols, usedPipes, nestingLevel, scope, template instanceof Template ? template : null, 0);
            binder.ingest(template);
            return {
              expressions: expressions,
              symbols: symbols,
              nestingLevel: nestingLevel,
              usedPipes: usedPipes
            };
          }
        }]);

        return TemplateBinder;
      }(RecursiveAstVisitor$1);
      /**
       * Metadata container for a `Target` that allows queries for specific bits of metadata.
       *
       * See `BoundTarget` for documentation on the individual methods.
       */


      var R3BoundTarget = /*#__PURE__*/function () {
        function R3BoundTarget(target, directives, bindings, references, exprTargets, symbols, nestingLevel, templateEntities, usedPipes) {
          _classCallCheck2(this, R3BoundTarget);

          this.target = target;
          this.directives = directives;
          this.bindings = bindings;
          this.references = references;
          this.exprTargets = exprTargets;
          this.symbols = symbols;
          this.nestingLevel = nestingLevel;
          this.templateEntities = templateEntities;
          this.usedPipes = usedPipes;
        }

        _createClass2(R3BoundTarget, [{
          key: "getEntitiesInTemplateScope",
          value: function getEntitiesInTemplateScope(template) {
            var _a;

            return (_a = this.templateEntities.get(template)) !== null && _a !== void 0 ? _a : new Set();
          }
        }, {
          key: "getDirectivesOfNode",
          value: function getDirectivesOfNode(node) {
            return this.directives.get(node) || null;
          }
        }, {
          key: "getReferenceTarget",
          value: function getReferenceTarget(ref) {
            return this.references.get(ref) || null;
          }
        }, {
          key: "getConsumerOfBinding",
          value: function getConsumerOfBinding(binding) {
            return this.bindings.get(binding) || null;
          }
        }, {
          key: "getExpressionTarget",
          value: function getExpressionTarget(expr) {
            return this.exprTargets.get(expr) || null;
          }
        }, {
          key: "getTemplateOfSymbol",
          value: function getTemplateOfSymbol(symbol) {
            return this.symbols.get(symbol) || null;
          }
        }, {
          key: "getNestingLevel",
          value: function getNestingLevel(template) {
            return this.nestingLevel.get(template) || 0;
          }
        }, {
          key: "getUsedDirectives",
          value: function getUsedDirectives() {
            var set = new Set();
            this.directives.forEach(function (dirs) {
              return dirs.forEach(function (dir) {
                return set.add(dir);
              });
            });
            return Array.from(set.values());
          }
        }, {
          key: "getUsedPipes",
          value: function getUsedPipes() {
            return Array.from(this.usedPipes);
          }
        }]);

        return R3BoundTarget;
      }();

      function extractTemplateEntities(rootScope) {
        var entityMap = new Map();

        function extractScopeEntities(scope) {
          if (entityMap.has(scope.template)) {
            return entityMap.get(scope.template);
          }

          var currentEntities = scope.namedEntities;
          var templateEntities;

          if (scope.parentScope !== null) {
            templateEntities = new Map([].concat(_toConsumableArray(extractScopeEntities(scope.parentScope)), _toConsumableArray(currentEntities)));
          } else {
            templateEntities = new Map(currentEntities);
          }

          entityMap.set(scope.template, templateEntities);
          return templateEntities;
        }

        var scopesToProcess = [rootScope];

        while (scopesToProcess.length > 0) {
          var scope = scopesToProcess.pop();

          var _iterator51 = _createForOfIteratorHelper(scope.childScopes.values()),
              _step51;

          try {
            for (_iterator51.s(); !(_step51 = _iterator51.n()).done;) {
              var childScope = _step51.value;
              scopesToProcess.push(childScope);
            }
          } catch (err) {
            _iterator51.e(err);
          } finally {
            _iterator51.f();
          }

          extractScopeEntities(scope);
        }

        var templateEntities = new Map();

        var _iterator52 = _createForOfIteratorHelper(entityMap),
            _step52;

        try {
          for (_iterator52.s(); !(_step52 = _iterator52.n()).done;) {
            var _step52$value = _slicedToArray(_step52.value, 2),
                template = _step52$value[0],
                entities = _step52$value[1];

            templateEntities.set(template, new Set(entities.values()));
          }
        } catch (err) {
          _iterator52.e(err);
        } finally {
          _iterator52.f();
        }

        return templateEntities;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Creates an array literal expression from the given array, mapping all values to an expression
       * using the provided mapping function. If the array is empty or null, then null is returned.
       *
       * @param values The array to transfer into literal array expression.
       * @param mapper The logic to use for creating an expression for the array's values.
       * @returns An array literal expression representing `values`, or null if `values` is empty or
       * is itself null.
       */


      function toOptionalLiteralArray(values, mapper) {
        if (values === null || values.length === 0) {
          return null;
        }

        return literalArr(values.map(function (value) {
          return mapper(value);
        }));
      }
      /**
       * Creates an object literal expression from the given object, mapping all values to an expression
       * using the provided mapping function. If the object has no keys, then null is returned.
       *
       * @param object The object to transfer into an object literal expression.
       * @param mapper The logic to use for creating an expression for the object's values.
       * @returns An object literal expression representing `object`, or null if `object` does not have
       * any keys.
       */


      function toOptionalLiteralMap(object, mapper) {
        var entries = Object.keys(object).map(function (key) {
          var value = object[key];
          return {
            key: key,
            value: mapper(value),
            quoted: true
          };
        });

        if (entries.length > 0) {
          return literalMap(entries);
        } else {
          return null;
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Compile a directive declaration defined by the `R3DirectiveMetadata`.
       */


      function compileDeclareDirectiveFromMetadata(meta) {
        var definitionMap = createDirectiveDefinitionMap(meta);
        var expression = importExpr(Identifiers$1.declareDirective).callFn([definitionMap.toLiteralMap()]);
        var type = createDirectiveType(meta);
        return {
          expression: expression,
          type: type
        };
      }
      /**
       * Gathers the declaration fields for a directive into a `DefinitionMap`. This allows for reusing
       * this logic for components, as they extend the directive metadata.
       */


      function createDirectiveDefinitionMap(meta) {
        var definitionMap = new DefinitionMap();
        definitionMap.set('version', literal('12.0.0-next.1')); // e.g. `type: MyDirective`

        definitionMap.set('type', meta.internalType); // e.g. `selector: 'some-dir'`

        if (meta.selector !== null) {
          definitionMap.set('selector', literal(meta.selector));
        }

        definitionMap.set('inputs', conditionallyCreateMapObjectLiteral(meta.inputs, true));
        definitionMap.set('outputs', conditionallyCreateMapObjectLiteral(meta.outputs));
        definitionMap.set('host', compileHostMetadata(meta.host));
        definitionMap.set('providers', meta.providers);

        if (meta.queries.length > 0) {
          definitionMap.set('queries', literalArr(meta.queries.map(compileQuery)));
        }

        if (meta.viewQueries.length > 0) {
          definitionMap.set('viewQueries', literalArr(meta.viewQueries.map(compileQuery)));
        }

        if (meta.exportAs !== null) {
          definitionMap.set('exportAs', asLiteral(meta.exportAs));
        }

        if (meta.usesInheritance) {
          definitionMap.set('usesInheritance', literal(true));
        }

        if (meta.lifecycle.usesOnChanges) {
          definitionMap.set('usesOnChanges', literal(true));
        }

        definitionMap.set('ngImport', importExpr(Identifiers$1.core));
        return definitionMap;
      }
      /**
       * Compiles the metadata of a single query into its partial declaration form as declared
       * by `R3DeclareQueryMetadata`.
       */


      function compileQuery(query) {
        var meta = new DefinitionMap();
        meta.set('propertyName', literal(query.propertyName));

        if (query.first) {
          meta.set('first', literal(true));
        }

        meta.set('predicate', Array.isArray(query.predicate) ? asLiteral(query.predicate) : query.predicate);

        if (!query.emitDistinctChangesOnly) {
          // `emitDistinctChangesOnly` is special because in future we expect it to be `true`. For this
          // reason the absence should be interpreted as `true`.
          meta.set('emitDistinctChangesOnly', literal(false));
        }

        if (query.descendants) {
          meta.set('descendants', literal(true));
        }

        meta.set('read', query.read);

        if (query["static"]) {
          meta.set('static', literal(true));
        }

        return meta.toLiteralMap();
      }
      /**
       * Compiles the host metadata into its partial declaration form as declared
       * in `R3DeclareDirectiveMetadata['host']`
       */


      function compileHostMetadata(meta) {
        var hostMetadata = new DefinitionMap();
        hostMetadata.set('attributes', toOptionalLiteralMap(meta.attributes, function (expression) {
          return expression;
        }));
        hostMetadata.set('listeners', toOptionalLiteralMap(meta.listeners, literal));
        hostMetadata.set('properties', toOptionalLiteralMap(meta.properties, literal));

        if (meta.specialAttributes.styleAttr) {
          hostMetadata.set('styleAttribute', literal(meta.specialAttributes.styleAttr));
        }

        if (meta.specialAttributes.classAttr) {
          hostMetadata.set('classAttribute', literal(meta.specialAttributes.classAttr));
        }

        if (hostMetadata.values.length > 0) {
          return hostMetadata.toLiteralMap();
        } else {
          return null;
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Compile a component declaration defined by the `R3ComponentMetadata`.
       */


      function compileDeclareComponentFromMetadata(meta, template) {
        var definitionMap = createComponentDefinitionMap(meta, template);
        var expression = importExpr(Identifiers$1.declareComponent).callFn([definitionMap.toLiteralMap()]);
        var type = createComponentType(meta);
        return {
          expression: expression,
          type: type
        };
      }
      /**
       * Gathers the declaration fields for a component into a `DefinitionMap`.
       */


      function createComponentDefinitionMap(meta, template) {
        var definitionMap = createDirectiveDefinitionMap(meta);
        definitionMap.set('template', getTemplateExpression(template));

        if (template.isInline) {
          definitionMap.set('isInline', literal(true));
        }

        definitionMap.set('styles', toOptionalLiteralArray(meta.styles, literal));
        definitionMap.set('directives', compileUsedDirectiveMetadata(meta));
        definitionMap.set('pipes', compileUsedPipeMetadata(meta));
        definitionMap.set('viewProviders', meta.viewProviders);
        definitionMap.set('animations', meta.animations);

        if (meta.changeDetection !== undefined) {
          definitionMap.set('changeDetection', importExpr(Identifiers$1.ChangeDetectionStrategy).prop(ChangeDetectionStrategy[meta.changeDetection]));
        }

        if (meta.encapsulation !== ViewEncapsulation.Emulated) {
          definitionMap.set('encapsulation', importExpr(Identifiers$1.ViewEncapsulation).prop(ViewEncapsulation[meta.encapsulation]));
        }

        if (meta.interpolation !== DEFAULT_INTERPOLATION_CONFIG) {
          definitionMap.set('interpolation', literalArr([literal(meta.interpolation.start), literal(meta.interpolation.end)]));
        }

        if (template.preserveWhitespaces === true) {
          definitionMap.set('preserveWhitespaces', literal(true));
        }

        return definitionMap;
      }

      function getTemplateExpression(template) {
        if (typeof template.template === 'string') {
          if (template.isInline) {
            // The template is inline but not a simple literal string, so give up with trying to
            // source-map it and just return a simple literal here.
            return literal(template.template);
          } else {
            // The template is external so we must synthesize an expression node with the appropriate
            // source-span.
            var contents = template.template;
            var file = new ParseSourceFile(contents, template.templateUrl);

            var _start6 = new ParseLocation(file, 0, 0, 0);

            var end = computeEndLocation(file, contents);
            var span = new ParseSourceSpan(_start6, end);
            return literal(contents, null, span);
          }
        } else {
          // The template is inline so we can just reuse the current expression node.
          return template.template;
        }
      }

      function computeEndLocation(file, contents) {
        var length = contents.length;
        var lineStart = 0;
        var lastLineStart = 0;
        var line = 0;

        do {
          lineStart = contents.indexOf('\n', lastLineStart);

          if (lineStart !== -1) {
            lastLineStart = lineStart + 1;
            line++;
          }
        } while (lineStart !== -1);

        return new ParseLocation(file, length, line, length - lastLineStart);
      }
      /**
       * Compiles the directives as registered in the component metadata into an array literal of the
       * individual directives. If the component does not use any directives, then null is returned.
       */


      function compileUsedDirectiveMetadata(meta) {
        var wrapType = meta.declarationListEmitMode !== 0
        /* Direct */
        ? generateForwardRef : function (expr) {
          return expr;
        };
        return toOptionalLiteralArray(meta.directives, function (directive) {
          var dirMeta = new DefinitionMap();
          dirMeta.set('type', wrapType(directive.type));
          dirMeta.set('selector', literal(directive.selector));
          dirMeta.set('inputs', toOptionalLiteralArray(directive.inputs, literal));
          dirMeta.set('outputs', toOptionalLiteralArray(directive.outputs, literal));
          dirMeta.set('exportAs', toOptionalLiteralArray(directive.exportAs, literal));
          return dirMeta.toLiteralMap();
        });
      }
      /**
       * Compiles the pipes as registered in the component metadata into an object literal, where the
       * pipe's name is used as key and a reference to its type as value. If the component does not use
       * any pipes, then null is returned.
       */


      function compileUsedPipeMetadata(meta) {
        if (meta.pipes.size === 0) {
          return null;
        }

        var wrapType = meta.declarationListEmitMode !== 0
        /* Direct */
        ? generateForwardRef : function (expr) {
          return expr;
        };
        var entries = [];

        var _iterator53 = _createForOfIteratorHelper(meta.pipes),
            _step53;

        try {
          for (_iterator53.s(); !(_step53 = _iterator53.n()).done;) {
            var _step53$value = _slicedToArray(_step53.value, 2),
                name = _step53$value[0],
                pipe = _step53$value[1];

            entries.push({
              key: name,
              value: wrapType(pipe),
              quoted: true
            });
          }
        } catch (err) {
          _iterator53.e(err);
        } finally {
          _iterator53.f();
        }

        return literalMap(entries);
      }

      function generateForwardRef(expr) {
        return importExpr(Identifiers$1.forwardRef).callFn([fn([], [new ReturnStatement(expr)])]);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Compile a Pipe declaration defined by the `R3PipeMetadata`.
       */


      function compileDeclarePipeFromMetadata(meta) {
        var definitionMap = createPipeDefinitionMap(meta);
        var expression = importExpr(Identifiers$1.declarePipe).callFn([definitionMap.toLiteralMap()]);
        var type = createPipeType(meta);
        return {
          expression: expression,
          type: type
        };
      }
      /**
       * Gathers the declaration fields for a Pipe into a `DefinitionMap`. This allows for reusing
       * this logic for components, as they extend the Pipe metadata.
       */


      function createPipeDefinitionMap(meta) {
        var definitionMap = new DefinitionMap();
        definitionMap.set('version', literal('12.0.0-next.1'));
        definitionMap.set('ngImport', importExpr(Identifiers$1.core)); // e.g. `type: MyPipe`

        definitionMap.set('type', meta.internalType); // e.g. `name: "myPipe"`

        definitionMap.set('name', literal(meta.pipeName));

        if (meta.pure === false) {
          // e.g. `pure: false`
          definitionMap.set('pure', literal(meta.pure));
        }

        return definitionMap;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // This file only reexports content of the `src` folder. Keep it that way.
      // This function call has a global side effects and publishes the compiler into global namespace for
      // the late binding of the Compiler to the @angular/core for jit compilation.


      publishFacade(_global);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // This file only reexports content of the `src` folder. Keep it that way.

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      //# sourceMappingURL=compiler.js.map

      /***/
    },

    /***/
    "1uah":
    /*!***************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/zip.js ***!
      \***************************************************************/

    /*! exports provided: zip, ZipOperator, ZipSubscriber */

    /***/
    function uah(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "zip", function () {
        return zip;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ZipOperator", function () {
        return ZipOperator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ZipSubscriber", function () {
        return ZipSubscriber;
      });
      /* harmony import */


      var _fromArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./fromArray */
      "yCtX");
      /* harmony import */


      var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/isArray */
      "DH7j");
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");
      /* harmony import */


      var _internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ../../internal/symbol/iterator */
      "Lhse");
      /* harmony import */


      var _innerSubscribe__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ../innerSubscribe */
      "zx2A");

      function zip() {
        for (var _len14 = arguments.length, observables = new Array(_len14), _key16 = 0; _key16 < _len14; _key16++) {
          observables[_key16] = arguments[_key16];
        }

        var resultSelector = observables[observables.length - 1];

        if (typeof resultSelector === 'function') {
          observables.pop();
        }

        return Object(_fromArray__WEBPACK_IMPORTED_MODULE_0__["fromArray"])(observables, undefined).lift(new ZipOperator(resultSelector));
      }

      var ZipOperator = /*#__PURE__*/function () {
        function ZipOperator(resultSelector) {
          _classCallCheck2(this, ZipOperator);

          this.resultSelector = resultSelector;
        }

        _createClass2(ZipOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new ZipSubscriber(subscriber, this.resultSelector));
          }
        }]);

        return ZipOperator;
      }();

      var ZipSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_4) {
        _inherits2(ZipSubscriber, _Subscriber__WEBPACK_4);

        var _super169 = _createSuper(ZipSubscriber);

        function ZipSubscriber(destination, resultSelector) {
          var _this438;

          var values = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Object.create(null);

          _classCallCheck2(this, ZipSubscriber);

          _this438 = _super169.call(this, destination);
          _this438.resultSelector = resultSelector;
          _this438.iterators = [];
          _this438.active = 0;
          _this438.resultSelector = typeof resultSelector === 'function' ? resultSelector : undefined;
          return _this438;
        }

        _createClass2(ZipSubscriber, [{
          key: "_next",
          value: function _next(value) {
            var iterators = this.iterators;

            if (Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(value)) {
              iterators.push(new StaticArrayIterator(value));
            } else if (typeof value[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_3__["iterator"]] === 'function') {
              iterators.push(new StaticIterator(value[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_3__["iterator"]]()));
            } else {
              iterators.push(new ZipBufferIterator(this.destination, this, value));
            }
          }
        }, {
          key: "_complete",
          value: function _complete() {
            var iterators = this.iterators;
            var len = iterators.length;
            this.unsubscribe();

            if (len === 0) {
              this.destination.complete();
              return;
            }

            this.active = len;

            for (var i = 0; i < len; i++) {
              var iterator = iterators[i];

              if (iterator.stillUnsubscribed) {
                var destination = this.destination;
                destination.add(iterator.subscribe());
              } else {
                this.active--;
              }
            }
          }
        }, {
          key: "notifyInactive",
          value: function notifyInactive() {
            this.active--;

            if (this.active === 0) {
              this.destination.complete();
            }
          }
        }, {
          key: "checkIterators",
          value: function checkIterators() {
            var iterators = this.iterators;
            var len = iterators.length;
            var destination = this.destination;

            for (var i = 0; i < len; i++) {
              var iterator = iterators[i];

              if (typeof iterator.hasValue === 'function' && !iterator.hasValue()) {
                return;
              }
            }

            var shouldComplete = false;
            var args = [];

            for (var _i14 = 0; _i14 < len; _i14++) {
              var _iterator54 = iterators[_i14];

              var result = _iterator54.next();

              if (_iterator54.hasCompleted()) {
                shouldComplete = true;
              }

              if (result.done) {
                destination.complete();
                return;
              }

              args.push(result.value);
            }

            if (this.resultSelector) {
              this._tryresultSelector(args);
            } else {
              destination.next(args);
            }

            if (shouldComplete) {
              destination.complete();
            }
          }
        }, {
          key: "_tryresultSelector",
          value: function _tryresultSelector(args) {
            var result;

            try {
              result = this.resultSelector.apply(this, args);
            } catch (err) {
              this.destination.error(err);
              return;
            }

            this.destination.next(result);
          }
        }]);

        return ZipSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_2__["Subscriber"]);

      var StaticIterator = /*#__PURE__*/function () {
        function StaticIterator(iterator) {
          _classCallCheck2(this, StaticIterator);

          this.iterator = iterator;
          this.nextResult = iterator.next();
        }

        _createClass2(StaticIterator, [{
          key: "hasValue",
          value: function hasValue() {
            return true;
          }
        }, {
          key: "next",
          value: function next() {
            var result = this.nextResult;
            this.nextResult = this.iterator.next();
            return result;
          }
        }, {
          key: "hasCompleted",
          value: function hasCompleted() {
            var nextResult = this.nextResult;
            return Boolean(nextResult && nextResult.done);
          }
        }]);

        return StaticIterator;
      }();

      var StaticArrayIterator = /*#__PURE__*/function (_internal_symbol_iter) {
        function StaticArrayIterator(array) {
          _classCallCheck2(this, StaticArrayIterator);

          this.array = array;
          this.index = 0;
          this.length = 0;
          this.length = array.length;
        }

        _createClass2(StaticArrayIterator, [{
          key: _internal_symbol_iter,
          value: function value() {
            return this;
          }
        }, {
          key: "next",
          value: function next(value) {
            var i = this.index++;
            var array = this.array;
            return i < this.length ? {
              value: array[i],
              done: false
            } : {
              value: null,
              done: true
            };
          }
        }, {
          key: "hasValue",
          value: function hasValue() {
            return this.array.length > this.index;
          }
        }, {
          key: "hasCompleted",
          value: function hasCompleted() {
            return this.array.length === this.index;
          }
        }]);

        return StaticArrayIterator;
      }(_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_3__["iterator"]);

      var ZipBufferIterator = /*#__PURE__*/function (_innerSubscribe__WEBP3, _internal_symbol_iter2) {
        _inherits2(ZipBufferIterator, _innerSubscribe__WEBP3);

        var _super170 = _createSuper(ZipBufferIterator);

        function ZipBufferIterator(destination, parent, observable) {
          var _this439;

          _classCallCheck2(this, ZipBufferIterator);

          _this439 = _super170.call(this, destination);
          _this439.parent = parent;
          _this439.observable = observable;
          _this439.stillUnsubscribed = true;
          _this439.buffer = [];
          _this439.isComplete = false;
          return _this439;
        }

        _createClass2(ZipBufferIterator, [{
          key: _internal_symbol_iter2,
          value: function value() {
            return this;
          }
        }, {
          key: "next",
          value: function next() {
            var buffer = this.buffer;

            if (buffer.length === 0 && this.isComplete) {
              return {
                value: null,
                done: true
              };
            } else {
              return {
                value: buffer.shift(),
                done: false
              };
            }
          }
        }, {
          key: "hasValue",
          value: function hasValue() {
            return this.buffer.length > 0;
          }
        }, {
          key: "hasCompleted",
          value: function hasCompleted() {
            return this.buffer.length === 0 && this.isComplete;
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete() {
            if (this.buffer.length > 0) {
              this.isComplete = true;
              this.parent.notifyInactive();
            } else {
              this.destination.complete();
            }
          }
        }, {
          key: "notifyNext",
          value: function notifyNext(innerValue) {
            this.buffer.push(innerValue);
            this.parent.checkIterators();
          }
        }, {
          key: "subscribe",
          value: function subscribe() {
            return Object(_innerSubscribe__WEBPACK_IMPORTED_MODULE_4__["innerSubscribe"])(this.observable, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_4__["SimpleInnerSubscriber"](this));
          }
        }]);

        return ZipBufferIterator;
      }(_innerSubscribe__WEBPACK_IMPORTED_MODULE_4__["SimpleOuterSubscriber"], _internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_3__["iterator"]); //# sourceMappingURL=zip.js.map

      /***/

    },

    /***/
    "1vLn":
    /*!*****************************************************!*\
      !*** ./node_modules/aws-sdk/lib/model/operation.js ***!
      \*****************************************************/

    /*! no static exports found */

    /***/
    function vLn(module, exports, __webpack_require__) {
      var Shape = __webpack_require__(
      /*! ./shape */
      "nyFZ");

      var util = __webpack_require__(
      /*! ../util */
      "BaN1");

      var property = util.property;
      var memoizedProperty = util.memoizedProperty;

      function Operation(name, operation, options) {
        var self = this;
        options = options || {};
        property(this, 'name', operation.name || name);
        property(this, 'api', options.api, false);
        operation.http = operation.http || {};
        property(this, 'endpoint', operation.endpoint);
        property(this, 'httpMethod', operation.http.method || 'POST');
        property(this, 'httpPath', operation.http.requestUri || '/');
        property(this, 'authtype', operation.authtype || '');
        property(this, 'endpointDiscoveryRequired', operation.endpointdiscovery ? operation.endpointdiscovery.required ? 'REQUIRED' : 'OPTIONAL' : 'NULL');
        memoizedProperty(this, 'input', function () {
          if (!operation.input) {
            return new Shape.create({
              type: 'structure'
            }, options);
          }

          return Shape.create(operation.input, options);
        });
        memoizedProperty(this, 'output', function () {
          if (!operation.output) {
            return new Shape.create({
              type: 'structure'
            }, options);
          }

          return Shape.create(operation.output, options);
        });
        memoizedProperty(this, 'errors', function () {
          var list = [];
          if (!operation.errors) return null;

          for (var i = 0; i < operation.errors.length; i++) {
            list.push(Shape.create(operation.errors[i], options));
          }

          return list;
        });
        memoizedProperty(this, 'paginator', function () {
          return options.api.paginators[name];
        });

        if (options.documentation) {
          property(this, 'documentation', operation.documentation);
          property(this, 'documentationUrl', operation.documentationUrl);
        } // idempotentMembers only tracks top-level input shapes


        memoizedProperty(this, 'idempotentMembers', function () {
          var idempotentMembers = [];
          var input = self.input;
          var members = input.members;

          if (!input.members) {
            return idempotentMembers;
          }

          for (var name in members) {
            if (!members.hasOwnProperty(name)) {
              continue;
            }

            if (members[name].isIdempotent === true) {
              idempotentMembers.push(name);
            }
          }

          return idempotentMembers;
        });
        memoizedProperty(this, 'hasEventOutput', function () {
          var output = self.output;
          return hasEventStream(output);
        });
      }

      function hasEventStream(topLevelShape) {
        var members = topLevelShape.members;
        var payload = topLevelShape.payload;

        if (!topLevelShape.members) {
          return false;
        }

        if (payload) {
          var payloadMember = members[payload];
          return payloadMember.isEventStream;
        } // check if any member is an event stream


        for (var name in members) {
          if (!members.hasOwnProperty(name)) {
            if (members[name].isEventStream === true) {
              return true;
            }
          }
        }

        return false;
      }
      /**
       * @api private
       */


      module.exports = Operation;
      /***/
    },

    /***/
    "1xZ4":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/ca.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function xZ4(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Catalan [ca]
      //! author : Juan G. Hurtado : https://github.com/juanghurtado
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var ca = moment.defineLocale('ca', {
          months: {
            standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),
            format: "de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split('_'),
            isFormat: /D[oD]?(\s)+MMMM/
          },
          monthsShort: 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'),
          monthsParseExact: true,
          weekdays: 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),
          weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
          weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM [de] YYYY',
            ll: 'D MMM YYYY',
            LLL: 'D MMMM [de] YYYY [a les] H:mm',
            lll: 'D MMM YYYY, H:mm',
            LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',
            llll: 'ddd D MMM YYYY, H:mm'
          },
          calendar: {
            sameDay: function sameDay() {
              return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
            },
            nextDay: function nextDay() {
              return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
            },
            nextWeek: function nextWeek() {
              return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
            },
            lastDay: function lastDay() {
              return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
            },
            lastWeek: function lastWeek() {
              return '[el] dddd [passat a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: "d'aquí %s",
            past: 'fa %s',
            s: 'uns segons',
            ss: '%d segons',
            m: 'un minut',
            mm: '%d minuts',
            h: 'una hora',
            hh: '%d hores',
            d: 'un dia',
            dd: '%d dies',
            M: 'un mes',
            MM: '%d mesos',
            y: 'un any',
            yy: '%d anys'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/,
          ordinal: function ordinal(number, period) {
            var output = number === 1 ? 'r' : number === 2 ? 'n' : number === 3 ? 'r' : number === 4 ? 't' : 'è';

            if (period === 'w' || period === 'W') {
              output = 'a';
            }

            return number + output;
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return ca;
      });
      /***/

    },

    /***/
    "1yaQ":
    /*!********************************************************************************************************!*\
      !*** ./node_modules/@angular/material-moment-adapter/__ivy_ngcc__/fesm2015/material-moment-adapter.js ***!
      \********************************************************************************************************/

    /*! exports provided: MAT_MOMENT_DATE_ADAPTER_OPTIONS, MAT_MOMENT_DATE_ADAPTER_OPTIONS_FACTORY, MAT_MOMENT_DATE_FORMATS, MatMomentDateModule, MomentDateAdapter, MomentDateModule, ɵ0 */

    /***/
    function yaQ(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_MOMENT_DATE_ADAPTER_OPTIONS", function () {
        return MAT_MOMENT_DATE_ADAPTER_OPTIONS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_MOMENT_DATE_ADAPTER_OPTIONS_FACTORY", function () {
        return MAT_MOMENT_DATE_ADAPTER_OPTIONS_FACTORY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_MOMENT_DATE_FORMATS", function () {
        return MAT_MOMENT_DATE_FORMATS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatMomentDateModule", function () {
        return MatMomentDateModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MomentDateAdapter", function () {
        return MomentDateAdapter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MomentDateModule", function () {
        return MomentDateModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵ0", function () {
        return ɵ0;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_material_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/material/core */
      "FKr1");
      /* harmony import */


      var moment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! moment */
      "wd/R");
      /* harmony import */


      var moment__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_2__);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var moment = moment__WEBPACK_IMPORTED_MODULE_2___default.a || moment__WEBPACK_IMPORTED_MODULE_2__;
      /** InjectionToken for moment date adapter to configure options. */

      var MAT_MOMENT_DATE_ADAPTER_OPTIONS = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('MAT_MOMENT_DATE_ADAPTER_OPTIONS', {
        providedIn: 'root',
        factory: MAT_MOMENT_DATE_ADAPTER_OPTIONS_FACTORY
      });
      /** @docs-private */

      function MAT_MOMENT_DATE_ADAPTER_OPTIONS_FACTORY() {
        return {
          useUtc: false
        };
      }
      /** Creates an array and fills it with values. */


      function range(length, valueFunction) {
        var valuesArray = Array(length);

        for (var i = 0; i < length; i++) {
          valuesArray[i] = valueFunction(i);
        }

        return valuesArray;
      }
      /** Adapts Moment.js Dates for use with Angular Material. */


      var MomentDateAdapter = /*#__PURE__*/function (_angular_material_cor) {
        _inherits2(MomentDateAdapter, _angular_material_cor);

        var _super171 = _createSuper(MomentDateAdapter);

        function MomentDateAdapter(dateLocale, _options) {
          var _this440;

          _classCallCheck2(this, MomentDateAdapter);

          _this440 = _super171.call(this);
          _this440._options = _options;

          _this440.setLocale(dateLocale || moment.locale());

          return _this440;
        }

        _createClass2(MomentDateAdapter, [{
          key: "setLocale",
          value: function setLocale(locale) {
            var _this441 = this;

            _get2(_getPrototypeOf2(MomentDateAdapter.prototype), "setLocale", this).call(this, locale);

            var momentLocaleData = moment.localeData(locale);
            this._localeData = {
              firstDayOfWeek: momentLocaleData.firstDayOfWeek(),
              longMonths: momentLocaleData.months(),
              shortMonths: momentLocaleData.monthsShort(),
              dates: range(31, function (i) {
                return _this441.createDate(2017, 0, i + 1).format('D');
              }),
              longDaysOfWeek: momentLocaleData.weekdays(),
              shortDaysOfWeek: momentLocaleData.weekdaysShort(),
              narrowDaysOfWeek: momentLocaleData.weekdaysMin()
            };
          }
        }, {
          key: "getYear",
          value: function getYear(date) {
            return this.clone(date).year();
          }
        }, {
          key: "getMonth",
          value: function getMonth(date) {
            return this.clone(date).month();
          }
        }, {
          key: "getDate",
          value: function getDate(date) {
            return this.clone(date).date();
          }
        }, {
          key: "getDayOfWeek",
          value: function getDayOfWeek(date) {
            return this.clone(date).day();
          }
        }, {
          key: "getMonthNames",
          value: function getMonthNames(style) {
            // Moment.js doesn't support narrow month names, so we just use short if narrow is requested.
            return style == 'long' ? this._localeData.longMonths : this._localeData.shortMonths;
          }
        }, {
          key: "getDateNames",
          value: function getDateNames() {
            return this._localeData.dates;
          }
        }, {
          key: "getDayOfWeekNames",
          value: function getDayOfWeekNames(style) {
            if (style == 'long') {
              return this._localeData.longDaysOfWeek;
            }

            if (style == 'short') {
              return this._localeData.shortDaysOfWeek;
            }

            return this._localeData.narrowDaysOfWeek;
          }
        }, {
          key: "getYearName",
          value: function getYearName(date) {
            return this.clone(date).format('YYYY');
          }
        }, {
          key: "getFirstDayOfWeek",
          value: function getFirstDayOfWeek() {
            return this._localeData.firstDayOfWeek;
          }
        }, {
          key: "getNumDaysInMonth",
          value: function getNumDaysInMonth(date) {
            return this.clone(date).daysInMonth();
          }
        }, {
          key: "clone",
          value: function clone(date) {
            return date.clone().locale(this.locale);
          }
        }, {
          key: "createDate",
          value: function createDate(year, month, date) {
            // Moment.js will create an invalid date if any of the components are out of bounds, but we
            // explicitly check each case so we can throw more descriptive errors.
            if (typeof ngDevMode === 'undefined' || ngDevMode) {
              if (month < 0 || month > 11) {
                throw Error("Invalid month index \"".concat(month, "\". Month index has to be between 0 and 11."));
              }

              if (date < 1) {
                throw Error("Invalid date \"".concat(date, "\". Date has to be greater than 0."));
              }
            }

            var result = this._createMoment({
              year: year,
              month: month,
              date: date
            }).locale(this.locale); // If the result isn't valid, the date must have been out of bounds for this month.


            if (!result.isValid() && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw Error("Invalid date \"".concat(date, "\" for month with index \"").concat(month, "\"."));
            }

            return result;
          }
        }, {
          key: "today",
          value: function today() {
            return this._createMoment().locale(this.locale);
          }
        }, {
          key: "parse",
          value: function parse(value, parseFormat) {
            if (value && typeof value == 'string') {
              return this._createMoment(value, parseFormat, this.locale);
            }

            return value ? this._createMoment(value).locale(this.locale) : null;
          }
        }, {
          key: "format",
          value: function format(date, displayFormat) {
            date = this.clone(date);

            if (!this.isValid(date) && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw Error('MomentDateAdapter: Cannot format invalid date.');
            }

            return date.format(displayFormat);
          }
        }, {
          key: "addCalendarYears",
          value: function addCalendarYears(date, years) {
            return this.clone(date).add({
              years: years
            });
          }
        }, {
          key: "addCalendarMonths",
          value: function addCalendarMonths(date, months) {
            return this.clone(date).add({
              months: months
            });
          }
        }, {
          key: "addCalendarDays",
          value: function addCalendarDays(date, days) {
            return this.clone(date).add({
              days: days
            });
          }
        }, {
          key: "toIso8601",
          value: function toIso8601(date) {
            return this.clone(date).format();
          }
          /**
           * Returns the given value if given a valid Moment or null. Deserializes valid ISO 8601 strings
           * (https://www.ietf.org/rfc/rfc3339.txt) and valid Date objects into valid Moments and empty
           * string into null. Returns an invalid date for all other values.
           */

        }, {
          key: "deserialize",
          value: function deserialize(value) {
            var date;

            if (value instanceof Date) {
              date = this._createMoment(value).locale(this.locale);
            } else if (this.isDateInstance(value)) {
              // Note: assumes that cloning also sets the correct locale.
              return this.clone(value);
            }

            if (typeof value === 'string') {
              if (!value) {
                return null;
              }

              date = this._createMoment(value, moment.ISO_8601).locale(this.locale);
            }

            if (date && this.isValid(date)) {
              return this._createMoment(date).locale(this.locale);
            }

            return _get2(_getPrototypeOf2(MomentDateAdapter.prototype), "deserialize", this).call(this, value);
          }
        }, {
          key: "isDateInstance",
          value: function isDateInstance(obj) {
            return moment.isMoment(obj);
          }
        }, {
          key: "isValid",
          value: function isValid(date) {
            return this.clone(date).isValid();
          }
        }, {
          key: "invalid",
          value: function invalid() {
            return moment.invalid();
          }
          /** Creates a Moment instance while respecting the current UTC settings. */

        }, {
          key: "_createMoment",
          value: function _createMoment(date, format, locale) {
            var _ref101 = this._options || {},
                strict = _ref101.strict,
                useUtc = _ref101.useUtc;

            return useUtc ? moment.utc(date, format, locale, strict) : moment(date, format, locale, strict);
          }
        }]);

        return MomentDateAdapter;
      }(_angular_material_core__WEBPACK_IMPORTED_MODULE_1__["DateAdapter"]);

      MomentDateAdapter.ɵfac = function MomentDateAdapter_Factory(t) {
        return new (t || MomentDateAdapter)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MAT_DATE_LOCALE"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](MAT_MOMENT_DATE_ADAPTER_OPTIONS, 8));
      };

      MomentDateAdapter.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: MomentDateAdapter,
        factory: MomentDateAdapter.ɵfac
      });

      MomentDateAdapter.ctorParameters = function () {
        return [{
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MAT_DATE_LOCALE"]]
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [MAT_MOMENT_DATE_ADAPTER_OPTIONS]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MomentDateAdapter, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MAT_DATE_LOCALE"]]
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [MAT_MOMENT_DATE_ADAPTER_OPTIONS]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var MAT_MOMENT_DATE_FORMATS = {
        parse: {
          dateInput: 'l'
        },
        display: {
          dateInput: 'l',
          monthYearLabel: 'MMM YYYY',
          dateA11yLabel: 'LL',
          monthYearA11yLabel: 'MMMM YYYY'
        }
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var MomentDateModule = function MomentDateModule() {
        _classCallCheck2(this, MomentDateModule);
      };

      MomentDateModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: MomentDateModule
      });
      MomentDateModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function MomentDateModule_Factory(t) {
          return new (t || MomentDateModule)();
        },
        providers: [{
          provide: _angular_material_core__WEBPACK_IMPORTED_MODULE_1__["DateAdapter"],
          useClass: MomentDateAdapter,
          deps: [_angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MAT_DATE_LOCALE"], MAT_MOMENT_DATE_ADAPTER_OPTIONS]
        }]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MomentDateModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            providers: [{
              provide: _angular_material_core__WEBPACK_IMPORTED_MODULE_1__["DateAdapter"],
              useClass: MomentDateAdapter,
              deps: [_angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MAT_DATE_LOCALE"], MAT_MOMENT_DATE_ADAPTER_OPTIONS]
            }]
          }]
        }], null, null);
      })();

      var ɵ0 = MAT_MOMENT_DATE_FORMATS;

      var MatMomentDateModule = function MatMomentDateModule() {
        _classCallCheck2(this, MatMomentDateModule);
      };

      MatMomentDateModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: MatMomentDateModule
      });
      MatMomentDateModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function MatMomentDateModule_Factory(t) {
          return new (t || MatMomentDateModule)();
        },
        providers: [{
          provide: _angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MAT_DATE_FORMATS"],
          useValue: ɵ0
        }],
        imports: [[MomentDateModule]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](MatMomentDateModule, {
          imports: [MomentDateModule]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatMomentDateModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            imports: [MomentDateModule],
            providers: [{
              provide: _angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MAT_DATE_FORMATS"],
              useValue: ɵ0
            }]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=material-moment-adapter.js.map

      /***/

    },

    /***/
    "2QA8":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/symbol/rxSubscriber.js ***!
      \********************************************************************/

    /*! exports provided: rxSubscriber, $$rxSubscriber */

    /***/
    function QA8(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "rxSubscriber", function () {
        return rxSubscriber;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "$$rxSubscriber", function () {
        return $$rxSubscriber;
      });

      var rxSubscriber = function () {
        return typeof Symbol === 'function' ? Symbol('rxSubscriber') : '@@rxSubscriber_' + Math.random();
      }();

      var $$rxSubscriber = rxSubscriber; //# sourceMappingURL=rxSubscriber.js.map

      /***/
    },

    /***/
    "2QGa":
    /*!*********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/partition.js ***!
      \*********************************************************************/

    /*! exports provided: partition */

    /***/
    function QGa(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "partition", function () {
        return partition;
      });
      /* harmony import */


      var _util_not__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../util/not */
      "F97/");
      /* harmony import */


      var _util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/subscribeTo */
      "SeVD");
      /* harmony import */


      var _operators_filter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../operators/filter */
      "pLZG");
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");

      function partition(source, predicate, thisArg) {
        return [Object(_operators_filter__WEBPACK_IMPORTED_MODULE_2__["filter"])(predicate, thisArg)(new _Observable__WEBPACK_IMPORTED_MODULE_3__["Observable"](Object(_util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__["subscribeTo"])(source))), Object(_operators_filter__WEBPACK_IMPORTED_MODULE_2__["filter"])(Object(_util_not__WEBPACK_IMPORTED_MODULE_0__["not"])(predicate, thisArg))(new _Observable__WEBPACK_IMPORTED_MODULE_3__["Observable"](Object(_util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__["subscribeTo"])(source)))];
      } //# sourceMappingURL=partition.js.map

      /***/

    },

    /***/
    "2Vo4":
    /*!****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/BehaviorSubject.js ***!
      \****************************************************************/

    /*! exports provided: BehaviorSubject */

    /***/
    function Vo4(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BehaviorSubject", function () {
        return BehaviorSubject;
      });
      /* harmony import */


      var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./Subject */
      "XNiG");
      /* harmony import */


      var _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./util/ObjectUnsubscribedError */
      "9ppp");

      var BehaviorSubject = /*#__PURE__*/function (_Subject__WEBPACK_IMP) {
        _inherits2(BehaviorSubject, _Subject__WEBPACK_IMP);

        var _super172 = _createSuper(BehaviorSubject);

        function BehaviorSubject(_value) {
          var _this442;

          _classCallCheck2(this, BehaviorSubject);

          _this442 = _super172.call(this);
          _this442._value = _value;
          return _this442;
        }

        _createClass2(BehaviorSubject, [{
          key: "value",
          get: function get() {
            return this.getValue();
          }
        }, {
          key: "_subscribe",
          value: function _subscribe(subscriber) {
            var subscription = _get2(_getPrototypeOf2(BehaviorSubject.prototype), "_subscribe", this).call(this, subscriber);

            if (subscription && !subscription.closed) {
              subscriber.next(this._value);
            }

            return subscription;
          }
        }, {
          key: "getValue",
          value: function getValue() {
            if (this.hasError) {
              throw this.thrownError;
            } else if (this.closed) {
              throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_1__["ObjectUnsubscribedError"]();
            } else {
              return this._value;
            }
          }
        }, {
          key: "next",
          value: function next(value) {
            _get2(_getPrototypeOf2(BehaviorSubject.prototype), "next", this).call(this, this._value = value);
          }
        }]);

        return BehaviorSubject;
      }(_Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"]); //# sourceMappingURL=BehaviorSubject.js.map

      /***/

    },

    /***/
    "2fFW":
    /*!*******************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/config.js ***!
      \*******************************************************/

    /*! exports provided: config */

    /***/
    function fFW(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "config", function () {
        return config;
      });

      var _enable_super_gross_mode_that_will_cause_bad_things = false;
      var config = {
        Promise: undefined,

        set useDeprecatedSynchronousErrorHandling(value) {
          if (value) {
            var error = new Error();
            console.warn('DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \n' + error.stack);
          } else if (_enable_super_gross_mode_that_will_cause_bad_things) {
            console.log('RxJS: Back to a better error behavior. Thank you. <3');
          }

          _enable_super_gross_mode_that_will_cause_bad_things = value;
        },

        get useDeprecatedSynchronousErrorHandling() {
          return _enable_super_gross_mode_that_will_cause_bad_things;
        }

      }; //# sourceMappingURL=config.js.map

      /***/
    },

    /***/
    "2fjn":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/fr-ca.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function fjn(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : French (Canada) [fr-ca]
      //! author : Jonathan Abourbih : https://github.com/jonbca
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var frCa = moment.defineLocale('fr-ca', {
          months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
          monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
          monthsParseExact: true,
          weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
          weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
          weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[Aujourd’hui à] LT',
            nextDay: '[Demain à] LT',
            nextWeek: 'dddd [à] LT',
            lastDay: '[Hier à] LT',
            lastWeek: 'dddd [dernier à] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'dans %s',
            past: 'il y a %s',
            s: 'quelques secondes',
            ss: '%d secondes',
            m: 'une minute',
            mm: '%d minutes',
            h: 'une heure',
            hh: '%d heures',
            d: 'un jour',
            dd: '%d jours',
            M: 'un mois',
            MM: '%d mois',
            y: 'un an',
            yy: '%d ans'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
          ordinal: function ordinal(number, period) {
            switch (period) {
              // Words with masculine grammatical gender: mois, trimestre, jour
              default:
              case 'M':
              case 'Q':
              case 'D':
              case 'DDD':
              case 'd':
                return number + (number === 1 ? 'er' : 'e');
              // Words with feminine grammatical gender: semaine

              case 'w':
              case 'W':
                return number + (number === 1 ? 're' : 'e');
            }
          }
        });
        return frCa;
      });
      /***/

    },

    /***/
    "2ykv":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/nl-be.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function ykv(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Dutch (Belgium) [nl-be]
      //! author : Joris Röling : https://github.com/jorisroling
      //! author : Jacob Middag : https://github.com/middagj
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),
            monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),
            monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i],
            monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
        var nlBe = moment.defineLocale('nl-be', {
          months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),
          monthsShort: function monthsShort(m, format) {
            if (!m) {
              return monthsShortWithDots;
            } else if (/-MMM-/.test(format)) {
              return monthsShortWithoutDots[m.month()];
            } else {
              return monthsShortWithDots[m.month()];
            }
          },
          monthsRegex: monthsRegex,
          monthsShortRegex: monthsRegex,
          monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
          monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
          monthsParse: monthsParse,
          longMonthsParse: monthsParse,
          shortMonthsParse: monthsParse,
          weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
          weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
          weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[vandaag om] LT',
            nextDay: '[morgen om] LT',
            nextWeek: 'dddd [om] LT',
            lastDay: '[gisteren om] LT',
            lastWeek: '[afgelopen] dddd [om] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'over %s',
            past: '%s geleden',
            s: 'een paar seconden',
            ss: '%d seconden',
            m: 'één minuut',
            mm: '%d minuten',
            h: 'één uur',
            hh: '%d uur',
            d: 'één dag',
            dd: '%d dagen',
            M: 'één maand',
            MM: '%d maanden',
            y: 'één jaar',
            yy: '%d jaar'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
          ordinal: function ordinal(number) {
            return number + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de');
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return nlBe;
      });
      /***/

    },

    /***/
    "3/th":
    /*!******************************************************************!*\
      !*** ./node_modules/aws-sdk/apis/sts-2011-06-15.paginators.json ***!
      \******************************************************************/

    /*! exports provided: pagination, default */

    /***/
    function th(module) {
      module.exports = JSON.parse("{\"pagination\":{}}");
      /***/
    },

    /***/
    "32Ea":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/skipWhile.js ***!
      \********************************************************************/

    /*! exports provided: skipWhile */

    /***/
    function Ea(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "skipWhile", function () {
        return skipWhile;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");

      function skipWhile(predicate) {
        return function (source) {
          return source.lift(new SkipWhileOperator(predicate));
        };
      }

      var SkipWhileOperator = /*#__PURE__*/function () {
        function SkipWhileOperator(predicate) {
          _classCallCheck2(this, SkipWhileOperator);

          this.predicate = predicate;
        }

        _createClass2(SkipWhileOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new SkipWhileSubscriber(subscriber, this.predicate));
          }
        }]);

        return SkipWhileOperator;
      }();

      var SkipWhileSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_5) {
        _inherits2(SkipWhileSubscriber, _Subscriber__WEBPACK_5);

        var _super173 = _createSuper(SkipWhileSubscriber);

        function SkipWhileSubscriber(destination, predicate) {
          var _this443;

          _classCallCheck2(this, SkipWhileSubscriber);

          _this443 = _super173.call(this, destination);
          _this443.predicate = predicate;
          _this443.skipping = true;
          _this443.index = 0;
          return _this443;
        }

        _createClass2(SkipWhileSubscriber, [{
          key: "_next",
          value: function _next(value) {
            var destination = this.destination;

            if (this.skipping) {
              this.tryCallPredicate(value);
            }

            if (!this.skipping) {
              destination.next(value);
            }
          }
        }, {
          key: "tryCallPredicate",
          value: function tryCallPredicate(value) {
            try {
              var result = this.predicate(value, this.index++);
              this.skipping = Boolean(result);
            } catch (err) {
              this.destination.error(err);
            }
          }
        }]);

        return SkipWhileSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=skipWhile.js.map

      /***/

    },

    /***/
    "341s":
    /*!*********************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/timer.component.js ***!
      \*********************************************************************************/

    /*! exports provided: OwlTimerComponent */

    /***/
    function s(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OwlTimerComponent", function () {
        return OwlTimerComponent;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _date_time_picker_intl_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./date-time-picker-intl.service */
      "MN5+");
      /* harmony import */


      var _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./adapter/date-time-adapter.class */
      "1rjb");
      /* harmony import */


      var _timer_box_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./timer-box.component */
      "3ijt");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");

      function OwlTimerComponent_owl_date_time_timer_box_2_Template(rf, ctx) {
        if (rf & 1) {
          var _r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "owl-date-time-timer-box", 1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("inputChange", function OwlTimerComponent_owl_date_time_timer_box_2_Template_owl_date_time_timer_box_inputChange_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r3);

            var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r2.setSecondValue($event);
          })("valueChange", function OwlTimerComponent_owl_date_time_timer_box_2_Template_owl_date_time_timer_box_valueChange_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r3);

            var ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r4.setSecondValue($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("showDivider", true)("upBtnAriaLabel", ctx_r0.upSecondButtonLabel)("downBtnAriaLabel", ctx_r0.downSecondButtonLabel)("upBtnDisabled", !ctx_r0.upSecondEnabled())("downBtnDisabled", !ctx_r0.downSecondEnabled())("value", ctx_r0.secondValue)("min", 0)("max", 59)("step", ctx_r0.stepSecond)("inputLabel", "Second");
        }
      }

      function OwlTimerComponent_div_3_Template(rf, ctx) {
        if (rf & 1) {
          var _r6 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 4);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "button", 5);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function OwlTimerComponent_div_3_Template_button_click_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r6);

            var ctx_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r5.setMeridiem($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "span", 6);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r1.hour12ButtonLabel);
        }
      }

      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var __metadata = undefined && undefined.__metadata || function (k, v) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
      };

      var __param = undefined && undefined.__param || function (paramIndex, decorator) {
        return function (target, key) {
          decorator(target, key, paramIndex);
        };
      };

      var OwlTimerComponent = function () {
        function OwlTimerComponent(ngZone, elmRef, pickerIntl, cdRef, dateTimeAdapter) {
          this.ngZone = ngZone;
          this.elmRef = elmRef;
          this.pickerIntl = pickerIntl;
          this.cdRef = cdRef;
          this.dateTimeAdapter = dateTimeAdapter;
          this.isPM = false;
          this.stepHour = 1;
          this.stepMinute = 1;
          this.stepSecond = 1;
          this.selectedChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        }

        Object.defineProperty(OwlTimerComponent.prototype, "pickerMoment", {
          get: function get() {
            return this._pickerMoment;
          },
          set: function set(value) {
            value = this.dateTimeAdapter.deserialize(value);
            this._pickerMoment = this.getValidDate(value) || this.dateTimeAdapter.now();
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlTimerComponent.prototype, "minDateTime", {
          get: function get() {
            return this._minDateTime;
          },
          set: function set(value) {
            value = this.dateTimeAdapter.deserialize(value);
            this._minDateTime = this.getValidDate(value);
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlTimerComponent.prototype, "maxDateTime", {
          get: function get() {
            return this._maxDateTime;
          },
          set: function set(value) {
            value = this.dateTimeAdapter.deserialize(value);
            this._maxDateTime = this.getValidDate(value);
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlTimerComponent.prototype, "hourValue", {
          get: function get() {
            return this.dateTimeAdapter.getHours(this.pickerMoment);
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlTimerComponent.prototype, "hourBoxValue", {
          get: function get() {
            var hours = this.hourValue;

            if (!this.hour12Timer) {
              return hours;
            } else {
              if (hours === 0) {
                hours = 12;
                this.isPM = false;
              } else if (hours > 0 && hours < 12) {
                this.isPM = false;
              } else if (hours === 12) {
                this.isPM = true;
              } else if (hours > 12 && hours < 24) {
                hours = hours - 12;
                this.isPM = true;
              }

              return hours;
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlTimerComponent.prototype, "minuteValue", {
          get: function get() {
            return this.dateTimeAdapter.getMinutes(this.pickerMoment);
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlTimerComponent.prototype, "secondValue", {
          get: function get() {
            return this.dateTimeAdapter.getSeconds(this.pickerMoment);
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlTimerComponent.prototype, "upHourButtonLabel", {
          get: function get() {
            return this.pickerIntl.upHourLabel;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlTimerComponent.prototype, "downHourButtonLabel", {
          get: function get() {
            return this.pickerIntl.downHourLabel;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlTimerComponent.prototype, "upMinuteButtonLabel", {
          get: function get() {
            return this.pickerIntl.upMinuteLabel;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlTimerComponent.prototype, "downMinuteButtonLabel", {
          get: function get() {
            return this.pickerIntl.downMinuteLabel;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlTimerComponent.prototype, "upSecondButtonLabel", {
          get: function get() {
            return this.pickerIntl.upSecondLabel;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlTimerComponent.prototype, "downSecondButtonLabel", {
          get: function get() {
            return this.pickerIntl.downSecondLabel;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlTimerComponent.prototype, "hour12ButtonLabel", {
          get: function get() {
            return this.isPM ? this.pickerIntl.hour12PMLabel : this.pickerIntl.hour12AMLabel;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlTimerComponent.prototype, "owlDTTimerClass", {
          get: function get() {
            return true;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlTimerComponent.prototype, "owlDTTimeTabIndex", {
          get: function get() {
            return -1;
          },
          enumerable: true,
          configurable: true
        });

        OwlTimerComponent.prototype.ngOnInit = function () {};

        OwlTimerComponent.prototype.focus = function () {
          var _this = this;

          this.ngZone.runOutsideAngular(function () {
            _this.ngZone.onStable.asObservable().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["take"])(1)).subscribe(function () {
              _this.elmRef.nativeElement.focus();
            });
          });
        };

        OwlTimerComponent.prototype.setHourValueViaInput = function (hours) {
          if (this.hour12Timer && this.isPM && hours >= 1 && hours <= 11) {
            hours = hours + 12;
          } else if (this.hour12Timer && !this.isPM && hours === 12) {
            hours = 0;
          }

          this.setHourValue(hours);
        };

        OwlTimerComponent.prototype.setHourValue = function (hours) {
          var m = this.dateTimeAdapter.setHours(this.pickerMoment, hours);
          this.selectedChange.emit(m);
          this.cdRef.markForCheck();
        };

        OwlTimerComponent.prototype.setMinuteValue = function (minutes) {
          var m = this.dateTimeAdapter.setMinutes(this.pickerMoment, minutes);
          this.selectedChange.emit(m);
          this.cdRef.markForCheck();
        };

        OwlTimerComponent.prototype.setSecondValue = function (seconds) {
          var m = this.dateTimeAdapter.setSeconds(this.pickerMoment, seconds);
          this.selectedChange.emit(m);
          this.cdRef.markForCheck();
        };

        OwlTimerComponent.prototype.setMeridiem = function (event) {
          this.isPM = !this.isPM;
          var hours = this.hourValue;

          if (this.isPM) {
            hours = hours + 12;
          } else {
            hours = hours - 12;
          }

          if (hours >= 0 && hours <= 23) {
            this.setHourValue(hours);
          }

          this.cdRef.markForCheck();
          event.preventDefault();
        };

        OwlTimerComponent.prototype.upHourEnabled = function () {
          return !this.maxDateTime || this.compareHours(this.stepHour, this.maxDateTime) < 1;
        };

        OwlTimerComponent.prototype.downHourEnabled = function () {
          return !this.minDateTime || this.compareHours(-this.stepHour, this.minDateTime) > -1;
        };

        OwlTimerComponent.prototype.upMinuteEnabled = function () {
          return !this.maxDateTime || this.compareMinutes(this.stepMinute, this.maxDateTime) < 1;
        };

        OwlTimerComponent.prototype.downMinuteEnabled = function () {
          return !this.minDateTime || this.compareMinutes(-this.stepMinute, this.minDateTime) > -1;
        };

        OwlTimerComponent.prototype.upSecondEnabled = function () {
          return !this.maxDateTime || this.compareSeconds(this.stepSecond, this.maxDateTime) < 1;
        };

        OwlTimerComponent.prototype.downSecondEnabled = function () {
          return !this.minDateTime || this.compareSeconds(-this.stepSecond, this.minDateTime) > -1;
        };

        OwlTimerComponent.prototype.compareHours = function (amount, comparedDate) {
          var hours = this.dateTimeAdapter.getHours(this.pickerMoment) + amount;
          var result = this.dateTimeAdapter.setHours(this.pickerMoment, hours);
          return this.dateTimeAdapter.compare(result, comparedDate);
        };

        OwlTimerComponent.prototype.compareMinutes = function (amount, comparedDate) {
          var minutes = this.dateTimeAdapter.getMinutes(this.pickerMoment) + amount;
          var result = this.dateTimeAdapter.setMinutes(this.pickerMoment, minutes);
          return this.dateTimeAdapter.compare(result, comparedDate);
        };

        OwlTimerComponent.prototype.compareSeconds = function (amount, comparedDate) {
          var seconds = this.dateTimeAdapter.getSeconds(this.pickerMoment) + amount;
          var result = this.dateTimeAdapter.setSeconds(this.pickerMoment, seconds);
          return this.dateTimeAdapter.compare(result, comparedDate);
        };

        OwlTimerComponent.prototype.getValidDate = function (obj) {
          return this.dateTimeAdapter.isDateInstance(obj) && this.dateTimeAdapter.isValid(obj) ? obj : null;
        };

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlTimerComponent.prototype, "pickerMoment", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlTimerComponent.prototype, "minDateTime", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlTimerComponent.prototype, "maxDateTime", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Boolean)], OwlTimerComponent.prototype, "showSecondsTimer", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Boolean)], OwlTimerComponent.prototype, "hour12Timer", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object)], OwlTimerComponent.prototype, "stepHour", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object)], OwlTimerComponent.prototype, "stepMinute", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object)], OwlTimerComponent.prototype, "stepSecond", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", Object)], OwlTimerComponent.prototype, "selectedChange", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('class.owl-dt-timer'), __metadata("design:type", Boolean), __metadata("design:paramtypes", [])], OwlTimerComponent.prototype, "owlDTTimerClass", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('attr.tabindex'), __metadata("design:type", Number), __metadata("design:paramtypes", [])], OwlTimerComponent.prototype, "owlDTTimeTabIndex", null);

        OwlTimerComponent = __decorate([__param(4, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __metadata("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], _date_time_picker_intl_service__WEBPACK_IMPORTED_MODULE_1__["OwlDateTimeIntl"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"], _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__["DateTimeAdapter"]])], OwlTimerComponent);

        OwlTimerComponent.ɵfac = function OwlTimerComponent_Factory(t) {
          return new (t || OwlTimerComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_date_time_picker_intl_service__WEBPACK_IMPORTED_MODULE_1__["OwlDateTimeIntl"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__["DateTimeAdapter"], 8));
        };

        OwlTimerComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
          type: OwlTimerComponent,
          selectors: [["owl-date-time-timer"]],
          hostVars: 3,
          hostBindings: function OwlTimerComponent_HostBindings(rf, ctx) {
            if (rf & 2) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("tabindex", ctx.owlDTTimeTabIndex);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("owl-dt-timer", ctx.owlDTTimerClass);
            }
          },
          inputs: {
            stepHour: "stepHour",
            stepMinute: "stepMinute",
            stepSecond: "stepSecond",
            pickerMoment: "pickerMoment",
            minDateTime: "minDateTime",
            maxDateTime: "maxDateTime",
            showSecondsTimer: "showSecondsTimer",
            hour12Timer: "hour12Timer"
          },
          outputs: {
            selectedChange: "selectedChange"
          },
          exportAs: ["owlDateTimeTimer"],
          decls: 4,
          vars: 22,
          consts: [[3, "upBtnAriaLabel", "downBtnAriaLabel", "upBtnDisabled", "downBtnDisabled", "boxValue", "value", "min", "max", "step", "inputLabel", "inputChange", "valueChange"], [3, "showDivider", "upBtnAriaLabel", "downBtnAriaLabel", "upBtnDisabled", "downBtnDisabled", "value", "min", "max", "step", "inputLabel", "inputChange", "valueChange"], [3, "showDivider", "upBtnAriaLabel", "downBtnAriaLabel", "upBtnDisabled", "downBtnDisabled", "value", "min", "max", "step", "inputLabel", "inputChange", "valueChange", 4, "ngIf"], ["class", "owl-dt-timer-hour12", 4, "ngIf"], [1, "owl-dt-timer-hour12"], ["type", "button", "tabindex", "0", 1, "owl-dt-control-button", "owl-dt-timer-hour12-box", 3, "click"], ["tabindex", "-1", 1, "owl-dt-control-button-content"]],
          template: function OwlTimerComponent_Template(rf, ctx) {
            if (rf & 1) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "owl-date-time-timer-box", 0);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("inputChange", function OwlTimerComponent_Template_owl_date_time_timer_box_inputChange_0_listener($event) {
                return ctx.setHourValueViaInput($event);
              })("valueChange", function OwlTimerComponent_Template_owl_date_time_timer_box_valueChange_0_listener($event) {
                return ctx.setHourValue($event);
              });

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "owl-date-time-timer-box", 1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("inputChange", function OwlTimerComponent_Template_owl_date_time_timer_box_inputChange_1_listener($event) {
                return ctx.setMinuteValue($event);
              })("valueChange", function OwlTimerComponent_Template_owl_date_time_timer_box_valueChange_1_listener($event) {
                return ctx.setMinuteValue($event);
              });

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, OwlTimerComponent_owl_date_time_timer_box_2_Template, 1, 10, "owl-date-time-timer-box", 2);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, OwlTimerComponent_div_3_Template, 4, 1, "div", 3);
            }

            if (rf & 2) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("upBtnAriaLabel", ctx.upHourButtonLabel)("downBtnAriaLabel", ctx.downHourButtonLabel)("upBtnDisabled", !ctx.upHourEnabled())("downBtnDisabled", !ctx.downHourEnabled())("boxValue", ctx.hourBoxValue)("value", ctx.hourValue)("min", 0)("max", 23)("step", ctx.stepHour)("inputLabel", "Hour");

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("showDivider", true)("upBtnAriaLabel", ctx.upMinuteButtonLabel)("downBtnAriaLabel", ctx.downMinuteButtonLabel)("upBtnDisabled", !ctx.upMinuteEnabled())("downBtnDisabled", !ctx.downMinuteEnabled())("value", ctx.minuteValue)("min", 0)("max", 59)("step", ctx.stepMinute)("inputLabel", "Minute");

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.showSecondsTimer);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.hour12Timer);
            }
          },
          directives: [_timer_box_component__WEBPACK_IMPORTED_MODULE_3__["OwlTimerBoxComponent"], _angular_common__WEBPACK_IMPORTED_MODULE_4__["NgIf"]],
          styles: [""],
          changeDetection: 0
        });

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](OwlTimerComponent, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
            args: [{
              exportAs: 'owlDateTimeTimer',
              selector: 'owl-date-time-timer',
              template: "<owl-date-time-timer-box [upBtnAriaLabel]=\"upHourButtonLabel\" [downBtnAriaLabel]=\"downHourButtonLabel\" [upBtnDisabled]=\"!upHourEnabled()\" [downBtnDisabled]=\"!downHourEnabled()\" [boxValue]=\"hourBoxValue\" [value]=\"hourValue\" [min]=\"0\" [max]=\"23\" [step]=\"stepHour\" [inputLabel]=\"'Hour'\" (inputChange)=\"setHourValueViaInput($event)\" (valueChange)=\"setHourValue($event)\"></owl-date-time-timer-box><owl-date-time-timer-box [showDivider]=\"true\" [upBtnAriaLabel]=\"upMinuteButtonLabel\" [downBtnAriaLabel]=\"downMinuteButtonLabel\" [upBtnDisabled]=\"!upMinuteEnabled()\" [downBtnDisabled]=\"!downMinuteEnabled()\" [value]=\"minuteValue\" [min]=\"0\" [max]=\"59\" [step]=\"stepMinute\" [inputLabel]=\"'Minute'\" (inputChange)=\"setMinuteValue($event)\" (valueChange)=\"setMinuteValue($event)\"></owl-date-time-timer-box><owl-date-time-timer-box *ngIf=\"showSecondsTimer\" [showDivider]=\"true\" [upBtnAriaLabel]=\"upSecondButtonLabel\" [downBtnAriaLabel]=\"downSecondButtonLabel\" [upBtnDisabled]=\"!upSecondEnabled()\" [downBtnDisabled]=\"!downSecondEnabled()\" [value]=\"secondValue\" [min]=\"0\" [max]=\"59\" [step]=\"stepSecond\" [inputLabel]=\"'Second'\" (inputChange)=\"setSecondValue($event)\" (valueChange)=\"setSecondValue($event)\"></owl-date-time-timer-box><div *ngIf=\"hour12Timer\" class=\"owl-dt-timer-hour12\"><button class=\"owl-dt-control-button owl-dt-timer-hour12-box\" type=\"button\" tabindex=\"0\" (click)=\"setMeridiem($event)\"><span class=\"owl-dt-control-button-content\" tabindex=\"-1\">{{hour12ButtonLabel}}</span></button></div>",
              styles: [""],
              preserveWhitespaces: false,
              changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush
            }]
          }], function () {
            return [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
            }, {
              type: _date_time_picker_intl_service__WEBPACK_IMPORTED_MODULE_1__["OwlDateTimeIntl"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
            }, {
              type: _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__["DateTimeAdapter"],
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
              }]
            }];
          }, {
            stepHour: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            stepMinute: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            stepSecond: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            selectedChange: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            pickerMoment: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            minDateTime: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            maxDateTime: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            owlDTTimerClass: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['class.owl-dt-timer']
            }],
            owlDTTimeTabIndex: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['attr.tabindex']
            }],
            showSecondsTimer: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            hour12Timer: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }]
          });
        })();

        return OwlTimerComponent;
      }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64, 

      /***/

    },

    /***/
    "3E0/":
    /*!****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/delay.js ***!
      \****************************************************************/

    /*! exports provided: delay */

    /***/
    function E0(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "delay", function () {
        return delay;
      });
      /* harmony import */


      var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../scheduler/async */
      "D0XW");
      /* harmony import */


      var _util_isDate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/isDate */
      "mlxB");
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");
      /* harmony import */


      var _Notification__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ../Notification */
      "WMd4");

      function delay(delay) {
        var scheduler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"];
        var absoluteDelay = Object(_util_isDate__WEBPACK_IMPORTED_MODULE_1__["isDate"])(delay);
        var delayFor = absoluteDelay ? +delay - scheduler.now() : Math.abs(delay);
        return function (source) {
          return source.lift(new DelayOperator(delayFor, scheduler));
        };
      }

      var DelayOperator = /*#__PURE__*/function () {
        function DelayOperator(delay, scheduler) {
          _classCallCheck2(this, DelayOperator);

          this.delay = delay;
          this.scheduler = scheduler;
        }

        _createClass2(DelayOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new DelaySubscriber(subscriber, this.delay, this.scheduler));
          }
        }]);

        return DelayOperator;
      }();

      var DelaySubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_6) {
        _inherits2(DelaySubscriber, _Subscriber__WEBPACK_6);

        var _super174 = _createSuper(DelaySubscriber);

        function DelaySubscriber(destination, delay, scheduler) {
          var _this444;

          _classCallCheck2(this, DelaySubscriber);

          _this444 = _super174.call(this, destination);
          _this444.delay = delay;
          _this444.scheduler = scheduler;
          _this444.queue = [];
          _this444.active = false;
          _this444.errored = false;
          return _this444;
        }

        _createClass2(DelaySubscriber, [{
          key: "_schedule",
          value: function _schedule(scheduler) {
            this.active = true;
            var destination = this.destination;
            destination.add(scheduler.schedule(DelaySubscriber.dispatch, this.delay, {
              source: this,
              destination: this.destination,
              scheduler: scheduler
            }));
          }
        }, {
          key: "scheduleNotification",
          value: function scheduleNotification(notification) {
            if (this.errored === true) {
              return;
            }

            var scheduler = this.scheduler;
            var message = new DelayMessage(scheduler.now() + this.delay, notification);
            this.queue.push(message);

            if (this.active === false) {
              this._schedule(scheduler);
            }
          }
        }, {
          key: "_next",
          value: function _next(value) {
            this.scheduleNotification(_Notification__WEBPACK_IMPORTED_MODULE_3__["Notification"].createNext(value));
          }
        }, {
          key: "_error",
          value: function _error(err) {
            this.errored = true;
            this.queue = [];
            this.destination.error(err);
            this.unsubscribe();
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.scheduleNotification(_Notification__WEBPACK_IMPORTED_MODULE_3__["Notification"].createComplete());
            this.unsubscribe();
          }
        }], [{
          key: "dispatch",
          value: function dispatch(state) {
            var source = state.source;
            var queue = source.queue;
            var scheduler = state.scheduler;
            var destination = state.destination;

            while (queue.length > 0 && queue[0].time - scheduler.now() <= 0) {
              queue.shift().notification.observe(destination);
            }

            if (queue.length > 0) {
              var _delay2 = Math.max(0, queue[0].time - scheduler.now());

              this.schedule(state, _delay2);
            } else {
              this.unsubscribe();
              source.active = false;
            }
          }
        }]);

        return DelaySubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_2__["Subscriber"]);

      var DelayMessage = function DelayMessage(time, notification) {
        _classCallCheck2(this, DelayMessage);

        this.time = time;
        this.notification = notification;
      }; //# sourceMappingURL=delay.js.map

      /***/

    },

    /***/
    "3E1r":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/hi.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function E1r(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Hindi [hi]
      //! author : Mayank Singhal : https://github.com/mayanksinghal
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var symbolMap = {
          1: '१',
          2: '२',
          3: '३',
          4: '४',
          5: '५',
          6: '६',
          7: '७',
          8: '८',
          9: '९',
          0: '०'
        },
            numberMap = {
          '१': '1',
          '२': '2',
          '३': '3',
          '४': '4',
          '५': '5',
          '६': '6',
          '७': '7',
          '८': '8',
          '९': '9',
          '०': '0'
        },
            monthsParse = [/^जन/i, /^फ़र|फर/i, /^मार्च/i, /^अप्रै/i, /^मई/i, /^जून/i, /^जुल/i, /^अग/i, /^सितं|सित/i, /^अक्टू/i, /^नव|नवं/i, /^दिसं|दिस/i],
            shortMonthsParse = [/^जन/i, /^फ़र/i, /^मार्च/i, /^अप्रै/i, /^मई/i, /^जून/i, /^जुल/i, /^अग/i, /^सित/i, /^अक्टू/i, /^नव/i, /^दिस/i];
        var hi = moment.defineLocale('hi', {
          months: {
            format: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),
            standalone: 'जनवरी_फरवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितंबर_अक्टूबर_नवंबर_दिसंबर'.split('_')
          },
          monthsShort: 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),
          weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
          weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),
          weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),
          longDateFormat: {
            LT: 'A h:mm बजे',
            LTS: 'A h:mm:ss बजे',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm बजे',
            LLLL: 'dddd, D MMMM YYYY, A h:mm बजे'
          },
          monthsParse: monthsParse,
          longMonthsParse: monthsParse,
          shortMonthsParse: shortMonthsParse,
          monthsRegex: /^(जनवरी|जन\.?|फ़रवरी|फरवरी|फ़र\.?|मार्च?|अप्रैल|अप्रै\.?|मई?|जून?|जुलाई|जुल\.?|अगस्त|अग\.?|सितम्बर|सितंबर|सित\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर|नव\.?|दिसम्बर|दिसंबर|दिस\.?)/i,
          monthsShortRegex: /^(जनवरी|जन\.?|फ़रवरी|फरवरी|फ़र\.?|मार्च?|अप्रैल|अप्रै\.?|मई?|जून?|जुलाई|जुल\.?|अगस्त|अग\.?|सितम्बर|सितंबर|सित\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर|नव\.?|दिसम्बर|दिसंबर|दिस\.?)/i,
          monthsStrictRegex: /^(जनवरी?|फ़रवरी|फरवरी?|मार्च?|अप्रैल?|मई?|जून?|जुलाई?|अगस्त?|सितम्बर|सितंबर|सित?\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर?|दिसम्बर|दिसंबर?)/i,
          monthsShortStrictRegex: /^(जन\.?|फ़र\.?|मार्च?|अप्रै\.?|मई?|जून?|जुल\.?|अग\.?|सित\.?|अक्टू\.?|नव\.?|दिस\.?)/i,
          calendar: {
            sameDay: '[आज] LT',
            nextDay: '[कल] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[कल] LT',
            lastWeek: '[पिछले] dddd, LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s में',
            past: '%s पहले',
            s: 'कुछ ही क्षण',
            ss: '%d सेकंड',
            m: 'एक मिनट',
            mm: '%d मिनट',
            h: 'एक घंटा',
            hh: '%d घंटे',
            d: 'एक दिन',
            dd: '%d दिन',
            M: 'एक महीने',
            MM: '%d महीने',
            y: 'एक वर्ष',
            yy: '%d वर्ष'
          },
          preparse: function preparse(string) {
            return string.replace(/[१२३४५६७८९०]/g, function (match) {
              return numberMap[match];
            });
          },
          postformat: function postformat(string) {
            return string.replace(/\d/g, function (match) {
              return symbolMap[match];
            });
          },
          // Hindi notation for meridiems are quite fuzzy in practice. While there exists
          // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
          meridiemParse: /रात|सुबह|दोपहर|शाम/,
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === 'रात') {
              return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'सुबह') {
              return hour;
            } else if (meridiem === 'दोपहर') {
              return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'शाम') {
              return hour + 12;
            }
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 4) {
              return 'रात';
            } else if (hour < 10) {
              return 'सुबह';
            } else if (hour < 17) {
              return 'दोपहर';
            } else if (hour < 20) {
              return 'शाम';
            } else {
              return 'रात';
            }
          },
          week: {
            dow: 0,
            // Sunday is the first day of the week.
            doy: 6 // The week that contains Jan 6th is the first week of the year.

          }
        });
        return hi;
      });
      /***/

    },

    /***/
    "3FsZ":
    /*!************************************************************!*\
      !*** ./node_modules/aws-sdk/lib/realclock/browserClock.js ***!
      \************************************************************/

    /*! no static exports found */

    /***/
    function FsZ(module, exports) {
      module.exports = {
        //provide realtime clock for performance measurement
        now: function now() {
          if (typeof performance !== 'undefined' && typeof performance.now === 'function') {
            return performance.now();
          }

          return Date.now();
        }
      };
      /***/
    },

    /***/
    "3N8a":
    /*!**********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/scheduler/AsyncAction.js ***!
      \**********************************************************************/

    /*! exports provided: AsyncAction */

    /***/
    function N8a(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AsyncAction", function () {
        return AsyncAction;
      });
      /* harmony import */


      var _Action__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./Action */
      "7ve7");

      var AsyncAction = /*#__PURE__*/function (_Action__WEBPACK_IMPO) {
        _inherits2(AsyncAction, _Action__WEBPACK_IMPO);

        var _super175 = _createSuper(AsyncAction);

        function AsyncAction(scheduler, work) {
          var _this445;

          _classCallCheck2(this, AsyncAction);

          _this445 = _super175.call(this, scheduler, work);
          _this445.scheduler = scheduler;
          _this445.work = work;
          _this445.pending = false;
          return _this445;
        }

        _createClass2(AsyncAction, [{
          key: "schedule",
          value: function schedule(state) {
            var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;

            if (this.closed) {
              return this;
            }

            this.state = state;
            var id = this.id;
            var scheduler = this.scheduler;

            if (id != null) {
              this.id = this.recycleAsyncId(scheduler, id, delay);
            }

            this.pending = true;
            this.delay = delay;
            this.id = this.id || this.requestAsyncId(scheduler, this.id, delay);
            return this;
          }
        }, {
          key: "requestAsyncId",
          value: function requestAsyncId(scheduler, id) {
            var delay = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
            return setInterval(scheduler.flush.bind(scheduler, this), delay);
          }
        }, {
          key: "recycleAsyncId",
          value: function recycleAsyncId(scheduler, id) {
            var delay = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;

            if (delay !== null && this.delay === delay && this.pending === false) {
              return id;
            }

            clearInterval(id);
            return undefined;
          }
        }, {
          key: "execute",
          value: function execute(state, delay) {
            if (this.closed) {
              return new Error('executing a cancelled action');
            }

            this.pending = false;

            var error = this._execute(state, delay);

            if (error) {
              return error;
            } else if (this.pending === false && this.id != null) {
              this.id = this.recycleAsyncId(this.scheduler, this.id, null);
            }
          }
        }, {
          key: "_execute",
          value: function _execute(state, delay) {
            var errored = false;
            var errorValue = undefined;

            try {
              this.work(state);
            } catch (e) {
              errored = true;
              errorValue = !!e && e || new Error(e);
            }

            if (errored) {
              this.unsubscribe();
              return errorValue;
            }
          }
        }, {
          key: "_unsubscribe",
          value: function _unsubscribe() {
            var id = this.id;
            var scheduler = this.scheduler;
            var actions = scheduler.actions;
            var index = actions.indexOf(this);
            this.work = null;
            this.state = null;
            this.pending = false;
            this.scheduler = null;

            if (index !== -1) {
              actions.splice(index, 1);
            }

            if (id != null) {
              this.id = this.recycleAsyncId(scheduler, id, null);
            }

            this.delay = null;
          }
        }]);

        return AsyncAction;
      }(_Action__WEBPACK_IMPORTED_MODULE_0__["Action"]); //# sourceMappingURL=AsyncAction.js.map

      /***/

    },

    /***/
    "3Pt+":
    /*!********************************************************************!*\
      !*** ./node_modules/@angular/forms/__ivy_ngcc__/fesm2015/forms.js ***!
      \********************************************************************/

    /*! exports provided: AbstractControl, AbstractControlDirective, AbstractFormGroupDirective, COMPOSITION_BUFFER_MODE, CheckboxControlValueAccessor, CheckboxRequiredValidator, ControlContainer, DefaultValueAccessor, EmailValidator, FormArray, FormArrayName, FormBuilder, FormControl, FormControlDirective, FormControlName, FormGroup, FormGroupDirective, FormGroupName, FormsModule, MaxLengthValidator, MaxValidator, MinLengthValidator, MinValidator, NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, NgControlStatus, NgControlStatusGroup, NgForm, NgModel, NgModelGroup, NgSelectOption, NumberValueAccessor, PatternValidator, RadioControlValueAccessor, RangeValueAccessor, ReactiveFormsModule, RequiredValidator, SelectControlValueAccessor, SelectMultipleControlValueAccessor, VERSION, Validators, ɵInternalFormsSharedModule, ɵNgNoValidate, ɵNgSelectMultipleOption, ɵangular_packages_forms_forms_a, ɵangular_packages_forms_forms_b, ɵangular_packages_forms_forms_ba, ɵangular_packages_forms_forms_bb, ɵangular_packages_forms_forms_bc, ɵangular_packages_forms_forms_bd, ɵangular_packages_forms_forms_be, ɵangular_packages_forms_forms_bf, ɵangular_packages_forms_forms_bg, ɵangular_packages_forms_forms_c, ɵangular_packages_forms_forms_d, ɵangular_packages_forms_forms_e, ɵangular_packages_forms_forms_f, ɵangular_packages_forms_forms_g, ɵangular_packages_forms_forms_h, ɵangular_packages_forms_forms_i, ɵangular_packages_forms_forms_j, ɵangular_packages_forms_forms_k, ɵangular_packages_forms_forms_l, ɵangular_packages_forms_forms_m, ɵangular_packages_forms_forms_n, ɵangular_packages_forms_forms_o, ɵangular_packages_forms_forms_p, ɵangular_packages_forms_forms_q, ɵangular_packages_forms_forms_r, ɵangular_packages_forms_forms_s, ɵangular_packages_forms_forms_t, ɵangular_packages_forms_forms_u, ɵangular_packages_forms_forms_v, ɵangular_packages_forms_forms_w, ɵangular_packages_forms_forms_x, ɵangular_packages_forms_forms_y, ɵangular_packages_forms_forms_z */

    /***/
    function Pt(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AbstractControl", function () {
        return AbstractControl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AbstractControlDirective", function () {
        return AbstractControlDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AbstractFormGroupDirective", function () {
        return AbstractFormGroupDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "COMPOSITION_BUFFER_MODE", function () {
        return COMPOSITION_BUFFER_MODE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CheckboxControlValueAccessor", function () {
        return CheckboxControlValueAccessor;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CheckboxRequiredValidator", function () {
        return CheckboxRequiredValidator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ControlContainer", function () {
        return ControlContainer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DefaultValueAccessor", function () {
        return DefaultValueAccessor;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "EmailValidator", function () {
        return EmailValidator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormArray", function () {
        return FormArray;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormArrayName", function () {
        return FormArrayName;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormBuilder", function () {
        return FormBuilder;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormControl", function () {
        return FormControl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormControlDirective", function () {
        return FormControlDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormControlName", function () {
        return FormControlName;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormGroup", function () {
        return FormGroup;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormGroupDirective", function () {
        return FormGroupDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormGroupName", function () {
        return FormGroupName;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormsModule", function () {
        return FormsModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MaxLengthValidator", function () {
        return MaxLengthValidator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MaxValidator", function () {
        return MaxValidator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MinLengthValidator", function () {
        return MinLengthValidator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MinValidator", function () {
        return MinValidator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NG_ASYNC_VALIDATORS", function () {
        return NG_ASYNC_VALIDATORS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NG_VALIDATORS", function () {
        return NG_VALIDATORS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NG_VALUE_ACCESSOR", function () {
        return NG_VALUE_ACCESSOR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgControl", function () {
        return NgControl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgControlStatus", function () {
        return NgControlStatus;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgControlStatusGroup", function () {
        return NgControlStatusGroup;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgForm", function () {
        return NgForm;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgModel", function () {
        return NgModel;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgModelGroup", function () {
        return NgModelGroup;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgSelectOption", function () {
        return NgSelectOption;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NumberValueAccessor", function () {
        return NumberValueAccessor;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PatternValidator", function () {
        return PatternValidator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RadioControlValueAccessor", function () {
        return RadioControlValueAccessor;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RangeValueAccessor", function () {
        return RangeValueAccessor;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ReactiveFormsModule", function () {
        return ReactiveFormsModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RequiredValidator", function () {
        return RequiredValidator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SelectControlValueAccessor", function () {
        return SelectControlValueAccessor;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SelectMultipleControlValueAccessor", function () {
        return SelectMultipleControlValueAccessor;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "VERSION", function () {
        return VERSION;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Validators", function () {
        return Validators;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵInternalFormsSharedModule", function () {
        return ɵInternalFormsSharedModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵNgNoValidate", function () {
        return ɵNgNoValidate;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵNgSelectMultipleOption", function () {
        return ɵNgSelectMultipleOption;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_a", function () {
        return SHARED_FORM_DIRECTIVES;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_b", function () {
        return TEMPLATE_DRIVEN_DIRECTIVES;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_ba", function () {
        return MIN_VALIDATOR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_bb", function () {
        return REQUIRED_VALIDATOR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_bc", function () {
        return CHECKBOX_REQUIRED_VALIDATOR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_bd", function () {
        return EMAIL_VALIDATOR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_be", function () {
        return MIN_LENGTH_VALIDATOR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_bf", function () {
        return MAX_LENGTH_VALIDATOR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_bg", function () {
        return PATTERN_VALIDATOR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_c", function () {
        return REACTIVE_DRIVEN_DIRECTIVES;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_d", function () {
        return ɵInternalFormsSharedModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_e", function () {
        return CHECKBOX_VALUE_ACCESSOR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_f", function () {
        return DEFAULT_VALUE_ACCESSOR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_g", function () {
        return AbstractControlStatus;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_h", function () {
        return ngControlStatusHost;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_i", function () {
        return formDirectiveProvider;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_j", function () {
        return formControlBinding;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_k", function () {
        return modelGroupProvider;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_l", function () {
        return NUMBER_VALUE_ACCESSOR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_m", function () {
        return RADIO_VALUE_ACCESSOR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_n", function () {
        return RadioControlRegistry;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_o", function () {
        return RANGE_VALUE_ACCESSOR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_p", function () {
        return NG_MODEL_WITH_FORM_CONTROL_WARNING;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_q", function () {
        return formControlBinding$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_r", function () {
        return controlNameBinding;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_s", function () {
        return formDirectiveProvider$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_t", function () {
        return formGroupNameProvider;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_u", function () {
        return formArrayNameProvider;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_v", function () {
        return SELECT_VALUE_ACCESSOR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_w", function () {
        return SELECT_MULTIPLE_VALUE_ACCESSOR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_x", function () {
        return ɵNgSelectMultipleOption;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_y", function () {
        return ɵNgNoValidate;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_forms_forms_z", function () {
        return MAX_VALIDATOR;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /**
       * @license Angular v12.0.0-next.1
       * (c) 2010-2020 Google LLC. https://angular.io/
       * License: MIT
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Used to provide a `ControlValueAccessor` for form controls.
       *
       * See `DefaultValueAccessor` for how to implement one.
       *
       * @publicApi
       */


      var NG_VALUE_ACCESSOR = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('NgValueAccessor');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var CHECKBOX_VALUE_ACCESSOR = {
        provide: NG_VALUE_ACCESSOR,
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return CheckboxControlValueAccessor;
        }),
        multi: true
      };
      /**
       * @description
       * A `ControlValueAccessor` for writing a value and listening to changes on a checkbox input
       * element.
       *
       * @usageNotes
       *
       * ### Using a checkbox with a reactive form.
       *
       * The following example shows how to use a checkbox with a reactive form.
       *
       * ```ts
       * const rememberLoginControl = new FormControl();
       * ```
       *
       * ```
       * <input type="checkbox" [formControl]="rememberLoginControl">
       * ```
       *
       * @ngModule ReactiveFormsModule
       * @ngModule FormsModule
       * @publicApi
       */

      var CheckboxControlValueAccessor = /*#__PURE__*/function () {
        function CheckboxControlValueAccessor(_renderer, _elementRef) {
          _classCallCheck2(this, CheckboxControlValueAccessor);

          this._renderer = _renderer;
          this._elementRef = _elementRef;
          /**
           * The registered callback function called when a change event occurs on the input element.
           * @nodoc
           */

          this.onChange = function (_) {};
          /**
           * The registered callback function called when a blur event occurs on the input element.
           * @nodoc
           */


          this.onTouched = function () {};
        }
        /**
         * Sets the "checked" property on the input element.
         * @nodoc
         */


        _createClass2(CheckboxControlValueAccessor, [{
          key: "writeValue",
          value: function writeValue(value) {
            this._renderer.setProperty(this._elementRef.nativeElement, 'checked', value);
          }
          /**
           * Registers a function called when the control value changes.
           * @nodoc
           */

        }, {
          key: "registerOnChange",
          value: function registerOnChange(fn) {
            this.onChange = fn;
          }
          /**
           * Registers a function called when the control is touched.
           * @nodoc
           */

        }, {
          key: "registerOnTouched",
          value: function registerOnTouched(fn) {
            this.onTouched = fn;
          }
          /**
           * Sets the "disabled" property on the input element.
           * @nodoc
           */

        }, {
          key: "setDisabledState",
          value: function setDisabledState(isDisabled) {
            this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
          }
        }]);

        return CheckboxControlValueAccessor;
      }();

      CheckboxControlValueAccessor.ɵfac = function CheckboxControlValueAccessor_Factory(t) {
        return new (t || CheckboxControlValueAccessor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]));
      };

      CheckboxControlValueAccessor.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: CheckboxControlValueAccessor,
        selectors: [["input", "type", "checkbox", "formControlName", ""], ["input", "type", "checkbox", "formControl", ""], ["input", "type", "checkbox", "ngModel", ""]],
        hostBindings: function CheckboxControlValueAccessor_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function CheckboxControlValueAccessor_change_HostBindingHandler($event) {
              return ctx.onChange($event.target.checked);
            })("blur", function CheckboxControlValueAccessor_blur_HostBindingHandler() {
              return ctx.onTouched();
            });
          }
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([CHECKBOX_VALUE_ACCESSOR])]
      });

      CheckboxControlValueAccessor.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CheckboxControlValueAccessor, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]',
            host: {
              '(change)': 'onChange($event.target.checked)',
              '(blur)': 'onTouched()'
            },
            providers: [CHECKBOX_VALUE_ACCESSOR]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var DEFAULT_VALUE_ACCESSOR = {
        provide: NG_VALUE_ACCESSOR,
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return DefaultValueAccessor;
        }),
        multi: true
      };
      /**
       * We must check whether the agent is Android because composition events
       * behave differently between iOS and Android.
       */

      function _isAndroid() {
        var userAgent = Object(_angular_common__WEBPACK_IMPORTED_MODULE_1__["ɵgetDOM"])() ? Object(_angular_common__WEBPACK_IMPORTED_MODULE_1__["ɵgetDOM"])().getUserAgent() : '';
        return /android (\d+)/.test(userAgent.toLowerCase());
      }
      /**
       * @description
       * Provide this token to control if form directives buffer IME input until
       * the "compositionend" event occurs.
       * @publicApi
       */


      var COMPOSITION_BUFFER_MODE = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('CompositionEventMode');
      /**
       * @description
       *
       * {@searchKeywords ngDefaultControl}
       *
       * The default `ControlValueAccessor` for writing a value and listening to changes on input
       * elements. The accessor is used by the `FormControlDirective`, `FormControlName`, and
       * `NgModel` directives.
       *
       * @usageNotes
       *
       * ### Using the default value accessor
       *
       * The following example shows how to use an input element that activates the default value accessor
       * (in this case, a text field).
       *
       * ```ts
       * const firstNameControl = new FormControl();
       * ```
       *
       * ```
       * <input type="text" [formControl]="firstNameControl">
       * ```
       *
       * This value accessor is used by default for `<input type="text">` and `<textarea>` elements, but
       * you could also use it for custom components that have similar behavior and do not require special
       * processing. In order to attach the default value accessor to a custom element, add the
       * `ngDefaultControl` attribute as shown below.
       *
       * ```
       * <custom-input-component ngDefaultControl [(ngModel)]="value"></custom-input-component>
       * ```
       *
       * @ngModule ReactiveFormsModule
       * @ngModule FormsModule
       * @publicApi
       */

      var DefaultValueAccessor = /*#__PURE__*/function () {
        function DefaultValueAccessor(_renderer, _elementRef, _compositionMode) {
          _classCallCheck2(this, DefaultValueAccessor);

          this._renderer = _renderer;
          this._elementRef = _elementRef;
          this._compositionMode = _compositionMode;
          /**
           * The registered callback function called when an input event occurs on the input element.
           * @nodoc
           */

          this.onChange = function (_) {};
          /**
           * The registered callback function called when a blur event occurs on the input element.
           * @nodoc
           */


          this.onTouched = function () {};
          /** Whether the user is creating a composition string (IME events). */


          this._composing = false;

          if (this._compositionMode == null) {
            this._compositionMode = !_isAndroid();
          }
        }
        /**
         * Sets the "value" property on the input element.
         * @nodoc
         */


        _createClass2(DefaultValueAccessor, [{
          key: "writeValue",
          value: function writeValue(value) {
            var normalizedValue = value == null ? '' : value;

            this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);
          }
          /**
           * Registers a function called when the control value changes.
           * @nodoc
           */

        }, {
          key: "registerOnChange",
          value: function registerOnChange(fn) {
            this.onChange = fn;
          }
          /**
           * Registers a function called when the control is touched.
           * @nodoc
           */

        }, {
          key: "registerOnTouched",
          value: function registerOnTouched(fn) {
            this.onTouched = fn;
          }
          /**
           * Sets the "disabled" property on the input element.
           * @nodoc
           */

        }, {
          key: "setDisabledState",
          value: function setDisabledState(isDisabled) {
            this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
          }
          /** @internal */

        }, {
          key: "_handleInput",
          value: function _handleInput(value) {
            if (!this._compositionMode || this._compositionMode && !this._composing) {
              this.onChange(value);
            }
          }
          /** @internal */

        }, {
          key: "_compositionStart",
          value: function _compositionStart() {
            this._composing = true;
          }
          /** @internal */

        }, {
          key: "_compositionEnd",
          value: function _compositionEnd(value) {
            this._composing = false;
            this._compositionMode && this.onChange(value);
          }
        }]);

        return DefaultValueAccessor;
      }();

      DefaultValueAccessor.ɵfac = function DefaultValueAccessor_Factory(t) {
        return new (t || DefaultValueAccessor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](COMPOSITION_BUFFER_MODE, 8));
      };

      DefaultValueAccessor.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: DefaultValueAccessor,
        selectors: [["input", "formControlName", "", 3, "type", "checkbox"], ["textarea", "formControlName", ""], ["input", "formControl", "", 3, "type", "checkbox"], ["textarea", "formControl", ""], ["input", "ngModel", "", 3, "type", "checkbox"], ["textarea", "ngModel", ""], ["", "ngDefaultControl", ""]],
        hostBindings: function DefaultValueAccessor_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("input", function DefaultValueAccessor_input_HostBindingHandler($event) {
              return ctx._handleInput($event.target.value);
            })("blur", function DefaultValueAccessor_blur_HostBindingHandler() {
              return ctx.onTouched();
            })("compositionstart", function DefaultValueAccessor_compositionstart_HostBindingHandler() {
              return ctx._compositionStart();
            })("compositionend", function DefaultValueAccessor_compositionend_HostBindingHandler($event) {
              return ctx._compositionEnd($event.target.value);
            });
          }
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([DEFAULT_VALUE_ACCESSOR])]
      });

      DefaultValueAccessor.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: Boolean,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [COMPOSITION_BUFFER_MODE]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DefaultValueAccessor, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]',
            // TODO: vsavkin replace the above selector with the one below it once
            // https://github.com/angular/angular/issues/3011 is implemented
            // selector: '[ngModel],[formControl],[formControlName]',
            host: {
              '(input)': '$any(this)._handleInput($event.target.value)',
              '(blur)': 'onTouched()',
              '(compositionstart)': '$any(this)._compositionStart()',
              '(compositionend)': '$any(this)._compositionEnd($event.target.value)'
            },
            providers: [DEFAULT_VALUE_ACCESSOR]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: Boolean,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [COMPOSITION_BUFFER_MODE]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function isEmptyInputValue(value) {
        // we don't check for string here so it also works with arrays
        return value == null || value.length === 0;
      }

      function hasValidLength(value) {
        // non-strict comparison is intentional, to check for both `null` and `undefined` values
        return value != null && typeof value.length === 'number';
      }
      /**
       * @description
       * An `InjectionToken` for registering additional synchronous validators used with
       * `AbstractControl`s.
       *
       * @see `NG_ASYNC_VALIDATORS`
       *
       * @usageNotes
       *
       * ### Providing a custom validator
       *
       * The following example registers a custom validator directive. Adding the validator to the
       * existing collection of validators requires the `multi: true` option.
       *
       * ```typescript
       * @Directive({
       *   selector: '[customValidator]',
       *   providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]
       * })
       * class CustomValidatorDirective implements Validator {
       *   validate(control: AbstractControl): ValidationErrors | null {
       *     return { 'custom': true };
       *   }
       * }
       * ```
       *
       * @publicApi
       */


      var NG_VALIDATORS = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('NgValidators');
      /**
       * @description
       * An `InjectionToken` for registering additional asynchronous validators used with
       * `AbstractControl`s.
       *
       * @see `NG_VALIDATORS`
       *
       * @publicApi
       */

      var NG_ASYNC_VALIDATORS = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('NgAsyncValidators');
      /**
       * A regular expression that matches valid e-mail addresses.
       *
       * At a high level, this regexp matches e-mail addresses of the format `local-part@tld`, where:
       * - `local-part` consists of one or more of the allowed characters (alphanumeric and some
       *   punctuation symbols).
       * - `local-part` cannot begin or end with a period (`.`).
       * - `local-part` cannot be longer than 64 characters.
       * - `tld` consists of one or more `labels` separated by periods (`.`). For example `localhost` or
       *   `foo.com`.
       * - A `label` consists of one or more of the allowed characters (alphanumeric, dashes (`-`) and
       *   periods (`.`)).
       * - A `label` cannot begin or end with a dash (`-`) or a period (`.`).
       * - A `label` cannot be longer than 63 characters.
       * - The whole address cannot be longer than 254 characters.
       *
       * ## Implementation background
       *
       * This regexp was ported over from AngularJS (see there for git history):
       * https://github.com/angular/angular.js/blob/c133ef836/src/ng/directive/input.js#L27
       * It is based on the
       * [WHATWG version](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address) with
       * some enhancements to incorporate more RFC rules (such as rules related to domain names and the
       * lengths of different parts of the address). The main differences from the WHATWG version are:
       *   - Disallow `local-part` to begin or end with a period (`.`).
       *   - Disallow `local-part` length to exceed 64 characters.
       *   - Disallow total address length to exceed 254 characters.
       *
       * See [this commit](https://github.com/angular/angular.js/commit/f3f5cf72e) for more details.
       */

      var EMAIL_REGEXP = /^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
      /**
       * @description
       * Provides a set of built-in validators that can be used by form controls.
       *
       * A validator is a function that processes a `FormControl` or collection of
       * controls and returns an error map or null. A null map means that validation has passed.
       *
       * @see [Form Validation](/guide/form-validation)
       *
       * @publicApi
       */

      var Validators = /*#__PURE__*/function () {
        function Validators() {
          _classCallCheck2(this, Validators);
        }

        _createClass2(Validators, null, [{
          key: "min",
          value:
          /**
           * @description
           * Validator that requires the control's value to be greater than or equal to the provided number.
           * The validator exists only as a function and not as a directive.
           *
           * @usageNotes
           *
           * ### Validate against a minimum of 3
           *
           * ```typescript
           * const control = new FormControl(2, Validators.min(3));
           *
           * console.log(control.errors); // {min: {min: 3, actual: 2}}
           * ```
           *
           * @returns A validator function that returns an error map with the
           * `min` property if the validation check fails, otherwise `null`.
           *
           * @see `updateValueAndValidity()`
           *
           */
          function min(_min) {
            return function (control) {
              if (isEmptyInputValue(control.value) || isEmptyInputValue(_min)) {
                return null; // don't validate empty values to allow optional controls
              }

              var value = parseFloat(control.value); // Controls with NaN values after parsing should be treated as not having a
              // minimum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-min

              return !isNaN(value) && value < _min ? {
                'min': {
                  'min': _min,
                  'actual': control.value
                }
              } : null;
            };
          }
          /**
           * @description
           * Validator that requires the control's value to be less than or equal to the provided number.
           * The validator exists only as a function and not as a directive.
           *
           * @usageNotes
           *
           * ### Validate against a maximum of 15
           *
           * ```typescript
           * const control = new FormControl(16, Validators.max(15));
           *
           * console.log(control.errors); // {max: {max: 15, actual: 16}}
           * ```
           *
           * @returns A validator function that returns an error map with the
           * `max` property if the validation check fails, otherwise `null`.
           *
           * @see `updateValueAndValidity()`
           *
           */

        }, {
          key: "max",
          value: function max(_max) {
            return function (control) {
              if (isEmptyInputValue(control.value) || isEmptyInputValue(_max)) {
                return null; // don't validate empty values to allow optional controls
              }

              var value = parseFloat(control.value); // Controls with NaN values after parsing should be treated as not having a
              // maximum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-max

              return !isNaN(value) && value > _max ? {
                'max': {
                  'max': _max,
                  'actual': control.value
                }
              } : null;
            };
          }
          /**
           * @description
           * Validator that requires the control have a non-empty value.
           *
           * @usageNotes
           *
           * ### Validate that the field is non-empty
           *
           * ```typescript
           * const control = new FormControl('', Validators.required);
           *
           * console.log(control.errors); // {required: true}
           * ```
           *
           * @returns An error map with the `required` property
           * if the validation check fails, otherwise `null`.
           *
           * @see `updateValueAndValidity()`
           *
           */

        }, {
          key: "required",
          value: function required(control) {
            return isEmptyInputValue(control.value) ? {
              'required': true
            } : null;
          }
          /**
           * @description
           * Validator that requires the control's value be true. This validator is commonly
           * used for required checkboxes.
           *
           * @usageNotes
           *
           * ### Validate that the field value is true
           *
           * ```typescript
           * const control = new FormControl('', Validators.requiredTrue);
           *
           * console.log(control.errors); // {required: true}
           * ```
           *
           * @returns An error map that contains the `required` property
           * set to `true` if the validation check fails, otherwise `null`.
           *
           * @see `updateValueAndValidity()`
           *
           */

        }, {
          key: "requiredTrue",
          value: function requiredTrue(control) {
            return control.value === true ? null : {
              'required': true
            };
          }
          /**
           * @description
           * Validator that requires the control's value pass an email validation test.
           *
           * Tests the value using a [regular
           * expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)
           * pattern suitable for common usecases. The pattern is based on the definition of a valid email
           * address in the [WHATWG HTML
           * specification](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address) with
           * some enhancements to incorporate more RFC rules (such as rules related to domain names and the
           * lengths of different parts of the address).
           *
           * The differences from the WHATWG version include:
           * - Disallow `local-part` (the part before the `@` symbol) to begin or end with a period (`.`).
           * - Disallow `local-part` to be longer than 64 characters.
           * - Disallow the whole address to be longer than 254 characters.
           *
           * If this pattern does not satisfy your business needs, you can use `Validators.pattern()` to
           * validate the value against a different pattern.
           *
           * @usageNotes
           *
           * ### Validate that the field matches a valid email pattern
           *
           * ```typescript
           * const control = new FormControl('bad@', Validators.email);
           *
           * console.log(control.errors); // {email: true}
           * ```
           *
           * @returns An error map with the `email` property
           * if the validation check fails, otherwise `null`.
           *
           * @see `updateValueAndValidity()`
           *
           */

        }, {
          key: "email",
          value: function email(control) {
            if (isEmptyInputValue(control.value)) {
              return null; // don't validate empty values to allow optional controls
            }

            return EMAIL_REGEXP.test(control.value) ? null : {
              'email': true
            };
          }
          /**
           * @description
           * Validator that requires the length of the control's value to be greater than or equal
           * to the provided minimum length. This validator is also provided by default if you use the
           * the HTML5 `minlength` attribute. Note that the `minLength` validator is intended to be used
           * only for types that have a numeric `length` property, such as strings or arrays. The
           * `minLength` validator logic is also not invoked for values when their `length` property is 0
           * (for example in case of an empty string or an empty array), to support optional controls. You
           * can use the standard `required` validator if empty values should not be considered valid.
           *
           * @usageNotes
           *
           * ### Validate that the field has a minimum of 3 characters
           *
           * ```typescript
           * const control = new FormControl('ng', Validators.minLength(3));
           *
           * console.log(control.errors); // {minlength: {requiredLength: 3, actualLength: 2}}
           * ```
           *
           * ```html
           * <input minlength="5">
           * ```
           *
           * @returns A validator function that returns an error map with the
           * `minlength` property if the validation check fails, otherwise `null`.
           *
           * @see `updateValueAndValidity()`
           *
           */

        }, {
          key: "minLength",
          value: function minLength(_minLength) {
            return function (control) {
              if (isEmptyInputValue(control.value) || !hasValidLength(control.value)) {
                // don't validate empty values to allow optional controls
                // don't validate values without `length` property
                return null;
              }

              return control.value.length < _minLength ? {
                'minlength': {
                  'requiredLength': _minLength,
                  'actualLength': control.value.length
                }
              } : null;
            };
          }
          /**
           * @description
           * Validator that requires the length of the control's value to be less than or equal
           * to the provided maximum length. This validator is also provided by default if you use the
           * the HTML5 `maxlength` attribute. Note that the `maxLength` validator is intended to be used
           * only for types that have a numeric `length` property, such as strings or arrays.
           *
           * @usageNotes
           *
           * ### Validate that the field has maximum of 5 characters
           *
           * ```typescript
           * const control = new FormControl('Angular', Validators.maxLength(5));
           *
           * console.log(control.errors); // {maxlength: {requiredLength: 5, actualLength: 7}}
           * ```
           *
           * ```html
           * <input maxlength="5">
           * ```
           *
           * @returns A validator function that returns an error map with the
           * `maxlength` property if the validation check fails, otherwise `null`.
           *
           * @see `updateValueAndValidity()`
           *
           */

        }, {
          key: "maxLength",
          value: function maxLength(_maxLength) {
            return function (control) {
              return hasValidLength(control.value) && control.value.length > _maxLength ? {
                'maxlength': {
                  'requiredLength': _maxLength,
                  'actualLength': control.value.length
                }
              } : null;
            };
          }
          /**
           * @description
           * Validator that requires the control's value to match a regex pattern. This validator is also
           * provided by default if you use the HTML5 `pattern` attribute.
           *
           * @usageNotes
           *
           * ### Validate that the field only contains letters or spaces
           *
           * ```typescript
           * const control = new FormControl('1', Validators.pattern('[a-zA-Z ]*'));
           *
           * console.log(control.errors); // {pattern: {requiredPattern: '^[a-zA-Z ]*$', actualValue: '1'}}
           * ```
           *
           * ```html
           * <input pattern="[a-zA-Z ]*">
           * ```
           *
           * ### Pattern matching with the global or sticky flag
           *
           * `RegExp` objects created with the `g` or `y` flags that are passed into `Validators.pattern`
           * can produce different results on the same input when validations are run consecutively. This is
           * due to how the behavior of `RegExp.prototype.test` is
           * specified in [ECMA-262](https://tc39.es/ecma262/#sec-regexpbuiltinexec)
           * (`RegExp` preserves the index of the last match when the global or sticky flag is used).
           * Due to this behavior, it is recommended that when using
           * `Validators.pattern` you **do not** pass in a `RegExp` object with either the global or sticky
           * flag enabled.
           *
           * ```typescript
           * // Not recommended (since the `g` flag is used)
           * const controlOne = new FormControl('1', Validators.pattern(/foo/g));
           *
           * // Good
           * const controlTwo = new FormControl('1', Validators.pattern(/foo/));
           * ```
           *
           * @param pattern A regular expression to be used as is to test the values, or a string.
           * If a string is passed, the `^` character is prepended and the `$` character is
           * appended to the provided string (if not already present), and the resulting regular
           * expression is used to test the values.
           *
           * @returns A validator function that returns an error map with the
           * `pattern` property if the validation check fails, otherwise `null`.
           *
           * @see `updateValueAndValidity()`
           *
           */

        }, {
          key: "pattern",
          value: function pattern(_pattern) {
            if (!_pattern) return Validators.nullValidator;
            var regex;
            var regexStr;

            if (typeof _pattern === 'string') {
              regexStr = '';
              if (_pattern.charAt(0) !== '^') regexStr += '^';
              regexStr += _pattern;
              if (_pattern.charAt(_pattern.length - 1) !== '$') regexStr += '$';
              regex = new RegExp(regexStr);
            } else {
              regexStr = _pattern.toString();
              regex = _pattern;
            }

            return function (control) {
              if (isEmptyInputValue(control.value)) {
                return null; // don't validate empty values to allow optional controls
              }

              var value = control.value;
              return regex.test(value) ? null : {
                'pattern': {
                  'requiredPattern': regexStr,
                  'actualValue': value
                }
              };
            };
          }
          /**
           * @description
           * Validator that performs no operation.
           *
           * @see `updateValueAndValidity()`
           *
           */

        }, {
          key: "nullValidator",
          value: function nullValidator(control) {
            return null;
          }
        }, {
          key: "compose",
          value: function compose(validators) {
            if (!validators) return null;
            var presentValidators = validators.filter(isPresent);
            if (presentValidators.length == 0) return null;
            return function (control) {
              return mergeErrors(executeValidators(control, presentValidators));
            };
          }
          /**
           * @description
           * Compose multiple async validators into a single function that returns the union
           * of the individual error objects for the provided control.
           *
           * @returns A validator function that returns an error map with the
           * merged error objects of the async validators if the validation check fails, otherwise `null`.
           *
           * @see `updateValueAndValidity()`
           *
           */

        }, {
          key: "composeAsync",
          value: function composeAsync(validators) {
            if (!validators) return null;
            var presentValidators = validators.filter(isPresent);
            if (presentValidators.length == 0) return null;
            return function (control) {
              var observables = executeValidators(control, presentValidators).map(toObservable);
              return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["forkJoin"])(observables).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(mergeErrors));
            };
          }
        }]);

        return Validators;
      }();

      function isPresent(o) {
        return o != null;
      }

      function toObservable(r) {
        var obs = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵisPromise"])(r) ? Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(r) : r;

        if (!Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵisObservable"])(obs) && (typeof ngDevMode === 'undefined' || ngDevMode)) {
          throw new Error("Expected validator to return Promise or Observable.");
        }

        return obs;
      }

      function mergeErrors(arrayOfErrors) {
        var res = {}; // Not using Array.reduce here due to a Chrome 80 bug
        // https://bugs.chromium.org/p/chromium/issues/detail?id=1049982

        arrayOfErrors.forEach(function (errors) {
          res = errors != null ? Object.assign(Object.assign({}, res), errors) : res;
        });
        return Object.keys(res).length === 0 ? null : res;
      }

      function executeValidators(control, validators) {
        return validators.map(function (validator) {
          return validator(control);
        });
      }

      function isValidatorFn(validator) {
        return !validator.validate;
      }
      /**
       * Given the list of validators that may contain both functions as well as classes, return the list
       * of validator functions (convert validator classes into validator functions). This is needed to
       * have consistent structure in validators list before composing them.
       *
       * @param validators The set of validators that may contain validators both in plain function form
       *     as well as represented as a validator class.
       */


      function normalizeValidators(validators) {
        return validators.map(function (validator) {
          return isValidatorFn(validator) ? validator : function (c) {
            return validator.validate(c);
          };
        });
      }
      /**
       * Merges synchronous validators into a single validator function (combined using
       * `Validators.compose`).
       */


      function composeValidators(validators) {
        return validators != null ? Validators.compose(normalizeValidators(validators)) : null;
      }
      /**
       * Merges asynchronous validators into a single validator function (combined using
       * `Validators.composeAsync`).
       */


      function composeAsyncValidators(validators) {
        return validators != null ? Validators.composeAsync(normalizeValidators(validators)) : null;
      }
      /**
       * Merges raw control validators with a given directive validator and returns the combined list of
       * validators as an array.
       */


      function mergeValidators(controlValidators, dirValidator) {
        if (controlValidators === null) return [dirValidator];
        return Array.isArray(controlValidators) ? [].concat(_toConsumableArray(controlValidators), [dirValidator]) : [controlValidators, dirValidator];
      }
      /**
       * Retrieves the list of raw synchronous validators attached to a given control.
       */


      function getControlValidators(control) {
        return control._rawValidators;
      }
      /**
       * Retrieves the list of raw asynchronous validators attached to a given control.
       */


      function getControlAsyncValidators(control) {
        return control._rawAsyncValidators;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @description
       * Base class for control directives.
       *
       * This class is only used internally in the `ReactiveFormsModule` and the `FormsModule`.
       *
       * @publicApi
       */


      var AbstractControlDirective = /*#__PURE__*/function () {
        function AbstractControlDirective() {
          _classCallCheck2(this, AbstractControlDirective);

          /**
           * Set of synchronous validators as they were provided while calling `setValidators` function.
           * @internal
           */
          this._rawValidators = [];
          /**
           * Set of asynchronous validators as they were provided while calling `setAsyncValidators`
           * function.
           * @internal
           */

          this._rawAsyncValidators = [];
          /*
           * The set of callbacks to be invoked when directive instance is being destroyed.
           */

          this._onDestroyCallbacks = [];
        }
        /**
         * @description
         * Reports the value of the control if it is present, otherwise null.
         */


        _createClass2(AbstractControlDirective, [{
          key: "value",
          get: function get() {
            return this.control ? this.control.value : null;
          }
          /**
           * @description
           * Reports whether the control is valid. A control is considered valid if no
           * validation errors exist with the current value.
           * If the control is not present, null is returned.
           */

        }, {
          key: "valid",
          get: function get() {
            return this.control ? this.control.valid : null;
          }
          /**
           * @description
           * Reports whether the control is invalid, meaning that an error exists in the input value.
           * If the control is not present, null is returned.
           */

        }, {
          key: "invalid",
          get: function get() {
            return this.control ? this.control.invalid : null;
          }
          /**
           * @description
           * Reports whether a control is pending, meaning that that async validation is occurring and
           * errors are not yet available for the input value. If the control is not present, null is
           * returned.
           */

        }, {
          key: "pending",
          get: function get() {
            return this.control ? this.control.pending : null;
          }
          /**
           * @description
           * Reports whether the control is disabled, meaning that the control is disabled
           * in the UI and is exempt from validation checks and excluded from aggregate
           * values of ancestor controls. If the control is not present, null is returned.
           */

        }, {
          key: "disabled",
          get: function get() {
            return this.control ? this.control.disabled : null;
          }
          /**
           * @description
           * Reports whether the control is enabled, meaning that the control is included in ancestor
           * calculations of validity or value. If the control is not present, null is returned.
           */

        }, {
          key: "enabled",
          get: function get() {
            return this.control ? this.control.enabled : null;
          }
          /**
           * @description
           * Reports the control's validation errors. If the control is not present, null is returned.
           */

        }, {
          key: "errors",
          get: function get() {
            return this.control ? this.control.errors : null;
          }
          /**
           * @description
           * Reports whether the control is pristine, meaning that the user has not yet changed
           * the value in the UI. If the control is not present, null is returned.
           */

        }, {
          key: "pristine",
          get: function get() {
            return this.control ? this.control.pristine : null;
          }
          /**
           * @description
           * Reports whether the control is dirty, meaning that the user has changed
           * the value in the UI. If the control is not present, null is returned.
           */

        }, {
          key: "dirty",
          get: function get() {
            return this.control ? this.control.dirty : null;
          }
          /**
           * @description
           * Reports whether the control is touched, meaning that the user has triggered
           * a `blur` event on it. If the control is not present, null is returned.
           */

        }, {
          key: "touched",
          get: function get() {
            return this.control ? this.control.touched : null;
          }
          /**
           * @description
           * Reports the validation status of the control. Possible values include:
           * 'VALID', 'INVALID', 'DISABLED', and 'PENDING'.
           * If the control is not present, null is returned.
           */

        }, {
          key: "status",
          get: function get() {
            return this.control ? this.control.status : null;
          }
          /**
           * @description
           * Reports whether the control is untouched, meaning that the user has not yet triggered
           * a `blur` event on it. If the control is not present, null is returned.
           */

        }, {
          key: "untouched",
          get: function get() {
            return this.control ? this.control.untouched : null;
          }
          /**
           * @description
           * Returns a multicasting observable that emits a validation status whenever it is
           * calculated for the control. If the control is not present, null is returned.
           */

        }, {
          key: "statusChanges",
          get: function get() {
            return this.control ? this.control.statusChanges : null;
          }
          /**
           * @description
           * Returns a multicasting observable of value changes for the control that emits every time the
           * value of the control changes in the UI or programmatically.
           * If the control is not present, null is returned.
           */

        }, {
          key: "valueChanges",
          get: function get() {
            return this.control ? this.control.valueChanges : null;
          }
          /**
           * @description
           * Returns an array that represents the path from the top-level form to this control.
           * Each index is the string name of the control on that level.
           */

        }, {
          key: "path",
          get: function get() {
            return null;
          }
          /**
           * Sets synchronous validators for this directive.
           * @internal
           */

        }, {
          key: "_setValidators",
          value: function _setValidators(validators) {
            this._rawValidators = validators || [];
            this._composedValidatorFn = composeValidators(this._rawValidators);
          }
          /**
           * Sets asynchronous validators for this directive.
           * @internal
           */

        }, {
          key: "_setAsyncValidators",
          value: function _setAsyncValidators(validators) {
            this._rawAsyncValidators = validators || [];
            this._composedAsyncValidatorFn = composeAsyncValidators(this._rawAsyncValidators);
          }
          /**
           * @description
           * Synchronous validator function composed of all the synchronous validators registered with this
           * directive.
           */

        }, {
          key: "validator",
          get: function get() {
            return this._composedValidatorFn || null;
          }
          /**
           * @description
           * Asynchronous validator function composed of all the asynchronous validators registered with
           * this directive.
           */

        }, {
          key: "asyncValidator",
          get: function get() {
            return this._composedAsyncValidatorFn || null;
          }
          /**
           * Internal function to register callbacks that should be invoked
           * when directive instance is being destroyed.
           * @internal
           */

        }, {
          key: "_registerOnDestroy",
          value: function _registerOnDestroy(fn) {
            this._onDestroyCallbacks.push(fn);
          }
          /**
           * Internal function to invoke all registered "on destroy" callbacks.
           * Note: calling this function also clears the list of callbacks.
           * @internal
           */

        }, {
          key: "_invokeOnDestroyCallbacks",
          value: function _invokeOnDestroyCallbacks() {
            this._onDestroyCallbacks.forEach(function (fn) {
              return fn();
            });

            this._onDestroyCallbacks = [];
          }
          /**
           * @description
           * Resets the control with the provided value if the control is present.
           */

        }, {
          key: "reset",
          value: function reset() {
            var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
            if (this.control) this.control.reset(value);
          }
          /**
           * @description
           * Reports whether the control with the given path has the error specified.
           *
           * @param errorCode The code of the error to check
           * @param path A list of control names that designates how to move from the current control
           * to the control that should be queried for errors.
           *
           * @usageNotes
           * For example, for the following `FormGroup`:
           *
           * ```
           * form = new FormGroup({
           *   address: new FormGroup({ street: new FormControl() })
           * });
           * ```
           *
           * The path to the 'street' control from the root form would be 'address' -> 'street'.
           *
           * It can be provided to this method in one of two formats:
           *
           * 1. An array of string control names, e.g. `['address', 'street']`
           * 1. A period-delimited list of control names in one string, e.g. `'address.street'`
           *
           * If no path is given, this method checks for the error on the current control.
           *
           * @returns whether the given error is present in the control at the given path.
           *
           * If the control is not present, false is returned.
           */

        }, {
          key: "hasError",
          value: function hasError(errorCode, path) {
            return this.control ? this.control.hasError(errorCode, path) : false;
          }
          /**
           * @description
           * Reports error data for the control with the given path.
           *
           * @param errorCode The code of the error to check
           * @param path A list of control names that designates how to move from the current control
           * to the control that should be queried for errors.
           *
           * @usageNotes
           * For example, for the following `FormGroup`:
           *
           * ```
           * form = new FormGroup({
           *   address: new FormGroup({ street: new FormControl() })
           * });
           * ```
           *
           * The path to the 'street' control from the root form would be 'address' -> 'street'.
           *
           * It can be provided to this method in one of two formats:
           *
           * 1. An array of string control names, e.g. `['address', 'street']`
           * 1. A period-delimited list of control names in one string, e.g. `'address.street'`
           *
           * @returns error data for that particular error. If the control or error is not present,
           * null is returned.
           */

        }, {
          key: "getError",
          value: function getError(errorCode, path) {
            return this.control ? this.control.getError(errorCode, path) : null;
          }
        }]);

        return AbstractControlDirective;
      }();

      AbstractControlDirective.ɵfac = function AbstractControlDirective_Factory(t) {
        return new (t || AbstractControlDirective)();
      };

      AbstractControlDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: AbstractControlDirective
      });
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @description
       * A base class for directives that contain multiple registered instances of `NgControl`.
       * Only used by the forms module.
       *
       * @publicApi
       */

      var ControlContainer = /*#__PURE__*/function (_AbstractControlDirec) {
        _inherits2(ControlContainer, _AbstractControlDirec);

        var _super176 = _createSuper(ControlContainer);

        function ControlContainer() {
          _classCallCheck2(this, ControlContainer);

          return _super176.apply(this, arguments);
        }

        _createClass2(ControlContainer, [{
          key: "formDirective",
          get:
          /**
           * @description
           * The top-level form directive for the control.
           */
          function get() {
            return null;
          }
          /**
           * @description
           * The path to this group.
           */

        }, {
          key: "path",
          get: function get() {
            return null;
          }
        }]);

        return ControlContainer;
      }(AbstractControlDirective);

      ControlContainer.ɵfac = function ControlContainer_Factory(t) {
        return ɵControlContainer_BaseFactory(t || ControlContainer);
      };

      ControlContainer.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: ControlContainer,
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      var ɵControlContainer_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](ControlContainer);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @description
       * A base class that all `FormControl`-based directives extend. It binds a `FormControl`
       * object to a DOM element.
       *
       * @publicApi
       */


      var NgControl = /*#__PURE__*/function (_AbstractControlDirec2) {
        _inherits2(NgControl, _AbstractControlDirec2);

        var _super177 = _createSuper(NgControl);

        function NgControl() {
          var _this446;

          _classCallCheck2(this, NgControl);

          _this446 = _super177.apply(this, arguments);
          /**
           * @description
           * The parent form for the control.
           *
           * @internal
           */

          _this446._parent = null;
          /**
           * @description
           * The name for the control
           */

          _this446.name = null;
          /**
           * @description
           * The value accessor for the control
           */

          _this446.valueAccessor = null;
          return _this446;
        }

        return NgControl;
      }(AbstractControlDirective);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var AbstractControlStatus = /*#__PURE__*/function () {
        function AbstractControlStatus(cd) {
          _classCallCheck2(this, AbstractControlStatus);

          this._cd = cd;
        }

        _createClass2(AbstractControlStatus, [{
          key: "is",
          value: function is(status) {
            var _a, _b;

            return !!((_b = (_a = this._cd) === null || _a === void 0 ? void 0 : _a.control) === null || _b === void 0 ? void 0 : _b[status]);
          }
        }]);

        return AbstractControlStatus;
      }();

      var ngControlStatusHost = {
        '[class.ng-untouched]': 'is("untouched")',
        '[class.ng-touched]': 'is("touched")',
        '[class.ng-pristine]': 'is("pristine")',
        '[class.ng-dirty]': 'is("dirty")',
        '[class.ng-valid]': 'is("valid")',
        '[class.ng-invalid]': 'is("invalid")',
        '[class.ng-pending]': 'is("pending")'
      };
      /**
       * @description
       * Directive automatically applied to Angular form controls that sets CSS classes
       * based on control status.
       *
       * @usageNotes
       *
       * ### CSS classes applied
       *
       * The following classes are applied as the properties become true:
       *
       * * ng-valid
       * * ng-invalid
       * * ng-pending
       * * ng-pristine
       * * ng-dirty
       * * ng-untouched
       * * ng-touched
       *
       * @ngModule ReactiveFormsModule
       * @ngModule FormsModule
       * @publicApi
       */

      var NgControlStatus = /*#__PURE__*/function (_AbstractControlStatu) {
        _inherits2(NgControlStatus, _AbstractControlStatu);

        var _super178 = _createSuper(NgControlStatus);

        function NgControlStatus(cd) {
          _classCallCheck2(this, NgControlStatus);

          return _super178.call(this, cd);
        }

        return NgControlStatus;
      }(AbstractControlStatus);

      NgControlStatus.ɵfac = function NgControlStatus_Factory(t) {
        return new (t || NgControlStatus)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgControl, 2));
      };

      NgControlStatus.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgControlStatus,
        selectors: [["", "formControlName", ""], ["", "ngModel", ""], ["", "formControl", ""]],
        hostVars: 14,
        hostBindings: function NgControlStatus_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("ng-untouched", ctx.is("untouched"))("ng-touched", ctx.is("touched"))("ng-pristine", ctx.is("pristine"))("ng-dirty", ctx.is("dirty"))("ng-valid", ctx.is("valid"))("ng-invalid", ctx.is("invalid"))("ng-pending", ctx.is("pending"));
          }
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      NgControlStatus.ctorParameters = function () {
        return [{
          type: NgControl,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgControlStatus, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[formControlName],[ngModel],[formControl]',
            host: ngControlStatusHost
          }]
        }], function () {
          return [{
            type: NgControl,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
            }]
          }];
        }, null);
      })();
      /**
       * @description
       * Directive automatically applied to Angular form groups that sets CSS classes
       * based on control status (valid/invalid/dirty/etc).
       *
       * @see `NgControlStatus`
       *
       * @ngModule ReactiveFormsModule
       * @ngModule FormsModule
       * @publicApi
       */


      var NgControlStatusGroup = /*#__PURE__*/function (_AbstractControlStatu2) {
        _inherits2(NgControlStatusGroup, _AbstractControlStatu2);

        var _super179 = _createSuper(NgControlStatusGroup);

        function NgControlStatusGroup(cd) {
          _classCallCheck2(this, NgControlStatusGroup);

          return _super179.call(this, cd);
        }

        return NgControlStatusGroup;
      }(AbstractControlStatus);

      NgControlStatusGroup.ɵfac = function NgControlStatusGroup_Factory(t) {
        return new (t || NgControlStatusGroup)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](ControlContainer, 10));
      };

      NgControlStatusGroup.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgControlStatusGroup,
        selectors: [["", "formGroupName", ""], ["", "formArrayName", ""], ["", "ngModelGroup", ""], ["", "formGroup", ""], ["form", 3, "ngNoForm", ""], ["", "ngForm", ""]],
        hostVars: 14,
        hostBindings: function NgControlStatusGroup_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("ng-untouched", ctx.is("untouched"))("ng-touched", ctx.is("touched"))("ng-pristine", ctx.is("pristine"))("ng-dirty", ctx.is("dirty"))("ng-valid", ctx.is("valid"))("ng-invalid", ctx.is("invalid"))("ng-pending", ctx.is("pending"));
          }
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      NgControlStatusGroup.ctorParameters = function () {
        return [{
          type: ControlContainer,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgControlStatusGroup, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]',
            host: ngControlStatusHost
          }]
        }], function () {
          return [{
            type: ControlContainer,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var NUMBER_VALUE_ACCESSOR = {
        provide: NG_VALUE_ACCESSOR,
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return NumberValueAccessor;
        }),
        multi: true
      };
      /**
       * @description
       * The `ControlValueAccessor` for writing a number value and listening to number input changes.
       * The value accessor is used by the `FormControlDirective`, `FormControlName`, and `NgModel`
       * directives.
       *
       * @usageNotes
       *
       * ### Using a number input with a reactive form.
       *
       * The following example shows how to use a number input with a reactive form.
       *
       * ```ts
       * const totalCountControl = new FormControl();
       * ```
       *
       * ```
       * <input type="number" [formControl]="totalCountControl">
       * ```
       *
       * @ngModule ReactiveFormsModule
       * @ngModule FormsModule
       * @publicApi
       */

      var NumberValueAccessor = /*#__PURE__*/function () {
        function NumberValueAccessor(_renderer, _elementRef) {
          _classCallCheck2(this, NumberValueAccessor);

          this._renderer = _renderer;
          this._elementRef = _elementRef;
          /**
           * The registered callback function called when a change or input event occurs on the input
           * element.
           * @nodoc
           */

          this.onChange = function (_) {};
          /**
           * The registered callback function called when a blur event occurs on the input element.
           * @nodoc
           */


          this.onTouched = function () {};
        }
        /**
         * Sets the "value" property on the input element.
         * @nodoc
         */


        _createClass2(NumberValueAccessor, [{
          key: "writeValue",
          value: function writeValue(value) {
            // The value needs to be normalized for IE9, otherwise it is set to 'null' when null
            var normalizedValue = value == null ? '' : value;

            this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);
          }
          /**
           * Registers a function called when the control value changes.
           * @nodoc
           */

        }, {
          key: "registerOnChange",
          value: function registerOnChange(fn) {
            this.onChange = function (value) {
              fn(value == '' ? null : parseFloat(value));
            };
          }
          /**
           * Registers a function called when the control is touched.
           * @nodoc
           */

        }, {
          key: "registerOnTouched",
          value: function registerOnTouched(fn) {
            this.onTouched = fn;
          }
          /**
           * Sets the "disabled" property on the input element.
           * @nodoc
           */

        }, {
          key: "setDisabledState",
          value: function setDisabledState(isDisabled) {
            this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
          }
        }]);

        return NumberValueAccessor;
      }();

      NumberValueAccessor.ɵfac = function NumberValueAccessor_Factory(t) {
        return new (t || NumberValueAccessor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]));
      };

      NumberValueAccessor.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NumberValueAccessor,
        selectors: [["input", "type", "number", "formControlName", ""], ["input", "type", "number", "formControl", ""], ["input", "type", "number", "ngModel", ""]],
        hostBindings: function NumberValueAccessor_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("input", function NumberValueAccessor_input_HostBindingHandler($event) {
              return ctx.onChange($event.target.value);
            })("blur", function NumberValueAccessor_blur_HostBindingHandler() {
              return ctx.onTouched();
            });
          }
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([NUMBER_VALUE_ACCESSOR])]
      });

      NumberValueAccessor.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NumberValueAccessor, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]',
            host: {
              '(input)': 'onChange($event.target.value)',
              '(blur)': 'onTouched()'
            },
            providers: [NUMBER_VALUE_ACCESSOR]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var RADIO_VALUE_ACCESSOR = {
        provide: NG_VALUE_ACCESSOR,
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return RadioControlValueAccessor;
        }),
        multi: true
      };

      function throwNameError() {
        throw new Error("\n      If you define both a name and a formControlName attribute on your radio button, their values\n      must match. Ex: <input type=\"radio\" formControlName=\"food\" name=\"food\">\n    ");
      }
      /**
       * @description
       * Class used by Angular to track radio buttons. For internal use only.
       */


      var RadioControlRegistry = /*#__PURE__*/function () {
        function RadioControlRegistry() {
          _classCallCheck2(this, RadioControlRegistry);

          this._accessors = [];
        }
        /**
         * @description
         * Adds a control to the internal registry. For internal use only.
         */


        _createClass2(RadioControlRegistry, [{
          key: "add",
          value: function add(control, accessor) {
            this._accessors.push([control, accessor]);
          }
          /**
           * @description
           * Removes a control from the internal registry. For internal use only.
           */

        }, {
          key: "remove",
          value: function remove(accessor) {
            for (var i = this._accessors.length - 1; i >= 0; --i) {
              if (this._accessors[i][1] === accessor) {
                this._accessors.splice(i, 1);

                return;
              }
            }
          }
          /**
           * @description
           * Selects a radio button. For internal use only.
           */

        }, {
          key: "select",
          value: function select(accessor) {
            var _this447 = this;

            this._accessors.forEach(function (c) {
              if (_this447._isSameGroup(c, accessor) && c[1] !== accessor) {
                c[1].fireUncheck(accessor.value);
              }
            });
          }
        }, {
          key: "_isSameGroup",
          value: function _isSameGroup(controlPair, accessor) {
            if (!controlPair[0].control) return false;
            return controlPair[0]._parent === accessor._control._parent && controlPair[1].name === accessor.name;
          }
        }]);

        return RadioControlRegistry;
      }();

      RadioControlRegistry.ɵfac = function RadioControlRegistry_Factory(t) {
        return new (t || RadioControlRegistry)();
      };

      RadioControlRegistry.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: RadioControlRegistry,
        factory: RadioControlRegistry.ɵfac
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](RadioControlRegistry, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [];
        }, null);
      })();
      /**
       * @description
       * The `ControlValueAccessor` for writing radio control values and listening to radio control
       * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and
       * `NgModel` directives.
       *
       * @usageNotes
       *
       * ### Using radio buttons with reactive form directives
       *
       * The follow example shows how to use radio buttons in a reactive form. When using radio buttons in
       * a reactive form, radio buttons in the same group should have the same `formControlName`.
       * Providing a `name` attribute is optional.
       *
       * {@example forms/ts/reactiveRadioButtons/reactive_radio_button_example.ts region='Reactive'}
       *
       * @ngModule ReactiveFormsModule
       * @ngModule FormsModule
       * @publicApi
       */


      var RadioControlValueAccessor = /*#__PURE__*/function () {
        function RadioControlValueAccessor(_renderer, _elementRef, _registry, _injector) {
          _classCallCheck2(this, RadioControlValueAccessor);

          this._renderer = _renderer;
          this._elementRef = _elementRef;
          this._registry = _registry;
          this._injector = _injector;
          /**
           * The registered callback function called when a change event occurs on the input element.
           * @nodoc
           */

          this.onChange = function () {};
          /**
           * The registered callback function called when a blur event occurs on the input element.
           * @nodoc
           */


          this.onTouched = function () {};
        }
        /** @nodoc */


        _createClass2(RadioControlValueAccessor, [{
          key: "ngOnInit",
          value: function ngOnInit() {
            this._control = this._injector.get(NgControl);

            this._checkName();

            this._registry.add(this._control, this);
          }
          /** @nodoc */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._registry.remove(this);
          }
          /**
           * Sets the "checked" property value on the radio input element.
           * @nodoc
           */

        }, {
          key: "writeValue",
          value: function writeValue(value) {
            this._state = value === this.value;

            this._renderer.setProperty(this._elementRef.nativeElement, 'checked', this._state);
          }
          /**
           * Registers a function called when the control value changes.
           * @nodoc
           */

        }, {
          key: "registerOnChange",
          value: function registerOnChange(fn) {
            var _this448 = this;

            this._fn = fn;

            this.onChange = function () {
              fn(_this448.value);

              _this448._registry.select(_this448);
            };
          }
          /**
           * Sets the "value" on the radio input element and unchecks it.
           *
           * @param value
           */

        }, {
          key: "fireUncheck",
          value: function fireUncheck(value) {
            this.writeValue(value);
          }
          /**
           * Registers a function called when the control is touched.
           * @nodoc
           */

        }, {
          key: "registerOnTouched",
          value: function registerOnTouched(fn) {
            this.onTouched = fn;
          }
          /**
           * Sets the "disabled" property on the input element.
           * @nodoc
           */

        }, {
          key: "setDisabledState",
          value: function setDisabledState(isDisabled) {
            this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
          }
        }, {
          key: "_checkName",
          value: function _checkName() {
            if (this.name && this.formControlName && this.name !== this.formControlName && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throwNameError();
            }

            if (!this.name && this.formControlName) this.name = this.formControlName;
          }
        }]);

        return RadioControlValueAccessor;
      }();

      RadioControlValueAccessor.ɵfac = function RadioControlValueAccessor_Factory(t) {
        return new (t || RadioControlValueAccessor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](RadioControlRegistry), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]));
      };

      RadioControlValueAccessor.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: RadioControlValueAccessor,
        selectors: [["input", "type", "radio", "formControlName", ""], ["input", "type", "radio", "formControl", ""], ["input", "type", "radio", "ngModel", ""]],
        hostBindings: function RadioControlValueAccessor_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function RadioControlValueAccessor_change_HostBindingHandler() {
              return ctx.onChange();
            })("blur", function RadioControlValueAccessor_blur_HostBindingHandler() {
              return ctx.onTouched();
            });
          }
        },
        inputs: {
          name: "name",
          formControlName: "formControlName",
          value: "value"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([RADIO_VALUE_ACCESSOR])]
      });

      RadioControlValueAccessor.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: RadioControlRegistry
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]
        }];
      };

      RadioControlValueAccessor.propDecorators = {
        name: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        formControlName: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        value: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](RadioControlValueAccessor, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]',
            host: {
              '(change)': 'onChange()',
              '(blur)': 'onTouched()'
            },
            providers: [RADIO_VALUE_ACCESSOR]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: RadioControlRegistry
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]
          }];
        }, {
          name: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          formControlName: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          value: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var RANGE_VALUE_ACCESSOR = {
        provide: NG_VALUE_ACCESSOR,
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return RangeValueAccessor;
        }),
        multi: true
      };
      /**
       * @description
       * The `ControlValueAccessor` for writing a range value and listening to range input changes.
       * The value accessor is used by the `FormControlDirective`, `FormControlName`, and  `NgModel`
       * directives.
       *
       * @usageNotes
       *
       * ### Using a range input with a reactive form
       *
       * The following example shows how to use a range input with a reactive form.
       *
       * ```ts
       * const ageControl = new FormControl();
       * ```
       *
       * ```
       * <input type="range" [formControl]="ageControl">
       * ```
       *
       * @ngModule ReactiveFormsModule
       * @ngModule FormsModule
       * @publicApi
       */

      var RangeValueAccessor = /*#__PURE__*/function () {
        function RangeValueAccessor(_renderer, _elementRef) {
          _classCallCheck2(this, RangeValueAccessor);

          this._renderer = _renderer;
          this._elementRef = _elementRef;
          /**
           * The registered callback function called when a change or input event occurs on the input
           * element.
           * @nodoc
           */

          this.onChange = function (_) {};
          /**
           * The registered callback function called when a blur event occurs on the input element.
           * @nodoc
           */


          this.onTouched = function () {};
        }
        /**
         * Sets the "value" property on the input element.
         * @nodoc
         */


        _createClass2(RangeValueAccessor, [{
          key: "writeValue",
          value: function writeValue(value) {
            this._renderer.setProperty(this._elementRef.nativeElement, 'value', parseFloat(value));
          }
          /**
           * Registers a function called when the control value changes.
           * @nodoc
           */

        }, {
          key: "registerOnChange",
          value: function registerOnChange(fn) {
            this.onChange = function (value) {
              fn(value == '' ? null : parseFloat(value));
            };
          }
          /**
           * Registers a function called when the control is touched.
           * @nodoc
           */

        }, {
          key: "registerOnTouched",
          value: function registerOnTouched(fn) {
            this.onTouched = fn;
          }
          /**
           * Sets the "disabled" property on the range input element.
           * @nodoc
           */

        }, {
          key: "setDisabledState",
          value: function setDisabledState(isDisabled) {
            this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
          }
        }]);

        return RangeValueAccessor;
      }();

      RangeValueAccessor.ɵfac = function RangeValueAccessor_Factory(t) {
        return new (t || RangeValueAccessor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]));
      };

      RangeValueAccessor.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: RangeValueAccessor,
        selectors: [["input", "type", "range", "formControlName", ""], ["input", "type", "range", "formControl", ""], ["input", "type", "range", "ngModel", ""]],
        hostBindings: function RangeValueAccessor_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function RangeValueAccessor_change_HostBindingHandler($event) {
              return ctx.onChange($event.target.value);
            })("input", function RangeValueAccessor_input_HostBindingHandler($event) {
              return ctx.onChange($event.target.value);
            })("blur", function RangeValueAccessor_blur_HostBindingHandler() {
              return ctx.onTouched();
            });
          }
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([RANGE_VALUE_ACCESSOR])]
      });

      RangeValueAccessor.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](RangeValueAccessor, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]',
            host: {
              '(change)': 'onChange($event.target.value)',
              '(input)': 'onChange($event.target.value)',
              '(blur)': 'onTouched()'
            },
            providers: [RANGE_VALUE_ACCESSOR]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var FormErrorExamples = {
        formControlName: "\n    <div [formGroup]=\"myGroup\">\n      <input formControlName=\"firstName\">\n    </div>\n\n    In your class:\n\n    this.myGroup = new FormGroup({\n       firstName: new FormControl()\n    });",
        formGroupName: "\n    <div [formGroup]=\"myGroup\">\n       <div formGroupName=\"person\">\n          <input formControlName=\"firstName\">\n       </div>\n    </div>\n\n    In your class:\n\n    this.myGroup = new FormGroup({\n       person: new FormGroup({ firstName: new FormControl() })\n    });",
        formArrayName: "\n    <div [formGroup]=\"myGroup\">\n      <div formArrayName=\"cities\">\n        <div *ngFor=\"let city of cityArray.controls; index as i\">\n          <input [formControlName]=\"i\">\n        </div>\n      </div>\n    </div>\n\n    In your class:\n\n    this.cityArray = new FormArray([new FormControl('SF')]);\n    this.myGroup = new FormGroup({\n      cities: this.cityArray\n    });",
        ngModelGroup: "\n    <form>\n       <div ngModelGroup=\"person\">\n          <input [(ngModel)]=\"person.name\" name=\"firstName\">\n       </div>\n    </form>",
        ngModelWithFormGroup: "\n    <div [formGroup]=\"myGroup\">\n       <input formControlName=\"firstName\">\n       <input [(ngModel)]=\"showMoreControls\" [ngModelOptions]=\"{standalone: true}\">\n    </div>\n  "
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var ReactiveErrors = /*#__PURE__*/function () {
        function ReactiveErrors() {
          _classCallCheck2(this, ReactiveErrors);
        }

        _createClass2(ReactiveErrors, null, [{
          key: "controlParentException",
          value: function controlParentException() {
            throw new Error("formControlName must be used with a parent formGroup directive.  You'll want to add a formGroup\n       directive and pass it an existing FormGroup instance (you can create one in your class).\n\n      Example:\n\n      ".concat(FormErrorExamples.formControlName));
          }
        }, {
          key: "ngModelGroupException",
          value: function ngModelGroupException() {
            throw new Error("formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\n       that also have a \"form\" prefix: formGroupName, formArrayName, or formGroup.\n\n       Option 1:  Update the parent to be formGroupName (reactive form strategy)\n\n        ".concat(FormErrorExamples.formGroupName, "\n\n        Option 2: Use ngModel instead of formControlName (template-driven strategy)\n\n        ").concat(FormErrorExamples.ngModelGroup));
          }
        }, {
          key: "missingFormException",
          value: function missingFormException() {
            throw new Error("formGroup expects a FormGroup instance. Please pass one in.\n\n       Example:\n\n       ".concat(FormErrorExamples.formControlName));
          }
        }, {
          key: "groupParentException",
          value: function groupParentException() {
            throw new Error("formGroupName must be used with a parent formGroup directive.  You'll want to add a formGroup\n      directive and pass it an existing FormGroup instance (you can create one in your class).\n\n      Example:\n\n      ".concat(FormErrorExamples.formGroupName));
          }
        }, {
          key: "arrayParentException",
          value: function arrayParentException() {
            throw new Error("formArrayName must be used with a parent formGroup directive.  You'll want to add a formGroup\n       directive and pass it an existing FormGroup instance (you can create one in your class).\n\n        Example:\n\n        ".concat(FormErrorExamples.formArrayName));
          }
        }, {
          key: "disabledAttrWarning",
          value: function disabledAttrWarning() {
            console.warn("\n      It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\n      when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\n      you. We recommend using this approach to avoid 'changed after checked' errors.\n\n      Example:\n      form = new FormGroup({\n        first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\n        last: new FormControl('Drew', Validators.required)\n      });\n    ");
          }
        }, {
          key: "ngModelWarning",
          value: function ngModelWarning(directiveName) {
            console.warn("\n    It looks like you're using ngModel on the same form field as ".concat(directiveName, ".\n    Support for using the ngModel input property and ngModelChange event with\n    reactive form directives has been deprecated in Angular v6 and will be removed\n    in a future version of Angular.\n\n    For more information on this, see our API docs here:\n    https://angular.io/api/forms/").concat(directiveName === 'formControl' ? 'FormControlDirective' : 'FormControlName', "#use-with-ngmodel\n    "));
          }
        }]);

        return ReactiveErrors;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var SELECT_VALUE_ACCESSOR = {
        provide: NG_VALUE_ACCESSOR,
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return SelectControlValueAccessor;
        }),
        multi: true
      };

      function _buildValueString(id, value) {
        if (id == null) return "".concat(value);
        if (value && typeof value === 'object') value = 'Object';
        return "".concat(id, ": ").concat(value).slice(0, 50);
      }

      function _extractId(valueString) {
        return valueString.split(':')[0];
      }
      /**
       * @description
       * The `ControlValueAccessor` for writing select control values and listening to select control
       * changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and
       * `NgModel` directives.
       *
       * @usageNotes
       *
       * ### Using select controls in a reactive form
       *
       * The following examples show how to use a select control in a reactive form.
       *
       * {@example forms/ts/reactiveSelectControl/reactive_select_control_example.ts region='Component'}
       *
       * ### Using select controls in a template-driven form
       *
       * To use a select in a template-driven form, simply add an `ngModel` and a `name`
       * attribute to the main `<select>` tag.
       *
       * {@example forms/ts/selectControl/select_control_example.ts region='Component'}
       *
       * ### Customizing option selection
       *
       * Angular uses object identity to select option. It's possible for the identities of items
       * to change while the data does not. This can happen, for example, if the items are produced
       * from an RPC to the server, and that RPC is re-run. Even if the data hasn't changed, the
       * second response will produce objects with different identities.
       *
       * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.
       * `compareWith` takes a **function** which has two arguments: `option1` and `option2`.
       * If `compareWith` is given, Angular selects option by the return value of the function.
       *
       * ```ts
       * const selectedCountriesControl = new FormControl();
       * ```
       *
       * ```
       * <select [compareWith]="compareFn"  [formControl]="selectedCountriesControl">
       *     <option *ngFor="let country of countries" [ngValue]="country">
       *         {{country.name}}
       *     </option>
       * </select>
       *
       * compareFn(c1: Country, c2: Country): boolean {
       *     return c1 && c2 ? c1.id === c2.id : c1 === c2;
       * }
       * ```
       *
       * **Note:** We listen to the 'change' event because 'input' events aren't fired
       * for selects in IE, see:
       * https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/input_event#browser_compatibility
       *
       * @ngModule ReactiveFormsModule
       * @ngModule FormsModule
       * @publicApi
       */


      var SelectControlValueAccessor = /*#__PURE__*/function () {
        function SelectControlValueAccessor(_renderer, _elementRef) {
          _classCallCheck2(this, SelectControlValueAccessor);

          this._renderer = _renderer;
          this._elementRef = _elementRef;
          /** @internal */

          this._optionMap = new Map();
          /** @internal */

          this._idCounter = 0;
          /**
           * The registered callback function called when a change event occurs on the input element.
           * @nodoc
           */

          this.onChange = function (_) {};
          /**
           * The registered callback function called when a blur event occurs on the input element.
           * @nodoc
           */


          this.onTouched = function () {};

          this._compareWith = Object.is;
        }
        /**
         * @description
         * Tracks the option comparison algorithm for tracking identities when
         * checking for changes.
         */


        _createClass2(SelectControlValueAccessor, [{
          key: "compareWith",
          set: function set(fn) {
            if (typeof fn !== 'function' && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw new Error("compareWith must be a function, but received ".concat(JSON.stringify(fn)));
            }

            this._compareWith = fn;
          }
          /**
           * Sets the "value" property on the input element. The "selectedIndex"
           * property is also set if an ID is provided on the option element.
           * @nodoc
           */

        }, {
          key: "writeValue",
          value: function writeValue(value) {
            this.value = value;

            var id = this._getOptionId(value);

            if (id == null) {
              this._renderer.setProperty(this._elementRef.nativeElement, 'selectedIndex', -1);
            }

            var valueString = _buildValueString(id, value);

            this._renderer.setProperty(this._elementRef.nativeElement, 'value', valueString);
          }
          /**
           * Registers a function called when the control value changes.
           * @nodoc
           */

        }, {
          key: "registerOnChange",
          value: function registerOnChange(fn) {
            var _this449 = this;

            this.onChange = function (valueString) {
              _this449.value = _this449._getOptionValue(valueString);
              fn(_this449.value);
            };
          }
          /**
           * Registers a function called when the control is touched.
           * @nodoc
           */

        }, {
          key: "registerOnTouched",
          value: function registerOnTouched(fn) {
            this.onTouched = fn;
          }
          /**
           * Sets the "disabled" property on the select input element.
           * @nodoc
           */

        }, {
          key: "setDisabledState",
          value: function setDisabledState(isDisabled) {
            this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
          }
          /** @internal */

        }, {
          key: "_registerOption",
          value: function _registerOption() {
            return (this._idCounter++).toString();
          }
          /** @internal */

        }, {
          key: "_getOptionId",
          value: function _getOptionId(value) {
            for (var _i15 = 0, _Array$from = Array.from(this._optionMap.keys()); _i15 < _Array$from.length; _i15++) {
              var id = _Array$from[_i15];
              if (this._compareWith(this._optionMap.get(id), value)) return id;
            }

            return null;
          }
          /** @internal */

        }, {
          key: "_getOptionValue",
          value: function _getOptionValue(valueString) {
            var id = _extractId(valueString);

            return this._optionMap.has(id) ? this._optionMap.get(id) : valueString;
          }
        }]);

        return SelectControlValueAccessor;
      }();

      SelectControlValueAccessor.ɵfac = function SelectControlValueAccessor_Factory(t) {
        return new (t || SelectControlValueAccessor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]));
      };

      SelectControlValueAccessor.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: SelectControlValueAccessor,
        selectors: [["select", "formControlName", "", 3, "multiple", ""], ["select", "formControl", "", 3, "multiple", ""], ["select", "ngModel", "", 3, "multiple", ""]],
        hostBindings: function SelectControlValueAccessor_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function SelectControlValueAccessor_change_HostBindingHandler($event) {
              return ctx.onChange($event.target.value);
            })("blur", function SelectControlValueAccessor_blur_HostBindingHandler() {
              return ctx.onTouched();
            });
          }
        },
        inputs: {
          compareWith: "compareWith"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([SELECT_VALUE_ACCESSOR])]
      });

      SelectControlValueAccessor.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }];
      };

      SelectControlValueAccessor.propDecorators = {
        compareWith: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](SelectControlValueAccessor, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]',
            host: {
              '(change)': 'onChange($event.target.value)',
              '(blur)': 'onTouched()'
            },
            providers: [SELECT_VALUE_ACCESSOR]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }];
        }, {
          compareWith: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * @description
       * Marks `<option>` as dynamic, so Angular can be notified when options change.
       *
       * @see `SelectControlValueAccessor`
       *
       * @ngModule ReactiveFormsModule
       * @ngModule FormsModule
       * @publicApi
       */


      var NgSelectOption = /*#__PURE__*/function () {
        function NgSelectOption(_element, _renderer, _select) {
          _classCallCheck2(this, NgSelectOption);

          this._element = _element;
          this._renderer = _renderer;
          this._select = _select;
          if (this._select) this.id = this._select._registerOption();
        }
        /**
         * @description
         * Tracks the value bound to the option element. Unlike the value binding,
         * ngValue supports binding to objects.
         */


        _createClass2(NgSelectOption, [{
          key: "ngValue",
          set: function set(value) {
            if (this._select == null) return;

            this._select._optionMap.set(this.id, value);

            this._setElementValue(_buildValueString(this.id, value));

            this._select.writeValue(this._select.value);
          }
          /**
           * @description
           * Tracks simple string values bound to the option element.
           * For objects, use the `ngValue` input binding.
           */

        }, {
          key: "value",
          set: function set(value) {
            this._setElementValue(value);

            if (this._select) this._select.writeValue(this._select.value);
          }
          /** @internal */

        }, {
          key: "_setElementValue",
          value: function _setElementValue(value) {
            this._renderer.setProperty(this._element.nativeElement, 'value', value);
          }
          /** @nodoc */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            if (this._select) {
              this._select._optionMap["delete"](this.id);

              this._select.writeValue(this._select.value);
            }
          }
        }]);

        return NgSelectOption;
      }();

      NgSelectOption.ɵfac = function NgSelectOption_Factory(t) {
        return new (t || NgSelectOption)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](SelectControlValueAccessor, 9));
      };

      NgSelectOption.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgSelectOption,
        selectors: [["option"]],
        inputs: {
          ngValue: "ngValue",
          value: "value"
        }
      });

      NgSelectOption.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }, {
          type: SelectControlValueAccessor,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
          }]
        }];
      };

      NgSelectOption.propDecorators = {
        ngValue: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['ngValue']
        }],
        value: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['value']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgSelectOption, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'option'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }, {
            type: SelectControlValueAccessor,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
            }]
          }];
        }, {
          ngValue: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['ngValue']
          }],
          value: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['value']
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var SELECT_MULTIPLE_VALUE_ACCESSOR = {
        provide: NG_VALUE_ACCESSOR,
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return SelectMultipleControlValueAccessor;
        }),
        multi: true
      };

      function _buildValueString$1(id, value) {
        if (id == null) return "".concat(value);
        if (typeof value === 'string') value = "'".concat(value, "'");
        if (value && typeof value === 'object') value = 'Object';
        return "".concat(id, ": ").concat(value).slice(0, 50);
      }

      function _extractId$1(valueString) {
        return valueString.split(':')[0];
      }
      /** Mock interface for HTMLCollection */


      var HTMLCollection = function HTMLCollection() {
        _classCallCheck2(this, HTMLCollection);
      };
      /**
       * @description
       * The `ControlValueAccessor` for writing multi-select control values and listening to multi-select
       * control changes. The value accessor is used by the `FormControlDirective`, `FormControlName`, and
       * `NgModel` directives.
       *
       * @see `SelectControlValueAccessor`
       *
       * @usageNotes
       *
       * ### Using a multi-select control
       *
       * The follow example shows you how to use a multi-select control with a reactive form.
       *
       * ```ts
       * const countryControl = new FormControl();
       * ```
       *
       * ```
       * <select multiple name="countries" [formControl]="countryControl">
       *   <option *ngFor="let country of countries" [ngValue]="country">
       *     {{ country.name }}
       *   </option>
       * </select>
       * ```
       *
       * ### Customizing option selection
       *
       * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.
       * See the `SelectControlValueAccessor` for usage.
       *
       * @ngModule ReactiveFormsModule
       * @ngModule FormsModule
       * @publicApi
       */


      var SelectMultipleControlValueAccessor = /*#__PURE__*/function () {
        function SelectMultipleControlValueAccessor(_renderer, _elementRef) {
          _classCallCheck2(this, SelectMultipleControlValueAccessor);

          this._renderer = _renderer;
          this._elementRef = _elementRef;
          /** @internal */

          this._optionMap = new Map();
          /** @internal */

          this._idCounter = 0;
          /**
           * The registered callback function called when a change event occurs on the input element.
           * @nodoc
           */

          this.onChange = function (_) {};
          /**
           * The registered callback function called when a blur event occurs on the input element.
           * @nodoc
           */


          this.onTouched = function () {};

          this._compareWith = Object.is;
        }
        /**
         * @description
         * Tracks the option comparison algorithm for tracking identities when
         * checking for changes.
         */


        _createClass2(SelectMultipleControlValueAccessor, [{
          key: "compareWith",
          set: function set(fn) {
            if (typeof fn !== 'function' && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw new Error("compareWith must be a function, but received ".concat(JSON.stringify(fn)));
            }

            this._compareWith = fn;
          }
          /**
           * Sets the "value" property on one or of more of the select's options.
           * @nodoc
           */

        }, {
          key: "writeValue",
          value: function writeValue(value) {
            var _this450 = this;

            this.value = value;
            var optionSelectedStateSetter;

            if (Array.isArray(value)) {
              // convert values to ids
              var ids = value.map(function (v) {
                return _this450._getOptionId(v);
              });

              optionSelectedStateSetter = function optionSelectedStateSetter(opt, o) {
                opt._setSelected(ids.indexOf(o.toString()) > -1);
              };
            } else {
              optionSelectedStateSetter = function optionSelectedStateSetter(opt, o) {
                opt._setSelected(false);
              };
            }

            this._optionMap.forEach(optionSelectedStateSetter);
          }
          /**
           * Registers a function called when the control value changes
           * and writes an array of the selected options.
           * @nodoc
           */

        }, {
          key: "registerOnChange",
          value: function registerOnChange(fn) {
            var _this451 = this;

            this.onChange = function (_) {
              var selected = [];

              if (_.selectedOptions !== undefined) {
                var options = _.selectedOptions;

                for (var i = 0; i < options.length; i++) {
                  var opt = options.item(i);

                  var val = _this451._getOptionValue(opt.value);

                  selected.push(val);
                }
              } // Degrade on IE
              else {
                  var _options2 = _.options;

                  for (var _i16 = 0; _i16 < _options2.length; _i16++) {
                    var _opt = _options2.item(_i16);

                    if (_opt.selected) {
                      var _val = _this451._getOptionValue(_opt.value);

                      selected.push(_val);
                    }
                  }
                }

              _this451.value = selected;
              fn(selected);
            };
          }
          /**
           * Registers a function called when the control is touched.
           * @nodoc
           */

        }, {
          key: "registerOnTouched",
          value: function registerOnTouched(fn) {
            this.onTouched = fn;
          }
          /**
           * Sets the "disabled" property on the select input element.
           * @nodoc
           */

        }, {
          key: "setDisabledState",
          value: function setDisabledState(isDisabled) {
            this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
          }
          /** @internal */

        }, {
          key: "_registerOption",
          value: function _registerOption(value) {
            var id = (this._idCounter++).toString();

            this._optionMap.set(id, value);

            return id;
          }
          /** @internal */

        }, {
          key: "_getOptionId",
          value: function _getOptionId(value) {
            for (var _i17 = 0, _Array$from2 = Array.from(this._optionMap.keys()); _i17 < _Array$from2.length; _i17++) {
              var id = _Array$from2[_i17];
              if (this._compareWith(this._optionMap.get(id)._value, value)) return id;
            }

            return null;
          }
          /** @internal */

        }, {
          key: "_getOptionValue",
          value: function _getOptionValue(valueString) {
            var id = _extractId$1(valueString);

            return this._optionMap.has(id) ? this._optionMap.get(id)._value : valueString;
          }
        }]);

        return SelectMultipleControlValueAccessor;
      }();

      SelectMultipleControlValueAccessor.ɵfac = function SelectMultipleControlValueAccessor_Factory(t) {
        return new (t || SelectMultipleControlValueAccessor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]));
      };

      SelectMultipleControlValueAccessor.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: SelectMultipleControlValueAccessor,
        selectors: [["select", "multiple", "", "formControlName", ""], ["select", "multiple", "", "formControl", ""], ["select", "multiple", "", "ngModel", ""]],
        hostBindings: function SelectMultipleControlValueAccessor_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function SelectMultipleControlValueAccessor_change_HostBindingHandler($event) {
              return ctx.onChange($event.target);
            })("blur", function SelectMultipleControlValueAccessor_blur_HostBindingHandler() {
              return ctx.onTouched();
            });
          }
        },
        inputs: {
          compareWith: "compareWith"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([SELECT_MULTIPLE_VALUE_ACCESSOR])]
      });

      SelectMultipleControlValueAccessor.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }];
      };

      SelectMultipleControlValueAccessor.propDecorators = {
        compareWith: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](SelectMultipleControlValueAccessor, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]',
            host: {
              '(change)': 'onChange($event.target)',
              '(blur)': 'onTouched()'
            },
            providers: [SELECT_MULTIPLE_VALUE_ACCESSOR]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }];
        }, {
          compareWith: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * @description
       * Marks `<option>` as dynamic, so Angular can be notified when options change.
       *
       * @see `SelectMultipleControlValueAccessor`
       *
       * @ngModule ReactiveFormsModule
       * @ngModule FormsModule
       * @publicApi
       */


      var ɵNgSelectMultipleOption = /*#__PURE__*/function () {
        function ɵNgSelectMultipleOption(_element, _renderer, _select) {
          _classCallCheck2(this, ɵNgSelectMultipleOption);

          this._element = _element;
          this._renderer = _renderer;
          this._select = _select;

          if (this._select) {
            this.id = this._select._registerOption(this);
          }
        }
        /**
         * @description
         * Tracks the value bound to the option element. Unlike the value binding,
         * ngValue supports binding to objects.
         */


        _createClass2(ɵNgSelectMultipleOption, [{
          key: "ngValue",
          set: function set(value) {
            if (this._select == null) return;
            this._value = value;

            this._setElementValue(_buildValueString$1(this.id, value));

            this._select.writeValue(this._select.value);
          }
          /**
           * @description
           * Tracks simple string values bound to the option element.
           * For objects, use the `ngValue` input binding.
           */

        }, {
          key: "value",
          set: function set(value) {
            if (this._select) {
              this._value = value;

              this._setElementValue(_buildValueString$1(this.id, value));

              this._select.writeValue(this._select.value);
            } else {
              this._setElementValue(value);
            }
          }
          /** @internal */

        }, {
          key: "_setElementValue",
          value: function _setElementValue(value) {
            this._renderer.setProperty(this._element.nativeElement, 'value', value);
          }
          /** @internal */

        }, {
          key: "_setSelected",
          value: function _setSelected(selected) {
            this._renderer.setProperty(this._element.nativeElement, 'selected', selected);
          }
          /** @nodoc */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            if (this._select) {
              this._select._optionMap["delete"](this.id);

              this._select.writeValue(this._select.value);
            }
          }
        }]);

        return ɵNgSelectMultipleOption;
      }();

      ɵNgSelectMultipleOption.ɵfac = function ɵNgSelectMultipleOption_Factory(t) {
        return new (t || ɵNgSelectMultipleOption)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](SelectMultipleControlValueAccessor, 9));
      };

      ɵNgSelectMultipleOption.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: ɵNgSelectMultipleOption,
        selectors: [["option"]],
        inputs: {
          ngValue: "ngValue",
          value: "value"
        }
      });

      ɵNgSelectMultipleOption.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }, {
          type: SelectMultipleControlValueAccessor,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
          }]
        }];
      };

      ɵNgSelectMultipleOption.propDecorators = {
        ngValue: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['ngValue']
        }],
        value: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['value']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ɵNgSelectMultipleOption, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'option'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }, {
            type: SelectMultipleControlValueAccessor,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
            }]
          }];
        }, {
          ngValue: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['ngValue']
          }],
          value: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['value']
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function controlPath(name, parent) {
        return [].concat(_toConsumableArray(parent.path), [name]);
      }
      /**
       * Links a Form control and a Form directive by setting up callbacks (such as `onChange`) on both
       * instances. This function is typically invoked when form directive is being initialized.
       *
       * @param control Form control instance that should be linked.
       * @param dir Directive that should be linked with a given control.
       */


      function setUpControl(control, dir) {
        if (typeof ngDevMode === 'undefined' || ngDevMode) {
          if (!control) _throwError(dir, 'Cannot find control with');
          if (!dir.valueAccessor) _throwError(dir, 'No value accessor for form control with');
        }

        setUpValidators(control, dir,
        /* handleOnValidatorChange */
        true);
        dir.valueAccessor.writeValue(control.value);
        setUpViewChangePipeline(control, dir);
        setUpModelChangePipeline(control, dir);
        setUpBlurPipeline(control, dir);
        setUpDisabledChangeHandler(control, dir);
      }
      /**
       * Reverts configuration performed by the `setUpControl` control function.
       * Effectively disconnects form control with a given form directive.
       * This function is typically invoked when corresponding form directive is being destroyed.
       *
       * @param control Form control which should be cleaned up.
       * @param dir Directive that should be disconnected from a given control.
       * @param validateControlPresenceOnChange Flag that indicates whether onChange handler should
       *     contain asserts to verify that it's not called once directive is destroyed. We need this flag
       *     to avoid potentially breaking changes caused by better control cleanup introduced in #39235.
       */


      function cleanUpControl(control, dir) {
        var validateControlPresenceOnChange = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;

        var noop = function noop() {
          if (validateControlPresenceOnChange && (typeof ngDevMode === 'undefined' || ngDevMode)) {
            _noControlError(dir);
          }
        }; // The `valueAccessor` field is typically defined on FromControl and FormControlName directive
        // instances and there is a logic in `selectValueAccessor` function that throws if it's not the
        // case. We still check the presence of `valueAccessor` before invoking its methods to make sure
        // that cleanup works correctly if app code or tests are setup to ignore the error thrown from
        // `selectValueAccessor`. See https://github.com/angular/angular/issues/40521.


        if (dir.valueAccessor) {
          dir.valueAccessor.registerOnChange(noop);
          dir.valueAccessor.registerOnTouched(noop);
        }

        cleanUpValidators(control, dir,
        /* handleOnValidatorChange */
        true);

        if (control) {
          dir._invokeOnDestroyCallbacks();

          control._registerOnCollectionChange(function () {});
        }
      }

      function registerOnValidatorChange(validators, onChange) {
        validators.forEach(function (validator) {
          if (validator.registerOnValidatorChange) validator.registerOnValidatorChange(onChange);
        });
      }
      /**
       * Sets up disabled change handler function on a given form control if ControlValueAccessor
       * associated with a given directive instance supports the `setDisabledState` call.
       *
       * @param control Form control where disabled change handler should be setup.
       * @param dir Corresponding directive instance associated with this control.
       */


      function setUpDisabledChangeHandler(control, dir) {
        if (dir.valueAccessor.setDisabledState) {
          var onDisabledChange = function onDisabledChange(isDisabled) {
            dir.valueAccessor.setDisabledState(isDisabled);
          };

          control.registerOnDisabledChange(onDisabledChange); // Register a callback function to cleanup disabled change handler
          // from a control instance when a directive is destroyed.

          dir._registerOnDestroy(function () {
            control._unregisterOnDisabledChange(onDisabledChange);
          });
        }
      }
      /**
       * Sets up sync and async directive validators on provided form control.
       * This function merges validators from the directive into the validators of the control.
       *
       * @param control Form control where directive validators should be setup.
       * @param dir Directive instance that contains validators to be setup.
       * @param handleOnValidatorChange Flag that determines whether directive validators should be setup
       *     to handle validator input change.
       */


      function setUpValidators(control, dir, handleOnValidatorChange) {
        var validators = getControlValidators(control);

        if (dir.validator !== null) {
          control.setValidators(mergeValidators(validators, dir.validator));
        } else if (typeof validators === 'function') {
          // If sync validators are represented by a single validator function, we force the
          // `Validators.compose` call to happen by executing the `setValidators` function with
          // an array that contains that function. We need this to avoid possible discrepancies in
          // validators behavior, so sync validators are always processed by the `Validators.compose`.
          // Note: we should consider moving this logic inside the `setValidators` function itself, so we
          // have consistent behavior on AbstractControl API level. The same applies to the async
          // validators logic below.
          control.setValidators([validators]);
        }

        var asyncValidators = getControlAsyncValidators(control);

        if (dir.asyncValidator !== null) {
          control.setAsyncValidators(mergeValidators(asyncValidators, dir.asyncValidator));
        } else if (typeof asyncValidators === 'function') {
          control.setAsyncValidators([asyncValidators]);
        } // Re-run validation when validator binding changes, e.g. minlength=3 -> minlength=4


        if (handleOnValidatorChange) {
          var onValidatorChange = function onValidatorChange() {
            return control.updateValueAndValidity();
          };

          registerOnValidatorChange(dir._rawValidators, onValidatorChange);
          registerOnValidatorChange(dir._rawAsyncValidators, onValidatorChange);
        }
      }
      /**
       * Cleans up sync and async directive validators on provided form control.
       * This function reverts the setup performed by the `setUpValidators` function, i.e.
       * removes directive-specific validators from a given control instance.
       *
       * @param control Form control from where directive validators should be removed.
       * @param dir Directive instance that contains validators to be removed.
       * @param handleOnValidatorChange Flag that determines whether directive validators should also be
       *     cleaned up to stop handling validator input change (if previously configured to do so).
       * @returns true if a control was updated as a result of this action.
       */


      function cleanUpValidators(control, dir, handleOnValidatorChange) {
        var isControlUpdated = false;

        if (control !== null) {
          if (dir.validator !== null) {
            var validators = getControlValidators(control);

            if (Array.isArray(validators) && validators.length > 0) {
              // Filter out directive validator function.
              var updatedValidators = validators.filter(function (validator) {
                return validator !== dir.validator;
              });

              if (updatedValidators.length !== validators.length) {
                isControlUpdated = true;
                control.setValidators(updatedValidators);
              }
            }
          }

          if (dir.asyncValidator !== null) {
            var asyncValidators = getControlAsyncValidators(control);

            if (Array.isArray(asyncValidators) && asyncValidators.length > 0) {
              // Filter out directive async validator function.
              var updatedAsyncValidators = asyncValidators.filter(function (asyncValidator) {
                return asyncValidator !== dir.asyncValidator;
              });

              if (updatedAsyncValidators.length !== asyncValidators.length) {
                isControlUpdated = true;
                control.setAsyncValidators(updatedAsyncValidators);
              }
            }
          }
        }

        if (handleOnValidatorChange) {
          // Clear onValidatorChange callbacks by providing a noop function.
          var noop = function noop() {};

          registerOnValidatorChange(dir._rawValidators, noop);
          registerOnValidatorChange(dir._rawAsyncValidators, noop);
        }

        return isControlUpdated;
      }

      function setUpViewChangePipeline(control, dir) {
        dir.valueAccessor.registerOnChange(function (newValue) {
          control._pendingValue = newValue;
          control._pendingChange = true;
          control._pendingDirty = true;
          if (control.updateOn === 'change') updateControl(control, dir);
        });
      }

      function setUpBlurPipeline(control, dir) {
        dir.valueAccessor.registerOnTouched(function () {
          control._pendingTouched = true;
          if (control.updateOn === 'blur' && control._pendingChange) updateControl(control, dir);
          if (control.updateOn !== 'submit') control.markAsTouched();
        });
      }

      function updateControl(control, dir) {
        if (control._pendingDirty) control.markAsDirty();
        control.setValue(control._pendingValue, {
          emitModelToViewChange: false
        });
        dir.viewToModelUpdate(control._pendingValue);
        control._pendingChange = false;
      }

      function setUpModelChangePipeline(control, dir) {
        var onChange = function onChange(newValue, emitModelEvent) {
          // control -> view
          dir.valueAccessor.writeValue(newValue); // control -> ngModel

          if (emitModelEvent) dir.viewToModelUpdate(newValue);
        };

        control.registerOnChange(onChange); // Register a callback function to cleanup onChange handler
        // from a control instance when a directive is destroyed.

        dir._registerOnDestroy(function () {
          control._unregisterOnChange(onChange);
        });
      }
      /**
       * Links a FormGroup or FormArray instance and corresponding Form directive by setting up validators
       * present in the view.
       *
       * @param control FormGroup or FormArray instance that should be linked.
       * @param dir Directive that provides view validators.
       */


      function setUpFormContainer(control, dir) {
        if (control == null && (typeof ngDevMode === 'undefined' || ngDevMode)) _throwError(dir, 'Cannot find control with');
        setUpValidators(control, dir,
        /* handleOnValidatorChange */
        false);
      }
      /**
       * Reverts the setup performed by the `setUpFormContainer` function.
       *
       * @param control FormGroup or FormArray instance that should be cleaned up.
       * @param dir Directive that provided view validators.
       * @returns true if a control was updated as a result of this action.
       */


      function cleanUpFormContainer(control, dir) {
        return cleanUpValidators(control, dir,
        /* handleOnValidatorChange */
        false);
      }

      function _noControlError(dir) {
        return _throwError(dir, 'There is no FormControl instance attached to form control element with');
      }

      function _throwError(dir, message) {
        var messageEnd;

        if (dir.path.length > 1) {
          messageEnd = "path: '".concat(dir.path.join(' -> '), "'");
        } else if (dir.path[0]) {
          messageEnd = "name: '".concat(dir.path, "'");
        } else {
          messageEnd = 'unspecified name attribute';
        }

        throw new Error("".concat(message, " ").concat(messageEnd));
      }

      function isPropertyUpdated(changes, viewModel) {
        if (!changes.hasOwnProperty('model')) return false;
        var change = changes['model'];
        if (change.isFirstChange()) return true;
        return !Object.is(viewModel, change.currentValue);
      }

      var BUILTIN_ACCESSORS = [CheckboxControlValueAccessor, RangeValueAccessor, NumberValueAccessor, SelectControlValueAccessor, SelectMultipleControlValueAccessor, RadioControlValueAccessor];

      function isBuiltInAccessor(valueAccessor) {
        return BUILTIN_ACCESSORS.some(function (a) {
          return valueAccessor.constructor === a;
        });
      }

      function syncPendingControls(form, directives) {
        form._syncPendingControls();

        directives.forEach(function (dir) {
          var control = dir.control;

          if (control.updateOn === 'submit' && control._pendingChange) {
            dir.viewToModelUpdate(control._pendingValue);
            control._pendingChange = false;
          }
        });
      } // TODO: vsavkin remove it once https://github.com/angular/angular/issues/3011 is implemented


      function selectValueAccessor(dir, valueAccessors) {
        if (!valueAccessors) return null;
        if (!Array.isArray(valueAccessors) && (typeof ngDevMode === 'undefined' || ngDevMode)) _throwError(dir, 'Value accessor was not provided as an array for form control with');
        var defaultAccessor = undefined;
        var builtinAccessor = undefined;
        var customAccessor = undefined;
        valueAccessors.forEach(function (v) {
          if (v.constructor === DefaultValueAccessor) {
            defaultAccessor = v;
          } else if (isBuiltInAccessor(v)) {
            if (builtinAccessor && (typeof ngDevMode === 'undefined' || ngDevMode)) _throwError(dir, 'More than one built-in value accessor matches form control with');
            builtinAccessor = v;
          } else {
            if (customAccessor && (typeof ngDevMode === 'undefined' || ngDevMode)) _throwError(dir, 'More than one custom value accessor matches form control with');
            customAccessor = v;
          }
        });
        if (customAccessor) return customAccessor;
        if (builtinAccessor) return builtinAccessor;
        if (defaultAccessor) return defaultAccessor;

        if (typeof ngDevMode === 'undefined' || ngDevMode) {
          _throwError(dir, 'No valid value accessor for form control with');
        }

        return null;
      }

      function removeListItem(list, el) {
        var index = list.indexOf(el);
        if (index > -1) list.splice(index, 1);
      } // TODO(kara): remove after deprecation period


      function _ngModelWarning(name, type, instance, warningConfig) {
        if (warningConfig === 'never') return;

        if ((warningConfig === null || warningConfig === 'once') && !type._ngModelWarningSentOnce || warningConfig === 'always' && !instance._ngModelWarningSent) {
          ReactiveErrors.ngModelWarning(name);
          type._ngModelWarningSentOnce = true;
          instance._ngModelWarningSent = true;
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Reports that a FormControl is valid, meaning that no errors exist in the input value.
       *
       * @see `status`
       */


      var VALID = 'VALID';
      /**
       * Reports that a FormControl is invalid, meaning that an error exists in the input value.
       *
       * @see `status`
       */

      var INVALID = 'INVALID';
      /**
       * Reports that a FormControl is pending, meaning that that async validation is occurring and
       * errors are not yet available for the input value.
       *
       * @see `markAsPending`
       * @see `status`
       */

      var PENDING = 'PENDING';
      /**
       * Reports that a FormControl is disabled, meaning that the control is exempt from ancestor
       * calculations of validity or value.
       *
       * @see `markAsDisabled`
       * @see `status`
       */

      var DISABLED = 'DISABLED';

      function _find(control, path, delimiter) {
        if (path == null) return null;

        if (!Array.isArray(path)) {
          path = path.split(delimiter);
        }

        if (Array.isArray(path) && path.length === 0) return null; // Not using Array.reduce here due to a Chrome 80 bug
        // https://bugs.chromium.org/p/chromium/issues/detail?id=1049982

        var controlToFind = control;
        path.forEach(function (name) {
          if (controlToFind instanceof FormGroup) {
            controlToFind = controlToFind.controls.hasOwnProperty(name) ? controlToFind.controls[name] : null;
          } else if (controlToFind instanceof FormArray) {
            controlToFind = controlToFind.at(name) || null;
          } else {
            controlToFind = null;
          }
        });
        return controlToFind;
      }
      /**
       * Gets validators from either an options object or given validators.
       */


      function pickValidators(validatorOrOpts) {
        return (isOptionsObj(validatorOrOpts) ? validatorOrOpts.validators : validatorOrOpts) || null;
      }
      /**
       * Creates validator function by combining provided validators.
       */


      function coerceToValidator(validator) {
        return Array.isArray(validator) ? composeValidators(validator) : validator || null;
      }
      /**
       * Gets async validators from either an options object or given validators.
       */


      function pickAsyncValidators(asyncValidator, validatorOrOpts) {
        return (isOptionsObj(validatorOrOpts) ? validatorOrOpts.asyncValidators : asyncValidator) || null;
      }
      /**
       * Creates async validator function by combining provided async validators.
       */


      function coerceToAsyncValidator(asyncValidator) {
        return Array.isArray(asyncValidator) ? composeAsyncValidators(asyncValidator) : asyncValidator || null;
      }

      function isOptionsObj(validatorOrOpts) {
        return validatorOrOpts != null && !Array.isArray(validatorOrOpts) && typeof validatorOrOpts === 'object';
      }
      /**
       * This is the base class for `FormControl`, `FormGroup`, and `FormArray`.
       *
       * It provides some of the shared behavior that all controls and groups of controls have, like
       * running validators, calculating status, and resetting state. It also defines the properties
       * that are shared between all sub-classes, like `value`, `valid`, and `dirty`. It shouldn't be
       * instantiated directly.
       *
       * @see [Forms Guide](/guide/forms)
       * @see [Reactive Forms Guide](/guide/reactive-forms)
       * @see [Dynamic Forms Guide](/guide/dynamic-form)
       *
       * @publicApi
       */


      var AbstractControl = /*#__PURE__*/function () {
        /**
         * Initialize the AbstractControl instance.
         *
         * @param validators The function or array of functions that is used to determine the validity of
         *     this control synchronously.
         * @param asyncValidators The function or array of functions that is used to determine validity of
         *     this control asynchronously.
         */
        function AbstractControl(validators, asyncValidators) {
          _classCallCheck2(this, AbstractControl);

          /**
           * Indicates that a control has its own pending asynchronous validation in progress.
           *
           * @internal
           */
          this._hasOwnPendingAsyncValidator = false;
          /** @internal */

          this._onCollectionChange = function () {};

          this._parent = null;
          /**
           * A control is `pristine` if the user has not yet changed
           * the value in the UI.
           *
           * @returns True if the user has not yet changed the value in the UI; compare `dirty`.
           * Programmatic changes to a control's value do not mark it dirty.
           */

          this.pristine = true;
          /**
           * True if the control is marked as `touched`.
           *
           * A control is marked `touched` once the user has triggered
           * a `blur` event on it.
           */

          this.touched = false;
          /** @internal */

          this._onDisabledChange = [];
          this._rawValidators = validators;
          this._rawAsyncValidators = asyncValidators;
          this._composedValidatorFn = coerceToValidator(this._rawValidators);
          this._composedAsyncValidatorFn = coerceToAsyncValidator(this._rawAsyncValidators);
        }
        /**
         * The function that is used to determine the validity of this control synchronously.
         */


        _createClass2(AbstractControl, [{
          key: "validator",
          get: function get() {
            return this._composedValidatorFn;
          },
          set: function set(validatorFn) {
            this._rawValidators = this._composedValidatorFn = validatorFn;
          }
          /**
           * The function that is used to determine the validity of this control asynchronously.
           */

        }, {
          key: "asyncValidator",
          get: function get() {
            return this._composedAsyncValidatorFn;
          },
          set: function set(asyncValidatorFn) {
            this._rawAsyncValidators = this._composedAsyncValidatorFn = asyncValidatorFn;
          }
          /**
           * The parent control.
           */

        }, {
          key: "parent",
          get: function get() {
            return this._parent;
          }
          /**
           * A control is `valid` when its `status` is `VALID`.
           *
           * @see {@link AbstractControl.status}
           *
           * @returns True if the control has passed all of its validation tests,
           * false otherwise.
           */

        }, {
          key: "valid",
          get: function get() {
            return this.status === VALID;
          }
          /**
           * A control is `invalid` when its `status` is `INVALID`.
           *
           * @see {@link AbstractControl.status}
           *
           * @returns True if this control has failed one or more of its validation checks,
           * false otherwise.
           */

        }, {
          key: "invalid",
          get: function get() {
            return this.status === INVALID;
          }
          /**
           * A control is `pending` when its `status` is `PENDING`.
           *
           * @see {@link AbstractControl.status}
           *
           * @returns True if this control is in the process of conducting a validation check,
           * false otherwise.
           */

        }, {
          key: "pending",
          get: function get() {
            return this.status == PENDING;
          }
          /**
           * A control is `disabled` when its `status` is `DISABLED`.
           *
           * Disabled controls are exempt from validation checks and
           * are not included in the aggregate value of their ancestor
           * controls.
           *
           * @see {@link AbstractControl.status}
           *
           * @returns True if the control is disabled, false otherwise.
           */

        }, {
          key: "disabled",
          get: function get() {
            return this.status === DISABLED;
          }
          /**
           * A control is `enabled` as long as its `status` is not `DISABLED`.
           *
           * @returns True if the control has any status other than 'DISABLED',
           * false if the status is 'DISABLED'.
           *
           * @see {@link AbstractControl.status}
           *
           */

        }, {
          key: "enabled",
          get: function get() {
            return this.status !== DISABLED;
          }
          /**
           * A control is `dirty` if the user has changed the value
           * in the UI.
           *
           * @returns True if the user has changed the value of this control in the UI; compare `pristine`.
           * Programmatic changes to a control's value do not mark it dirty.
           */

        }, {
          key: "dirty",
          get: function get() {
            return !this.pristine;
          }
          /**
           * True if the control has not been marked as touched
           *
           * A control is `untouched` if the user has not yet triggered
           * a `blur` event on it.
           */

        }, {
          key: "untouched",
          get: function get() {
            return !this.touched;
          }
          /**
           * Reports the update strategy of the `AbstractControl` (meaning
           * the event on which the control updates itself).
           * Possible values: `'change'` | `'blur'` | `'submit'`
           * Default value: `'change'`
           */

        }, {
          key: "updateOn",
          get: function get() {
            return this._updateOn ? this._updateOn : this.parent ? this.parent.updateOn : 'change';
          }
          /**
           * Sets the synchronous validators that are active on this control.  Calling
           * this overwrites any existing sync validators.
           *
           * When you add or remove a validator at run time, you must call
           * `updateValueAndValidity()` for the new validation to take effect.
           *
           */

        }, {
          key: "setValidators",
          value: function setValidators(newValidator) {
            this._rawValidators = newValidator;
            this._composedValidatorFn = coerceToValidator(newValidator);
          }
          /**
           * Sets the async validators that are active on this control. Calling this
           * overwrites any existing async validators.
           *
           * When you add or remove a validator at run time, you must call
           * `updateValueAndValidity()` for the new validation to take effect.
           *
           */

        }, {
          key: "setAsyncValidators",
          value: function setAsyncValidators(newValidator) {
            this._rawAsyncValidators = newValidator;
            this._composedAsyncValidatorFn = coerceToAsyncValidator(newValidator);
          }
          /**
           * Empties out the sync validator list.
           *
           * When you add or remove a validator at run time, you must call
           * `updateValueAndValidity()` for the new validation to take effect.
           *
           */

        }, {
          key: "clearValidators",
          value: function clearValidators() {
            this.validator = null;
          }
          /**
           * Empties out the async validator list.
           *
           * When you add or remove a validator at run time, you must call
           * `updateValueAndValidity()` for the new validation to take effect.
           *
           */

        }, {
          key: "clearAsyncValidators",
          value: function clearAsyncValidators() {
            this.asyncValidator = null;
          }
          /**
           * Marks the control as `touched`. A control is touched by focus and
           * blur events that do not change the value.
           *
           * @see `markAsUntouched()`
           * @see `markAsDirty()`
           * @see `markAsPristine()`
           *
           * @param opts Configuration options that determine how the control propagates changes
           * and emits events after marking is applied.
           * * `onlySelf`: When true, mark only this control. When false or not supplied,
           * marks all direct ancestors. Default is false.
           */

        }, {
          key: "markAsTouched",
          value: function markAsTouched() {
            var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            this.touched = true;

            if (this._parent && !opts.onlySelf) {
              this._parent.markAsTouched(opts);
            }
          }
          /**
           * Marks the control and all its descendant controls as `touched`.
           * @see `markAsTouched()`
           */

        }, {
          key: "markAllAsTouched",
          value: function markAllAsTouched() {
            this.markAsTouched({
              onlySelf: true
            });

            this._forEachChild(function (control) {
              return control.markAllAsTouched();
            });
          }
          /**
           * Marks the control as `untouched`.
           *
           * If the control has any children, also marks all children as `untouched`
           * and recalculates the `touched` status of all parent controls.
           *
           * @see `markAsTouched()`
           * @see `markAsDirty()`
           * @see `markAsPristine()`
           *
           * @param opts Configuration options that determine how the control propagates changes
           * and emits events after the marking is applied.
           * * `onlySelf`: When true, mark only this control. When false or not supplied,
           * marks all direct ancestors. Default is false.
           */

        }, {
          key: "markAsUntouched",
          value: function markAsUntouched() {
            var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            this.touched = false;
            this._pendingTouched = false;

            this._forEachChild(function (control) {
              control.markAsUntouched({
                onlySelf: true
              });
            });

            if (this._parent && !opts.onlySelf) {
              this._parent._updateTouched(opts);
            }
          }
          /**
           * Marks the control as `dirty`. A control becomes dirty when
           * the control's value is changed through the UI; compare `markAsTouched`.
           *
           * @see `markAsTouched()`
           * @see `markAsUntouched()`
           * @see `markAsPristine()`
           *
           * @param opts Configuration options that determine how the control propagates changes
           * and emits events after marking is applied.
           * * `onlySelf`: When true, mark only this control. When false or not supplied,
           * marks all direct ancestors. Default is false.
           */

        }, {
          key: "markAsDirty",
          value: function markAsDirty() {
            var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            this.pristine = false;

            if (this._parent && !opts.onlySelf) {
              this._parent.markAsDirty(opts);
            }
          }
          /**
           * Marks the control as `pristine`.
           *
           * If the control has any children, marks all children as `pristine`,
           * and recalculates the `pristine` status of all parent
           * controls.
           *
           * @see `markAsTouched()`
           * @see `markAsUntouched()`
           * @see `markAsDirty()`
           *
           * @param opts Configuration options that determine how the control emits events after
           * marking is applied.
           * * `onlySelf`: When true, mark only this control. When false or not supplied,
           * marks all direct ancestors. Default is false.
           */

        }, {
          key: "markAsPristine",
          value: function markAsPristine() {
            var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            this.pristine = true;
            this._pendingDirty = false;

            this._forEachChild(function (control) {
              control.markAsPristine({
                onlySelf: true
              });
            });

            if (this._parent && !opts.onlySelf) {
              this._parent._updatePristine(opts);
            }
          }
          /**
           * Marks the control as `pending`.
           *
           * A control is pending while the control performs async validation.
           *
           * @see {@link AbstractControl.status}
           *
           * @param opts Configuration options that determine how the control propagates changes and
           * emits events after marking is applied.
           * * `onlySelf`: When true, mark only this control. When false or not supplied,
           * marks all direct ancestors. Default is false.
           * * `emitEvent`: When true or not supplied (the default), the `statusChanges`
           * observable emits an event with the latest status the control is marked pending.
           * When false, no events are emitted.
           *
           */

        }, {
          key: "markAsPending",
          value: function markAsPending() {
            var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            this.status = PENDING;

            if (opts.emitEvent !== false) {
              this.statusChanges.emit(this.status);
            }

            if (this._parent && !opts.onlySelf) {
              this._parent.markAsPending(opts);
            }
          }
          /**
           * Disables the control. This means the control is exempt from validation checks and
           * excluded from the aggregate value of any parent. Its status is `DISABLED`.
           *
           * If the control has children, all children are also disabled.
           *
           * @see {@link AbstractControl.status}
           *
           * @param opts Configuration options that determine how the control propagates
           * changes and emits events after the control is disabled.
           * * `onlySelf`: When true, mark only this control. When false or not supplied,
           * marks all direct ancestors. Default is false.
           * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
           * `valueChanges`
           * observables emit events with the latest status and value when the control is disabled.
           * When false, no events are emitted.
           */

        }, {
          key: "disable",
          value: function disable() {
            var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

            // If parent has been marked artificially dirty we don't want to re-calculate the
            // parent's dirtiness based on the children.
            var skipPristineCheck = this._parentMarkedDirty(opts.onlySelf);

            this.status = DISABLED;
            this.errors = null;

            this._forEachChild(function (control) {
              control.disable(Object.assign(Object.assign({}, opts), {
                onlySelf: true
              }));
            });

            this._updateValue();

            if (opts.emitEvent !== false) {
              this.valueChanges.emit(this.value);
              this.statusChanges.emit(this.status);
            }

            this._updateAncestors(Object.assign(Object.assign({}, opts), {
              skipPristineCheck: skipPristineCheck
            }));

            this._onDisabledChange.forEach(function (changeFn) {
              return changeFn(true);
            });
          }
          /**
           * Enables the control. This means the control is included in validation checks and
           * the aggregate value of its parent. Its status recalculates based on its value and
           * its validators.
           *
           * By default, if the control has children, all children are enabled.
           *
           * @see {@link AbstractControl.status}
           *
           * @param opts Configure options that control how the control propagates changes and
           * emits events when marked as untouched
           * * `onlySelf`: When true, mark only this control. When false or not supplied,
           * marks all direct ancestors. Default is false.
           * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
           * `valueChanges`
           * observables emit events with the latest status and value when the control is enabled.
           * When false, no events are emitted.
           */

        }, {
          key: "enable",
          value: function enable() {
            var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

            // If parent has been marked artificially dirty we don't want to re-calculate the
            // parent's dirtiness based on the children.
            var skipPristineCheck = this._parentMarkedDirty(opts.onlySelf);

            this.status = VALID;

            this._forEachChild(function (control) {
              control.enable(Object.assign(Object.assign({}, opts), {
                onlySelf: true
              }));
            });

            this.updateValueAndValidity({
              onlySelf: true,
              emitEvent: opts.emitEvent
            });

            this._updateAncestors(Object.assign(Object.assign({}, opts), {
              skipPristineCheck: skipPristineCheck
            }));

            this._onDisabledChange.forEach(function (changeFn) {
              return changeFn(false);
            });
          }
        }, {
          key: "_updateAncestors",
          value: function _updateAncestors(opts) {
            if (this._parent && !opts.onlySelf) {
              this._parent.updateValueAndValidity(opts);

              if (!opts.skipPristineCheck) {
                this._parent._updatePristine();
              }

              this._parent._updateTouched();
            }
          }
          /**
           * @param parent Sets the parent of the control
           */

        }, {
          key: "setParent",
          value: function setParent(parent) {
            this._parent = parent;
          }
          /**
           * Recalculates the value and validation status of the control.
           *
           * By default, it also updates the value and validity of its ancestors.
           *
           * @param opts Configuration options determine how the control propagates changes and emits events
           * after updates and validity checks are applied.
           * * `onlySelf`: When true, only update this control. When false or not supplied,
           * update all direct ancestors. Default is false.
           * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
           * `valueChanges`
           * observables emit events with the latest status and value when the control is updated.
           * When false, no events are emitted.
           */

        }, {
          key: "updateValueAndValidity",
          value: function updateValueAndValidity() {
            var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

            this._setInitialStatus();

            this._updateValue();

            if (this.enabled) {
              this._cancelExistingSubscription();

              this.errors = this._runValidator();
              this.status = this._calculateStatus();

              if (this.status === VALID || this.status === PENDING) {
                this._runAsyncValidator(opts.emitEvent);
              }
            }

            if (opts.emitEvent !== false) {
              this.valueChanges.emit(this.value);
              this.statusChanges.emit(this.status);
            }

            if (this._parent && !opts.onlySelf) {
              this._parent.updateValueAndValidity(opts);
            }
          }
          /** @internal */

        }, {
          key: "_updateTreeValidity",
          value: function _updateTreeValidity() {
            var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
              emitEvent: true
            };

            this._forEachChild(function (ctrl) {
              return ctrl._updateTreeValidity(opts);
            });

            this.updateValueAndValidity({
              onlySelf: true,
              emitEvent: opts.emitEvent
            });
          }
        }, {
          key: "_setInitialStatus",
          value: function _setInitialStatus() {
            this.status = this._allControlsDisabled() ? DISABLED : VALID;
          }
        }, {
          key: "_runValidator",
          value: function _runValidator() {
            return this.validator ? this.validator(this) : null;
          }
        }, {
          key: "_runAsyncValidator",
          value: function _runAsyncValidator(emitEvent) {
            var _this452 = this;

            if (this.asyncValidator) {
              this.status = PENDING;
              this._hasOwnPendingAsyncValidator = true;
              var obs = toObservable(this.asyncValidator(this));
              this._asyncValidationSubscription = obs.subscribe(function (errors) {
                _this452._hasOwnPendingAsyncValidator = false; // This will trigger the recalculation of the validation status, which depends on
                // the state of the asynchronous validation (whether it is in progress or not). So, it is
                // necessary that we have updated the `_hasOwnPendingAsyncValidator` boolean flag first.

                _this452.setErrors(errors, {
                  emitEvent: emitEvent
                });
              });
            }
          }
        }, {
          key: "_cancelExistingSubscription",
          value: function _cancelExistingSubscription() {
            if (this._asyncValidationSubscription) {
              this._asyncValidationSubscription.unsubscribe();

              this._hasOwnPendingAsyncValidator = false;
            }
          }
          /**
           * Sets errors on a form control when running validations manually, rather than automatically.
           *
           * Calling `setErrors` also updates the validity of the parent control.
           *
           * @usageNotes
           *
           * ### Manually set the errors for a control
           *
           * ```
           * const login = new FormControl('someLogin');
           * login.setErrors({
           *   notUnique: true
           * });
           *
           * expect(login.valid).toEqual(false);
           * expect(login.errors).toEqual({ notUnique: true });
           *
           * login.setValue('someOtherLogin');
           *
           * expect(login.valid).toEqual(true);
           * ```
           */

        }, {
          key: "setErrors",
          value: function setErrors(errors) {
            var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
            this.errors = errors;

            this._updateControlsErrors(opts.emitEvent !== false);
          }
          /**
           * Retrieves a child control given the control's name or path.
           *
           * @param path A dot-delimited string or array of string/number values that define the path to the
           * control.
           *
           * @usageNotes
           * ### Retrieve a nested control
           *
           * For example, to get a `name` control nested within a `person` sub-group:
           *
           * * `this.form.get('person.name');`
           *
           * -OR-
           *
           * * `this.form.get(['person', 'name']);`
           */

        }, {
          key: "get",
          value: function get(path) {
            return _find(this, path, '.');
          }
          /**
           * @description
           * Reports error data for the control with the given path.
           *
           * @param errorCode The code of the error to check
           * @param path A list of control names that designates how to move from the current control
           * to the control that should be queried for errors.
           *
           * @usageNotes
           * For example, for the following `FormGroup`:
           *
           * ```
           * form = new FormGroup({
           *   address: new FormGroup({ street: new FormControl() })
           * });
           * ```
           *
           * The path to the 'street' control from the root form would be 'address' -> 'street'.
           *
           * It can be provided to this method in one of two formats:
           *
           * 1. An array of string control names, e.g. `['address', 'street']`
           * 1. A period-delimited list of control names in one string, e.g. `'address.street'`
           *
           * @returns error data for that particular error. If the control or error is not present,
           * null is returned.
           */

        }, {
          key: "getError",
          value: function getError(errorCode, path) {
            var control = path ? this.get(path) : this;
            return control && control.errors ? control.errors[errorCode] : null;
          }
          /**
           * @description
           * Reports whether the control with the given path has the error specified.
           *
           * @param errorCode The code of the error to check
           * @param path A list of control names that designates how to move from the current control
           * to the control that should be queried for errors.
           *
           * @usageNotes
           * For example, for the following `FormGroup`:
           *
           * ```
           * form = new FormGroup({
           *   address: new FormGroup({ street: new FormControl() })
           * });
           * ```
           *
           * The path to the 'street' control from the root form would be 'address' -> 'street'.
           *
           * It can be provided to this method in one of two formats:
           *
           * 1. An array of string control names, e.g. `['address', 'street']`
           * 1. A period-delimited list of control names in one string, e.g. `'address.street'`
           *
           * If no path is given, this method checks for the error on the current control.
           *
           * @returns whether the given error is present in the control at the given path.
           *
           * If the control is not present, false is returned.
           */

        }, {
          key: "hasError",
          value: function hasError(errorCode, path) {
            return !!this.getError(errorCode, path);
          }
          /**
           * Retrieves the top-level ancestor of this control.
           */

        }, {
          key: "root",
          get: function get() {
            var x = this;

            while (x._parent) {
              x = x._parent;
            }

            return x;
          }
          /** @internal */

        }, {
          key: "_updateControlsErrors",
          value: function _updateControlsErrors(emitEvent) {
            this.status = this._calculateStatus();

            if (emitEvent) {
              this.statusChanges.emit(this.status);
            }

            if (this._parent) {
              this._parent._updateControlsErrors(emitEvent);
            }
          }
          /** @internal */

        }, {
          key: "_initObservables",
          value: function _initObservables() {
            this.valueChanges = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
            this.statusChanges = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          }
        }, {
          key: "_calculateStatus",
          value: function _calculateStatus() {
            if (this._allControlsDisabled()) return DISABLED;
            if (this.errors) return INVALID;
            if (this._hasOwnPendingAsyncValidator || this._anyControlsHaveStatus(PENDING)) return PENDING;
            if (this._anyControlsHaveStatus(INVALID)) return INVALID;
            return VALID;
          }
          /** @internal */

        }, {
          key: "_anyControlsHaveStatus",
          value: function _anyControlsHaveStatus(status) {
            return this._anyControls(function (control) {
              return control.status === status;
            });
          }
          /** @internal */

        }, {
          key: "_anyControlsDirty",
          value: function _anyControlsDirty() {
            return this._anyControls(function (control) {
              return control.dirty;
            });
          }
          /** @internal */

        }, {
          key: "_anyControlsTouched",
          value: function _anyControlsTouched() {
            return this._anyControls(function (control) {
              return control.touched;
            });
          }
          /** @internal */

        }, {
          key: "_updatePristine",
          value: function _updatePristine() {
            var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            this.pristine = !this._anyControlsDirty();

            if (this._parent && !opts.onlySelf) {
              this._parent._updatePristine(opts);
            }
          }
          /** @internal */

        }, {
          key: "_updateTouched",
          value: function _updateTouched() {
            var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            this.touched = this._anyControlsTouched();

            if (this._parent && !opts.onlySelf) {
              this._parent._updateTouched(opts);
            }
          }
          /** @internal */

        }, {
          key: "_isBoxedValue",
          value: function _isBoxedValue(formState) {
            return typeof formState === 'object' && formState !== null && Object.keys(formState).length === 2 && 'value' in formState && 'disabled' in formState;
          }
          /** @internal */

        }, {
          key: "_registerOnCollectionChange",
          value: function _registerOnCollectionChange(fn) {
            this._onCollectionChange = fn;
          }
          /** @internal */

        }, {
          key: "_setUpdateStrategy",
          value: function _setUpdateStrategy(opts) {
            if (isOptionsObj(opts) && opts.updateOn != null) {
              this._updateOn = opts.updateOn;
            }
          }
          /**
           * Check to see if parent has been marked artificially dirty.
           *
           * @internal
           */

        }, {
          key: "_parentMarkedDirty",
          value: function _parentMarkedDirty(onlySelf) {
            var parentDirty = this._parent && this._parent.dirty;
            return !onlySelf && !!parentDirty && !this._parent._anyControlsDirty();
          }
        }]);

        return AbstractControl;
      }();
      /**
       * Tracks the value and validation status of an individual form control.
       *
       * This is one of the three fundamental building blocks of Angular forms, along with
       * `FormGroup` and `FormArray`. It extends the `AbstractControl` class that
       * implements most of the base functionality for accessing the value, validation status,
       * user interactions and events. See [usage examples below](#usage-notes).
       *
       * @see `AbstractControl`
       * @see [Reactive Forms Guide](guide/reactive-forms)
       * @see [Usage Notes](#usage-notes)
       *
       * @usageNotes
       *
       * ### Initializing Form Controls
       *
       * Instantiate a `FormControl`, with an initial value.
       *
       * ```ts
       * const control = new FormControl('some value');
       * console.log(control.value);     // 'some value'
       *```
       *
       * The following example initializes the control with a form state object. The `value`
       * and `disabled` keys are required in this case.
       *
       * ```ts
       * const control = new FormControl({ value: 'n/a', disabled: true });
       * console.log(control.value);     // 'n/a'
       * console.log(control.status);    // 'DISABLED'
       * ```
       *
       * The following example initializes the control with a sync validator.
       *
       * ```ts
       * const control = new FormControl('', Validators.required);
       * console.log(control.value);      // ''
       * console.log(control.status);     // 'INVALID'
       * ```
       *
       * The following example initializes the control using an options object.
       *
       * ```ts
       * const control = new FormControl('', {
       *    validators: Validators.required,
       *    asyncValidators: myAsyncValidator
       * });
       * ```
       *
       * ### Configure the control to update on a blur event
       *
       * Set the `updateOn` option to `'blur'` to update on the blur `event`.
       *
       * ```ts
       * const control = new FormControl('', { updateOn: 'blur' });
       * ```
       *
       * ### Configure the control to update on a submit event
       *
       * Set the `updateOn` option to `'submit'` to update on a submit `event`.
       *
       * ```ts
       * const control = new FormControl('', { updateOn: 'submit' });
       * ```
       *
       * ### Reset the control back to an initial value
       *
       * You reset to a specific form state by passing through a standalone
       * value or a form state object that contains both a value and a disabled state
       * (these are the only two properties that cannot be calculated).
       *
       * ```ts
       * const control = new FormControl('Nancy');
       *
       * console.log(control.value); // 'Nancy'
       *
       * control.reset('Drew');
       *
       * console.log(control.value); // 'Drew'
       * ```
       *
       * ### Reset the control back to an initial value and disabled
       *
       * ```
       * const control = new FormControl('Nancy');
       *
       * console.log(control.value); // 'Nancy'
       * console.log(control.status); // 'VALID'
       *
       * control.reset({ value: 'Drew', disabled: true });
       *
       * console.log(control.value); // 'Drew'
       * console.log(control.status); // 'DISABLED'
       * ```
       *
       * @publicApi
       */


      var FormControl = /*#__PURE__*/function (_AbstractControl) {
        _inherits2(FormControl, _AbstractControl);

        var _super180 = _createSuper(FormControl);

        /**
         * Creates a new `FormControl` instance.
         *
         * @param formState Initializes the control with an initial value,
         * or an object that defines the initial value and disabled state.
         *
         * @param validatorOrOpts A synchronous validator function, or an array of
         * such functions, or an `AbstractControlOptions` object that contains validation functions
         * and a validation trigger.
         *
         * @param asyncValidator A single async validator or array of async validator functions
         *
         */
        function FormControl() {
          var _this453;

          var formState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
          var validatorOrOpts = arguments.length > 1 ? arguments[1] : undefined;
          var asyncValidator = arguments.length > 2 ? arguments[2] : undefined;

          _classCallCheck2(this, FormControl);

          _this453 = _super180.call(this, pickValidators(validatorOrOpts), pickAsyncValidators(asyncValidator, validatorOrOpts));
          /** @internal */

          _this453._onChange = [];

          _this453._applyFormState(formState);

          _this453._setUpdateStrategy(validatorOrOpts);

          _this453._initObservables();

          _this453.updateValueAndValidity({
            onlySelf: true,
            // If `asyncValidator` is present, it will trigger control status change from `PENDING` to
            // `VALID` or `INVALID`.
            // The status should be broadcasted via the `statusChanges` observable, so we set `emitEvent`
            // to `true` to allow that during the control creation process.
            emitEvent: !!asyncValidator
          });

          return _this453;
        }
        /**
         * Sets a new value for the form control.
         *
         * @param value The new value for the control.
         * @param options Configuration options that determine how the control propagates changes
         * and emits events when the value changes.
         * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity
         * updateValueAndValidity} method.
         *
         * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is
         * false.
         * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
         * `valueChanges`
         * observables emit events with the latest status and value when the control value is updated.
         * When false, no events are emitted.
         * * `emitModelToViewChange`: When true or not supplied  (the default), each change triggers an
         * `onChange` event to
         * update the view.
         * * `emitViewToModelChange`: When true or not supplied (the default), each change triggers an
         * `ngModelChange`
         * event to update the model.
         *
         */


        _createClass2(FormControl, [{
          key: "setValue",
          value: function setValue(value) {
            var _this454 = this;

            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
            this.value = this._pendingValue = value;

            if (this._onChange.length && options.emitModelToViewChange !== false) {
              this._onChange.forEach(function (changeFn) {
                return changeFn(_this454.value, options.emitViewToModelChange !== false);
              });
            }

            this.updateValueAndValidity(options);
          }
          /**
           * Patches the value of a control.
           *
           * This function is functionally the same as {@link FormControl#setValue setValue} at this level.
           * It exists for symmetry with {@link FormGroup#patchValue patchValue} on `FormGroups` and
           * `FormArrays`, where it does behave differently.
           *
           * @see `setValue` for options
           */

        }, {
          key: "patchValue",
          value: function patchValue(value) {
            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
            this.setValue(value, options);
          }
          /**
           * Resets the form control, marking it `pristine` and `untouched`, and setting
           * the value to null.
           *
           * @param formState Resets the control with an initial value,
           * or an object that defines the initial value and disabled state.
           *
           * @param options Configuration options that determine how the control propagates changes
           * and emits events after the value changes.
           *
           * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is
           * false.
           * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
           * `valueChanges`
           * observables emit events with the latest status and value when the control is reset.
           * When false, no events are emitted.
           *
           */

        }, {
          key: "reset",
          value: function reset() {
            var formState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};

            this._applyFormState(formState);

            this.markAsPristine(options);
            this.markAsUntouched(options);
            this.setValue(this.value, options);
            this._pendingChange = false;
          }
          /**
           * @internal
           */

        }, {
          key: "_updateValue",
          value: function _updateValue() {}
          /**
           * @internal
           */

        }, {
          key: "_anyControls",
          value: function _anyControls(condition) {
            return false;
          }
          /**
           * @internal
           */

        }, {
          key: "_allControlsDisabled",
          value: function _allControlsDisabled() {
            return this.disabled;
          }
          /**
           * Register a listener for change events.
           *
           * @param fn The method that is called when the value changes
           */

        }, {
          key: "registerOnChange",
          value: function registerOnChange(fn) {
            this._onChange.push(fn);
          }
          /**
           * Internal function to unregister a change events listener.
           * @internal
           */

        }, {
          key: "_unregisterOnChange",
          value: function _unregisterOnChange(fn) {
            removeListItem(this._onChange, fn);
          }
          /**
           * Register a listener for disabled events.
           *
           * @param fn The method that is called when the disabled status changes.
           */

        }, {
          key: "registerOnDisabledChange",
          value: function registerOnDisabledChange(fn) {
            this._onDisabledChange.push(fn);
          }
          /**
           * Internal function to unregister a disabled event listener.
           * @internal
           */

        }, {
          key: "_unregisterOnDisabledChange",
          value: function _unregisterOnDisabledChange(fn) {
            removeListItem(this._onDisabledChange, fn);
          }
          /**
           * @internal
           */

        }, {
          key: "_forEachChild",
          value: function _forEachChild(cb) {}
          /** @internal */

        }, {
          key: "_syncPendingControls",
          value: function _syncPendingControls() {
            if (this.updateOn === 'submit') {
              if (this._pendingDirty) this.markAsDirty();
              if (this._pendingTouched) this.markAsTouched();

              if (this._pendingChange) {
                this.setValue(this._pendingValue, {
                  onlySelf: true,
                  emitModelToViewChange: false
                });
                return true;
              }
            }

            return false;
          }
        }, {
          key: "_applyFormState",
          value: function _applyFormState(formState) {
            if (this._isBoxedValue(formState)) {
              this.value = this._pendingValue = formState.value;
              formState.disabled ? this.disable({
                onlySelf: true,
                emitEvent: false
              }) : this.enable({
                onlySelf: true,
                emitEvent: false
              });
            } else {
              this.value = this._pendingValue = formState;
            }
          }
        }]);

        return FormControl;
      }(AbstractControl);
      /**
       * Tracks the value and validity state of a group of `FormControl` instances.
       *
       * A `FormGroup` aggregates the values of each child `FormControl` into one object,
       * with each control name as the key.  It calculates its status by reducing the status values
       * of its children. For example, if one of the controls in a group is invalid, the entire
       * group becomes invalid.
       *
       * `FormGroup` is one of the three fundamental building blocks used to define forms in Angular,
       * along with `FormControl` and `FormArray`.
       *
       * When instantiating a `FormGroup`, pass in a collection of child controls as the first
       * argument. The key for each child registers the name for the control.
       *
       * @usageNotes
       *
       * ### Create a form group with 2 controls
       *
       * ```
       * const form = new FormGroup({
       *   first: new FormControl('Nancy', Validators.minLength(2)),
       *   last: new FormControl('Drew'),
       * });
       *
       * console.log(form.value);   // {first: 'Nancy', last; 'Drew'}
       * console.log(form.status);  // 'VALID'
       * ```
       *
       * ### Create a form group with a group-level validator
       *
       * You include group-level validators as the second arg, or group-level async
       * validators as the third arg. These come in handy when you want to perform validation
       * that considers the value of more than one child control.
       *
       * ```
       * const form = new FormGroup({
       *   password: new FormControl('', Validators.minLength(2)),
       *   passwordConfirm: new FormControl('', Validators.minLength(2)),
       * }, passwordMatchValidator);
       *
       *
       * function passwordMatchValidator(g: FormGroup) {
       *    return g.get('password').value === g.get('passwordConfirm').value
       *       ? null : {'mismatch': true};
       * }
       * ```
       *
       * Like `FormControl` instances, you choose to pass in
       * validators and async validators as part of an options object.
       *
       * ```
       * const form = new FormGroup({
       *   password: new FormControl('')
       *   passwordConfirm: new FormControl('')
       * }, { validators: passwordMatchValidator, asyncValidators: otherValidator });
       * ```
       *
       * ### Set the updateOn property for all controls in a form group
       *
       * The options object is used to set a default value for each child
       * control's `updateOn` property. If you set `updateOn` to `'blur'` at the
       * group level, all child controls default to 'blur', unless the child
       * has explicitly specified a different `updateOn` value.
       *
       * ```ts
       * const c = new FormGroup({
       *   one: new FormControl()
       * }, { updateOn: 'blur' });
       * ```
       *
       * @publicApi
       */


      var FormGroup = /*#__PURE__*/function (_AbstractControl2) {
        _inherits2(FormGroup, _AbstractControl2);

        var _super181 = _createSuper(FormGroup);

        /**
         * Creates a new `FormGroup` instance.
         *
         * @param controls A collection of child controls. The key for each child is the name
         * under which it is registered.
         *
         * @param validatorOrOpts A synchronous validator function, or an array of
         * such functions, or an `AbstractControlOptions` object that contains validation functions
         * and a validation trigger.
         *
         * @param asyncValidator A single async validator or array of async validator functions
         *
         */
        function FormGroup(controls, validatorOrOpts, asyncValidator) {
          var _this455;

          _classCallCheck2(this, FormGroup);

          _this455 = _super181.call(this, pickValidators(validatorOrOpts), pickAsyncValidators(asyncValidator, validatorOrOpts));
          _this455.controls = controls;

          _this455._initObservables();

          _this455._setUpdateStrategy(validatorOrOpts);

          _this455._setUpControls();

          _this455.updateValueAndValidity({
            onlySelf: true,
            // If `asyncValidator` is present, it will trigger control status change from `PENDING` to
            // `VALID` or `INVALID`. The status should be broadcasted via the `statusChanges` observable,
            // so we set `emitEvent` to `true` to allow that during the control creation process.
            emitEvent: !!asyncValidator
          });

          return _this455;
        }
        /**
         * Registers a control with the group's list of controls.
         *
         * This method does not update the value or validity of the control.
         * Use {@link FormGroup#addControl addControl} instead.
         *
         * @param name The control name to register in the collection
         * @param control Provides the control for the given name
         */


        _createClass2(FormGroup, [{
          key: "registerControl",
          value: function registerControl(name, control) {
            if (this.controls[name]) return this.controls[name];
            this.controls[name] = control;
            control.setParent(this);

            control._registerOnCollectionChange(this._onCollectionChange);

            return control;
          }
          /**
           * Add a control to this group.
           *
           * This method also updates the value and validity of the control.
           *
           * @param name The control name to add to the collection
           * @param control Provides the control for the given name
           * @param options Specifies whether this FormGroup instance should emit events after a new
           *     control is added.
           * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
           * `valueChanges` observables emit events with the latest status and value when the control is
           * added. When false, no events are emitted.
           */

        }, {
          key: "addControl",
          value: function addControl(name, control) {
            var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
            this.registerControl(name, control);
            this.updateValueAndValidity({
              emitEvent: options.emitEvent
            });

            this._onCollectionChange();
          }
          /**
           * Remove a control from this group.
           *
           * This method also updates the value and validity of the control.
           *
           * @param name The control name to remove from the collection
           * @param options Specifies whether this FormGroup instance should emit events after a
           *     control is removed.
           * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
           * `valueChanges` observables emit events with the latest status and value when the control is
           * removed. When false, no events are emitted.
           */

        }, {
          key: "removeControl",
          value: function removeControl(name) {
            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
            if (this.controls[name]) this.controls[name]._registerOnCollectionChange(function () {});
            delete this.controls[name];
            this.updateValueAndValidity({
              emitEvent: options.emitEvent
            });

            this._onCollectionChange();
          }
          /**
           * Replace an existing control.
           *
           * @param name The control name to replace in the collection
           * @param control Provides the control for the given name
           * @param options Specifies whether this FormGroup instance should emit events after an
           *     existing control is replaced.
           * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
           * `valueChanges` observables emit events with the latest status and value when the control is
           * replaced with a new one. When false, no events are emitted.
           */

        }, {
          key: "setControl",
          value: function setControl(name, control) {
            var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
            if (this.controls[name]) this.controls[name]._registerOnCollectionChange(function () {});
            delete this.controls[name];
            if (control) this.registerControl(name, control);
            this.updateValueAndValidity({
              emitEvent: options.emitEvent
            });

            this._onCollectionChange();
          }
          /**
           * Check whether there is an enabled control with the given name in the group.
           *
           * Reports false for disabled controls. If you'd like to check for existence in the group
           * only, use {@link AbstractControl#get get} instead.
           *
           * @param controlName The control name to check for existence in the collection
           *
           * @returns false for disabled controls, true otherwise.
           */

        }, {
          key: "contains",
          value: function contains(controlName) {
            return this.controls.hasOwnProperty(controlName) && this.controls[controlName].enabled;
          }
          /**
           * Sets the value of the `FormGroup`. It accepts an object that matches
           * the structure of the group, with control names as keys.
           *
           * @usageNotes
           * ### Set the complete value for the form group
           *
           * ```
           * const form = new FormGroup({
           *   first: new FormControl(),
           *   last: new FormControl()
           * });
           *
           * console.log(form.value);   // {first: null, last: null}
           *
           * form.setValue({first: 'Nancy', last: 'Drew'});
           * console.log(form.value);   // {first: 'Nancy', last: 'Drew'}
           * ```
           *
           * @throws When strict checks fail, such as setting the value of a control
           * that doesn't exist or if you exclude a value of a control that does exist.
           *
           * @param value The new value for the control that matches the structure of the group.
           * @param options Configuration options that determine how the control propagates changes
           * and emits events after the value changes.
           * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity
           * updateValueAndValidity} method.
           *
           * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is
           * false.
           * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
           * `valueChanges`
           * observables emit events with the latest status and value when the control value is updated.
           * When false, no events are emitted.
           */

        }, {
          key: "setValue",
          value: function setValue(value) {
            var _this456 = this;

            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};

            this._checkAllValuesPresent(value);

            Object.keys(value).forEach(function (name) {
              _this456._throwIfControlMissing(name);

              _this456.controls[name].setValue(value[name], {
                onlySelf: true,
                emitEvent: options.emitEvent
              });
            });
            this.updateValueAndValidity(options);
          }
          /**
           * Patches the value of the `FormGroup`. It accepts an object with control
           * names as keys, and does its best to match the values to the correct controls
           * in the group.
           *
           * It accepts both super-sets and sub-sets of the group without throwing an error.
           *
           * @usageNotes
           * ### Patch the value for a form group
           *
           * ```
           * const form = new FormGroup({
           *    first: new FormControl(),
           *    last: new FormControl()
           * });
           * console.log(form.value);   // {first: null, last: null}
           *
           * form.patchValue({first: 'Nancy'});
           * console.log(form.value);   // {first: 'Nancy', last: null}
           * ```
           *
           * @param value The object that matches the structure of the group.
           * @param options Configuration options that determine how the control propagates changes and
           * emits events after the value is patched.
           * * `onlySelf`: When true, each change only affects this control and not its parent. Default is
           * true.
           * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
           * `valueChanges` observables emit events with the latest status and value when the control value
           * is updated. When false, no events are emitted. The configuration options are passed to
           * the {@link AbstractControl#updateValueAndValidity updateValueAndValidity} method.
           */

        }, {
          key: "patchValue",
          value: function patchValue(value) {
            var _this457 = this;

            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
            // Even though the `value` argument type doesn't allow `null` and `undefined` values, the
            // `patchValue` can be called recursively and inner data structures might have these values, so
            // we just ignore such cases when a field containing FormGroup instance receives `null` or
            // `undefined` as a value.
            if (value == null
            /* both `null` and `undefined` */
            ) return;
            Object.keys(value).forEach(function (name) {
              if (_this457.controls[name]) {
                _this457.controls[name].patchValue(value[name], {
                  onlySelf: true,
                  emitEvent: options.emitEvent
                });
              }
            });
            this.updateValueAndValidity(options);
          }
          /**
           * Resets the `FormGroup`, marks all descendants `pristine` and `untouched` and sets
           * the value of all descendants to null.
           *
           * You reset to a specific form state by passing in a map of states
           * that matches the structure of your form, with control names as keys. The state
           * is a standalone value or a form state object with both a value and a disabled
           * status.
           *
           * @param value Resets the control with an initial value,
           * or an object that defines the initial value and disabled state.
           *
           * @param options Configuration options that determine how the control propagates changes
           * and emits events when the group is reset.
           * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is
           * false.
           * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
           * `valueChanges`
           * observables emit events with the latest status and value when the control is reset.
           * When false, no events are emitted.
           * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity
           * updateValueAndValidity} method.
           *
           * @usageNotes
           *
           * ### Reset the form group values
           *
           * ```ts
           * const form = new FormGroup({
           *   first: new FormControl('first name'),
           *   last: new FormControl('last name')
           * });
           *
           * console.log(form.value);  // {first: 'first name', last: 'last name'}
           *
           * form.reset({ first: 'name', last: 'last name' });
           *
           * console.log(form.value);  // {first: 'name', last: 'last name'}
           * ```
           *
           * ### Reset the form group values and disabled status
           *
           * ```
           * const form = new FormGroup({
           *   first: new FormControl('first name'),
           *   last: new FormControl('last name')
           * });
           *
           * form.reset({
           *   first: {value: 'name', disabled: true},
           *   last: 'last'
           * });
           *
           * console.log(form.value);  // {last: 'last'}
           * console.log(form.get('first').status);  // 'DISABLED'
           * ```
           */

        }, {
          key: "reset",
          value: function reset() {
            var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};

            this._forEachChild(function (control, name) {
              control.reset(value[name], {
                onlySelf: true,
                emitEvent: options.emitEvent
              });
            });

            this._updatePristine(options);

            this._updateTouched(options);

            this.updateValueAndValidity(options);
          }
          /**
           * The aggregate value of the `FormGroup`, including any disabled controls.
           *
           * Retrieves all values regardless of disabled status.
           * The `value` property is the best way to get the value of the group, because
           * it excludes disabled controls in the `FormGroup`.
           */

        }, {
          key: "getRawValue",
          value: function getRawValue() {
            return this._reduceChildren({}, function (acc, control, name) {
              acc[name] = control instanceof FormControl ? control.value : control.getRawValue();
              return acc;
            });
          }
          /** @internal */

        }, {
          key: "_syncPendingControls",
          value: function _syncPendingControls() {
            var subtreeUpdated = this._reduceChildren(false, function (updated, child) {
              return child._syncPendingControls() ? true : updated;
            });

            if (subtreeUpdated) this.updateValueAndValidity({
              onlySelf: true
            });
            return subtreeUpdated;
          }
          /** @internal */

        }, {
          key: "_throwIfControlMissing",
          value: function _throwIfControlMissing(name) {
            if (!Object.keys(this.controls).length) {
              throw new Error("\n        There are no form controls registered with this group yet. If you're using ngModel,\n        you may want to check next tick (e.g. use setTimeout).\n      ");
            }

            if (!this.controls[name]) {
              throw new Error("Cannot find form control with name: ".concat(name, "."));
            }
          }
          /** @internal */

        }, {
          key: "_forEachChild",
          value: function _forEachChild(cb) {
            var _this458 = this;

            Object.keys(this.controls).forEach(function (key) {
              // The list of controls can change (for ex. controls might be removed) while the loop
              // is running (as a result of invoking Forms API in `valueChanges` subscription), so we
              // have to null check before invoking the callback.
              var control = _this458.controls[key];
              control && cb(control, key);
            });
          }
          /** @internal */

        }, {
          key: "_setUpControls",
          value: function _setUpControls() {
            var _this459 = this;

            this._forEachChild(function (control) {
              control.setParent(_this459);

              control._registerOnCollectionChange(_this459._onCollectionChange);
            });
          }
          /** @internal */

        }, {
          key: "_updateValue",
          value: function _updateValue() {
            this.value = this._reduceValue();
          }
          /** @internal */

        }, {
          key: "_anyControls",
          value: function _anyControls(condition) {
            for (var _i18 = 0, _Object$keys5 = Object.keys(this.controls); _i18 < _Object$keys5.length; _i18++) {
              var controlName = _Object$keys5[_i18];
              var control = this.controls[controlName];

              if (this.contains(controlName) && condition(control)) {
                return true;
              }
            }

            return false;
          }
          /** @internal */

        }, {
          key: "_reduceValue",
          value: function _reduceValue() {
            var _this460 = this;

            return this._reduceChildren({}, function (acc, control, name) {
              if (control.enabled || _this460.disabled) {
                acc[name] = control.value;
              }

              return acc;
            });
          }
          /** @internal */

        }, {
          key: "_reduceChildren",
          value: function _reduceChildren(initValue, fn) {
            var res = initValue;

            this._forEachChild(function (control, name) {
              res = fn(res, control, name);
            });

            return res;
          }
          /** @internal */

        }, {
          key: "_allControlsDisabled",
          value: function _allControlsDisabled() {
            for (var _i19 = 0, _Object$keys6 = Object.keys(this.controls); _i19 < _Object$keys6.length; _i19++) {
              var controlName = _Object$keys6[_i19];

              if (this.controls[controlName].enabled) {
                return false;
              }
            }

            return Object.keys(this.controls).length > 0 || this.disabled;
          }
          /** @internal */

        }, {
          key: "_checkAllValuesPresent",
          value: function _checkAllValuesPresent(value) {
            this._forEachChild(function (control, name) {
              if (value[name] === undefined) {
                throw new Error("Must supply a value for form control with name: '".concat(name, "'."));
              }
            });
          }
        }]);

        return FormGroup;
      }(AbstractControl);
      /**
       * Tracks the value and validity state of an array of `FormControl`,
       * `FormGroup` or `FormArray` instances.
       *
       * A `FormArray` aggregates the values of each child `FormControl` into an array.
       * It calculates its status by reducing the status values of its children. For example, if one of
       * the controls in a `FormArray` is invalid, the entire array becomes invalid.
       *
       * `FormArray` is one of the three fundamental building blocks used to define forms in Angular,
       * along with `FormControl` and `FormGroup`.
       *
       * @usageNotes
       *
       * ### Create an array of form controls
       *
       * ```
       * const arr = new FormArray([
       *   new FormControl('Nancy', Validators.minLength(2)),
       *   new FormControl('Drew'),
       * ]);
       *
       * console.log(arr.value);   // ['Nancy', 'Drew']
       * console.log(arr.status);  // 'VALID'
       * ```
       *
       * ### Create a form array with array-level validators
       *
       * You include array-level validators and async validators. These come in handy
       * when you want to perform validation that considers the value of more than one child
       * control.
       *
       * The two types of validators are passed in separately as the second and third arg
       * respectively, or together as part of an options object.
       *
       * ```
       * const arr = new FormArray([
       *   new FormControl('Nancy'),
       *   new FormControl('Drew')
       * ], {validators: myValidator, asyncValidators: myAsyncValidator});
       * ```
       *
       * ### Set the updateOn property for all controls in a form array
       *
       * The options object is used to set a default value for each child
       * control's `updateOn` property. If you set `updateOn` to `'blur'` at the
       * array level, all child controls default to 'blur', unless the child
       * has explicitly specified a different `updateOn` value.
       *
       * ```ts
       * const arr = new FormArray([
       *    new FormControl()
       * ], {updateOn: 'blur'});
       * ```
       *
       * ### Adding or removing controls from a form array
       *
       * To change the controls in the array, use the `push`, `insert`, `removeAt` or `clear` methods
       * in `FormArray` itself. These methods ensure the controls are properly tracked in the
       * form's hierarchy. Do not modify the array of `AbstractControl`s used to instantiate
       * the `FormArray` directly, as that result in strange and unexpected behavior such
       * as broken change detection.
       *
       * @publicApi
       */


      var FormArray = /*#__PURE__*/function (_AbstractControl3) {
        _inherits2(FormArray, _AbstractControl3);

        var _super182 = _createSuper(FormArray);

        /**
         * Creates a new `FormArray` instance.
         *
         * @param controls An array of child controls. Each child control is given an index
         * where it is registered.
         *
         * @param validatorOrOpts A synchronous validator function, or an array of
         * such functions, or an `AbstractControlOptions` object that contains validation functions
         * and a validation trigger.
         *
         * @param asyncValidator A single async validator or array of async validator functions
         *
         */
        function FormArray(controls, validatorOrOpts, asyncValidator) {
          var _this461;

          _classCallCheck2(this, FormArray);

          _this461 = _super182.call(this, pickValidators(validatorOrOpts), pickAsyncValidators(asyncValidator, validatorOrOpts));
          _this461.controls = controls;

          _this461._initObservables();

          _this461._setUpdateStrategy(validatorOrOpts);

          _this461._setUpControls();

          _this461.updateValueAndValidity({
            onlySelf: true,
            // If `asyncValidator` is present, it will trigger control status change from `PENDING` to
            // `VALID` or `INVALID`.
            // The status should be broadcasted via the `statusChanges` observable, so we set `emitEvent`
            // to `true` to allow that during the control creation process.
            emitEvent: !!asyncValidator
          });

          return _this461;
        }
        /**
         * Get the `AbstractControl` at the given `index` in the array.
         *
         * @param index Index in the array to retrieve the control
         */


        _createClass2(FormArray, [{
          key: "at",
          value: function at(index) {
            return this.controls[index];
          }
          /**
           * Insert a new `AbstractControl` at the end of the array.
           *
           * @param control Form control to be inserted
           * @param options Specifies whether this FormArray instance should emit events after a new
           *     control is added.
           * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
           * `valueChanges` observables emit events with the latest status and value when the control is
           * inserted. When false, no events are emitted.
           */

        }, {
          key: "push",
          value: function push(control) {
            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
            this.controls.push(control);

            this._registerControl(control);

            this.updateValueAndValidity({
              emitEvent: options.emitEvent
            });

            this._onCollectionChange();
          }
          /**
           * Insert a new `AbstractControl` at the given `index` in the array.
           *
           * @param index Index in the array to insert the control
           * @param control Form control to be inserted
           * @param options Specifies whether this FormArray instance should emit events after a new
           *     control is inserted.
           * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
           * `valueChanges` observables emit events with the latest status and value when the control is
           * inserted. When false, no events are emitted.
           */

        }, {
          key: "insert",
          value: function insert(index, control) {
            var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
            this.controls.splice(index, 0, control);

            this._registerControl(control);

            this.updateValueAndValidity({
              emitEvent: options.emitEvent
            });
          }
          /**
           * Remove the control at the given `index` in the array.
           *
           * @param index Index in the array to remove the control
           * @param options Specifies whether this FormArray instance should emit events after a
           *     control is removed.
           * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
           * `valueChanges` observables emit events with the latest status and value when the control is
           * removed. When false, no events are emitted.
           */

        }, {
          key: "removeAt",
          value: function removeAt(index) {
            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
            if (this.controls[index]) this.controls[index]._registerOnCollectionChange(function () {});
            this.controls.splice(index, 1);
            this.updateValueAndValidity({
              emitEvent: options.emitEvent
            });
          }
          /**
           * Replace an existing control.
           *
           * @param index Index in the array to replace the control
           * @param control The `AbstractControl` control to replace the existing control
           * @param options Specifies whether this FormArray instance should emit events after an
           *     existing control is replaced with a new one.
           * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
           * `valueChanges` observables emit events with the latest status and value when the control is
           * replaced with a new one. When false, no events are emitted.
           */

        }, {
          key: "setControl",
          value: function setControl(index, control) {
            var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
            if (this.controls[index]) this.controls[index]._registerOnCollectionChange(function () {});
            this.controls.splice(index, 1);

            if (control) {
              this.controls.splice(index, 0, control);

              this._registerControl(control);
            }

            this.updateValueAndValidity({
              emitEvent: options.emitEvent
            });

            this._onCollectionChange();
          }
          /**
           * Length of the control array.
           */

        }, {
          key: "length",
          get: function get() {
            return this.controls.length;
          }
          /**
           * Sets the value of the `FormArray`. It accepts an array that matches
           * the structure of the control.
           *
           * This method performs strict checks, and throws an error if you try
           * to set the value of a control that doesn't exist or if you exclude the
           * value of a control.
           *
           * @usageNotes
           * ### Set the values for the controls in the form array
           *
           * ```
           * const arr = new FormArray([
           *   new FormControl(),
           *   new FormControl()
           * ]);
           * console.log(arr.value);   // [null, null]
           *
           * arr.setValue(['Nancy', 'Drew']);
           * console.log(arr.value);   // ['Nancy', 'Drew']
           * ```
           *
           * @param value Array of values for the controls
           * @param options Configure options that determine how the control propagates changes and
           * emits events after the value changes
           *
           * * `onlySelf`: When true, each change only affects this control, and not its parent. Default
           * is false.
           * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
           * `valueChanges`
           * observables emit events with the latest status and value when the control value is updated.
           * When false, no events are emitted.
           * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity
           * updateValueAndValidity} method.
           */

        }, {
          key: "setValue",
          value: function setValue(value) {
            var _this462 = this;

            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};

            this._checkAllValuesPresent(value);

            value.forEach(function (newValue, index) {
              _this462._throwIfControlMissing(index);

              _this462.at(index).setValue(newValue, {
                onlySelf: true,
                emitEvent: options.emitEvent
              });
            });
            this.updateValueAndValidity(options);
          }
          /**
           * Patches the value of the `FormArray`. It accepts an array that matches the
           * structure of the control, and does its best to match the values to the correct
           * controls in the group.
           *
           * It accepts both super-sets and sub-sets of the array without throwing an error.
           *
           * @usageNotes
           * ### Patch the values for controls in a form array
           *
           * ```
           * const arr = new FormArray([
           *    new FormControl(),
           *    new FormControl()
           * ]);
           * console.log(arr.value);   // [null, null]
           *
           * arr.patchValue(['Nancy']);
           * console.log(arr.value);   // ['Nancy', null]
           * ```
           *
           * @param value Array of latest values for the controls
           * @param options Configure options that determine how the control propagates changes and
           * emits events after the value changes
           *
           * * `onlySelf`: When true, each change only affects this control, and not its parent. Default
           * is false.
           * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
           * `valueChanges` observables emit events with the latest status and value when the control value
           * is updated. When false, no events are emitted. The configuration options are passed to
           * the {@link AbstractControl#updateValueAndValidity updateValueAndValidity} method.
           */

        }, {
          key: "patchValue",
          value: function patchValue(value) {
            var _this463 = this;

            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
            // Even though the `value` argument type doesn't allow `null` and `undefined` values, the
            // `patchValue` can be called recursively and inner data structures might have these values, so
            // we just ignore such cases when a field containing FormArray instance receives `null` or
            // `undefined` as a value.
            if (value == null
            /* both `null` and `undefined` */
            ) return;
            value.forEach(function (newValue, index) {
              if (_this463.at(index)) {
                _this463.at(index).patchValue(newValue, {
                  onlySelf: true,
                  emitEvent: options.emitEvent
                });
              }
            });
            this.updateValueAndValidity(options);
          }
          /**
           * Resets the `FormArray` and all descendants are marked `pristine` and `untouched`, and the
           * value of all descendants to null or null maps.
           *
           * You reset to a specific form state by passing in an array of states
           * that matches the structure of the control. The state is a standalone value
           * or a form state object with both a value and a disabled status.
           *
           * @usageNotes
           * ### Reset the values in a form array
           *
           * ```ts
           * const arr = new FormArray([
           *    new FormControl(),
           *    new FormControl()
           * ]);
           * arr.reset(['name', 'last name']);
           *
           * console.log(this.arr.value);  // ['name', 'last name']
           * ```
           *
           * ### Reset the values in a form array and the disabled status for the first control
           *
           * ```
           * this.arr.reset([
           *   {value: 'name', disabled: true},
           *   'last'
           * ]);
           *
           * console.log(this.arr.value);  // ['name', 'last name']
           * console.log(this.arr.get(0).status);  // 'DISABLED'
           * ```
           *
           * @param value Array of values for the controls
           * @param options Configure options that determine how the control propagates changes and
           * emits events after the value changes
           *
           * * `onlySelf`: When true, each change only affects this control, and not its parent. Default
           * is false.
           * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
           * `valueChanges`
           * observables emit events with the latest status and value when the control is reset.
           * When false, no events are emitted.
           * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity
           * updateValueAndValidity} method.
           */

        }, {
          key: "reset",
          value: function reset() {
            var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};

            this._forEachChild(function (control, index) {
              control.reset(value[index], {
                onlySelf: true,
                emitEvent: options.emitEvent
              });
            });

            this._updatePristine(options);

            this._updateTouched(options);

            this.updateValueAndValidity(options);
          }
          /**
           * The aggregate value of the array, including any disabled controls.
           *
           * Reports all values regardless of disabled status.
           * For enabled controls only, the `value` property is the best way to get the value of the array.
           */

        }, {
          key: "getRawValue",
          value: function getRawValue() {
            return this.controls.map(function (control) {
              return control instanceof FormControl ? control.value : control.getRawValue();
            });
          }
          /**
           * Remove all controls in the `FormArray`.
           *
           * @param options Specifies whether this FormArray instance should emit events after all
           *     controls are removed.
           * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and
           * `valueChanges` observables emit events with the latest status and value when all controls
           * in this FormArray instance are removed. When false, no events are emitted.
           *
           * @usageNotes
           * ### Remove all elements from a FormArray
           *
           * ```ts
           * const arr = new FormArray([
           *    new FormControl(),
           *    new FormControl()
           * ]);
           * console.log(arr.length);  // 2
           *
           * arr.clear();
           * console.log(arr.length);  // 0
           * ```
           *
           * It's a simpler and more efficient alternative to removing all elements one by one:
           *
           * ```ts
           * const arr = new FormArray([
           *    new FormControl(),
           *    new FormControl()
           * ]);
           *
           * while (arr.length) {
           *    arr.removeAt(0);
           * }
           * ```
           */

        }, {
          key: "clear",
          value: function clear() {
            var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            if (this.controls.length < 1) return;

            this._forEachChild(function (control) {
              return control._registerOnCollectionChange(function () {});
            });

            this.controls.splice(0);
            this.updateValueAndValidity({
              emitEvent: options.emitEvent
            });
          }
          /** @internal */

        }, {
          key: "_syncPendingControls",
          value: function _syncPendingControls() {
            var subtreeUpdated = this.controls.reduce(function (updated, child) {
              return child._syncPendingControls() ? true : updated;
            }, false);
            if (subtreeUpdated) this.updateValueAndValidity({
              onlySelf: true
            });
            return subtreeUpdated;
          }
          /** @internal */

        }, {
          key: "_throwIfControlMissing",
          value: function _throwIfControlMissing(index) {
            if (!this.controls.length) {
              throw new Error("\n        There are no form controls registered with this array yet. If you're using ngModel,\n        you may want to check next tick (e.g. use setTimeout).\n      ");
            }

            if (!this.at(index)) {
              throw new Error("Cannot find form control at index ".concat(index));
            }
          }
          /** @internal */

        }, {
          key: "_forEachChild",
          value: function _forEachChild(cb) {
            this.controls.forEach(function (control, index) {
              cb(control, index);
            });
          }
          /** @internal */

        }, {
          key: "_updateValue",
          value: function _updateValue() {
            var _this464 = this;

            this.value = this.controls.filter(function (control) {
              return control.enabled || _this464.disabled;
            }).map(function (control) {
              return control.value;
            });
          }
          /** @internal */

        }, {
          key: "_anyControls",
          value: function _anyControls(condition) {
            return this.controls.some(function (control) {
              return control.enabled && condition(control);
            });
          }
          /** @internal */

        }, {
          key: "_setUpControls",
          value: function _setUpControls() {
            var _this465 = this;

            this._forEachChild(function (control) {
              return _this465._registerControl(control);
            });
          }
          /** @internal */

        }, {
          key: "_checkAllValuesPresent",
          value: function _checkAllValuesPresent(value) {
            this._forEachChild(function (control, i) {
              if (value[i] === undefined) {
                throw new Error("Must supply a value for form control at index: ".concat(i, "."));
              }
            });
          }
          /** @internal */

        }, {
          key: "_allControlsDisabled",
          value: function _allControlsDisabled() {
            var _iterator55 = _createForOfIteratorHelper(this.controls),
                _step54;

            try {
              for (_iterator55.s(); !(_step54 = _iterator55.n()).done;) {
                var control = _step54.value;
                if (control.enabled) return false;
              }
            } catch (err) {
              _iterator55.e(err);
            } finally {
              _iterator55.f();
            }

            return this.controls.length > 0 || this.disabled;
          }
        }, {
          key: "_registerControl",
          value: function _registerControl(control) {
            control.setParent(this);

            control._registerOnCollectionChange(this._onCollectionChange);
          }
        }]);

        return FormArray;
      }(AbstractControl);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var formDirectiveProvider = {
        provide: ControlContainer,
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return NgForm;
        })
      };

      var ɵ0 = function ɵ0() {
        return Promise.resolve(null);
      };

      var resolvedPromise = ɵ0();
      /**
       * @description
       * Creates a top-level `FormGroup` instance and binds it to a form
       * to track aggregate form value and validation status.
       *
       * As soon as you import the `FormsModule`, this directive becomes active by default on
       * all `<form>` tags.  You don't need to add a special selector.
       *
       * You optionally export the directive into a local template variable using `ngForm` as the key
       * (ex: `#myForm="ngForm"`). This is optional, but useful.  Many properties from the underlying
       * `FormGroup` instance are duplicated on the directive itself, so a reference to it
       * gives you access to the aggregate value and validity status of the form, as well as
       * user interaction properties like `dirty` and `touched`.
       *
       * To register child controls with the form, use `NgModel` with a `name`
       * attribute. You may use `NgModelGroup` to create sub-groups within the form.
       *
       * If necessary, listen to the directive's `ngSubmit` event to be notified when the user has
       * triggered a form submission. The `ngSubmit` event emits the original form
       * submission event.
       *
       * In template driven forms, all `<form>` tags are automatically tagged as `NgForm`.
       * To import the `FormsModule` but skip its usage in some forms,
       * for example, to use native HTML5 validation, add the `ngNoForm` and the `<form>`
       * tags won't create an `NgForm` directive. In reactive forms, using `ngNoForm` is
       * unnecessary because the `<form>` tags are inert. In that case, you would
       * refrain from using the `formGroup` directive.
       *
       * @usageNotes
       *
       * ### Listening for form submission
       *
       * The following example shows how to capture the form values from the "ngSubmit" event.
       *
       * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}
       *
       * ### Setting the update options
       *
       * The following example shows you how to change the "updateOn" option from its default using
       * ngFormOptions.
       *
       * ```html
       * <form [ngFormOptions]="{updateOn: 'blur'}">
       *    <input name="one" ngModel>  <!-- this ngModel will update on blur -->
       * </form>
       * ```
       *
       * ### Native DOM validation UI
       *
       * In order to prevent the native DOM form validation UI from interfering with Angular's form
       * validation, Angular automatically adds the `novalidate` attribute on any `<form>` whenever
       * `FormModule` or `ReactiveFormModule` are imported into the application.
       * If you want to explicitly enable native DOM validation UI with Angular forms, you can add the
       * `ngNativeValidate` attribute to the `<form>` element:
       *
       * ```html
       * <form ngNativeValidate>
       *   ...
       * </form>
       * ```
       *
       * @ngModule FormsModule
       * @publicApi
       */

      var NgForm = /*#__PURE__*/function (_ControlContainer) {
        _inherits2(NgForm, _ControlContainer);

        var _super183 = _createSuper(NgForm);

        function NgForm(validators, asyncValidators) {
          var _this466;

          _classCallCheck2(this, NgForm);

          _this466 = _super183.call(this);
          /**
           * @description
           * Returns whether the form submission has been triggered.
           */

          _this466.submitted = false;
          _this466._directives = [];
          /**
           * @description
           * Event emitter for the "ngSubmit" event
           */

          _this466.ngSubmit = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          _this466.form = new FormGroup({}, composeValidators(validators), composeAsyncValidators(asyncValidators));
          return _this466;
        }
        /** @nodoc */


        _createClass2(NgForm, [{
          key: "ngAfterViewInit",
          value: function ngAfterViewInit() {
            this._setUpdateStrategy();
          }
          /**
           * @description
           * The directive instance.
           */

        }, {
          key: "formDirective",
          get: function get() {
            return this;
          }
          /**
           * @description
           * The internal `FormGroup` instance.
           */

        }, {
          key: "control",
          get: function get() {
            return this.form;
          }
          /**
           * @description
           * Returns an array representing the path to this group. Because this directive
           * always lives at the top level of a form, it is always an empty array.
           */

        }, {
          key: "path",
          get: function get() {
            return [];
          }
          /**
           * @description
           * Returns a map of the controls in this group.
           */

        }, {
          key: "controls",
          get: function get() {
            return this.form.controls;
          }
          /**
           * @description
           * Method that sets up the control directive in this group, re-calculates its value
           * and validity, and adds the instance to the internal list of directives.
           *
           * @param dir The `NgModel` directive instance.
           */

        }, {
          key: "addControl",
          value: function addControl(dir) {
            var _this467 = this;

            resolvedPromise.then(function () {
              var container = _this467._findContainer(dir.path);

              dir.control = container.registerControl(dir.name, dir.control);
              setUpControl(dir.control, dir);
              dir.control.updateValueAndValidity({
                emitEvent: false
              });

              _this467._directives.push(dir);
            });
          }
          /**
           * @description
           * Retrieves the `FormControl` instance from the provided `NgModel` directive.
           *
           * @param dir The `NgModel` directive instance.
           */

        }, {
          key: "getControl",
          value: function getControl(dir) {
            return this.form.get(dir.path);
          }
          /**
           * @description
           * Removes the `NgModel` instance from the internal list of directives
           *
           * @param dir The `NgModel` directive instance.
           */

        }, {
          key: "removeControl",
          value: function removeControl(dir) {
            var _this468 = this;

            resolvedPromise.then(function () {
              var container = _this468._findContainer(dir.path);

              if (container) {
                container.removeControl(dir.name);
              }

              removeListItem(_this468._directives, dir);
            });
          }
          /**
           * @description
           * Adds a new `NgModelGroup` directive instance to the form.
           *
           * @param dir The `NgModelGroup` directive instance.
           */

        }, {
          key: "addFormGroup",
          value: function addFormGroup(dir) {
            var _this469 = this;

            resolvedPromise.then(function () {
              var container = _this469._findContainer(dir.path);

              var group = new FormGroup({});
              setUpFormContainer(group, dir);
              container.registerControl(dir.name, group);
              group.updateValueAndValidity({
                emitEvent: false
              });
            });
          }
          /**
           * @description
           * Removes the `NgModelGroup` directive instance from the form.
           *
           * @param dir The `NgModelGroup` directive instance.
           */

        }, {
          key: "removeFormGroup",
          value: function removeFormGroup(dir) {
            var _this470 = this;

            resolvedPromise.then(function () {
              var container = _this470._findContainer(dir.path);

              if (container) {
                container.removeControl(dir.name);
              }
            });
          }
          /**
           * @description
           * Retrieves the `FormGroup` for a provided `NgModelGroup` directive instance
           *
           * @param dir The `NgModelGroup` directive instance.
           */

        }, {
          key: "getFormGroup",
          value: function getFormGroup(dir) {
            return this.form.get(dir.path);
          }
          /**
           * Sets the new value for the provided `NgControl` directive.
           *
           * @param dir The `NgControl` directive instance.
           * @param value The new value for the directive's control.
           */

        }, {
          key: "updateModel",
          value: function updateModel(dir, value) {
            var _this471 = this;

            resolvedPromise.then(function () {
              var ctrl = _this471.form.get(dir.path);

              ctrl.setValue(value);
            });
          }
          /**
           * @description
           * Sets the value for this `FormGroup`.
           *
           * @param value The new value
           */

        }, {
          key: "setValue",
          value: function setValue(value) {
            this.control.setValue(value);
          }
          /**
           * @description
           * Method called when the "submit" event is triggered on the form.
           * Triggers the `ngSubmit` emitter to emit the "submit" event as its payload.
           *
           * @param $event The "submit" event object
           */

        }, {
          key: "onSubmit",
          value: function onSubmit($event) {
            this.submitted = true;
            syncPendingControls(this.form, this._directives);
            this.ngSubmit.emit($event);
            return false;
          }
          /**
           * @description
           * Method called when the "reset" event is triggered on the form.
           */

        }, {
          key: "onReset",
          value: function onReset() {
            this.resetForm();
          }
          /**
           * @description
           * Resets the form to an initial value and resets its submitted status.
           *
           * @param value The new value for the form.
           */

        }, {
          key: "resetForm",
          value: function resetForm() {
            var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
            this.form.reset(value);
            this.submitted = false;
          }
        }, {
          key: "_setUpdateStrategy",
          value: function _setUpdateStrategy() {
            if (this.options && this.options.updateOn != null) {
              this.form._updateOn = this.options.updateOn;
            }
          }
          /** @internal */

        }, {
          key: "_findContainer",
          value: function _findContainer(path) {
            path.pop();
            return path.length ? this.form.get(path) : this.form;
          }
        }]);

        return NgForm;
      }(ControlContainer);

      NgForm.ɵfac = function NgForm_Factory(t) {
        return new (t || NgForm)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_VALIDATORS, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_ASYNC_VALIDATORS, 10));
      };

      NgForm.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgForm,
        selectors: [["form", 3, "ngNoForm", "", 3, "formGroup", ""], ["ng-form"], ["", "ngForm", ""]],
        hostBindings: function NgForm_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("submit", function NgForm_submit_HostBindingHandler($event) {
              return ctx.onSubmit($event);
            })("reset", function NgForm_reset_HostBindingHandler() {
              return ctx.onReset();
            });
          }
        },
        inputs: {
          options: ["ngFormOptions", "options"]
        },
        outputs: {
          ngSubmit: "ngSubmit"
        },
        exportAs: ["ngForm"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([formDirectiveProvider]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      NgForm.ctorParameters = function () {
        return [{
          type: Array,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NG_VALIDATORS]
          }]
        }, {
          type: Array,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NG_ASYNC_VALIDATORS]
          }]
        }];
      };

      NgForm.propDecorators = {
        options: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['ngFormOptions']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgForm, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]',
            providers: [formDirectiveProvider],
            host: {
              '(submit)': 'onSubmit($event)',
              '(reset)': 'onReset()'
            },
            outputs: ['ngSubmit'],
            exportAs: 'ngForm'
          }]
        }], function () {
          return [{
            type: Array,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NG_VALIDATORS]
            }]
          }, {
            type: Array,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NG_ASYNC_VALIDATORS]
            }]
          }];
        }, {
          options: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['ngFormOptions']
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @description
       * A base class for code shared between the `NgModelGroup` and `FormGroupName` directives.
       *
       * @publicApi
       */


      var AbstractFormGroupDirective = /*#__PURE__*/function (_ControlContainer2) {
        _inherits2(AbstractFormGroupDirective, _ControlContainer2);

        var _super184 = _createSuper(AbstractFormGroupDirective);

        function AbstractFormGroupDirective() {
          _classCallCheck2(this, AbstractFormGroupDirective);

          return _super184.apply(this, arguments);
        }

        _createClass2(AbstractFormGroupDirective, [{
          key: "ngOnInit",
          value:
          /** @nodoc */
          function ngOnInit() {
            this._checkParentType(); // Register the group with its parent group.


            this.formDirective.addFormGroup(this);
          }
          /** @nodoc */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            if (this.formDirective) {
              // Remove the group from its parent group.
              this.formDirective.removeFormGroup(this);
            }
          }
          /**
           * @description
           * The `FormGroup` bound to this directive.
           */

        }, {
          key: "control",
          get: function get() {
            return this.formDirective.getFormGroup(this);
          }
          /**
           * @description
           * The path to this group from the top-level directive.
           */

        }, {
          key: "path",
          get: function get() {
            return controlPath(this.name == null ? this.name : this.name.toString(), this._parent);
          }
          /**
           * @description
           * The top-level directive for this group if present, otherwise null.
           */

        }, {
          key: "formDirective",
          get: function get() {
            return this._parent ? this._parent.formDirective : null;
          }
          /** @internal */

        }, {
          key: "_checkParentType",
          value: function _checkParentType() {}
        }]);

        return AbstractFormGroupDirective;
      }(ControlContainer);

      AbstractFormGroupDirective.ɵfac = function AbstractFormGroupDirective_Factory(t) {
        return ɵAbstractFormGroupDirective_BaseFactory(t || AbstractFormGroupDirective);
      };

      AbstractFormGroupDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: AbstractFormGroupDirective,
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      var ɵAbstractFormGroupDirective_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](AbstractFormGroupDirective);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](AbstractFormGroupDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var TemplateDrivenErrors = /*#__PURE__*/function () {
        function TemplateDrivenErrors() {
          _classCallCheck2(this, TemplateDrivenErrors);
        }

        _createClass2(TemplateDrivenErrors, null, [{
          key: "modelParentException",
          value: function modelParentException() {
            throw new Error("\n      ngModel cannot be used to register form controls with a parent formGroup directive.  Try using\n      formGroup's partner directive \"formControlName\" instead.  Example:\n\n      ".concat(FormErrorExamples.formControlName, "\n\n      Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:\n\n      Example:\n\n      ").concat(FormErrorExamples.ngModelWithFormGroup));
          }
        }, {
          key: "formGroupNameException",
          value: function formGroupNameException() {
            throw new Error("\n      ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\n\n      Option 1: Use formControlName instead of ngModel (reactive strategy):\n\n      ".concat(FormErrorExamples.formGroupName, "\n\n      Option 2:  Update ngModel's parent be ngModelGroup (template-driven strategy):\n\n      ").concat(FormErrorExamples.ngModelGroup));
          }
        }, {
          key: "missingNameException",
          value: function missingNameException() {
            throw new Error("If ngModel is used within a form tag, either the name attribute must be set or the form\n      control must be defined as 'standalone' in ngModelOptions.\n\n      Example 1: <input [(ngModel)]=\"person.firstName\" name=\"first\">\n      Example 2: <input [(ngModel)]=\"person.firstName\" [ngModelOptions]=\"{standalone: true}\">");
          }
        }, {
          key: "modelGroupParentException",
          value: function modelGroupParentException() {
            throw new Error("\n      ngModelGroup cannot be used with a parent formGroup directive.\n\n      Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\n\n      ".concat(FormErrorExamples.formGroupName, "\n\n      Option 2:  Use a regular form tag instead of the formGroup directive (template-driven strategy):\n\n      ").concat(FormErrorExamples.ngModelGroup));
          }
        }]);

        return TemplateDrivenErrors;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var modelGroupProvider = {
        provide: ControlContainer,
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return NgModelGroup;
        })
      };
      /**
       * @description
       * Creates and binds a `FormGroup` instance to a DOM element.
       *
       * This directive can only be used as a child of `NgForm` (within `<form>` tags).
       *
       * Use this directive to validate a sub-group of your form separately from the
       * rest of your form, or if some values in your domain model make more sense
       * to consume together in a nested object.
       *
       * Provide a name for the sub-group and it will become the key
       * for the sub-group in the form's full value. If you need direct access, export the directive into
       * a local template variable using `ngModelGroup` (ex: `#myGroup="ngModelGroup"`).
       *
       * @usageNotes
       *
       * ### Consuming controls in a grouping
       *
       * The following example shows you how to combine controls together in a sub-group
       * of the form.
       *
       * {@example forms/ts/ngModelGroup/ng_model_group_example.ts region='Component'}
       *
       * @ngModule FormsModule
       * @publicApi
       */

      var NgModelGroup = /*#__PURE__*/function (_AbstractFormGroupDir) {
        _inherits2(NgModelGroup, _AbstractFormGroupDir);

        var _super185 = _createSuper(NgModelGroup);

        function NgModelGroup(parent, validators, asyncValidators) {
          var _this472;

          _classCallCheck2(this, NgModelGroup);

          _this472 = _super185.call(this);
          _this472._parent = parent;

          _this472._setValidators(validators);

          _this472._setAsyncValidators(asyncValidators);

          return _this472;
        }
        /** @internal */


        _createClass2(NgModelGroup, [{
          key: "_checkParentType",
          value: function _checkParentType() {
            if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm) && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              TemplateDrivenErrors.modelGroupParentException();
            }
          }
        }]);

        return NgModelGroup;
      }(AbstractFormGroupDirective);

      NgModelGroup.ɵfac = function NgModelGroup_Factory(t) {
        return new (t || NgModelGroup)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](ControlContainer, 5), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_VALIDATORS, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_ASYNC_VALIDATORS, 10));
      };

      NgModelGroup.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgModelGroup,
        selectors: [["", "ngModelGroup", ""]],
        inputs: {
          name: ["ngModelGroup", "name"]
        },
        exportAs: ["ngModelGroup"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([modelGroupProvider]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      NgModelGroup.ctorParameters = function () {
        return [{
          type: ControlContainer,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
          }]
        }, {
          type: Array,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NG_VALIDATORS]
          }]
        }, {
          type: Array,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NG_ASYNC_VALIDATORS]
          }]
        }];
      };

      NgModelGroup.propDecorators = {
        name: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['ngModelGroup']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgModelGroup, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngModelGroup]',
            providers: [modelGroupProvider],
            exportAs: 'ngModelGroup'
          }]
        }], function () {
          return [{
            type: ControlContainer,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
            }]
          }, {
            type: Array,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NG_VALIDATORS]
            }]
          }, {
            type: Array,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NG_ASYNC_VALIDATORS]
            }]
          }];
        }, {
          name: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['ngModelGroup']
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var formControlBinding = {
        provide: NgControl,
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return NgModel;
        })
      };

      var ɵ0$1 = function ɵ0$1() {
        return Promise.resolve(null);
      };
      /**
       * `ngModel` forces an additional change detection run when its inputs change:
       * E.g.:
       * ```
       * <div>{{myModel.valid}}</div>
       * <input [(ngModel)]="myValue" #myModel="ngModel">
       * ```
       * I.e. `ngModel` can export itself on the element and then be used in the template.
       * Normally, this would result in expressions before the `input` that use the exported directive
       * to have an old value as they have been
       * dirty checked before. As this is a very common case for `ngModel`, we added this second change
       * detection run.
       *
       * Notes:
       * - this is just one extra run no matter how many `ngModel`s have been changed.
       * - this is a general problem when using `exportAs` for directives!
       */


      var resolvedPromise$1 = ɵ0$1();
      /**
       * @description
       * Creates a `FormControl` instance from a domain model and binds it
       * to a form control element.
       *
       * The `FormControl` instance tracks the value, user interaction, and
       * validation status of the control and keeps the view synced with the model. If used
       * within a parent form, the directive also registers itself with the form as a child
       * control.
       *
       * This directive is used by itself or as part of a larger form. Use the
       * `ngModel` selector to activate it.
       *
       * It accepts a domain model as an optional `Input`. If you have a one-way binding
       * to `ngModel` with `[]` syntax, changing the domain model's value in the component
       * class sets the value in the view. If you have a two-way binding with `[()]` syntax
       * (also known as 'banana-in-a-box syntax'), the value in the UI always syncs back to
       * the domain model in your class.
       *
       * To inspect the properties of the associated `FormControl` (like the validity state),
       * export the directive into a local template variable using `ngModel` as the key (ex:
       * `#myVar="ngModel"`). You can then access the control using the directive's `control` property.
       * However, the most commonly used properties (like `valid` and `dirty`) also exist on the control
       * for direct access. See a full list of properties directly available in
       * `AbstractControlDirective`.
       *
       * @see `RadioControlValueAccessor`
       * @see `SelectControlValueAccessor`
       *
       * @usageNotes
       *
       * ### Using ngModel on a standalone control
       *
       * The following examples show a simple standalone control using `ngModel`:
       *
       * {@example forms/ts/simpleNgModel/simple_ng_model_example.ts region='Component'}
       *
       * When using the `ngModel` within `<form>` tags, you'll also need to supply a `name` attribute
       * so that the control can be registered with the parent form under that name.
       *
       * In the context of a parent form, it's often unnecessary to include one-way or two-way binding,
       * as the parent form syncs the value for you. You access its properties by exporting it into a
       * local template variable using `ngForm` such as (`#f="ngForm"`). Use the variable where
       * needed on form submission.
       *
       * If you do need to populate initial values into your form, using a one-way binding for
       * `ngModel` tends to be sufficient as long as you use the exported form's value rather
       * than the domain model's value on submit.
       *
       * ### Using ngModel within a form
       *
       * The following example shows controls using `ngModel` within a form:
       *
       * {@example forms/ts/simpleForm/simple_form_example.ts region='Component'}
       *
       * ### Using a standalone ngModel within a group
       *
       * The following example shows you how to use a standalone ngModel control
       * within a form. This controls the display of the form, but doesn't contain form data.
       *
       * ```html
       * <form>
       *   <input name="login" ngModel placeholder="Login">
       *   <input type="checkbox" ngModel [ngModelOptions]="{standalone: true}"> Show more options?
       * </form>
       * <!-- form value: {login: ''} -->
       * ```
       *
       * ### Setting the ngModel `name` attribute through options
       *
       * The following example shows you an alternate way to set the name attribute. Here,
       * an attribute identified as name is used within a custom form control component. To still be able
       * to specify the NgModel's name, you must specify it using the `ngModelOptions` input instead.
       *
       * ```html
       * <form>
       *   <my-custom-form-control name="Nancy" ngModel [ngModelOptions]="{name: 'user'}">
       *   </my-custom-form-control>
       * </form>
       * <!-- form value: {user: ''} -->
       * ```
       *
       * @ngModule FormsModule
       * @publicApi
       */

      var NgModel = /*#__PURE__*/function (_NgControl) {
        _inherits2(NgModel, _NgControl);

        var _super186 = _createSuper(NgModel);

        function NgModel(parent, validators, asyncValidators, valueAccessors) {
          var _this473;

          _classCallCheck2(this, NgModel);

          _this473 = _super186.call(this);
          _this473.control = new FormControl();
          /** @internal */

          _this473._registered = false;
          /**
           * @description
           * Event emitter for producing the `ngModelChange` event after
           * the view model updates.
           */

          _this473.update = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          _this473._parent = parent;

          _this473._setValidators(validators);

          _this473._setAsyncValidators(asyncValidators);

          _this473.valueAccessor = selectValueAccessor(_assertThisInitialized2(_this473), valueAccessors);
          return _this473;
        }
        /** @nodoc */


        _createClass2(NgModel, [{
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            this._checkForErrors();

            if (!this._registered) this._setUpControl();

            if ('isDisabled' in changes) {
              this._updateDisabled(changes);
            }

            if (isPropertyUpdated(changes, this.viewModel)) {
              this._updateValue(this.model);

              this.viewModel = this.model;
            }
          }
          /** @nodoc */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.formDirective && this.formDirective.removeControl(this);
          }
          /**
           * @description
           * Returns an array that represents the path from the top-level form to this control.
           * Each index is the string name of the control on that level.
           */

        }, {
          key: "path",
          get: function get() {
            return this._parent ? controlPath(this.name, this._parent) : [this.name];
          }
          /**
           * @description
           * The top-level directive for this control if present, otherwise null.
           */

        }, {
          key: "formDirective",
          get: function get() {
            return this._parent ? this._parent.formDirective : null;
          }
          /**
           * @description
           * Sets the new value for the view model and emits an `ngModelChange` event.
           *
           * @param newValue The new value emitted by `ngModelChange`.
           */

        }, {
          key: "viewToModelUpdate",
          value: function viewToModelUpdate(newValue) {
            this.viewModel = newValue;
            this.update.emit(newValue);
          }
        }, {
          key: "_setUpControl",
          value: function _setUpControl() {
            this._setUpdateStrategy();

            this._isStandalone() ? this._setUpStandalone() : this.formDirective.addControl(this);
            this._registered = true;
          }
        }, {
          key: "_setUpdateStrategy",
          value: function _setUpdateStrategy() {
            if (this.options && this.options.updateOn != null) {
              this.control._updateOn = this.options.updateOn;
            }
          }
        }, {
          key: "_isStandalone",
          value: function _isStandalone() {
            return !this._parent || !!(this.options && this.options.standalone);
          }
        }, {
          key: "_setUpStandalone",
          value: function _setUpStandalone() {
            setUpControl(this.control, this);
            this.control.updateValueAndValidity({
              emitEvent: false
            });
          }
        }, {
          key: "_checkForErrors",
          value: function _checkForErrors() {
            if (!this._isStandalone()) {
              this._checkParentType();
            }

            this._checkName();
          }
        }, {
          key: "_checkParentType",
          value: function _checkParentType() {
            if (typeof ngDevMode === 'undefined' || ngDevMode) {
              if (!(this._parent instanceof NgModelGroup) && this._parent instanceof AbstractFormGroupDirective) {
                TemplateDrivenErrors.formGroupNameException();
              } else if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {
                TemplateDrivenErrors.modelParentException();
              }
            }
          }
        }, {
          key: "_checkName",
          value: function _checkName() {
            if (this.options && this.options.name) this.name = this.options.name;

            if (!this._isStandalone() && !this.name && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              TemplateDrivenErrors.missingNameException();
            }
          }
        }, {
          key: "_updateValue",
          value: function _updateValue(value) {
            var _this474 = this;

            resolvedPromise$1.then(function () {
              _this474.control.setValue(value, {
                emitViewToModelChange: false
              });
            });
          }
        }, {
          key: "_updateDisabled",
          value: function _updateDisabled(changes) {
            var _this475 = this;

            var disabledValue = changes['isDisabled'].currentValue;
            var isDisabled = disabledValue === '' || disabledValue && disabledValue !== 'false';
            resolvedPromise$1.then(function () {
              if (isDisabled && !_this475.control.disabled) {
                _this475.control.disable();
              } else if (!isDisabled && _this475.control.disabled) {
                _this475.control.enable();
              }
            });
          }
        }]);

        return NgModel;
      }(NgControl);

      NgModel.ɵfac = function NgModel_Factory(t) {
        return new (t || NgModel)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](ControlContainer, 9), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_VALIDATORS, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_ASYNC_VALIDATORS, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_VALUE_ACCESSOR, 10));
      };

      NgModel.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgModel,
        selectors: [["", "ngModel", "", 3, "formControlName", "", 3, "formControl", ""]],
        inputs: {
          name: "name",
          isDisabled: ["disabled", "isDisabled"],
          model: ["ngModel", "model"],
          options: ["ngModelOptions", "options"]
        },
        outputs: {
          update: "ngModelChange"
        },
        exportAs: ["ngModel"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([formControlBinding]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
      });

      NgModel.ctorParameters = function () {
        return [{
          type: ControlContainer,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
          }]
        }, {
          type: Array,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NG_VALIDATORS]
          }]
        }, {
          type: Array,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NG_ASYNC_VALIDATORS]
          }]
        }, {
          type: Array,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NG_VALUE_ACCESSOR]
          }]
        }];
      };

      NgModel.propDecorators = {
        name: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        isDisabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['disabled']
        }],
        model: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['ngModel']
        }],
        options: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['ngModelOptions']
        }],
        update: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
          args: ['ngModelChange']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgModel, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngModel]:not([formControlName]):not([formControl])',
            providers: [formControlBinding],
            exportAs: 'ngModel'
          }]
        }], function () {
          return [{
            type: ControlContainer,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
            }]
          }, {
            type: Array,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NG_VALIDATORS]
            }]
          }, {
            type: Array,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NG_ASYNC_VALIDATORS]
            }]
          }, {
            type: Array,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NG_VALUE_ACCESSOR]
            }]
          }];
        }, {
          update: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
            args: ['ngModelChange']
          }],
          name: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          isDisabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['disabled']
          }],
          model: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['ngModel']
          }],
          options: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['ngModelOptions']
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @description
       *
       * Adds `novalidate` attribute to all forms by default.
       *
       * `novalidate` is used to disable browser's native form validation.
       *
       * If you want to use native validation with Angular forms, just add `ngNativeValidate` attribute:
       *
       * ```
       * <form ngNativeValidate></form>
       * ```
       *
       * @publicApi
       * @ngModule ReactiveFormsModule
       * @ngModule FormsModule
       */


      var ɵNgNoValidate = function ɵNgNoValidate() {
        _classCallCheck2(this, ɵNgNoValidate);
      };

      ɵNgNoValidate.ɵfac = function ɵNgNoValidate_Factory(t) {
        return new (t || ɵNgNoValidate)();
      };

      ɵNgNoValidate.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: ɵNgNoValidate,
        selectors: [["form", 3, "ngNoForm", "", 3, "ngNativeValidate", ""]],
        hostAttrs: ["novalidate", ""]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ɵNgNoValidate, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'form:not([ngNoForm]):not([ngNativeValidate])',
            host: {
              'novalidate': ''
            }
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Token to provide to turn off the ngModel warning on formControl and formControlName.
       */


      var NG_MODEL_WITH_FORM_CONTROL_WARNING = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('NgModelWithFormControlWarning');
      var formControlBinding$1 = {
        provide: NgControl,
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return FormControlDirective;
        })
      };
      /**
       * @description
       * Synchronizes a standalone `FormControl` instance to a form control element.
       *
       * Note that support for using the `ngModel` input property and `ngModelChange` event with reactive
       * form directives was deprecated in Angular v6 and is scheduled for removal in
       * a future version of Angular.
       * For details, see [Deprecated features](guide/deprecations#ngmodel-with-reactive-forms).
       *
       * @see [Reactive Forms Guide](guide/reactive-forms)
       * @see `FormControl`
       * @see `AbstractControl`
       *
       * @usageNotes
       *
       * The following example shows how to register a standalone control and set its value.
       *
       * {@example forms/ts/simpleFormControl/simple_form_control_example.ts region='Component'}
       *
       * @ngModule ReactiveFormsModule
       * @publicApi
       */

      var FormControlDirective = /*#__PURE__*/function (_NgControl2) {
        _inherits2(FormControlDirective, _NgControl2);

        var _super187 = _createSuper(FormControlDirective);

        function FormControlDirective(validators, asyncValidators, valueAccessors, _ngModelWarningConfig) {
          var _this476;

          _classCallCheck2(this, FormControlDirective);

          _this476 = _super187.call(this);
          _this476._ngModelWarningConfig = _ngModelWarningConfig;
          /** @deprecated as of v6 */

          _this476.update = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * @description
           * Instance property used to track whether an ngModel warning has been sent out for this
           * particular `FormControlDirective` instance. Used to support warning config of "always".
           *
           * @internal
           */

          _this476._ngModelWarningSent = false;

          _this476._setValidators(validators);

          _this476._setAsyncValidators(asyncValidators);

          _this476.valueAccessor = selectValueAccessor(_assertThisInitialized2(_this476), valueAccessors);
          return _this476;
        }
        /**
         * @description
         * Triggers a warning in dev mode that this input should not be used with reactive forms.
         */


        _createClass2(FormControlDirective, [{
          key: "isDisabled",
          set: function set(isDisabled) {
            if (typeof ngDevMode === 'undefined' || ngDevMode) {
              ReactiveErrors.disabledAttrWarning();
            }
          }
          /** @nodoc */

        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            if (this._isControlChanged(changes)) {
              var previousForm = changes['form'].previousValue;

              if (previousForm) {
                cleanUpControl(previousForm, this,
                /* validateControlPresenceOnChange */
                false);
              }

              setUpControl(this.form, this);

              if (this.control.disabled && this.valueAccessor.setDisabledState) {
                this.valueAccessor.setDisabledState(true);
              }

              this.form.updateValueAndValidity({
                emitEvent: false
              });
            }

            if (isPropertyUpdated(changes, this.viewModel)) {
              if (typeof ngDevMode === 'undefined' || ngDevMode) {
                _ngModelWarning('formControl', FormControlDirective, this, this._ngModelWarningConfig);
              }

              this.form.setValue(this.model);
              this.viewModel = this.model;
            }
          }
          /** @nodoc */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            if (this.form) {
              cleanUpControl(this.form, this,
              /* validateControlPresenceOnChange */
              false);
            }
          }
          /**
           * @description
           * Returns an array that represents the path from the top-level form to this control.
           * Each index is the string name of the control on that level.
           */

        }, {
          key: "path",
          get: function get() {
            return [];
          }
          /**
           * @description
           * The `FormControl` bound to this directive.
           */

        }, {
          key: "control",
          get: function get() {
            return this.form;
          }
          /**
           * @description
           * Sets the new value for the view model and emits an `ngModelChange` event.
           *
           * @param newValue The new value for the view model.
           */

        }, {
          key: "viewToModelUpdate",
          value: function viewToModelUpdate(newValue) {
            this.viewModel = newValue;
            this.update.emit(newValue);
          }
        }, {
          key: "_isControlChanged",
          value: function _isControlChanged(changes) {
            return changes.hasOwnProperty('form');
          }
        }]);

        return FormControlDirective;
      }(NgControl);

      FormControlDirective.ɵfac = function FormControlDirective_Factory(t) {
        return new (t || FormControlDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_VALIDATORS, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_ASYNC_VALIDATORS, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_VALUE_ACCESSOR, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_MODEL_WITH_FORM_CONTROL_WARNING, 8));
      };

      FormControlDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: FormControlDirective,
        selectors: [["", "formControl", ""]],
        inputs: {
          isDisabled: ["disabled", "isDisabled"],
          form: ["formControl", "form"],
          model: ["ngModel", "model"]
        },
        outputs: {
          update: "ngModelChange"
        },
        exportAs: ["ngForm"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([formControlBinding$1]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
      });
      /**
       * @description
       * Static property used to track whether any ngModel warnings have been sent across
       * all instances of FormControlDirective. Used to support warning config of "once".
       *
       * @internal
       */

      FormControlDirective._ngModelWarningSentOnce = false;

      FormControlDirective.ctorParameters = function () {
        return [{
          type: Array,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NG_VALIDATORS]
          }]
        }, {
          type: Array,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NG_ASYNC_VALIDATORS]
          }]
        }, {
          type: Array,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NG_VALUE_ACCESSOR]
          }]
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NG_MODEL_WITH_FORM_CONTROL_WARNING]
          }]
        }];
      };

      FormControlDirective.propDecorators = {
        form: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['formControl']
        }],
        isDisabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['disabled']
        }],
        model: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['ngModel']
        }],
        update: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
          args: ['ngModelChange']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FormControlDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[formControl]',
            providers: [formControlBinding$1],
            exportAs: 'ngForm'
          }]
        }], function () {
          return [{
            type: Array,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NG_VALIDATORS]
            }]
          }, {
            type: Array,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NG_ASYNC_VALIDATORS]
            }]
          }, {
            type: Array,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NG_VALUE_ACCESSOR]
            }]
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NG_MODEL_WITH_FORM_CONTROL_WARNING]
            }]
          }];
        }, {
          update: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
            args: ['ngModelChange']
          }],
          isDisabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['disabled']
          }],
          form: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['formControl']
          }],
          model: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['ngModel']
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var formDirectiveProvider$1 = {
        provide: ControlContainer,
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return FormGroupDirective;
        })
      };
      /**
       * @description
       *
       * Binds an existing `FormGroup` to a DOM element.
       *
       * This directive accepts an existing `FormGroup` instance. It will then use this
       * `FormGroup` instance to match any child `FormControl`, `FormGroup`,
       * and `FormArray` instances to child `FormControlName`, `FormGroupName`,
       * and `FormArrayName` directives.
       *
       * @see [Reactive Forms Guide](guide/reactive-forms)
       * @see `AbstractControl`
       *
       * ### Register Form Group
       *
       * The following example registers a `FormGroup` with first name and last name controls,
       * and listens for the *ngSubmit* event when the button is clicked.
       *
       * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}
       *
       * @ngModule ReactiveFormsModule
       * @publicApi
       */

      var FormGroupDirective = /*#__PURE__*/function (_ControlContainer3) {
        _inherits2(FormGroupDirective, _ControlContainer3);

        var _super188 = _createSuper(FormGroupDirective);

        function FormGroupDirective(validators, asyncValidators) {
          var _this477;

          _classCallCheck2(this, FormGroupDirective);

          _this477 = _super188.call(this);
          _this477.validators = validators;
          _this477.asyncValidators = asyncValidators;
          /**
           * @description
           * Reports whether the form submission has been triggered.
           */

          _this477.submitted = false;
          /**
           * Callback that should be invoked when controls in FormGroup or FormArray collection change
           * (added or removed). This callback triggers corresponding DOM updates.
           */

          _this477._onCollectionChange = function () {
            return _this477._updateDomValue();
          };
          /**
           * @description
           * Tracks the list of added `FormControlName` instances
           */


          _this477.directives = [];
          /**
           * @description
           * Tracks the `FormGroup` bound to this directive.
           */

          _this477.form = null;
          /**
           * @description
           * Emits an event when the form submission has been triggered.
           */

          _this477.ngSubmit = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();

          _this477._setValidators(validators);

          _this477._setAsyncValidators(asyncValidators);

          return _this477;
        }
        /** @nodoc */


        _createClass2(FormGroupDirective, [{
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            this._checkFormPresent();

            if (changes.hasOwnProperty('form')) {
              this._updateValidators();

              this._updateDomValue();

              this._updateRegistrations();

              this._oldForm = this.form;
            }
          }
          /** @nodoc */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            if (this.form) {
              cleanUpValidators(this.form, this,
              /* handleOnValidatorChange */
              false); // Currently the `onCollectionChange` callback is rewritten each time the
              // `_registerOnCollectionChange` function is invoked. The implication is that cleanup should
              // happen *only* when the `onCollectionChange` callback was set by this directive instance.
              // Otherwise it might cause overriding a callback of some other directive instances. We should
              // consider updating this logic later to make it similar to how `onChange` callbacks are
              // handled, see https://github.com/angular/angular/issues/39732 for additional info.

              if (this.form._onCollectionChange === this._onCollectionChange) {
                this.form._registerOnCollectionChange(function () {});
              }
            }
          }
          /**
           * @description
           * Returns this directive's instance.
           */

        }, {
          key: "formDirective",
          get: function get() {
            return this;
          }
          /**
           * @description
           * Returns the `FormGroup` bound to this directive.
           */

        }, {
          key: "control",
          get: function get() {
            return this.form;
          }
          /**
           * @description
           * Returns an array representing the path to this group. Because this directive
           * always lives at the top level of a form, it always an empty array.
           */

        }, {
          key: "path",
          get: function get() {
            return [];
          }
          /**
           * @description
           * Method that sets up the control directive in this group, re-calculates its value
           * and validity, and adds the instance to the internal list of directives.
           *
           * @param dir The `FormControlName` directive instance.
           */

        }, {
          key: "addControl",
          value: function addControl(dir) {
            var ctrl = this.form.get(dir.path);
            setUpControl(ctrl, dir);
            ctrl.updateValueAndValidity({
              emitEvent: false
            });
            this.directives.push(dir);
            return ctrl;
          }
          /**
           * @description
           * Retrieves the `FormControl` instance from the provided `FormControlName` directive
           *
           * @param dir The `FormControlName` directive instance.
           */

        }, {
          key: "getControl",
          value: function getControl(dir) {
            return this.form.get(dir.path);
          }
          /**
           * @description
           * Removes the `FormControlName` instance from the internal list of directives
           *
           * @param dir The `FormControlName` directive instance.
           */

        }, {
          key: "removeControl",
          value: function removeControl(dir) {
            cleanUpControl(dir.control || null, dir,
            /* validateControlPresenceOnChange */
            false);
            removeListItem(this.directives, dir);
          }
          /**
           * Adds a new `FormGroupName` directive instance to the form.
           *
           * @param dir The `FormGroupName` directive instance.
           */

        }, {
          key: "addFormGroup",
          value: function addFormGroup(dir) {
            this._setUpFormContainer(dir);
          }
          /**
           * Performs the necessary cleanup when a `FormGroupName` directive instance is removed from the
           * view.
           *
           * @param dir The `FormGroupName` directive instance.
           */

        }, {
          key: "removeFormGroup",
          value: function removeFormGroup(dir) {
            this._cleanUpFormContainer(dir);
          }
          /**
           * @description
           * Retrieves the `FormGroup` for a provided `FormGroupName` directive instance
           *
           * @param dir The `FormGroupName` directive instance.
           */

        }, {
          key: "getFormGroup",
          value: function getFormGroup(dir) {
            return this.form.get(dir.path);
          }
          /**
           * Performs the necessary setup when a `FormArrayName` directive instance is added to the view.
           *
           * @param dir The `FormArrayName` directive instance.
           */

        }, {
          key: "addFormArray",
          value: function addFormArray(dir) {
            this._setUpFormContainer(dir);
          }
          /**
           * Performs the necessary cleanup when a `FormArrayName` directive instance is removed from the
           * view.
           *
           * @param dir The `FormArrayName` directive instance.
           */

        }, {
          key: "removeFormArray",
          value: function removeFormArray(dir) {
            this._cleanUpFormContainer(dir);
          }
          /**
           * @description
           * Retrieves the `FormArray` for a provided `FormArrayName` directive instance.
           *
           * @param dir The `FormArrayName` directive instance.
           */

        }, {
          key: "getFormArray",
          value: function getFormArray(dir) {
            return this.form.get(dir.path);
          }
          /**
           * Sets the new value for the provided `FormControlName` directive.
           *
           * @param dir The `FormControlName` directive instance.
           * @param value The new value for the directive's control.
           */

        }, {
          key: "updateModel",
          value: function updateModel(dir, value) {
            var ctrl = this.form.get(dir.path);
            ctrl.setValue(value);
          }
          /**
           * @description
           * Method called with the "submit" event is triggered on the form.
           * Triggers the `ngSubmit` emitter to emit the "submit" event as its payload.
           *
           * @param $event The "submit" event object
           */

        }, {
          key: "onSubmit",
          value: function onSubmit($event) {
            this.submitted = true;
            syncPendingControls(this.form, this.directives);
            this.ngSubmit.emit($event);
            return false;
          }
          /**
           * @description
           * Method called when the "reset" event is triggered on the form.
           */

        }, {
          key: "onReset",
          value: function onReset() {
            this.resetForm();
          }
          /**
           * @description
           * Resets the form to an initial value and resets its submitted status.
           *
           * @param value The new value for the form.
           */

        }, {
          key: "resetForm",
          value: function resetForm() {
            var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
            this.form.reset(value);
            this.submitted = false;
          }
          /** @internal */

        }, {
          key: "_updateDomValue",
          value: function _updateDomValue() {
            var _this478 = this;

            this.directives.forEach(function (dir) {
              var newCtrl = _this478.form.get(dir.path);

              if (dir.control !== newCtrl) {
                // Note: the value of the `dir.control` may not be defined, for example when it's a first
                // `FormControl` that is added to a `FormGroup` instance (via `addControl` call).
                cleanUpControl(dir.control || null, dir);
                if (newCtrl) setUpControl(newCtrl, dir);
                dir.control = newCtrl;
              }
            });

            this.form._updateTreeValidity({
              emitEvent: false
            });
          }
        }, {
          key: "_setUpFormContainer",
          value: function _setUpFormContainer(dir) {
            var ctrl = this.form.get(dir.path);
            setUpFormContainer(ctrl, dir); // NOTE: this operation looks unnecessary in case no new validators were added in
            // `setUpFormContainer` call. Consider updating this code to match the logic in
            // `_cleanUpFormContainer` function.

            ctrl.updateValueAndValidity({
              emitEvent: false
            });
          }
        }, {
          key: "_cleanUpFormContainer",
          value: function _cleanUpFormContainer(dir) {
            if (this.form) {
              var ctrl = this.form.get(dir.path);

              if (ctrl) {
                var isControlUpdated = cleanUpFormContainer(ctrl, dir);

                if (isControlUpdated) {
                  // Run validity check only in case a control was updated (i.e. view validators were
                  // removed) as removing view validators might cause validity to change.
                  ctrl.updateValueAndValidity({
                    emitEvent: false
                  });
                }
              }
            }
          }
        }, {
          key: "_updateRegistrations",
          value: function _updateRegistrations() {
            this.form._registerOnCollectionChange(this._onCollectionChange);

            if (this._oldForm) {
              this._oldForm._registerOnCollectionChange(function () {});
            }
          }
        }, {
          key: "_updateValidators",
          value: function _updateValidators() {
            setUpValidators(this.form, this,
            /* handleOnValidatorChange */
            false);

            if (this._oldForm) {
              cleanUpValidators(this._oldForm, this,
              /* handleOnValidatorChange */
              false);
            }
          }
        }, {
          key: "_checkFormPresent",
          value: function _checkFormPresent() {
            if (!this.form && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              ReactiveErrors.missingFormException();
            }
          }
        }]);

        return FormGroupDirective;
      }(ControlContainer);

      FormGroupDirective.ɵfac = function FormGroupDirective_Factory(t) {
        return new (t || FormGroupDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_VALIDATORS, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_ASYNC_VALIDATORS, 10));
      };

      FormGroupDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: FormGroupDirective,
        selectors: [["", "formGroup", ""]],
        hostBindings: function FormGroupDirective_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("submit", function FormGroupDirective_submit_HostBindingHandler($event) {
              return ctx.onSubmit($event);
            })("reset", function FormGroupDirective_reset_HostBindingHandler() {
              return ctx.onReset();
            });
          }
        },
        inputs: {
          form: ["formGroup", "form"]
        },
        outputs: {
          ngSubmit: "ngSubmit"
        },
        exportAs: ["ngForm"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([formDirectiveProvider$1]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
      });

      FormGroupDirective.ctorParameters = function () {
        return [{
          type: Array,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NG_VALIDATORS]
          }]
        }, {
          type: Array,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NG_ASYNC_VALIDATORS]
          }]
        }];
      };

      FormGroupDirective.propDecorators = {
        form: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['formGroup']
        }],
        ngSubmit: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FormGroupDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[formGroup]',
            providers: [formDirectiveProvider$1],
            host: {
              '(submit)': 'onSubmit($event)',
              '(reset)': 'onReset()'
            },
            exportAs: 'ngForm'
          }]
        }], function () {
          return [{
            type: Array,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NG_VALIDATORS]
            }]
          }, {
            type: Array,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NG_ASYNC_VALIDATORS]
            }]
          }];
        }, {
          form: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['formGroup']
          }],
          ngSubmit: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var formGroupNameProvider = {
        provide: ControlContainer,
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return FormGroupName;
        })
      };
      /**
       * @description
       *
       * Syncs a nested `FormGroup` to a DOM element.
       *
       * This directive can only be used with a parent `FormGroupDirective`.
       *
       * It accepts the string name of the nested `FormGroup` to link, and
       * looks for a `FormGroup` registered with that name in the parent
       * `FormGroup` instance you passed into `FormGroupDirective`.
       *
       * Use nested form groups to validate a sub-group of a
       * form separately from the rest or to group the values of certain
       * controls into their own nested object.
       *
       * @see [Reactive Forms Guide](guide/reactive-forms)
       *
       * @usageNotes
       *
       * ### Access the group by name
       *
       * The following example uses the {@link AbstractControl#get get} method to access the
       * associated `FormGroup`
       *
       * ```ts
       *   this.form.get('name');
       * ```
       *
       * ### Access individual controls in the group
       *
       * The following example uses the {@link AbstractControl#get get} method to access
       * individual controls within the group using dot syntax.
       *
       * ```ts
       *   this.form.get('name.first');
       * ```
       *
       * ### Register a nested `FormGroup`.
       *
       * The following example registers a nested *name* `FormGroup` within an existing `FormGroup`,
       * and provides methods to retrieve the nested `FormGroup` and individual controls.
       *
       * {@example forms/ts/nestedFormGroup/nested_form_group_example.ts region='Component'}
       *
       * @ngModule ReactiveFormsModule
       * @publicApi
       */

      var FormGroupName = /*#__PURE__*/function (_AbstractFormGroupDir2) {
        _inherits2(FormGroupName, _AbstractFormGroupDir2);

        var _super189 = _createSuper(FormGroupName);

        function FormGroupName(parent, validators, asyncValidators) {
          var _this479;

          _classCallCheck2(this, FormGroupName);

          _this479 = _super189.call(this);
          _this479._parent = parent;

          _this479._setValidators(validators);

          _this479._setAsyncValidators(asyncValidators);

          return _this479;
        }
        /** @internal */


        _createClass2(FormGroupName, [{
          key: "_checkParentType",
          value: function _checkParentType() {
            if (_hasInvalidParent(this._parent) && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              ReactiveErrors.groupParentException();
            }
          }
        }]);

        return FormGroupName;
      }(AbstractFormGroupDirective);

      FormGroupName.ɵfac = function FormGroupName_Factory(t) {
        return new (t || FormGroupName)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](ControlContainer, 13), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_VALIDATORS, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_ASYNC_VALIDATORS, 10));
      };

      FormGroupName.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: FormGroupName,
        selectors: [["", "formGroupName", ""]],
        inputs: {
          name: ["formGroupName", "name"]
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([formGroupNameProvider]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      FormGroupName.ctorParameters = function () {
        return [{
          type: ControlContainer,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
          }]
        }, {
          type: Array,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NG_VALIDATORS]
          }]
        }, {
          type: Array,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NG_ASYNC_VALIDATORS]
          }]
        }];
      };

      FormGroupName.propDecorators = {
        name: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['formGroupName']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FormGroupName, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[formGroupName]',
            providers: [formGroupNameProvider]
          }]
        }], function () {
          return [{
            type: ControlContainer,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
            }]
          }, {
            type: Array,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NG_VALIDATORS]
            }]
          }, {
            type: Array,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NG_ASYNC_VALIDATORS]
            }]
          }];
        }, {
          name: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['formGroupName']
          }]
        });
      })();

      var formArrayNameProvider = {
        provide: ControlContainer,
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return FormArrayName;
        })
      };
      /**
       * @description
       *
       * Syncs a nested `FormArray` to a DOM element.
       *
       * This directive is designed to be used with a parent `FormGroupDirective` (selector:
       * `[formGroup]`).
       *
       * It accepts the string name of the nested `FormArray` you want to link, and
       * will look for a `FormArray` registered with that name in the parent
       * `FormGroup` instance you passed into `FormGroupDirective`.
       *
       * @see [Reactive Forms Guide](guide/reactive-forms)
       * @see `AbstractControl`
       *
       * @usageNotes
       *
       * ### Example
       *
       * {@example forms/ts/nestedFormArray/nested_form_array_example.ts region='Component'}
       *
       * @ngModule ReactiveFormsModule
       * @publicApi
       */

      var FormArrayName = /*#__PURE__*/function (_ControlContainer4) {
        _inherits2(FormArrayName, _ControlContainer4);

        var _super190 = _createSuper(FormArrayName);

        function FormArrayName(parent, validators, asyncValidators) {
          var _this480;

          _classCallCheck2(this, FormArrayName);

          _this480 = _super190.call(this);
          _this480._parent = parent;

          _this480._setValidators(validators);

          _this480._setAsyncValidators(asyncValidators);

          return _this480;
        }
        /**
         * A lifecycle method called when the directive's inputs are initialized. For internal use only.
         * @throws If the directive does not have a valid parent.
         * @nodoc
         */


        _createClass2(FormArrayName, [{
          key: "ngOnInit",
          value: function ngOnInit() {
            this._checkParentType();

            this.formDirective.addFormArray(this);
          }
          /**
           * A lifecycle method called before the directive's instance is destroyed. For internal use only.
           * @nodoc
           */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            if (this.formDirective) {
              this.formDirective.removeFormArray(this);
            }
          }
          /**
           * @description
           * The `FormArray` bound to this directive.
           */

        }, {
          key: "control",
          get: function get() {
            return this.formDirective.getFormArray(this);
          }
          /**
           * @description
           * The top-level directive for this group if present, otherwise null.
           */

        }, {
          key: "formDirective",
          get: function get() {
            return this._parent ? this._parent.formDirective : null;
          }
          /**
           * @description
           * Returns an array that represents the path from the top-level form to this control.
           * Each index is the string name of the control on that level.
           */

        }, {
          key: "path",
          get: function get() {
            return controlPath(this.name == null ? this.name : this.name.toString(), this._parent);
          }
        }, {
          key: "_checkParentType",
          value: function _checkParentType() {
            if (_hasInvalidParent(this._parent) && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              ReactiveErrors.arrayParentException();
            }
          }
        }]);

        return FormArrayName;
      }(ControlContainer);

      FormArrayName.ɵfac = function FormArrayName_Factory(t) {
        return new (t || FormArrayName)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](ControlContainer, 13), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_VALIDATORS, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_ASYNC_VALIDATORS, 10));
      };

      FormArrayName.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: FormArrayName,
        selectors: [["", "formArrayName", ""]],
        inputs: {
          name: ["formArrayName", "name"]
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([formArrayNameProvider]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      FormArrayName.ctorParameters = function () {
        return [{
          type: ControlContainer,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
          }]
        }, {
          type: Array,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NG_VALIDATORS]
          }]
        }, {
          type: Array,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NG_ASYNC_VALIDATORS]
          }]
        }];
      };

      FormArrayName.propDecorators = {
        name: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['formArrayName']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FormArrayName, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[formArrayName]',
            providers: [formArrayNameProvider]
          }]
        }], function () {
          return [{
            type: ControlContainer,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
            }]
          }, {
            type: Array,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NG_VALIDATORS]
            }]
          }, {
            type: Array,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NG_ASYNC_VALIDATORS]
            }]
          }];
        }, {
          name: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['formArrayName']
          }]
        });
      })();

      function _hasInvalidParent(parent) {
        return !(parent instanceof FormGroupName) && !(parent instanceof FormGroupDirective) && !(parent instanceof FormArrayName);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var controlNameBinding = {
        provide: NgControl,
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return FormControlName;
        })
      };
      /**
       * @description
       * Syncs a `FormControl` in an existing `FormGroup` to a form control
       * element by name.
       *
       * @see [Reactive Forms Guide](guide/reactive-forms)
       * @see `FormControl`
       * @see `AbstractControl`
       *
       * @usageNotes
       *
       * ### Register `FormControl` within a group
       *
       * The following example shows how to register multiple form controls within a form group
       * and set their value.
       *
       * {@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}
       *
       * To see `formControlName` examples with different form control types, see:
       *
       * * Radio buttons: `RadioControlValueAccessor`
       * * Selects: `SelectControlValueAccessor`
       *
       * ### Use with ngModel is deprecated
       *
       * Support for using the `ngModel` input property and `ngModelChange` event with reactive
       * form directives has been deprecated in Angular v6 and is scheduled for removal in
       * a future version of Angular.
       *
       * For details, see [Deprecated features](guide/deprecations#ngmodel-with-reactive-forms).
       *
       * @ngModule ReactiveFormsModule
       * @publicApi
       */

      var FormControlName = /*#__PURE__*/function (_NgControl3) {
        _inherits2(FormControlName, _NgControl3);

        var _super191 = _createSuper(FormControlName);

        function FormControlName(parent, validators, asyncValidators, valueAccessors, _ngModelWarningConfig) {
          var _this481;

          _classCallCheck2(this, FormControlName);

          _this481 = _super191.call(this);
          _this481._ngModelWarningConfig = _ngModelWarningConfig;
          _this481._added = false;
          /** @deprecated as of v6 */

          _this481.update = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * @description
           * Instance property used to track whether an ngModel warning has been sent out for this
           * particular FormControlName instance. Used to support warning config of "always".
           *
           * @internal
           */

          _this481._ngModelWarningSent = false;
          _this481._parent = parent;

          _this481._setValidators(validators);

          _this481._setAsyncValidators(asyncValidators);

          _this481.valueAccessor = selectValueAccessor(_assertThisInitialized2(_this481), valueAccessors);
          return _this481;
        }
        /**
         * @description
         * Triggers a warning in dev mode that this input should not be used with reactive forms.
         */


        _createClass2(FormControlName, [{
          key: "isDisabled",
          set: function set(isDisabled) {
            if (typeof ngDevMode === 'undefined' || ngDevMode) {
              ReactiveErrors.disabledAttrWarning();
            }
          }
          /** @nodoc */

        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            if (!this._added) this._setUpControl();

            if (isPropertyUpdated(changes, this.viewModel)) {
              if (typeof ngDevMode === 'undefined' || ngDevMode) {
                _ngModelWarning('formControlName', FormControlName, this, this._ngModelWarningConfig);
              }

              this.viewModel = this.model;
              this.formDirective.updateModel(this, this.model);
            }
          }
          /** @nodoc */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            if (this.formDirective) {
              this.formDirective.removeControl(this);
            }
          }
          /**
           * @description
           * Sets the new value for the view model and emits an `ngModelChange` event.
           *
           * @param newValue The new value for the view model.
           */

        }, {
          key: "viewToModelUpdate",
          value: function viewToModelUpdate(newValue) {
            this.viewModel = newValue;
            this.update.emit(newValue);
          }
          /**
           * @description
           * Returns an array that represents the path from the top-level form to this control.
           * Each index is the string name of the control on that level.
           */

        }, {
          key: "path",
          get: function get() {
            return controlPath(this.name == null ? this.name : this.name.toString(), this._parent);
          }
          /**
           * @description
           * The top-level directive for this group if present, otherwise null.
           */

        }, {
          key: "formDirective",
          get: function get() {
            return this._parent ? this._parent.formDirective : null;
          }
        }, {
          key: "_checkParentType",
          value: function _checkParentType() {
            if (typeof ngDevMode === 'undefined' || ngDevMode) {
              if (!(this._parent instanceof FormGroupName) && this._parent instanceof AbstractFormGroupDirective) {
                ReactiveErrors.ngModelGroupException();
              } else if (!(this._parent instanceof FormGroupName) && !(this._parent instanceof FormGroupDirective) && !(this._parent instanceof FormArrayName)) {
                ReactiveErrors.controlParentException();
              }
            }
          }
        }, {
          key: "_setUpControl",
          value: function _setUpControl() {
            this._checkParentType();

            this.control = this.formDirective.addControl(this);

            if (this.control.disabled && this.valueAccessor.setDisabledState) {
              this.valueAccessor.setDisabledState(true);
            }

            this._added = true;
          }
        }]);

        return FormControlName;
      }(NgControl);

      FormControlName.ɵfac = function FormControlName_Factory(t) {
        return new (t || FormControlName)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](ControlContainer, 13), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_VALIDATORS, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_ASYNC_VALIDATORS, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_VALUE_ACCESSOR, 10), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NG_MODEL_WITH_FORM_CONTROL_WARNING, 8));
      };

      FormControlName.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: FormControlName,
        selectors: [["", "formControlName", ""]],
        inputs: {
          isDisabled: ["disabled", "isDisabled"],
          name: ["formControlName", "name"],
          model: ["ngModel", "model"]
        },
        outputs: {
          update: "ngModelChange"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([controlNameBinding]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
      });
      /**
       * @description
       * Static property used to track whether any ngModel warnings have been sent across
       * all instances of FormControlName. Used to support warning config of "once".
       *
       * @internal
       */

      FormControlName._ngModelWarningSentOnce = false;

      FormControlName.ctorParameters = function () {
        return [{
          type: ControlContainer,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
          }]
        }, {
          type: Array,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NG_VALIDATORS]
          }]
        }, {
          type: Array,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NG_ASYNC_VALIDATORS]
          }]
        }, {
          type: Array,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NG_VALUE_ACCESSOR]
          }]
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NG_MODEL_WITH_FORM_CONTROL_WARNING]
          }]
        }];
      };

      FormControlName.propDecorators = {
        name: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['formControlName']
        }],
        isDisabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['disabled']
        }],
        model: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['ngModel']
        }],
        update: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
          args: ['ngModelChange']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FormControlName, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[formControlName]',
            providers: [controlNameBinding]
          }]
        }], function () {
          return [{
            type: ControlContainer,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
            }]
          }, {
            type: Array,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NG_VALIDATORS]
            }]
          }, {
            type: Array,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NG_ASYNC_VALIDATORS]
            }]
          }, {
            type: Array,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Self"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NG_VALUE_ACCESSOR]
            }]
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NG_MODEL_WITH_FORM_CONTROL_WARNING]
            }]
          }];
        }, {
          update: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
            args: ['ngModelChange']
          }],
          isDisabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['disabled']
          }],
          name: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['formControlName']
          }],
          model: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['ngModel']
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A base class for Validator-based Directives. The class contains common logic shared across such
       * Directives.
       *
       * For internal use only, this class is not intended for use outside of the Forms package.
       */


      var AbstractValidatorDirective = /*#__PURE__*/function () {
        function AbstractValidatorDirective() {
          _classCallCheck2(this, AbstractValidatorDirective);

          this._validator = Validators.nullValidator;
        }
        /**
         * Helper function invoked from child classes to process changes (from `ngOnChanges` hook).
         * @nodoc
         */


        _createClass2(AbstractValidatorDirective, [{
          key: "handleChanges",
          value: function handleChanges(changes) {
            if (this.inputName in changes) {
              var input = this.normalizeInput(changes[this.inputName].currentValue);
              this._validator = this.createValidator(input);

              if (this._onChange) {
                this._onChange();
              }
            }
          }
          /** @nodoc */

        }, {
          key: "validate",
          value: function validate(control) {
            return this._validator(control);
          }
          /** @nodoc */

        }, {
          key: "registerOnValidatorChange",
          value: function registerOnValidatorChange(fn) {
            this._onChange = fn;
          }
        }]);

        return AbstractValidatorDirective;
      }();

      AbstractValidatorDirective.ɵfac = function AbstractValidatorDirective_Factory(t) {
        return new (t || AbstractValidatorDirective)();
      };

      AbstractValidatorDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: AbstractValidatorDirective
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](AbstractValidatorDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"]
        }], function () {
          return [];
        }, null);
      })();
      /**
       * @description
       * Provider which adds `MaxValidator` to the `NG_VALIDATORS` multi-provider list.
       */


      var MAX_VALIDATOR = {
        provide: NG_VALIDATORS,
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return MaxValidator;
        }),
        multi: true
      };
      /**
       * A directive which installs the {@link MaxValidator} for any `formControlName`,
       * `formControl`, or control with `ngModel` that also has a `max` attribute.
       *
       * @see [Form Validation](guide/form-validation)
       *
       * @usageNotes
       *
       * ### Adding a max validator
       *
       * The following example shows how to add a max validator to an input attached to an
       * ngModel binding.
       *
       * ```html
       * <input type="number" ngModel max="4">
       * ```
       *
       * @ngModule ReactiveFormsModule
       * @ngModule FormsModule
       * @publicApi
       */

      var MaxValidator = /*#__PURE__*/function (_AbstractValidatorDir) {
        _inherits2(MaxValidator, _AbstractValidatorDir);

        var _super192 = _createSuper(MaxValidator);

        function MaxValidator() {
          var _this482;

          _classCallCheck2(this, MaxValidator);

          _this482 = _super192.apply(this, arguments);
          /** @internal */

          _this482.inputName = 'max';
          /** @internal */

          _this482.normalizeInput = function (input) {
            return parseInt(input, 10);
          };
          /** @internal */


          _this482.createValidator = function (max) {
            return Validators.max(max);
          };

          return _this482;
        }
        /**
         * Declare `ngOnChanges` lifecycle hook at the main directive level (vs keeping it in base class)
         * to avoid differences in handling inheritance of lifecycle hooks between Ivy and ViewEngine in
         * AOT mode. This could be refactored once ViewEngine is removed.
         * @nodoc
         */


        _createClass2(MaxValidator, [{
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            this.handleChanges(changes);
          }
        }]);

        return MaxValidator;
      }(AbstractValidatorDirective);

      MaxValidator.ɵfac = function MaxValidator_Factory(t) {
        return ɵMaxValidator_BaseFactory(t || MaxValidator);
      };

      MaxValidator.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MaxValidator,
        selectors: [["input", "type", "number", "max", "", "formControlName", ""], ["input", "type", "number", "max", "", "formControl", ""], ["input", "type", "number", "max", "", "ngModel", ""]],
        hostVars: 1,
        hostBindings: function MaxValidator_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("max", ctx.max ? ctx.max : null);
          }
        },
        inputs: {
          max: "max"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([MAX_VALIDATOR]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
      });
      MaxValidator.propDecorators = {
        max: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      var ɵMaxValidator_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](MaxValidator);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MaxValidator, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]',
            providers: [MAX_VALIDATOR],
            host: {
              '[attr.max]': 'max ? max : null'
            }
          }]
        }], null, {
          max: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * @description
       * Provider which adds `MinValidator` to the `NG_VALIDATORS` multi-provider list.
       */


      var MIN_VALIDATOR = {
        provide: NG_VALIDATORS,
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return MinValidator;
        }),
        multi: true
      };
      /**
       * A directive which installs the {@link MinValidator} for any `formControlName`,
       * `formControl`, or control with `ngModel` that also has a `min` attribute.
       *
       * @see [Form Validation](guide/form-validation)
       *
       * @usageNotes
       *
       * ### Adding a min validator
       *
       * The following example shows how to add a min validator to an input attached to an
       * ngModel binding.
       *
       * ```html
       * <input type="number" ngModel min="4">
       * ```
       *
       * @ngModule ReactiveFormsModule
       * @ngModule FormsModule
       * @publicApi
       */

      var MinValidator = /*#__PURE__*/function (_AbstractValidatorDir2) {
        _inherits2(MinValidator, _AbstractValidatorDir2);

        var _super193 = _createSuper(MinValidator);

        function MinValidator() {
          var _this483;

          _classCallCheck2(this, MinValidator);

          _this483 = _super193.apply(this, arguments);
          /** @internal */

          _this483.inputName = 'min';
          /** @internal */

          _this483.normalizeInput = function (input) {
            return parseInt(input, 10);
          };
          /** @internal */


          _this483.createValidator = function (min) {
            return Validators.min(min);
          };

          return _this483;
        }
        /**
         * Declare `ngOnChanges` lifecycle hook at the main directive level (vs keeping it in base class)
         * to avoid differences in handling inheritance of lifecycle hooks between Ivy and ViewEngine in
         * AOT mode. This could be refactored once ViewEngine is removed.
         * @nodoc
         */


        _createClass2(MinValidator, [{
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            this.handleChanges(changes);
          }
        }]);

        return MinValidator;
      }(AbstractValidatorDirective);

      MinValidator.ɵfac = function MinValidator_Factory(t) {
        return ɵMinValidator_BaseFactory(t || MinValidator);
      };

      MinValidator.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MinValidator,
        selectors: [["input", "type", "number", "min", "", "formControlName", ""], ["input", "type", "number", "min", "", "formControl", ""], ["input", "type", "number", "min", "", "ngModel", ""]],
        hostVars: 1,
        hostBindings: function MinValidator_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("min", ctx.min ? ctx.min : null);
          }
        },
        inputs: {
          min: "min"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([MIN_VALIDATOR]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
      });
      MinValidator.propDecorators = {
        min: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      var ɵMinValidator_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](MinValidator);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MinValidator, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]',
            providers: [MIN_VALIDATOR],
            host: {
              '[attr.min]': 'min ? min : null'
            }
          }]
        }], null, {
          min: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * @description
       * Provider which adds `RequiredValidator` to the `NG_VALIDATORS` multi-provider list.
       */


      var REQUIRED_VALIDATOR = {
        provide: NG_VALIDATORS,
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return RequiredValidator;
        }),
        multi: true
      };
      /**
       * @description
       * Provider which adds `CheckboxRequiredValidator` to the `NG_VALIDATORS` multi-provider list.
       */

      var CHECKBOX_REQUIRED_VALIDATOR = {
        provide: NG_VALIDATORS,
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return CheckboxRequiredValidator;
        }),
        multi: true
      };
      /**
       * @description
       * A directive that adds the `required` validator to any controls marked with the
       * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.
       *
       * @see [Form Validation](guide/form-validation)
       *
       * @usageNotes
       *
       * ### Adding a required validator using template-driven forms
       *
       * ```
       * <input name="fullName" ngModel required>
       * ```
       *
       * @ngModule FormsModule
       * @ngModule ReactiveFormsModule
       * @publicApi
       */

      var RequiredValidator = /*#__PURE__*/function () {
        function RequiredValidator() {
          _classCallCheck2(this, RequiredValidator);

          this._required = false;
        }
        /**
         * @description
         * Tracks changes to the required attribute bound to this directive.
         */


        _createClass2(RequiredValidator, [{
          key: "required",
          get: function get() {
            return this._required;
          },
          set: function set(value) {
            this._required = value != null && value !== false && "".concat(value) !== 'false';
            if (this._onChange) this._onChange();
          }
          /**
           * Method that validates whether the control is empty.
           * Returns the validation result if enabled, otherwise null.
           * @nodoc
           */

        }, {
          key: "validate",
          value: function validate(control) {
            return this.required ? Validators.required(control) : null;
          }
          /**
           * Registers a callback function to call when the validator inputs change.
           * @nodoc
           */

        }, {
          key: "registerOnValidatorChange",
          value: function registerOnValidatorChange(fn) {
            this._onChange = fn;
          }
        }]);

        return RequiredValidator;
      }();

      RequiredValidator.ɵfac = function RequiredValidator_Factory(t) {
        return new (t || RequiredValidator)();
      };

      RequiredValidator.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: RequiredValidator,
        selectors: [["", "required", "", "formControlName", "", 3, "type", "checkbox"], ["", "required", "", "formControl", "", 3, "type", "checkbox"], ["", "required", "", "ngModel", "", 3, "type", "checkbox"]],
        hostVars: 1,
        hostBindings: function RequiredValidator_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("required", ctx.required ? "" : null);
          }
        },
        inputs: {
          required: "required"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([REQUIRED_VALIDATOR])]
      });
      RequiredValidator.propDecorators = {
        required: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](RequiredValidator, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: ':not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]',
            providers: [REQUIRED_VALIDATOR],
            host: {
              '[attr.required]': 'required ? "" : null'
            }
          }]
        }], function () {
          return [];
        }, {
          required: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * A Directive that adds the `required` validator to checkbox controls marked with the
       * `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.
       *
       * @see [Form Validation](guide/form-validation)
       *
       * @usageNotes
       *
       * ### Adding a required checkbox validator using template-driven forms
       *
       * The following example shows how to add a checkbox required validator to an input attached to an
       * ngModel binding.
       *
       * ```
       * <input type="checkbox" name="active" ngModel required>
       * ```
       *
       * @publicApi
       * @ngModule FormsModule
       * @ngModule ReactiveFormsModule
       */


      var CheckboxRequiredValidator = /*#__PURE__*/function (_RequiredValidator) {
        _inherits2(CheckboxRequiredValidator, _RequiredValidator);

        var _super194 = _createSuper(CheckboxRequiredValidator);

        function CheckboxRequiredValidator() {
          _classCallCheck2(this, CheckboxRequiredValidator);

          return _super194.apply(this, arguments);
        }

        _createClass2(CheckboxRequiredValidator, [{
          key: "validate",
          value:
          /**
           * Method that validates whether or not the checkbox has been checked.
           * Returns the validation result if enabled, otherwise null.
           * @nodoc
           */
          function validate(control) {
            return this.required ? Validators.requiredTrue(control) : null;
          }
        }]);

        return CheckboxRequiredValidator;
      }(RequiredValidator);

      CheckboxRequiredValidator.ɵfac = function CheckboxRequiredValidator_Factory(t) {
        return ɵCheckboxRequiredValidator_BaseFactory(t || CheckboxRequiredValidator);
      };

      CheckboxRequiredValidator.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: CheckboxRequiredValidator,
        selectors: [["input", "type", "checkbox", "required", "", "formControlName", ""], ["input", "type", "checkbox", "required", "", "formControl", ""], ["input", "type", "checkbox", "required", "", "ngModel", ""]],
        hostVars: 1,
        hostBindings: function CheckboxRequiredValidator_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("required", ctx.required ? "" : null);
          }
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([CHECKBOX_REQUIRED_VALIDATOR]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      var ɵCheckboxRequiredValidator_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](CheckboxRequiredValidator);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CheckboxRequiredValidator, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]',
            providers: [CHECKBOX_REQUIRED_VALIDATOR],
            host: {
              '[attr.required]': 'required ? "" : null'
            }
          }]
        }], null, null);
      })();
      /**
       * @description
       * Provider which adds `EmailValidator` to the `NG_VALIDATORS` multi-provider list.
       */


      var EMAIL_VALIDATOR = {
        provide: NG_VALIDATORS,
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return EmailValidator;
        }),
        multi: true
      };
      /**
       * A directive that adds the `email` validator to controls marked with the
       * `email` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.
       *
       * @see [Form Validation](guide/form-validation)
       *
       * @usageNotes
       *
       * ### Adding an email validator
       *
       * The following example shows how to add an email validator to an input attached to an ngModel
       * binding.
       *
       * ```
       * <input type="email" name="email" ngModel email>
       * <input type="email" name="email" ngModel email="true">
       * <input type="email" name="email" ngModel [email]="true">
       * ```
       *
       * @publicApi
       * @ngModule FormsModule
       * @ngModule ReactiveFormsModule
       */

      var EmailValidator = /*#__PURE__*/function () {
        function EmailValidator() {
          _classCallCheck2(this, EmailValidator);

          this._enabled = false;
        }
        /**
         * @description
         * Tracks changes to the email attribute bound to this directive.
         */


        _createClass2(EmailValidator, [{
          key: "email",
          set: function set(value) {
            this._enabled = value === '' || value === true || value === 'true';
            if (this._onChange) this._onChange();
          }
          /**
           * Method that validates whether an email address is valid.
           * Returns the validation result if enabled, otherwise null.
           * @nodoc
           */

        }, {
          key: "validate",
          value: function validate(control) {
            return this._enabled ? Validators.email(control) : null;
          }
          /**
           * Registers a callback function to call when the validator inputs change.
           * @nodoc
           */

        }, {
          key: "registerOnValidatorChange",
          value: function registerOnValidatorChange(fn) {
            this._onChange = fn;
          }
        }]);

        return EmailValidator;
      }();

      EmailValidator.ɵfac = function EmailValidator_Factory(t) {
        return new (t || EmailValidator)();
      };

      EmailValidator.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: EmailValidator,
        selectors: [["", "email", "", "formControlName", ""], ["", "email", "", "formControl", ""], ["", "email", "", "ngModel", ""]],
        inputs: {
          email: "email"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([EMAIL_VALIDATOR])]
      });
      EmailValidator.propDecorators = {
        email: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](EmailValidator, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[email][formControlName],[email][formControl],[email][ngModel]',
            providers: [EMAIL_VALIDATOR]
          }]
        }], function () {
          return [];
        }, {
          email: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * @description
       * Provider which adds `MinLengthValidator` to the `NG_VALIDATORS` multi-provider list.
       */


      var MIN_LENGTH_VALIDATOR = {
        provide: NG_VALIDATORS,
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return MinLengthValidator;
        }),
        multi: true
      };
      /**
       * A directive that adds minimum length validation to controls marked with the
       * `minlength` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.
       *
       * @see [Form Validation](guide/form-validation)
       *
       * @usageNotes
       *
       * ### Adding a minimum length validator
       *
       * The following example shows how to add a minimum length validator to an input attached to an
       * ngModel binding.
       *
       * ```html
       * <input name="firstName" ngModel minlength="4">
       * ```
       *
       * @ngModule ReactiveFormsModule
       * @ngModule FormsModule
       * @publicApi
       */

      var MinLengthValidator = /*#__PURE__*/function () {
        function MinLengthValidator() {
          _classCallCheck2(this, MinLengthValidator);

          this._validator = Validators.nullValidator;
        }
        /** @nodoc */


        _createClass2(MinLengthValidator, [{
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            if ('minlength' in changes) {
              this._createValidator();

              if (this._onChange) this._onChange();
            }
          }
          /**
           * Method that validates whether the value meets a minimum length requirement.
           * Returns the validation result if enabled, otherwise null.
           * @nodoc
           */

        }, {
          key: "validate",
          value: function validate(control) {
            return this.minlength == null ? null : this._validator(control);
          }
          /**
           * Registers a callback function to call when the validator inputs change.
           * @nodoc
           */

        }, {
          key: "registerOnValidatorChange",
          value: function registerOnValidatorChange(fn) {
            this._onChange = fn;
          }
        }, {
          key: "_createValidator",
          value: function _createValidator() {
            this._validator = Validators.minLength(typeof this.minlength === 'number' ? this.minlength : parseInt(this.minlength, 10));
          }
        }]);

        return MinLengthValidator;
      }();

      MinLengthValidator.ɵfac = function MinLengthValidator_Factory(t) {
        return new (t || MinLengthValidator)();
      };

      MinLengthValidator.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MinLengthValidator,
        selectors: [["", "minlength", "", "formControlName", ""], ["", "minlength", "", "formControl", ""], ["", "minlength", "", "ngModel", ""]],
        hostVars: 1,
        hostBindings: function MinLengthValidator_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("minlength", ctx.minlength ? ctx.minlength : null);
          }
        },
        inputs: {
          minlength: "minlength"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([MIN_LENGTH_VALIDATOR]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
      });
      MinLengthValidator.propDecorators = {
        minlength: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MinLengthValidator, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[minlength][formControlName],[minlength][formControl],[minlength][ngModel]',
            providers: [MIN_LENGTH_VALIDATOR],
            host: {
              '[attr.minlength]': 'minlength ? minlength : null'
            }
          }]
        }], function () {
          return [];
        }, {
          minlength: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * @description
       * Provider which adds `MaxLengthValidator` to the `NG_VALIDATORS` multi-provider list.
       */


      var MAX_LENGTH_VALIDATOR = {
        provide: NG_VALIDATORS,
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return MaxLengthValidator;
        }),
        multi: true
      };
      /**
       * A directive that adds max length validation to controls marked with the
       * `maxlength` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.
       *
       * @see [Form Validation](guide/form-validation)
       *
       * @usageNotes
       *
       * ### Adding a maximum length validator
       *
       * The following example shows how to add a maximum length validator to an input attached to an
       * ngModel binding.
       *
       * ```html
       * <input name="firstName" ngModel maxlength="25">
       * ```
       *
       * @ngModule ReactiveFormsModule
       * @ngModule FormsModule
       * @publicApi
       */

      var MaxLengthValidator = /*#__PURE__*/function () {
        function MaxLengthValidator() {
          _classCallCheck2(this, MaxLengthValidator);

          this._validator = Validators.nullValidator;
        }
        /** @nodoc */


        _createClass2(MaxLengthValidator, [{
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            if ('maxlength' in changes) {
              this._createValidator();

              if (this._onChange) this._onChange();
            }
          }
          /**
           * Method that validates whether the value exceeds the maximum length requirement.
           * @nodoc
           */

        }, {
          key: "validate",
          value: function validate(control) {
            return this.maxlength != null ? this._validator(control) : null;
          }
          /**
           * Registers a callback function to call when the validator inputs change.
           * @nodoc
           */

        }, {
          key: "registerOnValidatorChange",
          value: function registerOnValidatorChange(fn) {
            this._onChange = fn;
          }
        }, {
          key: "_createValidator",
          value: function _createValidator() {
            this._validator = Validators.maxLength(typeof this.maxlength === 'number' ? this.maxlength : parseInt(this.maxlength, 10));
          }
        }]);

        return MaxLengthValidator;
      }();

      MaxLengthValidator.ɵfac = function MaxLengthValidator_Factory(t) {
        return new (t || MaxLengthValidator)();
      };

      MaxLengthValidator.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MaxLengthValidator,
        selectors: [["", "maxlength", "", "formControlName", ""], ["", "maxlength", "", "formControl", ""], ["", "maxlength", "", "ngModel", ""]],
        hostVars: 1,
        hostBindings: function MaxLengthValidator_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("maxlength", ctx.maxlength ? ctx.maxlength : null);
          }
        },
        inputs: {
          maxlength: "maxlength"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([MAX_LENGTH_VALIDATOR]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
      });
      MaxLengthValidator.propDecorators = {
        maxlength: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MaxLengthValidator, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]',
            providers: [MAX_LENGTH_VALIDATOR],
            host: {
              '[attr.maxlength]': 'maxlength ? maxlength : null'
            }
          }]
        }], function () {
          return [];
        }, {
          maxlength: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * @description
       * Provider which adds `PatternValidator` to the `NG_VALIDATORS` multi-provider list.
       */


      var PATTERN_VALIDATOR = {
        provide: NG_VALIDATORS,
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return PatternValidator;
        }),
        multi: true
      };
      /**
       * @description
       * A directive that adds regex pattern validation to controls marked with the
       * `pattern` attribute. The regex must match the entire control value.
       * The directive is provided with the `NG_VALIDATORS` multi-provider list.
       *
       * @see [Form Validation](guide/form-validation)
       *
       * @usageNotes
       *
       * ### Adding a pattern validator
       *
       * The following example shows how to add a pattern validator to an input attached to an
       * ngModel binding.
       *
       * ```html
       * <input name="firstName" ngModel pattern="[a-zA-Z ]*">
       * ```
       *
       * @ngModule ReactiveFormsModule
       * @ngModule FormsModule
       * @publicApi
       */

      var PatternValidator = /*#__PURE__*/function () {
        function PatternValidator() {
          _classCallCheck2(this, PatternValidator);

          this._validator = Validators.nullValidator;
        }
        /** @nodoc */


        _createClass2(PatternValidator, [{
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            if ('pattern' in changes) {
              this._createValidator();

              if (this._onChange) this._onChange();
            }
          }
          /**
           * Method that validates whether the value matches the pattern requirement.
           * @nodoc
           */

        }, {
          key: "validate",
          value: function validate(control) {
            return this._validator(control);
          }
          /**
           * Registers a callback function to call when the validator inputs change.
           * @nodoc
           */

        }, {
          key: "registerOnValidatorChange",
          value: function registerOnValidatorChange(fn) {
            this._onChange = fn;
          }
        }, {
          key: "_createValidator",
          value: function _createValidator() {
            this._validator = Validators.pattern(this.pattern);
          }
        }]);

        return PatternValidator;
      }();

      PatternValidator.ɵfac = function PatternValidator_Factory(t) {
        return new (t || PatternValidator)();
      };

      PatternValidator.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: PatternValidator,
        selectors: [["", "pattern", "", "formControlName", ""], ["", "pattern", "", "formControl", ""], ["", "pattern", "", "ngModel", ""]],
        hostVars: 1,
        hostBindings: function PatternValidator_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("pattern", ctx.pattern ? ctx.pattern : null);
          }
        },
        inputs: {
          pattern: "pattern"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([PATTERN_VALIDATOR]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
      });
      PatternValidator.propDecorators = {
        pattern: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](PatternValidator, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[pattern][formControlName],[pattern][formControl],[pattern][ngModel]',
            providers: [PATTERN_VALIDATOR],
            host: {
              '[attr.pattern]': 'pattern ? pattern : null'
            }
          }]
        }], function () {
          return [];
        }, {
          pattern: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var SHARED_FORM_DIRECTIVES = [ɵNgNoValidate, NgSelectOption, ɵNgSelectMultipleOption, DefaultValueAccessor, NumberValueAccessor, RangeValueAccessor, CheckboxControlValueAccessor, SelectControlValueAccessor, SelectMultipleControlValueAccessor, RadioControlValueAccessor, NgControlStatus, NgControlStatusGroup, RequiredValidator, MinLengthValidator, MaxLengthValidator, PatternValidator, CheckboxRequiredValidator, EmailValidator, MinValidator, MaxValidator];
      var TEMPLATE_DRIVEN_DIRECTIVES = [NgModel, NgModelGroup, NgForm];
      var REACTIVE_DRIVEN_DIRECTIVES = [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName];
      /**
       * Internal module used for sharing directives between FormsModule and ReactiveFormsModule
       */

      var ɵInternalFormsSharedModule = function ɵInternalFormsSharedModule() {
        _classCallCheck2(this, ɵInternalFormsSharedModule);
      };

      ɵInternalFormsSharedModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: ɵInternalFormsSharedModule
      });
      ɵInternalFormsSharedModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function ɵInternalFormsSharedModule_Factory(t) {
          return new (t || ɵInternalFormsSharedModule)();
        }
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](ɵInternalFormsSharedModule, {
          declarations: [ɵNgNoValidate, NgSelectOption, ɵNgSelectMultipleOption, DefaultValueAccessor, NumberValueAccessor, RangeValueAccessor, CheckboxControlValueAccessor, SelectControlValueAccessor, SelectMultipleControlValueAccessor, RadioControlValueAccessor, NgControlStatus, NgControlStatusGroup, RequiredValidator, MinLengthValidator, MaxLengthValidator, PatternValidator, CheckboxRequiredValidator, EmailValidator, MinValidator, MaxValidator],
          exports: [ɵNgNoValidate, NgSelectOption, ɵNgSelectMultipleOption, DefaultValueAccessor, NumberValueAccessor, RangeValueAccessor, CheckboxControlValueAccessor, SelectControlValueAccessor, SelectMultipleControlValueAccessor, RadioControlValueAccessor, NgControlStatus, NgControlStatusGroup, RequiredValidator, MinLengthValidator, MaxLengthValidator, PatternValidator, CheckboxRequiredValidator, EmailValidator, MinValidator, MaxValidator]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ɵInternalFormsSharedModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            declarations: SHARED_FORM_DIRECTIVES,
            exports: SHARED_FORM_DIRECTIVES
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function isAbstractControlOptions(options) {
        return options.asyncValidators !== undefined || options.validators !== undefined || options.updateOn !== undefined;
      }
      /**
       * @description
       * Creates an `AbstractControl` from a user-specified configuration.
       *
       * The `FormBuilder` provides syntactic sugar that shortens creating instances of a `FormControl`,
       * `FormGroup`, or `FormArray`. It reduces the amount of boilerplate needed to build complex
       * forms.
       *
       * @see [Reactive Forms Guide](/guide/reactive-forms)
       *
       * @publicApi
       */


      var FormBuilder = /*#__PURE__*/function () {
        function FormBuilder() {
          _classCallCheck2(this, FormBuilder);
        }

        _createClass2(FormBuilder, [{
          key: "group",
          value: function group(controlsConfig) {
            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;

            var controls = this._reduceControls(controlsConfig);

            var validators = null;
            var asyncValidators = null;
            var updateOn = undefined;

            if (options != null) {
              if (isAbstractControlOptions(options)) {
                // `options` are `AbstractControlOptions`
                validators = options.validators != null ? options.validators : null;
                asyncValidators = options.asyncValidators != null ? options.asyncValidators : null;
                updateOn = options.updateOn != null ? options.updateOn : undefined;
              } else {
                // `options` are legacy form group options
                validators = options['validator'] != null ? options['validator'] : null;
                asyncValidators = options['asyncValidator'] != null ? options['asyncValidator'] : null;
              }
            }

            return new FormGroup(controls, {
              asyncValidators: asyncValidators,
              updateOn: updateOn,
              validators: validators
            });
          }
          /**
           * @description
           * Construct a new `FormControl` with the given state, validators and options.
           *
           * @param formState Initializes the control with an initial state value, or
           * with an object that contains both a value and a disabled status.
           *
           * @param validatorOrOpts A synchronous validator function, or an array of
           * such functions, or an `AbstractControlOptions` object that contains
           * validation functions and a validation trigger.
           *
           * @param asyncValidator A single async validator or array of async validator
           * functions.
           *
           * @usageNotes
           *
           * ### Initialize a control as disabled
           *
           * The following example returns a control with an initial value in a disabled state.
           *
           * <code-example path="forms/ts/formBuilder/form_builder_example.ts" region="disabled-control">
           * </code-example>
           */

        }, {
          key: "control",
          value: function control(formState, validatorOrOpts, asyncValidator) {
            return new FormControl(formState, validatorOrOpts, asyncValidator);
          }
          /**
           * Constructs a new `FormArray` from the given array of configurations,
           * validators and options.
           *
           * @param controlsConfig An array of child controls or control configs. Each
           * child control is given an index when it is registered.
           *
           * @param validatorOrOpts A synchronous validator function, or an array of
           * such functions, or an `AbstractControlOptions` object that contains
           * validation functions and a validation trigger.
           *
           * @param asyncValidator A single async validator or array of async validator
           * functions.
           */

        }, {
          key: "array",
          value: function array(controlsConfig, validatorOrOpts, asyncValidator) {
            var _this484 = this;

            var controls = controlsConfig.map(function (c) {
              return _this484._createControl(c);
            });
            return new FormArray(controls, validatorOrOpts, asyncValidator);
          }
          /** @internal */

        }, {
          key: "_reduceControls",
          value: function _reduceControls(controlsConfig) {
            var _this485 = this;

            var controls = {};
            Object.keys(controlsConfig).forEach(function (controlName) {
              controls[controlName] = _this485._createControl(controlsConfig[controlName]);
            });
            return controls;
          }
          /** @internal */

        }, {
          key: "_createControl",
          value: function _createControl(controlConfig) {
            if (controlConfig instanceof FormControl || controlConfig instanceof FormGroup || controlConfig instanceof FormArray) {
              return controlConfig;
            } else if (Array.isArray(controlConfig)) {
              var value = controlConfig[0];
              var validator = controlConfig.length > 1 ? controlConfig[1] : null;
              var asyncValidator = controlConfig.length > 2 ? controlConfig[2] : null;
              return this.control(value, validator, asyncValidator);
            } else {
              return this.control(controlConfig);
            }
          }
        }]);

        return FormBuilder;
      }();

      FormBuilder.ɵfac = function FormBuilder_Factory(t) {
        return new (t || FormBuilder)();
      };

      FormBuilder.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: FormBuilder,
        factory: FormBuilder.ɵfac
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FormBuilder, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @publicApi
       */


      var VERSION = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["Version"]('12.0.0-next.1');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Exports the required providers and directives for template-driven forms,
       * making them available for import by NgModules that import this module.
       *
       * @see [Forms Overview](/guide/forms-overview)
       * @see [Template-driven Forms Guide](/guide/forms)
       *
       * @publicApi
       */

      var FormsModule = function FormsModule() {
        _classCallCheck2(this, FormsModule);
      };

      FormsModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: FormsModule
      });
      FormsModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function FormsModule_Factory(t) {
          return new (t || FormsModule)();
        },
        providers: [RadioControlRegistry],
        imports: [ɵInternalFormsSharedModule]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](FormsModule, {
          declarations: [NgModel, NgModelGroup, NgForm],
          exports: [ɵInternalFormsSharedModule, NgModel, NgModelGroup, NgForm]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FormsModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            declarations: TEMPLATE_DRIVEN_DIRECTIVES,
            providers: [RadioControlRegistry],
            exports: [ɵInternalFormsSharedModule, TEMPLATE_DRIVEN_DIRECTIVES]
          }]
        }], null, null);
      })();
      /**
       * Exports the required infrastructure and directives for reactive forms,
       * making them available for import by NgModules that import this module.
       *
       * @see [Forms Overview](guide/forms-overview)
       * @see [Reactive Forms Guide](guide/reactive-forms)
       *
       * @publicApi
       */


      var ReactiveFormsModule = /*#__PURE__*/function () {
        function ReactiveFormsModule() {
          _classCallCheck2(this, ReactiveFormsModule);
        }

        _createClass2(ReactiveFormsModule, null, [{
          key: "withConfig",
          value:
          /**
           * @description
           * Provides options for configuring the reactive forms module.
           *
           * @param opts An object of configuration options
           * * `warnOnNgModelWithFormControl` Configures when to emit a warning when an `ngModel`
           * binding is used with reactive form directives.
           */
          function withConfig(opts) {
            return {
              ngModule: ReactiveFormsModule,
              providers: [{
                provide: NG_MODEL_WITH_FORM_CONTROL_WARNING,
                useValue: opts.warnOnNgModelWithFormControl
              }]
            };
          }
        }]);

        return ReactiveFormsModule;
      }();

      ReactiveFormsModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: ReactiveFormsModule
      });
      ReactiveFormsModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function ReactiveFormsModule_Factory(t) {
          return new (t || ReactiveFormsModule)();
        },
        providers: [FormBuilder, RadioControlRegistry],
        imports: [ɵInternalFormsSharedModule]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](ReactiveFormsModule, {
          declarations: [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName],
          exports: [ɵInternalFormsSharedModule, FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ReactiveFormsModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            declarations: [REACTIVE_DRIVEN_DIRECTIVES],
            providers: [FormBuilder, RadioControlRegistry],
            exports: [ɵInternalFormsSharedModule, REACTIVE_DRIVEN_DIRECTIVES]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // This file only reexports content of the `src` folder. Keep it that way.

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=forms.js.map

      /***/

    },

    /***/
    "3UD+":
    /*!*******************************************!*\
      !*** (webpack)/buildin/harmony-module.js ***!
      \*******************************************/

    /*! no static exports found */

    /***/
    function UD(module, exports) {
      module.exports = function (originalModule) {
        if (!originalModule.webpackPolyfill) {
          var module = Object.create(originalModule); // module.parent = undefined by default

          if (!module.children) module.children = [];
          Object.defineProperty(module, "loaded", {
            enumerable: true,
            get: function get() {
              return module.l;
            }
          });
          Object.defineProperty(module, "id", {
            enumerable: true,
            get: function get() {
              return module.i;
            }
          });
          Object.defineProperty(module, "exports", {
            enumerable: true
          });
          module.webpackPolyfill = 1;
        }

        return module;
      };
      /***/

    },

    /***/
    "3UWI":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/auditTime.js ***!
      \********************************************************************/

    /*! exports provided: auditTime */

    /***/
    function UWI(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "auditTime", function () {
        return auditTime;
      });
      /* harmony import */


      var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../scheduler/async */
      "D0XW");
      /* harmony import */


      var _audit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./audit */
      "tnsW");
      /* harmony import */


      var _observable_timer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../observable/timer */
      "PqYM");

      function auditTime(duration) {
        var scheduler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"];
        return Object(_audit__WEBPACK_IMPORTED_MODULE_1__["audit"])(function () {
          return Object(_observable_timer__WEBPACK_IMPORTED_MODULE_2__["timer"])(duration, scheduler);
        });
      } //# sourceMappingURL=auditTime.js.map

      /***/

    },

    /***/
    "3XJ7":
    /*!*************************************************************************************************************!*\
      !*** ./node_modules/ngx-bootstrap/__ivy_ngcc__/component-loader/fesm2015/ngx-bootstrap-component-loader.js ***!
      \*************************************************************************************************************/

    /*! exports provided: BsComponentRef, ComponentLoader, ComponentLoaderFactory, ContentRef */

    /***/
    function XJ7(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BsComponentRef", function () {
        return BsComponentRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ComponentLoader", function () {
        return ComponentLoader;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ComponentLoaderFactory", function () {
        return ComponentLoaderFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ContentRef", function () {
        return ContentRef;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var ngx_bootstrap_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ngx-bootstrap/utils */
      "lUod");
      /* harmony import */


      var ngx_bootstrap_positioning__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ngx-bootstrap/positioning */
      "WyaX");
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @template T
       */


      var BsComponentRef = function BsComponentRef() {
        _classCallCheck2(this, BsComponentRef);
      };

      if (false) {}
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @copyright Valor Software
       * @copyright Angular ng-bootstrap team
       */


      var ContentRef =
      /**
       * @param {?} nodes
       * @param {?=} viewRef
       * @param {?=} componentRef
       */
      function ContentRef(
      /* tslint:disable-next-line: no-any */
      nodes, viewRef,
      /* tslint:disable-next-line: no-any */
      componentRef) {
        _classCallCheck2(this, ContentRef);

        this.nodes = nodes;
        this.viewRef = viewRef;
        this.componentRef = componentRef;
      };

      if (false) {}
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @template T
       */


      var ComponentLoader = /*#__PURE__*/function () {
        /**
         * Do not use this directly, it should be instanced via
         * `ComponentLoadFactory.attach`
         * \@internal
         * @param {?} _viewContainerRef
         * @param {?} _renderer
         * @param {?} _elementRef
         * @param {?} _injector
         * @param {?} _componentFactoryResolver
         * @param {?} _ngZone
         * @param {?} _applicationRef
         * @param {?} _posService
         */
        // tslint:disable-next-line
        function ComponentLoader(_viewContainerRef, _renderer, _elementRef, _injector, _componentFactoryResolver, _ngZone, _applicationRef, _posService) {
          _classCallCheck2(this, ComponentLoader);

          this._viewContainerRef = _viewContainerRef;
          this._renderer = _renderer;
          this._elementRef = _elementRef;
          this._injector = _injector;
          this._componentFactoryResolver = _componentFactoryResolver;
          this._ngZone = _ngZone;
          this._applicationRef = _applicationRef;
          this._posService = _posService;
          this.onBeforeShow = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /* tslint:disable-next-line: no-any*/

          this.onShown = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /* tslint:disable-next-line: no-any*/

          this.onBeforeHide = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.onHidden = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this._providers = [];
          this._isHiding = false;
          /**
           * A selector used if container element was not found
           */

          this.containerDefaultSelector = 'body';
          this._listenOpts = {};
          this._globalListener = Function.prototype;
        }
        /**
         * @return {?}
         */


        _createClass2(ComponentLoader, [{
          key: "isShown",
          get: function get() {
            if (this._isHiding) {
              return false;
            }

            return !!this._componentRef;
          }
          /**
           * @param {?} compType
           * @return {?}
           */

        }, {
          key: "attach",
          value: function attach(compType) {
            this._componentFactory = this._componentFactoryResolver.resolveComponentFactory(compType);
            return this;
          } // todo: add behaviour: to target element, `body`, custom element

          /**
           * @param {?=} container
           * @return {?}
           */

        }, {
          key: "to",
          value: function to(container) {
            this.container = container || this.container;
            return this;
          }
          /**
           * @param {?=} opts
           * @return {?}
           */

        }, {
          key: "position",
          value: function position(opts) {
            this.attachment = opts.attachment || this.attachment;
            /* tslint:disable-next-line: no-unnecessary-type-assertion */

            this._elementRef =
            /** @type {?} */
            opts.target || this._elementRef;
            return this;
          }
          /**
           * @param {?} provider
           * @return {?}
           */

        }, {
          key: "provide",
          value: function provide(provider) {
            this._providers.push(provider);

            return this;
          } // todo: appendChild to element or document.querySelector(this.container)

          /**
           * @param {?=} opts
           * @return {?}
           */

        }, {
          key: "show",
          value: function show() {
            var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

            this._subscribePositioning();

            this._innerComponent = null;

            if (!this._componentRef) {
              this.onBeforeShow.emit();
              this._contentRef = this._getContentRef(opts.content, opts.context, opts.initialState);
              /** @type {?} */

              var injector = _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"].create({
                providers: this._providers,
                parent: this._injector
              });

              this._componentRef = this._componentFactory.create(injector, this._contentRef.nodes);

              this._applicationRef.attachView(this._componentRef.hostView); // this._componentRef = this._viewContainerRef
              //   .createComponent(this._componentFactory, 0, injector, this._contentRef.nodes);


              this.instance = this._componentRef.instance;
              Object.assign(this._componentRef.instance, opts);

              if (this.container instanceof _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]) {
                this.container.nativeElement.appendChild(this._componentRef.location.nativeElement);
              }

              if (typeof this.container === 'string' && typeof document !== 'undefined') {
                /** @type {?} */
                var selectedElement = document.querySelector(this.container) || document.querySelector(this.containerDefaultSelector);
                selectedElement.appendChild(this._componentRef.location.nativeElement);
              }

              if (!this.container && this._elementRef && this._elementRef.nativeElement.parentElement) {
                this._elementRef.nativeElement.parentElement.appendChild(this._componentRef.location.nativeElement);
              } // we need to manually invoke change detection since events registered
              // via
              // Renderer::listen() are not picked up by change detection with the
              // OnPush strategy


              if (this._contentRef.componentRef) {
                this._innerComponent = this._contentRef.componentRef.instance;

                this._contentRef.componentRef.changeDetectorRef.markForCheck();

                this._contentRef.componentRef.changeDetectorRef.detectChanges();
              }

              this._componentRef.changeDetectorRef.markForCheck();

              this._componentRef.changeDetectorRef.detectChanges();

              this.onShown.emit(this._componentRef.instance);
            }

            this._registerOutsideClick();

            return this._componentRef;
          }
          /**
           * @return {?}
           */

        }, {
          key: "hide",
          value: function hide() {
            if (!this._componentRef) {
              return this;
            }

            this._posService.deletePositionElement(this._componentRef.location);

            this.onBeforeHide.emit(this._componentRef.instance);
            /** @type {?} */

            var componentEl = this._componentRef.location.nativeElement;
            componentEl.parentNode.removeChild(componentEl);

            if (this._contentRef.componentRef) {
              this._contentRef.componentRef.destroy();
            }

            this._componentRef.destroy();

            if (this._viewContainerRef && this._contentRef.viewRef) {
              this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._contentRef.viewRef));
            }

            if (this._contentRef.viewRef) {
              this._contentRef.viewRef.destroy();
            }

            this._contentRef = null;
            this._componentRef = null;

            this._removeGlobalListener();

            this.onHidden.emit();
            return this;
          }
          /**
           * @return {?}
           */

        }, {
          key: "toggle",
          value: function toggle() {
            if (this.isShown) {
              this.hide();
              return;
            }

            this.show();
          }
          /**
           * @return {?}
           */

        }, {
          key: "dispose",
          value: function dispose() {
            if (this.isShown) {
              this.hide();
            }

            this._unsubscribePositioning();

            if (this._unregisterListenersFn) {
              this._unregisterListenersFn();
            }
          }
          /**
           * @param {?} listenOpts
           * @return {?}
           */

        }, {
          key: "listen",
          value: function listen(listenOpts) {
            var _this486 = this;

            this.triggers = listenOpts.triggers || this.triggers;
            this._listenOpts.outsideClick = listenOpts.outsideClick;
            this._listenOpts.outsideEsc = listenOpts.outsideEsc;
            listenOpts.target = listenOpts.target || this._elementRef.nativeElement;
            /** @type {?} */

            var hide = this._listenOpts.hide =
            /**
            * @return {?}
            */
            function () {
              return listenOpts.hide ? listenOpts.hide() : void _this486.hide();
            };
            /** @type {?} */


            var show = this._listenOpts.show =
            /**
            * @param {?} registerHide
            * @return {?}
            */
            function (registerHide) {
              listenOpts.show ? listenOpts.show(registerHide) : _this486.show(registerHide);
              registerHide();
            };
            /** @type {?} */


            var toggle =
            /**
            * @param {?} registerHide
            * @return {?}
            */
            function toggle(registerHide) {
              _this486.isShown ? hide() : show(registerHide);
            };

            this._unregisterListenersFn = Object(ngx_bootstrap_utils__WEBPACK_IMPORTED_MODULE_1__["listenToTriggersV2"])(this._renderer, {
              target: listenOpts.target,
              triggers: listenOpts.triggers,
              show: show,
              hide: hide,
              toggle: toggle
            });
            return this;
          }
          /**
           * @return {?}
           */

        }, {
          key: "_removeGlobalListener",
          value: function _removeGlobalListener() {
            if (this._globalListener) {
              this._globalListener();

              this._globalListener = null;
            }
          }
          /**
           * @param {?} vRef
           * @param {?} template
           * @return {?}
           */

        }, {
          key: "attachInline",
          value: function attachInline(vRef,
          /* tslint:disable-next-line: no-any*/
          template) {
            this._inlineViewRef = vRef.createEmbeddedView(template);
            return this;
          }
          /**
           * @return {?}
           */

        }, {
          key: "_registerOutsideClick",
          value: function _registerOutsideClick() {
            var _this487 = this;

            if (!this._componentRef || !this._componentRef.location) {
              return;
            } // why: should run after first event bubble


            if (this._listenOpts.outsideClick) {
              /** @type {?} */
              var target = this._componentRef.location.nativeElement;
              setTimeout(
              /**
              * @return {?}
              */
              function () {
                _this487._globalListener = Object(ngx_bootstrap_utils__WEBPACK_IMPORTED_MODULE_1__["registerOutsideClick"])(_this487._renderer, {
                  targets: [target, _this487._elementRef.nativeElement],
                  outsideClick: _this487._listenOpts.outsideClick,
                  hide:
                  /**
                  * @return {?}
                  */
                  function hide() {
                    return _this487._listenOpts.hide();
                  }
                });
              });
            }

            if (this._listenOpts.outsideEsc) {
              /** @type {?} */
              var _target2 = this._componentRef.location.nativeElement;
              this._globalListener = Object(ngx_bootstrap_utils__WEBPACK_IMPORTED_MODULE_1__["registerEscClick"])(this._renderer, {
                targets: [_target2, this._elementRef.nativeElement],
                outsideEsc: this._listenOpts.outsideEsc,
                hide:
                /**
                * @return {?}
                */
                function hide() {
                  return _this487._listenOpts.hide();
                }
              });
            }
          }
          /**
           * @return {?}
           */

        }, {
          key: "getInnerComponent",
          value: function getInnerComponent() {
            return this._innerComponent;
          }
          /**
           * @private
           * @return {?}
           */

        }, {
          key: "_subscribePositioning",
          value: function _subscribePositioning() {
            var _this488 = this;

            if (this._zoneSubscription || !this.attachment) {
              return;
            }

            this.onShown.subscribe(
            /**
            * @return {?}
            */
            function () {
              _this488._posService.position({
                element: _this488._componentRef.location,
                target: _this488._elementRef,
                attachment: _this488.attachment,
                appendToBody: _this488.container === 'body'
              });
            });
            this._zoneSubscription = this._ngZone.onStable.subscribe(
            /**
            * @return {?}
            */
            function () {
              if (!_this488._componentRef) {
                return;
              }

              _this488._posService.calcPosition();
            });
          }
          /**
           * @private
           * @return {?}
           */

        }, {
          key: "_unsubscribePositioning",
          value: function _unsubscribePositioning() {
            if (!this._zoneSubscription) {
              return;
            }

            this._zoneSubscription.unsubscribe();

            this._zoneSubscription = null;
          }
          /**
           * @private
           * @param {?} content
           * @param {?=} context
           * @param {?=} initialState
           * @return {?}
           */

        }, {
          key: "_getContentRef",
          value: function _getContentRef(
          /* tslint:disable-next-line: no-any*/
          content,
          /* tslint:disable-next-line: no-any*/
          context,
          /* tslint:disable-next-line: no-any*/
          initialState) {
            if (!content) {
              return new ContentRef([]);
            }

            if (content instanceof _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]) {
              if (this._viewContainerRef) {
                /** @type {?} */
                var _viewRef = this._viewContainerRef.createEmbeddedView(content, context);

                _viewRef.markForCheck();

                return new ContentRef([_viewRef.rootNodes], _viewRef);
              }
              /** @type {?} */


              var viewRef = content.createEmbeddedView({});

              this._applicationRef.attachView(viewRef);

              return new ContentRef([viewRef.rootNodes], viewRef);
            }

            if (typeof content === 'function') {
              /** @type {?} */
              var contentCmptFactory = this._componentFactoryResolver.resolveComponentFactory(content);
              /** @type {?} */


              var modalContentInjector = _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"].create({
                providers: this._providers,
                parent: this._injector
              });
              /** @type {?} */


              var componentRef = contentCmptFactory.create(modalContentInjector);
              Object.assign(componentRef.instance, initialState);

              this._applicationRef.attachView(componentRef.hostView);

              return new ContentRef([[componentRef.location.nativeElement]], componentRef.hostView, componentRef);
            }

            return new ContentRef([[this._renderer.createText("".concat(content))]]);
          }
        }]);

        return ComponentLoader;
      }();

      if (false) {}
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var ComponentLoaderFactory = /*#__PURE__*/function () {
        /**
         * @param {?} _componentFactoryResolver
         * @param {?} _ngZone
         * @param {?} _injector
         * @param {?} _posService
         * @param {?} _applicationRef
         */
        function ComponentLoaderFactory(_componentFactoryResolver, _ngZone, _injector, _posService, _applicationRef) {
          _classCallCheck2(this, ComponentLoaderFactory);

          this._componentFactoryResolver = _componentFactoryResolver;
          this._ngZone = _ngZone;
          this._injector = _injector;
          this._posService = _posService;
          this._applicationRef = _applicationRef;
        }
        /**
         *
         * @template T
         * @param {?} _elementRef
         * @param {?} _viewContainerRef
         * @param {?} _renderer
         * @return {?}
         */


        _createClass2(ComponentLoaderFactory, [{
          key: "createLoader",
          value: function createLoader(_elementRef, _viewContainerRef, _renderer) {
            return new ComponentLoader(_viewContainerRef, _renderer, _elementRef, this._injector, this._componentFactoryResolver, this._ngZone, this._applicationRef, this._posService);
          }
        }]);

        return ComponentLoaderFactory;
      }();

      ComponentLoaderFactory.ɵfac = function ComponentLoaderFactory_Factory(t) {
        return new (t || ComponentLoaderFactory)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](ngx_bootstrap_positioning__WEBPACK_IMPORTED_MODULE_2__["PositioningService"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"]));
      };

      ComponentLoaderFactory.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: ComponentLoaderFactory,
        factory: ComponentLoaderFactory.ɵfac
      });
      /** @nocollapse */

      ComponentLoaderFactory.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]
        }, {
          type: ngx_bootstrap_positioning__WEBPACK_IMPORTED_MODULE_2__["PositioningService"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ComponentLoaderFactory, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]
          }, {
            type: ngx_bootstrap_positioning__WEBPACK_IMPORTED_MODULE_2__["PositioningService"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"]
          }];
        }, null);
      })();

      if (false) {}
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */
      //# sourceMappingURL=ngx-bootstrap-component-loader.js.map

      /***/

    },

    /***/
    "3ijt":
    /*!*************************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/timer-box.component.js ***!
      \*************************************************************************************/

    /*! exports provided: OwlTimerBoxComponent */

    /***/
    function ijt(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OwlTimerBoxComponent", function () {
        return OwlTimerBoxComponent;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _numberedFixLen_pipe__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./numberedFixLen.pipe */
      "l6fG");
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");

      function OwlTimerBoxComponent_div_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div", 10);
        }
      }

      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var __metadata = undefined && undefined.__metadata || function (k, v) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
      };

      var OwlTimerBoxComponent = function () {
        function OwlTimerBoxComponent() {
          this.showDivider = false;
          this.step = 1;
          this.valueChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.inputChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.inputStream = new rxjs__WEBPACK_IMPORTED_MODULE_4__["Subject"]();
          this.inputStreamSub = rxjs__WEBPACK_IMPORTED_MODULE_4__["Subscription"].EMPTY;
        }

        Object.defineProperty(OwlTimerBoxComponent.prototype, "displayValue", {
          get: function get() {
            return this.boxValue || this.value;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlTimerBoxComponent.prototype, "owlDTTimerBoxClass", {
          get: function get() {
            return true;
          },
          enumerable: true,
          configurable: true
        });

        OwlTimerBoxComponent.prototype.ngOnInit = function () {
          var _this = this;

          this.inputStreamSub = this.inputStream.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["debounceTime"])(500), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["distinctUntilChanged"])()).subscribe(function (val) {
            if (val) {
              var inputValue = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_3__["coerceNumberProperty"])(val, 0);

              _this.updateValueViaInput(inputValue);
            }
          });
        };

        OwlTimerBoxComponent.prototype.ngOnDestroy = function () {
          this.inputStreamSub.unsubscribe();
        };

        OwlTimerBoxComponent.prototype.upBtnClicked = function () {
          this.updateValue(this.value + this.step);
        };

        OwlTimerBoxComponent.prototype.downBtnClicked = function () {
          this.updateValue(this.value - this.step);
        };

        OwlTimerBoxComponent.prototype.handleInputChange = function (val) {
          this.inputStream.next(val);
        };

        OwlTimerBoxComponent.prototype.updateValue = function (value) {
          this.valueChange.emit(value);
        };

        OwlTimerBoxComponent.prototype.updateValueViaInput = function (value) {
          if (value > this.max || value < this.min) {
            return;
          }

          this.inputChange.emit(value);
        };

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object)], OwlTimerBoxComponent.prototype, "showDivider", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", String)], OwlTimerBoxComponent.prototype, "upBtnAriaLabel", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Boolean)], OwlTimerBoxComponent.prototype, "upBtnDisabled", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", String)], OwlTimerBoxComponent.prototype, "downBtnAriaLabel", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Boolean)], OwlTimerBoxComponent.prototype, "downBtnDisabled", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Number)], OwlTimerBoxComponent.prototype, "boxValue", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Number)], OwlTimerBoxComponent.prototype, "value", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Number)], OwlTimerBoxComponent.prototype, "min", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Number)], OwlTimerBoxComponent.prototype, "max", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object)], OwlTimerBoxComponent.prototype, "step", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", String)], OwlTimerBoxComponent.prototype, "inputLabel", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", Object)], OwlTimerBoxComponent.prototype, "valueChange", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", Object)], OwlTimerBoxComponent.prototype, "inputChange", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('class.owl-dt-timer-box'), __metadata("design:type", Boolean), __metadata("design:paramtypes", [])], OwlTimerBoxComponent.prototype, "owlDTTimerBoxClass", null);

        OwlTimerBoxComponent = __decorate([__metadata("design:paramtypes", [])], OwlTimerBoxComponent);

        OwlTimerBoxComponent.ɵfac = function OwlTimerBoxComponent_Factory(t) {
          return new (t || OwlTimerBoxComponent)();
        };

        OwlTimerBoxComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
          type: OwlTimerBoxComponent,
          selectors: [["owl-date-time-timer-box"]],
          hostVars: 2,
          hostBindings: function OwlTimerBoxComponent_HostBindings(rf, ctx) {
            if (rf & 2) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("owl-dt-timer-box", ctx.owlDTTimerBoxClass);
            }
          },
          inputs: {
            showDivider: "showDivider",
            step: "step",
            upBtnAriaLabel: "upBtnAriaLabel",
            upBtnDisabled: "upBtnDisabled",
            downBtnAriaLabel: "downBtnAriaLabel",
            downBtnDisabled: "downBtnDisabled",
            boxValue: "boxValue",
            value: "value",
            min: "min",
            max: "max",
            inputLabel: "inputLabel"
          },
          outputs: {
            valueChange: "valueChange",
            inputChange: "inputChange"
          },
          exportAs: ["owlDateTimeTimerBox"],
          decls: 15,
          vars: 10,
          consts: [["class", "owl-dt-timer-divider", "aria-hidden", "true", 4, "ngIf"], ["type", "button", "tabindex", "-1", 1, "owl-dt-control-button", "owl-dt-control-arrow-button", 3, "disabled", "click"], ["tabindex", "-1", 1, "owl-dt-control-button-content"], ["xmlns", "http://www.w3.org/2000/svg", 0, "xmlns", "xlink", "http://www.w3.org/1999/xlink", "version", "1.1", "x", "0px", "y", "0px", "viewBox", "0 0 451.847 451.846", 0, "xml", "space", "preserve", "width", "100%", "height", "100%", 2, "enable-background", "new 0 0 451.847 451.846"], ["d", "M248.292,106.406l194.281,194.29c12.365,12.359,12.365,32.391,0,44.744c-12.354,12.354-32.391,12.354-44.744,0\n                        L225.923,173.529L54.018,345.44c-12.36,12.354-32.395,12.354-44.748,0c-12.359-12.354-12.359-32.391,0-44.75L203.554,106.4\n                        c6.18-6.174,14.271-9.259,22.369-9.259C234.018,97.141,242.115,100.232,248.292,106.406z"], [1, "owl-dt-timer-content"], ["maxlength", "2", 1, "owl-dt-timer-input", 3, "value", "input"], ["valueInput", ""], [1, "owl-hidden-accessible"], ["d", "M225.923,354.706c-8.098,0-16.195-3.092-22.369-9.263L9.27,151.157c-12.359-12.359-12.359-32.397,0-44.751\n                        c12.354-12.354,32.388-12.354,44.748,0l171.905,171.915l171.906-171.909c12.359-12.354,32.391-12.354,44.744,0\n                        c12.365,12.354,12.365,32.392,0,44.751L248.292,345.449C242.115,351.621,234.018,354.706,225.923,354.706z"], ["aria-hidden", "true", 1, "owl-dt-timer-divider"]],
          template: function OwlTimerBoxComponent_Template(rf, ctx) {
            if (rf & 1) {
              var _r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, OwlTimerBoxComponent_div_0_Template, 1, 0, "div", 0);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "button", 1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function OwlTimerBoxComponent_Template_button_click_1_listener() {
                return ctx.upBtnClicked();
              });

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "span", 2);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnamespaceSVG"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "svg", 3);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](4, "path", 4);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnamespaceHTML"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "label", 5);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](6, "input", 6, 7);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("input", function OwlTimerBoxComponent_Template_input_input_6_listener() {
                _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r2);

                var _r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](7);

                return ctx.handleInputChange(_r1.value);
              });

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpipe"](8, "numberFixedLen");

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](9, "span", 8);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](10);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](11, "button", 1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function OwlTimerBoxComponent_Template_button_click_11_listener() {
                return ctx.downBtnClicked();
              });

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](12, "span", 2);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnamespaceSVG"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](13, "svg", 3);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](14, "path", 9);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
            }

            if (rf & 2) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.showDivider);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx.upBtnDisabled);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-label", ctx.upBtnAriaLabel);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](5);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("value", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpipeBind2"](8, 7, ctx.displayValue, 2));

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](4);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx.inputLabel);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx.downBtnDisabled);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-label", ctx.downBtnAriaLabel);
            }
          },
          directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"]],
          pipes: [_numberedFixLen_pipe__WEBPACK_IMPORTED_MODULE_2__["NumberFixedLenPipe"]],
          styles: [""],
          changeDetection: 0
        });

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](OwlTimerBoxComponent, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
            args: [{
              exportAs: 'owlDateTimeTimerBox',
              selector: 'owl-date-time-timer-box',
              template: "<div *ngIf=\"showDivider\" class=\"owl-dt-timer-divider\" aria-hidden=\"true\"></div><button class=\"owl-dt-control-button owl-dt-control-arrow-button\" type=\"button\" tabindex=\"-1\" [disabled]=\"upBtnDisabled\" [attr.aria-label]=\"upBtnAriaLabel\" (click)=\"upBtnClicked()\"><span class=\"owl-dt-control-button-content\" tabindex=\"-1\"><!-- <editor-fold desc=\"SVG Arrow Up\"> --> <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 451.847 451.846\" style=\"enable-background:new 0 0 451.847 451.846;\" xml:space=\"preserve\" width=\"100%\" height=\"100%\"><path d=\"M248.292,106.406l194.281,194.29c12.365,12.359,12.365,32.391,0,44.744c-12.354,12.354-32.391,12.354-44.744,0\n                        L225.923,173.529L54.018,345.44c-12.36,12.354-32.395,12.354-44.748,0c-12.359-12.354-12.359-32.391,0-44.75L203.554,106.4\n                        c6.18-6.174,14.271-9.259,22.369-9.259C234.018,97.141,242.115,100.232,248.292,106.406z\"/></svg><!-- </editor-fold> --></span></button><label class=\"owl-dt-timer-content\"><input class=\"owl-dt-timer-input\" maxlength=\"2\" [value]=\"displayValue | numberFixedLen : 2\" (input)=\"handleInputChange(valueInput.value)\" #valueInput> <span class=\"owl-hidden-accessible\">{{inputLabel}}</span></label><button class=\"owl-dt-control-button owl-dt-control-arrow-button\" type=\"button\" tabindex=\"-1\" [disabled]=\"downBtnDisabled\" [attr.aria-label]=\"downBtnAriaLabel\" (click)=\"downBtnClicked()\"><span class=\"owl-dt-control-button-content\" tabindex=\"-1\"><!-- <editor-fold desc=\"SVG Arrow Down\"> --> <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 451.847 451.846\" style=\"enable-background:new 0 0 451.847 451.846;\" xml:space=\"preserve\" width=\"100%\" height=\"100%\"><path d=\"M225.923,354.706c-8.098,0-16.195-3.092-22.369-9.263L9.27,151.157c-12.359-12.359-12.359-32.397,0-44.751\n                        c12.354-12.354,32.388-12.354,44.748,0l171.905,171.915l171.906-171.909c12.359-12.354,32.391-12.354,44.744,0\n                        c12.365,12.354,12.365,32.392,0,44.751L248.292,345.449C242.115,351.621,234.018,354.706,225.923,354.706z\"/></svg><!-- </editor-fold> --></span></button>",
              styles: [""],
              preserveWhitespaces: false,
              changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush
            }]
          }], function () {
            return [];
          }, {
            showDivider: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            step: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            valueChange: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            inputChange: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            owlDTTimerBoxClass: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['class.owl-dt-timer-box']
            }],
            upBtnAriaLabel: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            upBtnDisabled: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            downBtnAriaLabel: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            downBtnDisabled: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            boxValue: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            value: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            min: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            max: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            inputLabel: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }]
          });
        })();

        return OwlTimerBoxComponent;
      }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64, 

      /***/

    },

    /***/
    "3uhI":
    /*!***************************************************!*\
      !*** ./node_modules/aws-sdk/lib/region_config.js ***!
      \***************************************************/

    /*! no static exports found */

    /***/
    function uhI(module, exports, __webpack_require__) {
      var util = __webpack_require__(
      /*! ./util */
      "BaN1");

      var regionConfig = __webpack_require__(
      /*! ./region_config_data.json */
      "hROZ");

      function generateRegionPrefix(region) {
        if (!region) return null;
        var parts = region.split('-');
        if (parts.length < 3) return null;
        return parts.slice(0, parts.length - 2).join('-') + '-*';
      }

      function derivedKeys(service) {
        var region = service.config.region;
        var regionPrefix = generateRegionPrefix(region);
        var endpointPrefix = service.api.endpointPrefix;
        return [[region, endpointPrefix], [regionPrefix, endpointPrefix], [region, '*'], [regionPrefix, '*'], ['*', endpointPrefix], ['*', '*']].map(function (item) {
          return item[0] && item[1] ? item.join('/') : null;
        });
      }

      function applyConfig(service, config) {
        util.each(config, function (key, value) {
          if (key === 'globalEndpoint') return;

          if (service.config[key] === undefined || service.config[key] === null) {
            service.config[key] = value;
          }
        });
      }

      function configureEndpoint(service) {
        var keys = derivedKeys(service);

        for (var i = 0; i < keys.length; i++) {
          var key = keys[i];
          if (!key) continue;

          if (Object.prototype.hasOwnProperty.call(regionConfig.rules, key)) {
            var config = regionConfig.rules[key];

            if (typeof config === 'string') {
              config = regionConfig.patterns[config];
            } // set dualstack endpoint


            if (service.config.useDualstack && util.isDualstackAvailable(service)) {
              config = util.copy(config);
              config.endpoint = config.endpoint.replace(/{service}\.({region}\.)?/, '{service}.dualstack.{region}.');
            } // set global endpoint


            service.isGlobalEndpoint = !!config.globalEndpoint;

            if (config.signingRegion) {
              service.signingRegion = config.signingRegion;
            } // signature version


            if (!config.signatureVersion) config.signatureVersion = 'v4'; // merge config

            applyConfig(service, config);
            return;
          }
        }
      }

      function getEndpointSuffix(region) {
        var regionRegexes = {
          '^(us|eu|ap|sa|ca|me)\\-\\w+\\-\\d+$': 'amazonaws.com',
          '^cn\\-\\w+\\-\\d+$': 'amazonaws.com.cn',
          '^us\\-gov\\-\\w+\\-\\d+$': 'amazonaws.com',
          '^us\\-iso\\-\\w+\\-\\d+$': 'c2s.ic.gov',
          '^us\\-isob\\-\\w+\\-\\d+$': 'sc2s.sgov.gov'
        };
        var defaultSuffix = 'amazonaws.com';
        var regexes = Object.keys(regionRegexes);

        for (var i = 0; i < regexes.length; i++) {
          var regionPattern = RegExp(regexes[i]);
          var dnsSuffix = regionRegexes[regexes[i]];
          if (regionPattern.test(region)) return dnsSuffix;
        }

        return defaultSuffix;
      }
      /**
       * @api private
       */


      module.exports = {
        configureEndpoint: configureEndpoint,
        getEndpointSuffix: getEndpointSuffix
      };
      /***/
    },

    /***/
    "49sm":
    /*!***************************************!*\
      !*** ./node_modules/isarray/index.js ***!
      \***************************************/

    /*! no static exports found */

    /***/
    function sm(module, exports) {
      var toString = {}.toString;

      module.exports = Array.isArray || function (arr) {
        return toString.call(arr) == '[object Array]';
      };
      /***/

    },

    /***/
    "4A3s":
    /*!*************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/ignoreElements.js ***!
      \*************************************************************************/

    /*! exports provided: ignoreElements */

    /***/
    function A3s(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ignoreElements", function () {
        return ignoreElements;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");

      function ignoreElements() {
        return function ignoreElementsOperatorFunction(source) {
          return source.lift(new IgnoreElementsOperator());
        };
      }

      var IgnoreElementsOperator = /*#__PURE__*/function () {
        function IgnoreElementsOperator() {
          _classCallCheck2(this, IgnoreElementsOperator);
        }

        _createClass2(IgnoreElementsOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new IgnoreElementsSubscriber(subscriber));
          }
        }]);

        return IgnoreElementsOperator;
      }();

      var IgnoreElementsSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_7) {
        _inherits2(IgnoreElementsSubscriber, _Subscriber__WEBPACK_7);

        var _super195 = _createSuper(IgnoreElementsSubscriber);

        function IgnoreElementsSubscriber() {
          _classCallCheck2(this, IgnoreElementsSubscriber);

          return _super195.apply(this, arguments);
        }

        _createClass2(IgnoreElementsSubscriber, [{
          key: "_next",
          value: function _next(unused) {}
        }]);

        return IgnoreElementsSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=ignoreElements.js.map

      /***/

    },

    /***/
    "4I5i":
    /*!*****************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/ArgumentOutOfRangeError.js ***!
      \*****************************************************************************/

    /*! exports provided: ArgumentOutOfRangeError */

    /***/
    function I5i(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ArgumentOutOfRangeError", function () {
        return ArgumentOutOfRangeError;
      });

      var ArgumentOutOfRangeErrorImpl = function () {
        function ArgumentOutOfRangeErrorImpl() {
          Error.call(this);
          this.message = 'argument out of range';
          this.name = 'ArgumentOutOfRangeError';
          return this;
        }

        ArgumentOutOfRangeErrorImpl.prototype = Object.create(Error.prototype);
        return ArgumentOutOfRangeErrorImpl;
      }();

      var ArgumentOutOfRangeError = ArgumentOutOfRangeErrorImpl; //# sourceMappingURL=ArgumentOutOfRangeError.js.map

      /***/
    },

    /***/
    "4MV3":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/gu.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function MV3(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Gujarati [gu]
      //! author : Kaushik Thanki : https://github.com/Kaushik1987
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var symbolMap = {
          1: '૧',
          2: '૨',
          3: '૩',
          4: '૪',
          5: '૫',
          6: '૬',
          7: '૭',
          8: '૮',
          9: '૯',
          0: '૦'
        },
            numberMap = {
          '૧': '1',
          '૨': '2',
          '૩': '3',
          '૪': '4',
          '૫': '5',
          '૬': '6',
          '૭': '7',
          '૮': '8',
          '૯': '9',
          '૦': '0'
        };
        var gu = moment.defineLocale('gu', {
          months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split('_'),
          monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split('_'),
          monthsParseExact: true,
          weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split('_'),
          weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),
          weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),
          longDateFormat: {
            LT: 'A h:mm વાગ્યે',
            LTS: 'A h:mm:ss વાગ્યે',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm વાગ્યે',
            LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે'
          },
          calendar: {
            sameDay: '[આજ] LT',
            nextDay: '[કાલે] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[ગઇકાલે] LT',
            lastWeek: '[પાછલા] dddd, LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s મા',
            past: '%s પહેલા',
            s: 'અમુક પળો',
            ss: '%d સેકંડ',
            m: 'એક મિનિટ',
            mm: '%d મિનિટ',
            h: 'એક કલાક',
            hh: '%d કલાક',
            d: 'એક દિવસ',
            dd: '%d દિવસ',
            M: 'એક મહિનો',
            MM: '%d મહિનો',
            y: 'એક વર્ષ',
            yy: '%d વર્ષ'
          },
          preparse: function preparse(string) {
            return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {
              return numberMap[match];
            });
          },
          postformat: function postformat(string) {
            return string.replace(/\d/g, function (match) {
              return symbolMap[match];
            });
          },
          // Gujarati notation for meridiems are quite fuzzy in practice. While there exists
          // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.
          meridiemParse: /રાત|બપોર|સવાર|સાંજ/,
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === 'રાત') {
              return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'સવાર') {
              return hour;
            } else if (meridiem === 'બપોર') {
              return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'સાંજ') {
              return hour + 12;
            }
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 4) {
              return 'રાત';
            } else if (hour < 10) {
              return 'સવાર';
            } else if (hour < 17) {
              return 'બપોર';
            } else if (hour < 20) {
              return 'સાંજ';
            } else {
              return 'રાત';
            }
          },
          week: {
            dow: 0,
            // Sunday is the first day of the week.
            doy: 6 // The week that contains Jan 6th is the first week of the year.

          }
        });
        return gu;
      });
      /***/

    },

    /***/
    "4O5X":
    /*!****************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/bindNodeCallback.js ***!
      \****************************************************************************/

    /*! exports provided: bindNodeCallback */

    /***/
    function O5X(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "bindNodeCallback", function () {
        return bindNodeCallback;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../AsyncSubject */
      "NHP+");
      /* harmony import */


      var _operators_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../operators/map */
      "lJxs");
      /* harmony import */


      var _util_canReportError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ../util/canReportError */
      "8Qeq");
      /* harmony import */


      var _util_isScheduler__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ../util/isScheduler */
      "z+Ro");
      /* harmony import */


      var _util_isArray__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! ../util/isArray */
      "DH7j");

      function bindNodeCallback(callbackFunc, resultSelector, scheduler) {
        if (resultSelector) {
          if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_4__["isScheduler"])(resultSelector)) {
            scheduler = resultSelector;
          } else {
            return function () {
              return bindNodeCallback(callbackFunc, scheduler).apply(void 0, arguments).pipe(Object(_operators_map__WEBPACK_IMPORTED_MODULE_2__["map"])(function (args) {
                return Object(_util_isArray__WEBPACK_IMPORTED_MODULE_5__["isArray"])(args) ? resultSelector.apply(void 0, _toConsumableArray(args)) : resultSelector(args);
              }));
            };
          }
        }

        return function () {
          for (var _len15 = arguments.length, args = new Array(_len15), _key17 = 0; _key17 < _len15; _key17++) {
            args[_key17] = arguments[_key17];
          }

          var params = {
            subject: undefined,
            args: args,
            callbackFunc: callbackFunc,
            scheduler: scheduler,
            context: this
          };
          return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
            var context = params.context;
            var subject = params.subject;

            if (!scheduler) {
              if (!subject) {
                subject = params.subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();

                var handler = function handler() {
                  for (var _len16 = arguments.length, innerArgs = new Array(_len16), _key18 = 0; _key18 < _len16; _key18++) {
                    innerArgs[_key18] = arguments[_key18];
                  }

                  var err = innerArgs.shift();

                  if (err) {
                    subject.error(err);
                    return;
                  }

                  subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs);
                  subject.complete();
                };

                try {
                  callbackFunc.apply(context, [].concat(args, [handler]));
                } catch (err) {
                  if (Object(_util_canReportError__WEBPACK_IMPORTED_MODULE_3__["canReportError"])(subject)) {
                    subject.error(err);
                  } else {
                    console.warn(err);
                  }
                }
              }

              return subject.subscribe(subscriber);
            } else {
              return scheduler.schedule(dispatch, 0, {
                params: params,
                subscriber: subscriber,
                context: context
              });
            }
          });
        };
      }

      function dispatch(state) {
        var _this489 = this;

        var params = state.params,
            subscriber = state.subscriber,
            context = state.context;
        var callbackFunc = params.callbackFunc,
            args = params.args,
            scheduler = params.scheduler;
        var subject = params.subject;

        if (!subject) {
          subject = params.subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();

          var handler = function handler() {
            for (var _len17 = arguments.length, innerArgs = new Array(_len17), _key19 = 0; _key19 < _len17; _key19++) {
              innerArgs[_key19] = arguments[_key19];
            }

            var err = innerArgs.shift();

            if (err) {
              _this489.add(scheduler.schedule(dispatchError, 0, {
                err: err,
                subject: subject
              }));
            } else {
              var value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs;

              _this489.add(scheduler.schedule(dispatchNext, 0, {
                value: value,
                subject: subject
              }));
            }
          };

          try {
            callbackFunc.apply(context, [].concat(_toConsumableArray(args), [handler]));
          } catch (err) {
            this.add(scheduler.schedule(dispatchError, 0, {
              err: err,
              subject: subject
            }));
          }
        }

        this.add(subject.subscribe(subscriber));
      }

      function dispatchNext(arg) {
        var value = arg.value,
            subject = arg.subject;
        subject.next(value);
        subject.complete();
      }

      function dispatchError(arg) {
        var err = arg.err,
            subject = arg.subject;
        subject.error(err);
      } //# sourceMappingURL=bindNodeCallback.js.map

      /***/

    },

    /***/
    "4dOw":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/en-ie.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function dOw(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : English (Ireland) [en-ie]
      //! author : Chris Cartlidge : https://github.com/chriscartlidge
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var enIe = moment.defineLocale('en-ie', {
          months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
          monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
          weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
          weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
          weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
          ordinal: function ordinal(number) {
            var b = number % 10,
                output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';
            return number + output;
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return enIe;
      });
      /***/

    },

    /***/
    "4eZz":
    /*!****************************************************************!*\
      !*** ./node_modules/aws-sdk/lib/event-stream/parse-message.js ***!
      \****************************************************************/

    /*! no static exports found */

    /***/
    function eZz(module, exports, __webpack_require__) {
      var Int64 = __webpack_require__(
      /*! ./int64 */
      "n4Yq").Int64;

      var splitMessage = __webpack_require__(
      /*! ./split-message */
      "m2wi").splitMessage;

      var BOOLEAN_TAG = 'boolean';
      var BYTE_TAG = 'byte';
      var SHORT_TAG = 'short';
      var INT_TAG = 'integer';
      var LONG_TAG = 'long';
      var BINARY_TAG = 'binary';
      var STRING_TAG = 'string';
      var TIMESTAMP_TAG = 'timestamp';
      var UUID_TAG = 'uuid';
      /**
       * @api private
       *
       * @param {Buffer} headers
       */

      function parseHeaders(headers) {
        var out = {};
        var position = 0;

        while (position < headers.length) {
          var nameLength = headers.readUInt8(position++);
          var name = headers.slice(position, position + nameLength).toString();
          position += nameLength;

          switch (headers.readUInt8(position++)) {
            case 0
            /* boolTrue */
            :
              out[name] = {
                type: BOOLEAN_TAG,
                value: true
              };
              break;

            case 1
            /* boolFalse */
            :
              out[name] = {
                type: BOOLEAN_TAG,
                value: false
              };
              break;

            case 2
            /* byte */
            :
              out[name] = {
                type: BYTE_TAG,
                value: headers.readInt8(position++)
              };
              break;

            case 3
            /* short */
            :
              out[name] = {
                type: SHORT_TAG,
                value: headers.readInt16BE(position)
              };
              position += 2;
              break;

            case 4
            /* integer */
            :
              out[name] = {
                type: INT_TAG,
                value: headers.readInt32BE(position)
              };
              position += 4;
              break;

            case 5
            /* long */
            :
              out[name] = {
                type: LONG_TAG,
                value: new Int64(headers.slice(position, position + 8))
              };
              position += 8;
              break;

            case 6
            /* byteArray */
            :
              var binaryLength = headers.readUInt16BE(position);
              position += 2;
              out[name] = {
                type: BINARY_TAG,
                value: headers.slice(position, position + binaryLength)
              };
              position += binaryLength;
              break;

            case 7
            /* string */
            :
              var stringLength = headers.readUInt16BE(position);
              position += 2;
              out[name] = {
                type: STRING_TAG,
                value: headers.slice(position, position + stringLength).toString()
              };
              position += stringLength;
              break;

            case 8
            /* timestamp */
            :
              out[name] = {
                type: TIMESTAMP_TAG,
                value: new Date(new Int64(headers.slice(position, position + 8)).valueOf())
              };
              position += 8;
              break;

            case 9
            /* uuid */
            :
              var uuidChars = headers.slice(position, position + 16).toString('hex');
              position += 16;
              out[name] = {
                type: UUID_TAG,
                value: uuidChars.substr(0, 8) + '-' + uuidChars.substr(8, 4) + '-' + uuidChars.substr(12, 4) + '-' + uuidChars.substr(16, 4) + '-' + uuidChars.substr(20)
              };
              break;

            default:
              throw new Error('Unrecognized header type tag');
          }
        }

        return out;
      }

      function parseMessage(message) {
        var parsed = splitMessage(message);
        return {
          headers: parseHeaders(parsed.headers),
          body: parsed.body
        };
      }
      /**
       * @api private
       */


      module.exports = {
        parseMessage: parseMessage
      };
      /***/
    },

    /***/
    "4f8F":
    /*!***************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/race.js ***!
      \***************************************************************/

    /*! exports provided: race */

    /***/
    function f8F(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "race", function () {
        return race;
      });
      /* harmony import */


      var _util_isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../util/isArray */
      "DH7j");
      /* harmony import */


      var _observable_race__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../observable/race */
      "Nv8m");

      function race() {
        for (var _len18 = arguments.length, observables = new Array(_len18), _key20 = 0; _key20 < _len18; _key20++) {
          observables[_key20] = arguments[_key20];
        }

        return function raceOperatorFunction(source) {
          if (observables.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_0__["isArray"])(observables[0])) {
            observables = observables[0];
          }

          return source.lift.call(Object(_observable_race__WEBPACK_IMPORTED_MODULE_1__["race"]).apply(void 0, [source].concat(_toConsumableArray(observables))));
        };
      } //# sourceMappingURL=race.js.map

      /***/

    },

    /***/
    "4hIw":
    /*!***********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/timeInterval.js ***!
      \***********************************************************************/

    /*! exports provided: timeInterval, TimeInterval */

    /***/
    function hIw(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "timeInterval", function () {
        return timeInterval;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TimeInterval", function () {
        return TimeInterval;
      });
      /* harmony import */


      var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../scheduler/async */
      "D0XW");
      /* harmony import */


      var _scan__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./scan */
      "Kqap");
      /* harmony import */


      var _observable_defer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../observable/defer */
      "NXyV");
      /* harmony import */


      var _map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./map */
      "lJxs");

      function timeInterval() {
        var scheduler = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"];
        return function (source) {
          return Object(_observable_defer__WEBPACK_IMPORTED_MODULE_2__["defer"])(function () {
            return source.pipe(Object(_scan__WEBPACK_IMPORTED_MODULE_1__["scan"])(function (_ref102, value) {
              var current = _ref102.current;
              return {
                value: value,
                current: scheduler.now(),
                last: current
              };
            }, {
              current: scheduler.now(),
              value: undefined,
              last: undefined
            }), Object(_map__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_ref103) {
              var current = _ref103.current,
                  last = _ref103.last,
                  value = _ref103.value;
              return new TimeInterval(value, current - last);
            }));
          });
        };
      }

      var TimeInterval = function TimeInterval(value, interval) {
        _classCallCheck2(this, TimeInterval);

        this.value = value;
        this.interval = interval;
      }; //# sourceMappingURL=timeInterval.js.map

      /***/

    },

    /***/
    "4km1":
    /*!******************************************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/date-time-picker-container.component.js ***!
      \******************************************************************************************************/

    /*! exports provided: OwlDateTimeContainerComponent */

    /***/
    function km1(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OwlDateTimeContainerComponent", function () {
        return OwlDateTimeContainerComponent;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _date_time_picker_intl_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./date-time-picker-intl.service */
      "MN5+");
      /* harmony import */


      var _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./adapter/date-time-adapter.class */
      "1rjb");
      /* harmony import */


      var _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/cdk/a11y */
      "u47x");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _calendar_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! ./calendar.component */
      "PPXK");
      /* harmony import */


      var _timer_component__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! ./timer.component */
      "341s");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var _date_time_picker_animations__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(
      /*! ./date-time-picker.animations */
      "ER1s");
      /* harmony import */


      var _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(
      /*! @angular/cdk/keycodes */
      "FtGj");

      function OwlDateTimeContainerComponent_owl_date_time_calendar_1_Template(rf, ctx) {
        if (rf & 1) {
          var _r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "owl-date-time-calendar", 5);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("pickerMomentChange", function OwlDateTimeContainerComponent_owl_date_time_calendar_1_Template_owl_date_time_calendar_pickerMomentChange_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r5);

            var ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r4.pickerMoment = $event;
          })("yearSelected", function OwlDateTimeContainerComponent_owl_date_time_calendar_1_Template_owl_date_time_calendar_yearSelected_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r5);

            var ctx_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r6.picker.selectYear($event);
          })("monthSelected", function OwlDateTimeContainerComponent_owl_date_time_calendar_1_Template_owl_date_time_calendar_monthSelected_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r5);

            var ctx_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r7.picker.selectMonth($event);
          })("selectedChange", function OwlDateTimeContainerComponent_owl_date_time_calendar_1_Template_owl_date_time_calendar_selectedChange_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r5);

            var ctx_r8 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r8.dateSelected($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("firstDayOfWeek", ctx_r0.picker.firstDayOfWeek)("pickerMoment", ctx_r0.pickerMoment)("selected", ctx_r0.picker.selected)("selecteds", ctx_r0.picker.selecteds)("selectMode", ctx_r0.picker.selectMode)("minDate", ctx_r0.picker.minDateTime)("maxDate", ctx_r0.picker.maxDateTime)("dateFilter", ctx_r0.picker.dateTimeFilter)("startView", ctx_r0.picker.startView)("hideOtherMonths", ctx_r0.picker.hideOtherMonths);
        }
      }

      function OwlDateTimeContainerComponent_owl_date_time_timer_2_Template(rf, ctx) {
        if (rf & 1) {
          var _r10 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "owl-date-time-timer", 6);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("selectedChange", function OwlDateTimeContainerComponent_owl_date_time_timer_2_Template_owl_date_time_timer_selectedChange_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r10);

            var ctx_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r9.timeSelected($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("pickerMoment", ctx_r1.pickerMoment)("minDateTime", ctx_r1.picker.minDateTime)("maxDateTime", ctx_r1.picker.maxDateTime)("showSecondsTimer", ctx_r1.picker.showSecondsTimer)("hour12Timer", ctx_r1.picker.hour12Timer)("stepHour", ctx_r1.picker.stepHour)("stepMinute", ctx_r1.picker.stepMinute)("stepSecond", ctx_r1.picker.stepSecond);
        }
      }

      var _c0 = function _c0(a0) {
        return {
          "owl-dt-container-info-active": a0
        };
      };

      function OwlDateTimeContainerComponent_div_3_Template(rf, ctx) {
        if (rf & 1) {
          var _r14 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "div", 8, 9);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function OwlDateTimeContainerComponent_div_3_Template_div_click_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r14);

            var ctx_r13 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r13.handleClickOnInfoGroup($event, 0);
          })("keydown", function OwlDateTimeContainerComponent_div_3_Template_div_keydown_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r14);

            var _r12 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](9);

            var ctx_r15 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r15.handleKeydownOnInfoGroup($event, _r12, 0);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "span", 10);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](4, "span", 11);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](5);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](6, "span", 12);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](7);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](8, "div", 13, 14);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function OwlDateTimeContainerComponent_div_3_Template_div_click_8_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r14);

            var ctx_r16 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r16.handleClickOnInfoGroup($event, 1);
          })("keydown", function OwlDateTimeContainerComponent_div_3_Template_div_keydown_8_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r14);

            var _r11 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](2);

            var ctx_r17 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r17.handleKeydownOnInfoGroup($event, _r11, 1);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](10, "span", 10);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](11, "span", 11);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](12);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](13, "span", 12);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](14);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("tabindex", ctx_r2.activeSelectedIndex === 0 ? 0 : -1)("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](10, _c0, ctx_r2.activeSelectedIndex === 0));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-checked", ctx_r2.activeSelectedIndex === 0);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](4);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"]("", ctx_r2.fromLabel, ":");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r2.fromFormattedValue);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("tabindex", ctx_r2.activeSelectedIndex === 1 ? 0 : -1)("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](12, _c0, ctx_r2.activeSelectedIndex === 1));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-checked", ctx_r2.activeSelectedIndex === 1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](4);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"]("", ctx_r2.toLabel, ":");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r2.toFormattedValue);
        }
      }

      function OwlDateTimeContainerComponent_div_4_Template(rf, ctx) {
        if (rf & 1) {
          var _r19 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 15);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "button", 16);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function OwlDateTimeContainerComponent_div_4_Template_button_click_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r19);

            var ctx_r18 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r18.onCancelClicked($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "span", 17);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](4, "button", 16);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function OwlDateTimeContainerComponent_div_4_Template_button_click_4_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r19);

            var ctx_r20 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r20.onSetClicked($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "span", 17);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](6);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r3.cancelLabel);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r3.setLabel);
        }
      }

      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var __metadata = undefined && undefined.__metadata || function (k, v) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
      };

      var __param = undefined && undefined.__param || function (paramIndex, decorator) {
        return function (target, key) {
          decorator(target, key, paramIndex);
        };
      };

      var OwlDateTimeContainerComponent = function () {
        function OwlDateTimeContainerComponent(cdRef, elmRef, pickerIntl, dateTimeAdapter) {
          this.cdRef = cdRef;
          this.elmRef = elmRef;
          this.pickerIntl = pickerIntl;
          this.dateTimeAdapter = dateTimeAdapter;
          this.activeSelectedIndex = 0;
          this.hidePicker$ = new rxjs__WEBPACK_IMPORTED_MODULE_7__["Subject"]();
          this.confirmSelected$ = new rxjs__WEBPACK_IMPORTED_MODULE_7__["Subject"]();
          this.pickerOpened$ = new rxjs__WEBPACK_IMPORTED_MODULE_7__["Subject"]();
        }

        Object.defineProperty(OwlDateTimeContainerComponent.prototype, "hidePickerStream", {
          get: function get() {
            return this.hidePicker$.asObservable();
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeContainerComponent.prototype, "confirmSelectedStream", {
          get: function get() {
            return this.confirmSelected$.asObservable();
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeContainerComponent.prototype, "pickerOpenedStream", {
          get: function get() {
            return this.pickerOpened$.asObservable();
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeContainerComponent.prototype, "pickerMoment", {
          get: function get() {
            return this._clamPickerMoment;
          },
          set: function set(value) {
            if (value) {
              this._clamPickerMoment = this.dateTimeAdapter.clampDate(value, this.picker.minDateTime, this.picker.maxDateTime);
            }

            this.cdRef.markForCheck();
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeContainerComponent.prototype, "pickerType", {
          get: function get() {
            return this.picker.pickerType;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeContainerComponent.prototype, "cancelLabel", {
          get: function get() {
            return this.pickerIntl.cancelBtnLabel;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeContainerComponent.prototype, "setLabel", {
          get: function get() {
            return this.pickerIntl.setBtnLabel;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeContainerComponent.prototype, "fromLabel", {
          get: function get() {
            return this.pickerIntl.rangeFromLabel;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeContainerComponent.prototype, "toLabel", {
          get: function get() {
            return this.pickerIntl.rangeToLabel;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeContainerComponent.prototype, "fromFormattedValue", {
          get: function get() {
            var value = this.picker.selecteds[0];
            return value ? this.dateTimeAdapter.format(value, this.picker.formatString) : '';
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeContainerComponent.prototype, "toFormattedValue", {
          get: function get() {
            var value = this.picker.selecteds[1];
            return value ? this.dateTimeAdapter.format(value, this.picker.formatString) : '';
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeContainerComponent.prototype, "showControlButtons", {
          get: function get() {
            return this.picker.pickerMode === 'dialog' || this.picker.pickerType !== 'calendar' && this.picker.pickerMode !== 'inline';
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeContainerComponent.prototype, "containerElm", {
          get: function get() {
            return this.elmRef.nativeElement;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeContainerComponent.prototype, "owlDTContainerClass", {
          get: function get() {
            return true;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeContainerComponent.prototype, "owlDTPopupContainerClass", {
          get: function get() {
            return this.picker.pickerMode === 'popup';
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeContainerComponent.prototype, "owlDTDialogContainerClass", {
          get: function get() {
            return this.picker.pickerMode === 'dialog';
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeContainerComponent.prototype, "owlDTInlineContainerClass", {
          get: function get() {
            return this.picker.pickerMode === 'inline';
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeContainerComponent.prototype, "owlDTContainerDisabledClass", {
          get: function get() {
            return this.picker.disabled;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeContainerComponent.prototype, "owlDTContainerId", {
          get: function get() {
            return this.picker.id;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeContainerComponent.prototype, "owlDTContainerAnimation", {
          get: function get() {
            return this.picker.pickerMode === 'inline' ? '' : 'enter';
          },
          enumerable: true,
          configurable: true
        });

        OwlDateTimeContainerComponent.prototype.ngOnInit = function () {};

        OwlDateTimeContainerComponent.prototype.ngAfterContentInit = function () {
          this.initPicker();
        };

        OwlDateTimeContainerComponent.prototype.ngAfterViewInit = function () {
          this.focusPicker();
        };

        OwlDateTimeContainerComponent.prototype.handleContainerAnimationDone = function (event) {
          var toState = event.toState;

          if (toState === 'enter') {
            this.pickerOpened$.next();
          }
        };

        OwlDateTimeContainerComponent.prototype.dateSelected = function (date) {
          var result;

          if (this.picker.isInSingleMode) {
            result = this.dateSelectedInSingleMode(date);

            if (result) {
              this.pickerMoment = result;
              this.picker.select(result);
            } else {
              if (this.pickerType === 'calendar') {
                this.hidePicker$.next(null);
              }
            }

            return;
          }

          if (this.picker.isInRangeMode) {
            result = this.dateSelectedInRangeMode(date);

            if (result) {
              this.pickerMoment = result[this.activeSelectedIndex];
              this.picker.select(result);
            }
          }
        };

        OwlDateTimeContainerComponent.prototype.timeSelected = function (time) {
          this.pickerMoment = this.dateTimeAdapter.clone(time);

          if (!this.picker.dateTimeChecker(this.pickerMoment)) {
            return;
          }

          if (this.picker.isInSingleMode) {
            this.picker.select(this.pickerMoment);
            return;
          }

          if (this.picker.isInRangeMode) {
            var selecteds = this.picker.selecteds.slice();

            if (this.activeSelectedIndex === 0 && selecteds[1] && this.dateTimeAdapter.compare(this.pickerMoment, selecteds[1]) === 1 || this.activeSelectedIndex === 1 && selecteds[0] && this.dateTimeAdapter.compare(this.pickerMoment, selecteds[0]) === -1) {
              selecteds[0] = this.pickerMoment;
              selecteds[1] = this.pickerMoment;
            } else {
              selecteds[this.activeSelectedIndex] = this.pickerMoment;
            }

            this.picker.select(selecteds);
          }
        };

        OwlDateTimeContainerComponent.prototype.onCancelClicked = function (event) {
          this.hidePicker$.next(null);
          event.preventDefault();
          return;
        };

        OwlDateTimeContainerComponent.prototype.onSetClicked = function (event) {
          if (!this.picker.dateTimeChecker(this.pickerMoment)) {
            this.hidePicker$.next(null);
            event.preventDefault();
            return;
          }

          this.confirmSelected$.next(event);
          event.preventDefault();
          return;
        };

        OwlDateTimeContainerComponent.prototype.handleClickOnInfoGroup = function (event, index) {
          this.setActiveSelectedIndex(index);
          event.preventDefault();
          event.stopPropagation();
        };

        OwlDateTimeContainerComponent.prototype.handleKeydownOnInfoGroup = function (event, next, index) {
          switch (event.keyCode) {
            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_9__["DOWN_ARROW"]:
            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_9__["RIGHT_ARROW"]:
            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_9__["UP_ARROW"]:
            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_9__["LEFT_ARROW"]:
              next.focus();
              this.setActiveSelectedIndex(index === 0 ? 1 : 0);
              event.preventDefault();
              event.stopPropagation();
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_9__["SPACE"]:
              this.setActiveSelectedIndex(index);
              event.preventDefault();
              event.stopPropagation();
              break;

            default:
              return;
          }
        };

        OwlDateTimeContainerComponent.prototype.setActiveSelectedIndex = function (index) {
          if (this.picker.selectMode === 'range' && this.activeSelectedIndex !== index) {
            this.activeSelectedIndex = index;
            var selected = this.picker.selecteds[this.activeSelectedIndex];

            if (this.picker.selecteds && selected) {
              this.pickerMoment = this.dateTimeAdapter.clone(selected);
            }
          }

          return;
        };

        OwlDateTimeContainerComponent.prototype.initPicker = function () {
          this.pickerMoment = this.picker.startAt || this.dateTimeAdapter.now();
          this.activeSelectedIndex = this.picker.selectMode === 'rangeTo' ? 1 : 0;
        };

        OwlDateTimeContainerComponent.prototype.dateSelectedInSingleMode = function (date) {
          if (this.dateTimeAdapter.isSameDay(date, this.picker.selected)) {
            return null;
          }

          return this.updateAndCheckCalendarDate(date);
        };

        OwlDateTimeContainerComponent.prototype.dateSelectedInRangeMode = function (date) {
          var from = this.picker.selecteds[0];
          var to = this.picker.selecteds[1];
          var result = this.updateAndCheckCalendarDate(date);

          if (!result) {
            return null;
          }

          if (this.picker.selectMode === 'range') {
            if (this.picker.selecteds && this.picker.selecteds.length && !to && from && this.dateTimeAdapter.differenceInCalendarDays(result, from) >= 0) {
              to = result;
              this.activeSelectedIndex = 1;
            } else {
              from = result;
              to = null;
              this.activeSelectedIndex = 0;
            }
          } else if (this.picker.selectMode === 'rangeFrom') {
            from = result;

            if (to && this.dateTimeAdapter.compare(from, to) > 0) {
              to = null;
            }
          } else if (this.picker.selectMode === 'rangeTo') {
            to = result;

            if (from && this.dateTimeAdapter.compare(from, to) > 0) {
              from = null;
            }
          }

          return [from, to];
        };

        OwlDateTimeContainerComponent.prototype.updateAndCheckCalendarDate = function (date) {
          var result;

          if (this.picker.pickerType === 'both') {
            result = this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(date), this.dateTimeAdapter.getMonth(date), this.dateTimeAdapter.getDate(date), this.dateTimeAdapter.getHours(this.pickerMoment), this.dateTimeAdapter.getMinutes(this.pickerMoment), this.dateTimeAdapter.getSeconds(this.pickerMoment));
            result = this.dateTimeAdapter.clampDate(result, this.picker.minDateTime, this.picker.maxDateTime);
          } else {
            result = this.dateTimeAdapter.clone(date);
          }

          return this.picker.dateTimeChecker(result) ? result : null;
        };

        OwlDateTimeContainerComponent.prototype.focusPicker = function () {
          if (this.picker.pickerMode === 'inline') {
            return;
          }

          if (this.calendar) {
            this.calendar.focusActiveCell();
          } else if (this.timer) {
            this.timer.focus();
          }
        };

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"])(_calendar_component__WEBPACK_IMPORTED_MODULE_5__["OwlCalendarComponent"]), __metadata("design:type", _calendar_component__WEBPACK_IMPORTED_MODULE_5__["OwlCalendarComponent"])], OwlDateTimeContainerComponent.prototype, "calendar", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"])(_timer_component__WEBPACK_IMPORTED_MODULE_6__["OwlTimerComponent"]), __metadata("design:type", _timer_component__WEBPACK_IMPORTED_MODULE_6__["OwlTimerComponent"])], OwlDateTimeContainerComponent.prototype, "timer", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('class.owl-dt-container'), __metadata("design:type", Boolean), __metadata("design:paramtypes", [])], OwlDateTimeContainerComponent.prototype, "owlDTContainerClass", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('class.owl-dt-popup-container'), __metadata("design:type", Boolean), __metadata("design:paramtypes", [])], OwlDateTimeContainerComponent.prototype, "owlDTPopupContainerClass", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('class.owl-dt-dialog-container'), __metadata("design:type", Boolean), __metadata("design:paramtypes", [])], OwlDateTimeContainerComponent.prototype, "owlDTDialogContainerClass", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('class.owl-dt-inline-container'), __metadata("design:type", Boolean), __metadata("design:paramtypes", [])], OwlDateTimeContainerComponent.prototype, "owlDTInlineContainerClass", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('class.owl-dt-container-disabled'), __metadata("design:type", Boolean), __metadata("design:paramtypes", [])], OwlDateTimeContainerComponent.prototype, "owlDTContainerDisabledClass", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('attr.id'), __metadata("design:type", String), __metadata("design:paramtypes", [])], OwlDateTimeContainerComponent.prototype, "owlDTContainerId", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('@transformPicker'), __metadata("design:type", Object), __metadata("design:paramtypes", [])], OwlDateTimeContainerComponent.prototype, "owlDTContainerAnimation", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"])('@transformPicker.done', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", void 0)], OwlDateTimeContainerComponent.prototype, "handleContainerAnimationDone", null);

        OwlDateTimeContainerComponent = __decorate([__param(3, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __metadata("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], _date_time_picker_intl_service__WEBPACK_IMPORTED_MODULE_1__["OwlDateTimeIntl"], _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__["DateTimeAdapter"]])], OwlDateTimeContainerComponent);

        OwlDateTimeContainerComponent.ɵfac = function OwlDateTimeContainerComponent_Factory(t) {
          return new (t || OwlDateTimeContainerComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_date_time_picker_intl_service__WEBPACK_IMPORTED_MODULE_1__["OwlDateTimeIntl"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__["DateTimeAdapter"], 8));
        };

        OwlDateTimeContainerComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
          type: OwlDateTimeContainerComponent,
          selectors: [["owl-date-time-container"]],
          viewQuery: function OwlDateTimeContainerComponent_Query(rf, ctx) {
            if (rf & 1) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](_calendar_component__WEBPACK_IMPORTED_MODULE_5__["OwlCalendarComponent"], 1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](_timer_component__WEBPACK_IMPORTED_MODULE_6__["OwlTimerComponent"], 1);
            }

            if (rf & 2) {
              var _t;

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.calendar = _t.first);
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.timer = _t.first);
            }
          },
          hostVars: 12,
          hostBindings: function OwlDateTimeContainerComponent_HostBindings(rf, ctx) {
            if (rf & 1) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsyntheticHostListener"]("@transformPicker.done", function OwlDateTimeContainerComponent_animation_transformPicker_done_HostBindingHandler($event) {
                return ctx.handleContainerAnimationDone($event);
              });
            }

            if (rf & 2) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("id", ctx.owlDTContainerId);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsyntheticHostProperty"]("@transformPicker", ctx.owlDTContainerAnimation);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("owl-dt-container", ctx.owlDTContainerClass)("owl-dt-popup-container", ctx.owlDTPopupContainerClass)("owl-dt-dialog-container", ctx.owlDTDialogContainerClass)("owl-dt-inline-container", ctx.owlDTInlineContainerClass)("owl-dt-container-disabled", ctx.owlDTContainerDisabledClass);
            }
          },
          exportAs: ["owlDateTimeContainer"],
          decls: 5,
          vars: 6,
          consts: [[1, "owl-dt-container-inner", 3, "cdkTrapFocus"], ["class", "owl-dt-container-row", 3, "firstDayOfWeek", "pickerMoment", "selected", "selecteds", "selectMode", "minDate", "maxDate", "dateFilter", "startView", "hideOtherMonths", "pickerMomentChange", "yearSelected", "monthSelected", "selectedChange", 4, "ngIf"], ["class", "owl-dt-container-row", 3, "pickerMoment", "minDateTime", "maxDateTime", "showSecondsTimer", "hour12Timer", "stepHour", "stepMinute", "stepSecond", "selectedChange", 4, "ngIf"], ["role", "radiogroup", "class", "owl-dt-container-info owl-dt-container-row", 4, "ngIf"], ["class", "owl-dt-container-buttons owl-dt-container-row", 4, "ngIf"], [1, "owl-dt-container-row", 3, "firstDayOfWeek", "pickerMoment", "selected", "selecteds", "selectMode", "minDate", "maxDate", "dateFilter", "startView", "hideOtherMonths", "pickerMomentChange", "yearSelected", "monthSelected", "selectedChange"], [1, "owl-dt-container-row", 3, "pickerMoment", "minDateTime", "maxDateTime", "showSecondsTimer", "hour12Timer", "stepHour", "stepMinute", "stepSecond", "selectedChange"], ["role", "radiogroup", 1, "owl-dt-container-info", "owl-dt-container-row"], ["role", "radio", 1, "owl-dt-control", "owl-dt-container-range", "owl-dt-container-from", 3, "tabindex", "ngClass", "click", "keydown"], ["from", ""], ["tabindex", "-1", 1, "owl-dt-control-content", "owl-dt-container-range-content"], [1, "owl-dt-container-info-label"], [1, "owl-dt-container-info-value"], ["role", "radio", 1, "owl-dt-control", "owl-dt-container-range", "owl-dt-container-to", 3, "tabindex", "ngClass", "click", "keydown"], ["to", ""], [1, "owl-dt-container-buttons", "owl-dt-container-row"], ["type", "button", "tabindex", "0", 1, "owl-dt-control", "owl-dt-control-button", "owl-dt-container-control-button", 3, "click"], ["tabindex", "-1", 1, "owl-dt-control-content", "owl-dt-control-button-content"]],
          template: function OwlDateTimeContainerComponent_Template(rf, ctx) {
            if (rf & 1) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, OwlDateTimeContainerComponent_owl_date_time_calendar_1_Template, 1, 10, "owl-date-time-calendar", 1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, OwlDateTimeContainerComponent_owl_date_time_timer_2_Template, 1, 8, "owl-date-time-timer", 2);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, OwlDateTimeContainerComponent_div_3_Template, 15, 14, "div", 3);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](4, OwlDateTimeContainerComponent_div_4_Template, 7, 2, "div", 4);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
            }

            if (rf & 2) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("cdkTrapFocus", ctx.picker.pickerMode !== "inline")("@fadeInPicker", ctx.picker.pickerMode === "inline" ? "" : "enter");

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.pickerType === "both" || ctx.pickerType === "calendar");

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.pickerType === "both" || ctx.pickerType === "timer");

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.picker.isInRangeMode);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.showControlButtons);
            }
          },
          directives: [_angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_3__["CdkTrapFocus"], _angular_common__WEBPACK_IMPORTED_MODULE_4__["NgIf"], _calendar_component__WEBPACK_IMPORTED_MODULE_5__["OwlCalendarComponent"], _timer_component__WEBPACK_IMPORTED_MODULE_6__["OwlTimerComponent"], _angular_common__WEBPACK_IMPORTED_MODULE_4__["NgClass"]],
          styles: [""],
          data: {
            animation: [_date_time_picker_animations__WEBPACK_IMPORTED_MODULE_8__["owlDateTimePickerAnimations"].transformPicker, _date_time_picker_animations__WEBPACK_IMPORTED_MODULE_8__["owlDateTimePickerAnimations"].fadeInPicker]
          },
          changeDetection: 0
        });

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](OwlDateTimeContainerComponent, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
            args: [{
              exportAs: 'owlDateTimeContainer',
              selector: 'owl-date-time-container',
              template: "<div [cdkTrapFocus]=\"picker.pickerMode !== 'inline'\" [@fadeInPicker]=\"picker.pickerMode === 'inline'? '' : 'enter'\" class=\"owl-dt-container-inner\"><owl-date-time-calendar *ngIf=\"pickerType === 'both' || pickerType === 'calendar'\" class=\"owl-dt-container-row\" [firstDayOfWeek]=\"picker.firstDayOfWeek\" [(pickerMoment)]=\"pickerMoment\" [selected]=\"picker.selected\" [selecteds]=\"picker.selecteds\" [selectMode]=\"picker.selectMode\" [minDate]=\"picker.minDateTime\" [maxDate]=\"picker.maxDateTime\" [dateFilter]=\"picker.dateTimeFilter\" [startView]=\"picker.startView\" [hideOtherMonths]=\"picker.hideOtherMonths\" (yearSelected)=\"picker.selectYear($event)\" (monthSelected)=\"picker.selectMonth($event)\" (selectedChange)=\"dateSelected($event)\"></owl-date-time-calendar><owl-date-time-timer *ngIf=\"pickerType === 'both' || pickerType === 'timer'\" class=\"owl-dt-container-row\" [pickerMoment]=\"pickerMoment\" [minDateTime]=\"picker.minDateTime\" [maxDateTime]=\"picker.maxDateTime\" [showSecondsTimer]=\"picker.showSecondsTimer\" [hour12Timer]=\"picker.hour12Timer\" [stepHour]=\"picker.stepHour\" [stepMinute]=\"picker.stepMinute\" [stepSecond]=\"picker.stepSecond\" (selectedChange)=\"timeSelected($event)\"></owl-date-time-timer><div *ngIf=\"picker.isInRangeMode\" role=\"radiogroup\" class=\"owl-dt-container-info owl-dt-container-row\"><div role=\"radio\" [tabindex]=\"activeSelectedIndex === 0 ? 0 : -1\" [attr.aria-checked]=\"activeSelectedIndex === 0\" class=\"owl-dt-control owl-dt-container-range owl-dt-container-from\" [ngClass]=\"{'owl-dt-container-info-active': activeSelectedIndex === 0}\" (click)=\"handleClickOnInfoGroup($event, 0)\" (keydown)=\"handleKeydownOnInfoGroup($event, to, 0)\" #from><span class=\"owl-dt-control-content owl-dt-container-range-content\" tabindex=\"-1\"><span class=\"owl-dt-container-info-label\">{{fromLabel}}:</span> <span class=\"owl-dt-container-info-value\">{{fromFormattedValue}}</span></span></div><div role=\"radio\" [tabindex]=\"activeSelectedIndex === 1 ? 0 : -1\" [attr.aria-checked]=\"activeSelectedIndex === 1\" class=\"owl-dt-control owl-dt-container-range owl-dt-container-to\" [ngClass]=\"{'owl-dt-container-info-active': activeSelectedIndex === 1}\" (click)=\"handleClickOnInfoGroup($event, 1)\" (keydown)=\"handleKeydownOnInfoGroup($event, from, 1)\" #to><span class=\"owl-dt-control-content owl-dt-container-range-content\" tabindex=\"-1\"><span class=\"owl-dt-container-info-label\">{{toLabel}}:</span> <span class=\"owl-dt-container-info-value\">{{toFormattedValue}}</span></span></div></div><div *ngIf=\"showControlButtons\" class=\"owl-dt-container-buttons owl-dt-container-row\"><button class=\"owl-dt-control owl-dt-control-button owl-dt-container-control-button\" type=\"button\" tabindex=\"0\" (click)=\"onCancelClicked($event)\"><span class=\"owl-dt-control-content owl-dt-control-button-content\" tabindex=\"-1\">{{cancelLabel}}</span></button> <button class=\"owl-dt-control owl-dt-control-button owl-dt-container-control-button\" type=\"button\" tabindex=\"0\" (click)=\"onSetClicked($event)\"><span class=\"owl-dt-control-content owl-dt-control-button-content\" tabindex=\"-1\">{{setLabel}}</span></button></div></div>",
              styles: [""],
              changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
              preserveWhitespaces: false,
              animations: [_date_time_picker_animations__WEBPACK_IMPORTED_MODULE_8__["owlDateTimePickerAnimations"].transformPicker, _date_time_picker_animations__WEBPACK_IMPORTED_MODULE_8__["owlDateTimePickerAnimations"].fadeInPicker]
            }]
          }], function () {
            return [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
            }, {
              type: _date_time_picker_intl_service__WEBPACK_IMPORTED_MODULE_1__["OwlDateTimeIntl"]
            }, {
              type: _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__["DateTimeAdapter"],
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
              }]
            }];
          }, {
            owlDTContainerClass: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['class.owl-dt-container']
            }],
            owlDTPopupContainerClass: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['class.owl-dt-popup-container']
            }],
            owlDTDialogContainerClass: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['class.owl-dt-dialog-container']
            }],
            owlDTInlineContainerClass: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['class.owl-dt-inline-container']
            }],
            owlDTContainerDisabledClass: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['class.owl-dt-container-disabled']
            }],
            owlDTContainerId: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['attr.id']
            }],
            owlDTContainerAnimation: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['@transformPicker']
            }],
            handleContainerAnimationDone: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
              args: ['@transformPicker.done', ['$event']]
            }],
            calendar: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
              args: [_calendar_component__WEBPACK_IMPORTED_MODULE_5__["OwlCalendarComponent"]]
            }],
            timer: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
              args: [_timer_component__WEBPACK_IMPORTED_MODULE_6__["OwlTimerComponent"]]
            }]
          });
        })();

        return OwlDateTimeContainerComponent;
      }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64, 

      /***/

    },

    /***/
    "4woR":
    /*!******************************************************!*\
      !*** ./node_modules/aws-sdk/lib/browserCryptoLib.js ***!
      \******************************************************/

    /*! no static exports found */

    /***/
    function woR(module, exports, __webpack_require__) {
      var Hmac = __webpack_require__(
      /*! ./browserHmac */
      "+OK2");

      var Md5 = __webpack_require__(
      /*! ./browserMd5 */
      "xWtM");

      var Sha1 = __webpack_require__(
      /*! ./browserSha1 */
      "w3cK");

      var Sha256 = __webpack_require__(
      /*! ./browserSha256 */
      "ynUr");
      /**
       * @api private
       */


      module.exports = exports = {
        createHash: function createHash(alg) {
          alg = alg.toLowerCase();

          if (alg === 'md5') {
            return new Md5();
          } else if (alg === 'sha256') {
            return new Sha256();
          } else if (alg === 'sha1') {
            return new Sha1();
          }

          throw new Error('Hash algorithm ' + alg + ' is not supported in the browser SDK');
        },
        createHmac: function createHmac(alg, key) {
          alg = alg.toLowerCase();

          if (alg === 'md5') {
            return new Hmac(Md5, key);
          } else if (alg === 'sha256') {
            return new Hmac(Sha256, key);
          } else if (alg === 'sha1') {
            return new Hmac(Sha1, key);
          }

          throw new Error('HMAC algorithm ' + alg + ' is not supported in the browser SDK');
        },
        createSign: function createSign() {
          throw new Error('createSign is not implemented in the browser');
        }
      };
      /***/
    },

    /***/
    "4yVj":
    /*!**************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/scheduled/schedulePromise.js ***!
      \**************************************************************************/

    /*! exports provided: schedulePromise */

    /***/
    function yVj(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "schedulePromise", function () {
        return schedulePromise;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../Subscription */
      "quSY");

      function schedulePromise(input, scheduler) {
        return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
          var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
          sub.add(scheduler.schedule(function () {
            return input.then(function (value) {
              sub.add(scheduler.schedule(function () {
                subscriber.next(value);
                sub.add(scheduler.schedule(function () {
                  return subscriber.complete();
                }));
              }));
            }, function (err) {
              sub.add(scheduler.schedule(function () {
                return subscriber.error(err);
              }));
            });
          }));
          return sub;
        });
      } //# sourceMappingURL=schedulePromise.js.map

      /***/

    },

    /***/
    "5+tZ":
    /*!*******************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/mergeMap.js ***!
      \*******************************************************************/

    /*! exports provided: mergeMap, MergeMapOperator, MergeMapSubscriber, flatMap */

    /***/
    function tZ(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "mergeMap", function () {
        return mergeMap;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MergeMapOperator", function () {
        return MergeMapOperator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MergeMapSubscriber", function () {
        return MergeMapSubscriber;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "flatMap", function () {
        return flatMap;
      });
      /* harmony import */


      var _map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./map */
      "lJxs");
      /* harmony import */


      var _observable_from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../observable/from */
      "Cfvw");
      /* harmony import */


      var _innerSubscribe__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../innerSubscribe */
      "zx2A");

      function mergeMap(project, resultSelector) {
        var concurrent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Number.POSITIVE_INFINITY;

        if (typeof resultSelector === 'function') {
          return function (source) {
            return source.pipe(mergeMap(function (a, i) {
              return Object(_observable_from__WEBPACK_IMPORTED_MODULE_1__["from"])(project(a, i)).pipe(Object(_map__WEBPACK_IMPORTED_MODULE_0__["map"])(function (b, ii) {
                return resultSelector(a, b, i, ii);
              }));
            }, concurrent));
          };
        } else if (typeof resultSelector === 'number') {
          concurrent = resultSelector;
        }

        return function (source) {
          return source.lift(new MergeMapOperator(project, concurrent));
        };
      }

      var MergeMapOperator = /*#__PURE__*/function () {
        function MergeMapOperator(project) {
          var concurrent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.POSITIVE_INFINITY;

          _classCallCheck2(this, MergeMapOperator);

          this.project = project;
          this.concurrent = concurrent;
        }

        _createClass2(MergeMapOperator, [{
          key: "call",
          value: function call(observer, source) {
            return source.subscribe(new MergeMapSubscriber(observer, this.project, this.concurrent));
          }
        }]);

        return MergeMapOperator;
      }();

      var MergeMapSubscriber = /*#__PURE__*/function (_innerSubscribe__WEBP4) {
        _inherits2(MergeMapSubscriber, _innerSubscribe__WEBP4);

        var _super196 = _createSuper(MergeMapSubscriber);

        function MergeMapSubscriber(destination, project) {
          var _this490;

          var concurrent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Number.POSITIVE_INFINITY;

          _classCallCheck2(this, MergeMapSubscriber);

          _this490 = _super196.call(this, destination);
          _this490.project = project;
          _this490.concurrent = concurrent;
          _this490.hasCompleted = false;
          _this490.buffer = [];
          _this490.active = 0;
          _this490.index = 0;
          return _this490;
        }

        _createClass2(MergeMapSubscriber, [{
          key: "_next",
          value: function _next(value) {
            if (this.active < this.concurrent) {
              this._tryNext(value);
            } else {
              this.buffer.push(value);
            }
          }
        }, {
          key: "_tryNext",
          value: function _tryNext(value) {
            var result;
            var index = this.index++;

            try {
              result = this.project(value, index);
            } catch (err) {
              this.destination.error(err);
              return;
            }

            this.active++;

            this._innerSub(result);
          }
        }, {
          key: "_innerSub",
          value: function _innerSub(ish) {
            var innerSubscriber = new _innerSubscribe__WEBPACK_IMPORTED_MODULE_2__["SimpleInnerSubscriber"](this);
            var destination = this.destination;
            destination.add(innerSubscriber);
            var innerSubscription = Object(_innerSubscribe__WEBPACK_IMPORTED_MODULE_2__["innerSubscribe"])(ish, innerSubscriber);

            if (innerSubscription !== innerSubscriber) {
              destination.add(innerSubscription);
            }
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.hasCompleted = true;

            if (this.active === 0 && this.buffer.length === 0) {
              this.destination.complete();
            }

            this.unsubscribe();
          }
        }, {
          key: "notifyNext",
          value: function notifyNext(innerValue) {
            this.destination.next(innerValue);
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete() {
            var buffer = this.buffer;
            this.active--;

            if (buffer.length > 0) {
              this._next(buffer.shift());
            } else if (this.active === 0 && this.hasCompleted) {
              this.destination.complete();
            }
          }
        }]);

        return MergeMapSubscriber;
      }(_innerSubscribe__WEBPACK_IMPORTED_MODULE_2__["SimpleOuterSubscriber"]);

      var flatMap = mergeMap; //# sourceMappingURL=mergeMap.js.map

      /***/
    },

    /***/
    "51Bx":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/mergeScan.js ***!
      \********************************************************************/

    /*! exports provided: mergeScan, MergeScanOperator, MergeScanSubscriber */

    /***/
    function Bx(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "mergeScan", function () {
        return mergeScan;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MergeScanOperator", function () {
        return MergeScanOperator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MergeScanSubscriber", function () {
        return MergeScanSubscriber;
      });
      /* harmony import */


      var _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../innerSubscribe */
      "zx2A");

      function mergeScan(accumulator, seed) {
        var concurrent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Number.POSITIVE_INFINITY;
        return function (source) {
          return source.lift(new MergeScanOperator(accumulator, seed, concurrent));
        };
      }

      var MergeScanOperator = /*#__PURE__*/function () {
        function MergeScanOperator(accumulator, seed, concurrent) {
          _classCallCheck2(this, MergeScanOperator);

          this.accumulator = accumulator;
          this.seed = seed;
          this.concurrent = concurrent;
        }

        _createClass2(MergeScanOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new MergeScanSubscriber(subscriber, this.accumulator, this.seed, this.concurrent));
          }
        }]);

        return MergeScanOperator;
      }();

      var MergeScanSubscriber = /*#__PURE__*/function (_innerSubscribe__WEBP5) {
        _inherits2(MergeScanSubscriber, _innerSubscribe__WEBP5);

        var _super197 = _createSuper(MergeScanSubscriber);

        function MergeScanSubscriber(destination, accumulator, acc, concurrent) {
          var _this491;

          _classCallCheck2(this, MergeScanSubscriber);

          _this491 = _super197.call(this, destination);
          _this491.accumulator = accumulator;
          _this491.acc = acc;
          _this491.concurrent = concurrent;
          _this491.hasValue = false;
          _this491.hasCompleted = false;
          _this491.buffer = [];
          _this491.active = 0;
          _this491.index = 0;
          return _this491;
        }

        _createClass2(MergeScanSubscriber, [{
          key: "_next",
          value: function _next(value) {
            if (this.active < this.concurrent) {
              var index = this.index++;
              var destination = this.destination;
              var ish;

              try {
                var accumulator = this.accumulator;
                ish = accumulator(this.acc, value, index);
              } catch (e) {
                return destination.error(e);
              }

              this.active++;

              this._innerSub(ish);
            } else {
              this.buffer.push(value);
            }
          }
        }, {
          key: "_innerSub",
          value: function _innerSub(ish) {
            var innerSubscriber = new _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleInnerSubscriber"](this);
            var destination = this.destination;
            destination.add(innerSubscriber);
            var innerSubscription = Object(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["innerSubscribe"])(ish, innerSubscriber);

            if (innerSubscription !== innerSubscriber) {
              destination.add(innerSubscription);
            }
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.hasCompleted = true;

            if (this.active === 0 && this.buffer.length === 0) {
              if (this.hasValue === false) {
                this.destination.next(this.acc);
              }

              this.destination.complete();
            }

            this.unsubscribe();
          }
        }, {
          key: "notifyNext",
          value: function notifyNext(innerValue) {
            var destination = this.destination;
            this.acc = innerValue;
            this.hasValue = true;
            destination.next(innerValue);
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete() {
            var buffer = this.buffer;
            this.active--;

            if (buffer.length > 0) {
              this._next(buffer.shift());
            } else if (this.active === 0 && this.hasCompleted) {
              if (this.hasValue === false) {
                this.destination.next(this.acc);
              }

              this.destination.complete();
            }
          }
        }]);

        return MergeScanSubscriber;
      }(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleOuterSubscriber"]); //# sourceMappingURL=mergeScan.js.map

      /***/

    },

    /***/
    "51Dv":
    /*!****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/InnerSubscriber.js ***!
      \****************************************************************/

    /*! exports provided: InnerSubscriber */

    /***/
    function Dv(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "InnerSubscriber", function () {
        return InnerSubscriber;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./Subscriber */
      "7o/Q");

      var InnerSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_8) {
        _inherits2(InnerSubscriber, _Subscriber__WEBPACK_8);

        var _super198 = _createSuper(InnerSubscriber);

        function InnerSubscriber(parent, outerValue, outerIndex) {
          var _this492;

          _classCallCheck2(this, InnerSubscriber);

          _this492 = _super198.call(this);
          _this492.parent = parent;
          _this492.outerValue = outerValue;
          _this492.outerIndex = outerIndex;
          _this492.index = 0;
          return _this492;
        }

        _createClass2(InnerSubscriber, [{
          key: "_next",
          value: function _next(value) {
            this.parent.notifyNext(this.outerValue, value, this.outerIndex, this.index++, this);
          }
        }, {
          key: "_error",
          value: function _error(error) {
            this.parent.notifyError(error, this);
            this.unsubscribe();
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.parent.notifyComplete(this);
            this.unsubscribe();
          }
        }]);

        return InnerSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=InnerSubscriber.js.map

      /***/

    },

    /***/
    "5B2Y":
    /*!*****************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/scheduled/scheduleObservable.js ***!
      \*****************************************************************************/

    /*! exports provided: scheduleObservable */

    /***/
    function B2Y(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "scheduleObservable", function () {
        return scheduleObservable;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../Subscription */
      "quSY");
      /* harmony import */


      var _symbol_observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../symbol/observable */
      "kJWO");

      function scheduleObservable(input, scheduler) {
        return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
          var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
          sub.add(scheduler.schedule(function () {
            var observable = input[_symbol_observable__WEBPACK_IMPORTED_MODULE_2__["observable"]]();

            sub.add(observable.subscribe({
              next: function next(value) {
                sub.add(scheduler.schedule(function () {
                  return subscriber.next(value);
                }));
              },
              error: function error(err) {
                sub.add(scheduler.schedule(function () {
                  return subscriber.error(err);
                }));
              },
              complete: function complete() {
                sub.add(scheduler.schedule(function () {
                  return subscriber.complete();
                }));
              }
            }));
          }));
          return sub;
        });
      } //# sourceMappingURL=scheduleObservable.js.map

      /***/

    },

    /***/
    "5RNC":
    /*!************************************************************************!*\
      !*** ./node_modules/@angular/material/__ivy_ngcc__/fesm2015/slider.js ***!
      \************************************************************************/

    /*! exports provided: MAT_SLIDER_VALUE_ACCESSOR, MatSlider, MatSliderChange, MatSliderModule */

    /***/
    function RNC(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_SLIDER_VALUE_ACCESSOR", function () {
        return MAT_SLIDER_VALUE_ACCESSOR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatSlider", function () {
        return MatSlider;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatSliderChange", function () {
        return MatSliderChange;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatSliderModule", function () {
        return MatSliderModule;
      });
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_material_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/material/core */
      "FKr1");
      /* harmony import */


      var _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/cdk/a11y */
      "u47x");
      /* harmony import */


      var _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/cdk/bidi */
      "cH1L");
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");
      /* harmony import */


      var _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! @angular/cdk/keycodes */
      "FtGj");
      /* harmony import */


      var _angular_forms__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! @angular/forms */
      "3Pt+");
      /* harmony import */


      var _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(
      /*! @angular/platform-browser/animations */
      "R1ws");
      /* harmony import */


      var _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(
      /*! @angular/cdk/platform */
      "nLfN");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var _c0 = ["sliderWrapper"];
      var activeEventOptions = Object(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__["normalizePassiveListenerOptions"])({
        passive: false
      });
      /**
       * Visually, a 30px separation between tick marks looks best. This is very subjective but it is
       * the default separation we chose.
       */

      var MIN_AUTO_TICK_SEPARATION = 30;
      /** The thumb gap size for a disabled slider. */

      var DISABLED_THUMB_GAP = 7;
      /** The thumb gap size for a non-active slider at its minimum value. */

      var MIN_VALUE_NONACTIVE_THUMB_GAP = 7;
      /** The thumb gap size for an active slider at its minimum value. */

      var MIN_VALUE_ACTIVE_THUMB_GAP = 10;
      /**
       * Provider Expression that allows mat-slider to register as a ControlValueAccessor.
       * This allows it to support [(ngModel)] and [formControl].
       * @docs-private
       */

      var MAT_SLIDER_VALUE_ACCESSOR = {
        provide: _angular_forms__WEBPACK_IMPORTED_MODULE_7__["NG_VALUE_ACCESSOR"],
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["forwardRef"])(function () {
          return MatSlider;
        }),
        multi: true
      };
      /** A simple change event emitted by the MatSlider component. */

      var MatSliderChange = function MatSliderChange() {
        _classCallCheck2(this, MatSliderChange);
      }; // Boilerplate for applying mixins to MatSlider.

      /** @docs-private */


      var MatSliderBase = function MatSliderBase(_elementRef) {
        _classCallCheck2(this, MatSliderBase);

        this._elementRef = _elementRef;
      };

      var _MatSliderMixinBase = Object(_angular_material_core__WEBPACK_IMPORTED_MODULE_2__["mixinTabIndex"])(Object(_angular_material_core__WEBPACK_IMPORTED_MODULE_2__["mixinColor"])(Object(_angular_material_core__WEBPACK_IMPORTED_MODULE_2__["mixinDisabled"])(MatSliderBase), 'accent'));
      /**
       * Allows users to select from a range of values by moving the slider thumb. It is similar in
       * behavior to the native `<input type="range">` element.
       */


      var MatSlider = /*#__PURE__*/function (_MatSliderMixinBase2) {
        _inherits2(MatSlider, _MatSliderMixinBase2);

        var _super199 = _createSuper(MatSlider);

        function MatSlider(elementRef, _focusMonitor, _changeDetectorRef, _dir, tabIndex, _ngZone, _document, _animationMode) {
          var _this493;

          _classCallCheck2(this, MatSlider);

          _this493 = _super199.call(this, elementRef);
          _this493._focusMonitor = _focusMonitor;
          _this493._changeDetectorRef = _changeDetectorRef;
          _this493._dir = _dir;
          _this493._ngZone = _ngZone;
          _this493._animationMode = _animationMode;
          _this493._invert = false;
          _this493._max = 100;
          _this493._min = 0;
          _this493._step = 1;
          _this493._thumbLabel = false;
          _this493._tickInterval = 0;
          _this493._value = null;
          _this493._vertical = false;
          /** Event emitted when the slider value has changed. */

          _this493.change = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["EventEmitter"]();
          /** Event emitted when the slider thumb moves. */

          _this493.input = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["EventEmitter"]();
          /**
           * Emits when the raw value of the slider changes. This is here primarily
           * to facilitate the two-way binding for the `value` input.
           * @docs-private
           */

          _this493.valueChange = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["EventEmitter"]();
          /** onTouch function registered via registerOnTouch (ControlValueAccessor). */

          _this493.onTouched = function () {};

          _this493._percent = 0;
          /**
           * Whether or not the thumb is sliding.
           * Used to determine if there should be a transition for the thumb and fill track.
           */

          _this493._isSliding = false;
          /**
           * Whether or not the slider is active (clicked or sliding).
           * Used to shrink and grow the thumb as according to the Material Design spec.
           */

          _this493._isActive = false;
          /** The size of a tick interval as a percentage of the size of the track. */

          _this493._tickIntervalPercent = 0;
          /** The dimensions of the slider. */

          _this493._sliderDimensions = null;

          _this493._controlValueAccessorChangeFn = function () {};
          /** Subscription to the Directionality change EventEmitter. */


          _this493._dirChangeSubscription = rxjs__WEBPACK_IMPORTED_MODULE_10__["Subscription"].EMPTY;
          /** Called when the user has put their pointer down on the slider. */

          _this493._pointerDown = function (event) {
            // Don't do anything if the slider is disabled or the
            // user is using anything other than the main mouse button.
            if (_this493.disabled || _this493._isSliding || !isTouchEvent(event) && event.button !== 0) {
              return;
            }

            _this493._ngZone.run(function () {
              var oldValue = _this493.value;
              var pointerPosition = getPointerPositionOnPage(event);
              _this493._isSliding = true;
              _this493._lastPointerEvent = event;
              event.preventDefault();

              _this493._focusHostElement();

              _this493._onMouseenter(); // Simulate mouseenter in case this is a mobile device.


              _this493._bindGlobalEvents(event);

              _this493._focusHostElement();

              _this493._updateValueFromPosition(pointerPosition);

              _this493._valueOnSlideStart = oldValue; // Emit a change and input event if the value changed.

              if (oldValue != _this493.value) {
                _this493._emitInputEvent();
              }
            });
          };
          /**
           * Called when the user has moved their pointer after
           * starting to drag. Bound on the document level.
           */


          _this493._pointerMove = function (event) {
            if (_this493._isSliding) {
              // Prevent the slide from selecting anything else.
              event.preventDefault();
              var oldValue = _this493.value;
              _this493._lastPointerEvent = event;

              _this493._updateValueFromPosition(getPointerPositionOnPage(event)); // Native range elements always emit `input` events when the value changed while sliding.


              if (oldValue != _this493.value) {
                _this493._emitInputEvent();
              }
            }
          };
          /** Called when the user has lifted their pointer. Bound on the document level. */


          _this493._pointerUp = function (event) {
            if (_this493._isSliding) {
              event.preventDefault();

              _this493._removeGlobalEvents();

              _this493._isSliding = false;

              if (_this493._valueOnSlideStart != _this493.value && !_this493.disabled) {
                _this493._emitChangeEvent();
              }

              _this493._valueOnSlideStart = _this493._lastPointerEvent = null;
            }
          };
          /** Called when the window has lost focus. */


          _this493._windowBlur = function () {
            // If the window is blurred while dragging we need to stop dragging because the
            // browser won't dispatch the `mouseup` and `touchend` events anymore.
            if (_this493._lastPointerEvent) {
              _this493._pointerUp(_this493._lastPointerEvent);
            }
          };

          _this493._document = _document;
          _this493.tabIndex = parseInt(tabIndex) || 0;

          _ngZone.runOutsideAngular(function () {
            var element = elementRef.nativeElement;
            element.addEventListener('mousedown', _this493._pointerDown, activeEventOptions);
            element.addEventListener('touchstart', _this493._pointerDown, activeEventOptions);
          });

          return _this493;
        }
        /** Whether the slider is inverted. */


        _createClass2(MatSlider, [{
          key: "invert",
          get: function get() {
            return this._invert;
          },
          set: function set(value) {
            this._invert = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceBooleanProperty"])(value);
          }
          /** The maximum value that the slider can have. */

        }, {
          key: "max",
          get: function get() {
            return this._max;
          },
          set: function set(v) {
            this._max = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceNumberProperty"])(v, this._max);
            this._percent = this._calculatePercentage(this._value); // Since this also modifies the percentage, we need to let the change detection know.

            this._changeDetectorRef.markForCheck();
          }
          /** The minimum value that the slider can have. */

        }, {
          key: "min",
          get: function get() {
            return this._min;
          },
          set: function set(v) {
            this._min = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceNumberProperty"])(v, this._min); // If the value wasn't explicitly set by the user, set it to the min.

            if (this._value === null) {
              this.value = this._min;
            }

            this._percent = this._calculatePercentage(this._value); // Since this also modifies the percentage, we need to let the change detection know.

            this._changeDetectorRef.markForCheck();
          }
          /** The values at which the thumb will snap. */

        }, {
          key: "step",
          get: function get() {
            return this._step;
          },
          set: function set(v) {
            this._step = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceNumberProperty"])(v, this._step);

            if (this._step % 1 !== 0) {
              this._roundToDecimal = this._step.toString().split('.').pop().length;
            } // Since this could modify the label, we need to notify the change detection.


            this._changeDetectorRef.markForCheck();
          }
          /** Whether or not to show the thumb label. */

        }, {
          key: "thumbLabel",
          get: function get() {
            return this._thumbLabel;
          },
          set: function set(value) {
            this._thumbLabel = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceBooleanProperty"])(value);
          }
          /**
           * How often to show ticks. Relative to the step so that a tick always appears on a step.
           * Ex: Tick interval of 4 with a step of 3 will draw a tick every 4 steps (every 12 values).
           */

        }, {
          key: "tickInterval",
          get: function get() {
            return this._tickInterval;
          },
          set: function set(value) {
            if (value === 'auto') {
              this._tickInterval = 'auto';
            } else if (typeof value === 'number' || typeof value === 'string') {
              this._tickInterval = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceNumberProperty"])(value, this._tickInterval);
            } else {
              this._tickInterval = 0;
            }
          }
          /** Value of the slider. */

        }, {
          key: "value",
          get: function get() {
            // If the value needs to be read and it is still uninitialized, initialize it to the min.
            if (this._value === null) {
              this.value = this._min;
            }

            return this._value;
          },
          set: function set(v) {
            if (v !== this._value) {
              var value = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceNumberProperty"])(v); // While incrementing by a decimal we can end up with values like 33.300000000000004.
              // Truncate it to ensure that it matches the label and to make it easier to work with.

              if (this._roundToDecimal && value !== this.min && value !== this.max) {
                value = parseFloat(value.toFixed(this._roundToDecimal));
              }

              this._value = value;
              this._percent = this._calculatePercentage(this._value); // Since this also modifies the percentage, we need to let the change detection know.

              this._changeDetectorRef.markForCheck();
            }
          }
          /** Whether the slider is vertical. */

        }, {
          key: "vertical",
          get: function get() {
            return this._vertical;
          },
          set: function set(value) {
            this._vertical = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceBooleanProperty"])(value);
          }
          /** The value to be used for display purposes. */

        }, {
          key: "displayValue",
          get: function get() {
            if (this.displayWith) {
              // Value is never null but since setters and getters cannot have
              // different types, the value getter is also typed to return null.
              return this.displayWith(this.value);
            } // Note that this could be improved further by rounding something like 0.999 to 1 or
            // 0.899 to 0.9, however it is very performance sensitive, because it gets called on
            // every change detection cycle.


            if (this._roundToDecimal && this.value && this.value % 1 !== 0) {
              return this.value.toFixed(this._roundToDecimal);
            }

            return this.value || 0;
          }
          /** set focus to the host element */

        }, {
          key: "focus",
          value: function focus(options) {
            this._focusHostElement(options);
          }
          /** blur the host element */

        }, {
          key: "blur",
          value: function blur() {
            this._blurHostElement();
          }
          /** The percentage of the slider that coincides with the value. */

        }, {
          key: "percent",
          get: function get() {
            return this._clamp(this._percent);
          }
          /**
           * Whether the axis of the slider is inverted.
           * (i.e. whether moving the thumb in the positive x or y direction decreases the slider's value).
           */

        }, {
          key: "_shouldInvertAxis",
          value: function _shouldInvertAxis() {
            // Standard non-inverted mode for a vertical slider should be dragging the thumb from bottom to
            // top. However from a y-axis standpoint this is inverted.
            return this.vertical ? !this.invert : this.invert;
          }
          /** Whether the slider is at its minimum value. */

        }, {
          key: "_isMinValue",
          value: function _isMinValue() {
            return this.percent === 0;
          }
          /**
           * The amount of space to leave between the slider thumb and the track fill & track background
           * elements.
           */

        }, {
          key: "_getThumbGap",
          value: function _getThumbGap() {
            if (this.disabled) {
              return DISABLED_THUMB_GAP;
            }

            if (this._isMinValue() && !this.thumbLabel) {
              return this._isActive ? MIN_VALUE_ACTIVE_THUMB_GAP : MIN_VALUE_NONACTIVE_THUMB_GAP;
            }

            return 0;
          }
          /** CSS styles for the track background element. */

        }, {
          key: "_getTrackBackgroundStyles",
          value: function _getTrackBackgroundStyles() {
            var axis = this.vertical ? 'Y' : 'X';
            var scale = this.vertical ? "1, ".concat(1 - this.percent, ", 1") : "".concat(1 - this.percent, ", 1, 1");
            var sign = this._shouldInvertMouseCoords() ? '-' : '';
            return {
              // scale3d avoids some rendering issues in Chrome. See #12071.
              transform: "translate".concat(axis, "(").concat(sign).concat(this._getThumbGap(), "px) scale3d(").concat(scale, ")")
            };
          }
          /** CSS styles for the track fill element. */

        }, {
          key: "_getTrackFillStyles",
          value: function _getTrackFillStyles() {
            var percent = this.percent;
            var axis = this.vertical ? 'Y' : 'X';
            var scale = this.vertical ? "1, ".concat(percent, ", 1") : "".concat(percent, ", 1, 1");
            var sign = this._shouldInvertMouseCoords() ? '' : '-';
            return {
              // scale3d avoids some rendering issues in Chrome. See #12071.
              transform: "translate".concat(axis, "(").concat(sign).concat(this._getThumbGap(), "px) scale3d(").concat(scale, ")"),
              // iOS Safari has a bug where it won't re-render elements which start of as `scale(0)` until
              // something forces a style recalculation on it. Since we'll end up with `scale(0)` when
              // the value of the slider is 0, we can easily get into this situation. We force a
              // recalculation by changing the element's `display` when it goes from 0 to any other value.
              display: percent === 0 ? 'none' : ''
            };
          }
          /** CSS styles for the ticks container element. */

        }, {
          key: "_getTicksContainerStyles",
          value: function _getTicksContainerStyles() {
            var axis = this.vertical ? 'Y' : 'X'; // For a horizontal slider in RTL languages we push the ticks container off the left edge
            // instead of the right edge to avoid causing a horizontal scrollbar to appear.

            var sign = !this.vertical && this._getDirection() == 'rtl' ? '' : '-';
            var offset = this._tickIntervalPercent / 2 * 100;
            return {
              'transform': "translate".concat(axis, "(").concat(sign).concat(offset, "%)")
            };
          }
          /** CSS styles for the ticks element. */

        }, {
          key: "_getTicksStyles",
          value: function _getTicksStyles() {
            var tickSize = this._tickIntervalPercent * 100;
            var backgroundSize = this.vertical ? "2px ".concat(tickSize, "%") : "".concat(tickSize, "% 2px");
            var axis = this.vertical ? 'Y' : 'X'; // Depending on the direction we pushed the ticks container, push the ticks the opposite
            // direction to re-center them but clip off the end edge. In RTL languages we need to flip the
            // ticks 180 degrees so we're really cutting off the end edge abd not the start.

            var sign = !this.vertical && this._getDirection() == 'rtl' ? '-' : '';
            var rotate = !this.vertical && this._getDirection() == 'rtl' ? ' rotate(180deg)' : '';
            var styles = {
              'backgroundSize': backgroundSize,
              // Without translateZ ticks sometimes jitter as the slider moves on Chrome & Firefox.
              'transform': "translateZ(0) translate".concat(axis, "(").concat(sign).concat(tickSize / 2, "%)").concat(rotate)
            };

            if (this._isMinValue() && this._getThumbGap()) {
              var shouldInvertAxis = this._shouldInvertAxis();

              var side;

              if (this.vertical) {
                side = shouldInvertAxis ? 'Bottom' : 'Top';
              } else {
                side = shouldInvertAxis ? 'Right' : 'Left';
              }

              styles["padding".concat(side)] = "".concat(this._getThumbGap(), "px");
            }

            return styles;
          }
        }, {
          key: "_getThumbContainerStyles",
          value: function _getThumbContainerStyles() {
            var shouldInvertAxis = this._shouldInvertAxis();

            var axis = this.vertical ? 'Y' : 'X'; // For a horizontal slider in RTL languages we push the thumb container off the left edge
            // instead of the right edge to avoid causing a horizontal scrollbar to appear.

            var invertOffset = this._getDirection() == 'rtl' && !this.vertical ? !shouldInvertAxis : shouldInvertAxis;
            var offset = (invertOffset ? this.percent : 1 - this.percent) * 100;
            return {
              'transform': "translate".concat(axis, "(-").concat(offset, "%)")
            };
          }
          /**
           * Whether mouse events should be converted to a slider position by calculating their distance
           * from the right or bottom edge of the slider as opposed to the top or left.
           */

        }, {
          key: "_shouldInvertMouseCoords",
          value: function _shouldInvertMouseCoords() {
            var shouldInvertAxis = this._shouldInvertAxis();

            return this._getDirection() == 'rtl' && !this.vertical ? !shouldInvertAxis : shouldInvertAxis;
          }
          /** The language direction for this slider element. */

        }, {
          key: "_getDirection",
          value: function _getDirection() {
            return this._dir && this._dir.value == 'rtl' ? 'rtl' : 'ltr';
          }
        }, {
          key: "ngAfterViewInit",
          value: function ngAfterViewInit() {
            var _this494 = this;

            this._focusMonitor.monitor(this._elementRef, true).subscribe(function (origin) {
              _this494._isActive = !!origin && origin !== 'keyboard';

              _this494._changeDetectorRef.detectChanges();
            });

            if (this._dir) {
              this._dirChangeSubscription = this._dir.change.subscribe(function () {
                _this494._changeDetectorRef.markForCheck();
              });
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            var element = this._elementRef.nativeElement;
            element.removeEventListener('mousedown', this._pointerDown, activeEventOptions);
            element.removeEventListener('touchstart', this._pointerDown, activeEventOptions);
            this._lastPointerEvent = null;

            this._removeGlobalEvents();

            this._focusMonitor.stopMonitoring(this._elementRef);

            this._dirChangeSubscription.unsubscribe();
          }
        }, {
          key: "_onMouseenter",
          value: function _onMouseenter() {
            if (this.disabled) {
              return;
            } // We save the dimensions of the slider here so we can use them to update the spacing of the
            // ticks and determine where on the slider click and slide events happen.


            this._sliderDimensions = this._getSliderDimensions();

            this._updateTickIntervalPercent();
          }
        }, {
          key: "_onFocus",
          value: function _onFocus() {
            // We save the dimensions of the slider here so we can use them to update the spacing of the
            // ticks and determine where on the slider click and slide events happen.
            this._sliderDimensions = this._getSliderDimensions();

            this._updateTickIntervalPercent();
          }
        }, {
          key: "_onBlur",
          value: function _onBlur() {
            this.onTouched();
          }
        }, {
          key: "_onKeydown",
          value: function _onKeydown(event) {
            if (this.disabled || Object(_angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_6__["hasModifierKey"])(event)) {
              return;
            }

            var oldValue = this.value;

            switch (event.keyCode) {
              case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_6__["PAGE_UP"]:
                this._increment(10);

                break;

              case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_6__["PAGE_DOWN"]:
                this._increment(-10);

                break;

              case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_6__["END"]:
                this.value = this.max;
                break;

              case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_6__["HOME"]:
                this.value = this.min;
                break;

              case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_6__["LEFT_ARROW"]:
                // NOTE: For a sighted user it would make more sense that when they press an arrow key on an
                // inverted slider the thumb moves in that direction. However for a blind user, nothing
                // about the slider indicates that it is inverted. They will expect left to be decrement,
                // regardless of how it appears on the screen. For speakers ofRTL languages, they probably
                // expect left to mean increment. Therefore we flip the meaning of the side arrow keys for
                // RTL. For inverted sliders we prefer a good a11y experience to having it "look right" for
                // sighted users, therefore we do not swap the meaning.
                this._increment(this._getDirection() == 'rtl' ? 1 : -1);

                break;

              case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_6__["UP_ARROW"]:
                this._increment(1);

                break;

              case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_6__["RIGHT_ARROW"]:
                // See comment on LEFT_ARROW about the conditions under which we flip the meaning.
                this._increment(this._getDirection() == 'rtl' ? -1 : 1);

                break;

              case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_6__["DOWN_ARROW"]:
                this._increment(-1);

                break;

              default:
                // Return if the key is not one that we explicitly handle to avoid calling preventDefault on
                // it.
                return;
            }

            if (oldValue != this.value) {
              this._emitInputEvent();

              this._emitChangeEvent();
            }

            this._isSliding = true;
            event.preventDefault();
          }
        }, {
          key: "_onKeyup",
          value: function _onKeyup() {
            this._isSliding = false;
          }
          /** Use defaultView of injected document if available or fallback to global window reference */

        }, {
          key: "_getWindow",
          value: function _getWindow() {
            return this._document.defaultView || window;
          }
          /**
           * Binds our global move and end events. They're bound at the document level and only while
           * dragging so that the user doesn't have to keep their pointer exactly over the slider
           * as they're swiping across the screen.
           */

        }, {
          key: "_bindGlobalEvents",
          value: function _bindGlobalEvents(triggerEvent) {
            // Note that we bind the events to the `document`, because it allows us to capture
            // drag cancel events where the user's pointer is outside the browser window.
            var document = this._document;
            var isTouch = isTouchEvent(triggerEvent);
            var moveEventName = isTouch ? 'touchmove' : 'mousemove';
            var endEventName = isTouch ? 'touchend' : 'mouseup';
            document.addEventListener(moveEventName, this._pointerMove, activeEventOptions);
            document.addEventListener(endEventName, this._pointerUp, activeEventOptions);

            if (isTouch) {
              document.addEventListener('touchcancel', this._pointerUp, activeEventOptions);
            }

            var window = this._getWindow();

            if (typeof window !== 'undefined' && window) {
              window.addEventListener('blur', this._windowBlur);
            }
          }
          /** Removes any global event listeners that we may have added. */

        }, {
          key: "_removeGlobalEvents",
          value: function _removeGlobalEvents() {
            var document = this._document;
            document.removeEventListener('mousemove', this._pointerMove, activeEventOptions);
            document.removeEventListener('mouseup', this._pointerUp, activeEventOptions);
            document.removeEventListener('touchmove', this._pointerMove, activeEventOptions);
            document.removeEventListener('touchend', this._pointerUp, activeEventOptions);
            document.removeEventListener('touchcancel', this._pointerUp, activeEventOptions);

            var window = this._getWindow();

            if (typeof window !== 'undefined' && window) {
              window.removeEventListener('blur', this._windowBlur);
            }
          }
          /** Increments the slider by the given number of steps (negative number decrements). */

        }, {
          key: "_increment",
          value: function _increment(numSteps) {
            this.value = this._clamp((this.value || 0) + this.step * numSteps, this.min, this.max);
          }
          /** Calculate the new value from the new physical location. The value will always be snapped. */

        }, {
          key: "_updateValueFromPosition",
          value: function _updateValueFromPosition(pos) {
            if (!this._sliderDimensions) {
              return;
            }

            var offset = this.vertical ? this._sliderDimensions.top : this._sliderDimensions.left;
            var size = this.vertical ? this._sliderDimensions.height : this._sliderDimensions.width;
            var posComponent = this.vertical ? pos.y : pos.x; // The exact value is calculated from the event and used to find the closest snap value.

            var percent = this._clamp((posComponent - offset) / size);

            if (this._shouldInvertMouseCoords()) {
              percent = 1 - percent;
            } // Since the steps may not divide cleanly into the max value, if the user
            // slid to 0 or 100 percent, we jump to the min/max value. This approach
            // is slightly more intuitive than using `Math.ceil` below, because it
            // follows the user's pointer closer.


            if (percent === 0) {
              this.value = this.min;
            } else if (percent === 1) {
              this.value = this.max;
            } else {
              var exactValue = this._calculateValue(percent); // This calculation finds the closest step by finding the closest
              // whole number divisible by the step relative to the min.


              var closestValue = Math.round((exactValue - this.min) / this.step) * this.step + this.min; // The value needs to snap to the min and max.

              this.value = this._clamp(closestValue, this.min, this.max);
            }
          }
          /** Emits a change event if the current value is different from the last emitted value. */

        }, {
          key: "_emitChangeEvent",
          value: function _emitChangeEvent() {
            this._controlValueAccessorChangeFn(this.value);

            this.valueChange.emit(this.value);
            this.change.emit(this._createChangeEvent());
          }
          /** Emits an input event when the current value is different from the last emitted value. */

        }, {
          key: "_emitInputEvent",
          value: function _emitInputEvent() {
            this.input.emit(this._createChangeEvent());
          }
          /** Updates the amount of space between ticks as a percentage of the width of the slider. */

        }, {
          key: "_updateTickIntervalPercent",
          value: function _updateTickIntervalPercent() {
            if (!this.tickInterval || !this._sliderDimensions) {
              return;
            }

            if (this.tickInterval == 'auto') {
              var trackSize = this.vertical ? this._sliderDimensions.height : this._sliderDimensions.width;
              var pixelsPerStep = trackSize * this.step / (this.max - this.min);
              var stepsPerTick = Math.ceil(MIN_AUTO_TICK_SEPARATION / pixelsPerStep);
              var pixelsPerTick = stepsPerTick * this.step;
              this._tickIntervalPercent = pixelsPerTick / trackSize;
            } else {
              this._tickIntervalPercent = this.tickInterval * this.step / (this.max - this.min);
            }
          }
          /** Creates a slider change object from the specified value. */

        }, {
          key: "_createChangeEvent",
          value: function _createChangeEvent() {
            var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.value;
            var event = new MatSliderChange();
            event.source = this;
            event.value = value;
            return event;
          }
          /** Calculates the percentage of the slider that a value is. */

        }, {
          key: "_calculatePercentage",
          value: function _calculatePercentage(value) {
            return ((value || 0) - this.min) / (this.max - this.min);
          }
          /** Calculates the value a percentage of the slider corresponds to. */

        }, {
          key: "_calculateValue",
          value: function _calculateValue(percentage) {
            return this.min + percentage * (this.max - this.min);
          }
          /** Return a number between two numbers. */

        }, {
          key: "_clamp",
          value: function _clamp(value) {
            var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
            var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
            return Math.max(min, Math.min(value, max));
          }
          /**
           * Get the bounding client rect of the slider track element.
           * The track is used rather than the native element to ignore the extra space that the thumb can
           * take up.
           */

        }, {
          key: "_getSliderDimensions",
          value: function _getSliderDimensions() {
            return this._sliderWrapper ? this._sliderWrapper.nativeElement.getBoundingClientRect() : null;
          }
          /**
           * Focuses the native element.
           * Currently only used to allow a blur event to fire but will be used with keyboard input later.
           */

        }, {
          key: "_focusHostElement",
          value: function _focusHostElement(options) {
            this._elementRef.nativeElement.focus(options);
          }
          /** Blurs the native element. */

        }, {
          key: "_blurHostElement",
          value: function _blurHostElement() {
            this._elementRef.nativeElement.blur();
          }
          /**
           * Sets the model value. Implemented as part of ControlValueAccessor.
           * @param value
           */

        }, {
          key: "writeValue",
          value: function writeValue(value) {
            this.value = value;
          }
          /**
           * Registers a callback to be triggered when the value has changed.
           * Implemented as part of ControlValueAccessor.
           * @param fn Callback to be registered.
           */

        }, {
          key: "registerOnChange",
          value: function registerOnChange(fn) {
            this._controlValueAccessorChangeFn = fn;
          }
          /**
           * Registers a callback to be triggered when the component is touched.
           * Implemented as part of ControlValueAccessor.
           * @param fn Callback to be registered.
           */

        }, {
          key: "registerOnTouched",
          value: function registerOnTouched(fn) {
            this.onTouched = fn;
          }
          /**
           * Sets whether the component should be disabled.
           * Implemented as part of ControlValueAccessor.
           * @param isDisabled
           */

        }, {
          key: "setDisabledState",
          value: function setDisabledState(isDisabled) {
            this.disabled = isDisabled;
          }
        }]);

        return MatSlider;
      }(_MatSliderMixinBase);

      MatSlider.ɵfac = function MatSlider_Factory(t) {
        return new (t || MatSlider)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_3__["FocusMonitor"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_4__["Directionality"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinjectAttribute"]('tabindex'), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_8__["ANIMATION_MODULE_TYPE"], 8));
      };

      MatSlider.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({
        type: MatSlider,
        selectors: [["mat-slider"]],
        viewQuery: function MatSlider_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵviewQuery"](_c0, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx._sliderWrapper = _t.first);
          }
        },
        hostAttrs: ["role", "slider", 1, "mat-slider", "mat-focus-indicator"],
        hostVars: 29,
        hostBindings: function MatSlider_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("focus", function MatSlider_focus_HostBindingHandler() {
              return ctx._onFocus();
            })("blur", function MatSlider_blur_HostBindingHandler() {
              return ctx._onBlur();
            })("keydown", function MatSlider_keydown_HostBindingHandler($event) {
              return ctx._onKeydown($event);
            })("keyup", function MatSlider_keyup_HostBindingHandler() {
              return ctx._onKeyup();
            })("mouseenter", function MatSlider_mouseenter_HostBindingHandler() {
              return ctx._onMouseenter();
            })("selectstart", function MatSlider_selectstart_HostBindingHandler($event) {
              return $event.preventDefault();
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵhostProperty"]("tabIndex", ctx.tabIndex);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵattribute"]("aria-disabled", ctx.disabled)("aria-valuemax", ctx.max)("aria-valuemin", ctx.min)("aria-valuenow", ctx.value)("aria-valuetext", ctx.valueText == null ? ctx.displayValue : ctx.valueText)("aria-orientation", ctx.vertical ? "vertical" : "horizontal");

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassProp"]("mat-slider-disabled", ctx.disabled)("mat-slider-has-ticks", ctx.tickInterval)("mat-slider-horizontal", !ctx.vertical)("mat-slider-axis-inverted", ctx._shouldInvertAxis())("mat-slider-invert-mouse-coords", ctx._shouldInvertMouseCoords())("mat-slider-sliding", ctx._isSliding)("mat-slider-thumb-label-showing", ctx.thumbLabel)("mat-slider-vertical", ctx.vertical)("mat-slider-min-value", ctx._isMinValue())("mat-slider-hide-last-tick", ctx.disabled || ctx._isMinValue() && ctx._getThumbGap() && ctx._shouldInvertAxis())("_mat-animation-noopable", ctx._animationMode === "NoopAnimations");
          }
        },
        inputs: {
          disabled: "disabled",
          color: "color",
          tabIndex: "tabIndex",
          invert: "invert",
          max: "max",
          min: "min",
          value: "value",
          step: "step",
          thumbLabel: "thumbLabel",
          tickInterval: "tickInterval",
          vertical: "vertical",
          displayWith: "displayWith",
          valueText: "valueText"
        },
        outputs: {
          change: "change",
          input: "input",
          valueChange: "valueChange"
        },
        exportAs: ["matSlider"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵProvidersFeature"]([MAT_SLIDER_VALUE_ACCESSOR]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"]],
        decls: 13,
        vars: 6,
        consts: [[1, "mat-slider-wrapper"], ["sliderWrapper", ""], [1, "mat-slider-track-wrapper"], [1, "mat-slider-track-background", 3, "ngStyle"], [1, "mat-slider-track-fill", 3, "ngStyle"], [1, "mat-slider-ticks-container", 3, "ngStyle"], [1, "mat-slider-ticks", 3, "ngStyle"], [1, "mat-slider-thumb-container", 3, "ngStyle"], [1, "mat-slider-focus-ring"], [1, "mat-slider-thumb"], [1, "mat-slider-thumb-label"], [1, "mat-slider-thumb-label-text"]],
        template: function MatSlider_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div", 0, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](2, "div", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](3, "div", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](4, "div", 4);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](5, "div", 5);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](6, "div", 6);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](7, "div", 7);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](8, "div", 8);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](9, "div", 9);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](10, "div", 10);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](11, "span", 11);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](12);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](3);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngStyle", ctx._getTrackBackgroundStyles());

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngStyle", ctx._getTrackFillStyles());

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngStyle", ctx._getTicksContainerStyles());

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngStyle", ctx._getTicksStyles());

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngStyle", ctx._getThumbContainerStyles());

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](5);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate"](ctx.displayValue);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["NgStyle"]],
        styles: [".mat-slider{display:inline-block;position:relative;box-sizing:border-box;padding:8px;outline:none;vertical-align:middle}.mat-slider:not(.mat-slider-disabled):active,.mat-slider.mat-slider-sliding:not(.mat-slider-disabled){cursor:-webkit-grabbing;cursor:grabbing}.mat-slider-wrapper{position:absolute}.mat-slider-track-wrapper{position:absolute;top:0;left:0;overflow:hidden}.mat-slider-track-fill{position:absolute;transform-origin:0 0;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-track-background{position:absolute;transform-origin:100% 100%;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-ticks-container{position:absolute;left:0;top:0;overflow:hidden}.mat-slider-ticks{background-repeat:repeat;background-clip:content-box;box-sizing:border-box;opacity:0;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-thumb-container{position:absolute;z-index:1;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-focus-ring{position:absolute;width:30px;height:30px;border-radius:50%;transform:scale(0);opacity:0;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1),opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider.cdk-keyboard-focused .mat-slider-focus-ring,.mat-slider.cdk-program-focused .mat-slider-focus-ring{transform:scale(1);opacity:1}.mat-slider:not(.mat-slider-disabled):not(.mat-slider-sliding) .mat-slider-thumb-label,.mat-slider:not(.mat-slider-disabled):not(.mat-slider-sliding) .mat-slider-thumb{cursor:-webkit-grab;cursor:grab}.mat-slider-thumb{position:absolute;right:-10px;bottom:-10px;box-sizing:border-box;width:20px;height:20px;border:3px solid transparent;border-radius:50%;transform:scale(0.7);transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1),border-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-thumb-label{display:none;align-items:center;justify-content:center;position:absolute;width:28px;height:28px;border-radius:50%;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),border-radius 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.cdk-high-contrast-active .mat-slider-thumb-label{outline:solid 1px}.mat-slider-thumb-label-text{z-index:1;opacity:0;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-sliding .mat-slider-track-fill,.mat-slider-sliding .mat-slider-track-background,.mat-slider-sliding .mat-slider-thumb-container{transition-duration:0ms}.mat-slider-has-ticks .mat-slider-wrapper::after{content:\"\";position:absolute;border-width:0;border-style:solid;opacity:0;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-has-ticks.cdk-focused:not(.mat-slider-hide-last-tick) .mat-slider-wrapper::after,.mat-slider-has-ticks:hover:not(.mat-slider-hide-last-tick) .mat-slider-wrapper::after{opacity:1}.mat-slider-has-ticks.cdk-focused:not(.mat-slider-disabled) .mat-slider-ticks,.mat-slider-has-ticks:hover:not(.mat-slider-disabled) .mat-slider-ticks{opacity:1}.mat-slider-thumb-label-showing .mat-slider-focus-ring{display:none}.mat-slider-thumb-label-showing .mat-slider-thumb-label{display:flex}.mat-slider-axis-inverted .mat-slider-track-fill{transform-origin:100% 100%}.mat-slider-axis-inverted .mat-slider-track-background{transform-origin:0 0}.mat-slider:not(.mat-slider-disabled).cdk-focused.mat-slider-thumb-label-showing .mat-slider-thumb{transform:scale(0)}.mat-slider:not(.mat-slider-disabled).cdk-focused .mat-slider-thumb-label{border-radius:50% 50% 0}.mat-slider:not(.mat-slider-disabled).cdk-focused .mat-slider-thumb-label-text{opacity:1}.mat-slider:not(.mat-slider-disabled).cdk-mouse-focused .mat-slider-thumb,.mat-slider:not(.mat-slider-disabled).cdk-touch-focused .mat-slider-thumb,.mat-slider:not(.mat-slider-disabled).cdk-program-focused .mat-slider-thumb{border-width:2px;transform:scale(1)}.mat-slider-disabled .mat-slider-focus-ring{transform:scale(0);opacity:0}.mat-slider-disabled .mat-slider-thumb{border-width:4px;transform:scale(0.5)}.mat-slider-disabled .mat-slider-thumb-label{display:none}.mat-slider-horizontal{height:48px;min-width:128px}.mat-slider-horizontal .mat-slider-wrapper{height:2px;top:23px;left:8px;right:8px}.mat-slider-horizontal .mat-slider-wrapper::after{height:2px;border-left-width:2px;right:0;top:0}.mat-slider-horizontal .mat-slider-track-wrapper{height:2px;width:100%}.mat-slider-horizontal .mat-slider-track-fill{height:2px;width:100%;transform:scaleX(0)}.mat-slider-horizontal .mat-slider-track-background{height:2px;width:100%;transform:scaleX(1)}.mat-slider-horizontal .mat-slider-ticks-container{height:2px;width:100%}.cdk-high-contrast-active .mat-slider-horizontal .mat-slider-ticks-container{height:0;outline:solid 2px;top:1px}.mat-slider-horizontal .mat-slider-ticks{height:2px;width:100%}.mat-slider-horizontal .mat-slider-thumb-container{width:100%;height:0;top:50%}.mat-slider-horizontal .mat-slider-focus-ring{top:-15px;right:-15px}.mat-slider-horizontal .mat-slider-thumb-label{right:-14px;top:-40px;transform:translateY(26px) scale(0.01) rotate(45deg)}.mat-slider-horizontal .mat-slider-thumb-label-text{transform:rotate(-45deg)}.mat-slider-horizontal.cdk-focused .mat-slider-thumb-label{transform:rotate(45deg)}.cdk-high-contrast-active .mat-slider-horizontal.cdk-focused .mat-slider-thumb-label,.cdk-high-contrast-active .mat-slider-horizontal.cdk-focused .mat-slider-thumb-label-text{transform:none}.mat-slider-vertical{width:48px;min-height:128px}.mat-slider-vertical .mat-slider-wrapper{width:2px;top:8px;bottom:8px;left:23px}.mat-slider-vertical .mat-slider-wrapper::after{width:2px;border-top-width:2px;bottom:0;left:0}.mat-slider-vertical .mat-slider-track-wrapper{height:100%;width:2px}.mat-slider-vertical .mat-slider-track-fill{height:100%;width:2px;transform:scaleY(0)}.mat-slider-vertical .mat-slider-track-background{height:100%;width:2px;transform:scaleY(1)}.mat-slider-vertical .mat-slider-ticks-container{width:2px;height:100%}.cdk-high-contrast-active .mat-slider-vertical .mat-slider-ticks-container{width:0;outline:solid 2px;left:1px}.mat-slider-vertical .mat-slider-focus-ring{bottom:-15px;left:-15px}.mat-slider-vertical .mat-slider-ticks{width:2px;height:100%}.mat-slider-vertical .mat-slider-thumb-container{height:100%;width:0;left:50%}.mat-slider-vertical .mat-slider-thumb{-webkit-backface-visibility:hidden;backface-visibility:hidden}.mat-slider-vertical .mat-slider-thumb-label{bottom:-14px;left:-40px;transform:translateX(26px) scale(0.01) rotate(-45deg)}.mat-slider-vertical .mat-slider-thumb-label-text{transform:rotate(45deg)}.mat-slider-vertical.cdk-focused .mat-slider-thumb-label{transform:rotate(-45deg)}[dir=rtl] .mat-slider-wrapper::after{left:0;right:auto}[dir=rtl] .mat-slider-horizontal .mat-slider-track-fill{transform-origin:100% 100%}[dir=rtl] .mat-slider-horizontal .mat-slider-track-background{transform-origin:0 0}[dir=rtl] .mat-slider-horizontal.mat-slider-axis-inverted .mat-slider-track-fill{transform-origin:0 0}[dir=rtl] .mat-slider-horizontal.mat-slider-axis-inverted .mat-slider-track-background{transform-origin:100% 100%}.mat-slider._mat-animation-noopable .mat-slider-track-fill,.mat-slider._mat-animation-noopable .mat-slider-track-background,.mat-slider._mat-animation-noopable .mat-slider-ticks,.mat-slider._mat-animation-noopable .mat-slider-thumb-container,.mat-slider._mat-animation-noopable .mat-slider-focus-ring,.mat-slider._mat-animation-noopable .mat-slider-thumb,.mat-slider._mat-animation-noopable .mat-slider-thumb-label,.mat-slider._mat-animation-noopable .mat-slider-thumb-label-text,.mat-slider._mat-animation-noopable .mat-slider-has-ticks .mat-slider-wrapper::after{transition:none}\n"],
        encapsulation: 2,
        changeDetection: 0
      });

      MatSlider.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
        }, {
          type: _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_3__["FocusMonitor"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"]
        }, {
          type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_4__["Directionality"],
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }]
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Attribute"],
            args: ['tabindex']
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
          }]
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_8__["ANIMATION_MODULE_TYPE"]]
          }]
        }];
      };

      MatSlider.propDecorators = {
        invert: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        max: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        min: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        step: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        thumbLabel: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        tickInterval: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        value: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        displayWith: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        valueText: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        vertical: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        change: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
        }],
        input: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
        }],
        valueChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
        }],
        _sliderWrapper: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewChild"],
          args: ['sliderWrapper']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](MatSlider, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"],
          args: [{
            selector: 'mat-slider',
            exportAs: 'matSlider',
            providers: [MAT_SLIDER_VALUE_ACCESSOR],
            host: {
              '(focus)': '_onFocus()',
              '(blur)': '_onBlur()',
              '(keydown)': '_onKeydown($event)',
              '(keyup)': '_onKeyup()',
              '(mouseenter)': '_onMouseenter()',
              // On Safari starting to slide temporarily triggers text selection mode which
              // show the wrong cursor. We prevent it by stopping the `selectstart` event.
              '(selectstart)': '$event.preventDefault()',
              'class': 'mat-slider mat-focus-indicator',
              'role': 'slider',
              '[tabIndex]': 'tabIndex',
              '[attr.aria-disabled]': 'disabled',
              '[attr.aria-valuemax]': 'max',
              '[attr.aria-valuemin]': 'min',
              '[attr.aria-valuenow]': 'value',
              // NVDA and Jaws appear to announce the `aria-valuenow` by calculating its percentage based
              // on its value between `aria-valuemin` and `aria-valuemax`. Due to how decimals are handled,
              // it can cause the slider to read out a very long value like 0.20000068 if the current value
              // is 0.2 with a min of 0 and max of 1. We work around the issue by setting `aria-valuetext`
              // to the same value that we set on the slider's thumb which will be truncated.
              '[attr.aria-valuetext]': 'valueText == null ? displayValue : valueText',
              '[attr.aria-orientation]': 'vertical ? "vertical" : "horizontal"',
              '[class.mat-slider-disabled]': 'disabled',
              '[class.mat-slider-has-ticks]': 'tickInterval',
              '[class.mat-slider-horizontal]': '!vertical',
              '[class.mat-slider-axis-inverted]': '_shouldInvertAxis()',
              // Class binding which is only used by the test harness as there is no other
              // way for the harness to detect if mouse coordinates need to be inverted.
              '[class.mat-slider-invert-mouse-coords]': '_shouldInvertMouseCoords()',
              '[class.mat-slider-sliding]': '_isSliding',
              '[class.mat-slider-thumb-label-showing]': 'thumbLabel',
              '[class.mat-slider-vertical]': 'vertical',
              '[class.mat-slider-min-value]': '_isMinValue()',
              '[class.mat-slider-hide-last-tick]': 'disabled || _isMinValue() && _getThumbGap() && _shouldInvertAxis()',
              '[class._mat-animation-noopable]': '_animationMode === "NoopAnimations"'
            },
            template: "<div class=\"mat-slider-wrapper\" #sliderWrapper>\n  <div class=\"mat-slider-track-wrapper\">\n    <div class=\"mat-slider-track-background\" [ngStyle]=\"_getTrackBackgroundStyles()\"></div>\n    <div class=\"mat-slider-track-fill\" [ngStyle]=\"_getTrackFillStyles()\"></div>\n  </div>\n  <div class=\"mat-slider-ticks-container\" [ngStyle]=\"_getTicksContainerStyles()\">\n    <div class=\"mat-slider-ticks\" [ngStyle]=\"_getTicksStyles()\"></div>\n  </div>\n  <div class=\"mat-slider-thumb-container\" [ngStyle]=\"_getThumbContainerStyles()\">\n    <div class=\"mat-slider-focus-ring\"></div>\n    <div class=\"mat-slider-thumb\"></div>\n    <div class=\"mat-slider-thumb-label\">\n      <span class=\"mat-slider-thumb-label-text\">{{displayValue}}</span>\n    </div>\n  </div>\n</div>\n",
            inputs: ['disabled', 'color', 'tabIndex'],
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewEncapsulation"].None,
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectionStrategy"].OnPush,
            styles: [".mat-slider{display:inline-block;position:relative;box-sizing:border-box;padding:8px;outline:none;vertical-align:middle}.mat-slider:not(.mat-slider-disabled):active,.mat-slider.mat-slider-sliding:not(.mat-slider-disabled){cursor:-webkit-grabbing;cursor:grabbing}.mat-slider-wrapper{position:absolute}.mat-slider-track-wrapper{position:absolute;top:0;left:0;overflow:hidden}.mat-slider-track-fill{position:absolute;transform-origin:0 0;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-track-background{position:absolute;transform-origin:100% 100%;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-ticks-container{position:absolute;left:0;top:0;overflow:hidden}.mat-slider-ticks{background-repeat:repeat;background-clip:content-box;box-sizing:border-box;opacity:0;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-thumb-container{position:absolute;z-index:1;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-focus-ring{position:absolute;width:30px;height:30px;border-radius:50%;transform:scale(0);opacity:0;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1),opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider.cdk-keyboard-focused .mat-slider-focus-ring,.mat-slider.cdk-program-focused .mat-slider-focus-ring{transform:scale(1);opacity:1}.mat-slider:not(.mat-slider-disabled):not(.mat-slider-sliding) .mat-slider-thumb-label,.mat-slider:not(.mat-slider-disabled):not(.mat-slider-sliding) .mat-slider-thumb{cursor:-webkit-grab;cursor:grab}.mat-slider-thumb{position:absolute;right:-10px;bottom:-10px;box-sizing:border-box;width:20px;height:20px;border:3px solid transparent;border-radius:50%;transform:scale(0.7);transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1),border-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-thumb-label{display:none;align-items:center;justify-content:center;position:absolute;width:28px;height:28px;border-radius:50%;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),border-radius 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.cdk-high-contrast-active .mat-slider-thumb-label{outline:solid 1px}.mat-slider-thumb-label-text{z-index:1;opacity:0;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-sliding .mat-slider-track-fill,.mat-slider-sliding .mat-slider-track-background,.mat-slider-sliding .mat-slider-thumb-container{transition-duration:0ms}.mat-slider-has-ticks .mat-slider-wrapper::after{content:\"\";position:absolute;border-width:0;border-style:solid;opacity:0;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-has-ticks.cdk-focused:not(.mat-slider-hide-last-tick) .mat-slider-wrapper::after,.mat-slider-has-ticks:hover:not(.mat-slider-hide-last-tick) .mat-slider-wrapper::after{opacity:1}.mat-slider-has-ticks.cdk-focused:not(.mat-slider-disabled) .mat-slider-ticks,.mat-slider-has-ticks:hover:not(.mat-slider-disabled) .mat-slider-ticks{opacity:1}.mat-slider-thumb-label-showing .mat-slider-focus-ring{display:none}.mat-slider-thumb-label-showing .mat-slider-thumb-label{display:flex}.mat-slider-axis-inverted .mat-slider-track-fill{transform-origin:100% 100%}.mat-slider-axis-inverted .mat-slider-track-background{transform-origin:0 0}.mat-slider:not(.mat-slider-disabled).cdk-focused.mat-slider-thumb-label-showing .mat-slider-thumb{transform:scale(0)}.mat-slider:not(.mat-slider-disabled).cdk-focused .mat-slider-thumb-label{border-radius:50% 50% 0}.mat-slider:not(.mat-slider-disabled).cdk-focused .mat-slider-thumb-label-text{opacity:1}.mat-slider:not(.mat-slider-disabled).cdk-mouse-focused .mat-slider-thumb,.mat-slider:not(.mat-slider-disabled).cdk-touch-focused .mat-slider-thumb,.mat-slider:not(.mat-slider-disabled).cdk-program-focused .mat-slider-thumb{border-width:2px;transform:scale(1)}.mat-slider-disabled .mat-slider-focus-ring{transform:scale(0);opacity:0}.mat-slider-disabled .mat-slider-thumb{border-width:4px;transform:scale(0.5)}.mat-slider-disabled .mat-slider-thumb-label{display:none}.mat-slider-horizontal{height:48px;min-width:128px}.mat-slider-horizontal .mat-slider-wrapper{height:2px;top:23px;left:8px;right:8px}.mat-slider-horizontal .mat-slider-wrapper::after{height:2px;border-left-width:2px;right:0;top:0}.mat-slider-horizontal .mat-slider-track-wrapper{height:2px;width:100%}.mat-slider-horizontal .mat-slider-track-fill{height:2px;width:100%;transform:scaleX(0)}.mat-slider-horizontal .mat-slider-track-background{height:2px;width:100%;transform:scaleX(1)}.mat-slider-horizontal .mat-slider-ticks-container{height:2px;width:100%}.cdk-high-contrast-active .mat-slider-horizontal .mat-slider-ticks-container{height:0;outline:solid 2px;top:1px}.mat-slider-horizontal .mat-slider-ticks{height:2px;width:100%}.mat-slider-horizontal .mat-slider-thumb-container{width:100%;height:0;top:50%}.mat-slider-horizontal .mat-slider-focus-ring{top:-15px;right:-15px}.mat-slider-horizontal .mat-slider-thumb-label{right:-14px;top:-40px;transform:translateY(26px) scale(0.01) rotate(45deg)}.mat-slider-horizontal .mat-slider-thumb-label-text{transform:rotate(-45deg)}.mat-slider-horizontal.cdk-focused .mat-slider-thumb-label{transform:rotate(45deg)}.cdk-high-contrast-active .mat-slider-horizontal.cdk-focused .mat-slider-thumb-label,.cdk-high-contrast-active .mat-slider-horizontal.cdk-focused .mat-slider-thumb-label-text{transform:none}.mat-slider-vertical{width:48px;min-height:128px}.mat-slider-vertical .mat-slider-wrapper{width:2px;top:8px;bottom:8px;left:23px}.mat-slider-vertical .mat-slider-wrapper::after{width:2px;border-top-width:2px;bottom:0;left:0}.mat-slider-vertical .mat-slider-track-wrapper{height:100%;width:2px}.mat-slider-vertical .mat-slider-track-fill{height:100%;width:2px;transform:scaleY(0)}.mat-slider-vertical .mat-slider-track-background{height:100%;width:2px;transform:scaleY(1)}.mat-slider-vertical .mat-slider-ticks-container{width:2px;height:100%}.cdk-high-contrast-active .mat-slider-vertical .mat-slider-ticks-container{width:0;outline:solid 2px;left:1px}.mat-slider-vertical .mat-slider-focus-ring{bottom:-15px;left:-15px}.mat-slider-vertical .mat-slider-ticks{width:2px;height:100%}.mat-slider-vertical .mat-slider-thumb-container{height:100%;width:0;left:50%}.mat-slider-vertical .mat-slider-thumb{-webkit-backface-visibility:hidden;backface-visibility:hidden}.mat-slider-vertical .mat-slider-thumb-label{bottom:-14px;left:-40px;transform:translateX(26px) scale(0.01) rotate(-45deg)}.mat-slider-vertical .mat-slider-thumb-label-text{transform:rotate(45deg)}.mat-slider-vertical.cdk-focused .mat-slider-thumb-label{transform:rotate(-45deg)}[dir=rtl] .mat-slider-wrapper::after{left:0;right:auto}[dir=rtl] .mat-slider-horizontal .mat-slider-track-fill{transform-origin:100% 100%}[dir=rtl] .mat-slider-horizontal .mat-slider-track-background{transform-origin:0 0}[dir=rtl] .mat-slider-horizontal.mat-slider-axis-inverted .mat-slider-track-fill{transform-origin:0 0}[dir=rtl] .mat-slider-horizontal.mat-slider-axis-inverted .mat-slider-track-background{transform-origin:100% 100%}.mat-slider._mat-animation-noopable .mat-slider-track-fill,.mat-slider._mat-animation-noopable .mat-slider-track-background,.mat-slider._mat-animation-noopable .mat-slider-ticks,.mat-slider._mat-animation-noopable .mat-slider-thumb-container,.mat-slider._mat-animation-noopable .mat-slider-focus-ring,.mat-slider._mat-animation-noopable .mat-slider-thumb,.mat-slider._mat-animation-noopable .mat-slider-thumb-label,.mat-slider._mat-animation-noopable .mat-slider-thumb-label-text,.mat-slider._mat-animation-noopable .mat-slider-has-ticks .mat-slider-wrapper::after{transition:none}\n"]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
          }, {
            type: _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_3__["FocusMonitor"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"]
          }, {
            type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_4__["Directionality"],
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }]
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Attribute"],
              args: ['tabindex']
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
            }]
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_8__["ANIMATION_MODULE_TYPE"]]
            }]
          }];
        }, {
          change: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
          }],
          input: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
          }],
          valueChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
          }],
          invert: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          max: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          min: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          value: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          step: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          thumbLabel: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          tickInterval: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          vertical: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          displayWith: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          valueText: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          _sliderWrapper: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewChild"],
            args: ['sliderWrapper']
          }]
        });
      })();
      /** Returns whether an event is a touch event. */


      function isTouchEvent(event) {
        // This function is called for every pixel that the user has dragged so we need it to be
        // as fast as possible. Since we only bind mouse events and touch events, we can assume
        // that if the event's name starts with `t`, it's a touch event.
        return event.type[0] === 't';
      }
      /** Gets the coordinates of a touch or mouse event relative to the viewport. */


      function getPointerPositionOnPage(event) {
        // `touches` will be empty for start/end events so we have to fall back to `changedTouches`.
        var point = isTouchEvent(event) ? event.touches[0] || event.changedTouches[0] : event;
        return {
          x: point.clientX,
          y: point.clientY
        };
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var MatSliderModule = function MatSliderModule() {
        _classCallCheck2(this, MatSliderModule);
      };

      MatSliderModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({
        type: MatSliderModule
      });
      MatSliderModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({
        factory: function MatSliderModule_Factory(t) {
          return new (t || MatSliderModule)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_0__["CommonModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_2__["MatCommonModule"]], _angular_material_core__WEBPACK_IMPORTED_MODULE_2__["MatCommonModule"]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](MatSliderModule, {
          declarations: function declarations() {
            return [MatSlider];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_0__["CommonModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_2__["MatCommonModule"]];
          },
          exports: function exports() {
            return [MatSlider, _angular_material_core__WEBPACK_IMPORTED_MODULE_2__["MatCommonModule"]];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](MatSliderModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
          args: [{
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["CommonModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_2__["MatCommonModule"]],
            exports: [MatSlider, _angular_material_core__WEBPACK_IMPORTED_MODULE_2__["MatCommonModule"]],
            declarations: [MatSlider]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=slider.js.map

      /***/

    },

    /***/
    "5eHb":
    /*!*********************************************************************!*\
      !*** ./node_modules/ngx-toastr/__ivy_ngcc__/fesm2015/ngx-toastr.js ***!
      \*********************************************************************/

    /*! exports provided: BasePortalHost, ComponentPortal, DefaultGlobalConfig, DefaultNoAnimationsGlobalConfig, DefaultNoComponentGlobalConfig, Overlay, OverlayContainer, OverlayRef, TOAST_CONFIG, Toast, ToastContainerDirective, ToastContainerModule, ToastInjector, ToastNoAnimation, ToastNoAnimationModule, ToastPackage, ToastRef, ToastrComponentlessModule, ToastrModule, ToastrService */

    /***/
    function eHb(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BasePortalHost", function () {
        return BasePortalHost;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ComponentPortal", function () {
        return ComponentPortal;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DefaultGlobalConfig", function () {
        return DefaultGlobalConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DefaultNoAnimationsGlobalConfig", function () {
        return DefaultNoAnimationsGlobalConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DefaultNoComponentGlobalConfig", function () {
        return DefaultNoComponentGlobalConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Overlay", function () {
        return Overlay;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OverlayContainer", function () {
        return OverlayContainer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OverlayRef", function () {
        return OverlayRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TOAST_CONFIG", function () {
        return TOAST_CONFIG;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Toast", function () {
        return Toast;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ToastContainerDirective", function () {
        return ToastContainerDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ToastContainerModule", function () {
        return ToastContainerModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ToastInjector", function () {
        return ToastInjector;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ToastNoAnimation", function () {
        return ToastNoAnimation;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ToastNoAnimationModule", function () {
        return ToastNoAnimationModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ToastPackage", function () {
        return ToastPackage;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ToastRef", function () {
        return ToastRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ToastrComponentlessModule", function () {
        return ToastrComponentlessModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ToastrModule", function () {
        return ToastrModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ToastrService", function () {
        return ToastrService;
      });
      /* harmony import */


      var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! tslib */
      "mrSG");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_animations__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/animations */
      "R0Ic");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/platform-browser */
      "jhN1");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");

      var _c0 = ["toast-component", ""];

      function Toast_button_0_Template(rf, ctx) {
        if (rf & 1) {
          var _r6 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "button", 5);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function Toast_button_0_Template_button_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵrestoreView"](_r6);

            var ctx_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

            return ctx_r5.remove();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "span", 6);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](2, "\xD7");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }
      }

      function Toast_div_1_ng_container_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerEnd"]();
        }

        if (rf & 2) {
          var ctx_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"]("[", ctx_r7.duplicatesCount + 1, "]");
        }
      }

      function Toast_div_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](2, Toast_div_1_ng_container_2_Template, 2, 1, "ng-container", 4);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassMap"](ctx_r1.options.titleClass);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵattribute"]("aria-label", ctx_r1.title);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"](" ", ctx_r1.title, " ");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx_r1.duplicatesCount);
        }
      }

      function Toast_div_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](0, "div", 7);
        }

        if (rf & 2) {
          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassMap"](ctx_r2.options.messageClass);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("innerHTML", ctx_r2.message, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsanitizeHtml"]);
        }
      }

      function Toast_div_3_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div", 8);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassMap"](ctx_r3.options.messageClass);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵattribute"]("aria-label", ctx_r3.message);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"](" ", ctx_r3.message, " ");
        }
      }

      function Toast_div_4_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](1, "div", 9);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵstyleProp"]("width", ctx_r4.width + "%");
        }
      }

      function ToastNoAnimation_button_0_Template(rf, ctx) {
        if (rf & 1) {
          var _r6 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "button", 5);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function ToastNoAnimation_button_0_Template_button_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵrestoreView"](_r6);

            var ctx_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

            return ctx_r5.remove();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "span", 6);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](2, "\xD7");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }
      }

      function ToastNoAnimation_div_1_ng_container_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerEnd"]();
        }

        if (rf & 2) {
          var ctx_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"]("[", ctx_r7.duplicatesCount + 1, "]");
        }
      }

      function ToastNoAnimation_div_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](2, ToastNoAnimation_div_1_ng_container_2_Template, 2, 1, "ng-container", 4);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassMap"](ctx_r1.options.titleClass);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵattribute"]("aria-label", ctx_r1.title);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"](" ", ctx_r1.title, " ");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx_r1.duplicatesCount);
        }
      }

      function ToastNoAnimation_div_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](0, "div", 7);
        }

        if (rf & 2) {
          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassMap"](ctx_r2.options.messageClass);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("innerHTML", ctx_r2.message, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsanitizeHtml"]);
        }
      }

      function ToastNoAnimation_div_3_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div", 8);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassMap"](ctx_r3.options.messageClass);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵattribute"]("aria-label", ctx_r3.message);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"](" ", ctx_r3.message, " ");
        }
      }

      function ToastNoAnimation_div_4_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](1, "div", 9);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵstyleProp"]("width", ctx_r4.width + "%");
        }
      }

      var ToastContainerDirective = /*#__PURE__*/function () {
        function ToastContainerDirective(el) {
          _classCallCheck2(this, ToastContainerDirective);

          this.el = el;
        }

        _createClass2(ToastContainerDirective, [{
          key: "getContainerElement",
          value: function getContainerElement() {
            return this.el.nativeElement;
          }
        }]);

        return ToastContainerDirective;
      }();

      ToastContainerDirective.ɵfac = function ToastContainerDirective_Factory(t) {
        return new (t || ToastContainerDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]));
      };

      ToastContainerDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({
        type: ToastContainerDirective,
        selectors: [["", "toastContainer", ""]],
        exportAs: ["toastContainer"]
      });

      ToastContainerDirective.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
        }];
      };

      ToastContainerDirective = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]])], ToastContainerDirective);

      var ToastContainerModule = function ToastContainerModule() {
        _classCallCheck2(this, ToastContainerModule);
      };

      ToastContainerModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({
        type: ToastContainerModule
      });
      ToastContainerModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({
        factory: function ToastContainerModule_Factory(t) {
          return new (t || ToastContainerModule)();
        }
      });
      /**
       * Everything a toast needs to launch
       */

      var ToastPackage = /*#__PURE__*/function () {
        function ToastPackage(toastId, config, message, title, toastType, toastRef) {
          var _this495 = this;

          _classCallCheck2(this, ToastPackage);

          this.toastId = toastId;
          this.config = config;
          this.message = message;
          this.title = title;
          this.toastType = toastType;
          this.toastRef = toastRef;
          this._onTap = new rxjs__WEBPACK_IMPORTED_MODULE_3__["Subject"]();
          this._onAction = new rxjs__WEBPACK_IMPORTED_MODULE_3__["Subject"]();
          this.toastRef.afterClosed().subscribe(function () {
            _this495._onAction.complete();

            _this495._onTap.complete();
          });
        }
        /** Fired on click */


        _createClass2(ToastPackage, [{
          key: "triggerTap",
          value: function triggerTap() {
            this._onTap.next();

            if (this.config.tapToDismiss) {
              this._onTap.complete();
            }
          }
        }, {
          key: "onTap",
          value: function onTap() {
            return this._onTap.asObservable();
          }
          /** available for use in custom toast */

        }, {
          key: "triggerAction",
          value: function triggerAction(action) {
            this._onAction.next(action);
          }
        }, {
          key: "onAction",
          value: function onAction() {
            return this._onAction.asObservable();
          }
        }]);

        return ToastPackage;
      }();

      var DefaultNoComponentGlobalConfig = {
        maxOpened: 0,
        autoDismiss: false,
        newestOnTop: true,
        preventDuplicates: false,
        countDuplicates: false,
        resetTimeoutOnDuplicate: false,
        iconClasses: {
          error: 'toast-error',
          info: 'toast-info',
          success: 'toast-success',
          warning: 'toast-warning'
        },
        // Individual
        closeButton: false,
        disableTimeOut: false,
        timeOut: 5000,
        extendedTimeOut: 1000,
        enableHtml: false,
        progressBar: false,
        toastClass: 'ngx-toastr',
        positionClass: 'toast-top-right',
        titleClass: 'toast-title',
        messageClass: 'toast-message',
        easing: 'ease-in',
        easeTime: 300,
        tapToDismiss: true,
        onActivateTick: false,
        progressAnimation: 'decreasing'
      };
      var TOAST_CONFIG = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('ToastConfig');
      /**
       * A `ComponentPortal` is a portal that instantiates some Component upon attachment.
       */

      var ComponentPortal = /*#__PURE__*/function () {
        function ComponentPortal(component, injector) {
          _classCallCheck2(this, ComponentPortal);

          this.component = component;
          this.injector = injector;
        }
        /** Attach this portal to a host. */


        _createClass2(ComponentPortal, [{
          key: "attach",
          value: function attach(host, newestOnTop) {
            this._attachedHost = host;
            return host.attach(this, newestOnTop);
          }
          /** Detach this portal from its host */

        }, {
          key: "detach",
          value: function detach() {
            var host = this._attachedHost;

            if (host) {
              this._attachedHost = undefined;
              return host.detach();
            }
          }
          /** Whether this portal is attached to a host. */

        }, {
          key: "isAttached",
          get: function get() {
            return this._attachedHost != null;
          }
          /**
           * Sets the PortalHost reference without performing `attach()`. This is used directly by
           * the PortalHost when it is performing an `attach()` or `detach()`.
           */

        }, {
          key: "setAttachedHost",
          value: function setAttachedHost(host) {
            this._attachedHost = host;
          }
        }]);

        return ComponentPortal;
      }();
      /**
       * Partial implementation of PortalHost that only deals with attaching a
       * ComponentPortal
       */


      var BasePortalHost = /*#__PURE__*/function () {
        function BasePortalHost() {
          _classCallCheck2(this, BasePortalHost);
        }

        _createClass2(BasePortalHost, [{
          key: "attach",
          value: function attach(portal, newestOnTop) {
            this._attachedPortal = portal;
            return this.attachComponentPortal(portal, newestOnTop);
          }
        }, {
          key: "detach",
          value: function detach() {
            if (this._attachedPortal) {
              this._attachedPortal.setAttachedHost();
            }

            this._attachedPortal = undefined;

            if (this._disposeFn) {
              this._disposeFn();

              this._disposeFn = undefined;
            }
          }
        }, {
          key: "setDisposeFn",
          value: function setDisposeFn(fn) {
            this._disposeFn = fn;
          }
        }]);

        return BasePortalHost;
      }();
      /**
       * A PortalHost for attaching portals to an arbitrary DOM element outside of the Angular
       * application context.
       *
       * This is the only part of the portal core that directly touches the DOM.
       */


      var DomPortalHost = /*#__PURE__*/function (_BasePortalHost) {
        _inherits2(DomPortalHost, _BasePortalHost);

        var _super200 = _createSuper(DomPortalHost);

        function DomPortalHost(_hostDomElement, _componentFactoryResolver, _appRef) {
          var _this496;

          _classCallCheck2(this, DomPortalHost);

          _this496 = _super200.call(this);
          _this496._hostDomElement = _hostDomElement;
          _this496._componentFactoryResolver = _componentFactoryResolver;
          _this496._appRef = _appRef;
          return _this496;
        }
        /**
         * Attach the given ComponentPortal to DOM element using the ComponentFactoryResolver.
         * @param portal Portal to be attached
         */


        _createClass2(DomPortalHost, [{
          key: "attachComponentPortal",
          value: function attachComponentPortal(portal, newestOnTop) {
            var _this497 = this;

            var componentFactory = this._componentFactoryResolver.resolveComponentFactory(portal.component);

            var componentRef; // If the portal specifies a ViewContainerRef, we will use that as the attachment point
            // for the component (in terms of Angular's component tree, not rendering).
            // When the ViewContainerRef is missing, we use the factory to create the component directly
            // and then manually attach the ChangeDetector for that component to the application (which
            // happens automatically when using a ViewContainer).

            componentRef = componentFactory.create(portal.injector); // When creating a component outside of a ViewContainer, we need to manually register
            // its ChangeDetector with the application. This API is unfortunately not yet published
            // in Angular core. The change detector must also be deregistered when the component
            // is destroyed to prevent memory leaks.

            this._appRef.attachView(componentRef.hostView);

            this.setDisposeFn(function () {
              _this497._appRef.detachView(componentRef.hostView);

              componentRef.destroy();
            }); // At this point the component has been instantiated, so we move it to the location in the DOM
            // where we want it to be rendered.

            if (newestOnTop) {
              this._hostDomElement.insertBefore(this._getComponentRootNode(componentRef), this._hostDomElement.firstChild);
            } else {
              this._hostDomElement.appendChild(this._getComponentRootNode(componentRef));
            }

            return componentRef;
          }
          /** Gets the root HTMLElement for an instantiated component. */

        }, {
          key: "_getComponentRootNode",
          value: function _getComponentRootNode(componentRef) {
            return componentRef.hostView.rootNodes[0];
          }
        }]);

        return DomPortalHost;
      }(BasePortalHost);
      /** Container inside which all toasts will render. */


      var OverlayContainer = /*#__PURE__*/function () {
        function OverlayContainer(_document) {
          _classCallCheck2(this, OverlayContainer);

          this._document = _document;
        }

        _createClass2(OverlayContainer, [{
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            if (this._containerElement && this._containerElement.parentNode) {
              this._containerElement.parentNode.removeChild(this._containerElement);
            }
          }
          /**
           * This method returns the overlay container element. It will lazily
           * create the element the first time  it is called to facilitate using
           * the container in non-browser environments.
           * @returns the container element
           */

        }, {
          key: "getContainerElement",
          value: function getContainerElement() {
            if (!this._containerElement) {
              this._createContainer();
            }

            return this._containerElement;
          }
          /**
           * Create the overlay container element, which is simply a div
           * with the 'cdk-overlay-container' class on the document body.
           */

        }, {
          key: "_createContainer",
          value: function _createContainer() {
            var container = this._document.createElement('div');

            container.classList.add('overlay-container');

            this._document.body.appendChild(container);

            this._containerElement = container;
          }
        }]);

        return OverlayContainer;
      }();

      OverlayContainer.ɵfac = function OverlayContainer_Factory(t) {
        return new (t || OverlayContainer)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_5__["DOCUMENT"]));
      };

      OverlayContainer.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({
        token: OverlayContainer,
        factory: function factory(t) {
          return OverlayContainer.ɵfac(t);
        },
        providedIn: 'root'
      });

      OverlayContainer.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_5__["DOCUMENT"]]
          }]
        }];
      };

      OverlayContainer.ngInjectableDef = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function OverlayContainer_Factory() {
          return new OverlayContainer(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_5__["DOCUMENT"]));
        },
        token: OverlayContainer,
        providedIn: "root"
      });
      OverlayContainer = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__param"])(0, Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"])(_angular_common__WEBPACK_IMPORTED_MODULE_5__["DOCUMENT"])), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:paramtypes", [Object])], OverlayContainer);
      /**
       * Reference to an overlay that has been created with the Overlay service.
       * Used to manipulate or dispose of said overlay.
       */

      var OverlayRef = /*#__PURE__*/function () {
        function OverlayRef(_portalHost) {
          _classCallCheck2(this, OverlayRef);

          this._portalHost = _portalHost;
        }

        _createClass2(OverlayRef, [{
          key: "attach",
          value: function attach(portal) {
            var newestOnTop = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
            return this._portalHost.attach(portal, newestOnTop);
          }
          /**
           * Detaches an overlay from a portal.
           * @returns Resolves when the overlay has been detached.
           */

        }, {
          key: "detach",
          value: function detach() {
            return this._portalHost.detach();
          }
        }]);

        return OverlayRef;
      }();
      /**
       * Service to create Overlays. Overlays are dynamically added pieces of floating UI, meant to be
       * used as a low-level building building block for other components. Dialogs, tooltips, menus,
       * selects, etc. can all be built using overlays. The service should primarily be used by authors
       * of re-usable components rather than developers building end-user applications.
       *
       * An overlay *is* a PortalHost, so any kind of Portal can be loaded into one.
       */


      var Overlay = /*#__PURE__*/function () {
        function Overlay(_overlayContainer, _componentFactoryResolver, _appRef, _document) {
          _classCallCheck2(this, Overlay);

          this._overlayContainer = _overlayContainer;
          this._componentFactoryResolver = _componentFactoryResolver;
          this._appRef = _appRef;
          this._document = _document; // Namespace panes by overlay container

          this._paneElements = new Map();
        }
        /**
         * Creates an overlay.
         * @returns A reference to the created overlay.
         */


        _createClass2(Overlay, [{
          key: "create",
          value: function create(positionClass, overlayContainer) {
            // get existing pane if possible
            return this._createOverlayRef(this.getPaneElement(positionClass, overlayContainer));
          }
        }, {
          key: "getPaneElement",
          value: function getPaneElement() {
            var positionClass = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
            var overlayContainer = arguments.length > 1 ? arguments[1] : undefined;

            if (!this._paneElements.get(overlayContainer)) {
              this._paneElements.set(overlayContainer, {});
            }

            if (!this._paneElements.get(overlayContainer)[positionClass]) {
              this._paneElements.get(overlayContainer)[positionClass] = this._createPaneElement(positionClass, overlayContainer);
            }

            return this._paneElements.get(overlayContainer)[positionClass];
          }
          /**
           * Creates the DOM element for an overlay and appends it to the overlay container.
           * @returns Newly-created pane element
           */

        }, {
          key: "_createPaneElement",
          value: function _createPaneElement(positionClass, overlayContainer) {
            var pane = this._document.createElement('div');

            pane.id = 'toast-container';
            pane.classList.add(positionClass);
            pane.classList.add('toast-container');

            if (!overlayContainer) {
              this._overlayContainer.getContainerElement().appendChild(pane);
            } else {
              overlayContainer.getContainerElement().appendChild(pane);
            }

            return pane;
          }
          /**
           * Create a DomPortalHost into which the overlay content can be loaded.
           * @param pane The DOM element to turn into a portal host.
           * @returns A portal host for the given DOM element.
           */

        }, {
          key: "_createPortalHost",
          value: function _createPortalHost(pane) {
            return new DomPortalHost(pane, this._componentFactoryResolver, this._appRef);
          }
          /**
           * Creates an OverlayRef for an overlay in the given DOM element.
           * @param pane DOM element for the overlay
           */

        }, {
          key: "_createOverlayRef",
          value: function _createOverlayRef(pane) {
            return new OverlayRef(this._createPortalHost(pane));
          }
        }]);

        return Overlay;
      }();

      Overlay.ɵfac = function Overlay_Factory(t) {
        return new (t || Overlay)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](OverlayContainer), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentFactoryResolver"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_5__["DOCUMENT"]));
      };

      Overlay.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({
        token: Overlay,
        factory: function factory(t) {
          return Overlay.ɵfac(t);
        },
        providedIn: 'root'
      });

      Overlay.ctorParameters = function () {
        return [{
          type: OverlayContainer
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentFactoryResolver"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationRef"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_5__["DOCUMENT"]]
          }]
        }];
      };

      Overlay.ngInjectableDef = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function Overlay_Factory() {
          return new Overlay(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(OverlayContainer), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentFactoryResolver"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationRef"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_5__["DOCUMENT"]));
        },
        token: Overlay,
        providedIn: "root"
      });
      Overlay = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__param"])(3, Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"])(_angular_common__WEBPACK_IMPORTED_MODULE_5__["DOCUMENT"])), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:paramtypes", [OverlayContainer, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentFactoryResolver"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationRef"], Object])], Overlay);
      /**
       * Reference to a toast opened via the Toastr service.
       */

      var ToastRef = /*#__PURE__*/function () {
        function ToastRef(_overlayRef) {
          _classCallCheck2(this, ToastRef);

          this._overlayRef = _overlayRef;
          /** Count of duplicates of this toast */

          this.duplicatesCount = 0;
          /** Subject for notifying the user that the toast has finished closing. */

          this._afterClosed = new rxjs__WEBPACK_IMPORTED_MODULE_3__["Subject"]();
          /** triggered when toast is activated */

          this._activate = new rxjs__WEBPACK_IMPORTED_MODULE_3__["Subject"]();
          /** notifies the toast that it should close before the timeout */

          this._manualClose = new rxjs__WEBPACK_IMPORTED_MODULE_3__["Subject"]();
          /** notifies the toast that it should reset the timeouts */

          this._resetTimeout = new rxjs__WEBPACK_IMPORTED_MODULE_3__["Subject"]();
          /** notifies the toast that it should count a duplicate toast */

          this._countDuplicate = new rxjs__WEBPACK_IMPORTED_MODULE_3__["Subject"]();
        }

        _createClass2(ToastRef, [{
          key: "manualClose",
          value: function manualClose() {
            this._manualClose.next();

            this._manualClose.complete();
          }
        }, {
          key: "manualClosed",
          value: function manualClosed() {
            return this._manualClose.asObservable();
          }
        }, {
          key: "timeoutReset",
          value: function timeoutReset() {
            return this._resetTimeout.asObservable();
          }
        }, {
          key: "countDuplicate",
          value: function countDuplicate() {
            return this._countDuplicate.asObservable();
          }
          /**
           * Close the toast.
           */

        }, {
          key: "close",
          value: function close() {
            this._overlayRef.detach();

            this._afterClosed.next();

            this._manualClose.next();

            this._afterClosed.complete();

            this._manualClose.complete();

            this._activate.complete();

            this._resetTimeout.complete();

            this._countDuplicate.complete();
          }
          /** Gets an observable that is notified when the toast is finished closing. */

        }, {
          key: "afterClosed",
          value: function afterClosed() {
            return this._afterClosed.asObservable();
          }
        }, {
          key: "isInactive",
          value: function isInactive() {
            return this._activate.isStopped;
          }
        }, {
          key: "activate",
          value: function activate() {
            this._activate.next();

            this._activate.complete();
          }
          /** Gets an observable that is notified when the toast has started opening. */

        }, {
          key: "afterActivate",
          value: function afterActivate() {
            return this._activate.asObservable();
          }
          /** Reset the toast timouts and count duplicates */

        }, {
          key: "onDuplicate",
          value: function onDuplicate(resetTimeout, countDuplicate) {
            if (resetTimeout) {
              this._resetTimeout.next();
            }

            if (countDuplicate) {
              this._countDuplicate.next(++this.duplicatesCount);
            }
          }
        }]);

        return ToastRef;
      }();
      /** Custom injector type specifically for instantiating components with a toast. */


      var ToastInjector = /*#__PURE__*/function () {
        function ToastInjector(_toastPackage, _parentInjector) {
          _classCallCheck2(this, ToastInjector);

          this._toastPackage = _toastPackage;
          this._parentInjector = _parentInjector;
        }

        _createClass2(ToastInjector, [{
          key: "get",
          value: function get(token, notFoundValue, flags) {
            if (token === ToastPackage) {
              return this._toastPackage;
            }

            return this._parentInjector.get(token, notFoundValue, flags);
          }
        }]);

        return ToastInjector;
      }();

      var ToastrService = /*#__PURE__*/function () {
        function ToastrService(token, overlay, _injector, sanitizer, ngZone) {
          _classCallCheck2(this, ToastrService);

          this.overlay = overlay;
          this._injector = _injector;
          this.sanitizer = sanitizer;
          this.ngZone = ngZone;
          this.currentlyActive = 0;
          this.toasts = [];
          this.index = 0;
          this.toastrConfig = Object.assign({}, token["default"], token.config);

          if (token.config.iconClasses) {
            this.toastrConfig.iconClasses = Object.assign({}, token["default"].iconClasses, token.config.iconClasses);
          }
        }
        /** show toast */


        _createClass2(ToastrService, [{
          key: "show",
          value: function show(message, title) {
            var override = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
            var type = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
            return this._preBuildNotification(type, message, title, this.applyConfig(override));
          }
          /** show successful toast */

        }, {
          key: "success",
          value: function success(message, title) {
            var override = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
            var type = this.toastrConfig.iconClasses.success || '';
            return this._preBuildNotification(type, message, title, this.applyConfig(override));
          }
          /** show error toast */

        }, {
          key: "error",
          value: function error(message, title) {
            var override = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
            var type = this.toastrConfig.iconClasses.error || '';
            return this._preBuildNotification(type, message, title, this.applyConfig(override));
          }
          /** show info toast */

        }, {
          key: "info",
          value: function info(message, title) {
            var override = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
            var type = this.toastrConfig.iconClasses.info || '';
            return this._preBuildNotification(type, message, title, this.applyConfig(override));
          }
          /** show warning toast */

        }, {
          key: "warning",
          value: function warning(message, title) {
            var override = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
            var type = this.toastrConfig.iconClasses.warning || '';
            return this._preBuildNotification(type, message, title, this.applyConfig(override));
          }
          /**
           * Remove all or a single toast by id
           */

        }, {
          key: "clear",
          value: function clear(toastId) {
            // Call every toastRef manualClose function
            var _iterator56 = _createForOfIteratorHelper(this.toasts),
                _step55;

            try {
              for (_iterator56.s(); !(_step55 = _iterator56.n()).done;) {
                var toast = _step55.value;

                if (toastId !== undefined) {
                  if (toast.toastId === toastId) {
                    toast.toastRef.manualClose();
                    return;
                  }
                } else {
                  toast.toastRef.manualClose();
                }
              }
            } catch (err) {
              _iterator56.e(err);
            } finally {
              _iterator56.f();
            }
          }
          /**
           * Remove and destroy a single toast by id
           */

        }, {
          key: "remove",
          value: function remove(toastId) {
            var found = this._findToast(toastId);

            if (!found) {
              return false;
            }

            found.activeToast.toastRef.close();
            this.toasts.splice(found.index, 1);
            this.currentlyActive = this.currentlyActive - 1;

            if (!this.toastrConfig.maxOpened || !this.toasts.length) {
              return false;
            }

            if (this.currentlyActive < this.toastrConfig.maxOpened && this.toasts[this.currentlyActive]) {
              var p = this.toasts[this.currentlyActive].toastRef;

              if (!p.isInactive()) {
                this.currentlyActive = this.currentlyActive + 1;
                p.activate();
              }
            }

            return true;
          }
          /**
           * Determines if toast message is already shown
           */

        }, {
          key: "findDuplicate",
          value: function findDuplicate(message, resetOnDuplicate, countDuplicates) {
            var _iterator57 = _createForOfIteratorHelper(this.toasts),
                _step56;

            try {
              for (_iterator57.s(); !(_step56 = _iterator57.n()).done;) {
                var toast = _step56.value;

                if (toast.message === message) {
                  toast.toastRef.onDuplicate(resetOnDuplicate, countDuplicates);
                  return toast;
                }
              }
            } catch (err) {
              _iterator57.e(err);
            } finally {
              _iterator57.f();
            }

            return null;
          }
          /** create a clone of global config and apply individual settings */

        }, {
          key: "applyConfig",
          value: function applyConfig() {
            var override = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            return Object.assign({}, this.toastrConfig, override);
          }
          /**
           * Find toast object by id
           */

        }, {
          key: "_findToast",
          value: function _findToast(toastId) {
            for (var i = 0; i < this.toasts.length; i++) {
              if (this.toasts[i].toastId === toastId) {
                return {
                  index: i,
                  activeToast: this.toasts[i]
                };
              }
            }

            return null;
          }
          /**
           * Determines the need to run inside angular's zone then builds the toast
           */

        }, {
          key: "_preBuildNotification",
          value: function _preBuildNotification(toastType, message, title, config) {
            var _this498 = this;

            if (config.onActivateTick) {
              return this.ngZone.run(function () {
                return _this498._buildNotification(toastType, message, title, config);
              });
            }

            return this._buildNotification(toastType, message, title, config);
          }
          /**
           * Creates and attaches toast data to component
           * returns the active toast, or in case preventDuplicates is enabled the original/non-duplicate active toast.
           */

        }, {
          key: "_buildNotification",
          value: function _buildNotification(toastType, message, title, config) {
            if (!config.toastComponent) {
              throw new Error('toastComponent required');
            } // max opened and auto dismiss = true
            // if timeout = 0 resetting it would result in setting this.hideTime = Date.now(). Hence, we only want to reset timeout if there is
            // a timeout at all


            var duplicate = this.findDuplicate(message, this.toastrConfig.resetTimeoutOnDuplicate && config.timeOut > 0, this.toastrConfig.countDuplicates);

            if (message && this.toastrConfig.preventDuplicates && duplicate !== null) {
              return duplicate;
            }

            this.previousToastMessage = message;
            var keepInactive = false;

            if (this.toastrConfig.maxOpened && this.currentlyActive >= this.toastrConfig.maxOpened) {
              keepInactive = true;

              if (this.toastrConfig.autoDismiss) {
                this.clear(this.toasts[0].toastId);
              }
            }

            var overlayRef = this.overlay.create(config.positionClass, this.overlayContainer);
            this.index = this.index + 1;
            var sanitizedMessage = message;

            if (message && config.enableHtml) {
              sanitizedMessage = this.sanitizer.sanitize(_angular_core__WEBPACK_IMPORTED_MODULE_1__["SecurityContext"].HTML, message);
            }

            var toastRef = new ToastRef(overlayRef);
            var toastPackage = new ToastPackage(this.index, config, sanitizedMessage, title, toastType, toastRef);
            var toastInjector = new ToastInjector(toastPackage, this._injector);
            var component = new ComponentPortal(config.toastComponent, toastInjector);
            var portal = overlayRef.attach(component, this.toastrConfig.newestOnTop);
            toastRef.componentInstance = portal._component;
            var ins = {
              toastId: this.index,
              message: message || '',
              toastRef: toastRef,
              onShown: toastRef.afterActivate(),
              onHidden: toastRef.afterClosed(),
              onTap: toastPackage.onTap(),
              onAction: toastPackage.onAction(),
              portal: portal
            };

            if (!keepInactive) {
              this.currentlyActive = this.currentlyActive + 1;
              setTimeout(function () {
                ins.toastRef.activate();
              });
            }

            this.toasts.push(ins);
            return ins;
          }
        }]);

        return ToastrService;
      }();

      ToastrService.ɵfac = function ToastrService_Factory(t) {
        return new (t || ToastrService)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](TOAST_CONFIG), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](Overlay), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_platform_browser__WEBPACK_IMPORTED_MODULE_4__["DomSanitizer"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]));
      };

      ToastrService.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({
        token: ToastrService,
        factory: function factory(t) {
          return ToastrService.ɵfac(t);
        },
        providedIn: 'root'
      });

      ToastrService.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [TOAST_CONFIG]
          }]
        }, {
          type: Overlay
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]
        }, {
          type: _angular_platform_browser__WEBPACK_IMPORTED_MODULE_4__["DomSanitizer"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        }];
      };

      ToastrService.ngInjectableDef = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function ToastrService_Factory() {
          return new ToastrService(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(TOAST_CONFIG), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(Overlay), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_1__["INJECTOR"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_platform_browser__WEBPACK_IMPORTED_MODULE_4__["DomSanitizer"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]));
        },
        token: ToastrService,
        providedIn: "root"
      });
      ToastrService = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__param"])(0, Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"])(TOAST_CONFIG)), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:paramtypes", [Object, Overlay, _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"], _angular_platform_browser__WEBPACK_IMPORTED_MODULE_4__["DomSanitizer"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]])], ToastrService);

      var Toast = /*#__PURE__*/function () {
        function Toast(toastrService, toastPackage, ngZone) {
          var _this499 = this;

          _classCallCheck2(this, Toast);

          this.toastrService = toastrService;
          this.toastPackage = toastPackage;
          this.ngZone = ngZone;
          /** width of progress bar */

          this.width = -1;
          /** a combination of toast type and options.toastClass */

          this.toastClasses = '';
          /** controls animation */

          this.state = {
            value: 'inactive',
            params: {
              easeTime: this.toastPackage.config.easeTime,
              easing: 'ease-in'
            }
          };
          this.message = toastPackage.message;
          this.title = toastPackage.title;
          this.options = toastPackage.config;
          this.originalTimeout = toastPackage.config.timeOut;
          this.toastClasses = "".concat(toastPackage.toastType, " ").concat(toastPackage.config.toastClass);
          this.sub = toastPackage.toastRef.afterActivate().subscribe(function () {
            _this499.activateToast();
          });
          this.sub1 = toastPackage.toastRef.manualClosed().subscribe(function () {
            _this499.remove();
          });
          this.sub2 = toastPackage.toastRef.timeoutReset().subscribe(function () {
            _this499.resetTimeout();
          });
          this.sub3 = toastPackage.toastRef.countDuplicate().subscribe(function (count) {
            _this499.duplicatesCount = count;
          });
        }
        /** hides component when waiting to be displayed */


        _createClass2(Toast, [{
          key: "displayStyle",
          get: function get() {
            if (this.state.value === 'inactive') {
              return 'none';
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.sub.unsubscribe();
            this.sub1.unsubscribe();
            this.sub2.unsubscribe();
            this.sub3.unsubscribe();
            clearInterval(this.intervalId);
            clearTimeout(this.timeout);
          }
          /**
           * activates toast and sets timeout
           */

        }, {
          key: "activateToast",
          value: function activateToast() {
            var _this500 = this;

            this.state = Object.assign({}, this.state, {
              value: 'active'
            });

            if (!(this.options.disableTimeOut === true || this.options.disableTimeOut === 'timeOut') && this.options.timeOut) {
              this.outsideTimeout(function () {
                return _this500.remove();
              }, this.options.timeOut);
              this.hideTime = new Date().getTime() + this.options.timeOut;

              if (this.options.progressBar) {
                this.outsideInterval(function () {
                  return _this500.updateProgress();
                }, 10);
              }
            }
          }
          /**
           * updates progress bar width
           */

        }, {
          key: "updateProgress",
          value: function updateProgress() {
            if (this.width === 0 || this.width === 100 || !this.options.timeOut) {
              return;
            }

            var now = new Date().getTime();
            var remaining = this.hideTime - now;
            this.width = remaining / this.options.timeOut * 100;

            if (this.options.progressAnimation === 'increasing') {
              this.width = 100 - this.width;
            }

            if (this.width <= 0) {
              this.width = 0;
            }

            if (this.width >= 100) {
              this.width = 100;
            }
          }
        }, {
          key: "resetTimeout",
          value: function resetTimeout() {
            var _this501 = this;

            clearTimeout(this.timeout);
            clearInterval(this.intervalId);
            this.state = Object.assign({}, this.state, {
              value: 'active'
            });
            this.outsideTimeout(function () {
              return _this501.remove();
            }, this.originalTimeout);
            this.options.timeOut = this.originalTimeout;
            this.hideTime = new Date().getTime() + (this.options.timeOut || 0);
            this.width = -1;

            if (this.options.progressBar) {
              this.outsideInterval(function () {
                return _this501.updateProgress();
              }, 10);
            }
          }
          /**
           * tells toastrService to remove this toast after animation time
           */

        }, {
          key: "remove",
          value: function remove() {
            var _this502 = this;

            if (this.state.value === 'removed') {
              return;
            }

            clearTimeout(this.timeout);
            this.state = Object.assign({}, this.state, {
              value: 'removed'
            });
            this.outsideTimeout(function () {
              return _this502.toastrService.remove(_this502.toastPackage.toastId);
            }, +this.toastPackage.config.easeTime);
          }
        }, {
          key: "tapToast",
          value: function tapToast() {
            if (this.state.value === 'removed') {
              return;
            }

            this.toastPackage.triggerTap();

            if (this.options.tapToDismiss) {
              this.remove();
            }
          }
        }, {
          key: "stickAround",
          value: function stickAround() {
            if (this.state.value === 'removed') {
              return;
            }

            clearTimeout(this.timeout);
            this.options.timeOut = 0;
            this.hideTime = 0; // disable progressBar

            clearInterval(this.intervalId);
            this.width = 0;
          }
        }, {
          key: "delayedHideToast",
          value: function delayedHideToast() {
            var _this503 = this;

            if (this.options.disableTimeOut === true || this.options.disableTimeOut === 'extendedTimeOut' || this.options.extendedTimeOut === 0 || this.state.value === 'removed') {
              return;
            }

            this.outsideTimeout(function () {
              return _this503.remove();
            }, this.options.extendedTimeOut);
            this.options.timeOut = this.options.extendedTimeOut;
            this.hideTime = new Date().getTime() + (this.options.timeOut || 0);
            this.width = -1;

            if (this.options.progressBar) {
              this.outsideInterval(function () {
                return _this503.updateProgress();
              }, 10);
            }
          }
        }, {
          key: "outsideTimeout",
          value: function outsideTimeout(func, timeout) {
            var _this504 = this;

            if (this.ngZone) {
              this.ngZone.runOutsideAngular(function () {
                return _this504.timeout = setTimeout(function () {
                  return _this504.runInsideAngular(func);
                }, timeout);
              });
            } else {
              this.timeout = setTimeout(function () {
                return func();
              }, timeout);
            }
          }
        }, {
          key: "outsideInterval",
          value: function outsideInterval(func, timeout) {
            var _this505 = this;

            if (this.ngZone) {
              this.ngZone.runOutsideAngular(function () {
                return _this505.intervalId = setInterval(function () {
                  return _this505.runInsideAngular(func);
                }, timeout);
              });
            } else {
              this.intervalId = setInterval(function () {
                return func();
              }, timeout);
            }
          }
        }, {
          key: "runInsideAngular",
          value: function runInsideAngular(func) {
            if (this.ngZone) {
              this.ngZone.run(function () {
                return func();
              });
            } else {
              func();
            }
          }
        }]);

        return Toast;
      }();

      Toast.ɵfac = function Toast_Factory(t) {
        return new (t || Toast)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](ToastrService), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](ToastPackage), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]));
      };

      Toast.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({
        type: Toast,
        selectors: [["", "toast-component", ""]],
        hostVars: 5,
        hostBindings: function Toast_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function Toast_click_HostBindingHandler() {
              return ctx.tapToast();
            })("mouseenter", function Toast_mouseenter_HostBindingHandler() {
              return ctx.stickAround();
            })("mouseleave", function Toast_mouseleave_HostBindingHandler() {
              return ctx.delayedHideToast();
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsyntheticHostProperty"]("@flyInOut", ctx.state);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassMap"](ctx.toastClasses);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵstyleProp"]("display", ctx.displayStyle);
          }
        },
        attrs: _c0,
        decls: 5,
        vars: 5,
        consts: [["class", "toast-close-button", "aria-label", "Close", 3, "click", 4, "ngIf"], [3, "class", 4, "ngIf"], ["role", "alertdialog", "aria-live", "polite", 3, "class", "innerHTML", 4, "ngIf"], ["role", "alertdialog", "aria-live", "polite", 3, "class", 4, "ngIf"], [4, "ngIf"], ["aria-label", "Close", 1, "toast-close-button", 3, "click"], ["aria-hidden", "true"], ["role", "alertdialog", "aria-live", "polite", 3, "innerHTML"], ["role", "alertdialog", "aria-live", "polite"], [1, "toast-progress"]],
        template: function Toast_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](0, Toast_button_0_Template, 3, 0, "button", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, Toast_div_1_Template, 3, 5, "div", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](2, Toast_div_2_Template, 1, 3, "div", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](3, Toast_div_3_Template, 2, 4, "div", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](4, Toast_div_4_Template, 2, 2, "div", 4);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.options.closeButton);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.title);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.message && ctx.options.enableHtml);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.message && !ctx.options.enableHtml);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.options.progressBar);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_5__["NgIf"]],
        encapsulation: 2,
        data: {
          animation: [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["trigger"])('flyInOut', [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["state"])('inactive', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["style"])({
            opacity: 0
          })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["state"])('active', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["style"])({
            opacity: 1
          })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["state"])('removed', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["style"])({
            opacity: 0
          })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["transition"])('inactive => active', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["animate"])('{{ easeTime }}ms {{ easing }}')), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["transition"])('active => removed', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["animate"])('{{ easeTime }}ms {{ easing }}'))])]
        }
      });

      Toast.ctorParameters = function () {
        return [{
          type: ToastrService
        }, {
          type: ToastPackage
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        }];
      };

      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["HostBinding"])('class'), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Object)], Toast.prototype, "toastClasses", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["HostBinding"])('@flyInOut'), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Object)], Toast.prototype, "state", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["HostBinding"])('style.display'), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Object), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:paramtypes", [])], Toast.prototype, "displayStyle", null);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"])('click'), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Function), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:paramtypes", []), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:returntype", void 0)], Toast.prototype, "tapToast", null);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"])('mouseenter'), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Function), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:paramtypes", []), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:returntype", void 0)], Toast.prototype, "stickAround", null);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"])('mouseleave'), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Function), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:paramtypes", []), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:returntype", void 0)], Toast.prototype, "delayedHideToast", null);
      Toast = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:paramtypes", [ToastrService, ToastPackage, _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]])], Toast);
      var ToastrModule_1;
      var DefaultGlobalConfig = Object.assign({}, DefaultNoComponentGlobalConfig, {
        toastComponent: Toast
      });

      var ToastrModule = ToastrModule_1 = /*#__PURE__*/function () {
        function ToastrModule() {
          _classCallCheck2(this, ToastrModule);
        }

        _createClass2(ToastrModule, null, [{
          key: "forRoot",
          value: function forRoot() {
            var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            return {
              ngModule: ToastrModule_1,
              providers: [{
                provide: TOAST_CONFIG,
                useValue: {
                  "default": DefaultGlobalConfig,
                  config: config
                }
              }]
            };
          }
        }]);

        return ToastrModule;
      }();

      ToastrModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({
        type: ToastrModule
      });
      ToastrModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({
        factory: function ToastrModule_Factory(t) {
          return new (t || ToastrModule)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_5__["CommonModule"]]]
      });

      var ToastrComponentlessModule = /*#__PURE__*/function () {
        function ToastrComponentlessModule() {
          _classCallCheck2(this, ToastrComponentlessModule);
        }

        _createClass2(ToastrComponentlessModule, null, [{
          key: "forRoot",
          value: function forRoot() {
            var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            return {
              ngModule: ToastrModule,
              providers: [{
                provide: TOAST_CONFIG,
                useValue: {
                  "default": DefaultNoComponentGlobalConfig,
                  config: config
                }
              }]
            };
          }
        }]);

        return ToastrComponentlessModule;
      }();

      ToastrComponentlessModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({
        type: ToastrComponentlessModule
      });
      ToastrComponentlessModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({
        factory: function ToastrComponentlessModule_Factory(t) {
          return new (t || ToastrComponentlessModule)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_5__["CommonModule"]]]
      });
      var ToastNoAnimationModule_1;

      var ToastNoAnimation = /*#__PURE__*/function () {
        function ToastNoAnimation(toastrService, toastPackage, appRef) {
          var _this506 = this;

          _classCallCheck2(this, ToastNoAnimation);

          this.toastrService = toastrService;
          this.toastPackage = toastPackage;
          this.appRef = appRef;
          /** width of progress bar */

          this.width = -1;
          /** a combination of toast type and options.toastClass */

          this.toastClasses = '';
          /** controls animation */

          this.state = 'inactive';
          this.message = toastPackage.message;
          this.title = toastPackage.title;
          this.options = toastPackage.config;
          this.originalTimeout = toastPackage.config.timeOut;
          this.toastClasses = "".concat(toastPackage.toastType, " ").concat(toastPackage.config.toastClass);
          this.sub = toastPackage.toastRef.afterActivate().subscribe(function () {
            _this506.activateToast();
          });
          this.sub1 = toastPackage.toastRef.manualClosed().subscribe(function () {
            _this506.remove();
          });
          this.sub2 = toastPackage.toastRef.timeoutReset().subscribe(function () {
            _this506.resetTimeout();
          });
          this.sub3 = toastPackage.toastRef.countDuplicate().subscribe(function (count) {
            _this506.duplicatesCount = count;
          });
        }
        /** hides component when waiting to be displayed */


        _createClass2(ToastNoAnimation, [{
          key: "displayStyle",
          get: function get() {
            if (this.state === 'inactive') {
              return 'none';
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.sub.unsubscribe();
            this.sub1.unsubscribe();
            this.sub2.unsubscribe();
            this.sub3.unsubscribe();
            clearInterval(this.intervalId);
            clearTimeout(this.timeout);
          }
          /**
           * activates toast and sets timeout
           */

        }, {
          key: "activateToast",
          value: function activateToast() {
            var _this507 = this;

            this.state = 'active';

            if (!(this.options.disableTimeOut === true || this.options.disableTimeOut === 'timeOut') && this.options.timeOut) {
              this.timeout = setTimeout(function () {
                _this507.remove();
              }, this.options.timeOut);
              this.hideTime = new Date().getTime() + this.options.timeOut;

              if (this.options.progressBar) {
                this.intervalId = setInterval(function () {
                  return _this507.updateProgress();
                }, 10);
              }
            }

            if (this.options.onActivateTick) {
              this.appRef.tick();
            }
          }
          /**
           * updates progress bar width
           */

        }, {
          key: "updateProgress",
          value: function updateProgress() {
            if (this.width === 0 || this.width === 100 || !this.options.timeOut) {
              return;
            }

            var now = new Date().getTime();
            var remaining = this.hideTime - now;
            this.width = remaining / this.options.timeOut * 100;

            if (this.options.progressAnimation === 'increasing') {
              this.width = 100 - this.width;
            }

            if (this.width <= 0) {
              this.width = 0;
            }

            if (this.width >= 100) {
              this.width = 100;
            }
          }
        }, {
          key: "resetTimeout",
          value: function resetTimeout() {
            var _this508 = this;

            clearTimeout(this.timeout);
            clearInterval(this.intervalId);
            this.state = 'active';
            this.options.timeOut = this.originalTimeout;
            this.timeout = setTimeout(function () {
              return _this508.remove();
            }, this.originalTimeout);
            this.hideTime = new Date().getTime() + (this.originalTimeout || 0);
            this.width = -1;

            if (this.options.progressBar) {
              this.intervalId = setInterval(function () {
                return _this508.updateProgress();
              }, 10);
            }
          }
          /**
           * tells toastrService to remove this toast after animation time
           */

        }, {
          key: "remove",
          value: function remove() {
            var _this509 = this;

            if (this.state === 'removed') {
              return;
            }

            clearTimeout(this.timeout);
            this.state = 'removed';
            this.timeout = setTimeout(function () {
              return _this509.toastrService.remove(_this509.toastPackage.toastId);
            });
          }
        }, {
          key: "tapToast",
          value: function tapToast() {
            if (this.state === 'removed') {
              return;
            }

            this.toastPackage.triggerTap();

            if (this.options.tapToDismiss) {
              this.remove();
            }
          }
        }, {
          key: "stickAround",
          value: function stickAround() {
            if (this.state === 'removed') {
              return;
            }

            clearTimeout(this.timeout);
            this.options.timeOut = 0;
            this.hideTime = 0; // disable progressBar

            clearInterval(this.intervalId);
            this.width = 0;
          }
        }, {
          key: "delayedHideToast",
          value: function delayedHideToast() {
            var _this510 = this;

            if (this.options.disableTimeOut === true || this.options.disableTimeOut === 'extendedTimeOut' || this.options.extendedTimeOut === 0 || this.state === 'removed') {
              return;
            }

            this.timeout = setTimeout(function () {
              return _this510.remove();
            }, this.options.extendedTimeOut);
            this.options.timeOut = this.options.extendedTimeOut;
            this.hideTime = new Date().getTime() + (this.options.timeOut || 0);
            this.width = -1;

            if (this.options.progressBar) {
              this.intervalId = setInterval(function () {
                return _this510.updateProgress();
              }, 10);
            }
          }
        }]);

        return ToastNoAnimation;
      }();

      ToastNoAnimation.ɵfac = function ToastNoAnimation_Factory(t) {
        return new (t || ToastNoAnimation)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](ToastrService), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](ToastPackage), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationRef"]));
      };

      ToastNoAnimation.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({
        type: ToastNoAnimation,
        selectors: [["", "toast-component", ""]],
        hostVars: 4,
        hostBindings: function ToastNoAnimation_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function ToastNoAnimation_click_HostBindingHandler() {
              return ctx.tapToast();
            })("mouseenter", function ToastNoAnimation_mouseenter_HostBindingHandler() {
              return ctx.stickAround();
            })("mouseleave", function ToastNoAnimation_mouseleave_HostBindingHandler() {
              return ctx.delayedHideToast();
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassMap"](ctx.toastClasses);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵstyleProp"]("display", ctx.displayStyle);
          }
        },
        attrs: _c0,
        decls: 5,
        vars: 5,
        consts: [["class", "toast-close-button", "aria-label", "Close", 3, "click", 4, "ngIf"], [3, "class", 4, "ngIf"], ["role", "alert", "aria-live", "polite", 3, "class", "innerHTML", 4, "ngIf"], ["role", "alert", "aria-live", "polite", 3, "class", 4, "ngIf"], [4, "ngIf"], ["aria-label", "Close", 1, "toast-close-button", 3, "click"], ["aria-hidden", "true"], ["role", "alert", "aria-live", "polite", 3, "innerHTML"], ["role", "alert", "aria-live", "polite"], [1, "toast-progress"]],
        template: function ToastNoAnimation_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](0, ToastNoAnimation_button_0_Template, 3, 0, "button", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, ToastNoAnimation_div_1_Template, 3, 5, "div", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](2, ToastNoAnimation_div_2_Template, 1, 3, "div", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](3, ToastNoAnimation_div_3_Template, 2, 4, "div", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](4, ToastNoAnimation_div_4_Template, 2, 2, "div", 4);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.options.closeButton);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.title);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.message && ctx.options.enableHtml);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.message && !ctx.options.enableHtml);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.options.progressBar);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_5__["NgIf"]],
        encapsulation: 2
      });

      ToastNoAnimation.ctorParameters = function () {
        return [{
          type: ToastrService
        }, {
          type: ToastPackage
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationRef"]
        }];
      };

      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["HostBinding"])('class'), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Object)], ToastNoAnimation.prototype, "toastClasses", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["HostBinding"])('style.display'), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Object), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:paramtypes", [])], ToastNoAnimation.prototype, "displayStyle", null);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"])('click'), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Function), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:paramtypes", []), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:returntype", void 0)], ToastNoAnimation.prototype, "tapToast", null);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"])('mouseenter'), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Function), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:paramtypes", []), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:returntype", void 0)], ToastNoAnimation.prototype, "stickAround", null);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"])('mouseleave'), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Function), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:paramtypes", []), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:returntype", void 0)], ToastNoAnimation.prototype, "delayedHideToast", null);
      ToastNoAnimation = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:paramtypes", [ToastrService, ToastPackage, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationRef"]])], ToastNoAnimation);
      var DefaultNoAnimationsGlobalConfig = Object.assign({}, DefaultNoComponentGlobalConfig, {
        toastComponent: ToastNoAnimation
      });

      var ToastNoAnimationModule = ToastNoAnimationModule_1 = /*#__PURE__*/function () {
        function ToastNoAnimationModule() {
          _classCallCheck2(this, ToastNoAnimationModule);
        }

        _createClass2(ToastNoAnimationModule, null, [{
          key: "forRoot",
          value: function forRoot() {
            var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            return {
              ngModule: ToastNoAnimationModule_1,
              providers: [{
                provide: TOAST_CONFIG,
                useValue: {
                  "default": DefaultNoAnimationsGlobalConfig,
                  config: config
                }
              }]
            };
          }
        }]);

        return ToastNoAnimationModule;
      }();

      ToastNoAnimationModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({
        type: ToastNoAnimationModule
      });
      ToastNoAnimationModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({
        factory: function ToastNoAnimationModule_Factory(t) {
          return new (t || ToastNoAnimationModule)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_5__["CommonModule"]]]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](ToastContainerDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
          args: [{
            selector: '[toastContainer]',
            exportAs: 'toastContainer'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
          }];
        }, null);
      })();

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](ToastContainerModule, {
          declarations: [ToastContainerDirective],
          exports: [ToastContainerDirective]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](ToastContainerModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
          args: [{
            declarations: [ToastContainerDirective],
            exports: [ToastContainerDirective]
          }]
        }], null, null);
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](OverlayContainer, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_5__["DOCUMENT"]]
            }]
          }];
        }, null);
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](Overlay, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: OverlayContainer
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentFactoryResolver"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationRef"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_5__["DOCUMENT"]]
            }]
          }];
        }, null);
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](ToastrService, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [TOAST_CONFIG]
            }]
          }, {
            type: Overlay
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]
          }, {
            type: _angular_platform_browser__WEBPACK_IMPORTED_MODULE_4__["DomSanitizer"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
          }];
        }, null);
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](Toast, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"],
          args: [{
            selector: '[toast-component]',
            template: "\n  <button *ngIf=\"options.closeButton\" (click)=\"remove()\" class=\"toast-close-button\" aria-label=\"Close\">\n    <span aria-hidden=\"true\">&times;</span>\n  </button>\n  <div *ngIf=\"title\" [class]=\"options.titleClass\" [attr.aria-label]=\"title\">\n    {{ title }} <ng-container *ngIf=\"duplicatesCount\">[{{ duplicatesCount + 1 }}]</ng-container>\n  </div>\n  <div *ngIf=\"message && options.enableHtml\" role=\"alertdialog\" aria-live=\"polite\"\n    [class]=\"options.messageClass\" [innerHTML]=\"message\">\n  </div>\n  <div *ngIf=\"message && !options.enableHtml\" role=\"alertdialog\" aria-live=\"polite\"\n    [class]=\"options.messageClass\" [attr.aria-label]=\"message\">\n    {{ message }}\n  </div>\n  <div *ngIf=\"options.progressBar\">\n    <div class=\"toast-progress\" [style.width]=\"width + '%'\"></div>\n  </div>\n  ",
            animations: [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["trigger"])('flyInOut', [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["state"])('inactive', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["style"])({
              opacity: 0
            })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["state"])('active', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["style"])({
              opacity: 1
            })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["state"])('removed', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["style"])({
              opacity: 0
            })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["transition"])('inactive => active', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["animate"])('{{ easeTime }}ms {{ easing }}')), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["transition"])('active => removed', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["animate"])('{{ easeTime }}ms {{ easing }}'))])],
            preserveWhitespaces: false
          }]
        }], function () {
          return [{
            type: ToastrService
          }, {
            type: ToastPackage
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
          }];
        }, {
          toastClasses: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostBinding"],
            args: ['class']
          }],
          state: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostBinding"],
            args: ['@flyInOut']
          }],
          displayStyle: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostBinding"],
            args: ['style.display']
          }],
          tapToast: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"],
            args: ['click']
          }],
          stickAround: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"],
            args: ['mouseenter']
          }],
          delayedHideToast: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"],
            args: ['mouseleave']
          }]
        });
      })();

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](ToastrModule, {
          declarations: function declarations() {
            return [Toast];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_5__["CommonModule"]];
          },
          exports: function exports() {
            return [Toast];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](ToastrModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
          args: [{
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_5__["CommonModule"]],
            declarations: [Toast],
            exports: [Toast],
            entryComponents: [Toast]
          }]
        }], null, null);
      })();

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](ToastrComponentlessModule, {
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_5__["CommonModule"]];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](ToastrComponentlessModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
          args: [{
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_5__["CommonModule"]]
          }]
        }], null, null);
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](ToastNoAnimation, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"],
          args: [{
            selector: '[toast-component]',
            template: "\n  <button *ngIf=\"options.closeButton\" (click)=\"remove()\" class=\"toast-close-button\" aria-label=\"Close\">\n    <span aria-hidden=\"true\">&times;</span>\n  </button>\n  <div *ngIf=\"title\" [class]=\"options.titleClass\" [attr.aria-label]=\"title\">\n    {{ title }} <ng-container *ngIf=\"duplicatesCount\">[{{ duplicatesCount + 1 }}]</ng-container>\n  </div>\n  <div *ngIf=\"message && options.enableHtml\" role=\"alert\" aria-live=\"polite\"\n    [class]=\"options.messageClass\" [innerHTML]=\"message\">\n  </div>\n  <div *ngIf=\"message && !options.enableHtml\" role=\"alert\" aria-live=\"polite\"\n    [class]=\"options.messageClass\" [attr.aria-label]=\"message\">\n    {{ message }}\n  </div>\n  <div *ngIf=\"options.progressBar\">\n    <div class=\"toast-progress\" [style.width]=\"width + '%'\"></div>\n  </div>\n  "
          }]
        }], function () {
          return [{
            type: ToastrService
          }, {
            type: ToastPackage
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationRef"]
          }];
        }, {
          toastClasses: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostBinding"],
            args: ['class']
          }],
          displayStyle: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostBinding"],
            args: ['style.display']
          }],
          tapToast: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"],
            args: ['click']
          }],
          stickAround: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"],
            args: ['mouseenter']
          }],
          delayedHideToast: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"],
            args: ['mouseleave']
          }]
        });
      })();

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](ToastNoAnimationModule, {
          declarations: function declarations() {
            return [ToastNoAnimation];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_5__["CommonModule"]];
          },
          exports: function exports() {
            return [ToastNoAnimation];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](ToastNoAnimationModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
          args: [{
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_5__["CommonModule"]],
            declarations: [ToastNoAnimation],
            exports: [ToastNoAnimation],
            entryComponents: [ToastNoAnimation]
          }]
        }], null, null);
      })();
      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=ngx-toastr.js.map

      /***/

    },

    /***/
    "5wOx":
    /*!***********************************************!*\
      !*** ./node_modules/aws-sdk/lib/model/api.js ***!
      \***********************************************/

    /*! no static exports found */

    /***/
    function wOx(module, exports, __webpack_require__) {
      var Collection = __webpack_require__(
      /*! ./collection */
      "T0AB");

      var Operation = __webpack_require__(
      /*! ./operation */
      "1vLn");

      var Shape = __webpack_require__(
      /*! ./shape */
      "nyFZ");

      var Paginator = __webpack_require__(
      /*! ./paginator */
      "TkaK");

      var ResourceWaiter = __webpack_require__(
      /*! ./resource_waiter */
      "CbSC");

      var metadata = __webpack_require__(
      /*! ../../apis/metadata.json */
      "FQVY");

      var util = __webpack_require__(
      /*! ../util */
      "BaN1");

      var property = util.property;
      var memoizedProperty = util.memoizedProperty;

      function Api(api, options) {
        var self = this;
        api = api || {};
        options = options || {};
        options.api = this;
        api.metadata = api.metadata || {};
        var serviceIdentifier = options.serviceIdentifier;
        delete options.serviceIdentifier;
        property(this, 'isApi', true, false);
        property(this, 'apiVersion', api.metadata.apiVersion);
        property(this, 'endpointPrefix', api.metadata.endpointPrefix);
        property(this, 'signingName', api.metadata.signingName);
        property(this, 'globalEndpoint', api.metadata.globalEndpoint);
        property(this, 'signatureVersion', api.metadata.signatureVersion);
        property(this, 'jsonVersion', api.metadata.jsonVersion);
        property(this, 'targetPrefix', api.metadata.targetPrefix);
        property(this, 'protocol', api.metadata.protocol);
        property(this, 'timestampFormat', api.metadata.timestampFormat);
        property(this, 'xmlNamespaceUri', api.metadata.xmlNamespace);
        property(this, 'abbreviation', api.metadata.serviceAbbreviation);
        property(this, 'fullName', api.metadata.serviceFullName);
        property(this, 'serviceId', api.metadata.serviceId);

        if (serviceIdentifier && metadata[serviceIdentifier]) {
          property(this, 'xmlNoDefaultLists', metadata[serviceIdentifier].xmlNoDefaultLists, false);
        }

        memoizedProperty(this, 'className', function () {
          var name = api.metadata.serviceAbbreviation || api.metadata.serviceFullName;
          if (!name) return null;
          name = name.replace(/^Amazon|AWS\s*|\(.*|\s+|\W+/g, '');
          if (name === 'ElasticLoadBalancing') name = 'ELB';
          return name;
        });

        function addEndpointOperation(name, operation) {
          if (operation.endpointoperation === true) {
            property(self, 'endpointOperation', util.string.lowerFirst(name));
          }

          if (operation.endpointdiscovery && !self.hasRequiredEndpointDiscovery) {
            property(self, 'hasRequiredEndpointDiscovery', operation.endpointdiscovery.required === true);
          }
        }

        property(this, 'operations', new Collection(api.operations, options, function (name, operation) {
          return new Operation(name, operation, options);
        }, util.string.lowerFirst, addEndpointOperation));
        property(this, 'shapes', new Collection(api.shapes, options, function (name, shape) {
          return Shape.create(shape, options);
        }));
        property(this, 'paginators', new Collection(api.paginators, options, function (name, paginator) {
          return new Paginator(name, paginator, options);
        }));
        property(this, 'waiters', new Collection(api.waiters, options, function (name, waiter) {
          return new ResourceWaiter(name, waiter, options);
        }, util.string.lowerFirst));

        if (options.documentation) {
          property(this, 'documentation', api.documentation);
          property(this, 'documentationUrl', api.documentationUrl);
        }
      }
      /**
       * @api private
       */


      module.exports = Api;
      /***/
    },

    /***/
    "5wkZ":
    /*!************************************************************************!*\
      !*** ./node_modules/aws-sdk/lib/event-stream/event-message-chunker.js ***!
      \************************************************************************/

    /*! no static exports found */

    /***/
    function wkZ(module, exports) {
      /**
       * Takes in a buffer of event messages and splits them into individual messages.
       * @param {Buffer} buffer
       * @api private
       */
      function eventMessageChunker(buffer) {
        /** @type Buffer[] */
        var messages = [];
        var offset = 0;

        while (offset < buffer.length) {
          var totalLength = buffer.readInt32BE(offset); // create new buffer for individual message (shares memory with original)

          var message = buffer.slice(offset, totalLength + offset); // increment offset to it starts at the next message

          offset += totalLength;
          messages.push(message);
        }

        return messages;
      }
      /**
       * @api private
       */


      module.exports = {
        eventMessageChunker: eventMessageChunker
      };
      /***/
    },

    /***/
    "5xEe":
    /*!*********************************************!*\
      !*** ./node_modules/rxjs-compat/Subject.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function xEe(module, exports, __webpack_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });

      var rxjs_1 = __webpack_require__(
      /*! rxjs */
      "qCKp");

      exports.Subject = rxjs_1.Subject; //# sourceMappingURL=Subject.js.map

      /***/
    },

    /***/
    "5yfJ":
    /*!*****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/never.js ***!
      \*****************************************************************/

    /*! exports provided: NEVER, never */

    /***/
    function yfJ(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NEVER", function () {
        return NEVER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "never", function () {
        return never;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _util_noop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/noop */
      "KqfI");

      var NEVER = new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](_util_noop__WEBPACK_IMPORTED_MODULE_1__["noop"]);

      function never() {
        return NEVER;
      } //# sourceMappingURL=never.js.map

      /***/

    },

    /***/
    "6+QB":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/ms.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function QB(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Malay [ms]
      //! author : Weldan Jamili : https://github.com/weldan
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var ms = moment.defineLocale('ms', {
          months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),
          monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
          weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
          weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
          weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
          longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [pukul] HH.mm',
            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm'
          },
          meridiemParse: /pagi|tengahari|petang|malam/,
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === 'pagi') {
              return hour;
            } else if (meridiem === 'tengahari') {
              return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'petang' || meridiem === 'malam') {
              return hour + 12;
            }
          },
          meridiem: function meridiem(hours, minutes, isLower) {
            if (hours < 11) {
              return 'pagi';
            } else if (hours < 15) {
              return 'tengahari';
            } else if (hours < 19) {
              return 'petang';
            } else {
              return 'malam';
            }
          },
          calendar: {
            sameDay: '[Hari ini pukul] LT',
            nextDay: '[Esok pukul] LT',
            nextWeek: 'dddd [pukul] LT',
            lastDay: '[Kelmarin pukul] LT',
            lastWeek: 'dddd [lepas pukul] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'dalam %s',
            past: '%s yang lepas',
            s: 'beberapa saat',
            ss: '%d saat',
            m: 'seminit',
            mm: '%d minit',
            h: 'sejam',
            hh: '%d jam',
            d: 'sehari',
            dd: '%d hari',
            M: 'sebulan',
            MM: '%d bulan',
            y: 'setahun',
            yy: '%d tahun'
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return ms;
      });
      /***/

    },

    /***/
    "6B0Y":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/km.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function B0Y(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Cambodian [km]
      //! author : Kruy Vanna : https://github.com/kruyvanna
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var symbolMap = {
          1: '១',
          2: '២',
          3: '៣',
          4: '៤',
          5: '៥',
          6: '៦',
          7: '៧',
          8: '៨',
          9: '៩',
          0: '០'
        },
            numberMap = {
          '១': '1',
          '២': '2',
          '៣': '3',
          '៤': '4',
          '៥': '5',
          '៦': '6',
          '៧': '7',
          '៨': '8',
          '៩': '9',
          '០': '0'
        };
        var km = moment.defineLocale('km', {
          months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
          monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
          weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
          weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),
          weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          meridiemParse: /ព្រឹក|ល្ងាច/,
          isPM: function isPM(input) {
            return input === 'ល្ងាច';
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 12) {
              return 'ព្រឹក';
            } else {
              return 'ល្ងាច';
            }
          },
          calendar: {
            sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',
            nextDay: '[ស្អែក ម៉ោង] LT',
            nextWeek: 'dddd [ម៉ោង] LT',
            lastDay: '[ម្សិលមិញ ម៉ោង] LT',
            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%sទៀត',
            past: '%sមុន',
            s: 'ប៉ុន្មានវិនាទី',
            ss: '%d វិនាទី',
            m: 'មួយនាទី',
            mm: '%d នាទី',
            h: 'មួយម៉ោង',
            hh: '%d ម៉ោង',
            d: 'មួយថ្ងៃ',
            dd: '%d ថ្ងៃ',
            M: 'មួយខែ',
            MM: '%d ខែ',
            y: 'មួយឆ្នាំ',
            yy: '%d ឆ្នាំ'
          },
          dayOfMonthOrdinalParse: /ទី\d{1,2}/,
          ordinal: 'ទី%d',
          preparse: function preparse(string) {
            return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {
              return numberMap[match];
            });
          },
          postformat: function postformat(string) {
            return string.replace(/\d/g, function (match) {
              return symbolMap[match];
            });
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return km;
      });
      /***/

    },

    /***/
    "6HvG":
    /*!********************************************************************!*\
      !*** ./node_modules/ng-pick-datetime-moment/__ivy_ngcc__/index.js ***!
      \********************************************************************/

    /*! exports provided: OWL_MOMENT_DATE_TIME_ADAPTER_OPTIONS, OWL_MOMENT_DATE_TIME_ADAPTER_OPTIONS_FACTORY, MomentDateTimeAdapter, OWL_MOMENT_DATE_TIME_FORMATS, OwlMomentDateTimeModule */

    /***/
    function HvG(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony import */


      var _moment_adapter_moment_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./moment-adapter/moment-date-time-adapter.class */
      "HNkt");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OWL_MOMENT_DATE_TIME_ADAPTER_OPTIONS", function () {
        return _moment_adapter_moment_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_0__["OWL_MOMENT_DATE_TIME_ADAPTER_OPTIONS"];
      });
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OWL_MOMENT_DATE_TIME_ADAPTER_OPTIONS_FACTORY", function () {
        return _moment_adapter_moment_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_0__["OWL_MOMENT_DATE_TIME_ADAPTER_OPTIONS_FACTORY"];
      });
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "MomentDateTimeAdapter", function () {
        return _moment_adapter_moment_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_0__["MomentDateTimeAdapter"];
      });
      /* harmony import */


      var _moment_adapter_moment_date_time_format_class__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./moment-adapter/moment-date-time-format.class */
      "VoWP");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OWL_MOMENT_DATE_TIME_FORMATS", function () {
        return _moment_adapter_moment_date_time_format_class__WEBPACK_IMPORTED_MODULE_1__["OWL_MOMENT_DATE_TIME_FORMATS"];
      });
      /* harmony import */


      var _moment_adapter_moment_date_time_module__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./moment-adapter/moment-date-time.module */
      "G/m7");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OwlMomentDateTimeModule", function () {
        return _moment_adapter_moment_date_time_module__WEBPACK_IMPORTED_MODULE_2__["OwlMomentDateTimeModule"];
      }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9tb21lbnQtYWRhcHRlci9tb21lbnQtZGF0ZS10aW1lLWFkYXB0ZXIuY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9tb21lbnQtYWRhcHRlci9tb21lbnQtZGF0ZS10aW1lLWZvcm1hdC5jbGFzcyc7XG5leHBvcnQgeyBPd2xNb21lbnREYXRlVGltZU1vZHVsZSB9IGZyb20gJy4vbW9tZW50LWFkYXB0ZXIvbW9tZW50LWRhdGUtdGltZS5tb2R1bGUnO1xuIl19

      /***/

    },

    /***/
    "6MUB":
    /*!********************************************!*\
      !*** ./node_modules/querystring/encode.js ***!
      \********************************************/

    /*! no static exports found */

    /***/
    function MUB(module, exports, __webpack_require__) {
      "use strict"; // Copyright Joyent, Inc. and other Node contributors.
      //
      // Permission is hereby granted, free of charge, to any person obtaining a
      // copy of this software and associated documentation files (the
      // "Software"), to deal in the Software without restriction, including
      // without limitation the rights to use, copy, modify, merge, publish,
      // distribute, sublicense, and/or sell copies of the Software, and to permit
      // persons to whom the Software is furnished to do so, subject to the
      // following conditions:
      //
      // The above copyright notice and this permission notice shall be included
      // in all copies or substantial portions of the Software.
      //
      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
      // USE OR OTHER DEALINGS IN THE SOFTWARE.

      var stringifyPrimitive = function stringifyPrimitive(v) {
        switch (typeof v) {
          case 'string':
            return v;

          case 'boolean':
            return v ? 'true' : 'false';

          case 'number':
            return isFinite(v) ? v : '';

          default:
            return '';
        }
      };

      module.exports = function (obj, sep, eq, name) {
        sep = sep || '&';
        eq = eq || '=';

        if (obj === null) {
          obj = undefined;
        }

        if (typeof obj === 'object') {
          return Object.keys(obj).map(function (k) {
            var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;

            if (Array.isArray(obj[k])) {
              return obj[k].map(function (v) {
                return ks + encodeURIComponent(stringifyPrimitive(v));
              }).join(sep);
            } else {
              return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
            }
          }).join(sep);
        }

        if (!name) return '';
        return encodeURIComponent(stringifyPrimitive(name)) + eq + encodeURIComponent(stringifyPrimitive(obj));
      };
      /***/

    },

    /***/
    "6Uf2":
    /*!***********************************************************!*\
      !*** ./node_modules/@firebase/database/dist/index.esm.js ***!
      \***********************************************************/

    /*! exports provided: DataSnapshot, Database, OnDisconnect, Query, Reference, ServerValue, enableLogging, registerDatabase */

    /***/
    function Uf2(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* WEBPACK VAR INJECTION */


      (function (module) {
        /* harmony export (binding) */
        __webpack_require__.d(__webpack_exports__, "DataSnapshot", function () {
          return DataSnapshot$1;
        });
        /* harmony export (binding) */


        __webpack_require__.d(__webpack_exports__, "Database", function () {
          return Database;
        });
        /* harmony export (binding) */


        __webpack_require__.d(__webpack_exports__, "OnDisconnect", function () {
          return OnDisconnect$1;
        });
        /* harmony export (binding) */


        __webpack_require__.d(__webpack_exports__, "Query", function () {
          return Query;
        });
        /* harmony export (binding) */


        __webpack_require__.d(__webpack_exports__, "Reference", function () {
          return Reference;
        });
        /* harmony export (binding) */


        __webpack_require__.d(__webpack_exports__, "ServerValue", function () {
          return ServerValue;
        });
        /* harmony export (binding) */


        __webpack_require__.d(__webpack_exports__, "enableLogging", function () {
          return enableLogging;
        });
        /* harmony export (binding) */


        __webpack_require__.d(__webpack_exports__, "registerDatabase", function () {
          return registerDatabase;
        });
        /* harmony import */


        var _firebase_app__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
        /*! @firebase/app */
        "zIRd");
        /* harmony import */


        var _firebase_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
        /*! @firebase/component */
        "/6Yf");
        /* harmony import */


        var _firebase_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
        /*! @firebase/util */
        "qOnz");
        /* harmony import */


        var tslib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
        /*! tslib */
        "Tr+X");
        /* harmony import */


        var _firebase_logger__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
        /*! @firebase/logger */
        "q/0M");

        var name = "@firebase/database";
        var version = "0.10.3";
        /**
         * @license
         * Copyright 2019 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /** The semver (www.semver.org) version of the SDK. */

        var SDK_VERSION = ''; // SDK_VERSION should be set before any database instance is created

        function setSDKVersion(version) {
          SDK_VERSION = version;
        }
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * Wraps a DOM Storage object and:
         * - automatically encode objects as JSON strings before storing them to allow us to store arbitrary types.
         * - prefixes names with "firebase:" to avoid collisions with app data.
         *
         * We automatically (see storage.js) create two such wrappers, one for sessionStorage,
         * and one for localStorage.
         *
         */


        var DOMStorageWrapper =
        /** @class */
        function () {
          /**
           * @param domStorage_ - The underlying storage object (e.g. localStorage or sessionStorage)
           */
          function DOMStorageWrapper(domStorage_) {
            this.domStorage_ = domStorage_; // Use a prefix to avoid collisions with other stuff saved by the app.

            this.prefix_ = 'firebase:';
          }
          /**
           * @param key - The key to save the value under
           * @param value - The value being stored, or null to remove the key.
           */


          DOMStorageWrapper.prototype.set = function (key, value) {
            if (value == null) {
              this.domStorage_.removeItem(this.prefixedName_(key));
            } else {
              this.domStorage_.setItem(this.prefixedName_(key), Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringify"])(value));
            }
          };
          /**
           * @returns The value that was stored under this key, or null
           */


          DOMStorageWrapper.prototype.get = function (key) {
            var storedVal = this.domStorage_.getItem(this.prefixedName_(key));

            if (storedVal == null) {
              return null;
            } else {
              return Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["jsonEval"])(storedVal);
            }
          };

          DOMStorageWrapper.prototype.remove = function (key) {
            this.domStorage_.removeItem(this.prefixedName_(key));
          };

          DOMStorageWrapper.prototype.prefixedName_ = function (name) {
            return this.prefix_ + name;
          };

          DOMStorageWrapper.prototype.toString = function () {
            return this.domStorage_.toString();
          };

          return DOMStorageWrapper;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * An in-memory storage implementation that matches the API of DOMStorageWrapper
         * (TODO: create interface for both to implement).
         */


        var MemoryStorage =
        /** @class */
        function () {
          function MemoryStorage() {
            this.cache_ = {};
            this.isInMemoryStorage = true;
          }

          MemoryStorage.prototype.set = function (key, value) {
            if (value == null) {
              delete this.cache_[key];
            } else {
              this.cache_[key] = value;
            }
          };

          MemoryStorage.prototype.get = function (key) {
            if (Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["contains"])(this.cache_, key)) {
              return this.cache_[key];
            }

            return null;
          };

          MemoryStorage.prototype.remove = function (key) {
            delete this.cache_[key];
          };

          return MemoryStorage;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * Helper to create a DOMStorageWrapper or else fall back to MemoryStorage.
         * TODO: Once MemoryStorage and DOMStorageWrapper have a shared interface this method annotation should change
         * to reflect this type
         *
         * @param domStorageName - Name of the underlying storage object
         *   (e.g. 'localStorage' or 'sessionStorage').
         * @returns Turning off type information until a common interface is defined.
         */


        var createStoragefor = function createStoragefor(domStorageName) {
          try {
            // NOTE: just accessing "localStorage" or "window['localStorage']" may throw a security exception,
            // so it must be inside the try/catch.
            if (typeof window !== 'undefined' && typeof window[domStorageName] !== 'undefined') {
              // Need to test cache. Just because it's here doesn't mean it works
              var domStorage = window[domStorageName];
              domStorage.setItem('firebase:sentinel', 'cache');
              domStorage.removeItem('firebase:sentinel');
              return new DOMStorageWrapper(domStorage);
            }
          } catch (e) {} // Failed to create wrapper.  Just return in-memory storage.
          // TODO: log?


          return new MemoryStorage();
        };
        /** A storage object that lasts across sessions */


        var PersistentStorage = createStoragefor('localStorage');
        /** A storage object that only lasts one session */

        var SessionStorage = createStoragefor('sessionStorage');
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        var logClient = new _firebase_logger__WEBPACK_IMPORTED_MODULE_4__["Logger"]('@firebase/database');
        /**
         * Returns a locally-unique ID (generated by just incrementing up from 0 each time its called).
         */

        var LUIDGenerator = function () {
          var id = 1;
          return function () {
            return id++;
          };
        }();
        /**
         * Sha1 hash of the input string
         * @param str - The string to hash
         * @returns {!string} The resulting hash
         */


        var sha1 = function sha1(str) {
          var utf8Bytes = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringToByteArray"])(str);
          var sha1 = new _firebase_util__WEBPACK_IMPORTED_MODULE_2__["Sha1"]();
          sha1.update(utf8Bytes);
          var sha1Bytes = sha1.digest();
          return _firebase_util__WEBPACK_IMPORTED_MODULE_2__["base64"].encodeByteArray(sha1Bytes);
        };

        var buildLogMessage_ = function buildLogMessage_() {
          var varArgs = [];

          for (var _i = 0; _i < arguments.length; _i++) {
            varArgs[_i] = arguments[_i];
          }

          var message = '';

          for (var i = 0; i < varArgs.length; i++) {
            var arg = varArgs[i];

            if (Array.isArray(arg) || arg && typeof arg === 'object' && // eslint-disable-next-line @typescript-eslint/no-explicit-any
            typeof arg.length === 'number') {
              message += buildLogMessage_.apply(null, arg);
            } else if (typeof arg === 'object') {
              message += Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringify"])(arg);
            } else {
              message += arg;
            }

            message += ' ';
          }

          return message;
        };
        /**
         * Use this for all debug messages in Firebase.
         */


        var logger = null;
        /**
         * Flag to check for log availability on first log message
         */

        var firstLog_ = true;
        /**
         * The implementation of Firebase.enableLogging (defined here to break dependencies)
         * @param logger_ - A flag to turn on logging, or a custom logger
         * @param persistent - Whether or not to persist logging settings across refreshes
         */

        var enableLogging = function enableLogging(logger_, persistent) {
          Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(!persistent || logger_ === true || logger_ === false, "Can't turn on custom loggers persistently.");

          if (logger_ === true) {
            logClient.logLevel = _firebase_logger__WEBPACK_IMPORTED_MODULE_4__["LogLevel"].VERBOSE;
            logger = logClient.log.bind(logClient);

            if (persistent) {
              SessionStorage.set('logging_enabled', true);
            }
          } else if (typeof logger_ === 'function') {
            logger = logger_;
          } else {
            logger = null;
            SessionStorage.remove('logging_enabled');
          }
        };

        var log = function log() {
          var varArgs = [];

          for (var _i = 0; _i < arguments.length; _i++) {
            varArgs[_i] = arguments[_i];
          }

          if (firstLog_ === true) {
            firstLog_ = false;

            if (logger === null && SessionStorage.get('logging_enabled') === true) {
              enableLogging(true);
            }
          }

          if (logger) {
            var message = buildLogMessage_.apply(null, varArgs);
            logger(message);
          }
        };

        var logWrapper = function logWrapper(prefix) {
          return function () {
            var varArgs = [];

            for (var _i = 0; _i < arguments.length; _i++) {
              varArgs[_i] = arguments[_i];
            }

            log.apply(void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__spreadArray"])([prefix], Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__read"])(varArgs)));
          };
        };

        var error = function error() {
          var varArgs = [];

          for (var _i = 0; _i < arguments.length; _i++) {
            varArgs[_i] = arguments[_i];
          }

          var message = 'FIREBASE INTERNAL ERROR: ' + buildLogMessage_.apply(void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__spreadArray"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__read"])(varArgs)));
          logClient.error(message);
        };

        var fatal = function fatal() {
          var varArgs = [];

          for (var _i = 0; _i < arguments.length; _i++) {
            varArgs[_i] = arguments[_i];
          }

          var message = "FIREBASE FATAL ERROR: " + buildLogMessage_.apply(void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__spreadArray"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__read"])(varArgs)));
          logClient.error(message);
          throw new Error(message);
        };

        var warn = function warn() {
          var varArgs = [];

          for (var _i = 0; _i < arguments.length; _i++) {
            varArgs[_i] = arguments[_i];
          }

          var message = 'FIREBASE WARNING: ' + buildLogMessage_.apply(void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__spreadArray"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__read"])(varArgs)));
          logClient.warn(message);
        };
        /**
         * Logs a warning if the containing page uses https. Called when a call to new Firebase
         * does not use https.
         */


        var warnIfPageIsSecure = function warnIfPageIsSecure() {
          // Be very careful accessing browser globals. Who knows what may or may not exist.
          if (typeof window !== 'undefined' && window.location && window.location.protocol && window.location.protocol.indexOf('https:') !== -1) {
            warn('Insecure Firebase access from a secure page. ' + 'Please use https in calls to new Firebase().');
          }
        };
        /**
         * Returns true if data is NaN, or +/- Infinity.
         */


        var isInvalidJSONNumber = function isInvalidJSONNumber(data) {
          return typeof data === 'number' && (data !== data || // NaN
          data === Number.POSITIVE_INFINITY || data === Number.NEGATIVE_INFINITY);
        };

        var executeWhenDOMReady = function executeWhenDOMReady(fn) {
          if (Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["isNodeSdk"])() || document.readyState === 'complete') {
            fn();
          } else {
            // Modeled after jQuery. Try DOMContentLoaded and onreadystatechange (which
            // fire before onload), but fall back to onload.
            var called_1 = false;

            var wrappedFn_1 = function wrappedFn_1() {
              if (!document.body) {
                setTimeout(wrappedFn_1, Math.floor(10));
                return;
              }

              if (!called_1) {
                called_1 = true;
                fn();
              }
            };

            if (document.addEventListener) {
              document.addEventListener('DOMContentLoaded', wrappedFn_1, false); // fallback to onload.

              window.addEventListener('load', wrappedFn_1, false); // eslint-disable-next-line @typescript-eslint/no-explicit-any
            } else if (document.attachEvent) {
              // IE.
              // eslint-disable-next-line @typescript-eslint/no-explicit-any
              document.attachEvent('onreadystatechange', function () {
                if (document.readyState === 'complete') {
                  wrappedFn_1();
                }
              }); // fallback to onload.
              // eslint-disable-next-line @typescript-eslint/no-explicit-any

              window.attachEvent('onload', wrappedFn_1); // jQuery has an extra hack for IE that we could employ (based on
              // http://javascript.nwbox.com/IEContentLoaded/) But it looks really old.
              // I'm hoping we don't need it.
            }
          }
        };
        /**
         * Minimum key name. Invalid for actual data, used as a marker to sort before any valid names
         */


        var MIN_NAME = '[MIN_NAME]';
        /**
         * Maximum key name. Invalid for actual data, used as a marker to sort above any valid names
         */

        var MAX_NAME = '[MAX_NAME]';
        /**
         * Compares valid Firebase key names, plus min and max name
         */

        var nameCompare = function nameCompare(a, b) {
          if (a === b) {
            return 0;
          } else if (a === MIN_NAME || b === MAX_NAME) {
            return -1;
          } else if (b === MIN_NAME || a === MAX_NAME) {
            return 1;
          } else {
            var aAsInt = tryParseInt(a),
                bAsInt = tryParseInt(b);

            if (aAsInt !== null) {
              if (bAsInt !== null) {
                return aAsInt - bAsInt === 0 ? a.length - b.length : aAsInt - bAsInt;
              } else {
                return -1;
              }
            } else if (bAsInt !== null) {
              return 1;
            } else {
              return a < b ? -1 : 1;
            }
          }
        };
        /**
         * @returns {!number} comparison result.
         */


        var stringCompare = function stringCompare(a, b) {
          if (a === b) {
            return 0;
          } else if (a < b) {
            return -1;
          } else {
            return 1;
          }
        };

        var requireKey = function requireKey(key, obj) {
          if (obj && key in obj) {
            return obj[key];
          } else {
            throw new Error('Missing required key (' + key + ') in object: ' + Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringify"])(obj));
          }
        };

        var ObjectToUniqueKey = function ObjectToUniqueKey(obj) {
          if (typeof obj !== 'object' || obj === null) {
            return Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringify"])(obj);
          }

          var keys = []; // eslint-disable-next-line guard-for-in

          for (var k in obj) {
            keys.push(k);
          } // Export as json, but with the keys sorted.


          keys.sort();
          var key = '{';

          for (var i = 0; i < keys.length; i++) {
            if (i !== 0) {
              key += ',';
            }

            key += Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringify"])(keys[i]);
            key += ':';
            key += ObjectToUniqueKey(obj[keys[i]]);
          }

          key += '}';
          return key;
        };
        /**
         * Splits a string into a number of smaller segments of maximum size
         * @param str - The string
         * @param segsize - The maximum number of chars in the string.
         * @returns The string, split into appropriately-sized chunks
         */


        var splitStringBySize = function splitStringBySize(str, segsize) {
          var len = str.length;

          if (len <= segsize) {
            return [str];
          }

          var dataSegs = [];

          for (var c = 0; c < len; c += segsize) {
            if (c + segsize > len) {
              dataSegs.push(str.substring(c, len));
            } else {
              dataSegs.push(str.substring(c, c + segsize));
            }
          }

          return dataSegs;
        };
        /**
         * Apply a function to each (key, value) pair in an object or
         * apply a function to each (index, value) pair in an array
         * @param obj - The object or array to iterate over
         * @param fn - The function to apply
         */


        function each(obj, fn) {
          for (var key in obj) {
            if (obj.hasOwnProperty(key)) {
              fn(key, obj[key]);
            }
          }
        }
        /**
         * Borrowed from http://hg.secondlife.com/llsd/src/tip/js/typedarray.js (MIT License)
         * I made one modification at the end and removed the NaN / Infinity
         * handling (since it seemed broken [caused an overflow] and we don't need it).  See MJL comments.
         * @param v - A double
         *
         */


        var doubleToIEEE754String = function doubleToIEEE754String(v) {
          Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(!isInvalidJSONNumber(v), 'Invalid JSON number'); // MJL

          var ebits = 11,
              fbits = 52;
          var bias = (1 << ebits - 1) - 1;
          var s, e, f, ln, i; // Compute sign, exponent, fraction
          // Skip NaN / Infinity handling --MJL.

          if (v === 0) {
            e = 0;
            f = 0;
            s = 1 / v === -Infinity ? 1 : 0;
          } else {
            s = v < 0;
            v = Math.abs(v);

            if (v >= Math.pow(2, 1 - bias)) {
              // Normalized
              ln = Math.min(Math.floor(Math.log(v) / Math.LN2), bias);
              e = ln + bias;
              f = Math.round(v * Math.pow(2, fbits - ln) - Math.pow(2, fbits));
            } else {
              // Denormalized
              e = 0;
              f = Math.round(v / Math.pow(2, 1 - bias - fbits));
            }
          } // Pack sign, exponent, fraction


          var bits = [];

          for (i = fbits; i; i -= 1) {
            bits.push(f % 2 ? 1 : 0);
            f = Math.floor(f / 2);
          }

          for (i = ebits; i; i -= 1) {
            bits.push(e % 2 ? 1 : 0);
            e = Math.floor(e / 2);
          }

          bits.push(s ? 1 : 0);
          bits.reverse();
          var str = bits.join(''); // Return the data as a hex string. --MJL

          var hexByteString = '';

          for (i = 0; i < 64; i += 8) {
            var hexByte = parseInt(str.substr(i, 8), 2).toString(16);

            if (hexByte.length === 1) {
              hexByte = '0' + hexByte;
            }

            hexByteString = hexByteString + hexByte;
          }

          return hexByteString.toLowerCase();
        };
        /**
         * Used to detect if we're in a Chrome content script (which executes in an
         * isolated environment where long-polling doesn't work).
         */


        var isChromeExtensionContentScript = function isChromeExtensionContentScript() {
          return !!(typeof window === 'object' && window['chrome'] && window['chrome']['extension'] && !/^chrome/.test(window.location.href));
        };
        /**
         * Used to detect if we're in a Windows 8 Store app.
         */


        var isWindowsStoreApp = function isWindowsStoreApp() {
          // Check for the presence of a couple WinRT globals
          return typeof Windows === 'object' && typeof Windows.UI === 'object';
        };
        /**
         * Converts a server error code to a Javascript Error
         */


        function errorForServerCode(code, query) {
          var reason = 'Unknown Error';

          if (code === 'too_big') {
            reason = 'The data requested exceeds the maximum size ' + 'that can be accessed with a single request.';
          } else if (code === 'permission_denied') {
            reason = "Client doesn't have permission to access the desired data.";
          } else if (code === 'unavailable') {
            reason = 'The service is unavailable';
          }

          var error = new Error(code + ' at ' + query._path.toString() + ': ' + reason); // eslint-disable-next-line @typescript-eslint/no-explicit-any

          error.code = code.toUpperCase();
          return error;
        }
        /**
         * Used to test for integer-looking strings
         */


        var INTEGER_REGEXP_ = new RegExp('^-?(0*)\\d{1,10}$');
        /**
         * For use in keys, the minimum possible 32-bit integer.
         */

        var INTEGER_32_MIN = -2147483648;
        /**
         * For use in kyes, the maximum possible 32-bit integer.
         */

        var INTEGER_32_MAX = 2147483647;
        /**
         * If the string contains a 32-bit integer, return it.  Else return null.
         */

        var tryParseInt = function tryParseInt(str) {
          if (INTEGER_REGEXP_.test(str)) {
            var intVal = Number(str);

            if (intVal >= INTEGER_32_MIN && intVal <= INTEGER_32_MAX) {
              return intVal;
            }
          }

          return null;
        };
        /**
         * Helper to run some code but catch any exceptions and re-throw them later.
         * Useful for preventing user callbacks from breaking internal code.
         *
         * Re-throwing the exception from a setTimeout is a little evil, but it's very
         * convenient (we don't have to try to figure out when is a safe point to
         * re-throw it), and the behavior seems reasonable:
         *
         * * If you aren't pausing on exceptions, you get an error in the console with
         *   the correct stack trace.
         * * If you're pausing on all exceptions, the debugger will pause on your
         *   exception and then again when we rethrow it.
         * * If you're only pausing on uncaught exceptions, the debugger will only pause
         *   on us re-throwing it.
         *
         * @param fn - The code to guard.
         */


        var exceptionGuard = function exceptionGuard(fn) {
          try {
            fn();
          } catch (e) {
            // Re-throw exception when it's safe.
            setTimeout(function () {
              // It used to be that "throw e" would result in a good console error with
              // relevant context, but as of Chrome 39, you just get the firebase.js
              // file/line number where we re-throw it, which is useless. So we log
              // e.stack explicitly.
              var stack = e.stack || '';
              warn('Exception was thrown by user callback.', stack);
              throw e;
            }, Math.floor(0));
          }
        };
        /**
         * @returns {boolean} true if we think we're currently being crawled.
         */


        var beingCrawled = function beingCrawled() {
          var userAgent = typeof window === 'object' && window['navigator'] && window['navigator']['userAgent'] || ''; // For now we whitelist the most popular crawlers.  We should refine this to be the set of crawlers we
          // believe to support JavaScript/AJAX rendering.
          // NOTE: Google Webmaster Tools doesn't really belong, but their "This is how a visitor to your website
          // would have seen the page" is flaky if we don't treat it as a crawler.

          return userAgent.search(/googlebot|google webmaster tools|bingbot|yahoo! slurp|baiduspider|yandexbot|duckduckbot/i) >= 0;
        };
        /**
         * Same as setTimeout() except on Node.JS it will /not/ prevent the process from exiting.
         *
         * It is removed with clearTimeout() as normal.
         *
         * @param fn - Function to run.
         * @param time - Milliseconds to wait before running.
         * @returns The setTimeout() return value.
         */


        var setTimeoutNonBlocking = function setTimeoutNonBlocking(fn, time) {
          var timeout = setTimeout(fn, time); // eslint-disable-next-line @typescript-eslint/no-explicit-any

          if (typeof timeout === 'object' && timeout['unref']) {
            // eslint-disable-next-line @typescript-eslint/no-explicit-any
            timeout['unref']();
          }

          return timeout;
        };
        /**
         * @license
         * Copyright 2021 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * Abstraction around AppCheck's token fetching capabilities.
         */


        var AppCheckTokenProvider =
        /** @class */
        function () {
          function AppCheckTokenProvider(appName_, appCheckProvider) {
            var _this = this;

            this.appName_ = appName_;
            this.appCheckProvider = appCheckProvider;
            this.appCheck = appCheckProvider === null || appCheckProvider === void 0 ? void 0 : appCheckProvider.getImmediate({
              optional: true
            });

            if (!this.appCheck) {
              appCheckProvider === null || appCheckProvider === void 0 ? void 0 : appCheckProvider.get().then(function (appCheck) {
                return _this.appCheck = appCheck;
              });
            }
          }

          AppCheckTokenProvider.prototype.getToken = function (forceRefresh) {
            var _this = this;

            if (!this.appCheck) {
              return new Promise(function (resolve, reject) {
                // Support delayed initialization of FirebaseAppCheck. This allows our
                // customers to initialize the RTDB SDK before initializing Firebase
                // AppCheck and ensures that all requests are authenticated if a token
                // becomes available before the timoeout below expires.
                setTimeout(function () {
                  if (_this.appCheck) {
                    _this.getToken(forceRefresh).then(resolve, reject);
                  } else {
                    resolve(null);
                  }
                }, 0);
              });
            }

            return this.appCheck.getToken(forceRefresh);
          };

          AppCheckTokenProvider.prototype.addTokenChangeListener = function (listener) {
            var _a;

            (_a = this.appCheckProvider) === null || _a === void 0 ? void 0 : _a.get().then(function (appCheck) {
              return appCheck.addTokenListener(listener);
            });
          };

          AppCheckTokenProvider.prototype.notifyForInvalidToken = function () {
            warn("Provided AppCheck credentials for the app named \"" + this.appName_ + "\" " + 'are invalid. This usually indicates your app was not initialized correctly.');
          };

          return AppCheckTokenProvider;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * Abstraction around FirebaseApp's token fetching capabilities.
         */


        var FirebaseAuthTokenProvider =
        /** @class */
        function () {
          function FirebaseAuthTokenProvider(appName_, firebaseOptions_, authProvider_) {
            var _this = this;

            this.appName_ = appName_;
            this.firebaseOptions_ = firebaseOptions_;
            this.authProvider_ = authProvider_;
            this.auth_ = null;
            this.auth_ = authProvider_.getImmediate({
              optional: true
            });

            if (!this.auth_) {
              authProvider_.onInit(function (auth) {
                return _this.auth_ = auth;
              });
            }
          }

          FirebaseAuthTokenProvider.prototype.getToken = function (forceRefresh) {
            var _this = this;

            if (!this.auth_) {
              return new Promise(function (resolve, reject) {
                // Support delayed initialization of FirebaseAuth. This allows our
                // customers to initialize the RTDB SDK before initializing Firebase
                // Auth and ensures that all requests are authenticated if a token
                // becomes available before the timoeout below expires.
                setTimeout(function () {
                  if (_this.auth_) {
                    _this.getToken(forceRefresh).then(resolve, reject);
                  } else {
                    resolve(null);
                  }
                }, 0);
              });
            }

            return this.auth_.getToken(forceRefresh)["catch"](function (error) {
              // TODO: Need to figure out all the cases this is raised and whether
              // this makes sense.
              if (error && error.code === 'auth/token-not-initialized') {
                log('Got auth/token-not-initialized error.  Treating as null token.');
                return null;
              } else {
                return Promise.reject(error);
              }
            });
          };

          FirebaseAuthTokenProvider.prototype.addTokenChangeListener = function (listener) {
            // TODO: We might want to wrap the listener and call it with no args to
            // avoid a leaky abstraction, but that makes removing the listener harder.
            if (this.auth_) {
              this.auth_.addAuthTokenListener(listener);
            } else {
              this.authProvider_.get().then(function (auth) {
                return auth.addAuthTokenListener(listener);
              });
            }
          };

          FirebaseAuthTokenProvider.prototype.removeTokenChangeListener = function (listener) {
            this.authProvider_.get().then(function (auth) {
              return auth.removeAuthTokenListener(listener);
            });
          };

          FirebaseAuthTokenProvider.prototype.notifyForInvalidToken = function () {
            var errorMessage = 'Provided authentication credentials for the app named "' + this.appName_ + '" are invalid. This usually indicates your app was not ' + 'initialized correctly. ';

            if ('credential' in this.firebaseOptions_) {
              errorMessage += 'Make sure the "credential" property provided to initializeApp() ' + 'is authorized to access the specified "databaseURL" and is from the correct ' + 'project.';
            } else if ('serviceAccount' in this.firebaseOptions_) {
              errorMessage += 'Make sure the "serviceAccount" property provided to initializeApp() ' + 'is authorized to access the specified "databaseURL" and is from the correct ' + 'project.';
            } else {
              errorMessage += 'Make sure the "apiKey" and "databaseURL" properties provided to ' + 'initializeApp() match the values provided for your app at ' + 'https://console.firebase.google.com/.';
            }

            warn(errorMessage);
          };

          return FirebaseAuthTokenProvider;
        }();
        /* AuthTokenProvider that supplies a constant token. Used by Admin SDK or mockUserToken with emulators. */


        var EmulatorTokenProvider =
        /** @class */
        function () {
          function EmulatorTokenProvider(accessToken) {
            this.accessToken = accessToken;
          }

          EmulatorTokenProvider.prototype.getToken = function (forceRefresh) {
            return Promise.resolve({
              accessToken: this.accessToken
            });
          };

          EmulatorTokenProvider.prototype.addTokenChangeListener = function (listener) {
            // Invoke the listener immediately to match the behavior in Firebase Auth
            // (see packages/auth/src/auth.js#L1807)
            listener(this.accessToken);
          };

          EmulatorTokenProvider.prototype.removeTokenChangeListener = function (listener) {};

          EmulatorTokenProvider.prototype.notifyForInvalidToken = function () {};
          /** A string that is treated as an admin access token by the RTDB emulator. Used by Admin SDK. */


          EmulatorTokenProvider.OWNER = 'owner';
          return EmulatorTokenProvider;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var PROTOCOL_VERSION = '5';
        var VERSION_PARAM = 'v';
        var TRANSPORT_SESSION_PARAM = 's';
        var REFERER_PARAM = 'r';
        var FORGE_REF = 'f'; // Matches console.firebase.google.com, firebase-console-*.corp.google.com and
        // firebase.corp.google.com

        var FORGE_DOMAIN_RE = /(console\.firebase|firebase-console-\w+\.corp|firebase\.corp)\.google\.com/;
        var LAST_SESSION_PARAM = 'ls';
        var APPLICATION_ID_PARAM = 'p';
        var APP_CHECK_TOKEN_PARAM = 'ac';
        var WEBSOCKET = 'websocket';
        var LONG_POLLING = 'long_polling';
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * A class that holds metadata about a Repo object
         */

        var RepoInfo =
        /** @class */
        function () {
          /**
           * @param host - Hostname portion of the url for the repo
           * @param secure - Whether or not this repo is accessed over ssl
           * @param namespace - The namespace represented by the repo
           * @param webSocketOnly - Whether to prefer websockets over all other transports (used by Nest).
           * @param nodeAdmin - Whether this instance uses Admin SDK credentials
           * @param persistenceKey - Override the default session persistence storage key
           */
          function RepoInfo(host, secure, namespace, webSocketOnly, nodeAdmin, persistenceKey, includeNamespaceInQueryParams) {
            if (nodeAdmin === void 0) {
              nodeAdmin = false;
            }

            if (persistenceKey === void 0) {
              persistenceKey = '';
            }

            if (includeNamespaceInQueryParams === void 0) {
              includeNamespaceInQueryParams = false;
            }

            this.secure = secure;
            this.namespace = namespace;
            this.webSocketOnly = webSocketOnly;
            this.nodeAdmin = nodeAdmin;
            this.persistenceKey = persistenceKey;
            this.includeNamespaceInQueryParams = includeNamespaceInQueryParams;
            this._host = host.toLowerCase();
            this._domain = this._host.substr(this._host.indexOf('.') + 1);
            this.internalHost = PersistentStorage.get('host:' + host) || this._host;
          }

          RepoInfo.prototype.isCacheableHost = function () {
            return this.internalHost.substr(0, 2) === 's-';
          };

          RepoInfo.prototype.isCustomHost = function () {
            return this._domain !== 'firebaseio.com' && this._domain !== 'firebaseio-demo.com';
          };

          Object.defineProperty(RepoInfo.prototype, "host", {
            get: function get() {
              return this._host;
            },
            set: function set(newHost) {
              if (newHost !== this.internalHost) {
                this.internalHost = newHost;

                if (this.isCacheableHost()) {
                  PersistentStorage.set('host:' + this._host, this.internalHost);
                }
              }
            },
            enumerable: false,
            configurable: true
          });

          RepoInfo.prototype.toString = function () {
            var str = this.toURLString();

            if (this.persistenceKey) {
              str += '<' + this.persistenceKey + '>';
            }

            return str;
          };

          RepoInfo.prototype.toURLString = function () {
            var protocol = this.secure ? 'https://' : 'http://';
            var query = this.includeNamespaceInQueryParams ? "?ns=" + this.namespace : '';
            return "" + protocol + this.host + "/" + query;
          };

          return RepoInfo;
        }();

        function repoInfoNeedsQueryParam(repoInfo) {
          return repoInfo.host !== repoInfo.internalHost || repoInfo.isCustomHost() || repoInfo.includeNamespaceInQueryParams;
        }
        /**
         * Returns the websocket URL for this repo
         * @param repoInfo - RepoInfo object
         * @param type - of connection
         * @param params - list
         * @returns The URL for this repo
         */


        function repoInfoConnectionURL(repoInfo, type, params) {
          Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(typeof type === 'string', 'typeof type must == string');
          Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(typeof params === 'object', 'typeof params must == object');
          var connURL;

          if (type === WEBSOCKET) {
            connURL = (repoInfo.secure ? 'wss://' : 'ws://') + repoInfo.internalHost + '/.ws?';
          } else if (type === LONG_POLLING) {
            connURL = (repoInfo.secure ? 'https://' : 'http://') + repoInfo.internalHost + '/.lp?';
          } else {
            throw new Error('Unknown connection type: ' + type);
          }

          if (repoInfoNeedsQueryParam(repoInfo)) {
            params['ns'] = repoInfo.namespace;
          }

          var pairs = [];
          each(params, function (key, value) {
            pairs.push(key + '=' + value);
          });
          return connURL + pairs.join('&');
        }
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * Tracks a collection of stats.
         */


        var StatsCollection =
        /** @class */
        function () {
          function StatsCollection() {
            this.counters_ = {};
          }

          StatsCollection.prototype.incrementCounter = function (name, amount) {
            if (amount === void 0) {
              amount = 1;
            }

            if (!Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["contains"])(this.counters_, name)) {
              this.counters_[name] = 0;
            }

            this.counters_[name] += amount;
          };

          StatsCollection.prototype.get = function () {
            return Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["deepCopy"])(this.counters_);
          };

          return StatsCollection;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var collections = {};
        var reporters = {};

        function statsManagerGetCollection(repoInfo) {
          var hashString = repoInfo.toString();

          if (!collections[hashString]) {
            collections[hashString] = new StatsCollection();
          }

          return collections[hashString];
        }

        function statsManagerGetOrCreateReporter(repoInfo, creatorFunction) {
          var hashString = repoInfo.toString();

          if (!reporters[hashString]) {
            reporters[hashString] = creatorFunction();
          }

          return reporters[hashString];
        }
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * This class ensures the packets from the server arrive in order
         * This class takes data from the server and ensures it gets passed into the callbacks in order.
         */


        var PacketReceiver =
        /** @class */
        function () {
          /**
           * @param onMessage_
           */
          function PacketReceiver(onMessage_) {
            this.onMessage_ = onMessage_;
            this.pendingResponses = [];
            this.currentResponseNum = 0;
            this.closeAfterResponse = -1;
            this.onClose = null;
          }

          PacketReceiver.prototype.closeAfter = function (responseNum, callback) {
            this.closeAfterResponse = responseNum;
            this.onClose = callback;

            if (this.closeAfterResponse < this.currentResponseNum) {
              this.onClose();
              this.onClose = null;
            }
          };
          /**
           * Each message from the server comes with a response number, and an array of data. The responseNumber
           * allows us to ensure that we process them in the right order, since we can't be guaranteed that all
           * browsers will respond in the same order as the requests we sent
           */


          PacketReceiver.prototype.handleResponse = function (requestNum, data) {
            var _this = this;

            this.pendingResponses[requestNum] = data;

            var _loop_1 = function _loop_1() {
              var toProcess = this_1.pendingResponses[this_1.currentResponseNum];
              delete this_1.pendingResponses[this_1.currentResponseNum];

              var _loop_2 = function _loop_2(i) {
                if (toProcess[i]) {
                  exceptionGuard(function () {
                    _this.onMessage_(toProcess[i]);
                  });
                }
              };

              for (var i = 0; i < toProcess.length; ++i) {
                _loop_2(i);
              }

              if (this_1.currentResponseNum === this_1.closeAfterResponse) {
                if (this_1.onClose) {
                  this_1.onClose();
                  this_1.onClose = null;
                }

                return "break";
              }

              this_1.currentResponseNum++;
            };

            var this_1 = this;

            while (this.pendingResponses[this.currentResponseNum]) {
              var state_1 = _loop_1();

              if (state_1 === "break") break;
            }
          };

          return PacketReceiver;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */
        // URL query parameters associated with longpolling


        var FIREBASE_LONGPOLL_START_PARAM = 'start';
        var FIREBASE_LONGPOLL_CLOSE_COMMAND = 'close';
        var FIREBASE_LONGPOLL_COMMAND_CB_NAME = 'pLPCommand';
        var FIREBASE_LONGPOLL_DATA_CB_NAME = 'pRTLPCB';
        var FIREBASE_LONGPOLL_ID_PARAM = 'id';
        var FIREBASE_LONGPOLL_PW_PARAM = 'pw';
        var FIREBASE_LONGPOLL_SERIAL_PARAM = 'ser';
        var FIREBASE_LONGPOLL_CALLBACK_ID_PARAM = 'cb';
        var FIREBASE_LONGPOLL_SEGMENT_NUM_PARAM = 'seg';
        var FIREBASE_LONGPOLL_SEGMENTS_IN_PACKET = 'ts';
        var FIREBASE_LONGPOLL_DATA_PARAM = 'd';
        var FIREBASE_LONGPOLL_DISCONN_FRAME_REQUEST_PARAM = 'dframe'; //Data size constants.
        //TODO: Perf: the maximum length actually differs from browser to browser.
        // We should check what browser we're on and set accordingly.

        var MAX_URL_DATA_SIZE = 1870;
        var SEG_HEADER_SIZE = 30; //ie: &seg=8299234&ts=982389123&d=

        var MAX_PAYLOAD_SIZE = MAX_URL_DATA_SIZE - SEG_HEADER_SIZE;
        /**
         * Keepalive period
         * send a fresh request at minimum every 25 seconds. Opera has a maximum request
         * length of 30 seconds that we can't exceed.
         */

        var KEEPALIVE_REQUEST_INTERVAL = 25000;
        /**
         * How long to wait before aborting a long-polling connection attempt.
         */

        var LP_CONNECT_TIMEOUT = 30000;
        /**
         * This class manages a single long-polling connection.
         */

        var BrowserPollConnection =
        /** @class */
        function () {
          /**
           * @param connId An identifier for this connection, used for logging
           * @param repoInfo The info for the endpoint to send data to.
           * @param applicationId The Firebase App ID for this project.
           * @param appCheckToken The AppCheck token for this client.
           * @param authToken The AuthToken to use for this connection.
           * @param transportSessionId Optional transportSessionid if we are
           * reconnecting for an existing transport session
           * @param lastSessionId Optional lastSessionId if the PersistentConnection has
           * already created a connection previously
           */
          function BrowserPollConnection(connId, repoInfo, applicationId, appCheckToken, authToken, transportSessionId, lastSessionId) {
            var _this = this;

            this.connId = connId;
            this.repoInfo = repoInfo;
            this.applicationId = applicationId;
            this.appCheckToken = appCheckToken;
            this.authToken = authToken;
            this.transportSessionId = transportSessionId;
            this.lastSessionId = lastSessionId;
            this.bytesSent = 0;
            this.bytesReceived = 0;
            this.everConnected_ = false;
            this.log_ = logWrapper(connId);
            this.stats_ = statsManagerGetCollection(repoInfo);

            this.urlFn = function (params) {
              // Always add the token if we have one.
              if (_this.appCheckToken) {
                params[APP_CHECK_TOKEN_PARAM] = _this.appCheckToken;
              }

              return repoInfoConnectionURL(repoInfo, LONG_POLLING, params);
            };
          }
          /**
           * @param onMessage - Callback when messages arrive
           * @param onDisconnect - Callback with connection lost.
           */


          BrowserPollConnection.prototype.open = function (onMessage, onDisconnect) {
            var _this = this;

            this.curSegmentNum = 0;
            this.onDisconnect_ = onDisconnect;
            this.myPacketOrderer = new PacketReceiver(onMessage);
            this.isClosed_ = false;
            this.connectTimeoutTimer_ = setTimeout(function () {
              _this.log_('Timed out trying to connect.'); // Make sure we clear the host cache


              _this.onClosed_();

              _this.connectTimeoutTimer_ = null; // eslint-disable-next-line @typescript-eslint/no-explicit-any
            }, Math.floor(LP_CONNECT_TIMEOUT)); // Ensure we delay the creation of the iframe until the DOM is loaded.

            executeWhenDOMReady(function () {
              if (_this.isClosed_) {
                return;
              } //Set up a callback that gets triggered once a connection is set up.


              _this.scriptTagHolder = new FirebaseIFrameScriptHolder(function () {
                var args = [];

                for (var _i = 0; _i < arguments.length; _i++) {
                  args[_i] = arguments[_i];
                }

                var _a = Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__read"])(args, 5),
                    command = _a[0],
                    arg1 = _a[1],
                    arg2 = _a[2],
                    arg3 = _a[3],
                    arg4 = _a[4];

                _this.incrementIncomingBytes_(args);

                if (!_this.scriptTagHolder) {
                  return; // we closed the connection.
                }

                if (_this.connectTimeoutTimer_) {
                  clearTimeout(_this.connectTimeoutTimer_);
                  _this.connectTimeoutTimer_ = null;
                }

                _this.everConnected_ = true;

                if (command === FIREBASE_LONGPOLL_START_PARAM) {
                  _this.id = arg1;
                  _this.password = arg2;
                } else if (command === FIREBASE_LONGPOLL_CLOSE_COMMAND) {
                  // Don't clear the host cache. We got a response from the server, so we know it's reachable
                  if (arg1) {
                    // We aren't expecting any more data (other than what the server's already in the process of sending us
                    // through our already open polls), so don't send any more.
                    _this.scriptTagHolder.sendNewPolls = false; // arg1 in this case is the last response number sent by the server. We should try to receive
                    // all of the responses up to this one before closing

                    _this.myPacketOrderer.closeAfter(arg1, function () {
                      _this.onClosed_();
                    });
                  } else {
                    _this.onClosed_();
                  }
                } else {
                  throw new Error('Unrecognized command received: ' + command);
                }
              }, function () {
                var args = [];

                for (var _i = 0; _i < arguments.length; _i++) {
                  args[_i] = arguments[_i];
                }

                var _a = Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__read"])(args, 2),
                    pN = _a[0],
                    data = _a[1];

                _this.incrementIncomingBytes_(args);

                _this.myPacketOrderer.handleResponse(pN, data);
              }, function () {
                _this.onClosed_();
              }, _this.urlFn); //Send the initial request to connect. The serial number is simply to keep the browser from pulling previous results
              //from cache.

              var urlParams = {};
              urlParams[FIREBASE_LONGPOLL_START_PARAM] = 't';
              urlParams[FIREBASE_LONGPOLL_SERIAL_PARAM] = Math.floor(Math.random() * 100000000);

              if (_this.scriptTagHolder.uniqueCallbackIdentifier) {
                urlParams[FIREBASE_LONGPOLL_CALLBACK_ID_PARAM] = _this.scriptTagHolder.uniqueCallbackIdentifier;
              }

              urlParams[VERSION_PARAM] = PROTOCOL_VERSION;

              if (_this.transportSessionId) {
                urlParams[TRANSPORT_SESSION_PARAM] = _this.transportSessionId;
              }

              if (_this.lastSessionId) {
                urlParams[LAST_SESSION_PARAM] = _this.lastSessionId;
              }

              if (_this.applicationId) {
                urlParams[APPLICATION_ID_PARAM] = _this.applicationId;
              }

              if (_this.appCheckToken) {
                urlParams[APP_CHECK_TOKEN_PARAM] = _this.appCheckToken;
              }

              if (typeof location !== 'undefined' && location.hostname && FORGE_DOMAIN_RE.test(location.hostname)) {
                urlParams[REFERER_PARAM] = FORGE_REF;
              }

              var connectURL = _this.urlFn(urlParams);

              _this.log_('Connecting via long-poll to ' + connectURL);

              _this.scriptTagHolder.addTag(connectURL, function () {
                /* do nothing */
              });
            });
          };
          /**
           * Call this when a handshake has completed successfully and we want to consider the connection established
           */


          BrowserPollConnection.prototype.start = function () {
            this.scriptTagHolder.startLongPoll(this.id, this.password);
            this.addDisconnectPingFrame(this.id, this.password);
          };
          /**
           * Forces long polling to be considered as a potential transport
           */


          BrowserPollConnection.forceAllow = function () {
            BrowserPollConnection.forceAllow_ = true;
          };
          /**
           * Forces longpolling to not be considered as a potential transport
           */


          BrowserPollConnection.forceDisallow = function () {
            BrowserPollConnection.forceDisallow_ = true;
          }; // Static method, use string literal so it can be accessed in a generic way


          BrowserPollConnection.isAvailable = function () {
            if (Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["isNodeSdk"])()) {
              return false;
            } else if (BrowserPollConnection.forceAllow_) {
              return true;
            } else {
              // NOTE: In React-Native there's normally no 'document', but if you debug a React-Native app in
              // the Chrome debugger, 'document' is defined, but document.createElement is null (2015/06/08).
              return !BrowserPollConnection.forceDisallow_ && typeof document !== 'undefined' && document.createElement != null && !isChromeExtensionContentScript() && !isWindowsStoreApp();
            }
          };
          /**
           * No-op for polling
           */


          BrowserPollConnection.prototype.markConnectionHealthy = function () {};
          /**
           * Stops polling and cleans up the iframe
           */


          BrowserPollConnection.prototype.shutdown_ = function () {
            this.isClosed_ = true;

            if (this.scriptTagHolder) {
              this.scriptTagHolder.close();
              this.scriptTagHolder = null;
            } //remove the disconnect frame, which will trigger an XHR call to the server to tell it we're leaving.


            if (this.myDisconnFrame) {
              document.body.removeChild(this.myDisconnFrame);
              this.myDisconnFrame = null;
            }

            if (this.connectTimeoutTimer_) {
              clearTimeout(this.connectTimeoutTimer_);
              this.connectTimeoutTimer_ = null;
            }
          };
          /**
           * Triggered when this transport is closed
           */


          BrowserPollConnection.prototype.onClosed_ = function () {
            if (!this.isClosed_) {
              this.log_('Longpoll is closing itself');
              this.shutdown_();

              if (this.onDisconnect_) {
                this.onDisconnect_(this.everConnected_);
                this.onDisconnect_ = null;
              }
            }
          };
          /**
           * External-facing close handler. RealTime has requested we shut down. Kill our connection and tell the server
           * that we've left.
           */


          BrowserPollConnection.prototype.close = function () {
            if (!this.isClosed_) {
              this.log_('Longpoll is being closed.');
              this.shutdown_();
            }
          };
          /**
           * Send the JSON object down to the server. It will need to be stringified, base64 encoded, and then
           * broken into chunks (since URLs have a small maximum length).
           * @param data - The JSON data to transmit.
           */


          BrowserPollConnection.prototype.send = function (data) {
            var dataStr = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringify"])(data);
            this.bytesSent += dataStr.length;
            this.stats_.incrementCounter('bytes_sent', dataStr.length); //first, lets get the base64-encoded data

            var base64data = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["base64Encode"])(dataStr); //We can only fit a certain amount in each URL, so we need to split this request
            //up into multiple pieces if it doesn't fit in one request.

            var dataSegs = splitStringBySize(base64data, MAX_PAYLOAD_SIZE); //Enqueue each segment for transmission. We assign each chunk a sequential ID and a total number
            //of segments so that we can reassemble the packet on the server.

            for (var i = 0; i < dataSegs.length; i++) {
              this.scriptTagHolder.enqueueSegment(this.curSegmentNum, dataSegs.length, dataSegs[i]);
              this.curSegmentNum++;
            }
          };
          /**
           * This is how we notify the server that we're leaving.
           * We aren't able to send requests with DHTML on a window close event, but we can
           * trigger XHR requests in some browsers (everything but Opera basically).
           */


          BrowserPollConnection.prototype.addDisconnectPingFrame = function (id, pw) {
            if (Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["isNodeSdk"])()) {
              return;
            }

            this.myDisconnFrame = document.createElement('iframe');
            var urlParams = {};
            urlParams[FIREBASE_LONGPOLL_DISCONN_FRAME_REQUEST_PARAM] = 't';
            urlParams[FIREBASE_LONGPOLL_ID_PARAM] = id;
            urlParams[FIREBASE_LONGPOLL_PW_PARAM] = pw;
            this.myDisconnFrame.src = this.urlFn(urlParams);
            this.myDisconnFrame.style.display = 'none';
            document.body.appendChild(this.myDisconnFrame);
          };
          /**
           * Used to track the bytes received by this client
           */


          BrowserPollConnection.prototype.incrementIncomingBytes_ = function (args) {
            // TODO: This is an annoying perf hit just to track the number of incoming bytes.  Maybe it should be opt-in.
            var bytesReceived = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringify"])(args).length;
            this.bytesReceived += bytesReceived;
            this.stats_.incrementCounter('bytes_received', bytesReceived);
          };

          return BrowserPollConnection;
        }();
        /*********************************************************************************************
         * A wrapper around an iframe that is used as a long-polling script holder.
         *********************************************************************************************/


        var FirebaseIFrameScriptHolder =
        /** @class */
        function () {
          /**
           * @param commandCB - The callback to be called when control commands are recevied from the server.
           * @param onMessageCB - The callback to be triggered when responses arrive from the server.
           * @param onDisconnect - The callback to be triggered when this tag holder is closed
           * @param urlFn - A function that provides the URL of the endpoint to send data to.
           */
          function FirebaseIFrameScriptHolder(commandCB, onMessageCB, onDisconnect, urlFn) {
            this.onDisconnect = onDisconnect;
            this.urlFn = urlFn; //We maintain a count of all of the outstanding requests, because if we have too many active at once it can cause
            //problems in some browsers.

            this.outstandingRequests = new Set(); //A queue of the pending segments waiting for transmission to the server.

            this.pendingSegs = []; //A serial number. We use this for two things:
            // 1) A way to ensure the browser doesn't cache responses to polls
            // 2) A way to make the server aware when long-polls arrive in a different order than we started them. The
            //    server needs to release both polls in this case or it will cause problems in Opera since Opera can only execute
            //    JSONP code in the order it was added to the iframe.

            this.currentSerial = Math.floor(Math.random() * 100000000); // This gets set to false when we're "closing down" the connection (e.g. we're switching transports but there's still
            // incoming data from the server that we're waiting for).

            this.sendNewPolls = true;

            if (!Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["isNodeSdk"])()) {
              //Each script holder registers a couple of uniquely named callbacks with the window. These are called from the
              //iframes where we put the long-polling script tags. We have two callbacks:
              //   1) Command Callback - Triggered for control issues, like starting a connection.
              //   2) Message Callback - Triggered when new data arrives.
              this.uniqueCallbackIdentifier = LUIDGenerator();
              window[FIREBASE_LONGPOLL_COMMAND_CB_NAME + this.uniqueCallbackIdentifier] = commandCB;
              window[FIREBASE_LONGPOLL_DATA_CB_NAME + this.uniqueCallbackIdentifier] = onMessageCB; //Create an iframe for us to add script tags to.

              this.myIFrame = FirebaseIFrameScriptHolder.createIFrame_(); // Set the iframe's contents.

              var script = ''; // if we set a javascript url, it's IE and we need to set the document domain. The javascript url is sufficient
              // for ie9, but ie8 needs to do it again in the document itself.

              if (this.myIFrame.src && this.myIFrame.src.substr(0, 'javascript:'.length) === 'javascript:') {
                var currentDomain = document.domain;
                script = '<script>document.domain="' + currentDomain + '";</script>';
              }

              var iframeContents = '<html><body>' + script + '</body></html>';

              try {
                this.myIFrame.doc.open();
                this.myIFrame.doc.write(iframeContents);
                this.myIFrame.doc.close();
              } catch (e) {
                log('frame writing exception');

                if (e.stack) {
                  log(e.stack);
                }

                log(e);
              }
            } else {
              this.commandCB = commandCB;
              this.onMessageCB = onMessageCB;
            }
          }
          /**
           * Each browser has its own funny way to handle iframes. Here we mush them all together into one object that I can
           * actually use.
           */


          FirebaseIFrameScriptHolder.createIFrame_ = function () {
            var iframe = document.createElement('iframe');
            iframe.style.display = 'none'; // This is necessary in order to initialize the document inside the iframe

            if (document.body) {
              document.body.appendChild(iframe);

              try {
                // If document.domain has been modified in IE, this will throw an error, and we need to set the
                // domain of the iframe's document manually. We can do this via a javascript: url as the src attribute
                // Also note that we must do this *after* the iframe has been appended to the page. Otherwise it doesn't work.
                var a = iframe.contentWindow.document;

                if (!a) {
                  // Apologies for the log-spam, I need to do something to keep closure from optimizing out the assignment above.
                  log('No IE domain setting required');
                }
              } catch (e) {
                var domain = document.domain;
                iframe.src = "javascript:void((function(){document.open();document.domain='" + domain + "';document.close();})())";
              }
            } else {
              // LongPollConnection attempts to delay initialization until the document is ready, so hopefully this
              // never gets hit.
              throw 'Document body has not initialized. Wait to initialize Firebase until after the document is ready.';
            } // Get the document of the iframe in a browser-specific way.


            if (iframe.contentDocument) {
              iframe.doc = iframe.contentDocument; // Firefox, Opera, Safari
            } else if (iframe.contentWindow) {
              iframe.doc = iframe.contentWindow.document; // Internet Explorer
              // eslint-disable-next-line @typescript-eslint/no-explicit-any
            } else if (iframe.document) {
              // eslint-disable-next-line @typescript-eslint/no-explicit-any
              iframe.doc = iframe.document; //others?
            }

            return iframe;
          };
          /**
           * Cancel all outstanding queries and remove the frame.
           */


          FirebaseIFrameScriptHolder.prototype.close = function () {
            var _this = this; //Mark this iframe as dead, so no new requests are sent.


            this.alive = false;

            if (this.myIFrame) {
              //We have to actually remove all of the html inside this iframe before removing it from the
              //window, or IE will continue loading and executing the script tags we've already added, which
              //can lead to some errors being thrown. Setting innerHTML seems to be the easiest way to do this.
              this.myIFrame.doc.body.innerHTML = '';
              setTimeout(function () {
                if (_this.myIFrame !== null) {
                  document.body.removeChild(_this.myIFrame);
                  _this.myIFrame = null;
                }
              }, Math.floor(0));
            } // Protect from being called recursively.


            var onDisconnect = this.onDisconnect;

            if (onDisconnect) {
              this.onDisconnect = null;
              onDisconnect();
            }
          };
          /**
           * Actually start the long-polling session by adding the first script tag(s) to the iframe.
           * @param id - The ID of this connection
           * @param pw - The password for this connection
           */


          FirebaseIFrameScriptHolder.prototype.startLongPoll = function (id, pw) {
            this.myID = id;
            this.myPW = pw;
            this.alive = true; //send the initial request. If there are requests queued, make sure that we transmit as many as we are currently able to.

            while (this.newRequest_()) {}
          };
          /**
           * This is called any time someone might want a script tag to be added. It adds a script tag when there aren't
           * too many outstanding requests and we are still alive.
           *
           * If there are outstanding packet segments to send, it sends one. If there aren't, it sends a long-poll anyways if
           * needed.
           */


          FirebaseIFrameScriptHolder.prototype.newRequest_ = function () {
            // We keep one outstanding request open all the time to receive data, but if we need to send data
            // (pendingSegs.length > 0) then we create a new request to send the data.  The server will automatically
            // close the old request.
            if (this.alive && this.sendNewPolls && this.outstandingRequests.size < (this.pendingSegs.length > 0 ? 2 : 1)) {
              //construct our url
              this.currentSerial++;
              var urlParams = {};
              urlParams[FIREBASE_LONGPOLL_ID_PARAM] = this.myID;
              urlParams[FIREBASE_LONGPOLL_PW_PARAM] = this.myPW;
              urlParams[FIREBASE_LONGPOLL_SERIAL_PARAM] = this.currentSerial;
              var theURL = this.urlFn(urlParams); //Now add as much data as we can.

              var curDataString = '';
              var i = 0;

              while (this.pendingSegs.length > 0) {
                //first, lets see if the next segment will fit.
                var nextSeg = this.pendingSegs[0];

                if (nextSeg.d.length + SEG_HEADER_SIZE + curDataString.length <= MAX_URL_DATA_SIZE) {
                  //great, the segment will fit. Lets append it.
                  var theSeg = this.pendingSegs.shift();
                  curDataString = curDataString + '&' + FIREBASE_LONGPOLL_SEGMENT_NUM_PARAM + i + '=' + theSeg.seg + '&' + FIREBASE_LONGPOLL_SEGMENTS_IN_PACKET + i + '=' + theSeg.ts + '&' + FIREBASE_LONGPOLL_DATA_PARAM + i + '=' + theSeg.d;
                  i++;
                } else {
                  break;
                }
              }

              theURL = theURL + curDataString;
              this.addLongPollTag_(theURL, this.currentSerial);
              return true;
            } else {
              return false;
            }
          };
          /**
           * Queue a packet for transmission to the server.
           * @param segnum - A sequential id for this packet segment used for reassembly
           * @param totalsegs - The total number of segments in this packet
           * @param data - The data for this segment.
           */


          FirebaseIFrameScriptHolder.prototype.enqueueSegment = function (segnum, totalsegs, data) {
            //add this to the queue of segments to send.
            this.pendingSegs.push({
              seg: segnum,
              ts: totalsegs,
              d: data
            }); //send the data immediately if there isn't already data being transmitted, unless
            //startLongPoll hasn't been called yet.

            if (this.alive) {
              this.newRequest_();
            }
          };
          /**
           * Add a script tag for a regular long-poll request.
           * @param url - The URL of the script tag.
           * @param serial - The serial number of the request.
           */


          FirebaseIFrameScriptHolder.prototype.addLongPollTag_ = function (url, serial) {
            var _this = this; //remember that we sent this request.


            this.outstandingRequests.add(serial);

            var doNewRequest = function doNewRequest() {
              _this.outstandingRequests["delete"](serial);

              _this.newRequest_();
            }; // If this request doesn't return on its own accord (by the server sending us some data), we'll
            // create a new one after the KEEPALIVE interval to make sure we always keep a fresh request open.


            var keepaliveTimeout = setTimeout(doNewRequest, Math.floor(KEEPALIVE_REQUEST_INTERVAL));

            var readyStateCB = function readyStateCB() {
              // Request completed.  Cancel the keepalive.
              clearTimeout(keepaliveTimeout); // Trigger a new request so we can continue receiving data.

              doNewRequest();
            };

            this.addTag(url, readyStateCB);
          };
          /**
           * Add an arbitrary script tag to the iframe.
           * @param url - The URL for the script tag source.
           * @param loadCB - A callback to be triggered once the script has loaded.
           */


          FirebaseIFrameScriptHolder.prototype.addTag = function (url, loadCB) {
            var _this = this;

            if (Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["isNodeSdk"])()) {
              // eslint-disable-next-line @typescript-eslint/no-explicit-any
              this.doNodeLongPoll(url, loadCB);
            } else {
              setTimeout(function () {
                try {
                  // if we're already closed, don't add this poll
                  if (!_this.sendNewPolls) {
                    return;
                  }

                  var newScript_1 = _this.myIFrame.doc.createElement('script');

                  newScript_1.type = 'text/javascript';
                  newScript_1.async = true;
                  newScript_1.src = url; // eslint-disable-next-line @typescript-eslint/no-explicit-any

                  newScript_1.onload = newScript_1.onreadystatechange = function () {
                    // eslint-disable-next-line @typescript-eslint/no-explicit-any
                    var rstate = newScript_1.readyState;

                    if (!rstate || rstate === 'loaded' || rstate === 'complete') {
                      // eslint-disable-next-line @typescript-eslint/no-explicit-any
                      newScript_1.onload = newScript_1.onreadystatechange = null;

                      if (newScript_1.parentNode) {
                        newScript_1.parentNode.removeChild(newScript_1);
                      }

                      loadCB();
                    }
                  };

                  newScript_1.onerror = function () {
                    log('Long-poll script failed to load: ' + url);
                    _this.sendNewPolls = false;

                    _this.close();
                  };

                  _this.myIFrame.doc.body.appendChild(newScript_1);
                } catch (e) {// TODO: we should make this error visible somehow
                }
              }, Math.floor(1));
            }
          };

          return FirebaseIFrameScriptHolder;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var WEBSOCKET_MAX_FRAME_SIZE = 16384;
        var WEBSOCKET_KEEPALIVE_INTERVAL = 45000;
        var WebSocketImpl = null;

        if (typeof MozWebSocket !== 'undefined') {
          WebSocketImpl = MozWebSocket;
        } else if (typeof WebSocket !== 'undefined') {
          WebSocketImpl = WebSocket;
        }
        /**
         * Create a new websocket connection with the given callbacks.
         */


        var WebSocketConnection =
        /** @class */
        function () {
          /**
           * @param connId identifier for this transport
           * @param repoInfo The info for the websocket endpoint.
           * @param applicationId The Firebase App ID for this project.
           * @param appCheckToken The App Check Token for this client.
           * @param authToken The Auth Token for this client.
           * @param transportSessionId Optional transportSessionId if this is connecting
           * to an existing transport session
           * @param lastSessionId Optional lastSessionId if there was a previous
           * connection
           */
          function WebSocketConnection(connId, repoInfo, applicationId, appCheckToken, authToken, transportSessionId, lastSessionId) {
            this.connId = connId;
            this.applicationId = applicationId;
            this.appCheckToken = appCheckToken;
            this.authToken = authToken;
            this.keepaliveTimer = null;
            this.frames = null;
            this.totalFrames = 0;
            this.bytesSent = 0;
            this.bytesReceived = 0;
            this.log_ = logWrapper(this.connId);
            this.stats_ = statsManagerGetCollection(repoInfo);
            this.connURL = WebSocketConnection.connectionURL_(repoInfo, transportSessionId, lastSessionId, appCheckToken);
            this.nodeAdmin = repoInfo.nodeAdmin;
          }
          /**
           * @param repoInfo - The info for the websocket endpoint.
           * @param transportSessionId - Optional transportSessionId if this is connecting to an existing transport
           *                                         session
           * @param lastSessionId - Optional lastSessionId if there was a previous connection
           * @returns connection url
           */


          WebSocketConnection.connectionURL_ = function (repoInfo, transportSessionId, lastSessionId, appCheckToken) {
            var urlParams = {};
            urlParams[VERSION_PARAM] = PROTOCOL_VERSION;

            if (!Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["isNodeSdk"])() && typeof location !== 'undefined' && location.hostname && FORGE_DOMAIN_RE.test(location.hostname)) {
              urlParams[REFERER_PARAM] = FORGE_REF;
            }

            if (transportSessionId) {
              urlParams[TRANSPORT_SESSION_PARAM] = transportSessionId;
            }

            if (lastSessionId) {
              urlParams[LAST_SESSION_PARAM] = lastSessionId;
            }

            if (appCheckToken) {
              urlParams[APP_CHECK_TOKEN_PARAM] = appCheckToken;
            }

            return repoInfoConnectionURL(repoInfo, WEBSOCKET, urlParams);
          };
          /**
           * @param onMessage - Callback when messages arrive
           * @param onDisconnect - Callback with connection lost.
           */


          WebSocketConnection.prototype.open = function (onMessage, onDisconnect) {
            var _this = this;

            this.onDisconnect = onDisconnect;
            this.onMessage = onMessage;
            this.log_('Websocket connecting to ' + this.connURL);
            this.everConnected_ = false; // Assume failure until proven otherwise.

            PersistentStorage.set('previous_websocket_failure', true);

            try {
              if (Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["isNodeSdk"])()) {
                var device = this.nodeAdmin ? 'AdminNode' : 'Node'; // UA Format: Firebase/<wire_protocol>/<sdk_version>/<platform>/<device>

                var options = {
                  headers: {
                    'User-Agent': "Firebase/" + PROTOCOL_VERSION + "/" + SDK_VERSION + "/" + process.platform + "/" + device,
                    'X-Firebase-GMPID': this.applicationId || ''
                  }
                }; // If using Node with admin creds, AppCheck-related checks are unnecessary.
                // It will send the authorization token.

                if (this.nodeAdmin) {
                  options.headers['Authorization'] = this.authToken || '';
                } else {
                  // If using Node without admin creds (which includes all uses of the
                  // client-side Node SDK), it will send an AppCheck token if available.
                  // Any other auth credentials will eventually be sent after the connection
                  // is established, but aren't needed here as they don't effect the initial
                  // request to establish a connection.
                  options.headers['X-Firebase-AppCheck'] = this.appCheckToken || '';
                } // Plumb appropriate http_proxy environment variable into faye-websocket if it exists.


                var env = process['env'];
                var proxy = this.connURL.indexOf('wss://') === 0 ? env['HTTPS_PROXY'] || env['https_proxy'] : env['HTTP_PROXY'] || env['http_proxy'];

                if (proxy) {
                  options['proxy'] = {
                    origin: proxy
                  };
                }

                this.mySock = new WebSocketImpl(this.connURL, [], options);
              } else {
                var options = {
                  headers: {
                    'X-Firebase-GMPID': this.applicationId || '',
                    'X-Firebase-AppCheck': this.appCheckToken || ''
                  }
                };
                this.mySock = new WebSocketImpl(this.connURL, [], options);
              }
            } catch (e) {
              this.log_('Error instantiating WebSocket.');
              var error = e.message || e.data;

              if (error) {
                this.log_(error);
              }

              this.onClosed_();
              return;
            }

            this.mySock.onopen = function () {
              _this.log_('Websocket connected.');

              _this.everConnected_ = true;
            };

            this.mySock.onclose = function () {
              _this.log_('Websocket connection was disconnected.');

              _this.mySock = null;

              _this.onClosed_();
            };

            this.mySock.onmessage = function (m) {
              _this.handleIncomingFrame(m);
            };

            this.mySock.onerror = function (e) {
              _this.log_('WebSocket error.  Closing connection.'); // eslint-disable-next-line @typescript-eslint/no-explicit-any


              var error = e.message || e.data;

              if (error) {
                _this.log_(error);
              }

              _this.onClosed_();
            };
          };
          /**
           * No-op for websockets, we don't need to do anything once the connection is confirmed as open
           */


          WebSocketConnection.prototype.start = function () {};

          WebSocketConnection.forceDisallow = function () {
            WebSocketConnection.forceDisallow_ = true;
          };

          WebSocketConnection.isAvailable = function () {
            var isOldAndroid = false;

            if (typeof navigator !== 'undefined' && navigator.userAgent) {
              var oldAndroidRegex = /Android ([0-9]{0,}\.[0-9]{0,})/;
              var oldAndroidMatch = navigator.userAgent.match(oldAndroidRegex);

              if (oldAndroidMatch && oldAndroidMatch.length > 1) {
                if (parseFloat(oldAndroidMatch[1]) < 4.4) {
                  isOldAndroid = true;
                }
              }
            }

            return !isOldAndroid && WebSocketImpl !== null && !WebSocketConnection.forceDisallow_;
          };
          /**
           * Returns true if we previously failed to connect with this transport.
           */


          WebSocketConnection.previouslyFailed = function () {
            // If our persistent storage is actually only in-memory storage,
            // we default to assuming that it previously failed to be safe.
            return PersistentStorage.isInMemoryStorage || PersistentStorage.get('previous_websocket_failure') === true;
          };

          WebSocketConnection.prototype.markConnectionHealthy = function () {
            PersistentStorage.remove('previous_websocket_failure');
          };

          WebSocketConnection.prototype.appendFrame_ = function (data) {
            this.frames.push(data);

            if (this.frames.length === this.totalFrames) {
              var fullMess = this.frames.join('');
              this.frames = null;
              var jsonMess = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["jsonEval"])(fullMess); //handle the message

              this.onMessage(jsonMess);
            }
          };
          /**
           * @param frameCount - The number of frames we are expecting from the server
           */


          WebSocketConnection.prototype.handleNewFrameCount_ = function (frameCount) {
            this.totalFrames = frameCount;
            this.frames = [];
          };
          /**
           * Attempts to parse a frame count out of some text. If it can't, assumes a value of 1
           * @returns Any remaining data to be process, or null if there is none
           */


          WebSocketConnection.prototype.extractFrameCount_ = function (data) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(this.frames === null, 'We already have a frame buffer'); // TODO: The server is only supposed to send up to 9999 frames (i.e. length <= 4), but that isn't being enforced
            // currently.  So allowing larger frame counts (length <= 6).  See https://app.asana.com/0/search/8688598998380/8237608042508

            if (data.length <= 6) {
              var frameCount = Number(data);

              if (!isNaN(frameCount)) {
                this.handleNewFrameCount_(frameCount);
                return null;
              }
            }

            this.handleNewFrameCount_(1);
            return data;
          };
          /**
           * Process a websocket frame that has arrived from the server.
           * @param mess - The frame data
           */


          WebSocketConnection.prototype.handleIncomingFrame = function (mess) {
            if (this.mySock === null) {
              return; // Chrome apparently delivers incoming packets even after we .close() the connection sometimes.
            }

            var data = mess['data'];
            this.bytesReceived += data.length;
            this.stats_.incrementCounter('bytes_received', data.length);
            this.resetKeepAlive();

            if (this.frames !== null) {
              // we're buffering
              this.appendFrame_(data);
            } else {
              // try to parse out a frame count, otherwise, assume 1 and process it
              var remainingData = this.extractFrameCount_(data);

              if (remainingData !== null) {
                this.appendFrame_(remainingData);
              }
            }
          };
          /**
           * Send a message to the server
           * @param data - The JSON object to transmit
           */


          WebSocketConnection.prototype.send = function (data) {
            this.resetKeepAlive();
            var dataStr = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringify"])(data);
            this.bytesSent += dataStr.length;
            this.stats_.incrementCounter('bytes_sent', dataStr.length); //We can only fit a certain amount in each websocket frame, so we need to split this request
            //up into multiple pieces if it doesn't fit in one request.

            var dataSegs = splitStringBySize(dataStr, WEBSOCKET_MAX_FRAME_SIZE); //Send the length header

            if (dataSegs.length > 1) {
              this.sendString_(String(dataSegs.length));
            } //Send the actual data in segments.


            for (var i = 0; i < dataSegs.length; i++) {
              this.sendString_(dataSegs[i]);
            }
          };

          WebSocketConnection.prototype.shutdown_ = function () {
            this.isClosed_ = true;

            if (this.keepaliveTimer) {
              clearInterval(this.keepaliveTimer);
              this.keepaliveTimer = null;
            }

            if (this.mySock) {
              this.mySock.close();
              this.mySock = null;
            }
          };

          WebSocketConnection.prototype.onClosed_ = function () {
            if (!this.isClosed_) {
              this.log_('WebSocket is closing itself');
              this.shutdown_(); // since this is an internal close, trigger the close listener

              if (this.onDisconnect) {
                this.onDisconnect(this.everConnected_);
                this.onDisconnect = null;
              }
            }
          };
          /**
           * External-facing close handler.
           * Close the websocket and kill the connection.
           */


          WebSocketConnection.prototype.close = function () {
            if (!this.isClosed_) {
              this.log_('WebSocket is being closed');
              this.shutdown_();
            }
          };
          /**
           * Kill the current keepalive timer and start a new one, to ensure that it always fires N seconds after
           * the last activity.
           */


          WebSocketConnection.prototype.resetKeepAlive = function () {
            var _this = this;

            clearInterval(this.keepaliveTimer);
            this.keepaliveTimer = setInterval(function () {
              //If there has been no websocket activity for a while, send a no-op
              if (_this.mySock) {
                _this.sendString_('0');
              }

              _this.resetKeepAlive(); // eslint-disable-next-line @typescript-eslint/no-explicit-any

            }, Math.floor(WEBSOCKET_KEEPALIVE_INTERVAL));
          };
          /**
           * Send a string over the websocket.
           *
           * @param str - String to send.
           */


          WebSocketConnection.prototype.sendString_ = function (str) {
            // Firefox seems to sometimes throw exceptions (NS_ERROR_UNEXPECTED) from websocket .send()
            // calls for some unknown reason.  We treat these as an error and disconnect.
            // See https://app.asana.com/0/58926111402292/68021340250410
            try {
              this.mySock.send(str);
            } catch (e) {
              this.log_('Exception thrown from WebSocket.send():', e.message || e.data, 'Closing connection.');
              setTimeout(this.onClosed_.bind(this), 0);
            }
          };
          /**
           * Number of response before we consider the connection "healthy."
           */


          WebSocketConnection.responsesRequiredToBeHealthy = 2;
          /**
           * Time to wait for the connection te become healthy before giving up.
           */

          WebSocketConnection.healthyTimeout = 30000;
          return WebSocketConnection;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * Currently simplistic, this class manages what transport a Connection should use at various stages of its
         * lifecycle.
         *
         * It starts with longpolling in a browser, and httppolling on node. It then upgrades to websockets if
         * they are available.
         */


        var TransportManager =
        /** @class */
        function () {
          /**
           * @param repoInfo - Metadata around the namespace we're connecting to
           */
          function TransportManager(repoInfo) {
            this.initTransports_(repoInfo);
          }

          Object.defineProperty(TransportManager, "ALL_TRANSPORTS", {
            get: function get() {
              return [BrowserPollConnection, WebSocketConnection];
            },
            enumerable: false,
            configurable: true
          });

          TransportManager.prototype.initTransports_ = function (repoInfo) {
            var e_1, _a;

            var isWebSocketsAvailable = WebSocketConnection && WebSocketConnection['isAvailable']();
            var isSkipPollConnection = isWebSocketsAvailable && !WebSocketConnection.previouslyFailed();

            if (repoInfo.webSocketOnly) {
              if (!isWebSocketsAvailable) {
                warn("wss:// URL used, but browser isn't known to support websockets.  Trying anyway.");
              }

              isSkipPollConnection = true;
            }

            if (isSkipPollConnection) {
              this.transports_ = [WebSocketConnection];
            } else {
              var transports = this.transports_ = [];

              try {
                for (var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__values"])(TransportManager.ALL_TRANSPORTS), _c = _b.next(); !_c.done; _c = _b.next()) {
                  var transport = _c.value;

                  if (transport && transport['isAvailable']()) {
                    transports.push(transport);
                  }
                }
              } catch (e_1_1) {
                e_1 = {
                  error: e_1_1
                };
              } finally {
                try {
                  if (_c && !_c.done && (_a = _b["return"])) _a.call(_b);
                } finally {
                  if (e_1) throw e_1.error;
                }
              }
            }
          };
          /**
           * @returns The constructor for the initial transport to use
           */


          TransportManager.prototype.initialTransport = function () {
            if (this.transports_.length > 0) {
              return this.transports_[0];
            } else {
              throw new Error('No transports available');
            }
          };
          /**
           * @returns The constructor for the next transport, or null
           */


          TransportManager.prototype.upgradeTransport = function () {
            if (this.transports_.length > 1) {
              return this.transports_[1];
            } else {
              return null;
            }
          };

          return TransportManager;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */
        // Abort upgrade attempt if it takes longer than 60s.


        var UPGRADE_TIMEOUT = 60000; // For some transports (WebSockets), we need to "validate" the transport by exchanging a few requests and responses.
        // If we haven't sent enough requests within 5s, we'll start sending noop ping requests.

        var DELAY_BEFORE_SENDING_EXTRA_REQUESTS = 5000; // If the initial data sent triggers a lot of bandwidth (i.e. it's a large put or a listen for a large amount of data)
        // then we may not be able to exchange our ping/pong requests within the healthy timeout.  So if we reach the timeout
        // but we've sent/received enough bytes, we don't cancel the connection.

        var BYTES_SENT_HEALTHY_OVERRIDE = 10 * 1024;
        var BYTES_RECEIVED_HEALTHY_OVERRIDE = 100 * 1024;
        var MESSAGE_TYPE = 't';
        var MESSAGE_DATA = 'd';
        var CONTROL_SHUTDOWN = 's';
        var CONTROL_RESET = 'r';
        var CONTROL_ERROR = 'e';
        var CONTROL_PONG = 'o';
        var SWITCH_ACK = 'a';
        var END_TRANSMISSION = 'n';
        var PING = 'p';
        var SERVER_HELLO = 'h';
        /**
         * Creates a new real-time connection to the server using whichever method works
         * best in the current browser.
         */

        var Connection =
        /** @class */
        function () {
          /**
           * @param id - an id for this connection
           * @param repoInfo_ - the info for the endpoint to connect to
           * @param applicationId_ - the Firebase App ID for this project
           * @param appCheckToken_ - The App Check Token for this device.
           * @param authToken_ - The auth token for this session.
           * @param onMessage_ - the callback to be triggered when a server-push message arrives
           * @param onReady_ - the callback to be triggered when this connection is ready to send messages.
           * @param onDisconnect_ - the callback to be triggered when a connection was lost
           * @param onKill_ - the callback to be triggered when this connection has permanently shut down.
           * @param lastSessionId - last session id in persistent connection. is used to clean up old session in real-time server
           */
          function Connection(id, repoInfo_, applicationId_, appCheckToken_, authToken_, onMessage_, onReady_, onDisconnect_, onKill_, lastSessionId) {
            this.id = id;
            this.repoInfo_ = repoInfo_;
            this.applicationId_ = applicationId_;
            this.appCheckToken_ = appCheckToken_;
            this.authToken_ = authToken_;
            this.onMessage_ = onMessage_;
            this.onReady_ = onReady_;
            this.onDisconnect_ = onDisconnect_;
            this.onKill_ = onKill_;
            this.lastSessionId = lastSessionId;
            this.connectionCount = 0;
            this.pendingDataMessages = [];
            this.state_ = 0
            /* CONNECTING */
            ;
            this.log_ = logWrapper('c:' + this.id + ':');
            this.transportManager_ = new TransportManager(repoInfo_);
            this.log_('Connection created');
            this.start_();
          }
          /**
           * Starts a connection attempt
           */


          Connection.prototype.start_ = function () {
            var _this = this;

            var conn = this.transportManager_.initialTransport();
            this.conn_ = new conn(this.nextTransportId_(), this.repoInfo_, this.applicationId_, this.appCheckToken_, this.lastSessionId); // For certain transports (WebSockets), we need to send and receive several messages back and forth before we
            // can consider the transport healthy.

            this.primaryResponsesRequired_ = conn['responsesRequiredToBeHealthy'] || 0;
            var onMessageReceived = this.connReceiver_(this.conn_);
            var onConnectionLost = this.disconnReceiver_(this.conn_);
            this.tx_ = this.conn_;
            this.rx_ = this.conn_;
            this.secondaryConn_ = null;
            this.isHealthy_ = false;
            /*
             * Firefox doesn't like when code from one iframe tries to create another iframe by way of the parent frame.
             * This can occur in the case of a redirect, i.e. we guessed wrong on what server to connect to and received a reset.
             * Somehow, setTimeout seems to make this ok. That doesn't make sense from a security perspective, since you should
             * still have the context of your originating frame.
             */

            setTimeout(function () {
              // this.conn_ gets set to null in some of the tests. Check to make sure it still exists before using it
              _this.conn_ && _this.conn_.open(onMessageReceived, onConnectionLost);
            }, Math.floor(0));
            var healthyTimeoutMS = conn['healthyTimeout'] || 0;

            if (healthyTimeoutMS > 0) {
              this.healthyTimeout_ = setTimeoutNonBlocking(function () {
                _this.healthyTimeout_ = null;

                if (!_this.isHealthy_) {
                  if (_this.conn_ && _this.conn_.bytesReceived > BYTES_RECEIVED_HEALTHY_OVERRIDE) {
                    _this.log_('Connection exceeded healthy timeout but has received ' + _this.conn_.bytesReceived + ' bytes.  Marking connection healthy.');

                    _this.isHealthy_ = true;

                    _this.conn_.markConnectionHealthy();
                  } else if (_this.conn_ && _this.conn_.bytesSent > BYTES_SENT_HEALTHY_OVERRIDE) {
                    _this.log_('Connection exceeded healthy timeout but has sent ' + _this.conn_.bytesSent + ' bytes.  Leaving connection alive.'); // NOTE: We don't want to mark it healthy, since we have no guarantee that the bytes have made it to
                    // the server.

                  } else {
                    _this.log_('Closing unhealthy connection after timeout.');

                    _this.close();
                  }
                } // eslint-disable-next-line @typescript-eslint/no-explicit-any

              }, Math.floor(healthyTimeoutMS));
            }
          };

          Connection.prototype.nextTransportId_ = function () {
            return 'c:' + this.id + ':' + this.connectionCount++;
          };

          Connection.prototype.disconnReceiver_ = function (conn) {
            var _this = this;

            return function (everConnected) {
              if (conn === _this.conn_) {
                _this.onConnectionLost_(everConnected);
              } else if (conn === _this.secondaryConn_) {
                _this.log_('Secondary connection lost.');

                _this.onSecondaryConnectionLost_();
              } else {
                _this.log_('closing an old connection');
              }
            };
          };

          Connection.prototype.connReceiver_ = function (conn) {
            var _this = this;

            return function (message) {
              if (_this.state_ !== 2
              /* DISCONNECTED */
              ) {
                  if (conn === _this.rx_) {
                    _this.onPrimaryMessageReceived_(message);
                  } else if (conn === _this.secondaryConn_) {
                    _this.onSecondaryMessageReceived_(message);
                  } else {
                    _this.log_('message on old connection');
                  }
                }
            };
          };
          /**
           * @param dataMsg - An arbitrary data message to be sent to the server
           */


          Connection.prototype.sendRequest = function (dataMsg) {
            // wrap in a data message envelope and send it on
            var msg = {
              t: 'd',
              d: dataMsg
            };
            this.sendData_(msg);
          };

          Connection.prototype.tryCleanupConnection = function () {
            if (this.tx_ === this.secondaryConn_ && this.rx_ === this.secondaryConn_) {
              this.log_('cleaning up and promoting a connection: ' + this.secondaryConn_.connId);
              this.conn_ = this.secondaryConn_;
              this.secondaryConn_ = null; // the server will shutdown the old connection
            }
          };

          Connection.prototype.onSecondaryControl_ = function (controlData) {
            if (MESSAGE_TYPE in controlData) {
              var cmd = controlData[MESSAGE_TYPE];

              if (cmd === SWITCH_ACK) {
                this.upgradeIfSecondaryHealthy_();
              } else if (cmd === CONTROL_RESET) {
                // Most likely the session wasn't valid. Abandon the switch attempt
                this.log_('Got a reset on secondary, closing it');
                this.secondaryConn_.close(); // If we were already using this connection for something, than we need to fully close

                if (this.tx_ === this.secondaryConn_ || this.rx_ === this.secondaryConn_) {
                  this.close();
                }
              } else if (cmd === CONTROL_PONG) {
                this.log_('got pong on secondary.');
                this.secondaryResponsesRequired_--;
                this.upgradeIfSecondaryHealthy_();
              }
            }
          };

          Connection.prototype.onSecondaryMessageReceived_ = function (parsedData) {
            var layer = requireKey('t', parsedData);
            var data = requireKey('d', parsedData);

            if (layer === 'c') {
              this.onSecondaryControl_(data);
            } else if (layer === 'd') {
              // got a data message, but we're still second connection. Need to buffer it up
              this.pendingDataMessages.push(data);
            } else {
              throw new Error('Unknown protocol layer: ' + layer);
            }
          };

          Connection.prototype.upgradeIfSecondaryHealthy_ = function () {
            if (this.secondaryResponsesRequired_ <= 0) {
              this.log_('Secondary connection is healthy.');
              this.isHealthy_ = true;
              this.secondaryConn_.markConnectionHealthy();
              this.proceedWithUpgrade_();
            } else {
              // Send a ping to make sure the connection is healthy.
              this.log_('sending ping on secondary.');
              this.secondaryConn_.send({
                t: 'c',
                d: {
                  t: PING,
                  d: {}
                }
              });
            }
          };

          Connection.prototype.proceedWithUpgrade_ = function () {
            // tell this connection to consider itself open
            this.secondaryConn_.start(); // send ack

            this.log_('sending client ack on secondary');
            this.secondaryConn_.send({
              t: 'c',
              d: {
                t: SWITCH_ACK,
                d: {}
              }
            }); // send end packet on primary transport, switch to sending on this one
            // can receive on this one, buffer responses until end received on primary transport

            this.log_('Ending transmission on primary');
            this.conn_.send({
              t: 'c',
              d: {
                t: END_TRANSMISSION,
                d: {}
              }
            });
            this.tx_ = this.secondaryConn_;
            this.tryCleanupConnection();
          };

          Connection.prototype.onPrimaryMessageReceived_ = function (parsedData) {
            // Must refer to parsedData properties in quotes, so closure doesn't touch them.
            var layer = requireKey('t', parsedData);
            var data = requireKey('d', parsedData);

            if (layer === 'c') {
              this.onControl_(data);
            } else if (layer === 'd') {
              this.onDataMessage_(data);
            }
          };

          Connection.prototype.onDataMessage_ = function (message) {
            this.onPrimaryResponse_(); // We don't do anything with data messages, just kick them up a level

            this.onMessage_(message);
          };

          Connection.prototype.onPrimaryResponse_ = function () {
            if (!this.isHealthy_) {
              this.primaryResponsesRequired_--;

              if (this.primaryResponsesRequired_ <= 0) {
                this.log_('Primary connection is healthy.');
                this.isHealthy_ = true;
                this.conn_.markConnectionHealthy();
              }
            }
          };

          Connection.prototype.onControl_ = function (controlData) {
            var cmd = requireKey(MESSAGE_TYPE, controlData);

            if (MESSAGE_DATA in controlData) {
              var payload = controlData[MESSAGE_DATA];

              if (cmd === SERVER_HELLO) {
                this.onHandshake_(payload);
              } else if (cmd === END_TRANSMISSION) {
                this.log_('recvd end transmission on primary');
                this.rx_ = this.secondaryConn_;

                for (var i = 0; i < this.pendingDataMessages.length; ++i) {
                  this.onDataMessage_(this.pendingDataMessages[i]);
                }

                this.pendingDataMessages = [];
                this.tryCleanupConnection();
              } else if (cmd === CONTROL_SHUTDOWN) {
                // This was previously the 'onKill' callback passed to the lower-level connection
                // payload in this case is the reason for the shutdown. Generally a human-readable error
                this.onConnectionShutdown_(payload);
              } else if (cmd === CONTROL_RESET) {
                // payload in this case is the host we should contact
                this.onReset_(payload);
              } else if (cmd === CONTROL_ERROR) {
                error('Server Error: ' + payload);
              } else if (cmd === CONTROL_PONG) {
                this.log_('got pong on primary.');
                this.onPrimaryResponse_();
                this.sendPingOnPrimaryIfNecessary_();
              } else {
                error('Unknown control packet command: ' + cmd);
              }
            }
          };
          /**
           * @param handshake - The handshake data returned from the server
           */


          Connection.prototype.onHandshake_ = function (handshake) {
            var timestamp = handshake.ts;
            var version = handshake.v;
            var host = handshake.h;
            this.sessionId = handshake.s;
            this.repoInfo_.host = host; // if we've already closed the connection, then don't bother trying to progress further

            if (this.state_ === 0
            /* CONNECTING */
            ) {
                this.conn_.start();
                this.onConnectionEstablished_(this.conn_, timestamp);

                if (PROTOCOL_VERSION !== version) {
                  warn('Protocol version mismatch detected');
                } // TODO: do we want to upgrade? when? maybe a delay?


                this.tryStartUpgrade_();
              }
          };

          Connection.prototype.tryStartUpgrade_ = function () {
            var conn = this.transportManager_.upgradeTransport();

            if (conn) {
              this.startUpgrade_(conn);
            }
          };

          Connection.prototype.startUpgrade_ = function (conn) {
            var _this = this;

            this.secondaryConn_ = new conn(this.nextTransportId_(), this.repoInfo_, this.applicationId_, this.appCheckToken_, this.authToken_, this.sessionId); // For certain transports (WebSockets), we need to send and receive several messages back and forth before we
            // can consider the transport healthy.

            this.secondaryResponsesRequired_ = conn['responsesRequiredToBeHealthy'] || 0;
            var onMessage = this.connReceiver_(this.secondaryConn_);
            var onDisconnect = this.disconnReceiver_(this.secondaryConn_);
            this.secondaryConn_.open(onMessage, onDisconnect); // If we haven't successfully upgraded after UPGRADE_TIMEOUT, give up and kill the secondary.

            setTimeoutNonBlocking(function () {
              if (_this.secondaryConn_) {
                _this.log_('Timed out trying to upgrade.');

                _this.secondaryConn_.close();
              }
            }, Math.floor(UPGRADE_TIMEOUT));
          };

          Connection.prototype.onReset_ = function (host) {
            this.log_('Reset packet received.  New host: ' + host);
            this.repoInfo_.host = host; // TODO: if we're already "connected", we need to trigger a disconnect at the next layer up.
            // We don't currently support resets after the connection has already been established

            if (this.state_ === 1
            /* CONNECTED */
            ) {
                this.close();
              } else {
              // Close whatever connections we have open and start again.
              this.closeConnections_();
              this.start_();
            }
          };

          Connection.prototype.onConnectionEstablished_ = function (conn, timestamp) {
            var _this = this;

            this.log_('Realtime connection established.');
            this.conn_ = conn;
            this.state_ = 1
            /* CONNECTED */
            ;

            if (this.onReady_) {
              this.onReady_(timestamp, this.sessionId);
              this.onReady_ = null;
            } // If after 5 seconds we haven't sent enough requests to the server to get the connection healthy,
            // send some pings.


            if (this.primaryResponsesRequired_ === 0) {
              this.log_('Primary connection is healthy.');
              this.isHealthy_ = true;
            } else {
              setTimeoutNonBlocking(function () {
                _this.sendPingOnPrimaryIfNecessary_();
              }, Math.floor(DELAY_BEFORE_SENDING_EXTRA_REQUESTS));
            }
          };

          Connection.prototype.sendPingOnPrimaryIfNecessary_ = function () {
            // If the connection isn't considered healthy yet, we'll send a noop ping packet request.
            if (!this.isHealthy_ && this.state_ === 1
            /* CONNECTED */
            ) {
                this.log_('sending ping on primary.');
                this.sendData_({
                  t: 'c',
                  d: {
                    t: PING,
                    d: {}
                  }
                });
              }
          };

          Connection.prototype.onSecondaryConnectionLost_ = function () {
            var conn = this.secondaryConn_;
            this.secondaryConn_ = null;

            if (this.tx_ === conn || this.rx_ === conn) {
              // we are relying on this connection already in some capacity. Therefore, a failure is real
              this.close();
            }
          };
          /**
           * @param everConnected - Whether or not the connection ever reached a server. Used to determine if
           * we should flush the host cache
           */


          Connection.prototype.onConnectionLost_ = function (everConnected) {
            this.conn_ = null; // NOTE: IF you're seeing a Firefox error for this line, I think it might be because it's getting
            // called on window close and RealtimeState.CONNECTING is no longer defined.  Just a guess.

            if (!everConnected && this.state_ === 0
            /* CONNECTING */
            ) {
                this.log_('Realtime connection failed.'); // Since we failed to connect at all, clear any cached entry for this namespace in case the machine went away

                if (this.repoInfo_.isCacheableHost()) {
                  PersistentStorage.remove('host:' + this.repoInfo_.host); // reset the internal host to what we would show the user, i.e. <ns>.firebaseio.com

                  this.repoInfo_.internalHost = this.repoInfo_.host;
                }
              } else if (this.state_ === 1
            /* CONNECTED */
            ) {
                this.log_('Realtime connection lost.');
              }

            this.close();
          };

          Connection.prototype.onConnectionShutdown_ = function (reason) {
            this.log_('Connection shutdown command received. Shutting down...');

            if (this.onKill_) {
              this.onKill_(reason);
              this.onKill_ = null;
            } // We intentionally don't want to fire onDisconnect (kill is a different case),
            // so clear the callback.


            this.onDisconnect_ = null;
            this.close();
          };

          Connection.prototype.sendData_ = function (data) {
            if (this.state_ !== 1
            /* CONNECTED */
            ) {
                throw 'Connection is not connected';
              } else {
              this.tx_.send(data);
            }
          };
          /**
           * Cleans up this connection, calling the appropriate callbacks
           */


          Connection.prototype.close = function () {
            if (this.state_ !== 2
            /* DISCONNECTED */
            ) {
                this.log_('Closing realtime connection.');
                this.state_ = 2
                /* DISCONNECTED */
                ;
                this.closeConnections_();

                if (this.onDisconnect_) {
                  this.onDisconnect_();
                  this.onDisconnect_ = null;
                }
              }
          };

          Connection.prototype.closeConnections_ = function () {
            this.log_('Shutting down all connections');

            if (this.conn_) {
              this.conn_.close();
              this.conn_ = null;
            }

            if (this.secondaryConn_) {
              this.secondaryConn_.close();
              this.secondaryConn_ = null;
            }

            if (this.healthyTimeout_) {
              clearTimeout(this.healthyTimeout_);
              this.healthyTimeout_ = null;
            }
          };

          return Connection;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * Interface defining the set of actions that can be performed against the Firebase server
         * (basically corresponds to our wire protocol).
         *
         * @interface
         */


        var ServerActions =
        /** @class */
        function () {
          function ServerActions() {}

          ServerActions.prototype.put = function (pathString, data, onComplete, hash) {};

          ServerActions.prototype.merge = function (pathString, data, onComplete, hash) {};
          /**
           * Refreshes the auth token for the current connection.
           * @param token - The authentication token
           */


          ServerActions.prototype.refreshAuthToken = function (token) {};
          /**
           * Refreshes the app check token for the current connection.
           * @param token The app check token
           */


          ServerActions.prototype.refreshAppCheckToken = function (token) {};

          ServerActions.prototype.onDisconnectPut = function (pathString, data, onComplete) {};

          ServerActions.prototype.onDisconnectMerge = function (pathString, data, onComplete) {};

          ServerActions.prototype.onDisconnectCancel = function (pathString, onComplete) {};

          ServerActions.prototype.reportStats = function (stats) {};

          return ServerActions;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * Base class to be used if you want to emit events. Call the constructor with
         * the set of allowed event names.
         */


        var EventEmitter =
        /** @class */
        function () {
          function EventEmitter(allowedEvents_) {
            this.allowedEvents_ = allowedEvents_;
            this.listeners_ = {};
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(Array.isArray(allowedEvents_) && allowedEvents_.length > 0, 'Requires a non-empty array');
          }
          /**
           * To be called by derived classes to trigger events.
           */


          EventEmitter.prototype.trigger = function (eventType) {
            var varArgs = [];

            for (var _i = 1; _i < arguments.length; _i++) {
              varArgs[_i - 1] = arguments[_i];
            }

            if (Array.isArray(this.listeners_[eventType])) {
              // Clone the list, since callbacks could add/remove listeners.
              var listeners = Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__spreadArray"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__read"])(this.listeners_[eventType]));

              for (var i = 0; i < listeners.length; i++) {
                listeners[i].callback.apply(listeners[i].context, varArgs);
              }
            }
          };

          EventEmitter.prototype.on = function (eventType, callback, context) {
            this.validateEventType_(eventType);
            this.listeners_[eventType] = this.listeners_[eventType] || [];
            this.listeners_[eventType].push({
              callback: callback,
              context: context
            });
            var eventData = this.getInitialEvent(eventType);

            if (eventData) {
              callback.apply(context, eventData);
            }
          };

          EventEmitter.prototype.off = function (eventType, callback, context) {
            this.validateEventType_(eventType);
            var listeners = this.listeners_[eventType] || [];

            for (var i = 0; i < listeners.length; i++) {
              if (listeners[i].callback === callback && (!context || context === listeners[i].context)) {
                listeners.splice(i, 1);
                return;
              }
            }
          };

          EventEmitter.prototype.validateEventType_ = function (eventType) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(this.allowedEvents_.find(function (et) {
              return et === eventType;
            }), 'Unknown event: ' + eventType);
          };

          return EventEmitter;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * Monitors online state (as reported by window.online/offline events).
         *
         * The expectation is that this could have many false positives (thinks we are online
         * when we're not), but no false negatives.  So we can safely use it to determine when
         * we definitely cannot reach the internet.
         */


        var OnlineMonitor =
        /** @class */
        function (_super) {
          Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__extends"])(OnlineMonitor, _super);

          function OnlineMonitor() {
            var _this = _super.call(this, ['online']) || this;

            _this.online_ = true; // We've had repeated complaints that Cordova apps can get stuck "offline", e.g.
            // https://forum.ionicframework.com/t/firebase-connection-is-lost-and-never-come-back/43810
            // It would seem that the 'online' event does not always fire consistently. So we disable it
            // for Cordova.

            if (typeof window !== 'undefined' && typeof window.addEventListener !== 'undefined' && !Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["isMobileCordova"])()) {
              window.addEventListener('online', function () {
                if (!_this.online_) {
                  _this.online_ = true;

                  _this.trigger('online', true);
                }
              }, false);
              window.addEventListener('offline', function () {
                if (_this.online_) {
                  _this.online_ = false;

                  _this.trigger('online', false);
                }
              }, false);
            }

            return _this;
          }

          OnlineMonitor.getInstance = function () {
            return new OnlineMonitor();
          };

          OnlineMonitor.prototype.getInitialEvent = function (eventType) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(eventType === 'online', 'Unknown event type: ' + eventType);
            return [this.online_];
          };

          OnlineMonitor.prototype.currentlyOnline = function () {
            return this.online_;
          };

          return OnlineMonitor;
        }(EventEmitter);
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /** Maximum key depth. */


        var MAX_PATH_DEPTH = 32;
        /** Maximum number of (UTF8) bytes in a Firebase path. */

        var MAX_PATH_LENGTH_BYTES = 768;
        /**
         * An immutable object representing a parsed path.  It's immutable so that you
         * can pass them around to other functions without worrying about them changing
         * it.
         */

        var Path =
        /** @class */
        function () {
          /**
           * @param pathOrString - Path string to parse, or another path, or the raw
           * tokens array
           */
          function Path(pathOrString, pieceNum) {
            if (pieceNum === void 0) {
              this.pieces_ = pathOrString.split('/'); // Remove empty pieces.

              var copyTo = 0;

              for (var i = 0; i < this.pieces_.length; i++) {
                if (this.pieces_[i].length > 0) {
                  this.pieces_[copyTo] = this.pieces_[i];
                  copyTo++;
                }
              }

              this.pieces_.length = copyTo;
              this.pieceNum_ = 0;
            } else {
              this.pieces_ = pathOrString;
              this.pieceNum_ = pieceNum;
            }
          }

          Path.prototype.toString = function () {
            var pathString = '';

            for (var i = this.pieceNum_; i < this.pieces_.length; i++) {
              if (this.pieces_[i] !== '') {
                pathString += '/' + this.pieces_[i];
              }
            }

            return pathString || '/';
          };

          return Path;
        }();

        function newEmptyPath() {
          return new Path('');
        }

        function pathGetFront(path) {
          if (path.pieceNum_ >= path.pieces_.length) {
            return null;
          }

          return path.pieces_[path.pieceNum_];
        }
        /**
         * @returns The number of segments in this path
         */


        function pathGetLength(path) {
          return path.pieces_.length - path.pieceNum_;
        }

        function pathPopFront(path) {
          var pieceNum = path.pieceNum_;

          if (pieceNum < path.pieces_.length) {
            pieceNum++;
          }

          return new Path(path.pieces_, pieceNum);
        }

        function pathGetBack(path) {
          if (path.pieceNum_ < path.pieces_.length) {
            return path.pieces_[path.pieces_.length - 1];
          }

          return null;
        }

        function pathToUrlEncodedString(path) {
          var pathString = '';

          for (var i = path.pieceNum_; i < path.pieces_.length; i++) {
            if (path.pieces_[i] !== '') {
              pathString += '/' + encodeURIComponent(String(path.pieces_[i]));
            }
          }

          return pathString || '/';
        }
        /**
         * Shallow copy of the parts of the path.
         *
         */


        function pathSlice(path, begin) {
          if (begin === void 0) {
            begin = 0;
          }

          return path.pieces_.slice(path.pieceNum_ + begin);
        }

        function pathParent(path) {
          if (path.pieceNum_ >= path.pieces_.length) {
            return null;
          }

          var pieces = [];

          for (var i = path.pieceNum_; i < path.pieces_.length - 1; i++) {
            pieces.push(path.pieces_[i]);
          }

          return new Path(pieces, 0);
        }

        function pathChild(path, childPathObj) {
          var pieces = [];

          for (var i = path.pieceNum_; i < path.pieces_.length; i++) {
            pieces.push(path.pieces_[i]);
          }

          if (childPathObj instanceof Path) {
            for (var i = childPathObj.pieceNum_; i < childPathObj.pieces_.length; i++) {
              pieces.push(childPathObj.pieces_[i]);
            }
          } else {
            var childPieces = childPathObj.split('/');

            for (var i = 0; i < childPieces.length; i++) {
              if (childPieces[i].length > 0) {
                pieces.push(childPieces[i]);
              }
            }
          }

          return new Path(pieces, 0);
        }
        /**
         * @returns True if there are no segments in this path
         */


        function pathIsEmpty(path) {
          return path.pieceNum_ >= path.pieces_.length;
        }
        /**
         * @returns The path from outerPath to innerPath
         */


        function newRelativePath(outerPath, innerPath) {
          var outer = pathGetFront(outerPath),
              inner = pathGetFront(innerPath);

          if (outer === null) {
            return innerPath;
          } else if (outer === inner) {
            return newRelativePath(pathPopFront(outerPath), pathPopFront(innerPath));
          } else {
            throw new Error('INTERNAL ERROR: innerPath (' + innerPath + ') is not within ' + 'outerPath (' + outerPath + ')');
          }
        }
        /**
         * @returns -1, 0, 1 if left is less, equal, or greater than the right.
         */


        function pathCompare(left, right) {
          var leftKeys = pathSlice(left, 0);
          var rightKeys = pathSlice(right, 0);

          for (var i = 0; i < leftKeys.length && i < rightKeys.length; i++) {
            var cmp = nameCompare(leftKeys[i], rightKeys[i]);

            if (cmp !== 0) {
              return cmp;
            }
          }

          if (leftKeys.length === rightKeys.length) {
            return 0;
          }

          return leftKeys.length < rightKeys.length ? -1 : 1;
        }
        /**
         * @returns true if paths are the same.
         */


        function pathEquals(path, other) {
          if (pathGetLength(path) !== pathGetLength(other)) {
            return false;
          }

          for (var i = path.pieceNum_, j = other.pieceNum_; i <= path.pieces_.length; i++, j++) {
            if (path.pieces_[i] !== other.pieces_[j]) {
              return false;
            }
          }

          return true;
        }
        /**
         * @returns True if this path is a parent (or the same as) other
         */


        function pathContains(path, other) {
          var i = path.pieceNum_;
          var j = other.pieceNum_;

          if (pathGetLength(path) > pathGetLength(other)) {
            return false;
          }

          while (i < path.pieces_.length) {
            if (path.pieces_[i] !== other.pieces_[j]) {
              return false;
            }

            ++i;
            ++j;
          }

          return true;
        }
        /**
         * Dynamic (mutable) path used to count path lengths.
         *
         * This class is used to efficiently check paths for valid
         * length (in UTF8 bytes) and depth (used in path validation).
         *
         * Throws Error exception if path is ever invalid.
         *
         * The definition of a path always begins with '/'.
         */


        var ValidationPath =
        /** @class */
        function () {
          /**
           * @param path - Initial Path.
           * @param errorPrefix_ - Prefix for any error messages.
           */
          function ValidationPath(path, errorPrefix_) {
            this.errorPrefix_ = errorPrefix_;
            this.parts_ = pathSlice(path, 0);
            /** Initialize to number of '/' chars needed in path. */

            this.byteLength_ = Math.max(1, this.parts_.length);

            for (var i = 0; i < this.parts_.length; i++) {
              this.byteLength_ += Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringLength"])(this.parts_[i]);
            }

            validationPathCheckValid(this);
          }

          return ValidationPath;
        }();

        function validationPathPush(validationPath, child) {
          // Count the needed '/'
          if (validationPath.parts_.length > 0) {
            validationPath.byteLength_ += 1;
          }

          validationPath.parts_.push(child);
          validationPath.byteLength_ += Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringLength"])(child);
          validationPathCheckValid(validationPath);
        }

        function validationPathPop(validationPath) {
          var last = validationPath.parts_.pop();
          validationPath.byteLength_ -= Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringLength"])(last); // Un-count the previous '/'

          if (validationPath.parts_.length > 0) {
            validationPath.byteLength_ -= 1;
          }
        }

        function validationPathCheckValid(validationPath) {
          if (validationPath.byteLength_ > MAX_PATH_LENGTH_BYTES) {
            throw new Error(validationPath.errorPrefix_ + 'has a key path longer than ' + MAX_PATH_LENGTH_BYTES + ' bytes (' + validationPath.byteLength_ + ').');
          }

          if (validationPath.parts_.length > MAX_PATH_DEPTH) {
            throw new Error(validationPath.errorPrefix_ + 'path specified exceeds the maximum depth that can be written (' + MAX_PATH_DEPTH + ') or object contains a cycle ' + validationPathToErrorString(validationPath));
          }
        }
        /**
         * String for use in error messages - uses '.' notation for path.
         */


        function validationPathToErrorString(validationPath) {
          if (validationPath.parts_.length === 0) {
            return '';
          }

          return "in property '" + validationPath.parts_.join('.') + "'";
        }
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var VisibilityMonitor =
        /** @class */
        function (_super) {
          Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__extends"])(VisibilityMonitor, _super);

          function VisibilityMonitor() {
            var _this = _super.call(this, ['visible']) || this;

            var hidden;
            var visibilityChange;

            if (typeof document !== 'undefined' && typeof document.addEventListener !== 'undefined') {
              if (typeof document['hidden'] !== 'undefined') {
                // Opera 12.10 and Firefox 18 and later support
                visibilityChange = 'visibilitychange';
                hidden = 'hidden';
              } else if (typeof document['mozHidden'] !== 'undefined') {
                visibilityChange = 'mozvisibilitychange';
                hidden = 'mozHidden';
              } else if (typeof document['msHidden'] !== 'undefined') {
                visibilityChange = 'msvisibilitychange';
                hidden = 'msHidden';
              } else if (typeof document['webkitHidden'] !== 'undefined') {
                visibilityChange = 'webkitvisibilitychange';
                hidden = 'webkitHidden';
              }
            } // Initially, we always assume we are visible. This ensures that in browsers
            // without page visibility support or in cases where we are never visible
            // (e.g. chrome extension), we act as if we are visible, i.e. don't delay
            // reconnects


            _this.visible_ = true;

            if (visibilityChange) {
              document.addEventListener(visibilityChange, function () {
                var visible = !document[hidden];

                if (visible !== _this.visible_) {
                  _this.visible_ = visible;

                  _this.trigger('visible', visible);
                }
              }, false);
            }

            return _this;
          }

          VisibilityMonitor.getInstance = function () {
            return new VisibilityMonitor();
          };

          VisibilityMonitor.prototype.getInitialEvent = function (eventType) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(eventType === 'visible', 'Unknown event type: ' + eventType);
            return [this.visible_];
          };

          return VisibilityMonitor;
        }(EventEmitter);
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var RECONNECT_MIN_DELAY = 1000;
        var RECONNECT_MAX_DELAY_DEFAULT = 60 * 5 * 1000; // 5 minutes in milliseconds (Case: 1858)

        var GET_CONNECT_TIMEOUT = 3 * 1000;
        var RECONNECT_MAX_DELAY_FOR_ADMINS = 30 * 1000; // 30 seconds for admin clients (likely to be a backend server)

        var RECONNECT_DELAY_MULTIPLIER = 1.3;
        var RECONNECT_DELAY_RESET_TIMEOUT = 30000; // Reset delay back to MIN_DELAY after being connected for 30sec.

        var SERVER_KILL_INTERRUPT_REASON = 'server_kill'; // If auth fails repeatedly, we'll assume something is wrong and log a warning / back off.

        var INVALID_TOKEN_THRESHOLD = 3;
        /**
         * Firebase connection.  Abstracts wire protocol and handles reconnecting.
         *
         * NOTE: All JSON objects sent to the realtime connection must have property names enclosed
         * in quotes to make sure the closure compiler does not minify them.
         */

        var PersistentConnection =
        /** @class */
        function (_super) {
          Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__extends"])(PersistentConnection, _super);
          /**
           * @param repoInfo_ - Data about the namespace we are connecting to
           * @param applicationId_ - The Firebase App ID for this project
           * @param onDataUpdate_ - A callback for new data from the server
           */

          function PersistentConnection(repoInfo_, applicationId_, onDataUpdate_, onConnectStatus_, onServerInfoUpdate_, authTokenProvider_, appCheckTokenProvider_, authOverride_) {
            var _this = _super.call(this) || this;

            _this.repoInfo_ = repoInfo_;
            _this.applicationId_ = applicationId_;
            _this.onDataUpdate_ = onDataUpdate_;
            _this.onConnectStatus_ = onConnectStatus_;
            _this.onServerInfoUpdate_ = onServerInfoUpdate_;
            _this.authTokenProvider_ = authTokenProvider_;
            _this.appCheckTokenProvider_ = appCheckTokenProvider_;
            _this.authOverride_ = authOverride_; // Used for diagnostic logging.

            _this.id = PersistentConnection.nextPersistentConnectionId_++;
            _this.log_ = logWrapper('p:' + _this.id + ':');
            _this.interruptReasons_ = {};
            _this.listens = new Map();
            _this.outstandingPuts_ = [];
            _this.outstandingGets_ = [];
            _this.outstandingPutCount_ = 0;
            _this.outstandingGetCount_ = 0;
            _this.onDisconnectRequestQueue_ = [];
            _this.connected_ = false;
            _this.reconnectDelay_ = RECONNECT_MIN_DELAY;
            _this.maxReconnectDelay_ = RECONNECT_MAX_DELAY_DEFAULT;
            _this.securityDebugCallback_ = null;
            _this.lastSessionId = null;
            _this.establishConnectionTimer_ = null;
            _this.visible_ = false; // Before we get connected, we keep a queue of pending messages to send.

            _this.requestCBHash_ = {};
            _this.requestNumber_ = 0;
            _this.realtime_ = null;
            _this.authToken_ = null;
            _this.appCheckToken_ = null;
            _this.forceTokenRefresh_ = false;
            _this.invalidAuthTokenCount_ = 0;
            _this.invalidAppCheckTokenCount_ = 0;
            _this.firstConnection_ = true;
            _this.lastConnectionAttemptTime_ = null;
            _this.lastConnectionEstablishedTime_ = null;

            if (authOverride_ && !Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["isNodeSdk"])()) {
              throw new Error('Auth override specified in options, but not supported on non Node.js platforms');
            }

            VisibilityMonitor.getInstance().on('visible', _this.onVisible_, _this);

            if (repoInfo_.host.indexOf('fblocal') === -1) {
              OnlineMonitor.getInstance().on('online', _this.onOnline_, _this);
            }

            return _this;
          }

          PersistentConnection.prototype.sendRequest = function (action, body, onResponse) {
            var curReqNum = ++this.requestNumber_;
            var msg = {
              r: curReqNum,
              a: action,
              b: body
            };
            this.log_(Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringify"])(msg));
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(this.connected_, "sendRequest call when we're not connected not allowed.");
            this.realtime_.sendRequest(msg);

            if (onResponse) {
              this.requestCBHash_[curReqNum] = onResponse;
            }
          };

          PersistentConnection.prototype.get = function (query) {
            var _this = this;

            this.initConnection_();
            var deferred = new _firebase_util__WEBPACK_IMPORTED_MODULE_2__["Deferred"]();
            var request = {
              p: query._path.toString(),
              q: query._queryObject
            };
            var outstandingGet = {
              action: 'g',
              request: request,
              onComplete: function onComplete(message) {
                var payload = message['d'];

                if (message['s'] === 'ok') {
                  _this.onDataUpdate_(request['p'], payload,
                  /*isMerge*/
                  false,
                  /*tag*/
                  null);

                  deferred.resolve(payload);
                } else {
                  deferred.reject(payload);
                }
              }
            };
            this.outstandingGets_.push(outstandingGet);
            this.outstandingGetCount_++;
            var index = this.outstandingGets_.length - 1;

            if (!this.connected_) {
              setTimeout(function () {
                var get = _this.outstandingGets_[index];

                if (get === undefined || outstandingGet !== get) {
                  return;
                }

                delete _this.outstandingGets_[index];
                _this.outstandingGetCount_--;

                if (_this.outstandingGetCount_ === 0) {
                  _this.outstandingGets_ = [];
                }

                _this.log_('get ' + index + ' timed out on connection');

                deferred.reject(new Error('Client is offline.'));
              }, GET_CONNECT_TIMEOUT);
            }

            if (this.connected_) {
              this.sendGet_(index);
            }

            return deferred.promise;
          };

          PersistentConnection.prototype.listen = function (query, currentHashFn, tag, onComplete) {
            this.initConnection_();
            var queryId = query._queryIdentifier;

            var pathString = query._path.toString();

            this.log_('Listen called for ' + pathString + ' ' + queryId);

            if (!this.listens.has(pathString)) {
              this.listens.set(pathString, new Map());
            }

            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(query._queryParams.isDefault() || !query._queryParams.loadsAllData(), 'listen() called for non-default but complete query');
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(!this.listens.get(pathString).has(queryId), 'listen() called twice for same path/queryId.');
            var listenSpec = {
              onComplete: onComplete,
              hashFn: currentHashFn,
              query: query,
              tag: tag
            };
            this.listens.get(pathString).set(queryId, listenSpec);

            if (this.connected_) {
              this.sendListen_(listenSpec);
            }
          };

          PersistentConnection.prototype.sendGet_ = function (index) {
            var _this = this;

            var get = this.outstandingGets_[index];
            this.sendRequest('g', get.request, function (message) {
              delete _this.outstandingGets_[index];
              _this.outstandingGetCount_--;

              if (_this.outstandingGetCount_ === 0) {
                _this.outstandingGets_ = [];
              }

              if (get.onComplete) {
                get.onComplete(message);
              }
            });
          };

          PersistentConnection.prototype.sendListen_ = function (listenSpec) {
            var _this = this;

            var query = listenSpec.query;

            var pathString = query._path.toString();

            var queryId = query._queryIdentifier;
            this.log_('Listen on ' + pathString + ' for ' + queryId);
            var req = {
              /*path*/
              p: pathString
            };
            var action = 'q'; // Only bother to send query if it's non-default.

            if (listenSpec.tag) {
              req['q'] = query._queryObject;
              req['t'] = listenSpec.tag;
            }

            req[
            /*hash*/
            'h'] = listenSpec.hashFn();
            this.sendRequest(action, req, function (message) {
              var payload = message[
              /*data*/
              'd'];
              var status = message[
              /*status*/
              's']; // print warnings in any case...

              PersistentConnection.warnOnListenWarnings_(payload, query);

              var currentListenSpec = _this.listens.get(pathString) && _this.listens.get(pathString).get(queryId); // only trigger actions if the listen hasn't been removed and readded


              if (currentListenSpec === listenSpec) {
                _this.log_('listen response', message);

                if (status !== 'ok') {
                  _this.removeListen_(pathString, queryId);
                }

                if (listenSpec.onComplete) {
                  listenSpec.onComplete(status, payload);
                }
              }
            });
          };

          PersistentConnection.warnOnListenWarnings_ = function (payload, query) {
            if (payload && typeof payload === 'object' && Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["contains"])(payload, 'w')) {
              // eslint-disable-next-line @typescript-eslint/no-explicit-any
              var warnings = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["safeGet"])(payload, 'w');

              if (Array.isArray(warnings) && ~warnings.indexOf('no_index')) {
                var indexSpec = '".indexOn": "' + query._queryParams.getIndex().toString() + '"';

                var indexPath = query._path.toString();

                warn("Using an unspecified index. Your data will be downloaded and " + ("filtered on the client. Consider adding " + indexSpec + " at ") + (indexPath + " to your security rules for better performance."));
              }
            }
          };

          PersistentConnection.prototype.refreshAuthToken = function (token) {
            this.authToken_ = token;
            this.log_('Auth token refreshed');

            if (this.authToken_) {
              this.tryAuth();
            } else {
              //If we're connected we want to let the server know to unauthenticate us. If we're not connected, simply delete
              //the credential so we dont become authenticated next time we connect.
              if (this.connected_) {
                this.sendRequest('unauth', {}, function () {});
              }
            }

            this.reduceReconnectDelayIfAdminCredential_(token);
          };

          PersistentConnection.prototype.reduceReconnectDelayIfAdminCredential_ = function (credential) {
            // NOTE: This isn't intended to be bulletproof (a malicious developer can always just modify the client).
            // Additionally, we don't bother resetting the max delay back to the default if auth fails / expires.
            var isFirebaseSecret = credential && credential.length === 40;

            if (isFirebaseSecret || Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["isAdmin"])(credential)) {
              this.log_('Admin auth credential detected.  Reducing max reconnect time.');
              this.maxReconnectDelay_ = RECONNECT_MAX_DELAY_FOR_ADMINS;
            }
          };

          PersistentConnection.prototype.refreshAppCheckToken = function (token) {
            this.appCheckToken_ = token;
            this.log_('App check token refreshed');

            if (this.appCheckToken_) {
              this.tryAppCheck();
            } else {
              //If we're connected we want to let the server know to unauthenticate us.
              //If we're not connected, simply delete the credential so we dont become
              // authenticated next time we connect.
              if (this.connected_) {
                this.sendRequest('unappeck', {}, function () {});
              }
            }
          };
          /**
           * Attempts to authenticate with the given credentials. If the authentication attempt fails, it's triggered like
           * a auth revoked (the connection is closed).
           */


          PersistentConnection.prototype.tryAuth = function () {
            var _this = this;

            if (this.connected_ && this.authToken_) {
              var token_1 = this.authToken_;
              var authMethod = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["isValidFormat"])(token_1) ? 'auth' : 'gauth';
              var requestData = {
                cred: token_1
              };

              if (this.authOverride_ === null) {
                requestData['noauth'] = true;
              } else if (typeof this.authOverride_ === 'object') {
                requestData['authvar'] = this.authOverride_;
              }

              this.sendRequest(authMethod, requestData, function (res) {
                var status = res[
                /*status*/
                's'];
                var data = res[
                /*data*/
                'd'] || 'error';

                if (_this.authToken_ === token_1) {
                  if (status === 'ok') {
                    _this.invalidAuthTokenCount_ = 0;
                  } else {
                    // Triggers reconnect and force refresh for auth token
                    _this.onAuthRevoked_(status, data);
                  }
                }
              });
            }
          };
          /**
           * Attempts to authenticate with the given token. If the authentication
           * attempt fails, it's triggered like the token was revoked (the connection is
           * closed).
           */


          PersistentConnection.prototype.tryAppCheck = function () {
            var _this = this;

            if (this.connected_ && this.appCheckToken_) {
              this.sendRequest('appcheck', {
                'token': this.appCheckToken_
              }, function (res) {
                var status = res[
                /*status*/
                's'];
                var data = res[
                /*data*/
                'd'] || 'error';

                if (status === 'ok') {
                  _this.invalidAppCheckTokenCount_ = 0;
                } else {
                  _this.onAppCheckRevoked_(status, data);
                }
              });
            }
          };
          /**
           * @inheritDoc
           */


          PersistentConnection.prototype.unlisten = function (query, tag) {
            var pathString = query._path.toString();

            var queryId = query._queryIdentifier;
            this.log_('Unlisten called for ' + pathString + ' ' + queryId);
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(query._queryParams.isDefault() || !query._queryParams.loadsAllData(), 'unlisten() called for non-default but complete query');
            var listen = this.removeListen_(pathString, queryId);

            if (listen && this.connected_) {
              this.sendUnlisten_(pathString, queryId, query._queryObject, tag);
            }
          };

          PersistentConnection.prototype.sendUnlisten_ = function (pathString, queryId, queryObj, tag) {
            this.log_('Unlisten on ' + pathString + ' for ' + queryId);
            var req = {
              /*path*/
              p: pathString
            };
            var action = 'n'; // Only bother sending queryId if it's non-default.

            if (tag) {
              req['q'] = queryObj;
              req['t'] = tag;
            }

            this.sendRequest(action, req);
          };

          PersistentConnection.prototype.onDisconnectPut = function (pathString, data, onComplete) {
            this.initConnection_();

            if (this.connected_) {
              this.sendOnDisconnect_('o', pathString, data, onComplete);
            } else {
              this.onDisconnectRequestQueue_.push({
                pathString: pathString,
                action: 'o',
                data: data,
                onComplete: onComplete
              });
            }
          };

          PersistentConnection.prototype.onDisconnectMerge = function (pathString, data, onComplete) {
            this.initConnection_();

            if (this.connected_) {
              this.sendOnDisconnect_('om', pathString, data, onComplete);
            } else {
              this.onDisconnectRequestQueue_.push({
                pathString: pathString,
                action: 'om',
                data: data,
                onComplete: onComplete
              });
            }
          };

          PersistentConnection.prototype.onDisconnectCancel = function (pathString, onComplete) {
            this.initConnection_();

            if (this.connected_) {
              this.sendOnDisconnect_('oc', pathString, null, onComplete);
            } else {
              this.onDisconnectRequestQueue_.push({
                pathString: pathString,
                action: 'oc',
                data: null,
                onComplete: onComplete
              });
            }
          };

          PersistentConnection.prototype.sendOnDisconnect_ = function (action, pathString, data, onComplete) {
            var request = {
              /*path*/
              p: pathString,

              /*data*/
              d: data
            };
            this.log_('onDisconnect ' + action, request);
            this.sendRequest(action, request, function (response) {
              if (onComplete) {
                setTimeout(function () {
                  onComplete(response[
                  /*status*/
                  's'], response[
                  /* data */
                  'd']);
                }, Math.floor(0));
              }
            });
          };

          PersistentConnection.prototype.put = function (pathString, data, onComplete, hash) {
            this.putInternal('p', pathString, data, onComplete, hash);
          };

          PersistentConnection.prototype.merge = function (pathString, data, onComplete, hash) {
            this.putInternal('m', pathString, data, onComplete, hash);
          };

          PersistentConnection.prototype.putInternal = function (action, pathString, data, onComplete, hash) {
            this.initConnection_();
            var request = {
              /*path*/
              p: pathString,

              /*data*/
              d: data
            };

            if (hash !== undefined) {
              request[
              /*hash*/
              'h'] = hash;
            } // TODO: Only keep track of the most recent put for a given path?


            this.outstandingPuts_.push({
              action: action,
              request: request,
              onComplete: onComplete
            });
            this.outstandingPutCount_++;
            var index = this.outstandingPuts_.length - 1;

            if (this.connected_) {
              this.sendPut_(index);
            } else {
              this.log_('Buffering put: ' + pathString);
            }
          };

          PersistentConnection.prototype.sendPut_ = function (index) {
            var _this = this;

            var action = this.outstandingPuts_[index].action;
            var request = this.outstandingPuts_[index].request;
            var onComplete = this.outstandingPuts_[index].onComplete;
            this.outstandingPuts_[index].queued = this.connected_;
            this.sendRequest(action, request, function (message) {
              _this.log_(action + ' response', message);

              delete _this.outstandingPuts_[index];
              _this.outstandingPutCount_--; // Clean up array occasionally.

              if (_this.outstandingPutCount_ === 0) {
                _this.outstandingPuts_ = [];
              }

              if (onComplete) {
                onComplete(message[
                /*status*/
                's'], message[
                /* data */
                'd']);
              }
            });
          };

          PersistentConnection.prototype.reportStats = function (stats) {
            var _this = this; // If we're not connected, we just drop the stats.


            if (this.connected_) {
              var request = {
                /*counters*/
                c: stats
              };
              this.log_('reportStats', request);
              this.sendRequest(
              /*stats*/
              's', request, function (result) {
                var status = result[
                /*status*/
                's'];

                if (status !== 'ok') {
                  var errorReason = result[
                  /* data */
                  'd'];

                  _this.log_('reportStats', 'Error sending stats: ' + errorReason);
                }
              });
            }
          };

          PersistentConnection.prototype.onDataMessage_ = function (message) {
            if ('r' in message) {
              // this is a response
              this.log_('from server: ' + Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringify"])(message));
              var reqNum = message['r'];
              var onResponse = this.requestCBHash_[reqNum];

              if (onResponse) {
                delete this.requestCBHash_[reqNum];
                onResponse(message[
                /*body*/
                'b']);
              }
            } else if ('error' in message) {
              throw 'A server-side error has occurred: ' + message['error'];
            } else if ('a' in message) {
              // a and b are action and body, respectively
              this.onDataPush_(message['a'], message['b']);
            }
          };

          PersistentConnection.prototype.onDataPush_ = function (action, body) {
            this.log_('handleServerMessage', action, body);

            if (action === 'd') {
              this.onDataUpdate_(body[
              /*path*/
              'p'], body[
              /*data*/
              'd'],
              /*isMerge*/
              false, body['t']);
            } else if (action === 'm') {
              this.onDataUpdate_(body[
              /*path*/
              'p'], body[
              /*data*/
              'd'],
              /*isMerge=*/
              true, body['t']);
            } else if (action === 'c') {
              this.onListenRevoked_(body[
              /*path*/
              'p'], body[
              /*query*/
              'q']);
            } else if (action === 'ac') {
              this.onAuthRevoked_(body[
              /*status code*/
              's'], body[
              /* explanation */
              'd']);
            } else if (action === 'apc') {
              this.onAppCheckRevoked_(body[
              /*status code*/
              's'], body[
              /* explanation */
              'd']);
            } else if (action === 'sd') {
              this.onSecurityDebugPacket_(body);
            } else {
              error('Unrecognized action received from server: ' + Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringify"])(action) + '\nAre you using the latest client?');
            }
          };

          PersistentConnection.prototype.onReady_ = function (timestamp, sessionId) {
            this.log_('connection ready');
            this.connected_ = true;
            this.lastConnectionEstablishedTime_ = new Date().getTime();
            this.handleTimestamp_(timestamp);
            this.lastSessionId = sessionId;

            if (this.firstConnection_) {
              this.sendConnectStats_();
            }

            this.restoreState_();
            this.firstConnection_ = false;
            this.onConnectStatus_(true);
          };

          PersistentConnection.prototype.scheduleConnect_ = function (timeout) {
            var _this = this;

            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(!this.realtime_, "Scheduling a connect when we're already connected/ing?");

            if (this.establishConnectionTimer_) {
              clearTimeout(this.establishConnectionTimer_);
            } // NOTE: Even when timeout is 0, it's important to do a setTimeout to work around an infuriating "Security Error" in
            // Firefox when trying to write to our long-polling iframe in some scenarios (e.g. Forge or our unit tests).


            this.establishConnectionTimer_ = setTimeout(function () {
              _this.establishConnectionTimer_ = null;

              _this.establishConnection_(); // eslint-disable-next-line @typescript-eslint/no-explicit-any

            }, Math.floor(timeout));
          };

          PersistentConnection.prototype.initConnection_ = function () {
            if (!this.realtime_ && this.firstConnection_) {
              this.scheduleConnect_(0);
            }
          };

          PersistentConnection.prototype.onVisible_ = function (visible) {
            // NOTE: Tabbing away and back to a window will defeat our reconnect backoff, but I think that's fine.
            if (visible && !this.visible_ && this.reconnectDelay_ === this.maxReconnectDelay_) {
              this.log_('Window became visible.  Reducing delay.');
              this.reconnectDelay_ = RECONNECT_MIN_DELAY;

              if (!this.realtime_) {
                this.scheduleConnect_(0);
              }
            }

            this.visible_ = visible;
          };

          PersistentConnection.prototype.onOnline_ = function (online) {
            if (online) {
              this.log_('Browser went online.');
              this.reconnectDelay_ = RECONNECT_MIN_DELAY;

              if (!this.realtime_) {
                this.scheduleConnect_(0);
              }
            } else {
              this.log_('Browser went offline.  Killing connection.');

              if (this.realtime_) {
                this.realtime_.close();
              }
            }
          };

          PersistentConnection.prototype.onRealtimeDisconnect_ = function () {
            this.log_('data client disconnected');
            this.connected_ = false;
            this.realtime_ = null; // Since we don't know if our sent transactions succeeded or not, we need to cancel them.

            this.cancelSentTransactions_(); // Clear out the pending requests.

            this.requestCBHash_ = {};

            if (this.shouldReconnect_()) {
              if (!this.visible_) {
                this.log_("Window isn't visible.  Delaying reconnect.");
                this.reconnectDelay_ = this.maxReconnectDelay_;
                this.lastConnectionAttemptTime_ = new Date().getTime();
              } else if (this.lastConnectionEstablishedTime_) {
                // If we've been connected long enough, reset reconnect delay to minimum.
                var timeSinceLastConnectSucceeded = new Date().getTime() - this.lastConnectionEstablishedTime_;

                if (timeSinceLastConnectSucceeded > RECONNECT_DELAY_RESET_TIMEOUT) {
                  this.reconnectDelay_ = RECONNECT_MIN_DELAY;
                }

                this.lastConnectionEstablishedTime_ = null;
              }

              var timeSinceLastConnectAttempt = new Date().getTime() - this.lastConnectionAttemptTime_;
              var reconnectDelay = Math.max(0, this.reconnectDelay_ - timeSinceLastConnectAttempt);
              reconnectDelay = Math.random() * reconnectDelay;
              this.log_('Trying to reconnect in ' + reconnectDelay + 'ms');
              this.scheduleConnect_(reconnectDelay); // Adjust reconnect delay for next time.

              this.reconnectDelay_ = Math.min(this.maxReconnectDelay_, this.reconnectDelay_ * RECONNECT_DELAY_MULTIPLIER);
            }

            this.onConnectStatus_(false);
          };

          PersistentConnection.prototype.establishConnection_ = function () {
            return Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__awaiter"])(this, void 0, void 0, function () {
              var onDataMessage, onReady, onDisconnect_1, connId, lastSessionId, canceled_1, connection_1, closeFn, sendRequestFn, forceRefresh, _a, authToken, appCheckToken, error_1;

              var _this = this;

              return Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__generator"])(this, function (_b) {
                switch (_b.label) {
                  case 0:
                    if (!this.shouldReconnect_()) return [3
                    /*break*/
                    , 4];
                    this.log_('Making a connection attempt');
                    this.lastConnectionAttemptTime_ = new Date().getTime();
                    this.lastConnectionEstablishedTime_ = null;
                    onDataMessage = this.onDataMessage_.bind(this);
                    onReady = this.onReady_.bind(this);
                    onDisconnect_1 = this.onRealtimeDisconnect_.bind(this);
                    connId = this.id + ':' + PersistentConnection.nextConnectionId_++;
                    lastSessionId = this.lastSessionId;
                    canceled_1 = false;
                    connection_1 = null;

                    closeFn = function closeFn() {
                      if (connection_1) {
                        connection_1.close();
                      } else {
                        canceled_1 = true;
                        onDisconnect_1();
                      }
                    };

                    sendRequestFn = function sendRequestFn(msg) {
                      Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(connection_1, "sendRequest call when we're not connected not allowed.");
                      connection_1.sendRequest(msg);
                    };

                    this.realtime_ = {
                      close: closeFn,
                      sendRequest: sendRequestFn
                    };
                    forceRefresh = this.forceTokenRefresh_;
                    this.forceTokenRefresh_ = false;
                    _b.label = 1;

                  case 1:
                    _b.trys.push([1, 3,, 4]);

                    return [4
                    /*yield*/
                    , Promise.all([this.authTokenProvider_.getToken(forceRefresh), this.appCheckTokenProvider_.getToken(forceRefresh)])];

                  case 2:
                    _a = tslib__WEBPACK_IMPORTED_MODULE_3__["__read"].apply(void 0, [_b.sent(), 2]), authToken = _a[0], appCheckToken = _a[1];

                    if (!canceled_1) {
                      log('getToken() completed. Creating connection.');
                      this.authToken_ = authToken && authToken.accessToken;
                      this.appCheckToken_ = appCheckToken && appCheckToken.token;
                      connection_1 = new Connection(connId, this.repoInfo_, this.applicationId_, this.appCheckToken_, this.authToken_, onDataMessage, onReady, onDisconnect_1,
                      /* onKill= */
                      function (reason) {
                        warn(reason + ' (' + _this.repoInfo_.toString() + ')');

                        _this.interrupt(SERVER_KILL_INTERRUPT_REASON);
                      }, lastSessionId);
                    } else {
                      log('getToken() completed but was canceled');
                    }

                    return [3
                    /*break*/
                    , 4];

                  case 3:
                    error_1 = _b.sent();
                    this.log_('Failed to get token: ' + error_1);

                    if (!canceled_1) {
                      if (this.repoInfo_.nodeAdmin) {
                        // This may be a critical error for the Admin Node.js SDK, so log a warning.
                        // But getToken() may also just have temporarily failed, so we still want to
                        // continue retrying.
                        warn(error_1);
                      }

                      closeFn();
                    }

                    return [3
                    /*break*/
                    , 4];

                  case 4:
                    return [2
                    /*return*/
                    ];
                }
              });
            });
          };

          PersistentConnection.prototype.interrupt = function (reason) {
            log('Interrupting connection for reason: ' + reason);
            this.interruptReasons_[reason] = true;

            if (this.realtime_) {
              this.realtime_.close();
            } else {
              if (this.establishConnectionTimer_) {
                clearTimeout(this.establishConnectionTimer_);
                this.establishConnectionTimer_ = null;
              }

              if (this.connected_) {
                this.onRealtimeDisconnect_();
              }
            }
          };

          PersistentConnection.prototype.resume = function (reason) {
            log('Resuming connection for reason: ' + reason);
            delete this.interruptReasons_[reason];

            if (Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["isEmpty"])(this.interruptReasons_)) {
              this.reconnectDelay_ = RECONNECT_MIN_DELAY;

              if (!this.realtime_) {
                this.scheduleConnect_(0);
              }
            }
          };

          PersistentConnection.prototype.handleTimestamp_ = function (timestamp) {
            var delta = timestamp - new Date().getTime();
            this.onServerInfoUpdate_({
              serverTimeOffset: delta
            });
          };

          PersistentConnection.prototype.cancelSentTransactions_ = function () {
            for (var i = 0; i < this.outstandingPuts_.length; i++) {
              var put = this.outstandingPuts_[i];

              if (put &&
              /*hash*/
              'h' in put.request && put.queued) {
                if (put.onComplete) {
                  put.onComplete('disconnect');
                }

                delete this.outstandingPuts_[i];
                this.outstandingPutCount_--;
              }
            } // Clean up array occasionally.


            if (this.outstandingPutCount_ === 0) {
              this.outstandingPuts_ = [];
            }
          };

          PersistentConnection.prototype.onListenRevoked_ = function (pathString, query) {
            // Remove the listen and manufacture a "permission_denied" error for the failed listen.
            var queryId;

            if (!query) {
              queryId = 'default';
            } else {
              queryId = query.map(function (q) {
                return ObjectToUniqueKey(q);
              }).join('$');
            }

            var listen = this.removeListen_(pathString, queryId);

            if (listen && listen.onComplete) {
              listen.onComplete('permission_denied');
            }
          };

          PersistentConnection.prototype.removeListen_ = function (pathString, queryId) {
            var normalizedPathString = new Path(pathString).toString(); // normalize path.

            var listen;

            if (this.listens.has(normalizedPathString)) {
              var map = this.listens.get(normalizedPathString);
              listen = map.get(queryId);
              map["delete"](queryId);

              if (map.size === 0) {
                this.listens["delete"](normalizedPathString);
              }
            } else {
              // all listens for this path has already been removed
              listen = undefined;
            }

            return listen;
          };

          PersistentConnection.prototype.onAuthRevoked_ = function (statusCode, explanation) {
            log('Auth token revoked: ' + statusCode + '/' + explanation);
            this.authToken_ = null;
            this.forceTokenRefresh_ = true;
            this.realtime_.close();

            if (statusCode === 'invalid_token' || statusCode === 'permission_denied') {
              // We'll wait a couple times before logging the warning / increasing the
              // retry period since oauth tokens will report as "invalid" if they're
              // just expired. Plus there may be transient issues that resolve themselves.
              this.invalidAuthTokenCount_++;

              if (this.invalidAuthTokenCount_ >= INVALID_TOKEN_THRESHOLD) {
                // Set a long reconnect delay because recovery is unlikely
                this.reconnectDelay_ = RECONNECT_MAX_DELAY_FOR_ADMINS; // Notify the auth token provider that the token is invalid, which will log
                // a warning

                this.authTokenProvider_.notifyForInvalidToken();
              }
            }
          };

          PersistentConnection.prototype.onAppCheckRevoked_ = function (statusCode, explanation) {
            log('App check token revoked: ' + statusCode + '/' + explanation);
            this.appCheckToken_ = null;
            this.forceTokenRefresh_ = true; // Note: We don't close the connection as the developer may not have
            // enforcement enabled. The backend closes connections with enforcements.

            if (statusCode === 'invalid_token' || statusCode === 'permission_denied') {
              // We'll wait a couple times before logging the warning / increasing the
              // retry period since oauth tokens will report as "invalid" if they're
              // just expired. Plus there may be transient issues that resolve themselves.
              this.invalidAppCheckTokenCount_++;

              if (this.invalidAppCheckTokenCount_ >= INVALID_TOKEN_THRESHOLD) {
                this.appCheckTokenProvider_.notifyForInvalidToken();
              }
            }
          };

          PersistentConnection.prototype.onSecurityDebugPacket_ = function (body) {
            if (this.securityDebugCallback_) {
              this.securityDebugCallback_(body);
            } else {
              if ('msg' in body) {
                console.log('FIREBASE: ' + body['msg'].replace('\n', '\nFIREBASE: '));
              }
            }
          };

          PersistentConnection.prototype.restoreState_ = function () {
            var e_1, _a, e_2, _b; //Re-authenticate ourselves if we have a credential stored.


            this.tryAuth();
            this.tryAppCheck();

            try {
              // Puts depend on having received the corresponding data update from the server before they complete, so we must
              // make sure to send listens before puts.
              for (var _c = Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__values"])(this.listens.values()), _d = _c.next(); !_d.done; _d = _c.next()) {
                var queries = _d.value;

                try {
                  for (var _e = (e_2 = void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__values"])(queries.values())), _f = _e.next(); !_f.done; _f = _e.next()) {
                    var listenSpec = _f.value;
                    this.sendListen_(listenSpec);
                  }
                } catch (e_2_1) {
                  e_2 = {
                    error: e_2_1
                  };
                } finally {
                  try {
                    if (_f && !_f.done && (_b = _e["return"])) _b.call(_e);
                  } finally {
                    if (e_2) throw e_2.error;
                  }
                }
              }
            } catch (e_1_1) {
              e_1 = {
                error: e_1_1
              };
            } finally {
              try {
                if (_d && !_d.done && (_a = _c["return"])) _a.call(_c);
              } finally {
                if (e_1) throw e_1.error;
              }
            }

            for (var i = 0; i < this.outstandingPuts_.length; i++) {
              if (this.outstandingPuts_[i]) {
                this.sendPut_(i);
              }
            }

            while (this.onDisconnectRequestQueue_.length) {
              var request = this.onDisconnectRequestQueue_.shift();
              this.sendOnDisconnect_(request.action, request.pathString, request.data, request.onComplete);
            }

            for (var i = 0; i < this.outstandingGets_.length; i++) {
              if (this.outstandingGets_[i]) {
                this.sendGet_(i);
              }
            }
          };
          /**
           * Sends client stats for first connection
           */


          PersistentConnection.prototype.sendConnectStats_ = function () {
            var stats = {};
            var clientName = 'js';

            if (Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["isNodeSdk"])()) {
              if (this.repoInfo_.nodeAdmin) {
                clientName = 'admin_node';
              } else {
                clientName = 'node';
              }
            }

            stats['sdk.' + clientName + '.' + SDK_VERSION.replace(/\./g, '-')] = 1;

            if (Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["isMobileCordova"])()) {
              stats['framework.cordova'] = 1;
            } else if (Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["isReactNative"])()) {
              stats['framework.reactnative'] = 1;
            }

            this.reportStats(stats);
          };

          PersistentConnection.prototype.shouldReconnect_ = function () {
            var online = OnlineMonitor.getInstance().currentlyOnline();
            return Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["isEmpty"])(this.interruptReasons_) && online;
          };

          PersistentConnection.nextPersistentConnectionId_ = 0;
          /**
           * Counter for number of connections created. Mainly used for tagging in the logs
           */

          PersistentConnection.nextConnectionId_ = 0;
          return PersistentConnection;
        }(ServerActions);
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var NamedNode =
        /** @class */
        function () {
          function NamedNode(name, node) {
            this.name = name;
            this.node = node;
          }

          NamedNode.Wrap = function (name, node) {
            return new NamedNode(name, node);
          };

          return NamedNode;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var Index =
        /** @class */
        function () {
          function Index() {}
          /**
           * @returns A standalone comparison function for
           * this index
           */


          Index.prototype.getCompare = function () {
            return this.compare.bind(this);
          };
          /**
           * Given a before and after value for a node, determine if the indexed value has changed. Even if they are different,
           * it's possible that the changes are isolated to parts of the snapshot that are not indexed.
           *
           *
           * @returns True if the portion of the snapshot being indexed changed between oldNode and newNode
           */


          Index.prototype.indexedValueChanged = function (oldNode, newNode) {
            var oldWrapped = new NamedNode(MIN_NAME, oldNode);
            var newWrapped = new NamedNode(MIN_NAME, newNode);
            return this.compare(oldWrapped, newWrapped) !== 0;
          };
          /**
           * @returns a node wrapper that will sort equal to or less than
           * any other node wrapper, using this index
           */


          Index.prototype.minPost = function () {
            // eslint-disable-next-line @typescript-eslint/no-explicit-any
            return NamedNode.MIN;
          };

          return Index;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var __EMPTY_NODE;

        var KeyIndex =
        /** @class */
        function (_super) {
          Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__extends"])(KeyIndex, _super);

          function KeyIndex() {
            return _super !== null && _super.apply(this, arguments) || this;
          }

          Object.defineProperty(KeyIndex, "__EMPTY_NODE", {
            get: function get() {
              return __EMPTY_NODE;
            },
            set: function set(val) {
              __EMPTY_NODE = val;
            },
            enumerable: false,
            configurable: true
          });

          KeyIndex.prototype.compare = function (a, b) {
            return nameCompare(a.name, b.name);
          };

          KeyIndex.prototype.isDefinedOn = function (node) {
            // We could probably return true here (since every node has a key), but it's never called
            // so just leaving unimplemented for now.
            throw Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assertionError"])('KeyIndex.isDefinedOn not expected to be called.');
          };

          KeyIndex.prototype.indexedValueChanged = function (oldNode, newNode) {
            return false; // The key for a node never changes.
          };

          KeyIndex.prototype.minPost = function () {
            // eslint-disable-next-line @typescript-eslint/no-explicit-any
            return NamedNode.MIN;
          };

          KeyIndex.prototype.maxPost = function () {
            // TODO: This should really be created once and cached in a static property, but
            // NamedNode isn't defined yet, so I can't use it in a static.  Bleh.
            return new NamedNode(MAX_NAME, __EMPTY_NODE);
          };

          KeyIndex.prototype.makePost = function (indexValue, name) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(typeof indexValue === 'string', 'KeyIndex indexValue must always be a string.'); // We just use empty node, but it'll never be compared, since our comparator only looks at name.

            return new NamedNode(indexValue, __EMPTY_NODE);
          };
          /**
           * @returns String representation for inclusion in a query spec
           */


          KeyIndex.prototype.toString = function () {
            return '.key';
          };

          return KeyIndex;
        }(Index);

        var KEY_INDEX = new KeyIndex();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * An iterator over an LLRBNode.
         */

        var SortedMapIterator =
        /** @class */
        function () {
          /**
           * @param node - Node to iterate.
           * @param isReverse_ - Whether or not to iterate in reverse
           */
          function SortedMapIterator(node, startKey, comparator, isReverse_, resultGenerator_) {
            if (resultGenerator_ === void 0) {
              resultGenerator_ = null;
            }

            this.isReverse_ = isReverse_;
            this.resultGenerator_ = resultGenerator_;
            this.nodeStack_ = [];
            var cmp = 1;

            while (!node.isEmpty()) {
              node = node;
              cmp = startKey ? comparator(node.key, startKey) : 1; // flip the comparison if we're going in reverse

              if (isReverse_) {
                cmp *= -1;
              }

              if (cmp < 0) {
                // This node is less than our start key. ignore it
                if (this.isReverse_) {
                  node = node.left;
                } else {
                  node = node.right;
                }
              } else if (cmp === 0) {
                // This node is exactly equal to our start key. Push it on the stack, but stop iterating;
                this.nodeStack_.push(node);
                break;
              } else {
                // This node is greater than our start key, add it to the stack and move to the next one
                this.nodeStack_.push(node);

                if (this.isReverse_) {
                  node = node.right;
                } else {
                  node = node.left;
                }
              }
            }
          }

          SortedMapIterator.prototype.getNext = function () {
            if (this.nodeStack_.length === 0) {
              return null;
            }

            var node = this.nodeStack_.pop();
            var result;

            if (this.resultGenerator_) {
              result = this.resultGenerator_(node.key, node.value);
            } else {
              result = {
                key: node.key,
                value: node.value
              };
            }

            if (this.isReverse_) {
              node = node.left;

              while (!node.isEmpty()) {
                this.nodeStack_.push(node);
                node = node.right;
              }
            } else {
              node = node.right;

              while (!node.isEmpty()) {
                this.nodeStack_.push(node);
                node = node.left;
              }
            }

            return result;
          };

          SortedMapIterator.prototype.hasNext = function () {
            return this.nodeStack_.length > 0;
          };

          SortedMapIterator.prototype.peek = function () {
            if (this.nodeStack_.length === 0) {
              return null;
            }

            var node = this.nodeStack_[this.nodeStack_.length - 1];

            if (this.resultGenerator_) {
              return this.resultGenerator_(node.key, node.value);
            } else {
              return {
                key: node.key,
                value: node.value
              };
            }
          };

          return SortedMapIterator;
        }();
        /**
         * Represents a node in a Left-leaning Red-Black tree.
         */


        var LLRBNode =
        /** @class */
        function () {
          /**
           * @param key - Key associated with this node.
           * @param value - Value associated with this node.
           * @param color - Whether this node is red.
           * @param left - Left child.
           * @param right - Right child.
           */
          function LLRBNode(key, value, color, left, right) {
            this.key = key;
            this.value = value;
            this.color = color != null ? color : LLRBNode.RED;
            this.left = left != null ? left : SortedMap.EMPTY_NODE;
            this.right = right != null ? right : SortedMap.EMPTY_NODE;
          }
          /**
           * Returns a copy of the current node, optionally replacing pieces of it.
           *
           * @param key - New key for the node, or null.
           * @param value - New value for the node, or null.
           * @param color - New color for the node, or null.
           * @param left - New left child for the node, or null.
           * @param right - New right child for the node, or null.
           * @returns The node copy.
           */


          LLRBNode.prototype.copy = function (key, value, color, left, right) {
            return new LLRBNode(key != null ? key : this.key, value != null ? value : this.value, color != null ? color : this.color, left != null ? left : this.left, right != null ? right : this.right);
          };
          /**
           * @returns The total number of nodes in the tree.
           */


          LLRBNode.prototype.count = function () {
            return this.left.count() + 1 + this.right.count();
          };
          /**
           * @returns True if the tree is empty.
           */


          LLRBNode.prototype.isEmpty = function () {
            return false;
          };
          /**
           * Traverses the tree in key order and calls the specified action function
           * for each node.
           *
           * @param action - Callback function to be called for each
           *   node.  If it returns true, traversal is aborted.
           * @returns The first truthy value returned by action, or the last falsey
           *   value returned by action
           */


          LLRBNode.prototype.inorderTraversal = function (action) {
            return this.left.inorderTraversal(action) || !!action(this.key, this.value) || this.right.inorderTraversal(action);
          };
          /**
           * Traverses the tree in reverse key order and calls the specified action function
           * for each node.
           *
           * @param action - Callback function to be called for each
           * node.  If it returns true, traversal is aborted.
           * @returns True if traversal was aborted.
           */


          LLRBNode.prototype.reverseTraversal = function (action) {
            return this.right.reverseTraversal(action) || action(this.key, this.value) || this.left.reverseTraversal(action);
          };
          /**
           * @returns The minimum node in the tree.
           */


          LLRBNode.prototype.min_ = function () {
            if (this.left.isEmpty()) {
              return this;
            } else {
              return this.left.min_();
            }
          };
          /**
           * @returns The maximum key in the tree.
           */


          LLRBNode.prototype.minKey = function () {
            return this.min_().key;
          };
          /**
           * @returns The maximum key in the tree.
           */


          LLRBNode.prototype.maxKey = function () {
            if (this.right.isEmpty()) {
              return this.key;
            } else {
              return this.right.maxKey();
            }
          };
          /**
           * @param key - Key to insert.
           * @param value - Value to insert.
           * @param comparator - Comparator.
           * @returns New tree, with the key/value added.
           */


          LLRBNode.prototype.insert = function (key, value, comparator) {
            var n = this;
            var cmp = comparator(key, n.key);

            if (cmp < 0) {
              n = n.copy(null, null, null, n.left.insert(key, value, comparator), null);
            } else if (cmp === 0) {
              n = n.copy(null, value, null, null, null);
            } else {
              n = n.copy(null, null, null, null, n.right.insert(key, value, comparator));
            }

            return n.fixUp_();
          };
          /**
           * @returns New tree, with the minimum key removed.
           */


          LLRBNode.prototype.removeMin_ = function () {
            if (this.left.isEmpty()) {
              return SortedMap.EMPTY_NODE;
            }

            var n = this;

            if (!n.left.isRed_() && !n.left.left.isRed_()) {
              n = n.moveRedLeft_();
            }

            n = n.copy(null, null, null, n.left.removeMin_(), null);
            return n.fixUp_();
          };
          /**
           * @param key - The key of the item to remove.
           * @param comparator - Comparator.
           * @returns New tree, with the specified item removed.
           */


          LLRBNode.prototype.remove = function (key, comparator) {
            var n, smallest;
            n = this;

            if (comparator(key, n.key) < 0) {
              if (!n.left.isEmpty() && !n.left.isRed_() && !n.left.left.isRed_()) {
                n = n.moveRedLeft_();
              }

              n = n.copy(null, null, null, n.left.remove(key, comparator), null);
            } else {
              if (n.left.isRed_()) {
                n = n.rotateRight_();
              }

              if (!n.right.isEmpty() && !n.right.isRed_() && !n.right.left.isRed_()) {
                n = n.moveRedRight_();
              }

              if (comparator(key, n.key) === 0) {
                if (n.right.isEmpty()) {
                  return SortedMap.EMPTY_NODE;
                } else {
                  smallest = n.right.min_();
                  n = n.copy(smallest.key, smallest.value, null, null, n.right.removeMin_());
                }
              }

              n = n.copy(null, null, null, null, n.right.remove(key, comparator));
            }

            return n.fixUp_();
          };
          /**
           * @returns Whether this is a RED node.
           */


          LLRBNode.prototype.isRed_ = function () {
            return this.color;
          };
          /**
           * @returns New tree after performing any needed rotations.
           */


          LLRBNode.prototype.fixUp_ = function () {
            var n = this;

            if (n.right.isRed_() && !n.left.isRed_()) {
              n = n.rotateLeft_();
            }

            if (n.left.isRed_() && n.left.left.isRed_()) {
              n = n.rotateRight_();
            }

            if (n.left.isRed_() && n.right.isRed_()) {
              n = n.colorFlip_();
            }

            return n;
          };
          /**
           * @returns New tree, after moveRedLeft.
           */


          LLRBNode.prototype.moveRedLeft_ = function () {
            var n = this.colorFlip_();

            if (n.right.left.isRed_()) {
              n = n.copy(null, null, null, null, n.right.rotateRight_());
              n = n.rotateLeft_();
              n = n.colorFlip_();
            }

            return n;
          };
          /**
           * @returns New tree, after moveRedRight.
           */


          LLRBNode.prototype.moveRedRight_ = function () {
            var n = this.colorFlip_();

            if (n.left.left.isRed_()) {
              n = n.rotateRight_();
              n = n.colorFlip_();
            }

            return n;
          };
          /**
           * @returns New tree, after rotateLeft.
           */


          LLRBNode.prototype.rotateLeft_ = function () {
            var nl = this.copy(null, null, LLRBNode.RED, null, this.right.left);
            return this.right.copy(null, null, this.color, nl, null);
          };
          /**
           * @returns New tree, after rotateRight.
           */


          LLRBNode.prototype.rotateRight_ = function () {
            var nr = this.copy(null, null, LLRBNode.RED, this.left.right, null);
            return this.left.copy(null, null, this.color, null, nr);
          };
          /**
           * @returns Newt ree, after colorFlip.
           */


          LLRBNode.prototype.colorFlip_ = function () {
            var left = this.left.copy(null, null, !this.left.color, null, null);
            var right = this.right.copy(null, null, !this.right.color, null, null);
            return this.copy(null, null, !this.color, left, right);
          };
          /**
           * For testing.
           *
           * @returns True if all is well.
           */


          LLRBNode.prototype.checkMaxDepth_ = function () {
            var blackDepth = this.check_();
            return Math.pow(2.0, blackDepth) <= this.count() + 1;
          };

          LLRBNode.prototype.check_ = function () {
            if (this.isRed_() && this.left.isRed_()) {
              throw new Error('Red node has red child(' + this.key + ',' + this.value + ')');
            }

            if (this.right.isRed_()) {
              throw new Error('Right child of (' + this.key + ',' + this.value + ') is red');
            }

            var blackDepth = this.left.check_();

            if (blackDepth !== this.right.check_()) {
              throw new Error('Black depths differ');
            } else {
              return blackDepth + (this.isRed_() ? 0 : 1);
            }
          };

          LLRBNode.RED = true;
          LLRBNode.BLACK = false;
          return LLRBNode;
        }();
        /**
         * Represents an empty node (a leaf node in the Red-Black Tree).
         */


        var LLRBEmptyNode =
        /** @class */
        function () {
          function LLRBEmptyNode() {}
          /**
           * Returns a copy of the current node.
           *
           * @returns The node copy.
           */


          LLRBEmptyNode.prototype.copy = function (key, value, color, left, right) {
            return this;
          };
          /**
           * Returns a copy of the tree, with the specified key/value added.
           *
           * @param key - Key to be added.
           * @param value - Value to be added.
           * @param comparator - Comparator.
           * @returns New tree, with item added.
           */


          LLRBEmptyNode.prototype.insert = function (key, value, comparator) {
            return new LLRBNode(key, value, null);
          };
          /**
           * Returns a copy of the tree, with the specified key removed.
           *
           * @param key - The key to remove.
           * @param comparator - Comparator.
           * @returns New tree, with item removed.
           */


          LLRBEmptyNode.prototype.remove = function (key, comparator) {
            return this;
          };
          /**
           * @returns The total number of nodes in the tree.
           */


          LLRBEmptyNode.prototype.count = function () {
            return 0;
          };
          /**
           * @returns True if the tree is empty.
           */


          LLRBEmptyNode.prototype.isEmpty = function () {
            return true;
          };
          /**
           * Traverses the tree in key order and calls the specified action function
           * for each node.
           *
           * @param action - Callback function to be called for each
           * node.  If it returns true, traversal is aborted.
           * @returns True if traversal was aborted.
           */


          LLRBEmptyNode.prototype.inorderTraversal = function (action) {
            return false;
          };
          /**
           * Traverses the tree in reverse key order and calls the specified action function
           * for each node.
           *
           * @param action - Callback function to be called for each
           * node.  If it returns true, traversal is aborted.
           * @returns True if traversal was aborted.
           */


          LLRBEmptyNode.prototype.reverseTraversal = function (action) {
            return false;
          };

          LLRBEmptyNode.prototype.minKey = function () {
            return null;
          };

          LLRBEmptyNode.prototype.maxKey = function () {
            return null;
          };

          LLRBEmptyNode.prototype.check_ = function () {
            return 0;
          };
          /**
           * @returns Whether this node is red.
           */


          LLRBEmptyNode.prototype.isRed_ = function () {
            return false;
          };

          return LLRBEmptyNode;
        }();
        /**
         * An immutable sorted map implementation, based on a Left-leaning Red-Black
         * tree.
         */


        var SortedMap =
        /** @class */
        function () {
          /**
           * @param comparator_ - Key comparator.
           * @param root_ - Optional root node for the map.
           */
          function SortedMap(comparator_, root_) {
            if (root_ === void 0) {
              root_ = SortedMap.EMPTY_NODE;
            }

            this.comparator_ = comparator_;
            this.root_ = root_;
          }
          /**
           * Returns a copy of the map, with the specified key/value added or replaced.
           * (TODO: We should perhaps rename this method to 'put')
           *
           * @param key - Key to be added.
           * @param value - Value to be added.
           * @returns New map, with item added.
           */


          SortedMap.prototype.insert = function (key, value) {
            return new SortedMap(this.comparator_, this.root_.insert(key, value, this.comparator_).copy(null, null, LLRBNode.BLACK, null, null));
          };
          /**
           * Returns a copy of the map, with the specified key removed.
           *
           * @param key - The key to remove.
           * @returns New map, with item removed.
           */


          SortedMap.prototype.remove = function (key) {
            return new SortedMap(this.comparator_, this.root_.remove(key, this.comparator_).copy(null, null, LLRBNode.BLACK, null, null));
          };
          /**
           * Returns the value of the node with the given key, or null.
           *
           * @param key - The key to look up.
           * @returns The value of the node with the given key, or null if the
           * key doesn't exist.
           */


          SortedMap.prototype.get = function (key) {
            var cmp;
            var node = this.root_;

            while (!node.isEmpty()) {
              cmp = this.comparator_(key, node.key);

              if (cmp === 0) {
                return node.value;
              } else if (cmp < 0) {
                node = node.left;
              } else if (cmp > 0) {
                node = node.right;
              }
            }

            return null;
          };
          /**
           * Returns the key of the item *before* the specified key, or null if key is the first item.
           * @param key - The key to find the predecessor of
           * @returns The predecessor key.
           */


          SortedMap.prototype.getPredecessorKey = function (key) {
            var cmp,
                node = this.root_,
                rightParent = null;

            while (!node.isEmpty()) {
              cmp = this.comparator_(key, node.key);

              if (cmp === 0) {
                if (!node.left.isEmpty()) {
                  node = node.left;

                  while (!node.right.isEmpty()) {
                    node = node.right;
                  }

                  return node.key;
                } else if (rightParent) {
                  return rightParent.key;
                } else {
                  return null; // first item.
                }
              } else if (cmp < 0) {
                node = node.left;
              } else if (cmp > 0) {
                rightParent = node;
                node = node.right;
              }
            }

            throw new Error('Attempted to find predecessor key for a nonexistent key.  What gives?');
          };
          /**
           * @returns True if the map is empty.
           */


          SortedMap.prototype.isEmpty = function () {
            return this.root_.isEmpty();
          };
          /**
           * @returns The total number of nodes in the map.
           */


          SortedMap.prototype.count = function () {
            return this.root_.count();
          };
          /**
           * @returns The minimum key in the map.
           */


          SortedMap.prototype.minKey = function () {
            return this.root_.minKey();
          };
          /**
           * @returns The maximum key in the map.
           */


          SortedMap.prototype.maxKey = function () {
            return this.root_.maxKey();
          };
          /**
           * Traverses the map in key order and calls the specified action function
           * for each key/value pair.
           *
           * @param action - Callback function to be called
           * for each key/value pair.  If action returns true, traversal is aborted.
           * @returns The first truthy value returned by action, or the last falsey
           *   value returned by action
           */


          SortedMap.prototype.inorderTraversal = function (action) {
            return this.root_.inorderTraversal(action);
          };
          /**
           * Traverses the map in reverse key order and calls the specified action function
           * for each key/value pair.
           *
           * @param action - Callback function to be called
           * for each key/value pair.  If action returns true, traversal is aborted.
           * @returns True if the traversal was aborted.
           */


          SortedMap.prototype.reverseTraversal = function (action) {
            return this.root_.reverseTraversal(action);
          };
          /**
           * Returns an iterator over the SortedMap.
           * @returns The iterator.
           */


          SortedMap.prototype.getIterator = function (resultGenerator) {
            return new SortedMapIterator(this.root_, null, this.comparator_, false, resultGenerator);
          };

          SortedMap.prototype.getIteratorFrom = function (key, resultGenerator) {
            return new SortedMapIterator(this.root_, key, this.comparator_, false, resultGenerator);
          };

          SortedMap.prototype.getReverseIteratorFrom = function (key, resultGenerator) {
            return new SortedMapIterator(this.root_, key, this.comparator_, true, resultGenerator);
          };

          SortedMap.prototype.getReverseIterator = function (resultGenerator) {
            return new SortedMapIterator(this.root_, null, this.comparator_, true, resultGenerator);
          };
          /**
           * Always use the same empty node, to reduce memory.
           */


          SortedMap.EMPTY_NODE = new LLRBEmptyNode();
          return SortedMap;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        function NAME_ONLY_COMPARATOR(left, right) {
          return nameCompare(left.name, right.name);
        }

        function NAME_COMPARATOR(left, right) {
          return nameCompare(left, right);
        }
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var MAX_NODE;

        function setMaxNode(val) {
          MAX_NODE = val;
        }

        var priorityHashText = function priorityHashText(priority) {
          if (typeof priority === 'number') {
            return 'number:' + doubleToIEEE754String(priority);
          } else {
            return 'string:' + priority;
          }
        };
        /**
         * Validates that a priority snapshot Node is valid.
         */


        var validatePriorityNode = function validatePriorityNode(priorityNode) {
          if (priorityNode.isLeafNode()) {
            var val = priorityNode.val();
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(typeof val === 'string' || typeof val === 'number' || typeof val === 'object' && Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["contains"])(val, '.sv'), 'Priority must be a string or number.');
          } else {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(priorityNode === MAX_NODE || priorityNode.isEmpty(), 'priority of unexpected type.');
          } // Don't call getPriority() on MAX_NODE to avoid hitting assertion.


          Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(priorityNode === MAX_NODE || priorityNode.getPriority().isEmpty(), "Priority nodes can't have a priority of their own.");
        };
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var __childrenNodeConstructor;
        /**
         * LeafNode is a class for storing leaf nodes in a DataSnapshot.  It
         * implements Node and stores the value of the node (a string,
         * number, or boolean) accessible via getValue().
         */


        var LeafNode =
        /** @class */
        function () {
          /**
           * @param value_ - The value to store in this leaf node. The object type is
           * possible in the event of a deferred value
           * @param priorityNode_ - The priority of this node.
           */
          function LeafNode(value_, priorityNode_) {
            if (priorityNode_ === void 0) {
              priorityNode_ = LeafNode.__childrenNodeConstructor.EMPTY_NODE;
            }

            this.value_ = value_;
            this.priorityNode_ = priorityNode_;
            this.lazyHash_ = null;
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(this.value_ !== undefined && this.value_ !== null, "LeafNode shouldn't be created with null/undefined value.");
            validatePriorityNode(this.priorityNode_);
          }

          Object.defineProperty(LeafNode, "__childrenNodeConstructor", {
            get: function get() {
              return __childrenNodeConstructor;
            },
            set: function set(val) {
              __childrenNodeConstructor = val;
            },
            enumerable: false,
            configurable: true
          });
          /** @inheritDoc */

          LeafNode.prototype.isLeafNode = function () {
            return true;
          };
          /** @inheritDoc */


          LeafNode.prototype.getPriority = function () {
            return this.priorityNode_;
          };
          /** @inheritDoc */


          LeafNode.prototype.updatePriority = function (newPriorityNode) {
            return new LeafNode(this.value_, newPriorityNode);
          };
          /** @inheritDoc */


          LeafNode.prototype.getImmediateChild = function (childName) {
            // Hack to treat priority as a regular child
            if (childName === '.priority') {
              return this.priorityNode_;
            } else {
              return LeafNode.__childrenNodeConstructor.EMPTY_NODE;
            }
          };
          /** @inheritDoc */


          LeafNode.prototype.getChild = function (path) {
            if (pathIsEmpty(path)) {
              return this;
            } else if (pathGetFront(path) === '.priority') {
              return this.priorityNode_;
            } else {
              return LeafNode.__childrenNodeConstructor.EMPTY_NODE;
            }
          };

          LeafNode.prototype.hasChild = function () {
            return false;
          };
          /** @inheritDoc */


          LeafNode.prototype.getPredecessorChildName = function (childName, childNode) {
            return null;
          };
          /** @inheritDoc */


          LeafNode.prototype.updateImmediateChild = function (childName, newChildNode) {
            if (childName === '.priority') {
              return this.updatePriority(newChildNode);
            } else if (newChildNode.isEmpty() && childName !== '.priority') {
              return this;
            } else {
              return LeafNode.__childrenNodeConstructor.EMPTY_NODE.updateImmediateChild(childName, newChildNode).updatePriority(this.priorityNode_);
            }
          };
          /** @inheritDoc */


          LeafNode.prototype.updateChild = function (path, newChildNode) {
            var front = pathGetFront(path);

            if (front === null) {
              return newChildNode;
            } else if (newChildNode.isEmpty() && front !== '.priority') {
              return this;
            } else {
              Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(front !== '.priority' || pathGetLength(path) === 1, '.priority must be the last token in a path');
              return this.updateImmediateChild(front, LeafNode.__childrenNodeConstructor.EMPTY_NODE.updateChild(pathPopFront(path), newChildNode));
            }
          };
          /** @inheritDoc */


          LeafNode.prototype.isEmpty = function () {
            return false;
          };
          /** @inheritDoc */


          LeafNode.prototype.numChildren = function () {
            return 0;
          };
          /** @inheritDoc */


          LeafNode.prototype.forEachChild = function (index, action) {
            return false;
          };

          LeafNode.prototype.val = function (exportFormat) {
            if (exportFormat && !this.getPriority().isEmpty()) {
              return {
                '.value': this.getValue(),
                '.priority': this.getPriority().val()
              };
            } else {
              return this.getValue();
            }
          };
          /** @inheritDoc */


          LeafNode.prototype.hash = function () {
            if (this.lazyHash_ === null) {
              var toHash = '';

              if (!this.priorityNode_.isEmpty()) {
                toHash += 'priority:' + priorityHashText(this.priorityNode_.val()) + ':';
              }

              var type = typeof this.value_;
              toHash += type + ':';

              if (type === 'number') {
                toHash += doubleToIEEE754String(this.value_);
              } else {
                toHash += this.value_;
              }

              this.lazyHash_ = sha1(toHash);
            }

            return this.lazyHash_;
          };
          /**
           * Returns the value of the leaf node.
           * @returns The value of the node.
           */


          LeafNode.prototype.getValue = function () {
            return this.value_;
          };

          LeafNode.prototype.compareTo = function (other) {
            if (other === LeafNode.__childrenNodeConstructor.EMPTY_NODE) {
              return 1;
            } else if (other instanceof LeafNode.__childrenNodeConstructor) {
              return -1;
            } else {
              Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(other.isLeafNode(), 'Unknown node type');
              return this.compareToLeafNode_(other);
            }
          };
          /**
           * Comparison specifically for two leaf nodes
           */


          LeafNode.prototype.compareToLeafNode_ = function (otherLeaf) {
            var otherLeafType = typeof otherLeaf.value_;
            var thisLeafType = typeof this.value_;
            var otherIndex = LeafNode.VALUE_TYPE_ORDER.indexOf(otherLeafType);
            var thisIndex = LeafNode.VALUE_TYPE_ORDER.indexOf(thisLeafType);
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(otherIndex >= 0, 'Unknown leaf type: ' + otherLeafType);
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(thisIndex >= 0, 'Unknown leaf type: ' + thisLeafType);

            if (otherIndex === thisIndex) {
              // Same type, compare values
              if (thisLeafType === 'object') {
                // Deferred value nodes are all equal, but we should also never get to this point...
                return 0;
              } else {
                // Note that this works because true > false, all others are number or string comparisons
                if (this.value_ < otherLeaf.value_) {
                  return -1;
                } else if (this.value_ === otherLeaf.value_) {
                  return 0;
                } else {
                  return 1;
                }
              }
            } else {
              return thisIndex - otherIndex;
            }
          };

          LeafNode.prototype.withIndex = function () {
            return this;
          };

          LeafNode.prototype.isIndexed = function () {
            return true;
          };

          LeafNode.prototype.equals = function (other) {
            if (other === this) {
              return true;
            } else if (other.isLeafNode()) {
              var otherLeaf = other;
              return this.value_ === otherLeaf.value_ && this.priorityNode_.equals(otherLeaf.priorityNode_);
            } else {
              return false;
            }
          };
          /**
           * The sort order for comparing leaf nodes of different types. If two leaf nodes have
           * the same type, the comparison falls back to their value
           */


          LeafNode.VALUE_TYPE_ORDER = ['object', 'boolean', 'number', 'string'];
          return LeafNode;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var nodeFromJSON;
        var MAX_NODE$1;

        function setNodeFromJSON(val) {
          nodeFromJSON = val;
        }

        function setMaxNode$1(val) {
          MAX_NODE$1 = val;
        }

        var PriorityIndex =
        /** @class */
        function (_super) {
          Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__extends"])(PriorityIndex, _super);

          function PriorityIndex() {
            return _super !== null && _super.apply(this, arguments) || this;
          }

          PriorityIndex.prototype.compare = function (a, b) {
            var aPriority = a.node.getPriority();
            var bPriority = b.node.getPriority();
            var indexCmp = aPriority.compareTo(bPriority);

            if (indexCmp === 0) {
              return nameCompare(a.name, b.name);
            } else {
              return indexCmp;
            }
          };

          PriorityIndex.prototype.isDefinedOn = function (node) {
            return !node.getPriority().isEmpty();
          };

          PriorityIndex.prototype.indexedValueChanged = function (oldNode, newNode) {
            return !oldNode.getPriority().equals(newNode.getPriority());
          };

          PriorityIndex.prototype.minPost = function () {
            // eslint-disable-next-line @typescript-eslint/no-explicit-any
            return NamedNode.MIN;
          };

          PriorityIndex.prototype.maxPost = function () {
            return new NamedNode(MAX_NAME, new LeafNode('[PRIORITY-POST]', MAX_NODE$1));
          };

          PriorityIndex.prototype.makePost = function (indexValue, name) {
            var priorityNode = nodeFromJSON(indexValue);
            return new NamedNode(name, new LeafNode('[PRIORITY-POST]', priorityNode));
          };
          /**
           * @returns String representation for inclusion in a query spec
           */


          PriorityIndex.prototype.toString = function () {
            return '.priority';
          };

          return PriorityIndex;
        }(Index);

        var PRIORITY_INDEX = new PriorityIndex();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        var LOG_2 = Math.log(2);

        var Base12Num =
        /** @class */
        function () {
          function Base12Num(length) {
            var logBase2 = function logBase2(num) {
              // eslint-disable-next-line @typescript-eslint/no-explicit-any
              return parseInt(Math.log(num) / LOG_2, 10);
            };

            var bitMask = function bitMask(bits) {
              return parseInt(Array(bits + 1).join('1'), 2);
            };

            this.count = logBase2(length + 1);
            this.current_ = this.count - 1;
            var mask = bitMask(this.count);
            this.bits_ = length + 1 & mask;
          }

          Base12Num.prototype.nextBitIsOne = function () {
            //noinspection JSBitwiseOperatorUsage
            var result = !(this.bits_ & 0x1 << this.current_);
            this.current_--;
            return result;
          };

          return Base12Num;
        }();
        /**
         * Takes a list of child nodes and constructs a SortedSet using the given comparison
         * function
         *
         * Uses the algorithm described in the paper linked here:
         * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.46.1458
         *
         * @param childList - Unsorted list of children
         * @param cmp - The comparison method to be used
         * @param keyFn - An optional function to extract K from a node wrapper, if K's
         * type is not NamedNode
         * @param mapSortFn - An optional override for comparator used by the generated sorted map
         */


        var buildChildSet = function buildChildSet(childList, cmp, keyFn, mapSortFn) {
          childList.sort(cmp);

          var buildBalancedTree = function buildBalancedTree(low, high) {
            var length = high - low;
            var namedNode;
            var key;

            if (length === 0) {
              return null;
            } else if (length === 1) {
              namedNode = childList[low];
              key = keyFn ? keyFn(namedNode) : namedNode;
              return new LLRBNode(key, namedNode.node, LLRBNode.BLACK, null, null);
            } else {
              // eslint-disable-next-line @typescript-eslint/no-explicit-any
              var middle = parseInt(length / 2, 10) + low;
              var left = buildBalancedTree(low, middle);
              var right = buildBalancedTree(middle + 1, high);
              namedNode = childList[middle];
              key = keyFn ? keyFn(namedNode) : namedNode;
              return new LLRBNode(key, namedNode.node, LLRBNode.BLACK, left, right);
            }
          };

          var buildFrom12Array = function buildFrom12Array(base12) {
            var node = null;
            var root = null;
            var index = childList.length;

            var buildPennant = function buildPennant(chunkSize, color) {
              var low = index - chunkSize;
              var high = index;
              index -= chunkSize;
              var childTree = buildBalancedTree(low + 1, high);
              var namedNode = childList[low];
              var key = keyFn ? keyFn(namedNode) : namedNode;
              attachPennant(new LLRBNode(key, namedNode.node, color, null, childTree));
            };

            var attachPennant = function attachPennant(pennant) {
              if (node) {
                node.left = pennant;
                node = pennant;
              } else {
                root = pennant;
                node = pennant;
              }
            };

            for (var i = 0; i < base12.count; ++i) {
              var isOne = base12.nextBitIsOne(); // The number of nodes taken in each slice is 2^(arr.length - (i + 1))

              var chunkSize = Math.pow(2, base12.count - (i + 1));

              if (isOne) {
                buildPennant(chunkSize, LLRBNode.BLACK);
              } else {
                // current == 2
                buildPennant(chunkSize, LLRBNode.BLACK);
                buildPennant(chunkSize, LLRBNode.RED);
              }
            }

            return root;
          };

          var base12 = new Base12Num(childList.length);
          var root = buildFrom12Array(base12); // eslint-disable-next-line @typescript-eslint/no-explicit-any

          return new SortedMap(mapSortFn || cmp, root);
        };
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var _defaultIndexMap;

        var fallbackObject = {};

        var IndexMap =
        /** @class */
        function () {
          function IndexMap(indexes_, indexSet_) {
            this.indexes_ = indexes_;
            this.indexSet_ = indexSet_;
          }

          Object.defineProperty(IndexMap, "Default", {
            /**
             * The default IndexMap for nodes without a priority
             */
            get: function get() {
              Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(fallbackObject && PRIORITY_INDEX, 'ChildrenNode.ts has not been loaded');
              _defaultIndexMap = _defaultIndexMap || new IndexMap({
                '.priority': fallbackObject
              }, {
                '.priority': PRIORITY_INDEX
              });
              return _defaultIndexMap;
            },
            enumerable: false,
            configurable: true
          });

          IndexMap.prototype.get = function (indexKey) {
            var sortedMap = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["safeGet"])(this.indexes_, indexKey);

            if (!sortedMap) {
              throw new Error('No index defined for ' + indexKey);
            }

            if (sortedMap instanceof SortedMap) {
              return sortedMap;
            } else {
              // The index exists, but it falls back to just name comparison. Return null so that the calling code uses the
              // regular child map
              return null;
            }
          };

          IndexMap.prototype.hasIndex = function (indexDefinition) {
            return Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["contains"])(this.indexSet_, indexDefinition.toString());
          };

          IndexMap.prototype.addIndex = function (indexDefinition, existingChildren) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(indexDefinition !== KEY_INDEX, "KeyIndex always exists and isn't meant to be added to the IndexMap.");
            var childList = [];
            var sawIndexedValue = false;
            var iter = existingChildren.getIterator(NamedNode.Wrap);
            var next = iter.getNext();

            while (next) {
              sawIndexedValue = sawIndexedValue || indexDefinition.isDefinedOn(next.node);
              childList.push(next);
              next = iter.getNext();
            }

            var newIndex;

            if (sawIndexedValue) {
              newIndex = buildChildSet(childList, indexDefinition.getCompare());
            } else {
              newIndex = fallbackObject;
            }

            var indexName = indexDefinition.toString();
            var newIndexSet = Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__assign"])({}, this.indexSet_);
            newIndexSet[indexName] = indexDefinition;
            var newIndexes = Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__assign"])({}, this.indexes_);
            newIndexes[indexName] = newIndex;
            return new IndexMap(newIndexes, newIndexSet);
          };
          /**
           * Ensure that this node is properly tracked in any indexes that we're maintaining
           */


          IndexMap.prototype.addToIndexes = function (namedNode, existingChildren) {
            var _this = this;

            var newIndexes = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["map"])(this.indexes_, function (indexedChildren, indexName) {
              var index = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["safeGet"])(_this.indexSet_, indexName);
              Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(index, 'Missing index implementation for ' + indexName);

              if (indexedChildren === fallbackObject) {
                // Check to see if we need to index everything
                if (index.isDefinedOn(namedNode.node)) {
                  // We need to build this index
                  var childList = [];
                  var iter = existingChildren.getIterator(NamedNode.Wrap);
                  var next = iter.getNext();

                  while (next) {
                    if (next.name !== namedNode.name) {
                      childList.push(next);
                    }

                    next = iter.getNext();
                  }

                  childList.push(namedNode);
                  return buildChildSet(childList, index.getCompare());
                } else {
                  // No change, this remains a fallback
                  return fallbackObject;
                }
              } else {
                var existingSnap = existingChildren.get(namedNode.name);
                var newChildren = indexedChildren;

                if (existingSnap) {
                  newChildren = newChildren.remove(new NamedNode(namedNode.name, existingSnap));
                }

                return newChildren.insert(namedNode, namedNode.node);
              }
            });
            return new IndexMap(newIndexes, this.indexSet_);
          };
          /**
           * Create a new IndexMap instance with the given value removed
           */


          IndexMap.prototype.removeFromIndexes = function (namedNode, existingChildren) {
            var newIndexes = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["map"])(this.indexes_, function (indexedChildren) {
              if (indexedChildren === fallbackObject) {
                // This is the fallback. Just return it, nothing to do in this case
                return indexedChildren;
              } else {
                var existingSnap = existingChildren.get(namedNode.name);

                if (existingSnap) {
                  return indexedChildren.remove(new NamedNode(namedNode.name, existingSnap));
                } else {
                  // No record of this child
                  return indexedChildren;
                }
              }
            });
            return new IndexMap(newIndexes, this.indexSet_);
          };

          return IndexMap;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */
        // TODO: For memory savings, don't store priorityNode_ if it's empty.


        var EMPTY_NODE;
        /**
         * ChildrenNode is a class for storing internal nodes in a DataSnapshot
         * (i.e. nodes with children).  It implements Node and stores the
         * list of children in the children property, sorted by child name.
         */

        var ChildrenNode =
        /** @class */
        function () {
          /**
           * @param children_ - List of children of this node..
           * @param priorityNode_ - The priority of this node (as a snapshot node).
           */
          function ChildrenNode(children_, priorityNode_, indexMap_) {
            this.children_ = children_;
            this.priorityNode_ = priorityNode_;
            this.indexMap_ = indexMap_;
            this.lazyHash_ = null;
            /**
             * Note: The only reason we allow null priority is for EMPTY_NODE, since we can't use
             * EMPTY_NODE as the priority of EMPTY_NODE.  We might want to consider making EMPTY_NODE its own
             * class instead of an empty ChildrenNode.
             */

            if (this.priorityNode_) {
              validatePriorityNode(this.priorityNode_);
            }

            if (this.children_.isEmpty()) {
              Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(!this.priorityNode_ || this.priorityNode_.isEmpty(), 'An empty node cannot have a priority');
            }
          }

          Object.defineProperty(ChildrenNode, "EMPTY_NODE", {
            get: function get() {
              return EMPTY_NODE || (EMPTY_NODE = new ChildrenNode(new SortedMap(NAME_COMPARATOR), null, IndexMap.Default));
            },
            enumerable: false,
            configurable: true
          });
          /** @inheritDoc */

          ChildrenNode.prototype.isLeafNode = function () {
            return false;
          };
          /** @inheritDoc */


          ChildrenNode.prototype.getPriority = function () {
            return this.priorityNode_ || EMPTY_NODE;
          };
          /** @inheritDoc */


          ChildrenNode.prototype.updatePriority = function (newPriorityNode) {
            if (this.children_.isEmpty()) {
              // Don't allow priorities on empty nodes
              return this;
            } else {
              return new ChildrenNode(this.children_, newPriorityNode, this.indexMap_);
            }
          };
          /** @inheritDoc */


          ChildrenNode.prototype.getImmediateChild = function (childName) {
            // Hack to treat priority as a regular child
            if (childName === '.priority') {
              return this.getPriority();
            } else {
              var child = this.children_.get(childName);
              return child === null ? EMPTY_NODE : child;
            }
          };
          /** @inheritDoc */


          ChildrenNode.prototype.getChild = function (path) {
            var front = pathGetFront(path);

            if (front === null) {
              return this;
            }

            return this.getImmediateChild(front).getChild(pathPopFront(path));
          };
          /** @inheritDoc */


          ChildrenNode.prototype.hasChild = function (childName) {
            return this.children_.get(childName) !== null;
          };
          /** @inheritDoc */


          ChildrenNode.prototype.updateImmediateChild = function (childName, newChildNode) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(newChildNode, 'We should always be passing snapshot nodes');

            if (childName === '.priority') {
              return this.updatePriority(newChildNode);
            } else {
              var namedNode = new NamedNode(childName, newChildNode);
              var newChildren = void 0,
                  newIndexMap = void 0;

              if (newChildNode.isEmpty()) {
                newChildren = this.children_.remove(childName);
                newIndexMap = this.indexMap_.removeFromIndexes(namedNode, this.children_);
              } else {
                newChildren = this.children_.insert(childName, newChildNode);
                newIndexMap = this.indexMap_.addToIndexes(namedNode, this.children_);
              }

              var newPriority = newChildren.isEmpty() ? EMPTY_NODE : this.priorityNode_;
              return new ChildrenNode(newChildren, newPriority, newIndexMap);
            }
          };
          /** @inheritDoc */


          ChildrenNode.prototype.updateChild = function (path, newChildNode) {
            var front = pathGetFront(path);

            if (front === null) {
              return newChildNode;
            } else {
              Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(pathGetFront(path) !== '.priority' || pathGetLength(path) === 1, '.priority must be the last token in a path');
              var newImmediateChild = this.getImmediateChild(front).updateChild(pathPopFront(path), newChildNode);
              return this.updateImmediateChild(front, newImmediateChild);
            }
          };
          /** @inheritDoc */


          ChildrenNode.prototype.isEmpty = function () {
            return this.children_.isEmpty();
          };
          /** @inheritDoc */


          ChildrenNode.prototype.numChildren = function () {
            return this.children_.count();
          };
          /** @inheritDoc */


          ChildrenNode.prototype.val = function (exportFormat) {
            if (this.isEmpty()) {
              return null;
            }

            var obj = {};
            var numKeys = 0,
                maxKey = 0,
                allIntegerKeys = true;
            this.forEachChild(PRIORITY_INDEX, function (key, childNode) {
              obj[key] = childNode.val(exportFormat);
              numKeys++;

              if (allIntegerKeys && ChildrenNode.INTEGER_REGEXP_.test(key)) {
                maxKey = Math.max(maxKey, Number(key));
              } else {
                allIntegerKeys = false;
              }
            });

            if (!exportFormat && allIntegerKeys && maxKey < 2 * numKeys) {
              // convert to array.
              var array = []; // eslint-disable-next-line guard-for-in

              for (var key in obj) {
                array[key] = obj[key];
              }

              return array;
            } else {
              if (exportFormat && !this.getPriority().isEmpty()) {
                obj['.priority'] = this.getPriority().val();
              }

              return obj;
            }
          };
          /** @inheritDoc */


          ChildrenNode.prototype.hash = function () {
            if (this.lazyHash_ === null) {
              var toHash_1 = '';

              if (!this.getPriority().isEmpty()) {
                toHash_1 += 'priority:' + priorityHashText(this.getPriority().val()) + ':';
              }

              this.forEachChild(PRIORITY_INDEX, function (key, childNode) {
                var childHash = childNode.hash();

                if (childHash !== '') {
                  toHash_1 += ':' + key + ':' + childHash;
                }
              });
              this.lazyHash_ = toHash_1 === '' ? '' : sha1(toHash_1);
            }

            return this.lazyHash_;
          };
          /** @inheritDoc */


          ChildrenNode.prototype.getPredecessorChildName = function (childName, childNode, index) {
            var idx = this.resolveIndex_(index);

            if (idx) {
              var predecessor = idx.getPredecessorKey(new NamedNode(childName, childNode));
              return predecessor ? predecessor.name : null;
            } else {
              return this.children_.getPredecessorKey(childName);
            }
          };

          ChildrenNode.prototype.getFirstChildName = function (indexDefinition) {
            var idx = this.resolveIndex_(indexDefinition);

            if (idx) {
              var minKey = idx.minKey();
              return minKey && minKey.name;
            } else {
              return this.children_.minKey();
            }
          };

          ChildrenNode.prototype.getFirstChild = function (indexDefinition) {
            var minKey = this.getFirstChildName(indexDefinition);

            if (minKey) {
              return new NamedNode(minKey, this.children_.get(minKey));
            } else {
              return null;
            }
          };
          /**
           * Given an index, return the key name of the largest value we have, according to that index
           */


          ChildrenNode.prototype.getLastChildName = function (indexDefinition) {
            var idx = this.resolveIndex_(indexDefinition);

            if (idx) {
              var maxKey = idx.maxKey();
              return maxKey && maxKey.name;
            } else {
              return this.children_.maxKey();
            }
          };

          ChildrenNode.prototype.getLastChild = function (indexDefinition) {
            var maxKey = this.getLastChildName(indexDefinition);

            if (maxKey) {
              return new NamedNode(maxKey, this.children_.get(maxKey));
            } else {
              return null;
            }
          };

          ChildrenNode.prototype.forEachChild = function (index, action) {
            var idx = this.resolveIndex_(index);

            if (idx) {
              return idx.inorderTraversal(function (wrappedNode) {
                return action(wrappedNode.name, wrappedNode.node);
              });
            } else {
              return this.children_.inorderTraversal(action);
            }
          };

          ChildrenNode.prototype.getIterator = function (indexDefinition) {
            return this.getIteratorFrom(indexDefinition.minPost(), indexDefinition);
          };

          ChildrenNode.prototype.getIteratorFrom = function (startPost, indexDefinition) {
            var idx = this.resolveIndex_(indexDefinition);

            if (idx) {
              return idx.getIteratorFrom(startPost, function (key) {
                return key;
              });
            } else {
              var iterator = this.children_.getIteratorFrom(startPost.name, NamedNode.Wrap);
              var next = iterator.peek();

              while (next != null && indexDefinition.compare(next, startPost) < 0) {
                iterator.getNext();
                next = iterator.peek();
              }

              return iterator;
            }
          };

          ChildrenNode.prototype.getReverseIterator = function (indexDefinition) {
            return this.getReverseIteratorFrom(indexDefinition.maxPost(), indexDefinition);
          };

          ChildrenNode.prototype.getReverseIteratorFrom = function (endPost, indexDefinition) {
            var idx = this.resolveIndex_(indexDefinition);

            if (idx) {
              return idx.getReverseIteratorFrom(endPost, function (key) {
                return key;
              });
            } else {
              var iterator = this.children_.getReverseIteratorFrom(endPost.name, NamedNode.Wrap);
              var next = iterator.peek();

              while (next != null && indexDefinition.compare(next, endPost) > 0) {
                iterator.getNext();
                next = iterator.peek();
              }

              return iterator;
            }
          };

          ChildrenNode.prototype.compareTo = function (other) {
            if (this.isEmpty()) {
              if (other.isEmpty()) {
                return 0;
              } else {
                return -1;
              }
            } else if (other.isLeafNode() || other.isEmpty()) {
              return 1;
            } else if (other === MAX_NODE$2) {
              return -1;
            } else {
              // Must be another node with children.
              return 0;
            }
          };

          ChildrenNode.prototype.withIndex = function (indexDefinition) {
            if (indexDefinition === KEY_INDEX || this.indexMap_.hasIndex(indexDefinition)) {
              return this;
            } else {
              var newIndexMap = this.indexMap_.addIndex(indexDefinition, this.children_);
              return new ChildrenNode(this.children_, this.priorityNode_, newIndexMap);
            }
          };

          ChildrenNode.prototype.isIndexed = function (index) {
            return index === KEY_INDEX || this.indexMap_.hasIndex(index);
          };

          ChildrenNode.prototype.equals = function (other) {
            if (other === this) {
              return true;
            } else if (other.isLeafNode()) {
              return false;
            } else {
              var otherChildrenNode = other;

              if (!this.getPriority().equals(otherChildrenNode.getPriority())) {
                return false;
              } else if (this.children_.count() === otherChildrenNode.children_.count()) {
                var thisIter = this.getIterator(PRIORITY_INDEX);
                var otherIter = otherChildrenNode.getIterator(PRIORITY_INDEX);
                var thisCurrent = thisIter.getNext();
                var otherCurrent = otherIter.getNext();

                while (thisCurrent && otherCurrent) {
                  if (thisCurrent.name !== otherCurrent.name || !thisCurrent.node.equals(otherCurrent.node)) {
                    return false;
                  }

                  thisCurrent = thisIter.getNext();
                  otherCurrent = otherIter.getNext();
                }

                return thisCurrent === null && otherCurrent === null;
              } else {
                return false;
              }
            }
          };
          /**
           * Returns a SortedMap ordered by index, or null if the default (by-key) ordering can be used
           * instead.
           *
           */


          ChildrenNode.prototype.resolveIndex_ = function (indexDefinition) {
            if (indexDefinition === KEY_INDEX) {
              return null;
            } else {
              return this.indexMap_.get(indexDefinition.toString());
            }
          };

          ChildrenNode.INTEGER_REGEXP_ = /^(0|[1-9]\d*)$/;
          return ChildrenNode;
        }();

        var MaxNode =
        /** @class */
        function (_super) {
          Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__extends"])(MaxNode, _super);

          function MaxNode() {
            return _super.call(this, new SortedMap(NAME_COMPARATOR), ChildrenNode.EMPTY_NODE, IndexMap.Default) || this;
          }

          MaxNode.prototype.compareTo = function (other) {
            if (other === this) {
              return 0;
            } else {
              return 1;
            }
          };

          MaxNode.prototype.equals = function (other) {
            // Not that we every compare it, but MAX_NODE is only ever equal to itself
            return other === this;
          };

          MaxNode.prototype.getPriority = function () {
            return this;
          };

          MaxNode.prototype.getImmediateChild = function (childName) {
            return ChildrenNode.EMPTY_NODE;
          };

          MaxNode.prototype.isEmpty = function () {
            return false;
          };

          return MaxNode;
        }(ChildrenNode);
        /**
         * Marker that will sort higher than any other snapshot.
         */


        var MAX_NODE$2 = new MaxNode();
        Object.defineProperties(NamedNode, {
          MIN: {
            value: new NamedNode(MIN_NAME, ChildrenNode.EMPTY_NODE)
          },
          MAX: {
            value: new NamedNode(MAX_NAME, MAX_NODE$2)
          }
        });
        /**
         * Reference Extensions
         */

        KeyIndex.__EMPTY_NODE = ChildrenNode.EMPTY_NODE;
        LeafNode.__childrenNodeConstructor = ChildrenNode;
        setMaxNode(MAX_NODE$2);
        setMaxNode$1(MAX_NODE$2);
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        var USE_HINZE = true;
        /**
         * Constructs a snapshot node representing the passed JSON and returns it.
         * @param json - JSON to create a node for.
         * @param priority - Optional priority to use.  This will be ignored if the
         * passed JSON contains a .priority property.
         */

        function nodeFromJSON$1(json, priority) {
          if (priority === void 0) {
            priority = null;
          }

          if (json === null) {
            return ChildrenNode.EMPTY_NODE;
          }

          if (typeof json === 'object' && '.priority' in json) {
            priority = json['.priority'];
          }

          Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(priority === null || typeof priority === 'string' || typeof priority === 'number' || typeof priority === 'object' && '.sv' in priority, 'Invalid priority type found: ' + typeof priority);

          if (typeof json === 'object' && '.value' in json && json['.value'] !== null) {
            json = json['.value'];
          } // Valid leaf nodes include non-objects or server-value wrapper objects


          if (typeof json !== 'object' || '.sv' in json) {
            var jsonLeaf = json;
            return new LeafNode(jsonLeaf, nodeFromJSON$1(priority));
          }

          if (!(json instanceof Array) && USE_HINZE) {
            var children_1 = [];
            var childrenHavePriority_1 = false;
            var hinzeJsonObj = json;
            each(hinzeJsonObj, function (key, child) {
              if (key.substring(0, 1) !== '.') {
                // Ignore metadata nodes
                var childNode = nodeFromJSON$1(child);

                if (!childNode.isEmpty()) {
                  childrenHavePriority_1 = childrenHavePriority_1 || !childNode.getPriority().isEmpty();
                  children_1.push(new NamedNode(key, childNode));
                }
              }
            });

            if (children_1.length === 0) {
              return ChildrenNode.EMPTY_NODE;
            }

            var childSet = buildChildSet(children_1, NAME_ONLY_COMPARATOR, function (namedNode) {
              return namedNode.name;
            }, NAME_COMPARATOR);

            if (childrenHavePriority_1) {
              var sortedChildSet = buildChildSet(children_1, PRIORITY_INDEX.getCompare());
              return new ChildrenNode(childSet, nodeFromJSON$1(priority), new IndexMap({
                '.priority': sortedChildSet
              }, {
                '.priority': PRIORITY_INDEX
              }));
            } else {
              return new ChildrenNode(childSet, nodeFromJSON$1(priority), IndexMap.Default);
            }
          } else {
            var node_1 = ChildrenNode.EMPTY_NODE;
            each(json, function (key, childData) {
              if (Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["contains"])(json, key)) {
                if (key.substring(0, 1) !== '.') {
                  // ignore metadata nodes.
                  var childNode = nodeFromJSON$1(childData);

                  if (childNode.isLeafNode() || !childNode.isEmpty()) {
                    node_1 = node_1.updateImmediateChild(key, childNode);
                  }
                }
              }
            });
            return node_1.updatePriority(nodeFromJSON$1(priority));
          }
        }

        setNodeFromJSON(nodeFromJSON$1);
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        var PathIndex =
        /** @class */
        function (_super) {
          Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__extends"])(PathIndex, _super);

          function PathIndex(indexPath_) {
            var _this = _super.call(this) || this;

            _this.indexPath_ = indexPath_;
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(!pathIsEmpty(indexPath_) && pathGetFront(indexPath_) !== '.priority', "Can't create PathIndex with empty path or .priority key");
            return _this;
          }

          PathIndex.prototype.extractChild = function (snap) {
            return snap.getChild(this.indexPath_);
          };

          PathIndex.prototype.isDefinedOn = function (node) {
            return !node.getChild(this.indexPath_).isEmpty();
          };

          PathIndex.prototype.compare = function (a, b) {
            var aChild = this.extractChild(a.node);
            var bChild = this.extractChild(b.node);
            var indexCmp = aChild.compareTo(bChild);

            if (indexCmp === 0) {
              return nameCompare(a.name, b.name);
            } else {
              return indexCmp;
            }
          };

          PathIndex.prototype.makePost = function (indexValue, name) {
            var valueNode = nodeFromJSON$1(indexValue);
            var node = ChildrenNode.EMPTY_NODE.updateChild(this.indexPath_, valueNode);
            return new NamedNode(name, node);
          };

          PathIndex.prototype.maxPost = function () {
            var node = ChildrenNode.EMPTY_NODE.updateChild(this.indexPath_, MAX_NODE$2);
            return new NamedNode(MAX_NAME, node);
          };

          PathIndex.prototype.toString = function () {
            return pathSlice(this.indexPath_, 0).join('/');
          };

          return PathIndex;
        }(Index);
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var ValueIndex =
        /** @class */
        function (_super) {
          Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__extends"])(ValueIndex, _super);

          function ValueIndex() {
            return _super !== null && _super.apply(this, arguments) || this;
          }

          ValueIndex.prototype.compare = function (a, b) {
            var indexCmp = a.node.compareTo(b.node);

            if (indexCmp === 0) {
              return nameCompare(a.name, b.name);
            } else {
              return indexCmp;
            }
          };

          ValueIndex.prototype.isDefinedOn = function (node) {
            return true;
          };

          ValueIndex.prototype.indexedValueChanged = function (oldNode, newNode) {
            return !oldNode.equals(newNode);
          };

          ValueIndex.prototype.minPost = function () {
            // eslint-disable-next-line @typescript-eslint/no-explicit-any
            return NamedNode.MIN;
          };

          ValueIndex.prototype.maxPost = function () {
            // eslint-disable-next-line @typescript-eslint/no-explicit-any
            return NamedNode.MAX;
          };

          ValueIndex.prototype.makePost = function (indexValue, name) {
            var valueNode = nodeFromJSON$1(indexValue);
            return new NamedNode(name, valueNode);
          };
          /**
           * @returns String representation for inclusion in a query spec
           */


          ValueIndex.prototype.toString = function () {
            return '.value';
          };

          return ValueIndex;
        }(Index);

        var VALUE_INDEX = new ValueIndex();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */
        // Modeled after base64 web-safe chars, but ordered by ASCII.

        var PUSH_CHARS = '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz';
        var MIN_PUSH_CHAR = '-';
        var MAX_PUSH_CHAR = 'z';
        var MAX_KEY_LEN = 786;
        /**
         * Fancy ID generator that creates 20-character string identifiers with the
         * following properties:
         *
         * 1. They're based on timestamp so that they sort *after* any existing ids.
         * 2. They contain 72-bits of random data after the timestamp so that IDs won't
         *    collide with other clients' IDs.
         * 3. They sort *lexicographically* (so the timestamp is converted to characters
         *    that will sort properly).
         * 4. They're monotonically increasing. Even if you generate more than one in
         *    the same timestamp, the latter ones will sort after the former ones. We do
         *    this by using the previous random bits but "incrementing" them by 1 (only
         *    in the case of a timestamp collision).
         */

        var nextPushId = function () {
          // Timestamp of last push, used to prevent local collisions if you push twice
          // in one ms.
          var lastPushTime = 0; // We generate 72-bits of randomness which get turned into 12 characters and
          // appended to the timestamp to prevent collisions with other clients. We
          // store the last characters we generated because in the event of a collision,
          // we'll use those same characters except "incremented" by one.

          var lastRandChars = [];
          return function (now) {
            var duplicateTime = now === lastPushTime;
            lastPushTime = now;
            var i;
            var timeStampChars = new Array(8);

            for (i = 7; i >= 0; i--) {
              timeStampChars[i] = PUSH_CHARS.charAt(now % 64); // NOTE: Can't use << here because javascript will convert to int and lose
              // the upper bits.

              now = Math.floor(now / 64);
            }

            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(now === 0, 'Cannot push at time == 0');
            var id = timeStampChars.join('');

            if (!duplicateTime) {
              for (i = 0; i < 12; i++) {
                lastRandChars[i] = Math.floor(Math.random() * 64);
              }
            } else {
              // If the timestamp hasn't changed since last push, use the same random
              // number, except incremented by 1.
              for (i = 11; i >= 0 && lastRandChars[i] === 63; i--) {
                lastRandChars[i] = 0;
              }

              lastRandChars[i]++;
            }

            for (i = 0; i < 12; i++) {
              id += PUSH_CHARS.charAt(lastRandChars[i]);
            }

            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(id.length === 20, 'nextPushId: Length should be 20.');
            return id;
          };
        }();

        var successor = function successor(key) {
          if (key === '' + INTEGER_32_MAX) {
            // See https://firebase.google.com/docs/database/web/lists-of-data#data-order
            return MIN_PUSH_CHAR;
          }

          var keyAsInt = tryParseInt(key);

          if (keyAsInt != null) {
            return '' + (keyAsInt + 1);
          }

          var next = new Array(key.length);

          for (var i_1 = 0; i_1 < next.length; i_1++) {
            next[i_1] = key.charAt(i_1);
          }

          if (next.length < MAX_KEY_LEN) {
            next.push(MIN_PUSH_CHAR);
            return next.join('');
          }

          var i = next.length - 1;

          while (i >= 0 && next[i] === MAX_PUSH_CHAR) {
            i--;
          } // `successor` was called on the largest possible key, so return the
          // MAX_NAME, which sorts larger than all keys.


          if (i === -1) {
            return MAX_NAME;
          }

          var source = next[i];
          var sourcePlusOne = PUSH_CHARS.charAt(PUSH_CHARS.indexOf(source) + 1);
          next[i] = sourcePlusOne;
          return next.slice(0, i + 1).join('');
        }; // `key` is assumed to be non-empty.


        var predecessor = function predecessor(key) {
          if (key === '' + INTEGER_32_MIN) {
            return MIN_NAME;
          }

          var keyAsInt = tryParseInt(key);

          if (keyAsInt != null) {
            return '' + (keyAsInt - 1);
          }

          var next = new Array(key.length);

          for (var i = 0; i < next.length; i++) {
            next[i] = key.charAt(i);
          } // If `key` ends in `MIN_PUSH_CHAR`, the largest key lexicographically
          // smaller than `key`, is `key[0:key.length - 1]`. The next key smaller
          // than that, `predecessor(predecessor(key))`, is
          //
          // `key[0:key.length - 2] + (key[key.length - 1] - 1) + \
          //   { MAX_PUSH_CHAR repeated MAX_KEY_LEN - (key.length - 1) times }
          //
          // analogous to increment/decrement for base-10 integers.
          //
          // This works because lexigographic comparison works character-by-character,
          // using length as a tie-breaker if one key is a prefix of the other.


          if (next[next.length - 1] === MIN_PUSH_CHAR) {
            if (next.length === 1) {
              // See https://firebase.google.com/docs/database/web/lists-of-data#orderbykey
              return '' + INTEGER_32_MAX;
            }

            delete next[next.length - 1];
            return next.join('');
          } // Replace the last character with it's immediate predecessor, and
          // fill the suffix of the key with MAX_PUSH_CHAR. This is the
          // lexicographically largest possible key smaller than `key`.


          next[next.length - 1] = PUSH_CHARS.charAt(PUSH_CHARS.indexOf(next[next.length - 1]) - 1);
          return next.join('') + MAX_PUSH_CHAR.repeat(MAX_KEY_LEN - next.length);
        };
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        function changeValue(snapshotNode) {
          return {
            type: "value"
            /* VALUE */
            ,
            snapshotNode: snapshotNode
          };
        }

        function changeChildAdded(childName, snapshotNode) {
          return {
            type: "child_added"
            /* CHILD_ADDED */
            ,
            snapshotNode: snapshotNode,
            childName: childName
          };
        }

        function changeChildRemoved(childName, snapshotNode) {
          return {
            type: "child_removed"
            /* CHILD_REMOVED */
            ,
            snapshotNode: snapshotNode,
            childName: childName
          };
        }

        function changeChildChanged(childName, snapshotNode, oldSnap) {
          return {
            type: "child_changed"
            /* CHILD_CHANGED */
            ,
            snapshotNode: snapshotNode,
            childName: childName,
            oldSnap: oldSnap
          };
        }

        function changeChildMoved(childName, snapshotNode) {
          return {
            type: "child_moved"
            /* CHILD_MOVED */
            ,
            snapshotNode: snapshotNode,
            childName: childName
          };
        }
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * Doesn't really filter nodes but applies an index to the node and keeps track of any changes
         */


        var IndexedFilter =
        /** @class */
        function () {
          function IndexedFilter(index_) {
            this.index_ = index_;
          }

          IndexedFilter.prototype.updateChild = function (snap, key, newChild, affectedPath, source, optChangeAccumulator) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(snap.isIndexed(this.index_), 'A node must be indexed if only a child is updated');
            var oldChild = snap.getImmediateChild(key); // Check if anything actually changed.

            if (oldChild.getChild(affectedPath).equals(newChild.getChild(affectedPath))) {
              // There's an edge case where a child can enter or leave the view because affectedPath was set to null.
              // In this case, affectedPath will appear null in both the old and new snapshots.  So we need
              // to avoid treating these cases as "nothing changed."
              if (oldChild.isEmpty() === newChild.isEmpty()) {
                // Nothing changed.
                // This assert should be valid, but it's expensive (can dominate perf testing) so don't actually do it.
                //assert(oldChild.equals(newChild), 'Old and new snapshots should be equal.');
                return snap;
              }
            }

            if (optChangeAccumulator != null) {
              if (newChild.isEmpty()) {
                if (snap.hasChild(key)) {
                  optChangeAccumulator.trackChildChange(changeChildRemoved(key, oldChild));
                } else {
                  Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(snap.isLeafNode(), 'A child remove without an old child only makes sense on a leaf node');
                }
              } else if (oldChild.isEmpty()) {
                optChangeAccumulator.trackChildChange(changeChildAdded(key, newChild));
              } else {
                optChangeAccumulator.trackChildChange(changeChildChanged(key, newChild, oldChild));
              }
            }

            if (snap.isLeafNode() && newChild.isEmpty()) {
              return snap;
            } else {
              // Make sure the node is indexed
              return snap.updateImmediateChild(key, newChild).withIndex(this.index_);
            }
          };

          IndexedFilter.prototype.updateFullNode = function (oldSnap, newSnap, optChangeAccumulator) {
            if (optChangeAccumulator != null) {
              if (!oldSnap.isLeafNode()) {
                oldSnap.forEachChild(PRIORITY_INDEX, function (key, childNode) {
                  if (!newSnap.hasChild(key)) {
                    optChangeAccumulator.trackChildChange(changeChildRemoved(key, childNode));
                  }
                });
              }

              if (!newSnap.isLeafNode()) {
                newSnap.forEachChild(PRIORITY_INDEX, function (key, childNode) {
                  if (oldSnap.hasChild(key)) {
                    var oldChild = oldSnap.getImmediateChild(key);

                    if (!oldChild.equals(childNode)) {
                      optChangeAccumulator.trackChildChange(changeChildChanged(key, childNode, oldChild));
                    }
                  } else {
                    optChangeAccumulator.trackChildChange(changeChildAdded(key, childNode));
                  }
                });
              }
            }

            return newSnap.withIndex(this.index_);
          };

          IndexedFilter.prototype.updatePriority = function (oldSnap, newPriority) {
            if (oldSnap.isEmpty()) {
              return ChildrenNode.EMPTY_NODE;
            } else {
              return oldSnap.updatePriority(newPriority);
            }
          };

          IndexedFilter.prototype.filtersNodes = function () {
            return false;
          };

          IndexedFilter.prototype.getIndexedFilter = function () {
            return this;
          };

          IndexedFilter.prototype.getIndex = function () {
            return this.index_;
          };

          return IndexedFilter;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * Filters nodes by range and uses an IndexFilter to track any changes after filtering the node
         */


        var RangedFilter =
        /** @class */
        function () {
          function RangedFilter(params) {
            this.indexedFilter_ = new IndexedFilter(params.getIndex());
            this.index_ = params.getIndex();
            this.startPost_ = RangedFilter.getStartPost_(params);
            this.endPost_ = RangedFilter.getEndPost_(params);
          }

          RangedFilter.prototype.getStartPost = function () {
            return this.startPost_;
          };

          RangedFilter.prototype.getEndPost = function () {
            return this.endPost_;
          };

          RangedFilter.prototype.matches = function (node) {
            return this.index_.compare(this.getStartPost(), node) <= 0 && this.index_.compare(node, this.getEndPost()) <= 0;
          };

          RangedFilter.prototype.updateChild = function (snap, key, newChild, affectedPath, source, optChangeAccumulator) {
            if (!this.matches(new NamedNode(key, newChild))) {
              newChild = ChildrenNode.EMPTY_NODE;
            }

            return this.indexedFilter_.updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator);
          };

          RangedFilter.prototype.updateFullNode = function (oldSnap, newSnap, optChangeAccumulator) {
            if (newSnap.isLeafNode()) {
              // Make sure we have a children node with the correct index, not a leaf node;
              newSnap = ChildrenNode.EMPTY_NODE;
            }

            var filtered = newSnap.withIndex(this.index_); // Don't support priorities on queries

            filtered = filtered.updatePriority(ChildrenNode.EMPTY_NODE);
            var self = this;
            newSnap.forEachChild(PRIORITY_INDEX, function (key, childNode) {
              if (!self.matches(new NamedNode(key, childNode))) {
                filtered = filtered.updateImmediateChild(key, ChildrenNode.EMPTY_NODE);
              }
            });
            return this.indexedFilter_.updateFullNode(oldSnap, filtered, optChangeAccumulator);
          };

          RangedFilter.prototype.updatePriority = function (oldSnap, newPriority) {
            // Don't support priorities on queries
            return oldSnap;
          };

          RangedFilter.prototype.filtersNodes = function () {
            return true;
          };

          RangedFilter.prototype.getIndexedFilter = function () {
            return this.indexedFilter_;
          };

          RangedFilter.prototype.getIndex = function () {
            return this.index_;
          };

          RangedFilter.getStartPost_ = function (params) {
            if (params.hasStart()) {
              var startName = params.getIndexStartName();
              return params.getIndex().makePost(params.getIndexStartValue(), startName);
            } else {
              return params.getIndex().minPost();
            }
          };

          RangedFilter.getEndPost_ = function (params) {
            if (params.hasEnd()) {
              var endName = params.getIndexEndName();
              return params.getIndex().makePost(params.getIndexEndValue(), endName);
            } else {
              return params.getIndex().maxPost();
            }
          };

          return RangedFilter;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * Applies a limit and a range to a node and uses RangedFilter to do the heavy lifting where possible
         */


        var LimitedFilter =
        /** @class */
        function () {
          function LimitedFilter(params) {
            this.rangedFilter_ = new RangedFilter(params);
            this.index_ = params.getIndex();
            this.limit_ = params.getLimit();
            this.reverse_ = !params.isViewFromLeft();
          }

          LimitedFilter.prototype.updateChild = function (snap, key, newChild, affectedPath, source, optChangeAccumulator) {
            if (!this.rangedFilter_.matches(new NamedNode(key, newChild))) {
              newChild = ChildrenNode.EMPTY_NODE;
            }

            if (snap.getImmediateChild(key).equals(newChild)) {
              // No change
              return snap;
            } else if (snap.numChildren() < this.limit_) {
              return this.rangedFilter_.getIndexedFilter().updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator);
            } else {
              return this.fullLimitUpdateChild_(snap, key, newChild, source, optChangeAccumulator);
            }
          };

          LimitedFilter.prototype.updateFullNode = function (oldSnap, newSnap, optChangeAccumulator) {
            var filtered;

            if (newSnap.isLeafNode() || newSnap.isEmpty()) {
              // Make sure we have a children node with the correct index, not a leaf node;
              filtered = ChildrenNode.EMPTY_NODE.withIndex(this.index_);
            } else {
              if (this.limit_ * 2 < newSnap.numChildren() && newSnap.isIndexed(this.index_)) {
                // Easier to build up a snapshot, since what we're given has more than twice the elements we want
                filtered = ChildrenNode.EMPTY_NODE.withIndex(this.index_); // anchor to the startPost, endPost, or last element as appropriate

                var iterator = void 0;

                if (this.reverse_) {
                  iterator = newSnap.getReverseIteratorFrom(this.rangedFilter_.getEndPost(), this.index_);
                } else {
                  iterator = newSnap.getIteratorFrom(this.rangedFilter_.getStartPost(), this.index_);
                }

                var count = 0;

                while (iterator.hasNext() && count < this.limit_) {
                  var next = iterator.getNext();
                  var inRange = void 0;

                  if (this.reverse_) {
                    inRange = this.index_.compare(this.rangedFilter_.getStartPost(), next) <= 0;
                  } else {
                    inRange = this.index_.compare(next, this.rangedFilter_.getEndPost()) <= 0;
                  }

                  if (inRange) {
                    filtered = filtered.updateImmediateChild(next.name, next.node);
                    count++;
                  } else {
                    // if we have reached the end post, we cannot keep adding elemments
                    break;
                  }
                }
              } else {
                // The snap contains less than twice the limit. Faster to delete from the snap than build up a new one
                filtered = newSnap.withIndex(this.index_); // Don't support priorities on queries

                filtered = filtered.updatePriority(ChildrenNode.EMPTY_NODE);
                var startPost = void 0;
                var endPost = void 0;
                var cmp = void 0;
                var iterator = void 0;

                if (this.reverse_) {
                  iterator = filtered.getReverseIterator(this.index_);
                  startPost = this.rangedFilter_.getEndPost();
                  endPost = this.rangedFilter_.getStartPost();
                  var indexCompare_1 = this.index_.getCompare();

                  cmp = function cmp(a, b) {
                    return indexCompare_1(b, a);
                  };
                } else {
                  iterator = filtered.getIterator(this.index_);
                  startPost = this.rangedFilter_.getStartPost();
                  endPost = this.rangedFilter_.getEndPost();
                  cmp = this.index_.getCompare();
                }

                var count = 0;
                var foundStartPost = false;

                while (iterator.hasNext()) {
                  var next = iterator.getNext();

                  if (!foundStartPost && cmp(startPost, next) <= 0) {
                    // start adding
                    foundStartPost = true;
                  }

                  var inRange = foundStartPost && count < this.limit_ && cmp(next, endPost) <= 0;

                  if (inRange) {
                    count++;
                  } else {
                    filtered = filtered.updateImmediateChild(next.name, ChildrenNode.EMPTY_NODE);
                  }
                }
              }
            }

            return this.rangedFilter_.getIndexedFilter().updateFullNode(oldSnap, filtered, optChangeAccumulator);
          };

          LimitedFilter.prototype.updatePriority = function (oldSnap, newPriority) {
            // Don't support priorities on queries
            return oldSnap;
          };

          LimitedFilter.prototype.filtersNodes = function () {
            return true;
          };

          LimitedFilter.prototype.getIndexedFilter = function () {
            return this.rangedFilter_.getIndexedFilter();
          };

          LimitedFilter.prototype.getIndex = function () {
            return this.index_;
          };

          LimitedFilter.prototype.fullLimitUpdateChild_ = function (snap, childKey, childSnap, source, changeAccumulator) {
            // TODO: rename all cache stuff etc to general snap terminology
            var cmp;

            if (this.reverse_) {
              var indexCmp_1 = this.index_.getCompare();

              cmp = function cmp(a, b) {
                return indexCmp_1(b, a);
              };
            } else {
              cmp = this.index_.getCompare();
            }

            var oldEventCache = snap;
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(oldEventCache.numChildren() === this.limit_, '');
            var newChildNamedNode = new NamedNode(childKey, childSnap);
            var windowBoundary = this.reverse_ ? oldEventCache.getFirstChild(this.index_) : oldEventCache.getLastChild(this.index_);
            var inRange = this.rangedFilter_.matches(newChildNamedNode);

            if (oldEventCache.hasChild(childKey)) {
              var oldChildSnap = oldEventCache.getImmediateChild(childKey);
              var nextChild = source.getChildAfterChild(this.index_, windowBoundary, this.reverse_);

              while (nextChild != null && (nextChild.name === childKey || oldEventCache.hasChild(nextChild.name))) {
                // There is a weird edge case where a node is updated as part of a merge in the write tree, but hasn't
                // been applied to the limited filter yet. Ignore this next child which will be updated later in
                // the limited filter...
                nextChild = source.getChildAfterChild(this.index_, nextChild, this.reverse_);
              }

              var compareNext = nextChild == null ? 1 : cmp(nextChild, newChildNamedNode);
              var remainsInWindow = inRange && !childSnap.isEmpty() && compareNext >= 0;

              if (remainsInWindow) {
                if (changeAccumulator != null) {
                  changeAccumulator.trackChildChange(changeChildChanged(childKey, childSnap, oldChildSnap));
                }

                return oldEventCache.updateImmediateChild(childKey, childSnap);
              } else {
                if (changeAccumulator != null) {
                  changeAccumulator.trackChildChange(changeChildRemoved(childKey, oldChildSnap));
                }

                var newEventCache = oldEventCache.updateImmediateChild(childKey, ChildrenNode.EMPTY_NODE);
                var nextChildInRange = nextChild != null && this.rangedFilter_.matches(nextChild);

                if (nextChildInRange) {
                  if (changeAccumulator != null) {
                    changeAccumulator.trackChildChange(changeChildAdded(nextChild.name, nextChild.node));
                  }

                  return newEventCache.updateImmediateChild(nextChild.name, nextChild.node);
                } else {
                  return newEventCache;
                }
              }
            } else if (childSnap.isEmpty()) {
              // we're deleting a node, but it was not in the window, so ignore it
              return snap;
            } else if (inRange) {
              if (cmp(windowBoundary, newChildNamedNode) >= 0) {
                if (changeAccumulator != null) {
                  changeAccumulator.trackChildChange(changeChildRemoved(windowBoundary.name, windowBoundary.node));
                  changeAccumulator.trackChildChange(changeChildAdded(childKey, childSnap));
                }

                return oldEventCache.updateImmediateChild(childKey, childSnap).updateImmediateChild(windowBoundary.name, ChildrenNode.EMPTY_NODE);
              } else {
                return snap;
              }
            } else {
              return snap;
            }
          };

          return LimitedFilter;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * This class is an immutable-from-the-public-api struct containing a set of query parameters defining a
         * range to be returned for a particular location. It is assumed that validation of parameters is done at the
         * user-facing API level, so it is not done here.
         */


        var QueryParams =
        /** @class */
        function () {
          function QueryParams() {
            this.limitSet_ = false;
            this.startSet_ = false;
            this.startNameSet_ = false;
            this.startAfterSet_ = false;
            this.endSet_ = false;
            this.endNameSet_ = false;
            this.endBeforeSet_ = false;
            this.limit_ = 0;
            this.viewFrom_ = '';
            this.indexStartValue_ = null;
            this.indexStartName_ = '';
            this.indexEndValue_ = null;
            this.indexEndName_ = '';
            this.index_ = PRIORITY_INDEX;
          }

          QueryParams.prototype.hasStart = function () {
            return this.startSet_;
          };

          QueryParams.prototype.hasStartAfter = function () {
            return this.startAfterSet_;
          };

          QueryParams.prototype.hasEndBefore = function () {
            return this.endBeforeSet_;
          };
          /**
           * @returns True if it would return from left.
           */


          QueryParams.prototype.isViewFromLeft = function () {
            if (this.viewFrom_ === '') {
              // limit(), rather than limitToFirst or limitToLast was called.
              // This means that only one of startSet_ and endSet_ is true. Use them
              // to calculate which side of the view to anchor to. If neither is set,
              // anchor to the end.
              return this.startSet_;
            } else {
              return this.viewFrom_ === "l"
              /* VIEW_FROM_LEFT */
              ;
            }
          };
          /**
           * Only valid to call if hasStart() returns true
           */


          QueryParams.prototype.getIndexStartValue = function () {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(this.startSet_, 'Only valid if start has been set');
            return this.indexStartValue_;
          };
          /**
           * Only valid to call if hasStart() returns true.
           * Returns the starting key name for the range defined by these query parameters
           */


          QueryParams.prototype.getIndexStartName = function () {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(this.startSet_, 'Only valid if start has been set');

            if (this.startNameSet_) {
              return this.indexStartName_;
            } else {
              return MIN_NAME;
            }
          };

          QueryParams.prototype.hasEnd = function () {
            return this.endSet_;
          };
          /**
           * Only valid to call if hasEnd() returns true.
           */


          QueryParams.prototype.getIndexEndValue = function () {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(this.endSet_, 'Only valid if end has been set');
            return this.indexEndValue_;
          };
          /**
           * Only valid to call if hasEnd() returns true.
           * Returns the end key name for the range defined by these query parameters
           */


          QueryParams.prototype.getIndexEndName = function () {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(this.endSet_, 'Only valid if end has been set');

            if (this.endNameSet_) {
              return this.indexEndName_;
            } else {
              return MAX_NAME;
            }
          };

          QueryParams.prototype.hasLimit = function () {
            return this.limitSet_;
          };
          /**
           * @returns True if a limit has been set and it has been explicitly anchored
           */


          QueryParams.prototype.hasAnchoredLimit = function () {
            return this.limitSet_ && this.viewFrom_ !== '';
          };
          /**
           * Only valid to call if hasLimit() returns true
           */


          QueryParams.prototype.getLimit = function () {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(this.limitSet_, 'Only valid if limit has been set');
            return this.limit_;
          };

          QueryParams.prototype.getIndex = function () {
            return this.index_;
          };

          QueryParams.prototype.loadsAllData = function () {
            return !(this.startSet_ || this.endSet_ || this.limitSet_);
          };

          QueryParams.prototype.isDefault = function () {
            return this.loadsAllData() && this.index_ === PRIORITY_INDEX;
          };

          QueryParams.prototype.copy = function () {
            var copy = new QueryParams();
            copy.limitSet_ = this.limitSet_;
            copy.limit_ = this.limit_;
            copy.startSet_ = this.startSet_;
            copy.indexStartValue_ = this.indexStartValue_;
            copy.startNameSet_ = this.startNameSet_;
            copy.indexStartName_ = this.indexStartName_;
            copy.endSet_ = this.endSet_;
            copy.indexEndValue_ = this.indexEndValue_;
            copy.endNameSet_ = this.endNameSet_;
            copy.indexEndName_ = this.indexEndName_;
            copy.index_ = this.index_;
            copy.viewFrom_ = this.viewFrom_;
            return copy;
          };

          return QueryParams;
        }();

        function queryParamsGetNodeFilter(queryParams) {
          if (queryParams.loadsAllData()) {
            return new IndexedFilter(queryParams.getIndex());
          } else if (queryParams.hasLimit()) {
            return new LimitedFilter(queryParams);
          } else {
            return new RangedFilter(queryParams);
          }
        }

        function queryParamsLimitToFirst(queryParams, newLimit) {
          var newParams = queryParams.copy();
          newParams.limitSet_ = true;
          newParams.limit_ = newLimit;
          newParams.viewFrom_ = "l"
          /* VIEW_FROM_LEFT */
          ;
          return newParams;
        }

        function queryParamsLimitToLast(queryParams, newLimit) {
          var newParams = queryParams.copy();
          newParams.limitSet_ = true;
          newParams.limit_ = newLimit;
          newParams.viewFrom_ = "r"
          /* VIEW_FROM_RIGHT */
          ;
          return newParams;
        }

        function queryParamsStartAt(queryParams, indexValue, key) {
          var newParams = queryParams.copy();
          newParams.startSet_ = true;

          if (indexValue === undefined) {
            indexValue = null;
          }

          newParams.indexStartValue_ = indexValue;

          if (key != null) {
            newParams.startNameSet_ = true;
            newParams.indexStartName_ = key;
          } else {
            newParams.startNameSet_ = false;
            newParams.indexStartName_ = '';
          }

          return newParams;
        }

        function queryParamsStartAfter(queryParams, indexValue, key) {
          var params;

          if (queryParams.index_ === KEY_INDEX) {
            if (typeof indexValue === 'string') {
              indexValue = successor(indexValue);
            }

            params = queryParamsStartAt(queryParams, indexValue, key);
          } else {
            var childKey = void 0;

            if (key == null) {
              childKey = MAX_NAME;
            } else {
              childKey = successor(key);
            }

            params = queryParamsStartAt(queryParams, indexValue, childKey);
          }

          params.startAfterSet_ = true;
          return params;
        }

        function queryParamsEndAt(queryParams, indexValue, key) {
          var newParams = queryParams.copy();
          newParams.endSet_ = true;

          if (indexValue === undefined) {
            indexValue = null;
          }

          newParams.indexEndValue_ = indexValue;

          if (key !== undefined) {
            newParams.endNameSet_ = true;
            newParams.indexEndName_ = key;
          } else {
            newParams.endNameSet_ = false;
            newParams.indexEndName_ = '';
          }

          return newParams;
        }

        function queryParamsEndBefore(queryParams, indexValue, key) {
          var childKey;
          var params;

          if (queryParams.index_ === KEY_INDEX) {
            if (typeof indexValue === 'string') {
              indexValue = predecessor(indexValue);
            }

            params = queryParamsEndAt(queryParams, indexValue, key);
          } else {
            if (key == null) {
              childKey = MIN_NAME;
            } else {
              childKey = predecessor(key);
            }

            params = queryParamsEndAt(queryParams, indexValue, childKey);
          }

          params.endBeforeSet_ = true;
          return params;
        }

        function queryParamsOrderBy(queryParams, index) {
          var newParams = queryParams.copy();
          newParams.index_ = index;
          return newParams;
        }
        /**
         * Returns a set of REST query string parameters representing this query.
         *
         * @returns query string parameters
         */


        function queryParamsToRestQueryStringParameters(queryParams) {
          var qs = {};

          if (queryParams.isDefault()) {
            return qs;
          }

          var orderBy;

          if (queryParams.index_ === PRIORITY_INDEX) {
            orderBy = "$priority"
            /* PRIORITY_INDEX */
            ;
          } else if (queryParams.index_ === VALUE_INDEX) {
            orderBy = "$value"
            /* VALUE_INDEX */
            ;
          } else if (queryParams.index_ === KEY_INDEX) {
            orderBy = "$key"
            /* KEY_INDEX */
            ;
          } else {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(queryParams.index_ instanceof PathIndex, 'Unrecognized index type!');
            orderBy = queryParams.index_.toString();
          }

          qs["orderBy"
          /* ORDER_BY */
          ] = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringify"])(orderBy);

          if (queryParams.startSet_) {
            qs["startAt"
            /* START_AT */
            ] = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringify"])(queryParams.indexStartValue_);

            if (queryParams.startNameSet_) {
              qs["startAt"
              /* START_AT */
              ] += ',' + Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringify"])(queryParams.indexStartName_);
            }
          }

          if (queryParams.endSet_) {
            qs["endAt"
            /* END_AT */
            ] = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringify"])(queryParams.indexEndValue_);

            if (queryParams.endNameSet_) {
              qs["endAt"
              /* END_AT */
              ] += ',' + Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringify"])(queryParams.indexEndName_);
            }
          }

          if (queryParams.limitSet_) {
            if (queryParams.isViewFromLeft()) {
              qs["limitToFirst"
              /* LIMIT_TO_FIRST */
              ] = queryParams.limit_;
            } else {
              qs["limitToLast"
              /* LIMIT_TO_LAST */
              ] = queryParams.limit_;
            }
          }

          return qs;
        }

        function queryParamsGetQueryObject(queryParams) {
          var obj = {};

          if (queryParams.startSet_) {
            obj["sp"
            /* INDEX_START_VALUE */
            ] = queryParams.indexStartValue_;

            if (queryParams.startNameSet_) {
              obj["sn"
              /* INDEX_START_NAME */
              ] = queryParams.indexStartName_;
            }
          }

          if (queryParams.endSet_) {
            obj["ep"
            /* INDEX_END_VALUE */
            ] = queryParams.indexEndValue_;

            if (queryParams.endNameSet_) {
              obj["en"
              /* INDEX_END_NAME */
              ] = queryParams.indexEndName_;
            }
          }

          if (queryParams.limitSet_) {
            obj["l"
            /* LIMIT */
            ] = queryParams.limit_;
            var viewFrom = queryParams.viewFrom_;

            if (viewFrom === '') {
              if (queryParams.isViewFromLeft()) {
                viewFrom = "l"
                /* VIEW_FROM_LEFT */
                ;
              } else {
                viewFrom = "r"
                /* VIEW_FROM_RIGHT */
                ;
              }
            }

            obj["vf"
            /* VIEW_FROM */
            ] = viewFrom;
          } // For now, priority index is the default, so we only specify if it's some other index


          if (queryParams.index_ !== PRIORITY_INDEX) {
            obj["i"
            /* INDEX */
            ] = queryParams.index_.toString();
          }

          return obj;
        }
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * An implementation of ServerActions that communicates with the server via REST requests.
         * This is mostly useful for compatibility with crawlers, where we don't want to spin up a full
         * persistent connection (using WebSockets or long-polling)
         */


        var ReadonlyRestClient =
        /** @class */
        function (_super) {
          Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__extends"])(ReadonlyRestClient, _super);
          /**
           * @param repoInfo_ - Data about the namespace we are connecting to
           * @param onDataUpdate_ - A callback for new data from the server
           */

          function ReadonlyRestClient(repoInfo_, onDataUpdate_, authTokenProvider_, appCheckTokenProvider_) {
            var _this = _super.call(this) || this;

            _this.repoInfo_ = repoInfo_;
            _this.onDataUpdate_ = onDataUpdate_;
            _this.authTokenProvider_ = authTokenProvider_;
            _this.appCheckTokenProvider_ = appCheckTokenProvider_;
            /** @private {function(...[*])} */

            _this.log_ = logWrapper('p:rest:');
            /**
             * We don't actually need to track listens, except to prevent us calling an onComplete for a listen
             * that's been removed. :-/
             */

            _this.listens_ = {};
            return _this;
          }

          ReadonlyRestClient.prototype.reportStats = function (stats) {
            throw new Error('Method not implemented.');
          };

          ReadonlyRestClient.getListenId_ = function (query, tag) {
            if (tag !== undefined) {
              return 'tag$' + tag;
            } else {
              Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(query._queryParams.isDefault(), "should have a tag if it's not a default query.");
              return query._path.toString();
            }
          };
          /** @inheritDoc */


          ReadonlyRestClient.prototype.listen = function (query, currentHashFn, tag, onComplete) {
            var _this = this;

            var pathString = query._path.toString();

            this.log_('Listen called for ' + pathString + ' ' + query._queryIdentifier); // Mark this listener so we can tell if it's removed.

            var listenId = ReadonlyRestClient.getListenId_(query, tag);
            var thisListen = {};
            this.listens_[listenId] = thisListen;
            var queryStringParameters = queryParamsToRestQueryStringParameters(query._queryParams);
            this.restRequest_(pathString + '.json', queryStringParameters, function (error, result) {
              var data = result;

              if (error === 404) {
                data = null;
                error = null;
              }

              if (error === null) {
                _this.onDataUpdate_(pathString, data,
                /*isMerge=*/
                false, tag);
              }

              if (Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["safeGet"])(_this.listens_, listenId) === thisListen) {
                var status_1;

                if (!error) {
                  status_1 = 'ok';
                } else if (error === 401) {
                  status_1 = 'permission_denied';
                } else {
                  status_1 = 'rest_error:' + error;
                }

                onComplete(status_1, null);
              }
            });
          };
          /** @inheritDoc */


          ReadonlyRestClient.prototype.unlisten = function (query, tag) {
            var listenId = ReadonlyRestClient.getListenId_(query, tag);
            delete this.listens_[listenId];
          };

          ReadonlyRestClient.prototype.get = function (query) {
            var _this = this;

            var queryStringParameters = queryParamsToRestQueryStringParameters(query._queryParams);

            var pathString = query._path.toString();

            var deferred = new _firebase_util__WEBPACK_IMPORTED_MODULE_2__["Deferred"]();
            this.restRequest_(pathString + '.json', queryStringParameters, function (error, result) {
              var data = result;

              if (error === 404) {
                data = null;
                error = null;
              }

              if (error === null) {
                _this.onDataUpdate_(pathString, data,
                /*isMerge=*/
                false,
                /*tag=*/
                null);

                deferred.resolve(data);
              } else {
                deferred.reject(new Error(data));
              }
            });
            return deferred.promise;
          };
          /** @inheritDoc */


          ReadonlyRestClient.prototype.refreshAuthToken = function (token) {// no-op since we just always call getToken.
          };
          /**
           * Performs a REST request to the given path, with the provided query string parameters,
           * and any auth credentials we have.
           */


          ReadonlyRestClient.prototype.restRequest_ = function (pathString, queryStringParameters, callback) {
            var _this = this;

            if (queryStringParameters === void 0) {
              queryStringParameters = {};
            }

            queryStringParameters['format'] = 'export';
            return Promise.all([this.authTokenProvider_.getToken(
            /*forceRefresh=*/
            false), this.appCheckTokenProvider_.getToken(
            /*forceRefresh=*/
            false)]).then(function (_a) {
              var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__read"])(_a, 2),
                  authToken = _b[0],
                  appCheckToken = _b[1];

              if (authToken && authToken.accessToken) {
                queryStringParameters['auth'] = authToken.accessToken;
              }

              if (appCheckToken && appCheckToken.token) {
                queryStringParameters['ac'] = appCheckToken.token;
              }

              var url = (_this.repoInfo_.secure ? 'https://' : 'http://') + _this.repoInfo_.host + pathString + '?' + 'ns=' + _this.repoInfo_.namespace + Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["querystring"])(queryStringParameters);

              _this.log_('Sending REST request for ' + url);

              var xhr = new XMLHttpRequest();

              xhr.onreadystatechange = function () {
                if (callback && xhr.readyState === 4) {
                  _this.log_('REST Response for ' + url + ' received. status:', xhr.status, 'response:', xhr.responseText);

                  var res = null;

                  if (xhr.status >= 200 && xhr.status < 300) {
                    try {
                      res = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["jsonEval"])(xhr.responseText);
                    } catch (e) {
                      warn('Failed to parse JSON response for ' + url + ': ' + xhr.responseText);
                    }

                    callback(null, res);
                  } else {
                    // 401 and 404 are expected.
                    if (xhr.status !== 401 && xhr.status !== 404) {
                      warn('Got unsuccessful REST response for ' + url + ' Status: ' + xhr.status);
                    }

                    callback(xhr.status);
                  }

                  callback = null;
                }
              };

              xhr.open('GET', url,
              /*asynchronous=*/
              true);
              xhr.send();
            });
          };

          return ReadonlyRestClient;
        }(ServerActions);
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * Mutable object which basically just stores a reference to the "latest" immutable snapshot.
         */


        var SnapshotHolder =
        /** @class */
        function () {
          function SnapshotHolder() {
            this.rootNode_ = ChildrenNode.EMPTY_NODE;
          }

          SnapshotHolder.prototype.getNode = function (path) {
            return this.rootNode_.getChild(path);
          };

          SnapshotHolder.prototype.updateSnapshot = function (path, newSnapshotNode) {
            this.rootNode_ = this.rootNode_.updateChild(path, newSnapshotNode);
          };

          return SnapshotHolder;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        function newSparseSnapshotTree() {
          return {
            value: null,
            children: new Map()
          };
        }
        /**
         * Stores the given node at the specified path. If there is already a node
         * at a shallower path, it merges the new data into that snapshot node.
         *
         * @param path - Path to look up snapshot for.
         * @param data - The new data, or null.
         */


        function sparseSnapshotTreeRemember(sparseSnapshotTree, path, data) {
          if (pathIsEmpty(path)) {
            sparseSnapshotTree.value = data;
            sparseSnapshotTree.children.clear();
          } else if (sparseSnapshotTree.value !== null) {
            sparseSnapshotTree.value = sparseSnapshotTree.value.updateChild(path, data);
          } else {
            var childKey = pathGetFront(path);

            if (!sparseSnapshotTree.children.has(childKey)) {
              sparseSnapshotTree.children.set(childKey, newSparseSnapshotTree());
            }

            var child = sparseSnapshotTree.children.get(childKey);
            path = pathPopFront(path);
            sparseSnapshotTreeRemember(child, path, data);
          }
        }
        /**
         * Purge the data at path from the cache.
         *
         * @param path - Path to look up snapshot for.
         * @returns True if this node should now be removed.
         */


        function sparseSnapshotTreeForget(sparseSnapshotTree, path) {
          if (pathIsEmpty(path)) {
            sparseSnapshotTree.value = null;
            sparseSnapshotTree.children.clear();
            return true;
          } else {
            if (sparseSnapshotTree.value !== null) {
              if (sparseSnapshotTree.value.isLeafNode()) {
                // We're trying to forget a node that doesn't exist
                return false;
              } else {
                var value = sparseSnapshotTree.value;
                sparseSnapshotTree.value = null;
                value.forEachChild(PRIORITY_INDEX, function (key, tree) {
                  sparseSnapshotTreeRemember(sparseSnapshotTree, new Path(key), tree);
                });
                return sparseSnapshotTreeForget(sparseSnapshotTree, path);
              }
            } else if (sparseSnapshotTree.children.size > 0) {
              var childKey = pathGetFront(path);
              path = pathPopFront(path);

              if (sparseSnapshotTree.children.has(childKey)) {
                var safeToRemove = sparseSnapshotTreeForget(sparseSnapshotTree.children.get(childKey), path);

                if (safeToRemove) {
                  sparseSnapshotTree.children["delete"](childKey);
                }
              }

              return sparseSnapshotTree.children.size === 0;
            } else {
              return true;
            }
          }
        }
        /**
         * Recursively iterates through all of the stored tree and calls the
         * callback on each one.
         *
         * @param prefixPath - Path to look up node for.
         * @param func - The function to invoke for each tree.
         */


        function sparseSnapshotTreeForEachTree(sparseSnapshotTree, prefixPath, func) {
          if (sparseSnapshotTree.value !== null) {
            func(prefixPath, sparseSnapshotTree.value);
          } else {
            sparseSnapshotTreeForEachChild(sparseSnapshotTree, function (key, tree) {
              var path = new Path(prefixPath.toString() + '/' + key);
              sparseSnapshotTreeForEachTree(tree, path, func);
            });
          }
        }
        /**
         * Iterates through each immediate child and triggers the callback.
         * Only seems to be used in tests.
         *
         * @param func - The function to invoke for each child.
         */


        function sparseSnapshotTreeForEachChild(sparseSnapshotTree, func) {
          sparseSnapshotTree.children.forEach(function (tree, key) {
            func(key, tree);
          });
        }
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * Returns the delta from the previous call to get stats.
         *
         * @param collection_ - The collection to "listen" to.
         */


        var StatsListener =
        /** @class */
        function () {
          function StatsListener(collection_) {
            this.collection_ = collection_;
            this.last_ = null;
          }

          StatsListener.prototype.get = function () {
            var newStats = this.collection_.get();
            var delta = Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__assign"])({}, newStats);

            if (this.last_) {
              each(this.last_, function (stat, value) {
                delta[stat] = delta[stat] - value;
              });
            }

            this.last_ = newStats;
            return delta;
          };

          return StatsListener;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */
        // Assuming some apps may have a short amount of time on page, and a bulk of firebase operations probably
        // happen on page load, we try to report our first set of stats pretty quickly, but we wait at least 10
        // seconds to try to ensure the Firebase connection is established / settled.


        var FIRST_STATS_MIN_TIME = 10 * 1000;
        var FIRST_STATS_MAX_TIME = 30 * 1000; // We'll continue to report stats on average every 5 minutes.

        var REPORT_STATS_INTERVAL = 5 * 60 * 1000;

        var StatsReporter =
        /** @class */
        function () {
          function StatsReporter(collection, server_) {
            this.server_ = server_;
            this.statsToReport_ = {};
            this.statsListener_ = new StatsListener(collection);
            var timeout = FIRST_STATS_MIN_TIME + (FIRST_STATS_MAX_TIME - FIRST_STATS_MIN_TIME) * Math.random();
            setTimeoutNonBlocking(this.reportStats_.bind(this), Math.floor(timeout));
          }

          StatsReporter.prototype.reportStats_ = function () {
            var _this = this;

            var stats = this.statsListener_.get();
            var reportedStats = {};
            var haveStatsToReport = false;
            each(stats, function (stat, value) {
              if (value > 0 && Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["contains"])(_this.statsToReport_, stat)) {
                reportedStats[stat] = value;
                haveStatsToReport = true;
              }
            });

            if (haveStatsToReport) {
              this.server_.reportStats(reportedStats);
            } // queue our next run.


            setTimeoutNonBlocking(this.reportStats_.bind(this), Math.floor(Math.random() * 2 * REPORT_STATS_INTERVAL));
          };

          return StatsReporter;
        }();

        function statsReporterIncludeStat(reporter, stat) {
          reporter.statsToReport_[stat] = true;
        }
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         *
         * @enum
         */


        var OperationType;

        (function (OperationType) {
          OperationType[OperationType["OVERWRITE"] = 0] = "OVERWRITE";
          OperationType[OperationType["MERGE"] = 1] = "MERGE";
          OperationType[OperationType["ACK_USER_WRITE"] = 2] = "ACK_USER_WRITE";
          OperationType[OperationType["LISTEN_COMPLETE"] = 3] = "LISTEN_COMPLETE";
        })(OperationType || (OperationType = {}));

        function newOperationSourceUser() {
          return {
            fromUser: true,
            fromServer: false,
            queryId: null,
            tagged: false
          };
        }

        function newOperationSourceServer() {
          return {
            fromUser: false,
            fromServer: true,
            queryId: null,
            tagged: false
          };
        }

        function newOperationSourceServerTaggedQuery(queryId) {
          return {
            fromUser: false,
            fromServer: true,
            queryId: queryId,
            tagged: true
          };
        }
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var AckUserWrite =
        /** @class */
        function () {
          /**
           * @param affectedTree - A tree containing true for each affected path. Affected paths can't overlap.
           */
          function AckUserWrite(
          /** @inheritDoc */
          path,
          /** @inheritDoc */
          affectedTree,
          /** @inheritDoc */
          revert) {
            this.path = path;
            this.affectedTree = affectedTree;
            this.revert = revert;
            /** @inheritDoc */

            this.type = OperationType.ACK_USER_WRITE;
            /** @inheritDoc */

            this.source = newOperationSourceUser();
          }

          AckUserWrite.prototype.operationForChild = function (childName) {
            if (!pathIsEmpty(this.path)) {
              Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(pathGetFront(this.path) === childName, 'operationForChild called for unrelated child.');
              return new AckUserWrite(pathPopFront(this.path), this.affectedTree, this.revert);
            } else if (this.affectedTree.value != null) {
              Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(this.affectedTree.children.isEmpty(), 'affectedTree should not have overlapping affected paths.'); // All child locations are affected as well; just return same operation.

              return this;
            } else {
              var childTree = this.affectedTree.subtree(new Path(childName));
              return new AckUserWrite(newEmptyPath(), childTree, this.revert);
            }
          };

          return AckUserWrite;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var ListenComplete =
        /** @class */
        function () {
          function ListenComplete(source, path) {
            this.source = source;
            this.path = path;
            /** @inheritDoc */

            this.type = OperationType.LISTEN_COMPLETE;
          }

          ListenComplete.prototype.operationForChild = function (childName) {
            if (pathIsEmpty(this.path)) {
              return new ListenComplete(this.source, newEmptyPath());
            } else {
              return new ListenComplete(this.source, pathPopFront(this.path));
            }
          };

          return ListenComplete;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var Overwrite =
        /** @class */
        function () {
          function Overwrite(source, path, snap) {
            this.source = source;
            this.path = path;
            this.snap = snap;
            /** @inheritDoc */

            this.type = OperationType.OVERWRITE;
          }

          Overwrite.prototype.operationForChild = function (childName) {
            if (pathIsEmpty(this.path)) {
              return new Overwrite(this.source, newEmptyPath(), this.snap.getImmediateChild(childName));
            } else {
              return new Overwrite(this.source, pathPopFront(this.path), this.snap);
            }
          };

          return Overwrite;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var Merge =
        /** @class */
        function () {
          function Merge(
          /** @inheritDoc */
          source,
          /** @inheritDoc */
          path,
          /** @inheritDoc */
          children) {
            this.source = source;
            this.path = path;
            this.children = children;
            /** @inheritDoc */

            this.type = OperationType.MERGE;
          }

          Merge.prototype.operationForChild = function (childName) {
            if (pathIsEmpty(this.path)) {
              var childTree = this.children.subtree(new Path(childName));

              if (childTree.isEmpty()) {
                // This child is unaffected
                return null;
              } else if (childTree.value) {
                // We have a snapshot for the child in question.  This becomes an overwrite of the child.
                return new Overwrite(this.source, newEmptyPath(), childTree.value);
              } else {
                // This is a merge at a deeper level
                return new Merge(this.source, newEmptyPath(), childTree);
              }
            } else {
              Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(pathGetFront(this.path) === childName, "Can't get a merge for a child not on the path of the operation");
              return new Merge(this.source, pathPopFront(this.path), this.children);
            }
          };

          Merge.prototype.toString = function () {
            return 'Operation(' + this.path + ': ' + this.source.toString() + ' merge: ' + this.children.toString() + ')';
          };

          return Merge;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * A cache node only stores complete children. Additionally it holds a flag whether the node can be considered fully
         * initialized in the sense that we know at one point in time this represented a valid state of the world, e.g.
         * initialized with data from the server, or a complete overwrite by the client. The filtered flag also tracks
         * whether a node potentially had children removed due to a filter.
         */


        var CacheNode =
        /** @class */
        function () {
          function CacheNode(node_, fullyInitialized_, filtered_) {
            this.node_ = node_;
            this.fullyInitialized_ = fullyInitialized_;
            this.filtered_ = filtered_;
          }
          /**
           * Returns whether this node was fully initialized with either server data or a complete overwrite by the client
           */


          CacheNode.prototype.isFullyInitialized = function () {
            return this.fullyInitialized_;
          };
          /**
           * Returns whether this node is potentially missing children due to a filter applied to the node
           */


          CacheNode.prototype.isFiltered = function () {
            return this.filtered_;
          };

          CacheNode.prototype.isCompleteForPath = function (path) {
            if (pathIsEmpty(path)) {
              return this.isFullyInitialized() && !this.filtered_;
            }

            var childKey = pathGetFront(path);
            return this.isCompleteForChild(childKey);
          };

          CacheNode.prototype.isCompleteForChild = function (key) {
            return this.isFullyInitialized() && !this.filtered_ || this.node_.hasChild(key);
          };

          CacheNode.prototype.getNode = function () {
            return this.node_;
          };

          return CacheNode;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * An EventGenerator is used to convert "raw" changes (Change) as computed by the
         * CacheDiffer into actual events (Event) that can be raised.  See generateEventsForChanges()
         * for details.
         *
         */


        var EventGenerator =
        /** @class */
        function () {
          function EventGenerator(query_) {
            this.query_ = query_;
            this.index_ = this.query_._queryParams.getIndex();
          }

          return EventGenerator;
        }();
        /**
         * Given a set of raw changes (no moved events and prevName not specified yet), and a set of
         * EventRegistrations that should be notified of these changes, generate the actual events to be raised.
         *
         * Notes:
         *  - child_moved events will be synthesized at this time for any child_changed events that affect
         *    our index.
         *  - prevName will be calculated based on the index ordering.
         */


        function eventGeneratorGenerateEventsForChanges(eventGenerator, changes, eventCache, eventRegistrations) {
          var events = [];
          var moves = [];
          changes.forEach(function (change) {
            if (change.type === "child_changed"
            /* CHILD_CHANGED */
            && eventGenerator.index_.indexedValueChanged(change.oldSnap, change.snapshotNode)) {
              moves.push(changeChildMoved(change.childName, change.snapshotNode));
            }
          });
          eventGeneratorGenerateEventsForType(eventGenerator, events, "child_removed"
          /* CHILD_REMOVED */
          , changes, eventRegistrations, eventCache);
          eventGeneratorGenerateEventsForType(eventGenerator, events, "child_added"
          /* CHILD_ADDED */
          , changes, eventRegistrations, eventCache);
          eventGeneratorGenerateEventsForType(eventGenerator, events, "child_moved"
          /* CHILD_MOVED */
          , moves, eventRegistrations, eventCache);
          eventGeneratorGenerateEventsForType(eventGenerator, events, "child_changed"
          /* CHILD_CHANGED */
          , changes, eventRegistrations, eventCache);
          eventGeneratorGenerateEventsForType(eventGenerator, events, "value"
          /* VALUE */
          , changes, eventRegistrations, eventCache);
          return events;
        }
        /**
         * Given changes of a single change type, generate the corresponding events.
         */


        function eventGeneratorGenerateEventsForType(eventGenerator, events, eventType, changes, registrations, eventCache) {
          var filteredChanges = changes.filter(function (change) {
            return change.type === eventType;
          });
          filteredChanges.sort(function (a, b) {
            return eventGeneratorCompareChanges(eventGenerator, a, b);
          });
          filteredChanges.forEach(function (change) {
            var materializedChange = eventGeneratorMaterializeSingleChange(eventGenerator, change, eventCache);
            registrations.forEach(function (registration) {
              if (registration.respondsTo(change.type)) {
                events.push(registration.createEvent(materializedChange, eventGenerator.query_));
              }
            });
          });
        }

        function eventGeneratorMaterializeSingleChange(eventGenerator, change, eventCache) {
          if (change.type === 'value' || change.type === 'child_removed') {
            return change;
          } else {
            change.prevName = eventCache.getPredecessorChildName(change.childName, change.snapshotNode, eventGenerator.index_);
            return change;
          }
        }

        function eventGeneratorCompareChanges(eventGenerator, a, b) {
          if (a.childName == null || b.childName == null) {
            throw Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assertionError"])('Should only compare child_ events.');
          }

          var aWrapped = new NamedNode(a.childName, a.snapshotNode);
          var bWrapped = new NamedNode(b.childName, b.snapshotNode);
          return eventGenerator.index_.compare(aWrapped, bWrapped);
        }
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        function newViewCache(eventCache, serverCache) {
          return {
            eventCache: eventCache,
            serverCache: serverCache
          };
        }

        function viewCacheUpdateEventSnap(viewCache, eventSnap, complete, filtered) {
          return newViewCache(new CacheNode(eventSnap, complete, filtered), viewCache.serverCache);
        }

        function viewCacheUpdateServerSnap(viewCache, serverSnap, complete, filtered) {
          return newViewCache(viewCache.eventCache, new CacheNode(serverSnap, complete, filtered));
        }

        function viewCacheGetCompleteEventSnap(viewCache) {
          return viewCache.eventCache.isFullyInitialized() ? viewCache.eventCache.getNode() : null;
        }

        function viewCacheGetCompleteServerSnap(viewCache) {
          return viewCache.serverCache.isFullyInitialized() ? viewCache.serverCache.getNode() : null;
        }
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var emptyChildrenSingleton;
        /**
         * Singleton empty children collection.
         *
         */

        var EmptyChildren = function EmptyChildren() {
          if (!emptyChildrenSingleton) {
            emptyChildrenSingleton = new SortedMap(stringCompare);
          }

          return emptyChildrenSingleton;
        };
        /**
         * A tree with immutable elements.
         */


        var ImmutableTree =
        /** @class */
        function () {
          function ImmutableTree(value, children) {
            if (children === void 0) {
              children = EmptyChildren();
            }

            this.value = value;
            this.children = children;
          }

          ImmutableTree.fromObject = function (obj) {
            var tree = new ImmutableTree(null);
            each(obj, function (childPath, childSnap) {
              tree = tree.set(new Path(childPath), childSnap);
            });
            return tree;
          };
          /**
           * True if the value is empty and there are no children
           */


          ImmutableTree.prototype.isEmpty = function () {
            return this.value === null && this.children.isEmpty();
          };
          /**
           * Given a path and predicate, return the first node and the path to that node
           * where the predicate returns true.
           *
           * TODO Do a perf test -- If we're creating a bunch of `{path: value:}`
           * objects on the way back out, it may be better to pass down a pathSoFar obj.
           *
           * @param relativePath - The remainder of the path
           * @param predicate - The predicate to satisfy to return a node
           */


          ImmutableTree.prototype.findRootMostMatchingPathAndValue = function (relativePath, predicate) {
            if (this.value != null && predicate(this.value)) {
              return {
                path: newEmptyPath(),
                value: this.value
              };
            } else {
              if (pathIsEmpty(relativePath)) {
                return null;
              } else {
                var front = pathGetFront(relativePath);
                var child = this.children.get(front);

                if (child !== null) {
                  var childExistingPathAndValue = child.findRootMostMatchingPathAndValue(pathPopFront(relativePath), predicate);

                  if (childExistingPathAndValue != null) {
                    var fullPath = pathChild(new Path(front), childExistingPathAndValue.path);
                    return {
                      path: fullPath,
                      value: childExistingPathAndValue.value
                    };
                  } else {
                    return null;
                  }
                } else {
                  return null;
                }
              }
            }
          };
          /**
           * Find, if it exists, the shortest subpath of the given path that points a defined
           * value in the tree
           */


          ImmutableTree.prototype.findRootMostValueAndPath = function (relativePath) {
            return this.findRootMostMatchingPathAndValue(relativePath, function () {
              return true;
            });
          };
          /**
           * @returns The subtree at the given path
           */


          ImmutableTree.prototype.subtree = function (relativePath) {
            if (pathIsEmpty(relativePath)) {
              return this;
            } else {
              var front = pathGetFront(relativePath);
              var childTree = this.children.get(front);

              if (childTree !== null) {
                return childTree.subtree(pathPopFront(relativePath));
              } else {
                return new ImmutableTree(null);
              }
            }
          };
          /**
           * Sets a value at the specified path.
           *
           * @param relativePath - Path to set value at.
           * @param toSet - Value to set.
           * @returns Resulting tree.
           */


          ImmutableTree.prototype.set = function (relativePath, toSet) {
            if (pathIsEmpty(relativePath)) {
              return new ImmutableTree(toSet, this.children);
            } else {
              var front = pathGetFront(relativePath);
              var child = this.children.get(front) || new ImmutableTree(null);
              var newChild = child.set(pathPopFront(relativePath), toSet);
              var newChildren = this.children.insert(front, newChild);
              return new ImmutableTree(this.value, newChildren);
            }
          };
          /**
           * Removes the value at the specified path.
           *
           * @param relativePath - Path to value to remove.
           * @returns Resulting tree.
           */


          ImmutableTree.prototype.remove = function (relativePath) {
            if (pathIsEmpty(relativePath)) {
              if (this.children.isEmpty()) {
                return new ImmutableTree(null);
              } else {
                return new ImmutableTree(null, this.children);
              }
            } else {
              var front = pathGetFront(relativePath);
              var child = this.children.get(front);

              if (child) {
                var newChild = child.remove(pathPopFront(relativePath));
                var newChildren = void 0;

                if (newChild.isEmpty()) {
                  newChildren = this.children.remove(front);
                } else {
                  newChildren = this.children.insert(front, newChild);
                }

                if (this.value === null && newChildren.isEmpty()) {
                  return new ImmutableTree(null);
                } else {
                  return new ImmutableTree(this.value, newChildren);
                }
              } else {
                return this;
              }
            }
          };
          /**
           * Gets a value from the tree.
           *
           * @param relativePath - Path to get value for.
           * @returns Value at path, or null.
           */


          ImmutableTree.prototype.get = function (relativePath) {
            if (pathIsEmpty(relativePath)) {
              return this.value;
            } else {
              var front = pathGetFront(relativePath);
              var child = this.children.get(front);

              if (child) {
                return child.get(pathPopFront(relativePath));
              } else {
                return null;
              }
            }
          };
          /**
           * Replace the subtree at the specified path with the given new tree.
           *
           * @param relativePath - Path to replace subtree for.
           * @param newTree - New tree.
           * @returns Resulting tree.
           */


          ImmutableTree.prototype.setTree = function (relativePath, newTree) {
            if (pathIsEmpty(relativePath)) {
              return newTree;
            } else {
              var front = pathGetFront(relativePath);
              var child = this.children.get(front) || new ImmutableTree(null);
              var newChild = child.setTree(pathPopFront(relativePath), newTree);
              var newChildren = void 0;

              if (newChild.isEmpty()) {
                newChildren = this.children.remove(front);
              } else {
                newChildren = this.children.insert(front, newChild);
              }

              return new ImmutableTree(this.value, newChildren);
            }
          };
          /**
           * Performs a depth first fold on this tree. Transforms a tree into a single
           * value, given a function that operates on the path to a node, an optional
           * current value, and a map of child names to folded subtrees
           */


          ImmutableTree.prototype.fold = function (fn) {
            return this.fold_(newEmptyPath(), fn);
          };
          /**
           * Recursive helper for public-facing fold() method
           */


          ImmutableTree.prototype.fold_ = function (pathSoFar, fn) {
            var accum = {};
            this.children.inorderTraversal(function (childKey, childTree) {
              accum[childKey] = childTree.fold_(pathChild(pathSoFar, childKey), fn);
            });
            return fn(pathSoFar, this.value, accum);
          };
          /**
           * Find the first matching value on the given path. Return the result of applying f to it.
           */


          ImmutableTree.prototype.findOnPath = function (path, f) {
            return this.findOnPath_(path, newEmptyPath(), f);
          };

          ImmutableTree.prototype.findOnPath_ = function (pathToFollow, pathSoFar, f) {
            var result = this.value ? f(pathSoFar, this.value) : false;

            if (result) {
              return result;
            } else {
              if (pathIsEmpty(pathToFollow)) {
                return null;
              } else {
                var front = pathGetFront(pathToFollow);
                var nextChild = this.children.get(front);

                if (nextChild) {
                  return nextChild.findOnPath_(pathPopFront(pathToFollow), pathChild(pathSoFar, front), f);
                } else {
                  return null;
                }
              }
            }
          };

          ImmutableTree.prototype.foreachOnPath = function (path, f) {
            return this.foreachOnPath_(path, newEmptyPath(), f);
          };

          ImmutableTree.prototype.foreachOnPath_ = function (pathToFollow, currentRelativePath, f) {
            if (pathIsEmpty(pathToFollow)) {
              return this;
            } else {
              if (this.value) {
                f(currentRelativePath, this.value);
              }

              var front = pathGetFront(pathToFollow);
              var nextChild = this.children.get(front);

              if (nextChild) {
                return nextChild.foreachOnPath_(pathPopFront(pathToFollow), pathChild(currentRelativePath, front), f);
              } else {
                return new ImmutableTree(null);
              }
            }
          };
          /**
           * Calls the given function for each node in the tree that has a value.
           *
           * @param f - A function to be called with the path from the root of the tree to
           * a node, and the value at that node. Called in depth-first order.
           */


          ImmutableTree.prototype.foreach = function (f) {
            this.foreach_(newEmptyPath(), f);
          };

          ImmutableTree.prototype.foreach_ = function (currentRelativePath, f) {
            this.children.inorderTraversal(function (childName, childTree) {
              childTree.foreach_(pathChild(currentRelativePath, childName), f);
            });

            if (this.value) {
              f(currentRelativePath, this.value);
            }
          };

          ImmutableTree.prototype.foreachChild = function (f) {
            this.children.inorderTraversal(function (childName, childTree) {
              if (childTree.value) {
                f(childName, childTree.value);
              }
            });
          };

          return ImmutableTree;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * This class holds a collection of writes that can be applied to nodes in unison. It abstracts away the logic with
         * dealing with priority writes and multiple nested writes. At any given path there is only allowed to be one write
         * modifying that path. Any write to an existing path or shadowing an existing path will modify that existing write
         * to reflect the write added.
         */


        var CompoundWrite =
        /** @class */
        function () {
          function CompoundWrite(writeTree_) {
            this.writeTree_ = writeTree_;
          }

          CompoundWrite.empty = function () {
            return new CompoundWrite(new ImmutableTree(null));
          };

          return CompoundWrite;
        }();

        function compoundWriteAddWrite(compoundWrite, path, node) {
          if (pathIsEmpty(path)) {
            return new CompoundWrite(new ImmutableTree(node));
          } else {
            var rootmost = compoundWrite.writeTree_.findRootMostValueAndPath(path);

            if (rootmost != null) {
              var rootMostPath = rootmost.path;
              var value = rootmost.value;
              var relativePath = newRelativePath(rootMostPath, path);
              value = value.updateChild(relativePath, node);
              return new CompoundWrite(compoundWrite.writeTree_.set(rootMostPath, value));
            } else {
              var subtree = new ImmutableTree(node);
              var newWriteTree = compoundWrite.writeTree_.setTree(path, subtree);
              return new CompoundWrite(newWriteTree);
            }
          }
        }

        function compoundWriteAddWrites(compoundWrite, path, updates) {
          var newWrite = compoundWrite;
          each(updates, function (childKey, node) {
            newWrite = compoundWriteAddWrite(newWrite, pathChild(path, childKey), node);
          });
          return newWrite;
        }
        /**
         * Will remove a write at the given path and deeper paths. This will <em>not</em> modify a write at a higher
         * location, which must be removed by calling this method with that path.
         *
         * @param compoundWrite - The CompoundWrite to remove.
         * @param path - The path at which a write and all deeper writes should be removed
         * @returns The new CompoundWrite with the removed path
         */


        function compoundWriteRemoveWrite(compoundWrite, path) {
          if (pathIsEmpty(path)) {
            return CompoundWrite.empty();
          } else {
            var newWriteTree = compoundWrite.writeTree_.setTree(path, new ImmutableTree(null));
            return new CompoundWrite(newWriteTree);
          }
        }
        /**
         * Returns whether this CompoundWrite will fully overwrite a node at a given location and can therefore be
         * considered "complete".
         *
         * @param compoundWrite - The CompoundWrite to check.
         * @param path - The path to check for
         * @returns Whether there is a complete write at that path
         */


        function compoundWriteHasCompleteWrite(compoundWrite, path) {
          return compoundWriteGetCompleteNode(compoundWrite, path) != null;
        }
        /**
         * Returns a node for a path if and only if the node is a "complete" overwrite at that path. This will not aggregate
         * writes from deeper paths, but will return child nodes from a more shallow path.
         *
         * @param compoundWrite - The CompoundWrite to get the node from.
         * @param path - The path to get a complete write
         * @returns The node if complete at that path, or null otherwise.
         */


        function compoundWriteGetCompleteNode(compoundWrite, path) {
          var rootmost = compoundWrite.writeTree_.findRootMostValueAndPath(path);

          if (rootmost != null) {
            return compoundWrite.writeTree_.get(rootmost.path).getChild(newRelativePath(rootmost.path, path));
          } else {
            return null;
          }
        }
        /**
         * Returns all children that are guaranteed to be a complete overwrite.
         *
         * @param compoundWrite - The CompoundWrite to get children from.
         * @returns A list of all complete children.
         */


        function compoundWriteGetCompleteChildren(compoundWrite) {
          var children = [];
          var node = compoundWrite.writeTree_.value;

          if (node != null) {
            // If it's a leaf node, it has no children; so nothing to do.
            if (!node.isLeafNode()) {
              node.forEachChild(PRIORITY_INDEX, function (childName, childNode) {
                children.push(new NamedNode(childName, childNode));
              });
            }
          } else {
            compoundWrite.writeTree_.children.inorderTraversal(function (childName, childTree) {
              if (childTree.value != null) {
                children.push(new NamedNode(childName, childTree.value));
              }
            });
          }

          return children;
        }

        function compoundWriteChildCompoundWrite(compoundWrite, path) {
          if (pathIsEmpty(path)) {
            return compoundWrite;
          } else {
            var shadowingNode = compoundWriteGetCompleteNode(compoundWrite, path);

            if (shadowingNode != null) {
              return new CompoundWrite(new ImmutableTree(shadowingNode));
            } else {
              return new CompoundWrite(compoundWrite.writeTree_.subtree(path));
            }
          }
        }
        /**
         * Returns true if this CompoundWrite is empty and therefore does not modify any nodes.
         * @returns Whether this CompoundWrite is empty
         */


        function compoundWriteIsEmpty(compoundWrite) {
          return compoundWrite.writeTree_.isEmpty();
        }
        /**
         * Applies this CompoundWrite to a node. The node is returned with all writes from this CompoundWrite applied to the
         * node
         * @param node - The node to apply this CompoundWrite to
         * @returns The node with all writes applied
         */


        function compoundWriteApply(compoundWrite, node) {
          return applySubtreeWrite(newEmptyPath(), compoundWrite.writeTree_, node);
        }

        function applySubtreeWrite(relativePath, writeTree, node) {
          if (writeTree.value != null) {
            // Since there a write is always a leaf, we're done here
            return node.updateChild(relativePath, writeTree.value);
          } else {
            var priorityWrite_1 = null;
            writeTree.children.inorderTraversal(function (childKey, childTree) {
              if (childKey === '.priority') {
                // Apply priorities at the end so we don't update priorities for either empty nodes or forget
                // to apply priorities to empty nodes that are later filled
                Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(childTree.value !== null, 'Priority writes must always be leaf nodes');
                priorityWrite_1 = childTree.value;
              } else {
                node = applySubtreeWrite(pathChild(relativePath, childKey), childTree, node);
              }
            }); // If there was a priority write, we only apply it if the node is not empty

            if (!node.getChild(relativePath).isEmpty() && priorityWrite_1 !== null) {
              node = node.updateChild(pathChild(relativePath, '.priority'), priorityWrite_1);
            }

            return node;
          }
        }
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * Create a new WriteTreeRef for the given path. For use with a new sync point at the given path.
         *
         */


        function writeTreeChildWrites(writeTree, path) {
          return newWriteTreeRef(path, writeTree);
        }
        /**
         * Record a new overwrite from user code.
         *
         * @param visible - This is set to false by some transactions. It should be excluded from event caches
         */


        function writeTreeAddOverwrite(writeTree, path, snap, writeId, visible) {
          Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(writeId > writeTree.lastWriteId, 'Stacking an older write on top of newer ones');

          if (visible === undefined) {
            visible = true;
          }

          writeTree.allWrites.push({
            path: path,
            snap: snap,
            writeId: writeId,
            visible: visible
          });

          if (visible) {
            writeTree.visibleWrites = compoundWriteAddWrite(writeTree.visibleWrites, path, snap);
          }

          writeTree.lastWriteId = writeId;
        }
        /**
         * Record a new merge from user code.
         */


        function writeTreeAddMerge(writeTree, path, changedChildren, writeId) {
          Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(writeId > writeTree.lastWriteId, 'Stacking an older merge on top of newer ones');
          writeTree.allWrites.push({
            path: path,
            children: changedChildren,
            writeId: writeId,
            visible: true
          });
          writeTree.visibleWrites = compoundWriteAddWrites(writeTree.visibleWrites, path, changedChildren);
          writeTree.lastWriteId = writeId;
        }

        function writeTreeGetWrite(writeTree, writeId) {
          for (var i = 0; i < writeTree.allWrites.length; i++) {
            var record = writeTree.allWrites[i];

            if (record.writeId === writeId) {
              return record;
            }
          }

          return null;
        }
        /**
         * Remove a write (either an overwrite or merge) that has been successfully acknowledge by the server. Recalculates
         * the tree if necessary.  We return true if it may have been visible, meaning views need to reevaluate.
         *
         * @returns true if the write may have been visible (meaning we'll need to reevaluate / raise
         * events as a result).
         */


        function writeTreeRemoveWrite(writeTree, writeId) {
          // Note: disabling this check. It could be a transaction that preempted another transaction, and thus was applied
          // out of order.
          //const validClear = revert || this.allWrites_.length === 0 || writeId <= this.allWrites_[0].writeId;
          //assert(validClear, "Either we don't have this write, or it's the first one in the queue");
          var idx = writeTree.allWrites.findIndex(function (s) {
            return s.writeId === writeId;
          });
          Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(idx >= 0, 'removeWrite called with nonexistent writeId.');
          var writeToRemove = writeTree.allWrites[idx];
          writeTree.allWrites.splice(idx, 1);
          var removedWriteWasVisible = writeToRemove.visible;
          var removedWriteOverlapsWithOtherWrites = false;
          var i = writeTree.allWrites.length - 1;

          while (removedWriteWasVisible && i >= 0) {
            var currentWrite = writeTree.allWrites[i];

            if (currentWrite.visible) {
              if (i >= idx && writeTreeRecordContainsPath_(currentWrite, writeToRemove.path)) {
                // The removed write was completely shadowed by a subsequent write.
                removedWriteWasVisible = false;
              } else if (pathContains(writeToRemove.path, currentWrite.path)) {
                // Either we're covering some writes or they're covering part of us (depending on which came first).
                removedWriteOverlapsWithOtherWrites = true;
              }
            }

            i--;
          }

          if (!removedWriteWasVisible) {
            return false;
          } else if (removedWriteOverlapsWithOtherWrites) {
            // There's some shadowing going on. Just rebuild the visible writes from scratch.
            writeTreeResetTree_(writeTree);
            return true;
          } else {
            // There's no shadowing.  We can safely just remove the write(s) from visibleWrites.
            if (writeToRemove.snap) {
              writeTree.visibleWrites = compoundWriteRemoveWrite(writeTree.visibleWrites, writeToRemove.path);
            } else {
              var children = writeToRemove.children;
              each(children, function (childName) {
                writeTree.visibleWrites = compoundWriteRemoveWrite(writeTree.visibleWrites, pathChild(writeToRemove.path, childName));
              });
            }

            return true;
          }
        }

        function writeTreeRecordContainsPath_(writeRecord, path) {
          if (writeRecord.snap) {
            return pathContains(writeRecord.path, path);
          } else {
            for (var childName in writeRecord.children) {
              if (writeRecord.children.hasOwnProperty(childName) && pathContains(pathChild(writeRecord.path, childName), path)) {
                return true;
              }
            }

            return false;
          }
        }
        /**
         * Re-layer the writes and merges into a tree so we can efficiently calculate event snapshots
         */


        function writeTreeResetTree_(writeTree) {
          writeTree.visibleWrites = writeTreeLayerTree_(writeTree.allWrites, writeTreeDefaultFilter_, newEmptyPath());

          if (writeTree.allWrites.length > 0) {
            writeTree.lastWriteId = writeTree.allWrites[writeTree.allWrites.length - 1].writeId;
          } else {
            writeTree.lastWriteId = -1;
          }
        }
        /**
         * The default filter used when constructing the tree. Keep everything that's visible.
         */


        function writeTreeDefaultFilter_(write) {
          return write.visible;
        }
        /**
         * Static method. Given an array of WriteRecords, a filter for which ones to include, and a path, construct the tree of
         * event data at that path.
         */


        function writeTreeLayerTree_(writes, filter, treeRoot) {
          var compoundWrite = CompoundWrite.empty();

          for (var i = 0; i < writes.length; ++i) {
            var write = writes[i]; // Theory, a later set will either:
            // a) abort a relevant transaction, so no need to worry about excluding it from calculating that transaction
            // b) not be relevant to a transaction (separate branch), so again will not affect the data for that transaction

            if (filter(write)) {
              var writePath = write.path;
              var relativePath = void 0;

              if (write.snap) {
                if (pathContains(treeRoot, writePath)) {
                  relativePath = newRelativePath(treeRoot, writePath);
                  compoundWrite = compoundWriteAddWrite(compoundWrite, relativePath, write.snap);
                } else if (pathContains(writePath, treeRoot)) {
                  relativePath = newRelativePath(writePath, treeRoot);
                  compoundWrite = compoundWriteAddWrite(compoundWrite, newEmptyPath(), write.snap.getChild(relativePath));
                } else ;
              } else if (write.children) {
                if (pathContains(treeRoot, writePath)) {
                  relativePath = newRelativePath(treeRoot, writePath);
                  compoundWrite = compoundWriteAddWrites(compoundWrite, relativePath, write.children);
                } else if (pathContains(writePath, treeRoot)) {
                  relativePath = newRelativePath(writePath, treeRoot);

                  if (pathIsEmpty(relativePath)) {
                    compoundWrite = compoundWriteAddWrites(compoundWrite, newEmptyPath(), write.children);
                  } else {
                    var child = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["safeGet"])(write.children, pathGetFront(relativePath));

                    if (child) {
                      // There exists a child in this node that matches the root path
                      var deepNode = child.getChild(pathPopFront(relativePath));
                      compoundWrite = compoundWriteAddWrite(compoundWrite, newEmptyPath(), deepNode);
                    }
                  }
                } else ;
              } else {
                throw Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assertionError"])('WriteRecord should have .snap or .children');
              }
            }
          }

          return compoundWrite;
        }
        /**
         * Given optional, underlying server data, and an optional set of constraints (exclude some sets, include hidden
         * writes), attempt to calculate a complete snapshot for the given path
         *
         * @param writeIdsToExclude - An optional set to be excluded
         * @param includeHiddenWrites - Defaults to false, whether or not to layer on writes with visible set to false
         */


        function writeTreeCalcCompleteEventCache(writeTree, treePath, completeServerCache, writeIdsToExclude, includeHiddenWrites) {
          if (!writeIdsToExclude && !includeHiddenWrites) {
            var shadowingNode = compoundWriteGetCompleteNode(writeTree.visibleWrites, treePath);

            if (shadowingNode != null) {
              return shadowingNode;
            } else {
              var subMerge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);

              if (compoundWriteIsEmpty(subMerge)) {
                return completeServerCache;
              } else if (completeServerCache == null && !compoundWriteHasCompleteWrite(subMerge, newEmptyPath())) {
                // We wouldn't have a complete snapshot, since there's no underlying data and no complete shadow
                return null;
              } else {
                var layeredCache = completeServerCache || ChildrenNode.EMPTY_NODE;
                return compoundWriteApply(subMerge, layeredCache);
              }
            }
          } else {
            var merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);

            if (!includeHiddenWrites && compoundWriteIsEmpty(merge)) {
              return completeServerCache;
            } else {
              // If the server cache is null, and we don't have a complete cache, we need to return null
              if (!includeHiddenWrites && completeServerCache == null && !compoundWriteHasCompleteWrite(merge, newEmptyPath())) {
                return null;
              } else {
                var filter = function filter(write) {
                  return (write.visible || includeHiddenWrites) && (!writeIdsToExclude || !~writeIdsToExclude.indexOf(write.writeId)) && (pathContains(write.path, treePath) || pathContains(treePath, write.path));
                };

                var mergeAtPath = writeTreeLayerTree_(writeTree.allWrites, filter, treePath);
                var layeredCache = completeServerCache || ChildrenNode.EMPTY_NODE;
                return compoundWriteApply(mergeAtPath, layeredCache);
              }
            }
          }
        }
        /**
         * With optional, underlying server data, attempt to return a children node of children that we have complete data for.
         * Used when creating new views, to pre-fill their complete event children snapshot.
         */


        function writeTreeCalcCompleteEventChildren(writeTree, treePath, completeServerChildren) {
          var completeChildren = ChildrenNode.EMPTY_NODE;
          var topLevelSet = compoundWriteGetCompleteNode(writeTree.visibleWrites, treePath);

          if (topLevelSet) {
            if (!topLevelSet.isLeafNode()) {
              // we're shadowing everything. Return the children.
              topLevelSet.forEachChild(PRIORITY_INDEX, function (childName, childSnap) {
                completeChildren = completeChildren.updateImmediateChild(childName, childSnap);
              });
            }

            return completeChildren;
          } else if (completeServerChildren) {
            // Layer any children we have on top of this
            // We know we don't have a top-level set, so just enumerate existing children
            var merge_1 = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);
            completeServerChildren.forEachChild(PRIORITY_INDEX, function (childName, childNode) {
              var node = compoundWriteApply(compoundWriteChildCompoundWrite(merge_1, new Path(childName)), childNode);
              completeChildren = completeChildren.updateImmediateChild(childName, node);
            }); // Add any complete children we have from the set

            compoundWriteGetCompleteChildren(merge_1).forEach(function (namedNode) {
              completeChildren = completeChildren.updateImmediateChild(namedNode.name, namedNode.node);
            });
            return completeChildren;
          } else {
            // We don't have anything to layer on top of. Layer on any children we have
            // Note that we can return an empty snap if we have a defined delete
            var merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);
            compoundWriteGetCompleteChildren(merge).forEach(function (namedNode) {
              completeChildren = completeChildren.updateImmediateChild(namedNode.name, namedNode.node);
            });
            return completeChildren;
          }
        }
        /**
         * Given that the underlying server data has updated, determine what, if anything, needs to be
         * applied to the event cache.
         *
         * Possibilities:
         *
         * 1. No writes are shadowing. Events should be raised, the snap to be applied comes from the server data
         *
         * 2. Some write is completely shadowing. No events to be raised
         *
         * 3. Is partially shadowed. Events
         *
         * Either existingEventSnap or existingServerSnap must exist
         */


        function writeTreeCalcEventCacheAfterServerOverwrite(writeTree, treePath, childPath, existingEventSnap, existingServerSnap) {
          Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(existingEventSnap || existingServerSnap, 'Either existingEventSnap or existingServerSnap must exist');
          var path = pathChild(treePath, childPath);

          if (compoundWriteHasCompleteWrite(writeTree.visibleWrites, path)) {
            // At this point we can probably guarantee that we're in case 2, meaning no events
            // May need to check visibility while doing the findRootMostValueAndPath call
            return null;
          } else {
            // No complete shadowing. We're either partially shadowing or not shadowing at all.
            var childMerge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, path);

            if (compoundWriteIsEmpty(childMerge)) {
              // We're not shadowing at all. Case 1
              return existingServerSnap.getChild(childPath);
            } else {
              // This could be more efficient if the serverNode + updates doesn't change the eventSnap
              // However this is tricky to find out, since user updates don't necessary change the server
              // snap, e.g. priority updates on empty nodes, or deep deletes. Another special case is if the server
              // adds nodes, but doesn't change any existing writes. It is therefore not enough to
              // only check if the updates change the serverNode.
              // Maybe check if the merge tree contains these special cases and only do a full overwrite in that case?
              return compoundWriteApply(childMerge, existingServerSnap.getChild(childPath));
            }
          }
        }
        /**
         * Returns a complete child for a given server snap after applying all user writes or null if there is no
         * complete child for this ChildKey.
         */


        function writeTreeCalcCompleteChild(writeTree, treePath, childKey, existingServerSnap) {
          var path = pathChild(treePath, childKey);
          var shadowingNode = compoundWriteGetCompleteNode(writeTree.visibleWrites, path);

          if (shadowingNode != null) {
            return shadowingNode;
          } else {
            if (existingServerSnap.isCompleteForChild(childKey)) {
              var childMerge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, path);
              return compoundWriteApply(childMerge, existingServerSnap.getNode().getImmediateChild(childKey));
            } else {
              return null;
            }
          }
        }
        /**
         * Returns a node if there is a complete overwrite for this path. More specifically, if there is a write at
         * a higher path, this will return the child of that write relative to the write and this path.
         * Returns null if there is no write at this path.
         */


        function writeTreeShadowingWrite(writeTree, path) {
          return compoundWriteGetCompleteNode(writeTree.visibleWrites, path);
        }
        /**
         * This method is used when processing child remove events on a query. If we can, we pull in children that were outside
         * the window, but may now be in the window.
         */


        function writeTreeCalcIndexedSlice(writeTree, treePath, completeServerData, startPost, count, reverse, index) {
          var toIterate;
          var merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);
          var shadowingNode = compoundWriteGetCompleteNode(merge, newEmptyPath());

          if (shadowingNode != null) {
            toIterate = shadowingNode;
          } else if (completeServerData != null) {
            toIterate = compoundWriteApply(merge, completeServerData);
          } else {
            // no children to iterate on
            return [];
          }

          toIterate = toIterate.withIndex(index);

          if (!toIterate.isEmpty() && !toIterate.isLeafNode()) {
            var nodes = [];
            var cmp = index.getCompare();
            var iter = reverse ? toIterate.getReverseIteratorFrom(startPost, index) : toIterate.getIteratorFrom(startPost, index);
            var next = iter.getNext();

            while (next && nodes.length < count) {
              if (cmp(next, startPost) !== 0) {
                nodes.push(next);
              }

              next = iter.getNext();
            }

            return nodes;
          } else {
            return [];
          }
        }

        function newWriteTree() {
          return {
            visibleWrites: CompoundWrite.empty(),
            allWrites: [],
            lastWriteId: -1
          };
        }
        /**
         * If possible, returns a complete event cache, using the underlying server data if possible. In addition, can be used
         * to get a cache that includes hidden writes, and excludes arbitrary writes. Note that customizing the returned node
         * can lead to a more expensive calculation.
         *
         * @param writeIdsToExclude - Optional writes to exclude.
         * @param includeHiddenWrites - Defaults to false, whether or not to layer on writes with visible set to false
         */


        function writeTreeRefCalcCompleteEventCache(writeTreeRef, completeServerCache, writeIdsToExclude, includeHiddenWrites) {
          return writeTreeCalcCompleteEventCache(writeTreeRef.writeTree, writeTreeRef.treePath, completeServerCache, writeIdsToExclude, includeHiddenWrites);
        }
        /**
         * If possible, returns a children node containing all of the complete children we have data for. The returned data is a
         * mix of the given server data and write data.
         *
         */


        function writeTreeRefCalcCompleteEventChildren(writeTreeRef, completeServerChildren) {
          return writeTreeCalcCompleteEventChildren(writeTreeRef.writeTree, writeTreeRef.treePath, completeServerChildren);
        }
        /**
         * Given that either the underlying server data has updated or the outstanding writes have updated, determine what,
         * if anything, needs to be applied to the event cache.
         *
         * Possibilities:
         *
         * 1. No writes are shadowing. Events should be raised, the snap to be applied comes from the server data
         *
         * 2. Some write is completely shadowing. No events to be raised
         *
         * 3. Is partially shadowed. Events should be raised
         *
         * Either existingEventSnap or existingServerSnap must exist, this is validated via an assert
         *
         *
         */


        function writeTreeRefCalcEventCacheAfterServerOverwrite(writeTreeRef, path, existingEventSnap, existingServerSnap) {
          return writeTreeCalcEventCacheAfterServerOverwrite(writeTreeRef.writeTree, writeTreeRef.treePath, path, existingEventSnap, existingServerSnap);
        }
        /**
         * Returns a node if there is a complete overwrite for this path. More specifically, if there is a write at
         * a higher path, this will return the child of that write relative to the write and this path.
         * Returns null if there is no write at this path.
         *
         */


        function writeTreeRefShadowingWrite(writeTreeRef, path) {
          return writeTreeShadowingWrite(writeTreeRef.writeTree, pathChild(writeTreeRef.treePath, path));
        }
        /**
         * This method is used when processing child remove events on a query. If we can, we pull in children that were outside
         * the window, but may now be in the window
         */


        function writeTreeRefCalcIndexedSlice(writeTreeRef, completeServerData, startPost, count, reverse, index) {
          return writeTreeCalcIndexedSlice(writeTreeRef.writeTree, writeTreeRef.treePath, completeServerData, startPost, count, reverse, index);
        }
        /**
         * Returns a complete child for a given server snap after applying all user writes or null if there is no
         * complete child for this ChildKey.
         */


        function writeTreeRefCalcCompleteChild(writeTreeRef, childKey, existingServerCache) {
          return writeTreeCalcCompleteChild(writeTreeRef.writeTree, writeTreeRef.treePath, childKey, existingServerCache);
        }
        /**
         * Return a WriteTreeRef for a child.
         */


        function writeTreeRefChild(writeTreeRef, childName) {
          return newWriteTreeRef(pathChild(writeTreeRef.treePath, childName), writeTreeRef.writeTree);
        }

        function newWriteTreeRef(path, writeTree) {
          return {
            treePath: path,
            writeTree: writeTree
          };
        }
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var ChildChangeAccumulator =
        /** @class */
        function () {
          function ChildChangeAccumulator() {
            this.changeMap = new Map();
          }

          ChildChangeAccumulator.prototype.trackChildChange = function (change) {
            var type = change.type;
            var childKey = change.childName;
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(type === "child_added"
            /* CHILD_ADDED */
            || type === "child_changed"
            /* CHILD_CHANGED */
            || type === "child_removed"
            /* CHILD_REMOVED */
            , 'Only child changes supported for tracking');
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(childKey !== '.priority', 'Only non-priority child changes can be tracked.');
            var oldChange = this.changeMap.get(childKey);

            if (oldChange) {
              var oldType = oldChange.type;

              if (type === "child_added"
              /* CHILD_ADDED */
              && oldType === "child_removed"
              /* CHILD_REMOVED */
              ) {
                  this.changeMap.set(childKey, changeChildChanged(childKey, change.snapshotNode, oldChange.snapshotNode));
                } else if (type === "child_removed"
              /* CHILD_REMOVED */
              && oldType === "child_added"
              /* CHILD_ADDED */
              ) {
                  this.changeMap["delete"](childKey);
                } else if (type === "child_removed"
              /* CHILD_REMOVED */
              && oldType === "child_changed"
              /* CHILD_CHANGED */
              ) {
                  this.changeMap.set(childKey, changeChildRemoved(childKey, oldChange.oldSnap));
                } else if (type === "child_changed"
              /* CHILD_CHANGED */
              && oldType === "child_added"
              /* CHILD_ADDED */
              ) {
                  this.changeMap.set(childKey, changeChildAdded(childKey, change.snapshotNode));
                } else if (type === "child_changed"
              /* CHILD_CHANGED */
              && oldType === "child_changed"
              /* CHILD_CHANGED */
              ) {
                  this.changeMap.set(childKey, changeChildChanged(childKey, change.snapshotNode, oldChange.oldSnap));
                } else {
                throw Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assertionError"])('Illegal combination of changes: ' + change + ' occurred after ' + oldChange);
              }
            } else {
              this.changeMap.set(childKey, change);
            }
          };

          ChildChangeAccumulator.prototype.getChanges = function () {
            return Array.from(this.changeMap.values());
          };

          return ChildChangeAccumulator;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * An implementation of CompleteChildSource that never returns any additional children
         */
        // eslint-disable-next-line @typescript-eslint/naming-convention


        var NoCompleteChildSource_ =
        /** @class */
        function () {
          function NoCompleteChildSource_() {}

          NoCompleteChildSource_.prototype.getCompleteChild = function (childKey) {
            return null;
          };

          NoCompleteChildSource_.prototype.getChildAfterChild = function (index, child, reverse) {
            return null;
          };

          return NoCompleteChildSource_;
        }();
        /**
         * Singleton instance.
         */


        var NO_COMPLETE_CHILD_SOURCE = new NoCompleteChildSource_();
        /**
         * An implementation of CompleteChildSource that uses a WriteTree in addition to any other server data or
         * old event caches available to calculate complete children.
         */

        var WriteTreeCompleteChildSource =
        /** @class */
        function () {
          function WriteTreeCompleteChildSource(writes_, viewCache_, optCompleteServerCache_) {
            if (optCompleteServerCache_ === void 0) {
              optCompleteServerCache_ = null;
            }

            this.writes_ = writes_;
            this.viewCache_ = viewCache_;
            this.optCompleteServerCache_ = optCompleteServerCache_;
          }

          WriteTreeCompleteChildSource.prototype.getCompleteChild = function (childKey) {
            var node = this.viewCache_.eventCache;

            if (node.isCompleteForChild(childKey)) {
              return node.getNode().getImmediateChild(childKey);
            } else {
              var serverNode = this.optCompleteServerCache_ != null ? new CacheNode(this.optCompleteServerCache_, true, false) : this.viewCache_.serverCache;
              return writeTreeRefCalcCompleteChild(this.writes_, childKey, serverNode);
            }
          };

          WriteTreeCompleteChildSource.prototype.getChildAfterChild = function (index, child, reverse) {
            var completeServerData = this.optCompleteServerCache_ != null ? this.optCompleteServerCache_ : viewCacheGetCompleteServerSnap(this.viewCache_);
            var nodes = writeTreeRefCalcIndexedSlice(this.writes_, completeServerData, child, 1, reverse, index);

            if (nodes.length === 0) {
              return null;
            } else {
              return nodes[0];
            }
          };

          return WriteTreeCompleteChildSource;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        function newViewProcessor(filter) {
          return {
            filter: filter
          };
        }

        function viewProcessorAssertIndexed(viewProcessor, viewCache) {
          Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(viewCache.eventCache.getNode().isIndexed(viewProcessor.filter.getIndex()), 'Event snap not indexed');
          Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(viewCache.serverCache.getNode().isIndexed(viewProcessor.filter.getIndex()), 'Server snap not indexed');
        }

        function viewProcessorApplyOperation(viewProcessor, oldViewCache, operation, writesCache, completeCache) {
          var accumulator = new ChildChangeAccumulator();
          var newViewCache, filterServerNode;

          if (operation.type === OperationType.OVERWRITE) {
            var overwrite = operation;

            if (overwrite.source.fromUser) {
              newViewCache = viewProcessorApplyUserOverwrite(viewProcessor, oldViewCache, overwrite.path, overwrite.snap, writesCache, completeCache, accumulator);
            } else {
              Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(overwrite.source.fromServer, 'Unknown source.'); // We filter the node if it's a tagged update or the node has been previously filtered  and the
              // update is not at the root in which case it is ok (and necessary) to mark the node unfiltered
              // again

              filterServerNode = overwrite.source.tagged || oldViewCache.serverCache.isFiltered() && !pathIsEmpty(overwrite.path);
              newViewCache = viewProcessorApplyServerOverwrite(viewProcessor, oldViewCache, overwrite.path, overwrite.snap, writesCache, completeCache, filterServerNode, accumulator);
            }
          } else if (operation.type === OperationType.MERGE) {
            var merge = operation;

            if (merge.source.fromUser) {
              newViewCache = viewProcessorApplyUserMerge(viewProcessor, oldViewCache, merge.path, merge.children, writesCache, completeCache, accumulator);
            } else {
              Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(merge.source.fromServer, 'Unknown source.'); // We filter the node if it's a tagged update or the node has been previously filtered

              filterServerNode = merge.source.tagged || oldViewCache.serverCache.isFiltered();
              newViewCache = viewProcessorApplyServerMerge(viewProcessor, oldViewCache, merge.path, merge.children, writesCache, completeCache, filterServerNode, accumulator);
            }
          } else if (operation.type === OperationType.ACK_USER_WRITE) {
            var ackUserWrite = operation;

            if (!ackUserWrite.revert) {
              newViewCache = viewProcessorAckUserWrite(viewProcessor, oldViewCache, ackUserWrite.path, ackUserWrite.affectedTree, writesCache, completeCache, accumulator);
            } else {
              newViewCache = viewProcessorRevertUserWrite(viewProcessor, oldViewCache, ackUserWrite.path, writesCache, completeCache, accumulator);
            }
          } else if (operation.type === OperationType.LISTEN_COMPLETE) {
            newViewCache = viewProcessorListenComplete(viewProcessor, oldViewCache, operation.path, writesCache, accumulator);
          } else {
            throw Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assertionError"])('Unknown operation type: ' + operation.type);
          }

          var changes = accumulator.getChanges();
          viewProcessorMaybeAddValueEvent(oldViewCache, newViewCache, changes);
          return {
            viewCache: newViewCache,
            changes: changes
          };
        }

        function viewProcessorMaybeAddValueEvent(oldViewCache, newViewCache, accumulator) {
          var eventSnap = newViewCache.eventCache;

          if (eventSnap.isFullyInitialized()) {
            var isLeafOrEmpty = eventSnap.getNode().isLeafNode() || eventSnap.getNode().isEmpty();
            var oldCompleteSnap = viewCacheGetCompleteEventSnap(oldViewCache);

            if (accumulator.length > 0 || !oldViewCache.eventCache.isFullyInitialized() || isLeafOrEmpty && !eventSnap.getNode().equals(oldCompleteSnap) || !eventSnap.getNode().getPriority().equals(oldCompleteSnap.getPriority())) {
              accumulator.push(changeValue(viewCacheGetCompleteEventSnap(newViewCache)));
            }
          }
        }

        function viewProcessorGenerateEventCacheAfterServerEvent(viewProcessor, viewCache, changePath, writesCache, source, accumulator) {
          var oldEventSnap = viewCache.eventCache;

          if (writeTreeRefShadowingWrite(writesCache, changePath) != null) {
            // we have a shadowing write, ignore changes
            return viewCache;
          } else {
            var newEventCache = void 0,
                serverNode = void 0;

            if (pathIsEmpty(changePath)) {
              // TODO: figure out how this plays with "sliding ack windows"
              Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(viewCache.serverCache.isFullyInitialized(), 'If change path is empty, we must have complete server data');

              if (viewCache.serverCache.isFiltered()) {
                // We need to special case this, because we need to only apply writes to complete children, or
                // we might end up raising events for incomplete children. If the server data is filtered deep
                // writes cannot be guaranteed to be complete
                var serverCache = viewCacheGetCompleteServerSnap(viewCache);
                var completeChildren = serverCache instanceof ChildrenNode ? serverCache : ChildrenNode.EMPTY_NODE;
                var completeEventChildren = writeTreeRefCalcCompleteEventChildren(writesCache, completeChildren);
                newEventCache = viewProcessor.filter.updateFullNode(viewCache.eventCache.getNode(), completeEventChildren, accumulator);
              } else {
                var completeNode = writeTreeRefCalcCompleteEventCache(writesCache, viewCacheGetCompleteServerSnap(viewCache));
                newEventCache = viewProcessor.filter.updateFullNode(viewCache.eventCache.getNode(), completeNode, accumulator);
              }
            } else {
              var childKey = pathGetFront(changePath);

              if (childKey === '.priority') {
                Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(pathGetLength(changePath) === 1, "Can't have a priority with additional path components");
                var oldEventNode = oldEventSnap.getNode();
                serverNode = viewCache.serverCache.getNode(); // we might have overwrites for this priority

                var updatedPriority = writeTreeRefCalcEventCacheAfterServerOverwrite(writesCache, changePath, oldEventNode, serverNode);

                if (updatedPriority != null) {
                  newEventCache = viewProcessor.filter.updatePriority(oldEventNode, updatedPriority);
                } else {
                  // priority didn't change, keep old node
                  newEventCache = oldEventSnap.getNode();
                }
              } else {
                var childChangePath = pathPopFront(changePath); // update child

                var newEventChild = void 0;

                if (oldEventSnap.isCompleteForChild(childKey)) {
                  serverNode = viewCache.serverCache.getNode();
                  var eventChildUpdate = writeTreeRefCalcEventCacheAfterServerOverwrite(writesCache, changePath, oldEventSnap.getNode(), serverNode);

                  if (eventChildUpdate != null) {
                    newEventChild = oldEventSnap.getNode().getImmediateChild(childKey).updateChild(childChangePath, eventChildUpdate);
                  } else {
                    // Nothing changed, just keep the old child
                    newEventChild = oldEventSnap.getNode().getImmediateChild(childKey);
                  }
                } else {
                  newEventChild = writeTreeRefCalcCompleteChild(writesCache, childKey, viewCache.serverCache);
                }

                if (newEventChild != null) {
                  newEventCache = viewProcessor.filter.updateChild(oldEventSnap.getNode(), childKey, newEventChild, childChangePath, source, accumulator);
                } else {
                  // no complete child available or no change
                  newEventCache = oldEventSnap.getNode();
                }
              }
            }

            return viewCacheUpdateEventSnap(viewCache, newEventCache, oldEventSnap.isFullyInitialized() || pathIsEmpty(changePath), viewProcessor.filter.filtersNodes());
          }
        }

        function viewProcessorApplyServerOverwrite(viewProcessor, oldViewCache, changePath, changedSnap, writesCache, completeCache, filterServerNode, accumulator) {
          var oldServerSnap = oldViewCache.serverCache;
          var newServerCache;
          var serverFilter = filterServerNode ? viewProcessor.filter : viewProcessor.filter.getIndexedFilter();

          if (pathIsEmpty(changePath)) {
            newServerCache = serverFilter.updateFullNode(oldServerSnap.getNode(), changedSnap, null);
          } else if (serverFilter.filtersNodes() && !oldServerSnap.isFiltered()) {
            // we want to filter the server node, but we didn't filter the server node yet, so simulate a full update
            var newServerNode = oldServerSnap.getNode().updateChild(changePath, changedSnap);
            newServerCache = serverFilter.updateFullNode(oldServerSnap.getNode(), newServerNode, null);
          } else {
            var childKey = pathGetFront(changePath);

            if (!oldServerSnap.isCompleteForPath(changePath) && pathGetLength(changePath) > 1) {
              // We don't update incomplete nodes with updates intended for other listeners
              return oldViewCache;
            }

            var childChangePath = pathPopFront(changePath);
            var childNode = oldServerSnap.getNode().getImmediateChild(childKey);
            var newChildNode = childNode.updateChild(childChangePath, changedSnap);

            if (childKey === '.priority') {
              newServerCache = serverFilter.updatePriority(oldServerSnap.getNode(), newChildNode);
            } else {
              newServerCache = serverFilter.updateChild(oldServerSnap.getNode(), childKey, newChildNode, childChangePath, NO_COMPLETE_CHILD_SOURCE, null);
            }
          }

          var newViewCache = viewCacheUpdateServerSnap(oldViewCache, newServerCache, oldServerSnap.isFullyInitialized() || pathIsEmpty(changePath), serverFilter.filtersNodes());
          var source = new WriteTreeCompleteChildSource(writesCache, newViewCache, completeCache);
          return viewProcessorGenerateEventCacheAfterServerEvent(viewProcessor, newViewCache, changePath, writesCache, source, accumulator);
        }

        function viewProcessorApplyUserOverwrite(viewProcessor, oldViewCache, changePath, changedSnap, writesCache, completeCache, accumulator) {
          var oldEventSnap = oldViewCache.eventCache;
          var newViewCache, newEventCache;
          var source = new WriteTreeCompleteChildSource(writesCache, oldViewCache, completeCache);

          if (pathIsEmpty(changePath)) {
            newEventCache = viewProcessor.filter.updateFullNode(oldViewCache.eventCache.getNode(), changedSnap, accumulator);
            newViewCache = viewCacheUpdateEventSnap(oldViewCache, newEventCache, true, viewProcessor.filter.filtersNodes());
          } else {
            var childKey = pathGetFront(changePath);

            if (childKey === '.priority') {
              newEventCache = viewProcessor.filter.updatePriority(oldViewCache.eventCache.getNode(), changedSnap);
              newViewCache = viewCacheUpdateEventSnap(oldViewCache, newEventCache, oldEventSnap.isFullyInitialized(), oldEventSnap.isFiltered());
            } else {
              var childChangePath = pathPopFront(changePath);
              var oldChild = oldEventSnap.getNode().getImmediateChild(childKey);
              var newChild = void 0;

              if (pathIsEmpty(childChangePath)) {
                // Child overwrite, we can replace the child
                newChild = changedSnap;
              } else {
                var childNode = source.getCompleteChild(childKey);

                if (childNode != null) {
                  if (pathGetBack(childChangePath) === '.priority' && childNode.getChild(pathParent(childChangePath)).isEmpty()) {
                    // This is a priority update on an empty node. If this node exists on the server, the
                    // server will send down the priority in the update, so ignore for now
                    newChild = childNode;
                  } else {
                    newChild = childNode.updateChild(childChangePath, changedSnap);
                  }
                } else {
                  // There is no complete child node available
                  newChild = ChildrenNode.EMPTY_NODE;
                }
              }

              if (!oldChild.equals(newChild)) {
                var newEventSnap = viewProcessor.filter.updateChild(oldEventSnap.getNode(), childKey, newChild, childChangePath, source, accumulator);
                newViewCache = viewCacheUpdateEventSnap(oldViewCache, newEventSnap, oldEventSnap.isFullyInitialized(), viewProcessor.filter.filtersNodes());
              } else {
                newViewCache = oldViewCache;
              }
            }
          }

          return newViewCache;
        }

        function viewProcessorCacheHasChild(viewCache, childKey) {
          return viewCache.eventCache.isCompleteForChild(childKey);
        }

        function viewProcessorApplyUserMerge(viewProcessor, viewCache, path, changedChildren, writesCache, serverCache, accumulator) {
          // HACK: In the case of a limit query, there may be some changes that bump things out of the
          // window leaving room for new items.  It's important we process these changes first, so we
          // iterate the changes twice, first processing any that affect items currently in view.
          // TODO: I consider an item "in view" if cacheHasChild is true, which checks both the server
          // and event snap.  I'm not sure if this will result in edge cases when a child is in one but
          // not the other.
          var curViewCache = viewCache;
          changedChildren.foreach(function (relativePath, childNode) {
            var writePath = pathChild(path, relativePath);

            if (viewProcessorCacheHasChild(viewCache, pathGetFront(writePath))) {
              curViewCache = viewProcessorApplyUserOverwrite(viewProcessor, curViewCache, writePath, childNode, writesCache, serverCache, accumulator);
            }
          });
          changedChildren.foreach(function (relativePath, childNode) {
            var writePath = pathChild(path, relativePath);

            if (!viewProcessorCacheHasChild(viewCache, pathGetFront(writePath))) {
              curViewCache = viewProcessorApplyUserOverwrite(viewProcessor, curViewCache, writePath, childNode, writesCache, serverCache, accumulator);
            }
          });
          return curViewCache;
        }

        function viewProcessorApplyMerge(viewProcessor, node, merge) {
          merge.foreach(function (relativePath, childNode) {
            node = node.updateChild(relativePath, childNode);
          });
          return node;
        }

        function viewProcessorApplyServerMerge(viewProcessor, viewCache, path, changedChildren, writesCache, serverCache, filterServerNode, accumulator) {
          // If we don't have a cache yet, this merge was intended for a previously listen in the same location. Ignore it and
          // wait for the complete data update coming soon.
          if (viewCache.serverCache.getNode().isEmpty() && !viewCache.serverCache.isFullyInitialized()) {
            return viewCache;
          } // HACK: In the case of a limit query, there may be some changes that bump things out of the
          // window leaving room for new items.  It's important we process these changes first, so we
          // iterate the changes twice, first processing any that affect items currently in view.
          // TODO: I consider an item "in view" if cacheHasChild is true, which checks both the server
          // and event snap.  I'm not sure if this will result in edge cases when a child is in one but
          // not the other.


          var curViewCache = viewCache;
          var viewMergeTree;

          if (pathIsEmpty(path)) {
            viewMergeTree = changedChildren;
          } else {
            viewMergeTree = new ImmutableTree(null).setTree(path, changedChildren);
          }

          var serverNode = viewCache.serverCache.getNode();
          viewMergeTree.children.inorderTraversal(function (childKey, childTree) {
            if (serverNode.hasChild(childKey)) {
              var serverChild = viewCache.serverCache.getNode().getImmediateChild(childKey);
              var newChild = viewProcessorApplyMerge(viewProcessor, serverChild, childTree);
              curViewCache = viewProcessorApplyServerOverwrite(viewProcessor, curViewCache, new Path(childKey), newChild, writesCache, serverCache, filterServerNode, accumulator);
            }
          });
          viewMergeTree.children.inorderTraversal(function (childKey, childMergeTree) {
            var isUnknownDeepMerge = !viewCache.serverCache.isCompleteForChild(childKey) && childMergeTree.value === undefined;

            if (!serverNode.hasChild(childKey) && !isUnknownDeepMerge) {
              var serverChild = viewCache.serverCache.getNode().getImmediateChild(childKey);
              var newChild = viewProcessorApplyMerge(viewProcessor, serverChild, childMergeTree);
              curViewCache = viewProcessorApplyServerOverwrite(viewProcessor, curViewCache, new Path(childKey), newChild, writesCache, serverCache, filterServerNode, accumulator);
            }
          });
          return curViewCache;
        }

        function viewProcessorAckUserWrite(viewProcessor, viewCache, ackPath, affectedTree, writesCache, completeCache, accumulator) {
          if (writeTreeRefShadowingWrite(writesCache, ackPath) != null) {
            return viewCache;
          } // Only filter server node if it is currently filtered


          var filterServerNode = viewCache.serverCache.isFiltered(); // Essentially we'll just get our existing server cache for the affected paths and re-apply it as a server update
          // now that it won't be shadowed.

          var serverCache = viewCache.serverCache;

          if (affectedTree.value != null) {
            // This is an overwrite.
            if (pathIsEmpty(ackPath) && serverCache.isFullyInitialized() || serverCache.isCompleteForPath(ackPath)) {
              return viewProcessorApplyServerOverwrite(viewProcessor, viewCache, ackPath, serverCache.getNode().getChild(ackPath), writesCache, completeCache, filterServerNode, accumulator);
            } else if (pathIsEmpty(ackPath)) {
              // This is a goofy edge case where we are acking data at this location but don't have full data.  We
              // should just re-apply whatever we have in our cache as a merge.
              var changedChildren_1 = new ImmutableTree(null);
              serverCache.getNode().forEachChild(KEY_INDEX, function (name, node) {
                changedChildren_1 = changedChildren_1.set(new Path(name), node);
              });
              return viewProcessorApplyServerMerge(viewProcessor, viewCache, ackPath, changedChildren_1, writesCache, completeCache, filterServerNode, accumulator);
            } else {
              return viewCache;
            }
          } else {
            // This is a merge.
            var changedChildren_2 = new ImmutableTree(null);
            affectedTree.foreach(function (mergePath, value) {
              var serverCachePath = pathChild(ackPath, mergePath);

              if (serverCache.isCompleteForPath(serverCachePath)) {
                changedChildren_2 = changedChildren_2.set(mergePath, serverCache.getNode().getChild(serverCachePath));
              }
            });
            return viewProcessorApplyServerMerge(viewProcessor, viewCache, ackPath, changedChildren_2, writesCache, completeCache, filterServerNode, accumulator);
          }
        }

        function viewProcessorListenComplete(viewProcessor, viewCache, path, writesCache, accumulator) {
          var oldServerNode = viewCache.serverCache;
          var newViewCache = viewCacheUpdateServerSnap(viewCache, oldServerNode.getNode(), oldServerNode.isFullyInitialized() || pathIsEmpty(path), oldServerNode.isFiltered());
          return viewProcessorGenerateEventCacheAfterServerEvent(viewProcessor, newViewCache, path, writesCache, NO_COMPLETE_CHILD_SOURCE, accumulator);
        }

        function viewProcessorRevertUserWrite(viewProcessor, viewCache, path, writesCache, completeServerCache, accumulator) {
          var complete;

          if (writeTreeRefShadowingWrite(writesCache, path) != null) {
            return viewCache;
          } else {
            var source = new WriteTreeCompleteChildSource(writesCache, viewCache, completeServerCache);
            var oldEventCache = viewCache.eventCache.getNode();
            var newEventCache = void 0;

            if (pathIsEmpty(path) || pathGetFront(path) === '.priority') {
              var newNode = void 0;

              if (viewCache.serverCache.isFullyInitialized()) {
                newNode = writeTreeRefCalcCompleteEventCache(writesCache, viewCacheGetCompleteServerSnap(viewCache));
              } else {
                var serverChildren = viewCache.serverCache.getNode();
                Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(serverChildren instanceof ChildrenNode, 'serverChildren would be complete if leaf node');
                newNode = writeTreeRefCalcCompleteEventChildren(writesCache, serverChildren);
              }

              newNode = newNode;
              newEventCache = viewProcessor.filter.updateFullNode(oldEventCache, newNode, accumulator);
            } else {
              var childKey = pathGetFront(path);
              var newChild = writeTreeRefCalcCompleteChild(writesCache, childKey, viewCache.serverCache);

              if (newChild == null && viewCache.serverCache.isCompleteForChild(childKey)) {
                newChild = oldEventCache.getImmediateChild(childKey);
              }

              if (newChild != null) {
                newEventCache = viewProcessor.filter.updateChild(oldEventCache, childKey, newChild, pathPopFront(path), source, accumulator);
              } else if (viewCache.eventCache.getNode().hasChild(childKey)) {
                // No complete child available, delete the existing one, if any
                newEventCache = viewProcessor.filter.updateChild(oldEventCache, childKey, ChildrenNode.EMPTY_NODE, pathPopFront(path), source, accumulator);
              } else {
                newEventCache = oldEventCache;
              }

              if (newEventCache.isEmpty() && viewCache.serverCache.isFullyInitialized()) {
                // We might have reverted all child writes. Maybe the old event was a leaf node
                complete = writeTreeRefCalcCompleteEventCache(writesCache, viewCacheGetCompleteServerSnap(viewCache));

                if (complete.isLeafNode()) {
                  newEventCache = viewProcessor.filter.updateFullNode(newEventCache, complete, accumulator);
                }
              }
            }

            complete = viewCache.serverCache.isFullyInitialized() || writeTreeRefShadowingWrite(writesCache, newEmptyPath()) != null;
            return viewCacheUpdateEventSnap(viewCache, newEventCache, complete, viewProcessor.filter.filtersNodes());
          }
        }
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * A view represents a specific location and query that has 1 or more event registrations.
         *
         * It does several things:
         *  - Maintains the list of event registrations for this location/query.
         *  - Maintains a cache of the data visible for this location/query.
         *  - Applies new operations (via applyOperation), updates the cache, and based on the event
         *    registrations returns the set of events to be raised.
         */


        var View =
        /** @class */
        function () {
          function View(query_, initialViewCache) {
            this.query_ = query_;
            this.eventRegistrations_ = [];
            var params = this.query_._queryParams;
            var indexFilter = new IndexedFilter(params.getIndex());
            var filter = queryParamsGetNodeFilter(params);
            this.processor_ = newViewProcessor(filter);
            var initialServerCache = initialViewCache.serverCache;
            var initialEventCache = initialViewCache.eventCache; // Don't filter server node with other filter than index, wait for tagged listen

            var serverSnap = indexFilter.updateFullNode(ChildrenNode.EMPTY_NODE, initialServerCache.getNode(), null);
            var eventSnap = filter.updateFullNode(ChildrenNode.EMPTY_NODE, initialEventCache.getNode(), null);
            var newServerCache = new CacheNode(serverSnap, initialServerCache.isFullyInitialized(), indexFilter.filtersNodes());
            var newEventCache = new CacheNode(eventSnap, initialEventCache.isFullyInitialized(), filter.filtersNodes());
            this.viewCache_ = newViewCache(newEventCache, newServerCache);
            this.eventGenerator_ = new EventGenerator(this.query_);
          }

          Object.defineProperty(View.prototype, "query", {
            get: function get() {
              return this.query_;
            },
            enumerable: false,
            configurable: true
          });
          return View;
        }();

        function viewGetServerCache(view) {
          return view.viewCache_.serverCache.getNode();
        }

        function viewGetCompleteNode(view) {
          return viewCacheGetCompleteEventSnap(view.viewCache_);
        }

        function viewGetCompleteServerCache(view, path) {
          var cache = viewCacheGetCompleteServerSnap(view.viewCache_);

          if (cache) {
            // If this isn't a "loadsAllData" view, then cache isn't actually a complete cache and
            // we need to see if it contains the child we're interested in.
            if (view.query._queryParams.loadsAllData() || !pathIsEmpty(path) && !cache.getImmediateChild(pathGetFront(path)).isEmpty()) {
              return cache.getChild(path);
            }
          }

          return null;
        }

        function viewIsEmpty(view) {
          return view.eventRegistrations_.length === 0;
        }

        function viewAddEventRegistration(view, eventRegistration) {
          view.eventRegistrations_.push(eventRegistration);
        }
        /**
         * @param eventRegistration - If null, remove all callbacks.
         * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.
         * @returns Cancel events, if cancelError was provided.
         */


        function viewRemoveEventRegistration(view, eventRegistration, cancelError) {
          var cancelEvents = [];

          if (cancelError) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(eventRegistration == null, 'A cancel should cancel all event registrations.');
            var path_1 = view.query._path;
            view.eventRegistrations_.forEach(function (registration) {
              var maybeEvent = registration.createCancelEvent(cancelError, path_1);

              if (maybeEvent) {
                cancelEvents.push(maybeEvent);
              }
            });
          }

          if (eventRegistration) {
            var remaining = [];

            for (var i = 0; i < view.eventRegistrations_.length; ++i) {
              var existing = view.eventRegistrations_[i];

              if (!existing.matches(eventRegistration)) {
                remaining.push(existing);
              } else if (eventRegistration.hasAnyCallback()) {
                // We're removing just this one
                remaining = remaining.concat(view.eventRegistrations_.slice(i + 1));
                break;
              }
            }

            view.eventRegistrations_ = remaining;
          } else {
            view.eventRegistrations_ = [];
          }

          return cancelEvents;
        }
        /**
         * Applies the given Operation, updates our cache, and returns the appropriate events.
         */


        function viewApplyOperation(view, operation, writesCache, completeServerCache) {
          if (operation.type === OperationType.MERGE && operation.source.queryId !== null) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(viewCacheGetCompleteServerSnap(view.viewCache_), 'We should always have a full cache before handling merges');
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(viewCacheGetCompleteEventSnap(view.viewCache_), 'Missing event cache, even though we have a server cache');
          }

          var oldViewCache = view.viewCache_;
          var result = viewProcessorApplyOperation(view.processor_, oldViewCache, operation, writesCache, completeServerCache);
          viewProcessorAssertIndexed(view.processor_, result.viewCache);
          Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(result.viewCache.serverCache.isFullyInitialized() || !oldViewCache.serverCache.isFullyInitialized(), 'Once a server snap is complete, it should never go back');
          view.viewCache_ = result.viewCache;
          return viewGenerateEventsForChanges_(view, result.changes, result.viewCache.eventCache.getNode(), null);
        }

        function viewGetInitialEvents(view, registration) {
          var eventSnap = view.viewCache_.eventCache;
          var initialChanges = [];

          if (!eventSnap.getNode().isLeafNode()) {
            var eventNode = eventSnap.getNode();
            eventNode.forEachChild(PRIORITY_INDEX, function (key, childNode) {
              initialChanges.push(changeChildAdded(key, childNode));
            });
          }

          if (eventSnap.isFullyInitialized()) {
            initialChanges.push(changeValue(eventSnap.getNode()));
          }

          return viewGenerateEventsForChanges_(view, initialChanges, eventSnap.getNode(), registration);
        }

        function viewGenerateEventsForChanges_(view, changes, eventCache, eventRegistration) {
          var registrations = eventRegistration ? [eventRegistration] : view.eventRegistrations_;
          return eventGeneratorGenerateEventsForChanges(view.eventGenerator_, changes, eventCache, registrations);
        }
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var referenceConstructor;
        /**
         * SyncPoint represents a single location in a SyncTree with 1 or more event registrations, meaning we need to
         * maintain 1 or more Views at this location to cache server data and raise appropriate events for server changes
         * and user writes (set, transaction, update).
         *
         * It's responsible for:
         *  - Maintaining the set of 1 or more views necessary at this location (a SyncPoint with 0 views should be removed).
         *  - Proxying user / server operations to the views as appropriate (i.e. applyServerOverwrite,
         *    applyUserOverwrite, etc.)
         */

        var SyncPoint =
        /** @class */
        function () {
          function SyncPoint() {
            /**
             * The Views being tracked at this location in the tree, stored as a map where the key is a
             * queryId and the value is the View for that query.
             *
             * NOTE: This list will be quite small (usually 1, but perhaps 2 or 3; any more is an odd use case).
             */
            this.views = new Map();
          }

          return SyncPoint;
        }();

        function syncPointSetReferenceConstructor(val) {
          Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(!referenceConstructor, '__referenceConstructor has already been defined');
          referenceConstructor = val;
        }

        function syncPointGetReferenceConstructor() {
          Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(referenceConstructor, 'Reference.ts has not been loaded');
          return referenceConstructor;
        }

        function syncPointIsEmpty(syncPoint) {
          return syncPoint.views.size === 0;
        }

        function syncPointApplyOperation(syncPoint, operation, writesCache, optCompleteServerCache) {
          var e_1, _a;

          var queryId = operation.source.queryId;

          if (queryId !== null) {
            var view = syncPoint.views.get(queryId);
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(view != null, 'SyncTree gave us an op for an invalid query.');
            return viewApplyOperation(view, operation, writesCache, optCompleteServerCache);
          } else {
            var events = [];

            try {
              for (var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__values"])(syncPoint.views.values()), _c = _b.next(); !_c.done; _c = _b.next()) {
                var view = _c.value;
                events = events.concat(viewApplyOperation(view, operation, writesCache, optCompleteServerCache));
              }
            } catch (e_1_1) {
              e_1 = {
                error: e_1_1
              };
            } finally {
              try {
                if (_c && !_c.done && (_a = _b["return"])) _a.call(_b);
              } finally {
                if (e_1) throw e_1.error;
              }
            }

            return events;
          }
        }
        /**
         * Get a view for the specified query.
         *
         * @param query - The query to return a view for
         * @param writesCache
         * @param serverCache
         * @param serverCacheComplete
         * @returns Events to raise.
         */


        function syncPointGetView(syncPoint, query, writesCache, serverCache, serverCacheComplete) {
          var queryId = query._queryIdentifier;
          var view = syncPoint.views.get(queryId);

          if (!view) {
            // TODO: make writesCache take flag for complete server node
            var eventCache = writeTreeRefCalcCompleteEventCache(writesCache, serverCacheComplete ? serverCache : null);
            var eventCacheComplete = false;

            if (eventCache) {
              eventCacheComplete = true;
            } else if (serverCache instanceof ChildrenNode) {
              eventCache = writeTreeRefCalcCompleteEventChildren(writesCache, serverCache);
              eventCacheComplete = false;
            } else {
              eventCache = ChildrenNode.EMPTY_NODE;
              eventCacheComplete = false;
            }

            var viewCache = newViewCache(new CacheNode(eventCache, eventCacheComplete, false), new CacheNode(serverCache, serverCacheComplete, false));
            return new View(query, viewCache);
          }

          return view;
        }
        /**
         * Add an event callback for the specified query.
         *
         * @param query
         * @param eventRegistration
         * @param writesCache
         * @param serverCache - Complete server cache, if we have it.
         * @param serverCacheComplete
         * @returns Events to raise.
         */


        function syncPointAddEventRegistration(syncPoint, query, eventRegistration, writesCache, serverCache, serverCacheComplete) {
          var view = syncPointGetView(syncPoint, query, writesCache, serverCache, serverCacheComplete);

          if (!syncPoint.views.has(query._queryIdentifier)) {
            syncPoint.views.set(query._queryIdentifier, view);
          } // This is guaranteed to exist now, we just created anything that was missing


          viewAddEventRegistration(view, eventRegistration);
          return viewGetInitialEvents(view, eventRegistration);
        }
        /**
         * Remove event callback(s).  Return cancelEvents if a cancelError is specified.
         *
         * If query is the default query, we'll check all views for the specified eventRegistration.
         * If eventRegistration is null, we'll remove all callbacks for the specified view(s).
         *
         * @param eventRegistration - If null, remove all callbacks.
         * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.
         * @returns removed queries and any cancel events
         */


        function syncPointRemoveEventRegistration(syncPoint, query, eventRegistration, cancelError) {
          var e_2, _a;

          var queryId = query._queryIdentifier;
          var removed = [];
          var cancelEvents = [];
          var hadCompleteView = syncPointHasCompleteView(syncPoint);

          if (queryId === 'default') {
            try {
              // When you do ref.off(...), we search all views for the registration to remove.
              for (var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__values"])(syncPoint.views.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {
                var _d = Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__read"])(_c.value, 2),
                    viewQueryId = _d[0],
                    view = _d[1];

                cancelEvents = cancelEvents.concat(viewRemoveEventRegistration(view, eventRegistration, cancelError));

                if (viewIsEmpty(view)) {
                  syncPoint.views["delete"](viewQueryId); // We'll deal with complete views later.

                  if (!view.query._queryParams.loadsAllData()) {
                    removed.push(view.query);
                  }
                }
              }
            } catch (e_2_1) {
              e_2 = {
                error: e_2_1
              };
            } finally {
              try {
                if (_c && !_c.done && (_a = _b["return"])) _a.call(_b);
              } finally {
                if (e_2) throw e_2.error;
              }
            }
          } else {
            // remove the callback from the specific view.
            var view = syncPoint.views.get(queryId);

            if (view) {
              cancelEvents = cancelEvents.concat(viewRemoveEventRegistration(view, eventRegistration, cancelError));

              if (viewIsEmpty(view)) {
                syncPoint.views["delete"](queryId); // We'll deal with complete views later.

                if (!view.query._queryParams.loadsAllData()) {
                  removed.push(view.query);
                }
              }
            }
          }

          if (hadCompleteView && !syncPointHasCompleteView(syncPoint)) {
            // We removed our last complete view.
            removed.push(new (syncPointGetReferenceConstructor())(query._repo, query._path));
          }

          return {
            removed: removed,
            events: cancelEvents
          };
        }

        function syncPointGetQueryViews(syncPoint) {
          var e_3, _a;

          var result = [];

          try {
            for (var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__values"])(syncPoint.views.values()), _c = _b.next(); !_c.done; _c = _b.next()) {
              var view = _c.value;

              if (!view.query._queryParams.loadsAllData()) {
                result.push(view);
              }
            }
          } catch (e_3_1) {
            e_3 = {
              error: e_3_1
            };
          } finally {
            try {
              if (_c && !_c.done && (_a = _b["return"])) _a.call(_b);
            } finally {
              if (e_3) throw e_3.error;
            }
          }

          return result;
        }
        /**
         * @param path - The path to the desired complete snapshot
         * @returns A complete cache, if it exists
         */


        function syncPointGetCompleteServerCache(syncPoint, path) {
          var e_4, _a;

          var serverCache = null;

          try {
            for (var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__values"])(syncPoint.views.values()), _c = _b.next(); !_c.done; _c = _b.next()) {
              var view = _c.value;
              serverCache = serverCache || viewGetCompleteServerCache(view, path);
            }
          } catch (e_4_1) {
            e_4 = {
              error: e_4_1
            };
          } finally {
            try {
              if (_c && !_c.done && (_a = _b["return"])) _a.call(_b);
            } finally {
              if (e_4) throw e_4.error;
            }
          }

          return serverCache;
        }

        function syncPointViewForQuery(syncPoint, query) {
          var params = query._queryParams;

          if (params.loadsAllData()) {
            return syncPointGetCompleteView(syncPoint);
          } else {
            var queryId = query._queryIdentifier;
            return syncPoint.views.get(queryId);
          }
        }

        function syncPointViewExistsForQuery(syncPoint, query) {
          return syncPointViewForQuery(syncPoint, query) != null;
        }

        function syncPointHasCompleteView(syncPoint) {
          return syncPointGetCompleteView(syncPoint) != null;
        }

        function syncPointGetCompleteView(syncPoint) {
          var e_5, _a;

          try {
            for (var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__values"])(syncPoint.views.values()), _c = _b.next(); !_c.done; _c = _b.next()) {
              var view = _c.value;

              if (view.query._queryParams.loadsAllData()) {
                return view;
              }
            }
          } catch (e_5_1) {
            e_5 = {
              error: e_5_1
            };
          } finally {
            try {
              if (_c && !_c.done && (_a = _b["return"])) _a.call(_b);
            } finally {
              if (e_5) throw e_5.error;
            }
          }

          return null;
        }
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var referenceConstructor$1;

        function syncTreeSetReferenceConstructor(val) {
          Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(!referenceConstructor$1, '__referenceConstructor has already been defined');
          referenceConstructor$1 = val;
        }

        function syncTreeGetReferenceConstructor() {
          Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(referenceConstructor$1, 'Reference.ts has not been loaded');
          return referenceConstructor$1;
        }
        /**
         * Static tracker for next query tag.
         */


        var syncTreeNextQueryTag_ = 1;
        /**
         * SyncTree is the central class for managing event callback registration, data caching, views
         * (query processing), and event generation.  There are typically two SyncTree instances for
         * each Repo, one for the normal Firebase data, and one for the .info data.
         *
         * It has a number of responsibilities, including:
         *  - Tracking all user event callbacks (registered via addEventRegistration() and removeEventRegistration()).
         *  - Applying and caching data changes for user set(), transaction(), and update() calls
         *    (applyUserOverwrite(), applyUserMerge()).
         *  - Applying and caching data changes for server data changes (applyServerOverwrite(),
         *    applyServerMerge()).
         *  - Generating user-facing events for server and user changes (all of the apply* methods
         *    return the set of events that need to be raised as a result).
         *  - Maintaining the appropriate set of server listens to ensure we are always subscribed
         *    to the correct set of paths and queries to satisfy the current set of user event
         *    callbacks (listens are started/stopped using the provided listenProvider).
         *
         * NOTE: Although SyncTree tracks event callbacks and calculates events to raise, the actual
         * events are returned to the caller rather than raised synchronously.
         *
         */

        var SyncTree =
        /** @class */
        function () {
          /**
           * @param listenProvider_ - Used by SyncTree to start / stop listening
           *   to server data.
           */
          function SyncTree(listenProvider_) {
            this.listenProvider_ = listenProvider_;
            /**
             * Tree of SyncPoints.  There's a SyncPoint at any location that has 1 or more views.
             */

            this.syncPointTree_ = new ImmutableTree(null);
            /**
             * A tree of all pending user writes (user-initiated set()'s, transaction()'s, update()'s, etc.).
             */

            this.pendingWriteTree_ = newWriteTree();
            this.tagToQueryMap = new Map();
            this.queryToTagMap = new Map();
          }

          return SyncTree;
        }();
        /**
         * Apply the data changes for a user-generated set() or transaction() call.
         *
         * @returns Events to raise.
         */


        function syncTreeApplyUserOverwrite(syncTree, path, newData, writeId, visible) {
          // Record pending write.
          writeTreeAddOverwrite(syncTree.pendingWriteTree_, path, newData, writeId, visible);

          if (!visible) {
            return [];
          } else {
            return syncTreeApplyOperationToSyncPoints_(syncTree, new Overwrite(newOperationSourceUser(), path, newData));
          }
        }
        /**
         * Apply the data from a user-generated update() call
         *
         * @returns Events to raise.
         */


        function syncTreeApplyUserMerge(syncTree, path, changedChildren, writeId) {
          // Record pending merge.
          writeTreeAddMerge(syncTree.pendingWriteTree_, path, changedChildren, writeId);
          var changeTree = ImmutableTree.fromObject(changedChildren);
          return syncTreeApplyOperationToSyncPoints_(syncTree, new Merge(newOperationSourceUser(), path, changeTree));
        }
        /**
         * Acknowledge a pending user write that was previously registered with applyUserOverwrite() or applyUserMerge().
         *
         * @param revert - True if the given write failed and needs to be reverted
         * @returns Events to raise.
         */


        function syncTreeAckUserWrite(syncTree, writeId, revert) {
          if (revert === void 0) {
            revert = false;
          }

          var write = writeTreeGetWrite(syncTree.pendingWriteTree_, writeId);
          var needToReevaluate = writeTreeRemoveWrite(syncTree.pendingWriteTree_, writeId);

          if (!needToReevaluate) {
            return [];
          } else {
            var affectedTree_1 = new ImmutableTree(null);

            if (write.snap != null) {
              // overwrite
              affectedTree_1 = affectedTree_1.set(newEmptyPath(), true);
            } else {
              each(write.children, function (pathString) {
                affectedTree_1 = affectedTree_1.set(new Path(pathString), true);
              });
            }

            return syncTreeApplyOperationToSyncPoints_(syncTree, new AckUserWrite(write.path, affectedTree_1, revert));
          }
        }
        /**
         * Apply new server data for the specified path..
         *
         * @returns Events to raise.
         */


        function syncTreeApplyServerOverwrite(syncTree, path, newData) {
          return syncTreeApplyOperationToSyncPoints_(syncTree, new Overwrite(newOperationSourceServer(), path, newData));
        }
        /**
         * Apply new server data to be merged in at the specified path.
         *
         * @returns Events to raise.
         */


        function syncTreeApplyServerMerge(syncTree, path, changedChildren) {
          var changeTree = ImmutableTree.fromObject(changedChildren);
          return syncTreeApplyOperationToSyncPoints_(syncTree, new Merge(newOperationSourceServer(), path, changeTree));
        }
        /**
         * Apply a listen complete for a query
         *
         * @returns Events to raise.
         */


        function syncTreeApplyListenComplete(syncTree, path) {
          return syncTreeApplyOperationToSyncPoints_(syncTree, new ListenComplete(newOperationSourceServer(), path));
        }
        /**
         * Apply a listen complete for a tagged query
         *
         * @returns Events to raise.
         */


        function syncTreeApplyTaggedListenComplete(syncTree, path, tag) {
          var queryKey = syncTreeQueryKeyForTag_(syncTree, tag);

          if (queryKey) {
            var r = syncTreeParseQueryKey_(queryKey);
            var queryPath = r.path,
                queryId = r.queryId;
            var relativePath = newRelativePath(queryPath, path);
            var op = new ListenComplete(newOperationSourceServerTaggedQuery(queryId), relativePath);
            return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);
          } else {
            // We've already removed the query. No big deal, ignore the update
            return [];
          }
        }
        /**
         * Remove event callback(s).
         *
         * If query is the default query, we'll check all queries for the specified eventRegistration.
         * If eventRegistration is null, we'll remove all callbacks for the specified query/queries.
         *
         * @param eventRegistration - If null, all callbacks are removed.
         * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.
         * @returns Cancel events, if cancelError was provided.
         */


        function syncTreeRemoveEventRegistration(syncTree, query, eventRegistration, cancelError) {
          // Find the syncPoint first. Then deal with whether or not it has matching listeners
          var path = query._path;
          var maybeSyncPoint = syncTree.syncPointTree_.get(path);
          var cancelEvents = []; // A removal on a default query affects all queries at that location. A removal on an indexed query, even one without
          // other query constraints, does *not* affect all queries at that location. So this check must be for 'default', and
          // not loadsAllData().

          if (maybeSyncPoint && (query._queryIdentifier === 'default' || syncPointViewExistsForQuery(maybeSyncPoint, query))) {
            var removedAndEvents = syncPointRemoveEventRegistration(maybeSyncPoint, query, eventRegistration, cancelError);

            if (syncPointIsEmpty(maybeSyncPoint)) {
              syncTree.syncPointTree_ = syncTree.syncPointTree_.remove(path);
            }

            var removed = removedAndEvents.removed;
            cancelEvents = removedAndEvents.events; // We may have just removed one of many listeners and can short-circuit this whole process
            // We may also not have removed a default listener, in which case all of the descendant listeners should already be
            // properly set up.
            //
            // Since indexed queries can shadow if they don't have other query constraints, check for loadsAllData(), instead of
            // queryId === 'default'

            var removingDefault = -1 !== removed.findIndex(function (query) {
              return query._queryParams.loadsAllData();
            });
            var covered = syncTree.syncPointTree_.findOnPath(path, function (relativePath, parentSyncPoint) {
              return syncPointHasCompleteView(parentSyncPoint);
            });

            if (removingDefault && !covered) {
              var subtree = syncTree.syncPointTree_.subtree(path); // There are potentially child listeners. Determine what if any listens we need to send before executing the
              // removal

              if (!subtree.isEmpty()) {
                // We need to fold over our subtree and collect the listeners to send
                var newViews = syncTreeCollectDistinctViewsForSubTree_(subtree); // Ok, we've collected all the listens we need. Set them up.

                for (var i = 0; i < newViews.length; ++i) {
                  var view = newViews[i],
                      newQuery = view.query;
                  var listener = syncTreeCreateListenerForView_(syncTree, view);
                  syncTree.listenProvider_.startListening(syncTreeQueryForListening_(newQuery), syncTreeTagForQuery_(syncTree, newQuery), listener.hashFn, listener.onComplete);
                }
              }
            } // If we removed anything and we're not covered by a higher up listen, we need to stop listening on this query
            // The above block has us covered in terms of making sure we're set up on listens lower in the tree.
            // Also, note that if we have a cancelError, it's already been removed at the provider level.


            if (!covered && removed.length > 0 && !cancelError) {
              // If we removed a default, then we weren't listening on any of the other queries here. Just cancel the one
              // default. Otherwise, we need to iterate through and cancel each individual query
              if (removingDefault) {
                // We don't tag default listeners
                var defaultTag = null;
                syncTree.listenProvider_.stopListening(syncTreeQueryForListening_(query), defaultTag);
              } else {
                removed.forEach(function (queryToRemove) {
                  var tagToRemove = syncTree.queryToTagMap.get(syncTreeMakeQueryKey_(queryToRemove));
                  syncTree.listenProvider_.stopListening(syncTreeQueryForListening_(queryToRemove), tagToRemove);
                });
              }
            } // Now, clear all of the tags we're tracking for the removed listens


            syncTreeRemoveTags_(syncTree, removed);
          }

          return cancelEvents;
        }
        /**
         * Apply new server data for the specified tagged query.
         *
         * @returns Events to raise.
         */


        function syncTreeApplyTaggedQueryOverwrite(syncTree, path, snap, tag) {
          var queryKey = syncTreeQueryKeyForTag_(syncTree, tag);

          if (queryKey != null) {
            var r = syncTreeParseQueryKey_(queryKey);
            var queryPath = r.path,
                queryId = r.queryId;
            var relativePath = newRelativePath(queryPath, path);
            var op = new Overwrite(newOperationSourceServerTaggedQuery(queryId), relativePath, snap);
            return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);
          } else {
            // Query must have been removed already
            return [];
          }
        }
        /**
         * Apply server data to be merged in for the specified tagged query.
         *
         * @returns Events to raise.
         */


        function syncTreeApplyTaggedQueryMerge(syncTree, path, changedChildren, tag) {
          var queryKey = syncTreeQueryKeyForTag_(syncTree, tag);

          if (queryKey) {
            var r = syncTreeParseQueryKey_(queryKey);
            var queryPath = r.path,
                queryId = r.queryId;
            var relativePath = newRelativePath(queryPath, path);
            var changeTree = ImmutableTree.fromObject(changedChildren);
            var op = new Merge(newOperationSourceServerTaggedQuery(queryId), relativePath, changeTree);
            return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);
          } else {
            // We've already removed the query. No big deal, ignore the update
            return [];
          }
        }
        /**
         * Add an event callback for the specified query.
         *
         * @returns Events to raise.
         */


        function syncTreeAddEventRegistration(syncTree, query, eventRegistration) {
          var path = query._path;
          var serverCache = null;
          var foundAncestorDefaultView = false; // Any covering writes will necessarily be at the root, so really all we need to find is the server cache.
          // Consider optimizing this once there's a better understanding of what actual behavior will be.

          syncTree.syncPointTree_.foreachOnPath(path, function (pathToSyncPoint, sp) {
            var relativePath = newRelativePath(pathToSyncPoint, path);
            serverCache = serverCache || syncPointGetCompleteServerCache(sp, relativePath);
            foundAncestorDefaultView = foundAncestorDefaultView || syncPointHasCompleteView(sp);
          });
          var syncPoint = syncTree.syncPointTree_.get(path);

          if (!syncPoint) {
            syncPoint = new SyncPoint();
            syncTree.syncPointTree_ = syncTree.syncPointTree_.set(path, syncPoint);
          } else {
            foundAncestorDefaultView = foundAncestorDefaultView || syncPointHasCompleteView(syncPoint);
            serverCache = serverCache || syncPointGetCompleteServerCache(syncPoint, newEmptyPath());
          }

          var serverCacheComplete;

          if (serverCache != null) {
            serverCacheComplete = true;
          } else {
            serverCacheComplete = false;
            serverCache = ChildrenNode.EMPTY_NODE;
            var subtree = syncTree.syncPointTree_.subtree(path);
            subtree.foreachChild(function (childName, childSyncPoint) {
              var completeCache = syncPointGetCompleteServerCache(childSyncPoint, newEmptyPath());

              if (completeCache) {
                serverCache = serverCache.updateImmediateChild(childName, completeCache);
              }
            });
          }

          var viewAlreadyExists = syncPointViewExistsForQuery(syncPoint, query);

          if (!viewAlreadyExists && !query._queryParams.loadsAllData()) {
            // We need to track a tag for this query
            var queryKey = syncTreeMakeQueryKey_(query);
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(!syncTree.queryToTagMap.has(queryKey), 'View does not exist, but we have a tag');
            var tag = syncTreeGetNextQueryTag_();
            syncTree.queryToTagMap.set(queryKey, tag);
            syncTree.tagToQueryMap.set(tag, queryKey);
          }

          var writesCache = writeTreeChildWrites(syncTree.pendingWriteTree_, path);
          var events = syncPointAddEventRegistration(syncPoint, query, eventRegistration, writesCache, serverCache, serverCacheComplete);

          if (!viewAlreadyExists && !foundAncestorDefaultView) {
            var view = syncPointViewForQuery(syncPoint, query);
            events = events.concat(syncTreeSetupListener_(syncTree, query, view));
          }

          return events;
        }
        /**
         * Returns a complete cache, if we have one, of the data at a particular path. If the location does not have a
         * listener above it, we will get a false "null". This shouldn't be a problem because transactions will always
         * have a listener above, and atomic operations would correctly show a jitter of <increment value> ->
         *     <incremented total> as the write is applied locally and then acknowledged at the server.
         *
         * Note: this method will *include* hidden writes from transaction with applyLocally set to false.
         *
         * @param path - The path to the data we want
         * @param writeIdsToExclude - A specific set to be excluded
         */


        function syncTreeCalcCompleteEventCache(syncTree, path, writeIdsToExclude) {
          var includeHiddenSets = true;
          var writeTree = syncTree.pendingWriteTree_;
          var serverCache = syncTree.syncPointTree_.findOnPath(path, function (pathSoFar, syncPoint) {
            var relativePath = newRelativePath(pathSoFar, path);
            var serverCache = syncPointGetCompleteServerCache(syncPoint, relativePath);

            if (serverCache) {
              return serverCache;
            }
          });
          return writeTreeCalcCompleteEventCache(writeTree, path, serverCache, writeIdsToExclude, includeHiddenSets);
        }

        function syncTreeGetServerValue(syncTree, query) {
          var path = query._path;
          var serverCache = null; // Any covering writes will necessarily be at the root, so really all we need to find is the server cache.
          // Consider optimizing this once there's a better understanding of what actual behavior will be.

          syncTree.syncPointTree_.foreachOnPath(path, function (pathToSyncPoint, sp) {
            var relativePath = newRelativePath(pathToSyncPoint, path);
            serverCache = serverCache || syncPointGetCompleteServerCache(sp, relativePath);
          });
          var syncPoint = syncTree.syncPointTree_.get(path);

          if (!syncPoint) {
            syncPoint = new SyncPoint();
            syncTree.syncPointTree_ = syncTree.syncPointTree_.set(path, syncPoint);
          } else {
            serverCache = serverCache || syncPointGetCompleteServerCache(syncPoint, newEmptyPath());
          }

          var serverCacheComplete = serverCache != null;
          var serverCacheNode = serverCacheComplete ? new CacheNode(serverCache, true, false) : null;
          var writesCache = writeTreeChildWrites(syncTree.pendingWriteTree_, query._path);
          var view = syncPointGetView(syncPoint, query, writesCache, serverCacheComplete ? serverCacheNode.getNode() : ChildrenNode.EMPTY_NODE, serverCacheComplete);
          return viewGetCompleteNode(view);
        }
        /**
         * A helper method that visits all descendant and ancestor SyncPoints, applying the operation.
         *
         * NOTES:
         * - Descendant SyncPoints will be visited first (since we raise events depth-first).
         *
         * - We call applyOperation() on each SyncPoint passing three things:
         *   1. A version of the Operation that has been made relative to the SyncPoint location.
         *   2. A WriteTreeRef of any writes we have cached at the SyncPoint location.
         *   3. A snapshot Node with cached server data, if we have it.
         *
         * - We concatenate all of the events returned by each SyncPoint and return the result.
         */


        function syncTreeApplyOperationToSyncPoints_(syncTree, operation) {
          return syncTreeApplyOperationHelper_(operation, syncTree.syncPointTree_,
          /*serverCache=*/
          null, writeTreeChildWrites(syncTree.pendingWriteTree_, newEmptyPath()));
        }
        /**
         * Recursive helper for applyOperationToSyncPoints_
         */


        function syncTreeApplyOperationHelper_(operation, syncPointTree, serverCache, writesCache) {
          if (pathIsEmpty(operation.path)) {
            return syncTreeApplyOperationDescendantsHelper_(operation, syncPointTree, serverCache, writesCache);
          } else {
            var syncPoint = syncPointTree.get(newEmptyPath()); // If we don't have cached server data, see if we can get it from this SyncPoint.

            if (serverCache == null && syncPoint != null) {
              serverCache = syncPointGetCompleteServerCache(syncPoint, newEmptyPath());
            }

            var events = [];
            var childName = pathGetFront(operation.path);
            var childOperation = operation.operationForChild(childName);
            var childTree = syncPointTree.children.get(childName);

            if (childTree && childOperation) {
              var childServerCache = serverCache ? serverCache.getImmediateChild(childName) : null;
              var childWritesCache = writeTreeRefChild(writesCache, childName);
              events = events.concat(syncTreeApplyOperationHelper_(childOperation, childTree, childServerCache, childWritesCache));
            }

            if (syncPoint) {
              events = events.concat(syncPointApplyOperation(syncPoint, operation, writesCache, serverCache));
            }

            return events;
          }
        }
        /**
         * Recursive helper for applyOperationToSyncPoints_
         */


        function syncTreeApplyOperationDescendantsHelper_(operation, syncPointTree, serverCache, writesCache) {
          var syncPoint = syncPointTree.get(newEmptyPath()); // If we don't have cached server data, see if we can get it from this SyncPoint.

          if (serverCache == null && syncPoint != null) {
            serverCache = syncPointGetCompleteServerCache(syncPoint, newEmptyPath());
          }

          var events = [];
          syncPointTree.children.inorderTraversal(function (childName, childTree) {
            var childServerCache = serverCache ? serverCache.getImmediateChild(childName) : null;
            var childWritesCache = writeTreeRefChild(writesCache, childName);
            var childOperation = operation.operationForChild(childName);

            if (childOperation) {
              events = events.concat(syncTreeApplyOperationDescendantsHelper_(childOperation, childTree, childServerCache, childWritesCache));
            }
          });

          if (syncPoint) {
            events = events.concat(syncPointApplyOperation(syncPoint, operation, writesCache, serverCache));
          }

          return events;
        }

        function syncTreeCreateListenerForView_(syncTree, view) {
          var query = view.query;
          var tag = syncTreeTagForQuery_(syncTree, query);
          return {
            hashFn: function hashFn() {
              var cache = viewGetServerCache(view) || ChildrenNode.EMPTY_NODE;
              return cache.hash();
            },
            onComplete: function onComplete(status) {
              if (status === 'ok') {
                if (tag) {
                  return syncTreeApplyTaggedListenComplete(syncTree, query._path, tag);
                } else {
                  return syncTreeApplyListenComplete(syncTree, query._path);
                }
              } else {
                // If a listen failed, kill all of the listeners here, not just the one that triggered the error.
                // Note that this may need to be scoped to just this listener if we change permissions on filtered children
                var error = errorForServerCode(status, query);
                return syncTreeRemoveEventRegistration(syncTree, query,
                /*eventRegistration*/
                null, error);
              }
            }
          };
        }
        /**
         * Return the tag associated with the given query.
         */


        function syncTreeTagForQuery_(syncTree, query) {
          var queryKey = syncTreeMakeQueryKey_(query);
          return syncTree.queryToTagMap.get(queryKey);
        }
        /**
         * Given a query, computes a "queryKey" suitable for use in our queryToTagMap_.
         */


        function syncTreeMakeQueryKey_(query) {
          return query._path.toString() + '$' + query._queryIdentifier;
        }
        /**
         * Return the query associated with the given tag, if we have one
         */


        function syncTreeQueryKeyForTag_(syncTree, tag) {
          return syncTree.tagToQueryMap.get(tag);
        }
        /**
         * Given a queryKey (created by makeQueryKey), parse it back into a path and queryId.
         */


        function syncTreeParseQueryKey_(queryKey) {
          var splitIndex = queryKey.indexOf('$');
          Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(splitIndex !== -1 && splitIndex < queryKey.length - 1, 'Bad queryKey.');
          return {
            queryId: queryKey.substr(splitIndex + 1),
            path: new Path(queryKey.substr(0, splitIndex))
          };
        }
        /**
         * A helper method to apply tagged operations
         */


        function syncTreeApplyTaggedOperation_(syncTree, queryPath, operation) {
          var syncPoint = syncTree.syncPointTree_.get(queryPath);
          Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(syncPoint, "Missing sync point for query tag that we're tracking");
          var writesCache = writeTreeChildWrites(syncTree.pendingWriteTree_, queryPath);
          return syncPointApplyOperation(syncPoint, operation, writesCache, null);
        }
        /**
         * This collapses multiple unfiltered views into a single view, since we only need a single
         * listener for them.
         */


        function syncTreeCollectDistinctViewsForSubTree_(subtree) {
          return subtree.fold(function (relativePath, maybeChildSyncPoint, childMap) {
            if (maybeChildSyncPoint && syncPointHasCompleteView(maybeChildSyncPoint)) {
              var completeView = syncPointGetCompleteView(maybeChildSyncPoint);
              return [completeView];
            } else {
              // No complete view here, flatten any deeper listens into an array
              var views_1 = [];

              if (maybeChildSyncPoint) {
                views_1 = syncPointGetQueryViews(maybeChildSyncPoint);
              }

              each(childMap, function (_key, childViews) {
                views_1 = views_1.concat(childViews);
              });
              return views_1;
            }
          });
        }
        /**
         * Normalizes a query to a query we send the server for listening
         *
         * @returns The normalized query
         */


        function syncTreeQueryForListening_(query) {
          if (query._queryParams.loadsAllData() && !query._queryParams.isDefault()) {
            // We treat queries that load all data as default queries
            // Cast is necessary because ref() technically returns Firebase which is actually fb.api.Firebase which inherits
            // from Query
            return new (syncTreeGetReferenceConstructor())(query._repo, query._path);
          } else {
            return query;
          }
        }

        function syncTreeRemoveTags_(syncTree, queries) {
          for (var j = 0; j < queries.length; ++j) {
            var removedQuery = queries[j];

            if (!removedQuery._queryParams.loadsAllData()) {
              // We should have a tag for this
              var removedQueryKey = syncTreeMakeQueryKey_(removedQuery);
              var removedQueryTag = syncTree.queryToTagMap.get(removedQueryKey);
              syncTree.queryToTagMap["delete"](removedQueryKey);
              syncTree.tagToQueryMap["delete"](removedQueryTag);
            }
          }
        }
        /**
         * Static accessor for query tags.
         */


        function syncTreeGetNextQueryTag_() {
          return syncTreeNextQueryTag_++;
        }
        /**
         * For a given new listen, manage the de-duplication of outstanding subscriptions.
         *
         * @returns This method can return events to support synchronous data sources
         */


        function syncTreeSetupListener_(syncTree, query, view) {
          var path = query._path;
          var tag = syncTreeTagForQuery_(syncTree, query);
          var listener = syncTreeCreateListenerForView_(syncTree, view);
          var events = syncTree.listenProvider_.startListening(syncTreeQueryForListening_(query), tag, listener.hashFn, listener.onComplete);
          var subtree = syncTree.syncPointTree_.subtree(path); // The root of this subtree has our query. We're here because we definitely need to send a listen for that, but we
          // may need to shadow other listens as well.

          if (tag) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(!syncPointHasCompleteView(subtree.value), "If we're adding a query, it shouldn't be shadowed");
          } else {
            // Shadow everything at or below this location, this is a default listener.
            var queriesToStop = subtree.fold(function (relativePath, maybeChildSyncPoint, childMap) {
              if (!pathIsEmpty(relativePath) && maybeChildSyncPoint && syncPointHasCompleteView(maybeChildSyncPoint)) {
                return [syncPointGetCompleteView(maybeChildSyncPoint).query];
              } else {
                // No default listener here, flatten any deeper queries into an array
                var queries_1 = [];

                if (maybeChildSyncPoint) {
                  queries_1 = queries_1.concat(syncPointGetQueryViews(maybeChildSyncPoint).map(function (view) {
                    return view.query;
                  }));
                }

                each(childMap, function (_key, childQueries) {
                  queries_1 = queries_1.concat(childQueries);
                });
                return queries_1;
              }
            });

            for (var i = 0; i < queriesToStop.length; ++i) {
              var queryToStop = queriesToStop[i];
              syncTree.listenProvider_.stopListening(syncTreeQueryForListening_(queryToStop), syncTreeTagForQuery_(syncTree, queryToStop));
            }
          }

          return events;
        }
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var ExistingValueProvider =
        /** @class */
        function () {
          function ExistingValueProvider(node_) {
            this.node_ = node_;
          }

          ExistingValueProvider.prototype.getImmediateChild = function (childName) {
            var child = this.node_.getImmediateChild(childName);
            return new ExistingValueProvider(child);
          };

          ExistingValueProvider.prototype.node = function () {
            return this.node_;
          };

          return ExistingValueProvider;
        }();

        var DeferredValueProvider =
        /** @class */
        function () {
          function DeferredValueProvider(syncTree, path) {
            this.syncTree_ = syncTree;
            this.path_ = path;
          }

          DeferredValueProvider.prototype.getImmediateChild = function (childName) {
            var childPath = pathChild(this.path_, childName);
            return new DeferredValueProvider(this.syncTree_, childPath);
          };

          DeferredValueProvider.prototype.node = function () {
            return syncTreeCalcCompleteEventCache(this.syncTree_, this.path_);
          };

          return DeferredValueProvider;
        }();
        /**
         * Generate placeholders for deferred values.
         */


        var generateWithValues = function generateWithValues(values) {
          values = values || {};
          values['timestamp'] = values['timestamp'] || new Date().getTime();
          return values;
        };
        /**
         * Value to use when firing local events. When writing server values, fire
         * local events with an approximate value, otherwise return value as-is.
         */


        var resolveDeferredLeafValue = function resolveDeferredLeafValue(value, existingVal, serverValues) {
          if (!value || typeof value !== 'object') {
            return value;
          }

          Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])('.sv' in value, 'Unexpected leaf node or priority contents');

          if (typeof value['.sv'] === 'string') {
            return resolveScalarDeferredValue(value['.sv'], existingVal, serverValues);
          } else if (typeof value['.sv'] === 'object') {
            return resolveComplexDeferredValue(value['.sv'], existingVal);
          } else {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(false, 'Unexpected server value: ' + JSON.stringify(value, null, 2));
          }
        };

        var resolveScalarDeferredValue = function resolveScalarDeferredValue(op, existing, serverValues) {
          switch (op) {
            case 'timestamp':
              return serverValues['timestamp'];

            default:
              Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(false, 'Unexpected server value: ' + op);
          }
        };

        var resolveComplexDeferredValue = function resolveComplexDeferredValue(op, existing, unused) {
          if (!op.hasOwnProperty('increment')) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(false, 'Unexpected server value: ' + JSON.stringify(op, null, 2));
          }

          var delta = op['increment'];

          if (typeof delta !== 'number') {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(false, 'Unexpected increment value: ' + delta);
          }

          var existingNode = existing.node();
          Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(existingNode !== null && typeof existingNode !== 'undefined', 'Expected ChildrenNode.EMPTY_NODE for nulls'); // Incrementing a non-number sets the value to the incremented amount

          if (!existingNode.isLeafNode()) {
            return delta;
          }

          var leaf = existingNode;
          var existingVal = leaf.getValue();

          if (typeof existingVal !== 'number') {
            return delta;
          } // No need to do over/underflow arithmetic here because JS only handles floats under the covers


          return existingVal + delta;
        };
        /**
         * Recursively replace all deferred values and priorities in the tree with the
         * specified generated replacement values.
         * @param path - path to which write is relative
         * @param node - new data written at path
         * @param syncTree - current data
         */


        var resolveDeferredValueTree = function resolveDeferredValueTree(path, node, syncTree, serverValues) {
          return resolveDeferredValue(node, new DeferredValueProvider(syncTree, path), serverValues);
        };
        /**
         * Recursively replace all deferred values and priorities in the node with the
         * specified generated replacement values.  If there are no server values in the node,
         * it'll be returned as-is.
         */


        var resolveDeferredValueSnapshot = function resolveDeferredValueSnapshot(node, existing, serverValues) {
          return resolveDeferredValue(node, new ExistingValueProvider(existing), serverValues);
        };

        function resolveDeferredValue(node, existingVal, serverValues) {
          var rawPri = node.getPriority().val();
          var priority = resolveDeferredLeafValue(rawPri, existingVal.getImmediateChild('.priority'), serverValues);
          var newNode;

          if (node.isLeafNode()) {
            var leafNode = node;
            var value = resolveDeferredLeafValue(leafNode.getValue(), existingVal, serverValues);

            if (value !== leafNode.getValue() || priority !== leafNode.getPriority().val()) {
              return new LeafNode(value, nodeFromJSON$1(priority));
            } else {
              return node;
            }
          } else {
            var childrenNode = node;
            newNode = childrenNode;

            if (priority !== childrenNode.getPriority().val()) {
              newNode = newNode.updatePriority(new LeafNode(priority));
            }

            childrenNode.forEachChild(PRIORITY_INDEX, function (childName, childNode) {
              var newChildNode = resolveDeferredValue(childNode, existingVal.getImmediateChild(childName), serverValues);

              if (newChildNode !== childNode) {
                newNode = newNode.updateImmediateChild(childName, newChildNode);
              }
            });
            return newNode;
          }
        }
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * A light-weight tree, traversable by path.  Nodes can have both values and children.
         * Nodes are not enumerated (by forEachChild) unless they have a value or non-empty
         * children.
         */


        var Tree =
        /** @class */
        function () {
          /**
           * @param name - Optional name of the node.
           * @param parent - Optional parent node.
           * @param node - Optional node to wrap.
           */
          function Tree(name, parent, node) {
            if (name === void 0) {
              name = '';
            }

            if (parent === void 0) {
              parent = null;
            }

            if (node === void 0) {
              node = {
                children: {},
                childCount: 0
              };
            }

            this.name = name;
            this.parent = parent;
            this.node = node;
          }

          return Tree;
        }();
        /**
         * Returns a sub-Tree for the given path.
         *
         * @param pathObj - Path to look up.
         * @returns Tree for path.
         */


        function treeSubTree(tree, pathObj) {
          // TODO: Require pathObj to be Path?
          var path = pathObj instanceof Path ? pathObj : new Path(pathObj);
          var child = tree,
              next = pathGetFront(path);

          while (next !== null) {
            var childNode = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["safeGet"])(child.node.children, next) || {
              children: {},
              childCount: 0
            };
            child = new Tree(next, child, childNode);
            path = pathPopFront(path);
            next = pathGetFront(path);
          }

          return child;
        }
        /**
         * Returns the data associated with this tree node.
         *
         * @returns The data or null if no data exists.
         */


        function treeGetValue(tree) {
          return tree.node.value;
        }
        /**
         * Sets data to this tree node.
         *
         * @param value - Value to set.
         */


        function treeSetValue(tree, value) {
          tree.node.value = value;
          treeUpdateParents(tree);
        }
        /**
         * @returns Whether the tree has any children.
         */


        function treeHasChildren(tree) {
          return tree.node.childCount > 0;
        }
        /**
         * @returns Whethe rthe tree is empty (no value or children).
         */


        function treeIsEmpty(tree) {
          return treeGetValue(tree) === undefined && !treeHasChildren(tree);
        }
        /**
         * Calls action for each child of this tree node.
         *
         * @param action - Action to be called for each child.
         */


        function treeForEachChild(tree, action) {
          each(tree.node.children, function (child, childTree) {
            action(new Tree(child, tree, childTree));
          });
        }
        /**
         * Does a depth-first traversal of this node's descendants, calling action for each one.
         *
         * @param action - Action to be called for each child.
         * @param includeSelf - Whether to call action on this node as well. Defaults to
         *   false.
         * @param childrenFirst - Whether to call action on children before calling it on
         *   parent.
         */


        function treeForEachDescendant(tree, action, includeSelf, childrenFirst) {
          if (includeSelf && !childrenFirst) {
            action(tree);
          }

          treeForEachChild(tree, function (child) {
            treeForEachDescendant(child, action, true, childrenFirst);
          });

          if (includeSelf && childrenFirst) {
            action(tree);
          }
        }
        /**
         * Calls action on each ancestor node.
         *
         * @param action - Action to be called on each parent; return
         *   true to abort.
         * @param includeSelf - Whether to call action on this node as well.
         * @returns true if the action callback returned true.
         */


        function treeForEachAncestor(tree, action, includeSelf) {
          var node = includeSelf ? tree : tree.parent;

          while (node !== null) {
            if (action(node)) {
              return true;
            }

            node = node.parent;
          }

          return false;
        }
        /**
         * @returns The path of this tree node, as a Path.
         */


        function treeGetPath(tree) {
          return new Path(tree.parent === null ? tree.name : treeGetPath(tree.parent) + '/' + tree.name);
        }
        /**
         * Adds or removes this child from its parent based on whether it's empty or not.
         */


        function treeUpdateParents(tree) {
          if (tree.parent !== null) {
            treeUpdateChild(tree.parent, tree.name, tree);
          }
        }
        /**
         * Adds or removes the passed child to this tree node, depending on whether it's empty.
         *
         * @param childName - The name of the child to update.
         * @param child - The child to update.
         */


        function treeUpdateChild(tree, childName, child) {
          var childEmpty = treeIsEmpty(child);
          var childExists = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["contains"])(tree.node.children, childName);

          if (childEmpty && childExists) {
            delete tree.node.children[childName];
            tree.node.childCount--;
            treeUpdateParents(tree);
          } else if (!childEmpty && !childExists) {
            tree.node.children[childName] = child.node;
            tree.node.childCount++;
            treeUpdateParents(tree);
          }
        }
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * True for invalid Firebase keys
         */


        var INVALID_KEY_REGEX_ = /[\[\].#$\/\u0000-\u001F\u007F]/;
        /**
         * True for invalid Firebase paths.
         * Allows '/' in paths.
         */

        var INVALID_PATH_REGEX_ = /[\[\].#$\u0000-\u001F\u007F]/;
        /**
         * Maximum number of characters to allow in leaf value
         */

        var MAX_LEAF_SIZE_ = 10 * 1024 * 1024;

        var isValidKey = function isValidKey(key) {
          return typeof key === 'string' && key.length !== 0 && !INVALID_KEY_REGEX_.test(key);
        };

        var isValidPathString = function isValidPathString(pathString) {
          return typeof pathString === 'string' && pathString.length !== 0 && !INVALID_PATH_REGEX_.test(pathString);
        };

        var isValidRootPathString = function isValidRootPathString(pathString) {
          if (pathString) {
            // Allow '/.info/' at the beginning.
            pathString = pathString.replace(/^\/*\.info(\/|$)/, '/');
          }

          return isValidPathString(pathString);
        };

        var isValidPriority = function isValidPriority(priority) {
          return priority === null || typeof priority === 'string' || typeof priority === 'number' && !isInvalidJSONNumber(priority) || priority && typeof priority === 'object' && // eslint-disable-next-line @typescript-eslint/no-explicit-any
          Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["contains"])(priority, '.sv');
        };
        /**
         * Pre-validate a datum passed as an argument to Firebase function.
         */


        var validateFirebaseDataArg = function validateFirebaseDataArg(fnName, value, path, optional) {
          if (optional && value === undefined) {
            return;
          }

          validateFirebaseData(Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["errorPrefix"])(fnName, 'value'), value, path);
        };
        /**
         * Validate a data object client-side before sending to server.
         */


        var validateFirebaseData = function validateFirebaseData(errorPrefix, data, path_) {
          var path = path_ instanceof Path ? new ValidationPath(path_, errorPrefix) : path_;

          if (data === undefined) {
            throw new Error(errorPrefix + 'contains undefined ' + validationPathToErrorString(path));
          }

          if (typeof data === 'function') {
            throw new Error(errorPrefix + 'contains a function ' + validationPathToErrorString(path) + ' with contents = ' + data.toString());
          }

          if (isInvalidJSONNumber(data)) {
            throw new Error(errorPrefix + 'contains ' + data.toString() + ' ' + validationPathToErrorString(path));
          } // Check max leaf size, but try to avoid the utf8 conversion if we can.


          if (typeof data === 'string' && data.length > MAX_LEAF_SIZE_ / 3 && Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringLength"])(data) > MAX_LEAF_SIZE_) {
            throw new Error(errorPrefix + 'contains a string greater than ' + MAX_LEAF_SIZE_ + ' utf8 bytes ' + validationPathToErrorString(path) + " ('" + data.substring(0, 50) + "...')");
          } // TODO = Perf = Consider combining the recursive validation of keys into NodeFromJSON
          // to save extra walking of large objects.


          if (data && typeof data === 'object') {
            var hasDotValue_1 = false;
            var hasActualChild_1 = false;
            each(data, function (key, value) {
              if (key === '.value') {
                hasDotValue_1 = true;
              } else if (key !== '.priority' && key !== '.sv') {
                hasActualChild_1 = true;

                if (!isValidKey(key)) {
                  throw new Error(errorPrefix + ' contains an invalid key (' + key + ') ' + validationPathToErrorString(path) + '.  Keys must be non-empty strings ' + 'and can\'t contain ".", "#", "$", "/", "[", or "]"');
                }
              }

              validationPathPush(path, key);
              validateFirebaseData(errorPrefix, value, path);
              validationPathPop(path);
            });

            if (hasDotValue_1 && hasActualChild_1) {
              throw new Error(errorPrefix + ' contains ".value" child ' + validationPathToErrorString(path) + ' in addition to actual children.');
            }
          }
        };
        /**
         * Pre-validate paths passed in the firebase function.
         */


        var validateFirebaseMergePaths = function validateFirebaseMergePaths(errorPrefix, mergePaths) {
          var i, curPath;

          for (i = 0; i < mergePaths.length; i++) {
            curPath = mergePaths[i];
            var keys = pathSlice(curPath);

            for (var j = 0; j < keys.length; j++) {
              if (keys[j] === '.priority' && j === keys.length - 1) ;else if (!isValidKey(keys[j])) {
                throw new Error(errorPrefix + 'contains an invalid key (' + keys[j] + ') in path ' + curPath.toString() + '. Keys must be non-empty strings ' + 'and can\'t contain ".", "#", "$", "/", "[", or "]"');
              }
            }
          } // Check that update keys are not descendants of each other.
          // We rely on the property that sorting guarantees that ancestors come
          // right before descendants.


          mergePaths.sort(pathCompare);
          var prevPath = null;

          for (i = 0; i < mergePaths.length; i++) {
            curPath = mergePaths[i];

            if (prevPath !== null && pathContains(prevPath, curPath)) {
              throw new Error(errorPrefix + 'contains a path ' + prevPath.toString() + ' that is ancestor of another path ' + curPath.toString());
            }

            prevPath = curPath;
          }
        };
        /**
         * pre-validate an object passed as an argument to firebase function (
         * must be an object - e.g. for firebase.update()).
         */


        var validateFirebaseMergeDataArg = function validateFirebaseMergeDataArg(fnName, data, path, optional) {
          if (optional && data === undefined) {
            return;
          }

          var errorPrefix$1 = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["errorPrefix"])(fnName, 'values');

          if (!(data && typeof data === 'object') || Array.isArray(data)) {
            throw new Error(errorPrefix$1 + ' must be an object containing the children to replace.');
          }

          var mergePaths = [];
          each(data, function (key, value) {
            var curPath = new Path(key);
            validateFirebaseData(errorPrefix$1, value, pathChild(path, curPath));

            if (pathGetBack(curPath) === '.priority') {
              if (!isValidPriority(value)) {
                throw new Error(errorPrefix$1 + "contains an invalid value for '" + curPath.toString() + "', which must be a valid " + 'Firebase priority (a string, finite number, server value, or null).');
              }
            }

            mergePaths.push(curPath);
          });
          validateFirebaseMergePaths(errorPrefix$1, mergePaths);
        };

        var validatePriority = function validatePriority(fnName, priority, optional) {
          if (optional && priority === undefined) {
            return;
          }

          if (isInvalidJSONNumber(priority)) {
            throw new Error(Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["errorPrefix"])(fnName, 'priority') + 'is ' + priority.toString() + ', but must be a valid Firebase priority (a string, finite number, ' + 'server value, or null).');
          } // Special case to allow importing data with a .sv.


          if (!isValidPriority(priority)) {
            throw new Error(Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["errorPrefix"])(fnName, 'priority') + 'must be a valid Firebase priority ' + '(a string, finite number, server value, or null).');
          }
        };

        var validateEventType = function validateEventType(fnName, eventType, optional) {
          if (optional && eventType === undefined) {
            return;
          }

          switch (eventType) {
            case 'value':
            case 'child_added':
            case 'child_removed':
            case 'child_changed':
            case 'child_moved':
              break;

            default:
              throw new Error(Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["errorPrefix"])(fnName, 'eventType') + 'must be a valid event type = "value", "child_added", "child_removed", ' + '"child_changed", or "child_moved".');
          }
        };

        var validateKey = function validateKey(fnName, argumentName, key, optional) {
          if (optional && key === undefined) {
            return;
          }

          if (!isValidKey(key)) {
            throw new Error(Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["errorPrefix"])(fnName, argumentName) + 'was an invalid key = "' + key + '".  Firebase keys must be non-empty strings and ' + 'can\'t contain ".", "#", "$", "/", "[", or "]").');
          }
        };

        var validatePathString = function validatePathString(fnName, argumentName, pathString, optional) {
          if (optional && pathString === undefined) {
            return;
          }

          if (!isValidPathString(pathString)) {
            throw new Error(Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["errorPrefix"])(fnName, argumentName) + 'was an invalid path = "' + pathString + '". Paths must be non-empty strings and ' + 'can\'t contain ".", "#", "$", "[", or "]"');
          }
        };

        var validateRootPathString = function validateRootPathString(fnName, argumentName, pathString, optional) {
          if (pathString) {
            // Allow '/.info/' at the beginning.
            pathString = pathString.replace(/^\/*\.info(\/|$)/, '/');
          }

          validatePathString(fnName, argumentName, pathString, optional);
        };

        var validateWritablePath = function validateWritablePath(fnName, path) {
          if (pathGetFront(path) === '.info') {
            throw new Error(fnName + " failed = Can't modify data under /.info/");
          }
        };

        var validateUrl = function validateUrl(fnName, parsedUrl) {
          // TODO = Validate server better.
          var pathString = parsedUrl.path.toString();

          if (!(typeof parsedUrl.repoInfo.host === 'string') || parsedUrl.repoInfo.host.length === 0 || !isValidKey(parsedUrl.repoInfo.namespace) && parsedUrl.repoInfo.host.split(':')[0] !== 'localhost' || pathString.length !== 0 && !isValidRootPathString(pathString)) {
            throw new Error(Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["errorPrefix"])(fnName, 'url') + 'must be a valid firebase URL and ' + 'the path can\'t contain ".", "#", "$", "[", or "]".');
          }
        };

        var validateBoolean = function validateBoolean(fnName, argumentName, bool, optional) {
          if (optional && bool === undefined) {
            return;
          }

          if (typeof bool !== 'boolean') {
            throw new Error(Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["errorPrefix"])(fnName, argumentName) + 'must be a boolean.');
          }
        };
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * The event queue serves a few purposes:
         * 1. It ensures we maintain event order in the face of event callbacks doing operations that result in more
         *    events being queued.
         * 2. raiseQueuedEvents() handles being called reentrantly nicely.  That is, if in the course of raising events,
         *    raiseQueuedEvents() is called again, the "inner" call will pick up raising events where the "outer" call
         *    left off, ensuring that the events are still raised synchronously and in order.
         * 3. You can use raiseEventsAtPath and raiseEventsForChangedPath to ensure only relevant previously-queued
         *    events are raised synchronously.
         *
         * NOTE: This can all go away if/when we move to async events.
         *
         */


        var EventQueue =
        /** @class */
        function () {
          function EventQueue() {
            this.eventLists_ = [];
            /**
             * Tracks recursion depth of raiseQueuedEvents_, for debugging purposes.
             */

            this.recursionDepth_ = 0;
          }

          return EventQueue;
        }();
        /**
         * @param eventDataList - The new events to queue.
         */


        function eventQueueQueueEvents(eventQueue, eventDataList) {
          // We group events by path, storing them in a single EventList, to make it easier to skip over them quickly.
          var currList = null;

          for (var i = 0; i < eventDataList.length; i++) {
            var data = eventDataList[i];
            var path = data.getPath();

            if (currList !== null && !pathEquals(path, currList.path)) {
              eventQueue.eventLists_.push(currList);
              currList = null;
            }

            if (currList === null) {
              currList = {
                events: [],
                path: path
              };
            }

            currList.events.push(data);
          }

          if (currList) {
            eventQueue.eventLists_.push(currList);
          }
        }
        /**
         * Queues the specified events and synchronously raises all events (including previously queued ones)
         * for the specified path.
         *
         * It is assumed that the new events are all for the specified path.
         *
         * @param path - The path to raise events for.
         * @param eventDataList - The new events to raise.
         */


        function eventQueueRaiseEventsAtPath(eventQueue, path, eventDataList) {
          eventQueueQueueEvents(eventQueue, eventDataList);
          eventQueueRaiseQueuedEventsMatchingPredicate(eventQueue, function (eventPath) {
            return pathEquals(eventPath, path);
          });
        }
        /**
         * Queues the specified events and synchronously raises all events (including previously queued ones) for
         * locations related to the specified change path (i.e. all ancestors and descendants).
         *
         * It is assumed that the new events are all related (ancestor or descendant) to the specified path.
         *
         * @param changedPath - The path to raise events for.
         * @param eventDataList - The events to raise
         */


        function eventQueueRaiseEventsForChangedPath(eventQueue, changedPath, eventDataList) {
          eventQueueQueueEvents(eventQueue, eventDataList);
          eventQueueRaiseQueuedEventsMatchingPredicate(eventQueue, function (eventPath) {
            return pathContains(eventPath, changedPath) || pathContains(changedPath, eventPath);
          });
        }

        function eventQueueRaiseQueuedEventsMatchingPredicate(eventQueue, predicate) {
          eventQueue.recursionDepth_++;
          var sentAll = true;

          for (var i = 0; i < eventQueue.eventLists_.length; i++) {
            var eventList = eventQueue.eventLists_[i];

            if (eventList) {
              var eventPath = eventList.path;

              if (predicate(eventPath)) {
                eventListRaise(eventQueue.eventLists_[i]);
                eventQueue.eventLists_[i] = null;
              } else {
                sentAll = false;
              }
            }
          }

          if (sentAll) {
            eventQueue.eventLists_ = [];
          }

          eventQueue.recursionDepth_--;
        }
        /**
         * Iterates through the list and raises each event
         */


        function eventListRaise(eventList) {
          for (var i = 0; i < eventList.events.length; i++) {
            var eventData = eventList.events[i];

            if (eventData !== null) {
              eventList.events[i] = null;
              var eventFn = eventData.getEventRunner();

              if (logger) {
                log('event: ' + eventData.toString());
              }

              exceptionGuard(eventFn);
            }
          }
        }
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var INTERRUPT_REASON = 'repo_interrupt';
        /**
         * If a transaction does not succeed after 25 retries, we abort it. Among other
         * things this ensure that if there's ever a bug causing a mismatch between
         * client / server hashes for some data, we won't retry indefinitely.
         */

        var MAX_TRANSACTION_RETRIES = 25;
        /**
         * A connection to a single data repository.
         */

        var Repo =
        /** @class */
        function () {
          function Repo(repoInfo_, forceRestClient_, authTokenProvider_, appCheckProvider_) {
            this.repoInfo_ = repoInfo_;
            this.forceRestClient_ = forceRestClient_;
            this.authTokenProvider_ = authTokenProvider_;
            this.appCheckProvider_ = appCheckProvider_;
            this.dataUpdateCount = 0;
            this.statsListener_ = null;
            this.eventQueue_ = new EventQueue();
            this.nextWriteId_ = 1;
            this.interceptServerDataCallback_ = null;
            /** A list of data pieces and paths to be set when this client disconnects. */

            this.onDisconnect_ = newSparseSnapshotTree();
            /** Stores queues of outstanding transactions for Firebase locations. */

            this.transactionQueueTree_ = new Tree(); // TODO: This should be @private but it's used by test_access.js and internal.js

            this.persistentConnection_ = null; // This key is intentionally not updated if RepoInfo is later changed or replaced

            this.key = this.repoInfo_.toURLString();
          }
          /**
           * @returns The URL corresponding to the root of this Firebase.
           */


          Repo.prototype.toString = function () {
            return (this.repoInfo_.secure ? 'https://' : 'http://') + this.repoInfo_.host;
          };

          return Repo;
        }();

        function repoStart(repo, appId, authOverride) {
          repo.stats_ = statsManagerGetCollection(repo.repoInfo_);

          if (repo.forceRestClient_ || beingCrawled()) {
            repo.server_ = new ReadonlyRestClient(repo.repoInfo_, function (pathString, data, isMerge, tag) {
              repoOnDataUpdate(repo, pathString, data, isMerge, tag);
            }, repo.authTokenProvider_, repo.appCheckProvider_); // Minor hack: Fire onConnect immediately, since there's no actual connection.

            setTimeout(function () {
              return repoOnConnectStatus(repo,
              /* connectStatus= */
              true);
            }, 0);
          } else {
            // Validate authOverride
            if (typeof authOverride !== 'undefined' && authOverride !== null) {
              if (typeof authOverride !== 'object') {
                throw new Error('Only objects are supported for option databaseAuthVariableOverride');
              }

              try {
                Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringify"])(authOverride);
              } catch (e) {
                throw new Error('Invalid authOverride provided: ' + e);
              }
            }

            repo.persistentConnection_ = new PersistentConnection(repo.repoInfo_, appId, function (pathString, data, isMerge, tag) {
              repoOnDataUpdate(repo, pathString, data, isMerge, tag);
            }, function (connectStatus) {
              repoOnConnectStatus(repo, connectStatus);
            }, function (updates) {
              repoOnServerInfoUpdate(repo, updates);
            }, repo.authTokenProvider_, repo.appCheckProvider_, authOverride);
            repo.server_ = repo.persistentConnection_;
          }

          repo.authTokenProvider_.addTokenChangeListener(function (token) {
            repo.server_.refreshAuthToken(token);
          });
          repo.appCheckProvider_.addTokenChangeListener(function (result) {
            repo.server_.refreshAppCheckToken(result.token);
          }); // In the case of multiple Repos for the same repoInfo (i.e. there are multiple Firebase.Contexts being used),
          // we only want to create one StatsReporter.  As such, we'll report stats over the first Repo created.

          repo.statsReporter_ = statsManagerGetOrCreateReporter(repo.repoInfo_, function () {
            return new StatsReporter(repo.stats_, repo.server_);
          }); // Used for .info.

          repo.infoData_ = new SnapshotHolder();
          repo.infoSyncTree_ = new SyncTree({
            startListening: function startListening(query, tag, currentHashFn, onComplete) {
              var infoEvents = [];
              var node = repo.infoData_.getNode(query._path); // This is possibly a hack, but we have different semantics for .info endpoints. We don't raise null events
              // on initial data...

              if (!node.isEmpty()) {
                infoEvents = syncTreeApplyServerOverwrite(repo.infoSyncTree_, query._path, node);
                setTimeout(function () {
                  onComplete('ok');
                }, 0);
              }

              return infoEvents;
            },
            stopListening: function stopListening() {}
          });
          repoUpdateInfo(repo, 'connected', false);
          repo.serverSyncTree_ = new SyncTree({
            startListening: function startListening(query, tag, currentHashFn, onComplete) {
              repo.server_.listen(query, currentHashFn, tag, function (status, data) {
                var events = onComplete(status, data);
                eventQueueRaiseEventsForChangedPath(repo.eventQueue_, query._path, events);
              }); // No synchronous events for network-backed sync trees

              return [];
            },
            stopListening: function stopListening(query, tag) {
              repo.server_.unlisten(query, tag);
            }
          });
        }
        /**
         * @returns The time in milliseconds, taking the server offset into account if we have one.
         */


        function repoServerTime(repo) {
          var offsetNode = repo.infoData_.getNode(new Path('.info/serverTimeOffset'));
          var offset = offsetNode.val() || 0;
          return new Date().getTime() + offset;
        }
        /**
         * Generate ServerValues using some variables from the repo object.
         */


        function repoGenerateServerValues(repo) {
          return generateWithValues({
            timestamp: repoServerTime(repo)
          });
        }
        /**
         * Called by realtime when we get new messages from the server.
         */


        function repoOnDataUpdate(repo, pathString, data, isMerge, tag) {
          // For testing.
          repo.dataUpdateCount++;
          var path = new Path(pathString);
          data = repo.interceptServerDataCallback_ ? repo.interceptServerDataCallback_(pathString, data) : data;
          var events = [];

          if (tag) {
            if (isMerge) {
              var taggedChildren = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["map"])(data, function (raw) {
                return nodeFromJSON$1(raw);
              });
              events = syncTreeApplyTaggedQueryMerge(repo.serverSyncTree_, path, taggedChildren, tag);
            } else {
              var taggedSnap = nodeFromJSON$1(data);
              events = syncTreeApplyTaggedQueryOverwrite(repo.serverSyncTree_, path, taggedSnap, tag);
            }
          } else if (isMerge) {
            var changedChildren = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["map"])(data, function (raw) {
              return nodeFromJSON$1(raw);
            });
            events = syncTreeApplyServerMerge(repo.serverSyncTree_, path, changedChildren);
          } else {
            var snap = nodeFromJSON$1(data);
            events = syncTreeApplyServerOverwrite(repo.serverSyncTree_, path, snap);
          }

          var affectedPath = path;

          if (events.length > 0) {
            // Since we have a listener outstanding for each transaction, receiving any events
            // is a proxy for some change having occurred.
            affectedPath = repoRerunTransactions(repo, path);
          }

          eventQueueRaiseEventsForChangedPath(repo.eventQueue_, affectedPath, events);
        } // TODO: This should be @private but it's used by test_access.js and internal.js


        function repoInterceptServerData(repo, callback) {
          repo.interceptServerDataCallback_ = callback;
        }

        function repoOnConnectStatus(repo, connectStatus) {
          repoUpdateInfo(repo, 'connected', connectStatus);

          if (connectStatus === false) {
            repoRunOnDisconnectEvents(repo);
          }
        }

        function repoOnServerInfoUpdate(repo, updates) {
          each(updates, function (key, value) {
            repoUpdateInfo(repo, key, value);
          });
        }

        function repoUpdateInfo(repo, pathString, value) {
          var path = new Path('/.info/' + pathString);
          var newNode = nodeFromJSON$1(value);
          repo.infoData_.updateSnapshot(path, newNode);
          var events = syncTreeApplyServerOverwrite(repo.infoSyncTree_, path, newNode);
          eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);
        }

        function repoGetNextWriteId(repo) {
          return repo.nextWriteId_++;
        }
        /**
         * The purpose of `getValue` is to return the latest known value
         * satisfying `query`.
         *
         * This method will first check for in-memory cached values
         * belonging to active listeners. If they are found, such values
         * are considered to be the most up-to-date.
         *
         * If the client is not connected, this method will try to
         * establish a connection and request the value for `query`. If
         * the client is not able to retrieve the query result, it reports
         * an error.
         *
         * @param query - The query to surface a value for.
         */


        function repoGetValue(repo, query) {
          // Only active queries are cached. There is no persisted cache.
          var cached = syncTreeGetServerValue(repo.serverSyncTree_, query);

          if (cached != null) {
            return Promise.resolve(cached);
          }

          return repo.server_.get(query).then(function (payload) {
            var node = nodeFromJSON$1(payload).withIndex(query._queryParams.getIndex());
            var events = syncTreeApplyServerOverwrite(repo.serverSyncTree_, query._path, node);
            eventQueueRaiseEventsAtPath(repo.eventQueue_, query._path, events);
            return Promise.resolve(node);
          }, function (err) {
            repoLog(repo, 'get for query ' + Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringify"])(query) + ' failed: ' + err);
            return Promise.reject(new Error(err));
          });
        }

        function repoSetWithPriority(repo, path, newVal, newPriority, onComplete) {
          repoLog(repo, 'set', {
            path: path.toString(),
            value: newVal,
            priority: newPriority
          }); // TODO: Optimize this behavior to either (a) store flag to skip resolving where possible and / or
          // (b) store unresolved paths on JSON parse

          var serverValues = repoGenerateServerValues(repo);
          var newNodeUnresolved = nodeFromJSON$1(newVal, newPriority);
          var existing = syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path);
          var newNode = resolveDeferredValueSnapshot(newNodeUnresolved, existing, serverValues);
          var writeId = repoGetNextWriteId(repo);
          var events = syncTreeApplyUserOverwrite(repo.serverSyncTree_, path, newNode, writeId, true);
          eventQueueQueueEvents(repo.eventQueue_, events);
          repo.server_.put(path.toString(), newNodeUnresolved.val(
          /*export=*/
          true), function (status, errorReason) {
            var success = status === 'ok';

            if (!success) {
              warn('set at ' + path + ' failed: ' + status);
            }

            var clearEvents = syncTreeAckUserWrite(repo.serverSyncTree_, writeId, !success);
            eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, clearEvents);
            repoCallOnCompleteCallback(repo, onComplete, status, errorReason);
          });
          var affectedPath = repoAbortTransactions(repo, path);
          repoRerunTransactions(repo, affectedPath); // We queued the events above, so just flush the queue here

          eventQueueRaiseEventsForChangedPath(repo.eventQueue_, affectedPath, []);
        }

        function repoUpdate(repo, path, childrenToMerge, onComplete) {
          repoLog(repo, 'update', {
            path: path.toString(),
            value: childrenToMerge
          }); // Start with our existing data and merge each child into it.

          var empty = true;
          var serverValues = repoGenerateServerValues(repo);
          var changedChildren = {};
          each(childrenToMerge, function (changedKey, changedValue) {
            empty = false;
            changedChildren[changedKey] = resolveDeferredValueTree(pathChild(path, changedKey), nodeFromJSON$1(changedValue), repo.serverSyncTree_, serverValues);
          });

          if (!empty) {
            var writeId_1 = repoGetNextWriteId(repo);
            var events = syncTreeApplyUserMerge(repo.serverSyncTree_, path, changedChildren, writeId_1);
            eventQueueQueueEvents(repo.eventQueue_, events);
            repo.server_.merge(path.toString(), childrenToMerge, function (status, errorReason) {
              var success = status === 'ok';

              if (!success) {
                warn('update at ' + path + ' failed: ' + status);
              }

              var clearEvents = syncTreeAckUserWrite(repo.serverSyncTree_, writeId_1, !success);
              var affectedPath = clearEvents.length > 0 ? repoRerunTransactions(repo, path) : path;
              eventQueueRaiseEventsForChangedPath(repo.eventQueue_, affectedPath, clearEvents);
              repoCallOnCompleteCallback(repo, onComplete, status, errorReason);
            });
            each(childrenToMerge, function (changedPath) {
              var affectedPath = repoAbortTransactions(repo, pathChild(path, changedPath));
              repoRerunTransactions(repo, affectedPath);
            }); // We queued the events above, so just flush the queue here

            eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, []);
          } else {
            log("update() called with empty data.  Don't do anything.");
            repoCallOnCompleteCallback(repo, onComplete, 'ok', undefined);
          }
        }
        /**
         * Applies all of the changes stored up in the onDisconnect_ tree.
         */


        function repoRunOnDisconnectEvents(repo) {
          repoLog(repo, 'onDisconnectEvents');
          var serverValues = repoGenerateServerValues(repo);
          var resolvedOnDisconnectTree = newSparseSnapshotTree();
          sparseSnapshotTreeForEachTree(repo.onDisconnect_, newEmptyPath(), function (path, node) {
            var resolved = resolveDeferredValueTree(path, node, repo.serverSyncTree_, serverValues);
            sparseSnapshotTreeRemember(resolvedOnDisconnectTree, path, resolved);
          });
          var events = [];
          sparseSnapshotTreeForEachTree(resolvedOnDisconnectTree, newEmptyPath(), function (path, snap) {
            events = events.concat(syncTreeApplyServerOverwrite(repo.serverSyncTree_, path, snap));
            var affectedPath = repoAbortTransactions(repo, path);
            repoRerunTransactions(repo, affectedPath);
          });
          repo.onDisconnect_ = newSparseSnapshotTree();
          eventQueueRaiseEventsForChangedPath(repo.eventQueue_, newEmptyPath(), events);
        }

        function repoOnDisconnectCancel(repo, path, onComplete) {
          repo.server_.onDisconnectCancel(path.toString(), function (status, errorReason) {
            if (status === 'ok') {
              sparseSnapshotTreeForget(repo.onDisconnect_, path);
            }

            repoCallOnCompleteCallback(repo, onComplete, status, errorReason);
          });
        }

        function repoOnDisconnectSet(repo, path, value, onComplete) {
          var newNode = nodeFromJSON$1(value);
          repo.server_.onDisconnectPut(path.toString(), newNode.val(
          /*export=*/
          true), function (status, errorReason) {
            if (status === 'ok') {
              sparseSnapshotTreeRemember(repo.onDisconnect_, path, newNode);
            }

            repoCallOnCompleteCallback(repo, onComplete, status, errorReason);
          });
        }

        function repoOnDisconnectSetWithPriority(repo, path, value, priority, onComplete) {
          var newNode = nodeFromJSON$1(value, priority);
          repo.server_.onDisconnectPut(path.toString(), newNode.val(
          /*export=*/
          true), function (status, errorReason) {
            if (status === 'ok') {
              sparseSnapshotTreeRemember(repo.onDisconnect_, path, newNode);
            }

            repoCallOnCompleteCallback(repo, onComplete, status, errorReason);
          });
        }

        function repoOnDisconnectUpdate(repo, path, childrenToMerge, onComplete) {
          if (Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["isEmpty"])(childrenToMerge)) {
            log("onDisconnect().update() called with empty data.  Don't do anything.");
            repoCallOnCompleteCallback(repo, onComplete, 'ok', undefined);
            return;
          }

          repo.server_.onDisconnectMerge(path.toString(), childrenToMerge, function (status, errorReason) {
            if (status === 'ok') {
              each(childrenToMerge, function (childName, childNode) {
                var newChildNode = nodeFromJSON$1(childNode);
                sparseSnapshotTreeRemember(repo.onDisconnect_, pathChild(path, childName), newChildNode);
              });
            }

            repoCallOnCompleteCallback(repo, onComplete, status, errorReason);
          });
        }

        function repoAddEventCallbackForQuery(repo, query, eventRegistration) {
          var events;

          if (pathGetFront(query._path) === '.info') {
            events = syncTreeAddEventRegistration(repo.infoSyncTree_, query, eventRegistration);
          } else {
            events = syncTreeAddEventRegistration(repo.serverSyncTree_, query, eventRegistration);
          }

          eventQueueRaiseEventsAtPath(repo.eventQueue_, query._path, events);
        }

        function repoRemoveEventCallbackForQuery(repo, query, eventRegistration) {
          // These are guaranteed not to raise events, since we're not passing in a cancelError. However, we can future-proof
          // a little bit by handling the return values anyways.
          var events;

          if (pathGetFront(query._path) === '.info') {
            events = syncTreeRemoveEventRegistration(repo.infoSyncTree_, query, eventRegistration);
          } else {
            events = syncTreeRemoveEventRegistration(repo.serverSyncTree_, query, eventRegistration);
          }

          eventQueueRaiseEventsAtPath(repo.eventQueue_, query._path, events);
        }

        function repoInterrupt(repo) {
          if (repo.persistentConnection_) {
            repo.persistentConnection_.interrupt(INTERRUPT_REASON);
          }
        }

        function repoResume(repo) {
          if (repo.persistentConnection_) {
            repo.persistentConnection_.resume(INTERRUPT_REASON);
          }
        }

        function repoStats(repo, showDelta) {
          if (showDelta === void 0) {
            showDelta = false;
          }

          if (typeof console === 'undefined') {
            return;
          }

          var stats;

          if (showDelta) {
            if (!repo.statsListener_) {
              repo.statsListener_ = new StatsListener(repo.stats_);
            }

            stats = repo.statsListener_.get();
          } else {
            stats = repo.stats_.get();
          }

          var longestName = Object.keys(stats).reduce(function (previousValue, currentValue) {
            return Math.max(currentValue.length, previousValue);
          }, 0);
          each(stats, function (stat, value) {
            var paddedStat = stat; // pad stat names to be the same length (plus 2 extra spaces).

            for (var i = stat.length; i < longestName + 2; i++) {
              paddedStat += ' ';
            }

            console.log(paddedStat + value);
          });
        }

        function repoStatsIncrementCounter(repo, metric) {
          repo.stats_.incrementCounter(metric);
          statsReporterIncludeStat(repo.statsReporter_, metric);
        }

        function repoLog(repo) {
          var varArgs = [];

          for (var _i = 1; _i < arguments.length; _i++) {
            varArgs[_i - 1] = arguments[_i];
          }

          var prefix = '';

          if (repo.persistentConnection_) {
            prefix = repo.persistentConnection_.id + ':';
          }

          log.apply(void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__spreadArray"])([prefix], Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__read"])(varArgs)));
        }

        function repoCallOnCompleteCallback(repo, callback, status, errorReason) {
          if (callback) {
            exceptionGuard(function () {
              if (status === 'ok') {
                callback(null);
              } else {
                var code = (status || 'error').toUpperCase();
                var message = code;

                if (errorReason) {
                  message += ': ' + errorReason;
                }

                var error = new Error(message); // eslint-disable-next-line @typescript-eslint/no-explicit-any

                error.code = code;
                callback(error);
              }
            });
          }
        }
        /**
         * Creates a new transaction, adds it to the transactions we're tracking, and
         * sends it to the server if possible.
         *
         * @param path - Path at which to do transaction.
         * @param transactionUpdate - Update callback.
         * @param onComplete - Completion callback.
         * @param unwatcher - Function that will be called when the transaction no longer
         * need data updates for `path`.
         * @param applyLocally - Whether or not to make intermediate results visible
         */


        function repoStartTransaction(repo, path, transactionUpdate, onComplete, unwatcher, applyLocally) {
          repoLog(repo, 'transaction on ' + path); // Initialize transaction.

          var transaction = {
            path: path,
            update: transactionUpdate,
            onComplete: onComplete,
            // One of TransactionStatus enums.
            status: null,
            // Used when combining transactions at different locations to figure out
            // which one goes first.
            order: LUIDGenerator(),
            // Whether to raise local events for this transaction.
            applyLocally: applyLocally,
            // Count of how many times we've retried the transaction.
            retryCount: 0,
            // Function to call to clean up our .on() listener.
            unwatcher: unwatcher,
            // Stores why a transaction was aborted.
            abortReason: null,
            currentWriteId: null,
            currentInputSnapshot: null,
            currentOutputSnapshotRaw: null,
            currentOutputSnapshotResolved: null
          }; // Run transaction initially.

          var currentState = repoGetLatestState(repo, path, undefined);
          transaction.currentInputSnapshot = currentState;
          var newVal = transaction.update(currentState.val());

          if (newVal === undefined) {
            // Abort transaction.
            transaction.unwatcher();
            transaction.currentOutputSnapshotRaw = null;
            transaction.currentOutputSnapshotResolved = null;

            if (transaction.onComplete) {
              transaction.onComplete(null, false, transaction.currentInputSnapshot);
            }
          } else {
            validateFirebaseData('transaction failed: Data returned ', newVal, transaction.path); // Mark as run and add to our queue.

            transaction.status = 0
            /* RUN */
            ;
            var queueNode = treeSubTree(repo.transactionQueueTree_, path);
            var nodeQueue = treeGetValue(queueNode) || [];
            nodeQueue.push(transaction);
            treeSetValue(queueNode, nodeQueue); // Update visibleData and raise events
            // Note: We intentionally raise events after updating all of our
            // transaction state, since the user could start new transactions from the
            // event callbacks.

            var priorityForNode = void 0;

            if (typeof newVal === 'object' && newVal !== null && Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["contains"])(newVal, '.priority')) {
              // eslint-disable-next-line @typescript-eslint/no-explicit-any
              priorityForNode = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["safeGet"])(newVal, '.priority');
              Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(isValidPriority(priorityForNode), 'Invalid priority returned by transaction. ' + 'Priority must be a valid string, finite number, server value, or null.');
            } else {
              var currentNode = syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path) || ChildrenNode.EMPTY_NODE;
              priorityForNode = currentNode.getPriority().val();
            }

            var serverValues = repoGenerateServerValues(repo);
            var newNodeUnresolved = nodeFromJSON$1(newVal, priorityForNode);
            var newNode = resolveDeferredValueSnapshot(newNodeUnresolved, currentState, serverValues);
            transaction.currentOutputSnapshotRaw = newNodeUnresolved;
            transaction.currentOutputSnapshotResolved = newNode;
            transaction.currentWriteId = repoGetNextWriteId(repo);
            var events = syncTreeApplyUserOverwrite(repo.serverSyncTree_, path, newNode, transaction.currentWriteId, transaction.applyLocally);
            eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);
            repoSendReadyTransactions(repo, repo.transactionQueueTree_);
          }
        }
        /**
         * @param excludeSets - A specific set to exclude
         */


        function repoGetLatestState(repo, path, excludeSets) {
          return syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path, excludeSets) || ChildrenNode.EMPTY_NODE;
        }
        /**
         * Sends any already-run transactions that aren't waiting for outstanding
         * transactions to complete.
         *
         * Externally it's called with no arguments, but it calls itself recursively
         * with a particular transactionQueueTree node to recurse through the tree.
         *
         * @param node - transactionQueueTree node to start at.
         */


        function repoSendReadyTransactions(repo, node) {
          if (node === void 0) {
            node = repo.transactionQueueTree_;
          } // Before recursing, make sure any completed transactions are removed.


          if (!node) {
            repoPruneCompletedTransactionsBelowNode(repo, node);
          }

          if (treeGetValue(node)) {
            var queue = repoBuildTransactionQueue(repo, node);
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(queue.length > 0, 'Sending zero length transaction queue');
            var allRun = queue.every(function (transaction) {
              return transaction.status === 0
              /* RUN */
              ;
            }); // If they're all run (and not sent), we can send them.  Else, we must wait.

            if (allRun) {
              repoSendTransactionQueue(repo, treeGetPath(node), queue);
            }
          } else if (treeHasChildren(node)) {
            treeForEachChild(node, function (childNode) {
              repoSendReadyTransactions(repo, childNode);
            });
          }
        }
        /**
         * Given a list of run transactions, send them to the server and then handle
         * the result (success or failure).
         *
         * @param path - The location of the queue.
         * @param queue - Queue of transactions under the specified location.
         */


        function repoSendTransactionQueue(repo, path, queue) {
          // Mark transactions as sent and increment retry count!
          var setsToIgnore = queue.map(function (txn) {
            return txn.currentWriteId;
          });
          var latestState = repoGetLatestState(repo, path, setsToIgnore);
          var snapToSend = latestState;
          var latestHash = latestState.hash();

          for (var i = 0; i < queue.length; i++) {
            var txn = queue[i];
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(txn.status === 0
            /* RUN */
            , 'tryToSendTransactionQueue_: items in queue should all be run.');
            txn.status = 1
            /* SENT */
            ;
            txn.retryCount++;
            var relativePath = newRelativePath(path, txn.path); // If we've gotten to this point, the output snapshot must be defined.

            snapToSend = snapToSend.updateChild(relativePath
            /** @type {!Node} */
            , txn.currentOutputSnapshotRaw);
          }

          var dataToSend = snapToSend.val(true);
          var pathToSend = path; // Send the put.

          repo.server_.put(pathToSend.toString(), dataToSend, function (status) {
            repoLog(repo, 'transaction put response', {
              path: pathToSend.toString(),
              status: status
            });
            var events = [];

            if (status === 'ok') {
              // Queue up the callbacks and fire them after cleaning up all of our
              // transaction state, since the callback could trigger more
              // transactions or sets.
              var callbacks = [];

              var _loop_1 = function _loop_1(i) {
                queue[i].status = 2
                /* COMPLETED */
                ;
                events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, queue[i].currentWriteId));

                if (queue[i].onComplete) {
                  // We never unset the output snapshot, and given that this
                  // transaction is complete, it should be set
                  callbacks.push(function () {
                    return queue[i].onComplete(null, true, queue[i].currentOutputSnapshotResolved);
                  });
                }

                queue[i].unwatcher();
              };

              for (var i = 0; i < queue.length; i++) {
                _loop_1(i);
              } // Now remove the completed transactions.


              repoPruneCompletedTransactionsBelowNode(repo, treeSubTree(repo.transactionQueueTree_, path)); // There may be pending transactions that we can now send.

              repoSendReadyTransactions(repo, repo.transactionQueueTree_);
              eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events); // Finally, trigger onComplete callbacks.

              for (var i = 0; i < callbacks.length; i++) {
                exceptionGuard(callbacks[i]);
              }
            } else {
              // transactions are no longer sent.  Update their status appropriately.
              if (status === 'datastale') {
                for (var i = 0; i < queue.length; i++) {
                  if (queue[i].status === 3
                  /* SENT_NEEDS_ABORT */
                  ) {
                      queue[i].status = 4
                      /* NEEDS_ABORT */
                      ;
                    } else {
                    queue[i].status = 0
                    /* RUN */
                    ;
                  }
                }
              } else {
                warn('transaction at ' + pathToSend.toString() + ' failed: ' + status);

                for (var i = 0; i < queue.length; i++) {
                  queue[i].status = 4
                  /* NEEDS_ABORT */
                  ;
                  queue[i].abortReason = status;
                }
              }

              repoRerunTransactions(repo, path);
            }
          }, latestHash);
        }
        /**
         * Finds all transactions dependent on the data at changedPath and reruns them.
         *
         * Should be called any time cached data changes.
         *
         * Return the highest path that was affected by rerunning transactions. This
         * is the path at which events need to be raised for.
         *
         * @param changedPath - The path in mergedData that changed.
         * @returns The rootmost path that was affected by rerunning transactions.
         */


        function repoRerunTransactions(repo, changedPath) {
          var rootMostTransactionNode = repoGetAncestorTransactionNode(repo, changedPath);
          var path = treeGetPath(rootMostTransactionNode);
          var queue = repoBuildTransactionQueue(repo, rootMostTransactionNode);
          repoRerunTransactionQueue(repo, queue, path);
          return path;
        }
        /**
         * Does all the work of rerunning transactions (as well as cleans up aborted
         * transactions and whatnot).
         *
         * @param queue - The queue of transactions to run.
         * @param path - The path the queue is for.
         */


        function repoRerunTransactionQueue(repo, queue, path) {
          if (queue.length === 0) {
            return; // Nothing to do!
          } // Queue up the callbacks and fire them after cleaning up all of our
          // transaction state, since the callback could trigger more transactions or
          // sets.


          var callbacks = [];
          var events = []; // Ignore all of the sets we're going to re-run.

          var txnsToRerun = queue.filter(function (q) {
            return q.status === 0
            /* RUN */
            ;
          });
          var setsToIgnore = txnsToRerun.map(function (q) {
            return q.currentWriteId;
          });

          var _loop_2 = function _loop_2(i) {
            var transaction = queue[i];
            var relativePath = newRelativePath(path, transaction.path);
            var abortTransaction = false,
                abortReason;
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(relativePath !== null, 'rerunTransactionsUnderNode_: relativePath should not be null.');

            if (transaction.status === 4
            /* NEEDS_ABORT */
            ) {
                abortTransaction = true;
                abortReason = transaction.abortReason;
                events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, transaction.currentWriteId, true));
              } else if (transaction.status === 0
            /* RUN */
            ) {
                if (transaction.retryCount >= MAX_TRANSACTION_RETRIES) {
                  abortTransaction = true;
                  abortReason = 'maxretry';
                  events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, transaction.currentWriteId, true));
                } else {
                  // This code reruns a transaction
                  var currentNode = repoGetLatestState(repo, transaction.path, setsToIgnore);
                  transaction.currentInputSnapshot = currentNode;
                  var newData = queue[i].update(currentNode.val());

                  if (newData !== undefined) {
                    validateFirebaseData('transaction failed: Data returned ', newData, transaction.path);
                    var newDataNode = nodeFromJSON$1(newData);
                    var hasExplicitPriority = typeof newData === 'object' && newData != null && Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["contains"])(newData, '.priority');

                    if (!hasExplicitPriority) {
                      // Keep the old priority if there wasn't a priority explicitly specified.
                      newDataNode = newDataNode.updatePriority(currentNode.getPriority());
                    }

                    var oldWriteId = transaction.currentWriteId;
                    var serverValues = repoGenerateServerValues(repo);
                    var newNodeResolved = resolveDeferredValueSnapshot(newDataNode, currentNode, serverValues);
                    transaction.currentOutputSnapshotRaw = newDataNode;
                    transaction.currentOutputSnapshotResolved = newNodeResolved;
                    transaction.currentWriteId = repoGetNextWriteId(repo); // Mutates setsToIgnore in place

                    setsToIgnore.splice(setsToIgnore.indexOf(oldWriteId), 1);
                    events = events.concat(syncTreeApplyUserOverwrite(repo.serverSyncTree_, transaction.path, newNodeResolved, transaction.currentWriteId, transaction.applyLocally));
                    events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, oldWriteId, true));
                  } else {
                    abortTransaction = true;
                    abortReason = 'nodata';
                    events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, transaction.currentWriteId, true));
                  }
                }
              }

            eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);
            events = [];

            if (abortTransaction) {
              // Abort.
              queue[i].status = 2
              /* COMPLETED */
              ; // Removing a listener can trigger pruning which can muck with
              // mergedData/visibleData (as it prunes data). So defer the unwatcher
              // until we're done.

              (function (unwatcher) {
                setTimeout(unwatcher, Math.floor(0));
              })(queue[i].unwatcher);

              if (queue[i].onComplete) {
                if (abortReason === 'nodata') {
                  callbacks.push(function () {
                    return queue[i].onComplete(null, false, queue[i].currentInputSnapshot);
                  });
                } else {
                  callbacks.push(function () {
                    return queue[i].onComplete(new Error(abortReason), false, null);
                  });
                }
              }
            }
          };

          for (var i = 0; i < queue.length; i++) {
            _loop_2(i);
          } // Clean up completed transactions.


          repoPruneCompletedTransactionsBelowNode(repo, repo.transactionQueueTree_); // Now fire callbacks, now that we're in a good, known state.

          for (var i = 0; i < callbacks.length; i++) {
            exceptionGuard(callbacks[i]);
          } // Try to send the transaction result to the server.


          repoSendReadyTransactions(repo, repo.transactionQueueTree_);
        }
        /**
         * Returns the rootmost ancestor node of the specified path that has a pending
         * transaction on it, or just returns the node for the given path if there are
         * no pending transactions on any ancestor.
         *
         * @param path - The location to start at.
         * @returns The rootmost node with a transaction.
         */


        function repoGetAncestorTransactionNode(repo, path) {
          var front; // Start at the root and walk deeper into the tree towards path until we
          // find a node with pending transactions.

          var transactionNode = repo.transactionQueueTree_;
          front = pathGetFront(path);

          while (front !== null && treeGetValue(transactionNode) === undefined) {
            transactionNode = treeSubTree(transactionNode, front);
            path = pathPopFront(path);
            front = pathGetFront(path);
          }

          return transactionNode;
        }
        /**
         * Builds the queue of all transactions at or below the specified
         * transactionNode.
         *
         * @param transactionNode
         * @returns The generated queue.
         */


        function repoBuildTransactionQueue(repo, transactionNode) {
          // Walk any child transaction queues and aggregate them into a single queue.
          var transactionQueue = [];
          repoAggregateTransactionQueuesForNode(repo, transactionNode, transactionQueue); // Sort them by the order the transactions were created.

          transactionQueue.sort(function (a, b) {
            return a.order - b.order;
          });
          return transactionQueue;
        }

        function repoAggregateTransactionQueuesForNode(repo, node, queue) {
          var nodeQueue = treeGetValue(node);

          if (nodeQueue) {
            for (var i = 0; i < nodeQueue.length; i++) {
              queue.push(nodeQueue[i]);
            }
          }

          treeForEachChild(node, function (child) {
            repoAggregateTransactionQueuesForNode(repo, child, queue);
          });
        }
        /**
         * Remove COMPLETED transactions at or below this node in the transactionQueueTree_.
         */


        function repoPruneCompletedTransactionsBelowNode(repo, node) {
          var queue = treeGetValue(node);

          if (queue) {
            var to = 0;

            for (var from = 0; from < queue.length; from++) {
              if (queue[from].status !== 2
              /* COMPLETED */
              ) {
                  queue[to] = queue[from];
                  to++;
                }
            }

            queue.length = to;
            treeSetValue(node, queue.length > 0 ? queue : undefined);
          }

          treeForEachChild(node, function (childNode) {
            repoPruneCompletedTransactionsBelowNode(repo, childNode);
          });
        }
        /**
         * Aborts all transactions on ancestors or descendants of the specified path.
         * Called when doing a set() or update() since we consider them incompatible
         * with transactions.
         *
         * @param path - Path for which we want to abort related transactions.
         */


        function repoAbortTransactions(repo, path) {
          var affectedPath = treeGetPath(repoGetAncestorTransactionNode(repo, path));
          var transactionNode = treeSubTree(repo.transactionQueueTree_, path);
          treeForEachAncestor(transactionNode, function (node) {
            repoAbortTransactionsOnNode(repo, node);
          });
          repoAbortTransactionsOnNode(repo, transactionNode);
          treeForEachDescendant(transactionNode, function (node) {
            repoAbortTransactionsOnNode(repo, node);
          });
          return affectedPath;
        }
        /**
         * Abort transactions stored in this transaction queue node.
         *
         * @param node - Node to abort transactions for.
         */


        function repoAbortTransactionsOnNode(repo, node) {
          var queue = treeGetValue(node);

          if (queue) {
            // Queue up the callbacks and fire them after cleaning up all of our
            // transaction state, since the callback could trigger more transactions
            // or sets.
            var callbacks = []; // Go through queue.  Any already-sent transactions must be marked for
            // abort, while the unsent ones can be immediately aborted and removed.

            var events = [];
            var lastSent = -1;

            for (var i = 0; i < queue.length; i++) {
              if (queue[i].status === 3
              /* SENT_NEEDS_ABORT */
              ) ;else if (queue[i].status === 1
              /* SENT */
              ) {
                  Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(lastSent === i - 1, 'All SENT items should be at beginning of queue.');
                  lastSent = i; // Mark transaction for abort when it comes back.

                  queue[i].status = 3
                  /* SENT_NEEDS_ABORT */
                  ;
                  queue[i].abortReason = 'set';
                } else {
                Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(queue[i].status === 0
                /* RUN */
                , 'Unexpected transaction status in abort'); // We can abort it immediately.

                queue[i].unwatcher();
                events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, queue[i].currentWriteId, true));

                if (queue[i].onComplete) {
                  callbacks.push(queue[i].onComplete.bind(null, new Error('set'), false, null));
                }
              }
            }

            if (lastSent === -1) {
              // We're not waiting for any sent transactions.  We can clear the queue.
              treeSetValue(node, undefined);
            } else {
              // Remove the transactions we aborted.
              queue.length = lastSent + 1;
            } // Now fire the callbacks.


            eventQueueRaiseEventsForChangedPath(repo.eventQueue_, treeGetPath(node), events);

            for (var i = 0; i < callbacks.length; i++) {
              exceptionGuard(callbacks[i]);
            }
          }
        }
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        function decodePath(pathString) {
          var pathStringDecoded = '';
          var pieces = pathString.split('/');

          for (var i = 0; i < pieces.length; i++) {
            if (pieces[i].length > 0) {
              var piece = pieces[i];

              try {
                piece = decodeURIComponent(piece.replace(/\+/g, ' '));
              } catch (e) {}

              pathStringDecoded += '/' + piece;
            }
          }

          return pathStringDecoded;
        }
        /**
         * @returns key value hash
         */


        function decodeQuery(queryString) {
          var e_1, _a;

          var results = {};

          if (queryString.charAt(0) === '?') {
            queryString = queryString.substring(1);
          }

          try {
            for (var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__values"])(queryString.split('&')), _c = _b.next(); !_c.done; _c = _b.next()) {
              var segment = _c.value;

              if (segment.length === 0) {
                continue;
              }

              var kv = segment.split('=');

              if (kv.length === 2) {
                results[decodeURIComponent(kv[0])] = decodeURIComponent(kv[1]);
              } else {
                warn("Invalid query segment '" + segment + "' in query '" + queryString + "'");
              }
            }
          } catch (e_1_1) {
            e_1 = {
              error: e_1_1
            };
          } finally {
            try {
              if (_c && !_c.done && (_a = _b["return"])) _a.call(_b);
            } finally {
              if (e_1) throw e_1.error;
            }
          }

          return results;
        }

        var parseRepoInfo = function parseRepoInfo(dataURL, nodeAdmin) {
          var parsedUrl = parseDatabaseURL(dataURL),
              namespace = parsedUrl.namespace;

          if (parsedUrl.domain === 'firebase.com') {
            fatal(parsedUrl.host + ' is no longer supported. ' + 'Please use <YOUR FIREBASE>.firebaseio.com instead');
          } // Catch common error of uninitialized namespace value.


          if ((!namespace || namespace === 'undefined') && parsedUrl.domain !== 'localhost') {
            fatal('Cannot parse Firebase url. Please use https://<YOUR FIREBASE>.firebaseio.com');
          }

          if (!parsedUrl.secure) {
            warnIfPageIsSecure();
          }

          var webSocketOnly = parsedUrl.scheme === 'ws' || parsedUrl.scheme === 'wss';
          return {
            repoInfo: new RepoInfo(parsedUrl.host, parsedUrl.secure, namespace, nodeAdmin, webSocketOnly,
            /*persistenceKey=*/
            '',
            /*includeNamespaceInQueryParams=*/
            namespace !== parsedUrl.subdomain),
            path: new Path(parsedUrl.pathString)
          };
        };

        var parseDatabaseURL = function parseDatabaseURL(dataURL) {
          // Default to empty strings in the event of a malformed string.
          var host = '',
              domain = '',
              subdomain = '',
              pathString = '',
              namespace = ''; // Always default to SSL, unless otherwise specified.

          var secure = true,
              scheme = 'https',
              port = 443; // Don't do any validation here. The caller is responsible for validating the result of parsing.

          if (typeof dataURL === 'string') {
            // Parse scheme.
            var colonInd = dataURL.indexOf('//');

            if (colonInd >= 0) {
              scheme = dataURL.substring(0, colonInd - 1);
              dataURL = dataURL.substring(colonInd + 2);
            } // Parse host, path, and query string.


            var slashInd = dataURL.indexOf('/');

            if (slashInd === -1) {
              slashInd = dataURL.length;
            }

            var questionMarkInd = dataURL.indexOf('?');

            if (questionMarkInd === -1) {
              questionMarkInd = dataURL.length;
            }

            host = dataURL.substring(0, Math.min(slashInd, questionMarkInd));

            if (slashInd < questionMarkInd) {
              // For pathString, questionMarkInd will always come after slashInd
              pathString = decodePath(dataURL.substring(slashInd, questionMarkInd));
            }

            var queryParams = decodeQuery(dataURL.substring(Math.min(dataURL.length, questionMarkInd))); // If we have a port, use scheme for determining if it's secure.

            colonInd = host.indexOf(':');

            if (colonInd >= 0) {
              secure = scheme === 'https' || scheme === 'wss';
              port = parseInt(host.substring(colonInd + 1), 10);
            } else {
              colonInd = host.length;
            }

            var hostWithoutPort = host.slice(0, colonInd);

            if (hostWithoutPort.toLowerCase() === 'localhost') {
              domain = 'localhost';
            } else if (hostWithoutPort.split('.').length <= 2) {
              domain = hostWithoutPort;
            } else {
              // Interpret the subdomain of a 3 or more component URL as the namespace name.
              var dotInd = host.indexOf('.');
              subdomain = host.substring(0, dotInd).toLowerCase();
              domain = host.substring(dotInd + 1); // Normalize namespaces to lowercase to share storage / connection.

              namespace = subdomain;
            } // Always treat the value of the `ns` as the namespace name if it is present.


            if ('ns' in queryParams) {
              namespace = queryParams['ns'];
            }
          }

          return {
            host: host,
            port: port,
            domain: domain,
            subdomain: subdomain,
            secure: secure,
            scheme: scheme,
            pathString: pathString,
            namespace: namespace
          };
        };
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * Encapsulates the data needed to raise an event
         */


        var DataEvent =
        /** @class */
        function () {
          /**
           * @param eventType - One of: value, child_added, child_changed, child_moved, child_removed
           * @param eventRegistration - The function to call to with the event data. User provided
           * @param snapshot - The data backing the event
           * @param prevName - Optional, the name of the previous child for child_* events.
           */
          function DataEvent(eventType, eventRegistration, snapshot, prevName) {
            this.eventType = eventType;
            this.eventRegistration = eventRegistration;
            this.snapshot = snapshot;
            this.prevName = prevName;
          }

          DataEvent.prototype.getPath = function () {
            var ref = this.snapshot.ref;

            if (this.eventType === 'value') {
              return ref._path;
            } else {
              return ref.parent._path;
            }
          };

          DataEvent.prototype.getEventType = function () {
            return this.eventType;
          };

          DataEvent.prototype.getEventRunner = function () {
            return this.eventRegistration.getEventRunner(this);
          };

          DataEvent.prototype.toString = function () {
            return this.getPath().toString() + ':' + this.eventType + ':' + Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["stringify"])(this.snapshot.exportVal());
          };

          return DataEvent;
        }();

        var CancelEvent =
        /** @class */
        function () {
          function CancelEvent(eventRegistration, error, path) {
            this.eventRegistration = eventRegistration;
            this.error = error;
            this.path = path;
          }

          CancelEvent.prototype.getPath = function () {
            return this.path;
          };

          CancelEvent.prototype.getEventType = function () {
            return 'cancel';
          };

          CancelEvent.prototype.getEventRunner = function () {
            return this.eventRegistration.getEventRunner(this);
          };

          CancelEvent.prototype.toString = function () {
            return this.path.toString() + ':cancel';
          };

          return CancelEvent;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * A wrapper class that converts events from the database@exp SDK to the legacy
         * Database SDK. Events are not converted directly as event registration relies
         * on reference comparison of the original user callback (see `matches()`) and
         * relies on equality of the legacy SDK's `context` object.
         */


        var CallbackContext =
        /** @class */
        function () {
          function CallbackContext(snapshotCallback, cancelCallback) {
            this.snapshotCallback = snapshotCallback;
            this.cancelCallback = cancelCallback;
          }

          CallbackContext.prototype.onValue = function (expDataSnapshot, previousChildName) {
            this.snapshotCallback.call(null, expDataSnapshot, previousChildName);
          };

          CallbackContext.prototype.onCancel = function (error) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(this.hasCancelCallback, 'Raising a cancel event on a listener with no cancel callback');
            return this.cancelCallback.call(null, error);
          };

          Object.defineProperty(CallbackContext.prototype, "hasCancelCallback", {
            get: function get() {
              return !!this.cancelCallback;
            },
            enumerable: false,
            configurable: true
          });

          CallbackContext.prototype.matches = function (other) {
            return this.snapshotCallback === other.snapshotCallback || this.snapshotCallback.userCallback === other.snapshotCallback.userCallback && this.snapshotCallback.context === other.snapshotCallback.context;
          };

          return CallbackContext;
        }();
        /**
         * @license
         * Copyright 2021 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * The `onDisconnect` class allows you to write or clear data when your client
         * disconnects from the Database server. These updates occur whether your
         * client disconnects cleanly or not, so you can rely on them to clean up data
         * even if a connection is dropped or a client crashes.
         *
         * The `onDisconnect` class is most commonly used to manage presence in
         * applications where it is useful to detect how many clients are connected and
         * when other clients disconnect. See
         * {@link https://firebase.google.com/docs/database/web/offline-capabilities | Enabling Offline Capabilities in JavaScript}
         * for more information.
         *
         * To avoid problems when a connection is dropped before the requests can be
         * transferred to the Database server, these functions should be called before
         * writing any data.
         *
         * Note that `onDisconnect` operations are only triggered once. If you want an
         * operation to occur each time a disconnect occurs, you'll need to re-establish
         * the `onDisconnect` operations each time you reconnect.
         */


        var OnDisconnect =
        /** @class */
        function () {
          /** @hideconstructor */
          function OnDisconnect(_repo, _path) {
            this._repo = _repo;
            this._path = _path;
          }
          /**
           * Cancels all previously queued `onDisconnect()` set or update events for this
           * location and all children.
           *
           * If a write has been queued for this location via a `set()` or `update()` at a
           * parent location, the write at this location will be canceled, though writes
           * to sibling locations will still occur.
           *
           * @returns Resolves when synchronization to the server is complete.
           */


          OnDisconnect.prototype.cancel = function () {
            var deferred = new _firebase_util__WEBPACK_IMPORTED_MODULE_2__["Deferred"]();
            repoOnDisconnectCancel(this._repo, this._path, deferred.wrapCallback(function () {}));
            return deferred.promise;
          };
          /**
           * Ensures the data at this location is deleted when the client is disconnected
           * (due to closing the browser, navigating to a new page, or network issues).
           *
           * @returns Resolves when synchronization to the server is complete.
           */


          OnDisconnect.prototype.remove = function () {
            validateWritablePath('OnDisconnect.remove', this._path);
            var deferred = new _firebase_util__WEBPACK_IMPORTED_MODULE_2__["Deferred"]();
            repoOnDisconnectSet(this._repo, this._path, null, deferred.wrapCallback(function () {}));
            return deferred.promise;
          };
          /**
           * Ensures the data at this location is set to the specified value when the
           * client is disconnected (due to closing the browser, navigating to a new page,
           * or network issues).
           *
           * `set()` is especially useful for implementing "presence" systems, where a
           * value should be changed or cleared when a user disconnects so that they
           * appear "offline" to other users. See
           * {@link https://firebase.google.com/docs/database/web/offline-capabilities | Enabling Offline Capabilities in JavaScript}
           * for more information.
           *
           * Note that `onDisconnect` operations are only triggered once. If you want an
           * operation to occur each time a disconnect occurs, you'll need to re-establish
           * the `onDisconnect` operations each time.
           *
           * @param value - The value to be written to this location on disconnect (can
           * be an object, array, string, number, boolean, or null).
           * @returns Resolves when synchronization to the Database is complete.
           */


          OnDisconnect.prototype.set = function (value) {
            validateWritablePath('OnDisconnect.set', this._path);
            validateFirebaseDataArg('OnDisconnect.set', value, this._path, false);
            var deferred = new _firebase_util__WEBPACK_IMPORTED_MODULE_2__["Deferred"]();
            repoOnDisconnectSet(this._repo, this._path, value, deferred.wrapCallback(function () {}));
            return deferred.promise;
          };
          /**
           * Ensures the data at this location is set to the specified value and priority
           * when the client is disconnected (due to closing the browser, navigating to a
           * new page, or network issues).
           *
           * @param value - The value to be written to this location on disconnect (can
           * be an object, array, string, number, boolean, or null).
           * @param priority - The priority to be written (string, number, or null).
           * @returns Resolves when synchronization to the Database is complete.
           */


          OnDisconnect.prototype.setWithPriority = function (value, priority) {
            validateWritablePath('OnDisconnect.setWithPriority', this._path);
            validateFirebaseDataArg('OnDisconnect.setWithPriority', value, this._path, false);
            validatePriority('OnDisconnect.setWithPriority', priority, false);
            var deferred = new _firebase_util__WEBPACK_IMPORTED_MODULE_2__["Deferred"]();
            repoOnDisconnectSetWithPriority(this._repo, this._path, value, priority, deferred.wrapCallback(function () {}));
            return deferred.promise;
          };
          /**
           * Writes multiple values at this location when the client is disconnected (due
           * to closing the browser, navigating to a new page, or network issues).
           *
           * The `values` argument contains multiple property-value pairs that will be
           * written to the Database together. Each child property can either be a simple
           * property (for example, "name") or a relative path (for example, "name/first")
           * from the current location to the data to update.
           *
           * As opposed to the `set()` method, `update()` can be use to selectively update
           * only the referenced properties at the current location (instead of replacing
           * all the child properties at the current location).
           *
           * @param values - Object containing multiple values.
           * @returns Resolves when synchronization to the Database is complete.
           */


          OnDisconnect.prototype.update = function (values) {
            validateWritablePath('OnDisconnect.update', this._path);
            validateFirebaseMergeDataArg('OnDisconnect.update', values, this._path, false);
            var deferred = new _firebase_util__WEBPACK_IMPORTED_MODULE_2__["Deferred"]();
            repoOnDisconnectUpdate(this._repo, this._path, values, deferred.wrapCallback(function () {}));
            return deferred.promise;
          };

          return OnDisconnect;
        }();
        /**
         * @license
         * Copyright 2020 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * @internal
         */


        var QueryImpl =
        /** @class */
        function () {
          /**
           * @hideconstructor
           */
          function QueryImpl(_repo, _path, _queryParams, _orderByCalled) {
            this._repo = _repo;
            this._path = _path;
            this._queryParams = _queryParams;
            this._orderByCalled = _orderByCalled;
          }

          Object.defineProperty(QueryImpl.prototype, "key", {
            get: function get() {
              if (pathIsEmpty(this._path)) {
                return null;
              } else {
                return pathGetBack(this._path);
              }
            },
            enumerable: false,
            configurable: true
          });
          Object.defineProperty(QueryImpl.prototype, "ref", {
            get: function get() {
              return new ReferenceImpl(this._repo, this._path);
            },
            enumerable: false,
            configurable: true
          });
          Object.defineProperty(QueryImpl.prototype, "_queryIdentifier", {
            get: function get() {
              var obj = queryParamsGetQueryObject(this._queryParams);
              var id = ObjectToUniqueKey(obj);
              return id === '{}' ? 'default' : id;
            },
            enumerable: false,
            configurable: true
          });
          Object.defineProperty(QueryImpl.prototype, "_queryObject", {
            /**
             * An object representation of the query parameters used by this Query.
             */
            get: function get() {
              return queryParamsGetQueryObject(this._queryParams);
            },
            enumerable: false,
            configurable: true
          });

          QueryImpl.prototype.isEqual = function (other) {
            other = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["getModularInstance"])(other);

            if (!(other instanceof QueryImpl)) {
              return false;
            }

            var sameRepo = this._repo === other._repo;
            var samePath = pathEquals(this._path, other._path);
            var sameQueryIdentifier = this._queryIdentifier === other._queryIdentifier;
            return sameRepo && samePath && sameQueryIdentifier;
          };

          QueryImpl.prototype.toJSON = function () {
            return this.toString();
          };

          QueryImpl.prototype.toString = function () {
            return this._repo.toString() + pathToUrlEncodedString(this._path);
          };

          return QueryImpl;
        }();
        /**
         * Validates that no other order by call has been made
         */


        function validateNoPreviousOrderByCall(query, fnName) {
          if (query._orderByCalled === true) {
            throw new Error(fnName + ": You can't combine multiple orderBy calls.");
          }
        }
        /**
         * Validates start/end values for queries.
         */


        function validateQueryEndpoints(params) {
          var startNode = null;
          var endNode = null;

          if (params.hasStart()) {
            startNode = params.getIndexStartValue();
          }

          if (params.hasEnd()) {
            endNode = params.getIndexEndValue();
          }

          if (params.getIndex() === KEY_INDEX) {
            var tooManyArgsError = 'Query: When ordering by key, you may only pass one argument to ' + 'startAt(), endAt(), or equalTo().';
            var wrongArgTypeError = 'Query: When ordering by key, the argument passed to startAt(), startAfter(), ' + 'endAt(), endBefore(), or equalTo() must be a string.';

            if (params.hasStart()) {
              var startName = params.getIndexStartName();

              if (startName !== MIN_NAME) {
                throw new Error(tooManyArgsError);
              } else if (typeof startNode !== 'string') {
                throw new Error(wrongArgTypeError);
              }
            }

            if (params.hasEnd()) {
              var endName = params.getIndexEndName();

              if (endName !== MAX_NAME) {
                throw new Error(tooManyArgsError);
              } else if (typeof endNode !== 'string') {
                throw new Error(wrongArgTypeError);
              }
            }
          } else if (params.getIndex() === PRIORITY_INDEX) {
            if (startNode != null && !isValidPriority(startNode) || endNode != null && !isValidPriority(endNode)) {
              throw new Error('Query: When ordering by priority, the first argument passed to startAt(), ' + 'startAfter() endAt(), endBefore(), or equalTo() must be a valid priority value ' + '(null, a number, or a string).');
            }
          } else {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(params.getIndex() instanceof PathIndex || params.getIndex() === VALUE_INDEX, 'unknown index type.');

            if (startNode != null && typeof startNode === 'object' || endNode != null && typeof endNode === 'object') {
              throw new Error('Query: First argument passed to startAt(), startAfter(), endAt(), endBefore(), or ' + 'equalTo() cannot be an object.');
            }
          }
        }
        /**
         * Validates that limit* has been called with the correct combination of parameters
         */


        function validateLimit(params) {
          if (params.hasStart() && params.hasEnd() && params.hasLimit() && !params.hasAnchoredLimit()) {
            throw new Error("Query: Can't combine startAt(), startAfter(), endAt(), endBefore(), and limit(). Use " + 'limitToFirst() or limitToLast() instead.');
          }
        }
        /**
         * @internal
         */


        var ReferenceImpl =
        /** @class */
        function (_super) {
          Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__extends"])(ReferenceImpl, _super);
          /** @hideconstructor */

          function ReferenceImpl(repo, path) {
            return _super.call(this, repo, path, new QueryParams(), false) || this;
          }

          Object.defineProperty(ReferenceImpl.prototype, "parent", {
            get: function get() {
              var parentPath = pathParent(this._path);
              return parentPath === null ? null : new ReferenceImpl(this._repo, parentPath);
            },
            enumerable: false,
            configurable: true
          });
          Object.defineProperty(ReferenceImpl.prototype, "root", {
            get: function get() {
              var ref = this;

              while (ref.parent !== null) {
                ref = ref.parent;
              }

              return ref;
            },
            enumerable: false,
            configurable: true
          });
          return ReferenceImpl;
        }(QueryImpl);
        /**
         * A `DataSnapshot` contains data from a Database location.
         *
         * Any time you read data from the Database, you receive the data as a
         * `DataSnapshot`. A `DataSnapshot` is passed to the event callbacks you attach
         * with `on()` or `once()`. You can extract the contents of the snapshot as a
         * JavaScript object by calling the `val()` method. Alternatively, you can
         * traverse into the snapshot by calling `child()` to return child snapshots
         * (which you could then call `val()` on).
         *
         * A `DataSnapshot` is an efficiently generated, immutable copy of the data at
         * a Database location. It cannot be modified and will never change (to modify
         * data, you always call the `set()` method on a `Reference` directly).
         */


        var DataSnapshot =
        /** @class */
        function () {
          /**
           * @param _node - A SnapshotNode to wrap.
           * @param ref - The location this snapshot came from.
           * @param _index - The iteration order for this snapshot
           * @hideconstructor
           */
          function DataSnapshot(_node,
          /**
           * The location of this DataSnapshot.
           */
          ref, _index) {
            this._node = _node;
            this.ref = ref;
            this._index = _index;
          }

          Object.defineProperty(DataSnapshot.prototype, "priority", {
            /**
             * Gets the priority value of the data in this `DataSnapshot`.
             *
             * Applications need not use priority but can order collections by
             * ordinary properties (see
             * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data |Sorting and filtering data}
             * ).
             */
            get: function get() {
              // typecast here because we never return deferred values or internal priorities (MAX_PRIORITY)
              return this._node.getPriority().val();
            },
            enumerable: false,
            configurable: true
          });
          Object.defineProperty(DataSnapshot.prototype, "key", {
            /**
             * The key (last part of the path) of the location of this `DataSnapshot`.
             *
             * The last token in a Database location is considered its key. For example,
             * "ada" is the key for the /users/ada/ node. Accessing the key on any
             * `DataSnapshot` will return the key for the location that generated it.
             * However, accessing the key on the root URL of a Database will return
             * `null`.
             */
            get: function get() {
              return this.ref.key;
            },
            enumerable: false,
            configurable: true
          });
          Object.defineProperty(DataSnapshot.prototype, "size", {
            /** Returns the number of child properties of this `DataSnapshot`. */
            get: function get() {
              return this._node.numChildren();
            },
            enumerable: false,
            configurable: true
          });
          /**
           * Gets another `DataSnapshot` for the location at the specified relative path.
           *
           * Passing a relative path to the `child()` method of a DataSnapshot returns
           * another `DataSnapshot` for the location at the specified relative path. The
           * relative path can either be a simple child name (for example, "ada") or a
           * deeper, slash-separated path (for example, "ada/name/first"). If the child
           * location has no data, an empty `DataSnapshot` (that is, a `DataSnapshot`
           * whose value is `null`) is returned.
           *
           * @param path - A relative path to the location of child data.
           */

          DataSnapshot.prototype.child = function (path) {
            var childPath = new Path(path);
            var childRef = child(this.ref, path);
            return new DataSnapshot(this._node.getChild(childPath), childRef, PRIORITY_INDEX);
          };
          /**
           * Returns true if this `DataSnapshot` contains any data. It is slightly more
           * efficient than using `snapshot.val() !== null`.
           */


          DataSnapshot.prototype.exists = function () {
            return !this._node.isEmpty();
          };
          /**
           * Exports the entire contents of the DataSnapshot as a JavaScript object.
           *
           * The `exportVal()` method is similar to `val()`, except priority information
           * is included (if available), making it suitable for backing up your data.
           *
           * @returns The DataSnapshot's contents as a JavaScript value (Object,
           *   Array, string, number, boolean, or `null`).
           */
          // eslint-disable-next-line @typescript-eslint/no-explicit-any


          DataSnapshot.prototype.exportVal = function () {
            return this._node.val(true);
          };
          /**
           * Enumerates the top-level children in the `DataSnapshot`.
           *
           * Because of the way JavaScript objects work, the ordering of data in the
           * JavaScript object returned by `val()` is not guaranteed to match the
           * ordering on the server nor the ordering of `onChildAdded()` events. That is
           * where `forEach()` comes in handy. It guarantees the children of a
           * `DataSnapshot` will be iterated in their query order.
           *
           * If no explicit `orderBy*()` method is used, results are returned
           * ordered by key (unless priorities are used, in which case, results are
           * returned by priority).
           *
           * @param action - A function that will be called for each child DataSnapshot.
           * The callback can return true to cancel further enumeration.
           * @returns true if enumeration was canceled due to your callback returning
           * true.
           */


          DataSnapshot.prototype.forEach = function (action) {
            var _this = this;

            if (this._node.isLeafNode()) {
              return false;
            }

            var childrenNode = this._node; // Sanitize the return value to a boolean. ChildrenNode.forEachChild has a weird return type...

            return !!childrenNode.forEachChild(this._index, function (key, node) {
              return action(new DataSnapshot(node, child(_this.ref, key), PRIORITY_INDEX));
            });
          };
          /**
           * Returns true if the specified child path has (non-null) data.
           *
           * @param path - A relative path to the location of a potential child.
           * @returns `true` if data exists at the specified child path; else
           *  `false`.
           */


          DataSnapshot.prototype.hasChild = function (path) {
            var childPath = new Path(path);
            return !this._node.getChild(childPath).isEmpty();
          };
          /**
           * Returns whether or not the `DataSnapshot` has any non-`null` child
           * properties.
           *
           * You can use `hasChildren()` to determine if a `DataSnapshot` has any
           * children. If it does, you can enumerate them using `forEach()`. If it
           * doesn't, then either this snapshot contains a primitive value (which can be
           * retrieved with `val()`) or it is empty (in which case, `val()` will return
           * `null`).
           *
           * @returns true if this snapshot has any children; else false.
           */


          DataSnapshot.prototype.hasChildren = function () {
            if (this._node.isLeafNode()) {
              return false;
            } else {
              return !this._node.isEmpty();
            }
          };
          /**
           * Returns a JSON-serializable representation of this object.
           */


          DataSnapshot.prototype.toJSON = function () {
            return this.exportVal();
          };
          /**
           * Extracts a JavaScript value from a `DataSnapshot`.
           *
           * Depending on the data in a `DataSnapshot`, the `val()` method may return a
           * scalar type (string, number, or boolean), an array, or an object. It may
           * also return null, indicating that the `DataSnapshot` is empty (contains no
           * data).
           *
           * @returns The DataSnapshot's contents as a JavaScript value (Object,
           *   Array, string, number, boolean, or `null`).
           */
          // eslint-disable-next-line @typescript-eslint/no-explicit-any


          DataSnapshot.prototype.val = function () {
            return this._node.val();
          };

          return DataSnapshot;
        }();
        /**
         *
         * Returns a `Reference` representing the location in the Database
         * corresponding to the provided path. If no path is provided, the `Reference`
         * will point to the root of the Database.
         *
         * @param db - The database instance to obtain a reference for.
         * @param path - Optional path representing the location the returned
         *   `Reference` will point. If not provided, the returned `Reference` will
         *   point to the root of the Database.
         * @returns If a path is provided, a `Reference`
         *   pointing to the provided path. Otherwise, a `Reference` pointing to the
         *   root of the Database.
         */


        function ref(db, path) {
          db = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["getModularInstance"])(db);

          db._checkNotDeleted('ref');

          return path !== undefined ? child(db._root, path) : db._root;
        }
        /**
         * Returns a `Reference` representing the location in the Database
         * corresponding to the provided Firebase URL.
         *
         * An exception is thrown if the URL is not a valid Firebase Database URL or it
         * has a different domain than the current `Database` instance.
         *
         * Note that all query parameters (`orderBy`, `limitToLast`, etc.) are ignored
         * and are not applied to the returned `Reference`.
         *
         * @param db - The database instance to obtain a reference for.
         * @param url - The Firebase URL at which the returned `Reference` will
         *   point.
         * @returns A `Reference` pointing to the provided
         *   Firebase URL.
         */


        function refFromURL(db, url) {
          db = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["getModularInstance"])(db);

          db._checkNotDeleted('refFromURL');

          var parsedURL = parseRepoInfo(url, db._repo.repoInfo_.nodeAdmin);
          validateUrl('refFromURL', parsedURL);
          var repoInfo = parsedURL.repoInfo;

          if (!db._repo.repoInfo_.isCustomHost() && repoInfo.host !== db._repo.repoInfo_.host) {
            fatal('refFromURL' + ': Host name does not match the current database: ' + '(found ' + repoInfo.host + ' but expected ' + db._repo.repoInfo_.host + ')');
          }

          return ref(db, parsedURL.path.toString());
        }
        /**
         * Gets a `Reference` for the location at the specified relative path.
         *
         * The relative path can either be a simple child name (for example, "ada") or
         * a deeper slash-separated path (for example, "ada/name/first").
         *
         * @param parent - The parent location.
         * @param path - A relative path from this location to the desired child
         *   location.
         * @returns The specified child location.
         */


        function child(parent, path) {
          parent = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["getModularInstance"])(parent);

          if (pathGetFront(parent._path) === null) {
            validateRootPathString('child', 'path', path, false);
          } else {
            validatePathString('child', 'path', path, false);
          }

          return new ReferenceImpl(parent._repo, pathChild(parent._path, path));
        }
        /**
         * Generates a new child location using a unique key and returns its
         * `Reference`.
         *
         * This is the most common pattern for adding data to a collection of items.
         *
         * If you provide a value to `push()`, the value is written to the
         * generated location. If you don't pass a value, nothing is written to the
         * database and the child remains empty (but you can use the `Reference`
         * elsewhere).
         *
         * The unique keys generated by `push()` are ordered by the current time, so the
         * resulting list of items is chronologically sorted. The keys are also
         * designed to be unguessable (they contain 72 random bits of entropy).
         *
         * See {@link https://firebase.google.com/docs/database/web/lists-of-data#append_to_a_list_of_data | Append to a list of data}
         * </br>See {@link ttps://firebase.googleblog.com/2015/02/the-2120-ways-to-ensure-unique_68.html | The 2^120 Ways to Ensure Unique Identifiers}
         *
         * @param parent - The parent location.
         * @param value - Optional value to be written at the generated location.
         * @returns Combined `Promise` and `Reference`; resolves when write is complete,
         * but can be used immediately as the `Reference` to the child location.
         */


        function push(parent, value) {
          parent = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["getModularInstance"])(parent);
          validateWritablePath('push', parent._path);
          validateFirebaseDataArg('push', value, parent._path, true);
          var now = repoServerTime(parent._repo);
          var name = nextPushId(now); // push() returns a ThennableReference whose promise is fulfilled with a
          // regular Reference. We use child() to create handles to two different
          // references. The first is turned into a ThennableReference below by adding
          // then() and catch() methods and is used as the return value of push(). The
          // second remains a regular Reference and is used as the fulfilled value of
          // the first ThennableReference.

          var thennablePushRef = child(parent, name);
          var pushRef = child(parent, name);
          var promise;

          if (value != null) {
            promise = set(pushRef, value).then(function () {
              return pushRef;
            });
          } else {
            promise = Promise.resolve(pushRef);
          }

          thennablePushRef.then = promise.then.bind(promise);
          thennablePushRef["catch"] = promise.then.bind(promise, undefined);
          return thennablePushRef;
        }
        /**
         * Removes the data at this Database location.
         *
         * Any data at child locations will also be deleted.
         *
         * The effect of the remove will be visible immediately and the corresponding
         * event 'value' will be triggered. Synchronization of the remove to the
         * Firebase servers will also be started, and the returned Promise will resolve
         * when complete. If provided, the onComplete callback will be called
         * asynchronously after synchronization has finished.
         *
         * @param ref - The location to remove.
         * @returns Resolves when remove on server is complete.
         */


        function remove(ref) {
          validateWritablePath('remove', ref._path);
          return set(ref, null);
        }
        /**
         * Writes data to this Database location.
         *
         * This will overwrite any data at this location and all child locations.
         *
         * The effect of the write will be visible immediately, and the corresponding
         * events ("value", "child_added", etc.) will be triggered. Synchronization of
         * the data to the Firebase servers will also be started, and the returned
         * Promise will resolve when complete. If provided, the `onComplete` callback
         * will be called asynchronously after synchronization has finished.
         *
         * Passing `null` for the new value is equivalent to calling `remove()`; namely,
         * all data at this location and all child locations will be deleted.
         *
         * `set()` will remove any priority stored at this location, so if priority is
         * meant to be preserved, you need to use `setWithPriority()` instead.
         *
         * Note that modifying data with `set()` will cancel any pending transactions
         * at that location, so extreme care should be taken if mixing `set()` and
         * `transaction()` to modify the same data.
         *
         * A single `set()` will generate a single "value" event at the location where
         * the `set()` was performed.
         *
         * @param ref - The location to write to.
         * @param value - The value to be written (string, number, boolean, object,
         *   array, or null).
         * @returns Resolves when write to server is complete.
         */


        function set(ref, value) {
          ref = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["getModularInstance"])(ref);
          validateWritablePath('set', ref._path);
          validateFirebaseDataArg('set', value, ref._path, false);
          var deferred = new _firebase_util__WEBPACK_IMPORTED_MODULE_2__["Deferred"]();
          repoSetWithPriority(ref._repo, ref._path, value,
          /*priority=*/
          null, deferred.wrapCallback(function () {}));
          return deferred.promise;
        }
        /**
         * Sets a priority for the data at this Database location.
         *
         * Applications need not use priority but can order collections by
         * ordinary properties (see
         * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data | Sorting and filtering data}
         * ).
         *
         * @param ref - The location to write to.
         * @param priority - The priority to be written (string, number, or null).
         * @returns Resolves when write to server is complete.
         */


        function setPriority(ref, priority) {
          ref = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["getModularInstance"])(ref);
          validateWritablePath('setPriority', ref._path);
          validatePriority('setPriority', priority, false);
          var deferred = new _firebase_util__WEBPACK_IMPORTED_MODULE_2__["Deferred"]();
          repoSetWithPriority(ref._repo, pathChild(ref._path, '.priority'), priority, null, deferred.wrapCallback(function () {}));
          return deferred.promise;
        }
        /**
         * Writes data the Database location. Like `set()` but also specifies the
         * priority for that data.
         *
         * Applications need not use priority but can order collections by
         * ordinary properties (see
         * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data | Sorting and filtering data}
         * ).
         *
         * @param ref - The location to write to.
         * @param value - The value to be written (string, number, boolean, object,
         *   array, or null).
         * @param priority - The priority to be written (string, number, or null).
         * @returns Resolves when write to server is complete.
         */


        function setWithPriority(ref, value, priority) {
          validateWritablePath('setWithPriority', ref._path);
          validateFirebaseDataArg('setWithPriority', value, ref._path, false);
          validatePriority('setWithPriority', priority, false);

          if (ref.key === '.length' || ref.key === '.keys') {
            throw 'setWithPriority failed: ' + ref.key + ' is a read-only object.';
          }

          var deferred = new _firebase_util__WEBPACK_IMPORTED_MODULE_2__["Deferred"]();
          repoSetWithPriority(ref._repo, ref._path, value, priority, deferred.wrapCallback(function () {}));
          return deferred.promise;
        }
        /**
         * Writes multiple values to the Database at once.
         *
         * The `values` argument contains multiple property-value pairs that will be
         * written to the Database together. Each child property can either be a simple
         * property (for example, "name") or a relative path (for example,
         * "name/first") from the current location to the data to update.
         *
         * As opposed to the `set()` method, `update()` can be use to selectively update
         * only the referenced properties at the current location (instead of replacing
         * all the child properties at the current location).
         *
         * The effect of the write will be visible immediately, and the corresponding
         * events ('value', 'child_added', etc.) will be triggered. Synchronization of
         * the data to the Firebase servers will also be started, and the returned
         * Promise will resolve when complete. If provided, the `onComplete` callback
         * will be called asynchronously after synchronization has finished.
         *
         * A single `update()` will generate a single "value" event at the location
         * where the `update()` was performed, regardless of how many children were
         * modified.
         *
         * Note that modifying data with `update()` will cancel any pending
         * transactions at that location, so extreme care should be taken if mixing
         * `update()` and `transaction()` to modify the same data.
         *
         * Passing `null` to `update()` will remove the data at this location.
         *
         * See
         * {@link https://firebase.googleblog.com/2015/09/introducing-multi-location-updates-and_86.html | Introducing multi-location updates and more}.
         *
         * @param ref - The location to write to.
         * @param values - Object containing multiple values.
         * @returns Resolves when update on server is complete.
         */


        function update(ref, values) {
          validateFirebaseMergeDataArg('update', values, ref._path, false);
          var deferred = new _firebase_util__WEBPACK_IMPORTED_MODULE_2__["Deferred"]();
          repoUpdate(ref._repo, ref._path, values, deferred.wrapCallback(function () {}));
          return deferred.promise;
        }
        /**
         * Gets the most up-to-date result for this query.
         *
         * @param query - The query to run.
         * @returns A promise which resolves to the resulting DataSnapshot if a value is
         * available, or rejects if the client is unable to return a value (e.g., if the
         * server is unreachable and there is nothing cached).
         */


        function get(query) {
          query = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["getModularInstance"])(query);
          return repoGetValue(query._repo, query).then(function (node) {
            return new DataSnapshot(node, new ReferenceImpl(query._repo, query._path), query._queryParams.getIndex());
          });
        }
        /**
         * Represents registration for 'value' events.
         */


        var ValueEventRegistration =
        /** @class */
        function () {
          function ValueEventRegistration(callbackContext) {
            this.callbackContext = callbackContext;
          }

          ValueEventRegistration.prototype.respondsTo = function (eventType) {
            return eventType === 'value';
          };

          ValueEventRegistration.prototype.createEvent = function (change, query) {
            var index = query._queryParams.getIndex();

            return new DataEvent('value', this, new DataSnapshot(change.snapshotNode, new ReferenceImpl(query._repo, query._path), index));
          };

          ValueEventRegistration.prototype.getEventRunner = function (eventData) {
            var _this = this;

            if (eventData.getEventType() === 'cancel') {
              return function () {
                return _this.callbackContext.onCancel(eventData.error);
              };
            } else {
              return function () {
                return _this.callbackContext.onValue(eventData.snapshot, null);
              };
            }
          };

          ValueEventRegistration.prototype.createCancelEvent = function (error, path) {
            if (this.callbackContext.hasCancelCallback) {
              return new CancelEvent(this, error, path);
            } else {
              return null;
            }
          };

          ValueEventRegistration.prototype.matches = function (other) {
            if (!(other instanceof ValueEventRegistration)) {
              return false;
            } else if (!other.callbackContext || !this.callbackContext) {
              // If no callback specified, we consider it to match any callback.
              return true;
            } else {
              return other.callbackContext.matches(this.callbackContext);
            }
          };

          ValueEventRegistration.prototype.hasAnyCallback = function () {
            return this.callbackContext !== null;
          };

          return ValueEventRegistration;
        }();
        /**
         * Represents the registration of a child_x event.
         */


        var ChildEventRegistration =
        /** @class */
        function () {
          function ChildEventRegistration(eventType, callbackContext) {
            this.eventType = eventType;
            this.callbackContext = callbackContext;
          }

          ChildEventRegistration.prototype.respondsTo = function (eventType) {
            var eventToCheck = eventType === 'children_added' ? 'child_added' : eventType;
            eventToCheck = eventToCheck === 'children_removed' ? 'child_removed' : eventToCheck;
            return this.eventType === eventToCheck;
          };

          ChildEventRegistration.prototype.createCancelEvent = function (error, path) {
            if (this.callbackContext.hasCancelCallback) {
              return new CancelEvent(this, error, path);
            } else {
              return null;
            }
          };

          ChildEventRegistration.prototype.createEvent = function (change, query) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["assert"])(change.childName != null, 'Child events should have a childName.');
            var childRef = child(new ReferenceImpl(query._repo, query._path), change.childName);

            var index = query._queryParams.getIndex();

            return new DataEvent(change.type, this, new DataSnapshot(change.snapshotNode, childRef, index), change.prevName);
          };

          ChildEventRegistration.prototype.getEventRunner = function (eventData) {
            var _this = this;

            if (eventData.getEventType() === 'cancel') {
              return function () {
                return _this.callbackContext.onCancel(eventData.error);
              };
            } else {
              return function () {
                return _this.callbackContext.onValue(eventData.snapshot, eventData.prevName);
              };
            }
          };

          ChildEventRegistration.prototype.matches = function (other) {
            if (other instanceof ChildEventRegistration) {
              return this.eventType === other.eventType && (!this.callbackContext || !other.callbackContext || this.callbackContext.matches(other.callbackContext));
            }

            return false;
          };

          ChildEventRegistration.prototype.hasAnyCallback = function () {
            return !!this.callbackContext;
          };

          return ChildEventRegistration;
        }();

        function addEventListener(query, eventType, callback, cancelCallbackOrListenOptions, options) {
          var cancelCallback;

          if (typeof cancelCallbackOrListenOptions === 'object') {
            cancelCallback = undefined;
            options = cancelCallbackOrListenOptions;
          }

          if (typeof cancelCallbackOrListenOptions === 'function') {
            cancelCallback = cancelCallbackOrListenOptions;
          }

          if (options && options.onlyOnce) {
            var userCallback_1 = callback;

            var onceCallback = function onceCallback(dataSnapshot, previousChildName) {
              repoRemoveEventCallbackForQuery(query._repo, query, container);
              userCallback_1(dataSnapshot, previousChildName);
            };

            onceCallback.userCallback = callback.userCallback;
            onceCallback.context = callback.context;
            callback = onceCallback;
          }

          var callbackContext = new CallbackContext(callback, cancelCallback || undefined);
          var container = eventType === 'value' ? new ValueEventRegistration(callbackContext) : new ChildEventRegistration(eventType, callbackContext);
          repoAddEventCallbackForQuery(query._repo, query, container);
          return function () {
            return repoRemoveEventCallbackForQuery(query._repo, query, container);
          };
        }

        function onValue(query, callback, cancelCallbackOrListenOptions, options) {
          return addEventListener(query, 'value', callback, cancelCallbackOrListenOptions, options);
        }

        function onChildAdded(query, callback, cancelCallbackOrListenOptions, options) {
          return addEventListener(query, 'child_added', callback, cancelCallbackOrListenOptions, options);
        }

        function onChildChanged(query, callback, cancelCallbackOrListenOptions, options) {
          return addEventListener(query, 'child_changed', callback, cancelCallbackOrListenOptions, options);
        }

        function onChildMoved(query, callback, cancelCallbackOrListenOptions, options) {
          return addEventListener(query, 'child_moved', callback, cancelCallbackOrListenOptions, options);
        }

        function onChildRemoved(query, callback, cancelCallbackOrListenOptions, options) {
          return addEventListener(query, 'child_removed', callback, cancelCallbackOrListenOptions, options);
        }
        /**
         * Detaches a callback previously attached with `on()`.
         *
         * Detach a callback previously attached with `on()`. Note that if `on()` was
         * called multiple times with the same eventType and callback, the callback
         * will be called multiple times for each event, and `off()` must be called
         * multiple times to remove the callback. Calling `off()` on a parent listener
         * will not automatically remove listeners registered on child nodes, `off()`
         * must also be called on any child listeners to remove the callback.
         *
         * If a callback is not specified, all callbacks for the specified eventType
         * will be removed. Similarly, if no eventType is specified, all callbacks
         * for the `Reference` will be removed.
         *
         * Individual listeners can also be removed by invoking their unsubscribe
         * callbacks.
         *
         * @param query - The query that the listener was registered with.
         * @param eventType - One of the following strings: "value", "child_added",
         * "child_changed", "child_removed", or "child_moved." If omitted, all callbacks
         * for the `Reference` will be removed.
         * @param callback - The callback function that was passed to `on()` or
         * `undefined` to remove all callbacks.
         */


        function off(query, eventType, callback) {
          var container = null;
          var expCallback = callback ? new CallbackContext(callback) : null;

          if (eventType === 'value') {
            container = new ValueEventRegistration(expCallback);
          } else if (eventType) {
            container = new ChildEventRegistration(eventType, expCallback);
          }

          repoRemoveEventCallbackForQuery(query._repo, query, container);
        }
        /**
         * A `QueryConstraint` is used to narrow the set of documents returned by a
         * Database query. `QueryConstraint`s are created by invoking {@link endAt},
         * {@link endBefore}, {@link startAt}, {@link startAfter}, {@link
         * limitToFirst}, {@link limitToLast}, {@link orderByChild},
         * {@link orderByChild}, {@link orderByKey} , {@link orderByPriority} ,
         * {@link orderByValue}  or {@link equalTo} and
         * can then be passed to {@link query} to create a new query instance that
         * also contains this `QueryConstraint`.
         */


        var QueryConstraint =
        /** @class */
        function () {
          function QueryConstraint() {}

          return QueryConstraint;
        }();

        var QueryEndAtConstraint =
        /** @class */
        function (_super) {
          Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__extends"])(QueryEndAtConstraint, _super);

          function QueryEndAtConstraint(_value, _key) {
            var _this = _super.call(this) || this;

            _this._value = _value;
            _this._key = _key;
            return _this;
          }

          QueryEndAtConstraint.prototype._apply = function (query) {
            validateFirebaseDataArg('endAt', this._value, query._path, true);
            var newParams = queryParamsEndAt(query._queryParams, this._value, this._key);
            validateLimit(newParams);
            validateQueryEndpoints(newParams);

            if (query._queryParams.hasEnd()) {
              throw new Error('endAt: Starting point was already set (by another call to endAt, ' + 'endBefore or equalTo).');
            }

            return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);
          };

          return QueryEndAtConstraint;
        }(QueryConstraint);
        /**
         * Creates a `QueryConstraint` with the specified ending point.
         *
         * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`
         * allows you to choose arbitrary starting and ending points for your queries.
         *
         * The ending point is inclusive, so children with exactly the specified value
         * will be included in the query. The optional key argument can be used to
         * further limit the range of the query. If it is specified, then children that
         * have exactly the specified value must also have a key name less than or equal
         * to the specified key.
         *
         * You can read more about `endAt()` in
         * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.
         *
         * @param value - The value to end at. The argument type depends on which
         * `orderBy*()` function was used in this query. Specify a value that matches
         * the `orderBy*()` type. When used in combination with `orderByKey()`, the
         * value must be a string.
         * @param key - The child key to end at, among the children with the previously
         * specified priority. This argument is only allowed if ordering by child,
         * value, or priority.
         */


        function endAt(value, key) {
          validateKey('endAt', 'key', key, true);
          return new QueryEndAtConstraint(value, key);
        }

        var QueryEndBeforeConstraint =
        /** @class */
        function (_super) {
          Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__extends"])(QueryEndBeforeConstraint, _super);

          function QueryEndBeforeConstraint(_value, _key) {
            var _this = _super.call(this) || this;

            _this._value = _value;
            _this._key = _key;
            return _this;
          }

          QueryEndBeforeConstraint.prototype._apply = function (query) {
            validateFirebaseDataArg('endBefore', this._value, query._path, false);
            var newParams = queryParamsEndBefore(query._queryParams, this._value, this._key);
            validateLimit(newParams);
            validateQueryEndpoints(newParams);

            if (query._queryParams.hasEnd()) {
              throw new Error('endBefore: Starting point was already set (by another call to endAt, ' + 'endBefore or equalTo).');
            }

            return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);
          };

          return QueryEndBeforeConstraint;
        }(QueryConstraint);
        /**
         * Creates a `QueryConstraint` with the specified ending point (exclusive).
         *
         * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`
         * allows you to choose arbitrary starting and ending points for your queries.
         *
         * The ending point is exclusive. If only a value is provided, children
         * with a value less than the specified value will be included in the query.
         * If a key is specified, then children must have a value lesss than or equal
         * to the specified value and a a key name less than the specified key.
         *
         * @param value - The value to end before. The argument type depends on which
         * `orderBy*()` function was used in this query. Specify a value that matches
         * the `orderBy*()` type. When used in combination with `orderByKey()`, the
         * value must be a string.
         * @param key - The child key to end before, among the children with the
         * previously specified priority. This argument is only allowed if ordering by
         * child, value, or priority.
         */


        function endBefore(value, key) {
          validateKey('endBefore', 'key', key, true);
          return new QueryEndBeforeConstraint(value, key);
        }

        var QueryStartAtConstraint =
        /** @class */
        function (_super) {
          Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__extends"])(QueryStartAtConstraint, _super);

          function QueryStartAtConstraint(_value, _key) {
            var _this = _super.call(this) || this;

            _this._value = _value;
            _this._key = _key;
            return _this;
          }

          QueryStartAtConstraint.prototype._apply = function (query) {
            validateFirebaseDataArg('startAt', this._value, query._path, true);
            var newParams = queryParamsStartAt(query._queryParams, this._value, this._key);
            validateLimit(newParams);
            validateQueryEndpoints(newParams);

            if (query._queryParams.hasStart()) {
              throw new Error('startAt: Starting point was already set (by another call to startAt, ' + 'startBefore or equalTo).');
            }

            return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);
          };

          return QueryStartAtConstraint;
        }(QueryConstraint);
        /**
         * Creates a `QueryConstraint` with the specified starting point.
         *
         * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`
         * allows you to choose arbitrary starting and ending points for your queries.
         *
         * The starting point is inclusive, so children with exactly the specified value
         * will be included in the query. The optional key argument can be used to
         * further limit the range of the query. If it is specified, then children that
         * have exactly the specified value must also have a key name greater than or
         * equal to the specified key.
         *
         * You can read more about `startAt()` in
         * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.
         *
         * @param value - The value to start at. The argument type depends on which
         * `orderBy*()` function was used in this query. Specify a value that matches
         * the `orderBy*()` type. When used in combination with `orderByKey()`, the
         * value must be a string.
         * @param key - The child key to start at. This argument is only allowed if
         * ordering by child, value, or priority.
         */


        function startAt(value, key) {
          if (value === void 0) {
            value = null;
          }

          validateKey('startAt', 'key', key, true);
          return new QueryStartAtConstraint(value, key);
        }

        var QueryStartAfterConstraint =
        /** @class */
        function (_super) {
          Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__extends"])(QueryStartAfterConstraint, _super);

          function QueryStartAfterConstraint(_value, _key) {
            var _this = _super.call(this) || this;

            _this._value = _value;
            _this._key = _key;
            return _this;
          }

          QueryStartAfterConstraint.prototype._apply = function (query) {
            validateFirebaseDataArg('startAfter', this._value, query._path, false);
            var newParams = queryParamsStartAfter(query._queryParams, this._value, this._key);
            validateLimit(newParams);
            validateQueryEndpoints(newParams);

            if (query._queryParams.hasStart()) {
              throw new Error('startAfter: Starting point was already set (by another call to startAt, ' + 'startAfter, or equalTo).');
            }

            return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);
          };

          return QueryStartAfterConstraint;
        }(QueryConstraint);
        /**
         * Creates a `QueryConstraint` with the specified starting point (exclusive).
         *
         * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`
         * allows you to choose arbitrary starting and ending points for your queries.
         *
         * The starting point is exclusive. If only a value is provided, children
         * with a value greater than the specified value will be included in the query.
         * If a key is specified, then children must have a value greater than or equal
         * to the specified value and a a key name greater than the specified key.
         *
         * @param value - The value to start after. The argument type depends on which
         * `orderBy*()` function was used in this query. Specify a value that matches
         * the `orderBy*()` type. When used in combination with `orderByKey()`, the
         * value must be a string.
         * @param key - The child key to start after. This argument is only allowed if
         * ordering by child, value, or priority.
         */


        function startAfter(value, key) {
          validateKey('startAfter', 'key', key, true);
          return new QueryStartAfterConstraint(value, key);
        }

        var QueryLimitToFirstConstraint =
        /** @class */
        function (_super) {
          Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__extends"])(QueryLimitToFirstConstraint, _super);

          function QueryLimitToFirstConstraint(_limit) {
            var _this = _super.call(this) || this;

            _this._limit = _limit;
            return _this;
          }

          QueryLimitToFirstConstraint.prototype._apply = function (query) {
            if (query._queryParams.hasLimit()) {
              throw new Error('limitToFirst: Limit was already set (by another call to limitToFirst ' + 'or limitToLast).');
            }

            return new QueryImpl(query._repo, query._path, queryParamsLimitToFirst(query._queryParams, this._limit), query._orderByCalled);
          };

          return QueryLimitToFirstConstraint;
        }(QueryConstraint);
        /**
         * Creates a new `QueryConstraint` that if limited to the first specific number
         * of children.
         *
         * The `limitToFirst()` method is used to set a maximum number of children to be
         * synced for a given callback. If we set a limit of 100, we will initially only
         * receive up to 100 `child_added` events. If we have fewer than 100 messages
         * stored in our Database, a `child_added` event will fire for each message.
         * However, if we have over 100 messages, we will only receive a `child_added`
         * event for the first 100 ordered messages. As items change, we will receive
         * `child_removed` events for each item that drops out of the active list so
         * that the total number stays at 100.
         *
         * You can read more about `limitToFirst()` in
         * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.
         *
         * @param limit - The maximum number of nodes to include in this query.
         */


        function limitToFirst(limit) {
          if (typeof limit !== 'number' || Math.floor(limit) !== limit || limit <= 0) {
            throw new Error('limitToFirst: First argument must be a positive integer.');
          }

          return new QueryLimitToFirstConstraint(limit);
        }

        var QueryLimitToLastConstraint =
        /** @class */
        function (_super) {
          Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__extends"])(QueryLimitToLastConstraint, _super);

          function QueryLimitToLastConstraint(_limit) {
            var _this = _super.call(this) || this;

            _this._limit = _limit;
            return _this;
          }

          QueryLimitToLastConstraint.prototype._apply = function (query) {
            if (query._queryParams.hasLimit()) {
              throw new Error('limitToLast: Limit was already set (by another call to limitToFirst ' + 'or limitToLast).');
            }

            return new QueryImpl(query._repo, query._path, queryParamsLimitToLast(query._queryParams, this._limit), query._orderByCalled);
          };

          return QueryLimitToLastConstraint;
        }(QueryConstraint);
        /**
         * Creates a new `QueryConstraint` that is limited to return only the last
         * specified number of children.
         *
         * The `limitToLast()` method is used to set a maximum number of children to be
         * synced for a given callback. If we set a limit of 100, we will initially only
         * receive up to 100 `child_added` events. If we have fewer than 100 messages
         * stored in our Database, a `child_added` event will fire for each message.
         * However, if we have over 100 messages, we will only receive a `child_added`
         * event for the last 100 ordered messages. As items change, we will receive
         * `child_removed` events for each item that drops out of the active list so
         * that the total number stays at 100.
         *
         * You can read more about `limitToLast()` in
         * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.
         *
         * @param limit - The maximum number of nodes to include in this query.
         */


        function limitToLast(limit) {
          if (typeof limit !== 'number' || Math.floor(limit) !== limit || limit <= 0) {
            throw new Error('limitToLast: First argument must be a positive integer.');
          }

          return new QueryLimitToLastConstraint(limit);
        }

        var QueryOrderByChildConstraint =
        /** @class */
        function (_super) {
          Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__extends"])(QueryOrderByChildConstraint, _super);

          function QueryOrderByChildConstraint(_path) {
            var _this = _super.call(this) || this;

            _this._path = _path;
            return _this;
          }

          QueryOrderByChildConstraint.prototype._apply = function (query) {
            validateNoPreviousOrderByCall(query, 'orderByChild');
            var parsedPath = new Path(this._path);

            if (pathIsEmpty(parsedPath)) {
              throw new Error('orderByChild: cannot pass in empty path. Use orderByValue() instead.');
            }

            var index = new PathIndex(parsedPath);
            var newParams = queryParamsOrderBy(query._queryParams, index);
            validateQueryEndpoints(newParams);
            return new QueryImpl(query._repo, query._path, newParams,
            /*orderByCalled=*/
            true);
          };

          return QueryOrderByChildConstraint;
        }(QueryConstraint);
        /**
         * Creates a new `QueryConstraint` that orders by the specified child key.
         *
         * Queries can only order by one key at a time. Calling `orderByChild()`
         * multiple times on the same query is an error.
         *
         * Firebase queries allow you to order your data by any child key on the fly.
         * However, if you know in advance what your indexes will be, you can define
         * them via the .indexOn rule in your Security Rules for better performance. See
         * the{@link https://firebase.google.com/docs/database/security/indexing-data}
         * rule for more information.
         *
         * You can read more about `orderByChild()` in
         * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.
         *
         * @param path - The path to order by.
         */


        function orderByChild(path) {
          if (path === '$key') {
            throw new Error('orderByChild: "$key" is invalid.  Use orderByKey() instead.');
          } else if (path === '$priority') {
            throw new Error('orderByChild: "$priority" is invalid.  Use orderByPriority() instead.');
          } else if (path === '$value') {
            throw new Error('orderByChild: "$value" is invalid.  Use orderByValue() instead.');
          }

          validatePathString('orderByChild', 'path', path, false);
          return new QueryOrderByChildConstraint(path);
        }

        var QueryOrderByKeyConstraint =
        /** @class */
        function (_super) {
          Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__extends"])(QueryOrderByKeyConstraint, _super);

          function QueryOrderByKeyConstraint() {
            return _super !== null && _super.apply(this, arguments) || this;
          }

          QueryOrderByKeyConstraint.prototype._apply = function (query) {
            validateNoPreviousOrderByCall(query, 'orderByKey');
            var newParams = queryParamsOrderBy(query._queryParams, KEY_INDEX);
            validateQueryEndpoints(newParams);
            return new QueryImpl(query._repo, query._path, newParams,
            /*orderByCalled=*/
            true);
          };

          return QueryOrderByKeyConstraint;
        }(QueryConstraint);
        /**
         * Creates a new `QueryConstraint` that orders by the key.
         *
         * Sorts the results of a query by their (ascending) key values.
         *
         * You can read more about `orderByKey()` in
         * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.
         */


        function orderByKey() {
          return new QueryOrderByKeyConstraint();
        }

        var QueryOrderByPriorityConstraint =
        /** @class */
        function (_super) {
          Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__extends"])(QueryOrderByPriorityConstraint, _super);

          function QueryOrderByPriorityConstraint() {
            return _super !== null && _super.apply(this, arguments) || this;
          }

          QueryOrderByPriorityConstraint.prototype._apply = function (query) {
            validateNoPreviousOrderByCall(query, 'orderByPriority');
            var newParams = queryParamsOrderBy(query._queryParams, PRIORITY_INDEX);
            validateQueryEndpoints(newParams);
            return new QueryImpl(query._repo, query._path, newParams,
            /*orderByCalled=*/
            true);
          };

          return QueryOrderByPriorityConstraint;
        }(QueryConstraint);
        /**
         * Creates a new `QueryConstraint` that orders by priority.
         *
         * Applications need not use priority but can order collections by
         * ordinary properties (see
         * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}
         * for alternatives to priority.
         */


        function orderByPriority() {
          return new QueryOrderByPriorityConstraint();
        }

        var QueryOrderByValueConstraint =
        /** @class */
        function (_super) {
          Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__extends"])(QueryOrderByValueConstraint, _super);

          function QueryOrderByValueConstraint() {
            return _super !== null && _super.apply(this, arguments) || this;
          }

          QueryOrderByValueConstraint.prototype._apply = function (query) {
            validateNoPreviousOrderByCall(query, 'orderByValue');
            var newParams = queryParamsOrderBy(query._queryParams, VALUE_INDEX);
            validateQueryEndpoints(newParams);
            return new QueryImpl(query._repo, query._path, newParams,
            /*orderByCalled=*/
            true);
          };

          return QueryOrderByValueConstraint;
        }(QueryConstraint);
        /**
         * Creates a new `QueryConstraint` that orders by value.
         *
         * If the children of a query are all scalar values (string, number, or
         * boolean), you can order the results by their (ascending) values.
         *
         * You can read more about `orderByValue()` in
         * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.
         */


        function orderByValue() {
          return new QueryOrderByValueConstraint();
        }

        var QueryEqualToValueConstraint =
        /** @class */
        function (_super) {
          Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__extends"])(QueryEqualToValueConstraint, _super);

          function QueryEqualToValueConstraint(_value, _key) {
            var _this = _super.call(this) || this;

            _this._value = _value;
            _this._key = _key;
            return _this;
          }

          QueryEqualToValueConstraint.prototype._apply = function (query) {
            validateFirebaseDataArg('equalTo', this._value, query._path, false);

            if (query._queryParams.hasStart()) {
              throw new Error('equalTo: Starting point was already set (by another call to startAt/startAfter or ' + 'equalTo).');
            }

            if (query._queryParams.hasEnd()) {
              throw new Error('equalTo: Ending point was already set (by another call to endAt/endBefore or ' + 'equalTo).');
            }

            return new QueryEndAtConstraint(this._value, this._key)._apply(new QueryStartAtConstraint(this._value, this._key)._apply(query));
          };

          return QueryEqualToValueConstraint;
        }(QueryConstraint);
        /**
         * Creates a `QueryConstraint` that includes children that match the specified
         * value.
         *
         * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`
         * allows you to choose arbitrary starting and ending points for your queries.
         *
         * The optional key argument can be used to further limit the range of the
         * query. If it is specified, then children that have exactly the specified
         * value must also have exactly the specified key as their key name. This can be
         * used to filter result sets with many matches for the same value.
         *
         * You can read more about `equalTo()` in
         * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.
         *
         * @param value - The value to match for. The argument type depends on which
         * `orderBy*()` function was used in this query. Specify a value that matches
         * the `orderBy*()` type. When used in combination with `orderByKey()`, the
         * value must be a string.
         * @param key - The child key to start at, among the children with the
         * previously specified priority. This argument is only allowed if ordering by
         * child, value, or priority.
         */


        function equalTo(value, key) {
          validateKey('equalTo', 'key', key, true);
          return new QueryEqualToValueConstraint(value, key);
        }
        /**
         * Creates a new immutable instance of `Query` that is extended to also include
         * additional query constraints.
         *
         * @param query - The Query instance to use as a base for the new constraints.
         * @param queryConstraints - The list of `QueryConstraint`s to apply.
         * @throws if any of the provided query constraints cannot be combined with the
         * existing or new constraints.
         */


        function query(query) {
          var e_1, _a;

          var queryConstraints = [];

          for (var _i = 1; _i < arguments.length; _i++) {
            queryConstraints[_i - 1] = arguments[_i];
          }

          var queryImpl = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["getModularInstance"])(query);

          try {
            for (var queryConstraints_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__values"])(queryConstraints), queryConstraints_1_1 = queryConstraints_1.next(); !queryConstraints_1_1.done; queryConstraints_1_1 = queryConstraints_1.next()) {
              var constraint = queryConstraints_1_1.value;
              queryImpl = constraint._apply(queryImpl);
            }
          } catch (e_1_1) {
            e_1 = {
              error: e_1_1
            };
          } finally {
            try {
              if (queryConstraints_1_1 && !queryConstraints_1_1.done && (_a = queryConstraints_1["return"])) _a.call(queryConstraints_1);
            } finally {
              if (e_1) throw e_1.error;
            }
          }

          return queryImpl;
        }
        /**
         * Define reference constructor in various modules
         *
         * We are doing this here to avoid several circular
         * dependency issues
         */


        syncPointSetReferenceConstructor(ReferenceImpl);
        syncTreeSetReferenceConstructor(ReferenceImpl);
        /**
         * @license
         * Copyright 2020 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * This variable is also defined in the firebase node.js admin SDK. Before
         * modifying this definition, consult the definition in:
         *
         * https://github.com/firebase/firebase-admin-node
         *
         * and make sure the two are consistent.
         */

        var FIREBASE_DATABASE_EMULATOR_HOST_VAR = 'FIREBASE_DATABASE_EMULATOR_HOST';
        /**
         * Creates and caches Repo instances.
         */

        var repos = {};
        /**
         * If true, new Repos will be created to use ReadonlyRestClient (for testing purposes).
         */

        var useRestClient = false;
        /**
         * Update an existing repo in place to point to a new host/port.
         */

        function repoManagerApplyEmulatorSettings(repo, host, port, tokenProvider) {
          repo.repoInfo_ = new RepoInfo(host + ":" + port,
          /* secure= */
          false, repo.repoInfo_.namespace, repo.repoInfo_.webSocketOnly, repo.repoInfo_.nodeAdmin, repo.repoInfo_.persistenceKey, repo.repoInfo_.includeNamespaceInQueryParams);

          if (tokenProvider) {
            repo.authTokenProvider_ = tokenProvider;
          }
        }
        /**
         * This function should only ever be called to CREATE a new database instance.
         * @internal
         */


        function repoManagerDatabaseFromApp(app, authProvider, appCheckProvider, url, nodeAdmin) {
          var dbUrl = url || app.options.databaseURL;

          if (dbUrl === undefined) {
            if (!app.options.projectId) {
              fatal("Can't determine Firebase Database URL. Be sure to include " + ' a Project ID when calling firebase.initializeApp().');
            }

            log('Using default host for project ', app.options.projectId);
            dbUrl = app.options.projectId + "-default-rtdb.firebaseio.com";
          }

          var parsedUrl = parseRepoInfo(dbUrl, nodeAdmin);
          var repoInfo = parsedUrl.repoInfo;
          var isEmulator;
          var dbEmulatorHost = undefined;

          if (typeof process !== 'undefined') {
            dbEmulatorHost = process.env[FIREBASE_DATABASE_EMULATOR_HOST_VAR];
          }

          if (dbEmulatorHost) {
            isEmulator = true;
            dbUrl = "http://" + dbEmulatorHost + "?ns=" + repoInfo.namespace;
            parsedUrl = parseRepoInfo(dbUrl, nodeAdmin);
            repoInfo = parsedUrl.repoInfo;
          } else {
            isEmulator = !parsedUrl.repoInfo.secure;
          }

          var authTokenProvider = nodeAdmin && isEmulator ? new EmulatorTokenProvider(EmulatorTokenProvider.OWNER) : new FirebaseAuthTokenProvider(app.name, app.options, authProvider);
          validateUrl('Invalid Firebase Database URL', parsedUrl);

          if (!pathIsEmpty(parsedUrl.path)) {
            fatal('Database URL must point to the root of a Firebase Database ' + '(not including a child path).');
          }

          var repo = repoManagerCreateRepo(repoInfo, app, authTokenProvider, new AppCheckTokenProvider(app.name, appCheckProvider));
          return new FirebaseDatabase(repo, app);
        }
        /**
         * Remove the repo and make sure it is disconnected.
         *
         */


        function repoManagerDeleteRepo(repo, appName) {
          var appRepos = repos[appName]; // This should never happen...

          if (!appRepos || appRepos[repo.key] !== repo) {
            fatal("Database " + appName + "(" + repo.repoInfo_ + ") has already been deleted.");
          }

          repoInterrupt(repo);
          delete appRepos[repo.key];
        }
        /**
         * Ensures a repo doesn't already exist and then creates one using the
         * provided app.
         *
         * @param repoInfo - The metadata about the Repo
         * @returns The Repo object for the specified server / repoName.
         */


        function repoManagerCreateRepo(repoInfo, app, authTokenProvider, appCheckProvider) {
          var appRepos = repos[app.name];

          if (!appRepos) {
            appRepos = {};
            repos[app.name] = appRepos;
          }

          var repo = appRepos[repoInfo.toURLString()];

          if (repo) {
            fatal('Database initialized multiple times. Please make sure the format of the database URL matches with each database() call.');
          }

          repo = new Repo(repoInfo, useRestClient, authTokenProvider, appCheckProvider);
          appRepos[repoInfo.toURLString()] = repo;
          return repo;
        }
        /**
         * Forces us to use ReadonlyRestClient instead of PersistentConnection for new Repos.
         */


        function repoManagerForceRestClient(forceRestClient) {
          useRestClient = forceRestClient;
        }
        /**
         * Class representing a Firebase Realtime Database.
         */


        var FirebaseDatabase =
        /** @class */
        function () {
          /** @hideconstructor */
          function FirebaseDatabase(_repoInternal,
          /** The FirebaseApp associated with this Realtime Database instance. */
          app) {
            this._repoInternal = _repoInternal;
            this.app = app;
            /** Represents a database instance. */

            this['type'] = 'database';
            /** Track if the instance has been used (root or repo accessed) */

            this._instanceStarted = false;
          }

          Object.defineProperty(FirebaseDatabase.prototype, "_repo", {
            get: function get() {
              if (!this._instanceStarted) {
                repoStart(this._repoInternal, this.app.options.appId, this.app.options['databaseAuthVariableOverride']);
                this._instanceStarted = true;
              }

              return this._repoInternal;
            },
            enumerable: false,
            configurable: true
          });
          Object.defineProperty(FirebaseDatabase.prototype, "_root", {
            get: function get() {
              if (!this._rootInternal) {
                this._rootInternal = new ReferenceImpl(this._repo, newEmptyPath());
              }

              return this._rootInternal;
            },
            enumerable: false,
            configurable: true
          });

          FirebaseDatabase.prototype._delete = function () {
            this._checkNotDeleted('delete');

            repoManagerDeleteRepo(this._repo, this.app.name);
            this._repoInternal = null;
            this._rootInternal = null;
            return Promise.resolve();
          };

          FirebaseDatabase.prototype._checkNotDeleted = function (apiName) {
            if (this._rootInternal === null) {
              fatal('Cannot call ' + apiName + ' on a deleted database.');
            }
          };

          return FirebaseDatabase;
        }();
        /**
         * Modify the provided instance to communicate with the Realtime Database
         * emulator.
         *
         * <p>Note: This method must be called before performing any other operation.
         *
         * @param db - The instance to modify.
         * @param host - The emulator host (ex: localhost)
         * @param port - The emulator port (ex: 8080)
         * @param options.mockUserToken - the mock auth token to use for unit testing Security Rules
         */


        function useDatabaseEmulator(db, host, port, options) {
          if (options === void 0) {
            options = {};
          }

          db = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["getModularInstance"])(db);

          db._checkNotDeleted('useEmulator');

          if (db._instanceStarted) {
            fatal('Cannot call useEmulator() after instance has already been initialized.');
          }

          var repo = db._repoInternal;
          var tokenProvider = undefined;

          if (repo.repoInfo_.nodeAdmin) {
            if (options.mockUserToken) {
              fatal('mockUserToken is not supported by the Admin SDK. For client access with mock users, please use the "firebase" package instead of "firebase-admin".');
            }

            tokenProvider = new EmulatorTokenProvider(EmulatorTokenProvider.OWNER);
          } else if (options.mockUserToken) {
            var token = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["createMockUserToken"])(options.mockUserToken, db.app.options.projectId);
            tokenProvider = new EmulatorTokenProvider(token);
          } // Modify the repo to apply emulator settings


          repoManagerApplyEmulatorSettings(repo, host, port, tokenProvider);
        }
        /**
         * Disconnects from the server (all Database operations will be completed
         * offline).
         *
         * The client automatically maintains a persistent connection to the Database
         * server, which will remain active indefinitely and reconnect when
         * disconnected. However, the `goOffline()` and `goOnline()` methods may be used
         * to control the client connection in cases where a persistent connection is
         * undesirable.
         *
         * While offline, the client will no longer receive data updates from the
         * Database. However, all Database operations performed locally will continue to
         * immediately fire events, allowing your application to continue behaving
         * normally. Additionally, each operation performed locally will automatically
         * be queued and retried upon reconnection to the Database server.
         *
         * To reconnect to the Database and begin receiving remote events, see
         * `goOnline()`.
         *
         * @param db - The instance to disconnect.
         */


        function goOffline(db) {
          db = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["getModularInstance"])(db);

          db._checkNotDeleted('goOffline');

          repoInterrupt(db._repo);
        }
        /**
         * Reconnects to the server and synchronizes the offline Database state
         * with the server state.
         *
         * This method should be used after disabling the active connection with
         * `goOffline()`. Once reconnected, the client will transmit the proper data
         * and fire the appropriate events so that your client "catches up"
         * automatically.
         *
         * @param db - The instance to reconnect.
         */


        function goOnline(db) {
          db = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["getModularInstance"])(db);

          db._checkNotDeleted('goOnline');

          repoResume(db._repo);
        }
        /**
         * @license
         * Copyright 2020 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var SERVER_TIMESTAMP = {
          '.sv': 'timestamp'
        };
        /**
         * Returns a placeholder value for auto-populating the current timestamp (time
         * since the Unix epoch, in milliseconds) as determined by the Firebase
         * servers.
         */

        function serverTimestamp() {
          return SERVER_TIMESTAMP;
        }
        /**
         * Returns a placeholder value that can be used to atomically increment the
         * current database value by the provided delta.
         *
         * @param delta - the amount to modify the current value atomically.
         * @returns A placeholder value for modifying data atomically server-side.
         */


        function _increment2(delta) {
          return {
            '.sv': {
              'increment': delta
            }
          };
        }
        /**
         * @license
         * Copyright 2020 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * A type for the resolve value of Firebase.transaction.
         */


        var TransactionResult =
        /** @class */
        function () {
          /** @hideconstructor */
          function TransactionResult(
          /** Whether the transaction was successfully committed. */
          committed,
          /** The resulting data snapshot. */
          snapshot) {
            this.committed = committed;
            this.snapshot = snapshot;
          }
          /** Returns a JSON-serializable representation of this object. */


          TransactionResult.prototype.toJSON = function () {
            return {
              committed: this.committed,
              snapshot: this.snapshot.toJSON()
            };
          };

          return TransactionResult;
        }();
        /**
         * Atomically modifies the data at this location.
         *
         * Atomically modify the data at this location. Unlike a normal `set()`, which
         * just overwrites the data regardless of its previous value, `transaction()` is
         * used to modify the existing value to a new value, ensuring there are no
         * conflicts with other clients writing to the same location at the same time.
         *
         * To accomplish this, you pass `runTransaction()` an update function which is
         * used to transform the current value into a new value. If another client
         * writes to the location before your new value is successfully written, your
         * update function will be called again with the new current value, and the
         * write will be retried. This will happen repeatedly until your write succeeds
         * without conflict or you abort the transaction by not returning a value from
         * your update function.
         *
         * Note: Modifying data with `set()` will cancel any pending transactions at
         * that location, so extreme care should be taken if mixing `set()` and
         * `transaction()` to update the same data.
         *
         * Note: When using transactions with Security and Firebase Rules in place, be
         * aware that a client needs `.read` access in addition to `.write` access in
         * order to perform a transaction. This is because the client-side nature of
         * transactions requires the client to read the data in order to transactionally
         * update it.
         *
         * @param ref - The location to atomically modify.
         * @param transactionUpdate - A developer-supplied function which will be passed
         * the current data stored at this location (as a JavaScript object). The
         * function should return the new value it would like written (as a JavaScript
         * object). If `undefined` is returned (i.e. you return with no arguments) the
         * transaction will be aborted and the data at this location will not be
         * modified.
         * @param options - An options object to configure transactions.
         * @returns A Promise that can optionally be used instead of the onComplete
         * callback to handle success and failure.
         */


        function runTransaction(ref, // eslint-disable-next-line @typescript-eslint/no-explicit-any
        transactionUpdate, options) {
          var _a;

          ref = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["getModularInstance"])(ref);
          validateWritablePath('Reference.transaction', ref._path);

          if (ref.key === '.length' || ref.key === '.keys') {
            throw 'Reference.transaction failed: ' + ref.key + ' is a read-only object.';
          }

          var applyLocally = (_a = options === null || options === void 0 ? void 0 : options.applyLocally) !== null && _a !== void 0 ? _a : true;
          var deferred = new _firebase_util__WEBPACK_IMPORTED_MODULE_2__["Deferred"]();

          var promiseComplete = function promiseComplete(error, committed, node) {
            var dataSnapshot = null;

            if (error) {
              deferred.reject(error);
            } else {
              dataSnapshot = new DataSnapshot(node, new ReferenceImpl(ref._repo, ref._path), PRIORITY_INDEX);
              deferred.resolve(new TransactionResult(committed, dataSnapshot));
            }
          }; // Add a watch to make sure we get server updates.


          var unwatcher = onValue(ref, function () {});
          repoStartTransaction(ref._repo, ref._path, transactionUpdate, promiseComplete, unwatcher, applyLocally);
          return deferred.promise;
        }
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var OnDisconnect$1 =
        /** @class */
        function () {
          function OnDisconnect(_delegate) {
            this._delegate = _delegate;
          }

          OnDisconnect.prototype.cancel = function (onComplete) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('OnDisconnect.cancel', 0, 1, arguments.length);
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateCallback"])('OnDisconnect.cancel', 'onComplete', onComplete, true);

            var result = this._delegate.cancel();

            if (onComplete) {
              result.then(function () {
                return onComplete(null);
              }, function (error) {
                return onComplete(error);
              });
            }

            return result;
          };

          OnDisconnect.prototype.remove = function (onComplete) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('OnDisconnect.remove', 0, 1, arguments.length);
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateCallback"])('OnDisconnect.remove', 'onComplete', onComplete, true);

            var result = this._delegate.remove();

            if (onComplete) {
              result.then(function () {
                return onComplete(null);
              }, function (error) {
                return onComplete(error);
              });
            }

            return result;
          };

          OnDisconnect.prototype.set = function (value, onComplete) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('OnDisconnect.set', 1, 2, arguments.length);
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateCallback"])('OnDisconnect.set', 'onComplete', onComplete, true);

            var result = this._delegate.set(value);

            if (onComplete) {
              result.then(function () {
                return onComplete(null);
              }, function (error) {
                return onComplete(error);
              });
            }

            return result;
          };

          OnDisconnect.prototype.setWithPriority = function (value, priority, onComplete) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('OnDisconnect.setWithPriority', 2, 3, arguments.length);
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateCallback"])('OnDisconnect.setWithPriority', 'onComplete', onComplete, true);

            var result = this._delegate.setWithPriority(value, priority);

            if (onComplete) {
              result.then(function () {
                return onComplete(null);
              }, function (error) {
                return onComplete(error);
              });
            }

            return result;
          };

          OnDisconnect.prototype.update = function (objectToMerge, onComplete) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('OnDisconnect.update', 1, 2, arguments.length);

            if (Array.isArray(objectToMerge)) {
              var newObjectToMerge = {};

              for (var i = 0; i < objectToMerge.length; ++i) {
                newObjectToMerge['' + i] = objectToMerge[i];
              }

              objectToMerge = newObjectToMerge;
              warn('Passing an Array to firebase.database.onDisconnect().update() is deprecated. Use set() if you want to overwrite the ' + 'existing data, or an Object with integer keys if you really do want to only update some of the children.');
            }

            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateCallback"])('OnDisconnect.update', 'onComplete', onComplete, true);

            var result = this._delegate.update(objectToMerge);

            if (onComplete) {
              result.then(function () {
                return onComplete(null);
              }, function (error) {
                return onComplete(error);
              });
            }

            return result;
          };

          return OnDisconnect;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */


        var TransactionResult$1 =
        /** @class */
        function () {
          /**
           * A type for the resolve value of Firebase.transaction.
           */
          function TransactionResult(committed, snapshot) {
            this.committed = committed;
            this.snapshot = snapshot;
          } // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary
          // for end-users


          TransactionResult.prototype.toJSON = function () {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('TransactionResult.toJSON', 0, 1, arguments.length);
            return {
              committed: this.committed,
              snapshot: this.snapshot.toJSON()
            };
          };

          return TransactionResult;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /* eslint-enable @typescript-eslint/no-explicit-any */

        /**
         * Class representing a firebase data snapshot.  It wraps a SnapshotNode and
         * surfaces the public methods (val, forEach, etc.) we want to expose.
         */


        var DataSnapshot$1 =
        /** @class */
        function () {
          function DataSnapshot(_database, _delegate) {
            this._database = _database;
            this._delegate = _delegate;
          }
          /**
           * Retrieves the snapshot contents as JSON.  Returns null if the snapshot is
           * empty.
           *
           * @returns JSON representation of the DataSnapshot contents, or null if empty.
           */


          DataSnapshot.prototype.val = function () {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('DataSnapshot.val', 0, 0, arguments.length);
            return this._delegate.val();
          };
          /**
           * Returns the snapshot contents as JSON, including priorities of node.  Suitable for exporting
           * the entire node contents.
           * @returns JSON representation of the DataSnapshot contents, or null if empty.
           */


          DataSnapshot.prototype.exportVal = function () {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('DataSnapshot.exportVal', 0, 0, arguments.length);
            return this._delegate.exportVal();
          }; // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary
          // for end-users


          DataSnapshot.prototype.toJSON = function () {
            // Optional spacer argument is unnecessary because we're depending on recursion rather than stringifying the content
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('DataSnapshot.toJSON', 0, 1, arguments.length);
            return this._delegate.toJSON();
          };
          /**
           * Returns whether the snapshot contains a non-null value.
           *
           * @returns Whether the snapshot contains a non-null value, or is empty.
           */


          DataSnapshot.prototype.exists = function () {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('DataSnapshot.exists', 0, 0, arguments.length);
            return this._delegate.exists();
          };
          /**
           * Returns a DataSnapshot of the specified child node's contents.
           *
           * @param path - Path to a child.
           * @returns DataSnapshot for child node.
           */


          DataSnapshot.prototype.child = function (path) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('DataSnapshot.child', 0, 1, arguments.length); // Ensure the childPath is a string (can be a number)

            path = String(path);
            validatePathString('DataSnapshot.child', 'path', path, false);
            return new DataSnapshot(this._database, this._delegate.child(path));
          };
          /**
           * Returns whether the snapshot contains a child at the specified path.
           *
           * @param path - Path to a child.
           * @returns Whether the child exists.
           */


          DataSnapshot.prototype.hasChild = function (path) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('DataSnapshot.hasChild', 1, 1, arguments.length);
            validatePathString('DataSnapshot.hasChild', 'path', path, false);
            return this._delegate.hasChild(path);
          };
          /**
           * Returns the priority of the object, or null if no priority was set.
           *
           * @returns The priority.
           */


          DataSnapshot.prototype.getPriority = function () {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('DataSnapshot.getPriority', 0, 0, arguments.length);
            return this._delegate.priority;
          };
          /**
           * Iterates through child nodes and calls the specified action for each one.
           *
           * @param action - Callback function to be called
           * for each child.
           * @returns True if forEach was canceled by action returning true for
           * one of the child nodes.
           */


          DataSnapshot.prototype.forEach = function (action) {
            var _this = this;

            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('DataSnapshot.forEach', 1, 1, arguments.length);
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateCallback"])('DataSnapshot.forEach', 'action', action, false);
            return this._delegate.forEach(function (expDataSnapshot) {
              return action(new DataSnapshot(_this._database, expDataSnapshot));
            });
          };
          /**
           * Returns whether this DataSnapshot has children.
           * @returns True if the DataSnapshot contains 1 or more child nodes.
           */


          DataSnapshot.prototype.hasChildren = function () {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('DataSnapshot.hasChildren', 0, 0, arguments.length);
            return this._delegate.hasChildren();
          };

          Object.defineProperty(DataSnapshot.prototype, "key", {
            get: function get() {
              return this._delegate.key;
            },
            enumerable: false,
            configurable: true
          });
          /**
           * Returns the number of children for this DataSnapshot.
           * @returns The number of children that this DataSnapshot contains.
           */

          DataSnapshot.prototype.numChildren = function () {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('DataSnapshot.numChildren', 0, 0, arguments.length);
            return this._delegate.size;
          };
          /**
           * @returns The Firebase reference for the location this snapshot's data came
           * from.
           */


          DataSnapshot.prototype.getRef = function () {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('DataSnapshot.ref', 0, 0, arguments.length);
            return new Reference(this._database, this._delegate.ref);
          };

          Object.defineProperty(DataSnapshot.prototype, "ref", {
            get: function get() {
              return this.getRef();
            },
            enumerable: false,
            configurable: true
          });
          return DataSnapshot;
        }();
        /**
         * A Query represents a filter to be applied to a firebase location.  This object purely represents the
         * query expression (and exposes our public API to build the query).  The actual query logic is in ViewBase.js.
         *
         * Since every Firebase reference is a query, Firebase inherits from this object.
         */


        var Query =
        /** @class */
        function () {
          function Query(database, _delegate) {
            this.database = database;
            this._delegate = _delegate;
          }

          Query.prototype.on = function (eventType, callback, cancelCallbackOrContext, context) {
            var _this = this;

            var _a;

            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Query.on', 2, 4, arguments.length);
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateCallback"])('Query.on', 'callback', callback, false);
            var ret = Query.getCancelAndContextArgs_('Query.on', cancelCallbackOrContext, context);

            var valueCallback = function valueCallback(expSnapshot, previousChildName) {
              callback.call(ret.context, new DataSnapshot$1(_this.database, expSnapshot), previousChildName);
            };

            valueCallback.userCallback = callback;
            valueCallback.context = ret.context;
            var cancelCallback = (_a = ret.cancel) === null || _a === void 0 ? void 0 : _a.bind(ret.context);

            switch (eventType) {
              case 'value':
                onValue(this._delegate, valueCallback, cancelCallback);
                return callback;

              case 'child_added':
                onChildAdded(this._delegate, valueCallback, cancelCallback);
                return callback;

              case 'child_removed':
                onChildRemoved(this._delegate, valueCallback, cancelCallback);
                return callback;

              case 'child_changed':
                onChildChanged(this._delegate, valueCallback, cancelCallback);
                return callback;

              case 'child_moved':
                onChildMoved(this._delegate, valueCallback, cancelCallback);
                return callback;

              default:
                throw new Error(Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["errorPrefix"])('Query.on', 'eventType') + 'must be a valid event type = "value", "child_added", "child_removed", ' + '"child_changed", or "child_moved".');
            }
          };

          Query.prototype.off = function (eventType, callback, context) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Query.off', 0, 3, arguments.length);
            validateEventType('Query.off', eventType, true);
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateCallback"])('Query.off', 'callback', callback, true);
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateContextObject"])('Query.off', 'context', context, true);

            if (callback) {
              var valueCallback = function valueCallback() {};

              valueCallback.userCallback = callback;
              valueCallback.context = context;
              off(this._delegate, eventType, valueCallback);
            } else {
              off(this._delegate, eventType);
            }
          };
          /**
           * Get the server-value for this query, or return a cached value if not connected.
           */


          Query.prototype.get = function () {
            var _this = this;

            return get(this._delegate).then(function (expSnapshot) {
              return new DataSnapshot$1(_this.database, expSnapshot);
            });
          };
          /**
           * Attaches a listener, waits for the first event, and then removes the listener
           */


          Query.prototype.once = function (eventType, callback, failureCallbackOrContext, context) {
            var _this = this;

            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Query.once', 1, 4, arguments.length);
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateCallback"])('Query.once', 'callback', callback, true);
            var ret = Query.getCancelAndContextArgs_('Query.once', failureCallbackOrContext, context);
            var deferred = new _firebase_util__WEBPACK_IMPORTED_MODULE_2__["Deferred"]();

            var valueCallback = function valueCallback(expSnapshot, previousChildName) {
              var result = new DataSnapshot$1(_this.database, expSnapshot);

              if (callback) {
                callback.call(ret.context, result, previousChildName);
              }

              deferred.resolve(result);
            };

            valueCallback.userCallback = callback;
            valueCallback.context = ret.context;

            var cancelCallback = function cancelCallback(error) {
              if (ret.cancel) {
                ret.cancel.call(ret.context, error);
              }

              deferred.reject(error);
            };

            switch (eventType) {
              case 'value':
                onValue(this._delegate, valueCallback, cancelCallback, {
                  onlyOnce: true
                });
                break;

              case 'child_added':
                onChildAdded(this._delegate, valueCallback, cancelCallback, {
                  onlyOnce: true
                });
                break;

              case 'child_removed':
                onChildRemoved(this._delegate, valueCallback, cancelCallback, {
                  onlyOnce: true
                });
                break;

              case 'child_changed':
                onChildChanged(this._delegate, valueCallback, cancelCallback, {
                  onlyOnce: true
                });
                break;

              case 'child_moved':
                onChildMoved(this._delegate, valueCallback, cancelCallback, {
                  onlyOnce: true
                });
                break;

              default:
                throw new Error(Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["errorPrefix"])('Query.once', 'eventType') + 'must be a valid event type = "value", "child_added", "child_removed", ' + '"child_changed", or "child_moved".');
            }

            return deferred.promise;
          };
          /**
           * Set a limit and anchor it to the start of the window.
           */


          Query.prototype.limitToFirst = function (limit) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Query.limitToFirst', 1, 1, arguments.length);
            return new Query(this.database, query(this._delegate, limitToFirst(limit)));
          };
          /**
           * Set a limit and anchor it to the end of the window.
           */


          Query.prototype.limitToLast = function (limit) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Query.limitToLast', 1, 1, arguments.length);
            return new Query(this.database, query(this._delegate, limitToLast(limit)));
          };
          /**
           * Given a child path, return a new query ordered by the specified grandchild path.
           */


          Query.prototype.orderByChild = function (path) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Query.orderByChild', 1, 1, arguments.length);
            return new Query(this.database, query(this._delegate, orderByChild(path)));
          };
          /**
           * Return a new query ordered by the KeyIndex
           */


          Query.prototype.orderByKey = function () {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Query.orderByKey', 0, 0, arguments.length);
            return new Query(this.database, query(this._delegate, orderByKey()));
          };
          /**
           * Return a new query ordered by the PriorityIndex
           */


          Query.prototype.orderByPriority = function () {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Query.orderByPriority', 0, 0, arguments.length);
            return new Query(this.database, query(this._delegate, orderByPriority()));
          };
          /**
           * Return a new query ordered by the ValueIndex
           */


          Query.prototype.orderByValue = function () {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Query.orderByValue', 0, 0, arguments.length);
            return new Query(this.database, query(this._delegate, orderByValue()));
          };

          Query.prototype.startAt = function (value, name) {
            if (value === void 0) {
              value = null;
            }

            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Query.startAt', 0, 2, arguments.length);
            return new Query(this.database, query(this._delegate, startAt(value, name)));
          };

          Query.prototype.startAfter = function (value, name) {
            if (value === void 0) {
              value = null;
            }

            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Query.startAfter', 0, 2, arguments.length);
            return new Query(this.database, query(this._delegate, startAfter(value, name)));
          };

          Query.prototype.endAt = function (value, name) {
            if (value === void 0) {
              value = null;
            }

            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Query.endAt', 0, 2, arguments.length);
            return new Query(this.database, query(this._delegate, endAt(value, name)));
          };

          Query.prototype.endBefore = function (value, name) {
            if (value === void 0) {
              value = null;
            }

            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Query.endBefore', 0, 2, arguments.length);
            return new Query(this.database, query(this._delegate, endBefore(value, name)));
          };
          /**
           * Load the selection of children with exactly the specified value, and, optionally,
           * the specified name.
           */


          Query.prototype.equalTo = function (value, name) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Query.equalTo', 1, 2, arguments.length);
            return new Query(this.database, query(this._delegate, equalTo(value, name)));
          };
          /**
           * @returns URL for this location.
           */


          Query.prototype.toString = function () {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Query.toString', 0, 0, arguments.length);
            return this._delegate.toString();
          }; // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary
          // for end-users.


          Query.prototype.toJSON = function () {
            // An optional spacer argument is unnecessary for a string.
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Query.toJSON', 0, 1, arguments.length);
            return this._delegate.toJSON();
          };
          /**
           * Return true if this query and the provided query are equivalent; otherwise, return false.
           */


          Query.prototype.isEqual = function (other) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Query.isEqual', 1, 1, arguments.length);

            if (!(other instanceof Query)) {
              var error = 'Query.isEqual failed: First argument must be an instance of firebase.database.Query.';
              throw new Error(error);
            }

            return this._delegate.isEqual(other._delegate);
          };
          /**
           * Helper used by .on and .once to extract the context and or cancel arguments.
           * @param fnName - The function name (on or once)
           *
           */


          Query.getCancelAndContextArgs_ = function (fnName, cancelOrContext, context) {
            var ret = {
              cancel: undefined,
              context: undefined
            };

            if (cancelOrContext && context) {
              ret.cancel = cancelOrContext;
              Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateCallback"])(fnName, 'cancel', ret.cancel, true);
              ret.context = context;
              Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateContextObject"])(fnName, 'context', ret.context, true);
            } else if (cancelOrContext) {
              // we have either a cancel callback or a context.
              if (typeof cancelOrContext === 'object' && cancelOrContext !== null) {
                // it's a context!
                ret.context = cancelOrContext;
              } else if (typeof cancelOrContext === 'function') {
                ret.cancel = cancelOrContext;
              } else {
                throw new Error(Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["errorPrefix"])(fnName, 'cancelOrContext') + ' must either be a cancel callback or a context object.');
              }
            }

            return ret;
          };

          Object.defineProperty(Query.prototype, "ref", {
            get: function get() {
              return new Reference(this.database, new ReferenceImpl(this._delegate._repo, this._delegate._path));
            },
            enumerable: false,
            configurable: true
          });
          return Query;
        }();

        var Reference =
        /** @class */
        function (_super) {
          Object(tslib__WEBPACK_IMPORTED_MODULE_3__["__extends"])(Reference, _super);
          /**
           * Call options:
           *   new Reference(Repo, Path) or
           *   new Reference(url: string, string|RepoManager)
           *
           * Externally - this is the firebase.database.Reference type.
           */

          function Reference(database, _delegate) {
            var _this = _super.call(this, database, new QueryImpl(_delegate._repo, _delegate._path, new QueryParams(), false)) || this;

            _this.database = database;
            _this._delegate = _delegate;
            return _this;
          }
          /** @returns {?string} */


          Reference.prototype.getKey = function () {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Reference.key', 0, 0, arguments.length);
            return this._delegate.key;
          };

          Reference.prototype.child = function (pathString) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Reference.child', 1, 1, arguments.length);

            if (typeof pathString === 'number') {
              pathString = String(pathString);
            }

            return new Reference(this.database, child(this._delegate, pathString));
          };
          /** @returns {?Reference} */


          Reference.prototype.getParent = function () {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Reference.parent', 0, 0, arguments.length);
            var parent = this._delegate.parent;
            return parent ? new Reference(this.database, parent) : null;
          };
          /** @returns {!Reference} */


          Reference.prototype.getRoot = function () {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Reference.root', 0, 0, arguments.length);
            return new Reference(this.database, this._delegate.root);
          };

          Reference.prototype.set = function (newVal, onComplete) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Reference.set', 1, 2, arguments.length);
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateCallback"])('Reference.set', 'onComplete', onComplete, true);
            var result = set(this._delegate, newVal);

            if (onComplete) {
              result.then(function () {
                return onComplete(null);
              }, function (error) {
                return onComplete(error);
              });
            }

            return result;
          };

          Reference.prototype.update = function (values, onComplete) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Reference.update', 1, 2, arguments.length);

            if (Array.isArray(values)) {
              var newObjectToMerge = {};

              for (var i = 0; i < values.length; ++i) {
                newObjectToMerge['' + i] = values[i];
              }

              values = newObjectToMerge;
              warn('Passing an Array to Firebase.update() is deprecated. ' + 'Use set() if you want to overwrite the existing data, or ' + 'an Object with integer keys if you really do want to ' + 'only update some of the children.');
            }

            validateWritablePath('Reference.update', this._delegate._path);
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateCallback"])('Reference.update', 'onComplete', onComplete, true);
            var result = update(this._delegate, values);

            if (onComplete) {
              result.then(function () {
                return onComplete(null);
              }, function (error) {
                return onComplete(error);
              });
            }

            return result;
          };

          Reference.prototype.setWithPriority = function (newVal, newPriority, onComplete) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Reference.setWithPriority', 2, 3, arguments.length);
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateCallback"])('Reference.setWithPriority', 'onComplete', onComplete, true);
            var result = setWithPriority(this._delegate, newVal, newPriority);

            if (onComplete) {
              result.then(function () {
                return onComplete(null);
              }, function (error) {
                return onComplete(error);
              });
            }

            return result;
          };

          Reference.prototype.remove = function (onComplete) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Reference.remove', 0, 1, arguments.length);
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateCallback"])('Reference.remove', 'onComplete', onComplete, true);
            var result = remove(this._delegate);

            if (onComplete) {
              result.then(function () {
                return onComplete(null);
              }, function (error) {
                return onComplete(error);
              });
            }

            return result;
          };

          Reference.prototype.transaction = function (transactionUpdate, onComplete, applyLocally) {
            var _this = this;

            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Reference.transaction', 1, 3, arguments.length);
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateCallback"])('Reference.transaction', 'transactionUpdate', transactionUpdate, false);
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateCallback"])('Reference.transaction', 'onComplete', onComplete, true);
            validateBoolean('Reference.transaction', 'applyLocally', applyLocally, true);
            var result = runTransaction(this._delegate, transactionUpdate, {
              applyLocally: applyLocally
            }).then(function (transactionResult) {
              return new TransactionResult$1(transactionResult.committed, new DataSnapshot$1(_this.database, transactionResult.snapshot));
            });

            if (onComplete) {
              result.then(function (transactionResult) {
                return onComplete(null, transactionResult.committed, transactionResult.snapshot);
              }, function (error) {
                return onComplete(error, false, null);
              });
            }

            return result;
          };

          Reference.prototype.setPriority = function (priority, onComplete) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Reference.setPriority', 1, 2, arguments.length);
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateCallback"])('Reference.setPriority', 'onComplete', onComplete, true);
            var result = setPriority(this._delegate, priority);

            if (onComplete) {
              result.then(function () {
                return onComplete(null);
              }, function (error) {
                return onComplete(error);
              });
            }

            return result;
          };

          Reference.prototype.push = function (value, onComplete) {
            var _this = this;

            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('Reference.push', 0, 2, arguments.length);
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateCallback"])('Reference.push', 'onComplete', onComplete, true);
            var expPromise = push(this._delegate, value);
            var promise = expPromise.then(function (expRef) {
              return new Reference(_this.database, expRef);
            });

            if (onComplete) {
              promise.then(function () {
                return onComplete(null);
              }, function (error) {
                return onComplete(error);
              });
            }

            var result = new Reference(this.database, expPromise);
            result.then = promise.then.bind(promise);
            result["catch"] = promise["catch"].bind(promise, undefined);
            return result;
          };

          Reference.prototype.onDisconnect = function () {
            validateWritablePath('Reference.onDisconnect', this._delegate._path);
            return new OnDisconnect$1(new OnDisconnect(this._delegate._repo, this._delegate._path));
          };

          Object.defineProperty(Reference.prototype, "key", {
            get: function get() {
              return this.getKey();
            },
            enumerable: false,
            configurable: true
          });
          Object.defineProperty(Reference.prototype, "parent", {
            get: function get() {
              return this.getParent();
            },
            enumerable: false,
            configurable: true
          });
          Object.defineProperty(Reference.prototype, "root", {
            get: function get() {
              return this.getRoot();
            },
            enumerable: false,
            configurable: true
          });
          return Reference;
        }(Query);
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * Class representing a firebase database.
         */


        var Database =
        /** @class */
        function () {
          /**
           * The constructor should not be called by users of our public API.
           */
          function Database(_delegate, app) {
            var _this = this;

            this._delegate = _delegate;
            this.app = app;
            this.INTERNAL = {
              "delete": function _delete() {
                return _this._delegate._delete();
              }
            };
          }
          /**
           * Modify this instance to communicate with the Realtime Database emulator.
           *
           * <p>Note: This method must be called before performing any other operation.
           *
           * @param host - the emulator host (ex: localhost)
           * @param port - the emulator port (ex: 8080)
           * @param options.mockUserToken - the mock auth token to use for unit testing Security Rules
           */


          Database.prototype.useEmulator = function (host, port, options) {
            if (options === void 0) {
              options = {};
            }

            useDatabaseEmulator(this._delegate, host, port, options);
          };

          Database.prototype.ref = function (path) {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('database.ref', 0, 1, arguments.length);

            if (path instanceof Reference) {
              var childRef = refFromURL(this._delegate, path.toString());
              return new Reference(this, childRef);
            } else {
              var childRef = ref(this._delegate, path);
              return new Reference(this, childRef);
            }
          };
          /**
           * Returns a reference to the root or the path specified in url.
           * We throw a exception if the url is not in the same domain as the
           * current repo.
           * @returns Firebase reference.
           */


          Database.prototype.refFromURL = function (url) {
            var apiName = 'database.refFromURL';
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])(apiName, 1, 1, arguments.length);
            var childRef = refFromURL(this._delegate, url);
            return new Reference(this, childRef);
          }; // Make individual repo go offline.


          Database.prototype.goOffline = function () {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('database.goOffline', 0, 0, arguments.length);
            return goOffline(this._delegate);
          };

          Database.prototype.goOnline = function () {
            Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["validateArgCount"])('database.goOnline', 0, 0, arguments.length);
            return goOnline(this._delegate);
          };

          Database.ServerValue = {
            TIMESTAMP: serverTimestamp(),
            increment: function increment(delta) {
              return _increment2(delta);
            }
          };
          return Database;
        }();
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        /**
         * INTERNAL methods for internal-use only (tests, etc.).
         *
         * Customers shouldn't use these or else should be aware that they could break at any time.
         */


        var forceLongPolling = function forceLongPolling() {
          WebSocketConnection.forceDisallow();
          BrowserPollConnection.forceAllow();
        };

        var forceWebSockets = function forceWebSockets() {
          BrowserPollConnection.forceDisallow();
        };
        /* Used by App Manager */


        var isWebSocketsAvailable = function isWebSocketsAvailable() {
          return WebSocketConnection['isAvailable']();
        };

        var setSecurityDebugCallback = function setSecurityDebugCallback(ref, callback) {
          var connection = ref._delegate._repo.persistentConnection_; // eslint-disable-next-line @typescript-eslint/no-explicit-any

          connection.securityDebugCallback_ = callback;
        };

        var stats = function stats(ref, showDelta) {
          repoStats(ref._delegate._repo, showDelta);
        };

        var statsIncrementCounter = function statsIncrementCounter(ref, metric) {
          repoStatsIncrementCounter(ref._delegate._repo, metric);
        };

        var dataUpdateCount = function dataUpdateCount(ref) {
          return ref._delegate._repo.dataUpdateCount;
        };

        var interceptServerData = function interceptServerData(ref, callback) {
          return repoInterceptServerData(ref._delegate._repo, callback);
        };
        /**
         * Used by console to create a database based on the app,
         * passed database URL and a custom auth implementation.
         *
         * @param app - A valid FirebaseApp-like object
         * @param url - A valid Firebase databaseURL
         * @param version - custom version e.g. firebase-admin version
         * @param customAuthImpl - custom auth implementation
         */


        function initStandalone(_a) {
          var app = _a.app,
              url = _a.url,
              version = _a.version,
              customAuthImpl = _a.customAuthImpl,
              namespace = _a.namespace,
              _b = _a.nodeAdmin,
              nodeAdmin = _b === void 0 ? false : _b;
          setSDKVersion(version);
          /**
           * ComponentContainer('database-standalone') is just a placeholder that doesn't perform
           * any actual function.
           */

          var authProvider = new _firebase_component__WEBPACK_IMPORTED_MODULE_1__["Provider"]('auth-internal', new _firebase_component__WEBPACK_IMPORTED_MODULE_1__["ComponentContainer"]('database-standalone'));
          authProvider.setComponent(new _firebase_component__WEBPACK_IMPORTED_MODULE_1__["Component"]('auth-internal', function () {
            return customAuthImpl;
          }, "PRIVATE"
          /* PRIVATE */
          ));
          return {
            instance: new Database(repoManagerDatabaseFromApp(app, authProvider,
            /* appCheckProvider= */
            undefined, url, nodeAdmin), app),
            namespace: namespace
          };
        }

        var INTERNAL = /*#__PURE__*/Object.freeze({
          __proto__: null,
          forceLongPolling: forceLongPolling,
          forceWebSockets: forceWebSockets,
          isWebSocketsAvailable: isWebSocketsAvailable,
          setSecurityDebugCallback: setSecurityDebugCallback,
          stats: stats,
          statsIncrementCounter: statsIncrementCounter,
          dataUpdateCount: dataUpdateCount,
          interceptServerData: interceptServerData,
          initStandalone: initStandalone
        });
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        var DataConnection = PersistentConnection; // eslint-disable-next-line @typescript-eslint/no-explicit-any

        PersistentConnection.prototype.simpleListen = function (pathString, onComplete) {
          this.sendRequest('q', {
            p: pathString
          }, onComplete);
        }; // eslint-disable-next-line @typescript-eslint/no-explicit-any


        PersistentConnection.prototype.echo = function (data, onEcho) {
          this.sendRequest('echo', {
            d: data
          }, onEcho);
        }; // RealTimeConnection properties that we use in tests.


        var RealTimeConnection = Connection;

        var hijackHash = function hijackHash(newHash) {
          var oldPut = PersistentConnection.prototype.put;

          PersistentConnection.prototype.put = function (pathString, data, onComplete, hash) {
            if (hash !== undefined) {
              hash = newHash();
            }

            oldPut.call(this, pathString, data, onComplete, hash);
          };

          return function () {
            PersistentConnection.prototype.put = oldPut;
          };
        };

        var ConnectionTarget = RepoInfo;

        var queryIdentifier = function queryIdentifier(query) {
          return query._delegate._queryIdentifier;
        };
        /**
         * Forces the RepoManager to create Repos that use ReadonlyRestClient instead of PersistentConnection.
         */


        var forceRestClient = function forceRestClient(_forceRestClient) {
          repoManagerForceRestClient(_forceRestClient);
        };

        var TEST_ACCESS = /*#__PURE__*/Object.freeze({
          __proto__: null,
          DataConnection: DataConnection,
          RealTimeConnection: RealTimeConnection,
          hijackHash: hijackHash,
          ConnectionTarget: ConnectionTarget,
          queryIdentifier: queryIdentifier,
          forceRestClient: forceRestClient
        });
        /**
         * @license
         * Copyright 2017 Google LLC
         *
         * Licensed under the Apache License, Version 2.0 (the "License");
         * you may not use this file except in compliance with the License.
         * You may obtain a copy of the License at
         *
         *   http://www.apache.org/licenses/LICENSE-2.0
         *
         * Unless required by applicable law or agreed to in writing, software
         * distributed under the License is distributed on an "AS IS" BASIS,
         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         * See the License for the specific language governing permissions and
         * limitations under the License.
         */

        var ServerValue = Database.ServerValue;

        function registerDatabase(instance) {
          // set SDK_VERSION
          setSDKVersion(instance.SDK_VERSION); // Register the Database Service with the 'firebase' namespace.

          var namespace = instance.INTERNAL.registerComponent(new _firebase_component__WEBPACK_IMPORTED_MODULE_1__["Component"]('database', function (container, _a) {
            var url = _a.instanceIdentifier;
            /* Dependencies */
            // getImmediate for FirebaseApp will always succeed

            var app = container.getProvider('app').getImmediate();
            var authProvider = container.getProvider('auth-internal');
            var appCheckProvider = container.getProvider('app-check-internal');
            return new Database(repoManagerDatabaseFromApp(app, authProvider, appCheckProvider, url), app);
          }, "PUBLIC"
          /* PUBLIC */
          ).setServiceProps( // firebase.database namespace properties
          {
            Reference: Reference,
            Query: Query,
            Database: Database,
            DataSnapshot: DataSnapshot$1,
            enableLogging: enableLogging,
            INTERNAL: INTERNAL,
            ServerValue: ServerValue,
            TEST_ACCESS: TEST_ACCESS
          }).setMultipleInstances(true));
          instance.registerVersion(name, version);

          if (Object(_firebase_util__WEBPACK_IMPORTED_MODULE_2__["isNodeSdk"])()) {
            module.exports = namespace;
          }
        }

        registerDatabase(_firebase_app__WEBPACK_IMPORTED_MODULE_0__["default"]); //# sourceMappingURL=index.esm.js.map

        /* WEBPACK VAR INJECTION */
      }).call(this, __webpack_require__(
      /*! ./../../../webpack/buildin/harmony-module.js */
      "3UD+")(module));
      /***/
    },

    /***/
    "6Yqx":
    /*!*********************************************!*\
      !*** ./node_modules/aws-sdk/clients/sts.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function Yqx(module, exports, __webpack_require__) {
      __webpack_require__(
      /*! ../lib/node_loader */
      "md97");

      var AWS = __webpack_require__(
      /*! ../lib/core */
      "QsWE");

      var Service = AWS.Service;
      var apiLoader = AWS.apiLoader;
      apiLoader.services['sts'] = {};
      AWS.STS = Service.defineService('sts', ['2011-06-15']);

      __webpack_require__(
      /*! ../lib/services/sts */
      "xn+8");

      Object.defineProperty(apiLoader.services['sts'], '2011-06-15', {
        get: function get() {
          var model = __webpack_require__(
          /*! ../apis/sts-2011-06-15.min.json */
          "BxO9");

          model.paginators = __webpack_require__(
          /*! ../apis/sts-2011-06-15.paginators.json */
          "3/th").pagination;
          return model;
        },
        enumerable: true,
        configurable: true
      });
      module.exports = AWS.STS;
      /***/
    },

    /***/
    "6Yr3":
    /*!********************************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/date-time-inline.component.js ***!
      \********************************************************************************************/

    /*! exports provided: OWL_DATETIME_VALUE_ACCESSOR, OwlDateTimeInlineComponent */

    /***/
    function Yr3(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OWL_DATETIME_VALUE_ACCESSOR", function () {
        return OWL_DATETIME_VALUE_ACCESSOR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OwlDateTimeInlineComponent", function () {
        return OwlDateTimeInlineComponent;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./adapter/date-time-adapter.class */
      "1rjb");
      /* harmony import */


      var _date_time_picker_container_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./date-time-picker-container.component */
      "4km1");
      /* harmony import */


      var _angular_forms__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/forms */
      "3Pt+");
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");
      /* harmony import */


      var _date_time_class__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! ./date-time.class */
      "T5M2");
      /* harmony import */


      var _adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! ./adapter/date-time-format.class */
      "1FPZ");

      var __extends = undefined && undefined.__extends || function () {
        var _extendStatics2 = function extendStatics(d, b) {
          _extendStatics2 = Object.setPrototypeOf || {
            __proto__: []
          } instanceof Array && function (d, b) {
            d.__proto__ = b;
          } || function (d, b) {
            for (var p in b) {
              if (b.hasOwnProperty(p)) d[p] = b[p];
            }
          };

          return _extendStatics2(d, b);
        };

        return function (d, b) {
          _extendStatics2(d, b);

          function __() {
            this.constructor = d;
          }

          d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
        };
      }();

      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var __metadata = undefined && undefined.__metadata || function (k, v) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
      };

      var __param = undefined && undefined.__param || function (paramIndex, decorator) {
        return function (target, key) {
          decorator(target, key, paramIndex);
        };
      };

      var OWL_DATETIME_VALUE_ACCESSOR = {
        provide: _angular_forms__WEBPACK_IMPORTED_MODULE_3__["NG_VALUE_ACCESSOR"],
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return OwlDateTimeInlineComponent;
        }),
        multi: true
      };

      var OwlDateTimeInlineComponent = function (_super) {
        __extends(OwlDateTimeInlineComponent, _super);

        function OwlDateTimeInlineComponent(changeDetector, dateTimeAdapter, dateTimeFormats) {
          var _this = _super.call(this, dateTimeAdapter, dateTimeFormats) || this;

          _this.changeDetector = changeDetector;
          _this.dateTimeAdapter = dateTimeAdapter;
          _this.dateTimeFormats = dateTimeFormats;
          _this._pickerType = 'both';
          _this._disabled = false;
          _this._selectMode = 'single';
          _this._values = [];
          _this.yearSelected = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          _this.monthSelected = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          _this._selecteds = [];

          _this.onModelChange = function () {};

          _this.onModelTouched = function () {};

          return _this;
        }

        Object.defineProperty(OwlDateTimeInlineComponent.prototype, "pickerType", {
          get: function get() {
            return this._pickerType;
          },
          set: function set(val) {
            if (val !== this._pickerType) {
              this._pickerType = val;
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInlineComponent.prototype, "disabled", {
          get: function get() {
            return !!this._disabled;
          },
          set: function set(value) {
            this._disabled = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_4__["coerceBooleanProperty"])(value);
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInlineComponent.prototype, "selectMode", {
          get: function get() {
            return this._selectMode;
          },
          set: function set(mode) {
            if (mode !== 'single' && mode !== 'range' && mode !== 'rangeFrom' && mode !== 'rangeTo') {
              throw Error('OwlDateTime Error: invalid selectMode value!');
            }

            this._selectMode = mode;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInlineComponent.prototype, "startAt", {
          get: function get() {
            if (this._startAt) {
              return this._startAt;
            }

            if (this.selectMode === 'single') {
              return this.value || null;
            } else if (this.selectMode === 'range' || this.selectMode === 'rangeFrom') {
              return this.values[0] || null;
            } else if (this.selectMode === 'rangeTo') {
              return this.values[1] || null;
            } else {
              return null;
            }
          },
          set: function set(date) {
            this._startAt = this.getValidDate(this.dateTimeAdapter.deserialize(date));
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInlineComponent.prototype, "dateTimeFilter", {
          get: function get() {
            return this._dateTimeFilter;
          },
          set: function set(filter) {
            this._dateTimeFilter = filter;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInlineComponent.prototype, "minDateTime", {
          get: function get() {
            return this._min || null;
          },
          set: function set(value) {
            this._min = this.getValidDate(this.dateTimeAdapter.deserialize(value));
            this.changeDetector.markForCheck();
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInlineComponent.prototype, "maxDateTime", {
          get: function get() {
            return this._max || null;
          },
          set: function set(value) {
            this._max = this.getValidDate(this.dateTimeAdapter.deserialize(value));
            this.changeDetector.markForCheck();
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInlineComponent.prototype, "value", {
          get: function get() {
            return this._value;
          },
          set: function set(value) {
            value = this.dateTimeAdapter.deserialize(value);
            value = this.getValidDate(value);
            this._value = value;
            this.selected = value;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInlineComponent.prototype, "values", {
          get: function get() {
            return this._values;
          },
          set: function set(values) {
            var _this = this;

            if (values && values.length > 0) {
              values = values.map(function (v) {
                v = _this.dateTimeAdapter.deserialize(v);
                v = _this.getValidDate(v);
                return v ? _this.dateTimeAdapter.clone(v) : null;
              });
              this._values = values.slice();
              this.selecteds = values.slice();
            } else {
              this._values = [];
              this.selecteds = [];
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInlineComponent.prototype, "selected", {
          get: function get() {
            return this._selected;
          },
          set: function set(value) {
            this._selected = value;
            this.changeDetector.markForCheck();
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInlineComponent.prototype, "selecteds", {
          get: function get() {
            return this._selecteds;
          },
          set: function set(values) {
            this._selecteds = values;
            this.changeDetector.markForCheck();
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInlineComponent.prototype, "opened", {
          get: function get() {
            return true;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInlineComponent.prototype, "pickerMode", {
          get: function get() {
            return 'inline';
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInlineComponent.prototype, "isInSingleMode", {
          get: function get() {
            return this._selectMode === 'single';
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInlineComponent.prototype, "isInRangeMode", {
          get: function get() {
            return this._selectMode === 'range' || this._selectMode === 'rangeFrom' || this._selectMode === 'rangeTo';
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInlineComponent.prototype, "owlDTInlineClass", {
          get: function get() {
            return true;
          },
          enumerable: true,
          configurable: true
        });

        OwlDateTimeInlineComponent.prototype.ngOnInit = function () {
          this.container.picker = this;
        };

        OwlDateTimeInlineComponent.prototype.writeValue = function (value) {
          if (this.isInSingleMode) {
            this.value = value;
            this.container.pickerMoment = value;
          } else {
            this.values = value;
            this.container.pickerMoment = this._values[this.container.activeSelectedIndex];
          }
        };

        OwlDateTimeInlineComponent.prototype.registerOnChange = function (fn) {
          this.onModelChange = fn;
        };

        OwlDateTimeInlineComponent.prototype.registerOnTouched = function (fn) {
          this.onModelTouched = fn;
        };

        OwlDateTimeInlineComponent.prototype.setDisabledState = function (isDisabled) {
          this.disabled = isDisabled;
        };

        OwlDateTimeInlineComponent.prototype.select = function (date) {
          if (this.disabled) {
            return;
          }

          if (Array.isArray(date)) {
            this.values = date.slice();
          } else {
            this.value = date;
          }

          this.onModelChange(date);
          this.onModelTouched();
        };

        OwlDateTimeInlineComponent.prototype.selectYear = function (normalizedYear) {
          this.yearSelected.emit(normalizedYear);
        };

        OwlDateTimeInlineComponent.prototype.selectMonth = function (normalizedMonth) {
          this.monthSelected.emit(normalizedMonth);
        };

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"])(_date_time_picker_container_component__WEBPACK_IMPORTED_MODULE_2__["OwlDateTimeContainerComponent"]), __metadata("design:type", _date_time_picker_container_component__WEBPACK_IMPORTED_MODULE_2__["OwlDateTimeContainerComponent"])], OwlDateTimeInlineComponent.prototype, "container", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", String), __metadata("design:paramtypes", [String])], OwlDateTimeInlineComponent.prototype, "pickerType", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Boolean), __metadata("design:paramtypes", [Boolean])], OwlDateTimeInlineComponent.prototype, "disabled", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", String), __metadata("design:paramtypes", [String])], OwlDateTimeInlineComponent.prototype, "selectMode", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlDateTimeInlineComponent.prototype, "startAt", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])('owlDateTimeFilter'), __metadata("design:type", Function), __metadata("design:paramtypes", [Function])], OwlDateTimeInlineComponent.prototype, "dateTimeFilter", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])('min'), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlDateTimeInlineComponent.prototype, "minDateTime", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])('max'), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlDateTimeInlineComponent.prototype, "maxDateTime", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlDateTimeInlineComponent.prototype, "value", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Array), __metadata("design:paramtypes", [Array])], OwlDateTimeInlineComponent.prototype, "values", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", Object)], OwlDateTimeInlineComponent.prototype, "yearSelected", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", Object)], OwlDateTimeInlineComponent.prototype, "monthSelected", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('class.owl-dt-inline'), __metadata("design:type", Boolean), __metadata("design:paramtypes", [])], OwlDateTimeInlineComponent.prototype, "owlDTInlineClass", null);

        OwlDateTimeInlineComponent = __decorate([__param(1, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __param(2, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __param(2, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"])(_adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_6__["OWL_DATE_TIME_FORMATS"])), __metadata("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"], _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__["DateTimeAdapter"], Object])], OwlDateTimeInlineComponent);

        OwlDateTimeInlineComponent.ɵfac = function OwlDateTimeInlineComponent_Factory(t) {
          return new (t || OwlDateTimeInlineComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__["DateTimeAdapter"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_6__["OWL_DATE_TIME_FORMATS"], 8));
        };

        OwlDateTimeInlineComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
          type: OwlDateTimeInlineComponent,
          selectors: [["owl-date-time-inline"]],
          viewQuery: function OwlDateTimeInlineComponent_Query(rf, ctx) {
            if (rf & 1) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](_date_time_picker_container_component__WEBPACK_IMPORTED_MODULE_2__["OwlDateTimeContainerComponent"], 1);
            }

            if (rf & 2) {
              var _t;

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.container = _t.first);
            }
          },
          hostVars: 2,
          hostBindings: function OwlDateTimeInlineComponent_HostBindings(rf, ctx) {
            if (rf & 2) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("owl-dt-inline", ctx.owlDTInlineClass);
            }
          },
          inputs: {
            pickerType: "pickerType",
            disabled: "disabled",
            selectMode: "selectMode",
            startAt: "startAt",
            dateTimeFilter: ["owlDateTimeFilter", "dateTimeFilter"],
            minDateTime: ["min", "minDateTime"],
            maxDateTime: ["max", "maxDateTime"],
            value: "value",
            values: "values"
          },
          outputs: {
            yearSelected: "yearSelected",
            monthSelected: "monthSelected"
          },
          features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([OWL_DATETIME_VALUE_ACCESSOR]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]],
          decls: 1,
          vars: 0,
          template: function OwlDateTimeInlineComponent_Template(rf, ctx) {
            if (rf & 1) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "owl-date-time-container");
            }
          },
          directives: [_date_time_picker_container_component__WEBPACK_IMPORTED_MODULE_2__["OwlDateTimeContainerComponent"]],
          styles: [""],
          changeDetection: 0
        });

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](OwlDateTimeInlineComponent, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
            args: [{
              selector: 'owl-date-time-inline',
              template: "<owl-date-time-container></owl-date-time-container>",
              styles: [""],
              changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
              preserveWhitespaces: false,
              providers: [OWL_DATETIME_VALUE_ACCESSOR]
            }]
          }], function () {
            return [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
            }, {
              type: _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__["DateTimeAdapter"],
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
              }]
            }, {
              type: Object,
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
              }, {
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
                args: [_adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_6__["OWL_DATE_TIME_FORMATS"]]
              }]
            }];
          }, {
            pickerType: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            disabled: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            selectMode: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            startAt: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            dateTimeFilter: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
              args: ['owlDateTimeFilter']
            }],
            minDateTime: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
              args: ['min']
            }],
            maxDateTime: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
              args: ['max']
            }],
            value: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            values: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            owlDTInlineClass: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['class.owl-dt-inline']
            }],
            container: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
              args: [_date_time_picker_container_component__WEBPACK_IMPORTED_MODULE_2__["OwlDateTimeContainerComponent"]]
            }],
            yearSelected: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            monthSelected: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }]
          });
        })();

        return OwlDateTimeInlineComponent;
      }(_date_time_class__WEBPACK_IMPORTED_MODULE_5__["OwlDateTime"]); //# sourceMappingURL=data:application/json;charset=utf-8;base64, 

      /***/

    },

    /***/
    "6eBy":
    /*!*******************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/debounce.js ***!
      \*******************************************************************/

    /*! exports provided: debounce */

    /***/
    function eBy(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "debounce", function () {
        return debounce;
      });
      /* harmony import */


      var _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../innerSubscribe */
      "zx2A");

      function debounce(durationSelector) {
        return function (source) {
          return source.lift(new DebounceOperator(durationSelector));
        };
      }

      var DebounceOperator = /*#__PURE__*/function () {
        function DebounceOperator(durationSelector) {
          _classCallCheck2(this, DebounceOperator);

          this.durationSelector = durationSelector;
        }

        _createClass2(DebounceOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new DebounceSubscriber(subscriber, this.durationSelector));
          }
        }]);

        return DebounceOperator;
      }();

      var DebounceSubscriber = /*#__PURE__*/function (_innerSubscribe__WEBP6) {
        _inherits2(DebounceSubscriber, _innerSubscribe__WEBP6);

        var _super201 = _createSuper(DebounceSubscriber);

        function DebounceSubscriber(destination, durationSelector) {
          var _this511;

          _classCallCheck2(this, DebounceSubscriber);

          _this511 = _super201.call(this, destination);
          _this511.durationSelector = durationSelector;
          _this511.hasValue = false;
          return _this511;
        }

        _createClass2(DebounceSubscriber, [{
          key: "_next",
          value: function _next(value) {
            try {
              var result = this.durationSelector.call(this, value);

              if (result) {
                this._tryNext(value, result);
              }
            } catch (err) {
              this.destination.error(err);
            }
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.emitValue();
            this.destination.complete();
          }
        }, {
          key: "_tryNext",
          value: function _tryNext(value, duration) {
            var subscription = this.durationSubscription;
            this.value = value;
            this.hasValue = true;

            if (subscription) {
              subscription.unsubscribe();
              this.remove(subscription);
            }

            subscription = Object(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["innerSubscribe"])(duration, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleInnerSubscriber"](this));

            if (subscription && !subscription.closed) {
              this.add(this.durationSubscription = subscription);
            }
          }
        }, {
          key: "notifyNext",
          value: function notifyNext() {
            this.emitValue();
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete() {
            this.emitValue();
          }
        }, {
          key: "emitValue",
          value: function emitValue() {
            if (this.hasValue) {
              var value = this.value;
              var subscription = this.durationSubscription;

              if (subscription) {
                this.durationSubscription = undefined;
                subscription.unsubscribe();
                this.remove(subscription);
              }

              this.value = undefined;
              this.hasValue = false;

              _get2(_getPrototypeOf2(DebounceSubscriber.prototype), "_next", this).call(this, value);
            }
          }
        }]);

        return DebounceSubscriber;
      }(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleOuterSubscriber"]); //# sourceMappingURL=debounce.js.map

      /***/

    },

    /***/
    "6n/F":
    /*!***********************************************!*\
      !*** ./node_modules/highcharts/highcharts.js ***!
      \***********************************************/

    /*! no static exports found */

    /***/
    function nF(module, exports, __webpack_require__) {
      var __WEBPACK_AMD_DEFINE_RESULT__;
      /*
      Highcharts JS v8.2.2 (2020-10-22)
      (c) 2009-2018 Torstein Honsi
      License: www.highcharts.com/license
      */


      (function (X, N) {
        true && module.exports ? (N["default"] = N, module.exports = X.document ? N(X) : N) : true ? !(__WEBPACK_AMD_DEFINE_RESULT__ = function () {
          return N(X);
        }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : undefined;
      })("undefined" !== typeof window ? window : this, function (X) {
        function N(f, h, m, z) {
          f.hasOwnProperty(h) || (f[h] = z.apply(null, m));
        }

        var m = {};
        N(m, "Core/Globals.js", [], function () {
          var f = "undefined" !== typeof X ? X : "undefined" !== typeof window ? window : {},
              h = f.document,
              m = f.navigator && f.navigator.userAgent || "",
              z = h && h.createElementNS && !!h.createElementNS("http://www.w3.org/2000/svg", "svg").createSVGRect,
              F = /(edge|msie|trident)/i.test(m) && !f.opera,
              L = -1 !== m.indexOf("Firefox"),
              K = -1 !== m.indexOf("Chrome"),
              C = L && 4 > parseInt(m.split("Firefox/")[1], 10);
          return {
            product: "Highcharts",
            version: "8.2.2",
            deg2rad: 2 * Math.PI / 360,
            doc: h,
            hasBidiBug: C,
            hasTouch: !!f.TouchEvent,
            isMS: F,
            isWebKit: -1 !== m.indexOf("AppleWebKit"),
            isFirefox: L,
            isChrome: K,
            isSafari: !K && -1 !== m.indexOf("Safari"),
            isTouchDevice: /(Mobile|Android|Windows Phone)/.test(m),
            SVG_NS: "http://www.w3.org/2000/svg",
            chartCount: 0,
            seriesTypes: {},
            symbolSizes: {},
            svg: z,
            win: f,
            marginNames: ["plotTop", "marginRight", "marginBottom", "plotLeft"],
            noop: function noop() {},
            charts: [],
            dateFormats: {}
          };
        });
        N(m, "Core/Utilities.js", [m["Core/Globals.js"]], function (f) {
          function h(b, k, t, a) {
            var u = k ? "Highcharts error" : "Highcharts warning";
            32 === b && (b = u + ": Deprecated member");
            var c = l(b),
                H = c ? u + " #" + b + ": www.highcharts.com/errors/" + b + "/" : b.toString();

            u = function u() {
              if (k) throw Error(H);
              e.console && -1 === h.messages.indexOf(H) && console.log(H);
            };

            if ("undefined" !== typeof a) {
              var d = "";
              c && (H += "?");
              S(a, function (b, k) {
                d += "\n - " + k + ": " + b;
                c && (H += encodeURI(k) + "=" + encodeURI(b));
              });
              H += d;
            }

            t ? ca(t, "displayError", {
              code: b,
              message: H,
              params: a
            }, u) : u();
            h.messages.push(H);
          }

          function m() {
            var b,
                k = arguments,
                t = {},
                a = function a(b, k) {
              "object" !== typeof b && (b = {});
              S(k, function (t, u) {
                !z(t, !0) || n(t) || D(t) ? b[u] = k[u] : b[u] = a(b[u] || {}, t);
              });
              return b;
            };

            !0 === k[0] && (t = k[1], k = Array.prototype.slice.call(k, 2));
            var u = k.length;

            for (b = 0; b < u; b++) {
              t = a(t, k[b]);
            }

            return t;
          }

          function z(b, k) {
            return !!b && "object" === typeof b && (!k || !x(b));
          }

          function F(b, k, t) {
            var a;
            v(k) ? w(t) ? b.setAttribute(k, t) : b && b.getAttribute && ((a = b.getAttribute(k)) || "class" !== k || (a = b.getAttribute(k + "Name"))) : S(k, function (k, t) {
              b.setAttribute(t, k);
            });
            return a;
          }

          function L() {
            for (var b = arguments, k = b.length, t = 0; t < k; t++) {
              var a = b[t];
              if ("undefined" !== typeof a && null !== a) return a;
            }
          }

          function K(b, k) {
            if (!b) return k;
            var t = b.split(".").reverse();
            if (1 === t.length) return k[b];

            for (b = t.pop(); "undefined" !== typeof b && "undefined" !== typeof k && null !== k;) {
              k = k[b], b = t.pop();
            }

            return k;
          }

          f.timers = [];
          var C = f.charts,
              y = f.doc,
              e = f.win;
          (h || (h = {})).messages = [];
          f.error = h;
          f.merge = m;

          var I = f.pInt = function (b, k) {
            return parseInt(b, k || 10);
          },
              v = f.isString = function (b) {
            return "string" === typeof b;
          },
              x = f.isArray = function (b) {
            b = Object.prototype.toString.call(b);
            return "[object Array]" === b || "[object Array Iterator]" === b;
          };

          f.isObject = z;

          var D = f.isDOMElement = function (b) {
            return z(b) && "number" === typeof b.nodeType;
          },
              n = f.isClass = function (b) {
            var k = b && b.constructor;
            return !(!z(b, !0) || D(b) || !k || !k.name || "Object" === k.name);
          },
              l = f.isNumber = function (b) {
            return "number" === typeof b && !isNaN(b) && Infinity > b && -Infinity < b;
          },
              J = f.erase = function (b, k) {
            for (var t = b.length; t--;) {
              if (b[t] === k) {
                b.splice(t, 1);
                break;
              }
            }
          },
              w = f.defined = function (b) {
            return "undefined" !== typeof b && null !== b;
          };

          f.attr = F;

          var r = f.splat = function (b) {
            return x(b) ? b : [b];
          },
              d = f.syncTimeout = function (b, k, t) {
            if (0 < k) return setTimeout(b, k, t);
            b.call(0, t);
            return -1;
          },
              g = f.clearTimeout = function (b) {
            w(b) && clearTimeout(b);
          },
              c = f.extend = function (b, k) {
            var t;
            b || (b = {});

            for (t in k) {
              b[t] = k[t];
            }

            return b;
          };

          f.pick = L;

          var a = f.css = function (b, k) {
            f.isMS && !f.svg && k && "undefined" !== typeof k.opacity && (k.filter = "alpha(opacity=" + 100 * k.opacity + ")");
            c(b.style, k);
          },
              q = f.createElement = function (b, k, t, u, H) {
            b = y.createElement(b);
            k && c(b, k);
            H && a(b, {
              padding: "0",
              border: "none",
              margin: "0"
            });
            t && a(b, t);
            u && u.appendChild(b);
            return b;
          },
              p = f.extendClass = function (b, k) {
            var t = function t() {};

            t.prototype = new b();
            c(t.prototype, k);
            return t;
          },
              B = f.pad = function (b, k, t) {
            return Array((k || 2) + 1 - String(b).replace("-", "").length).join(t || "0") + b;
          },
              A = f.relativeLength = function (b, k, t) {
            return /%$/.test(b) ? k * parseFloat(b) / 100 + (t || 0) : parseFloat(b);
          },
              G = f.wrap = function (b, k, t) {
            var a = b[k];

            b[k] = function () {
              var b = Array.prototype.slice.call(arguments),
                  k = arguments,
                  u = this;

              u.proceed = function () {
                a.apply(u, arguments.length ? arguments : k);
              };

              b.unshift(a);
              b = t.apply(this, b);
              u.proceed = null;
              return b;
            };
          },
              M = f.format = function (b, k, t) {
            var a = "{",
                u = !1,
                H = [],
                c = /f$/,
                d = /\.([0-9])/,
                g = f.defaultOptions.lang,
                p = t && t.time || f.time;

            for (t = t && t.numberFormatter || R; b;) {
              var q = b.indexOf(a);
              if (-1 === q) break;
              var U = b.slice(0, q);

              if (u) {
                U = U.split(":");
                a = K(U.shift() || "", k);
                if (U.length && "number" === typeof a) if (U = U.join(":"), c.test(U)) {
                  var r = parseInt((U.match(d) || ["", "-1"])[1], 10);
                  null !== a && (a = t(a, r, g.decimalPoint, -1 < U.indexOf(",") ? g.thousandsSep : ""));
                } else a = p.dateFormat(U, a);
                H.push(a);
              } else H.push(U);

              b = b.slice(q + 1);
              a = (u = !u) ? "}" : "{";
            }

            H.push(b);
            return H.join("");
          },
              T = f.getMagnitude = function (b) {
            return Math.pow(10, Math.floor(Math.log(b) / Math.LN10));
          },
              Q = f.normalizeTickInterval = function (b, k, a, u, H) {
            var c = b;
            a = L(a, 1);
            var d = b / a;
            k || (k = H ? [1, 1.2, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10] : [1, 2, 2.5, 5, 10], !1 === u && (1 === a ? k = k.filter(function (b) {
              return 0 === b % 1;
            }) : .1 >= a && (k = [1 / a])));

            for (u = 0; u < k.length && !(c = k[u], H && c * a >= b || !H && d <= (k[u] + (k[u + 1] || k[u])) / 2); u++) {
              ;
            }

            return c = t(c * a, -Math.round(Math.log(.001) / Math.LN10));
          },
              O = f.stableSort = function (b, k) {
            var t = b.length,
                a,
                u;

            for (u = 0; u < t; u++) {
              b[u].safeI = u;
            }

            b.sort(function (b, t) {
              a = k(b, t);
              return 0 === a ? b.safeI - t.safeI : a;
            });

            for (u = 0; u < t; u++) {
              delete b[u].safeI;
            }
          },
              E = f.arrayMin = function (b) {
            for (var k = b.length, t = b[0]; k--;) {
              b[k] < t && (t = b[k]);
            }

            return t;
          },
              u = f.arrayMax = function (b) {
            for (var k = b.length, t = b[0]; k--;) {
              b[k] > t && (t = b[k]);
            }

            return t;
          },
              b = f.destroyObjectProperties = function (b, k) {
            S(b, function (t, a) {
              t && t !== k && t.destroy && t.destroy();
              delete b[a];
            });
          },
              k = f.discardElement = function (b) {
            var k = f.garbageBin;
            k || (k = q("div"));
            b && k.appendChild(b);
            k.innerHTML = "";
          },
              t = f.correctFloat = function (b, k) {
            return parseFloat(b.toPrecision(k || 14));
          },
              H = f.timeUnits = {
            millisecond: 1,
            second: 1E3,
            minute: 6E4,
            hour: 36E5,
            day: 864E5,
            week: 6048E5,
            month: 24192E5,
            year: 314496E5
          },
              R = f.numberFormat = function (b, k, t, a) {
            b = +b || 0;
            k = +k;
            var u = f.defaultOptions.lang,
                H = (b.toString().split(".")[1] || "").split("e")[0].length,
                c = b.toString().split("e");
            if (-1 === k) k = Math.min(H, 20);else if (!l(k)) k = 2;else if (k && c[1] && 0 > c[1]) {
              var d = k + +c[1];
              0 <= d ? (c[0] = (+c[0]).toExponential(d).split("e")[0], k = d) : (c[0] = c[0].split(".")[0] || 0, b = 20 > k ? (c[0] * Math.pow(10, c[1])).toFixed(k) : 0, c[1] = 0);
            }
            var g = (Math.abs(c[1] ? c[0] : b) + Math.pow(10, -Math.max(k, H) - 1)).toFixed(k);
            H = String(I(g));
            d = 3 < H.length ? H.length % 3 : 0;
            t = L(t, u.decimalPoint);
            a = L(a, u.thousandsSep);
            b = (0 > b ? "-" : "") + (d ? H.substr(0, d) + a : "");
            b += H.substr(d).replace(/(\d{3})(?=\d)/g, "$1" + a);
            k && (b += t + g.slice(-k));
            c[1] && 0 !== +b && (b += "e" + c[1]);
            return b;
          };

          Math.easeInOutSine = function (b) {
            return -.5 * (Math.cos(Math.PI * b) - 1);
          };

          var U = f.getStyle = function (b, k, t) {
            if ("width" === k) return k = Math.min(b.offsetWidth, b.scrollWidth), t = b.getBoundingClientRect && b.getBoundingClientRect().width, t < k && t >= k - 1 && (k = Math.floor(t)), Math.max(0, k - f.getStyle(b, "padding-left") - f.getStyle(b, "padding-right"));
            if ("height" === k) return Math.max(0, Math.min(b.offsetHeight, b.scrollHeight) - f.getStyle(b, "padding-top") - f.getStyle(b, "padding-bottom"));
            e.getComputedStyle || h(27, !0);
            if (b = e.getComputedStyle(b, void 0)) b = b.getPropertyValue(k), L(t, "opacity" !== k) && (b = I(b));
            return b;
          },
              Z = f.inArray = function (b, k, t) {
            h(32, !1, void 0, {
              "Highcharts.inArray": "use Array.indexOf"
            });
            return k.indexOf(b, t);
          },
              aa = f.find = Array.prototype.find ? function (b, k) {
            return b.find(k);
          } : function (b, k) {
            var t,
                a = b.length;

            for (t = 0; t < a; t++) {
              if (k(b[t], t)) return b[t];
            }
          };

          f.keys = function (b) {
            h(32, !1, void 0, {
              "Highcharts.keys": "use Object.keys"
            });
            return Object.keys(b);
          };

          var ba = f.offset = function (b) {
            var k = y.documentElement;
            b = b.parentElement || b.parentNode ? b.getBoundingClientRect() : {
              top: 0,
              left: 0
            };
            return {
              top: b.top + (e.pageYOffset || k.scrollTop) - (k.clientTop || 0),
              left: b.left + (e.pageXOffset || k.scrollLeft) - (k.clientLeft || 0)
            };
          },
              S = f.objectEach = function (b, k, t) {
            for (var a in b) {
              Object.hasOwnProperty.call(b, a) && k.call(t || b[a], b[a], a, b);
            }
          };

          S({
            map: "map",
            each: "forEach",
            grep: "filter",
            reduce: "reduce",
            some: "some"
          }, function (b, k) {
            f[k] = function (t) {
              var a;
              h(32, !1, void 0, (a = {}, a["Highcharts." + k] = "use Array." + b, a));
              return Array.prototype[b].apply(t, [].slice.call(arguments, 1));
            };
          });

          var Y = f.addEvent = function (b, k, t, a) {
            void 0 === a && (a = {});
            var u = b.addEventListener || f.addEventListenerPolyfill;
            var c = "function" === typeof b && b.prototype ? b.prototype.protoEvents = b.prototype.protoEvents || {} : b.hcEvents = b.hcEvents || {};
            f.Point && b instanceof f.Point && b.series && b.series.chart && (b.series.chart.runTrackerClick = !0);
            u && u.call(b, k, t, !1);
            c[k] || (c[k] = []);
            c[k].push({
              fn: t,
              order: "number" === typeof a.order ? a.order : Infinity
            });
            c[k].sort(function (b, k) {
              return b.order - k.order;
            });
            return function () {
              W(b, k, t);
            };
          },
              W = f.removeEvent = function (b, k, t) {
            function a(k, t) {
              var a = b.removeEventListener || f.removeEventListenerPolyfill;
              a && a.call(b, k, t, !1);
            }

            function u(t) {
              var u;

              if (b.nodeName) {
                if (k) {
                  var c = {};
                  c[k] = !0;
                } else c = t;

                S(c, function (b, k) {
                  if (t[k]) for (u = t[k].length; u--;) {
                    a(k, t[k][u].fn);
                  }
                });
              }
            }

            var c;
            ["protoEvents", "hcEvents"].forEach(function (H, d) {
              var g = (d = d ? b : b.prototype) && d[H];
              g && (k ? (c = g[k] || [], t ? (g[k] = c.filter(function (b) {
                return t !== b.fn;
              }), a(k, t)) : (u(g), g[k] = [])) : (u(g), d[H] = {}));
            });
          },
              ca = f.fireEvent = function (b, k, t, a) {
            var u;
            t = t || {};

            if (y.createEvent && (b.dispatchEvent || b.fireEvent)) {
              var H = y.createEvent("Events");
              H.initEvent(k, !0, !0);
              c(H, t);
              b.dispatchEvent ? b.dispatchEvent(H) : b.fireEvent(k, H);
            } else t.target || c(t, {
              preventDefault: function preventDefault() {
                t.defaultPrevented = !0;
              },
              target: b,
              type: k
            }), function (k, a) {
              void 0 === k && (k = []);
              void 0 === a && (a = []);
              var c = 0,
                  H = 0,
                  d = k.length + a.length;

              for (u = 0; u < d; u++) {
                !1 === (k[c] ? a[H] ? k[c].order <= a[H].order ? k[c++] : a[H++] : k[c++] : a[H++]).fn.call(b, t) && t.preventDefault();
              }
            }(b.protoEvents && b.protoEvents[k], b.hcEvents && b.hcEvents[k]);

            a && !t.defaultPrevented && a.call(b, t);
          },
              V,
              da = f.uniqueKey = function () {
            var b = Math.random().toString(36).substring(2, 9) + "-",
                k = 0;
            return function () {
              return "highcharts-" + (V ? "" : b) + k++;
            };
          }(),
              ea = f.useSerialIds = function (b) {
            return V = L(b, V);
          },
              fa = f.isFunction = function (b) {
            return "function" === typeof b;
          },
              ha = f.getOptions = function () {
            return f.defaultOptions;
          },
              ia = f.setOptions = function (b) {
            f.defaultOptions = m(!0, f.defaultOptions, b);
            (b.time || b.global) && f.time.update(m(f.defaultOptions.global, f.defaultOptions.time, b.global, b.time));
            return f.defaultOptions;
          };

          e.jQuery && (e.jQuery.fn.highcharts = function () {
            var b = [].slice.call(arguments);
            if (this[0]) return b[0] ? (new f[v(b[0]) ? b.shift() : "Chart"](this[0], b[0], b[1]), this) : C[F(this[0], "data-highcharts-chart")];
          });
          return {
            addEvent: Y,
            arrayMax: u,
            arrayMin: E,
            attr: F,
            clamp: function clamp(b, k, t) {
              return b > k ? b < t ? b : t : k;
            },
            clearTimeout: g,
            correctFloat: t,
            createElement: q,
            css: a,
            defined: w,
            destroyObjectProperties: b,
            discardElement: k,
            erase: J,
            error: h,
            extend: c,
            extendClass: p,
            find: aa,
            fireEvent: ca,
            format: M,
            getMagnitude: T,
            getNestedProperty: K,
            getOptions: ha,
            getStyle: U,
            inArray: Z,
            isArray: x,
            isClass: n,
            isDOMElement: D,
            isFunction: fa,
            isNumber: l,
            isObject: z,
            isString: v,
            merge: m,
            normalizeTickInterval: Q,
            numberFormat: R,
            objectEach: S,
            offset: ba,
            pad: B,
            pick: L,
            pInt: I,
            relativeLength: A,
            removeEvent: W,
            setOptions: ia,
            splat: r,
            stableSort: O,
            syncTimeout: d,
            timeUnits: H,
            uniqueKey: da,
            useSerialIds: ea,
            wrap: G
          };
        });
        N(m, "Core/Color/Color.js", [m["Core/Globals.js"], m["Core/Utilities.js"]], function (f, h) {
          var m = h.isNumber,
              z = h.merge,
              F = h.pInt;
          "";

          h = function () {
            function h(K) {
              this.parsers = [{
                regex: /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/,
                parse: function parse(h) {
                  return [F(h[1]), F(h[2]), F(h[3]), parseFloat(h[4], 10)];
                }
              }, {
                regex: /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/,
                parse: function parse(h) {
                  return [F(h[1]), F(h[2]), F(h[3]), 1];
                }
              }];
              this.rgba = [];
              if (f.Color !== h) return new f.Color(K);
              if (!(this instanceof h)) return new h(K);
              this.init(K);
            }

            h.parse = function (f) {
              return new h(f);
            };

            h.prototype.init = function (f) {
              var C, y;
              if ((this.input = f = h.names[f && f.toLowerCase ? f.toLowerCase() : ""] || f) && f.stops) this.stops = f.stops.map(function (v) {
                return new h(v[1]);
              });else {
                if (f && f.charAt && "#" === f.charAt()) {
                  var e = f.length;
                  f = parseInt(f.substr(1), 16);
                  7 === e ? C = [(f & 16711680) >> 16, (f & 65280) >> 8, f & 255, 1] : 4 === e && (C = [(f & 3840) >> 4 | (f & 3840) >> 8, (f & 240) >> 4 | f & 240, (f & 15) << 4 | f & 15, 1]);
                }

                if (!C) for (y = this.parsers.length; y-- && !C;) {
                  var I = this.parsers[y];
                  (e = I.regex.exec(f)) && (C = I.parse(e));
                }
              }
              this.rgba = C || [];
            };

            h.prototype.get = function (f) {
              var h = this.input,
                  y = this.rgba;

              if ("undefined" !== typeof this.stops) {
                var e = z(h);
                e.stops = [].concat(e.stops);
                this.stops.forEach(function (I, v) {
                  e.stops[v] = [e.stops[v][0], I.get(f)];
                });
              } else e = y && m(y[0]) ? "rgb" === f || !f && 1 === y[3] ? "rgb(" + y[0] + "," + y[1] + "," + y[2] + ")" : "a" === f ? y[3] : "rgba(" + y.join(",") + ")" : h;

              return e;
            };

            h.prototype.brighten = function (f) {
              var h,
                  y = this.rgba;
              if (this.stops) this.stops.forEach(function (e) {
                e.brighten(f);
              });else if (m(f) && 0 !== f) for (h = 0; 3 > h; h++) {
                y[h] += F(255 * f), 0 > y[h] && (y[h] = 0), 255 < y[h] && (y[h] = 255);
              }
              return this;
            };

            h.prototype.setOpacity = function (f) {
              this.rgba[3] = f;
              return this;
            };

            h.prototype.tweenTo = function (f, h) {
              var y = this.rgba,
                  e = f.rgba;
              e.length && y && y.length ? (f = 1 !== e[3] || 1 !== y[3], h = (f ? "rgba(" : "rgb(") + Math.round(e[0] + (y[0] - e[0]) * (1 - h)) + "," + Math.round(e[1] + (y[1] - e[1]) * (1 - h)) + "," + Math.round(e[2] + (y[2] - e[2]) * (1 - h)) + (f ? "," + (e[3] + (y[3] - e[3]) * (1 - h)) : "") + ")") : h = f.input || "none";
              return h;
            };

            h.names = {
              white: "#ffffff",
              black: "#000000"
            };
            return h;
          }();

          f.Color = h;
          f.color = h.parse;
          return h;
        });
        N(m, "Core/Animation/Fx.js", [m["Core/Globals.js"], m["Core/Utilities.js"]], function (f, h) {
          var m = f.win,
              z = h.isNumber,
              F = h.objectEach;

          h = function () {
            function h(f, h, y) {
              this.pos = NaN;
              this.options = h;
              this.elem = f;
              this.prop = y;
            }

            h.prototype.dSetter = function () {
              var f = this.paths,
                  h = f && f[0];
              f = f && f[1];
              var y = [],
                  e = this.now || 0;
              if (1 !== e && h && f) {
                if (h.length === f.length && 1 > e) for (var I = 0; I < f.length; I++) {
                  for (var v = h[I], x = f[I], D = [], n = 0; n < x.length; n++) {
                    var l = v[n],
                        J = x[n];
                    D[n] = "number" === typeof l && "number" === typeof J && ("A" !== x[0] || 4 !== n && 5 !== n) ? l + e * (J - l) : J;
                  }

                  y.push(D);
                } else y = f;
              } else y = this.toD || [];
              this.elem.attr("d", y, void 0, !0);
            };

            h.prototype.update = function () {
              var f = this.elem,
                  h = this.prop,
                  y = this.now,
                  e = this.options.step;
              if (this[h + "Setter"]) this[h + "Setter"]();else f.attr ? f.element && f.attr(h, y, null, !0) : f.style[h] = y + this.unit;
              e && e.call(f, y, this);
            };

            h.prototype.run = function (h, C, y) {
              var e = this,
                  I = e.options,
                  v = function v(n) {
                return v.stopped ? !1 : e.step(n);
              },
                  x = m.requestAnimationFrame || function (n) {
                setTimeout(n, 13);
              },
                  D = function D() {
                for (var n = 0; n < f.timers.length; n++) {
                  f.timers[n]() || f.timers.splice(n--, 1);
                }

                f.timers.length && x(D);
              };

              h !== C || this.elem["forceAnimate:" + this.prop] ? (this.startTime = +new Date(), this.start = h, this.end = C, this.unit = y, this.now = this.start, this.pos = 0, v.elem = this.elem, v.prop = this.prop, v() && 1 === f.timers.push(v) && x(D)) : (delete I.curAnim[this.prop], I.complete && 0 === Object.keys(I.curAnim).length && I.complete.call(this.elem));
            };

            h.prototype.step = function (f) {
              var h = +new Date(),
                  y = this.options,
                  e = this.elem,
                  I = y.complete,
                  v = y.duration,
                  x = y.curAnim;
              if (e.attr && !e.element) f = !1;else if (f || h >= v + this.startTime) {
                this.now = this.end;
                this.pos = 1;
                this.update();
                var D = x[this.prop] = !0;
                F(x, function (n) {
                  !0 !== n && (D = !1);
                });
                D && I && I.call(e);
                f = !1;
              } else this.pos = y.easing((h - this.startTime) / v), this.now = this.start + (this.end - this.start) * this.pos, this.update(), f = !0;
              return f;
            };

            h.prototype.initPath = function (f, h, y) {
              function e(r, d) {
                for (; r.length < w;) {
                  var g = r[0],
                      c = d[w - r.length];
                  c && "M" === g[0] && (r[0] = "C" === c[0] ? ["C", g[1], g[2], g[1], g[2], g[1], g[2]] : ["L", g[1], g[2]]);
                  r.unshift(g);
                  D && r.push(r[r.length - 1]);
                }
              }

              function I(r, d) {
                for (; r.length < w;) {
                  if (d = r[r.length / n - 1].slice(), "C" === d[0] && (d[1] = d[5], d[2] = d[6]), D) {
                    var g = r[r.length / n].slice();
                    r.splice(r.length / 2, 0, d, g);
                  } else r.push(d);
                }
              }

              var v = f.startX,
                  x = f.endX;
              h = h && h.slice();
              y = y.slice();
              var D = f.isArea,
                  n = D ? 2 : 1;
              if (!h) return [y, y];

              if (v && x) {
                for (f = 0; f < v.length; f++) {
                  if (v[f] === x[0]) {
                    var l = f;
                    break;
                  } else if (v[0] === x[x.length - v.length + f]) {
                    l = f;
                    var J = !0;
                    break;
                  } else if (v[v.length - 1] === x[x.length - v.length + f]) {
                    l = v.length - f;
                    break;
                  }
                }

                "undefined" === typeof l && (h = []);
              }

              if (h.length && z(l)) {
                var w = y.length + l * n;
                J ? (e(h, y), I(y, h)) : (e(y, h), I(h, y));
              }

              return [h, y];
            };

            h.prototype.fillSetter = function () {
              h.prototype.strokeSetter.apply(this, arguments);
            };

            h.prototype.strokeSetter = function () {
              this.elem.attr(this.prop, f.color(this.start).tweenTo(f.color(this.end), this.pos), null, !0);
            };

            return h;
          }();

          return f.Fx = h;
        });
        N(m, "Core/Animation/AnimationUtilities.js", [m["Core/Animation/Fx.js"], m["Core/Globals.js"], m["Core/Utilities.js"]], function (f, h, m) {
          var z = m.defined,
              P = m.getStyle,
              L = m.isArray,
              K = m.isNumber,
              C = m.isObject,
              y = m.merge,
              e = m.objectEach,
              I = m.pick;

          m = h.setAnimation = function (l, n) {
            n.renderer.globalAnimation = I(l, n.options.chart.animation, !0);
          };

          var v = h.animObject = function (l) {
            return C(l) ? h.merge({
              duration: 500,
              defer: 0
            }, l) : {
              duration: l ? 500 : 0,
              defer: 0
            };
          },
              x = h.getDeferredAnimation = function (l, n, w) {
            var r = v(n),
                d = 0,
                g = 0;
            (w ? [w] : l.series).forEach(function (c) {
              c = v(c.options.animation);
              d = n && z(n.defer) ? r.defer : Math.max(d, c.duration + c.defer);
              g = Math.min(r.duration, c.duration);
            });
            l.renderer.forExport && (d = 0);
            return {
              defer: Math.max(0, d - g),
              duration: Math.min(d, g)
            };
          },
              D = h.animate = function (l, v, w) {
            var r,
                d = "",
                g,
                c;

            if (!C(w)) {
              var a = arguments;
              w = {
                duration: a[2],
                easing: a[3],
                complete: a[4]
              };
            }

            K(w.duration) || (w.duration = 400);
            w.easing = "function" === typeof w.easing ? w.easing : Math[w.easing] || Math.easeInOutSine;
            w.curAnim = y(v);
            e(v, function (a, p) {
              n(l, p);
              c = new f(l, w, p);
              g = null;
              "d" === p && L(v.d) ? (c.paths = c.initPath(l, l.pathArray, v.d), c.toD = v.d, r = 0, g = 1) : l.attr ? r = l.attr(p) : (r = parseFloat(P(l, p)) || 0, "opacity" !== p && (d = "px"));
              g || (g = a);
              g && g.match && g.match("px") && (g = g.replace(/px/g, ""));
              c.run(r, g, d);
            });
          },
              n = h.stop = function (l, n) {
            for (var w = h.timers.length; w--;) {
              h.timers[w].elem !== l || n && n !== h.timers[w].prop || (h.timers[w].stopped = !0);
            }
          };

          return {
            animate: D,
            animObject: v,
            getDeferredAnimation: x,
            setAnimation: m,
            stop: n
          };
        });
        N(m, "Core/Renderer/SVG/SVGElement.js", [m["Core/Animation/AnimationUtilities.js"], m["Core/Color/Color.js"], m["Core/Globals.js"], m["Core/Utilities.js"]], function (f, h, m, z) {
          var F = f.animate,
              P = f.animObject,
              K = f.stop,
              C = m.deg2rad,
              y = m.doc,
              e = m.hasTouch,
              I = m.isFirefox,
              v = m.noop,
              x = m.svg,
              D = m.SVG_NS,
              n = m.win,
              l = z.attr,
              J = z.createElement,
              w = z.css,
              r = z.defined,
              d = z.erase,
              g = z.extend,
              c = z.fireEvent,
              a = z.isArray,
              q = z.isFunction,
              p = z.isNumber,
              B = z.isString,
              A = z.merge,
              G = z.objectEach,
              M = z.pick,
              T = z.pInt,
              Q = z.syncTimeout,
              O = z.uniqueKey;
          "";

          f = function () {
            function E() {
              this.height = this.element = void 0;
              this.opacity = 1;
              this.renderer = void 0;
              this.SVG_NS = D;
              this.symbolCustomAttribs = "x y width height r start end innerR anchorX anchorY rounded".split(" ");
              this.width = void 0;
            }

            E.prototype._defaultGetter = function (a) {
              a = M(this[a + "Value"], this[a], this.element ? this.element.getAttribute(a) : null, 0);
              /^[\-0-9\.]+$/.test(a) && (a = parseFloat(a));
              return a;
            };

            E.prototype._defaultSetter = function (a, b, k) {
              k.setAttribute(b, a);
            };

            E.prototype.add = function (a) {
              var b = this.renderer,
                  k = this.element;
              a && (this.parentGroup = a);
              this.parentInverted = a && a.inverted;
              "undefined" !== typeof this.textStr && "text" === this.element.nodeName && b.buildText(this);
              this.added = !0;
              if (!a || a.handleZ || this.zIndex) var t = this.zIndexSetter();
              t || (a ? a.element : b.box).appendChild(k);
              if (this.onAdd) this.onAdd();
              return this;
            };

            E.prototype.addClass = function (a, b) {
              var k = b ? "" : this.attr("class") || "";
              a = (a || "").split(/ /g).reduce(function (b, a) {
                -1 === k.indexOf(a) && b.push(a);
                return b;
              }, k ? [k] : []).join(" ");
              a !== k && this.attr("class", a);
              return this;
            };

            E.prototype.afterSetters = function () {
              this.doTransform && (this.updateTransform(), this.doTransform = !1);
            };

            E.prototype.align = function (a, b, k) {
              var t,
                  c = {};
              var u = this.renderer;
              var g = u.alignedObjects;
              var p, q;

              if (a) {
                if (this.alignOptions = a, this.alignByTranslate = b, !k || B(k)) this.alignTo = t = k || "renderer", d(g, this), g.push(this), k = void 0;
              } else a = this.alignOptions, b = this.alignByTranslate, t = this.alignTo;

              k = M(k, u[t], u);
              t = a.align;
              u = a.verticalAlign;
              g = (k.x || 0) + (a.x || 0);
              var r = (k.y || 0) + (a.y || 0);
              "right" === t ? p = 1 : "center" === t && (p = 2);
              p && (g += (k.width - (a.width || 0)) / p);
              c[b ? "translateX" : "x"] = Math.round(g);
              "bottom" === u ? q = 1 : "middle" === u && (q = 2);
              q && (r += (k.height - (a.height || 0)) / q);
              c[b ? "translateY" : "y"] = Math.round(r);
              this[this.placed ? "animate" : "attr"](c);
              this.placed = !0;
              this.alignAttr = c;
              return this;
            };

            E.prototype.alignSetter = function (a) {
              var b = {
                left: "start",
                center: "middle",
                right: "end"
              };
              b[a] && (this.alignValue = a, this.element.setAttribute("text-anchor", b[a]));
            };

            E.prototype.animate = function (a, b, k) {
              var t = this,
                  c = P(M(b, this.renderer.globalAnimation, !0));
              b = c.defer;
              M(y.hidden, y.msHidden, y.webkitHidden, !1) && (c.duration = 0);
              0 !== c.duration ? (k && (c.complete = k), Q(function () {
                t.element && F(t, a, c);
              }, b)) : (this.attr(a, void 0, k), G(a, function (b, k) {
                c.step && c.step.call(this, b, {
                  prop: k,
                  pos: 1
                });
              }, this));
              return this;
            };

            E.prototype.applyTextOutline = function (a) {
              var b = this.element,
                  k;
              -1 !== a.indexOf("contrast") && (a = a.replace(/contrast/g, this.renderer.getContrast(b.style.fill)));
              a = a.split(" ");
              var t = a[a.length - 1];

              if ((k = a[0]) && "none" !== k && m.svg) {
                this.fakeTS = !0;
                a = [].slice.call(b.getElementsByTagName("tspan"));
                this.ySetter = this.xSetter;
                k = k.replace(/(^[\d\.]+)(.*?)$/g, function (b, k, t) {
                  return 2 * k + t;
                });
                this.removeTextOutline(a);
                var c = b.textContent ? /^[\u0591-\u065F\u066A-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC]/.test(b.textContent) : !1;
                var u = b.firstChild;
                a.forEach(function (a, H) {
                  0 === H && (a.setAttribute("x", b.getAttribute("x")), H = b.getAttribute("y"), a.setAttribute("y", H || 0), null === H && b.setAttribute("y", 0));
                  H = a.cloneNode(!0);
                  l(c && !I ? a : H, {
                    "class": "highcharts-text-outline",
                    fill: t,
                    stroke: t,
                    "stroke-width": k,
                    "stroke-linejoin": "round"
                  });
                  b.insertBefore(H, u);
                });
                c && I && a[0] && (a = a[0].cloneNode(!0), a.textContent = " ", b.insertBefore(a, u));
              }
            };

            E.prototype.attr = function (a, b, k, t) {
              var c = this.element,
                  u,
                  d = this,
                  g,
                  p,
                  q = this.symbolCustomAttribs;

              if ("string" === typeof a && "undefined" !== typeof b) {
                var r = a;
                a = {};
                a[r] = b;
              }

              "string" === typeof a ? d = (this[a + "Getter"] || this._defaultGetter).call(this, a, c) : (G(a, function (b, k) {
                g = !1;
                t || K(this, k);
                this.symbolName && -1 !== q.indexOf(k) && (u || (this.symbolAttr(a), u = !0), g = !0);
                !this.rotation || "x" !== k && "y" !== k || (this.doTransform = !0);
                g || (p = this[k + "Setter"] || this._defaultSetter, p.call(this, b, k, c), !this.styledMode && this.shadows && /^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(k) && this.updateShadows(k, b, p));
              }, this), this.afterSetters());
              k && k.call(this);
              return d;
            };

            E.prototype.clip = function (a) {
              return this.attr("clip-path", a ? "url(" + this.renderer.url + "#" + a.id + ")" : "none");
            };

            E.prototype.crisp = function (a, b) {
              b = b || a.strokeWidth || 0;
              var k = Math.round(b) % 2 / 2;
              a.x = Math.floor(a.x || this.x || 0) + k;
              a.y = Math.floor(a.y || this.y || 0) + k;
              a.width = Math.floor((a.width || this.width || 0) - 2 * k);
              a.height = Math.floor((a.height || this.height || 0) - 2 * k);
              r(a.strokeWidth) && (a.strokeWidth = b);
              return a;
            };

            E.prototype.complexColor = function (u, b, k) {
              var t = this.renderer,
                  H,
                  d,
                  g,
                  p,
                  q,
                  B,
                  l,
                  n,
                  w,
                  E,
                  V = [],
                  v;
              c(this.renderer, "complexColor", {
                args: arguments
              }, function () {
                u.radialGradient ? d = "radialGradient" : u.linearGradient && (d = "linearGradient");

                if (d) {
                  g = u[d];
                  q = t.gradients;
                  B = u.stops;
                  w = k.radialReference;
                  a(g) && (u[d] = g = {
                    x1: g[0],
                    y1: g[1],
                    x2: g[2],
                    y2: g[3],
                    gradientUnits: "userSpaceOnUse"
                  });
                  "radialGradient" === d && w && !r(g.gradientUnits) && (p = g, g = A(g, t.getRadialAttr(w, p), {
                    gradientUnits: "userSpaceOnUse"
                  }));
                  G(g, function (b, k) {
                    "id" !== k && V.push(k, b);
                  });
                  G(B, function (b) {
                    V.push(b);
                  });
                  V = V.join(",");
                  if (q[V]) E = q[V].attr("id");else {
                    g.id = E = O();
                    var c = q[V] = t.createElement(d).attr(g).add(t.defs);
                    c.radAttr = p;
                    c.stops = [];
                    B.forEach(function (b) {
                      0 === b[1].indexOf("rgba") ? (H = h.parse(b[1]), l = H.get("rgb"), n = H.get("a")) : (l = b[1], n = 1);
                      b = t.createElement("stop").attr({
                        offset: b[0],
                        "stop-color": l,
                        "stop-opacity": n
                      }).add(c);
                      c.stops.push(b);
                    });
                  }
                  v = "url(" + t.url + "#" + E + ")";
                  k.setAttribute(b, v);
                  k.gradient = V;

                  u.toString = function () {
                    return v;
                  };
                }
              });
            };

            E.prototype.css = function (a) {
              var b = this.styles,
                  k = {},
                  t = this.element,
                  c = "",
                  d = !b,
                  u = ["textOutline", "textOverflow", "width"];
              a && a.color && (a.fill = a.color);
              b && G(a, function (a, t) {
                b && b[t] !== a && (k[t] = a, d = !0);
              });

              if (d) {
                b && (a = g(b, k));
                if (a) if (null === a.width || "auto" === a.width) delete this.textWidth;else if ("text" === t.nodeName.toLowerCase() && a.width) var p = this.textWidth = T(a.width);
                this.styles = a;
                p && !x && this.renderer.forExport && delete a.width;

                if (t.namespaceURI === this.SVG_NS) {
                  var q = function q(b, k) {
                    return "-" + k.toLowerCase();
                  };

                  G(a, function (b, k) {
                    -1 === u.indexOf(k) && (c += k.replace(/([A-Z])/g, q) + ":" + b + ";");
                  });
                  c && l(t, "style", c);
                } else w(t, a);

                this.added && ("text" === this.element.nodeName && this.renderer.buildText(this), a && a.textOutline && this.applyTextOutline(a.textOutline));
              }

              return this;
            };

            E.prototype.dashstyleSetter = function (a) {
              var b = this["stroke-width"];
              "inherit" === b && (b = 1);

              if (a = a && a.toLowerCase()) {
                var k = a.replace("shortdashdotdot", "3,1,1,1,1,1,").replace("shortdashdot", "3,1,1,1").replace("shortdot", "1,1,").replace("shortdash", "3,1,").replace("longdash", "8,3,").replace(/dot/g, "1,3,").replace("dash", "4,3,").replace(/,$/, "").split(",");

                for (a = k.length; a--;) {
                  k[a] = "" + T(k[a]) * M(b, NaN);
                }

                a = k.join(",").replace(/NaN/g, "none");
                this.element.setAttribute("stroke-dasharray", a);
              }
            };

            E.prototype.destroy = function () {
              var a = this,
                  b = a.element || {},
                  k = a.renderer,
                  t = k.isSVG && "SPAN" === b.nodeName && a.parentGroup || void 0,
                  c = b.ownerSVGElement;
              b.onclick = b.onmouseout = b.onmouseover = b.onmousemove = b.point = null;
              K(a);

              if (a.clipPath && c) {
                var g = a.clipPath;
                [].forEach.call(c.querySelectorAll("[clip-path],[CLIP-PATH]"), function (b) {
                  -1 < b.getAttribute("clip-path").indexOf(g.element.id) && b.removeAttribute("clip-path");
                });
                a.clipPath = g.destroy();
              }

              if (a.stops) {
                for (c = 0; c < a.stops.length; c++) {
                  a.stops[c].destroy();
                }

                a.stops.length = 0;
                a.stops = void 0;
              }

              a.safeRemoveChild(b);

              for (k.styledMode || a.destroyShadows(); t && t.div && 0 === t.div.childNodes.length;) {
                b = t.parentGroup, a.safeRemoveChild(t.div), delete t.div, t = b;
              }

              a.alignTo && d(k.alignedObjects, a);
              G(a, function (b, k) {
                a[k] && a[k].parentGroup === a && a[k].destroy && a[k].destroy();
                delete a[k];
              });
            };

            E.prototype.destroyShadows = function () {
              (this.shadows || []).forEach(function (a) {
                this.safeRemoveChild(a);
              }, this);
              this.shadows = void 0;
            };

            E.prototype.destroyTextPath = function (a, b) {
              var k = a.getElementsByTagName("text")[0];

              if (k) {
                if (k.removeAttribute("dx"), k.removeAttribute("dy"), b.element.setAttribute("id", ""), this.textPathWrapper && k.getElementsByTagName("textPath").length) {
                  for (a = this.textPathWrapper.element.childNodes; a.length;) {
                    k.appendChild(a[0]);
                  }

                  k.removeChild(this.textPathWrapper.element);
                }
              } else if (a.getAttribute("dx") || a.getAttribute("dy")) a.removeAttribute("dx"), a.removeAttribute("dy");

              this.textPathWrapper && (this.textPathWrapper = this.textPathWrapper.destroy());
            };

            E.prototype.dSetter = function (c, b, k) {
              a(c) && ("string" === typeof c[0] && (c = this.renderer.pathToSegments(c)), this.pathArray = c, c = c.reduce(function (b, k, a) {
                return k && k.join ? (a ? b + " " : "") + k.join(" ") : (k || "").toString();
              }, ""));
              /(NaN| {2}|^$)/.test(c) && (c = "M 0 0");
              this[b] !== c && (k.setAttribute(b, c), this[b] = c);
            };

            E.prototype.fadeOut = function (a) {
              var b = this;
              b.animate({
                opacity: 0
              }, {
                duration: M(a, 150),
                complete: function complete() {
                  b.attr({
                    y: -9999
                  }).hide();
                }
              });
            };

            E.prototype.fillSetter = function (a, b, k) {
              "string" === typeof a ? k.setAttribute(b, a) : a && this.complexColor(a, b, k);
            };

            E.prototype.getBBox = function (a, b) {
              var k,
                  t = this.renderer,
                  c = this.element,
                  d = this.styles,
                  p = this.textStr,
                  u = t.cache,
                  B = t.cacheKeys,
                  A = c.namespaceURI === this.SVG_NS;
              b = M(b, this.rotation, 0);
              var l = t.styledMode ? c && E.prototype.getStyle.call(c, "font-size") : d && d.fontSize;

              if (r(p)) {
                var n = p.toString();
                -1 === n.indexOf("<") && (n = n.replace(/[0-9]/g, "0"));
                n += ["", b, l, this.textWidth, d && d.textOverflow, d && d.fontWeight].join();
              }

              n && !a && (k = u[n]);

              if (!k) {
                if (A || t.forExport) {
                  try {
                    var w = this.fakeTS && function (b) {
                      [].forEach.call(c.querySelectorAll(".highcharts-text-outline"), function (k) {
                        k.style.display = b;
                      });
                    };

                    q(w) && w("none");
                    k = c.getBBox ? g({}, c.getBBox()) : {
                      width: c.offsetWidth,
                      height: c.offsetHeight
                    };
                    q(w) && w("");
                  } catch (ca) {
                    "";
                  }

                  if (!k || 0 > k.width) k = {
                    width: 0,
                    height: 0
                  };
                } else k = this.htmlGetBBox();

                t.isSVG && (a = k.width, t = k.height, A && (k.height = t = {
                  "11px,17": 14,
                  "13px,20": 16
                }[d && d.fontSize + "," + Math.round(t)] || t), b && (d = b * C, k.width = Math.abs(t * Math.sin(d)) + Math.abs(a * Math.cos(d)), k.height = Math.abs(t * Math.cos(d)) + Math.abs(a * Math.sin(d))));

                if (n && 0 < k.height) {
                  for (; 250 < B.length;) {
                    delete u[B.shift()];
                  }

                  u[n] || B.push(n);
                  u[n] = k;
                }
              }

              return k;
            };

            E.prototype.getStyle = function (a) {
              return n.getComputedStyle(this.element || this, "").getPropertyValue(a);
            };

            E.prototype.hasClass = function (a) {
              return -1 !== ("" + this.attr("class")).split(" ").indexOf(a);
            };

            E.prototype.hide = function (a) {
              a ? this.attr({
                y: -9999
              }) : this.attr({
                visibility: "hidden"
              });
              return this;
            };

            E.prototype.htmlGetBBox = function () {
              return {
                height: 0,
                width: 0,
                x: 0,
                y: 0
              };
            };

            E.prototype.init = function (a, b) {
              this.element = "span" === b ? J(b) : y.createElementNS(this.SVG_NS, b);
              this.renderer = a;
              c(this, "afterInit");
            };

            E.prototype.invert = function (a) {
              this.inverted = a;
              this.updateTransform();
              return this;
            };

            E.prototype.on = function (a, b) {
              var k,
                  t,
                  c = this.element,
                  d;
              e && "click" === a ? (c.ontouchstart = function (b) {
                k = b.touches[0].clientX;
                t = b.touches[0].clientY;
              }, c.ontouchend = function (a) {
                k && 4 <= Math.sqrt(Math.pow(k - a.changedTouches[0].clientX, 2) + Math.pow(t - a.changedTouches[0].clientY, 2)) || b.call(c, a);
                d = !0;
                !1 !== a.cancelable && a.preventDefault();
              }, c.onclick = function (k) {
                d || b.call(c, k);
              }) : c["on" + a] = b;
              return this;
            };

            E.prototype.opacitySetter = function (a, b, k) {
              this.opacity = a = Number(Number(a).toFixed(3));
              k.setAttribute(b, a);
            };

            E.prototype.removeClass = function (a) {
              return this.attr("class", ("" + this.attr("class")).replace(B(a) ? new RegExp("(^| )" + a + "( |$)") : a, " ").replace(/ +/g, " ").trim());
            };

            E.prototype.removeTextOutline = function (a) {
              for (var b = a.length, k; b--;) {
                k = a[b], "highcharts-text-outline" === k.getAttribute("class") && d(a, this.element.removeChild(k));
              }
            };

            E.prototype.safeRemoveChild = function (a) {
              var b = a.parentNode;
              b && b.removeChild(a);
            };

            E.prototype.setRadialReference = function (a) {
              var b = this.element.gradient && this.renderer.gradients[this.element.gradient];
              this.element.radialReference = a;
              b && b.radAttr && b.animate(this.renderer.getRadialAttr(a, b.radAttr));
              return this;
            };

            E.prototype.setTextPath = function (a, b) {
              var k = this.element,
                  t = {
                textAnchor: "text-anchor"
              },
                  c = !1,
                  d = this.textPathWrapper,
                  g = !d;
              b = A(!0, {
                enabled: !0,
                attributes: {
                  dy: -5,
                  startOffset: "50%",
                  textAnchor: "middle"
                }
              }, b);
              var q = b.attributes;

              if (a && b && b.enabled) {
                d && null === d.element.parentNode ? (g = !0, d = d.destroy()) : d && this.removeTextOutline.call(d.parentGroup, [].slice.call(k.getElementsByTagName("tspan")));
                this.options && this.options.padding && (q.dx = -this.options.padding);
                d || (this.textPathWrapper = d = this.renderer.createElement("textPath"), c = !0);
                var u = d.element;
                (b = a.element.getAttribute("id")) || a.element.setAttribute("id", b = O());
                if (g) for (a = k.getElementsByTagName("tspan"); a.length;) {
                  a[0].setAttribute("y", 0), p(q.dx) && a[0].setAttribute("x", -q.dx), u.appendChild(a[0]);
                }
                c && d && d.add({
                  element: this.text ? this.text.element : k
                });
                u.setAttributeNS("http://www.w3.org/1999/xlink", "href", this.renderer.url + "#" + b);
                r(q.dy) && (u.parentNode.setAttribute("dy", q.dy), delete q.dy);
                r(q.dx) && (u.parentNode.setAttribute("dx", q.dx), delete q.dx);
                G(q, function (b, k) {
                  u.setAttribute(t[k] || k, b);
                });
                k.removeAttribute("transform");
                this.removeTextOutline.call(d, [].slice.call(k.getElementsByTagName("tspan")));
                this.text && !this.renderer.styledMode && this.attr({
                  fill: "none",
                  "stroke-width": 0
                });
                this.applyTextOutline = this.updateTransform = v;
              } else d && (delete this.updateTransform, delete this.applyTextOutline, this.destroyTextPath(k, a), this.updateTransform(), this.options && this.options.rotation && this.applyTextOutline(this.options.style.textOutline));

              return this;
            };

            E.prototype.shadow = function (a, b, k) {
              var t = [],
                  c = this.element,
                  d = !1,
                  p = this.oldShadowOptions;
              var q = {
                color: "#000000",
                offsetX: 1,
                offsetY: 1,
                opacity: .15,
                width: 3
              };
              var u;
              !0 === a ? u = q : "object" === typeof a && (u = g(q, a));
              u && (u && p && G(u, function (b, k) {
                b !== p[k] && (d = !0);
              }), d && this.destroyShadows(), this.oldShadowOptions = u);
              if (!u) this.destroyShadows();else if (!this.shadows) {
                var r = u.opacity / u.width;
                var B = this.parentInverted ? "translate(-1,-1)" : "translate(" + u.offsetX + ", " + u.offsetY + ")";

                for (q = 1; q <= u.width; q++) {
                  var A = c.cloneNode(!1);
                  var n = 2 * u.width + 1 - 2 * q;
                  l(A, {
                    stroke: a.color || "#000000",
                    "stroke-opacity": r * q,
                    "stroke-width": n,
                    transform: B,
                    fill: "none"
                  });
                  A.setAttribute("class", (A.getAttribute("class") || "") + " highcharts-shadow");
                  k && (l(A, "height", Math.max(l(A, "height") - n, 0)), A.cutHeight = n);
                  b ? b.element.appendChild(A) : c.parentNode && c.parentNode.insertBefore(A, c);
                  t.push(A);
                }

                this.shadows = t;
              }
              return this;
            };

            E.prototype.show = function (a) {
              return this.attr({
                visibility: a ? "inherit" : "visible"
              });
            };

            E.prototype.strokeSetter = function (a, b, k) {
              this[b] = a;
              this.stroke && this["stroke-width"] ? (E.prototype.fillSetter.call(this, this.stroke, "stroke", k), k.setAttribute("stroke-width", this["stroke-width"]), this.hasStroke = !0) : "stroke-width" === b && 0 === a && this.hasStroke ? (k.removeAttribute("stroke"), this.hasStroke = !1) : this.renderer.styledMode && this["stroke-width"] && (k.setAttribute("stroke-width", this["stroke-width"]), this.hasStroke = !0);
            };

            E.prototype.strokeWidth = function () {
              if (!this.renderer.styledMode) return this["stroke-width"] || 0;
              var a = this.getStyle("stroke-width"),
                  b = 0;
              if (a.indexOf("px") === a.length - 2) b = T(a);else if ("" !== a) {
                var k = y.createElementNS(D, "rect");
                l(k, {
                  width: a,
                  "stroke-width": 0
                });
                this.element.parentNode.appendChild(k);
                b = k.getBBox().width;
                k.parentNode.removeChild(k);
              }
              return b;
            };

            E.prototype.symbolAttr = function (a) {
              var b = this;
              "x y r start end width height innerR anchorX anchorY clockwise".split(" ").forEach(function (k) {
                b[k] = M(a[k], b[k]);
              });
              b.attr({
                d: b.renderer.symbols[b.symbolName](b.x, b.y, b.width, b.height, b)
              });
            };

            E.prototype.textSetter = function (a) {
              a !== this.textStr && (delete this.textPxLength, this.textStr = a, this.added && this.renderer.buildText(this));
            };

            E.prototype.titleSetter = function (a) {
              var b = this.element.getElementsByTagName("title")[0];
              b || (b = y.createElementNS(this.SVG_NS, "title"), this.element.appendChild(b));
              b.firstChild && b.removeChild(b.firstChild);
              b.appendChild(y.createTextNode(String(M(a, "")).replace(/<[^>]*>/g, "").replace(/&lt;/g, "<").replace(/&gt;/g, ">")));
            };

            E.prototype.toFront = function () {
              var a = this.element;
              a.parentNode.appendChild(a);
              return this;
            };

            E.prototype.translate = function (a, b) {
              return this.attr({
                translateX: a,
                translateY: b
              });
            };

            E.prototype.updateShadows = function (a, b, k) {
              var t = this.shadows;
              if (t) for (var c = t.length; c--;) {
                k.call(t[c], "height" === a ? Math.max(b - (t[c].cutHeight || 0), 0) : "d" === a ? this.d : b, a, t[c]);
              }
            };

            E.prototype.updateTransform = function () {
              var a = this.translateX || 0,
                  b = this.translateY || 0,
                  k = this.scaleX,
                  t = this.scaleY,
                  c = this.inverted,
                  d = this.rotation,
                  g = this.matrix,
                  p = this.element;
              c && (a += this.width, b += this.height);
              a = ["translate(" + a + "," + b + ")"];
              r(g) && a.push("matrix(" + g.join(",") + ")");
              c ? a.push("rotate(90) scale(-1,1)") : d && a.push("rotate(" + d + " " + M(this.rotationOriginX, p.getAttribute("x"), 0) + " " + M(this.rotationOriginY, p.getAttribute("y") || 0) + ")");
              (r(k) || r(t)) && a.push("scale(" + M(k, 1) + " " + M(t, 1) + ")");
              a.length && p.setAttribute("transform", a.join(" "));
            };

            E.prototype.visibilitySetter = function (a, b, k) {
              "inherit" === a ? k.removeAttribute(b) : this[b] !== a && k.setAttribute(b, a);
              this[b] = a;
            };

            E.prototype.xGetter = function (a) {
              "circle" === this.element.nodeName && ("x" === a ? a = "cx" : "y" === a && (a = "cy"));
              return this._defaultGetter(a);
            };

            E.prototype.zIndexSetter = function (a, b) {
              var k = this.renderer,
                  t = this.parentGroup,
                  c = (t || k).element || k.box,
                  d = this.element,
                  g = !1;
              k = c === k.box;
              var p = this.added;
              var q;
              r(a) ? (d.setAttribute("data-z-index", a), a = +a, this[b] === a && (p = !1)) : r(this[b]) && d.removeAttribute("data-z-index");
              this[b] = a;

              if (p) {
                (a = this.zIndex) && t && (t.handleZ = !0);
                b = c.childNodes;

                for (q = b.length - 1; 0 <= q && !g; q--) {
                  t = b[q];
                  p = t.getAttribute("data-z-index");
                  var u = !r(p);
                  if (t !== d) if (0 > a && u && !k && !q) c.insertBefore(d, b[q]), g = !0;else if (T(p) <= a || u && (!r(a) || 0 <= a)) c.insertBefore(d, b[q + 1] || null), g = !0;
                }

                g || (c.insertBefore(d, b[k ? 3 : 0] || null), g = !0);
              }

              return g;
            };

            return E;
          }();

          f.prototype["stroke-widthSetter"] = f.prototype.strokeSetter;
          f.prototype.yGetter = f.prototype.xGetter;

          f.prototype.matrixSetter = f.prototype.rotationOriginXSetter = f.prototype.rotationOriginYSetter = f.prototype.rotationSetter = f.prototype.scaleXSetter = f.prototype.scaleYSetter = f.prototype.translateXSetter = f.prototype.translateYSetter = f.prototype.verticalAlignSetter = function (a, c) {
            this[c] = a;
            this.doTransform = !0;
          };

          m.SVGElement = f;
          return m.SVGElement;
        });
        N(m, "Core/Renderer/SVG/SVGLabel.js", [m["Core/Renderer/SVG/SVGElement.js"], m["Core/Utilities.js"]], function (f, h) {
          var m = this && this.__extends || function () {
            var _f2 = function f(e, I) {
              _f2 = Object.setPrototypeOf || {
                __proto__: []
              } instanceof Array && function (v, e) {
                v.__proto__ = e;
              } || function (v, e) {
                for (var f in e) {
                  e.hasOwnProperty(f) && (v[f] = e[f]);
                }
              };

              return _f2(e, I);
            };

            return function (e, I) {
              function v() {
                this.constructor = e;
              }

              _f2(e, I);

              e.prototype = null === I ? Object.create(I) : (v.prototype = I.prototype, new v());
            };
          }(),
              z = h.defined,
              F = h.extend,
              L = h.isNumber,
              K = h.merge,
              C = h.removeEvent;

          return function (h) {
            function e(f, v, x, D, n, l, J, w, r, d) {
              var g = h.call(this) || this;
              g.init(f, "g");
              g.textStr = v;
              g.x = x;
              g.y = D;
              g.anchorX = l;
              g.anchorY = J;
              g.baseline = r;
              g.className = d;
              "button" !== d && g.addClass("highcharts-label");
              d && g.addClass("highcharts-" + d);
              g.text = f.text("", 0, 0, w).attr({
                zIndex: 1
              });

              if ("string" === typeof n) {
                var c = /^url\((.*?)\)$/.test(n);
                if (g.renderer.symbols[n] || c) g.symbolKey = n;
              }

              g.bBox = e.emptyBBox;
              g.padding = 3;
              g.paddingLeft = 0;
              g.baselineOffset = 0;
              g.needsBox = f.styledMode || c;
              g.deferredAttr = {};
              g.alignFactor = 0;
              return g;
            }

            m(e, h);

            e.prototype.alignSetter = function (e) {
              e = {
                left: 0,
                center: .5,
                right: 1
              }[e];
              e !== this.alignFactor && (this.alignFactor = e, this.bBox && L(this.xSetting) && this.attr({
                x: this.xSetting
              }));
            };

            e.prototype.anchorXSetter = function (e, v) {
              this.anchorX = e;
              this.boxAttr(v, Math.round(e) - this.getCrispAdjust() - this.xSetting);
            };

            e.prototype.anchorYSetter = function (e, v) {
              this.anchorY = e;
              this.boxAttr(v, e - this.ySetting);
            };

            e.prototype.boxAttr = function (e, v) {
              this.box ? this.box.attr(e, v) : this.deferredAttr[e] = v;
            };

            e.prototype.css = function (h) {
              if (h) {
                var v = {};
                h = K(h);
                e.textProps.forEach(function (e) {
                  "undefined" !== typeof h[e] && (v[e] = h[e], delete h[e]);
                });
                this.text.css(v);
                var I = "fontSize" in v || "fontWeight" in v;
                if ("width" in v || I) this.updateBoxSize(), I && this.updateTextPadding();
              }

              return f.prototype.css.call(this, h);
            };

            e.prototype.destroy = function () {
              C(this.element, "mouseenter");
              C(this.element, "mouseleave");
              this.text && this.text.destroy();
              this.box && (this.box = this.box.destroy());
              f.prototype.destroy.call(this);
            };

            e.prototype.fillSetter = function (e, v) {
              e && (this.needsBox = !0);
              this.fill = e;
              this.boxAttr(v, e);
            };

            e.prototype.getBBox = function () {
              var e = this.bBox,
                  v = this.padding;
              return {
                width: e.width + 2 * v,
                height: e.height + 2 * v,
                x: e.x - v,
                y: e.y - v
              };
            };

            e.prototype.getCrispAdjust = function () {
              return this.renderer.styledMode && this.box ? this.box.strokeWidth() % 2 / 2 : (this["stroke-width"] ? parseInt(this["stroke-width"], 10) : 0) % 2 / 2;
            };

            e.prototype.heightSetter = function (e) {
              this.heightSetting = e;
            };

            e.prototype.on = function (e, v) {
              var h = this,
                  D = h.text,
                  n = D && "SPAN" === D.element.tagName ? D : void 0;

              if (n) {
                var l = function l(_l) {
                  ("mouseenter" === e || "mouseleave" === e) && _l.relatedTarget instanceof Element && (h.element.contains(_l.relatedTarget) || n.element.contains(_l.relatedTarget)) || v.call(h.element, _l);
                };

                n.on(e, l);
              }

              f.prototype.on.call(h, e, l || v);
              return h;
            };

            e.prototype.onAdd = function () {
              var e = this.textStr;
              this.text.add(this);
              this.attr({
                text: z(e) ? e : "",
                x: this.x,
                y: this.y
              });
              this.box && z(this.anchorX) && this.attr({
                anchorX: this.anchorX,
                anchorY: this.anchorY
              });
            };

            e.prototype.paddingSetter = function (e) {
              z(e) && e !== this.padding && (this.padding = e, this.updateTextPadding());
            };

            e.prototype.paddingLeftSetter = function (e) {
              z(e) && e !== this.paddingLeft && (this.paddingLeft = e, this.updateTextPadding());
            };

            e.prototype.rSetter = function (e, v) {
              this.boxAttr(v, e);
            };

            e.prototype.shadow = function (e) {
              e && !this.renderer.styledMode && (this.updateBoxSize(), this.box && this.box.shadow(e));
              return this;
            };

            e.prototype.strokeSetter = function (e, v) {
              this.stroke = e;
              this.boxAttr(v, e);
            };

            e.prototype["stroke-widthSetter"] = function (e, v) {
              e && (this.needsBox = !0);
              this["stroke-width"] = e;
              this.boxAttr(v, e);
            };

            e.prototype["text-alignSetter"] = function (e) {
              this.textAlign = e;
            };

            e.prototype.textSetter = function (e) {
              "undefined" !== typeof e && this.text.attr({
                text: e
              });
              this.updateBoxSize();
              this.updateTextPadding();
            };

            e.prototype.updateBoxSize = function () {
              var f = this.text.element.style,
                  v = {},
                  h = this.padding,
                  D = this.paddingLeft,
                  n = L(this.widthSetting) && L(this.heightSetting) && !this.textAlign || !z(this.text.textStr) ? e.emptyBBox : this.text.getBBox();
              this.width = (this.widthSetting || n.width || 0) + 2 * h + D;
              this.height = (this.heightSetting || n.height || 0) + 2 * h;
              this.baselineOffset = h + Math.min(this.renderer.fontMetrics(f && f.fontSize, this.text).b, n.height || Infinity);
              this.needsBox && (this.box || (f = this.box = this.symbolKey ? this.renderer.symbol(this.symbolKey) : this.renderer.rect(), f.addClass(("button" === this.className ? "" : "highcharts-label-box") + (this.className ? " highcharts-" + this.className + "-box" : "")), f.add(this), f = this.getCrispAdjust(), v.x = f, v.y = (this.baseline ? -this.baselineOffset : 0) + f), v.width = Math.round(this.width), v.height = Math.round(this.height), this.box.attr(F(v, this.deferredAttr)), this.deferredAttr = {});
              this.bBox = n;
            };

            e.prototype.updateTextPadding = function () {
              var e = this.text,
                  f = this.baseline ? 0 : this.baselineOffset,
                  h = this.paddingLeft + this.padding;
              z(this.widthSetting) && this.bBox && ("center" === this.textAlign || "right" === this.textAlign) && (h += {
                center: .5,
                right: 1
              }[this.textAlign] * (this.widthSetting - this.bBox.width));
              if (h !== e.x || f !== e.y) e.attr("x", h), e.hasBoxWidthChanged && (this.bBox = e.getBBox(!0), this.updateBoxSize()), "undefined" !== typeof f && e.attr("y", f);
              e.x = h;
              e.y = f;
            };

            e.prototype.widthSetter = function (e) {
              this.widthSetting = L(e) ? e : void 0;
            };

            e.prototype.xSetter = function (e) {
              this.x = e;
              this.alignFactor && (e -= this.alignFactor * ((this.widthSetting || this.bBox.width) + 2 * this.padding), this["forceAnimate:x"] = !0);
              this.xSetting = Math.round(e);
              this.attr("translateX", this.xSetting);
            };

            e.prototype.ySetter = function (e) {
              this.ySetting = this.y = Math.round(e);
              this.attr("translateY", this.ySetting);
            };

            e.emptyBBox = {
              width: 0,
              height: 0,
              x: 0,
              y: 0
            };
            e.textProps = "color cursor direction fontFamily fontSize fontStyle fontWeight lineHeight textAlign textDecoration textOutline textOverflow width".split(" ");
            return e;
          }(f);
        });
        N(m, "Core/Renderer/SVG/SVGRenderer.js", [m["Core/Color/Color.js"], m["Core/Globals.js"], m["Core/Renderer/SVG/SVGElement.js"], m["Core/Renderer/SVG/SVGLabel.js"], m["Core/Utilities.js"]], function (f, h, m, z, F) {
          var P = F.addEvent,
              K = F.attr,
              C = F.createElement,
              y = F.css,
              e = F.defined,
              I = F.destroyObjectProperties,
              v = F.extend,
              x = F.isArray,
              D = F.isNumber,
              n = F.isObject,
              l = F.isString,
              J = F.merge,
              w = F.objectEach,
              r = F.pick,
              d = F.pInt,
              g = F.splat,
              c = F.uniqueKey,
              a = h.charts,
              q = h.deg2rad,
              p = h.doc,
              B = h.isFirefox,
              A = h.isMS,
              G = h.isWebKit;
          F = h.noop;

          var M = h.svg,
              T = h.SVG_NS,
              Q = h.symbolSizes,
              O = h.win,
              E = function () {
            function u(b, k, a, c, d, g, p) {
              this.width = this.url = this.style = this.isSVG = this.imgCount = this.height = this.gradients = this.globalAnimation = this.defs = this.chartIndex = this.cacheKeys = this.cache = this.boxWrapper = this.box = this.alignedObjects = void 0;
              this.init(b, k, a, c, d, g, p);
            }

            u.prototype.init = function (b, k, a, c, d, g, q) {
              var t = this.createElement("svg").attr({
                version: "1.1",
                "class": "highcharts-root"
              });
              q || t.css(this.getStyle(c));
              c = t.element;
              b.appendChild(c);
              K(b, "dir", "ltr");
              -1 === b.innerHTML.indexOf("xmlns") && K(c, "xmlns", this.SVG_NS);
              this.isSVG = !0;
              this.box = c;
              this.boxWrapper = t;
              this.alignedObjects = [];
              this.url = (B || G) && p.getElementsByTagName("base").length ? O.location.href.split("#")[0].replace(/<[^>]*>/g, "").replace(/([\('\)])/g, "\\$1").replace(/ /g, "%20") : "";
              this.createElement("desc").add().element.appendChild(p.createTextNode("Created with Highcharts 8.2.2"));
              this.defs = this.createElement("defs").add();
              this.allowHTML = g;
              this.forExport = d;
              this.styledMode = q;
              this.gradients = {};
              this.cache = {};
              this.cacheKeys = [];
              this.imgCount = 0;
              this.setSize(k, a, !1);
              var H;
              B && b.getBoundingClientRect && (k = function k() {
                y(b, {
                  left: 0,
                  top: 0
                });
                H = b.getBoundingClientRect();
                y(b, {
                  left: Math.ceil(H.left) - H.left + "px",
                  top: Math.ceil(H.top) - H.top + "px"
                });
              }, k(), this.unSubPixelFix = P(O, "resize", k));
            };

            u.prototype.definition = function (b) {
              function k(b, t) {
                var c;
                g(b).forEach(function (b) {
                  var d = a.createElement(b.tagName),
                      g = {};
                  w(b, function (b, k) {
                    "tagName" !== k && "children" !== k && "textContent" !== k && (g[k] = b);
                  });
                  d.attr(g);
                  d.add(t || a.defs);
                  b.textContent && d.element.appendChild(p.createTextNode(b.textContent));
                  k(b.children || [], d);
                  c = d;
                });
                return c;
              }

              var a = this;
              return k(b);
            };

            u.prototype.getStyle = function (b) {
              return this.style = v({
                fontFamily: '"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif',
                fontSize: "12px"
              }, b);
            };

            u.prototype.setStyle = function (b) {
              this.boxWrapper.css(this.getStyle(b));
            };

            u.prototype.isHidden = function () {
              return !this.boxWrapper.getBBox().width;
            };

            u.prototype.destroy = function () {
              var b = this.defs;
              this.box = null;
              this.boxWrapper = this.boxWrapper.destroy();
              I(this.gradients || {});
              this.gradients = null;
              b && (this.defs = b.destroy());
              this.unSubPixelFix && this.unSubPixelFix();
              return this.alignedObjects = null;
            };

            u.prototype.createElement = function (b) {
              var k = new this.Element();
              k.init(this, b);
              return k;
            };

            u.prototype.getRadialAttr = function (b, k) {
              return {
                cx: b[0] - b[2] / 2 + k.cx * b[2],
                cy: b[1] - b[2] / 2 + k.cy * b[2],
                r: k.r * b[2]
              };
            };

            u.prototype.truncate = function (b, k, a, c, d, g, q) {
              var t = this,
                  H = b.rotation,
                  R,
                  u = c ? 1 : 0,
                  A = (a || c).length,
                  r = A,
                  B = [],
                  n = function n(b) {
                k.firstChild && k.removeChild(k.firstChild);
                b && k.appendChild(p.createTextNode(b));
              },
                  l = function l(g, p) {
                p = p || g;
                if ("undefined" === typeof B[p]) if (k.getSubStringLength) try {
                  B[p] = d + k.getSubStringLength(0, c ? p + 1 : p);
                } catch (ja) {
                  "";
                } else t.getSpanWidth && (n(q(a || c, g)), B[p] = d + t.getSpanWidth(b, k));
                return B[p];
              },
                  e;

              b.rotation = 0;
              var w = l(k.textContent.length);

              if (e = d + w > g) {
                for (; u <= A;) {
                  r = Math.ceil((u + A) / 2), c && (R = q(c, r)), w = l(r, R && R.length - 1), u === A ? u = A + 1 : w > g ? A = r - 1 : u = r;
                }

                0 === A ? n("") : a && A === a.length - 1 || n(R || q(a || c, r));
              }

              c && c.splice(0, r);
              b.actualWidth = w;
              b.rotation = H;
              return e;
            };

            u.prototype.buildText = function (b) {
              var k = b.element,
                  a = this,
                  c = a.forExport,
                  g = r(b.textStr, "").toString(),
                  q = -1 !== g.indexOf("<"),
                  u = k.childNodes,
                  A,
                  B = K(k, "x"),
                  n = b.styles,
                  e = b.textWidth,
                  G = n && n.lineHeight,
                  f = n && n.textOutline,
                  V = n && "ellipsis" === n.textOverflow,
                  E = n && "nowrap" === n.whiteSpace,
                  h = n && n.fontSize,
                  v,
                  D = u.length;
              n = e && !b.added && this.box;

              var O = function O(b) {
                var t;
                a.styledMode || (t = /(px|em)$/.test(b && b.style.fontSize) ? b.style.fontSize : h || a.style.fontSize || 12);
                return G ? d(G) : a.fontMetrics(t, b.getAttribute("style") ? b : k).h;
              },
                  J = function J(b, k) {
                w(a.escapes, function (a, t) {
                  k && -1 !== k.indexOf(a) || (b = b.toString().replace(new RegExp(a, "g"), t));
                });
                return b;
              },
                  x = function x(b, k) {
                var a = b.indexOf("<");
                b = b.substring(a, b.indexOf(">") - a);
                a = b.indexOf(k + "=");
                if (-1 !== a && (a = a + k.length + 1, k = b.charAt(a), '"' === k || "'" === k)) return b = b.substring(a + 1), b.substring(0, b.indexOf(k));
              },
                  I = /<br.*?>/g;

              var m = [g, V, E, G, f, h, e].join();

              if (m !== b.textCache) {
                for (b.textCache = m; D--;) {
                  k.removeChild(u[D]);
                }

                q || f || V || e || -1 !== g.indexOf(" ") && (!E || I.test(g)) ? (n && n.appendChild(k), q ? (g = a.styledMode ? g.replace(/<(b|strong)>/g, '<span class="highcharts-strong">').replace(/<(i|em)>/g, '<span class="highcharts-emphasized">') : g.replace(/<(b|strong)>/g, '<span style="font-weight:bold">').replace(/<(i|em)>/g, '<span style="font-style:italic">'), g = g.replace(/<a/g, "<span").replace(/<\/(b|strong|i|em|a)>/g, "</span>").split(I)) : g = [g], g = g.filter(function (b) {
                  return "" !== b;
                }), g.forEach(function (t, d) {
                  var g = 0,
                      H = 0;
                  t = t.replace(/^\s+|\s+$/g, "").replace(/<span/g, "|||<span").replace(/<\/span>/g, "</span>|||");
                  var q = t.split("|||");
                  q.forEach(function (t) {
                    if ("" !== t || 1 === q.length) {
                      var R = {},
                          u = p.createElementNS(a.SVG_NS, "tspan"),
                          n,
                          r;
                      (n = x(t, "class")) && K(u, "class", n);
                      if (n = x(t, "style")) n = n.replace(/(;| |^)color([ :])/, "$1fill$2"), K(u, "style", n);

                      if ((r = x(t, "href")) && !c && -1 === r.split(":")[0].toLowerCase().indexOf("javascript")) {
                        var l = p.createElementNS(a.SVG_NS, "a");
                        K(l, "href", r);
                        K(u, "class", "highcharts-anchor");
                        l.appendChild(u);
                        a.styledMode || y(u, {
                          cursor: "pointer"
                        });
                      }

                      t = J(t.replace(/<[a-zA-Z\/](.|\n)*?>/g, "") || " ");

                      if (" " !== t) {
                        u.appendChild(p.createTextNode(t));
                        g ? R.dx = 0 : d && null !== B && (R.x = B);
                        K(u, R);
                        k.appendChild(l || u);
                        !g && v && (!M && c && y(u, {
                          display: "block"
                        }), K(u, "dy", O(u)));

                        if (e) {
                          var w = t.replace(/([^\^])-/g, "$1- ").split(" ");
                          R = !E && (1 < q.length || d || 1 < w.length);
                          l = 0;
                          r = O(u);
                          if (V) A = a.truncate(b, u, t, void 0, 0, Math.max(0, e - parseInt(h || 12, 10)), function (b, k) {
                            return b.substring(0, k) + "\u2026";
                          });else if (R) for (; w.length;) {
                            w.length && !E && 0 < l && (u = p.createElementNS(T, "tspan"), K(u, {
                              dy: r,
                              x: B
                            }), n && K(u, "style", n), u.appendChild(p.createTextNode(w.join(" ").replace(/- /g, "-"))), k.appendChild(u)), a.truncate(b, u, null, w, 0 === l ? H : 0, e, function (b, k) {
                              return w.slice(0, k).join(" ").replace(/- /g, "-");
                            }), H = b.actualWidth, l++;
                          }
                        }

                        g++;
                      }
                    }
                  });
                  v = v || k.childNodes.length;
                }), V && A && b.attr("title", J(b.textStr || "", ["&lt;", "&gt;"])), n && n.removeChild(k), l(f) && b.applyTextOutline && b.applyTextOutline(f)) : k.appendChild(p.createTextNode(J(g)));
              }
            };

            u.prototype.getContrast = function (b) {
              b = f.parse(b).rgba;
              b[0] *= 1;
              b[1] *= 1.2;
              b[2] *= .5;
              return 459 < b[0] + b[1] + b[2] ? "#000000" : "#FFFFFF";
            };

            u.prototype.button = function (b, k, a, c, d, g, p, q, u, n) {
              var t = this.label(b, k, a, u, void 0, void 0, n, void 0, "button"),
                  H = 0,
                  R = this.styledMode;
              b = (d = d ? J(d) : d) && d.style || {};
              d && d.style && delete d.style;
              t.attr(J({
                padding: 8,
                r: 2
              }, d));

              if (!R) {
                d = J({
                  fill: "#f7f7f7",
                  stroke: "#cccccc",
                  "stroke-width": 1,
                  style: {
                    color: "#333333",
                    cursor: "pointer",
                    fontWeight: "normal"
                  }
                }, {
                  style: b
                }, d);
                var r = d.style;
                delete d.style;
                g = J(d, {
                  fill: "#e6e6e6"
                }, g);
                var B = g.style;
                delete g.style;
                p = J(d, {
                  fill: "#e6ebf5",
                  style: {
                    color: "#000000",
                    fontWeight: "bold"
                  }
                }, p);
                var l = p.style;
                delete p.style;
                q = J(d, {
                  style: {
                    color: "#cccccc"
                  }
                }, q);
                var e = q.style;
                delete q.style;
              }

              P(t.element, A ? "mouseover" : "mouseenter", function () {
                3 !== H && t.setState(1);
              });
              P(t.element, A ? "mouseout" : "mouseleave", function () {
                3 !== H && t.setState(H);
              });

              t.setState = function (b) {
                1 !== b && (t.state = H = b);
                t.removeClass(/highcharts-button-(normal|hover|pressed|disabled)/).addClass("highcharts-button-" + ["normal", "hover", "pressed", "disabled"][b || 0]);
                R || t.attr([d, g, p, q][b || 0]).css([r, B, l, e][b || 0]);
              };

              R || t.attr(d).css(v({
                cursor: "default"
              }, r));
              return t.on("click", function (b) {
                3 !== H && c.call(t, b);
              });
            };

            u.prototype.crispLine = function (b, k, a) {
              void 0 === a && (a = "round");
              var t = b[0],
                  c = b[1];
              t[1] === c[1] && (t[1] = c[1] = Math[a](t[1]) - k % 2 / 2);
              t[2] === c[2] && (t[2] = c[2] = Math[a](t[2]) + k % 2 / 2);
              return b;
            };

            u.prototype.path = function (b) {
              var k = this.styledMode ? {} : {
                fill: "none"
              };
              x(b) ? k.d = b : n(b) && v(k, b);
              return this.createElement("path").attr(k);
            };

            u.prototype.circle = function (b, k, a) {
              b = n(b) ? b : "undefined" === typeof b ? {} : {
                x: b,
                y: k,
                r: a
              };
              k = this.createElement("circle");

              k.xSetter = k.ySetter = function (b, k, a) {
                a.setAttribute("c" + k, b);
              };

              return k.attr(b);
            };

            u.prototype.arc = function (b, k, a, c, d, g) {
              n(b) ? (c = b, k = c.y, a = c.r, b = c.x) : c = {
                innerR: c,
                start: d,
                end: g
              };
              b = this.symbol("arc", b, k, a, a, c);
              b.r = a;
              return b;
            };

            u.prototype.rect = function (b, k, a, c, d, g) {
              d = n(b) ? b.r : d;
              var t = this.createElement("rect");
              b = n(b) ? b : "undefined" === typeof b ? {} : {
                x: b,
                y: k,
                width: Math.max(a, 0),
                height: Math.max(c, 0)
              };
              this.styledMode || ("undefined" !== typeof g && (b.strokeWidth = g, b = t.crisp(b)), b.fill = "none");
              d && (b.r = d);

              t.rSetter = function (b, k, a) {
                t.r = b;
                K(a, {
                  rx: b,
                  ry: b
                });
              };

              t.rGetter = function () {
                return t.r;
              };

              return t.attr(b);
            };

            u.prototype.setSize = function (b, k, a) {
              var t = this.alignedObjects,
                  c = t.length;
              this.width = b;
              this.height = k;

              for (this.boxWrapper.animate({
                width: b,
                height: k
              }, {
                step: function step() {
                  this.attr({
                    viewBox: "0 0 " + this.attr("width") + " " + this.attr("height")
                  });
                },
                duration: r(a, !0) ? void 0 : 0
              }); c--;) {
                t[c].align();
              }
            };

            u.prototype.g = function (b) {
              var k = this.createElement("g");
              return b ? k.attr({
                "class": "highcharts-" + b
              }) : k;
            };

            u.prototype.image = function (b, k, a, c, d, g) {
              var t = {
                preserveAspectRatio: "none"
              },
                  p = function p(b, k) {
                b.setAttributeNS ? b.setAttributeNS("http://www.w3.org/1999/xlink", "href", k) : b.setAttribute("hc-svg-href", k);
              },
                  q = function q(k) {
                p(H.element, b);
                g.call(H, k);
              };

              1 < arguments.length && v(t, {
                x: k,
                y: a,
                width: c,
                height: d
              });
              var H = this.createElement("image").attr(t);
              g ? (p(H.element, "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="), t = new O.Image(), P(t, "load", q), t.src = b, t.complete && q({})) : p(H.element, b);
              return H;
            };

            u.prototype.symbol = function (b, k, t, c, d, g) {
              var q = this,
                  H = /^url\((.*?)\)$/,
                  u = H.test(b),
                  R = !u && (this.symbols[b] ? b : "circle"),
                  n = R && this.symbols[R],
                  A;

              if (n) {
                "number" === typeof k && (A = n.call(this.symbols, Math.round(k || 0), Math.round(t || 0), c || 0, d || 0, g));
                var B = this.path(A);
                q.styledMode || B.attr("fill", "none");
                v(B, {
                  symbolName: R,
                  x: k,
                  y: t,
                  width: c,
                  height: d
                });
                g && v(B, g);
              } else if (u) {
                var l = b.match(H)[1];
                B = this.image(l);
                B.imgwidth = r(Q[l] && Q[l].width, g && g.width);
                B.imgheight = r(Q[l] && Q[l].height, g && g.height);

                var w = function w() {
                  B.attr({
                    width: B.width,
                    height: B.height
                  });
                };

                ["width", "height"].forEach(function (b) {
                  B[b + "Setter"] = function (b, k) {
                    var a = {},
                        t = this["img" + k],
                        c = "width" === k ? "translateX" : "translateY";
                    this[k] = b;
                    e(t) && (g && "within" === g.backgroundSize && this.width && this.height && (t = Math.round(t * Math.min(this.width / this.imgwidth, this.height / this.imgheight))), this.element && this.element.setAttribute(k, t), this.alignByTranslate || (a[c] = ((this[k] || 0) - t) / 2, this.attr(a)));
                  };
                });
                e(k) && B.attr({
                  x: k,
                  y: t
                });
                B.isImg = !0;
                e(B.imgwidth) && e(B.imgheight) ? w() : (B.attr({
                  width: 0,
                  height: 0
                }), C("img", {
                  onload: function onload() {
                    var b = a[q.chartIndex];
                    0 === this.width && (y(this, {
                      position: "absolute",
                      top: "-999em"
                    }), p.body.appendChild(this));
                    Q[l] = {
                      width: this.width,
                      height: this.height
                    };
                    B.imgwidth = this.width;
                    B.imgheight = this.height;
                    B.element && w();
                    this.parentNode && this.parentNode.removeChild(this);
                    q.imgCount--;
                    if (!q.imgCount && b && !b.hasLoaded) b.onload();
                  },
                  src: l
                }), this.imgCount++);
              }

              return B;
            };

            u.prototype.clipRect = function (b, k, a, d) {
              var t = c() + "-",
                  g = this.createElement("clipPath").attr({
                id: t
              }).add(this.defs);
              b = this.rect(b, k, a, d, 0).add(g);
              b.id = t;
              b.clipPath = g;
              b.count = 0;
              return b;
            };

            u.prototype.text = function (b, k, a, c) {
              var t = {};
              if (c && (this.allowHTML || !this.forExport)) return this.html(b, k, a);
              t.x = Math.round(k || 0);
              a && (t.y = Math.round(a));
              e(b) && (t.text = b);
              b = this.createElement("text").attr(t);
              c || (b.xSetter = function (b, k, a) {
                var t = a.getElementsByTagName("tspan"),
                    c = a.getAttribute(k),
                    d;

                for (d = 0; d < t.length; d++) {
                  var g = t[d];
                  g.getAttribute(k) === c && g.setAttribute(k, b);
                }

                a.setAttribute(k, b);
              });
              return b;
            };

            u.prototype.fontMetrics = function (b, k) {
              b = !this.styledMode && /px/.test(b) || !O.getComputedStyle ? b || k && k.style && k.style.fontSize || this.style && this.style.fontSize : k && m.prototype.getStyle.call(k, "font-size");
              b = /px/.test(b) ? d(b) : 12;
              k = 24 > b ? b + 3 : Math.round(1.2 * b);
              return {
                h: k,
                b: Math.round(.8 * k),
                f: b
              };
            };

            u.prototype.rotCorr = function (b, k, a) {
              var t = b;
              k && a && (t = Math.max(t * Math.cos(k * q), 4));
              return {
                x: -b / 3 * Math.sin(k * q),
                y: t
              };
            };

            u.prototype.pathToSegments = function (b) {
              for (var k = [], a = [], c = {
                A: 8,
                C: 7,
                H: 2,
                L: 3,
                M: 3,
                Q: 5,
                S: 5,
                T: 3,
                V: 2
              }, d = 0; d < b.length; d++) {
                l(a[0]) && D(b[d]) && a.length === c[a[0].toUpperCase()] && b.splice(d, 0, a[0].replace("M", "L").replace("m", "l")), "string" === typeof b[d] && (a.length && k.push(a.slice(0)), a.length = 0), a.push(b[d]);
              }

              k.push(a.slice(0));
              return k;
            };

            u.prototype.label = function (b, k, a, c, d, g, p, q, u) {
              return new z(this, b, k, a, c, d, g, p, q, u);
            };

            return u;
          }();

          E.prototype.Element = m;
          E.prototype.SVG_NS = T;
          E.prototype.draw = F;
          E.prototype.escapes = {
            "&": "&amp;",
            "<": "&lt;",
            ">": "&gt;",
            "'": "&#39;",
            '"': "&quot;"
          };
          E.prototype.symbols = {
            circle: function circle(a, b, k, t) {
              return this.arc(a + k / 2, b + t / 2, k / 2, t / 2, {
                start: .5 * Math.PI,
                end: 2.5 * Math.PI,
                open: !1
              });
            },
            square: function square(a, b, k, t) {
              return [["M", a, b], ["L", a + k, b], ["L", a + k, b + t], ["L", a, b + t], ["Z"]];
            },
            triangle: function triangle(a, b, k, t) {
              return [["M", a + k / 2, b], ["L", a + k, b + t], ["L", a, b + t], ["Z"]];
            },
            "triangle-down": function triangleDown(a, b, k, t) {
              return [["M", a, b], ["L", a + k, b], ["L", a + k / 2, b + t], ["Z"]];
            },
            diamond: function diamond(a, b, k, t) {
              return [["M", a + k / 2, b], ["L", a + k, b + t / 2], ["L", a + k / 2, b + t], ["L", a, b + t / 2], ["Z"]];
            },
            arc: function arc(a, b, k, t, c) {
              var d = [];

              if (c) {
                var g = c.start || 0,
                    p = c.end || 0,
                    q = c.r || k;
                k = c.r || t || k;
                var H = .001 > Math.abs(p - g - 2 * Math.PI);
                p -= .001;
                t = c.innerR;
                H = r(c.open, H);
                var u = Math.cos(g),
                    B = Math.sin(g),
                    n = Math.cos(p),
                    A = Math.sin(p);
                g = r(c.longArc, .001 > p - g - Math.PI ? 0 : 1);
                d.push(["M", a + q * u, b + k * B], ["A", q, k, 0, g, r(c.clockwise, 1), a + q * n, b + k * A]);
                e(t) && d.push(H ? ["M", a + t * n, b + t * A] : ["L", a + t * n, b + t * A], ["A", t, t, 0, g, e(c.clockwise) ? 1 - c.clockwise : 0, a + t * u, b + t * B]);
                H || d.push(["Z"]);
              }

              return d;
            },
            callout: function callout(a, b, k, t, c) {
              var d = Math.min(c && c.r || 0, k, t),
                  g = d + 6,
                  p = c && c.anchorX || 0;
              c = c && c.anchorY || 0;
              var q = [["M", a + d, b], ["L", a + k - d, b], ["C", a + k, b, a + k, b, a + k, b + d], ["L", a + k, b + t - d], ["C", a + k, b + t, a + k, b + t, a + k - d, b + t], ["L", a + d, b + t], ["C", a, b + t, a, b + t, a, b + t - d], ["L", a, b + d], ["C", a, b, a, b, a + d, b]];
              p && p > k ? c > b + g && c < b + t - g ? q.splice(3, 1, ["L", a + k, c - 6], ["L", a + k + 6, c], ["L", a + k, c + 6], ["L", a + k, b + t - d]) : q.splice(3, 1, ["L", a + k, t / 2], ["L", p, c], ["L", a + k, t / 2], ["L", a + k, b + t - d]) : p && 0 > p ? c > b + g && c < b + t - g ? q.splice(7, 1, ["L", a, c + 6], ["L", a - 6, c], ["L", a, c - 6], ["L", a, b + d]) : q.splice(7, 1, ["L", a, t / 2], ["L", p, c], ["L", a, t / 2], ["L", a, b + d]) : c && c > t && p > a + g && p < a + k - g ? q.splice(5, 1, ["L", p + 6, b + t], ["L", p, b + t + 6], ["L", p - 6, b + t], ["L", a + d, b + t]) : c && 0 > c && p > a + g && p < a + k - g && q.splice(1, 1, ["L", p - 6, b], ["L", p, b - 6], ["L", p + 6, b], ["L", k - d, b]);
              return q;
            }
          };
          h.SVGRenderer = E;
          h.Renderer = h.SVGRenderer;
          return h.Renderer;
        });
        N(m, "Core/Renderer/HTML/HTMLElement.js", [m["Core/Globals.js"], m["Core/Renderer/SVG/SVGElement.js"], m["Core/Utilities.js"]], function (f, h, m) {
          var z = m.css,
              F = m.defined,
              P = m.extend,
              K = m.pick,
              C = m.pInt,
              y = f.isFirefox;
          P(h.prototype, {
            htmlCss: function htmlCss(e) {
              var f = "SPAN" === this.element.tagName && e && "width" in e,
                  h = K(f && e.width, void 0);

              if (f) {
                delete e.width;
                this.textWidth = h;
                var x = !0;
              }

              e && "ellipsis" === e.textOverflow && (e.whiteSpace = "nowrap", e.overflow = "hidden");
              this.styles = P(this.styles, e);
              z(this.element, e);
              x && this.htmlUpdateTransform();
              return this;
            },
            htmlGetBBox: function htmlGetBBox() {
              var e = this.element;
              return {
                x: e.offsetLeft,
                y: e.offsetTop,
                width: e.offsetWidth,
                height: e.offsetHeight
              };
            },
            htmlUpdateTransform: function htmlUpdateTransform() {
              if (this.added) {
                var e = this.renderer,
                    f = this.element,
                    h = this.translateX || 0,
                    x = this.translateY || 0,
                    D = this.x || 0,
                    n = this.y || 0,
                    l = this.textAlign || "left",
                    J = {
                  left: 0,
                  center: .5,
                  right: 1
                }[l],
                    w = this.styles,
                    r = w && w.whiteSpace;
                z(f, {
                  marginLeft: h,
                  marginTop: x
                });
                !e.styledMode && this.shadows && this.shadows.forEach(function (a) {
                  z(a, {
                    marginLeft: h + 1,
                    marginTop: x + 1
                  });
                });
                this.inverted && [].forEach.call(f.childNodes, function (a) {
                  e.invertChild(a, f);
                });

                if ("SPAN" === f.tagName) {
                  w = this.rotation;
                  var d = this.textWidth && C(this.textWidth),
                      g = [w, l, f.innerHTML, this.textWidth, this.textAlign].join(),
                      c;
                  (c = d !== this.oldTextWidth) && !(c = d > this.oldTextWidth) && ((c = this.textPxLength) || (z(f, {
                    width: "",
                    whiteSpace: r || "nowrap"
                  }), c = f.offsetWidth), c = c > d);
                  c && (/[ \-]/.test(f.textContent || f.innerText) || "ellipsis" === f.style.textOverflow) ? (z(f, {
                    width: d + "px",
                    display: "block",
                    whiteSpace: r || "normal"
                  }), this.oldTextWidth = d, this.hasBoxWidthChanged = !0) : this.hasBoxWidthChanged = !1;
                  g !== this.cTT && (r = e.fontMetrics(f.style.fontSize, f).b, !F(w) || w === (this.oldRotation || 0) && l === this.oldAlign || this.setSpanRotation(w, J, r), this.getSpanCorrection(!F(w) && this.textPxLength || f.offsetWidth, r, J, w, l));
                  z(f, {
                    left: D + (this.xCorr || 0) + "px",
                    top: n + (this.yCorr || 0) + "px"
                  });
                  this.cTT = g;
                  this.oldRotation = w;
                  this.oldAlign = l;
                }
              } else this.alignOnAdd = !0;
            },
            setSpanRotation: function setSpanRotation(e, f, h) {
              var v = {},
                  D = this.renderer.getTransformKey();
              v[D] = v.transform = "rotate(" + e + "deg)";
              v[D + (y ? "Origin" : "-origin")] = v.transformOrigin = 100 * f + "% " + h + "px";
              z(this.element, v);
            },
            getSpanCorrection: function getSpanCorrection(e, f, h) {
              this.xCorr = -e * h;
              this.yCorr = -f;
            }
          });
          return h;
        });
        N(m, "Core/Renderer/HTML/HTMLRenderer.js", [m["Core/Globals.js"], m["Core/Renderer/SVG/SVGElement.js"], m["Core/Renderer/SVG/SVGRenderer.js"], m["Core/Utilities.js"]], function (f, h, m, z) {
          var F = f.isFirefox,
              P = f.isMS,
              K = f.isWebKit,
              C = f.win,
              y = z.attr,
              e = z.createElement,
              I = z.extend,
              v = z.pick;
          I(m.prototype, {
            getTransformKey: function getTransformKey() {
              return P && !/Edge/.test(C.navigator.userAgent) ? "-ms-transform" : K ? "-webkit-transform" : F ? "MozTransform" : C.opera ? "-o-transform" : "";
            },
            html: function html(f, D, n) {
              var l = this.createElement("span"),
                  J = l.element,
                  w = l.renderer,
                  r = w.isSVG,
                  d = function d(_d2, c) {
                ["opacity", "visibility"].forEach(function (a) {
                  _d2[a + "Setter"] = function (g, p, B) {
                    var q = _d2.div ? _d2.div.style : c;
                    h.prototype[a + "Setter"].call(this, g, p, B);
                    q && (q[p] = g);
                  };
                });
                _d2.addedSetters = !0;
              };

              l.textSetter = function (d) {
                d !== J.innerHTML && (delete this.bBox, delete this.oldTextWidth);
                this.textStr = d;
                J.innerHTML = v(d, "");
                l.doTransform = !0;
              };

              r && d(l, l.element.style);

              l.xSetter = l.ySetter = l.alignSetter = l.rotationSetter = function (d, c) {
                "align" === c ? l.alignValue = l.textAlign = d : l[c] = d;
                l.doTransform = !0;
              };

              l.afterSetters = function () {
                this.doTransform && (this.htmlUpdateTransform(), this.doTransform = !1);
              };

              l.attr({
                text: f,
                x: Math.round(D),
                y: Math.round(n)
              }).css({
                position: "absolute"
              });
              w.styledMode || l.css({
                fontFamily: this.style.fontFamily,
                fontSize: this.style.fontSize
              });
              J.style.whiteSpace = "nowrap";
              l.css = l.htmlCss;
              r && (l.add = function (g) {
                var c = w.box.parentNode,
                    a = [];

                if (this.parentGroup = g) {
                  var q = g.div;

                  if (!q) {
                    for (; g;) {
                      a.push(g), g = g.parentGroup;
                    }

                    a.reverse().forEach(function (g) {
                      function p(a, c) {
                        g[c] = a;
                        "translateX" === c ? r.left = a + "px" : r.top = a + "px";
                        g.doTransform = !0;
                      }

                      var n = y(g.element, "class");
                      q = g.div = g.div || e("div", n ? {
                        className: n
                      } : void 0, {
                        position: "absolute",
                        left: (g.translateX || 0) + "px",
                        top: (g.translateY || 0) + "px",
                        display: g.display,
                        opacity: g.opacity,
                        pointerEvents: g.styles && g.styles.pointerEvents
                      }, q || c);
                      var r = q.style;
                      I(g, {
                        classSetter: function (a) {
                          return function (c) {
                            this.element.setAttribute("class", c);
                            a.className = c;
                          };
                        }(q),
                        on: function on() {
                          a[0].div && l.on.apply({
                            element: a[0].div
                          }, arguments);
                          return g;
                        },
                        translateXSetter: p,
                        translateYSetter: p
                      });
                      g.addedSetters || d(g);
                    });
                  }
                } else q = c;

                q.appendChild(J);
                l.added = !0;
                l.alignOnAdd && l.htmlUpdateTransform();
                return l;
              });
              return l;
            }
          });
          return m;
        });
        N(m, "Core/Axis/Tick.js", [m["Core/Globals.js"], m["Core/Utilities.js"]], function (f, h) {
          var m = h.clamp,
              z = h.correctFloat,
              F = h.defined,
              L = h.destroyObjectProperties,
              K = h.extend,
              C = h.fireEvent,
              y = h.isNumber,
              e = h.merge,
              I = h.objectEach,
              v = h.pick,
              x = f.deg2rad;

          h = function () {
            function f(n, l, e, w, r) {
              this.isNewLabel = this.isNew = !0;
              this.axis = n;
              this.pos = l;
              this.type = e || "";
              this.parameters = r || {};
              this.tickmarkOffset = this.parameters.tickmarkOffset;
              this.options = this.parameters.options;
              C(this, "init");
              e || w || this.addLabel();
            }

            f.prototype.addLabel = function () {
              var n = this,
                  l = n.axis,
                  e = l.options,
                  w = l.chart,
                  r = l.categories,
                  d = l.logarithmic,
                  g = l.names,
                  c = n.pos,
                  a = v(n.options && n.options.labels, e.labels),
                  q = l.tickPositions,
                  p = c === q[0],
                  B = c === q[q.length - 1];
              g = this.parameters.category || (r ? v(r[c], g[c], c) : c);
              var A = n.label;
              r = (!a.step || 1 === a.step) && 1 === l.tickInterval;
              q = q.info;
              var f, h;

              if (l.dateTime && q) {
                var D = w.time.resolveDTLFormat(e.dateTimeLabelFormats[!e.grid && q.higherRanks[c] || q.unitName]);
                var x = D.main;
              }

              n.isFirst = p;
              n.isLast = B;
              n.formatCtx = {
                axis: l,
                chart: w,
                isFirst: p,
                isLast: B,
                dateTimeLabelFormat: x,
                tickPositionInfo: q,
                value: d ? z(d.lin2log(g)) : g,
                pos: c
              };
              e = l.labelFormatter.call(n.formatCtx, this.formatCtx);
              if (h = D && D.list) n.shortenLabel = function () {
                for (f = 0; f < h.length; f++) {
                  if (A.attr({
                    text: l.labelFormatter.call(K(n.formatCtx, {
                      dateTimeLabelFormat: h[f]
                    }))
                  }), A.getBBox().width < l.getSlotWidth(n) - 2 * v(a.padding, 5)) return;
                }

                A.attr({
                  text: ""
                });
              };
              r && l._addedPlotLB && n.moveLabel(e, a);
              F(A) || n.movedLabel ? A && A.textStr !== e && !r && (!A.textWidth || a.style && a.style.width || A.styles.width || A.css({
                width: null
              }), A.attr({
                text: e
              }), A.textPxLength = A.getBBox().width) : (n.label = A = n.createLabel({
                x: 0,
                y: 0
              }, e, a), n.rotation = 0);
            };

            f.prototype.createLabel = function (n, l, f) {
              var w = this.axis,
                  r = w.chart;
              if (n = F(l) && f.enabled ? r.renderer.text(l, n.x, n.y, f.useHTML).add(w.labelGroup) : null) r.styledMode || n.css(e(f.style)), n.textPxLength = n.getBBox().width;
              return n;
            };

            f.prototype.destroy = function () {
              L(this, this.axis);
            };

            f.prototype.getPosition = function (n, l, e, w) {
              var r = this.axis,
                  d = r.chart,
                  g = w && d.oldChartHeight || d.chartHeight;
              n = {
                x: n ? z(r.translate(l + e, null, null, w) + r.transB) : r.left + r.offset + (r.opposite ? (w && d.oldChartWidth || d.chartWidth) - r.right - r.left : 0),
                y: n ? g - r.bottom + r.offset - (r.opposite ? r.height : 0) : z(g - r.translate(l + e, null, null, w) - r.transB)
              };
              n.y = m(n.y, -1E5, 1E5);
              C(this, "afterGetPosition", {
                pos: n
              });
              return n;
            };

            f.prototype.getLabelPosition = function (n, l, e, w, r, d, g, c) {
              var a = this.axis,
                  q = a.transA,
                  p = a.isLinked && a.linkedParent ? a.linkedParent.reversed : a.reversed,
                  B = a.staggerLines,
                  A = a.tickRotCorr || {
                x: 0,
                y: 0
              },
                  f = r.y,
                  h = w || a.reserveSpaceDefault ? 0 : -a.labelOffset * ("center" === a.labelAlign ? .5 : 1),
                  v = {};
              F(f) || (f = 0 === a.side ? e.rotation ? -8 : -e.getBBox().height : 2 === a.side ? A.y + 8 : Math.cos(e.rotation * x) * (A.y - e.getBBox(!1, 0).height / 2));
              n = n + r.x + h + A.x - (d && w ? d * q * (p ? -1 : 1) : 0);
              l = l + f - (d && !w ? d * q * (p ? 1 : -1) : 0);
              B && (e = g / (c || 1) % B, a.opposite && (e = B - e - 1), l += a.labelOffset / B * e);
              v.x = n;
              v.y = Math.round(l);
              C(this, "afterGetLabelPosition", {
                pos: v,
                tickmarkOffset: d,
                index: g
              });
              return v;
            };

            f.prototype.getLabelSize = function () {
              return this.label ? this.label.getBBox()[this.axis.horiz ? "height" : "width"] : 0;
            };

            f.prototype.getMarkPath = function (n, e, f, w, r, d) {
              return d.crispLine([["M", n, e], ["L", n + (r ? 0 : -f), e + (r ? f : 0)]], w);
            };

            f.prototype.handleOverflow = function (n) {
              var e = this.axis,
                  f = e.options.labels,
                  w = n.x,
                  r = e.chart.chartWidth,
                  d = e.chart.spacing,
                  g = v(e.labelLeft, Math.min(e.pos, d[3]));
              d = v(e.labelRight, Math.max(e.isRadial ? 0 : e.pos + e.len, r - d[1]));
              var c = this.label,
                  a = this.rotation,
                  q = {
                left: 0,
                center: .5,
                right: 1
              }[e.labelAlign || c.attr("align")],
                  p = c.getBBox().width,
                  B = e.getSlotWidth(this),
                  A = B,
                  G = 1,
                  h,
                  D = {};
              if (a || "justify" !== v(f.overflow, "justify")) 0 > a && w - q * p < g ? h = Math.round(w / Math.cos(a * x) - g) : 0 < a && w + q * p > d && (h = Math.round((r - w) / Math.cos(a * x)));else if (r = w + (1 - q) * p, w - q * p < g ? A = n.x + A * (1 - q) - g : r > d && (A = d - n.x + A * q, G = -1), A = Math.min(B, A), A < B && "center" === e.labelAlign && (n.x += G * (B - A - q * (B - Math.min(p, A)))), p > A || e.autoRotation && (c.styles || {}).width) h = A;
              h && (this.shortenLabel ? this.shortenLabel() : (D.width = Math.floor(h) + "px", (f.style || {}).textOverflow || (D.textOverflow = "ellipsis"), c.css(D)));
            };

            f.prototype.moveLabel = function (n, e) {
              var l = this,
                  w = l.label,
                  r = !1,
                  d = l.axis,
                  g = d.reversed;
              w && w.textStr === n ? (l.movedLabel = w, r = !0, delete l.label) : I(d.ticks, function (a) {
                r || a.isNew || a === l || !a.label || a.label.textStr !== n || (l.movedLabel = a.label, r = !0, a.labelPos = l.movedLabel.xy, delete a.label);
              });

              if (!r && (l.labelPos || w)) {
                var c = l.labelPos || w.xy;
                w = d.horiz ? g ? 0 : d.width + d.left : c.x;
                d = d.horiz ? c.y : g ? d.width + d.left : 0;
                l.movedLabel = l.createLabel({
                  x: w,
                  y: d
                }, n, e);
                l.movedLabel && l.movedLabel.attr({
                  opacity: 0
                });
              }
            };

            f.prototype.render = function (e, l, f) {
              var n = this.axis,
                  r = n.horiz,
                  d = this.pos,
                  g = v(this.tickmarkOffset, n.tickmarkOffset);
              d = this.getPosition(r, d, g, l);
              g = d.x;
              var c = d.y;
              n = r && g === n.pos + n.len || !r && c === n.pos ? -1 : 1;
              f = v(f, 1);
              this.isActive = !0;
              this.renderGridLine(l, f, n);
              this.renderMark(d, f, n);
              this.renderLabel(d, l, f, e);
              this.isNew = !1;
              C(this, "afterRender");
            };

            f.prototype.renderGridLine = function (n, e, f) {
              var l = this.axis,
                  r = l.options,
                  d = this.gridLine,
                  g = {},
                  c = this.pos,
                  a = this.type,
                  q = v(this.tickmarkOffset, l.tickmarkOffset),
                  p = l.chart.renderer,
                  B = a ? a + "Grid" : "grid",
                  A = r[B + "LineWidth"],
                  G = r[B + "LineColor"];
              r = r[B + "LineDashStyle"];
              d || (l.chart.styledMode || (g.stroke = G, g["stroke-width"] = A, r && (g.dashstyle = r)), a || (g.zIndex = 1), n && (e = 0), this.gridLine = d = p.path().attr(g).addClass("highcharts-" + (a ? a + "-" : "") + "grid-line").add(l.gridGroup));
              if (d && (f = l.getPlotLinePath({
                value: c + q,
                lineWidth: d.strokeWidth() * f,
                force: "pass",
                old: n
              }))) d[n || this.isNew ? "attr" : "animate"]({
                d: f,
                opacity: e
              });
            };

            f.prototype.renderMark = function (n, e, f) {
              var l = this.axis,
                  r = l.options,
                  d = l.chart.renderer,
                  g = this.type,
                  c = g ? g + "Tick" : "tick",
                  a = l.tickSize(c),
                  q = this.mark,
                  p = !q,
                  B = n.x;
              n = n.y;
              var A = v(r[c + "Width"], !g && l.isXAxis ? 1 : 0);
              r = r[c + "Color"];
              a && (l.opposite && (a[0] = -a[0]), p && (this.mark = q = d.path().addClass("highcharts-" + (g ? g + "-" : "") + "tick").add(l.axisGroup), l.chart.styledMode || q.attr({
                stroke: r,
                "stroke-width": A
              })), q[p ? "attr" : "animate"]({
                d: this.getMarkPath(B, n, a[0], q.strokeWidth() * f, l.horiz, d),
                opacity: e
              }));
            };

            f.prototype.renderLabel = function (e, l, f, w) {
              var n = this.axis,
                  d = n.horiz,
                  g = n.options,
                  c = this.label,
                  a = g.labels,
                  q = a.step;
              n = v(this.tickmarkOffset, n.tickmarkOffset);
              var p = !0,
                  B = e.x;
              e = e.y;
              c && y(B) && (c.xy = e = this.getLabelPosition(B, e, c, d, a, n, w, q), this.isFirst && !this.isLast && !v(g.showFirstLabel, 1) || this.isLast && !this.isFirst && !v(g.showLastLabel, 1) ? p = !1 : !d || a.step || a.rotation || l || 0 === f || this.handleOverflow(e), q && w % q && (p = !1), p && y(e.y) ? (e.opacity = f, c[this.isNewLabel ? "attr" : "animate"](e), this.isNewLabel = !1) : (c.attr("y", -9999), this.isNewLabel = !0));
            };

            f.prototype.replaceMovedLabel = function () {
              var e = this.label,
                  l = this.axis,
                  f = l.reversed;

              if (e && !this.isNew) {
                var w = l.horiz ? f ? l.left : l.width + l.left : e.xy.x;
                f = l.horiz ? e.xy.y : f ? l.width + l.top : l.top;
                e.animate({
                  x: w,
                  y: f,
                  opacity: 0
                }, void 0, e.destroy);
                delete this.label;
              }

              l.isDirty = !0;
              this.label = this.movedLabel;
              delete this.movedLabel;
            };

            return f;
          }();

          f.Tick = h;
          return f.Tick;
        });
        N(m, "Core/Time.js", [m["Core/Globals.js"], m["Core/Utilities.js"]], function (f, h) {
          var m = h.defined,
              z = h.error,
              F = h.extend,
              L = h.isObject,
              K = h.merge,
              C = h.objectEach,
              y = h.pad,
              e = h.pick,
              I = h.splat,
              v = h.timeUnits,
              x = f.win;

          h = function () {
            function h(e) {
              this.options = {};
              this.variableTimezone = this.useUTC = !1;
              this.Date = x.Date;
              this.getTimezoneOffset = this.timezoneOffsetFunction();
              this.update(e);
            }

            h.prototype.get = function (e, l) {
              if (this.variableTimezone || this.timezoneOffset) {
                var n = l.getTime(),
                    f = n - this.getTimezoneOffset(l);
                l.setTime(f);
                e = l["getUTC" + e]();
                l.setTime(n);
                return e;
              }

              return this.useUTC ? l["getUTC" + e]() : l["get" + e]();
            };

            h.prototype.set = function (e, l, f) {
              if (this.variableTimezone || this.timezoneOffset) {
                if ("Milliseconds" === e || "Seconds" === e || "Minutes" === e) return l["setUTC" + e](f);
                var n = this.getTimezoneOffset(l);
                n = l.getTime() - n;
                l.setTime(n);
                l["setUTC" + e](f);
                e = this.getTimezoneOffset(l);
                n = l.getTime() + e;
                return l.setTime(n);
              }

              return this.useUTC ? l["setUTC" + e](f) : l["set" + e](f);
            };

            h.prototype.update = function (n) {
              var l = e(n && n.useUTC, !0);
              this.options = n = K(!0, this.options || {}, n);
              this.Date = n.Date || x.Date || Date;
              this.timezoneOffset = (this.useUTC = l) && n.timezoneOffset;
              this.getTimezoneOffset = this.timezoneOffsetFunction();
              this.variableTimezone = !(l && !n.getTimezoneOffset && !n.timezone);
            };

            h.prototype.makeTime = function (n, l, h, w, r, d) {
              if (this.useUTC) {
                var g = this.Date.UTC.apply(0, arguments);
                var c = this.getTimezoneOffset(g);
                g += c;
                var a = this.getTimezoneOffset(g);
                c !== a ? g += a - c : c - 36E5 !== this.getTimezoneOffset(g - 36E5) || f.isSafari || (g -= 36E5);
              } else g = new this.Date(n, l, e(h, 1), e(w, 0), e(r, 0), e(d, 0)).getTime();

              return g;
            };

            h.prototype.timezoneOffsetFunction = function () {
              var e = this,
                  l = this.options,
                  f = l.moment || x.moment;
              if (!this.useUTC) return function (e) {
                return 6E4 * new Date(e.toString()).getTimezoneOffset();
              };

              if (l.timezone) {
                if (f) return function (e) {
                  return 6E4 * -f.tz(e, l.timezone).utcOffset();
                };
                z(25);
              }

              return this.useUTC && l.getTimezoneOffset ? function (e) {
                return 6E4 * l.getTimezoneOffset(e.valueOf());
              } : function () {
                return 6E4 * (e.timezoneOffset || 0);
              };
            };

            h.prototype.dateFormat = function (n, l, h) {
              var w;
              if (!m(l) || isNaN(l)) return (null === (w = f.defaultOptions.lang) || void 0 === w ? void 0 : w.invalidDate) || "";
              n = e(n, "%Y-%m-%d %H:%M:%S");
              var r = this;
              w = new this.Date(l);
              var d = this.get("Hours", w),
                  g = this.get("Day", w),
                  c = this.get("Date", w),
                  a = this.get("Month", w),
                  q = this.get("FullYear", w),
                  p = f.defaultOptions.lang,
                  B = null === p || void 0 === p ? void 0 : p.weekdays,
                  A = null === p || void 0 === p ? void 0 : p.shortWeekdays;
              w = F({
                a: A ? A[g] : B[g].substr(0, 3),
                A: B[g],
                d: y(c),
                e: y(c, 2, " "),
                w: g,
                b: p.shortMonths[a],
                B: p.months[a],
                m: y(a + 1),
                o: a + 1,
                y: q.toString().substr(2, 2),
                Y: q,
                H: y(d),
                k: d,
                I: y(d % 12 || 12),
                l: d % 12 || 12,
                M: y(this.get("Minutes", w)),
                p: 12 > d ? "AM" : "PM",
                P: 12 > d ? "am" : "pm",
                S: y(w.getSeconds()),
                L: y(Math.floor(l % 1E3), 3)
              }, f.dateFormats);
              C(w, function (a, c) {
                for (; -1 !== n.indexOf("%" + c);) {
                  n = n.replace("%" + c, "function" === typeof a ? a.call(r, l) : a);
                }
              });
              return h ? n.substr(0, 1).toUpperCase() + n.substr(1) : n;
            };

            h.prototype.resolveDTLFormat = function (e) {
              return L(e, !0) ? e : (e = I(e), {
                main: e[0],
                from: e[1],
                to: e[2]
              });
            };

            h.prototype.getTimeTicks = function (n, l, f, h) {
              var r = this,
                  d = [],
                  g = {};
              var c = new r.Date(l);
              var a = n.unitRange,
                  q = n.count || 1,
                  p;
              h = e(h, 1);

              if (m(l)) {
                r.set("Milliseconds", c, a >= v.second ? 0 : q * Math.floor(r.get("Milliseconds", c) / q));
                a >= v.second && r.set("Seconds", c, a >= v.minute ? 0 : q * Math.floor(r.get("Seconds", c) / q));
                a >= v.minute && r.set("Minutes", c, a >= v.hour ? 0 : q * Math.floor(r.get("Minutes", c) / q));
                a >= v.hour && r.set("Hours", c, a >= v.day ? 0 : q * Math.floor(r.get("Hours", c) / q));
                a >= v.day && r.set("Date", c, a >= v.month ? 1 : Math.max(1, q * Math.floor(r.get("Date", c) / q)));

                if (a >= v.month) {
                  r.set("Month", c, a >= v.year ? 0 : q * Math.floor(r.get("Month", c) / q));
                  var B = r.get("FullYear", c);
                }

                a >= v.year && r.set("FullYear", c, B - B % q);
                a === v.week && (B = r.get("Day", c), r.set("Date", c, r.get("Date", c) - B + h + (B < h ? -7 : 0)));
                B = r.get("FullYear", c);
                h = r.get("Month", c);
                var A = r.get("Date", c),
                    w = r.get("Hours", c);
                l = c.getTime();
                r.variableTimezone && (p = f - l > 4 * v.month || r.getTimezoneOffset(l) !== r.getTimezoneOffset(f));
                l = c.getTime();

                for (c = 1; l < f;) {
                  d.push(l), l = a === v.year ? r.makeTime(B + c * q, 0) : a === v.month ? r.makeTime(B, h + c * q) : !p || a !== v.day && a !== v.week ? p && a === v.hour && 1 < q ? r.makeTime(B, h, A, w + c * q) : l + a * q : r.makeTime(B, h, A + c * q * (a === v.day ? 1 : 7)), c++;
                }

                d.push(l);
                a <= v.hour && 1E4 > d.length && d.forEach(function (a) {
                  0 === a % 18E5 && "000000000" === r.dateFormat("%H%M%S%L", a) && (g[a] = "day");
                });
              }

              d.info = F(n, {
                higherRanks: g,
                totalRange: a * q
              });
              return d;
            };

            return h;
          }();

          f.Time = h;
          return f.Time;
        });
        N(m, "Core/Options.js", [m["Core/Globals.js"], m["Core/Color/Color.js"], m["Core/Time.js"], m["Core/Utilities.js"]], function (f, h, m, z) {
          var F = f.isTouchDevice,
              P = f.svg;
          h = h.parse;
          z = z.merge;
          "";
          f.defaultOptions = {
            colors: "#7cb5ec #434348 #90ed7d #f7a35c #8085e9 #f15c80 #e4d354 #2b908f #f45b5b #91e8e1".split(" "),
            symbols: ["circle", "diamond", "square", "triangle", "triangle-down"],
            lang: {
              loading: "Loading...",
              months: "January February March April May June July August September October November December".split(" "),
              shortMonths: "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),
              weekdays: "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),
              decimalPoint: ".",
              numericSymbols: "kMGTPE".split(""),
              resetZoom: "Reset zoom",
              resetZoomTitle: "Reset zoom level 1:1",
              thousandsSep: " "
            },
            global: {},
            time: {
              Date: void 0,
              getTimezoneOffset: void 0,
              timezone: void 0,
              timezoneOffset: 0,
              useUTC: !0
            },
            chart: {
              styledMode: !1,
              borderRadius: 0,
              colorCount: 10,
              defaultSeriesType: "line",
              ignoreHiddenSeries: !0,
              spacing: [10, 10, 15, 10],
              resetZoomButton: {
                theme: {
                  zIndex: 6
                },
                position: {
                  align: "right",
                  x: -10,
                  y: 10
                }
              },
              width: null,
              height: null,
              borderColor: "#335cad",
              backgroundColor: "#ffffff",
              plotBorderColor: "#cccccc"
            },
            title: {
              text: "Chart title",
              align: "center",
              margin: 15,
              widthAdjust: -44
            },
            subtitle: {
              text: "",
              align: "center",
              widthAdjust: -44
            },
            caption: {
              margin: 15,
              text: "",
              align: "left",
              verticalAlign: "bottom"
            },
            plotOptions: {},
            labels: {
              style: {
                position: "absolute",
                color: "#333333"
              }
            },
            legend: {
              enabled: !0,
              align: "center",
              alignColumns: !0,
              layout: "horizontal",
              labelFormatter: function labelFormatter() {
                return this.name;
              },
              borderColor: "#999999",
              borderRadius: 0,
              navigation: {
                activeColor: "#003399",
                inactiveColor: "#cccccc"
              },
              itemStyle: {
                color: "#333333",
                cursor: "pointer",
                fontSize: "12px",
                fontWeight: "bold",
                textOverflow: "ellipsis"
              },
              itemHoverStyle: {
                color: "#000000"
              },
              itemHiddenStyle: {
                color: "#cccccc"
              },
              shadow: !1,
              itemCheckboxStyle: {
                position: "absolute",
                width: "13px",
                height: "13px"
              },
              squareSymbol: !0,
              symbolPadding: 5,
              verticalAlign: "bottom",
              x: 0,
              y: 0,
              title: {
                style: {
                  fontWeight: "bold"
                }
              }
            },
            loading: {
              labelStyle: {
                fontWeight: "bold",
                position: "relative",
                top: "45%"
              },
              style: {
                position: "absolute",
                backgroundColor: "#ffffff",
                opacity: .5,
                textAlign: "center"
              }
            },
            tooltip: {
              enabled: !0,
              animation: P,
              borderRadius: 3,
              dateTimeLabelFormats: {
                millisecond: "%A, %b %e, %H:%M:%S.%L",
                second: "%A, %b %e, %H:%M:%S",
                minute: "%A, %b %e, %H:%M",
                hour: "%A, %b %e, %H:%M",
                day: "%A, %b %e, %Y",
                week: "Week from %A, %b %e, %Y",
                month: "%B %Y",
                year: "%Y"
              },
              footerFormat: "",
              padding: 8,
              snap: F ? 25 : 10,
              headerFormat: '<span style="font-size: 10px">{point.key}</span><br/>',
              pointFormat: "<span style=\"color:{point.color}\">\u25CF</span> {series.name}: <b>{point.y}</b><br/>",
              backgroundColor: h("#f7f7f7").setOpacity(.85).get(),
              borderWidth: 1,
              shadow: !0,
              style: {
                color: "#333333",
                cursor: "default",
                fontSize: "12px",
                whiteSpace: "nowrap"
              }
            },
            credits: {
              enabled: !0,
              href: "https://www.highcharts.com?credits",
              position: {
                align: "right",
                x: -10,
                verticalAlign: "bottom",
                y: -5
              },
              style: {
                cursor: "pointer",
                color: "#999999",
                fontSize: "9px"
              },
              text: "Highcharts.com"
            }
          };
          "";
          f.time = new m(z(f.defaultOptions.global, f.defaultOptions.time));

          f.dateFormat = function (h, m, y) {
            return f.time.dateFormat(h, m, y);
          };

          return {
            dateFormat: f.dateFormat,
            defaultOptions: f.defaultOptions,
            time: f.time
          };
        });
        N(m, "Core/Axis/Axis.js", [m["Core/Animation/AnimationUtilities.js"], m["Core/Color/Color.js"], m["Core/Globals.js"], m["Core/Axis/Tick.js"], m["Core/Utilities.js"], m["Core/Options.js"]], function (f, h, m, z, F, L) {
          var K = f.animObject,
              C = F.addEvent,
              y = F.arrayMax,
              e = F.arrayMin,
              I = F.clamp,
              v = F.correctFloat,
              x = F.defined,
              D = F.destroyObjectProperties,
              n = F.error,
              l = F.extend,
              J = F.fireEvent,
              w = F.format,
              r = F.getMagnitude,
              d = F.isArray,
              g = F.isFunction,
              c = F.isNumber,
              a = F.isString,
              q = F.merge,
              p = F.normalizeTickInterval,
              B = F.objectEach,
              A = F.pick,
              G = F.relativeLength,
              M = F.removeEvent,
              T = F.splat,
              Q = F.syncTimeout,
              O = L.defaultOptions,
              E = m.deg2rad;

          f = function () {
            function u(b, k) {
              this.zoomEnabled = this.width = this.visible = this.userOptions = this.translationSlope = this.transB = this.transA = this.top = this.ticks = this.tickRotCorr = this.tickPositions = this.tickmarkOffset = this.tickInterval = this.tickAmount = this.side = this.series = this.right = this.positiveValuesOnly = this.pos = this.pointRangePadding = this.pointRange = this.plotLinesAndBandsGroups = this.plotLinesAndBands = this.paddedTicks = this.overlap = this.options = this.oldMin = this.oldMax = this.offset = this.names = this.minPixelPadding = this.minorTicks = this.minorTickInterval = this.min = this.maxLabelLength = this.max = this.len = this.left = this.labelFormatter = this.labelEdge = this.isLinked = this.height = this.hasVisibleSeries = this.hasNames = this.coll = this.closestPointRange = this.chart = this.categories = this.bottom = this.alternateBands = void 0;
              this.init(b, k);
            }

            u.prototype.init = function (b, k) {
              var a = k.isX,
                  c = this;
              c.chart = b;
              c.horiz = b.inverted && !c.isZAxis ? !a : a;
              c.isXAxis = a;
              c.coll = c.coll || (a ? "xAxis" : "yAxis");
              J(this, "init", {
                userOptions: k
              });
              c.opposite = k.opposite;
              c.side = k.side || (c.horiz ? c.opposite ? 0 : 2 : c.opposite ? 1 : 3);
              c.setOptions(k);
              var d = this.options,
                  p = d.type;
              c.labelFormatter = d.labels.formatter || c.defaultLabelFormatter;
              c.userOptions = k;
              c.minPixelPadding = 0;
              c.reversed = d.reversed;
              c.visible = !1 !== d.visible;
              c.zoomEnabled = !1 !== d.zoomEnabled;
              c.hasNames = "category" === p || !0 === d.categories;
              c.categories = d.categories || c.hasNames;
              c.names || (c.names = [], c.names.keys = {});
              c.plotLinesAndBandsGroups = {};
              c.positiveValuesOnly = !!c.logarithmic;
              c.isLinked = x(d.linkedTo);
              c.ticks = {};
              c.labelEdge = [];
              c.minorTicks = {};
              c.plotLinesAndBands = [];
              c.alternateBands = {};
              c.len = 0;
              c.minRange = c.userMinRange = d.minRange || d.maxZoom;
              c.range = d.range;
              c.offset = d.offset || 0;
              c.max = null;
              c.min = null;
              c.crosshair = A(d.crosshair, T(b.options.tooltip.crosshairs)[a ? 0 : 1], !1);
              k = c.options.events;
              -1 === b.axes.indexOf(c) && (a ? b.axes.splice(b.xAxis.length, 0, c) : b.axes.push(c), b[c.coll].push(c));
              c.series = c.series || [];
              b.inverted && !c.isZAxis && a && "undefined" === typeof c.reversed && (c.reversed = !0);
              c.labelRotation = c.options.labels.rotation;
              B(k, function (b, k) {
                g(b) && C(c, k, b);
              });
              J(this, "afterInit");
            };

            u.prototype.setOptions = function (b) {
              this.options = q(u.defaultOptions, "yAxis" === this.coll && u.defaultYAxisOptions, [u.defaultTopAxisOptions, u.defaultRightAxisOptions, u.defaultBottomAxisOptions, u.defaultLeftAxisOptions][this.side], q(O[this.coll], b));
              J(this, "afterSetOptions", {
                userOptions: b
              });
            };

            u.prototype.defaultLabelFormatter = function () {
              var b = this.axis,
                  k = c(this.value) ? this.value : NaN,
                  a = b.chart.time,
                  d = b.categories,
                  g = this.dateTimeLabelFormat,
                  p = O.lang,
                  q = p.numericSymbols;
              p = p.numericSymbolMagnitude || 1E3;
              var e = q && q.length,
                  u = b.options.labels.format;
              b = b.logarithmic ? Math.abs(k) : b.tickInterval;
              var B = this.chart,
                  l = B.numberFormatter;
              if (u) var A = w(u, this, B);else if (d) A = "" + this.value;else if (g) A = a.dateFormat(g, k);else if (e && 1E3 <= b) for (; e-- && "undefined" === typeof A;) {
                a = Math.pow(p, e + 1), b >= a && 0 === 10 * k % a && null !== q[e] && 0 !== k && (A = l(k / a, -1) + q[e]);
              }
              "undefined" === typeof A && (A = 1E4 <= Math.abs(k) ? l(k, -1) : l(k, -1, void 0, ""));
              return A;
            };

            u.prototype.getSeriesExtremes = function () {
              var b = this,
                  k = b.chart,
                  a;
              J(this, "getSeriesExtremes", null, function () {
                b.hasVisibleSeries = !1;
                b.dataMin = b.dataMax = b.threshold = null;
                b.softThreshold = !b.isXAxis;
                b.stacking && b.stacking.buildStacks();
                b.series.forEach(function (t) {
                  if (t.visible || !k.options.chart.ignoreHiddenSeries) {
                    var d = t.options,
                        g = d.threshold;
                    b.hasVisibleSeries = !0;
                    b.positiveValuesOnly && 0 >= g && (g = null);

                    if (b.isXAxis) {
                      if (d = t.xData, d.length) {
                        d = b.logarithmic ? d.filter(b.validatePositiveValue) : d;
                        a = t.getXExtremes(d);
                        var p = a.min;
                        var q = a.max;
                        c(p) || p instanceof Date || (d = d.filter(c), a = t.getXExtremes(d), p = a.min, q = a.max);
                        d.length && (b.dataMin = Math.min(A(b.dataMin, p), p), b.dataMax = Math.max(A(b.dataMax, q), q));
                      }
                    } else if (t = t.applyExtremes(), c(t.dataMin) && (p = t.dataMin, b.dataMin = Math.min(A(b.dataMin, p), p)), c(t.dataMax) && (q = t.dataMax, b.dataMax = Math.max(A(b.dataMax, q), q)), x(g) && (b.threshold = g), !d.softThreshold || b.positiveValuesOnly) b.softThreshold = !1;
                  }
                });
              });
              J(this, "afterGetSeriesExtremes");
            };

            u.prototype.translate = function (b, a, t, d, g, p) {
              var k = this.linkedParent || this,
                  q = 1,
                  e = 0,
                  H = d ? k.oldTransA : k.transA;
              d = d ? k.oldMin : k.min;
              var u = k.minPixelPadding;
              g = (k.isOrdinal || k.brokenAxis && k.brokenAxis.hasBreaks || k.logarithmic && g) && k.lin2val;
              H || (H = k.transA);
              t && (q *= -1, e = k.len);
              k.reversed && (q *= -1, e -= q * (k.sector || k.len));
              a ? (b = (b * q + e - u) / H + d, g && (b = k.lin2val(b))) : (g && (b = k.val2lin(b)), b = c(d) ? q * (b - d) * H + e + q * u + (c(p) ? H * p : 0) : void 0);
              return b;
            };

            u.prototype.toPixels = function (b, k) {
              return this.translate(b, !1, !this.horiz, null, !0) + (k ? 0 : this.pos);
            };

            u.prototype.toValue = function (b, k) {
              return this.translate(b - (k ? 0 : this.pos), !0, !this.horiz, null, !0);
            };

            u.prototype.getPlotLinePath = function (b) {
              function k(b, a, k) {
                if ("pass" !== l && b < a || b > k) l ? b = I(b, a, k) : E = !0;
                return b;
              }

              var a = this,
                  d = a.chart,
                  g = a.left,
                  p = a.top,
                  q = b.old,
                  e = b.value,
                  u = b.translatedValue,
                  B = b.lineWidth,
                  l = b.force,
                  r,
                  n,
                  f,
                  h,
                  w = q && d.oldChartHeight || d.chartHeight,
                  G = q && d.oldChartWidth || d.chartWidth,
                  E,
                  v = a.transB;
              b = {
                value: e,
                lineWidth: B,
                old: q,
                force: l,
                acrossPanes: b.acrossPanes,
                translatedValue: u
              };
              J(this, "getPlotLinePath", b, function (b) {
                u = A(u, a.translate(e, null, null, q));
                u = I(u, -1E5, 1E5);
                r = f = Math.round(u + v);
                n = h = Math.round(w - u - v);
                c(u) ? a.horiz ? (n = p, h = w - a.bottom, r = f = k(r, g, g + a.width)) : (r = g, f = G - a.right, n = h = k(n, p, p + a.height)) : (E = !0, l = !1);
                b.path = E && !l ? null : d.renderer.crispLine([["M", r, n], ["L", f, h]], B || 1);
              });
              return b.path;
            };

            u.prototype.getLinearTickPositions = function (b, a, c) {
              var k = v(Math.floor(a / b) * b);
              c = v(Math.ceil(c / b) * b);
              var t = [],
                  d;
              v(k + b) === k && (d = 20);
              if (this.single) return [a];

              for (a = k; a <= c;) {
                t.push(a);
                a = v(a + b, d);
                if (a === g) break;
                var g = a;
              }

              return t;
            };

            u.prototype.getMinorTickInterval = function () {
              var b = this.options;
              return !0 === b.minorTicks ? A(b.minorTickInterval, "auto") : !1 === b.minorTicks ? null : b.minorTickInterval;
            };

            u.prototype.getMinorTickPositions = function () {
              var b = this.options,
                  a = this.tickPositions,
                  c = this.minorTickInterval,
                  d = [],
                  g = this.pointRangePadding || 0,
                  p = this.min - g;
              g = this.max + g;
              var q = g - p;

              if (q && q / c < this.len / 3) {
                var e = this.logarithmic;
                if (e) this.paddedTicks.forEach(function (b, a, k) {
                  a && d.push.apply(d, e.getLogTickPositions(c, k[a - 1], k[a], !0));
                });else if (this.dateTime && "auto" === this.getMinorTickInterval()) d = d.concat(this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(c), p, g, b.startOfWeek));else for (b = p + (a[0] - p) % c; b <= g && b !== d[0]; b += c) {
                  d.push(b);
                }
              }

              0 !== d.length && this.trimTicks(d);
              return d;
            };

            u.prototype.adjustForMinRange = function () {
              var b = this.options,
                  a = this.min,
                  c = this.max,
                  d = this.logarithmic,
                  g,
                  p,
                  q,
                  u,
                  B;
              this.isXAxis && "undefined" === typeof this.minRange && !d && (x(b.min) || x(b.max) ? this.minRange = null : (this.series.forEach(function (b) {
                u = b.xData;

                for (p = B = b.xIncrement ? 1 : u.length - 1; 0 < p; p--) {
                  if (q = u[p] - u[p - 1], "undefined" === typeof g || q < g) g = q;
                }
              }), this.minRange = Math.min(5 * g, this.dataMax - this.dataMin)));

              if (c - a < this.minRange) {
                var l = this.dataMax - this.dataMin >= this.minRange;
                var r = this.minRange;
                var n = (r - c + a) / 2;
                n = [a - n, A(b.min, a - n)];
                l && (n[2] = this.logarithmic ? this.logarithmic.log2lin(this.dataMin) : this.dataMin);
                a = y(n);
                c = [a + r, A(b.max, a + r)];
                l && (c[2] = d ? d.log2lin(this.dataMax) : this.dataMax);
                c = e(c);
                c - a < r && (n[0] = c - r, n[1] = A(b.min, c - r), a = y(n));
              }

              this.min = a;
              this.max = c;
            };

            u.prototype.getClosest = function () {
              var b;
              this.categories ? b = 1 : this.series.forEach(function (a) {
                var k = a.closestPointRange,
                    c = a.visible || !a.chart.options.chart.ignoreHiddenSeries;
                !a.noSharedTooltip && x(k) && c && (b = x(b) ? Math.min(b, k) : k);
              });
              return b;
            };

            u.prototype.nameToX = function (b) {
              var a = d(this.categories),
                  c = a ? this.categories : this.names,
                  g = b.options.x;
              b.series.requireSorting = !1;
              x(g) || (g = !1 === this.options.uniqueNames ? b.series.autoIncrement() : a ? c.indexOf(b.name) : A(c.keys[b.name], -1));

              if (-1 === g) {
                if (!a) var p = c.length;
              } else p = g;

              "undefined" !== typeof p && (this.names[p] = b.name, this.names.keys[b.name] = p);
              return p;
            };

            u.prototype.updateNames = function () {
              var b = this,
                  a = this.names;
              0 < a.length && (Object.keys(a.keys).forEach(function (b) {
                delete a.keys[b];
              }), a.length = 0, this.minRange = this.userMinRange, (this.series || []).forEach(function (a) {
                a.xIncrement = null;
                if (!a.points || a.isDirtyData) b.max = Math.max(b.max, a.xData.length - 1), a.processData(), a.generatePoints();
                a.data.forEach(function (k, c) {
                  if (k && k.options && "undefined" !== typeof k.name) {
                    var d = b.nameToX(k);
                    "undefined" !== typeof d && d !== k.x && (k.x = d, a.xData[c] = d);
                  }
                });
              }));
            };

            u.prototype.setAxisTranslation = function (b) {
              var k = this,
                  c = k.max - k.min,
                  d = k.axisPointRange || 0,
                  g = 0,
                  p = 0,
                  q = k.linkedParent,
                  e = !!k.categories,
                  u = k.transA,
                  B = k.isXAxis;

              if (B || e || d) {
                var l = k.getClosest();
                q ? (g = q.minPointOffset, p = q.pointRangePadding) : k.series.forEach(function (b) {
                  var c = e ? 1 : B ? A(b.options.pointRange, l, 0) : k.axisPointRange || 0,
                      t = b.options.pointPlacement;
                  d = Math.max(d, c);
                  if (!k.single || e) b = b.is("xrange") ? !B : B, g = Math.max(g, b && a(t) ? 0 : c / 2), p = Math.max(p, b && "on" === t ? 0 : c);
                });
                q = k.ordinal && k.ordinal.slope && l ? k.ordinal.slope / l : 1;
                k.minPointOffset = g *= q;
                k.pointRangePadding = p *= q;
                k.pointRange = Math.min(d, k.single && e ? 1 : c);
                B && (k.closestPointRange = l);
              }

              b && (k.oldTransA = u);
              k.translationSlope = k.transA = u = k.staticScale || k.len / (c + p || 1);
              k.transB = k.horiz ? k.left : k.bottom;
              k.minPixelPadding = u * g;
              J(this, "afterSetAxisTranslation");
            };

            u.prototype.minFromRange = function () {
              return this.max - this.range;
            };

            u.prototype.setTickInterval = function (b) {
              var a = this,
                  d = a.chart,
                  g = a.logarithmic,
                  q = a.options,
                  e = a.isXAxis,
                  u = a.isLinked,
                  B = q.maxPadding,
                  l = q.minPadding,
                  f = q.tickInterval,
                  h = q.tickPixelInterval,
                  w = a.categories,
                  G = c(a.threshold) ? a.threshold : null,
                  E = a.softThreshold;
              a.dateTime || w || u || this.getTickAmount();
              var O = A(a.userMin, q.min);
              var D = A(a.userMax, q.max);

              if (u) {
                a.linkedParent = d[a.coll][q.linkedTo];
                var M = a.linkedParent.getExtremes();
                a.min = A(M.min, M.dataMin);
                a.max = A(M.max, M.dataMax);
                q.type !== a.linkedParent.options.type && n(11, 1, d);
              } else {
                if (E && x(G)) if (a.dataMin >= G) M = G, l = 0;else if (a.dataMax <= G) {
                  var m = G;
                  B = 0;
                }
                a.min = A(O, M, a.dataMin);
                a.max = A(D, m, a.dataMax);
              }

              g && (a.positiveValuesOnly && !b && 0 >= Math.min(a.min, A(a.dataMin, a.min)) && n(10, 1, d), a.min = v(g.log2lin(a.min), 16), a.max = v(g.log2lin(a.max), 16));
              a.range && x(a.max) && (a.userMin = a.min = O = Math.max(a.dataMin, a.minFromRange()), a.userMax = D = a.max, a.range = null);
              J(a, "foundExtremes");
              a.beforePadding && a.beforePadding();
              a.adjustForMinRange();
              !(w || a.axisPointRange || a.stacking && a.stacking.usePercentage || u) && x(a.min) && x(a.max) && (d = a.max - a.min) && (!x(O) && l && (a.min -= d * l), !x(D) && B && (a.max += d * B));
              c(a.userMin) || (c(q.softMin) && q.softMin < a.min && (a.min = O = q.softMin), c(q.floor) && (a.min = Math.max(a.min, q.floor)));
              c(a.userMax) || (c(q.softMax) && q.softMax > a.max && (a.max = D = q.softMax), c(q.ceiling) && (a.max = Math.min(a.max, q.ceiling)));
              E && x(a.dataMin) && (G = G || 0, !x(O) && a.min < G && a.dataMin >= G ? a.min = a.options.minRange ? Math.min(G, a.max - a.minRange) : G : !x(D) && a.max > G && a.dataMax <= G && (a.max = a.options.minRange ? Math.max(G, a.min + a.minRange) : G));
              a.tickInterval = a.min === a.max || "undefined" === typeof a.min || "undefined" === typeof a.max ? 1 : u && !f && h === a.linkedParent.options.tickPixelInterval ? f = a.linkedParent.tickInterval : A(f, this.tickAmount ? (a.max - a.min) / Math.max(this.tickAmount - 1, 1) : void 0, w ? 1 : (a.max - a.min) * h / Math.max(a.len, h));
              e && !b && a.series.forEach(function (b) {
                b.processData(a.min !== a.oldMin || a.max !== a.oldMax);
              });
              a.setAxisTranslation(!0);
              J(this, "initialAxisTranslation");
              a.pointRange && !f && (a.tickInterval = Math.max(a.pointRange, a.tickInterval));
              b = A(q.minTickInterval, a.dateTime && !a.series.some(function (b) {
                return b.noSharedTooltip;
              }) ? a.closestPointRange : 0);
              !f && a.tickInterval < b && (a.tickInterval = b);
              a.dateTime || a.logarithmic || f || (a.tickInterval = p(a.tickInterval, void 0, r(a.tickInterval), A(q.allowDecimals, .5 > a.tickInterval || void 0 !== this.tickAmount), !!this.tickAmount));
              this.tickAmount || (a.tickInterval = a.unsquish());
              this.setTickPositions();
            };

            u.prototype.setTickPositions = function () {
              var b = this.options,
                  a = b.tickPositions;
              var c = this.getMinorTickInterval();
              var d = b.tickPositioner,
                  g = this.hasVerticalPanning(),
                  p = "colorAxis" === this.coll,
                  q = (p || !g) && b.startOnTick;
              g = (p || !g) && b.endOnTick;
              this.tickmarkOffset = this.categories && "between" === b.tickmarkPlacement && 1 === this.tickInterval ? .5 : 0;
              this.minorTickInterval = "auto" === c && this.tickInterval ? this.tickInterval / 5 : c;
              this.single = this.min === this.max && x(this.min) && !this.tickAmount && (parseInt(this.min, 10) === this.min || !1 !== b.allowDecimals);
              this.tickPositions = c = a && a.slice();
              !c && (this.ordinal && this.ordinal.positions || !((this.max - this.min) / this.tickInterval > Math.max(2 * this.len, 200)) ? c = this.dateTime ? this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(this.tickInterval, b.units), this.min, this.max, b.startOfWeek, this.ordinal && this.ordinal.positions, this.closestPointRange, !0) : this.logarithmic ? this.logarithmic.getLogTickPositions(this.tickInterval, this.min, this.max) : this.getLinearTickPositions(this.tickInterval, this.min, this.max) : (c = [this.min, this.max], n(19, !1, this.chart)), c.length > this.len && (c = [c[0], c.pop()], c[0] === c[1] && (c.length = 1)), this.tickPositions = c, d && (d = d.apply(this, [this.min, this.max]))) && (this.tickPositions = c = d);
              this.paddedTicks = c.slice(0);
              this.trimTicks(c, q, g);
              this.isLinked || (this.single && 2 > c.length && !this.categories && !this.series.some(function (b) {
                return b.is("heatmap") && "between" === b.options.pointPlacement;
              }) && (this.min -= .5, this.max += .5), a || d || this.adjustTickAmount());
              J(this, "afterSetTickPositions");
            };

            u.prototype.trimTicks = function (b, a, c) {
              var k = b[0],
                  d = b[b.length - 1],
                  t = !this.isOrdinal && this.minPointOffset || 0;
              J(this, "trimTicks");

              if (!this.isLinked) {
                if (a && -Infinity !== k) this.min = k;else for (; this.min - t > b[0];) {
                  b.shift();
                }
                if (c) this.max = d;else for (; this.max + t < b[b.length - 1];) {
                  b.pop();
                }
                0 === b.length && x(k) && !this.options.tickPositions && b.push((d + k) / 2);
              }
            };

            u.prototype.alignToOthers = function () {
              var b = {},
                  a,
                  c = this.options;
              !1 === this.chart.options.chart.alignTicks || !1 === c.alignTicks || !1 === c.startOnTick || !1 === c.endOnTick || this.logarithmic || this.chart[this.coll].forEach(function (k) {
                var c = k.options;
                c = [k.horiz ? c.left : c.top, c.width, c.height, c.pane].join();
                k.series.length && (b[c] ? a = !0 : b[c] = 1);
              });
              return a;
            };

            u.prototype.getTickAmount = function () {
              var b = this.options,
                  a = b.tickAmount,
                  c = b.tickPixelInterval;
              !x(b.tickInterval) && !a && this.len < c && !this.isRadial && !this.logarithmic && b.startOnTick && b.endOnTick && (a = 2);
              !a && this.alignToOthers() && (a = Math.ceil(this.len / c) + 1);
              4 > a && (this.finalTickAmt = a, a = 5);
              this.tickAmount = a;
            };

            u.prototype.adjustTickAmount = function () {
              var b = this.options,
                  a = this.tickInterval,
                  c = this.tickPositions,
                  d = this.tickAmount,
                  g = this.finalTickAmt,
                  p = c && c.length,
                  q = A(this.threshold, this.softThreshold ? 0 : null),
                  e;

              if (this.hasData()) {
                if (p < d) {
                  for (e = this.min; c.length < d;) {
                    c.length % 2 || e === q ? c.push(v(c[c.length - 1] + a)) : c.unshift(v(c[0] - a));
                  }

                  this.transA *= (p - 1) / (d - 1);
                  this.min = b.startOnTick ? c[0] : Math.min(this.min, c[0]);
                  this.max = b.endOnTick ? c[c.length - 1] : Math.max(this.max, c[c.length - 1]);
                } else p > d && (this.tickInterval *= 2, this.setTickPositions());

                if (x(g)) {
                  for (a = b = c.length; a--;) {
                    (3 === g && 1 === a % 2 || 2 >= g && 0 < a && a < b - 1) && c.splice(a, 1);
                  }

                  this.finalTickAmt = void 0;
                }
              }
            };

            u.prototype.setScale = function () {
              var b,
                  a = !1,
                  c = !1;
              this.series.forEach(function (b) {
                var k;
                a = a || b.isDirtyData || b.isDirty;
                c = c || (null === (k = b.xAxis) || void 0 === k ? void 0 : k.isDirty) || !1;
              });
              this.oldMin = this.min;
              this.oldMax = this.max;
              this.oldAxisLength = this.len;
              this.setAxisSize();
              (b = this.len !== this.oldAxisLength) || a || c || this.isLinked || this.forceRedraw || this.userMin !== this.oldUserMin || this.userMax !== this.oldUserMax || this.alignToOthers() ? (this.stacking && this.stacking.resetStacks(), this.forceRedraw = !1, this.getSeriesExtremes(), this.setTickInterval(), this.oldUserMin = this.userMin, this.oldUserMax = this.userMax, this.isDirty || (this.isDirty = b || this.min !== this.oldMin || this.max !== this.oldMax)) : this.stacking && this.stacking.cleanStacks();
              a && this.panningState && (this.panningState.isDirty = !0);
              J(this, "afterSetScale");
            };

            u.prototype.setExtremes = function (b, a, c, d, g) {
              var k = this,
                  t = k.chart;
              c = A(c, !0);
              k.series.forEach(function (b) {
                delete b.kdTree;
              });
              g = l(g, {
                min: b,
                max: a
              });
              J(k, "setExtremes", g, function () {
                k.userMin = b;
                k.userMax = a;
                k.eventArgs = g;
                c && t.redraw(d);
              });
            };

            u.prototype.zoom = function (b, a) {
              var k = this,
                  c = this.dataMin,
                  d = this.dataMax,
                  g = this.options,
                  p = Math.min(c, A(g.min, c)),
                  q = Math.max(d, A(g.max, d));
              b = {
                newMin: b,
                newMax: a
              };
              J(this, "zoom", b, function (b) {
                var a = b.newMin,
                    g = b.newMax;
                if (a !== k.min || g !== k.max) k.allowZoomOutside || (x(c) && (a < p && (a = p), a > q && (a = q)), x(d) && (g < p && (g = p), g > q && (g = q))), k.displayBtn = "undefined" !== typeof a || "undefined" !== typeof g, k.setExtremes(a, g, !1, void 0, {
                  trigger: "zoom"
                });
                b.zoomed = !0;
              });
              return b.zoomed;
            };

            u.prototype.setAxisSize = function () {
              var b = this.chart,
                  a = this.options,
                  c = a.offsets || [0, 0, 0, 0],
                  d = this.horiz,
                  g = this.width = Math.round(G(A(a.width, b.plotWidth - c[3] + c[1]), b.plotWidth)),
                  p = this.height = Math.round(G(A(a.height, b.plotHeight - c[0] + c[2]), b.plotHeight)),
                  q = this.top = Math.round(G(A(a.top, b.plotTop + c[0]), b.plotHeight, b.plotTop));
              a = this.left = Math.round(G(A(a.left, b.plotLeft + c[3]), b.plotWidth, b.plotLeft));
              this.bottom = b.chartHeight - p - q;
              this.right = b.chartWidth - g - a;
              this.len = Math.max(d ? g : p, 0);
              this.pos = d ? a : q;
            };

            u.prototype.getExtremes = function () {
              var b = this.logarithmic;
              return {
                min: b ? v(b.lin2log(this.min)) : this.min,
                max: b ? v(b.lin2log(this.max)) : this.max,
                dataMin: this.dataMin,
                dataMax: this.dataMax,
                userMin: this.userMin,
                userMax: this.userMax
              };
            };

            u.prototype.getThreshold = function (b) {
              var a = this.logarithmic,
                  c = a ? a.lin2log(this.min) : this.min;
              a = a ? a.lin2log(this.max) : this.max;
              null === b || -Infinity === b ? b = c : Infinity === b ? b = a : c > b ? b = c : a < b && (b = a);
              return this.translate(b, 0, 1, 0, 1);
            };

            u.prototype.autoLabelAlign = function (b) {
              var a = (A(b, 0) - 90 * this.side + 720) % 360;
              b = {
                align: "center"
              };
              J(this, "autoLabelAlign", b, function (b) {
                15 < a && 165 > a ? b.align = "right" : 195 < a && 345 > a && (b.align = "left");
              });
              return b.align;
            };

            u.prototype.tickSize = function (b) {
              var a = this.options,
                  c = a["tick" === b ? "tickLength" : "minorTickLength"],
                  d = A(a["tick" === b ? "tickWidth" : "minorTickWidth"], "tick" === b && this.isXAxis && !this.categories ? 1 : 0);

              if (d && c) {
                "inside" === a[b + "Position"] && (c = -c);
                var g = [c, d];
              }

              b = {
                tickSize: g
              };
              J(this, "afterTickSize", b);
              return b.tickSize;
            };

            u.prototype.labelMetrics = function () {
              var b = this.tickPositions && this.tickPositions[0] || 0;
              return this.chart.renderer.fontMetrics(this.options.labels.style && this.options.labels.style.fontSize, this.ticks[b] && this.ticks[b].label);
            };

            u.prototype.unsquish = function () {
              var b = this.options.labels,
                  a = this.horiz,
                  c = this.tickInterval,
                  d = c,
                  g = this.len / (((this.categories ? 1 : 0) + this.max - this.min) / c),
                  p,
                  q = b.rotation,
                  e = this.labelMetrics(),
                  u,
                  B = Number.MAX_VALUE,
                  l,
                  r = this.max - this.min,
                  n = function n(b) {
                var a = b / (g || 1);
                a = 1 < a ? Math.ceil(a) : 1;
                a * c > r && Infinity !== b && Infinity !== g && r && (a = Math.ceil(r / c));
                return v(a * c);
              };

              a ? (l = !b.staggerLines && !b.step && (x(q) ? [q] : g < A(b.autoRotationLimit, 80) && b.autoRotation)) && l.forEach(function (b) {
                if (b === q || b && -90 <= b && 90 >= b) {
                  u = n(Math.abs(e.h / Math.sin(E * b)));
                  var a = u + Math.abs(b / 360);
                  a < B && (B = a, p = b, d = u);
                }
              }) : b.step || (d = n(e.h));
              this.autoRotation = l;
              this.labelRotation = A(p, q);
              return d;
            };

            u.prototype.getSlotWidth = function (b) {
              var a,
                  d = this.chart,
                  g = this.horiz,
                  p = this.options.labels,
                  q = Math.max(this.tickPositions.length - (this.categories ? 0 : 1), 1),
                  e = d.margin[3];
              if (b && c(b.slotWidth)) return b.slotWidth;
              if (g && p && 2 > (p.step || 0)) return p.rotation ? 0 : (this.staggerLines || 1) * this.len / q;

              if (!g) {
                b = null === (a = null === p || void 0 === p ? void 0 : p.style) || void 0 === a ? void 0 : a.width;
                if (void 0 !== b) return parseInt(b, 10);
                if (e) return e - d.spacing[3];
              }

              return .33 * d.chartWidth;
            };

            u.prototype.renderUnsquish = function () {
              var b = this.chart,
                  k = b.renderer,
                  c = this.tickPositions,
                  d = this.ticks,
                  g = this.options.labels,
                  p = g && g.style || {},
                  q = this.horiz,
                  e = this.getSlotWidth(),
                  u = Math.max(1, Math.round(e - 2 * (g.padding || 5))),
                  B = {},
                  l = this.labelMetrics(),
                  r = g.style && g.style.textOverflow,
                  n = 0;
              a(g.rotation) || (B.rotation = g.rotation || 0);
              c.forEach(function (b) {
                b = d[b];
                b.movedLabel && b.replaceMovedLabel();
                b && b.label && b.label.textPxLength > n && (n = b.label.textPxLength);
              });
              this.maxLabelLength = n;
              if (this.autoRotation) n > u && n > l.h ? B.rotation = this.labelRotation : this.labelRotation = 0;else if (e) {
                var A = u;

                if (!r) {
                  var f = "clip";

                  for (u = c.length; !q && u--;) {
                    var h = c[u];
                    if (h = d[h].label) h.styles && "ellipsis" === h.styles.textOverflow ? h.css({
                      textOverflow: "clip"
                    }) : h.textPxLength > e && h.css({
                      width: e + "px"
                    }), h.getBBox().height > this.len / c.length - (l.h - l.f) && (h.specificTextOverflow = "ellipsis");
                  }
                }
              }
              B.rotation && (A = n > .5 * b.chartHeight ? .33 * b.chartHeight : n, r || (f = "ellipsis"));
              if (this.labelAlign = g.align || this.autoLabelAlign(this.labelRotation)) B.align = this.labelAlign;
              c.forEach(function (b) {
                var a = (b = d[b]) && b.label,
                    k = p.width,
                    c = {};
                a && (a.attr(B), b.shortenLabel ? b.shortenLabel() : A && !k && "nowrap" !== p.whiteSpace && (A < a.textPxLength || "SPAN" === a.element.tagName) ? (c.width = A + "px", r || (c.textOverflow = a.specificTextOverflow || f), a.css(c)) : a.styles && a.styles.width && !c.width && !k && a.css({
                  width: null
                }), delete a.specificTextOverflow, b.rotation = B.rotation);
              }, this);
              this.tickRotCorr = k.rotCorr(l.b, this.labelRotation || 0, 0 !== this.side);
            };

            u.prototype.hasData = function () {
              return this.series.some(function (b) {
                return b.hasData();
              }) || this.options.showEmpty && x(this.min) && x(this.max);
            };

            u.prototype.addTitle = function (b) {
              var a = this.chart.renderer,
                  c = this.horiz,
                  d = this.opposite,
                  g = this.options.title,
                  p,
                  e = this.chart.styledMode;
              this.axisTitle || ((p = g.textAlign) || (p = (c ? {
                low: "left",
                middle: "center",
                high: "right"
              } : {
                low: d ? "right" : "left",
                middle: "center",
                high: d ? "left" : "right"
              })[g.align]), this.axisTitle = a.text(g.text, 0, 0, g.useHTML).attr({
                zIndex: 7,
                rotation: g.rotation || 0,
                align: p
              }).addClass("highcharts-axis-title"), e || this.axisTitle.css(q(g.style)), this.axisTitle.add(this.axisGroup), this.axisTitle.isNew = !0);
              e || g.style.width || this.isRadial || this.axisTitle.css({
                width: this.len + "px"
              });
              this.axisTitle[b ? "show" : "hide"](b);
            };

            u.prototype.generateTick = function (b) {
              var a = this.ticks;
              a[b] ? a[b].addLabel() : a[b] = new z(this, b);
            };

            u.prototype.getOffset = function () {
              var b = this,
                  a = b.chart,
                  c = a.renderer,
                  d = b.options,
                  g = b.tickPositions,
                  p = b.ticks,
                  q = b.horiz,
                  e = b.side,
                  u = a.inverted && !b.isZAxis ? [1, 0, 3, 2][e] : e,
                  l,
                  n = 0,
                  r = 0,
                  f = d.title,
                  h = d.labels,
                  G = 0,
                  w = a.axisOffset;
              a = a.clipOffset;
              var E = [-1, 1, 1, -1][e],
                  v = d.className,
                  O = b.axisParent;
              var D = b.hasData();
              b.showAxis = l = D || A(d.showEmpty, !0);
              b.staggerLines = b.horiz && h.staggerLines;
              b.axisGroup || (b.gridGroup = c.g("grid").attr({
                zIndex: d.gridZIndex || 1
              }).addClass("highcharts-" + this.coll.toLowerCase() + "-grid " + (v || "")).add(O), b.axisGroup = c.g("axis").attr({
                zIndex: d.zIndex || 2
              }).addClass("highcharts-" + this.coll.toLowerCase() + " " + (v || "")).add(O), b.labelGroup = c.g("axis-labels").attr({
                zIndex: h.zIndex || 7
              }).addClass("highcharts-" + b.coll.toLowerCase() + "-labels " + (v || "")).add(O));
              D || b.isLinked ? (g.forEach(function (a, c) {
                b.generateTick(a, c);
              }), b.renderUnsquish(), b.reserveSpaceDefault = 0 === e || 2 === e || {
                1: "left",
                3: "right"
              }[e] === b.labelAlign, A(h.reserveSpace, "center" === b.labelAlign ? !0 : null, b.reserveSpaceDefault) && g.forEach(function (b) {
                G = Math.max(p[b].getLabelSize(), G);
              }), b.staggerLines && (G *= b.staggerLines), b.labelOffset = G * (b.opposite ? -1 : 1)) : B(p, function (b, a) {
                b.destroy();
                delete p[a];
              });

              if (f && f.text && !1 !== f.enabled && (b.addTitle(l), l && !1 !== f.reserveSpace)) {
                b.titleOffset = n = b.axisTitle.getBBox()[q ? "height" : "width"];
                var M = f.offset;
                r = x(M) ? 0 : A(f.margin, q ? 5 : 10);
              }

              b.renderLine();
              b.offset = E * A(d.offset, w[e] ? w[e] + (d.margin || 0) : 0);
              b.tickRotCorr = b.tickRotCorr || {
                x: 0,
                y: 0
              };
              c = 0 === e ? -b.labelMetrics().h : 2 === e ? b.tickRotCorr.y : 0;
              r = Math.abs(G) + r;
              G && (r = r - c + E * (q ? A(h.y, b.tickRotCorr.y + 8 * E) : h.x));
              b.axisTitleMargin = A(M, r);
              b.getMaxLabelDimensions && (b.maxLabelDimensions = b.getMaxLabelDimensions(p, g));
              q = this.tickSize("tick");
              w[e] = Math.max(w[e], b.axisTitleMargin + n + E * b.offset, r, g && g.length && q ? q[0] + E * b.offset : 0);
              d = d.offset ? 0 : 2 * Math.floor(b.axisLine.strokeWidth() / 2);
              a[u] = Math.max(a[u], d);
              J(this, "afterGetOffset");
            };

            u.prototype.getLinePath = function (b) {
              var a = this.chart,
                  c = this.opposite,
                  d = this.offset,
                  g = this.horiz,
                  p = this.left + (c ? this.width : 0) + d;
              d = a.chartHeight - this.bottom - (c ? this.height : 0) + d;
              c && (b *= -1);
              return a.renderer.crispLine([["M", g ? this.left : p, g ? d : this.top], ["L", g ? a.chartWidth - this.right : p, g ? d : a.chartHeight - this.bottom]], b);
            };

            u.prototype.renderLine = function () {
              this.axisLine || (this.axisLine = this.chart.renderer.path().addClass("highcharts-axis-line").add(this.axisGroup), this.chart.styledMode || this.axisLine.attr({
                stroke: this.options.lineColor,
                "stroke-width": this.options.lineWidth,
                zIndex: 7
              }));
            };

            u.prototype.getTitlePosition = function () {
              var b = this.horiz,
                  a = this.left,
                  c = this.top,
                  d = this.len,
                  g = this.options.title,
                  p = b ? a : c,
                  q = this.opposite,
                  e = this.offset,
                  u = g.x || 0,
                  B = g.y || 0,
                  l = this.axisTitle,
                  r = this.chart.renderer.fontMetrics(g.style && g.style.fontSize, l);
              l = Math.max(l.getBBox(null, 0).height - r.h - 1, 0);
              d = {
                low: p + (b ? 0 : d),
                middle: p + d / 2,
                high: p + (b ? d : 0)
              }[g.align];
              a = (b ? c + this.height : a) + (b ? 1 : -1) * (q ? -1 : 1) * this.axisTitleMargin + [-l, l, r.f, -l][this.side];
              b = {
                x: b ? d + u : a + (q ? this.width : 0) + e + u,
                y: b ? a + B - (q ? this.height : 0) + e : d + B
              };
              J(this, "afterGetTitlePosition", {
                titlePosition: b
              });
              return b;
            };

            u.prototype.renderMinorTick = function (b) {
              var a = this.chart.hasRendered && c(this.oldMin),
                  d = this.minorTicks;
              d[b] || (d[b] = new z(this, b, "minor"));
              a && d[b].isNew && d[b].render(null, !0);
              d[b].render(null, !1, 1);
            };

            u.prototype.renderTick = function (b, a) {
              var k,
                  d = this.isLinked,
                  g = this.ticks,
                  p = this.chart.hasRendered && c(this.oldMin);
              if (!d || b >= this.min && b <= this.max || (null === (k = this.grid) || void 0 === k ? 0 : k.isColumn)) g[b] || (g[b] = new z(this, b)), p && g[b].isNew && g[b].render(a, !0, -1), g[b].render(a);
            };

            u.prototype.render = function () {
              var b = this,
                  a = b.chart,
                  d = b.logarithmic,
                  g = b.options,
                  p = b.isLinked,
                  q = b.tickPositions,
                  e = b.axisTitle,
                  u = b.ticks,
                  l = b.minorTicks,
                  r = b.alternateBands,
                  n = g.stackLabels,
                  f = g.alternateGridColor,
                  A = b.tickmarkOffset,
                  h = b.axisLine,
                  G = b.showAxis,
                  w = K(a.renderer.globalAnimation),
                  E,
                  v;
              b.labelEdge.length = 0;
              b.overlap = !1;
              [u, l, r].forEach(function (b) {
                B(b, function (b) {
                  b.isActive = !1;
                });
              });
              if (b.hasData() || p) b.minorTickInterval && !b.categories && b.getMinorTickPositions().forEach(function (a) {
                b.renderMinorTick(a);
              }), q.length && (q.forEach(function (a, c) {
                b.renderTick(a, c);
              }), A && (0 === b.min || b.single) && (u[-1] || (u[-1] = new z(b, -1, null, !0)), u[-1].render(-1))), f && q.forEach(function (c, k) {
                v = "undefined" !== typeof q[k + 1] ? q[k + 1] + A : b.max - A;
                0 === k % 2 && c < b.max && v <= b.max + (a.polar ? -A : A) && (r[c] || (r[c] = new m.PlotLineOrBand(b)), E = c + A, r[c].options = {
                  from: d ? d.lin2log(E) : E,
                  to: d ? d.lin2log(v) : v,
                  color: f,
                  className: "highcharts-alternate-grid"
                }, r[c].render(), r[c].isActive = !0);
              }), b._addedPlotLB || ((g.plotLines || []).concat(g.plotBands || []).forEach(function (a) {
                b.addPlotBandOrLine(a);
              }), b._addedPlotLB = !0);
              [u, l, r].forEach(function (b) {
                var c,
                    k = [],
                    d = w.duration;
                B(b, function (b, a) {
                  b.isActive || (b.render(a, !1, 0), b.isActive = !1, k.push(a));
                });
                Q(function () {
                  for (c = k.length; c--;) {
                    b[k[c]] && !b[k[c]].isActive && (b[k[c]].destroy(), delete b[k[c]]);
                  }
                }, b !== r && a.hasRendered && d ? d : 0);
              });
              h && (h[h.isPlaced ? "animate" : "attr"]({
                d: this.getLinePath(h.strokeWidth())
              }), h.isPlaced = !0, h[G ? "show" : "hide"](G));
              e && G && (g = b.getTitlePosition(), c(g.y) ? (e[e.isNew ? "attr" : "animate"](g), e.isNew = !1) : (e.attr("y", -9999), e.isNew = !0));
              n && n.enabled && b.stacking && b.stacking.renderStackTotals();
              b.isDirty = !1;
              J(this, "afterRender");
            };

            u.prototype.redraw = function () {
              this.visible && (this.render(), this.plotLinesAndBands.forEach(function (b) {
                b.render();
              }));
              this.series.forEach(function (b) {
                b.isDirty = !0;
              });
            };

            u.prototype.getKeepProps = function () {
              return this.keepProps || u.keepProps;
            };

            u.prototype.destroy = function (b) {
              var a = this,
                  c = a.plotLinesAndBands,
                  d;
              J(this, "destroy", {
                keepEvents: b
              });
              b || M(a);
              [a.ticks, a.minorTicks, a.alternateBands].forEach(function (b) {
                D(b);
              });
              if (c) for (b = c.length; b--;) {
                c[b].destroy();
              }
              "axisLine axisTitle axisGroup gridGroup labelGroup cross scrollbar".split(" ").forEach(function (b) {
                a[b] && (a[b] = a[b].destroy());
              });

              for (d in a.plotLinesAndBandsGroups) {
                a.plotLinesAndBandsGroups[d] = a.plotLinesAndBandsGroups[d].destroy();
              }

              B(a, function (b, c) {
                -1 === a.getKeepProps().indexOf(c) && delete a[c];
              });
            };

            u.prototype.drawCrosshair = function (b, a) {
              var c = this.crosshair,
                  k = A(c.snap, !0),
                  d,
                  g = this.cross,
                  p = this.chart;
              J(this, "drawCrosshair", {
                e: b,
                point: a
              });
              b || (b = this.cross && this.cross.e);

              if (this.crosshair && !1 !== (x(a) || !k)) {
                k ? x(a) && (d = A("colorAxis" !== this.coll ? a.crosshairPos : null, this.isXAxis ? a.plotX : this.len - a.plotY)) : d = b && (this.horiz ? b.chartX - this.pos : this.len - b.chartY + this.pos);

                if (x(d)) {
                  var q = {
                    value: a && (this.isXAxis ? a.x : A(a.stackY, a.y)),
                    translatedValue: d
                  };
                  p.polar && l(q, {
                    isCrosshair: !0,
                    chartX: b && b.chartX,
                    chartY: b && b.chartY,
                    point: a
                  });
                  q = this.getPlotLinePath(q) || null;
                }

                if (!x(q)) {
                  this.hideCrosshair();
                  return;
                }

                k = this.categories && !this.isRadial;
                g || (this.cross = g = p.renderer.path().addClass("highcharts-crosshair highcharts-crosshair-" + (k ? "category " : "thin ") + c.className).attr({
                  zIndex: A(c.zIndex, 2)
                }).add(), p.styledMode || (g.attr({
                  stroke: c.color || (k ? h.parse("#ccd6eb").setOpacity(.25).get() : "#cccccc"),
                  "stroke-width": A(c.width, 1)
                }).css({
                  "pointer-events": "none"
                }), c.dashStyle && g.attr({
                  dashstyle: c.dashStyle
                })));
                g.show().attr({
                  d: q
                });
                k && !c.width && g.attr({
                  "stroke-width": this.transA
                });
                this.cross.e = b;
              } else this.hideCrosshair();

              J(this, "afterDrawCrosshair", {
                e: b,
                point: a
              });
            };

            u.prototype.hideCrosshair = function () {
              this.cross && this.cross.hide();
              J(this, "afterHideCrosshair");
            };

            u.prototype.hasVerticalPanning = function () {
              var b, a;
              return /y/.test((null === (a = null === (b = this.chart.options.chart) || void 0 === b ? void 0 : b.panning) || void 0 === a ? void 0 : a.type) || "");
            };

            u.prototype.validatePositiveValue = function (b) {
              return c(b) && 0 < b;
            };

            u.defaultOptions = {
              dateTimeLabelFormats: {
                millisecond: {
                  main: "%H:%M:%S.%L",
                  range: !1
                },
                second: {
                  main: "%H:%M:%S",
                  range: !1
                },
                minute: {
                  main: "%H:%M",
                  range: !1
                },
                hour: {
                  main: "%H:%M",
                  range: !1
                },
                day: {
                  main: "%e. %b"
                },
                week: {
                  main: "%e. %b"
                },
                month: {
                  main: "%b '%y"
                },
                year: {
                  main: "%Y"
                }
              },
              endOnTick: !1,
              labels: {
                enabled: !0,
                indentation: 10,
                x: 0,
                style: {
                  color: "#666666",
                  cursor: "default",
                  fontSize: "11px"
                }
              },
              maxPadding: .01,
              minorTickLength: 2,
              minorTickPosition: "outside",
              minPadding: .01,
              showEmpty: !0,
              startOfWeek: 1,
              startOnTick: !1,
              tickLength: 10,
              tickPixelInterval: 100,
              tickmarkPlacement: "between",
              tickPosition: "outside",
              title: {
                align: "middle",
                style: {
                  color: "#666666"
                }
              },
              type: "linear",
              minorGridLineColor: "#f2f2f2",
              minorGridLineWidth: 1,
              minorTickColor: "#999999",
              lineColor: "#ccd6eb",
              lineWidth: 1,
              gridLineColor: "#e6e6e6",
              tickColor: "#ccd6eb"
            };
            u.defaultYAxisOptions = {
              endOnTick: !0,
              maxPadding: .05,
              minPadding: .05,
              tickPixelInterval: 72,
              showLastLabel: !0,
              labels: {
                x: -8
              },
              startOnTick: !0,
              title: {
                rotation: 270,
                text: "Values"
              },
              stackLabels: {
                animation: {},
                allowOverlap: !1,
                enabled: !1,
                crop: !0,
                overflow: "justify",
                formatter: function formatter() {
                  var b = this.axis.chart.numberFormatter;
                  return b(this.total, -1);
                },
                style: {
                  color: "#000000",
                  fontSize: "11px",
                  fontWeight: "bold",
                  textOutline: "1px contrast"
                }
              },
              gridLineWidth: 1,
              lineWidth: 0
            };
            u.defaultLeftAxisOptions = {
              labels: {
                x: -15
              },
              title: {
                rotation: 270
              }
            };
            u.defaultRightAxisOptions = {
              labels: {
                x: 15
              },
              title: {
                rotation: 90
              }
            };
            u.defaultBottomAxisOptions = {
              labels: {
                autoRotation: [-45],
                x: 0
              },
              margin: 15,
              title: {
                rotation: 0
              }
            };
            u.defaultTopAxisOptions = {
              labels: {
                autoRotation: [-45],
                x: 0
              },
              margin: 15,
              title: {
                rotation: 0
              }
            };
            u.keepProps = "extKey hcEvents names series userMax userMin".split(" ");
            return u;
          }();

          m.Axis = f;
          return m.Axis;
        });
        N(m, "Core/Axis/DateTimeAxis.js", [m["Core/Axis/Axis.js"], m["Core/Utilities.js"]], function (f, h) {
          var m = h.addEvent,
              z = h.getMagnitude,
              F = h.normalizeTickInterval,
              L = h.timeUnits,
              K = function () {
            function f(f) {
              this.axis = f;
            }

            f.prototype.normalizeTimeTickInterval = function (f, e) {
              var h = e || [["millisecond", [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]], ["second", [1, 2, 5, 10, 15, 30]], ["minute", [1, 2, 5, 10, 15, 30]], ["hour", [1, 2, 3, 4, 6, 8, 12]], ["day", [1, 2]], ["week", [1, 2]], ["month", [1, 2, 3, 4, 6]], ["year", null]];
              e = h[h.length - 1];
              var v = L[e[0]],
                  x = e[1],
                  D;

              for (D = 0; D < h.length && !(e = h[D], v = L[e[0]], x = e[1], h[D + 1] && f <= (v * x[x.length - 1] + L[h[D + 1][0]]) / 2); D++) {
                ;
              }

              v === L.year && f < 5 * v && (x = [1, 2, 5]);
              f = F(f / v, x, "year" === e[0] ? Math.max(z(f / v), 1) : 1);
              return {
                unitRange: v,
                count: f,
                unitName: e[0]
              };
            };

            return f;
          }();

          h = function () {
            function f() {}

            f.compose = function (f) {
              f.keepProps.push("dateTime");

              f.prototype.getTimeTicks = function () {
                return this.chart.time.getTimeTicks.apply(this.chart.time, arguments);
              };

              m(f, "init", function (e) {
                "datetime" !== e.userOptions.type ? this.dateTime = void 0 : this.dateTime || (this.dateTime = new K(this));
              });
            };

            f.AdditionsClass = K;
            return f;
          }();

          h.compose(f);
          return h;
        });
        N(m, "Core/Axis/LogarithmicAxis.js", [m["Core/Axis/Axis.js"], m["Core/Utilities.js"]], function (f, h) {
          var m = h.addEvent,
              z = h.getMagnitude,
              F = h.normalizeTickInterval,
              L = h.pick,
              K = function () {
            function f(f) {
              this.axis = f;
            }

            f.prototype.getLogTickPositions = function (f, e, h, v) {
              var x = this.axis,
                  D = x.len,
                  n = x.options,
                  l = [];
              v || (this.minorAutoInterval = void 0);
              if (.5 <= f) f = Math.round(f), l = x.getLinearTickPositions(f, e, h);else if (.08 <= f) {
                n = Math.floor(e);
                var m, w;

                for (D = .3 < f ? [1, 2, 4] : .15 < f ? [1, 2, 4, 6, 8] : [1, 2, 3, 4, 5, 6, 7, 8, 9]; n < h + 1 && !w; n++) {
                  var r = D.length;

                  for (m = 0; m < r && !w; m++) {
                    var d = this.log2lin(this.lin2log(n) * D[m]);
                    d > e && (!v || g <= h) && "undefined" !== typeof g && l.push(g);
                    g > h && (w = !0);
                    var g = d;
                  }
                }
              } else e = this.lin2log(e), h = this.lin2log(h), f = v ? x.getMinorTickInterval() : n.tickInterval, f = L("auto" === f ? null : f, this.minorAutoInterval, n.tickPixelInterval / (v ? 5 : 1) * (h - e) / ((v ? D / x.tickPositions.length : D) || 1)), f = F(f, void 0, z(f)), l = x.getLinearTickPositions(f, e, h).map(this.log2lin), v || (this.minorAutoInterval = f / 5);
              v || (x.tickInterval = f);
              return l;
            };

            f.prototype.lin2log = function (f) {
              return Math.pow(10, f);
            };

            f.prototype.log2lin = function (f) {
              return Math.log(f) / Math.LN10;
            };

            return f;
          }();

          h = function () {
            function f() {}

            f.compose = function (f) {
              f.keepProps.push("logarithmic");
              var e = f.prototype,
                  h = K.prototype;
              e.log2lin = h.log2lin;
              e.lin2log = h.lin2log;
              m(f, "init", function (e) {
                var f = this.logarithmic;
                "logarithmic" !== e.userOptions.type ? this.logarithmic = void 0 : (f || (f = this.logarithmic = new K(this)), this.log2lin !== f.log2lin && (f.log2lin = this.log2lin.bind(this)), this.lin2log !== f.lin2log && (f.lin2log = this.lin2log.bind(this)));
              });
              m(f, "afterInit", function () {
                var e = this.logarithmic;
                e && (this.lin2val = function (f) {
                  return e.lin2log(f);
                }, this.val2lin = function (f) {
                  return e.log2lin(f);
                });
              });
            };

            return f;
          }();

          h.compose(f);
          return h;
        });
        N(m, "Core/Axis/PlotLineOrBand.js", [m["Core/Axis/Axis.js"], m["Core/Globals.js"], m["Core/Utilities.js"]], function (f, h, m) {
          var z = m.arrayMax,
              F = m.arrayMin,
              P = m.defined,
              K = m.destroyObjectProperties,
              C = m.erase,
              y = m.extend,
              e = m.merge,
              I = m.objectEach,
              v = m.pick;

          m = function () {
            function f(e, f) {
              this.axis = e;
              f && (this.options = f, this.id = f.id);
            }

            f.prototype.render = function () {
              h.fireEvent(this, "render");
              var f = this,
                  n = f.axis,
                  l = n.horiz,
                  m = n.logarithmic,
                  w = f.options,
                  r = w.label,
                  d = f.label,
                  g = w.to,
                  c = w.from,
                  a = w.value,
                  q = P(c) && P(g),
                  p = P(a),
                  B = f.svgElem,
                  A = !B,
                  G = [],
                  M = w.color,
                  x = v(w.zIndex, 0),
                  Q = w.events;
              G = {
                "class": "highcharts-plot-" + (q ? "band " : "line ") + (w.className || "")
              };
              var O = {},
                  E = n.chart.renderer,
                  u = q ? "bands" : "lines";
              m && (c = m.log2lin(c), g = m.log2lin(g), a = m.log2lin(a));
              n.chart.styledMode || (p ? (G.stroke = M || "#999999", G["stroke-width"] = v(w.width, 1), w.dashStyle && (G.dashstyle = w.dashStyle)) : q && (G.fill = M || "#e6ebf5", w.borderWidth && (G.stroke = w.borderColor, G["stroke-width"] = w.borderWidth)));
              O.zIndex = x;
              u += "-" + x;
              (m = n.plotLinesAndBandsGroups[u]) || (n.plotLinesAndBandsGroups[u] = m = E.g("plot-" + u).attr(O).add());
              A && (f.svgElem = B = E.path().attr(G).add(m));
              if (p) G = n.getPlotLinePath({
                value: a,
                lineWidth: B.strokeWidth(),
                acrossPanes: w.acrossPanes
              });else if (q) G = n.getPlotBandPath(c, g, w);else return;
              !f.eventsAdded && Q && (I(Q, function (b, a) {
                B.on(a, function (b) {
                  Q[a].apply(f, [b]);
                });
              }), f.eventsAdded = !0);
              (A || !B.d) && G && G.length ? B.attr({
                d: G
              }) : B && (G ? (B.show(!0), B.animate({
                d: G
              })) : B.d && (B.hide(), d && (f.label = d = d.destroy())));
              r && (P(r.text) || P(r.formatter)) && G && G.length && 0 < n.width && 0 < n.height && !G.isFlat ? (r = e({
                align: l && q && "center",
                x: l ? !q && 4 : 10,
                verticalAlign: !l && q && "middle",
                y: l ? q ? 16 : 10 : q ? 6 : -4,
                rotation: l && !q && 90
              }, r), this.renderLabel(r, G, q, x)) : d && d.hide();
              return f;
            };

            f.prototype.renderLabel = function (e, f, l, h) {
              var n = this.label,
                  r = this.axis.chart.renderer;
              n || (n = {
                align: e.textAlign || e.align,
                rotation: e.rotation,
                "class": "highcharts-plot-" + (l ? "band" : "line") + "-label " + (e.className || "")
              }, n.zIndex = h, h = this.getLabelText(e), this.label = n = r.text(h, 0, 0, e.useHTML).attr(n).add(), this.axis.chart.styledMode || n.css(e.style));
              r = f.xBounds || [f[0][1], f[1][1], l ? f[2][1] : f[0][1]];
              f = f.yBounds || [f[0][2], f[1][2], l ? f[2][2] : f[0][2]];
              l = F(r);
              h = F(f);
              n.align(e, !1, {
                x: l,
                y: h,
                width: z(r) - l,
                height: z(f) - h
              });
              n.show(!0);
            };

            f.prototype.getLabelText = function (e) {
              return P(e.formatter) ? e.formatter.call(this) : e.text;
            };

            f.prototype.destroy = function () {
              C(this.axis.plotLinesAndBands, this);
              delete this.axis;
              K(this);
            };

            return f;
          }();

          y(f.prototype, {
            getPlotBandPath: function getPlotBandPath(e, f, n) {
              void 0 === n && (n = this.options);
              var l = this.getPlotLinePath({
                value: f,
                force: !0,
                acrossPanes: n.acrossPanes
              });
              n = this.getPlotLinePath({
                value: e,
                force: !0,
                acrossPanes: n.acrossPanes
              });
              var h = [],
                  w = this.horiz,
                  r = 1;
              e = e < this.min && f < this.min || e > this.max && f > this.max;

              if (n && l) {
                if (e) {
                  var d = n.toString() === l.toString();
                  r = 0;
                }

                for (e = 0; e < n.length; e += 2) {
                  f = n[e];
                  var g = n[e + 1],
                      c = l[e],
                      a = l[e + 1];
                  "M" !== f[0] && "L" !== f[0] || "M" !== g[0] && "L" !== g[0] || "M" !== c[0] && "L" !== c[0] || "M" !== a[0] && "L" !== a[0] || (w && c[1] === f[1] ? (c[1] += r, a[1] += r) : w || c[2] !== f[2] || (c[2] += r, a[2] += r), h.push(["M", f[1], f[2]], ["L", g[1], g[2]], ["L", a[1], a[2]], ["L", c[1], c[2]], ["Z"]));
                  h.isFlat = d;
                }
              }

              return h;
            },
            addPlotBand: function addPlotBand(e) {
              return this.addPlotBandOrLine(e, "plotBands");
            },
            addPlotLine: function addPlotLine(e) {
              return this.addPlotBandOrLine(e, "plotLines");
            },
            addPlotBandOrLine: function addPlotBandOrLine(e, f) {
              var n = new h.PlotLineOrBand(this, e),
                  l = this.userOptions;
              this.visible && (n = n.render());

              if (n) {
                if (f) {
                  var v = l[f] || [];
                  v.push(e);
                  l[f] = v;
                }

                this.plotLinesAndBands.push(n);
                this._addedPlotLB = !0;
              }

              return n;
            },
            removePlotBandOrLine: function removePlotBandOrLine(e) {
              for (var f = this.plotLinesAndBands, n = this.options, l = this.userOptions, h = f.length; h--;) {
                f[h].id === e && f[h].destroy();
              }

              [n.plotLines || [], l.plotLines || [], n.plotBands || [], l.plotBands || []].forEach(function (f) {
                for (h = f.length; h--;) {
                  (f[h] || {}).id === e && C(f, f[h]);
                }
              });
            },
            removePlotBand: function removePlotBand(e) {
              this.removePlotBandOrLine(e);
            },
            removePlotLine: function removePlotLine(e) {
              this.removePlotBandOrLine(e);
            }
          });
          h.PlotLineOrBand = m;
          return h.PlotLineOrBand;
        });
        N(m, "Core/Tooltip.js", [m["Core/Globals.js"], m["Core/Utilities.js"]], function (f, h) {
          var m = f.doc,
              z = h.clamp,
              F = h.css,
              L = h.defined,
              K = h.discardElement,
              C = h.extend,
              y = h.fireEvent,
              e = h.format,
              I = h.isNumber,
              v = h.isString,
              x = h.merge,
              D = h.pick,
              n = h.splat,
              l = h.syncTimeout,
              J = h.timeUnits;
          "";

          var w = function () {
            function r(d, g) {
              this.container = void 0;
              this.crosshairs = [];
              this.distance = 0;
              this.isHidden = !0;
              this.isSticky = !1;
              this.now = {};
              this.options = {};
              this.outside = !1;
              this.chart = d;
              this.init(d, g);
            }

            r.prototype.applyFilter = function () {
              var d = this.chart;
              d.renderer.definition({
                tagName: "filter",
                id: "drop-shadow-" + d.index,
                opacity: .5,
                children: [{
                  tagName: "feGaussianBlur",
                  "in": "SourceAlpha",
                  stdDeviation: 1
                }, {
                  tagName: "feOffset",
                  dx: 1,
                  dy: 1
                }, {
                  tagName: "feComponentTransfer",
                  children: [{
                    tagName: "feFuncA",
                    type: "linear",
                    slope: .3
                  }]
                }, {
                  tagName: "feMerge",
                  children: [{
                    tagName: "feMergeNode"
                  }, {
                    tagName: "feMergeNode",
                    "in": "SourceGraphic"
                  }]
                }]
              });
              d.renderer.definition({
                tagName: "style",
                textContent: ".highcharts-tooltip-" + d.index + "{filter:url(#drop-shadow-" + d.index + ")}"
              });
            };

            r.prototype.bodyFormatter = function (d) {
              return d.map(function (d) {
                var c = d.series.tooltipOptions;
                return (c[(d.point.formatPrefix || "point") + "Formatter"] || d.point.tooltipFormatter).call(d.point, c[(d.point.formatPrefix || "point") + "Format"] || "");
              });
            };

            r.prototype.cleanSplit = function (d) {
              this.chart.series.forEach(function (g) {
                var c = g && g.tt;
                c && (!c.isActive || d ? g.tt = c.destroy() : c.isActive = !1);
              });
            };

            r.prototype.defaultFormatter = function (d) {
              var g = this.points || n(this);
              var c = [d.tooltipFooterHeaderFormatter(g[0])];
              c = c.concat(d.bodyFormatter(g));
              c.push(d.tooltipFooterHeaderFormatter(g[0], !0));
              return c;
            };

            r.prototype.destroy = function () {
              this.label && (this.label = this.label.destroy());
              this.split && this.tt && (this.cleanSplit(this.chart, !0), this.tt = this.tt.destroy());
              this.renderer && (this.renderer = this.renderer.destroy(), K(this.container));
              h.clearTimeout(this.hideTimer);
              h.clearTimeout(this.tooltipTimeout);
            };

            r.prototype.getAnchor = function (d, g) {
              var c = this.chart,
                  a = c.pointer,
                  q = c.inverted,
                  p = c.plotTop,
                  e = c.plotLeft,
                  f = 0,
                  l = 0,
                  r,
                  h;
              d = n(d);
              this.followPointer && g ? ("undefined" === typeof g.chartX && (g = a.normalize(g)), d = [g.chartX - e, g.chartY - p]) : d[0].tooltipPos ? d = d[0].tooltipPos : (d.forEach(function (a) {
                r = a.series.yAxis;
                h = a.series.xAxis;
                f += a.plotX + (!q && h ? h.left - e : 0);
                l += (a.plotLow ? (a.plotLow + a.plotHigh) / 2 : a.plotY) + (!q && r ? r.top - p : 0);
              }), f /= d.length, l /= d.length, d = [q ? c.plotWidth - l : f, this.shared && !q && 1 < d.length && g ? g.chartY - p : q ? c.plotHeight - f : l]);
              return d.map(Math.round);
            };

            r.prototype.getDateFormat = function (d, g, c, a) {
              var q = this.chart.time,
                  p = q.dateFormat("%m-%d %H:%M:%S.%L", g),
                  e = {
                millisecond: 15,
                second: 12,
                minute: 9,
                hour: 6,
                day: 3
              },
                  f = "millisecond";

              for (l in J) {
                if (d === J.week && +q.dateFormat("%w", g) === c && "00:00:00.000" === p.substr(6)) {
                  var l = "week";
                  break;
                }

                if (J[l] > d) {
                  l = f;
                  break;
                }

                if (e[l] && p.substr(e[l]) !== "01-01 00:00:00.000".substr(e[l])) break;
                "week" !== l && (f = l);
              }

              if (l) var r = q.resolveDTLFormat(a[l]).main;
              return r;
            };

            r.prototype.getLabel = function () {
              var d,
                  g,
                  c = this,
                  a = this.chart.renderer,
                  q = this.chart.styledMode,
                  p = this.options,
                  e = "tooltip" + (L(p.className) ? " " + p.className : ""),
                  l = (null === (d = p.style) || void 0 === d ? void 0 : d.pointerEvents) || (!this.followPointer && p.stickOnContact ? "auto" : "none"),
                  r;

              d = function d() {
                c.inContact = !0;
              };

              var n = function n() {
                var a = c.chart.hoverSeries;
                c.inContact = !1;
                if (a && a.onMouseOut) a.onMouseOut();
              };

              if (!this.label) {
                this.outside && (this.container = r = f.doc.createElement("div"), r.className = "highcharts-tooltip-container", F(r, {
                  position: "absolute",
                  top: "1px",
                  pointerEvents: l,
                  zIndex: 3
                }), f.doc.body.appendChild(r), this.renderer = a = new f.Renderer(r, 0, 0, null === (g = this.chart.options.chart) || void 0 === g ? void 0 : g.style, void 0, void 0, a.styledMode));
                this.split ? this.label = a.g(e) : (this.label = a.label("", 0, 0, p.shape || "callout", null, null, p.useHTML, null, e).attr({
                  padding: p.padding,
                  r: p.borderRadius
                }), q || this.label.attr({
                  fill: p.backgroundColor,
                  "stroke-width": p.borderWidth
                }).css(p.style).css({
                  pointerEvents: l
                }).shadow(p.shadow));
                q && (this.applyFilter(), this.label.addClass("highcharts-tooltip-" + this.chart.index));

                if (c.outside && !c.split) {
                  var h = this.label,
                      w = h.xSetter,
                      v = h.ySetter;

                  h.xSetter = function (a) {
                    w.call(h, c.distance);
                    r.style.left = a + "px";
                  };

                  h.ySetter = function (a) {
                    v.call(h, c.distance);
                    r.style.top = a + "px";
                  };
                }

                this.label.on("mouseenter", d).on("mouseleave", n).attr({
                  zIndex: 8
                }).add();
              }

              return this.label;
            };

            r.prototype.getPosition = function (d, g, c) {
              var a = this.chart,
                  q = this.distance,
                  p = {},
                  e = a.inverted && c.h || 0,
                  f,
                  l = this.outside,
                  r = l ? m.documentElement.clientWidth - 2 * q : a.chartWidth,
                  n = l ? Math.max(m.body.scrollHeight, m.documentElement.scrollHeight, m.body.offsetHeight, m.documentElement.offsetHeight, m.documentElement.clientHeight) : a.chartHeight,
                  h = a.pointer.getChartPosition(),
                  w = a.containerScaling,
                  E = function E(b) {
                return w ? b * w.scaleX : b;
              },
                  u = function u(b) {
                return w ? b * w.scaleY : b;
              },
                  b = function b(_b2) {
                var k = "x" === _b2;
                return [_b2, k ? r : n, k ? d : g].concat(l ? [k ? E(d) : u(g), k ? h.left - q + E(c.plotX + a.plotLeft) : h.top - q + u(c.plotY + a.plotTop), 0, k ? r : n] : [k ? d : g, k ? c.plotX + a.plotLeft : c.plotY + a.plotTop, k ? a.plotLeft : a.plotTop, k ? a.plotLeft + a.plotWidth : a.plotTop + a.plotHeight]);
              },
                  k = b("y"),
                  t = b("x"),
                  H = !this.followPointer && D(c.ttBelow, !a.inverted === !!c.negative),
                  v = function v(b, a, c, k, d, g, t) {
                var f = "y" === b ? u(q) : E(q),
                    l = (c - k) / 2,
                    r = k < d - q,
                    B = d + q + k < a,
                    n = d - f - c + l;
                d = d + f - l;
                if (H && B) p[b] = d;else if (!H && r) p[b] = n;else if (r) p[b] = Math.min(t - k, 0 > n - e ? n : n - e);else if (B) p[b] = Math.max(g, d + e + c > a ? d : d + e);else return !1;
              },
                  U = function U(b, a, c, k, d) {
                var g;
                d < q || d > a - q ? g = !1 : p[b] = d < c / 2 ? 1 : d > a - k / 2 ? a - k - 2 : d - c / 2;
                return g;
              },
                  x = function x(b) {
                var a = k;
                k = t;
                t = a;
                f = b;
              },
                  I = function I() {
                !1 !== v.apply(0, k) ? !1 !== U.apply(0, t) || f || (x(!0), I()) : f ? p.x = p.y = 0 : (x(!0), I());
              };

              (a.inverted || 1 < this.len) && x();
              I();
              return p;
            };

            r.prototype.getXDateFormat = function (d, g, c) {
              g = g.dateTimeLabelFormats;
              var a = c && c.closestPointRange;
              return (a ? this.getDateFormat(a, d.x, c.options.startOfWeek, g) : g.day) || g.year;
            };

            r.prototype.hide = function (d) {
              var g = this;
              h.clearTimeout(this.hideTimer);
              d = D(d, this.options.hideDelay, 500);
              this.isHidden || (this.hideTimer = l(function () {
                g.getLabel().fadeOut(d ? void 0 : d);
                g.isHidden = !0;
              }, d));
            };

            r.prototype.init = function (d, g) {
              this.chart = d;
              this.options = g;
              this.crosshairs = [];
              this.now = {
                x: 0,
                y: 0
              };
              this.isHidden = !0;
              this.split = g.split && !d.inverted && !d.polar;
              this.shared = g.shared || this.split;
              this.outside = D(g.outside, !(!d.scrollablePixelsX && !d.scrollablePixelsY));
            };

            r.prototype.isStickyOnContact = function () {
              return !(this.followPointer || !this.options.stickOnContact || !this.inContact);
            };

            r.prototype.move = function (d, g, c, a) {
              var q = this,
                  p = q.now,
                  e = !1 !== q.options.animation && !q.isHidden && (1 < Math.abs(d - p.x) || 1 < Math.abs(g - p.y)),
                  f = q.followPointer || 1 < q.len;
              C(p, {
                x: e ? (2 * p.x + d) / 3 : d,
                y: e ? (p.y + g) / 2 : g,
                anchorX: f ? void 0 : e ? (2 * p.anchorX + c) / 3 : c,
                anchorY: f ? void 0 : e ? (p.anchorY + a) / 2 : a
              });
              q.getLabel().attr(p);
              q.drawTracker();
              e && (h.clearTimeout(this.tooltipTimeout), this.tooltipTimeout = setTimeout(function () {
                q && q.move(d, g, c, a);
              }, 32));
            };

            r.prototype.refresh = function (d, g) {
              var c = this.chart,
                  a = this.options,
                  q = d,
                  p = {},
                  e = [],
                  f = a.formatter || this.defaultFormatter;
              p = this.shared;
              var l = c.styledMode;

              if (a.enabled) {
                h.clearTimeout(this.hideTimer);
                this.followPointer = n(q)[0].series.tooltipOptions.followPointer;
                var r = this.getAnchor(q, g);
                g = r[0];
                var w = r[1];
                !p || q.series && q.series.noSharedTooltip ? p = q.getLabelConfig() : (c.pointer.applyInactiveState(q), q.forEach(function (a) {
                  a.setState("hover");
                  e.push(a.getLabelConfig());
                }), p = {
                  x: q[0].category,
                  y: q[0].y
                }, p.points = e, q = q[0]);
                this.len = e.length;
                c = f.call(p, this);
                f = q.series;
                this.distance = D(f.tooltipOptions.distance, 16);
                !1 === c ? this.hide() : (this.split ? this.renderSplit(c, n(d)) : (d = this.getLabel(), a.style.width && !l || d.css({
                  width: this.chart.spacingBox.width + "px"
                }), d.attr({
                  text: c && c.join ? c.join("") : c
                }), d.removeClass(/highcharts-color-[\d]+/g).addClass("highcharts-color-" + D(q.colorIndex, f.colorIndex)), l || d.attr({
                  stroke: a.borderColor || q.color || f.color || "#666666"
                }), this.updatePosition({
                  plotX: g,
                  plotY: w,
                  negative: q.negative,
                  ttBelow: q.ttBelow,
                  h: r[2] || 0
                })), this.isHidden && this.label && this.label.attr({
                  opacity: 1
                }).show(), this.isHidden = !1);
                y(this, "refresh");
              }
            };

            r.prototype.renderSplit = function (d, g) {
              function c(b, a, c, d, g) {
                void 0 === g && (g = !0);
                c ? (a = I ? 0 : F, b = z(b - d / 2, m.left, m.right - d)) : (a -= y, b = g ? b - d - k : b + k, b = z(b, g ? b : m.left, m.right));
                return {
                  x: b,
                  y: a
                };
              }

              var a = this,
                  q = a.chart,
                  p = a.chart,
                  e = p.plotHeight,
                  l = p.plotLeft,
                  r = p.plotTop,
                  n = p.pointer,
                  h = p.renderer,
                  w = p.scrollablePixelsY,
                  O = void 0 === w ? 0 : w;
              w = p.scrollingContainer;
              w = void 0 === w ? {
                scrollLeft: 0,
                scrollTop: 0
              } : w;
              var E = w.scrollLeft,
                  u = w.scrollTop,
                  b = p.styledMode,
                  k = a.distance,
                  t = a.options,
                  H = a.options.positioner,
                  m = {
                left: E,
                right: E + p.chartWidth,
                top: u,
                bottom: u + p.chartHeight
              },
                  x = a.getLabel(),
                  I = !(!q.xAxis[0] || !q.xAxis[0].opposite),
                  y = r + u,
                  J = 0,
                  F = e - O;
              v(d) && (d = [!1, d]);
              d = d.slice(0, g.length + 1).reduce(function (d, p, q) {
                if (!1 !== p && "" !== p) {
                  q = g[q - 1] || {
                    isHeader: !0,
                    plotX: g[0].plotX,
                    plotY: e,
                    series: {}
                  };
                  var f = q.isHeader,
                      n = f ? a : q.series,
                      B = n.tt,
                      A = q.isHeader;
                  var w = q.series;
                  var E = "highcharts-color-" + D(q.colorIndex, w.colorIndex, "none");
                  B || (B = {
                    padding: t.padding,
                    r: t.borderRadius
                  }, b || (B.fill = t.backgroundColor, B["stroke-width"] = t.borderWidth), B = h.label("", 0, 0, t[A ? "headerShape" : "shape"] || "callout", void 0, void 0, t.useHTML).addClass((A ? "highcharts-tooltip-header " : "") + "highcharts-tooltip-box " + E).attr(B).add(x));
                  B.isActive = !0;
                  B.attr({
                    text: p
                  });
                  b || B.css(t.style).shadow(t.shadow).attr({
                    stroke: t.borderColor || q.color || w.color || "#333333"
                  });
                  p = n.tt = B;
                  A = p.getBBox();
                  n = A.width + p.strokeWidth();
                  f && (J = A.height, F += J, I && (y -= J));
                  w = q.plotX;
                  w = void 0 === w ? 0 : w;
                  E = q.plotY;
                  E = void 0 === E ? 0 : E;
                  var v = q.series;

                  if (q.isHeader) {
                    w = l + w;
                    var G = r + e / 2;
                  } else B = v.xAxis, v = v.yAxis, w = B.pos + z(w, -k, B.len + k), v.pos + E >= u + r && v.pos + E <= u + r + e - O && (G = v.pos + E);

                  w = z(w, m.left - k, m.right + k);
                  "number" === typeof G ? (A = A.height + 1, E = H ? H.call(a, n, A, q) : c(w, G, f, n), d.push({
                    align: H ? 0 : void 0,
                    anchorX: w,
                    anchorY: G,
                    boxWidth: n,
                    point: q,
                    rank: D(E.rank, f ? 1 : 0),
                    size: A,
                    target: E.y,
                    tt: p,
                    x: E.x
                  })) : p.isActive = !1;
                }

                return d;
              }, []);
              !H && d.some(function (b) {
                return b.x < m.left;
              }) && (d = d.map(function (b) {
                var a = c(b.anchorX, b.anchorY, b.point.isHeader, b.boxWidth, !1);
                return C(b, {
                  target: a.y,
                  x: a.x
                });
              }));
              a.cleanSplit();
              f.distribute(d, F);
              d.forEach(function (b) {
                var a = b.pos;
                b.tt.attr({
                  visibility: "undefined" === typeof a ? "hidden" : "inherit",
                  x: b.x,
                  y: a + y,
                  anchorX: b.anchorX,
                  anchorY: b.anchorY
                });
              });
              d = a.container;
              q = a.renderer;
              a.outside && d && q && (p = x.getBBox(), q.setSize(p.width + p.x, p.height + p.y, !1), n = n.getChartPosition(), d.style.left = n.left + "px", d.style.top = n.top + "px");
            };

            r.prototype.drawTracker = function () {
              if (this.followPointer || !this.options.stickOnContact) this.tracker && this.tracker.destroy();else {
                var d = this.chart,
                    g = this.label,
                    c = d.hoverPoint;

                if (g && c) {
                  var a = {
                    x: 0,
                    y: 0,
                    width: 0,
                    height: 0
                  };
                  c = this.getAnchor(c);
                  var q = g.getBBox();
                  c[0] += d.plotLeft - g.translateX;
                  c[1] += d.plotTop - g.translateY;
                  a.x = Math.min(0, c[0]);
                  a.y = Math.min(0, c[1]);
                  a.width = 0 > c[0] ? Math.max(Math.abs(c[0]), q.width - c[0]) : Math.max(Math.abs(c[0]), q.width);
                  a.height = 0 > c[1] ? Math.max(Math.abs(c[1]), q.height - Math.abs(c[1])) : Math.max(Math.abs(c[1]), q.height);
                  this.tracker ? this.tracker.attr(a) : (this.tracker = g.renderer.rect(a).addClass("highcharts-tracker").add(g), d.styledMode || this.tracker.attr({
                    fill: "rgba(0,0,0,0)"
                  }));
                }
              }
            };

            r.prototype.styledModeFormat = function (d) {
              return d.replace('style="font-size: 10px"', 'class="highcharts-header"').replace(/style="color:{(point|series)\.color}"/g, 'class="highcharts-color-{$1.colorIndex}"');
            };

            r.prototype.tooltipFooterHeaderFormatter = function (d, g) {
              var c = g ? "footer" : "header",
                  a = d.series,
                  q = a.tooltipOptions,
                  p = q.xDateFormat,
                  f = a.xAxis,
                  l = f && "datetime" === f.options.type && I(d.key),
                  r = q[c + "Format"];
              g = {
                isFooter: g,
                labelConfig: d
              };
              y(this, "headerFormatter", g, function (c) {
                l && !p && (p = this.getXDateFormat(d, q, f));
                l && p && (d.point && d.point.tooltipDateKeys || ["key"]).forEach(function (a) {
                  r = r.replace("{point." + a + "}", "{point." + a + ":" + p + "}");
                });
                a.chart.styledMode && (r = this.styledModeFormat(r));
                c.text = e(r, {
                  point: d,
                  series: a
                }, this.chart);
              });
              return g.text;
            };

            r.prototype.update = function (d) {
              this.destroy();
              x(!0, this.chart.options.tooltip.userOptions, d);
              this.init(this.chart, x(!0, this.options, d));
            };

            r.prototype.updatePosition = function (d) {
              var g = this.chart,
                  c = g.pointer,
                  a = this.getLabel(),
                  q = d.plotX + g.plotLeft,
                  p = d.plotY + g.plotTop;
              c = c.getChartPosition();
              d = (this.options.positioner || this.getPosition).call(this, a.width, a.height, d);

              if (this.outside) {
                var e = (this.options.borderWidth || 0) + 2 * this.distance;
                this.renderer.setSize(a.width + e, a.height + e, !1);
                if (g = g.containerScaling) F(this.container, {
                  transform: "scale(" + g.scaleX + ", " + g.scaleY + ")"
                }), q *= g.scaleX, p *= g.scaleY;
                q += c.left - d.x;
                p += c.top - d.y;
              }

              this.move(Math.round(d.x), Math.round(d.y || 0), q, p);
            };

            return r;
          }();

          f.Tooltip = w;
          return f.Tooltip;
        });
        N(m, "Core/Pointer.js", [m["Core/Color/Color.js"], m["Core/Globals.js"], m["Core/Tooltip.js"], m["Core/Utilities.js"]], function (f, h, m, z) {
          var F = f.parse,
              P = h.charts,
              K = h.noop,
              C = z.addEvent,
              y = z.attr,
              e = z.css,
              I = z.defined,
              v = z.extend,
              x = z.find,
              D = z.fireEvent,
              n = z.isNumber,
              l = z.isObject,
              J = z.objectEach,
              w = z.offset,
              r = z.pick,
              d = z.splat;
          "";

          f = function () {
            function g(c, a) {
              this.lastValidTouch = {};
              this.pinchDown = [];
              this.runChartClick = !1;
              this.chart = c;
              this.hasDragged = !1;
              this.options = a;

              this.unbindContainerMouseLeave = function () {};

              this.unbindContainerMouseEnter = function () {};

              this.init(c, a);
            }

            g.prototype.applyInactiveState = function (c) {
              var a = [],
                  d;
              (c || []).forEach(function (c) {
                d = c.series;
                a.push(d);
                d.linkedParent && a.push(d.linkedParent);
                d.linkedSeries && (a = a.concat(d.linkedSeries));
                d.navigatorSeries && a.push(d.navigatorSeries);
              });
              this.chart.series.forEach(function (c) {
                -1 === a.indexOf(c) ? c.setState("inactive", !0) : c.options.inactiveOtherPoints && c.setAllPointsToState("inactive");
              });
            };

            g.prototype.destroy = function () {
              var c = this;
              "undefined" !== typeof c.unDocMouseMove && c.unDocMouseMove();
              this.unbindContainerMouseLeave();
              h.chartCount || (h.unbindDocumentMouseUp && (h.unbindDocumentMouseUp = h.unbindDocumentMouseUp()), h.unbindDocumentTouchEnd && (h.unbindDocumentTouchEnd = h.unbindDocumentTouchEnd()));
              clearInterval(c.tooltipTimeout);
              J(c, function (a, d) {
                c[d] = void 0;
              });
            };

            g.prototype.drag = function (c) {
              var a = this.chart,
                  d = a.options.chart,
                  g = c.chartX,
                  e = c.chartY,
                  f = this.zoomHor,
                  r = this.zoomVert,
                  n = a.plotLeft,
                  h = a.plotTop,
                  w = a.plotWidth,
                  v = a.plotHeight,
                  E = this.selectionMarker,
                  u = this.mouseDownX || 0,
                  b = this.mouseDownY || 0,
                  k = l(d.panning) ? d.panning && d.panning.enabled : d.panning,
                  t = d.panKey && c[d.panKey + "Key"];
              if (!E || !E.touch) if (g < n ? g = n : g > n + w && (g = n + w), e < h ? e = h : e > h + v && (e = h + v), this.hasDragged = Math.sqrt(Math.pow(u - g, 2) + Math.pow(b - e, 2)), 10 < this.hasDragged) {
                var H = a.isInsidePlot(u - n, b - h);
                a.hasCartesianSeries && (this.zoomX || this.zoomY) && H && !t && !E && (this.selectionMarker = E = a.renderer.rect(n, h, f ? 1 : w, r ? 1 : v, 0).attr({
                  "class": "highcharts-selection-marker",
                  zIndex: 7
                }).add(), a.styledMode || E.attr({
                  fill: d.selectionMarkerFill || F("#335cad").setOpacity(.25).get()
                }));
                E && f && (g -= u, E.attr({
                  width: Math.abs(g),
                  x: (0 < g ? 0 : g) + u
                }));
                E && r && (g = e - b, E.attr({
                  height: Math.abs(g),
                  y: (0 < g ? 0 : g) + b
                }));
                H && !E && k && a.pan(c, d.panning);
              }
            };

            g.prototype.dragStart = function (c) {
              var a = this.chart;
              a.mouseIsDown = c.type;
              a.cancelClick = !1;
              a.mouseDownX = this.mouseDownX = c.chartX;
              a.mouseDownY = this.mouseDownY = c.chartY;
            };

            g.prototype.drop = function (c) {
              var a = this,
                  d = this.chart,
                  g = this.hasPinched;

              if (this.selectionMarker) {
                var f = {
                  originalEvent: c,
                  xAxis: [],
                  yAxis: []
                },
                    l = this.selectionMarker,
                    r = l.attr ? l.attr("x") : l.x,
                    h = l.attr ? l.attr("y") : l.y,
                    w = l.attr ? l.attr("width") : l.width,
                    m = l.attr ? l.attr("height") : l.height,
                    O;
                if (this.hasDragged || g) d.axes.forEach(function (d) {
                  if (d.zoomEnabled && I(d.min) && (g || a[{
                    xAxis: "zoomX",
                    yAxis: "zoomY"
                  }[d.coll]]) && n(r) && n(h)) {
                    var p = d.horiz,
                        b = "touchend" === c.type ? d.minPixelPadding : 0,
                        k = d.toValue((p ? r : h) + b);
                    p = d.toValue((p ? r + w : h + m) - b);
                    f[d.coll].push({
                      axis: d,
                      min: Math.min(k, p),
                      max: Math.max(k, p)
                    });
                    O = !0;
                  }
                }), O && D(d, "selection", f, function (a) {
                  d.zoom(v(a, g ? {
                    animation: !1
                  } : null));
                });
                n(d.index) && (this.selectionMarker = this.selectionMarker.destroy());
                g && this.scaleGroups();
              }

              d && n(d.index) && (e(d.container, {
                cursor: d._cursor
              }), d.cancelClick = 10 < this.hasDragged, d.mouseIsDown = this.hasDragged = this.hasPinched = !1, this.pinchDown = []);
            };

            g.prototype.findNearestKDPoint = function (c, a, d) {
              var g = this.chart,
                  q = g.hoverPoint;
              g = g.tooltip;
              if (q && g && g.isStickyOnContact()) return q;
              var e;
              c.forEach(function (c) {
                var g = !(c.noSharedTooltip && a) && 0 > c.options.findNearestPointBy.indexOf("y");
                c = c.searchPoint(d, g);

                if ((g = l(c, !0)) && !(g = !l(e, !0))) {
                  g = e.distX - c.distX;
                  var p = e.dist - c.dist,
                      q = (c.series.group && c.series.group.zIndex) - (e.series.group && e.series.group.zIndex);
                  g = 0 < (0 !== g && a ? g : 0 !== p ? p : 0 !== q ? q : e.series.index > c.series.index ? -1 : 1);
                }

                g && (e = c);
              });
              return e;
            };

            g.prototype.getChartCoordinatesFromPoint = function (c, a) {
              var d = c.series,
                  g = d.xAxis;
              d = d.yAxis;
              var e = r(c.clientX, c.plotX),
                  f = c.shapeArgs;
              if (g && d) return a ? {
                chartX: g.len + g.pos - e,
                chartY: d.len + d.pos - c.plotY
              } : {
                chartX: e + g.pos,
                chartY: c.plotY + d.pos
              };
              if (f && f.x && f.y) return {
                chartX: f.x,
                chartY: f.y
              };
            };

            g.prototype.getChartPosition = function () {
              return this.chartPosition || (this.chartPosition = w(this.chart.container));
            };

            g.prototype.getCoordinates = function (c) {
              var a = {
                xAxis: [],
                yAxis: []
              };
              this.chart.axes.forEach(function (d) {
                a[d.isXAxis ? "xAxis" : "yAxis"].push({
                  axis: d,
                  value: d.toValue(c[d.horiz ? "chartX" : "chartY"])
                });
              });
              return a;
            };

            g.prototype.getHoverData = function (c, a, d, g, e, f) {
              var p,
                  q = [];
              g = !(!g || !c);
              var n = a && !a.stickyTracking,
                  h = {
                chartX: f ? f.chartX : void 0,
                chartY: f ? f.chartY : void 0,
                shared: e
              };
              D(this, "beforeGetHoverData", h);
              n = n ? [a] : d.filter(function (a) {
                return h.filter ? h.filter(a) : a.visible && !(!e && a.directTouch) && r(a.options.enableMouseTracking, !0) && a.stickyTracking;
              });
              a = (p = g || !f ? c : this.findNearestKDPoint(n, e, f)) && p.series;
              p && (e && !a.noSharedTooltip ? (n = d.filter(function (a) {
                return h.filter ? h.filter(a) : a.visible && !(!e && a.directTouch) && r(a.options.enableMouseTracking, !0) && !a.noSharedTooltip;
              }), n.forEach(function (a) {
                var c = x(a.points, function (a) {
                  return a.x === p.x && !a.isNull;
                });
                l(c) && (a.chart.isBoosting && (c = a.getPoint(c)), q.push(c));
              })) : q.push(p));
              h = {
                hoverPoint: p
              };
              D(this, "afterGetHoverData", h);
              return {
                hoverPoint: h.hoverPoint,
                hoverSeries: a,
                hoverPoints: q
              };
            };

            g.prototype.getPointFromEvent = function (c) {
              c = c.target;

              for (var a; c && !a;) {
                a = c.point, c = c.parentNode;
              }

              return a;
            };

            g.prototype.onTrackerMouseOut = function (c) {
              c = c.relatedTarget || c.toElement;
              var a = this.chart.hoverSeries;
              this.isDirectTouch = !1;
              if (!(!a || !c || a.stickyTracking || this.inClass(c, "highcharts-tooltip") || this.inClass(c, "highcharts-series-" + a.index) && this.inClass(c, "highcharts-tracker"))) a.onMouseOut();
            };

            g.prototype.inClass = function (c, a) {
              for (var d; c;) {
                if (d = y(c, "class")) {
                  if (-1 !== d.indexOf(a)) return !0;
                  if (-1 !== d.indexOf("highcharts-container")) return !1;
                }

                c = c.parentNode;
              }
            };

            g.prototype.init = function (c, a) {
              this.options = a;
              this.chart = c;
              this.runChartClick = a.chart.events && !!a.chart.events.click;
              this.pinchDown = [];
              this.lastValidTouch = {};
              m && (c.tooltip = new m(c, a.tooltip), this.followTouchMove = r(a.tooltip.followTouchMove, !0));
              this.setDOMEvents();
            };

            g.prototype.normalize = function (c, a) {
              var d = c.touches,
                  g = d ? d.length ? d.item(0) : r(d.changedTouches, c.changedTouches)[0] : c;
              a || (a = this.getChartPosition());
              d = g.pageX - a.left;
              a = g.pageY - a.top;
              if (g = this.chart.containerScaling) d /= g.scaleX, a /= g.scaleY;
              return v(c, {
                chartX: Math.round(d),
                chartY: Math.round(a)
              });
            };

            g.prototype.onContainerClick = function (c) {
              var a = this.chart,
                  d = a.hoverPoint;
              c = this.normalize(c);
              var g = a.plotLeft,
                  e = a.plotTop;
              a.cancelClick || (d && this.inClass(c.target, "highcharts-tracker") ? (D(d.series, "click", v(c, {
                point: d
              })), a.hoverPoint && d.firePointEvent("click", c)) : (v(c, this.getCoordinates(c)), a.isInsidePlot(c.chartX - g, c.chartY - e) && D(a, "click", c)));
            };

            g.prototype.onContainerMouseDown = function (c) {
              var a = 1 === ((c.buttons || c.button) & 1);
              c = this.normalize(c);
              if (h.isFirefox && 0 !== c.button) this.onContainerMouseMove(c);
              if ("undefined" === typeof c.button || a) this.zoomOption(c), a && c.preventDefault && c.preventDefault(), this.dragStart(c);
            };

            g.prototype.onContainerMouseLeave = function (c) {
              var a = P[r(h.hoverChartIndex, -1)],
                  d = this.chart.tooltip;
              c = this.normalize(c);
              a && (c.relatedTarget || c.toElement) && (a.pointer.reset(), a.pointer.chartPosition = void 0);
              d && !d.isHidden && this.reset();
            };

            g.prototype.onContainerMouseEnter = function (c) {
              delete this.chartPosition;
            };

            g.prototype.onContainerMouseMove = function (c) {
              var a = this.chart;
              c = this.normalize(c);
              this.setHoverChartIndex();
              c.preventDefault || (c.returnValue = !1);
              "mousedown" === a.mouseIsDown && this.drag(c);
              a.openMenu || !this.inClass(c.target, "highcharts-tracker") && !a.isInsidePlot(c.chartX - a.plotLeft, c.chartY - a.plotTop) || this.runPointActions(c);
            };

            g.prototype.onDocumentTouchEnd = function (c) {
              P[h.hoverChartIndex] && P[h.hoverChartIndex].pointer.drop(c);
            };

            g.prototype.onContainerTouchMove = function (c) {
              this.touch(c);
            };

            g.prototype.onContainerTouchStart = function (c) {
              this.zoomOption(c);
              this.touch(c, !0);
            };

            g.prototype.onDocumentMouseMove = function (c) {
              var a = this.chart,
                  d = this.chartPosition;
              c = this.normalize(c, d);
              var g = a.tooltip;
              !d || g && g.isStickyOnContact() || a.isInsidePlot(c.chartX - a.plotLeft, c.chartY - a.plotTop) || this.inClass(c.target, "highcharts-tracker") || this.reset();
            };

            g.prototype.onDocumentMouseUp = function (c) {
              var a = P[r(h.hoverChartIndex, -1)];
              a && a.pointer.drop(c);
            };

            g.prototype.pinch = function (c) {
              var a = this,
                  d = a.chart,
                  g = a.pinchDown,
                  e = c.touches || [],
                  f = e.length,
                  l = a.lastValidTouch,
                  n = a.hasZoom,
                  h = a.selectionMarker,
                  w = {},
                  m = 1 === f && (a.inClass(c.target, "highcharts-tracker") && d.runTrackerClick || a.runChartClick),
                  E = {};
              1 < f && (a.initiated = !0);
              n && a.initiated && !m && !1 !== c.cancelable && c.preventDefault();
              [].map.call(e, function (c) {
                return a.normalize(c);
              });
              "touchstart" === c.type ? ([].forEach.call(e, function (a, b) {
                g[b] = {
                  chartX: a.chartX,
                  chartY: a.chartY
                };
              }), l.x = [g[0].chartX, g[1] && g[1].chartX], l.y = [g[0].chartY, g[1] && g[1].chartY], d.axes.forEach(function (a) {
                if (a.zoomEnabled) {
                  var b = d.bounds[a.horiz ? "h" : "v"],
                      c = a.minPixelPadding,
                      g = a.toPixels(Math.min(r(a.options.min, a.dataMin), a.dataMin)),
                      p = a.toPixels(Math.max(r(a.options.max, a.dataMax), a.dataMax)),
                      q = Math.max(g, p);
                  b.min = Math.min(a.pos, Math.min(g, p) - c);
                  b.max = Math.max(a.pos + a.len, q + c);
                }
              }), a.res = !0) : a.followTouchMove && 1 === f ? this.runPointActions(a.normalize(c)) : g.length && (h || (a.selectionMarker = h = v({
                destroy: K,
                touch: !0
              }, d.plotBox)), a.pinchTranslate(g, e, w, h, E, l), a.hasPinched = n, a.scaleGroups(w, E), a.res && (a.res = !1, this.reset(!1, 0)));
            };

            g.prototype.pinchTranslate = function (c, a, d, g, e, f) {
              this.zoomHor && this.pinchTranslateDirection(!0, c, a, d, g, e, f);
              this.zoomVert && this.pinchTranslateDirection(!1, c, a, d, g, e, f);
            };

            g.prototype.pinchTranslateDirection = function (c, a, d, g, e, f, l, r) {
              var p = this.chart,
                  q = c ? "x" : "y",
                  n = c ? "X" : "Y",
                  h = "chart" + n,
                  u = c ? "width" : "height",
                  b = p["plot" + (c ? "Left" : "Top")],
                  k,
                  t,
                  B = r || 1,
                  w = p.inverted,
                  A = p.bounds[c ? "h" : "v"],
                  v = 1 === a.length,
                  G = a[0][h],
                  m = d[0][h],
                  D = !v && a[1][h],
                  M = !v && d[1][h];

              d = function d() {
                "number" === typeof M && 20 < Math.abs(G - D) && (B = r || Math.abs(m - M) / Math.abs(G - D));
                t = (b - m) / B + G;
                k = p["plot" + (c ? "Width" : "Height")] / B;
              };

              d();
              a = t;

              if (a < A.min) {
                a = A.min;
                var x = !0;
              } else a + k > A.max && (a = A.max - k, x = !0);

              x ? (m -= .8 * (m - l[q][0]), "number" === typeof M && (M -= .8 * (M - l[q][1])), d()) : l[q] = [m, M];
              w || (f[q] = t - b, f[u] = k);
              f = w ? 1 / B : B;
              e[u] = k;
              e[q] = a;
              g[w ? c ? "scaleY" : "scaleX" : "scale" + n] = B;
              g["translate" + n] = f * b + (m - f * G);
            };

            g.prototype.reset = function (c, a) {
              var g = this.chart,
                  p = g.hoverSeries,
                  e = g.hoverPoint,
                  f = g.hoverPoints,
                  l = g.tooltip,
                  r = l && l.shared ? f : e;
              c && r && d(r).forEach(function (a) {
                a.series.isCartesian && "undefined" === typeof a.plotX && (c = !1);
              });
              if (c) l && r && d(r).length && (l.refresh(r), l.shared && f ? f.forEach(function (a) {
                a.setState(a.state, !0);
                a.series.isCartesian && (a.series.xAxis.crosshair && a.series.xAxis.drawCrosshair(null, a), a.series.yAxis.crosshair && a.series.yAxis.drawCrosshair(null, a));
              }) : e && (e.setState(e.state, !0), g.axes.forEach(function (a) {
                a.crosshair && e.series[a.coll] === a && a.drawCrosshair(null, e);
              })));else {
                if (e) e.onMouseOut();
                f && f.forEach(function (a) {
                  a.setState();
                });
                if (p) p.onMouseOut();
                l && l.hide(a);
                this.unDocMouseMove && (this.unDocMouseMove = this.unDocMouseMove());
                g.axes.forEach(function (a) {
                  a.hideCrosshair();
                });
                this.hoverX = g.hoverPoints = g.hoverPoint = null;
              }
            };

            g.prototype.runPointActions = function (c, a) {
              var d = this.chart,
                  g = d.tooltip && d.tooltip.options.enabled ? d.tooltip : void 0,
                  e = g ? g.shared : !1,
                  f = a || d.hoverPoint,
                  l = f && f.series || d.hoverSeries;
              l = this.getHoverData(f, l, d.series, (!c || "touchmove" !== c.type) && (!!a || l && l.directTouch && this.isDirectTouch), e, c);
              f = l.hoverPoint;
              var n = l.hoverPoints;
              a = (l = l.hoverSeries) && l.tooltipOptions.followPointer;
              e = e && l && !l.noSharedTooltip;

              if (f && (f !== d.hoverPoint || g && g.isHidden)) {
                (d.hoverPoints || []).forEach(function (a) {
                  -1 === n.indexOf(a) && a.setState();
                });
                if (d.hoverSeries !== l) l.onMouseOver();
                this.applyInactiveState(n);
                (n || []).forEach(function (a) {
                  a.setState("hover");
                });
                d.hoverPoint && d.hoverPoint.firePointEvent("mouseOut");
                if (!f.series) return;
                d.hoverPoints = n;
                d.hoverPoint = f;
                f.firePointEvent("mouseOver");
                g && g.refresh(e ? n : f, c);
              } else a && g && !g.isHidden && (f = g.getAnchor([{}], c), g.updatePosition({
                plotX: f[0],
                plotY: f[1]
              }));

              this.unDocMouseMove || (this.unDocMouseMove = C(d.container.ownerDocument, "mousemove", function (a) {
                var c = P[h.hoverChartIndex];
                if (c) c.pointer.onDocumentMouseMove(a);
              }));
              d.axes.forEach(function (a) {
                var g = r((a.crosshair || {}).snap, !0),
                    p;
                g && ((p = d.hoverPoint) && p.series[a.coll] === a || (p = x(n, function (c) {
                  return c.series[a.coll] === a;
                })));
                p || !g ? a.drawCrosshair(c, p) : a.hideCrosshair();
              });
            };

            g.prototype.scaleGroups = function (c, a) {
              var d = this.chart,
                  g;
              d.series.forEach(function (p) {
                g = c || p.getPlotBox();
                p.xAxis && p.xAxis.zoomEnabled && p.group && (p.group.attr(g), p.markerGroup && (p.markerGroup.attr(g), p.markerGroup.clip(a ? d.clipRect : null)), p.dataLabelsGroup && p.dataLabelsGroup.attr(g));
              });
              d.clipRect.attr(a || d.clipBox);
            };

            g.prototype.setDOMEvents = function () {
              var c = this.chart.container,
                  a = c.ownerDocument;
              c.onmousedown = this.onContainerMouseDown.bind(this);
              c.onmousemove = this.onContainerMouseMove.bind(this);
              c.onclick = this.onContainerClick.bind(this);
              this.unbindContainerMouseEnter = C(c, "mouseenter", this.onContainerMouseEnter.bind(this));
              this.unbindContainerMouseLeave = C(c, "mouseleave", this.onContainerMouseLeave.bind(this));
              h.unbindDocumentMouseUp || (h.unbindDocumentMouseUp = C(a, "mouseup", this.onDocumentMouseUp.bind(this)));
              h.hasTouch && (C(c, "touchstart", this.onContainerTouchStart.bind(this)), C(c, "touchmove", this.onContainerTouchMove.bind(this)), h.unbindDocumentTouchEnd || (h.unbindDocumentTouchEnd = C(a, "touchend", this.onDocumentTouchEnd.bind(this))));
            };

            g.prototype.setHoverChartIndex = function () {
              var c = this.chart,
                  a = h.charts[r(h.hoverChartIndex, -1)];
              if (a && a !== c) a.pointer.onContainerMouseLeave({
                relatedTarget: !0
              });
              a && a.mouseIsDown || (h.hoverChartIndex = c.index);
            };

            g.prototype.touch = function (c, a) {
              var d = this.chart,
                  g;
              this.setHoverChartIndex();
              if (1 === c.touches.length) {
                if (c = this.normalize(c), (g = d.isInsidePlot(c.chartX - d.plotLeft, c.chartY - d.plotTop)) && !d.openMenu) {
                  a && this.runPointActions(c);

                  if ("touchmove" === c.type) {
                    a = this.pinchDown;
                    var e = a[0] ? 4 <= Math.sqrt(Math.pow(a[0].chartX - c.chartX, 2) + Math.pow(a[0].chartY - c.chartY, 2)) : !1;
                  }

                  r(e, !0) && this.pinch(c);
                } else a && this.reset();
              } else 2 === c.touches.length && this.pinch(c);
            };

            g.prototype.zoomOption = function (c) {
              var a = this.chart,
                  d = a.options.chart,
                  g = d.zoomType || "";
              a = a.inverted;
              /touch/.test(c.type) && (g = r(d.pinchType, g));
              this.zoomX = c = /x/.test(g);
              this.zoomY = g = /y/.test(g);
              this.zoomHor = c && !a || g && a;
              this.zoomVert = g && !a || c && a;
              this.hasZoom = c || g;
            };

            return g;
          }();

          return h.Pointer = f;
        });
        N(m, "Core/MSPointer.js", [m["Core/Globals.js"], m["Core/Pointer.js"], m["Core/Utilities.js"]], function (f, h, m) {
          function z() {
            var e = [];

            e.item = function (e) {
              return this[e];
            };

            v(D, function (f) {
              e.push({
                pageX: f.pageX,
                pageY: f.pageY,
                target: f.target
              });
            });
            return e;
          }

          function F(e, n, h, r) {
            "touch" !== e.pointerType && e.pointerType !== e.MSPOINTER_TYPE_TOUCH || !K[f.hoverChartIndex] || (r(e), r = K[f.hoverChartIndex].pointer, r[n]({
              type: h,
              target: e.currentTarget,
              preventDefault: y,
              touches: z()
            }));
          }

          var P = this && this.__extends || function () {
            var _e2 = function e(f, l) {
              _e2 = Object.setPrototypeOf || {
                __proto__: []
              } instanceof Array && function (e, d) {
                e.__proto__ = d;
              } || function (e, d) {
                for (var g in d) {
                  d.hasOwnProperty(g) && (e[g] = d[g]);
                }
              };

              return _e2(f, l);
            };

            return function (f, l) {
              function r() {
                this.constructor = f;
              }

              _e2(f, l);

              f.prototype = null === l ? Object.create(l) : (r.prototype = l.prototype, new r());
            };
          }(),
              K = f.charts,
              C = f.doc,
              y = f.noop,
              e = m.addEvent,
              I = m.css,
              v = m.objectEach,
              x = m.removeEvent,
              D = {},
              n = !!f.win.PointerEvent;

          return function (f) {
            function l() {
              return null !== f && f.apply(this, arguments) || this;
            }

            P(l, f);

            l.prototype.batchMSEvents = function (e) {
              e(this.chart.container, n ? "pointerdown" : "MSPointerDown", this.onContainerPointerDown);
              e(this.chart.container, n ? "pointermove" : "MSPointerMove", this.onContainerPointerMove);
              e(C, n ? "pointerup" : "MSPointerUp", this.onDocumentPointerUp);
            };

            l.prototype.destroy = function () {
              this.batchMSEvents(x);
              f.prototype.destroy.call(this);
            };

            l.prototype.init = function (e, l) {
              f.prototype.init.call(this, e, l);
              this.hasZoom && I(e.container, {
                "-ms-touch-action": "none",
                "touch-action": "none"
              });
            };

            l.prototype.onContainerPointerDown = function (e) {
              F(e, "onContainerTouchStart", "touchstart", function (e) {
                D[e.pointerId] = {
                  pageX: e.pageX,
                  pageY: e.pageY,
                  target: e.currentTarget
                };
              });
            };

            l.prototype.onContainerPointerMove = function (e) {
              F(e, "onContainerTouchMove", "touchmove", function (e) {
                D[e.pointerId] = {
                  pageX: e.pageX,
                  pageY: e.pageY
                };
                D[e.pointerId].target || (D[e.pointerId].target = e.currentTarget);
              });
            };

            l.prototype.onDocumentPointerUp = function (e) {
              F(e, "onDocumentTouchEnd", "touchend", function (e) {
                delete D[e.pointerId];
              });
            };

            l.prototype.setDOMEvents = function () {
              f.prototype.setDOMEvents.call(this);
              (this.hasZoom || this.followTouchMove) && this.batchMSEvents(e);
            };

            return l;
          }(h);
        });
        N(m, "Core/Legend.js", [m["Core/Animation/AnimationUtilities.js"], m["Core/Globals.js"], m["Core/Utilities.js"]], function (f, h, m) {
          var z = f.animObject,
              F = f.setAnimation,
              L = m.addEvent,
              K = m.css,
              C = m.defined,
              y = m.discardElement,
              e = m.find,
              I = m.fireEvent,
              v = m.format,
              x = m.isNumber,
              D = m.merge,
              n = m.pick,
              l = m.relativeLength,
              J = m.stableSort,
              w = m.syncTimeout;
          f = m.wrap;
          m = h.isFirefox;

          var r = h.marginNames,
              d = h.win,
              g = function () {
            function c(a, c) {
              this.allItems = [];
              this.contentGroup = this.box = void 0;
              this.display = !1;
              this.group = void 0;
              this.offsetWidth = this.maxLegendWidth = this.maxItemWidth = this.legendWidth = this.legendHeight = this.lastLineHeight = this.lastItemY = this.itemY = this.itemX = this.itemMarginTop = this.itemMarginBottom = this.itemHeight = this.initialItemY = 0;
              this.options = {};
              this.padding = 0;
              this.pages = [];
              this.proximate = !1;
              this.scrollGroup = void 0;
              this.widthOption = this.totalItemWidth = this.titleHeight = this.symbolWidth = this.symbolHeight = 0;
              this.chart = a;
              this.init(a, c);
            }

            c.prototype.init = function (a, c) {
              this.chart = a;
              this.setOptions(c);
              c.enabled && (this.render(), L(this.chart, "endResize", function () {
                this.legend.positionCheckboxes();
              }), this.proximate ? this.unchartrender = L(this.chart, "render", function () {
                this.legend.proximatePositions();
                this.legend.positionItems();
              }) : this.unchartrender && this.unchartrender());
            };

            c.prototype.setOptions = function (a) {
              var c = n(a.padding, 8);
              this.options = a;
              this.chart.styledMode || (this.itemStyle = a.itemStyle, this.itemHiddenStyle = D(this.itemStyle, a.itemHiddenStyle));
              this.itemMarginTop = a.itemMarginTop || 0;
              this.itemMarginBottom = a.itemMarginBottom || 0;
              this.padding = c;
              this.initialItemY = c - 5;
              this.symbolWidth = n(a.symbolWidth, 16);
              this.pages = [];
              this.proximate = "proximate" === a.layout && !this.chart.inverted;
              this.baseline = void 0;
            };

            c.prototype.update = function (a, c) {
              var d = this.chart;
              this.setOptions(D(!0, this.options, a));
              this.destroy();
              d.isDirtyLegend = d.isDirtyBox = !0;
              n(c, !0) && d.redraw();
              I(this, "afterUpdate");
            };

            c.prototype.colorizeItem = function (a, c) {
              a.legendGroup[c ? "removeClass" : "addClass"]("highcharts-legend-item-hidden");

              if (!this.chart.styledMode) {
                var d = this.options,
                    g = a.legendItem,
                    e = a.legendLine,
                    f = a.legendSymbol,
                    q = this.itemHiddenStyle.color;
                d = c ? d.itemStyle.color : q;
                var l = c ? a.color || q : q,
                    r = a.options && a.options.marker,
                    n = {
                  fill: l
                };
                g && g.css({
                  fill: d,
                  color: d
                });
                e && e.attr({
                  stroke: l
                });
                f && (r && f.isMarker && (n = a.pointAttribs(), c || (n.stroke = n.fill = q)), f.attr(n));
              }

              I(this, "afterColorizeItem", {
                item: a,
                visible: c
              });
            };

            c.prototype.positionItems = function () {
              this.allItems.forEach(this.positionItem, this);
              this.chart.isResizing || this.positionCheckboxes();
            };

            c.prototype.positionItem = function (a) {
              var c = this,
                  d = this.options,
                  g = d.symbolPadding,
                  e = !d.rtl,
                  f = a._legendItemPos;
              d = f[0];
              f = f[1];
              var l = a.checkbox,
                  n = a.legendGroup;
              n && n.element && (g = {
                translateX: e ? d : this.legendWidth - d - 2 * g - 4,
                translateY: f
              }, e = function e() {
                I(c, "afterPositionItem", {
                  item: a
                });
              }, C(n.translateY) ? n.animate(g, void 0, e) : (n.attr(g), e()));
              l && (l.x = d, l.y = f);
            };

            c.prototype.destroyItem = function (a) {
              var c = a.checkbox;
              ["legendItem", "legendLine", "legendSymbol", "legendGroup"].forEach(function (c) {
                a[c] && (a[c] = a[c].destroy());
              });
              c && y(a.checkbox);
            };

            c.prototype.destroy = function () {
              function a(a) {
                this[a] && (this[a] = this[a].destroy());
              }

              this.getAllItems().forEach(function (c) {
                ["legendItem", "legendGroup"].forEach(a, c);
              });
              "clipRect up down pager nav box title group".split(" ").forEach(a, this);
              this.display = null;
            };

            c.prototype.positionCheckboxes = function () {
              var a = this.group && this.group.alignAttr,
                  c = this.clipHeight || this.legendHeight,
                  d = this.titleHeight;

              if (a) {
                var g = a.translateY;
                this.allItems.forEach(function (e) {
                  var p = e.checkbox;

                  if (p) {
                    var f = g + d + p.y + (this.scrollOffset || 0) + 3;
                    K(p, {
                      left: a.translateX + e.checkboxOffset + p.x - 20 + "px",
                      top: f + "px",
                      display: this.proximate || f > g - 6 && f < g + c - 6 ? "" : "none"
                    });
                  }
                }, this);
              }
            };

            c.prototype.renderTitle = function () {
              var a = this.options,
                  c = this.padding,
                  d = a.title,
                  g = 0;
              d.text && (this.title || (this.title = this.chart.renderer.label(d.text, c - 3, c - 4, null, null, null, a.useHTML, null, "legend-title").attr({
                zIndex: 1
              }), this.chart.styledMode || this.title.css(d.style), this.title.add(this.group)), d.width || this.title.css({
                width: this.maxLegendWidth + "px"
              }), a = this.title.getBBox(), g = a.height, this.offsetWidth = a.width, this.contentGroup.attr({
                translateY: g
              }));
              this.titleHeight = g;
            };

            c.prototype.setText = function (a) {
              var c = this.options;
              a.legendItem.attr({
                text: c.labelFormat ? v(c.labelFormat, a, this.chart) : c.labelFormatter.call(a)
              });
            };

            c.prototype.renderItem = function (a) {
              var c = this.chart,
                  d = c.renderer,
                  g = this.options,
                  e = this.symbolWidth,
                  f = g.symbolPadding,
                  l = this.itemStyle,
                  r = this.itemHiddenStyle,
                  h = "horizontal" === g.layout ? n(g.itemDistance, 20) : 0,
                  w = !g.rtl,
                  v = a.legendItem,
                  u = !a.series,
                  b = !u && a.series.drawLegendSymbol ? a.series : a,
                  k = b.options;
              k = this.createCheckboxForItem && k && k.showCheckbox;
              h = e + f + h + (k ? 20 : 0);
              var t = g.useHTML,
                  H = a.options.className;
              v || (a.legendGroup = d.g("legend-item").addClass("highcharts-" + b.type + "-series highcharts-color-" + a.colorIndex + (H ? " " + H : "") + (u ? " highcharts-series-" + a.index : "")).attr({
                zIndex: 1
              }).add(this.scrollGroup), a.legendItem = v = d.text("", w ? e + f : -f, this.baseline || 0, t), c.styledMode || v.css(D(a.visible ? l : r)), v.attr({
                align: w ? "left" : "right",
                zIndex: 2
              }).add(a.legendGroup), this.baseline || (this.fontMetrics = d.fontMetrics(c.styledMode ? 12 : l.fontSize, v), this.baseline = this.fontMetrics.f + 3 + this.itemMarginTop, v.attr("y", this.baseline)), this.symbolHeight = g.symbolHeight || this.fontMetrics.f, b.drawLegendSymbol(this, a), this.setItemEvents && this.setItemEvents(a, v, t));
              k && !a.checkbox && this.createCheckboxForItem && this.createCheckboxForItem(a);
              this.colorizeItem(a, a.visible);
              !c.styledMode && l.width || v.css({
                width: (g.itemWidth || this.widthOption || c.spacingBox.width) - h + "px"
              });
              this.setText(a);
              c = v.getBBox();
              a.itemWidth = a.checkboxOffset = g.itemWidth || a.legendItemWidth || c.width + h;
              this.maxItemWidth = Math.max(this.maxItemWidth, a.itemWidth);
              this.totalItemWidth += a.itemWidth;
              this.itemHeight = a.itemHeight = Math.round(a.legendItemHeight || c.height || this.symbolHeight);
            };

            c.prototype.layoutItem = function (a) {
              var c = this.options,
                  d = this.padding,
                  g = "horizontal" === c.layout,
                  e = a.itemHeight,
                  f = this.itemMarginBottom,
                  l = this.itemMarginTop,
                  r = g ? n(c.itemDistance, 20) : 0,
                  h = this.maxLegendWidth;
              c = c.alignColumns && this.totalItemWidth > h ? this.maxItemWidth : a.itemWidth;
              g && this.itemX - d + c > h && (this.itemX = d, this.lastLineHeight && (this.itemY += l + this.lastLineHeight + f), this.lastLineHeight = 0);
              this.lastItemY = l + this.itemY + f;
              this.lastLineHeight = Math.max(e, this.lastLineHeight);
              a._legendItemPos = [this.itemX, this.itemY];
              g ? this.itemX += c : (this.itemY += l + e + f, this.lastLineHeight = e);
              this.offsetWidth = this.widthOption || Math.max((g ? this.itemX - d - (a.checkbox ? 0 : r) : c) + d, this.offsetWidth);
            };

            c.prototype.getAllItems = function () {
              var a = [];
              this.chart.series.forEach(function (c) {
                var d = c && c.options;
                c && n(d.showInLegend, C(d.linkedTo) ? !1 : void 0, !0) && (a = a.concat(c.legendItems || ("point" === d.legendType ? c.data : c)));
              });
              I(this, "afterGetAllItems", {
                allItems: a
              });
              return a;
            };

            c.prototype.getAlignment = function () {
              var a = this.options;
              return this.proximate ? a.align.charAt(0) + "tv" : a.floating ? "" : a.align.charAt(0) + a.verticalAlign.charAt(0) + a.layout.charAt(0);
            };

            c.prototype.adjustMargins = function (a, c) {
              var d = this.chart,
                  g = this.options,
                  e = this.getAlignment();
              e && [/(lth|ct|rth)/, /(rtv|rm|rbv)/, /(rbh|cb|lbh)/, /(lbv|lm|ltv)/].forEach(function (f, p) {
                f.test(e) && !C(a[p]) && (d[r[p]] = Math.max(d[r[p]], d.legend[(p + 1) % 2 ? "legendHeight" : "legendWidth"] + [1, -1, -1, 1][p] * g[p % 2 ? "x" : "y"] + n(g.margin, 12) + c[p] + (d.titleOffset[p] || 0)));
              });
            };

            c.prototype.proximatePositions = function () {
              var a = this.chart,
                  c = [],
                  d = "left" === this.options.align;
              this.allItems.forEach(function (g) {
                var f;
                var p = d;

                if (g.yAxis) {
                  g.xAxis.options.reversed && (p = !p);
                  g.points && (f = e(p ? g.points : g.points.slice(0).reverse(), function (a) {
                    return x(a.plotY);
                  }));
                  p = this.itemMarginTop + g.legendItem.getBBox().height + this.itemMarginBottom;
                  var q = g.yAxis.top - a.plotTop;
                  g.visible ? (f = f ? f.plotY : g.yAxis.height, f += q - .3 * p) : f = q + g.yAxis.height;
                  c.push({
                    target: f,
                    size: p,
                    item: g
                  });
                }
              }, this);
              h.distribute(c, a.plotHeight);
              c.forEach(function (c) {
                c.item._legendItemPos[1] = a.plotTop - a.spacing[0] + c.pos;
              });
            };

            c.prototype.render = function () {
              var a = this.chart,
                  c = a.renderer,
                  d = this.group,
                  g = this.box,
                  e = this.options,
                  f = this.padding;
              this.itemX = f;
              this.itemY = this.initialItemY;
              this.lastItemY = this.offsetWidth = 0;
              this.widthOption = l(e.width, a.spacingBox.width - f);
              var n = a.spacingBox.width - 2 * f - e.x;
              -1 < ["rm", "lm"].indexOf(this.getAlignment().substring(0, 2)) && (n /= 2);
              this.maxLegendWidth = this.widthOption || n;
              d || (this.group = d = c.g("legend").attr({
                zIndex: 7
              }).add(), this.contentGroup = c.g().attr({
                zIndex: 1
              }).add(d), this.scrollGroup = c.g().add(this.contentGroup));
              this.renderTitle();
              var r = this.getAllItems();
              J(r, function (a, c) {
                return (a.options && a.options.legendIndex || 0) - (c.options && c.options.legendIndex || 0);
              });
              e.reversed && r.reverse();
              this.allItems = r;
              this.display = n = !!r.length;
              this.itemHeight = this.totalItemWidth = this.maxItemWidth = this.lastLineHeight = 0;
              r.forEach(this.renderItem, this);
              r.forEach(this.layoutItem, this);
              r = (this.widthOption || this.offsetWidth) + f;
              var h = this.lastItemY + this.lastLineHeight + this.titleHeight;
              h = this.handleOverflow(h);
              h += f;
              g || (this.box = g = c.rect().addClass("highcharts-legend-box").attr({
                r: e.borderRadius
              }).add(d), g.isNew = !0);
              a.styledMode || g.attr({
                stroke: e.borderColor,
                "stroke-width": e.borderWidth || 0,
                fill: e.backgroundColor || "none"
              }).shadow(e.shadow);
              0 < r && 0 < h && (g[g.isNew ? "attr" : "animate"](g.crisp.call({}, {
                x: 0,
                y: 0,
                width: r,
                height: h
              }, g.strokeWidth())), g.isNew = !1);
              g[n ? "show" : "hide"]();
              a.styledMode && "none" === d.getStyle("display") && (r = h = 0);
              this.legendWidth = r;
              this.legendHeight = h;
              n && this.align();
              this.proximate || this.positionItems();
              I(this, "afterRender");
            };

            c.prototype.align = function (a) {
              void 0 === a && (a = this.chart.spacingBox);
              var c = this.chart,
                  d = this.options,
                  g = a.y;
              /(lth|ct|rth)/.test(this.getAlignment()) && 0 < c.titleOffset[0] ? g += c.titleOffset[0] : /(lbh|cb|rbh)/.test(this.getAlignment()) && 0 < c.titleOffset[2] && (g -= c.titleOffset[2]);
              g !== a.y && (a = D(a, {
                y: g
              }));
              this.group.align(D(d, {
                width: this.legendWidth,
                height: this.legendHeight,
                verticalAlign: this.proximate ? "top" : d.verticalAlign
              }), !0, a);
            };

            c.prototype.handleOverflow = function (a) {
              var c = this,
                  d = this.chart,
                  g = d.renderer,
                  e = this.options,
                  f = e.y,
                  l = this.padding;
              f = d.spacingBox.height + ("top" === e.verticalAlign ? -f : f) - l;

              var r = e.maxHeight,
                  h,
                  w = this.clipRect,
                  v = e.navigation,
                  u = n(v.animation, !0),
                  b = v.arrowSize || 12,
                  k = this.nav,
                  t = this.pages,
                  H,
                  m = this.allItems,
                  D = function D(a) {
                "number" === typeof a ? w.attr({
                  height: a
                }) : w && (c.clipRect = w.destroy(), c.contentGroup.clip());
                c.contentGroup.div && (c.contentGroup.div.style.clip = a ? "rect(" + l + "px,9999px," + (l + a) + "px,0)" : "auto");
              },
                  x = function x(a) {
                c[a] = g.circle(0, 0, 1.3 * b).translate(b / 2, b / 2).add(k);
                d.styledMode || c[a].attr("fill", "rgba(0,0,0,0.0001)");
                return c[a];
              };

              "horizontal" !== e.layout || "middle" === e.verticalAlign || e.floating || (f /= 2);
              r && (f = Math.min(f, r));
              t.length = 0;
              a > f && !1 !== v.enabled ? (this.clipHeight = h = Math.max(f - 20 - this.titleHeight - l, 0), this.currentPage = n(this.currentPage, 1), this.fullHeight = a, m.forEach(function (a, b) {
                var c = a._legendItemPos[1],
                    d = Math.round(a.legendItem.getBBox().height),
                    g = t.length;
                if (!g || c - t[g - 1] > h && (H || c) !== t[g - 1]) t.push(H || c), g++;
                a.pageIx = g - 1;
                H && (m[b - 1].pageIx = g - 1);
                b === m.length - 1 && c + d - t[g - 1] > h && c !== H && (t.push(c), a.pageIx = g);
                c !== H && (H = c);
              }), w || (w = c.clipRect = g.clipRect(0, l, 9999, 0), c.contentGroup.clip(w)), D(h), k || (this.nav = k = g.g().attr({
                zIndex: 1
              }).add(this.group), this.up = g.symbol("triangle", 0, 0, b, b).add(k), x("upTracker").on("click", function () {
                c.scroll(-1, u);
              }), this.pager = g.text("", 15, 10).addClass("highcharts-legend-navigation"), d.styledMode || this.pager.css(v.style), this.pager.add(k), this.down = g.symbol("triangle-down", 0, 0, b, b).add(k), x("downTracker").on("click", function () {
                c.scroll(1, u);
              })), c.scroll(0), a = f) : k && (D(), this.nav = k.destroy(), this.scrollGroup.attr({
                translateY: 1
              }), this.clipHeight = 0);
              return a;
            };

            c.prototype.scroll = function (a, c) {
              var d = this,
                  g = this.chart,
                  e = this.pages,
                  f = e.length,
                  l = this.currentPage + a;
              a = this.clipHeight;
              var q = this.options.navigation,
                  r = this.pager,
                  h = this.padding;
              l > f && (l = f);
              0 < l && ("undefined" !== typeof c && F(c, g), this.nav.attr({
                translateX: h,
                translateY: a + this.padding + 7 + this.titleHeight,
                visibility: "visible"
              }), [this.up, this.upTracker].forEach(function (a) {
                a.attr({
                  "class": 1 === l ? "highcharts-legend-nav-inactive" : "highcharts-legend-nav-active"
                });
              }), r.attr({
                text: l + "/" + f
              }), [this.down, this.downTracker].forEach(function (a) {
                a.attr({
                  x: 18 + this.pager.getBBox().width,
                  "class": l === f ? "highcharts-legend-nav-inactive" : "highcharts-legend-nav-active"
                });
              }, this), g.styledMode || (this.up.attr({
                fill: 1 === l ? q.inactiveColor : q.activeColor
              }), this.upTracker.css({
                cursor: 1 === l ? "default" : "pointer"
              }), this.down.attr({
                fill: l === f ? q.inactiveColor : q.activeColor
              }), this.downTracker.css({
                cursor: l === f ? "default" : "pointer"
              })), this.scrollOffset = -e[l - 1] + this.initialItemY, this.scrollGroup.animate({
                translateY: this.scrollOffset
              }), this.currentPage = l, this.positionCheckboxes(), c = z(n(c, g.renderer.globalAnimation, !0)), w(function () {
                I(d, "afterScroll", {
                  currentPage: l
                });
              }, c.duration));
            };

            return c;
          }();

          (/Trident\/7\.0/.test(d.navigator && d.navigator.userAgent) || m) && f(g.prototype, "positionItem", function (c, a) {
            var d = this,
                g = function g() {
              a._legendItemPos && c.call(d, a);
            };

            g();
            d.bubbleLegend || setTimeout(g);
          });
          h.Legend = g;
          return h.Legend;
        });
        N(m, "Core/Series/Point.js", [m["Core/Animation/AnimationUtilities.js"], m["Core/Globals.js"], m["Core/Utilities.js"]], function (f, h, m) {
          var z = f.animObject,
              F = m.defined,
              L = m.erase,
              K = m.extend,
              C = m.fireEvent,
              y = m.format,
              e = m.getNestedProperty,
              I = m.isArray,
              v = m.isNumber,
              x = m.isObject,
              D = m.syncTimeout,
              n = m.pick,
              l = m.removeEvent,
              J = m.uniqueKey;
          "";

          f = function () {
            function f() {
              this.colorIndex = this.category = void 0;
              this.formatPrefix = "point";
              this.id = void 0;
              this.isNull = !1;
              this.percentage = this.options = this.name = void 0;
              this.selected = !1;
              this.total = this.series = void 0;
              this.visible = !0;
              this.x = void 0;
            }

            f.prototype.animateBeforeDestroy = function () {
              var e = this,
                  d = {
                x: e.startXPos,
                opacity: 0
              },
                  g,
                  c = e.getGraphicalProps();
              c.singular.forEach(function (a) {
                g = "dataLabel" === a;
                e[a] = e[a].animate(g ? {
                  x: e[a].startXPos,
                  y: e[a].startYPos,
                  opacity: 0
                } : d);
              });
              c.plural.forEach(function (a) {
                e[a].forEach(function (a) {
                  a.element && a.animate(K({
                    x: e.startXPos
                  }, a.startYPos ? {
                    x: a.startXPos,
                    y: a.startYPos
                  } : {}));
                });
              });
            };

            f.prototype.applyOptions = function (e, d) {
              var g = this.series,
                  c = g.options.pointValKey || g.pointValKey;
              e = f.prototype.optionsToObject.call(this, e);
              K(this, e);
              this.options = this.options ? K(this.options, e) : e;
              e.group && delete this.group;
              e.dataLabels && delete this.dataLabels;
              c && (this.y = f.prototype.getNestedProperty.call(this, c));
              this.formatPrefix = (this.isNull = n(this.isValid && !this.isValid(), null === this.x || !v(this.y))) ? "null" : "point";
              this.selected && (this.state = "select");
              "name" in this && "undefined" === typeof d && g.xAxis && g.xAxis.hasNames && (this.x = g.xAxis.nameToX(this));
              "undefined" === typeof this.x && g && (this.x = "undefined" === typeof d ? g.autoIncrement(this) : d);
              return this;
            };

            f.prototype.destroy = function () {
              function e() {
                if (d.graphic || d.dataLabel || d.dataLabels) l(d), d.destroyElements();

                for (p in d) {
                  d[p] = null;
                }
              }

              var d = this,
                  g = d.series,
                  c = g.chart;
              g = g.options.dataSorting;
              var a = c.hoverPoints,
                  f = z(d.series.chart.renderer.globalAnimation),
                  p;
              d.legendItem && c.legend.destroyItem(d);
              a && (d.setState(), L(a, d), a.length || (c.hoverPoints = null));
              if (d === c.hoverPoint) d.onMouseOut();
              g && g.enabled ? (this.animateBeforeDestroy(), D(e, f.duration)) : e();
              c.pointCount--;
            };

            f.prototype.destroyElements = function (e) {
              var d = this;
              e = d.getGraphicalProps(e);
              e.singular.forEach(function (g) {
                d[g] = d[g].destroy();
              });
              e.plural.forEach(function (g) {
                d[g].forEach(function (c) {
                  c.element && c.destroy();
                });
                delete d[g];
              });
            };

            f.prototype.firePointEvent = function (e, d, g) {
              var c = this,
                  a = this.series.options;
              (a.point.events[e] || c.options && c.options.events && c.options.events[e]) && c.importEvents();
              "click" === e && a.allowPointSelect && (g = function g(a) {
                c.select && c.select(null, a.ctrlKey || a.metaKey || a.shiftKey);
              });
              C(c, e, d, g);
            };

            f.prototype.getClassName = function () {
              return "highcharts-point" + (this.selected ? " highcharts-point-select" : "") + (this.negative ? " highcharts-negative" : "") + (this.isNull ? " highcharts-null-point" : "") + ("undefined" !== typeof this.colorIndex ? " highcharts-color-" + this.colorIndex : "") + (this.options.className ? " " + this.options.className : "") + (this.zone && this.zone.className ? " " + this.zone.className.replace("highcharts-negative", "") : "");
            };

            f.prototype.getGraphicalProps = function (e) {
              var d = this,
                  g = [],
                  c,
                  a = {
                singular: [],
                plural: []
              };
              e = e || {
                graphic: 1,
                dataLabel: 1
              };
              e.graphic && g.push("graphic", "shadowGroup");
              e.dataLabel && g.push("dataLabel", "dataLabelUpper", "connector");

              for (c = g.length; c--;) {
                var f = g[c];
                d[f] && a.singular.push(f);
              }

              ["dataLabel", "connector"].forEach(function (c) {
                var g = c + "s";
                e[c] && d[g] && a.plural.push(g);
              });
              return a;
            };

            f.prototype.getLabelConfig = function () {
              return {
                x: this.category,
                y: this.y,
                color: this.color,
                colorIndex: this.colorIndex,
                key: this.name || this.category,
                series: this.series,
                point: this,
                percentage: this.percentage,
                total: this.total || this.stackTotal
              };
            };

            f.prototype.getNestedProperty = function (f) {
              if (f) return 0 === f.indexOf("custom.") ? e(f, this.options) : this[f];
            };

            f.prototype.getZone = function () {
              var e = this.series,
                  d = e.zones;
              e = e.zoneAxis || "y";
              var g = 0,
                  c;

              for (c = d[g]; this[e] >= c.value;) {
                c = d[++g];
              }

              this.nonZonedColor || (this.nonZonedColor = this.color);
              this.color = c && c.color && !this.options.color ? c.color : this.nonZonedColor;
              return c;
            };

            f.prototype.hasNewShapeType = function () {
              return (this.graphic && (this.graphic.symbolName || this.graphic.element.nodeName)) !== this.shapeType;
            };

            f.prototype.init = function (e, d, g) {
              this.series = e;
              this.applyOptions(d, g);
              this.id = F(this.id) ? this.id : J();
              this.resolveColor();
              e.chart.pointCount++;
              C(this, "afterInit");
              return this;
            };

            f.prototype.optionsToObject = function (e) {
              var d = {},
                  g = this.series,
                  c = g.options.keys,
                  a = c || g.pointArrayMap || ["y"],
                  l = a.length,
                  p = 0,
                  n = 0;
              if (v(e) || null === e) d[a[0]] = e;else if (I(e)) for (!c && e.length > l && (g = typeof e[0], "string" === g ? d.name = e[0] : "number" === g && (d.x = e[0]), p++); n < l;) {
                c && "undefined" === typeof e[p] || (0 < a[n].indexOf(".") ? f.prototype.setNestedProperty(d, e[p], a[n]) : d[a[n]] = e[p]), p++, n++;
              } else "object" === typeof e && (d = e, e.dataLabels && (g._hasPointLabels = !0), e.marker && (g._hasPointMarkers = !0));
              return d;
            };

            f.prototype.resolveColor = function () {
              var e = this.series;
              var d = e.chart.options.chart.colorCount;
              var g = e.chart.styledMode;
              delete this.nonZonedColor;
              g || this.options.color || (this.color = e.color);
              e.options.colorByPoint ? (g || (d = e.options.colors || e.chart.options.colors, this.color = this.color || d[e.colorCounter], d = d.length), g = e.colorCounter, e.colorCounter++, e.colorCounter === d && (e.colorCounter = 0)) : g = e.colorIndex;
              this.colorIndex = n(this.colorIndex, g);
            };

            f.prototype.setNestedProperty = function (e, d, g) {
              g.split(".").reduce(function (c, a, g, e) {
                c[a] = e.length - 1 === g ? d : x(c[a], !0) ? c[a] : {};
                return c[a];
              }, e);
              return e;
            };

            f.prototype.tooltipFormatter = function (e) {
              var d = this.series,
                  g = d.tooltipOptions,
                  c = n(g.valueDecimals, ""),
                  a = g.valuePrefix || "",
                  f = g.valueSuffix || "";
              d.chart.styledMode && (e = d.chart.tooltip.styledModeFormat(e));
              (d.pointArrayMap || ["y"]).forEach(function (d) {
                d = "{point." + d;
                if (a || f) e = e.replace(RegExp(d + "}", "g"), a + d + "}" + f);
                e = e.replace(RegExp(d + "}", "g"), d + ":,." + c + "f}");
              });
              return y(e, {
                point: this,
                series: this.series
              }, d.chart);
            };

            return f;
          }();

          return h.Point = f;
        });
        N(m, "Core/Series/Series.js", [m["Core/Globals.js"], m["Core/Series/Point.js"], m["Core/Utilities.js"]], function (f, h, m) {
          var z = m.error,
              F = m.extendClass,
              L = m.fireEvent,
              K = m.getOptions,
              C = m.isObject,
              y = m.merge,
              e = m.objectEach;

          m = function () {
            function f(e, h) {
              var v = y(f.defaultOptions, h);
              this.chart = e;
              this._i = e.series.length;
              e.series.push(this);
              this.options = v;
              this.userOptions = y(h);
            }

            f.addSeries = function (e, h) {
              f.seriesTypes[e] = h;
            };

            f.cleanRecursively = function (h, m) {
              var v = {};
              e(h, function (e, l) {
                if (C(h[l], !0) && !h.nodeType && m[l]) e = f.cleanRecursively(h[l], m[l]), Object.keys(e).length && (v[l] = e);else if (C(h[l]) || h[l] !== m[l]) v[l] = h[l];
              });
              return v;
            };

            f.getSeries = function (e, h) {
              void 0 === h && (h = {});
              var v = e.options.chart;
              v = h.type || v.type || v.defaultSeriesType || "";
              var n = f.seriesTypes[v];
              n || z(17, !0, e, {
                missingModuleFor: v
              });
              return new n(e, h);
            };

            f.seriesType = function (e, m, D, n, l) {
              var v = K().plotOptions || {},
                  w = f.seriesTypes;
              m = m || "";
              v[e] = y(v[m], D);
              f.addSeries(e, F(w[m] || function () {}, n));
              w[e].prototype.type = e;
              l && (w[e].prototype.pointClass = F(h, l));
              return w[e];
            };

            f.prototype.update = function (e, h) {
              void 0 === h && (h = !0);
              var m = this;
              e = f.cleanRecursively(e, this.userOptions);
              var n = e.type;
              "undefined" !== typeof n && n !== m.type && (m = f.getSeries(m.chart, e));
              L(m, "update", {
                newOptions: e
              });
              m.userOptions = y(e);
              L(m, "afterUpdate", {
                newOptions: e
              });
              h && m.chart.redraw();
              return m;
            };

            f.defaultOptions = {
              type: "base"
            };
            f.seriesTypes = {};
            return f;
          }();

          m.prototype.pointClass = h;
          f.seriesType = m.seriesType;
          f.seriesTypes = m.seriesTypes;
          return m;
        });
        N(m, "Core/Chart/Chart.js", [m["Core/Animation/AnimationUtilities.js"], m["Core/Axis/Axis.js"], m["Core/Series/Series.js"], m["Core/Globals.js"], m["Core/Legend.js"], m["Core/MSPointer.js"], m["Core/Options.js"], m["Core/Pointer.js"], m["Core/Time.js"], m["Core/Utilities.js"]], function (f, h, m, z, F, L, K, C, y, e) {
          var I = f.animate,
              v = f.animObject,
              x = f.setAnimation,
              D = z.charts,
              n = z.doc,
              l = z.win,
              J = K.defaultOptions,
              w = e.addEvent,
              r = e.attr,
              d = e.createElement,
              g = e.css,
              c = e.defined,
              a = e.discardElement,
              q = e.erase,
              p = e.error,
              B = e.extend,
              A = e.find,
              G = e.fireEvent,
              M = e.getStyle,
              T = e.isArray,
              Q = e.isFunction,
              O = e.isNumber,
              E = e.isObject,
              u = e.isString,
              b = e.merge,
              k = e.numberFormat,
              t = e.objectEach,
              H = e.pick,
              R = e.pInt,
              U = e.relativeLength,
              Z = e.removeEvent,
              aa = e.splat,
              ba = e.syncTimeout,
              S = e.uniqueKey,
              Y = z.marginNames,
              W = function () {
            function f(a, b, c) {
              this.yAxis = this.xAxis = this.userOptions = this.titleOffset = this.time = this.symbolCounter = this.spacingBox = this.spacing = this.series = this.renderTo = this.renderer = this.pointer = this.pointCount = this.plotWidth = this.plotTop = this.plotLeft = this.plotHeight = this.plotBox = this.options = this.numberFormatter = this.margin = this.legend = this.labelCollectors = this.isResizing = this.index = this.container = this.colorCounter = this.clipBox = this.chartWidth = this.chartHeight = this.bounds = this.axisOffset = this.axes = void 0;
              this.getArgs(a, b, c);
            }

            f.prototype.getArgs = function (a, b, c) {
              u(a) || a.nodeName ? (this.renderTo = a, this.init(b, c)) : this.init(a, b);
            };

            f.prototype.init = function (a, c) {
              var d,
                  g = a.series,
                  e = a.plotOptions || {};
              G(this, "init", {
                args: arguments
              }, function () {
                a.series = null;
                d = b(J, a);
                var f = d.chart || {};
                t(d.plotOptions, function (a, c) {
                  E(a) && (a.tooltip = e[c] && b(e[c].tooltip) || void 0);
                });
                d.tooltip.userOptions = a.chart && a.chart.forExport && a.tooltip.userOptions || a.tooltip;
                d.series = a.series = g;
                this.userOptions = a;
                var p = f.events;
                this.margin = [];
                this.spacing = [];
                this.bounds = {
                  h: {},
                  v: {}
                };
                this.labelCollectors = [];
                this.callback = c;
                this.isResizing = 0;
                this.options = d;
                this.axes = [];
                this.series = [];
                this.time = a.time && Object.keys(a.time).length ? new y(a.time) : z.time;
                this.numberFormatter = f.numberFormatter || k;
                this.styledMode = f.styledMode;
                this.hasCartesianSeries = f.showAxes;
                var l = this;
                l.index = D.length;
                D.push(l);
                z.chartCount++;
                p && t(p, function (a, b) {
                  Q(a) && w(l, b, a);
                });
                l.xAxis = [];
                l.yAxis = [];
                l.pointCount = l.colorCounter = l.symbolCounter = 0;
                G(l, "afterInit");
                l.firstRender();
              });
            };

            f.prototype.initSeries = function (a) {
              var b = this.options.chart;
              b = a.type || b.type || b.defaultSeriesType;
              var c = m.seriesTypes[b];
              c || p(17, !0, this, {
                missingModuleFor: b
              });
              b = new c(this, a);
              "function" === typeof b.init && b.init(this, a);
              return b;
            };

            f.prototype.setSeriesData = function () {
              this.getSeriesOrderByLinks().forEach(function (a) {
                a.points || a.data || !a.enabledDataSorting || a.setData(a.options.data, !1);
              });
            };

            f.prototype.getSeriesOrderByLinks = function () {
              return this.series.concat().sort(function (a, b) {
                return a.linkedSeries.length || b.linkedSeries.length ? b.linkedSeries.length - a.linkedSeries.length : 0;
              });
            };

            f.prototype.orderSeries = function (a) {
              var b = this.series;

              for (a = a || 0; a < b.length; a++) {
                b[a] && (b[a].index = a, b[a].name = b[a].getName());
              }
            };

            f.prototype.isInsidePlot = function (a, b, c) {
              var d = c ? b : a;
              a = c ? a : b;
              d = {
                x: d,
                y: a,
                isInsidePlot: 0 <= d && d <= this.plotWidth && 0 <= a && a <= this.plotHeight
              };
              G(this, "afterIsInsidePlot", d);
              return d.isInsidePlot;
            };

            f.prototype.redraw = function (a) {
              G(this, "beforeRedraw");
              var b = this,
                  c = b.axes,
                  d = b.series,
                  g = b.pointer,
                  k = b.legend,
                  e = b.userOptions.legend,
                  f = b.isDirtyLegend,
                  t = b.hasCartesianSeries,
                  p = b.isDirtyBox,
                  l = b.renderer,
                  q = l.isHidden(),
                  h = [];
              b.setResponsive && b.setResponsive(!1);
              x(b.hasRendered ? a : !1, b);
              q && b.temporaryDisplay();
              b.layOutTitles();

              for (a = d.length; a--;) {
                var n = d[a];

                if (n.options.stacking) {
                  var u = !0;

                  if (n.isDirty) {
                    var r = !0;
                    break;
                  }
                }
              }

              if (r) for (a = d.length; a--;) {
                n = d[a], n.options.stacking && (n.isDirty = !0);
              }
              d.forEach(function (a) {
                a.isDirty && ("point" === a.options.legendType ? ("function" === typeof a.updateTotals && a.updateTotals(), f = !0) : e && (e.labelFormatter || e.labelFormat) && (f = !0));
                a.isDirtyData && G(a, "updatedData");
              });
              f && k && k.options.enabled && (k.render(), b.isDirtyLegend = !1);
              u && b.getStacks();
              t && c.forEach(function (a) {
                b.isResizing && O(a.min) || (a.updateNames(), a.setScale());
              });
              b.getMargins();
              t && (c.forEach(function (a) {
                a.isDirty && (p = !0);
              }), c.forEach(function (a) {
                var b = a.min + "," + a.max;
                a.extKey !== b && (a.extKey = b, h.push(function () {
                  G(a, "afterSetExtremes", B(a.eventArgs, a.getExtremes()));
                  delete a.eventArgs;
                }));
                (p || u) && a.redraw();
              }));
              p && b.drawChartBox();
              G(b, "predraw");
              d.forEach(function (a) {
                (p || a.isDirty) && a.visible && a.redraw();
                a.isDirtyData = !1;
              });
              g && g.reset(!0);
              l.draw();
              G(b, "redraw");
              G(b, "render");
              q && b.temporaryDisplay(!0);
              h.forEach(function (a) {
                a.call();
              });
            };

            f.prototype.get = function (a) {
              function b(b) {
                return b.id === a || b.options && b.options.id === a;
              }

              var c = this.series,
                  d;
              var g = A(this.axes, b) || A(this.series, b);

              for (d = 0; !g && d < c.length; d++) {
                g = A(c[d].points || [], b);
              }

              return g;
            };

            f.prototype.getAxes = function () {
              var a = this,
                  b = this.options,
                  c = b.xAxis = aa(b.xAxis || {});
              b = b.yAxis = aa(b.yAxis || {});
              G(this, "getAxes");
              c.forEach(function (a, b) {
                a.index = b;
                a.isX = !0;
              });
              b.forEach(function (a, b) {
                a.index = b;
              });
              c.concat(b).forEach(function (b) {
                new h(a, b);
              });
              G(this, "afterGetAxes");
            };

            f.prototype.getSelectedPoints = function () {
              var a = [];
              this.series.forEach(function (b) {
                a = a.concat(b.getPointsCollection().filter(function (a) {
                  return H(a.selectedStaging, a.selected);
                }));
              });
              return a;
            };

            f.prototype.getSelectedSeries = function () {
              return this.series.filter(function (a) {
                return a.selected;
              });
            };

            f.prototype.setTitle = function (a, b, c) {
              this.applyDescription("title", a);
              this.applyDescription("subtitle", b);
              this.applyDescription("caption", void 0);
              this.layOutTitles(c);
            };

            f.prototype.applyDescription = function (a, c) {
              var d = this,
                  g = "title" === a ? {
                color: "#333333",
                fontSize: this.options.isStock ? "16px" : "18px"
              } : {
                color: "#666666"
              };
              g = this.options[a] = b(!this.styledMode && {
                style: g
              }, this.options[a], c);
              var k = this[a];
              k && c && (this[a] = k = k.destroy());
              g && !k && (k = this.renderer.text(g.text, 0, 0, g.useHTML).attr({
                align: g.align,
                "class": "highcharts-" + a,
                zIndex: g.zIndex || 4
              }).add(), k.update = function (b) {
                d[{
                  title: "setTitle",
                  subtitle: "setSubtitle",
                  caption: "setCaption"
                }[a]](b);
              }, this.styledMode || k.css(g.style), this[a] = k);
            };

            f.prototype.layOutTitles = function (a) {
              var b = [0, 0, 0],
                  c = this.renderer,
                  d = this.spacingBox;
              ["title", "subtitle", "caption"].forEach(function (a) {
                var g = this[a],
                    k = this.options[a],
                    e = k.verticalAlign || "top";
                a = "title" === a ? -3 : "top" === e ? b[0] + 2 : 0;

                if (g) {
                  if (!this.styledMode) var f = k.style.fontSize;
                  f = c.fontMetrics(f, g).b;
                  g.css({
                    width: (k.width || d.width + (k.widthAdjust || 0)) + "px"
                  });
                  var t = Math.round(g.getBBox(k.useHTML).height);
                  g.align(B({
                    y: "bottom" === e ? f : a + f,
                    height: t
                  }, k), !1, "spacingBox");
                  k.floating || ("top" === e ? b[0] = Math.ceil(b[0] + t) : "bottom" === e && (b[2] = Math.ceil(b[2] + t)));
                }
              }, this);
              b[0] && "top" === (this.options.title.verticalAlign || "top") && (b[0] += this.options.title.margin);
              b[2] && "bottom" === this.options.caption.verticalAlign && (b[2] += this.options.caption.margin);
              var g = !this.titleOffset || this.titleOffset.join(",") !== b.join(",");
              this.titleOffset = b;
              G(this, "afterLayOutTitles");
              !this.isDirtyBox && g && (this.isDirtyBox = this.isDirtyLegend = g, this.hasRendered && H(a, !0) && this.isDirtyBox && this.redraw());
            };

            f.prototype.getChartSize = function () {
              var a = this.options.chart,
                  b = a.width;
              a = a.height;
              var d = this.renderTo;
              c(b) || (this.containerWidth = M(d, "width"));
              c(a) || (this.containerHeight = M(d, "height"));
              this.chartWidth = Math.max(0, b || this.containerWidth || 600);
              this.chartHeight = Math.max(0, U(a, this.chartWidth) || (1 < this.containerHeight ? this.containerHeight : 400));
            };

            f.prototype.temporaryDisplay = function (a) {
              var b = this.renderTo;
              if (a) for (; b && b.style;) {
                b.hcOrigStyle && (g(b, b.hcOrigStyle), delete b.hcOrigStyle), b.hcOrigDetached && (n.body.removeChild(b), b.hcOrigDetached = !1), b = b.parentNode;
              } else for (; b && b.style;) {
                n.body.contains(b) || b.parentNode || (b.hcOrigDetached = !0, n.body.appendChild(b));
                if ("none" === M(b, "display", !1) || b.hcOricDetached) b.hcOrigStyle = {
                  display: b.style.display,
                  height: b.style.height,
                  overflow: b.style.overflow
                }, a = {
                  display: "block",
                  overflow: "hidden"
                }, b !== this.renderTo && (a.height = 0), g(b, a), b.offsetWidth || b.style.setProperty("display", "block", "important");
                b = b.parentNode;
                if (b === n.body) break;
              }
            };

            f.prototype.setClassName = function (a) {
              this.container.className = "highcharts-container " + (a || "");
            };

            f.prototype.getContainer = function () {
              var a = this.options,
                  b = a.chart;
              var c = this.renderTo;
              var k = S(),
                  e,
                  f;
              c || (this.renderTo = c = b.renderTo);
              u(c) && (this.renderTo = c = n.getElementById(c));
              c || p(13, !0, this);
              var t = R(r(c, "data-highcharts-chart"));
              O(t) && D[t] && D[t].hasRendered && D[t].destroy();
              r(c, "data-highcharts-chart", this.index);
              c.innerHTML = "";
              b.skipClone || c.offsetWidth || this.temporaryDisplay();
              this.getChartSize();
              t = this.chartWidth;
              var l = this.chartHeight;
              g(c, {
                overflow: "hidden"
              });
              this.styledMode || (e = B({
                position: "relative",
                overflow: "hidden",
                width: t + "px",
                height: l + "px",
                textAlign: "left",
                lineHeight: "normal",
                zIndex: 0,
                "-webkit-tap-highlight-color": "rgba(0,0,0,0)",
                userSelect: "none"
              }, b.style));
              this.container = c = d("div", {
                id: k
              }, e, c);
              this._cursor = c.style.cursor;
              this.renderer = new (z[b.renderer] || z.Renderer)(c, t, l, null, b.forExport, a.exporting && a.exporting.allowHTML, this.styledMode);
              x(void 0, this);
              this.setClassName(b.className);
              if (this.styledMode) for (f in a.defs) {
                this.renderer.definition(a.defs[f]);
              } else this.renderer.setStyle(b.style);
              this.renderer.chartIndex = this.index;
              G(this, "afterGetContainer");
            };

            f.prototype.getMargins = function (a) {
              var b = this.spacing,
                  d = this.margin,
                  g = this.titleOffset;
              this.resetMargins();
              g[0] && !c(d[0]) && (this.plotTop = Math.max(this.plotTop, g[0] + b[0]));
              g[2] && !c(d[2]) && (this.marginBottom = Math.max(this.marginBottom, g[2] + b[2]));
              this.legend && this.legend.display && this.legend.adjustMargins(d, b);
              G(this, "getMargins");
              a || this.getAxisMargins();
            };

            f.prototype.getAxisMargins = function () {
              var a = this,
                  b = a.axisOffset = [0, 0, 0, 0],
                  d = a.colorAxis,
                  g = a.margin,
                  k = function k(a) {
                a.forEach(function (a) {
                  a.visible && a.getOffset();
                });
              };

              a.hasCartesianSeries ? k(a.axes) : d && d.length && k(d);
              Y.forEach(function (d, k) {
                c(g[k]) || (a[d] += b[k]);
              });
              a.setChartSize();
            };

            f.prototype.reflow = function (a) {
              var b = this,
                  d = b.options.chart,
                  g = b.renderTo,
                  k = c(d.width) && c(d.height),
                  f = d.width || M(g, "width");
              d = d.height || M(g, "height");
              g = a ? a.target : l;

              if (!k && !b.isPrinting && f && d && (g === l || g === n)) {
                if (f !== b.containerWidth || d !== b.containerHeight) e.clearTimeout(b.reflowTimeout), b.reflowTimeout = ba(function () {
                  b.container && b.setSize(void 0, void 0, !1);
                }, a ? 100 : 0);
                b.containerWidth = f;
                b.containerHeight = d;
              }
            };

            f.prototype.setReflow = function (a) {
              var b = this;
              !1 === a || this.unbindReflow ? !1 === a && this.unbindReflow && (this.unbindReflow = this.unbindReflow()) : (this.unbindReflow = w(l, "resize", function (a) {
                b.options && b.reflow(a);
              }), w(this, "destroy", this.unbindReflow));
            };

            f.prototype.setSize = function (a, b, c) {
              var d = this,
                  k = d.renderer;
              d.isResizing += 1;
              x(c, d);
              c = k.globalAnimation;
              d.oldChartHeight = d.chartHeight;
              d.oldChartWidth = d.chartWidth;
              "undefined" !== typeof a && (d.options.chart.width = a);
              "undefined" !== typeof b && (d.options.chart.height = b);
              d.getChartSize();
              d.styledMode || (c ? I : g)(d.container, {
                width: d.chartWidth + "px",
                height: d.chartHeight + "px"
              }, c);
              d.setChartSize(!0);
              k.setSize(d.chartWidth, d.chartHeight, c);
              d.axes.forEach(function (a) {
                a.isDirty = !0;
                a.setScale();
              });
              d.isDirtyLegend = !0;
              d.isDirtyBox = !0;
              d.layOutTitles();
              d.getMargins();
              d.redraw(c);
              d.oldChartHeight = null;
              G(d, "resize");
              ba(function () {
                d && G(d, "endResize", null, function () {
                  --d.isResizing;
                });
              }, v(c).duration);
            };

            f.prototype.setChartSize = function (a) {
              var b = this.inverted,
                  c = this.renderer,
                  d = this.chartWidth,
                  g = this.chartHeight,
                  k = this.options.chart,
                  e = this.spacing,
                  f = this.clipOffset,
                  t,
                  p,
                  l,
                  q;
              this.plotLeft = t = Math.round(this.plotLeft);
              this.plotTop = p = Math.round(this.plotTop);
              this.plotWidth = l = Math.max(0, Math.round(d - t - this.marginRight));
              this.plotHeight = q = Math.max(0, Math.round(g - p - this.marginBottom));
              this.plotSizeX = b ? q : l;
              this.plotSizeY = b ? l : q;
              this.plotBorderWidth = k.plotBorderWidth || 0;
              this.spacingBox = c.spacingBox = {
                x: e[3],
                y: e[0],
                width: d - e[3] - e[1],
                height: g - e[0] - e[2]
              };
              this.plotBox = c.plotBox = {
                x: t,
                y: p,
                width: l,
                height: q
              };
              d = 2 * Math.floor(this.plotBorderWidth / 2);
              b = Math.ceil(Math.max(d, f[3]) / 2);
              c = Math.ceil(Math.max(d, f[0]) / 2);
              this.clipBox = {
                x: b,
                y: c,
                width: Math.floor(this.plotSizeX - Math.max(d, f[1]) / 2 - b),
                height: Math.max(0, Math.floor(this.plotSizeY - Math.max(d, f[2]) / 2 - c))
              };
              a || this.axes.forEach(function (a) {
                a.setAxisSize();
                a.setAxisTranslation();
              });
              G(this, "afterSetChartSize", {
                skipAxes: a
              });
            };

            f.prototype.resetMargins = function () {
              G(this, "resetMargins");
              var a = this,
                  b = a.options.chart;
              ["margin", "spacing"].forEach(function (c) {
                var d = b[c],
                    g = E(d) ? d : [d, d, d, d];
                ["Top", "Right", "Bottom", "Left"].forEach(function (d, k) {
                  a[c][k] = H(b[c + d], g[k]);
                });
              });
              Y.forEach(function (b, c) {
                a[b] = H(a.margin[c], a.spacing[c]);
              });
              a.axisOffset = [0, 0, 0, 0];
              a.clipOffset = [0, 0, 0, 0];
            };

            f.prototype.drawChartBox = function () {
              var a = this.options.chart,
                  b = this.renderer,
                  c = this.chartWidth,
                  d = this.chartHeight,
                  g = this.chartBackground,
                  k = this.plotBackground,
                  e = this.plotBorder,
                  f = this.styledMode,
                  t = this.plotBGImage,
                  p = a.backgroundColor,
                  l = a.plotBackgroundColor,
                  q = a.plotBackgroundImage,
                  h,
                  n = this.plotLeft,
                  u = this.plotTop,
                  r = this.plotWidth,
                  m = this.plotHeight,
                  w = this.plotBox,
                  v = this.clipRect,
                  H = this.clipBox,
                  B = "animate";
              g || (this.chartBackground = g = b.rect().addClass("highcharts-background").add(), B = "attr");
              if (f) var A = h = g.strokeWidth();else {
                A = a.borderWidth || 0;
                h = A + (a.shadow ? 8 : 0);
                p = {
                  fill: p || "none"
                };
                if (A || g["stroke-width"]) p.stroke = a.borderColor, p["stroke-width"] = A;
                g.attr(p).shadow(a.shadow);
              }
              g[B]({
                x: h / 2,
                y: h / 2,
                width: c - h - A % 2,
                height: d - h - A % 2,
                r: a.borderRadius
              });
              B = "animate";
              k || (B = "attr", this.plotBackground = k = b.rect().addClass("highcharts-plot-background").add());
              k[B](w);
              f || (k.attr({
                fill: l || "none"
              }).shadow(a.plotShadow), q && (t ? (q !== t.attr("href") && t.attr("href", q), t.animate(w)) : this.plotBGImage = b.image(q, n, u, r, m).add()));
              v ? v.animate({
                width: H.width,
                height: H.height
              }) : this.clipRect = b.clipRect(H);
              B = "animate";
              e || (B = "attr", this.plotBorder = e = b.rect().addClass("highcharts-plot-border").attr({
                zIndex: 1
              }).add());
              f || e.attr({
                stroke: a.plotBorderColor,
                "stroke-width": a.plotBorderWidth || 0,
                fill: "none"
              });
              e[B](e.crisp({
                x: n,
                y: u,
                width: r,
                height: m
              }, -e.strokeWidth()));
              this.isDirtyBox = !1;
              G(this, "afterDrawChartBox");
            };

            f.prototype.propFromSeries = function () {
              var a = this,
                  b = a.options.chart,
                  c,
                  d = a.options.series,
                  g,
                  k;
              ["inverted", "angular", "polar"].forEach(function (e) {
                c = m.seriesTypes[b.type || b.defaultSeriesType];
                k = b[e] || c && c.prototype[e];

                for (g = d && d.length; !k && g--;) {
                  (c = m.seriesTypes[d[g].type]) && c.prototype[e] && (k = !0);
                }

                a[e] = k;
              });
            };

            f.prototype.linkSeries = function () {
              var a = this,
                  b = a.series;
              b.forEach(function (a) {
                a.linkedSeries.length = 0;
              });
              b.forEach(function (b) {
                var c = b.options.linkedTo;
                u(c) && (c = ":previous" === c ? a.series[b.index - 1] : a.get(c)) && c.linkedParent !== b && (c.linkedSeries.push(b), b.linkedParent = c, c.enabledDataSorting && b.setDataSortingOptions(), b.visible = H(b.options.visible, c.options.visible, b.visible));
              });
              G(this, "afterLinkSeries");
            };

            f.prototype.renderSeries = function () {
              this.series.forEach(function (a) {
                a.translate();
                a.render();
              });
            };

            f.prototype.renderLabels = function () {
              var a = this,
                  b = a.options.labels;
              b.items && b.items.forEach(function (c) {
                var d = B(b.style, c.style),
                    g = R(d.left) + a.plotLeft,
                    k = R(d.top) + a.plotTop + 12;
                delete d.left;
                delete d.top;
                a.renderer.text(c.html, g, k).attr({
                  zIndex: 2
                }).css(d).add();
              });
            };

            f.prototype.render = function () {
              var a = this.axes,
                  b = this.colorAxis,
                  c = this.renderer,
                  d = this.options,
                  g = 0,
                  k = function k(a) {
                a.forEach(function (a) {
                  a.visible && a.render();
                });
              };

              this.setTitle();
              this.legend = new F(this, d.legend);
              this.getStacks && this.getStacks();
              this.getMargins(!0);
              this.setChartSize();
              d = this.plotWidth;
              a.some(function (a) {
                if (a.horiz && a.visible && a.options.labels.enabled && a.series.length) return g = 21, !0;
              });
              var e = this.plotHeight = Math.max(this.plotHeight - g, 0);
              a.forEach(function (a) {
                a.setScale();
              });
              this.getAxisMargins();
              var f = 1.1 < d / this.plotWidth;
              var t = 1.05 < e / this.plotHeight;
              if (f || t) a.forEach(function (a) {
                (a.horiz && f || !a.horiz && t) && a.setTickInterval(!0);
              }), this.getMargins();
              this.drawChartBox();
              this.hasCartesianSeries ? k(a) : b && b.length && k(b);
              this.seriesGroup || (this.seriesGroup = c.g("series-group").attr({
                zIndex: 3
              }).add());
              this.renderSeries();
              this.renderLabels();
              this.addCredits();
              this.setResponsive && this.setResponsive();
              this.updateContainerScaling();
              this.hasRendered = !0;
            };

            f.prototype.addCredits = function (a) {
              var c = this,
                  d = b(!0, this.options.credits, a);
              d.enabled && !this.credits && (this.credits = this.renderer.text(d.text + (this.mapCredits || ""), 0, 0).addClass("highcharts-credits").on("click", function () {
                d.href && (l.location.href = d.href);
              }).attr({
                align: d.position.align,
                zIndex: 8
              }), c.styledMode || this.credits.css(d.style), this.credits.add().align(d.position), this.credits.update = function (a) {
                c.credits = c.credits.destroy();
                c.addCredits(a);
              });
            };

            f.prototype.updateContainerScaling = function () {
              var a = this.container;

              if (2 < a.offsetWidth && 2 < a.offsetHeight && a.getBoundingClientRect) {
                var b = a.getBoundingClientRect(),
                    c = b.width / a.offsetWidth;
                a = b.height / a.offsetHeight;
                1 !== c || 1 !== a ? this.containerScaling = {
                  scaleX: c,
                  scaleY: a
                } : delete this.containerScaling;
              }
            };

            f.prototype.destroy = function () {
              var b = this,
                  c = b.axes,
                  d = b.series,
                  g = b.container,
                  k,
                  e = g && g.parentNode;
              G(b, "destroy");
              b.renderer.forExport ? q(D, b) : D[b.index] = void 0;
              z.chartCount--;
              b.renderTo.removeAttribute("data-highcharts-chart");
              Z(b);

              for (k = c.length; k--;) {
                c[k] = c[k].destroy();
              }

              this.scroller && this.scroller.destroy && this.scroller.destroy();

              for (k = d.length; k--;) {
                d[k] = d[k].destroy();
              }

              "title subtitle chartBackground plotBackground plotBGImage plotBorder seriesGroup clipRect credits pointer rangeSelector legend resetZoomButton tooltip renderer".split(" ").forEach(function (a) {
                var c = b[a];
                c && c.destroy && (b[a] = c.destroy());
              });
              g && (g.innerHTML = "", Z(g), e && a(g));
              t(b, function (a, c) {
                delete b[c];
              });
            };

            f.prototype.firstRender = function () {
              var a = this,
                  b = a.options;

              if (!a.isReadyToRender || a.isReadyToRender()) {
                a.getContainer();
                a.resetMargins();
                a.setChartSize();
                a.propFromSeries();
                a.getAxes();
                (T(b.series) ? b.series : []).forEach(function (b) {
                  a.initSeries(b);
                });
                a.linkSeries();
                a.setSeriesData();
                G(a, "beforeRender");
                C && (a.pointer = z.hasTouch || !l.PointerEvent && !l.MSPointerEvent ? new C(a, b) : new L(a, b));
                a.render();
                if (!a.renderer.imgCount && !a.hasLoaded) a.onload();
                a.temporaryDisplay(!0);
              }
            };

            f.prototype.onload = function () {
              this.callbacks.concat([this.callback]).forEach(function (a) {
                a && "undefined" !== typeof this.index && a.apply(this, [this]);
              }, this);
              G(this, "load");
              G(this, "render");
              c(this.index) && this.setReflow(this.options.chart.reflow);
              this.hasLoaded = !0;
            };

            return f;
          }();

          W.prototype.callbacks = [];

          z.chart = function (a, b, c) {
            return new W(a, b, c);
          };

          return z.Chart = W;
        });
        N(m, "Extensions/ScrollablePlotArea.js", [m["Core/Animation/AnimationUtilities.js"], m["Core/Chart/Chart.js"], m["Core/Globals.js"], m["Core/Utilities.js"]], function (f, h, m, z) {
          var F = f.stop,
              L = z.addEvent,
              K = z.createElement,
              C = z.pick;
          "";
          L(h, "afterSetChartSize", function (f) {
            var e = this.options.chart.scrollablePlotArea,
                h = e && e.minWidth;
            e = e && e.minHeight;

            if (!this.renderer.forExport) {
              if (h) {
                if (this.scrollablePixelsX = h = Math.max(0, h - this.chartWidth)) {
                  this.plotWidth += h;
                  this.inverted ? (this.clipBox.height += h, this.plotBox.height += h) : (this.clipBox.width += h, this.plotBox.width += h);
                  var v = {
                    1: {
                      name: "right",
                      value: h
                    }
                  };
                }
              } else e && (this.scrollablePixelsY = h = Math.max(0, e - this.chartHeight)) && (this.plotHeight += h, this.inverted ? (this.clipBox.width += h, this.plotBox.width += h) : (this.clipBox.height += h, this.plotBox.height += h), v = {
                2: {
                  name: "bottom",
                  value: h
                }
              });

              v && !f.skipAxes && this.axes.forEach(function (e) {
                v[e.side] ? e.getPlotLinePath = function () {
                  var f = v[e.side].name,
                      h = this[f];
                  this[f] = h - v[e.side].value;
                  var l = m.Axis.prototype.getPlotLinePath.apply(this, arguments);
                  this[f] = h;
                  return l;
                } : (e.setAxisSize(), e.setAxisTranslation());
              });
            }
          });
          L(h, "render", function () {
            this.scrollablePixelsX || this.scrollablePixelsY ? (this.setUpScrolling && this.setUpScrolling(), this.applyFixed()) : this.fixedDiv && this.applyFixed();
          });

          h.prototype.setUpScrolling = function () {
            var f = this,
                e = {
              WebkitOverflowScrolling: "touch",
              overflowX: "hidden",
              overflowY: "hidden"
            };
            this.scrollablePixelsX && (e.overflowX = "auto");
            this.scrollablePixelsY && (e.overflowY = "auto");
            this.scrollingParent = K("div", {
              className: "highcharts-scrolling-parent"
            }, {
              position: "relative"
            }, this.renderTo);
            this.scrollingContainer = K("div", {
              className: "highcharts-scrolling"
            }, e, this.scrollingParent);
            L(this.scrollingContainer, "scroll", function () {
              f.pointer && delete f.pointer.chartPosition;
            });
            this.innerContainer = K("div", {
              className: "highcharts-inner-container"
            }, null, this.scrollingContainer);
            this.innerContainer.appendChild(this.container);
            this.setUpScrolling = null;
          };

          h.prototype.moveFixedElements = function () {
            var f = this.container,
                e = this.fixedRenderer,
                h = ".highcharts-contextbutton .highcharts-credits .highcharts-legend .highcharts-legend-checkbox .highcharts-navigator-series .highcharts-navigator-xaxis .highcharts-navigator-yaxis .highcharts-navigator .highcharts-reset-zoom .highcharts-scrollbar .highcharts-subtitle .highcharts-title".split(" "),
                m;
            this.scrollablePixelsX && !this.inverted ? m = ".highcharts-yaxis" : this.scrollablePixelsX && this.inverted ? m = ".highcharts-xaxis" : this.scrollablePixelsY && !this.inverted ? m = ".highcharts-xaxis" : this.scrollablePixelsY && this.inverted && (m = ".highcharts-yaxis");
            h.push(m, m + "-labels");
            h.forEach(function (h) {
              [].forEach.call(f.querySelectorAll(h), function (f) {
                (f.namespaceURI === e.SVG_NS ? e.box : e.box.parentNode).appendChild(f);
                f.style.pointerEvents = "auto";
              });
            });
          };

          h.prototype.applyFixed = function () {
            var f,
                e,
                h = !this.fixedDiv,
                v = this.options.chart.scrollablePlotArea;
            h ? (this.fixedDiv = K("div", {
              className: "highcharts-fixed"
            }, {
              position: "absolute",
              overflow: "hidden",
              pointerEvents: "none",
              zIndex: 2,
              top: 0
            }, null, !0), null === (f = this.scrollingContainer) || void 0 === f ? void 0 : f.parentNode.insertBefore(this.fixedDiv, this.scrollingContainer), this.renderTo.style.overflow = "visible", this.fixedRenderer = f = new m.Renderer(this.fixedDiv, this.chartWidth, this.chartHeight, null === (e = this.options.chart) || void 0 === e ? void 0 : e.style), this.scrollableMask = f.path().attr({
              fill: this.options.chart.backgroundColor || "#fff",
              "fill-opacity": C(v.opacity, .85),
              zIndex: -1
            }).addClass("highcharts-scrollable-mask").add(), this.moveFixedElements(), L(this, "afterShowResetZoom", this.moveFixedElements), L(this, "afterLayOutTitles", this.moveFixedElements)) : this.fixedRenderer.setSize(this.chartWidth, this.chartHeight);
            e = this.chartWidth + (this.scrollablePixelsX || 0);
            f = this.chartHeight + (this.scrollablePixelsY || 0);
            F(this.container);
            this.container.style.width = e + "px";
            this.container.style.height = f + "px";
            this.renderer.boxWrapper.attr({
              width: e,
              height: f,
              viewBox: [0, 0, e, f].join(" ")
            });
            this.chartBackground.attr({
              width: e,
              height: f
            });
            this.scrollingContainer.style.height = this.chartHeight + "px";
            h && (v.scrollPositionX && (this.scrollingContainer.scrollLeft = this.scrollablePixelsX * v.scrollPositionX), v.scrollPositionY && (this.scrollingContainer.scrollTop = this.scrollablePixelsY * v.scrollPositionY));
            f = this.axisOffset;
            h = this.plotTop - f[0] - 1;
            v = this.plotLeft - f[3] - 1;
            e = this.plotTop + this.plotHeight + f[2] + 1;
            f = this.plotLeft + this.plotWidth + f[1] + 1;
            var x = this.plotLeft + this.plotWidth - (this.scrollablePixelsX || 0),
                D = this.plotTop + this.plotHeight - (this.scrollablePixelsY || 0);
            h = this.scrollablePixelsX ? [["M", 0, h], ["L", this.plotLeft - 1, h], ["L", this.plotLeft - 1, e], ["L", 0, e], ["Z"], ["M", x, h], ["L", this.chartWidth, h], ["L", this.chartWidth, e], ["L", x, e], ["Z"]] : this.scrollablePixelsY ? [["M", v, 0], ["L", v, this.plotTop - 1], ["L", f, this.plotTop - 1], ["L", f, 0], ["Z"], ["M", v, D], ["L", v, this.chartHeight], ["L", f, this.chartHeight], ["L", f, D], ["Z"]] : [["M", 0, 0]];
            "adjustHeight" !== this.redrawTrigger && this.scrollableMask.attr({
              d: h
            });
          };
        });
        N(m, "Core/Axis/StackingAxis.js", [m["Core/Animation/AnimationUtilities.js"], m["Core/Utilities.js"]], function (f, h) {
          var m = f.getDeferredAnimation,
              z = h.addEvent,
              F = h.destroyObjectProperties,
              L = h.fireEvent,
              K = h.objectEach,
              C = h.pick,
              y = function () {
            function e(e) {
              this.oldStacks = {};
              this.stacks = {};
              this.stacksTouched = 0;
              this.axis = e;
            }

            e.prototype.buildStacks = function () {
              var e = this.axis,
                  f = e.series,
                  h = C(e.options.reversedStacks, !0),
                  m = f.length,
                  n;

              if (!e.isXAxis) {
                this.usePercentage = !1;

                for (n = m; n--;) {
                  var l = f[h ? n : m - n - 1];
                  l.setStackedPoints();
                  l.setGroupedPoints();
                }

                for (n = 0; n < m; n++) {
                  f[n].modifyStacks();
                }

                L(e, "afterBuildStacks");
              }
            };

            e.prototype.cleanStacks = function () {
              if (!this.axis.isXAxis) {
                if (this.oldStacks) var e = this.stacks = this.oldStacks;
                K(e, function (e) {
                  K(e, function (e) {
                    e.cumulative = e.total;
                  });
                });
              }
            };

            e.prototype.resetStacks = function () {
              var e = this,
                  f = e.stacks;
              e.axis.isXAxis || K(f, function (f) {
                K(f, function (h, n) {
                  h.touched < e.stacksTouched ? (h.destroy(), delete f[n]) : (h.total = null, h.cumulative = null);
                });
              });
            };

            e.prototype.renderStackTotals = function () {
              var e = this.axis,
                  f = e.chart,
                  h = f.renderer,
                  D = this.stacks;
              e = m(f, e.options.stackLabels.animation);
              var n = this.stackTotalGroup = this.stackTotalGroup || h.g("stack-labels").attr({
                visibility: "visible",
                zIndex: 6,
                opacity: 0
              }).add();
              n.translate(f.plotLeft, f.plotTop);
              K(D, function (e) {
                K(e, function (e) {
                  e.render(n);
                });
              });
              n.animate({
                opacity: 1
              }, e);
            };

            return e;
          }();

          return function () {
            function e() {}

            e.compose = function (f) {
              z(f, "init", e.onInit);
              z(f, "destroy", e.onDestroy);
            };

            e.onDestroy = function () {
              var e = this.stacking;

              if (e) {
                var f = e.stacks;
                K(f, function (e, h) {
                  F(e);
                  f[h] = null;
                });
                e && e.stackTotalGroup && e.stackTotalGroup.destroy();
              }
            };

            e.onInit = function () {
              this.stacking || (this.stacking = new y(this));
            };

            return e;
          }();
        });
        N(m, "Mixins/LegendSymbol.js", [m["Core/Globals.js"], m["Core/Utilities.js"]], function (f, h) {
          var m = h.merge,
              z = h.pick;
          return f.LegendSymbolMixin = {
            drawRectangle: function drawRectangle(f, h) {
              var m = f.symbolHeight,
                  C = f.options.squareSymbol;
              h.legendSymbol = this.chart.renderer.rect(C ? (f.symbolWidth - m) / 2 : 0, f.baseline - m + 1, C ? m : f.symbolWidth, m, z(f.options.symbolRadius, m / 2)).addClass("highcharts-point").attr({
                zIndex: 3
              }).add(h.legendGroup);
            },
            drawLineMarker: function drawLineMarker(f) {
              var h = this.options,
                  F = h.marker,
                  C = f.symbolWidth,
                  y = f.symbolHeight,
                  e = y / 2,
                  I = this.chart.renderer,
                  v = this.legendGroup;
              f = f.baseline - Math.round(.3 * f.fontMetrics.b);
              var x = {};
              this.chart.styledMode || (x = {
                "stroke-width": h.lineWidth || 0
              }, h.dashStyle && (x.dashstyle = h.dashStyle));
              this.legendLine = I.path([["M", 0, f], ["L", C, f]]).addClass("highcharts-graph").attr(x).add(v);
              F && !1 !== F.enabled && C && (h = Math.min(z(F.radius, e), e), 0 === this.symbol.indexOf("url") && (F = m(F, {
                width: y,
                height: y
              }), h = 0), this.legendSymbol = F = I.symbol(this.symbol, C / 2 - h, f - h, 2 * h, 2 * h, F).addClass("highcharts-point").add(v), F.isMarker = !0);
            }
          };
        });
        N(m, "Core/Series/CartesianSeries.js", [m["Core/Animation/AnimationUtilities.js"], m["Core/Series/Series.js"], m["Core/Globals.js"], m["Mixins/LegendSymbol.js"], m["Core/Options.js"], m["Core/Series/Point.js"], m["Core/Renderer/SVG/SVGElement.js"], m["Core/Utilities.js"]], function (f, h, m, z, F, L, K, C) {
          var y = f.animObject,
              e = F.defaultOptions,
              I = C.addEvent,
              v = C.arrayMax,
              x = C.arrayMin,
              D = C.clamp,
              n = C.correctFloat,
              l = C.defined,
              J = C.erase,
              w = C.error,
              r = C.extend,
              d = C.find,
              g = C.fireEvent,
              c = C.getNestedProperty,
              a = C.isArray,
              q = C.isFunction,
              p = C.isNumber,
              B = C.isString,
              A = C.merge,
              G = C.objectEach,
              M = C.pick,
              T = C.removeEvent,
              Q = C.splat,
              O = C.syncTimeout;
          "";
          var E = h.seriesTypes,
              u = m.win;
          f = h.seriesType("line", void 0, {
            lineWidth: 2,
            allowPointSelect: !1,
            crisp: !0,
            showCheckbox: !1,
            animation: {
              duration: 1E3
            },
            events: {},
            marker: {
              enabledThreshold: 2,
              lineColor: "#ffffff",
              lineWidth: 0,
              radius: 4,
              states: {
                normal: {
                  animation: !0
                },
                hover: {
                  animation: {
                    duration: 50
                  },
                  enabled: !0,
                  radiusPlus: 2,
                  lineWidthPlus: 1
                },
                select: {
                  fillColor: "#cccccc",
                  lineColor: "#000000",
                  lineWidth: 2
                }
              }
            },
            point: {
              events: {}
            },
            dataLabels: {
              animation: {},
              align: "center",
              defer: !0,
              formatter: function formatter() {
                var a = this.series.chart.numberFormatter;
                return "number" !== typeof this.y ? "" : a(this.y, -1);
              },
              padding: 5,
              style: {
                fontSize: "11px",
                fontWeight: "bold",
                color: "contrast",
                textOutline: "1px contrast"
              },
              verticalAlign: "bottom",
              x: 0,
              y: 0
            },
            cropThreshold: 300,
            opacity: 1,
            pointRange: 0,
            softThreshold: !0,
            states: {
              normal: {
                animation: !0
              },
              hover: {
                animation: {
                  duration: 50
                },
                lineWidthPlus: 1,
                marker: {},
                halo: {
                  size: 10,
                  opacity: .25
                }
              },
              select: {
                animation: {
                  duration: 0
                }
              },
              inactive: {
                animation: {
                  duration: 50
                },
                opacity: .2
              }
            },
            stickyTracking: !0,
            turboThreshold: 1E3,
            findNearestPointBy: "x"
          }, {
            axisTypes: ["xAxis", "yAxis"],
            coll: "series",
            colorCounter: 0,
            cropShoulder: 1,
            directTouch: !1,
            isCartesian: !0,
            parallelArrays: ["x", "y"],
            pointClass: L,
            requireSorting: !0,
            sorted: !0,
            init: function init(a, c) {
              g(this, "init", {
                options: c
              });
              var b = this,
                  d = a.series,
                  k;
              this.eventOptions = this.eventOptions || {};
              this.eventsToUnbind = [];
              b.chart = a;
              b.options = c = b.setOptions(c);
              b.linkedSeries = [];
              b.bindAxes();
              r(b, {
                name: c.name,
                state: "",
                visible: !1 !== c.visible,
                selected: !0 === c.selected
              });
              var e = c.events;
              G(e, function (a, c) {
                q(a) && b.eventOptions[c] !== a && (q(b.eventOptions[c]) && T(b, c, b.eventOptions[c]), b.eventOptions[c] = a, I(b, c, a));
              });
              if (e && e.click || c.point && c.point.events && c.point.events.click || c.allowPointSelect) a.runTrackerClick = !0;
              b.getColor();
              b.getSymbol();
              b.parallelArrays.forEach(function (a) {
                b[a + "Data"] || (b[a + "Data"] = []);
              });
              b.isCartesian && (a.hasCartesianSeries = !0);
              d.length && (k = d[d.length - 1]);
              b._i = M(k && k._i, -1) + 1;
              b.opacity = b.options.opacity;
              a.orderSeries(this.insert(d));
              c.dataSorting && c.dataSorting.enabled ? b.setDataSortingOptions() : b.points || b.data || b.setData(c.data, !1);
              g(this, "afterInit");
            },
            is: function is(a) {
              return E[a] && this instanceof E[a];
            },
            insert: function insert(a) {
              var b = this.options.index,
                  c;

              if (p(b)) {
                for (c = a.length; c--;) {
                  if (b >= M(a[c].options.index, a[c]._i)) {
                    a.splice(c + 1, 0, this);
                    break;
                  }
                }

                -1 === c && a.unshift(this);
                c += 1;
              } else a.push(this);

              return M(c, a.length - 1);
            },
            bindAxes: function bindAxes() {
              var a = this,
                  c = a.options,
                  d = a.chart,
                  e;
              g(this, "bindAxes", null, function () {
                (a.axisTypes || []).forEach(function (b) {
                  d[b].forEach(function (d) {
                    e = d.options;
                    if (c[b] === e.index || "undefined" !== typeof c[b] && c[b] === e.id || "undefined" === typeof c[b] && 0 === e.index) a.insert(d.series), a[b] = d, d.isDirty = !0;
                  });
                  a[b] || a.optionalAxis === b || w(18, !0, d);
                });
              });
              g(this, "afterBindAxes");
            },
            updateParallelArrays: function updateParallelArrays(a, c) {
              var b = a.series,
                  d = arguments,
                  g = p(c) ? function (d) {
                var g = "y" === d && b.toYData ? b.toYData(a) : a[d];
                b[d + "Data"][c] = g;
              } : function (a) {
                Array.prototype[c].apply(b[a + "Data"], Array.prototype.slice.call(d, 2));
              };
              b.parallelArrays.forEach(g);
            },
            hasData: function hasData() {
              return this.visible && "undefined" !== typeof this.dataMax && "undefined" !== typeof this.dataMin || this.visible && this.yData && 0 < this.yData.length;
            },
            autoIncrement: function autoIncrement() {
              var a = this.options,
                  c = this.xIncrement,
                  d,
                  g = a.pointIntervalUnit,
                  e = this.chart.time;
              c = M(c, a.pointStart, 0);
              this.pointInterval = d = M(this.pointInterval, a.pointInterval, 1);
              g && (a = new e.Date(c), "day" === g ? e.set("Date", a, e.get("Date", a) + d) : "month" === g ? e.set("Month", a, e.get("Month", a) + d) : "year" === g && e.set("FullYear", a, e.get("FullYear", a) + d), d = a.getTime() - c);
              this.xIncrement = c + d;
              return c;
            },
            setDataSortingOptions: function setDataSortingOptions() {
              var a = this.options;
              r(this, {
                requireSorting: !1,
                sorted: !1,
                enabledDataSorting: !0,
                allowDG: !1
              });
              l(a.pointRange) || (a.pointRange = 1);
            },
            setOptions: function setOptions(a) {
              var b = this.chart,
                  c = b.options,
                  d = c.plotOptions,
                  f = b.userOptions || {};
              a = A(a);
              b = b.styledMode;
              var p = {
                plotOptions: d,
                userOptions: a
              };
              g(this, "setOptions", p);
              var h = p.plotOptions[this.type],
                  q = f.plotOptions || {};
              this.userOptions = p.userOptions;
              f = A(h, d.series, f.plotOptions && f.plotOptions[this.type], a);
              this.tooltipOptions = A(e.tooltip, e.plotOptions.series && e.plotOptions.series.tooltip, e.plotOptions[this.type].tooltip, c.tooltip.userOptions, d.series && d.series.tooltip, d[this.type].tooltip, a.tooltip);
              this.stickyTracking = M(a.stickyTracking, q[this.type] && q[this.type].stickyTracking, q.series && q.series.stickyTracking, this.tooltipOptions.shared && !this.noSharedTooltip ? !0 : f.stickyTracking);
              null === h.marker && delete f.marker;
              this.zoneAxis = f.zoneAxis;
              c = this.zones = (f.zones || []).slice();
              !f.negativeColor && !f.negativeFillColor || f.zones || (d = {
                value: f[this.zoneAxis + "Threshold"] || f.threshold || 0,
                className: "highcharts-negative"
              }, b || (d.color = f.negativeColor, d.fillColor = f.negativeFillColor), c.push(d));
              c.length && l(c[c.length - 1].value) && c.push(b ? {} : {
                color: this.color,
                fillColor: this.fillColor
              });
              g(this, "afterSetOptions", {
                options: f
              });
              return f;
            },
            getName: function getName() {
              return M(this.options.name, "Series " + (this.index + 1));
            },
            getCyclic: function getCyclic(a, c, d) {
              var b = this.chart,
                  g = this.userOptions,
                  k = a + "Index",
                  e = a + "Counter",
                  f = d ? d.length : M(b.options.chart[a + "Count"], b[a + "Count"]);

              if (!c) {
                var p = M(g[k], g["_" + k]);
                l(p) || (b.series.length || (b[e] = 0), g["_" + k] = p = b[e] % f, b[e] += 1);
                d && (c = d[p]);
              }

              "undefined" !== typeof p && (this[k] = p);
              this[a] = c;
            },
            getColor: function getColor() {
              this.chart.styledMode ? this.getCyclic("color") : this.options.colorByPoint ? this.options.color = null : this.getCyclic("color", this.options.color || e.plotOptions[this.type].color, this.chart.options.colors);
            },
            getPointsCollection: function getPointsCollection() {
              return (this.hasGroupedData ? this.points : this.data) || [];
            },
            getSymbol: function getSymbol() {
              this.getCyclic("symbol", this.options.marker.symbol, this.chart.options.symbols);
            },
            findPointIndex: function findPointIndex(a, c) {
              var b = a.id,
                  g = a.x,
                  k = this.points,
                  e,
                  f = this.options.dataSorting;
              if (b) var l = this.chart.get(b);else if (this.linkedParent || this.enabledDataSorting) {
                var h = f && f.matchByName ? "name" : "index";
                l = d(k, function (b) {
                  return !b.touched && b[h] === a[h];
                });
                if (!l) return;
              }

              if (l) {
                var q = l && l.index;
                "undefined" !== typeof q && (e = !0);
              }

              "undefined" === typeof q && p(g) && (q = this.xData.indexOf(g, c));
              -1 !== q && "undefined" !== typeof q && this.cropped && (q = q >= this.cropStart ? q - this.cropStart : q);
              !e && k[q] && k[q].touched && (q = void 0);
              return q;
            },
            drawLegendSymbol: z.drawLineMarker,
            updateData: function updateData(a, c) {
              var b = this.options,
                  d = b.dataSorting,
                  g = this.points,
                  k = [],
                  e,
                  f,
                  h,
                  q = this.requireSorting,
                  n = a.length === g.length,
                  u = !0;
              this.xIncrement = null;
              a.forEach(function (a, c) {
                var f = l(a) && this.pointClass.prototype.optionsToObject.call({
                  series: this
                }, a) || {};
                var t = f.x;

                if (f.id || p(t)) {
                  if (t = this.findPointIndex(f, h), -1 === t || "undefined" === typeof t ? k.push(a) : g[t] && a !== b.data[t] ? (g[t].update(a, !1, null, !1), g[t].touched = !0, q && (h = t + 1)) : g[t] && (g[t].touched = !0), !n || c !== t || d && d.enabled || this.hasDerivedData) e = !0;
                } else k.push(a);
              }, this);
              if (e) for (a = g.length; a--;) {
                (f = g[a]) && !f.touched && f.remove && f.remove(!1, c);
              } else !n || d && d.enabled ? u = !1 : (a.forEach(function (a, b) {
                g[b].update && a !== g[b].y && g[b].update(a, !1, null, !1);
              }), k.length = 0);
              g.forEach(function (a) {
                a && (a.touched = !1);
              });
              if (!u) return !1;
              k.forEach(function (a) {
                this.addPoint(a, !1, null, null, !1);
              }, this);
              null === this.xIncrement && this.xData && this.xData.length && (this.xIncrement = v(this.xData), this.autoIncrement());
              return !0;
            },
            setData: function setData(b, c, d, g) {
              var k = this,
                  e = k.points,
                  f = e && e.length || 0,
                  t,
                  l = k.options,
                  h = k.chart,
                  q = l.dataSorting,
                  n = null,
                  u = k.xAxis;
              n = l.turboThreshold;
              var r = this.xData,
                  m = this.yData,
                  A = (t = k.pointArrayMap) && t.length,
                  v = l.keys,
                  E = 0,
                  H = 1,
                  O;
              b = b || [];
              t = b.length;
              c = M(c, !0);
              q && q.enabled && (b = this.sortData(b));
              !1 !== g && t && f && !k.cropped && !k.hasGroupedData && k.visible && !k.isSeriesBoosting && (O = this.updateData(b, d));

              if (!O) {
                k.xIncrement = null;
                k.colorCounter = 0;
                this.parallelArrays.forEach(function (a) {
                  k[a + "Data"].length = 0;
                });
                if (n && t > n) {
                  if (n = k.getFirstValidPoint(b), p(n)) for (d = 0; d < t; d++) {
                    r[d] = this.autoIncrement(), m[d] = b[d];
                  } else if (a(n)) {
                    if (A) for (d = 0; d < t; d++) {
                      g = b[d], r[d] = g[0], m[d] = g.slice(1, A + 1);
                    } else for (v && (E = v.indexOf("x"), H = v.indexOf("y"), E = 0 <= E ? E : 0, H = 0 <= H ? H : 1), d = 0; d < t; d++) {
                      g = b[d], r[d] = g[E], m[d] = g[H];
                    }
                  } else w(12, !1, h);
                } else for (d = 0; d < t; d++) {
                  "undefined" !== typeof b[d] && (g = {
                    series: k
                  }, k.pointClass.prototype.applyOptions.apply(g, [b[d]]), k.updateParallelArrays(g, d));
                }
                m && B(m[0]) && w(14, !0, h);
                k.data = [];
                k.options.data = k.userOptions.data = b;

                for (d = f; d--;) {
                  e[d] && e[d].destroy && e[d].destroy();
                }

                u && (u.minRange = u.userMinRange);
                k.isDirty = h.isDirtyBox = !0;
                k.isDirtyData = !!e;
                d = !1;
              }

              "point" === l.legendType && (this.processData(), this.generatePoints());
              c && h.redraw(d);
            },
            sortData: function sortData(a) {
              var b = this,
                  d = b.options.dataSorting.sortKey || "y",
                  g = function g(a, b) {
                return l(b) && a.pointClass.prototype.optionsToObject.call({
                  series: a
                }, b) || {};
              };

              a.forEach(function (c, d) {
                a[d] = g(b, c);
                a[d].index = d;
              }, this);
              a.concat().sort(function (a, b) {
                a = c(d, a);
                b = c(d, b);
                return b < a ? -1 : b > a ? 1 : 0;
              }).forEach(function (a, b) {
                a.x = b;
              }, this);
              b.linkedSeries && b.linkedSeries.forEach(function (b) {
                var c = b.options,
                    d = c.data;
                c.dataSorting && c.dataSorting.enabled || !d || (d.forEach(function (c, k) {
                  d[k] = g(b, c);
                  a[k] && (d[k].x = a[k].x, d[k].index = k);
                }), b.setData(d, !1));
              });
              return a;
            },
            getProcessedData: function getProcessedData(a) {
              var b = this.xData,
                  c = this.yData,
                  d = b.length;
              var g = 0;
              var e = this.xAxis,
                  f = this.options;
              var p = f.cropThreshold;
              var l = a || this.getExtremesFromAll || f.getExtremesFromAll,
                  h = this.isCartesian;
              a = e && e.val2lin;
              f = !(!e || !e.logarithmic);
              var q = this.requireSorting;

              if (e) {
                e = e.getExtremes();
                var n = e.min;
                var u = e.max;
              }

              if (h && this.sorted && !l && (!p || d > p || this.forceCrop)) if (b[d - 1] < n || b[0] > u) b = [], c = [];else if (this.yData && (b[0] < n || b[d - 1] > u)) {
                g = this.cropData(this.xData, this.yData, n, u);
                b = g.xData;
                c = g.yData;
                g = g.start;
                var r = !0;
              }

              for (p = b.length || 1; --p;) {
                if (d = f ? a(b[p]) - a(b[p - 1]) : b[p] - b[p - 1], 0 < d && ("undefined" === typeof m || d < m)) var m = d;else 0 > d && q && (w(15, !1, this.chart), q = !1);
              }

              return {
                xData: b,
                yData: c,
                cropped: r,
                cropStart: g,
                closestPointRange: m
              };
            },
            processData: function processData(a) {
              var b = this.xAxis;
              if (this.isCartesian && !this.isDirty && !b.isDirty && !this.yAxis.isDirty && !a) return !1;
              a = this.getProcessedData();
              this.cropped = a.cropped;
              this.cropStart = a.cropStart;
              this.processedXData = a.xData;
              this.processedYData = a.yData;
              this.closestPointRange = this.basePointRange = a.closestPointRange;
            },
            cropData: function cropData(a, c, d, g, e) {
              var b = a.length,
                  k = 0,
                  f = b,
                  p;
              e = M(e, this.cropShoulder);

              for (p = 0; p < b; p++) {
                if (a[p] >= d) {
                  k = Math.max(0, p - e);
                  break;
                }
              }

              for (d = p; d < b; d++) {
                if (a[d] > g) {
                  f = d + e;
                  break;
                }
              }

              return {
                xData: a.slice(k, f),
                yData: c.slice(k, f),
                start: k,
                end: f
              };
            },
            generatePoints: function generatePoints() {
              var a = this.options,
                  c = a.data,
                  d = this.data,
                  e,
                  f = this.processedXData,
                  p = this.processedYData,
                  l = this.pointClass,
                  h = f.length,
                  q = this.cropStart || 0,
                  n = this.hasGroupedData;
              a = a.keys;
              var u = [],
                  m;
              d || n || (d = [], d.length = c.length, d = this.data = d);
              a && n && (this.options.keys = !1);

              for (m = 0; m < h; m++) {
                var w = q + m;

                if (n) {
                  var v = new l().init(this, [f[m]].concat(Q(p[m])));
                  v.dataGroup = this.groupMap[m];
                  v.dataGroup.options && (v.options = v.dataGroup.options, r(v, v.dataGroup.options), delete v.dataLabels);
                } else (v = d[w]) || "undefined" === typeof c[w] || (d[w] = v = new l().init(this, c[w], f[m]));

                v && (v.index = w, u[m] = v);
              }

              this.options.keys = a;
              if (d && (h !== (e = d.length) || n)) for (m = 0; m < e; m++) {
                m !== q || n || (m += h), d[m] && (d[m].destroyElements(), d[m].plotX = void 0);
              }
              this.data = d;
              this.points = u;
              g(this, "afterGeneratePoints");
            },
            getXExtremes: function getXExtremes(a) {
              return {
                min: x(a),
                max: v(a)
              };
            },
            getExtremes: function getExtremes(b, c) {
              var d = this.xAxis,
                  k = this.yAxis,
                  e = this.processedXData || this.xData,
                  f = [],
                  l = 0,
                  h = 0;
              var q = 0;
              var n = this.requireSorting ? this.cropShoulder : 0,
                  u = k ? k.positiveValuesOnly : !1,
                  r;
              b = b || this.stackedYData || this.processedYData || [];
              k = b.length;
              d && (q = d.getExtremes(), h = q.min, q = q.max);

              for (r = 0; r < k; r++) {
                var m = e[r];
                var w = b[r];
                var A = (p(w) || a(w)) && (w.length || 0 < w || !u);
                m = c || this.getExtremesFromAll || this.options.getExtremesFromAll || this.cropped || !d || (e[r + n] || m) >= h && (e[r - n] || m) <= q;
                if (A && m) if (A = w.length) for (; A--;) {
                  p(w[A]) && (f[l++] = w[A]);
                } else f[l++] = w;
              }

              b = {
                dataMin: x(f),
                dataMax: v(f)
              };
              g(this, "afterGetExtremes", {
                dataExtremes: b
              });
              return b;
            },
            applyExtremes: function applyExtremes() {
              var a = this.getExtremes();
              this.dataMin = a.dataMin;
              this.dataMax = a.dataMax;
              return a;
            },
            getFirstValidPoint: function getFirstValidPoint(a) {
              for (var b = null, c = a.length, d = 0; null === b && d < c;) {
                b = a[d], d++;
              }

              return b;
            },
            translate: function translate() {
              this.processedXData || this.processData();
              this.generatePoints();
              var b = this.options,
                  c = b.stacking,
                  d = this.xAxis,
                  e = d.categories,
                  f = this.enabledDataSorting,
                  h = this.yAxis,
                  q = this.points,
                  u = q.length,
                  r = !!this.modifyValue,
                  m,
                  w = this.pointPlacementToXValue(),
                  v = !!w,
                  A = b.threshold,
                  B = b.startFromThreshold ? A : 0,
                  E,
                  O = this.zoneAxis || "y",
                  G = Number.MAX_VALUE;

              for (m = 0; m < u; m++) {
                var x = q[m],
                    y = x.x,
                    z = x.y,
                    C = x.low,
                    J = c && h.stacking && h.stacking.stacks[(this.negStacks && z < (B ? 0 : A) ? "-" : "") + this.stackKey];
                if (h.positiveValuesOnly && !h.validatePositiveValue(z) || d.positiveValuesOnly && !d.validatePositiveValue(y)) x.isNull = !0;
                x.plotX = E = n(D(d.translate(y, 0, 0, 0, 1, w, "flags" === this.type), -1E5, 1E5));

                if (c && this.visible && J && J[y]) {
                  var F = this.getStackIndicator(F, y, this.index);

                  if (!x.isNull) {
                    var Q = J[y];
                    var I = Q.points[F.key];
                  }
                }

                a(I) && (C = I[0], z = I[1], C === B && F.key === J[y].base && (C = M(p(A) && A, h.min)), h.positiveValuesOnly && 0 >= C && (C = null), x.total = x.stackTotal = Q.total, x.percentage = Q.total && x.y / Q.total * 100, x.stackY = z, this.irregularWidths || Q.setOffset(this.pointXOffset || 0, this.barW || 0));
                x.yBottom = l(C) ? D(h.translate(C, 0, 1, 0, 1), -1E5, 1E5) : null;
                r && (z = this.modifyValue(z, x));
                x.plotY = "number" === typeof z && Infinity !== z ? D(h.translate(z, 0, 1, 0, 1), -1E5, 1E5) : void 0;
                x.isInside = this.isPointInside(x);
                x.clientX = v ? n(d.translate(y, 0, 0, 0, 1, w)) : E;
                x.negative = x[O] < (b[O + "Threshold"] || A || 0);
                x.category = e && "undefined" !== typeof e[x.x] ? e[x.x] : x.x;

                if (!x.isNull && !1 !== x.visible) {
                  "undefined" !== typeof K && (G = Math.min(G, Math.abs(E - K)));
                  var K = E;
                }

                x.zone = this.zones.length && x.getZone();
                !x.graphic && this.group && f && (x.isNew = !0);
              }

              this.closestPointRangePx = G;
              g(this, "afterTranslate");
            },
            getValidPoints: function getValidPoints(a, c, d) {
              var b = this.chart;
              return (a || this.points || []).filter(function (a) {
                return c && !b.isInsidePlot(a.plotX, a.plotY, b.inverted) ? !1 : !1 !== a.visible && (d || !a.isNull);
              });
            },
            getClipBox: function getClipBox(a, c) {
              var b = this.options,
                  d = this.chart,
                  g = d.inverted,
                  k = this.xAxis,
                  e = k && this.yAxis,
                  f = d.options.chart.scrollablePlotArea || {};
              a && !1 === b.clip && e ? a = g ? {
                y: -d.chartWidth + e.len + e.pos,
                height: d.chartWidth,
                width: d.chartHeight,
                x: -d.chartHeight + k.len + k.pos
              } : {
                y: -e.pos,
                height: d.chartHeight,
                width: d.chartWidth,
                x: -k.pos
              } : (a = this.clipBox || d.clipBox, c && (a.width = d.plotSizeX, a.x = (d.scrollablePixelsX || 0) * (f.scrollPositionX || 0)));
              return c ? {
                width: a.width,
                x: a.x
              } : a;
            },
            setClip: function setClip(a) {
              var b = this.chart,
                  c = this.options,
                  d = b.renderer,
                  g = b.inverted,
                  e = this.clipBox,
                  f = this.getClipBox(a),
                  p = this.sharedClipKey || ["_sharedClip", a && a.duration, a && a.easing, f.height, c.xAxis, c.yAxis].join(),
                  l = b[p],
                  h = b[p + "m"];
              a && (f.width = 0, g && (f.x = b.plotHeight + (!1 !== c.clip ? 0 : b.plotTop)));
              l ? b.hasLoaded || l.attr(f) : (a && (b[p + "m"] = h = d.clipRect(g ? b.plotSizeX + 99 : -99, g ? -b.plotLeft : -b.plotTop, 99, g ? b.chartWidth : b.chartHeight)), b[p] = l = d.clipRect(f), l.count = {
                length: 0
              });
              a && !l.count[this.index] && (l.count[this.index] = !0, l.count.length += 1);
              if (!1 !== c.clip || a) this.group.clip(a || e ? l : b.clipRect), this.markerGroup.clip(h), this.sharedClipKey = p;
              a || (l.count[this.index] && (delete l.count[this.index], --l.count.length), 0 === l.count.length && p && b[p] && (e || (b[p] = b[p].destroy()), b[p + "m"] && (b[p + "m"] = b[p + "m"].destroy())));
            },
            animate: function animate(a) {
              var b = this.chart,
                  c = y(this.options.animation);
              if (!b.hasRendered) if (a) this.setClip(c);else {
                var d = this.sharedClipKey;
                a = b[d];
                var g = this.getClipBox(c, !0);
                a && a.animate(g, c);
                b[d + "m"] && b[d + "m"].animate({
                  width: g.width + 99,
                  x: g.x - (b.inverted ? 0 : 99)
                }, c);
              }
            },
            afterAnimate: function afterAnimate() {
              this.setClip();
              g(this, "afterAnimate");
              this.finishedAnimating = !0;
            },
            drawPoints: function drawPoints() {
              var a = this.points,
                  c = this.chart,
                  d,
                  g,
                  e = this.options.marker,
                  f = this[this.specialGroup] || this.markerGroup,
                  p = this.xAxis,
                  l = M(e.enabled, !p || p.isRadial ? !0 : null, this.closestPointRangePx >= e.enabledThreshold * e.radius);
              if (!1 !== e.enabled || this._hasPointMarkers) for (d = 0; d < a.length; d++) {
                var h = a[d];
                var q = (g = h.graphic) ? "animate" : "attr";
                var n = h.marker || {};
                var u = !!h.marker;

                if ((l && "undefined" === typeof n.enabled || n.enabled) && !h.isNull && !1 !== h.visible) {
                  var r = M(n.symbol, this.symbol);
                  var m = this.markerAttribs(h, h.selected && "select");
                  this.enabledDataSorting && (h.startXPos = p.reversed ? -m.width : p.width);
                  var w = !1 !== h.isInside;
                  g ? g[w ? "show" : "hide"](w).animate(m) : w && (0 < m.width || h.hasImage) && (h.graphic = g = c.renderer.symbol(r, m.x, m.y, m.width, m.height, u ? n : e).add(f), this.enabledDataSorting && c.hasRendered && (g.attr({
                    x: h.startXPos
                  }), q = "animate"));
                  g && "animate" === q && g[w ? "show" : "hide"](w).animate(m);
                  if (g && !c.styledMode) g[q](this.pointAttribs(h, h.selected && "select"));
                  g && g.addClass(h.getClassName(), !0);
                } else g && (h.graphic = g.destroy());
              }
            },
            markerAttribs: function markerAttribs(a, c) {
              var b = this.options,
                  d = b.marker,
                  g = a.marker || {},
                  e = g.symbol || d.symbol,
                  k = M(g.radius, d.radius);
              c && (d = d.states[c], c = g.states && g.states[c], k = M(c && c.radius, d && d.radius, k + (d && d.radiusPlus || 0)));
              a.hasImage = e && 0 === e.indexOf("url");
              a.hasImage && (k = 0);
              a = {
                x: b.crisp ? Math.floor(a.plotX) - k : a.plotX - k,
                y: a.plotY - k
              };
              k && (a.width = a.height = 2 * k);
              return a;
            },
            pointAttribs: function pointAttribs(a, c) {
              var b = this.options.marker,
                  d = a && a.options,
                  g = d && d.marker || {},
                  e = this.color,
                  k = d && d.color,
                  f = a && a.color;
              d = M(g.lineWidth, b.lineWidth);
              var p = a && a.zone && a.zone.color;
              a = 1;
              e = k || p || f || e;
              k = g.fillColor || b.fillColor || e;
              e = g.lineColor || b.lineColor || e;
              c = c || "normal";
              b = b.states[c];
              c = g.states && g.states[c] || {};
              d = M(c.lineWidth, b.lineWidth, d + M(c.lineWidthPlus, b.lineWidthPlus, 0));
              k = c.fillColor || b.fillColor || k;
              e = c.lineColor || b.lineColor || e;
              a = M(c.opacity, b.opacity, a);
              return {
                stroke: e,
                "stroke-width": d,
                fill: k,
                opacity: a
              };
            },
            destroy: function destroy(a) {
              var b = this,
                  c = b.chart,
                  d = /AppleWebKit\/533/.test(u.navigator.userAgent),
                  e,
                  f,
                  p = b.data || [],
                  h,
                  l;
              g(b, "destroy");
              this.removeEvents(a);
              (b.axisTypes || []).forEach(function (a) {
                (l = b[a]) && l.series && (J(l.series, b), l.isDirty = l.forceRedraw = !0);
              });
              b.legendItem && b.chart.legend.destroyItem(b);

              for (f = p.length; f--;) {
                (h = p[f]) && h.destroy && h.destroy();
              }

              b.points = null;
              C.clearTimeout(b.animationTimeout);
              G(b, function (a, b) {
                a instanceof K && !a.survive && (e = d && "group" === b ? "hide" : "destroy", a[e]());
              });
              c.hoverSeries === b && (c.hoverSeries = null);
              J(c.series, b);
              c.orderSeries();
              G(b, function (c, d) {
                a && "hcEvents" === d || delete b[d];
              });
            },
            getGraphPath: function getGraphPath(a, c, d) {
              var b = this,
                  g = b.options,
                  e = g.step,
                  k,
                  f = [],
                  p = [],
                  h;
              a = a || b.points;
              (k = a.reversed) && a.reverse();
              (e = {
                right: 1,
                center: 2
              }[e] || e && 3) && k && (e = 4 - e);
              a = this.getValidPoints(a, !1, !(g.connectNulls && !c && !d));
              a.forEach(function (k, q) {
                var t = k.plotX,
                    n = k.plotY,
                    u = a[q - 1];
                (k.leftCliff || u && u.rightCliff) && !d && (h = !0);
                k.isNull && !l(c) && 0 < q ? h = !g.connectNulls : k.isNull && !c ? h = !0 : (0 === q || h ? q = [["M", k.plotX, k.plotY]] : b.getPointSpline ? q = [b.getPointSpline(a, k, q)] : e ? (q = 1 === e ? [["L", u.plotX, n]] : 2 === e ? [["L", (u.plotX + t) / 2, u.plotY], ["L", (u.plotX + t) / 2, n]] : [["L", t, u.plotY]], q.push(["L", t, n])) : q = [["L", t, n]], p.push(k.x), e && (p.push(k.x), 2 === e && p.push(k.x)), f.push.apply(f, q), h = !1);
              });
              f.xMap = p;
              return b.graphPath = f;
            },
            drawGraph: function drawGraph() {
              var a = this,
                  c = this.options,
                  d = (this.gappedPath || this.getGraphPath).call(this),
                  g = this.chart.styledMode,
                  e = [["graph", "highcharts-graph"]];
              g || e[0].push(c.lineColor || this.color || "#cccccc", c.dashStyle);
              e = a.getZonesGraphs(e);
              e.forEach(function (b, e) {
                var k = b[0],
                    f = a[k],
                    p = f ? "animate" : "attr";
                f ? (f.endX = a.preventGraphAnimation ? null : d.xMap, f.animate({
                  d: d
                })) : d.length && (a[k] = f = a.chart.renderer.path(d).addClass(b[1]).attr({
                  zIndex: 1
                }).add(a.group));
                f && !g && (k = {
                  stroke: b[2],
                  "stroke-width": c.lineWidth,
                  fill: a.fillGraph && a.color || "none"
                }, b[3] ? k.dashstyle = b[3] : "square" !== c.linecap && (k["stroke-linecap"] = k["stroke-linejoin"] = "round"), f[p](k).shadow(2 > e && c.shadow));
                f && (f.startX = d.xMap, f.isArea = d.isArea);
              });
            },
            getZonesGraphs: function getZonesGraphs(a) {
              this.zones.forEach(function (b, c) {
                c = ["zone-graph-" + c, "highcharts-graph highcharts-zone-graph-" + c + " " + (b.className || "")];
                this.chart.styledMode || c.push(b.color || this.color, b.dashStyle || this.options.dashStyle);
                a.push(c);
              }, this);
              return a;
            },
            applyZones: function applyZones() {
              var a = this,
                  c = this.chart,
                  d = c.renderer,
                  g = this.zones,
                  e,
                  f,
                  p = this.clips || [],
                  h,
                  l = this.graph,
                  q = this.area,
                  n = Math.max(c.chartWidth, c.chartHeight),
                  u = this[(this.zoneAxis || "y") + "Axis"],
                  r = c.inverted,
                  m,
                  w,
                  v,
                  A = !1,
                  B,
                  E;

              if (g.length && (l || q) && u && "undefined" !== typeof u.min) {
                var O = u.reversed;
                var G = u.horiz;
                l && !this.showLine && l.hide();
                q && q.hide();
                var x = u.getExtremes();
                g.forEach(function (b, g) {
                  e = O ? G ? c.plotWidth : 0 : G ? 0 : u.toPixels(x.min) || 0;
                  e = D(M(f, e), 0, n);
                  f = D(Math.round(u.toPixels(M(b.value, x.max), !0) || 0), 0, n);
                  A && (e = f = u.toPixels(x.max));
                  m = Math.abs(e - f);
                  w = Math.min(e, f);
                  v = Math.max(e, f);
                  u.isXAxis ? (h = {
                    x: r ? v : w,
                    y: 0,
                    width: m,
                    height: n
                  }, G || (h.x = c.plotHeight - h.x)) : (h = {
                    x: 0,
                    y: r ? v : w,
                    width: n,
                    height: m
                  }, G && (h.y = c.plotWidth - h.y));
                  r && d.isVML && (h = u.isXAxis ? {
                    x: 0,
                    y: O ? w : v,
                    height: h.width,
                    width: c.chartWidth
                  } : {
                    x: h.y - c.plotLeft - c.spacingBox.x,
                    y: 0,
                    width: h.height,
                    height: c.chartHeight
                  });
                  p[g] ? p[g].animate(h) : p[g] = d.clipRect(h);
                  B = a["zone-area-" + g];
                  E = a["zone-graph-" + g];
                  l && E && E.clip(p[g]);
                  q && B && B.clip(p[g]);
                  A = b.value > x.max;
                  a.resetZones && 0 === f && (f = void 0);
                });
                this.clips = p;
              } else a.visible && (l && l.show(!0), q && q.show(!0));
            },
            invertGroups: function invertGroups(a) {
              function b() {
                ["group", "markerGroup"].forEach(function (b) {
                  c[b] && (d.renderer.isVML && c[b].attr({
                    width: c.yAxis.len,
                    height: c.xAxis.len
                  }), c[b].width = c.yAxis.len, c[b].height = c.xAxis.len, c[b].invert(c.isRadialSeries ? !1 : a));
                });
              }

              var c = this,
                  d = c.chart;
              c.xAxis && (c.eventsToUnbind.push(I(d, "resize", b)), b(), c.invertGroups = b);
            },
            plotGroup: function plotGroup(a, c, d, g, e) {
              var b = this[a],
                  k = !b;
              d = {
                visibility: d,
                zIndex: g || .1
              };
              "undefined" === typeof this.opacity || this.chart.styledMode || "inactive" === this.state || (d.opacity = this.opacity);
              k && (this[a] = b = this.chart.renderer.g().add(e));
              b.addClass("highcharts-" + c + " highcharts-series-" + this.index + " highcharts-" + this.type + "-series " + (l(this.colorIndex) ? "highcharts-color-" + this.colorIndex + " " : "") + (this.options.className || "") + (b.hasClass("highcharts-tracker") ? " highcharts-tracker" : ""), !0);
              b.attr(d)[k ? "attr" : "animate"](this.getPlotBox());
              return b;
            },
            getPlotBox: function getPlotBox() {
              var a = this.chart,
                  c = this.xAxis,
                  d = this.yAxis;
              a.inverted && (c = d, d = this.xAxis);
              return {
                translateX: c ? c.left : a.plotLeft,
                translateY: d ? d.top : a.plotTop,
                scaleX: 1,
                scaleY: 1
              };
            },
            removeEvents: function removeEvents(a) {
              a ? this.eventsToUnbind.length && (this.eventsToUnbind.forEach(function (a) {
                a();
              }), this.eventsToUnbind.length = 0) : T(this);
            },
            render: function render() {
              var a = this,
                  c = a.chart,
                  d = a.options,
                  e = y(d.animation),
                  f = !a.finishedAnimating && c.renderer.isSVG && e.duration,
                  p = a.visible ? "inherit" : "hidden",
                  h = d.zIndex,
                  l = a.hasRendered,
                  q = c.seriesGroup,
                  n = c.inverted;
              g(this, "render");
              var u = a.plotGroup("group", "series", p, h, q);
              a.markerGroup = a.plotGroup("markerGroup", "markers", p, h, q);
              f && a.animate && a.animate(!0);
              u.inverted = a.isCartesian || a.invertable ? n : !1;
              a.drawGraph && (a.drawGraph(), a.applyZones());
              a.visible && a.drawPoints();
              a.drawDataLabels && a.drawDataLabels();
              a.redrawPoints && a.redrawPoints();
              a.drawTracker && !1 !== a.options.enableMouseTracking && a.drawTracker();
              a.invertGroups(n);
              !1 === d.clip || a.sharedClipKey || l || u.clip(c.clipRect);
              f && a.animate && a.animate();
              l || (f && e.defer && (f += e.defer), a.animationTimeout = O(function () {
                a.afterAnimate();
              }, f || 0));
              a.isDirty = !1;
              a.hasRendered = !0;
              g(a, "afterRender");
            },
            redraw: function redraw() {
              var a = this.chart,
                  c = this.isDirty || this.isDirtyData,
                  d = this.group,
                  g = this.xAxis,
                  e = this.yAxis;
              d && (a.inverted && d.attr({
                width: a.plotWidth,
                height: a.plotHeight
              }), d.animate({
                translateX: M(g && g.left, a.plotLeft),
                translateY: M(e && e.top, a.plotTop)
              }));
              this.translate();
              this.render();
              c && delete this.kdTree;
            },
            kdAxisArray: ["clientX", "plotY"],
            searchPoint: function searchPoint(a, c) {
              var b = this.xAxis,
                  d = this.yAxis,
                  g = this.chart.inverted;
              return this.searchKDTree({
                clientX: g ? b.len - a.chartY + b.pos : a.chartX - b.pos,
                plotY: g ? d.len - a.chartX + d.pos : a.chartY - d.pos
              }, c, a);
            },
            buildKDTree: function buildKDTree(a) {
              function b(a, d, g) {
                var e;

                if (e = a && a.length) {
                  var f = c.kdAxisArray[d % g];
                  a.sort(function (a, b) {
                    return a[f] - b[f];
                  });
                  e = Math.floor(e / 2);
                  return {
                    point: a[e],
                    left: b(a.slice(0, e), d + 1, g),
                    right: b(a.slice(e + 1), d + 1, g)
                  };
                }
              }

              this.buildingKdTree = !0;
              var c = this,
                  d = -1 < c.options.findNearestPointBy.indexOf("y") ? 2 : 1;
              delete c.kdTree;
              O(function () {
                c.kdTree = b(c.getValidPoints(null, !c.directTouch), d, d);
                c.buildingKdTree = !1;
              }, c.options.kdNow || a && "touchstart" === a.type ? 0 : 1);
            },
            searchKDTree: function searchKDTree(a, c, d) {
              function b(a, c, d, p) {
                var h = c.point,
                    q = g.kdAxisArray[d % p],
                    n = h;
                var u = l(a[e]) && l(h[e]) ? Math.pow(a[e] - h[e], 2) : null;
                var t = l(a[f]) && l(h[f]) ? Math.pow(a[f] - h[f], 2) : null;
                t = (u || 0) + (t || 0);
                h.dist = l(t) ? Math.sqrt(t) : Number.MAX_VALUE;
                h.distX = l(u) ? Math.sqrt(u) : Number.MAX_VALUE;
                q = a[q] - h[q];
                t = 0 > q ? "left" : "right";
                u = 0 > q ? "right" : "left";
                c[t] && (t = b(a, c[t], d + 1, p), n = t[k] < n[k] ? t : h);
                c[u] && Math.sqrt(q * q) < n[k] && (a = b(a, c[u], d + 1, p), n = a[k] < n[k] ? a : n);
                return n;
              }

              var g = this,
                  e = this.kdAxisArray[0],
                  f = this.kdAxisArray[1],
                  k = c ? "distX" : "dist";
              c = -1 < g.options.findNearestPointBy.indexOf("y") ? 2 : 1;
              this.kdTree || this.buildingKdTree || this.buildKDTree(d);
              if (this.kdTree) return b(a, this.kdTree, c, c);
            },
            pointPlacementToXValue: function pointPlacementToXValue() {
              var a = this.options,
                  c = a.pointRange,
                  d = this.xAxis;
              a = a.pointPlacement;
              "between" === a && (a = d.reversed ? -.5 : .5);
              return p(a) ? a * M(c, d.pointRange) : 0;
            },
            isPointInside: function isPointInside(a) {
              return "undefined" !== typeof a.plotY && "undefined" !== typeof a.plotX && 0 <= a.plotY && a.plotY <= this.yAxis.len && 0 <= a.plotX && a.plotX <= this.xAxis.len;
            }
          });
          "";
          return f;
        });
        N(m, "Series/LineSeries.js", [m["Core/Series/CartesianSeries.js"], m["Core/Globals.js"]], function (f, h) {
          h.Series = f;
          return h.Series;
        });
        N(m, "Extensions/Stacking.js", [m["Core/Axis/Axis.js"], m["Core/Chart/Chart.js"], m["Core/Globals.js"], m["Core/Axis/StackingAxis.js"], m["Core/Utilities.js"]], function (f, h, m, z, F) {
          var L = F.correctFloat,
              K = F.defined,
              C = F.destroyObjectProperties,
              y = F.format,
              e = F.isNumber,
              I = F.pick;
          "";

          var v = m.Series,
              x = function () {
            function f(e, f, h, m, r) {
              var d = e.chart.inverted;
              this.axis = e;
              this.isNegative = h;
              this.options = f = f || {};
              this.x = m;
              this.total = null;
              this.points = {};
              this.hasValidPoints = !1;
              this.stack = r;
              this.rightCliff = this.leftCliff = 0;
              this.alignOptions = {
                align: f.align || (d ? h ? "left" : "right" : "center"),
                verticalAlign: f.verticalAlign || (d ? "middle" : h ? "bottom" : "top"),
                y: f.y,
                x: f.x
              };
              this.textAlign = f.textAlign || (d ? h ? "right" : "left" : "center");
            }

            f.prototype.destroy = function () {
              C(this, this.axis);
            };

            f.prototype.render = function (e) {
              var f = this.axis.chart,
                  h = this.options,
                  n = h.format;
              n = n ? y(n, this, f) : h.formatter.call(this);
              this.label ? this.label.attr({
                text: n,
                visibility: "hidden"
              }) : (this.label = f.renderer.label(n, null, null, h.shape, null, null, h.useHTML, !1, "stack-labels"), n = {
                r: h.borderRadius || 0,
                text: n,
                rotation: h.rotation,
                padding: I(h.padding, 5),
                visibility: "hidden"
              }, f.styledMode || (n.fill = h.backgroundColor, n.stroke = h.borderColor, n["stroke-width"] = h.borderWidth, this.label.css(h.style)), this.label.attr(n), this.label.added || this.label.add(e));
              this.label.labelrank = f.plotHeight;
            };

            f.prototype.setOffset = function (f, h, m, w, r) {
              var d = this.axis,
                  g = d.chart;
              w = d.translate(d.stacking.usePercentage ? 100 : w ? w : this.total, 0, 0, 0, 1);
              m = d.translate(m ? m : 0);
              m = K(w) && Math.abs(w - m);
              f = I(r, g.xAxis[0].translate(this.x)) + f;
              d = K(w) && this.getStackBox(g, this, f, w, h, m, d);
              h = this.label;
              m = this.isNegative;
              f = "justify" === I(this.options.overflow, "justify");
              var c = this.textAlign;
              h && d && (r = h.getBBox(), w = h.padding, c = "left" === c ? g.inverted ? -w : w : "right" === c ? r.width : g.inverted && "center" === c ? r.width / 2 : g.inverted ? m ? r.width + w : -w : r.width / 2, m = g.inverted ? r.height / 2 : m ? -w : r.height, this.alignOptions.x = I(this.options.x, 0), this.alignOptions.y = I(this.options.y, 0), d.x -= c, d.y -= m, h.align(this.alignOptions, null, d), g.isInsidePlot(h.alignAttr.x + c - this.alignOptions.x, h.alignAttr.y + m - this.alignOptions.y) ? h.show() : (h.alignAttr.y = -9999, f = !1), f && v.prototype.justifyDataLabel.call(this.axis, h, this.alignOptions, h.alignAttr, r, d), h.attr({
                x: h.alignAttr.x,
                y: h.alignAttr.y
              }), I(!f && this.options.crop, !0) && ((g = e(h.x) && e(h.y) && g.isInsidePlot(h.x - w + h.width, h.y) && g.isInsidePlot(h.x + w, h.y)) || h.hide()));
            };

            f.prototype.getStackBox = function (e, f, h, m, r, d, g) {
              var c = f.axis.reversed,
                  a = e.inverted,
                  q = g.height + g.pos - (a ? e.plotLeft : e.plotTop);
              f = f.isNegative && !c || !f.isNegative && c;
              return {
                x: a ? f ? m - g.right : m - d + g.pos - e.plotLeft : h + e.xAxis[0].transB - e.plotLeft,
                y: a ? g.height - h - r : f ? q - m - d : q - m,
                width: a ? d : r,
                height: a ? r : d
              };
            };

            return f;
          }();

          h.prototype.getStacks = function () {
            var e = this,
                f = e.inverted;
            e.yAxis.forEach(function (e) {
              e.stacking && e.stacking.stacks && e.hasVisibleSeries && (e.stacking.oldStacks = e.stacking.stacks);
            });
            e.series.forEach(function (h) {
              var l = h.xAxis && h.xAxis.options || {};
              !h.options.stacking || !0 !== h.visible && !1 !== e.options.chart.ignoreHiddenSeries || (h.stackKey = [h.type, I(h.options.stack, ""), f ? l.top : l.left, f ? l.height : l.width].join());
            });
          };

          z.compose(f);

          v.prototype.setGroupedPoints = function () {
            this.options.centerInCategory && (this.is("column") || this.is("columnrange")) && !this.options.stacking && 1 < this.chart.series.length && v.prototype.setStackedPoints.call(this, "group");
          };

          v.prototype.setStackedPoints = function (e) {
            var f = e || this.options.stacking;

            if (f && (!0 === this.visible || !1 === this.chart.options.chart.ignoreHiddenSeries)) {
              var h = this.processedXData,
                  m = this.processedYData,
                  w = [],
                  r = m.length,
                  d = this.options,
                  g = d.threshold,
                  c = I(d.startFromThreshold && g, 0);
              d = d.stack;
              e = e ? this.type + "," + f : this.stackKey;
              var a = "-" + e,
                  q = this.negStacks,
                  p = this.yAxis,
                  v = p.stacking.stacks,
                  A = p.stacking.oldStacks,
                  G,
                  D;
              p.stacking.stacksTouched += 1;

              for (D = 0; D < r; D++) {
                var y = h[D];
                var z = m[D];
                var O = this.getStackIndicator(O, y, this.index);
                var E = O.key;
                var u = (G = q && z < (c ? 0 : g)) ? a : e;
                v[u] || (v[u] = {});
                v[u][y] || (A[u] && A[u][y] ? (v[u][y] = A[u][y], v[u][y].total = null) : v[u][y] = new x(p, p.options.stackLabels, G, y, d));
                u = v[u][y];
                null !== z ? (u.points[E] = u.points[this.index] = [I(u.cumulative, c)], K(u.cumulative) || (u.base = E), u.touched = p.stacking.stacksTouched, 0 < O.index && !1 === this.singleStacks && (u.points[E][0] = u.points[this.index + "," + y + ",0"][0])) : u.points[E] = u.points[this.index] = null;
                "percent" === f ? (G = G ? e : a, q && v[G] && v[G][y] ? (G = v[G][y], u.total = G.total = Math.max(G.total, u.total) + Math.abs(z) || 0) : u.total = L(u.total + (Math.abs(z) || 0))) : "group" === f ? null !== z && (u.total = (u.total || 0) + 1) : u.total = L(u.total + (z || 0));
                u.cumulative = "group" === f ? (u.total || 1) - 1 : I(u.cumulative, c) + (z || 0);
                null !== z && (u.points[E].push(u.cumulative), w[D] = u.cumulative, u.hasValidPoints = !0);
              }

              "percent" === f && (p.stacking.usePercentage = !0);
              "group" !== f && (this.stackedYData = w);
              p.stacking.oldStacks = {};
            }
          };

          v.prototype.modifyStacks = function () {
            var e = this,
                f = e.stackKey,
                h = e.yAxis.stacking.stacks,
                m = e.processedXData,
                w,
                r = e.options.stacking;
            e[r + "Stacker"] && [f, "-" + f].forEach(function (d) {
              for (var g = m.length, c, a; g--;) {
                if (c = m[g], w = e.getStackIndicator(w, c, e.index, d), a = (c = h[d] && h[d][c]) && c.points[w.key]) e[r + "Stacker"](a, c, g);
              }
            });
          };

          v.prototype.percentStacker = function (e, f, h) {
            f = f.total ? 100 / f.total : 0;
            e[0] = L(e[0] * f);
            e[1] = L(e[1] * f);
            this.stackedYData[h] = e[1];
          };

          v.prototype.getStackIndicator = function (e, f, h, m) {
            !K(e) || e.x !== f || m && e.key !== m ? e = {
              x: f,
              index: 0,
              key: m
            } : e.index++;
            e.key = [h, f, e.index].join();
            return e;
          };

          m.StackItem = x;
          return m.StackItem;
        });
        N(m, "Core/Dynamics.js", [m["Core/Animation/AnimationUtilities.js"], m["Core/Axis/Axis.js"], m["Core/Series/Series.js"], m["Core/Chart/Chart.js"], m["Core/Globals.js"], m["Series/LineSeries.js"], m["Core/Options.js"], m["Core/Series/Point.js"], m["Core/Time.js"], m["Core/Utilities.js"]], function (f, h, m, z, F, L, K, C, y, e) {
          var I = f.animate,
              v = f.setAnimation,
              x = m.seriesTypes,
              D = K.time,
              n = e.addEvent,
              l = e.createElement,
              J = e.css,
              w = e.defined,
              r = e.erase,
              d = e.error,
              g = e.extend,
              c = e.fireEvent,
              a = e.isArray,
              q = e.isNumber,
              p = e.isObject,
              B = e.isString,
              A = e.merge,
              G = e.objectEach,
              M = e.pick,
              T = e.relativeLength,
              Q = e.splat;

          F.cleanRecursively = function (a, c) {
            var d = {};
            G(a, function (b, g) {
              if (p(a[g], !0) && !a.nodeType && c[g]) b = F.cleanRecursively(a[g], c[g]), Object.keys(b).length && (d[g] = b);else if (p(a[g]) || a[g] !== c[g]) d[g] = a[g];
            });
            return d;
          };

          g(z.prototype, {
            addSeries: function addSeries(a, d, g) {
              var b,
                  e = this;
              a && (d = M(d, !0), c(e, "addSeries", {
                options: a
              }, function () {
                b = e.initSeries(a);
                e.isDirtyLegend = !0;
                e.linkSeries();
                b.enabledDataSorting && b.setData(a.data, !1);
                c(e, "afterAddSeries", {
                  series: b
                });
                d && e.redraw(g);
              }));
              return b;
            },
            addAxis: function addAxis(a, c, d, b) {
              return this.createAxis(c ? "xAxis" : "yAxis", {
                axis: a,
                redraw: d,
                animation: b
              });
            },
            addColorAxis: function addColorAxis(a, c, d) {
              return this.createAxis("colorAxis", {
                axis: a,
                redraw: c,
                animation: d
              });
            },
            createAxis: function createAxis(a, c) {
              var d = this.options,
                  b = "colorAxis" === a,
                  g = c.redraw,
                  e = c.animation;
              c = A(c.axis, {
                index: this[a].length,
                isX: "xAxis" === a
              });
              var f = b ? new F.ColorAxis(this, c) : new h(this, c);
              d[a] = Q(d[a] || {});
              d[a].push(c);
              b && (this.isDirtyLegend = !0, this.axes.forEach(function (a) {
                a.series = [];
              }), this.series.forEach(function (a) {
                a.bindAxes();
                a.isDirtyData = !0;
              }));
              M(g, !0) && this.redraw(e);
              return f;
            },
            showLoading: function showLoading(a) {
              var c = this,
                  d = c.options,
                  b = c.loadingDiv,
                  e = d.loading,
                  f = function f() {
                b && J(b, {
                  left: c.plotLeft + "px",
                  top: c.plotTop + "px",
                  width: c.plotWidth + "px",
                  height: c.plotHeight + "px"
                });
              };

              b || (c.loadingDiv = b = l("div", {
                className: "highcharts-loading highcharts-loading-hidden"
              }, null, c.container), c.loadingSpan = l("span", {
                className: "highcharts-loading-inner"
              }, null, b), n(c, "redraw", f));
              b.className = "highcharts-loading";
              c.loadingSpan.innerHTML = M(a, d.lang.loading, "");
              c.styledMode || (J(b, g(e.style, {
                zIndex: 10
              })), J(c.loadingSpan, e.labelStyle), c.loadingShown || (J(b, {
                opacity: 0,
                display: ""
              }), I(b, {
                opacity: e.style.opacity || .5
              }, {
                duration: e.showDuration || 0
              })));
              c.loadingShown = !0;
              f();
            },
            hideLoading: function hideLoading() {
              var a = this.options,
                  c = this.loadingDiv;
              c && (c.className = "highcharts-loading highcharts-loading-hidden", this.styledMode || I(c, {
                opacity: 0
              }, {
                duration: a.loading.hideDuration || 100,
                complete: function complete() {
                  J(c, {
                    display: "none"
                  });
                }
              }));
              this.loadingShown = !1;
            },
            propsRequireDirtyBox: "backgroundColor borderColor borderWidth borderRadius plotBackgroundColor plotBackgroundImage plotBorderColor plotBorderWidth plotShadow shadow".split(" "),
            propsRequireReflow: "margin marginTop marginRight marginBottom marginLeft spacing spacingTop spacingRight spacingBottom spacingLeft".split(" "),
            propsRequireUpdateSeries: "chart.inverted chart.polar chart.ignoreHiddenSeries chart.type colors plotOptions time tooltip".split(" "),
            collectionsWithUpdate: ["xAxis", "yAxis", "zAxis", "series"],
            update: function update(a, d, g, b) {
              var e = this,
                  f = {
                credits: "addCredits",
                title: "setTitle",
                subtitle: "setSubtitle",
                caption: "setCaption"
              },
                  p,
                  h,
                  l,
                  n = a.isResponsiveOptions,
                  u = [];
              c(e, "update", {
                options: a
              });
              n || e.setResponsive(!1, !0);
              a = F.cleanRecursively(a, e.options);
              A(!0, e.userOptions, a);

              if (p = a.chart) {
                A(!0, e.options.chart, p);
                "className" in p && e.setClassName(p.className);
                "reflow" in p && e.setReflow(p.reflow);

                if ("inverted" in p || "polar" in p || "type" in p) {
                  e.propFromSeries();
                  var m = !0;
                }

                "alignTicks" in p && (m = !0);
                G(p, function (a, b) {
                  -1 !== e.propsRequireUpdateSeries.indexOf("chart." + b) && (h = !0);
                  -1 !== e.propsRequireDirtyBox.indexOf(b) && (e.isDirtyBox = !0);
                  -1 !== e.propsRequireReflow.indexOf(b) && (n ? e.isDirtyBox = !0 : l = !0);
                });
                !e.styledMode && "style" in p && e.renderer.setStyle(p.style);
              }

              !e.styledMode && a.colors && (this.options.colors = a.colors);
              a.time && (this.time === D && (this.time = new y(a.time)), A(!0, e.options.time, a.time));
              G(a, function (b, c) {
                if (e[c] && "function" === typeof e[c].update) e[c].update(b, !1);else if ("function" === typeof e[f[c]]) e[f[c]](b);else "color" !== c && -1 === e.collectionsWithUpdate.indexOf(c) && A(!0, e.options[c], a[c]);
                "chart" !== c && -1 !== e.propsRequireUpdateSeries.indexOf(c) && (h = !0);
              });
              this.collectionsWithUpdate.forEach(function (b) {
                if (a[b]) {
                  if ("series" === b) {
                    var c = [];
                    e[b].forEach(function (a, b) {
                      a.options.isInternal || c.push(M(a.options.index, b));
                    });
                  }

                  Q(a[b]).forEach(function (a, d) {
                    var f = w(a.id),
                        k;
                    f && (k = e.get(a.id));
                    k || (k = e[b][c ? c[d] : d]) && f && w(k.options.id) && (k = void 0);
                    k && k.coll === b && (k.update(a, !1), g && (k.touched = !0));
                    !k && g && e.collectionsWithInit[b] && (e.collectionsWithInit[b][0].apply(e, [a].concat(e.collectionsWithInit[b][1] || []).concat([!1])).touched = !0);
                  });
                  g && e[b].forEach(function (a) {
                    a.touched || a.options.isInternal ? delete a.touched : u.push(a);
                  });
                }
              });
              u.forEach(function (a) {
                a.remove && a.remove(!1);
              });
              m && e.axes.forEach(function (a) {
                a.update({}, !1);
              });
              h && e.getSeriesOrderByLinks().forEach(function (a) {
                a.chart && a.update({}, !1);
              }, this);
              m = p && p.width;
              p = p && p.height;
              B(p) && (p = T(p, m || e.chartWidth));
              l || q(m) && m !== e.chartWidth || q(p) && p !== e.chartHeight ? e.setSize(m, p, b) : M(d, !0) && e.redraw(b);
              c(e, "afterUpdate", {
                options: a,
                redraw: d,
                animation: b
              });
            },
            setSubtitle: function setSubtitle(a, c) {
              this.applyDescription("subtitle", a);
              this.layOutTitles(c);
            },
            setCaption: function setCaption(a, c) {
              this.applyDescription("caption", a);
              this.layOutTitles(c);
            }
          });
          z.prototype.collectionsWithInit = {
            xAxis: [z.prototype.addAxis, [!0]],
            yAxis: [z.prototype.addAxis, [!1]],
            series: [z.prototype.addSeries]
          };
          g(C.prototype, {
            update: function update(a, c, d, b) {
              function g() {
                e.applyOptions(a);
                var b = h && e.hasDummyGraphic;
                b = null === e.y ? !b : b;
                h && b && (e.graphic = h.destroy(), delete e.hasDummyGraphic);
                p(a, !0) && (h && h.element && a && a.marker && "undefined" !== typeof a.marker.symbol && (e.graphic = h.destroy()), a && a.dataLabels && e.dataLabel && (e.dataLabel = e.dataLabel.destroy()), e.connector && (e.connector = e.connector.destroy()));
                q = e.index;
                f.updateParallelArrays(e, q);
                n.data[q] = p(n.data[q], !0) || p(a, !0) ? e.options : M(a, n.data[q]);
                f.isDirty = f.isDirtyData = !0;
                !f.fixedBox && f.hasCartesianSeries && (l.isDirtyBox = !0);
                "point" === n.legendType && (l.isDirtyLegend = !0);
                c && l.redraw(d);
              }

              var e = this,
                  f = e.series,
                  h = e.graphic,
                  q,
                  l = f.chart,
                  n = f.options;
              c = M(c, !0);
              !1 === b ? g() : e.firePointEvent("update", {
                options: a
              }, g);
            },
            remove: function remove(a, c) {
              this.series.removePoint(this.series.data.indexOf(this), a, c);
            }
          });
          g(L.prototype, {
            addPoint: function addPoint(a, d, g, b, e) {
              var f = this.options,
                  k = this.data,
                  p = this.chart,
                  h = this.xAxis;
              h = h && h.hasNames && h.names;
              var q = f.data,
                  l = this.xData,
                  n;
              d = M(d, !0);
              var u = {
                series: this
              };
              this.pointClass.prototype.applyOptions.apply(u, [a]);
              var m = u.x;
              var r = l.length;
              if (this.requireSorting && m < l[r - 1]) for (n = !0; r && l[r - 1] > m;) {
                r--;
              }
              this.updateParallelArrays(u, "splice", r, 0, 0);
              this.updateParallelArrays(u, r);
              h && u.name && (h[m] = u.name);
              q.splice(r, 0, a);
              n && (this.data.splice(r, 0, null), this.processData());
              "point" === f.legendType && this.generatePoints();
              g && (k[0] && k[0].remove ? k[0].remove(!1) : (k.shift(), this.updateParallelArrays(u, "shift"), q.shift()));
              !1 !== e && c(this, "addPoint", {
                point: u
              });
              this.isDirtyData = this.isDirty = !0;
              d && p.redraw(b);
            },
            removePoint: function removePoint(a, c, d) {
              var b = this,
                  g = b.data,
                  e = g[a],
                  f = b.points,
                  p = b.chart,
                  h = function h() {
                f && f.length === g.length && f.splice(a, 1);
                g.splice(a, 1);
                b.options.data.splice(a, 1);
                b.updateParallelArrays(e || {
                  series: b
                }, "splice", a, 1);
                e && e.destroy();
                b.isDirty = !0;
                b.isDirtyData = !0;
                c && p.redraw();
              };

              v(d, p);
              c = M(c, !0);
              e ? e.firePointEvent("remove", null, h) : h();
            },
            remove: function remove(a, d, g, b) {
              function e() {
                f.destroy(b);
                f.remove = null;
                p.isDirtyLegend = p.isDirtyBox = !0;
                p.linkSeries();
                M(a, !0) && p.redraw(d);
              }

              var f = this,
                  p = f.chart;
              !1 !== g ? c(f, "remove", null, e) : e();
            },
            update: function update(a, e) {
              a = F.cleanRecursively(a, this.userOptions);
              c(this, "update", {
                options: a
              });
              var f = this,
                  b = f.chart,
                  k = f.userOptions,
                  p = f.initialType || f.type,
                  h = b.options.plotOptions,
                  q = a.type || k.type || b.options.chart.type,
                  l = !(this.hasDerivedData || q && q !== this.type || "undefined" !== typeof a.pointStart || "undefined" !== typeof a.pointInterval || f.hasOptionChanged("dataGrouping") || f.hasOptionChanged("pointStart") || f.hasOptionChanged("pointInterval") || f.hasOptionChanged("pointIntervalUnit") || f.hasOptionChanged("keys")),
                  n = x[p].prototype,
                  m,
                  r = ["eventOptions", "navigatorSeries", "baseSeries"],
                  w = f.finishedAnimating && {
                animation: !1
              },
                  v = {};
              l && (r.push("data", "isDirtyData", "points", "processedXData", "processedYData", "xIncrement", "cropped", "_hasPointMarkers", "_hasPointLabels", "mapMap", "mapData", "minY", "maxY", "minX", "maxX"), !1 !== a.visible && r.push("area", "graph"), f.parallelArrays.forEach(function (a) {
                r.push(a + "Data");
              }), a.data && (a.dataSorting && g(f.options.dataSorting, a.dataSorting), this.setData(a.data, !1)));
              a = A(k, w, {
                index: "undefined" === typeof k.index ? f.index : k.index,
                pointStart: M(h && h.series && h.series.pointStart, k.pointStart, f.xData[0])
              }, !l && {
                data: f.options.data
              }, a);
              l && a.data && (a.data = f.options.data);
              r = ["group", "markerGroup", "dataLabelsGroup", "transformGroup"].concat(r);
              r.forEach(function (a) {
                r[a] = f[a];
                delete f[a];
              });
              f.remove(!1, null, !1, !0);

              for (m in n) {
                f[m] = void 0;
              }

              x[q || p] ? g(f, x[q || p].prototype) : d(17, !0, b, {
                missingModuleFor: q || p
              });
              r.forEach(function (a) {
                f[a] = r[a];
              });
              f.init(b, a);

              if (l && this.points) {
                var B = f.options;
                !1 === B.visible ? (v.graphic = 1, v.dataLabel = 1) : f._hasPointLabels || (a = B.marker, k = B.dataLabels, a && (!1 === a.enabled || "symbol" in a) && (v.graphic = 1), k && !1 === k.enabled && (v.dataLabel = 1));
                this.points.forEach(function (a) {
                  a && a.series && (a.resolveColor(), Object.keys(v).length && a.destroyElements(v), !1 === B.showInLegend && a.legendItem && b.legend.destroyItem(a));
                }, this);
              }

              f.initialType = p;
              b.linkSeries();
              c(this, "afterUpdate");
              M(e, !0) && b.redraw(l ? void 0 : !1);
            },
            setName: function setName(a) {
              this.name = this.options.name = this.userOptions.name = a;
              this.chart.isDirtyLegend = !0;
            },
            hasOptionChanged: function hasOptionChanged(a) {
              var c = this.options[a],
                  d = this.chart.options.plotOptions,
                  b = this.userOptions[a];
              return b ? c !== b : c !== M(d && d[this.type] && d[this.type][a], d && d.series && d.series[a], c);
            }
          });
          g(h.prototype, {
            update: function update(a, c) {
              var d = this.chart,
                  b = a && a.events || {};
              a = A(this.userOptions, a);
              d.options[this.coll].indexOf && (d.options[this.coll][d.options[this.coll].indexOf(this.userOptions)] = a);
              G(d.options[this.coll].events, function (a, c) {
                "undefined" === typeof b[c] && (b[c] = void 0);
              });
              this.destroy(!0);
              this.init(d, g(a, {
                events: b
              }));
              d.isDirtyBox = !0;
              M(c, !0) && d.redraw();
            },
            remove: function remove(c) {
              for (var d = this.chart, g = this.coll, b = this.series, e = b.length; e--;) {
                b[e] && b[e].remove(!1);
              }

              r(d.axes, this);
              r(d[g], this);
              a(d.options[g]) ? d.options[g].splice(this.options.index, 1) : delete d.options[g];
              d[g].forEach(function (a, b) {
                a.options.index = a.userOptions.index = b;
              });
              this.destroy();
              d.isDirtyBox = !0;
              M(c, !0) && d.redraw();
            },
            setTitle: function setTitle(a, c) {
              this.update({
                title: a
              }, c);
            },
            setCategories: function setCategories(a, c) {
              this.update({
                categories: a
              }, c);
            }
          });
        });
        N(m, "Series/AreaSeries.js", [m["Core/Series/Series.js"], m["Core/Color/Color.js"], m["Core/Globals.js"], m["Mixins/LegendSymbol.js"], m["Core/Utilities.js"]], function (f, h, m, z, F) {
          var L = h.parse,
              K = F.objectEach,
              C = F.pick,
              y = m.Series;
          f.seriesType("area", "line", {
            threshold: 0
          }, {
            singleStacks: !1,
            getStackPoints: function getStackPoints(e) {
              var f = [],
                  h = [],
                  m = this.xAxis,
                  D = this.yAxis,
                  n = D.stacking.stacks[this.stackKey],
                  l = {},
                  y = this.index,
                  w = D.series,
                  r = w.length,
                  d = C(D.options.reversedStacks, !0) ? 1 : -1,
                  g;
              e = e || this.points;

              if (this.options.stacking) {
                for (g = 0; g < e.length; g++) {
                  e[g].leftNull = e[g].rightNull = void 0, l[e[g].x] = e[g];
                }

                K(n, function (a, c) {
                  null !== a.total && h.push(c);
                });
                h.sort(function (a, c) {
                  return a - c;
                });
                var c = w.map(function (a) {
                  return a.visible;
                });
                h.forEach(function (a, e) {
                  var p = 0,
                      q,
                      w;
                  if (l[a] && !l[a].isNull) f.push(l[a]), [-1, 1].forEach(function (f) {
                    var p = 1 === f ? "rightNull" : "leftNull",
                        m = 0,
                        v = n[h[e + f]];
                    if (v) for (g = y; 0 <= g && g < r;) {
                      q = v.points[g], q || (g === y ? l[a][p] = !0 : c[g] && (w = n[a].points[g]) && (m -= w[1] - w[0])), g += d;
                    }
                    l[a][1 === f ? "rightCliff" : "leftCliff"] = m;
                  });else {
                    for (g = y; 0 <= g && g < r;) {
                      if (q = n[a].points[g]) {
                        p = q[1];
                        break;
                      }

                      g += d;
                    }

                    p = D.translate(p, 0, 1, 0, 1);
                    f.push({
                      isNull: !0,
                      plotX: m.translate(a, 0, 0, 0, 1),
                      x: a,
                      plotY: p,
                      yBottom: p
                    });
                  }
                });
              }

              return f;
            },
            getGraphPath: function getGraphPath(e) {
              var f = y.prototype.getGraphPath,
                  h = this.options,
                  m = h.stacking,
                  D = this.yAxis,
                  n,
                  l = [],
                  z = [],
                  w = this.index,
                  r = D.stacking.stacks[this.stackKey],
                  d = h.threshold,
                  g = Math.round(D.getThreshold(h.threshold));
              h = C(h.connectNulls, "percent" === m);

              var c = function c(a, _c17, f) {
                var p = e[a];
                a = m && r[p.x].points[w];
                var h = p[f + "Null"] || 0;
                f = p[f + "Cliff"] || 0;
                p = !0;

                if (f || h) {
                  var n = (h ? a[0] : a[1]) + f;
                  var v = a[0] + f;
                  p = !!h;
                } else !m && e[_c17] && e[_c17].isNull && (n = v = d);

                "undefined" !== typeof n && (z.push({
                  plotX: q,
                  plotY: null === n ? g : D.getThreshold(n),
                  isNull: p,
                  isCliff: !0
                }), l.push({
                  plotX: q,
                  plotY: null === v ? g : D.getThreshold(v),
                  doCurve: !1
                }));
              };

              e = e || this.points;
              m && (e = this.getStackPoints(e));

              for (n = 0; n < e.length; n++) {
                m || (e[n].leftCliff = e[n].rightCliff = e[n].leftNull = e[n].rightNull = void 0);
                var a = e[n].isNull;
                var q = C(e[n].rectPlotX, e[n].plotX);
                var p = m ? e[n].yBottom : g;
                if (!a || h) h || c(n, n - 1, "left"), a && !m && h || (z.push(e[n]), l.push({
                  x: n,
                  plotX: q,
                  plotY: p
                })), h || c(n, n + 1, "right");
              }

              n = f.call(this, z, !0, !0);
              l.reversed = !0;
              a = f.call(this, l, !0, !0);
              (p = a[0]) && "M" === p[0] && (a[0] = ["L", p[1], p[2]]);
              a = n.concat(a);
              f = f.call(this, z, !1, h);
              a.xMap = n.xMap;
              this.areaPath = a;
              return f;
            },
            drawGraph: function drawGraph() {
              this.areaPath = [];
              y.prototype.drawGraph.apply(this);
              var e = this,
                  f = this.areaPath,
                  h = this.options,
                  m = [["area", "highcharts-area", this.color, h.fillColor]];
              this.zones.forEach(function (f, n) {
                m.push(["zone-area-" + n, "highcharts-area highcharts-zone-area-" + n + " " + f.className, f.color || e.color, f.fillColor || h.fillColor]);
              });
              m.forEach(function (m) {
                var n = m[0],
                    l = e[n],
                    v = l ? "animate" : "attr",
                    w = {};
                l ? (l.endX = e.preventGraphAnimation ? null : f.xMap, l.animate({
                  d: f
                })) : (w.zIndex = 0, l = e[n] = e.chart.renderer.path(f).addClass(m[1]).add(e.group), l.isArea = !0);
                e.chart.styledMode || (w.fill = C(m[3], L(m[2]).setOpacity(C(h.fillOpacity, .75)).get()));
                l[v](w);
                l.startX = f.xMap;
                l.shiftUnit = h.step ? 2 : 1;
              });
            },
            drawLegendSymbol: z.drawRectangle
          });
          "";
        });
        N(m, "Series/SplineSeries.js", [m["Core/Series/Series.js"], m["Core/Utilities.js"]], function (f, h) {
          var m = h.pick;
          f.seriesType("spline", "line", {}, {
            getPointSpline: function getPointSpline(f, h, L) {
              var z = h.plotX || 0,
                  C = h.plotY || 0,
                  y = f[L - 1];
              L = f[L + 1];

              if (y && !y.isNull && !1 !== y.doCurve && !h.isCliff && L && !L.isNull && !1 !== L.doCurve && !h.isCliff) {
                f = y.plotY || 0;
                var e = L.plotX || 0;
                L = L.plotY || 0;
                var F = 0;
                var v = (1.5 * z + (y.plotX || 0)) / 2.5;
                var x = (1.5 * C + f) / 2.5;
                e = (1.5 * z + e) / 2.5;
                var D = (1.5 * C + L) / 2.5;
                e !== v && (F = (D - x) * (e - z) / (e - v) + C - D);
                x += F;
                D += F;
                x > f && x > C ? (x = Math.max(f, C), D = 2 * C - x) : x < f && x < C && (x = Math.min(f, C), D = 2 * C - x);
                D > L && D > C ? (D = Math.max(L, C), x = 2 * C - D) : D < L && D < C && (D = Math.min(L, C), x = 2 * C - D);
                h.rightContX = e;
                h.rightContY = D;
              }

              h = ["C", m(y.rightContX, y.plotX, 0), m(y.rightContY, y.plotY, 0), m(v, z, 0), m(x, C, 0), z, C];
              y.rightContX = y.rightContY = void 0;
              return h;
            }
          });
          "";
        });
        N(m, "Series/AreaSplineSeries.js", [m["Core/Series/Series.js"], m["Mixins/LegendSymbol.js"], m["Core/Options.js"]], function (f, h, m) {
          var z = f.seriesTypes.area.prototype;
          f.seriesType("areaspline", "spline", m.defaultOptions.plotOptions.area, {
            getStackPoints: z.getStackPoints,
            getGraphPath: z.getGraphPath,
            drawGraph: z.drawGraph,
            drawLegendSymbol: h.drawRectangle
          });
          "";
        });
        N(m, "Series/ColumnSeries.js", [m["Core/Animation/AnimationUtilities.js"], m["Core/Series/Series.js"], m["Core/Color/Color.js"], m["Core/Globals.js"], m["Mixins/LegendSymbol.js"], m["Series/LineSeries.js"], m["Core/Utilities.js"]], function (f, h, m, z, F, L, K) {
          var C = f.animObject,
              y = m.parse;
          f = z.noop;
          var e = K.clamp,
              I = K.defined,
              v = K.extend,
              x = K.isArray,
              D = K.isNumber,
              n = K.merge,
              l = K.pick,
              J = K.objectEach;
          "";
          h = h.seriesType("column", "line", {
            borderRadius: 0,
            centerInCategory: !1,
            groupPadding: .2,
            marker: null,
            pointPadding: .1,
            minPointLength: 0,
            cropThreshold: 50,
            pointRange: null,
            states: {
              hover: {
                halo: !1,
                brightness: .1
              },
              select: {
                color: "#cccccc",
                borderColor: "#000000"
              }
            },
            dataLabels: {
              align: void 0,
              verticalAlign: void 0,
              y: void 0
            },
            startFromThreshold: !0,
            stickyTracking: !1,
            tooltip: {
              distance: 6
            },
            threshold: 0,
            borderColor: "#ffffff"
          }, {
            cropShoulder: 0,
            directTouch: !0,
            trackerGroups: ["group", "dataLabelsGroup"],
            negStacks: !0,
            init: function init() {
              L.prototype.init.apply(this, arguments);
              var e = this,
                  f = e.chart;
              f.hasRendered && f.series.forEach(function (d) {
                d.type === e.type && (d.isDirty = !0);
              });
            },
            getColumnMetrics: function getColumnMetrics() {
              var e = this,
                  f = e.options,
                  d = e.xAxis,
                  g = e.yAxis,
                  c = d.options.reversedStacks;
              c = d.reversed && !c || !d.reversed && c;
              var a,
                  h = {},
                  p = 0;
              !1 === f.grouping ? p = 1 : e.chart.series.forEach(function (c) {
                var d = c.yAxis,
                    f = c.options;

                if (c.type === e.type && (c.visible || !e.chart.options.chart.ignoreHiddenSeries) && g.len === d.len && g.pos === d.pos) {
                  if (f.stacking && "group" !== f.stacking) {
                    a = c.stackKey;
                    "undefined" === typeof h[a] && (h[a] = p++);
                    var q = h[a];
                  } else !1 !== f.grouping && (q = p++);

                  c.columnIndex = q;
                }
              });
              var n = Math.min(Math.abs(d.transA) * (d.ordinal && d.ordinal.slope || f.pointRange || d.closestPointRange || d.tickInterval || 1), d.len),
                  m = n * f.groupPadding,
                  v = (n - 2 * m) / (p || 1);
              f = Math.min(f.maxPointWidth || d.len, l(f.pointWidth, v * (1 - 2 * f.pointPadding)));
              e.columnMetrics = {
                width: f,
                offset: (v - f) / 2 + (m + ((e.columnIndex || 0) + (c ? 1 : 0)) * v - n / 2) * (c ? -1 : 1),
                paddedWidth: v,
                columnCount: p
              };
              return e.columnMetrics;
            },
            crispCol: function crispCol(e, f, d, g) {
              var c = this.chart,
                  a = this.borderWidth,
                  h = -(a % 2 ? .5 : 0);
              a = a % 2 ? .5 : 1;
              c.inverted && c.renderer.isVML && (a += 1);
              this.options.crisp && (d = Math.round(e + d) + h, e = Math.round(e) + h, d -= e);
              g = Math.round(f + g) + a;
              h = .5 >= Math.abs(f) && .5 < g;
              f = Math.round(f) + a;
              g -= f;
              h && g && (--f, g += 1);
              return {
                x: e,
                y: f,
                width: d,
                height: g
              };
            },
            adjustForMissingColumns: function adjustForMissingColumns(e, f, d, g) {
              var c = this,
                  a = this.options.stacking;

              if (!d.isNull && 1 < g.columnCount) {
                var h = 0,
                    p = 0;
                J(this.yAxis.stacking && this.yAxis.stacking.stacks, function (g) {
                  if ("number" === typeof d.x && (g = g[d.x.toString()])) {
                    var e = g.points[c.index],
                        f = g.total;
                    a ? (e && (h = p), g.hasValidPoints && p++) : x(e) && (h = e[1], p = f || 0);
                  }
                });
                e = (d.plotX || 0) + ((p - 1) * g.paddedWidth + f) / 2 - f - h * g.paddedWidth;
              }

              return e;
            },
            translate: function translate() {
              var f = this,
                  h = f.chart,
                  d = f.options,
                  g = f.dense = 2 > f.closestPointRange * f.xAxis.transA;
              g = f.borderWidth = l(d.borderWidth, g ? 0 : 1);
              var c = f.xAxis,
                  a = f.yAxis,
                  q = d.threshold,
                  p = f.translatedThreshold = a.getThreshold(q),
                  n = l(d.minPointLength, 5),
                  m = f.getColumnMetrics(),
                  v = m.width,
                  x = f.barW = Math.max(v, 1 + 2 * g),
                  y = f.pointXOffset = m.offset,
                  z = f.dataMin,
                  C = f.dataMax;
              h.inverted && (p -= .5);
              d.pointPadding && (x = Math.ceil(x));
              L.prototype.translate.apply(f);
              f.points.forEach(function (g) {
                var u = l(g.yBottom, p),
                    b = 999 + Math.abs(u),
                    k = v,
                    t = g.plotX || 0;
                b = e(g.plotY, -b, a.len + b);
                var r = t + y,
                    w = x,
                    A = Math.min(b, u),
                    B = Math.max(b, u) - A;

                if (n && Math.abs(B) < n) {
                  B = n;
                  var E = !a.reversed && !g.negative || a.reversed && g.negative;
                  D(q) && D(C) && g.y === q && C <= q && (a.min || 0) < q && z !== C && (E = !E);
                  A = Math.abs(A - p) > n ? u - n : p - (E ? n : 0);
                }

                I(g.options.pointWidth) && (k = w = Math.ceil(g.options.pointWidth), r -= Math.round((k - v) / 2));
                d.centerInCategory && (r = f.adjustForMissingColumns(r, k, g, m));
                g.barX = r;
                g.pointWidth = k;
                g.tooltipPos = h.inverted ? [a.len + a.pos - h.plotLeft - b, c.len + c.pos - h.plotTop - (t || 0) - y - w / 2, B] : [r + w / 2, b + a.pos - h.plotTop, B];
                g.shapeType = f.pointClass.prototype.shapeType || "rect";
                g.shapeArgs = f.crispCol.apply(f, g.isNull ? [r, p, w, 0] : [r, A, w, B]);
              });
            },
            getSymbol: f,
            drawLegendSymbol: F.drawRectangle,
            drawGraph: function drawGraph() {
              this.group[this.dense ? "addClass" : "removeClass"]("highcharts-dense-data");
            },
            pointAttribs: function pointAttribs(e, f) {
              var d = this.options,
                  g = this.pointAttrToOptions || {};
              var c = g.stroke || "borderColor";
              var a = g["stroke-width"] || "borderWidth",
                  h = e && e.color || this.color,
                  p = e && e[c] || d[c] || this.color || h,
                  m = e && e[a] || d[a] || this[a] || 0;
              g = e && e.options.dashStyle || d.dashStyle;
              var r = l(e && e.opacity, d.opacity, 1);

              if (e && this.zones.length) {
                var v = e.getZone();
                h = e.options.color || v && (v.color || e.nonZonedColor) || this.color;
                v && (p = v.borderColor || p, g = v.dashStyle || g, m = v.borderWidth || m);
              }

              f && e && (e = n(d.states[f], e.options.states && e.options.states[f] || {}), f = e.brightness, h = e.color || "undefined" !== typeof f && y(h).brighten(e.brightness).get() || h, p = e[c] || p, m = e[a] || m, g = e.dashStyle || g, r = l(e.opacity, r));
              c = {
                fill: h,
                stroke: p,
                "stroke-width": m,
                opacity: r
              };
              g && (c.dashstyle = g);
              return c;
            },
            drawPoints: function drawPoints() {
              var e = this,
                  f = this.chart,
                  d = e.options,
                  g = f.renderer,
                  c = d.animationLimit || 250,
                  a;
              e.points.forEach(function (h) {
                var p = h.graphic,
                    l = !!p,
                    q = p && f.pointCount < c ? "animate" : "attr";

                if (D(h.plotY) && null !== h.y) {
                  a = h.shapeArgs;
                  p && h.hasNewShapeType() && (p = p.destroy());
                  e.enabledDataSorting && (h.startXPos = e.xAxis.reversed ? -(a ? a.width : 0) : e.xAxis.width);
                  p || (h.graphic = p = g[h.shapeType](a).add(h.group || e.group)) && e.enabledDataSorting && f.hasRendered && f.pointCount < c && (p.attr({
                    x: h.startXPos
                  }), l = !0, q = "animate");
                  if (p && l) p[q](n(a));
                  if (d.borderRadius) p[q]({
                    r: d.borderRadius
                  });
                  f.styledMode || p[q](e.pointAttribs(h, h.selected && "select")).shadow(!1 !== h.allowShadow && d.shadow, null, d.stacking && !d.borderRadius);
                  p.addClass(h.getClassName(), !0);
                } else p && (h.graphic = p.destroy());
              });
            },
            animate: function animate(f) {
              var h = this,
                  d = this.yAxis,
                  g = h.options,
                  c = this.chart.inverted,
                  a = {},
                  l = c ? "translateX" : "translateY";
              if (f) a.scaleY = .001, f = e(d.toPixels(g.threshold), d.pos, d.pos + d.len), c ? a.translateX = f - d.len : a.translateY = f, h.clipBox && h.setClip(), h.group.attr(a);else {
                var p = h.group.attr(l);
                h.group.animate({
                  scaleY: 1
                }, v(C(h.options.animation), {
                  step: function step(c, g) {
                    h.group && (a[l] = p + g.pos * (d.pos - p), h.group.attr(a));
                  }
                }));
              }
            },
            remove: function remove() {
              var e = this,
                  f = e.chart;
              f.hasRendered && f.series.forEach(function (d) {
                d.type === e.type && (d.isDirty = !0);
              });
              L.prototype.remove.apply(e, arguments);
            }
          });
          "";
          return h;
        });
        N(m, "Series/BarSeries.js", [m["Core/Series/Series.js"]], function (f) {
          f.seriesType("bar", "column", null, {
            inverted: !0
          });
          "";
        });
        N(m, "Series/ScatterSeries.js", [m["Core/Series/Series.js"], m["Core/Globals.js"], m["Core/Utilities.js"]], function (f, h, m) {
          m = m.addEvent;
          var z = h.Series;
          f.seriesType("scatter", "line", {
            lineWidth: 0,
            findNearestPointBy: "xy",
            jitter: {
              x: 0,
              y: 0
            },
            marker: {
              enabled: !0
            },
            tooltip: {
              headerFormat: "<span style=\"color:{point.color}\">\u25CF</span> <span style=\"font-size: 10px\"> {series.name}</span><br/>",
              pointFormat: "x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>"
            }
          }, {
            sorted: !1,
            requireSorting: !1,
            noSharedTooltip: !0,
            trackerGroups: ["group", "markerGroup", "dataLabelsGroup"],
            takeOrdinalPosition: !1,
            drawGraph: function drawGraph() {
              (this.options.lineWidth || 0 === this.options.lineWidth && this.graph && this.graph.strokeWidth()) && z.prototype.drawGraph.call(this);
            },
            applyJitter: function applyJitter() {
              var f = this,
                  h = this.options.jitter,
                  m = this.points.length;
              h && this.points.forEach(function (z, y) {
                ["x", "y"].forEach(function (e, C) {
                  var v = "plot" + e.toUpperCase();

                  if (h[e] && !z.isNull) {
                    var x = f[e + "Axis"];
                    var D = h[e] * x.transA;

                    if (x && !x.isLog) {
                      var n = Math.max(0, z[v] - D);
                      x = Math.min(x.len, z[v] + D);
                      C = 1E4 * Math.sin(y + C * m);
                      z[v] = n + (x - n) * (C - Math.floor(C));
                      "x" === e && (z.clientX = z.plotX);
                    }
                  }
                });
              });
            }
          });
          m(z, "afterTranslate", function () {
            this.applyJitter && this.applyJitter();
          });
          "";
        });
        N(m, "Mixins/CenteredSeries.js", [m["Core/Globals.js"], m["Core/Utilities.js"]], function (f, h) {
          var m = h.isNumber,
              z = h.pick,
              F = h.relativeLength,
              L = f.deg2rad;
          return f.CenteredSeriesMixin = {
            getCenter: function getCenter() {
              var h = this.options,
                  m = this.chart,
                  y = 2 * (h.slicedOffset || 0),
                  e = m.plotWidth - 2 * y,
                  I = m.plotHeight - 2 * y,
                  v = h.center,
                  x = Math.min(e, I),
                  D = h.size,
                  n = h.innerSize || 0;
              "string" === typeof D && (D = parseFloat(D));
              "string" === typeof n && (n = parseFloat(n));
              h = [z(v[0], "50%"), z(v[1], "50%"), z(D && 0 > D ? void 0 : h.size, "100%"), z(n && 0 > n ? void 0 : h.innerSize || 0, "0%")];
              !m.angular || this instanceof f.Series || (h[3] = 0);

              for (v = 0; 4 > v; ++v) {
                D = h[v], m = 2 > v || 2 === v && /%$/.test(D), h[v] = F(D, [e, I, x, h[2]][v]) + (m ? y : 0);
              }

              h[3] > h[2] && (h[3] = h[2]);
              return h;
            },
            getStartAndEndRadians: function getStartAndEndRadians(f, h) {
              f = m(f) ? f : 0;
              h = m(h) && h > f && 360 > h - f ? h : f + 360;
              return {
                start: L * (f + -90),
                end: L * (h + -90)
              };
            }
          };
        });
        N(m, "Series/PieSeries.js", [m["Core/Animation/AnimationUtilities.js"], m["Core/Series/Series.js"], m["Mixins/CenteredSeries.js"], m["Core/Globals.js"], m["Mixins/LegendSymbol.js"], m["Series/LineSeries.js"], m["Core/Series/Point.js"], m["Core/Renderer/SVG/SVGRenderer.js"], m["Core/Utilities.js"]], function (f, h, m, z, F, L, K, C, y) {
          var e = f.setAnimation,
              I = m.getStartAndEndRadians;
          f = z.noop;
          var v = y.addEvent,
              x = y.clamp,
              D = y.defined,
              n = y.fireEvent,
              l = y.isNumber,
              J = y.merge,
              w = y.pick,
              r = y.relativeLength;
          h.seriesType("pie", "line", {
            center: [null, null],
            clip: !1,
            colorByPoint: !0,
            dataLabels: {
              allowOverlap: !0,
              connectorPadding: 5,
              connectorShape: "fixedOffset",
              crookDistance: "70%",
              distance: 30,
              enabled: !0,
              formatter: function formatter() {
                return this.point.isNull ? void 0 : this.point.name;
              },
              softConnector: !0,
              x: 0
            },
            fillColor: void 0,
            ignoreHiddenPoint: !0,
            inactiveOtherPoints: !0,
            legendType: "point",
            marker: null,
            size: null,
            showInLegend: !1,
            slicedOffset: 10,
            stickyTracking: !1,
            tooltip: {
              followPointer: !0
            },
            borderColor: "#ffffff",
            borderWidth: 1,
            lineWidth: void 0,
            states: {
              hover: {
                brightness: .1
              }
            }
          }, {
            isCartesian: !1,
            requireSorting: !1,
            directTouch: !0,
            noSharedTooltip: !0,
            trackerGroups: ["group", "dataLabelsGroup"],
            axisTypes: [],
            pointAttribs: h.seriesTypes.column.prototype.pointAttribs,
            animate: function animate(d) {
              var g = this,
                  c = g.points,
                  a = g.startAngleRad;
              d || c.forEach(function (c) {
                var d = c.graphic,
                    e = c.shapeArgs;
                d && e && (d.attr({
                  r: w(c.startR, g.center && g.center[3] / 2),
                  start: a,
                  end: a
                }), d.animate({
                  r: e.r,
                  start: e.start,
                  end: e.end
                }, g.options.animation));
              });
            },
            hasData: function hasData() {
              return !!this.processedXData.length;
            },
            updateTotals: function updateTotals() {
              var d,
                  g = 0,
                  c = this.points,
                  a = c.length,
                  e = this.options.ignoreHiddenPoint;

              for (d = 0; d < a; d++) {
                var f = c[d];
                g += e && !f.visible ? 0 : f.isNull ? 0 : f.y;
              }

              this.total = g;

              for (d = 0; d < a; d++) {
                f = c[d], f.percentage = 0 < g && (f.visible || !e) ? f.y / g * 100 : 0, f.total = g;
              }
            },
            generatePoints: function generatePoints() {
              L.prototype.generatePoints.call(this);
              this.updateTotals();
            },
            getX: function getX(d, g, c) {
              var a = this.center,
                  e = this.radii ? this.radii[c.index] : a[2] / 2;
              d = Math.asin(x((d - a[1]) / (e + c.labelDistance), -1, 1));
              return a[0] + (g ? -1 : 1) * Math.cos(d) * (e + c.labelDistance) + (0 < c.labelDistance ? (g ? -1 : 1) * this.options.dataLabels.padding : 0);
            },
            translate: function translate(d) {
              this.generatePoints();
              var g = 0,
                  c = this.options,
                  a = c.slicedOffset,
                  e = a + (c.borderWidth || 0),
                  f = I(c.startAngle, c.endAngle),
                  h = this.startAngleRad = f.start;
              f = (this.endAngleRad = f.end) - h;
              var l = this.points,
                  m = c.dataLabels.distance;
              c = c.ignoreHiddenPoint;
              var v,
                  x = l.length;
              d || (this.center = d = this.getCenter());

              for (v = 0; v < x; v++) {
                var y = l[v];
                var z = h + g * f;
                if (!c || y.visible) g += y.percentage / 100;
                var E = h + g * f;
                y.shapeType = "arc";
                y.shapeArgs = {
                  x: d[0],
                  y: d[1],
                  r: d[2] / 2,
                  innerR: d[3] / 2,
                  start: Math.round(1E3 * z) / 1E3,
                  end: Math.round(1E3 * E) / 1E3
                };
                y.labelDistance = w(y.options.dataLabels && y.options.dataLabels.distance, m);
                y.labelDistance = r(y.labelDistance, y.shapeArgs.r);
                this.maxLabelDistance = Math.max(this.maxLabelDistance || 0, y.labelDistance);
                E = (E + z) / 2;
                E > 1.5 * Math.PI ? E -= 2 * Math.PI : E < -Math.PI / 2 && (E += 2 * Math.PI);
                y.slicedTranslation = {
                  translateX: Math.round(Math.cos(E) * a),
                  translateY: Math.round(Math.sin(E) * a)
                };
                var u = Math.cos(E) * d[2] / 2;
                var b = Math.sin(E) * d[2] / 2;
                y.tooltipPos = [d[0] + .7 * u, d[1] + .7 * b];
                y.half = E < -Math.PI / 2 || E > Math.PI / 2 ? 1 : 0;
                y.angle = E;
                z = Math.min(e, y.labelDistance / 5);
                y.labelPosition = {
                  natural: {
                    x: d[0] + u + Math.cos(E) * y.labelDistance,
                    y: d[1] + b + Math.sin(E) * y.labelDistance
                  },
                  "final": {},
                  alignment: 0 > y.labelDistance ? "center" : y.half ? "right" : "left",
                  connectorPosition: {
                    breakAt: {
                      x: d[0] + u + Math.cos(E) * z,
                      y: d[1] + b + Math.sin(E) * z
                    },
                    touchingSliceAt: {
                      x: d[0] + u,
                      y: d[1] + b
                    }
                  }
                };
              }

              n(this, "afterTranslate");
            },
            drawEmpty: function drawEmpty() {
              var d = this.startAngleRad,
                  g = this.endAngleRad,
                  c = this.options;

              if (0 === this.total && this.center) {
                var a = this.center[0];
                var e = this.center[1];
                this.graph || (this.graph = this.chart.renderer.arc(a, e, this.center[1] / 2, 0, d, g).addClass("highcharts-empty-series").add(this.group));
                this.graph.attr({
                  d: C.prototype.symbols.arc(a, e, this.center[2] / 2, 0, {
                    start: d,
                    end: g,
                    innerR: this.center[3] / 2
                  })
                });
                this.chart.styledMode || this.graph.attr({
                  "stroke-width": c.borderWidth,
                  fill: c.fillColor || "none",
                  stroke: c.color || "#cccccc"
                });
              } else this.graph && (this.graph = this.graph.destroy());
            },
            redrawPoints: function redrawPoints() {
              var d = this,
                  e = d.chart,
                  c = e.renderer,
                  a,
                  f,
                  h,
                  l,
                  n = d.options.shadow;
              this.drawEmpty();
              !n || d.shadowGroup || e.styledMode || (d.shadowGroup = c.g("shadow").attr({
                zIndex: -1
              }).add(d.group));
              d.points.forEach(function (g) {
                var p = {};
                f = g.graphic;

                if (!g.isNull && f) {
                  l = g.shapeArgs;
                  a = g.getTranslate();

                  if (!e.styledMode) {
                    var q = g.shadowGroup;
                    n && !q && (q = g.shadowGroup = c.g("shadow").add(d.shadowGroup));
                    q && q.attr(a);
                    h = d.pointAttribs(g, g.selected && "select");
                  }

                  g.delayedRendering ? (f.setRadialReference(d.center).attr(l).attr(a), e.styledMode || f.attr(h).attr({
                    "stroke-linejoin": "round"
                  }).shadow(n, q), g.delayedRendering = !1) : (f.setRadialReference(d.center), e.styledMode || J(!0, p, h), J(!0, p, l, a), f.animate(p));
                  f.attr({
                    visibility: g.visible ? "inherit" : "hidden"
                  });
                  f.addClass(g.getClassName());
                } else f && (g.graphic = f.destroy());
              });
            },
            drawPoints: function drawPoints() {
              var d = this.chart.renderer;
              this.points.forEach(function (e) {
                e.graphic && e.hasNewShapeType() && (e.graphic = e.graphic.destroy());
                e.graphic || (e.graphic = d[e.shapeType](e.shapeArgs).add(e.series.group), e.delayedRendering = !0);
              });
            },
            searchPoint: f,
            sortByAngle: function sortByAngle(d, e) {
              d.sort(function (c, a) {
                return "undefined" !== typeof c.angle && (a.angle - c.angle) * e;
              });
            },
            drawLegendSymbol: F.drawRectangle,
            getCenter: m.getCenter,
            getSymbol: f,
            drawGraph: null
          }, {
            init: function init() {
              K.prototype.init.apply(this, arguments);
              var d = this;
              d.name = w(d.name, "Slice");

              var e = function e(c) {
                d.slice("select" === c.type);
              };

              v(d, "select", e);
              v(d, "unselect", e);
              return d;
            },
            isValid: function isValid() {
              return l(this.y) && 0 <= this.y;
            },
            setVisible: function setVisible(d, e) {
              var c = this,
                  a = c.series,
                  g = a.chart,
                  f = a.options.ignoreHiddenPoint;
              e = w(e, f);
              d !== c.visible && (c.visible = c.options.visible = d = "undefined" === typeof d ? !c.visible : d, a.options.data[a.data.indexOf(c)] = c.options, ["graphic", "dataLabel", "connector", "shadowGroup"].forEach(function (a) {
                if (c[a]) c[a][d ? "show" : "hide"](!0);
              }), c.legendItem && g.legend.colorizeItem(c, d), d || "hover" !== c.state || c.setState(""), f && (a.isDirty = !0), e && g.redraw());
            },
            slice: function slice(d, g, c) {
              var a = this.series;
              e(c, a.chart);
              w(g, !0);
              this.sliced = this.options.sliced = D(d) ? d : !this.sliced;
              a.options.data[a.data.indexOf(this)] = this.options;
              this.graphic && this.graphic.animate(this.getTranslate());
              this.shadowGroup && this.shadowGroup.animate(this.getTranslate());
            },
            getTranslate: function getTranslate() {
              return this.sliced ? this.slicedTranslation : {
                translateX: 0,
                translateY: 0
              };
            },
            haloPath: function haloPath(d) {
              var e = this.shapeArgs;
              return this.sliced || !this.visible ? [] : this.series.chart.renderer.symbols.arc(e.x, e.y, e.r + d, e.r + d, {
                innerR: e.r - 1,
                start: e.start,
                end: e.end
              });
            },
            connectorShapes: {
              fixedOffset: function fixedOffset(d, e, c) {
                var a = e.breakAt;
                e = e.touchingSliceAt;
                return [["M", d.x, d.y], c.softConnector ? ["C", d.x + ("left" === d.alignment ? -5 : 5), d.y, 2 * a.x - e.x, 2 * a.y - e.y, a.x, a.y] : ["L", a.x, a.y], ["L", e.x, e.y]];
              },
              straight: function straight(d, e) {
                e = e.touchingSliceAt;
                return [["M", d.x, d.y], ["L", e.x, e.y]];
              },
              crookedLine: function crookedLine(d, e, c) {
                e = e.touchingSliceAt;
                var a = this.series,
                    g = a.center[0],
                    f = a.chart.plotWidth,
                    h = a.chart.plotLeft;
                a = d.alignment;
                var l = this.shapeArgs.r;
                c = r(c.crookDistance, 1);
                f = "left" === a ? g + l + (f + h - g - l) * (1 - c) : h + (g - l) * c;
                c = ["L", f, d.y];
                g = !0;
                if ("left" === a ? f > d.x || f < e.x : f < d.x || f > e.x) g = !1;
                d = [["M", d.x, d.y]];
                g && d.push(c);
                d.push(["L", e.x, e.y]);
                return d;
              }
            },
            getConnectorPath: function getConnectorPath() {
              var d = this.labelPosition,
                  e = this.series.options.dataLabels,
                  c = e.connectorShape,
                  a = this.connectorShapes;
              a[c] && (c = a[c]);
              return c.call(this, {
                x: d["final"].x,
                y: d["final"].y,
                alignment: d.alignment
              }, d.connectorPosition, e);
            }
          });
          "";
        });
        N(m, "Core/Series/DataLabels.js", [m["Core/Animation/AnimationUtilities.js"], m["Core/Globals.js"], m["Core/Series/CartesianSeries.js"], m["Core/Utilities.js"]], function (f, h, m, z) {
          var F = f.getDeferredAnimation;
          f = h.noop;
          var L = h.seriesTypes,
              K = z.arrayMax,
              C = z.clamp,
              y = z.defined,
              e = z.extend,
              I = z.fireEvent,
              v = z.format,
              x = z.isArray,
              D = z.merge,
              n = z.objectEach,
              l = z.pick,
              J = z.relativeLength,
              w = z.splat,
              r = z.stableSort;
          "";

          h.distribute = function (d, e, c) {
            function a(a, c) {
              return a.target - c.target;
            }

            var f,
                g = !0,
                n = d,
                m = [];
            var v = 0;
            var w = n.reducedLen || e;

            for (f = d.length; f--;) {
              v += d[f].size;
            }

            if (v > w) {
              r(d, function (a, c) {
                return (c.rank || 0) - (a.rank || 0);
              });

              for (v = f = 0; v <= w;) {
                v += d[f].size, f++;
              }

              m = d.splice(f - 1, d.length);
            }

            r(d, a);

            for (d = d.map(function (a) {
              return {
                size: a.size,
                targets: [a.target],
                align: l(a.align, .5)
              };
            }); g;) {
              for (f = d.length; f--;) {
                g = d[f], v = (Math.min.apply(0, g.targets) + Math.max.apply(0, g.targets)) / 2, g.pos = C(v - g.size * g.align, 0, e - g.size);
              }

              f = d.length;

              for (g = !1; f--;) {
                0 < f && d[f - 1].pos + d[f - 1].size > d[f].pos && (d[f - 1].size += d[f].size, d[f - 1].targets = d[f - 1].targets.concat(d[f].targets), d[f - 1].align = .5, d[f - 1].pos + d[f - 1].size > e && (d[f - 1].pos = e - d[f - 1].size), d.splice(f, 1), g = !0);
              }
            }

            n.push.apply(n, m);
            f = 0;
            d.some(function (a) {
              var d = 0;
              if (a.targets.some(function () {
                n[f].pos = a.pos + d;
                if ("undefined" !== typeof c && Math.abs(n[f].pos - n[f].target) > c) return n.slice(0, f + 1).forEach(function (a) {
                  delete a.pos;
                }), n.reducedLen = (n.reducedLen || e) - .1 * e, n.reducedLen > .1 * e && h.distribute(n, e, c), !0;
                d += n[f].size;
                f++;
              })) return !0;
            });
            r(n, a);
          };

          m.prototype.drawDataLabels = function () {
            function d(a, c) {
              var d = c.filter;
              return d ? (c = d.operator, a = a[d.property], d = d.value, ">" === c && a > d || "<" === c && a < d || ">=" === c && a >= d || "<=" === c && a <= d || "==" === c && a == d || "===" === c && a === d ? !0 : !1) : !0;
            }

            function e(a, c) {
              var d = [],
                  b;
              if (x(a) && !x(c)) d = a.map(function (a) {
                return D(a, c);
              });else if (x(c) && !x(a)) d = c.map(function (b) {
                return D(a, b);
              });else if (x(a) || x(c)) for (b = Math.max(a.length, c.length); b--;) {
                d[b] = D(a[b], c[b]);
              } else d = D(a, c);
              return d;
            }

            var c = this,
                a = c.chart,
                f = c.options,
                h = f.dataLabels,
                m = c.points,
                r,
                G = c.hasRendered || 0,
                z = h.animation;
            z = h.defer ? F(a, z, c) : {
              defer: 0,
              duration: 0
            };
            var C = a.renderer;
            h = e(e(a.options.plotOptions && a.options.plotOptions.series && a.options.plotOptions.series.dataLabels, a.options.plotOptions && a.options.plotOptions[c.type] && a.options.plotOptions[c.type].dataLabels), h);
            I(this, "drawDataLabels");

            if (x(h) || h.enabled || c._hasPointLabels) {
              var J = c.plotGroup("dataLabelsGroup", "data-labels", G ? "inherit" : "hidden", h.zIndex || 6);
              J.attr({
                opacity: +G
              });
              !G && (G = c.dataLabelsGroup) && (c.visible && J.show(!0), G[f.animation ? "animate" : "attr"]({
                opacity: 1
              }, z));
              m.forEach(function (g) {
                r = w(e(h, g.dlOptions || g.options && g.options.dataLabels));
                r.forEach(function (e, h) {
                  var b = e.enabled && (!g.isNull || g.dataLabelOnNull) && d(g, e),
                      k = g.dataLabels ? g.dataLabels[h] : g.dataLabel,
                      p = g.connectors ? g.connectors[h] : g.connector,
                      m = l(e.distance, g.labelDistance),
                      q = !k;

                  if (b) {
                    var u = g.getLabelConfig();
                    var r = l(e[g.formatPrefix + "Format"], e.format);
                    u = y(r) ? v(r, u, a) : (e[g.formatPrefix + "Formatter"] || e.formatter).call(u, e);
                    r = e.style;
                    var A = e.rotation;
                    a.styledMode || (r.color = l(e.color, r.color, c.color, "#000000"), "contrast" === r.color ? (g.contrastColor = C.getContrast(g.color || c.color), r.color = !y(m) && e.inside || 0 > m || f.stacking ? g.contrastColor : "#000000") : delete g.contrastColor, f.cursor && (r.cursor = f.cursor));
                    var w = {
                      r: e.borderRadius || 0,
                      rotation: A,
                      padding: e.padding,
                      zIndex: 1
                    };
                    a.styledMode || (w.fill = e.backgroundColor, w.stroke = e.borderColor, w["stroke-width"] = e.borderWidth);
                    n(w, function (a, b) {
                      "undefined" === typeof a && delete w[b];
                    });
                  }

                  !k || b && y(u) ? b && y(u) && (k ? w.text = u : (g.dataLabels = g.dataLabels || [], k = g.dataLabels[h] = A ? C.text(u, 0, -9999, e.useHTML).addClass("highcharts-data-label") : C.label(u, 0, -9999, e.shape, null, null, e.useHTML, null, "data-label"), h || (g.dataLabel = k), k.addClass(" highcharts-data-label-color-" + g.colorIndex + " " + (e.className || "") + (e.useHTML ? " highcharts-tracker" : ""))), k.options = e, k.attr(w), a.styledMode || k.css(r).shadow(e.shadow), k.added || k.add(J), e.textPath && !e.useHTML && (k.setTextPath(g.getDataLabelPath && g.getDataLabelPath(k) || g.graphic, e.textPath), g.dataLabelPath && !e.textPath.enabled && (g.dataLabelPath = g.dataLabelPath.destroy())), c.alignDataLabel(g, k, e, null, q)) : (g.dataLabel = g.dataLabel && g.dataLabel.destroy(), g.dataLabels && (1 === g.dataLabels.length ? delete g.dataLabels : delete g.dataLabels[h]), h || delete g.dataLabel, p && (g.connector = g.connector.destroy(), g.connectors && (1 === g.connectors.length ? delete g.connectors : delete g.connectors[h])));
                });
              });
            }

            I(this, "afterDrawDataLabels");
          };

          m.prototype.alignDataLabel = function (d, g, c, a, f) {
            var h = this,
                n = this.chart,
                m = this.isCartesian && n.inverted,
                q = this.enabledDataSorting,
                r = l(d.dlBox && d.dlBox.centerX, d.plotX, -9999),
                v = l(d.plotY, -9999),
                w = g.getBBox(),
                x = c.rotation,
                y = c.align,
                u = n.isInsidePlot(r, Math.round(v), m),
                b = "justify" === l(c.overflow, q ? "none" : "justify"),
                k = this.visible && !1 !== d.visible && (d.series.forceDL || q && !b || u || c.inside && a && n.isInsidePlot(r, m ? a.x + 1 : a.y + a.height - 1, m));

            var t = function t(a) {
              q && h.xAxis && !b && h.setDataLabelStartPos(d, g, f, u, a);
            };

            if (k) {
              var z = n.renderer.fontMetrics(n.styledMode ? void 0 : c.style.fontSize, g).b;
              a = e({
                x: m ? this.yAxis.len - v : r,
                y: Math.round(m ? this.xAxis.len - r : v),
                width: 0,
                height: 0
              }, a);
              e(c, {
                width: w.width,
                height: w.height
              });
              x ? (b = !1, r = n.renderer.rotCorr(z, x), r = {
                x: a.x + (c.x || 0) + a.width / 2 + r.x,
                y: a.y + (c.y || 0) + {
                  top: 0,
                  middle: .5,
                  bottom: 1
                }[c.verticalAlign] * a.height
              }, t(r), g[f ? "attr" : "animate"](r).attr({
                align: y
              }), t = (x + 720) % 360, t = 180 < t && 360 > t, "left" === y ? r.y -= t ? w.height : 0 : "center" === y ? (r.x -= w.width / 2, r.y -= w.height / 2) : "right" === y && (r.x -= w.width, r.y -= t ? 0 : w.height), g.placed = !0, g.alignAttr = r) : (t(a), g.align(c, null, a), r = g.alignAttr);
              b && 0 <= a.height ? this.justifyDataLabel(g, c, r, w, a, f) : l(c.crop, !0) && (k = n.isInsidePlot(r.x, r.y) && n.isInsidePlot(r.x + w.width, r.y + w.height));
              if (c.shape && !x) g[f ? "attr" : "animate"]({
                anchorX: m ? n.plotWidth - d.plotY : d.plotX,
                anchorY: m ? n.plotHeight - d.plotX : d.plotY
              });
            }

            f && q && (g.placed = !1);
            k || q && !b || (g.hide(!0), g.placed = !1);
          };

          m.prototype.setDataLabelStartPos = function (d, e, c, a, f) {
            var g = this.chart,
                h = g.inverted,
                l = this.xAxis,
                n = l.reversed,
                m = h ? e.height / 2 : e.width / 2;
            d = (d = d.pointWidth) ? d / 2 : 0;
            l = h ? f.x : n ? -m - d : l.width - m + d;
            f = h ? n ? this.yAxis.height - m + d : -m - d : f.y;
            e.startXPos = l;
            e.startYPos = f;
            a ? "hidden" === e.visibility && (e.show(), e.attr({
              opacity: 0
            }).animate({
              opacity: 1
            })) : e.attr({
              opacity: 1
            }).animate({
              opacity: 0
            }, void 0, e.hide);
            g.hasRendered && (c && e.attr({
              x: e.startXPos,
              y: e.startYPos
            }), e.placed = !0);
          };

          m.prototype.justifyDataLabel = function (d, e, c, a, f, h) {
            var g = this.chart,
                p = e.align,
                l = e.verticalAlign,
                n = d.box ? 0 : d.padding || 0,
                m = e.x;
            m = void 0 === m ? 0 : m;
            var q = e.y;
            var r = void 0 === q ? 0 : q;
            q = c.x + n;

            if (0 > q) {
              "right" === p && 0 <= m ? (e.align = "left", e.inside = !0) : m -= q;
              var v = !0;
            }

            q = c.x + a.width - n;
            q > g.plotWidth && ("left" === p && 0 >= m ? (e.align = "right", e.inside = !0) : m += g.plotWidth - q, v = !0);
            q = c.y + n;
            0 > q && ("bottom" === l && 0 <= r ? (e.verticalAlign = "top", e.inside = !0) : r -= q, v = !0);
            q = c.y + a.height - n;
            q > g.plotHeight && ("top" === l && 0 >= r ? (e.verticalAlign = "bottom", e.inside = !0) : r += g.plotHeight - q, v = !0);
            v && (e.x = m, e.y = r, d.placed = !h, d.align(e, void 0, f));
            return v;
          };

          L.pie && (L.pie.prototype.dataLabelPositioners = {
            radialDistributionY: function radialDistributionY(d) {
              return d.top + d.distributeBox.pos;
            },
            radialDistributionX: function radialDistributionX(d, e, c, a) {
              return d.getX(c < e.top + 2 || c > e.bottom - 2 ? a : c, e.half, e);
            },
            justify: function justify(d, e, c) {
              return c[0] + (d.half ? -1 : 1) * (e + d.labelDistance);
            },
            alignToPlotEdges: function alignToPlotEdges(d, e, c, a) {
              d = d.getBBox().width;
              return e ? d + a : c - d - a;
            },
            alignToConnectors: function alignToConnectors(d, e, c, a) {
              var f = 0,
                  g;
              d.forEach(function (a) {
                g = a.dataLabel.getBBox().width;
                g > f && (f = g);
              });
              return e ? f + a : c - f - a;
            }
          }, L.pie.prototype.drawDataLabels = function () {
            var d = this,
                e = d.data,
                c,
                a = d.chart,
                f = d.options.dataLabels || {},
                p = f.connectorPadding,
                n,
                r = a.plotWidth,
                v = a.plotHeight,
                w = a.plotLeft,
                x = Math.round(a.chartWidth / 3),
                z,
                C = d.center,
                E = C[2] / 2,
                u = C[1],
                b,
                k,
                t,
                F,
                I = [[], []],
                J,
                L,
                N,
                P,
                S = [0, 0, 0, 0],
                Y = d.dataLabelPositioners,
                W;
            d.visible && (f.enabled || d._hasPointLabels) && (e.forEach(function (a) {
              a.dataLabel && a.visible && a.dataLabel.shortened && (a.dataLabel.attr({
                width: "auto"
              }).css({
                width: "auto",
                textOverflow: "clip"
              }), a.dataLabel.shortened = !1);
            }), m.prototype.drawDataLabels.apply(d), e.forEach(function (a) {
              a.dataLabel && (a.visible ? (I[a.half].push(a), a.dataLabel._pos = null, !y(f.style.width) && !y(a.options.dataLabels && a.options.dataLabels.style && a.options.dataLabels.style.width) && a.dataLabel.getBBox().width > x && (a.dataLabel.css({
                width: Math.round(.7 * x) + "px"
              }), a.dataLabel.shortened = !0)) : (a.dataLabel = a.dataLabel.destroy(), a.dataLabels && 1 === a.dataLabels.length && delete a.dataLabels));
            }), I.forEach(function (e, g) {
              var n = e.length,
                  m = [],
                  q;

              if (n) {
                d.sortByAngle(e, g - .5);

                if (0 < d.maxLabelDistance) {
                  var A = Math.max(0, u - E - d.maxLabelDistance);
                  var B = Math.min(u + E + d.maxLabelDistance, a.plotHeight);
                  e.forEach(function (b) {
                    0 < b.labelDistance && b.dataLabel && (b.top = Math.max(0, u - E - b.labelDistance), b.bottom = Math.min(u + E + b.labelDistance, a.plotHeight), q = b.dataLabel.getBBox().height || 21, b.distributeBox = {
                      target: b.labelPosition.natural.y - b.top + q / 2,
                      size: q,
                      rank: b.y
                    }, m.push(b.distributeBox));
                  });
                  A = B + q - A;
                  h.distribute(m, A, A / 5);
                }

                for (P = 0; P < n; P++) {
                  c = e[P];
                  t = c.labelPosition;
                  b = c.dataLabel;
                  N = !1 === c.visible ? "hidden" : "inherit";
                  L = A = t.natural.y;
                  m && y(c.distributeBox) && ("undefined" === typeof c.distributeBox.pos ? N = "hidden" : (F = c.distributeBox.size, L = Y.radialDistributionY(c)));
                  delete c.positionIndex;
                  if (f.justify) J = Y.justify(c, E, C);else switch (f.alignTo) {
                    case "connectors":
                      J = Y.alignToConnectors(e, g, r, w);
                      break;

                    case "plotEdges":
                      J = Y.alignToPlotEdges(b, g, r, w);
                      break;

                    default:
                      J = Y.radialDistributionX(d, c, L, A);
                  }
                  b._attr = {
                    visibility: N,
                    align: t.alignment
                  };
                  W = c.options.dataLabels || {};
                  b._pos = {
                    x: J + l(W.x, f.x) + ({
                      left: p,
                      right: -p
                    }[t.alignment] || 0),
                    y: L + l(W.y, f.y) - 10
                  };
                  t["final"].x = J;
                  t["final"].y = L;
                  l(f.crop, !0) && (k = b.getBBox().width, A = null, J - k < p && 1 === g ? (A = Math.round(k - J + p), S[3] = Math.max(A, S[3])) : J + k > r - p && 0 === g && (A = Math.round(J + k - r + p), S[1] = Math.max(A, S[1])), 0 > L - F / 2 ? S[0] = Math.max(Math.round(-L + F / 2), S[0]) : L + F / 2 > v && (S[2] = Math.max(Math.round(L + F / 2 - v), S[2])), b.sideOverflow = A);
                }
              }
            }), 0 === K(S) || this.verifyDataLabelOverflow(S)) && (this.placeDataLabels(), this.points.forEach(function (c) {
              W = D(f, c.options.dataLabels);

              if (n = l(W.connectorWidth, 1)) {
                var e;
                z = c.connector;

                if ((b = c.dataLabel) && b._pos && c.visible && 0 < c.labelDistance) {
                  N = b._attr.visibility;
                  if (e = !z) c.connector = z = a.renderer.path().addClass("highcharts-data-label-connector  highcharts-color-" + c.colorIndex + (c.className ? " " + c.className : "")).add(d.dataLabelsGroup), a.styledMode || z.attr({
                    "stroke-width": n,
                    stroke: W.connectorColor || c.color || "#666666"
                  });
                  z[e ? "attr" : "animate"]({
                    d: c.getConnectorPath()
                  });
                  z.attr("visibility", N);
                } else z && (c.connector = z.destroy());
              }
            }));
          }, L.pie.prototype.placeDataLabels = function () {
            this.points.forEach(function (d) {
              var e = d.dataLabel,
                  c;
              e && d.visible && ((c = e._pos) ? (e.sideOverflow && (e._attr.width = Math.max(e.getBBox().width - e.sideOverflow, 0), e.css({
                width: e._attr.width + "px",
                textOverflow: (this.options.dataLabels.style || {}).textOverflow || "ellipsis"
              }), e.shortened = !0), e.attr(e._attr), e[e.moved ? "animate" : "attr"](c), e.moved = !0) : e && e.attr({
                y: -9999
              }));
              delete d.distributeBox;
            }, this);
          }, L.pie.prototype.alignDataLabel = f, L.pie.prototype.verifyDataLabelOverflow = function (d) {
            var e = this.center,
                c = this.options,
                a = c.center,
                f = c.minSize || 80,
                h = null !== c.size;

            if (!h) {
              if (null !== a[0]) var l = Math.max(e[2] - Math.max(d[1], d[3]), f);else l = Math.max(e[2] - d[1] - d[3], f), e[0] += (d[3] - d[1]) / 2;
              null !== a[1] ? l = C(l, f, e[2] - Math.max(d[0], d[2])) : (l = C(l, f, e[2] - d[0] - d[2]), e[1] += (d[0] - d[2]) / 2);
              l < e[2] ? (e[2] = l, e[3] = Math.min(J(c.innerSize || 0, l), l), this.translate(e), this.drawDataLabels && this.drawDataLabels()) : h = !0;
            }

            return h;
          });
          L.column && (L.column.prototype.alignDataLabel = function (d, e, c, a, f) {
            var g = this.chart.inverted,
                h = d.series,
                n = d.dlBox || d.shapeArgs,
                q = l(d.below, d.plotY > l(this.translatedThreshold, h.yAxis.len)),
                r = l(c.inside, !!this.options.stacking);
            n && (a = D(n), 0 > a.y && (a.height += a.y, a.y = 0), n = a.y + a.height - h.yAxis.len, 0 < n && n < a.height && (a.height -= n), g && (a = {
              x: h.yAxis.len - a.y - a.height,
              y: h.xAxis.len - a.x - a.width,
              width: a.height,
              height: a.width
            }), r || (g ? (a.x += q ? 0 : a.width, a.width = 0) : (a.y += q ? a.height : 0, a.height = 0)));
            c.align = l(c.align, !g || r ? "center" : q ? "right" : "left");
            c.verticalAlign = l(c.verticalAlign, g || r ? "middle" : q ? "top" : "bottom");
            m.prototype.alignDataLabel.call(this, d, e, c, a, f);
            c.inside && d.contrastColor && e.css({
              color: d.contrastColor
            });
          });
        });
        N(m, "Extensions/OverlappingDataLabels.js", [m["Core/Chart/Chart.js"], m["Core/Utilities.js"]], function (f, h) {
          var m = h.addEvent,
              z = h.fireEvent,
              F = h.isArray,
              L = h.isNumber,
              K = h.objectEach,
              C = h.pick;
          m(f, "render", function () {
            var f = [];
            (this.labelCollectors || []).forEach(function (e) {
              f = f.concat(e());
            });
            (this.yAxis || []).forEach(function (e) {
              e.stacking && e.options.stackLabels && !e.options.stackLabels.allowOverlap && K(e.stacking.stacks, function (e) {
                K(e, function (e) {
                  f.push(e.label);
                });
              });
            });
            (this.series || []).forEach(function (e) {
              var h = e.options.dataLabels;
              e.visible && (!1 !== h.enabled || e._hasPointLabels) && (e.nodes || e.points).forEach(function (e) {
                e.visible && (F(e.dataLabels) ? e.dataLabels : e.dataLabel ? [e.dataLabel] : []).forEach(function (h) {
                  var m = h.options;
                  h.labelrank = C(m.labelrank, e.labelrank, e.shapeArgs && e.shapeArgs.height);
                  m.allowOverlap || f.push(h);
                });
              });
            });
            this.hideOverlappingLabels(f);
          });

          f.prototype.hideOverlappingLabels = function (f) {
            var e = this,
                h = f.length,
                m = e.renderer,
                x,
                y,
                n,
                l = !1;

            var C = function C(d) {
              var e,
                  c = d.box ? 0 : d.padding || 0,
                  a = e = 0,
                  f;

              if (d && (!d.alignAttr || d.placed)) {
                var h = d.alignAttr || {
                  x: d.attr("x"),
                  y: d.attr("y")
                };
                var l = d.parentGroup;
                d.width || (e = d.getBBox(), d.width = e.width, d.height = e.height, e = m.fontMetrics(null, d.element).h);
                var n = d.width - 2 * c;
                (f = {
                  left: "0",
                  center: "0.5",
                  right: "1"
                }[d.alignValue]) ? a = +f * n : L(d.x) && Math.round(d.x) !== d.translateX && (a = d.x - d.translateX);
                return {
                  x: h.x + (l.translateX || 0) + c - (a || 0),
                  y: h.y + (l.translateY || 0) + c - e,
                  width: d.width - 2 * c,
                  height: d.height - 2 * c
                };
              }
            };

            for (y = 0; y < h; y++) {
              if (x = f[y]) x.oldOpacity = x.opacity, x.newOpacity = 1, x.absoluteBox = C(x);
            }

            f.sort(function (d, e) {
              return (e.labelrank || 0) - (d.labelrank || 0);
            });

            for (y = 0; y < h; y++) {
              var w = (C = f[y]) && C.absoluteBox;

              for (x = y + 1; x < h; ++x) {
                var r = (n = f[x]) && n.absoluteBox;
                !w || !r || C === n || 0 === C.newOpacity || 0 === n.newOpacity || r.x >= w.x + w.width || r.x + r.width <= w.x || r.y >= w.y + w.height || r.y + r.height <= w.y || ((C.labelrank < n.labelrank ? C : n).newOpacity = 0);
              }
            }

            f.forEach(function (d) {
              if (d) {
                var f = d.newOpacity;
                d.oldOpacity !== f && (d.alignAttr && d.placed ? (d[f ? "removeClass" : "addClass"]("highcharts-data-label-hidden"), l = !0, d.alignAttr.opacity = f, d[d.isOld ? "animate" : "attr"](d.alignAttr, null, function () {
                  e.styledMode || d.css({
                    pointerEvents: f ? "auto" : "none"
                  });
                  d.visibility = f ? "inherit" : "hidden";
                }), z(e, "afterHideOverlappingLabel")) : d.attr({
                  opacity: f
                }));
                d.isOld = !0;
              }
            });
            l && z(e, "afterHideAllOverlappingLabels");
          };
        });
        N(m, "Core/Interaction.js", [m["Core/Series/Series.js"], m["Core/Chart/Chart.js"], m["Core/Globals.js"], m["Core/Legend.js"], m["Series/LineSeries.js"], m["Core/Options.js"], m["Core/Series/Point.js"], m["Core/Utilities.js"]], function (f, h, m, z, F, L, K, C) {
          f = f.seriesTypes;
          var y = m.hasTouch,
              e = m.svg,
              I = L.defaultOptions,
              v = C.addEvent,
              x = C.createElement,
              D = C.css,
              n = C.defined,
              l = C.extend,
              J = C.fireEvent,
              w = C.isArray,
              r = C.isFunction,
              d = C.isNumber,
              g = C.isObject,
              c = C.merge,
              a = C.objectEach,
              q = C.pick;
          "";
          m = m.TrackerMixin = {
            drawTrackerPoint: function drawTrackerPoint() {
              var a = this,
                  c = a.chart,
                  d = c.pointer,
                  e = function e(a) {
                var c = d.getPointFromEvent(a);
                "undefined" !== typeof c && (d.isDirectTouch = !0, c.onMouseOver(a));
              },
                  f;

              a.points.forEach(function (a) {
                f = w(a.dataLabels) ? a.dataLabels : a.dataLabel ? [a.dataLabel] : [];
                a.graphic && (a.graphic.element.point = a);
                f.forEach(function (c) {
                  c.div ? c.div.point = a : c.element.point = a;
                });
              });
              a._hasTracking || (a.trackerGroups.forEach(function (f) {
                if (a[f]) {
                  a[f].addClass("highcharts-tracker").on("mouseover", e).on("mouseout", function (a) {
                    d.onTrackerMouseOut(a);
                  });
                  if (y) a[f].on("touchstart", e);
                  !c.styledMode && a.options.cursor && a[f].css(D).css({
                    cursor: a.options.cursor
                  });
                }
              }), a._hasTracking = !0);
              J(this, "afterDrawTracker");
            },
            drawTrackerGraph: function drawTrackerGraph() {
              var a = this,
                  c = a.options,
                  d = c.trackByArea,
                  f = [].concat(d ? a.areaPath : a.graphPath),
                  g = a.chart,
                  h = g.pointer,
                  l = g.renderer,
                  n = g.options.tooltip.snap,
                  m = a.tracker,
                  q = function q(b) {
                if (g.hoverSeries !== a) a.onMouseOver();
              },
                  b = "rgba(192,192,192," + (e ? .0001 : .002) + ")";

              m ? m.attr({
                d: f
              }) : a.graph && (a.tracker = l.path(f).attr({
                visibility: a.visible ? "visible" : "hidden",
                zIndex: 2
              }).addClass(d ? "highcharts-tracker-area" : "highcharts-tracker-line").add(a.group), g.styledMode || a.tracker.attr({
                "stroke-linecap": "round",
                "stroke-linejoin": "round",
                stroke: b,
                fill: d ? b : "none",
                "stroke-width": a.graph.strokeWidth() + (d ? 0 : 2 * n)
              }), [a.tracker, a.markerGroup].forEach(function (a) {
                a.addClass("highcharts-tracker").on("mouseover", q).on("mouseout", function (a) {
                  h.onTrackerMouseOut(a);
                });
                c.cursor && !g.styledMode && a.css({
                  cursor: c.cursor
                });
                if (y) a.on("touchstart", q);
              }));
              J(this, "afterDrawTracker");
            }
          };
          f.column && (f.column.prototype.drawTracker = m.drawTrackerPoint);
          f.pie && (f.pie.prototype.drawTracker = m.drawTrackerPoint);
          f.scatter && (f.scatter.prototype.drawTracker = m.drawTrackerPoint);
          l(z.prototype, {
            setItemEvents: function setItemEvents(a, d, e) {
              var f = this,
                  g = f.chart.renderer.boxWrapper,
                  h = a instanceof K,
                  p = "highcharts-legend-" + (h ? "point" : "series") + "-active",
                  l = f.chart.styledMode;
              (e ? [d, a.legendSymbol] : [a.legendGroup]).forEach(function (e) {
                if (e) e.on("mouseover", function () {
                  a.visible && f.allItems.forEach(function (c) {
                    a !== c && c.setState("inactive", !h);
                  });
                  a.setState("hover");
                  a.visible && g.addClass(p);
                  l || d.css(f.options.itemHoverStyle);
                }).on("mouseout", function () {
                  f.chart.styledMode || d.css(c(a.visible ? f.itemStyle : f.itemHiddenStyle));
                  f.allItems.forEach(function (c) {
                    a !== c && c.setState("", !h);
                  });
                  g.removeClass(p);
                  a.setState();
                }).on("click", function (c) {
                  var b = function b() {
                    a.setVisible && a.setVisible();
                    f.allItems.forEach(function (b) {
                      a !== b && b.setState(a.visible ? "inactive" : "", !h);
                    });
                  };

                  g.removeClass(p);
                  c = {
                    browserEvent: c
                  };
                  a.firePointEvent ? a.firePointEvent("legendItemClick", c, b) : J(a, "legendItemClick", c, b);
                });
              });
            },
            createCheckboxForItem: function createCheckboxForItem(a) {
              a.checkbox = x("input", {
                type: "checkbox",
                className: "highcharts-legend-checkbox",
                checked: a.selected,
                defaultChecked: a.selected
              }, this.options.itemCheckboxStyle, this.chart.container);
              v(a.checkbox, "click", function (c) {
                J(a.series || a, "checkboxClick", {
                  checked: c.target.checked,
                  item: a
                }, function () {
                  a.select();
                });
              });
            }
          });
          l(h.prototype, {
            showResetZoom: function showResetZoom() {
              function a() {
                c.zoomOut();
              }

              var c = this,
                  d = I.lang,
                  e = c.options.chart.resetZoomButton,
                  f = e.theme,
                  g = f.states,
                  h = "chart" === e.relativeTo || "spaceBox" === e.relativeTo ? null : "plotBox";
              J(this, "beforeShowResetZoom", null, function () {
                c.resetZoomButton = c.renderer.button(d.resetZoom, null, null, a, f, g && g.hover).attr({
                  align: e.position.align,
                  title: d.resetZoomTitle
                }).addClass("highcharts-reset-zoom").add().align(e.position, !1, h);
              });
              J(this, "afterShowResetZoom");
            },
            zoomOut: function zoomOut() {
              J(this, "selection", {
                resetSelection: !0
              }, this.zoom);
            },
            zoom: function zoom(a) {
              var c = this,
                  d,
                  e = c.pointer,
                  f = !1,
                  h = c.inverted ? e.mouseDownX : e.mouseDownY;
              !a || a.resetSelection ? (c.axes.forEach(function (a) {
                d = a.zoom();
              }), e.initiated = !1) : a.xAxis.concat(a.yAxis).forEach(function (a) {
                var g = a.axis,
                    p = c.inverted ? g.left : g.top,
                    b = c.inverted ? p + g.width : p + g.height,
                    k = g.isXAxis,
                    l = !1;
                if (!k && h >= p && h <= b || k || !n(h)) l = !0;
                e[k ? "zoomX" : "zoomY"] && l && (d = g.zoom(a.min, a.max), g.displayBtn && (f = !0));
              });
              var p = c.resetZoomButton;
              f && !p ? c.showResetZoom() : !f && g(p) && (c.resetZoomButton = p.destroy());
              d && c.redraw(q(c.options.chart.animation, a && a.animation, 100 > c.pointCount));
            },
            pan: function pan(a, c) {
              var e = this,
                  f = e.hoverPoints,
                  g = e.options.chart,
                  h = e.options.mapNavigation && e.options.mapNavigation.enabled,
                  p;
              c = "object" === typeof c ? c : {
                enabled: c,
                type: "x"
              };
              g && g.panning && (g.panning = c);
              var l = c.type;
              J(this, "pan", {
                originalEvent: a
              }, function () {
                f && f.forEach(function (a) {
                  a.setState();
                });
                var c = [1];
                "xy" === l ? c = [1, 0] : "y" === l && (c = [0]);
                c.forEach(function (c) {
                  var b = e[c ? "xAxis" : "yAxis"][0],
                      f = b.horiz,
                      g = a[f ? "chartX" : "chartY"];
                  f = f ? "mouseDownX" : "mouseDownY";
                  var n = e[f],
                      m = (b.pointRange || 0) / 2,
                      r = b.reversed && !e.inverted || !b.reversed && e.inverted ? -1 : 1,
                      u = b.getExtremes(),
                      v = b.toValue(n - g, !0) + m * r;
                  r = b.toValue(n + b.len - g, !0) - m * r;
                  var w = r < v;
                  n = w ? r : v;
                  v = w ? v : r;
                  var A = b.hasVerticalPanning(),
                      x = b.panningState;
                  b.series.forEach(function (a) {
                    if (A && !c && (!x || x.isDirty)) {
                      var b = a.getProcessedData(!0);
                      a = a.getExtremes(b.yData, !0);
                      x || (x = {
                        startMin: Number.MAX_VALUE,
                        startMax: -Number.MAX_VALUE
                      });
                      d(a.dataMin) && d(a.dataMax) && (x.startMin = Math.min(a.dataMin, x.startMin), x.startMax = Math.max(a.dataMax, x.startMax));
                    }
                  });
                  r = Math.min(q(null === x || void 0 === x ? void 0 : x.startMin, u.dataMin), m ? u.min : b.toValue(b.toPixels(u.min) - b.minPixelPadding));
                  m = Math.max(q(null === x || void 0 === x ? void 0 : x.startMax, u.dataMax), m ? u.max : b.toValue(b.toPixels(u.max) + b.minPixelPadding));
                  b.panningState = x;
                  b.isOrdinal || (w = r - n, 0 < w && (v += w, n = r), w = v - m, 0 < w && (v = m, n -= w), b.series.length && n !== u.min && v !== u.max && n >= r && v <= m && (b.setExtremes(n, v, !1, !1, {
                    trigger: "pan"
                  }), e.resetZoomButton || h || n === r || v === m || !l.match("y") || (e.showResetZoom(), b.displayBtn = !1), p = !0), e[f] = g);
                });
                p && e.redraw(!1);
                D(e.container, {
                  cursor: "move"
                });
              });
            }
          });
          l(K.prototype, {
            select: function select(a, c) {
              var d = this,
                  e = d.series,
                  f = e.chart;
              this.selectedStaging = a = q(a, !d.selected);
              d.firePointEvent(a ? "select" : "unselect", {
                accumulate: c
              }, function () {
                d.selected = d.options.selected = a;
                e.options.data[e.data.indexOf(d)] = d.options;
                d.setState(a && "select");
                c || f.getSelectedPoints().forEach(function (a) {
                  var c = a.series;
                  a.selected && a !== d && (a.selected = a.options.selected = !1, c.options.data[c.data.indexOf(a)] = a.options, a.setState(f.hoverPoints && c.options.inactiveOtherPoints ? "inactive" : ""), a.firePointEvent("unselect"));
                });
              });
              delete this.selectedStaging;
            },
            onMouseOver: function onMouseOver(a) {
              var c = this.series.chart,
                  d = c.pointer;
              a = a ? d.normalize(a) : d.getChartCoordinatesFromPoint(this, c.inverted);
              d.runPointActions(a, this);
            },
            onMouseOut: function onMouseOut() {
              var a = this.series.chart;
              this.firePointEvent("mouseOut");
              this.series.options.inactiveOtherPoints || (a.hoverPoints || []).forEach(function (a) {
                a.setState();
              });
              a.hoverPoints = a.hoverPoint = null;
            },
            importEvents: function importEvents() {
              if (!this.hasImportedEvents) {
                var d = this,
                    e = c(d.series.options.point, d.options).events;
                d.events = e;
                a(e, function (a, c) {
                  r(a) && v(d, c, a);
                });
                this.hasImportedEvents = !0;
              }
            },
            setState: function setState(a, c) {
              var d = this.series,
                  e = this.state,
                  f = d.options.states[a || "normal"] || {},
                  g = I.plotOptions[d.type].marker && d.options.marker,
                  h = g && !1 === g.enabled,
                  p = g && g.states && g.states[a || "normal"] || {},
                  n = !1 === p.enabled,
                  m = d.stateMarkerGraphic,
                  b = this.marker || {},
                  k = d.chart,
                  r = d.halo,
                  v,
                  w = g && d.markerAttribs;
              a = a || "";

              if (!(a === this.state && !c || this.selected && "select" !== a || !1 === f.enabled || a && (n || h && !1 === p.enabled) || a && b.states && b.states[a] && !1 === b.states[a].enabled)) {
                this.state = a;
                w && (v = d.markerAttribs(this, a));

                if (this.graphic) {
                  e && this.graphic.removeClass("highcharts-point-" + e);
                  a && this.graphic.addClass("highcharts-point-" + a);

                  if (!k.styledMode) {
                    var x = d.pointAttribs(this, a);
                    var y = q(k.options.chart.animation, f.animation);
                    d.options.inactiveOtherPoints && x.opacity && ((this.dataLabels || []).forEach(function (a) {
                      a && a.animate({
                        opacity: x.opacity
                      }, y);
                    }), this.connector && this.connector.animate({
                      opacity: x.opacity
                    }, y));
                    this.graphic.animate(x, y);
                  }

                  v && this.graphic.animate(v, q(k.options.chart.animation, p.animation, g.animation));
                  m && m.hide();
                } else {
                  if (a && p) {
                    e = b.symbol || d.symbol;
                    m && m.currentSymbol !== e && (m = m.destroy());
                    if (v) if (m) m[c ? "animate" : "attr"]({
                      x: v.x,
                      y: v.y
                    });else e && (d.stateMarkerGraphic = m = k.renderer.symbol(e, v.x, v.y, v.width, v.height).add(d.markerGroup), m.currentSymbol = e);
                    !k.styledMode && m && m.attr(d.pointAttribs(this, a));
                  }

                  m && (m[a && this.isInside ? "show" : "hide"](), m.element.point = this);
                }

                a = f.halo;
                f = (m = this.graphic || m) && m.visibility || "inherit";
                a && a.size && m && "hidden" !== f && !this.isCluster ? (r || (d.halo = r = k.renderer.path().add(m.parentGroup)), r.show()[c ? "animate" : "attr"]({
                  d: this.haloPath(a.size)
                }), r.attr({
                  "class": "highcharts-halo highcharts-color-" + q(this.colorIndex, d.colorIndex) + (this.className ? " " + this.className : ""),
                  visibility: f,
                  zIndex: -1
                }), r.point = this, k.styledMode || r.attr(l({
                  fill: this.color || d.color,
                  "fill-opacity": a.opacity
                }, a.attributes))) : r && r.point && r.point.haloPath && r.animate({
                  d: r.point.haloPath(0)
                }, null, r.hide);
                J(this, "afterSetState");
              }
            },
            haloPath: function haloPath(a) {
              return this.series.chart.renderer.symbols.circle(Math.floor(this.plotX) - a, this.plotY - a, 2 * a, 2 * a);
            }
          });
          l(F.prototype, {
            onMouseOver: function onMouseOver() {
              var a = this.chart,
                  c = a.hoverSeries;
              a.pointer.setHoverChartIndex();
              if (c && c !== this) c.onMouseOut();
              this.options.events.mouseOver && J(this, "mouseOver");
              this.setState("hover");
              a.hoverSeries = this;
            },
            onMouseOut: function onMouseOut() {
              var a = this.options,
                  c = this.chart,
                  d = c.tooltip,
                  e = c.hoverPoint;
              c.hoverSeries = null;
              if (e) e.onMouseOut();
              this && a.events.mouseOut && J(this, "mouseOut");
              !d || this.stickyTracking || d.shared && !this.noSharedTooltip || d.hide();
              c.series.forEach(function (a) {
                a.setState("", !0);
              });
            },
            setState: function setState(a, c) {
              var d = this,
                  e = d.options,
                  f = d.graph,
                  g = e.inactiveOtherPoints,
                  h = e.states,
                  l = e.lineWidth,
                  m = e.opacity,
                  n = q(h[a || "normal"] && h[a || "normal"].animation, d.chart.options.chart.animation);
              e = 0;
              a = a || "";

              if (d.state !== a && ([d.group, d.markerGroup, d.dataLabelsGroup].forEach(function (b) {
                b && (d.state && b.removeClass("highcharts-series-" + d.state), a && b.addClass("highcharts-series-" + a));
              }), d.state = a, !d.chart.styledMode)) {
                if (h[a] && !1 === h[a].enabled) return;
                a && (l = h[a].lineWidth || l + (h[a].lineWidthPlus || 0), m = q(h[a].opacity, m));
                if (f && !f.dashstyle) for (h = {
                  "stroke-width": l
                }, f.animate(h, n); d["zone-graph-" + e];) {
                  d["zone-graph-" + e].attr(h), e += 1;
                }
                g || [d.group, d.markerGroup, d.dataLabelsGroup, d.labelBySeries].forEach(function (a) {
                  a && a.animate({
                    opacity: m
                  }, n);
                });
              }

              c && g && d.points && d.setAllPointsToState(a);
            },
            setAllPointsToState: function setAllPointsToState(a) {
              this.points.forEach(function (c) {
                c.setState && c.setState(a);
              });
            },
            setVisible: function setVisible(a, c) {
              var d = this,
                  e = d.chart,
                  f = d.legendItem,
                  g = e.options.chart.ignoreHiddenSeries,
                  h = d.visible;
              var l = (d.visible = a = d.options.visible = d.userOptions.visible = "undefined" === typeof a ? !h : a) ? "show" : "hide";
              ["group", "dataLabelsGroup", "markerGroup", "tracker", "tt"].forEach(function (a) {
                if (d[a]) d[a][l]();
              });
              if (e.hoverSeries === d || (e.hoverPoint && e.hoverPoint.series) === d) d.onMouseOut();
              f && e.legend.colorizeItem(d, a);
              d.isDirty = !0;
              d.options.stacking && e.series.forEach(function (a) {
                a.options.stacking && a.visible && (a.isDirty = !0);
              });
              d.linkedSeries.forEach(function (c) {
                c.setVisible(a, !1);
              });
              g && (e.isDirtyBox = !0);
              J(d, l);
              !1 !== c && e.redraw();
            },
            show: function show() {
              this.setVisible(!0);
            },
            hide: function hide() {
              this.setVisible(!1);
            },
            select: function select(a) {
              this.selected = a = this.options.selected = "undefined" === typeof a ? !this.selected : a;
              this.checkbox && (this.checkbox.checked = a);
              J(this, a ? "select" : "unselect");
            },
            drawTracker: m.drawTrackerGraph
          });
        });
        N(m, "Core/Responsive.js", [m["Core/Chart/Chart.js"], m["Core/Utilities.js"]], function (f, h) {
          var m = h.find,
              z = h.isArray,
              F = h.isObject,
              L = h.merge,
              K = h.objectEach,
              C = h.pick,
              y = h.splat,
              e = h.uniqueKey;

          f.prototype.setResponsive = function (f, h) {
            var v = this.options.responsive,
                y = [],
                n = this.currentResponsive;
            !h && v && v.rules && v.rules.forEach(function (f) {
              "undefined" === typeof f._id && (f._id = e());
              this.matchResponsiveRule(f, y);
            }, this);
            h = L.apply(0, y.map(function (e) {
              return m(v.rules, function (f) {
                return f._id === e;
              }).chartOptions;
            }));
            h.isResponsiveOptions = !0;
            y = y.toString() || void 0;
            y !== (n && n.ruleIds) && (n && this.update(n.undoOptions, f, !0), y ? (n = this.currentOptions(h), n.isResponsiveOptions = !0, this.currentResponsive = {
              ruleIds: y,
              mergedOptions: h,
              undoOptions: n
            }, this.update(h, f, !0)) : this.currentResponsive = void 0);
          };

          f.prototype.matchResponsiveRule = function (e, f) {
            var h = e.condition;
            (h.callback || function () {
              return this.chartWidth <= C(h.maxWidth, Number.MAX_VALUE) && this.chartHeight <= C(h.maxHeight, Number.MAX_VALUE) && this.chartWidth >= C(h.minWidth, 0) && this.chartHeight >= C(h.minHeight, 0);
            }).call(this) && f.push(e._id);
          };

          f.prototype.currentOptions = function (e) {
            function f(e, l, m, v) {
              var n;
              K(e, function (d, e) {
                if (!v && -1 < h.collectionsWithUpdate.indexOf(e)) for (d = y(d), m[e] = [], n = 0; n < Math.max(d.length, l[e].length); n++) {
                  l[e][n] && (void 0 === d[n] ? m[e][n] = l[e][n] : (m[e][n] = {}, f(d[n], l[e][n], m[e][n], v + 1)));
                } else F(d) ? (m[e] = z(d) ? [] : {}, f(d, l[e] || {}, m[e], v + 1)) : m[e] = "undefined" === typeof l[e] ? null : l[e];
              });
            }

            var h = this,
                m = {};
            f(e, this.options, m, 0);
            return m;
          };
        });
        N(m, "masters/highcharts.src.js", [m["Core/Globals.js"]], function (f) {
          return f;
        });
        m["masters/highcharts.src.js"]._modules = m;
        return m["masters/highcharts.src.js"];
      }); //# sourceMappingURL=highcharts.js.map

      /***/

    },

    /***/
    "7+OI":
    /*!******************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/isObservable.js ***!
      \******************************************************************/

    /*! exports provided: isObservable */

    /***/
    function OI(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isObservable", function () {
        return isObservable;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");

      function isObservable(obj) {
        return !!obj && (obj instanceof _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"] || typeof obj.lift === 'function' && typeof obj.subscribe === 'function');
      } //# sourceMappingURL=isObservable.js.map

      /***/

    },

    /***/
    "7BjC":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/et.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function BjC(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Estonian [et]
      //! author : Henry Kehlmann : https://github.com/madhenry
      //! improvements : Illimar Tambek : https://github.com/ragulka
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        function processRelativeTime(number, withoutSuffix, key, isFuture) {
          var format = {
            s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'],
            ss: [number + 'sekundi', number + 'sekundit'],
            m: ['ühe minuti', 'üks minut'],
            mm: [number + ' minuti', number + ' minutit'],
            h: ['ühe tunni', 'tund aega', 'üks tund'],
            hh: [number + ' tunni', number + ' tundi'],
            d: ['ühe päeva', 'üks päev'],
            M: ['kuu aja', 'kuu aega', 'üks kuu'],
            MM: [number + ' kuu', number + ' kuud'],
            y: ['ühe aasta', 'aasta', 'üks aasta'],
            yy: [number + ' aasta', number + ' aastat']
          };

          if (withoutSuffix) {
            return format[key][2] ? format[key][2] : format[key][1];
          }

          return isFuture ? format[key][0] : format[key][1];
        }

        var et = moment.defineLocale('et', {
          months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),
          monthsShort: 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),
          weekdays: 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),
          weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),
          weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),
          longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd, D. MMMM YYYY H:mm'
          },
          calendar: {
            sameDay: '[Täna,] LT',
            nextDay: '[Homme,] LT',
            nextWeek: '[Järgmine] dddd LT',
            lastDay: '[Eile,] LT',
            lastWeek: '[Eelmine] dddd LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s pärast',
            past: '%s tagasi',
            s: processRelativeTime,
            ss: processRelativeTime,
            m: processRelativeTime,
            mm: processRelativeTime,
            h: processRelativeTime,
            hh: processRelativeTime,
            d: processRelativeTime,
            dd: '%d päeva',
            M: processRelativeTime,
            MM: processRelativeTime,
            y: processRelativeTime,
            yy: processRelativeTime
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return et;
      });
      /***/

    },

    /***/
    "7C5Q":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/en-in.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function C5Q(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : English (India) [en-in]
      //! author : Jatin Agrawal : https://github.com/jatinag22
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var enIn = moment.defineLocale('en-in', {
          months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
          monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
          weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
          weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
          weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
          longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A'
          },
          calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
          ordinal: function ordinal(number) {
            var b = number % 10,
                output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';
            return number + output;
          },
          week: {
            dow: 0,
            // Sunday is the first day of the week.
            doy: 6 // The week that contains Jan 1st is the first week of the year.

          }
        });
        return enIn;
      });
      /***/

    },

    /***/
    "7EHt":
    /*!***************************************************************************!*\
      !*** ./node_modules/@angular/material/__ivy_ngcc__/fesm2015/expansion.js ***!
      \***************************************************************************/

    /*! exports provided: EXPANSION_PANEL_ANIMATION_TIMING, MAT_ACCORDION, MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, MatAccordion, MatExpansionModule, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelContent, MatExpansionPanelDescription, MatExpansionPanelHeader, MatExpansionPanelTitle, matExpansionAnimations, ɵ0 */

    /***/
    function EHt(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "EXPANSION_PANEL_ANIMATION_TIMING", function () {
        return EXPANSION_PANEL_ANIMATION_TIMING;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_ACCORDION", function () {
        return MAT_ACCORDION;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_EXPANSION_PANEL_DEFAULT_OPTIONS", function () {
        return MAT_EXPANSION_PANEL_DEFAULT_OPTIONS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatAccordion", function () {
        return MatAccordion;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatExpansionModule", function () {
        return MatExpansionModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatExpansionPanel", function () {
        return MatExpansionPanel;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatExpansionPanelActionRow", function () {
        return MatExpansionPanelActionRow;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatExpansionPanelContent", function () {
        return MatExpansionPanelContent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatExpansionPanelDescription", function () {
        return MatExpansionPanelDescription;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatExpansionPanelHeader", function () {
        return MatExpansionPanelHeader;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatExpansionPanelTitle", function () {
        return MatExpansionPanelTitle;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "matExpansionAnimations", function () {
        return matExpansionAnimations;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵ0", function () {
        return ɵ0;
      });
      /* harmony import */


      var _angular_cdk_accordion__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/cdk/accordion */
      "N/qJ");
      /* harmony import */


      var _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/cdk/portal */
      "+rOU");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_material_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/material/core */
      "FKr1");
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");
      /* harmony import */


      var _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! @angular/cdk/a11y */
      "u47x");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(
      /*! @angular/cdk/keycodes */
      "FtGj");
      /* harmony import */


      var _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(
      /*! @angular/platform-browser/animations */
      "R1ws");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var _angular_animations__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(
      /*! @angular/animations */
      "R0Ic");
      /* harmony import */


      var _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(
      /*! @angular/cdk/collections */
      "0EQZ");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Token used to provide a `MatAccordion` to `MatExpansionPanel`.
       * Used primarily to avoid circular imports between `MatAccordion` and `MatExpansionPanel`.
       */


      var _c0 = ["body"];

      function MatExpansionPanel_ng_template_5_Template(rf, ctx) {}

      var _c1 = [[["mat-expansion-panel-header"]], "*", [["mat-action-row"]]];
      var _c2 = ["mat-expansion-panel-header", "*", "mat-action-row"];

      function MatExpansionPanelHeader_span_4_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](0, "span", 2);
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("@indicatorRotate", ctx_r0._getExpandedState());
        }
      }

      var _c3 = [[["mat-panel-title"]], [["mat-panel-description"]], "*"];
      var _c4 = ["mat-panel-title", "mat-panel-description", "*"];
      var MAT_ACCORDION = new _angular_core__WEBPACK_IMPORTED_MODULE_3__["InjectionToken"]('MAT_ACCORDION');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Time and timing curve for expansion panel animations. */
      // Note: Keep this in sync with the Sass variable for the panel header animation.

      var EXPANSION_PANEL_ANIMATION_TIMING = '225ms cubic-bezier(0.4,0.0,0.2,1)';
      /**
       * Animations used by the Material expansion panel.
       *
       * A bug in angular animation's `state` when ViewContainers are moved using ViewContainerRef.move()
       * causes the animation state of moved components to become `void` upon exit, and not update again
       * upon reentry into the DOM.  This can lead a to situation for the expansion panel where the state
       * of the panel is `expanded` or `collapsed` but the animation state is `void`.
       *
       * To correctly handle animating to the next state, we animate between `void` and `collapsed` which
       * are defined to have the same styles. Since angular animates from the current styles to the
       * destination state's style definition, in situations where we are moving from `void`'s styles to
       * `collapsed` this acts a noop since no style values change.
       *
       * In the case where angular's animation state is out of sync with the expansion panel's state, the
       * expansion panel being `expanded` and angular animations being `void`, the animation from the
       * `expanded`'s effective styles (though in a `void` animation state) to the collapsed state will
       * occur as expected.
       *
       * Angular Bug: https://github.com/angular/angular/issues/18847
       *
       * @docs-private
       */

      var matExpansionAnimations = {
        /** Animation that rotates the indicator arrow. */
        indicatorRotate: Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["trigger"])('indicatorRotate', [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["state"])('collapsed, void', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["style"])({
          transform: 'rotate(0deg)'
        })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["state"])('expanded', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["style"])({
          transform: 'rotate(180deg)'
        })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["transition"])('expanded <=> collapsed, void => collapsed', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["animate"])(EXPANSION_PANEL_ANIMATION_TIMING))]),

        /** Animation that expands and collapses the panel content. */
        bodyExpansion: Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["trigger"])('bodyExpansion', [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["state"])('collapsed, void', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["style"])({
          height: '0px',
          visibility: 'hidden'
        })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["state"])('expanded', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["style"])({
          height: '*',
          visibility: 'visible'
        })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["transition"])('expanded <=> collapsed, void => collapsed', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["animate"])(EXPANSION_PANEL_ANIMATION_TIMING))])
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Expansion panel content that will be rendered lazily
       * after the panel is opened for the first time.
       */

      var MatExpansionPanelContent = function MatExpansionPanelContent(_template) {
        _classCallCheck2(this, MatExpansionPanelContent);

        this._template = _template;
      };

      MatExpansionPanelContent.ɵfac = function MatExpansionPanelContent_Factory(t) {
        return new (t || MatExpansionPanelContent)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]));
      };

      MatExpansionPanelContent.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: MatExpansionPanelContent,
        selectors: [["ng-template", "matExpansionPanelContent", ""]]
      });

      MatExpansionPanelContent.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](MatExpansionPanelContent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: 'ng-template[matExpansionPanelContent]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Counter for generating unique element ids. */


      var uniqueId = 0;
      /**
       * Injection token that can be used to configure the defalt
       * options for the expansion panel component.
       */

      var MAT_EXPANSION_PANEL_DEFAULT_OPTIONS = new _angular_core__WEBPACK_IMPORTED_MODULE_3__["InjectionToken"]('MAT_EXPANSION_PANEL_DEFAULT_OPTIONS');
      var ɵ0 = undefined;
      /**
       * This component can be used as a single element to show expandable content, or as one of
       * multiple children of an element with the MatAccordion directive attached.
       */

      var MatExpansionPanel = /*#__PURE__*/function (_angular_cdk_accordio) {
        _inherits2(MatExpansionPanel, _angular_cdk_accordio);

        var _super202 = _createSuper(MatExpansionPanel);

        function MatExpansionPanel(accordion, _changeDetectorRef, _uniqueSelectionDispatcher, _viewContainerRef, _document, _animationMode, defaultOptions) {
          var _this512;

          _classCallCheck2(this, MatExpansionPanel);

          _this512 = _super202.call(this, accordion, _changeDetectorRef, _uniqueSelectionDispatcher);
          _this512._viewContainerRef = _viewContainerRef;
          _this512._animationMode = _animationMode;
          _this512._hideToggle = false;
          /** An event emitted after the body's expansion animation happens. */

          _this512.afterExpand = new _angular_core__WEBPACK_IMPORTED_MODULE_3__["EventEmitter"]();
          /** An event emitted after the body's collapse animation happens. */

          _this512.afterCollapse = new _angular_core__WEBPACK_IMPORTED_MODULE_3__["EventEmitter"]();
          /** Stream that emits for changes in `@Input` properties. */

          _this512._inputChanges = new rxjs__WEBPACK_IMPORTED_MODULE_10__["Subject"]();
          /** ID for the associated header element. Used for a11y labelling. */

          _this512._headerId = "mat-expansion-panel-header-".concat(uniqueId++);
          /** Stream of body animation done events. */

          _this512._bodyAnimationDone = new rxjs__WEBPACK_IMPORTED_MODULE_10__["Subject"]();
          _this512.accordion = accordion;
          _this512._document = _document; // We need a Subject with distinctUntilChanged, because the `done` event
          // fires twice on some browsers. See https://github.com/angular/angular/issues/24084

          _this512._bodyAnimationDone.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_7__["distinctUntilChanged"])(function (x, y) {
            return x.fromState === y.fromState && x.toState === y.toState;
          })).subscribe(function (event) {
            if (event.fromState !== 'void') {
              if (event.toState === 'expanded') {
                _this512.afterExpand.emit();
              } else if (event.toState === 'collapsed') {
                _this512.afterCollapse.emit();
              }
            }
          });

          if (defaultOptions) {
            _this512.hideToggle = defaultOptions.hideToggle;
          }

          return _this512;
        }
        /** Whether the toggle indicator should be hidden. */


        _createClass2(MatExpansionPanel, [{
          key: "hideToggle",
          get: function get() {
            return this._hideToggle || this.accordion && this.accordion.hideToggle;
          },
          set: function set(value) {
            this._hideToggle = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceBooleanProperty"])(value);
          }
          /** The position of the expansion indicator. */

        }, {
          key: "togglePosition",
          get: function get() {
            return this._togglePosition || this.accordion && this.accordion.togglePosition;
          },
          set: function set(value) {
            this._togglePosition = value;
          }
          /** Determines whether the expansion panel should have spacing between it and its siblings. */

        }, {
          key: "_hasSpacing",
          value: function _hasSpacing() {
            if (this.accordion) {
              return this.expanded && this.accordion.displayMode === 'default';
            }

            return false;
          }
          /** Gets the expanded state string. */

        }, {
          key: "_getExpandedState",
          value: function _getExpandedState() {
            return this.expanded ? 'expanded' : 'collapsed';
          }
          /** Toggles the expanded state of the expansion panel. */

        }, {
          key: "toggle",
          value: function toggle() {
            this.expanded = !this.expanded;
          }
          /** Sets the expanded state of the expansion panel to false. */

        }, {
          key: "close",
          value: function close() {
            this.expanded = false;
          }
          /** Sets the expanded state of the expansion panel to true. */

        }, {
          key: "open",
          value: function open() {
            this.expanded = true;
          }
        }, {
          key: "ngAfterContentInit",
          value: function ngAfterContentInit() {
            var _this513 = this;

            if (this._lazyContent) {
              // Render the content as soon as the panel becomes open.
              this.opened.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_7__["startWith"])(null), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_7__["filter"])(function () {
                return _this513.expanded && !_this513._portal;
              }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_7__["take"])(1)).subscribe(function () {
                _this513._portal = new _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_1__["TemplatePortal"](_this513._lazyContent._template, _this513._viewContainerRef);
              });
            }
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            this._inputChanges.next(changes);
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            _get2(_getPrototypeOf2(MatExpansionPanel.prototype), "ngOnDestroy", this).call(this);

            this._bodyAnimationDone.complete();

            this._inputChanges.complete();
          }
          /** Checks whether the expansion panel's content contains the currently-focused element. */

        }, {
          key: "_containsFocus",
          value: function _containsFocus() {
            if (this._body) {
              var focusedElement = this._document.activeElement;
              var bodyElement = this._body.nativeElement;
              return focusedElement === bodyElement || bodyElement.contains(focusedElement);
            }

            return false;
          }
        }]);

        return MatExpansionPanel;
      }(_angular_cdk_accordion__WEBPACK_IMPORTED_MODULE_0__["CdkAccordionItem"]);

      MatExpansionPanel.ɵfac = function MatExpansionPanel_Factory(t) {
        return new (t || MatExpansionPanel)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](MAT_ACCORDION, 12), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_cdk_collections__WEBPACK_IMPORTED_MODULE_12__["UniqueSelectionDispatcher"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_2__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_9__["ANIMATION_MODULE_TYPE"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, 8));
      };

      MatExpansionPanel.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineComponent"]({
        type: MatExpansionPanel,
        selectors: [["mat-expansion-panel"]],
        contentQueries: function MatExpansionPanel_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵcontentQuery"](dirIndex, MatExpansionPanelContent, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx._lazyContent = _t.first);
          }
        },
        viewQuery: function MatExpansionPanel_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵviewQuery"](_c0, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx._body = _t.first);
          }
        },
        hostAttrs: [1, "mat-expansion-panel"],
        hostVars: 6,
        hostBindings: function MatExpansionPanel_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵclassProp"]("mat-expanded", ctx.expanded)("_mat-animation-noopable", ctx._animationMode === "NoopAnimations")("mat-expansion-panel-spacing", ctx._hasSpacing());
          }
        },
        inputs: {
          disabled: "disabled",
          expanded: "expanded",
          hideToggle: "hideToggle",
          togglePosition: "togglePosition"
        },
        outputs: {
          opened: "opened",
          closed: "closed",
          expandedChange: "expandedChange",
          afterExpand: "afterExpand",
          afterCollapse: "afterCollapse"
        },
        exportAs: ["matExpansionPanel"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵProvidersFeature"]([// Provide MatAccordion as undefined to prevent nested expansion panels from registering
        // to the same accordion.
        {
          provide: MAT_ACCORDION,
          useValue: ɵ0
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵInheritDefinitionFeature"], _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵNgOnChangesFeature"]],
        ngContentSelectors: _c2,
        decls: 7,
        vars: 4,
        consts: [["role", "region", 1, "mat-expansion-panel-content", 3, "id"], ["body", ""], [1, "mat-expansion-panel-body"], [3, "cdkPortalOutlet"]],
        template: function MatExpansionPanel_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵprojectionDef"](_c1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵprojection"](0);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](1, "div", 0, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("@bodyExpansion.done", function MatExpansionPanel_Template_div_animation_bodyExpansion_done_1_listener($event) {
              return ctx._bodyAnimationDone.next($event);
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](3, "div", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵprojection"](4, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](5, MatExpansionPanel_ng_template_5_Template, 0, 0, "ng-template", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵprojection"](6, 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("@bodyExpansion", ctx._getExpandedState())("id", ctx.id);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵattribute"]("aria-labelledby", ctx._headerId);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](4);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("cdkPortalOutlet", ctx._portal);
          }
        },
        directives: [_angular_cdk_portal__WEBPACK_IMPORTED_MODULE_1__["CdkPortalOutlet"]],
        styles: [".mat-expansion-panel{box-sizing:content-box;display:block;margin:0;border-radius:4px;overflow:hidden;transition:margin 225ms cubic-bezier(0.4, 0, 0.2, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);position:relative}.mat-accordion .mat-expansion-panel:not(.mat-expanded),.mat-accordion .mat-expansion-panel:not(.mat-expansion-panel-spacing){border-radius:0}.mat-accordion .mat-expansion-panel:first-of-type{border-top-right-radius:4px;border-top-left-radius:4px}.mat-accordion .mat-expansion-panel:last-of-type{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.cdk-high-contrast-active .mat-expansion-panel{outline:solid 1px}.mat-expansion-panel.ng-animate-disabled,.ng-animate-disabled .mat-expansion-panel,.mat-expansion-panel._mat-animation-noopable{transition:none}.mat-expansion-panel-content{display:flex;flex-direction:column;overflow:visible}.mat-expansion-panel-body{padding:0 24px 16px}.mat-expansion-panel-spacing{margin:16px 0}.mat-accordion>.mat-expansion-panel-spacing:first-child,.mat-accordion>*:first-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-top:0}.mat-accordion>.mat-expansion-panel-spacing:last-child,.mat-accordion>*:last-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-bottom:0}.mat-action-row{border-top-style:solid;border-top-width:1px;display:flex;flex-direction:row;justify-content:flex-end;padding:16px 8px 16px 24px}.mat-action-row button.mat-button-base,.mat-action-row button.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-action-row button.mat-button-base,[dir=rtl] .mat-action-row button.mat-mdc-button-base{margin-left:0;margin-right:8px}\n"],
        encapsulation: 2,
        data: {
          animation: [matExpansionAnimations.bodyExpansion]
        },
        changeDetection: 0
      });

      MatExpansionPanel.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["SkipSelf"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
            args: [MAT_ACCORDION]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"]
        }, {
          type: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_12__["UniqueSelectionDispatcher"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewContainerRef"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["DOCUMENT"]]
          }]
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
            args: [_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_9__["ANIMATION_MODULE_TYPE"]]
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
            args: [MAT_EXPANSION_PANEL_DEFAULT_OPTIONS]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
          }]
        }];
      };

      MatExpansionPanel.propDecorators = {
        hideToggle: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }],
        togglePosition: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }],
        afterExpand: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Output"]
        }],
        afterCollapse: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Output"]
        }],
        _lazyContent: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChild"],
          args: [MatExpansionPanelContent]
        }],
        _body: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
          args: ['body']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](MatExpansionPanel, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Component"],
          args: [{
            selector: 'mat-expansion-panel',
            exportAs: 'matExpansionPanel',
            template: "<ng-content select=\"mat-expansion-panel-header\"></ng-content>\n<div class=\"mat-expansion-panel-content\"\n     role=\"region\"\n     [@bodyExpansion]=\"_getExpandedState()\"\n     (@bodyExpansion.done)=\"_bodyAnimationDone.next($event)\"\n     [attr.aria-labelledby]=\"_headerId\"\n     [id]=\"id\"\n     #body>\n  <div class=\"mat-expansion-panel-body\">\n    <ng-content></ng-content>\n    <ng-template [cdkPortalOutlet]=\"_portal\"></ng-template>\n  </div>\n  <ng-content select=\"mat-action-row\"></ng-content>\n</div>\n",
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewEncapsulation"].None,
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectionStrategy"].OnPush,
            inputs: ['disabled', 'expanded'],
            outputs: ['opened', 'closed', 'expandedChange'],
            animations: [matExpansionAnimations.bodyExpansion],
            providers: [// Provide MatAccordion as undefined to prevent nested expansion panels from registering
            // to the same accordion.
            {
              provide: MAT_ACCORDION,
              useValue: ɵ0
            }],
            host: {
              'class': 'mat-expansion-panel',
              '[class.mat-expanded]': 'expanded',
              '[class._mat-animation-noopable]': '_animationMode === "NoopAnimations"',
              '[class.mat-expansion-panel-spacing]': '_hasSpacing()'
            },
            styles: [".mat-expansion-panel{box-sizing:content-box;display:block;margin:0;border-radius:4px;overflow:hidden;transition:margin 225ms cubic-bezier(0.4, 0, 0.2, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);position:relative}.mat-accordion .mat-expansion-panel:not(.mat-expanded),.mat-accordion .mat-expansion-panel:not(.mat-expansion-panel-spacing){border-radius:0}.mat-accordion .mat-expansion-panel:first-of-type{border-top-right-radius:4px;border-top-left-radius:4px}.mat-accordion .mat-expansion-panel:last-of-type{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.cdk-high-contrast-active .mat-expansion-panel{outline:solid 1px}.mat-expansion-panel.ng-animate-disabled,.ng-animate-disabled .mat-expansion-panel,.mat-expansion-panel._mat-animation-noopable{transition:none}.mat-expansion-panel-content{display:flex;flex-direction:column;overflow:visible}.mat-expansion-panel-body{padding:0 24px 16px}.mat-expansion-panel-spacing{margin:16px 0}.mat-accordion>.mat-expansion-panel-spacing:first-child,.mat-accordion>*:first-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-top:0}.mat-accordion>.mat-expansion-panel-spacing:last-child,.mat-accordion>*:last-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-bottom:0}.mat-action-row{border-top-style:solid;border-top-width:1px;display:flex;flex-direction:row;justify-content:flex-end;padding:16px 8px 16px 24px}.mat-action-row button.mat-button-base,.mat-action-row button.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-action-row button.mat-button-base,[dir=rtl] .mat-action-row button.mat-mdc-button-base{margin-left:0;margin-right:8px}\n"]
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["SkipSelf"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
              args: [MAT_ACCORDION]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"]
          }, {
            type: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_12__["UniqueSelectionDispatcher"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewContainerRef"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["DOCUMENT"]]
            }]
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
              args: [_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_9__["ANIMATION_MODULE_TYPE"]]
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
              args: [MAT_EXPANSION_PANEL_DEFAULT_OPTIONS]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
            }]
          }];
        }, {
          afterExpand: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Output"]
          }],
          afterCollapse: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Output"]
          }],
          hideToggle: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }],
          togglePosition: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }],
          _lazyContent: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChild"],
            args: [MatExpansionPanelContent]
          }],
          _body: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
            args: ['body']
          }]
        });
      })();
      /**
       * Actions of a `<mat-expansion-panel>`.
       */


      var MatExpansionPanelActionRow = function MatExpansionPanelActionRow() {
        _classCallCheck2(this, MatExpansionPanelActionRow);
      };

      MatExpansionPanelActionRow.ɵfac = function MatExpansionPanelActionRow_Factory(t) {
        return new (t || MatExpansionPanelActionRow)();
      };

      MatExpansionPanelActionRow.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: MatExpansionPanelActionRow,
        selectors: [["mat-action-row"]],
        hostAttrs: [1, "mat-action-row"]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](MatExpansionPanelActionRow, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: 'mat-action-row',
            host: {
              "class": 'mat-action-row'
            }
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Header element of a `<mat-expansion-panel>`.
       */


      var MatExpansionPanelHeader = /*#__PURE__*/function () {
        function MatExpansionPanelHeader(panel, _element, _focusMonitor, _changeDetectorRef, defaultOptions, _animationMode) {
          var _this514 = this;

          _classCallCheck2(this, MatExpansionPanelHeader);

          this.panel = panel;
          this._element = _element;
          this._focusMonitor = _focusMonitor;
          this._changeDetectorRef = _changeDetectorRef;
          this._animationMode = _animationMode;
          this._parentChangeSubscription = rxjs__WEBPACK_IMPORTED_MODULE_10__["Subscription"].EMPTY;
          var accordionHideToggleChange = panel.accordion ? panel.accordion._stateChanges.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_7__["filter"])(function (changes) {
            return !!(changes['hideToggle'] || changes['togglePosition']);
          })) : rxjs__WEBPACK_IMPORTED_MODULE_10__["EMPTY"]; // Since the toggle state depends on an @Input on the panel, we
          // need to subscribe and trigger change detection manually.

          this._parentChangeSubscription = Object(rxjs__WEBPACK_IMPORTED_MODULE_10__["merge"])(panel.opened, panel.closed, accordionHideToggleChange, panel._inputChanges.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_7__["filter"])(function (changes) {
            return !!(changes['hideToggle'] || changes['disabled'] || changes['togglePosition']);
          }))).subscribe(function () {
            return _this514._changeDetectorRef.markForCheck();
          }); // Avoids focus being lost if the panel contained the focused element and was closed.

          panel.closed.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_7__["filter"])(function () {
            return panel._containsFocus();
          })).subscribe(function () {
            return _focusMonitor.focusVia(_element, 'program');
          });

          if (defaultOptions) {
            this.expandedHeight = defaultOptions.expandedHeight;
            this.collapsedHeight = defaultOptions.collapsedHeight;
          }
        }
        /**
         * Whether the associated panel is disabled. Implemented as a part of `FocusableOption`.
         * @docs-private
         */


        _createClass2(MatExpansionPanelHeader, [{
          key: "disabled",
          get: function get() {
            return this.panel.disabled;
          }
          /** Toggles the expanded state of the panel. */

        }, {
          key: "_toggle",
          value: function _toggle() {
            if (!this.disabled) {
              this.panel.toggle();
            }
          }
          /** Gets whether the panel is expanded. */

        }, {
          key: "_isExpanded",
          value: function _isExpanded() {
            return this.panel.expanded;
          }
          /** Gets the expanded state string of the panel. */

        }, {
          key: "_getExpandedState",
          value: function _getExpandedState() {
            return this.panel._getExpandedState();
          }
          /** Gets the panel id. */

        }, {
          key: "_getPanelId",
          value: function _getPanelId() {
            return this.panel.id;
          }
          /** Gets the toggle position for the header. */

        }, {
          key: "_getTogglePosition",
          value: function _getTogglePosition() {
            return this.panel.togglePosition;
          }
          /** Gets whether the expand indicator should be shown. */

        }, {
          key: "_showToggle",
          value: function _showToggle() {
            return !this.panel.hideToggle && !this.panel.disabled;
          }
          /**
           * Gets the current height of the header. Null if no custom height has been
           * specified, and if the default height from the stylesheet should be used.
           */

        }, {
          key: "_getHeaderHeight",
          value: function _getHeaderHeight() {
            var isExpanded = this._isExpanded();

            if (isExpanded && this.expandedHeight) {
              return this.expandedHeight;
            } else if (!isExpanded && this.collapsedHeight) {
              return this.collapsedHeight;
            }

            return null;
          }
          /** Handle keydown event calling to toggle() if appropriate. */

        }, {
          key: "_keydown",
          value: function _keydown(event) {
            switch (event.keyCode) {
              // Toggle for space and enter keys.
              case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__["SPACE"]:
              case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__["ENTER"]:
                if (!Object(_angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__["hasModifierKey"])(event)) {
                  event.preventDefault();

                  this._toggle();
                }

                break;

              default:
                if (this.panel.accordion) {
                  this.panel.accordion._handleHeaderKeydown(event);
                }

                return;
            }
          }
          /**
           * Focuses the panel header. Implemented as a part of `FocusableOption`.
           * @param origin Origin of the action that triggered the focus.
           * @docs-private
           */

        }, {
          key: "focus",
          value: function focus(origin, options) {
            if (origin) {
              this._focusMonitor.focusVia(this._element, origin, options);
            } else {
              this._element.nativeElement.focus(options);
            }
          }
        }, {
          key: "ngAfterViewInit",
          value: function ngAfterViewInit() {
            var _this515 = this;

            this._focusMonitor.monitor(this._element).subscribe(function (origin) {
              if (origin && _this515.panel.accordion) {
                _this515.panel.accordion._handleHeaderFocus(_this515);
              }
            });
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._parentChangeSubscription.unsubscribe();

            this._focusMonitor.stopMonitoring(this._element);
          }
        }]);

        return MatExpansionPanelHeader;
      }();

      MatExpansionPanelHeader.ɵfac = function MatExpansionPanelHeader_Factory(t) {
        return new (t || MatExpansionPanelHeader)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](MatExpansionPanel, 1), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_6__["FocusMonitor"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, 8), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_9__["ANIMATION_MODULE_TYPE"], 8));
      };

      MatExpansionPanelHeader.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineComponent"]({
        type: MatExpansionPanelHeader,
        selectors: [["mat-expansion-panel-header"]],
        hostAttrs: ["role", "button", 1, "mat-expansion-panel-header", "mat-focus-indicator"],
        hostVars: 15,
        hostBindings: function MatExpansionPanelHeader_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function MatExpansionPanelHeader_click_HostBindingHandler() {
              return ctx._toggle();
            })("keydown", function MatExpansionPanelHeader_keydown_HostBindingHandler($event) {
              return ctx._keydown($event);
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵattribute"]("id", ctx.panel._headerId)("tabindex", ctx.disabled ? -1 : 0)("aria-controls", ctx._getPanelId())("aria-expanded", ctx._isExpanded())("aria-disabled", ctx.panel.disabled);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵstyleProp"]("height", ctx._getHeaderHeight());

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵclassProp"]("mat-expanded", ctx._isExpanded())("mat-expansion-toggle-indicator-after", ctx._getTogglePosition() === "after")("mat-expansion-toggle-indicator-before", ctx._getTogglePosition() === "before")("_mat-animation-noopable", ctx._animationMode === "NoopAnimations");
          }
        },
        inputs: {
          expandedHeight: "expandedHeight",
          collapsedHeight: "collapsedHeight"
        },
        ngContentSelectors: _c4,
        decls: 5,
        vars: 1,
        consts: [[1, "mat-content"], ["class", "mat-expansion-indicator", 4, "ngIf"], [1, "mat-expansion-indicator"]],
        template: function MatExpansionPanelHeader_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵprojectionDef"](_c3);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "span", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵprojection"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵprojection"](2, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵprojection"](3, 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](4, MatExpansionPanelHeader_span_4_Template, 1, 1, "span", 1);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](4);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", ctx._showToggle());
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["NgIf"]],
        styles: [".mat-expansion-panel-header{display:flex;flex-direction:row;align-items:center;padding:0 24px;border-radius:inherit;transition:height 225ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel-header._mat-animation-noopable{transition:none}.mat-expansion-panel-header:focus,.mat-expansion-panel-header:hover{outline:none}.mat-expansion-panel-header.mat-expanded:focus,.mat-expansion-panel-header.mat-expanded:hover{background:inherit}.mat-expansion-panel-header:not([aria-disabled=true]){cursor:pointer}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before{flex-direction:row-reverse}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 16px 0 0}[dir=rtl] .mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 0 0 16px}.mat-content{display:flex;flex:1;flex-direction:row;overflow:hidden}.mat-expansion-panel-header-title,.mat-expansion-panel-header-description{display:flex;flex-grow:1;margin-right:16px}[dir=rtl] .mat-expansion-panel-header-title,[dir=rtl] .mat-expansion-panel-header-description{margin-right:0;margin-left:16px}.mat-expansion-panel-header-description{flex-grow:2}.mat-expansion-indicator::after{border-style:solid;border-width:0 2px 2px 0;content:\"\";display:inline-block;padding:3px;transform:rotate(45deg);vertical-align:middle}.cdk-high-contrast-active .mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true])::before,.cdk-high-contrast-active .mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true])::before,.cdk-high-contrast-active .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true])::before{top:0;left:0;right:0;bottom:0;position:absolute;box-sizing:border-box;pointer-events:none;border:3px solid;border-radius:4px;content:\"\"}\n"],
        encapsulation: 2,
        data: {
          animation: [matExpansionAnimations.indicatorRotate]
        },
        changeDetection: 0
      });

      MatExpansionPanelHeader.ctorParameters = function () {
        return [{
          type: MatExpansionPanel,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Host"]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
        }, {
          type: _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_6__["FocusMonitor"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
            args: [MAT_EXPANSION_PANEL_DEFAULT_OPTIONS]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
          }]
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
            args: [_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_9__["ANIMATION_MODULE_TYPE"]]
          }]
        }];
      };

      MatExpansionPanelHeader.propDecorators = {
        expandedHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }],
        collapsedHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](MatExpansionPanelHeader, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Component"],
          args: [{
            selector: 'mat-expansion-panel-header',
            template: "<span class=\"mat-content\">\n  <ng-content select=\"mat-panel-title\"></ng-content>\n  <ng-content select=\"mat-panel-description\"></ng-content>\n  <ng-content></ng-content>\n</span>\n<span [@indicatorRotate]=\"_getExpandedState()\" *ngIf=\"_showToggle()\"\n      class=\"mat-expansion-indicator\"></span>\n",
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewEncapsulation"].None,
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectionStrategy"].OnPush,
            animations: [matExpansionAnimations.indicatorRotate],
            host: {
              'class': 'mat-expansion-panel-header mat-focus-indicator',
              'role': 'button',
              '[attr.id]': 'panel._headerId',
              '[attr.tabindex]': 'disabled ? -1 : 0',
              '[attr.aria-controls]': '_getPanelId()',
              '[attr.aria-expanded]': '_isExpanded()',
              '[attr.aria-disabled]': 'panel.disabled',
              '[class.mat-expanded]': '_isExpanded()',
              '[class.mat-expansion-toggle-indicator-after]': "_getTogglePosition() === 'after'",
              '[class.mat-expansion-toggle-indicator-before]': "_getTogglePosition() === 'before'",
              '[class._mat-animation-noopable]': '_animationMode === "NoopAnimations"',
              '[style.height]': '_getHeaderHeight()',
              '(click)': '_toggle()',
              '(keydown)': '_keydown($event)'
            },
            styles: [".mat-expansion-panel-header{display:flex;flex-direction:row;align-items:center;padding:0 24px;border-radius:inherit;transition:height 225ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel-header._mat-animation-noopable{transition:none}.mat-expansion-panel-header:focus,.mat-expansion-panel-header:hover{outline:none}.mat-expansion-panel-header.mat-expanded:focus,.mat-expansion-panel-header.mat-expanded:hover{background:inherit}.mat-expansion-panel-header:not([aria-disabled=true]){cursor:pointer}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before{flex-direction:row-reverse}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 16px 0 0}[dir=rtl] .mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 0 0 16px}.mat-content{display:flex;flex:1;flex-direction:row;overflow:hidden}.mat-expansion-panel-header-title,.mat-expansion-panel-header-description{display:flex;flex-grow:1;margin-right:16px}[dir=rtl] .mat-expansion-panel-header-title,[dir=rtl] .mat-expansion-panel-header-description{margin-right:0;margin-left:16px}.mat-expansion-panel-header-description{flex-grow:2}.mat-expansion-indicator::after{border-style:solid;border-width:0 2px 2px 0;content:\"\";display:inline-block;padding:3px;transform:rotate(45deg);vertical-align:middle}.cdk-high-contrast-active .mat-expansion-panel .mat-expansion-panel-header.cdk-keyboard-focused:not([aria-disabled=true])::before,.cdk-high-contrast-active .mat-expansion-panel .mat-expansion-panel-header.cdk-program-focused:not([aria-disabled=true])::before,.cdk-high-contrast-active .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover:not([aria-disabled=true])::before{top:0;left:0;right:0;bottom:0;position:absolute;box-sizing:border-box;pointer-events:none;border:3px solid;border-radius:4px;content:\"\"}\n"]
          }]
        }], function () {
          return [{
            type: MatExpansionPanel,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Host"]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
          }, {
            type: _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_6__["FocusMonitor"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
              args: [MAT_EXPANSION_PANEL_DEFAULT_OPTIONS]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
            }]
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
              args: [_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_9__["ANIMATION_MODULE_TYPE"]]
            }]
          }];
        }, {
          expandedHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }],
          collapsedHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }]
        });
      })();
      /**
       * Description element of a `<mat-expansion-panel-header>`.
       */


      var MatExpansionPanelDescription = function MatExpansionPanelDescription() {
        _classCallCheck2(this, MatExpansionPanelDescription);
      };

      MatExpansionPanelDescription.ɵfac = function MatExpansionPanelDescription_Factory(t) {
        return new (t || MatExpansionPanelDescription)();
      };

      MatExpansionPanelDescription.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: MatExpansionPanelDescription,
        selectors: [["mat-panel-description"]],
        hostAttrs: [1, "mat-expansion-panel-header-description"]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](MatExpansionPanelDescription, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: 'mat-panel-description',
            host: {
              "class": 'mat-expansion-panel-header-description'
            }
          }]
        }], null, null);
      })();
      /**
       * Title element of a `<mat-expansion-panel-header>`.
       */


      var MatExpansionPanelTitle = function MatExpansionPanelTitle() {
        _classCallCheck2(this, MatExpansionPanelTitle);
      };

      MatExpansionPanelTitle.ɵfac = function MatExpansionPanelTitle_Factory(t) {
        return new (t || MatExpansionPanelTitle)();
      };

      MatExpansionPanelTitle.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: MatExpansionPanelTitle,
        selectors: [["mat-panel-title"]],
        hostAttrs: [1, "mat-expansion-panel-header-title"]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](MatExpansionPanelTitle, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: 'mat-panel-title',
            host: {
              "class": 'mat-expansion-panel-header-title'
            }
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Directive for a Material Design Accordion.
       */


      var MatAccordion = /*#__PURE__*/function (_angular_cdk_accordio2) {
        _inherits2(MatAccordion, _angular_cdk_accordio2);

        var _super203 = _createSuper(MatAccordion);

        function MatAccordion() {
          var _this516;

          _classCallCheck2(this, MatAccordion);

          _this516 = _super203.apply(this, arguments);
          /** Headers belonging to this accordion. */

          _this516._ownHeaders = new _angular_core__WEBPACK_IMPORTED_MODULE_3__["QueryList"]();
          _this516._hideToggle = false;
          /**
           * Display mode used for all expansion panels in the accordion. Currently two display
           * modes exist:
           *  default - a gutter-like spacing is placed around any expanded panel, placing the expanded
           *     panel at a different elevation from the rest of the accordion.
           *  flat - no spacing is placed around expanded panels, showing all panels at the same
           *     elevation.
           */

          _this516.displayMode = 'default';
          /** The position of the expansion indicator. */

          _this516.togglePosition = 'after';
          return _this516;
        }
        /** Whether the expansion indicator should be hidden. */


        _createClass2(MatAccordion, [{
          key: "hideToggle",
          get: function get() {
            return this._hideToggle;
          },
          set: function set(show) {
            this._hideToggle = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceBooleanProperty"])(show);
          }
        }, {
          key: "ngAfterContentInit",
          value: function ngAfterContentInit() {
            var _this517 = this;

            this._headers.changes.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_7__["startWith"])(this._headers)).subscribe(function (headers) {
              _this517._ownHeaders.reset(headers.filter(function (header) {
                return header.panel.accordion === _this517;
              }));

              _this517._ownHeaders.notifyOnChanges();
            });

            this._keyManager = new _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_6__["FocusKeyManager"](this._ownHeaders).withWrap().withHomeAndEnd();
          }
          /** Handles keyboard events coming in from the panel headers. */

        }, {
          key: "_handleHeaderKeydown",
          value: function _handleHeaderKeydown(event) {
            this._keyManager.onKeydown(event);
          }
        }, {
          key: "_handleHeaderFocus",
          value: function _handleHeaderFocus(header) {
            this._keyManager.updateActiveItem(header);
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            _get2(_getPrototypeOf2(MatAccordion.prototype), "ngOnDestroy", this).call(this);

            this._ownHeaders.destroy();
          }
        }]);

        return MatAccordion;
      }(_angular_cdk_accordion__WEBPACK_IMPORTED_MODULE_0__["CdkAccordion"]);

      MatAccordion.ɵfac = function MatAccordion_Factory(t) {
        return ɵMatAccordion_BaseFactory(t || MatAccordion);
      };

      MatAccordion.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: MatAccordion,
        selectors: [["mat-accordion"]],
        contentQueries: function MatAccordion_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵcontentQuery"](dirIndex, MatExpansionPanelHeader, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx._headers = _t);
          }
        },
        hostAttrs: [1, "mat-accordion"],
        hostVars: 2,
        hostBindings: function MatAccordion_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵclassProp"]("mat-accordion-multi", ctx.multi);
          }
        },
        inputs: {
          multi: "multi",
          displayMode: "displayMode",
          togglePosition: "togglePosition",
          hideToggle: "hideToggle"
        },
        exportAs: ["matAccordion"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵProvidersFeature"]([{
          provide: MAT_ACCORDION,
          useExisting: MatAccordion
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵInheritDefinitionFeature"]]
      });
      MatAccordion.propDecorators = {
        _headers: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChildren"],
          args: [MatExpansionPanelHeader, {
            descendants: true
          }]
        }],
        hideToggle: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }],
        displayMode: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }],
        togglePosition: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }]
      };

      var ɵMatAccordion_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetInheritedFactory"](MatAccordion);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](MatAccordion, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: 'mat-accordion',
            exportAs: 'matAccordion',
            inputs: ['multi'],
            providers: [{
              provide: MAT_ACCORDION,
              useExisting: MatAccordion
            }],
            host: {
              "class": 'mat-accordion',
              // Class binding which is only used by the test harness as there is no other
              // way for the harness to detect if multiple panel support is enabled.
              '[class.mat-accordion-multi]': 'this.multi'
            }
          }]
        }], null, {
          displayMode: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }],
          togglePosition: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }],
          hideToggle: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }],
          _headers: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChildren"],
            args: [MatExpansionPanelHeader, {
              descendants: true
            }]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var MatExpansionModule = function MatExpansionModule() {
        _classCallCheck2(this, MatExpansionModule);
      };

      MatExpansionModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineNgModule"]({
        type: MatExpansionModule
      });
      MatExpansionModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineInjector"]({
        factory: function MatExpansionModule_Factory(t) {
          return new (t || MatExpansionModule)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_4__["MatCommonModule"], _angular_cdk_accordion__WEBPACK_IMPORTED_MODULE_0__["CdkAccordionModule"], _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_1__["PortalModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵsetNgModuleScope"](MatExpansionModule, {
          declarations: function declarations() {
            return [MatAccordion, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelHeader, MatExpansionPanelTitle, MatExpansionPanelDescription, MatExpansionPanelContent];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_4__["MatCommonModule"], _angular_cdk_accordion__WEBPACK_IMPORTED_MODULE_0__["CdkAccordionModule"], _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_1__["PortalModule"]];
          },
          exports: function exports() {
            return [MatAccordion, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelHeader, MatExpansionPanelTitle, MatExpansionPanelDescription, MatExpansionPanelContent];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](MatExpansionModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["NgModule"],
          args: [{
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_4__["MatCommonModule"], _angular_cdk_accordion__WEBPACK_IMPORTED_MODULE_0__["CdkAccordionModule"], _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_1__["PortalModule"]],
            exports: [MatAccordion, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelHeader, MatExpansionPanelTitle, MatExpansionPanelDescription, MatExpansionPanelContent],
            declarations: [MatAccordion, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelHeader, MatExpansionPanelTitle, MatExpansionPanelDescription, MatExpansionPanelContent]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=expansion.js.map

      /***/

    },

    /***/
    "7HRe":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/scheduled/scheduled.js ***!
      \********************************************************************/

    /*! exports provided: scheduled */

    /***/
    function HRe(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "scheduled", function () {
        return scheduled;
      });
      /* harmony import */


      var _scheduleObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./scheduleObservable */
      "5B2Y");
      /* harmony import */


      var _schedulePromise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./schedulePromise */
      "4yVj");
      /* harmony import */


      var _scheduleArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./scheduleArray */
      "jZKg");
      /* harmony import */


      var _scheduleIterable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./scheduleIterable */
      "MBAA");
      /* harmony import */


      var _util_isInteropObservable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ../util/isInteropObservable */
      "QIAL");
      /* harmony import */


      var _util_isPromise__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! ../util/isPromise */
      "c2HN");
      /* harmony import */


      var _util_isArrayLike__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! ../util/isArrayLike */
      "I55L");
      /* harmony import */


      var _util_isIterable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! ../util/isIterable */
      "CMyj");

      function scheduled(input, scheduler) {
        if (input != null) {
          if (Object(_util_isInteropObservable__WEBPACK_IMPORTED_MODULE_4__["isInteropObservable"])(input)) {
            return Object(_scheduleObservable__WEBPACK_IMPORTED_MODULE_0__["scheduleObservable"])(input, scheduler);
          } else if (Object(_util_isPromise__WEBPACK_IMPORTED_MODULE_5__["isPromise"])(input)) {
            return Object(_schedulePromise__WEBPACK_IMPORTED_MODULE_1__["schedulePromise"])(input, scheduler);
          } else if (Object(_util_isArrayLike__WEBPACK_IMPORTED_MODULE_6__["isArrayLike"])(input)) {
            return Object(_scheduleArray__WEBPACK_IMPORTED_MODULE_2__["scheduleArray"])(input, scheduler);
          } else if (Object(_util_isIterable__WEBPACK_IMPORTED_MODULE_7__["isIterable"])(input) || typeof input === 'string') {
            return Object(_scheduleIterable__WEBPACK_IMPORTED_MODULE_3__["scheduleIterable"])(input, scheduler);
          }
        }

        throw new TypeError((input !== null && typeof input || input) + ' is not observable');
      } //# sourceMappingURL=scheduled.js.map

      /***/

    },

    /***/
    "7Hc7":
    /*!***************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/scheduler/asap.js ***!
      \***************************************************************/

    /*! exports provided: asapScheduler, asap */

    /***/
    function Hc7(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "asapScheduler", function () {
        return asapScheduler;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "asap", function () {
        return asap;
      });
      /* harmony import */


      var _AsapAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./AsapAction */
      "Pz8W");
      /* harmony import */


      var _AsapScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./AsapScheduler */
      "RUbi");

      var asapScheduler = new _AsapScheduler__WEBPACK_IMPORTED_MODULE_1__["AsapScheduler"](_AsapAction__WEBPACK_IMPORTED_MODULE_0__["AsapAction"]);
      var asap = asapScheduler; //# sourceMappingURL=asap.js.map

      /***/
    },

    /***/
    "7aV9":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/si.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function aV9(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Sinhalese [si]
      //! author : Sampath Sitinamaluwa : https://github.com/sampathsris
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        /*jshint -W100*/

        var si = moment.defineLocale('si', {
          months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),
          monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),
          weekdays: 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),
          weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),
          weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'a h:mm',
            LTS: 'a h:mm:ss',
            L: 'YYYY/MM/DD',
            LL: 'YYYY MMMM D',
            LLL: 'YYYY MMMM D, a h:mm',
            LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'
          },
          calendar: {
            sameDay: '[අද] LT[ට]',
            nextDay: '[හෙට] LT[ට]',
            nextWeek: 'dddd LT[ට]',
            lastDay: '[ඊයේ] LT[ට]',
            lastWeek: '[පසුගිය] dddd LT[ට]',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%sකින්',
            past: '%sකට පෙර',
            s: 'තත්පර කිහිපය',
            ss: 'තත්පර %d',
            m: 'මිනිත්තුව',
            mm: 'මිනිත්තු %d',
            h: 'පැය',
            hh: 'පැය %d',
            d: 'දිනය',
            dd: 'දින %d',
            M: 'මාසය',
            MM: 'මාස %d',
            y: 'වසර',
            yy: 'වසර %d'
          },
          dayOfMonthOrdinalParse: /\d{1,2} වැනි/,
          ordinal: function ordinal(number) {
            return number + ' වැනි';
          },
          meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,
          isPM: function isPM(input) {
            return input === 'ප.ව.' || input === 'පස් වරු';
          },
          meridiem: function meridiem(hours, minutes, isLower) {
            if (hours > 11) {
              return isLower ? 'ප.ව.' : 'පස් වරු';
            } else {
              return isLower ? 'පෙ.ව.' : 'පෙර වරු';
            }
          }
        });
        return si;
      });
      /***/

    },

    /***/
    "7hDX":
    /*!********************************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/date-time-picker.component.js ***!
      \********************************************************************************************/

    /*! exports provided: OWL_DTPICKER_SCROLL_STRATEGY, OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER_FACTORY, OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER, OwlDateTimeComponent */

    /***/
    function hDX(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OWL_DTPICKER_SCROLL_STRATEGY", function () {
        return OWL_DTPICKER_SCROLL_STRATEGY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER_FACTORY", function () {
        return OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER_FACTORY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER", function () {
        return OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OwlDateTimeComponent", function () {
        return OwlDateTimeComponent;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/cdk/overlay */
      "rDax");
      /* harmony import */


      var _dialog__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../dialog */
      "HAEn");
      /* harmony import */


      var _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./adapter/date-time-adapter.class */
      "1rjb");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @angular/cdk/portal */
      "+rOU");
      /* harmony import */


      var _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! @angular/cdk/keycodes */
      "FtGj");
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");
      /* harmony import */


      var _date_time_picker_container_component__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(
      /*! ./date-time-picker-container.component */
      "4km1");
      /* harmony import */


      var _adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(
      /*! ./adapter/date-time-format.class */
      "1FPZ");
      /* harmony import */


      var _date_time_class__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(
      /*! ./date-time.class */
      "T5M2");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");

      var __extends = undefined && undefined.__extends || function () {
        var _extendStatics3 = function extendStatics(d, b) {
          _extendStatics3 = Object.setPrototypeOf || {
            __proto__: []
          } instanceof Array && function (d, b) {
            d.__proto__ = b;
          } || function (d, b) {
            for (var p in b) {
              if (b.hasOwnProperty(p)) d[p] = b[p];
            }
          };

          return _extendStatics3(d, b);
        };

        return function (d, b) {
          _extendStatics3(d, b);

          function __() {
            this.constructor = d;
          }

          d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
        };
      }();

      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var __metadata = undefined && undefined.__metadata || function (k, v) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
      };

      var __param = undefined && undefined.__param || function (paramIndex, decorator) {
        return function (target, key) {
          decorator(target, key, paramIndex);
        };
      };

      var OWL_DTPICKER_SCROLL_STRATEGY = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('owl-dtpicker-scroll-strategy');

      function OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {
        return function () {
          return overlay.scrollStrategies.block();
        };
      }

      var OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER = {
        provide: OWL_DTPICKER_SCROLL_STRATEGY,
        deps: [_angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_1__["Overlay"]],
        useFactory: OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER_FACTORY
      };

      var OwlDateTimeComponent = function (_super) {
        __extends(OwlDateTimeComponent, _super);

        function OwlDateTimeComponent(overlay, viewContainerRef, dialogService, ngZone, changeDetector, dateTimeAdapter, defaultScrollStrategy, dateTimeFormats, document) {
          var _this = _super.call(this, dateTimeAdapter, dateTimeFormats) || this;

          _this.overlay = overlay;
          _this.viewContainerRef = viewContainerRef;
          _this.dialogService = dialogService;
          _this.ngZone = ngZone;
          _this.changeDetector = changeDetector;
          _this.dateTimeAdapter = dateTimeAdapter;
          _this.defaultScrollStrategy = defaultScrollStrategy;
          _this.dateTimeFormats = dateTimeFormats;
          _this.document = document;
          _this.backdropClass = [];
          _this.panelClass = [];
          _this._pickerType = 'both';
          _this._pickerMode = 'popup';
          _this._opened = false;
          _this.afterPickerClosed = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          _this.afterPickerOpen = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          _this.yearSelected = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          _this.monthSelected = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          _this.confirmSelectedChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          _this.disabledChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          _this.dtInputSub = rxjs__WEBPACK_IMPORTED_MODULE_11__["Subscription"].EMPTY;
          _this.hidePickerStreamSub = rxjs__WEBPACK_IMPORTED_MODULE_11__["Subscription"].EMPTY;
          _this.confirmSelectedStreamSub = rxjs__WEBPACK_IMPORTED_MODULE_11__["Subscription"].EMPTY;
          _this.pickerOpenedStreamSub = rxjs__WEBPACK_IMPORTED_MODULE_11__["Subscription"].EMPTY;
          _this.focusedElementBeforeOpen = null;
          _this._selecteds = [];
          return _this;
        }

        Object.defineProperty(OwlDateTimeComponent.prototype, "startAt", {
          get: function get() {
            if (this._startAt) {
              return this._startAt;
            }

            if (this._dtInput) {
              if (this._dtInput.selectMode === 'single') {
                return this._dtInput.value || null;
              } else if (this._dtInput.selectMode === 'range' || this._dtInput.selectMode === 'rangeFrom') {
                return this._dtInput.values[0] || null;
              } else if (this._dtInput.selectMode === 'rangeTo') {
                return this._dtInput.values[1] || null;
              }
            } else {
              return null;
            }
          },
          set: function set(date) {
            this._startAt = this.getValidDate(this.dateTimeAdapter.deserialize(date));
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeComponent.prototype, "pickerType", {
          get: function get() {
            return this._pickerType;
          },
          set: function set(val) {
            if (val !== this._pickerType) {
              this._pickerType = val;

              if (this._dtInput) {
                this._dtInput.formatNativeInputValue();
              }
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeComponent.prototype, "pickerMode", {
          get: function get() {
            return this._pickerMode;
          },
          set: function set(mode) {
            if (mode === 'popup') {
              this._pickerMode = mode;
            } else {
              this._pickerMode = 'dialog';
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeComponent.prototype, "disabled", {
          get: function get() {
            return this._disabled === undefined && this._dtInput ? this._dtInput.disabled : !!this._disabled;
          },
          set: function set(value) {
            value = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_7__["coerceBooleanProperty"])(value);

            if (value !== this._disabled) {
              this._disabled = value;
              this.disabledChange.next(value);
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeComponent.prototype, "opened", {
          get: function get() {
            return this._opened;
          },
          set: function set(val) {
            val ? this.open() : this.close();
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeComponent.prototype, "dtInput", {
          get: function get() {
            return this._dtInput;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeComponent.prototype, "selected", {
          get: function get() {
            return this._selected;
          },
          set: function set(value) {
            this._selected = value;
            this.changeDetector.markForCheck();
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeComponent.prototype, "selecteds", {
          get: function get() {
            return this._selecteds;
          },
          set: function set(values) {
            this._selecteds = values;
            this.changeDetector.markForCheck();
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeComponent.prototype, "minDateTime", {
          get: function get() {
            return this._dtInput && this._dtInput.min;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeComponent.prototype, "maxDateTime", {
          get: function get() {
            return this._dtInput && this._dtInput.max;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeComponent.prototype, "dateTimeFilter", {
          get: function get() {
            return this._dtInput && this._dtInput.dateTimeFilter;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeComponent.prototype, "selectMode", {
          get: function get() {
            return this._dtInput.selectMode;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeComponent.prototype, "isInSingleMode", {
          get: function get() {
            return this._dtInput.isInSingleMode;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeComponent.prototype, "isInRangeMode", {
          get: function get() {
            return this._dtInput.isInRangeMode;
          },
          enumerable: true,
          configurable: true
        });

        OwlDateTimeComponent.prototype.ngOnInit = function () {};

        OwlDateTimeComponent.prototype.ngOnDestroy = function () {
          this.close();
          this.dtInputSub.unsubscribe();
          this.disabledChange.complete();

          if (this.popupRef) {
            this.popupRef.dispose();
          }
        };

        OwlDateTimeComponent.prototype.registerInput = function (input) {
          var _this = this;

          if (this._dtInput) {
            throw Error('A Owl DateTimePicker can only be associated with a single input.');
          }

          this._dtInput = input;
          this.dtInputSub = this._dtInput.valueChange.subscribe(function (value) {
            if (Array.isArray(value)) {
              _this.selecteds = value;
            } else {
              _this.selected = value;
            }
          });
        };

        OwlDateTimeComponent.prototype.open = function () {
          var _this = this;

          if (this._opened || this.disabled) {
            return;
          }

          if (!this._dtInput) {
            throw Error('Attempted to open an DateTimePicker with no associated input.');
          }

          if (this.document) {
            this.focusedElementBeforeOpen = this.document.activeElement;
          }

          if (this.isInSingleMode) {
            this.selected = this._dtInput.value;
          } else if (this.isInRangeMode) {
            this.selecteds = this._dtInput.values;
          }

          if (this.selected && this.pickerType !== 'calendar' && this._startAt) {
            this.selected = this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(this.selected), this.dateTimeAdapter.getMonth(this.selected), this.dateTimeAdapter.getDate(this.selected), this.dateTimeAdapter.getHours(this._startAt), this.dateTimeAdapter.getMinutes(this._startAt), this.dateTimeAdapter.getSeconds(this._startAt));
          }

          this.pickerMode === 'dialog' ? this.openAsDialog() : this.openAsPopup();
          this.pickerContainer.picker = this;
          this.hidePickerStreamSub = this.pickerContainer.hidePickerStream.subscribe(function () {
            _this.close();
          });
          this.confirmSelectedStreamSub = this.pickerContainer.confirmSelectedStream.subscribe(function (event) {
            _this.confirmSelect(event);
          });
        };

        OwlDateTimeComponent.prototype.select = function (date) {
          if (Array.isArray(date)) {
            this.selecteds = date.slice();
          } else {
            this.selected = date;
          }

          if (this.pickerMode !== 'dialog' && this.pickerType === 'calendar' && (this.selectMode === 'single' && this.selected || this.selectMode === 'rangeFrom' && this.selecteds[0] || this.selectMode === 'rangeTo' && this.selecteds[1] || this.selectMode === 'range' && this.selecteds[0] && this.selecteds[1])) {
            this.confirmSelect();
          }
        };

        OwlDateTimeComponent.prototype.selectYear = function (normalizedYear) {
          this.yearSelected.emit(normalizedYear);
        };

        OwlDateTimeComponent.prototype.selectMonth = function (normalizedMonth) {
          this.monthSelected.emit(normalizedMonth);
        };

        OwlDateTimeComponent.prototype.close = function () {
          var _this = this;

          if (!this._opened) {
            return;
          }

          if (this.popupRef && this.popupRef.hasAttached()) {
            this.popupRef.detach();
          }

          if (this.pickerContainerPortal && this.pickerContainerPortal.isAttached) {
            this.pickerContainerPortal.detach();
          }

          if (this.hidePickerStreamSub) {
            this.hidePickerStreamSub.unsubscribe();
            this.hidePickerStreamSub = null;
          }

          if (this.confirmSelectedStreamSub) {
            this.confirmSelectedStreamSub.unsubscribe();
            this.confirmSelectedStreamSub = null;
          }

          if (this.pickerOpenedStreamSub) {
            this.pickerOpenedStreamSub.unsubscribe();
            this.pickerOpenedStreamSub = null;
          }

          if (this.dialogRef) {
            this.dialogRef.close();
            this.dialogRef = null;
          }

          var completeClose = function completeClose() {
            if (_this._opened) {
              _this._opened = false;

              _this.afterPickerClosed.emit(null);

              _this.focusedElementBeforeOpen = null;
            }
          };

          if (this.focusedElementBeforeOpen && typeof this.focusedElementBeforeOpen.focus === 'function') {
            this.focusedElementBeforeOpen.focus();
            setTimeout(completeClose);
          } else {
            completeClose();
          }
        };

        OwlDateTimeComponent.prototype.confirmSelect = function (event) {
          if (this.isInSingleMode) {
            var selected = this.selected || this.startAt || this.dateTimeAdapter.now();
            this.confirmSelectedChange.emit(selected);
          } else if (this.isInRangeMode) {
            this.confirmSelectedChange.emit(this.selecteds);
          }

          this.close();
          return;
        };

        OwlDateTimeComponent.prototype.openAsDialog = function () {
          var _this = this;

          this.dialogRef = this.dialogService.open(_date_time_picker_container_component__WEBPACK_IMPORTED_MODULE_8__["OwlDateTimeContainerComponent"], {
            autoFocus: false,
            backdropClass: ['cdk-overlay-dark-backdrop'].concat(Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_7__["coerceArray"])(this.backdropClass)),
            paneClass: ['owl-dt-dialog'].concat(Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_7__["coerceArray"])(this.panelClass)),
            viewContainerRef: this.viewContainerRef,
            scrollStrategy: this.scrollStrategy || this.defaultScrollStrategy()
          });
          this.pickerContainer = this.dialogRef.componentInstance;
          this.dialogRef.afterOpen().subscribe(function () {
            _this.afterPickerOpen.emit(null);

            _this._opened = true;
          });
          this.dialogRef.afterClosed().subscribe(function () {
            return _this.close();
          });
        };

        OwlDateTimeComponent.prototype.openAsPopup = function () {
          var _this = this;

          if (!this.pickerContainerPortal) {
            this.pickerContainerPortal = new _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_5__["ComponentPortal"](_date_time_picker_container_component__WEBPACK_IMPORTED_MODULE_8__["OwlDateTimeContainerComponent"], this.viewContainerRef);
          }

          if (!this.popupRef) {
            this.createPopup();
          }

          if (!this.popupRef.hasAttached()) {
            var componentRef = this.popupRef.attach(this.pickerContainerPortal);
            this.pickerContainer = componentRef.instance;
            this.ngZone.onStable.asObservable().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_12__["take"])(1)).subscribe(function () {
              _this.popupRef.updatePosition();
            });
            this.pickerOpenedStreamSub = this.pickerContainer.pickerOpenedStream.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_12__["take"])(1)).subscribe(function () {
              _this.afterPickerOpen.emit(null);

              _this._opened = true;
            });
          }
        };

        OwlDateTimeComponent.prototype.createPopup = function () {
          var _this = this;

          var overlayConfig = new _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_1__["OverlayConfig"]({
            positionStrategy: this.createPopupPositionStrategy(),
            hasBackdrop: true,
            backdropClass: ['cdk-overlay-transparent-backdrop'].concat(Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_7__["coerceArray"])(this.backdropClass)),
            scrollStrategy: this.scrollStrategy || this.defaultScrollStrategy(),
            panelClass: ['owl-dt-popup'].concat(Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_7__["coerceArray"])(this.panelClass))
          });
          this.popupRef = this.overlay.create(overlayConfig);
          Object(rxjs__WEBPACK_IMPORTED_MODULE_11__["merge"])(this.popupRef.backdropClick(), this.popupRef.detachments(), this.popupRef.keydownEvents().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_12__["filter"])(function (event) {
            return event.keyCode === _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_6__["ESCAPE"] || _this._dtInput && event.altKey && event.keyCode === _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_6__["UP_ARROW"];
          }))).subscribe(function () {
            return _this.close();
          });
        };

        OwlDateTimeComponent.prototype.createPopupPositionStrategy = function () {
          return this.overlay.position().flexibleConnectedTo(this._dtInput.elementRef).withTransformOriginOn('.owl-dt-container').withFlexibleDimensions(false).withPush(false).withPositions([{
            originX: 'start',
            originY: 'bottom',
            overlayX: 'start',
            overlayY: 'top'
          }, {
            originX: 'start',
            originY: 'top',
            overlayX: 'start',
            overlayY: 'bottom'
          }, {
            originX: 'end',
            originY: 'bottom',
            overlayX: 'end',
            overlayY: 'top'
          }, {
            originX: 'end',
            originY: 'top',
            overlayX: 'end',
            overlayY: 'bottom'
          }, {
            originX: 'start',
            originY: 'top',
            overlayX: 'start',
            overlayY: 'top',
            offsetY: -176
          }, {
            originX: 'start',
            originY: 'top',
            overlayX: 'start',
            overlayY: 'top',
            offsetY: -352
          }]);
        };

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object)], OwlDateTimeComponent.prototype, "backdropClass", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object)], OwlDateTimeComponent.prototype, "panelClass", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlDateTimeComponent.prototype, "startAt", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", String), __metadata("design:paramtypes", [String])], OwlDateTimeComponent.prototype, "pickerType", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", String), __metadata("design:paramtypes", [String])], OwlDateTimeComponent.prototype, "pickerMode", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Boolean), __metadata("design:paramtypes", [Boolean])], OwlDateTimeComponent.prototype, "disabled", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Boolean), __metadata("design:paramtypes", [Boolean])], OwlDateTimeComponent.prototype, "opened", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object)], OwlDateTimeComponent.prototype, "scrollStrategy", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", Object)], OwlDateTimeComponent.prototype, "afterPickerClosed", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", Object)], OwlDateTimeComponent.prototype, "afterPickerOpen", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", Object)], OwlDateTimeComponent.prototype, "yearSelected", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", Object)], OwlDateTimeComponent.prototype, "monthSelected", void 0);

        OwlDateTimeComponent = __decorate([__param(5, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __param(6, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"])(OWL_DTPICKER_SCROLL_STRATEGY)), __param(7, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __param(7, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"])(_adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_9__["OWL_DATE_TIME_FORMATS"])), __param(8, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __param(8, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"])(_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"])), __metadata("design:paramtypes", [_angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_1__["Overlay"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"], _dialog__WEBPACK_IMPORTED_MODULE_2__["OwlDialogService"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"], _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_3__["DateTimeAdapter"], Function, Object, Object])], OwlDateTimeComponent);

        OwlDateTimeComponent.ɵfac = function OwlDateTimeComponent_Factory(t) {
          return new (t || OwlDateTimeComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_1__["Overlay"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_dialog__WEBPACK_IMPORTED_MODULE_2__["OwlDialogService"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_3__["DateTimeAdapter"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](OWL_DTPICKER_SCROLL_STRATEGY), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_9__["OWL_DATE_TIME_FORMATS"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"], 8));
        };

        OwlDateTimeComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
          type: OwlDateTimeComponent,
          selectors: [["owl-date-time"]],
          inputs: {
            startAt: "startAt",
            pickerType: "pickerType",
            pickerMode: "pickerMode",
            disabled: "disabled",
            opened: "opened",
            backdropClass: "backdropClass",
            panelClass: "panelClass",
            scrollStrategy: "scrollStrategy"
          },
          outputs: {
            afterPickerClosed: "afterPickerClosed",
            afterPickerOpen: "afterPickerOpen",
            yearSelected: "yearSelected",
            monthSelected: "monthSelected"
          },
          exportAs: ["owlDateTime"],
          features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]],
          decls: 0,
          vars: 0,
          template: function OwlDateTimeComponent_Template(rf, ctx) {},
          styles: [""],
          changeDetection: 0
        });

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](OwlDateTimeComponent, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
            args: [{
              selector: 'owl-date-time',
              exportAs: 'owlDateTime',
              template: "",
              styles: [""],
              changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
              preserveWhitespaces: false
            }]
          }], function () {
            return [{
              type: _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_1__["Overlay"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
            }, {
              type: _dialog__WEBPACK_IMPORTED_MODULE_2__["OwlDialogService"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
            }, {
              type: _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_3__["DateTimeAdapter"],
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
              }]
            }, {
              type: Function,
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
                args: [OWL_DTPICKER_SCROLL_STRATEGY]
              }]
            }, {
              type: Object,
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
              }, {
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
                args: [_adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_9__["OWL_DATE_TIME_FORMATS"]]
              }]
            }, {
              type: Object,
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
              }, {
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
                args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
              }]
            }];
          }, {
            startAt: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            pickerType: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            pickerMode: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            disabled: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            opened: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            backdropClass: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            panelClass: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            scrollStrategy: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            afterPickerClosed: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            afterPickerOpen: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            yearSelected: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            monthSelected: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }]
          });
        })();

        return OwlDateTimeComponent;
      }(_date_time_class__WEBPACK_IMPORTED_MODULE_10__["OwlDateTime"]); //# sourceMappingURL=data:application/json;charset=utf-8;base64, 

      /***/

    },

    /***/
    "7o/Q":
    /*!***********************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/Subscriber.js ***!
      \***********************************************************/

    /*! exports provided: Subscriber, SafeSubscriber */

    /***/
    function oQ(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Subscriber", function () {
        return Subscriber;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SafeSubscriber", function () {
        return SafeSubscriber;
      });
      /* harmony import */


      var _util_isFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./util/isFunction */
      "n6bG");
      /* harmony import */


      var _Observer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./Observer */
      "gRHU");
      /* harmony import */


      var _Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./Subscription */
      "quSY");
      /* harmony import */


      var _internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ../internal/symbol/rxSubscriber */
      "2QA8");
      /* harmony import */


      var _config__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ./config */
      "2fFW");
      /* harmony import */


      var _util_hostReportError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! ./util/hostReportError */
      "NJ4a");

      var Subscriber = /*#__PURE__*/function (_Subscription__WEBPAC, _internal_symbol_rxSu) {
        _inherits2(Subscriber, _Subscription__WEBPAC);

        var _super204 = _createSuper(Subscriber);

        function Subscriber(destinationOrNext, error, complete) {
          var _this518;

          _classCallCheck2(this, Subscriber);

          _this518 = _super204.call(this);
          _this518.syncErrorValue = null;
          _this518.syncErrorThrown = false;
          _this518.syncErrorThrowable = false;
          _this518.isStopped = false;

          switch (arguments.length) {
            case 0:
              _this518.destination = _Observer__WEBPACK_IMPORTED_MODULE_1__["empty"];
              break;

            case 1:
              if (!destinationOrNext) {
                _this518.destination = _Observer__WEBPACK_IMPORTED_MODULE_1__["empty"];
                break;
              }

              if (typeof destinationOrNext === 'object') {
                if (destinationOrNext instanceof Subscriber) {
                  _this518.syncErrorThrowable = destinationOrNext.syncErrorThrowable;
                  _this518.destination = destinationOrNext;
                  destinationOrNext.add(_assertThisInitialized2(_this518));
                } else {
                  _this518.syncErrorThrowable = true;
                  _this518.destination = new SafeSubscriber(_assertThisInitialized2(_this518), destinationOrNext);
                }

                break;
              }

            default:
              _this518.syncErrorThrowable = true;
              _this518.destination = new SafeSubscriber(_assertThisInitialized2(_this518), destinationOrNext, error, complete);
              break;
          }

          return _this518;
        }

        _createClass2(Subscriber, [{
          key: _internal_symbol_rxSu,
          value: function value() {
            return this;
          }
        }, {
          key: "next",
          value: function next(value) {
            if (!this.isStopped) {
              this._next(value);
            }
          }
        }, {
          key: "error",
          value: function error(err) {
            if (!this.isStopped) {
              this.isStopped = true;

              this._error(err);
            }
          }
        }, {
          key: "complete",
          value: function complete() {
            if (!this.isStopped) {
              this.isStopped = true;

              this._complete();
            }
          }
        }, {
          key: "unsubscribe",
          value: function unsubscribe() {
            if (this.closed) {
              return;
            }

            this.isStopped = true;

            _get2(_getPrototypeOf2(Subscriber.prototype), "unsubscribe", this).call(this);
          }
        }, {
          key: "_next",
          value: function _next(value) {
            this.destination.next(value);
          }
        }, {
          key: "_error",
          value: function _error(err) {
            this.destination.error(err);
            this.unsubscribe();
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.destination.complete();
            this.unsubscribe();
          }
        }, {
          key: "_unsubscribeAndRecycle",
          value: function _unsubscribeAndRecycle() {
            var _parentOrParents = this._parentOrParents;
            this._parentOrParents = null;
            this.unsubscribe();
            this.closed = false;
            this.isStopped = false;
            this._parentOrParents = _parentOrParents;
            return this;
          }
        }], [{
          key: "create",
          value: function create(next, error, complete) {
            var subscriber = new Subscriber(next, error, complete);
            subscriber.syncErrorThrowable = false;
            return subscriber;
          }
        }]);

        return Subscriber;
      }(_Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"], _internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_3__["rxSubscriber"]);

      var SafeSubscriber = /*#__PURE__*/function (_Subscriber) {
        _inherits2(SafeSubscriber, _Subscriber);

        var _super205 = _createSuper(SafeSubscriber);

        function SafeSubscriber(_parentSubscriber, observerOrNext, error, complete) {
          var _this519;

          _classCallCheck2(this, SafeSubscriber);

          _this519 = _super205.call(this);
          _this519._parentSubscriber = _parentSubscriber;
          var next;

          var context = _assertThisInitialized2(_this519);

          if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_0__["isFunction"])(observerOrNext)) {
            next = observerOrNext;
          } else if (observerOrNext) {
            next = observerOrNext.next;
            error = observerOrNext.error;
            complete = observerOrNext.complete;

            if (observerOrNext !== _Observer__WEBPACK_IMPORTED_MODULE_1__["empty"]) {
              context = Object.create(observerOrNext);

              if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_0__["isFunction"])(context.unsubscribe)) {
                _this519.add(context.unsubscribe.bind(context));
              }

              context.unsubscribe = _this519.unsubscribe.bind(_assertThisInitialized2(_this519));
            }
          }

          _this519._context = context;
          _this519._next = next;
          _this519._error = error;
          _this519._complete = complete;
          return _this519;
        }

        _createClass2(SafeSubscriber, [{
          key: "next",
          value: function next(value) {
            if (!this.isStopped && this._next) {
              var _parentSubscriber = this._parentSubscriber;

              if (!_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
                this.__tryOrUnsub(this._next, value);
              } else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) {
                this.unsubscribe();
              }
            }
          }
        }, {
          key: "error",
          value: function error(err) {
            if (!this.isStopped) {
              var _parentSubscriber = this._parentSubscriber;
              var useDeprecatedSynchronousErrorHandling = _config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling;

              if (this._error) {
                if (!useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
                  this.__tryOrUnsub(this._error, err);

                  this.unsubscribe();
                } else {
                  this.__tryOrSetError(_parentSubscriber, this._error, err);

                  this.unsubscribe();
                }
              } else if (!_parentSubscriber.syncErrorThrowable) {
                this.unsubscribe();

                if (useDeprecatedSynchronousErrorHandling) {
                  throw err;
                }

                Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_5__["hostReportError"])(err);
              } else {
                if (useDeprecatedSynchronousErrorHandling) {
                  _parentSubscriber.syncErrorValue = err;
                  _parentSubscriber.syncErrorThrown = true;
                } else {
                  Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_5__["hostReportError"])(err);
                }

                this.unsubscribe();
              }
            }
          }
        }, {
          key: "complete",
          value: function complete() {
            var _this520 = this;

            if (!this.isStopped) {
              var _parentSubscriber = this._parentSubscriber;

              if (this._complete) {
                var wrappedComplete = function wrappedComplete() {
                  return _this520._complete.call(_this520._context);
                };

                if (!_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
                  this.__tryOrUnsub(wrappedComplete);

                  this.unsubscribe();
                } else {
                  this.__tryOrSetError(_parentSubscriber, wrappedComplete);

                  this.unsubscribe();
                }
              } else {
                this.unsubscribe();
              }
            }
          }
        }, {
          key: "__tryOrUnsub",
          value: function __tryOrUnsub(fn, value) {
            try {
              fn.call(this._context, value);
            } catch (err) {
              this.unsubscribe();

              if (_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling) {
                throw err;
              } else {
                Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_5__["hostReportError"])(err);
              }
            }
          }
        }, {
          key: "__tryOrSetError",
          value: function __tryOrSetError(parent, fn, value) {
            if (!_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling) {
              throw new Error('bad call');
            }

            try {
              fn.call(this._context, value);
            } catch (err) {
              if (_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling) {
                parent.syncErrorValue = err;
                parent.syncErrorThrown = true;
                return true;
              } else {
                Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_5__["hostReportError"])(err);
                return true;
              }
            }

            return false;
          }
        }, {
          key: "_unsubscribe",
          value: function _unsubscribe() {
            var _parentSubscriber = this._parentSubscriber;
            this._context = null;
            this._parentSubscriber = null;

            _parentSubscriber.unsubscribe();
          }
        }]);

        return SafeSubscriber;
      }(Subscriber); //# sourceMappingURL=Subscriber.js.map

      /***/

    },

    /***/
    "7ve7":
    /*!*****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/scheduler/Action.js ***!
      \*****************************************************************/

    /*! exports provided: Action */

    /***/
    function ve7(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Action", function () {
        return Action;
      });
      /* harmony import */


      var _Subscription__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscription */
      "quSY");

      var Action = /*#__PURE__*/function (_Subscription__WEBPAC2) {
        _inherits2(Action, _Subscription__WEBPAC2);

        var _super206 = _createSuper(Action);

        function Action(scheduler, work) {
          _classCallCheck2(this, Action);

          return _super206.call(this);
        }

        _createClass2(Action, [{
          key: "schedule",
          value: function schedule(state) {
            var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
            return this;
          }
        }]);

        return Action;
      }(_Subscription__WEBPACK_IMPORTED_MODULE_0__["Subscription"]); //# sourceMappingURL=Action.js.map

      /***/

    },

    /***/
    "7wxJ":
    /*!*********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/combineAll.js ***!
      \*********************************************************************/

    /*! exports provided: combineAll */

    /***/
    function wxJ(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "combineAll", function () {
        return combineAll;
      });
      /* harmony import */


      var _observable_combineLatest__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../observable/combineLatest */
      "itXk");

      function combineAll(project) {
        return function (source) {
          return source.lift(new _observable_combineLatest__WEBPACK_IMPORTED_MODULE_0__["CombineLatestOperator"](project));
        };
      } //# sourceMappingURL=combineAll.js.map

      /***/

    },

    /***/
    "8/+R":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/pa-in.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function R(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Punjabi (India) [pa-in]
      //! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var symbolMap = {
          1: '੧',
          2: '੨',
          3: '੩',
          4: '੪',
          5: '੫',
          6: '੬',
          7: '੭',
          8: '੮',
          9: '੯',
          0: '੦'
        },
            numberMap = {
          '੧': '1',
          '੨': '2',
          '੩': '3',
          '੪': '4',
          '੫': '5',
          '੬': '6',
          '੭': '7',
          '੮': '8',
          '੯': '9',
          '੦': '0'
        };
        var paIn = moment.defineLocale('pa-in', {
          // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.
          months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),
          monthsShort: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),
          weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),
          weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
          weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
          longDateFormat: {
            LT: 'A h:mm ਵਜੇ',
            LTS: 'A h:mm:ss ਵਜੇ',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm ਵਜੇ',
            LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'
          },
          calendar: {
            sameDay: '[ਅਜ] LT',
            nextDay: '[ਕਲ] LT',
            nextWeek: '[ਅਗਲਾ] dddd, LT',
            lastDay: '[ਕਲ] LT',
            lastWeek: '[ਪਿਛਲੇ] dddd, LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s ਵਿੱਚ',
            past: '%s ਪਿਛਲੇ',
            s: 'ਕੁਝ ਸਕਿੰਟ',
            ss: '%d ਸਕਿੰਟ',
            m: 'ਇਕ ਮਿੰਟ',
            mm: '%d ਮਿੰਟ',
            h: 'ਇੱਕ ਘੰਟਾ',
            hh: '%d ਘੰਟੇ',
            d: 'ਇੱਕ ਦਿਨ',
            dd: '%d ਦਿਨ',
            M: 'ਇੱਕ ਮਹੀਨਾ',
            MM: '%d ਮਹੀਨੇ',
            y: 'ਇੱਕ ਸਾਲ',
            yy: '%d ਸਾਲ'
          },
          preparse: function preparse(string) {
            return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {
              return numberMap[match];
            });
          },
          postformat: function postformat(string) {
            return string.replace(/\d/g, function (match) {
              return symbolMap[match];
            });
          },
          // Punjabi notation for meridiems are quite fuzzy in practice. While there exists
          // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.
          meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === 'ਰਾਤ') {
              return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'ਸਵੇਰ') {
              return hour;
            } else if (meridiem === 'ਦੁਪਹਿਰ') {
              return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'ਸ਼ਾਮ') {
              return hour + 12;
            }
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 4) {
              return 'ਰਾਤ';
            } else if (hour < 10) {
              return 'ਸਵੇਰ';
            } else if (hour < 17) {
              return 'ਦੁਪਹਿਰ';
            } else if (hour < 20) {
              return 'ਸ਼ਾਮ';
            } else {
              return 'ਰਾਤ';
            }
          },
          week: {
            dow: 0,
            // Sunday is the first day of the week.
            doy: 6 // The week that contains Jan 6th is the first week of the year.

          }
        });
        return paIn;
      });
      /***/

    },

    /***/
    "81Wt":
    /*!***************************************************!*\
      !*** ./node_modules/aws-sdk/lib/state_machine.js ***!
      \***************************************************/

    /*! no static exports found */

    /***/
    function Wt(module, exports) {
      function AcceptorStateMachine(states, state) {
        this.currentState = state || null;
        this.states = states || {};
      }

      AcceptorStateMachine.prototype.runTo = function runTo(finalState, done, bindObject, inputError) {
        if (typeof finalState === 'function') {
          inputError = bindObject;
          bindObject = done;
          done = finalState;
          finalState = null;
        }

        var self = this;
        var state = self.states[self.currentState];
        state.fn.call(bindObject || self, inputError, function (err) {
          if (err) {
            if (state.fail) self.currentState = state.fail;else return done ? done.call(bindObject, err) : null;
          } else {
            if (state.accept) self.currentState = state.accept;else return done ? done.call(bindObject) : null;
          }

          if (self.currentState === finalState) {
            return done ? done.call(bindObject, err) : null;
          }

          self.runTo(finalState, done, bindObject, err);
        });
      };

      AcceptorStateMachine.prototype.addState = function addState(name, acceptState, failState, fn) {
        if (typeof acceptState === 'function') {
          fn = acceptState;
          acceptState = null;
          failState = null;
        } else if (typeof failState === 'function') {
          fn = failState;
          failState = null;
        }

        if (!this.currentState) this.currentState = name;
        this.states[name] = {
          accept: acceptState,
          fail: failState,
          fn: fn
        };
        return this;
      };
      /**
       * @api private
       */


      module.exports = AcceptorStateMachine;
      /***/
    },

    /***/
    "85ns":
    /*!*************************************************************************************************!*\
      !*** ./node_modules/@ngx-formly/bootstrap/__ivy_ngcc__/fesm2015/ngx-formly-bootstrap-addons.js ***!
      \*************************************************************************************************/

    /*! exports provided: FormlyBootstrapAddonsModule, ɵb, ɵa */

    /***/
    function ns(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormlyBootstrapAddonsModule", function () {
        return FormlyBootstrapAddonsModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵb", function () {
        return addonsExtension;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵa", function () {
        return FormlyWrapperAddons;
      });
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_forms__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/forms */
      "3Pt+");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _ngx_formly_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @ngx-formly/core */
      "0FS3");
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      function FormlyWrapperAddons_div_1_i_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](0, "i", 8);
        }

        if (rf & 2) {
          var ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngClass", ctx_r3.to.addonLeft["class"]);
        }
      }

      function FormlyWrapperAddons_div_1_span_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "span", 9);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](ctx_r4.to.addonLeft.text);
        }
      }

      var _c0 = function _c0(a0) {
        return {
          cursor: a0
        };
      };

      function FormlyWrapperAddons_div_1_Template(rf, ctx) {
        if (rf & 1) {
          var _r6 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 5);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("click", function FormlyWrapperAddons_div_1_Template_div_click_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r6);

            var ctx_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]();

            return ctx_r5.addonLeftClick($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](1, FormlyWrapperAddons_div_1_i_1_Template, 1, 1, "i", 6);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](2, FormlyWrapperAddons_div_1_span_2_Template, 2, 1, "span", 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngStyle", _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵpureFunction1"](3, _c0, ctx_r0.to.addonLeft.onClick ? "pointer" : "inherit"));

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r0.to.addonLeft["class"]);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r0.to.addonLeft.text);
        }
      }

      function FormlyWrapperAddons_div_5_i_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](0, "i", 8);
        }

        if (rf & 2) {
          var ctx_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngClass", ctx_r7.to.addonRight["class"]);
        }
      }

      function FormlyWrapperAddons_div_5_span_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "span", 9);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r8 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](ctx_r8.to.addonRight.text);
        }
      }

      function FormlyWrapperAddons_div_5_Template(rf, ctx) {
        if (rf & 1) {
          var _r10 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 10);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("click", function FormlyWrapperAddons_div_5_Template_div_click_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r10);

            var ctx_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]();

            return ctx_r9.addonRightClick($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](1, FormlyWrapperAddons_div_5_i_1_Template, 1, 1, "i", 6);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](2, FormlyWrapperAddons_div_5_span_2_Template, 2, 1, "span", 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngStyle", _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵpureFunction1"](3, _c0, ctx_r2.to.addonRight.onClick ? "pointer" : "inherit"));

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r2.to.addonRight["class"]);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r2.to.addonRight.text);
        }
      }

      var FormlyWrapperAddons = /*#__PURE__*/function (_ngx_formly_core__WEB) {
        _inherits2(FormlyWrapperAddons, _ngx_formly_core__WEB);

        var _super207 = _createSuper(FormlyWrapperAddons);

        function FormlyWrapperAddons() {
          _classCallCheck2(this, FormlyWrapperAddons);

          return _super207.apply(this, arguments);
        }

        _createClass2(FormlyWrapperAddons, [{
          key: "addonRightClick",
          value:
          /**
           * @param {?} $event
           * @return {?}
           */
          function addonRightClick($event) {
            if (this.to.addonRight.onClick) {
              this.to.addonRight.onClick(this.to, this, $event);
            }
          }
          /**
           * @param {?} $event
           * @return {?}
           */

        }, {
          key: "addonLeftClick",
          value: function addonLeftClick($event) {
            if (this.to.addonLeft.onClick) {
              this.to.addonLeft.onClick(this.to, this, $event);
            }
          }
        }]);

        return FormlyWrapperAddons;
      }(_ngx_formly_core__WEBPACK_IMPORTED_MODULE_3__["FieldWrapper"]);

      FormlyWrapperAddons.ɵfac = function FormlyWrapperAddons_Factory(t) {
        return ɵFormlyWrapperAddons_BaseFactory(t || FormlyWrapperAddons);
      };

      FormlyWrapperAddons.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineComponent"]({
        type: FormlyWrapperAddons,
        selectors: [["formly-wrapper-addons"]],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵInheritDefinitionFeature"]],
        decls: 6,
        vars: 2,
        consts: [[1, "input-group"], ["class", "input-group-prepend", 3, "ngStyle", "click", 4, "ngIf"], [1, "input-addons"], ["fieldComponent", ""], ["class", "input-group-append", 3, "ngStyle", "click", 4, "ngIf"], [1, "input-group-prepend", 3, "ngStyle", "click"], ["class", "input-group-text", 3, "ngClass", 4, "ngIf"], ["class", "input-group-text", 4, "ngIf"], [1, "input-group-text", 3, "ngClass"], [1, "input-group-text"], [1, "input-group-append", 3, "ngStyle", "click"]],
        template: function FormlyWrapperAddons_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](1, FormlyWrapperAddons_div_1_Template, 3, 5, "div", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](2, "div", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainer"](3, null, 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](5, FormlyWrapperAddons_div_5_Template, 3, 5, "div", 4);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx.to.addonLeft);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](4);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx.to.addonRight);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_0__["NgStyle"], _angular_common__WEBPACK_IMPORTED_MODULE_0__["NgClass"]],
        styles: ["[_nghost-%COMP%]     .input-group>:not(:first-child) .form-control{border-top-left-radius:0;border-bottom-left-radius:0}[_nghost-%COMP%]     .input-group>:not(:last-child) .form-control{border-top-right-radius:0;border-bottom-right-radius:0}[_nghost-%COMP%]     .input-group>.input-addons{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}"]
      });

      var ɵFormlyWrapperAddons_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetInheritedFactory"](FormlyWrapperAddons);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](FormlyWrapperAddons, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Component"],
          args: [{
            selector: 'formly-wrapper-addons',
            template: "<div class=\"input-group\">\n  <div class=\"input-group-prepend\" *ngIf=\"to.addonLeft\" [ngStyle]=\"{cursor: to.addonLeft.onClick ? 'pointer' : 'inherit'}\"\n    (click)=\"addonLeftClick($event)\">\n    <i class=\"input-group-text\" [ngClass]=\"to.addonLeft.class\" *ngIf=\"to.addonLeft.class\"></i>\n    <span *ngIf=\"to.addonLeft.text\" class=\"input-group-text\">{{ to.addonLeft.text }}</span>\n  </div>\n  <div class=\"input-addons\">\n    <ng-container #fieldComponent></ng-container>\n  </div>\n  <div class=\"input-group-append\" *ngIf=\"to.addonRight\" [ngStyle]=\"{cursor: to.addonRight.onClick ? 'pointer' : 'inherit'}\"\n    (click)=\"addonRightClick($event)\">\n    <i class=\"input-group-text\" [ngClass]=\"to.addonRight.class\" *ngIf=\"to.addonRight.class\"></i>\n    <span *ngIf=\"to.addonRight.text\" class=\"input-group-text\">{{ to.addonRight.text }}</span>\n  </div>\n</div>\n",
            styles: [":host ::ng-deep .input-group>:not(:first-child) .form-control{border-top-left-radius:0;border-bottom-left-radius:0}:host ::ng-deep .input-group>:not(:last-child) .form-control{border-top-right-radius:0;border-bottom-right-radius:0}:host ::ng-deep .input-group>.input-addons{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}"]
          }]
        }], null, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} field
       * @return {?}
       */


      function addonsExtension(field) {
        if (!field.templateOptions || field.wrappers && field.wrappers.indexOf('addons') !== -1) {
          return;
        }

        if (field.templateOptions.addonLeft || field.templateOptions.addonRight) {
          field.wrappers = [].concat(_toConsumableArray(field.wrappers || []), ['addons']);
        }
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var FormlyBootstrapAddonsModule = function FormlyBootstrapAddonsModule() {
        _classCallCheck2(this, FormlyBootstrapAddonsModule);
      };

      FormlyBootstrapAddonsModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineNgModule"]({
        type: FormlyBootstrapAddonsModule
      });
      FormlyBootstrapAddonsModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineInjector"]({
        factory: function FormlyBootstrapAddonsModule_Factory(t) {
          return new (t || FormlyBootstrapAddonsModule)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_0__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_1__["ReactiveFormsModule"], _ngx_formly_core__WEBPACK_IMPORTED_MODULE_3__["FormlyModule"].forChild({
          wrappers: [{
            name: 'addons',
            component: FormlyWrapperAddons
          }],
          extensions: [{
            name: 'addons',
            extension: {
              postPopulate: addonsExtension
            }
          }]
        })]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵsetNgModuleScope"](FormlyBootstrapAddonsModule, {
          declarations: function declarations() {
            return [FormlyWrapperAddons];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_0__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_1__["ReactiveFormsModule"], _ngx_formly_core__WEBPACK_IMPORTED_MODULE_3__["FormlyModule"]];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](FormlyBootstrapAddonsModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["NgModule"],
          args: [{
            declarations: [FormlyWrapperAddons],
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_1__["ReactiveFormsModule"], _ngx_formly_core__WEBPACK_IMPORTED_MODULE_3__["FormlyModule"].forChild({
              wrappers: [{
                name: 'addons',
                component: FormlyWrapperAddons
              }],
              extensions: [{
                name: 'addons',
                extension: {
                  postPopulate: addonsExtension
                }
              }]
            })]
          }]
        }], null, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */
      //# sourceMappingURL=ngx-formly-bootstrap-addons.js.map

      /***/

    },

    /***/
    "8LU1":
    /*!********************************************************!*\
      !*** ./node_modules/@angular/cdk/fesm2015/coercion.js ***!
      \********************************************************/

    /*! exports provided: _isNumberValue, coerceArray, coerceBooleanProperty, coerceCssPixelValue, coerceElement, coerceNumberProperty, coerceStringArray */

    /***/
    function LU1(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "_isNumberValue", function () {
        return _isNumberValue;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "coerceArray", function () {
        return coerceArray;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "coerceBooleanProperty", function () {
        return coerceBooleanProperty;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "coerceCssPixelValue", function () {
        return coerceCssPixelValue;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "coerceElement", function () {
        return coerceElement;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "coerceNumberProperty", function () {
        return coerceNumberProperty;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "coerceStringArray", function () {
        return coerceStringArray;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Coerces a data-bound value (typically a string) to a boolean. */


      function coerceBooleanProperty(value) {
        return value != null && "".concat(value) !== 'false';
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function coerceNumberProperty(value) {
        var fallbackValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
        return _isNumberValue(value) ? Number(value) : fallbackValue;
      }
      /**
       * Whether the provided value is considered a number.
       * @docs-private
       */


      function _isNumberValue(value) {
        // parseFloat(value) handles most of the cases we're interested in (it treats null, empty string,
        // and other non-number values as NaN, where Number just uses 0) but it considers the string
        // '123hello' to be a valid number. Therefore we also check if Number(value) is NaN.
        return !isNaN(parseFloat(value)) && !isNaN(Number(value));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function coerceArray(value) {
        return Array.isArray(value) ? value : [value];
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Coerces a value to a CSS pixel value. */


      function coerceCssPixelValue(value) {
        if (value == null) {
          return '';
        }

        return typeof value === 'string' ? value : "".concat(value, "px");
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Coerces an ElementRef or an Element into an element.
       * Useful for APIs that can accept either a ref or the native element itself.
       */


      function coerceElement(elementOrRef) {
        return elementOrRef instanceof _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"] ? elementOrRef.nativeElement : elementOrRef;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Coerces a value to an array of trimmed non-empty strings.
       * Any input that is not an array, `null` or `undefined` will be turned into a string
       * via `toString()` and subsequently split with the given separator.
       * `null` and `undefined` will result in an empty array.
       * This results in the following outcomes:
       * - `null` -&gt; `[]`
       * - `[null]` -&gt; `["null"]`
       * - `["a", "b ", " "]` -&gt; `["a", "b"]`
       * - `[1, [2, 3]]` -&gt; `["1", "2,3"]`
       * - `[{ a: 0 }]` -&gt; `["[object Object]"]`
       * - `{ a: 0 }` -&gt; `["[object", "Object]"]`
       *
       * Useful for defining CSS classes or table columns.
       * @param value the value to coerce into an array of strings
       * @param separator split-separator if value isn't an array
       */


      function coerceStringArray(value) {
        var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : /\s+/;
        var result = [];

        if (value != null) {
          var sourceValues = Array.isArray(value) ? value : "".concat(value).split(separator);

          var _iterator58 = _createForOfIteratorHelper(sourceValues),
              _step57;

          try {
            for (_iterator58.s(); !(_step57 = _iterator58.n()).done;) {
              var sourceValue = _step57.value;
              var trimmedString = "".concat(sourceValue).trim();

              if (trimmedString) {
                result.push(trimmedString);
              }
            }
          } catch (err) {
            _iterator58.e(err);
          } finally {
            _iterator58.f();
          }
        }

        return result;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      //# sourceMappingURL=coercion.js.map

      /***/

    },

    /***/
    "8Qeq":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/canReportError.js ***!
      \********************************************************************/

    /*! exports provided: canReportError */

    /***/
    function Qeq(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "canReportError", function () {
        return canReportError;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");

      function canReportError(observer) {
        while (observer) {
          var _observer = observer,
              closed = _observer.closed,
              destination = _observer.destination,
              isStopped = _observer.isStopped;

          if (closed || isStopped) {
            return false;
          } else if (destination && destination instanceof _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]) {
            observer = destination;
          } else {
            observer = null;
          }
        }

        return true;
      } //# sourceMappingURL=canReportError.js.map

      /***/

    },

    /***/
    "8loY":
    /*!*************************************************!*\
      !*** ./node_modules/aws-sdk/lib/credentials.js ***!
      \*************************************************/

    /*! no static exports found */

    /***/
    function loY(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ./core */
      "QsWE");
      /**
       * Represents your AWS security credentials, specifically the
       * {accessKeyId}, {secretAccessKey}, and optional {sessionToken}.
       * Creating a `Credentials` object allows you to pass around your
       * security information to configuration and service objects.
       *
       * Note that this class typically does not need to be constructed manually,
       * as the {AWS.Config} and {AWS.Service} classes both accept simple
       * options hashes with the three keys. These structures will be converted
       * into Credentials objects automatically.
       *
       * ## Expiring and Refreshing Credentials
       *
       * Occasionally credentials can expire in the middle of a long-running
       * application. In this case, the SDK will automatically attempt to
       * refresh the credentials from the storage location if the Credentials
       * class implements the {refresh} method.
       *
       * If you are implementing a credential storage location, you
       * will want to create a subclass of the `Credentials` class and
       * override the {refresh} method. This method allows credentials to be
       * retrieved from the backing store, be it a file system, database, or
       * some network storage. The method should reset the credential attributes
       * on the object.
       *
       * @!attribute expired
       *   @return [Boolean] whether the credentials have been expired and
       *     require a refresh. Used in conjunction with {expireTime}.
       * @!attribute expireTime
       *   @return [Date] a time when credentials should be considered expired. Used
       *     in conjunction with {expired}.
       * @!attribute accessKeyId
       *   @return [String] the AWS access key ID
       * @!attribute secretAccessKey
       *   @return [String] the AWS secret access key
       * @!attribute sessionToken
       *   @return [String] an optional AWS session token
       */


      AWS.Credentials = AWS.util.inherit({
        /**
         * A credentials object can be created using positional arguments or an options
         * hash.
         *
         * @overload AWS.Credentials(accessKeyId, secretAccessKey, sessionToken=null)
         *   Creates a Credentials object with a given set of credential information
         *   as positional arguments.
         *   @param accessKeyId [String] the AWS access key ID
         *   @param secretAccessKey [String] the AWS secret access key
         *   @param sessionToken [String] the optional AWS session token
         *   @example Create a credentials object with AWS credentials
         *     var creds = new AWS.Credentials('akid', 'secret', 'session');
         * @overload AWS.Credentials(options)
         *   Creates a Credentials object with a given set of credential information
         *   as an options hash.
         *   @option options accessKeyId [String] the AWS access key ID
         *   @option options secretAccessKey [String] the AWS secret access key
         *   @option options sessionToken [String] the optional AWS session token
         *   @example Create a credentials object with AWS credentials
         *     var creds = new AWS.Credentials({
         *       accessKeyId: 'akid', secretAccessKey: 'secret', sessionToken: 'session'
         *     });
         */
        constructor: function Credentials() {
          // hide secretAccessKey from being displayed with util.inspect
          AWS.util.hideProperties(this, ['secretAccessKey']);
          this.expired = false;
          this.expireTime = null;
          this.refreshCallbacks = [];

          if (arguments.length === 1 && typeof arguments[0] === 'object') {
            var creds = arguments[0].credentials || arguments[0];
            this.accessKeyId = creds.accessKeyId;
            this.secretAccessKey = creds.secretAccessKey;
            this.sessionToken = creds.sessionToken;
          } else {
            this.accessKeyId = arguments[0];
            this.secretAccessKey = arguments[1];
            this.sessionToken = arguments[2];
          }
        },

        /**
         * @return [Integer] the number of seconds before {expireTime} during which
         *   the credentials will be considered expired.
         */
        expiryWindow: 15,

        /**
         * @return [Boolean] whether the credentials object should call {refresh}
         * @note Subclasses should override this method to provide custom refresh
         *   logic.
         */
        needsRefresh: function needsRefresh() {
          var currentTime = AWS.util.date.getDate().getTime();
          var adjustedTime = new Date(currentTime + this.expiryWindow * 1000);

          if (this.expireTime && adjustedTime > this.expireTime) {
            return true;
          } else {
            return this.expired || !this.accessKeyId || !this.secretAccessKey;
          }
        },

        /**
         * Gets the existing credentials, refreshing them if they are not yet loaded
         * or have expired. Users should call this method before using {refresh},
         * as this will not attempt to reload credentials when they are already
         * loaded into the object.
         *
         * @callback callback function(err)
         *   When this callback is called with no error, it means either credentials
         *   do not need to be refreshed or refreshed credentials information has
         *   been loaded into the object (as the `accessKeyId`, `secretAccessKey`,
         *   and `sessionToken` properties).
         *   @param err [Error] if an error occurred, this value will be filled
         */
        get: function get(callback) {
          var self = this;

          if (this.needsRefresh()) {
            this.refresh(function (err) {
              if (!err) self.expired = false; // reset expired flag

              if (callback) callback(err);
            });
          } else if (callback) {
            callback();
          }
        },

        /**
         * @!method  getPromise()
         *   Returns a 'thenable' promise.
         *   Gets the existing credentials, refreshing them if they are not yet loaded
         *   or have expired. Users should call this method before using {refresh},
         *   as this will not attempt to reload credentials when they are already
         *   loaded into the object.
         *
         *   Two callbacks can be provided to the `then` method on the returned promise.
         *   The first callback will be called if the promise is fulfilled, and the second
         *   callback will be called if the promise is rejected.
         *   @callback fulfilledCallback function()
         *     Called if the promise is fulfilled. When this callback is called, it
         *     means either credentials do not need to be refreshed or refreshed
         *     credentials information has been loaded into the object (as the
         *     `accessKeyId`, `secretAccessKey`, and `sessionToken` properties).
         *   @callback rejectedCallback function(err)
         *     Called if the promise is rejected.
         *     @param err [Error] if an error occurred, this value will be filled
         *   @return [Promise] A promise that represents the state of the `get` call.
         *   @example Calling the `getPromise` method.
         *     var promise = credProvider.getPromise();
         *     promise.then(function() { ... }, function(err) { ... });
         */

        /**
         * @!method  refreshPromise()
         *   Returns a 'thenable' promise.
         *   Refreshes the credentials. Users should call {get} before attempting
         *   to forcibly refresh credentials.
         *
         *   Two callbacks can be provided to the `then` method on the returned promise.
         *   The first callback will be called if the promise is fulfilled, and the second
         *   callback will be called if the promise is rejected.
         *   @callback fulfilledCallback function()
         *     Called if the promise is fulfilled. When this callback is called, it
         *     means refreshed credentials information has been loaded into the object
         *     (as the `accessKeyId`, `secretAccessKey`, and `sessionToken` properties).
         *   @callback rejectedCallback function(err)
         *     Called if the promise is rejected.
         *     @param err [Error] if an error occurred, this value will be filled
         *   @return [Promise] A promise that represents the state of the `refresh` call.
         *   @example Calling the `refreshPromise` method.
         *     var promise = credProvider.refreshPromise();
         *     promise.then(function() { ... }, function(err) { ... });
         */

        /**
         * Refreshes the credentials. Users should call {get} before attempting
         * to forcibly refresh credentials.
         *
         * @callback callback function(err)
         *   When this callback is called with no error, it means refreshed
         *   credentials information has been loaded into the object (as the
         *   `accessKeyId`, `secretAccessKey`, and `sessionToken` properties).
         *   @param err [Error] if an error occurred, this value will be filled
         * @note Subclasses should override this class to reset the
         *   {accessKeyId}, {secretAccessKey} and optional {sessionToken}
         *   on the credentials object and then call the callback with
         *   any error information.
         * @see get
         */
        refresh: function refresh(callback) {
          this.expired = false;
          callback();
        },

        /**
         * @api private
         * @param callback
         */
        coalesceRefresh: function coalesceRefresh(callback, sync) {
          var self = this;

          if (self.refreshCallbacks.push(callback) === 1) {
            self.load(function onLoad(err) {
              AWS.util.arrayEach(self.refreshCallbacks, function (callback) {
                if (sync) {
                  callback(err);
                } else {
                  // callback could throw, so defer to ensure all callbacks are notified
                  AWS.util.defer(function () {
                    callback(err);
                  });
                }
              });
              self.refreshCallbacks.length = 0;
            });
          }
        },

        /**
         * @api private
         * @param callback
         */
        load: function load(callback) {
          callback();
        }
      });
      /**
       * @api private
       */

      AWS.Credentials.addPromisesToClass = function addPromisesToClass(PromiseDependency) {
        this.prototype.getPromise = AWS.util.promisifyMethod('get', PromiseDependency);
        this.prototype.refreshPromise = AWS.util.promisifyMethod('refresh', PromiseDependency);
      };
      /**
       * @api private
       */


      AWS.Credentials.deletePromisesFromClass = function deletePromisesFromClass() {
        delete this.prototype.getPromise;
        delete this.prototype.refreshPromise;
      };

      AWS.util.addPromises(AWS.Credentials);
      /***/
    },

    /***/
    "8mBD":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/pt.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function mBD(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Portuguese [pt]
      //! author : Jefferson : https://github.com/jalex79
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var pt = moment.defineLocale('pt', {
          months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'),
          monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
          weekdays: 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),
          weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
          weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY HH:mm',
            LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm'
          },
          calendar: {
            sameDay: '[Hoje às] LT',
            nextDay: '[Amanhã às] LT',
            nextWeek: 'dddd [às] LT',
            lastDay: '[Ontem às] LT',
            lastWeek: function lastWeek() {
              return this.day() === 0 || this.day() === 6 ? '[Último] dddd [às] LT' // Saturday + Sunday
              : '[Última] dddd [às] LT'; // Monday - Friday
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: 'em %s',
            past: 'há %s',
            s: 'segundos',
            ss: '%d segundos',
            m: 'um minuto',
            mm: '%d minutos',
            h: 'uma hora',
            hh: '%d horas',
            d: 'um dia',
            dd: '%d dias',
            w: 'uma semana',
            ww: '%d semanas',
            M: 'um mês',
            MM: '%d meses',
            y: 'um ano',
            yy: '%d anos'
          },
          dayOfMonthOrdinalParse: /\d{1,2}º/,
          ordinal: '%dº',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return pt;
      });
      /***/

    },

    /***/
    "8yf6":
    /*!**************************************!*\
      !*** ./node_modules/rxjs/Subject.js ***!
      \**************************************/

    /*! no static exports found */

    /***/
    function yf6(module, exports, __webpack_require__) {
      "use strict";

      function __export(m) {
        for (var p in m) {
          if (!exports.hasOwnProperty(p)) exports[p] = m[p];
        }
      }

      Object.defineProperty(exports, "__esModule", {
        value: true
      });

      __export(__webpack_require__(
      /*! rxjs-compat/Subject */
      "5xEe")); //# sourceMappingURL=Subject.js.map

      /***/

    },

    /***/
    "9Gqe":
    /*!********************************************************!*\
      !*** ./node_modules/aws-sdk/lib/protocol/rest_json.js ***!
      \********************************************************/

    /*! no static exports found */

    /***/
    function Gqe(module, exports, __webpack_require__) {
      var util = __webpack_require__(
      /*! ../util */
      "BaN1");

      var Rest = __webpack_require__(
      /*! ./rest */
      "KFai");

      var Json = __webpack_require__(
      /*! ./json */
      "BGYI");

      var JsonBuilder = __webpack_require__(
      /*! ../json/builder */
      "JWCV");

      var JsonParser = __webpack_require__(
      /*! ../json/parser */
      "henJ");

      function populateBody(req) {
        var builder = new JsonBuilder();
        var input = req.service.api.operations[req.operation].input;

        if (input.payload) {
          var params = {};
          var payloadShape = input.members[input.payload];
          params = req.params[input.payload];
          if (params === undefined) return;

          if (payloadShape.type === 'structure') {
            req.httpRequest.body = builder.build(params, payloadShape);
            applyContentTypeHeader(req);
          } else {
            // non-JSON payload
            req.httpRequest.body = params;

            if (payloadShape.type === 'binary' || payloadShape.isStreaming) {
              applyContentTypeHeader(req, true);
            }
          }
        } else {
          var body = builder.build(req.params, input);

          if (body !== '{}' || req.httpRequest.method !== 'GET') {
            //don't send empty body for GET method
            req.httpRequest.body = body;
          }

          applyContentTypeHeader(req);
        }
      }

      function applyContentTypeHeader(req, isBinary) {
        var operation = req.service.api.operations[req.operation];
        var input = operation.input;

        if (!req.httpRequest.headers['Content-Type']) {
          var type = isBinary ? 'binary/octet-stream' : 'application/json';
          req.httpRequest.headers['Content-Type'] = type;
        }
      }

      function buildRequest(req) {
        Rest.buildRequest(req); // never send body payload on HEAD/DELETE

        if (['HEAD', 'DELETE'].indexOf(req.httpRequest.method) < 0) {
          populateBody(req);
        }
      }

      function extractError(resp) {
        Json.extractError(resp);
      }

      function extractData(resp) {
        Rest.extractData(resp);
        var req = resp.request;
        var operation = req.service.api.operations[req.operation];
        var rules = req.service.api.operations[req.operation].output || {};
        var parser;
        var hasEventOutput = operation.hasEventOutput;

        if (rules.payload) {
          var payloadMember = rules.members[rules.payload];
          var body = resp.httpResponse.body;

          if (payloadMember.isEventStream) {
            parser = new JsonParser();
            resp.data[payload] = util.createEventStream(AWS.HttpClient.streamsApiVersion === 2 ? resp.httpResponse.stream : body, parser, payloadMember);
          } else if (payloadMember.type === 'structure' || payloadMember.type === 'list') {
            var parser = new JsonParser();
            resp.data[rules.payload] = parser.parse(body, payloadMember);
          } else if (payloadMember.type === 'binary' || payloadMember.isStreaming) {
            resp.data[rules.payload] = body;
          } else {
            resp.data[rules.payload] = payloadMember.toType(body);
          }
        } else {
          var data = resp.data;
          Json.extractData(resp);
          resp.data = util.merge(data, resp.data);
        }
      }
      /**
       * @api private
       */


      module.exports = {
        buildRequest: buildRequest,
        extractError: extractError,
        extractData: extractData
      };
      /***/
    },

    /***/
    "9M8c":
    /*!**********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/bufferCount.js ***!
      \**********************************************************************/

    /*! exports provided: bufferCount */

    /***/
    function M8c(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "bufferCount", function () {
        return bufferCount;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");

      function bufferCount(bufferSize) {
        var startBufferEvery = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
        return function bufferCountOperatorFunction(source) {
          return source.lift(new BufferCountOperator(bufferSize, startBufferEvery));
        };
      }

      var BufferCountOperator = /*#__PURE__*/function () {
        function BufferCountOperator(bufferSize, startBufferEvery) {
          _classCallCheck2(this, BufferCountOperator);

          this.bufferSize = bufferSize;
          this.startBufferEvery = startBufferEvery;

          if (!startBufferEvery || bufferSize === startBufferEvery) {
            this.subscriberClass = BufferCountSubscriber;
          } else {
            this.subscriberClass = BufferSkipCountSubscriber;
          }
        }

        _createClass2(BufferCountOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new this.subscriberClass(subscriber, this.bufferSize, this.startBufferEvery));
          }
        }]);

        return BufferCountOperator;
      }();

      var BufferCountSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_9) {
        _inherits2(BufferCountSubscriber, _Subscriber__WEBPACK_9);

        var _super208 = _createSuper(BufferCountSubscriber);

        function BufferCountSubscriber(destination, bufferSize) {
          var _this521;

          _classCallCheck2(this, BufferCountSubscriber);

          _this521 = _super208.call(this, destination);
          _this521.bufferSize = bufferSize;
          _this521.buffer = [];
          return _this521;
        }

        _createClass2(BufferCountSubscriber, [{
          key: "_next",
          value: function _next(value) {
            var buffer = this.buffer;
            buffer.push(value);

            if (buffer.length == this.bufferSize) {
              this.destination.next(buffer);
              this.buffer = [];
            }
          }
        }, {
          key: "_complete",
          value: function _complete() {
            var buffer = this.buffer;

            if (buffer.length > 0) {
              this.destination.next(buffer);
            }

            _get2(_getPrototypeOf2(BufferCountSubscriber.prototype), "_complete", this).call(this);
          }
        }]);

        return BufferCountSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]);

      var BufferSkipCountSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_10) {
        _inherits2(BufferSkipCountSubscriber, _Subscriber__WEBPACK_10);

        var _super209 = _createSuper(BufferSkipCountSubscriber);

        function BufferSkipCountSubscriber(destination, bufferSize, startBufferEvery) {
          var _this522;

          _classCallCheck2(this, BufferSkipCountSubscriber);

          _this522 = _super209.call(this, destination);
          _this522.bufferSize = bufferSize;
          _this522.startBufferEvery = startBufferEvery;
          _this522.buffers = [];
          _this522.count = 0;
          return _this522;
        }

        _createClass2(BufferSkipCountSubscriber, [{
          key: "_next",
          value: function _next(value) {
            var bufferSize = this.bufferSize,
                startBufferEvery = this.startBufferEvery,
                buffers = this.buffers,
                count = this.count;
            this.count++;

            if (count % startBufferEvery === 0) {
              buffers.push([]);
            }

            for (var i = buffers.length; i--;) {
              var buffer = buffers[i];
              buffer.push(value);

              if (buffer.length === bufferSize) {
                buffers.splice(i, 1);
                this.destination.next(buffer);
              }
            }
          }
        }, {
          key: "_complete",
          value: function _complete() {
            var buffers = this.buffers,
                destination = this.destination;

            while (buffers.length > 0) {
              var buffer = buffers.shift();

              if (buffer.length > 0) {
                destination.next(buffer);
              }
            }

            _get2(_getPrototypeOf2(BufferSkipCountSubscriber.prototype), "_complete", this).call(this);
          }
        }]);

        return BufferSkipCountSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=bufferCount.js.map

      /***/

    },

    /***/
    "9ihq":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/elementAt.js ***!
      \********************************************************************/

    /*! exports provided: elementAt */

    /***/
    function ihq(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "elementAt", function () {
        return elementAt;
      });
      /* harmony import */


      var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../util/ArgumentOutOfRangeError */
      "4I5i");
      /* harmony import */


      var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./filter */
      "pLZG");
      /* harmony import */


      var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./throwIfEmpty */
      "XDbj");
      /* harmony import */


      var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./defaultIfEmpty */
      "xbPD");
      /* harmony import */


      var _take__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ./take */
      "IzEk");

      function elementAt(index, defaultValue) {
        if (index < 0) {
          throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_0__["ArgumentOutOfRangeError"]();
        }

        var hasDefaultValue = arguments.length >= 2;
        return function (source) {
          return source.pipe(Object(_filter__WEBPACK_IMPORTED_MODULE_1__["filter"])(function (v, i) {
            return i === index;
          }), Object(_take__WEBPACK_IMPORTED_MODULE_4__["take"])(1), hasDefaultValue ? Object(_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__["defaultIfEmpty"])(defaultValue) : Object(_throwIfEmpty__WEBPACK_IMPORTED_MODULE_2__["throwIfEmpty"])(function () {
            return new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_0__["ArgumentOutOfRangeError"]();
          }));
        };
      } //# sourceMappingURL=elementAt.js.map

      /***/

    },

    /***/
    "9ppp":
    /*!*****************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/ObjectUnsubscribedError.js ***!
      \*****************************************************************************/

    /*! exports provided: ObjectUnsubscribedError */

    /***/
    function ppp(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ObjectUnsubscribedError", function () {
        return ObjectUnsubscribedError;
      });

      var ObjectUnsubscribedErrorImpl = function () {
        function ObjectUnsubscribedErrorImpl() {
          Error.call(this);
          this.message = 'object unsubscribed';
          this.name = 'ObjectUnsubscribedError';
          return this;
        }

        ObjectUnsubscribedErrorImpl.prototype = Object.create(Error.prototype);
        return ObjectUnsubscribedErrorImpl;
      }();

      var ObjectUnsubscribedError = ObjectUnsubscribedErrorImpl; //# sourceMappingURL=ObjectUnsubscribedError.js.map

      /***/
    },

    /***/
    "9rRi":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/gd.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function rRi(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Scottish Gaelic [gd]
      //! author : Jon Ashdown : https://github.com/jonashdown
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var months = ['Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'],
            monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'],
            weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'],
            weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],
            weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];
        var gd = moment.defineLocale('gd', {
          months: months,
          monthsShort: monthsShort,
          monthsParseExact: true,
          weekdays: weekdays,
          weekdaysShort: weekdaysShort,
          weekdaysMin: weekdaysMin,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[An-diugh aig] LT',
            nextDay: '[A-màireach aig] LT',
            nextWeek: 'dddd [aig] LT',
            lastDay: '[An-dè aig] LT',
            lastWeek: 'dddd [seo chaidh] [aig] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'ann an %s',
            past: 'bho chionn %s',
            s: 'beagan diogan',
            ss: '%d diogan',
            m: 'mionaid',
            mm: '%d mionaidean',
            h: 'uair',
            hh: '%d uairean',
            d: 'latha',
            dd: '%d latha',
            M: 'mìos',
            MM: '%d mìosan',
            y: 'bliadhna',
            yy: '%d bliadhna'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
          ordinal: function ordinal(number) {
            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
            return number + output;
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return gd;
      });
      /***/

    },

    /***/
    "A+xa":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/cv.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function AXa(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Chuvash [cv]
      //! author : Anatoly Mironov : https://github.com/mirontoli
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var cv = moment.defineLocale('cv', {
          months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),
          monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),
          weekdays: 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),
          weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),
          weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD-MM-YYYY',
            LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',
            LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
            LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'
          },
          calendar: {
            sameDay: '[Паян] LT [сехетре]',
            nextDay: '[Ыран] LT [сехетре]',
            lastDay: '[Ӗнер] LT [сехетре]',
            nextWeek: '[Ҫитес] dddd LT [сехетре]',
            lastWeek: '[Иртнӗ] dddd LT [сехетре]',
            sameElse: 'L'
          },
          relativeTime: {
            future: function future(output) {
              var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';
              return output + affix;
            },
            past: '%s каялла',
            s: 'пӗр-ик ҫеккунт',
            ss: '%d ҫеккунт',
            m: 'пӗр минут',
            mm: '%d минут',
            h: 'пӗр сехет',
            hh: '%d сехет',
            d: 'пӗр кун',
            dd: '%d кун',
            M: 'пӗр уйӑх',
            MM: '%d уйӑх',
            y: 'пӗр ҫул',
            yy: '%d ҫул'
          },
          dayOfMonthOrdinalParse: /\d{1,2}-мӗш/,
          ordinal: '%d-мӗш',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return cv;
      });
      /***/

    },

    /***/
    "A3iJ":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/partition.js ***!
      \********************************************************************/

    /*! exports provided: partition */

    /***/
    function A3iJ(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "partition", function () {
        return partition;
      });
      /* harmony import */


      var _util_not__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../util/not */
      "F97/");
      /* harmony import */


      var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./filter */
      "pLZG");

      function partition(predicate, thisArg) {
        return function (source) {
          return [Object(_filter__WEBPACK_IMPORTED_MODULE_1__["filter"])(predicate, thisArg)(source), Object(_filter__WEBPACK_IMPORTED_MODULE_1__["filter"])(Object(_util_not__WEBPACK_IMPORTED_MODULE_0__["not"])(predicate, thisArg))(source)];
        };
      } //# sourceMappingURL=partition.js.map

      /***/

    },

    /***/
    "AQ68":
    /*!***********************************************!*\
      !*** ./node_modules/moment/locale/uz-latn.js ***!
      \***********************************************/

    /*! no static exports found */

    /***/
    function AQ68(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Uzbek Latin [uz-latn]
      //! author : Rasulbek Mirzayev : github.com/Rasulbeeek
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var uzLatn = moment.defineLocale('uz-latn', {
          months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'),
          monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),
          weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'),
          weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),
          weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'D MMMM YYYY, dddd HH:mm'
          },
          calendar: {
            sameDay: '[Bugun soat] LT [da]',
            nextDay: '[Ertaga] LT [da]',
            nextWeek: 'dddd [kuni soat] LT [da]',
            lastDay: '[Kecha soat] LT [da]',
            lastWeek: "[O'tgan] dddd [kuni soat] LT [da]",
            sameElse: 'L'
          },
          relativeTime: {
            future: 'Yaqin %s ichida',
            past: 'Bir necha %s oldin',
            s: 'soniya',
            ss: '%d soniya',
            m: 'bir daqiqa',
            mm: '%d daqiqa',
            h: 'bir soat',
            hh: '%d soat',
            d: 'bir kun',
            dd: '%d kun',
            M: 'bir oy',
            MM: '%d oy',
            y: 'bir yil',
            yy: '%d yil'
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return uzLatn;
      });
      /***/

    },

    /***/
    "AvvY":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/ml.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function AvvY(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Malayalam [ml]
      //! author : Floyd Pink : https://github.com/floydpink
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var ml = moment.defineLocale('ml', {
          months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),
          monthsShort: 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),
          monthsParseExact: true,
          weekdays: 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),
          weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),
          weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),
          longDateFormat: {
            LT: 'A h:mm -നു',
            LTS: 'A h:mm:ss -നു',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm -നു',
            LLLL: 'dddd, D MMMM YYYY, A h:mm -നു'
          },
          calendar: {
            sameDay: '[ഇന്ന്] LT',
            nextDay: '[നാളെ] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[ഇന്നലെ] LT',
            lastWeek: '[കഴിഞ്ഞ] dddd, LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s കഴിഞ്ഞ്',
            past: '%s മുൻപ്',
            s: 'അൽപ നിമിഷങ്ങൾ',
            ss: '%d സെക്കൻഡ്',
            m: 'ഒരു മിനിറ്റ്',
            mm: '%d മിനിറ്റ്',
            h: 'ഒരു മണിക്കൂർ',
            hh: '%d മണിക്കൂർ',
            d: 'ഒരു ദിവസം',
            dd: '%d ദിവസം',
            M: 'ഒരു മാസം',
            MM: '%d മാസം',
            y: 'ഒരു വർഷം',
            yy: '%d വർഷം'
          },
          meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === 'രാത്രി' && hour >= 4 || meridiem === 'ഉച്ച കഴിഞ്ഞ്' || meridiem === 'വൈകുന്നേരം') {
              return hour + 12;
            } else {
              return hour;
            }
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 4) {
              return 'രാത്രി';
            } else if (hour < 12) {
              return 'രാവിലെ';
            } else if (hour < 17) {
              return 'ഉച്ച കഴിഞ്ഞ്';
            } else if (hour < 20) {
              return 'വൈകുന്നേരം';
            } else {
              return 'രാത്രി';
            }
          }
        });
        return ml;
      });
      /***/

    },

    /***/
    "AxlJ":
    /*!******************************************************!*\
      !*** ./node_modules/highcharts/modules/exporting.js ***!
      \******************************************************/

    /*! no static exports found */

    /***/
    function AxlJ(module, exports, __webpack_require__) {
      var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;
      /*
      Highcharts JS v8.2.2 (2020-10-22)
      Exporting module
      (c) 2010-2019 Torstein Honsi
      License: www.highcharts.com/license
      */


      (function (e) {
        true && module.exports ? (e["default"] = e, module.exports = e) : true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(
        /*! highcharts */
        "6n/F")], __WEBPACK_AMD_DEFINE_RESULT__ = function (q) {
          e(q);
          e.Highcharts = q;
          return e;
        }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : undefined;
      })(function (e) {
        function q(e, l, g, k) {
          e.hasOwnProperty(l) || (e[l] = k.apply(null, g));
        }

        e = e ? e._modules : {};
        q(e, "Extensions/FullScreen.js", [e["Core/Chart/Chart.js"], e["Core/Globals.js"], e["Core/Utilities.js"]], function (e, l, g) {
          var k = g.addEvent;

          g = function () {
            function e(f) {
              this.chart = f;
              this.isOpen = !1;
              f = f.renderTo;
              this.browserProps || ("function" === typeof f.requestFullscreen ? this.browserProps = {
                fullscreenChange: "fullscreenchange",
                requestFullscreen: "requestFullscreen",
                exitFullscreen: "exitFullscreen"
              } : f.mozRequestFullScreen ? this.browserProps = {
                fullscreenChange: "mozfullscreenchange",
                requestFullscreen: "mozRequestFullScreen",
                exitFullscreen: "mozCancelFullScreen"
              } : f.webkitRequestFullScreen ? this.browserProps = {
                fullscreenChange: "webkitfullscreenchange",
                requestFullscreen: "webkitRequestFullScreen",
                exitFullscreen: "webkitExitFullscreen"
              } : f.msRequestFullscreen && (this.browserProps = {
                fullscreenChange: "MSFullscreenChange",
                requestFullscreen: "msRequestFullscreen",
                exitFullscreen: "msExitFullscreen"
              }));
            }

            e.prototype.close = function () {
              var f = this.chart;
              if (this.isOpen && this.browserProps && f.container.ownerDocument instanceof Document) f.container.ownerDocument[this.browserProps.exitFullscreen]();
              this.unbindFullscreenEvent && this.unbindFullscreenEvent();
              this.isOpen = !1;
              this.setButtonText();
            };

            e.prototype.open = function () {
              var f = this,
                  e = f.chart;

              if (f.browserProps) {
                f.unbindFullscreenEvent = k(e.container.ownerDocument, f.browserProps.fullscreenChange, function () {
                  f.isOpen ? (f.isOpen = !1, f.close()) : (f.isOpen = !0, f.setButtonText());
                });
                var g = e.renderTo[f.browserProps.requestFullscreen]();
                if (g) g["catch"](function () {
                  alert("Full screen is not supported inside a frame.");
                });
                k(e, "destroy", f.unbindFullscreenEvent);
              }
            };

            e.prototype.setButtonText = function () {
              var f,
                  e = this.chart,
                  g = e.exportDivElements,
                  k = e.options.exporting,
                  l = null === (f = null === k || void 0 === k ? void 0 : k.buttons) || void 0 === f ? void 0 : f.contextButton.menuItems;
              f = e.options.lang;
              (null === k || void 0 === k ? 0 : k.menuItemDefinitions) && (null === f || void 0 === f ? 0 : f.exitFullscreen) && f.viewFullscreen && l && g && g.length && (g[l.indexOf("viewFullscreen")].innerHTML = this.isOpen ? f.exitFullscreen : k.menuItemDefinitions.viewFullscreen.text || f.viewFullscreen);
            };

            e.prototype.toggle = function () {
              this.isOpen ? this.close() : this.open();
            };

            return e;
          }();

          l.Fullscreen = g;
          k(e, "beforeRender", function () {
            this.fullscreen = new l.Fullscreen(this);
          });
          return l.Fullscreen;
        });
        q(e, "Mixins/Navigation.js", [], function () {
          return {
            initUpdate: function initUpdate(e) {
              e.navigation || (e.navigation = {
                updates: [],
                update: function update(e, g) {
                  this.updates.forEach(function (k) {
                    k.update.call(k.context, e, g);
                  });
                }
              });
            },
            addUpdate: function addUpdate(e, l) {
              l.navigation || this.initUpdate(l);
              l.navigation.updates.push({
                update: e,
                context: l
              });
            }
          };
        });
        q(e, "Extensions/Exporting.js", [e["Core/Chart/Chart.js"], e["Mixins/Navigation.js"], e["Core/Globals.js"], e["Core/Options.js"], e["Core/Renderer/SVG/SVGRenderer.js"], e["Core/Utilities.js"]], function (e, l, g, k, q, f) {
          var A = g.doc,
              H = g.isTouchDevice,
              y = g.win;
          k = k.defaultOptions;
          var v = f.addEvent,
              r = f.css,
              x = f.createElement,
              D = f.discardElement,
              z = f.extend,
              I = f.find,
              C = f.fireEvent,
              J = f.isObject,
              p = f.merge,
              E = f.objectEach,
              t = f.pick,
              K = f.removeEvent,
              L = f.uniqueKey,
              F = y.navigator.userAgent,
              G = g.Renderer.prototype.symbols,
              M = /Edge\/|Trident\/|MSIE /.test(F),
              N = /firefox/i.test(F);
          z(k.lang, {
            viewFullscreen: "View in full screen",
            exitFullscreen: "Exit from full screen",
            printChart: "Print chart",
            downloadPNG: "Download PNG image",
            downloadJPEG: "Download JPEG image",
            downloadPDF: "Download PDF document",
            downloadSVG: "Download SVG vector image",
            contextButtonTitle: "Chart context menu"
          });
          k.navigation || (k.navigation = {});
          p(!0, k.navigation, {
            buttonOptions: {
              theme: {},
              symbolSize: 14,
              symbolX: 12.5,
              symbolY: 10.5,
              align: "right",
              buttonSpacing: 3,
              height: 22,
              verticalAlign: "top",
              width: 24
            }
          });
          p(!0, k.navigation, {
            menuStyle: {
              border: "1px solid #999999",
              background: "#ffffff",
              padding: "5px 0"
            },
            menuItemStyle: {
              padding: "0.5em 1em",
              color: "#333333",
              background: "none",
              fontSize: H ? "14px" : "11px",
              transition: "background 250ms, color 250ms"
            },
            menuItemHoverStyle: {
              background: "#335cad",
              color: "#ffffff"
            },
            buttonOptions: {
              symbolFill: "#666666",
              symbolStroke: "#666666",
              symbolStrokeWidth: 3,
              theme: {
                padding: 5
              }
            }
          });
          k.exporting = {
            type: "image/png",
            url: "https://export.highcharts.com/",
            printMaxWidth: 780,
            scale: 2,
            buttons: {
              contextButton: {
                className: "highcharts-contextbutton",
                menuClassName: "highcharts-contextmenu",
                symbol: "menu",
                titleKey: "contextButtonTitle",
                menuItems: "viewFullscreen printChart separator downloadPNG downloadJPEG downloadPDF downloadSVG".split(" ")
              }
            },
            menuItemDefinitions: {
              viewFullscreen: {
                textKey: "viewFullscreen",
                onclick: function onclick() {
                  this.fullscreen.toggle();
                }
              },
              printChart: {
                textKey: "printChart",
                onclick: function onclick() {
                  this.print();
                }
              },
              separator: {
                separator: !0
              },
              downloadPNG: {
                textKey: "downloadPNG",
                onclick: function onclick() {
                  this.exportChart();
                }
              },
              downloadJPEG: {
                textKey: "downloadJPEG",
                onclick: function onclick() {
                  this.exportChart({
                    type: "image/jpeg"
                  });
                }
              },
              downloadPDF: {
                textKey: "downloadPDF",
                onclick: function onclick() {
                  this.exportChart({
                    type: "application/pdf"
                  });
                }
              },
              downloadSVG: {
                textKey: "downloadSVG",
                onclick: function onclick() {
                  this.exportChart({
                    type: "image/svg+xml"
                  });
                }
              }
            }
          };

          g.post = function (a, b, c) {
            var d = x("form", p({
              method: "post",
              action: a,
              enctype: "multipart/form-data"
            }, c), {
              display: "none"
            }, A.body);
            E(b, function (a, b) {
              x("input", {
                type: "hidden",
                name: b,
                value: a
              }, null, d);
            });
            d.submit();
            D(d);
          };

          g.isSafari && g.win.matchMedia("print").addListener(function (a) {
            g.printingChart && (a.matches ? g.printingChart.beforePrint() : g.printingChart.afterPrint());
          });
          z(e.prototype, {
            sanitizeSVG: function sanitizeSVG(a, b) {
              var c = a.indexOf("</svg>") + 6,
                  d = a.substr(c);
              a = a.substr(0, c);
              b && b.exporting && b.exporting.allowHTML && d && (d = '<foreignObject x="0" y="0" width="' + b.chart.width + '" height="' + b.chart.height + '"><body xmlns="http://www.w3.org/1999/xhtml">' + d.replace(/(<(?:img|br).*?(?=>))>/g, "$1 />") + "</body></foreignObject>", a = a.replace("</svg>", d + "</svg>"));
              a = a.replace(/zIndex="[^"]+"/g, "").replace(/symbolName="[^"]+"/g, "").replace(/jQuery[0-9]+="[^"]+"/g, "").replace(/url\(("|&quot;)(.*?)("|&quot;);?\)/g, "url($2)").replace(/url\([^#]+#/g, "url(#").replace(/<svg /, '<svg xmlns:xlink="http://www.w3.org/1999/xlink" ').replace(/ (|NS[0-9]+:)href=/g, " xlink:href=").replace(/\n/, " ").replace(/(fill|stroke)="rgba\(([ 0-9]+,[ 0-9]+,[ 0-9]+),([ 0-9\.]+)\)"/g, '$1="rgb($2)" $1-opacity="$3"').replace(/&nbsp;/g, "\xA0").replace(/&shy;/g, "\xAD");
              this.ieSanitizeSVG && (a = this.ieSanitizeSVG(a));
              return a;
            },
            getChartHTML: function getChartHTML() {
              this.styledMode && this.inlineStyles();
              return this.container.innerHTML;
            },
            getSVG: function getSVG(a) {
              var b,
                  c = p(this.options, a);
              c.plotOptions = p(this.userOptions.plotOptions, a && a.plotOptions);
              c.time = p(this.userOptions.time, a && a.time);
              var d = x("div", null, {
                position: "absolute",
                top: "-9999em",
                width: this.chartWidth + "px",
                height: this.chartHeight + "px"
              }, A.body);
              var f = this.renderTo.style.width;
              var w = this.renderTo.style.height;
              f = c.exporting.sourceWidth || c.chart.width || /px$/.test(f) && parseInt(f, 10) || (c.isGantt ? 800 : 600);
              w = c.exporting.sourceHeight || c.chart.height || /px$/.test(w) && parseInt(w, 10) || 400;
              z(c.chart, {
                animation: !1,
                renderTo: d,
                forExport: !0,
                renderer: "SVGRenderer",
                width: f,
                height: w
              });
              c.exporting.enabled = !1;
              delete c.data;
              c.series = [];
              this.series.forEach(function (a) {
                b = p(a.userOptions, {
                  animation: !1,
                  enableMouseTracking: !1,
                  showCheckbox: !1,
                  visible: a.visible
                });
                b.isInternal || c.series.push(b);
              });
              this.axes.forEach(function (a) {
                a.userOptions.internalKey || (a.userOptions.internalKey = L());
              });
              var g = new e(c, this.callback);
              a && ["xAxis", "yAxis", "series"].forEach(function (b) {
                var d = {};
                a[b] && (d[b] = a[b], g.update(d));
              });
              this.axes.forEach(function (a) {
                var b = I(g.axes, function (b) {
                  return b.options.internalKey === a.userOptions.internalKey;
                }),
                    d = a.getExtremes(),
                    c = d.userMin;
                d = d.userMax;
                b && ("undefined" !== typeof c && c !== b.min || "undefined" !== typeof d && d !== b.max) && b.setExtremes(c, d, !0, !1);
              });
              f = g.getChartHTML();
              C(this, "getSVG", {
                chartCopy: g
              });
              f = this.sanitizeSVG(f, c);
              c = null;
              g.destroy();
              D(d);
              return f;
            },
            getSVGForExport: function getSVGForExport(a, b) {
              var c = this.options.exporting;
              return this.getSVG(p({
                chart: {
                  borderRadius: 0
                }
              }, c.chartOptions, b, {
                exporting: {
                  sourceWidth: a && a.sourceWidth || c.sourceWidth,
                  sourceHeight: a && a.sourceHeight || c.sourceHeight
                }
              }));
            },
            getFilename: function getFilename() {
              var a = this.userOptions.title && this.userOptions.title.text,
                  b = this.options.exporting.filename;
              if (b) return b.replace(/\//g, "-");
              "string" === typeof a && (b = a.toLowerCase().replace(/<\/?[^>]+(>|$)/g, "").replace(/[\s_]+/g, "-").replace(/[^a-z0-9\-]/g, "").replace(/^[\-]+/g, "").replace(/[\-]+/g, "-").substr(0, 24).replace(/[\-]+$/g, ""));
              if (!b || 5 > b.length) b = "chart";
              return b;
            },
            exportChart: function exportChart(a, b) {
              b = this.getSVGForExport(a, b);
              a = p(this.options.exporting, a);
              g.post(a.url, {
                filename: a.filename ? a.filename.replace(/\//g, "-") : this.getFilename(),
                type: a.type,
                width: a.width || 0,
                scale: a.scale,
                svg: b
              }, a.formAttributes);
            },
            moveContainers: function moveContainers(a) {
              (this.fixedDiv ? [this.fixedDiv, this.scrollingContainer] : [this.container]).forEach(function (b) {
                a.appendChild(b);
              });
            },
            beforePrint: function beforePrint() {
              var a = A.body,
                  b = this.options.exporting.printMaxWidth,
                  c = {
                childNodes: a.childNodes,
                origDisplay: [],
                resetParams: void 0
              };
              this.isPrinting = !0;
              this.pointer.reset(null, 0);
              C(this, "beforePrint");
              b && this.chartWidth > b && (c.resetParams = [this.options.chart.width, void 0, !1], this.setSize(b, void 0, !1));
              [].forEach.call(c.childNodes, function (a, b) {
                1 === a.nodeType && (c.origDisplay[b] = a.style.display, a.style.display = "none");
              });
              this.moveContainers(a);
              this.printReverseInfo = c;
            },
            afterPrint: function afterPrint() {
              if (this.printReverseInfo) {
                var a = this.printReverseInfo.childNodes,
                    b = this.printReverseInfo.origDisplay,
                    c = this.printReverseInfo.resetParams;
                this.moveContainers(this.renderTo);
                [].forEach.call(a, function (a, c) {
                  1 === a.nodeType && (a.style.display = b[c] || "");
                });
                this.isPrinting = !1;
                c && this.setSize.apply(this, c);
                delete this.printReverseInfo;
                delete g.printingChart;
                C(this, "afterPrint");
              }
            },
            print: function print() {
              var a = this;
              a.isPrinting || (g.printingChart = a, g.isSafari || a.beforePrint(), setTimeout(function () {
                y.focus();
                y.print();
                g.isSafari || setTimeout(function () {
                  a.afterPrint();
                }, 1E3);
              }, 1));
            },
            contextMenu: function contextMenu(a, b, c, d, e, g, k) {
              var h = this,
                  w = h.options.navigation,
                  l = h.chartWidth,
                  B = h.chartHeight,
                  n = "cache-" + a,
                  m = h[n],
                  u = Math.max(e, g);

              if (!m) {
                h.exportContextMenu = h[n] = m = x("div", {
                  className: a
                }, {
                  position: "absolute",
                  zIndex: 1E3,
                  padding: u + "px",
                  pointerEvents: "auto"
                }, h.fixedDiv || h.container);
                var p = x("ul", {
                  className: "highcharts-menu"
                }, {
                  listStyle: "none",
                  margin: 0,
                  padding: 0
                }, m);
                h.styledMode || r(p, z({
                  MozBoxShadow: "3px 3px 10px #888",
                  WebkitBoxShadow: "3px 3px 10px #888",
                  boxShadow: "3px 3px 10px #888"
                }, w.menuStyle));

                m.hideMenu = function () {
                  r(m, {
                    display: "none"
                  });
                  k && k.setState(0);
                  h.openMenu = !1;
                  r(h.renderTo, {
                    overflow: "hidden"
                  });
                  f.clearTimeout(m.hideTimer);
                  C(h, "exportMenuHidden");
                };

                h.exportEvents.push(v(m, "mouseleave", function () {
                  m.hideTimer = y.setTimeout(m.hideMenu, 500);
                }), v(m, "mouseenter", function () {
                  f.clearTimeout(m.hideTimer);
                }), v(A, "mouseup", function (b) {
                  h.pointer.inClass(b.target, a) || m.hideMenu();
                }), v(m, "click", function () {
                  h.openMenu && m.hideMenu();
                }));
                b.forEach(function (a) {
                  "string" === typeof a && (a = h.options.exporting.menuItemDefinitions[a]);

                  if (J(a, !0)) {
                    if (a.separator) var b = x("hr", null, null, p);else "viewData" === a.textKey && h.isDataTableVisible && (a.textKey = "hideData"), b = x("li", {
                      className: "highcharts-menu-item",
                      onclick: function onclick(b) {
                        b && b.stopPropagation();
                        m.hideMenu();
                        a.onclick && a.onclick.apply(h, arguments);
                      },
                      innerHTML: a.text || h.options.lang[a.textKey]
                    }, null, p), h.styledMode || (b.onmouseover = function () {
                      r(this, w.menuItemHoverStyle);
                    }, b.onmouseout = function () {
                      r(this, w.menuItemStyle);
                    }, r(b, z({
                      cursor: "pointer"
                    }, w.menuItemStyle)));
                    h.exportDivElements.push(b);
                  }
                });
                h.exportDivElements.push(p, m);
                h.exportMenuWidth = m.offsetWidth;
                h.exportMenuHeight = m.offsetHeight;
              }

              b = {
                display: "block"
              };
              c + h.exportMenuWidth > l ? b.right = l - c - e - u + "px" : b.left = c - u + "px";
              d + g + h.exportMenuHeight > B && "top" !== k.alignOptions.verticalAlign ? b.bottom = B - d - u + "px" : b.top = d + g - u + "px";
              r(m, b);
              r(h.renderTo, {
                overflow: ""
              });
              h.openMenu = !0;
              C(h, "exportMenuShown");
            },
            addButton: function addButton(a) {
              var b = this,
                  c = b.renderer,
                  d = p(b.options.navigation.buttonOptions, a),
                  e = d.onclick,
                  f = d.menuItems,
                  g = d.symbolSize || 12;
              b.btnCount || (b.btnCount = 0);
              b.exportDivElements || (b.exportDivElements = [], b.exportSVGElements = []);

              if (!1 !== d.enabled) {
                var h = d.theme,
                    k = h.states,
                    l = k && k.hover;
                k = k && k.select;
                var B;
                b.styledMode || (h.fill = t(h.fill, "#ffffff"), h.stroke = t(h.stroke, "none"));
                delete h.states;
                e ? B = function B(a) {
                  a && a.stopPropagation();
                  e.call(b, a);
                } : f && (B = function B(a) {
                  a && a.stopPropagation();
                  b.contextMenu(n.menuClassName, f, n.translateX, n.translateY, n.width, n.height, n);
                  n.setState(2);
                });
                d.text && d.symbol ? h.paddingLeft = t(h.paddingLeft, 25) : d.text || z(h, {
                  width: d.width,
                  height: d.height,
                  padding: 0
                });
                b.styledMode || (h["stroke-linecap"] = "round", h.fill = t(h.fill, "#ffffff"), h.stroke = t(h.stroke, "none"));
                var n = c.button(d.text, 0, 0, B, h, l, k).addClass(a.className).attr({
                  title: t(b.options.lang[d._titleKey || d.titleKey], "")
                });
                n.menuClassName = a.menuClassName || "highcharts-menu-" + b.btnCount++;

                if (d.symbol) {
                  var m = c.symbol(d.symbol, d.symbolX - g / 2, d.symbolY - g / 2, g, g, {
                    width: g,
                    height: g
                  }).addClass("highcharts-button-symbol").attr({
                    zIndex: 1
                  }).add(n);
                  b.styledMode || m.attr({
                    stroke: d.symbolStroke,
                    fill: d.symbolFill,
                    "stroke-width": d.symbolStrokeWidth || 1
                  });
                }

                n.add(b.exportingGroup).align(z(d, {
                  width: n.width,
                  x: t(d.x, b.buttonOffset)
                }), !0, "spacingBox");
                b.buttonOffset += (n.width + d.buttonSpacing) * ("right" === d.align ? -1 : 1);
                b.exportSVGElements.push(n, m);
              }
            },
            destroyExport: function destroyExport(a) {
              var b = a ? a.target : this;
              a = b.exportSVGElements;
              var c = b.exportDivElements,
                  d = b.exportEvents,
                  e;
              a && (a.forEach(function (a, d) {
                a && (a.onclick = a.ontouchstart = null, e = "cache-" + a.menuClassName, b[e] && delete b[e], b.exportSVGElements[d] = a.destroy());
              }), a.length = 0);
              b.exportingGroup && (b.exportingGroup.destroy(), delete b.exportingGroup);
              c && (c.forEach(function (a, d) {
                f.clearTimeout(a.hideTimer);
                K(a, "mouseleave");
                b.exportDivElements[d] = a.onmouseout = a.onmouseover = a.ontouchstart = a.onclick = null;
                D(a);
              }), c.length = 0);
              d && (d.forEach(function (a) {
                a();
              }), d.length = 0);
            }
          });
          q.prototype.inlineToAttributes = "fill stroke strokeLinecap strokeLinejoin strokeWidth textAnchor x y".split(" ");
          q.prototype.inlineBlacklist = [/-/, /^(clipPath|cssText|d|height|width)$/, /^font$/, /[lL]ogical(Width|Height)$/, /perspective/, /TapHighlightColor/, /^transition/, /^length$/];
          q.prototype.unstyledElements = ["clipPath", "defs", "desc"];

          e.prototype.inlineStyles = function () {
            function a(a) {
              return a.replace(/([A-Z])/g, function (a, b) {
                return "-" + b.toLowerCase();
              });
            }

            function b(c) {
              function n(b, g) {
                u = q = !1;

                if (f) {
                  for (r = f.length; r-- && !q;) {
                    q = f[r].test(g);
                  }

                  u = !q;
                }

                "transform" === g && "none" === b && (u = !0);

                for (r = e.length; r-- && !u;) {
                  u = e[r].test(g) || "function" === typeof b;
                }

                u || w[g] === b && "svg" !== c.nodeName || h[c.nodeName][g] === b || (d && -1 === d.indexOf(g) ? m += a(g) + ":" + b + ";" : b && c.setAttribute(a(g), b));
              }

              var m = "",
                  u,
                  q,
                  r;

              if (1 === c.nodeType && -1 === g.indexOf(c.nodeName)) {
                var t = y.getComputedStyle(c, null);
                var w = "svg" === c.nodeName ? {} : y.getComputedStyle(c.parentNode, null);

                if (!h[c.nodeName]) {
                  k = l.getElementsByTagName("svg")[0];
                  var v = l.createElementNS(c.namespaceURI, c.nodeName);
                  k.appendChild(v);
                  h[c.nodeName] = p(y.getComputedStyle(v, null));
                  "text" === c.nodeName && delete h.text.fill;
                  k.removeChild(v);
                }

                if (N || M) for (var x in t) {
                  n(t[x], x);
                } else E(t, n);
                m && (t = c.getAttribute("style"), c.setAttribute("style", (t ? t + ";" : "") + m));
                "svg" === c.nodeName && c.setAttribute("stroke-width", "1px");
                "text" !== c.nodeName && [].forEach.call(c.children || c.childNodes, b);
              }
            }

            var c = this.renderer,
                d = c.inlineToAttributes,
                e = c.inlineBlacklist,
                f = c.inlineWhitelist,
                g = c.unstyledElements,
                h = {},
                k;
            c = A.createElement("iframe");
            r(c, {
              width: "1px",
              height: "1px",
              visibility: "hidden"
            });
            A.body.appendChild(c);
            var l = c.contentWindow.document;
            l.open();
            l.write('<svg xmlns="http://www.w3.org/2000/svg"></svg>');
            l.close();
            b(this.container.querySelector("svg"));
            k.parentNode.remove();
            c.remove();
          };

          G.menu = function (a, b, c, d) {
            return [["M", a, b + 2.5], ["L", a + c, b + 2.5], ["M", a, b + d / 2 + .5], ["L", a + c, b + d / 2 + .5], ["M", a, b + d - 1.5], ["L", a + c, b + d - 1.5]];
          };

          G.menuball = function (a, b, c, d) {
            a = [];
            d = d / 3 - 2;
            return a = a.concat(this.circle(c - d, b, d, d), this.circle(c - d, b + d + 4, d, d), this.circle(c - d, b + 2 * (d + 4), d, d));
          };

          e.prototype.renderExporting = function () {
            var a = this,
                b = a.options.exporting,
                c = b.buttons,
                d = a.isDirtyExporting || !a.exportSVGElements;
            a.buttonOffset = 0;
            a.isDirtyExporting && a.destroyExport();
            d && !1 !== b.enabled && (a.exportEvents = [], a.exportingGroup = a.exportingGroup || a.renderer.g("exporting-group").attr({
              zIndex: 3
            }).add(), E(c, function (b) {
              a.addButton(b);
            }), a.isDirtyExporting = !1);
            v(a, "destroy", a.destroyExport);
          };

          v(e, "init", function () {
            var a = this;
            a.exporting = {
              update: function update(b, c) {
                a.isDirtyExporting = !0;
                p(!0, a.options.exporting, b);
                t(c, !0) && a.redraw();
              }
            };
            l.addUpdate(function (b, c) {
              a.isDirtyExporting = !0;
              p(!0, a.options.navigation, b);
              t(c, !0) && a.redraw();
            }, a);
          });
          e.prototype.callbacks.push(function (a) {
            a.renderExporting();
            v(a, "redraw", a.renderExporting);
          });
        });
        q(e, "masters/modules/exporting.src.js", [], function () {});
      }); //# sourceMappingURL=exporting.js.map

      /***/

    },

    /***/
    "B/XX":
    /*!********************************************************************!*\
      !*** ./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/stepper.js ***!
      \********************************************************************/

    /*! exports provided: CdkStep, CdkStepHeader, CdkStepLabel, CdkStepper, CdkStepperModule, CdkStepperNext, CdkStepperPrevious, MAT_STEPPER_GLOBAL_OPTIONS, STEPPER_GLOBAL_OPTIONS, STEP_STATE, StepperSelectionEvent */

    /***/
    function BXX(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkStep", function () {
        return CdkStep;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkStepHeader", function () {
        return CdkStepHeader;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkStepLabel", function () {
        return CdkStepLabel;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkStepper", function () {
        return CdkStepper;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkStepperModule", function () {
        return CdkStepperModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkStepperNext", function () {
        return CdkStepperNext;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkStepperPrevious", function () {
        return CdkStepperPrevious;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_STEPPER_GLOBAL_OPTIONS", function () {
        return MAT_STEPPER_GLOBAL_OPTIONS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "STEPPER_GLOBAL_OPTIONS", function () {
        return STEPPER_GLOBAL_OPTIONS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "STEP_STATE", function () {
        return STEP_STATE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "StepperSelectionEvent", function () {
        return StepperSelectionEvent;
      });
      /* harmony import */


      var _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/cdk/a11y */
      "u47x");
      /* harmony import */


      var _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/cdk/bidi */
      "cH1L");
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");
      /* harmony import */


      var _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/cdk/keycodes */
      "FtGj");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function CdkStep_ng_template_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵprojection"](0);
        }
      }

      var _c0 = ["*"];

      var CdkStepHeader = /*#__PURE__*/function () {
        function CdkStepHeader(_elementRef) {
          _classCallCheck2(this, CdkStepHeader);

          this._elementRef = _elementRef;
        }
        /** Focuses the step header. */


        _createClass2(CdkStepHeader, [{
          key: "focus",
          value: function focus() {
            this._elementRef.nativeElement.focus();
          }
        }]);

        return CdkStepHeader;
      }();

      CdkStepHeader.ɵfac = function CdkStepHeader_Factory(t) {
        return new (t || CdkStepHeader)(_angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_5__["ElementRef"]));
      };

      CdkStepHeader.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdefineDirective"]({
        type: CdkStepHeader,
        selectors: [["", "cdkStepHeader", ""]],
        hostAttrs: ["role", "tab"]
      });

      CdkStepHeader.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["ElementRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵsetClassMetadata"](CdkStepHeader, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Directive"],
          args: [{
            selector: '[cdkStepHeader]',
            host: {
              'role': 'tab'
            }
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["ElementRef"]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var CdkStepLabel = function CdkStepLabel(
      /** @docs-private */
      template) {
        _classCallCheck2(this, CdkStepLabel);

        this.template = template;
      };

      CdkStepLabel.ɵfac = function CdkStepLabel_Factory(t) {
        return new (t || CdkStepLabel)(_angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_5__["TemplateRef"]));
      };

      CdkStepLabel.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdefineDirective"]({
        type: CdkStepLabel,
        selectors: [["", "cdkStepLabel", ""]]
      });

      CdkStepLabel.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["TemplateRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵsetClassMetadata"](CdkStepLabel, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Directive"],
          args: [{
            selector: '[cdkStepLabel]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["TemplateRef"]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Used to generate unique ID for each stepper component. */


      var nextId = 0;
      /** Change event emitted on selection changes. */

      var StepperSelectionEvent = function StepperSelectionEvent() {
        _classCallCheck2(this, StepperSelectionEvent);
      };
      /** Enum to represent the different states of the steps. */


      var STEP_STATE = {
        NUMBER: 'number',
        EDIT: 'edit',
        DONE: 'done',
        ERROR: 'error'
      };
      /** InjectionToken that can be used to specify the global stepper options. */

      var STEPPER_GLOBAL_OPTIONS = new _angular_core__WEBPACK_IMPORTED_MODULE_5__["InjectionToken"]('STEPPER_GLOBAL_OPTIONS');
      /**
       * InjectionToken that can be used to specify the global stepper options.
       * @deprecated Use `STEPPER_GLOBAL_OPTIONS` instead.
       * @breaking-change 8.0.0.
       */

      var MAT_STEPPER_GLOBAL_OPTIONS = STEPPER_GLOBAL_OPTIONS;

      var CdkStep = /*#__PURE__*/function () {
        /** @breaking-change 8.0.0 remove the `?` after `stepperOptions` */
        function CdkStep(_stepper, stepperOptions) {
          _classCallCheck2(this, CdkStep);

          this._stepper = _stepper;
          /** Whether user has seen the expanded step content or not. */

          this.interacted = false;
          this._editable = true;
          this._optional = false;
          this._completedOverride = null;
          this._customError = null;
          this._stepperOptions = stepperOptions ? stepperOptions : {};
          this._displayDefaultIndicatorType = this._stepperOptions.displayDefaultIndicatorType !== false;
          this._showError = !!this._stepperOptions.showError;
        }
        /** Whether the user can return to this step once it has been marked as completed. */


        _createClass2(CdkStep, [{
          key: "editable",
          get: function get() {
            return this._editable;
          },
          set: function set(value) {
            this._editable = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceBooleanProperty"])(value);
          }
          /** Whether the completion of step is optional. */

        }, {
          key: "optional",
          get: function get() {
            return this._optional;
          },
          set: function set(value) {
            this._optional = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceBooleanProperty"])(value);
          }
          /** Whether step is marked as completed. */

        }, {
          key: "completed",
          get: function get() {
            return this._completedOverride == null ? this._getDefaultCompleted() : this._completedOverride;
          },
          set: function set(value) {
            this._completedOverride = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceBooleanProperty"])(value);
          }
        }, {
          key: "_getDefaultCompleted",
          value: function _getDefaultCompleted() {
            return this.stepControl ? this.stepControl.valid && this.interacted : this.interacted;
          }
          /** Whether step has an error. */

        }, {
          key: "hasError",
          get: function get() {
            return this._customError == null ? this._getDefaultError() : this._customError;
          },
          set: function set(value) {
            this._customError = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceBooleanProperty"])(value);
          }
        }, {
          key: "_getDefaultError",
          value: function _getDefaultError() {
            return this.stepControl && this.stepControl.invalid && this.interacted;
          }
          /** Selects this step component. */

        }, {
          key: "select",
          value: function select() {
            this._stepper.selected = this;
          }
          /** Resets the step to its initial state. Note that this includes resetting form data. */

        }, {
          key: "reset",
          value: function reset() {
            this.interacted = false;

            if (this._completedOverride != null) {
              this._completedOverride = false;
            }

            if (this._customError != null) {
              this._customError = false;
            }

            if (this.stepControl) {
              this.stepControl.reset();
            }
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges() {
            // Since basically all inputs of the MatStep get proxied through the view down to the
            // underlying MatStepHeader, we have to make sure that change detection runs correctly.
            this._stepper._stateChanged();
          }
        }]);

        return CdkStep;
      }();

      CdkStep.ɵfac = function CdkStep_Factory(t) {
        return new (t || CdkStep)(_angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](Object(_angular_core__WEBPACK_IMPORTED_MODULE_5__["forwardRef"])(function () {
          return CdkStepper;
        })), _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](STEPPER_GLOBAL_OPTIONS, 8));
      };

      CdkStep.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdefineComponent"]({
        type: CdkStep,
        selectors: [["cdk-step"]],
        contentQueries: function CdkStep_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵcontentQuery"](dirIndex, CdkStepLabel, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵloadQuery"]()) && (ctx.stepLabel = _t.first);
          }
        },
        viewQuery: function CdkStep_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵviewQuery"](_angular_core__WEBPACK_IMPORTED_MODULE_5__["TemplateRef"], 3);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵloadQuery"]()) && (ctx.content = _t.first);
          }
        },
        inputs: {
          editable: "editable",
          optional: "optional",
          completed: "completed",
          hasError: "hasError",
          stepControl: "stepControl",
          label: "label",
          errorMessage: "errorMessage",
          ariaLabel: ["aria-label", "ariaLabel"],
          ariaLabelledby: ["aria-labelledby", "ariaLabelledby"],
          state: "state"
        },
        exportAs: ["cdkStep"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵNgOnChangesFeature"]],
        ngContentSelectors: _c0,
        decls: 1,
        vars: 0,
        template: function CdkStep_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵprojectionDef"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](0, CdkStep_ng_template_0_Template, 1, 0, "ng-template");
          }
        },
        encapsulation: 2,
        changeDetection: 0
      });

      CdkStep.ctorParameters = function () {
        return [{
          type: CdkStepper,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Inject"],
            args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_5__["forwardRef"])(function () {
              return CdkStepper;
            })]
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Inject"],
            args: [STEPPER_GLOBAL_OPTIONS]
          }]
        }];
      };

      CdkStep.propDecorators = {
        stepLabel: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["ContentChild"],
          args: [CdkStepLabel]
        }],
        content: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["ViewChild"],
          args: [_angular_core__WEBPACK_IMPORTED_MODULE_5__["TemplateRef"], {
            "static": true
          }]
        }],
        stepControl: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
        }],
        label: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
        }],
        errorMessage: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
        }],
        ariaLabel: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"],
          args: ['aria-label']
        }],
        ariaLabelledby: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"],
          args: ['aria-labelledby']
        }],
        state: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
        }],
        editable: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
        }],
        optional: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
        }],
        completed: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
        }],
        hasError: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵsetClassMetadata"](CdkStep, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Component"],
          args: [{
            selector: 'cdk-step',
            exportAs: 'cdkStep',
            template: '<ng-template><ng-content></ng-content></ng-template>',
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_5__["ViewEncapsulation"].None,
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_5__["ChangeDetectionStrategy"].OnPush
          }]
        }], function () {
          return [{
            type: CdkStepper,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Inject"],
              args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_5__["forwardRef"])(function () {
                return CdkStepper;
              })]
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Inject"],
              args: [STEPPER_GLOBAL_OPTIONS]
            }]
          }];
        }, {
          editable: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
          }],
          optional: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
          }],
          completed: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
          }],
          hasError: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
          }],
          stepLabel: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["ContentChild"],
            args: [CdkStepLabel]
          }],
          content: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["ViewChild"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_5__["TemplateRef"], {
              "static": true
            }]
          }],
          stepControl: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
          }],
          label: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
          }],
          errorMessage: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
          }],
          ariaLabel: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"],
            args: ['aria-label']
          }],
          ariaLabelledby: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"],
            args: ['aria-labelledby']
          }],
          state: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
          }]
        });
      })();

      var CdkStepper = /*#__PURE__*/function () {
        function CdkStepper(_dir, _changeDetectorRef, // @breaking-change 8.0.0 `_elementRef` and `_document` parameters to become required.
        _elementRef, _document) {
          _classCallCheck2(this, CdkStepper);

          this._dir = _dir;
          this._changeDetectorRef = _changeDetectorRef;
          this._elementRef = _elementRef;
          /** Emits when the component is destroyed. */

          this._destroyed = new rxjs__WEBPACK_IMPORTED_MODULE_6__["Subject"]();
          /** Steps that belong to the current stepper, excluding ones from nested steppers. */

          this.steps = new _angular_core__WEBPACK_IMPORTED_MODULE_5__["QueryList"]();
          this._linear = false;
          this._selectedIndex = 0;
          /** Event emitted when the selected step has changed. */

          this.selectionChange = new _angular_core__WEBPACK_IMPORTED_MODULE_5__["EventEmitter"]();
          this._orientation = 'horizontal';
          this._groupId = nextId++;
          this._document = _document;
        }
        /** Whether the validity of previous steps should be checked or not. */


        _createClass2(CdkStepper, [{
          key: "linear",
          get: function get() {
            return this._linear;
          },
          set: function set(value) {
            this._linear = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceBooleanProperty"])(value);
          }
          /** The index of the selected step. */

        }, {
          key: "selectedIndex",
          get: function get() {
            return this._selectedIndex;
          },
          set: function set(index) {
            var newIndex = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceNumberProperty"])(index);

            if (this.steps && this._steps) {
              // Ensure that the index can't be out of bounds.
              if (!this._isValidIndex(index) && (typeof ngDevMode === 'undefined' || ngDevMode)) {
                throw Error('cdkStepper: Cannot assign out-of-bounds value to `selectedIndex`.');
              }

              var selectedStep = this.selected;

              if (selectedStep) {
                // TODO: this should really be called something like `visited` instead. Just because
                // the user has seen the step doesn't guarantee that they've interacted with it.
                selectedStep.interacted = true;
              }

              if (this._selectedIndex !== newIndex && !this._anyControlsInvalidOrPending(newIndex) && (newIndex >= this._selectedIndex || this.steps.toArray()[newIndex].editable)) {
                this._updateSelectedItemIndex(index);
              }
            } else {
              this._selectedIndex = newIndex;
            }
          }
          /** The step that is selected. */

        }, {
          key: "selected",
          get: function get() {
            // @breaking-change 8.0.0 Change return type to `CdkStep | undefined`.
            return this.steps ? this.steps.toArray()[this.selectedIndex] : undefined;
          },
          set: function set(step) {
            this.selectedIndex = this.steps ? this.steps.toArray().indexOf(step) : -1;
          }
        }, {
          key: "ngAfterContentInit",
          value: function ngAfterContentInit() {
            var _this523 = this;

            this._steps.changes.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_7__["startWith"])(this._steps), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_7__["takeUntil"])(this._destroyed)).subscribe(function (steps) {
              _this523.steps.reset(steps.filter(function (step) {
                return step._stepper === _this523;
              }));

              _this523.steps.notifyOnChanges();
            });
          }
        }, {
          key: "ngAfterViewInit",
          value: function ngAfterViewInit() {
            var _this524 = this;

            // Note that while the step headers are content children by default, any components that
            // extend this one might have them as view children. We initialize the keyboard handling in
            // AfterViewInit so we're guaranteed for both view and content children to be defined.
            this._keyManager = new _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_0__["FocusKeyManager"](this._stepHeader).withWrap().withHomeAndEnd().withVerticalOrientation(this._orientation === 'vertical');
            (this._dir ? this._dir.change : Object(rxjs__WEBPACK_IMPORTED_MODULE_6__["of"])()).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_7__["startWith"])(this._layoutDirection()), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_7__["takeUntil"])(this._destroyed)).subscribe(function (direction) {
              return _this524._keyManager.withHorizontalOrientation(direction);
            });

            this._keyManager.updateActiveItem(this._selectedIndex); // No need to `takeUntil` here, because we're the ones destroying `steps`.


            this.steps.changes.subscribe(function () {
              if (!_this524.selected) {
                _this524._selectedIndex = Math.max(_this524._selectedIndex - 1, 0);
              }
            }); // The logic which asserts that the selected index is within bounds doesn't run before the
            // steps are initialized, because we don't how many steps there are yet so we may have an
            // invalid index on init. If that's the case, auto-correct to the default so we don't throw.

            if (!this._isValidIndex(this._selectedIndex)) {
              this._selectedIndex = 0;
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.steps.destroy();

            this._destroyed.next();

            this._destroyed.complete();
          }
          /** Selects and focuses the next step in list. */

        }, {
          key: "next",
          value: function next() {
            this.selectedIndex = Math.min(this._selectedIndex + 1, this.steps.length - 1);
          }
          /** Selects and focuses the previous step in list. */

        }, {
          key: "previous",
          value: function previous() {
            this.selectedIndex = Math.max(this._selectedIndex - 1, 0);
          }
          /** Resets the stepper to its initial state. Note that this includes clearing form data. */

        }, {
          key: "reset",
          value: function reset() {
            this._updateSelectedItemIndex(0);

            this.steps.forEach(function (step) {
              return step.reset();
            });

            this._stateChanged();
          }
          /** Returns a unique id for each step label element. */

        }, {
          key: "_getStepLabelId",
          value: function _getStepLabelId(i) {
            return "cdk-step-label-".concat(this._groupId, "-").concat(i);
          }
          /** Returns unique id for each step content element. */

        }, {
          key: "_getStepContentId",
          value: function _getStepContentId(i) {
            return "cdk-step-content-".concat(this._groupId, "-").concat(i);
          }
          /** Marks the component to be change detected. */

        }, {
          key: "_stateChanged",
          value: function _stateChanged() {
            this._changeDetectorRef.markForCheck();
          }
          /** Returns position state of the step with the given index. */

        }, {
          key: "_getAnimationDirection",
          value: function _getAnimationDirection(index) {
            var position = index - this._selectedIndex;

            if (position < 0) {
              return this._layoutDirection() === 'rtl' ? 'next' : 'previous';
            } else if (position > 0) {
              return this._layoutDirection() === 'rtl' ? 'previous' : 'next';
            }

            return 'current';
          }
          /** Returns the type of icon to be displayed. */

        }, {
          key: "_getIndicatorType",
          value: function _getIndicatorType(index) {
            var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : STEP_STATE.NUMBER;
            var step = this.steps.toArray()[index];

            var isCurrentStep = this._isCurrentStep(index);

            return step._displayDefaultIndicatorType ? this._getDefaultIndicatorLogic(step, isCurrentStep) : this._getGuidelineLogic(step, isCurrentStep, state);
          }
        }, {
          key: "_getDefaultIndicatorLogic",
          value: function _getDefaultIndicatorLogic(step, isCurrentStep) {
            if (step._showError && step.hasError && !isCurrentStep) {
              return STEP_STATE.ERROR;
            } else if (!step.completed || isCurrentStep) {
              return STEP_STATE.NUMBER;
            } else {
              return step.editable ? STEP_STATE.EDIT : STEP_STATE.DONE;
            }
          }
        }, {
          key: "_getGuidelineLogic",
          value: function _getGuidelineLogic(step, isCurrentStep) {
            var state = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : STEP_STATE.NUMBER;

            if (step._showError && step.hasError && !isCurrentStep) {
              return STEP_STATE.ERROR;
            } else if (step.completed && !isCurrentStep) {
              return STEP_STATE.DONE;
            } else if (step.completed && isCurrentStep) {
              return state;
            } else if (step.editable && isCurrentStep) {
              return STEP_STATE.EDIT;
            } else {
              return state;
            }
          }
        }, {
          key: "_isCurrentStep",
          value: function _isCurrentStep(index) {
            return this._selectedIndex === index;
          }
          /** Returns the index of the currently-focused step header. */

        }, {
          key: "_getFocusIndex",
          value: function _getFocusIndex() {
            return this._keyManager ? this._keyManager.activeItemIndex : this._selectedIndex;
          }
        }, {
          key: "_updateSelectedItemIndex",
          value: function _updateSelectedItemIndex(newIndex) {
            var stepsArray = this.steps.toArray();
            this.selectionChange.emit({
              selectedIndex: newIndex,
              previouslySelectedIndex: this._selectedIndex,
              selectedStep: stepsArray[newIndex],
              previouslySelectedStep: stepsArray[this._selectedIndex]
            }); // If focus is inside the stepper, move it to the next header, otherwise it may become
            // lost when the active step content is hidden. We can't be more granular with the check
            // (e.g. checking whether focus is inside the active step), because we don't have a
            // reference to the elements that are rendering out the content.

            this._containsFocus() ? this._keyManager.setActiveItem(newIndex) : this._keyManager.updateActiveItem(newIndex);
            this._selectedIndex = newIndex;

            this._stateChanged();
          }
        }, {
          key: "_onKeydown",
          value: function _onKeydown(event) {
            var hasModifier = Object(_angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["hasModifierKey"])(event);
            var keyCode = event.keyCode;
            var manager = this._keyManager;

            if (manager.activeItemIndex != null && !hasModifier && (keyCode === _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["SPACE"] || keyCode === _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["ENTER"])) {
              this.selectedIndex = manager.activeItemIndex;
              event.preventDefault();
            } else {
              manager.onKeydown(event);
            }
          }
        }, {
          key: "_anyControlsInvalidOrPending",
          value: function _anyControlsInvalidOrPending(index) {
            if (this._linear && index >= 0) {
              return this.steps.toArray().slice(0, index).some(function (step) {
                var control = step.stepControl;
                var isIncomplete = control ? control.invalid || control.pending || !step.interacted : !step.completed;
                return isIncomplete && !step.optional && !step._completedOverride;
              });
            }

            return false;
          }
        }, {
          key: "_layoutDirection",
          value: function _layoutDirection() {
            return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';
          }
          /** Checks whether the stepper contains the focused element. */

        }, {
          key: "_containsFocus",
          value: function _containsFocus() {
            if (!this._document || !this._elementRef) {
              return false;
            }

            var stepperElement = this._elementRef.nativeElement;
            var focusedElement = this._document.activeElement;
            return stepperElement === focusedElement || stepperElement.contains(focusedElement);
          }
          /** Checks whether the passed-in index is a valid step index. */

        }, {
          key: "_isValidIndex",
          value: function _isValidIndex(index) {
            return index > -1 && (!this.steps || index < this.steps.length);
          }
        }]);

        return CdkStepper;
      }();

      CdkStepper.ɵfac = function CdkStepper_Factory(t) {
        return new (t || CdkStepper)(_angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_1__["Directionality"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_5__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_5__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]));
      };

      CdkStepper.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdefineDirective"]({
        type: CdkStepper,
        selectors: [["", "cdkStepper", ""]],
        contentQueries: function CdkStepper_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵcontentQuery"](dirIndex, CdkStep, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵcontentQuery"](dirIndex, CdkStepHeader, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵloadQuery"]()) && (ctx._steps = _t);
            _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵloadQuery"]()) && (ctx._stepHeader = _t);
          }
        },
        inputs: {
          linear: "linear",
          selectedIndex: "selectedIndex",
          selected: "selected"
        },
        outputs: {
          selectionChange: "selectionChange"
        },
        exportAs: ["cdkStepper"]
      });

      CdkStepper.ctorParameters = function () {
        return [{
          type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_1__["Directionality"],
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Optional"]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["ChangeDetectorRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["ElementRef"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
          }]
        }];
      };

      CdkStepper.propDecorators = {
        _steps: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["ContentChildren"],
          args: [CdkStep, {
            descendants: true
          }]
        }],
        _stepHeader: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["ContentChildren"],
          args: [CdkStepHeader, {
            descendants: true
          }]
        }],
        linear: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
        }],
        selectedIndex: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
        }],
        selected: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
        }],
        selectionChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵsetClassMetadata"](CdkStepper, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Directive"],
          args: [{
            selector: '[cdkStepper]',
            exportAs: 'cdkStepper'
          }]
        }], function () {
          return [{
            type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_1__["Directionality"],
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Optional"]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["ChangeDetectorRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["ElementRef"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
            }]
          }];
        }, {
          selectionChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Output"]
          }],
          linear: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
          }],
          selectedIndex: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
          }],
          selected: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
          }],
          _steps: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["ContentChildren"],
            args: [CdkStep, {
              descendants: true
            }]
          }],
          _stepHeader: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["ContentChildren"],
            args: [CdkStepHeader, {
              descendants: true
            }]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Button that moves to the next step in a stepper workflow. */


      var CdkStepperNext = /*#__PURE__*/function () {
        function CdkStepperNext(_stepper) {
          _classCallCheck2(this, CdkStepperNext);

          this._stepper = _stepper;
          /** Type of the next button. Defaults to "submit" if not specified. */

          this.type = 'submit';
        } // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.
        // In Ivy the `host` bindings will be merged when this class is extended, whereas in
        // ViewEngine they're overwritten.
        // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.
        // tslint:disable-next-line:no-host-decorator-in-concrete


        _createClass2(CdkStepperNext, [{
          key: "_handleClick",
          value: function _handleClick() {
            this._stepper.next();
          }
        }]);

        return CdkStepperNext;
      }();

      CdkStepperNext.ɵfac = function CdkStepperNext_Factory(t) {
        return new (t || CdkStepperNext)(_angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](CdkStepper));
      };

      CdkStepperNext.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdefineDirective"]({
        type: CdkStepperNext,
        selectors: [["button", "cdkStepperNext", ""]],
        hostVars: 1,
        hostBindings: function CdkStepperNext_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("click", function CdkStepperNext_click_HostBindingHandler() {
              return ctx._handleClick();
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵhostProperty"]("type", ctx.type);
          }
        },
        inputs: {
          type: "type"
        }
      });

      CdkStepperNext.ctorParameters = function () {
        return [{
          type: CdkStepper
        }];
      };

      CdkStepperNext.propDecorators = {
        type: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
        }],
        _handleClick: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["HostListener"],
          args: ['click']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵsetClassMetadata"](CdkStepperNext, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Directive"],
          args: [{
            selector: 'button[cdkStepperNext]',
            host: {
              '[type]': 'type'
            }
          }]
        }], function () {
          return [{
            type: CdkStepper
          }];
        }, {
          type: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
          }],
          // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.
          // In Ivy the `host` bindings will be merged when this class is extended, whereas in
          // ViewEngine they're overwritten.
          // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.
          // tslint:disable-next-line:no-host-decorator-in-concrete
          _handleClick: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["HostListener"],
            args: ['click']
          }]
        });
      })();
      /** Button that moves to the previous step in a stepper workflow. */


      var CdkStepperPrevious = /*#__PURE__*/function () {
        function CdkStepperPrevious(_stepper) {
          _classCallCheck2(this, CdkStepperPrevious);

          this._stepper = _stepper;
          /** Type of the previous button. Defaults to "button" if not specified. */

          this.type = 'button';
        } // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.
        // In Ivy the `host` bindings will be merged when this class is extended, whereas in
        // ViewEngine they're overwritten.
        // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.
        // tslint:disable-next-line:no-host-decorator-in-concrete


        _createClass2(CdkStepperPrevious, [{
          key: "_handleClick",
          value: function _handleClick() {
            this._stepper.previous();
          }
        }]);

        return CdkStepperPrevious;
      }();

      CdkStepperPrevious.ɵfac = function CdkStepperPrevious_Factory(t) {
        return new (t || CdkStepperPrevious)(_angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](CdkStepper));
      };

      CdkStepperPrevious.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdefineDirective"]({
        type: CdkStepperPrevious,
        selectors: [["button", "cdkStepperPrevious", ""]],
        hostVars: 1,
        hostBindings: function CdkStepperPrevious_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("click", function CdkStepperPrevious_click_HostBindingHandler() {
              return ctx._handleClick();
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵhostProperty"]("type", ctx.type);
          }
        },
        inputs: {
          type: "type"
        }
      });

      CdkStepperPrevious.ctorParameters = function () {
        return [{
          type: CdkStepper
        }];
      };

      CdkStepperPrevious.propDecorators = {
        type: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
        }],
        _handleClick: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["HostListener"],
          args: ['click']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵsetClassMetadata"](CdkStepperPrevious, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Directive"],
          args: [{
            selector: 'button[cdkStepperPrevious]',
            host: {
              '[type]': 'type'
            }
          }]
        }], function () {
          return [{
            type: CdkStepper
          }];
        }, {
          type: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["Input"]
          }],
          // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.
          // In Ivy the `host` bindings will be merged when this class is extended, whereas in
          // ViewEngine they're overwritten.
          // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.
          // tslint:disable-next-line:no-host-decorator-in-concrete
          _handleClick: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["HostListener"],
            args: ['click']
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var CdkStepperModule = function CdkStepperModule() {
        _classCallCheck2(this, CdkStepperModule);
      };

      CdkStepperModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdefineNgModule"]({
        type: CdkStepperModule
      });
      CdkStepperModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdefineInjector"]({
        factory: function CdkStepperModule_Factory(t) {
          return new (t || CdkStepperModule)();
        },
        imports: [[_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_1__["BidiModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵsetNgModuleScope"](CdkStepperModule, {
          declarations: function declarations() {
            return [CdkStep, CdkStepper, CdkStepHeader, CdkStepLabel, CdkStepperNext, CdkStepperPrevious];
          },
          imports: function imports() {
            return [_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_1__["BidiModule"]];
          },
          exports: function exports() {
            return [CdkStep, CdkStepper, CdkStepHeader, CdkStepLabel, CdkStepperNext, CdkStepperPrevious];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵsetClassMetadata"](CdkStepperModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_5__["NgModule"],
          args: [{
            imports: [_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_1__["BidiModule"]],
            exports: [CdkStep, CdkStepper, CdkStepHeader, CdkStepLabel, CdkStepperNext, CdkStepperPrevious],
            declarations: [CdkStep, CdkStepper, CdkStepHeader, CdkStepLabel, CdkStepperNext, CdkStepperPrevious]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=stepper.js.map

      /***/

    },

    /***/
    "B0QO":
    /*!************************************************************!*\
      !*** ./node_modules/aws-sdk/lib/signers/request_signer.js ***!
      \************************************************************/

    /*! no static exports found */

    /***/
    function B0QO(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ../core */
      "QsWE");

      var inherit = AWS.util.inherit;
      /**
       * @api private
       */

      AWS.Signers.RequestSigner = inherit({
        constructor: function RequestSigner(request) {
          this.request = request;
        },
        setServiceClientId: function setServiceClientId(id) {
          this.serviceClientId = id;
        },
        getServiceClientId: function getServiceClientId() {
          return this.serviceClientId;
        }
      });

      AWS.Signers.RequestSigner.getVersion = function getVersion(version) {
        switch (version) {
          case 'v2':
            return AWS.Signers.V2;

          case 'v3':
            return AWS.Signers.V3;

          case 's3v4':
            return AWS.Signers.V4;

          case 'v4':
            return AWS.Signers.V4;

          case 's3':
            return AWS.Signers.S3;

          case 'v3https':
            return AWS.Signers.V3Https;
        }

        throw new Error('Unknown signing version ' + version);
      };

      __webpack_require__(
      /*! ./v2 */
      "D8LC");

      __webpack_require__(
      /*! ./v3 */
      "N2+Z");

      __webpack_require__(
      /*! ./v3https */
      "VNF9");

      __webpack_require__(
      /*! ./v4 */
      "KIbX");

      __webpack_require__(
      /*! ./s3 */
      "SysZ");

      __webpack_require__(
      /*! ./presign */
      "F442");
      /***/

    },

    /***/
    "B55N":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/ja.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function B55N(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Japanese [ja]
      //! author : LI Long : https://github.com/baryon
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var ja = moment.defineLocale('ja', {
          eras: [{
            since: '2019-05-01',
            offset: 1,
            name: '令和',
            narrow: '㋿',
            abbr: 'R'
          }, {
            since: '1989-01-08',
            until: '2019-04-30',
            offset: 1,
            name: '平成',
            narrow: '㍻',
            abbr: 'H'
          }, {
            since: '1926-12-25',
            until: '1989-01-07',
            offset: 1,
            name: '昭和',
            narrow: '㍼',
            abbr: 'S'
          }, {
            since: '1912-07-30',
            until: '1926-12-24',
            offset: 1,
            name: '大正',
            narrow: '㍽',
            abbr: 'T'
          }, {
            since: '1873-01-01',
            until: '1912-07-29',
            offset: 6,
            name: '明治',
            narrow: '㍾',
            abbr: 'M'
          }, {
            since: '0001-01-01',
            until: '1873-12-31',
            offset: 1,
            name: '西暦',
            narrow: 'AD',
            abbr: 'AD'
          }, {
            since: '0000-12-31',
            until: -Infinity,
            offset: 1,
            name: '紀元前',
            narrow: 'BC',
            abbr: 'BC'
          }],
          eraYearOrdinalRegex: /(元|\d+)年/,
          eraYearOrdinalParse: function eraYearOrdinalParse(input, match) {
            return match[1] === '元' ? 1 : parseInt(match[1] || input, 10);
          },
          months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
          monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
          weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),
          weekdaysShort: '日_月_火_水_木_金_土'.split('_'),
          weekdaysMin: '日_月_火_水_木_金_土'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY/MM/DD',
            LL: 'YYYY年M月D日',
            LLL: 'YYYY年M月D日 HH:mm',
            LLLL: 'YYYY年M月D日 dddd HH:mm',
            l: 'YYYY/MM/DD',
            ll: 'YYYY年M月D日',
            lll: 'YYYY年M月D日 HH:mm',
            llll: 'YYYY年M月D日(ddd) HH:mm'
          },
          meridiemParse: /午前|午後/i,
          isPM: function isPM(input) {
            return input === '午後';
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 12) {
              return '午前';
            } else {
              return '午後';
            }
          },
          calendar: {
            sameDay: '[今日] LT',
            nextDay: '[明日] LT',
            nextWeek: function nextWeek(now) {
              if (now.week() !== this.week()) {
                return '[来週]dddd LT';
              } else {
                return 'dddd LT';
              }
            },
            lastDay: '[昨日] LT',
            lastWeek: function lastWeek(now) {
              if (this.week() !== now.week()) {
                return '[先週]dddd LT';
              } else {
                return 'dddd LT';
              }
            },
            sameElse: 'L'
          },
          dayOfMonthOrdinalParse: /\d{1,2}日/,
          ordinal: function ordinal(number, period) {
            switch (period) {
              case 'y':
                return number === 1 ? '元年' : number + '年';

              case 'd':
              case 'D':
              case 'DDD':
                return number + '日';

              default:
                return number;
            }
          },
          relativeTime: {
            future: '%s後',
            past: '%s前',
            s: '数秒',
            ss: '%d秒',
            m: '1分',
            mm: '%d分',
            h: '1時間',
            hh: '%d時間',
            d: '1日',
            dd: '%d日',
            M: '1ヶ月',
            MM: '%dヶ月',
            y: '1年',
            yy: '%d年'
          }
        });
        return ja;
      });
      /***/

    },

    /***/
    "BFxc":
    /*!*******************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/takeLast.js ***!
      \*******************************************************************/

    /*! exports provided: takeLast */

    /***/
    function BFxc(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "takeLast", function () {
        return takeLast;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");
      /* harmony import */


      var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/ArgumentOutOfRangeError */
      "4I5i");
      /* harmony import */


      var _observable_empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../observable/empty */
      "EY2u");

      function takeLast(count) {
        return function takeLastOperatorFunction(source) {
          if (count === 0) {
            return Object(_observable_empty__WEBPACK_IMPORTED_MODULE_2__["empty"])();
          } else {
            return source.lift(new TakeLastOperator(count));
          }
        };
      }

      var TakeLastOperator = /*#__PURE__*/function () {
        function TakeLastOperator(total) {
          _classCallCheck2(this, TakeLastOperator);

          this.total = total;

          if (this.total < 0) {
            throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_1__["ArgumentOutOfRangeError"]();
          }
        }

        _createClass2(TakeLastOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new TakeLastSubscriber(subscriber, this.total));
          }
        }]);

        return TakeLastOperator;
      }();

      var TakeLastSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_11) {
        _inherits2(TakeLastSubscriber, _Subscriber__WEBPACK_11);

        var _super210 = _createSuper(TakeLastSubscriber);

        function TakeLastSubscriber(destination, total) {
          var _this525;

          _classCallCheck2(this, TakeLastSubscriber);

          _this525 = _super210.call(this, destination);
          _this525.total = total;
          _this525.ring = new Array();
          _this525.count = 0;
          return _this525;
        }

        _createClass2(TakeLastSubscriber, [{
          key: "_next",
          value: function _next(value) {
            var ring = this.ring;
            var total = this.total;
            var count = this.count++;

            if (ring.length < total) {
              ring.push(value);
            } else {
              var index = count % total;
              ring[index] = value;
            }
          }
        }, {
          key: "_complete",
          value: function _complete() {
            var destination = this.destination;
            var count = this.count;

            if (count > 0) {
              var total = this.count >= this.total ? this.total : this.count;
              var ring = this.ring;

              for (var i = 0; i < total; i++) {
                var idx = count++ % total;
                destination.next(ring[idx]);
              }
            }

            destination.complete();
          }
        }]);

        return TakeLastSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=takeLast.js.map

      /***/

    },

    /***/
    "BGYI":
    /*!***************************************************!*\
      !*** ./node_modules/aws-sdk/lib/protocol/json.js ***!
      \***************************************************/

    /*! no static exports found */

    /***/
    function BGYI(module, exports, __webpack_require__) {
      var util = __webpack_require__(
      /*! ../util */
      "BaN1");

      var JsonBuilder = __webpack_require__(
      /*! ../json/builder */
      "JWCV");

      var JsonParser = __webpack_require__(
      /*! ../json/parser */
      "henJ");

      var populateHostPrefix = __webpack_require__(
      /*! ./helpers */
      "lSFX").populateHostPrefix;

      function buildRequest(req) {
        var httpRequest = req.httpRequest;
        var api = req.service.api;
        var target = api.targetPrefix + '.' + api.operations[req.operation].name;
        var version = api.jsonVersion || '1.0';
        var input = api.operations[req.operation].input;
        var builder = new JsonBuilder();
        if (version === 1) version = '1.0';
        httpRequest.body = builder.build(req.params || {}, input);
        httpRequest.headers['Content-Type'] = 'application/x-amz-json-' + version;
        httpRequest.headers['X-Amz-Target'] = target;
        populateHostPrefix(req);
      }

      function extractError(resp) {
        var error = {};
        var httpResponse = resp.httpResponse;
        error.code = httpResponse.headers['x-amzn-errortype'] || 'UnknownError';

        if (typeof error.code === 'string') {
          error.code = error.code.split(':')[0];
        }

        if (httpResponse.body.length > 0) {
          try {
            var e = JSON.parse(httpResponse.body.toString());
            var code = e.__type || e.code || e.Code;

            if (code) {
              error.code = code.split('#').pop();
            }

            if (error.code === 'RequestEntityTooLarge') {
              error.message = 'Request body must be less than 1 MB';
            } else {
              error.message = e.message || e.Message || null;
            }
          } catch (e) {
            error.statusCode = httpResponse.statusCode;
            error.message = httpResponse.statusMessage;
          }
        } else {
          error.statusCode = httpResponse.statusCode;
          error.message = httpResponse.statusCode.toString();
        }

        resp.error = util.error(new Error(), error);
      }

      function extractData(resp) {
        var body = resp.httpResponse.body.toString() || '{}';

        if (resp.request.service.config.convertResponseTypes === false) {
          resp.data = JSON.parse(body);
        } else {
          var operation = resp.request.service.api.operations[resp.request.operation];
          var shape = operation.output || {};
          var parser = new JsonParser();
          resp.data = parser.parse(body, shape);
        }
      }
      /**
       * @api private
       */


      module.exports = {
        buildRequest: buildRequest,
        extractError: extractError,
        extractData: extractData
      };
      /***/
    },

    /***/
    "BVg3":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/is.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function BVg3(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Icelandic [is]
      //! author : Hinrik Örn Sigurðsson : https://github.com/hinrik
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        function plural(n) {
          if (n % 100 === 11) {
            return true;
          } else if (n % 10 === 1) {
            return false;
          }

          return true;
        }

        function translate(number, withoutSuffix, key, isFuture) {
          var result = number + ' ';

          switch (key) {
            case 's':
              return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';

            case 'ss':
              if (plural(number)) {
                return result + (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum');
              }

              return result + 'sekúnda';

            case 'm':
              return withoutSuffix ? 'mínúta' : 'mínútu';

            case 'mm':
              if (plural(number)) {
                return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');
              } else if (withoutSuffix) {
                return result + 'mínúta';
              }

              return result + 'mínútu';

            case 'hh':
              if (plural(number)) {
                return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');
              }

              return result + 'klukkustund';

            case 'd':
              if (withoutSuffix) {
                return 'dagur';
              }

              return isFuture ? 'dag' : 'degi';

            case 'dd':
              if (plural(number)) {
                if (withoutSuffix) {
                  return result + 'dagar';
                }

                return result + (isFuture ? 'daga' : 'dögum');
              } else if (withoutSuffix) {
                return result + 'dagur';
              }

              return result + (isFuture ? 'dag' : 'degi');

            case 'M':
              if (withoutSuffix) {
                return 'mánuður';
              }

              return isFuture ? 'mánuð' : 'mánuði';

            case 'MM':
              if (plural(number)) {
                if (withoutSuffix) {
                  return result + 'mánuðir';
                }

                return result + (isFuture ? 'mánuði' : 'mánuðum');
              } else if (withoutSuffix) {
                return result + 'mánuður';
              }

              return result + (isFuture ? 'mánuð' : 'mánuði');

            case 'y':
              return withoutSuffix || isFuture ? 'ár' : 'ári';

            case 'yy':
              if (plural(number)) {
                return result + (withoutSuffix || isFuture ? 'ár' : 'árum');
              }

              return result + (withoutSuffix || isFuture ? 'ár' : 'ári');
          }
        }

        var is = moment.defineLocale('is', {
          months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),
          monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),
          weekdays: 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),
          weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'),
          weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),
          longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY [kl.] H:mm',
            LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm'
          },
          calendar: {
            sameDay: '[í dag kl.] LT',
            nextDay: '[á morgun kl.] LT',
            nextWeek: 'dddd [kl.] LT',
            lastDay: '[í gær kl.] LT',
            lastWeek: '[síðasta] dddd [kl.] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'eftir %s',
            past: 'fyrir %s síðan',
            s: translate,
            ss: translate,
            m: translate,
            mm: translate,
            h: 'klukkustund',
            hh: translate,
            d: translate,
            dd: translate,
            M: translate,
            MM: translate,
            y: translate,
            yy: translate
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return is;
      });
      /***/

    },

    /***/
    "BaN1":
    /*!******************************************!*\
      !*** ./node_modules/aws-sdk/lib/util.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function BaN1(module, exports, __webpack_require__) {
      /* eslint guard-for-in:0 */
      var AWS;
      /**
       * A set of utility methods for use with the AWS SDK.
       *
       * @!attribute abort
       *   Return this value from an iterator function {each} or {arrayEach}
       *   to break out of the iteration.
       *   @example Breaking out of an iterator function
       *     AWS.util.each({a: 1, b: 2, c: 3}, function(key, value) {
       *       if (key == 'b') return AWS.util.abort;
       *     });
       *   @see each
       *   @see arrayEach
       * @api private
       */

      var util = {
        environment: 'nodejs',
        engine: function engine() {
          if (util.isBrowser() && typeof navigator !== 'undefined') {
            return navigator.userAgent;
          } else {
            var engine = process.platform + '/' + process.version;

            if (process.env.AWS_EXECUTION_ENV) {
              engine += ' exec-env/' + process.env.AWS_EXECUTION_ENV;
            }

            return engine;
          }
        },
        userAgent: function userAgent() {
          var name = util.environment;

          var agent = 'aws-sdk-' + name + '/' + __webpack_require__(
          /*! ./core */
          "QsWE").VERSION;

          if (name === 'nodejs') agent += ' ' + util.engine();
          return agent;
        },
        uriEscape: function uriEscape(string) {
          var output = encodeURIComponent(string);
          output = output.replace(/[^A-Za-z0-9_.~\-%]+/g, escape); // AWS percent-encodes some extra non-standard characters in a URI

          output = output.replace(/[*]/g, function (ch) {
            return '%' + ch.charCodeAt(0).toString(16).toUpperCase();
          });
          return output;
        },
        uriEscapePath: function uriEscapePath(string) {
          var parts = [];
          util.arrayEach(string.split('/'), function (part) {
            parts.push(util.uriEscape(part));
          });
          return parts.join('/');
        },
        urlParse: function urlParse(url) {
          return util.url.parse(url);
        },
        urlFormat: function urlFormat(url) {
          return util.url.format(url);
        },
        queryStringParse: function queryStringParse(qs) {
          return util.querystring.parse(qs);
        },
        queryParamsToString: function queryParamsToString(params) {
          var items = [];
          var escape = util.uriEscape;
          var sortedKeys = Object.keys(params).sort();
          util.arrayEach(sortedKeys, function (name) {
            var value = params[name];
            var ename = escape(name);
            var result = ename + '=';

            if (Array.isArray(value)) {
              var vals = [];
              util.arrayEach(value, function (item) {
                vals.push(escape(item));
              });
              result = ename + '=' + vals.sort().join('&' + ename + '=');
            } else if (value !== undefined && value !== null) {
              result = ename + '=' + escape(value);
            }

            items.push(result);
          });
          return items.join('&');
        },
        readFileSync: function readFileSync(path) {
          if (util.isBrowser()) return null;
          return __webpack_require__(
          /*! fs */
          1).readFileSync(path, 'utf-8');
        },
        base64: {
          encode: function encode64(string) {
            if (typeof string === 'number') {
              throw util.error(new Error('Cannot base64 encode number ' + string));
            }

            if (string === null || typeof string === 'undefined') {
              return string;
            }

            var buf = util.buffer.toBuffer(string);
            return buf.toString('base64');
          },
          decode: function decode64(string) {
            if (typeof string === 'number') {
              throw util.error(new Error('Cannot base64 decode number ' + string));
            }

            if (string === null || typeof string === 'undefined') {
              return string;
            }

            return util.buffer.toBuffer(string, 'base64');
          }
        },
        buffer: {
          /**
           * Buffer constructor for Node buffer and buffer pollyfill
           */
          toBuffer: function toBuffer(data, encoding) {
            return typeof util.Buffer.from === 'function' && util.Buffer.from !== Uint8Array.from ? util.Buffer.from(data, encoding) : new util.Buffer(data, encoding);
          },
          alloc: function alloc(size, fill, encoding) {
            if (typeof size !== 'number') {
              throw new Error('size passed to alloc must be a number.');
            }

            if (typeof util.Buffer.alloc === 'function') {
              return util.Buffer.alloc(size, fill, encoding);
            } else {
              var buf = new util.Buffer(size);

              if (fill !== undefined && typeof buf.fill === 'function') {
                buf.fill(fill, undefined, undefined, encoding);
              }

              return buf;
            }
          },
          toStream: function toStream(buffer) {
            if (!util.Buffer.isBuffer(buffer)) buffer = util.buffer.toBuffer(buffer);
            var readable = new util.stream.Readable();
            var pos = 0;

            readable._read = function (size) {
              if (pos >= buffer.length) return readable.push(null);
              var end = pos + size;
              if (end > buffer.length) end = buffer.length;
              readable.push(buffer.slice(pos, end));
              pos = end;
            };

            return readable;
          },

          /**
           * Concatenates a list of Buffer objects.
           */
          concat: function concat(buffers) {
            var length = 0,
                offset = 0,
                buffer = null,
                i;

            for (i = 0; i < buffers.length; i++) {
              length += buffers[i].length;
            }

            buffer = util.buffer.alloc(length);

            for (i = 0; i < buffers.length; i++) {
              buffers[i].copy(buffer, offset);
              offset += buffers[i].length;
            }

            return buffer;
          }
        },
        string: {
          byteLength: function byteLength(string) {
            if (string === null || string === undefined) return 0;
            if (typeof string === 'string') string = util.buffer.toBuffer(string);

            if (typeof string.byteLength === 'number') {
              return string.byteLength;
            } else if (typeof string.length === 'number') {
              return string.length;
            } else if (typeof string.size === 'number') {
              return string.size;
            } else if (typeof string.path === 'string') {
              return __webpack_require__(
              /*! fs */
              1).lstatSync(string.path).size;
            } else {
              throw util.error(new Error('Cannot determine length of ' + string), {
                object: string
              });
            }
          },
          upperFirst: function upperFirst(string) {
            return string[0].toUpperCase() + string.substr(1);
          },
          lowerFirst: function lowerFirst(string) {
            return string[0].toLowerCase() + string.substr(1);
          }
        },
        ini: {
          parse: function string(ini) {
            var currentSection,
                map = {};
            util.arrayEach(ini.split(/\r?\n/), function (line) {
              line = line.split(/(^|\s)[;#]/)[0]; // remove comments

              var section = line.match(/^\s*\[([^\[\]]+)\]\s*$/);

              if (section) {
                currentSection = section[1];

                if (currentSection === '__proto__' || currentSection.split(/\s/)[1] === '__proto__') {
                  throw util.error(new Error('Cannot load profile name \'' + currentSection + '\' from shared ini file.'));
                }
              } else if (currentSection) {
                var item = line.match(/^\s*(.+?)\s*=\s*(.+?)\s*$/);

                if (item) {
                  map[currentSection] = map[currentSection] || {};
                  map[currentSection][item[1]] = item[2];
                }
              }
            });
            return map;
          }
        },
        fn: {
          noop: function noop() {},
          callback: function callback(err) {
            if (err) throw err;
          },

          /**
           * Turn a synchronous function into as "async" function by making it call
           * a callback. The underlying function is called with all but the last argument,
           * which is treated as the callback. The callback is passed passed a first argument
           * of null on success to mimick standard node callbacks.
           */
          makeAsync: function makeAsync(fn, expectedArgs) {
            if (expectedArgs && expectedArgs <= fn.length) {
              return fn;
            }

            return function () {
              var args = Array.prototype.slice.call(arguments, 0);
              var callback = args.pop();
              var result = fn.apply(null, args);
              callback(result);
            };
          }
        },

        /**
         * Date and time utility functions.
         */
        date: {
          /**
           * @return [Date] the current JavaScript date object. Since all
           *   AWS services rely on this date object, you can override
           *   this function to provide a special time value to AWS service
           *   requests.
           */
          getDate: function getDate() {
            if (!AWS) AWS = __webpack_require__(
            /*! ./core */
            "QsWE");

            if (AWS.config.systemClockOffset) {
              // use offset when non-zero
              return new Date(new Date().getTime() + AWS.config.systemClockOffset);
            } else {
              return new Date();
            }
          },

          /**
           * @return [String] the date in ISO-8601 format
           */
          iso8601: function iso8601(date) {
            if (date === undefined) {
              date = util.date.getDate();
            }

            return date.toISOString().replace(/\.\d{3}Z$/, 'Z');
          },

          /**
           * @return [String] the date in RFC 822 format
           */
          rfc822: function rfc822(date) {
            if (date === undefined) {
              date = util.date.getDate();
            }

            return date.toUTCString();
          },

          /**
           * @return [Integer] the UNIX timestamp value for the current time
           */
          unixTimestamp: function unixTimestamp(date) {
            if (date === undefined) {
              date = util.date.getDate();
            }

            return date.getTime() / 1000;
          },

          /**
           * @param [String,number,Date] date
           * @return [Date]
           */
          from: function format(date) {
            if (typeof date === 'number') {
              return new Date(date * 1000); // unix timestamp
            } else {
              return new Date(date);
            }
          },

          /**
           * Given a Date or date-like value, this function formats the
           * date into a string of the requested value.
           * @param [String,number,Date] date
           * @param [String] formatter Valid formats are:
           #   * 'iso8601'
           #   * 'rfc822'
           #   * 'unixTimestamp'
           * @return [String]
           */
          format: function format(date, formatter) {
            if (!formatter) formatter = 'iso8601';
            return util.date[formatter](util.date.from(date));
          },
          parseTimestamp: function parseTimestamp(value) {
            if (typeof value === 'number') {
              // unix timestamp (number)
              return new Date(value * 1000);
            } else if (value.match(/^\d+$/)) {
              // unix timestamp
              return new Date(value * 1000);
            } else if (value.match(/^\d{4}/)) {
              // iso8601
              return new Date(value);
            } else if (value.match(/^\w{3},/)) {
              // rfc822
              return new Date(value);
            } else {
              throw util.error(new Error('unhandled timestamp format: ' + value), {
                code: 'TimestampParserError'
              });
            }
          }
        },
        crypto: {
          crc32Table: [0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D],
          crc32: function crc32(data) {
            var tbl = util.crypto.crc32Table;
            var crc = 0 ^ -1;

            if (typeof data === 'string') {
              data = util.buffer.toBuffer(data);
            }

            for (var i = 0; i < data.length; i++) {
              var code = data.readUInt8(i);
              crc = crc >>> 8 ^ tbl[(crc ^ code) & 0xFF];
            }

            return (crc ^ -1) >>> 0;
          },
          hmac: function hmac(key, string, digest, fn) {
            if (!digest) digest = 'binary';

            if (digest === 'buffer') {
              digest = undefined;
            }

            if (!fn) fn = 'sha256';
            if (typeof string === 'string') string = util.buffer.toBuffer(string);
            return util.crypto.lib.createHmac(fn, key).update(string).digest(digest);
          },
          md5: function md5(data, digest, callback) {
            return util.crypto.hash('md5', data, digest, callback);
          },
          sha256: function sha256(data, digest, callback) {
            return util.crypto.hash('sha256', data, digest, callback);
          },
          hash: function hash(algorithm, data, digest, callback) {
            var hash = util.crypto.createHash(algorithm);

            if (!digest) {
              digest = 'binary';
            }

            if (digest === 'buffer') {
              digest = undefined;
            }

            if (typeof data === 'string') data = util.buffer.toBuffer(data);
            var sliceFn = util.arraySliceFn(data);
            var isBuffer = util.Buffer.isBuffer(data); //Identifying objects with an ArrayBuffer as buffers

            if (util.isBrowser() && typeof ArrayBuffer !== 'undefined' && data && data.buffer instanceof ArrayBuffer) isBuffer = true;

            if (callback && typeof data === 'object' && typeof data.on === 'function' && !isBuffer) {
              data.on('data', function (chunk) {
                hash.update(chunk);
              });
              data.on('error', function (err) {
                callback(err);
              });
              data.on('end', function () {
                callback(null, hash.digest(digest));
              });
            } else if (callback && sliceFn && !isBuffer && typeof FileReader !== 'undefined') {
              // this might be a File/Blob
              var index = 0,
                  size = 1024 * 512;
              var reader = new FileReader();

              reader.onerror = function () {
                callback(new Error('Failed to read data.'));
              };

              reader.onload = function () {
                var buf = new util.Buffer(new Uint8Array(reader.result));
                hash.update(buf);
                index += buf.length;

                reader._continueReading();
              };

              reader._continueReading = function () {
                if (index >= data.size) {
                  callback(null, hash.digest(digest));
                  return;
                }

                var back = index + size;
                if (back > data.size) back = data.size;
                reader.readAsArrayBuffer(sliceFn.call(data, index, back));
              };

              reader._continueReading();
            } else {
              if (util.isBrowser() && typeof data === 'object' && !isBuffer) {
                data = new util.Buffer(new Uint8Array(data));
              }

              var out = hash.update(data).digest(digest);
              if (callback) callback(null, out);
              return out;
            }
          },
          toHex: function toHex(data) {
            var out = [];

            for (var i = 0; i < data.length; i++) {
              out.push(('0' + data.charCodeAt(i).toString(16)).substr(-2, 2));
            }

            return out.join('');
          },
          createHash: function createHash(algorithm) {
            return util.crypto.lib.createHash(algorithm);
          }
        },

        /** @!ignore */

        /* Abort constant */
        abort: {},
        each: function each(object, iterFunction) {
          for (var key in object) {
            if (Object.prototype.hasOwnProperty.call(object, key)) {
              var ret = iterFunction.call(this, key, object[key]);
              if (ret === util.abort) break;
            }
          }
        },
        arrayEach: function arrayEach(array, iterFunction) {
          for (var idx in array) {
            if (Object.prototype.hasOwnProperty.call(array, idx)) {
              var ret = iterFunction.call(this, array[idx], parseInt(idx, 10));
              if (ret === util.abort) break;
            }
          }
        },
        update: function update(obj1, obj2) {
          util.each(obj2, function iterator(key, item) {
            obj1[key] = item;
          });
          return obj1;
        },
        merge: function merge(obj1, obj2) {
          return util.update(util.copy(obj1), obj2);
        },
        copy: function copy(object) {
          if (object === null || object === undefined) return object;
          var dupe = {}; // jshint forin:false

          for (var key in object) {
            dupe[key] = object[key];
          }

          return dupe;
        },
        isEmpty: function isEmpty(obj) {
          for (var prop in obj) {
            if (Object.prototype.hasOwnProperty.call(obj, prop)) {
              return false;
            }
          }

          return true;
        },
        arraySliceFn: function arraySliceFn(obj) {
          var fn = obj.slice || obj.webkitSlice || obj.mozSlice;
          return typeof fn === 'function' ? fn : null;
        },
        isType: function isType(obj, type) {
          // handle cross-"frame" objects
          if (typeof type === 'function') type = util.typeName(type);
          return Object.prototype.toString.call(obj) === '[object ' + type + ']';
        },
        typeName: function typeName(type) {
          if (Object.prototype.hasOwnProperty.call(type, 'name')) return type.name;
          var str = type.toString();
          var match = str.match(/^\s*function (.+)\(/);
          return match ? match[1] : str;
        },
        error: function error(err, options) {
          var originalError = null;

          if (typeof err.message === 'string' && err.message !== '') {
            if (typeof options === 'string' || options && options.message) {
              originalError = util.copy(err);
              originalError.message = err.message;
            }
          }

          err.message = err.message || null;

          if (typeof options === 'string') {
            err.message = options;
          } else if (typeof options === 'object' && options !== null) {
            util.update(err, options);
            if (options.message) err.message = options.message;
            if (options.code || options.name) err.code = options.code || options.name;
            if (options.stack) err.stack = options.stack;
          }

          if (typeof Object.defineProperty === 'function') {
            Object.defineProperty(err, 'name', {
              writable: true,
              enumerable: false
            });
            Object.defineProperty(err, 'message', {
              enumerable: true
            });
          }

          err.name = String(options && options.name || err.name || err.code || 'Error');
          err.time = new Date();
          if (originalError) err.originalError = originalError;
          return err;
        },

        /**
         * @api private
         */
        inherit: function inherit(klass, features) {
          var newObject = null;

          if (features === undefined) {
            features = klass;
            klass = Object;
            newObject = {};
          } else {
            var ctor = function ConstructorWrapper() {};

            ctor.prototype = klass.prototype;
            newObject = new ctor();
          } // constructor not supplied, create pass-through ctor


          if (features.constructor === Object) {
            features.constructor = function () {
              if (klass !== Object) {
                return klass.apply(this, arguments);
              }
            };
          }

          features.constructor.prototype = newObject;
          util.update(features.constructor.prototype, features);
          features.constructor.__super__ = klass;
          return features.constructor;
        },

        /**
         * @api private
         */
        mixin: function mixin() {
          var klass = arguments[0];

          for (var i = 1; i < arguments.length; i++) {
            // jshint forin:false
            for (var prop in arguments[i].prototype) {
              var fn = arguments[i].prototype[prop];

              if (prop !== 'constructor') {
                klass.prototype[prop] = fn;
              }
            }
          }

          return klass;
        },

        /**
         * @api private
         */
        hideProperties: function hideProperties(obj, props) {
          if (typeof Object.defineProperty !== 'function') return;
          util.arrayEach(props, function (key) {
            Object.defineProperty(obj, key, {
              enumerable: false,
              writable: true,
              configurable: true
            });
          });
        },

        /**
         * @api private
         */
        property: function property(obj, name, value, enumerable, isValue) {
          var opts = {
            configurable: true,
            enumerable: enumerable !== undefined ? enumerable : true
          };

          if (typeof value === 'function' && !isValue) {
            opts.get = value;
          } else {
            opts.value = value;
            opts.writable = true;
          }

          Object.defineProperty(obj, name, opts);
        },

        /**
         * @api private
         */
        memoizedProperty: function memoizedProperty(obj, name, get, enumerable) {
          var cachedValue = null; // build enumerable attribute for each value with lazy accessor.

          util.property(obj, name, function () {
            if (cachedValue === null) {
              cachedValue = get();
            }

            return cachedValue;
          }, enumerable);
        },

        /**
         * TODO Remove in major version revision
         * This backfill populates response data without the
         * top-level payload name.
         *
         * @api private
         */
        hoistPayloadMember: function hoistPayloadMember(resp) {
          var req = resp.request;
          var operationName = req.operation;
          var operation = req.service.api.operations[operationName];
          var output = operation.output;

          if (output.payload && !operation.hasEventOutput) {
            var payloadMember = output.members[output.payload];
            var responsePayload = resp.data[output.payload];

            if (payloadMember.type === 'structure') {
              util.each(responsePayload, function (key, value) {
                util.property(resp.data, key, value, false);
              });
            }
          }
        },

        /**
         * Compute SHA-256 checksums of streams
         *
         * @api private
         */
        computeSha256: function computeSha256(body, done) {
          if (util.isNode()) {
            var Stream = util.stream.Stream;

            var fs = __webpack_require__(
            /*! fs */
            1);

            if (typeof Stream === 'function' && body instanceof Stream) {
              if (typeof body.path === 'string') {
                // assume file object
                var settings = {};

                if (typeof body.start === 'number') {
                  settings.start = body.start;
                }

                if (typeof body.end === 'number') {
                  settings.end = body.end;
                }

                body = fs.createReadStream(body.path, settings);
              } else {
                // TODO support other stream types
                return done(new Error('Non-file stream objects are ' + 'not supported with SigV4'));
              }
            }
          }

          util.crypto.sha256(body, 'hex', function (err, sha) {
            if (err) done(err);else done(null, sha);
          });
        },

        /**
         * @api private
         */
        isClockSkewed: function isClockSkewed(serverTime) {
          if (serverTime) {
            util.property(AWS.config, 'isClockSkewed', Math.abs(new Date().getTime() - serverTime) >= 300000, false);
            return AWS.config.isClockSkewed;
          }
        },
        applyClockOffset: function applyClockOffset(serverTime) {
          if (serverTime) AWS.config.systemClockOffset = serverTime - new Date().getTime();
        },

        /**
         * @api private
         */
        extractRequestId: function extractRequestId(resp) {
          var requestId = resp.httpResponse.headers['x-amz-request-id'] || resp.httpResponse.headers['x-amzn-requestid'];

          if (!requestId && resp.data && resp.data.ResponseMetadata) {
            requestId = resp.data.ResponseMetadata.RequestId;
          }

          if (requestId) {
            resp.requestId = requestId;
          }

          if (resp.error) {
            resp.error.requestId = requestId;
          }
        },

        /**
         * @api private
         */
        addPromises: function addPromises(constructors, PromiseDependency) {
          var deletePromises = false;

          if (PromiseDependency === undefined && AWS && AWS.config) {
            PromiseDependency = AWS.config.getPromisesDependency();
          }

          if (PromiseDependency === undefined && typeof Promise !== 'undefined') {
            PromiseDependency = Promise;
          }

          if (typeof PromiseDependency !== 'function') deletePromises = true;
          if (!Array.isArray(constructors)) constructors = [constructors];

          for (var ind = 0; ind < constructors.length; ind++) {
            var constructor = constructors[ind];

            if (deletePromises) {
              if (constructor.deletePromisesFromClass) {
                constructor.deletePromisesFromClass();
              }
            } else if (constructor.addPromisesToClass) {
              constructor.addPromisesToClass(PromiseDependency);
            }
          }
        },

        /**
         * @api private
         * Return a function that will return a promise whose fate is decided by the
         * callback behavior of the given method with `methodName`. The method to be
         * promisified should conform to node.js convention of accepting a callback as
         * last argument and calling that callback with error as the first argument
         * and success value on the second argument.
         */
        promisifyMethod: function promisifyMethod(methodName, PromiseDependency) {
          return function promise() {
            var self = this;
            var args = Array.prototype.slice.call(arguments);
            return new PromiseDependency(function (resolve, reject) {
              args.push(function (err, data) {
                if (err) {
                  reject(err);
                } else {
                  resolve(data);
                }
              });
              self[methodName].apply(self, args);
            });
          };
        },

        /**
         * @api private
         */
        isDualstackAvailable: function isDualstackAvailable(service) {
          if (!service) return false;

          var metadata = __webpack_require__(
          /*! ../apis/metadata.json */
          "FQVY");

          if (typeof service !== 'string') service = service.serviceIdentifier;
          if (typeof service !== 'string' || !metadata.hasOwnProperty(service)) return false;
          return !!metadata[service].dualstackAvailable;
        },

        /**
         * @api private
         */
        calculateRetryDelay: function calculateRetryDelay(retryCount, retryDelayOptions, err) {
          if (!retryDelayOptions) retryDelayOptions = {};
          var customBackoff = retryDelayOptions.customBackoff || null;

          if (typeof customBackoff === 'function') {
            return customBackoff(retryCount, err);
          }

          var base = typeof retryDelayOptions.base === 'number' ? retryDelayOptions.base : 100;
          var delay = Math.random() * (Math.pow(2, retryCount) * base);
          return delay;
        },

        /**
         * @api private
         */
        handleRequestWithRetries: function handleRequestWithRetries(httpRequest, options, cb) {
          if (!options) options = {};
          var http = AWS.HttpClient.getInstance();
          var httpOptions = options.httpOptions || {};
          var retryCount = 0;

          var errCallback = function errCallback(err) {
            var maxRetries = options.maxRetries || 0;
            if (err && err.code === 'TimeoutError') err.retryable = true; // Call `calculateRetryDelay()` only when relevant, see #3401

            if (err && err.retryable && retryCount < maxRetries) {
              var delay = util.calculateRetryDelay(retryCount, options.retryDelayOptions, err);

              if (delay >= 0) {
                retryCount++;
                setTimeout(sendRequest, delay + (err.retryAfter || 0));
                return;
              }
            }

            cb(err);
          };

          var sendRequest = function sendRequest() {
            var data = '';
            http.handleRequest(httpRequest, httpOptions, function (httpResponse) {
              httpResponse.on('data', function (chunk) {
                data += chunk.toString();
              });
              httpResponse.on('end', function () {
                var statusCode = httpResponse.statusCode;

                if (statusCode < 300) {
                  cb(null, data);
                } else {
                  var retryAfter = parseInt(httpResponse.headers['retry-after'], 10) * 1000 || 0;
                  var err = util.error(new Error(), {
                    statusCode: statusCode,
                    retryable: statusCode >= 500 || statusCode === 429
                  });
                  if (retryAfter && err.retryable) err.retryAfter = retryAfter;
                  errCallback(err);
                }
              });
            }, errCallback);
          };

          AWS.util.defer(sendRequest);
        },

        /**
         * @api private
         */
        uuid: {
          v4: function uuidV4() {
            return __webpack_require__(
            /*! uuid */
            "nXTE").v4();
          }
        },

        /**
         * @api private
         */
        convertPayloadToString: function convertPayloadToString(resp) {
          var req = resp.request;
          var operation = req.operation;
          var rules = req.service.api.operations[operation].output || {};

          if (rules.payload && resp.data[rules.payload]) {
            resp.data[rules.payload] = resp.data[rules.payload].toString();
          }
        },

        /**
         * @api private
         */
        defer: function defer(callback) {
          if (typeof process === 'object' && typeof process.nextTick === 'function') {
            process.nextTick(callback);
          } else if (typeof setImmediate === 'function') {
            setImmediate(callback);
          } else {
            setTimeout(callback, 0);
          }
        },

        /**
         * @api private
         */
        getRequestPayloadShape: function getRequestPayloadShape(req) {
          var operations = req.service.api.operations;
          if (!operations) return undefined;
          var operation = (operations || {})[req.operation];
          if (!operation || !operation.input || !operation.input.payload) return undefined;
          return operation.input.members[operation.input.payload];
        },
        getProfilesFromSharedConfig: function getProfilesFromSharedConfig(iniLoader, filename) {
          var profiles = {};
          var profilesFromConfig = {};

          if (process.env[util.configOptInEnv]) {
            var profilesFromConfig = iniLoader.loadFrom({
              isConfig: true,
              filename: process.env[util.sharedConfigFileEnv]
            });
          }

          var profilesFromCreds = {};

          try {
            var profilesFromCreds = iniLoader.loadFrom({
              filename: filename || process.env[util.configOptInEnv] && process.env[util.sharedCredentialsFileEnv]
            });
          } catch (error) {
            // if using config, assume it is fully descriptive without a credentials file:
            if (!process.env[util.configOptInEnv]) throw error;
          }

          for (var i = 0, profileNames = Object.keys(profilesFromConfig); i < profileNames.length; i++) {
            profiles[profileNames[i]] = objectAssign(profiles[profileNames[i]] || {}, profilesFromConfig[profileNames[i]]);
          }

          for (var i = 0, profileNames = Object.keys(profilesFromCreds); i < profileNames.length; i++) {
            profiles[profileNames[i]] = objectAssign(profiles[profileNames[i]] || {}, profilesFromCreds[profileNames[i]]);
          }

          return profiles;
          /**
           * Roughly the semantics of `Object.assign(target, source)`
           */

          function objectAssign(target, source) {
            for (var i = 0, keys = Object.keys(source); i < keys.length; i++) {
              target[keys[i]] = source[keys[i]];
            }

            return target;
          }
        },

        /**
         * @api private
         */
        ARN: {
          validate: function validateARN(str) {
            return str && str.indexOf('arn:') === 0 && str.split(':').length >= 6;
          },
          parse: function parseARN(arn) {
            var matched = arn.split(':');
            return {
              partition: matched[1],
              service: matched[2],
              region: matched[3],
              accountId: matched[4],
              resource: matched.slice(5).join(':')
            };
          },
          build: function buildARN(arnObject) {
            if (arnObject.service === undefined || arnObject.region === undefined || arnObject.accountId === undefined || arnObject.resource === undefined) throw util.error(new Error('Input ARN object is invalid'));
            return 'arn:' + (arnObject.partition || 'aws') + ':' + arnObject.service + ':' + arnObject.region + ':' + arnObject.accountId + ':' + arnObject.resource;
          }
        },

        /**
         * @api private
         */
        defaultProfile: 'default',

        /**
         * @api private
         */
        configOptInEnv: 'AWS_SDK_LOAD_CONFIG',

        /**
         * @api private
         */
        sharedCredentialsFileEnv: 'AWS_SHARED_CREDENTIALS_FILE',

        /**
         * @api private
         */
        sharedConfigFileEnv: 'AWS_CONFIG_FILE',

        /**
         * @api private
         */
        imdsDisabledEnv: 'AWS_EC2_METADATA_DISABLED'
      };
      /**
       * @api private
       */

      module.exports = util;
      /***/
    },

    /***/
    "BxO9":
    /*!***********************************************************!*\
      !*** ./node_modules/aws-sdk/apis/sts-2011-06-15.min.json ***!
      \***********************************************************/

    /*! exports provided: version, metadata, operations, shapes, default */

    /***/
    function BxO9(module) {
      module.exports = JSON.parse("{\"version\":\"2.0\",\"metadata\":{\"apiVersion\":\"2011-06-15\",\"endpointPrefix\":\"sts\",\"globalEndpoint\":\"sts.amazonaws.com\",\"protocol\":\"query\",\"serviceAbbreviation\":\"AWS STS\",\"serviceFullName\":\"AWS Security Token Service\",\"serviceId\":\"STS\",\"signatureVersion\":\"v4\",\"uid\":\"sts-2011-06-15\",\"xmlNamespace\":\"https://sts.amazonaws.com/doc/2011-06-15/\"},\"operations\":{\"AssumeRole\":{\"input\":{\"type\":\"structure\",\"required\":[\"RoleArn\",\"RoleSessionName\"],\"members\":{\"RoleArn\":{},\"RoleSessionName\":{},\"PolicyArns\":{\"shape\":\"S4\"},\"Policy\":{},\"DurationSeconds\":{\"type\":\"integer\"},\"Tags\":{\"shape\":\"S8\"},\"TransitiveTagKeys\":{\"type\":\"list\",\"member\":{}},\"ExternalId\":{},\"SerialNumber\":{},\"TokenCode\":{}}},\"output\":{\"resultWrapper\":\"AssumeRoleResult\",\"type\":\"structure\",\"members\":{\"Credentials\":{\"shape\":\"Sh\"},\"AssumedRoleUser\":{\"shape\":\"Sm\"},\"PackedPolicySize\":{\"type\":\"integer\"}}}},\"AssumeRoleWithSAML\":{\"input\":{\"type\":\"structure\",\"required\":[\"RoleArn\",\"PrincipalArn\",\"SAMLAssertion\"],\"members\":{\"RoleArn\":{},\"PrincipalArn\":{},\"SAMLAssertion\":{},\"PolicyArns\":{\"shape\":\"S4\"},\"Policy\":{},\"DurationSeconds\":{\"type\":\"integer\"}}},\"output\":{\"resultWrapper\":\"AssumeRoleWithSAMLResult\",\"type\":\"structure\",\"members\":{\"Credentials\":{\"shape\":\"Sh\"},\"AssumedRoleUser\":{\"shape\":\"Sm\"},\"PackedPolicySize\":{\"type\":\"integer\"},\"Subject\":{},\"SubjectType\":{},\"Issuer\":{},\"Audience\":{},\"NameQualifier\":{}}}},\"AssumeRoleWithWebIdentity\":{\"input\":{\"type\":\"structure\",\"required\":[\"RoleArn\",\"RoleSessionName\",\"WebIdentityToken\"],\"members\":{\"RoleArn\":{},\"RoleSessionName\":{},\"WebIdentityToken\":{},\"ProviderId\":{},\"PolicyArns\":{\"shape\":\"S4\"},\"Policy\":{},\"DurationSeconds\":{\"type\":\"integer\"}}},\"output\":{\"resultWrapper\":\"AssumeRoleWithWebIdentityResult\",\"type\":\"structure\",\"members\":{\"Credentials\":{\"shape\":\"Sh\"},\"SubjectFromWebIdentityToken\":{},\"AssumedRoleUser\":{\"shape\":\"Sm\"},\"PackedPolicySize\":{\"type\":\"integer\"},\"Provider\":{},\"Audience\":{}}}},\"DecodeAuthorizationMessage\":{\"input\":{\"type\":\"structure\",\"required\":[\"EncodedMessage\"],\"members\":{\"EncodedMessage\":{}}},\"output\":{\"resultWrapper\":\"DecodeAuthorizationMessageResult\",\"type\":\"structure\",\"members\":{\"DecodedMessage\":{}}}},\"GetAccessKeyInfo\":{\"input\":{\"type\":\"structure\",\"required\":[\"AccessKeyId\"],\"members\":{\"AccessKeyId\":{}}},\"output\":{\"resultWrapper\":\"GetAccessKeyInfoResult\",\"type\":\"structure\",\"members\":{\"Account\":{}}}},\"GetCallerIdentity\":{\"input\":{\"type\":\"structure\",\"members\":{}},\"output\":{\"resultWrapper\":\"GetCallerIdentityResult\",\"type\":\"structure\",\"members\":{\"UserId\":{},\"Account\":{},\"Arn\":{}}}},\"GetFederationToken\":{\"input\":{\"type\":\"structure\",\"required\":[\"Name\"],\"members\":{\"Name\":{},\"Policy\":{},\"PolicyArns\":{\"shape\":\"S4\"},\"DurationSeconds\":{\"type\":\"integer\"},\"Tags\":{\"shape\":\"S8\"}}},\"output\":{\"resultWrapper\":\"GetFederationTokenResult\",\"type\":\"structure\",\"members\":{\"Credentials\":{\"shape\":\"Sh\"},\"FederatedUser\":{\"type\":\"structure\",\"required\":[\"FederatedUserId\",\"Arn\"],\"members\":{\"FederatedUserId\":{},\"Arn\":{}}},\"PackedPolicySize\":{\"type\":\"integer\"}}}},\"GetSessionToken\":{\"input\":{\"type\":\"structure\",\"members\":{\"DurationSeconds\":{\"type\":\"integer\"},\"SerialNumber\":{},\"TokenCode\":{}}},\"output\":{\"resultWrapper\":\"GetSessionTokenResult\",\"type\":\"structure\",\"members\":{\"Credentials\":{\"shape\":\"Sh\"}}}}},\"shapes\":{\"S4\":{\"type\":\"list\",\"member\":{\"type\":\"structure\",\"members\":{\"arn\":{}}}},\"S8\":{\"type\":\"list\",\"member\":{\"type\":\"structure\",\"required\":[\"Key\",\"Value\"],\"members\":{\"Key\":{},\"Value\":{}}}},\"Sh\":{\"type\":\"structure\",\"required\":[\"AccessKeyId\",\"SecretAccessKey\",\"SessionToken\",\"Expiration\"],\"members\":{\"AccessKeyId\":{},\"SecretAccessKey\":{},\"SessionToken\":{},\"Expiration\":{\"type\":\"timestamp\"}}},\"Sm\":{\"type\":\"structure\",\"required\":[\"AssumedRoleId\",\"Arn\"],\"members\":{\"AssumedRoleId\":{},\"Arn\":{}}}}}");
      /***/
    },

    /***/
    "ByF4":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/fo.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function ByF4(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Faroese [fo]
      //! author : Ragnar Johannesen : https://github.com/ragnar123
      //! author : Kristian Sakarisson : https://github.com/sakarisson
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var fo = moment.defineLocale('fo', {
          months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
          monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
          weekdays: 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),
          weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'),
          weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D. MMMM, YYYY HH:mm'
          },
          calendar: {
            sameDay: '[Í dag kl.] LT',
            nextDay: '[Í morgin kl.] LT',
            nextWeek: 'dddd [kl.] LT',
            lastDay: '[Í gjár kl.] LT',
            lastWeek: '[síðstu] dddd [kl] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'um %s',
            past: '%s síðani',
            s: 'fá sekund',
            ss: '%d sekundir',
            m: 'ein minuttur',
            mm: '%d minuttir',
            h: 'ein tími',
            hh: '%d tímar',
            d: 'ein dagur',
            dd: '%d dagar',
            M: 'ein mánaður',
            MM: '%d mánaðir',
            y: 'eitt ár',
            yy: '%d ár'
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return fo;
      });
      /***/

    },

    /***/
    "CFft":
    /*!********************************************************!*\
      !*** ./node_modules/aws-sdk/lib/xml/browser_parser.js ***!
      \********************************************************/

    /*! no static exports found */

    /***/
    function CFft(module, exports, __webpack_require__) {
      var util = __webpack_require__(
      /*! ../util */
      "BaN1");

      var Shape = __webpack_require__(
      /*! ../model/shape */
      "nyFZ");

      function DomXmlParser() {}

      DomXmlParser.prototype.parse = function (xml, shape) {
        if (xml.replace(/^\s+/, '') === '') return {};
        var result, error;

        try {
          if (window.DOMParser) {
            try {
              var parser = new DOMParser();
              result = parser.parseFromString(xml, 'text/xml');
            } catch (syntaxError) {
              throw util.error(new Error('Parse error in document'), {
                originalError: syntaxError,
                code: 'XMLParserError',
                retryable: true
              });
            }

            if (result.documentElement === null) {
              throw util.error(new Error('Cannot parse empty document.'), {
                code: 'XMLParserError',
                retryable: true
              });
            }

            var isError = result.getElementsByTagName('parsererror')[0];

            if (isError && (isError.parentNode === result || isError.parentNode.nodeName === 'body' || isError.parentNode.parentNode === result || isError.parentNode.parentNode.nodeName === 'body')) {
              var errorElement = isError.getElementsByTagName('div')[0] || isError;
              throw util.error(new Error(errorElement.textContent || 'Parser error in document'), {
                code: 'XMLParserError',
                retryable: true
              });
            }
          } else if (window.ActiveXObject) {
            result = new window.ActiveXObject('Microsoft.XMLDOM');
            result.async = false;

            if (!result.loadXML(xml)) {
              throw util.error(new Error('Parse error in document'), {
                code: 'XMLParserError',
                retryable: true
              });
            }
          } else {
            throw new Error('Cannot load XML parser');
          }
        } catch (e) {
          error = e;
        }

        if (result && result.documentElement && !error) {
          var data = parseXml(result.documentElement, shape);
          var metadata = getElementByTagName(result.documentElement, 'ResponseMetadata');

          if (metadata) {
            data.ResponseMetadata = parseXml(metadata, {});
          }

          return data;
        } else if (error) {
          throw util.error(error || new Error(), {
            code: 'XMLParserError',
            retryable: true
          });
        } else {
          // empty xml document
          return {};
        }
      };

      function getElementByTagName(xml, tag) {
        var elements = xml.getElementsByTagName(tag);

        for (var i = 0, iLen = elements.length; i < iLen; i++) {
          if (elements[i].parentNode === xml) {
            return elements[i];
          }
        }
      }

      function parseXml(xml, shape) {
        if (!shape) shape = {};

        switch (shape.type) {
          case 'structure':
            return parseStructure(xml, shape);

          case 'map':
            return parseMap(xml, shape);

          case 'list':
            return parseList(xml, shape);

          case undefined:
          case null:
            return parseUnknown(xml);

          default:
            return parseScalar(xml, shape);
        }
      }

      function parseStructure(xml, shape) {
        var data = {};
        if (xml === null) return data;
        util.each(shape.members, function (memberName, memberShape) {
          if (memberShape.isXmlAttribute) {
            if (Object.prototype.hasOwnProperty.call(xml.attributes, memberShape.name)) {
              var value = xml.attributes[memberShape.name].value;
              data[memberName] = parseXml({
                textContent: value
              }, memberShape);
            }
          } else {
            var xmlChild = memberShape.flattened ? xml : getElementByTagName(xml, memberShape.name);

            if (xmlChild) {
              data[memberName] = parseXml(xmlChild, memberShape);
            } else if (!memberShape.flattened && memberShape.type === 'list' && !shape.api.xmlNoDefaultLists) {
              data[memberName] = memberShape.defaultValue;
            }
          }
        });
        return data;
      }

      function parseMap(xml, shape) {
        var data = {};
        var xmlKey = shape.key.name || 'key';
        var xmlValue = shape.value.name || 'value';
        var tagName = shape.flattened ? shape.name : 'entry';
        var child = xml.firstElementChild;

        while (child) {
          if (child.nodeName === tagName) {
            var key = getElementByTagName(child, xmlKey).textContent;
            var value = getElementByTagName(child, xmlValue);
            data[key] = parseXml(value, shape.value);
          }

          child = child.nextElementSibling;
        }

        return data;
      }

      function parseList(xml, shape) {
        var data = [];
        var tagName = shape.flattened ? shape.name : shape.member.name || 'member';
        var child = xml.firstElementChild;

        while (child) {
          if (child.nodeName === tagName) {
            data.push(parseXml(child, shape.member));
          }

          child = child.nextElementSibling;
        }

        return data;
      }

      function parseScalar(xml, shape) {
        if (xml.getAttribute) {
          var encoding = xml.getAttribute('encoding');

          if (encoding === 'base64') {
            shape = new Shape.create({
              type: encoding
            });
          }
        }

        var text = xml.textContent;
        if (text === '') text = null;

        if (typeof shape.toType === 'function') {
          return shape.toType(text);
        } else {
          return text;
        }
      }

      function parseUnknown(xml) {
        if (xml === undefined || xml === null) return ''; // empty object

        if (!xml.firstElementChild) {
          if (xml.parentNode.parentNode === null) return {};
          if (xml.childNodes.length === 0) return '';else return xml.textContent;
        } // object, parse as structure


        var shape = {
          type: 'structure',
          members: {}
        };
        var child = xml.firstElementChild;

        while (child) {
          var tag = child.nodeName;

          if (Object.prototype.hasOwnProperty.call(shape.members, tag)) {
            // multiple tags of the same name makes it a list
            shape.members[tag].type = 'list';
          } else {
            shape.members[tag] = {
              name: tag
            };
          }

          child = child.nextElementSibling;
        }

        return parseStructure(xml, shape);
      }
      /**
       * @api private
       */


      module.exports = DomXmlParser;
      /***/
    },

    /***/
    "CMyj":
    /*!****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/isIterable.js ***!
      \****************************************************************/

    /*! exports provided: isIterable */

    /***/
    function CMyj(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isIterable", function () {
        return isIterable;
      });
      /* harmony import */


      var _symbol_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../symbol/iterator */
      "Lhse");

      function isIterable(input) {
        return input && typeof input[_symbol_iterator__WEBPACK_IMPORTED_MODULE_0__["iterator"]] === 'function';
      } //# sourceMappingURL=isIterable.js.map

      /***/

    },

    /***/
    "CNpV":
    /*!*******************************************!*\
      !*** ./node_modules/jmespath/jmespath.js ***!
      \*******************************************/

    /*! no static exports found */

    /***/
    function CNpV(module, exports, __webpack_require__) {
      (function (exports) {
        "use strict";

        function isArray(obj) {
          if (obj !== null) {
            return Object.prototype.toString.call(obj) === "[object Array]";
          } else {
            return false;
          }
        }

        function isObject(obj) {
          if (obj !== null) {
            return Object.prototype.toString.call(obj) === "[object Object]";
          } else {
            return false;
          }
        }

        function strictDeepEqual(first, second) {
          // Check the scalar case first.
          if (first === second) {
            return true;
          } // Check if they are the same type.


          var firstType = Object.prototype.toString.call(first);

          if (firstType !== Object.prototype.toString.call(second)) {
            return false;
          } // We know that first and second have the same type so we can just check the
          // first type from now on.


          if (isArray(first) === true) {
            // Short circuit if they're not the same length;
            if (first.length !== second.length) {
              return false;
            }

            for (var i = 0; i < first.length; i++) {
              if (strictDeepEqual(first[i], second[i]) === false) {
                return false;
              }
            }

            return true;
          }

          if (isObject(first) === true) {
            // An object is equal if it has the same key/value pairs.
            var keysSeen = {};

            for (var key in first) {
              if (hasOwnProperty.call(first, key)) {
                if (strictDeepEqual(first[key], second[key]) === false) {
                  return false;
                }

                keysSeen[key] = true;
              }
            } // Now check that there aren't any keys in second that weren't
            // in first.


            for (var key2 in second) {
              if (hasOwnProperty.call(second, key2)) {
                if (keysSeen[key2] !== true) {
                  return false;
                }
              }
            }

            return true;
          }

          return false;
        }

        function isFalse(obj) {
          // From the spec:
          // A false value corresponds to the following values:
          // Empty list
          // Empty object
          // Empty string
          // False boolean
          // null value
          // First check the scalar values.
          if (obj === "" || obj === false || obj === null) {
            return true;
          } else if (isArray(obj) && obj.length === 0) {
            // Check for an empty array.
            return true;
          } else if (isObject(obj)) {
            // Check for an empty object.
            for (var key in obj) {
              // If there are any keys, then
              // the object is not empty so the object
              // is not false.
              if (obj.hasOwnProperty(key)) {
                return false;
              }
            }

            return true;
          } else {
            return false;
          }
        }

        function objValues(obj) {
          var keys = Object.keys(obj);
          var values = [];

          for (var i = 0; i < keys.length; i++) {
            values.push(obj[keys[i]]);
          }

          return values;
        }

        function merge(a, b) {
          var merged = {};

          for (var key in a) {
            merged[key] = a[key];
          }

          for (var key2 in b) {
            merged[key2] = b[key2];
          }

          return merged;
        }

        var trimLeft;

        if (typeof String.prototype.trimLeft === "function") {
          trimLeft = function trimLeft(str) {
            return str.trimLeft();
          };
        } else {
          trimLeft = function trimLeft(str) {
            return str.match(/^\s*(.*)/)[1];
          };
        } // Type constants used to define functions.


        var TYPE_NUMBER = 0;
        var TYPE_ANY = 1;
        var TYPE_STRING = 2;
        var TYPE_ARRAY = 3;
        var TYPE_OBJECT = 4;
        var TYPE_BOOLEAN = 5;
        var TYPE_EXPREF = 6;
        var TYPE_NULL = 7;
        var TYPE_ARRAY_NUMBER = 8;
        var TYPE_ARRAY_STRING = 9;
        var TOK_EOF = "EOF";
        var TOK_UNQUOTEDIDENTIFIER = "UnquotedIdentifier";
        var TOK_QUOTEDIDENTIFIER = "QuotedIdentifier";
        var TOK_RBRACKET = "Rbracket";
        var TOK_RPAREN = "Rparen";
        var TOK_COMMA = "Comma";
        var TOK_COLON = "Colon";
        var TOK_RBRACE = "Rbrace";
        var TOK_NUMBER = "Number";
        var TOK_CURRENT = "Current";
        var TOK_EXPREF = "Expref";
        var TOK_PIPE = "Pipe";
        var TOK_OR = "Or";
        var TOK_AND = "And";
        var TOK_EQ = "EQ";
        var TOK_GT = "GT";
        var TOK_LT = "LT";
        var TOK_GTE = "GTE";
        var TOK_LTE = "LTE";
        var TOK_NE = "NE";
        var TOK_FLATTEN = "Flatten";
        var TOK_STAR = "Star";
        var TOK_FILTER = "Filter";
        var TOK_DOT = "Dot";
        var TOK_NOT = "Not";
        var TOK_LBRACE = "Lbrace";
        var TOK_LBRACKET = "Lbracket";
        var TOK_LPAREN = "Lparen";
        var TOK_LITERAL = "Literal"; // The "&", "[", "<", ">" tokens
        // are not in basicToken because
        // there are two token variants
        // ("&&", "[?", "<=", ">=").  This is specially handled
        // below.

        var basicTokens = {
          ".": TOK_DOT,
          "*": TOK_STAR,
          ",": TOK_COMMA,
          ":": TOK_COLON,
          "{": TOK_LBRACE,
          "}": TOK_RBRACE,
          "]": TOK_RBRACKET,
          "(": TOK_LPAREN,
          ")": TOK_RPAREN,
          "@": TOK_CURRENT
        };
        var operatorStartToken = {
          "<": true,
          ">": true,
          "=": true,
          "!": true
        };
        var skipChars = {
          " ": true,
          "\t": true,
          "\n": true
        };

        function isAlpha(ch) {
          return ch >= "a" && ch <= "z" || ch >= "A" && ch <= "Z" || ch === "_";
        }

        function isNum(ch) {
          return ch >= "0" && ch <= "9" || ch === "-";
        }

        function isAlphaNum(ch) {
          return ch >= "a" && ch <= "z" || ch >= "A" && ch <= "Z" || ch >= "0" && ch <= "9" || ch === "_";
        }

        function Lexer() {}

        Lexer.prototype = {
          tokenize: function tokenize(stream) {
            var tokens = [];
            this._current = 0;
            var start;
            var identifier;
            var token;

            while (this._current < stream.length) {
              if (isAlpha(stream[this._current])) {
                start = this._current;
                identifier = this._consumeUnquotedIdentifier(stream);
                tokens.push({
                  type: TOK_UNQUOTEDIDENTIFIER,
                  value: identifier,
                  start: start
                });
              } else if (basicTokens[stream[this._current]] !== undefined) {
                tokens.push({
                  type: basicTokens[stream[this._current]],
                  value: stream[this._current],
                  start: this._current
                });
                this._current++;
              } else if (isNum(stream[this._current])) {
                token = this._consumeNumber(stream);
                tokens.push(token);
              } else if (stream[this._current] === "[") {
                // No need to increment this._current.  This happens
                // in _consumeLBracket
                token = this._consumeLBracket(stream);
                tokens.push(token);
              } else if (stream[this._current] === "\"") {
                start = this._current;
                identifier = this._consumeQuotedIdentifier(stream);
                tokens.push({
                  type: TOK_QUOTEDIDENTIFIER,
                  value: identifier,
                  start: start
                });
              } else if (stream[this._current] === "'") {
                start = this._current;
                identifier = this._consumeRawStringLiteral(stream);
                tokens.push({
                  type: TOK_LITERAL,
                  value: identifier,
                  start: start
                });
              } else if (stream[this._current] === "`") {
                start = this._current;

                var literal = this._consumeLiteral(stream);

                tokens.push({
                  type: TOK_LITERAL,
                  value: literal,
                  start: start
                });
              } else if (operatorStartToken[stream[this._current]] !== undefined) {
                tokens.push(this._consumeOperator(stream));
              } else if (skipChars[stream[this._current]] !== undefined) {
                // Ignore whitespace.
                this._current++;
              } else if (stream[this._current] === "&") {
                start = this._current;
                this._current++;

                if (stream[this._current] === "&") {
                  this._current++;
                  tokens.push({
                    type: TOK_AND,
                    value: "&&",
                    start: start
                  });
                } else {
                  tokens.push({
                    type: TOK_EXPREF,
                    value: "&",
                    start: start
                  });
                }
              } else if (stream[this._current] === "|") {
                start = this._current;
                this._current++;

                if (stream[this._current] === "|") {
                  this._current++;
                  tokens.push({
                    type: TOK_OR,
                    value: "||",
                    start: start
                  });
                } else {
                  tokens.push({
                    type: TOK_PIPE,
                    value: "|",
                    start: start
                  });
                }
              } else {
                var error = new Error("Unknown character:" + stream[this._current]);
                error.name = "LexerError";
                throw error;
              }
            }

            return tokens;
          },
          _consumeUnquotedIdentifier: function _consumeUnquotedIdentifier(stream) {
            var start = this._current;
            this._current++;

            while (this._current < stream.length && isAlphaNum(stream[this._current])) {
              this._current++;
            }

            return stream.slice(start, this._current);
          },
          _consumeQuotedIdentifier: function _consumeQuotedIdentifier(stream) {
            var start = this._current;
            this._current++;
            var maxLength = stream.length;

            while (stream[this._current] !== "\"" && this._current < maxLength) {
              // You can escape a double quote and you can escape an escape.
              var current = this._current;

              if (stream[current] === "\\" && (stream[current + 1] === "\\" || stream[current + 1] === "\"")) {
                current += 2;
              } else {
                current++;
              }

              this._current = current;
            }

            this._current++;
            return JSON.parse(stream.slice(start, this._current));
          },
          _consumeRawStringLiteral: function _consumeRawStringLiteral(stream) {
            var start = this._current;
            this._current++;
            var maxLength = stream.length;

            while (stream[this._current] !== "'" && this._current < maxLength) {
              // You can escape a single quote and you can escape an escape.
              var current = this._current;

              if (stream[current] === "\\" && (stream[current + 1] === "\\" || stream[current + 1] === "'")) {
                current += 2;
              } else {
                current++;
              }

              this._current = current;
            }

            this._current++;
            var literal = stream.slice(start + 1, this._current - 1);
            return literal.replace("\\'", "'");
          },
          _consumeNumber: function _consumeNumber(stream) {
            var start = this._current;
            this._current++;
            var maxLength = stream.length;

            while (isNum(stream[this._current]) && this._current < maxLength) {
              this._current++;
            }

            var value = parseInt(stream.slice(start, this._current));
            return {
              type: TOK_NUMBER,
              value: value,
              start: start
            };
          },
          _consumeLBracket: function _consumeLBracket(stream) {
            var start = this._current;
            this._current++;

            if (stream[this._current] === "?") {
              this._current++;
              return {
                type: TOK_FILTER,
                value: "[?",
                start: start
              };
            } else if (stream[this._current] === "]") {
              this._current++;
              return {
                type: TOK_FLATTEN,
                value: "[]",
                start: start
              };
            } else {
              return {
                type: TOK_LBRACKET,
                value: "[",
                start: start
              };
            }
          },
          _consumeOperator: function _consumeOperator(stream) {
            var start = this._current;
            var startingChar = stream[start];
            this._current++;

            if (startingChar === "!") {
              if (stream[this._current] === "=") {
                this._current++;
                return {
                  type: TOK_NE,
                  value: "!=",
                  start: start
                };
              } else {
                return {
                  type: TOK_NOT,
                  value: "!",
                  start: start
                };
              }
            } else if (startingChar === "<") {
              if (stream[this._current] === "=") {
                this._current++;
                return {
                  type: TOK_LTE,
                  value: "<=",
                  start: start
                };
              } else {
                return {
                  type: TOK_LT,
                  value: "<",
                  start: start
                };
              }
            } else if (startingChar === ">") {
              if (stream[this._current] === "=") {
                this._current++;
                return {
                  type: TOK_GTE,
                  value: ">=",
                  start: start
                };
              } else {
                return {
                  type: TOK_GT,
                  value: ">",
                  start: start
                };
              }
            } else if (startingChar === "=") {
              if (stream[this._current] === "=") {
                this._current++;
                return {
                  type: TOK_EQ,
                  value: "==",
                  start: start
                };
              }
            }
          },
          _consumeLiteral: function _consumeLiteral(stream) {
            this._current++;
            var start = this._current;
            var maxLength = stream.length;
            var literal;

            while (stream[this._current] !== "`" && this._current < maxLength) {
              // You can escape a literal char or you can escape the escape.
              var current = this._current;

              if (stream[current] === "\\" && (stream[current + 1] === "\\" || stream[current + 1] === "`")) {
                current += 2;
              } else {
                current++;
              }

              this._current = current;
            }

            var literalString = trimLeft(stream.slice(start, this._current));
            literalString = literalString.replace("\\`", "`");

            if (this._looksLikeJSON(literalString)) {
              literal = JSON.parse(literalString);
            } else {
              // Try to JSON parse it as "<literal>"
              literal = JSON.parse("\"" + literalString + "\"");
            } // +1 gets us to the ending "`", +1 to move on to the next char.


            this._current++;
            return literal;
          },
          _looksLikeJSON: function _looksLikeJSON(literalString) {
            var startingChars = "[{\"";
            var jsonLiterals = ["true", "false", "null"];
            var numberLooking = "-0123456789";

            if (literalString === "") {
              return false;
            } else if (startingChars.indexOf(literalString[0]) >= 0) {
              return true;
            } else if (jsonLiterals.indexOf(literalString) >= 0) {
              return true;
            } else if (numberLooking.indexOf(literalString[0]) >= 0) {
              try {
                JSON.parse(literalString);
                return true;
              } catch (ex) {
                return false;
              }
            } else {
              return false;
            }
          }
        };
        var bindingPower = {};
        bindingPower[TOK_EOF] = 0;
        bindingPower[TOK_UNQUOTEDIDENTIFIER] = 0;
        bindingPower[TOK_QUOTEDIDENTIFIER] = 0;
        bindingPower[TOK_RBRACKET] = 0;
        bindingPower[TOK_RPAREN] = 0;
        bindingPower[TOK_COMMA] = 0;
        bindingPower[TOK_RBRACE] = 0;
        bindingPower[TOK_NUMBER] = 0;
        bindingPower[TOK_CURRENT] = 0;
        bindingPower[TOK_EXPREF] = 0;
        bindingPower[TOK_PIPE] = 1;
        bindingPower[TOK_OR] = 2;
        bindingPower[TOK_AND] = 3;
        bindingPower[TOK_EQ] = 5;
        bindingPower[TOK_GT] = 5;
        bindingPower[TOK_LT] = 5;
        bindingPower[TOK_GTE] = 5;
        bindingPower[TOK_LTE] = 5;
        bindingPower[TOK_NE] = 5;
        bindingPower[TOK_FLATTEN] = 9;
        bindingPower[TOK_STAR] = 20;
        bindingPower[TOK_FILTER] = 21;
        bindingPower[TOK_DOT] = 40;
        bindingPower[TOK_NOT] = 45;
        bindingPower[TOK_LBRACE] = 50;
        bindingPower[TOK_LBRACKET] = 55;
        bindingPower[TOK_LPAREN] = 60;

        function Parser() {}

        Parser.prototype = {
          parse: function parse(expression) {
            this._loadTokens(expression);

            this.index = 0;
            var ast = this.expression(0);

            if (this._lookahead(0) !== TOK_EOF) {
              var t = this._lookaheadToken(0);

              var error = new Error("Unexpected token type: " + t.type + ", value: " + t.value);
              error.name = "ParserError";
              throw error;
            }

            return ast;
          },
          _loadTokens: function _loadTokens(expression) {
            var lexer = new Lexer();
            var tokens = lexer.tokenize(expression);
            tokens.push({
              type: TOK_EOF,
              value: "",
              start: expression.length
            });
            this.tokens = tokens;
          },
          expression: function expression(rbp) {
            var leftToken = this._lookaheadToken(0);

            this._advance();

            var left = this.nud(leftToken);

            var currentToken = this._lookahead(0);

            while (rbp < bindingPower[currentToken]) {
              this._advance();

              left = this.led(currentToken, left);
              currentToken = this._lookahead(0);
            }

            return left;
          },
          _lookahead: function _lookahead(number) {
            return this.tokens[this.index + number].type;
          },
          _lookaheadToken: function _lookaheadToken(number) {
            return this.tokens[this.index + number];
          },
          _advance: function _advance() {
            this.index++;
          },
          nud: function nud(token) {
            var left;
            var right;
            var expression;

            switch (token.type) {
              case TOK_LITERAL:
                return {
                  type: "Literal",
                  value: token.value
                };

              case TOK_UNQUOTEDIDENTIFIER:
                return {
                  type: "Field",
                  name: token.value
                };

              case TOK_QUOTEDIDENTIFIER:
                var node = {
                  type: "Field",
                  name: token.value
                };

                if (this._lookahead(0) === TOK_LPAREN) {
                  throw new Error("Quoted identifier not allowed for function names.");
                } else {
                  return node;
                }

                break;

              case TOK_NOT:
                right = this.expression(bindingPower.Not);
                return {
                  type: "NotExpression",
                  children: [right]
                };

              case TOK_STAR:
                left = {
                  type: "Identity"
                };
                right = null;

                if (this._lookahead(0) === TOK_RBRACKET) {
                  // This can happen in a multiselect,
                  // [a, b, *]
                  right = {
                    type: "Identity"
                  };
                } else {
                  right = this._parseProjectionRHS(bindingPower.Star);
                }

                return {
                  type: "ValueProjection",
                  children: [left, right]
                };

              case TOK_FILTER:
                return this.led(token.type, {
                  type: "Identity"
                });

              case TOK_LBRACE:
                return this._parseMultiselectHash();

              case TOK_FLATTEN:
                left = {
                  type: TOK_FLATTEN,
                  children: [{
                    type: "Identity"
                  }]
                };
                right = this._parseProjectionRHS(bindingPower.Flatten);
                return {
                  type: "Projection",
                  children: [left, right]
                };

              case TOK_LBRACKET:
                if (this._lookahead(0) === TOK_NUMBER || this._lookahead(0) === TOK_COLON) {
                  right = this._parseIndexExpression();
                  return this._projectIfSlice({
                    type: "Identity"
                  }, right);
                } else if (this._lookahead(0) === TOK_STAR && this._lookahead(1) === TOK_RBRACKET) {
                  this._advance();

                  this._advance();

                  right = this._parseProjectionRHS(bindingPower.Star);
                  return {
                    type: "Projection",
                    children: [{
                      type: "Identity"
                    }, right]
                  };
                } else {
                  return this._parseMultiselectList();
                }

                break;

              case TOK_CURRENT:
                return {
                  type: TOK_CURRENT
                };

              case TOK_EXPREF:
                expression = this.expression(bindingPower.Expref);
                return {
                  type: "ExpressionReference",
                  children: [expression]
                };

              case TOK_LPAREN:
                var args = [];

                while (this._lookahead(0) !== TOK_RPAREN) {
                  if (this._lookahead(0) === TOK_CURRENT) {
                    expression = {
                      type: TOK_CURRENT
                    };

                    this._advance();
                  } else {
                    expression = this.expression(0);
                  }

                  args.push(expression);
                }

                this._match(TOK_RPAREN);

                return args[0];

              default:
                this._errorToken(token);

            }
          },
          led: function led(tokenName, left) {
            var right;

            switch (tokenName) {
              case TOK_DOT:
                var rbp = bindingPower.Dot;

                if (this._lookahead(0) !== TOK_STAR) {
                  right = this._parseDotRHS(rbp);
                  return {
                    type: "Subexpression",
                    children: [left, right]
                  };
                } else {
                  // Creating a projection.
                  this._advance();

                  right = this._parseProjectionRHS(rbp);
                  return {
                    type: "ValueProjection",
                    children: [left, right]
                  };
                }

                break;

              case TOK_PIPE:
                right = this.expression(bindingPower.Pipe);
                return {
                  type: TOK_PIPE,
                  children: [left, right]
                };

              case TOK_OR:
                right = this.expression(bindingPower.Or);
                return {
                  type: "OrExpression",
                  children: [left, right]
                };

              case TOK_AND:
                right = this.expression(bindingPower.And);
                return {
                  type: "AndExpression",
                  children: [left, right]
                };

              case TOK_LPAREN:
                var name = left.name;
                var args = [];
                var expression, node;

                while (this._lookahead(0) !== TOK_RPAREN) {
                  if (this._lookahead(0) === TOK_CURRENT) {
                    expression = {
                      type: TOK_CURRENT
                    };

                    this._advance();
                  } else {
                    expression = this.expression(0);
                  }

                  if (this._lookahead(0) === TOK_COMMA) {
                    this._match(TOK_COMMA);
                  }

                  args.push(expression);
                }

                this._match(TOK_RPAREN);

                node = {
                  type: "Function",
                  name: name,
                  children: args
                };
                return node;

              case TOK_FILTER:
                var condition = this.expression(0);

                this._match(TOK_RBRACKET);

                if (this._lookahead(0) === TOK_FLATTEN) {
                  right = {
                    type: "Identity"
                  };
                } else {
                  right = this._parseProjectionRHS(bindingPower.Filter);
                }

                return {
                  type: "FilterProjection",
                  children: [left, right, condition]
                };

              case TOK_FLATTEN:
                var leftNode = {
                  type: TOK_FLATTEN,
                  children: [left]
                };

                var rightNode = this._parseProjectionRHS(bindingPower.Flatten);

                return {
                  type: "Projection",
                  children: [leftNode, rightNode]
                };

              case TOK_EQ:
              case TOK_NE:
              case TOK_GT:
              case TOK_GTE:
              case TOK_LT:
              case TOK_LTE:
                return this._parseComparator(left, tokenName);

              case TOK_LBRACKET:
                var token = this._lookaheadToken(0);

                if (token.type === TOK_NUMBER || token.type === TOK_COLON) {
                  right = this._parseIndexExpression();
                  return this._projectIfSlice(left, right);
                } else {
                  this._match(TOK_STAR);

                  this._match(TOK_RBRACKET);

                  right = this._parseProjectionRHS(bindingPower.Star);
                  return {
                    type: "Projection",
                    children: [left, right]
                  };
                }

                break;

              default:
                this._errorToken(this._lookaheadToken(0));

            }
          },
          _match: function _match(tokenType) {
            if (this._lookahead(0) === tokenType) {
              this._advance();
            } else {
              var t = this._lookaheadToken(0);

              var error = new Error("Expected " + tokenType + ", got: " + t.type);
              error.name = "ParserError";
              throw error;
            }
          },
          _errorToken: function _errorToken(token) {
            var error = new Error("Invalid token (" + token.type + "): \"" + token.value + "\"");
            error.name = "ParserError";
            throw error;
          },
          _parseIndexExpression: function _parseIndexExpression() {
            if (this._lookahead(0) === TOK_COLON || this._lookahead(1) === TOK_COLON) {
              return this._parseSliceExpression();
            } else {
              var node = {
                type: "Index",
                value: this._lookaheadToken(0).value
              };

              this._advance();

              this._match(TOK_RBRACKET);

              return node;
            }
          },
          _projectIfSlice: function _projectIfSlice(left, right) {
            var indexExpr = {
              type: "IndexExpression",
              children: [left, right]
            };

            if (right.type === "Slice") {
              return {
                type: "Projection",
                children: [indexExpr, this._parseProjectionRHS(bindingPower.Star)]
              };
            } else {
              return indexExpr;
            }
          },
          _parseSliceExpression: function _parseSliceExpression() {
            // [start:end:step] where each part is optional, as well as the last
            // colon.
            var parts = [null, null, null];
            var index = 0;

            var currentToken = this._lookahead(0);

            while (currentToken !== TOK_RBRACKET && index < 3) {
              if (currentToken === TOK_COLON) {
                index++;

                this._advance();
              } else if (currentToken === TOK_NUMBER) {
                parts[index] = this._lookaheadToken(0).value;

                this._advance();
              } else {
                var t = this._lookahead(0);

                var error = new Error("Syntax error, unexpected token: " + t.value + "(" + t.type + ")");
                error.name = "Parsererror";
                throw error;
              }

              currentToken = this._lookahead(0);
            }

            this._match(TOK_RBRACKET);

            return {
              type: "Slice",
              children: parts
            };
          },
          _parseComparator: function _parseComparator(left, comparator) {
            var right = this.expression(bindingPower[comparator]);
            return {
              type: "Comparator",
              name: comparator,
              children: [left, right]
            };
          },
          _parseDotRHS: function _parseDotRHS(rbp) {
            var lookahead = this._lookahead(0);

            var exprTokens = [TOK_UNQUOTEDIDENTIFIER, TOK_QUOTEDIDENTIFIER, TOK_STAR];

            if (exprTokens.indexOf(lookahead) >= 0) {
              return this.expression(rbp);
            } else if (lookahead === TOK_LBRACKET) {
              this._match(TOK_LBRACKET);

              return this._parseMultiselectList();
            } else if (lookahead === TOK_LBRACE) {
              this._match(TOK_LBRACE);

              return this._parseMultiselectHash();
            }
          },
          _parseProjectionRHS: function _parseProjectionRHS(rbp) {
            var right;

            if (bindingPower[this._lookahead(0)] < 10) {
              right = {
                type: "Identity"
              };
            } else if (this._lookahead(0) === TOK_LBRACKET) {
              right = this.expression(rbp);
            } else if (this._lookahead(0) === TOK_FILTER) {
              right = this.expression(rbp);
            } else if (this._lookahead(0) === TOK_DOT) {
              this._match(TOK_DOT);

              right = this._parseDotRHS(rbp);
            } else {
              var t = this._lookaheadToken(0);

              var error = new Error("Sytanx error, unexpected token: " + t.value + "(" + t.type + ")");
              error.name = "ParserError";
              throw error;
            }

            return right;
          },
          _parseMultiselectList: function _parseMultiselectList() {
            var expressions = [];

            while (this._lookahead(0) !== TOK_RBRACKET) {
              var expression = this.expression(0);
              expressions.push(expression);

              if (this._lookahead(0) === TOK_COMMA) {
                this._match(TOK_COMMA);

                if (this._lookahead(0) === TOK_RBRACKET) {
                  throw new Error("Unexpected token Rbracket");
                }
              }
            }

            this._match(TOK_RBRACKET);

            return {
              type: "MultiSelectList",
              children: expressions
            };
          },
          _parseMultiselectHash: function _parseMultiselectHash() {
            var pairs = [];
            var identifierTypes = [TOK_UNQUOTEDIDENTIFIER, TOK_QUOTEDIDENTIFIER];
            var keyToken, keyName, value, node;

            for (;;) {
              keyToken = this._lookaheadToken(0);

              if (identifierTypes.indexOf(keyToken.type) < 0) {
                throw new Error("Expecting an identifier token, got: " + keyToken.type);
              }

              keyName = keyToken.value;

              this._advance();

              this._match(TOK_COLON);

              value = this.expression(0);
              node = {
                type: "KeyValuePair",
                name: keyName,
                value: value
              };
              pairs.push(node);

              if (this._lookahead(0) === TOK_COMMA) {
                this._match(TOK_COMMA);
              } else if (this._lookahead(0) === TOK_RBRACE) {
                this._match(TOK_RBRACE);

                break;
              }
            }

            return {
              type: "MultiSelectHash",
              children: pairs
            };
          }
        };

        function TreeInterpreter(runtime) {
          this.runtime = runtime;
        }

        TreeInterpreter.prototype = {
          search: function search(node, value) {
            return this.visit(node, value);
          },
          visit: function visit(node, value) {
            var matched, current, result, first, second, field, left, right, collected, i;

            switch (node.type) {
              case "Field":
                if (value === null) {
                  return null;
                } else if (isObject(value)) {
                  field = value[node.name];

                  if (field === undefined) {
                    return null;
                  } else {
                    return field;
                  }
                } else {
                  return null;
                }

                break;

              case "Subexpression":
                result = this.visit(node.children[0], value);

                for (i = 1; i < node.children.length; i++) {
                  result = this.visit(node.children[1], result);

                  if (result === null) {
                    return null;
                  }
                }

                return result;

              case "IndexExpression":
                left = this.visit(node.children[0], value);
                right = this.visit(node.children[1], left);
                return right;

              case "Index":
                if (!isArray(value)) {
                  return null;
                }

                var index = node.value;

                if (index < 0) {
                  index = value.length + index;
                }

                result = value[index];

                if (result === undefined) {
                  result = null;
                }

                return result;

              case "Slice":
                if (!isArray(value)) {
                  return null;
                }

                var sliceParams = node.children.slice(0);
                var computed = this.computeSliceParams(value.length, sliceParams);
                var start = computed[0];
                var stop = computed[1];
                var step = computed[2];
                result = [];

                if (step > 0) {
                  for (i = start; i < stop; i += step) {
                    result.push(value[i]);
                  }
                } else {
                  for (i = start; i > stop; i += step) {
                    result.push(value[i]);
                  }
                }

                return result;

              case "Projection":
                // Evaluate left child.
                var base = this.visit(node.children[0], value);

                if (!isArray(base)) {
                  return null;
                }

                collected = [];

                for (i = 0; i < base.length; i++) {
                  current = this.visit(node.children[1], base[i]);

                  if (current !== null) {
                    collected.push(current);
                  }
                }

                return collected;

              case "ValueProjection":
                // Evaluate left child.
                base = this.visit(node.children[0], value);

                if (!isObject(base)) {
                  return null;
                }

                collected = [];
                var values = objValues(base);

                for (i = 0; i < values.length; i++) {
                  current = this.visit(node.children[1], values[i]);

                  if (current !== null) {
                    collected.push(current);
                  }
                }

                return collected;

              case "FilterProjection":
                base = this.visit(node.children[0], value);

                if (!isArray(base)) {
                  return null;
                }

                var filtered = [];
                var finalResults = [];

                for (i = 0; i < base.length; i++) {
                  matched = this.visit(node.children[2], base[i]);

                  if (!isFalse(matched)) {
                    filtered.push(base[i]);
                  }
                }

                for (var j = 0; j < filtered.length; j++) {
                  current = this.visit(node.children[1], filtered[j]);

                  if (current !== null) {
                    finalResults.push(current);
                  }
                }

                return finalResults;

              case "Comparator":
                first = this.visit(node.children[0], value);
                second = this.visit(node.children[1], value);

                switch (node.name) {
                  case TOK_EQ:
                    result = strictDeepEqual(first, second);
                    break;

                  case TOK_NE:
                    result = !strictDeepEqual(first, second);
                    break;

                  case TOK_GT:
                    result = first > second;
                    break;

                  case TOK_GTE:
                    result = first >= second;
                    break;

                  case TOK_LT:
                    result = first < second;
                    break;

                  case TOK_LTE:
                    result = first <= second;
                    break;

                  default:
                    throw new Error("Unknown comparator: " + node.name);
                }

                return result;

              case TOK_FLATTEN:
                var original = this.visit(node.children[0], value);

                if (!isArray(original)) {
                  return null;
                }

                var merged = [];

                for (i = 0; i < original.length; i++) {
                  current = original[i];

                  if (isArray(current)) {
                    merged.push.apply(merged, current);
                  } else {
                    merged.push(current);
                  }
                }

                return merged;

              case "Identity":
                return value;

              case "MultiSelectList":
                if (value === null) {
                  return null;
                }

                collected = [];

                for (i = 0; i < node.children.length; i++) {
                  collected.push(this.visit(node.children[i], value));
                }

                return collected;

              case "MultiSelectHash":
                if (value === null) {
                  return null;
                }

                collected = {};
                var child;

                for (i = 0; i < node.children.length; i++) {
                  child = node.children[i];
                  collected[child.name] = this.visit(child.value, value);
                }

                return collected;

              case "OrExpression":
                matched = this.visit(node.children[0], value);

                if (isFalse(matched)) {
                  matched = this.visit(node.children[1], value);
                }

                return matched;

              case "AndExpression":
                first = this.visit(node.children[0], value);

                if (isFalse(first) === true) {
                  return first;
                }

                return this.visit(node.children[1], value);

              case "NotExpression":
                first = this.visit(node.children[0], value);
                return isFalse(first);

              case "Literal":
                return node.value;

              case TOK_PIPE:
                left = this.visit(node.children[0], value);
                return this.visit(node.children[1], left);

              case TOK_CURRENT:
                return value;

              case "Function":
                var resolvedArgs = [];

                for (i = 0; i < node.children.length; i++) {
                  resolvedArgs.push(this.visit(node.children[i], value));
                }

                return this.runtime.callFunction(node.name, resolvedArgs);

              case "ExpressionReference":
                var refNode = node.children[0]; // Tag the node with a specific attribute so the type
                // checker verify the type.

                refNode.jmespathType = TOK_EXPREF;
                return refNode;

              default:
                throw new Error("Unknown node type: " + node.type);
            }
          },
          computeSliceParams: function computeSliceParams(arrayLength, sliceParams) {
            var start = sliceParams[0];
            var stop = sliceParams[1];
            var step = sliceParams[2];
            var computed = [null, null, null];

            if (step === null) {
              step = 1;
            } else if (step === 0) {
              var error = new Error("Invalid slice, step cannot be 0");
              error.name = "RuntimeError";
              throw error;
            }

            var stepValueNegative = step < 0 ? true : false;

            if (start === null) {
              start = stepValueNegative ? arrayLength - 1 : 0;
            } else {
              start = this.capSliceRange(arrayLength, start, step);
            }

            if (stop === null) {
              stop = stepValueNegative ? -1 : arrayLength;
            } else {
              stop = this.capSliceRange(arrayLength, stop, step);
            }

            computed[0] = start;
            computed[1] = stop;
            computed[2] = step;
            return computed;
          },
          capSliceRange: function capSliceRange(arrayLength, actualValue, step) {
            if (actualValue < 0) {
              actualValue += arrayLength;

              if (actualValue < 0) {
                actualValue = step < 0 ? -1 : 0;
              }
            } else if (actualValue >= arrayLength) {
              actualValue = step < 0 ? arrayLength - 1 : arrayLength;
            }

            return actualValue;
          }
        };

        function Runtime(interpreter) {
          this._interpreter = interpreter;
          this.functionTable = {
            // name: [function, <signature>]
            // The <signature> can be:
            //
            // {
            //   args: [[type1, type2], [type1, type2]],
            //   variadic: true|false
            // }
            //
            // Each arg in the arg list is a list of valid types
            // (if the function is overloaded and supports multiple
            // types.  If the type is "any" then no type checking
            // occurs on the argument.  Variadic is optional
            // and if not provided is assumed to be false.
            abs: {
              _func: this._functionAbs,
              _signature: [{
                types: [TYPE_NUMBER]
              }]
            },
            avg: {
              _func: this._functionAvg,
              _signature: [{
                types: [TYPE_ARRAY_NUMBER]
              }]
            },
            ceil: {
              _func: this._functionCeil,
              _signature: [{
                types: [TYPE_NUMBER]
              }]
            },
            contains: {
              _func: this._functionContains,
              _signature: [{
                types: [TYPE_STRING, TYPE_ARRAY]
              }, {
                types: [TYPE_ANY]
              }]
            },
            "ends_with": {
              _func: this._functionEndsWith,
              _signature: [{
                types: [TYPE_STRING]
              }, {
                types: [TYPE_STRING]
              }]
            },
            floor: {
              _func: this._functionFloor,
              _signature: [{
                types: [TYPE_NUMBER]
              }]
            },
            length: {
              _func: this._functionLength,
              _signature: [{
                types: [TYPE_STRING, TYPE_ARRAY, TYPE_OBJECT]
              }]
            },
            map: {
              _func: this._functionMap,
              _signature: [{
                types: [TYPE_EXPREF]
              }, {
                types: [TYPE_ARRAY]
              }]
            },
            max: {
              _func: this._functionMax,
              _signature: [{
                types: [TYPE_ARRAY_NUMBER, TYPE_ARRAY_STRING]
              }]
            },
            "merge": {
              _func: this._functionMerge,
              _signature: [{
                types: [TYPE_OBJECT],
                variadic: true
              }]
            },
            "max_by": {
              _func: this._functionMaxBy,
              _signature: [{
                types: [TYPE_ARRAY]
              }, {
                types: [TYPE_EXPREF]
              }]
            },
            sum: {
              _func: this._functionSum,
              _signature: [{
                types: [TYPE_ARRAY_NUMBER]
              }]
            },
            "starts_with": {
              _func: this._functionStartsWith,
              _signature: [{
                types: [TYPE_STRING]
              }, {
                types: [TYPE_STRING]
              }]
            },
            min: {
              _func: this._functionMin,
              _signature: [{
                types: [TYPE_ARRAY_NUMBER, TYPE_ARRAY_STRING]
              }]
            },
            "min_by": {
              _func: this._functionMinBy,
              _signature: [{
                types: [TYPE_ARRAY]
              }, {
                types: [TYPE_EXPREF]
              }]
            },
            type: {
              _func: this._functionType,
              _signature: [{
                types: [TYPE_ANY]
              }]
            },
            keys: {
              _func: this._functionKeys,
              _signature: [{
                types: [TYPE_OBJECT]
              }]
            },
            values: {
              _func: this._functionValues,
              _signature: [{
                types: [TYPE_OBJECT]
              }]
            },
            sort: {
              _func: this._functionSort,
              _signature: [{
                types: [TYPE_ARRAY_STRING, TYPE_ARRAY_NUMBER]
              }]
            },
            "sort_by": {
              _func: this._functionSortBy,
              _signature: [{
                types: [TYPE_ARRAY]
              }, {
                types: [TYPE_EXPREF]
              }]
            },
            join: {
              _func: this._functionJoin,
              _signature: [{
                types: [TYPE_STRING]
              }, {
                types: [TYPE_ARRAY_STRING]
              }]
            },
            reverse: {
              _func: this._functionReverse,
              _signature: [{
                types: [TYPE_STRING, TYPE_ARRAY]
              }]
            },
            "to_array": {
              _func: this._functionToArray,
              _signature: [{
                types: [TYPE_ANY]
              }]
            },
            "to_string": {
              _func: this._functionToString,
              _signature: [{
                types: [TYPE_ANY]
              }]
            },
            "to_number": {
              _func: this._functionToNumber,
              _signature: [{
                types: [TYPE_ANY]
              }]
            },
            "not_null": {
              _func: this._functionNotNull,
              _signature: [{
                types: [TYPE_ANY],
                variadic: true
              }]
            }
          };
        }

        Runtime.prototype = {
          callFunction: function callFunction(name, resolvedArgs) {
            var functionEntry = this.functionTable[name];

            if (functionEntry === undefined) {
              throw new Error("Unknown function: " + name + "()");
            }

            this._validateArgs(name, resolvedArgs, functionEntry._signature);

            return functionEntry._func.call(this, resolvedArgs);
          },
          _validateArgs: function _validateArgs(name, args, signature) {
            // Validating the args requires validating
            // the correct arity and the correct type of each arg.
            // If the last argument is declared as variadic, then we need
            // a minimum number of args to be required.  Otherwise it has to
            // be an exact amount.
            var pluralized;

            if (signature[signature.length - 1].variadic) {
              if (args.length < signature.length) {
                pluralized = signature.length === 1 ? " argument" : " arguments";
                throw new Error("ArgumentError: " + name + "() " + "takes at least" + signature.length + pluralized + " but received " + args.length);
              }
            } else if (args.length !== signature.length) {
              pluralized = signature.length === 1 ? " argument" : " arguments";
              throw new Error("ArgumentError: " + name + "() " + "takes " + signature.length + pluralized + " but received " + args.length);
            }

            var currentSpec;
            var actualType;
            var typeMatched;

            for (var i = 0; i < signature.length; i++) {
              typeMatched = false;
              currentSpec = signature[i].types;
              actualType = this._getTypeName(args[i]);

              for (var j = 0; j < currentSpec.length; j++) {
                if (this._typeMatches(actualType, currentSpec[j], args[i])) {
                  typeMatched = true;
                  break;
                }
              }

              if (!typeMatched) {
                throw new Error("TypeError: " + name + "() " + "expected argument " + (i + 1) + " to be type " + currentSpec + " but received type " + actualType + " instead.");
              }
            }
          },
          _typeMatches: function _typeMatches(actual, expected, argValue) {
            if (expected === TYPE_ANY) {
              return true;
            }

            if (expected === TYPE_ARRAY_STRING || expected === TYPE_ARRAY_NUMBER || expected === TYPE_ARRAY) {
              // The expected type can either just be array,
              // or it can require a specific subtype (array of numbers).
              //
              // The simplest case is if "array" with no subtype is specified.
              if (expected === TYPE_ARRAY) {
                return actual === TYPE_ARRAY;
              } else if (actual === TYPE_ARRAY) {
                // Otherwise we need to check subtypes.
                // I think this has potential to be improved.
                var subtype;

                if (expected === TYPE_ARRAY_NUMBER) {
                  subtype = TYPE_NUMBER;
                } else if (expected === TYPE_ARRAY_STRING) {
                  subtype = TYPE_STRING;
                }

                for (var i = 0; i < argValue.length; i++) {
                  if (!this._typeMatches(this._getTypeName(argValue[i]), subtype, argValue[i])) {
                    return false;
                  }
                }

                return true;
              }
            } else {
              return actual === expected;
            }
          },
          _getTypeName: function _getTypeName(obj) {
            switch (Object.prototype.toString.call(obj)) {
              case "[object String]":
                return TYPE_STRING;

              case "[object Number]":
                return TYPE_NUMBER;

              case "[object Array]":
                return TYPE_ARRAY;

              case "[object Boolean]":
                return TYPE_BOOLEAN;

              case "[object Null]":
                return TYPE_NULL;

              case "[object Object]":
                // Check if it's an expref.  If it has, it's been
                // tagged with a jmespathType attr of 'Expref';
                if (obj.jmespathType === TOK_EXPREF) {
                  return TYPE_EXPREF;
                } else {
                  return TYPE_OBJECT;
                }

            }
          },
          _functionStartsWith: function _functionStartsWith(resolvedArgs) {
            return resolvedArgs[0].lastIndexOf(resolvedArgs[1]) === 0;
          },
          _functionEndsWith: function _functionEndsWith(resolvedArgs) {
            var searchStr = resolvedArgs[0];
            var suffix = resolvedArgs[1];
            return searchStr.indexOf(suffix, searchStr.length - suffix.length) !== -1;
          },
          _functionReverse: function _functionReverse(resolvedArgs) {
            var typeName = this._getTypeName(resolvedArgs[0]);

            if (typeName === TYPE_STRING) {
              var originalStr = resolvedArgs[0];
              var reversedStr = "";

              for (var i = originalStr.length - 1; i >= 0; i--) {
                reversedStr += originalStr[i];
              }

              return reversedStr;
            } else {
              var reversedArray = resolvedArgs[0].slice(0);
              reversedArray.reverse();
              return reversedArray;
            }
          },
          _functionAbs: function _functionAbs(resolvedArgs) {
            return Math.abs(resolvedArgs[0]);
          },
          _functionCeil: function _functionCeil(resolvedArgs) {
            return Math.ceil(resolvedArgs[0]);
          },
          _functionAvg: function _functionAvg(resolvedArgs) {
            var sum = 0;
            var inputArray = resolvedArgs[0];

            for (var i = 0; i < inputArray.length; i++) {
              sum += inputArray[i];
            }

            return sum / inputArray.length;
          },
          _functionContains: function _functionContains(resolvedArgs) {
            return resolvedArgs[0].indexOf(resolvedArgs[1]) >= 0;
          },
          _functionFloor: function _functionFloor(resolvedArgs) {
            return Math.floor(resolvedArgs[0]);
          },
          _functionLength: function _functionLength(resolvedArgs) {
            if (!isObject(resolvedArgs[0])) {
              return resolvedArgs[0].length;
            } else {
              // As far as I can tell, there's no way to get the length
              // of an object without O(n) iteration through the object.
              return Object.keys(resolvedArgs[0]).length;
            }
          },
          _functionMap: function _functionMap(resolvedArgs) {
            var mapped = [];
            var interpreter = this._interpreter;
            var exprefNode = resolvedArgs[0];
            var elements = resolvedArgs[1];

            for (var i = 0; i < elements.length; i++) {
              mapped.push(interpreter.visit(exprefNode, elements[i]));
            }

            return mapped;
          },
          _functionMerge: function _functionMerge(resolvedArgs) {
            var merged = {};

            for (var i = 0; i < resolvedArgs.length; i++) {
              var current = resolvedArgs[i];

              for (var key in current) {
                merged[key] = current[key];
              }
            }

            return merged;
          },
          _functionMax: function _functionMax(resolvedArgs) {
            if (resolvedArgs[0].length > 0) {
              var typeName = this._getTypeName(resolvedArgs[0][0]);

              if (typeName === TYPE_NUMBER) {
                return Math.max.apply(Math, resolvedArgs[0]);
              } else {
                var elements = resolvedArgs[0];
                var maxElement = elements[0];

                for (var i = 1; i < elements.length; i++) {
                  if (maxElement.localeCompare(elements[i]) < 0) {
                    maxElement = elements[i];
                  }
                }

                return maxElement;
              }
            } else {
              return null;
            }
          },
          _functionMin: function _functionMin(resolvedArgs) {
            if (resolvedArgs[0].length > 0) {
              var typeName = this._getTypeName(resolvedArgs[0][0]);

              if (typeName === TYPE_NUMBER) {
                return Math.min.apply(Math, resolvedArgs[0]);
              } else {
                var elements = resolvedArgs[0];
                var minElement = elements[0];

                for (var i = 1; i < elements.length; i++) {
                  if (elements[i].localeCompare(minElement) < 0) {
                    minElement = elements[i];
                  }
                }

                return minElement;
              }
            } else {
              return null;
            }
          },
          _functionSum: function _functionSum(resolvedArgs) {
            var sum = 0;
            var listToSum = resolvedArgs[0];

            for (var i = 0; i < listToSum.length; i++) {
              sum += listToSum[i];
            }

            return sum;
          },
          _functionType: function _functionType(resolvedArgs) {
            switch (this._getTypeName(resolvedArgs[0])) {
              case TYPE_NUMBER:
                return "number";

              case TYPE_STRING:
                return "string";

              case TYPE_ARRAY:
                return "array";

              case TYPE_OBJECT:
                return "object";

              case TYPE_BOOLEAN:
                return "boolean";

              case TYPE_EXPREF:
                return "expref";

              case TYPE_NULL:
                return "null";
            }
          },
          _functionKeys: function _functionKeys(resolvedArgs) {
            return Object.keys(resolvedArgs[0]);
          },
          _functionValues: function _functionValues(resolvedArgs) {
            var obj = resolvedArgs[0];
            var keys = Object.keys(obj);
            var values = [];

            for (var i = 0; i < keys.length; i++) {
              values.push(obj[keys[i]]);
            }

            return values;
          },
          _functionJoin: function _functionJoin(resolvedArgs) {
            var joinChar = resolvedArgs[0];
            var listJoin = resolvedArgs[1];
            return listJoin.join(joinChar);
          },
          _functionToArray: function _functionToArray(resolvedArgs) {
            if (this._getTypeName(resolvedArgs[0]) === TYPE_ARRAY) {
              return resolvedArgs[0];
            } else {
              return [resolvedArgs[0]];
            }
          },
          _functionToString: function _functionToString(resolvedArgs) {
            if (this._getTypeName(resolvedArgs[0]) === TYPE_STRING) {
              return resolvedArgs[0];
            } else {
              return JSON.stringify(resolvedArgs[0]);
            }
          },
          _functionToNumber: function _functionToNumber(resolvedArgs) {
            var typeName = this._getTypeName(resolvedArgs[0]);

            var convertedValue;

            if (typeName === TYPE_NUMBER) {
              return resolvedArgs[0];
            } else if (typeName === TYPE_STRING) {
              convertedValue = +resolvedArgs[0];

              if (!isNaN(convertedValue)) {
                return convertedValue;
              }
            }

            return null;
          },
          _functionNotNull: function _functionNotNull(resolvedArgs) {
            for (var i = 0; i < resolvedArgs.length; i++) {
              if (this._getTypeName(resolvedArgs[i]) !== TYPE_NULL) {
                return resolvedArgs[i];
              }
            }

            return null;
          },
          _functionSort: function _functionSort(resolvedArgs) {
            var sortedArray = resolvedArgs[0].slice(0);
            sortedArray.sort();
            return sortedArray;
          },
          _functionSortBy: function _functionSortBy(resolvedArgs) {
            var sortedArray = resolvedArgs[0].slice(0);

            if (sortedArray.length === 0) {
              return sortedArray;
            }

            var interpreter = this._interpreter;
            var exprefNode = resolvedArgs[1];

            var requiredType = this._getTypeName(interpreter.visit(exprefNode, sortedArray[0]));

            if ([TYPE_NUMBER, TYPE_STRING].indexOf(requiredType) < 0) {
              throw new Error("TypeError");
            }

            var that = this; // In order to get a stable sort out of an unstable
            // sort algorithm, we decorate/sort/undecorate (DSU)
            // by creating a new list of [index, element] pairs.
            // In the cmp function, if the evaluated elements are
            // equal, then the index will be used as the tiebreaker.
            // After the decorated list has been sorted, it will be
            // undecorated to extract the original elements.

            var decorated = [];

            for (var i = 0; i < sortedArray.length; i++) {
              decorated.push([i, sortedArray[i]]);
            }

            decorated.sort(function (a, b) {
              var exprA = interpreter.visit(exprefNode, a[1]);
              var exprB = interpreter.visit(exprefNode, b[1]);

              if (that._getTypeName(exprA) !== requiredType) {
                throw new Error("TypeError: expected " + requiredType + ", received " + that._getTypeName(exprA));
              } else if (that._getTypeName(exprB) !== requiredType) {
                throw new Error("TypeError: expected " + requiredType + ", received " + that._getTypeName(exprB));
              }

              if (exprA > exprB) {
                return 1;
              } else if (exprA < exprB) {
                return -1;
              } else {
                // If they're equal compare the items by their
                // order to maintain relative order of equal keys
                // (i.e. to get a stable sort).
                return a[0] - b[0];
              }
            }); // Undecorate: extract out the original list elements.

            for (var j = 0; j < decorated.length; j++) {
              sortedArray[j] = decorated[j][1];
            }

            return sortedArray;
          },
          _functionMaxBy: function _functionMaxBy(resolvedArgs) {
            var exprefNode = resolvedArgs[1];
            var resolvedArray = resolvedArgs[0];
            var keyFunction = this.createKeyFunction(exprefNode, [TYPE_NUMBER, TYPE_STRING]);
            var maxNumber = -Infinity;
            var maxRecord;
            var current;

            for (var i = 0; i < resolvedArray.length; i++) {
              current = keyFunction(resolvedArray[i]);

              if (current > maxNumber) {
                maxNumber = current;
                maxRecord = resolvedArray[i];
              }
            }

            return maxRecord;
          },
          _functionMinBy: function _functionMinBy(resolvedArgs) {
            var exprefNode = resolvedArgs[1];
            var resolvedArray = resolvedArgs[0];
            var keyFunction = this.createKeyFunction(exprefNode, [TYPE_NUMBER, TYPE_STRING]);
            var minNumber = Infinity;
            var minRecord;
            var current;

            for (var i = 0; i < resolvedArray.length; i++) {
              current = keyFunction(resolvedArray[i]);

              if (current < minNumber) {
                minNumber = current;
                minRecord = resolvedArray[i];
              }
            }

            return minRecord;
          },
          createKeyFunction: function createKeyFunction(exprefNode, allowedTypes) {
            var that = this;
            var interpreter = this._interpreter;

            var keyFunc = function keyFunc(x) {
              var current = interpreter.visit(exprefNode, x);

              if (allowedTypes.indexOf(that._getTypeName(current)) < 0) {
                var msg = "TypeError: expected one of " + allowedTypes + ", received " + that._getTypeName(current);

                throw new Error(msg);
              }

              return current;
            };

            return keyFunc;
          }
        };

        function compile(stream) {
          var parser = new Parser();
          var ast = parser.parse(stream);
          return ast;
        }

        function tokenize(stream) {
          var lexer = new Lexer();
          return lexer.tokenize(stream);
        }

        function search(data, expression) {
          var parser = new Parser(); // This needs to be improved.  Both the interpreter and runtime depend on
          // each other.  The runtime needs the interpreter to support exprefs.
          // There's likely a clean way to avoid the cyclic dependency.

          var runtime = new Runtime();
          var interpreter = new TreeInterpreter(runtime);
          runtime._interpreter = interpreter;
          var node = parser.parse(expression);
          return interpreter.search(node, data);
        }

        exports.tokenize = tokenize;
        exports.compile = compile;
        exports.search = search;
        exports.strictDeepEqual = strictDeepEqual;
      })(false ? undefined : exports);
      /***/

    },

    /***/
    "CRDf":
    /*!***************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/subscribeToObservable.js ***!
      \***************************************************************************/

    /*! exports provided: subscribeToObservable */

    /***/
    function CRDf(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "subscribeToObservable", function () {
        return subscribeToObservable;
      });
      /* harmony import */


      var _symbol_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../symbol/observable */
      "kJWO");

      var subscribeToObservable = function subscribeToObservable(obj) {
        return function (subscriber) {
          var obs = obj[_symbol_observable__WEBPACK_IMPORTED_MODULE_0__["observable"]]();

          if (typeof obs.subscribe !== 'function') {
            throw new TypeError('Provided object does not correctly implement Symbol.observable');
          } else {
            return obs.subscribe(subscriber);
          }
        };
      }; //# sourceMappingURL=subscribeToObservable.js.map

      /***/

    },

    /***/
    "CaBw":
    /*!**********************************************************!*\
      !*** ./node_modules/aws-sdk/apis/s3-2006-03-01.min.json ***!
      \**********************************************************/

    /*! exports provided: version, metadata, operations, shapes, default */

    /***/
    function CaBw(module) {
      module.exports = JSON.parse("{\"version\":\"2.0\",\"metadata\":{\"apiVersion\":\"2006-03-01\",\"checksumFormat\":\"md5\",\"endpointPrefix\":\"s3\",\"globalEndpoint\":\"s3.amazonaws.com\",\"protocol\":\"rest-xml\",\"serviceAbbreviation\":\"Amazon S3\",\"serviceFullName\":\"Amazon Simple Storage Service\",\"serviceId\":\"S3\",\"signatureVersion\":\"s3\",\"uid\":\"s3-2006-03-01\"},\"operations\":{\"AbortMultipartUpload\":{\"http\":{\"method\":\"DELETE\",\"requestUri\":\"/{Bucket}/{Key+}\",\"responseCode\":204},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Key\",\"UploadId\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Key\":{\"location\":\"uri\",\"locationName\":\"Key\"},\"UploadId\":{\"location\":\"querystring\",\"locationName\":\"uploadId\"},\"RequestPayer\":{\"location\":\"header\",\"locationName\":\"x-amz-request-payer\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"RequestCharged\":{\"location\":\"header\",\"locationName\":\"x-amz-request-charged\"}}}},\"CompleteMultipartUpload\":{\"http\":{\"requestUri\":\"/{Bucket}/{Key+}\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Key\",\"UploadId\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Key\":{\"location\":\"uri\",\"locationName\":\"Key\"},\"MultipartUpload\":{\"locationName\":\"CompleteMultipartUpload\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"},\"type\":\"structure\",\"members\":{\"Parts\":{\"locationName\":\"Part\",\"type\":\"list\",\"member\":{\"type\":\"structure\",\"members\":{\"ETag\":{},\"PartNumber\":{\"type\":\"integer\"}}},\"flattened\":true}}},\"UploadId\":{\"location\":\"querystring\",\"locationName\":\"uploadId\"},\"RequestPayer\":{\"location\":\"header\",\"locationName\":\"x-amz-request-payer\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"MultipartUpload\"},\"output\":{\"type\":\"structure\",\"members\":{\"Location\":{},\"Bucket\":{},\"Key\":{},\"Expiration\":{\"location\":\"header\",\"locationName\":\"x-amz-expiration\"},\"ETag\":{},\"ServerSideEncryption\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption\"},\"VersionId\":{\"location\":\"header\",\"locationName\":\"x-amz-version-id\"},\"SSEKMSKeyId\":{\"shape\":\"Sk\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-aws-kms-key-id\"},\"BucketKeyEnabled\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-bucket-key-enabled\",\"type\":\"boolean\"},\"RequestCharged\":{\"location\":\"header\",\"locationName\":\"x-amz-request-charged\"}}}},\"CopyObject\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}/{Key+}\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"CopySource\",\"Key\"],\"members\":{\"ACL\":{\"location\":\"header\",\"locationName\":\"x-amz-acl\"},\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"CacheControl\":{\"location\":\"header\",\"locationName\":\"Cache-Control\"},\"ContentDisposition\":{\"location\":\"header\",\"locationName\":\"Content-Disposition\"},\"ContentEncoding\":{\"location\":\"header\",\"locationName\":\"Content-Encoding\"},\"ContentLanguage\":{\"location\":\"header\",\"locationName\":\"Content-Language\"},\"ContentType\":{\"location\":\"header\",\"locationName\":\"Content-Type\"},\"CopySource\":{\"location\":\"header\",\"locationName\":\"x-amz-copy-source\"},\"CopySourceIfMatch\":{\"location\":\"header\",\"locationName\":\"x-amz-copy-source-if-match\"},\"CopySourceIfModifiedSince\":{\"location\":\"header\",\"locationName\":\"x-amz-copy-source-if-modified-since\",\"type\":\"timestamp\"},\"CopySourceIfNoneMatch\":{\"location\":\"header\",\"locationName\":\"x-amz-copy-source-if-none-match\"},\"CopySourceIfUnmodifiedSince\":{\"location\":\"header\",\"locationName\":\"x-amz-copy-source-if-unmodified-since\",\"type\":\"timestamp\"},\"Expires\":{\"location\":\"header\",\"locationName\":\"Expires\",\"type\":\"timestamp\"},\"GrantFullControl\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-full-control\"},\"GrantRead\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-read\"},\"GrantReadACP\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-read-acp\"},\"GrantWriteACP\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-write-acp\"},\"Key\":{\"location\":\"uri\",\"locationName\":\"Key\"},\"Metadata\":{\"shape\":\"S13\",\"location\":\"headers\",\"locationName\":\"x-amz-meta-\"},\"MetadataDirective\":{\"location\":\"header\",\"locationName\":\"x-amz-metadata-directive\"},\"TaggingDirective\":{\"location\":\"header\",\"locationName\":\"x-amz-tagging-directive\"},\"ServerSideEncryption\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption\"},\"StorageClass\":{\"location\":\"header\",\"locationName\":\"x-amz-storage-class\"},\"WebsiteRedirectLocation\":{\"location\":\"header\",\"locationName\":\"x-amz-website-redirect-location\"},\"SSECustomerAlgorithm\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-algorithm\"},\"SSECustomerKey\":{\"shape\":\"S1b\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-key\"},\"SSECustomerKeyMD5\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-key-MD5\"},\"SSEKMSKeyId\":{\"shape\":\"Sk\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-aws-kms-key-id\"},\"SSEKMSEncryptionContext\":{\"shape\":\"S1d\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-context\"},\"BucketKeyEnabled\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-bucket-key-enabled\",\"type\":\"boolean\"},\"CopySourceSSECustomerAlgorithm\":{\"location\":\"header\",\"locationName\":\"x-amz-copy-source-server-side-encryption-customer-algorithm\"},\"CopySourceSSECustomerKey\":{\"shape\":\"S1f\",\"location\":\"header\",\"locationName\":\"x-amz-copy-source-server-side-encryption-customer-key\"},\"CopySourceSSECustomerKeyMD5\":{\"location\":\"header\",\"locationName\":\"x-amz-copy-source-server-side-encryption-customer-key-MD5\"},\"RequestPayer\":{\"location\":\"header\",\"locationName\":\"x-amz-request-payer\"},\"Tagging\":{\"location\":\"header\",\"locationName\":\"x-amz-tagging\"},\"ObjectLockMode\":{\"location\":\"header\",\"locationName\":\"x-amz-object-lock-mode\"},\"ObjectLockRetainUntilDate\":{\"shape\":\"S1j\",\"location\":\"header\",\"locationName\":\"x-amz-object-lock-retain-until-date\"},\"ObjectLockLegalHoldStatus\":{\"location\":\"header\",\"locationName\":\"x-amz-object-lock-legal-hold\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"},\"ExpectedSourceBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-source-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"CopyObjectResult\":{\"type\":\"structure\",\"members\":{\"ETag\":{},\"LastModified\":{\"type\":\"timestamp\"}}},\"Expiration\":{\"location\":\"header\",\"locationName\":\"x-amz-expiration\"},\"CopySourceVersionId\":{\"location\":\"header\",\"locationName\":\"x-amz-copy-source-version-id\"},\"VersionId\":{\"location\":\"header\",\"locationName\":\"x-amz-version-id\"},\"ServerSideEncryption\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption\"},\"SSECustomerAlgorithm\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-algorithm\"},\"SSECustomerKeyMD5\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-key-MD5\"},\"SSEKMSKeyId\":{\"shape\":\"Sk\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-aws-kms-key-id\"},\"SSEKMSEncryptionContext\":{\"shape\":\"S1d\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-context\"},\"BucketKeyEnabled\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-bucket-key-enabled\",\"type\":\"boolean\"},\"RequestCharged\":{\"location\":\"header\",\"locationName\":\"x-amz-request-charged\"}},\"payload\":\"CopyObjectResult\"},\"alias\":\"PutObjectCopy\"},\"CreateBucket\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"ACL\":{\"location\":\"header\",\"locationName\":\"x-amz-acl\"},\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"CreateBucketConfiguration\":{\"locationName\":\"CreateBucketConfiguration\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"},\"type\":\"structure\",\"members\":{\"LocationConstraint\":{}}},\"GrantFullControl\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-full-control\"},\"GrantRead\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-read\"},\"GrantReadACP\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-read-acp\"},\"GrantWrite\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-write\"},\"GrantWriteACP\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-write-acp\"},\"ObjectLockEnabledForBucket\":{\"location\":\"header\",\"locationName\":\"x-amz-bucket-object-lock-enabled\",\"type\":\"boolean\"}},\"payload\":\"CreateBucketConfiguration\"},\"output\":{\"type\":\"structure\",\"members\":{\"Location\":{\"location\":\"header\",\"locationName\":\"Location\"}}},\"alias\":\"PutBucket\"},\"CreateMultipartUpload\":{\"http\":{\"requestUri\":\"/{Bucket}/{Key+}?uploads\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Key\"],\"members\":{\"ACL\":{\"location\":\"header\",\"locationName\":\"x-amz-acl\"},\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"CacheControl\":{\"location\":\"header\",\"locationName\":\"Cache-Control\"},\"ContentDisposition\":{\"location\":\"header\",\"locationName\":\"Content-Disposition\"},\"ContentEncoding\":{\"location\":\"header\",\"locationName\":\"Content-Encoding\"},\"ContentLanguage\":{\"location\":\"header\",\"locationName\":\"Content-Language\"},\"ContentType\":{\"location\":\"header\",\"locationName\":\"Content-Type\"},\"Expires\":{\"location\":\"header\",\"locationName\":\"Expires\",\"type\":\"timestamp\"},\"GrantFullControl\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-full-control\"},\"GrantRead\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-read\"},\"GrantReadACP\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-read-acp\"},\"GrantWriteACP\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-write-acp\"},\"Key\":{\"location\":\"uri\",\"locationName\":\"Key\"},\"Metadata\":{\"shape\":\"S13\",\"location\":\"headers\",\"locationName\":\"x-amz-meta-\"},\"ServerSideEncryption\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption\"},\"StorageClass\":{\"location\":\"header\",\"locationName\":\"x-amz-storage-class\"},\"WebsiteRedirectLocation\":{\"location\":\"header\",\"locationName\":\"x-amz-website-redirect-location\"},\"SSECustomerAlgorithm\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-algorithm\"},\"SSECustomerKey\":{\"shape\":\"S1b\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-key\"},\"SSECustomerKeyMD5\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-key-MD5\"},\"SSEKMSKeyId\":{\"shape\":\"Sk\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-aws-kms-key-id\"},\"SSEKMSEncryptionContext\":{\"shape\":\"S1d\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-context\"},\"BucketKeyEnabled\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-bucket-key-enabled\",\"type\":\"boolean\"},\"RequestPayer\":{\"location\":\"header\",\"locationName\":\"x-amz-request-payer\"},\"Tagging\":{\"location\":\"header\",\"locationName\":\"x-amz-tagging\"},\"ObjectLockMode\":{\"location\":\"header\",\"locationName\":\"x-amz-object-lock-mode\"},\"ObjectLockRetainUntilDate\":{\"shape\":\"S1j\",\"location\":\"header\",\"locationName\":\"x-amz-object-lock-retain-until-date\"},\"ObjectLockLegalHoldStatus\":{\"location\":\"header\",\"locationName\":\"x-amz-object-lock-legal-hold\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"AbortDate\":{\"location\":\"header\",\"locationName\":\"x-amz-abort-date\",\"type\":\"timestamp\"},\"AbortRuleId\":{\"location\":\"header\",\"locationName\":\"x-amz-abort-rule-id\"},\"Bucket\":{\"locationName\":\"Bucket\"},\"Key\":{},\"UploadId\":{},\"ServerSideEncryption\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption\"},\"SSECustomerAlgorithm\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-algorithm\"},\"SSECustomerKeyMD5\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-key-MD5\"},\"SSEKMSKeyId\":{\"shape\":\"Sk\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-aws-kms-key-id\"},\"SSEKMSEncryptionContext\":{\"shape\":\"S1d\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-context\"},\"BucketKeyEnabled\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-bucket-key-enabled\",\"type\":\"boolean\"},\"RequestCharged\":{\"location\":\"header\",\"locationName\":\"x-amz-request-charged\"}}},\"alias\":\"InitiateMultipartUpload\"},\"DeleteBucket\":{\"http\":{\"method\":\"DELETE\",\"requestUri\":\"/{Bucket}\",\"responseCode\":204},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}}},\"DeleteBucketAnalyticsConfiguration\":{\"http\":{\"method\":\"DELETE\",\"requestUri\":\"/{Bucket}?analytics\",\"responseCode\":204},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Id\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Id\":{\"location\":\"querystring\",\"locationName\":\"id\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}}},\"DeleteBucketCors\":{\"http\":{\"method\":\"DELETE\",\"requestUri\":\"/{Bucket}?cors\",\"responseCode\":204},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}}},\"DeleteBucketEncryption\":{\"http\":{\"method\":\"DELETE\",\"requestUri\":\"/{Bucket}?encryption\",\"responseCode\":204},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}}},\"DeleteBucketIntelligentTieringConfiguration\":{\"http\":{\"method\":\"DELETE\",\"requestUri\":\"/{Bucket}?intelligent-tiering\",\"responseCode\":204},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Id\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Id\":{\"location\":\"querystring\",\"locationName\":\"id\"}}}},\"DeleteBucketInventoryConfiguration\":{\"http\":{\"method\":\"DELETE\",\"requestUri\":\"/{Bucket}?inventory\",\"responseCode\":204},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Id\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Id\":{\"location\":\"querystring\",\"locationName\":\"id\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}}},\"DeleteBucketLifecycle\":{\"http\":{\"method\":\"DELETE\",\"requestUri\":\"/{Bucket}?lifecycle\",\"responseCode\":204},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}}},\"DeleteBucketMetricsConfiguration\":{\"http\":{\"method\":\"DELETE\",\"requestUri\":\"/{Bucket}?metrics\",\"responseCode\":204},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Id\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Id\":{\"location\":\"querystring\",\"locationName\":\"id\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}}},\"DeleteBucketOwnershipControls\":{\"http\":{\"method\":\"DELETE\",\"requestUri\":\"/{Bucket}?ownershipControls\",\"responseCode\":204},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}}},\"DeleteBucketPolicy\":{\"http\":{\"method\":\"DELETE\",\"requestUri\":\"/{Bucket}?policy\",\"responseCode\":204},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}}},\"DeleteBucketReplication\":{\"http\":{\"method\":\"DELETE\",\"requestUri\":\"/{Bucket}?replication\",\"responseCode\":204},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}}},\"DeleteBucketTagging\":{\"http\":{\"method\":\"DELETE\",\"requestUri\":\"/{Bucket}?tagging\",\"responseCode\":204},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}}},\"DeleteBucketWebsite\":{\"http\":{\"method\":\"DELETE\",\"requestUri\":\"/{Bucket}?website\",\"responseCode\":204},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}}},\"DeleteObject\":{\"http\":{\"method\":\"DELETE\",\"requestUri\":\"/{Bucket}/{Key+}\",\"responseCode\":204},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Key\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Key\":{\"location\":\"uri\",\"locationName\":\"Key\"},\"MFA\":{\"location\":\"header\",\"locationName\":\"x-amz-mfa\"},\"VersionId\":{\"location\":\"querystring\",\"locationName\":\"versionId\"},\"RequestPayer\":{\"location\":\"header\",\"locationName\":\"x-amz-request-payer\"},\"BypassGovernanceRetention\":{\"location\":\"header\",\"locationName\":\"x-amz-bypass-governance-retention\",\"type\":\"boolean\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"DeleteMarker\":{\"location\":\"header\",\"locationName\":\"x-amz-delete-marker\",\"type\":\"boolean\"},\"VersionId\":{\"location\":\"header\",\"locationName\":\"x-amz-version-id\"},\"RequestCharged\":{\"location\":\"header\",\"locationName\":\"x-amz-request-charged\"}}}},\"DeleteObjectTagging\":{\"http\":{\"method\":\"DELETE\",\"requestUri\":\"/{Bucket}/{Key+}?tagging\",\"responseCode\":204},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Key\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Key\":{\"location\":\"uri\",\"locationName\":\"Key\"},\"VersionId\":{\"location\":\"querystring\",\"locationName\":\"versionId\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"VersionId\":{\"location\":\"header\",\"locationName\":\"x-amz-version-id\"}}}},\"DeleteObjects\":{\"http\":{\"requestUri\":\"/{Bucket}?delete\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Delete\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Delete\":{\"locationName\":\"Delete\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"},\"type\":\"structure\",\"required\":[\"Objects\"],\"members\":{\"Objects\":{\"locationName\":\"Object\",\"type\":\"list\",\"member\":{\"type\":\"structure\",\"required\":[\"Key\"],\"members\":{\"Key\":{},\"VersionId\":{}}},\"flattened\":true},\"Quiet\":{\"type\":\"boolean\"}}},\"MFA\":{\"location\":\"header\",\"locationName\":\"x-amz-mfa\"},\"RequestPayer\":{\"location\":\"header\",\"locationName\":\"x-amz-request-payer\"},\"BypassGovernanceRetention\":{\"location\":\"header\",\"locationName\":\"x-amz-bypass-governance-retention\",\"type\":\"boolean\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"Delete\"},\"output\":{\"type\":\"structure\",\"members\":{\"Deleted\":{\"type\":\"list\",\"member\":{\"type\":\"structure\",\"members\":{\"Key\":{},\"VersionId\":{},\"DeleteMarker\":{\"type\":\"boolean\"},\"DeleteMarkerVersionId\":{}}},\"flattened\":true},\"RequestCharged\":{\"location\":\"header\",\"locationName\":\"x-amz-request-charged\"},\"Errors\":{\"locationName\":\"Error\",\"type\":\"list\",\"member\":{\"type\":\"structure\",\"members\":{\"Key\":{},\"VersionId\":{},\"Code\":{},\"Message\":{}}},\"flattened\":true}}},\"alias\":\"DeleteMultipleObjects\",\"httpChecksumRequired\":true},\"DeletePublicAccessBlock\":{\"http\":{\"method\":\"DELETE\",\"requestUri\":\"/{Bucket}?publicAccessBlock\",\"responseCode\":204},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}}},\"GetBucketAccelerateConfiguration\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?accelerate\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"Status\":{}}}},\"GetBucketAcl\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?acl\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"Owner\":{\"shape\":\"S37\"},\"Grants\":{\"shape\":\"S3a\",\"locationName\":\"AccessControlList\"}}}},\"GetBucketAnalyticsConfiguration\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?analytics\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Id\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Id\":{\"location\":\"querystring\",\"locationName\":\"id\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"AnalyticsConfiguration\":{\"shape\":\"S3j\"}},\"payload\":\"AnalyticsConfiguration\"}},\"GetBucketCors\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?cors\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"CORSRules\":{\"shape\":\"S3y\",\"locationName\":\"CORSRule\"}}}},\"GetBucketEncryption\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?encryption\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"ServerSideEncryptionConfiguration\":{\"shape\":\"S4b\"}},\"payload\":\"ServerSideEncryptionConfiguration\"}},\"GetBucketIntelligentTieringConfiguration\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?intelligent-tiering\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Id\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Id\":{\"location\":\"querystring\",\"locationName\":\"id\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"IntelligentTieringConfiguration\":{\"shape\":\"S4h\"}},\"payload\":\"IntelligentTieringConfiguration\"}},\"GetBucketInventoryConfiguration\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?inventory\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Id\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Id\":{\"location\":\"querystring\",\"locationName\":\"id\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"InventoryConfiguration\":{\"shape\":\"S4r\"}},\"payload\":\"InventoryConfiguration\"}},\"GetBucketLifecycle\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?lifecycle\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"Rules\":{\"shape\":\"S57\",\"locationName\":\"Rule\"}}},\"deprecated\":true},\"GetBucketLifecycleConfiguration\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?lifecycle\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"Rules\":{\"shape\":\"S5m\",\"locationName\":\"Rule\"}}}},\"GetBucketLocation\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?location\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"LocationConstraint\":{}}}},\"GetBucketLogging\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?logging\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"LoggingEnabled\":{\"shape\":\"S5w\"}}}},\"GetBucketMetricsConfiguration\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?metrics\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Id\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Id\":{\"location\":\"querystring\",\"locationName\":\"id\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"MetricsConfiguration\":{\"shape\":\"S64\"}},\"payload\":\"MetricsConfiguration\"}},\"GetBucketNotification\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?notification\"},\"input\":{\"shape\":\"S67\"},\"output\":{\"shape\":\"S68\"},\"deprecated\":true},\"GetBucketNotificationConfiguration\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?notification\"},\"input\":{\"shape\":\"S67\"},\"output\":{\"shape\":\"S6j\"}},\"GetBucketOwnershipControls\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?ownershipControls\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"OwnershipControls\":{\"shape\":\"S6z\"}},\"payload\":\"OwnershipControls\"}},\"GetBucketPolicy\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?policy\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"Policy\":{}},\"payload\":\"Policy\"}},\"GetBucketPolicyStatus\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?policyStatus\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"PolicyStatus\":{\"type\":\"structure\",\"members\":{\"IsPublic\":{\"locationName\":\"IsPublic\",\"type\":\"boolean\"}}}},\"payload\":\"PolicyStatus\"}},\"GetBucketReplication\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?replication\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"ReplicationConfiguration\":{\"shape\":\"S7c\"}},\"payload\":\"ReplicationConfiguration\"}},\"GetBucketRequestPayment\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?requestPayment\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"Payer\":{}}}},\"GetBucketTagging\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?tagging\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"required\":[\"TagSet\"],\"members\":{\"TagSet\":{\"shape\":\"S3p\"}}}},\"GetBucketVersioning\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?versioning\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"Status\":{},\"MFADelete\":{\"locationName\":\"MfaDelete\"}}}},\"GetBucketWebsite\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?website\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"RedirectAllRequestsTo\":{\"shape\":\"S8f\"},\"IndexDocument\":{\"shape\":\"S8i\"},\"ErrorDocument\":{\"shape\":\"S8k\"},\"RoutingRules\":{\"shape\":\"S8l\"}}}},\"GetObject\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}/{Key+}\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Key\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"IfMatch\":{\"location\":\"header\",\"locationName\":\"If-Match\"},\"IfModifiedSince\":{\"location\":\"header\",\"locationName\":\"If-Modified-Since\",\"type\":\"timestamp\"},\"IfNoneMatch\":{\"location\":\"header\",\"locationName\":\"If-None-Match\"},\"IfUnmodifiedSince\":{\"location\":\"header\",\"locationName\":\"If-Unmodified-Since\",\"type\":\"timestamp\"},\"Key\":{\"location\":\"uri\",\"locationName\":\"Key\"},\"Range\":{\"location\":\"header\",\"locationName\":\"Range\"},\"ResponseCacheControl\":{\"location\":\"querystring\",\"locationName\":\"response-cache-control\"},\"ResponseContentDisposition\":{\"location\":\"querystring\",\"locationName\":\"response-content-disposition\"},\"ResponseContentEncoding\":{\"location\":\"querystring\",\"locationName\":\"response-content-encoding\"},\"ResponseContentLanguage\":{\"location\":\"querystring\",\"locationName\":\"response-content-language\"},\"ResponseContentType\":{\"location\":\"querystring\",\"locationName\":\"response-content-type\"},\"ResponseExpires\":{\"location\":\"querystring\",\"locationName\":\"response-expires\",\"type\":\"timestamp\",\"timestampFormat\":\"rfc822\"},\"VersionId\":{\"location\":\"querystring\",\"locationName\":\"versionId\"},\"SSECustomerAlgorithm\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-algorithm\"},\"SSECustomerKey\":{\"shape\":\"S1b\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-key\"},\"SSECustomerKeyMD5\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-key-MD5\"},\"RequestPayer\":{\"location\":\"header\",\"locationName\":\"x-amz-request-payer\"},\"PartNumber\":{\"location\":\"querystring\",\"locationName\":\"partNumber\",\"type\":\"integer\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"Body\":{\"streaming\":true,\"type\":\"blob\"},\"DeleteMarker\":{\"location\":\"header\",\"locationName\":\"x-amz-delete-marker\",\"type\":\"boolean\"},\"AcceptRanges\":{\"location\":\"header\",\"locationName\":\"accept-ranges\"},\"Expiration\":{\"location\":\"header\",\"locationName\":\"x-amz-expiration\"},\"Restore\":{\"location\":\"header\",\"locationName\":\"x-amz-restore\"},\"LastModified\":{\"location\":\"header\",\"locationName\":\"Last-Modified\",\"type\":\"timestamp\"},\"ContentLength\":{\"location\":\"header\",\"locationName\":\"Content-Length\",\"type\":\"long\"},\"ETag\":{\"location\":\"header\",\"locationName\":\"ETag\"},\"MissingMeta\":{\"location\":\"header\",\"locationName\":\"x-amz-missing-meta\",\"type\":\"integer\"},\"VersionId\":{\"location\":\"header\",\"locationName\":\"x-amz-version-id\"},\"CacheControl\":{\"location\":\"header\",\"locationName\":\"Cache-Control\"},\"ContentDisposition\":{\"location\":\"header\",\"locationName\":\"Content-Disposition\"},\"ContentEncoding\":{\"location\":\"header\",\"locationName\":\"Content-Encoding\"},\"ContentLanguage\":{\"location\":\"header\",\"locationName\":\"Content-Language\"},\"ContentRange\":{\"location\":\"header\",\"locationName\":\"Content-Range\"},\"ContentType\":{\"location\":\"header\",\"locationName\":\"Content-Type\"},\"Expires\":{\"location\":\"header\",\"locationName\":\"Expires\",\"type\":\"timestamp\"},\"WebsiteRedirectLocation\":{\"location\":\"header\",\"locationName\":\"x-amz-website-redirect-location\"},\"ServerSideEncryption\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption\"},\"Metadata\":{\"shape\":\"S13\",\"location\":\"headers\",\"locationName\":\"x-amz-meta-\"},\"SSECustomerAlgorithm\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-algorithm\"},\"SSECustomerKeyMD5\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-key-MD5\"},\"SSEKMSKeyId\":{\"shape\":\"Sk\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-aws-kms-key-id\"},\"BucketKeyEnabled\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-bucket-key-enabled\",\"type\":\"boolean\"},\"StorageClass\":{\"location\":\"header\",\"locationName\":\"x-amz-storage-class\"},\"RequestCharged\":{\"location\":\"header\",\"locationName\":\"x-amz-request-charged\"},\"ReplicationStatus\":{\"location\":\"header\",\"locationName\":\"x-amz-replication-status\"},\"PartsCount\":{\"location\":\"header\",\"locationName\":\"x-amz-mp-parts-count\",\"type\":\"integer\"},\"TagCount\":{\"location\":\"header\",\"locationName\":\"x-amz-tagging-count\",\"type\":\"integer\"},\"ObjectLockMode\":{\"location\":\"header\",\"locationName\":\"x-amz-object-lock-mode\"},\"ObjectLockRetainUntilDate\":{\"shape\":\"S1j\",\"location\":\"header\",\"locationName\":\"x-amz-object-lock-retain-until-date\"},\"ObjectLockLegalHoldStatus\":{\"location\":\"header\",\"locationName\":\"x-amz-object-lock-legal-hold\"}},\"payload\":\"Body\"}},\"GetObjectAcl\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}/{Key+}?acl\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Key\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Key\":{\"location\":\"uri\",\"locationName\":\"Key\"},\"VersionId\":{\"location\":\"querystring\",\"locationName\":\"versionId\"},\"RequestPayer\":{\"location\":\"header\",\"locationName\":\"x-amz-request-payer\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"Owner\":{\"shape\":\"S37\"},\"Grants\":{\"shape\":\"S3a\",\"locationName\":\"AccessControlList\"},\"RequestCharged\":{\"location\":\"header\",\"locationName\":\"x-amz-request-charged\"}}}},\"GetObjectLegalHold\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}/{Key+}?legal-hold\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Key\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Key\":{\"location\":\"uri\",\"locationName\":\"Key\"},\"VersionId\":{\"location\":\"querystring\",\"locationName\":\"versionId\"},\"RequestPayer\":{\"location\":\"header\",\"locationName\":\"x-amz-request-payer\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"LegalHold\":{\"shape\":\"S9k\"}},\"payload\":\"LegalHold\"}},\"GetObjectLockConfiguration\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?object-lock\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"ObjectLockConfiguration\":{\"shape\":\"S9n\"}},\"payload\":\"ObjectLockConfiguration\"}},\"GetObjectRetention\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}/{Key+}?retention\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Key\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Key\":{\"location\":\"uri\",\"locationName\":\"Key\"},\"VersionId\":{\"location\":\"querystring\",\"locationName\":\"versionId\"},\"RequestPayer\":{\"location\":\"header\",\"locationName\":\"x-amz-request-payer\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"Retention\":{\"shape\":\"S9v\"}},\"payload\":\"Retention\"}},\"GetObjectTagging\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}/{Key+}?tagging\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Key\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Key\":{\"location\":\"uri\",\"locationName\":\"Key\"},\"VersionId\":{\"location\":\"querystring\",\"locationName\":\"versionId\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"required\":[\"TagSet\"],\"members\":{\"VersionId\":{\"location\":\"header\",\"locationName\":\"x-amz-version-id\"},\"TagSet\":{\"shape\":\"S3p\"}}}},\"GetObjectTorrent\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}/{Key+}?torrent\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Key\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Key\":{\"location\":\"uri\",\"locationName\":\"Key\"},\"RequestPayer\":{\"location\":\"header\",\"locationName\":\"x-amz-request-payer\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"Body\":{\"streaming\":true,\"type\":\"blob\"},\"RequestCharged\":{\"location\":\"header\",\"locationName\":\"x-amz-request-charged\"}},\"payload\":\"Body\"}},\"GetPublicAccessBlock\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?publicAccessBlock\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"PublicAccessBlockConfiguration\":{\"shape\":\"Sa2\"}},\"payload\":\"PublicAccessBlockConfiguration\"}},\"HeadBucket\":{\"http\":{\"method\":\"HEAD\",\"requestUri\":\"/{Bucket}\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}}},\"HeadObject\":{\"http\":{\"method\":\"HEAD\",\"requestUri\":\"/{Bucket}/{Key+}\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Key\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"IfMatch\":{\"location\":\"header\",\"locationName\":\"If-Match\"},\"IfModifiedSince\":{\"location\":\"header\",\"locationName\":\"If-Modified-Since\",\"type\":\"timestamp\"},\"IfNoneMatch\":{\"location\":\"header\",\"locationName\":\"If-None-Match\"},\"IfUnmodifiedSince\":{\"location\":\"header\",\"locationName\":\"If-Unmodified-Since\",\"type\":\"timestamp\"},\"Key\":{\"location\":\"uri\",\"locationName\":\"Key\"},\"Range\":{\"location\":\"header\",\"locationName\":\"Range\"},\"VersionId\":{\"location\":\"querystring\",\"locationName\":\"versionId\"},\"SSECustomerAlgorithm\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-algorithm\"},\"SSECustomerKey\":{\"shape\":\"S1b\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-key\"},\"SSECustomerKeyMD5\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-key-MD5\"},\"RequestPayer\":{\"location\":\"header\",\"locationName\":\"x-amz-request-payer\"},\"PartNumber\":{\"location\":\"querystring\",\"locationName\":\"partNumber\",\"type\":\"integer\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"DeleteMarker\":{\"location\":\"header\",\"locationName\":\"x-amz-delete-marker\",\"type\":\"boolean\"},\"AcceptRanges\":{\"location\":\"header\",\"locationName\":\"accept-ranges\"},\"Expiration\":{\"location\":\"header\",\"locationName\":\"x-amz-expiration\"},\"Restore\":{\"location\":\"header\",\"locationName\":\"x-amz-restore\"},\"ArchiveStatus\":{\"location\":\"header\",\"locationName\":\"x-amz-archive-status\"},\"LastModified\":{\"location\":\"header\",\"locationName\":\"Last-Modified\",\"type\":\"timestamp\"},\"ContentLength\":{\"location\":\"header\",\"locationName\":\"Content-Length\",\"type\":\"long\"},\"ETag\":{\"location\":\"header\",\"locationName\":\"ETag\"},\"MissingMeta\":{\"location\":\"header\",\"locationName\":\"x-amz-missing-meta\",\"type\":\"integer\"},\"VersionId\":{\"location\":\"header\",\"locationName\":\"x-amz-version-id\"},\"CacheControl\":{\"location\":\"header\",\"locationName\":\"Cache-Control\"},\"ContentDisposition\":{\"location\":\"header\",\"locationName\":\"Content-Disposition\"},\"ContentEncoding\":{\"location\":\"header\",\"locationName\":\"Content-Encoding\"},\"ContentLanguage\":{\"location\":\"header\",\"locationName\":\"Content-Language\"},\"ContentType\":{\"location\":\"header\",\"locationName\":\"Content-Type\"},\"Expires\":{\"location\":\"header\",\"locationName\":\"Expires\",\"type\":\"timestamp\"},\"WebsiteRedirectLocation\":{\"location\":\"header\",\"locationName\":\"x-amz-website-redirect-location\"},\"ServerSideEncryption\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption\"},\"Metadata\":{\"shape\":\"S13\",\"location\":\"headers\",\"locationName\":\"x-amz-meta-\"},\"SSECustomerAlgorithm\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-algorithm\"},\"SSECustomerKeyMD5\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-key-MD5\"},\"SSEKMSKeyId\":{\"shape\":\"Sk\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-aws-kms-key-id\"},\"BucketKeyEnabled\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-bucket-key-enabled\",\"type\":\"boolean\"},\"StorageClass\":{\"location\":\"header\",\"locationName\":\"x-amz-storage-class\"},\"RequestCharged\":{\"location\":\"header\",\"locationName\":\"x-amz-request-charged\"},\"ReplicationStatus\":{\"location\":\"header\",\"locationName\":\"x-amz-replication-status\"},\"PartsCount\":{\"location\":\"header\",\"locationName\":\"x-amz-mp-parts-count\",\"type\":\"integer\"},\"ObjectLockMode\":{\"location\":\"header\",\"locationName\":\"x-amz-object-lock-mode\"},\"ObjectLockRetainUntilDate\":{\"shape\":\"S1j\",\"location\":\"header\",\"locationName\":\"x-amz-object-lock-retain-until-date\"},\"ObjectLockLegalHoldStatus\":{\"location\":\"header\",\"locationName\":\"x-amz-object-lock-legal-hold\"}}}},\"ListBucketAnalyticsConfigurations\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?analytics\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ContinuationToken\":{\"location\":\"querystring\",\"locationName\":\"continuation-token\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"IsTruncated\":{\"type\":\"boolean\"},\"ContinuationToken\":{},\"NextContinuationToken\":{},\"AnalyticsConfigurationList\":{\"locationName\":\"AnalyticsConfiguration\",\"type\":\"list\",\"member\":{\"shape\":\"S3j\"},\"flattened\":true}}}},\"ListBucketIntelligentTieringConfigurations\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?intelligent-tiering\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ContinuationToken\":{\"location\":\"querystring\",\"locationName\":\"continuation-token\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"IsTruncated\":{\"type\":\"boolean\"},\"ContinuationToken\":{},\"NextContinuationToken\":{},\"IntelligentTieringConfigurationList\":{\"locationName\":\"IntelligentTieringConfiguration\",\"type\":\"list\",\"member\":{\"shape\":\"S4h\"},\"flattened\":true}}}},\"ListBucketInventoryConfigurations\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?inventory\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ContinuationToken\":{\"location\":\"querystring\",\"locationName\":\"continuation-token\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"ContinuationToken\":{},\"InventoryConfigurationList\":{\"locationName\":\"InventoryConfiguration\",\"type\":\"list\",\"member\":{\"shape\":\"S4r\"},\"flattened\":true},\"IsTruncated\":{\"type\":\"boolean\"},\"NextContinuationToken\":{}}}},\"ListBucketMetricsConfigurations\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?metrics\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ContinuationToken\":{\"location\":\"querystring\",\"locationName\":\"continuation-token\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"IsTruncated\":{\"type\":\"boolean\"},\"ContinuationToken\":{},\"NextContinuationToken\":{},\"MetricsConfigurationList\":{\"locationName\":\"MetricsConfiguration\",\"type\":\"list\",\"member\":{\"shape\":\"S64\"},\"flattened\":true}}}},\"ListBuckets\":{\"http\":{\"method\":\"GET\"},\"output\":{\"type\":\"structure\",\"members\":{\"Buckets\":{\"type\":\"list\",\"member\":{\"locationName\":\"Bucket\",\"type\":\"structure\",\"members\":{\"Name\":{},\"CreationDate\":{\"type\":\"timestamp\"}}}},\"Owner\":{\"shape\":\"S37\"}}},\"alias\":\"GetService\"},\"ListMultipartUploads\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?uploads\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Delimiter\":{\"location\":\"querystring\",\"locationName\":\"delimiter\"},\"EncodingType\":{\"location\":\"querystring\",\"locationName\":\"encoding-type\"},\"KeyMarker\":{\"location\":\"querystring\",\"locationName\":\"key-marker\"},\"MaxUploads\":{\"location\":\"querystring\",\"locationName\":\"max-uploads\",\"type\":\"integer\"},\"Prefix\":{\"location\":\"querystring\",\"locationName\":\"prefix\"},\"UploadIdMarker\":{\"location\":\"querystring\",\"locationName\":\"upload-id-marker\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"Bucket\":{},\"KeyMarker\":{},\"UploadIdMarker\":{},\"NextKeyMarker\":{},\"Prefix\":{},\"Delimiter\":{},\"NextUploadIdMarker\":{},\"MaxUploads\":{\"type\":\"integer\"},\"IsTruncated\":{\"type\":\"boolean\"},\"Uploads\":{\"locationName\":\"Upload\",\"type\":\"list\",\"member\":{\"type\":\"structure\",\"members\":{\"UploadId\":{},\"Key\":{},\"Initiated\":{\"type\":\"timestamp\"},\"StorageClass\":{},\"Owner\":{\"shape\":\"S37\"},\"Initiator\":{\"shape\":\"Sb3\"}}},\"flattened\":true},\"CommonPrefixes\":{\"shape\":\"Sb4\"},\"EncodingType\":{}}}},\"ListObjectVersions\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?versions\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Delimiter\":{\"location\":\"querystring\",\"locationName\":\"delimiter\"},\"EncodingType\":{\"location\":\"querystring\",\"locationName\":\"encoding-type\"},\"KeyMarker\":{\"location\":\"querystring\",\"locationName\":\"key-marker\"},\"MaxKeys\":{\"location\":\"querystring\",\"locationName\":\"max-keys\",\"type\":\"integer\"},\"Prefix\":{\"location\":\"querystring\",\"locationName\":\"prefix\"},\"VersionIdMarker\":{\"location\":\"querystring\",\"locationName\":\"version-id-marker\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"IsTruncated\":{\"type\":\"boolean\"},\"KeyMarker\":{},\"VersionIdMarker\":{},\"NextKeyMarker\":{},\"NextVersionIdMarker\":{},\"Versions\":{\"locationName\":\"Version\",\"type\":\"list\",\"member\":{\"type\":\"structure\",\"members\":{\"ETag\":{},\"Size\":{\"type\":\"integer\"},\"StorageClass\":{},\"Key\":{},\"VersionId\":{},\"IsLatest\":{\"type\":\"boolean\"},\"LastModified\":{\"type\":\"timestamp\"},\"Owner\":{\"shape\":\"S37\"}}},\"flattened\":true},\"DeleteMarkers\":{\"locationName\":\"DeleteMarker\",\"type\":\"list\",\"member\":{\"type\":\"structure\",\"members\":{\"Owner\":{\"shape\":\"S37\"},\"Key\":{},\"VersionId\":{},\"IsLatest\":{\"type\":\"boolean\"},\"LastModified\":{\"type\":\"timestamp\"}}},\"flattened\":true},\"Name\":{},\"Prefix\":{},\"Delimiter\":{},\"MaxKeys\":{\"type\":\"integer\"},\"CommonPrefixes\":{\"shape\":\"Sb4\"},\"EncodingType\":{}}},\"alias\":\"GetBucketObjectVersions\"},\"ListObjects\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Delimiter\":{\"location\":\"querystring\",\"locationName\":\"delimiter\"},\"EncodingType\":{\"location\":\"querystring\",\"locationName\":\"encoding-type\"},\"Marker\":{\"location\":\"querystring\",\"locationName\":\"marker\"},\"MaxKeys\":{\"location\":\"querystring\",\"locationName\":\"max-keys\",\"type\":\"integer\"},\"Prefix\":{\"location\":\"querystring\",\"locationName\":\"prefix\"},\"RequestPayer\":{\"location\":\"header\",\"locationName\":\"x-amz-request-payer\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"IsTruncated\":{\"type\":\"boolean\"},\"Marker\":{},\"NextMarker\":{},\"Contents\":{\"shape\":\"Sbm\"},\"Name\":{},\"Prefix\":{},\"Delimiter\":{},\"MaxKeys\":{\"type\":\"integer\"},\"CommonPrefixes\":{\"shape\":\"Sb4\"},\"EncodingType\":{}}},\"alias\":\"GetBucket\"},\"ListObjectsV2\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}?list-type=2\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Delimiter\":{\"location\":\"querystring\",\"locationName\":\"delimiter\"},\"EncodingType\":{\"location\":\"querystring\",\"locationName\":\"encoding-type\"},\"MaxKeys\":{\"location\":\"querystring\",\"locationName\":\"max-keys\",\"type\":\"integer\"},\"Prefix\":{\"location\":\"querystring\",\"locationName\":\"prefix\"},\"ContinuationToken\":{\"location\":\"querystring\",\"locationName\":\"continuation-token\"},\"FetchOwner\":{\"location\":\"querystring\",\"locationName\":\"fetch-owner\",\"type\":\"boolean\"},\"StartAfter\":{\"location\":\"querystring\",\"locationName\":\"start-after\"},\"RequestPayer\":{\"location\":\"header\",\"locationName\":\"x-amz-request-payer\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"IsTruncated\":{\"type\":\"boolean\"},\"Contents\":{\"shape\":\"Sbm\"},\"Name\":{},\"Prefix\":{},\"Delimiter\":{},\"MaxKeys\":{\"type\":\"integer\"},\"CommonPrefixes\":{\"shape\":\"Sb4\"},\"EncodingType\":{},\"KeyCount\":{\"type\":\"integer\"},\"ContinuationToken\":{},\"NextContinuationToken\":{},\"StartAfter\":{}}}},\"ListParts\":{\"http\":{\"method\":\"GET\",\"requestUri\":\"/{Bucket}/{Key+}\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Key\",\"UploadId\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Key\":{\"location\":\"uri\",\"locationName\":\"Key\"},\"MaxParts\":{\"location\":\"querystring\",\"locationName\":\"max-parts\",\"type\":\"integer\"},\"PartNumberMarker\":{\"location\":\"querystring\",\"locationName\":\"part-number-marker\",\"type\":\"integer\"},\"UploadId\":{\"location\":\"querystring\",\"locationName\":\"uploadId\"},\"RequestPayer\":{\"location\":\"header\",\"locationName\":\"x-amz-request-payer\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"AbortDate\":{\"location\":\"header\",\"locationName\":\"x-amz-abort-date\",\"type\":\"timestamp\"},\"AbortRuleId\":{\"location\":\"header\",\"locationName\":\"x-amz-abort-rule-id\"},\"Bucket\":{},\"Key\":{},\"UploadId\":{},\"PartNumberMarker\":{\"type\":\"integer\"},\"NextPartNumberMarker\":{\"type\":\"integer\"},\"MaxParts\":{\"type\":\"integer\"},\"IsTruncated\":{\"type\":\"boolean\"},\"Parts\":{\"locationName\":\"Part\",\"type\":\"list\",\"member\":{\"type\":\"structure\",\"members\":{\"PartNumber\":{\"type\":\"integer\"},\"LastModified\":{\"type\":\"timestamp\"},\"ETag\":{},\"Size\":{\"type\":\"integer\"}}},\"flattened\":true},\"Initiator\":{\"shape\":\"Sb3\"},\"Owner\":{\"shape\":\"S37\"},\"StorageClass\":{},\"RequestCharged\":{\"location\":\"header\",\"locationName\":\"x-amz-request-charged\"}}}},\"PutBucketAccelerateConfiguration\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}?accelerate\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"AccelerateConfiguration\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"AccelerateConfiguration\":{\"locationName\":\"AccelerateConfiguration\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"},\"type\":\"structure\",\"members\":{\"Status\":{}}},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"AccelerateConfiguration\"}},\"PutBucketAcl\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}?acl\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"ACL\":{\"location\":\"header\",\"locationName\":\"x-amz-acl\"},\"AccessControlPolicy\":{\"shape\":\"Sc4\",\"locationName\":\"AccessControlPolicy\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"}},\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ContentMD5\":{\"location\":\"header\",\"locationName\":\"Content-MD5\"},\"GrantFullControl\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-full-control\"},\"GrantRead\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-read\"},\"GrantReadACP\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-read-acp\"},\"GrantWrite\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-write\"},\"GrantWriteACP\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-write-acp\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"AccessControlPolicy\"},\"httpChecksumRequired\":true},\"PutBucketAnalyticsConfiguration\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}?analytics\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Id\",\"AnalyticsConfiguration\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Id\":{\"location\":\"querystring\",\"locationName\":\"id\"},\"AnalyticsConfiguration\":{\"shape\":\"S3j\",\"locationName\":\"AnalyticsConfiguration\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"}},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"AnalyticsConfiguration\"}},\"PutBucketCors\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}?cors\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"CORSConfiguration\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"CORSConfiguration\":{\"locationName\":\"CORSConfiguration\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"},\"type\":\"structure\",\"required\":[\"CORSRules\"],\"members\":{\"CORSRules\":{\"shape\":\"S3y\",\"locationName\":\"CORSRule\"}}},\"ContentMD5\":{\"location\":\"header\",\"locationName\":\"Content-MD5\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"CORSConfiguration\"},\"httpChecksumRequired\":true},\"PutBucketEncryption\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}?encryption\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"ServerSideEncryptionConfiguration\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ContentMD5\":{\"location\":\"header\",\"locationName\":\"Content-MD5\"},\"ServerSideEncryptionConfiguration\":{\"shape\":\"S4b\",\"locationName\":\"ServerSideEncryptionConfiguration\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"}},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"ServerSideEncryptionConfiguration\"},\"httpChecksumRequired\":true},\"PutBucketIntelligentTieringConfiguration\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}?intelligent-tiering\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Id\",\"IntelligentTieringConfiguration\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Id\":{\"location\":\"querystring\",\"locationName\":\"id\"},\"IntelligentTieringConfiguration\":{\"shape\":\"S4h\",\"locationName\":\"IntelligentTieringConfiguration\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"}}},\"payload\":\"IntelligentTieringConfiguration\"}},\"PutBucketInventoryConfiguration\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}?inventory\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Id\",\"InventoryConfiguration\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Id\":{\"location\":\"querystring\",\"locationName\":\"id\"},\"InventoryConfiguration\":{\"shape\":\"S4r\",\"locationName\":\"InventoryConfiguration\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"}},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"InventoryConfiguration\"}},\"PutBucketLifecycle\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}?lifecycle\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ContentMD5\":{\"location\":\"header\",\"locationName\":\"Content-MD5\"},\"LifecycleConfiguration\":{\"locationName\":\"LifecycleConfiguration\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"},\"type\":\"structure\",\"required\":[\"Rules\"],\"members\":{\"Rules\":{\"shape\":\"S57\",\"locationName\":\"Rule\"}}},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"LifecycleConfiguration\"},\"deprecated\":true,\"httpChecksumRequired\":true},\"PutBucketLifecycleConfiguration\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}?lifecycle\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"LifecycleConfiguration\":{\"locationName\":\"LifecycleConfiguration\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"},\"type\":\"structure\",\"required\":[\"Rules\"],\"members\":{\"Rules\":{\"shape\":\"S5m\",\"locationName\":\"Rule\"}}},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"LifecycleConfiguration\"},\"httpChecksumRequired\":true},\"PutBucketLogging\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}?logging\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"BucketLoggingStatus\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"BucketLoggingStatus\":{\"locationName\":\"BucketLoggingStatus\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"},\"type\":\"structure\",\"members\":{\"LoggingEnabled\":{\"shape\":\"S5w\"}}},\"ContentMD5\":{\"location\":\"header\",\"locationName\":\"Content-MD5\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"BucketLoggingStatus\"},\"httpChecksumRequired\":true},\"PutBucketMetricsConfiguration\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}?metrics\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Id\",\"MetricsConfiguration\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Id\":{\"location\":\"querystring\",\"locationName\":\"id\"},\"MetricsConfiguration\":{\"shape\":\"S64\",\"locationName\":\"MetricsConfiguration\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"}},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"MetricsConfiguration\"}},\"PutBucketNotification\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}?notification\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"NotificationConfiguration\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ContentMD5\":{\"location\":\"header\",\"locationName\":\"Content-MD5\"},\"NotificationConfiguration\":{\"shape\":\"S68\",\"locationName\":\"NotificationConfiguration\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"}},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"NotificationConfiguration\"},\"deprecated\":true,\"httpChecksumRequired\":true},\"PutBucketNotificationConfiguration\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}?notification\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"NotificationConfiguration\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"NotificationConfiguration\":{\"shape\":\"S6j\",\"locationName\":\"NotificationConfiguration\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"}},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"NotificationConfiguration\"}},\"PutBucketOwnershipControls\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}?ownershipControls\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"OwnershipControls\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ContentMD5\":{\"location\":\"header\",\"locationName\":\"Content-MD5\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"},\"OwnershipControls\":{\"shape\":\"S6z\",\"locationName\":\"OwnershipControls\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"}}},\"payload\":\"OwnershipControls\"},\"httpChecksumRequired\":true},\"PutBucketPolicy\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}?policy\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Policy\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ContentMD5\":{\"location\":\"header\",\"locationName\":\"Content-MD5\"},\"ConfirmRemoveSelfBucketAccess\":{\"location\":\"header\",\"locationName\":\"x-amz-confirm-remove-self-bucket-access\",\"type\":\"boolean\"},\"Policy\":{},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"Policy\"},\"httpChecksumRequired\":true},\"PutBucketReplication\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}?replication\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"ReplicationConfiguration\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ContentMD5\":{\"location\":\"header\",\"locationName\":\"Content-MD5\"},\"ReplicationConfiguration\":{\"shape\":\"S7c\",\"locationName\":\"ReplicationConfiguration\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"}},\"Token\":{\"location\":\"header\",\"locationName\":\"x-amz-bucket-object-lock-token\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"ReplicationConfiguration\"},\"httpChecksumRequired\":true},\"PutBucketRequestPayment\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}?requestPayment\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"RequestPaymentConfiguration\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ContentMD5\":{\"location\":\"header\",\"locationName\":\"Content-MD5\"},\"RequestPaymentConfiguration\":{\"locationName\":\"RequestPaymentConfiguration\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"},\"type\":\"structure\",\"required\":[\"Payer\"],\"members\":{\"Payer\":{}}},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"RequestPaymentConfiguration\"},\"httpChecksumRequired\":true},\"PutBucketTagging\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}?tagging\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Tagging\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ContentMD5\":{\"location\":\"header\",\"locationName\":\"Content-MD5\"},\"Tagging\":{\"shape\":\"Sct\",\"locationName\":\"Tagging\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"}},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"Tagging\"},\"httpChecksumRequired\":true},\"PutBucketVersioning\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}?versioning\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"VersioningConfiguration\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ContentMD5\":{\"location\":\"header\",\"locationName\":\"Content-MD5\"},\"MFA\":{\"location\":\"header\",\"locationName\":\"x-amz-mfa\"},\"VersioningConfiguration\":{\"locationName\":\"VersioningConfiguration\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"},\"type\":\"structure\",\"members\":{\"MFADelete\":{\"locationName\":\"MfaDelete\"},\"Status\":{}}},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"VersioningConfiguration\"},\"httpChecksumRequired\":true},\"PutBucketWebsite\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}?website\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"WebsiteConfiguration\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ContentMD5\":{\"location\":\"header\",\"locationName\":\"Content-MD5\"},\"WebsiteConfiguration\":{\"locationName\":\"WebsiteConfiguration\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"},\"type\":\"structure\",\"members\":{\"ErrorDocument\":{\"shape\":\"S8k\"},\"IndexDocument\":{\"shape\":\"S8i\"},\"RedirectAllRequestsTo\":{\"shape\":\"S8f\"},\"RoutingRules\":{\"shape\":\"S8l\"}}},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"WebsiteConfiguration\"},\"httpChecksumRequired\":true},\"PutObject\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}/{Key+}\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Key\"],\"members\":{\"ACL\":{\"location\":\"header\",\"locationName\":\"x-amz-acl\"},\"Body\":{\"streaming\":true,\"type\":\"blob\"},\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"CacheControl\":{\"location\":\"header\",\"locationName\":\"Cache-Control\"},\"ContentDisposition\":{\"location\":\"header\",\"locationName\":\"Content-Disposition\"},\"ContentEncoding\":{\"location\":\"header\",\"locationName\":\"Content-Encoding\"},\"ContentLanguage\":{\"location\":\"header\",\"locationName\":\"Content-Language\"},\"ContentLength\":{\"location\":\"header\",\"locationName\":\"Content-Length\",\"type\":\"long\"},\"ContentMD5\":{\"location\":\"header\",\"locationName\":\"Content-MD5\"},\"ContentType\":{\"location\":\"header\",\"locationName\":\"Content-Type\"},\"Expires\":{\"location\":\"header\",\"locationName\":\"Expires\",\"type\":\"timestamp\"},\"GrantFullControl\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-full-control\"},\"GrantRead\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-read\"},\"GrantReadACP\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-read-acp\"},\"GrantWriteACP\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-write-acp\"},\"Key\":{\"location\":\"uri\",\"locationName\":\"Key\"},\"Metadata\":{\"shape\":\"S13\",\"location\":\"headers\",\"locationName\":\"x-amz-meta-\"},\"ServerSideEncryption\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption\"},\"StorageClass\":{\"location\":\"header\",\"locationName\":\"x-amz-storage-class\"},\"WebsiteRedirectLocation\":{\"location\":\"header\",\"locationName\":\"x-amz-website-redirect-location\"},\"SSECustomerAlgorithm\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-algorithm\"},\"SSECustomerKey\":{\"shape\":\"S1b\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-key\"},\"SSECustomerKeyMD5\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-key-MD5\"},\"SSEKMSKeyId\":{\"shape\":\"Sk\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-aws-kms-key-id\"},\"SSEKMSEncryptionContext\":{\"shape\":\"S1d\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-context\"},\"BucketKeyEnabled\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-bucket-key-enabled\",\"type\":\"boolean\"},\"RequestPayer\":{\"location\":\"header\",\"locationName\":\"x-amz-request-payer\"},\"Tagging\":{\"location\":\"header\",\"locationName\":\"x-amz-tagging\"},\"ObjectLockMode\":{\"location\":\"header\",\"locationName\":\"x-amz-object-lock-mode\"},\"ObjectLockRetainUntilDate\":{\"shape\":\"S1j\",\"location\":\"header\",\"locationName\":\"x-amz-object-lock-retain-until-date\"},\"ObjectLockLegalHoldStatus\":{\"location\":\"header\",\"locationName\":\"x-amz-object-lock-legal-hold\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"Body\"},\"output\":{\"type\":\"structure\",\"members\":{\"Expiration\":{\"location\":\"header\",\"locationName\":\"x-amz-expiration\"},\"ETag\":{\"location\":\"header\",\"locationName\":\"ETag\"},\"ServerSideEncryption\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption\"},\"VersionId\":{\"location\":\"header\",\"locationName\":\"x-amz-version-id\"},\"SSECustomerAlgorithm\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-algorithm\"},\"SSECustomerKeyMD5\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-key-MD5\"},\"SSEKMSKeyId\":{\"shape\":\"Sk\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-aws-kms-key-id\"},\"SSEKMSEncryptionContext\":{\"shape\":\"S1d\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-context\"},\"BucketKeyEnabled\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-bucket-key-enabled\",\"type\":\"boolean\"},\"RequestCharged\":{\"location\":\"header\",\"locationName\":\"x-amz-request-charged\"}}}},\"PutObjectAcl\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}/{Key+}?acl\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Key\"],\"members\":{\"ACL\":{\"location\":\"header\",\"locationName\":\"x-amz-acl\"},\"AccessControlPolicy\":{\"shape\":\"Sc4\",\"locationName\":\"AccessControlPolicy\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"}},\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ContentMD5\":{\"location\":\"header\",\"locationName\":\"Content-MD5\"},\"GrantFullControl\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-full-control\"},\"GrantRead\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-read\"},\"GrantReadACP\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-read-acp\"},\"GrantWrite\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-write\"},\"GrantWriteACP\":{\"location\":\"header\",\"locationName\":\"x-amz-grant-write-acp\"},\"Key\":{\"location\":\"uri\",\"locationName\":\"Key\"},\"RequestPayer\":{\"location\":\"header\",\"locationName\":\"x-amz-request-payer\"},\"VersionId\":{\"location\":\"querystring\",\"locationName\":\"versionId\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"AccessControlPolicy\"},\"output\":{\"type\":\"structure\",\"members\":{\"RequestCharged\":{\"location\":\"header\",\"locationName\":\"x-amz-request-charged\"}}},\"httpChecksumRequired\":true},\"PutObjectLegalHold\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}/{Key+}?legal-hold\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Key\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Key\":{\"location\":\"uri\",\"locationName\":\"Key\"},\"LegalHold\":{\"shape\":\"S9k\",\"locationName\":\"LegalHold\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"}},\"RequestPayer\":{\"location\":\"header\",\"locationName\":\"x-amz-request-payer\"},\"VersionId\":{\"location\":\"querystring\",\"locationName\":\"versionId\"},\"ContentMD5\":{\"location\":\"header\",\"locationName\":\"Content-MD5\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"LegalHold\"},\"output\":{\"type\":\"structure\",\"members\":{\"RequestCharged\":{\"location\":\"header\",\"locationName\":\"x-amz-request-charged\"}}},\"httpChecksumRequired\":true},\"PutObjectLockConfiguration\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}?object-lock\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ObjectLockConfiguration\":{\"shape\":\"S9n\",\"locationName\":\"ObjectLockConfiguration\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"}},\"RequestPayer\":{\"location\":\"header\",\"locationName\":\"x-amz-request-payer\"},\"Token\":{\"location\":\"header\",\"locationName\":\"x-amz-bucket-object-lock-token\"},\"ContentMD5\":{\"location\":\"header\",\"locationName\":\"Content-MD5\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"ObjectLockConfiguration\"},\"output\":{\"type\":\"structure\",\"members\":{\"RequestCharged\":{\"location\":\"header\",\"locationName\":\"x-amz-request-charged\"}}},\"httpChecksumRequired\":true},\"PutObjectRetention\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}/{Key+}?retention\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Key\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Key\":{\"location\":\"uri\",\"locationName\":\"Key\"},\"Retention\":{\"shape\":\"S9v\",\"locationName\":\"Retention\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"}},\"RequestPayer\":{\"location\":\"header\",\"locationName\":\"x-amz-request-payer\"},\"VersionId\":{\"location\":\"querystring\",\"locationName\":\"versionId\"},\"BypassGovernanceRetention\":{\"location\":\"header\",\"locationName\":\"x-amz-bypass-governance-retention\",\"type\":\"boolean\"},\"ContentMD5\":{\"location\":\"header\",\"locationName\":\"Content-MD5\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"Retention\"},\"output\":{\"type\":\"structure\",\"members\":{\"RequestCharged\":{\"location\":\"header\",\"locationName\":\"x-amz-request-charged\"}}},\"httpChecksumRequired\":true},\"PutObjectTagging\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}/{Key+}?tagging\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Key\",\"Tagging\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Key\":{\"location\":\"uri\",\"locationName\":\"Key\"},\"VersionId\":{\"location\":\"querystring\",\"locationName\":\"versionId\"},\"ContentMD5\":{\"location\":\"header\",\"locationName\":\"Content-MD5\"},\"Tagging\":{\"shape\":\"Sct\",\"locationName\":\"Tagging\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"}},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"Tagging\"},\"output\":{\"type\":\"structure\",\"members\":{\"VersionId\":{\"location\":\"header\",\"locationName\":\"x-amz-version-id\"}}},\"httpChecksumRequired\":true},\"PutPublicAccessBlock\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}?publicAccessBlock\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"PublicAccessBlockConfiguration\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ContentMD5\":{\"location\":\"header\",\"locationName\":\"Content-MD5\"},\"PublicAccessBlockConfiguration\":{\"shape\":\"Sa2\",\"locationName\":\"PublicAccessBlockConfiguration\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"}},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"PublicAccessBlockConfiguration\"},\"httpChecksumRequired\":true},\"RestoreObject\":{\"http\":{\"requestUri\":\"/{Bucket}/{Key+}?restore\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Key\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Key\":{\"location\":\"uri\",\"locationName\":\"Key\"},\"VersionId\":{\"location\":\"querystring\",\"locationName\":\"versionId\"},\"RestoreRequest\":{\"locationName\":\"RestoreRequest\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"},\"type\":\"structure\",\"members\":{\"Days\":{\"type\":\"integer\"},\"GlacierJobParameters\":{\"type\":\"structure\",\"required\":[\"Tier\"],\"members\":{\"Tier\":{}}},\"Type\":{},\"Tier\":{},\"Description\":{},\"SelectParameters\":{\"type\":\"structure\",\"required\":[\"InputSerialization\",\"ExpressionType\",\"Expression\",\"OutputSerialization\"],\"members\":{\"InputSerialization\":{\"shape\":\"Sdj\"},\"ExpressionType\":{},\"Expression\":{},\"OutputSerialization\":{\"shape\":\"Sdy\"}}},\"OutputLocation\":{\"type\":\"structure\",\"members\":{\"S3\":{\"type\":\"structure\",\"required\":[\"BucketName\",\"Prefix\"],\"members\":{\"BucketName\":{},\"Prefix\":{},\"Encryption\":{\"type\":\"structure\",\"required\":[\"EncryptionType\"],\"members\":{\"EncryptionType\":{},\"KMSKeyId\":{\"shape\":\"Sk\"},\"KMSContext\":{}}},\"CannedACL\":{},\"AccessControlList\":{\"shape\":\"S3a\"},\"Tagging\":{\"shape\":\"Sct\"},\"UserMetadata\":{\"type\":\"list\",\"member\":{\"locationName\":\"MetadataEntry\",\"type\":\"structure\",\"members\":{\"Name\":{},\"Value\":{}}}},\"StorageClass\":{}}}}}}},\"RequestPayer\":{\"location\":\"header\",\"locationName\":\"x-amz-request-payer\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"RestoreRequest\"},\"output\":{\"type\":\"structure\",\"members\":{\"RequestCharged\":{\"location\":\"header\",\"locationName\":\"x-amz-request-charged\"},\"RestoreOutputPath\":{\"location\":\"header\",\"locationName\":\"x-amz-restore-output-path\"}}},\"alias\":\"PostObjectRestore\"},\"SelectObjectContent\":{\"http\":{\"requestUri\":\"/{Bucket}/{Key+}?select&select-type=2\"},\"input\":{\"locationName\":\"SelectObjectContentRequest\",\"xmlNamespace\":{\"uri\":\"http://s3.amazonaws.com/doc/2006-03-01/\"},\"type\":\"structure\",\"required\":[\"Bucket\",\"Key\",\"Expression\",\"ExpressionType\",\"InputSerialization\",\"OutputSerialization\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"Key\":{\"location\":\"uri\",\"locationName\":\"Key\"},\"SSECustomerAlgorithm\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-algorithm\"},\"SSECustomerKey\":{\"shape\":\"S1b\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-key\"},\"SSECustomerKeyMD5\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-key-MD5\"},\"Expression\":{},\"ExpressionType\":{},\"RequestProgress\":{\"type\":\"structure\",\"members\":{\"Enabled\":{\"type\":\"boolean\"}}},\"InputSerialization\":{\"shape\":\"Sdj\"},\"OutputSerialization\":{\"shape\":\"Sdy\"},\"ScanRange\":{\"type\":\"structure\",\"members\":{\"Start\":{\"type\":\"long\"},\"End\":{\"type\":\"long\"}}},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"Payload\":{\"type\":\"structure\",\"members\":{\"Records\":{\"type\":\"structure\",\"members\":{\"Payload\":{\"eventpayload\":true,\"type\":\"blob\"}},\"event\":true},\"Stats\":{\"type\":\"structure\",\"members\":{\"Details\":{\"eventpayload\":true,\"type\":\"structure\",\"members\":{\"BytesScanned\":{\"type\":\"long\"},\"BytesProcessed\":{\"type\":\"long\"},\"BytesReturned\":{\"type\":\"long\"}}}},\"event\":true},\"Progress\":{\"type\":\"structure\",\"members\":{\"Details\":{\"eventpayload\":true,\"type\":\"structure\",\"members\":{\"BytesScanned\":{\"type\":\"long\"},\"BytesProcessed\":{\"type\":\"long\"},\"BytesReturned\":{\"type\":\"long\"}}}},\"event\":true},\"Cont\":{\"type\":\"structure\",\"members\":{},\"event\":true},\"End\":{\"type\":\"structure\",\"members\":{},\"event\":true}},\"eventstream\":true}},\"payload\":\"Payload\"}},\"UploadPart\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}/{Key+}\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Key\",\"PartNumber\",\"UploadId\"],\"members\":{\"Body\":{\"streaming\":true,\"type\":\"blob\"},\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ContentLength\":{\"location\":\"header\",\"locationName\":\"Content-Length\",\"type\":\"long\"},\"ContentMD5\":{\"location\":\"header\",\"locationName\":\"Content-MD5\"},\"Key\":{\"location\":\"uri\",\"locationName\":\"Key\"},\"PartNumber\":{\"location\":\"querystring\",\"locationName\":\"partNumber\",\"type\":\"integer\"},\"UploadId\":{\"location\":\"querystring\",\"locationName\":\"uploadId\"},\"SSECustomerAlgorithm\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-algorithm\"},\"SSECustomerKey\":{\"shape\":\"S1b\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-key\"},\"SSECustomerKeyMD5\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-key-MD5\"},\"RequestPayer\":{\"location\":\"header\",\"locationName\":\"x-amz-request-payer\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}},\"payload\":\"Body\"},\"output\":{\"type\":\"structure\",\"members\":{\"ServerSideEncryption\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption\"},\"ETag\":{\"location\":\"header\",\"locationName\":\"ETag\"},\"SSECustomerAlgorithm\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-algorithm\"},\"SSECustomerKeyMD5\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-key-MD5\"},\"SSEKMSKeyId\":{\"shape\":\"Sk\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-aws-kms-key-id\"},\"BucketKeyEnabled\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-bucket-key-enabled\",\"type\":\"boolean\"},\"RequestCharged\":{\"location\":\"header\",\"locationName\":\"x-amz-request-charged\"}}}},\"UploadPartCopy\":{\"http\":{\"method\":\"PUT\",\"requestUri\":\"/{Bucket}/{Key+}\"},\"input\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"CopySource\",\"Key\",\"PartNumber\",\"UploadId\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"CopySource\":{\"location\":\"header\",\"locationName\":\"x-amz-copy-source\"},\"CopySourceIfMatch\":{\"location\":\"header\",\"locationName\":\"x-amz-copy-source-if-match\"},\"CopySourceIfModifiedSince\":{\"location\":\"header\",\"locationName\":\"x-amz-copy-source-if-modified-since\",\"type\":\"timestamp\"},\"CopySourceIfNoneMatch\":{\"location\":\"header\",\"locationName\":\"x-amz-copy-source-if-none-match\"},\"CopySourceIfUnmodifiedSince\":{\"location\":\"header\",\"locationName\":\"x-amz-copy-source-if-unmodified-since\",\"type\":\"timestamp\"},\"CopySourceRange\":{\"location\":\"header\",\"locationName\":\"x-amz-copy-source-range\"},\"Key\":{\"location\":\"uri\",\"locationName\":\"Key\"},\"PartNumber\":{\"location\":\"querystring\",\"locationName\":\"partNumber\",\"type\":\"integer\"},\"UploadId\":{\"location\":\"querystring\",\"locationName\":\"uploadId\"},\"SSECustomerAlgorithm\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-algorithm\"},\"SSECustomerKey\":{\"shape\":\"S1b\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-key\"},\"SSECustomerKeyMD5\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-key-MD5\"},\"CopySourceSSECustomerAlgorithm\":{\"location\":\"header\",\"locationName\":\"x-amz-copy-source-server-side-encryption-customer-algorithm\"},\"CopySourceSSECustomerKey\":{\"shape\":\"S1f\",\"location\":\"header\",\"locationName\":\"x-amz-copy-source-server-side-encryption-customer-key\"},\"CopySourceSSECustomerKeyMD5\":{\"location\":\"header\",\"locationName\":\"x-amz-copy-source-server-side-encryption-customer-key-MD5\"},\"RequestPayer\":{\"location\":\"header\",\"locationName\":\"x-amz-request-payer\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"},\"ExpectedSourceBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-source-expected-bucket-owner\"}}},\"output\":{\"type\":\"structure\",\"members\":{\"CopySourceVersionId\":{\"location\":\"header\",\"locationName\":\"x-amz-copy-source-version-id\"},\"CopyPartResult\":{\"type\":\"structure\",\"members\":{\"ETag\":{},\"LastModified\":{\"type\":\"timestamp\"}}},\"ServerSideEncryption\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption\"},\"SSECustomerAlgorithm\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-algorithm\"},\"SSECustomerKeyMD5\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-customer-key-MD5\"},\"SSEKMSKeyId\":{\"shape\":\"Sk\",\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-aws-kms-key-id\"},\"BucketKeyEnabled\":{\"location\":\"header\",\"locationName\":\"x-amz-server-side-encryption-bucket-key-enabled\",\"type\":\"boolean\"},\"RequestCharged\":{\"location\":\"header\",\"locationName\":\"x-amz-request-charged\"}},\"payload\":\"CopyPartResult\"}}},\"shapes\":{\"Sk\":{\"type\":\"string\",\"sensitive\":true},\"S13\":{\"type\":\"map\",\"key\":{},\"value\":{}},\"S1b\":{\"type\":\"blob\",\"sensitive\":true},\"S1d\":{\"type\":\"string\",\"sensitive\":true},\"S1f\":{\"type\":\"blob\",\"sensitive\":true},\"S1j\":{\"type\":\"timestamp\",\"timestampFormat\":\"iso8601\"},\"S37\":{\"type\":\"structure\",\"members\":{\"DisplayName\":{},\"ID\":{}}},\"S3a\":{\"type\":\"list\",\"member\":{\"locationName\":\"Grant\",\"type\":\"structure\",\"members\":{\"Grantee\":{\"shape\":\"S3c\"},\"Permission\":{}}}},\"S3c\":{\"type\":\"structure\",\"required\":[\"Type\"],\"members\":{\"DisplayName\":{},\"EmailAddress\":{},\"ID\":{},\"Type\":{\"locationName\":\"xsi:type\",\"xmlAttribute\":true},\"URI\":{}},\"xmlNamespace\":{\"prefix\":\"xsi\",\"uri\":\"http://www.w3.org/2001/XMLSchema-instance\"}},\"S3j\":{\"type\":\"structure\",\"required\":[\"Id\",\"StorageClassAnalysis\"],\"members\":{\"Id\":{},\"Filter\":{\"type\":\"structure\",\"members\":{\"Prefix\":{},\"Tag\":{\"shape\":\"S3m\"},\"And\":{\"type\":\"structure\",\"members\":{\"Prefix\":{},\"Tags\":{\"shape\":\"S3p\",\"flattened\":true,\"locationName\":\"Tag\"}}}}},\"StorageClassAnalysis\":{\"type\":\"structure\",\"members\":{\"DataExport\":{\"type\":\"structure\",\"required\":[\"OutputSchemaVersion\",\"Destination\"],\"members\":{\"OutputSchemaVersion\":{},\"Destination\":{\"type\":\"structure\",\"required\":[\"S3BucketDestination\"],\"members\":{\"S3BucketDestination\":{\"type\":\"structure\",\"required\":[\"Format\",\"Bucket\"],\"members\":{\"Format\":{},\"BucketAccountId\":{},\"Bucket\":{},\"Prefix\":{}}}}}}}}}}},\"S3m\":{\"type\":\"structure\",\"required\":[\"Key\",\"Value\"],\"members\":{\"Key\":{},\"Value\":{}}},\"S3p\":{\"type\":\"list\",\"member\":{\"shape\":\"S3m\",\"locationName\":\"Tag\"}},\"S3y\":{\"type\":\"list\",\"member\":{\"type\":\"structure\",\"required\":[\"AllowedMethods\",\"AllowedOrigins\"],\"members\":{\"AllowedHeaders\":{\"locationName\":\"AllowedHeader\",\"type\":\"list\",\"member\":{},\"flattened\":true},\"AllowedMethods\":{\"locationName\":\"AllowedMethod\",\"type\":\"list\",\"member\":{},\"flattened\":true},\"AllowedOrigins\":{\"locationName\":\"AllowedOrigin\",\"type\":\"list\",\"member\":{},\"flattened\":true},\"ExposeHeaders\":{\"locationName\":\"ExposeHeader\",\"type\":\"list\",\"member\":{},\"flattened\":true},\"MaxAgeSeconds\":{\"type\":\"integer\"}}},\"flattened\":true},\"S4b\":{\"type\":\"structure\",\"required\":[\"Rules\"],\"members\":{\"Rules\":{\"locationName\":\"Rule\",\"type\":\"list\",\"member\":{\"type\":\"structure\",\"members\":{\"ApplyServerSideEncryptionByDefault\":{\"type\":\"structure\",\"required\":[\"SSEAlgorithm\"],\"members\":{\"SSEAlgorithm\":{},\"KMSMasterKeyID\":{\"shape\":\"Sk\"}}},\"BucketKeyEnabled\":{\"type\":\"boolean\"}}},\"flattened\":true}}},\"S4h\":{\"type\":\"structure\",\"required\":[\"Id\",\"Status\",\"Tierings\"],\"members\":{\"Id\":{},\"Filter\":{\"type\":\"structure\",\"members\":{\"Prefix\":{},\"Tag\":{\"shape\":\"S3m\"},\"And\":{\"type\":\"structure\",\"members\":{\"Prefix\":{},\"Tags\":{\"shape\":\"S3p\",\"flattened\":true,\"locationName\":\"Tag\"}}}}},\"Status\":{},\"Tierings\":{\"locationName\":\"Tiering\",\"type\":\"list\",\"member\":{\"type\":\"structure\",\"required\":[\"Days\",\"AccessTier\"],\"members\":{\"Days\":{\"type\":\"integer\"},\"AccessTier\":{}}},\"flattened\":true}}},\"S4r\":{\"type\":\"structure\",\"required\":[\"Destination\",\"IsEnabled\",\"Id\",\"IncludedObjectVersions\",\"Schedule\"],\"members\":{\"Destination\":{\"type\":\"structure\",\"required\":[\"S3BucketDestination\"],\"members\":{\"S3BucketDestination\":{\"type\":\"structure\",\"required\":[\"Bucket\",\"Format\"],\"members\":{\"AccountId\":{},\"Bucket\":{},\"Format\":{},\"Prefix\":{},\"Encryption\":{\"type\":\"structure\",\"members\":{\"SSES3\":{\"locationName\":\"SSE-S3\",\"type\":\"structure\",\"members\":{}},\"SSEKMS\":{\"locationName\":\"SSE-KMS\",\"type\":\"structure\",\"required\":[\"KeyId\"],\"members\":{\"KeyId\":{\"shape\":\"Sk\"}}}}}}}}},\"IsEnabled\":{\"type\":\"boolean\"},\"Filter\":{\"type\":\"structure\",\"required\":[\"Prefix\"],\"members\":{\"Prefix\":{}}},\"Id\":{},\"IncludedObjectVersions\":{},\"OptionalFields\":{\"type\":\"list\",\"member\":{\"locationName\":\"Field\"}},\"Schedule\":{\"type\":\"structure\",\"required\":[\"Frequency\"],\"members\":{\"Frequency\":{}}}}},\"S57\":{\"type\":\"list\",\"member\":{\"type\":\"structure\",\"required\":[\"Prefix\",\"Status\"],\"members\":{\"Expiration\":{\"shape\":\"S59\"},\"ID\":{},\"Prefix\":{},\"Status\":{},\"Transition\":{\"shape\":\"S5e\"},\"NoncurrentVersionTransition\":{\"shape\":\"S5g\"},\"NoncurrentVersionExpiration\":{\"shape\":\"S5h\"},\"AbortIncompleteMultipartUpload\":{\"shape\":\"S5i\"}}},\"flattened\":true},\"S59\":{\"type\":\"structure\",\"members\":{\"Date\":{\"shape\":\"S5a\"},\"Days\":{\"type\":\"integer\"},\"ExpiredObjectDeleteMarker\":{\"type\":\"boolean\"}}},\"S5a\":{\"type\":\"timestamp\",\"timestampFormat\":\"iso8601\"},\"S5e\":{\"type\":\"structure\",\"members\":{\"Date\":{\"shape\":\"S5a\"},\"Days\":{\"type\":\"integer\"},\"StorageClass\":{}}},\"S5g\":{\"type\":\"structure\",\"members\":{\"NoncurrentDays\":{\"type\":\"integer\"},\"StorageClass\":{}}},\"S5h\":{\"type\":\"structure\",\"members\":{\"NoncurrentDays\":{\"type\":\"integer\"}}},\"S5i\":{\"type\":\"structure\",\"members\":{\"DaysAfterInitiation\":{\"type\":\"integer\"}}},\"S5m\":{\"type\":\"list\",\"member\":{\"type\":\"structure\",\"required\":[\"Status\"],\"members\":{\"Expiration\":{\"shape\":\"S59\"},\"ID\":{},\"Prefix\":{\"deprecated\":true},\"Filter\":{\"type\":\"structure\",\"members\":{\"Prefix\":{},\"Tag\":{\"shape\":\"S3m\"},\"And\":{\"type\":\"structure\",\"members\":{\"Prefix\":{},\"Tags\":{\"shape\":\"S3p\",\"flattened\":true,\"locationName\":\"Tag\"}}}}},\"Status\":{},\"Transitions\":{\"locationName\":\"Transition\",\"type\":\"list\",\"member\":{\"shape\":\"S5e\"},\"flattened\":true},\"NoncurrentVersionTransitions\":{\"locationName\":\"NoncurrentVersionTransition\",\"type\":\"list\",\"member\":{\"shape\":\"S5g\"},\"flattened\":true},\"NoncurrentVersionExpiration\":{\"shape\":\"S5h\"},\"AbortIncompleteMultipartUpload\":{\"shape\":\"S5i\"}}},\"flattened\":true},\"S5w\":{\"type\":\"structure\",\"required\":[\"TargetBucket\",\"TargetPrefix\"],\"members\":{\"TargetBucket\":{},\"TargetGrants\":{\"type\":\"list\",\"member\":{\"locationName\":\"Grant\",\"type\":\"structure\",\"members\":{\"Grantee\":{\"shape\":\"S3c\"},\"Permission\":{}}}},\"TargetPrefix\":{}}},\"S64\":{\"type\":\"structure\",\"required\":[\"Id\"],\"members\":{\"Id\":{},\"Filter\":{\"type\":\"structure\",\"members\":{\"Prefix\":{},\"Tag\":{\"shape\":\"S3m\"},\"And\":{\"type\":\"structure\",\"members\":{\"Prefix\":{},\"Tags\":{\"shape\":\"S3p\",\"flattened\":true,\"locationName\":\"Tag\"}}}}}}},\"S67\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{\"location\":\"uri\",\"locationName\":\"Bucket\"},\"ExpectedBucketOwner\":{\"location\":\"header\",\"locationName\":\"x-amz-expected-bucket-owner\"}}},\"S68\":{\"type\":\"structure\",\"members\":{\"TopicConfiguration\":{\"type\":\"structure\",\"members\":{\"Id\":{},\"Events\":{\"shape\":\"S6b\",\"locationName\":\"Event\"},\"Event\":{\"deprecated\":true},\"Topic\":{}}},\"QueueConfiguration\":{\"type\":\"structure\",\"members\":{\"Id\":{},\"Event\":{\"deprecated\":true},\"Events\":{\"shape\":\"S6b\",\"locationName\":\"Event\"},\"Queue\":{}}},\"CloudFunctionConfiguration\":{\"type\":\"structure\",\"members\":{\"Id\":{},\"Event\":{\"deprecated\":true},\"Events\":{\"shape\":\"S6b\",\"locationName\":\"Event\"},\"CloudFunction\":{},\"InvocationRole\":{}}}}},\"S6b\":{\"type\":\"list\",\"member\":{},\"flattened\":true},\"S6j\":{\"type\":\"structure\",\"members\":{\"TopicConfigurations\":{\"locationName\":\"TopicConfiguration\",\"type\":\"list\",\"member\":{\"type\":\"structure\",\"required\":[\"TopicArn\",\"Events\"],\"members\":{\"Id\":{},\"TopicArn\":{\"locationName\":\"Topic\"},\"Events\":{\"shape\":\"S6b\",\"locationName\":\"Event\"},\"Filter\":{\"shape\":\"S6m\"}}},\"flattened\":true},\"QueueConfigurations\":{\"locationName\":\"QueueConfiguration\",\"type\":\"list\",\"member\":{\"type\":\"structure\",\"required\":[\"QueueArn\",\"Events\"],\"members\":{\"Id\":{},\"QueueArn\":{\"locationName\":\"Queue\"},\"Events\":{\"shape\":\"S6b\",\"locationName\":\"Event\"},\"Filter\":{\"shape\":\"S6m\"}}},\"flattened\":true},\"LambdaFunctionConfigurations\":{\"locationName\":\"CloudFunctionConfiguration\",\"type\":\"list\",\"member\":{\"type\":\"structure\",\"required\":[\"LambdaFunctionArn\",\"Events\"],\"members\":{\"Id\":{},\"LambdaFunctionArn\":{\"locationName\":\"CloudFunction\"},\"Events\":{\"shape\":\"S6b\",\"locationName\":\"Event\"},\"Filter\":{\"shape\":\"S6m\"}}},\"flattened\":true}}},\"S6m\":{\"type\":\"structure\",\"members\":{\"Key\":{\"locationName\":\"S3Key\",\"type\":\"structure\",\"members\":{\"FilterRules\":{\"locationName\":\"FilterRule\",\"type\":\"list\",\"member\":{\"type\":\"structure\",\"members\":{\"Name\":{},\"Value\":{}}},\"flattened\":true}}}}},\"S6z\":{\"type\":\"structure\",\"required\":[\"Rules\"],\"members\":{\"Rules\":{\"locationName\":\"Rule\",\"type\":\"list\",\"member\":{\"type\":\"structure\",\"required\":[\"ObjectOwnership\"],\"members\":{\"ObjectOwnership\":{}}},\"flattened\":true}}},\"S7c\":{\"type\":\"structure\",\"required\":[\"Role\",\"Rules\"],\"members\":{\"Role\":{},\"Rules\":{\"locationName\":\"Rule\",\"type\":\"list\",\"member\":{\"type\":\"structure\",\"required\":[\"Status\",\"Destination\"],\"members\":{\"ID\":{},\"Priority\":{\"type\":\"integer\"},\"Prefix\":{\"deprecated\":true},\"Filter\":{\"type\":\"structure\",\"members\":{\"Prefix\":{},\"Tag\":{\"shape\":\"S3m\"},\"And\":{\"type\":\"structure\",\"members\":{\"Prefix\":{},\"Tags\":{\"shape\":\"S3p\",\"flattened\":true,\"locationName\":\"Tag\"}}}}},\"Status\":{},\"SourceSelectionCriteria\":{\"type\":\"structure\",\"members\":{\"SseKmsEncryptedObjects\":{\"type\":\"structure\",\"required\":[\"Status\"],\"members\":{\"Status\":{}}},\"ReplicaModifications\":{\"type\":\"structure\",\"required\":[\"Status\"],\"members\":{\"Status\":{}}}}},\"ExistingObjectReplication\":{\"type\":\"structure\",\"required\":[\"Status\"],\"members\":{\"Status\":{}}},\"Destination\":{\"type\":\"structure\",\"required\":[\"Bucket\"],\"members\":{\"Bucket\":{},\"Account\":{},\"StorageClass\":{},\"AccessControlTranslation\":{\"type\":\"structure\",\"required\":[\"Owner\"],\"members\":{\"Owner\":{}}},\"EncryptionConfiguration\":{\"type\":\"structure\",\"members\":{\"ReplicaKmsKeyID\":{}}},\"ReplicationTime\":{\"type\":\"structure\",\"required\":[\"Status\",\"Time\"],\"members\":{\"Status\":{},\"Time\":{\"shape\":\"S7y\"}}},\"Metrics\":{\"type\":\"structure\",\"required\":[\"Status\"],\"members\":{\"Status\":{},\"EventThreshold\":{\"shape\":\"S7y\"}}}}},\"DeleteMarkerReplication\":{\"type\":\"structure\",\"members\":{\"Status\":{}}}}},\"flattened\":true}}},\"S7y\":{\"type\":\"structure\",\"members\":{\"Minutes\":{\"type\":\"integer\"}}},\"S8f\":{\"type\":\"structure\",\"required\":[\"HostName\"],\"members\":{\"HostName\":{},\"Protocol\":{}}},\"S8i\":{\"type\":\"structure\",\"required\":[\"Suffix\"],\"members\":{\"Suffix\":{}}},\"S8k\":{\"type\":\"structure\",\"required\":[\"Key\"],\"members\":{\"Key\":{}}},\"S8l\":{\"type\":\"list\",\"member\":{\"locationName\":\"RoutingRule\",\"type\":\"structure\",\"required\":[\"Redirect\"],\"members\":{\"Condition\":{\"type\":\"structure\",\"members\":{\"HttpErrorCodeReturnedEquals\":{},\"KeyPrefixEquals\":{}}},\"Redirect\":{\"type\":\"structure\",\"members\":{\"HostName\":{},\"HttpRedirectCode\":{},\"Protocol\":{},\"ReplaceKeyPrefixWith\":{},\"ReplaceKeyWith\":{}}}}}},\"S9k\":{\"type\":\"structure\",\"members\":{\"Status\":{}}},\"S9n\":{\"type\":\"structure\",\"members\":{\"ObjectLockEnabled\":{},\"Rule\":{\"type\":\"structure\",\"members\":{\"DefaultRetention\":{\"type\":\"structure\",\"members\":{\"Mode\":{},\"Days\":{\"type\":\"integer\"},\"Years\":{\"type\":\"integer\"}}}}}}},\"S9v\":{\"type\":\"structure\",\"members\":{\"Mode\":{},\"RetainUntilDate\":{\"shape\":\"S5a\"}}},\"Sa2\":{\"type\":\"structure\",\"members\":{\"BlockPublicAcls\":{\"locationName\":\"BlockPublicAcls\",\"type\":\"boolean\"},\"IgnorePublicAcls\":{\"locationName\":\"IgnorePublicAcls\",\"type\":\"boolean\"},\"BlockPublicPolicy\":{\"locationName\":\"BlockPublicPolicy\",\"type\":\"boolean\"},\"RestrictPublicBuckets\":{\"locationName\":\"RestrictPublicBuckets\",\"type\":\"boolean\"}}},\"Sb3\":{\"type\":\"structure\",\"members\":{\"ID\":{},\"DisplayName\":{}}},\"Sb4\":{\"type\":\"list\",\"member\":{\"type\":\"structure\",\"members\":{\"Prefix\":{}}},\"flattened\":true},\"Sbm\":{\"type\":\"list\",\"member\":{\"type\":\"structure\",\"members\":{\"Key\":{},\"LastModified\":{\"type\":\"timestamp\"},\"ETag\":{},\"Size\":{\"type\":\"integer\"},\"StorageClass\":{},\"Owner\":{\"shape\":\"S37\"}}},\"flattened\":true},\"Sc4\":{\"type\":\"structure\",\"members\":{\"Grants\":{\"shape\":\"S3a\",\"locationName\":\"AccessControlList\"},\"Owner\":{\"shape\":\"S37\"}}},\"Sct\":{\"type\":\"structure\",\"required\":[\"TagSet\"],\"members\":{\"TagSet\":{\"shape\":\"S3p\"}}},\"Sdj\":{\"type\":\"structure\",\"members\":{\"CSV\":{\"type\":\"structure\",\"members\":{\"FileHeaderInfo\":{},\"Comments\":{},\"QuoteEscapeCharacter\":{},\"RecordDelimiter\":{},\"FieldDelimiter\":{},\"QuoteCharacter\":{},\"AllowQuotedRecordDelimiter\":{\"type\":\"boolean\"}}},\"CompressionType\":{},\"JSON\":{\"type\":\"structure\",\"members\":{\"Type\":{}}},\"Parquet\":{\"type\":\"structure\",\"members\":{}}}},\"Sdy\":{\"type\":\"structure\",\"members\":{\"CSV\":{\"type\":\"structure\",\"members\":{\"QuoteFields\":{},\"QuoteEscapeCharacter\":{},\"RecordDelimiter\":{},\"FieldDelimiter\":{},\"QuoteCharacter\":{}}},\"JSON\":{\"type\":\"structure\",\"members\":{\"RecordDelimiter\":{}}}}}}}");
      /***/
    },

    /***/
    "CbSC":
    /*!***********************************************************!*\
      !*** ./node_modules/aws-sdk/lib/model/resource_waiter.js ***!
      \***********************************************************/

    /*! no static exports found */

    /***/
    function CbSC(module, exports, __webpack_require__) {
      var util = __webpack_require__(
      /*! ../util */
      "BaN1");

      var property = util.property;

      function ResourceWaiter(name, waiter, options) {
        options = options || {};
        property(this, 'name', name);
        property(this, 'api', options.api, false);

        if (waiter.operation) {
          property(this, 'operation', util.string.lowerFirst(waiter.operation));
        }

        var self = this;
        var keys = ['type', 'description', 'delay', 'maxAttempts', 'acceptors'];
        keys.forEach(function (key) {
          var value = waiter[key];

          if (value) {
            property(self, key, value);
          }
        });
      }
      /**
       * @api private
       */


      module.exports = ResourceWaiter;
      /***/
    },

    /***/
    "Cfvw":
    /*!****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/from.js ***!
      \****************************************************************/

    /*! exports provided: from */

    /***/
    function Cfvw(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "from", function () {
        return from;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/subscribeTo */
      "SeVD");
      /* harmony import */


      var _scheduled_scheduled__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../scheduled/scheduled */
      "7HRe");

      function from(input, scheduler) {
        if (!scheduler) {
          if (input instanceof _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]) {
            return input;
          }

          return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](Object(_util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__["subscribeTo"])(input));
        } else {
          return Object(_scheduled_scheduled__WEBPACK_IMPORTED_MODULE_2__["scheduled"])(input, scheduler);
        }
      } //# sourceMappingURL=from.js.map

      /***/

    },

    /***/
    "CjzT":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/es-do.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function CjzT(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Spanish (Dominican Republic) [es-do]
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),
            _monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
            monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i],
            monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

        var esDo = moment.defineLocale('es-do', {
          months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
          monthsShort: function monthsShort(m, format) {
            if (!m) {
              return monthsShortDot;
            } else if (/-MMM-/.test(format)) {
              return _monthsShort[m.month()];
            } else {
              return monthsShortDot[m.month()];
            }
          },
          monthsRegex: monthsRegex,
          monthsShortRegex: monthsRegex,
          monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
          monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
          monthsParse: monthsParse,
          longMonthsParse: monthsParse,
          shortMonthsParse: monthsParse,
          weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
          weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
          weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY h:mm A',
            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A'
          },
          calendar: {
            sameDay: function sameDay() {
              return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextDay: function nextDay() {
              return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextWeek: function nextWeek() {
              return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastDay: function lastDay() {
              return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastWeek: function lastWeek() {
              return '[el] dddd [pasado a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: 'en %s',
            past: 'hace %s',
            s: 'unos segundos',
            ss: '%d segundos',
            m: 'un minuto',
            mm: '%d minutos',
            h: 'una hora',
            hh: '%d horas',
            d: 'un día',
            dd: '%d días',
            w: 'una semana',
            ww: '%d semanas',
            M: 'un mes',
            MM: '%d meses',
            y: 'un año',
            yy: '%d años'
          },
          dayOfMonthOrdinalParse: /\d{1,2}º/,
          ordinal: '%dº',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return esDo;
      });
      /***/

    },

    /***/
    "CoRJ":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/ar-ma.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function CoRJ(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Arabic (Morocco) [ar-ma]
      //! author : ElFadili Yassine : https://github.com/ElFadiliY
      //! author : Abdel Said : https://github.com/abdelsaid
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var arMa = moment.defineLocale('ar-ma', {
          months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
          monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
          weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
          weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
          weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[اليوم على الساعة] LT',
            nextDay: '[غدا على الساعة] LT',
            nextWeek: 'dddd [على الساعة] LT',
            lastDay: '[أمس على الساعة] LT',
            lastWeek: 'dddd [على الساعة] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'في %s',
            past: 'منذ %s',
            s: 'ثوان',
            ss: '%d ثانية',
            m: 'دقيقة',
            mm: '%d دقائق',
            h: 'ساعة',
            hh: '%d ساعات',
            d: 'يوم',
            dd: '%d أيام',
            M: 'شهر',
            MM: '%d أشهر',
            y: 'سنة',
            yy: '%d سنوات'
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return arMa;
      });
      /***/

    },

    /***/
    "CqXF":
    /*!****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/mapTo.js ***!
      \****************************************************************/

    /*! exports provided: mapTo */

    /***/
    function CqXF(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "mapTo", function () {
        return mapTo;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");

      function mapTo(value) {
        return function (source) {
          return source.lift(new MapToOperator(value));
        };
      }

      var MapToOperator = /*#__PURE__*/function () {
        function MapToOperator(value) {
          _classCallCheck2(this, MapToOperator);

          this.value = value;
        }

        _createClass2(MapToOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new MapToSubscriber(subscriber, this.value));
          }
        }]);

        return MapToOperator;
      }();

      var MapToSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_12) {
        _inherits2(MapToSubscriber, _Subscriber__WEBPACK_12);

        var _super211 = _createSuper(MapToSubscriber);

        function MapToSubscriber(destination, value) {
          var _this526;

          _classCallCheck2(this, MapToSubscriber);

          _this526 = _super211.call(this, destination);
          _this526.value = value;
          return _this526;
        }

        _createClass2(MapToSubscriber, [{
          key: "_next",
          value: function _next(x) {
            this.destination.next(this.value);
          }
        }]);

        return MapToSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=mapTo.js.map

      /***/

    },

    /***/
    "CxY0":
    /*!*********************************!*\
      !*** ./node_modules/url/url.js ***!
      \*********************************/

    /*! no static exports found */

    /***/
    function CxY0(module, exports, __webpack_require__) {
      // Copyright Joyent, Inc. and other Node contributors.
      //
      // Permission is hereby granted, free of charge, to any person obtaining a
      // copy of this software and associated documentation files (the
      // "Software"), to deal in the Software without restriction, including
      // without limitation the rights to use, copy, modify, merge, publish,
      // distribute, sublicense, and/or sell copies of the Software, and to permit
      // persons to whom the Software is furnished to do so, subject to the
      // following conditions:
      //
      // The above copyright notice and this permission notice shall be included
      // in all copies or substantial portions of the Software.
      //
      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
      // USE OR OTHER DEALINGS IN THE SOFTWARE.
      var punycode = __webpack_require__(
      /*! punycode */
      "rWzI");

      exports.parse = urlParse;
      exports.resolve = urlResolve;
      exports.resolveObject = urlResolveObject;
      exports.format = urlFormat;
      exports.Url = Url;

      function Url() {
        this.protocol = null;
        this.slashes = null;
        this.auth = null;
        this.host = null;
        this.port = null;
        this.hostname = null;
        this.hash = null;
        this.search = null;
        this.query = null;
        this.pathname = null;
        this.path = null;
        this.href = null;
      } // Reference: RFC 3986, RFC 1808, RFC 2396
      // define these here so at least they only have to be
      // compiled once on the first module load.


      var protocolPattern = /^([a-z0-9.+-]+:)/i,
          portPattern = /:[0-9]*$/,
          // RFC 2396: characters reserved for delimiting URLs.
      // We actually just auto-escape these.
      delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'],
          // RFC 2396: characters not allowed for various reasons.
      unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims),
          // Allowed by RFCs, but cause of XSS attacks.  Always escape these.
      autoEscape = ['\''].concat(unwise),
          // Characters that are never ever allowed in a hostname.
      // Note that any invalid chars are also handled, but these
      // are the ones that are *expected* to be seen, so we fast-path
      // them.
      nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),
          hostEndingChars = ['/', '?', '#'],
          hostnameMaxLen = 255,
          hostnamePartPattern = /^[a-z0-9A-Z_-]{0,63}$/,
          hostnamePartStart = /^([a-z0-9A-Z_-]{0,63})(.*)$/,
          // protocols that can allow "unsafe" and "unwise" chars.
      unsafeProtocol = {
        'javascript': true,
        'javascript:': true
      },
          // protocols that never have a hostname.
      hostlessProtocol = {
        'javascript': true,
        'javascript:': true
      },
          // protocols that always contain a // bit.
      slashedProtocol = {
        'http': true,
        'https': true,
        'ftp': true,
        'gopher': true,
        'file': true,
        'http:': true,
        'https:': true,
        'ftp:': true,
        'gopher:': true,
        'file:': true
      },
          querystring = __webpack_require__(
      /*! querystring */
      "r8II");

      function urlParse(url, parseQueryString, slashesDenoteHost) {
        if (url && isObject(url) && url instanceof Url) return url;
        var u = new Url();
        u.parse(url, parseQueryString, slashesDenoteHost);
        return u;
      }

      Url.prototype.parse = function (url, parseQueryString, slashesDenoteHost) {
        if (!isString(url)) {
          throw new TypeError("Parameter 'url' must be a string, not " + typeof url);
        }

        var rest = url; // trim before proceeding.
        // This is to support parse stuff like "  http://foo.com  \n"

        rest = rest.trim();
        var proto = protocolPattern.exec(rest);

        if (proto) {
          proto = proto[0];
          var lowerProto = proto.toLowerCase();
          this.protocol = lowerProto;
          rest = rest.substr(proto.length);
        } // figure out if it's got a host
        // user@server is *always* interpreted as a hostname, and url
        // resolution will treat //foo/bar as host=foo,path=bar because that's
        // how the browser resolves relative URLs.


        if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) {
          var slashes = rest.substr(0, 2) === '//';

          if (slashes && !(proto && hostlessProtocol[proto])) {
            rest = rest.substr(2);
            this.slashes = true;
          }
        }

        if (!hostlessProtocol[proto] && (slashes || proto && !slashedProtocol[proto])) {
          // there's a hostname.
          // the first instance of /, ?, ;, or # ends the host.
          //
          // If there is an @ in the hostname, then non-host chars *are* allowed
          // to the left of the last @ sign, unless some host-ending character
          // comes *before* the @-sign.
          // URLs are obnoxious.
          //
          // ex:
          // http://a@b@c/ => user:a@b host:c
          // http://a@b?@c => user:a host:c path:/?@c
          // v0.12 TODO(isaacs): This is not quite how Chrome does things.
          // Review our test case against browsers more comprehensively.
          // find the first instance of any hostEndingChars
          var hostEnd = -1;

          for (var i = 0; i < hostEndingChars.length; i++) {
            var hec = rest.indexOf(hostEndingChars[i]);
            if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) hostEnd = hec;
          } // at this point, either we have an explicit point where the
          // auth portion cannot go past, or the last @ char is the decider.


          var auth, atSign;

          if (hostEnd === -1) {
            // atSign can be anywhere.
            atSign = rest.lastIndexOf('@');
          } else {
            // atSign must be in auth portion.
            // http://a@b/c@d => host:b auth:a path:/c@d
            atSign = rest.lastIndexOf('@', hostEnd);
          } // Now we have a portion which is definitely the auth.
          // Pull that off.


          if (atSign !== -1) {
            auth = rest.slice(0, atSign);
            rest = rest.slice(atSign + 1);
            this.auth = decodeURIComponent(auth);
          } // the host is the remaining to the left of the first non-host char


          hostEnd = -1;

          for (var i = 0; i < nonHostChars.length; i++) {
            var hec = rest.indexOf(nonHostChars[i]);
            if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) hostEnd = hec;
          } // if we still have not hit it, then the entire thing is a host.


          if (hostEnd === -1) hostEnd = rest.length;
          this.host = rest.slice(0, hostEnd);
          rest = rest.slice(hostEnd); // pull out port.

          this.parseHost(); // we've indicated that there is a hostname,
          // so even if it's empty, it has to be present.

          this.hostname = this.hostname || ''; // if hostname begins with [ and ends with ]
          // assume that it's an IPv6 address.

          var ipv6Hostname = this.hostname[0] === '[' && this.hostname[this.hostname.length - 1] === ']'; // validate a little.

          if (!ipv6Hostname) {
            var hostparts = this.hostname.split(/\./);

            for (var i = 0, l = hostparts.length; i < l; i++) {
              var part = hostparts[i];
              if (!part) continue;

              if (!part.match(hostnamePartPattern)) {
                var newpart = '';

                for (var j = 0, k = part.length; j < k; j++) {
                  if (part.charCodeAt(j) > 127) {
                    // we replace non-ASCII char with a temporary placeholder
                    // we need this to make sure size of hostname is not
                    // broken by replacing non-ASCII by nothing
                    newpart += 'x';
                  } else {
                    newpart += part[j];
                  }
                } // we test again with ASCII char only


                if (!newpart.match(hostnamePartPattern)) {
                  var validParts = hostparts.slice(0, i);
                  var notHost = hostparts.slice(i + 1);
                  var bit = part.match(hostnamePartStart);

                  if (bit) {
                    validParts.push(bit[1]);
                    notHost.unshift(bit[2]);
                  }

                  if (notHost.length) {
                    rest = '/' + notHost.join('.') + rest;
                  }

                  this.hostname = validParts.join('.');
                  break;
                }
              }
            }
          }

          if (this.hostname.length > hostnameMaxLen) {
            this.hostname = '';
          } else {
            // hostnames are always lower case.
            this.hostname = this.hostname.toLowerCase();
          }

          if (!ipv6Hostname) {
            // IDNA Support: Returns a puny coded representation of "domain".
            // It only converts the part of the domain name that
            // has non ASCII characters. I.e. it dosent matter if
            // you call it with a domain that already is in ASCII.
            var domainArray = this.hostname.split('.');
            var newOut = [];

            for (var i = 0; i < domainArray.length; ++i) {
              var s = domainArray[i];
              newOut.push(s.match(/[^A-Za-z0-9_-]/) ? 'xn--' + punycode.encode(s) : s);
            }

            this.hostname = newOut.join('.');
          }

          var p = this.port ? ':' + this.port : '';
          var h = this.hostname || '';
          this.host = h + p;
          this.href += this.host; // strip [ and ] from the hostname
          // the host field still retains them, though

          if (ipv6Hostname) {
            this.hostname = this.hostname.substr(1, this.hostname.length - 2);

            if (rest[0] !== '/') {
              rest = '/' + rest;
            }
          }
        } // now rest is set to the post-host stuff.
        // chop off any delim chars.


        if (!unsafeProtocol[lowerProto]) {
          // First, make 100% sure that any "autoEscape" chars get
          // escaped, even if encodeURIComponent doesn't think they
          // need to be.
          for (var i = 0, l = autoEscape.length; i < l; i++) {
            var ae = autoEscape[i];
            var esc = encodeURIComponent(ae);

            if (esc === ae) {
              esc = escape(ae);
            }

            rest = rest.split(ae).join(esc);
          }
        } // chop off from the tail first.


        var hash = rest.indexOf('#');

        if (hash !== -1) {
          // got a fragment string.
          this.hash = rest.substr(hash);
          rest = rest.slice(0, hash);
        }

        var qm = rest.indexOf('?');

        if (qm !== -1) {
          this.search = rest.substr(qm);
          this.query = rest.substr(qm + 1);

          if (parseQueryString) {
            this.query = querystring.parse(this.query);
          }

          rest = rest.slice(0, qm);
        } else if (parseQueryString) {
          // no query string, but parseQueryString still requested
          this.search = '';
          this.query = {};
        }

        if (rest) this.pathname = rest;

        if (slashedProtocol[lowerProto] && this.hostname && !this.pathname) {
          this.pathname = '/';
        } //to support http.request


        if (this.pathname || this.search) {
          var p = this.pathname || '';
          var s = this.search || '';
          this.path = p + s;
        } // finally, reconstruct the href based on what has been validated.


        this.href = this.format();
        return this;
      }; // format a parsed object into a url string


      function urlFormat(obj) {
        // ensure it's an object, and not a string url.
        // If it's an obj, this is a no-op.
        // this way, you can call url_format() on strings
        // to clean up potentially wonky urls.
        if (isString(obj)) obj = urlParse(obj);
        if (!(obj instanceof Url)) return Url.prototype.format.call(obj);
        return obj.format();
      }

      Url.prototype.format = function () {
        var auth = this.auth || '';

        if (auth) {
          auth = encodeURIComponent(auth);
          auth = auth.replace(/%3A/i, ':');
          auth += '@';
        }

        var protocol = this.protocol || '',
            pathname = this.pathname || '',
            hash = this.hash || '',
            host = false,
            query = '';

        if (this.host) {
          host = auth + this.host;
        } else if (this.hostname) {
          host = auth + (this.hostname.indexOf(':') === -1 ? this.hostname : '[' + this.hostname + ']');

          if (this.port) {
            host += ':' + this.port;
          }
        }

        if (this.query && isObject(this.query) && Object.keys(this.query).length) {
          query = querystring.stringify(this.query);
        }

        var search = this.search || query && '?' + query || '';
        if (protocol && protocol.substr(-1) !== ':') protocol += ':'; // only the slashedProtocols get the //.  Not mailto:, xmpp:, etc.
        // unless they had them to begin with.

        if (this.slashes || (!protocol || slashedProtocol[protocol]) && host !== false) {
          host = '//' + (host || '');
          if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;
        } else if (!host) {
          host = '';
        }

        if (hash && hash.charAt(0) !== '#') hash = '#' + hash;
        if (search && search.charAt(0) !== '?') search = '?' + search;
        pathname = pathname.replace(/[?#]/g, function (match) {
          return encodeURIComponent(match);
        });
        search = search.replace('#', '%23');
        return protocol + host + pathname + search + hash;
      };

      function urlResolve(source, relative) {
        return urlParse(source, false, true).resolve(relative);
      }

      Url.prototype.resolve = function (relative) {
        return this.resolveObject(urlParse(relative, false, true)).format();
      };

      function urlResolveObject(source, relative) {
        if (!source) return relative;
        return urlParse(source, false, true).resolveObject(relative);
      }

      Url.prototype.resolveObject = function (relative) {
        if (isString(relative)) {
          var rel = new Url();
          rel.parse(relative, false, true);
          relative = rel;
        }

        var result = new Url();
        Object.keys(this).forEach(function (k) {
          result[k] = this[k];
        }, this); // hash is always overridden, no matter what.
        // even href="" will remove it.

        result.hash = relative.hash; // if the relative url is empty, then there's nothing left to do here.

        if (relative.href === '') {
          result.href = result.format();
          return result;
        } // hrefs like //foo/bar always cut to the protocol.


        if (relative.slashes && !relative.protocol) {
          // take everything except the protocol from relative
          Object.keys(relative).forEach(function (k) {
            if (k !== 'protocol') result[k] = relative[k];
          }); //urlParse appends trailing / to urls like http://www.example.com

          if (slashedProtocol[result.protocol] && result.hostname && !result.pathname) {
            result.path = result.pathname = '/';
          }

          result.href = result.format();
          return result;
        }

        if (relative.protocol && relative.protocol !== result.protocol) {
          // if it's a known url protocol, then changing
          // the protocol does weird things
          // first, if it's not file:, then we MUST have a host,
          // and if there was a path
          // to begin with, then we MUST have a path.
          // if it is file:, then the host is dropped,
          // because that's known to be hostless.
          // anything else is assumed to be absolute.
          if (!slashedProtocol[relative.protocol]) {
            Object.keys(relative).forEach(function (k) {
              result[k] = relative[k];
            });
            result.href = result.format();
            return result;
          }

          result.protocol = relative.protocol;

          if (!relative.host && !hostlessProtocol[relative.protocol]) {
            var relPath = (relative.pathname || '').split('/');

            while (relPath.length && !(relative.host = relPath.shift())) {
              ;
            }

            if (!relative.host) relative.host = '';
            if (!relative.hostname) relative.hostname = '';
            if (relPath[0] !== '') relPath.unshift('');
            if (relPath.length < 2) relPath.unshift('');
            result.pathname = relPath.join('/');
          } else {
            result.pathname = relative.pathname;
          }

          result.search = relative.search;
          result.query = relative.query;
          result.host = relative.host || '';
          result.auth = relative.auth;
          result.hostname = relative.hostname || relative.host;
          result.port = relative.port; // to support http.request

          if (result.pathname || result.search) {
            var p = result.pathname || '';
            var s = result.search || '';
            result.path = p + s;
          }

          result.slashes = result.slashes || relative.slashes;
          result.href = result.format();
          return result;
        }

        var isSourceAbs = result.pathname && result.pathname.charAt(0) === '/',
            isRelAbs = relative.host || relative.pathname && relative.pathname.charAt(0) === '/',
            mustEndAbs = isRelAbs || isSourceAbs || result.host && relative.pathname,
            removeAllDots = mustEndAbs,
            srcPath = result.pathname && result.pathname.split('/') || [],
            relPath = relative.pathname && relative.pathname.split('/') || [],
            psychotic = result.protocol && !slashedProtocol[result.protocol]; // if the url is a non-slashed url, then relative
        // links like ../.. should be able
        // to crawl up to the hostname, as well.  This is strange.
        // result.protocol has already been set by now.
        // Later on, put the first path part into the host field.

        if (psychotic) {
          result.hostname = '';
          result.port = null;

          if (result.host) {
            if (srcPath[0] === '') srcPath[0] = result.host;else srcPath.unshift(result.host);
          }

          result.host = '';

          if (relative.protocol) {
            relative.hostname = null;
            relative.port = null;

            if (relative.host) {
              if (relPath[0] === '') relPath[0] = relative.host;else relPath.unshift(relative.host);
            }

            relative.host = null;
          }

          mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');
        }

        if (isRelAbs) {
          // it's absolute.
          result.host = relative.host || relative.host === '' ? relative.host : result.host;
          result.hostname = relative.hostname || relative.hostname === '' ? relative.hostname : result.hostname;
          result.search = relative.search;
          result.query = relative.query;
          srcPath = relPath; // fall through to the dot-handling below.
        } else if (relPath.length) {
          // it's relative
          // throw away the existing file, and take the new path instead.
          if (!srcPath) srcPath = [];
          srcPath.pop();
          srcPath = srcPath.concat(relPath);
          result.search = relative.search;
          result.query = relative.query;
        } else if (!isNullOrUndefined(relative.search)) {
          // just pull out the search.
          // like href='?foo'.
          // Put this after the other two cases because it simplifies the booleans
          if (psychotic) {
            result.hostname = result.host = srcPath.shift(); //occationaly the auth can get stuck only in host
            //this especialy happens in cases like
            //url.resolveObject('mailto:local1@domain1', 'local2@domain2')

            var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;

            if (authInHost) {
              result.auth = authInHost.shift();
              result.host = result.hostname = authInHost.shift();
            }
          }

          result.search = relative.search;
          result.query = relative.query; //to support http.request

          if (!isNull(result.pathname) || !isNull(result.search)) {
            result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : '');
          }

          result.href = result.format();
          return result;
        }

        if (!srcPath.length) {
          // no path at all.  easy.
          // we've already handled the other stuff above.
          result.pathname = null; //to support http.request

          if (result.search) {
            result.path = '/' + result.search;
          } else {
            result.path = null;
          }

          result.href = result.format();
          return result;
        } // if a url ENDs in . or .., then it must get a trailing slash.
        // however, if it ends in anything else non-slashy,
        // then it must NOT get a trailing slash.


        var last = srcPath.slice(-1)[0];
        var hasTrailingSlash = (result.host || relative.host) && (last === '.' || last === '..') || last === ''; // strip single dots, resolve double dots to parent dir
        // if the path tries to go above the root, `up` ends up > 0

        var up = 0;

        for (var i = srcPath.length; i >= 0; i--) {
          last = srcPath[i];

          if (last == '.') {
            srcPath.splice(i, 1);
          } else if (last === '..') {
            srcPath.splice(i, 1);
            up++;
          } else if (up) {
            srcPath.splice(i, 1);
            up--;
          }
        } // if the path is allowed to go above the root, restore leading ..s


        if (!mustEndAbs && !removeAllDots) {
          for (; up--; up) {
            srcPath.unshift('..');
          }
        }

        if (mustEndAbs && srcPath[0] !== '' && (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {
          srcPath.unshift('');
        }

        if (hasTrailingSlash && srcPath.join('/').substr(-1) !== '/') {
          srcPath.push('');
        }

        var isAbsolute = srcPath[0] === '' || srcPath[0] && srcPath[0].charAt(0) === '/'; // put the host back

        if (psychotic) {
          result.hostname = result.host = isAbsolute ? '' : srcPath.length ? srcPath.shift() : ''; //occationaly the auth can get stuck only in host
          //this especialy happens in cases like
          //url.resolveObject('mailto:local1@domain1', 'local2@domain2')

          var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;

          if (authInHost) {
            result.auth = authInHost.shift();
            result.host = result.hostname = authInHost.shift();
          }
        }

        mustEndAbs = mustEndAbs || result.host && srcPath.length;

        if (mustEndAbs && !isAbsolute) {
          srcPath.unshift('');
        }

        if (!srcPath.length) {
          result.pathname = null;
          result.path = null;
        } else {
          result.pathname = srcPath.join('/');
        } //to support request.http


        if (!isNull(result.pathname) || !isNull(result.search)) {
          result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : '');
        }

        result.auth = relative.auth || result.auth;
        result.slashes = result.slashes || relative.slashes;
        result.href = result.format();
        return result;
      };

      Url.prototype.parseHost = function () {
        var host = this.host;
        var port = portPattern.exec(host);

        if (port) {
          port = port[0];

          if (port !== ':') {
            this.port = port.substr(1);
          }

          host = host.substr(0, host.length - port.length);
        }

        if (host) this.hostname = host;
      };

      function isString(arg) {
        return typeof arg === "string";
      }

      function isObject(arg) {
        return typeof arg === 'object' && arg !== null;
      }

      function isNull(arg) {
        return arg === null;
      }

      function isNullOrUndefined(arg) {
        return arg == null;
      }
      /***/

    },

    /***/
    "D/JM":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/eu.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function DJM(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Basque [eu]
      //! author : Eneko Illarramendi : https://github.com/eillarra
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var eu = moment.defineLocale('eu', {
          months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),
          monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),
          monthsParseExact: true,
          weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),
          weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),
          weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'YYYY[ko] MMMM[ren] D[a]',
            LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',
            LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',
            l: 'YYYY-M-D',
            ll: 'YYYY[ko] MMM D[a]',
            lll: 'YYYY[ko] MMM D[a] HH:mm',
            llll: 'ddd, YYYY[ko] MMM D[a] HH:mm'
          },
          calendar: {
            sameDay: '[gaur] LT[etan]',
            nextDay: '[bihar] LT[etan]',
            nextWeek: 'dddd LT[etan]',
            lastDay: '[atzo] LT[etan]',
            lastWeek: '[aurreko] dddd LT[etan]',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s barru',
            past: 'duela %s',
            s: 'segundo batzuk',
            ss: '%d segundo',
            m: 'minutu bat',
            mm: '%d minutu',
            h: 'ordu bat',
            hh: '%d ordu',
            d: 'egun bat',
            dd: '%d egun',
            M: 'hilabete bat',
            MM: '%d hilabete',
            y: 'urte bat',
            yy: '%d urte'
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return eu;
      });
      /***/

    },

    /***/
    "D0XW":
    /*!****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/scheduler/async.js ***!
      \****************************************************************/

    /*! exports provided: asyncScheduler, async */

    /***/
    function D0XW(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "asyncScheduler", function () {
        return asyncScheduler;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "async", function () {
        return async;
      });
      /* harmony import */


      var _AsyncAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./AsyncAction */
      "3N8a");
      /* harmony import */


      var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./AsyncScheduler */
      "IjjT");

      var asyncScheduler = new _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__["AsyncScheduler"](_AsyncAction__WEBPACK_IMPORTED_MODULE_0__["AsyncAction"]);
      var async = asyncScheduler; //# sourceMappingURL=async.js.map

      /***/
    },

    /***/
    "D8LC":
    /*!************************************************!*\
      !*** ./node_modules/aws-sdk/lib/signers/v2.js ***!
      \************************************************/

    /*! no static exports found */

    /***/
    function D8LC(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ../core */
      "QsWE");

      var inherit = AWS.util.inherit;
      /**
       * @api private
       */

      AWS.Signers.V2 = inherit(AWS.Signers.RequestSigner, {
        addAuthorization: function addAuthorization(credentials, date) {
          if (!date) date = AWS.util.date.getDate();
          var r = this.request;
          r.params.Timestamp = AWS.util.date.iso8601(date);
          r.params.SignatureVersion = '2';
          r.params.SignatureMethod = 'HmacSHA256';
          r.params.AWSAccessKeyId = credentials.accessKeyId;

          if (credentials.sessionToken) {
            r.params.SecurityToken = credentials.sessionToken;
          }

          delete r.params.Signature; // delete old Signature for re-signing

          r.params.Signature = this.signature(credentials);
          r.body = AWS.util.queryParamsToString(r.params);
          r.headers['Content-Length'] = r.body.length;
        },
        signature: function signature(credentials) {
          return AWS.util.crypto.hmac(credentials.secretAccessKey, this.stringToSign(), 'base64');
        },
        stringToSign: function stringToSign() {
          var parts = [];
          parts.push(this.request.method);
          parts.push(this.request.endpoint.host.toLowerCase());
          parts.push(this.request.pathname());
          parts.push(AWS.util.queryParamsToString(this.request.params));
          return parts.join('\n');
        }
      });
      /**
       * @api private
       */

      module.exports = AWS.Signers.V2;
      /***/
    },

    /***/
    "DH7j":
    /*!*************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/isArray.js ***!
      \*************************************************************/

    /*! exports provided: isArray */

    /***/
    function DH7j(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isArray", function () {
        return isArray;
      });

      var isArray = function () {
        return Array.isArray || function (x) {
          return x && typeof x.length === 'number';
        };
      }(); //# sourceMappingURL=isArray.js.map

      /***/

    },

    /***/
    "DKr+":
    /*!************************************************!*\
      !*** ./node_modules/moment/locale/gom-latn.js ***!
      \************************************************/

    /*! no static exports found */

    /***/
    function DKr(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Konkani Latin script [gom-latn]
      //! author : The Discoverer : https://github.com/WikiDiscoverer
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        function processRelativeTime(number, withoutSuffix, key, isFuture) {
          var format = {
            s: ['thoddea sekondamni', 'thodde sekond'],
            ss: [number + ' sekondamni', number + ' sekond'],
            m: ['eka mintan', 'ek minut'],
            mm: [number + ' mintamni', number + ' mintam'],
            h: ['eka voran', 'ek vor'],
            hh: [number + ' voramni', number + ' voram'],
            d: ['eka disan', 'ek dis'],
            dd: [number + ' disamni', number + ' dis'],
            M: ['eka mhoinean', 'ek mhoino'],
            MM: [number + ' mhoineamni', number + ' mhoine'],
            y: ['eka vorsan', 'ek voros'],
            yy: [number + ' vorsamni', number + ' vorsam']
          };
          return isFuture ? format[key][0] : format[key][1];
        }

        var gomLatn = moment.defineLocale('gom-latn', {
          months: {
            standalone: 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'),
            format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split('_'),
            isFormat: /MMMM(\s)+D[oD]?/
          },
          monthsShort: 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),
          monthsParseExact: true,
          weekdays: "Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split('_'),
          weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),
          weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'A h:mm [vazta]',
            LTS: 'A h:mm:ss [vazta]',
            L: 'DD-MM-YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY A h:mm [vazta]',
            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]',
            llll: 'ddd, D MMM YYYY, A h:mm [vazta]'
          },
          calendar: {
            sameDay: '[Aiz] LT',
            nextDay: '[Faleam] LT',
            nextWeek: '[Fuddlo] dddd[,] LT',
            lastDay: '[Kal] LT',
            lastWeek: '[Fattlo] dddd[,] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s',
            past: '%s adim',
            s: processRelativeTime,
            ss: processRelativeTime,
            m: processRelativeTime,
            mm: processRelativeTime,
            h: processRelativeTime,
            hh: processRelativeTime,
            d: processRelativeTime,
            dd: processRelativeTime,
            M: processRelativeTime,
            MM: processRelativeTime,
            y: processRelativeTime,
            yy: processRelativeTime
          },
          dayOfMonthOrdinalParse: /\d{1,2}(er)/,
          ordinal: function ordinal(number, period) {
            switch (period) {
              // the ordinal 'er' only applies to day of the month
              case 'D':
                return number + 'er';

              default:
              case 'M':
              case 'Q':
              case 'DDD':
              case 'd':
              case 'w':
              case 'W':
                return number;
            }
          },
          week: {
            dow: 0,
            // Sunday is the first day of the week
            doy: 3 // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)

          },
          meridiemParse: /rati|sokallim|donparam|sanje/,
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === 'rati') {
              return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'sokallim') {
              return hour;
            } else if (meridiem === 'donparam') {
              return hour > 12 ? hour : hour + 12;
            } else if (meridiem === 'sanje') {
              return hour + 12;
            }
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 4) {
              return 'rati';
            } else if (hour < 12) {
              return 'sokallim';
            } else if (hour < 16) {
              return 'donparam';
            } else if (hour < 20) {
              return 'sanje';
            } else {
              return 'rati';
            }
          }
        });
        return gomLatn;
      });
      /***/

    },

    /***/
    "DSSA":
    /*!***************************************************************!*\
      !*** ./node_modules/aws-sdk/apis/s3-2006-03-01.waiters2.json ***!
      \***************************************************************/

    /*! exports provided: version, waiters, default */

    /***/
    function DSSA(module) {
      module.exports = JSON.parse("{\"version\":2,\"waiters\":{\"BucketExists\":{\"delay\":5,\"operation\":\"HeadBucket\",\"maxAttempts\":20,\"acceptors\":[{\"expected\":200,\"matcher\":\"status\",\"state\":\"success\"},{\"expected\":301,\"matcher\":\"status\",\"state\":\"success\"},{\"expected\":403,\"matcher\":\"status\",\"state\":\"success\"},{\"expected\":404,\"matcher\":\"status\",\"state\":\"retry\"}]},\"BucketNotExists\":{\"delay\":5,\"operation\":\"HeadBucket\",\"maxAttempts\":20,\"acceptors\":[{\"expected\":404,\"matcher\":\"status\",\"state\":\"success\"}]},\"ObjectExists\":{\"delay\":5,\"operation\":\"HeadObject\",\"maxAttempts\":20,\"acceptors\":[{\"expected\":200,\"matcher\":\"status\",\"state\":\"success\"},{\"expected\":404,\"matcher\":\"status\",\"state\":\"retry\"}]},\"ObjectNotExists\":{\"delay\":5,\"operation\":\"HeadObject\",\"maxAttempts\":20,\"acceptors\":[{\"expected\":404,\"matcher\":\"status\",\"state\":\"success\"}]}}}");
      /***/
    },

    /***/
    "Dkky":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/fr-ch.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function Dkky(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : French (Switzerland) [fr-ch]
      //! author : Gaspard Bucher : https://github.com/gaspard
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var frCh = moment.defineLocale('fr-ch', {
          months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
          monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
          monthsParseExact: true,
          weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
          weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
          weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[Aujourd’hui à] LT',
            nextDay: '[Demain à] LT',
            nextWeek: 'dddd [à] LT',
            lastDay: '[Hier à] LT',
            lastWeek: 'dddd [dernier à] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'dans %s',
            past: 'il y a %s',
            s: 'quelques secondes',
            ss: '%d secondes',
            m: 'une minute',
            mm: '%d minutes',
            h: 'une heure',
            hh: '%d heures',
            d: 'un jour',
            dd: '%d jours',
            M: 'un mois',
            MM: '%d mois',
            y: 'un an',
            yy: '%d ans'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
          ordinal: function ordinal(number, period) {
            switch (period) {
              // Words with masculine grammatical gender: mois, trimestre, jour
              default:
              case 'M':
              case 'Q':
              case 'D':
              case 'DDD':
              case 'd':
                return number + (number === 1 ? 'er' : 'e');
              // Words with feminine grammatical gender: semaine

              case 'w':
              case 'W':
                return number + (number === 1 ? 're' : 'e');
            }
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return frCh;
      });
      /***/

    },

    /***/
    "Dmvi":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/en-au.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function Dmvi(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : English (Australia) [en-au]
      //! author : Jared Morse : https://github.com/jarcoal
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var enAu = moment.defineLocale('en-au', {
          months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
          monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
          weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
          weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
          weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
          longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A'
          },
          calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
          ordinal: function ordinal(number) {
            var b = number % 10,
                output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';
            return number + output;
          },
          week: {
            dow: 0,
            // Sunday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return enAu;
      });
      /***/

    },

    /***/
    "DoHr":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/tr.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function DoHr(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Turkish [tr]
      //! authors : Erhan Gundogan : https://github.com/erhangundogan,
      //!           Burak Yiğit Kaya: https://github.com/BYK
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var suffixes = {
          1: "'inci",
          5: "'inci",
          8: "'inci",
          70: "'inci",
          80: "'inci",
          2: "'nci",
          7: "'nci",
          20: "'nci",
          50: "'nci",
          3: "'üncü",
          4: "'üncü",
          100: "'üncü",
          6: "'ncı",
          9: "'uncu",
          10: "'uncu",
          30: "'uncu",
          60: "'ıncı",
          90: "'ıncı"
        };
        var tr = moment.defineLocale('tr', {
          months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),
          monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),
          weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),
          weekdaysShort: 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),
          weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),
          meridiem: function meridiem(hours, minutes, isLower) {
            if (hours < 12) {
              return isLower ? 'öö' : 'ÖÖ';
            } else {
              return isLower ? 'ös' : 'ÖS';
            }
          },
          meridiemParse: /öö|ÖÖ|ös|ÖS/,
          isPM: function isPM(input) {
            return input === 'ös' || input === 'ÖS';
          },
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[bugün saat] LT',
            nextDay: '[yarın saat] LT',
            nextWeek: '[gelecek] dddd [saat] LT',
            lastDay: '[dün] LT',
            lastWeek: '[geçen] dddd [saat] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s sonra',
            past: '%s önce',
            s: 'birkaç saniye',
            ss: '%d saniye',
            m: 'bir dakika',
            mm: '%d dakika',
            h: 'bir saat',
            hh: '%d saat',
            d: 'bir gün',
            dd: '%d gün',
            w: 'bir hafta',
            ww: '%d hafta',
            M: 'bir ay',
            MM: '%d ay',
            y: 'bir yıl',
            yy: '%d yıl'
          },
          ordinal: function ordinal(number, period) {
            switch (period) {
              case 'd':
              case 'D':
              case 'Do':
              case 'DD':
                return number;

              default:
                if (number === 0) {
                  // special case for zero
                  return number + "'ıncı";
                }

                var a = number % 10,
                    b = number % 100 - a,
                    c = number >= 100 ? 100 : null;
                return number + (suffixes[a] || suffixes[b] || suffixes[c]);
            }
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return tr;
      });
      /***/

    },

    /***/
    "Dvum":
    /*!*********************************************************!*\
      !*** ./node_modules/moment-timezone/moment-timezone.js ***!
      \*********************************************************/

    /*! no static exports found */

    /***/
    function Dvum(module, exports, __webpack_require__) {
      var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__; //! moment-timezone.js
      //! version : 0.5.33
      //! Copyright (c) JS Foundation and other contributors
      //! license : MIT
      //! github.com/moment/moment-timezone


      (function (root, factory) {
        "use strict";
        /*global define*/

        if (true && module.exports) {
          module.exports = factory(__webpack_require__(
          /*! moment */
          "wd/R")); // Node
        } else if (true) {
          !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(
          /*! moment */
          "wd/R")], __WEBPACK_AMD_DEFINE_FACTORY__ = factory, __WEBPACK_AMD_DEFINE_RESULT__ = typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? __WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__) : __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); // AMD
        } else {}
      })(this, function (moment) {
        "use strict"; // Resolves es6 module loading issue

        if (moment.version === undefined && moment["default"]) {
          moment = moment["default"];
        } // Do not load moment-timezone a second time.
        // if (moment.tz !== undefined) {
        // 	logError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion);
        // 	return moment;
        // }


        var VERSION = "0.5.33",
            zones = {},
            links = {},
            _countries = {},
            names = {},
            guesses = {},
            cachedGuess;

        if (!moment || typeof moment.version !== 'string') {
          logError('Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/');
        }

        var momentVersion = moment.version.split('.'),
            major = +momentVersion[0],
            minor = +momentVersion[1]; // Moment.js version check

        if (major < 2 || major === 2 && minor < 6) {
          logError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com');
        }
        /************************************
        	Unpacking
        ************************************/


        function charCodeToInt(charCode) {
          if (charCode > 96) {
            return charCode - 87;
          } else if (charCode > 64) {
            return charCode - 29;
          }

          return charCode - 48;
        }

        function unpackBase60(string) {
          var i = 0,
              parts = string.split('.'),
              whole = parts[0],
              fractional = parts[1] || '',
              multiplier = 1,
              num,
              out = 0,
              sign = 1; // handle negative numbers

          if (string.charCodeAt(0) === 45) {
            i = 1;
            sign = -1;
          } // handle digits before the decimal


          for (i; i < whole.length; i++) {
            num = charCodeToInt(whole.charCodeAt(i));
            out = 60 * out + num;
          } // handle digits after the decimal


          for (i = 0; i < fractional.length; i++) {
            multiplier = multiplier / 60;
            num = charCodeToInt(fractional.charCodeAt(i));
            out += num * multiplier;
          }

          return out * sign;
        }

        function arrayToInt(array) {
          for (var i = 0; i < array.length; i++) {
            array[i] = unpackBase60(array[i]);
          }
        }

        function intToUntil(array, length) {
          for (var i = 0; i < length; i++) {
            array[i] = Math.round((array[i - 1] || 0) + array[i] * 60000); // minutes to milliseconds
          }

          array[length - 1] = Infinity;
        }

        function mapIndices(source, indices) {
          var out = [],
              i;

          for (i = 0; i < indices.length; i++) {
            out[i] = source[indices[i]];
          }

          return out;
        }

        function unpack(string) {
          var data = string.split('|'),
              offsets = data[2].split(' '),
              indices = data[3].split(''),
              untils = data[4].split(' ');
          arrayToInt(offsets);
          arrayToInt(indices);
          arrayToInt(untils);
          intToUntil(untils, indices.length);
          return {
            name: data[0],
            abbrs: mapIndices(data[1].split(' '), indices),
            offsets: mapIndices(offsets, indices),
            untils: untils,
            population: data[5] | 0
          };
        }
        /************************************
        	Zone object
        ************************************/


        function Zone(packedString) {
          if (packedString) {
            this._set(unpack(packedString));
          }
        }

        Zone.prototype = {
          _set: function _set(unpacked) {
            this.name = unpacked.name;
            this.abbrs = unpacked.abbrs;
            this.untils = unpacked.untils;
            this.offsets = unpacked.offsets;
            this.population = unpacked.population;
          },
          _index: function _index(timestamp) {
            var target = +timestamp,
                untils = this.untils,
                i;

            for (i = 0; i < untils.length; i++) {
              if (target < untils[i]) {
                return i;
              }
            }
          },
          countries: function countries() {
            var zone_name = this.name;
            return Object.keys(_countries).filter(function (country_code) {
              return _countries[country_code].zones.indexOf(zone_name) !== -1;
            });
          },
          parse: function parse(timestamp) {
            var target = +timestamp,
                offsets = this.offsets,
                untils = this.untils,
                max = untils.length - 1,
                offset,
                offsetNext,
                offsetPrev,
                i;

            for (i = 0; i < max; i++) {
              offset = offsets[i];
              offsetNext = offsets[i + 1];
              offsetPrev = offsets[i ? i - 1 : i];

              if (offset < offsetNext && tz.moveAmbiguousForward) {
                offset = offsetNext;
              } else if (offset > offsetPrev && tz.moveInvalidForward) {
                offset = offsetPrev;
              }

              if (target < untils[i] - offset * 60000) {
                return offsets[i];
              }
            }

            return offsets[max];
          },
          abbr: function abbr(mom) {
            return this.abbrs[this._index(mom)];
          },
          offset: function offset(mom) {
            logError("zone.offset has been deprecated in favor of zone.utcOffset");
            return this.offsets[this._index(mom)];
          },
          utcOffset: function utcOffset(mom) {
            return this.offsets[this._index(mom)];
          }
        };
        /************************************
        	Country object
        ************************************/

        function Country(country_name, zone_names) {
          this.name = country_name;
          this.zones = zone_names;
        }
        /************************************
        	Current Timezone
        ************************************/


        function OffsetAt(at) {
          var timeString = at.toTimeString();
          var abbr = timeString.match(/\([a-z ]+\)/i);

          if (abbr && abbr[0]) {
            // 17:56:31 GMT-0600 (CST)
            // 17:56:31 GMT-0600 (Central Standard Time)
            abbr = abbr[0].match(/[A-Z]/g);
            abbr = abbr ? abbr.join('') : undefined;
          } else {
            // 17:56:31 CST
            // 17:56:31 GMT+0800 (台北標準時間)
            abbr = timeString.match(/[A-Z]{3,5}/g);
            abbr = abbr ? abbr[0] : undefined;
          }

          if (abbr === 'GMT') {
            abbr = undefined;
          }

          this.at = +at;
          this.abbr = abbr;
          this.offset = at.getTimezoneOffset();
        }

        function ZoneScore(zone) {
          this.zone = zone;
          this.offsetScore = 0;
          this.abbrScore = 0;
        }

        ZoneScore.prototype.scoreOffsetAt = function (offsetAt) {
          this.offsetScore += Math.abs(this.zone.utcOffset(offsetAt.at) - offsetAt.offset);

          if (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) {
            this.abbrScore++;
          }
        };

        function findChange(low, high) {
          var mid, diff;

          while (diff = ((high.at - low.at) / 12e4 | 0) * 6e4) {
            mid = new OffsetAt(new Date(low.at + diff));

            if (mid.offset === low.offset) {
              low = mid;
            } else {
              high = mid;
            }
          }

          return low;
        }

        function userOffsets() {
          var startYear = new Date().getFullYear() - 2,
              last = new OffsetAt(new Date(startYear, 0, 1)),
              offsets = [last],
              change,
              next,
              i;

          for (i = 1; i < 48; i++) {
            next = new OffsetAt(new Date(startYear, i, 1));

            if (next.offset !== last.offset) {
              change = findChange(last, next);
              offsets.push(change);
              offsets.push(new OffsetAt(new Date(change.at + 6e4)));
            }

            last = next;
          }

          for (i = 0; i < 4; i++) {
            offsets.push(new OffsetAt(new Date(startYear + i, 0, 1)));
            offsets.push(new OffsetAt(new Date(startYear + i, 6, 1)));
          }

          return offsets;
        }

        function sortZoneScores(a, b) {
          if (a.offsetScore !== b.offsetScore) {
            return a.offsetScore - b.offsetScore;
          }

          if (a.abbrScore !== b.abbrScore) {
            return a.abbrScore - b.abbrScore;
          }

          if (a.zone.population !== b.zone.population) {
            return b.zone.population - a.zone.population;
          }

          return b.zone.name.localeCompare(a.zone.name);
        }

        function addToGuesses(name, offsets) {
          var i, offset;
          arrayToInt(offsets);

          for (i = 0; i < offsets.length; i++) {
            offset = offsets[i];
            guesses[offset] = guesses[offset] || {};
            guesses[offset][name] = true;
          }
        }

        function guessesForUserOffsets(offsets) {
          var offsetsLength = offsets.length,
              filteredGuesses = {},
              out = [],
              i,
              j,
              guessesOffset;

          for (i = 0; i < offsetsLength; i++) {
            guessesOffset = guesses[offsets[i].offset] || {};

            for (j in guessesOffset) {
              if (guessesOffset.hasOwnProperty(j)) {
                filteredGuesses[j] = true;
              }
            }
          }

          for (i in filteredGuesses) {
            if (filteredGuesses.hasOwnProperty(i)) {
              out.push(names[i]);
            }
          }

          return out;
        }

        function rebuildGuess() {
          // use Intl API when available and returning valid time zone
          try {
            var intlName = Intl.DateTimeFormat().resolvedOptions().timeZone;

            if (intlName && intlName.length > 3) {
              var name = names[normalizeName(intlName)];

              if (name) {
                return name;
              }

              logError("Moment Timezone found " + intlName + " from the Intl api, but did not have that data loaded.");
            }
          } catch (e) {// Intl unavailable, fall back to manual guessing.
          }

          var offsets = userOffsets(),
              offsetsLength = offsets.length,
              guesses = guessesForUserOffsets(offsets),
              zoneScores = [],
              zoneScore,
              i,
              j;

          for (i = 0; i < guesses.length; i++) {
            zoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength);

            for (j = 0; j < offsetsLength; j++) {
              zoneScore.scoreOffsetAt(offsets[j]);
            }

            zoneScores.push(zoneScore);
          }

          zoneScores.sort(sortZoneScores);
          return zoneScores.length > 0 ? zoneScores[0].zone.name : undefined;
        }

        function guess(ignoreCache) {
          if (!cachedGuess || ignoreCache) {
            cachedGuess = rebuildGuess();
          }

          return cachedGuess;
        }
        /************************************
        	Global Methods
        ************************************/


        function normalizeName(name) {
          return (name || '').toLowerCase().replace(/\//g, '_');
        }

        function addZone(packed) {
          var i, name, split, normalized;

          if (typeof packed === "string") {
            packed = [packed];
          }

          for (i = 0; i < packed.length; i++) {
            split = packed[i].split('|');
            name = split[0];
            normalized = normalizeName(name);
            zones[normalized] = packed[i];
            names[normalized] = name;
            addToGuesses(normalized, split[2].split(' '));
          }
        }

        function getZone(name, caller) {
          name = normalizeName(name);
          var zone = zones[name];
          var link;

          if (zone instanceof Zone) {
            return zone;
          }

          if (typeof zone === 'string') {
            zone = new Zone(zone);
            zones[name] = zone;
            return zone;
          } // Pass getZone to prevent recursion more than 1 level deep


          if (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) {
            zone = zones[name] = new Zone();

            zone._set(link);

            zone.name = names[name];
            return zone;
          }

          return null;
        }

        function getNames() {
          var i,
              out = [];

          for (i in names) {
            if (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) {
              out.push(names[i]);
            }
          }

          return out.sort();
        }

        function getCountryNames() {
          return Object.keys(_countries);
        }

        function addLink(aliases) {
          var i, alias, normal0, normal1;

          if (typeof aliases === "string") {
            aliases = [aliases];
          }

          for (i = 0; i < aliases.length; i++) {
            alias = aliases[i].split('|');
            normal0 = normalizeName(alias[0]);
            normal1 = normalizeName(alias[1]);
            links[normal0] = normal1;
            names[normal0] = alias[0];
            links[normal1] = normal0;
            names[normal1] = alias[1];
          }
        }

        function addCountries(data) {
          var i, country_code, country_zones, split;
          if (!data || !data.length) return;

          for (i = 0; i < data.length; i++) {
            split = data[i].split('|');
            country_code = split[0].toUpperCase();
            country_zones = split[1].split(' ');
            _countries[country_code] = new Country(country_code, country_zones);
          }
        }

        function getCountry(name) {
          name = name.toUpperCase();
          return _countries[name] || null;
        }

        function zonesForCountry(country, with_offset) {
          country = getCountry(country);
          if (!country) return null;
          var zones = country.zones.sort();

          if (with_offset) {
            return zones.map(function (zone_name) {
              var zone = getZone(zone_name);
              return {
                name: zone_name,
                offset: zone.utcOffset(new Date())
              };
            });
          }

          return zones;
        }

        function loadData(data) {
          addZone(data.zones);
          addLink(data.links);
          addCountries(data.countries);
          tz.dataVersion = data.version;
        }

        function zoneExists(name) {
          if (!zoneExists.didShowError) {
            zoneExists.didShowError = true;
            logError("moment.tz.zoneExists('" + name + "') has been deprecated in favor of !moment.tz.zone('" + name + "')");
          }

          return !!getZone(name);
        }

        function needsOffset(m) {
          var isUnixTimestamp = m._f === 'X' || m._f === 'x';
          return !!(m._a && m._tzm === undefined && !isUnixTimestamp);
        }

        function logError(message) {
          if (typeof console !== 'undefined' && typeof console.error === 'function') {
            console.error(message);
          }
        }
        /************************************
        	moment.tz namespace
        ************************************/


        function tz(input) {
          var args = Array.prototype.slice.call(arguments, 0, -1),
              name = arguments[arguments.length - 1],
              zone = getZone(name),
              out = moment.utc.apply(null, args);

          if (zone && !moment.isMoment(input) && needsOffset(out)) {
            out.add(zone.parse(out), 'minutes');
          }

          out.tz(name);
          return out;
        }

        tz.version = VERSION;
        tz.dataVersion = '';
        tz._zones = zones;
        tz._links = links;
        tz._names = names;
        tz._countries = _countries;
        tz.add = addZone;
        tz.link = addLink;
        tz.load = loadData;
        tz.zone = getZone;
        tz.zoneExists = zoneExists; // deprecated in 0.1.0

        tz.guess = guess;
        tz.names = getNames;
        tz.Zone = Zone;
        tz.unpack = unpack;
        tz.unpackBase60 = unpackBase60;
        tz.needsOffset = needsOffset;
        tz.moveInvalidForward = true;
        tz.moveAmbiguousForward = false;
        tz.countries = getCountryNames;
        tz.zonesForCountry = zonesForCountry;
        /************************************
        	Interface with Moment.js
        ************************************/

        var fn = moment.fn;
        moment.tz = tz;
        moment.defaultZone = null;

        moment.updateOffset = function (mom, keepTime) {
          var zone = moment.defaultZone,
              offset;

          if (mom._z === undefined) {
            if (zone && needsOffset(mom) && !mom._isUTC) {
              mom._d = moment.utc(mom._a)._d;
              mom.utc().add(zone.parse(mom), 'minutes');
            }

            mom._z = zone;
          }

          if (mom._z) {
            offset = mom._z.utcOffset(mom);

            if (Math.abs(offset) < 16) {
              offset = offset / 60;
            }

            if (mom.utcOffset !== undefined) {
              var z = mom._z;
              mom.utcOffset(-offset, keepTime);
              mom._z = z;
            } else {
              mom.zone(offset, keepTime);
            }
          }
        };

        fn.tz = function (name, keepTime) {
          if (name) {
            if (typeof name !== 'string') {
              throw new Error('Time zone name must be a string, got ' + name + ' [' + typeof name + ']');
            }

            this._z = getZone(name);

            if (this._z) {
              moment.updateOffset(this, keepTime);
            } else {
              logError("Moment Timezone has no data for " + name + ". See http://momentjs.com/timezone/docs/#/data-loading/.");
            }

            return this;
          }

          if (this._z) {
            return this._z.name;
          }
        };

        function abbrWrap(old) {
          return function () {
            if (this._z) {
              return this._z.abbr(this);
            }

            return old.call(this);
          };
        }

        function resetZoneWrap(old) {
          return function () {
            this._z = null;
            return old.apply(this, arguments);
          };
        }

        function resetZoneWrap2(old) {
          return function () {
            if (arguments.length > 0) this._z = null;
            return old.apply(this, arguments);
          };
        }

        fn.zoneName = abbrWrap(fn.zoneName);
        fn.zoneAbbr = abbrWrap(fn.zoneAbbr);
        fn.utc = resetZoneWrap(fn.utc);
        fn.local = resetZoneWrap(fn.local);
        fn.utcOffset = resetZoneWrap2(fn.utcOffset);

        moment.tz.setDefault = function (name) {
          if (major < 2 || major === 2 && minor < 9) {
            logError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.');
          }

          moment.defaultZone = name ? getZone(name) : null;
          return moment;
        }; // Cloning a moment should include the _z property.


        var momentProperties = moment.momentProperties;

        if (Object.prototype.toString.call(momentProperties) === '[object Array]') {
          // moment 2.8.1+
          momentProperties.push('_z');
          momentProperties.push('_a');
        } else if (momentProperties) {
          // moment 2.7.0
          momentProperties._z = null;
        } // INJECT DATA


        return moment;
      });
      /***/

    },

    /***/
    "DxQv":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/da.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function DxQv(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Danish [da]
      //! author : Ulrik Nielsen : https://github.com/mrbase
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var da = moment.defineLocale('da', {
          months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),
          monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
          weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
          weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'),
          weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY HH:mm',
            LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm'
          },
          calendar: {
            sameDay: '[i dag kl.] LT',
            nextDay: '[i morgen kl.] LT',
            nextWeek: 'på dddd [kl.] LT',
            lastDay: '[i går kl.] LT',
            lastWeek: '[i] dddd[s kl.] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'om %s',
            past: '%s siden',
            s: 'få sekunder',
            ss: '%d sekunder',
            m: 'et minut',
            mm: '%d minutter',
            h: 'en time',
            hh: '%d timer',
            d: 'en dag',
            dd: '%d dage',
            M: 'en måned',
            MM: '%d måneder',
            y: 'et år',
            yy: '%d år'
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return da;
      });
      /***/

    },

    /***/
    "Dzi0":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/tl-ph.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function Dzi0(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Tagalog (Philippines) [tl-ph]
      //! author : Dan Hagman : https://github.com/hagmandan
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var tlPh = moment.defineLocale('tl-ph', {
          months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),
          monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
          weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),
          weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
          weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'MM/D/YYYY',
            LL: 'MMMM D, YYYY',
            LLL: 'MMMM D, YYYY HH:mm',
            LLLL: 'dddd, MMMM DD, YYYY HH:mm'
          },
          calendar: {
            sameDay: 'LT [ngayong araw]',
            nextDay: '[Bukas ng] LT',
            nextWeek: 'LT [sa susunod na] dddd',
            lastDay: 'LT [kahapon]',
            lastWeek: 'LT [noong nakaraang] dddd',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'sa loob ng %s',
            past: '%s ang nakalipas',
            s: 'ilang segundo',
            ss: '%d segundo',
            m: 'isang minuto',
            mm: '%d minuto',
            h: 'isang oras',
            hh: '%d oras',
            d: 'isang araw',
            dd: '%d araw',
            M: 'isang buwan',
            MM: '%d buwan',
            y: 'isang taon',
            yy: '%d taon'
          },
          dayOfMonthOrdinalParse: /\d{1,2}/,
          ordinal: function ordinal(number) {
            return number;
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return tlPh;
      });
      /***/

    },

    /***/
    "E+lV":
    /*!***********************************************!*\
      !*** ./node_modules/moment/locale/sr-cyrl.js ***!
      \***********************************************/

    /*! no static exports found */

    /***/
    function ELV(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Serbian Cyrillic [sr-cyrl]
      //! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
      //! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var translator = {
          words: {
            //Different grammatical cases
            ss: ['секунда', 'секунде', 'секунди'],
            m: ['један минут', 'једне минуте'],
            mm: ['минут', 'минуте', 'минута'],
            h: ['један сат', 'једног сата'],
            hh: ['сат', 'сата', 'сати'],
            dd: ['дан', 'дана', 'дана'],
            MM: ['месец', 'месеца', 'месеци'],
            yy: ['година', 'године', 'година']
          },
          correctGrammaticalCase: function correctGrammaticalCase(number, wordKey) {
            return number === 1 ? wordKey[0] : number >= 2 && number <= 4 ? wordKey[1] : wordKey[2];
          },
          translate: function translate(number, withoutSuffix, key) {
            var wordKey = translator.words[key];

            if (key.length === 1) {
              return withoutSuffix ? wordKey[0] : wordKey[1];
            } else {
              return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
            }
          }
        };
        var srCyrl = moment.defineLocale('sr-cyrl', {
          months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),
          monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),
          monthsParseExact: true,
          weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),
          weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),
          weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'D. M. YYYY.',
            LL: 'D. MMMM YYYY.',
            LLL: 'D. MMMM YYYY. H:mm',
            LLLL: 'dddd, D. MMMM YYYY. H:mm'
          },
          calendar: {
            sameDay: '[данас у] LT',
            nextDay: '[сутра у] LT',
            nextWeek: function nextWeek() {
              switch (this.day()) {
                case 0:
                  return '[у] [недељу] [у] LT';

                case 3:
                  return '[у] [среду] [у] LT';

                case 6:
                  return '[у] [суботу] [у] LT';

                case 1:
                case 2:
                case 4:
                case 5:
                  return '[у] dddd [у] LT';
              }
            },
            lastDay: '[јуче у] LT',
            lastWeek: function lastWeek() {
              var lastWeekDays = ['[прошле] [недеље] [у] LT', '[прошлог] [понедељка] [у] LT', '[прошлог] [уторка] [у] LT', '[прошле] [среде] [у] LT', '[прошлог] [четвртка] [у] LT', '[прошлог] [петка] [у] LT', '[прошле] [суботе] [у] LT'];
              return lastWeekDays[this.day()];
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: 'за %s',
            past: 'пре %s',
            s: 'неколико секунди',
            ss: translator.translate,
            m: translator.translate,
            mm: translator.translate,
            h: translator.translate,
            hh: translator.translate,
            d: 'дан',
            dd: translator.translate,
            M: 'месец',
            MM: translator.translate,
            y: 'годину',
            yy: translator.translate
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 1st is the first week of the year.

          }
        });
        return srCyrl;
      });
      /***/

    },

    /***/
    "EOgW":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/th.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function EOgW(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Thai [th]
      //! author : Kridsada Thanabulpong : https://github.com/sirn
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var th = moment.defineLocale('th', {
          months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),
          monthsShort: 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),
          monthsParseExact: true,
          weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),
          weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'),
          // yes, three characters difference
          weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY เวลา H:mm',
            LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm'
          },
          meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,
          isPM: function isPM(input) {
            return input === 'หลังเที่ยง';
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 12) {
              return 'ก่อนเที่ยง';
            } else {
              return 'หลังเที่ยง';
            }
          },
          calendar: {
            sameDay: '[วันนี้ เวลา] LT',
            nextDay: '[พรุ่งนี้ เวลา] LT',
            nextWeek: 'dddd[หน้า เวลา] LT',
            lastDay: '[เมื่อวานนี้ เวลา] LT',
            lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'อีก %s',
            past: '%sที่แล้ว',
            s: 'ไม่กี่วินาที',
            ss: '%d วินาที',
            m: '1 นาที',
            mm: '%d นาที',
            h: '1 ชั่วโมง',
            hh: '%d ชั่วโมง',
            d: '1 วัน',
            dd: '%d วัน',
            w: '1 สัปดาห์',
            ww: '%d สัปดาห์',
            M: '1 เดือน',
            MM: '%d เดือน',
            y: '1 ปี',
            yy: '%d ปี'
          }
        });
        return th;
      });
      /***/

    },

    /***/
    "EQ5u":
    /*!*********************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/ConnectableObservable.js ***!
      \*********************************************************************************/

    /*! exports provided: ConnectableObservable, connectableObservableDescriptor */

    /***/
    function EQ5u(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ConnectableObservable", function () {
        return ConnectableObservable;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "connectableObservableDescriptor", function () {
        return connectableObservableDescriptor;
      });
      /* harmony import */


      var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subject */
      "XNiG");
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");
      /* harmony import */


      var _Subscription__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ../Subscription */
      "quSY");
      /* harmony import */


      var _operators_refCount__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ../operators/refCount */
      "x+ZX");

      var ConnectableObservable = /*#__PURE__*/function (_Observable__WEBPACK_) {
        _inherits2(ConnectableObservable, _Observable__WEBPACK_);

        var _super212 = _createSuper(ConnectableObservable);

        function ConnectableObservable(source, subjectFactory) {
          var _this527;

          _classCallCheck2(this, ConnectableObservable);

          _this527 = _super212.call(this);
          _this527.source = source;
          _this527.subjectFactory = subjectFactory;
          _this527._refCount = 0;
          _this527._isComplete = false;
          return _this527;
        }

        _createClass2(ConnectableObservable, [{
          key: "_subscribe",
          value: function _subscribe(subscriber) {
            return this.getSubject().subscribe(subscriber);
          }
        }, {
          key: "getSubject",
          value: function getSubject() {
            var subject = this._subject;

            if (!subject || subject.isStopped) {
              this._subject = this.subjectFactory();
            }

            return this._subject;
          }
        }, {
          key: "connect",
          value: function connect() {
            var connection = this._connection;

            if (!connection) {
              this._isComplete = false;
              connection = this._connection = new _Subscription__WEBPACK_IMPORTED_MODULE_3__["Subscription"]();
              connection.add(this.source.subscribe(new ConnectableSubscriber(this.getSubject(), this)));

              if (connection.closed) {
                this._connection = null;
                connection = _Subscription__WEBPACK_IMPORTED_MODULE_3__["Subscription"].EMPTY;
              }
            }

            return connection;
          }
        }, {
          key: "refCount",
          value: function refCount() {
            return Object(_operators_refCount__WEBPACK_IMPORTED_MODULE_4__["refCount"])()(this);
          }
        }]);

        return ConnectableObservable;
      }(_Observable__WEBPACK_IMPORTED_MODULE_1__["Observable"]);

      var connectableObservableDescriptor = function () {
        var connectableProto = ConnectableObservable.prototype;
        return {
          operator: {
            value: null
          },
          _refCount: {
            value: 0,
            writable: true
          },
          _subject: {
            value: null,
            writable: true
          },
          _connection: {
            value: null,
            writable: true
          },
          _subscribe: {
            value: connectableProto._subscribe
          },
          _isComplete: {
            value: connectableProto._isComplete,
            writable: true
          },
          getSubject: {
            value: connectableProto.getSubject
          },
          connect: {
            value: connectableProto.connect
          },
          refCount: {
            value: connectableProto.refCount
          }
        };
      }();

      var ConnectableSubscriber = /*#__PURE__*/function (_Subject__WEBPACK_IMP2) {
        _inherits2(ConnectableSubscriber, _Subject__WEBPACK_IMP2);

        var _super213 = _createSuper(ConnectableSubscriber);

        function ConnectableSubscriber(destination, connectable) {
          var _this528;

          _classCallCheck2(this, ConnectableSubscriber);

          _this528 = _super213.call(this, destination);
          _this528.connectable = connectable;
          return _this528;
        }

        _createClass2(ConnectableSubscriber, [{
          key: "_error",
          value: function _error(err) {
            this._unsubscribe();

            _get2(_getPrototypeOf2(ConnectableSubscriber.prototype), "_error", this).call(this, err);
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.connectable._isComplete = true;

            this._unsubscribe();

            _get2(_getPrototypeOf2(ConnectableSubscriber.prototype), "_complete", this).call(this);
          }
        }, {
          key: "_unsubscribe",
          value: function _unsubscribe() {
            var connectable = this.connectable;

            if (connectable) {
              this.connectable = null;
              var connection = connectable._connection;
              connectable._refCount = 0;
              connectable._subject = null;
              connectable._connection = null;

              if (connection) {
                connection.unsubscribe();
              }
            }
          }
        }]);

        return ConnectableSubscriber;
      }(_Subject__WEBPACK_IMPORTED_MODULE_0__["SubjectSubscriber"]);

      var RefCountOperator = /*#__PURE__*/function () {
        function RefCountOperator(connectable) {
          _classCallCheck2(this, RefCountOperator);

          this.connectable = connectable;
        }

        _createClass2(RefCountOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            var connectable = this.connectable;
            connectable._refCount++;
            var refCounter = new RefCountSubscriber(subscriber, connectable);
            var subscription = source.subscribe(refCounter);

            if (!refCounter.closed) {
              refCounter.connection = connectable.connect();
            }

            return subscription;
          }
        }]);

        return RefCountOperator;
      }();

      var RefCountSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_13) {
        _inherits2(RefCountSubscriber, _Subscriber__WEBPACK_13);

        var _super214 = _createSuper(RefCountSubscriber);

        function RefCountSubscriber(destination, connectable) {
          var _this529;

          _classCallCheck2(this, RefCountSubscriber);

          _this529 = _super214.call(this, destination);
          _this529.connectable = connectable;
          return _this529;
        }

        _createClass2(RefCountSubscriber, [{
          key: "_unsubscribe",
          value: function _unsubscribe() {
            var connectable = this.connectable;

            if (!connectable) {
              this.connection = null;
              return;
            }

            this.connectable = null;
            var refCount = connectable._refCount;

            if (refCount <= 0) {
              this.connection = null;
              return;
            }

            connectable._refCount = refCount - 1;

            if (refCount > 1) {
              this.connection = null;
              return;
            }

            var connection = this.connection;
            var sharedConnection = connectable._connection;
            this.connection = null;

            if (sharedConnection && (!connection || sharedConnection === connection)) {
              sharedConnection.unsubscribe();
            }
          }
        }]);

        return RefCountSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_2__["Subscriber"]); //# sourceMappingURL=ConnectableObservable.js.map

      /***/

    },

    /***/
    "ER1s":
    /*!*********************************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/date-time-picker.animations.js ***!
      \*********************************************************************************************/

    /*! exports provided: owlDateTimePickerAnimations */

    /***/
    function ER1s(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "owlDateTimePickerAnimations", function () {
        return owlDateTimePickerAnimations;
      });
      /* harmony import */


      var _angular_animations__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/animations */
      "R0Ic");

      var owlDateTimePickerAnimations = {
        transformPicker: Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["trigger"])('transformPicker', [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["state"])('void', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["style"])({
          opacity: 0,
          transform: 'scale(1, 0)'
        })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["state"])('enter', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["style"])({
          opacity: 1,
          transform: 'scale(1, 1)'
        })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["transition"])('void => enter', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["group"])([Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["query"])('@fadeInPicker', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["animateChild"])(), {
          optional: true
        }), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["animate"])('400ms cubic-bezier(0.25, 0.8, 0.25, 1)')])), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["transition"])('enter => void', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["animate"])('100ms linear', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["style"])({
          opacity: 0
        })))]),
        fadeInPicker: Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["trigger"])('fadeInPicker', [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["state"])('enter', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["style"])({
          opacity: 1
        })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["state"])('void', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["style"])({
          opacity: 0
        })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["transition"])('void => enter', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["animate"])('400ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)'))])
      };
      /***/
    },

    /***/
    "EVdn":
    /*!********************************************!*\
      !*** ./node_modules/jquery/dist/jquery.js ***!
      \********************************************/

    /*! no static exports found */

    /***/
    function EVdn(module, exports, __webpack_require__) {
      var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;
      /*!
      * jQuery JavaScript Library v3.5.1
      * https://jquery.com/
      *
      * Includes Sizzle.js
      * https://sizzlejs.com/
      *
      * Copyright JS Foundation and other contributors
      * Released under the MIT license
      * https://jquery.org/license
      *
      * Date: 2020-05-04T22:49Z
      */


      (function (global, factory) {
        "use strict";

        if (true && typeof module.exports === "object") {
          // For CommonJS and CommonJS-like environments where a proper `window`
          // is present, execute the factory and get jQuery.
          // For environments that do not have a `window` with a `document`
          // (such as Node.js), expose a factory as module.exports.
          // This accentuates the need for the creation of a real `window`.
          // e.g. var jQuery = require("jquery")(window);
          // See ticket #14549 for more info.
          module.exports = global.document ? factory(global, true) : function (w) {
            if (!w.document) {
              throw new Error("jQuery requires a window with a document");
            }

            return factory(w);
          };
        } else {
          factory(global);
        } // Pass this if window is not defined yet

      })(typeof window !== "undefined" ? window : this, function (window, noGlobal) {
        // Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
        // throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
        // arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
        // enough that all such attempts are guarded in a try block.
        "use strict";

        var arr = [];
        var getProto = Object.getPrototypeOf;
        var _slice = arr.slice;
        var flat = arr.flat ? function (array) {
          return arr.flat.call(array);
        } : function (array) {
          return arr.concat.apply([], array);
        };
        var push = arr.push;
        var indexOf = arr.indexOf;
        var class2type = {};
        var toString = class2type.toString;
        var hasOwn = class2type.hasOwnProperty;
        var fnToString = hasOwn.toString;
        var ObjectFunctionString = fnToString.call(Object);
        var support = {};

        var isFunction = function isFunction(obj) {
          // Support: Chrome <=57, Firefox <=52
          // In some browsers, typeof returns "function" for HTML <object> elements
          // (i.e., `typeof document.createElement( "object" ) === "function"`).
          // We don't want to classify *any* DOM node as a function.
          return typeof obj === "function" && typeof obj.nodeType !== "number";
        };

        var isWindow = function isWindow(obj) {
          return obj != null && obj === obj.window;
        };

        var document = window.document;
        var preservedScriptAttributes = {
          type: true,
          src: true,
          nonce: true,
          noModule: true
        };

        function DOMEval(code, node, doc) {
          doc = doc || document;
          var i,
              val,
              script = doc.createElement("script");
          script.text = code;

          if (node) {
            for (i in preservedScriptAttributes) {
              // Support: Firefox 64+, Edge 18+
              // Some browsers don't support the "nonce" property on scripts.
              // On the other hand, just using `getAttribute` is not enough as
              // the `nonce` attribute is reset to an empty string whenever it
              // becomes browsing-context connected.
              // See https://github.com/whatwg/html/issues/2369
              // See https://html.spec.whatwg.org/#nonce-attributes
              // The `node.getAttribute` check was added for the sake of
              // `jQuery.globalEval` so that it can fake a nonce-containing node
              // via an object.
              val = node[i] || node.getAttribute && node.getAttribute(i);

              if (val) {
                script.setAttribute(i, val);
              }
            }
          }

          doc.head.appendChild(script).parentNode.removeChild(script);
        }

        function toType(obj) {
          if (obj == null) {
            return obj + "";
          } // Support: Android <=2.3 only (functionish RegExp)


          return typeof obj === "object" || typeof obj === "function" ? class2type[toString.call(obj)] || "object" : typeof obj;
        }
        /* global Symbol */
        // Defining this global in .eslintrc.json would create a danger of using the global
        // unguarded in another place, it seems safer to define global only for this module


        var version = "3.5.1",
            // Define a local copy of jQuery
        jQuery = function jQuery(selector, context) {
          // The jQuery object is actually just the init constructor 'enhanced'
          // Need init if jQuery is called (just allow error to be thrown if not included)
          return new jQuery.fn.init(selector, context);
        };

        jQuery.fn = jQuery.prototype = {
          // The current version of jQuery being used
          jquery: version,
          constructor: jQuery,
          // The default length of a jQuery object is 0
          length: 0,
          toArray: function toArray() {
            return _slice.call(this);
          },
          // Get the Nth element in the matched element set OR
          // Get the whole matched element set as a clean array
          get: function get(num) {
            // Return all the elements in a clean array
            if (num == null) {
              return _slice.call(this);
            } // Return just the one element from the set


            return num < 0 ? this[num + this.length] : this[num];
          },
          // Take an array of elements and push it onto the stack
          // (returning the new matched element set)
          pushStack: function pushStack(elems) {
            // Build a new jQuery matched element set
            var ret = jQuery.merge(this.constructor(), elems); // Add the old object onto the stack (as a reference)

            ret.prevObject = this; // Return the newly-formed element set

            return ret;
          },
          // Execute a callback for every element in the matched set.
          each: function each(callback) {
            return jQuery.each(this, callback);
          },
          map: function map(callback) {
            return this.pushStack(jQuery.map(this, function (elem, i) {
              return callback.call(elem, i, elem);
            }));
          },
          slice: function slice() {
            return this.pushStack(_slice.apply(this, arguments));
          },
          first: function first() {
            return this.eq(0);
          },
          last: function last() {
            return this.eq(-1);
          },
          even: function even() {
            return this.pushStack(jQuery.grep(this, function (_elem, i) {
              return (i + 1) % 2;
            }));
          },
          odd: function odd() {
            return this.pushStack(jQuery.grep(this, function (_elem, i) {
              return i % 2;
            }));
          },
          eq: function eq(i) {
            var len = this.length,
                j = +i + (i < 0 ? len : 0);
            return this.pushStack(j >= 0 && j < len ? [this[j]] : []);
          },
          end: function end() {
            return this.prevObject || this.constructor();
          },
          // For internal use only.
          // Behaves like an Array's method, not like a jQuery method.
          push: push,
          sort: arr.sort,
          splice: arr.splice
        };

        jQuery.extend = jQuery.fn.extend = function () {
          var options,
              name,
              src,
              copy,
              copyIsArray,
              clone,
              target = arguments[0] || {},
              i = 1,
              length = arguments.length,
              deep = false; // Handle a deep copy situation

          if (typeof target === "boolean") {
            deep = target; // Skip the boolean and the target

            target = arguments[i] || {};
            i++;
          } // Handle case when target is a string or something (possible in deep copy)


          if (typeof target !== "object" && !isFunction(target)) {
            target = {};
          } // Extend jQuery itself if only one argument is passed


          if (i === length) {
            target = this;
            i--;
          }

          for (; i < length; i++) {
            // Only deal with non-null/undefined values
            if ((options = arguments[i]) != null) {
              // Extend the base object
              for (name in options) {
                copy = options[name]; // Prevent Object.prototype pollution
                // Prevent never-ending loop

                if (name === "__proto__" || target === copy) {
                  continue;
                } // Recurse if we're merging plain objects or arrays


                if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {
                  src = target[name]; // Ensure proper type for the source value

                  if (copyIsArray && !Array.isArray(src)) {
                    clone = [];
                  } else if (!copyIsArray && !jQuery.isPlainObject(src)) {
                    clone = {};
                  } else {
                    clone = src;
                  }

                  copyIsArray = false; // Never move original objects, clone them

                  target[name] = jQuery.extend(deep, clone, copy); // Don't bring in undefined values
                } else if (copy !== undefined) {
                  target[name] = copy;
                }
              }
            }
          } // Return the modified object


          return target;
        };

        jQuery.extend({
          // Unique for each copy of jQuery on the page
          expando: "jQuery" + (version + Math.random()).replace(/\D/g, ""),
          // Assume jQuery is ready without the ready module
          isReady: true,
          error: function error(msg) {
            throw new Error(msg);
          },
          noop: function noop() {},
          isPlainObject: function isPlainObject(obj) {
            var proto, Ctor; // Detect obvious negatives
            // Use toString instead of jQuery.type to catch host objects

            if (!obj || toString.call(obj) !== "[object Object]") {
              return false;
            }

            proto = getProto(obj); // Objects with no prototype (e.g., `Object.create( null )`) are plain

            if (!proto) {
              return true;
            } // Objects with prototype are plain iff they were constructed by a global Object function


            Ctor = hasOwn.call(proto, "constructor") && proto.constructor;
            return typeof Ctor === "function" && fnToString.call(Ctor) === ObjectFunctionString;
          },
          isEmptyObject: function isEmptyObject(obj) {
            var name;

            for (name in obj) {
              return false;
            }

            return true;
          },
          // Evaluates a script in a provided context; falls back to the global one
          // if not specified.
          globalEval: function globalEval(code, options, doc) {
            DOMEval(code, {
              nonce: options && options.nonce
            }, doc);
          },
          each: function each(obj, callback) {
            var length,
                i = 0;

            if (isArrayLike(obj)) {
              length = obj.length;

              for (; i < length; i++) {
                if (callback.call(obj[i], i, obj[i]) === false) {
                  break;
                }
              }
            } else {
              for (i in obj) {
                if (callback.call(obj[i], i, obj[i]) === false) {
                  break;
                }
              }
            }

            return obj;
          },
          // results is for internal usage only
          makeArray: function makeArray(arr, results) {
            var ret = results || [];

            if (arr != null) {
              if (isArrayLike(Object(arr))) {
                jQuery.merge(ret, typeof arr === "string" ? [arr] : arr);
              } else {
                push.call(ret, arr);
              }
            }

            return ret;
          },
          inArray: function inArray(elem, arr, i) {
            return arr == null ? -1 : indexOf.call(arr, elem, i);
          },
          // Support: Android <=4.0 only, PhantomJS 1 only
          // push.apply(_, arraylike) throws on ancient WebKit
          merge: function merge(first, second) {
            var len = +second.length,
                j = 0,
                i = first.length;

            for (; j < len; j++) {
              first[i++] = second[j];
            }

            first.length = i;
            return first;
          },
          grep: function grep(elems, callback, invert) {
            var callbackInverse,
                matches = [],
                i = 0,
                length = elems.length,
                callbackExpect = !invert; // Go through the array, only saving the items
            // that pass the validator function

            for (; i < length; i++) {
              callbackInverse = !callback(elems[i], i);

              if (callbackInverse !== callbackExpect) {
                matches.push(elems[i]);
              }
            }

            return matches;
          },
          // arg is for internal usage only
          map: function map(elems, callback, arg) {
            var length,
                value,
                i = 0,
                ret = []; // Go through the array, translating each of the items to their new values

            if (isArrayLike(elems)) {
              length = elems.length;

              for (; i < length; i++) {
                value = callback(elems[i], i, arg);

                if (value != null) {
                  ret.push(value);
                }
              } // Go through every key on the object,

            } else {
              for (i in elems) {
                value = callback(elems[i], i, arg);

                if (value != null) {
                  ret.push(value);
                }
              }
            } // Flatten any nested arrays


            return flat(ret);
          },
          // A global GUID counter for objects
          guid: 1,
          // jQuery.support is not used in Core but other projects attach their
          // properties to it so it needs to exist.
          support: support
        });

        if (typeof Symbol === "function") {
          jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];
        } // Populate the class2type map


        jQuery.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function (_i, name) {
          class2type["[object " + name + "]"] = name.toLowerCase();
        });

        function isArrayLike(obj) {
          // Support: real iOS 8.2 only (not reproducible in simulator)
          // `in` check used to prevent JIT error (gh-2145)
          // hasOwn isn't used here due to false negatives
          // regarding Nodelist length in IE
          var length = !!obj && "length" in obj && obj.length,
              type = toType(obj);

          if (isFunction(obj) || isWindow(obj)) {
            return false;
          }

          return type === "array" || length === 0 || typeof length === "number" && length > 0 && length - 1 in obj;
        }

        var Sizzle =
        /*!
         * Sizzle CSS Selector Engine v2.3.5
         * https://sizzlejs.com/
         *
         * Copyright JS Foundation and other contributors
         * Released under the MIT license
         * https://js.foundation/
         *
         * Date: 2020-03-14
         */
        function (window) {
          var i,
              support,
              Expr,
              getText,
              isXML,
              tokenize,
              compile,
              select,
              outermostContext,
              sortInput,
              hasDuplicate,
              // Local document vars
          setDocument,
              document,
              docElem,
              documentIsHTML,
              rbuggyQSA,
              rbuggyMatches,
              matches,
              contains,
              // Instance-specific data
          expando = "sizzle" + 1 * new Date(),
              preferredDoc = window.document,
              dirruns = 0,
              done = 0,
              classCache = createCache(),
              tokenCache = createCache(),
              compilerCache = createCache(),
              nonnativeSelectorCache = createCache(),
              sortOrder = function sortOrder(a, b) {
            if (a === b) {
              hasDuplicate = true;
            }

            return 0;
          },
              // Instance methods
          hasOwn = {}.hasOwnProperty,
              arr = [],
              pop = arr.pop,
              pushNative = arr.push,
              push = arr.push,
              slice = arr.slice,
              // Use a stripped-down indexOf as it's faster than native
          // https://jsperf.com/thor-indexof-vs-for/5
          indexOf = function indexOf(list, elem) {
            var i = 0,
                len = list.length;

            for (; i < len; i++) {
              if (list[i] === elem) {
                return i;
              }
            }

            return -1;
          },
              booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + "ismap|loop|multiple|open|readonly|required|scoped",
              // Regular expressions
          // http://www.w3.org/TR/css3-selectors/#whitespace
          whitespace = "[\\x20\\t\\r\\n\\f]",
              // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
          identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
              // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
          attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + // Operator (capture 2)
          "*([*^$|!~]?=)" + whitespace + // "Attribute values must be CSS identifiers [capture 5]
          // or strings [capture 3 or capture 4]"
          "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + "*\\]",
              pseudos = ":(" + identifier + ")(?:\\((" + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
          // 1. quoted (capture 3; capture 4 or capture 5)
          "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + // 2. simple (capture 6)
          "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + // 3. anything else (capture 2)
          ".*" + ")\\)|)",
              // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
          rwhitespace = new RegExp(whitespace + "+", "g"),
              rtrim = new RegExp("^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g"),
              rcomma = new RegExp("^" + whitespace + "*," + whitespace + "*"),
              rcombinators = new RegExp("^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*"),
              rdescend = new RegExp(whitespace + "|>"),
              rpseudo = new RegExp(pseudos),
              ridentifier = new RegExp("^" + identifier + "$"),
              matchExpr = {
            "ID": new RegExp("^#(" + identifier + ")"),
            "CLASS": new RegExp("^\\.(" + identifier + ")"),
            "TAG": new RegExp("^(" + identifier + "|[*])"),
            "ATTR": new RegExp("^" + attributes),
            "PSEUDO": new RegExp("^" + pseudos),
            "CHILD": new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i"),
            "bool": new RegExp("^(?:" + booleans + ")$", "i"),
            // For use in libraries implementing .is()
            // We use this for POS matching in `select`
            "needsContext": new RegExp("^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i")
          },
              rhtml = /HTML$/i,
              rinputs = /^(?:input|select|textarea|button)$/i,
              rheader = /^h\d$/i,
              rnative = /^[^{]+\{\s*\[native \w/,
              // Easily-parseable/retrievable ID or TAG or CLASS selectors
          rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
              rsibling = /[+~]/,
              // CSS escapes
          // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
          runescape = new RegExp("\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g"),
              funescape = function funescape(escape, nonHex) {
            var high = "0x" + escape.slice(1) - 0x10000;
            return nonHex ? // Strip the backslash prefix from a non-hex escape sequence
            nonHex : // Replace a hexadecimal escape sequence with the encoded Unicode code point
            // Support: IE <=11+
            // For values outside the Basic Multilingual Plane (BMP), manually construct a
            // surrogate pair
            high < 0 ? String.fromCharCode(high + 0x10000) : String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);
          },
              // CSS string/identifier serialization
          // https://drafts.csswg.org/cssom/#common-serializing-idioms
          rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
              fcssescape = function fcssescape(ch, asCodePoint) {
            if (asCodePoint) {
              // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
              if (ch === "\0") {
                return "\uFFFD";
              } // Control characters and (dependent upon position) numbers get escaped as code points


              return ch.slice(0, -1) + "\\" + ch.charCodeAt(ch.length - 1).toString(16) + " ";
            } // Other potentially-special ASCII characters get backslash-escaped


            return "\\" + ch;
          },
              // Used for iframes
          // See setDocument()
          // Removing the function wrapper causes a "Permission Denied"
          // error in IE
          unloadHandler = function unloadHandler() {
            setDocument();
          },
              inDisabledFieldset = addCombinator(function (elem) {
            return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
          }, {
            dir: "parentNode",
            next: "legend"
          }); // Optimize for push.apply( _, NodeList )


          try {
            push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes); // Support: Android<4.0
            // Detect silently failing push.apply
            // eslint-disable-next-line no-unused-expressions

            arr[preferredDoc.childNodes.length].nodeType;
          } catch (e) {
            push = {
              apply: arr.length ? // Leverage slice if possible
              function (target, els) {
                pushNative.apply(target, slice.call(els));
              } : // Support: IE<9
              // Otherwise append directly
              function (target, els) {
                var j = target.length,
                    i = 0; // Can't trust NodeList.length

                while (target[j++] = els[i++]) {}

                target.length = j - 1;
              }
            };
          }

          function Sizzle(selector, context, results, seed) {
            var m,
                i,
                elem,
                nid,
                match,
                groups,
                newSelector,
                newContext = context && context.ownerDocument,
                // nodeType defaults to 9, since context defaults to document
            nodeType = context ? context.nodeType : 9;
            results = results || []; // Return early from calls with invalid selector or context

            if (typeof selector !== "string" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {
              return results;
            } // Try to shortcut find operations (as opposed to filters) in HTML documents


            if (!seed) {
              setDocument(context);
              context = context || document;

              if (documentIsHTML) {
                // If the selector is sufficiently simple, try using a "get*By*" DOM method
                // (excepting DocumentFragment context, where the methods don't exist)
                if (nodeType !== 11 && (match = rquickExpr.exec(selector))) {
                  // ID selector
                  if (m = match[1]) {
                    // Document context
                    if (nodeType === 9) {
                      if (elem = context.getElementById(m)) {
                        // Support: IE, Opera, Webkit
                        // TODO: identify versions
                        // getElementById can match elements by name instead of ID
                        if (elem.id === m) {
                          results.push(elem);
                          return results;
                        }
                      } else {
                        return results;
                      } // Element context

                    } else {
                      // Support: IE, Opera, Webkit
                      // TODO: identify versions
                      // getElementById can match elements by name instead of ID
                      if (newContext && (elem = newContext.getElementById(m)) && contains(context, elem) && elem.id === m) {
                        results.push(elem);
                        return results;
                      }
                    } // Type selector

                  } else if (match[2]) {
                    push.apply(results, context.getElementsByTagName(selector));
                    return results; // Class selector
                  } else if ((m = match[3]) && support.getElementsByClassName && context.getElementsByClassName) {
                    push.apply(results, context.getElementsByClassName(m));
                    return results;
                  }
                } // Take advantage of querySelectorAll


                if (support.qsa && !nonnativeSelectorCache[selector + " "] && (!rbuggyQSA || !rbuggyQSA.test(selector)) && ( // Support: IE 8 only
                // Exclude object elements
                nodeType !== 1 || context.nodeName.toLowerCase() !== "object")) {
                  newSelector = selector;
                  newContext = context; // qSA considers elements outside a scoping root when evaluating child or
                  // descendant combinators, which is not what we want.
                  // In such cases, we work around the behavior by prefixing every selector in the
                  // list with an ID selector referencing the scope context.
                  // The technique has to be used as well when a leading combinator is used
                  // as such selectors are not recognized by querySelectorAll.
                  // Thanks to Andrew Dupont for this technique.

                  if (nodeType === 1 && (rdescend.test(selector) || rcombinators.test(selector))) {
                    // Expand context for sibling selectors
                    newContext = rsibling.test(selector) && testContext(context.parentNode) || context; // We can use :scope instead of the ID hack if the browser
                    // supports it & if we're not changing the context.

                    if (newContext !== context || !support.scope) {
                      // Capture the context ID, setting it first if necessary
                      if (nid = context.getAttribute("id")) {
                        nid = nid.replace(rcssescape, fcssescape);
                      } else {
                        context.setAttribute("id", nid = expando);
                      }
                    } // Prefix every selector in the list


                    groups = tokenize(selector);
                    i = groups.length;

                    while (i--) {
                      groups[i] = (nid ? "#" + nid : ":scope") + " " + toSelector(groups[i]);
                    }

                    newSelector = groups.join(",");
                  }

                  try {
                    push.apply(results, newContext.querySelectorAll(newSelector));
                    return results;
                  } catch (qsaError) {
                    nonnativeSelectorCache(selector, true);
                  } finally {
                    if (nid === expando) {
                      context.removeAttribute("id");
                    }
                  }
                }
              }
            } // All others


            return select(selector.replace(rtrim, "$1"), context, results, seed);
          }
          /**
           * Create key-value caches of limited size
           * @returns {function(string, object)} Returns the Object data after storing it on itself with
           *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
           *	deleting the oldest entry
           */


          function createCache() {
            var keys = [];

            function cache(key, value) {
              // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
              if (keys.push(key + " ") > Expr.cacheLength) {
                // Only keep the most recent entries
                delete cache[keys.shift()];
              }

              return cache[key + " "] = value;
            }

            return cache;
          }
          /**
           * Mark a function for special use by Sizzle
           * @param {Function} fn The function to mark
           */


          function markFunction(fn) {
            fn[expando] = true;
            return fn;
          }
          /**
           * Support testing using an element
           * @param {Function} fn Passed the created element and returns a boolean result
           */


          function assert(fn) {
            var el = document.createElement("fieldset");

            try {
              return !!fn(el);
            } catch (e) {
              return false;
            } finally {
              // Remove from its parent by default
              if (el.parentNode) {
                el.parentNode.removeChild(el);
              } // release memory in IE


              el = null;
            }
          }
          /**
           * Adds the same handler for all of the specified attrs
           * @param {String} attrs Pipe-separated list of attributes
           * @param {Function} handler The method that will be applied
           */


          function addHandle(attrs, handler) {
            var arr = attrs.split("|"),
                i = arr.length;

            while (i--) {
              Expr.attrHandle[arr[i]] = handler;
            }
          }
          /**
           * Checks document order of two siblings
           * @param {Element} a
           * @param {Element} b
           * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
           */


          function siblingCheck(a, b) {
            var cur = b && a,
                diff = cur && a.nodeType === 1 && b.nodeType === 1 && a.sourceIndex - b.sourceIndex; // Use IE sourceIndex if available on both nodes

            if (diff) {
              return diff;
            } // Check if b follows a


            if (cur) {
              while (cur = cur.nextSibling) {
                if (cur === b) {
                  return -1;
                }
              }
            }

            return a ? 1 : -1;
          }
          /**
           * Returns a function to use in pseudos for input types
           * @param {String} type
           */


          function createInputPseudo(type) {
            return function (elem) {
              var name = elem.nodeName.toLowerCase();
              return name === "input" && elem.type === type;
            };
          }
          /**
           * Returns a function to use in pseudos for buttons
           * @param {String} type
           */


          function createButtonPseudo(type) {
            return function (elem) {
              var name = elem.nodeName.toLowerCase();
              return (name === "input" || name === "button") && elem.type === type;
            };
          }
          /**
           * Returns a function to use in pseudos for :enabled/:disabled
           * @param {Boolean} disabled true for :disabled; false for :enabled
           */


          function createDisabledPseudo(disabled) {
            // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
            return function (elem) {
              // Only certain elements can match :enabled or :disabled
              // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
              // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
              if ("form" in elem) {
                // Check for inherited disabledness on relevant non-disabled elements:
                // * listed form-associated elements in a disabled fieldset
                //   https://html.spec.whatwg.org/multipage/forms.html#category-listed
                //   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
                // * option elements in a disabled optgroup
                //   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
                // All such elements have a "form" property.
                if (elem.parentNode && elem.disabled === false) {
                  // Option elements defer to a parent optgroup if present
                  if ("label" in elem) {
                    if ("label" in elem.parentNode) {
                      return elem.parentNode.disabled === disabled;
                    } else {
                      return elem.disabled === disabled;
                    }
                  } // Support: IE 6 - 11
                  // Use the isDisabled shortcut property to check for disabled fieldset ancestors


                  return elem.isDisabled === disabled || // Where there is no isDisabled, check manually

                  /* jshint -W018 */
                  elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled;
                }

                return elem.disabled === disabled; // Try to winnow out elements that can't be disabled before trusting the disabled property.
                // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
                // even exist on them, let alone have a boolean value.
              } else if ("label" in elem) {
                return elem.disabled === disabled;
              } // Remaining elements are neither :enabled nor :disabled


              return false;
            };
          }
          /**
           * Returns a function to use in pseudos for positionals
           * @param {Function} fn
           */


          function createPositionalPseudo(fn) {
            return markFunction(function (argument) {
              argument = +argument;
              return markFunction(function (seed, matches) {
                var j,
                    matchIndexes = fn([], seed.length, argument),
                    i = matchIndexes.length; // Match elements found at the specified indexes

                while (i--) {
                  if (seed[j = matchIndexes[i]]) {
                    seed[j] = !(matches[j] = seed[j]);
                  }
                }
              });
            });
          }
          /**
           * Checks a node for validity as a Sizzle context
           * @param {Element|Object=} context
           * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
           */


          function testContext(context) {
            return context && typeof context.getElementsByTagName !== "undefined" && context;
          } // Expose support vars for convenience


          support = Sizzle.support = {};
          /**
           * Detects XML nodes
           * @param {Element|Object} elem An element or a document
           * @returns {Boolean} True iff elem is a non-HTML XML node
           */

          isXML = Sizzle.isXML = function (elem) {
            var namespace = elem.namespaceURI,
                docElem = (elem.ownerDocument || elem).documentElement; // Support: IE <=8
            // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
            // https://bugs.jquery.com/ticket/4833

            return !rhtml.test(namespace || docElem && docElem.nodeName || "HTML");
          };
          /**
           * Sets document-related variables once based on the current document
           * @param {Element|Object} [doc] An element or document object to use to set the document
           * @returns {Object} Returns the current document
           */


          setDocument = Sizzle.setDocument = function (node) {
            var hasCompare,
                subWindow,
                doc = node ? node.ownerDocument || node : preferredDoc; // Return early if doc is invalid or already selected
            // Support: IE 11+, Edge 17 - 18+
            // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
            // two documents; shallow comparisons work.
            // eslint-disable-next-line eqeqeq

            if (doc == document || doc.nodeType !== 9 || !doc.documentElement) {
              return document;
            } // Update global variables


            document = doc;
            docElem = document.documentElement;
            documentIsHTML = !isXML(document); // Support: IE 9 - 11+, Edge 12 - 18+
            // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
            // Support: IE 11+, Edge 17 - 18+
            // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
            // two documents; shallow comparisons work.
            // eslint-disable-next-line eqeqeq

            if (preferredDoc != document && (subWindow = document.defaultView) && subWindow.top !== subWindow) {
              // Support: IE 11, Edge
              if (subWindow.addEventListener) {
                subWindow.addEventListener("unload", unloadHandler, false); // Support: IE 9 - 10 only
              } else if (subWindow.attachEvent) {
                subWindow.attachEvent("onunload", unloadHandler);
              }
            } // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,
            // Safari 4 - 5 only, Opera <=11.6 - 12.x only
            // IE/Edge & older browsers don't support the :scope pseudo-class.
            // Support: Safari 6.0 only
            // Safari 6.0 supports :scope but it's an alias of :root there.


            support.scope = assert(function (el) {
              docElem.appendChild(el).appendChild(document.createElement("div"));
              return typeof el.querySelectorAll !== "undefined" && !el.querySelectorAll(":scope fieldset div").length;
            });
            /* Attributes
            ---------------------------------------------------------------------- */
            // Support: IE<8
            // Verify that getAttribute really returns attributes and not properties
            // (excepting IE8 booleans)

            support.attributes = assert(function (el) {
              el.className = "i";
              return !el.getAttribute("className");
            });
            /* getElement(s)By*
            ---------------------------------------------------------------------- */
            // Check if getElementsByTagName("*") returns only elements

            support.getElementsByTagName = assert(function (el) {
              el.appendChild(document.createComment(""));
              return !el.getElementsByTagName("*").length;
            }); // Support: IE<9

            support.getElementsByClassName = rnative.test(document.getElementsByClassName); // Support: IE<10
            // Check if getElementById returns elements by name
            // The broken getElementById methods don't pick up programmatically-set names,
            // so use a roundabout getElementsByName test

            support.getById = assert(function (el) {
              docElem.appendChild(el).id = expando;
              return !document.getElementsByName || !document.getElementsByName(expando).length;
            }); // ID filter and find

            if (support.getById) {
              Expr.filter["ID"] = function (id) {
                var attrId = id.replace(runescape, funescape);
                return function (elem) {
                  return elem.getAttribute("id") === attrId;
                };
              };

              Expr.find["ID"] = function (id, context) {
                if (typeof context.getElementById !== "undefined" && documentIsHTML) {
                  var elem = context.getElementById(id);
                  return elem ? [elem] : [];
                }
              };
            } else {
              Expr.filter["ID"] = function (id) {
                var attrId = id.replace(runescape, funescape);
                return function (elem) {
                  var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
                  return node && node.value === attrId;
                };
              }; // Support: IE 6 - 7 only
              // getElementById is not reliable as a find shortcut


              Expr.find["ID"] = function (id, context) {
                if (typeof context.getElementById !== "undefined" && documentIsHTML) {
                  var node,
                      i,
                      elems,
                      elem = context.getElementById(id);

                  if (elem) {
                    // Verify the id attribute
                    node = elem.getAttributeNode("id");

                    if (node && node.value === id) {
                      return [elem];
                    } // Fall back on getElementsByName


                    elems = context.getElementsByName(id);
                    i = 0;

                    while (elem = elems[i++]) {
                      node = elem.getAttributeNode("id");

                      if (node && node.value === id) {
                        return [elem];
                      }
                    }
                  }

                  return [];
                }
              };
            } // Tag


            Expr.find["TAG"] = support.getElementsByTagName ? function (tag, context) {
              if (typeof context.getElementsByTagName !== "undefined") {
                return context.getElementsByTagName(tag); // DocumentFragment nodes don't have gEBTN
              } else if (support.qsa) {
                return context.querySelectorAll(tag);
              }
            } : function (tag, context) {
              var elem,
                  tmp = [],
                  i = 0,
                  // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
              results = context.getElementsByTagName(tag); // Filter out possible comments

              if (tag === "*") {
                while (elem = results[i++]) {
                  if (elem.nodeType === 1) {
                    tmp.push(elem);
                  }
                }

                return tmp;
              }

              return results;
            }; // Class

            Expr.find["CLASS"] = support.getElementsByClassName && function (className, context) {
              if (typeof context.getElementsByClassName !== "undefined" && documentIsHTML) {
                return context.getElementsByClassName(className);
              }
            };
            /* QSA/matchesSelector
            ---------------------------------------------------------------------- */
            // QSA and matchesSelector support
            // matchesSelector(:active) reports false when true (IE9/Opera 11.5)


            rbuggyMatches = []; // qSa(:focus) reports false when true (Chrome 21)
            // We allow this because of a bug in IE8/9 that throws an error
            // whenever `document.activeElement` is accessed on an iframe
            // So, we allow :focus to pass through QSA all the time to avoid the IE error
            // See https://bugs.jquery.com/ticket/13378

            rbuggyQSA = [];

            if (support.qsa = rnative.test(document.querySelectorAll)) {
              // Build QSA regex
              // Regex strategy adopted from Diego Perini
              assert(function (el) {
                var input; // Select is set to empty string on purpose
                // This is to test IE's treatment of not explicitly
                // setting a boolean content attribute,
                // since its presence should be enough
                // https://bugs.jquery.com/ticket/12359

                docElem.appendChild(el).innerHTML = "<a id='" + expando + "'></a>" + "<select id='" + expando + "-\r\\' msallowcapture=''>" + "<option selected=''></option></select>"; // Support: IE8, Opera 11-12.16
                // Nothing should be selected when empty strings follow ^= or $= or *=
                // The test attribute must be unknown in Opera but "safe" for WinRT
                // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section

                if (el.querySelectorAll("[msallowcapture^='']").length) {
                  rbuggyQSA.push("[*^$]=" + whitespace + "*(?:''|\"\")");
                } // Support: IE8
                // Boolean attributes and "value" are not treated correctly


                if (!el.querySelectorAll("[selected]").length) {
                  rbuggyQSA.push("\\[" + whitespace + "*(?:value|" + booleans + ")");
                } // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+


                if (!el.querySelectorAll("[id~=" + expando + "-]").length) {
                  rbuggyQSA.push("~=");
                } // Support: IE 11+, Edge 15 - 18+
                // IE 11/Edge don't find elements on a `[name='']` query in some cases.
                // Adding a temporary attribute to the document before the selection works
                // around the issue.
                // Interestingly, IE 10 & older don't seem to have the issue.


                input = document.createElement("input");
                input.setAttribute("name", "");
                el.appendChild(input);

                if (!el.querySelectorAll("[name='']").length) {
                  rbuggyQSA.push("\\[" + whitespace + "*name" + whitespace + "*=" + whitespace + "*(?:''|\"\")");
                } // Webkit/Opera - :checked should return selected option elements
                // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
                // IE8 throws error here and will not see later tests


                if (!el.querySelectorAll(":checked").length) {
                  rbuggyQSA.push(":checked");
                } // Support: Safari 8+, iOS 8+
                // https://bugs.webkit.org/show_bug.cgi?id=136851
                // In-page `selector#id sibling-combinator selector` fails


                if (!el.querySelectorAll("a#" + expando + "+*").length) {
                  rbuggyQSA.push(".#.+[+~]");
                } // Support: Firefox <=3.6 - 5 only
                // Old Firefox doesn't throw on a badly-escaped identifier.


                el.querySelectorAll("\\\f");
                rbuggyQSA.push("[\\r\\n\\f]");
              });
              assert(function (el) {
                el.innerHTML = "<a href='' disabled='disabled'></a>" + "<select disabled='disabled'><option/></select>"; // Support: Windows 8 Native Apps
                // The type and name attributes are restricted during .innerHTML assignment

                var input = document.createElement("input");
                input.setAttribute("type", "hidden");
                el.appendChild(input).setAttribute("name", "D"); // Support: IE8
                // Enforce case-sensitivity of name attribute

                if (el.querySelectorAll("[name=d]").length) {
                  rbuggyQSA.push("name" + whitespace + "*[*^$|!~]?=");
                } // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
                // IE8 throws error here and will not see later tests


                if (el.querySelectorAll(":enabled").length !== 2) {
                  rbuggyQSA.push(":enabled", ":disabled");
                } // Support: IE9-11+
                // IE's :disabled selector does not pick up the children of disabled fieldsets


                docElem.appendChild(el).disabled = true;

                if (el.querySelectorAll(":disabled").length !== 2) {
                  rbuggyQSA.push(":enabled", ":disabled");
                } // Support: Opera 10 - 11 only
                // Opera 10-11 does not throw on post-comma invalid pseudos


                el.querySelectorAll("*,:x");
                rbuggyQSA.push(",.*:");
              });
            }

            if (support.matchesSelector = rnative.test(matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector)) {
              assert(function (el) {
                // Check to see if it's possible to do matchesSelector
                // on a disconnected node (IE 9)
                support.disconnectedMatch = matches.call(el, "*"); // This should fail with an exception
                // Gecko does not error, returns false instead

                matches.call(el, "[s!='']:x");
                rbuggyMatches.push("!=", pseudos);
              });
            }

            rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join("|"));
            rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join("|"));
            /* Contains
            ---------------------------------------------------------------------- */

            hasCompare = rnative.test(docElem.compareDocumentPosition); // Element contains another
            // Purposefully self-exclusive
            // As in, an element does not contain itself

            contains = hasCompare || rnative.test(docElem.contains) ? function (a, b) {
              var adown = a.nodeType === 9 ? a.documentElement : a,
                  bup = b && b.parentNode;
              return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));
            } : function (a, b) {
              if (b) {
                while (b = b.parentNode) {
                  if (b === a) {
                    return true;
                  }
                }
              }

              return false;
            };
            /* Sorting
            ---------------------------------------------------------------------- */
            // Document order sorting

            sortOrder = hasCompare ? function (a, b) {
              // Flag for duplicate removal
              if (a === b) {
                hasDuplicate = true;
                return 0;
              } // Sort on method existence if only one input has compareDocumentPosition


              var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;

              if (compare) {
                return compare;
              } // Calculate position if both inputs belong to the same document
              // Support: IE 11+, Edge 17 - 18+
              // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
              // two documents; shallow comparisons work.
              // eslint-disable-next-line eqeqeq


              compare = (a.ownerDocument || a) == (b.ownerDocument || b) ? a.compareDocumentPosition(b) : // Otherwise we know they are disconnected
              1; // Disconnected nodes

              if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {
                // Choose the first element that is related to our preferred document
                // Support: IE 11+, Edge 17 - 18+
                // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
                // two documents; shallow comparisons work.
                // eslint-disable-next-line eqeqeq
                if (a == document || a.ownerDocument == preferredDoc && contains(preferredDoc, a)) {
                  return -1;
                } // Support: IE 11+, Edge 17 - 18+
                // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
                // two documents; shallow comparisons work.
                // eslint-disable-next-line eqeqeq


                if (b == document || b.ownerDocument == preferredDoc && contains(preferredDoc, b)) {
                  return 1;
                } // Maintain original order


                return sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0;
              }

              return compare & 4 ? -1 : 1;
            } : function (a, b) {
              // Exit early if the nodes are identical
              if (a === b) {
                hasDuplicate = true;
                return 0;
              }

              var cur,
                  i = 0,
                  aup = a.parentNode,
                  bup = b.parentNode,
                  ap = [a],
                  bp = [b]; // Parentless nodes are either documents or disconnected

              if (!aup || !bup) {
                // Support: IE 11+, Edge 17 - 18+
                // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
                // two documents; shallow comparisons work.

                /* eslint-disable eqeqeq */
                return a == document ? -1 : b == document ? 1 :
                /* eslint-enable eqeqeq */
                aup ? -1 : bup ? 1 : sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0; // If the nodes are siblings, we can do a quick check
              } else if (aup === bup) {
                return siblingCheck(a, b);
              } // Otherwise we need full lists of their ancestors for comparison


              cur = a;

              while (cur = cur.parentNode) {
                ap.unshift(cur);
              }

              cur = b;

              while (cur = cur.parentNode) {
                bp.unshift(cur);
              } // Walk down the tree looking for a discrepancy


              while (ap[i] === bp[i]) {
                i++;
              }

              return i ? // Do a sibling check if the nodes have a common ancestor
              siblingCheck(ap[i], bp[i]) : // Otherwise nodes in our document sort first
              // Support: IE 11+, Edge 17 - 18+
              // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
              // two documents; shallow comparisons work.

              /* eslint-disable eqeqeq */
              ap[i] == preferredDoc ? -1 : bp[i] == preferredDoc ? 1 :
              /* eslint-enable eqeqeq */
              0;
            };
            return document;
          };

          Sizzle.matches = function (expr, elements) {
            return Sizzle(expr, null, null, elements);
          };

          Sizzle.matchesSelector = function (elem, expr) {
            setDocument(elem);

            if (support.matchesSelector && documentIsHTML && !nonnativeSelectorCache[expr + " "] && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {
              try {
                var ret = matches.call(elem, expr); // IE 9's matchesSelector returns false on disconnected nodes

                if (ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document
                // fragment in IE 9
                elem.document && elem.document.nodeType !== 11) {
                  return ret;
                }
              } catch (e) {
                nonnativeSelectorCache(expr, true);
              }
            }

            return Sizzle(expr, document, null, [elem]).length > 0;
          };

          Sizzle.contains = function (context, elem) {
            // Set document vars if needed
            // Support: IE 11+, Edge 17 - 18+
            // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
            // two documents; shallow comparisons work.
            // eslint-disable-next-line eqeqeq
            if ((context.ownerDocument || context) != document) {
              setDocument(context);
            }

            return contains(context, elem);
          };

          Sizzle.attr = function (elem, name) {
            // Set document vars if needed
            // Support: IE 11+, Edge 17 - 18+
            // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
            // two documents; shallow comparisons work.
            // eslint-disable-next-line eqeqeq
            if ((elem.ownerDocument || elem) != document) {
              setDocument(elem);
            }

            var fn = Expr.attrHandle[name.toLowerCase()],
                // Don't get fooled by Object.prototype properties (jQuery #13807)
            val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;
            return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;
          };

          Sizzle.escape = function (sel) {
            return (sel + "").replace(rcssescape, fcssescape);
          };

          Sizzle.error = function (msg) {
            throw new Error("Syntax error, unrecognized expression: " + msg);
          };
          /**
           * Document sorting and removing duplicates
           * @param {ArrayLike} results
           */


          Sizzle.uniqueSort = function (results) {
            var elem,
                duplicates = [],
                j = 0,
                i = 0; // Unless we *know* we can detect duplicates, assume their presence

            hasDuplicate = !support.detectDuplicates;
            sortInput = !support.sortStable && results.slice(0);
            results.sort(sortOrder);

            if (hasDuplicate) {
              while (elem = results[i++]) {
                if (elem === results[i]) {
                  j = duplicates.push(i);
                }
              }

              while (j--) {
                results.splice(duplicates[j], 1);
              }
            } // Clear input after sorting to release objects
            // See https://github.com/jquery/sizzle/pull/225


            sortInput = null;
            return results;
          };
          /**
           * Utility function for retrieving the text value of an array of DOM nodes
           * @param {Array|Element} elem
           */


          getText = Sizzle.getText = function (elem) {
            var node,
                ret = "",
                i = 0,
                nodeType = elem.nodeType;

            if (!nodeType) {
              // If no nodeType, this is expected to be an array
              while (node = elem[i++]) {
                // Do not traverse comment nodes
                ret += getText(node);
              }
            } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {
              // Use textContent for elements
              // innerText usage removed for consistency of new lines (jQuery #11153)
              if (typeof elem.textContent === "string") {
                return elem.textContent;
              } else {
                // Traverse its children
                for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
                  ret += getText(elem);
                }
              }
            } else if (nodeType === 3 || nodeType === 4) {
              return elem.nodeValue;
            } // Do not include comment or processing instruction nodes


            return ret;
          };

          Expr = Sizzle.selectors = {
            // Can be adjusted by the user
            cacheLength: 50,
            createPseudo: markFunction,
            match: matchExpr,
            attrHandle: {},
            find: {},
            relative: {
              ">": {
                dir: "parentNode",
                first: true
              },
              " ": {
                dir: "parentNode"
              },
              "+": {
                dir: "previousSibling",
                first: true
              },
              "~": {
                dir: "previousSibling"
              }
            },
            preFilter: {
              "ATTR": function ATTR(match) {
                match[1] = match[1].replace(runescape, funescape); // Move the given value to match[3] whether quoted or unquoted

                match[3] = (match[3] || match[4] || match[5] || "").replace(runescape, funescape);

                if (match[2] === "~=") {
                  match[3] = " " + match[3] + " ";
                }

                return match.slice(0, 4);
              },
              "CHILD": function CHILD(match) {
                /* matches from matchExpr["CHILD"]
                	1 type (only|nth|...)
                	2 what (child|of-type)
                	3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
                	4 xn-component of xn+y argument ([+-]?\d*n|)
                	5 sign of xn-component
                	6 x of xn-component
                	7 sign of y-component
                	8 y of y-component
                */
                match[1] = match[1].toLowerCase();

                if (match[1].slice(0, 3) === "nth") {
                  // nth-* requires argument
                  if (!match[3]) {
                    Sizzle.error(match[0]);
                  } // numeric x and y parameters for Expr.filter.CHILD
                  // remember that false/true cast respectively to 0/1


                  match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === "even" || match[3] === "odd"));
                  match[5] = +(match[7] + match[8] || match[3] === "odd"); // other types prohibit arguments
                } else if (match[3]) {
                  Sizzle.error(match[0]);
                }

                return match;
              },
              "PSEUDO": function PSEUDO(match) {
                var excess,
                    unquoted = !match[6] && match[2];

                if (matchExpr["CHILD"].test(match[0])) {
                  return null;
                } // Accept quoted arguments as-is


                if (match[3]) {
                  match[2] = match[4] || match[5] || ""; // Strip excess characters from unquoted arguments
                } else if (unquoted && rpseudo.test(unquoted) && ( // Get excess from tokenize (recursively)
                excess = tokenize(unquoted, true)) && ( // advance to the next closing parenthesis
                excess = unquoted.indexOf(")", unquoted.length - excess) - unquoted.length)) {
                  // excess is a negative index
                  match[0] = match[0].slice(0, excess);
                  match[2] = unquoted.slice(0, excess);
                } // Return only captures needed by the pseudo filter method (type and argument)


                return match.slice(0, 3);
              }
            },
            filter: {
              "TAG": function TAG(nodeNameSelector) {
                var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();
                return nodeNameSelector === "*" ? function () {
                  return true;
                } : function (elem) {
                  return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
                };
              },
              "CLASS": function CLASS(className) {
                var pattern = classCache[className + " "];
                return pattern || (pattern = new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)")) && classCache(className, function (elem) {
                  return pattern.test(typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "");
                });
              },
              "ATTR": function ATTR(name, operator, check) {
                return function (elem) {
                  var result = Sizzle.attr(elem, name);

                  if (result == null) {
                    return operator === "!=";
                  }

                  if (!operator) {
                    return true;
                  }

                  result += "";
                  /* eslint-disable max-len */

                  return operator === "=" ? result === check : operator === "!=" ? result !== check : operator === "^=" ? check && result.indexOf(check) === 0 : operator === "*=" ? check && result.indexOf(check) > -1 : operator === "$=" ? check && result.slice(-check.length) === check : operator === "~=" ? (" " + result.replace(rwhitespace, " ") + " ").indexOf(check) > -1 : operator === "|=" ? result === check || result.slice(0, check.length + 1) === check + "-" : false;
                  /* eslint-enable max-len */
                };
              },
              "CHILD": function CHILD(type, what, _argument, first, last) {
                var simple = type.slice(0, 3) !== "nth",
                    forward = type.slice(-4) !== "last",
                    ofType = what === "of-type";
                return first === 1 && last === 0 ? // Shortcut for :nth-*(n)
                function (elem) {
                  return !!elem.parentNode;
                } : function (elem, _context, xml) {
                  var cache,
                      uniqueCache,
                      outerCache,
                      node,
                      nodeIndex,
                      start,
                      dir = simple !== forward ? "nextSibling" : "previousSibling",
                      parent = elem.parentNode,
                      name = ofType && elem.nodeName.toLowerCase(),
                      useCache = !xml && !ofType,
                      diff = false;

                  if (parent) {
                    // :(first|last|only)-(child|of-type)
                    if (simple) {
                      while (dir) {
                        node = elem;

                        while (node = node[dir]) {
                          if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {
                            return false;
                          }
                        } // Reverse direction for :only-* (if we haven't yet done so)


                        start = dir = type === "only" && !start && "nextSibling";
                      }

                      return true;
                    }

                    start = [forward ? parent.firstChild : parent.lastChild]; // non-xml :nth-child(...) stores cache data on `parent`

                    if (forward && useCache) {
                      // Seek `elem` from a previously-cached index
                      // ...in a gzip-friendly way
                      node = parent;
                      outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only
                      // Defend against cloned attroperties (jQuery gh-1709)

                      uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});
                      cache = uniqueCache[type] || [];
                      nodeIndex = cache[0] === dirruns && cache[1];
                      diff = nodeIndex && cache[2];
                      node = nodeIndex && parent.childNodes[nodeIndex];

                      while (node = ++nodeIndex && node && node[dir] || ( // Fallback to seeking `elem` from the start
                      diff = nodeIndex = 0) || start.pop()) {
                        // When found, cache indexes on `parent` and break
                        if (node.nodeType === 1 && ++diff && node === elem) {
                          uniqueCache[type] = [dirruns, nodeIndex, diff];
                          break;
                        }
                      }
                    } else {
                      // Use previously-cached element index if available
                      if (useCache) {
                        // ...in a gzip-friendly way
                        node = elem;
                        outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only
                        // Defend against cloned attroperties (jQuery gh-1709)

                        uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});
                        cache = uniqueCache[type] || [];
                        nodeIndex = cache[0] === dirruns && cache[1];
                        diff = nodeIndex;
                      } // xml :nth-child(...)
                      // or :nth-last-child(...) or :nth(-last)?-of-type(...)


                      if (diff === false) {
                        // Use the same loop as above to seek `elem` from the start
                        while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {
                          if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {
                            // Cache the index of each encountered element
                            if (useCache) {
                              outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only
                              // Defend against cloned attroperties (jQuery gh-1709)

                              uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});
                              uniqueCache[type] = [dirruns, diff];
                            }

                            if (node === elem) {
                              break;
                            }
                          }
                        }
                      }
                    } // Incorporate the offset, then check against cycle size


                    diff -= last;
                    return diff === first || diff % first === 0 && diff / first >= 0;
                  }
                };
              },
              "PSEUDO": function PSEUDO(pseudo, argument) {
                // pseudo-class names are case-insensitive
                // http://www.w3.org/TR/selectors/#pseudo-classes
                // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
                // Remember that setFilters inherits from pseudos
                var args,
                    fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error("unsupported pseudo: " + pseudo); // The user may use createPseudo to indicate that
                // arguments are needed to create the filter function
                // just as Sizzle does

                if (fn[expando]) {
                  return fn(argument);
                } // But maintain support for old signatures


                if (fn.length > 1) {
                  args = [pseudo, pseudo, "", argument];
                  return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {
                    var idx,
                        matched = fn(seed, argument),
                        i = matched.length;

                    while (i--) {
                      idx = indexOf(seed, matched[i]);
                      seed[idx] = !(matches[idx] = matched[i]);
                    }
                  }) : function (elem) {
                    return fn(elem, 0, args);
                  };
                }

                return fn;
              }
            },
            pseudos: {
              // Potentially complex pseudos
              "not": markFunction(function (selector) {
                // Trim the selector passed to compile
                // to avoid treating leading and trailing
                // spaces as combinators
                var input = [],
                    results = [],
                    matcher = compile(selector.replace(rtrim, "$1"));
                return matcher[expando] ? markFunction(function (seed, matches, _context, xml) {
                  var elem,
                      unmatched = matcher(seed, null, xml, []),
                      i = seed.length; // Match elements unmatched by `matcher`

                  while (i--) {
                    if (elem = unmatched[i]) {
                      seed[i] = !(matches[i] = elem);
                    }
                  }
                }) : function (elem, _context, xml) {
                  input[0] = elem;
                  matcher(input, null, xml, results); // Don't keep the element (issue #299)

                  input[0] = null;
                  return !results.pop();
                };
              }),
              "has": markFunction(function (selector) {
                return function (elem) {
                  return Sizzle(selector, elem).length > 0;
                };
              }),
              "contains": markFunction(function (text) {
                text = text.replace(runescape, funescape);
                return function (elem) {
                  return (elem.textContent || getText(elem)).indexOf(text) > -1;
                };
              }),
              // "Whether an element is represented by a :lang() selector
              // is based solely on the element's language value
              // being equal to the identifier C,
              // or beginning with the identifier C immediately followed by "-".
              // The matching of C against the element's language value is performed case-insensitively.
              // The identifier C does not have to be a valid language name."
              // http://www.w3.org/TR/selectors/#lang-pseudo
              "lang": markFunction(function (lang) {
                // lang value must be a valid identifier
                if (!ridentifier.test(lang || "")) {
                  Sizzle.error("unsupported lang: " + lang);
                }

                lang = lang.replace(runescape, funescape).toLowerCase();
                return function (elem) {
                  var elemLang;

                  do {
                    if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang")) {
                      elemLang = elemLang.toLowerCase();
                      return elemLang === lang || elemLang.indexOf(lang + "-") === 0;
                    }
                  } while ((elem = elem.parentNode) && elem.nodeType === 1);

                  return false;
                };
              }),
              // Miscellaneous
              "target": function target(elem) {
                var hash = window.location && window.location.hash;
                return hash && hash.slice(1) === elem.id;
              },
              "root": function root(elem) {
                return elem === docElem;
              },
              "focus": function focus(elem) {
                return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
              },
              // Boolean properties
              "enabled": createDisabledPseudo(false),
              "disabled": createDisabledPseudo(true),
              "checked": function checked(elem) {
                // In CSS3, :checked should return both checked and selected elements
                // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
                var nodeName = elem.nodeName.toLowerCase();
                return nodeName === "input" && !!elem.checked || nodeName === "option" && !!elem.selected;
              },
              "selected": function selected(elem) {
                // Accessing this property makes selected-by-default
                // options in Safari work properly
                if (elem.parentNode) {
                  // eslint-disable-next-line no-unused-expressions
                  elem.parentNode.selectedIndex;
                }

                return elem.selected === true;
              },
              // Contents
              "empty": function empty(elem) {
                // http://www.w3.org/TR/selectors/#empty-pseudo
                // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
                //   but not by others (comment: 8; processing instruction: 7; etc.)
                // nodeType < 6 works because attributes (2) do not appear as children
                for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
                  if (elem.nodeType < 6) {
                    return false;
                  }
                }

                return true;
              },
              "parent": function parent(elem) {
                return !Expr.pseudos["empty"](elem);
              },
              // Element/input types
              "header": function header(elem) {
                return rheader.test(elem.nodeName);
              },
              "input": function input(elem) {
                return rinputs.test(elem.nodeName);
              },
              "button": function button(elem) {
                var name = elem.nodeName.toLowerCase();
                return name === "input" && elem.type === "button" || name === "button";
              },
              "text": function text(elem) {
                var attr;
                return elem.nodeName.toLowerCase() === "input" && elem.type === "text" && ( // Support: IE<8
                // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
                (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text");
              },
              // Position-in-collection
              "first": createPositionalPseudo(function () {
                return [0];
              }),
              "last": createPositionalPseudo(function (_matchIndexes, length) {
                return [length - 1];
              }),
              "eq": createPositionalPseudo(function (_matchIndexes, length, argument) {
                return [argument < 0 ? argument + length : argument];
              }),
              "even": createPositionalPseudo(function (matchIndexes, length) {
                var i = 0;

                for (; i < length; i += 2) {
                  matchIndexes.push(i);
                }

                return matchIndexes;
              }),
              "odd": createPositionalPseudo(function (matchIndexes, length) {
                var i = 1;

                for (; i < length; i += 2) {
                  matchIndexes.push(i);
                }

                return matchIndexes;
              }),
              "lt": createPositionalPseudo(function (matchIndexes, length, argument) {
                var i = argument < 0 ? argument + length : argument > length ? length : argument;

                for (; --i >= 0;) {
                  matchIndexes.push(i);
                }

                return matchIndexes;
              }),
              "gt": createPositionalPseudo(function (matchIndexes, length, argument) {
                var i = argument < 0 ? argument + length : argument;

                for (; ++i < length;) {
                  matchIndexes.push(i);
                }

                return matchIndexes;
              })
            }
          };
          Expr.pseudos["nth"] = Expr.pseudos["eq"]; // Add button/input type pseudos

          for (i in {
            radio: true,
            checkbox: true,
            file: true,
            password: true,
            image: true
          }) {
            Expr.pseudos[i] = createInputPseudo(i);
          }

          for (i in {
            submit: true,
            reset: true
          }) {
            Expr.pseudos[i] = createButtonPseudo(i);
          } // Easy API for creating new setFilters


          function setFilters() {}

          setFilters.prototype = Expr.filters = Expr.pseudos;
          Expr.setFilters = new setFilters();

          tokenize = Sizzle.tokenize = function (selector, parseOnly) {
            var matched,
                match,
                tokens,
                type,
                soFar,
                groups,
                preFilters,
                cached = tokenCache[selector + " "];

            if (cached) {
              return parseOnly ? 0 : cached.slice(0);
            }

            soFar = selector;
            groups = [];
            preFilters = Expr.preFilter;

            while (soFar) {
              // Comma and first run
              if (!matched || (match = rcomma.exec(soFar))) {
                if (match) {
                  // Don't consume trailing commas as valid
                  soFar = soFar.slice(match[0].length) || soFar;
                }

                groups.push(tokens = []);
              }

              matched = false; // Combinators

              if (match = rcombinators.exec(soFar)) {
                matched = match.shift();
                tokens.push({
                  value: matched,
                  // Cast descendant combinators to space
                  type: match[0].replace(rtrim, " ")
                });
                soFar = soFar.slice(matched.length);
              } // Filters


              for (type in Expr.filter) {
                if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {
                  matched = match.shift();
                  tokens.push({
                    value: matched,
                    type: type,
                    matches: match
                  });
                  soFar = soFar.slice(matched.length);
                }
              }

              if (!matched) {
                break;
              }
            } // Return the length of the invalid excess
            // if we're just parsing
            // Otherwise, throw an error or return tokens


            return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : // Cache the tokens
            tokenCache(selector, groups).slice(0);
          };

          function toSelector(tokens) {
            var i = 0,
                len = tokens.length,
                selector = "";

            for (; i < len; i++) {
              selector += tokens[i].value;
            }

            return selector;
          }

          function addCombinator(matcher, combinator, base) {
            var dir = combinator.dir,
                skip = combinator.next,
                key = skip || dir,
                checkNonElements = base && key === "parentNode",
                doneName = done++;
            return combinator.first ? // Check against closest ancestor/preceding element
            function (elem, context, xml) {
              while (elem = elem[dir]) {
                if (elem.nodeType === 1 || checkNonElements) {
                  return matcher(elem, context, xml);
                }
              }

              return false;
            } : // Check against all ancestor/preceding elements
            function (elem, context, xml) {
              var oldCache,
                  uniqueCache,
                  outerCache,
                  newCache = [dirruns, doneName]; // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching

              if (xml) {
                while (elem = elem[dir]) {
                  if (elem.nodeType === 1 || checkNonElements) {
                    if (matcher(elem, context, xml)) {
                      return true;
                    }
                  }
                }
              } else {
                while (elem = elem[dir]) {
                  if (elem.nodeType === 1 || checkNonElements) {
                    outerCache = elem[expando] || (elem[expando] = {}); // Support: IE <9 only
                    // Defend against cloned attroperties (jQuery gh-1709)

                    uniqueCache = outerCache[elem.uniqueID] || (outerCache[elem.uniqueID] = {});

                    if (skip && skip === elem.nodeName.toLowerCase()) {
                      elem = elem[dir] || elem;
                    } else if ((oldCache = uniqueCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) {
                      // Assign to newCache so results back-propagate to previous elements
                      return newCache[2] = oldCache[2];
                    } else {
                      // Reuse newcache so results back-propagate to previous elements
                      uniqueCache[key] = newCache; // A match means we're done; a fail means we have to keep checking

                      if (newCache[2] = matcher(elem, context, xml)) {
                        return true;
                      }
                    }
                  }
                }
              }

              return false;
            };
          }

          function elementMatcher(matchers) {
            return matchers.length > 1 ? function (elem, context, xml) {
              var i = matchers.length;

              while (i--) {
                if (!matchers[i](elem, context, xml)) {
                  return false;
                }
              }

              return true;
            } : matchers[0];
          }

          function multipleContexts(selector, contexts, results) {
            var i = 0,
                len = contexts.length;

            for (; i < len; i++) {
              Sizzle(selector, contexts[i], results);
            }

            return results;
          }

          function condense(unmatched, map, filter, context, xml) {
            var elem,
                newUnmatched = [],
                i = 0,
                len = unmatched.length,
                mapped = map != null;

            for (; i < len; i++) {
              if (elem = unmatched[i]) {
                if (!filter || filter(elem, context, xml)) {
                  newUnmatched.push(elem);

                  if (mapped) {
                    map.push(i);
                  }
                }
              }
            }

            return newUnmatched;
          }

          function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {
            if (postFilter && !postFilter[expando]) {
              postFilter = setMatcher(postFilter);
            }

            if (postFinder && !postFinder[expando]) {
              postFinder = setMatcher(postFinder, postSelector);
            }

            return markFunction(function (seed, results, context, xml) {
              var temp,
                  i,
                  elem,
                  preMap = [],
                  postMap = [],
                  preexisting = results.length,
                  // Get initial elements from seed or context
              elems = seed || multipleContexts(selector || "*", context.nodeType ? [context] : context, []),
                  // Prefilter to get matcher input, preserving a map for seed-results synchronization
              matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems,
                  matcherOut = matcher ? // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
              postFinder || (seed ? preFilter : preexisting || postFilter) ? // ...intermediate processing is necessary
              [] : // ...otherwise use results directly
              results : matcherIn; // Find primary matches

              if (matcher) {
                matcher(matcherIn, matcherOut, context, xml);
              } // Apply postFilter


              if (postFilter) {
                temp = condense(matcherOut, postMap);
                postFilter(temp, [], context, xml); // Un-match failing elements by moving them back to matcherIn

                i = temp.length;

                while (i--) {
                  if (elem = temp[i]) {
                    matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);
                  }
                }
              }

              if (seed) {
                if (postFinder || preFilter) {
                  if (postFinder) {
                    // Get the final matcherOut by condensing this intermediate into postFinder contexts
                    temp = [];
                    i = matcherOut.length;

                    while (i--) {
                      if (elem = matcherOut[i]) {
                        // Restore matcherIn since elem is not yet a final match
                        temp.push(matcherIn[i] = elem);
                      }
                    }

                    postFinder(null, matcherOut = [], temp, xml);
                  } // Move matched elements from seed to results to keep them synchronized


                  i = matcherOut.length;

                  while (i--) {
                    if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf(seed, elem) : preMap[i]) > -1) {
                      seed[temp] = !(results[temp] = elem);
                    }
                  }
                } // Add elements to results, through postFinder if defined

              } else {
                matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);

                if (postFinder) {
                  postFinder(null, results, matcherOut, xml);
                } else {
                  push.apply(results, matcherOut);
                }
              }
            });
          }

          function matcherFromTokens(tokens) {
            var checkContext,
                matcher,
                j,
                len = tokens.length,
                leadingRelative = Expr.relative[tokens[0].type],
                implicitRelative = leadingRelative || Expr.relative[" "],
                i = leadingRelative ? 1 : 0,
                // The foundational matcher ensures that elements are reachable from top-level context(s)
            matchContext = addCombinator(function (elem) {
              return elem === checkContext;
            }, implicitRelative, true),
                matchAnyContext = addCombinator(function (elem) {
              return indexOf(checkContext, elem) > -1;
            }, implicitRelative, true),
                matchers = [function (elem, context, xml) {
              var ret = !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml)); // Avoid hanging onto element (issue #299)

              checkContext = null;
              return ret;
            }];

            for (; i < len; i++) {
              if (matcher = Expr.relative[tokens[i].type]) {
                matchers = [addCombinator(elementMatcher(matchers), matcher)];
              } else {
                matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches); // Return special upon seeing a positional matcher

                if (matcher[expando]) {
                  // Find the next relative operator (if any) for proper handling
                  j = ++i;

                  for (; j < len; j++) {
                    if (Expr.relative[tokens[j].type]) {
                      break;
                    }
                  }

                  return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector( // If the preceding token was a descendant combinator, insert an implicit any-element `*`
                  tokens.slice(0, i - 1).concat({
                    value: tokens[i - 2].type === " " ? "*" : ""
                  })).replace(rtrim, "$1"), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));
                }

                matchers.push(matcher);
              }
            }

            return elementMatcher(matchers);
          }

          function matcherFromGroupMatchers(elementMatchers, setMatchers) {
            var bySet = setMatchers.length > 0,
                byElement = elementMatchers.length > 0,
                superMatcher = function superMatcher(seed, context, xml, results, outermost) {
              var elem,
                  j,
                  matcher,
                  matchedCount = 0,
                  i = "0",
                  unmatched = seed && [],
                  setMatched = [],
                  contextBackup = outermostContext,
                  // We must always have either seed elements or outermost context
              elems = seed || byElement && Expr.find["TAG"]("*", outermost),
                  // Use integer dirruns iff this is the outermost matcher
              dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1,
                  len = elems.length;

              if (outermost) {
                // Support: IE 11+, Edge 17 - 18+
                // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
                // two documents; shallow comparisons work.
                // eslint-disable-next-line eqeqeq
                outermostContext = context == document || context || outermost;
              } // Add elements passing elementMatchers directly to results
              // Support: IE<9, Safari
              // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id


              for (; i !== len && (elem = elems[i]) != null; i++) {
                if (byElement && elem) {
                  j = 0; // Support: IE 11+, Edge 17 - 18+
                  // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
                  // two documents; shallow comparisons work.
                  // eslint-disable-next-line eqeqeq

                  if (!context && elem.ownerDocument != document) {
                    setDocument(elem);
                    xml = !documentIsHTML;
                  }

                  while (matcher = elementMatchers[j++]) {
                    if (matcher(elem, context || document, xml)) {
                      results.push(elem);
                      break;
                    }
                  }

                  if (outermost) {
                    dirruns = dirrunsUnique;
                  }
                } // Track unmatched elements for set filters


                if (bySet) {
                  // They will have gone through all possible matchers
                  if (elem = !matcher && elem) {
                    matchedCount--;
                  } // Lengthen the array for every element, matched or not


                  if (seed) {
                    unmatched.push(elem);
                  }
                }
              } // `i` is now the count of elements visited above, and adding it to `matchedCount`
              // makes the latter nonnegative.


              matchedCount += i; // Apply set filters to unmatched elements
              // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
              // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
              // no element matchers and no seed.
              // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
              // case, which will result in a "00" `matchedCount` that differs from `i` but is also
              // numerically zero.

              if (bySet && i !== matchedCount) {
                j = 0;

                while (matcher = setMatchers[j++]) {
                  matcher(unmatched, setMatched, context, xml);
                }

                if (seed) {
                  // Reintegrate element matches to eliminate the need for sorting
                  if (matchedCount > 0) {
                    while (i--) {
                      if (!(unmatched[i] || setMatched[i])) {
                        setMatched[i] = pop.call(results);
                      }
                    }
                  } // Discard index placeholder values to get only actual matches


                  setMatched = condense(setMatched);
                } // Add matches to results


                push.apply(results, setMatched); // Seedless set matches succeeding multiple successful matchers stipulate sorting

                if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {
                  Sizzle.uniqueSort(results);
                }
              } // Override manipulation of globals by nested matchers


              if (outermost) {
                dirruns = dirrunsUnique;
                outermostContext = contextBackup;
              }

              return unmatched;
            };

            return bySet ? markFunction(superMatcher) : superMatcher;
          }

          compile = Sizzle.compile = function (selector, match
          /* Internal Use Only */
          ) {
            var i,
                setMatchers = [],
                elementMatchers = [],
                cached = compilerCache[selector + " "];

            if (!cached) {
              // Generate a function of recursive functions that can be used to check each element
              if (!match) {
                match = tokenize(selector);
              }

              i = match.length;

              while (i--) {
                cached = matcherFromTokens(match[i]);

                if (cached[expando]) {
                  setMatchers.push(cached);
                } else {
                  elementMatchers.push(cached);
                }
              } // Cache the compiled function


              cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers)); // Save selector and tokenization

              cached.selector = selector;
            }

            return cached;
          };
          /**
           * A low-level selection function that works with Sizzle's compiled
           *  selector functions
           * @param {String|Function} selector A selector or a pre-compiled
           *  selector function built with Sizzle.compile
           * @param {Element} context
           * @param {Array} [results]
           * @param {Array} [seed] A set of elements to match against
           */


          select = Sizzle.select = function (selector, context, results, seed) {
            var i,
                tokens,
                token,
                type,
                find,
                compiled = typeof selector === "function" && selector,
                match = !seed && tokenize(selector = compiled.selector || selector);
            results = results || []; // Try to minimize operations if there is only one selector in the list and no seed
            // (the latter of which guarantees us context)

            if (match.length === 1) {
              // Reduce context if the leading compound selector is an ID
              tokens = match[0] = match[0].slice(0);

              if (tokens.length > 2 && (token = tokens[0]).type === "ID" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {
                context = (Expr.find["ID"](token.matches[0].replace(runescape, funescape), context) || [])[0];

                if (!context) {
                  return results; // Precompiled matchers will still verify ancestry, so step up a level
                } else if (compiled) {
                  context = context.parentNode;
                }

                selector = selector.slice(tokens.shift().value.length);
              } // Fetch a seed set for right-to-left matching


              i = matchExpr["needsContext"].test(selector) ? 0 : tokens.length;

              while (i--) {
                token = tokens[i]; // Abort if we hit a combinator

                if (Expr.relative[type = token.type]) {
                  break;
                }

                if (find = Expr.find[type]) {
                  // Search, expanding context for leading sibling combinators
                  if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {
                    // If seed is empty or no tokens remain, we can return early
                    tokens.splice(i, 1);
                    selector = seed.length && toSelector(tokens);

                    if (!selector) {
                      push.apply(results, seed);
                      return results;
                    }

                    break;
                  }
                }
              }
            } // Compile and execute a filtering function if one is not provided
            // Provide `match` to avoid retokenization if we modified the selector above


            (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, !context || rsibling.test(selector) && testContext(context.parentNode) || context);
            return results;
          }; // One-time assignments
          // Sort stability


          support.sortStable = expando.split("").sort(sortOrder).join("") === expando; // Support: Chrome 14-35+
          // Always assume duplicates if they aren't passed to the comparison function

          support.detectDuplicates = !!hasDuplicate; // Initialize against the default document

          setDocument(); // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
          // Detached nodes confoundingly follow *each other*

          support.sortDetached = assert(function (el) {
            // Should return 1, but returns 4 (following)
            return el.compareDocumentPosition(document.createElement("fieldset")) & 1;
          }); // Support: IE<8
          // Prevent attribute/property "interpolation"
          // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx

          if (!assert(function (el) {
            el.innerHTML = "<a href='#'></a>";
            return el.firstChild.getAttribute("href") === "#";
          })) {
            addHandle("type|href|height|width", function (elem, name, isXML) {
              if (!isXML) {
                return elem.getAttribute(name, name.toLowerCase() === "type" ? 1 : 2);
              }
            });
          } // Support: IE<9
          // Use defaultValue in place of getAttribute("value")


          if (!support.attributes || !assert(function (el) {
            el.innerHTML = "<input/>";
            el.firstChild.setAttribute("value", "");
            return el.firstChild.getAttribute("value") === "";
          })) {
            addHandle("value", function (elem, _name, isXML) {
              if (!isXML && elem.nodeName.toLowerCase() === "input") {
                return elem.defaultValue;
              }
            });
          } // Support: IE<9
          // Use getAttributeNode to fetch booleans when getAttribute lies


          if (!assert(function (el) {
            return el.getAttribute("disabled") == null;
          })) {
            addHandle(booleans, function (elem, name, isXML) {
              var val;

              if (!isXML) {
                return elem[name] === true ? name.toLowerCase() : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;
              }
            });
          }

          return Sizzle;
        }(window);

        jQuery.find = Sizzle;
        jQuery.expr = Sizzle.selectors; // Deprecated

        jQuery.expr[":"] = jQuery.expr.pseudos;
        jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
        jQuery.text = Sizzle.getText;
        jQuery.isXMLDoc = Sizzle.isXML;
        jQuery.contains = Sizzle.contains;
        jQuery.escapeSelector = Sizzle.escape;

        var dir = function dir(elem, _dir2, until) {
          var matched = [],
              truncate = until !== undefined;

          while ((elem = elem[_dir2]) && elem.nodeType !== 9) {
            if (elem.nodeType === 1) {
              if (truncate && jQuery(elem).is(until)) {
                break;
              }

              matched.push(elem);
            }
          }

          return matched;
        };

        var _siblings = function siblings(n, elem) {
          var matched = [];

          for (; n; n = n.nextSibling) {
            if (n.nodeType === 1 && n !== elem) {
              matched.push(n);
            }
          }

          return matched;
        };

        var rneedsContext = jQuery.expr.match.needsContext;

        function nodeName(elem, name) {
          return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
        }

        ;
        var rsingleTag = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i; // Implement the identical functionality for filter and not

        function winnow(elements, qualifier, not) {
          if (isFunction(qualifier)) {
            return jQuery.grep(elements, function (elem, i) {
              return !!qualifier.call(elem, i, elem) !== not;
            });
          } // Single element


          if (qualifier.nodeType) {
            return jQuery.grep(elements, function (elem) {
              return elem === qualifier !== not;
            });
          } // Arraylike of elements (jQuery, arguments, Array)


          if (typeof qualifier !== "string") {
            return jQuery.grep(elements, function (elem) {
              return indexOf.call(qualifier, elem) > -1 !== not;
            });
          } // Filtered directly for both simple and complex selectors


          return jQuery.filter(qualifier, elements, not);
        }

        jQuery.filter = function (expr, elems, not) {
          var elem = elems[0];

          if (not) {
            expr = ":not(" + expr + ")";
          }

          if (elems.length === 1 && elem.nodeType === 1) {
            return jQuery.find.matchesSelector(elem, expr) ? [elem] : [];
          }

          return jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {
            return elem.nodeType === 1;
          }));
        };

        jQuery.fn.extend({
          find: function find(selector) {
            var i,
                ret,
                len = this.length,
                self = this;

            if (typeof selector !== "string") {
              return this.pushStack(jQuery(selector).filter(function () {
                for (i = 0; i < len; i++) {
                  if (jQuery.contains(self[i], this)) {
                    return true;
                  }
                }
              }));
            }

            ret = this.pushStack([]);

            for (i = 0; i < len; i++) {
              jQuery.find(selector, self[i], ret);
            }

            return len > 1 ? jQuery.uniqueSort(ret) : ret;
          },
          filter: function filter(selector) {
            return this.pushStack(winnow(this, selector || [], false));
          },
          not: function not(selector) {
            return this.pushStack(winnow(this, selector || [], true));
          },
          is: function is(selector) {
            return !!winnow(this, // If this is a positional/relative selector, check membership in the returned set
            // so $("p:first").is("p:last") won't return true for a doc with two "p".
            typeof selector === "string" && rneedsContext.test(selector) ? jQuery(selector) : selector || [], false).length;
          }
        }); // Initialize a jQuery object
        // A central reference to the root jQuery(document)

        var rootjQuery,
            // A simple way to check for HTML strings
        // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
        // Strict HTML recognition (#11290: must start with <)
        // Shortcut simple #id case for speed
        rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
            init = jQuery.fn.init = function (selector, context, root) {
          var match, elem; // HANDLE: $(""), $(null), $(undefined), $(false)

          if (!selector) {
            return this;
          } // Method init() accepts an alternate rootjQuery
          // so migrate can support jQuery.sub (gh-2101)


          root = root || rootjQuery; // Handle HTML strings

          if (typeof selector === "string") {
            if (selector[0] === "<" && selector[selector.length - 1] === ">" && selector.length >= 3) {
              // Assume that strings that start and end with <> are HTML and skip the regex check
              match = [null, selector, null];
            } else {
              match = rquickExpr.exec(selector);
            } // Match html or make sure no context is specified for #id


            if (match && (match[1] || !context)) {
              // HANDLE: $(html) -> $(array)
              if (match[1]) {
                context = context instanceof jQuery ? context[0] : context; // Option to run scripts is true for back-compat
                // Intentionally let the error be thrown if parseHTML is not present

                jQuery.merge(this, jQuery.parseHTML(match[1], context && context.nodeType ? context.ownerDocument || context : document, true)); // HANDLE: $(html, props)

                if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {
                  for (match in context) {
                    // Properties of context are called as methods if possible
                    if (isFunction(this[match])) {
                      this[match](context[match]); // ...and otherwise set as attributes
                    } else {
                      this.attr(match, context[match]);
                    }
                  }
                }

                return this; // HANDLE: $(#id)
              } else {
                elem = document.getElementById(match[2]);

                if (elem) {
                  // Inject the element directly into the jQuery object
                  this[0] = elem;
                  this.length = 1;
                }

                return this;
              } // HANDLE: $(expr, $(...))

            } else if (!context || context.jquery) {
              return (context || root).find(selector); // HANDLE: $(expr, context)
              // (which is just equivalent to: $(context).find(expr)
            } else {
              return this.constructor(context).find(selector);
            } // HANDLE: $(DOMElement)

          } else if (selector.nodeType) {
            this[0] = selector;
            this.length = 1;
            return this; // HANDLE: $(function)
            // Shortcut for document ready
          } else if (isFunction(selector)) {
            return root.ready !== undefined ? root.ready(selector) : // Execute immediately if ready is not present
            selector(jQuery);
          }

          return jQuery.makeArray(selector, this);
        }; // Give the init function the jQuery prototype for later instantiation


        init.prototype = jQuery.fn; // Initialize central reference

        rootjQuery = jQuery(document);
        var rparentsprev = /^(?:parents|prev(?:Until|All))/,
            // Methods guaranteed to produce a unique set when starting from a unique set
        guaranteedUnique = {
          children: true,
          contents: true,
          next: true,
          prev: true
        };
        jQuery.fn.extend({
          has: function has(target) {
            var targets = jQuery(target, this),
                l = targets.length;
            return this.filter(function () {
              var i = 0;

              for (; i < l; i++) {
                if (jQuery.contains(this, targets[i])) {
                  return true;
                }
              }
            });
          },
          closest: function closest(selectors, context) {
            var cur,
                i = 0,
                l = this.length,
                matched = [],
                targets = typeof selectors !== "string" && jQuery(selectors); // Positional selectors never match, since there's no _selection_ context

            if (!rneedsContext.test(selectors)) {
              for (; i < l; i++) {
                for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {
                  // Always skip document fragments
                  if (cur.nodeType < 11 && (targets ? targets.index(cur) > -1 : // Don't pass non-elements to Sizzle
                  cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors))) {
                    matched.push(cur);
                    break;
                  }
                }
              }
            }

            return this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);
          },
          // Determine the position of an element within the set
          index: function index(elem) {
            // No argument, return index in parent
            if (!elem) {
              return this[0] && this[0].parentNode ? this.first().prevAll().length : -1;
            } // Index in selector


            if (typeof elem === "string") {
              return indexOf.call(jQuery(elem), this[0]);
            } // Locate the position of the desired element


            return indexOf.call(this, // If it receives a jQuery object, the first element is used
            elem.jquery ? elem[0] : elem);
          },
          add: function add(selector, context) {
            return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(), jQuery(selector, context))));
          },
          addBack: function addBack(selector) {
            return this.add(selector == null ? this.prevObject : this.prevObject.filter(selector));
          }
        });

        function sibling(cur, dir) {
          while ((cur = cur[dir]) && cur.nodeType !== 1) {}

          return cur;
        }

        jQuery.each({
          parent: function parent(elem) {
            var parent = elem.parentNode;
            return parent && parent.nodeType !== 11 ? parent : null;
          },
          parents: function parents(elem) {
            return dir(elem, "parentNode");
          },
          parentsUntil: function parentsUntil(elem, _i, until) {
            return dir(elem, "parentNode", until);
          },
          next: function next(elem) {
            return sibling(elem, "nextSibling");
          },
          prev: function prev(elem) {
            return sibling(elem, "previousSibling");
          },
          nextAll: function nextAll(elem) {
            return dir(elem, "nextSibling");
          },
          prevAll: function prevAll(elem) {
            return dir(elem, "previousSibling");
          },
          nextUntil: function nextUntil(elem, _i, until) {
            return dir(elem, "nextSibling", until);
          },
          prevUntil: function prevUntil(elem, _i, until) {
            return dir(elem, "previousSibling", until);
          },
          siblings: function siblings(elem) {
            return _siblings((elem.parentNode || {}).firstChild, elem);
          },
          children: function children(elem) {
            return _siblings(elem.firstChild);
          },
          contents: function contents(elem) {
            if (elem.contentDocument != null && // Support: IE 11+
            // <object> elements with no `data` attribute has an object
            // `contentDocument` with a `null` prototype.
            getProto(elem.contentDocument)) {
              return elem.contentDocument;
            } // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
            // Treat the template element as a regular one in browsers that
            // don't support it.


            if (nodeName(elem, "template")) {
              elem = elem.content || elem;
            }

            return jQuery.merge([], elem.childNodes);
          }
        }, function (name, fn) {
          jQuery.fn[name] = function (until, selector) {
            var matched = jQuery.map(this, fn, until);

            if (name.slice(-5) !== "Until") {
              selector = until;
            }

            if (selector && typeof selector === "string") {
              matched = jQuery.filter(selector, matched);
            }

            if (this.length > 1) {
              // Remove duplicates
              if (!guaranteedUnique[name]) {
                jQuery.uniqueSort(matched);
              } // Reverse order for parents* and prev-derivatives


              if (rparentsprev.test(name)) {
                matched.reverse();
              }
            }

            return this.pushStack(matched);
          };
        });
        var rnothtmlwhite = /[^\x20\t\r\n\f]+/g; // Convert String-formatted options into Object-formatted ones

        function createOptions(options) {
          var object = {};
          jQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {
            object[flag] = true;
          });
          return object;
        }
        /*
         * Create a callback list using the following parameters:
         *
         *	options: an optional list of space-separated options that will change how
         *			the callback list behaves or a more traditional option object
         *
         * By default a callback list will act like an event callback list and can be
         * "fired" multiple times.
         *
         * Possible options:
         *
         *	once:			will ensure the callback list can only be fired once (like a Deferred)
         *
         *	memory:			will keep track of previous values and will call any callback added
         *					after the list has been fired right away with the latest "memorized"
         *					values (like a Deferred)
         *
         *	unique:			will ensure a callback can only be added once (no duplicate in the list)
         *
         *	stopOnFalse:	interrupt callings when a callback returns false
         *
         */


        jQuery.Callbacks = function (options) {
          // Convert options from String-formatted to Object-formatted if needed
          // (we check in cache first)
          options = typeof options === "string" ? createOptions(options) : jQuery.extend({}, options);

          var // Flag to know if list is currently firing
          firing,
              // Last fire value for non-forgettable lists
          memory,
              // Flag to know if list was already fired
          _fired,
              // Flag to prevent firing
          _locked,
              // Actual callback list
          list = [],
              // Queue of execution data for repeatable lists
          queue = [],
              // Index of currently firing callback (modified by add/remove as needed)
          firingIndex = -1,
              // Fire callbacks
          fire = function fire() {
            // Enforce single-firing
            _locked = _locked || options.once; // Execute callbacks for all pending executions,
            // respecting firingIndex overrides and runtime changes

            _fired = firing = true;

            for (; queue.length; firingIndex = -1) {
              memory = queue.shift();

              while (++firingIndex < list.length) {
                // Run callback and check for early termination
                if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) {
                  // Jump to end and forget the data so .add doesn't re-fire
                  firingIndex = list.length;
                  memory = false;
                }
              }
            } // Forget the data if we're done with it


            if (!options.memory) {
              memory = false;
            }

            firing = false; // Clean up if we're done firing for good

            if (_locked) {
              // Keep an empty list if we have data for future add calls
              if (memory) {
                list = []; // Otherwise, this object is spent
              } else {
                list = "";
              }
            }
          },
              // Actual Callbacks object
          self = {
            // Add a callback or a collection of callbacks to the list
            add: function add() {
              if (list) {
                // If we have memory from a past run, we should fire after adding
                if (memory && !firing) {
                  firingIndex = list.length - 1;
                  queue.push(memory);
                }

                (function add(args) {
                  jQuery.each(args, function (_, arg) {
                    if (isFunction(arg)) {
                      if (!options.unique || !self.has(arg)) {
                        list.push(arg);
                      }
                    } else if (arg && arg.length && toType(arg) !== "string") {
                      // Inspect recursively
                      add(arg);
                    }
                  });
                })(arguments);

                if (memory && !firing) {
                  fire();
                }
              }

              return this;
            },
            // Remove a callback from the list
            remove: function remove() {
              jQuery.each(arguments, function (_, arg) {
                var index;

                while ((index = jQuery.inArray(arg, list, index)) > -1) {
                  list.splice(index, 1); // Handle firing indexes

                  if (index <= firingIndex) {
                    firingIndex--;
                  }
                }
              });
              return this;
            },
            // Check if a given callback is in the list.
            // If no argument is given, return whether or not list has callbacks attached.
            has: function has(fn) {
              return fn ? jQuery.inArray(fn, list) > -1 : list.length > 0;
            },
            // Remove all callbacks from the list
            empty: function empty() {
              if (list) {
                list = [];
              }

              return this;
            },
            // Disable .fire and .add
            // Abort any current/pending executions
            // Clear all callbacks and values
            disable: function disable() {
              _locked = queue = [];
              list = memory = "";
              return this;
            },
            disabled: function disabled() {
              return !list;
            },
            // Disable .fire
            // Also disable .add unless we have memory (since it would have no effect)
            // Abort any pending executions
            lock: function lock() {
              _locked = queue = [];

              if (!memory && !firing) {
                list = memory = "";
              }

              return this;
            },
            locked: function locked() {
              return !!_locked;
            },
            // Call all callbacks with the given context and arguments
            fireWith: function fireWith(context, args) {
              if (!_locked) {
                args = args || [];
                args = [context, args.slice ? args.slice() : args];
                queue.push(args);

                if (!firing) {
                  fire();
                }
              }

              return this;
            },
            // Call all the callbacks with the given arguments
            fire: function fire() {
              self.fireWith(this, arguments);
              return this;
            },
            // To know if the callbacks have already been called at least once
            fired: function fired() {
              return !!_fired;
            }
          };

          return self;
        };

        function Identity(v) {
          return v;
        }

        function Thrower(ex) {
          throw ex;
        }

        function adoptValue(value, resolve, reject, noValue) {
          var method;

          try {
            // Check for promise aspect first to privilege synchronous behavior
            if (value && isFunction(method = value.promise)) {
              method.call(value).done(resolve).fail(reject); // Other thenables
            } else if (value && isFunction(method = value.then)) {
              method.call(value, resolve, reject); // Other non-thenables
            } else {
              // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
              // * false: [ value ].slice( 0 ) => resolve( value )
              // * true: [ value ].slice( 1 ) => resolve()
              resolve.apply(undefined, [value].slice(noValue));
            } // For Promises/A+, convert exceptions into rejections
            // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
            // Deferred#then to conditionally suppress rejection.

          } catch (value) {
            // Support: Android 4.0 only
            // Strict mode functions invoked without .call/.apply get global-object context
            reject.apply(undefined, [value]);
          }
        }

        jQuery.extend({
          Deferred: function Deferred(func) {
            var tuples = [// action, add listener, callbacks,
            // ... .then handlers, argument index, [final state]
            ["notify", "progress", jQuery.Callbacks("memory"), jQuery.Callbacks("memory"), 2], ["resolve", "done", jQuery.Callbacks("once memory"), jQuery.Callbacks("once memory"), 0, "resolved"], ["reject", "fail", jQuery.Callbacks("once memory"), jQuery.Callbacks("once memory"), 1, "rejected"]],
                _state2 = "pending",
                _promise = {
              state: function state() {
                return _state2;
              },
              always: function always() {
                deferred.done(arguments).fail(arguments);
                return this;
              },
              "catch": function _catch(fn) {
                return _promise.then(null, fn);
              },
              // Keep pipe for back-compat
              pipe: function pipe()
              /* fnDone, fnFail, fnProgress */
              {
                var fns = arguments;
                return jQuery.Deferred(function (newDefer) {
                  jQuery.each(tuples, function (_i, tuple) {
                    // Map tuples (progress, done, fail) to arguments (done, fail, progress)
                    var fn = isFunction(fns[tuple[4]]) && fns[tuple[4]]; // deferred.progress(function() { bind to newDefer or newDefer.notify })
                    // deferred.done(function() { bind to newDefer or newDefer.resolve })
                    // deferred.fail(function() { bind to newDefer or newDefer.reject })

                    deferred[tuple[1]](function () {
                      var returned = fn && fn.apply(this, arguments);

                      if (returned && isFunction(returned.promise)) {
                        returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);
                      } else {
                        newDefer[tuple[0] + "With"](this, fn ? [returned] : arguments);
                      }
                    });
                  });
                  fns = null;
                }).promise();
              },
              then: function then(onFulfilled, onRejected, onProgress) {
                var maxDepth = 0;

                function resolve(depth, deferred, handler, special) {
                  return function () {
                    var that = this,
                        args = arguments,
                        mightThrow = function mightThrow() {
                      var returned, then; // Support: Promises/A+ section 2.3.3.3.3
                      // https://promisesaplus.com/#point-59
                      // Ignore double-resolution attempts

                      if (depth < maxDepth) {
                        return;
                      }

                      returned = handler.apply(that, args); // Support: Promises/A+ section 2.3.1
                      // https://promisesaplus.com/#point-48

                      if (returned === deferred.promise()) {
                        throw new TypeError("Thenable self-resolution");
                      } // Support: Promises/A+ sections 2.3.3.1, 3.5
                      // https://promisesaplus.com/#point-54
                      // https://promisesaplus.com/#point-75
                      // Retrieve `then` only once


                      then = returned && ( // Support: Promises/A+ section 2.3.4
                      // https://promisesaplus.com/#point-64
                      // Only check objects and functions for thenability
                      typeof returned === "object" || typeof returned === "function") && returned.then; // Handle a returned thenable

                      if (isFunction(then)) {
                        // Special processors (notify) just wait for resolution
                        if (special) {
                          then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special)); // Normal processors (resolve) also hook into progress
                        } else {
                          // ...and disregard older resolution values
                          maxDepth++;
                          then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special), resolve(maxDepth, deferred, Identity, deferred.notifyWith));
                        } // Handle all other returned values

                      } else {
                        // Only substitute handlers pass on context
                        // and multiple values (non-spec behavior)
                        if (handler !== Identity) {
                          that = undefined;
                          args = [returned];
                        } // Process the value(s)
                        // Default process is resolve


                        (special || deferred.resolveWith)(that, args);
                      }
                    },
                        // Only normal processors (resolve) catch and reject exceptions
                    process = special ? mightThrow : function () {
                      try {
                        mightThrow();
                      } catch (e) {
                        if (jQuery.Deferred.exceptionHook) {
                          jQuery.Deferred.exceptionHook(e, process.stackTrace);
                        } // Support: Promises/A+ section 2.3.3.3.4.1
                        // https://promisesaplus.com/#point-61
                        // Ignore post-resolution exceptions


                        if (depth + 1 >= maxDepth) {
                          // Only substitute handlers pass on context
                          // and multiple values (non-spec behavior)
                          if (handler !== Thrower) {
                            that = undefined;
                            args = [e];
                          }

                          deferred.rejectWith(that, args);
                        }
                      }
                    }; // Support: Promises/A+ section 2.3.3.3.1
                    // https://promisesaplus.com/#point-57
                    // Re-resolve promises immediately to dodge false rejection from
                    // subsequent errors


                    if (depth) {
                      process();
                    } else {
                      // Call an optional hook to record the stack, in case of exception
                      // since it's otherwise lost when execution goes async
                      if (jQuery.Deferred.getStackHook) {
                        process.stackTrace = jQuery.Deferred.getStackHook();
                      }

                      window.setTimeout(process);
                    }
                  };
                }

                return jQuery.Deferred(function (newDefer) {
                  // progress_handlers.add( ... )
                  tuples[0][3].add(resolve(0, newDefer, isFunction(onProgress) ? onProgress : Identity, newDefer.notifyWith)); // fulfilled_handlers.add( ... )

                  tuples[1][3].add(resolve(0, newDefer, isFunction(onFulfilled) ? onFulfilled : Identity)); // rejected_handlers.add( ... )

                  tuples[2][3].add(resolve(0, newDefer, isFunction(onRejected) ? onRejected : Thrower));
                }).promise();
              },
              // Get a promise for this deferred
              // If obj is provided, the promise aspect is added to the object
              promise: function promise(obj) {
                return obj != null ? jQuery.extend(obj, _promise) : _promise;
              }
            },
                deferred = {}; // Add list-specific methods

            jQuery.each(tuples, function (i, tuple) {
              var list = tuple[2],
                  stateString = tuple[5]; // promise.progress = list.add
              // promise.done = list.add
              // promise.fail = list.add

              _promise[tuple[1]] = list.add; // Handle state

              if (stateString) {
                list.add(function () {
                  // state = "resolved" (i.e., fulfilled)
                  // state = "rejected"
                  _state2 = stateString;
                }, // rejected_callbacks.disable
                // fulfilled_callbacks.disable
                tuples[3 - i][2].disable, // rejected_handlers.disable
                // fulfilled_handlers.disable
                tuples[3 - i][3].disable, // progress_callbacks.lock
                tuples[0][2].lock, // progress_handlers.lock
                tuples[0][3].lock);
              } // progress_handlers.fire
              // fulfilled_handlers.fire
              // rejected_handlers.fire


              list.add(tuple[3].fire); // deferred.notify = function() { deferred.notifyWith(...) }
              // deferred.resolve = function() { deferred.resolveWith(...) }
              // deferred.reject = function() { deferred.rejectWith(...) }

              deferred[tuple[0]] = function () {
                deferred[tuple[0] + "With"](this === deferred ? undefined : this, arguments);
                return this;
              }; // deferred.notifyWith = list.fireWith
              // deferred.resolveWith = list.fireWith
              // deferred.rejectWith = list.fireWith


              deferred[tuple[0] + "With"] = list.fireWith;
            }); // Make the deferred a promise

            _promise.promise(deferred); // Call given func if any


            if (func) {
              func.call(deferred, deferred);
            } // All done!


            return deferred;
          },
          // Deferred helper
          when: function when(singleValue) {
            var // count of uncompleted subordinates
            remaining = arguments.length,
                // count of unprocessed arguments
            i = remaining,
                // subordinate fulfillment data
            resolveContexts = Array(i),
                resolveValues = _slice.call(arguments),
                // the master Deferred
            master = jQuery.Deferred(),
                // subordinate callback factory
            updateFunc = function updateFunc(i) {
              return function (value) {
                resolveContexts[i] = this;
                resolveValues[i] = arguments.length > 1 ? _slice.call(arguments) : value;

                if (! --remaining) {
                  master.resolveWith(resolveContexts, resolveValues);
                }
              };
            }; // Single- and empty arguments are adopted like Promise.resolve


            if (remaining <= 1) {
              adoptValue(singleValue, master.done(updateFunc(i)).resolve, master.reject, !remaining); // Use .then() to unwrap secondary thenables (cf. gh-3000)

              if (master.state() === "pending" || isFunction(resolveValues[i] && resolveValues[i].then)) {
                return master.then();
              }
            } // Multiple arguments are aggregated like Promise.all array elements


            while (i--) {
              adoptValue(resolveValues[i], updateFunc(i), master.reject);
            }

            return master.promise();
          }
        }); // These usually indicate a programmer mistake during development,
        // warn about them ASAP rather than swallowing them by default.

        var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;

        jQuery.Deferred.exceptionHook = function (error, stack) {
          // Support: IE 8 - 9 only
          // Console exists when dev tools are open, which can happen at any time
          if (window.console && window.console.warn && error && rerrorNames.test(error.name)) {
            window.console.warn("jQuery.Deferred exception: " + error.message, error.stack, stack);
          }
        };

        jQuery.readyException = function (error) {
          window.setTimeout(function () {
            throw error;
          });
        }; // The deferred used on DOM ready


        var readyList = jQuery.Deferred();

        jQuery.fn.ready = function (fn) {
          readyList.then(fn) // Wrap jQuery.readyException in a function so that the lookup
          // happens at the time of error handling instead of callback
          // registration.
          ["catch"](function (error) {
            jQuery.readyException(error);
          });
          return this;
        };

        jQuery.extend({
          // Is the DOM ready to be used? Set to true once it occurs.
          isReady: false,
          // A counter to track how many items to wait for before
          // the ready event fires. See #6781
          readyWait: 1,
          // Handle when the DOM is ready
          ready: function ready(wait) {
            // Abort if there are pending holds or we're already ready
            if (wait === true ? --jQuery.readyWait : jQuery.isReady) {
              return;
            } // Remember that the DOM is ready


            jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be

            if (wait !== true && --jQuery.readyWait > 0) {
              return;
            } // If there are functions bound, to execute


            readyList.resolveWith(document, [jQuery]);
          }
        });
        jQuery.ready.then = readyList.then; // The ready event handler and self cleanup method

        function completed() {
          document.removeEventListener("DOMContentLoaded", completed);
          window.removeEventListener("load", completed);
          jQuery.ready();
        } // Catch cases where $(document).ready() is called
        // after the browser event has already occurred.
        // Support: IE <=9 - 10 only
        // Older IE sometimes signals "interactive" too soon


        if (document.readyState === "complete" || document.readyState !== "loading" && !document.documentElement.doScroll) {
          // Handle it asynchronously to allow scripts the opportunity to delay ready
          window.setTimeout(jQuery.ready);
        } else {
          // Use the handy event callback
          document.addEventListener("DOMContentLoaded", completed); // A fallback to window.onload, that will always work

          window.addEventListener("load", completed);
        } // Multifunctional method to get and set values of a collection
        // The value/s can optionally be executed if it's a function


        var access = function access(elems, fn, key, value, chainable, emptyGet, raw) {
          var i = 0,
              len = elems.length,
              bulk = key == null; // Sets many values

          if (toType(key) === "object") {
            chainable = true;

            for (i in key) {
              access(elems, fn, i, key[i], true, emptyGet, raw);
            } // Sets one value

          } else if (value !== undefined) {
            chainable = true;

            if (!isFunction(value)) {
              raw = true;
            }

            if (bulk) {
              // Bulk operations run against the entire set
              if (raw) {
                fn.call(elems, value);
                fn = null; // ...except when executing function values
              } else {
                bulk = fn;

                fn = function fn(elem, _key, value) {
                  return bulk.call(jQuery(elem), value);
                };
              }
            }

            if (fn) {
              for (; i < len; i++) {
                fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key)));
              }
            }
          }

          if (chainable) {
            return elems;
          } // Gets


          if (bulk) {
            return fn.call(elems);
          }

          return len ? fn(elems[0], key) : emptyGet;
        }; // Matches dashed string for camelizing


        var rmsPrefix = /^-ms-/,
            rdashAlpha = /-([a-z])/g; // Used by camelCase as callback to replace()

        function fcamelCase(_all, letter) {
          return letter.toUpperCase();
        } // Convert dashed to camelCase; used by the css and data modules
        // Support: IE <=9 - 11, Edge 12 - 15
        // Microsoft forgot to hump their vendor prefix (#9572)


        function camelCase(string) {
          return string.replace(rmsPrefix, "ms-").replace(rdashAlpha, fcamelCase);
        }

        var acceptData = function acceptData(owner) {
          // Accepts only:
          //  - Node
          //    - Node.ELEMENT_NODE
          //    - Node.DOCUMENT_NODE
          //  - Object
          //    - Any
          return owner.nodeType === 1 || owner.nodeType === 9 || !+owner.nodeType;
        };

        function Data() {
          this.expando = jQuery.expando + Data.uid++;
        }

        Data.uid = 1;
        Data.prototype = {
          cache: function cache(owner) {
            // Check if the owner object already has a cache
            var value = owner[this.expando]; // If not, create one

            if (!value) {
              value = {}; // We can accept data for non-element nodes in modern browsers,
              // but we should not, see #8335.
              // Always return an empty object.

              if (acceptData(owner)) {
                // If it is a node unlikely to be stringify-ed or looped over
                // use plain assignment
                if (owner.nodeType) {
                  owner[this.expando] = value; // Otherwise secure it in a non-enumerable property
                  // configurable must be true to allow the property to be
                  // deleted when data is removed
                } else {
                  Object.defineProperty(owner, this.expando, {
                    value: value,
                    configurable: true
                  });
                }
              }
            }

            return value;
          },
          set: function set(owner, data, value) {
            var prop,
                cache = this.cache(owner); // Handle: [ owner, key, value ] args
            // Always use camelCase key (gh-2257)

            if (typeof data === "string") {
              cache[camelCase(data)] = value; // Handle: [ owner, { properties } ] args
            } else {
              // Copy the properties one-by-one to the cache object
              for (prop in data) {
                cache[camelCase(prop)] = data[prop];
              }
            }

            return cache;
          },
          get: function get(owner, key) {
            return key === undefined ? this.cache(owner) : // Always use camelCase key (gh-2257)
            owner[this.expando] && owner[this.expando][camelCase(key)];
          },
          access: function access(owner, key, value) {
            // In cases where either:
            //
            //   1. No key was specified
            //   2. A string key was specified, but no value provided
            //
            // Take the "read" path and allow the get method to determine
            // which value to return, respectively either:
            //
            //   1. The entire cache object
            //   2. The data stored at the key
            //
            if (key === undefined || key && typeof key === "string" && value === undefined) {
              return this.get(owner, key);
            } // When the key is not a string, or both a key and value
            // are specified, set or extend (existing objects) with either:
            //
            //   1. An object of properties
            //   2. A key and value
            //


            this.set(owner, key, value); // Since the "set" path can have two possible entry points
            // return the expected data based on which path was taken[*]

            return value !== undefined ? value : key;
          },
          remove: function remove(owner, key) {
            var i,
                cache = owner[this.expando];

            if (cache === undefined) {
              return;
            }

            if (key !== undefined) {
              // Support array or space separated string of keys
              if (Array.isArray(key)) {
                // If key is an array of keys...
                // We always set camelCase keys, so remove that.
                key = key.map(camelCase);
              } else {
                key = camelCase(key); // If a key with the spaces exists, use it.
                // Otherwise, create an array by matching non-whitespace

                key = key in cache ? [key] : key.match(rnothtmlwhite) || [];
              }

              i = key.length;

              while (i--) {
                delete cache[key[i]];
              }
            } // Remove the expando if there's no more data


            if (key === undefined || jQuery.isEmptyObject(cache)) {
              // Support: Chrome <=35 - 45
              // Webkit & Blink performance suffers when deleting properties
              // from DOM nodes, so set to undefined instead
              // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
              if (owner.nodeType) {
                owner[this.expando] = undefined;
              } else {
                delete owner[this.expando];
              }
            }
          },
          hasData: function hasData(owner) {
            var cache = owner[this.expando];
            return cache !== undefined && !jQuery.isEmptyObject(cache);
          }
        };
        var dataPriv = new Data();
        var dataUser = new Data(); //	Implementation Summary
        //
        //	1. Enforce API surface and semantic compatibility with 1.9.x branch
        //	2. Improve the module's maintainability by reducing the storage
        //		paths to a single mechanism.
        //	3. Use the same single mechanism to support "private" and "user" data.
        //	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
        //	5. Avoid exposing implementation details on user objects (eg. expando properties)
        //	6. Provide a clear path for implementation upgrade to WeakMap in 2014

        var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
            rmultiDash = /[A-Z]/g;

        function getData(data) {
          if (data === "true") {
            return true;
          }

          if (data === "false") {
            return false;
          }

          if (data === "null") {
            return null;
          } // Only convert to a number if it doesn't change the string


          if (data === +data + "") {
            return +data;
          }

          if (rbrace.test(data)) {
            return JSON.parse(data);
          }

          return data;
        }

        function dataAttr(elem, key, data) {
          var name; // If nothing was found internally, try to fetch any
          // data from the HTML5 data-* attribute

          if (data === undefined && elem.nodeType === 1) {
            name = "data-" + key.replace(rmultiDash, "-$&").toLowerCase();
            data = elem.getAttribute(name);

            if (typeof data === "string") {
              try {
                data = getData(data);
              } catch (e) {} // Make sure we set the data so it isn't changed later


              dataUser.set(elem, key, data);
            } else {
              data = undefined;
            }
          }

          return data;
        }

        jQuery.extend({
          hasData: function hasData(elem) {
            return dataUser.hasData(elem) || dataPriv.hasData(elem);
          },
          data: function data(elem, name, _data2) {
            return dataUser.access(elem, name, _data2);
          },
          removeData: function removeData(elem, name) {
            dataUser.remove(elem, name);
          },
          // TODO: Now that all calls to _data and _removeData have been replaced
          // with direct calls to dataPriv methods, these can be deprecated.
          _data: function _data(elem, name, data) {
            return dataPriv.access(elem, name, data);
          },
          _removeData: function _removeData(elem, name) {
            dataPriv.remove(elem, name);
          }
        });
        jQuery.fn.extend({
          data: function data(key, value) {
            var i,
                name,
                data,
                elem = this[0],
                attrs = elem && elem.attributes; // Gets all values

            if (key === undefined) {
              if (this.length) {
                data = dataUser.get(elem);

                if (elem.nodeType === 1 && !dataPriv.get(elem, "hasDataAttrs")) {
                  i = attrs.length;

                  while (i--) {
                    // Support: IE 11 only
                    // The attrs elements can be null (#14894)
                    if (attrs[i]) {
                      name = attrs[i].name;

                      if (name.indexOf("data-") === 0) {
                        name = camelCase(name.slice(5));
                        dataAttr(elem, name, data[name]);
                      }
                    }
                  }

                  dataPriv.set(elem, "hasDataAttrs", true);
                }
              }

              return data;
            } // Sets multiple values


            if (typeof key === "object") {
              return this.each(function () {
                dataUser.set(this, key);
              });
            }

            return access(this, function (value) {
              var data; // The calling jQuery object (element matches) is not empty
              // (and therefore has an element appears at this[ 0 ]) and the
              // `value` parameter was not undefined. An empty jQuery object
              // will result in `undefined` for elem = this[ 0 ] which will
              // throw an exception if an attempt to read a data cache is made.

              if (elem && value === undefined) {
                // Attempt to get data from the cache
                // The key will always be camelCased in Data
                data = dataUser.get(elem, key);

                if (data !== undefined) {
                  return data;
                } // Attempt to "discover" the data in
                // HTML5 custom data-* attrs


                data = dataAttr(elem, key);

                if (data !== undefined) {
                  return data;
                } // We tried really hard, but the data doesn't exist.


                return;
              } // Set the data...


              this.each(function () {
                // We always store the camelCased key
                dataUser.set(this, key, value);
              });
            }, null, value, arguments.length > 1, null, true);
          },
          removeData: function removeData(key) {
            return this.each(function () {
              dataUser.remove(this, key);
            });
          }
        });
        jQuery.extend({
          queue: function queue(elem, type, data) {
            var queue;

            if (elem) {
              type = (type || "fx") + "queue";
              queue = dataPriv.get(elem, type); // Speed up dequeue by getting out quickly if this is just a lookup

              if (data) {
                if (!queue || Array.isArray(data)) {
                  queue = dataPriv.access(elem, type, jQuery.makeArray(data));
                } else {
                  queue.push(data);
                }
              }

              return queue || [];
            }
          },
          dequeue: function dequeue(elem, type) {
            type = type || "fx";

            var queue = jQuery.queue(elem, type),
                startLength = queue.length,
                fn = queue.shift(),
                hooks = jQuery._queueHooks(elem, type),
                next = function next() {
              jQuery.dequeue(elem, type);
            }; // If the fx queue is dequeued, always remove the progress sentinel


            if (fn === "inprogress") {
              fn = queue.shift();
              startLength--;
            }

            if (fn) {
              // Add a progress sentinel to prevent the fx queue from being
              // automatically dequeued
              if (type === "fx") {
                queue.unshift("inprogress");
              } // Clear up the last queue stop function


              delete hooks.stop;
              fn.call(elem, next, hooks);
            }

            if (!startLength && hooks) {
              hooks.empty.fire();
            }
          },
          // Not public - generate a queueHooks object, or return the current one
          _queueHooks: function _queueHooks(elem, type) {
            var key = type + "queueHooks";
            return dataPriv.get(elem, key) || dataPriv.access(elem, key, {
              empty: jQuery.Callbacks("once memory").add(function () {
                dataPriv.remove(elem, [type + "queue", key]);
              })
            });
          }
        });
        jQuery.fn.extend({
          queue: function queue(type, data) {
            var setter = 2;

            if (typeof type !== "string") {
              data = type;
              type = "fx";
              setter--;
            }

            if (arguments.length < setter) {
              return jQuery.queue(this[0], type);
            }

            return data === undefined ? this : this.each(function () {
              var queue = jQuery.queue(this, type, data); // Ensure a hooks for this queue

              jQuery._queueHooks(this, type);

              if (type === "fx" && queue[0] !== "inprogress") {
                jQuery.dequeue(this, type);
              }
            });
          },
          dequeue: function dequeue(type) {
            return this.each(function () {
              jQuery.dequeue(this, type);
            });
          },
          clearQueue: function clearQueue(type) {
            return this.queue(type || "fx", []);
          },
          // Get a promise resolved when queues of a certain type
          // are emptied (fx is the type by default)
          promise: function promise(type, obj) {
            var tmp,
                count = 1,
                defer = jQuery.Deferred(),
                elements = this,
                i = this.length,
                resolve = function resolve() {
              if (! --count) {
                defer.resolveWith(elements, [elements]);
              }
            };

            if (typeof type !== "string") {
              obj = type;
              type = undefined;
            }

            type = type || "fx";

            while (i--) {
              tmp = dataPriv.get(elements[i], type + "queueHooks");

              if (tmp && tmp.empty) {
                count++;
                tmp.empty.add(resolve);
              }
            }

            resolve();
            return defer.promise(obj);
          }
        });
        var pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source;
        var rcssNum = new RegExp("^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i");
        var cssExpand = ["Top", "Right", "Bottom", "Left"];
        var documentElement = document.documentElement;

        var isAttached = function isAttached(elem) {
          return jQuery.contains(elem.ownerDocument, elem);
        },
            composed = {
          composed: true
        }; // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
        // Check attachment across shadow DOM boundaries when possible (gh-3504)
        // Support: iOS 10.0-10.2 only
        // Early iOS 10 versions support `attachShadow` but not `getRootNode`,
        // leading to errors. We need to check for `getRootNode`.


        if (documentElement.getRootNode) {
          isAttached = function isAttached(elem) {
            return jQuery.contains(elem.ownerDocument, elem) || elem.getRootNode(composed) === elem.ownerDocument;
          };
        }

        var isHiddenWithinTree = function isHiddenWithinTree(elem, el) {
          // isHiddenWithinTree might be called from jQuery#filter function;
          // in that case, element will be second argument
          elem = el || elem; // Inline style trumps all

          return elem.style.display === "none" || elem.style.display === "" && // Otherwise, check computed style
          // Support: Firefox <=43 - 45
          // Disconnected elements can have computed display: none, so first confirm that elem is
          // in the document.
          isAttached(elem) && jQuery.css(elem, "display") === "none";
        };

        function adjustCSS(elem, prop, valueParts, tween) {
          var adjusted,
              scale,
              maxIterations = 20,
              currentValue = tween ? function () {
            return tween.cur();
          } : function () {
            return jQuery.css(elem, prop, "");
          },
              initial = currentValue(),
              unit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? "" : "px"),
              // Starting value computation is required for potential unit mismatches
          initialInUnit = elem.nodeType && (jQuery.cssNumber[prop] || unit !== "px" && +initial) && rcssNum.exec(jQuery.css(elem, prop));

          if (initialInUnit && initialInUnit[3] !== unit) {
            // Support: Firefox <=54
            // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
            initial = initial / 2; // Trust units reported by jQuery.css

            unit = unit || initialInUnit[3]; // Iteratively approximate from a nonzero starting point

            initialInUnit = +initial || 1;

            while (maxIterations--) {
              // Evaluate and update our best guess (doubling guesses that zero out).
              // Finish if the scale equals or crosses 1 (making the old*new product non-positive).
              jQuery.style(elem, prop, initialInUnit + unit);

              if ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {
                maxIterations = 0;
              }

              initialInUnit = initialInUnit / scale;
            }

            initialInUnit = initialInUnit * 2;
            jQuery.style(elem, prop, initialInUnit + unit); // Make sure we update the tween properties later on

            valueParts = valueParts || [];
          }

          if (valueParts) {
            initialInUnit = +initialInUnit || +initial || 0; // Apply relative offset (+=/-=) if specified

            adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2];

            if (tween) {
              tween.unit = unit;
              tween.start = initialInUnit;
              tween.end = adjusted;
            }
          }

          return adjusted;
        }

        var defaultDisplayMap = {};

        function getDefaultDisplay(elem) {
          var temp,
              doc = elem.ownerDocument,
              nodeName = elem.nodeName,
              display = defaultDisplayMap[nodeName];

          if (display) {
            return display;
          }

          temp = doc.body.appendChild(doc.createElement(nodeName));
          display = jQuery.css(temp, "display");
          temp.parentNode.removeChild(temp);

          if (display === "none") {
            display = "block";
          }

          defaultDisplayMap[nodeName] = display;
          return display;
        }

        function showHide(elements, show) {
          var display,
              elem,
              values = [],
              index = 0,
              length = elements.length; // Determine new display value for elements that need to change

          for (; index < length; index++) {
            elem = elements[index];

            if (!elem.style) {
              continue;
            }

            display = elem.style.display;

            if (show) {
              // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
              // check is required in this first loop unless we have a nonempty display value (either
              // inline or about-to-be-restored)
              if (display === "none") {
                values[index] = dataPriv.get(elem, "display") || null;

                if (!values[index]) {
                  elem.style.display = "";
                }
              }

              if (elem.style.display === "" && isHiddenWithinTree(elem)) {
                values[index] = getDefaultDisplay(elem);
              }
            } else {
              if (display !== "none") {
                values[index] = "none"; // Remember what we're overwriting

                dataPriv.set(elem, "display", display);
              }
            }
          } // Set the display of the elements in a second loop to avoid constant reflow


          for (index = 0; index < length; index++) {
            if (values[index] != null) {
              elements[index].style.display = values[index];
            }
          }

          return elements;
        }

        jQuery.fn.extend({
          show: function show() {
            return showHide(this, true);
          },
          hide: function hide() {
            return showHide(this);
          },
          toggle: function toggle(state) {
            if (typeof state === "boolean") {
              return state ? this.show() : this.hide();
            }

            return this.each(function () {
              if (isHiddenWithinTree(this)) {
                jQuery(this).show();
              } else {
                jQuery(this).hide();
              }
            });
          }
        });
        var rcheckableType = /^(?:checkbox|radio)$/i;
        var rtagName = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i;
        var rscriptType = /^$|^module$|\/(?:java|ecma)script/i;

        (function () {
          var fragment = document.createDocumentFragment(),
              div = fragment.appendChild(document.createElement("div")),
              input = document.createElement("input"); // Support: Android 4.0 - 4.3 only
          // Check state lost if the name is set (#11217)
          // Support: Windows Web Apps (WWA)
          // `name` and `type` must use .setAttribute for WWA (#14901)

          input.setAttribute("type", "radio");
          input.setAttribute("checked", "checked");
          input.setAttribute("name", "t");
          div.appendChild(input); // Support: Android <=4.1 only
          // Older WebKit doesn't clone checked state correctly in fragments

          support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked; // Support: IE <=11 only
          // Make sure textarea (and checkbox) defaultValue is properly cloned

          div.innerHTML = "<textarea>x</textarea>";
          support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue; // Support: IE <=9 only
          // IE <=9 replaces <option> tags with their contents when inserted outside of
          // the select element.

          div.innerHTML = "<option></option>";
          support.option = !!div.lastChild;
        })(); // We have to close these tags to support XHTML (#13200)


        var wrapMap = {
          // XHTML parsers do not magically insert elements in the
          // same way that tag soup parsers do. So we cannot shorten
          // this by omitting <tbody> or other required elements.
          thead: [1, "<table>", "</table>"],
          col: [2, "<table><colgroup>", "</colgroup></table>"],
          tr: [2, "<table><tbody>", "</tbody></table>"],
          td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
          _default: [0, "", ""]
        };
        wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
        wrapMap.th = wrapMap.td; // Support: IE <=9 only

        if (!support.option) {
          wrapMap.optgroup = wrapMap.option = [1, "<select multiple='multiple'>", "</select>"];
        }

        function getAll(context, tag) {
          // Support: IE <=9 - 11 only
          // Use typeof to avoid zero-argument method invocation on host objects (#15151)
          var ret;

          if (typeof context.getElementsByTagName !== "undefined") {
            ret = context.getElementsByTagName(tag || "*");
          } else if (typeof context.querySelectorAll !== "undefined") {
            ret = context.querySelectorAll(tag || "*");
          } else {
            ret = [];
          }

          if (tag === undefined || tag && nodeName(context, tag)) {
            return jQuery.merge([context], ret);
          }

          return ret;
        } // Mark scripts as having already been evaluated


        function setGlobalEval(elems, refElements) {
          var i = 0,
              l = elems.length;

          for (; i < l; i++) {
            dataPriv.set(elems[i], "globalEval", !refElements || dataPriv.get(refElements[i], "globalEval"));
          }
        }

        var rhtml = /<|&#?\w+;/;

        function buildFragment(elems, context, scripts, selection, ignored) {
          var elem,
              tmp,
              tag,
              wrap,
              attached,
              j,
              fragment = context.createDocumentFragment(),
              nodes = [],
              i = 0,
              l = elems.length;

          for (; i < l; i++) {
            elem = elems[i];

            if (elem || elem === 0) {
              // Add nodes directly
              if (toType(elem) === "object") {
                // Support: Android <=4.0 only, PhantomJS 1 only
                // push.apply(_, arraylike) throws on ancient WebKit
                jQuery.merge(nodes, elem.nodeType ? [elem] : elem); // Convert non-html into a text node
              } else if (!rhtml.test(elem)) {
                nodes.push(context.createTextNode(elem)); // Convert html into DOM nodes
              } else {
                tmp = tmp || fragment.appendChild(context.createElement("div")); // Deserialize a standard representation

                tag = (rtagName.exec(elem) || ["", ""])[1].toLowerCase();
                wrap = wrapMap[tag] || wrapMap._default;
                tmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2]; // Descend through wrappers to the right content

                j = wrap[0];

                while (j--) {
                  tmp = tmp.lastChild;
                } // Support: Android <=4.0 only, PhantomJS 1 only
                // push.apply(_, arraylike) throws on ancient WebKit


                jQuery.merge(nodes, tmp.childNodes); // Remember the top-level container

                tmp = fragment.firstChild; // Ensure the created nodes are orphaned (#12392)

                tmp.textContent = "";
              }
            }
          } // Remove wrapper from fragment


          fragment.textContent = "";
          i = 0;

          while (elem = nodes[i++]) {
            // Skip elements already in the context collection (trac-4087)
            if (selection && jQuery.inArray(elem, selection) > -1) {
              if (ignored) {
                ignored.push(elem);
              }

              continue;
            }

            attached = isAttached(elem); // Append to fragment

            tmp = getAll(fragment.appendChild(elem), "script"); // Preserve script evaluation history

            if (attached) {
              setGlobalEval(tmp);
            } // Capture executables


            if (scripts) {
              j = 0;

              while (elem = tmp[j++]) {
                if (rscriptType.test(elem.type || "")) {
                  scripts.push(elem);
                }
              }
            }
          }

          return fragment;
        }

        var rkeyEvent = /^key/,
            rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
            rtypenamespace = /^([^.]*)(?:\.(.+)|)/;

        function returnTrue() {
          return true;
        }

        function returnFalse() {
          return false;
        } // Support: IE <=9 - 11+
        // focus() and blur() are asynchronous, except when they are no-op.
        // So expect focus to be synchronous when the element is already active,
        // and blur to be synchronous when the element is not already active.
        // (focus and blur are always synchronous in other supported browsers,
        // this just defines when we can count on it).


        function expectSync(elem, type) {
          return elem === safeActiveElement() === (type === "focus");
        } // Support: IE <=9 only
        // Accessing document.activeElement can throw unexpectedly
        // https://bugs.jquery.com/ticket/13393


        function safeActiveElement() {
          try {
            return document.activeElement;
          } catch (err) {}
        }

        function _on(elem, types, selector, data, fn, one) {
          var origFn, type; // Types can be a map of types/handlers

          if (typeof types === "object") {
            // ( types-Object, selector, data )
            if (typeof selector !== "string") {
              // ( types-Object, data )
              data = data || selector;
              selector = undefined;
            }

            for (type in types) {
              _on(elem, type, selector, data, types[type], one);
            }

            return elem;
          }

          if (data == null && fn == null) {
            // ( types, fn )
            fn = selector;
            data = selector = undefined;
          } else if (fn == null) {
            if (typeof selector === "string") {
              // ( types, selector, fn )
              fn = data;
              data = undefined;
            } else {
              // ( types, data, fn )
              fn = data;
              data = selector;
              selector = undefined;
            }
          }

          if (fn === false) {
            fn = returnFalse;
          } else if (!fn) {
            return elem;
          }

          if (one === 1) {
            origFn = fn;

            fn = function fn(event) {
              // Can use an empty set, since event contains the info
              jQuery().off(event);
              return origFn.apply(this, arguments);
            }; // Use same guid so caller can remove using origFn


            fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);
          }

          return elem.each(function () {
            jQuery.event.add(this, types, fn, data, selector);
          });
        }
        /*
         * Helper functions for managing events -- not part of the public interface.
         * Props to Dean Edwards' addEvent library for many of the ideas.
         */


        jQuery.event = {
          global: {},
          add: function add(elem, types, handler, data, selector) {
            var handleObjIn,
                eventHandle,
                tmp,
                events,
                t,
                handleObj,
                special,
                handlers,
                type,
                namespaces,
                origType,
                elemData = dataPriv.get(elem); // Only attach events to objects that accept data

            if (!acceptData(elem)) {
              return;
            } // Caller can pass in an object of custom data in lieu of the handler


            if (handler.handler) {
              handleObjIn = handler;
              handler = handleObjIn.handler;
              selector = handleObjIn.selector;
            } // Ensure that invalid selectors throw exceptions at attach time
            // Evaluate against documentElement in case elem is a non-element node (e.g., document)


            if (selector) {
              jQuery.find.matchesSelector(documentElement, selector);
            } // Make sure that the handler has a unique ID, used to find/remove it later


            if (!handler.guid) {
              handler.guid = jQuery.guid++;
            } // Init the element's event structure and main handler, if this is the first


            if (!(events = elemData.events)) {
              events = elemData.events = Object.create(null);
            }

            if (!(eventHandle = elemData.handle)) {
              eventHandle = elemData.handle = function (e) {
                // Discard the second event of a jQuery.event.trigger() and
                // when an event is called after a page has unloaded
                return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply(elem, arguments) : undefined;
              };
            } // Handle multiple events separated by a space


            types = (types || "").match(rnothtmlwhite) || [""];
            t = types.length;

            while (t--) {
              tmp = rtypenamespace.exec(types[t]) || [];
              type = origType = tmp[1];
              namespaces = (tmp[2] || "").split(".").sort(); // There *must* be a type, no attaching namespace-only handlers

              if (!type) {
                continue;
              } // If event changes its type, use the special event handlers for the changed type


              special = jQuery.event.special[type] || {}; // If selector defined, determine special event api type, otherwise given type

              type = (selector ? special.delegateType : special.bindType) || type; // Update special based on newly reset type

              special = jQuery.event.special[type] || {}; // handleObj is passed to all event handlers

              handleObj = jQuery.extend({
                type: type,
                origType: origType,
                data: data,
                handler: handler,
                guid: handler.guid,
                selector: selector,
                needsContext: selector && jQuery.expr.match.needsContext.test(selector),
                namespace: namespaces.join(".")
              }, handleObjIn); // Init the event handler queue if we're the first

              if (!(handlers = events[type])) {
                handlers = events[type] = [];
                handlers.delegateCount = 0; // Only use addEventListener if the special events handler returns false

                if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {
                  if (elem.addEventListener) {
                    elem.addEventListener(type, eventHandle);
                  }
                }
              }

              if (special.add) {
                special.add.call(elem, handleObj);

                if (!handleObj.handler.guid) {
                  handleObj.handler.guid = handler.guid;
                }
              } // Add to the element's handler list, delegates in front


              if (selector) {
                handlers.splice(handlers.delegateCount++, 0, handleObj);
              } else {
                handlers.push(handleObj);
              } // Keep track of which events have ever been used, for event optimization


              jQuery.event.global[type] = true;
            }
          },
          // Detach an event or set of events from an element
          remove: function remove(elem, types, handler, selector, mappedTypes) {
            var j,
                origCount,
                tmp,
                events,
                t,
                handleObj,
                special,
                handlers,
                type,
                namespaces,
                origType,
                elemData = dataPriv.hasData(elem) && dataPriv.get(elem);

            if (!elemData || !(events = elemData.events)) {
              return;
            } // Once for each type.namespace in types; type may be omitted


            types = (types || "").match(rnothtmlwhite) || [""];
            t = types.length;

            while (t--) {
              tmp = rtypenamespace.exec(types[t]) || [];
              type = origType = tmp[1];
              namespaces = (tmp[2] || "").split(".").sort(); // Unbind all events (on this namespace, if provided) for the element

              if (!type) {
                for (type in events) {
                  jQuery.event.remove(elem, type + types[t], handler, selector, true);
                }

                continue;
              }

              special = jQuery.event.special[type] || {};
              type = (selector ? special.delegateType : special.bindType) || type;
              handlers = events[type] || [];
              tmp = tmp[2] && new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)"); // Remove matching events

              origCount = j = handlers.length;

              while (j--) {
                handleObj = handlers[j];

                if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === "**" && handleObj.selector)) {
                  handlers.splice(j, 1);

                  if (handleObj.selector) {
                    handlers.delegateCount--;
                  }

                  if (special.remove) {
                    special.remove.call(elem, handleObj);
                  }
                }
              } // Remove generic event handler if we removed something and no more handlers exist
              // (avoids potential for endless recursion during removal of special event handlers)


              if (origCount && !handlers.length) {
                if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {
                  jQuery.removeEvent(elem, type, elemData.handle);
                }

                delete events[type];
              }
            } // Remove data and the expando if it's no longer used


            if (jQuery.isEmptyObject(events)) {
              dataPriv.remove(elem, "handle events");
            }
          },
          dispatch: function dispatch(nativeEvent) {
            var i,
                j,
                ret,
                matched,
                handleObj,
                handlerQueue,
                args = new Array(arguments.length),
                // Make a writable jQuery.Event from the native event object
            event = jQuery.event.fix(nativeEvent),
                handlers = (dataPriv.get(this, "events") || Object.create(null))[event.type] || [],
                special = jQuery.event.special[event.type] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event

            args[0] = event;

            for (i = 1; i < arguments.length; i++) {
              args[i] = arguments[i];
            }

            event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired

            if (special.preDispatch && special.preDispatch.call(this, event) === false) {
              return;
            } // Determine handlers


            handlerQueue = jQuery.event.handlers.call(this, event, handlers); // Run delegates first; they may want to stop propagation beneath us

            i = 0;

            while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {
              event.currentTarget = matched.elem;
              j = 0;

              while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) {
                // If the event is namespaced, then each handler is only invoked if it is
                // specially universal or its namespaces are a superset of the event's.
                if (!event.rnamespace || handleObj.namespace === false || event.rnamespace.test(handleObj.namespace)) {
                  event.handleObj = handleObj;
                  event.data = handleObj.data;
                  ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args);

                  if (ret !== undefined) {
                    if ((event.result = ret) === false) {
                      event.preventDefault();
                      event.stopPropagation();
                    }
                  }
                }
              }
            } // Call the postDispatch hook for the mapped type


            if (special.postDispatch) {
              special.postDispatch.call(this, event);
            }

            return event.result;
          },
          handlers: function handlers(event, _handlers) {
            var i,
                handleObj,
                sel,
                matchedHandlers,
                matchedSelectors,
                handlerQueue = [],
                delegateCount = _handlers.delegateCount,
                cur = event.target; // Find delegate handlers

            if (delegateCount && // Support: IE <=9
            // Black-hole SVG <use> instance trees (trac-13180)
            cur.nodeType && // Support: Firefox <=42
            // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
            // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
            // Support: IE 11 only
            // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
            !(event.type === "click" && event.button >= 1)) {
              for (; cur !== this; cur = cur.parentNode || this) {
                // Don't check non-elements (#13208)
                // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
                if (cur.nodeType === 1 && !(event.type === "click" && cur.disabled === true)) {
                  matchedHandlers = [];
                  matchedSelectors = {};

                  for (i = 0; i < delegateCount; i++) {
                    handleObj = _handlers[i]; // Don't conflict with Object.prototype properties (#13203)

                    sel = handleObj.selector + " ";

                    if (matchedSelectors[sel] === undefined) {
                      matchedSelectors[sel] = handleObj.needsContext ? jQuery(sel, this).index(cur) > -1 : jQuery.find(sel, this, null, [cur]).length;
                    }

                    if (matchedSelectors[sel]) {
                      matchedHandlers.push(handleObj);
                    }
                  }

                  if (matchedHandlers.length) {
                    handlerQueue.push({
                      elem: cur,
                      handlers: matchedHandlers
                    });
                  }
                }
              }
            } // Add the remaining (directly-bound) handlers


            cur = this;

            if (delegateCount < _handlers.length) {
              handlerQueue.push({
                elem: cur,
                handlers: _handlers.slice(delegateCount)
              });
            }

            return handlerQueue;
          },
          addProp: function addProp(name, hook) {
            Object.defineProperty(jQuery.Event.prototype, name, {
              enumerable: true,
              configurable: true,
              get: isFunction(hook) ? function () {
                if (this.originalEvent) {
                  return hook(this.originalEvent);
                }
              } : function () {
                if (this.originalEvent) {
                  return this.originalEvent[name];
                }
              },
              set: function set(value) {
                Object.defineProperty(this, name, {
                  enumerable: true,
                  configurable: true,
                  writable: true,
                  value: value
                });
              }
            });
          },
          fix: function fix(originalEvent) {
            return originalEvent[jQuery.expando] ? originalEvent : new jQuery.Event(originalEvent);
          },
          special: {
            load: {
              // Prevent triggered image.load events from bubbling to window.load
              noBubble: true
            },
            click: {
              // Utilize native event to ensure correct state for checkable inputs
              setup: function setup(data) {
                // For mutual compressibility with _default, replace `this` access with a local var.
                // `|| data` is dead code meant only to preserve the variable through minification.
                var el = this || data; // Claim the first handler

                if (rcheckableType.test(el.type) && el.click && nodeName(el, "input")) {
                  // dataPriv.set( el, "click", ... )
                  leverageNative(el, "click", returnTrue);
                } // Return false to allow normal processing in the caller


                return false;
              },
              trigger: function trigger(data) {
                // For mutual compressibility with _default, replace `this` access with a local var.
                // `|| data` is dead code meant only to preserve the variable through minification.
                var el = this || data; // Force setup before triggering a click

                if (rcheckableType.test(el.type) && el.click && nodeName(el, "input")) {
                  leverageNative(el, "click");
                } // Return non-false to allow normal event-path propagation


                return true;
              },
              // For cross-browser consistency, suppress native .click() on links
              // Also prevent it if we're currently inside a leveraged native-event stack
              _default: function _default(event) {
                var target = event.target;
                return rcheckableType.test(target.type) && target.click && nodeName(target, "input") && dataPriv.get(target, "click") || nodeName(target, "a");
              }
            },
            beforeunload: {
              postDispatch: function postDispatch(event) {
                // Support: Firefox 20+
                // Firefox doesn't alert if the returnValue field is not set.
                if (event.result !== undefined && event.originalEvent) {
                  event.originalEvent.returnValue = event.result;
                }
              }
            }
          }
        }; // Ensure the presence of an event listener that handles manually-triggered
        // synthetic events by interrupting progress until reinvoked in response to
        // *native* events that it fires directly, ensuring that state changes have
        // already occurred before other listeners are invoked.

        function leverageNative(el, type, expectSync) {
          // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
          if (!expectSync) {
            if (dataPriv.get(el, type) === undefined) {
              jQuery.event.add(el, type, returnTrue);
            }

            return;
          } // Register the controller as a special universal handler for all event namespaces


          dataPriv.set(el, type, false);
          jQuery.event.add(el, type, {
            namespace: false,
            handler: function handler(event) {
              var notAsync,
                  result,
                  saved = dataPriv.get(this, type);

              if (event.isTrigger & 1 && this[type]) {
                // Interrupt processing of the outer synthetic .trigger()ed event
                // Saved data should be false in such cases, but might be a leftover capture object
                // from an async native handler (gh-4350)
                if (!saved.length) {
                  // Store arguments for use when handling the inner native event
                  // There will always be at least one argument (an event object), so this array
                  // will not be confused with a leftover capture object.
                  saved = _slice.call(arguments);
                  dataPriv.set(this, type, saved); // Trigger the native event and capture its result
                  // Support: IE <=9 - 11+
                  // focus() and blur() are asynchronous

                  notAsync = expectSync(this, type);
                  this[type]();
                  result = dataPriv.get(this, type);

                  if (saved !== result || notAsync) {
                    dataPriv.set(this, type, false);
                  } else {
                    result = {};
                  }

                  if (saved !== result) {
                    // Cancel the outer synthetic event
                    event.stopImmediatePropagation();
                    event.preventDefault();
                    return result.value;
                  } // If this is an inner synthetic event for an event with a bubbling surrogate
                  // (focus or blur), assume that the surrogate already propagated from triggering the
                  // native event and prevent that from happening again here.
                  // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
                  // bubbling surrogate propagates *after* the non-bubbling base), but that seems
                  // less bad than duplication.

                } else if ((jQuery.event.special[type] || {}).delegateType) {
                  event.stopPropagation();
                } // If this is a native event triggered above, everything is now in order
                // Fire an inner synthetic event with the original arguments

              } else if (saved.length) {
                // ...and capture the result
                dataPriv.set(this, type, {
                  value: jQuery.event.trigger( // Support: IE <=9 - 11+
                  // Extend with the prototype to reset the above stopImmediatePropagation()
                  jQuery.extend(saved[0], jQuery.Event.prototype), saved.slice(1), this)
                }); // Abort handling of the native event

                event.stopImmediatePropagation();
              }
            }
          });
        }

        jQuery.removeEvent = function (elem, type, handle) {
          // This "if" is needed for plain objects
          if (elem.removeEventListener) {
            elem.removeEventListener(type, handle);
          }
        };

        jQuery.Event = function (src, props) {
          // Allow instantiation without the 'new' keyword
          if (!(this instanceof jQuery.Event)) {
            return new jQuery.Event(src, props);
          } // Event object


          if (src && src.type) {
            this.originalEvent = src;
            this.type = src.type; // Events bubbling up the document may have been marked as prevented
            // by a handler lower down the tree; reflect the correct value.

            this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && // Support: Android <=2.3 only
            src.returnValue === false ? returnTrue : returnFalse; // Create target properties
            // Support: Safari <=6 - 7 only
            // Target should not be a text node (#504, #13143)

            this.target = src.target && src.target.nodeType === 3 ? src.target.parentNode : src.target;
            this.currentTarget = src.currentTarget;
            this.relatedTarget = src.relatedTarget; // Event type
          } else {
            this.type = src;
          } // Put explicitly provided properties onto the event object


          if (props) {
            jQuery.extend(this, props);
          } // Create a timestamp if incoming event doesn't have one


          this.timeStamp = src && src.timeStamp || Date.now(); // Mark it as fixed

          this[jQuery.expando] = true;
        }; // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
        // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html


        jQuery.Event.prototype = {
          constructor: jQuery.Event,
          isDefaultPrevented: returnFalse,
          isPropagationStopped: returnFalse,
          isImmediatePropagationStopped: returnFalse,
          isSimulated: false,
          preventDefault: function preventDefault() {
            var e = this.originalEvent;
            this.isDefaultPrevented = returnTrue;

            if (e && !this.isSimulated) {
              e.preventDefault();
            }
          },
          stopPropagation: function stopPropagation() {
            var e = this.originalEvent;
            this.isPropagationStopped = returnTrue;

            if (e && !this.isSimulated) {
              e.stopPropagation();
            }
          },
          stopImmediatePropagation: function stopImmediatePropagation() {
            var e = this.originalEvent;
            this.isImmediatePropagationStopped = returnTrue;

            if (e && !this.isSimulated) {
              e.stopImmediatePropagation();
            }

            this.stopPropagation();
          }
        }; // Includes all common event props including KeyEvent and MouseEvent specific props

        jQuery.each({
          altKey: true,
          bubbles: true,
          cancelable: true,
          changedTouches: true,
          ctrlKey: true,
          detail: true,
          eventPhase: true,
          metaKey: true,
          pageX: true,
          pageY: true,
          shiftKey: true,
          view: true,
          "char": true,
          code: true,
          charCode: true,
          key: true,
          keyCode: true,
          button: true,
          buttons: true,
          clientX: true,
          clientY: true,
          offsetX: true,
          offsetY: true,
          pointerId: true,
          pointerType: true,
          screenX: true,
          screenY: true,
          targetTouches: true,
          toElement: true,
          touches: true,
          which: function which(event) {
            var button = event.button; // Add which for key events

            if (event.which == null && rkeyEvent.test(event.type)) {
              return event.charCode != null ? event.charCode : event.keyCode;
            } // Add which for click: 1 === left; 2 === middle; 3 === right


            if (!event.which && button !== undefined && rmouseEvent.test(event.type)) {
              if (button & 1) {
                return 1;
              }

              if (button & 2) {
                return 3;
              }

              if (button & 4) {
                return 2;
              }

              return 0;
            }

            return event.which;
          }
        }, jQuery.event.addProp);
        jQuery.each({
          focus: "focusin",
          blur: "focusout"
        }, function (type, delegateType) {
          jQuery.event.special[type] = {
            // Utilize native event if possible so blur/focus sequence is correct
            setup: function setup() {
              // Claim the first handler
              // dataPriv.set( this, "focus", ... )
              // dataPriv.set( this, "blur", ... )
              leverageNative(this, type, expectSync); // Return false to allow normal processing in the caller

              return false;
            },
            trigger: function trigger() {
              // Force setup before trigger
              leverageNative(this, type); // Return non-false to allow normal event-path propagation

              return true;
            },
            delegateType: delegateType
          };
        }); // Create mouseenter/leave events using mouseover/out and event-time checks
        // so that event delegation works in jQuery.
        // Do the same for pointerenter/pointerleave and pointerover/pointerout
        //
        // Support: Safari 7 only
        // Safari sends mouseenter too often; see:
        // https://bugs.chromium.org/p/chromium/issues/detail?id=470258
        // for the description of the bug (it existed in older Chrome versions as well).

        jQuery.each({
          mouseenter: "mouseover",
          mouseleave: "mouseout",
          pointerenter: "pointerover",
          pointerleave: "pointerout"
        }, function (orig, fix) {
          jQuery.event.special[orig] = {
            delegateType: fix,
            bindType: fix,
            handle: function handle(event) {
              var ret,
                  target = this,
                  related = event.relatedTarget,
                  handleObj = event.handleObj; // For mouseenter/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 && !jQuery.contains(target, related)) {
                event.type = handleObj.origType;
                ret = handleObj.handler.apply(this, arguments);
                event.type = fix;
              }

              return ret;
            }
          };
        });
        jQuery.fn.extend({
          on: function on(types, selector, data, fn) {
            return _on(this, types, selector, data, fn);
          },
          one: function one(types, selector, data, fn) {
            return _on(this, types, selector, data, fn, 1);
          },
          off: function off(types, selector, fn) {
            var handleObj, type;

            if (types && types.preventDefault && types.handleObj) {
              // ( event )  dispatched jQuery.Event
              handleObj = types.handleObj;
              jQuery(types.delegateTarget).off(handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler);
              return this;
            }

            if (typeof types === "object") {
              // ( types-object [, selector] )
              for (type in types) {
                this.off(type, selector, types[type]);
              }

              return this;
            }

            if (selector === false || typeof selector === "function") {
              // ( types [, fn] )
              fn = selector;
              selector = undefined;
            }

            if (fn === false) {
              fn = returnFalse;
            }

            return this.each(function () {
              jQuery.event.remove(this, types, fn, selector);
            });
          }
        });
        var // Support: IE <=10 - 11, Edge 12 - 13 only
        // In IE/Edge using regex groups here causes severe slowdowns.
        // See https://connect.microsoft.com/IE/feedback/details/1736512/
        rnoInnerhtml = /<script|<style|<link/i,
            // checked="checked" or checked
        rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
            rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; // Prefer a tbody over its parent table for containing new rows

        function manipulationTarget(elem, content) {
          if (nodeName(elem, "table") && nodeName(content.nodeType !== 11 ? content : content.firstChild, "tr")) {
            return jQuery(elem).children("tbody")[0] || elem;
          }

          return elem;
        } // Replace/restore the type attribute of script elements for safe DOM manipulation


        function disableScript(elem) {
          elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type;
          return elem;
        }

        function restoreScript(elem) {
          if ((elem.type || "").slice(0, 5) === "true/") {
            elem.type = elem.type.slice(5);
          } else {
            elem.removeAttribute("type");
          }

          return elem;
        }

        function cloneCopyEvent(src, dest) {
          var i, l, type, pdataOld, udataOld, udataCur, events;

          if (dest.nodeType !== 1) {
            return;
          } // 1. Copy private data: events, handlers, etc.


          if (dataPriv.hasData(src)) {
            pdataOld = dataPriv.get(src);
            events = pdataOld.events;

            if (events) {
              dataPriv.remove(dest, "handle events");

              for (type in events) {
                for (i = 0, l = events[type].length; i < l; i++) {
                  jQuery.event.add(dest, type, events[type][i]);
                }
              }
            }
          } // 2. Copy user data


          if (dataUser.hasData(src)) {
            udataOld = dataUser.access(src);
            udataCur = jQuery.extend({}, udataOld);
            dataUser.set(dest, udataCur);
          }
        } // Fix IE bugs, see support tests


        function fixInput(src, dest) {
          var nodeName = dest.nodeName.toLowerCase(); // Fails to persist the checked state of a cloned checkbox or radio button.

          if (nodeName === "input" && rcheckableType.test(src.type)) {
            dest.checked = src.checked; // Fails to return the selected option to the default selected state when cloning options
          } else if (nodeName === "input" || nodeName === "textarea") {
            dest.defaultValue = src.defaultValue;
          }
        }

        function domManip(collection, args, callback, ignored) {
          // Flatten any nested arrays
          args = flat(args);
          var fragment,
              first,
              scripts,
              hasScripts,
              node,
              doc,
              i = 0,
              l = collection.length,
              iNoClone = l - 1,
              value = args[0],
              valueIsFunction = isFunction(value); // We can't cloneNode fragments that contain checked, in WebKit

          if (valueIsFunction || l > 1 && typeof value === "string" && !support.checkClone && rchecked.test(value)) {
            return collection.each(function (index) {
              var self = collection.eq(index);

              if (valueIsFunction) {
                args[0] = value.call(this, index, self.html());
              }

              domManip(self, args, callback, ignored);
            });
          }

          if (l) {
            fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);
            first = fragment.firstChild;

            if (fragment.childNodes.length === 1) {
              fragment = first;
            } // Require either new content or an interest in ignored elements to invoke the callback


            if (first || ignored) {
              scripts = jQuery.map(getAll(fragment, "script"), disableScript);
              hasScripts = scripts.length; // Use the original fragment for the last item
              // instead of the first because it can end up
              // being emptied incorrectly in certain situations (#8070).

              for (; i < l; i++) {
                node = fragment;

                if (i !== iNoClone) {
                  node = jQuery.clone(node, true, true); // Keep references to cloned scripts for later restoration

                  if (hasScripts) {
                    // Support: Android <=4.0 only, PhantomJS 1 only
                    // push.apply(_, arraylike) throws on ancient WebKit
                    jQuery.merge(scripts, getAll(node, "script"));
                  }
                }

                callback.call(collection[i], node, i);
              }

              if (hasScripts) {
                doc = scripts[scripts.length - 1].ownerDocument; // Reenable scripts

                jQuery.map(scripts, restoreScript); // Evaluate executable scripts on first document insertion

                for (i = 0; i < hasScripts; i++) {
                  node = scripts[i];

                  if (rscriptType.test(node.type || "") && !dataPriv.access(node, "globalEval") && jQuery.contains(doc, node)) {
                    if (node.src && (node.type || "").toLowerCase() !== "module") {
                      // Optional AJAX dependency, but won't run scripts if not present
                      if (jQuery._evalUrl && !node.noModule) {
                        jQuery._evalUrl(node.src, {
                          nonce: node.nonce || node.getAttribute("nonce")
                        }, doc);
                      }
                    } else {
                      DOMEval(node.textContent.replace(rcleanScript, ""), node, doc);
                    }
                  }
                }
              }
            }
          }

          return collection;
        }

        function _remove(elem, selector, keepData) {
          var node,
              nodes = selector ? jQuery.filter(selector, elem) : elem,
              i = 0;

          for (; (node = nodes[i]) != null; i++) {
            if (!keepData && node.nodeType === 1) {
              jQuery.cleanData(getAll(node));
            }

            if (node.parentNode) {
              if (keepData && isAttached(node)) {
                setGlobalEval(getAll(node, "script"));
              }

              node.parentNode.removeChild(node);
            }
          }

          return elem;
        }

        jQuery.extend({
          htmlPrefilter: function htmlPrefilter(html) {
            return html;
          },
          clone: function clone(elem, dataAndEvents, deepDataAndEvents) {
            var i,
                l,
                srcElements,
                destElements,
                clone = elem.cloneNode(true),
                inPage = isAttached(elem); // Fix IE cloning issues

            if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) {
              // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
              destElements = getAll(clone);
              srcElements = getAll(elem);

              for (i = 0, l = srcElements.length; i < l; i++) {
                fixInput(srcElements[i], destElements[i]);
              }
            } // Copy the events from the original to the clone


            if (dataAndEvents) {
              if (deepDataAndEvents) {
                srcElements = srcElements || getAll(elem);
                destElements = destElements || getAll(clone);

                for (i = 0, l = srcElements.length; i < l; i++) {
                  cloneCopyEvent(srcElements[i], destElements[i]);
                }
              } else {
                cloneCopyEvent(elem, clone);
              }
            } // Preserve script evaluation history


            destElements = getAll(clone, "script");

            if (destElements.length > 0) {
              setGlobalEval(destElements, !inPage && getAll(elem, "script"));
            } // Return the cloned set


            return clone;
          },
          cleanData: function cleanData(elems) {
            var data,
                elem,
                type,
                special = jQuery.event.special,
                i = 0;

            for (; (elem = elems[i]) !== undefined; i++) {
              if (acceptData(elem)) {
                if (data = elem[dataPriv.expando]) {
                  if (data.events) {
                    for (type in data.events) {
                      if (special[type]) {
                        jQuery.event.remove(elem, type); // This is a shortcut to avoid jQuery.event.remove's overhead
                      } else {
                        jQuery.removeEvent(elem, type, data.handle);
                      }
                    }
                  } // Support: Chrome <=35 - 45+
                  // Assign undefined instead of using delete, see Data#remove


                  elem[dataPriv.expando] = undefined;
                }

                if (elem[dataUser.expando]) {
                  // Support: Chrome <=35 - 45+
                  // Assign undefined instead of using delete, see Data#remove
                  elem[dataUser.expando] = undefined;
                }
              }
            }
          }
        });
        jQuery.fn.extend({
          detach: function detach(selector) {
            return _remove(this, selector, true);
          },
          remove: function remove(selector) {
            return _remove(this, selector);
          },
          text: function text(value) {
            return access(this, function (value) {
              return value === undefined ? jQuery.text(this) : this.empty().each(function () {
                if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
                  this.textContent = value;
                }
              });
            }, null, value, arguments.length);
          },
          append: function append() {
            return domManip(this, arguments, function (elem) {
              if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
                var target = manipulationTarget(this, elem);
                target.appendChild(elem);
              }
            });
          },
          prepend: function prepend() {
            return domManip(this, arguments, function (elem) {
              if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
                var target = manipulationTarget(this, elem);
                target.insertBefore(elem, target.firstChild);
              }
            });
          },
          before: function before() {
            return domManip(this, arguments, function (elem) {
              if (this.parentNode) {
                this.parentNode.insertBefore(elem, this);
              }
            });
          },
          after: function after() {
            return domManip(this, arguments, function (elem) {
              if (this.parentNode) {
                this.parentNode.insertBefore(elem, this.nextSibling);
              }
            });
          },
          empty: function empty() {
            var elem,
                i = 0;

            for (; (elem = this[i]) != null; i++) {
              if (elem.nodeType === 1) {
                // Prevent memory leaks
                jQuery.cleanData(getAll(elem, false)); // Remove any remaining nodes

                elem.textContent = "";
              }
            }

            return this;
          },
          clone: function clone(dataAndEvents, deepDataAndEvents) {
            dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
            deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
            return this.map(function () {
              return jQuery.clone(this, dataAndEvents, deepDataAndEvents);
            });
          },
          html: function html(value) {
            return access(this, function (value) {
              var elem = this[0] || {},
                  i = 0,
                  l = this.length;

              if (value === undefined && elem.nodeType === 1) {
                return elem.innerHTML;
              } // See if we can take a shortcut and just use innerHTML


              if (typeof value === "string" && !rnoInnerhtml.test(value) && !wrapMap[(rtagName.exec(value) || ["", ""])[1].toLowerCase()]) {
                value = jQuery.htmlPrefilter(value);

                try {
                  for (; i < l; i++) {
                    elem = this[i] || {}; // Remove element nodes and prevent memory leaks

                    if (elem.nodeType === 1) {
                      jQuery.cleanData(getAll(elem, false));
                      elem.innerHTML = value;
                    }
                  }

                  elem = 0; // If using innerHTML throws an exception, use the fallback method
                } catch (e) {}
              }

              if (elem) {
                this.empty().append(value);
              }
            }, null, value, arguments.length);
          },
          replaceWith: function replaceWith() {
            var ignored = []; // Make the changes, replacing each non-ignored context element with the new content

            return domManip(this, arguments, function (elem) {
              var parent = this.parentNode;

              if (jQuery.inArray(this, ignored) < 0) {
                jQuery.cleanData(getAll(this));

                if (parent) {
                  parent.replaceChild(elem, this);
                }
              } // Force callback invocation

            }, ignored);
          }
        });
        jQuery.each({
          appendTo: "append",
          prependTo: "prepend",
          insertBefore: "before",
          insertAfter: "after",
          replaceAll: "replaceWith"
        }, function (name, original) {
          jQuery.fn[name] = function (selector) {
            var elems,
                ret = [],
                insert = jQuery(selector),
                last = insert.length - 1,
                i = 0;

            for (; i <= last; i++) {
              elems = i === last ? this : this.clone(true);
              jQuery(insert[i])[original](elems); // Support: Android <=4.0 only, PhantomJS 1 only
              // .get() because push.apply(_, arraylike) throws on ancient WebKit

              push.apply(ret, elems.get());
            }

            return this.pushStack(ret);
          };
        });
        var rnumnonpx = new RegExp("^(" + pnum + ")(?!px)[a-z%]+$", "i");

        var getStyles = function getStyles(elem) {
          // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
          // IE throws on elements created in popups
          // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
          var view = elem.ownerDocument.defaultView;

          if (!view || !view.opener) {
            view = window;
          }

          return view.getComputedStyle(elem);
        };

        var swap = function swap(elem, options, callback) {
          var ret,
              name,
              old = {}; // Remember the old values, and insert the new ones

          for (name in options) {
            old[name] = elem.style[name];
            elem.style[name] = options[name];
          }

          ret = callback.call(elem); // Revert the old values

          for (name in options) {
            elem.style[name] = old[name];
          }

          return ret;
        };

        var rboxStyle = new RegExp(cssExpand.join("|"), "i");

        (function () {
          // Executing both pixelPosition & boxSizingReliable tests require only one layout
          // so they're executed at the same time to save the second computation.
          function computeStyleTests() {
            // This is a singleton, we need to execute it only once
            if (!div) {
              return;
            }

            container.style.cssText = "position:absolute;left:-11111px;width:60px;" + "margin-top:1px;padding:0;border:0";
            div.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + "margin:auto;border:1px;padding:1px;" + "width:60%;top:1%";
            documentElement.appendChild(container).appendChild(div);
            var divStyle = window.getComputedStyle(div);
            pixelPositionVal = divStyle.top !== "1%"; // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44

            reliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12; // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
            // Some styles come back with percentage values, even though they shouldn't

            div.style.right = "60%";
            pixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36; // Support: IE 9 - 11 only
            // Detect misreporting of content dimensions for box-sizing:border-box elements

            boxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36; // Support: IE 9 only
            // Detect overflow:scroll screwiness (gh-3699)
            // Support: Chrome <=64
            // Don't get tricked when zoom affects offsetWidth (gh-4029)

            div.style.position = "absolute";
            scrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;
            documentElement.removeChild(container); // Nullify the div so it wouldn't be stored in the memory and
            // it will also be a sign that checks already performed

            div = null;
          }

          function roundPixelMeasures(measure) {
            return Math.round(parseFloat(measure));
          }

          var pixelPositionVal,
              boxSizingReliableVal,
              scrollboxSizeVal,
              pixelBoxStylesVal,
              reliableTrDimensionsVal,
              reliableMarginLeftVal,
              container = document.createElement("div"),
              div = document.createElement("div"); // Finish early in limited (non-browser) environments

          if (!div.style) {
            return;
          } // Support: IE <=9 - 11 only
          // Style of cloned element affects source element cloned (#8908)


          div.style.backgroundClip = "content-box";
          div.cloneNode(true).style.backgroundClip = "";
          support.clearCloneStyle = div.style.backgroundClip === "content-box";
          jQuery.extend(support, {
            boxSizingReliable: function boxSizingReliable() {
              computeStyleTests();
              return boxSizingReliableVal;
            },
            pixelBoxStyles: function pixelBoxStyles() {
              computeStyleTests();
              return pixelBoxStylesVal;
            },
            pixelPosition: function pixelPosition() {
              computeStyleTests();
              return pixelPositionVal;
            },
            reliableMarginLeft: function reliableMarginLeft() {
              computeStyleTests();
              return reliableMarginLeftVal;
            },
            scrollboxSize: function scrollboxSize() {
              computeStyleTests();
              return scrollboxSizeVal;
            },
            // Support: IE 9 - 11+, Edge 15 - 18+
            // IE/Edge misreport `getComputedStyle` of table rows with width/height
            // set in CSS while `offset*` properties report correct values.
            // Behavior in IE 9 is more subtle than in newer versions & it passes
            // some versions of this test; make sure not to make it pass there!
            reliableTrDimensions: function reliableTrDimensions() {
              var table, tr, trChild, trStyle;

              if (reliableTrDimensionsVal == null) {
                table = document.createElement("table");
                tr = document.createElement("tr");
                trChild = document.createElement("div");
                table.style.cssText = "position:absolute;left:-11111px";
                tr.style.height = "1px";
                trChild.style.height = "9px";
                documentElement.appendChild(table).appendChild(tr).appendChild(trChild);
                trStyle = window.getComputedStyle(tr);
                reliableTrDimensionsVal = parseInt(trStyle.height) > 3;
                documentElement.removeChild(table);
              }

              return reliableTrDimensionsVal;
            }
          });
        })();

        function curCSS(elem, name, computed) {
          var width,
              minWidth,
              maxWidth,
              ret,
              // Support: Firefox 51+
          // Retrieving style before computed somehow
          // fixes an issue with getting wrong values
          // on detached elements
          style = elem.style;
          computed = computed || getStyles(elem); // getPropertyValue is needed for:
          //   .css('filter') (IE 9 only, #12537)
          //   .css('--customProperty) (#3144)

          if (computed) {
            ret = computed.getPropertyValue(name) || computed[name];

            if (ret === "" && !isAttached(elem)) {
              ret = jQuery.style(elem, name);
            } // A tribute to the "awesome hack by Dean Edwards"
            // Android Browser returns percentage for some values,
            // but width seems to be reliably pixels.
            // This is against the CSSOM draft spec:
            // https://drafts.csswg.org/cssom/#resolved-values


            if (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {
              // Remember the original values
              width = style.width;
              minWidth = style.minWidth;
              maxWidth = style.maxWidth; // Put in the new values to get a computed value out

              style.minWidth = style.maxWidth = style.width = ret;
              ret = computed.width; // Revert the changed values

              style.width = width;
              style.minWidth = minWidth;
              style.maxWidth = maxWidth;
            }
          }

          return ret !== undefined ? // Support: IE <=9 - 11 only
          // IE returns zIndex value as an integer.
          ret + "" : ret;
        }

        function addGetHookIf(conditionFn, hookFn) {
          // Define the hook, we'll check on the first run if it's really needed.
          return {
            get: function get() {
              if (conditionFn()) {
                // Hook not needed (or it's not possible to use it due
                // to missing dependency), remove it.
                delete this.get;
                return;
              } // Hook needed; redefine it so that the support test is not executed again.


              return (this.get = hookFn).apply(this, arguments);
            }
          };
        }

        var cssPrefixes = ["Webkit", "Moz", "ms"],
            emptyStyle = document.createElement("div").style,
            vendorProps = {}; // Return a vendor-prefixed property or undefined

        function vendorPropName(name) {
          // Check for vendor prefixed names
          var capName = name[0].toUpperCase() + name.slice(1),
              i = cssPrefixes.length;

          while (i--) {
            name = cssPrefixes[i] + capName;

            if (name in emptyStyle) {
              return name;
            }
          }
        } // Return a potentially-mapped jQuery.cssProps or vendor prefixed property


        function finalPropName(name) {
          var _final = jQuery.cssProps[name] || vendorProps[name];

          if (_final) {
            return _final;
          }

          if (name in emptyStyle) {
            return name;
          }

          return vendorProps[name] = vendorPropName(name) || name;
        }

        var // Swappable if display is none or starts with table
        // except "table", "table-cell", or "table-caption"
        // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
        rdisplayswap = /^(none|table(?!-c[ea]).+)/,
            rcustomProp = /^--/,
            cssShow = {
          position: "absolute",
          visibility: "hidden",
          display: "block"
        },
            cssNormalTransform = {
          letterSpacing: "0",
          fontWeight: "400"
        };

        function setPositiveNumber(_elem, value, subtract) {
          // Any relative (+/-) values have already been
          // normalized at this point
          var matches = rcssNum.exec(value);
          return matches ? // Guard against undefined "subtract", e.g., when used as in cssHooks
          Math.max(0, matches[2] - (subtract || 0)) + (matches[3] || "px") : value;
        }

        function boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {
          var i = dimension === "width" ? 1 : 0,
              extra = 0,
              delta = 0; // Adjustment may not be necessary

          if (box === (isBorderBox ? "border" : "content")) {
            return 0;
          }

          for (; i < 4; i += 2) {
            // Both box models exclude margin
            if (box === "margin") {
              delta += jQuery.css(elem, box + cssExpand[i], true, styles);
            } // If we get here with a content-box, we're seeking "padding" or "border" or "margin"


            if (!isBorderBox) {
              // Add padding
              delta += jQuery.css(elem, "padding" + cssExpand[i], true, styles); // For "border" or "margin", add border

              if (box !== "padding") {
                delta += jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles); // But still keep track of it otherwise
              } else {
                extra += jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
              } // If we get here with a border-box (content + padding + border), we're seeking "content" or
              // "padding" or "margin"

            } else {
              // For "content", subtract padding
              if (box === "content") {
                delta -= jQuery.css(elem, "padding" + cssExpand[i], true, styles);
              } // For "content" or "padding", subtract border


              if (box !== "margin") {
                delta -= jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
              }
            }
          } // Account for positive content-box scroll gutter when requested by providing computedVal


          if (!isBorderBox && computedVal >= 0) {
            // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
            // Assuming integer scroll gutter, subtract the rest and round down
            delta += Math.max(0, Math.ceil(elem["offset" + dimension[0].toUpperCase() + dimension.slice(1)] - computedVal - delta - extra - 0.5 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
            // Use an explicit zero to avoid NaN (gh-3964)
            )) || 0;
          }

          return delta;
        }

        function getWidthOrHeight(elem, dimension, extra) {
          // Start with computed style
          var styles = getStyles(elem),
              // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
          // Fake content-box until we know it's needed to know the true value.
          boxSizingNeeded = !support.boxSizingReliable() || extra,
              isBorderBox = boxSizingNeeded && jQuery.css(elem, "boxSizing", false, styles) === "border-box",
              valueIsBorderBox = isBorderBox,
              val = curCSS(elem, dimension, styles),
              offsetProp = "offset" + dimension[0].toUpperCase() + dimension.slice(1); // Support: Firefox <=54
          // Return a confounding non-pixel value or feign ignorance, as appropriate.

          if (rnumnonpx.test(val)) {
            if (!extra) {
              return val;
            }

            val = "auto";
          } // Support: IE 9 - 11 only
          // Use offsetWidth/offsetHeight for when box sizing is unreliable.
          // In those cases, the computed value can be trusted to be border-box.


          if ((!support.boxSizingReliable() && isBorderBox || // Support: IE 10 - 11+, Edge 15 - 18+
          // IE/Edge misreport `getComputedStyle` of table rows with width/height
          // set in CSS while `offset*` properties report correct values.
          // Interestingly, in some cases IE 9 doesn't suffer from this issue.
          !support.reliableTrDimensions() && nodeName(elem, "tr") || // Fall back to offsetWidth/offsetHeight when value is "auto"
          // This happens for inline elements with no explicit setting (gh-3571)
          val === "auto" || // Support: Android <=4.1 - 4.3 only
          // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
          !parseFloat(val) && jQuery.css(elem, "display", false, styles) === "inline") && // Make sure the element is visible & connected
          elem.getClientRects().length) {
            isBorderBox = jQuery.css(elem, "boxSizing", false, styles) === "border-box"; // Where available, offsetWidth/offsetHeight approximate border box dimensions.
            // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
            // retrieved value as a content box dimension.

            valueIsBorderBox = offsetProp in elem;

            if (valueIsBorderBox) {
              val = elem[offsetProp];
            }
          } // Normalize "" and auto


          val = parseFloat(val) || 0; // Adjust for the element's box model

          return val + boxModelAdjustment(elem, dimension, extra || (isBorderBox ? "border" : "content"), valueIsBorderBox, styles, // Provide the current computed size to request scroll gutter calculation (gh-3589)
          val) + "px";
        }

        jQuery.extend({
          // Add in style property hooks for overriding the default
          // behavior of getting and setting a style property
          cssHooks: {
            opacity: {
              get: function get(elem, computed) {
                if (computed) {
                  // We should always get a number back from opacity
                  var ret = curCSS(elem, "opacity");
                  return ret === "" ? "1" : ret;
                }
              }
            }
          },
          // Don't automatically add "px" to these possibly-unitless properties
          cssNumber: {
            "animationIterationCount": true,
            "columnCount": true,
            "fillOpacity": true,
            "flexGrow": true,
            "flexShrink": true,
            "fontWeight": true,
            "gridArea": true,
            "gridColumn": true,
            "gridColumnEnd": true,
            "gridColumnStart": true,
            "gridRow": true,
            "gridRowEnd": true,
            "gridRowStart": true,
            "lineHeight": true,
            "opacity": true,
            "order": true,
            "orphans": true,
            "widows": true,
            "zIndex": true,
            "zoom": true
          },
          // Add in properties whose names you wish to fix before
          // setting or getting the value
          cssProps: {},
          // Get and set the style property on a DOM Node
          style: function style(elem, name, value, extra) {
            // Don't set styles on text and comment nodes
            if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {
              return;
            } // Make sure that we're working with the right name


            var ret,
                type,
                hooks,
                origName = camelCase(name),
                isCustomProp = rcustomProp.test(name),
                style = elem.style; // Make sure that we're working with the right name. We don't
            // want to query the value if it is a CSS custom property
            // since they are user-defined.

            if (!isCustomProp) {
              name = finalPropName(origName);
            } // Gets hook for the prefixed version, then unprefixed version


            hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // Check if we're setting a value

            if (value !== undefined) {
              type = typeof value; // Convert "+=" or "-=" to relative numbers (#7345)

              if (type === "string" && (ret = rcssNum.exec(value)) && ret[1]) {
                value = adjustCSS(elem, name, ret); // Fixes bug #9237

                type = "number";
              } // Make sure that null and NaN values aren't set (#7116)


              if (value == null || value !== value) {
                return;
              } // If a number was passed in, add the unit (except for certain CSS properties)
              // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
              // "px" to a few hardcoded values.


              if (type === "number" && !isCustomProp) {
                value += ret && ret[3] || (jQuery.cssNumber[origName] ? "" : "px");
              } // background-* props affect original clone's values


              if (!support.clearCloneStyle && value === "" && name.indexOf("background") === 0) {
                style[name] = "inherit";
              } // If a hook was provided, use that value, otherwise just set the specified value


              if (!hooks || !("set" in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) {
                if (isCustomProp) {
                  style.setProperty(name, value);
                } else {
                  style[name] = value;
                }
              }
            } else {
              // If a hook was provided get the non-computed value from there
              if (hooks && "get" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) {
                return ret;
              } // Otherwise just get the value from the style object


              return style[name];
            }
          },
          css: function css(elem, name, extra, styles) {
            var val,
                num,
                hooks,
                origName = camelCase(name),
                isCustomProp = rcustomProp.test(name); // Make sure that we're working with the right name. We don't
            // want to modify the value if it is a CSS custom property
            // since they are user-defined.

            if (!isCustomProp) {
              name = finalPropName(origName);
            } // Try prefixed name followed by the unprefixed name


            hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // If a hook was provided get the computed value from there

            if (hooks && "get" in hooks) {
              val = hooks.get(elem, true, extra);
            } // Otherwise, if a way to get the computed value exists, use that


            if (val === undefined) {
              val = curCSS(elem, name, styles);
            } // Convert "normal" to computed value


            if (val === "normal" && name in cssNormalTransform) {
              val = cssNormalTransform[name];
            } // Make numeric if forced or a qualifier was provided and val looks numeric


            if (extra === "" || extra) {
              num = parseFloat(val);
              return extra === true || isFinite(num) ? num || 0 : val;
            }

            return val;
          }
        });
        jQuery.each(["height", "width"], function (_i, dimension) {
          jQuery.cssHooks[dimension] = {
            get: function get(elem, computed, extra) {
              if (computed) {
                // Certain elements can have dimension info if we invisibly show them
                // but it must have a current display style that would benefit
                return rdisplayswap.test(jQuery.css(elem, "display")) && ( // Support: Safari 8+
                // Table columns in Safari have non-zero offsetWidth & zero
                // getBoundingClientRect().width unless display is changed.
                // Support: IE <=11 only
                // Running getBoundingClientRect on a disconnected node
                // in IE throws an error.
                !elem.getClientRects().length || !elem.getBoundingClientRect().width) ? swap(elem, cssShow, function () {
                  return getWidthOrHeight(elem, dimension, extra);
                }) : getWidthOrHeight(elem, dimension, extra);
              }
            },
            set: function set(elem, value, extra) {
              var matches,
                  styles = getStyles(elem),
                  // Only read styles.position if the test has a chance to fail
              // to avoid forcing a reflow.
              scrollboxSizeBuggy = !support.scrollboxSize() && styles.position === "absolute",
                  // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
              boxSizingNeeded = scrollboxSizeBuggy || extra,
                  isBorderBox = boxSizingNeeded && jQuery.css(elem, "boxSizing", false, styles) === "border-box",
                  subtract = extra ? boxModelAdjustment(elem, dimension, extra, isBorderBox, styles) : 0; // Account for unreliable border-box dimensions by comparing offset* to computed and
              // faking a content-box to get border and padding (gh-3699)

              if (isBorderBox && scrollboxSizeBuggy) {
                subtract -= Math.ceil(elem["offset" + dimension[0].toUpperCase() + dimension.slice(1)] - parseFloat(styles[dimension]) - boxModelAdjustment(elem, dimension, "border", false, styles) - 0.5);
              } // Convert to pixels if value adjustment is needed


              if (subtract && (matches = rcssNum.exec(value)) && (matches[3] || "px") !== "px") {
                elem.style[dimension] = value;
                value = jQuery.css(elem, dimension);
              }

              return setPositiveNumber(elem, value, subtract);
            }
          };
        });
        jQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft, function (elem, computed) {
          if (computed) {
            return (parseFloat(curCSS(elem, "marginLeft")) || elem.getBoundingClientRect().left - swap(elem, {
              marginLeft: 0
            }, function () {
              return elem.getBoundingClientRect().left;
            })) + "px";
          }
        }); // These hooks are used by animate to expand properties

        jQuery.each({
          margin: "",
          padding: "",
          border: "Width"
        }, function (prefix, suffix) {
          jQuery.cssHooks[prefix + suffix] = {
            expand: function expand(value) {
              var i = 0,
                  expanded = {},
                  // Assumes a single number if not a string
              parts = typeof value === "string" ? value.split(" ") : [value];

              for (; i < 4; i++) {
                expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];
              }

              return expanded;
            }
          };

          if (prefix !== "margin") {
            jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;
          }
        });
        jQuery.fn.extend({
          css: function css(name, value) {
            return access(this, function (elem, name, value) {
              var styles,
                  len,
                  map = {},
                  i = 0;

              if (Array.isArray(name)) {
                styles = getStyles(elem);
                len = name.length;

                for (; i < len; i++) {
                  map[name[i]] = jQuery.css(elem, name[i], false, styles);
                }

                return map;
              }

              return value !== undefined ? jQuery.style(elem, name, value) : jQuery.css(elem, name);
            }, name, value, arguments.length > 1);
          }
        });

        function Tween(elem, options, prop, end, easing) {
          return new Tween.prototype.init(elem, options, prop, end, easing);
        }

        jQuery.Tween = Tween;
        Tween.prototype = {
          constructor: Tween,
          init: function init(elem, options, prop, end, easing, unit) {
            this.elem = elem;
            this.prop = prop;
            this.easing = easing || jQuery.easing._default;
            this.options = options;
            this.start = this.now = this.cur();
            this.end = end;
            this.unit = unit || (jQuery.cssNumber[prop] ? "" : "px");
          },
          cur: function cur() {
            var hooks = Tween.propHooks[this.prop];
            return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this);
          },
          run: function run(percent) {
            var eased,
                hooks = Tween.propHooks[this.prop];

            if (this.options.duration) {
              this.pos = eased = jQuery.easing[this.easing](percent, this.options.duration * percent, 0, 1, this.options.duration);
            } else {
              this.pos = eased = percent;
            }

            this.now = (this.end - this.start) * eased + this.start;

            if (this.options.step) {
              this.options.step.call(this.elem, this.now, this);
            }

            if (hooks && hooks.set) {
              hooks.set(this);
            } else {
              Tween.propHooks._default.set(this);
            }

            return this;
          }
        };
        Tween.prototype.init.prototype = Tween.prototype;
        Tween.propHooks = {
          _default: {
            get: function get(tween) {
              var result; // Use a property on the element directly when it is not a DOM element,
              // or when there is no matching style property that exists.

              if (tween.elem.nodeType !== 1 || tween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {
                return tween.elem[tween.prop];
              } // Passing an empty string as a 3rd parameter to .css will automatically
              // attempt a parseFloat and fallback to a string if the parse fails.
              // Simple values such as "10px" are parsed to Float;
              // complex values such as "rotate(1rad)" are returned as-is.


              result = jQuery.css(tween.elem, tween.prop, ""); // Empty strings, null, undefined and "auto" are converted to 0.

              return !result || result === "auto" ? 0 : result;
            },
            set: function set(tween) {
              // Use step hook for back compat.
              // Use cssHook if its there.
              // Use .style if available and use plain properties where available.
              if (jQuery.fx.step[tween.prop]) {
                jQuery.fx.step[tween.prop](tween);
              } else if (tween.elem.nodeType === 1 && (jQuery.cssHooks[tween.prop] || tween.elem.style[finalPropName(tween.prop)] != null)) {
                jQuery.style(tween.elem, tween.prop, tween.now + tween.unit);
              } else {
                tween.elem[tween.prop] = tween.now;
              }
            }
          }
        }; // Support: IE <=9 only
        // Panic based approach to setting things on disconnected nodes

        Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
          set: function set(tween) {
            if (tween.elem.nodeType && tween.elem.parentNode) {
              tween.elem[tween.prop] = tween.now;
            }
          }
        };
        jQuery.easing = {
          linear: function linear(p) {
            return p;
          },
          swing: function swing(p) {
            return 0.5 - Math.cos(p * Math.PI) / 2;
          },
          _default: "swing"
        };
        jQuery.fx = Tween.prototype.init; // Back compat <1.8 extension point

        jQuery.fx.step = {};
        var fxNow,
            inProgress,
            rfxtypes = /^(?:toggle|show|hide)$/,
            rrun = /queueHooks$/;

        function schedule() {
          if (inProgress) {
            if (document.hidden === false && window.requestAnimationFrame) {
              window.requestAnimationFrame(schedule);
            } else {
              window.setTimeout(schedule, jQuery.fx.interval);
            }

            jQuery.fx.tick();
          }
        } // Animations created synchronously will run synchronously


        function createFxNow() {
          window.setTimeout(function () {
            fxNow = undefined;
          });
          return fxNow = Date.now();
        } // Generate parameters to create a standard animation


        function genFx(type, includeWidth) {
          var which,
              i = 0,
              attrs = {
            height: type
          }; // If we include width, step value is 1 to do all cssExpand values,
          // otherwise step value is 2 to skip over Left and Right

          includeWidth = includeWidth ? 1 : 0;

          for (; i < 4; i += 2 - includeWidth) {
            which = cssExpand[i];
            attrs["margin" + which] = attrs["padding" + which] = type;
          }

          if (includeWidth) {
            attrs.opacity = attrs.width = type;
          }

          return attrs;
        }

        function createTween(value, prop, animation) {
          var tween,
              collection = (Animation.tweeners[prop] || []).concat(Animation.tweeners["*"]),
              index = 0,
              length = collection.length;

          for (; index < length; index++) {
            if (tween = collection[index].call(animation, prop, value)) {
              // We're done with this property
              return tween;
            }
          }
        }

        function defaultPrefilter(elem, props, opts) {
          var prop,
              value,
              toggle,
              hooks,
              oldfire,
              propTween,
              restoreDisplay,
              display,
              isBox = "width" in props || "height" in props,
              anim = this,
              orig = {},
              style = elem.style,
              hidden = elem.nodeType && isHiddenWithinTree(elem),
              dataShow = dataPriv.get(elem, "fxshow"); // Queue-skipping animations hijack the fx hooks

          if (!opts.queue) {
            hooks = jQuery._queueHooks(elem, "fx");

            if (hooks.unqueued == null) {
              hooks.unqueued = 0;
              oldfire = hooks.empty.fire;

              hooks.empty.fire = function () {
                if (!hooks.unqueued) {
                  oldfire();
                }
              };
            }

            hooks.unqueued++;
            anim.always(function () {
              // Ensure the complete handler is called before this completes
              anim.always(function () {
                hooks.unqueued--;

                if (!jQuery.queue(elem, "fx").length) {
                  hooks.empty.fire();
                }
              });
            });
          } // Detect show/hide animations


          for (prop in props) {
            value = props[prop];

            if (rfxtypes.test(value)) {
              delete props[prop];
              toggle = toggle || value === "toggle";

              if (value === (hidden ? "hide" : "show")) {
                // Pretend to be hidden if this is a "show" and
                // there is still data from a stopped show/hide
                if (value === "show" && dataShow && dataShow[prop] !== undefined) {
                  hidden = true; // Ignore all other no-op show/hide data
                } else {
                  continue;
                }
              }

              orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);
            }
          } // Bail out if this is a no-op like .hide().hide()


          propTween = !jQuery.isEmptyObject(props);

          if (!propTween && jQuery.isEmptyObject(orig)) {
            return;
          } // Restrict "overflow" and "display" styles during box animations


          if (isBox && elem.nodeType === 1) {
            // Support: IE <=9 - 11, Edge 12 - 15
            // Record all 3 overflow attributes because IE does not infer the shorthand
            // from identically-valued overflowX and overflowY and Edge just mirrors
            // the overflowX value there.
            opts.overflow = [style.overflow, style.overflowX, style.overflowY]; // Identify a display type, preferring old show/hide data over the CSS cascade

            restoreDisplay = dataShow && dataShow.display;

            if (restoreDisplay == null) {
              restoreDisplay = dataPriv.get(elem, "display");
            }

            display = jQuery.css(elem, "display");

            if (display === "none") {
              if (restoreDisplay) {
                display = restoreDisplay;
              } else {
                // Get nonempty value(s) by temporarily forcing visibility
                showHide([elem], true);
                restoreDisplay = elem.style.display || restoreDisplay;
                display = jQuery.css(elem, "display");
                showHide([elem]);
              }
            } // Animate inline elements as inline-block


            if (display === "inline" || display === "inline-block" && restoreDisplay != null) {
              if (jQuery.css(elem, "float") === "none") {
                // Restore the original display value at the end of pure show/hide animations
                if (!propTween) {
                  anim.done(function () {
                    style.display = restoreDisplay;
                  });

                  if (restoreDisplay == null) {
                    display = style.display;
                    restoreDisplay = display === "none" ? "" : display;
                  }
                }

                style.display = "inline-block";
              }
            }
          }

          if (opts.overflow) {
            style.overflow = "hidden";
            anim.always(function () {
              style.overflow = opts.overflow[0];
              style.overflowX = opts.overflow[1];
              style.overflowY = opts.overflow[2];
            });
          } // Implement show/hide animations


          propTween = false;

          for (prop in orig) {
            // General show/hide setup for this element animation
            if (!propTween) {
              if (dataShow) {
                if ("hidden" in dataShow) {
                  hidden = dataShow.hidden;
                }
              } else {
                dataShow = dataPriv.access(elem, "fxshow", {
                  display: restoreDisplay
                });
              } // Store hidden/visible for toggle so `.stop().toggle()` "reverses"


              if (toggle) {
                dataShow.hidden = !hidden;
              } // Show elements before animating them


              if (hidden) {
                showHide([elem], true);
              }
              /* eslint-disable no-loop-func */


              anim.done(function () {
                /* eslint-enable no-loop-func */
                // The final step of a "hide" animation is actually hiding the element
                if (!hidden) {
                  showHide([elem]);
                }

                dataPriv.remove(elem, "fxshow");

                for (prop in orig) {
                  jQuery.style(elem, prop, orig[prop]);
                }
              });
            } // Per-property setup


            propTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);

            if (!(prop in dataShow)) {
              dataShow[prop] = propTween.start;

              if (hidden) {
                propTween.end = propTween.start;
                propTween.start = 0;
              }
            }
          }
        }

        function propFilter(props, specialEasing) {
          var index, name, easing, value, hooks; // camelCase, specialEasing and expand cssHook pass

          for (index in props) {
            name = camelCase(index);
            easing = specialEasing[name];
            value = props[index];

            if (Array.isArray(value)) {
              easing = value[1];
              value = props[index] = value[0];
            }

            if (index !== name) {
              props[name] = value;
              delete props[index];
            }

            hooks = jQuery.cssHooks[name];

            if (hooks && "expand" in hooks) {
              value = hooks.expand(value);
              delete props[name]; // Not quite $.extend, this won't overwrite existing keys.
              // Reusing 'index' because we have the correct "name"

              for (index in value) {
                if (!(index in props)) {
                  props[index] = value[index];
                  specialEasing[index] = easing;
                }
              }
            } else {
              specialEasing[name] = easing;
            }
          }
        }

        function Animation(elem, properties, options) {
          var result,
              stopped,
              index = 0,
              length = Animation.prefilters.length,
              deferred = jQuery.Deferred().always(function () {
            // Don't match elem in the :animated selector
            delete tick.elem;
          }),
              tick = function tick() {
            if (stopped) {
              return false;
            }

            var currentTime = fxNow || createFxNow(),
                remaining = Math.max(0, animation.startTime + animation.duration - currentTime),
                // Support: Android 2.3 only
            // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
            temp = remaining / animation.duration || 0,
                percent = 1 - temp,
                index = 0,
                length = animation.tweens.length;

            for (; index < length; index++) {
              animation.tweens[index].run(percent);
            }

            deferred.notifyWith(elem, [animation, percent, remaining]); // If there's more to do, yield

            if (percent < 1 && length) {
              return remaining;
            } // If this was an empty animation, synthesize a final progress notification


            if (!length) {
              deferred.notifyWith(elem, [animation, 1, 0]);
            } // Resolve the animation and report its conclusion


            deferred.resolveWith(elem, [animation]);
            return false;
          },
              animation = deferred.promise({
            elem: elem,
            props: jQuery.extend({}, properties),
            opts: jQuery.extend(true, {
              specialEasing: {},
              easing: jQuery.easing._default
            }, options),
            originalProperties: properties,
            originalOptions: options,
            startTime: fxNow || createFxNow(),
            duration: options.duration,
            tweens: [],
            createTween: function createTween(prop, end) {
              var tween = jQuery.Tween(elem, animation.opts, prop, end, animation.opts.specialEasing[prop] || animation.opts.easing);
              animation.tweens.push(tween);
              return tween;
            },
            stop: function stop(gotoEnd) {
              var index = 0,
                  // If we are going to the end, we want to run all the tweens
              // otherwise we skip this part
              length = gotoEnd ? animation.tweens.length : 0;

              if (stopped) {
                return this;
              }

              stopped = true;

              for (; index < length; index++) {
                animation.tweens[index].run(1);
              } // Resolve when we played the last frame; otherwise, reject


              if (gotoEnd) {
                deferred.notifyWith(elem, [animation, 1, 0]);
                deferred.resolveWith(elem, [animation, gotoEnd]);
              } else {
                deferred.rejectWith(elem, [animation, gotoEnd]);
              }

              return this;
            }
          }),
              props = animation.props;

          propFilter(props, animation.opts.specialEasing);

          for (; index < length; index++) {
            result = Animation.prefilters[index].call(animation, elem, props, animation.opts);

            if (result) {
              if (isFunction(result.stop)) {
                jQuery._queueHooks(animation.elem, animation.opts.queue).stop = result.stop.bind(result);
              }

              return result;
            }
          }

          jQuery.map(props, createTween, animation);

          if (isFunction(animation.opts.start)) {
            animation.opts.start.call(elem, animation);
          } // Attach callbacks from options


          animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always);
          jQuery.fx.timer(jQuery.extend(tick, {
            elem: elem,
            anim: animation,
            queue: animation.opts.queue
          }));
          return animation;
        }

        jQuery.Animation = jQuery.extend(Animation, {
          tweeners: {
            "*": [function (prop, value) {
              var tween = this.createTween(prop, value);
              adjustCSS(tween.elem, prop, rcssNum.exec(value), tween);
              return tween;
            }]
          },
          tweener: function tweener(props, callback) {
            if (isFunction(props)) {
              callback = props;
              props = ["*"];
            } else {
              props = props.match(rnothtmlwhite);
            }

            var prop,
                index = 0,
                length = props.length;

            for (; index < length; index++) {
              prop = props[index];
              Animation.tweeners[prop] = Animation.tweeners[prop] || [];
              Animation.tweeners[prop].unshift(callback);
            }
          },
          prefilters: [defaultPrefilter],
          prefilter: function prefilter(callback, prepend) {
            if (prepend) {
              Animation.prefilters.unshift(callback);
            } else {
              Animation.prefilters.push(callback);
            }
          }
        });

        jQuery.speed = function (speed, easing, fn) {
          var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
            complete: fn || !fn && easing || isFunction(speed) && speed,
            duration: speed,
            easing: fn && easing || easing && !isFunction(easing) && easing
          }; // Go to the end state if fx are off

          if (jQuery.fx.off) {
            opt.duration = 0;
          } else {
            if (typeof opt.duration !== "number") {
              if (opt.duration in jQuery.fx.speeds) {
                opt.duration = jQuery.fx.speeds[opt.duration];
              } else {
                opt.duration = jQuery.fx.speeds._default;
              }
            }
          } // Normalize opt.queue - true/undefined/null -> "fx"


          if (opt.queue == null || opt.queue === true) {
            opt.queue = "fx";
          } // Queueing


          opt.old = opt.complete;

          opt.complete = function () {
            if (isFunction(opt.old)) {
              opt.old.call(this);
            }

            if (opt.queue) {
              jQuery.dequeue(this, opt.queue);
            }
          };

          return opt;
        };

        jQuery.fn.extend({
          fadeTo: function fadeTo(speed, to, easing, callback) {
            // Show any hidden elements after setting opacity to 0
            return this.filter(isHiddenWithinTree).css("opacity", 0).show() // Animate to the value specified
            .end().animate({
              opacity: to
            }, speed, easing, callback);
          },
          animate: function animate(prop, speed, easing, callback) {
            var empty = jQuery.isEmptyObject(prop),
                optall = jQuery.speed(speed, easing, callback),
                doAnimation = function doAnimation() {
              // Operate on a copy of prop so per-property easing won't be lost
              var anim = Animation(this, jQuery.extend({}, prop), optall); // Empty animations, or finishing resolves immediately

              if (empty || dataPriv.get(this, "finish")) {
                anim.stop(true);
              }
            };

            doAnimation.finish = doAnimation;
            return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation);
          },
          stop: function stop(type, clearQueue, gotoEnd) {
            var stopQueue = function stopQueue(hooks) {
              var stop = hooks.stop;
              delete hooks.stop;
              stop(gotoEnd);
            };

            if (typeof type !== "string") {
              gotoEnd = clearQueue;
              clearQueue = type;
              type = undefined;
            }

            if (clearQueue) {
              this.queue(type || "fx", []);
            }

            return this.each(function () {
              var dequeue = true,
                  index = type != null && type + "queueHooks",
                  timers = jQuery.timers,
                  data = dataPriv.get(this);

              if (index) {
                if (data[index] && data[index].stop) {
                  stopQueue(data[index]);
                }
              } else {
                for (index in data) {
                  if (data[index] && data[index].stop && rrun.test(index)) {
                    stopQueue(data[index]);
                  }
                }
              }

              for (index = timers.length; index--;) {
                if (timers[index].elem === this && (type == null || timers[index].queue === type)) {
                  timers[index].anim.stop(gotoEnd);
                  dequeue = false;
                  timers.splice(index, 1);
                }
              } // Start the next in the queue if the last step wasn't forced.
              // Timers currently will call their complete callbacks, which
              // will dequeue but only if they were gotoEnd.


              if (dequeue || !gotoEnd) {
                jQuery.dequeue(this, type);
              }
            });
          },
          finish: function finish(type) {
            if (type !== false) {
              type = type || "fx";
            }

            return this.each(function () {
              var index,
                  data = dataPriv.get(this),
                  queue = data[type + "queue"],
                  hooks = data[type + "queueHooks"],
                  timers = jQuery.timers,
                  length = queue ? queue.length : 0; // Enable finishing flag on private data

              data.finish = true; // Empty the queue first

              jQuery.queue(this, type, []);

              if (hooks && hooks.stop) {
                hooks.stop.call(this, true);
              } // Look for any active animations, and finish them


              for (index = timers.length; index--;) {
                if (timers[index].elem === this && timers[index].queue === type) {
                  timers[index].anim.stop(true);
                  timers.splice(index, 1);
                }
              } // Look for any animations in the old queue and finish them


              for (index = 0; index < length; index++) {
                if (queue[index] && queue[index].finish) {
                  queue[index].finish.call(this);
                }
              } // Turn off finishing flag


              delete data.finish;
            });
          }
        });
        jQuery.each(["toggle", "show", "hide"], function (_i, name) {
          var cssFn = jQuery.fn[name];

          jQuery.fn[name] = function (speed, easing, callback) {
            return speed == null || typeof speed === "boolean" ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback);
          };
        }); // Generate shortcuts for custom animations

        jQuery.each({
          slideDown: genFx("show"),
          slideUp: genFx("hide"),
          slideToggle: genFx("toggle"),
          fadeIn: {
            opacity: "show"
          },
          fadeOut: {
            opacity: "hide"
          },
          fadeToggle: {
            opacity: "toggle"
          }
        }, function (name, props) {
          jQuery.fn[name] = function (speed, easing, callback) {
            return this.animate(props, speed, easing, callback);
          };
        });
        jQuery.timers = [];

        jQuery.fx.tick = function () {
          var timer,
              i = 0,
              timers = jQuery.timers;
          fxNow = Date.now();

          for (; i < timers.length; i++) {
            timer = timers[i]; // Run the timer and safely remove it when done (allowing for external removal)

            if (!timer() && timers[i] === timer) {
              timers.splice(i--, 1);
            }
          }

          if (!timers.length) {
            jQuery.fx.stop();
          }

          fxNow = undefined;
        };

        jQuery.fx.timer = function (timer) {
          jQuery.timers.push(timer);
          jQuery.fx.start();
        };

        jQuery.fx.interval = 13;

        jQuery.fx.start = function () {
          if (inProgress) {
            return;
          }

          inProgress = true;
          schedule();
        };

        jQuery.fx.stop = function () {
          inProgress = null;
        };

        jQuery.fx.speeds = {
          slow: 600,
          fast: 200,
          // Default speed
          _default: 400
        }; // Based off of the plugin by Clint Helfers, with permission.
        // https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/

        jQuery.fn.delay = function (time, type) {
          time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
          type = type || "fx";
          return this.queue(type, function (next, hooks) {
            var timeout = window.setTimeout(next, time);

            hooks.stop = function () {
              window.clearTimeout(timeout);
            };
          });
        };

        (function () {
          var input = document.createElement("input"),
              select = document.createElement("select"),
              opt = select.appendChild(document.createElement("option"));
          input.type = "checkbox"; // Support: Android <=4.3 only
          // Default value for a checkbox should be "on"

          support.checkOn = input.value !== ""; // Support: IE <=11 only
          // Must access selectedIndex to make default options select

          support.optSelected = opt.selected; // Support: IE <=11 only
          // An input loses its value after becoming a radio

          input = document.createElement("input");
          input.value = "t";
          input.type = "radio";
          support.radioValue = input.value === "t";
        })();

        var boolHook,
            attrHandle = jQuery.expr.attrHandle;
        jQuery.fn.extend({
          attr: function attr(name, value) {
            return access(this, jQuery.attr, name, value, arguments.length > 1);
          },
          removeAttr: function removeAttr(name) {
            return this.each(function () {
              jQuery.removeAttr(this, name);
            });
          }
        });
        jQuery.extend({
          attr: function attr(elem, name, value) {
            var ret,
                hooks,
                nType = elem.nodeType; // Don't get/set attributes on text, comment and attribute nodes

            if (nType === 3 || nType === 8 || nType === 2) {
              return;
            } // Fallback to prop when attributes are not supported


            if (typeof elem.getAttribute === "undefined") {
              return jQuery.prop(elem, name, value);
            } // Attribute hooks are determined by the lowercase version
            // Grab necessary hook if one is defined


            if (nType !== 1 || !jQuery.isXMLDoc(elem)) {
              hooks = jQuery.attrHooks[name.toLowerCase()] || (jQuery.expr.match.bool.test(name) ? boolHook : undefined);
            }

            if (value !== undefined) {
              if (value === null) {
                jQuery.removeAttr(elem, name);
                return;
              }

              if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {
                return ret;
              }

              elem.setAttribute(name, value + "");
              return value;
            }

            if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) {
              return ret;
            }

            ret = jQuery.find.attr(elem, name); // Non-existent attributes return null, we normalize to undefined

            return ret == null ? undefined : ret;
          },
          attrHooks: {
            type: {
              set: function set(elem, value) {
                if (!support.radioValue && value === "radio" && nodeName(elem, "input")) {
                  var val = elem.value;
                  elem.setAttribute("type", value);

                  if (val) {
                    elem.value = val;
                  }

                  return value;
                }
              }
            }
          },
          removeAttr: function removeAttr(elem, value) {
            var name,
                i = 0,
                // Attribute names can contain non-HTML whitespace characters
            // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
            attrNames = value && value.match(rnothtmlwhite);

            if (attrNames && elem.nodeType === 1) {
              while (name = attrNames[i++]) {
                elem.removeAttribute(name);
              }
            }
          }
        }); // Hooks for boolean attributes

        boolHook = {
          set: function set(elem, value, name) {
            if (value === false) {
              // Remove boolean attributes when set to false
              jQuery.removeAttr(elem, name);
            } else {
              elem.setAttribute(name, name);
            }

            return name;
          }
        };
        jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g), function (_i, name) {
          var getter = attrHandle[name] || jQuery.find.attr;

          attrHandle[name] = function (elem, name, isXML) {
            var ret,
                handle,
                lowercaseName = name.toLowerCase();

            if (!isXML) {
              // Avoid an infinite loop by temporarily removing this function from the getter
              handle = attrHandle[lowercaseName];
              attrHandle[lowercaseName] = ret;
              ret = getter(elem, name, isXML) != null ? lowercaseName : null;
              attrHandle[lowercaseName] = handle;
            }

            return ret;
          };
        });
        var rfocusable = /^(?:input|select|textarea|button)$/i,
            rclickable = /^(?:a|area)$/i;
        jQuery.fn.extend({
          prop: function prop(name, value) {
            return access(this, jQuery.prop, name, value, arguments.length > 1);
          },
          removeProp: function removeProp(name) {
            return this.each(function () {
              delete this[jQuery.propFix[name] || name];
            });
          }
        });
        jQuery.extend({
          prop: function prop(elem, name, value) {
            var ret,
                hooks,
                nType = elem.nodeType; // Don't get/set properties on text, comment and attribute nodes

            if (nType === 3 || nType === 8 || nType === 2) {
              return;
            }

            if (nType !== 1 || !jQuery.isXMLDoc(elem)) {
              // Fix name and attach hooks
              name = jQuery.propFix[name] || name;
              hooks = jQuery.propHooks[name];
            }

            if (value !== undefined) {
              if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {
                return ret;
              }

              return elem[name] = value;
            }

            if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) {
              return ret;
            }

            return elem[name];
          },
          propHooks: {
            tabIndex: {
              get: function get(elem) {
                // Support: IE <=9 - 11 only
                // elem.tabIndex doesn't always return the
                // correct value when it hasn't been explicitly set
                // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
                // Use proper attribute retrieval(#12072)
                var tabindex = jQuery.find.attr(elem, "tabindex");

                if (tabindex) {
                  return parseInt(tabindex, 10);
                }

                if (rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href) {
                  return 0;
                }

                return -1;
              }
            }
          },
          propFix: {
            "for": "htmlFor",
            "class": "className"
          }
        }); // Support: IE <=11 only
        // Accessing the selectedIndex property
        // forces the browser to respect setting selected
        // on the option
        // The getter ensures a default option is selected
        // when in an optgroup
        // eslint rule "no-unused-expressions" is disabled for this code
        // since it considers such accessions noop

        if (!support.optSelected) {
          jQuery.propHooks.selected = {
            get: function get(elem) {
              /* eslint no-unused-expressions: "off" */
              var parent = elem.parentNode;

              if (parent && parent.parentNode) {
                parent.parentNode.selectedIndex;
              }

              return null;
            },
            set: function set(elem) {
              /* eslint no-unused-expressions: "off" */
              var parent = elem.parentNode;

              if (parent) {
                parent.selectedIndex;

                if (parent.parentNode) {
                  parent.parentNode.selectedIndex;
                }
              }
            }
          };
        }

        jQuery.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function () {
          jQuery.propFix[this.toLowerCase()] = this;
        }); // Strip and collapse whitespace according to HTML spec
        // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace

        function stripAndCollapse(value) {
          var tokens = value.match(rnothtmlwhite) || [];
          return tokens.join(" ");
        }

        function getClass(elem) {
          return elem.getAttribute && elem.getAttribute("class") || "";
        }

        function classesToArray(value) {
          if (Array.isArray(value)) {
            return value;
          }

          if (typeof value === "string") {
            return value.match(rnothtmlwhite) || [];
          }

          return [];
        }

        jQuery.fn.extend({
          addClass: function addClass(value) {
            var classes,
                elem,
                cur,
                curValue,
                clazz,
                j,
                finalValue,
                i = 0;

            if (isFunction(value)) {
              return this.each(function (j) {
                jQuery(this).addClass(value.call(this, j, getClass(this)));
              });
            }

            classes = classesToArray(value);

            if (classes.length) {
              while (elem = this[i++]) {
                curValue = getClass(elem);
                cur = elem.nodeType === 1 && " " + stripAndCollapse(curValue) + " ";

                if (cur) {
                  j = 0;

                  while (clazz = classes[j++]) {
                    if (cur.indexOf(" " + clazz + " ") < 0) {
                      cur += clazz + " ";
                    }
                  } // Only assign if different to avoid unneeded rendering.


                  finalValue = stripAndCollapse(cur);

                  if (curValue !== finalValue) {
                    elem.setAttribute("class", finalValue);
                  }
                }
              }
            }

            return this;
          },
          removeClass: function removeClass(value) {
            var classes,
                elem,
                cur,
                curValue,
                clazz,
                j,
                finalValue,
                i = 0;

            if (isFunction(value)) {
              return this.each(function (j) {
                jQuery(this).removeClass(value.call(this, j, getClass(this)));
              });
            }

            if (!arguments.length) {
              return this.attr("class", "");
            }

            classes = classesToArray(value);

            if (classes.length) {
              while (elem = this[i++]) {
                curValue = getClass(elem); // This expression is here for better compressibility (see addClass)

                cur = elem.nodeType === 1 && " " + stripAndCollapse(curValue) + " ";

                if (cur) {
                  j = 0;

                  while (clazz = classes[j++]) {
                    // Remove *all* instances
                    while (cur.indexOf(" " + clazz + " ") > -1) {
                      cur = cur.replace(" " + clazz + " ", " ");
                    }
                  } // Only assign if different to avoid unneeded rendering.


                  finalValue = stripAndCollapse(cur);

                  if (curValue !== finalValue) {
                    elem.setAttribute("class", finalValue);
                  }
                }
              }
            }

            return this;
          },
          toggleClass: function toggleClass(value, stateVal) {
            var type = typeof value,
                isValidValue = type === "string" || Array.isArray(value);

            if (typeof stateVal === "boolean" && isValidValue) {
              return stateVal ? this.addClass(value) : this.removeClass(value);
            }

            if (isFunction(value)) {
              return this.each(function (i) {
                jQuery(this).toggleClass(value.call(this, i, getClass(this), stateVal), stateVal);
              });
            }

            return this.each(function () {
              var className, i, self, classNames;

              if (isValidValue) {
                // Toggle individual class names
                i = 0;
                self = jQuery(this);
                classNames = classesToArray(value);

                while (className = classNames[i++]) {
                  // Check each className given, space separated list
                  if (self.hasClass(className)) {
                    self.removeClass(className);
                  } else {
                    self.addClass(className);
                  }
                } // Toggle whole class name

              } else if (value === undefined || type === "boolean") {
                className = getClass(this);

                if (className) {
                  // Store className if set
                  dataPriv.set(this, "__className__", className);
                } // If the element has a class name or if we're passed `false`,
                // then remove the whole classname (if there was one, the above saved it).
                // Otherwise bring back whatever was previously saved (if anything),
                // falling back to the empty string if nothing was stored.


                if (this.setAttribute) {
                  this.setAttribute("class", className || value === false ? "" : dataPriv.get(this, "__className__") || "");
                }
              }
            });
          },
          hasClass: function hasClass(selector) {
            var className,
                elem,
                i = 0;
            className = " " + selector + " ";

            while (elem = this[i++]) {
              if (elem.nodeType === 1 && (" " + stripAndCollapse(getClass(elem)) + " ").indexOf(className) > -1) {
                return true;
              }
            }

            return false;
          }
        });
        var rreturn = /\r/g;
        jQuery.fn.extend({
          val: function val(value) {
            var hooks,
                ret,
                valueIsFunction,
                elem = this[0];

            if (!arguments.length) {
              if (elem) {
                hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];

                if (hooks && "get" in hooks && (ret = hooks.get(elem, "value")) !== undefined) {
                  return ret;
                }

                ret = elem.value; // Handle most common string cases

                if (typeof ret === "string") {
                  return ret.replace(rreturn, "");
                } // Handle cases where value is null/undef or number


                return ret == null ? "" : ret;
              }

              return;
            }

            valueIsFunction = isFunction(value);
            return this.each(function (i) {
              var val;

              if (this.nodeType !== 1) {
                return;
              }

              if (valueIsFunction) {
                val = value.call(this, i, jQuery(this).val());
              } else {
                val = value;
              } // Treat null/undefined as ""; convert numbers to string


              if (val == null) {
                val = "";
              } else if (typeof val === "number") {
                val += "";
              } else if (Array.isArray(val)) {
                val = jQuery.map(val, function (value) {
                  return value == null ? "" : value + "";
                });
              }

              hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()]; // If set returns undefined, fall back to normal setting

              if (!hooks || !("set" in hooks) || hooks.set(this, val, "value") === undefined) {
                this.value = val;
              }
            });
          }
        });
        jQuery.extend({
          valHooks: {
            option: {
              get: function get(elem) {
                var val = jQuery.find.attr(elem, "value");
                return val != null ? val : // Support: IE <=10 - 11 only
                // option.text throws exceptions (#14686, #14858)
                // Strip and collapse whitespace
                // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
                stripAndCollapse(jQuery.text(elem));
              }
            },
            select: {
              get: function get(elem) {
                var value,
                    option,
                    i,
                    options = elem.options,
                    index = elem.selectedIndex,
                    one = elem.type === "select-one",
                    values = one ? null : [],
                    max = one ? index + 1 : options.length;

                if (index < 0) {
                  i = max;
                } else {
                  i = one ? index : 0;
                } // Loop through all the selected options


                for (; i < max; i++) {
                  option = options[i]; // Support: IE <=9 only
                  // IE8-9 doesn't update selected after form reset (#2551)

                  if ((option.selected || i === index) && // Don't return options that are disabled or in a disabled optgroup
                  !option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode, "optgroup"))) {
                    // Get the specific value for the option
                    value = jQuery(option).val(); // We don't need an array for one selects

                    if (one) {
                      return value;
                    } // Multi-Selects return an array


                    values.push(value);
                  }
                }

                return values;
              },
              set: function set(elem, value) {
                var optionSet,
                    option,
                    options = elem.options,
                    values = jQuery.makeArray(value),
                    i = options.length;

                while (i--) {
                  option = options[i];
                  /* eslint-disable no-cond-assign */

                  if (option.selected = jQuery.inArray(jQuery.valHooks.option.get(option), values) > -1) {
                    optionSet = true;
                  }
                  /* eslint-enable no-cond-assign */

                } // Force browsers to behave consistently when non-matching value is set


                if (!optionSet) {
                  elem.selectedIndex = -1;
                }

                return values;
              }
            }
          }
        }); // Radios and checkboxes getter/setter

        jQuery.each(["radio", "checkbox"], function () {
          jQuery.valHooks[this] = {
            set: function set(elem, value) {
              if (Array.isArray(value)) {
                return elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1;
              }
            }
          };

          if (!support.checkOn) {
            jQuery.valHooks[this].get = function (elem) {
              return elem.getAttribute("value") === null ? "on" : elem.value;
            };
          }
        }); // Return jQuery for attributes-only inclusion

        support.focusin = "onfocusin" in window;

        var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
            stopPropagationCallback = function stopPropagationCallback(e) {
          e.stopPropagation();
        };

        jQuery.extend(jQuery.event, {
          trigger: function trigger(event, data, elem, onlyHandlers) {
            var i,
                cur,
                tmp,
                bubbleType,
                ontype,
                handle,
                special,
                lastElement,
                eventPath = [elem || document],
                type = hasOwn.call(event, "type") ? event.type : event,
                namespaces = hasOwn.call(event, "namespace") ? event.namespace.split(".") : [];
            cur = lastElement = tmp = elem = elem || document; // Don't do events on text and comment nodes

            if (elem.nodeType === 3 || elem.nodeType === 8) {
              return;
            } // focus/blur morphs to focusin/out; ensure we're not firing them right now


            if (rfocusMorph.test(type + jQuery.event.triggered)) {
              return;
            }

            if (type.indexOf(".") > -1) {
              // Namespaced trigger; create a regexp to match event type in handle()
              namespaces = type.split(".");
              type = namespaces.shift();
              namespaces.sort();
            }

            ontype = type.indexOf(":") < 0 && "on" + type; // Caller can pass in a jQuery.Event object, Object, or just an event type string

            event = event[jQuery.expando] ? event : new jQuery.Event(type, typeof event === "object" && event); // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)

            event.isTrigger = onlyHandlers ? 2 : 3;
            event.namespace = namespaces.join(".");
            event.rnamespace = event.namespace ? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null; // Clean up the event in case it is being reused

            event.result = undefined;

            if (!event.target) {
              event.target = elem;
            } // Clone any incoming data and prepend the event, creating the handler arg list


            data = data == null ? [event] : jQuery.makeArray(data, [event]); // Allow special events to draw outside the lines

            special = jQuery.event.special[type] || {};

            if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {
              return;
            } // Determine event propagation path in advance, per W3C events spec (#9951)
            // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)


            if (!onlyHandlers && !special.noBubble && !isWindow(elem)) {
              bubbleType = special.delegateType || type;

              if (!rfocusMorph.test(bubbleType + type)) {
                cur = cur.parentNode;
              }

              for (; cur; cur = cur.parentNode) {
                eventPath.push(cur);
                tmp = cur;
              } // Only add window if we got to document (e.g., not plain obj or detached DOM)


              if (tmp === (elem.ownerDocument || document)) {
                eventPath.push(tmp.defaultView || tmp.parentWindow || window);
              }
            } // Fire handlers on the event path


            i = 0;

            while ((cur = eventPath[i++]) && !event.isPropagationStopped()) {
              lastElement = cur;
              event.type = i > 1 ? bubbleType : special.bindType || type; // jQuery handler

              handle = (dataPriv.get(cur, "events") || Object.create(null))[event.type] && dataPriv.get(cur, "handle");

              if (handle) {
                handle.apply(cur, data);
              } // Native handler


              handle = ontype && cur[ontype];

              if (handle && handle.apply && acceptData(cur)) {
                event.result = handle.apply(cur, data);

                if (event.result === false) {
                  event.preventDefault();
                }
              }
            }

            event.type = type; // If nobody prevented the default action, do it now

            if (!onlyHandlers && !event.isDefaultPrevented()) {
              if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) {
                // Call a native DOM method on the target with the same name as the event.
                // Don't do default actions on window, that's where global variables be (#6170)
                if (ontype && isFunction(elem[type]) && !isWindow(elem)) {
                  // Don't re-trigger an onFOO event when we call its FOO() method
                  tmp = elem[ontype];

                  if (tmp) {
                    elem[ontype] = null;
                  } // Prevent re-triggering of the same event, since we already bubbled it above


                  jQuery.event.triggered = type;

                  if (event.isPropagationStopped()) {
                    lastElement.addEventListener(type, stopPropagationCallback);
                  }

                  elem[type]();

                  if (event.isPropagationStopped()) {
                    lastElement.removeEventListener(type, stopPropagationCallback);
                  }

                  jQuery.event.triggered = undefined;

                  if (tmp) {
                    elem[ontype] = tmp;
                  }
                }
              }
            }

            return event.result;
          },
          // Piggyback on a donor event to simulate a different one
          // Used only for `focus(in | out)` events
          simulate: function simulate(type, elem, event) {
            var e = jQuery.extend(new jQuery.Event(), event, {
              type: type,
              isSimulated: true
            });
            jQuery.event.trigger(e, null, elem);
          }
        });
        jQuery.fn.extend({
          trigger: function trigger(type, data) {
            return this.each(function () {
              jQuery.event.trigger(type, data, this);
            });
          },
          triggerHandler: function triggerHandler(type, data) {
            var elem = this[0];

            if (elem) {
              return jQuery.event.trigger(type, data, elem, true);
            }
          }
        }); // Support: Firefox <=44
        // Firefox doesn't have focus(in | out) events
        // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
        //
        // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
        // focus(in | out) events fire after focus & blur events,
        // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
        // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857

        if (!support.focusin) {
          jQuery.each({
            focus: "focusin",
            blur: "focusout"
          }, function (orig, fix) {
            // Attach a single capturing handler on the document while someone wants focusin/focusout
            var handler = function handler(event) {
              jQuery.event.simulate(fix, event.target, jQuery.event.fix(event));
            };

            jQuery.event.special[fix] = {
              setup: function setup() {
                // Handle: regular nodes (via `this.ownerDocument`), window
                // (via `this.document`) & document (via `this`).
                var doc = this.ownerDocument || this.document || this,
                    attaches = dataPriv.access(doc, fix);

                if (!attaches) {
                  doc.addEventListener(orig, handler, true);
                }

                dataPriv.access(doc, fix, (attaches || 0) + 1);
              },
              teardown: function teardown() {
                var doc = this.ownerDocument || this.document || this,
                    attaches = dataPriv.access(doc, fix) - 1;

                if (!attaches) {
                  doc.removeEventListener(orig, handler, true);
                  dataPriv.remove(doc, fix);
                } else {
                  dataPriv.access(doc, fix, attaches);
                }
              }
            };
          });
        }

        var location = window.location;
        var nonce = {
          guid: Date.now()
        };
        var rquery = /\?/; // Cross-browser xml parsing

        jQuery.parseXML = function (data) {
          var xml;

          if (!data || typeof data !== "string") {
            return null;
          } // Support: IE 9 - 11 only
          // IE throws on parseFromString with invalid input.


          try {
            xml = new window.DOMParser().parseFromString(data, "text/xml");
          } catch (e) {
            xml = undefined;
          }

          if (!xml || xml.getElementsByTagName("parsererror").length) {
            jQuery.error("Invalid XML: " + data);
          }

          return xml;
        };

        var rbracket = /\[\]$/,
            rCRLF = /\r?\n/g,
            rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
            rsubmittable = /^(?:input|select|textarea|keygen)/i;

        function buildParams(prefix, obj, traditional, add) {
          var name;

          if (Array.isArray(obj)) {
            // Serialize array item.
            jQuery.each(obj, function (i, v) {
              if (traditional || rbracket.test(prefix)) {
                // Treat each array item as a scalar.
                add(prefix, v);
              } else {
                // Item is non-scalar (array or object), encode its numeric index.
                buildParams(prefix + "[" + (typeof v === "object" && v != null ? i : "") + "]", v, traditional, add);
              }
            });
          } else if (!traditional && toType(obj) === "object") {
            // Serialize object item.
            for (name in obj) {
              buildParams(prefix + "[" + name + "]", obj[name], traditional, add);
            }
          } else {
            // Serialize scalar item.
            add(prefix, obj);
          }
        } // Serialize an array of form elements or a set of
        // key/values into a query string


        jQuery.param = function (a, traditional) {
          var prefix,
              s = [],
              add = function add(key, valueOrFunction) {
            // If value is a function, invoke it and use its return value
            var value = isFunction(valueOrFunction) ? valueOrFunction() : valueOrFunction;
            s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value == null ? "" : value);
          };

          if (a == null) {
            return "";
          } // If an array was passed in, assume that it is an array of form elements.


          if (Array.isArray(a) || a.jquery && !jQuery.isPlainObject(a)) {
            // Serialize the form elements
            jQuery.each(a, function () {
              add(this.name, this.value);
            });
          } else {
            // If traditional, encode the "old" way (the way 1.3.2 or older
            // did it), otherwise encode params recursively.
            for (prefix in a) {
              buildParams(prefix, a[prefix], traditional, add);
            }
          } // Return the resulting serialization


          return s.join("&");
        };

        jQuery.fn.extend({
          serialize: function serialize() {
            return jQuery.param(this.serializeArray());
          },
          serializeArray: function serializeArray() {
            return this.map(function () {
              // Can add propHook for "elements" to filter or add form elements
              var elements = jQuery.prop(this, "elements");
              return elements ? jQuery.makeArray(elements) : this;
            }).filter(function () {
              var type = this.type; // Use .is( ":disabled" ) so that fieldset[disabled] works

              return this.name && !jQuery(this).is(":disabled") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type));
            }).map(function (_i, elem) {
              var val = jQuery(this).val();

              if (val == null) {
                return null;
              }

              if (Array.isArray(val)) {
                return jQuery.map(val, function (val) {
                  return {
                    name: elem.name,
                    value: val.replace(rCRLF, "\r\n")
                  };
                });
              }

              return {
                name: elem.name,
                value: val.replace(rCRLF, "\r\n")
              };
            }).get();
          }
        });
        var r20 = /%20/g,
            rhash = /#.*$/,
            rantiCache = /([?&])_=[^&]*/,
            rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
            // #7653, #8125, #8152: local protocol detection
        rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
            rnoContent = /^(?:GET|HEAD)$/,
            rprotocol = /^\/\//,

        /* Prefilters
         * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
         * 2) These are called:
         *    - BEFORE asking for a transport
         *    - AFTER param serialization (s.data is a string if s.processData is true)
         * 3) key is the dataType
         * 4) the catchall symbol "*" can be used
         * 5) execution will start with transport dataType and THEN continue down to "*" if needed
         */
        prefilters = {},

        /* Transports bindings
         * 1) key is the dataType
         * 2) the catchall symbol "*" can be used
         * 3) selection will start with transport dataType and THEN go to "*" if needed
         */
        transports = {},
            // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
        allTypes = "*/".concat("*"),
            // Anchor tag for parsing the document origin
        originAnchor = document.createElement("a");
        originAnchor.href = location.href; // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport

        function addToPrefiltersOrTransports(structure) {
          // dataTypeExpression is optional and defaults to "*"
          return function (dataTypeExpression, func) {
            if (typeof dataTypeExpression !== "string") {
              func = dataTypeExpression;
              dataTypeExpression = "*";
            }

            var dataType,
                i = 0,
                dataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];

            if (isFunction(func)) {
              // For each dataType in the dataTypeExpression
              while (dataType = dataTypes[i++]) {
                // Prepend if requested
                if (dataType[0] === "+") {
                  dataType = dataType.slice(1) || "*";
                  (structure[dataType] = structure[dataType] || []).unshift(func); // Otherwise append
                } else {
                  (structure[dataType] = structure[dataType] || []).push(func);
                }
              }
            }
          };
        } // Base inspection function for prefilters and transports


        function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {
          var inspected = {},
              seekingTransport = structure === transports;

          function inspect(dataType) {
            var selected;
            inspected[dataType] = true;
            jQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {
              var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);

              if (typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[dataTypeOrTransport]) {
                options.dataTypes.unshift(dataTypeOrTransport);
                inspect(dataTypeOrTransport);
                return false;
              } else if (seekingTransport) {
                return !(selected = dataTypeOrTransport);
              }
            });
            return selected;
          }

          return inspect(options.dataTypes[0]) || !inspected["*"] && inspect("*");
        } // A special extend for ajax options
        // that takes "flat" options (not to be deep extended)
        // Fixes #9887


        function ajaxExtend(target, src) {
          var key,
              deep,
              flatOptions = jQuery.ajaxSettings.flatOptions || {};

          for (key in src) {
            if (src[key] !== undefined) {
              (flatOptions[key] ? target : deep || (deep = {}))[key] = src[key];
            }
          }

          if (deep) {
            jQuery.extend(true, target, deep);
          }

          return target;
        }
        /* Handles responses to an ajax request:
         * - finds the right dataType (mediates between content-type and expected dataType)
         * - returns the corresponding response
         */


        function ajaxHandleResponses(s, jqXHR, responses) {
          var ct,
              type,
              finalDataType,
              firstDataType,
              contents = s.contents,
              dataTypes = s.dataTypes; // Remove auto dataType and get content-type in the process

          while (dataTypes[0] === "*") {
            dataTypes.shift();

            if (ct === undefined) {
              ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
            }
          } // Check if we're dealing with a known content-type


          if (ct) {
            for (type in contents) {
              if (contents[type] && contents[type].test(ct)) {
                dataTypes.unshift(type);
                break;
              }
            }
          } // Check to see if we have a response for the expected dataType


          if (dataTypes[0] in responses) {
            finalDataType = dataTypes[0];
          } else {
            // Try convertible dataTypes
            for (type in responses) {
              if (!dataTypes[0] || s.converters[type + " " + dataTypes[0]]) {
                finalDataType = type;
                break;
              }

              if (!firstDataType) {
                firstDataType = type;
              }
            } // Or just use first one


            finalDataType = finalDataType || firstDataType;
          } // If we found a dataType
          // We add the dataType to the list if needed
          // and return the corresponding response


          if (finalDataType) {
            if (finalDataType !== dataTypes[0]) {
              dataTypes.unshift(finalDataType);
            }

            return responses[finalDataType];
          }
        }
        /* Chain conversions given the request and the original response
         * Also sets the responseXXX fields on the jqXHR instance
         */


        function ajaxConvert(s, response, jqXHR, isSuccess) {
          var conv2,
              current,
              conv,
              tmp,
              prev,
              converters = {},
              // Work with a copy of dataTypes in case we need to modify it for conversion
          dataTypes = s.dataTypes.slice(); // Create converters map with lowercased keys

          if (dataTypes[1]) {
            for (conv in s.converters) {
              converters[conv.toLowerCase()] = s.converters[conv];
            }
          }

          current = dataTypes.shift(); // Convert to each sequential dataType

          while (current) {
            if (s.responseFields[current]) {
              jqXHR[s.responseFields[current]] = response;
            } // Apply the dataFilter if provided


            if (!prev && isSuccess && s.dataFilter) {
              response = s.dataFilter(response, s.dataType);
            }

            prev = current;
            current = dataTypes.shift();

            if (current) {
              // There's only work to do if current dataType is non-auto
              if (current === "*") {
                current = prev; // Convert response if prev dataType is non-auto and differs from current
              } else if (prev !== "*" && prev !== current) {
                // Seek a direct converter
                conv = converters[prev + " " + current] || converters["* " + current]; // If none found, seek a pair

                if (!conv) {
                  for (conv2 in converters) {
                    // If conv2 outputs current
                    tmp = conv2.split(" ");

                    if (tmp[1] === current) {
                      // If prev can be converted to accepted input
                      conv = converters[prev + " " + tmp[0]] || converters["* " + tmp[0]];

                      if (conv) {
                        // Condense equivalence converters
                        if (conv === true) {
                          conv = converters[conv2]; // Otherwise, insert the intermediate dataType
                        } else if (converters[conv2] !== true) {
                          current = tmp[0];
                          dataTypes.unshift(tmp[1]);
                        }

                        break;
                      }
                    }
                  }
                } // Apply converter (if not an equivalence)


                if (conv !== true) {
                  // Unless errors are allowed to bubble, catch and return them
                  if (conv && s["throws"]) {
                    response = conv(response);
                  } else {
                    try {
                      response = conv(response);
                    } catch (e) {
                      return {
                        state: "parsererror",
                        error: conv ? e : "No conversion from " + prev + " to " + current
                      };
                    }
                  }
                }
              }
            }
          }

          return {
            state: "success",
            data: response
          };
        }

        jQuery.extend({
          // Counter for holding the number of active queries
          active: 0,
          // Last-Modified header cache for next request
          lastModified: {},
          etag: {},
          ajaxSettings: {
            url: location.href,
            type: "GET",
            isLocal: rlocalProtocol.test(location.protocol),
            global: true,
            processData: true,
            async: true,
            contentType: "application/x-www-form-urlencoded; charset=UTF-8",

            /*
            timeout: 0,
            data: null,
            dataType: null,
            username: null,
            password: null,
            cache: null,
            throws: false,
            traditional: false,
            headers: {},
            */
            accepts: {
              "*": allTypes,
              text: "text/plain",
              html: "text/html",
              xml: "application/xml, text/xml",
              json: "application/json, text/javascript"
            },
            contents: {
              xml: /\bxml\b/,
              html: /\bhtml/,
              json: /\bjson\b/
            },
            responseFields: {
              xml: "responseXML",
              text: "responseText",
              json: "responseJSON"
            },
            // Data converters
            // Keys separate source (or catchall "*") and destination types with a single space
            converters: {
              // Convert anything to text
              "* text": String,
              // Text to html (true = no transformation)
              "text html": true,
              // Evaluate text as a json expression
              "text json": JSON.parse,
              // Parse text as xml
              "text xml": jQuery.parseXML
            },
            // For options that shouldn't be deep extended:
            // you can add your own custom options here if
            // and when you create one that shouldn't be
            // deep extended (see ajaxExtend)
            flatOptions: {
              url: true,
              context: true
            }
          },
          // Creates a full fledged settings object into target
          // with both ajaxSettings and settings fields.
          // If target is omitted, writes into ajaxSettings.
          ajaxSetup: function ajaxSetup(target, settings) {
            return settings ? // Building a settings object
            ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) : // Extending ajaxSettings
            ajaxExtend(jQuery.ajaxSettings, target);
          },
          ajaxPrefilter: addToPrefiltersOrTransports(prefilters),
          ajaxTransport: addToPrefiltersOrTransports(transports),
          // Main method
          ajax: function ajax(url, options) {
            // If url is an object, simulate pre-1.5 signature
            if (typeof url === "object") {
              options = url;
              url = undefined;
            } // Force options to be an object


            options = options || {};

            var transport,
                // URL without anti-cache param
            cacheURL,
                // Response headers
            responseHeadersString,
                responseHeaders,
                // timeout handle
            timeoutTimer,
                // Url cleanup var
            urlAnchor,
                // Request state (becomes false upon send and true upon completion)
            completed,
                // To know if global events are to be dispatched
            fireGlobals,
                // Loop variable
            i,
                // uncached part of the url
            uncached,
                // Create the final options object
            s = jQuery.ajaxSetup({}, options),
                // Callbacks context
            callbackContext = s.context || s,
                // Context for global events is callbackContext if it is a DOM node or jQuery collection
            globalEventContext = s.context && (callbackContext.nodeType || callbackContext.jquery) ? jQuery(callbackContext) : jQuery.event,
                // Deferreds
            deferred = jQuery.Deferred(),
                completeDeferred = jQuery.Callbacks("once memory"),
                // Status-dependent callbacks
            _statusCode = s.statusCode || {},
                // Headers (they are sent all at once)
            requestHeaders = {},
                requestHeadersNames = {},
                // Default abort message
            strAbort = "canceled",
                // Fake xhr
            jqXHR = {
              readyState: 0,
              // Builds headers hashtable if needed
              getResponseHeader: function getResponseHeader(key) {
                var match;

                if (completed) {
                  if (!responseHeaders) {
                    responseHeaders = {};

                    while (match = rheaders.exec(responseHeadersString)) {
                      responseHeaders[match[1].toLowerCase() + " "] = (responseHeaders[match[1].toLowerCase() + " "] || []).concat(match[2]);
                    }
                  }

                  match = responseHeaders[key.toLowerCase() + " "];
                }

                return match == null ? null : match.join(", ");
              },
              // Raw string
              getAllResponseHeaders: function getAllResponseHeaders() {
                return completed ? responseHeadersString : null;
              },
              // Caches the header
              setRequestHeader: function setRequestHeader(name, value) {
                if (completed == null) {
                  name = requestHeadersNames[name.toLowerCase()] = requestHeadersNames[name.toLowerCase()] || name;
                  requestHeaders[name] = value;
                }

                return this;
              },
              // Overrides response content-type header
              overrideMimeType: function overrideMimeType(type) {
                if (completed == null) {
                  s.mimeType = type;
                }

                return this;
              },
              // Status-dependent callbacks
              statusCode: function statusCode(map) {
                var code;

                if (map) {
                  if (completed) {
                    // Execute the appropriate callbacks
                    jqXHR.always(map[jqXHR.status]);
                  } else {
                    // Lazy-add the new callbacks in a way that preserves old ones
                    for (code in map) {
                      _statusCode[code] = [_statusCode[code], map[code]];
                    }
                  }
                }

                return this;
              },
              // Cancel the request
              abort: function abort(statusText) {
                var finalText = statusText || strAbort;

                if (transport) {
                  transport.abort(finalText);
                }

                done(0, finalText);
                return this;
              }
            }; // Attach deferreds


            deferred.promise(jqXHR); // Add protocol if not provided (prefilters might expect it)
            // Handle falsy url in the settings object (#10093: consistency with old signature)
            // We also use the url parameter if available

            s.url = ((url || s.url || location.href) + "").replace(rprotocol, location.protocol + "//"); // Alias method option to type as per ticket #12004

            s.type = options.method || options.type || s.method || s.type; // Extract dataTypes list

            s.dataTypes = (s.dataType || "*").toLowerCase().match(rnothtmlwhite) || [""]; // A cross-domain request is in order when the origin doesn't match the current origin.

            if (s.crossDomain == null) {
              urlAnchor = document.createElement("a"); // Support: IE <=8 - 11, Edge 12 - 15
              // IE throws exception on accessing the href property if url is malformed,
              // e.g. http://example.com:80x/

              try {
                urlAnchor.href = s.url; // Support: IE <=8 - 11 only
                // Anchor's host property isn't correctly set when s.url is relative

                urlAnchor.href = urlAnchor.href;
                s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== urlAnchor.protocol + "//" + urlAnchor.host;
              } catch (e) {
                // If there is an error parsing the URL, assume it is crossDomain,
                // it can be rejected by the transport if it is invalid
                s.crossDomain = true;
              }
            } // Convert data if not already a string


            if (s.data && s.processData && typeof s.data !== "string") {
              s.data = jQuery.param(s.data, s.traditional);
            } // Apply prefilters


            inspectPrefiltersOrTransports(prefilters, s, options, jqXHR); // If request was aborted inside a prefilter, stop there

            if (completed) {
              return jqXHR;
            } // We can fire global events as of now if asked to
            // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)


            fireGlobals = jQuery.event && s.global; // Watch for a new set of requests

            if (fireGlobals && jQuery.active++ === 0) {
              jQuery.event.trigger("ajaxStart");
            } // Uppercase the type


            s.type = s.type.toUpperCase(); // Determine if request has content

            s.hasContent = !rnoContent.test(s.type); // Save the URL in case we're toying with the If-Modified-Since
            // and/or If-None-Match header later on
            // Remove hash to simplify url manipulation

            cacheURL = s.url.replace(rhash, ""); // More options handling for requests with no content

            if (!s.hasContent) {
              // Remember the hash so we can put it back
              uncached = s.url.slice(cacheURL.length); // If data is available and should be processed, append data to url

              if (s.data && (s.processData || typeof s.data === "string")) {
                cacheURL += (rquery.test(cacheURL) ? "&" : "?") + s.data; // #9682: remove data so that it's not used in an eventual retry

                delete s.data;
              } // Add or update anti-cache param if needed


              if (s.cache === false) {
                cacheURL = cacheURL.replace(rantiCache, "$1");
                uncached = (rquery.test(cacheURL) ? "&" : "?") + "_=" + nonce.guid++ + uncached;
              } // Put hash and anti-cache on the URL that will be requested (gh-1732)


              s.url = cacheURL + uncached; // Change '%20' to '+' if this is encoded form body content (gh-2658)
            } else if (s.data && s.processData && (s.contentType || "").indexOf("application/x-www-form-urlencoded") === 0) {
              s.data = s.data.replace(r20, "+");
            } // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.


            if (s.ifModified) {
              if (jQuery.lastModified[cacheURL]) {
                jqXHR.setRequestHeader("If-Modified-Since", jQuery.lastModified[cacheURL]);
              }

              if (jQuery.etag[cacheURL]) {
                jqXHR.setRequestHeader("If-None-Match", jQuery.etag[cacheURL]);
              }
            } // Set the correct header, if data is being sent


            if (s.data && s.hasContent && s.contentType !== false || options.contentType) {
              jqXHR.setRequestHeader("Content-Type", s.contentType);
            } // Set the Accepts header for the server, depending on the dataType


            jqXHR.setRequestHeader("Accept", s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== "*" ? ", " + allTypes + "; q=0.01" : "") : s.accepts["*"]); // Check for headers option

            for (i in s.headers) {
              jqXHR.setRequestHeader(i, s.headers[i]);
            } // Allow custom headers/mimetypes and early abort


            if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {
              // Abort if not done already and return
              return jqXHR.abort();
            } // Aborting is no longer a cancellation


            strAbort = "abort"; // Install callbacks on deferreds

            completeDeferred.add(s.complete);
            jqXHR.done(s.success);
            jqXHR.fail(s.error); // Get transport

            transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR); // If no transport, we auto-abort

            if (!transport) {
              done(-1, "No Transport");
            } else {
              jqXHR.readyState = 1; // Send global event

              if (fireGlobals) {
                globalEventContext.trigger("ajaxSend", [jqXHR, s]);
              } // If request was aborted inside ajaxSend, stop there


              if (completed) {
                return jqXHR;
              } // Timeout


              if (s.async && s.timeout > 0) {
                timeoutTimer = window.setTimeout(function () {
                  jqXHR.abort("timeout");
                }, s.timeout);
              }

              try {
                completed = false;
                transport.send(requestHeaders, done);
              } catch (e) {
                // Rethrow post-completion exceptions
                if (completed) {
                  throw e;
                } // Propagate others as results


                done(-1, e);
              }
            } // Callback for when everything is done


            function done(status, nativeStatusText, responses, headers) {
              var isSuccess,
                  success,
                  error,
                  response,
                  modified,
                  statusText = nativeStatusText; // Ignore repeat invocations

              if (completed) {
                return;
              }

              completed = true; // Clear timeout if it exists

              if (timeoutTimer) {
                window.clearTimeout(timeoutTimer);
              } // Dereference transport for early garbage collection
              // (no matter how long the jqXHR object will be used)


              transport = undefined; // Cache response headers

              responseHeadersString = headers || ""; // Set readyState

              jqXHR.readyState = status > 0 ? 4 : 0; // Determine if successful

              isSuccess = status >= 200 && status < 300 || status === 304; // Get response data

              if (responses) {
                response = ajaxHandleResponses(s, jqXHR, responses);
              } // Use a noop converter for missing script


              if (!isSuccess && jQuery.inArray("script", s.dataTypes) > -1) {
                s.converters["text script"] = function () {};
              } // Convert no matter what (that way responseXXX fields are always set)


              response = ajaxConvert(s, response, jqXHR, isSuccess); // If successful, handle type chaining

              if (isSuccess) {
                // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
                if (s.ifModified) {
                  modified = jqXHR.getResponseHeader("Last-Modified");

                  if (modified) {
                    jQuery.lastModified[cacheURL] = modified;
                  }

                  modified = jqXHR.getResponseHeader("etag");

                  if (modified) {
                    jQuery.etag[cacheURL] = modified;
                  }
                } // if no content


                if (status === 204 || s.type === "HEAD") {
                  statusText = "nocontent"; // if not modified
                } else if (status === 304) {
                  statusText = "notmodified"; // If we have data, let's convert it
                } else {
                  statusText = response.state;
                  success = response.data;
                  error = response.error;
                  isSuccess = !error;
                }
              } else {
                // Extract error from statusText and normalize for non-aborts
                error = statusText;

                if (status || !statusText) {
                  statusText = "error";

                  if (status < 0) {
                    status = 0;
                  }
                }
              } // Set data for the fake xhr object


              jqXHR.status = status;
              jqXHR.statusText = (nativeStatusText || statusText) + ""; // Success/Error

              if (isSuccess) {
                deferred.resolveWith(callbackContext, [success, statusText, jqXHR]);
              } else {
                deferred.rejectWith(callbackContext, [jqXHR, statusText, error]);
              } // Status-dependent callbacks


              jqXHR.statusCode(_statusCode);
              _statusCode = undefined;

              if (fireGlobals) {
                globalEventContext.trigger(isSuccess ? "ajaxSuccess" : "ajaxError", [jqXHR, s, isSuccess ? success : error]);
              } // Complete


              completeDeferred.fireWith(callbackContext, [jqXHR, statusText]);

              if (fireGlobals) {
                globalEventContext.trigger("ajaxComplete", [jqXHR, s]); // Handle the global AJAX counter

                if (! --jQuery.active) {
                  jQuery.event.trigger("ajaxStop");
                }
              }
            }

            return jqXHR;
          },
          getJSON: function getJSON(url, data, callback) {
            return jQuery.get(url, data, callback, "json");
          },
          getScript: function getScript(url, callback) {
            return jQuery.get(url, undefined, callback, "script");
          }
        });
        jQuery.each(["get", "post"], function (_i, method) {
          jQuery[method] = function (url, data, callback, type) {
            // Shift arguments if data argument was omitted
            if (isFunction(data)) {
              type = type || callback;
              callback = data;
              data = undefined;
            } // The url can be an options object (which then must have .url)


            return jQuery.ajax(jQuery.extend({
              url: url,
              type: method,
              dataType: type,
              data: data,
              success: callback
            }, jQuery.isPlainObject(url) && url));
          };
        });
        jQuery.ajaxPrefilter(function (s) {
          var i;

          for (i in s.headers) {
            if (i.toLowerCase() === "content-type") {
              s.contentType = s.headers[i] || "";
            }
          }
        });

        jQuery._evalUrl = function (url, options, doc) {
          return jQuery.ajax({
            url: url,
            // Make this explicit, since user can override this through ajaxSetup (#11264)
            type: "GET",
            dataType: "script",
            cache: true,
            async: false,
            global: false,
            // Only evaluate the response if it is successful (gh-4126)
            // dataFilter is not invoked for failure responses, so using it instead
            // of the default converter is kludgy but it works.
            converters: {
              "text script": function textScript() {}
            },
            dataFilter: function dataFilter(response) {
              jQuery.globalEval(response, options, doc);
            }
          });
        };

        jQuery.fn.extend({
          wrapAll: function wrapAll(html) {
            var wrap;

            if (this[0]) {
              if (isFunction(html)) {
                html = html.call(this[0]);
              } // The elements to wrap the target around


              wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);

              if (this[0].parentNode) {
                wrap.insertBefore(this[0]);
              }

              wrap.map(function () {
                var elem = this;

                while (elem.firstElementChild) {
                  elem = elem.firstElementChild;
                }

                return elem;
              }).append(this);
            }

            return this;
          },
          wrapInner: function wrapInner(html) {
            if (isFunction(html)) {
              return this.each(function (i) {
                jQuery(this).wrapInner(html.call(this, i));
              });
            }

            return this.each(function () {
              var self = jQuery(this),
                  contents = self.contents();

              if (contents.length) {
                contents.wrapAll(html);
              } else {
                self.append(html);
              }
            });
          },
          wrap: function wrap(html) {
            var htmlIsFunction = isFunction(html);
            return this.each(function (i) {
              jQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);
            });
          },
          unwrap: function unwrap(selector) {
            this.parent(selector).not("body").each(function () {
              jQuery(this).replaceWith(this.childNodes);
            });
            return this;
          }
        });

        jQuery.expr.pseudos.hidden = function (elem) {
          return !jQuery.expr.pseudos.visible(elem);
        };

        jQuery.expr.pseudos.visible = function (elem) {
          return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);
        };

        jQuery.ajaxSettings.xhr = function () {
          try {
            return new window.XMLHttpRequest();
          } catch (e) {}
        };

        var xhrSuccessStatus = {
          // File protocol always yields status code 0, assume 200
          0: 200,
          // Support: IE <=9 only
          // #1450: sometimes IE returns 1223 when it should be 204
          1223: 204
        },
            xhrSupported = jQuery.ajaxSettings.xhr();
        support.cors = !!xhrSupported && "withCredentials" in xhrSupported;
        support.ajax = xhrSupported = !!xhrSupported;
        jQuery.ajaxTransport(function (options) {
          var _callback, errorCallback; // Cross domain only allowed if supported through XMLHttpRequest


          if (support.cors || xhrSupported && !options.crossDomain) {
            return {
              send: function send(headers, complete) {
                var i,
                    xhr = options.xhr();
                xhr.open(options.type, options.url, options.async, options.username, options.password); // Apply custom fields if provided

                if (options.xhrFields) {
                  for (i in options.xhrFields) {
                    xhr[i] = options.xhrFields[i];
                  }
                } // Override mime type if needed


                if (options.mimeType && xhr.overrideMimeType) {
                  xhr.overrideMimeType(options.mimeType);
                } // X-Requested-With header
                // For cross-domain requests, seeing as conditions for a preflight are
                // akin to a jigsaw puzzle, we simply never set it to be sure.
                // (it can always be set on a per-request basis or even using ajaxSetup)
                // For same-domain requests, won't change header if already provided.


                if (!options.crossDomain && !headers["X-Requested-With"]) {
                  headers["X-Requested-With"] = "XMLHttpRequest";
                } // Set headers


                for (i in headers) {
                  xhr.setRequestHeader(i, headers[i]);
                } // Callback


                _callback = function callback(type) {
                  return function () {
                    if (_callback) {
                      _callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = xhr.onreadystatechange = null;

                      if (type === "abort") {
                        xhr.abort();
                      } else if (type === "error") {
                        // Support: IE <=9 only
                        // On a manual native abort, IE9 throws
                        // errors on any property access that is not readyState
                        if (typeof xhr.status !== "number") {
                          complete(0, "error");
                        } else {
                          complete( // File: protocol always yields status 0; see #8605, #14207
                          xhr.status, xhr.statusText);
                        }
                      } else {
                        complete(xhrSuccessStatus[xhr.status] || xhr.status, xhr.statusText, // Support: IE <=9 only
                        // IE9 has no XHR2 but throws on binary (trac-11426)
                        // For XHR2 non-text, let the caller handle it (gh-2498)
                        (xhr.responseType || "text") !== "text" || typeof xhr.responseText !== "string" ? {
                          binary: xhr.response
                        } : {
                          text: xhr.responseText
                        }, xhr.getAllResponseHeaders());
                      }
                    }
                  };
                }; // Listen to events


                xhr.onload = _callback();
                errorCallback = xhr.onerror = xhr.ontimeout = _callback("error"); // Support: IE 9 only
                // Use onreadystatechange to replace onabort
                // to handle uncaught aborts

                if (xhr.onabort !== undefined) {
                  xhr.onabort = errorCallback;
                } else {
                  xhr.onreadystatechange = function () {
                    // Check readyState before timeout as it changes
                    if (xhr.readyState === 4) {
                      // Allow onerror to be called first,
                      // but that will not handle a native abort
                      // Also, save errorCallback to a variable
                      // as xhr.onerror cannot be accessed
                      window.setTimeout(function () {
                        if (_callback) {
                          errorCallback();
                        }
                      });
                    }
                  };
                } // Create the abort callback


                _callback = _callback("abort");

                try {
                  // Do send the request (this may raise an exception)
                  xhr.send(options.hasContent && options.data || null);
                } catch (e) {
                  // #14683: Only rethrow if this hasn't been notified as an error yet
                  if (_callback) {
                    throw e;
                  }
                }
              },
              abort: function abort() {
                if (_callback) {
                  _callback();
                }
              }
            };
          }
        }); // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)

        jQuery.ajaxPrefilter(function (s) {
          if (s.crossDomain) {
            s.contents.script = false;
          }
        }); // Install script dataType

        jQuery.ajaxSetup({
          accepts: {
            script: "text/javascript, application/javascript, " + "application/ecmascript, application/x-ecmascript"
          },
          contents: {
            script: /\b(?:java|ecma)script\b/
          },
          converters: {
            "text script": function textScript(text) {
              jQuery.globalEval(text);
              return text;
            }
          }
        }); // Handle cache's special case and crossDomain

        jQuery.ajaxPrefilter("script", function (s) {
          if (s.cache === undefined) {
            s.cache = false;
          }

          if (s.crossDomain) {
            s.type = "GET";
          }
        }); // Bind script tag hack transport

        jQuery.ajaxTransport("script", function (s) {
          // This transport only deals with cross domain or forced-by-attrs requests
          if (s.crossDomain || s.scriptAttrs) {
            var script, _callback2;

            return {
              send: function send(_, complete) {
                script = jQuery("<script>").attr(s.scriptAttrs || {}).prop({
                  charset: s.scriptCharset,
                  src: s.url
                }).on("load error", _callback2 = function callback(evt) {
                  script.remove();
                  _callback2 = null;

                  if (evt) {
                    complete(evt.type === "error" ? 404 : 200, evt.type);
                  }
                }); // Use native DOM manipulation to avoid our domManip AJAX trickery

                document.head.appendChild(script[0]);
              },
              abort: function abort() {
                if (_callback2) {
                  _callback2();
                }
              }
            };
          }
        });
        var oldCallbacks = [],
            rjsonp = /(=)\?(?=&|$)|\?\?/; // Default jsonp settings

        jQuery.ajaxSetup({
          jsonp: "callback",
          jsonpCallback: function jsonpCallback() {
            var callback = oldCallbacks.pop() || jQuery.expando + "_" + nonce.guid++;
            this[callback] = true;
            return callback;
          }
        }); // Detect, normalize options and install callbacks for jsonp requests

        jQuery.ajaxPrefilter("json jsonp", function (s, originalSettings, jqXHR) {
          var callbackName,
              overwritten,
              responseContainer,
              jsonProp = s.jsonp !== false && (rjsonp.test(s.url) ? "url" : typeof s.data === "string" && (s.contentType || "").indexOf("application/x-www-form-urlencoded") === 0 && rjsonp.test(s.data) && "data"); // Handle iff the expected data type is "jsonp" or we have a parameter to set

          if (jsonProp || s.dataTypes[0] === "jsonp") {
            // Get callback name, remembering preexisting value associated with it
            callbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ? s.jsonpCallback() : s.jsonpCallback; // Insert callback into url or form data

            if (jsonProp) {
              s[jsonProp] = s[jsonProp].replace(rjsonp, "$1" + callbackName);
            } else if (s.jsonp !== false) {
              s.url += (rquery.test(s.url) ? "&" : "?") + s.jsonp + "=" + callbackName;
            } // Use data converter to retrieve json after script execution


            s.converters["script json"] = function () {
              if (!responseContainer) {
                jQuery.error(callbackName + " was not called");
              }

              return responseContainer[0];
            }; // Force json dataType


            s.dataTypes[0] = "json"; // Install callback

            overwritten = window[callbackName];

            window[callbackName] = function () {
              responseContainer = arguments;
            }; // Clean-up function (fires after converters)


            jqXHR.always(function () {
              // If previous value didn't exist - remove it
              if (overwritten === undefined) {
                jQuery(window).removeProp(callbackName); // Otherwise restore preexisting value
              } else {
                window[callbackName] = overwritten;
              } // Save back as free


              if (s[callbackName]) {
                // Make sure that re-using the options doesn't screw things around
                s.jsonpCallback = originalSettings.jsonpCallback; // Save the callback name for future use

                oldCallbacks.push(callbackName);
              } // Call if it was a function and we have a response


              if (responseContainer && isFunction(overwritten)) {
                overwritten(responseContainer[0]);
              }

              responseContainer = overwritten = undefined;
            }); // Delegate to script

            return "script";
          }
        }); // Support: Safari 8 only
        // In Safari 8 documents created via document.implementation.createHTMLDocument
        // collapse sibling forms: the second one becomes a child of the first one.
        // Because of that, this security measure has to be disabled in Safari 8.
        // https://bugs.webkit.org/show_bug.cgi?id=137337

        support.createHTMLDocument = function () {
          var body = document.implementation.createHTMLDocument("").body;
          body.innerHTML = "<form></form><form></form>";
          return body.childNodes.length === 2;
        }(); // Argument "data" should be string of html
        // context (optional): If specified, the fragment will be created in this context,
        // defaults to document
        // keepScripts (optional): If true, will include scripts passed in the html string


        jQuery.parseHTML = function (data, context, keepScripts) {
          if (typeof data !== "string") {
            return [];
          }

          if (typeof context === "boolean") {
            keepScripts = context;
            context = false;
          }

          var base, parsed, scripts;

          if (!context) {
            // Stop scripts or inline event handlers from being executed immediately
            // by using document.implementation
            if (support.createHTMLDocument) {
              context = document.implementation.createHTMLDocument(""); // Set the base href for the created document
              // so any parsed elements with URLs
              // are based on the document's URL (gh-2965)

              base = context.createElement("base");
              base.href = document.location.href;
              context.head.appendChild(base);
            } else {
              context = document;
            }
          }

          parsed = rsingleTag.exec(data);
          scripts = !keepScripts && []; // Single tag

          if (parsed) {
            return [context.createElement(parsed[1])];
          }

          parsed = buildFragment([data], context, scripts);

          if (scripts && scripts.length) {
            jQuery(scripts).remove();
          }

          return jQuery.merge([], parsed.childNodes);
        };
        /**
         * Load a url into a page
         */


        jQuery.fn.load = function (url, params, callback) {
          var selector,
              type,
              response,
              self = this,
              off = url.indexOf(" ");

          if (off > -1) {
            selector = stripAndCollapse(url.slice(off));
            url = url.slice(0, off);
          } // If it's a function


          if (isFunction(params)) {
            // We assume that it's the callback
            callback = params;
            params = undefined; // Otherwise, build a param string
          } else if (params && typeof params === "object") {
            type = "POST";
          } // If we have elements to modify, make the request


          if (self.length > 0) {
            jQuery.ajax({
              url: url,
              // If "type" variable is undefined, then "GET" method will be used.
              // Make value of this field explicit since
              // user can override it through ajaxSetup method
              type: type || "GET",
              dataType: "html",
              data: params
            }).done(function (responseText) {
              // Save response for use in complete callback
              response = arguments;
              self.html(selector ? // If a selector was specified, locate the right elements in a dummy div
              // Exclude scripts to avoid IE 'Permission Denied' errors
              jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector) : // Otherwise use the full result
              responseText); // If the request succeeds, this function gets "data", "status", "jqXHR"
              // but they are ignored because response was set above.
              // If it fails, this function gets "jqXHR", "status", "error"
            }).always(callback && function (jqXHR, status) {
              self.each(function () {
                callback.apply(this, response || [jqXHR.responseText, status, jqXHR]);
              });
            });
          }

          return this;
        };

        jQuery.expr.pseudos.animated = function (elem) {
          return jQuery.grep(jQuery.timers, function (fn) {
            return elem === fn.elem;
          }).length;
        };

        jQuery.offset = {
          setOffset: function setOffset(elem, options, i) {
            var curPosition,
                curLeft,
                curCSSTop,
                curTop,
                curOffset,
                curCSSLeft,
                calculatePosition,
                position = jQuery.css(elem, "position"),
                curElem = jQuery(elem),
                props = {}; // Set position first, in-case top/left are set even on static elem

            if (position === "static") {
              elem.style.position = "relative";
            }

            curOffset = curElem.offset();
            curCSSTop = jQuery.css(elem, "top");
            curCSSLeft = jQuery.css(elem, "left");
            calculatePosition = (position === "absolute" || position === "fixed") && (curCSSTop + curCSSLeft).indexOf("auto") > -1; // Need to be able to calculate position if either
            // top or left is auto and position is either absolute or fixed

            if (calculatePosition) {
              curPosition = curElem.position();
              curTop = curPosition.top;
              curLeft = curPosition.left;
            } else {
              curTop = parseFloat(curCSSTop) || 0;
              curLeft = parseFloat(curCSSLeft) || 0;
            }

            if (isFunction(options)) {
              // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
              options = options.call(elem, i, jQuery.extend({}, curOffset));
            }

            if (options.top != null) {
              props.top = options.top - curOffset.top + curTop;
            }

            if (options.left != null) {
              props.left = options.left - curOffset.left + curLeft;
            }

            if ("using" in options) {
              options.using.call(elem, props);
            } else {
              if (typeof props.top === "number") {
                props.top += "px";
              }

              if (typeof props.left === "number") {
                props.left += "px";
              }

              curElem.css(props);
            }
          }
        };
        jQuery.fn.extend({
          // offset() relates an element's border box to the document origin
          offset: function offset(options) {
            // Preserve chaining for setter
            if (arguments.length) {
              return options === undefined ? this : this.each(function (i) {
                jQuery.offset.setOffset(this, options, i);
              });
            }

            var rect,
                win,
                elem = this[0];

            if (!elem) {
              return;
            } // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
            // Support: IE <=11 only
            // Running getBoundingClientRect on a
            // disconnected node in IE throws an error


            if (!elem.getClientRects().length) {
              return {
                top: 0,
                left: 0
              };
            } // Get document-relative position by adding viewport scroll to viewport-relative gBCR


            rect = elem.getBoundingClientRect();
            win = elem.ownerDocument.defaultView;
            return {
              top: rect.top + win.pageYOffset,
              left: rect.left + win.pageXOffset
            };
          },
          // position() relates an element's margin box to its offset parent's padding box
          // This corresponds to the behavior of CSS absolute positioning
          position: function position() {
            if (!this[0]) {
              return;
            }

            var offsetParent,
                offset,
                doc,
                elem = this[0],
                parentOffset = {
              top: 0,
              left: 0
            }; // position:fixed elements are offset from the viewport, which itself always has zero offset

            if (jQuery.css(elem, "position") === "fixed") {
              // Assume position:fixed implies availability of getBoundingClientRect
              offset = elem.getBoundingClientRect();
            } else {
              offset = this.offset(); // Account for the *real* offset parent, which can be the document or its root element
              // when a statically positioned element is identified

              doc = elem.ownerDocument;
              offsetParent = elem.offsetParent || doc.documentElement;

              while (offsetParent && (offsetParent === doc.body || offsetParent === doc.documentElement) && jQuery.css(offsetParent, "position") === "static") {
                offsetParent = offsetParent.parentNode;
              }

              if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {
                // Incorporate borders into its offset, since they are outside its content origin
                parentOffset = jQuery(offsetParent).offset();
                parentOffset.top += jQuery.css(offsetParent, "borderTopWidth", true);
                parentOffset.left += jQuery.css(offsetParent, "borderLeftWidth", true);
              }
            } // Subtract parent offsets and element margins


            return {
              top: offset.top - parentOffset.top - jQuery.css(elem, "marginTop", true),
              left: offset.left - parentOffset.left - jQuery.css(elem, "marginLeft", true)
            };
          },
          // This method will return documentElement in the following cases:
          // 1) For the element inside the iframe without offsetParent, this method will return
          //    documentElement of the parent window
          // 2) For the hidden or detached element
          // 3) For body or html element, i.e. in case of the html node - it will return itself
          //
          // but those exceptions were never presented as a real life use-cases
          // and might be considered as more preferable results.
          //
          // This logic, however, is not guaranteed and can change at any point in the future
          offsetParent: function offsetParent() {
            return this.map(function () {
              var offsetParent = this.offsetParent;

              while (offsetParent && jQuery.css(offsetParent, "position") === "static") {
                offsetParent = offsetParent.offsetParent;
              }

              return offsetParent || documentElement;
            });
          }
        }); // Create scrollLeft and scrollTop methods

        jQuery.each({
          scrollLeft: "pageXOffset",
          scrollTop: "pageYOffset"
        }, function (method, prop) {
          var top = "pageYOffset" === prop;

          jQuery.fn[method] = function (val) {
            return access(this, function (elem, method, val) {
              // Coalesce documents and windows
              var win;

              if (isWindow(elem)) {
                win = elem;
              } else if (elem.nodeType === 9) {
                win = elem.defaultView;
              }

              if (val === undefined) {
                return win ? win[prop] : elem[method];
              }

              if (win) {
                win.scrollTo(!top ? val : win.pageXOffset, top ? val : win.pageYOffset);
              } else {
                elem[method] = val;
              }
            }, method, val, arguments.length);
          };
        }); // Support: Safari <=7 - 9.1, Chrome <=37 - 49
        // Add the top/left cssHooks using jQuery.fn.position
        // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
        // Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
        // getComputedStyle returns percent when specified for top/left/bottom/right;
        // rather than make the css module depend on the offset module, just check for it here

        jQuery.each(["top", "left"], function (_i, prop) {
          jQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition, function (elem, computed) {
            if (computed) {
              computed = curCSS(elem, prop); // If curCSS returns percentage, fallback to offset

              return rnumnonpx.test(computed) ? jQuery(elem).position()[prop] + "px" : computed;
            }
          });
        }); // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods

        jQuery.each({
          Height: "height",
          Width: "width"
        }, function (name, type) {
          jQuery.each({
            padding: "inner" + name,
            content: type,
            "": "outer" + name
          }, function (defaultExtra, funcName) {
            // Margin is only for outerHeight, outerWidth
            jQuery.fn[funcName] = function (margin, value) {
              var chainable = arguments.length && (defaultExtra || typeof margin !== "boolean"),
                  extra = defaultExtra || (margin === true || value === true ? "margin" : "border");
              return access(this, function (elem, type, value) {
                var doc;

                if (isWindow(elem)) {
                  // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
                  return funcName.indexOf("outer") === 0 ? elem["inner" + name] : elem.document.documentElement["client" + name];
                } // Get document width or height


                if (elem.nodeType === 9) {
                  doc = elem.documentElement; // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
                  // whichever is greatest

                  return Math.max(elem.body["scroll" + name], doc["scroll" + name], elem.body["offset" + name], doc["offset" + name], doc["client" + name]);
                }

                return value === undefined ? // Get width or height on the element, requesting but not forcing parseFloat
                jQuery.css(elem, type, extra) : // Set width or height on the element
                jQuery.style(elem, type, value, extra);
              }, type, chainable ? margin : undefined, chainable);
            };
          });
        });
        jQuery.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (_i, type) {
          jQuery.fn[type] = function (fn) {
            return this.on(type, fn);
          };
        });
        jQuery.fn.extend({
          bind: function bind(types, data, fn) {
            return this.on(types, null, data, fn);
          },
          unbind: function unbind(types, fn) {
            return this.off(types, null, fn);
          },
          delegate: function delegate(selector, types, data, fn) {
            return this.on(types, selector, data, fn);
          },
          undelegate: function undelegate(selector, types, fn) {
            // ( namespace ) or ( selector, types [, fn] )
            return arguments.length === 1 ? this.off(selector, "**") : this.off(types, selector || "**", fn);
          },
          hover: function hover(fnOver, fnOut) {
            return this.mouseenter(fnOver).mouseleave(fnOut || fnOver);
          }
        });
        jQuery.each(("blur focus focusin focusout resize scroll click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup contextmenu").split(" "), function (_i, name) {
          // Handle event binding
          jQuery.fn[name] = function (data, fn) {
            return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name);
          };
        }); // Support: Android <=4.0 only
        // Make sure we trim BOM and NBSP

        var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; // Bind a function to a context, optionally partially applying any
        // arguments.
        // jQuery.proxy is deprecated to promote standards (specifically Function#bind)
        // However, it is not slated for removal any time soon

        jQuery.proxy = function (fn, context) {
          var tmp, args, proxy;

          if (typeof context === "string") {
            tmp = fn[context];
            context = fn;
            fn = tmp;
          } // Quick check to determine if target is callable, in the spec
          // this throws a TypeError, but we will just return undefined.


          if (!isFunction(fn)) {
            return undefined;
          } // Simulated bind


          args = _slice.call(arguments, 2);

          proxy = function proxy() {
            return fn.apply(context || this, args.concat(_slice.call(arguments)));
          }; // Set the guid of unique handler to the same of original handler, so it can be removed


          proxy.guid = fn.guid = fn.guid || jQuery.guid++;
          return proxy;
        };

        jQuery.holdReady = function (hold) {
          if (hold) {
            jQuery.readyWait++;
          } else {
            jQuery.ready(true);
          }
        };

        jQuery.isArray = Array.isArray;
        jQuery.parseJSON = JSON.parse;
        jQuery.nodeName = nodeName;
        jQuery.isFunction = isFunction;
        jQuery.isWindow = isWindow;
        jQuery.camelCase = camelCase;
        jQuery.type = toType;
        jQuery.now = Date.now;

        jQuery.isNumeric = function (obj) {
          // As of jQuery 3.0, isNumeric is limited to
          // strings and numbers (primitives or objects)
          // that can be coerced to finite numbers (gh-2662)
          var type = jQuery.type(obj);
          return (type === "number" || type === "string") && // parseFloat NaNs numeric-cast false positives ("")
          // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
          // subtraction forces infinities to NaN
          !isNaN(obj - parseFloat(obj));
        };

        jQuery.trim = function (text) {
          return text == null ? "" : (text + "").replace(rtrim, "");
        }; // Register as a named AMD module, since jQuery can be concatenated with other
        // files that may use define, but not via a proper concatenation script that
        // understands anonymous AMD modules. A named AMD is safest and most robust
        // way to register. Lowercase jquery is used because AMD module names are
        // derived from file names, and jQuery is normally delivered in a lowercase
        // file name. Do this after creating the global so that if an AMD module wants
        // to call noConflict to hide this version of jQuery, it will work.
        // Note that for maximum portability, libraries that are not jQuery should
        // declare themselves as anonymous modules, and avoid setting a global if an
        // AMD loader is present. jQuery is a special case. For more information, see
        // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon


        if (true) {
          !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () {
            return jQuery;
          }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
        }

        var // Map over jQuery in case of overwrite
        _jQuery = window.jQuery,
            // Map over the $ in case of overwrite
        _$ = window.$;

        jQuery.noConflict = function (deep) {
          if (window.$ === jQuery) {
            window.$ = _$;
          }

          if (deep && window.jQuery === jQuery) {
            window.jQuery = _jQuery;
          }

          return jQuery;
        }; // Expose jQuery and $ identifiers, even in AMD
        // (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
        // and CommonJS for browser emulators (#13566)


        if (typeof noGlobal === "undefined") {
          window.jQuery = window.$ = jQuery;
        }

        return jQuery;
      });
      /***/

    },

    /***/
    "EY2u":
    /*!*****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/empty.js ***!
      \*****************************************************************/

    /*! exports provided: EMPTY, empty */

    /***/
    function EY2u(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "EMPTY", function () {
        return EMPTY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "empty", function () {
        return empty;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");

      var EMPTY = new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
        return subscriber.complete();
      });

      function empty(scheduler) {
        return scheduler ? emptyScheduled(scheduler) : EMPTY;
      }

      function emptyScheduled(scheduler) {
        return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
          return scheduler.schedule(function () {
            return subscriber.complete();
          });
        });
      } //# sourceMappingURL=empty.js.map

      /***/

    },

    /***/
    "EuLz":
    /*!*************************************************************!*\
      !*** ./node_modules/aws-sdk/vendor/endpoint-cache/index.js ***!
      \*************************************************************/

    /*! no static exports found */

    /***/
    function EuLz(module, exports, __webpack_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });

      var LRU_1 = __webpack_require__(
      /*! ./utils/LRU */
      "hEW/");

      var CACHE_SIZE = 1000;
      /**
       * Inspired node-lru-cache[https://github.com/isaacs/node-lru-cache]
       */

      var EndpointCache =
      /** @class */
      function () {
        function EndpointCache(maxSize) {
          if (maxSize === void 0) {
            maxSize = CACHE_SIZE;
          }

          this.maxSize = maxSize;
          this.cache = new LRU_1.LRUCache(maxSize);
        }

        ;
        Object.defineProperty(EndpointCache.prototype, "size", {
          get: function get() {
            return this.cache.length;
          },
          enumerable: true,
          configurable: true
        });

        EndpointCache.prototype.put = function (key, value) {
          var keyString = typeof key !== 'string' ? EndpointCache.getKeyString(key) : key;
          var endpointRecord = this.populateValue(value);
          this.cache.put(keyString, endpointRecord);
        };

        EndpointCache.prototype.get = function (key) {
          var keyString = typeof key !== 'string' ? EndpointCache.getKeyString(key) : key;
          var now = Date.now();
          var records = this.cache.get(keyString);

          if (records) {
            for (var i = 0; i < records.length; i++) {
              var record = records[i];

              if (record.Expire < now) {
                this.cache.remove(keyString);
                return undefined;
              }
            }
          }

          return records;
        };

        EndpointCache.getKeyString = function (key) {
          var identifiers = [];
          var identifierNames = Object.keys(key).sort();

          for (var i = 0; i < identifierNames.length; i++) {
            var identifierName = identifierNames[i];
            if (key[identifierName] === undefined) continue;
            identifiers.push(key[identifierName]);
          }

          return identifiers.join(' ');
        };

        EndpointCache.prototype.populateValue = function (endpoints) {
          var now = Date.now();
          return endpoints.map(function (endpoint) {
            return {
              Address: endpoint.Address || '',
              Expire: now + (endpoint.CachePeriodInMinutes || 1) * 60 * 1000
            };
          });
        };

        EndpointCache.prototype.empty = function () {
          this.cache.empty();
        };

        EndpointCache.prototype.remove = function (key) {
          var keyString = typeof key !== 'string' ? EndpointCache.getKeyString(key) : key;
          this.cache.remove(keyString);
        };

        return EndpointCache;
      }();

      exports.EndpointCache = EndpointCache;
      /***/
    },

    /***/
    "F442":
    /*!*****************************************************!*\
      !*** ./node_modules/aws-sdk/lib/signers/presign.js ***!
      \*****************************************************/

    /*! no static exports found */

    /***/
    function F442(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ../core */
      "QsWE");

      var inherit = AWS.util.inherit;
      /**
       * @api private
       */

      var expiresHeader = 'presigned-expires';
      /**
       * @api private
       */

      function signedUrlBuilder(request) {
        var expires = request.httpRequest.headers[expiresHeader];
        var signerClass = request.service.getSignerClass(request);
        delete request.httpRequest.headers['User-Agent'];
        delete request.httpRequest.headers['X-Amz-User-Agent'];

        if (signerClass === AWS.Signers.V4) {
          if (expires > 604800) {
            // one week expiry is invalid
            var message = 'Presigning does not support expiry time greater ' + 'than a week with SigV4 signing.';
            throw AWS.util.error(new Error(), {
              code: 'InvalidExpiryTime',
              message: message,
              retryable: false
            });
          }

          request.httpRequest.headers[expiresHeader] = expires;
        } else if (signerClass === AWS.Signers.S3) {
          var now = request.service ? request.service.getSkewCorrectedDate() : AWS.util.date.getDate();
          request.httpRequest.headers[expiresHeader] = parseInt(AWS.util.date.unixTimestamp(now) + expires, 10).toString();
        } else {
          throw AWS.util.error(new Error(), {
            message: 'Presigning only supports S3 or SigV4 signing.',
            code: 'UnsupportedSigner',
            retryable: false
          });
        }
      }
      /**
       * @api private
       */


      function signedUrlSigner(request) {
        var endpoint = request.httpRequest.endpoint;
        var parsedUrl = AWS.util.urlParse(request.httpRequest.path);
        var queryParams = {};

        if (parsedUrl.search) {
          queryParams = AWS.util.queryStringParse(parsedUrl.search.substr(1));
        }

        var auth = request.httpRequest.headers['Authorization'].split(' ');

        if (auth[0] === 'AWS') {
          auth = auth[1].split(':');
          queryParams['Signature'] = auth.pop();
          queryParams['AWSAccessKeyId'] = auth.join(':');
          AWS.util.each(request.httpRequest.headers, function (key, value) {
            if (key === expiresHeader) key = 'Expires';

            if (key.indexOf('x-amz-meta-') === 0) {
              // Delete existing, potentially not normalized key
              delete queryParams[key];
              key = key.toLowerCase();
            }

            queryParams[key] = value;
          });
          delete request.httpRequest.headers[expiresHeader];
          delete queryParams['Authorization'];
          delete queryParams['Host'];
        } else if (auth[0] === 'AWS4-HMAC-SHA256') {
          // SigV4 signing
          auth.shift();
          var rest = auth.join(' ');
          var signature = rest.match(/Signature=(.*?)(?:,|\s|\r?\n|$)/)[1];
          queryParams['X-Amz-Signature'] = signature;
          delete queryParams['Expires'];
        } // build URL


        endpoint.pathname = parsedUrl.pathname;
        endpoint.search = AWS.util.queryParamsToString(queryParams);
      }
      /**
       * @api private
       */


      AWS.Signers.Presign = inherit({
        /**
         * @api private
         */
        sign: function sign(request, expireTime, callback) {
          request.httpRequest.headers[expiresHeader] = expireTime || 3600;
          request.on('build', signedUrlBuilder);
          request.on('sign', signedUrlSigner);
          request.removeListener('afterBuild', AWS.EventListeners.Core.SET_CONTENT_LENGTH);
          request.removeListener('afterBuild', AWS.EventListeners.Core.COMPUTE_SHA256);
          request.emit('beforePresign', [request]);

          if (callback) {
            request.build(function () {
              if (this.response.error) callback(this.response.error);else {
                callback(null, AWS.util.urlFormat(request.httpRequest.endpoint));
              }
            });
          } else {
            request.build();
            if (request.response.error) throw request.response.error;
            return AWS.util.urlFormat(request.httpRequest.endpoint);
          }
        }
      });
      /**
       * @api private
       */

      module.exports = AWS.Signers.Presign;
      /***/
    },

    /***/
    "F97/":
    /*!*********************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/not.js ***!
      \*********************************************************/

    /*! exports provided: not */

    /***/
    function F97(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "not", function () {
        return not;
      });

      function not(pred, thisArg) {
        function notPred() {
          return !notPred.pred.apply(notPred.thisArg, arguments);
        }

        notPred.pred = pred;
        notPred.thisArg = thisArg;
        return notPred;
      } //# sourceMappingURL=not.js.map

      /***/

    },

    /***/
    "FD9M":
    /*!***********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/bufferToggle.js ***!
      \***********************************************************************/

    /*! exports provided: bufferToggle */

    /***/
    function FD9M(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "bufferToggle", function () {
        return bufferToggle;
      });
      /* harmony import */


      var _Subscription__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscription */
      "quSY");
      /* harmony import */


      var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/subscribeToResult */
      "ZUHj");
      /* harmony import */


      var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../OuterSubscriber */
      "l7GE");

      function bufferToggle(openings, closingSelector) {
        return function bufferToggleOperatorFunction(source) {
          return source.lift(new BufferToggleOperator(openings, closingSelector));
        };
      }

      var BufferToggleOperator = /*#__PURE__*/function () {
        function BufferToggleOperator(openings, closingSelector) {
          _classCallCheck2(this, BufferToggleOperator);

          this.openings = openings;
          this.closingSelector = closingSelector;
        }

        _createClass2(BufferToggleOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new BufferToggleSubscriber(subscriber, this.openings, this.closingSelector));
          }
        }]);

        return BufferToggleOperator;
      }();

      var BufferToggleSubscriber = /*#__PURE__*/function (_OuterSubscriber__WEB) {
        _inherits2(BufferToggleSubscriber, _OuterSubscriber__WEB);

        var _super215 = _createSuper(BufferToggleSubscriber);

        function BufferToggleSubscriber(destination, openings, closingSelector) {
          var _this530;

          _classCallCheck2(this, BufferToggleSubscriber);

          _this530 = _super215.call(this, destination);
          _this530.closingSelector = closingSelector;
          _this530.contexts = [];

          _this530.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__["subscribeToResult"])(_assertThisInitialized2(_this530), openings));

          return _this530;
        }

        _createClass2(BufferToggleSubscriber, [{
          key: "_next",
          value: function _next(value) {
            var contexts = this.contexts;
            var len = contexts.length;

            for (var i = 0; i < len; i++) {
              contexts[i].buffer.push(value);
            }
          }
        }, {
          key: "_error",
          value: function _error(err) {
            var contexts = this.contexts;

            while (contexts.length > 0) {
              var context = contexts.shift();
              context.subscription.unsubscribe();
              context.buffer = null;
              context.subscription = null;
            }

            this.contexts = null;

            _get2(_getPrototypeOf2(BufferToggleSubscriber.prototype), "_error", this).call(this, err);
          }
        }, {
          key: "_complete",
          value: function _complete() {
            var contexts = this.contexts;

            while (contexts.length > 0) {
              var context = contexts.shift();
              this.destination.next(context.buffer);
              context.subscription.unsubscribe();
              context.buffer = null;
              context.subscription = null;
            }

            this.contexts = null;

            _get2(_getPrototypeOf2(BufferToggleSubscriber.prototype), "_complete", this).call(this);
          }
        }, {
          key: "notifyNext",
          value: function notifyNext(outerValue, innerValue) {
            outerValue ? this.closeBuffer(outerValue) : this.openBuffer(innerValue);
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete(innerSub) {
            this.closeBuffer(innerSub.context);
          }
        }, {
          key: "openBuffer",
          value: function openBuffer(value) {
            try {
              var closingSelector = this.closingSelector;
              var closingNotifier = closingSelector.call(this, value);

              if (closingNotifier) {
                this.trySubscribe(closingNotifier);
              }
            } catch (err) {
              this._error(err);
            }
          }
        }, {
          key: "closeBuffer",
          value: function closeBuffer(context) {
            var contexts = this.contexts;

            if (contexts && context) {
              var buffer = context.buffer,
                  subscription = context.subscription;
              this.destination.next(buffer);
              contexts.splice(contexts.indexOf(context), 1);
              this.remove(subscription);
              subscription.unsubscribe();
            }
          }
        }, {
          key: "trySubscribe",
          value: function trySubscribe(closingNotifier) {
            var contexts = this.contexts;
            var buffer = [];
            var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_0__["Subscription"]();
            var context = {
              buffer: buffer,
              subscription: subscription
            };
            contexts.push(context);
            var innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__["subscribeToResult"])(this, closingNotifier, context);

            if (!innerSubscription || innerSubscription.closed) {
              this.closeBuffer(context);
            } else {
              innerSubscription.context = context;
              this.add(innerSubscription);
              subscription.add(innerSubscription);
            }
          }
        }]);

        return BufferToggleSubscriber;
      }(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]); //# sourceMappingURL=bufferToggle.js.map

      /***/

    },

    /***/
    "FGtl":
    /*!************************************************************!*\
      !*** ./node_modules/aws-sdk/lib/signers/v4_credentials.js ***!
      \************************************************************/

    /*! no static exports found */

    /***/
    function FGtl(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ../core */
      "QsWE");
      /**
       * @api private
       */


      var cachedSecret = {};
      /**
       * @api private
       */

      var cacheQueue = [];
      /**
       * @api private
       */

      var maxCacheEntries = 50;
      /**
       * @api private
       */

      var v4Identifier = 'aws4_request';
      /**
       * @api private
       */

      module.exports = {
        /**
         * @api private
         *
         * @param date [String]
         * @param region [String]
         * @param serviceName [String]
         * @return [String]
         */
        createScope: function createScope(date, region, serviceName) {
          return [date.substr(0, 8), region, serviceName, v4Identifier].join('/');
        },

        /**
         * @api private
         *
         * @param credentials [Credentials]
         * @param date [String]
         * @param region [String]
         * @param service [String]
         * @param shouldCache [Boolean]
         * @return [String]
         */
        getSigningKey: function getSigningKey(credentials, date, region, service, shouldCache) {
          var credsIdentifier = AWS.util.crypto.hmac(credentials.secretAccessKey, credentials.accessKeyId, 'base64');
          var cacheKey = [credsIdentifier, date, region, service].join('_');
          shouldCache = shouldCache !== false;

          if (shouldCache && cacheKey in cachedSecret) {
            return cachedSecret[cacheKey];
          }

          var kDate = AWS.util.crypto.hmac('AWS4' + credentials.secretAccessKey, date, 'buffer');
          var kRegion = AWS.util.crypto.hmac(kDate, region, 'buffer');
          var kService = AWS.util.crypto.hmac(kRegion, service, 'buffer');
          var signingKey = AWS.util.crypto.hmac(kService, v4Identifier, 'buffer');

          if (shouldCache) {
            cachedSecret[cacheKey] = signingKey;
            cacheQueue.push(cacheKey);

            if (cacheQueue.length > maxCacheEntries) {
              // remove the oldest entry (not the least recently used)
              delete cachedSecret[cacheQueue.shift()];
            }
          }

          return signingKey;
        },

        /**
         * @api private
         *
         * Empties the derived signing key cache. Made available for testing purposes
         * only.
         */
        emptyCache: function emptyCache() {
          cachedSecret = {};
          cacheQueue = [];
        }
      };
      /***/
    },

    /***/
    "FKr1":
    /*!**********************************************************************!*\
      !*** ./node_modules/@angular/material/__ivy_ngcc__/fesm2015/core.js ***!
      \**********************************************************************/

    /*! exports provided: AnimationCurves, AnimationDurations, DateAdapter, ErrorStateMatcher, MATERIAL_SANITY_CHECKS, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MAT_DATE_LOCALE_FACTORY, MAT_NATIVE_DATE_FORMATS, MAT_OPTGROUP, MAT_OPTION_PARENT_COMPONENT, MAT_RIPPLE_GLOBAL_OPTIONS, MatCommonModule, MatLine, MatLineModule, MatNativeDateModule, MatOptgroup, MatOption, MatOptionModule, MatOptionSelectionChange, MatPseudoCheckbox, MatPseudoCheckboxModule, MatRipple, MatRippleModule, NativeDateAdapter, NativeDateModule, RippleRef, RippleRenderer, ShowOnDirtyErrorStateMatcher, VERSION, _MatOptgroupBase, _MatOptionBase, _countGroupLabelsBeforeOption, _getOptionScrollPosition, defaultRippleAnimationConfig, mixinColor, mixinDisableRipple, mixinDisabled, mixinErrorState, mixinInitialized, mixinTabIndex, setLines, ɵ0, ɵangular_material_src_material_core_core_a */

    /***/
    function FKr1(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AnimationCurves", function () {
        return AnimationCurves;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AnimationDurations", function () {
        return AnimationDurations;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DateAdapter", function () {
        return DateAdapter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ErrorStateMatcher", function () {
        return ErrorStateMatcher;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MATERIAL_SANITY_CHECKS", function () {
        return MATERIAL_SANITY_CHECKS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_DATE_FORMATS", function () {
        return MAT_DATE_FORMATS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_DATE_LOCALE", function () {
        return MAT_DATE_LOCALE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_DATE_LOCALE_FACTORY", function () {
        return MAT_DATE_LOCALE_FACTORY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_NATIVE_DATE_FORMATS", function () {
        return MAT_NATIVE_DATE_FORMATS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_OPTGROUP", function () {
        return MAT_OPTGROUP;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_OPTION_PARENT_COMPONENT", function () {
        return MAT_OPTION_PARENT_COMPONENT;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_RIPPLE_GLOBAL_OPTIONS", function () {
        return MAT_RIPPLE_GLOBAL_OPTIONS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatCommonModule", function () {
        return MatCommonModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatLine", function () {
        return MatLine;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatLineModule", function () {
        return MatLineModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatNativeDateModule", function () {
        return MatNativeDateModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatOptgroup", function () {
        return MatOptgroup;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatOption", function () {
        return MatOption;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatOptionModule", function () {
        return MatOptionModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatOptionSelectionChange", function () {
        return MatOptionSelectionChange;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatPseudoCheckbox", function () {
        return MatPseudoCheckbox;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatPseudoCheckboxModule", function () {
        return MatPseudoCheckboxModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatRipple", function () {
        return MatRipple;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatRippleModule", function () {
        return MatRippleModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NativeDateAdapter", function () {
        return NativeDateAdapter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NativeDateModule", function () {
        return NativeDateModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RippleRef", function () {
        return RippleRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RippleRenderer", function () {
        return RippleRenderer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ShowOnDirtyErrorStateMatcher", function () {
        return ShowOnDirtyErrorStateMatcher;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "VERSION", function () {
        return VERSION;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "_MatOptgroupBase", function () {
        return _MatOptgroupBase;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "_MatOptionBase", function () {
        return _MatOptionBase;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "_countGroupLabelsBeforeOption", function () {
        return _countGroupLabelsBeforeOption;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "_getOptionScrollPosition", function () {
        return _getOptionScrollPosition;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "defaultRippleAnimationConfig", function () {
        return defaultRippleAnimationConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "mixinColor", function () {
        return mixinColor;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "mixinDisableRipple", function () {
        return mixinDisableRipple;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "mixinDisabled", function () {
        return mixinDisabled;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "mixinErrorState", function () {
        return mixinErrorState;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "mixinInitialized", function () {
        return mixinInitialized;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "mixinTabIndex", function () {
        return mixinTabIndex;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "setLines", function () {
        return setLines;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵ0", function () {
        return ɵ0$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_material_src_material_core_core_a", function () {
        return MATERIAL_SANITY_CHECKS_FACTORY;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/cdk/a11y */
      "u47x");
      /* harmony import */


      var _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/cdk/bidi */
      "cH1L");
      /* harmony import */


      var _angular_cdk__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/cdk */
      "xz+E");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! @angular/cdk/platform */
      "nLfN");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(
      /*! @angular/platform-browser/animations */
      "R1ws");
      /* harmony import */


      var _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(
      /*! @angular/cdk/keycodes */
      "FtGj");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Current version of Angular Material. */


      var _c0 = ["*", [["mat-option"], ["ng-container"]]];
      var _c1 = ["*", "mat-option, ng-container"];

      function MatOption_mat_pseudo_checkbox_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "mat-pseudo-checkbox", 4);
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("state", ctx_r0.selected ? "checked" : "unchecked")("disabled", ctx_r0.disabled);
        }
      }

      function MatOption_span_3_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 5);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"]("(", ctx_r1.group.label, ")");
        }
      }

      var _c2 = ["*"];
      var VERSION = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["Version"]('11.2.1');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** @docs-private */

      var AnimationCurves = function AnimationCurves() {
        _classCallCheck2(this, AnimationCurves);
      };

      AnimationCurves.STANDARD_CURVE = 'cubic-bezier(0.4,0.0,0.2,1)';
      AnimationCurves.DECELERATION_CURVE = 'cubic-bezier(0.0,0.0,0.2,1)';
      AnimationCurves.ACCELERATION_CURVE = 'cubic-bezier(0.4,0.0,1,1)';
      AnimationCurves.SHARP_CURVE = 'cubic-bezier(0.4,0.0,0.6,1)';
      /** @docs-private */

      var AnimationDurations = function AnimationDurations() {
        _classCallCheck2(this, AnimationDurations);
      };

      AnimationDurations.COMPLEX = '375ms';
      AnimationDurations.ENTERING = '225ms';
      AnimationDurations.EXITING = '195ms';
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // Private version constant to circumvent test/build issues,
      // i.e. avoid core to depend on the @angular/material primary entry-point
      // Can be removed once the Material primary entry-point no longer
      // re-exports all secondary entry-points

      var VERSION$1 = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["Version"]('11.2.1');
      /** @docs-private */

      function MATERIAL_SANITY_CHECKS_FACTORY() {
        return true;
      }
      /** Injection token that configures whether the Material sanity checks are enabled. */


      var MATERIAL_SANITY_CHECKS = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('mat-sanity-checks', {
        providedIn: 'root',
        factory: MATERIAL_SANITY_CHECKS_FACTORY
      });
      /**
       * Module that captures anything that should be loaded and/or run for *all* Angular Material
       * components. This includes Bidi, etc.
       *
       * This module should be imported to each top-level component module (e.g., MatTabsModule).
       */

      var MatCommonModule = /*#__PURE__*/function () {
        function MatCommonModule(highContrastModeDetector, sanityChecks, document) {
          _classCallCheck2(this, MatCommonModule);

          /** Whether we've done the global sanity checks (e.g. a theme is loaded, there is a doctype). */
          this._hasDoneGlobalChecks = false;
          this._document = document; // While A11yModule also does this, we repeat it here to avoid importing A11yModule
          // in MatCommonModule.

          highContrastModeDetector._applyBodyHighContrastModeCssClasses(); // Note that `_sanityChecks` is typed to `any`, because AoT
          // throws an error if we use the `SanityChecks` type directly.


          this._sanityChecks = sanityChecks;

          if (!this._hasDoneGlobalChecks) {
            this._checkDoctypeIsDefined();

            this._checkThemeIsPresent();

            this._checkCdkVersionMatch();

            this._hasDoneGlobalChecks = true;
          }
        }
        /** Use defaultView of injected document if available or fallback to global window reference */


        _createClass2(MatCommonModule, [{
          key: "_getWindow",
          value: function _getWindow() {
            var win = this._document.defaultView || window;
            return typeof win === 'object' && win ? win : null;
          }
          /** Whether any sanity checks are enabled. */

        }, {
          key: "_checksAreEnabled",
          value: function _checksAreEnabled() {
            // TODO(crisbeto): we can't use `ngDevMode` here yet, because ViewEngine apps might not support
            // it. Since these checks can have performance implications and they aren't tree shakeable
            // in their current form, we can leave the `isDevMode` check in for now.
            // tslint:disable-next-line:ban
            return Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["isDevMode"])() && !this._isTestEnv();
          }
          /** Whether the code is running in tests. */

        }, {
          key: "_isTestEnv",
          value: function _isTestEnv() {
            var window = this._getWindow();

            return window && (window.__karma__ || window.jasmine);
          }
        }, {
          key: "_checkDoctypeIsDefined",
          value: function _checkDoctypeIsDefined() {
            var isEnabled = this._checksAreEnabled() && (this._sanityChecks === true || this._sanityChecks.doctype);

            if (isEnabled && !this._document.doctype) {
              console.warn('Current document does not have a doctype. This may cause ' + 'some Angular Material components not to behave as expected.');
            }
          }
        }, {
          key: "_checkThemeIsPresent",
          value: function _checkThemeIsPresent() {
            // We need to assert that the `body` is defined, because these checks run very early
            // and the `body` won't be defined if the consumer put their scripts in the `head`.
            var isDisabled = !this._checksAreEnabled() || this._sanityChecks === false || !this._sanityChecks.theme;

            if (isDisabled || !this._document.body || typeof getComputedStyle !== 'function') {
              return;
            }

            var testElement = this._document.createElement('div');

            testElement.classList.add('mat-theme-loaded-marker');

            this._document.body.appendChild(testElement);

            var computedStyle = getComputedStyle(testElement); // In some situations the computed style of the test element can be null. For example in
            // Firefox, the computed style is null if an application is running inside of a hidden iframe.
            // See: https://bugzilla.mozilla.org/show_bug.cgi?id=548397

            if (computedStyle && computedStyle.display !== 'none') {
              console.warn('Could not find Angular Material core theme. Most Material ' + 'components may not work as expected. For more info refer ' + 'to the theming guide: https://material.angular.io/guide/theming');
            }

            this._document.body.removeChild(testElement);
          }
          /** Checks whether the material version matches the cdk version */

        }, {
          key: "_checkCdkVersionMatch",
          value: function _checkCdkVersionMatch() {
            var isEnabled = this._checksAreEnabled() && (this._sanityChecks === true || this._sanityChecks.version);

            if (isEnabled && VERSION$1.full !== _angular_cdk__WEBPACK_IMPORTED_MODULE_3__["VERSION"].full) {
              console.warn('The Angular Material version (' + VERSION$1.full + ') does not match ' + 'the Angular CDK version (' + _angular_cdk__WEBPACK_IMPORTED_MODULE_3__["VERSION"].full + ').\n' + 'Please ensure the versions of these two packages exactly match.');
            }
          }
        }]);

        return MatCommonModule;
      }();

      MatCommonModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: MatCommonModule
      });
      MatCommonModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function MatCommonModule_Factory(t) {
          return new (t || MatCommonModule)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_1__["HighContrastModeDetector"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](MATERIAL_SANITY_CHECKS, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]));
        },
        imports: [[_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_2__["BidiModule"]], _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_2__["BidiModule"]]
      });

      MatCommonModule.ctorParameters = function () {
        return [{
          type: _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_1__["HighContrastModeDetector"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [MATERIAL_SANITY_CHECKS]
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
          }]
        }];
      };

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](MatCommonModule, {
          imports: function imports() {
            return [_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_2__["BidiModule"]];
          },
          exports: function exports() {
            return [_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_2__["BidiModule"]];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatCommonModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            imports: [_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_2__["BidiModule"]],
            exports: [_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_2__["BidiModule"]]
          }]
        }], function () {
          return [{
            type: _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_1__["HighContrastModeDetector"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [MATERIAL_SANITY_CHECKS]
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Mixin to augment a directive with a `disabled` property. */


      function mixinDisabled(base) {
        return /*#__PURE__*/function (_base) {
          _inherits2(_class2, _base);

          var _super216 = _createSuper(_class2);

          function _class2() {
            var _this531;

            _classCallCheck2(this, _class2);

            for (var _len19 = arguments.length, args = new Array(_len19), _key21 = 0; _key21 < _len19; _key21++) {
              args[_key21] = arguments[_key21];
            }

            _this531 = _super216.call.apply(_super216, [this].concat(args));
            _this531._disabled = false;
            return _this531;
          }

          _createClass2(_class2, [{
            key: "disabled",
            get: function get() {
              return this._disabled;
            },
            set: function set(value) {
              this._disabled = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceBooleanProperty"])(value);
            }
          }]);

          return _class2;
        }(base);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Mixin to augment a directive with a `color` property. */


      function mixinColor(base, defaultColor) {
        return /*#__PURE__*/function (_base2) {
          _inherits2(_class3, _base2);

          var _super217 = _createSuper(_class3);

          function _class3() {
            var _this532;

            _classCallCheck2(this, _class3);

            for (var _len20 = arguments.length, args = new Array(_len20), _key22 = 0; _key22 < _len20; _key22++) {
              args[_key22] = arguments[_key22];
            }

            _this532 = _super217.call.apply(_super217, [this].concat(args));
            _this532.defaultColor = defaultColor; // Set the default color that can be specified from the mixin.

            _this532.color = defaultColor;
            return _this532;
          }

          _createClass2(_class3, [{
            key: "color",
            get: function get() {
              return this._color;
            },
            set: function set(value) {
              var colorPalette = value || this.defaultColor;

              if (colorPalette !== this._color) {
                if (this._color) {
                  this._elementRef.nativeElement.classList.remove("mat-".concat(this._color));
                }

                if (colorPalette) {
                  this._elementRef.nativeElement.classList.add("mat-".concat(colorPalette));
                }

                this._color = colorPalette;
              }
            }
          }]);

          return _class3;
        }(base);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Mixin to augment a directive with a `disableRipple` property. */


      function mixinDisableRipple(base) {
        var Mixin = /*#__PURE__*/function (_base3) {
          _inherits2(Mixin, _base3);

          var _super218 = _createSuper(Mixin);

          function Mixin() {
            var _this533;

            _classCallCheck2(this, Mixin);

            for (var _len21 = arguments.length, args = new Array(_len21), _key23 = 0; _key23 < _len21; _key23++) {
              args[_key23] = arguments[_key23];
            }

            _this533 = _super218.call.apply(_super218, [this].concat(args));
            _this533._disableRipple = false;
            return _this533;
          }
          /** Whether the ripple effect is disabled or not. */


          _createClass2(Mixin, [{
            key: "disableRipple",
            get: function get() {
              return this._disableRipple;
            },
            set: function set(value) {
              this._disableRipple = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceBooleanProperty"])(value);
            }
          }]);

          return Mixin;
        }(base); // Since we don't directly extend from `base` with it's original types, and we instruct
        // TypeScript that `T` actually is instantiatable through `new`, the types don't overlap.
        // This is a limitation in TS as abstract classes cannot be typed properly dynamically.


        return Mixin;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Mixin to augment a directive with a `tabIndex` property. */


      function mixinTabIndex(base) {
        var defaultTabIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;

        // Note: We cast `base` to `unknown` and then `Constructor`. It could be an abstract class,
        // but given we `extend` it from another class, we can assume a constructor being accessible.
        var Mixin = /*#__PURE__*/function (_base4) {
          _inherits2(Mixin, _base4);

          var _super219 = _createSuper(Mixin);

          function Mixin() {
            var _this534;

            _classCallCheck2(this, Mixin);

            for (var _len22 = arguments.length, args = new Array(_len22), _key24 = 0; _key24 < _len22; _key24++) {
              args[_key24] = arguments[_key24];
            }

            _this534 = _super219.call.apply(_super219, [this].concat(args));
            _this534._tabIndex = defaultTabIndex;
            _this534.defaultTabIndex = defaultTabIndex;
            return _this534;
          }

          _createClass2(Mixin, [{
            key: "tabIndex",
            get: function get() {
              return this.disabled ? -1 : this._tabIndex;
            },
            set: function set(value) {
              // If the specified tabIndex value is null or undefined, fall back to the default value.
              this._tabIndex = value != null ? Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceNumberProperty"])(value) : this.defaultTabIndex;
            }
          }]);

          return Mixin;
        }(base); // Since we don't directly extend from `base` with it's original types, and we instruct
        // TypeScript that `T` actually is instantiatable through `new`, the types don't overlap.
        // This is a limitation in TS as abstract classes cannot be typed properly dynamically.


        return Mixin;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Mixin to augment a directive with updateErrorState method.
       * For component with `errorState` and need to update `errorState`.
       */


      function mixinErrorState(base) {
        return /*#__PURE__*/function (_base5) {
          _inherits2(_class4, _base5);

          var _super220 = _createSuper(_class4);

          function _class4() {
            var _this535;

            _classCallCheck2(this, _class4);

            for (var _len23 = arguments.length, args = new Array(_len23), _key25 = 0; _key25 < _len23; _key25++) {
              args[_key25] = arguments[_key25];
            }

            _this535 = _super220.call.apply(_super220, [this].concat(args));
            /** Whether the component is in an error state. */

            _this535.errorState = false;
            /**
             * Stream that emits whenever the state of the input changes such that the wrapping
             * `MatFormField` needs to run change detection.
             */

            _this535.stateChanges = new rxjs__WEBPACK_IMPORTED_MODULE_6__["Subject"]();
            return _this535;
          }

          _createClass2(_class4, [{
            key: "updateErrorState",
            value: function updateErrorState() {
              var oldState = this.errorState;
              var parent = this._parentFormGroup || this._parentForm;
              var matcher = this.errorStateMatcher || this._defaultErrorStateMatcher;
              var control = this.ngControl ? this.ngControl.control : null;
              var newState = matcher.isErrorState(control, parent);

              if (newState !== oldState) {
                this.errorState = newState;
                this.stateChanges.next();
              }
            }
          }]);

          return _class4;
        }(base);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Mixin to augment a directive with an initialized property that will emits when ngOnInit ends. */


      function mixinInitialized(base) {
        return /*#__PURE__*/function (_base6) {
          _inherits2(_class5, _base6);

          var _super221 = _createSuper(_class5);

          function _class5() {
            var _this536;

            _classCallCheck2(this, _class5);

            for (var _len24 = arguments.length, args = new Array(_len24), _key26 = 0; _key26 < _len24; _key26++) {
              args[_key26] = arguments[_key26];
            }

            _this536 = _super221.call.apply(_super221, [this].concat(args));
            /** Whether this directive has been marked as initialized. */

            _this536._isInitialized = false;
            /**
             * List of subscribers that subscribed before the directive was initialized. Should be notified
             * during _markInitialized. Set to null after pending subscribers are notified, and should
             * not expect to be populated after.
             */

            _this536._pendingSubscribers = [];
            /**
             * Observable stream that emits when the directive initializes. If already initialized, the
             * subscriber is stored to be notified once _markInitialized is called.
             */

            _this536.initialized = new rxjs__WEBPACK_IMPORTED_MODULE_6__["Observable"](function (subscriber) {
              // If initialized, immediately notify the subscriber. Otherwise store the subscriber to notify
              // when _markInitialized is called.
              if (_this536._isInitialized) {
                _this536._notifySubscriber(subscriber);
              } else {
                _this536._pendingSubscribers.push(subscriber);
              }
            });
            return _this536;
          }
          /**
           * Marks the state as initialized and notifies pending subscribers. Should be called at the end
           * of ngOnInit.
           * @docs-private
           */


          _createClass2(_class5, [{
            key: "_markInitialized",
            value: function _markInitialized() {
              if (this._isInitialized && (typeof ngDevMode === 'undefined' || ngDevMode)) {
                throw Error('This directive has already been marked as initialized and ' + 'should not be called twice.');
              }

              this._isInitialized = true;

              this._pendingSubscribers.forEach(this._notifySubscriber);

              this._pendingSubscribers = null;
            }
            /** Emits and completes the subscriber stream (should only emit once). */

          }, {
            key: "_notifySubscriber",
            value: function _notifySubscriber(subscriber) {
              subscriber.next();
              subscriber.complete();
            }
          }]);

          return _class5;
        }(base);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** InjectionToken for datepicker that can be used to override default locale code. */


      var MAT_DATE_LOCALE = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('MAT_DATE_LOCALE', {
        providedIn: 'root',
        factory: MAT_DATE_LOCALE_FACTORY
      });
      /** @docs-private */

      function MAT_DATE_LOCALE_FACTORY() {
        return Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["inject"])(_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]);
      }
      /** Adapts type `D` to be usable as a date by cdk-based components that work with dates. */


      var DateAdapter = /*#__PURE__*/function () {
        function DateAdapter() {
          _classCallCheck2(this, DateAdapter);

          this._localeChanges = new rxjs__WEBPACK_IMPORTED_MODULE_6__["Subject"]();
          /** A stream that emits when the locale changes. */

          this.localeChanges = this._localeChanges;
        }
        /**
         * Given a potential date object, returns that same date object if it is
         * a valid date, or `null` if it's not a valid date.
         * @param obj The object to check.
         * @returns A date or `null`.
         */


        _createClass2(DateAdapter, [{
          key: "getValidDateOrNull",
          value: function getValidDateOrNull(obj) {
            return this.isDateInstance(obj) && this.isValid(obj) ? obj : null;
          }
          /**
           * Attempts to deserialize a value to a valid date object. This is different from parsing in that
           * deserialize should only accept non-ambiguous, locale-independent formats (e.g. a ISO 8601
           * string). The default implementation does not allow any deserialization, it simply checks that
           * the given value is already a valid date object or null. The `<mat-datepicker>` will call this
           * method on all of its `@Input()` properties that accept dates. It is therefore possible to
           * support passing values from your backend directly to these properties by overriding this method
           * to also deserialize the format used by your backend.
           * @param value The value to be deserialized into a date object.
           * @returns The deserialized date object, either a valid date, null if the value can be
           *     deserialized into a null date (e.g. the empty string), or an invalid date.
           */

        }, {
          key: "deserialize",
          value: function deserialize(value) {
            if (value == null || this.isDateInstance(value) && this.isValid(value)) {
              return value;
            }

            return this.invalid();
          }
          /**
           * Sets the locale used for all dates.
           * @param locale The new locale.
           */

        }, {
          key: "setLocale",
          value: function setLocale(locale) {
            this.locale = locale;

            this._localeChanges.next();
          }
          /**
           * Compares two dates.
           * @param first The first date to compare.
           * @param second The second date to compare.
           * @returns 0 if the dates are equal, a number less than 0 if the first date is earlier,
           *     a number greater than 0 if the first date is later.
           */

        }, {
          key: "compareDate",
          value: function compareDate(first, second) {
            return this.getYear(first) - this.getYear(second) || this.getMonth(first) - this.getMonth(second) || this.getDate(first) - this.getDate(second);
          }
          /**
           * Checks if two dates are equal.
           * @param first The first date to check.
           * @param second The second date to check.
           * @returns Whether the two dates are equal.
           *     Null dates are considered equal to other null dates.
           */

        }, {
          key: "sameDate",
          value: function sameDate(first, second) {
            if (first && second) {
              var firstValid = this.isValid(first);
              var secondValid = this.isValid(second);

              if (firstValid && secondValid) {
                return !this.compareDate(first, second);
              }

              return firstValid == secondValid;
            }

            return first == second;
          }
          /**
           * Clamp the given date between min and max dates.
           * @param date The date to clamp.
           * @param min The minimum value to allow. If null or omitted no min is enforced.
           * @param max The maximum value to allow. If null or omitted no max is enforced.
           * @returns `min` if `date` is less than `min`, `max` if date is greater than `max`,
           *     otherwise `date`.
           */

        }, {
          key: "clampDate",
          value: function clampDate(date, min, max) {
            if (min && this.compareDate(date, min) < 0) {
              return min;
            }

            if (max && this.compareDate(date, max) > 0) {
              return max;
            }

            return date;
          }
        }]);

        return DateAdapter;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var MAT_DATE_FORMATS = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('mat-date-formats');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // TODO(mmalerba): Remove when we no longer support safari 9.

      /** Whether the browser supports the Intl API. */

      var SUPPORTS_INTL_API; // We need a try/catch around the reference to `Intl`, because accessing it in some cases can
      // cause IE to throw. These cases are tied to particular versions of Windows and can happen if
      // the consumer is providing a polyfilled `Map`. See:
      // https://github.com/Microsoft/ChakraCore/issues/3189
      // https://github.com/angular/components/issues/15687

      try {
        SUPPORTS_INTL_API = typeof Intl != 'undefined';
      } catch (_a) {
        SUPPORTS_INTL_API = false;
      }
      /** The default month names to use if Intl API is not available. */


      var DEFAULT_MONTH_NAMES = {
        'long': ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
        'short': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
        'narrow': ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D']
      };

      var ɵ0 = function ɵ0(i) {
        return String(i + 1);
      };
      /** The default date names to use if Intl API is not available. */


      var DEFAULT_DATE_NAMES = range(31, ɵ0);
      /** The default day of the week names to use if Intl API is not available. */

      var DEFAULT_DAY_OF_WEEK_NAMES = {
        'long': ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
        'short': ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
        'narrow': ['S', 'M', 'T', 'W', 'T', 'F', 'S']
      };
      /**
       * Matches strings that have the form of a valid RFC 3339 string
       * (https://tools.ietf.org/html/rfc3339). Note that the string may not actually be a valid date
       * because the regex will match strings an with out of bounds month, date, etc.
       */

      var ISO_8601_REGEX = /^\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|(?:(?:\+|-)\d{2}:\d{2}))?)?$/;
      /** Creates an array and fills it with values. */

      function range(length, valueFunction) {
        var valuesArray = Array(length);

        for (var i = 0; i < length; i++) {
          valuesArray[i] = valueFunction(i);
        }

        return valuesArray;
      }
      /** Adapts the native JS Date for use with cdk-based components that work with dates. */


      var NativeDateAdapter = /*#__PURE__*/function (_DateAdapter) {
        _inherits2(NativeDateAdapter, _DateAdapter);

        var _super222 = _createSuper(NativeDateAdapter);

        function NativeDateAdapter(matDateLocale, platform) {
          var _thisSuper3, _this537;

          _classCallCheck2(this, NativeDateAdapter);

          _this537 = _super222.call(this);
          /**
           * Whether to use `timeZone: 'utc'` with `Intl.DateTimeFormat` when formatting dates.
           * Without this `Intl.DateTimeFormat` sometimes chooses the wrong timeZone, which can throw off
           * the result. (e.g. in the en-US locale `new Date(1800, 7, 14).toLocaleDateString()`
           * will produce `'8/13/1800'`.
           *
           * TODO(mmalerba): drop this variable. It's not being used in the code right now. We're now
           * getting the string representation of a Date object from its utc representation. We're keeping
           * it here for sometime, just for precaution, in case we decide to revert some of these changes
           * though.
           */

          _this537.useUtcForDisplay = true;

          _get2((_thisSuper3 = _assertThisInitialized2(_this537), _getPrototypeOf2(NativeDateAdapter.prototype)), "setLocale", _thisSuper3).call(_thisSuper3, matDateLocale); // IE does its own time zone correction, so we disable this on IE.


          _this537.useUtcForDisplay = !platform.TRIDENT;
          _this537._clampDate = platform.TRIDENT || platform.EDGE;
          return _this537;
        }

        _createClass2(NativeDateAdapter, [{
          key: "getYear",
          value: function getYear(date) {
            return date.getFullYear();
          }
        }, {
          key: "getMonth",
          value: function getMonth(date) {
            return date.getMonth();
          }
        }, {
          key: "getDate",
          value: function getDate(date) {
            return date.getDate();
          }
        }, {
          key: "getDayOfWeek",
          value: function getDayOfWeek(date) {
            return date.getDay();
          }
        }, {
          key: "getMonthNames",
          value: function getMonthNames(style) {
            var _this538 = this;

            if (SUPPORTS_INTL_API) {
              var dtf = new Intl.DateTimeFormat(this.locale, {
                month: style,
                timeZone: 'utc'
              });
              return range(12, function (i) {
                return _this538._stripDirectionalityCharacters(_this538._format(dtf, new Date(2017, i, 1)));
              });
            }

            return DEFAULT_MONTH_NAMES[style];
          }
        }, {
          key: "getDateNames",
          value: function getDateNames() {
            var _this539 = this;

            if (SUPPORTS_INTL_API) {
              var dtf = new Intl.DateTimeFormat(this.locale, {
                day: 'numeric',
                timeZone: 'utc'
              });
              return range(31, function (i) {
                return _this539._stripDirectionalityCharacters(_this539._format(dtf, new Date(2017, 0, i + 1)));
              });
            }

            return DEFAULT_DATE_NAMES;
          }
        }, {
          key: "getDayOfWeekNames",
          value: function getDayOfWeekNames(style) {
            var _this540 = this;

            if (SUPPORTS_INTL_API) {
              var dtf = new Intl.DateTimeFormat(this.locale, {
                weekday: style,
                timeZone: 'utc'
              });
              return range(7, function (i) {
                return _this540._stripDirectionalityCharacters(_this540._format(dtf, new Date(2017, 0, i + 1)));
              });
            }

            return DEFAULT_DAY_OF_WEEK_NAMES[style];
          }
        }, {
          key: "getYearName",
          value: function getYearName(date) {
            if (SUPPORTS_INTL_API) {
              var dtf = new Intl.DateTimeFormat(this.locale, {
                year: 'numeric',
                timeZone: 'utc'
              });
              return this._stripDirectionalityCharacters(this._format(dtf, date));
            }

            return String(this.getYear(date));
          }
        }, {
          key: "getFirstDayOfWeek",
          value: function getFirstDayOfWeek() {
            // We can't tell using native JS Date what the first day of the week is, we default to Sunday.
            return 0;
          }
        }, {
          key: "getNumDaysInMonth",
          value: function getNumDaysInMonth(date) {
            return this.getDate(this._createDateWithOverflow(this.getYear(date), this.getMonth(date) + 1, 0));
          }
        }, {
          key: "clone",
          value: function clone(date) {
            return new Date(date.getTime());
          }
        }, {
          key: "createDate",
          value: function createDate(year, month, date) {
            if (typeof ngDevMode === 'undefined' || ngDevMode) {
              // Check for invalid month and date (except upper bound on date which we have to check after
              // creating the Date).
              if (month < 0 || month > 11) {
                throw Error("Invalid month index \"".concat(month, "\". Month index has to be between 0 and 11."));
              }

              if (date < 1) {
                throw Error("Invalid date \"".concat(date, "\". Date has to be greater than 0."));
              }
            }

            var result = this._createDateWithOverflow(year, month, date); // Check that the date wasn't above the upper bound for the month, causing the month to overflow


            if (result.getMonth() != month && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw Error("Invalid date \"".concat(date, "\" for month with index \"").concat(month, "\"."));
            }

            return result;
          }
        }, {
          key: "today",
          value: function today() {
            return new Date();
          }
        }, {
          key: "parse",
          value: function parse(value) {
            // We have no way using the native JS Date to set the parse format or locale, so we ignore these
            // parameters.
            if (typeof value == 'number') {
              return new Date(value);
            }

            return value ? new Date(Date.parse(value)) : null;
          }
        }, {
          key: "format",
          value: function format(date, displayFormat) {
            if (!this.isValid(date)) {
              throw Error('NativeDateAdapter: Cannot format invalid date.');
            }

            if (SUPPORTS_INTL_API) {
              // On IE and Edge the i18n API will throw a hard error that can crash the entire app
              // if we attempt to format a date whose year is less than 1 or greater than 9999.
              if (this._clampDate && (date.getFullYear() < 1 || date.getFullYear() > 9999)) {
                date = this.clone(date);
                date.setFullYear(Math.max(1, Math.min(9999, date.getFullYear())));
              }

              displayFormat = Object.assign(Object.assign({}, displayFormat), {
                timeZone: 'utc'
              });
              var dtf = new Intl.DateTimeFormat(this.locale, displayFormat);
              return this._stripDirectionalityCharacters(this._format(dtf, date));
            }

            return this._stripDirectionalityCharacters(date.toDateString());
          }
        }, {
          key: "addCalendarYears",
          value: function addCalendarYears(date, years) {
            return this.addCalendarMonths(date, years * 12);
          }
        }, {
          key: "addCalendarMonths",
          value: function addCalendarMonths(date, months) {
            var newDate = this._createDateWithOverflow(this.getYear(date), this.getMonth(date) + months, this.getDate(date)); // It's possible to wind up in the wrong month if the original month has more days than the new
            // month. In this case we want to go to the last day of the desired month.
            // Note: the additional + 12 % 12 ensures we end up with a positive number, since JS % doesn't
            // guarantee this.


            if (this.getMonth(newDate) != ((this.getMonth(date) + months) % 12 + 12) % 12) {
              newDate = this._createDateWithOverflow(this.getYear(newDate), this.getMonth(newDate), 0);
            }

            return newDate;
          }
        }, {
          key: "addCalendarDays",
          value: function addCalendarDays(date, days) {
            return this._createDateWithOverflow(this.getYear(date), this.getMonth(date), this.getDate(date) + days);
          }
        }, {
          key: "toIso8601",
          value: function toIso8601(date) {
            return [date.getUTCFullYear(), this._2digit(date.getUTCMonth() + 1), this._2digit(date.getUTCDate())].join('-');
          }
          /**
           * Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings
           * (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an
           * invalid date for all other values.
           */

        }, {
          key: "deserialize",
          value: function deserialize(value) {
            if (typeof value === 'string') {
              if (!value) {
                return null;
              } // The `Date` constructor accepts formats other than ISO 8601, so we need to make sure the
              // string is the right format first.


              if (ISO_8601_REGEX.test(value)) {
                var date = new Date(value);

                if (this.isValid(date)) {
                  return date;
                }
              }
            }

            return _get2(_getPrototypeOf2(NativeDateAdapter.prototype), "deserialize", this).call(this, value);
          }
        }, {
          key: "isDateInstance",
          value: function isDateInstance(obj) {
            return obj instanceof Date;
          }
        }, {
          key: "isValid",
          value: function isValid(date) {
            return !isNaN(date.getTime());
          }
        }, {
          key: "invalid",
          value: function invalid() {
            return new Date(NaN);
          }
          /** Creates a date but allows the month and date to overflow. */

        }, {
          key: "_createDateWithOverflow",
          value: function _createDateWithOverflow(year, month, date) {
            // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.
            // To work around this we use `setFullYear` and `setHours` instead.
            var d = new Date();
            d.setFullYear(year, month, date);
            d.setHours(0, 0, 0, 0);
            return d;
          }
          /**
           * Pads a number to make it two digits.
           * @param n The number to pad.
           * @returns The padded number.
           */

        }, {
          key: "_2digit",
          value: function _2digit(n) {
            return ('00' + n).slice(-2);
          }
          /**
           * Strip out unicode LTR and RTL characters. Edge and IE insert these into formatted dates while
           * other browsers do not. We remove them to make output consistent and because they interfere with
           * date parsing.
           * @param str The string to strip direction characters from.
           * @returns The stripped string.
           */

        }, {
          key: "_stripDirectionalityCharacters",
          value: function _stripDirectionalityCharacters(str) {
            return str.replace(/[\u200e\u200f]/g, '');
          }
          /**
           * When converting Date object to string, javascript built-in functions may return wrong
           * results because it applies its internal DST rules. The DST rules around the world change
           * very frequently, and the current valid rule is not always valid in previous years though.
           * We work around this problem building a new Date object which has its internal UTC
           * representation with the local date and time.
           * @param dtf Intl.DateTimeFormat object, containg the desired string format. It must have
           *    timeZone set to 'utc' to work fine.
           * @param date Date from which we want to get the string representation according to dtf
           * @returns A Date object with its UTC representation based on the passed in date info
           */

        }, {
          key: "_format",
          value: function _format(dtf, date) {
            // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.
            // To work around this we use `setUTCFullYear` and `setUTCHours` instead.
            var d = new Date();
            d.setUTCFullYear(date.getFullYear(), date.getMonth(), date.getDate());
            d.setUTCHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());
            return dtf.format(d);
          }
        }]);

        return NativeDateAdapter;
      }(DateAdapter);

      NativeDateAdapter.ɵfac = function NativeDateAdapter_Factory(t) {
        return new (t || NativeDateAdapter)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](MAT_DATE_LOCALE, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_7__["Platform"]));
      };

      NativeDateAdapter.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: NativeDateAdapter,
        factory: NativeDateAdapter.ɵfac
      });

      NativeDateAdapter.ctorParameters = function () {
        return [{
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [MAT_DATE_LOCALE]
          }]
        }, {
          type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_7__["Platform"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NativeDateAdapter, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [MAT_DATE_LOCALE]
            }]
          }, {
            type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_7__["Platform"]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var MAT_NATIVE_DATE_FORMATS = {
        parse: {
          dateInput: null
        },
        display: {
          dateInput: {
            year: 'numeric',
            month: 'numeric',
            day: 'numeric'
          },
          monthYearLabel: {
            year: 'numeric',
            month: 'short'
          },
          dateA11yLabel: {
            year: 'numeric',
            month: 'long',
            day: 'numeric'
          },
          monthYearA11yLabel: {
            year: 'numeric',
            month: 'long'
          }
        }
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var NativeDateModule = function NativeDateModule() {
        _classCallCheck2(this, NativeDateModule);
      };

      NativeDateModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NativeDateModule
      });
      NativeDateModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NativeDateModule_Factory(t) {
          return new (t || NativeDateModule)();
        },
        providers: [{
          provide: DateAdapter,
          useClass: NativeDateAdapter
        }],
        imports: [[_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_7__["PlatformModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NativeDateModule, {
          imports: function imports() {
            return [_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_7__["PlatformModule"]];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NativeDateModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            imports: [_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_7__["PlatformModule"]],
            providers: [{
              provide: DateAdapter,
              useClass: NativeDateAdapter
            }]
          }]
        }], null, null);
      })();

      var ɵ0$1 = MAT_NATIVE_DATE_FORMATS;

      var MatNativeDateModule = function MatNativeDateModule() {
        _classCallCheck2(this, MatNativeDateModule);
      };

      MatNativeDateModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: MatNativeDateModule
      });
      MatNativeDateModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function MatNativeDateModule_Factory(t) {
          return new (t || MatNativeDateModule)();
        },
        providers: [{
          provide: MAT_DATE_FORMATS,
          useValue: ɵ0$1
        }],
        imports: [[NativeDateModule]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](MatNativeDateModule, {
          imports: [NativeDateModule]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatNativeDateModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            imports: [NativeDateModule],
            providers: [{
              provide: MAT_DATE_FORMATS,
              useValue: ɵ0$1
            }]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Error state matcher that matches when a control is invalid and dirty. */


      var ShowOnDirtyErrorStateMatcher = /*#__PURE__*/function () {
        function ShowOnDirtyErrorStateMatcher() {
          _classCallCheck2(this, ShowOnDirtyErrorStateMatcher);
        }

        _createClass2(ShowOnDirtyErrorStateMatcher, [{
          key: "isErrorState",
          value: function isErrorState(control, form) {
            return !!(control && control.invalid && (control.dirty || form && form.submitted));
          }
        }]);

        return ShowOnDirtyErrorStateMatcher;
      }();

      ShowOnDirtyErrorStateMatcher.ɵfac = function ShowOnDirtyErrorStateMatcher_Factory(t) {
        return new (t || ShowOnDirtyErrorStateMatcher)();
      };

      ShowOnDirtyErrorStateMatcher.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: ShowOnDirtyErrorStateMatcher,
        factory: ShowOnDirtyErrorStateMatcher.ɵfac
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ShowOnDirtyErrorStateMatcher, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], null, null);
      })();
      /** Provider that defines how form controls behave with regards to displaying error messages. */


      var ErrorStateMatcher = /*#__PURE__*/function () {
        function ErrorStateMatcher() {
          _classCallCheck2(this, ErrorStateMatcher);
        }

        _createClass2(ErrorStateMatcher, [{
          key: "isErrorState",
          value: function isErrorState(control, form) {
            return !!(control && control.invalid && (control.touched || form && form.submitted));
          }
        }]);

        return ErrorStateMatcher;
      }();

      ErrorStateMatcher.ɵfac = function ErrorStateMatcher_Factory(t) {
        return new (t || ErrorStateMatcher)();
      };

      ErrorStateMatcher.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({
        factory: function ErrorStateMatcher_Factory() {
          return new ErrorStateMatcher();
        },
        token: ErrorStateMatcher,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ErrorStateMatcher, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Shared directive to count lines inside a text area, such as a list item.
       * Line elements can be extracted with a @ContentChildren(MatLine) query, then
       * counted by checking the query list's length.
       */


      var MatLine = function MatLine() {
        _classCallCheck2(this, MatLine);
      };

      MatLine.ɵfac = function MatLine_Factory(t) {
        return new (t || MatLine)();
      };

      MatLine.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatLine,
        selectors: [["", "mat-line", ""], ["", "matLine", ""]],
        hostAttrs: [1, "mat-line"]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatLine, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[mat-line], [matLine]',
            host: {
              'class': 'mat-line'
            }
          }]
        }], null, null);
      })();
      /**
       * Helper that takes a query list of lines and sets the correct class on the host.
       * @docs-private
       */


      function setLines(lines, element) {
        var prefix = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'mat';
        // Note: doesn't need to unsubscribe, because `changes`
        // gets completed by Angular when the view is destroyed.
        lines.changes.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_8__["startWith"])(lines)).subscribe(function (_ref104) {
          var length = _ref104.length;
          setClass(element, "".concat(prefix, "-2-line"), false);
          setClass(element, "".concat(prefix, "-3-line"), false);
          setClass(element, "".concat(prefix, "-multi-line"), false);

          if (length === 2 || length === 3) {
            setClass(element, "".concat(prefix, "-").concat(length, "-line"), true);
          } else if (length > 3) {
            setClass(element, "".concat(prefix, "-multi-line"), true);
          }
        });
      }
      /** Adds or removes a class from an element. */


      function setClass(element, className, isAdd) {
        var classList = element.nativeElement.classList;
        isAdd ? classList.add(className) : classList.remove(className);
      }

      var MatLineModule = function MatLineModule() {
        _classCallCheck2(this, MatLineModule);
      };

      MatLineModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: MatLineModule
      });
      MatLineModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function MatLineModule_Factory(t) {
          return new (t || MatLineModule)();
        },
        imports: [[MatCommonModule], MatCommonModule]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](MatLineModule, {
          declarations: [MatLine],
          imports: [MatCommonModule],
          exports: [MatLine, MatCommonModule]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatLineModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            imports: [MatCommonModule],
            exports: [MatLine, MatCommonModule],
            declarations: [MatLine]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Reference to a previously launched ripple element.
       */


      var RippleRef = /*#__PURE__*/function () {
        function RippleRef(_renderer,
        /** Reference to the ripple HTML element. */
        element,
        /** Ripple configuration used for the ripple. */
        config) {
          _classCallCheck2(this, RippleRef);

          this._renderer = _renderer;
          this.element = element;
          this.config = config;
          /** Current state of the ripple. */

          this.state = 3
          /* HIDDEN */
          ;
        }
        /** Fades out the ripple element. */


        _createClass2(RippleRef, [{
          key: "fadeOut",
          value: function fadeOut() {
            this._renderer.fadeOutRipple(this);
          }
        }]);

        return RippleRef;
      }();
      /**
       * Default ripple animation configuration for ripples without an explicit
       * animation config specified.
       */


      var defaultRippleAnimationConfig = {
        enterDuration: 450,
        exitDuration: 400
      };
      /**
       * Timeout for ignoring mouse events. Mouse events will be temporary ignored after touch
       * events to avoid synthetic mouse events.
       */

      var ignoreMouseEventsTimeout = 800;
      /** Options that apply to all the event listeners that are bound by the ripple renderer. */

      var passiveEventOptions = Object(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_7__["normalizePassiveListenerOptions"])({
        passive: true
      });
      /** Events that signal that the pointer is down. */

      var pointerDownEvents = ['mousedown', 'touchstart'];
      /** Events that signal that the pointer is up. */

      var pointerUpEvents = ['mouseup', 'mouseleave', 'touchend', 'touchcancel'];
      /**
       * Helper service that performs DOM manipulations. Not intended to be used outside this module.
       * The constructor takes a reference to the ripple directive's host element and a map of DOM
       * event handlers to be installed on the element that triggers ripple animations.
       * This will eventually become a custom renderer once Angular support exists.
       * @docs-private
       */

      var RippleRenderer = /*#__PURE__*/function () {
        function RippleRenderer(_target, _ngZone, elementOrElementRef, platform) {
          _classCallCheck2(this, RippleRenderer);

          this._target = _target;
          this._ngZone = _ngZone;
          /** Whether the pointer is currently down or not. */

          this._isPointerDown = false;
          /** Set of currently active ripple references. */

          this._activeRipples = new Set();
          /** Whether pointer-up event listeners have been registered. */

          this._pointerUpEventsRegistered = false; // Only do anything if we're on the browser.

          if (platform.isBrowser) {
            this._containerElement = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceElement"])(elementOrElementRef);
          }
        }
        /**
         * Fades in a ripple at the given coordinates.
         * @param x Coordinate within the element, along the X axis at which to start the ripple.
         * @param y Coordinate within the element, along the Y axis at which to start the ripple.
         * @param config Extra ripple options.
         */


        _createClass2(RippleRenderer, [{
          key: "fadeInRipple",
          value: function fadeInRipple(x, y) {
            var _this541 = this;

            var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};

            var containerRect = this._containerRect = this._containerRect || this._containerElement.getBoundingClientRect();

            var animationConfig = Object.assign(Object.assign({}, defaultRippleAnimationConfig), config.animation);

            if (config.centered) {
              x = containerRect.left + containerRect.width / 2;
              y = containerRect.top + containerRect.height / 2;
            }

            var radius = config.radius || distanceToFurthestCorner(x, y, containerRect);
            var offsetX = x - containerRect.left;
            var offsetY = y - containerRect.top;
            var duration = animationConfig.enterDuration;
            var ripple = document.createElement('div');
            ripple.classList.add('mat-ripple-element');
            ripple.style.left = "".concat(offsetX - radius, "px");
            ripple.style.top = "".concat(offsetY - radius, "px");
            ripple.style.height = "".concat(radius * 2, "px");
            ripple.style.width = "".concat(radius * 2, "px"); // If a custom color has been specified, set it as inline style. If no color is
            // set, the default color will be applied through the ripple theme styles.

            if (config.color != null) {
              ripple.style.backgroundColor = config.color;
            }

            ripple.style.transitionDuration = "".concat(duration, "ms");

            this._containerElement.appendChild(ripple); // By default the browser does not recalculate the styles of dynamically created
            // ripple elements. This is critical because then the `scale` would not animate properly.


            enforceStyleRecalculation(ripple);
            ripple.style.transform = 'scale(1)'; // Exposed reference to the ripple that will be returned.

            var rippleRef = new RippleRef(this, ripple, config);
            rippleRef.state = 0
            /* FADING_IN */
            ; // Add the ripple reference to the list of all active ripples.

            this._activeRipples.add(rippleRef);

            if (!config.persistent) {
              this._mostRecentTransientRipple = rippleRef;
            } // Wait for the ripple element to be completely faded in.
            // Once it's faded in, the ripple can be hidden immediately if the mouse is released.


            this._runTimeoutOutsideZone(function () {
              var isMostRecentTransientRipple = rippleRef === _this541._mostRecentTransientRipple;
              rippleRef.state = 1
              /* VISIBLE */
              ; // When the timer runs out while the user has kept their pointer down, we want to
              // keep only the persistent ripples and the latest transient ripple. We do this,
              // because we don't want stacked transient ripples to appear after their enter
              // animation has finished.

              if (!config.persistent && (!isMostRecentTransientRipple || !_this541._isPointerDown)) {
                rippleRef.fadeOut();
              }
            }, duration);

            return rippleRef;
          }
          /** Fades out a ripple reference. */

        }, {
          key: "fadeOutRipple",
          value: function fadeOutRipple(rippleRef) {
            var wasActive = this._activeRipples["delete"](rippleRef);

            if (rippleRef === this._mostRecentTransientRipple) {
              this._mostRecentTransientRipple = null;
            } // Clear out the cached bounding rect if we have no more ripples.


            if (!this._activeRipples.size) {
              this._containerRect = null;
            } // For ripples that are not active anymore, don't re-run the fade-out animation.


            if (!wasActive) {
              return;
            }

            var rippleEl = rippleRef.element;
            var animationConfig = Object.assign(Object.assign({}, defaultRippleAnimationConfig), rippleRef.config.animation);
            rippleEl.style.transitionDuration = "".concat(animationConfig.exitDuration, "ms");
            rippleEl.style.opacity = '0';
            rippleRef.state = 2
            /* FADING_OUT */
            ; // Once the ripple faded out, the ripple can be safely removed from the DOM.

            this._runTimeoutOutsideZone(function () {
              rippleRef.state = 3
              /* HIDDEN */
              ;
              rippleEl.parentNode.removeChild(rippleEl);
            }, animationConfig.exitDuration);
          }
          /** Fades out all currently active ripples. */

        }, {
          key: "fadeOutAll",
          value: function fadeOutAll() {
            this._activeRipples.forEach(function (ripple) {
              return ripple.fadeOut();
            });
          }
          /** Sets up the trigger event listeners */

        }, {
          key: "setupTriggerEvents",
          value: function setupTriggerEvents(elementOrElementRef) {
            var element = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceElement"])(elementOrElementRef);

            if (!element || element === this._triggerElement) {
              return;
            } // Remove all previously registered event listeners from the trigger element.


            this._removeTriggerEvents();

            this._triggerElement = element;

            this._registerEvents(pointerDownEvents);
          }
          /**
           * Handles all registered events.
           * @docs-private
           */

        }, {
          key: "handleEvent",
          value: function handleEvent(event) {
            if (event.type === 'mousedown') {
              this._onMousedown(event);
            } else if (event.type === 'touchstart') {
              this._onTouchStart(event);
            } else {
              this._onPointerUp();
            } // If pointer-up events haven't been registered yet, do so now.
            // We do this on-demand in order to reduce the total number of event listeners
            // registered by the ripples, which speeds up the rendering time for large UIs.


            if (!this._pointerUpEventsRegistered) {
              this._registerEvents(pointerUpEvents);

              this._pointerUpEventsRegistered = true;
            }
          }
          /** Function being called whenever the trigger is being pressed using mouse. */

        }, {
          key: "_onMousedown",
          value: function _onMousedown(event) {
            // Screen readers will fire fake mouse events for space/enter. Skip launching a
            // ripple in this case for consistency with the non-screen-reader experience.
            var isFakeMousedown = Object(_angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_1__["isFakeMousedownFromScreenReader"])(event);
            var isSyntheticEvent = this._lastTouchStartEvent && Date.now() < this._lastTouchStartEvent + ignoreMouseEventsTimeout;

            if (!this._target.rippleDisabled && !isFakeMousedown && !isSyntheticEvent) {
              this._isPointerDown = true;
              this.fadeInRipple(event.clientX, event.clientY, this._target.rippleConfig);
            }
          }
          /** Function being called whenever the trigger is being pressed using touch. */

        }, {
          key: "_onTouchStart",
          value: function _onTouchStart(event) {
            if (!this._target.rippleDisabled) {
              // Some browsers fire mouse events after a `touchstart` event. Those synthetic mouse
              // events will launch a second ripple if we don't ignore mouse events for a specific
              // time after a touchstart event.
              this._lastTouchStartEvent = Date.now();
              this._isPointerDown = true; // Use `changedTouches` so we skip any touches where the user put
              // their finger down, but used another finger to tap the element again.

              var touches = event.changedTouches;

              for (var i = 0; i < touches.length; i++) {
                this.fadeInRipple(touches[i].clientX, touches[i].clientY, this._target.rippleConfig);
              }
            }
          }
          /** Function being called whenever the trigger is being released. */

        }, {
          key: "_onPointerUp",
          value: function _onPointerUp() {
            if (!this._isPointerDown) {
              return;
            }

            this._isPointerDown = false; // Fade-out all ripples that are visible and not persistent.

            this._activeRipples.forEach(function (ripple) {
              // By default, only ripples that are completely visible will fade out on pointer release.
              // If the `terminateOnPointerUp` option is set, ripples that still fade in will also fade out.
              var isVisible = ripple.state === 1
              /* VISIBLE */
              || ripple.config.terminateOnPointerUp && ripple.state === 0
              /* FADING_IN */
              ;

              if (!ripple.config.persistent && isVisible) {
                ripple.fadeOut();
              }
            });
          }
          /** Runs a timeout outside of the Angular zone to avoid triggering the change detection. */

        }, {
          key: "_runTimeoutOutsideZone",
          value: function _runTimeoutOutsideZone(fn) {
            var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;

            this._ngZone.runOutsideAngular(function () {
              return setTimeout(fn, delay);
            });
          }
          /** Registers event listeners for a given list of events. */

        }, {
          key: "_registerEvents",
          value: function _registerEvents(eventTypes) {
            var _this542 = this;

            this._ngZone.runOutsideAngular(function () {
              eventTypes.forEach(function (type) {
                _this542._triggerElement.addEventListener(type, _this542, passiveEventOptions);
              });
            });
          }
          /** Removes previously registered event listeners from the trigger element. */

        }, {
          key: "_removeTriggerEvents",
          value: function _removeTriggerEvents() {
            var _this543 = this;

            if (this._triggerElement) {
              pointerDownEvents.forEach(function (type) {
                _this543._triggerElement.removeEventListener(type, _this543, passiveEventOptions);
              });

              if (this._pointerUpEventsRegistered) {
                pointerUpEvents.forEach(function (type) {
                  _this543._triggerElement.removeEventListener(type, _this543, passiveEventOptions);
                });
              }
            }
          }
        }]);

        return RippleRenderer;
      }();
      /** Enforces a style recalculation of a DOM element by computing its styles. */


      function enforceStyleRecalculation(element) {
        // Enforce a style recalculation by calling `getComputedStyle` and accessing any property.
        // Calling `getPropertyValue` is important to let optimizers know that this is not a noop.
        // See: https://gist.github.com/paulirish/5d52fb081b3570c81e3a
        window.getComputedStyle(element).getPropertyValue('opacity');
      }
      /**
       * Returns the distance from the point (x, y) to the furthest corner of a rectangle.
       */


      function distanceToFurthestCorner(x, y, rect) {
        var distX = Math.max(Math.abs(x - rect.left), Math.abs(x - rect.right));
        var distY = Math.max(Math.abs(y - rect.top), Math.abs(y - rect.bottom));
        return Math.sqrt(distX * distX + distY * distY);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Injection token that can be used to specify the global ripple options. */


      var MAT_RIPPLE_GLOBAL_OPTIONS = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('mat-ripple-global-options');

      var MatRipple = /*#__PURE__*/function () {
        function MatRipple(_elementRef, ngZone, platform, globalOptions, _animationMode) {
          _classCallCheck2(this, MatRipple);

          this._elementRef = _elementRef;
          this._animationMode = _animationMode;
          /**
           * If set, the radius in pixels of foreground ripples when fully expanded. If unset, the radius
           * will be the distance from the center of the ripple to the furthest corner of the host element's
           * bounding rectangle.
           */

          this.radius = 0;
          this._disabled = false;
          /** Whether ripple directive is initialized and the input bindings are set. */

          this._isInitialized = false;
          this._globalOptions = globalOptions || {};
          this._rippleRenderer = new RippleRenderer(this, ngZone, _elementRef, platform);
        }
        /**
         * Whether click events will not trigger the ripple. Ripples can be still launched manually
         * by using the `launch()` method.
         */


        _createClass2(MatRipple, [{
          key: "disabled",
          get: function get() {
            return this._disabled;
          },
          set: function set(value) {
            this._disabled = value;

            this._setupTriggerEventsIfEnabled();
          }
          /**
           * The element that triggers the ripple when click events are received.
           * Defaults to the directive's host element.
           */

        }, {
          key: "trigger",
          get: function get() {
            return this._trigger || this._elementRef.nativeElement;
          },
          set: function set(trigger) {
            this._trigger = trigger;

            this._setupTriggerEventsIfEnabled();
          }
        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            this._isInitialized = true;

            this._setupTriggerEventsIfEnabled();
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._rippleRenderer._removeTriggerEvents();
          }
          /** Fades out all currently showing ripple elements. */

        }, {
          key: "fadeOutAll",
          value: function fadeOutAll() {
            this._rippleRenderer.fadeOutAll();
          }
          /**
           * Ripple configuration from the directive's input values.
           * @docs-private Implemented as part of RippleTarget
           */

        }, {
          key: "rippleConfig",
          get: function get() {
            return {
              centered: this.centered,
              radius: this.radius,
              color: this.color,
              animation: Object.assign(Object.assign(Object.assign({}, this._globalOptions.animation), this._animationMode === 'NoopAnimations' ? {
                enterDuration: 0,
                exitDuration: 0
              } : {}), this.animation),
              terminateOnPointerUp: this._globalOptions.terminateOnPointerUp
            };
          }
          /**
           * Whether ripples on pointer-down are disabled or not.
           * @docs-private Implemented as part of RippleTarget
           */

        }, {
          key: "rippleDisabled",
          get: function get() {
            return this.disabled || !!this._globalOptions.disabled;
          }
          /** Sets up the trigger event listeners if ripples are enabled. */

        }, {
          key: "_setupTriggerEventsIfEnabled",
          value: function _setupTriggerEventsIfEnabled() {
            if (!this.disabled && this._isInitialized) {
              this._rippleRenderer.setupTriggerEvents(this.trigger);
            }
          }
          /** Launches a manual ripple at the specified coordinated or just by the ripple config. */

        }, {
          key: "launch",
          value: function launch(configOrX) {
            var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
            var config = arguments.length > 2 ? arguments[2] : undefined;

            if (typeof configOrX === 'number') {
              return this._rippleRenderer.fadeInRipple(configOrX, y, Object.assign(Object.assign({}, this.rippleConfig), config));
            } else {
              return this._rippleRenderer.fadeInRipple(0, 0, Object.assign(Object.assign({}, this.rippleConfig), configOrX));
            }
          }
        }]);

        return MatRipple;
      }();

      MatRipple.ɵfac = function MatRipple_Factory(t) {
        return new (t || MatRipple)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_7__["Platform"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](MAT_RIPPLE_GLOBAL_OPTIONS, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_9__["ANIMATION_MODULE_TYPE"], 8));
      };

      MatRipple.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatRipple,
        selectors: [["", "mat-ripple", ""], ["", "matRipple", ""]],
        hostAttrs: [1, "mat-ripple"],
        hostVars: 2,
        hostBindings: function MatRipple_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("mat-ripple-unbounded", ctx.unbounded);
          }
        },
        inputs: {
          radius: ["matRippleRadius", "radius"],
          disabled: ["matRippleDisabled", "disabled"],
          trigger: ["matRippleTrigger", "trigger"],
          color: ["matRippleColor", "color"],
          unbounded: ["matRippleUnbounded", "unbounded"],
          centered: ["matRippleCentered", "centered"],
          animation: ["matRippleAnimation", "animation"]
        },
        exportAs: ["matRipple"]
      });

      MatRipple.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }, {
          type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_7__["Platform"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [MAT_RIPPLE_GLOBAL_OPTIONS]
          }]
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_9__["ANIMATION_MODULE_TYPE"]]
          }]
        }];
      };

      MatRipple.propDecorators = {
        color: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['matRippleColor']
        }],
        unbounded: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['matRippleUnbounded']
        }],
        centered: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['matRippleCentered']
        }],
        radius: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['matRippleRadius']
        }],
        animation: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['matRippleAnimation']
        }],
        disabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['matRippleDisabled']
        }],
        trigger: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['matRippleTrigger']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatRipple, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[mat-ripple], [matRipple]',
            exportAs: 'matRipple',
            host: {
              'class': 'mat-ripple',
              '[class.mat-ripple-unbounded]': 'unbounded'
            }
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }, {
            type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_7__["Platform"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [MAT_RIPPLE_GLOBAL_OPTIONS]
            }]
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_9__["ANIMATION_MODULE_TYPE"]]
            }]
          }];
        }, {
          radius: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['matRippleRadius']
          }],
          disabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['matRippleDisabled']
          }],
          trigger: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['matRippleTrigger']
          }],
          color: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['matRippleColor']
          }],
          unbounded: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['matRippleUnbounded']
          }],
          centered: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['matRippleCentered']
          }],
          animation: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['matRippleAnimation']
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var MatRippleModule = function MatRippleModule() {
        _classCallCheck2(this, MatRippleModule);
      };

      MatRippleModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: MatRippleModule
      });
      MatRippleModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function MatRippleModule_Factory(t) {
          return new (t || MatRippleModule)();
        },
        imports: [[MatCommonModule, _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_7__["PlatformModule"]], MatCommonModule]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](MatRippleModule, {
          declarations: function declarations() {
            return [MatRipple];
          },
          imports: function imports() {
            return [MatCommonModule, _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_7__["PlatformModule"]];
          },
          exports: function exports() {
            return [MatRipple, MatCommonModule];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatRippleModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            imports: [MatCommonModule, _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_7__["PlatformModule"]],
            exports: [MatRipple, MatCommonModule],
            declarations: [MatRipple]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Component that shows a simplified checkbox without including any kind of "real" checkbox.
       * Meant to be used when the checkbox is purely decorative and a large number of them will be
       * included, such as for the options in a multi-select. Uses no SVGs or complex animations.
       * Note that theming is meant to be handled by the parent element, e.g.
       * `mat-primary .mat-pseudo-checkbox`.
       *
       * Note that this component will be completely invisible to screen-reader users. This is *not*
       * interchangeable with `<mat-checkbox>` and should *not* be used if the user would directly
       * interact with the checkbox. The pseudo-checkbox should only be used as an implementation detail
       * of more complex components that appropriately handle selected / checked state.
       * @docs-private
       */


      var MatPseudoCheckbox = function MatPseudoCheckbox(_animationMode) {
        _classCallCheck2(this, MatPseudoCheckbox);

        this._animationMode = _animationMode;
        /** Display state of the checkbox. */

        this.state = 'unchecked';
        /** Whether the checkbox is disabled. */

        this.disabled = false;
      };

      MatPseudoCheckbox.ɵfac = function MatPseudoCheckbox_Factory(t) {
        return new (t || MatPseudoCheckbox)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_9__["ANIMATION_MODULE_TYPE"], 8));
      };

      MatPseudoCheckbox.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: MatPseudoCheckbox,
        selectors: [["mat-pseudo-checkbox"]],
        hostAttrs: [1, "mat-pseudo-checkbox"],
        hostVars: 8,
        hostBindings: function MatPseudoCheckbox_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("mat-pseudo-checkbox-indeterminate", ctx.state === "indeterminate")("mat-pseudo-checkbox-checked", ctx.state === "checked")("mat-pseudo-checkbox-disabled", ctx.disabled)("_mat-animation-noopable", ctx._animationMode === "NoopAnimations");
          }
        },
        inputs: {
          state: "state",
          disabled: "disabled"
        },
        decls: 0,
        vars: 0,
        template: function MatPseudoCheckbox_Template(rf, ctx) {},
        styles: [".mat-pseudo-checkbox{width:16px;height:16px;border:2px solid;border-radius:2px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0, 0, 0.2, 0.1),background-color 90ms cubic-bezier(0, 0, 0.2, 0.1)}.mat-pseudo-checkbox::after{position:absolute;opacity:0;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0, 0, 0.2, 0.1)}.mat-pseudo-checkbox.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox.mat-pseudo-checkbox-indeterminate{border-color:transparent}._mat-animation-noopable.mat-pseudo-checkbox{transition:none;animation:none}._mat-animation-noopable.mat-pseudo-checkbox::after{transition:none}.mat-pseudo-checkbox-disabled{cursor:default}.mat-pseudo-checkbox-indeterminate::after{top:5px;left:1px;width:10px;opacity:1;border-radius:2px}.mat-pseudo-checkbox-checked::after{top:2.4px;left:1px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box}\n"],
        encapsulation: 2,
        changeDetection: 0
      });

      MatPseudoCheckbox.ctorParameters = function () {
        return [{
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_9__["ANIMATION_MODULE_TYPE"]]
          }]
        }];
      };

      MatPseudoCheckbox.propDecorators = {
        state: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        disabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatPseudoCheckbox, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            selector: 'mat-pseudo-checkbox',
            template: '',
            host: {
              'class': 'mat-pseudo-checkbox',
              '[class.mat-pseudo-checkbox-indeterminate]': 'state === "indeterminate"',
              '[class.mat-pseudo-checkbox-checked]': 'state === "checked"',
              '[class.mat-pseudo-checkbox-disabled]': 'disabled',
              '[class._mat-animation-noopable]': '_animationMode === "NoopAnimations"'
            },
            styles: [".mat-pseudo-checkbox{width:16px;height:16px;border:2px solid;border-radius:2px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0, 0, 0.2, 0.1),background-color 90ms cubic-bezier(0, 0, 0.2, 0.1)}.mat-pseudo-checkbox::after{position:absolute;opacity:0;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0, 0, 0.2, 0.1)}.mat-pseudo-checkbox.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox.mat-pseudo-checkbox-indeterminate{border-color:transparent}._mat-animation-noopable.mat-pseudo-checkbox{transition:none;animation:none}._mat-animation-noopable.mat-pseudo-checkbox::after{transition:none}.mat-pseudo-checkbox-disabled{cursor:default}.mat-pseudo-checkbox-indeterminate::after{top:5px;left:1px;width:10px;opacity:1;border-radius:2px}.mat-pseudo-checkbox-checked::after{top:2.4px;left:1px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box}\n"]
          }]
        }], function () {
          return [{
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_9__["ANIMATION_MODULE_TYPE"]]
            }]
          }];
        }, {
          state: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          disabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var MatPseudoCheckboxModule = function MatPseudoCheckboxModule() {
        _classCallCheck2(this, MatPseudoCheckboxModule);
      };

      MatPseudoCheckboxModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: MatPseudoCheckboxModule
      });
      MatPseudoCheckboxModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function MatPseudoCheckboxModule_Factory(t) {
          return new (t || MatPseudoCheckboxModule)();
        },
        imports: [[MatCommonModule]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](MatPseudoCheckboxModule, {
          declarations: [MatPseudoCheckbox],
          imports: [MatCommonModule],
          exports: [MatPseudoCheckbox]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatPseudoCheckboxModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            imports: [MatCommonModule],
            exports: [MatPseudoCheckbox],
            declarations: [MatPseudoCheckbox]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Injection token used to provide the parent component to options.
       */


      var MAT_OPTION_PARENT_COMPONENT = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('MAT_OPTION_PARENT_COMPONENT');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // Notes on the accessibility pattern used for `mat-optgroup`.
      // The option group has two different "modes": regular and inert. The regular mode uses the
      // recommended a11y pattern which has `role="group"` on the group element with `aria-labelledby`
      // pointing to the label. This works for `mat-select`, but it seems to hit a bug for autocomplete
      // under VoiceOver where the group doesn't get read out at all. The bug appears to be that if
      // there's __any__ a11y-related attribute on the group (e.g. `role` or `aria-labelledby`),
      // VoiceOver on Safari won't read it out.
      // We've introduced the `inert` mode as a workaround. Under this mode, all a11y attributes are
      // removed from the group, and we get the screen reader to read out the group label by mirroring it
      // inside an invisible element in the option. This is sub-optimal, because the screen reader will
      // repeat the group label on each navigation, whereas the default pattern only reads the group when
      // the user enters a new group. The following alternate approaches were considered:
      // 1. Reading out the group label using the `LiveAnnouncer` solves the problem, but we can't control
      //    when the text will be read out so sometimes it comes in too late or never if the user
      //    navigates quickly.
      // 2. `<mat-option aria-describedby="groupLabel"` - This works on Safari, but VoiceOver in Chrome
      //    won't read out the description at all.
      // 3. `<mat-option aria-labelledby="optionLabel groupLabel"` - This works on Chrome, but Safari
      //     doesn't read out the text at all. Furthermore, on
      // Boilerplate for applying mixins to MatOptgroup.

      /** @docs-private */

      var MatOptgroupBase = function MatOptgroupBase() {
        _classCallCheck2(this, MatOptgroupBase);
      };

      var _MatOptgroupMixinBase = mixinDisabled(MatOptgroupBase); // Counter for unique group ids.


      var _uniqueOptgroupIdCounter = 0;

      var _MatOptgroupBase = /*#__PURE__*/function (_MatOptgroupMixinBase2) {
        _inherits2(_MatOptgroupBase, _MatOptgroupMixinBase2);

        var _super223 = _createSuper(_MatOptgroupBase);

        function _MatOptgroupBase(parent) {
          var _this544;

          _classCallCheck2(this, _MatOptgroupBase);

          var _a;

          _this544 = _super223.call(this);
          /** Unique id for the underlying label. */

          _this544._labelId = "mat-optgroup-label-".concat(_uniqueOptgroupIdCounter++);
          _this544._inert = (_a = parent === null || parent === void 0 ? void 0 : parent.inertGroups) !== null && _a !== void 0 ? _a : false;
          return _this544;
        }

        return _MatOptgroupBase;
      }(_MatOptgroupMixinBase);

      _MatOptgroupBase.ɵfac = function _MatOptgroupBase_Factory(t) {
        return new (t || _MatOptgroupBase)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](MAT_OPTION_PARENT_COMPONENT, 8));
      };

      _MatOptgroupBase.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: _MatOptgroupBase,
        inputs: {
          label: "label"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]]
      });

      _MatOptgroupBase.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [MAT_OPTION_PARENT_COMPONENT]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }]
        }];
      };

      _MatOptgroupBase.propDecorators = {
        label: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](_MatOptgroupBase, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [MAT_OPTION_PARENT_COMPONENT]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }]
          }];
        }, {
          label: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * Injection token that can be used to reference instances of `MatOptgroup`. It serves as
       * alternative token to the actual `MatOptgroup` class which could cause unnecessary
       * retention of the class and its component metadata.
       */


      var MAT_OPTGROUP = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('MatOptgroup');
      /**
       * Component that is used to group instances of `mat-option`.
       */

      var MatOptgroup = /*#__PURE__*/function (_MatOptgroupBase2) {
        _inherits2(MatOptgroup, _MatOptgroupBase2);

        var _super224 = _createSuper(MatOptgroup);

        function MatOptgroup() {
          _classCallCheck2(this, MatOptgroup);

          return _super224.apply(this, arguments);
        }

        return MatOptgroup;
      }(_MatOptgroupBase);

      MatOptgroup.ɵfac = function MatOptgroup_Factory(t) {
        return ɵMatOptgroup_BaseFactory(t || MatOptgroup);
      };

      MatOptgroup.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: MatOptgroup,
        selectors: [["mat-optgroup"]],
        hostAttrs: [1, "mat-optgroup"],
        hostVars: 5,
        hostBindings: function MatOptgroup_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("role", ctx._inert ? null : "group")("aria-disabled", ctx._inert ? null : ctx.disabled.toString())("aria-labelledby", ctx._inert ? null : ctx._labelId);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("mat-optgroup-disabled", ctx.disabled);
          }
        },
        inputs: {
          disabled: "disabled"
        },
        exportAs: ["matOptgroup"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: MAT_OPTGROUP,
          useExisting: MatOptgroup
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]],
        ngContentSelectors: _c1,
        decls: 4,
        vars: 2,
        consts: [[1, "mat-optgroup-label", 3, "id"]],
        template: function MatOptgroup_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"](_c0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "label", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](3, 1);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("id", ctx._labelId);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"]("", ctx.label, " ");
          }
        },
        styles: [".mat-optgroup-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;line-height:48px;height:48px;padding:0 16px;text-align:left;text-decoration:none;max-width:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.mat-optgroup-label[disabled]{cursor:default}[dir=rtl] .mat-optgroup-label{text-align:right}.mat-optgroup-label .mat-icon{margin-right:16px;vertical-align:middle}.mat-optgroup-label .mat-icon svg{vertical-align:top}[dir=rtl] .mat-optgroup-label .mat-icon{margin-left:16px;margin-right:0}\n"],
        encapsulation: 2,
        changeDetection: 0
      });

      var ɵMatOptgroup_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetInheritedFactory"](MatOptgroup);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatOptgroup, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'mat-optgroup',
            exportAs: 'matOptgroup',
            template: "<label class=\"mat-optgroup-label\" [id]=\"_labelId\">{{ label }} <ng-content></ng-content></label>\n<ng-content select=\"mat-option, ng-container\"></ng-content>\n",
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            inputs: ['disabled'],
            host: {
              'class': 'mat-optgroup',
              '[attr.role]': '_inert ? null : "group"',
              '[attr.aria-disabled]': '_inert ? null : disabled.toString()',
              '[attr.aria-labelledby]': '_inert ? null : _labelId',
              '[class.mat-optgroup-disabled]': 'disabled'
            },
            providers: [{
              provide: MAT_OPTGROUP,
              useExisting: MatOptgroup
            }],
            styles: [".mat-optgroup-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;line-height:48px;height:48px;padding:0 16px;text-align:left;text-decoration:none;max-width:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.mat-optgroup-label[disabled]{cursor:default}[dir=rtl] .mat-optgroup-label{text-align:right}.mat-optgroup-label .mat-icon{margin-right:16px;vertical-align:middle}.mat-optgroup-label .mat-icon svg{vertical-align:top}[dir=rtl] .mat-optgroup-label .mat-icon{margin-left:16px;margin-right:0}\n"]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Option IDs need to be unique across components, so this counter exists outside of
       * the component definition.
       */


      var _uniqueIdCounter = 0;
      /** Event object emitted by MatOption when selected or deselected. */

      var MatOptionSelectionChange = function MatOptionSelectionChange(
      /** Reference to the option that emitted the event. */
      source) {
        var isUserInput = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;

        _classCallCheck2(this, MatOptionSelectionChange);

        this.source = source;
        this.isUserInput = isUserInput;
      };

      var _MatOptionBase = /*#__PURE__*/function () {
        function _MatOptionBase(_element, _changeDetectorRef, _parent, group) {
          _classCallCheck2(this, _MatOptionBase);

          this._element = _element;
          this._changeDetectorRef = _changeDetectorRef;
          this._parent = _parent;
          this.group = group;
          this._selected = false;
          this._active = false;
          this._disabled = false;
          this._mostRecentViewValue = '';
          /** The unique ID of the option. */

          this.id = "mat-option-".concat(_uniqueIdCounter++);
          /** Event emitted when the option is selected or deselected. */
          // tslint:disable-next-line:no-output-on-prefix

          this.onSelectionChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /** Emits when the state of the option changes and any parents have to be notified. */

          this._stateChanges = new rxjs__WEBPACK_IMPORTED_MODULE_6__["Subject"]();
        }
        /** Whether the wrapping component is in multiple selection mode. */


        _createClass2(_MatOptionBase, [{
          key: "multiple",
          get: function get() {
            return this._parent && this._parent.multiple;
          }
          /** Whether or not the option is currently selected. */

        }, {
          key: "selected",
          get: function get() {
            return this._selected;
          }
          /** Whether the option is disabled. */

        }, {
          key: "disabled",
          get: function get() {
            return this.group && this.group.disabled || this._disabled;
          },
          set: function set(value) {
            this._disabled = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceBooleanProperty"])(value);
          }
          /** Whether ripples for the option are disabled. */

        }, {
          key: "disableRipple",
          get: function get() {
            return this._parent && this._parent.disableRipple;
          }
          /**
           * Whether or not the option is currently active and ready to be selected.
           * An active option displays styles as if it is focused, but the
           * focus is actually retained somewhere else. This comes in handy
           * for components like autocomplete where focus must remain on the input.
           */

        }, {
          key: "active",
          get: function get() {
            return this._active;
          }
          /**
           * The displayed value of the option. It is necessary to show the selected option in the
           * select's trigger.
           */

        }, {
          key: "viewValue",
          get: function get() {
            // TODO(kara): Add input property alternative for node envs.
            return (this._getHostElement().textContent || '').trim();
          }
          /** Selects the option. */

        }, {
          key: "select",
          value: function select() {
            if (!this._selected) {
              this._selected = true;

              this._changeDetectorRef.markForCheck();

              this._emitSelectionChangeEvent();
            }
          }
          /** Deselects the option. */

        }, {
          key: "deselect",
          value: function deselect() {
            if (this._selected) {
              this._selected = false;

              this._changeDetectorRef.markForCheck();

              this._emitSelectionChangeEvent();
            }
          }
          /** Sets focus onto this option. */

        }, {
          key: "focus",
          value: function focus(_origin, options) {
            // Note that we aren't using `_origin`, but we need to keep it because some internal consumers
            // use `MatOption` in a `FocusKeyManager` and we need it to match `FocusableOption`.
            var element = this._getHostElement();

            if (typeof element.focus === 'function') {
              element.focus(options);
            }
          }
          /**
           * This method sets display styles on the option to make it appear
           * active. This is used by the ActiveDescendantKeyManager so key
           * events will display the proper options as active on arrow key events.
           */

        }, {
          key: "setActiveStyles",
          value: function setActiveStyles() {
            if (!this._active) {
              this._active = true;

              this._changeDetectorRef.markForCheck();
            }
          }
          /**
           * This method removes display styles on the option that made it appear
           * active. This is used by the ActiveDescendantKeyManager so key
           * events will display the proper options as active on arrow key events.
           */

        }, {
          key: "setInactiveStyles",
          value: function setInactiveStyles() {
            if (this._active) {
              this._active = false;

              this._changeDetectorRef.markForCheck();
            }
          }
          /** Gets the label to be used when determining whether the option should be focused. */

        }, {
          key: "getLabel",
          value: function getLabel() {
            return this.viewValue;
          }
          /** Ensures the option is selected when activated from the keyboard. */

        }, {
          key: "_handleKeydown",
          value: function _handleKeydown(event) {
            if ((event.keyCode === _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_10__["ENTER"] || event.keyCode === _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_10__["SPACE"]) && !Object(_angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_10__["hasModifierKey"])(event)) {
              this._selectViaInteraction(); // Prevent the page from scrolling down and form submits.


              event.preventDefault();
            }
          }
          /**
           * `Selects the option while indicating the selection came from the user. Used to
           * determine if the select's view -> model callback should be invoked.`
           */

        }, {
          key: "_selectViaInteraction",
          value: function _selectViaInteraction() {
            if (!this.disabled) {
              this._selected = this.multiple ? !this._selected : true;

              this._changeDetectorRef.markForCheck();

              this._emitSelectionChangeEvent(true);
            }
          }
          /**
           * Gets the `aria-selected` value for the option. We explicitly omit the `aria-selected`
           * attribute from single-selection, unselected options. Including the `aria-selected="false"`
           * attributes adds a significant amount of noise to screen-reader users without providing useful
           * information.
           */

        }, {
          key: "_getAriaSelected",
          value: function _getAriaSelected() {
            return this.selected || (this.multiple ? false : null);
          }
          /** Returns the correct tabindex for the option depending on disabled state. */

        }, {
          key: "_getTabIndex",
          value: function _getTabIndex() {
            return this.disabled ? '-1' : '0';
          }
          /** Gets the host DOM element. */

        }, {
          key: "_getHostElement",
          value: function _getHostElement() {
            return this._element.nativeElement;
          }
        }, {
          key: "ngAfterViewChecked",
          value: function ngAfterViewChecked() {
            // Since parent components could be using the option's label to display the selected values
            // (e.g. `mat-select`) and they don't have a way of knowing if the option's label has changed
            // we have to check for changes in the DOM ourselves and dispatch an event. These checks are
            // relatively cheap, however we still limit them only to selected options in order to avoid
            // hitting the DOM too often.
            if (this._selected) {
              var viewValue = this.viewValue;

              if (viewValue !== this._mostRecentViewValue) {
                this._mostRecentViewValue = viewValue;

                this._stateChanges.next();
              }
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._stateChanges.complete();
          }
          /** Emits the selection change event. */

        }, {
          key: "_emitSelectionChangeEvent",
          value: function _emitSelectionChangeEvent() {
            var isUserInput = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
            this.onSelectionChange.emit(new MatOptionSelectionChange(this, isUserInput));
          }
        }]);

        return _MatOptionBase;
      }();

      _MatOptionBase.ɵfac = function _MatOptionBase_Factory(t) {
        return new (t || _MatOptionBase)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](undefined), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_MatOptgroupBase));
      };

      _MatOptionBase.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: _MatOptionBase,
        inputs: {
          id: "id",
          disabled: "disabled",
          value: "value"
        },
        outputs: {
          onSelectionChange: "onSelectionChange"
        }
      });

      _MatOptionBase.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }, {
          type: undefined
        }, {
          type: _MatOptgroupBase
        }];
      };

      _MatOptionBase.propDecorators = {
        value: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        id: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        disabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        onSelectionChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](_MatOptionBase, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }, {
            type: undefined
          }, {
            type: _MatOptgroupBase
          }];
        }, {
          id: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          onSelectionChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          disabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          value: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * Single option inside of a `<mat-select>` element.
       */


      var MatOption = /*#__PURE__*/function (_MatOptionBase2) {
        _inherits2(MatOption, _MatOptionBase2);

        var _super225 = _createSuper(MatOption);

        function MatOption(element, changeDetectorRef, parent, group) {
          _classCallCheck2(this, MatOption);

          return _super225.call(this, element, changeDetectorRef, parent, group);
        }

        return MatOption;
      }(_MatOptionBase);

      MatOption.ɵfac = function MatOption_Factory(t) {
        return new (t || MatOption)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](MAT_OPTION_PARENT_COMPONENT, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](MAT_OPTGROUP, 8));
      };

      MatOption.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: MatOption,
        selectors: [["mat-option"]],
        hostAttrs: ["role", "option", 1, "mat-option", "mat-focus-indicator"],
        hostVars: 12,
        hostBindings: function MatOption_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function MatOption_click_HostBindingHandler() {
              return ctx._selectViaInteraction();
            })("keydown", function MatOption_keydown_HostBindingHandler($event) {
              return ctx._handleKeydown($event);
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("id", ctx.id);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("tabindex", ctx._getTabIndex())("aria-selected", ctx._getAriaSelected())("aria-disabled", ctx.disabled.toString());

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("mat-selected", ctx.selected)("mat-option-multiple", ctx.multiple)("mat-active", ctx.active)("mat-option-disabled", ctx.disabled);
          }
        },
        exportAs: ["matOption"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]],
        ngContentSelectors: _c2,
        decls: 5,
        vars: 4,
        consts: [["class", "mat-option-pseudo-checkbox", 3, "state", "disabled", 4, "ngIf"], [1, "mat-option-text"], ["class", "cdk-visually-hidden", 4, "ngIf"], ["mat-ripple", "", 1, "mat-option-ripple", 3, "matRippleTrigger", "matRippleDisabled"], [1, "mat-option-pseudo-checkbox", 3, "state", "disabled"], [1, "cdk-visually-hidden"]],
        template: function MatOption_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, MatOption_mat_pseudo_checkbox_0_Template, 1, 2, "mat-pseudo-checkbox", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "span", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, MatOption_span_3_Template, 2, 1, "span", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](4, "div", 3);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.multiple);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.group && ctx.group._inert);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("matRippleTrigger", ctx._getHostElement())("matRippleDisabled", ctx.disabled || ctx.disableRipple);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["NgIf"], MatRipple, MatPseudoCheckbox],
        styles: [".mat-option{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;line-height:48px;height:48px;padding:0 16px;text-align:left;text-decoration:none;max-width:100%;position:relative;cursor:pointer;outline:none;display:flex;flex-direction:row;max-width:100%;box-sizing:border-box;align-items:center;-webkit-tap-highlight-color:transparent}.mat-option[disabled]{cursor:default}[dir=rtl] .mat-option{text-align:right}.mat-option .mat-icon{margin-right:16px;vertical-align:middle}.mat-option .mat-icon svg{vertical-align:top}[dir=rtl] .mat-option .mat-icon{margin-left:16px;margin-right:0}.mat-option[aria-disabled=true]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.mat-optgroup .mat-option:not(.mat-option-multiple){padding-left:32px}[dir=rtl] .mat-optgroup .mat-option:not(.mat-option-multiple){padding-left:16px;padding-right:32px}.cdk-high-contrast-active .mat-option{margin:0 1px}.cdk-high-contrast-active .mat-option.mat-active{border:solid 1px currentColor;margin:0}.cdk-high-contrast-active .mat-option[aria-disabled=true]{opacity:.5}.mat-option-text{display:inline-block;flex-grow:1;overflow:hidden;text-overflow:ellipsis}.mat-option .mat-option-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-option-pseudo-checkbox{margin-right:8px}[dir=rtl] .mat-option-pseudo-checkbox{margin-left:8px;margin-right:0}\n"],
        encapsulation: 2,
        changeDetection: 0
      });

      MatOption.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [MAT_OPTION_PARENT_COMPONENT]
          }]
        }, {
          type: MatOptgroup,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [MAT_OPTGROUP]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatOption, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'mat-option',
            exportAs: 'matOption',
            host: {
              'role': 'option',
              '[attr.tabindex]': '_getTabIndex()',
              '[class.mat-selected]': 'selected',
              '[class.mat-option-multiple]': 'multiple',
              '[class.mat-active]': 'active',
              '[id]': 'id',
              '[attr.aria-selected]': '_getAriaSelected()',
              '[attr.aria-disabled]': 'disabled.toString()',
              '[class.mat-option-disabled]': 'disabled',
              '(click)': '_selectViaInteraction()',
              '(keydown)': '_handleKeydown($event)',
              'class': 'mat-option mat-focus-indicator'
            },
            template: "<mat-pseudo-checkbox *ngIf=\"multiple\" class=\"mat-option-pseudo-checkbox\"\n    [state]=\"selected ? 'checked' : 'unchecked'\" [disabled]=\"disabled\"></mat-pseudo-checkbox>\n\n<span class=\"mat-option-text\"><ng-content></ng-content></span>\n\n<!-- See a11y notes inside optgroup.ts for context behind this element. -->\n<span class=\"cdk-visually-hidden\" *ngIf=\"group && group._inert\">({{ group.label }})</span>\n\n<div class=\"mat-option-ripple\" mat-ripple\n     [matRippleTrigger]=\"_getHostElement()\"\n     [matRippleDisabled]=\"disabled || disableRipple\">\n</div>\n",
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            styles: [".mat-option{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;line-height:48px;height:48px;padding:0 16px;text-align:left;text-decoration:none;max-width:100%;position:relative;cursor:pointer;outline:none;display:flex;flex-direction:row;max-width:100%;box-sizing:border-box;align-items:center;-webkit-tap-highlight-color:transparent}.mat-option[disabled]{cursor:default}[dir=rtl] .mat-option{text-align:right}.mat-option .mat-icon{margin-right:16px;vertical-align:middle}.mat-option .mat-icon svg{vertical-align:top}[dir=rtl] .mat-option .mat-icon{margin-left:16px;margin-right:0}.mat-option[aria-disabled=true]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.mat-optgroup .mat-option:not(.mat-option-multiple){padding-left:32px}[dir=rtl] .mat-optgroup .mat-option:not(.mat-option-multiple){padding-left:16px;padding-right:32px}.cdk-high-contrast-active .mat-option{margin:0 1px}.cdk-high-contrast-active .mat-option.mat-active{border:solid 1px currentColor;margin:0}.cdk-high-contrast-active .mat-option[aria-disabled=true]{opacity:.5}.mat-option-text{display:inline-block;flex-grow:1;overflow:hidden;text-overflow:ellipsis}.mat-option .mat-option-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-option-pseudo-checkbox{margin-right:8px}[dir=rtl] .mat-option-pseudo-checkbox{margin-left:8px;margin-right:0}\n"]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [MAT_OPTION_PARENT_COMPONENT]
            }]
          }, {
            type: MatOptgroup,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [MAT_OPTGROUP]
            }]
          }];
        }, null);
      })();
      /**
       * Counts the amount of option group labels that precede the specified option.
       * @param optionIndex Index of the option at which to start counting.
       * @param options Flat list of all of the options.
       * @param optionGroups Flat list of all of the option groups.
       * @docs-private
       */


      function _countGroupLabelsBeforeOption(optionIndex, options, optionGroups) {
        if (optionGroups.length) {
          var optionsArray = options.toArray();
          var groups = optionGroups.toArray();
          var groupCounter = 0;

          for (var i = 0; i < optionIndex + 1; i++) {
            if (optionsArray[i].group && optionsArray[i].group === groups[groupCounter]) {
              groupCounter++;
            }
          }

          return groupCounter;
        }

        return 0;
      }
      /**
       * Determines the position to which to scroll a panel in order for an option to be into view.
       * @param optionOffset Offset of the option from the top of the panel.
       * @param optionHeight Height of the options.
       * @param currentScrollPosition Current scroll position of the panel.
       * @param panelHeight Height of the panel.
       * @docs-private
       */


      function _getOptionScrollPosition(optionOffset, optionHeight, currentScrollPosition, panelHeight) {
        if (optionOffset < currentScrollPosition) {
          return optionOffset;
        }

        if (optionOffset + optionHeight > currentScrollPosition + panelHeight) {
          return Math.max(0, optionOffset - panelHeight + optionHeight);
        }

        return currentScrollPosition;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var MatOptionModule = function MatOptionModule() {
        _classCallCheck2(this, MatOptionModule);
      };

      MatOptionModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: MatOptionModule
      });
      MatOptionModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function MatOptionModule_Factory(t) {
          return new (t || MatOptionModule)();
        },
        imports: [[MatRippleModule, _angular_common__WEBPACK_IMPORTED_MODULE_4__["CommonModule"], MatCommonModule, MatPseudoCheckboxModule]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](MatOptionModule, {
          declarations: function declarations() {
            return [MatOption, MatOptgroup];
          },
          imports: function imports() {
            return [MatRippleModule, _angular_common__WEBPACK_IMPORTED_MODULE_4__["CommonModule"], MatCommonModule, MatPseudoCheckboxModule];
          },
          exports: function exports() {
            return [MatOption, MatOptgroup];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatOptionModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            imports: [MatRippleModule, _angular_common__WEBPACK_IMPORTED_MODULE_4__["CommonModule"], MatCommonModule, MatPseudoCheckboxModule],
            exports: [MatOption, MatOptgroup],
            declarations: [MatOption, MatOptgroup]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=core.js.map

      /***/

    },

    /***/
    "FQVY":
    /*!*************************************************!*\
      !*** ./node_modules/aws-sdk/apis/metadata.json ***!
      \*************************************************/

    /*! exports provided: acm, apigateway, applicationautoscaling, appstream, autoscaling, batch, budgets, clouddirectory, cloudformation, cloudfront, cloudhsm, cloudsearch, cloudsearchdomain, cloudtrail, cloudwatch, cloudwatchevents, cloudwatchlogs, codebuild, codecommit, codedeploy, codepipeline, cognitoidentity, cognitoidentityserviceprovider, cognitosync, configservice, cur, datapipeline, devicefarm, directconnect, directoryservice, discovery, dms, dynamodb, dynamodbstreams, ec2, ecr, ecs, efs, elasticache, elasticbeanstalk, elb, elbv2, emr, es, elastictranscoder, firehose, gamelift, glacier, health, iam, importexport, inspector, iot, iotdata, kinesis, kinesisanalytics, kms, lambda, lexruntime, lightsail, machinelearning, marketplacecommerceanalytics, marketplacemetering, mturk, mobileanalytics, opsworks, opsworkscm, organizations, pinpoint, polly, rds, redshift, rekognition, resourcegroupstaggingapi, route53, route53domains, s3, s3control, servicecatalog, ses, shield, simpledb, sms, snowball, sns, sqs, ssm, storagegateway, stepfunctions, sts, support, swf, xray, waf, wafregional, workdocs, workspaces, codestar, lexmodelbuildingservice, marketplaceentitlementservice, athena, greengrass, dax, migrationhub, cloudhsmv2, glue, mobile, pricing, costexplorer, mediaconvert, medialive, mediapackage, mediastore, mediastoredata, appsync, guardduty, mq, comprehend, iotjobsdataplane, kinesisvideoarchivedmedia, kinesisvideomedia, kinesisvideo, sagemakerruntime, sagemaker, translate, resourcegroups, alexaforbusiness, cloud9, serverlessapplicationrepository, servicediscovery, workmail, autoscalingplans, transcribeservice, connect, acmpca, fms, secretsmanager, iotanalytics, iot1clickdevicesservice, iot1clickprojects, pi, neptune, mediatailor, eks, macie, dlm, signer, chime, pinpointemail, ram, route53resolver, pinpointsmsvoice, quicksight, rdsdataservice, amplify, datasync, robomaker, transfer, globalaccelerator, comprehendmedical, kinesisanalyticsv2, mediaconnect, fsx, securityhub, appmesh, licensemanager, kafka, apigatewaymanagementapi, apigatewayv2, docdb, backup, worklink, textract, managedblockchain, mediapackagevod, groundstation, iotthingsgraph, iotevents, ioteventsdata, personalize, personalizeevents, personalizeruntime, applicationinsights, servicequotas, ec2instanceconnect, eventbridge, lakeformation, forecastservice, forecastqueryservice, qldb, qldbsession, workmailmessageflow, codestarnotifications, savingsplans, sso, ssooidc, marketplacecatalog, dataexchange, sesv2, migrationhubconfig, connectparticipant, appconfig, iotsecuretunneling, wafv2, elasticinference, imagebuilder, schemas, accessanalyzer, codegurureviewer, codeguruprofiler, computeoptimizer, frauddetector, kendra, networkmanager, outposts, augmentedairuntime, ebs, kinesisvideosignalingchannels, detective, codestarconnections, synthetics, iotsitewise, macie2, codeartifact, honeycode, ivs, braket, identitystore, appflow, redshiftdata, ssoadmin, timestreamquery, timestreamwrite, s3outposts, databrew, servicecatalogappregistry, networkfirewall, mwaa, amplifybackend, appintegrations, connectcontactlens, devopsguru, ecrpublic, lookoutvision, sagemakerfeaturestoreruntime, customerprofiles, auditmanager, emrcontainers, healthlake, sagemakeredge, amp, greengrassv2, iotdeviceadvisor, iotfleethub, iotwireless, location, wellarchitected, lexmodelsv2, lexruntimev2, default */

    /***/
    function FQVY(module) {
      module.exports = JSON.parse("{\"acm\":{\"name\":\"ACM\",\"cors\":true},\"apigateway\":{\"name\":\"APIGateway\",\"cors\":true},\"applicationautoscaling\":{\"prefix\":\"application-autoscaling\",\"name\":\"ApplicationAutoScaling\",\"cors\":true},\"appstream\":{\"name\":\"AppStream\"},\"autoscaling\":{\"name\":\"AutoScaling\",\"cors\":true},\"batch\":{\"name\":\"Batch\"},\"budgets\":{\"name\":\"Budgets\"},\"clouddirectory\":{\"name\":\"CloudDirectory\",\"versions\":[\"2016-05-10*\"]},\"cloudformation\":{\"name\":\"CloudFormation\",\"cors\":true},\"cloudfront\":{\"name\":\"CloudFront\",\"versions\":[\"2013-05-12*\",\"2013-11-11*\",\"2014-05-31*\",\"2014-10-21*\",\"2014-11-06*\",\"2015-04-17*\",\"2015-07-27*\",\"2015-09-17*\",\"2016-01-13*\",\"2016-01-28*\",\"2016-08-01*\",\"2016-08-20*\",\"2016-09-07*\",\"2016-09-29*\",\"2016-11-25*\",\"2017-03-25*\",\"2017-10-30*\",\"2018-06-18*\",\"2018-11-05*\",\"2019-03-26*\"],\"cors\":true},\"cloudhsm\":{\"name\":\"CloudHSM\",\"cors\":true},\"cloudsearch\":{\"name\":\"CloudSearch\"},\"cloudsearchdomain\":{\"name\":\"CloudSearchDomain\"},\"cloudtrail\":{\"name\":\"CloudTrail\",\"cors\":true},\"cloudwatch\":{\"prefix\":\"monitoring\",\"name\":\"CloudWatch\",\"cors\":true},\"cloudwatchevents\":{\"prefix\":\"events\",\"name\":\"CloudWatchEvents\",\"versions\":[\"2014-02-03*\"],\"cors\":true},\"cloudwatchlogs\":{\"prefix\":\"logs\",\"name\":\"CloudWatchLogs\",\"cors\":true},\"codebuild\":{\"name\":\"CodeBuild\",\"cors\":true},\"codecommit\":{\"name\":\"CodeCommit\",\"cors\":true},\"codedeploy\":{\"name\":\"CodeDeploy\",\"cors\":true},\"codepipeline\":{\"name\":\"CodePipeline\",\"cors\":true},\"cognitoidentity\":{\"prefix\":\"cognito-identity\",\"name\":\"CognitoIdentity\",\"cors\":true},\"cognitoidentityserviceprovider\":{\"prefix\":\"cognito-idp\",\"name\":\"CognitoIdentityServiceProvider\",\"cors\":true},\"cognitosync\":{\"prefix\":\"cognito-sync\",\"name\":\"CognitoSync\",\"cors\":true},\"configservice\":{\"prefix\":\"config\",\"name\":\"ConfigService\",\"cors\":true},\"cur\":{\"name\":\"CUR\",\"cors\":true},\"datapipeline\":{\"name\":\"DataPipeline\"},\"devicefarm\":{\"name\":\"DeviceFarm\",\"cors\":true},\"directconnect\":{\"name\":\"DirectConnect\",\"cors\":true},\"directoryservice\":{\"prefix\":\"ds\",\"name\":\"DirectoryService\"},\"discovery\":{\"name\":\"Discovery\"},\"dms\":{\"name\":\"DMS\"},\"dynamodb\":{\"name\":\"DynamoDB\",\"cors\":true},\"dynamodbstreams\":{\"prefix\":\"streams.dynamodb\",\"name\":\"DynamoDBStreams\",\"cors\":true},\"ec2\":{\"name\":\"EC2\",\"versions\":[\"2013-06-15*\",\"2013-10-15*\",\"2014-02-01*\",\"2014-05-01*\",\"2014-06-15*\",\"2014-09-01*\",\"2014-10-01*\",\"2015-03-01*\",\"2015-04-15*\",\"2015-10-01*\",\"2016-04-01*\",\"2016-09-15*\"],\"cors\":true},\"ecr\":{\"name\":\"ECR\",\"cors\":true},\"ecs\":{\"name\":\"ECS\",\"cors\":true},\"efs\":{\"prefix\":\"elasticfilesystem\",\"name\":\"EFS\",\"cors\":true},\"elasticache\":{\"name\":\"ElastiCache\",\"versions\":[\"2012-11-15*\",\"2014-03-24*\",\"2014-07-15*\",\"2014-09-30*\"],\"cors\":true},\"elasticbeanstalk\":{\"name\":\"ElasticBeanstalk\",\"cors\":true},\"elb\":{\"prefix\":\"elasticloadbalancing\",\"name\":\"ELB\",\"cors\":true},\"elbv2\":{\"prefix\":\"elasticloadbalancingv2\",\"name\":\"ELBv2\",\"cors\":true},\"emr\":{\"prefix\":\"elasticmapreduce\",\"name\":\"EMR\",\"cors\":true},\"es\":{\"name\":\"ES\"},\"elastictranscoder\":{\"name\":\"ElasticTranscoder\",\"cors\":true},\"firehose\":{\"name\":\"Firehose\",\"cors\":true},\"gamelift\":{\"name\":\"GameLift\",\"cors\":true},\"glacier\":{\"name\":\"Glacier\"},\"health\":{\"name\":\"Health\"},\"iam\":{\"name\":\"IAM\",\"cors\":true},\"importexport\":{\"name\":\"ImportExport\"},\"inspector\":{\"name\":\"Inspector\",\"versions\":[\"2015-08-18*\"],\"cors\":true},\"iot\":{\"name\":\"Iot\",\"cors\":true},\"iotdata\":{\"prefix\":\"iot-data\",\"name\":\"IotData\",\"cors\":true},\"kinesis\":{\"name\":\"Kinesis\",\"cors\":true},\"kinesisanalytics\":{\"name\":\"KinesisAnalytics\"},\"kms\":{\"name\":\"KMS\",\"cors\":true},\"lambda\":{\"name\":\"Lambda\",\"cors\":true},\"lexruntime\":{\"prefix\":\"runtime.lex\",\"name\":\"LexRuntime\",\"cors\":true},\"lightsail\":{\"name\":\"Lightsail\"},\"machinelearning\":{\"name\":\"MachineLearning\",\"cors\":true},\"marketplacecommerceanalytics\":{\"name\":\"MarketplaceCommerceAnalytics\",\"cors\":true},\"marketplacemetering\":{\"prefix\":\"meteringmarketplace\",\"name\":\"MarketplaceMetering\"},\"mturk\":{\"prefix\":\"mturk-requester\",\"name\":\"MTurk\",\"cors\":true},\"mobileanalytics\":{\"name\":\"MobileAnalytics\",\"cors\":true},\"opsworks\":{\"name\":\"OpsWorks\",\"cors\":true},\"opsworkscm\":{\"name\":\"OpsWorksCM\"},\"organizations\":{\"name\":\"Organizations\"},\"pinpoint\":{\"name\":\"Pinpoint\"},\"polly\":{\"name\":\"Polly\",\"cors\":true},\"rds\":{\"name\":\"RDS\",\"versions\":[\"2014-09-01*\"],\"cors\":true},\"redshift\":{\"name\":\"Redshift\",\"cors\":true},\"rekognition\":{\"name\":\"Rekognition\",\"cors\":true},\"resourcegroupstaggingapi\":{\"name\":\"ResourceGroupsTaggingAPI\"},\"route53\":{\"name\":\"Route53\",\"cors\":true},\"route53domains\":{\"name\":\"Route53Domains\",\"cors\":true},\"s3\":{\"name\":\"S3\",\"dualstackAvailable\":true,\"cors\":true},\"s3control\":{\"name\":\"S3Control\",\"dualstackAvailable\":true,\"xmlNoDefaultLists\":true},\"servicecatalog\":{\"name\":\"ServiceCatalog\",\"cors\":true},\"ses\":{\"prefix\":\"email\",\"name\":\"SES\",\"cors\":true},\"shield\":{\"name\":\"Shield\"},\"simpledb\":{\"prefix\":\"sdb\",\"name\":\"SimpleDB\"},\"sms\":{\"name\":\"SMS\"},\"snowball\":{\"name\":\"Snowball\"},\"sns\":{\"name\":\"SNS\",\"cors\":true},\"sqs\":{\"name\":\"SQS\",\"cors\":true},\"ssm\":{\"name\":\"SSM\",\"cors\":true},\"storagegateway\":{\"name\":\"StorageGateway\",\"cors\":true},\"stepfunctions\":{\"prefix\":\"states\",\"name\":\"StepFunctions\"},\"sts\":{\"name\":\"STS\",\"cors\":true},\"support\":{\"name\":\"Support\"},\"swf\":{\"name\":\"SWF\"},\"xray\":{\"name\":\"XRay\",\"cors\":true},\"waf\":{\"name\":\"WAF\",\"cors\":true},\"wafregional\":{\"prefix\":\"waf-regional\",\"name\":\"WAFRegional\"},\"workdocs\":{\"name\":\"WorkDocs\",\"cors\":true},\"workspaces\":{\"name\":\"WorkSpaces\"},\"codestar\":{\"name\":\"CodeStar\"},\"lexmodelbuildingservice\":{\"prefix\":\"lex-models\",\"name\":\"LexModelBuildingService\",\"cors\":true},\"marketplaceentitlementservice\":{\"prefix\":\"entitlement.marketplace\",\"name\":\"MarketplaceEntitlementService\"},\"athena\":{\"name\":\"Athena\"},\"greengrass\":{\"name\":\"Greengrass\"},\"dax\":{\"name\":\"DAX\"},\"migrationhub\":{\"prefix\":\"AWSMigrationHub\",\"name\":\"MigrationHub\"},\"cloudhsmv2\":{\"name\":\"CloudHSMV2\"},\"glue\":{\"name\":\"Glue\"},\"mobile\":{\"name\":\"Mobile\"},\"pricing\":{\"name\":\"Pricing\",\"cors\":true},\"costexplorer\":{\"prefix\":\"ce\",\"name\":\"CostExplorer\",\"cors\":true},\"mediaconvert\":{\"name\":\"MediaConvert\"},\"medialive\":{\"name\":\"MediaLive\"},\"mediapackage\":{\"name\":\"MediaPackage\"},\"mediastore\":{\"name\":\"MediaStore\"},\"mediastoredata\":{\"prefix\":\"mediastore-data\",\"name\":\"MediaStoreData\",\"cors\":true},\"appsync\":{\"name\":\"AppSync\"},\"guardduty\":{\"name\":\"GuardDuty\"},\"mq\":{\"name\":\"MQ\"},\"comprehend\":{\"name\":\"Comprehend\",\"cors\":true},\"iotjobsdataplane\":{\"prefix\":\"iot-jobs-data\",\"name\":\"IoTJobsDataPlane\"},\"kinesisvideoarchivedmedia\":{\"prefix\":\"kinesis-video-archived-media\",\"name\":\"KinesisVideoArchivedMedia\",\"cors\":true},\"kinesisvideomedia\":{\"prefix\":\"kinesis-video-media\",\"name\":\"KinesisVideoMedia\",\"cors\":true},\"kinesisvideo\":{\"name\":\"KinesisVideo\",\"cors\":true},\"sagemakerruntime\":{\"prefix\":\"runtime.sagemaker\",\"name\":\"SageMakerRuntime\"},\"sagemaker\":{\"name\":\"SageMaker\"},\"translate\":{\"name\":\"Translate\",\"cors\":true},\"resourcegroups\":{\"prefix\":\"resource-groups\",\"name\":\"ResourceGroups\",\"cors\":true},\"alexaforbusiness\":{\"name\":\"AlexaForBusiness\"},\"cloud9\":{\"name\":\"Cloud9\"},\"serverlessapplicationrepository\":{\"prefix\":\"serverlessrepo\",\"name\":\"ServerlessApplicationRepository\"},\"servicediscovery\":{\"name\":\"ServiceDiscovery\"},\"workmail\":{\"name\":\"WorkMail\"},\"autoscalingplans\":{\"prefix\":\"autoscaling-plans\",\"name\":\"AutoScalingPlans\"},\"transcribeservice\":{\"prefix\":\"transcribe\",\"name\":\"TranscribeService\"},\"connect\":{\"name\":\"Connect\",\"cors\":true},\"acmpca\":{\"prefix\":\"acm-pca\",\"name\":\"ACMPCA\"},\"fms\":{\"name\":\"FMS\"},\"secretsmanager\":{\"name\":\"SecretsManager\",\"cors\":true},\"iotanalytics\":{\"name\":\"IoTAnalytics\",\"cors\":true},\"iot1clickdevicesservice\":{\"prefix\":\"iot1click-devices\",\"name\":\"IoT1ClickDevicesService\"},\"iot1clickprojects\":{\"prefix\":\"iot1click-projects\",\"name\":\"IoT1ClickProjects\"},\"pi\":{\"name\":\"PI\"},\"neptune\":{\"name\":\"Neptune\"},\"mediatailor\":{\"name\":\"MediaTailor\"},\"eks\":{\"name\":\"EKS\"},\"macie\":{\"name\":\"Macie\"},\"dlm\":{\"name\":\"DLM\"},\"signer\":{\"name\":\"Signer\"},\"chime\":{\"name\":\"Chime\"},\"pinpointemail\":{\"prefix\":\"pinpoint-email\",\"name\":\"PinpointEmail\"},\"ram\":{\"name\":\"RAM\"},\"route53resolver\":{\"name\":\"Route53Resolver\"},\"pinpointsmsvoice\":{\"prefix\":\"sms-voice\",\"name\":\"PinpointSMSVoice\"},\"quicksight\":{\"name\":\"QuickSight\"},\"rdsdataservice\":{\"prefix\":\"rds-data\",\"name\":\"RDSDataService\"},\"amplify\":{\"name\":\"Amplify\"},\"datasync\":{\"name\":\"DataSync\"},\"robomaker\":{\"name\":\"RoboMaker\"},\"transfer\":{\"name\":\"Transfer\"},\"globalaccelerator\":{\"name\":\"GlobalAccelerator\"},\"comprehendmedical\":{\"name\":\"ComprehendMedical\",\"cors\":true},\"kinesisanalyticsv2\":{\"name\":\"KinesisAnalyticsV2\"},\"mediaconnect\":{\"name\":\"MediaConnect\"},\"fsx\":{\"name\":\"FSx\"},\"securityhub\":{\"name\":\"SecurityHub\"},\"appmesh\":{\"name\":\"AppMesh\",\"versions\":[\"2018-10-01*\"]},\"licensemanager\":{\"prefix\":\"license-manager\",\"name\":\"LicenseManager\"},\"kafka\":{\"name\":\"Kafka\"},\"apigatewaymanagementapi\":{\"name\":\"ApiGatewayManagementApi\"},\"apigatewayv2\":{\"name\":\"ApiGatewayV2\"},\"docdb\":{\"name\":\"DocDB\"},\"backup\":{\"name\":\"Backup\"},\"worklink\":{\"name\":\"WorkLink\"},\"textract\":{\"name\":\"Textract\"},\"managedblockchain\":{\"name\":\"ManagedBlockchain\"},\"mediapackagevod\":{\"prefix\":\"mediapackage-vod\",\"name\":\"MediaPackageVod\"},\"groundstation\":{\"name\":\"GroundStation\"},\"iotthingsgraph\":{\"name\":\"IoTThingsGraph\"},\"iotevents\":{\"name\":\"IoTEvents\"},\"ioteventsdata\":{\"prefix\":\"iotevents-data\",\"name\":\"IoTEventsData\"},\"personalize\":{\"name\":\"Personalize\",\"cors\":true},\"personalizeevents\":{\"prefix\":\"personalize-events\",\"name\":\"PersonalizeEvents\",\"cors\":true},\"personalizeruntime\":{\"prefix\":\"personalize-runtime\",\"name\":\"PersonalizeRuntime\",\"cors\":true},\"applicationinsights\":{\"prefix\":\"application-insights\",\"name\":\"ApplicationInsights\"},\"servicequotas\":{\"prefix\":\"service-quotas\",\"name\":\"ServiceQuotas\"},\"ec2instanceconnect\":{\"prefix\":\"ec2-instance-connect\",\"name\":\"EC2InstanceConnect\"},\"eventbridge\":{\"name\":\"EventBridge\"},\"lakeformation\":{\"name\":\"LakeFormation\"},\"forecastservice\":{\"prefix\":\"forecast\",\"name\":\"ForecastService\",\"cors\":true},\"forecastqueryservice\":{\"prefix\":\"forecastquery\",\"name\":\"ForecastQueryService\",\"cors\":true},\"qldb\":{\"name\":\"QLDB\"},\"qldbsession\":{\"prefix\":\"qldb-session\",\"name\":\"QLDBSession\"},\"workmailmessageflow\":{\"name\":\"WorkMailMessageFlow\"},\"codestarnotifications\":{\"prefix\":\"codestar-notifications\",\"name\":\"CodeStarNotifications\"},\"savingsplans\":{\"name\":\"SavingsPlans\"},\"sso\":{\"name\":\"SSO\"},\"ssooidc\":{\"prefix\":\"sso-oidc\",\"name\":\"SSOOIDC\"},\"marketplacecatalog\":{\"prefix\":\"marketplace-catalog\",\"name\":\"MarketplaceCatalog\"},\"dataexchange\":{\"name\":\"DataExchange\"},\"sesv2\":{\"name\":\"SESV2\"},\"migrationhubconfig\":{\"prefix\":\"migrationhub-config\",\"name\":\"MigrationHubConfig\"},\"connectparticipant\":{\"name\":\"ConnectParticipant\"},\"appconfig\":{\"name\":\"AppConfig\"},\"iotsecuretunneling\":{\"name\":\"IoTSecureTunneling\"},\"wafv2\":{\"name\":\"WAFV2\"},\"elasticinference\":{\"prefix\":\"elastic-inference\",\"name\":\"ElasticInference\"},\"imagebuilder\":{\"name\":\"Imagebuilder\"},\"schemas\":{\"name\":\"Schemas\"},\"accessanalyzer\":{\"name\":\"AccessAnalyzer\"},\"codegurureviewer\":{\"prefix\":\"codeguru-reviewer\",\"name\":\"CodeGuruReviewer\"},\"codeguruprofiler\":{\"name\":\"CodeGuruProfiler\"},\"computeoptimizer\":{\"prefix\":\"compute-optimizer\",\"name\":\"ComputeOptimizer\"},\"frauddetector\":{\"name\":\"FraudDetector\"},\"kendra\":{\"name\":\"Kendra\"},\"networkmanager\":{\"name\":\"NetworkManager\"},\"outposts\":{\"name\":\"Outposts\"},\"augmentedairuntime\":{\"prefix\":\"sagemaker-a2i-runtime\",\"name\":\"AugmentedAIRuntime\"},\"ebs\":{\"name\":\"EBS\"},\"kinesisvideosignalingchannels\":{\"prefix\":\"kinesis-video-signaling\",\"name\":\"KinesisVideoSignalingChannels\",\"cors\":true},\"detective\":{\"name\":\"Detective\"},\"codestarconnections\":{\"prefix\":\"codestar-connections\",\"name\":\"CodeStarconnections\"},\"synthetics\":{\"name\":\"Synthetics\"},\"iotsitewise\":{\"name\":\"IoTSiteWise\"},\"macie2\":{\"name\":\"Macie2\"},\"codeartifact\":{\"name\":\"CodeArtifact\"},\"honeycode\":{\"name\":\"Honeycode\"},\"ivs\":{\"name\":\"IVS\"},\"braket\":{\"name\":\"Braket\"},\"identitystore\":{\"name\":\"IdentityStore\"},\"appflow\":{\"name\":\"Appflow\"},\"redshiftdata\":{\"prefix\":\"redshift-data\",\"name\":\"RedshiftData\"},\"ssoadmin\":{\"prefix\":\"sso-admin\",\"name\":\"SSOAdmin\"},\"timestreamquery\":{\"prefix\":\"timestream-query\",\"name\":\"TimestreamQuery\"},\"timestreamwrite\":{\"prefix\":\"timestream-write\",\"name\":\"TimestreamWrite\"},\"s3outposts\":{\"name\":\"S3Outposts\"},\"databrew\":{\"name\":\"DataBrew\"},\"servicecatalogappregistry\":{\"prefix\":\"servicecatalog-appregistry\",\"name\":\"ServiceCatalogAppRegistry\"},\"networkfirewall\":{\"prefix\":\"network-firewall\",\"name\":\"NetworkFirewall\"},\"mwaa\":{\"name\":\"MWAA\"},\"amplifybackend\":{\"name\":\"AmplifyBackend\"},\"appintegrations\":{\"name\":\"AppIntegrations\"},\"connectcontactlens\":{\"prefix\":\"connect-contact-lens\",\"name\":\"ConnectContactLens\"},\"devopsguru\":{\"prefix\":\"devops-guru\",\"name\":\"DevOpsGuru\"},\"ecrpublic\":{\"prefix\":\"ecr-public\",\"name\":\"ECRPUBLIC\"},\"lookoutvision\":{\"name\":\"LookoutVision\"},\"sagemakerfeaturestoreruntime\":{\"prefix\":\"sagemaker-featurestore-runtime\",\"name\":\"SageMakerFeatureStoreRuntime\"},\"customerprofiles\":{\"prefix\":\"customer-profiles\",\"name\":\"CustomerProfiles\"},\"auditmanager\":{\"name\":\"AuditManager\"},\"emrcontainers\":{\"prefix\":\"emr-containers\",\"name\":\"EMRcontainers\"},\"healthlake\":{\"name\":\"HealthLake\"},\"sagemakeredge\":{\"prefix\":\"sagemaker-edge\",\"name\":\"SagemakerEdge\"},\"amp\":{\"name\":\"Amp\"},\"greengrassv2\":{\"name\":\"GreengrassV2\"},\"iotdeviceadvisor\":{\"name\":\"IotDeviceAdvisor\"},\"iotfleethub\":{\"name\":\"IoTFleetHub\"},\"iotwireless\":{\"name\":\"IoTWireless\"},\"location\":{\"name\":\"Location\"},\"wellarchitected\":{\"name\":\"WellArchitected\"},\"lexmodelsv2\":{\"prefix\":\"models.lex.v2\",\"name\":\"LexModelsV2\"},\"lexruntimev2\":{\"prefix\":\"runtime.lex.v2\",\"name\":\"LexRuntimeV2\",\"cors\":true}}");
      /***/
    },

    /***/
    "FQpF":
    /*!*****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/expand.js ***!
      \*****************************************************************/

    /*! exports provided: expand, ExpandOperator, ExpandSubscriber */

    /***/
    function FQpF(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "expand", function () {
        return expand;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ExpandOperator", function () {
        return ExpandOperator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ExpandSubscriber", function () {
        return ExpandSubscriber;
      });
      /* harmony import */


      var _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../innerSubscribe */
      "zx2A");

      function expand(project) {
        var concurrent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.POSITIVE_INFINITY;
        var scheduler = arguments.length > 2 ? arguments[2] : undefined;
        concurrent = (concurrent || 0) < 1 ? Number.POSITIVE_INFINITY : concurrent;
        return function (source) {
          return source.lift(new ExpandOperator(project, concurrent, scheduler));
        };
      }

      var ExpandOperator = /*#__PURE__*/function () {
        function ExpandOperator(project, concurrent, scheduler) {
          _classCallCheck2(this, ExpandOperator);

          this.project = project;
          this.concurrent = concurrent;
          this.scheduler = scheduler;
        }

        _createClass2(ExpandOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new ExpandSubscriber(subscriber, this.project, this.concurrent, this.scheduler));
          }
        }]);

        return ExpandOperator;
      }();

      var ExpandSubscriber = /*#__PURE__*/function (_innerSubscribe__WEBP7) {
        _inherits2(ExpandSubscriber, _innerSubscribe__WEBP7);

        var _super226 = _createSuper(ExpandSubscriber);

        function ExpandSubscriber(destination, project, concurrent, scheduler) {
          var _this545;

          _classCallCheck2(this, ExpandSubscriber);

          _this545 = _super226.call(this, destination);
          _this545.project = project;
          _this545.concurrent = concurrent;
          _this545.scheduler = scheduler;
          _this545.index = 0;
          _this545.active = 0;
          _this545.hasCompleted = false;

          if (concurrent < Number.POSITIVE_INFINITY) {
            _this545.buffer = [];
          }

          return _this545;
        }

        _createClass2(ExpandSubscriber, [{
          key: "_next",
          value: function _next(value) {
            var destination = this.destination;

            if (destination.closed) {
              this._complete();

              return;
            }

            var index = this.index++;

            if (this.active < this.concurrent) {
              destination.next(value);

              try {
                var project = this.project;
                var result = project(value, index);

                if (!this.scheduler) {
                  this.subscribeToProjection(result, value, index);
                } else {
                  var state = {
                    subscriber: this,
                    result: result,
                    value: value,
                    index: index
                  };
                  var _destination = this.destination;

                  _destination.add(this.scheduler.schedule(ExpandSubscriber.dispatch, 0, state));
                }
              } catch (e) {
                destination.error(e);
              }
            } else {
              this.buffer.push(value);
            }
          }
        }, {
          key: "subscribeToProjection",
          value: function subscribeToProjection(result, value, index) {
            this.active++;
            var destination = this.destination;
            destination.add(Object(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["innerSubscribe"])(result, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleInnerSubscriber"](this)));
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.hasCompleted = true;

            if (this.hasCompleted && this.active === 0) {
              this.destination.complete();
            }

            this.unsubscribe();
          }
        }, {
          key: "notifyNext",
          value: function notifyNext(innerValue) {
            this._next(innerValue);
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete() {
            var buffer = this.buffer;
            this.active--;

            if (buffer && buffer.length > 0) {
              this._next(buffer.shift());
            }

            if (this.hasCompleted && this.active === 0) {
              this.destination.complete();
            }
          }
        }], [{
          key: "dispatch",
          value: function dispatch(arg) {
            var subscriber = arg.subscriber,
                result = arg.result,
                value = arg.value,
                index = arg.index;
            subscriber.subscribeToProjection(result, value, index);
          }
        }]);

        return ExpandSubscriber;
      }(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleOuterSubscriber"]); //# sourceMappingURL=expand.js.map

      /***/

    },

    /***/
    "FZB8":
    /*!**************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/min.js ***!
      \**************************************************************/

    /*! exports provided: min */

    /***/
    function FZB8(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "min", function () {
        return min;
      });
      /* harmony import */


      var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./reduce */
      "128B");

      function min(comparer) {
        var min = typeof comparer === 'function' ? function (x, y) {
          return comparer(x, y) < 0 ? x : y;
        } : function (x, y) {
          return x < y ? x : y;
        };
        return Object(_reduce__WEBPACK_IMPORTED_MODULE_0__["reduce"])(min);
      } //# sourceMappingURL=min.js.map

      /***/

    },

    /***/
    "FlOX":
    /*!*************************************************************!*\
      !*** ./node_modules/datatables.net/js/jquery.dataTables.js ***!
      \*************************************************************/

    /*! no static exports found */

    /***/
    function FlOX(module, exports, __webpack_require__) {
      var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;
      /*! DataTables 1.10.23
      * ©2008-2020 SpryMedia Ltd - datatables.net/license
      */

      /**
       * @summary     DataTables
       * @description Paginate, search and order HTML tables
       * @version     1.10.23
       * @file        jquery.dataTables.js
       * @author      SpryMedia Ltd
       * @contact     www.datatables.net
       * @copyright   Copyright 2008-2020 SpryMedia Ltd.
       *
       * This source file is free software, available under the following license:
       *   MIT license - http://datatables.net/license
       *
       * This source file is distributed in the hope that it will be useful, but
       * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
       * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
       *
       * For details please refer to: http://www.datatables.net
       */

      /*jslint evil: true, undef: true, browser: true */

      /*globals $,require,jQuery,define,_selector_run,_selector_opts,_selector_first,_selector_row_indexes,_ext,_Api,_api_register,_api_registerPlural,_re_new_lines,_re_html,_re_formatted_numeric,_re_escape_regex,_empty,_intVal,_numToDecimal,_isNumber,_isHtml,_htmlNumeric,_pluck,_pluck_order,_range,_stripHtml,_unique,_fnBuildAjax,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnAjaxDataSrc,_fnAddColumn,_fnColumnOptions,_fnAdjustColumnSizing,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnVisbleColumns,_fnGetColumns,_fnColumnTypes,_fnApplyColumnDefs,_fnHungarianMap,_fnCamelToHungarian,_fnLanguageCompat,_fnBrowserDetect,_fnAddData,_fnAddTr,_fnNodeToDataIndex,_fnNodeToColumnIndex,_fnGetCellData,_fnSetCellData,_fnSplitObjNotation,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnGetDataMaster,_fnClearTable,_fnDeleteIndex,_fnInvalidate,_fnGetRowElements,_fnCreateTr,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAddOptionsHtml,_fnDetectHeader,_fnGetUniqueThs,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnFilterCreateSearch,_fnEscapeRegex,_fnFilterData,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnInfoMacros,_fnInitialise,_fnInitComplete,_fnLengthChange,_fnFeatureHtmlLength,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnFeatureHtmlTable,_fnScrollDraw,_fnApplyToChildren,_fnCalculateColumnWidths,_fnThrottle,_fnConvertToWidth,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnSortFlatten,_fnSort,_fnSortAria,_fnSortListener,_fnSortAttachListener,_fnSortingClasses,_fnSortData,_fnSaveState,_fnLoadState,_fnSettingsFromNode,_fnLog,_fnMap,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnLengthOverflow,_fnRenderer,_fnDataSource,_fnRowAttributes*/


      (function (factory) {
        "use strict";

        if (true) {
          // AMD
          !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(
          /*! jquery */
          "EVdn")], __WEBPACK_AMD_DEFINE_RESULT__ = function ($) {
            return factory($, window, document);
          }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
        } else {}
      })(function ($, window, document, undefined) {
        "use strict";
        /**
         * DataTables is a plug-in for the jQuery Javascript library. It is a highly
         * flexible tool, based upon the foundations of progressive enhancement,
         * which will add advanced interaction controls to any HTML table. For a
         * full list of features please refer to
         * [DataTables.net](href="http://datatables.net).
         *
         * Note that the `DataTable` object is not a global variable but is aliased
         * to `jQuery.fn.DataTable` and `jQuery.fn.dataTable` through which it may
         * be  accessed.
         *
         *  @class
         *  @param {object} [init={}] Configuration object for DataTables. Options
         *    are defined by {@link DataTable.defaults}
         *  @requires jQuery 1.7+
         *
         *  @example
         *    // Basic initialisation
         *    $(document).ready( function {
         *      $('#example').dataTable();
         *    } );
         *
         *  @example
         *    // Initialisation with configuration options - in this case, disable
         *    // pagination and sorting.
         *    $(document).ready( function {
         *      $('#example').dataTable( {
         *        "paginate": false,
         *        "sort": false
         *      } );
         *    } );
         */

        var DataTable = function DataTable(options) {
          /**
           * Perform a jQuery selector action on the table's TR elements (from the tbody) and
           * return the resulting jQuery object.
           *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on
           *  @param {object} [oOpts] Optional parameters for modifying the rows to be included
           *  @param {string} [oOpts.filter=none] Select TR elements that meet the current filter
           *    criterion ("applied") or all TR elements (i.e. no filter).
           *  @param {string} [oOpts.order=current] Order of the TR elements in the processed array.
           *    Can be either 'current', whereby the current sorting of the table is used, or
           *    'original' whereby the original order the data was read into the table is used.
           *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page
           *    ("current") or not ("all"). If 'current' is given, then order is assumed to be
           *    'current' and filter is 'applied', regardless of what they might be given as.
           *  @returns {object} jQuery object, filtered by the given selector.
           *  @dtopt API
           *  @deprecated Since v1.10
           *
           *  @example
           *    $(document).ready(function() {
           *      var oTable = $('#example').dataTable();
           *
           *      // Highlight every second row
           *      oTable.$('tr:odd').css('backgroundColor', 'blue');
           *    } );
           *
           *  @example
           *    $(document).ready(function() {
           *      var oTable = $('#example').dataTable();
           *
           *      // Filter to rows with 'Webkit' in them, add a background colour and then
           *      // remove the filter, thus highlighting the 'Webkit' rows only.
           *      oTable.fnFilter('Webkit');
           *      oTable.$('tr', {"search": "applied"}).css('backgroundColor', 'blue');
           *      oTable.fnFilter('');
           *    } );
           */
          this.$ = function (sSelector, oOpts) {
            return this.api(true).$(sSelector, oOpts);
          };
          /**
           * Almost identical to $ in operation, but in this case returns the data for the matched
           * rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes
           * rather than any descendants, so the data can be obtained for the row/cell. If matching
           * rows are found, the data returned is the original data array/object that was used to
           * create the row (or a generated array if from a DOM source).
           *
           * This method is often useful in-combination with $ where both functions are given the
           * same parameters and the array indexes will match identically.
           *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on
           *  @param {object} [oOpts] Optional parameters for modifying the rows to be included
           *  @param {string} [oOpts.filter=none] Select elements that meet the current filter
           *    criterion ("applied") or all elements (i.e. no filter).
           *  @param {string} [oOpts.order=current] Order of the data in the processed array.
           *    Can be either 'current', whereby the current sorting of the table is used, or
           *    'original' whereby the original order the data was read into the table is used.
           *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page
           *    ("current") or not ("all"). If 'current' is given, then order is assumed to be
           *    'current' and filter is 'applied', regardless of what they might be given as.
           *  @returns {array} Data for the matched elements. If any elements, as a result of the
           *    selector, were not TR, TD or TH elements in the DataTable, they will have a null
           *    entry in the array.
           *  @dtopt API
           *  @deprecated Since v1.10
           *
           *  @example
           *    $(document).ready(function() {
           *      var oTable = $('#example').dataTable();
           *
           *      // Get the data from the first row in the table
           *      var data = oTable._('tr:first');
           *
           *      // Do something useful with the data
           *      alert( "First cell is: "+data[0] );
           *    } );
           *
           *  @example
           *    $(document).ready(function() {
           *      var oTable = $('#example').dataTable();
           *
           *      // Filter to 'Webkit' and get all data for
           *      oTable.fnFilter('Webkit');
           *      var data = oTable._('tr', {"search": "applied"});
           *
           *      // Do something with the data
           *      alert( data.length+" rows matched the search" );
           *    } );
           */


          this._ = function (sSelector, oOpts) {
            return this.api(true).rows(sSelector, oOpts).data();
          };
          /**
           * Create a DataTables Api instance, with the currently selected tables for
           * the Api's context.
           * @param {boolean} [traditional=false] Set the API instance's context to be
           *   only the table referred to by the `DataTable.ext.iApiIndex` option, as was
           *   used in the API presented by DataTables 1.9- (i.e. the traditional mode),
           *   or if all tables captured in the jQuery object should be used.
           * @return {DataTables.Api}
           */


          this.api = function (traditional) {
            return traditional ? new _Api2(_fnSettingsFromNode(this[_ext.iApiIndex])) : new _Api2(this);
          };
          /**
           * Add a single new row or multiple rows of data to the table. Please note
           * that this is suitable for client-side processing only - if you are using
           * server-side processing (i.e. "bServerSide": true), then to add data, you
           * must add it to the data source, i.e. the server-side, through an Ajax call.
           *  @param {array|object} data The data to be added to the table. This can be:
           *    <ul>
           *      <li>1D array of data - add a single row with the data provided</li>
           *      <li>2D array of arrays - add multiple rows in a single call</li>
           *      <li>object - data object when using <i>mData</i></li>
           *      <li>array of objects - multiple data objects when using <i>mData</i></li>
           *    </ul>
           *  @param {bool} [redraw=true] redraw the table or not
           *  @returns {array} An array of integers, representing the list of indexes in
           *    <i>aoData</i> ({@link DataTable.models.oSettings}) that have been added to
           *    the table.
           *  @dtopt API
           *  @deprecated Since v1.10
           *
           *  @example
           *    // Global var for counter
           *    var giCount = 2;
           *
           *    $(document).ready(function() {
           *      $('#example').dataTable();
           *    } );
           *
           *    function fnClickAddRow() {
           *      $('#example').dataTable().fnAddData( [
           *        giCount+".1",
           *        giCount+".2",
           *        giCount+".3",
           *        giCount+".4" ]
           *      );
           *
           *      giCount++;
           *    }
           */


          this.fnAddData = function (data, redraw) {
            var api = this.api(true);
            /* Check if we want to add multiple rows or not */

            var rows = Array.isArray(data) && (Array.isArray(data[0]) || $.isPlainObject(data[0])) ? api.rows.add(data) : api.row.add(data);

            if (redraw === undefined || redraw) {
              api.draw();
            }

            return rows.flatten().toArray();
          };
          /**
           * This function will make DataTables recalculate the column sizes, based on the data
           * contained in the table and the sizes applied to the columns (in the DOM, CSS or
           * through the sWidth parameter). This can be useful when the width of the table's
           * parent element changes (for example a window resize).
           *  @param {boolean} [bRedraw=true] Redraw the table or not, you will typically want to
           *  @dtopt API
           *  @deprecated Since v1.10
           *
           *  @example
           *    $(document).ready(function() {
           *      var oTable = $('#example').dataTable( {
           *        "sScrollY": "200px",
           *        "bPaginate": false
           *      } );
           *
           *      $(window).on('resize', function () {
           *        oTable.fnAdjustColumnSizing();
           *      } );
           *    } );
           */


          this.fnAdjustColumnSizing = function (bRedraw) {
            var api = this.api(true).columns.adjust();
            var settings = api.settings()[0];
            var scroll = settings.oScroll;

            if (bRedraw === undefined || bRedraw) {
              api.draw(false);
            } else if (scroll.sX !== "" || scroll.sY !== "") {
              /* If not redrawing, but scrolling, we want to apply the new column sizes anyway */
              _fnScrollDraw(settings);
            }
          };
          /**
           * Quickly and simply clear a table
           *  @param {bool} [bRedraw=true] redraw the table or not
           *  @dtopt API
           *  @deprecated Since v1.10
           *
           *  @example
           *    $(document).ready(function() {
           *      var oTable = $('#example').dataTable();
           *
           *      // Immediately 'nuke' the current rows (perhaps waiting for an Ajax callback...)
           *      oTable.fnClearTable();
           *    } );
           */


          this.fnClearTable = function (bRedraw) {
            var api = this.api(true).clear();

            if (bRedraw === undefined || bRedraw) {
              api.draw();
            }
          };
          /**
           * The exact opposite of 'opening' a row, this function will close any rows which
           * are currently 'open'.
           *  @param {node} nTr the table row to 'close'
           *  @returns {int} 0 on success, or 1 if failed (can't find the row)
           *  @dtopt API
           *  @deprecated Since v1.10
           *
           *  @example
           *    $(document).ready(function() {
           *      var oTable;
           *
           *      // 'open' an information row when a row is clicked on
           *      $('#example tbody tr').click( function () {
           *        if ( oTable.fnIsOpen(this) ) {
           *          oTable.fnClose( this );
           *        } else {
           *          oTable.fnOpen( this, "Temporary row opened", "info_row" );
           *        }
           *      } );
           *
           *      oTable = $('#example').dataTable();
           *    } );
           */


          this.fnClose = function (nTr) {
            this.api(true).row(nTr).child.hide();
          };
          /**
           * Remove a row for the table
           *  @param {mixed} target The index of the row from aoData to be deleted, or
           *    the TR element you want to delete
           *  @param {function|null} [callBack] Callback function
           *  @param {bool} [redraw=true] Redraw the table or not
           *  @returns {array} The row that was deleted
           *  @dtopt API
           *  @deprecated Since v1.10
           *
           *  @example
           *    $(document).ready(function() {
           *      var oTable = $('#example').dataTable();
           *
           *      // Immediately remove the first row
           *      oTable.fnDeleteRow( 0 );
           *    } );
           */


          this.fnDeleteRow = function (target, callback, redraw) {
            var api = this.api(true);
            var rows = api.rows(target);
            var settings = rows.settings()[0];
            var data = settings.aoData[rows[0][0]];
            rows.remove();

            if (callback) {
              callback.call(this, settings, data);
            }

            if (redraw === undefined || redraw) {
              api.draw();
            }

            return data;
          };
          /**
           * Restore the table to it's original state in the DOM by removing all of DataTables
           * enhancements, alterations to the DOM structure of the table and event listeners.
           *  @param {boolean} [remove=false] Completely remove the table from the DOM
           *  @dtopt API
           *  @deprecated Since v1.10
           *
           *  @example
           *    $(document).ready(function() {
           *      // This example is fairly pointless in reality, but shows how fnDestroy can be used
           *      var oTable = $('#example').dataTable();
           *      oTable.fnDestroy();
           *    } );
           */


          this.fnDestroy = function (remove) {
            this.api(true).destroy(remove);
          };
          /**
           * Redraw the table
           *  @param {bool} [complete=true] Re-filter and resort (if enabled) the table before the draw.
           *  @dtopt API
           *  @deprecated Since v1.10
           *
           *  @example
           *    $(document).ready(function() {
           *      var oTable = $('#example').dataTable();
           *
           *      // Re-draw the table - you wouldn't want to do it here, but it's an example :-)
           *      oTable.fnDraw();
           *    } );
           */


          this.fnDraw = function (complete) {
            // Note that this isn't an exact match to the old call to _fnDraw - it takes
            // into account the new data, but can hold position.
            this.api(true).draw(complete);
          };
          /**
           * Filter the input based on data
           *  @param {string} sInput String to filter the table on
           *  @param {int|null} [iColumn] Column to limit filtering to
           *  @param {bool} [bRegex=false] Treat as regular expression or not
           *  @param {bool} [bSmart=true] Perform smart filtering or not
           *  @param {bool} [bShowGlobal=true] Show the input global filter in it's input box(es)
           *  @param {bool} [bCaseInsensitive=true] Do case-insensitive matching (true) or not (false)
           *  @dtopt API
           *  @deprecated Since v1.10
           *
           *  @example
           *    $(document).ready(function() {
           *      var oTable = $('#example').dataTable();
           *
           *      // Sometime later - filter...
           *      oTable.fnFilter( 'test string' );
           *    } );
           */


          this.fnFilter = function (sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive) {
            var api = this.api(true);

            if (iColumn === null || iColumn === undefined) {
              api.search(sInput, bRegex, bSmart, bCaseInsensitive);
            } else {
              api.column(iColumn).search(sInput, bRegex, bSmart, bCaseInsensitive);
            }

            api.draw();
          };
          /**
           * Get the data for the whole table, an individual row or an individual cell based on the
           * provided parameters.
           *  @param {int|node} [src] A TR row node, TD/TH cell node or an integer. If given as
           *    a TR node then the data source for the whole row will be returned. If given as a
           *    TD/TH cell node then iCol will be automatically calculated and the data for the
           *    cell returned. If given as an integer, then this is treated as the aoData internal
           *    data index for the row (see fnGetPosition) and the data for that row used.
           *  @param {int} [col] Optional column index that you want the data of.
           *  @returns {array|object|string} If mRow is undefined, then the data for all rows is
           *    returned. If mRow is defined, just data for that row, and is iCol is
           *    defined, only data for the designated cell is returned.
           *  @dtopt API
           *  @deprecated Since v1.10
           *
           *  @example
           *    // Row data
           *    $(document).ready(function() {
           *      oTable = $('#example').dataTable();
           *
           *      oTable.$('tr').click( function () {
           *        var data = oTable.fnGetData( this );
           *        // ... do something with the array / object of data for the row
           *      } );
           *    } );
           *
           *  @example
           *    // Individual cell data
           *    $(document).ready(function() {
           *      oTable = $('#example').dataTable();
           *
           *      oTable.$('td').click( function () {
           *        var sData = oTable.fnGetData( this );
           *        alert( 'The cell clicked on had the value of '+sData );
           *      } );
           *    } );
           */


          this.fnGetData = function (src, col) {
            var api = this.api(true);

            if (src !== undefined) {
              var type = src.nodeName ? src.nodeName.toLowerCase() : '';
              return col !== undefined || type == 'td' || type == 'th' ? api.cell(src, col).data() : api.row(src).data() || null;
            }

            return api.data().toArray();
          };
          /**
           * Get an array of the TR nodes that are used in the table's body. Note that you will
           * typically want to use the '$' API method in preference to this as it is more
           * flexible.
           *  @param {int} [iRow] Optional row index for the TR element you want
           *  @returns {array|node} If iRow is undefined, returns an array of all TR elements
           *    in the table's body, or iRow is defined, just the TR element requested.
           *  @dtopt API
           *  @deprecated Since v1.10
           *
           *  @example
           *    $(document).ready(function() {
           *      var oTable = $('#example').dataTable();
           *
           *      // Get the nodes from the table
           *      var nNodes = oTable.fnGetNodes( );
           *    } );
           */


          this.fnGetNodes = function (iRow) {
            var api = this.api(true);
            return iRow !== undefined ? api.row(iRow).node() : api.rows().nodes().flatten().toArray();
          };
          /**
           * Get the array indexes of a particular cell from it's DOM element
           * and column index including hidden columns
           *  @param {node} node this can either be a TR, TD or TH in the table's body
           *  @returns {int} If nNode is given as a TR, then a single index is returned, or
           *    if given as a cell, an array of [row index, column index (visible),
           *    column index (all)] is given.
           *  @dtopt API
           *  @deprecated Since v1.10
           *
           *  @example
           *    $(document).ready(function() {
           *      $('#example tbody td').click( function () {
           *        // Get the position of the current data from the node
           *        var aPos = oTable.fnGetPosition( this );
           *
           *        // Get the data array for this row
           *        var aData = oTable.fnGetData( aPos[0] );
           *
           *        // Update the data array and return the value
           *        aData[ aPos[1] ] = 'clicked';
           *        this.innerHTML = 'clicked';
           *      } );
           *
           *      // Init DataTables
           *      oTable = $('#example').dataTable();
           *    } );
           */


          this.fnGetPosition = function (node) {
            var api = this.api(true);
            var nodeName = node.nodeName.toUpperCase();

            if (nodeName == 'TR') {
              return api.row(node).index();
            } else if (nodeName == 'TD' || nodeName == 'TH') {
              var cell = api.cell(node).index();
              return [cell.row, cell.columnVisible, cell.column];
            }

            return null;
          };
          /**
           * Check to see if a row is 'open' or not.
           *  @param {node} nTr the table row to check
           *  @returns {boolean} true if the row is currently open, false otherwise
           *  @dtopt API
           *  @deprecated Since v1.10
           *
           *  @example
           *    $(document).ready(function() {
           *      var oTable;
           *
           *      // 'open' an information row when a row is clicked on
           *      $('#example tbody tr').click( function () {
           *        if ( oTable.fnIsOpen(this) ) {
           *          oTable.fnClose( this );
           *        } else {
           *          oTable.fnOpen( this, "Temporary row opened", "info_row" );
           *        }
           *      } );
           *
           *      oTable = $('#example').dataTable();
           *    } );
           */


          this.fnIsOpen = function (nTr) {
            return this.api(true).row(nTr).child.isShown();
          };
          /**
           * This function will place a new row directly after a row which is currently
           * on display on the page, with the HTML contents that is passed into the
           * function. This can be used, for example, to ask for confirmation that a
           * particular record should be deleted.
           *  @param {node} nTr The table row to 'open'
           *  @param {string|node|jQuery} mHtml The HTML to put into the row
           *  @param {string} sClass Class to give the new TD cell
           *  @returns {node} The row opened. Note that if the table row passed in as the
           *    first parameter, is not found in the table, this method will silently
           *    return.
           *  @dtopt API
           *  @deprecated Since v1.10
           *
           *  @example
           *    $(document).ready(function() {
           *      var oTable;
           *
           *      // 'open' an information row when a row is clicked on
           *      $('#example tbody tr').click( function () {
           *        if ( oTable.fnIsOpen(this) ) {
           *          oTable.fnClose( this );
           *        } else {
           *          oTable.fnOpen( this, "Temporary row opened", "info_row" );
           *        }
           *      } );
           *
           *      oTable = $('#example').dataTable();
           *    } );
           */


          this.fnOpen = function (nTr, mHtml, sClass) {
            return this.api(true).row(nTr).child(mHtml, sClass).show().child()[0];
          };
          /**
           * Change the pagination - provides the internal logic for pagination in a simple API
           * function. With this function you can have a DataTables table go to the next,
           * previous, first or last pages.
           *  @param {string|int} mAction Paging action to take: "first", "previous", "next" or "last"
           *    or page number to jump to (integer), note that page 0 is the first page.
           *  @param {bool} [bRedraw=true] Redraw the table or not
           *  @dtopt API
           *  @deprecated Since v1.10
           *
           *  @example
           *    $(document).ready(function() {
           *      var oTable = $('#example').dataTable();
           *      oTable.fnPageChange( 'next' );
           *    } );
           */


          this.fnPageChange = function (mAction, bRedraw) {
            var api = this.api(true).page(mAction);

            if (bRedraw === undefined || bRedraw) {
              api.draw(false);
            }
          };
          /**
           * Show a particular column
           *  @param {int} iCol The column whose display should be changed
           *  @param {bool} bShow Show (true) or hide (false) the column
           *  @param {bool} [bRedraw=true] Redraw the table or not
           *  @dtopt API
           *  @deprecated Since v1.10
           *
           *  @example
           *    $(document).ready(function() {
           *      var oTable = $('#example').dataTable();
           *
           *      // Hide the second column after initialisation
           *      oTable.fnSetColumnVis( 1, false );
           *    } );
           */


          this.fnSetColumnVis = function (iCol, bShow, bRedraw) {
            var api = this.api(true).column(iCol).visible(bShow);

            if (bRedraw === undefined || bRedraw) {
              api.columns.adjust().draw();
            }
          };
          /**
           * Get the settings for a particular table for external manipulation
           *  @returns {object} DataTables settings object. See
           *    {@link DataTable.models.oSettings}
           *  @dtopt API
           *  @deprecated Since v1.10
           *
           *  @example
           *    $(document).ready(function() {
           *      var oTable = $('#example').dataTable();
           *      var oSettings = oTable.fnSettings();
           *
           *      // Show an example parameter from the settings
           *      alert( oSettings._iDisplayStart );
           *    } );
           */


          this.fnSettings = function () {
            return _fnSettingsFromNode(this[_ext.iApiIndex]);
          };
          /**
           * Sort the table by a particular column
           *  @param {int} iCol the data index to sort on. Note that this will not match the
           *    'display index' if you have hidden data entries
           *  @dtopt API
           *  @deprecated Since v1.10
           *
           *  @example
           *    $(document).ready(function() {
           *      var oTable = $('#example').dataTable();
           *
           *      // Sort immediately with columns 0 and 1
           *      oTable.fnSort( [ [0,'asc'], [1,'asc'] ] );
           *    } );
           */


          this.fnSort = function (aaSort) {
            this.api(true).order(aaSort).draw();
          };
          /**
           * Attach a sort listener to an element for a given column
           *  @param {node} nNode the element to attach the sort listener to
           *  @param {int} iColumn the column that a click on this node will sort on
           *  @param {function} [fnCallback] callback function when sort is run
           *  @dtopt API
           *  @deprecated Since v1.10
           *
           *  @example
           *    $(document).ready(function() {
           *      var oTable = $('#example').dataTable();
           *
           *      // Sort on column 1, when 'sorter' is clicked on
           *      oTable.fnSortListener( document.getElementById('sorter'), 1 );
           *    } );
           */


          this.fnSortListener = function (nNode, iColumn, fnCallback) {
            this.api(true).order.listener(nNode, iColumn, fnCallback);
          };
          /**
           * Update a table cell or row - this method will accept either a single value to
           * update the cell with, an array of values with one element for each column or
           * an object in the same format as the original data source. The function is
           * self-referencing in order to make the multi column updates easier.
           *  @param {object|array|string} mData Data to update the cell/row with
           *  @param {node|int} mRow TR element you want to update or the aoData index
           *  @param {int} [iColumn] The column to update, give as null or undefined to
           *    update a whole row.
           *  @param {bool} [bRedraw=true] Redraw the table or not
           *  @param {bool} [bAction=true] Perform pre-draw actions or not
           *  @returns {int} 0 on success, 1 on error
           *  @dtopt API
           *  @deprecated Since v1.10
           *
           *  @example
           *    $(document).ready(function() {
           *      var oTable = $('#example').dataTable();
           *      oTable.fnUpdate( 'Example update', 0, 0 ); // Single cell
           *      oTable.fnUpdate( ['a', 'b', 'c', 'd', 'e'], $('tbody tr')[0] ); // Row
           *    } );
           */


          this.fnUpdate = function (mData, mRow, iColumn, bRedraw, bAction) {
            var api = this.api(true);

            if (iColumn === undefined || iColumn === null) {
              api.row(mRow).data(mData);
            } else {
              api.cell(mRow, iColumn).data(mData);
            }

            if (bAction === undefined || bAction) {
              api.columns.adjust();
            }

            if (bRedraw === undefined || bRedraw) {
              api.draw();
            }

            return 0;
          };
          /**
           * Provide a common method for plug-ins to check the version of DataTables being used, in order
           * to ensure compatibility.
           *  @param {string} sVersion Version string to check for, in the format "X.Y.Z". Note that the
           *    formats "X" and "X.Y" are also acceptable.
           *  @returns {boolean} true if this version of DataTables is greater or equal to the required
           *    version, or false if this version of DataTales is not suitable
           *  @method
           *  @dtopt API
           *  @deprecated Since v1.10
           *
           *  @example
           *    $(document).ready(function() {
           *      var oTable = $('#example').dataTable();
           *      alert( oTable.fnVersionCheck( '1.9.0' ) );
           *    } );
           */


          this.fnVersionCheck = _ext.fnVersionCheck;

          var _that = this;

          var emptyInit = options === undefined;
          var len = this.length;

          if (emptyInit) {
            options = {};
          }

          this.oApi = this.internal = _ext.internal; // Extend with old style plug-in API methods

          for (var fn in DataTable.ext.internal) {
            if (fn) {
              this[fn] = _fnExternApiFunc(fn);
            }
          }

          this.each(function () {
            // For each initialisation we want to give it a clean initialisation
            // object that can be bashed around
            var o = {};
            var oInit = len > 1 ? // optimisation for single table case
            _fnExtend(o, options, true) : options;
            /*global oInit,_that,emptyInit*/

            var i = 0,
                iLen,
                j,
                jLen,
                k,
                kLen;
            var sId = this.getAttribute('id');
            var bInitHandedOff = false;
            var defaults = DataTable.defaults;
            var $this = $(this);
            /* Sanity check */

            if (this.nodeName.toLowerCase() != 'table') {
              _fnLog(null, 0, 'Non-table node initialisation (' + this.nodeName + ')', 2);

              return;
            }
            /* Backwards compatibility for the defaults */


            _fnCompatOpts(defaults);

            _fnCompatCols(defaults.column);
            /* Convert the camel-case defaults to Hungarian */


            _fnCamelToHungarian(defaults, defaults, true);

            _fnCamelToHungarian(defaults.column, defaults.column, true);
            /* Setting up the initialisation object */


            _fnCamelToHungarian(defaults, $.extend(oInit, $this.data()), true);
            /* Check to see if we are re-initialising a table */


            var allSettings = DataTable.settings;

            for (i = 0, iLen = allSettings.length; i < iLen; i++) {
              var s = allSettings[i];
              /* Base check on table node */

              if (s.nTable == this || s.nTHead && s.nTHead.parentNode == this || s.nTFoot && s.nTFoot.parentNode == this) {
                var bRetrieve = oInit.bRetrieve !== undefined ? oInit.bRetrieve : defaults.bRetrieve;
                var bDestroy = oInit.bDestroy !== undefined ? oInit.bDestroy : defaults.bDestroy;

                if (emptyInit || bRetrieve) {
                  return s.oInstance;
                } else if (bDestroy) {
                  s.oInstance.fnDestroy();
                  break;
                } else {
                  _fnLog(s, 0, 'Cannot reinitialise DataTable', 3);

                  return;
                }
              }
              /* If the element we are initialising has the same ID as a table which was previously
               * initialised, but the table nodes don't match (from before) then we destroy the old
               * instance by simply deleting it. This is under the assumption that the table has been
               * destroyed by other methods. Anyone using non-id selectors will need to do this manually
               */


              if (s.sTableId == this.id) {
                allSettings.splice(i, 1);
                break;
              }
            }
            /* Ensure the table has an ID - required for accessibility */


            if (sId === null || sId === "") {
              sId = "DataTables_Table_" + DataTable.ext._unique++;
              this.id = sId;
            }
            /* Create the settings object for this table and set some of the default parameters */


            var oSettings = $.extend(true, {}, DataTable.models.oSettings, {
              "sDestroyWidth": $this[0].style.width,
              "sInstance": sId,
              "sTableId": sId
            });
            oSettings.nTable = this;
            oSettings.oApi = _that.internal;
            oSettings.oInit = oInit;
            allSettings.push(oSettings); // Need to add the instance after the instance after the settings object has been added
            // to the settings array, so we can self reference the table instance if more than one

            oSettings.oInstance = _that.length === 1 ? _that : $this.dataTable(); // Backwards compatibility, before we apply all the defaults

            _fnCompatOpts(oInit);

            _fnLanguageCompat(oInit.oLanguage); // If the length menu is given, but the init display length is not, use the length menu


            if (oInit.aLengthMenu && !oInit.iDisplayLength) {
              oInit.iDisplayLength = Array.isArray(oInit.aLengthMenu[0]) ? oInit.aLengthMenu[0][0] : oInit.aLengthMenu[0];
            } // Apply the defaults and init options to make a single init object will all
            // options defined from defaults and instance options.


            oInit = _fnExtend($.extend(true, {}, defaults), oInit); // Map the initialisation options onto the settings object

            _fnMap(oSettings.oFeatures, oInit, ["bPaginate", "bLengthChange", "bFilter", "bSort", "bSortMulti", "bInfo", "bProcessing", "bAutoWidth", "bSortClasses", "bServerSide", "bDeferRender"]);

            _fnMap(oSettings, oInit, ["asStripeClasses", "ajax", "fnServerData", "fnFormatNumber", "sServerMethod", "aaSorting", "aaSortingFixed", "aLengthMenu", "sPaginationType", "sAjaxSource", "sAjaxDataProp", "iStateDuration", "sDom", "bSortCellsTop", "iTabIndex", "fnStateLoadCallback", "fnStateSaveCallback", "renderer", "searchDelay", "rowId", ["iCookieDuration", "iStateDuration"], // backwards compat
            ["oSearch", "oPreviousSearch"], ["aoSearchCols", "aoPreSearchCols"], ["iDisplayLength", "_iDisplayLength"]]);

            _fnMap(oSettings.oScroll, oInit, [["sScrollX", "sX"], ["sScrollXInner", "sXInner"], ["sScrollY", "sY"], ["bScrollCollapse", "bCollapse"]]);

            _fnMap(oSettings.oLanguage, oInit, "fnInfoCallback");
            /* Callback functions which are array driven */


            _fnCallbackReg(oSettings, 'aoDrawCallback', oInit.fnDrawCallback, 'user');

            _fnCallbackReg(oSettings, 'aoServerParams', oInit.fnServerParams, 'user');

            _fnCallbackReg(oSettings, 'aoStateSaveParams', oInit.fnStateSaveParams, 'user');

            _fnCallbackReg(oSettings, 'aoStateLoadParams', oInit.fnStateLoadParams, 'user');

            _fnCallbackReg(oSettings, 'aoStateLoaded', oInit.fnStateLoaded, 'user');

            _fnCallbackReg(oSettings, 'aoRowCallback', oInit.fnRowCallback, 'user');

            _fnCallbackReg(oSettings, 'aoRowCreatedCallback', oInit.fnCreatedRow, 'user');

            _fnCallbackReg(oSettings, 'aoHeaderCallback', oInit.fnHeaderCallback, 'user');

            _fnCallbackReg(oSettings, 'aoFooterCallback', oInit.fnFooterCallback, 'user');

            _fnCallbackReg(oSettings, 'aoInitComplete', oInit.fnInitComplete, 'user');

            _fnCallbackReg(oSettings, 'aoPreDrawCallback', oInit.fnPreDrawCallback, 'user');

            oSettings.rowIdFn = _fnGetObjectDataFn(oInit.rowId);
            /* Browser support detection */

            _fnBrowserDetect(oSettings);

            var oClasses = oSettings.oClasses;
            $.extend(oClasses, DataTable.ext.classes, oInit.oClasses);
            $this.addClass(oClasses.sTable);

            if (oSettings.iInitDisplayStart === undefined) {
              /* Display start point, taking into account the save saving */
              oSettings.iInitDisplayStart = oInit.iDisplayStart;
              oSettings._iDisplayStart = oInit.iDisplayStart;
            }

            if (oInit.iDeferLoading !== null) {
              oSettings.bDeferLoading = true;
              var tmp = Array.isArray(oInit.iDeferLoading);
              oSettings._iRecordsDisplay = tmp ? oInit.iDeferLoading[0] : oInit.iDeferLoading;
              oSettings._iRecordsTotal = tmp ? oInit.iDeferLoading[1] : oInit.iDeferLoading;
            }
            /* Language definitions */


            var oLanguage = oSettings.oLanguage;
            $.extend(true, oLanguage, oInit.oLanguage);

            if (oLanguage.sUrl) {
              /* Get the language definitions from a file - because this Ajax call makes the language
               * get async to the remainder of this function we use bInitHandedOff to indicate that
               * _fnInitialise will be fired by the returned Ajax handler, rather than the constructor
               */
              $.ajax({
                dataType: 'json',
                url: oLanguage.sUrl,
                success: function success(json) {
                  _fnLanguageCompat(json);

                  _fnCamelToHungarian(defaults.oLanguage, json);

                  $.extend(true, oLanguage, json);

                  _fnInitialise(oSettings);
                },
                error: function error() {
                  // Error occurred loading language file, continue on as best we can
                  _fnInitialise(oSettings);
                }
              });
              bInitHandedOff = true;
            }
            /*
             * Stripes
             */


            if (oInit.asStripeClasses === null) {
              oSettings.asStripeClasses = [oClasses.sStripeOdd, oClasses.sStripeEven];
            }
            /* Remove row stripe classes if they are already on the table row */


            var stripeClasses = oSettings.asStripeClasses;
            var rowOne = $this.children('tbody').find('tr').eq(0);

            if ($.inArray(true, $.map(stripeClasses, function (el, i) {
              return rowOne.hasClass(el);
            })) !== -1) {
              $('tbody tr', this).removeClass(stripeClasses.join(' '));
              oSettings.asDestroyStripes = stripeClasses.slice();
            }
            /*
             * Columns
             * See if we should load columns automatically or use defined ones
             */


            var anThs = [];
            var aoColumnsInit;
            var nThead = this.getElementsByTagName('thead');

            if (nThead.length !== 0) {
              _fnDetectHeader(oSettings.aoHeader, nThead[0]);

              anThs = _fnGetUniqueThs(oSettings);
            }
            /* If not given a column array, generate one with nulls */


            if (oInit.aoColumns === null) {
              aoColumnsInit = [];

              for (i = 0, iLen = anThs.length; i < iLen; i++) {
                aoColumnsInit.push(null);
              }
            } else {
              aoColumnsInit = oInit.aoColumns;
            }
            /* Add the columns */


            for (i = 0, iLen = aoColumnsInit.length; i < iLen; i++) {
              _fnAddColumn(oSettings, anThs ? anThs[i] : null);
            }
            /* Apply the column definitions */


            _fnApplyColumnDefs(oSettings, oInit.aoColumnDefs, aoColumnsInit, function (iCol, oDef) {
              _fnColumnOptions(oSettings, iCol, oDef);
            });
            /* HTML5 attribute detection - build an mData object automatically if the
             * attributes are found
             */


            if (rowOne.length) {
              var a = function a(cell, name) {
                return cell.getAttribute('data-' + name) !== null ? name : null;
              };

              $(rowOne[0]).children('th, td').each(function (i, cell) {
                var col = oSettings.aoColumns[i];

                if (col.mData === i) {
                  var sort = a(cell, 'sort') || a(cell, 'order');
                  var filter = a(cell, 'filter') || a(cell, 'search');

                  if (sort !== null || filter !== null) {
                    col.mData = {
                      _: i + '.display',
                      sort: sort !== null ? i + '.@data-' + sort : undefined,
                      type: sort !== null ? i + '.@data-' + sort : undefined,
                      filter: filter !== null ? i + '.@data-' + filter : undefined
                    };

                    _fnColumnOptions(oSettings, i);
                  }
                }
              });
            }

            var features = oSettings.oFeatures;

            var loadedInit = function loadedInit() {
              /*
               * Sorting
               * @todo For modularisation (1.11) this needs to do into a sort start up handler
               */
              // If aaSorting is not defined, then we use the first indicator in asSorting
              // in case that has been altered, so the default sort reflects that option
              if (oInit.aaSorting === undefined) {
                var sorting = oSettings.aaSorting;

                for (i = 0, iLen = sorting.length; i < iLen; i++) {
                  sorting[i][1] = oSettings.aoColumns[i].asSorting[0];
                }
              }
              /* Do a first pass on the sorting classes (allows any size changes to be taken into
               * account, and also will apply sorting disabled classes if disabled
               */


              _fnSortingClasses(oSettings);

              if (features.bSort) {
                _fnCallbackReg(oSettings, 'aoDrawCallback', function () {
                  if (oSettings.bSorted) {
                    var aSort = _fnSortFlatten(oSettings);

                    var sortedColumns = {};
                    $.each(aSort, function (i, val) {
                      sortedColumns[val.src] = val.dir;
                    });

                    _fnCallbackFire(oSettings, null, 'order', [oSettings, aSort, sortedColumns]);

                    _fnSortAria(oSettings);
                  }
                });
              }

              _fnCallbackReg(oSettings, 'aoDrawCallback', function () {
                if (oSettings.bSorted || _fnDataSource(oSettings) === 'ssp' || features.bDeferRender) {
                  _fnSortingClasses(oSettings);
                }
              }, 'sc');
              /*
               * Final init
               * Cache the header, body and footer as required, creating them if needed
               */
              // Work around for Webkit bug 83867 - store the caption-side before removing from doc


              var captions = $this.children('caption').each(function () {
                this._captionSide = $(this).css('caption-side');
              });
              var thead = $this.children('thead');

              if (thead.length === 0) {
                thead = $('<thead/>').appendTo($this);
              }

              oSettings.nTHead = thead[0];
              var tbody = $this.children('tbody');

              if (tbody.length === 0) {
                tbody = $('<tbody/>').appendTo($this);
              }

              oSettings.nTBody = tbody[0];
              var tfoot = $this.children('tfoot');

              if (tfoot.length === 0 && captions.length > 0 && (oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "")) {
                // If we are a scrolling table, and no footer has been given, then we need to create
                // a tfoot element for the caption element to be appended to
                tfoot = $('<tfoot/>').appendTo($this);
              }

              if (tfoot.length === 0 || tfoot.children().length === 0) {
                $this.addClass(oClasses.sNoFooter);
              } else if (tfoot.length > 0) {
                oSettings.nTFoot = tfoot[0];

                _fnDetectHeader(oSettings.aoFooter, oSettings.nTFoot);
              }
              /* Check if there is data passing into the constructor */


              if (oInit.aaData) {
                for (i = 0; i < oInit.aaData.length; i++) {
                  _fnAddData(oSettings, oInit.aaData[i]);
                }
              } else if (oSettings.bDeferLoading || _fnDataSource(oSettings) == 'dom') {
                /* Grab the data from the page - only do this when deferred loading or no Ajax
                 * source since there is no point in reading the DOM data if we are then going
                 * to replace it with Ajax data
                 */
                _fnAddTr(oSettings, $(oSettings.nTBody).children('tr'));
              }
              /* Copy the data index array */


              oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
              /* Initialisation complete - table can be drawn */

              oSettings.bInitialised = true;
              /* Check if we need to initialise the table (it might not have been handed off to the
               * language processor)
               */

              if (bInitHandedOff === false) {
                _fnInitialise(oSettings);
              }
            };
            /* Must be done after everything which can be overridden by the state saving! */


            if (oInit.bStateSave) {
              features.bStateSave = true;

              _fnCallbackReg(oSettings, 'aoDrawCallback', _fnSaveState, 'state_save');

              _fnLoadState(oSettings, oInit, loadedInit);
            } else {
              loadedInit();
            }
          });
          _that = null;
          return this;
        };
        /*
         * It is useful to have variables which are scoped locally so only the
         * DataTables functions can access them and they don't leak into global space.
         * At the same time these functions are often useful over multiple files in the
         * core and API, so we list, or at least document, all variables which are used
         * by DataTables as private variables here. This also ensures that there is no
         * clashing of variable names and that they can easily referenced for reuse.
         */
        // Defined else where
        //  _selector_run
        //  _selector_opts
        //  _selector_first
        //  _selector_row_indexes


        var _ext; // DataTable.ext


        var _Api2; // DataTable.Api


        var _api_register; // DataTable.Api.register


        var _api_registerPlural; // DataTable.Api.registerPlural


        var _re_dic = {};
        var _re_new_lines = /[\r\n\u2028]/g;
        var _re_html = /<.*?>/g; // This is not strict ISO8601 - Date.parse() is quite lax, although
        // implementations differ between browsers.

        var _re_date = /^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/; // Escape regular expression special characters

        var _re_escape_regex = new RegExp('(\\' + ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\', '$', '^', '-'].join('|\\') + ')', 'g'); // http://en.wikipedia.org/wiki/Foreign_exchange_market
        // - \u20BD - Russian ruble.
        // - \u20a9 - South Korean Won
        // - \u20BA - Turkish Lira
        // - \u20B9 - Indian Rupee
        // - R - Brazil (R$) and South Africa
        // - fr - Swiss Franc
        // - kr - Swedish krona, Norwegian krone and Danish krone
        // - \u2009 is thin space and \u202F is narrow no-break space, both used in many
        // - Ƀ - Bitcoin
        // - Ξ - Ethereum
        //   standards as thousands separators.


        var _re_formatted_numeric = /['\u00A0,$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi;

        var _empty = function _empty(d) {
          return !d || d === true || d === '-' ? true : false;
        };

        var _intVal = function _intVal(s) {
          var integer = parseInt(s, 10);
          return !isNaN(integer) && isFinite(s) ? integer : null;
        }; // Convert from a formatted number with characters other than `.` as the
        // decimal place, to a Javascript number


        var _numToDecimal = function _numToDecimal(num, decimalPoint) {
          // Cache created regular expressions for speed as this function is called often
          if (!_re_dic[decimalPoint]) {
            _re_dic[decimalPoint] = new RegExp(_fnEscapeRegex(decimalPoint), 'g');
          }

          return typeof num === 'string' && decimalPoint !== '.' ? num.replace(/\./g, '').replace(_re_dic[decimalPoint], '.') : num;
        };

        var _isNumber = function _isNumber(d, decimalPoint, formatted) {
          var strType = typeof d === 'string'; // If empty return immediately so there must be a number if it is a
          // formatted string (this stops the string "k", or "kr", etc being detected
          // as a formatted number for currency

          if (_empty(d)) {
            return true;
          }

          if (decimalPoint && strType) {
            d = _numToDecimal(d, decimalPoint);
          }

          if (formatted && strType) {
            d = d.replace(_re_formatted_numeric, '');
          }

          return !isNaN(parseFloat(d)) && isFinite(d);
        }; // A string without HTML in it can be considered to be HTML still


        var _isHtml = function _isHtml(d) {
          return _empty(d) || typeof d === 'string';
        };

        var _htmlNumeric = function _htmlNumeric(d, decimalPoint, formatted) {
          if (_empty(d)) {
            return true;
          }

          var html = _isHtml(d);

          return !html ? null : _isNumber(_stripHtml(d), decimalPoint, formatted) ? true : null;
        };

        var _pluck = function _pluck(a, prop, prop2) {
          var out = [];
          var i = 0,
              ien = a.length; // Could have the test in the loop for slightly smaller code, but speed
          // is essential here

          if (prop2 !== undefined) {
            for (; i < ien; i++) {
              if (a[i] && a[i][prop]) {
                out.push(a[i][prop][prop2]);
              }
            }
          } else {
            for (; i < ien; i++) {
              if (a[i]) {
                out.push(a[i][prop]);
              }
            }
          }

          return out;
        }; // Basically the same as _pluck, but rather than looping over `a` we use `order`
        // as the indexes to pick from `a`


        var _pluck_order = function _pluck_order(a, order, prop, prop2) {
          var out = [];
          var i = 0,
              ien = order.length; // Could have the test in the loop for slightly smaller code, but speed
          // is essential here

          if (prop2 !== undefined) {
            for (; i < ien; i++) {
              if (a[order[i]][prop]) {
                out.push(a[order[i]][prop][prop2]);
              }
            }
          } else {
            for (; i < ien; i++) {
              out.push(a[order[i]][prop]);
            }
          }

          return out;
        };

        var _range = function _range(len, start) {
          var out = [];
          var end;

          if (start === undefined) {
            start = 0;
            end = len;
          } else {
            end = start;
            start = len;
          }

          for (var i = start; i < end; i++) {
            out.push(i);
          }

          return out;
        };

        var _removeEmpty = function _removeEmpty(a) {
          var out = [];

          for (var i = 0, ien = a.length; i < ien; i++) {
            if (a[i]) {
              // careful - will remove all falsy values!
              out.push(a[i]);
            }
          }

          return out;
        };

        var _stripHtml = function _stripHtml(d) {
          return d.replace(_re_html, '');
        };
        /**
         * Determine if all values in the array are unique. This means we can short
         * cut the _unique method at the cost of a single loop. A sorted array is used
         * to easily check the values.
         *
         * @param  {array} src Source array
         * @return {boolean} true if all unique, false otherwise
         * @ignore
         */


        var _areAllUnique = function _areAllUnique(src) {
          if (src.length < 2) {
            return true;
          }

          var sorted = src.slice().sort();
          var last = sorted[0];

          for (var i = 1, ien = sorted.length; i < ien; i++) {
            if (sorted[i] === last) {
              return false;
            }

            last = sorted[i];
          }

          return true;
        };
        /**
         * Find the unique elements in a source array.
         *
         * @param  {array} src Source array
         * @return {array} Array of unique items
         * @ignore
         */


        var _unique = function _unique(src) {
          if (_areAllUnique(src)) {
            return src.slice();
          } // A faster unique method is to use object keys to identify used values,
          // but this doesn't work with arrays or objects, which we must also
          // consider. See jsperf.com/compare-array-unique-versions/4 for more
          // information.


          var out = [],
              val,
              i,
              ien = src.length,
              j,
              k = 0;

          again: for (i = 0; i < ien; i++) {
            val = src[i];

            for (j = 0; j < k; j++) {
              if (out[j] === val) {
                continue again;
              }
            }

            out.push(val);
            k++;
          }

          return out;
        }; // Surprisingly this is faster than [].concat.apply
        // https://jsperf.com/flatten-an-array-loop-vs-reduce/2


        var _flatten = function _flatten(out, val) {
          if (Array.isArray(val)) {
            for (var i = 0; i < val.length; i++) {
              _flatten(out, val[i]);
            }
          } else {
            out.push(val);
          }

          return out;
        }; // Array.isArray polyfill.
        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray


        if (!Array.isArray) {
          Array.isArray = function (arg) {
            return Object.prototype.toString.call(arg) === '[object Array]';
          };
        } // .trim() polyfill
        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim


        if (!String.prototype.trim) {
          String.prototype.trim = function () {
            return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
          };
        }
        /**
         * DataTables utility methods
         * 
         * This namespace provides helper methods that DataTables uses internally to
         * create a DataTable, but which are not exclusively used only for DataTables.
         * These methods can be used by extension authors to save the duplication of
         * code.
         *
         *  @namespace
         */


        DataTable.util = {
          /**
           * Throttle the calls to a function. Arguments and context are maintained
           * for the throttled function.
           *
           * @param {function} fn Function to be called
           * @param {integer} freq Call frequency in mS
           * @return {function} Wrapped function
           */
          throttle: function throttle(fn, freq) {
            var frequency = freq !== undefined ? freq : 200,
                last,
                timer;
            return function () {
              var that = this,
                  now = +new Date(),
                  args = arguments;

              if (last && now < last + frequency) {
                clearTimeout(timer);
                timer = setTimeout(function () {
                  last = undefined;
                  fn.apply(that, args);
                }, frequency);
              } else {
                last = now;
                fn.apply(that, args);
              }
            };
          },

          /**
           * Escape a string such that it can be used in a regular expression
           *
           *  @param {string} val string to escape
           *  @returns {string} escaped string
           */
          escapeRegex: function escapeRegex(val) {
            return val.replace(_re_escape_regex, '\\$1');
          }
        };
        /**
         * Create a mapping object that allows camel case parameters to be looked up
         * for their Hungarian counterparts. The mapping is stored in a private
         * parameter called `_hungarianMap` which can be accessed on the source object.
         *  @param {object} o
         *  @memberof DataTable#oApi
         */

        function _fnHungarianMap(o) {
          var hungarian = 'a aa ai ao as b fn i m o s ',
              match,
              newKey,
              map = {};
          $.each(o, function (key, val) {
            match = key.match(/^([^A-Z]+?)([A-Z])/);

            if (match && hungarian.indexOf(match[1] + ' ') !== -1) {
              newKey = key.replace(match[0], match[2].toLowerCase());
              map[newKey] = key;

              if (match[1] === 'o') {
                _fnHungarianMap(o[key]);
              }
            }
          });
          o._hungarianMap = map;
        }
        /**
         * Convert from camel case parameters to Hungarian, based on a Hungarian map
         * created by _fnHungarianMap.
         *  @param {object} src The model object which holds all parameters that can be
         *    mapped.
         *  @param {object} user The object to convert from camel case to Hungarian.
         *  @param {boolean} force When set to `true`, properties which already have a
         *    Hungarian value in the `user` object will be overwritten. Otherwise they
         *    won't be.
         *  @memberof DataTable#oApi
         */


        function _fnCamelToHungarian(src, user, force) {
          if (!src._hungarianMap) {
            _fnHungarianMap(src);
          }

          var hungarianKey;
          $.each(user, function (key, val) {
            hungarianKey = src._hungarianMap[key];

            if (hungarianKey !== undefined && (force || user[hungarianKey] === undefined)) {
              // For objects, we need to buzz down into the object to copy parameters
              if (hungarianKey.charAt(0) === 'o') {
                // Copy the camelCase options over to the hungarian
                if (!user[hungarianKey]) {
                  user[hungarianKey] = {};
                }

                $.extend(true, user[hungarianKey], user[key]);

                _fnCamelToHungarian(src[hungarianKey], user[hungarianKey], force);
              } else {
                user[hungarianKey] = user[key];
              }
            }
          });
        }
        /**
         * Language compatibility - when certain options are given, and others aren't, we
         * need to duplicate the values over, in order to provide backwards compatibility
         * with older language files.
         *  @param {object} oSettings dataTables settings object
         *  @memberof DataTable#oApi
         */


        function _fnLanguageCompat(lang) {
          // Note the use of the Hungarian notation for the parameters in this method as
          // this is called after the mapping of camelCase to Hungarian
          var defaults = DataTable.defaults.oLanguage; // Default mapping

          var defaultDecimal = defaults.sDecimal;

          if (defaultDecimal) {
            _addNumericSort(defaultDecimal);
          }

          if (lang) {
            var zeroRecords = lang.sZeroRecords; // Backwards compatibility - if there is no sEmptyTable given, then use the same as
            // sZeroRecords - assuming that is given.

            if (!lang.sEmptyTable && zeroRecords && defaults.sEmptyTable === "No data available in table") {
              _fnMap(lang, lang, 'sZeroRecords', 'sEmptyTable');
            } // Likewise with loading records


            if (!lang.sLoadingRecords && zeroRecords && defaults.sLoadingRecords === "Loading...") {
              _fnMap(lang, lang, 'sZeroRecords', 'sLoadingRecords');
            } // Old parameter name of the thousands separator mapped onto the new


            if (lang.sInfoThousands) {
              lang.sThousands = lang.sInfoThousands;
            }

            var decimal = lang.sDecimal;

            if (decimal && defaultDecimal !== decimal) {
              _addNumericSort(decimal);
            }
          }
        }
        /**
         * Map one parameter onto another
         *  @param {object} o Object to map
         *  @param {*} knew The new parameter name
         *  @param {*} old The old parameter name
         */


        var _fnCompatMap = function _fnCompatMap(o, knew, old) {
          if (o[knew] !== undefined) {
            o[old] = o[knew];
          }
        };
        /**
         * Provide backwards compatibility for the main DT options. Note that the new
         * options are mapped onto the old parameters, so this is an external interface
         * change only.
         *  @param {object} init Object to map
         */


        function _fnCompatOpts(init) {
          _fnCompatMap(init, 'ordering', 'bSort');

          _fnCompatMap(init, 'orderMulti', 'bSortMulti');

          _fnCompatMap(init, 'orderClasses', 'bSortClasses');

          _fnCompatMap(init, 'orderCellsTop', 'bSortCellsTop');

          _fnCompatMap(init, 'order', 'aaSorting');

          _fnCompatMap(init, 'orderFixed', 'aaSortingFixed');

          _fnCompatMap(init, 'paging', 'bPaginate');

          _fnCompatMap(init, 'pagingType', 'sPaginationType');

          _fnCompatMap(init, 'pageLength', 'iDisplayLength');

          _fnCompatMap(init, 'searching', 'bFilter'); // Boolean initialisation of x-scrolling


          if (typeof init.sScrollX === 'boolean') {
            init.sScrollX = init.sScrollX ? '100%' : '';
          }

          if (typeof init.scrollX === 'boolean') {
            init.scrollX = init.scrollX ? '100%' : '';
          } // Column search objects are in an array, so it needs to be converted
          // element by element


          var searchCols = init.aoSearchCols;

          if (searchCols) {
            for (var i = 0, ien = searchCols.length; i < ien; i++) {
              if (searchCols[i]) {
                _fnCamelToHungarian(DataTable.models.oSearch, searchCols[i]);
              }
            }
          }
        }
        /**
         * Provide backwards compatibility for column options. Note that the new options
         * are mapped onto the old parameters, so this is an external interface change
         * only.
         *  @param {object} init Object to map
         */


        function _fnCompatCols(init) {
          _fnCompatMap(init, 'orderable', 'bSortable');

          _fnCompatMap(init, 'orderData', 'aDataSort');

          _fnCompatMap(init, 'orderSequence', 'asSorting');

          _fnCompatMap(init, 'orderDataType', 'sortDataType'); // orderData can be given as an integer


          var dataSort = init.aDataSort;

          if (typeof dataSort === 'number' && !Array.isArray(dataSort)) {
            init.aDataSort = [dataSort];
          }
        }
        /**
         * Browser feature detection for capabilities, quirks
         *  @param {object} settings dataTables settings object
         *  @memberof DataTable#oApi
         */


        function _fnBrowserDetect(settings) {
          // We don't need to do this every time DataTables is constructed, the values
          // calculated are specific to the browser and OS configuration which we
          // don't expect to change between initialisations
          if (!DataTable.__browser) {
            var browser = {};
            DataTable.__browser = browser; // Scrolling feature / quirks detection

            var n = $('<div/>').css({
              position: 'fixed',
              top: 0,
              left: $(window).scrollLeft() * -1,
              // allow for scrolling
              height: 1,
              width: 1,
              overflow: 'hidden'
            }).append($('<div/>').css({
              position: 'absolute',
              top: 1,
              left: 1,
              width: 100,
              overflow: 'scroll'
            }).append($('<div/>').css({
              width: '100%',
              height: 10
            }))).appendTo('body');
            var outer = n.children();
            var inner = outer.children(); // Numbers below, in order, are:
            // inner.offsetWidth, inner.clientWidth, outer.offsetWidth, outer.clientWidth
            //
            // IE6 XP:                           100 100 100  83
            // IE7 Vista:                        100 100 100  83
            // IE 8+ Windows:                     83  83 100  83
            // Evergreen Windows:                 83  83 100  83
            // Evergreen Mac with scrollbars:     85  85 100  85
            // Evergreen Mac without scrollbars: 100 100 100 100
            // Get scrollbar width

            browser.barWidth = outer[0].offsetWidth - outer[0].clientWidth; // IE6/7 will oversize a width 100% element inside a scrolling element, to
            // include the width of the scrollbar, while other browsers ensure the inner
            // element is contained without forcing scrolling

            browser.bScrollOversize = inner[0].offsetWidth === 100 && outer[0].clientWidth !== 100; // In rtl text layout, some browsers (most, but not all) will place the
            // scrollbar on the left, rather than the right.

            browser.bScrollbarLeft = Math.round(inner.offset().left) !== 1; // IE8- don't provide height and width for getBoundingClientRect

            browser.bBounding = n[0].getBoundingClientRect().width ? true : false;
            n.remove();
          }

          $.extend(settings.oBrowser, DataTable.__browser);
          settings.oScroll.iBarWidth = DataTable.__browser.barWidth;
        }
        /**
         * Array.prototype reduce[Right] method, used for browsers which don't support
         * JS 1.6. Done this way to reduce code size, since we iterate either way
         *  @param {object} settings dataTables settings object
         *  @memberof DataTable#oApi
         */


        function _fnReduce(that, fn, init, start, end, inc) {
          var i = start,
              value,
              isSet = false;

          if (init !== undefined) {
            value = init;
            isSet = true;
          }

          while (i !== end) {
            if (!that.hasOwnProperty(i)) {
              continue;
            }

            value = isSet ? fn(value, that[i], i, that) : that[i];
            isSet = true;
            i += inc;
          }

          return value;
        }
        /**
         * Add a column to the list used for the table with default values
         *  @param {object} oSettings dataTables settings object
         *  @param {node} nTh The th element for this column
         *  @memberof DataTable#oApi
         */


        function _fnAddColumn(oSettings, nTh) {
          // Add column to aoColumns array
          var oDefaults = DataTable.defaults.column;
          var iCol = oSettings.aoColumns.length;
          var oCol = $.extend({}, DataTable.models.oColumn, oDefaults, {
            "nTh": nTh ? nTh : document.createElement('th'),
            "sTitle": oDefaults.sTitle ? oDefaults.sTitle : nTh ? nTh.innerHTML : '',
            "aDataSort": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol],
            "mData": oDefaults.mData ? oDefaults.mData : iCol,
            idx: iCol
          });
          oSettings.aoColumns.push(oCol); // Add search object for column specific search. Note that the `searchCols[ iCol ]`
          // passed into extend can be undefined. This allows the user to give a default
          // with only some of the parameters defined, and also not give a default

          var searchCols = oSettings.aoPreSearchCols;
          searchCols[iCol] = $.extend({}, DataTable.models.oSearch, searchCols[iCol]); // Use the default column options function to initialise classes etc

          _fnColumnOptions(oSettings, iCol, $(nTh).data());
        }
        /**
         * Apply options for a column
         *  @param {object} oSettings dataTables settings object
         *  @param {int} iCol column index to consider
         *  @param {object} oOptions object with sType, bVisible and bSearchable etc
         *  @memberof DataTable#oApi
         */


        function _fnColumnOptions(oSettings, iCol, oOptions) {
          var oCol = oSettings.aoColumns[iCol];
          var oClasses = oSettings.oClasses;
          var th = $(oCol.nTh); // Try to get width information from the DOM. We can't get it from CSS
          // as we'd need to parse the CSS stylesheet. `width` option can override

          if (!oCol.sWidthOrig) {
            // Width attribute
            oCol.sWidthOrig = th.attr('width') || null; // Style attribute

            var t = (th.attr('style') || '').match(/width:\s*(\d+[pxem%]+)/);

            if (t) {
              oCol.sWidthOrig = t[1];
            }
          }
          /* User specified column options */


          if (oOptions !== undefined && oOptions !== null) {
            // Backwards compatibility
            _fnCompatCols(oOptions); // Map camel case parameters to their Hungarian counterparts


            _fnCamelToHungarian(DataTable.defaults.column, oOptions, true);
            /* Backwards compatibility for mDataProp */


            if (oOptions.mDataProp !== undefined && !oOptions.mData) {
              oOptions.mData = oOptions.mDataProp;
            }

            if (oOptions.sType) {
              oCol._sManualType = oOptions.sType;
            } // `class` is a reserved word in Javascript, so we need to provide
            // the ability to use a valid name for the camel case input


            if (oOptions.className && !oOptions.sClass) {
              oOptions.sClass = oOptions.className;
            }

            if (oOptions.sClass) {
              th.addClass(oOptions.sClass);
            }

            $.extend(oCol, oOptions);

            _fnMap(oCol, oOptions, "sWidth", "sWidthOrig");
            /* iDataSort to be applied (backwards compatibility), but aDataSort will take
             * priority if defined
             */


            if (oOptions.iDataSort !== undefined) {
              oCol.aDataSort = [oOptions.iDataSort];
            }

            _fnMap(oCol, oOptions, "aDataSort");
          }
          /* Cache the data get and set functions for speed */


          var mDataSrc = oCol.mData;

          var mData = _fnGetObjectDataFn(mDataSrc);

          var mRender = oCol.mRender ? _fnGetObjectDataFn(oCol.mRender) : null;

          var attrTest = function attrTest(src) {
            return typeof src === 'string' && src.indexOf('@') !== -1;
          };

          oCol._bAttrSrc = $.isPlainObject(mDataSrc) && (attrTest(mDataSrc.sort) || attrTest(mDataSrc.type) || attrTest(mDataSrc.filter));
          oCol._setter = null;

          oCol.fnGetData = function (rowData, type, meta) {
            var innerData = mData(rowData, type, undefined, meta);
            return mRender && type ? mRender(innerData, type, rowData, meta) : innerData;
          };

          oCol.fnSetData = function (rowData, val, meta) {
            return _fnSetObjectDataFn(mDataSrc)(rowData, val, meta);
          }; // Indicate if DataTables should read DOM data as an object or array
          // Used in _fnGetRowElements


          if (typeof mDataSrc !== 'number') {
            oSettings._rowReadObject = true;
          }
          /* Feature sorting overrides column specific when off */


          if (!oSettings.oFeatures.bSort) {
            oCol.bSortable = false;
            th.addClass(oClasses.sSortableNone); // Have to add class here as order event isn't called
          }
          /* Check that the class assignment is correct for sorting */


          var bAsc = $.inArray('asc', oCol.asSorting) !== -1;
          var bDesc = $.inArray('desc', oCol.asSorting) !== -1;

          if (!oCol.bSortable || !bAsc && !bDesc) {
            oCol.sSortingClass = oClasses.sSortableNone;
            oCol.sSortingClassJUI = "";
          } else if (bAsc && !bDesc) {
            oCol.sSortingClass = oClasses.sSortableAsc;
            oCol.sSortingClassJUI = oClasses.sSortJUIAscAllowed;
          } else if (!bAsc && bDesc) {
            oCol.sSortingClass = oClasses.sSortableDesc;
            oCol.sSortingClassJUI = oClasses.sSortJUIDescAllowed;
          } else {
            oCol.sSortingClass = oClasses.sSortable;
            oCol.sSortingClassJUI = oClasses.sSortJUI;
          }
        }
        /**
         * Adjust the table column widths for new data. Note: you would probably want to
         * do a redraw after calling this function!
         *  @param {object} settings dataTables settings object
         *  @memberof DataTable#oApi
         */


        function _fnAdjustColumnSizing(settings) {
          /* Not interested in doing column width calculation if auto-width is disabled */
          if (settings.oFeatures.bAutoWidth !== false) {
            var columns = settings.aoColumns;

            _fnCalculateColumnWidths(settings);

            for (var i = 0, iLen = columns.length; i < iLen; i++) {
              columns[i].nTh.style.width = columns[i].sWidth;
            }
          }

          var scroll = settings.oScroll;

          if (scroll.sY !== '' || scroll.sX !== '') {
            _fnScrollDraw(settings);
          }

          _fnCallbackFire(settings, null, 'column-sizing', [settings]);
        }
        /**
         * Covert the index of a visible column to the index in the data array (take account
         * of hidden columns)
         *  @param {object} oSettings dataTables settings object
         *  @param {int} iMatch Visible column index to lookup
         *  @returns {int} i the data index
         *  @memberof DataTable#oApi
         */


        function _fnVisibleToColumnIndex(oSettings, iMatch) {
          var aiVis = _fnGetColumns(oSettings, 'bVisible');

          return typeof aiVis[iMatch] === 'number' ? aiVis[iMatch] : null;
        }
        /**
         * Covert the index of an index in the data array and convert it to the visible
         *   column index (take account of hidden columns)
         *  @param {int} iMatch Column index to lookup
         *  @param {object} oSettings dataTables settings object
         *  @returns {int} i the data index
         *  @memberof DataTable#oApi
         */


        function _fnColumnIndexToVisible(oSettings, iMatch) {
          var aiVis = _fnGetColumns(oSettings, 'bVisible');

          var iPos = $.inArray(iMatch, aiVis);
          return iPos !== -1 ? iPos : null;
        }
        /**
         * Get the number of visible columns
         *  @param {object} oSettings dataTables settings object
         *  @returns {int} i the number of visible columns
         *  @memberof DataTable#oApi
         */


        function _fnVisbleColumns(oSettings) {
          var vis = 0; // No reduce in IE8, use a loop for now

          $.each(oSettings.aoColumns, function (i, col) {
            if (col.bVisible && $(col.nTh).css('display') !== 'none') {
              vis++;
            }
          });
          return vis;
        }
        /**
         * Get an array of column indexes that match a given property
         *  @param {object} oSettings dataTables settings object
         *  @param {string} sParam Parameter in aoColumns to look for - typically
         *    bVisible or bSearchable
         *  @returns {array} Array of indexes with matched properties
         *  @memberof DataTable#oApi
         */


        function _fnGetColumns(oSettings, sParam) {
          var a = [];
          $.map(oSettings.aoColumns, function (val, i) {
            if (val[sParam]) {
              a.push(i);
            }
          });
          return a;
        }
        /**
         * Calculate the 'type' of a column
         *  @param {object} settings dataTables settings object
         *  @memberof DataTable#oApi
         */


        function _fnColumnTypes(settings) {
          var columns = settings.aoColumns;
          var data = settings.aoData;
          var types = DataTable.ext.type.detect;
          var i, ien, j, jen, k, ken;
          var col, cell, detectedType, cache; // For each column, spin over the 

          for (i = 0, ien = columns.length; i < ien; i++) {
            col = columns[i];
            cache = [];

            if (!col.sType && col._sManualType) {
              col.sType = col._sManualType;
            } else if (!col.sType) {
              for (j = 0, jen = types.length; j < jen; j++) {
                for (k = 0, ken = data.length; k < ken; k++) {
                  // Use a cache array so we only need to get the type data
                  // from the formatter once (when using multiple detectors)
                  if (cache[k] === undefined) {
                    cache[k] = _fnGetCellData(settings, k, i, 'type');
                  }

                  detectedType = types[j](cache[k], settings); // If null, then this type can't apply to this column, so
                  // rather than testing all cells, break out. There is an
                  // exception for the last type which is `html`. We need to
                  // scan all rows since it is possible to mix string and HTML
                  // types

                  if (!detectedType && j !== types.length - 1) {
                    break;
                  } // Only a single match is needed for html type since it is
                  // bottom of the pile and very similar to string


                  if (detectedType === 'html') {
                    break;
                  }
                } // Type is valid for all data points in the column - use this
                // type


                if (detectedType) {
                  col.sType = detectedType;
                  break;
                }
              } // Fall back - if no type was detected, always use string


              if (!col.sType) {
                col.sType = 'string';
              }
            }
          }
        }
        /**
         * Take the column definitions and static columns arrays and calculate how
         * they relate to column indexes. The callback function will then apply the
         * definition found for a column to a suitable configuration object.
         *  @param {object} oSettings dataTables settings object
         *  @param {array} aoColDefs The aoColumnDefs array that is to be applied
         *  @param {array} aoCols The aoColumns array that defines columns individually
         *  @param {function} fn Callback function - takes two parameters, the calculated
         *    column index and the definition for that column.
         *  @memberof DataTable#oApi
         */


        function _fnApplyColumnDefs(oSettings, aoColDefs, aoCols, fn) {
          var i, iLen, j, jLen, k, kLen, def;
          var columns = oSettings.aoColumns; // Column definitions with aTargets

          if (aoColDefs) {
            /* Loop over the definitions array - loop in reverse so first instance has priority */
            for (i = aoColDefs.length - 1; i >= 0; i--) {
              def = aoColDefs[i];
              /* Each definition can target multiple columns, as it is an array */

              var aTargets = def.targets !== undefined ? def.targets : def.aTargets;

              if (!Array.isArray(aTargets)) {
                aTargets = [aTargets];
              }

              for (j = 0, jLen = aTargets.length; j < jLen; j++) {
                if (typeof aTargets[j] === 'number' && aTargets[j] >= 0) {
                  /* Add columns that we don't yet know about */
                  while (columns.length <= aTargets[j]) {
                    _fnAddColumn(oSettings);
                  }
                  /* Integer, basic index */


                  fn(aTargets[j], def);
                } else if (typeof aTargets[j] === 'number' && aTargets[j] < 0) {
                  /* Negative integer, right to left column counting */
                  fn(columns.length + aTargets[j], def);
                } else if (typeof aTargets[j] === 'string') {
                  /* Class name matching on TH element */
                  for (k = 0, kLen = columns.length; k < kLen; k++) {
                    if (aTargets[j] == "_all" || $(columns[k].nTh).hasClass(aTargets[j])) {
                      fn(k, def);
                    }
                  }
                }
              }
            }
          } // Statically defined columns array


          if (aoCols) {
            for (i = 0, iLen = aoCols.length; i < iLen; i++) {
              fn(i, aoCols[i]);
            }
          }
        }
        /**
         * Add a data array to the table, creating DOM node etc. This is the parallel to
         * _fnGatherData, but for adding rows from a Javascript source, rather than a
         * DOM source.
         *  @param {object} oSettings dataTables settings object
         *  @param {array} aData data array to be added
         *  @param {node} [nTr] TR element to add to the table - optional. If not given,
         *    DataTables will create a row automatically
         *  @param {array} [anTds] Array of TD|TH elements for the row - must be given
         *    if nTr is.
         *  @returns {int} >=0 if successful (index of new aoData entry), -1 if failed
         *  @memberof DataTable#oApi
         */


        function _fnAddData(oSettings, aDataIn, nTr, anTds) {
          /* Create the object for storing information about this new row */
          var iRow = oSettings.aoData.length;
          var oData = $.extend(true, {}, DataTable.models.oRow, {
            src: nTr ? 'dom' : 'data',
            idx: iRow
          });
          oData._aData = aDataIn;
          oSettings.aoData.push(oData);
          /* Create the cells */

          var nTd, sThisType;
          var columns = oSettings.aoColumns; // Invalidate the column types as the new data needs to be revalidated

          for (var i = 0, iLen = columns.length; i < iLen; i++) {
            columns[i].sType = null;
          }
          /* Add to the display array */


          oSettings.aiDisplayMaster.push(iRow);
          var id = oSettings.rowIdFn(aDataIn);

          if (id !== undefined) {
            oSettings.aIds[id] = oData;
          }
          /* Create the DOM information, or register it if already present */


          if (nTr || !oSettings.oFeatures.bDeferRender) {
            _fnCreateTr(oSettings, iRow, nTr, anTds);
          }

          return iRow;
        }
        /**
         * Add one or more TR elements to the table. Generally we'd expect to
         * use this for reading data from a DOM sourced table, but it could be
         * used for an TR element. Note that if a TR is given, it is used (i.e.
         * it is not cloned).
         *  @param {object} settings dataTables settings object
         *  @param {array|node|jQuery} trs The TR element(s) to add to the table
         *  @returns {array} Array of indexes for the added rows
         *  @memberof DataTable#oApi
         */


        function _fnAddTr(settings, trs) {
          var row; // Allow an individual node to be passed in

          if (!(trs instanceof $)) {
            trs = $(trs);
          }

          return trs.map(function (i, el) {
            row = _fnGetRowElements(settings, el);
            return _fnAddData(settings, row.data, el, row.cells);
          });
        }
        /**
         * Take a TR element and convert it to an index in aoData
         *  @param {object} oSettings dataTables settings object
         *  @param {node} n the TR element to find
         *  @returns {int} index if the node is found, null if not
         *  @memberof DataTable#oApi
         */


        function _fnNodeToDataIndex(oSettings, n) {
          return n._DT_RowIndex !== undefined ? n._DT_RowIndex : null;
        }
        /**
         * Take a TD element and convert it into a column data index (not the visible index)
         *  @param {object} oSettings dataTables settings object
         *  @param {int} iRow The row number the TD/TH can be found in
         *  @param {node} n The TD/TH element to find
         *  @returns {int} index if the node is found, -1 if not
         *  @memberof DataTable#oApi
         */


        function _fnNodeToColumnIndex(oSettings, iRow, n) {
          return $.inArray(n, oSettings.aoData[iRow].anCells);
        }
        /**
         * Get the data for a given cell from the internal cache, taking into account data mapping
         *  @param {object} settings dataTables settings object
         *  @param {int} rowIdx aoData row id
         *  @param {int} colIdx Column index
         *  @param {string} type data get type ('display', 'type' 'filter' 'sort')
         *  @returns {*} Cell data
         *  @memberof DataTable#oApi
         */


        function _fnGetCellData(settings, rowIdx, colIdx, type) {
          var draw = settings.iDraw;
          var col = settings.aoColumns[colIdx];
          var rowData = settings.aoData[rowIdx]._aData;
          var defaultContent = col.sDefaultContent;
          var cellData = col.fnGetData(rowData, type, {
            settings: settings,
            row: rowIdx,
            col: colIdx
          });

          if (cellData === undefined) {
            if (settings.iDrawError != draw && defaultContent === null) {
              _fnLog(settings, 0, "Requested unknown parameter " + (typeof col.mData == 'function' ? '{function}' : "'" + col.mData + "'") + " for row " + rowIdx + ", column " + colIdx, 4);

              settings.iDrawError = draw;
            }

            return defaultContent;
          } // When the data source is null and a specific data type is requested (i.e.
          // not the original data), we can use default column data


          if ((cellData === rowData || cellData === null) && defaultContent !== null && type !== undefined) {
            cellData = defaultContent;
          } else if (typeof cellData === 'function') {
            // If the data source is a function, then we run it and use the return,
            // executing in the scope of the data object (for instances)
            return cellData.call(rowData);
          }

          if (cellData === null && type == 'display') {
            return '';
          }

          return cellData;
        }
        /**
         * Set the value for a specific cell, into the internal data cache
         *  @param {object} settings dataTables settings object
         *  @param {int} rowIdx aoData row id
         *  @param {int} colIdx Column index
         *  @param {*} val Value to set
         *  @memberof DataTable#oApi
         */


        function _fnSetCellData(settings, rowIdx, colIdx, val) {
          var col = settings.aoColumns[colIdx];
          var rowData = settings.aoData[rowIdx]._aData;
          col.fnSetData(rowData, val, {
            settings: settings,
            row: rowIdx,
            col: colIdx
          });
        } // Private variable that is used to match action syntax in the data property object


        var __reArray = /\[.*?\]$/;
        var __reFn = /\(\)$/;
        /**
         * Split string on periods, taking into account escaped periods
         * @param  {string} str String to split
         * @return {array} Split string
         */

        function _fnSplitObjNotation(str) {
          return $.map(str.match(/(\\.|[^\.])+/g) || [''], function (s) {
            return s.replace(/\\\./g, '.');
          });
        }
        /**
         * Return a function that can be used to get data from a source object, taking
         * into account the ability to use nested objects as a source
         *  @param {string|int|function} mSource The data source for the object
         *  @returns {function} Data get function
         *  @memberof DataTable#oApi
         */


        function _fnGetObjectDataFn(mSource) {
          if ($.isPlainObject(mSource)) {
            /* Build an object of get functions, and wrap them in a single call */
            var o = {};
            $.each(mSource, function (key, val) {
              if (val) {
                o[key] = _fnGetObjectDataFn(val);
              }
            });
            return function (data, type, row, meta) {
              var t = o[type] || o._;
              return t !== undefined ? t(data, type, row, meta) : data;
            };
          } else if (mSource === null) {
            /* Give an empty string for rendering / sorting etc */
            return function (data) {
              // type, row and meta also passed, but not used
              return data;
            };
          } else if (typeof mSource === 'function') {
            return function (data, type, row, meta) {
              return mSource(data, type, row, meta);
            };
          } else if (typeof mSource === 'string' && (mSource.indexOf('.') !== -1 || mSource.indexOf('[') !== -1 || mSource.indexOf('(') !== -1)) {
            /* If there is a . in the source string then the data source is in a
             * nested object so we loop over the data for each level to get the next
             * level down. On each loop we test for undefined, and if found immediately
             * return. This allows entire objects to be missing and sDefaultContent to
             * be used if defined, rather than throwing an error
             */
            var fetchData = function fetchData(data, type, src) {
              var arrayNotation, funcNotation, out, innerSrc;

              if (src !== "") {
                var a = _fnSplitObjNotation(src);

                for (var i = 0, iLen = a.length; i < iLen; i++) {
                  // Check if we are dealing with special notation
                  arrayNotation = a[i].match(__reArray);
                  funcNotation = a[i].match(__reFn);

                  if (arrayNotation) {
                    // Array notation
                    a[i] = a[i].replace(__reArray, ''); // Condition allows simply [] to be passed in

                    if (a[i] !== "") {
                      data = data[a[i]];
                    }

                    out = []; // Get the remainder of the nested object to get

                    a.splice(0, i + 1);
                    innerSrc = a.join('.'); // Traverse each entry in the array getting the properties requested

                    if (Array.isArray(data)) {
                      for (var j = 0, jLen = data.length; j < jLen; j++) {
                        out.push(fetchData(data[j], type, innerSrc));
                      }
                    } // If a string is given in between the array notation indicators, that
                    // is used to join the strings together, otherwise an array is returned


                    var join = arrayNotation[0].substring(1, arrayNotation[0].length - 1);
                    data = join === "" ? out : out.join(join); // The inner call to fetchData has already traversed through the remainder
                    // of the source requested, so we exit from the loop

                    break;
                  } else if (funcNotation) {
                    // Function call
                    a[i] = a[i].replace(__reFn, '');
                    data = data[a[i]]();
                    continue;
                  }

                  if (data === null || data[a[i]] === undefined) {
                    return undefined;
                  }

                  data = data[a[i]];
                }
              }

              return data;
            };

            return function (data, type) {
              // row and meta also passed, but not used
              return fetchData(data, type, mSource);
            };
          } else {
            /* Array or flat object mapping */
            return function (data, type) {
              // row and meta also passed, but not used
              return data[mSource];
            };
          }
        }
        /**
         * Return a function that can be used to set data from a source object, taking
         * into account the ability to use nested objects as a source
         *  @param {string|int|function} mSource The data source for the object
         *  @returns {function} Data set function
         *  @memberof DataTable#oApi
         */


        function _fnSetObjectDataFn(mSource) {
          if ($.isPlainObject(mSource)) {
            /* Unlike get, only the underscore (global) option is used for for
             * setting data since we don't know the type here. This is why an object
             * option is not documented for `mData` (which is read/write), but it is
             * for `mRender` which is read only.
             */
            return _fnSetObjectDataFn(mSource._);
          } else if (mSource === null) {
            /* Nothing to do when the data source is null */
            return function () {};
          } else if (typeof mSource === 'function') {
            return function (data, val, meta) {
              mSource(data, 'set', val, meta);
            };
          } else if (typeof mSource === 'string' && (mSource.indexOf('.') !== -1 || mSource.indexOf('[') !== -1 || mSource.indexOf('(') !== -1)) {
            /* Like the get, we need to get data from a nested object */
            var setData = function setData(data, val, src) {
              var a = _fnSplitObjNotation(src),
                  b;

              var aLast = a[a.length - 1];
              var arrayNotation, funcNotation, o, innerSrc;

              for (var i = 0, iLen = a.length - 1; i < iLen; i++) {
                // Protect against prototype pollution
                if (a[i] === '__proto__' || a[i] === 'constructor') {
                  throw new Error('Cannot set prototype values');
                } // Check if we are dealing with an array notation request


                arrayNotation = a[i].match(__reArray);
                funcNotation = a[i].match(__reFn);

                if (arrayNotation) {
                  a[i] = a[i].replace(__reArray, '');
                  data[a[i]] = []; // Get the remainder of the nested object to set so we can recurse

                  b = a.slice();
                  b.splice(0, i + 1);
                  innerSrc = b.join('.'); // Traverse each entry in the array setting the properties requested

                  if (Array.isArray(val)) {
                    for (var j = 0, jLen = val.length; j < jLen; j++) {
                      o = {};
                      setData(o, val[j], innerSrc);
                      data[a[i]].push(o);
                    }
                  } else {
                    // We've been asked to save data to an array, but it
                    // isn't array data to be saved. Best that can be done
                    // is to just save the value.
                    data[a[i]] = val;
                  } // The inner call to setData has already traversed through the remainder
                  // of the source and has set the data, thus we can exit here


                  return;
                } else if (funcNotation) {
                  // Function call
                  a[i] = a[i].replace(__reFn, '');
                  data = data[a[i]](val);
                } // If the nested object doesn't currently exist - since we are
                // trying to set the value - create it


                if (data[a[i]] === null || data[a[i]] === undefined) {
                  data[a[i]] = {};
                }

                data = data[a[i]];
              } // Last item in the input - i.e, the actual set


              if (aLast.match(__reFn)) {
                // Function call
                data = data[aLast.replace(__reFn, '')](val);
              } else {
                // If array notation is used, we just want to strip it and use the property name
                // and assign the value. If it isn't used, then we get the result we want anyway
                data[aLast.replace(__reArray, '')] = val;
              }
            };

            return function (data, val) {
              // meta is also passed in, but not used
              return setData(data, val, mSource);
            };
          } else {
            /* Array or flat object mapping */
            return function (data, val) {
              // meta is also passed in, but not used
              data[mSource] = val;
            };
          }
        }
        /**
         * Return an array with the full table data
         *  @param {object} oSettings dataTables settings object
         *  @returns array {array} aData Master data array
         *  @memberof DataTable#oApi
         */


        function _fnGetDataMaster(settings) {
          return _pluck(settings.aoData, '_aData');
        }
        /**
         * Nuke the table
         *  @param {object} oSettings dataTables settings object
         *  @memberof DataTable#oApi
         */


        function _fnClearTable(settings) {
          settings.aoData.length = 0;
          settings.aiDisplayMaster.length = 0;
          settings.aiDisplay.length = 0;
          settings.aIds = {};
        }
        /**
        * Take an array of integers (index array) and remove a target integer (value - not
        * the key!)
        *  @param {array} a Index array to target
        *  @param {int} iTarget value to find
        *  @memberof DataTable#oApi
        */


        function _fnDeleteIndex(a, iTarget, splice) {
          var iTargetIndex = -1;

          for (var i = 0, iLen = a.length; i < iLen; i++) {
            if (a[i] == iTarget) {
              iTargetIndex = i;
            } else if (a[i] > iTarget) {
              a[i]--;
            }
          }

          if (iTargetIndex != -1 && splice === undefined) {
            a.splice(iTargetIndex, 1);
          }
        }
        /**
         * Mark cached data as invalid such that a re-read of the data will occur when
         * the cached data is next requested. Also update from the data source object.
         *
         * @param {object} settings DataTables settings object
         * @param {int}    rowIdx   Row index to invalidate
         * @param {string} [src]    Source to invalidate from: undefined, 'auto', 'dom'
         *     or 'data'
         * @param {int}    [colIdx] Column index to invalidate. If undefined the whole
         *     row will be invalidated
         * @memberof DataTable#oApi
         *
         * @todo For the modularisation of v1.11 this will need to become a callback, so
         *   the sort and filter methods can subscribe to it. That will required
         *   initialisation options for sorting, which is why it is not already baked in
         */


        function _fnInvalidate(settings, rowIdx, src, colIdx) {
          var row = settings.aoData[rowIdx];
          var i, ien;

          var cellWrite = function cellWrite(cell, col) {
            // This is very frustrating, but in IE if you just write directly
            // to innerHTML, and elements that are overwritten are GC'ed,
            // even if there is a reference to them elsewhere
            while (cell.childNodes.length) {
              cell.removeChild(cell.firstChild);
            }

            cell.innerHTML = _fnGetCellData(settings, rowIdx, col, 'display');
          }; // Are we reading last data from DOM or the data object?


          if (src === 'dom' || (!src || src === 'auto') && row.src === 'dom') {
            // Read the data from the DOM
            row._aData = _fnGetRowElements(settings, row, colIdx, colIdx === undefined ? undefined : row._aData).data;
          } else {
            // Reading from data object, update the DOM
            var cells = row.anCells;

            if (cells) {
              if (colIdx !== undefined) {
                cellWrite(cells[colIdx], colIdx);
              } else {
                for (i = 0, ien = cells.length; i < ien; i++) {
                  cellWrite(cells[i], i);
                }
              }
            }
          } // For both row and cell invalidation, the cached data for sorting and
          // filtering is nulled out


          row._aSortData = null;
          row._aFilterData = null; // Invalidate the type for a specific column (if given) or all columns since
          // the data might have changed

          var cols = settings.aoColumns;

          if (colIdx !== undefined) {
            cols[colIdx].sType = null;
          } else {
            for (i = 0, ien = cols.length; i < ien; i++) {
              cols[i].sType = null;
            } // Update DataTables special `DT_*` attributes for the row


            _fnRowAttributes(settings, row);
          }
        }
        /**
         * Build a data source object from an HTML row, reading the contents of the
         * cells that are in the row.
         *
         * @param {object} settings DataTables settings object
         * @param {node|object} TR element from which to read data or existing row
         *   object from which to re-read the data from the cells
         * @param {int} [colIdx] Optional column index
         * @param {array|object} [d] Data source object. If `colIdx` is given then this
         *   parameter should also be given and will be used to write the data into.
         *   Only the column in question will be written
         * @returns {object} Object with two parameters: `data` the data read, in
         *   document order, and `cells` and array of nodes (they can be useful to the
         *   caller, so rather than needing a second traversal to get them, just return
         *   them from here).
         * @memberof DataTable#oApi
         */


        function _fnGetRowElements(settings, row, colIdx, d) {
          var tds = [],
              td = row.firstChild,
              name,
              col,
              o,
              i = 0,
              contents,
              columns = settings.aoColumns,
              objectRead = settings._rowReadObject; // Allow the data object to be passed in, or construct

          d = d !== undefined ? d : objectRead ? {} : [];

          var attr = function attr(str, td) {
            if (typeof str === 'string') {
              var idx = str.indexOf('@');

              if (idx !== -1) {
                var attr = str.substring(idx + 1);

                var setter = _fnSetObjectDataFn(str);

                setter(d, td.getAttribute(attr));
              }
            }
          }; // Read data from a cell and store into the data object


          var cellProcess = function cellProcess(cell) {
            if (colIdx === undefined || colIdx === i) {
              col = columns[i];
              contents = cell.innerHTML.trim();

              if (col && col._bAttrSrc) {
                var setter = _fnSetObjectDataFn(col.mData._);

                setter(d, contents);
                attr(col.mData.sort, cell);
                attr(col.mData.type, cell);
                attr(col.mData.filter, cell);
              } else {
                // Depending on the `data` option for the columns the data can
                // be read to either an object or an array.
                if (objectRead) {
                  if (!col._setter) {
                    // Cache the setter function
                    col._setter = _fnSetObjectDataFn(col.mData);
                  }

                  col._setter(d, contents);
                } else {
                  d[i] = contents;
                }
              }
            }

            i++;
          };

          if (td) {
            // `tr` element was passed in
            while (td) {
              name = td.nodeName.toUpperCase();

              if (name == "TD" || name == "TH") {
                cellProcess(td);
                tds.push(td);
              }

              td = td.nextSibling;
            }
          } else {
            // Existing row object passed in
            tds = row.anCells;

            for (var j = 0, jen = tds.length; j < jen; j++) {
              cellProcess(tds[j]);
            }
          } // Read the ID from the DOM if present


          var rowNode = row.firstChild ? row : row.nTr;

          if (rowNode) {
            var id = rowNode.getAttribute('id');

            if (id) {
              _fnSetObjectDataFn(settings.rowId)(d, id);
            }
          }

          return {
            data: d,
            cells: tds
          };
        }
        /**
         * Create a new TR element (and it's TD children) for a row
         *  @param {object} oSettings dataTables settings object
         *  @param {int} iRow Row to consider
         *  @param {node} [nTrIn] TR element to add to the table - optional. If not given,
         *    DataTables will create a row automatically
         *  @param {array} [anTds] Array of TD|TH elements for the row - must be given
         *    if nTr is.
         *  @memberof DataTable#oApi
         */


        function _fnCreateTr(oSettings, iRow, nTrIn, anTds) {
          var row = oSettings.aoData[iRow],
              rowData = row._aData,
              cells = [],
              nTr,
              nTd,
              oCol,
              i,
              iLen,
              create;

          if (row.nTr === null) {
            nTr = nTrIn || document.createElement('tr');
            row.nTr = nTr;
            row.anCells = cells;
            /* Use a private property on the node to allow reserve mapping from the node
             * to the aoData array for fast look up
             */

            nTr._DT_RowIndex = iRow;
            /* Special parameters can be given by the data source to be used on the row */

            _fnRowAttributes(oSettings, row);
            /* Process each column */


            for (i = 0, iLen = oSettings.aoColumns.length; i < iLen; i++) {
              oCol = oSettings.aoColumns[i];
              create = nTrIn ? false : true;
              nTd = create ? document.createElement(oCol.sCellType) : anTds[i];
              nTd._DT_CellIndex = {
                row: iRow,
                column: i
              };
              cells.push(nTd); // Need to create the HTML if new, or if a rendering function is defined

              if (create || (oCol.mRender || oCol.mData !== i) && (!$.isPlainObject(oCol.mData) || oCol.mData._ !== i + '.display')) {
                nTd.innerHTML = _fnGetCellData(oSettings, iRow, i, 'display');
              }
              /* Add user defined class */


              if (oCol.sClass) {
                nTd.className += ' ' + oCol.sClass;
              } // Visibility - add or remove as required


              if (oCol.bVisible && !nTrIn) {
                nTr.appendChild(nTd);
              } else if (!oCol.bVisible && nTrIn) {
                nTd.parentNode.removeChild(nTd);
              }

              if (oCol.fnCreatedCell) {
                oCol.fnCreatedCell.call(oSettings.oInstance, nTd, _fnGetCellData(oSettings, iRow, i), rowData, iRow, i);
              }
            }

            _fnCallbackFire(oSettings, 'aoRowCreatedCallback', null, [nTr, rowData, iRow, cells]);
          }
        }
        /**
         * Add attributes to a row based on the special `DT_*` parameters in a data
         * source object.
         *  @param {object} settings DataTables settings object
         *  @param {object} DataTables row object for the row to be modified
         *  @memberof DataTable#oApi
         */


        function _fnRowAttributes(settings, row) {
          var tr = row.nTr;
          var data = row._aData;

          if (tr) {
            var id = settings.rowIdFn(data);

            if (id) {
              tr.id = id;
            }

            if (data.DT_RowClass) {
              // Remove any classes added by DT_RowClass before
              var a = data.DT_RowClass.split(' ');
              row.__rowc = row.__rowc ? _unique(row.__rowc.concat(a)) : a;
              $(tr).removeClass(row.__rowc.join(' ')).addClass(data.DT_RowClass);
            }

            if (data.DT_RowAttr) {
              $(tr).attr(data.DT_RowAttr);
            }

            if (data.DT_RowData) {
              $(tr).data(data.DT_RowData);
            }
          }
        }
        /**
         * Create the HTML header for the table
         *  @param {object} oSettings dataTables settings object
         *  @memberof DataTable#oApi
         */


        function _fnBuildHead(oSettings) {
          var i, ien, cell, row, column;
          var thead = oSettings.nTHead;
          var tfoot = oSettings.nTFoot;
          var createHeader = $('th, td', thead).length === 0;
          var classes = oSettings.oClasses;
          var columns = oSettings.aoColumns;

          if (createHeader) {
            row = $('<tr/>').appendTo(thead);
          }

          for (i = 0, ien = columns.length; i < ien; i++) {
            column = columns[i];
            cell = $(column.nTh).addClass(column.sClass);

            if (createHeader) {
              cell.appendTo(row);
            } // 1.11 move into sorting


            if (oSettings.oFeatures.bSort) {
              cell.addClass(column.sSortingClass);

              if (column.bSortable !== false) {
                cell.attr('tabindex', oSettings.iTabIndex).attr('aria-controls', oSettings.sTableId);

                _fnSortAttachListener(oSettings, column.nTh, i);
              }
            }

            if (column.sTitle != cell[0].innerHTML) {
              cell.html(column.sTitle);
            }

            _fnRenderer(oSettings, 'header')(oSettings, cell, column, classes);
          }

          if (createHeader) {
            _fnDetectHeader(oSettings.aoHeader, thead);
          }
          /* ARIA role for the rows */


          $(thead).children('tr').attr('role', 'row');
          /* Deal with the footer - add classes if required */

          $(thead).children('tr').children('th, td').addClass(classes.sHeaderTH);
          $(tfoot).children('tr').children('th, td').addClass(classes.sFooterTH); // Cache the footer cells. Note that we only take the cells from the first
          // row in the footer. If there is more than one row the user wants to
          // interact with, they need to use the table().foot() method. Note also this
          // allows cells to be used for multiple columns using colspan

          if (tfoot !== null) {
            var cells = oSettings.aoFooter[0];

            for (i = 0, ien = cells.length; i < ien; i++) {
              column = columns[i];
              column.nTf = cells[i].cell;

              if (column.sClass) {
                $(column.nTf).addClass(column.sClass);
              }
            }
          }
        }
        /**
         * Draw the header (or footer) element based on the column visibility states. The
         * methodology here is to use the layout array from _fnDetectHeader, modified for
         * the instantaneous column visibility, to construct the new layout. The grid is
         * traversed over cell at a time in a rows x columns grid fashion, although each
         * cell insert can cover multiple elements in the grid - which is tracks using the
         * aApplied array. Cell inserts in the grid will only occur where there isn't
         * already a cell in that position.
         *  @param {object} oSettings dataTables settings object
         *  @param array {objects} aoSource Layout array from _fnDetectHeader
         *  @param {boolean} [bIncludeHidden=false] If true then include the hidden columns in the calc,
         *  @memberof DataTable#oApi
         */


        function _fnDrawHead(oSettings, aoSource, bIncludeHidden) {
          var i, iLen, j, jLen, k, kLen, n, nLocalTr;
          var aoLocal = [];
          var aApplied = [];
          var iColumns = oSettings.aoColumns.length;
          var iRowspan, iColspan;

          if (!aoSource) {
            return;
          }

          if (bIncludeHidden === undefined) {
            bIncludeHidden = false;
          }
          /* Make a copy of the master layout array, but without the visible columns in it */


          for (i = 0, iLen = aoSource.length; i < iLen; i++) {
            aoLocal[i] = aoSource[i].slice();
            aoLocal[i].nTr = aoSource[i].nTr;
            /* Remove any columns which are currently hidden */

            for (j = iColumns - 1; j >= 0; j--) {
              if (!oSettings.aoColumns[j].bVisible && !bIncludeHidden) {
                aoLocal[i].splice(j, 1);
              }
            }
            /* Prep the applied array - it needs an element for each row */


            aApplied.push([]);
          }

          for (i = 0, iLen = aoLocal.length; i < iLen; i++) {
            nLocalTr = aoLocal[i].nTr;
            /* All cells are going to be replaced, so empty out the row */

            if (nLocalTr) {
              while (n = nLocalTr.firstChild) {
                nLocalTr.removeChild(n);
              }
            }

            for (j = 0, jLen = aoLocal[i].length; j < jLen; j++) {
              iRowspan = 1;
              iColspan = 1;
              /* Check to see if there is already a cell (row/colspan) covering our target
               * insert point. If there is, then there is nothing to do.
               */

              if (aApplied[i][j] === undefined) {
                nLocalTr.appendChild(aoLocal[i][j].cell);
                aApplied[i][j] = 1;
                /* Expand the cell to cover as many rows as needed */

                while (aoLocal[i + iRowspan] !== undefined && aoLocal[i][j].cell == aoLocal[i + iRowspan][j].cell) {
                  aApplied[i + iRowspan][j] = 1;
                  iRowspan++;
                }
                /* Expand the cell to cover as many columns as needed */


                while (aoLocal[i][j + iColspan] !== undefined && aoLocal[i][j].cell == aoLocal[i][j + iColspan].cell) {
                  /* Must update the applied array over the rows for the columns */
                  for (k = 0; k < iRowspan; k++) {
                    aApplied[i + k][j + iColspan] = 1;
                  }

                  iColspan++;
                }
                /* Do the actual expansion in the DOM */


                $(aoLocal[i][j].cell).attr('rowspan', iRowspan).attr('colspan', iColspan);
              }
            }
          }
        }
        /**
         * Insert the required TR nodes into the table for display
         *  @param {object} oSettings dataTables settings object
         *  @memberof DataTable#oApi
         */


        function _fnDraw(oSettings) {
          /* Provide a pre-callback function which can be used to cancel the draw is false is returned */
          var aPreDraw = _fnCallbackFire(oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings]);

          if ($.inArray(false, aPreDraw) !== -1) {
            _fnProcessingDisplay(oSettings, false);

            return;
          }

          var i, iLen, n;
          var anRows = [];
          var iRowCount = 0;
          var asStripeClasses = oSettings.asStripeClasses;
          var iStripes = asStripeClasses.length;
          var iOpenRows = oSettings.aoOpenRows.length;
          var oLang = oSettings.oLanguage;
          var iInitDisplayStart = oSettings.iInitDisplayStart;
          var bServerSide = _fnDataSource(oSettings) == 'ssp';
          var aiDisplay = oSettings.aiDisplay;
          oSettings.bDrawing = true;
          /* Check and see if we have an initial draw position from state saving */

          if (iInitDisplayStart !== undefined && iInitDisplayStart !== -1) {
            oSettings._iDisplayStart = bServerSide ? iInitDisplayStart : iInitDisplayStart >= oSettings.fnRecordsDisplay() ? 0 : iInitDisplayStart;
            oSettings.iInitDisplayStart = -1;
          }

          var iDisplayStart = oSettings._iDisplayStart;
          var iDisplayEnd = oSettings.fnDisplayEnd();
          /* Server-side processing draw intercept */

          if (oSettings.bDeferLoading) {
            oSettings.bDeferLoading = false;
            oSettings.iDraw++;

            _fnProcessingDisplay(oSettings, false);
          } else if (!bServerSide) {
            oSettings.iDraw++;
          } else if (!oSettings.bDestroying && !_fnAjaxUpdate(oSettings)) {
            return;
          }

          if (aiDisplay.length !== 0) {
            var iStart = bServerSide ? 0 : iDisplayStart;
            var iEnd = bServerSide ? oSettings.aoData.length : iDisplayEnd;

            for (var j = iStart; j < iEnd; j++) {
              var iDataIndex = aiDisplay[j];
              var aoData = oSettings.aoData[iDataIndex];

              if (aoData.nTr === null) {
                _fnCreateTr(oSettings, iDataIndex);
              }

              var nRow = aoData.nTr;
              /* Remove the old striping classes and then add the new one */

              if (iStripes !== 0) {
                var sStripe = asStripeClasses[iRowCount % iStripes];

                if (aoData._sRowStripe != sStripe) {
                  $(nRow).removeClass(aoData._sRowStripe).addClass(sStripe);
                  aoData._sRowStripe = sStripe;
                }
              } // Row callback functions - might want to manipulate the row
              // iRowCount and j are not currently documented. Are they at all
              // useful?


              _fnCallbackFire(oSettings, 'aoRowCallback', null, [nRow, aoData._aData, iRowCount, j, iDataIndex]);

              anRows.push(nRow);
              iRowCount++;
            }
          } else {
            /* Table is empty - create a row with an empty message in it */
            var sZero = oLang.sZeroRecords;

            if (oSettings.iDraw == 1 && _fnDataSource(oSettings) == 'ajax') {
              sZero = oLang.sLoadingRecords;
            } else if (oLang.sEmptyTable && oSettings.fnRecordsTotal() === 0) {
              sZero = oLang.sEmptyTable;
            }

            anRows[0] = $('<tr/>', {
              'class': iStripes ? asStripeClasses[0] : ''
            }).append($('<td />', {
              'valign': 'top',
              'colSpan': _fnVisbleColumns(oSettings),
              'class': oSettings.oClasses.sRowEmpty
            }).html(sZero))[0];
          }
          /* Header and footer callbacks */


          _fnCallbackFire(oSettings, 'aoHeaderCallback', 'header', [$(oSettings.nTHead).children('tr')[0], _fnGetDataMaster(oSettings), iDisplayStart, iDisplayEnd, aiDisplay]);

          _fnCallbackFire(oSettings, 'aoFooterCallback', 'footer', [$(oSettings.nTFoot).children('tr')[0], _fnGetDataMaster(oSettings), iDisplayStart, iDisplayEnd, aiDisplay]);

          var body = $(oSettings.nTBody);
          body.children().detach();
          body.append($(anRows));
          /* Call all required callback functions for the end of a draw */

          _fnCallbackFire(oSettings, 'aoDrawCallback', 'draw', [oSettings]);
          /* Draw is complete, sorting and filtering must be as well */


          oSettings.bSorted = false;
          oSettings.bFiltered = false;
          oSettings.bDrawing = false;
        }
        /**
         * Redraw the table - taking account of the various features which are enabled
         *  @param {object} oSettings dataTables settings object
         *  @param {boolean} [holdPosition] Keep the current paging position. By default
         *    the paging is reset to the first page
         *  @memberof DataTable#oApi
         */


        function _fnReDraw(settings, holdPosition) {
          var features = settings.oFeatures,
              sort = features.bSort,
              filter = features.bFilter;

          if (sort) {
            _fnSort(settings);
          }

          if (filter) {
            _fnFilterComplete(settings, settings.oPreviousSearch);
          } else {
            // No filtering, so we want to just use the display master
            settings.aiDisplay = settings.aiDisplayMaster.slice();
          }

          if (holdPosition !== true) {
            settings._iDisplayStart = 0;
          } // Let any modules know about the draw hold position state (used by
          // scrolling internally)


          settings._drawHold = holdPosition;

          _fnDraw(settings);

          settings._drawHold = false;
        }
        /**
         * Add the options to the page HTML for the table
         *  @param {object} oSettings dataTables settings object
         *  @memberof DataTable#oApi
         */


        function _fnAddOptionsHtml(oSettings) {
          var classes = oSettings.oClasses;
          var table = $(oSettings.nTable);
          var holding = $('<div/>').insertBefore(table); // Holding element for speed

          var features = oSettings.oFeatures; // All DataTables are wrapped in a div

          var insert = $('<div/>', {
            id: oSettings.sTableId + '_wrapper',
            'class': classes.sWrapper + (oSettings.nTFoot ? '' : ' ' + classes.sNoFooter)
          });
          oSettings.nHolding = holding[0];
          oSettings.nTableWrapper = insert[0];
          oSettings.nTableReinsertBefore = oSettings.nTable.nextSibling;
          /* Loop over the user set positioning and place the elements as needed */

          var aDom = oSettings.sDom.split('');
          var featureNode, cOption, nNewNode, cNext, sAttr, j;

          for (var i = 0; i < aDom.length; i++) {
            featureNode = null;
            cOption = aDom[i];

            if (cOption == '<') {
              /* New container div */
              nNewNode = $('<div/>')[0];
              /* Check to see if we should append an id and/or a class name to the container */

              cNext = aDom[i + 1];

              if (cNext == "'" || cNext == '"') {
                sAttr = "";
                j = 2;

                while (aDom[i + j] != cNext) {
                  sAttr += aDom[i + j];
                  j++;
                }
                /* Replace jQuery UI constants @todo depreciated */


                if (sAttr == "H") {
                  sAttr = classes.sJUIHeader;
                } else if (sAttr == "F") {
                  sAttr = classes.sJUIFooter;
                }
                /* The attribute can be in the format of "#id.class", "#id" or "class" This logic
                 * breaks the string into parts and applies them as needed
                 */


                if (sAttr.indexOf('.') != -1) {
                  var aSplit = sAttr.split('.');
                  nNewNode.id = aSplit[0].substr(1, aSplit[0].length - 1);
                  nNewNode.className = aSplit[1];
                } else if (sAttr.charAt(0) == "#") {
                  nNewNode.id = sAttr.substr(1, sAttr.length - 1);
                } else {
                  nNewNode.className = sAttr;
                }

                i += j;
                /* Move along the position array */
              }

              insert.append(nNewNode);
              insert = $(nNewNode);
            } else if (cOption == '>') {
              /* End container div */
              insert = insert.parent();
            } // @todo Move options into their own plugins?
            else if (cOption == 'l' && features.bPaginate && features.bLengthChange) {
                /* Length */
                featureNode = _fnFeatureHtmlLength(oSettings);
              } else if (cOption == 'f' && features.bFilter) {
                /* Filter */
                featureNode = _fnFeatureHtmlFilter(oSettings);
              } else if (cOption == 'r' && features.bProcessing) {
                /* pRocessing */
                featureNode = _fnFeatureHtmlProcessing(oSettings);
              } else if (cOption == 't') {
                /* Table */
                featureNode = _fnFeatureHtmlTable(oSettings);
              } else if (cOption == 'i' && features.bInfo) {
                /* Info */
                featureNode = _fnFeatureHtmlInfo(oSettings);
              } else if (cOption == 'p' && features.bPaginate) {
                /* Pagination */
                featureNode = _fnFeatureHtmlPaginate(oSettings);
              } else if (DataTable.ext.feature.length !== 0) {
                /* Plug-in features */
                var aoFeatures = DataTable.ext.feature;

                for (var k = 0, kLen = aoFeatures.length; k < kLen; k++) {
                  if (cOption == aoFeatures[k].cFeature) {
                    featureNode = aoFeatures[k].fnInit(oSettings);
                    break;
                  }
                }
              }
            /* Add to the 2D features array */


            if (featureNode) {
              var aanFeatures = oSettings.aanFeatures;

              if (!aanFeatures[cOption]) {
                aanFeatures[cOption] = [];
              }

              aanFeatures[cOption].push(featureNode);
              insert.append(featureNode);
            }
          }
          /* Built our DOM structure - replace the holding div with what we want */


          holding.replaceWith(insert);
          oSettings.nHolding = null;
        }
        /**
         * Use the DOM source to create up an array of header cells. The idea here is to
         * create a layout grid (array) of rows x columns, which contains a reference
         * to the cell that that point in the grid (regardless of col/rowspan), such that
         * any column / row could be removed and the new grid constructed
         *  @param array {object} aLayout Array to store the calculated layout in
         *  @param {node} nThead The header/footer element for the table
         *  @memberof DataTable#oApi
         */


        function _fnDetectHeader(aLayout, nThead) {
          var nTrs = $(nThead).children('tr');
          var nTr, nCell;
          var i, k, l, iLen, jLen, iColShifted, iColumn, iColspan, iRowspan;
          var bUnique;

          var fnShiftCol = function fnShiftCol(a, i, j) {
            var k = a[i];

            while (k[j]) {
              j++;
            }

            return j;
          };

          aLayout.splice(0, aLayout.length);
          /* We know how many rows there are in the layout - so prep it */

          for (i = 0, iLen = nTrs.length; i < iLen; i++) {
            aLayout.push([]);
          }
          /* Calculate a layout array */


          for (i = 0, iLen = nTrs.length; i < iLen; i++) {
            nTr = nTrs[i];
            iColumn = 0;
            /* For every cell in the row... */

            nCell = nTr.firstChild;

            while (nCell) {
              if (nCell.nodeName.toUpperCase() == "TD" || nCell.nodeName.toUpperCase() == "TH") {
                /* Get the col and rowspan attributes from the DOM and sanitise them */
                iColspan = nCell.getAttribute('colspan') * 1;
                iRowspan = nCell.getAttribute('rowspan') * 1;
                iColspan = !iColspan || iColspan === 0 || iColspan === 1 ? 1 : iColspan;
                iRowspan = !iRowspan || iRowspan === 0 || iRowspan === 1 ? 1 : iRowspan;
                /* There might be colspan cells already in this row, so shift our target
                 * accordingly
                 */

                iColShifted = fnShiftCol(aLayout, i, iColumn);
                /* Cache calculation for unique columns */

                bUnique = iColspan === 1 ? true : false;
                /* If there is col / rowspan, copy the information into the layout grid */

                for (l = 0; l < iColspan; l++) {
                  for (k = 0; k < iRowspan; k++) {
                    aLayout[i + k][iColShifted + l] = {
                      "cell": nCell,
                      "unique": bUnique
                    };
                    aLayout[i + k].nTr = nTr;
                  }
                }
              }

              nCell = nCell.nextSibling;
            }
          }
        }
        /**
         * Get an array of unique th elements, one for each column
         *  @param {object} oSettings dataTables settings object
         *  @param {node} nHeader automatically detect the layout from this node - optional
         *  @param {array} aLayout thead/tfoot layout from _fnDetectHeader - optional
         *  @returns array {node} aReturn list of unique th's
         *  @memberof DataTable#oApi
         */


        function _fnGetUniqueThs(oSettings, nHeader, aLayout) {
          var aReturn = [];

          if (!aLayout) {
            aLayout = oSettings.aoHeader;

            if (nHeader) {
              aLayout = [];

              _fnDetectHeader(aLayout, nHeader);
            }
          }

          for (var i = 0, iLen = aLayout.length; i < iLen; i++) {
            for (var j = 0, jLen = aLayout[i].length; j < jLen; j++) {
              if (aLayout[i][j].unique && (!aReturn[j] || !oSettings.bSortCellsTop)) {
                aReturn[j] = aLayout[i][j].cell;
              }
            }
          }

          return aReturn;
        }
        /**
         * Create an Ajax call based on the table's settings, taking into account that
         * parameters can have multiple forms, and backwards compatibility.
         *
         * @param {object} oSettings dataTables settings object
         * @param {array} data Data to send to the server, required by
         *     DataTables - may be augmented by developer callbacks
         * @param {function} fn Callback function to run when data is obtained
         */


        function _fnBuildAjax(oSettings, data, fn) {
          // Compatibility with 1.9-, allow fnServerData and event to manipulate
          _fnCallbackFire(oSettings, 'aoServerParams', 'serverParams', [data]); // Convert to object based for 1.10+ if using the old array scheme which can
          // come from server-side processing or serverParams


          if (data && Array.isArray(data)) {
            var tmp = {};
            var rbracket = /(.*?)\[\]$/;
            $.each(data, function (key, val) {
              var match = val.name.match(rbracket);

              if (match) {
                // Support for arrays
                var name = match[0];

                if (!tmp[name]) {
                  tmp[name] = [];
                }

                tmp[name].push(val.value);
              } else {
                tmp[val.name] = val.value;
              }
            });
            data = tmp;
          }

          var ajaxData;
          var ajax = oSettings.ajax;
          var instance = oSettings.oInstance;

          var callback = function callback(json) {
            _fnCallbackFire(oSettings, null, 'xhr', [oSettings, json, oSettings.jqXHR]);

            fn(json);
          };

          if ($.isPlainObject(ajax) && ajax.data) {
            ajaxData = ajax.data;
            var newData = typeof ajaxData === 'function' ? ajaxData(data, oSettings) : // fn can manipulate data or return
            ajaxData; // an object object or array to merge
            // If the function returned something, use that alone

            data = typeof ajaxData === 'function' && newData ? newData : $.extend(true, data, newData); // Remove the data property as we've resolved it already and don't want
            // jQuery to do it again (it is restored at the end of the function)

            delete ajax.data;
          }

          var baseAjax = {
            "data": data,
            "success": function success(json) {
              var error = json.error || json.sError;

              if (error) {
                _fnLog(oSettings, 0, error);
              }

              oSettings.json = json;
              callback(json);
            },
            "dataType": "json",
            "cache": false,
            "type": oSettings.sServerMethod,
            "error": function error(xhr, _error3, thrown) {
              var ret = _fnCallbackFire(oSettings, null, 'xhr', [oSettings, null, oSettings.jqXHR]);

              if ($.inArray(true, ret) === -1) {
                if (_error3 == "parsererror") {
                  _fnLog(oSettings, 0, 'Invalid JSON response', 1);
                } else if (xhr.readyState === 4) {
                  _fnLog(oSettings, 0, 'Ajax error', 7);
                }
              }

              _fnProcessingDisplay(oSettings, false);
            }
          }; // Store the data submitted for the API

          oSettings.oAjaxData = data; // Allow plug-ins and external processes to modify the data

          _fnCallbackFire(oSettings, null, 'preXhr', [oSettings, data]);

          if (oSettings.fnServerData) {
            // DataTables 1.9- compatibility
            oSettings.fnServerData.call(instance, oSettings.sAjaxSource, $.map(data, function (val, key) {
              // Need to convert back to 1.9 trad format
              return {
                name: key,
                value: val
              };
            }), callback, oSettings);
          } else if (oSettings.sAjaxSource || typeof ajax === 'string') {
            // DataTables 1.9- compatibility
            oSettings.jqXHR = $.ajax($.extend(baseAjax, {
              url: ajax || oSettings.sAjaxSource
            }));
          } else if (typeof ajax === 'function') {
            // Is a function - let the caller define what needs to be done
            oSettings.jqXHR = ajax.call(instance, data, callback, oSettings);
          } else {
            // Object to extend the base settings
            oSettings.jqXHR = $.ajax($.extend(baseAjax, ajax)); // Restore for next time around

            ajax.data = ajaxData;
          }
        }
        /**
         * Update the table using an Ajax call
         *  @param {object} settings dataTables settings object
         *  @returns {boolean} Block the table drawing or not
         *  @memberof DataTable#oApi
         */


        function _fnAjaxUpdate(settings) {
          if (settings.bAjaxDataGet) {
            settings.iDraw++;

            _fnProcessingDisplay(settings, true);

            _fnBuildAjax(settings, _fnAjaxParameters(settings), function (json) {
              _fnAjaxUpdateDraw(settings, json);
            });

            return false;
          }

          return true;
        }
        /**
         * Build up the parameters in an object needed for a server-side processing
         * request. Note that this is basically done twice, is different ways - a modern
         * method which is used by default in DataTables 1.10 which uses objects and
         * arrays, or the 1.9- method with is name / value pairs. 1.9 method is used if
         * the sAjaxSource option is used in the initialisation, or the legacyAjax
         * option is set.
         *  @param {object} oSettings dataTables settings object
         *  @returns {bool} block the table drawing or not
         *  @memberof DataTable#oApi
         */


        function _fnAjaxParameters(settings) {
          var columns = settings.aoColumns,
              columnCount = columns.length,
              features = settings.oFeatures,
              preSearch = settings.oPreviousSearch,
              preColSearch = settings.aoPreSearchCols,
              i,
              data = [],
              dataProp,
              column,
              columnSearch,
              sort = _fnSortFlatten(settings),
              displayStart = settings._iDisplayStart,
              displayLength = features.bPaginate !== false ? settings._iDisplayLength : -1;

          var param = function param(name, value) {
            data.push({
              'name': name,
              'value': value
            });
          }; // DataTables 1.9- compatible method


          param('sEcho', settings.iDraw);
          param('iColumns', columnCount);
          param('sColumns', _pluck(columns, 'sName').join(','));
          param('iDisplayStart', displayStart);
          param('iDisplayLength', displayLength); // DataTables 1.10+ method

          var d = {
            draw: settings.iDraw,
            columns: [],
            order: [],
            start: displayStart,
            length: displayLength,
            search: {
              value: preSearch.sSearch,
              regex: preSearch.bRegex
            }
          };

          for (i = 0; i < columnCount; i++) {
            column = columns[i];
            columnSearch = preColSearch[i];
            dataProp = typeof column.mData == "function" ? 'function' : column.mData;
            d.columns.push({
              data: dataProp,
              name: column.sName,
              searchable: column.bSearchable,
              orderable: column.bSortable,
              search: {
                value: columnSearch.sSearch,
                regex: columnSearch.bRegex
              }
            });
            param("mDataProp_" + i, dataProp);

            if (features.bFilter) {
              param('sSearch_' + i, columnSearch.sSearch);
              param('bRegex_' + i, columnSearch.bRegex);
              param('bSearchable_' + i, column.bSearchable);
            }

            if (features.bSort) {
              param('bSortable_' + i, column.bSortable);
            }
          }

          if (features.bFilter) {
            param('sSearch', preSearch.sSearch);
            param('bRegex', preSearch.bRegex);
          }

          if (features.bSort) {
            $.each(sort, function (i, val) {
              d.order.push({
                column: val.col,
                dir: val.dir
              });
              param('iSortCol_' + i, val.col);
              param('sSortDir_' + i, val.dir);
            });
            param('iSortingCols', sort.length);
          } // If the legacy.ajax parameter is null, then we automatically decide which
          // form to use, based on sAjaxSource


          var legacy = DataTable.ext.legacy.ajax;

          if (legacy === null) {
            return settings.sAjaxSource ? data : d;
          } // Otherwise, if legacy has been specified then we use that to decide on the
          // form


          return legacy ? data : d;
        }
        /**
         * Data the data from the server (nuking the old) and redraw the table
         *  @param {object} oSettings dataTables settings object
         *  @param {object} json json data return from the server.
         *  @param {string} json.sEcho Tracking flag for DataTables to match requests
         *  @param {int} json.iTotalRecords Number of records in the data set, not accounting for filtering
         *  @param {int} json.iTotalDisplayRecords Number of records in the data set, accounting for filtering
         *  @param {array} json.aaData The data to display on this page
         *  @param {string} [json.sColumns] Column ordering (sName, comma separated)
         *  @memberof DataTable#oApi
         */


        function _fnAjaxUpdateDraw(settings, json) {
          // v1.10 uses camelCase variables, while 1.9 uses Hungarian notation.
          // Support both
          var compat = function compat(old, modern) {
            return json[old] !== undefined ? json[old] : json[modern];
          };

          var data = _fnAjaxDataSrc(settings, json);

          var draw = compat('sEcho', 'draw');
          var recordsTotal = compat('iTotalRecords', 'recordsTotal');
          var recordsFiltered = compat('iTotalDisplayRecords', 'recordsFiltered');

          if (draw !== undefined) {
            // Protect against out of sequence returns
            if (draw * 1 < settings.iDraw) {
              return;
            }

            settings.iDraw = draw * 1;
          }

          _fnClearTable(settings);

          settings._iRecordsTotal = parseInt(recordsTotal, 10);
          settings._iRecordsDisplay = parseInt(recordsFiltered, 10);

          for (var i = 0, ien = data.length; i < ien; i++) {
            _fnAddData(settings, data[i]);
          }

          settings.aiDisplay = settings.aiDisplayMaster.slice();
          settings.bAjaxDataGet = false;

          _fnDraw(settings);

          if (!settings._bInitComplete) {
            _fnInitComplete(settings, json);
          }

          settings.bAjaxDataGet = true;

          _fnProcessingDisplay(settings, false);
        }
        /**
         * Get the data from the JSON data source to use for drawing a table. Using
         * `_fnGetObjectDataFn` allows the data to be sourced from a property of the
         * source object, or from a processing function.
         *  @param {object} oSettings dataTables settings object
         *  @param  {object} json Data source object / array from the server
         *  @return {array} Array of data to use
         */


        function _fnAjaxDataSrc(oSettings, json) {
          var dataSrc = $.isPlainObject(oSettings.ajax) && oSettings.ajax.dataSrc !== undefined ? oSettings.ajax.dataSrc : oSettings.sAjaxDataProp; // Compatibility with 1.9-.
          // Compatibility with 1.9-. In order to read from aaData, check if the
          // default has been changed, if not, check for aaData

          if (dataSrc === 'data') {
            return json.aaData || json[dataSrc];
          }

          return dataSrc !== "" ? _fnGetObjectDataFn(dataSrc)(json) : json;
        }
        /**
         * Generate the node required for filtering text
         *  @returns {node} Filter control element
         *  @param {object} oSettings dataTables settings object
         *  @memberof DataTable#oApi
         */


        function _fnFeatureHtmlFilter(settings) {
          var classes = settings.oClasses;
          var tableId = settings.sTableId;
          var language = settings.oLanguage;
          var previousSearch = settings.oPreviousSearch;
          var features = settings.aanFeatures;
          var input = '<input type="search" class="' + classes.sFilterInput + '"/>';
          var str = language.sSearch;
          str = str.match(/_INPUT_/) ? str.replace('_INPUT_', input) : str + input;
          var filter = $('<div/>', {
            'id': !features.f ? tableId + '_filter' : null,
            'class': classes.sFilter
          }).append($('<label/>').append(str));

          var searchFn = function searchFn() {
            /* Update all other filter input elements for the new display */
            var n = features.f;
            var val = !this.value ? "" : this.value; // mental IE8 fix :-(

            /* Now do the filter */

            if (val != previousSearch.sSearch) {
              _fnFilterComplete(settings, {
                "sSearch": val,
                "bRegex": previousSearch.bRegex,
                "bSmart": previousSearch.bSmart,
                "bCaseInsensitive": previousSearch.bCaseInsensitive
              }); // Need to redraw, without resorting


              settings._iDisplayStart = 0;

              _fnDraw(settings);
            }
          };

          var searchDelay = settings.searchDelay !== null ? settings.searchDelay : _fnDataSource(settings) === 'ssp' ? 400 : 0;
          var jqFilter = $('input', filter).val(previousSearch.sSearch).attr('placeholder', language.sSearchPlaceholder).on('keyup.DT search.DT input.DT paste.DT cut.DT', searchDelay ? _fnThrottle(searchFn, searchDelay) : searchFn).on('mouseup', function (e) {
            // Edge fix! Edge 17 does not trigger anything other than mouse events when clicking
            // on the clear icon (Edge bug 17584515). This is safe in other browsers as `searchFn`
            // checks the value to see if it has changed. In other browsers it won't have.
            setTimeout(function () {
              searchFn.call(jqFilter[0]);
            }, 10);
          }).on('keypress.DT', function (e) {
            /* Prevent form submission */
            if (e.keyCode == 13) {
              return false;
            }
          }).attr('aria-controls', tableId); // Update the input elements whenever the table is filtered

          $(settings.nTable).on('search.dt.DT', function (ev, s) {
            if (settings === s) {
              // IE9 throws an 'unknown error' if document.activeElement is used
              // inside an iframe or frame...
              try {
                if (jqFilter[0] !== document.activeElement) {
                  jqFilter.val(previousSearch.sSearch);
                }
              } catch (e) {}
            }
          });
          return filter[0];
        }
        /**
         * Filter the table using both the global filter and column based filtering
         *  @param {object} oSettings dataTables settings object
         *  @param {object} oSearch search information
         *  @param {int} [iForce] force a research of the master array (1) or not (undefined or 0)
         *  @memberof DataTable#oApi
         */


        function _fnFilterComplete(oSettings, oInput, iForce) {
          var oPrevSearch = oSettings.oPreviousSearch;
          var aoPrevSearch = oSettings.aoPreSearchCols;

          var fnSaveFilter = function fnSaveFilter(oFilter) {
            /* Save the filtering values */
            oPrevSearch.sSearch = oFilter.sSearch;
            oPrevSearch.bRegex = oFilter.bRegex;
            oPrevSearch.bSmart = oFilter.bSmart;
            oPrevSearch.bCaseInsensitive = oFilter.bCaseInsensitive;
          };

          var fnRegex = function fnRegex(o) {
            // Backwards compatibility with the bEscapeRegex option
            return o.bEscapeRegex !== undefined ? !o.bEscapeRegex : o.bRegex;
          }; // Resolve any column types that are unknown due to addition or invalidation
          // @todo As per sort - can this be moved into an event handler?


          _fnColumnTypes(oSettings);
          /* In server-side processing all filtering is done by the server, so no point hanging around here */


          if (_fnDataSource(oSettings) != 'ssp') {
            /* Global filter */
            _fnFilter(oSettings, oInput.sSearch, iForce, fnRegex(oInput), oInput.bSmart, oInput.bCaseInsensitive);

            fnSaveFilter(oInput);
            /* Now do the individual column filter */

            for (var i = 0; i < aoPrevSearch.length; i++) {
              _fnFilterColumn(oSettings, aoPrevSearch[i].sSearch, i, fnRegex(aoPrevSearch[i]), aoPrevSearch[i].bSmart, aoPrevSearch[i].bCaseInsensitive);
            }
            /* Custom filtering */


            _fnFilterCustom(oSettings);
          } else {
            fnSaveFilter(oInput);
          }
          /* Tell the draw function we have been filtering */


          oSettings.bFiltered = true;

          _fnCallbackFire(oSettings, null, 'search', [oSettings]);
        }
        /**
         * Apply custom filtering functions
         *  @param {object} oSettings dataTables settings object
         *  @memberof DataTable#oApi
         */


        function _fnFilterCustom(settings) {
          var filters = DataTable.ext.search;
          var displayRows = settings.aiDisplay;
          var row, rowIdx;

          for (var i = 0, ien = filters.length; i < ien; i++) {
            var rows = []; // Loop over each row and see if it should be included

            for (var j = 0, jen = displayRows.length; j < jen; j++) {
              rowIdx = displayRows[j];
              row = settings.aoData[rowIdx];

              if (filters[i](settings, row._aFilterData, rowIdx, row._aData, j)) {
                rows.push(rowIdx);
              }
            } // So the array reference doesn't break set the results into the
            // existing array


            displayRows.length = 0;
            $.merge(displayRows, rows);
          }
        }
        /**
         * Filter the table on a per-column basis
         *  @param {object} oSettings dataTables settings object
         *  @param {string} sInput string to filter on
         *  @param {int} iColumn column to filter
         *  @param {bool} bRegex treat search string as a regular expression or not
         *  @param {bool} bSmart use smart filtering or not
         *  @param {bool} bCaseInsensitive Do case insenstive matching or not
         *  @memberof DataTable#oApi
         */


        function _fnFilterColumn(settings, searchStr, colIdx, regex, smart, caseInsensitive) {
          if (searchStr === '') {
            return;
          }

          var data;
          var out = [];
          var display = settings.aiDisplay;

          var rpSearch = _fnFilterCreateSearch(searchStr, regex, smart, caseInsensitive);

          for (var i = 0; i < display.length; i++) {
            data = settings.aoData[display[i]]._aFilterData[colIdx];

            if (rpSearch.test(data)) {
              out.push(display[i]);
            }
          }

          settings.aiDisplay = out;
        }
        /**
         * Filter the data table based on user input and draw the table
         *  @param {object} settings dataTables settings object
         *  @param {string} input string to filter on
         *  @param {int} force optional - force a research of the master array (1) or not (undefined or 0)
         *  @param {bool} regex treat as a regular expression or not
         *  @param {bool} smart perform smart filtering or not
         *  @param {bool} caseInsensitive Do case insenstive matching or not
         *  @memberof DataTable#oApi
         */


        function _fnFilter(settings, input, force, regex, smart, caseInsensitive) {
          var rpSearch = _fnFilterCreateSearch(input, regex, smart, caseInsensitive);

          var prevSearch = settings.oPreviousSearch.sSearch;
          var displayMaster = settings.aiDisplayMaster;
          var display, invalidated, i;
          var filtered = []; // Need to take account of custom filtering functions - always filter

          if (DataTable.ext.search.length !== 0) {
            force = true;
          } // Check if any of the rows were invalidated


          invalidated = _fnFilterData(settings); // If the input is blank - we just want the full data set

          if (input.length <= 0) {
            settings.aiDisplay = displayMaster.slice();
          } else {
            // New search - start from the master array
            if (invalidated || force || regex || prevSearch.length > input.length || input.indexOf(prevSearch) !== 0 || settings.bSorted // On resort, the display master needs to be
            // re-filtered since indexes will have changed
            ) {
                settings.aiDisplay = displayMaster.slice();
              } // Search the display array


            display = settings.aiDisplay;

            for (i = 0; i < display.length; i++) {
              if (rpSearch.test(settings.aoData[display[i]]._sFilterRow)) {
                filtered.push(display[i]);
              }
            }

            settings.aiDisplay = filtered;
          }
        }
        /**
         * Build a regular expression object suitable for searching a table
         *  @param {string} sSearch string to search for
         *  @param {bool} bRegex treat as a regular expression or not
         *  @param {bool} bSmart perform smart filtering or not
         *  @param {bool} bCaseInsensitive Do case insensitive matching or not
         *  @returns {RegExp} constructed object
         *  @memberof DataTable#oApi
         */


        function _fnFilterCreateSearch(search, regex, smart, caseInsensitive) {
          search = regex ? search : _fnEscapeRegex(search);

          if (smart) {
            /* For smart filtering we want to allow the search to work regardless of
             * word order. We also want double quoted text to be preserved, so word
             * order is important - a la google. So this is what we want to
             * generate:
             * 
             * ^(?=.*?\bone\b)(?=.*?\btwo three\b)(?=.*?\bfour\b).*$
             */
            var a = $.map(search.match(/"[^"]+"|[^ ]+/g) || [''], function (word) {
              if (word.charAt(0) === '"') {
                var m = word.match(/^"(.*)"$/);
                word = m ? m[1] : word;
              }

              return word.replace('"', '');
            });
            search = '^(?=.*?' + a.join(')(?=.*?') + ').*$';
          }

          return new RegExp(search, caseInsensitive ? 'i' : '');
        }
        /**
         * Escape a string such that it can be used in a regular expression
         *  @param {string} sVal string to escape
         *  @returns {string} escaped string
         *  @memberof DataTable#oApi
         */


        var _fnEscapeRegex = DataTable.util.escapeRegex;
        var __filter_div = $('<div>')[0];

        var __filter_div_textContent = __filter_div.textContent !== undefined; // Update the filtering data for each row if needed (by invalidation or first run)


        function _fnFilterData(settings) {
          var columns = settings.aoColumns;
          var column;
          var i, j, ien, jen, filterData, cellData, row;
          var fomatters = DataTable.ext.type.search;
          var wasInvalidated = false;

          for (i = 0, ien = settings.aoData.length; i < ien; i++) {
            row = settings.aoData[i];

            if (!row._aFilterData) {
              filterData = [];

              for (j = 0, jen = columns.length; j < jen; j++) {
                column = columns[j];

                if (column.bSearchable) {
                  cellData = _fnGetCellData(settings, i, j, 'filter');

                  if (fomatters[column.sType]) {
                    cellData = fomatters[column.sType](cellData);
                  } // Search in DataTables 1.10 is string based. In 1.11 this
                  // should be altered to also allow strict type checking.


                  if (cellData === null) {
                    cellData = '';
                  }

                  if (typeof cellData !== 'string' && cellData.toString) {
                    cellData = cellData.toString();
                  }
                } else {
                  cellData = '';
                } // If it looks like there is an HTML entity in the string,
                // attempt to decode it so sorting works as expected. Note that
                // we could use a single line of jQuery to do this, but the DOM
                // method used here is much faster http://jsperf.com/html-decode


                if (cellData.indexOf && cellData.indexOf('&') !== -1) {
                  __filter_div.innerHTML = cellData;
                  cellData = __filter_div_textContent ? __filter_div.textContent : __filter_div.innerText;
                }

                if (cellData.replace) {
                  cellData = cellData.replace(/[\r\n\u2028]/g, '');
                }

                filterData.push(cellData);
              }

              row._aFilterData = filterData;
              row._sFilterRow = filterData.join('  ');
              wasInvalidated = true;
            }
          }

          return wasInvalidated;
        }
        /**
         * Convert from the internal Hungarian notation to camelCase for external
         * interaction
         *  @param {object} obj Object to convert
         *  @returns {object} Inverted object
         *  @memberof DataTable#oApi
         */


        function _fnSearchToCamel(obj) {
          return {
            search: obj.sSearch,
            smart: obj.bSmart,
            regex: obj.bRegex,
            caseInsensitive: obj.bCaseInsensitive
          };
        }
        /**
         * Convert from camelCase notation to the internal Hungarian. We could use the
         * Hungarian convert function here, but this is cleaner
         *  @param {object} obj Object to convert
         *  @returns {object} Inverted object
         *  @memberof DataTable#oApi
         */


        function _fnSearchToHung(obj) {
          return {
            sSearch: obj.search,
            bSmart: obj.smart,
            bRegex: obj.regex,
            bCaseInsensitive: obj.caseInsensitive
          };
        }
        /**
         * Generate the node required for the info display
         *  @param {object} oSettings dataTables settings object
         *  @returns {node} Information element
         *  @memberof DataTable#oApi
         */


        function _fnFeatureHtmlInfo(settings) {
          var tid = settings.sTableId,
              nodes = settings.aanFeatures.i,
              n = $('<div/>', {
            'class': settings.oClasses.sInfo,
            'id': !nodes ? tid + '_info' : null
          });

          if (!nodes) {
            // Update display on each draw
            settings.aoDrawCallback.push({
              "fn": _fnUpdateInfo,
              "sName": "information"
            });
            n.attr('role', 'status').attr('aria-live', 'polite'); // Table is described by our info div

            $(settings.nTable).attr('aria-describedby', tid + '_info');
          }

          return n[0];
        }
        /**
         * Update the information elements in the display
         *  @param {object} settings dataTables settings object
         *  @memberof DataTable#oApi
         */


        function _fnUpdateInfo(settings) {
          /* Show information about the table */
          var nodes = settings.aanFeatures.i;

          if (nodes.length === 0) {
            return;
          }

          var lang = settings.oLanguage,
              start = settings._iDisplayStart + 1,
              end = settings.fnDisplayEnd(),
              max = settings.fnRecordsTotal(),
              total = settings.fnRecordsDisplay(),
              out = total ? lang.sInfo : lang.sInfoEmpty;

          if (total !== max) {
            /* Record set after filtering */
            out += ' ' + lang.sInfoFiltered;
          } // Convert the macros


          out += lang.sInfoPostFix;
          out = _fnInfoMacros(settings, out);
          var callback = lang.fnInfoCallback;

          if (callback !== null) {
            out = callback.call(settings.oInstance, settings, start, end, max, total, out);
          }

          $(nodes).html(out);
        }

        function _fnInfoMacros(settings, str) {
          // When infinite scrolling, we are always starting at 1. _iDisplayStart is used only
          // internally
          var formatter = settings.fnFormatNumber,
              start = settings._iDisplayStart + 1,
              len = settings._iDisplayLength,
              vis = settings.fnRecordsDisplay(),
              all = len === -1;
          return str.replace(/_START_/g, formatter.call(settings, start)).replace(/_END_/g, formatter.call(settings, settings.fnDisplayEnd())).replace(/_MAX_/g, formatter.call(settings, settings.fnRecordsTotal())).replace(/_TOTAL_/g, formatter.call(settings, vis)).replace(/_PAGE_/g, formatter.call(settings, all ? 1 : Math.ceil(start / len))).replace(/_PAGES_/g, formatter.call(settings, all ? 1 : Math.ceil(vis / len)));
        }
        /**
         * Draw the table for the first time, adding all required features
         *  @param {object} settings dataTables settings object
         *  @memberof DataTable#oApi
         */


        function _fnInitialise(settings) {
          var i,
              iLen,
              iAjaxStart = settings.iInitDisplayStart;
          var columns = settings.aoColumns,
              column;
          var features = settings.oFeatures;
          var deferLoading = settings.bDeferLoading; // value modified by the draw

          /* Ensure that the table data is fully initialised */

          if (!settings.bInitialised) {
            setTimeout(function () {
              _fnInitialise(settings);
            }, 200);
            return;
          }
          /* Show the display HTML options */


          _fnAddOptionsHtml(settings);
          /* Build and draw the header / footer for the table */


          _fnBuildHead(settings);

          _fnDrawHead(settings, settings.aoHeader);

          _fnDrawHead(settings, settings.aoFooter);
          /* Okay to show that something is going on now */


          _fnProcessingDisplay(settings, true);
          /* Calculate sizes for columns */


          if (features.bAutoWidth) {
            _fnCalculateColumnWidths(settings);
          }

          for (i = 0, iLen = columns.length; i < iLen; i++) {
            column = columns[i];

            if (column.sWidth) {
              column.nTh.style.width = _fnStringToCss(column.sWidth);
            }
          }

          _fnCallbackFire(settings, null, 'preInit', [settings]); // If there is default sorting required - let's do it. The sort function
          // will do the drawing for us. Otherwise we draw the table regardless of the
          // Ajax source - this allows the table to look initialised for Ajax sourcing
          // data (show 'loading' message possibly)


          _fnReDraw(settings); // Server-side processing init complete is done by _fnAjaxUpdateDraw


          var dataSrc = _fnDataSource(settings);

          if (dataSrc != 'ssp' || deferLoading) {
            // if there is an ajax source load the data
            if (dataSrc == 'ajax') {
              _fnBuildAjax(settings, [], function (json) {
                var aData = _fnAjaxDataSrc(settings, json); // Got the data - add it to the table


                for (i = 0; i < aData.length; i++) {
                  _fnAddData(settings, aData[i]);
                } // Reset the init display for cookie saving. We've already done
                // a filter, and therefore cleared it before. So we need to make
                // it appear 'fresh'


                settings.iInitDisplayStart = iAjaxStart;

                _fnReDraw(settings);

                _fnProcessingDisplay(settings, false);

                _fnInitComplete(settings, json);
              }, settings);
            } else {
              _fnProcessingDisplay(settings, false);

              _fnInitComplete(settings);
            }
          }
        }
        /**
         * Draw the table for the first time, adding all required features
         *  @param {object} oSettings dataTables settings object
         *  @param {object} [json] JSON from the server that completed the table, if using Ajax source
         *    with client-side processing (optional)
         *  @memberof DataTable#oApi
         */


        function _fnInitComplete(settings, json) {
          settings._bInitComplete = true; // When data was added after the initialisation (data or Ajax) we need to
          // calculate the column sizing

          if (json || settings.oInit.aaData) {
            _fnAdjustColumnSizing(settings);
          }

          _fnCallbackFire(settings, null, 'plugin-init', [settings, json]);

          _fnCallbackFire(settings, 'aoInitComplete', 'init', [settings, json]);
        }

        function _fnLengthChange(settings, val) {
          var len = parseInt(val, 10);
          settings._iDisplayLength = len;

          _fnLengthOverflow(settings); // Fire length change event


          _fnCallbackFire(settings, null, 'length', [settings, len]);
        }
        /**
         * Generate the node required for user display length changing
         *  @param {object} settings dataTables settings object
         *  @returns {node} Display length feature node
         *  @memberof DataTable#oApi
         */


        function _fnFeatureHtmlLength(settings) {
          var classes = settings.oClasses,
              tableId = settings.sTableId,
              menu = settings.aLengthMenu,
              d2 = Array.isArray(menu[0]),
              lengths = d2 ? menu[0] : menu,
              language = d2 ? menu[1] : menu;
          var select = $('<select/>', {
            'name': tableId + '_length',
            'aria-controls': tableId,
            'class': classes.sLengthSelect
          });

          for (var i = 0, ien = lengths.length; i < ien; i++) {
            select[0][i] = new Option(typeof language[i] === 'number' ? settings.fnFormatNumber(language[i]) : language[i], lengths[i]);
          }

          var div = $('<div><label/></div>').addClass(classes.sLength);

          if (!settings.aanFeatures.l) {
            div[0].id = tableId + '_length';
          }

          div.children().append(settings.oLanguage.sLengthMenu.replace('_MENU_', select[0].outerHTML)); // Can't use `select` variable as user might provide their own and the
          // reference is broken by the use of outerHTML

          $('select', div).val(settings._iDisplayLength).on('change.DT', function (e) {
            _fnLengthChange(settings, $(this).val());

            _fnDraw(settings);
          }); // Update node value whenever anything changes the table's length

          $(settings.nTable).on('length.dt.DT', function (e, s, len) {
            if (settings === s) {
              $('select', div).val(len);
            }
          });
          return div[0];
        }
        /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
         * Note that most of the paging logic is done in
         * DataTable.ext.pager
         */

        /**
         * Generate the node required for default pagination
         *  @param {object} oSettings dataTables settings object
         *  @returns {node} Pagination feature node
         *  @memberof DataTable#oApi
         */


        function _fnFeatureHtmlPaginate(settings) {
          var type = settings.sPaginationType,
              plugin = DataTable.ext.pager[type],
              modern = typeof plugin === 'function',
              redraw = function redraw(settings) {
            _fnDraw(settings);
          },
              node = $('<div/>').addClass(settings.oClasses.sPaging + type)[0],
              features = settings.aanFeatures;

          if (!modern) {
            plugin.fnInit(settings, node, redraw);
          }
          /* Add a draw callback for the pagination on first instance, to update the paging display */


          if (!features.p) {
            node.id = settings.sTableId + '_paginate';
            settings.aoDrawCallback.push({
              "fn": function fn(settings) {
                if (modern) {
                  var start = settings._iDisplayStart,
                      len = settings._iDisplayLength,
                      visRecords = settings.fnRecordsDisplay(),
                      all = len === -1,
                      page = all ? 0 : Math.ceil(start / len),
                      pages = all ? 1 : Math.ceil(visRecords / len),
                      buttons = plugin(page, pages),
                      i,
                      ien;

                  for (i = 0, ien = features.p.length; i < ien; i++) {
                    _fnRenderer(settings, 'pageButton')(settings, features.p[i], i, buttons, page, pages);
                  }
                } else {
                  plugin.fnUpdate(settings, redraw);
                }
              },
              "sName": "pagination"
            });
          }

          return node;
        }
        /**
         * Alter the display settings to change the page
         *  @param {object} settings DataTables settings object
         *  @param {string|int} action Paging action to take: "first", "previous",
         *    "next" or "last" or page number to jump to (integer)
         *  @param [bool] redraw Automatically draw the update or not
         *  @returns {bool} true page has changed, false - no change
         *  @memberof DataTable#oApi
         */


        function _fnPageChange(settings, action, redraw) {
          var start = settings._iDisplayStart,
              len = settings._iDisplayLength,
              records = settings.fnRecordsDisplay();

          if (records === 0 || len === -1) {
            start = 0;
          } else if (typeof action === "number") {
            start = action * len;

            if (start > records) {
              start = 0;
            }
          } else if (action == "first") {
            start = 0;
          } else if (action == "previous") {
            start = len >= 0 ? start - len : 0;

            if (start < 0) {
              start = 0;
            }
          } else if (action == "next") {
            if (start + len < records) {
              start += len;
            }
          } else if (action == "last") {
            start = Math.floor((records - 1) / len) * len;
          } else {
            _fnLog(settings, 0, "Unknown paging action: " + action, 5);
          }

          var changed = settings._iDisplayStart !== start;
          settings._iDisplayStart = start;

          if (changed) {
            _fnCallbackFire(settings, null, 'page', [settings]);

            if (redraw) {
              _fnDraw(settings);
            }
          }

          return changed;
        }
        /**
         * Generate the node required for the processing node
         *  @param {object} settings dataTables settings object
         *  @returns {node} Processing element
         *  @memberof DataTable#oApi
         */


        function _fnFeatureHtmlProcessing(settings) {
          return $('<div/>', {
            'id': !settings.aanFeatures.r ? settings.sTableId + '_processing' : null,
            'class': settings.oClasses.sProcessing
          }).html(settings.oLanguage.sProcessing).insertBefore(settings.nTable)[0];
        }
        /**
         * Display or hide the processing indicator
         *  @param {object} settings dataTables settings object
         *  @param {bool} show Show the processing indicator (true) or not (false)
         *  @memberof DataTable#oApi
         */


        function _fnProcessingDisplay(settings, show) {
          if (settings.oFeatures.bProcessing) {
            $(settings.aanFeatures.r).css('display', show ? 'block' : 'none');
          }

          _fnCallbackFire(settings, null, 'processing', [settings, show]);
        }
        /**
         * Add any control elements for the table - specifically scrolling
         *  @param {object} settings dataTables settings object
         *  @returns {node} Node to add to the DOM
         *  @memberof DataTable#oApi
         */


        function _fnFeatureHtmlTable(settings) {
          var table = $(settings.nTable); // Add the ARIA grid role to the table

          table.attr('role', 'grid'); // Scrolling from here on in

          var scroll = settings.oScroll;

          if (scroll.sX === '' && scroll.sY === '') {
            return settings.nTable;
          }

          var scrollX = scroll.sX;
          var scrollY = scroll.sY;
          var classes = settings.oClasses;
          var caption = table.children('caption');
          var captionSide = caption.length ? caption[0]._captionSide : null;
          var headerClone = $(table[0].cloneNode(false));
          var footerClone = $(table[0].cloneNode(false));
          var footer = table.children('tfoot');
          var _div = '<div/>';

          var size = function size(s) {
            return !s ? null : _fnStringToCss(s);
          };

          if (!footer.length) {
            footer = null;
          }
          /*
           * The HTML structure that we want to generate in this function is:
           *  div - scroller
           *    div - scroll head
           *      div - scroll head inner
           *        table - scroll head table
           *          thead - thead
           *    div - scroll body
           *      table - table (master table)
           *        thead - thead clone for sizing
           *        tbody - tbody
           *    div - scroll foot
           *      div - scroll foot inner
           *        table - scroll foot table
           *          tfoot - tfoot
           */


          var scroller = $(_div, {
            'class': classes.sScrollWrapper
          }).append($(_div, {
            'class': classes.sScrollHead
          }).css({
            overflow: 'hidden',
            position: 'relative',
            border: 0,
            width: scrollX ? size(scrollX) : '100%'
          }).append($(_div, {
            'class': classes.sScrollHeadInner
          }).css({
            'box-sizing': 'content-box',
            width: scroll.sXInner || '100%'
          }).append(headerClone.removeAttr('id').css('margin-left', 0).append(captionSide === 'top' ? caption : null).append(table.children('thead'))))).append($(_div, {
            'class': classes.sScrollBody
          }).css({
            position: 'relative',
            overflow: 'auto',
            width: size(scrollX)
          }).append(table));

          if (footer) {
            scroller.append($(_div, {
              'class': classes.sScrollFoot
            }).css({
              overflow: 'hidden',
              border: 0,
              width: scrollX ? size(scrollX) : '100%'
            }).append($(_div, {
              'class': classes.sScrollFootInner
            }).append(footerClone.removeAttr('id').css('margin-left', 0).append(captionSide === 'bottom' ? caption : null).append(table.children('tfoot')))));
          }

          var children = scroller.children();
          var scrollHead = children[0];
          var scrollBody = children[1];
          var scrollFoot = footer ? children[2] : null; // When the body is scrolled, then we also want to scroll the headers

          if (scrollX) {
            $(scrollBody).on('scroll.DT', function (e) {
              var scrollLeft = this.scrollLeft;
              scrollHead.scrollLeft = scrollLeft;

              if (footer) {
                scrollFoot.scrollLeft = scrollLeft;
              }
            });
          }

          $(scrollBody).css('max-height', scrollY);

          if (!scroll.bCollapse) {
            $(scrollBody).css('height', scrollY);
          }

          settings.nScrollHead = scrollHead;
          settings.nScrollBody = scrollBody;
          settings.nScrollFoot = scrollFoot; // On redraw - align columns

          settings.aoDrawCallback.push({
            "fn": _fnScrollDraw,
            "sName": "scrolling"
          });
          return scroller[0];
        }
        /**
         * Update the header, footer and body tables for resizing - i.e. column
         * alignment.
         *
         * Welcome to the most horrible function DataTables. The process that this
         * function follows is basically:
         *   1. Re-create the table inside the scrolling div
         *   2. Take live measurements from the DOM
         *   3. Apply the measurements to align the columns
         *   4. Clean up
         *
         *  @param {object} settings dataTables settings object
         *  @memberof DataTable#oApi
         */


        function _fnScrollDraw(settings) {
          // Given that this is such a monster function, a lot of variables are use
          // to try and keep the minimised size as small as possible
          var scroll = settings.oScroll,
              scrollX = scroll.sX,
              scrollXInner = scroll.sXInner,
              scrollY = scroll.sY,
              barWidth = scroll.iBarWidth,
              divHeader = $(settings.nScrollHead),
              divHeaderStyle = divHeader[0].style,
              divHeaderInner = divHeader.children('div'),
              divHeaderInnerStyle = divHeaderInner[0].style,
              divHeaderTable = divHeaderInner.children('table'),
              divBodyEl = settings.nScrollBody,
              divBody = $(divBodyEl),
              divBodyStyle = divBodyEl.style,
              divFooter = $(settings.nScrollFoot),
              divFooterInner = divFooter.children('div'),
              divFooterTable = divFooterInner.children('table'),
              header = $(settings.nTHead),
              table = $(settings.nTable),
              tableEl = table[0],
              tableStyle = tableEl.style,
              footer = settings.nTFoot ? $(settings.nTFoot) : null,
              browser = settings.oBrowser,
              ie67 = browser.bScrollOversize,
              dtHeaderCells = _pluck(settings.aoColumns, 'nTh'),
              headerTrgEls,
              footerTrgEls,
              headerSrcEls,
              footerSrcEls,
              headerCopy,
              footerCopy,
              headerWidths = [],
              footerWidths = [],
              headerContent = [],
              footerContent = [],
              idx,
              correction,
              sanityWidth,
              zeroOut = function zeroOut(nSizer) {
            var style = nSizer.style;
            style.paddingTop = "0";
            style.paddingBottom = "0";
            style.borderTopWidth = "0";
            style.borderBottomWidth = "0";
            style.height = 0;
          }; // If the scrollbar visibility has changed from the last draw, we need to
          // adjust the column sizes as the table width will have changed to account
          // for the scrollbar


          var scrollBarVis = divBodyEl.scrollHeight > divBodyEl.clientHeight;

          if (settings.scrollBarVis !== scrollBarVis && settings.scrollBarVis !== undefined) {
            settings.scrollBarVis = scrollBarVis;

            _fnAdjustColumnSizing(settings);

            return; // adjust column sizing will call this function again
          } else {
            settings.scrollBarVis = scrollBarVis;
          }
          /*
           * 1. Re-create the table inside the scrolling div
           */
          // Remove the old minimised thead and tfoot elements in the inner table


          table.children('thead, tfoot').remove();

          if (footer) {
            footerCopy = footer.clone().prependTo(table);
            footerTrgEls = footer.find('tr'); // the original tfoot is in its own table and must be sized

            footerSrcEls = footerCopy.find('tr');
          } // Clone the current header and footer elements and then place it into the inner table


          headerCopy = header.clone().prependTo(table);
          headerTrgEls = header.find('tr'); // original header is in its own table

          headerSrcEls = headerCopy.find('tr');
          headerCopy.find('th, td').removeAttr('tabindex');
          /*
           * 2. Take live measurements from the DOM - do not alter the DOM itself!
           */
          // Remove old sizing and apply the calculated column widths
          // Get the unique column headers in the newly created (cloned) header. We want to apply the
          // calculated sizes to this header

          if (!scrollX) {
            divBodyStyle.width = '100%';
            divHeader[0].style.width = '100%';
          }

          $.each(_fnGetUniqueThs(settings, headerCopy), function (i, el) {
            idx = _fnVisibleToColumnIndex(settings, i);
            el.style.width = settings.aoColumns[idx].sWidth;
          });

          if (footer) {
            _fnApplyToChildren(function (n) {
              n.style.width = "";
            }, footerSrcEls);
          } // Size the table as a whole


          sanityWidth = table.outerWidth();

          if (scrollX === "") {
            // No x scrolling
            tableStyle.width = "100%"; // IE7 will make the width of the table when 100% include the scrollbar
            // - which is shouldn't. When there is a scrollbar we need to take this
            // into account.

            if (ie67 && (table.find('tbody').height() > divBodyEl.offsetHeight || divBody.css('overflow-y') == "scroll")) {
              tableStyle.width = _fnStringToCss(table.outerWidth() - barWidth);
            } // Recalculate the sanity width


            sanityWidth = table.outerWidth();
          } else if (scrollXInner !== "") {
            // legacy x scroll inner has been given - use it
            tableStyle.width = _fnStringToCss(scrollXInner); // Recalculate the sanity width

            sanityWidth = table.outerWidth();
          } // Hidden header should have zero height, so remove padding and borders. Then
          // set the width based on the real headers
          // Apply all styles in one pass


          _fnApplyToChildren(zeroOut, headerSrcEls); // Read all widths in next pass


          _fnApplyToChildren(function (nSizer) {
            headerContent.push(nSizer.innerHTML);
            headerWidths.push(_fnStringToCss($(nSizer).css('width')));
          }, headerSrcEls); // Apply all widths in final pass


          _fnApplyToChildren(function (nToSize, i) {
            // Only apply widths to the DataTables detected header cells - this
            // prevents complex headers from having contradictory sizes applied
            if ($.inArray(nToSize, dtHeaderCells) !== -1) {
              nToSize.style.width = headerWidths[i];
            }
          }, headerTrgEls);

          $(headerSrcEls).height(0);
          /* Same again with the footer if we have one */

          if (footer) {
            _fnApplyToChildren(zeroOut, footerSrcEls);

            _fnApplyToChildren(function (nSizer) {
              footerContent.push(nSizer.innerHTML);
              footerWidths.push(_fnStringToCss($(nSizer).css('width')));
            }, footerSrcEls);

            _fnApplyToChildren(function (nToSize, i) {
              nToSize.style.width = footerWidths[i];
            }, footerTrgEls);

            $(footerSrcEls).height(0);
          }
          /*
           * 3. Apply the measurements
           */
          // "Hide" the header and footer that we used for the sizing. We need to keep
          // the content of the cell so that the width applied to the header and body
          // both match, but we want to hide it completely. We want to also fix their
          // width to what they currently are


          _fnApplyToChildren(function (nSizer, i) {
            nSizer.innerHTML = '<div class="dataTables_sizing">' + headerContent[i] + '</div>';
            nSizer.childNodes[0].style.height = "0";
            nSizer.childNodes[0].style.overflow = "hidden";
            nSizer.style.width = headerWidths[i];
          }, headerSrcEls);

          if (footer) {
            _fnApplyToChildren(function (nSizer, i) {
              nSizer.innerHTML = '<div class="dataTables_sizing">' + footerContent[i] + '</div>';
              nSizer.childNodes[0].style.height = "0";
              nSizer.childNodes[0].style.overflow = "hidden";
              nSizer.style.width = footerWidths[i];
            }, footerSrcEls);
          } // Sanity check that the table is of a sensible width. If not then we are going to get
          // misalignment - try to prevent this by not allowing the table to shrink below its min width


          if (table.outerWidth() < sanityWidth) {
            // The min width depends upon if we have a vertical scrollbar visible or not */
            correction = divBodyEl.scrollHeight > divBodyEl.offsetHeight || divBody.css('overflow-y') == "scroll" ? sanityWidth + barWidth : sanityWidth; // IE6/7 are a law unto themselves...

            if (ie67 && (divBodyEl.scrollHeight > divBodyEl.offsetHeight || divBody.css('overflow-y') == "scroll")) {
              tableStyle.width = _fnStringToCss(correction - barWidth);
            } // And give the user a warning that we've stopped the table getting too small


            if (scrollX === "" || scrollXInner !== "") {
              _fnLog(settings, 1, 'Possible column misalignment', 6);
            }
          } else {
            correction = '100%';
          } // Apply to the container elements


          divBodyStyle.width = _fnStringToCss(correction);
          divHeaderStyle.width = _fnStringToCss(correction);

          if (footer) {
            settings.nScrollFoot.style.width = _fnStringToCss(correction);
          }
          /*
           * 4. Clean up
           */


          if (!scrollY) {
            /* IE7< puts a vertical scrollbar in place (when it shouldn't be) due to subtracting
             * the scrollbar height from the visible display, rather than adding it on. We need to
             * set the height in order to sort this. Don't want to do it in any other browsers.
             */
            if (ie67) {
              divBodyStyle.height = _fnStringToCss(tableEl.offsetHeight + barWidth);
            }
          }
          /* Finally set the width's of the header and footer tables */


          var iOuterWidth = table.outerWidth();
          divHeaderTable[0].style.width = _fnStringToCss(iOuterWidth);
          divHeaderInnerStyle.width = _fnStringToCss(iOuterWidth); // Figure out if there are scrollbar present - if so then we need a the header and footer to
          // provide a bit more space to allow "overflow" scrolling (i.e. past the scrollbar)

          var bScrolling = table.height() > divBodyEl.clientHeight || divBody.css('overflow-y') == "scroll";
          var padding = 'padding' + (browser.bScrollbarLeft ? 'Left' : 'Right');
          divHeaderInnerStyle[padding] = bScrolling ? barWidth + "px" : "0px";

          if (footer) {
            divFooterTable[0].style.width = _fnStringToCss(iOuterWidth);
            divFooterInner[0].style.width = _fnStringToCss(iOuterWidth);
            divFooterInner[0].style[padding] = bScrolling ? barWidth + "px" : "0px";
          } // Correct DOM ordering for colgroup - comes before the thead


          table.children('colgroup').insertBefore(table.children('thead'));
          /* Adjust the position of the header in case we loose the y-scrollbar */

          divBody.trigger('scroll'); // If sorting or filtering has occurred, jump the scrolling back to the top
          // only if we aren't holding the position

          if ((settings.bSorted || settings.bFiltered) && !settings._drawHold) {
            divBodyEl.scrollTop = 0;
          }
        }
        /**
         * Apply a given function to the display child nodes of an element array (typically
         * TD children of TR rows
         *  @param {function} fn Method to apply to the objects
         *  @param array {nodes} an1 List of elements to look through for display children
         *  @param array {nodes} an2 Another list (identical structure to the first) - optional
         *  @memberof DataTable#oApi
         */


        function _fnApplyToChildren(fn, an1, an2) {
          var index = 0,
              i = 0,
              iLen = an1.length;
          var nNode1, nNode2;

          while (i < iLen) {
            nNode1 = an1[i].firstChild;
            nNode2 = an2 ? an2[i].firstChild : null;

            while (nNode1) {
              if (nNode1.nodeType === 1) {
                if (an2) {
                  fn(nNode1, nNode2, index);
                } else {
                  fn(nNode1, index);
                }

                index++;
              }

              nNode1 = nNode1.nextSibling;
              nNode2 = an2 ? nNode2.nextSibling : null;
            }

            i++;
          }
        }

        var __re_html_remove = /<.*?>/g;
        /**
         * Calculate the width of columns for the table
         *  @param {object} oSettings dataTables settings object
         *  @memberof DataTable#oApi
         */

        function _fnCalculateColumnWidths(oSettings) {
          var table = oSettings.nTable,
              columns = oSettings.aoColumns,
              scroll = oSettings.oScroll,
              scrollY = scroll.sY,
              scrollX = scroll.sX,
              scrollXInner = scroll.sXInner,
              columnCount = columns.length,
              visibleColumns = _fnGetColumns(oSettings, 'bVisible'),
              headerCells = $('th', oSettings.nTHead),
              tableWidthAttr = table.getAttribute('width'),
              // from DOM element
          tableContainer = table.parentNode,
              userInputs = false,
              i,
              column,
              columnIdx,
              width,
              outerWidth,
              browser = oSettings.oBrowser,
              ie67 = browser.bScrollOversize;

          var styleWidth = table.style.width;

          if (styleWidth && styleWidth.indexOf('%') !== -1) {
            tableWidthAttr = styleWidth;
          }
          /* Convert any user input sizes into pixel sizes */


          for (i = 0; i < visibleColumns.length; i++) {
            column = columns[visibleColumns[i]];

            if (column.sWidth !== null) {
              column.sWidth = _fnConvertToWidth(column.sWidthOrig, tableContainer);
              userInputs = true;
            }
          }
          /* If the number of columns in the DOM equals the number that we have to
           * process in DataTables, then we can use the offsets that are created by
           * the web- browser. No custom sizes can be set in order for this to happen,
           * nor scrolling used
           */


          if (ie67 || !userInputs && !scrollX && !scrollY && columnCount == _fnVisbleColumns(oSettings) && columnCount == headerCells.length) {
            for (i = 0; i < columnCount; i++) {
              var colIdx = _fnVisibleToColumnIndex(oSettings, i);

              if (colIdx !== null) {
                columns[colIdx].sWidth = _fnStringToCss(headerCells.eq(i).width());
              }
            }
          } else {
            // Otherwise construct a single row, worst case, table with the widest
            // node in the data, assign any user defined widths, then insert it into
            // the DOM and allow the browser to do all the hard work of calculating
            // table widths
            var tmpTable = $(table).clone() // don't use cloneNode - IE8 will remove events on the main table
            .css('visibility', 'hidden').removeAttr('id'); // Clean up the table body

            tmpTable.find('tbody tr').remove();
            var tr = $('<tr/>').appendTo(tmpTable.find('tbody')); // Clone the table header and footer - we can't use the header / footer
            // from the cloned table, since if scrolling is active, the table's
            // real header and footer are contained in different table tags

            tmpTable.find('thead, tfoot').remove();
            tmpTable.append($(oSettings.nTHead).clone()).append($(oSettings.nTFoot).clone()); // Remove any assigned widths from the footer (from scrolling)

            tmpTable.find('tfoot th, tfoot td').css('width', ''); // Apply custom sizing to the cloned header

            headerCells = _fnGetUniqueThs(oSettings, tmpTable.find('thead')[0]);

            for (i = 0; i < visibleColumns.length; i++) {
              column = columns[visibleColumns[i]];
              headerCells[i].style.width = column.sWidthOrig !== null && column.sWidthOrig !== '' ? _fnStringToCss(column.sWidthOrig) : ''; // For scrollX we need to force the column width otherwise the
              // browser will collapse it. If this width is smaller than the
              // width the column requires, then it will have no effect

              if (column.sWidthOrig && scrollX) {
                $(headerCells[i]).append($('<div/>').css({
                  width: column.sWidthOrig,
                  margin: 0,
                  padding: 0,
                  border: 0,
                  height: 1
                }));
              }
            } // Find the widest cell for each column and put it into the table


            if (oSettings.aoData.length) {
              for (i = 0; i < visibleColumns.length; i++) {
                columnIdx = visibleColumns[i];
                column = columns[columnIdx];
                $(_fnGetWidestNode(oSettings, columnIdx)).clone(false).append(column.sContentPadding).appendTo(tr);
              }
            } // Tidy the temporary table - remove name attributes so there aren't
            // duplicated in the dom (radio elements for example)


            $('[name]', tmpTable).removeAttr('name'); // Table has been built, attach to the document so we can work with it.
            // A holding element is used, positioned at the top of the container
            // with minimal height, so it has no effect on if the container scrolls
            // or not. Otherwise it might trigger scrolling when it actually isn't
            // needed

            var holder = $('<div/>').css(scrollX || scrollY ? {
              position: 'absolute',
              top: 0,
              left: 0,
              height: 1,
              right: 0,
              overflow: 'hidden'
            } : {}).append(tmpTable).appendTo(tableContainer); // When scrolling (X or Y) we want to set the width of the table as 
            // appropriate. However, when not scrolling leave the table width as it
            // is. This results in slightly different, but I think correct behaviour

            if (scrollX && scrollXInner) {
              tmpTable.width(scrollXInner);
            } else if (scrollX) {
              tmpTable.css('width', 'auto');
              tmpTable.removeAttr('width'); // If there is no width attribute or style, then allow the table to
              // collapse

              if (tmpTable.width() < tableContainer.clientWidth && tableWidthAttr) {
                tmpTable.width(tableContainer.clientWidth);
              }
            } else if (scrollY) {
              tmpTable.width(tableContainer.clientWidth);
            } else if (tableWidthAttr) {
              tmpTable.width(tableWidthAttr);
            } // Get the width of each column in the constructed table - we need to
            // know the inner width (so it can be assigned to the other table's
            // cells) and the outer width so we can calculate the full width of the
            // table. This is safe since DataTables requires a unique cell for each
            // column, but if ever a header can span multiple columns, this will
            // need to be modified.


            var total = 0;

            for (i = 0; i < visibleColumns.length; i++) {
              var cell = $(headerCells[i]);
              var border = cell.outerWidth() - cell.width(); // Use getBounding... where possible (not IE8-) because it can give
              // sub-pixel accuracy, which we then want to round up!

              var bounding = browser.bBounding ? Math.ceil(headerCells[i].getBoundingClientRect().width) : cell.outerWidth(); // Total is tracked to remove any sub-pixel errors as the outerWidth
              // of the table might not equal the total given here (IE!).

              total += bounding; // Width for each column to use

              columns[visibleColumns[i]].sWidth = _fnStringToCss(bounding - border);
            }

            table.style.width = _fnStringToCss(total); // Finished with the table - ditch it

            holder.remove();
          } // If there is a width attr, we want to attach an event listener which
          // allows the table sizing to automatically adjust when the window is
          // resized. Use the width attr rather than CSS, since we can't know if the
          // CSS is a relative value or absolute - DOM read is always px.


          if (tableWidthAttr) {
            table.style.width = _fnStringToCss(tableWidthAttr);
          }

          if ((tableWidthAttr || scrollX) && !oSettings._reszEvt) {
            var bindResize = function bindResize() {
              $(window).on('resize.DT-' + oSettings.sInstance, _fnThrottle(function () {
                _fnAdjustColumnSizing(oSettings);
              }));
            }; // IE6/7 will crash if we bind a resize event handler on page load.
            // To be removed in 1.11 which drops IE6/7 support


            if (ie67) {
              setTimeout(bindResize, 1000);
            } else {
              bindResize();
            }

            oSettings._reszEvt = true;
          }
        }
        /**
         * Throttle the calls to a function. Arguments and context are maintained for
         * the throttled function
         *  @param {function} fn Function to be called
         *  @param {int} [freq=200] call frequency in mS
         *  @returns {function} wrapped function
         *  @memberof DataTable#oApi
         */


        var _fnThrottle = DataTable.util.throttle;
        /**
         * Convert a CSS unit width to pixels (e.g. 2em)
         *  @param {string} width width to be converted
         *  @param {node} parent parent to get the with for (required for relative widths) - optional
         *  @returns {int} width in pixels
         *  @memberof DataTable#oApi
         */

        function _fnConvertToWidth(width, parent) {
          if (!width) {
            return 0;
          }

          var n = $('<div/>').css('width', _fnStringToCss(width)).appendTo(parent || document.body);
          var val = n[0].offsetWidth;
          n.remove();
          return val;
        }
        /**
         * Get the widest node
         *  @param {object} settings dataTables settings object
         *  @param {int} colIdx column of interest
         *  @returns {node} widest table node
         *  @memberof DataTable#oApi
         */


        function _fnGetWidestNode(settings, colIdx) {
          var idx = _fnGetMaxLenString(settings, colIdx);

          if (idx < 0) {
            return null;
          }

          var data = settings.aoData[idx];
          return !data.nTr ? // Might not have been created when deferred rendering
          $('<td/>').html(_fnGetCellData(settings, idx, colIdx, 'display'))[0] : data.anCells[colIdx];
        }
        /**
         * Get the maximum strlen for each data column
         *  @param {object} settings dataTables settings object
         *  @param {int} colIdx column of interest
         *  @returns {string} max string length for each column
         *  @memberof DataTable#oApi
         */


        function _fnGetMaxLenString(settings, colIdx) {
          var s,
              max = -1,
              maxIdx = -1;

          for (var i = 0, ien = settings.aoData.length; i < ien; i++) {
            s = _fnGetCellData(settings, i, colIdx, 'display') + '';
            s = s.replace(__re_html_remove, '');
            s = s.replace(/&nbsp;/g, ' ');

            if (s.length > max) {
              max = s.length;
              maxIdx = i;
            }
          }

          return maxIdx;
        }
        /**
         * Append a CSS unit (only if required) to a string
         *  @param {string} value to css-ify
         *  @returns {string} value with css unit
         *  @memberof DataTable#oApi
         */


        function _fnStringToCss(s) {
          if (s === null) {
            return '0px';
          }

          if (typeof s == 'number') {
            return s < 0 ? '0px' : s + 'px';
          } // Check it has a unit character already


          return s.match(/\d$/) ? s + 'px' : s;
        }

        function _fnSortFlatten(settings) {
          var i,
              iLen,
              k,
              kLen,
              aSort = [],
              aiOrig = [],
              aoColumns = settings.aoColumns,
              aDataSort,
              iCol,
              sType,
              srcCol,
              fixed = settings.aaSortingFixed,
              fixedObj = $.isPlainObject(fixed),
              nestedSort = [],
              add = function add(a) {
            if (a.length && !Array.isArray(a[0])) {
              // 1D array
              nestedSort.push(a);
            } else {
              // 2D array
              $.merge(nestedSort, a);
            }
          }; // Build the sort array, with pre-fix and post-fix options if they have been
          // specified


          if (Array.isArray(fixed)) {
            add(fixed);
          }

          if (fixedObj && fixed.pre) {
            add(fixed.pre);
          }

          add(settings.aaSorting);

          if (fixedObj && fixed.post) {
            add(fixed.post);
          }

          for (i = 0; i < nestedSort.length; i++) {
            srcCol = nestedSort[i][0];
            aDataSort = aoColumns[srcCol].aDataSort;

            for (k = 0, kLen = aDataSort.length; k < kLen; k++) {
              iCol = aDataSort[k];
              sType = aoColumns[iCol].sType || 'string';

              if (nestedSort[i]._idx === undefined) {
                nestedSort[i]._idx = $.inArray(nestedSort[i][1], aoColumns[iCol].asSorting);
              }

              aSort.push({
                src: srcCol,
                col: iCol,
                dir: nestedSort[i][1],
                index: nestedSort[i]._idx,
                type: sType,
                formatter: DataTable.ext.type.order[sType + "-pre"]
              });
            }
          }

          return aSort;
        }
        /**
         * Change the order of the table
         *  @param {object} oSettings dataTables settings object
         *  @memberof DataTable#oApi
         *  @todo This really needs split up!
         */


        function _fnSort(oSettings) {
          var i,
              ien,
              iLen,
              j,
              jLen,
              k,
              kLen,
              sDataType,
              nTh,
              aiOrig = [],
              oExtSort = DataTable.ext.type.order,
              aoData = oSettings.aoData,
              aoColumns = oSettings.aoColumns,
              aDataSort,
              data,
              iCol,
              sType,
              oSort,
              formatters = 0,
              sortCol,
              displayMaster = oSettings.aiDisplayMaster,
              aSort; // Resolve any column types that are unknown due to addition or invalidation
          // @todo Can this be moved into a 'data-ready' handler which is called when
          //   data is going to be used in the table?

          _fnColumnTypes(oSettings);

          aSort = _fnSortFlatten(oSettings);

          for (i = 0, ien = aSort.length; i < ien; i++) {
            sortCol = aSort[i]; // Track if we can use the fast sort algorithm

            if (sortCol.formatter) {
              formatters++;
            } // Load the data needed for the sort, for each cell


            _fnSortData(oSettings, sortCol.col);
          }
          /* No sorting required if server-side or no sorting array */


          if (_fnDataSource(oSettings) != 'ssp' && aSort.length !== 0) {
            // Create a value - key array of the current row positions such that we can use their
            // current position during the sort, if values match, in order to perform stable sorting
            for (i = 0, iLen = displayMaster.length; i < iLen; i++) {
              aiOrig[displayMaster[i]] = i;
            }
            /* Do the sort - here we want multi-column sorting based on a given data source (column)
             * and sorting function (from oSort) in a certain direction. It's reasonably complex to
             * follow on it's own, but this is what we want (example two column sorting):
             *  fnLocalSorting = function(a,b){
             *    var iTest;
             *    iTest = oSort['string-asc']('data11', 'data12');
             *      if (iTest !== 0)
             *        return iTest;
             *    iTest = oSort['numeric-desc']('data21', 'data22');
             *    if (iTest !== 0)
             *      return iTest;
             *    return oSort['numeric-asc']( aiOrig[a], aiOrig[b] );
             *  }
             * Basically we have a test for each sorting column, if the data in that column is equal,
             * test the next column. If all columns match, then we use a numeric sort on the row
             * positions in the original data array to provide a stable sort.
             *
             * Note - I know it seems excessive to have two sorting methods, but the first is around
             * 15% faster, so the second is only maintained for backwards compatibility with sorting
             * methods which do not have a pre-sort formatting function.
             */


            if (formatters === aSort.length) {
              // All sort types have formatting functions
              displayMaster.sort(function (a, b) {
                var x,
                    y,
                    k,
                    test,
                    sort,
                    len = aSort.length,
                    dataA = aoData[a]._aSortData,
                    dataB = aoData[b]._aSortData;

                for (k = 0; k < len; k++) {
                  sort = aSort[k];
                  x = dataA[sort.col];
                  y = dataB[sort.col];
                  test = x < y ? -1 : x > y ? 1 : 0;

                  if (test !== 0) {
                    return sort.dir === 'asc' ? test : -test;
                  }
                }

                x = aiOrig[a];
                y = aiOrig[b];
                return x < y ? -1 : x > y ? 1 : 0;
              });
            } else {
              // Depreciated - remove in 1.11 (providing a plug-in option)
              // Not all sort types have formatting methods, so we have to call their sorting
              // methods.
              displayMaster.sort(function (a, b) {
                var x,
                    y,
                    k,
                    l,
                    test,
                    sort,
                    fn,
                    len = aSort.length,
                    dataA = aoData[a]._aSortData,
                    dataB = aoData[b]._aSortData;

                for (k = 0; k < len; k++) {
                  sort = aSort[k];
                  x = dataA[sort.col];
                  y = dataB[sort.col];
                  fn = oExtSort[sort.type + "-" + sort.dir] || oExtSort["string-" + sort.dir];
                  test = fn(x, y);

                  if (test !== 0) {
                    return test;
                  }
                }

                x = aiOrig[a];
                y = aiOrig[b];
                return x < y ? -1 : x > y ? 1 : 0;
              });
            }
          }
          /* Tell the draw function that we have sorted the data */


          oSettings.bSorted = true;
        }

        function _fnSortAria(settings) {
          var label;
          var nextSort;
          var columns = settings.aoColumns;

          var aSort = _fnSortFlatten(settings);

          var oAria = settings.oLanguage.oAria; // ARIA attributes - need to loop all columns, to update all (removing old
          // attributes as needed)

          for (var i = 0, iLen = columns.length; i < iLen; i++) {
            var col = columns[i];
            var asSorting = col.asSorting;
            var sTitle = col.sTitle.replace(/<.*?>/g, "");
            var th = col.nTh; // IE7 is throwing an error when setting these properties with jQuery's
            // attr() and removeAttr() methods...

            th.removeAttribute('aria-sort');
            /* In ARIA only the first sorting column can be marked as sorting - no multi-sort option */

            if (col.bSortable) {
              if (aSort.length > 0 && aSort[0].col == i) {
                th.setAttribute('aria-sort', aSort[0].dir == "asc" ? "ascending" : "descending");
                nextSort = asSorting[aSort[0].index + 1] || asSorting[0];
              } else {
                nextSort = asSorting[0];
              }

              label = sTitle + (nextSort === "asc" ? oAria.sSortAscending : oAria.sSortDescending);
            } else {
              label = sTitle;
            }

            th.setAttribute('aria-label', label);
          }
        }
        /**
         * Function to run on user sort request
         *  @param {object} settings dataTables settings object
         *  @param {node} attachTo node to attach the handler to
         *  @param {int} colIdx column sorting index
         *  @param {boolean} [append=false] Append the requested sort to the existing
         *    sort if true (i.e. multi-column sort)
         *  @param {function} [callback] callback function
         *  @memberof DataTable#oApi
         */


        function _fnSortListener(settings, colIdx, append, callback) {
          var col = settings.aoColumns[colIdx];
          var sorting = settings.aaSorting;
          var asSorting = col.asSorting;
          var nextSortIdx;

          var next = function next(a, overflow) {
            var idx = a._idx;

            if (idx === undefined) {
              idx = $.inArray(a[1], asSorting);
            }

            return idx + 1 < asSorting.length ? idx + 1 : overflow ? null : 0;
          }; // Convert to 2D array if needed


          if (typeof sorting[0] === 'number') {
            sorting = settings.aaSorting = [sorting];
          } // If appending the sort then we are multi-column sorting


          if (append && settings.oFeatures.bSortMulti) {
            // Are we already doing some kind of sort on this column?
            var sortIdx = $.inArray(colIdx, _pluck(sorting, '0'));

            if (sortIdx !== -1) {
              // Yes, modify the sort
              nextSortIdx = next(sorting[sortIdx], true);

              if (nextSortIdx === null && sorting.length === 1) {
                nextSortIdx = 0; // can't remove sorting completely
              }

              if (nextSortIdx === null) {
                sorting.splice(sortIdx, 1);
              } else {
                sorting[sortIdx][1] = asSorting[nextSortIdx];
                sorting[sortIdx]._idx = nextSortIdx;
              }
            } else {
              // No sort on this column yet
              sorting.push([colIdx, asSorting[0], 0]);
              sorting[sorting.length - 1]._idx = 0;
            }
          } else if (sorting.length && sorting[0][0] == colIdx) {
            // Single column - already sorting on this column, modify the sort
            nextSortIdx = next(sorting[0]);
            sorting.length = 1;
            sorting[0][1] = asSorting[nextSortIdx];
            sorting[0]._idx = nextSortIdx;
          } else {
            // Single column - sort only on this column
            sorting.length = 0;
            sorting.push([colIdx, asSorting[0]]);
            sorting[0]._idx = 0;
          } // Run the sort by calling a full redraw


          _fnReDraw(settings); // callback used for async user interaction


          if (typeof callback == 'function') {
            callback(settings);
          }
        }
        /**
         * Attach a sort handler (click) to a node
         *  @param {object} settings dataTables settings object
         *  @param {node} attachTo node to attach the handler to
         *  @param {int} colIdx column sorting index
         *  @param {function} [callback] callback function
         *  @memberof DataTable#oApi
         */


        function _fnSortAttachListener(settings, attachTo, colIdx, callback) {
          var col = settings.aoColumns[colIdx];

          _fnBindAction(attachTo, {}, function (e) {
            /* If the column is not sortable - don't to anything */
            if (col.bSortable === false) {
              return;
            } // If processing is enabled use a timeout to allow the processing
            // display to be shown - otherwise to it synchronously


            if (settings.oFeatures.bProcessing) {
              _fnProcessingDisplay(settings, true);

              setTimeout(function () {
                _fnSortListener(settings, colIdx, e.shiftKey, callback); // In server-side processing, the draw callback will remove the
                // processing display


                if (_fnDataSource(settings) !== 'ssp') {
                  _fnProcessingDisplay(settings, false);
                }
              }, 0);
            } else {
              _fnSortListener(settings, colIdx, e.shiftKey, callback);
            }
          });
        }
        /**
         * Set the sorting classes on table's body, Note: it is safe to call this function
         * when bSort and bSortClasses are false
         *  @param {object} oSettings dataTables settings object
         *  @memberof DataTable#oApi
         */


        function _fnSortingClasses(settings) {
          var oldSort = settings.aLastSort;
          var sortClass = settings.oClasses.sSortColumn;

          var sort = _fnSortFlatten(settings);

          var features = settings.oFeatures;
          var i, ien, colIdx;

          if (features.bSort && features.bSortClasses) {
            // Remove old sorting classes
            for (i = 0, ien = oldSort.length; i < ien; i++) {
              colIdx = oldSort[i].src; // Remove column sorting

              $(_pluck(settings.aoData, 'anCells', colIdx)).removeClass(sortClass + (i < 2 ? i + 1 : 3));
            } // Add new column sorting


            for (i = 0, ien = sort.length; i < ien; i++) {
              colIdx = sort[i].src;
              $(_pluck(settings.aoData, 'anCells', colIdx)).addClass(sortClass + (i < 2 ? i + 1 : 3));
            }
          }

          settings.aLastSort = sort;
        } // Get the data to sort a column, be it from cache, fresh (populating the
        // cache), or from a sort formatter


        function _fnSortData(settings, idx) {
          // Custom sorting function - provided by the sort data type
          var column = settings.aoColumns[idx];
          var customSort = DataTable.ext.order[column.sSortDataType];
          var customData;

          if (customSort) {
            customData = customSort.call(settings.oInstance, settings, idx, _fnColumnIndexToVisible(settings, idx));
          } // Use / populate cache


          var row, cellData;
          var formatter = DataTable.ext.type.order[column.sType + "-pre"];

          for (var i = 0, ien = settings.aoData.length; i < ien; i++) {
            row = settings.aoData[i];

            if (!row._aSortData) {
              row._aSortData = [];
            }

            if (!row._aSortData[idx] || customSort) {
              cellData = customSort ? customData[i] : // If there was a custom sort function, use data from there
              _fnGetCellData(settings, i, idx, 'sort');
              row._aSortData[idx] = formatter ? formatter(cellData) : cellData;
            }
          }
        }
        /**
         * Save the state of a table
         *  @param {object} oSettings dataTables settings object
         *  @memberof DataTable#oApi
         */


        function _fnSaveState(settings) {
          if (!settings.oFeatures.bStateSave || settings.bDestroying) {
            return;
          }
          /* Store the interesting variables */


          var state = {
            time: +new Date(),
            start: settings._iDisplayStart,
            length: settings._iDisplayLength,
            order: $.extend(true, [], settings.aaSorting),
            search: _fnSearchToCamel(settings.oPreviousSearch),
            columns: $.map(settings.aoColumns, function (col, i) {
              return {
                visible: col.bVisible,
                search: _fnSearchToCamel(settings.aoPreSearchCols[i])
              };
            })
          };

          _fnCallbackFire(settings, "aoStateSaveParams", 'stateSaveParams', [settings, state]);

          settings.oSavedState = state;
          settings.fnStateSaveCallback.call(settings.oInstance, settings, state);
        }
        /**
         * Attempt to load a saved table state
         *  @param {object} oSettings dataTables settings object
         *  @param {object} oInit DataTables init object so we can override settings
         *  @param {function} callback Callback to execute when the state has been loaded
         *  @memberof DataTable#oApi
         */


        function _fnLoadState(settings, oInit, callback) {
          var i, ien;
          var columns = settings.aoColumns;

          var loaded = function loaded(s) {
            if (!s || !s.time) {
              callback();
              return;
            } // Allow custom and plug-in manipulation functions to alter the saved data set and
            // cancelling of loading by returning false


            var abStateLoad = _fnCallbackFire(settings, 'aoStateLoadParams', 'stateLoadParams', [settings, s]);

            if ($.inArray(false, abStateLoad) !== -1) {
              callback();
              return;
            } // Reject old data


            var duration = settings.iStateDuration;

            if (duration > 0 && s.time < +new Date() - duration * 1000) {
              callback();
              return;
            } // Number of columns have changed - all bets are off, no restore of settings


            if (s.columns && columns.length !== s.columns.length) {
              callback();
              return;
            } // Store the saved state so it might be accessed at any time


            settings.oLoadedState = $.extend(true, {}, s); // Restore key features - todo - for 1.11 this needs to be done by
            // subscribed events

            if (s.start !== undefined) {
              settings._iDisplayStart = s.start;
              settings.iInitDisplayStart = s.start;
            }

            if (s.length !== undefined) {
              settings._iDisplayLength = s.length;
            } // Order


            if (s.order !== undefined) {
              settings.aaSorting = [];
              $.each(s.order, function (i, col) {
                settings.aaSorting.push(col[0] >= columns.length ? [0, col[1]] : col);
              });
            } // Search


            if (s.search !== undefined) {
              $.extend(settings.oPreviousSearch, _fnSearchToHung(s.search));
            } // Columns
            //


            if (s.columns) {
              for (i = 0, ien = s.columns.length; i < ien; i++) {
                var col = s.columns[i]; // Visibility

                if (col.visible !== undefined) {
                  columns[i].bVisible = col.visible;
                } // Search


                if (col.search !== undefined) {
                  $.extend(settings.aoPreSearchCols[i], _fnSearchToHung(col.search));
                }
              }
            }

            _fnCallbackFire(settings, 'aoStateLoaded', 'stateLoaded', [settings, s]);

            callback();
          };

          if (!settings.oFeatures.bStateSave) {
            callback();
            return;
          }

          var state = settings.fnStateLoadCallback.call(settings.oInstance, settings, loaded);

          if (state !== undefined) {
            loaded(state);
          } // otherwise, wait for the loaded callback to be executed

        }
        /**
         * Return the settings object for a particular table
         *  @param {node} table table we are using as a dataTable
         *  @returns {object} Settings object - or null if not found
         *  @memberof DataTable#oApi
         */


        function _fnSettingsFromNode(table) {
          var settings = DataTable.settings;
          var idx = $.inArray(table, _pluck(settings, 'nTable'));
          return idx !== -1 ? settings[idx] : null;
        }
        /**
         * Log an error message
         *  @param {object} settings dataTables settings object
         *  @param {int} level log error messages, or display them to the user
         *  @param {string} msg error message
         *  @param {int} tn Technical note id to get more information about the error.
         *  @memberof DataTable#oApi
         */


        function _fnLog(settings, level, msg, tn) {
          msg = 'DataTables warning: ' + (settings ? 'table id=' + settings.sTableId + ' - ' : '') + msg;

          if (tn) {
            msg += '. For more information about this error, please see ' + 'http://datatables.net/tn/' + tn;
          }

          if (!level) {
            // Backwards compatibility pre 1.10
            var ext = DataTable.ext;
            var type = ext.sErrMode || ext.errMode;

            if (settings) {
              _fnCallbackFire(settings, null, 'error', [settings, tn, msg]);
            }

            if (type == 'alert') {
              alert(msg);
            } else if (type == 'throw') {
              throw new Error(msg);
            } else if (typeof type == 'function') {
              type(settings, tn, msg);
            }
          } else if (window.console && console.log) {
            console.log(msg);
          }
        }
        /**
         * See if a property is defined on one object, if so assign it to the other object
         *  @param {object} ret target object
         *  @param {object} src source object
         *  @param {string} name property
         *  @param {string} [mappedName] name to map too - optional, name used if not given
         *  @memberof DataTable#oApi
         */


        function _fnMap(ret, src, name, mappedName) {
          if (Array.isArray(name)) {
            $.each(name, function (i, val) {
              if (Array.isArray(val)) {
                _fnMap(ret, src, val[0], val[1]);
              } else {
                _fnMap(ret, src, val);
              }
            });
            return;
          }

          if (mappedName === undefined) {
            mappedName = name;
          }

          if (src[name] !== undefined) {
            ret[mappedName] = src[name];
          }
        }
        /**
         * Extend objects - very similar to jQuery.extend, but deep copy objects, and
         * shallow copy arrays. The reason we need to do this, is that we don't want to
         * deep copy array init values (such as aaSorting) since the dev wouldn't be
         * able to override them, but we do want to deep copy arrays.
         *  @param {object} out Object to extend
         *  @param {object} extender Object from which the properties will be applied to
         *      out
         *  @param {boolean} breakRefs If true, then arrays will be sliced to take an
         *      independent copy with the exception of the `data` or `aaData` parameters
         *      if they are present. This is so you can pass in a collection to
         *      DataTables and have that used as your data source without breaking the
         *      references
         *  @returns {object} out Reference, just for convenience - out === the return.
         *  @memberof DataTable#oApi
         *  @todo This doesn't take account of arrays inside the deep copied objects.
         */


        function _fnExtend(out, extender, breakRefs) {
          var val;

          for (var prop in extender) {
            if (extender.hasOwnProperty(prop)) {
              val = extender[prop];

              if ($.isPlainObject(val)) {
                if (!$.isPlainObject(out[prop])) {
                  out[prop] = {};
                }

                $.extend(true, out[prop], val);
              } else if (breakRefs && prop !== 'data' && prop !== 'aaData' && Array.isArray(val)) {
                out[prop] = val.slice();
              } else {
                out[prop] = val;
              }
            }
          }

          return out;
        }
        /**
         * Bind an event handers to allow a click or return key to activate the callback.
         * This is good for accessibility since a return on the keyboard will have the
         * same effect as a click, if the element has focus.
         *  @param {element} n Element to bind the action to
         *  @param {object} oData Data object to pass to the triggered function
         *  @param {function} fn Callback function for when the event is triggered
         *  @memberof DataTable#oApi
         */


        function _fnBindAction(n, oData, fn) {
          $(n).on('click.DT', oData, function (e) {
            $(n).trigger('blur'); // Remove focus outline for mouse users

            fn(e);
          }).on('keypress.DT', oData, function (e) {
            if (e.which === 13) {
              e.preventDefault();
              fn(e);
            }
          }).on('selectstart.DT', function () {
            /* Take the brutal approach to cancelling text selection */
            return false;
          });
        }
        /**
         * Register a callback function. Easily allows a callback function to be added to
         * an array store of callback functions that can then all be called together.
         *  @param {object} oSettings dataTables settings object
         *  @param {string} sStore Name of the array storage for the callbacks in oSettings
         *  @param {function} fn Function to be called back
         *  @param {string} sName Identifying name for the callback (i.e. a label)
         *  @memberof DataTable#oApi
         */


        function _fnCallbackReg(oSettings, sStore, fn, sName) {
          if (fn) {
            oSettings[sStore].push({
              "fn": fn,
              "sName": sName
            });
          }
        }
        /**
         * Fire callback functions and trigger events. Note that the loop over the
         * callback array store is done backwards! Further note that you do not want to
         * fire off triggers in time sensitive applications (for example cell creation)
         * as its slow.
         *  @param {object} settings dataTables settings object
         *  @param {string} callbackArr Name of the array storage for the callbacks in
         *      oSettings
         *  @param {string} eventName Name of the jQuery custom event to trigger. If
         *      null no trigger is fired
         *  @param {array} args Array of arguments to pass to the callback function /
         *      trigger
         *  @memberof DataTable#oApi
         */


        function _fnCallbackFire(settings, callbackArr, eventName, args) {
          var ret = [];

          if (callbackArr) {
            ret = $.map(settings[callbackArr].slice().reverse(), function (val, i) {
              return val.fn.apply(settings.oInstance, args);
            });
          }

          if (eventName !== null) {
            var e = $.Event(eventName + '.dt');
            $(settings.nTable).trigger(e, args);
            ret.push(e.result);
          }

          return ret;
        }

        function _fnLengthOverflow(settings) {
          var start = settings._iDisplayStart,
              end = settings.fnDisplayEnd(),
              len = settings._iDisplayLength;
          /* If we have space to show extra rows (backing up from the end point - then do so */

          if (start >= end) {
            start = end - len;
          } // Keep the start record on the current page


          start -= start % len;

          if (len === -1 || start < 0) {
            start = 0;
          }

          settings._iDisplayStart = start;
        }

        function _fnRenderer(settings, type) {
          var renderer = settings.renderer;
          var host = DataTable.ext.renderer[type];

          if ($.isPlainObject(renderer) && renderer[type]) {
            // Specific renderer for this type. If available use it, otherwise use
            // the default.
            return host[renderer[type]] || host._;
          } else if (typeof renderer === 'string') {
            // Common renderer - if there is one available for this type use it,
            // otherwise use the default
            return host[renderer] || host._;
          } // Use the default


          return host._;
        }
        /**
         * Detect the data source being used for the table. Used to simplify the code
         * a little (ajax) and to make it compress a little smaller.
         *
         *  @param {object} settings dataTables settings object
         *  @returns {string} Data source
         *  @memberof DataTable#oApi
         */


        function _fnDataSource(settings) {
          if (settings.oFeatures.bServerSide) {
            return 'ssp';
          } else if (settings.ajax || settings.sAjaxSource) {
            return 'ajax';
          }

          return 'dom';
        }
        /**
         * Computed structure of the DataTables API, defined by the options passed to
         * `DataTable.Api.register()` when building the API.
         *
         * The structure is built in order to speed creation and extension of the Api
         * objects since the extensions are effectively pre-parsed.
         *
         * The array is an array of objects with the following structure, where this
         * base array represents the Api prototype base:
         *
         *     [
         *       {
         *         name:      'data'                -- string   - Property name
         *         val:       function () {},       -- function - Api method (or undefined if just an object
         *         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result
         *         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property
         *       },
         *       {
         *         name:     'row'
         *         val:       {},
         *         methodExt: [ ... ],
         *         propExt:   [
         *           {
         *             name:      'data'
         *             val:       function () {},
         *             methodExt: [ ... ],
         *             propExt:   [ ... ]
         *           },
         *           ...
         *         ]
         *       }
         *     ]
         *
         * @type {Array}
         * @ignore
         */


        var __apiStruct = [];
        /**
         * `Array.prototype` reference.
         *
         * @type object
         * @ignore
         */

        var __arrayProto = Array.prototype;
        /**
         * Abstraction for `context` parameter of the `Api` constructor to allow it to
         * take several different forms for ease of use.
         *
         * Each of the input parameter types will be converted to a DataTables settings
         * object where possible.
         *
         * @param  {string|node|jQuery|object} mixed DataTable identifier. Can be one
         *   of:
         *
         *   * `string` - jQuery selector. Any DataTables' matching the given selector
         *     with be found and used.
         *   * `node` - `TABLE` node which has already been formed into a DataTable.
         *   * `jQuery` - A jQuery object of `TABLE` nodes.
         *   * `object` - DataTables settings object
         *   * `DataTables.Api` - API instance
         * @return {array|null} Matching DataTables settings objects. `null` or
         *   `undefined` is returned if no matching DataTable is found.
         * @ignore
         */

        var _toSettings = function _toSettings(mixed) {
          var idx, jq;
          var settings = DataTable.settings;
          var tables = $.map(settings, function (el, i) {
            return el.nTable;
          });

          if (!mixed) {
            return [];
          } else if (mixed.nTable && mixed.oApi) {
            // DataTables settings object
            return [mixed];
          } else if (mixed.nodeName && mixed.nodeName.toLowerCase() === 'table') {
            // Table node
            idx = $.inArray(mixed, tables);
            return idx !== -1 ? [settings[idx]] : null;
          } else if (mixed && typeof mixed.settings === 'function') {
            return mixed.settings().toArray();
          } else if (typeof mixed === 'string') {
            // jQuery selector
            jq = $(mixed);
          } else if (mixed instanceof $) {
            // jQuery object (also DataTables instance)
            jq = mixed;
          }

          if (jq) {
            return jq.map(function (i) {
              idx = $.inArray(this, tables);
              return idx !== -1 ? settings[idx] : null;
            }).toArray();
          }
        };
        /**
         * DataTables API class - used to control and interface with  one or more
         * DataTables enhanced tables.
         *
         * The API class is heavily based on jQuery, presenting a chainable interface
         * that you can use to interact with tables. Each instance of the API class has
         * a "context" - i.e. the tables that it will operate on. This could be a single
         * table, all tables on a page or a sub-set thereof.
         *
         * Additionally the API is designed to allow you to easily work with the data in
         * the tables, retrieving and manipulating it as required. This is done by
         * presenting the API class as an array like interface. The contents of the
         * array depend upon the actions requested by each method (for example
         * `rows().nodes()` will return an array of nodes, while `rows().data()` will
         * return an array of objects or arrays depending upon your table's
         * configuration). The API object has a number of array like methods (`push`,
         * `pop`, `reverse` etc) as well as additional helper methods (`each`, `pluck`,
         * `unique` etc) to assist your working with the data held in a table.
         *
         * Most methods (those which return an Api instance) are chainable, which means
         * the return from a method call also has all of the methods available that the
         * top level object had. For example, these two calls are equivalent:
         *
         *     // Not chained
         *     api.row.add( {...} );
         *     api.draw();
         *
         *     // Chained
         *     api.row.add( {...} ).draw();
         *
         * @class DataTable.Api
         * @param {array|object|string|jQuery} context DataTable identifier. This is
         *   used to define which DataTables enhanced tables this API will operate on.
         *   Can be one of:
         *
         *   * `string` - jQuery selector. Any DataTables' matching the given selector
         *     with be found and used.
         *   * `node` - `TABLE` node which has already been formed into a DataTable.
         *   * `jQuery` - A jQuery object of `TABLE` nodes.
         *   * `object` - DataTables settings object
         * @param {array} [data] Data to initialise the Api instance with.
         *
         * @example
         *   // Direct initialisation during DataTables construction
         *   var api = $('#example').DataTable();
         *
         * @example
         *   // Initialisation using a DataTables jQuery object
         *   var api = $('#example').dataTable().api();
         *
         * @example
         *   // Initialisation as a constructor
         *   var api = new $.fn.DataTable.Api( 'table.dataTable' );
         */


        _Api2 = function _Api(context, data) {
          if (!(this instanceof _Api2)) {
            return new _Api2(context, data);
          }

          var settings = [];

          var ctxSettings = function ctxSettings(o) {
            var a = _toSettings(o);

            if (a) {
              settings.push.apply(settings, a);
            }
          };

          if (Array.isArray(context)) {
            for (var i = 0, ien = context.length; i < ien; i++) {
              ctxSettings(context[i]);
            }
          } else {
            ctxSettings(context);
          } // Remove duplicates


          this.context = _unique(settings); // Initial data

          if (data) {
            $.merge(this, data);
          } // selector


          this.selector = {
            rows: null,
            cols: null,
            opts: null
          };

          _Api2.extend(this, this, __apiStruct);
        };

        DataTable.Api = _Api2; // Don't destroy the existing prototype, just extend it. Required for jQuery 2's
        // isPlainObject.

        $.extend(_Api2.prototype, {
          any: function any() {
            return this.count() !== 0;
          },
          concat: __arrayProto.concat,
          context: [],
          // array of table settings objects
          count: function count() {
            return this.flatten().length;
          },
          each: function each(fn) {
            for (var i = 0, ien = this.length; i < ien; i++) {
              fn.call(this, this[i], i, this);
            }

            return this;
          },
          eq: function eq(idx) {
            var ctx = this.context;
            return ctx.length > idx ? new _Api2(ctx[idx], this[idx]) : null;
          },
          filter: function filter(fn) {
            var a = [];

            if (__arrayProto.filter) {
              a = __arrayProto.filter.call(this, fn, this);
            } else {
              // Compatibility for browsers without EMCA-252-5 (JS 1.6)
              for (var i = 0, ien = this.length; i < ien; i++) {
                if (fn.call(this, this[i], i, this)) {
                  a.push(this[i]);
                }
              }
            }

            return new _Api2(this.context, a);
          },
          flatten: function flatten() {
            var a = [];
            return new _Api2(this.context, a.concat.apply(a, this.toArray()));
          },
          join: __arrayProto.join,
          indexOf: __arrayProto.indexOf || function (obj, start) {
            for (var i = start || 0, ien = this.length; i < ien; i++) {
              if (this[i] === obj) {
                return i;
              }
            }

            return -1;
          },
          iterator: function iterator(flatten, type, fn, alwaysNew) {
            var a = [],
                ret,
                i,
                ien,
                j,
                jen,
                context = this.context,
                rows,
                items,
                item,
                selector = this.selector; // Argument shifting

            if (typeof flatten === 'string') {
              alwaysNew = fn;
              fn = type;
              type = flatten;
              flatten = false;
            }

            for (i = 0, ien = context.length; i < ien; i++) {
              var apiInst = new _Api2(context[i]);

              if (type === 'table') {
                ret = fn.call(apiInst, context[i], i);

                if (ret !== undefined) {
                  a.push(ret);
                }
              } else if (type === 'columns' || type === 'rows') {
                // this has same length as context - one entry for each table
                ret = fn.call(apiInst, context[i], this[i], i);

                if (ret !== undefined) {
                  a.push(ret);
                }
              } else if (type === 'column' || type === 'column-rows' || type === 'row' || type === 'cell') {
                // columns and rows share the same structure.
                // 'this' is an array of column indexes for each context
                items = this[i];

                if (type === 'column-rows') {
                  rows = _selector_row_indexes(context[i], selector.opts);
                }

                for (j = 0, jen = items.length; j < jen; j++) {
                  item = items[j];

                  if (type === 'cell') {
                    ret = fn.call(apiInst, context[i], item.row, item.column, i, j);
                  } else {
                    ret = fn.call(apiInst, context[i], item, i, j, rows);
                  }

                  if (ret !== undefined) {
                    a.push(ret);
                  }
                }
              }
            }

            if (a.length || alwaysNew) {
              var api = new _Api2(context, flatten ? a.concat.apply([], a) : a);
              var apiSelector = api.selector;
              apiSelector.rows = selector.rows;
              apiSelector.cols = selector.cols;
              apiSelector.opts = selector.opts;
              return api;
            }

            return this;
          },
          lastIndexOf: __arrayProto.lastIndexOf || function (obj, start) {
            // Bit cheeky...
            return this.indexOf.apply(this.toArray.reverse(), arguments);
          },
          length: 0,
          map: function map(fn) {
            var a = [];

            if (__arrayProto.map) {
              a = __arrayProto.map.call(this, fn, this);
            } else {
              // Compatibility for browsers without EMCA-252-5 (JS 1.6)
              for (var i = 0, ien = this.length; i < ien; i++) {
                a.push(fn.call(this, this[i], i));
              }
            }

            return new _Api2(this.context, a);
          },
          pluck: function pluck(prop) {
            return this.map(function (el) {
              return el[prop];
            });
          },
          pop: __arrayProto.pop,
          push: __arrayProto.push,
          // Does not return an API instance
          reduce: __arrayProto.reduce || function (fn, init) {
            return _fnReduce(this, fn, init, 0, this.length, 1);
          },
          reduceRight: __arrayProto.reduceRight || function (fn, init) {
            return _fnReduce(this, fn, init, this.length - 1, -1, -1);
          },
          reverse: __arrayProto.reverse,
          // Object with rows, columns and opts
          selector: null,
          shift: __arrayProto.shift,
          slice: function slice() {
            return new _Api2(this.context, this);
          },
          sort: __arrayProto.sort,
          // ? name - order?
          splice: __arrayProto.splice,
          toArray: function toArray() {
            return __arrayProto.slice.call(this);
          },
          to$: function to$() {
            return $(this);
          },
          toJQuery: function toJQuery() {
            return $(this);
          },
          unique: function unique() {
            return new _Api2(this.context, _unique(this));
          },
          unshift: __arrayProto.unshift
        });

        _Api2.extend = function (scope, obj, ext) {
          // Only extend API instances and static properties of the API
          if (!ext.length || !obj || !(obj instanceof _Api2) && !obj.__dt_wrapper) {
            return;
          }

          var i,
              ien,
              struct,
              methodScoping = function methodScoping(scope, fn, struc) {
            return function () {
              var ret = fn.apply(scope, arguments); // Method extension

              _Api2.extend(ret, ret, struc.methodExt);

              return ret;
            };
          };

          for (i = 0, ien = ext.length; i < ien; i++) {
            struct = ext[i]; // Value

            obj[struct.name] = struct.type === 'function' ? methodScoping(scope, struct.val, struct) : struct.type === 'object' ? {} : struct.val;
            obj[struct.name].__dt_wrapper = true; // Property extension

            _Api2.extend(scope, obj[struct.name], struct.propExt);
          }
        }; // @todo - Is there need for an augment function?
        // _Api.augment = function ( inst, name )
        // {
        // 	// Find src object in the structure from the name
        // 	var parts = name.split('.');
        // 	_Api.extend( inst, obj );
        // };
        //     [
        //       {
        //         name:      'data'                -- string   - Property name
        //         val:       function () {},       -- function - Api method (or undefined if just an object
        //         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result
        //         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property
        //       },
        //       {
        //         name:     'row'
        //         val:       {},
        //         methodExt: [ ... ],
        //         propExt:   [
        //           {
        //             name:      'data'
        //             val:       function () {},
        //             methodExt: [ ... ],
        //             propExt:   [ ... ]
        //           },
        //           ...
        //         ]
        //       }
        //     ]


        _Api2.register = _api_register = function _api_register(name, val) {
          if (Array.isArray(name)) {
            for (var j = 0, jen = name.length; j < jen; j++) {
              _Api2.register(name[j], val);
            }

            return;
          }

          var i,
              ien,
              heir = name.split('.'),
              struct = __apiStruct,
              key,
              method;

          var find = function find(src, name) {
            for (var i = 0, ien = src.length; i < ien; i++) {
              if (src[i].name === name) {
                return src[i];
              }
            }

            return null;
          };

          for (i = 0, ien = heir.length; i < ien; i++) {
            method = heir[i].indexOf('()') !== -1;
            key = method ? heir[i].replace('()', '') : heir[i];
            var src = find(struct, key);

            if (!src) {
              src = {
                name: key,
                val: {},
                methodExt: [],
                propExt: [],
                type: 'object'
              };
              struct.push(src);
            }

            if (i === ien - 1) {
              src.val = val;
              src.type = typeof val === 'function' ? 'function' : $.isPlainObject(val) ? 'object' : 'other';
            } else {
              struct = method ? src.methodExt : src.propExt;
            }
          }
        };

        _Api2.registerPlural = _api_registerPlural = function _api_registerPlural(pluralName, singularName, val) {
          _Api2.register(pluralName, val);

          _Api2.register(singularName, function () {
            var ret = val.apply(this, arguments);

            if (ret === this) {
              // Returned item is the API instance that was passed in, return it
              return this;
            } else if (ret instanceof _Api2) {
              // New API instance returned, want the value from the first item
              // in the returned array for the singular result.
              return ret.length ? Array.isArray(ret[0]) ? new _Api2(ret.context, ret[0]) : // Array results are 'enhanced'
              ret[0] : undefined;
            } // Non-API return - just fire it back


            return ret;
          });
        };
        /**
         * Selector for HTML tables. Apply the given selector to the give array of
         * DataTables settings objects.
         *
         * @param {string|integer} [selector] jQuery selector string or integer
         * @param  {array} Array of DataTables settings objects to be filtered
         * @return {array}
         * @ignore
         */


        var __table_selector = function __table_selector(selector, a) {
          if (Array.isArray(selector)) {
            return $.map(selector, function (item) {
              return __table_selector(item, a);
            });
          } // Integer is used to pick out a table by index


          if (typeof selector === 'number') {
            return [a[selector]];
          } // Perform a jQuery selector on the table nodes


          var nodes = $.map(a, function (el, i) {
            return el.nTable;
          });
          return $(nodes).filter(selector).map(function (i) {
            // Need to translate back from the table node to the settings
            var idx = $.inArray(this, nodes);
            return a[idx];
          }).toArray();
        };
        /**
         * Context selector for the API's context (i.e. the tables the API instance
         * refers to.
         *
         * @name    DataTable.Api#tables
         * @param {string|integer} [selector] Selector to pick which tables the iterator
         *   should operate on. If not given, all tables in the current context are
         *   used. This can be given as a jQuery selector (for example `':gt(0)'`) to
         *   select multiple tables or as an integer to select a single table.
         * @returns {DataTable.Api} Returns a new API instance if a selector is given.
         */


        _api_register('tables()', function (selector) {
          // A new instance is created if there was a selector specified
          return selector !== undefined && selector !== null ? new _Api2(__table_selector(selector, this.context)) : this;
        });

        _api_register('table()', function (selector) {
          var tables = this.tables(selector);
          var ctx = tables.context; // Truncate to the first matched table

          return ctx.length ? new _Api2(ctx[0]) : tables;
        });

        _api_registerPlural('tables().nodes()', 'table().node()', function () {
          return this.iterator('table', function (ctx) {
            return ctx.nTable;
          }, 1);
        });

        _api_registerPlural('tables().body()', 'table().body()', function () {
          return this.iterator('table', function (ctx) {
            return ctx.nTBody;
          }, 1);
        });

        _api_registerPlural('tables().header()', 'table().header()', function () {
          return this.iterator('table', function (ctx) {
            return ctx.nTHead;
          }, 1);
        });

        _api_registerPlural('tables().footer()', 'table().footer()', function () {
          return this.iterator('table', function (ctx) {
            return ctx.nTFoot;
          }, 1);
        });

        _api_registerPlural('tables().containers()', 'table().container()', function () {
          return this.iterator('table', function (ctx) {
            return ctx.nTableWrapper;
          }, 1);
        });
        /**
         * Redraw the tables in the current context.
         */


        _api_register('draw()', function (paging) {
          return this.iterator('table', function (settings) {
            if (paging === 'page') {
              _fnDraw(settings);
            } else {
              if (typeof paging === 'string') {
                paging = paging === 'full-hold' ? false : true;
              }

              _fnReDraw(settings, paging === false);
            }
          });
        });
        /**
         * Get the current page index.
         *
         * @return {integer} Current page index (zero based)
         */

        /**
        * Set the current page.
        *
        * Note that if you attempt to show a page which does not exist, DataTables will
        * not throw an error, but rather reset the paging.
        *
        * @param {integer|string} action The paging action to take. This can be one of:
        *  * `integer` - The page index to jump to
        *  * `string` - An action to take:
        *    * `first` - Jump to first page.
        *    * `next` - Jump to the next page
        *    * `previous` - Jump to previous page
        *    * `last` - Jump to the last page.
        * @returns {DataTables.Api} this
        */


        _api_register('page()', function (action) {
          if (action === undefined) {
            return this.page.info().page; // not an expensive call
          } // else, have an action to take on all tables


          return this.iterator('table', function (settings) {
            _fnPageChange(settings, action);
          });
        });
        /**
         * Paging information for the first table in the current context.
         *
         * If you require paging information for another table, use the `table()` method
         * with a suitable selector.
         *
         * @return {object} Object with the following properties set:
         *  * `page` - Current page index (zero based - i.e. the first page is `0`)
         *  * `pages` - Total number of pages
         *  * `start` - Display index for the first record shown on the current page
         *  * `end` - Display index for the last record shown on the current page
         *  * `length` - Display length (number of records). Note that generally `start
         *    + length = end`, but this is not always true, for example if there are
         *    only 2 records to show on the final page, with a length of 10.
         *  * `recordsTotal` - Full data set length
         *  * `recordsDisplay` - Data set length once the current filtering criterion
         *    are applied.
         */


        _api_register('page.info()', function (action) {
          if (this.context.length === 0) {
            return undefined;
          }

          var settings = this.context[0],
              start = settings._iDisplayStart,
              len = settings.oFeatures.bPaginate ? settings._iDisplayLength : -1,
              visRecords = settings.fnRecordsDisplay(),
              all = len === -1;
          return {
            "page": all ? 0 : Math.floor(start / len),
            "pages": all ? 1 : Math.ceil(visRecords / len),
            "start": start,
            "end": settings.fnDisplayEnd(),
            "length": len,
            "recordsTotal": settings.fnRecordsTotal(),
            "recordsDisplay": visRecords,
            "serverSide": _fnDataSource(settings) === 'ssp'
          };
        });
        /**
         * Get the current page length.
         *
         * @return {integer} Current page length. Note `-1` indicates that all records
         *   are to be shown.
         */

        /**
        * Set the current page length.
        *
        * @param {integer} Page length to set. Use `-1` to show all records.
        * @returns {DataTables.Api} this
        */


        _api_register('page.len()', function (len) {
          // Note that we can't call this function 'length()' because `length`
          // is a Javascript property of functions which defines how many arguments
          // the function expects.
          if (len === undefined) {
            return this.context.length !== 0 ? this.context[0]._iDisplayLength : undefined;
          } // else, set the page length


          return this.iterator('table', function (settings) {
            _fnLengthChange(settings, len);
          });
        });

        var __reload = function __reload(settings, holdPosition, callback) {
          // Use the draw event to trigger a callback
          if (callback) {
            var api = new _Api2(settings);
            api.one('draw', function () {
              callback(api.ajax.json());
            });
          }

          if (_fnDataSource(settings) == 'ssp') {
            _fnReDraw(settings, holdPosition);
          } else {
            _fnProcessingDisplay(settings, true); // Cancel an existing request


            var xhr = settings.jqXHR;

            if (xhr && xhr.readyState !== 4) {
              xhr.abort();
            } // Trigger xhr


            _fnBuildAjax(settings, [], function (json) {
              _fnClearTable(settings);

              var data = _fnAjaxDataSrc(settings, json);

              for (var i = 0, ien = data.length; i < ien; i++) {
                _fnAddData(settings, data[i]);
              }

              _fnReDraw(settings, holdPosition);

              _fnProcessingDisplay(settings, false);
            });
          }
        };
        /**
         * Get the JSON response from the last Ajax request that DataTables made to the
         * server. Note that this returns the JSON from the first table in the current
         * context.
         *
         * @return {object} JSON received from the server.
         */


        _api_register('ajax.json()', function () {
          var ctx = this.context;

          if (ctx.length > 0) {
            return ctx[0].json;
          } // else return undefined;

        });
        /**
         * Get the data submitted in the last Ajax request
         */


        _api_register('ajax.params()', function () {
          var ctx = this.context;

          if (ctx.length > 0) {
            return ctx[0].oAjaxData;
          } // else return undefined;

        });
        /**
         * Reload tables from the Ajax data source. Note that this function will
         * automatically re-draw the table when the remote data has been loaded.
         *
         * @param {boolean} [reset=true] Reset (default) or hold the current paging
         *   position. A full re-sort and re-filter is performed when this method is
         *   called, which is why the pagination reset is the default action.
         * @returns {DataTables.Api} this
         */


        _api_register('ajax.reload()', function (callback, resetPaging) {
          return this.iterator('table', function (settings) {
            __reload(settings, resetPaging === false, callback);
          });
        });
        /**
         * Get the current Ajax URL. Note that this returns the URL from the first
         * table in the current context.
         *
         * @return {string} Current Ajax source URL
         */

        /**
        * Set the Ajax URL. Note that this will set the URL for all tables in the
        * current context.
        *
        * @param {string} url URL to set.
        * @returns {DataTables.Api} this
        */


        _api_register('ajax.url()', function (url) {
          var ctx = this.context;

          if (url === undefined) {
            // get
            if (ctx.length === 0) {
              return undefined;
            }

            ctx = ctx[0];
            return ctx.ajax ? $.isPlainObject(ctx.ajax) ? ctx.ajax.url : ctx.ajax : ctx.sAjaxSource;
          } // set


          return this.iterator('table', function (settings) {
            if ($.isPlainObject(settings.ajax)) {
              settings.ajax.url = url;
            } else {
              settings.ajax = url;
            } // No need to consider sAjaxSource here since DataTables gives priority
            // to `ajax` over `sAjaxSource`. So setting `ajax` here, renders any
            // value of `sAjaxSource` redundant.

          });
        });
        /**
         * Load data from the newly set Ajax URL. Note that this method is only
         * available when `ajax.url()` is used to set a URL. Additionally, this method
         * has the same effect as calling `ajax.reload()` but is provided for
         * convenience when setting a new URL. Like `ajax.reload()` it will
         * automatically redraw the table once the remote data has been loaded.
         *
         * @returns {DataTables.Api} this
         */


        _api_register('ajax.url().load()', function (callback, resetPaging) {
          // Same as a reload, but makes sense to present it for easy access after a
          // url change
          return this.iterator('table', function (ctx) {
            __reload(ctx, resetPaging === false, callback);
          });
        });

        var _selector_run = function _selector_run(type, selector, selectFn, settings, opts) {
          var out = [],
              res,
              a,
              i,
              ien,
              j,
              jen,
              selectorType = typeof selector; // Can't just check for isArray here, as an API or jQuery instance might be
          // given with their array like look

          if (!selector || selectorType === 'string' || selectorType === 'function' || selector.length === undefined) {
            selector = [selector];
          }

          for (i = 0, ien = selector.length; i < ien; i++) {
            // Only split on simple strings - complex expressions will be jQuery selectors
            a = selector[i] && selector[i].split && !selector[i].match(/[\[\(:]/) ? selector[i].split(',') : [selector[i]];

            for (j = 0, jen = a.length; j < jen; j++) {
              res = selectFn(typeof a[j] === 'string' ? a[j].trim() : a[j]);

              if (res && res.length) {
                out = out.concat(res);
              }
            }
          } // selector extensions


          var ext = _ext.selector[type];

          if (ext.length) {
            for (i = 0, ien = ext.length; i < ien; i++) {
              out = ext[i](settings, opts, out);
            }
          }

          return _unique(out);
        };

        var _selector_opts = function _selector_opts(opts) {
          if (!opts) {
            opts = {};
          } // Backwards compatibility for 1.9- which used the terminology filter rather
          // than search


          if (opts.filter && opts.search === undefined) {
            opts.search = opts.filter;
          }

          return $.extend({
            search: 'none',
            order: 'current',
            page: 'all'
          }, opts);
        };

        var _selector_first = function _selector_first(inst) {
          // Reduce the API instance to the first item found
          for (var i = 0, ien = inst.length; i < ien; i++) {
            if (inst[i].length > 0) {
              // Assign the first element to the first item in the instance
              // and truncate the instance and context
              inst[0] = inst[i];
              inst[0].length = 1;
              inst.length = 1;
              inst.context = [inst.context[i]];
              return inst;
            }
          } // Not found - return an empty instance


          inst.length = 0;
          return inst;
        };

        var _selector_row_indexes = function _selector_row_indexes(settings, opts) {
          var i,
              ien,
              tmp,
              a = [],
              displayFiltered = settings.aiDisplay,
              displayMaster = settings.aiDisplayMaster;
          var search = opts.search,
              // none, applied, removed
          order = opts.order,
              // applied, current, index (original - compatibility with 1.9)
          page = opts.page; // all, current

          if (_fnDataSource(settings) == 'ssp') {
            // In server-side processing mode, most options are irrelevant since
            // rows not shown don't exist and the index order is the applied order
            // Removed is a special case - for consistency just return an empty
            // array
            return search === 'removed' ? [] : _range(0, displayMaster.length);
          } else if (page == 'current') {
            // Current page implies that order=current and fitler=applied, since it is
            // fairly senseless otherwise, regardless of what order and search actually
            // are
            for (i = settings._iDisplayStart, ien = settings.fnDisplayEnd(); i < ien; i++) {
              a.push(displayFiltered[i]);
            }
          } else if (order == 'current' || order == 'applied') {
            if (search == 'none') {
              a = displayMaster.slice();
            } else if (search == 'applied') {
              a = displayFiltered.slice();
            } else if (search == 'removed') {
              // O(n+m) solution by creating a hash map
              var displayFilteredMap = {};

              for (var i = 0, ien = displayFiltered.length; i < ien; i++) {
                displayFilteredMap[displayFiltered[i]] = null;
              }

              a = $.map(displayMaster, function (el) {
                return !displayFilteredMap.hasOwnProperty(el) ? el : null;
              });
            }
          } else if (order == 'index' || order == 'original') {
            for (i = 0, ien = settings.aoData.length; i < ien; i++) {
              if (search == 'none') {
                a.push(i);
              } else {
                // applied | removed
                tmp = $.inArray(i, displayFiltered);

                if (tmp === -1 && search == 'removed' || tmp >= 0 && search == 'applied') {
                  a.push(i);
                }
              }
            }
          }

          return a;
        };
        /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
         * Rows
         *
         * {}          - no selector - use all available rows
         * {integer}   - row aoData index
         * {node}      - TR node
         * {string}    - jQuery selector to apply to the TR elements
         * {array}     - jQuery array of nodes, or simply an array of TR nodes
         *
         */


        var __row_selector = function __row_selector(settings, selector, opts) {
          var rows;

          var run = function run(sel) {
            var selInt = _intVal(sel);

            var i, ien;
            var aoData = settings.aoData; // Short cut - selector is a number and no options provided (default is
            // all records, so no need to check if the index is in there, since it
            // must be - dev error if the index doesn't exist).

            if (selInt !== null && !opts) {
              return [selInt];
            }

            if (!rows) {
              rows = _selector_row_indexes(settings, opts);
            }

            if (selInt !== null && $.inArray(selInt, rows) !== -1) {
              // Selector - integer
              return [selInt];
            } else if (sel === null || sel === undefined || sel === '') {
              // Selector - none
              return rows;
            } // Selector - function


            if (typeof sel === 'function') {
              return $.map(rows, function (idx) {
                var row = aoData[idx];
                return sel(idx, row._aData, row.nTr) ? idx : null;
              });
            } // Selector - node


            if (sel.nodeName) {
              var rowIdx = sel._DT_RowIndex; // Property added by DT for fast lookup

              var cellIdx = sel._DT_CellIndex;

              if (rowIdx !== undefined) {
                // Make sure that the row is actually still present in the table
                return aoData[rowIdx] && aoData[rowIdx].nTr === sel ? [rowIdx] : [];
              } else if (cellIdx) {
                return aoData[cellIdx.row] && aoData[cellIdx.row].nTr === sel.parentNode ? [cellIdx.row] : [];
              } else {
                var host = $(sel).closest('*[data-dt-row]');
                return host.length ? [host.data('dt-row')] : [];
              }
            } // ID selector. Want to always be able to select rows by id, regardless
            // of if the tr element has been created or not, so can't rely upon
            // jQuery here - hence a custom implementation. This does not match
            // Sizzle's fast selector or HTML4 - in HTML5 the ID can be anything,
            // but to select it using a CSS selector engine (like Sizzle or
            // querySelect) it would need to need to be escaped for some characters.
            // DataTables simplifies this for row selectors since you can select
            // only a row. A # indicates an id any anything that follows is the id -
            // unescaped.


            if (typeof sel === 'string' && sel.charAt(0) === '#') {
              // get row index from id
              var rowObj = settings.aIds[sel.replace(/^#/, '')];

              if (rowObj !== undefined) {
                return [rowObj.idx];
              } // need to fall through to jQuery in case there is DOM id that
              // matches

            } // Get nodes in the order from the `rows` array with null values removed


            var nodes = _removeEmpty(_pluck_order(settings.aoData, rows, 'nTr')); // Selector - jQuery selector string, array of nodes or jQuery object/
            // As jQuery's .filter() allows jQuery objects to be passed in filter,
            // it also allows arrays, so this will cope with all three options


            return $(nodes).filter(sel).map(function () {
              return this._DT_RowIndex;
            }).toArray();
          };

          return _selector_run('row', selector, run, settings, opts);
        };

        _api_register('rows()', function (selector, opts) {
          // argument shifting
          if (selector === undefined) {
            selector = '';
          } else if ($.isPlainObject(selector)) {
            opts = selector;
            selector = '';
          }

          opts = _selector_opts(opts);
          var inst = this.iterator('table', function (settings) {
            return __row_selector(settings, selector, opts);
          }, 1); // Want argument shifting here and in __row_selector?

          inst.selector.rows = selector;
          inst.selector.opts = opts;
          return inst;
        });

        _api_register('rows().nodes()', function () {
          return this.iterator('row', function (settings, row) {
            return settings.aoData[row].nTr || undefined;
          }, 1);
        });

        _api_register('rows().data()', function () {
          return this.iterator(true, 'rows', function (settings, rows) {
            return _pluck_order(settings.aoData, rows, '_aData');
          }, 1);
        });

        _api_registerPlural('rows().cache()', 'row().cache()', function (type) {
          return this.iterator('row', function (settings, row) {
            var r = settings.aoData[row];
            return type === 'search' ? r._aFilterData : r._aSortData;
          }, 1);
        });

        _api_registerPlural('rows().invalidate()', 'row().invalidate()', function (src) {
          return this.iterator('row', function (settings, row) {
            _fnInvalidate(settings, row, src);
          });
        });

        _api_registerPlural('rows().indexes()', 'row().index()', function () {
          return this.iterator('row', function (settings, row) {
            return row;
          }, 1);
        });

        _api_registerPlural('rows().ids()', 'row().id()', function (hash) {
          var a = [];
          var context = this.context; // `iterator` will drop undefined values, but in this case we want them

          for (var i = 0, ien = context.length; i < ien; i++) {
            for (var j = 0, jen = this[i].length; j < jen; j++) {
              var id = context[i].rowIdFn(context[i].aoData[this[i][j]]._aData);
              a.push((hash === true ? '#' : '') + id);
            }
          }

          return new _Api2(context, a);
        });

        _api_registerPlural('rows().remove()', 'row().remove()', function () {
          var that = this;
          this.iterator('row', function (settings, row, thatIdx) {
            var data = settings.aoData;
            var rowData = data[row];
            var i, ien, j, jen;
            var loopRow, loopCells;
            data.splice(row, 1); // Update the cached indexes

            for (i = 0, ien = data.length; i < ien; i++) {
              loopRow = data[i];
              loopCells = loopRow.anCells; // Rows

              if (loopRow.nTr !== null) {
                loopRow.nTr._DT_RowIndex = i;
              } // Cells


              if (loopCells !== null) {
                for (j = 0, jen = loopCells.length; j < jen; j++) {
                  loopCells[j]._DT_CellIndex.row = i;
                }
              }
            } // Delete from the display arrays


            _fnDeleteIndex(settings.aiDisplayMaster, row);

            _fnDeleteIndex(settings.aiDisplay, row);

            _fnDeleteIndex(that[thatIdx], row, false); // maintain local indexes
            // For server-side processing tables - subtract the deleted row from the count


            if (settings._iRecordsDisplay > 0) {
              settings._iRecordsDisplay--;
            } // Check for an 'overflow' they case for displaying the table


            _fnLengthOverflow(settings); // Remove the row's ID reference if there is one


            var id = settings.rowIdFn(rowData._aData);

            if (id !== undefined) {
              delete settings.aIds[id];
            }
          });
          this.iterator('table', function (settings) {
            for (var i = 0, ien = settings.aoData.length; i < ien; i++) {
              settings.aoData[i].idx = i;
            }
          });
          return this;
        });

        _api_register('rows.add()', function (rows) {
          var newRows = this.iterator('table', function (settings) {
            var row, i, ien;
            var out = [];

            for (i = 0, ien = rows.length; i < ien; i++) {
              row = rows[i];

              if (row.nodeName && row.nodeName.toUpperCase() === 'TR') {
                out.push(_fnAddTr(settings, row)[0]);
              } else {
                out.push(_fnAddData(settings, row));
              }
            }

            return out;
          }, 1); // Return an Api.rows() extended instance, so rows().nodes() etc can be used

          var modRows = this.rows(-1);
          modRows.pop();
          $.merge(modRows, newRows);
          return modRows;
        });
        /**
         *
         */


        _api_register('row()', function (selector, opts) {
          return _selector_first(this.rows(selector, opts));
        });

        _api_register('row().data()', function (data) {
          var ctx = this.context;

          if (data === undefined) {
            // Get
            return ctx.length && this.length ? ctx[0].aoData[this[0]]._aData : undefined;
          } // Set


          var row = ctx[0].aoData[this[0]];
          row._aData = data; // If the DOM has an id, and the data source is an array

          if (Array.isArray(data) && row.nTr && row.nTr.id) {
            _fnSetObjectDataFn(ctx[0].rowId)(data, row.nTr.id);
          } // Automatically invalidate


          _fnInvalidate(ctx[0], this[0], 'data');

          return this;
        });

        _api_register('row().node()', function () {
          var ctx = this.context;
          return ctx.length && this.length ? ctx[0].aoData[this[0]].nTr || null : null;
        });

        _api_register('row.add()', function (row) {
          // Allow a jQuery object to be passed in - only a single row is added from
          // it though - the first element in the set
          if (row instanceof $ && row.length) {
            row = row[0];
          }

          var rows = this.iterator('table', function (settings) {
            if (row.nodeName && row.nodeName.toUpperCase() === 'TR') {
              return _fnAddTr(settings, row)[0];
            }

            return _fnAddData(settings, row);
          }); // Return an Api.rows() extended instance, with the newly added row selected

          return this.row(rows[0]);
        });

        var __details_add = function __details_add(ctx, row, data, klass) {
          // Convert to array of TR elements
          var rows = [];

          var addRow = function addRow(r, k) {
            // Recursion to allow for arrays of jQuery objects
            if (Array.isArray(r) || r instanceof $) {
              for (var i = 0, ien = r.length; i < ien; i++) {
                addRow(r[i], k);
              }

              return;
            } // If we get a TR element, then just add it directly - up to the dev
            // to add the correct number of columns etc


            if (r.nodeName && r.nodeName.toLowerCase() === 'tr') {
              rows.push(r);
            } else {
              // Otherwise create a row with a wrapper
              var created = $('<tr><td></td></tr>').addClass(k);
              $('td', created).addClass(k).html(r)[0].colSpan = _fnVisbleColumns(ctx);
              rows.push(created[0]);
            }
          };

          addRow(data, klass);

          if (row._details) {
            row._details.detach();
          }

          row._details = $(rows); // If the children were already shown, that state should be retained

          if (row._detailsShow) {
            row._details.insertAfter(row.nTr);
          }
        };

        var __details_remove = function __details_remove(api, idx) {
          var ctx = api.context;

          if (ctx.length) {
            var row = ctx[0].aoData[idx !== undefined ? idx : api[0]];

            if (row && row._details) {
              row._details.remove();

              row._detailsShow = undefined;
              row._details = undefined;
            }
          }
        };

        var __details_display = function __details_display(api, show) {
          var ctx = api.context;

          if (ctx.length && api.length) {
            var row = ctx[0].aoData[api[0]];

            if (row._details) {
              row._detailsShow = show;

              if (show) {
                row._details.insertAfter(row.nTr);
              } else {
                row._details.detach();
              }

              __details_events(ctx[0]);
            }
          }
        };

        var __details_events = function __details_events(settings) {
          var api = new _Api2(settings);
          var namespace = '.dt.DT_details';
          var drawEvent = 'draw' + namespace;
          var colvisEvent = 'column-visibility' + namespace;
          var destroyEvent = 'destroy' + namespace;
          var data = settings.aoData;
          api.off(drawEvent + ' ' + colvisEvent + ' ' + destroyEvent);

          if (_pluck(data, '_details').length > 0) {
            // On each draw, insert the required elements into the document
            api.on(drawEvent, function (e, ctx) {
              if (settings !== ctx) {
                return;
              }

              api.rows({
                page: 'current'
              }).eq(0).each(function (idx) {
                // Internal data grab
                var row = data[idx];

                if (row._detailsShow) {
                  row._details.insertAfter(row.nTr);
                }
              });
            }); // Column visibility change - update the colspan

            api.on(colvisEvent, function (e, ctx, idx, vis) {
              if (settings !== ctx) {
                return;
              } // Update the colspan for the details rows (note, only if it already has
              // a colspan)


              var row,
                  visible = _fnVisbleColumns(ctx);

              for (var i = 0, ien = data.length; i < ien; i++) {
                row = data[i];

                if (row._details) {
                  row._details.children('td[colspan]').attr('colspan', visible);
                }
              }
            }); // Table destroyed - nuke any child rows

            api.on(destroyEvent, function (e, ctx) {
              if (settings !== ctx) {
                return;
              }

              for (var i = 0, ien = data.length; i < ien; i++) {
                if (data[i]._details) {
                  __details_remove(api, i);
                }
              }
            });
          }
        }; // Strings for the method names to help minification


        var _emp = '';

        var _child_obj = _emp + 'row().child';

        var _child_mth = _child_obj + '()'; // data can be:
        //  tr
        //  string
        //  jQuery or array of any of the above


        _api_register(_child_mth, function (data, klass) {
          var ctx = this.context;

          if (data === undefined) {
            // get
            return ctx.length && this.length ? ctx[0].aoData[this[0]]._details : undefined;
          } else if (data === true) {
            // show
            this.child.show();
          } else if (data === false) {
            // remove
            __details_remove(this);
          } else if (ctx.length && this.length) {
            // set
            __details_add(ctx[0], ctx[0].aoData[this[0]], data, klass);
          }

          return this;
        });

        _api_register([_child_obj + '.show()', _child_mth + '.show()' // only when `child()` was called with parameters (without
        ], function (show) {
          // it returns an object and this method is not executed)
          __details_display(this, true);

          return this;
        });

        _api_register([_child_obj + '.hide()', _child_mth + '.hide()' // only when `child()` was called with parameters (without
        ], function () {
          // it returns an object and this method is not executed)
          __details_display(this, false);

          return this;
        });

        _api_register([_child_obj + '.remove()', _child_mth + '.remove()' // only when `child()` was called with parameters (without
        ], function () {
          // it returns an object and this method is not executed)
          __details_remove(this);

          return this;
        });

        _api_register(_child_obj + '.isShown()', function () {
          var ctx = this.context;

          if (ctx.length && this.length) {
            // _detailsShown as false or undefined will fall through to return false
            return ctx[0].aoData[this[0]]._detailsShow || false;
          }

          return false;
        });
        /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
         * Columns
         *
         * {integer}           - column index (>=0 count from left, <0 count from right)
         * "{integer}:visIdx"  - visible column index (i.e. translate to column index)  (>=0 count from left, <0 count from right)
         * "{integer}:visible" - alias for {integer}:visIdx  (>=0 count from left, <0 count from right)
         * "{string}:name"     - column name
         * "{string}"          - jQuery selector on column header nodes
         *
         */
        // can be an array of these items, comma separated list, or an array of comma
        // separated lists


        var __re_column_selector = /^([^:]+):(name|visIdx|visible)$/; // r1 and r2 are redundant - but it means that the parameters match for the
        // iterator callback in columns().data()

        var __columnData = function __columnData(settings, column, r1, r2, rows) {
          var a = [];

          for (var row = 0, ien = rows.length; row < ien; row++) {
            a.push(_fnGetCellData(settings, rows[row], column));
          }

          return a;
        };

        var __column_selector = function __column_selector(settings, selector, opts) {
          var columns = settings.aoColumns,
              names = _pluck(columns, 'sName'),
              nodes = _pluck(columns, 'nTh');

          var run = function run(s) {
            var selInt = _intVal(s); // Selector - all


            if (s === '') {
              return _range(columns.length);
            } // Selector - index


            if (selInt !== null) {
              return [selInt >= 0 ? selInt : // Count from left
              columns.length + selInt // Count from right (+ because its a negative value)
              ];
            } // Selector = function


            if (typeof s === 'function') {
              var rows = _selector_row_indexes(settings, opts);

              return $.map(columns, function (col, idx) {
                return s(idx, __columnData(settings, idx, 0, 0, rows), nodes[idx]) ? idx : null;
              });
            } // jQuery or string selector


            var match = typeof s === 'string' ? s.match(__re_column_selector) : '';

            if (match) {
              switch (match[2]) {
                case 'visIdx':
                case 'visible':
                  var idx = parseInt(match[1], 10); // Visible index given, convert to column index

                  if (idx < 0) {
                    // Counting from the right
                    var visColumns = $.map(columns, function (col, i) {
                      return col.bVisible ? i : null;
                    });
                    return [visColumns[visColumns.length + idx]];
                  } // Counting from the left


                  return [_fnVisibleToColumnIndex(settings, idx)];

                case 'name':
                  // match by name. `names` is column index complete and in order
                  return $.map(names, function (name, i) {
                    return name === match[1] ? i : null;
                  });

                default:
                  return [];
              }
            } // Cell in the table body


            if (s.nodeName && s._DT_CellIndex) {
              return [s._DT_CellIndex.column];
            } // jQuery selector on the TH elements for the columns


            var jqResult = $(nodes).filter(s).map(function () {
              return $.inArray(this, nodes); // `nodes` is column index complete and in order
            }).toArray();

            if (jqResult.length || !s.nodeName) {
              return jqResult;
            } // Otherwise a node which might have a `dt-column` data attribute, or be
            // a child or such an element


            var host = $(s).closest('*[data-dt-column]');
            return host.length ? [host.data('dt-column')] : [];
          };

          return _selector_run('column', selector, run, settings, opts);
        };

        var __setColumnVis = function __setColumnVis(settings, column, vis) {
          var cols = settings.aoColumns,
              col = cols[column],
              data = settings.aoData,
              row,
              cells,
              i,
              ien,
              tr; // Get

          if (vis === undefined) {
            return col.bVisible;
          } // Set
          // No change


          if (col.bVisible === vis) {
            return;
          }

          if (vis) {
            // Insert column
            // Need to decide if we should use appendChild or insertBefore
            var insertBefore = $.inArray(true, _pluck(cols, 'bVisible'), column + 1);

            for (i = 0, ien = data.length; i < ien; i++) {
              tr = data[i].nTr;
              cells = data[i].anCells;

              if (tr) {
                // insertBefore can act like appendChild if 2nd arg is null
                tr.insertBefore(cells[column], cells[insertBefore] || null);
              }
            }
          } else {
            // Remove column
            $(_pluck(settings.aoData, 'anCells', column)).detach();
          } // Common actions


          col.bVisible = vis;
        };

        _api_register('columns()', function (selector, opts) {
          // argument shifting
          if (selector === undefined) {
            selector = '';
          } else if ($.isPlainObject(selector)) {
            opts = selector;
            selector = '';
          }

          opts = _selector_opts(opts);
          var inst = this.iterator('table', function (settings) {
            return __column_selector(settings, selector, opts);
          }, 1); // Want argument shifting here and in _row_selector?

          inst.selector.cols = selector;
          inst.selector.opts = opts;
          return inst;
        });

        _api_registerPlural('columns().header()', 'column().header()', function (selector, opts) {
          return this.iterator('column', function (settings, column) {
            return settings.aoColumns[column].nTh;
          }, 1);
        });

        _api_registerPlural('columns().footer()', 'column().footer()', function (selector, opts) {
          return this.iterator('column', function (settings, column) {
            return settings.aoColumns[column].nTf;
          }, 1);
        });

        _api_registerPlural('columns().data()', 'column().data()', function () {
          return this.iterator('column-rows', __columnData, 1);
        });

        _api_registerPlural('columns().dataSrc()', 'column().dataSrc()', function () {
          return this.iterator('column', function (settings, column) {
            return settings.aoColumns[column].mData;
          }, 1);
        });

        _api_registerPlural('columns().cache()', 'column().cache()', function (type) {
          return this.iterator('column-rows', function (settings, column, i, j, rows) {
            return _pluck_order(settings.aoData, rows, type === 'search' ? '_aFilterData' : '_aSortData', column);
          }, 1);
        });

        _api_registerPlural('columns().nodes()', 'column().nodes()', function () {
          return this.iterator('column-rows', function (settings, column, i, j, rows) {
            return _pluck_order(settings.aoData, rows, 'anCells', column);
          }, 1);
        });

        _api_registerPlural('columns().visible()', 'column().visible()', function (vis, calc) {
          var that = this;
          var ret = this.iterator('column', function (settings, column) {
            if (vis === undefined) {
              return settings.aoColumns[column].bVisible;
            } // else


            __setColumnVis(settings, column, vis);
          }); // Group the column visibility changes

          if (vis !== undefined) {
            this.iterator('table', function (settings) {
              // Redraw the header after changes
              _fnDrawHead(settings, settings.aoHeader);

              _fnDrawHead(settings, settings.aoFooter); // Update colspan for no records display. Child rows and extensions will use their own
              // listeners to do this - only need to update the empty table item here


              if (!settings.aiDisplay.length) {
                $(settings.nTBody).find('td[colspan]').attr('colspan', _fnVisbleColumns(settings));
              }

              _fnSaveState(settings); // Second loop once the first is done for events


              that.iterator('column', function (settings, column) {
                _fnCallbackFire(settings, null, 'column-visibility', [settings, column, vis, calc]);
              });

              if (calc === undefined || calc) {
                that.columns.adjust();
              }
            });
          }

          return ret;
        });

        _api_registerPlural('columns().indexes()', 'column().index()', function (type) {
          return this.iterator('column', function (settings, column) {
            return type === 'visible' ? _fnColumnIndexToVisible(settings, column) : column;
          }, 1);
        });

        _api_register('columns.adjust()', function () {
          return this.iterator('table', function (settings) {
            _fnAdjustColumnSizing(settings);
          }, 1);
        });

        _api_register('column.index()', function (type, idx) {
          if (this.context.length !== 0) {
            var ctx = this.context[0];

            if (type === 'fromVisible' || type === 'toData') {
              return _fnVisibleToColumnIndex(ctx, idx);
            } else if (type === 'fromData' || type === 'toVisible') {
              return _fnColumnIndexToVisible(ctx, idx);
            }
          }
        });

        _api_register('column()', function (selector, opts) {
          return _selector_first(this.columns(selector, opts));
        });

        var __cell_selector = function __cell_selector(settings, selector, opts) {
          var data = settings.aoData;

          var rows = _selector_row_indexes(settings, opts);

          var cells = _removeEmpty(_pluck_order(data, rows, 'anCells'));

          var allCells = $(_flatten([], cells));
          var row;
          var columns = settings.aoColumns.length;
          var a, i, ien, j, o, host;

          var run = function run(s) {
            var fnSelector = typeof s === 'function';

            if (s === null || s === undefined || fnSelector) {
              // All cells and function selectors
              a = [];

              for (i = 0, ien = rows.length; i < ien; i++) {
                row = rows[i];

                for (j = 0; j < columns; j++) {
                  o = {
                    row: row,
                    column: j
                  };

                  if (fnSelector) {
                    // Selector - function
                    host = data[row];

                    if (s(o, _fnGetCellData(settings, row, j), host.anCells ? host.anCells[j] : null)) {
                      a.push(o);
                    }
                  } else {
                    // Selector - all
                    a.push(o);
                  }
                }
              }

              return a;
            } // Selector - index


            if ($.isPlainObject(s)) {
              // Valid cell index and its in the array of selectable rows
              return s.column !== undefined && s.row !== undefined && $.inArray(s.row, rows) !== -1 ? [s] : [];
            } // Selector - jQuery filtered cells


            var jqResult = allCells.filter(s).map(function (i, el) {
              return {
                // use a new object, in case someone changes the values
                row: el._DT_CellIndex.row,
                column: el._DT_CellIndex.column
              };
            }).toArray();

            if (jqResult.length || !s.nodeName) {
              return jqResult;
            } // Otherwise the selector is a node, and there is one last option - the
            // element might be a child of an element which has dt-row and dt-column
            // data attributes


            host = $(s).closest('*[data-dt-row]');
            return host.length ? [{
              row: host.data('dt-row'),
              column: host.data('dt-column')
            }] : [];
          };

          return _selector_run('cell', selector, run, settings, opts);
        };

        _api_register('cells()', function (rowSelector, columnSelector, opts) {
          // Argument shifting
          if ($.isPlainObject(rowSelector)) {
            // Indexes
            if (rowSelector.row === undefined) {
              // Selector options in first parameter
              opts = rowSelector;
              rowSelector = null;
            } else {
              // Cell index objects in first parameter
              opts = columnSelector;
              columnSelector = null;
            }
          }

          if ($.isPlainObject(columnSelector)) {
            opts = columnSelector;
            columnSelector = null;
          } // Cell selector


          if (columnSelector === null || columnSelector === undefined) {
            return this.iterator('table', function (settings) {
              return __cell_selector(settings, rowSelector, _selector_opts(opts));
            });
          } // The default built in options need to apply to row and columns


          var internalOpts = opts ? {
            page: opts.page,
            order: opts.order,
            search: opts.search
          } : {}; // Row + column selector

          var columns = this.columns(columnSelector, internalOpts);
          var rows = this.rows(rowSelector, internalOpts);
          var i, ien, j, jen;
          var cellsNoOpts = this.iterator('table', function (settings, idx) {
            var a = [];

            for (i = 0, ien = rows[idx].length; i < ien; i++) {
              for (j = 0, jen = columns[idx].length; j < jen; j++) {
                a.push({
                  row: rows[idx][i],
                  column: columns[idx][j]
                });
              }
            }

            return a;
          }, 1); // There is currently only one extension which uses a cell selector extension
          // It is a _major_ performance drag to run this if it isn't needed, so this is
          // an extension specific check at the moment

          var cells = opts && opts.selected ? this.cells(cellsNoOpts, opts) : cellsNoOpts;
          $.extend(cells.selector, {
            cols: columnSelector,
            rows: rowSelector,
            opts: opts
          });
          return cells;
        });

        _api_registerPlural('cells().nodes()', 'cell().node()', function () {
          return this.iterator('cell', function (settings, row, column) {
            var data = settings.aoData[row];
            return data && data.anCells ? data.anCells[column] : undefined;
          }, 1);
        });

        _api_register('cells().data()', function () {
          return this.iterator('cell', function (settings, row, column) {
            return _fnGetCellData(settings, row, column);
          }, 1);
        });

        _api_registerPlural('cells().cache()', 'cell().cache()', function (type) {
          type = type === 'search' ? '_aFilterData' : '_aSortData';
          return this.iterator('cell', function (settings, row, column) {
            return settings.aoData[row][type][column];
          }, 1);
        });

        _api_registerPlural('cells().render()', 'cell().render()', function (type) {
          return this.iterator('cell', function (settings, row, column) {
            return _fnGetCellData(settings, row, column, type);
          }, 1);
        });

        _api_registerPlural('cells().indexes()', 'cell().index()', function () {
          return this.iterator('cell', function (settings, row, column) {
            return {
              row: row,
              column: column,
              columnVisible: _fnColumnIndexToVisible(settings, column)
            };
          }, 1);
        });

        _api_registerPlural('cells().invalidate()', 'cell().invalidate()', function (src) {
          return this.iterator('cell', function (settings, row, column) {
            _fnInvalidate(settings, row, src, column);
          });
        });

        _api_register('cell()', function (rowSelector, columnSelector, opts) {
          return _selector_first(this.cells(rowSelector, columnSelector, opts));
        });

        _api_register('cell().data()', function (data) {
          var ctx = this.context;
          var cell = this[0];

          if (data === undefined) {
            // Get
            return ctx.length && cell.length ? _fnGetCellData(ctx[0], cell[0].row, cell[0].column) : undefined;
          } // Set


          _fnSetCellData(ctx[0], cell[0].row, cell[0].column, data);

          _fnInvalidate(ctx[0], cell[0].row, 'data', cell[0].column);

          return this;
        });
        /**
         * Get current ordering (sorting) that has been applied to the table.
         *
         * @returns {array} 2D array containing the sorting information for the first
         *   table in the current context. Each element in the parent array represents
         *   a column being sorted upon (i.e. multi-sorting with two columns would have
         *   2 inner arrays). The inner arrays may have 2 or 3 elements. The first is
         *   the column index that the sorting condition applies to, the second is the
         *   direction of the sort (`desc` or `asc`) and, optionally, the third is the
         *   index of the sorting order from the `column.sorting` initialisation array.
         */

        /**
        * Set the ordering for the table.
        *
        * @param {integer} order Column index to sort upon.
        * @param {string} direction Direction of the sort to be applied (`asc` or `desc`)
        * @returns {DataTables.Api} this
        */

        /**
        * Set the ordering for the table.
        *
        * @param {array} order 1D array of sorting information to be applied.
        * @param {array} [...] Optional additional sorting conditions
        * @returns {DataTables.Api} this
        */

        /**
        * Set the ordering for the table.
        *
        * @param {array} order 2D array of sorting information to be applied.
        * @returns {DataTables.Api} this
        */


        _api_register('order()', function (order, dir) {
          var ctx = this.context;

          if (order === undefined) {
            // get
            return ctx.length !== 0 ? ctx[0].aaSorting : undefined;
          } // set


          if (typeof order === 'number') {
            // Simple column / direction passed in
            order = [[order, dir]];
          } else if (order.length && !Array.isArray(order[0])) {
            // Arguments passed in (list of 1D arrays)
            order = Array.prototype.slice.call(arguments);
          } // otherwise a 2D array was passed in


          return this.iterator('table', function (settings) {
            settings.aaSorting = order.slice();
          });
        });
        /**
         * Attach a sort listener to an element for a given column
         *
         * @param {node|jQuery|string} node Identifier for the element(s) to attach the
         *   listener to. This can take the form of a single DOM node, a jQuery
         *   collection of nodes or a jQuery selector which will identify the node(s).
         * @param {integer} column the column that a click on this node will sort on
         * @param {function} [callback] callback function when sort is run
         * @returns {DataTables.Api} this
         */


        _api_register('order.listener()', function (node, column, callback) {
          return this.iterator('table', function (settings) {
            _fnSortAttachListener(settings, node, column, callback);
          });
        });

        _api_register('order.fixed()', function (set) {
          if (!set) {
            var ctx = this.context;
            var fixed = ctx.length ? ctx[0].aaSortingFixed : undefined;
            return Array.isArray(fixed) ? {
              pre: fixed
            } : fixed;
          }

          return this.iterator('table', function (settings) {
            settings.aaSortingFixed = $.extend(true, {}, set);
          });
        }); // Order by the selected column(s)


        _api_register(['columns().order()', 'column().order()'], function (dir) {
          var that = this;
          return this.iterator('table', function (settings, i) {
            var sort = [];
            $.each(that[i], function (j, col) {
              sort.push([col, dir]);
            });
            settings.aaSorting = sort;
          });
        });

        _api_register('search()', function (input, regex, smart, caseInsen) {
          var ctx = this.context;

          if (input === undefined) {
            // get
            return ctx.length !== 0 ? ctx[0].oPreviousSearch.sSearch : undefined;
          } // set


          return this.iterator('table', function (settings) {
            if (!settings.oFeatures.bFilter) {
              return;
            }

            _fnFilterComplete(settings, $.extend({}, settings.oPreviousSearch, {
              "sSearch": input + "",
              "bRegex": regex === null ? false : regex,
              "bSmart": smart === null ? true : smart,
              "bCaseInsensitive": caseInsen === null ? true : caseInsen
            }), 1);
          });
        });

        _api_registerPlural('columns().search()', 'column().search()', function (input, regex, smart, caseInsen) {
          return this.iterator('column', function (settings, column) {
            var preSearch = settings.aoPreSearchCols;

            if (input === undefined) {
              // get
              return preSearch[column].sSearch;
            } // set


            if (!settings.oFeatures.bFilter) {
              return;
            }

            $.extend(preSearch[column], {
              "sSearch": input + "",
              "bRegex": regex === null ? false : regex,
              "bSmart": smart === null ? true : smart,
              "bCaseInsensitive": caseInsen === null ? true : caseInsen
            });

            _fnFilterComplete(settings, settings.oPreviousSearch, 1);
          });
        });
        /*
         * State API methods
         */


        _api_register('state()', function () {
          return this.context.length ? this.context[0].oSavedState : null;
        });

        _api_register('state.clear()', function () {
          return this.iterator('table', function (settings) {
            // Save an empty object
            settings.fnStateSaveCallback.call(settings.oInstance, settings, {});
          });
        });

        _api_register('state.loaded()', function () {
          return this.context.length ? this.context[0].oLoadedState : null;
        });

        _api_register('state.save()', function () {
          return this.iterator('table', function (settings) {
            _fnSaveState(settings);
          });
        });
        /**
         * Provide a common method for plug-ins to check the version of DataTables being
         * used, in order to ensure compatibility.
         *
         *  @param {string} version Version string to check for, in the format "X.Y.Z".
         *    Note that the formats "X" and "X.Y" are also acceptable.
         *  @returns {boolean} true if this version of DataTables is greater or equal to
         *    the required version, or false if this version of DataTales is not
         *    suitable
         *  @static
         *  @dtopt API-Static
         *
         *  @example
         *    alert( $.fn.dataTable.versionCheck( '1.9.0' ) );
         */


        DataTable.versionCheck = DataTable.fnVersionCheck = function (version) {
          var aThis = DataTable.version.split('.');
          var aThat = version.split('.');
          var iThis, iThat;

          for (var i = 0, iLen = aThat.length; i < iLen; i++) {
            iThis = parseInt(aThis[i], 10) || 0;
            iThat = parseInt(aThat[i], 10) || 0; // Parts are the same, keep comparing

            if (iThis === iThat) {
              continue;
            } // Parts are different, return immediately


            return iThis > iThat;
          }

          return true;
        };
        /**
         * Check if a `<table>` node is a DataTable table already or not.
         *
         *  @param {node|jquery|string} table Table node, jQuery object or jQuery
         *      selector for the table to test. Note that if more than more than one
         *      table is passed on, only the first will be checked
         *  @returns {boolean} true the table given is a DataTable, or false otherwise
         *  @static
         *  @dtopt API-Static
         *
         *  @example
         *    if ( ! $.fn.DataTable.isDataTable( '#example' ) ) {
         *      $('#example').dataTable();
         *    }
         */


        DataTable.isDataTable = DataTable.fnIsDataTable = function (table) {
          var t = $(table).get(0);
          var is = false;

          if (table instanceof DataTable.Api) {
            return true;
          }

          $.each(DataTable.settings, function (i, o) {
            var head = o.nScrollHead ? $('table', o.nScrollHead)[0] : null;
            var foot = o.nScrollFoot ? $('table', o.nScrollFoot)[0] : null;

            if (o.nTable === t || head === t || foot === t) {
              is = true;
            }
          });
          return is;
        };
        /**
         * Get all DataTable tables that have been initialised - optionally you can
         * select to get only currently visible tables.
         *
         *  @param {boolean} [visible=false] Flag to indicate if you want all (default)
         *    or visible tables only.
         *  @returns {array} Array of `table` nodes (not DataTable instances) which are
         *    DataTables
         *  @static
         *  @dtopt API-Static
         *
         *  @example
         *    $.each( $.fn.dataTable.tables(true), function () {
         *      $(table).DataTable().columns.adjust();
         *    } );
         */


        DataTable.tables = DataTable.fnTables = function (visible) {
          var api = false;

          if ($.isPlainObject(visible)) {
            api = visible.api;
            visible = visible.visible;
          }

          var a = $.map(DataTable.settings, function (o) {
            if (!visible || visible && $(o.nTable).is(':visible')) {
              return o.nTable;
            }
          });
          return api ? new _Api2(a) : a;
        };
        /**
         * Convert from camel case parameters to Hungarian notation. This is made public
         * for the extensions to provide the same ability as DataTables core to accept
         * either the 1.9 style Hungarian notation, or the 1.10+ style camelCase
         * parameters.
         *
         *  @param {object} src The model object which holds all parameters that can be
         *    mapped.
         *  @param {object} user The object to convert from camel case to Hungarian.
         *  @param {boolean} force When set to `true`, properties which already have a
         *    Hungarian value in the `user` object will be overwritten. Otherwise they
         *    won't be.
         */


        DataTable.camelToHungarian = _fnCamelToHungarian;
        /**
         *
         */

        _api_register('$()', function (selector, opts) {
          var rows = this.rows(opts).nodes(),
              // Get all rows
          jqRows = $(rows);
          return $([].concat(jqRows.filter(selector).toArray(), jqRows.find(selector).toArray()));
        }); // jQuery functions to operate on the tables


        $.each(['on', 'one', 'off'], function (i, key) {
          _api_register(key + '()', function ()
          /* event, handler */
          {
            var args = Array.prototype.slice.call(arguments); // Add the `dt` namespace automatically if it isn't already present

            args[0] = $.map(args[0].split(/\s/), function (e) {
              return !e.match(/\.dt\b/) ? e + '.dt' : e;
            }).join(' ');
            var inst = $(this.tables().nodes());
            inst[key].apply(inst, args);
            return this;
          });
        });

        _api_register('clear()', function () {
          return this.iterator('table', function (settings) {
            _fnClearTable(settings);
          });
        });

        _api_register('settings()', function () {
          return new _Api2(this.context, this.context);
        });

        _api_register('init()', function () {
          var ctx = this.context;
          return ctx.length ? ctx[0].oInit : null;
        });

        _api_register('data()', function () {
          return this.iterator('table', function (settings) {
            return _pluck(settings.aoData, '_aData');
          }).flatten();
        });

        _api_register('destroy()', function (remove) {
          remove = remove || false;
          return this.iterator('table', function (settings) {
            var orig = settings.nTableWrapper.parentNode;
            var classes = settings.oClasses;
            var table = settings.nTable;
            var tbody = settings.nTBody;
            var thead = settings.nTHead;
            var tfoot = settings.nTFoot;
            var jqTable = $(table);
            var jqTbody = $(tbody);
            var jqWrapper = $(settings.nTableWrapper);
            var rows = $.map(settings.aoData, function (r) {
              return r.nTr;
            });
            var i, ien; // Flag to note that the table is currently being destroyed - no action
            // should be taken

            settings.bDestroying = true; // Fire off the destroy callbacks for plug-ins etc

            _fnCallbackFire(settings, "aoDestroyCallback", "destroy", [settings]); // If not being removed from the document, make all columns visible


            if (!remove) {
              new _Api2(settings).columns().visible(true);
            } // Blitz all `DT` namespaced events (these are internal events, the
            // lowercase, `dt` events are user subscribed and they are responsible
            // for removing them


            jqWrapper.off('.DT').find(':not(tbody *)').off('.DT');
            $(window).off('.DT-' + settings.sInstance); // When scrolling we had to break the table up - restore it

            if (table != thead.parentNode) {
              jqTable.children('thead').detach();
              jqTable.append(thead);
            }

            if (tfoot && table != tfoot.parentNode) {
              jqTable.children('tfoot').detach();
              jqTable.append(tfoot);
            }

            settings.aaSorting = [];
            settings.aaSortingFixed = [];

            _fnSortingClasses(settings);

            $(rows).removeClass(settings.asStripeClasses.join(' '));
            $('th, td', thead).removeClass(classes.sSortable + ' ' + classes.sSortableAsc + ' ' + classes.sSortableDesc + ' ' + classes.sSortableNone); // Add the TR elements back into the table in their original order

            jqTbody.children().detach();
            jqTbody.append(rows); // Remove the DataTables generated nodes, events and classes

            var removedMethod = remove ? 'remove' : 'detach';
            jqTable[removedMethod]();
            jqWrapper[removedMethod](); // If we need to reattach the table to the document

            if (!remove && orig) {
              // insertBefore acts like appendChild if !arg[1]
              orig.insertBefore(table, settings.nTableReinsertBefore); // Restore the width of the original table - was read from the style property,
              // so we can restore directly to that

              jqTable.css('width', settings.sDestroyWidth).removeClass(classes.sTable); // If the were originally stripe classes - then we add them back here.
              // Note this is not fool proof (for example if not all rows had stripe
              // classes - but it's a good effort without getting carried away

              ien = settings.asDestroyStripes.length;

              if (ien) {
                jqTbody.children().each(function (i) {
                  $(this).addClass(settings.asDestroyStripes[i % ien]);
                });
              }
            }
            /* Remove the settings object from the settings array */


            var idx = $.inArray(settings, DataTable.settings);

            if (idx !== -1) {
              DataTable.settings.splice(idx, 1);
            }
          });
        }); // Add the `every()` method for rows, columns and cells in a compact form


        $.each(['column', 'row', 'cell'], function (i, type) {
          _api_register(type + 's().every()', function (fn) {
            var opts = this.selector.opts;
            var api = this;
            return this.iterator(type, function (settings, arg1, arg2, arg3, arg4) {
              // Rows and columns:
              //  arg1 - index
              //  arg2 - table counter
              //  arg3 - loop counter
              //  arg4 - undefined
              // Cells:
              //  arg1 - row index
              //  arg2 - column index
              //  arg3 - table counter
              //  arg4 - loop counter
              fn.call(api[type](arg1, type === 'cell' ? arg2 : opts, type === 'cell' ? opts : undefined), arg1, arg2, arg3, arg4);
            });
          });
        }); // i18n method for extensions to be able to use the language object from the
        // DataTable

        _api_register('i18n()', function (token, def, plural) {
          var ctx = this.context[0];

          var resolved = _fnGetObjectDataFn(token)(ctx.oLanguage);

          if (resolved === undefined) {
            resolved = def;
          }

          if (plural !== undefined && $.isPlainObject(resolved)) {
            resolved = resolved[plural] !== undefined ? resolved[plural] : resolved._;
          }

          return resolved.replace('%d', plural); // nb: plural might be undefined,
        });
        /**
         * Version string for plug-ins to check compatibility. Allowed format is
         * `a.b.c-d` where: a:int, b:int, c:int, d:string(dev|beta|alpha). `d` is used
         * only for non-release builds. See http://semver.org/ for more information.
         *  @member
         *  @type string
         *  @default Version number
         */


        DataTable.version = "1.10.23";
        /**
         * Private data store, containing all of the settings objects that are
         * created for the tables on a given page.
         *
         * Note that the `DataTable.settings` object is aliased to
         * `jQuery.fn.dataTableExt` through which it may be accessed and
         * manipulated, or `jQuery.fn.dataTable.settings`.
         *  @member
         *  @type array
         *  @default []
         *  @private
         */

        DataTable.settings = [];
        /**
         * Object models container, for the various models that DataTables has
         * available to it. These models define the objects that are used to hold
         * the active state and configuration of the table.
         *  @namespace
         */

        DataTable.models = {};
        /**
         * Template object for the way in which DataTables holds information about
         * search information for the global filter and individual column filters.
         *  @namespace
         */

        DataTable.models.oSearch = {
          /**
           * Flag to indicate if the filtering should be case insensitive or not
           *  @type boolean
           *  @default true
           */
          "bCaseInsensitive": true,

          /**
           * Applied search term
           *  @type string
           *  @default <i>Empty string</i>
           */
          "sSearch": "",

          /**
           * Flag to indicate if the search term should be interpreted as a
           * regular expression (true) or not (false) and therefore and special
           * regex characters escaped.
           *  @type boolean
           *  @default false
           */
          "bRegex": false,

          /**
           * Flag to indicate if DataTables is to use its smart filtering or not.
           *  @type boolean
           *  @default true
           */
          "bSmart": true
        };
        /**
         * Template object for the way in which DataTables holds information about
         * each individual row. This is the object format used for the settings
         * aoData array.
         *  @namespace
         */

        DataTable.models.oRow = {
          /**
           * TR element for the row
           *  @type node
           *  @default null
           */
          "nTr": null,

          /**
           * Array of TD elements for each row. This is null until the row has been
           * created.
           *  @type array nodes
           *  @default []
           */
          "anCells": null,

          /**
           * Data object from the original data source for the row. This is either
           * an array if using the traditional form of DataTables, or an object if
           * using mData options. The exact type will depend on the passed in
           * data from the data source, or will be an array if using DOM a data
           * source.
           *  @type array|object
           *  @default []
           */
          "_aData": [],

          /**
           * Sorting data cache - this array is ostensibly the same length as the
           * number of columns (although each index is generated only as it is
           * needed), and holds the data that is used for sorting each column in the
           * row. We do this cache generation at the start of the sort in order that
           * the formatting of the sort data need be done only once for each cell
           * per sort. This array should not be read from or written to by anything
           * other than the master sorting methods.
           *  @type array
           *  @default null
           *  @private
           */
          "_aSortData": null,

          /**
           * Per cell filtering data cache. As per the sort data cache, used to
           * increase the performance of the filtering in DataTables
           *  @type array
           *  @default null
           *  @private
           */
          "_aFilterData": null,

          /**
           * Filtering data cache. This is the same as the cell filtering cache, but
           * in this case a string rather than an array. This is easily computed with
           * a join on `_aFilterData`, but is provided as a cache so the join isn't
           * needed on every search (memory traded for performance)
           *  @type array
           *  @default null
           *  @private
           */
          "_sFilterRow": null,

          /**
           * Cache of the class name that DataTables has applied to the row, so we
           * can quickly look at this variable rather than needing to do a DOM check
           * on className for the nTr property.
           *  @type string
           *  @default <i>Empty string</i>
           *  @private
           */
          "_sRowStripe": "",

          /**
           * Denote if the original data source was from the DOM, or the data source
           * object. This is used for invalidating data, so DataTables can
           * automatically read data from the original source, unless uninstructed
           * otherwise.
           *  @type string
           *  @default null
           *  @private
           */
          "src": null,

          /**
           * Index in the aoData array. This saves an indexOf lookup when we have the
           * object, but want to know the index
           *  @type integer
           *  @default -1
           *  @private
           */
          "idx": -1
        };
        /**
         * Template object for the column information object in DataTables. This object
         * is held in the settings aoColumns array and contains all the information that
         * DataTables needs about each individual column.
         *
         * Note that this object is related to {@link DataTable.defaults.column}
         * but this one is the internal data store for DataTables's cache of columns.
         * It should NOT be manipulated outside of DataTables. Any configuration should
         * be done through the initialisation options.
         *  @namespace
         */

        DataTable.models.oColumn = {
          /**
           * Column index. This could be worked out on-the-fly with $.inArray, but it
           * is faster to just hold it as a variable
           *  @type integer
           *  @default null
           */
          "idx": null,

          /**
           * A list of the columns that sorting should occur on when this column
           * is sorted. That this property is an array allows multi-column sorting
           * to be defined for a column (for example first name / last name columns
           * would benefit from this). The values are integers pointing to the
           * columns to be sorted on (typically it will be a single integer pointing
           * at itself, but that doesn't need to be the case).
           *  @type array
           */
          "aDataSort": null,

          /**
           * Define the sorting directions that are applied to the column, in sequence
           * as the column is repeatedly sorted upon - i.e. the first value is used
           * as the sorting direction when the column if first sorted (clicked on).
           * Sort it again (click again) and it will move on to the next index.
           * Repeat until loop.
           *  @type array
           */
          "asSorting": null,

          /**
           * Flag to indicate if the column is searchable, and thus should be included
           * in the filtering or not.
           *  @type boolean
           */
          "bSearchable": null,

          /**
           * Flag to indicate if the column is sortable or not.
           *  @type boolean
           */
          "bSortable": null,

          /**
           * Flag to indicate if the column is currently visible in the table or not
           *  @type boolean
           */
          "bVisible": null,

          /**
           * Store for manual type assignment using the `column.type` option. This
           * is held in store so we can manipulate the column's `sType` property.
           *  @type string
           *  @default null
           *  @private
           */
          "_sManualType": null,

          /**
           * Flag to indicate if HTML5 data attributes should be used as the data
           * source for filtering or sorting. True is either are.
           *  @type boolean
           *  @default false
           *  @private
           */
          "_bAttrSrc": false,

          /**
           * Developer definable function that is called whenever a cell is created (Ajax source,
           * etc) or processed for input (DOM source). This can be used as a compliment to mRender
           * allowing you to modify the DOM element (add background colour for example) when the
           * element is available.
           *  @type function
           *  @param {element} nTd The TD node that has been created
           *  @param {*} sData The Data for the cell
           *  @param {array|object} oData The data for the whole row
           *  @param {int} iRow The row index for the aoData data store
           *  @default null
           */
          "fnCreatedCell": null,

          /**
           * Function to get data from a cell in a column. You should <b>never</b>
           * access data directly through _aData internally in DataTables - always use
           * the method attached to this property. It allows mData to function as
           * required. This function is automatically assigned by the column
           * initialisation method
           *  @type function
           *  @param {array|object} oData The data array/object for the array
           *    (i.e. aoData[]._aData)
           *  @param {string} sSpecific The specific data type you want to get -
           *    'display', 'type' 'filter' 'sort'
           *  @returns {*} The data for the cell from the given row's data
           *  @default null
           */
          "fnGetData": null,

          /**
           * Function to set data for a cell in the column. You should <b>never</b>
           * set the data directly to _aData internally in DataTables - always use
           * this method. It allows mData to function as required. This function
           * is automatically assigned by the column initialisation method
           *  @type function
           *  @param {array|object} oData The data array/object for the array
           *    (i.e. aoData[]._aData)
           *  @param {*} sValue Value to set
           *  @default null
           */
          "fnSetData": null,

          /**
           * Property to read the value for the cells in the column from the data
           * source array / object. If null, then the default content is used, if a
           * function is given then the return from the function is used.
           *  @type function|int|string|null
           *  @default null
           */
          "mData": null,

          /**
           * Partner property to mData which is used (only when defined) to get
           * the data - i.e. it is basically the same as mData, but without the
           * 'set' option, and also the data fed to it is the result from mData.
           * This is the rendering method to match the data method of mData.
           *  @type function|int|string|null
           *  @default null
           */
          "mRender": null,

          /**
           * Unique header TH/TD element for this column - this is what the sorting
           * listener is attached to (if sorting is enabled.)
           *  @type node
           *  @default null
           */
          "nTh": null,

          /**
           * Unique footer TH/TD element for this column (if there is one). Not used
           * in DataTables as such, but can be used for plug-ins to reference the
           * footer for each column.
           *  @type node
           *  @default null
           */
          "nTf": null,

          /**
           * The class to apply to all TD elements in the table's TBODY for the column
           *  @type string
           *  @default null
           */
          "sClass": null,

          /**
           * When DataTables calculates the column widths to assign to each column,
           * it finds the longest string in each column and then constructs a
           * temporary table and reads the widths from that. The problem with this
           * is that "mmm" is much wider then "iiii", but the latter is a longer
           * string - thus the calculation can go wrong (doing it properly and putting
           * it into an DOM object and measuring that is horribly(!) slow). Thus as
           * a "work around" we provide this option. It will append its value to the
           * text that is found to be the longest string for the column - i.e. padding.
           *  @type string
           */
          "sContentPadding": null,

          /**
           * Allows a default value to be given for a column's data, and will be used
           * whenever a null data source is encountered (this can be because mData
           * is set to null, or because the data source itself is null).
           *  @type string
           *  @default null
           */
          "sDefaultContent": null,

          /**
           * Name for the column, allowing reference to the column by name as well as
           * by index (needs a lookup to work by name).
           *  @type string
           */
          "sName": null,

          /**
           * Custom sorting data type - defines which of the available plug-ins in
           * afnSortData the custom sorting will use - if any is defined.
           *  @type string
           *  @default std
           */
          "sSortDataType": 'std',

          /**
           * Class to be applied to the header element when sorting on this column
           *  @type string
           *  @default null
           */
          "sSortingClass": null,

          /**
           * Class to be applied to the header element when sorting on this column -
           * when jQuery UI theming is used.
           *  @type string
           *  @default null
           */
          "sSortingClassJUI": null,

          /**
           * Title of the column - what is seen in the TH element (nTh).
           *  @type string
           */
          "sTitle": null,

          /**
           * Column sorting and filtering type
           *  @type string
           *  @default null
           */
          "sType": null,

          /**
           * Width of the column
           *  @type string
           *  @default null
           */
          "sWidth": null,

          /**
           * Width of the column when it was first "encountered"
           *  @type string
           *  @default null
           */
          "sWidthOrig": null
        };
        /*
         * Developer note: The properties of the object below are given in Hungarian
         * notation, that was used as the interface for DataTables prior to v1.10, however
         * from v1.10 onwards the primary interface is camel case. In order to avoid
         * breaking backwards compatibility utterly with this change, the Hungarian
         * version is still, internally the primary interface, but is is not documented
         * - hence the @name tags in each doc comment. This allows a Javascript function
         * to create a map from Hungarian notation to camel case (going the other direction
         * would require each property to be listed, which would add around 3K to the size
         * of DataTables, while this method is about a 0.5K hit).
         *
         * Ultimately this does pave the way for Hungarian notation to be dropped
         * completely, but that is a massive amount of work and will break current
         * installs (therefore is on-hold until v2).
         */

        /**
         * Initialisation options that can be given to DataTables at initialisation
         * time.
         *  @namespace
         */

        DataTable.defaults = {
          /**
           * An array of data to use for the table, passed in at initialisation which
           * will be used in preference to any data which is already in the DOM. This is
           * particularly useful for constructing tables purely in Javascript, for
           * example with a custom Ajax call.
           *  @type array
           *  @default null
           *
           *  @dtopt Option
           *  @name DataTable.defaults.data
           *
           *  @example
           *    // Using a 2D array data source
           *    $(document).ready( function () {
           *      $('#example').dataTable( {
           *        "data": [
           *          ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'],
           *          ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'],
           *        ],
           *        "columns": [
           *          { "title": "Engine" },
           *          { "title": "Browser" },
           *          { "title": "Platform" },
           *          { "title": "Version" },
           *          { "title": "Grade" }
           *        ]
           *      } );
           *    } );
           *
           *  @example
           *    // Using an array of objects as a data source (`data`)
           *    $(document).ready( function () {
           *      $('#example').dataTable( {
           *        "data": [
           *          {
           *            "engine":   "Trident",
           *            "browser":  "Internet Explorer 4.0",
           *            "platform": "Win 95+",
           *            "version":  4,
           *            "grade":    "X"
           *          },
           *          {
           *            "engine":   "Trident",
           *            "browser":  "Internet Explorer 5.0",
           *            "platform": "Win 95+",
           *            "version":  5,
           *            "grade":    "C"
           *          }
           *        ],
           *        "columns": [
           *          { "title": "Engine",   "data": "engine" },
           *          { "title": "Browser",  "data": "browser" },
           *          { "title": "Platform", "data": "platform" },
           *          { "title": "Version",  "data": "version" },
           *          { "title": "Grade",    "data": "grade" }
           *        ]
           *      } );
           *    } );
           */
          "aaData": null,

          /**
           * If ordering is enabled, then DataTables will perform a first pass sort on
           * initialisation. You can define which column(s) the sort is performed
           * upon, and the sorting direction, with this variable. The `sorting` array
           * should contain an array for each column to be sorted initially containing
           * the column's index and a direction string ('asc' or 'desc').
           *  @type array
           *  @default [[0,'asc']]
           *
           *  @dtopt Option
           *  @name DataTable.defaults.order
           *
           *  @example
           *    // Sort by 3rd column first, and then 4th column
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "order": [[2,'asc'], [3,'desc']]
           *      } );
           *    } );
           *
           *    // No initial sorting
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "order": []
           *      } );
           *    } );
           */
          "aaSorting": [[0, 'asc']],

          /**
           * This parameter is basically identical to the `sorting` parameter, but
           * cannot be overridden by user interaction with the table. What this means
           * is that you could have a column (visible or hidden) which the sorting
           * will always be forced on first - any sorting after that (from the user)
           * will then be performed as required. This can be useful for grouping rows
           * together.
           *  @type array
           *  @default null
           *
           *  @dtopt Option
           *  @name DataTable.defaults.orderFixed
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "orderFixed": [[0,'asc']]
           *      } );
           *    } )
           */
          "aaSortingFixed": [],

          /**
           * DataTables can be instructed to load data to display in the table from a
           * Ajax source. This option defines how that Ajax call is made and where to.
           *
           * The `ajax` property has three different modes of operation, depending on
           * how it is defined. These are:
           *
           * * `string` - Set the URL from where the data should be loaded from.
           * * `object` - Define properties for `jQuery.ajax`.
           * * `function` - Custom data get function
           *
           * `string`
           * --------
           *
           * As a string, the `ajax` property simply defines the URL from which
           * DataTables will load data.
           *
           * `object`
           * --------
           *
           * As an object, the parameters in the object are passed to
           * [jQuery.ajax](http://api.jquery.com/jQuery.ajax/) allowing fine control
           * of the Ajax request. DataTables has a number of default parameters which
           * you can override using this option. Please refer to the jQuery
           * documentation for a full description of the options available, although
           * the following parameters provide additional options in DataTables or
           * require special consideration:
           *
           * * `data` - As with jQuery, `data` can be provided as an object, but it
           *   can also be used as a function to manipulate the data DataTables sends
           *   to the server. The function takes a single parameter, an object of
           *   parameters with the values that DataTables has readied for sending. An
           *   object may be returned which will be merged into the DataTables
           *   defaults, or you can add the items to the object that was passed in and
           *   not return anything from the function. This supersedes `fnServerParams`
           *   from DataTables 1.9-.
           *
           * * `dataSrc` - By default DataTables will look for the property `data` (or
           *   `aaData` for compatibility with DataTables 1.9-) when obtaining data
           *   from an Ajax source or for server-side processing - this parameter
           *   allows that property to be changed. You can use Javascript dotted
           *   object notation to get a data source for multiple levels of nesting, or
           *   it my be used as a function. As a function it takes a single parameter,
           *   the JSON returned from the server, which can be manipulated as
           *   required, with the returned value being that used by DataTables as the
           *   data source for the table. This supersedes `sAjaxDataProp` from
           *   DataTables 1.9-.
           *
           * * `success` - Should not be overridden it is used internally in
           *   DataTables. To manipulate / transform the data returned by the server
           *   use `ajax.dataSrc`, or use `ajax` as a function (see below).
           *
           * `function`
           * ----------
           *
           * As a function, making the Ajax call is left up to yourself allowing
           * complete control of the Ajax request. Indeed, if desired, a method other
           * than Ajax could be used to obtain the required data, such as Web storage
           * or an AIR database.
           *
           * The function is given four parameters and no return is required. The
           * parameters are:
           *
           * 1. _object_ - Data to send to the server
           * 2. _function_ - Callback function that must be executed when the required
           *    data has been obtained. That data should be passed into the callback
           *    as the only parameter
           * 3. _object_ - DataTables settings object for the table
           *
           * Note that this supersedes `fnServerData` from DataTables 1.9-.
           *
           *  @type string|object|function
           *  @default null
           *
           *  @dtopt Option
           *  @name DataTable.defaults.ajax
           *  @since 1.10.0
           *
           * @example
           *   // Get JSON data from a file via Ajax.
           *   // Note DataTables expects data in the form `{ data: [ ...data... ] }` by default).
           *   $('#example').dataTable( {
           *     "ajax": "data.json"
           *   } );
           *
           * @example
           *   // Get JSON data from a file via Ajax, using `dataSrc` to change
           *   // `data` to `tableData` (i.e. `{ tableData: [ ...data... ] }`)
           *   $('#example').dataTable( {
           *     "ajax": {
           *       "url": "data.json",
           *       "dataSrc": "tableData"
           *     }
           *   } );
           *
           * @example
           *   // Get JSON data from a file via Ajax, using `dataSrc` to read data
           *   // from a plain array rather than an array in an object
           *   $('#example').dataTable( {
           *     "ajax": {
           *       "url": "data.json",
           *       "dataSrc": ""
           *     }
           *   } );
           *
           * @example
           *   // Manipulate the data returned from the server - add a link to data
           *   // (note this can, should, be done using `render` for the column - this
           *   // is just a simple example of how the data can be manipulated).
           *   $('#example').dataTable( {
           *     "ajax": {
           *       "url": "data.json",
           *       "dataSrc": function ( json ) {
           *         for ( var i=0, ien=json.length ; i<ien ; i++ ) {
           *           json[i][0] = '<a href="/message/'+json[i][0]+'>View message</a>';
           *         }
           *         return json;
           *       }
           *     }
           *   } );
           *
           * @example
           *   // Add data to the request
           *   $('#example').dataTable( {
           *     "ajax": {
           *       "url": "data.json",
           *       "data": function ( d ) {
           *         return {
           *           "extra_search": $('#extra').val()
           *         };
           *       }
           *     }
           *   } );
           *
           * @example
           *   // Send request as POST
           *   $('#example').dataTable( {
           *     "ajax": {
           *       "url": "data.json",
           *       "type": "POST"
           *     }
           *   } );
           *
           * @example
           *   // Get the data from localStorage (could interface with a form for
           *   // adding, editing and removing rows).
           *   $('#example').dataTable( {
           *     "ajax": function (data, callback, settings) {
           *       callback(
           *         JSON.parse( localStorage.getItem('dataTablesData') )
           *       );
           *     }
           *   } );
           */
          "ajax": null,

          /**
           * This parameter allows you to readily specify the entries in the length drop
           * down menu that DataTables shows when pagination is enabled. It can be
           * either a 1D array of options which will be used for both the displayed
           * option and the value, or a 2D array which will use the array in the first
           * position as the value, and the array in the second position as the
           * displayed options (useful for language strings such as 'All').
           *
           * Note that the `pageLength` property will be automatically set to the
           * first value given in this array, unless `pageLength` is also provided.
           *  @type array
           *  @default [ 10, 25, 50, 100 ]
           *
           *  @dtopt Option
           *  @name DataTable.defaults.lengthMenu
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "lengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]]
           *      } );
           *    } );
           */
          "aLengthMenu": [10, 25, 50, 100],

          /**
           * The `columns` option in the initialisation parameter allows you to define
           * details about the way individual columns behave. For a full list of
           * column options that can be set, please see
           * {@link DataTable.defaults.column}. Note that if you use `columns` to
           * define your columns, you must have an entry in the array for every single
           * column that you have in your table (these can be null if you don't which
           * to specify any options).
           *  @member
           *
           *  @name DataTable.defaults.column
           */
          "aoColumns": null,

          /**
           * Very similar to `columns`, `columnDefs` allows you to target a specific
           * column, multiple columns, or all columns, using the `targets` property of
           * each object in the array. This allows great flexibility when creating
           * tables, as the `columnDefs` arrays can be of any length, targeting the
           * columns you specifically want. `columnDefs` may use any of the column
           * options available: {@link DataTable.defaults.column}, but it _must_
           * have `targets` defined in each object in the array. Values in the `targets`
           * array may be:
           *   <ul>
           *     <li>a string - class name will be matched on the TH for the column</li>
           *     <li>0 or a positive integer - column index counting from the left</li>
           *     <li>a negative integer - column index counting from the right</li>
           *     <li>the string "_all" - all columns (i.e. assign a default)</li>
           *   </ul>
           *  @member
           *
           *  @name DataTable.defaults.columnDefs
           */
          "aoColumnDefs": null,

          /**
           * Basically the same as `search`, this parameter defines the individual column
           * filtering state at initialisation time. The array must be of the same size
           * as the number of columns, and each element be an object with the parameters
           * `search` and `escapeRegex` (the latter is optional). 'null' is also
           * accepted and the default will be used.
           *  @type array
           *  @default []
           *
           *  @dtopt Option
           *  @name DataTable.defaults.searchCols
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "searchCols": [
           *          null,
           *          { "search": "My filter" },
           *          null,
           *          { "search": "^[0-9]", "escapeRegex": false }
           *        ]
           *      } );
           *    } )
           */
          "aoSearchCols": [],

          /**
           * An array of CSS classes that should be applied to displayed rows. This
           * array may be of any length, and DataTables will apply each class
           * sequentially, looping when required.
           *  @type array
           *  @default null <i>Will take the values determined by the `oClasses.stripe*`
           *    options</i>
           *
           *  @dtopt Option
           *  @name DataTable.defaults.stripeClasses
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "stripeClasses": [ 'strip1', 'strip2', 'strip3' ]
           *      } );
           *    } )
           */
          "asStripeClasses": null,

          /**
           * Enable or disable automatic column width calculation. This can be disabled
           * as an optimisation (it takes some time to calculate the widths) if the
           * tables widths are passed in using `columns`.
           *  @type boolean
           *  @default true
           *
           *  @dtopt Features
           *  @name DataTable.defaults.autoWidth
           *
           *  @example
           *    $(document).ready( function () {
           *      $('#example').dataTable( {
           *        "autoWidth": false
           *      } );
           *    } );
           */
          "bAutoWidth": true,

          /**
           * Deferred rendering can provide DataTables with a huge speed boost when you
           * are using an Ajax or JS data source for the table. This option, when set to
           * true, will cause DataTables to defer the creation of the table elements for
           * each row until they are needed for a draw - saving a significant amount of
           * time.
           *  @type boolean
           *  @default false
           *
           *  @dtopt Features
           *  @name DataTable.defaults.deferRender
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "ajax": "sources/arrays.txt",
           *        "deferRender": true
           *      } );
           *    } );
           */
          "bDeferRender": false,

          /**
           * Replace a DataTable which matches the given selector and replace it with
           * one which has the properties of the new initialisation object passed. If no
           * table matches the selector, then the new DataTable will be constructed as
           * per normal.
           *  @type boolean
           *  @default false
           *
           *  @dtopt Options
           *  @name DataTable.defaults.destroy
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "srollY": "200px",
           *        "paginate": false
           *      } );
           *
           *      // Some time later....
           *      $('#example').dataTable( {
           *        "filter": false,
           *        "destroy": true
           *      } );
           *    } );
           */
          "bDestroy": false,

          /**
           * Enable or disable filtering of data. Filtering in DataTables is "smart" in
           * that it allows the end user to input multiple words (space separated) and
           * will match a row containing those words, even if not in the order that was
           * specified (this allow matching across multiple columns). Note that if you
           * wish to use filtering in DataTables this must remain 'true' - to remove the
           * default filtering input box and retain filtering abilities, please use
           * {@link DataTable.defaults.dom}.
           *  @type boolean
           *  @default true
           *
           *  @dtopt Features
           *  @name DataTable.defaults.searching
           *
           *  @example
           *    $(document).ready( function () {
           *      $('#example').dataTable( {
           *        "searching": false
           *      } );
           *    } );
           */
          "bFilter": true,

          /**
           * Enable or disable the table information display. This shows information
           * about the data that is currently visible on the page, including information
           * about filtered data if that action is being performed.
           *  @type boolean
           *  @default true
           *
           *  @dtopt Features
           *  @name DataTable.defaults.info
           *
           *  @example
           *    $(document).ready( function () {
           *      $('#example').dataTable( {
           *        "info": false
           *      } );
           *    } );
           */
          "bInfo": true,

          /**
           * Allows the end user to select the size of a formatted page from a select
           * menu (sizes are 10, 25, 50 and 100). Requires pagination (`paginate`).
           *  @type boolean
           *  @default true
           *
           *  @dtopt Features
           *  @name DataTable.defaults.lengthChange
           *
           *  @example
           *    $(document).ready( function () {
           *      $('#example').dataTable( {
           *        "lengthChange": false
           *      } );
           *    } );
           */
          "bLengthChange": true,

          /**
           * Enable or disable pagination.
           *  @type boolean
           *  @default true
           *
           *  @dtopt Features
           *  @name DataTable.defaults.paging
           *
           *  @example
           *    $(document).ready( function () {
           *      $('#example').dataTable( {
           *        "paging": false
           *      } );
           *    } );
           */
          "bPaginate": true,

          /**
           * Enable or disable the display of a 'processing' indicator when the table is
           * being processed (e.g. a sort). This is particularly useful for tables with
           * large amounts of data where it can take a noticeable amount of time to sort
           * the entries.
           *  @type boolean
           *  @default false
           *
           *  @dtopt Features
           *  @name DataTable.defaults.processing
           *
           *  @example
           *    $(document).ready( function () {
           *      $('#example').dataTable( {
           *        "processing": true
           *      } );
           *    } );
           */
          "bProcessing": false,

          /**
           * Retrieve the DataTables object for the given selector. Note that if the
           * table has already been initialised, this parameter will cause DataTables
           * to simply return the object that has already been set up - it will not take
           * account of any changes you might have made to the initialisation object
           * passed to DataTables (setting this parameter to true is an acknowledgement
           * that you understand this). `destroy` can be used to reinitialise a table if
           * you need.
           *  @type boolean
           *  @default false
           *
           *  @dtopt Options
           *  @name DataTable.defaults.retrieve
           *
           *  @example
           *    $(document).ready( function() {
           *      initTable();
           *      tableActions();
           *    } );
           *
           *    function initTable ()
           *    {
           *      return $('#example').dataTable( {
           *        "scrollY": "200px",
           *        "paginate": false,
           *        "retrieve": true
           *      } );
           *    }
           *
           *    function tableActions ()
           *    {
           *      var table = initTable();
           *      // perform API operations with oTable
           *    }
           */
          "bRetrieve": false,

          /**
           * When vertical (y) scrolling is enabled, DataTables will force the height of
           * the table's viewport to the given height at all times (useful for layout).
           * However, this can look odd when filtering data down to a small data set,
           * and the footer is left "floating" further down. This parameter (when
           * enabled) will cause DataTables to collapse the table's viewport down when
           * the result set will fit within the given Y height.
           *  @type boolean
           *  @default false
           *
           *  @dtopt Options
           *  @name DataTable.defaults.scrollCollapse
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "scrollY": "200",
           *        "scrollCollapse": true
           *      } );
           *    } );
           */
          "bScrollCollapse": false,

          /**
           * Configure DataTables to use server-side processing. Note that the
           * `ajax` parameter must also be given in order to give DataTables a
           * source to obtain the required data for each draw.
           *  @type boolean
           *  @default false
           *
           *  @dtopt Features
           *  @dtopt Server-side
           *  @name DataTable.defaults.serverSide
           *
           *  @example
           *    $(document).ready( function () {
           *      $('#example').dataTable( {
           *        "serverSide": true,
           *        "ajax": "xhr.php"
           *      } );
           *    } );
           */
          "bServerSide": false,

          /**
           * Enable or disable sorting of columns. Sorting of individual columns can be
           * disabled by the `sortable` option for each column.
           *  @type boolean
           *  @default true
           *
           *  @dtopt Features
           *  @name DataTable.defaults.ordering
           *
           *  @example
           *    $(document).ready( function () {
           *      $('#example').dataTable( {
           *        "ordering": false
           *      } );
           *    } );
           */
          "bSort": true,

          /**
           * Enable or display DataTables' ability to sort multiple columns at the
           * same time (activated by shift-click by the user).
           *  @type boolean
           *  @default true
           *
           *  @dtopt Options
           *  @name DataTable.defaults.orderMulti
           *
           *  @example
           *    // Disable multiple column sorting ability
           *    $(document).ready( function () {
           *      $('#example').dataTable( {
           *        "orderMulti": false
           *      } );
           *    } );
           */
          "bSortMulti": true,

          /**
           * Allows control over whether DataTables should use the top (true) unique
           * cell that is found for a single column, or the bottom (false - default).
           * This is useful when using complex headers.
           *  @type boolean
           *  @default false
           *
           *  @dtopt Options
           *  @name DataTable.defaults.orderCellsTop
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "orderCellsTop": true
           *      } );
           *    } );
           */
          "bSortCellsTop": false,

          /**
           * Enable or disable the addition of the classes `sorting\_1`, `sorting\_2` and
           * `sorting\_3` to the columns which are currently being sorted on. This is
           * presented as a feature switch as it can increase processing time (while
           * classes are removed and added) so for large data sets you might want to
           * turn this off.
           *  @type boolean
           *  @default true
           *
           *  @dtopt Features
           *  @name DataTable.defaults.orderClasses
           *
           *  @example
           *    $(document).ready( function () {
           *      $('#example').dataTable( {
           *        "orderClasses": false
           *      } );
           *    } );
           */
          "bSortClasses": true,

          /**
           * Enable or disable state saving. When enabled HTML5 `localStorage` will be
           * used to save table display information such as pagination information,
           * display length, filtering and sorting. As such when the end user reloads
           * the page the display display will match what thy had previously set up.
           *
           * Due to the use of `localStorage` the default state saving is not supported
           * in IE6 or 7. If state saving is required in those browsers, use
           * `stateSaveCallback` to provide a storage solution such as cookies.
           *  @type boolean
           *  @default false
           *
           *  @dtopt Features
           *  @name DataTable.defaults.stateSave
           *
           *  @example
           *    $(document).ready( function () {
           *      $('#example').dataTable( {
           *        "stateSave": true
           *      } );
           *    } );
           */
          "bStateSave": false,

          /**
           * This function is called when a TR element is created (and all TD child
           * elements have been inserted), or registered if using a DOM source, allowing
           * manipulation of the TR element (adding classes etc).
           *  @type function
           *  @param {node} row "TR" element for the current row
           *  @param {array} data Raw data array for this row
           *  @param {int} dataIndex The index of this row in the internal aoData array
           *
           *  @dtopt Callbacks
           *  @name DataTable.defaults.createdRow
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "createdRow": function( row, data, dataIndex ) {
           *          // Bold the grade for all 'A' grade browsers
           *          if ( data[4] == "A" )
           *          {
           *            $('td:eq(4)', row).html( '<b>A</b>' );
           *          }
           *        }
           *      } );
           *    } );
           */
          "fnCreatedRow": null,

          /**
           * This function is called on every 'draw' event, and allows you to
           * dynamically modify any aspect you want about the created DOM.
           *  @type function
           *  @param {object} settings DataTables settings object
           *
           *  @dtopt Callbacks
           *  @name DataTable.defaults.drawCallback
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "drawCallback": function( settings ) {
           *          alert( 'DataTables has redrawn the table' );
           *        }
           *      } );
           *    } );
           */
          "fnDrawCallback": null,

          /**
           * Identical to fnHeaderCallback() but for the table footer this function
           * allows you to modify the table footer on every 'draw' event.
           *  @type function
           *  @param {node} foot "TR" element for the footer
           *  @param {array} data Full table data (as derived from the original HTML)
           *  @param {int} start Index for the current display starting point in the
           *    display array
           *  @param {int} end Index for the current display ending point in the
           *    display array
           *  @param {array int} display Index array to translate the visual position
           *    to the full data array
           *
           *  @dtopt Callbacks
           *  @name DataTable.defaults.footerCallback
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "footerCallback": function( tfoot, data, start, end, display ) {
           *          tfoot.getElementsByTagName('th')[0].innerHTML = "Starting index is "+start;
           *        }
           *      } );
           *    } )
           */
          "fnFooterCallback": null,

          /**
           * When rendering large numbers in the information element for the table
           * (i.e. "Showing 1 to 10 of 57 entries") DataTables will render large numbers
           * to have a comma separator for the 'thousands' units (e.g. 1 million is
           * rendered as "1,000,000") to help readability for the end user. This
           * function will override the default method DataTables uses.
           *  @type function
           *  @member
           *  @param {int} toFormat number to be formatted
           *  @returns {string} formatted string for DataTables to show the number
           *
           *  @dtopt Callbacks
           *  @name DataTable.defaults.formatNumber
           *
           *  @example
           *    // Format a number using a single quote for the separator (note that
           *    // this can also be done with the language.thousands option)
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "formatNumber": function ( toFormat ) {
           *          return toFormat.toString().replace(
           *            /\B(?=(\d{3})+(?!\d))/g, "'"
           *          );
           *        };
           *      } );
           *    } );
           */
          "fnFormatNumber": function fnFormatNumber(toFormat) {
            return toFormat.toString().replace(/\B(?=(\d{3})+(?!\d))/g, this.oLanguage.sThousands);
          },

          /**
           * This function is called on every 'draw' event, and allows you to
           * dynamically modify the header row. This can be used to calculate and
           * display useful information about the table.
           *  @type function
           *  @param {node} head "TR" element for the header
           *  @param {array} data Full table data (as derived from the original HTML)
           *  @param {int} start Index for the current display starting point in the
           *    display array
           *  @param {int} end Index for the current display ending point in the
           *    display array
           *  @param {array int} display Index array to translate the visual position
           *    to the full data array
           *
           *  @dtopt Callbacks
           *  @name DataTable.defaults.headerCallback
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "fheaderCallback": function( head, data, start, end, display ) {
           *          head.getElementsByTagName('th')[0].innerHTML = "Displaying "+(end-start)+" records";
           *        }
           *      } );
           *    } )
           */
          "fnHeaderCallback": null,

          /**
           * The information element can be used to convey information about the current
           * state of the table. Although the internationalisation options presented by
           * DataTables are quite capable of dealing with most customisations, there may
           * be times where you wish to customise the string further. This callback
           * allows you to do exactly that.
           *  @type function
           *  @param {object} oSettings DataTables settings object
           *  @param {int} start Starting position in data for the draw
           *  @param {int} end End position in data for the draw
           *  @param {int} max Total number of rows in the table (regardless of
           *    filtering)
           *  @param {int} total Total number of rows in the data set, after filtering
           *  @param {string} pre The string that DataTables has formatted using it's
           *    own rules
           *  @returns {string} The string to be displayed in the information element.
           *
           *  @dtopt Callbacks
           *  @name DataTable.defaults.infoCallback
           *
           *  @example
           *    $('#example').dataTable( {
           *      "infoCallback": function( settings, start, end, max, total, pre ) {
           *        return start +" to "+ end;
           *      }
           *    } );
           */
          "fnInfoCallback": null,

          /**
           * Called when the table has been initialised. Normally DataTables will
           * initialise sequentially and there will be no need for this function,
           * however, this does not hold true when using external language information
           * since that is obtained using an async XHR call.
           *  @type function
           *  @param {object} settings DataTables settings object
           *  @param {object} json The JSON object request from the server - only
           *    present if client-side Ajax sourced data is used
           *
           *  @dtopt Callbacks
           *  @name DataTable.defaults.initComplete
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "initComplete": function(settings, json) {
           *          alert( 'DataTables has finished its initialisation.' );
           *        }
           *      } );
           *    } )
           */
          "fnInitComplete": null,

          /**
           * Called at the very start of each table draw and can be used to cancel the
           * draw by returning false, any other return (including undefined) results in
           * the full draw occurring).
           *  @type function
           *  @param {object} settings DataTables settings object
           *  @returns {boolean} False will cancel the draw, anything else (including no
           *    return) will allow it to complete.
           *
           *  @dtopt Callbacks
           *  @name DataTable.defaults.preDrawCallback
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "preDrawCallback": function( settings ) {
           *          if ( $('#test').val() == 1 ) {
           *            return false;
           *          }
           *        }
           *      } );
           *    } );
           */
          "fnPreDrawCallback": null,

          /**
           * This function allows you to 'post process' each row after it have been
           * generated for each table draw, but before it is rendered on screen. This
           * function might be used for setting the row class name etc.
           *  @type function
           *  @param {node} row "TR" element for the current row
           *  @param {array} data Raw data array for this row
           *  @param {int} displayIndex The display index for the current table draw
           *  @param {int} displayIndexFull The index of the data in the full list of
           *    rows (after filtering)
           *
           *  @dtopt Callbacks
           *  @name DataTable.defaults.rowCallback
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "rowCallback": function( row, data, displayIndex, displayIndexFull ) {
           *          // Bold the grade for all 'A' grade browsers
           *          if ( data[4] == "A" ) {
           *            $('td:eq(4)', row).html( '<b>A</b>' );
           *          }
           *        }
           *      } );
           *    } );
           */
          "fnRowCallback": null,

          /**
           * __Deprecated__ The functionality provided by this parameter has now been
           * superseded by that provided through `ajax`, which should be used instead.
           *
           * This parameter allows you to override the default function which obtains
           * the data from the server so something more suitable for your application.
           * For example you could use POST data, or pull information from a Gears or
           * AIR database.
           *  @type function
           *  @member
           *  @param {string} source HTTP source to obtain the data from (`ajax`)
           *  @param {array} data A key/value pair object containing the data to send
           *    to the server
           *  @param {function} callback to be called on completion of the data get
           *    process that will draw the data on the page.
           *  @param {object} settings DataTables settings object
           *
           *  @dtopt Callbacks
           *  @dtopt Server-side
           *  @name DataTable.defaults.serverData
           *
           *  @deprecated 1.10. Please use `ajax` for this functionality now.
           */
          "fnServerData": null,

          /**
           * __Deprecated__ The functionality provided by this parameter has now been
           * superseded by that provided through `ajax`, which should be used instead.
           *
           *  It is often useful to send extra data to the server when making an Ajax
           * request - for example custom filtering information, and this callback
           * function makes it trivial to send extra information to the server. The
           * passed in parameter is the data set that has been constructed by
           * DataTables, and you can add to this or modify it as you require.
           *  @type function
           *  @param {array} data Data array (array of objects which are name/value
           *    pairs) that has been constructed by DataTables and will be sent to the
           *    server. In the case of Ajax sourced data with server-side processing
           *    this will be an empty array, for server-side processing there will be a
           *    significant number of parameters!
           *  @returns {undefined} Ensure that you modify the data array passed in,
           *    as this is passed by reference.
           *
           *  @dtopt Callbacks
           *  @dtopt Server-side
           *  @name DataTable.defaults.serverParams
           *
           *  @deprecated 1.10. Please use `ajax` for this functionality now.
           */
          "fnServerParams": null,

          /**
           * Load the table state. With this function you can define from where, and how, the
           * state of a table is loaded. By default DataTables will load from `localStorage`
           * but you might wish to use a server-side database or cookies.
           *  @type function
           *  @member
           *  @param {object} settings DataTables settings object
           *  @param {object} callback Callback that can be executed when done. It
           *    should be passed the loaded state object.
           *  @return {object} The DataTables state object to be loaded
           *
           *  @dtopt Callbacks
           *  @name DataTable.defaults.stateLoadCallback
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "stateSave": true,
           *        "stateLoadCallback": function (settings, callback) {
           *          $.ajax( {
           *            "url": "/state_load",
           *            "dataType": "json",
           *            "success": function (json) {
           *              callback( json );
           *            }
           *          } );
           *        }
           *      } );
           *    } );
           */
          "fnStateLoadCallback": function fnStateLoadCallback(settings) {
            try {
              return JSON.parse((settings.iStateDuration === -1 ? sessionStorage : localStorage).getItem('DataTables_' + settings.sInstance + '_' + location.pathname));
            } catch (e) {
              return {};
            }
          },

          /**
           * Callback which allows modification of the saved state prior to loading that state.
           * This callback is called when the table is loading state from the stored data, but
           * prior to the settings object being modified by the saved state. Note that for
           * plug-in authors, you should use the `stateLoadParams` event to load parameters for
           * a plug-in.
           *  @type function
           *  @param {object} settings DataTables settings object
           *  @param {object} data The state object that is to be loaded
           *
           *  @dtopt Callbacks
           *  @name DataTable.defaults.stateLoadParams
           *
           *  @example
           *    // Remove a saved filter, so filtering is never loaded
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "stateSave": true,
           *        "stateLoadParams": function (settings, data) {
           *          data.oSearch.sSearch = "";
           *        }
           *      } );
           *    } );
           *
           *  @example
           *    // Disallow state loading by returning false
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "stateSave": true,
           *        "stateLoadParams": function (settings, data) {
           *          return false;
           *        }
           *      } );
           *    } );
           */
          "fnStateLoadParams": null,

          /**
           * Callback that is called when the state has been loaded from the state saving method
           * and the DataTables settings object has been modified as a result of the loaded state.
           *  @type function
           *  @param {object} settings DataTables settings object
           *  @param {object} data The state object that was loaded
           *
           *  @dtopt Callbacks
           *  @name DataTable.defaults.stateLoaded
           *
           *  @example
           *    // Show an alert with the filtering value that was saved
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "stateSave": true,
           *        "stateLoaded": function (settings, data) {
           *          alert( 'Saved filter was: '+data.oSearch.sSearch );
           *        }
           *      } );
           *    } );
           */
          "fnStateLoaded": null,

          /**
           * Save the table state. This function allows you to define where and how the state
           * information for the table is stored By default DataTables will use `localStorage`
           * but you might wish to use a server-side database or cookies.
           *  @type function
           *  @member
           *  @param {object} settings DataTables settings object
           *  @param {object} data The state object to be saved
           *
           *  @dtopt Callbacks
           *  @name DataTable.defaults.stateSaveCallback
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "stateSave": true,
           *        "stateSaveCallback": function (settings, data) {
           *          // Send an Ajax request to the server with the state object
           *          $.ajax( {
           *            "url": "/state_save",
           *            "data": data,
           *            "dataType": "json",
           *            "method": "POST"
           *            "success": function () {}
           *          } );
           *        }
           *      } );
           *    } );
           */
          "fnStateSaveCallback": function fnStateSaveCallback(settings, data) {
            try {
              (settings.iStateDuration === -1 ? sessionStorage : localStorage).setItem('DataTables_' + settings.sInstance + '_' + location.pathname, JSON.stringify(data));
            } catch (e) {}
          },

          /**
           * Callback which allows modification of the state to be saved. Called when the table
           * has changed state a new state save is required. This method allows modification of
           * the state saving object prior to actually doing the save, including addition or
           * other state properties or modification. Note that for plug-in authors, you should
           * use the `stateSaveParams` event to save parameters for a plug-in.
           *  @type function
           *  @param {object} settings DataTables settings object
           *  @param {object} data The state object to be saved
           *
           *  @dtopt Callbacks
           *  @name DataTable.defaults.stateSaveParams
           *
           *  @example
           *    // Remove a saved filter, so filtering is never saved
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "stateSave": true,
           *        "stateSaveParams": function (settings, data) {
           *          data.oSearch.sSearch = "";
           *        }
           *      } );
           *    } );
           */
          "fnStateSaveParams": null,

          /**
           * Duration for which the saved state information is considered valid. After this period
           * has elapsed the state will be returned to the default.
           * Value is given in seconds.
           *  @type int
           *  @default 7200 <i>(2 hours)</i>
           *
           *  @dtopt Options
           *  @name DataTable.defaults.stateDuration
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "stateDuration": 60*60*24; // 1 day
           *      } );
           *    } )
           */
          "iStateDuration": 7200,

          /**
           * When enabled DataTables will not make a request to the server for the first
           * page draw - rather it will use the data already on the page (no sorting etc
           * will be applied to it), thus saving on an XHR at load time. `deferLoading`
           * is used to indicate that deferred loading is required, but it is also used
           * to tell DataTables how many records there are in the full table (allowing
           * the information element and pagination to be displayed correctly). In the case
           * where a filtering is applied to the table on initial load, this can be
           * indicated by giving the parameter as an array, where the first element is
           * the number of records available after filtering and the second element is the
           * number of records without filtering (allowing the table information element
           * to be shown correctly).
           *  @type int | array
           *  @default null
           *
           *  @dtopt Options
           *  @name DataTable.defaults.deferLoading
           *
           *  @example
           *    // 57 records available in the table, no filtering applied
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "serverSide": true,
           *        "ajax": "scripts/server_processing.php",
           *        "deferLoading": 57
           *      } );
           *    } );
           *
           *  @example
           *    // 57 records after filtering, 100 without filtering (an initial filter applied)
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "serverSide": true,
           *        "ajax": "scripts/server_processing.php",
           *        "deferLoading": [ 57, 100 ],
           *        "search": {
           *          "search": "my_filter"
           *        }
           *      } );
           *    } );
           */
          "iDeferLoading": null,

          /**
           * Number of rows to display on a single page when using pagination. If
           * feature enabled (`lengthChange`) then the end user will be able to override
           * this to a custom setting using a pop-up menu.
           *  @type int
           *  @default 10
           *
           *  @dtopt Options
           *  @name DataTable.defaults.pageLength
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "pageLength": 50
           *      } );
           *    } )
           */
          "iDisplayLength": 10,

          /**
           * Define the starting point for data display when using DataTables with
           * pagination. Note that this parameter is the number of records, rather than
           * the page number, so if you have 10 records per page and want to start on
           * the third page, it should be "20".
           *  @type int
           *  @default 0
           *
           *  @dtopt Options
           *  @name DataTable.defaults.displayStart
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "displayStart": 20
           *      } );
           *    } )
           */
          "iDisplayStart": 0,

          /**
           * By default DataTables allows keyboard navigation of the table (sorting, paging,
           * and filtering) by adding a `tabindex` attribute to the required elements. This
           * allows you to tab through the controls and press the enter key to activate them.
           * The tabindex is default 0, meaning that the tab follows the flow of the document.
           * You can overrule this using this parameter if you wish. Use a value of -1 to
           * disable built-in keyboard navigation.
           *  @type int
           *  @default 0
           *
           *  @dtopt Options
           *  @name DataTable.defaults.tabIndex
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "tabIndex": 1
           *      } );
           *    } );
           */
          "iTabIndex": 0,

          /**
           * Classes that DataTables assigns to the various components and features
           * that it adds to the HTML table. This allows classes to be configured
           * during initialisation in addition to through the static
           * {@link DataTable.ext.oStdClasses} object).
           *  @namespace
           *  @name DataTable.defaults.classes
           */
          "oClasses": {},

          /**
           * All strings that DataTables uses in the user interface that it creates
           * are defined in this object, allowing you to modified them individually or
           * completely replace them all as required.
           *  @namespace
           *  @name DataTable.defaults.language
           */
          "oLanguage": {
            /**
             * Strings that are used for WAI-ARIA labels and controls only (these are not
             * actually visible on the page, but will be read by screenreaders, and thus
             * must be internationalised as well).
             *  @namespace
             *  @name DataTable.defaults.language.aria
             */
            "oAria": {
              /**
               * ARIA label that is added to the table headers when the column may be
               * sorted ascending by activing the column (click or return when focused).
               * Note that the column header is prefixed to this string.
               *  @type string
               *  @default : activate to sort column ascending
               *
               *  @dtopt Language
               *  @name DataTable.defaults.language.aria.sortAscending
               *
               *  @example
               *    $(document).ready( function() {
               *      $('#example').dataTable( {
               *        "language": {
               *          "aria": {
               *            "sortAscending": " - click/return to sort ascending"
               *          }
               *        }
               *      } );
               *    } );
               */
              "sSortAscending": ": activate to sort column ascending",

              /**
               * ARIA label that is added to the table headers when the column may be
               * sorted descending by activing the column (click or return when focused).
               * Note that the column header is prefixed to this string.
               *  @type string
               *  @default : activate to sort column ascending
               *
               *  @dtopt Language
               *  @name DataTable.defaults.language.aria.sortDescending
               *
               *  @example
               *    $(document).ready( function() {
               *      $('#example').dataTable( {
               *        "language": {
               *          "aria": {
               *            "sortDescending": " - click/return to sort descending"
               *          }
               *        }
               *      } );
               *    } );
               */
              "sSortDescending": ": activate to sort column descending"
            },

            /**
             * Pagination string used by DataTables for the built-in pagination
             * control types.
             *  @namespace
             *  @name DataTable.defaults.language.paginate
             */
            "oPaginate": {
              /**
               * Text to use when using the 'full_numbers' type of pagination for the
               * button to take the user to the first page.
               *  @type string
               *  @default First
               *
               *  @dtopt Language
               *  @name DataTable.defaults.language.paginate.first
               *
               *  @example
               *    $(document).ready( function() {
               *      $('#example').dataTable( {
               *        "language": {
               *          "paginate": {
               *            "first": "First page"
               *          }
               *        }
               *      } );
               *    } );
               */
              "sFirst": "First",

              /**
               * Text to use when using the 'full_numbers' type of pagination for the
               * button to take the user to the last page.
               *  @type string
               *  @default Last
               *
               *  @dtopt Language
               *  @name DataTable.defaults.language.paginate.last
               *
               *  @example
               *    $(document).ready( function() {
               *      $('#example').dataTable( {
               *        "language": {
               *          "paginate": {
               *            "last": "Last page"
               *          }
               *        }
               *      } );
               *    } );
               */
              "sLast": "Last",

              /**
               * Text to use for the 'next' pagination button (to take the user to the
               * next page).
               *  @type string
               *  @default Next
               *
               *  @dtopt Language
               *  @name DataTable.defaults.language.paginate.next
               *
               *  @example
               *    $(document).ready( function() {
               *      $('#example').dataTable( {
               *        "language": {
               *          "paginate": {
               *            "next": "Next page"
               *          }
               *        }
               *      } );
               *    } );
               */
              "sNext": "Next",

              /**
               * Text to use for the 'previous' pagination button (to take the user to
               * the previous page).
               *  @type string
               *  @default Previous
               *
               *  @dtopt Language
               *  @name DataTable.defaults.language.paginate.previous
               *
               *  @example
               *    $(document).ready( function() {
               *      $('#example').dataTable( {
               *        "language": {
               *          "paginate": {
               *            "previous": "Previous page"
               *          }
               *        }
               *      } );
               *    } );
               */
              "sPrevious": "Previous"
            },

            /**
             * This string is shown in preference to `zeroRecords` when the table is
             * empty of data (regardless of filtering). Note that this is an optional
             * parameter - if it is not given, the value of `zeroRecords` will be used
             * instead (either the default or given value).
             *  @type string
             *  @default No data available in table
             *
             *  @dtopt Language
             *  @name DataTable.defaults.language.emptyTable
             *
             *  @example
             *    $(document).ready( function() {
             *      $('#example').dataTable( {
             *        "language": {
             *          "emptyTable": "No data available in table"
             *        }
             *      } );
             *    } );
             */
            "sEmptyTable": "No data available in table",

            /**
             * This string gives information to the end user about the information
             * that is current on display on the page. The following tokens can be
             * used in the string and will be dynamically replaced as the table
             * display updates. This tokens can be placed anywhere in the string, or
             * removed as needed by the language requires:
             *
             * * `\_START\_` - Display index of the first record on the current page
             * * `\_END\_` - Display index of the last record on the current page
             * * `\_TOTAL\_` - Number of records in the table after filtering
             * * `\_MAX\_` - Number of records in the table without filtering
             * * `\_PAGE\_` - Current page number
             * * `\_PAGES\_` - Total number of pages of data in the table
             *
             *  @type string
             *  @default Showing _START_ to _END_ of _TOTAL_ entries
             *
             *  @dtopt Language
             *  @name DataTable.defaults.language.info
             *
             *  @example
             *    $(document).ready( function() {
             *      $('#example').dataTable( {
             *        "language": {
             *          "info": "Showing page _PAGE_ of _PAGES_"
             *        }
             *      } );
             *    } );
             */
            "sInfo": "Showing _START_ to _END_ of _TOTAL_ entries",

            /**
             * Display information string for when the table is empty. Typically the
             * format of this string should match `info`.
             *  @type string
             *  @default Showing 0 to 0 of 0 entries
             *
             *  @dtopt Language
             *  @name DataTable.defaults.language.infoEmpty
             *
             *  @example
             *    $(document).ready( function() {
             *      $('#example').dataTable( {
             *        "language": {
             *          "infoEmpty": "No entries to show"
             *        }
             *      } );
             *    } );
             */
            "sInfoEmpty": "Showing 0 to 0 of 0 entries",

            /**
             * When a user filters the information in a table, this string is appended
             * to the information (`info`) to give an idea of how strong the filtering
             * is. The variable _MAX_ is dynamically updated.
             *  @type string
             *  @default (filtered from _MAX_ total entries)
             *
             *  @dtopt Language
             *  @name DataTable.defaults.language.infoFiltered
             *
             *  @example
             *    $(document).ready( function() {
             *      $('#example').dataTable( {
             *        "language": {
             *          "infoFiltered": " - filtering from _MAX_ records"
             *        }
             *      } );
             *    } );
             */
            "sInfoFiltered": "(filtered from _MAX_ total entries)",

            /**
             * If can be useful to append extra information to the info string at times,
             * and this variable does exactly that. This information will be appended to
             * the `info` (`infoEmpty` and `infoFiltered` in whatever combination they are
             * being used) at all times.
             *  @type string
             *  @default <i>Empty string</i>
             *
             *  @dtopt Language
             *  @name DataTable.defaults.language.infoPostFix
             *
             *  @example
             *    $(document).ready( function() {
             *      $('#example').dataTable( {
             *        "language": {
             *          "infoPostFix": "All records shown are derived from real information."
             *        }
             *      } );
             *    } );
             */
            "sInfoPostFix": "",

            /**
             * This decimal place operator is a little different from the other
             * language options since DataTables doesn't output floating point
             * numbers, so it won't ever use this for display of a number. Rather,
             * what this parameter does is modify the sort methods of the table so
             * that numbers which are in a format which has a character other than
             * a period (`.`) as a decimal place will be sorted numerically.
             *
             * Note that numbers with different decimal places cannot be shown in
             * the same table and still be sortable, the table must be consistent.
             * However, multiple different tables on the page can use different
             * decimal place characters.
             *  @type string
             *  @default 
             *
             *  @dtopt Language
             *  @name DataTable.defaults.language.decimal
             *
             *  @example
             *    $(document).ready( function() {
             *      $('#example').dataTable( {
             *        "language": {
             *          "decimal": ","
             *          "thousands": "."
             *        }
             *      } );
             *    } );
             */
            "sDecimal": "",

            /**
             * DataTables has a build in number formatter (`formatNumber`) which is
             * used to format large numbers that are used in the table information.
             * By default a comma is used, but this can be trivially changed to any
             * character you wish with this parameter.
             *  @type string
             *  @default ,
             *
             *  @dtopt Language
             *  @name DataTable.defaults.language.thousands
             *
             *  @example
             *    $(document).ready( function() {
             *      $('#example').dataTable( {
             *        "language": {
             *          "thousands": "'"
             *        }
             *      } );
             *    } );
             */
            "sThousands": ",",

            /**
             * Detail the action that will be taken when the drop down menu for the
             * pagination length option is changed. The '_MENU_' variable is replaced
             * with a default select list of 10, 25, 50 and 100, and can be replaced
             * with a custom select box if required.
             *  @type string
             *  @default Show _MENU_ entries
             *
             *  @dtopt Language
             *  @name DataTable.defaults.language.lengthMenu
             *
             *  @example
             *    // Language change only
             *    $(document).ready( function() {
             *      $('#example').dataTable( {
             *        "language": {
             *          "lengthMenu": "Display _MENU_ records"
             *        }
             *      } );
             *    } );
             *
             *  @example
             *    // Language and options change
             *    $(document).ready( function() {
             *      $('#example').dataTable( {
             *        "language": {
             *          "lengthMenu": 'Display <select>'+
             *            '<option value="10">10</option>'+
             *            '<option value="20">20</option>'+
             *            '<option value="30">30</option>'+
             *            '<option value="40">40</option>'+
             *            '<option value="50">50</option>'+
             *            '<option value="-1">All</option>'+
             *            '</select> records'
             *        }
             *      } );
             *    } );
             */
            "sLengthMenu": "Show _MENU_ entries",

            /**
             * When using Ajax sourced data and during the first draw when DataTables is
             * gathering the data, this message is shown in an empty row in the table to
             * indicate to the end user the the data is being loaded. Note that this
             * parameter is not used when loading data by server-side processing, just
             * Ajax sourced data with client-side processing.
             *  @type string
             *  @default Loading...
             *
             *  @dtopt Language
             *  @name DataTable.defaults.language.loadingRecords
             *
             *  @example
             *    $(document).ready( function() {
             *      $('#example').dataTable( {
             *        "language": {
             *          "loadingRecords": "Please wait - loading..."
             *        }
             *      } );
             *    } );
             */
            "sLoadingRecords": "Loading...",

            /**
             * Text which is displayed when the table is processing a user action
             * (usually a sort command or similar).
             *  @type string
             *  @default Processing...
             *
             *  @dtopt Language
             *  @name DataTable.defaults.language.processing
             *
             *  @example
             *    $(document).ready( function() {
             *      $('#example').dataTable( {
             *        "language": {
             *          "processing": "DataTables is currently busy"
             *        }
             *      } );
             *    } );
             */
            "sProcessing": "Processing...",

            /**
             * Details the actions that will be taken when the user types into the
             * filtering input text box. The variable "_INPUT_", if used in the string,
             * is replaced with the HTML text box for the filtering input allowing
             * control over where it appears in the string. If "_INPUT_" is not given
             * then the input box is appended to the string automatically.
             *  @type string
             *  @default Search:
             *
             *  @dtopt Language
             *  @name DataTable.defaults.language.search
             *
             *  @example
             *    // Input text box will be appended at the end automatically
             *    $(document).ready( function() {
             *      $('#example').dataTable( {
             *        "language": {
             *          "search": "Filter records:"
             *        }
             *      } );
             *    } );
             *
             *  @example
             *    // Specify where the filter should appear
             *    $(document).ready( function() {
             *      $('#example').dataTable( {
             *        "language": {
             *          "search": "Apply filter _INPUT_ to table"
             *        }
             *      } );
             *    } );
             */
            "sSearch": "Search:",

            /**
             * Assign a `placeholder` attribute to the search `input` element
             *  @type string
             *  @default 
             *
             *  @dtopt Language
             *  @name DataTable.defaults.language.searchPlaceholder
             */
            "sSearchPlaceholder": "",

            /**
             * All of the language information can be stored in a file on the
             * server-side, which DataTables will look up if this parameter is passed.
             * It must store the URL of the language file, which is in a JSON format,
             * and the object has the same properties as the oLanguage object in the
             * initialiser object (i.e. the above parameters). Please refer to one of
             * the example language files to see how this works in action.
             *  @type string
             *  @default <i>Empty string - i.e. disabled</i>
             *
             *  @dtopt Language
             *  @name DataTable.defaults.language.url
             *
             *  @example
             *    $(document).ready( function() {
             *      $('#example').dataTable( {
             *        "language": {
             *          "url": "http://www.sprymedia.co.uk/dataTables/lang.txt"
             *        }
             *      } );
             *    } );
             */
            "sUrl": "",

            /**
             * Text shown inside the table records when the is no information to be
             * displayed after filtering. `emptyTable` is shown when there is simply no
             * information in the table at all (regardless of filtering).
             *  @type string
             *  @default No matching records found
             *
             *  @dtopt Language
             *  @name DataTable.defaults.language.zeroRecords
             *
             *  @example
             *    $(document).ready( function() {
             *      $('#example').dataTable( {
             *        "language": {
             *          "zeroRecords": "No records to display"
             *        }
             *      } );
             *    } );
             */
            "sZeroRecords": "No matching records found"
          },

          /**
           * This parameter allows you to have define the global filtering state at
           * initialisation time. As an object the `search` parameter must be
           * defined, but all other parameters are optional. When `regex` is true,
           * the search string will be treated as a regular expression, when false
           * (default) it will be treated as a straight string. When `smart`
           * DataTables will use it's smart filtering methods (to word match at
           * any point in the data), when false this will not be done.
           *  @namespace
           *  @extends DataTable.models.oSearch
           *
           *  @dtopt Options
           *  @name DataTable.defaults.search
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "search": {"search": "Initial search"}
           *      } );
           *    } )
           */
          "oSearch": $.extend({}, DataTable.models.oSearch),

          /**
           * __Deprecated__ The functionality provided by this parameter has now been
           * superseded by that provided through `ajax`, which should be used instead.
           *
           * By default DataTables will look for the property `data` (or `aaData` for
           * compatibility with DataTables 1.9-) when obtaining data from an Ajax
           * source or for server-side processing - this parameter allows that
           * property to be changed. You can use Javascript dotted object notation to
           * get a data source for multiple levels of nesting.
           *  @type string
           *  @default data
           *
           *  @dtopt Options
           *  @dtopt Server-side
           *  @name DataTable.defaults.ajaxDataProp
           *
           *  @deprecated 1.10. Please use `ajax` for this functionality now.
           */
          "sAjaxDataProp": "data",

          /**
           * __Deprecated__ The functionality provided by this parameter has now been
           * superseded by that provided through `ajax`, which should be used instead.
           *
           * You can instruct DataTables to load data from an external
           * source using this parameter (use aData if you want to pass data in you
           * already have). Simply provide a url a JSON object can be obtained from.
           *  @type string
           *  @default null
           *
           *  @dtopt Options
           *  @dtopt Server-side
           *  @name DataTable.defaults.ajaxSource
           *
           *  @deprecated 1.10. Please use `ajax` for this functionality now.
           */
          "sAjaxSource": null,

          /**
           * This initialisation variable allows you to specify exactly where in the
           * DOM you want DataTables to inject the various controls it adds to the page
           * (for example you might want the pagination controls at the top of the
           * table). DIV elements (with or without a custom class) can also be added to
           * aid styling. The follow syntax is used:
           *   <ul>
           *     <li>The following options are allowed:
           *       <ul>
           *         <li>'l' - Length changing</li>
           *         <li>'f' - Filtering input</li>
           *         <li>'t' - The table!</li>
           *         <li>'i' - Information</li>
           *         <li>'p' - Pagination</li>
           *         <li>'r' - pRocessing</li>
           *       </ul>
           *     </li>
           *     <li>The following constants are allowed:
           *       <ul>
           *         <li>'H' - jQueryUI theme "header" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')</li>
           *         <li>'F' - jQueryUI theme "footer" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')</li>
           *       </ul>
           *     </li>
           *     <li>The following syntax is expected:
           *       <ul>
           *         <li>'&lt;' and '&gt;' - div elements</li>
           *         <li>'&lt;"class" and '&gt;' - div with a class</li>
           *         <li>'&lt;"#id" and '&gt;' - div with an ID</li>
           *       </ul>
           *     </li>
           *     <li>Examples:
           *       <ul>
           *         <li>'&lt;"wrapper"flipt&gt;'</li>
           *         <li>'&lt;lf&lt;t&gt;ip&gt;'</li>
           *       </ul>
           *     </li>
           *   </ul>
           *  @type string
           *  @default lfrtip <i>(when `jQueryUI` is false)</i> <b>or</b>
           *    <"H"lfr>t<"F"ip> <i>(when `jQueryUI` is true)</i>
           *
           *  @dtopt Options
           *  @name DataTable.defaults.dom
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "dom": '&lt;"top"i&gt;rt&lt;"bottom"flp&gt;&lt;"clear"&gt;'
           *      } );
           *    } );
           */
          "sDom": "lfrtip",

          /**
           * Search delay option. This will throttle full table searches that use the
           * DataTables provided search input element (it does not effect calls to
           * `dt-api search()`, providing a delay before the search is made.
           *  @type integer
           *  @default 0
           *
           *  @dtopt Options
           *  @name DataTable.defaults.searchDelay
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "searchDelay": 200
           *      } );
           *    } )
           */
          "searchDelay": null,

          /**
           * DataTables features six different built-in options for the buttons to
           * display for pagination control:
           *
           * * `numbers` - Page number buttons only
           * * `simple` - 'Previous' and 'Next' buttons only
           * * 'simple_numbers` - 'Previous' and 'Next' buttons, plus page numbers
           * * `full` - 'First', 'Previous', 'Next' and 'Last' buttons
           * * `full_numbers` - 'First', 'Previous', 'Next' and 'Last' buttons, plus page numbers
           * * `first_last_numbers` - 'First' and 'Last' buttons, plus page numbers
           *  
           * Further methods can be added using {@link DataTable.ext.oPagination}.
           *  @type string
           *  @default simple_numbers
           *
           *  @dtopt Options
           *  @name DataTable.defaults.pagingType
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "pagingType": "full_numbers"
           *      } );
           *    } )
           */
          "sPaginationType": "simple_numbers",

          /**
           * Enable horizontal scrolling. When a table is too wide to fit into a
           * certain layout, or you have a large number of columns in the table, you
           * can enable x-scrolling to show the table in a viewport, which can be
           * scrolled. This property can be `true` which will allow the table to
           * scroll horizontally when needed, or any CSS unit, or a number (in which
           * case it will be treated as a pixel measurement). Setting as simply `true`
           * is recommended.
           *  @type boolean|string
           *  @default <i>blank string - i.e. disabled</i>
           *
           *  @dtopt Features
           *  @name DataTable.defaults.scrollX
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "scrollX": true,
           *        "scrollCollapse": true
           *      } );
           *    } );
           */
          "sScrollX": "",

          /**
           * This property can be used to force a DataTable to use more width than it
           * might otherwise do when x-scrolling is enabled. For example if you have a
           * table which requires to be well spaced, this parameter is useful for
           * "over-sizing" the table, and thus forcing scrolling. This property can by
           * any CSS unit, or a number (in which case it will be treated as a pixel
           * measurement).
           *  @type string
           *  @default <i>blank string - i.e. disabled</i>
           *
           *  @dtopt Options
           *  @name DataTable.defaults.scrollXInner
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "scrollX": "100%",
           *        "scrollXInner": "110%"
           *      } );
           *    } );
           */
          "sScrollXInner": "",

          /**
           * Enable vertical scrolling. Vertical scrolling will constrain the DataTable
           * to the given height, and enable scrolling for any data which overflows the
           * current viewport. This can be used as an alternative to paging to display
           * a lot of data in a small area (although paging and scrolling can both be
           * enabled at the same time). This property can be any CSS unit, or a number
           * (in which case it will be treated as a pixel measurement).
           *  @type string
           *  @default <i>blank string - i.e. disabled</i>
           *
           *  @dtopt Features
           *  @name DataTable.defaults.scrollY
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "scrollY": "200px",
           *        "paginate": false
           *      } );
           *    } );
           */
          "sScrollY": "",

          /**
           * __Deprecated__ The functionality provided by this parameter has now been
           * superseded by that provided through `ajax`, which should be used instead.
           *
           * Set the HTTP method that is used to make the Ajax call for server-side
           * processing or Ajax sourced data.
           *  @type string
           *  @default GET
           *
           *  @dtopt Options
           *  @dtopt Server-side
           *  @name DataTable.defaults.serverMethod
           *
           *  @deprecated 1.10. Please use `ajax` for this functionality now.
           */
          "sServerMethod": "GET",

          /**
           * DataTables makes use of renderers when displaying HTML elements for
           * a table. These renderers can be added or modified by plug-ins to
           * generate suitable mark-up for a site. For example the Bootstrap
           * integration plug-in for DataTables uses a paging button renderer to
           * display pagination buttons in the mark-up required by Bootstrap.
           *
           * For further information about the renderers available see
           * DataTable.ext.renderer
           *  @type string|object
           *  @default null
           *
           *  @name DataTable.defaults.renderer
           *
           */
          "renderer": null,

          /**
           * Set the data property name that DataTables should use to get a row's id
           * to set as the `id` property in the node.
           *  @type string
           *  @default DT_RowId
           *
           *  @name DataTable.defaults.rowId
           */
          "rowId": "DT_RowId"
        };

        _fnHungarianMap(DataTable.defaults);
        /*
         * Developer note - See note in model.defaults.js about the use of Hungarian
         * notation and camel case.
         */

        /**
         * Column options that can be given to DataTables at initialisation time.
         *  @namespace
         */


        DataTable.defaults.column = {
          /**
           * Define which column(s) an order will occur on for this column. This
           * allows a column's ordering to take multiple columns into account when
           * doing a sort or use the data from a different column. For example first
           * name / last name columns make sense to do a multi-column sort over the
           * two columns.
           *  @type array|int
           *  @default null <i>Takes the value of the column index automatically</i>
           *
           *  @name DataTable.defaults.column.orderData
           *  @dtopt Columns
           *
           *  @example
           *    // Using `columnDefs`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columnDefs": [
           *          { "orderData": [ 0, 1 ], "targets": [ 0 ] },
           *          { "orderData": [ 1, 0 ], "targets": [ 1 ] },
           *          { "orderData": 2, "targets": [ 2 ] }
           *        ]
           *      } );
           *    } );
           *
           *  @example
           *    // Using `columns`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columns": [
           *          { "orderData": [ 0, 1 ] },
           *          { "orderData": [ 1, 0 ] },
           *          { "orderData": 2 },
           *          null,
           *          null
           *        ]
           *      } );
           *    } );
           */
          "aDataSort": null,
          "iDataSort": -1,

          /**
           * You can control the default ordering direction, and even alter the
           * behaviour of the sort handler (i.e. only allow ascending ordering etc)
           * using this parameter.
           *  @type array
           *  @default [ 'asc', 'desc' ]
           *
           *  @name DataTable.defaults.column.orderSequence
           *  @dtopt Columns
           *
           *  @example
           *    // Using `columnDefs`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columnDefs": [
           *          { "orderSequence": [ "asc" ], "targets": [ 1 ] },
           *          { "orderSequence": [ "desc", "asc", "asc" ], "targets": [ 2 ] },
           *          { "orderSequence": [ "desc" ], "targets": [ 3 ] }
           *        ]
           *      } );
           *    } );
           *
           *  @example
           *    // Using `columns`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columns": [
           *          null,
           *          { "orderSequence": [ "asc" ] },
           *          { "orderSequence": [ "desc", "asc", "asc" ] },
           *          { "orderSequence": [ "desc" ] },
           *          null
           *        ]
           *      } );
           *    } );
           */
          "asSorting": ['asc', 'desc'],

          /**
           * Enable or disable filtering on the data in this column.
           *  @type boolean
           *  @default true
           *
           *  @name DataTable.defaults.column.searchable
           *  @dtopt Columns
           *
           *  @example
           *    // Using `columnDefs`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columnDefs": [
           *          { "searchable": false, "targets": [ 0 ] }
           *        ] } );
           *    } );
           *
           *  @example
           *    // Using `columns`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columns": [
           *          { "searchable": false },
           *          null,
           *          null,
           *          null,
           *          null
           *        ] } );
           *    } );
           */
          "bSearchable": true,

          /**
           * Enable or disable ordering on this column.
           *  @type boolean
           *  @default true
           *
           *  @name DataTable.defaults.column.orderable
           *  @dtopt Columns
           *
           *  @example
           *    // Using `columnDefs`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columnDefs": [
           *          { "orderable": false, "targets": [ 0 ] }
           *        ] } );
           *    } );
           *
           *  @example
           *    // Using `columns`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columns": [
           *          { "orderable": false },
           *          null,
           *          null,
           *          null,
           *          null
           *        ] } );
           *    } );
           */
          "bSortable": true,

          /**
           * Enable or disable the display of this column.
           *  @type boolean
           *  @default true
           *
           *  @name DataTable.defaults.column.visible
           *  @dtopt Columns
           *
           *  @example
           *    // Using `columnDefs`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columnDefs": [
           *          { "visible": false, "targets": [ 0 ] }
           *        ] } );
           *    } );
           *
           *  @example
           *    // Using `columns`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columns": [
           *          { "visible": false },
           *          null,
           *          null,
           *          null,
           *          null
           *        ] } );
           *    } );
           */
          "bVisible": true,

          /**
           * Developer definable function that is called whenever a cell is created (Ajax source,
           * etc) or processed for input (DOM source). This can be used as a compliment to mRender
           * allowing you to modify the DOM element (add background colour for example) when the
           * element is available.
           *  @type function
           *  @param {element} td The TD node that has been created
           *  @param {*} cellData The Data for the cell
           *  @param {array|object} rowData The data for the whole row
           *  @param {int} row The row index for the aoData data store
           *  @param {int} col The column index for aoColumns
           *
           *  @name DataTable.defaults.column.createdCell
           *  @dtopt Columns
           *
           *  @example
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columnDefs": [ {
           *          "targets": [3],
           *          "createdCell": function (td, cellData, rowData, row, col) {
           *            if ( cellData == "1.7" ) {
           *              $(td).css('color', 'blue')
           *            }
           *          }
           *        } ]
           *      });
           *    } );
           */
          "fnCreatedCell": null,

          /**
           * This parameter has been replaced by `data` in DataTables to ensure naming
           * consistency. `dataProp` can still be used, as there is backwards
           * compatibility in DataTables for this option, but it is strongly
           * recommended that you use `data` in preference to `dataProp`.
           *  @name DataTable.defaults.column.dataProp
           */

          /**
           * This property can be used to read data from any data source property,
           * including deeply nested objects / properties. `data` can be given in a
           * number of different ways which effect its behaviour:
           *
           * * `integer` - treated as an array index for the data source. This is the
           *   default that DataTables uses (incrementally increased for each column).
           * * `string` - read an object property from the data source. There are
           *   three 'special' options that can be used in the string to alter how
           *   DataTables reads the data from the source object:
           *    * `.` - Dotted Javascript notation. Just as you use a `.` in
           *      Javascript to read from nested objects, so to can the options
           *      specified in `data`. For example: `browser.version` or
           *      `browser.name`. If your object parameter name contains a period, use
           *      `\\` to escape it - i.e. `first\\.name`.
           *    * `[]` - Array notation. DataTables can automatically combine data
           *      from and array source, joining the data with the characters provided
           *      between the two brackets. For example: `name[, ]` would provide a
           *      comma-space separated list from the source array. If no characters
           *      are provided between the brackets, the original array source is
           *      returned.
           *    * `()` - Function notation. Adding `()` to the end of a parameter will
           *      execute a function of the name given. For example: `browser()` for a
           *      simple function on the data source, `browser.version()` for a
           *      function in a nested property or even `browser().version` to get an
           *      object property if the function called returns an object. Note that
           *      function notation is recommended for use in `render` rather than
           *      `data` as it is much simpler to use as a renderer.
           * * `null` - use the original data source for the row rather than plucking
           *   data directly from it. This action has effects on two other
           *   initialisation options:
           *    * `defaultContent` - When null is given as the `data` option and
           *      `defaultContent` is specified for the column, the value defined by
           *      `defaultContent` will be used for the cell.
           *    * `render` - When null is used for the `data` option and the `render`
           *      option is specified for the column, the whole data source for the
           *      row is used for the renderer.
           * * `function` - the function given will be executed whenever DataTables
           *   needs to set or get the data for a cell in the column. The function
           *   takes three parameters:
           *    * Parameters:
           *      * `{array|object}` The data source for the row
           *      * `{string}` The type call data requested - this will be 'set' when
           *        setting data or 'filter', 'display', 'type', 'sort' or undefined
           *        when gathering data. Note that when `undefined` is given for the
           *        type DataTables expects to get the raw data for the object back<
           *      * `{*}` Data to set when the second parameter is 'set'.
           *    * Return:
           *      * The return value from the function is not required when 'set' is
           *        the type of call, but otherwise the return is what will be used
           *        for the data requested.
           *
           * Note that `data` is a getter and setter option. If you just require
           * formatting of data for output, you will likely want to use `render` which
           * is simply a getter and thus simpler to use.
           *
           * Note that prior to DataTables 1.9.2 `data` was called `mDataProp`. The
           * name change reflects the flexibility of this property and is consistent
           * with the naming of mRender. If 'mDataProp' is given, then it will still
           * be used by DataTables, as it automatically maps the old name to the new
           * if required.
           *
           *  @type string|int|function|null
           *  @default null <i>Use automatically calculated column index</i>
           *
           *  @name DataTable.defaults.column.data
           *  @dtopt Columns
           *
           *  @example
           *    // Read table data from objects
           *    // JSON structure for each row:
           *    //   {
           *    //      "engine": {value},
           *    //      "browser": {value},
           *    //      "platform": {value},
           *    //      "version": {value},
           *    //      "grade": {value}
           *    //   }
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "ajaxSource": "sources/objects.txt",
           *        "columns": [
           *          { "data": "engine" },
           *          { "data": "browser" },
           *          { "data": "platform" },
           *          { "data": "version" },
           *          { "data": "grade" }
           *        ]
           *      } );
           *    } );
           *
           *  @example
           *    // Read information from deeply nested objects
           *    // JSON structure for each row:
           *    //   {
           *    //      "engine": {value},
           *    //      "browser": {value},
           *    //      "platform": {
           *    //         "inner": {value}
           *    //      },
           *    //      "details": [
           *    //         {value}, {value}
           *    //      ]
           *    //   }
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "ajaxSource": "sources/deep.txt",
           *        "columns": [
           *          { "data": "engine" },
           *          { "data": "browser" },
           *          { "data": "platform.inner" },
           *          { "data": "details.0" },
           *          { "data": "details.1" }
           *        ]
           *      } );
           *    } );
           *
           *  @example
           *    // Using `data` as a function to provide different information for
           *    // sorting, filtering and display. In this case, currency (price)
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columnDefs": [ {
           *          "targets": [ 0 ],
           *          "data": function ( source, type, val ) {
           *            if (type === 'set') {
           *              source.price = val;
           *              // Store the computed dislay and filter values for efficiency
           *              source.price_display = val=="" ? "" : "$"+numberFormat(val);
           *              source.price_filter  = val=="" ? "" : "$"+numberFormat(val)+" "+val;
           *              return;
           *            }
           *            else if (type === 'display') {
           *              return source.price_display;
           *            }
           *            else if (type === 'filter') {
           *              return source.price_filter;
           *            }
           *            // 'sort', 'type' and undefined all just use the integer
           *            return source.price;
           *          }
           *        } ]
           *      } );
           *    } );
           *
           *  @example
           *    // Using default content
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columnDefs": [ {
           *          "targets": [ 0 ],
           *          "data": null,
           *          "defaultContent": "Click to edit"
           *        } ]
           *      } );
           *    } );
           *
           *  @example
           *    // Using array notation - outputting a list from an array
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columnDefs": [ {
           *          "targets": [ 0 ],
           *          "data": "name[, ]"
           *        } ]
           *      } );
           *    } );
           *
           */
          "mData": null,

          /**
           * This property is the rendering partner to `data` and it is suggested that
           * when you want to manipulate data for display (including filtering,
           * sorting etc) without altering the underlying data for the table, use this
           * property. `render` can be considered to be the the read only companion to
           * `data` which is read / write (then as such more complex). Like `data`
           * this option can be given in a number of different ways to effect its
           * behaviour:
           *
           * * `integer` - treated as an array index for the data source. This is the
           *   default that DataTables uses (incrementally increased for each column).
           * * `string` - read an object property from the data source. There are
           *   three 'special' options that can be used in the string to alter how
           *   DataTables reads the data from the source object:
           *    * `.` - Dotted Javascript notation. Just as you use a `.` in
           *      Javascript to read from nested objects, so to can the options
           *      specified in `data`. For example: `browser.version` or
           *      `browser.name`. If your object parameter name contains a period, use
           *      `\\` to escape it - i.e. `first\\.name`.
           *    * `[]` - Array notation. DataTables can automatically combine data
           *      from and array source, joining the data with the characters provided
           *      between the two brackets. For example: `name[, ]` would provide a
           *      comma-space separated list from the source array. If no characters
           *      are provided between the brackets, the original array source is
           *      returned.
           *    * `()` - Function notation. Adding `()` to the end of a parameter will
           *      execute a function of the name given. For example: `browser()` for a
           *      simple function on the data source, `browser.version()` for a
           *      function in a nested property or even `browser().version` to get an
           *      object property if the function called returns an object.
           * * `object` - use different data for the different data types requested by
           *   DataTables ('filter', 'display', 'type' or 'sort'). The property names
           *   of the object is the data type the property refers to and the value can
           *   defined using an integer, string or function using the same rules as
           *   `render` normally does. Note that an `_` option _must_ be specified.
           *   This is the default value to use if you haven't specified a value for
           *   the data type requested by DataTables.
           * * `function` - the function given will be executed whenever DataTables
           *   needs to set or get the data for a cell in the column. The function
           *   takes three parameters:
           *    * Parameters:
           *      * {array|object} The data source for the row (based on `data`)
           *      * {string} The type call data requested - this will be 'filter',
           *        'display', 'type' or 'sort'.
           *      * {array|object} The full data source for the row (not based on
           *        `data`)
           *    * Return:
           *      * The return value from the function is what will be used for the
           *        data requested.
           *
           *  @type string|int|function|object|null
           *  @default null Use the data source value.
           *
           *  @name DataTable.defaults.column.render
           *  @dtopt Columns
           *
           *  @example
           *    // Create a comma separated list from an array of objects
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "ajaxSource": "sources/deep.txt",
           *        "columns": [
           *          { "data": "engine" },
           *          { "data": "browser" },
           *          {
           *            "data": "platform",
           *            "render": "[, ].name"
           *          }
           *        ]
           *      } );
           *    } );
           *
           *  @example
           *    // Execute a function to obtain data
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columnDefs": [ {
           *          "targets": [ 0 ],
           *          "data": null, // Use the full data source object for the renderer's source
           *          "render": "browserName()"
           *        } ]
           *      } );
           *    } );
           *
           *  @example
           *    // As an object, extracting different data for the different types
           *    // This would be used with a data source such as:
           *    //   { "phone": 5552368, "phone_filter": "5552368 555-2368", "phone_display": "555-2368" }
           *    // Here the `phone` integer is used for sorting and type detection, while `phone_filter`
           *    // (which has both forms) is used for filtering for if a user inputs either format, while
           *    // the formatted phone number is the one that is shown in the table.
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columnDefs": [ {
           *          "targets": [ 0 ],
           *          "data": null, // Use the full data source object for the renderer's source
           *          "render": {
           *            "_": "phone",
           *            "filter": "phone_filter",
           *            "display": "phone_display"
           *          }
           *        } ]
           *      } );
           *    } );
           *
           *  @example
           *    // Use as a function to create a link from the data source
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columnDefs": [ {
           *          "targets": [ 0 ],
           *          "data": "download_link",
           *          "render": function ( data, type, full ) {
           *            return '<a href="'+data+'">Download</a>';
           *          }
           *        } ]
           *      } );
           *    } );
           */
          "mRender": null,

          /**
           * Change the cell type created for the column - either TD cells or TH cells. This
           * can be useful as TH cells have semantic meaning in the table body, allowing them
           * to act as a header for a row (you may wish to add scope='row' to the TH elements).
           *  @type string
           *  @default td
           *
           *  @name DataTable.defaults.column.cellType
           *  @dtopt Columns
           *
           *  @example
           *    // Make the first column use TH cells
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columnDefs": [ {
           *          "targets": [ 0 ],
           *          "cellType": "th"
           *        } ]
           *      } );
           *    } );
           */
          "sCellType": "td",

          /**
           * Class to give to each cell in this column.
           *  @type string
           *  @default <i>Empty string</i>
           *
           *  @name DataTable.defaults.column.class
           *  @dtopt Columns
           *
           *  @example
           *    // Using `columnDefs`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columnDefs": [
           *          { "class": "my_class", "targets": [ 0 ] }
           *        ]
           *      } );
           *    } );
           *
           *  @example
           *    // Using `columns`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columns": [
           *          { "class": "my_class" },
           *          null,
           *          null,
           *          null,
           *          null
           *        ]
           *      } );
           *    } );
           */
          "sClass": "",

          /**
           * When DataTables calculates the column widths to assign to each column,
           * it finds the longest string in each column and then constructs a
           * temporary table and reads the widths from that. The problem with this
           * is that "mmm" is much wider then "iiii", but the latter is a longer
           * string - thus the calculation can go wrong (doing it properly and putting
           * it into an DOM object and measuring that is horribly(!) slow). Thus as
           * a "work around" we provide this option. It will append its value to the
           * text that is found to be the longest string for the column - i.e. padding.
           * Generally you shouldn't need this!
           *  @type string
           *  @default <i>Empty string<i>
           *
           *  @name DataTable.defaults.column.contentPadding
           *  @dtopt Columns
           *
           *  @example
           *    // Using `columns`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columns": [
           *          null,
           *          null,
           *          null,
           *          {
           *            "contentPadding": "mmm"
           *          }
           *        ]
           *      } );
           *    } );
           */
          "sContentPadding": "",

          /**
           * Allows a default value to be given for a column's data, and will be used
           * whenever a null data source is encountered (this can be because `data`
           * is set to null, or because the data source itself is null).
           *  @type string
           *  @default null
           *
           *  @name DataTable.defaults.column.defaultContent
           *  @dtopt Columns
           *
           *  @example
           *    // Using `columnDefs`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columnDefs": [
           *          {
           *            "data": null,
           *            "defaultContent": "Edit",
           *            "targets": [ -1 ]
           *          }
           *        ]
           *      } );
           *    } );
           *
           *  @example
           *    // Using `columns`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columns": [
           *          null,
           *          null,
           *          null,
           *          {
           *            "data": null,
           *            "defaultContent": "Edit"
           *          }
           *        ]
           *      } );
           *    } );
           */
          "sDefaultContent": null,

          /**
           * This parameter is only used in DataTables' server-side processing. It can
           * be exceptionally useful to know what columns are being displayed on the
           * client side, and to map these to database fields. When defined, the names
           * also allow DataTables to reorder information from the server if it comes
           * back in an unexpected order (i.e. if you switch your columns around on the
           * client-side, your server-side code does not also need updating).
           *  @type string
           *  @default <i>Empty string</i>
           *
           *  @name DataTable.defaults.column.name
           *  @dtopt Columns
           *
           *  @example
           *    // Using `columnDefs`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columnDefs": [
           *          { "name": "engine", "targets": [ 0 ] },
           *          { "name": "browser", "targets": [ 1 ] },
           *          { "name": "platform", "targets": [ 2 ] },
           *          { "name": "version", "targets": [ 3 ] },
           *          { "name": "grade", "targets": [ 4 ] }
           *        ]
           *      } );
           *    } );
           *
           *  @example
           *    // Using `columns`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columns": [
           *          { "name": "engine" },
           *          { "name": "browser" },
           *          { "name": "platform" },
           *          { "name": "version" },
           *          { "name": "grade" }
           *        ]
           *      } );
           *    } );
           */
          "sName": "",

          /**
           * Defines a data source type for the ordering which can be used to read
           * real-time information from the table (updating the internally cached
           * version) prior to ordering. This allows ordering to occur on user
           * editable elements such as form inputs.
           *  @type string
           *  @default std
           *
           *  @name DataTable.defaults.column.orderDataType
           *  @dtopt Columns
           *
           *  @example
           *    // Using `columnDefs`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columnDefs": [
           *          { "orderDataType": "dom-text", "targets": [ 2, 3 ] },
           *          { "type": "numeric", "targets": [ 3 ] },
           *          { "orderDataType": "dom-select", "targets": [ 4 ] },
           *          { "orderDataType": "dom-checkbox", "targets": [ 5 ] }
           *        ]
           *      } );
           *    } );
           *
           *  @example
           *    // Using `columns`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columns": [
           *          null,
           *          null,
           *          { "orderDataType": "dom-text" },
           *          { "orderDataType": "dom-text", "type": "numeric" },
           *          { "orderDataType": "dom-select" },
           *          { "orderDataType": "dom-checkbox" }
           *        ]
           *      } );
           *    } );
           */
          "sSortDataType": "std",

          /**
           * The title of this column.
           *  @type string
           *  @default null <i>Derived from the 'TH' value for this column in the
           *    original HTML table.</i>
           *
           *  @name DataTable.defaults.column.title
           *  @dtopt Columns
           *
           *  @example
           *    // Using `columnDefs`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columnDefs": [
           *          { "title": "My column title", "targets": [ 0 ] }
           *        ]
           *      } );
           *    } );
           *
           *  @example
           *    // Using `columns`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columns": [
           *          { "title": "My column title" },
           *          null,
           *          null,
           *          null,
           *          null
           *        ]
           *      } );
           *    } );
           */
          "sTitle": null,

          /**
           * The type allows you to specify how the data for this column will be
           * ordered. Four types (string, numeric, date and html (which will strip
           * HTML tags before ordering)) are currently available. Note that only date
           * formats understood by Javascript's Date() object will be accepted as type
           * date. For example: "Mar 26, 2008 5:03 PM". May take the values: 'string',
           * 'numeric', 'date' or 'html' (by default). Further types can be adding
           * through plug-ins.
           *  @type string
           *  @default null <i>Auto-detected from raw data</i>
           *
           *  @name DataTable.defaults.column.type
           *  @dtopt Columns
           *
           *  @example
           *    // Using `columnDefs`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columnDefs": [
           *          { "type": "html", "targets": [ 0 ] }
           *        ]
           *      } );
           *    } );
           *
           *  @example
           *    // Using `columns`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columns": [
           *          { "type": "html" },
           *          null,
           *          null,
           *          null,
           *          null
           *        ]
           *      } );
           *    } );
           */
          "sType": null,

          /**
           * Defining the width of the column, this parameter may take any CSS value
           * (3em, 20px etc). DataTables applies 'smart' widths to columns which have not
           * been given a specific width through this interface ensuring that the table
           * remains readable.
           *  @type string
           *  @default null <i>Automatic</i>
           *
           *  @name DataTable.defaults.column.width
           *  @dtopt Columns
           *
           *  @example
           *    // Using `columnDefs`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columnDefs": [
           *          { "width": "20%", "targets": [ 0 ] }
           *        ]
           *      } );
           *    } );
           *
           *  @example
           *    // Using `columns`
           *    $(document).ready( function() {
           *      $('#example').dataTable( {
           *        "columns": [
           *          { "width": "20%" },
           *          null,
           *          null,
           *          null,
           *          null
           *        ]
           *      } );
           *    } );
           */
          "sWidth": null
        };

        _fnHungarianMap(DataTable.defaults.column);
        /**
         * DataTables settings object - this holds all the information needed for a
         * given table, including configuration, data and current application of the
         * table options. DataTables does not have a single instance for each DataTable
         * with the settings attached to that instance, but rather instances of the
         * DataTable "class" are created on-the-fly as needed (typically by a
         * $().dataTable() call) and the settings object is then applied to that
         * instance.
         *
         * Note that this object is related to {@link DataTable.defaults} but this
         * one is the internal data store for DataTables's cache of columns. It should
         * NOT be manipulated outside of DataTables. Any configuration should be done
         * through the initialisation options.
         *  @namespace
         *  @todo Really should attach the settings object to individual instances so we
         *    don't need to create new instances on each $().dataTable() call (if the
         *    table already exists). It would also save passing oSettings around and
         *    into every single function. However, this is a very significant
         *    architecture change for DataTables and will almost certainly break
         *    backwards compatibility with older installations. This is something that
         *    will be done in 2.0.
         */


        DataTable.models.oSettings = {
          /**
           * Primary features of DataTables and their enablement state.
           *  @namespace
           */
          "oFeatures": {
            /**
             * Flag to say if DataTables should automatically try to calculate the
             * optimum table and columns widths (true) or not (false).
             * Note that this parameter will be set by the initialisation routine. To
             * set a default use {@link DataTable.defaults}.
             *  @type boolean
             */
            "bAutoWidth": null,

            /**
             * Delay the creation of TR and TD elements until they are actually
             * needed by a driven page draw. This can give a significant speed
             * increase for Ajax source and Javascript source data, but makes no
             * difference at all fro DOM and server-side processing tables.
             * Note that this parameter will be set by the initialisation routine. To
             * set a default use {@link DataTable.defaults}.
             *  @type boolean
             */
            "bDeferRender": null,

            /**
             * Enable filtering on the table or not. Note that if this is disabled
             * then there is no filtering at all on the table, including fnFilter.
             * To just remove the filtering input use sDom and remove the 'f' option.
             * Note that this parameter will be set by the initialisation routine. To
             * set a default use {@link DataTable.defaults}.
             *  @type boolean
             */
            "bFilter": null,

            /**
             * Table information element (the 'Showing x of y records' div) enable
             * flag.
             * Note that this parameter will be set by the initialisation routine. To
             * set a default use {@link DataTable.defaults}.
             *  @type boolean
             */
            "bInfo": null,

            /**
             * Present a user control allowing the end user to change the page size
             * when pagination is enabled.
             * Note that this parameter will be set by the initialisation routine. To
             * set a default use {@link DataTable.defaults}.
             *  @type boolean
             */
            "bLengthChange": null,

            /**
             * Pagination enabled or not. Note that if this is disabled then length
             * changing must also be disabled.
             * Note that this parameter will be set by the initialisation routine. To
             * set a default use {@link DataTable.defaults}.
             *  @type boolean
             */
            "bPaginate": null,

            /**
             * Processing indicator enable flag whenever DataTables is enacting a
             * user request - typically an Ajax request for server-side processing.
             * Note that this parameter will be set by the initialisation routine. To
             * set a default use {@link DataTable.defaults}.
             *  @type boolean
             */
            "bProcessing": null,

            /**
             * Server-side processing enabled flag - when enabled DataTables will
             * get all data from the server for every draw - there is no filtering,
             * sorting or paging done on the client-side.
             * Note that this parameter will be set by the initialisation routine. To
             * set a default use {@link DataTable.defaults}.
             *  @type boolean
             */
            "bServerSide": null,

            /**
             * Sorting enablement flag.
             * Note that this parameter will be set by the initialisation routine. To
             * set a default use {@link DataTable.defaults}.
             *  @type boolean
             */
            "bSort": null,

            /**
             * Multi-column sorting
             * Note that this parameter will be set by the initialisation routine. To
             * set a default use {@link DataTable.defaults}.
             *  @type boolean
             */
            "bSortMulti": null,

            /**
             * Apply a class to the columns which are being sorted to provide a
             * visual highlight or not. This can slow things down when enabled since
             * there is a lot of DOM interaction.
             * Note that this parameter will be set by the initialisation routine. To
             * set a default use {@link DataTable.defaults}.
             *  @type boolean
             */
            "bSortClasses": null,

            /**
             * State saving enablement flag.
             * Note that this parameter will be set by the initialisation routine. To
             * set a default use {@link DataTable.defaults}.
             *  @type boolean
             */
            "bStateSave": null
          },

          /**
           * Scrolling settings for a table.
           *  @namespace
           */
          "oScroll": {
            /**
             * When the table is shorter in height than sScrollY, collapse the
             * table container down to the height of the table (when true).
             * Note that this parameter will be set by the initialisation routine. To
             * set a default use {@link DataTable.defaults}.
             *  @type boolean
             */
            "bCollapse": null,

            /**
             * Width of the scrollbar for the web-browser's platform. Calculated
             * during table initialisation.
             *  @type int
             *  @default 0
             */
            "iBarWidth": 0,

            /**
             * Viewport width for horizontal scrolling. Horizontal scrolling is
             * disabled if an empty string.
             * Note that this parameter will be set by the initialisation routine. To
             * set a default use {@link DataTable.defaults}.
             *  @type string
             */
            "sX": null,

            /**
             * Width to expand the table to when using x-scrolling. Typically you
             * should not need to use this.
             * Note that this parameter will be set by the initialisation routine. To
             * set a default use {@link DataTable.defaults}.
             *  @type string
             *  @deprecated
             */
            "sXInner": null,

            /**
             * Viewport height for vertical scrolling. Vertical scrolling is disabled
             * if an empty string.
             * Note that this parameter will be set by the initialisation routine. To
             * set a default use {@link DataTable.defaults}.
             *  @type string
             */
            "sY": null
          },

          /**
           * Language information for the table.
           *  @namespace
           *  @extends DataTable.defaults.oLanguage
           */
          "oLanguage": {
            /**
             * Information callback function. See
             * {@link DataTable.defaults.fnInfoCallback}
             *  @type function
             *  @default null
             */
            "fnInfoCallback": null
          },

          /**
           * Browser support parameters
           *  @namespace
           */
          "oBrowser": {
            /**
             * Indicate if the browser incorrectly calculates width:100% inside a
             * scrolling element (IE6/7)
             *  @type boolean
             *  @default false
             */
            "bScrollOversize": false,

            /**
             * Determine if the vertical scrollbar is on the right or left of the
             * scrolling container - needed for rtl language layout, although not
             * all browsers move the scrollbar (Safari).
             *  @type boolean
             *  @default false
             */
            "bScrollbarLeft": false,

            /**
             * Flag for if `getBoundingClientRect` is fully supported or not
             *  @type boolean
             *  @default false
             */
            "bBounding": false,

            /**
             * Browser scrollbar width
             *  @type integer
             *  @default 0
             */
            "barWidth": 0
          },
          "ajax": null,

          /**
           * Array referencing the nodes which are used for the features. The
           * parameters of this object match what is allowed by sDom - i.e.
           *   <ul>
           *     <li>'l' - Length changing</li>
           *     <li>'f' - Filtering input</li>
           *     <li>'t' - The table!</li>
           *     <li>'i' - Information</li>
           *     <li>'p' - Pagination</li>
           *     <li>'r' - pRocessing</li>
           *   </ul>
           *  @type array
           *  @default []
           */
          "aanFeatures": [],

          /**
           * Store data information - see {@link DataTable.models.oRow} for detailed
           * information.
           *  @type array
           *  @default []
           */
          "aoData": [],

          /**
           * Array of indexes which are in the current display (after filtering etc)
           *  @type array
           *  @default []
           */
          "aiDisplay": [],

          /**
           * Array of indexes for display - no filtering
           *  @type array
           *  @default []
           */
          "aiDisplayMaster": [],

          /**
           * Map of row ids to data indexes
           *  @type object
           *  @default {}
           */
          "aIds": {},

          /**
           * Store information about each column that is in use
           *  @type array
           *  @default []
           */
          "aoColumns": [],

          /**
           * Store information about the table's header
           *  @type array
           *  @default []
           */
          "aoHeader": [],

          /**
           * Store information about the table's footer
           *  @type array
           *  @default []
           */
          "aoFooter": [],

          /**
           * Store the applied global search information in case we want to force a
           * research or compare the old search to a new one.
           * Note that this parameter will be set by the initialisation routine. To
           * set a default use {@link DataTable.defaults}.
           *  @namespace
           *  @extends DataTable.models.oSearch
           */
          "oPreviousSearch": {},

          /**
           * Store the applied search for each column - see
           * {@link DataTable.models.oSearch} for the format that is used for the
           * filtering information for each column.
           *  @type array
           *  @default []
           */
          "aoPreSearchCols": [],

          /**
           * Sorting that is applied to the table. Note that the inner arrays are
           * used in the following manner:
           * <ul>
           *   <li>Index 0 - column number</li>
           *   <li>Index 1 - current sorting direction</li>
           * </ul>
           * Note that this parameter will be set by the initialisation routine. To
           * set a default use {@link DataTable.defaults}.
           *  @type array
           *  @todo These inner arrays should really be objects
           */
          "aaSorting": null,

          /**
           * Sorting that is always applied to the table (i.e. prefixed in front of
           * aaSorting).
           * Note that this parameter will be set by the initialisation routine. To
           * set a default use {@link DataTable.defaults}.
           *  @type array
           *  @default []
           */
          "aaSortingFixed": [],

          /**
           * Classes to use for the striping of a table.
           * Note that this parameter will be set by the initialisation routine. To
           * set a default use {@link DataTable.defaults}.
           *  @type array
           *  @default []
           */
          "asStripeClasses": null,

          /**
           * If restoring a table - we should restore its striping classes as well
           *  @type array
           *  @default []
           */
          "asDestroyStripes": [],

          /**
           * If restoring a table - we should restore its width
           *  @type int
           *  @default 0
           */
          "sDestroyWidth": 0,

          /**
           * Callback functions array for every time a row is inserted (i.e. on a draw).
           *  @type array
           *  @default []
           */
          "aoRowCallback": [],

          /**
           * Callback functions for the header on each draw.
           *  @type array
           *  @default []
           */
          "aoHeaderCallback": [],

          /**
           * Callback function for the footer on each draw.
           *  @type array
           *  @default []
           */
          "aoFooterCallback": [],

          /**
           * Array of callback functions for draw callback functions
           *  @type array
           *  @default []
           */
          "aoDrawCallback": [],

          /**
           * Array of callback functions for row created function
           *  @type array
           *  @default []
           */
          "aoRowCreatedCallback": [],

          /**
           * Callback functions for just before the table is redrawn. A return of
           * false will be used to cancel the draw.
           *  @type array
           *  @default []
           */
          "aoPreDrawCallback": [],

          /**
           * Callback functions for when the table has been initialised.
           *  @type array
           *  @default []
           */
          "aoInitComplete": [],

          /**
           * Callbacks for modifying the settings to be stored for state saving, prior to
           * saving state.
           *  @type array
           *  @default []
           */
          "aoStateSaveParams": [],

          /**
           * Callbacks for modifying the settings that have been stored for state saving
           * prior to using the stored values to restore the state.
           *  @type array
           *  @default []
           */
          "aoStateLoadParams": [],

          /**
           * Callbacks for operating on the settings object once the saved state has been
           * loaded
           *  @type array
           *  @default []
           */
          "aoStateLoaded": [],

          /**
           * Cache the table ID for quick access
           *  @type string
           *  @default <i>Empty string</i>
           */
          "sTableId": "",

          /**
           * The TABLE node for the main table
           *  @type node
           *  @default null
           */
          "nTable": null,

          /**
           * Permanent ref to the thead element
           *  @type node
           *  @default null
           */
          "nTHead": null,

          /**
           * Permanent ref to the tfoot element - if it exists
           *  @type node
           *  @default null
           */
          "nTFoot": null,

          /**
           * Permanent ref to the tbody element
           *  @type node
           *  @default null
           */
          "nTBody": null,

          /**
           * Cache the wrapper node (contains all DataTables controlled elements)
           *  @type node
           *  @default null
           */
          "nTableWrapper": null,

          /**
           * Indicate if when using server-side processing the loading of data
           * should be deferred until the second draw.
           * Note that this parameter will be set by the initialisation routine. To
           * set a default use {@link DataTable.defaults}.
           *  @type boolean
           *  @default false
           */
          "bDeferLoading": false,

          /**
           * Indicate if all required information has been read in
           *  @type boolean
           *  @default false
           */
          "bInitialised": false,

          /**
           * Information about open rows. Each object in the array has the parameters
           * 'nTr' and 'nParent'
           *  @type array
           *  @default []
           */
          "aoOpenRows": [],

          /**
           * Dictate the positioning of DataTables' control elements - see
           * {@link DataTable.model.oInit.sDom}.
           * Note that this parameter will be set by the initialisation routine. To
           * set a default use {@link DataTable.defaults}.
           *  @type string
           *  @default null
           */
          "sDom": null,

          /**
           * Search delay (in mS)
           *  @type integer
           *  @default null
           */
          "searchDelay": null,

          /**
           * Which type of pagination should be used.
           * Note that this parameter will be set by the initialisation routine. To
           * set a default use {@link DataTable.defaults}.
           *  @type string
           *  @default two_button
           */
          "sPaginationType": "two_button",

          /**
           * The state duration (for `stateSave`) in seconds.
           * Note that this parameter will be set by the initialisation routine. To
           * set a default use {@link DataTable.defaults}.
           *  @type int
           *  @default 0
           */
          "iStateDuration": 0,

          /**
           * Array of callback functions for state saving. Each array element is an
           * object with the following parameters:
           *   <ul>
           *     <li>function:fn - function to call. Takes two parameters, oSettings
           *       and the JSON string to save that has been thus far created. Returns
           *       a JSON string to be inserted into a json object
           *       (i.e. '"param": [ 0, 1, 2]')</li>
           *     <li>string:sName - name of callback</li>
           *   </ul>
           *  @type array
           *  @default []
           */
          "aoStateSave": [],

          /**
           * Array of callback functions for state loading. Each array element is an
           * object with the following parameters:
           *   <ul>
           *     <li>function:fn - function to call. Takes two parameters, oSettings
           *       and the object stored. May return false to cancel state loading</li>
           *     <li>string:sName - name of callback</li>
           *   </ul>
           *  @type array
           *  @default []
           */
          "aoStateLoad": [],

          /**
           * State that was saved. Useful for back reference
           *  @type object
           *  @default null
           */
          "oSavedState": null,

          /**
           * State that was loaded. Useful for back reference
           *  @type object
           *  @default null
           */
          "oLoadedState": null,

          /**
           * Source url for AJAX data for the table.
           * Note that this parameter will be set by the initialisation routine. To
           * set a default use {@link DataTable.defaults}.
           *  @type string
           *  @default null
           */
          "sAjaxSource": null,

          /**
           * Property from a given object from which to read the table data from. This
           * can be an empty string (when not server-side processing), in which case
           * it is  assumed an an array is given directly.
           * Note that this parameter will be set by the initialisation routine. To
           * set a default use {@link DataTable.defaults}.
           *  @type string
           */
          "sAjaxDataProp": null,

          /**
           * Note if draw should be blocked while getting data
           *  @type boolean
           *  @default true
           */
          "bAjaxDataGet": true,

          /**
           * The last jQuery XHR object that was used for server-side data gathering.
           * This can be used for working with the XHR information in one of the
           * callbacks
           *  @type object
           *  @default null
           */
          "jqXHR": null,

          /**
           * JSON returned from the server in the last Ajax request
           *  @type object
           *  @default undefined
           */
          "json": undefined,

          /**
           * Data submitted as part of the last Ajax request
           *  @type object
           *  @default undefined
           */
          "oAjaxData": undefined,

          /**
           * Function to get the server-side data.
           * Note that this parameter will be set by the initialisation routine. To
           * set a default use {@link DataTable.defaults}.
           *  @type function
           */
          "fnServerData": null,

          /**
           * Functions which are called prior to sending an Ajax request so extra
           * parameters can easily be sent to the server
           *  @type array
           *  @default []
           */
          "aoServerParams": [],

          /**
           * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if
           * required).
           * Note that this parameter will be set by the initialisation routine. To
           * set a default use {@link DataTable.defaults}.
           *  @type string
           */
          "sServerMethod": null,

          /**
           * Format numbers for display.
           * Note that this parameter will be set by the initialisation routine. To
           * set a default use {@link DataTable.defaults}.
           *  @type function
           */
          "fnFormatNumber": null,

          /**
           * List of options that can be used for the user selectable length menu.
           * Note that this parameter will be set by the initialisation routine. To
           * set a default use {@link DataTable.defaults}.
           *  @type array
           *  @default []
           */
          "aLengthMenu": null,

          /**
           * Counter for the draws that the table does. Also used as a tracker for
           * server-side processing
           *  @type int
           *  @default 0
           */
          "iDraw": 0,

          /**
           * Indicate if a redraw is being done - useful for Ajax
           *  @type boolean
           *  @default false
           */
          "bDrawing": false,

          /**
           * Draw index (iDraw) of the last error when parsing the returned data
           *  @type int
           *  @default -1
           */
          "iDrawError": -1,

          /**
           * Paging display length
           *  @type int
           *  @default 10
           */
          "_iDisplayLength": 10,

          /**
           * Paging start point - aiDisplay index
           *  @type int
           *  @default 0
           */
          "_iDisplayStart": 0,

          /**
           * Server-side processing - number of records in the result set
           * (i.e. before filtering), Use fnRecordsTotal rather than
           * this property to get the value of the number of records, regardless of
           * the server-side processing setting.
           *  @type int
           *  @default 0
           *  @private
           */
          "_iRecordsTotal": 0,

          /**
           * Server-side processing - number of records in the current display set
           * (i.e. after filtering). Use fnRecordsDisplay rather than
           * this property to get the value of the number of records, regardless of
           * the server-side processing setting.
           *  @type boolean
           *  @default 0
           *  @private
           */
          "_iRecordsDisplay": 0,

          /**
           * The classes to use for the table
           *  @type object
           *  @default {}
           */
          "oClasses": {},

          /**
           * Flag attached to the settings object so you can check in the draw
           * callback if filtering has been done in the draw. Deprecated in favour of
           * events.
           *  @type boolean
           *  @default false
           *  @deprecated
           */
          "bFiltered": false,

          /**
           * Flag attached to the settings object so you can check in the draw
           * callback if sorting has been done in the draw. Deprecated in favour of
           * events.
           *  @type boolean
           *  @default false
           *  @deprecated
           */
          "bSorted": false,

          /**
           * Indicate that if multiple rows are in the header and there is more than
           * one unique cell per column, if the top one (true) or bottom one (false)
           * should be used for sorting / title by DataTables.
           * Note that this parameter will be set by the initialisation routine. To
           * set a default use {@link DataTable.defaults}.
           *  @type boolean
           */
          "bSortCellsTop": null,

          /**
           * Initialisation object that is used for the table
           *  @type object
           *  @default null
           */
          "oInit": null,

          /**
           * Destroy callback functions - for plug-ins to attach themselves to the
           * destroy so they can clean up markup and events.
           *  @type array
           *  @default []
           */
          "aoDestroyCallback": [],

          /**
           * Get the number of records in the current record set, before filtering
           *  @type function
           */
          "fnRecordsTotal": function fnRecordsTotal() {
            return _fnDataSource(this) == 'ssp' ? this._iRecordsTotal * 1 : this.aiDisplayMaster.length;
          },

          /**
           * Get the number of records in the current record set, after filtering
           *  @type function
           */
          "fnRecordsDisplay": function fnRecordsDisplay() {
            return _fnDataSource(this) == 'ssp' ? this._iRecordsDisplay * 1 : this.aiDisplay.length;
          },

          /**
           * Get the display end point - aiDisplay index
           *  @type function
           */
          "fnDisplayEnd": function fnDisplayEnd() {
            var len = this._iDisplayLength,
                start = this._iDisplayStart,
                calc = start + len,
                records = this.aiDisplay.length,
                features = this.oFeatures,
                paginate = features.bPaginate;

            if (features.bServerSide) {
              return paginate === false || len === -1 ? start + records : Math.min(start + len, this._iRecordsDisplay);
            } else {
              return !paginate || calc > records || len === -1 ? records : calc;
            }
          },

          /**
           * The DataTables object for this table
           *  @type object
           *  @default null
           */
          "oInstance": null,

          /**
           * Unique identifier for each instance of the DataTables object. If there
           * is an ID on the table node, then it takes that value, otherwise an
           * incrementing internal counter is used.
           *  @type string
           *  @default null
           */
          "sInstance": null,

          /**
           * tabindex attribute value that is added to DataTables control elements, allowing
           * keyboard navigation of the table and its controls.
           */
          "iTabIndex": 0,

          /**
           * DIV container for the footer scrolling table if scrolling
           */
          "nScrollHead": null,

          /**
           * DIV container for the footer scrolling table if scrolling
           */
          "nScrollFoot": null,

          /**
           * Last applied sort
           *  @type array
           *  @default []
           */
          "aLastSort": [],

          /**
           * Stored plug-in instances
           *  @type object
           *  @default {}
           */
          "oPlugins": {},

          /**
           * Function used to get a row's id from the row's data
           *  @type function
           *  @default null
           */
          "rowIdFn": null,

          /**
           * Data location where to store a row's id
           *  @type string
           *  @default null
           */
          "rowId": null
        };
        /**
         * Extension object for DataTables that is used to provide all extension
         * options.
         *
         * Note that the `DataTable.ext` object is available through
         * `jQuery.fn.dataTable.ext` where it may be accessed and manipulated. It is
         * also aliased to `jQuery.fn.dataTableExt` for historic reasons.
         *  @namespace
         *  @extends DataTable.models.ext
         */

        /**
         * DataTables extensions
         * 
         * This namespace acts as a collection area for plug-ins that can be used to
         * extend DataTables capabilities. Indeed many of the build in methods
         * use this method to provide their own capabilities (sorting methods for
         * example).
         *
         * Note that this namespace is aliased to `jQuery.fn.dataTableExt` for legacy
         * reasons
         *
         *  @namespace
         */

        DataTable.ext = _ext = {
          /**
           * Buttons. For use with the Buttons extension for DataTables. This is
           * defined here so other extensions can define buttons regardless of load
           * order. It is _not_ used by DataTables core.
           *
           *  @type object
           *  @default {}
           */
          buttons: {},

          /**
           * Element class names
           *
           *  @type object
           *  @default {}
           */
          classes: {},

          /**
           * DataTables build type (expanded by the download builder)
           *
           *  @type string
           */
          builder: "-source-",

          /**
           * Error reporting.
           * 
           * How should DataTables report an error. Can take the value 'alert',
           * 'throw', 'none' or a function.
           *
           *  @type string|function
           *  @default alert
           */
          errMode: "alert",

          /**
           * Feature plug-ins.
           * 
           * This is an array of objects which describe the feature plug-ins that are
           * available to DataTables. These feature plug-ins are then available for
           * use through the `dom` initialisation option.
           * 
           * Each feature plug-in is described by an object which must have the
           * following properties:
           * 
           * * `fnInit` - function that is used to initialise the plug-in,
           * * `cFeature` - a character so the feature can be enabled by the `dom`
           *   instillation option. This is case sensitive.
           *
           * The `fnInit` function has the following input parameters:
           *
           * 1. `{object}` DataTables settings object: see
           *    {@link DataTable.models.oSettings}
           *
           * And the following return is expected:
           * 
           * * {node|null} The element which contains your feature. Note that the
           *   return may also be void if your plug-in does not require to inject any
           *   DOM elements into DataTables control (`dom`) - for example this might
           *   be useful when developing a plug-in which allows table control via
           *   keyboard entry
           *
           *  @type array
           *
           *  @example
           *    $.fn.dataTable.ext.features.push( {
           *      "fnInit": function( oSettings ) {
           *        return new TableTools( { "oDTSettings": oSettings } );
           *      },
           *      "cFeature": "T"
           *    } );
           */
          feature: [],

          /**
           * Row searching.
           * 
           * This method of searching is complimentary to the default type based
           * searching, and a lot more comprehensive as it allows you complete control
           * over the searching logic. Each element in this array is a function
           * (parameters described below) that is called for every row in the table,
           * and your logic decides if it should be included in the searching data set
           * or not.
           *
           * Searching functions have the following input parameters:
           *
           * 1. `{object}` DataTables settings object: see
           *    {@link DataTable.models.oSettings}
           * 2. `{array|object}` Data for the row to be processed (same as the
           *    original format that was passed in as the data source, or an array
           *    from a DOM data source
           * 3. `{int}` Row index ({@link DataTable.models.oSettings.aoData}), which
           *    can be useful to retrieve the `TR` element if you need DOM interaction.
           *
           * And the following return is expected:
           *
           * * {boolean} Include the row in the searched result set (true) or not
           *   (false)
           *
           * Note that as with the main search ability in DataTables, technically this
           * is "filtering", since it is subtractive. However, for consistency in
           * naming we call it searching here.
           *
           *  @type array
           *  @default []
           *
           *  @example
           *    // The following example shows custom search being applied to the
           *    // fourth column (i.e. the data[3] index) based on two input values
           *    // from the end-user, matching the data in a certain range.
           *    $.fn.dataTable.ext.search.push(
           *      function( settings, data, dataIndex ) {
           *        var min = document.getElementById('min').value * 1;
           *        var max = document.getElementById('max').value * 1;
           *        var version = data[3] == "-" ? 0 : data[3]*1;
           *
           *        if ( min == "" && max == "" ) {
           *          return true;
           *        }
           *        else if ( min == "" && version < max ) {
           *          return true;
           *        }
           *        else if ( min < version && "" == max ) {
           *          return true;
           *        }
           *        else if ( min < version && version < max ) {
           *          return true;
           *        }
           *        return false;
           *      }
           *    );
           */
          search: [],

          /**
           * Selector extensions
           *
           * The `selector` option can be used to extend the options available for the
           * selector modifier options (`selector-modifier` object data type) that
           * each of the three built in selector types offer (row, column and cell +
           * their plural counterparts). For example the Select extension uses this
           * mechanism to provide an option to select only rows, columns and cells
           * that have been marked as selected by the end user (`{selected: true}`),
           * which can be used in conjunction with the existing built in selector
           * options.
           *
           * Each property is an array to which functions can be pushed. The functions
           * take three attributes:
           *
           * * Settings object for the host table
           * * Options object (`selector-modifier` object type)
           * * Array of selected item indexes
           *
           * The return is an array of the resulting item indexes after the custom
           * selector has been applied.
           *
           *  @type object
           */
          selector: {
            cell: [],
            column: [],
            row: []
          },

          /**
           * Internal functions, exposed for used in plug-ins.
           * 
           * Please note that you should not need to use the internal methods for
           * anything other than a plug-in (and even then, try to avoid if possible).
           * The internal function may change between releases.
           *
           *  @type object
           *  @default {}
           */
          internal: {},

          /**
           * Legacy configuration options. Enable and disable legacy options that
           * are available in DataTables.
           *
           *  @type object
           */
          legacy: {
            /**
             * Enable / disable DataTables 1.9 compatible server-side processing
             * requests
             *
             *  @type boolean
             *  @default null
             */
            ajax: null
          },

          /**
           * Pagination plug-in methods.
           * 
           * Each entry in this object is a function and defines which buttons should
           * be shown by the pagination rendering method that is used for the table:
           * {@link DataTable.ext.renderer.pageButton}. The renderer addresses how the
           * buttons are displayed in the document, while the functions here tell it
           * what buttons to display. This is done by returning an array of button
           * descriptions (what each button will do).
           *
           * Pagination types (the four built in options and any additional plug-in
           * options defined here) can be used through the `paginationType`
           * initialisation parameter.
           *
           * The functions defined take two parameters:
           *
           * 1. `{int} page` The current page index
           * 2. `{int} pages` The number of pages in the table
           *
           * Each function is expected to return an array where each element of the
           * array can be one of:
           *
           * * `first` - Jump to first page when activated
           * * `last` - Jump to last page when activated
           * * `previous` - Show previous page when activated
           * * `next` - Show next page when activated
           * * `{int}` - Show page of the index given
           * * `{array}` - A nested array containing the above elements to add a
           *   containing 'DIV' element (might be useful for styling).
           *
           * Note that DataTables v1.9- used this object slightly differently whereby
           * an object with two functions would be defined for each plug-in. That
           * ability is still supported by DataTables 1.10+ to provide backwards
           * compatibility, but this option of use is now decremented and no longer
           * documented in DataTables 1.10+.
           *
           *  @type object
           *  @default {}
           *
           *  @example
           *    // Show previous, next and current page buttons only
           *    $.fn.dataTableExt.oPagination.current = function ( page, pages ) {
           *      return [ 'previous', page, 'next' ];
           *    };
           */
          pager: {},
          renderer: {
            pageButton: {},
            header: {}
          },

          /**
           * Ordering plug-ins - custom data source
           * 
           * The extension options for ordering of data available here is complimentary
           * to the default type based ordering that DataTables typically uses. It
           * allows much greater control over the the data that is being used to
           * order a column, but is necessarily therefore more complex.
           * 
           * This type of ordering is useful if you want to do ordering based on data
           * live from the DOM (for example the contents of an 'input' element) rather
           * than just the static string that DataTables knows of.
           * 
           * The way these plug-ins work is that you create an array of the values you
           * wish to be ordering for the column in question and then return that
           * array. The data in the array much be in the index order of the rows in
           * the table (not the currently ordering order!). Which order data gathering
           * function is run here depends on the `dt-init columns.orderDataType`
           * parameter that is used for the column (if any).
           *
           * The functions defined take two parameters:
           *
           * 1. `{object}` DataTables settings object: see
           *    {@link DataTable.models.oSettings}
           * 2. `{int}` Target column index
           *
           * Each function is expected to return an array:
           *
           * * `{array}` Data for the column to be ordering upon
           *
           *  @type array
           *
           *  @example
           *    // Ordering using `input` node values
           *    $.fn.dataTable.ext.order['dom-text'] = function  ( settings, col )
           *    {
           *      return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
           *        return $('input', td).val();
           *      } );
           *    }
           */
          order: {},

          /**
           * Type based plug-ins.
           *
           * Each column in DataTables has a type assigned to it, either by automatic
           * detection or by direct assignment using the `type` option for the column.
           * The type of a column will effect how it is ordering and search (plug-ins
           * can also make use of the column type if required).
           *
           * @namespace
           */
          type: {
            /**
             * Type detection functions.
             *
             * The functions defined in this object are used to automatically detect
             * a column's type, making initialisation of DataTables super easy, even
             * when complex data is in the table.
             *
             * The functions defined take two parameters:
             *
                *  1. `{*}` Data from the column cell to be analysed
                *  2. `{settings}` DataTables settings object. This can be used to
                *     perform context specific type detection - for example detection
                *     based on language settings such as using a comma for a decimal
                *     place. Generally speaking the options from the settings will not
                *     be required
             *
             * Each function is expected to return:
             *
             * * `{string|null}` Data type detected, or null if unknown (and thus
             *   pass it on to the other type detection functions.
             *
             *  @type array
             *
             *  @example
             *    // Currency type detection plug-in:
             *    $.fn.dataTable.ext.type.detect.push(
             *      function ( data, settings ) {
             *        // Check the numeric part
             *        if ( ! data.substring(1).match(/[0-9]/) ) {
             *          return null;
             *        }
             *
             *        // Check prefixed by currency
             *        if ( data.charAt(0) == '$' || data.charAt(0) == '&pound;' ) {
             *          return 'currency';
             *        }
             *        return null;
             *      }
             *    );
             */
            detect: [],

            /**
             * Type based search formatting.
             *
             * The type based searching functions can be used to pre-format the
             * data to be search on. For example, it can be used to strip HTML
             * tags or to de-format telephone numbers for numeric only searching.
             *
             * Note that is a search is not defined for a column of a given type,
             * no search formatting will be performed.
             * 
             * Pre-processing of searching data plug-ins - When you assign the sType
             * for a column (or have it automatically detected for you by DataTables
             * or a type detection plug-in), you will typically be using this for
             * custom sorting, but it can also be used to provide custom searching
             * by allowing you to pre-processing the data and returning the data in
             * the format that should be searched upon. This is done by adding
             * functions this object with a parameter name which matches the sType
             * for that target column. This is the corollary of <i>afnSortData</i>
             * for searching data.
             *
             * The functions defined take a single parameter:
             *
                *  1. `{*}` Data from the column cell to be prepared for searching
             *
             * Each function is expected to return:
             *
             * * `{string|null}` Formatted string that will be used for the searching.
             *
             *  @type object
             *  @default {}
             *
             *  @example
             *    $.fn.dataTable.ext.type.search['title-numeric'] = function ( d ) {
             *      return d.replace(/\n/g," ").replace( /<.*?>/g, "" );
             *    }
             */
            search: {},

            /**
             * Type based ordering.
             *
             * The column type tells DataTables what ordering to apply to the table
             * when a column is sorted upon. The order for each type that is defined,
             * is defined by the functions available in this object.
             *
             * Each ordering option can be described by three properties added to
             * this object:
             *
             * * `{type}-pre` - Pre-formatting function
             * * `{type}-asc` - Ascending order function
             * * `{type}-desc` - Descending order function
             *
             * All three can be used together, only `{type}-pre` or only
             * `{type}-asc` and `{type}-desc` together. It is generally recommended
             * that only `{type}-pre` is used, as this provides the optimal
             * implementation in terms of speed, although the others are provided
             * for compatibility with existing Javascript sort functions.
             *
             * `{type}-pre`: Functions defined take a single parameter:
             *
                *  1. `{*}` Data from the column cell to be prepared for ordering
             *
             * And return:
             *
             * * `{*}` Data to be sorted upon
             *
             * `{type}-asc` and `{type}-desc`: Functions are typical Javascript sort
             * functions, taking two parameters:
             *
                *  1. `{*}` Data to compare to the second parameter
                *  2. `{*}` Data to compare to the first parameter
             *
             * And returning:
             *
             * * `{*}` Ordering match: <0 if first parameter should be sorted lower
             *   than the second parameter, ===0 if the two parameters are equal and
             *   >0 if the first parameter should be sorted height than the second
             *   parameter.
             * 
             *  @type object
             *  @default {}
             *
             *  @example
             *    // Numeric ordering of formatted numbers with a pre-formatter
             *    $.extend( $.fn.dataTable.ext.type.order, {
             *      "string-pre": function(x) {
             *        a = (a === "-" || a === "") ? 0 : a.replace( /[^\d\-\.]/g, "" );
             *        return parseFloat( a );
             *      }
             *    } );
             *
             *  @example
             *    // Case-sensitive string ordering, with no pre-formatting method
             *    $.extend( $.fn.dataTable.ext.order, {
             *      "string-case-asc": function(x,y) {
             *        return ((x < y) ? -1 : ((x > y) ? 1 : 0));
             *      },
             *      "string-case-desc": function(x,y) {
             *        return ((x < y) ? 1 : ((x > y) ? -1 : 0));
             *      }
             *    } );
             */
            order: {}
          },

          /**
           * Unique DataTables instance counter
           *
           * @type int
           * @private
           */
          _unique: 0,
          //
          // Depreciated
          // The following properties are retained for backwards compatiblity only.
          // The should not be used in new projects and will be removed in a future
          // version
          //

          /**
           * Version check function.
           *  @type function
           *  @depreciated Since 1.10
           */
          fnVersionCheck: DataTable.fnVersionCheck,

          /**
           * Index for what 'this' index API functions should use
           *  @type int
           *  @deprecated Since v1.10
           */
          iApiIndex: 0,

          /**
           * jQuery UI class container
           *  @type object
           *  @deprecated Since v1.10
           */
          oJUIClasses: {},

          /**
           * Software version
           *  @type string
           *  @deprecated Since v1.10
           */
          sVersion: DataTable.version
        }; //
        // Backwards compatibility. Alias to pre 1.10 Hungarian notation counter parts
        //

        $.extend(_ext, {
          afnFiltering: _ext.search,
          aTypes: _ext.type.detect,
          ofnSearch: _ext.type.search,
          oSort: _ext.type.order,
          afnSortData: _ext.order,
          aoFeatures: _ext.feature,
          oApi: _ext.internal,
          oStdClasses: _ext.classes,
          oPagination: _ext.pager
        });
        $.extend(DataTable.ext.classes, {
          "sTable": "dataTable",
          "sNoFooter": "no-footer",

          /* Paging buttons */
          "sPageButton": "paginate_button",
          "sPageButtonActive": "current",
          "sPageButtonDisabled": "disabled",

          /* Striping classes */
          "sStripeOdd": "odd",
          "sStripeEven": "even",

          /* Empty row */
          "sRowEmpty": "dataTables_empty",

          /* Features */
          "sWrapper": "dataTables_wrapper",
          "sFilter": "dataTables_filter",
          "sInfo": "dataTables_info",
          "sPaging": "dataTables_paginate paging_",

          /* Note that the type is postfixed */
          "sLength": "dataTables_length",
          "sProcessing": "dataTables_processing",

          /* Sorting */
          "sSortAsc": "sorting_asc",
          "sSortDesc": "sorting_desc",
          "sSortable": "sorting",

          /* Sortable in both directions */
          "sSortableAsc": "sorting_asc_disabled",
          "sSortableDesc": "sorting_desc_disabled",
          "sSortableNone": "sorting_disabled",
          "sSortColumn": "sorting_",

          /* Note that an int is postfixed for the sorting order */

          /* Filtering */
          "sFilterInput": "",

          /* Page length */
          "sLengthSelect": "",

          /* Scrolling */
          "sScrollWrapper": "dataTables_scroll",
          "sScrollHead": "dataTables_scrollHead",
          "sScrollHeadInner": "dataTables_scrollHeadInner",
          "sScrollBody": "dataTables_scrollBody",
          "sScrollFoot": "dataTables_scrollFoot",
          "sScrollFootInner": "dataTables_scrollFootInner",

          /* Misc */
          "sHeaderTH": "",
          "sFooterTH": "",
          // Deprecated
          "sSortJUIAsc": "",
          "sSortJUIDesc": "",
          "sSortJUI": "",
          "sSortJUIAscAllowed": "",
          "sSortJUIDescAllowed": "",
          "sSortJUIWrapper": "",
          "sSortIcon": "",
          "sJUIHeader": "",
          "sJUIFooter": ""
        });
        var extPagination = DataTable.ext.pager;

        function _numbers(page, pages) {
          var numbers = [],
              buttons = extPagination.numbers_length,
              half = Math.floor(buttons / 2),
              i = 1;

          if (pages <= buttons) {
            numbers = _range(0, pages);
          } else if (page <= half) {
            numbers = _range(0, buttons - 2);
            numbers.push('ellipsis');
            numbers.push(pages - 1);
          } else if (page >= pages - 1 - half) {
            numbers = _range(pages - (buttons - 2), pages);
            numbers.splice(0, 0, 'ellipsis'); // no unshift in ie6

            numbers.splice(0, 0, 0);
          } else {
            numbers = _range(page - half + 2, page + half - 1);
            numbers.push('ellipsis');
            numbers.push(pages - 1);
            numbers.splice(0, 0, 'ellipsis');
            numbers.splice(0, 0, 0);
          }

          numbers.DT_el = 'span';
          return numbers;
        }

        $.extend(extPagination, {
          simple: function simple(page, pages) {
            return ['previous', 'next'];
          },
          full: function full(page, pages) {
            return ['first', 'previous', 'next', 'last'];
          },
          numbers: function numbers(page, pages) {
            return [_numbers(page, pages)];
          },
          simple_numbers: function simple_numbers(page, pages) {
            return ['previous', _numbers(page, pages), 'next'];
          },
          full_numbers: function full_numbers(page, pages) {
            return ['first', 'previous', _numbers(page, pages), 'next', 'last'];
          },
          first_last_numbers: function first_last_numbers(page, pages) {
            return ['first', _numbers(page, pages), 'last'];
          },
          // For testing and plug-ins to use
          _numbers: _numbers,
          // Number of number buttons (including ellipsis) to show. _Must be odd!_
          numbers_length: 7
        });
        $.extend(true, DataTable.ext.renderer, {
          pageButton: {
            _: function _(settings, host, idx, buttons, page, pages) {
              var classes = settings.oClasses;
              var lang = settings.oLanguage.oPaginate;
              var aria = settings.oLanguage.oAria.paginate || {};
              var btnDisplay,
                  btnClass,
                  counter = 0;

              var attach = function attach(container, buttons) {
                var i, ien, node, button, tabIndex;
                var disabledClass = classes.sPageButtonDisabled;

                var clickHandler = function clickHandler(e) {
                  _fnPageChange(settings, e.data.action, true);
                };

                for (i = 0, ien = buttons.length; i < ien; i++) {
                  button = buttons[i];

                  if (Array.isArray(button)) {
                    var inner = $('<' + (button.DT_el || 'div') + '/>').appendTo(container);
                    attach(inner, button);
                  } else {
                    btnDisplay = null;
                    btnClass = button;
                    tabIndex = settings.iTabIndex;

                    switch (button) {
                      case 'ellipsis':
                        container.append('<span class="ellipsis">&#x2026;</span>');
                        break;

                      case 'first':
                        btnDisplay = lang.sFirst;

                        if (page === 0) {
                          tabIndex = -1;
                          btnClass += ' ' + disabledClass;
                        }

                        break;

                      case 'previous':
                        btnDisplay = lang.sPrevious;

                        if (page === 0) {
                          tabIndex = -1;
                          btnClass += ' ' + disabledClass;
                        }

                        break;

                      case 'next':
                        btnDisplay = lang.sNext;

                        if (pages === 0 || page === pages - 1) {
                          tabIndex = -1;
                          btnClass += ' ' + disabledClass;
                        }

                        break;

                      case 'last':
                        btnDisplay = lang.sLast;

                        if (pages === 0 || page === pages - 1) {
                          tabIndex = -1;
                          btnClass += ' ' + disabledClass;
                        }

                        break;

                      default:
                        btnDisplay = settings.fnFormatNumber(button + 1);
                        btnClass = page === button ? classes.sPageButtonActive : '';
                        break;
                    }

                    if (btnDisplay !== null) {
                      node = $('<a>', {
                        'class': classes.sPageButton + ' ' + btnClass,
                        'aria-controls': settings.sTableId,
                        'aria-label': aria[button],
                        'data-dt-idx': counter,
                        'tabindex': tabIndex,
                        'id': idx === 0 && typeof button === 'string' ? settings.sTableId + '_' + button : null
                      }).html(btnDisplay).appendTo(container);

                      _fnBindAction(node, {
                        action: button
                      }, clickHandler);

                      counter++;
                    }
                  }
                }
              }; // IE9 throws an 'unknown error' if document.activeElement is used
              // inside an iframe or frame. Try / catch the error. Not good for
              // accessibility, but neither are frames.


              var activeEl;

              try {
                // Because this approach is destroying and recreating the paging
                // elements, focus is lost on the select button which is bad for
                // accessibility. So we want to restore focus once the draw has
                // completed
                activeEl = $(host).find(document.activeElement).data('dt-idx');
              } catch (e) {}

              attach($(host).empty(), buttons);

              if (activeEl !== undefined) {
                $(host).find('[data-dt-idx=' + activeEl + ']').trigger('focus');
              }
            }
          }
        }); // Built in type detection. See model.ext.aTypes for information about
        // what is required from this methods.

        $.extend(DataTable.ext.type.detect, [// Plain numbers - first since V8 detects some plain numbers as dates
        // e.g. Date.parse('55') (but not all, e.g. Date.parse('22')...).
        function (d, settings) {
          var decimal = settings.oLanguage.sDecimal;
          return _isNumber(d, decimal) ? 'num' + decimal : null;
        }, // Dates (only those recognised by the browser's Date.parse)
        function (d, settings) {
          // V8 tries _very_ hard to make a string passed into `Date.parse()`
          // valid, so we need to use a regex to restrict date formats. Use a
          // plug-in for anything other than ISO8601 style strings
          if (d && !(d instanceof Date) && !_re_date.test(d)) {
            return null;
          }

          var parsed = Date.parse(d);
          return parsed !== null && !isNaN(parsed) || _empty(d) ? 'date' : null;
        }, // Formatted numbers
        function (d, settings) {
          var decimal = settings.oLanguage.sDecimal;
          return _isNumber(d, decimal, true) ? 'num-fmt' + decimal : null;
        }, // HTML numeric
        function (d, settings) {
          var decimal = settings.oLanguage.sDecimal;
          return _htmlNumeric(d, decimal) ? 'html-num' + decimal : null;
        }, // HTML numeric, formatted
        function (d, settings) {
          var decimal = settings.oLanguage.sDecimal;
          return _htmlNumeric(d, decimal, true) ? 'html-num-fmt' + decimal : null;
        }, // HTML (this is strict checking - there must be html)
        function (d, settings) {
          return _empty(d) || typeof d === 'string' && d.indexOf('<') !== -1 ? 'html' : null;
        }]); // Filter formatting functions. See model.ext.ofnSearch for information about
        // what is required from these methods.
        // 
        // Note that additional search methods are added for the html numbers and
        // html formatted numbers by `_addNumericSort()` when we know what the decimal
        // place is

        $.extend(DataTable.ext.type.search, {
          html: function html(data) {
            return _empty(data) ? data : typeof data === 'string' ? data.replace(_re_new_lines, " ").replace(_re_html, "") : '';
          },
          string: function string(data) {
            return _empty(data) ? data : typeof data === 'string' ? data.replace(_re_new_lines, " ") : data;
          }
        });

        var __numericReplace = function __numericReplace(d, decimalPlace, re1, re2) {
          if (d !== 0 && (!d || d === '-')) {
            return -Infinity;
          } // If a decimal place other than `.` is used, it needs to be given to the
          // function so we can detect it and replace with a `.` which is the only
          // decimal place Javascript recognises - it is not locale aware.


          if (decimalPlace) {
            d = _numToDecimal(d, decimalPlace);
          }

          if (d.replace) {
            if (re1) {
              d = d.replace(re1, '');
            }

            if (re2) {
              d = d.replace(re2, '');
            }
          }

          return d * 1;
        }; // Add the numeric 'deformatting' functions for sorting and search. This is done
        // in a function to provide an easy ability for the language options to add
        // additional methods if a non-period decimal place is used.


        function _addNumericSort(decimalPlace) {
          $.each({
            // Plain numbers
            "num": function num(d) {
              return __numericReplace(d, decimalPlace);
            },
            // Formatted numbers
            "num-fmt": function numFmt(d) {
              return __numericReplace(d, decimalPlace, _re_formatted_numeric);
            },
            // HTML numeric
            "html-num": function htmlNum(d) {
              return __numericReplace(d, decimalPlace, _re_html);
            },
            // HTML numeric, formatted
            "html-num-fmt": function htmlNumFmt(d) {
              return __numericReplace(d, decimalPlace, _re_html, _re_formatted_numeric);
            }
          }, function (key, fn) {
            // Add the ordering method
            _ext.type.order[key + decimalPlace + '-pre'] = fn; // For HTML types add a search formatter that will strip the HTML

            if (key.match(/^html\-/)) {
              _ext.type.search[key + decimalPlace] = _ext.type.search.html;
            }
          });
        } // Default sort methods


        $.extend(_ext.type.order, {
          // Dates
          "date-pre": function datePre(d) {
            var ts = Date.parse(d);
            return isNaN(ts) ? -Infinity : ts;
          },
          // html
          "html-pre": function htmlPre(a) {
            return _empty(a) ? '' : a.replace ? a.replace(/<.*?>/g, "").toLowerCase() : a + '';
          },
          // string
          "string-pre": function stringPre(a) {
            // This is a little complex, but faster than always calling toString,
            // http://jsperf.com/tostring-v-check
            return _empty(a) ? '' : typeof a === 'string' ? a.toLowerCase() : !a.toString ? '' : a.toString();
          },
          // string-asc and -desc are retained only for compatibility with the old
          // sort methods
          "string-asc": function stringAsc(x, y) {
            return x < y ? -1 : x > y ? 1 : 0;
          },
          "string-desc": function stringDesc(x, y) {
            return x < y ? 1 : x > y ? -1 : 0;
          }
        }); // Numeric sorting types - order doesn't matter here

        _addNumericSort('');

        $.extend(true, DataTable.ext.renderer, {
          header: {
            _: function _(settings, cell, column, classes) {
              // No additional mark-up required
              // Attach a sort listener to update on sort - note that using the
              // `DT` namespace will allow the event to be removed automatically
              // on destroy, while the `dt` namespaced event is the one we are
              // listening for
              $(settings.nTable).on('order.dt.DT', function (e, ctx, sorting, columns) {
                if (settings !== ctx) {
                  // need to check this this is the host
                  return; // table, not a nested one
                }

                var colIdx = column.idx;
                cell.removeClass(column.sSortingClass + ' ' + classes.sSortAsc + ' ' + classes.sSortDesc).addClass(columns[colIdx] == 'asc' ? classes.sSortAsc : columns[colIdx] == 'desc' ? classes.sSortDesc : column.sSortingClass);
              });
            },
            jqueryui: function jqueryui(settings, cell, column, classes) {
              $('<div/>').addClass(classes.sSortJUIWrapper).append(cell.contents()).append($('<span/>').addClass(classes.sSortIcon + ' ' + column.sSortingClassJUI)).appendTo(cell); // Attach a sort listener to update on sort

              $(settings.nTable).on('order.dt.DT', function (e, ctx, sorting, columns) {
                if (settings !== ctx) {
                  return;
                }

                var colIdx = column.idx;
                cell.removeClass(classes.sSortAsc + " " + classes.sSortDesc).addClass(columns[colIdx] == 'asc' ? classes.sSortAsc : columns[colIdx] == 'desc' ? classes.sSortDesc : column.sSortingClass);
                cell.find('span.' + classes.sSortIcon).removeClass(classes.sSortJUIAsc + " " + classes.sSortJUIDesc + " " + classes.sSortJUI + " " + classes.sSortJUIAscAllowed + " " + classes.sSortJUIDescAllowed).addClass(columns[colIdx] == 'asc' ? classes.sSortJUIAsc : columns[colIdx] == 'desc' ? classes.sSortJUIDesc : column.sSortingClassJUI);
              });
            }
          }
        });
        /*
         * Public helper functions. These aren't used internally by DataTables, or
         * called by any of the options passed into DataTables, but they can be used
         * externally by developers working with DataTables. They are helper functions
         * to make working with DataTables a little bit easier.
         */

        var __htmlEscapeEntities = function __htmlEscapeEntities(d) {
          return typeof d === 'string' ? d.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;') : d;
        };
        /**
         * Helpers for `columns.render`.
         *
         * The options defined here can be used with the `columns.render` initialisation
         * option to provide a display renderer. The following functions are defined:
         *
         * * `number` - Will format numeric data (defined by `columns.data`) for
         *   display, retaining the original unformatted data for sorting and filtering.
         *   It takes 5 parameters:
         *   * `string` - Thousands grouping separator
         *   * `string` - Decimal point indicator
         *   * `integer` - Number of decimal points to show
         *   * `string` (optional) - Prefix.
         *   * `string` (optional) - Postfix (/suffix).
         * * `text` - Escape HTML to help prevent XSS attacks. It has no optional
         *   parameters.
         *
         * @example
         *   // Column definition using the number renderer
         *   {
         *     data: "salary",
         *     render: $.fn.dataTable.render.number( '\'', '.', 0, '$' )
         *   }
         *
         * @namespace
         */


        DataTable.render = {
          number: function number(thousands, decimal, precision, prefix, postfix) {
            return {
              display: function display(d) {
                if (typeof d !== 'number' && typeof d !== 'string') {
                  return d;
                }

                var negative = d < 0 ? '-' : '';
                var flo = parseFloat(d); // If NaN then there isn't much formatting that we can do - just
                // return immediately, escaping any HTML (this was supposed to
                // be a number after all)

                if (isNaN(flo)) {
                  return __htmlEscapeEntities(d);
                }

                flo = flo.toFixed(precision);
                d = Math.abs(flo);
                var intPart = parseInt(d, 10);
                var floatPart = precision ? decimal + (d - intPart).toFixed(precision).substring(2) : '';
                return negative + (prefix || '') + intPart.toString().replace(/\B(?=(\d{3})+(?!\d))/g, thousands) + floatPart + (postfix || '');
              }
            };
          },
          text: function text() {
            return {
              display: __htmlEscapeEntities,
              filter: __htmlEscapeEntities
            };
          }
        };
        /*
         * This is really a good bit rubbish this method of exposing the internal methods
         * publicly... - To be fixed in 2.0 using methods on the prototype
         */

        /**
         * Create a wrapper function for exporting an internal functions to an external API.
         *  @param {string} fn API function name
         *  @returns {function} wrapped function
         *  @memberof DataTable#internal
         */

        function _fnExternApiFunc(fn) {
          return function () {
            var args = [_fnSettingsFromNode(this[DataTable.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));
            return DataTable.ext.internal[fn].apply(this, args);
          };
        }
        /**
         * Reference to internal functions for use by plug-in developers. Note that
         * these methods are references to internal functions and are considered to be
         * private. If you use these methods, be aware that they are liable to change
         * between versions.
         *  @namespace
         */


        $.extend(DataTable.ext.internal, {
          _fnExternApiFunc: _fnExternApiFunc,
          _fnBuildAjax: _fnBuildAjax,
          _fnAjaxUpdate: _fnAjaxUpdate,
          _fnAjaxParameters: _fnAjaxParameters,
          _fnAjaxUpdateDraw: _fnAjaxUpdateDraw,
          _fnAjaxDataSrc: _fnAjaxDataSrc,
          _fnAddColumn: _fnAddColumn,
          _fnColumnOptions: _fnColumnOptions,
          _fnAdjustColumnSizing: _fnAdjustColumnSizing,
          _fnVisibleToColumnIndex: _fnVisibleToColumnIndex,
          _fnColumnIndexToVisible: _fnColumnIndexToVisible,
          _fnVisbleColumns: _fnVisbleColumns,
          _fnGetColumns: _fnGetColumns,
          _fnColumnTypes: _fnColumnTypes,
          _fnApplyColumnDefs: _fnApplyColumnDefs,
          _fnHungarianMap: _fnHungarianMap,
          _fnCamelToHungarian: _fnCamelToHungarian,
          _fnLanguageCompat: _fnLanguageCompat,
          _fnBrowserDetect: _fnBrowserDetect,
          _fnAddData: _fnAddData,
          _fnAddTr: _fnAddTr,
          _fnNodeToDataIndex: _fnNodeToDataIndex,
          _fnNodeToColumnIndex: _fnNodeToColumnIndex,
          _fnGetCellData: _fnGetCellData,
          _fnSetCellData: _fnSetCellData,
          _fnSplitObjNotation: _fnSplitObjNotation,
          _fnGetObjectDataFn: _fnGetObjectDataFn,
          _fnSetObjectDataFn: _fnSetObjectDataFn,
          _fnGetDataMaster: _fnGetDataMaster,
          _fnClearTable: _fnClearTable,
          _fnDeleteIndex: _fnDeleteIndex,
          _fnInvalidate: _fnInvalidate,
          _fnGetRowElements: _fnGetRowElements,
          _fnCreateTr: _fnCreateTr,
          _fnBuildHead: _fnBuildHead,
          _fnDrawHead: _fnDrawHead,
          _fnDraw: _fnDraw,
          _fnReDraw: _fnReDraw,
          _fnAddOptionsHtml: _fnAddOptionsHtml,
          _fnDetectHeader: _fnDetectHeader,
          _fnGetUniqueThs: _fnGetUniqueThs,
          _fnFeatureHtmlFilter: _fnFeatureHtmlFilter,
          _fnFilterComplete: _fnFilterComplete,
          _fnFilterCustom: _fnFilterCustom,
          _fnFilterColumn: _fnFilterColumn,
          _fnFilter: _fnFilter,
          _fnFilterCreateSearch: _fnFilterCreateSearch,
          _fnEscapeRegex: _fnEscapeRegex,
          _fnFilterData: _fnFilterData,
          _fnFeatureHtmlInfo: _fnFeatureHtmlInfo,
          _fnUpdateInfo: _fnUpdateInfo,
          _fnInfoMacros: _fnInfoMacros,
          _fnInitialise: _fnInitialise,
          _fnInitComplete: _fnInitComplete,
          _fnLengthChange: _fnLengthChange,
          _fnFeatureHtmlLength: _fnFeatureHtmlLength,
          _fnFeatureHtmlPaginate: _fnFeatureHtmlPaginate,
          _fnPageChange: _fnPageChange,
          _fnFeatureHtmlProcessing: _fnFeatureHtmlProcessing,
          _fnProcessingDisplay: _fnProcessingDisplay,
          _fnFeatureHtmlTable: _fnFeatureHtmlTable,
          _fnScrollDraw: _fnScrollDraw,
          _fnApplyToChildren: _fnApplyToChildren,
          _fnCalculateColumnWidths: _fnCalculateColumnWidths,
          _fnThrottle: _fnThrottle,
          _fnConvertToWidth: _fnConvertToWidth,
          _fnGetWidestNode: _fnGetWidestNode,
          _fnGetMaxLenString: _fnGetMaxLenString,
          _fnStringToCss: _fnStringToCss,
          _fnSortFlatten: _fnSortFlatten,
          _fnSort: _fnSort,
          _fnSortAria: _fnSortAria,
          _fnSortListener: _fnSortListener,
          _fnSortAttachListener: _fnSortAttachListener,
          _fnSortingClasses: _fnSortingClasses,
          _fnSortData: _fnSortData,
          _fnSaveState: _fnSaveState,
          _fnLoadState: _fnLoadState,
          _fnSettingsFromNode: _fnSettingsFromNode,
          _fnLog: _fnLog,
          _fnMap: _fnMap,
          _fnBindAction: _fnBindAction,
          _fnCallbackReg: _fnCallbackReg,
          _fnCallbackFire: _fnCallbackFire,
          _fnLengthOverflow: _fnLengthOverflow,
          _fnRenderer: _fnRenderer,
          _fnDataSource: _fnDataSource,
          _fnRowAttributes: _fnRowAttributes,
          _fnExtend: _fnExtend,
          _fnCalculateEnd: function _fnCalculateEnd() {} // Used by a lot of plug-ins, but redundant
          // in 1.10, so this dead-end function is
          // added to prevent errors

        }); // jQuery access

        $.fn.dataTable = DataTable; // Provide access to the host jQuery object (circular reference)

        DataTable.$ = $; // Legacy aliases

        $.fn.dataTableSettings = DataTable.settings;
        $.fn.dataTableExt = DataTable.ext; // With a capital `D` we return a DataTables API instance rather than a
        // jQuery object

        $.fn.DataTable = function (opts) {
          return $(this).dataTable(opts).api();
        }; // All properties that are available to $.fn.dataTable should also be
        // available on $.fn.DataTable


        $.each(DataTable, function (prop, val) {
          $.fn.DataTable[prop] = val;
        }); // Information about events fired by DataTables - for documentation.

        /**
         * Draw event, fired whenever the table is redrawn on the page, at the same
         * point as fnDrawCallback. This may be useful for binding events or
         * performing calculations when the table is altered at all.
         *  @name DataTable#draw.dt
         *  @event
         *  @param {event} e jQuery event object
         *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
         */

        /**
         * Search event, fired when the searching applied to the table (using the
         * built-in global search, or column filters) is altered.
         *  @name DataTable#search.dt
         *  @event
         *  @param {event} e jQuery event object
         *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
         */

        /**
         * Page change event, fired when the paging of the table is altered.
         *  @name DataTable#page.dt
         *  @event
         *  @param {event} e jQuery event object
         *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
         */

        /**
         * Order event, fired when the ordering applied to the table is altered.
         *  @name DataTable#order.dt
         *  @event
         *  @param {event} e jQuery event object
         *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
         */

        /**
         * DataTables initialisation complete event, fired when the table is fully
         * drawn, including Ajax data loaded, if Ajax data is required.
         *  @name DataTable#init.dt
         *  @event
         *  @param {event} e jQuery event object
         *  @param {object} oSettings DataTables settings object
         *  @param {object} json The JSON object request from the server - only
         *    present if client-side Ajax sourced data is used</li></ol>
         */

        /**
         * State save event, fired when the table has changed state a new state save
         * is required. This event allows modification of the state saving object
         * prior to actually doing the save, including addition or other state
         * properties (for plug-ins) or modification of a DataTables core property.
         *  @name DataTable#stateSaveParams.dt
         *  @event
         *  @param {event} e jQuery event object
         *  @param {object} oSettings DataTables settings object
         *  @param {object} json The state information to be saved
         */

        /**
         * State load event, fired when the table is loading state from the stored
         * data, but prior to the settings object being modified by the saved state
         * - allowing modification of the saved state is required or loading of
         * state for a plug-in.
         *  @name DataTable#stateLoadParams.dt
         *  @event
         *  @param {event} e jQuery event object
         *  @param {object} oSettings DataTables settings object
         *  @param {object} json The saved state information
         */

        /**
         * State loaded event, fired when state has been loaded from stored data and
         * the settings object has been modified by the loaded data.
         *  @name DataTable#stateLoaded.dt
         *  @event
         *  @param {event} e jQuery event object
         *  @param {object} oSettings DataTables settings object
         *  @param {object} json The saved state information
         */

        /**
         * Processing event, fired when DataTables is doing some kind of processing
         * (be it, order, search or anything else). It can be used to indicate to
         * the end user that there is something happening, or that something has
         * finished.
         *  @name DataTable#processing.dt
         *  @event
         *  @param {event} e jQuery event object
         *  @param {object} oSettings DataTables settings object
         *  @param {boolean} bShow Flag for if DataTables is doing processing or not
         */

        /**
         * Ajax (XHR) event, fired whenever an Ajax request is completed from a
         * request to made to the server for new data. This event is called before
         * DataTables processed the returned data, so it can also be used to pre-
         * process the data returned from the server, if needed.
         *
         * Note that this trigger is called in `fnServerData`, if you override
         * `fnServerData` and which to use this event, you need to trigger it in you
         * success function.
         *  @name DataTable#xhr.dt
         *  @event
         *  @param {event} e jQuery event object
         *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
         *  @param {object} json JSON returned from the server
         *
         *  @example
         *     // Use a custom property returned from the server in another DOM element
         *     $('#table').dataTable().on('xhr.dt', function (e, settings, json) {
         *       $('#status').html( json.status );
         *     } );
         *
         *  @example
         *     // Pre-process the data returned from the server
         *     $('#table').dataTable().on('xhr.dt', function (e, settings, json) {
         *       for ( var i=0, ien=json.aaData.length ; i<ien ; i++ ) {
         *         json.aaData[i].sum = json.aaData[i].one + json.aaData[i].two;
         *       }
         *       // Note no return - manipulate the data directly in the JSON object.
         *     } );
         */

        /**
         * Destroy event, fired when the DataTable is destroyed by calling fnDestroy
         * or passing the bDestroy:true parameter in the initialisation object. This
         * can be used to remove bound events, added DOM nodes, etc.
         *  @name DataTable#destroy.dt
         *  @event
         *  @param {event} e jQuery event object
         *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
         */

        /**
         * Page length change event, fired when number of records to show on each
         * page (the length) is changed.
         *  @name DataTable#length.dt
         *  @event
         *  @param {event} e jQuery event object
         *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
         *  @param {integer} len New length
         */

        /**
         * Column sizing has changed.
         *  @name DataTable#column-sizing.dt
         *  @event
         *  @param {event} e jQuery event object
         *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
         */

        /**
         * Column visibility has changed.
         *  @name DataTable#column-visibility.dt
         *  @event
         *  @param {event} e jQuery event object
         *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
         *  @param {int} column Column index
         *  @param {bool} vis `false` if column now hidden, or `true` if visible
         */

        return $.fn.dataTable;
      });
      /***/

    },

    /***/
    "Fnuy":
    /*!**********************************************!*\
      !*** ./node_modules/moment/locale/oc-lnc.js ***!
      \**********************************************/

    /*! no static exports found */

    /***/
    function Fnuy(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Occitan, lengadocian dialecte [oc-lnc]
      //! author : Quentin PAGÈS : https://github.com/Quenty31
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var ocLnc = moment.defineLocale('oc-lnc', {
          months: {
            standalone: 'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split('_'),
            format: "de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre".split('_'),
            isFormat: /D[oD]?(\s)+MMMM/
          },
          monthsShort: 'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split('_'),
          monthsParseExact: true,
          weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split('_'),
          weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),
          weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM [de] YYYY',
            ll: 'D MMM YYYY',
            LLL: 'D MMMM [de] YYYY [a] H:mm',
            lll: 'D MMM YYYY, H:mm',
            LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',
            llll: 'ddd D MMM YYYY, H:mm'
          },
          calendar: {
            sameDay: '[uèi a] LT',
            nextDay: '[deman a] LT',
            nextWeek: 'dddd [a] LT',
            lastDay: '[ièr a] LT',
            lastWeek: 'dddd [passat a] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: "d'aquí %s",
            past: 'fa %s',
            s: 'unas segondas',
            ss: '%d segondas',
            m: 'una minuta',
            mm: '%d minutas',
            h: 'una ora',
            hh: '%d oras',
            d: 'un jorn',
            dd: '%d jorns',
            M: 'un mes',
            MM: '%d meses',
            y: 'un an',
            yy: '%d ans'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/,
          ordinal: function ordinal(number, period) {
            var output = number === 1 ? 'r' : number === 2 ? 'n' : number === 3 ? 'r' : number === 4 ? 't' : 'è';

            if (period === 'w' || period === 'W') {
              output = 'a';
            }

            return number + output;
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4
          }
        });
        return ocLnc;
      });
      /***/

    },

    /***/
    "FtGj":
    /*!*********************************************************************!*\
      !*** ./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/keycodes.js ***!
      \*********************************************************************/

    /*! exports provided: A, ALT, APOSTROPHE, AT_SIGN, B, BACKSLASH, BACKSPACE, C, CAPS_LOCK, CLOSE_SQUARE_BRACKET, COMMA, CONTEXT_MENU, CONTROL, D, DASH, DELETE, DOWN_ARROW, E, EIGHT, END, ENTER, EQUALS, ESCAPE, F, F1, F10, F11, F12, F2, F3, F4, F5, F6, F7, F8, F9, FF_EQUALS, FF_MINUS, FF_MUTE, FF_SEMICOLON, FF_VOLUME_DOWN, FF_VOLUME_UP, FIRST_MEDIA, FIVE, FOUR, G, H, HOME, I, INSERT, J, K, L, LAST_MEDIA, LEFT_ARROW, M, MAC_ENTER, MAC_META, MAC_WK_CMD_LEFT, MAC_WK_CMD_RIGHT, META, MUTE, N, NINE, NUMPAD_DIVIDE, NUMPAD_EIGHT, NUMPAD_FIVE, NUMPAD_FOUR, NUMPAD_MINUS, NUMPAD_MULTIPLY, NUMPAD_NINE, NUMPAD_ONE, NUMPAD_PERIOD, NUMPAD_PLUS, NUMPAD_SEVEN, NUMPAD_SIX, NUMPAD_THREE, NUMPAD_TWO, NUMPAD_ZERO, NUM_CENTER, NUM_LOCK, O, ONE, OPEN_SQUARE_BRACKET, P, PAGE_DOWN, PAGE_UP, PAUSE, PLUS_SIGN, PRINT_SCREEN, Q, QUESTION_MARK, R, RIGHT_ARROW, S, SCROLL_LOCK, SEMICOLON, SEVEN, SHIFT, SINGLE_QUOTE, SIX, SLASH, SPACE, T, TAB, THREE, TILDE, TWO, U, UP_ARROW, V, VOLUME_DOWN, VOLUME_UP, W, X, Y, Z, ZERO, hasModifierKey */

    /***/
    function FtGj(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "A", function () {
        return A;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ALT", function () {
        return ALT;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "APOSTROPHE", function () {
        return APOSTROPHE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AT_SIGN", function () {
        return AT_SIGN;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "B", function () {
        return B;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BACKSLASH", function () {
        return BACKSLASH;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BACKSPACE", function () {
        return BACKSPACE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "C", function () {
        return C;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CAPS_LOCK", function () {
        return CAPS_LOCK;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CLOSE_SQUARE_BRACKET", function () {
        return CLOSE_SQUARE_BRACKET;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "COMMA", function () {
        return COMMA;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CONTEXT_MENU", function () {
        return CONTEXT_MENU;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CONTROL", function () {
        return CONTROL;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "D", function () {
        return D;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DASH", function () {
        return DASH;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DELETE", function () {
        return DELETE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DOWN_ARROW", function () {
        return DOWN_ARROW;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "E", function () {
        return E;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "EIGHT", function () {
        return EIGHT;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "END", function () {
        return END;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ENTER", function () {
        return ENTER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "EQUALS", function () {
        return EQUALS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ESCAPE", function () {
        return ESCAPE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "F", function () {
        return F;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "F1", function () {
        return F1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "F10", function () {
        return F10;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "F11", function () {
        return F11;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "F12", function () {
        return F12;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "F2", function () {
        return F2;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "F3", function () {
        return F3;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "F4", function () {
        return F4;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "F5", function () {
        return F5;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "F6", function () {
        return F6;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "F7", function () {
        return F7;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "F8", function () {
        return F8;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "F9", function () {
        return F9;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FF_EQUALS", function () {
        return FF_EQUALS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FF_MINUS", function () {
        return FF_MINUS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FF_MUTE", function () {
        return FF_MUTE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FF_SEMICOLON", function () {
        return FF_SEMICOLON;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FF_VOLUME_DOWN", function () {
        return FF_VOLUME_DOWN;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FF_VOLUME_UP", function () {
        return FF_VOLUME_UP;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FIRST_MEDIA", function () {
        return FIRST_MEDIA;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FIVE", function () {
        return FIVE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FOUR", function () {
        return FOUR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "G", function () {
        return G;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "H", function () {
        return H;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HOME", function () {
        return HOME;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "I", function () {
        return I;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "INSERT", function () {
        return INSERT;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "J", function () {
        return J;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "K", function () {
        return K;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "L", function () {
        return L;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LAST_MEDIA", function () {
        return LAST_MEDIA;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LEFT_ARROW", function () {
        return LEFT_ARROW;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "M", function () {
        return M;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAC_ENTER", function () {
        return MAC_ENTER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAC_META", function () {
        return MAC_META;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAC_WK_CMD_LEFT", function () {
        return MAC_WK_CMD_LEFT;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAC_WK_CMD_RIGHT", function () {
        return MAC_WK_CMD_RIGHT;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "META", function () {
        return META;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MUTE", function () {
        return MUTE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "N", function () {
        return N;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NINE", function () {
        return NINE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NUMPAD_DIVIDE", function () {
        return NUMPAD_DIVIDE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NUMPAD_EIGHT", function () {
        return NUMPAD_EIGHT;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NUMPAD_FIVE", function () {
        return NUMPAD_FIVE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NUMPAD_FOUR", function () {
        return NUMPAD_FOUR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NUMPAD_MINUS", function () {
        return NUMPAD_MINUS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NUMPAD_MULTIPLY", function () {
        return NUMPAD_MULTIPLY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NUMPAD_NINE", function () {
        return NUMPAD_NINE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NUMPAD_ONE", function () {
        return NUMPAD_ONE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NUMPAD_PERIOD", function () {
        return NUMPAD_PERIOD;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NUMPAD_PLUS", function () {
        return NUMPAD_PLUS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NUMPAD_SEVEN", function () {
        return NUMPAD_SEVEN;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NUMPAD_SIX", function () {
        return NUMPAD_SIX;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NUMPAD_THREE", function () {
        return NUMPAD_THREE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NUMPAD_TWO", function () {
        return NUMPAD_TWO;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NUMPAD_ZERO", function () {
        return NUMPAD_ZERO;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NUM_CENTER", function () {
        return NUM_CENTER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NUM_LOCK", function () {
        return NUM_LOCK;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "O", function () {
        return O;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ONE", function () {
        return ONE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OPEN_SQUARE_BRACKET", function () {
        return OPEN_SQUARE_BRACKET;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "P", function () {
        return P;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PAGE_DOWN", function () {
        return PAGE_DOWN;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PAGE_UP", function () {
        return PAGE_UP;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PAUSE", function () {
        return PAUSE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PLUS_SIGN", function () {
        return PLUS_SIGN;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PRINT_SCREEN", function () {
        return PRINT_SCREEN;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Q", function () {
        return Q;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "QUESTION_MARK", function () {
        return QUESTION_MARK;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "R", function () {
        return R;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RIGHT_ARROW", function () {
        return RIGHT_ARROW;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "S", function () {
        return S;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SCROLL_LOCK", function () {
        return SCROLL_LOCK;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SEMICOLON", function () {
        return SEMICOLON;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SEVEN", function () {
        return SEVEN;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SHIFT", function () {
        return SHIFT;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SINGLE_QUOTE", function () {
        return SINGLE_QUOTE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SIX", function () {
        return SIX;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SLASH", function () {
        return SLASH;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SPACE", function () {
        return SPACE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "T", function () {
        return T;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TAB", function () {
        return TAB;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "THREE", function () {
        return THREE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TILDE", function () {
        return TILDE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TWO", function () {
        return TWO;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "U", function () {
        return U;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "UP_ARROW", function () {
        return UP_ARROW;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "V", function () {
        return V;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "VOLUME_DOWN", function () {
        return VOLUME_DOWN;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "VOLUME_UP", function () {
        return VOLUME_UP;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "W", function () {
        return W;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "X", function () {
        return X;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Y", function () {
        return Y;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Z", function () {
        return Z;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ZERO", function () {
        return ZERO;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "hasModifierKey", function () {
        return hasModifierKey;
      });
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var MAC_ENTER = 3;
      var BACKSPACE = 8;
      var TAB = 9;
      var NUM_CENTER = 12;
      var ENTER = 13;
      var SHIFT = 16;
      var CONTROL = 17;
      var ALT = 18;
      var PAUSE = 19;
      var CAPS_LOCK = 20;
      var ESCAPE = 27;
      var SPACE = 32;
      var PAGE_UP = 33;
      var PAGE_DOWN = 34;
      var END = 35;
      var HOME = 36;
      var LEFT_ARROW = 37;
      var UP_ARROW = 38;
      var RIGHT_ARROW = 39;
      var DOWN_ARROW = 40;
      var PLUS_SIGN = 43;
      var PRINT_SCREEN = 44;
      var INSERT = 45;
      var DELETE = 46;
      var ZERO = 48;
      var ONE = 49;
      var TWO = 50;
      var THREE = 51;
      var FOUR = 52;
      var FIVE = 53;
      var SIX = 54;
      var SEVEN = 55;
      var EIGHT = 56;
      var NINE = 57;
      var FF_SEMICOLON = 59; // Firefox (Gecko) fires this for semicolon instead of 186

      var FF_EQUALS = 61; // Firefox (Gecko) fires this for equals instead of 187

      var QUESTION_MARK = 63;
      var AT_SIGN = 64;
      var A = 65;
      var B = 66;
      var C = 67;
      var D = 68;
      var E = 69;
      var F = 70;
      var G = 71;
      var H = 72;
      var I = 73;
      var J = 74;
      var K = 75;
      var L = 76;
      var M = 77;
      var N = 78;
      var O = 79;
      var P = 80;
      var Q = 81;
      var R = 82;
      var S = 83;
      var T = 84;
      var U = 85;
      var V = 86;
      var W = 87;
      var X = 88;
      var Y = 89;
      var Z = 90;
      var META = 91; // WIN_KEY_LEFT

      var MAC_WK_CMD_LEFT = 91;
      var MAC_WK_CMD_RIGHT = 93;
      var CONTEXT_MENU = 93;
      var NUMPAD_ZERO = 96;
      var NUMPAD_ONE = 97;
      var NUMPAD_TWO = 98;
      var NUMPAD_THREE = 99;
      var NUMPAD_FOUR = 100;
      var NUMPAD_FIVE = 101;
      var NUMPAD_SIX = 102;
      var NUMPAD_SEVEN = 103;
      var NUMPAD_EIGHT = 104;
      var NUMPAD_NINE = 105;
      var NUMPAD_MULTIPLY = 106;
      var NUMPAD_PLUS = 107;
      var NUMPAD_MINUS = 109;
      var NUMPAD_PERIOD = 110;
      var NUMPAD_DIVIDE = 111;
      var F1 = 112;
      var F2 = 113;
      var F3 = 114;
      var F4 = 115;
      var F5 = 116;
      var F6 = 117;
      var F7 = 118;
      var F8 = 119;
      var F9 = 120;
      var F10 = 121;
      var F11 = 122;
      var F12 = 123;
      var NUM_LOCK = 144;
      var SCROLL_LOCK = 145;
      var FIRST_MEDIA = 166;
      var FF_MINUS = 173;
      var MUTE = 173; // Firefox (Gecko) fires 181 for MUTE

      var VOLUME_DOWN = 174; // Firefox (Gecko) fires 182 for VOLUME_DOWN

      var VOLUME_UP = 175; // Firefox (Gecko) fires 183 for VOLUME_UP

      var FF_MUTE = 181;
      var FF_VOLUME_DOWN = 182;
      var LAST_MEDIA = 183;
      var FF_VOLUME_UP = 183;
      var SEMICOLON = 186; // Firefox (Gecko) fires 59 for SEMICOLON

      var EQUALS = 187; // Firefox (Gecko) fires 61 for EQUALS

      var COMMA = 188;
      var DASH = 189; // Firefox (Gecko) fires 173 for DASH/MINUS

      var SLASH = 191;
      var APOSTROPHE = 192;
      var TILDE = 192;
      var OPEN_SQUARE_BRACKET = 219;
      var BACKSLASH = 220;
      var CLOSE_SQUARE_BRACKET = 221;
      var SINGLE_QUOTE = 222;
      var MAC_META = 224;
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Checks whether a modifier key is pressed.
       * @param event Event to be checked.
       */

      function hasModifierKey(event) {
        for (var _len25 = arguments.length, modifiers = new Array(_len25 > 1 ? _len25 - 1 : 0), _key27 = 1; _key27 < _len25; _key27++) {
          modifiers[_key27 - 1] = arguments[_key27];
        }

        if (modifiers.length) {
          return modifiers.some(function (modifier) {
            return event[modifier];
          });
        }

        return event.altKey || event.shiftKey || event.ctrlKey || event.metaKey;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=keycodes.js.map

      /***/

    },

    /***/
    "G/m7":
    /*!*****************************************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime-moment/__ivy_ngcc__/moment-adapter/moment-date-time.module.js ***!
      \*****************************************************************************************************/

    /*! exports provided: MomentDateTimeModule, OwlMomentDateTimeModule, ɵ0 */

    /***/
    function GM7(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MomentDateTimeModule", function () {
        return MomentDateTimeModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OwlMomentDateTimeModule", function () {
        return OwlMomentDateTimeModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵ0", function () {
        return ɵ0;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _moment_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./moment-date-time-adapter.class */
      "HNkt");
      /* harmony import */


      var _moment_date_time_format_class__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./moment-date-time-format.class */
      "VoWP");
      /* harmony import */


      var ng_pick_datetime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ng-pick-datetime */
      "z17N");

      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var MomentDateTimeModule = function () {
        function MomentDateTimeModule() {}

        MomentDateTimeModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
          type: MomentDateTimeModule
        });
        MomentDateTimeModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
          factory: function MomentDateTimeModule_Factory(t) {
            return new (t || MomentDateTimeModule)();
          },
          providers: [{
            provide: ng_pick_datetime__WEBPACK_IMPORTED_MODULE_3__["DateTimeAdapter"],
            useClass: _moment_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__["MomentDateTimeAdapter"],
            deps: [ng_pick_datetime__WEBPACK_IMPORTED_MODULE_3__["OWL_DATE_TIME_LOCALE"], _moment_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__["OWL_MOMENT_DATE_TIME_ADAPTER_OPTIONS"]]
          }]
        });

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MomentDateTimeModule, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
            args: [{
              providers: [{
                provide: ng_pick_datetime__WEBPACK_IMPORTED_MODULE_3__["DateTimeAdapter"],
                useClass: _moment_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__["MomentDateTimeAdapter"],
                deps: [ng_pick_datetime__WEBPACK_IMPORTED_MODULE_3__["OWL_DATE_TIME_LOCALE"], _moment_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__["OWL_MOMENT_DATE_TIME_ADAPTER_OPTIONS"]]
              }]
            }]
          }], function () {
            return [];
          }, null);
        })();

        return MomentDateTimeModule;
      }();

      var ɵ0 = _moment_date_time_format_class__WEBPACK_IMPORTED_MODULE_2__["OWL_MOMENT_DATE_TIME_FORMATS"];

      var OwlMomentDateTimeModule = function () {
        function OwlMomentDateTimeModule() {}

        OwlMomentDateTimeModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
          type: OwlMomentDateTimeModule
        });
        OwlMomentDateTimeModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
          factory: function OwlMomentDateTimeModule_Factory(t) {
            return new (t || OwlMomentDateTimeModule)();
          },
          providers: [{
            provide: ng_pick_datetime__WEBPACK_IMPORTED_MODULE_3__["OWL_DATE_TIME_FORMATS"],
            useValue: ɵ0
          }],
          imports: [[MomentDateTimeModule]]
        });

        (function () {
          (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](OwlMomentDateTimeModule, {
            imports: [MomentDateTimeModule]
          });
        })();

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](OwlMomentDateTimeModule, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
            args: [{
              imports: [MomentDateTimeModule],
              providers: [{
                provide: ng_pick_datetime__WEBPACK_IMPORTED_MODULE_3__["OWL_DATE_TIME_FORMATS"],
                useValue: ɵ0
              }]
            }]
          }], function () {
            return [];
          }, null);
        })();

        return OwlMomentDateTimeModule;
      }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9tZW50LWRhdGUtdGltZS5tb2R1bGUuanMiLCJzb3VyY2VzIjpbIm1vbWVudC1kYXRlLXRpbWUubW9kdWxlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7O0tBWUs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dEQVd3Qjs7Ozs7OztLQU94Qjs7Ozs7Ozs7OztnREFNMkIiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9tZW50RGF0ZVRpbWVBZGFwdGVyLCBPV0xfTU9NRU5UX0RBVEVfVElNRV9BREFQVEVSX09QVElPTlMgfSBmcm9tICcuL21vbWVudC1kYXRlLXRpbWUtYWRhcHRlci5jbGFzcyc7XG5pbXBvcnQgeyBPV0xfTU9NRU5UX0RBVEVfVElNRV9GT1JNQVRTIH0gZnJvbSAnLi9tb21lbnQtZGF0ZS10aW1lLWZvcm1hdC5jbGFzcyc7XG5pbXBvcnQgeyBEYXRlVGltZUFkYXB0ZXIsIE9XTF9EQVRFX1RJTUVfRk9STUFUUywgT1dMX0RBVEVfVElNRV9MT0NBTEUgfSBmcm9tICduZy1waWNrLWRhdGV0aW1lJztcbnZhciBNb21lbnREYXRlVGltZU1vZHVsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTW9tZW50RGF0ZVRpbWVNb2R1bGUoKSB7XG4gICAgfVxuICAgIE1vbWVudERhdGVUaW1lTW9kdWxlID0gX19kZWNvcmF0ZShbXG4gICAgICAgIE5nTW9kdWxlKHtcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogRGF0ZVRpbWVBZGFwdGVyLFxuICAgICAgICAgICAgICAgICAgICB1c2VDbGFzczogTW9tZW50RGF0ZVRpbWVBZGFwdGVyLFxuICAgICAgICAgICAgICAgICAgICBkZXBzOiBbT1dMX0RBVEVfVElNRV9MT0NBTEUsIE9XTF9NT01FTlRfREFURV9USU1FX0FEQVBURVJfT1BUSU9OU11cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSlcbiAgICBdLCBNb21lbnREYXRlVGltZU1vZHVsZSk7XG4gICAgcmV0dXJuIE1vbWVudERhdGVUaW1lTW9kdWxlO1xufSgpKTtcbmV4cG9ydCB7IE1vbWVudERhdGVUaW1lTW9kdWxlIH07XG52YXIgybUwID0gT1dMX01PTUVOVF9EQVRFX1RJTUVfRk9STUFUUztcbnZhciBPd2xNb21lbnREYXRlVGltZU1vZHVsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT3dsTW9tZW50RGF0ZVRpbWVNb2R1bGUoKSB7XG4gICAgfVxuICAgIE93bE1vbWVudERhdGVUaW1lTW9kdWxlID0gX19kZWNvcmF0ZShbXG4gICAgICAgIE5nTW9kdWxlKHtcbiAgICAgICAgICAgIGltcG9ydHM6IFtNb21lbnREYXRlVGltZU1vZHVsZV0sXG4gICAgICAgICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE9XTF9EQVRFX1RJTUVfRk9STUFUUywgdXNlVmFsdWU6IMm1MCB9XSxcbiAgICAgICAgfSlcbiAgICBdLCBPd2xNb21lbnREYXRlVGltZU1vZHVsZSk7XG4gICAgcmV0dXJuIE93bE1vbWVudERhdGVUaW1lTW9kdWxlO1xufSgpKTtcbmV4cG9ydCB7IE93bE1vbWVudERhdGVUaW1lTW9kdWxlIH07XG5leHBvcnQgeyDJtTAgfTtcbiJdfQ==

      /***/

    },

    /***/
    "G0Uy":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/mt.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function G0Uy(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Maltese (Malta) [mt]
      //! author : Alessandro Maruccia : https://github.com/alesma
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var mt = moment.defineLocale('mt', {
          months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split('_'),
          monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),
          weekdays: 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split('_'),
          weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),
          weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[Illum fil-]LT',
            nextDay: '[Għada fil-]LT',
            nextWeek: 'dddd [fil-]LT',
            lastDay: '[Il-bieraħ fil-]LT',
            lastWeek: 'dddd [li għadda] [fil-]LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'f’ %s',
            past: '%s ilu',
            s: 'ftit sekondi',
            ss: '%d sekondi',
            m: 'minuta',
            mm: '%d minuti',
            h: 'siegħa',
            hh: '%d siegħat',
            d: 'ġurnata',
            dd: '%d ġranet',
            M: 'xahar',
            MM: '%d xhur',
            y: 'sena',
            yy: '%d sni'
          },
          dayOfMonthOrdinalParse: /\d{1,2}º/,
          ordinal: '%dº',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return mt;
      });
      /***/

    },

    /***/
    "GJmQ":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/takeWhile.js ***!
      \********************************************************************/

    /*! exports provided: takeWhile */

    /***/
    function GJmQ(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "takeWhile", function () {
        return takeWhile;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");

      function takeWhile(predicate) {
        var inclusive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
        return function (source) {
          return source.lift(new TakeWhileOperator(predicate, inclusive));
        };
      }

      var TakeWhileOperator = /*#__PURE__*/function () {
        function TakeWhileOperator(predicate, inclusive) {
          _classCallCheck2(this, TakeWhileOperator);

          this.predicate = predicate;
          this.inclusive = inclusive;
        }

        _createClass2(TakeWhileOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new TakeWhileSubscriber(subscriber, this.predicate, this.inclusive));
          }
        }]);

        return TakeWhileOperator;
      }();

      var TakeWhileSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_14) {
        _inherits2(TakeWhileSubscriber, _Subscriber__WEBPACK_14);

        var _super227 = _createSuper(TakeWhileSubscriber);

        function TakeWhileSubscriber(destination, predicate, inclusive) {
          var _this546;

          _classCallCheck2(this, TakeWhileSubscriber);

          _this546 = _super227.call(this, destination);
          _this546.predicate = predicate;
          _this546.inclusive = inclusive;
          _this546.index = 0;
          return _this546;
        }

        _createClass2(TakeWhileSubscriber, [{
          key: "_next",
          value: function _next(value) {
            var destination = this.destination;
            var result;

            try {
              result = this.predicate(value, this.index++);
            } catch (err) {
              destination.error(err);
              return;
            }

            this.nextOrComplete(value, result);
          }
        }, {
          key: "nextOrComplete",
          value: function nextOrComplete(value, predicateResult) {
            var destination = this.destination;

            if (Boolean(predicateResult)) {
              destination.next(value);
            } else {
              if (this.inclusive) {
                destination.next(value);
              }

              destination.complete();
            }
          }
        }]);

        return TakeWhileSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=takeWhile.js.map

      /***/

    },

    /***/
    "GU7r":
    /*!**********************************************************************!*\
      !*** ./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/observers.js ***!
      \**********************************************************************/

    /*! exports provided: CdkObserveContent, ContentObserver, MutationObserverFactory, ObserversModule */

    /***/
    function GU7r(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkObserveContent", function () {
        return CdkObserveContent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ContentObserver", function () {
        return ContentObserver;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MutationObserverFactory", function () {
        return MutationObserverFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ObserversModule", function () {
        return ObserversModule;
      });
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Factory that creates a new MutationObserver and allows us to stub it out in unit tests.
       * @docs-private
       */


      var MutationObserverFactory = /*#__PURE__*/function () {
        function MutationObserverFactory() {
          _classCallCheck2(this, MutationObserverFactory);
        }

        _createClass2(MutationObserverFactory, [{
          key: "create",
          value: function create(callback) {
            return typeof MutationObserver === 'undefined' ? null : new MutationObserver(callback);
          }
        }]);

        return MutationObserverFactory;
      }();

      MutationObserverFactory.ɵfac = function MutationObserverFactory_Factory(t) {
        return new (t || MutationObserverFactory)();
      };

      MutationObserverFactory.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function MutationObserverFactory_Factory() {
          return new MutationObserverFactory();
        },
        token: MutationObserverFactory,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](MutationObserverFactory, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], null, null);
      })();
      /** An injectable service that allows watching elements for changes to their content. */


      var ContentObserver = /*#__PURE__*/function () {
        function ContentObserver(_mutationObserverFactory) {
          _classCallCheck2(this, ContentObserver);

          this._mutationObserverFactory = _mutationObserverFactory;
          /** Keeps track of the existing MutationObservers so they can be reused. */

          this._observedElements = new Map();
        }

        _createClass2(ContentObserver, [{
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            var _this547 = this;

            this._observedElements.forEach(function (_, element) {
              return _this547._cleanupObserver(element);
            });
          }
        }, {
          key: "observe",
          value: function observe(elementOrRef) {
            var _this548 = this;

            var element = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_0__["coerceElement"])(elementOrRef);
            return new rxjs__WEBPACK_IMPORTED_MODULE_2__["Observable"](function (observer) {
              var stream = _this548._observeElement(element);

              var subscription = stream.subscribe(observer);
              return function () {
                subscription.unsubscribe();

                _this548._unobserveElement(element);
              };
            });
          }
          /**
           * Observes the given element by using the existing MutationObserver if available, or creating a
           * new one if not.
           */

        }, {
          key: "_observeElement",
          value: function _observeElement(element) {
            if (!this._observedElements.has(element)) {
              var stream = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();

              var observer = this._mutationObserverFactory.create(function (mutations) {
                return stream.next(mutations);
              });

              if (observer) {
                observer.observe(element, {
                  characterData: true,
                  childList: true,
                  subtree: true
                });
              }

              this._observedElements.set(element, {
                observer: observer,
                stream: stream,
                count: 1
              });
            } else {
              this._observedElements.get(element).count++;
            }

            return this._observedElements.get(element).stream;
          }
          /**
           * Un-observes the given element and cleans up the underlying MutationObserver if nobody else is
           * observing this element.
           */

        }, {
          key: "_unobserveElement",
          value: function _unobserveElement(element) {
            if (this._observedElements.has(element)) {
              this._observedElements.get(element).count--;

              if (!this._observedElements.get(element).count) {
                this._cleanupObserver(element);
              }
            }
          }
          /** Clean up the underlying MutationObserver for the specified element. */

        }, {
          key: "_cleanupObserver",
          value: function _cleanupObserver(element) {
            if (this._observedElements.has(element)) {
              var _this$_observedElemen = this._observedElements.get(element),
                  observer = _this$_observedElemen.observer,
                  stream = _this$_observedElemen.stream;

              if (observer) {
                observer.disconnect();
              }

              stream.complete();

              this._observedElements["delete"](element);
            }
          }
        }]);

        return ContentObserver;
      }();

      ContentObserver.ɵfac = function ContentObserver_Factory(t) {
        return new (t || ContentObserver)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](MutationObserverFactory));
      };

      ContentObserver.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function ContentObserver_Factory() {
          return new ContentObserver(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(MutationObserverFactory));
        },
        token: ContentObserver,
        providedIn: "root"
      });

      ContentObserver.ctorParameters = function () {
        return [{
          type: MutationObserverFactory
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](ContentObserver, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: MutationObserverFactory
          }];
        }, null);
      })();
      /**
       * Directive that triggers a callback whenever the content of
       * its associated element has changed.
       */


      var CdkObserveContent = /*#__PURE__*/function () {
        function CdkObserveContent(_contentObserver, _elementRef, _ngZone) {
          _classCallCheck2(this, CdkObserveContent);

          this._contentObserver = _contentObserver;
          this._elementRef = _elementRef;
          this._ngZone = _ngZone;
          /** Event emitted for each change in the element's content. */

          this.event = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["EventEmitter"]();
          this._disabled = false;
          this._currentSubscription = null;
        }
        /**
         * Whether observing content is disabled. This option can be used
         * to disconnect the underlying MutationObserver until it is needed.
         */


        _createClass2(CdkObserveContent, [{
          key: "disabled",
          get: function get() {
            return this._disabled;
          },
          set: function set(value) {
            this._disabled = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_0__["coerceBooleanProperty"])(value);
            this._disabled ? this._unsubscribe() : this._subscribe();
          }
          /** Debounce interval for emitting the changes. */

        }, {
          key: "debounce",
          get: function get() {
            return this._debounce;
          },
          set: function set(value) {
            this._debounce = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_0__["coerceNumberProperty"])(value);

            this._subscribe();
          }
        }, {
          key: "ngAfterContentInit",
          value: function ngAfterContentInit() {
            if (!this._currentSubscription && !this.disabled) {
              this._subscribe();
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._unsubscribe();
          }
        }, {
          key: "_subscribe",
          value: function _subscribe() {
            var _this549 = this;

            this._unsubscribe();

            var stream = this._contentObserver.observe(this._elementRef); // TODO(mmalerba): We shouldn't be emitting on this @Output() outside the zone.
            // Consider brining it back inside the zone next time we're making breaking changes.
            // Bringing it back inside can cause things like infinite change detection loops and changed
            // after checked errors if people's code isn't handling it properly.


            this._ngZone.runOutsideAngular(function () {
              _this549._currentSubscription = (_this549.debounce ? stream.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["debounceTime"])(_this549.debounce)) : stream).subscribe(_this549.event);
            });
          }
        }, {
          key: "_unsubscribe",
          value: function _unsubscribe() {
            var _a;

            (_a = this._currentSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
          }
        }]);

        return CdkObserveContent;
      }();

      CdkObserveContent.ɵfac = function CdkObserveContent_Factory(t) {
        return new (t || CdkObserveContent)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](ContentObserver), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]));
      };

      CdkObserveContent.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({
        type: CdkObserveContent,
        selectors: [["", "cdkObserveContent", ""]],
        inputs: {
          disabled: ["cdkObserveContentDisabled", "disabled"],
          debounce: "debounce"
        },
        outputs: {
          event: "cdkObserveContent"
        },
        exportAs: ["cdkObserveContent"]
      });

      CdkObserveContent.ctorParameters = function () {
        return [{
          type: ContentObserver
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        }];
      };

      CdkObserveContent.propDecorators = {
        event: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"],
          args: ['cdkObserveContent']
        }],
        disabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkObserveContentDisabled']
        }],
        debounce: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkObserveContent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
          args: [{
            selector: '[cdkObserveContent]',
            exportAs: 'cdkObserveContent'
          }]
        }], function () {
          return [{
            type: ContentObserver
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
          }];
        }, {
          event: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"],
            args: ['cdkObserveContent']
          }],
          disabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkObserveContentDisabled']
          }],
          debounce: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }]
        });
      })();

      var ObserversModule = function ObserversModule() {
        _classCallCheck2(this, ObserversModule);
      };

      ObserversModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({
        type: ObserversModule
      });
      ObserversModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({
        factory: function ObserversModule_Factory(t) {
          return new (t || ObserversModule)();
        },
        providers: [MutationObserverFactory]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](ObserversModule, {
          declarations: [CdkObserveContent],
          exports: [CdkObserveContent]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](ObserversModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
          args: [{
            exports: [CdkObserveContent],
            declarations: [CdkObserveContent],
            providers: [MutationObserverFactory]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=observers.js.map

      /***/

    },

    /***/
    "Gi4w":
    /*!****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/every.js ***!
      \****************************************************************/

    /*! exports provided: every */

    /***/
    function Gi4w(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "every", function () {
        return every;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");

      function every(predicate, thisArg) {
        return function (source) {
          return source.lift(new EveryOperator(predicate, thisArg, source));
        };
      }

      var EveryOperator = /*#__PURE__*/function () {
        function EveryOperator(predicate, thisArg, source) {
          _classCallCheck2(this, EveryOperator);

          this.predicate = predicate;
          this.thisArg = thisArg;
          this.source = source;
        }

        _createClass2(EveryOperator, [{
          key: "call",
          value: function call(observer, source) {
            return source.subscribe(new EverySubscriber(observer, this.predicate, this.thisArg, this.source));
          }
        }]);

        return EveryOperator;
      }();

      var EverySubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_15) {
        _inherits2(EverySubscriber, _Subscriber__WEBPACK_15);

        var _super228 = _createSuper(EverySubscriber);

        function EverySubscriber(destination, predicate, thisArg, source) {
          var _this550;

          _classCallCheck2(this, EverySubscriber);

          _this550 = _super228.call(this, destination);
          _this550.predicate = predicate;
          _this550.thisArg = thisArg;
          _this550.source = source;
          _this550.index = 0;
          _this550.thisArg = thisArg || _assertThisInitialized2(_this550);
          return _this550;
        }

        _createClass2(EverySubscriber, [{
          key: "notifyComplete",
          value: function notifyComplete(everyValueMatch) {
            this.destination.next(everyValueMatch);
            this.destination.complete();
          }
        }, {
          key: "_next",
          value: function _next(value) {
            var result = false;

            try {
              result = this.predicate.call(this.thisArg, value, this.index++, this.source);
            } catch (err) {
              this.destination.error(err);
              return;
            }

            if (!result) {
              this.notifyComplete(false);
            }
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.notifyComplete(true);
          }
        }]);

        return EverySubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=every.js.map

      /***/

    },

    /***/
    "GjHo":
    /*!**************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/zip.js ***!
      \**************************************************************/

    /*! exports provided: zip */

    /***/
    function GjHo(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "zip", function () {
        return zip;
      });
      /* harmony import */


      var _observable_zip__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../observable/zip */
      "1uah");

      function zip() {
        for (var _len26 = arguments.length, observables = new Array(_len26), _key28 = 0; _key28 < _len26; _key28++) {
          observables[_key28] = arguments[_key28];
        }

        return function zipOperatorFunction(source) {
          return source.lift.call(Object(_observable_zip__WEBPACK_IMPORTED_MODULE_0__["zip"]).apply(void 0, [source].concat(observables)));
        };
      } //# sourceMappingURL=zip.js.map

      /***/

    },

    /***/
    "Gmk6":
    /*!****************************************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/calendar-multi-year-view.component.js ***!
      \****************************************************************************************************/

    /*! exports provided: YEARS_PER_ROW, YEAR_ROWS, OwlMultiYearViewComponent */

    /***/
    function Gmk6(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "YEARS_PER_ROW", function () {
        return YEARS_PER_ROW;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "YEAR_ROWS", function () {
        return YEAR_ROWS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OwlMultiYearViewComponent", function () {
        return OwlMultiYearViewComponent;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _date_time_picker_intl_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./date-time-picker-intl.service */
      "MN5+");
      /* harmony import */


      var _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./adapter/date-time-adapter.class */
      "1rjb");
      /* harmony import */


      var _calendar_body_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./calendar-body.component */
      "jVEe");
      /* harmony import */


      var _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/cdk/keycodes */
      "FtGj");

      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var __metadata = undefined && undefined.__metadata || function (k, v) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
      };

      var __param = undefined && undefined.__param || function (paramIndex, decorator) {
        return function (target, key) {
          decorator(target, key, paramIndex);
        };
      };

      var YEARS_PER_ROW = 3;
      var YEAR_ROWS = 7;

      var OwlMultiYearViewComponent = function () {
        function OwlMultiYearViewComponent(cdRef, pickerIntl, dateTimeAdapter) {
          this.cdRef = cdRef;
          this.pickerIntl = pickerIntl;
          this.dateTimeAdapter = dateTimeAdapter;
          this._selectMode = 'single';
          this._selecteds = [];
          this.initiated = false;
          this.change = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.yearSelected = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.pickerMomentChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.keyboardEnter = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        }

        Object.defineProperty(OwlMultiYearViewComponent.prototype, "selectMode", {
          get: function get() {
            return this._selectMode;
          },
          set: function set(val) {
            this._selectMode = val;

            if (this.initiated) {
              this.setSelectedYears();
              this.cdRef.markForCheck();
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMultiYearViewComponent.prototype, "selected", {
          get: function get() {
            return this._selected;
          },
          set: function set(value) {
            var oldSelected = this._selected;
            value = this.dateTimeAdapter.deserialize(value);
            this._selected = this.getValidDate(value);

            if (!this.dateTimeAdapter.isSameDay(oldSelected, this._selected)) {
              this.setSelectedYears();
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMultiYearViewComponent.prototype, "selecteds", {
          get: function get() {
            return this._selecteds;
          },
          set: function set(values) {
            var _this = this;

            this._selecteds = values.map(function (v) {
              v = _this.dateTimeAdapter.deserialize(v);
              return _this.getValidDate(v);
            });
            this.setSelectedYears();
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMultiYearViewComponent.prototype, "pickerMoment", {
          get: function get() {
            return this._pickerMoment;
          },
          set: function set(value) {
            var oldMoment = this._pickerMoment;
            value = this.dateTimeAdapter.deserialize(value);
            this._pickerMoment = this.getValidDate(value) || this.dateTimeAdapter.now();

            if (oldMoment && this._pickerMoment && !this.isSameYearList(oldMoment, this._pickerMoment)) {
              this.generateYearList();
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMultiYearViewComponent.prototype, "dateFilter", {
          get: function get() {
            return this._dateFilter;
          },
          set: function set(filter) {
            this._dateFilter = filter;

            if (this.initiated) {
              this.generateYearList();
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMultiYearViewComponent.prototype, "minDate", {
          get: function get() {
            return this._minDate;
          },
          set: function set(value) {
            value = this.dateTimeAdapter.deserialize(value);
            this._minDate = this.getValidDate(value);

            if (this.initiated) {
              this.generateYearList();
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMultiYearViewComponent.prototype, "maxDate", {
          get: function get() {
            return this._maxDate;
          },
          set: function set(value) {
            value = this.dateTimeAdapter.deserialize(value);
            this._maxDate = this.getValidDate(value);

            if (this.initiated) {
              this.generateYearList();
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMultiYearViewComponent.prototype, "todayYear", {
          get: function get() {
            return this._todayYear;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMultiYearViewComponent.prototype, "years", {
          get: function get() {
            return this._years;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMultiYearViewComponent.prototype, "selectedYears", {
          get: function get() {
            return this._selectedYears;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMultiYearViewComponent.prototype, "isInSingleMode", {
          get: function get() {
            return this.selectMode === 'single';
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMultiYearViewComponent.prototype, "isInRangeMode", {
          get: function get() {
            return this.selectMode === 'range' || this.selectMode === 'rangeFrom' || this.selectMode === 'rangeTo';
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMultiYearViewComponent.prototype, "activeCell", {
          get: function get() {
            if (this._pickerMoment) {
              return this.dateTimeAdapter.getYear(this._pickerMoment) % (YEARS_PER_ROW * YEAR_ROWS);
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMultiYearViewComponent.prototype, "tableHeader", {
          get: function get() {
            if (this._years && this._years.length > 0) {
              return this._years[0][0].displayValue + " ~ " + this._years[YEAR_ROWS - 1][YEARS_PER_ROW - 1].displayValue;
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMultiYearViewComponent.prototype, "prevButtonLabel", {
          get: function get() {
            return this.pickerIntl.prevMultiYearLabel;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMultiYearViewComponent.prototype, "nextButtonLabel", {
          get: function get() {
            return this.pickerIntl.nextMultiYearLabel;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMultiYearViewComponent.prototype, "owlDTCalendarView", {
          get: function get() {
            return true;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMultiYearViewComponent.prototype, "owlDTCalendarMultiYearView", {
          get: function get() {
            return true;
          },
          enumerable: true,
          configurable: true
        });

        OwlMultiYearViewComponent.prototype.ngOnInit = function () {};

        OwlMultiYearViewComponent.prototype.ngAfterContentInit = function () {
          this._todayYear = this.dateTimeAdapter.getYear(this.dateTimeAdapter.now());
          this.generateYearList();
          this.initiated = true;
        };

        OwlMultiYearViewComponent.prototype.selectCalendarCell = function (cell) {
          this.selectYear(cell.value);
        };

        OwlMultiYearViewComponent.prototype.selectYear = function (year) {
          this.yearSelected.emit(this.dateTimeAdapter.createDate(year, 0, 1));
          var firstDateOfMonth = this.dateTimeAdapter.createDate(year, this.dateTimeAdapter.getMonth(this.pickerMoment), 1);
          var daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(firstDateOfMonth);
          var selected = this.dateTimeAdapter.createDate(year, this.dateTimeAdapter.getMonth(this.pickerMoment), Math.min(daysInMonth, this.dateTimeAdapter.getDate(this.pickerMoment)), this.dateTimeAdapter.getHours(this.pickerMoment), this.dateTimeAdapter.getMinutes(this.pickerMoment), this.dateTimeAdapter.getSeconds(this.pickerMoment));
          this.change.emit(selected);
        };

        OwlMultiYearViewComponent.prototype.prevYearList = function (event) {
          this._pickerMoment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, -1 * YEAR_ROWS * YEARS_PER_ROW);
          this.generateYearList();
          event.preventDefault();
        };

        OwlMultiYearViewComponent.prototype.nextYearList = function (event) {
          this._pickerMoment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, YEAR_ROWS * YEARS_PER_ROW);
          this.generateYearList();
          event.preventDefault();
        };

        OwlMultiYearViewComponent.prototype.generateYearList = function () {
          this._years = [];
          var pickerMomentYear = this.dateTimeAdapter.getYear(this._pickerMoment);
          var offset = pickerMomentYear % (YEARS_PER_ROW * YEAR_ROWS);

          for (var i = 0; i < YEAR_ROWS; i++) {
            var row = [];

            for (var j = 0; j < YEARS_PER_ROW; j++) {
              var year = pickerMomentYear - offset + (j + i * YEARS_PER_ROW);
              var yearCell = this.createYearCell(year);
              row.push(yearCell);
            }

            this._years.push(row);
          }

          return;
        };

        OwlMultiYearViewComponent.prototype.previousEnabled = function () {
          if (!this.minDate) {
            return true;
          }

          return !this.minDate || !this.isSameYearList(this._pickerMoment, this.minDate);
        };

        OwlMultiYearViewComponent.prototype.nextEnabled = function () {
          return !this.maxDate || !this.isSameYearList(this._pickerMoment, this.maxDate);
        };

        OwlMultiYearViewComponent.prototype.handleCalendarKeydown = function (event) {
          var moment;

          switch (event.keyCode) {
            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_4__["LEFT_ARROW"]:
              moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, -1);
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_4__["RIGHT_ARROW"]:
              moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, 1);
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_4__["UP_ARROW"]:
              moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, -1 * YEARS_PER_ROW);
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_4__["DOWN_ARROW"]:
              moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, YEARS_PER_ROW);
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_4__["HOME"]:
              moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, -this.dateTimeAdapter.getYear(this._pickerMoment) % (YEARS_PER_ROW * YEAR_ROWS));
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_4__["END"]:
              moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, YEARS_PER_ROW * YEAR_ROWS - this.dateTimeAdapter.getYear(this._pickerMoment) % (YEARS_PER_ROW * YEAR_ROWS) - 1);
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_4__["PAGE_UP"]:
              moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, event.altKey ? -10 * (YEARS_PER_ROW * YEAR_ROWS) : -1 * (YEARS_PER_ROW * YEAR_ROWS));
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_4__["PAGE_DOWN"]:
              moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, event.altKey ? 10 * (YEARS_PER_ROW * YEAR_ROWS) : YEARS_PER_ROW * YEAR_ROWS);
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_4__["ENTER"]:
              this.selectYear(this.dateTimeAdapter.getYear(this._pickerMoment));
              this.keyboardEnter.emit();
              break;

            default:
              return;
          }

          this.focusActiveCell();
          event.preventDefault();
        };

        OwlMultiYearViewComponent.prototype.createYearCell = function (year) {
          var startDateOfYear = this.dateTimeAdapter.createDate(year, 0, 1);
          var ariaLabel = this.dateTimeAdapter.getYearName(startDateOfYear);
          var cellClass = 'owl-dt-year-' + year;
          return new _calendar_body_component__WEBPACK_IMPORTED_MODULE_3__["CalendarCell"](year, year.toString(), ariaLabel, this.isYearEnabled(year), false, cellClass);
        };

        OwlMultiYearViewComponent.prototype.setSelectedYears = function () {
          var _this = this;

          this._selectedYears = [];

          if (this.isInSingleMode && this.selected) {
            this._selectedYears[0] = this.dateTimeAdapter.getYear(this.selected);
          }

          if (this.isInRangeMode && this.selecteds) {
            this._selectedYears = this.selecteds.map(function (selected) {
              if (_this.dateTimeAdapter.isValid(selected)) {
                return _this.dateTimeAdapter.getYear(selected);
              } else {
                return null;
              }
            });
          }
        };

        OwlMultiYearViewComponent.prototype.isYearEnabled = function (year) {
          if (year === undefined || year === null || this.maxDate && year > this.dateTimeAdapter.getYear(this.maxDate) || this.minDate && year < this.dateTimeAdapter.getYear(this.minDate)) {
            return false;
          }

          if (!this.dateFilter) {
            return true;
          }

          var firstOfYear = this.dateTimeAdapter.createDate(year, 0, 1);

          for (var date = firstOfYear; this.dateTimeAdapter.getYear(date) == year; date = this.dateTimeAdapter.addCalendarDays(date, 1)) {
            if (this.dateFilter(date)) {
              return true;
            }
          }

          return false;
        };

        OwlMultiYearViewComponent.prototype.isSameYearList = function (date1, date2) {
          return Math.floor(this.dateTimeAdapter.getYear(date1) / (YEARS_PER_ROW * YEAR_ROWS)) === Math.floor(this.dateTimeAdapter.getYear(date2) / (YEARS_PER_ROW * YEAR_ROWS));
        };

        OwlMultiYearViewComponent.prototype.getValidDate = function (obj) {
          return this.dateTimeAdapter.isDateInstance(obj) && this.dateTimeAdapter.isValid(obj) ? obj : null;
        };

        OwlMultiYearViewComponent.prototype.focusActiveCell = function () {
          this.calendarBodyElm.focusActiveCell();
        };

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", String), __metadata("design:paramtypes", [String])], OwlMultiYearViewComponent.prototype, "selectMode", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlMultiYearViewComponent.prototype, "selected", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Array), __metadata("design:paramtypes", [Array])], OwlMultiYearViewComponent.prototype, "selecteds", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlMultiYearViewComponent.prototype, "pickerMoment", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Function), __metadata("design:paramtypes", [Function])], OwlMultiYearViewComponent.prototype, "dateFilter", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlMultiYearViewComponent.prototype, "minDate", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlMultiYearViewComponent.prototype, "maxDate", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", Object)], OwlMultiYearViewComponent.prototype, "change", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", Object)], OwlMultiYearViewComponent.prototype, "yearSelected", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"])], OwlMultiYearViewComponent.prototype, "pickerMomentChange", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"])], OwlMultiYearViewComponent.prototype, "keyboardEnter", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"])(_calendar_body_component__WEBPACK_IMPORTED_MODULE_3__["OwlCalendarBodyComponent"]), __metadata("design:type", _calendar_body_component__WEBPACK_IMPORTED_MODULE_3__["OwlCalendarBodyComponent"])], OwlMultiYearViewComponent.prototype, "calendarBodyElm", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('class.owl-dt-calendar-view'), __metadata("design:type", Boolean), __metadata("design:paramtypes", [])], OwlMultiYearViewComponent.prototype, "owlDTCalendarView", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('class.owl-dt-calendar-multi-year-view'), __metadata("design:type", Boolean), __metadata("design:paramtypes", [])], OwlMultiYearViewComponent.prototype, "owlDTCalendarMultiYearView", null);

        OwlMultiYearViewComponent = __decorate([__param(2, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __metadata("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"], _date_time_picker_intl_service__WEBPACK_IMPORTED_MODULE_1__["OwlDateTimeIntl"], _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__["DateTimeAdapter"]])], OwlMultiYearViewComponent);

        OwlMultiYearViewComponent.ɵfac = function OwlMultiYearViewComponent_Factory(t) {
          return new (t || OwlMultiYearViewComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_date_time_picker_intl_service__WEBPACK_IMPORTED_MODULE_1__["OwlDateTimeIntl"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__["DateTimeAdapter"], 8));
        };

        OwlMultiYearViewComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
          type: OwlMultiYearViewComponent,
          selectors: [["owl-date-time-multi-year-view"]],
          viewQuery: function OwlMultiYearViewComponent_Query(rf, ctx) {
            if (rf & 1) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](_calendar_body_component__WEBPACK_IMPORTED_MODULE_3__["OwlCalendarBodyComponent"], 1);
            }

            if (rf & 2) {
              var _t;

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.calendarBodyElm = _t.first);
            }
          },
          hostVars: 4,
          hostBindings: function OwlMultiYearViewComponent_HostBindings(rf, ctx) {
            if (rf & 2) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("owl-dt-calendar-view", ctx.owlDTCalendarView)("owl-dt-calendar-multi-year-view", ctx.owlDTCalendarMultiYearView);
            }
          },
          inputs: {
            selectMode: "selectMode",
            selected: "selected",
            selecteds: "selecteds",
            pickerMoment: "pickerMoment",
            dateFilter: "dateFilter",
            minDate: "minDate",
            maxDate: "maxDate"
          },
          outputs: {
            change: "change",
            yearSelected: "yearSelected",
            pickerMomentChange: "pickerMomentChange",
            keyboardEnter: "keyboardEnter"
          },
          decls: 14,
          vars: 12,
          consts: [["type", "button", "tabindex", "0", 1, "owl-dt-control-button", "owl-dt-control-arrow-button", 3, "disabled", "click"], ["tabindex", "-1", 1, "owl-dt-control-button-content"], ["xmlns", "http://www.w3.org/2000/svg", 0, "xmlns", "xlink", "http://www.w3.org/1999/xlink", "version", "1.1", "x", "0px", "y", "0px", "viewBox", "0 0 250.738 250.738", 0, "xml", "space", "preserve", "width", "100%", "height", "100%", 2, "enable-background", "new 0 0 250.738 250.738"], ["d", "M96.633,125.369l95.053-94.533c7.101-7.055,7.101-18.492,0-25.546   c-7.1-7.054-18.613-7.054-25.714,0L58.989,111.689c-3.784,3.759-5.487,8.759-5.238,13.68c-0.249,4.922,1.454,9.921,5.238,13.681   l106.983,106.398c7.101,7.055,18.613,7.055,25.714,0c7.101-7.054,7.101-18.491,0-25.544L96.633,125.369z", 2, "fill-rule", "evenodd", "clip-rule", "evenodd"], [1, "owl-dt-calendar-table", "owl-dt-calendar-multi-year-table"], [1, "owl-dt-calendar-header"], ["colspan", "3"], ["owl-date-time-calendar-body", "", "role", "grid", 3, "rows", "numCols", "cellRatio", "activeCell", "todayValue", "selectedValues", "selectMode", "keydown", "select"], ["version", "1.1", "xmlns", "http://www.w3.org/2000/svg", 0, "xmlns", "xlink", "http://www.w3.org/1999/xlink", "x", "0px", "y", "0px", "viewBox", "0 0 250.738 250.738", 0, "xml", "space", "preserve", 2, "enable-background", "new 0 0 250.738 250.738"], ["d", "M191.75,111.689L84.766,5.291c-7.1-7.055-18.613-7.055-25.713,0\n                c-7.101,7.054-7.101,18.49,0,25.544l95.053,94.534l-95.053,94.533c-7.101,7.054-7.101,18.491,0,25.545\n                c7.1,7.054,18.613,7.054,25.713,0L191.75,139.05c3.784-3.759,5.487-8.759,5.238-13.681\n                C197.237,120.447,195.534,115.448,191.75,111.689z", 2, "fill-rule", "evenodd", "clip-rule", "evenodd"]],
          template: function OwlMultiYearViewComponent_Template(rf, ctx) {
            if (rf & 1) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "button", 0);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function OwlMultiYearViewComponent_Template_button_click_0_listener($event) {
                return ctx.prevYearList($event);
              });

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "span", 1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnamespaceSVG"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "svg", 2);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](3, "path", 3);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnamespaceHTML"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](4, "table", 4);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "thead", 5);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](6, "tr");

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](7, "th", 6);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](8);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](9, "tbody", 7);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("keydown", function OwlMultiYearViewComponent_Template_tbody_keydown_9_listener($event) {
                return ctx.handleCalendarKeydown($event);
              })("select", function OwlMultiYearViewComponent_Template_tbody_select_9_listener($event) {
                return ctx.selectCalendarCell($event);
              });

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](10, "button", 0);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function OwlMultiYearViewComponent_Template_button_click_10_listener($event) {
                return ctx.nextYearList($event);
              });

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](11, "span", 1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnamespaceSVG"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](12, "svg", 8);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](13, "path", 9);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
            }

            if (rf & 2) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", !ctx.previousEnabled());

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-label", ctx.prevButtonLabel);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](8);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx.tableHeader);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("rows", ctx.years)("numCols", 3)("cellRatio", 3 / 7)("activeCell", ctx.activeCell)("todayValue", ctx.todayYear)("selectedValues", ctx.selectedYears)("selectMode", ctx.selectMode);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", !ctx.nextEnabled());

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-label", ctx.nextButtonLabel);
            }
          },
          directives: [_calendar_body_component__WEBPACK_IMPORTED_MODULE_3__["OwlCalendarBodyComponent"]],
          styles: [""],
          changeDetection: 0
        });

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](OwlMultiYearViewComponent, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
            args: [{
              selector: 'owl-date-time-multi-year-view',
              template: "<button class=\"owl-dt-control-button owl-dt-control-arrow-button\" [disabled]=\"!previousEnabled()\" [attr.aria-label]=\"prevButtonLabel\" type=\"button\" tabindex=\"0\" (click)=\"prevYearList($event)\"><span class=\"owl-dt-control-button-content\" tabindex=\"-1\"><!-- <editor-fold desc=\"SVG Arrow Left\"> --> <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 250.738 250.738\" style=\"enable-background:new 0 0 250.738 250.738;\" xml:space=\"preserve\" width=\"100%\" height=\"100%\"><path style=\"fill-rule: evenodd; clip-rule: evenodd;\" d=\"M96.633,125.369l95.053-94.533c7.101-7.055,7.101-18.492,0-25.546   c-7.1-7.054-18.613-7.054-25.714,0L58.989,111.689c-3.784,3.759-5.487,8.759-5.238,13.68c-0.249,4.922,1.454,9.921,5.238,13.681   l106.983,106.398c7.101,7.055,18.613,7.055,25.714,0c7.101-7.054,7.101-18.491,0-25.544L96.633,125.369z\"/></svg><!-- </editor-fold> --></span></button><table class=\"owl-dt-calendar-table owl-dt-calendar-multi-year-table\"><thead class=\"owl-dt-calendar-header\"><tr><th colspan=\"3\">{{tableHeader}}</th></tr></thead><tbody owl-date-time-calendar-body role=\"grid\" [rows]=\"years\" [numCols]=\"3\" [cellRatio]=\"3 / 7\" [activeCell]=\"activeCell\" [todayValue]=\"todayYear\" [selectedValues]=\"selectedYears\" [selectMode]=\"selectMode\" (keydown)=\"handleCalendarKeydown($event)\" (select)=\"selectCalendarCell($event)\"></tbody></table><button class=\"owl-dt-control-button owl-dt-control-arrow-button\" [disabled]=\"!nextEnabled()\" [attr.aria-label]=\"nextButtonLabel\" type=\"button\" tabindex=\"0\" (click)=\"nextYearList($event)\"><span class=\"owl-dt-control-button-content\" tabindex=\"-1\"><!-- <editor-fold desc=\"SVG Arrow Right\"> --> <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 250.738 250.738\" style=\"enable-background:new 0 0 250.738 250.738;\" xml:space=\"preserve\"><path style=\"fill-rule:evenodd;clip-rule:evenodd;\" d=\"M191.75,111.689L84.766,5.291c-7.1-7.055-18.613-7.055-25.713,0\n                c-7.101,7.054-7.101,18.49,0,25.544l95.053,94.534l-95.053,94.533c-7.101,7.054-7.101,18.491,0,25.545\n                c7.1,7.054,18.613,7.054,25.713,0L191.75,139.05c3.784-3.759,5.487-8.759,5.238-13.681\n                C197.237,120.447,195.534,115.448,191.75,111.689z\"/></svg><!-- </editor-fold> --></span></button>",
              styles: [""],
              preserveWhitespaces: false,
              changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush
            }]
          }], function () {
            return [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
            }, {
              type: _date_time_picker_intl_service__WEBPACK_IMPORTED_MODULE_1__["OwlDateTimeIntl"]
            }, {
              type: _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__["DateTimeAdapter"],
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
              }]
            }];
          }, {
            change: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            yearSelected: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            pickerMomentChange: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            keyboardEnter: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            selectMode: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            selected: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            selecteds: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            pickerMoment: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            dateFilter: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            minDate: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            maxDate: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            owlDTCalendarView: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['class.owl-dt-calendar-view']
            }],
            owlDTCalendarMultiYearView: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['class.owl-dt-calendar-multi-year-view']
            }],
            calendarBodyElm: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
              args: [_calendar_body_component__WEBPACK_IMPORTED_MODULE_3__["OwlCalendarBodyComponent"]]
            }]
          });
        })();

        return OwlMultiYearViewComponent;
      }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64, 

      /***/

    },

    /***/
    "Gqsl":
    /*!*********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/repeatWhen.js ***!
      \*********************************************************************/

    /*! exports provided: repeatWhen */

    /***/
    function Gqsl(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "repeatWhen", function () {
        return repeatWhen;
      });
      /* harmony import */


      var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subject */
      "XNiG");
      /* harmony import */


      var _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../innerSubscribe */
      "zx2A");

      function repeatWhen(notifier) {
        return function (source) {
          return source.lift(new RepeatWhenOperator(notifier));
        };
      }

      var RepeatWhenOperator = /*#__PURE__*/function () {
        function RepeatWhenOperator(notifier) {
          _classCallCheck2(this, RepeatWhenOperator);

          this.notifier = notifier;
        }

        _createClass2(RepeatWhenOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new RepeatWhenSubscriber(subscriber, this.notifier, source));
          }
        }]);

        return RepeatWhenOperator;
      }();

      var RepeatWhenSubscriber = /*#__PURE__*/function (_innerSubscribe__WEBP8) {
        _inherits2(RepeatWhenSubscriber, _innerSubscribe__WEBP8);

        var _super229 = _createSuper(RepeatWhenSubscriber);

        function RepeatWhenSubscriber(destination, notifier, source) {
          var _this551;

          _classCallCheck2(this, RepeatWhenSubscriber);

          _this551 = _super229.call(this, destination);
          _this551.notifier = notifier;
          _this551.source = source;
          _this551.sourceIsBeingSubscribedTo = true;
          return _this551;
        }

        _createClass2(RepeatWhenSubscriber, [{
          key: "notifyNext",
          value: function notifyNext() {
            this.sourceIsBeingSubscribedTo = true;
            this.source.subscribe(this);
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete() {
            if (this.sourceIsBeingSubscribedTo === false) {
              return _get2(_getPrototypeOf2(RepeatWhenSubscriber.prototype), "complete", this).call(this);
            }
          }
        }, {
          key: "complete",
          value: function complete() {
            this.sourceIsBeingSubscribedTo = false;

            if (!this.isStopped) {
              if (!this.retries) {
                this.subscribeToRetries();
              }

              if (!this.retriesSubscription || this.retriesSubscription.closed) {
                return _get2(_getPrototypeOf2(RepeatWhenSubscriber.prototype), "complete", this).call(this);
              }

              this._unsubscribeAndRecycle();

              this.notifications.next(undefined);
            }
          }
        }, {
          key: "_unsubscribe",
          value: function _unsubscribe() {
            var notifications = this.notifications,
                retriesSubscription = this.retriesSubscription;

            if (notifications) {
              notifications.unsubscribe();
              this.notifications = undefined;
            }

            if (retriesSubscription) {
              retriesSubscription.unsubscribe();
              this.retriesSubscription = undefined;
            }

            this.retries = undefined;
          }
        }, {
          key: "_unsubscribeAndRecycle",
          value: function _unsubscribeAndRecycle() {
            var _unsubscribe = this._unsubscribe;
            this._unsubscribe = null;

            _get2(_getPrototypeOf2(RepeatWhenSubscriber.prototype), "_unsubscribeAndRecycle", this).call(this);

            this._unsubscribe = _unsubscribe;
            return this;
          }
        }, {
          key: "subscribeToRetries",
          value: function subscribeToRetries() {
            this.notifications = new _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"]();
            var retries;

            try {
              var notifier = this.notifier;
              retries = notifier(this.notifications);
            } catch (e) {
              return _get2(_getPrototypeOf2(RepeatWhenSubscriber.prototype), "complete", this).call(this);
            }

            this.retries = retries;
            this.retriesSubscription = Object(_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__["innerSubscribe"])(retries, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__["SimpleInnerSubscriber"](this));
          }
        }]);

        return RepeatWhenSubscriber;
      }(_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__["SimpleOuterSubscriber"]); //# sourceMappingURL=repeatWhen.js.map

      /***/

    },

    /***/
    "GyhO":
    /*!******************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/concat.js ***!
      \******************************************************************/

    /*! exports provided: concat */

    /***/
    function GyhO(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "concat", function () {
        return concat;
      });
      /* harmony import */


      var _of__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./of */
      "LRne");
      /* harmony import */


      var _operators_concatAll__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../operators/concatAll */
      "0EUg");

      function concat() {
        return Object(_operators_concatAll__WEBPACK_IMPORTED_MODULE_1__["concatAll"])()(Object(_of__WEBPACK_IMPORTED_MODULE_0__["of"]).apply(void 0, arguments));
      } //# sourceMappingURL=concat.js.map

      /***/

    },

    /***/
    "H7XF":
    /*!*****************************************!*\
      !*** ./node_modules/base64-js/index.js ***!
      \*****************************************/

    /*! no static exports found */

    /***/
    function H7XF(module, exports, __webpack_require__) {
      "use strict";

      exports.byteLength = byteLength;
      exports.toByteArray = toByteArray;
      exports.fromByteArray = fromByteArray;
      var lookup = [];
      var revLookup = [];
      var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;
      var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

      for (var i = 0, len = code.length; i < len; ++i) {
        lookup[i] = code[i];
        revLookup[code.charCodeAt(i)] = i;
      } // Support decoding URL-safe base64 strings, as Node.js does.
      // See: https://en.wikipedia.org/wiki/Base64#URL_applications


      revLookup['-'.charCodeAt(0)] = 62;
      revLookup['_'.charCodeAt(0)] = 63;

      function getLens(b64) {
        var len = b64.length;

        if (len % 4 > 0) {
          throw new Error('Invalid string. Length must be a multiple of 4');
        } // Trim off extra bytes after placeholder bytes are found
        // See: https://github.com/beatgammit/base64-js/issues/42


        var validLen = b64.indexOf('=');
        if (validLen === -1) validLen = len;
        var placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4;
        return [validLen, placeHoldersLen];
      } // base64 is 4/3 + up to two characters of the original data


      function byteLength(b64) {
        var lens = getLens(b64);
        var validLen = lens[0];
        var placeHoldersLen = lens[1];
        return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;
      }

      function _byteLength(b64, validLen, placeHoldersLen) {
        return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;
      }

      function toByteArray(b64) {
        var tmp;
        var lens = getLens(b64);
        var validLen = lens[0];
        var placeHoldersLen = lens[1];
        var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));
        var curByte = 0; // if there are placeholders, only get up to the last complete 4 chars

        var len = placeHoldersLen > 0 ? validLen - 4 : validLen;
        var i;

        for (i = 0; i < len; i += 4) {
          tmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)];
          arr[curByte++] = tmp >> 16 & 0xFF;
          arr[curByte++] = tmp >> 8 & 0xFF;
          arr[curByte++] = tmp & 0xFF;
        }

        if (placeHoldersLen === 2) {
          tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4;
          arr[curByte++] = tmp & 0xFF;
        }

        if (placeHoldersLen === 1) {
          tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2;
          arr[curByte++] = tmp >> 8 & 0xFF;
          arr[curByte++] = tmp & 0xFF;
        }

        return arr;
      }

      function tripletToBase64(num) {
        return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F];
      }

      function encodeChunk(uint8, start, end) {
        var tmp;
        var output = [];

        for (var i = start; i < end; i += 3) {
          tmp = (uint8[i] << 16 & 0xFF0000) + (uint8[i + 1] << 8 & 0xFF00) + (uint8[i + 2] & 0xFF);
          output.push(tripletToBase64(tmp));
        }

        return output.join('');
      }

      function fromByteArray(uint8) {
        var tmp;
        var len = uint8.length;
        var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes

        var parts = [];
        var maxChunkLength = 16383; // must be multiple of 3
        // go through the array every three bytes, we'll deal with trailing stuff later

        for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
          parts.push(encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength));
        } // pad the end with zeros, but make sure to not forget the extra bytes


        if (extraBytes === 1) {
          tmp = uint8[len - 1];
          parts.push(lookup[tmp >> 2] + lookup[tmp << 4 & 0x3F] + '==');
        } else if (extraBytes === 2) {
          tmp = (uint8[len - 2] << 8) + uint8[len - 1];
          parts.push(lookup[tmp >> 10] + lookup[tmp >> 4 & 0x3F] + lookup[tmp << 2 & 0x3F] + '=');
        }

        return parts.join('');
      }
      /***/

    },

    /***/
    "H8ED":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/be.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function H8ED(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Belarusian [be]
      //! author : Dmitry Demidov : https://github.com/demidov91
      //! author: Praleska: http://praleska.pro/
      //! Author : Menelion Elensúle : https://github.com/Oire
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        function plural(word, num) {
          var forms = word.split('_');
          return num % 10 === 1 && num % 100 !== 11 ? forms[0] : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2];
        }

        function relativeTimeWithPlural(number, withoutSuffix, key) {
          var format = {
            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',
            mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',
            hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',
            dd: 'дзень_дні_дзён',
            MM: 'месяц_месяцы_месяцаў',
            yy: 'год_гады_гадоў'
          };

          if (key === 'm') {
            return withoutSuffix ? 'хвіліна' : 'хвіліну';
          } else if (key === 'h') {
            return withoutSuffix ? 'гадзіна' : 'гадзіну';
          } else {
            return number + ' ' + plural(format[key], +number);
          }
        }

        var be = moment.defineLocale('be', {
          months: {
            format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),
            standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')
          },
          monthsShort: 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),
          weekdays: {
            format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),
            standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),
            isFormat: /\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/
          },
          weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
          weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY г.',
            LLL: 'D MMMM YYYY г., HH:mm',
            LLLL: 'dddd, D MMMM YYYY г., HH:mm'
          },
          calendar: {
            sameDay: '[Сёння ў] LT',
            nextDay: '[Заўтра ў] LT',
            lastDay: '[Учора ў] LT',
            nextWeek: function nextWeek() {
              return '[У] dddd [ў] LT';
            },
            lastWeek: function lastWeek() {
              switch (this.day()) {
                case 0:
                case 3:
                case 5:
                case 6:
                  return '[У мінулую] dddd [ў] LT';

                case 1:
                case 2:
                case 4:
                  return '[У мінулы] dddd [ў] LT';
              }
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: 'праз %s',
            past: '%s таму',
            s: 'некалькі секунд',
            m: relativeTimeWithPlural,
            mm: relativeTimeWithPlural,
            h: relativeTimeWithPlural,
            hh: relativeTimeWithPlural,
            d: 'дзень',
            dd: relativeTimeWithPlural,
            M: 'месяц',
            MM: relativeTimeWithPlural,
            y: 'год',
            yy: relativeTimeWithPlural
          },
          meridiemParse: /ночы|раніцы|дня|вечара/,
          isPM: function isPM(input) {
            return /^(дня|вечара)$/.test(input);
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 4) {
              return 'ночы';
            } else if (hour < 12) {
              return 'раніцы';
            } else if (hour < 17) {
              return 'дня';
            } else {
              return 'вечара';
            }
          },
          dayOfMonthOrdinalParse: /\d{1,2}-(і|ы|га)/,
          ordinal: function ordinal(number, period) {
            switch (period) {
              case 'M':
              case 'd':
              case 'DDD':
              case 'w':
              case 'W':
                return (number % 10 === 2 || number % 10 === 3) && number % 100 !== 12 && number % 100 !== 13 ? number + '-і' : number + '-ы';

              case 'D':
                return number + '-га';

              default:
                return number;
            }
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return be;
      });
      /***/

    },

    /***/
    "HAEn":
    /*!********************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/dialog/index.js ***!
      \********************************************************************/

    /*! exports provided: OwlDialogModule, OwlDialogService, OwlDialogRef */

    /***/
    function HAEn(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony import */


      var _dialog_module__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./dialog.module */
      "HMnl");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OwlDialogModule", function () {
        return _dialog_module__WEBPACK_IMPORTED_MODULE_0__["OwlDialogModule"];
      });
      /* harmony import */


      var _dialog_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./dialog.service */
      "Pk7N");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OwlDialogService", function () {
        return _dialog_service__WEBPACK_IMPORTED_MODULE_1__["OwlDialogService"];
      });
      /* harmony import */


      var _dialog_ref_class__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./dialog-ref.class */
      "oJLU");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OwlDialogRef", function () {
        return _dialog_ref_class__WEBPACK_IMPORTED_MODULE_2__["OwlDialogRef"];
      });
      /***/

    },

    /***/
    "HDdC":
    /*!***********************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/Observable.js ***!
      \***********************************************************/

    /*! exports provided: Observable */

    /***/
    function HDdC(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Observable", function () {
        return Observable;
      });
      /* harmony import */


      var _util_canReportError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./util/canReportError */
      "8Qeq");
      /* harmony import */


      var _util_toSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./util/toSubscriber */
      "WyKG");
      /* harmony import */


      var _symbol_observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./symbol/observable */
      "kJWO");
      /* harmony import */


      var _util_pipe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./util/pipe */
      "mCNh");
      /* harmony import */


      var _config__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ./config */
      "2fFW");

      var Observable = /*#__PURE__*/function (_symbol_observable__W) {
        function Observable(subscribe) {
          _classCallCheck2(this, Observable);

          this._isScalar = false;

          if (subscribe) {
            this._subscribe = subscribe;
          }
        }

        _createClass2(Observable, [{
          key: "lift",
          value: function lift(operator) {
            var observable = new Observable();
            observable.source = this;
            observable.operator = operator;
            return observable;
          }
        }, {
          key: "subscribe",
          value: function subscribe(observerOrNext, error, complete) {
            var operator = this.operator;
            var sink = Object(_util_toSubscriber__WEBPACK_IMPORTED_MODULE_1__["toSubscriber"])(observerOrNext, error, complete);

            if (operator) {
              sink.add(operator.call(sink, this.source));
            } else {
              sink.add(this.source || _config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling && !sink.syncErrorThrowable ? this._subscribe(sink) : this._trySubscribe(sink));
            }

            if (_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling) {
              if (sink.syncErrorThrowable) {
                sink.syncErrorThrowable = false;

                if (sink.syncErrorThrown) {
                  throw sink.syncErrorValue;
                }
              }
            }

            return sink;
          }
        }, {
          key: "_trySubscribe",
          value: function _trySubscribe(sink) {
            try {
              return this._subscribe(sink);
            } catch (err) {
              if (_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling) {
                sink.syncErrorThrown = true;
                sink.syncErrorValue = err;
              }

              if (Object(_util_canReportError__WEBPACK_IMPORTED_MODULE_0__["canReportError"])(sink)) {
                sink.error(err);
              } else {
                console.warn(err);
              }
            }
          }
        }, {
          key: "forEach",
          value: function forEach(next, promiseCtor) {
            var _this552 = this;

            promiseCtor = getPromiseCtor(promiseCtor);
            return new promiseCtor(function (resolve, reject) {
              var subscription;
              subscription = _this552.subscribe(function (value) {
                try {
                  next(value);
                } catch (err) {
                  reject(err);

                  if (subscription) {
                    subscription.unsubscribe();
                  }
                }
              }, reject, resolve);
            });
          }
        }, {
          key: "_subscribe",
          value: function _subscribe(subscriber) {
            var source = this.source;
            return source && source.subscribe(subscriber);
          }
        }, {
          key: _symbol_observable__W,
          value: function value() {
            return this;
          }
        }, {
          key: "pipe",
          value: function pipe() {
            for (var _len27 = arguments.length, operations = new Array(_len27), _key29 = 0; _key29 < _len27; _key29++) {
              operations[_key29] = arguments[_key29];
            }

            if (operations.length === 0) {
              return this;
            }

            return Object(_util_pipe__WEBPACK_IMPORTED_MODULE_3__["pipeFromArray"])(operations)(this);
          }
        }, {
          key: "toPromise",
          value: function toPromise(promiseCtor) {
            var _this553 = this;

            promiseCtor = getPromiseCtor(promiseCtor);
            return new promiseCtor(function (resolve, reject) {
              var value;

              _this553.subscribe(function (x) {
                return value = x;
              }, function (err) {
                return reject(err);
              }, function () {
                return resolve(value);
              });
            });
          }
        }]);

        return Observable;
      }(_symbol_observable__WEBPACK_IMPORTED_MODULE_2__["observable"]);

      Observable.create = function (subscribe) {
        return new Observable(subscribe);
      };

      function getPromiseCtor(promiseCtor) {
        if (!promiseCtor) {
          promiseCtor = _config__WEBPACK_IMPORTED_MODULE_4__["config"].Promise || Promise;
        }

        if (!promiseCtor) {
          throw new Error('no Promise impl found');
        }

        return promiseCtor;
      } //# sourceMappingURL=Observable.js.map

      /***/

    },

    /***/
    "HMnl":
    /*!****************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/dialog/dialog.module.js ***!
      \****************************************************************************/

    /*! exports provided: OwlDialogModule */

    /***/
    function HMnl(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OwlDialogModule", function () {
        return OwlDialogModule;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/cdk/a11y */
      "u47x");
      /* harmony import */


      var _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/cdk/overlay */
      "rDax");
      /* harmony import */


      var _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/cdk/portal */
      "+rOU");
      /* harmony import */


      var _dialog_service__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! ./dialog.service */
      "Pk7N");
      /* harmony import */


      var _dialog_container_component__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! ./dialog-container.component */
      "m1pj");

      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var OwlDialogModule = function () {
        function OwlDialogModule() {}

        OwlDialogModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
          type: OwlDialogModule
        });
        OwlDialogModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
          factory: function OwlDialogModule_Factory(t) {
            return new (t || OwlDialogModule)();
          },
          providers: [_dialog_service__WEBPACK_IMPORTED_MODULE_5__["OWL_DIALOG_SCROLL_STRATEGY_PROVIDER"], _dialog_service__WEBPACK_IMPORTED_MODULE_5__["OwlDialogService"]],
          imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_2__["A11yModule"], _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_3__["OverlayModule"], _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_4__["PortalModule"]]]
        });

        (function () {
          (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](OwlDialogModule, {
            declarations: function declarations() {
              return [_dialog_container_component__WEBPACK_IMPORTED_MODULE_6__["OwlDialogContainerComponent"]];
            },
            imports: function imports() {
              return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_2__["A11yModule"], _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_3__["OverlayModule"], _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_4__["PortalModule"]];
            }
          });
        })();

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](OwlDialogModule, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
            args: [{
              imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_2__["A11yModule"], _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_3__["OverlayModule"], _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_4__["PortalModule"]],
              exports: [],
              declarations: [_dialog_container_component__WEBPACK_IMPORTED_MODULE_6__["OwlDialogContainerComponent"]],
              providers: [_dialog_service__WEBPACK_IMPORTED_MODULE_5__["OWL_DIALOG_SCROLL_STRATEGY_PROVIDER"], _dialog_service__WEBPACK_IMPORTED_MODULE_5__["OwlDialogService"]],
              entryComponents: [_dialog_container_component__WEBPACK_IMPORTED_MODULE_6__["OwlDialogContainerComponent"]]
            }]
          }], function () {
            return [];
          }, null);
        })();

        return OwlDialogModule;
      }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLm1vZHVsZS5qcyIsInNvdXJjZXMiOlsiZGlhbG9nLm1vZHVsZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7OztLQWVLOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztnREFnQm1CIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBMTF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgT3ZlcmxheU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFBvcnRhbE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgT1dMX0RJQUxPR19TQ1JPTExfU1RSQVRFR1lfUFJPVklERVIsIE93bERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuL2RpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7IE93bERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4vZGlhbG9nLWNvbnRhaW5lci5jb21wb25lbnQnO1xudmFyIE93bERpYWxvZ01vZHVsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT3dsRGlhbG9nTW9kdWxlKCkge1xuICAgIH1cbiAgICBPd2xEaWFsb2dNb2R1bGUgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgTmdNb2R1bGUoe1xuICAgICAgICAgICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQTExeU1vZHVsZSwgT3ZlcmxheU1vZHVsZSwgUG9ydGFsTW9kdWxlXSxcbiAgICAgICAgICAgIGV4cG9ydHM6IFtdLFxuICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgICAgICAgICAgT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgIE9XTF9ESUFMT0dfU0NST0xMX1NUUkFURUdZX1BST1ZJREVSLFxuICAgICAgICAgICAgICAgIE93bERpYWxvZ1NlcnZpY2UsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZW50cnlDb21wb25lbnRzOiBbXG4gICAgICAgICAgICAgICAgT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50LFxuICAgICAgICAgICAgXVxuICAgICAgICB9KVxuICAgIF0sIE93bERpYWxvZ01vZHVsZSk7XG4gICAgcmV0dXJuIE93bERpYWxvZ01vZHVsZTtcbn0oKSk7XG5leHBvcnQgeyBPd2xEaWFsb2dNb2R1bGUgfTtcbiJdfQ==

      /***/

    },

    /***/
    "HNkt":
    /*!************************************************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime-moment/__ivy_ngcc__/moment-adapter/moment-date-time-adapter.class.js ***!
      \************************************************************************************************************/

    /*! exports provided: OWL_MOMENT_DATE_TIME_ADAPTER_OPTIONS, OWL_MOMENT_DATE_TIME_ADAPTER_OPTIONS_FACTORY, MomentDateTimeAdapter */

    /***/
    function HNkt(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OWL_MOMENT_DATE_TIME_ADAPTER_OPTIONS", function () {
        return OWL_MOMENT_DATE_TIME_ADAPTER_OPTIONS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OWL_MOMENT_DATE_TIME_ADAPTER_OPTIONS_FACTORY", function () {
        return OWL_MOMENT_DATE_TIME_ADAPTER_OPTIONS_FACTORY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MomentDateTimeAdapter", function () {
        return MomentDateTimeAdapter;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var ng_pick_datetime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ng-pick-datetime */
      "z17N");
      /* harmony import */


      var moment_moment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! moment/moment */
      "wd/R");
      /* harmony import */


      var moment_moment__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(moment_moment__WEBPACK_IMPORTED_MODULE_2__);

      var __extends = undefined && undefined.__extends || function () {
        var _extendStatics4 = function extendStatics(d, b) {
          _extendStatics4 = Object.setPrototypeOf || {
            __proto__: []
          } instanceof Array && function (d, b) {
            d.__proto__ = b;
          } || function (d, b) {
            for (var p in b) {
              if (b.hasOwnProperty(p)) d[p] = b[p];
            }
          };

          return _extendStatics4(d, b);
        };

        return function (d, b) {
          _extendStatics4(d, b);

          function __() {
            this.constructor = d;
          }

          d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
        };
      }();

      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var __metadata = undefined && undefined.__metadata || function (k, v) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
      };

      var __param = undefined && undefined.__param || function (paramIndex, decorator) {
        return function (target, key) {
          decorator(target, key, paramIndex);
        };
      };

      var moment = moment_moment__WEBPACK_IMPORTED_MODULE_2___default.a ? moment_moment__WEBPACK_IMPORTED_MODULE_2___default.a : moment_moment__WEBPACK_IMPORTED_MODULE_2__;
      var OWL_MOMENT_DATE_TIME_ADAPTER_OPTIONS = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('OWL_MOMENT_DATE_TIME_ADAPTER_OPTIONS', {
        providedIn: 'root',
        factory: OWL_MOMENT_DATE_TIME_ADAPTER_OPTIONS_FACTORY
      });

      function OWL_MOMENT_DATE_TIME_ADAPTER_OPTIONS_FACTORY() {
        return {
          useUtc: false
        };
      }

      function range(length, valueFunction) {
        var valuesArray = Array(length);

        for (var i = 0; i < length; i++) {
          valuesArray[i] = valueFunction(i);
        }

        return valuesArray;
      }

      var MomentDateTimeAdapter = function (_super) {
        __extends(MomentDateTimeAdapter, _super);

        function MomentDateTimeAdapter(owlDateTimeLocale, options) {
          var _this = _super.call(this) || this;

          _this.owlDateTimeLocale = owlDateTimeLocale;
          _this.options = options;

          _this.setLocale(owlDateTimeLocale || moment.locale());

          return _this;
        }

        MomentDateTimeAdapter.prototype.setLocale = function (locale) {
          var _this = this;

          _super.prototype.setLocale.call(this, locale);

          var momentLocaleData = moment.localeData(locale);
          this._localeData = {
            longMonths: momentLocaleData.months(),
            shortMonths: momentLocaleData.monthsShort(),
            longDaysOfWeek: momentLocaleData.weekdays(),
            shortDaysOfWeek: momentLocaleData.weekdaysShort(),
            narrowDaysOfWeek: momentLocaleData.weekdaysMin(),
            dates: range(31, function (i) {
              return _this.createDate(2017, 0, i + 1).format('D');
            })
          };
        };

        MomentDateTimeAdapter.prototype.getYear = function (date) {
          return this.clone(date).year();
        };

        MomentDateTimeAdapter.prototype.getMonth = function (date) {
          return this.clone(date).month();
        };

        MomentDateTimeAdapter.prototype.getDay = function (date) {
          return this.clone(date).day();
        };

        MomentDateTimeAdapter.prototype.getDate = function (date) {
          return this.clone(date).date();
        };

        MomentDateTimeAdapter.prototype.getHours = function (date) {
          return this.clone(date).hours();
        };

        MomentDateTimeAdapter.prototype.getMinutes = function (date) {
          return this.clone(date).minutes();
        };

        MomentDateTimeAdapter.prototype.getSeconds = function (date) {
          return this.clone(date).seconds();
        };

        MomentDateTimeAdapter.prototype.getTime = function (date) {
          return this.clone(date).valueOf();
        };

        MomentDateTimeAdapter.prototype.getNumDaysInMonth = function (date) {
          return this.clone(date).daysInMonth();
        };

        MomentDateTimeAdapter.prototype.differenceInCalendarDays = function (dateLeft, dateRight) {
          return this.clone(dateLeft).diff(dateRight, 'days');
        };

        MomentDateTimeAdapter.prototype.getYearName = function (date) {
          return this.clone(date).format('YYYY');
        };

        MomentDateTimeAdapter.prototype.getMonthNames = function (style) {
          return style === 'long' ? this._localeData.longMonths : this._localeData.shortMonths;
        };

        MomentDateTimeAdapter.prototype.getDayOfWeekNames = function (style) {
          if (style === 'long') {
            return this._localeData.longDaysOfWeek;
          }

          if (style === 'short') {
            return this._localeData.shortDaysOfWeek;
          }

          return this._localeData.narrowDaysOfWeek;
        };

        MomentDateTimeAdapter.prototype.getDateNames = function () {
          return this._localeData.dates;
        };

        MomentDateTimeAdapter.prototype.toIso8601 = function (date) {
          return this.clone(date).format();
        };

        MomentDateTimeAdapter.prototype.isEqual = function (dateLeft, dateRight) {
          if (dateLeft && dateRight) {
            return this.clone(dateLeft).isSame(this.clone(dateRight));
          }

          return dateLeft === dateRight;
        };

        MomentDateTimeAdapter.prototype.isSameDay = function (dateLeft, dateRight) {
          if (dateLeft && dateRight) {
            return this.clone(dateLeft).isSame(this.clone(dateRight), 'day');
          }

          return dateLeft === dateRight;
        };

        MomentDateTimeAdapter.prototype.isValid = function (date) {
          return this.clone(date).isValid();
        };

        MomentDateTimeAdapter.prototype.invalid = function () {
          return moment.invalid();
        };

        MomentDateTimeAdapter.prototype.isDateInstance = function (obj) {
          return moment.isMoment(obj);
        };

        MomentDateTimeAdapter.prototype.addCalendarYears = function (date, amount) {
          return this.clone(date).add({
            years: amount
          });
        };

        MomentDateTimeAdapter.prototype.addCalendarMonths = function (date, amount) {
          return this.clone(date).add({
            months: amount
          });
        };

        MomentDateTimeAdapter.prototype.addCalendarDays = function (date, amount) {
          return this.clone(date).add({
            days: amount
          });
        };

        MomentDateTimeAdapter.prototype.setHours = function (date, amount) {
          return this.clone(date).hours(amount);
        };

        MomentDateTimeAdapter.prototype.setMinutes = function (date, amount) {
          return this.clone(date).minutes(amount);
        };

        MomentDateTimeAdapter.prototype.setSeconds = function (date, amount) {
          return this.clone(date).seconds(amount);
        };

        MomentDateTimeAdapter.prototype.createDate = function (year, month, date, hours, minutes, seconds) {
          if (hours === void 0) {
            hours = 0;
          }

          if (minutes === void 0) {
            minutes = 0;
          }

          if (seconds === void 0) {
            seconds = 0;
          }

          if (month < 0 || month > 11) {
            throw Error("Invalid month index \"" + month + "\". Month index has to be between 0 and 11.");
          }

          if (date < 1) {
            throw Error("Invalid date \"" + date + "\". Date has to be greater than 0.");
          }

          if (hours < 0 || hours > 23) {
            throw Error("Invalid hours \"" + hours + "\". Hours has to be between 0 and 23.");
          }

          if (minutes < 0 || minutes > 59) {
            throw Error("Invalid minutes \"" + minutes + "\". Minutes has to between 0 and 59.");
          }

          if (seconds < 0 || seconds > 59) {
            throw Error("Invalid seconds \"" + seconds + "\". Seconds has to be between 0 and 59.");
          }

          var result = this.createMoment({
            year: year,
            month: month,
            date: date,
            hours: hours,
            minutes: minutes,
            seconds: seconds
          }).locale(this.locale);

          if (!result.isValid()) {
            throw Error("Invalid date \"" + date + "\" for month with index \"" + month + "\".");
          }

          return result;
        };

        MomentDateTimeAdapter.prototype.clone = function (date) {
          return this.createMoment(date).clone().locale(this.locale);
        };

        MomentDateTimeAdapter.prototype.now = function () {
          return this.createMoment().locale(this.locale);
        };

        MomentDateTimeAdapter.prototype.format = function (date, displayFormat) {
          date = this.clone(date);

          if (!this.isValid(date)) {
            throw Error('MomentDateTimeAdapter: Cannot format invalid date.');
          }

          return date.format(displayFormat);
        };

        MomentDateTimeAdapter.prototype.parse = function (value, parseFormat) {
          if (value && typeof value === 'string') {
            return this.createMoment(value, parseFormat, this.locale);
          }

          return value ? this.createMoment(value).locale(this.locale) : null;
        };

        MomentDateTimeAdapter.prototype.deserialize = function (value) {
          var date;

          if (value instanceof Date) {
            date = this.createMoment(value);
          }

          if (typeof value === 'string') {
            if (!value) {
              return null;
            }

            date = this.createMoment(value, moment.ISO_8601).locale(this.locale);
          }

          if (date && this.isValid(date)) {
            return date;
          }

          return _super.prototype.deserialize.call(this, value);
        };

        MomentDateTimeAdapter.prototype.createMoment = function () {
          var args = [];

          for (var _i = 0; _i < arguments.length; _i++) {
            args[_i] = arguments[_i];
          }

          return this.options && this.options.useUtc ? moment.utc.apply(moment, args) : moment.apply(void 0, args);
        };

        MomentDateTimeAdapter = __decorate([__param(0, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __param(0, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"])(ng_pick_datetime__WEBPACK_IMPORTED_MODULE_1__["OWL_DATE_TIME_LOCALE"])), __param(1, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __param(1, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"])(OWL_MOMENT_DATE_TIME_ADAPTER_OPTIONS)), __metadata("design:paramtypes", [String, Object])], MomentDateTimeAdapter);

        MomentDateTimeAdapter.ɵfac = function MomentDateTimeAdapter_Factory(t) {
          return new (t || MomentDateTimeAdapter)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](ng_pick_datetime__WEBPACK_IMPORTED_MODULE_1__["OWL_DATE_TIME_LOCALE"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](OWL_MOMENT_DATE_TIME_ADAPTER_OPTIONS, 8));
        };

        MomentDateTimeAdapter.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
          token: MomentDateTimeAdapter,
          factory: function factory(t) {
            return MomentDateTimeAdapter.ɵfac(t);
          }
        });

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MomentDateTimeAdapter, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
          }], function () {
            return [{
              type: String,
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
              }, {
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
                args: [ng_pick_datetime__WEBPACK_IMPORTED_MODULE_1__["OWL_DATE_TIME_LOCALE"]]
              }]
            }, {
              type: Object,
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
              }, {
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
                args: [OWL_MOMENT_DATE_TIME_ADAPTER_OPTIONS]
              }]
            }];
          }, null);
        })();

        return MomentDateTimeAdapter;
      }(ng_pick_datetime__WEBPACK_IMPORTED_MODULE_1__["DateTimeAdapter"]); //# sourceMappingURL=data:application/json;charset=utf-8;base64, 

      /***/

    },

    /***/
    "HO/X":
    /*!***************************************************************************************!*\
      !*** ./node_modules/angular-datatables/__ivy_ngcc__/src/angular-datatables.module.js ***!
      \***************************************************************************************/

    /*! exports provided: DataTablesModule */

    /***/
    function HOX(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DataTablesModule", function () {
        return DataTablesModule;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_datatables_directive__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./angular-datatables.directive */
      "/iSe");
      /**
       * @license
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://raw.githubusercontent.com/l-lin/angular-datatables/master/LICENSE
       */


      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var DataTablesModule =
      /** @class */
      function () {
        function DataTablesModule() {}

        DataTablesModule_1 = DataTablesModule;

        DataTablesModule.forRoot = function () {
          return {
            ngModule: DataTablesModule_1
          };
        };

        var DataTablesModule_1;
        DataTablesModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
          type: DataTablesModule
        });
        DataTablesModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
          factory: function DataTablesModule_Factory(t) {
            return new (t || DataTablesModule)();
          },
          imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]]
        });

        (function () {
          (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](DataTablesModule, {
            declarations: function declarations() {
              return [_angular_datatables_directive__WEBPACK_IMPORTED_MODULE_2__["DataTableDirective"]];
            },
            imports: function imports() {
              return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]];
            },
            exports: function exports() {
              return [_angular_datatables_directive__WEBPACK_IMPORTED_MODULE_2__["DataTableDirective"]];
            }
          });
        })();

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DataTablesModule, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
            args: [{
              imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]],
              declarations: [_angular_datatables_directive__WEBPACK_IMPORTED_MODULE_2__["DataTableDirective"]],
              exports: [_angular_datatables_directive__WEBPACK_IMPORTED_MODULE_2__["DataTableDirective"]]
            }]
          }], function () {
            return [];
          }, null);
        })();

        return DataTablesModule;
      }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1kYXRhdGFibGVzLm1vZHVsZS5qcyIsInNvdXJjZXMiOlsiYW5ndWxhci1kYXRhdGFibGVzLm1vZHVsZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztBQU1BOzs7Ozs7Ozs7Ozs7Ozs7Ozs7MkJBa0IyQjs7Ozs7Ozs7Ozs7Z0RBT0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2wtbGluL2FuZ3VsYXItZGF0YXRhYmxlcy9tYXN0ZXIvTElDRU5TRVxuICovXG52YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERhdGFUYWJsZURpcmVjdGl2ZSB9IGZyb20gJy4vYW5ndWxhci1kYXRhdGFibGVzLmRpcmVjdGl2ZSc7XG52YXIgRGF0YVRhYmxlc01vZHVsZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEYXRhVGFibGVzTW9kdWxlKCkge1xuICAgIH1cbiAgICBEYXRhVGFibGVzTW9kdWxlXzEgPSBEYXRhVGFibGVzTW9kdWxlO1xuICAgIERhdGFUYWJsZXNNb2R1bGUuZm9yUm9vdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5nTW9kdWxlOiBEYXRhVGFibGVzTW9kdWxlXzFcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBEYXRhVGFibGVzTW9kdWxlXzE7XG4gICAgRGF0YVRhYmxlc01vZHVsZSA9IERhdGFUYWJsZXNNb2R1bGVfMSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICBOZ01vZHVsZSh7XG4gICAgICAgICAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW0RhdGFUYWJsZURpcmVjdGl2ZV0sXG4gICAgICAgICAgICBleHBvcnRzOiBbRGF0YVRhYmxlRGlyZWN0aXZlXVxuICAgICAgICB9KVxuICAgIF0sIERhdGFUYWJsZXNNb2R1bGUpO1xuICAgIHJldHVybiBEYXRhVGFibGVzTW9kdWxlO1xufSgpKTtcbmV4cG9ydCB7IERhdGFUYWJsZXNNb2R1bGUgfTtcbiJdfQ==

      /***/

    },

    /***/
    "HP3h":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/ar-ly.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function HP3h(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Arabic (Lybia) [ar-ly]
      //! author : Ali Hmer: https://github.com/kikoanis
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var symbolMap = {
          1: '1',
          2: '2',
          3: '3',
          4: '4',
          5: '5',
          6: '6',
          7: '7',
          8: '8',
          9: '9',
          0: '0'
        },
            pluralForm = function pluralForm(n) {
          return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
        },
            plurals = {
          s: ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
          m: ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
          h: ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
          d: ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
          M: ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
          y: ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
        },
            pluralize = function pluralize(u) {
          return function (number, withoutSuffix, string, isFuture) {
            var f = pluralForm(number),
                str = plurals[u][pluralForm(number)];

            if (f === 2) {
              str = str[withoutSuffix ? 0 : 1];
            }

            return str.replace(/%d/i, number);
          };
        },
            months = ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'];

        var arLy = moment.defineLocale('ar-ly', {
          months: months,
          monthsShort: months,
          weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
          weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
          weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: "D/\u200FM/\u200FYYYY",
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm'
          },
          meridiemParse: /ص|م/,
          isPM: function isPM(input) {
            return 'م' === input;
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 12) {
              return 'ص';
            } else {
              return 'م';
            }
          },
          calendar: {
            sameDay: '[اليوم عند الساعة] LT',
            nextDay: '[غدًا عند الساعة] LT',
            nextWeek: 'dddd [عند الساعة] LT',
            lastDay: '[أمس عند الساعة] LT',
            lastWeek: 'dddd [عند الساعة] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'بعد %s',
            past: 'منذ %s',
            s: pluralize('s'),
            ss: pluralize('s'),
            m: pluralize('m'),
            mm: pluralize('m'),
            h: pluralize('h'),
            hh: pluralize('h'),
            d: pluralize('d'),
            dd: pluralize('d'),
            M: pluralize('M'),
            MM: pluralize('M'),
            y: pluralize('y'),
            yy: pluralize('y')
          },
          preparse: function preparse(string) {
            return string.replace(/،/g, ',');
          },
          postformat: function postformat(string) {
            return string.replace(/\d/g, function (match) {
              return symbolMap[match];
            }).replace(/,/g, '،');
          },
          week: {
            dow: 6,
            // Saturday is the first day of the week.
            doy: 12 // The week that contains Jan 12th is the first week of the year.

          }
        });
        return arLy;
      });
      /***/

    },

    /***/
    "Hh5Z":
    /*!*************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/scheduler/QueueScheduler.js ***!
      \*************************************************************************/

    /*! exports provided: QueueScheduler */

    /***/
    function Hh5Z(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "QueueScheduler", function () {
        return QueueScheduler;
      });
      /* harmony import */


      var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./AsyncScheduler */
      "IjjT");

      var QueueScheduler = /*#__PURE__*/function (_AsyncScheduler__WEBP) {
        _inherits2(QueueScheduler, _AsyncScheduler__WEBP);

        var _super230 = _createSuper(QueueScheduler);

        function QueueScheduler() {
          _classCallCheck2(this, QueueScheduler);

          return _super230.apply(this, arguments);
        }

        return QueueScheduler;
      }(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_0__["AsyncScheduler"]); //# sourceMappingURL=QueueScheduler.js.map

      /***/

    },

    /***/
    "Hkhx":
    /*!*****************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/onErrorResumeNext.js ***!
      \*****************************************************************************/

    /*! exports provided: onErrorResumeNext */

    /***/
    function Hkhx(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "onErrorResumeNext", function () {
        return onErrorResumeNext;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./from */
      "Cfvw");
      /* harmony import */


      var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../util/isArray */
      "DH7j");
      /* harmony import */


      var _empty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./empty */
      "EY2u");

      function onErrorResumeNext() {
        for (var _len28 = arguments.length, sources = new Array(_len28), _key30 = 0; _key30 < _len28; _key30++) {
          sources[_key30] = arguments[_key30];
        }

        if (sources.length === 0) {
          return _empty__WEBPACK_IMPORTED_MODULE_3__["EMPTY"];
        }

        var first = sources[0],
            remainder = sources.slice(1);

        if (sources.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_2__["isArray"])(first)) {
          return onErrorResumeNext.apply(void 0, _toConsumableArray(first));
        }

        return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
          var subNext = function subNext() {
            return subscriber.add(onErrorResumeNext.apply(void 0, _toConsumableArray(remainder)).subscribe(subscriber));
          };

          return Object(_from__WEBPACK_IMPORTED_MODULE_1__["from"])(first).subscribe({
            next: function next(value) {
              subscriber.next(value);
            },
            error: subNext,
            complete: subNext
          });
        });
      } //# sourceMappingURL=onErrorResumeNext.js.map

      /***/

    },

    /***/
    "Hm89":
    /*!*****************************************************!*\
      !*** ./node_modules/rxjs-compat/BehaviorSubject.js ***!
      \*****************************************************/

    /*! no static exports found */

    /***/
    function Hm89(module, exports, __webpack_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });

      var rxjs_1 = __webpack_require__(
      /*! rxjs */
      "qCKp");

      exports.BehaviorSubject = rxjs_1.BehaviorSubject; //# sourceMappingURL=BehaviorSubject.js.map

      /***/
    },

    /***/
    "HrJb":
    /*!****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/count.js ***!
      \****************************************************************/

    /*! exports provided: count */

    /***/
    function HrJb(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "count", function () {
        return count;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");

      function count(predicate) {
        return function (source) {
          return source.lift(new CountOperator(predicate, source));
        };
      }

      var CountOperator = /*#__PURE__*/function () {
        function CountOperator(predicate, source) {
          _classCallCheck2(this, CountOperator);

          this.predicate = predicate;
          this.source = source;
        }

        _createClass2(CountOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new CountSubscriber(subscriber, this.predicate, this.source));
          }
        }]);

        return CountOperator;
      }();

      var CountSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_16) {
        _inherits2(CountSubscriber, _Subscriber__WEBPACK_16);

        var _super231 = _createSuper(CountSubscriber);

        function CountSubscriber(destination, predicate, source) {
          var _this554;

          _classCallCheck2(this, CountSubscriber);

          _this554 = _super231.call(this, destination);
          _this554.predicate = predicate;
          _this554.source = source;
          _this554.count = 0;
          _this554.index = 0;
          return _this554;
        }

        _createClass2(CountSubscriber, [{
          key: "_next",
          value: function _next(value) {
            if (this.predicate) {
              this._tryPredicate(value);
            } else {
              this.count++;
            }
          }
        }, {
          key: "_tryPredicate",
          value: function _tryPredicate(value) {
            var result;

            try {
              result = this.predicate(value, this.index++, this.source);
            } catch (err) {
              this.destination.error(err);
              return;
            }

            if (result) {
              this.count++;
            }
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.destination.next(this.count);
            this.destination.complete();
          }
        }]);

        return CountSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=count.js.map

      /***/

    },

    /***/
    "I55L":
    /*!*****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/isArrayLike.js ***!
      \*****************************************************************/

    /*! exports provided: isArrayLike */

    /***/
    function I55L(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isArrayLike", function () {
        return isArrayLike;
      });

      var isArrayLike = function isArrayLike(x) {
        return x && typeof x.length === 'number' && typeof x !== 'function';
      }; //# sourceMappingURL=isArrayLike.js.map

      /***/

    },

    /***/
    "I810":
    /*!**********************************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/calendar-year-view.component.js ***!
      \**********************************************************************************************/

    /*! exports provided: OwlYearViewComponent */

    /***/
    function I810(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OwlYearViewComponent", function () {
        return OwlYearViewComponent;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./adapter/date-time-adapter.class */
      "1rjb");
      /* harmony import */


      var _calendar_body_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./calendar-body.component */
      "jVEe");
      /* harmony import */


      var _adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./adapter/date-time-format.class */
      "1FPZ");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @angular/cdk/keycodes */
      "FtGj");

      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var __metadata = undefined && undefined.__metadata || function (k, v) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
      };

      var __param = undefined && undefined.__param || function (paramIndex, decorator) {
        return function (target, key) {
          decorator(target, key, paramIndex);
        };
      };

      var MONTHS_PER_YEAR = 12;
      var MONTHS_PER_ROW = 3;

      var OwlYearViewComponent = function () {
        function OwlYearViewComponent(cdRef, dateTimeAdapter, dateTimeFormats) {
          this.cdRef = cdRef;
          this.dateTimeAdapter = dateTimeAdapter;
          this.dateTimeFormats = dateTimeFormats;
          this._selectMode = 'single';
          this._selecteds = [];
          this.localeSub = rxjs__WEBPACK_IMPORTED_MODULE_4__["Subscription"].EMPTY;
          this.initiated = false;
          this.selectedMonths = [];
          this.change = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.monthSelected = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.pickerMomentChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.keyboardEnter = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.monthNames = this.dateTimeAdapter.getMonthNames('short');
        }

        Object.defineProperty(OwlYearViewComponent.prototype, "selectMode", {
          get: function get() {
            return this._selectMode;
          },
          set: function set(val) {
            this._selectMode = val;

            if (this.initiated) {
              this.generateMonthList();
              this.cdRef.markForCheck();
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlYearViewComponent.prototype, "selected", {
          get: function get() {
            return this._selected;
          },
          set: function set(value) {
            value = this.dateTimeAdapter.deserialize(value);
            this._selected = this.getValidDate(value);
            this.setSelectedMonths();
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlYearViewComponent.prototype, "selecteds", {
          get: function get() {
            return this._selecteds;
          },
          set: function set(values) {
            this._selecteds = [];

            for (var i = 0; i < values.length; i++) {
              var value = this.dateTimeAdapter.deserialize(values[i]);

              this._selecteds.push(this.getValidDate(value));
            }

            this.setSelectedMonths();
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlYearViewComponent.prototype, "pickerMoment", {
          get: function get() {
            return this._pickerMoment;
          },
          set: function set(value) {
            var oldMoment = this._pickerMoment;
            value = this.dateTimeAdapter.deserialize(value);
            this._pickerMoment = this.getValidDate(value) || this.dateTimeAdapter.now();

            if (!this.hasSameYear(oldMoment, this._pickerMoment) && this.initiated) {
              this.generateMonthList();
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlYearViewComponent.prototype, "dateFilter", {
          get: function get() {
            return this._dateFilter;
          },
          set: function set(filter) {
            this._dateFilter = filter;

            if (this.initiated) {
              this.generateMonthList();
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlYearViewComponent.prototype, "minDate", {
          get: function get() {
            return this._minDate;
          },
          set: function set(value) {
            value = this.dateTimeAdapter.deserialize(value);
            this._minDate = this.getValidDate(value);

            if (this.initiated) {
              this.generateMonthList();
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlYearViewComponent.prototype, "maxDate", {
          get: function get() {
            return this._maxDate;
          },
          set: function set(value) {
            value = this.dateTimeAdapter.deserialize(value);
            this._maxDate = this.getValidDate(value);

            if (this.initiated) {
              this.generateMonthList();
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlYearViewComponent.prototype, "months", {
          get: function get() {
            return this._months;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlYearViewComponent.prototype, "activeCell", {
          get: function get() {
            if (this._pickerMoment) {
              return this.dateTimeAdapter.getMonth(this._pickerMoment);
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlYearViewComponent.prototype, "isInSingleMode", {
          get: function get() {
            return this.selectMode === 'single';
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlYearViewComponent.prototype, "isInRangeMode", {
          get: function get() {
            return this.selectMode === 'range' || this.selectMode === 'rangeFrom' || this.selectMode === 'rangeTo';
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlYearViewComponent.prototype, "owlDTCalendarView", {
          get: function get() {
            return true;
          },
          enumerable: true,
          configurable: true
        });

        OwlYearViewComponent.prototype.ngOnInit = function () {
          var _this = this;

          this.localeSub = this.dateTimeAdapter.localeChanges.subscribe(function () {
            _this.generateMonthList();

            _this.cdRef.markForCheck();
          });
        };

        OwlYearViewComponent.prototype.ngAfterContentInit = function () {
          this.generateMonthList();
          this.initiated = true;
        };

        OwlYearViewComponent.prototype.ngOnDestroy = function () {
          this.localeSub.unsubscribe();
        };

        OwlYearViewComponent.prototype.selectCalendarCell = function (cell) {
          this.selectMonth(cell.value);
        };

        OwlYearViewComponent.prototype.selectMonth = function (month) {
          var firstDateOfMonth = this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(this.pickerMoment), month, 1);
          this.monthSelected.emit(firstDateOfMonth);
          var daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(firstDateOfMonth);
          var result = this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(this.pickerMoment), month, Math.min(daysInMonth, this.dateTimeAdapter.getDate(this.pickerMoment)), this.dateTimeAdapter.getHours(this.pickerMoment), this.dateTimeAdapter.getMinutes(this.pickerMoment), this.dateTimeAdapter.getSeconds(this.pickerMoment));
          this.change.emit(result);
        };

        OwlYearViewComponent.prototype.handleCalendarKeydown = function (event) {
          var moment;

          switch (event.keyCode) {
            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_5__["LEFT_ARROW"]:
              moment = this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, -1);
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_5__["RIGHT_ARROW"]:
              moment = this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, 1);
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_5__["UP_ARROW"]:
              moment = this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, -3);
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_5__["DOWN_ARROW"]:
              moment = this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, 3);
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_5__["HOME"]:
              moment = this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, -this.dateTimeAdapter.getMonth(this.pickerMoment));
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_5__["END"]:
              moment = this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, 11 - this.dateTimeAdapter.getMonth(this.pickerMoment));
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_5__["PAGE_UP"]:
              moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, event.altKey ? -10 : -1);
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_5__["PAGE_DOWN"]:
              moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, event.altKey ? 10 : 1);
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_5__["ENTER"]:
              this.selectMonth(this.dateTimeAdapter.getMonth(this.pickerMoment));
              this.keyboardEnter.emit();
              break;

            default:
              return;
          }

          this.focusActiveCell();
          event.preventDefault();
        };

        OwlYearViewComponent.prototype.generateMonthList = function () {
          if (!this.pickerMoment) {
            return;
          }

          this.setSelectedMonths();
          this.todayMonth = this.getMonthInCurrentYear(this.dateTimeAdapter.now());
          this._months = [];

          for (var i = 0; i < MONTHS_PER_YEAR / MONTHS_PER_ROW; i++) {
            var row = [];

            for (var j = 0; j < MONTHS_PER_ROW; j++) {
              var month = j + i * MONTHS_PER_ROW;
              var monthCell = this.createMonthCell(month);
              row.push(monthCell);
            }

            this._months.push(row);
          }

          return;
        };

        OwlYearViewComponent.prototype.createMonthCell = function (month) {
          var startDateOfMonth = this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(this.pickerMoment), month, 1);
          var ariaLabel = this.dateTimeAdapter.format(startDateOfMonth, this.dateTimeFormats.monthYearA11yLabel);
          var cellClass = 'owl-dt-month-' + month;
          return new _calendar_body_component__WEBPACK_IMPORTED_MODULE_2__["CalendarCell"](month, this.monthNames[month], ariaLabel, this.isMonthEnabled(month), false, cellClass);
        };

        OwlYearViewComponent.prototype.isMonthEnabled = function (month) {
          var firstDateOfMonth = this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(this.pickerMoment), month, 1);

          for (var date = firstDateOfMonth; this.dateTimeAdapter.getMonth(date) === month; date = this.dateTimeAdapter.addCalendarDays(date, 1)) {
            if (!!date && (!this.dateFilter || this.dateFilter(date)) && (!this.minDate || this.dateTimeAdapter.compare(date, this.minDate) >= 0) && (!this.maxDate || this.dateTimeAdapter.compare(date, this.maxDate) <= 0)) {
              return true;
            }
          }

          return false;
        };

        OwlYearViewComponent.prototype.getMonthInCurrentYear = function (date) {
          if (this.getValidDate(date) && this.getValidDate(this._pickerMoment)) {
            var result = this.dateTimeAdapter.compareYear(date, this._pickerMoment);

            if (result < 0) {
              return -1;
            } else if (result > 0) {
              return 12;
            } else {
              return this.dateTimeAdapter.getMonth(date);
            }
          } else {
            return null;
          }
        };

        OwlYearViewComponent.prototype.setSelectedMonths = function () {
          this.selectedMonths = [];

          if (this.isInSingleMode && this.selected) {
            this.selectedMonths[0] = this.getMonthInCurrentYear(this.selected);
          }

          if (this.isInRangeMode && this.selecteds) {
            this.selectedMonths[0] = this.getMonthInCurrentYear(this.selecteds[0]);
            this.selectedMonths[1] = this.getMonthInCurrentYear(this.selecteds[1]);
          }
        };

        OwlYearViewComponent.prototype.hasSameYear = function (dateLeft, dateRight) {
          return !!(dateLeft && dateRight && this.dateTimeAdapter.getYear(dateLeft) === this.dateTimeAdapter.getYear(dateRight));
        };

        OwlYearViewComponent.prototype.getValidDate = function (obj) {
          return this.dateTimeAdapter.isDateInstance(obj) && this.dateTimeAdapter.isValid(obj) ? obj : null;
        };

        OwlYearViewComponent.prototype.focusActiveCell = function () {
          this.calendarBodyElm.focusActiveCell();
        };

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", String), __metadata("design:paramtypes", [String])], OwlYearViewComponent.prototype, "selectMode", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlYearViewComponent.prototype, "selected", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Array), __metadata("design:paramtypes", [Array])], OwlYearViewComponent.prototype, "selecteds", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlYearViewComponent.prototype, "pickerMoment", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Function), __metadata("design:paramtypes", [Function])], OwlYearViewComponent.prototype, "dateFilter", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlYearViewComponent.prototype, "minDate", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlYearViewComponent.prototype, "maxDate", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", Object)], OwlYearViewComponent.prototype, "change", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", Object)], OwlYearViewComponent.prototype, "monthSelected", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"])], OwlYearViewComponent.prototype, "pickerMomentChange", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"])], OwlYearViewComponent.prototype, "keyboardEnter", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"])(_calendar_body_component__WEBPACK_IMPORTED_MODULE_2__["OwlCalendarBodyComponent"]), __metadata("design:type", _calendar_body_component__WEBPACK_IMPORTED_MODULE_2__["OwlCalendarBodyComponent"])], OwlYearViewComponent.prototype, "calendarBodyElm", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('class.owl-dt-calendar-view'), __metadata("design:type", Boolean), __metadata("design:paramtypes", [])], OwlYearViewComponent.prototype, "owlDTCalendarView", null);

        OwlYearViewComponent = __decorate([__param(1, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __param(2, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __param(2, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"])(_adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_3__["OWL_DATE_TIME_FORMATS"])), __metadata("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"], _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__["DateTimeAdapter"], Object])], OwlYearViewComponent);

        OwlYearViewComponent.ɵfac = function OwlYearViewComponent_Factory(t) {
          return new (t || OwlYearViewComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__["DateTimeAdapter"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_3__["OWL_DATE_TIME_FORMATS"], 8));
        };

        OwlYearViewComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
          type: OwlYearViewComponent,
          selectors: [["owl-date-time-year-view"]],
          viewQuery: function OwlYearViewComponent_Query(rf, ctx) {
            if (rf & 1) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](_calendar_body_component__WEBPACK_IMPORTED_MODULE_2__["OwlCalendarBodyComponent"], 1);
            }

            if (rf & 2) {
              var _t;

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.calendarBodyElm = _t.first);
            }
          },
          hostVars: 2,
          hostBindings: function OwlYearViewComponent_HostBindings(rf, ctx) {
            if (rf & 2) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("owl-dt-calendar-view", ctx.owlDTCalendarView);
            }
          },
          inputs: {
            selectMode: "selectMode",
            selected: "selected",
            selecteds: "selecteds",
            pickerMoment: "pickerMoment",
            dateFilter: "dateFilter",
            minDate: "minDate",
            maxDate: "maxDate"
          },
          outputs: {
            change: "change",
            monthSelected: "monthSelected",
            pickerMomentChange: "pickerMomentChange",
            keyboardEnter: "keyboardEnter"
          },
          exportAs: ["owlMonthView"],
          decls: 5,
          vars: 7,
          consts: [[1, "owl-dt-calendar-table", "owl-dt-calendar-year-table"], [1, "owl-dt-calendar-header"], ["aria-hidden", "true", "colspan", "3", 1, "owl-dt-calendar-table-divider"], ["owl-date-time-calendar-body", "", "role", "grid", 3, "rows", "numCols", "cellRatio", "activeCell", "todayValue", "selectedValues", "selectMode", "keydown", "select"]],
          template: function OwlYearViewComponent_Template(rf, ctx) {
            if (rf & 1) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "table", 0);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "thead", 1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "tr");

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](3, "th", 2);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](4, "tbody", 3);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("keydown", function OwlYearViewComponent_Template_tbody_keydown_4_listener($event) {
                return ctx.handleCalendarKeydown($event);
              })("select", function OwlYearViewComponent_Template_tbody_select_4_listener($event) {
                return ctx.selectCalendarCell($event);
              });

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
            }

            if (rf & 2) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](4);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("rows", ctx.months)("numCols", 3)("cellRatio", 3 / 7)("activeCell", ctx.activeCell)("todayValue", ctx.todayMonth)("selectedValues", ctx.selectedMonths)("selectMode", ctx.selectMode);
            }
          },
          directives: [_calendar_body_component__WEBPACK_IMPORTED_MODULE_2__["OwlCalendarBodyComponent"]],
          styles: [""],
          changeDetection: 0
        });

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](OwlYearViewComponent, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
            args: [{
              selector: 'owl-date-time-year-view',
              exportAs: 'owlMonthView',
              template: "<table class=\"owl-dt-calendar-table owl-dt-calendar-year-table\"><thead class=\"owl-dt-calendar-header\"><tr><th class=\"owl-dt-calendar-table-divider\" aria-hidden=\"true\" colspan=\"3\"></th></tr></thead><tbody owl-date-time-calendar-body role=\"grid\" [rows]=\"months\" [numCols]=\"3\" [cellRatio]=\"3 / 7\" [activeCell]=\"activeCell\" [todayValue]=\"todayMonth\" [selectedValues]=\"selectedMonths\" [selectMode]=\"selectMode\" (keydown)=\"handleCalendarKeydown($event)\" (select)=\"selectCalendarCell($event)\"></tbody></table>",
              styles: [""],
              preserveWhitespaces: false,
              changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush
            }]
          }], function () {
            return [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
            }, {
              type: _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__["DateTimeAdapter"],
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
              }]
            }, {
              type: Object,
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
              }, {
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
                args: [_adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_3__["OWL_DATE_TIME_FORMATS"]]
              }]
            }];
          }, {
            change: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            monthSelected: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            pickerMomentChange: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            keyboardEnter: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            selectMode: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            selected: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            selecteds: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            pickerMoment: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            dateFilter: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            minDate: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            maxDate: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            owlDTCalendarView: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['class.owl-dt-calendar-view']
            }],
            calendarBodyElm: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
              args: [_calendar_body_component__WEBPACK_IMPORTED_MODULE_2__["OwlCalendarBodyComponent"]]
            }]
          });
        })();

        return OwlYearViewComponent;
      }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64, 

      /***/

    },

    /***/
    "IAdc":
    /*!******************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/toArray.js ***!
      \******************************************************************/

    /*! exports provided: toArray */

    /***/
    function IAdc(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "toArray", function () {
        return toArray;
      });
      /* harmony import */


      var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./reduce */
      "128B");

      function toArrayReducer(arr, item, index) {
        if (index === 0) {
          return [item];
        }

        arr.push(item);
        return arr;
      }

      function toArray() {
        return Object(_reduce__WEBPACK_IMPORTED_MODULE_0__["reduce"])(toArrayReducer, []);
      } //# sourceMappingURL=toArray.js.map

      /***/

    },

    /***/
    "IBtZ":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/ka.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function IBtZ(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Georgian [ka]
      //! author : Irakli Janiashvili : https://github.com/IrakliJani
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var ka = moment.defineLocale('ka', {
          months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),
          monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),
          weekdays: {
            standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),
            format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),
            isFormat: /(წინა|შემდეგ)/
          },
          weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),
          weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[დღეს] LT[-ზე]',
            nextDay: '[ხვალ] LT[-ზე]',
            lastDay: '[გუშინ] LT[-ზე]',
            nextWeek: '[შემდეგ] dddd LT[-ზე]',
            lastWeek: '[წინა] dddd LT-ზე',
            sameElse: 'L'
          },
          relativeTime: {
            future: function future(s) {
              return s.replace(/(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/, function ($0, $1, $2) {
                return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში';
              });
            },
            past: function past(s) {
              if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) {
                return s.replace(/(ი|ე)$/, 'ის წინ');
              }

              if (/წელი/.test(s)) {
                return s.replace(/წელი$/, 'წლის წინ');
              }

              return s;
            },
            s: 'რამდენიმე წამი',
            ss: '%d წამი',
            m: 'წუთი',
            mm: '%d წუთი',
            h: 'საათი',
            hh: '%d საათი',
            d: 'დღე',
            dd: '%d დღე',
            M: 'თვე',
            MM: '%d თვე',
            y: 'წელი',
            yy: '%d წელი'
          },
          dayOfMonthOrdinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,
          ordinal: function ordinal(number) {
            if (number === 0) {
              return number;
            }

            if (number === 1) {
              return number + '-ლი';
            }

            if (number < 20 || number <= 100 && number % 20 === 0 || number % 100 === 0) {
              return 'მე-' + number;
            }

            return number + '-ე';
          },
          week: {
            dow: 1,
            doy: 7
          }
        });
        return ka;
      });
      /***/

    },

    /***/
    "IjjT":
    /*!*************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/scheduler/AsyncScheduler.js ***!
      \*************************************************************************/

    /*! exports provided: AsyncScheduler */

    /***/
    function IjjT(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AsyncScheduler", function () {
        return AsyncScheduler;
      });
      /* harmony import */


      var _Scheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Scheduler */
      "Y/cZ");

      var AsyncScheduler = /*#__PURE__*/function (_Scheduler__WEBPACK_I) {
        _inherits2(AsyncScheduler, _Scheduler__WEBPACK_I);

        var _super232 = _createSuper(AsyncScheduler);

        function AsyncScheduler(SchedulerAction) {
          var _this555;

          var now = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _Scheduler__WEBPACK_IMPORTED_MODULE_0__["Scheduler"].now;

          _classCallCheck2(this, AsyncScheduler);

          _this555 = _super232.call(this, SchedulerAction, function () {
            if (AsyncScheduler.delegate && AsyncScheduler.delegate !== _assertThisInitialized2(_this555)) {
              return AsyncScheduler.delegate.now();
            } else {
              return now();
            }
          });
          _this555.actions = [];
          _this555.active = false;
          _this555.scheduled = undefined;
          return _this555;
        }

        _createClass2(AsyncScheduler, [{
          key: "schedule",
          value: function schedule(work) {
            var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
            var state = arguments.length > 2 ? arguments[2] : undefined;

            if (AsyncScheduler.delegate && AsyncScheduler.delegate !== this) {
              return AsyncScheduler.delegate.schedule(work, delay, state);
            } else {
              return _get2(_getPrototypeOf2(AsyncScheduler.prototype), "schedule", this).call(this, work, delay, state);
            }
          }
        }, {
          key: "flush",
          value: function flush(action) {
            var actions = this.actions;

            if (this.active) {
              actions.push(action);
              return;
            }

            var error;
            this.active = true;

            do {
              if (error = action.execute(action.state, action.delay)) {
                break;
              }
            } while (action = actions.shift());

            this.active = false;

            if (error) {
              while (action = actions.shift()) {
                action.unsubscribe();
              }

              throw error;
            }
          }
        }]);

        return AsyncScheduler;
      }(_Scheduler__WEBPACK_IMPORTED_MODULE_0__["Scheduler"]); //# sourceMappingURL=AsyncScheduler.js.map

      /***/

    },

    /***/
    "Ivi+":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/ko.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function Ivi(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Korean [ko]
      //! author : Kyungwook, Park : https://github.com/kyungw00k
      //! author : Jeeeyul Lee <jeeeyul@gmail.com>
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var ko = moment.defineLocale('ko', {
          months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
          monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
          weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),
          weekdaysShort: '일_월_화_수_목_금_토'.split('_'),
          weekdaysMin: '일_월_화_수_목_금_토'.split('_'),
          longDateFormat: {
            LT: 'A h:mm',
            LTS: 'A h:mm:ss',
            L: 'YYYY.MM.DD.',
            LL: 'YYYY년 MMMM D일',
            LLL: 'YYYY년 MMMM D일 A h:mm',
            LLLL: 'YYYY년 MMMM D일 dddd A h:mm',
            l: 'YYYY.MM.DD.',
            ll: 'YYYY년 MMMM D일',
            lll: 'YYYY년 MMMM D일 A h:mm',
            llll: 'YYYY년 MMMM D일 dddd A h:mm'
          },
          calendar: {
            sameDay: '오늘 LT',
            nextDay: '내일 LT',
            nextWeek: 'dddd LT',
            lastDay: '어제 LT',
            lastWeek: '지난주 dddd LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s 후',
            past: '%s 전',
            s: '몇 초',
            ss: '%d초',
            m: '1분',
            mm: '%d분',
            h: '한 시간',
            hh: '%d시간',
            d: '하루',
            dd: '%d일',
            M: '한 달',
            MM: '%d달',
            y: '일 년',
            yy: '%d년'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(일|월|주)/,
          ordinal: function ordinal(number, period) {
            switch (period) {
              case 'd':
              case 'D':
              case 'DDD':
                return number + '일';

              case 'M':
                return number + '월';

              case 'w':
              case 'W':
                return number + '주';

              default:
                return number;
            }
          },
          meridiemParse: /오전|오후/,
          isPM: function isPM(token) {
            return token === '오후';
          },
          meridiem: function meridiem(hour, minute, isUpper) {
            return hour < 12 ? '오전' : '오후';
          }
        });
        return ko;
      });
      /***/

    },

    /***/
    "IzEk":
    /*!***************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/take.js ***!
      \***************************************************************/

    /*! exports provided: take */

    /***/
    function IzEk(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "take", function () {
        return take;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");
      /* harmony import */


      var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/ArgumentOutOfRangeError */
      "4I5i");
      /* harmony import */


      var _observable_empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../observable/empty */
      "EY2u");

      function take(count) {
        return function (source) {
          if (count === 0) {
            return Object(_observable_empty__WEBPACK_IMPORTED_MODULE_2__["empty"])();
          } else {
            return source.lift(new TakeOperator(count));
          }
        };
      }

      var TakeOperator = /*#__PURE__*/function () {
        function TakeOperator(total) {
          _classCallCheck2(this, TakeOperator);

          this.total = total;

          if (this.total < 0) {
            throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_1__["ArgumentOutOfRangeError"]();
          }
        }

        _createClass2(TakeOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new TakeSubscriber(subscriber, this.total));
          }
        }]);

        return TakeOperator;
      }();

      var TakeSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_17) {
        _inherits2(TakeSubscriber, _Subscriber__WEBPACK_17);

        var _super233 = _createSuper(TakeSubscriber);

        function TakeSubscriber(destination, total) {
          var _this556;

          _classCallCheck2(this, TakeSubscriber);

          _this556 = _super233.call(this, destination);
          _this556.total = total;
          _this556.count = 0;
          return _this556;
        }

        _createClass2(TakeSubscriber, [{
          key: "_next",
          value: function _next(value) {
            var total = this.total;
            var count = ++this.count;

            if (count <= total) {
              this.destination.next(value);

              if (count === total) {
                this.destination.complete();
                this.unsubscribe();
              }
            }
          }
        }]);

        return TakeSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=take.js.map

      /***/

    },

    /***/
    "J+Wn":
    /*!*******************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/utils/index.js ***!
      \*******************************************************************/

    /*! exports provided: extendObject */

    /***/
    function JWn(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony import */


      var _object_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./object.utils */
      "RAZl");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "extendObject", function () {
        return _object_utils__WEBPACK_IMPORTED_MODULE_0__["extendObject"];
      });
      /***/

    },

    /***/
    "JCF/":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/ku.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function JCF(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Kurdish [ku]
      //! author : Shahram Mebashar : https://github.com/ShahramMebashar
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var symbolMap = {
          1: '١',
          2: '٢',
          3: '٣',
          4: '٤',
          5: '٥',
          6: '٦',
          7: '٧',
          8: '٨',
          9: '٩',
          0: '٠'
        },
            numberMap = {
          '١': '1',
          '٢': '2',
          '٣': '3',
          '٤': '4',
          '٥': '5',
          '٦': '6',
          '٧': '7',
          '٨': '8',
          '٩': '9',
          '٠': '0'
        },
            months = ['کانونی دووەم', 'شوبات', 'ئازار', 'نیسان', 'ئایار', 'حوزەیران', 'تەمموز', 'ئاب', 'ئەیلوول', 'تشرینی یەكەم', 'تشرینی دووەم', 'كانونی یەکەم'];
        var ku = moment.defineLocale('ku', {
          months: months,
          monthsShort: months,
          weekdays: 'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split('_'),
          weekdaysShort: 'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split('_'),
          weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          meridiemParse: /ئێواره‌|به‌یانی/,
          isPM: function isPM(input) {
            return /ئێواره‌/.test(input);
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 12) {
              return 'به‌یانی';
            } else {
              return 'ئێواره‌';
            }
          },
          calendar: {
            sameDay: '[ئه‌مرۆ كاتژمێر] LT',
            nextDay: '[به‌یانی كاتژمێر] LT',
            nextWeek: 'dddd [كاتژمێر] LT',
            lastDay: '[دوێنێ كاتژمێر] LT',
            lastWeek: 'dddd [كاتژمێر] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'له‌ %s',
            past: '%s',
            s: 'چه‌ند چركه‌یه‌ك',
            ss: 'چركه‌ %d',
            m: 'یه‌ك خوله‌ك',
            mm: '%d خوله‌ك',
            h: 'یه‌ك كاتژمێر',
            hh: '%d كاتژمێر',
            d: 'یه‌ك ڕۆژ',
            dd: '%d ڕۆژ',
            M: 'یه‌ك مانگ',
            MM: '%d مانگ',
            y: 'یه‌ك ساڵ',
            yy: '%d ساڵ'
          },
          preparse: function preparse(string) {
            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
              return numberMap[match];
            }).replace(/،/g, ',');
          },
          postformat: function postformat(string) {
            return string.replace(/\d/g, function (match) {
              return symbolMap[match];
            }).replace(/,/g, '،');
          },
          week: {
            dow: 6,
            // Saturday is the first day of the week.
            doy: 12 // The week that contains Jan 12th is the first week of the year.

          }
        });
        return ku;
      });
      /***/

    },

    /***/
    "JIr8":
    /*!*********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/catchError.js ***!
      \*********************************************************************/

    /*! exports provided: catchError */

    /***/
    function JIr8(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "catchError", function () {
        return catchError;
      });
      /* harmony import */


      var _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../innerSubscribe */
      "zx2A");

      function catchError(selector) {
        return function catchErrorOperatorFunction(source) {
          var operator = new CatchOperator(selector);
          var caught = source.lift(operator);
          return operator.caught = caught;
        };
      }

      var CatchOperator = /*#__PURE__*/function () {
        function CatchOperator(selector) {
          _classCallCheck2(this, CatchOperator);

          this.selector = selector;
        }

        _createClass2(CatchOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new CatchSubscriber(subscriber, this.selector, this.caught));
          }
        }]);

        return CatchOperator;
      }();

      var CatchSubscriber = /*#__PURE__*/function (_innerSubscribe__WEBP9) {
        _inherits2(CatchSubscriber, _innerSubscribe__WEBP9);

        var _super234 = _createSuper(CatchSubscriber);

        function CatchSubscriber(destination, selector, caught) {
          var _this557;

          _classCallCheck2(this, CatchSubscriber);

          _this557 = _super234.call(this, destination);
          _this557.selector = selector;
          _this557.caught = caught;
          return _this557;
        }

        _createClass2(CatchSubscriber, [{
          key: "error",
          value: function error(err) {
            if (!this.isStopped) {
              var result;

              try {
                result = this.selector(err, this.caught);
              } catch (err2) {
                _get2(_getPrototypeOf2(CatchSubscriber.prototype), "error", this).call(this, err2);

                return;
              }

              this._unsubscribeAndRecycle();

              var innerSubscriber = new _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleInnerSubscriber"](this);
              this.add(innerSubscriber);
              var innerSubscription = Object(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["innerSubscribe"])(result, innerSubscriber);

              if (innerSubscription !== innerSubscriber) {
                this.add(innerSubscription);
              }
            }
          }
        }]);

        return CatchSubscriber;
      }(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleOuterSubscriber"]); //# sourceMappingURL=catchError.js.map

      /***/

    },

    /***/
    "JVSJ":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/bs.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function JVSJ(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Bosnian [bs]
      //! author : Nedim Cholich : https://github.com/frontyard
      //! based on (hr) translation by Bojan Marković
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        function translate(number, withoutSuffix, key) {
          var result = number + ' ';

          switch (key) {
            case 'ss':
              if (number === 1) {
                result += 'sekunda';
              } else if (number === 2 || number === 3 || number === 4) {
                result += 'sekunde';
              } else {
                result += 'sekundi';
              }

              return result;

            case 'm':
              return withoutSuffix ? 'jedna minuta' : 'jedne minute';

            case 'mm':
              if (number === 1) {
                result += 'minuta';
              } else if (number === 2 || number === 3 || number === 4) {
                result += 'minute';
              } else {
                result += 'minuta';
              }

              return result;

            case 'h':
              return withoutSuffix ? 'jedan sat' : 'jednog sata';

            case 'hh':
              if (number === 1) {
                result += 'sat';
              } else if (number === 2 || number === 3 || number === 4) {
                result += 'sata';
              } else {
                result += 'sati';
              }

              return result;

            case 'dd':
              if (number === 1) {
                result += 'dan';
              } else {
                result += 'dana';
              }

              return result;

            case 'MM':
              if (number === 1) {
                result += 'mjesec';
              } else if (number === 2 || number === 3 || number === 4) {
                result += 'mjeseca';
              } else {
                result += 'mjeseci';
              }

              return result;

            case 'yy':
              if (number === 1) {
                result += 'godina';
              } else if (number === 2 || number === 3 || number === 4) {
                result += 'godine';
              } else {
                result += 'godina';
              }

              return result;
          }
        }

        var bs = moment.defineLocale('bs', {
          months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),
          monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),
          monthsParseExact: true,
          weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
          weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
          weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd, D. MMMM YYYY H:mm'
          },
          calendar: {
            sameDay: '[danas u] LT',
            nextDay: '[sutra u] LT',
            nextWeek: function nextWeek() {
              switch (this.day()) {
                case 0:
                  return '[u] [nedjelju] [u] LT';

                case 3:
                  return '[u] [srijedu] [u] LT';

                case 6:
                  return '[u] [subotu] [u] LT';

                case 1:
                case 2:
                case 4:
                case 5:
                  return '[u] dddd [u] LT';
              }
            },
            lastDay: '[jučer u] LT',
            lastWeek: function lastWeek() {
              switch (this.day()) {
                case 0:
                case 3:
                  return '[prošlu] dddd [u] LT';

                case 6:
                  return '[prošle] [subote] [u] LT';

                case 1:
                case 2:
                case 4:
                case 5:
                  return '[prošli] dddd [u] LT';
              }
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: 'za %s',
            past: 'prije %s',
            s: 'par sekundi',
            ss: translate,
            m: translate,
            mm: translate,
            h: translate,
            hh: translate,
            d: 'dan',
            dd: translate,
            M: 'mjesec',
            MM: translate,
            y: 'godinu',
            yy: translate
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return bs;
      });
      /***/

    },

    /***/
    "JWCV":
    /*!**************************************************!*\
      !*** ./node_modules/aws-sdk/lib/json/builder.js ***!
      \**************************************************/

    /*! no static exports found */

    /***/
    function JWCV(module, exports, __webpack_require__) {
      var util = __webpack_require__(
      /*! ../util */
      "BaN1");

      function JsonBuilder() {}

      JsonBuilder.prototype.build = function (value, shape) {
        return JSON.stringify(translate(value, shape));
      };

      function translate(value, shape) {
        if (!shape || value === undefined || value === null) return undefined;

        switch (shape.type) {
          case 'structure':
            return translateStructure(value, shape);

          case 'map':
            return translateMap(value, shape);

          case 'list':
            return translateList(value, shape);

          default:
            return translateScalar(value, shape);
        }
      }

      function translateStructure(structure, shape) {
        var struct = {};
        util.each(structure, function (name, value) {
          var memberShape = shape.members[name];

          if (memberShape) {
            if (memberShape.location !== 'body') return;
            var locationName = memberShape.isLocationName ? memberShape.name : name;
            var result = translate(value, memberShape);
            if (result !== undefined) struct[locationName] = result;
          }
        });
        return struct;
      }

      function translateList(list, shape) {
        var out = [];
        util.arrayEach(list, function (value) {
          var result = translate(value, shape.member);
          if (result !== undefined) out.push(result);
        });
        return out;
      }

      function translateMap(map, shape) {
        var out = {};
        util.each(map, function (key, value) {
          var result = translate(value, shape.value);
          if (result !== undefined) out[key] = result;
        });
        return out;
      }

      function translateScalar(value, shape) {
        return shape.toWireFormat(value);
      }
      /**
       * @api private
       */


      module.exports = JsonBuilder;
      /***/
    },

    /***/
    "JX91":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/startWith.js ***!
      \********************************************************************/

    /*! exports provided: startWith */

    /***/
    function JX91(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "startWith", function () {
        return startWith;
      });
      /* harmony import */


      var _observable_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../observable/concat */
      "GyhO");
      /* harmony import */


      var _util_isScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/isScheduler */
      "z+Ro");

      function startWith() {
        for (var _len29 = arguments.length, array = new Array(_len29), _key31 = 0; _key31 < _len29; _key31++) {
          array[_key31] = arguments[_key31];
        }

        var scheduler = array[array.length - 1];

        if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__["isScheduler"])(scheduler)) {
          array.pop();
          return function (source) {
            return Object(_observable_concat__WEBPACK_IMPORTED_MODULE_0__["concat"])(array, source, scheduler);
          };
        } else {
          return function (source) {
            return Object(_observable_concat__WEBPACK_IMPORTED_MODULE_0__["concat"])(array, source);
          };
        }
      } //# sourceMappingURL=startWith.js.map

      /***/

    },

    /***/
    "Jgta":
    /*!*****************************************************!*\
      !*** ./node_modules/firebase/app/dist/index.esm.js ***!
      \*****************************************************/

    /*! exports provided: default */

    /***/
    function Jgta(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony import */


      var _firebase_app__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @firebase/app */
      "zIRd");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "default", function () {
        return _firebase_app__WEBPACK_IMPORTED_MODULE_0__["default"];
      });

      var name = "firebase";
      var version = "8.6.5";
      /**
       * @license
       * Copyright 2018 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */

      _firebase_app__WEBPACK_IMPORTED_MODULE_0__["default"].registerVersion(name, version, 'app');

      _firebase_app__WEBPACK_IMPORTED_MODULE_0__["default"].SDK_VERSION = version; //# sourceMappingURL=index.esm.js.map

      /***/
    },

    /***/
    "JmF6":
    /*!*****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/zipAll.js ***!
      \*****************************************************************/

    /*! exports provided: zipAll */

    /***/
    function JmF6(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "zipAll", function () {
        return zipAll;
      });
      /* harmony import */


      var _observable_zip__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../observable/zip */
      "1uah");

      function zipAll(project) {
        return function (source) {
          return source.lift(new _observable_zip__WEBPACK_IMPORTED_MODULE_0__["ZipOperator"](project));
        };
      } //# sourceMappingURL=zipAll.js.map

      /***/

    },

    /***/
    "JvlW":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/lt.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function JvlW(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Lithuanian [lt]
      //! author : Mindaugas Mozūras : https://github.com/mmozuras
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var units = {
          ss: 'sekundė_sekundžių_sekundes',
          m: 'minutė_minutės_minutę',
          mm: 'minutės_minučių_minutes',
          h: 'valanda_valandos_valandą',
          hh: 'valandos_valandų_valandas',
          d: 'diena_dienos_dieną',
          dd: 'dienos_dienų_dienas',
          M: 'mėnuo_mėnesio_mėnesį',
          MM: 'mėnesiai_mėnesių_mėnesius',
          y: 'metai_metų_metus',
          yy: 'metai_metų_metus'
        };

        function translateSeconds(number, withoutSuffix, key, isFuture) {
          if (withoutSuffix) {
            return 'kelios sekundės';
          } else {
            return isFuture ? 'kelių sekundžių' : 'kelias sekundes';
          }
        }

        function translateSingular(number, withoutSuffix, key, isFuture) {
          return withoutSuffix ? forms(key)[0] : isFuture ? forms(key)[1] : forms(key)[2];
        }

        function special(number) {
          return number % 10 === 0 || number > 10 && number < 20;
        }

        function forms(key) {
          return units[key].split('_');
        }

        function translate(number, withoutSuffix, key, isFuture) {
          var result = number + ' ';

          if (number === 1) {
            return result + translateSingular(number, withoutSuffix, key[0], isFuture);
          } else if (withoutSuffix) {
            return result + (special(number) ? forms(key)[1] : forms(key)[0]);
          } else {
            if (isFuture) {
              return result + forms(key)[1];
            } else {
              return result + (special(number) ? forms(key)[1] : forms(key)[2]);
            }
          }
        }

        var lt = moment.defineLocale('lt', {
          months: {
            format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),
            standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),
            isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/
          },
          monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
          weekdays: {
            format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),
            standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),
            isFormat: /dddd HH:mm/
          },
          weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),
          weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'YYYY [m.] MMMM D [d.]',
            LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
            LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',
            l: 'YYYY-MM-DD',
            ll: 'YYYY [m.] MMMM D [d.]',
            lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
            llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'
          },
          calendar: {
            sameDay: '[Šiandien] LT',
            nextDay: '[Rytoj] LT',
            nextWeek: 'dddd LT',
            lastDay: '[Vakar] LT',
            lastWeek: '[Praėjusį] dddd LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'po %s',
            past: 'prieš %s',
            s: translateSeconds,
            ss: translate,
            m: translateSingular,
            mm: translate,
            h: translateSingular,
            hh: translate,
            d: translateSingular,
            dd: translate,
            M: translateSingular,
            MM: translate,
            y: translateSingular,
            yy: translate
          },
          dayOfMonthOrdinalParse: /\d{1,2}-oji/,
          ordinal: function ordinal(number) {
            return number + '-oji';
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return lt;
      });
      /***/

    },

    /***/
    "K/tc":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/af.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function KTc(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Afrikaans [af]
      //! author : Werner Mollentze : https://github.com/wernerm
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var af = moment.defineLocale('af', {
          months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),
          monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
          weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),
          weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
          weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
          meridiemParse: /vm|nm/i,
          isPM: function isPM(input) {
            return /^nm$/i.test(input);
          },
          meridiem: function meridiem(hours, minutes, isLower) {
            if (hours < 12) {
              return isLower ? 'vm' : 'VM';
            } else {
              return isLower ? 'nm' : 'NM';
            }
          },
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[Vandag om] LT',
            nextDay: '[Môre om] LT',
            nextWeek: 'dddd [om] LT',
            lastDay: '[Gister om] LT',
            lastWeek: '[Laas] dddd [om] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'oor %s',
            past: '%s gelede',
            s: "'n paar sekondes",
            ss: '%d sekondes',
            m: "'n minuut",
            mm: '%d minute',
            h: "'n uur",
            hh: '%d ure',
            d: "'n dag",
            dd: '%d dae',
            M: "'n maand",
            MM: '%d maande',
            y: "'n jaar",
            yy: '%d jaar'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
          ordinal: function ordinal(number) {
            return number + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter
          },
          week: {
            dow: 1,
            // Maandag is die eerste dag van die week.
            doy: 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar.

          }
        });
        return af;
      });
      /***/

    },

    /***/
    "K7De":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/findIndex.js ***!
      \********************************************************************/

    /*! exports provided: findIndex */

    /***/
    function K7De(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "findIndex", function () {
        return findIndex;
      });
      /* harmony import */


      var _operators_find__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../operators/find */
      "cBqT");

      function findIndex(predicate, thisArg) {
        return function (source) {
          return source.lift(new _operators_find__WEBPACK_IMPORTED_MODULE_0__["FindValueOperator"](predicate, source, true, thisArg));
        };
      } //# sourceMappingURL=findIndex.js.map

      /***/

    },

    /***/
    "KFai":
    /*!***************************************************!*\
      !*** ./node_modules/aws-sdk/lib/protocol/rest.js ***!
      \***************************************************/

    /*! no static exports found */

    /***/
    function KFai(module, exports, __webpack_require__) {
      var util = __webpack_require__(
      /*! ../util */
      "BaN1");

      var populateHostPrefix = __webpack_require__(
      /*! ./helpers */
      "lSFX").populateHostPrefix;

      function populateMethod(req) {
        req.httpRequest.method = req.service.api.operations[req.operation].httpMethod;
      }

      function generateURI(endpointPath, operationPath, input, params) {
        var uri = [endpointPath, operationPath].join('/');
        uri = uri.replace(/\/+/g, '/');
        var queryString = {},
            queryStringSet = false;
        util.each(input.members, function (name, member) {
          var paramValue = params[name];
          if (paramValue === null || paramValue === undefined) return;

          if (member.location === 'uri') {
            var regex = new RegExp('\\{' + member.name + '(\\+)?\\}');
            uri = uri.replace(regex, function (_, plus) {
              var fn = plus ? util.uriEscapePath : util.uriEscape;
              return fn(String(paramValue));
            });
          } else if (member.location === 'querystring') {
            queryStringSet = true;

            if (member.type === 'list') {
              queryString[member.name] = paramValue.map(function (val) {
                return util.uriEscape(member.member.toWireFormat(val).toString());
              });
            } else if (member.type === 'map') {
              util.each(paramValue, function (key, value) {
                if (Array.isArray(value)) {
                  queryString[key] = value.map(function (val) {
                    return util.uriEscape(String(val));
                  });
                } else {
                  queryString[key] = util.uriEscape(String(value));
                }
              });
            } else {
              queryString[member.name] = util.uriEscape(member.toWireFormat(paramValue).toString());
            }
          }
        });

        if (queryStringSet) {
          uri += uri.indexOf('?') >= 0 ? '&' : '?';
          var parts = [];
          util.arrayEach(Object.keys(queryString).sort(), function (key) {
            if (!Array.isArray(queryString[key])) {
              queryString[key] = [queryString[key]];
            }

            for (var i = 0; i < queryString[key].length; i++) {
              parts.push(util.uriEscape(String(key)) + '=' + queryString[key][i]);
            }
          });
          uri += parts.join('&');
        }

        return uri;
      }

      function populateURI(req) {
        var operation = req.service.api.operations[req.operation];
        var input = operation.input;
        var uri = generateURI(req.httpRequest.endpoint.path, operation.httpPath, input, req.params);
        req.httpRequest.path = uri;
      }

      function populateHeaders(req) {
        var operation = req.service.api.operations[req.operation];
        util.each(operation.input.members, function (name, member) {
          var value = req.params[name];
          if (value === null || value === undefined) return;

          if (member.location === 'headers' && member.type === 'map') {
            util.each(value, function (key, memberValue) {
              req.httpRequest.headers[member.name + key] = memberValue;
            });
          } else if (member.location === 'header') {
            value = member.toWireFormat(value).toString();

            if (member.isJsonValue) {
              value = util.base64.encode(value);
            }

            req.httpRequest.headers[member.name] = value;
          }
        });
      }

      function buildRequest(req) {
        populateMethod(req);
        populateURI(req);
        populateHeaders(req);
        populateHostPrefix(req);
      }

      function extractError() {}

      function extractData(resp) {
        var req = resp.request;
        var data = {};
        var r = resp.httpResponse;
        var operation = req.service.api.operations[req.operation];
        var output = operation.output; // normalize headers names to lower-cased keys for matching

        var headers = {};
        util.each(r.headers, function (k, v) {
          headers[k.toLowerCase()] = v;
        });
        util.each(output.members, function (name, member) {
          var header = (member.name || name).toLowerCase();

          if (member.location === 'headers' && member.type === 'map') {
            data[name] = {};
            var location = member.isLocationName ? member.name : '';
            var pattern = new RegExp('^' + location + '(.+)', 'i');
            util.each(r.headers, function (k, v) {
              var result = k.match(pattern);

              if (result !== null) {
                data[name][result[1]] = v;
              }
            });
          } else if (member.location === 'header') {
            if (headers[header] !== undefined) {
              var value = member.isJsonValue ? util.base64.decode(headers[header]) : headers[header];
              data[name] = member.toType(value);
            }
          } else if (member.location === 'statusCode') {
            data[name] = parseInt(r.statusCode, 10);
          }
        });
        resp.data = data;
      }
      /**
       * @api private
       */


      module.exports = {
        buildRequest: buildRequest,
        extractError: extractError,
        extractData: extractData,
        generateURI: generateURI
      };
      /***/
    },

    /***/
    "KIbX":
    /*!************************************************!*\
      !*** ./node_modules/aws-sdk/lib/signers/v4.js ***!
      \************************************************/

    /*! no static exports found */

    /***/
    function KIbX(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ../core */
      "QsWE");

      var v4Credentials = __webpack_require__(
      /*! ./v4_credentials */
      "FGtl");

      var inherit = AWS.util.inherit;
      /**
       * @api private
       */

      var expiresHeader = 'presigned-expires';
      /**
       * @api private
       */

      AWS.Signers.V4 = inherit(AWS.Signers.RequestSigner, {
        constructor: function V4(request, serviceName, options) {
          AWS.Signers.RequestSigner.call(this, request);
          this.serviceName = serviceName;
          options = options || {};
          this.signatureCache = typeof options.signatureCache === 'boolean' ? options.signatureCache : true;
          this.operation = options.operation;
          this.signatureVersion = options.signatureVersion;
        },
        algorithm: 'AWS4-HMAC-SHA256',
        addAuthorization: function addAuthorization(credentials, date) {
          var datetime = AWS.util.date.iso8601(date).replace(/[:\-]|\.\d{3}/g, '');

          if (this.isPresigned()) {
            this.updateForPresigned(credentials, datetime);
          } else {
            this.addHeaders(credentials, datetime);
          }

          this.request.headers['Authorization'] = this.authorization(credentials, datetime);
        },
        addHeaders: function addHeaders(credentials, datetime) {
          this.request.headers['X-Amz-Date'] = datetime;

          if (credentials.sessionToken) {
            this.request.headers['x-amz-security-token'] = credentials.sessionToken;
          }
        },
        updateForPresigned: function updateForPresigned(credentials, datetime) {
          var credString = this.credentialString(datetime);
          var qs = {
            'X-Amz-Date': datetime,
            'X-Amz-Algorithm': this.algorithm,
            'X-Amz-Credential': credentials.accessKeyId + '/' + credString,
            'X-Amz-Expires': this.request.headers[expiresHeader],
            'X-Amz-SignedHeaders': this.signedHeaders()
          };

          if (credentials.sessionToken) {
            qs['X-Amz-Security-Token'] = credentials.sessionToken;
          }

          if (this.request.headers['Content-Type']) {
            qs['Content-Type'] = this.request.headers['Content-Type'];
          }

          if (this.request.headers['Content-MD5']) {
            qs['Content-MD5'] = this.request.headers['Content-MD5'];
          }

          if (this.request.headers['Cache-Control']) {
            qs['Cache-Control'] = this.request.headers['Cache-Control'];
          } // need to pull in any other X-Amz-* headers


          AWS.util.each.call(this, this.request.headers, function (key, value) {
            if (key === expiresHeader) return;

            if (this.isSignableHeader(key)) {
              var lowerKey = key.toLowerCase(); // Metadata should be normalized

              if (lowerKey.indexOf('x-amz-meta-') === 0) {
                qs[lowerKey] = value;
              } else if (lowerKey.indexOf('x-amz-') === 0) {
                qs[key] = value;
              }
            }
          });
          var sep = this.request.path.indexOf('?') >= 0 ? '&' : '?';
          this.request.path += sep + AWS.util.queryParamsToString(qs);
        },
        authorization: function authorization(credentials, datetime) {
          var parts = [];
          var credString = this.credentialString(datetime);
          parts.push(this.algorithm + ' Credential=' + credentials.accessKeyId + '/' + credString);
          parts.push('SignedHeaders=' + this.signedHeaders());
          parts.push('Signature=' + this.signature(credentials, datetime));
          return parts.join(', ');
        },
        signature: function signature(credentials, datetime) {
          var signingKey = v4Credentials.getSigningKey(credentials, datetime.substr(0, 8), this.request.region, this.serviceName, this.signatureCache);
          return AWS.util.crypto.hmac(signingKey, this.stringToSign(datetime), 'hex');
        },
        stringToSign: function stringToSign(datetime) {
          var parts = [];
          parts.push('AWS4-HMAC-SHA256');
          parts.push(datetime);
          parts.push(this.credentialString(datetime));
          parts.push(this.hexEncodedHash(this.canonicalString()));
          return parts.join('\n');
        },
        canonicalString: function canonicalString() {
          var parts = [],
              pathname = this.request.pathname();
          if (this.serviceName !== 's3' && this.signatureVersion !== 's3v4') pathname = AWS.util.uriEscapePath(pathname);
          parts.push(this.request.method);
          parts.push(pathname);
          parts.push(this.request.search());
          parts.push(this.canonicalHeaders() + '\n');
          parts.push(this.signedHeaders());
          parts.push(this.hexEncodedBodyHash());
          return parts.join('\n');
        },
        canonicalHeaders: function canonicalHeaders() {
          var headers = [];
          AWS.util.each.call(this, this.request.headers, function (key, item) {
            headers.push([key, item]);
          });
          headers.sort(function (a, b) {
            return a[0].toLowerCase() < b[0].toLowerCase() ? -1 : 1;
          });
          var parts = [];
          AWS.util.arrayEach.call(this, headers, function (item) {
            var key = item[0].toLowerCase();

            if (this.isSignableHeader(key)) {
              var value = item[1];

              if (typeof value === 'undefined' || value === null || typeof value.toString !== 'function') {
                throw AWS.util.error(new Error('Header ' + key + ' contains invalid value'), {
                  code: 'InvalidHeader'
                });
              }

              parts.push(key + ':' + this.canonicalHeaderValues(value.toString()));
            }
          });
          return parts.join('\n');
        },
        canonicalHeaderValues: function canonicalHeaderValues(values) {
          return values.replace(/\s+/g, ' ').replace(/^\s+|\s+$/g, '');
        },
        signedHeaders: function signedHeaders() {
          var keys = [];
          AWS.util.each.call(this, this.request.headers, function (key) {
            key = key.toLowerCase();
            if (this.isSignableHeader(key)) keys.push(key);
          });
          return keys.sort().join(';');
        },
        credentialString: function credentialString(datetime) {
          return v4Credentials.createScope(datetime.substr(0, 8), this.request.region, this.serviceName);
        },
        hexEncodedHash: function hash(string) {
          return AWS.util.crypto.sha256(string, 'hex');
        },
        hexEncodedBodyHash: function hexEncodedBodyHash() {
          var request = this.request;

          if (this.isPresigned() && this.serviceName === 's3' && !request.body) {
            return 'UNSIGNED-PAYLOAD';
          } else if (request.headers['X-Amz-Content-Sha256']) {
            return request.headers['X-Amz-Content-Sha256'];
          } else {
            return this.hexEncodedHash(this.request.body || '');
          }
        },
        unsignableHeaders: ['authorization', 'content-type', 'content-length', 'user-agent', expiresHeader, 'expect', 'x-amzn-trace-id'],
        isSignableHeader: function isSignableHeader(key) {
          if (key.toLowerCase().indexOf('x-amz-') === 0) return true;
          return this.unsignableHeaders.indexOf(key) < 0;
        },
        isPresigned: function isPresigned() {
          return this.request.headers[expiresHeader] ? true : false;
        }
      });
      /**
       * @api private
       */

      module.exports = AWS.Signers.V4;
      /***/
    },

    /***/
    "KKCa":
    /*!*********************************************************************!*\
      !*** ./node_modules/util/node_modules/inherits/inherits_browser.js ***!
      \*********************************************************************/

    /*! no static exports found */

    /***/
    function KKCa(module, exports) {
      if (typeof Object.create === 'function') {
        // implementation from standard node.js 'util' module
        module.exports = function inherits(ctor, superCtor) {
          ctor.super_ = superCtor;
          ctor.prototype = Object.create(superCtor.prototype, {
            constructor: {
              value: ctor,
              enumerable: false,
              writable: true,
              configurable: true
            }
          });
        };
      } else {
        // old school shim for old browsers
        module.exports = function inherits(ctor, superCtor) {
          ctor.super_ = superCtor;

          var TempCtor = function TempCtor() {};

          TempCtor.prototype = superCtor.prototype;
          ctor.prototype = new TempCtor();
          ctor.prototype.constructor = ctor;
        };
      }
      /***/

    },

    /***/
    "KSF8":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/vi.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function KSF8(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Vietnamese [vi]
      //! author : Bang Nguyen : https://github.com/bangnk
      //! author : Chien Kira : https://github.com/chienkira
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var vi = moment.defineLocale('vi', {
          months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),
          monthsShort: 'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split('_'),
          monthsParseExact: true,
          weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),
          weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
          weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
          weekdaysParseExact: true,
          meridiemParse: /sa|ch/i,
          isPM: function isPM(input) {
            return /^ch$/i.test(input);
          },
          meridiem: function meridiem(hours, minutes, isLower) {
            if (hours < 12) {
              return isLower ? 'sa' : 'SA';
            } else {
              return isLower ? 'ch' : 'CH';
            }
          },
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM [năm] YYYY',
            LLL: 'D MMMM [năm] YYYY HH:mm',
            LLLL: 'dddd, D MMMM [năm] YYYY HH:mm',
            l: 'DD/M/YYYY',
            ll: 'D MMM YYYY',
            lll: 'D MMM YYYY HH:mm',
            llll: 'ddd, D MMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[Hôm nay lúc] LT',
            nextDay: '[Ngày mai lúc] LT',
            nextWeek: 'dddd [tuần tới lúc] LT',
            lastDay: '[Hôm qua lúc] LT',
            lastWeek: 'dddd [tuần trước lúc] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s tới',
            past: '%s trước',
            s: 'vài giây',
            ss: '%d giây',
            m: 'một phút',
            mm: '%d phút',
            h: 'một giờ',
            hh: '%d giờ',
            d: 'một ngày',
            dd: '%d ngày',
            w: 'một tuần',
            ww: '%d tuần',
            M: 'một tháng',
            MM: '%d tháng',
            y: 'một năm',
            yy: '%d năm'
          },
          dayOfMonthOrdinalParse: /\d{1,2}/,
          ordinal: function ordinal(number) {
            return number;
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return vi;
      });
      /***/

    },

    /***/
    "KTz0":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/me.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function KTz0(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Montenegrin [me]
      //! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var translator = {
          words: {
            //Different grammatical cases
            ss: ['sekund', 'sekunda', 'sekundi'],
            m: ['jedan minut', 'jednog minuta'],
            mm: ['minut', 'minuta', 'minuta'],
            h: ['jedan sat', 'jednog sata'],
            hh: ['sat', 'sata', 'sati'],
            dd: ['dan', 'dana', 'dana'],
            MM: ['mjesec', 'mjeseca', 'mjeseci'],
            yy: ['godina', 'godine', 'godina']
          },
          correctGrammaticalCase: function correctGrammaticalCase(number, wordKey) {
            return number === 1 ? wordKey[0] : number >= 2 && number <= 4 ? wordKey[1] : wordKey[2];
          },
          translate: function translate(number, withoutSuffix, key) {
            var wordKey = translator.words[key];

            if (key.length === 1) {
              return withoutSuffix ? wordKey[0] : wordKey[1];
            } else {
              return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
            }
          }
        };
        var me = moment.defineLocale('me', {
          months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
          monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
          monthsParseExact: true,
          weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
          weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
          weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd, D. MMMM YYYY H:mm'
          },
          calendar: {
            sameDay: '[danas u] LT',
            nextDay: '[sjutra u] LT',
            nextWeek: function nextWeek() {
              switch (this.day()) {
                case 0:
                  return '[u] [nedjelju] [u] LT';

                case 3:
                  return '[u] [srijedu] [u] LT';

                case 6:
                  return '[u] [subotu] [u] LT';

                case 1:
                case 2:
                case 4:
                case 5:
                  return '[u] dddd [u] LT';
              }
            },
            lastDay: '[juče u] LT',
            lastWeek: function lastWeek() {
              var lastWeekDays = ['[prošle] [nedjelje] [u] LT', '[prošlog] [ponedjeljka] [u] LT', '[prošlog] [utorka] [u] LT', '[prošle] [srijede] [u] LT', '[prošlog] [četvrtka] [u] LT', '[prošlog] [petka] [u] LT', '[prošle] [subote] [u] LT'];
              return lastWeekDays[this.day()];
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: 'za %s',
            past: 'prije %s',
            s: 'nekoliko sekundi',
            ss: translator.translate,
            m: translator.translate,
            mm: translator.translate,
            h: translator.translate,
            hh: translator.translate,
            d: 'dan',
            dd: translator.translate,
            M: 'mjesec',
            MM: translator.translate,
            y: 'godinu',
            yy: translator.translate
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return me;
      });
      /***/

    },

    /***/
    "Kj3r":
    /*!***********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/debounceTime.js ***!
      \***********************************************************************/

    /*! exports provided: debounceTime */

    /***/
    function Kj3r(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "debounceTime", function () {
        return debounceTime;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");
      /* harmony import */


      var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../scheduler/async */
      "D0XW");

      function debounceTime(dueTime) {
        var scheduler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
        return function (source) {
          return source.lift(new DebounceTimeOperator(dueTime, scheduler));
        };
      }

      var DebounceTimeOperator = /*#__PURE__*/function () {
        function DebounceTimeOperator(dueTime, scheduler) {
          _classCallCheck2(this, DebounceTimeOperator);

          this.dueTime = dueTime;
          this.scheduler = scheduler;
        }

        _createClass2(DebounceTimeOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new DebounceTimeSubscriber(subscriber, this.dueTime, this.scheduler));
          }
        }]);

        return DebounceTimeOperator;
      }();

      var DebounceTimeSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_18) {
        _inherits2(DebounceTimeSubscriber, _Subscriber__WEBPACK_18);

        var _super235 = _createSuper(DebounceTimeSubscriber);

        function DebounceTimeSubscriber(destination, dueTime, scheduler) {
          var _this558;

          _classCallCheck2(this, DebounceTimeSubscriber);

          _this558 = _super235.call(this, destination);
          _this558.dueTime = dueTime;
          _this558.scheduler = scheduler;
          _this558.debouncedSubscription = null;
          _this558.lastValue = null;
          _this558.hasValue = false;
          return _this558;
        }

        _createClass2(DebounceTimeSubscriber, [{
          key: "_next",
          value: function _next(value) {
            this.clearDebounce();
            this.lastValue = value;
            this.hasValue = true;
            this.add(this.debouncedSubscription = this.scheduler.schedule(dispatchNext, this.dueTime, this));
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.debouncedNext();
            this.destination.complete();
          }
        }, {
          key: "debouncedNext",
          value: function debouncedNext() {
            this.clearDebounce();

            if (this.hasValue) {
              var lastValue = this.lastValue;
              this.lastValue = null;
              this.hasValue = false;
              this.destination.next(lastValue);
            }
          }
        }, {
          key: "clearDebounce",
          value: function clearDebounce() {
            var debouncedSubscription = this.debouncedSubscription;

            if (debouncedSubscription !== null) {
              this.remove(debouncedSubscription);
              debouncedSubscription.unsubscribe();
              this.debouncedSubscription = null;
            }
          }
        }]);

        return DebounceTimeSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]);

      function dispatchNext(subscriber) {
        subscriber.debouncedNext();
      } //# sourceMappingURL=debounceTime.js.map

      /***/

    },

    /***/
    "KkXm":
    /*!***********************************************************************!*\
      !*** ./node_modules/ng2-scroll-to-el/__ivy_ngcc__/scrollTo.module.js ***!
      \***********************************************************************/

    /*! exports provided: ScrollToModule */

    /***/
    function KkXm(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ScrollToModule", function () {
        return ScrollToModule;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _scrollTo_directive__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./scrollTo.directive */
      "QRdw");
      /* harmony import */


      var _scrollTo_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./scrollTo.service */
      "kizl");

      var ScrollToModule = function () {
        function ScrollToModule() {}

        ScrollToModule.forRoot = function () {
          return {
            ngModule: ScrollToModule
          };
        };

        ScrollToModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
          type: ScrollToModule
        });
        ScrollToModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
          factory: function ScrollToModule_Factory(t) {
            return new (t || ScrollToModule)();
          },
          providers: [_scrollTo_service__WEBPACK_IMPORTED_MODULE_3__["ScrollToService"]],
          imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]]
        });

        (function () {
          (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](ScrollToModule, {
            declarations: function declarations() {
              return [_scrollTo_directive__WEBPACK_IMPORTED_MODULE_2__["ScrollToDirective"]];
            },
            imports: function imports() {
              return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]];
            },
            exports: function exports() {
              return [_scrollTo_directive__WEBPACK_IMPORTED_MODULE_2__["ScrollToDirective"]];
            }
          });
        })();

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ScrollToModule, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
            args: [{
              declarations: [_scrollTo_directive__WEBPACK_IMPORTED_MODULE_2__["ScrollToDirective"]],
              imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]],
              exports: [_scrollTo_directive__WEBPACK_IMPORTED_MODULE_2__["ScrollToDirective"]],
              providers: [_scrollTo_service__WEBPACK_IMPORTED_MODULE_3__["ScrollToService"]]
            }]
          }], function () {
            return [];
          }, null);
        })();

        return ScrollToModule;
      }();
      /** @nocollapse */


      ScrollToModule.ctorParameters = function () {
        return [];
      }; //# sourceMappingURL=scrollTo.module.js.map

      /***/

    },

    /***/
    "Kqap":
    /*!***************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/scan.js ***!
      \***************************************************************/

    /*! exports provided: scan */

    /***/
    function Kqap(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "scan", function () {
        return scan;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");

      function scan(accumulator, seed) {
        var hasSeed = false;

        if (arguments.length >= 2) {
          hasSeed = true;
        }

        return function scanOperatorFunction(source) {
          return source.lift(new ScanOperator(accumulator, seed, hasSeed));
        };
      }

      var ScanOperator = /*#__PURE__*/function () {
        function ScanOperator(accumulator, seed) {
          var hasSeed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;

          _classCallCheck2(this, ScanOperator);

          this.accumulator = accumulator;
          this.seed = seed;
          this.hasSeed = hasSeed;
        }

        _createClass2(ScanOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new ScanSubscriber(subscriber, this.accumulator, this.seed, this.hasSeed));
          }
        }]);

        return ScanOperator;
      }();

      var ScanSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_19) {
        _inherits2(ScanSubscriber, _Subscriber__WEBPACK_19);

        var _super236 = _createSuper(ScanSubscriber);

        function ScanSubscriber(destination, accumulator, _seed, hasSeed) {
          var _this559;

          _classCallCheck2(this, ScanSubscriber);

          _this559 = _super236.call(this, destination);
          _this559.accumulator = accumulator;
          _this559._seed = _seed;
          _this559.hasSeed = hasSeed;
          _this559.index = 0;
          return _this559;
        }

        _createClass2(ScanSubscriber, [{
          key: "seed",
          get: function get() {
            return this._seed;
          },
          set: function set(value) {
            this.hasSeed = true;
            this._seed = value;
          }
        }, {
          key: "_next",
          value: function _next(value) {
            if (!this.hasSeed) {
              this.seed = value;
              this.destination.next(value);
            } else {
              return this._tryNext(value);
            }
          }
        }, {
          key: "_tryNext",
          value: function _tryNext(value) {
            var index = this.index++;
            var result;

            try {
              result = this.accumulator(this.seed, value, index);
            } catch (err) {
              this.destination.error(err);
            }

            this.seed = result;
            this.destination.next(result);
          }
        }]);

        return ScanSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=scan.js.map

      /***/

    },

    /***/
    "KqfI":
    /*!**********************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/noop.js ***!
      \**********************************************************/

    /*! exports provided: noop */

    /***/
    function KqfI(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "noop", function () {
        return noop;
      });

      function noop() {} //# sourceMappingURL=noop.js.map

      /***/

    },

    /***/
    "L56X":
    /*!***********************************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/calendar-month-view.component.js ***!
      \***********************************************************************************************/

    /*! exports provided: OwlMonthViewComponent */

    /***/
    function L56X(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OwlMonthViewComponent", function () {
        return OwlMonthViewComponent;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./adapter/date-time-adapter.class */
      "1rjb");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _calendar_body_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./calendar-body.component */
      "jVEe");
      /* harmony import */


      var _adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ./adapter/date-time-format.class */
      "1FPZ");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! @angular/cdk/keycodes */
      "FtGj");
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");

      function OwlMonthViewComponent_th_3_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "th", 6);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var weekday_r1 = ctx.$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-label", weekday_r1["long"]);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](weekday_r1["short"]);
        }
      }

      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var __metadata = undefined && undefined.__metadata || function (k, v) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
      };

      var __param = undefined && undefined.__param || function (paramIndex, decorator) {
        return function (target, key) {
          decorator(target, key, paramIndex);
        };
      };

      var DAYS_PER_WEEK = 7;
      var WEEKS_PER_VIEW = 6;

      var OwlMonthViewComponent = function () {
        function OwlMonthViewComponent(cdRef, dateTimeAdapter, dateTimeFormats) {
          this.cdRef = cdRef;
          this.dateTimeAdapter = dateTimeAdapter;
          this.dateTimeFormats = dateTimeFormats;
          this.hideOtherMonths = false;
          this._firstDayOfWeek = 0;
          this._selectMode = 'single';
          this._selecteds = [];
          this.localeSub = rxjs__WEBPACK_IMPORTED_MODULE_5__["Subscription"].EMPTY;
          this.initiated = false;
          this.selectedDates = [];
          this.selectedChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.userSelection = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.pickerMomentChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        }

        Object.defineProperty(OwlMonthViewComponent.prototype, "firstDayOfWeek", {
          get: function get() {
            return this._firstDayOfWeek;
          },
          set: function set(val) {
            val = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_7__["coerceNumberProperty"])(val);

            if (val >= 0 && val <= 6 && val !== this._firstDayOfWeek) {
              this._firstDayOfWeek = val;

              if (this.initiated) {
                this.generateWeekDays();
                this.generateCalendar();
                this.cdRef.markForCheck();
              }
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMonthViewComponent.prototype, "selectMode", {
          get: function get() {
            return this._selectMode;
          },
          set: function set(val) {
            this._selectMode = val;

            if (this.initiated) {
              this.generateCalendar();
              this.cdRef.markForCheck();
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMonthViewComponent.prototype, "selected", {
          get: function get() {
            return this._selected;
          },
          set: function set(value) {
            var oldSelected = this._selected;
            value = this.dateTimeAdapter.deserialize(value);
            this._selected = this.getValidDate(value);

            if (!this.dateTimeAdapter.isSameDay(oldSelected, this._selected)) {
              this.setSelectedDates();
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMonthViewComponent.prototype, "selecteds", {
          get: function get() {
            return this._selecteds;
          },
          set: function set(values) {
            var _this = this;

            this._selecteds = values.map(function (v) {
              v = _this.dateTimeAdapter.deserialize(v);
              return _this.getValidDate(v);
            });
            this.setSelectedDates();
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMonthViewComponent.prototype, "pickerMoment", {
          get: function get() {
            return this._pickerMoment;
          },
          set: function set(value) {
            var oldMoment = this._pickerMoment;
            value = this.dateTimeAdapter.deserialize(value);
            this._pickerMoment = this.getValidDate(value) || this.dateTimeAdapter.now();
            this.firstDateOfMonth = this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(this._pickerMoment), this.dateTimeAdapter.getMonth(this._pickerMoment), 1);

            if (!this.isSameMonth(oldMoment, this._pickerMoment) && this.initiated) {
              this.generateCalendar();
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMonthViewComponent.prototype, "dateFilter", {
          get: function get() {
            return this._dateFilter;
          },
          set: function set(filter) {
            this._dateFilter = filter;

            if (this.initiated) {
              this.generateCalendar();
              this.cdRef.markForCheck();
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMonthViewComponent.prototype, "minDate", {
          get: function get() {
            return this._minDate;
          },
          set: function set(value) {
            value = this.dateTimeAdapter.deserialize(value);
            this._minDate = this.getValidDate(value);

            if (this.initiated) {
              this.generateCalendar();
              this.cdRef.markForCheck();
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMonthViewComponent.prototype, "maxDate", {
          get: function get() {
            return this._maxDate;
          },
          set: function set(value) {
            value = this.dateTimeAdapter.deserialize(value);
            this._maxDate = this.getValidDate(value);

            if (this.initiated) {
              this.generateCalendar();
              this.cdRef.markForCheck();
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMonthViewComponent.prototype, "weekdays", {
          get: function get() {
            return this._weekdays;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMonthViewComponent.prototype, "days", {
          get: function get() {
            return this._days;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMonthViewComponent.prototype, "activeCell", {
          get: function get() {
            if (this.pickerMoment) {
              return this.dateTimeAdapter.getDate(this.pickerMoment) + this.firstRowOffset - 1;
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMonthViewComponent.prototype, "isInSingleMode", {
          get: function get() {
            return this.selectMode === 'single';
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMonthViewComponent.prototype, "isInRangeMode", {
          get: function get() {
            return this.selectMode === 'range' || this.selectMode === 'rangeFrom' || this.selectMode === 'rangeTo';
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlMonthViewComponent.prototype, "owlDTCalendarView", {
          get: function get() {
            return true;
          },
          enumerable: true,
          configurable: true
        });

        OwlMonthViewComponent.prototype.ngOnInit = function () {
          var _this = this;

          this.generateWeekDays();
          this.localeSub = this.dateTimeAdapter.localeChanges.subscribe(function () {
            _this.generateWeekDays();

            _this.generateCalendar();

            _this.cdRef.markForCheck();
          });
        };

        OwlMonthViewComponent.prototype.ngAfterContentInit = function () {
          this.generateCalendar();
          this.initiated = true;
        };

        OwlMonthViewComponent.prototype.ngOnDestroy = function () {
          this.localeSub.unsubscribe();
        };

        OwlMonthViewComponent.prototype.selectCalendarCell = function (cell) {
          if (!cell.enabled || this.hideOtherMonths && cell.out) {
            return;
          }

          this.selectDate(cell.value);
        };

        OwlMonthViewComponent.prototype.selectDate = function (date) {
          var daysDiff = date - 1;
          var selected = this.dateTimeAdapter.addCalendarDays(this.firstDateOfMonth, daysDiff);
          this.selectedChange.emit(selected);
          this.userSelection.emit();
        };

        OwlMonthViewComponent.prototype.handleCalendarKeydown = function (event) {
          var moment;

          switch (event.keyCode) {
            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_6__["LEFT_ARROW"]:
              moment = this.dateTimeAdapter.addCalendarDays(this.pickerMoment, -1);
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_6__["RIGHT_ARROW"]:
              moment = this.dateTimeAdapter.addCalendarDays(this.pickerMoment, 1);
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_6__["UP_ARROW"]:
              moment = this.dateTimeAdapter.addCalendarDays(this.pickerMoment, -7);
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_6__["DOWN_ARROW"]:
              moment = this.dateTimeAdapter.addCalendarDays(this.pickerMoment, 7);
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_6__["HOME"]:
              moment = this.dateTimeAdapter.addCalendarDays(this.pickerMoment, 1 - this.dateTimeAdapter.getDate(this.pickerMoment));
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_6__["END"]:
              moment = this.dateTimeAdapter.addCalendarDays(this.pickerMoment, this.dateTimeAdapter.getNumDaysInMonth(this.pickerMoment) - this.dateTimeAdapter.getDate(this.pickerMoment));
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_6__["PAGE_UP"]:
              moment = event.altKey ? this.dateTimeAdapter.addCalendarYears(this.pickerMoment, -1) : this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, -1);
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_6__["PAGE_DOWN"]:
              moment = event.altKey ? this.dateTimeAdapter.addCalendarYears(this.pickerMoment, 1) : this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, 1);
              this.pickerMomentChange.emit(moment);
              break;

            case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_6__["ENTER"]:
              if (!this.dateFilter || this.dateFilter(this.pickerMoment)) {
                this.selectDate(this.dateTimeAdapter.getDate(this.pickerMoment));
              }

              break;

            default:
              return;
          }

          this.focusActiveCell();
          event.preventDefault();
        };

        OwlMonthViewComponent.prototype.generateWeekDays = function () {
          var longWeekdays = this.dateTimeAdapter.getDayOfWeekNames('long');
          var shortWeekdays = this.dateTimeAdapter.getDayOfWeekNames('short');
          var narrowWeekdays = this.dateTimeAdapter.getDayOfWeekNames('narrow');
          var firstDayOfWeek = this.firstDayOfWeek;
          var weekdays = longWeekdays.map(function (_long, i) {
            return {
              "long": _long,
              "short": shortWeekdays[i],
              narrow: narrowWeekdays[i]
            };
          });
          this._weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));
          this.dateNames = this.dateTimeAdapter.getDateNames();
          return;
        };

        OwlMonthViewComponent.prototype.generateCalendar = function () {
          if (!this.pickerMoment) {
            return;
          }

          this.todayDate = null;
          var startWeekdayOfMonth = this.dateTimeAdapter.getDay(this.firstDateOfMonth);
          var firstDayOfWeek = this.firstDayOfWeek;
          var daysDiff = 0 - (startWeekdayOfMonth + (DAYS_PER_WEEK - firstDayOfWeek)) % DAYS_PER_WEEK;
          this.firstRowOffset = Math.abs(daysDiff);
          this._days = [];

          for (var i = 0; i < WEEKS_PER_VIEW; i++) {
            var week = [];

            for (var j = 0; j < DAYS_PER_WEEK; j++) {
              var date = this.dateTimeAdapter.addCalendarDays(this.firstDateOfMonth, daysDiff);
              var dateCell = this.createDateCell(date, daysDiff);

              if (this.dateTimeAdapter.isSameDay(this.dateTimeAdapter.now(), date)) {
                this.todayDate = daysDiff + 1;
              }

              week.push(dateCell);
              daysDiff += 1;
            }

            this._days.push(week);
          }

          this.setSelectedDates();
        };

        OwlMonthViewComponent.prototype.createDateCell = function (date, daysDiff) {
          var daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(this.pickerMoment);
          var dateNum = this.dateTimeAdapter.getDate(date);
          var dateName = dateNum.toString();
          var ariaLabel = this.dateTimeAdapter.format(date, this.dateTimeFormats.dateA11yLabel);
          var enabled = this.isDateEnabled(date);
          var dayValue = daysDiff + 1;
          var out = dayValue < 1 || dayValue > daysInMonth;
          var cellClass = 'owl-dt-day-' + this.dateTimeAdapter.getDay(date);
          return new _calendar_body_component__WEBPACK_IMPORTED_MODULE_3__["CalendarCell"](dayValue, dateName, ariaLabel, enabled, out, cellClass);
        };

        OwlMonthViewComponent.prototype.isDateEnabled = function (date) {
          return !!date && (!this.dateFilter || this.dateFilter(date)) && (!this.minDate || this.dateTimeAdapter.compare(date, this.minDate) >= 0) && (!this.maxDate || this.dateTimeAdapter.compare(date, this.maxDate) <= 0);
        };

        OwlMonthViewComponent.prototype.getValidDate = function (obj) {
          return this.dateTimeAdapter.isDateInstance(obj) && this.dateTimeAdapter.isValid(obj) ? obj : null;
        };

        OwlMonthViewComponent.prototype.isSameMonth = function (dateLeft, dateRight) {
          return !!(dateLeft && dateRight && this.dateTimeAdapter.isValid(dateLeft) && this.dateTimeAdapter.isValid(dateRight) && this.dateTimeAdapter.getYear(dateLeft) === this.dateTimeAdapter.getYear(dateRight) && this.dateTimeAdapter.getMonth(dateLeft) === this.dateTimeAdapter.getMonth(dateRight));
        };

        OwlMonthViewComponent.prototype.setSelectedDates = function () {
          var _this = this;

          this.selectedDates = [];

          if (!this.firstDateOfMonth) {
            return;
          }

          if (this.isInSingleMode && this.selected) {
            var dayDiff = this.dateTimeAdapter.differenceInCalendarDays(this.selected, this.firstDateOfMonth);
            this.selectedDates[0] = dayDiff + 1;
            return;
          }

          if (this.isInRangeMode && this.selecteds) {
            this.selectedDates = this.selecteds.map(function (selected) {
              if (_this.dateTimeAdapter.isValid(selected)) {
                var dayDiff = _this.dateTimeAdapter.differenceInCalendarDays(selected, _this.firstDateOfMonth);

                return dayDiff + 1;
              } else {
                return null;
              }
            });
          }
        };

        OwlMonthViewComponent.prototype.focusActiveCell = function () {
          this.calendarBodyElm.focusActiveCell();
        };

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Boolean)], OwlMonthViewComponent.prototype, "hideOtherMonths", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Number), __metadata("design:paramtypes", [Number])], OwlMonthViewComponent.prototype, "firstDayOfWeek", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", String), __metadata("design:paramtypes", [String])], OwlMonthViewComponent.prototype, "selectMode", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlMonthViewComponent.prototype, "selected", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Array), __metadata("design:paramtypes", [Array])], OwlMonthViewComponent.prototype, "selecteds", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlMonthViewComponent.prototype, "pickerMoment", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Function), __metadata("design:paramtypes", [Function])], OwlMonthViewComponent.prototype, "dateFilter", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlMonthViewComponent.prototype, "minDate", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlMonthViewComponent.prototype, "maxDate", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", Object)], OwlMonthViewComponent.prototype, "selectedChange", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", Object)], OwlMonthViewComponent.prototype, "userSelection", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"])], OwlMonthViewComponent.prototype, "pickerMomentChange", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"])(_calendar_body_component__WEBPACK_IMPORTED_MODULE_3__["OwlCalendarBodyComponent"]), __metadata("design:type", _calendar_body_component__WEBPACK_IMPORTED_MODULE_3__["OwlCalendarBodyComponent"])], OwlMonthViewComponent.prototype, "calendarBodyElm", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('class.owl-dt-calendar-view'), __metadata("design:type", Boolean), __metadata("design:paramtypes", [])], OwlMonthViewComponent.prototype, "owlDTCalendarView", null);

        OwlMonthViewComponent = __decorate([__param(1, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __param(2, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __param(2, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"])(_adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_4__["OWL_DATE_TIME_FORMATS"])), __metadata("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"], _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__["DateTimeAdapter"], Object])], OwlMonthViewComponent);

        OwlMonthViewComponent.ɵfac = function OwlMonthViewComponent_Factory(t) {
          return new (t || OwlMonthViewComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__["DateTimeAdapter"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_4__["OWL_DATE_TIME_FORMATS"], 8));
        };

        OwlMonthViewComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
          type: OwlMonthViewComponent,
          selectors: [["owl-date-time-month-view"]],
          viewQuery: function OwlMonthViewComponent_Query(rf, ctx) {
            if (rf & 1) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](_calendar_body_component__WEBPACK_IMPORTED_MODULE_3__["OwlCalendarBodyComponent"], 1);
            }

            if (rf & 2) {
              var _t;

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.calendarBodyElm = _t.first);
            }
          },
          hostVars: 2,
          hostBindings: function OwlMonthViewComponent_HostBindings(rf, ctx) {
            if (rf & 2) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("owl-dt-calendar-view", ctx.owlDTCalendarView);
            }
          },
          inputs: {
            hideOtherMonths: "hideOtherMonths",
            firstDayOfWeek: "firstDayOfWeek",
            selectMode: "selectMode",
            selected: "selected",
            selecteds: "selecteds",
            pickerMoment: "pickerMoment",
            dateFilter: "dateFilter",
            minDate: "minDate",
            maxDate: "maxDate"
          },
          outputs: {
            selectedChange: "selectedChange",
            userSelection: "userSelection",
            pickerMomentChange: "pickerMomentChange"
          },
          exportAs: ["owlYearView"],
          decls: 7,
          vars: 8,
          consts: [[1, "owl-dt-calendar-table", "owl-dt-calendar-month-table"], [1, "owl-dt-calendar-header"], [1, "owl-dt-weekdays"], ["class", "owl-dt-weekday", "scope", "col", 4, "ngFor", "ngForOf"], ["aria-hidden", "true", "colspan", "7", 1, "owl-dt-calendar-table-divider"], ["owl-date-time-calendar-body", "", "role", "grid", 3, "rows", "todayValue", "selectedValues", "selectMode", "activeCell", "keydown", "select"], ["scope", "col", 1, "owl-dt-weekday"]],
          template: function OwlMonthViewComponent_Template(rf, ctx) {
            if (rf & 1) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "table", 0);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "thead", 1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "tr", 2);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, OwlMonthViewComponent_th_3_Template, 3, 2, "th", 3);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](4, "tr");

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](5, "th", 4);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](6, "tbody", 5);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("keydown", function OwlMonthViewComponent_Template_tbody_keydown_6_listener($event) {
                return ctx.handleCalendarKeydown($event);
              })("select", function OwlMonthViewComponent_Template_tbody_select_6_listener($event) {
                return ctx.selectCalendarCell($event);
              });

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
            }

            if (rf & 2) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("owl-dt-calendar-only-current-month", ctx.hideOtherMonths);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.weekdays);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("rows", ctx.days)("todayValue", ctx.todayDate)("selectedValues", ctx.selectedDates)("selectMode", ctx.selectMode)("activeCell", ctx.activeCell);
            }
          },
          directives: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["NgForOf"], _calendar_body_component__WEBPACK_IMPORTED_MODULE_3__["OwlCalendarBodyComponent"]],
          styles: [""],
          changeDetection: 0
        });

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](OwlMonthViewComponent, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
            args: [{
              selector: 'owl-date-time-month-view',
              exportAs: 'owlYearView',
              template: "<table class=\"owl-dt-calendar-table owl-dt-calendar-month-table\" [class.owl-dt-calendar-only-current-month]=\"hideOtherMonths\"><thead class=\"owl-dt-calendar-header\"><tr class=\"owl-dt-weekdays\"><th *ngFor=\"let weekday of weekdays\" [attr.aria-label]=\"weekday.long\" class=\"owl-dt-weekday\" scope=\"col\"><span>{{weekday.short}}</span></th></tr><tr><th class=\"owl-dt-calendar-table-divider\" aria-hidden=\"true\" colspan=\"7\"></th></tr></thead><tbody owl-date-time-calendar-body role=\"grid\" [rows]=\"days\" [todayValue]=\"todayDate\" [selectedValues]=\"selectedDates\" [selectMode]=\"selectMode\" [activeCell]=\"activeCell\" (keydown)=\"handleCalendarKeydown($event)\" (select)=\"selectCalendarCell($event)\"></tbody></table>",
              styles: [""],
              preserveWhitespaces: false,
              changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush
            }]
          }], function () {
            return [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
            }, {
              type: _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__["DateTimeAdapter"],
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
              }]
            }, {
              type: Object,
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
              }, {
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
                args: [_adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_4__["OWL_DATE_TIME_FORMATS"]]
              }]
            }];
          }, {
            hideOtherMonths: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            selectedChange: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            userSelection: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            pickerMomentChange: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            firstDayOfWeek: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            selectMode: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            selected: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            selecteds: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            pickerMoment: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            dateFilter: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            minDate: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            maxDate: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            owlDTCalendarView: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['class.owl-dt-calendar-view']
            }],
            calendarBodyElm: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
              args: [_calendar_body_component__WEBPACK_IMPORTED_MODULE_3__["OwlCalendarBodyComponent"]]
            }]
          });
        })();

        return OwlMonthViewComponent;
      }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64, 

      /***/

    },

    /***/
    "LRne":
    /*!**************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/of.js ***!
      \**************************************************************/

    /*! exports provided: of */

    /***/
    function LRne(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "of", function () {
        return of;
      });
      /* harmony import */


      var _util_isScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../util/isScheduler */
      "z+Ro");
      /* harmony import */


      var _fromArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./fromArray */
      "yCtX");
      /* harmony import */


      var _scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../scheduled/scheduleArray */
      "jZKg");

      function of() {
        for (var _len30 = arguments.length, args = new Array(_len30), _key32 = 0; _key32 < _len30; _key32++) {
          args[_key32] = arguments[_key32];
        }

        var scheduler = args[args.length - 1];

        if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_0__["isScheduler"])(scheduler)) {
          args.pop();
          return Object(_scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__["scheduleArray"])(args, scheduler);
        } else {
          return Object(_fromArray__WEBPACK_IMPORTED_MODULE_1__["fromArray"])(args);
        }
      } //# sourceMappingURL=of.js.map

      /***/

    },

    /***/
    "Lh65":
    /*!**********************************************!*\
      !*** ./node_modules/aws-sdk/lib/http/xhr.js ***!
      \**********************************************/

    /*! no static exports found */

    /***/
    function Lh65(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ../core */
      "QsWE");

      var EventEmitter = __webpack_require__(
      /*! events */
      "+qE3").EventEmitter;

      __webpack_require__(
      /*! ../http */
      "Pzvs");
      /**
       * @api private
       */


      AWS.XHRClient = AWS.util.inherit({
        handleRequest: function handleRequest(httpRequest, httpOptions, callback, errCallback) {
          var self = this;
          var endpoint = httpRequest.endpoint;
          var emitter = new EventEmitter();
          var href = endpoint.protocol + '//' + endpoint.hostname;

          if (endpoint.port !== 80 && endpoint.port !== 443) {
            href += ':' + endpoint.port;
          }

          href += httpRequest.path;
          var xhr = new XMLHttpRequest(),
              headersEmitted = false;
          httpRequest.stream = xhr;
          xhr.addEventListener('readystatechange', function () {
            try {
              if (xhr.status === 0) return; // 0 code is invalid
            } catch (e) {
              return;
            }

            if (this.readyState >= this.HEADERS_RECEIVED && !headersEmitted) {
              emitter.statusCode = xhr.status;
              emitter.headers = self.parseHeaders(xhr.getAllResponseHeaders());
              emitter.emit('headers', emitter.statusCode, emitter.headers, xhr.statusText);
              headersEmitted = true;
            }

            if (this.readyState === this.DONE) {
              self.finishRequest(xhr, emitter);
            }
          }, false);
          xhr.upload.addEventListener('progress', function (evt) {
            emitter.emit('sendProgress', evt);
          });
          xhr.addEventListener('progress', function (evt) {
            emitter.emit('receiveProgress', evt);
          }, false);
          xhr.addEventListener('timeout', function () {
            errCallback(AWS.util.error(new Error('Timeout'), {
              code: 'TimeoutError'
            }));
          }, false);
          xhr.addEventListener('error', function () {
            errCallback(AWS.util.error(new Error('Network Failure'), {
              code: 'NetworkingError'
            }));
          }, false);
          xhr.addEventListener('abort', function () {
            errCallback(AWS.util.error(new Error('Request aborted'), {
              code: 'RequestAbortedError'
            }));
          }, false);
          callback(emitter);
          xhr.open(httpRequest.method, href, httpOptions.xhrAsync !== false);
          AWS.util.each(httpRequest.headers, function (key, value) {
            if (key !== 'Content-Length' && key !== 'User-Agent' && key !== 'Host') {
              xhr.setRequestHeader(key, value);
            }
          });

          if (httpOptions.timeout && httpOptions.xhrAsync !== false) {
            xhr.timeout = httpOptions.timeout;
          }

          if (httpOptions.xhrWithCredentials) {
            xhr.withCredentials = true;
          }

          try {
            xhr.responseType = 'arraybuffer';
          } catch (e) {}

          try {
            if (httpRequest.body) {
              xhr.send(httpRequest.body);
            } else {
              xhr.send();
            }
          } catch (err) {
            if (httpRequest.body && typeof httpRequest.body.buffer === 'object') {
              xhr.send(httpRequest.body.buffer); // send ArrayBuffer directly
            } else {
              throw err;
            }
          }

          return emitter;
        },
        parseHeaders: function parseHeaders(rawHeaders) {
          var headers = {};
          AWS.util.arrayEach(rawHeaders.split(/\r?\n/), function (line) {
            var key = line.split(':', 1)[0];
            var value = line.substring(key.length + 2);
            if (key.length > 0) headers[key.toLowerCase()] = value;
          });
          return headers;
        },
        finishRequest: function finishRequest(xhr, emitter) {
          var buffer;

          if (xhr.responseType === 'arraybuffer' && xhr.response) {
            var ab = xhr.response;
            buffer = new AWS.util.Buffer(ab.byteLength);
            var view = new Uint8Array(ab);

            for (var i = 0; i < buffer.length; ++i) {
              buffer[i] = view[i];
            }
          }

          try {
            if (!buffer && typeof xhr.responseText === 'string') {
              buffer = new AWS.util.Buffer(xhr.responseText);
            }
          } catch (e) {}

          if (buffer) emitter.emit('data', buffer);
          emitter.emit('end');
        }
      });
      /**
       * @api private
       */

      AWS.HttpClient.prototype = AWS.XHRClient.prototype;
      /**
       * @api private
       */

      AWS.HttpClient.streamsApiVersion = 1;
      /***/
    },

    /***/
    "Lhse":
    /*!****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/symbol/iterator.js ***!
      \****************************************************************/

    /*! exports provided: getSymbolIterator, iterator, $$iterator */

    /***/
    function Lhse(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getSymbolIterator", function () {
        return getSymbolIterator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "iterator", function () {
        return iterator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "$$iterator", function () {
        return $$iterator;
      });

      function getSymbolIterator() {
        if (typeof Symbol !== 'function' || !Symbol.iterator) {
          return '@@iterator';
        }

        return Symbol.iterator;
      }

      var iterator = getSymbolIterator();
      var $$iterator = iterator; //# sourceMappingURL=iterator.js.map

      /***/
    },

    /***/
    "Loxo":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/uz.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function Loxo(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Uzbek [uz]
      //! author : Sardor Muminov : https://github.com/muminoff
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var uz = moment.defineLocale('uz', {
          months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),
          monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
          weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),
          weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),
          weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'D MMMM YYYY, dddd HH:mm'
          },
          calendar: {
            sameDay: '[Бугун соат] LT [да]',
            nextDay: '[Эртага] LT [да]',
            nextWeek: 'dddd [куни соат] LT [да]',
            lastDay: '[Кеча соат] LT [да]',
            lastWeek: '[Утган] dddd [куни соат] LT [да]',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'Якин %s ичида',
            past: 'Бир неча %s олдин',
            s: 'фурсат',
            ss: '%d фурсат',
            m: 'бир дакика',
            mm: '%d дакика',
            h: 'бир соат',
            hh: '%d соат',
            d: 'бир кун',
            dd: '%d кун',
            M: 'бир ой',
            MM: '%d ой',
            y: 'бир йил',
            yy: '%d йил'
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return uz;
      });
      /***/

    },

    /***/
    "M9IT":
    /*!***************************************************************************!*\
      !*** ./node_modules/@angular/material/__ivy_ngcc__/fesm2015/paginator.js ***!
      \***************************************************************************/

    /*! exports provided: MAT_PAGINATOR_DEFAULT_OPTIONS, MAT_PAGINATOR_INTL_PROVIDER, MAT_PAGINATOR_INTL_PROVIDER_FACTORY, MatPaginator, MatPaginatorIntl, MatPaginatorModule, PageEvent, _MatPaginatorBase */

    /***/
    function M9IT(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_PAGINATOR_DEFAULT_OPTIONS", function () {
        return MAT_PAGINATOR_DEFAULT_OPTIONS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_PAGINATOR_INTL_PROVIDER", function () {
        return MAT_PAGINATOR_INTL_PROVIDER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_PAGINATOR_INTL_PROVIDER_FACTORY", function () {
        return MAT_PAGINATOR_INTL_PROVIDER_FACTORY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatPaginator", function () {
        return MatPaginator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatPaginatorIntl", function () {
        return MatPaginatorIntl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatPaginatorModule", function () {
        return MatPaginatorModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PageEvent", function () {
        return PageEvent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "_MatPaginatorBase", function () {
        return _MatPaginatorBase;
      });
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_material_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/material/core */
      "FKr1");
      /* harmony import */


      var _angular_material_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/material/button */
      "bTqV");
      /* harmony import */


      var _angular_material_select__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/material/select */
      "d3UM");
      /* harmony import */


      var _angular_material_tooltip__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @angular/material/tooltip */
      "Qu3c");
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var _angular_material_form_field__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(
      /*! @angular/material/form-field */
      "kmnG");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * To modify the labels and text displayed, create a new instance of MatPaginatorIntl and
       * include it in a custom provider
       */


      function MatPaginator_div_2_mat_form_field_3_mat_option_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "mat-option", 19);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var pageSizeOption_r6 = ctx.$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("value", pageSizeOption_r6);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"](" ", pageSizeOption_r6, " ");
        }
      }

      function MatPaginator_div_2_mat_form_field_3_Template(rf, ctx) {
        if (rf & 1) {
          var _r8 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "mat-form-field", 16);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "mat-select", 17);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("selectionChange", function MatPaginator_div_2_mat_form_field_3_Template_mat_select_selectionChange_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵrestoreView"](_r8);

            var ctx_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](2);

            return ctx_r7._changePageSize($event.value);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](2, MatPaginator_div_2_mat_form_field_3_mat_option_2_Template, 2, 2, "mat-option", 18);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("appearance", ctx_r3._formFieldAppearance)("color", ctx_r3.color);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("value", ctx_r3.pageSize)("disabled", ctx_r3.disabled)("aria-label", ctx_r3._intl.itemsPerPageLabel);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngForOf", ctx_r3._displayedPageSizeOptions);
        }
      }

      function MatPaginator_div_2_div_4_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div", 20);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate"](ctx_r4.pageSize);
        }
      }

      function MatPaginator_div_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div", 12);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "div", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](3, MatPaginator_div_2_mat_form_field_3_Template, 3, 6, "mat-form-field", 14);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](4, MatPaginator_div_2_div_4_Template, 2, 1, "div", 15);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"](" ", ctx_r0._intl.itemsPerPageLabel, " ");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx_r0._displayedPageSizeOptions.length > 1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx_r0._displayedPageSizeOptions.length <= 1);
        }
      }

      function MatPaginator_button_6_Template(rf, ctx) {
        if (rf & 1) {
          var _r10 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "button", 21);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function MatPaginator_button_6_Template_button_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵrestoreView"](_r10);

            var ctx_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

            return ctx_r9.firstPage();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnamespaceSVG"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "svg", 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](2, "path", 22);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("matTooltip", ctx_r1._intl.firstPageLabel)("matTooltipDisabled", ctx_r1._previousButtonsDisabled())("matTooltipPosition", "above")("disabled", ctx_r1._previousButtonsDisabled());

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵattribute"]("aria-label", ctx_r1._intl.firstPageLabel);
        }
      }

      function MatPaginator_button_13_Template(rf, ctx) {
        if (rf & 1) {
          var _r12 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnamespaceSVG"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnamespaceHTML"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "button", 23);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function MatPaginator_button_13_Template_button_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵrestoreView"](_r12);

            var ctx_r11 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

            return ctx_r11.lastPage();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnamespaceSVG"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "svg", 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](2, "path", 24);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("matTooltip", ctx_r2._intl.lastPageLabel)("matTooltipDisabled", ctx_r2._nextButtonsDisabled())("matTooltipPosition", "above")("disabled", ctx_r2._nextButtonsDisabled());

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵattribute"]("aria-label", ctx_r2._intl.lastPageLabel);
        }
      }

      var MatPaginatorIntl = function MatPaginatorIntl() {
        _classCallCheck2(this, MatPaginatorIntl);

        /**
         * Stream to emit from when labels are changed. Use this to notify components when the labels have
         * changed after initialization.
         */
        this.changes = new rxjs__WEBPACK_IMPORTED_MODULE_7__["Subject"]();
        /** A label for the page size selector. */

        this.itemsPerPageLabel = 'Items per page:';
        /** A label for the button that increments the current page. */

        this.nextPageLabel = 'Next page';
        /** A label for the button that decrements the current page. */

        this.previousPageLabel = 'Previous page';
        /** A label for the button that moves to the first page. */

        this.firstPageLabel = 'First page';
        /** A label for the button that moves to the last page. */

        this.lastPageLabel = 'Last page';
        /** A label for the range of items within the current page and the length of the whole list. */

        this.getRangeLabel = function (page, pageSize, length) {
          if (length == 0 || pageSize == 0) {
            return "0 of ".concat(length);
          }

          length = Math.max(length, 0);
          var startIndex = page * pageSize; // If the start index exceeds the list length, do not try and fix the end index to the end.

          var endIndex = startIndex < length ? Math.min(startIndex + pageSize, length) : startIndex + pageSize;
          return "".concat(startIndex + 1, " \u2013 ").concat(endIndex, " of ").concat(length);
        };
      };

      MatPaginatorIntl.ɵfac = function MatPaginatorIntl_Factory(t) {
        return new (t || MatPaginatorIntl)();
      };

      MatPaginatorIntl.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function MatPaginatorIntl_Factory() {
          return new MatPaginatorIntl();
        },
        token: MatPaginatorIntl,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](MatPaginatorIntl, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [];
        }, null);
      })();
      /** @docs-private */


      function MAT_PAGINATOR_INTL_PROVIDER_FACTORY(parentIntl) {
        return parentIntl || new MatPaginatorIntl();
      }
      /** @docs-private */


      var MAT_PAGINATOR_INTL_PROVIDER = {
        // If there is already an MatPaginatorIntl available, use that. Otherwise, provide a new one.
        provide: MatPaginatorIntl,
        deps: [[new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"](), new _angular_core__WEBPACK_IMPORTED_MODULE_1__["SkipSelf"](), MatPaginatorIntl]],
        useFactory: MAT_PAGINATOR_INTL_PROVIDER_FACTORY
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** The default page size if there is no page size and there are no provided page size options. */

      var DEFAULT_PAGE_SIZE = 50;
      /**
       * Change event object that is emitted when the user selects a
       * different page size or navigates to another page.
       */

      var PageEvent = function PageEvent() {
        _classCallCheck2(this, PageEvent);
      };
      /** Injection token that can be used to provide the default options for the paginator module. */


      var MAT_PAGINATOR_DEFAULT_OPTIONS = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('MAT_PAGINATOR_DEFAULT_OPTIONS'); // Boilerplate for applying mixins to _MatPaginatorBase.

      /** @docs-private */

      var MatPaginatorMixinBase = function MatPaginatorMixinBase() {
        _classCallCheck2(this, MatPaginatorMixinBase);
      };

      var _MatPaginatorMixinBase = Object(_angular_material_core__WEBPACK_IMPORTED_MODULE_2__["mixinDisabled"])(Object(_angular_material_core__WEBPACK_IMPORTED_MODULE_2__["mixinInitialized"])(MatPaginatorMixinBase));
      /**
       * Base class with all of the `MatPaginator` functionality.
       * @docs-private
       */


      var _MatPaginatorBase = /*#__PURE__*/function (_MatPaginatorMixinBas) {
        _inherits2(_MatPaginatorBase, _MatPaginatorMixinBas);

        var _super237 = _createSuper(_MatPaginatorBase);

        function _MatPaginatorBase(_intl, _changeDetectorRef, defaults) {
          var _this560;

          _classCallCheck2(this, _MatPaginatorBase);

          _this560 = _super237.call(this);
          _this560._intl = _intl;
          _this560._changeDetectorRef = _changeDetectorRef;
          _this560._pageIndex = 0;
          _this560._length = 0;
          _this560._pageSizeOptions = [];
          _this560._hidePageSize = false;
          _this560._showFirstLastButtons = false;
          /** Event emitted when the paginator changes the page size or page index. */

          _this560.page = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["EventEmitter"]();
          _this560._intlChanges = _intl.changes.subscribe(function () {
            return _this560._changeDetectorRef.markForCheck();
          });

          if (defaults) {
            var pageSize = defaults.pageSize,
                pageSizeOptions = defaults.pageSizeOptions,
                hidePageSize = defaults.hidePageSize,
                showFirstLastButtons = defaults.showFirstLastButtons;

            if (pageSize != null) {
              _this560._pageSize = pageSize;
            }

            if (pageSizeOptions != null) {
              _this560._pageSizeOptions = pageSizeOptions;
            }

            if (hidePageSize != null) {
              _this560._hidePageSize = hidePageSize;
            }

            if (showFirstLastButtons != null) {
              _this560._showFirstLastButtons = showFirstLastButtons;
            }
          }

          return _this560;
        }
        /** The zero-based page index of the displayed list of items. Defaulted to 0. */


        _createClass2(_MatPaginatorBase, [{
          key: "pageIndex",
          get: function get() {
            return this._pageIndex;
          },
          set: function set(value) {
            this._pageIndex = Math.max(Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_6__["coerceNumberProperty"])(value), 0);

            this._changeDetectorRef.markForCheck();
          }
          /** The length of the total number of items that are being paginated. Defaulted to 0. */

        }, {
          key: "length",
          get: function get() {
            return this._length;
          },
          set: function set(value) {
            this._length = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_6__["coerceNumberProperty"])(value);

            this._changeDetectorRef.markForCheck();
          }
          /** Number of items to display on a page. By default set to 50. */

        }, {
          key: "pageSize",
          get: function get() {
            return this._pageSize;
          },
          set: function set(value) {
            this._pageSize = Math.max(Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_6__["coerceNumberProperty"])(value), 0);

            this._updateDisplayedPageSizeOptions();
          }
          /** The set of provided page size options to display to the user. */

        }, {
          key: "pageSizeOptions",
          get: function get() {
            return this._pageSizeOptions;
          },
          set: function set(value) {
            this._pageSizeOptions = (value || []).map(function (p) {
              return Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_6__["coerceNumberProperty"])(p);
            });

            this._updateDisplayedPageSizeOptions();
          }
          /** Whether to hide the page size selection UI from the user. */

        }, {
          key: "hidePageSize",
          get: function get() {
            return this._hidePageSize;
          },
          set: function set(value) {
            this._hidePageSize = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_6__["coerceBooleanProperty"])(value);
          }
          /** Whether to show the first/last buttons UI to the user. */

        }, {
          key: "showFirstLastButtons",
          get: function get() {
            return this._showFirstLastButtons;
          },
          set: function set(value) {
            this._showFirstLastButtons = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_6__["coerceBooleanProperty"])(value);
          }
        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            this._initialized = true;

            this._updateDisplayedPageSizeOptions();

            this._markInitialized();
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._intlChanges.unsubscribe();
          }
          /** Advances to the next page if it exists. */

        }, {
          key: "nextPage",
          value: function nextPage() {
            if (!this.hasNextPage()) {
              return;
            }

            var previousPageIndex = this.pageIndex;
            this.pageIndex++;

            this._emitPageEvent(previousPageIndex);
          }
          /** Move back to the previous page if it exists. */

        }, {
          key: "previousPage",
          value: function previousPage() {
            if (!this.hasPreviousPage()) {
              return;
            }

            var previousPageIndex = this.pageIndex;
            this.pageIndex--;

            this._emitPageEvent(previousPageIndex);
          }
          /** Move to the first page if not already there. */

        }, {
          key: "firstPage",
          value: function firstPage() {
            // hasPreviousPage being false implies at the start
            if (!this.hasPreviousPage()) {
              return;
            }

            var previousPageIndex = this.pageIndex;
            this.pageIndex = 0;

            this._emitPageEvent(previousPageIndex);
          }
          /** Move to the last page if not already there. */

        }, {
          key: "lastPage",
          value: function lastPage() {
            // hasNextPage being false implies at the end
            if (!this.hasNextPage()) {
              return;
            }

            var previousPageIndex = this.pageIndex;
            this.pageIndex = this.getNumberOfPages() - 1;

            this._emitPageEvent(previousPageIndex);
          }
          /** Whether there is a previous page. */

        }, {
          key: "hasPreviousPage",
          value: function hasPreviousPage() {
            return this.pageIndex >= 1 && this.pageSize != 0;
          }
          /** Whether there is a next page. */

        }, {
          key: "hasNextPage",
          value: function hasNextPage() {
            var maxPageIndex = this.getNumberOfPages() - 1;
            return this.pageIndex < maxPageIndex && this.pageSize != 0;
          }
          /** Calculate the number of pages */

        }, {
          key: "getNumberOfPages",
          value: function getNumberOfPages() {
            if (!this.pageSize) {
              return 0;
            }

            return Math.ceil(this.length / this.pageSize);
          }
          /**
           * Changes the page size so that the first item displayed on the page will still be
           * displayed using the new page size.
           *
           * For example, if the page size is 10 and on the second page (items indexed 10-19) then
           * switching so that the page size is 5 will set the third page as the current page so
           * that the 10th item will still be displayed.
           */

        }, {
          key: "_changePageSize",
          value: function _changePageSize(pageSize) {
            // Current page needs to be updated to reflect the new page size. Navigate to the page
            // containing the previous page's first item.
            var startIndex = this.pageIndex * this.pageSize;
            var previousPageIndex = this.pageIndex;
            this.pageIndex = Math.floor(startIndex / pageSize) || 0;
            this.pageSize = pageSize;

            this._emitPageEvent(previousPageIndex);
          }
          /** Checks whether the buttons for going forwards should be disabled. */

        }, {
          key: "_nextButtonsDisabled",
          value: function _nextButtonsDisabled() {
            return this.disabled || !this.hasNextPage();
          }
          /** Checks whether the buttons for going backwards should be disabled. */

        }, {
          key: "_previousButtonsDisabled",
          value: function _previousButtonsDisabled() {
            return this.disabled || !this.hasPreviousPage();
          }
          /**
           * Updates the list of page size options to display to the user. Includes making sure that
           * the page size is an option and that the list is sorted.
           */

        }, {
          key: "_updateDisplayedPageSizeOptions",
          value: function _updateDisplayedPageSizeOptions() {
            if (!this._initialized) {
              return;
            } // If no page size is provided, use the first page size option or the default page size.


            if (!this.pageSize) {
              this._pageSize = this.pageSizeOptions.length != 0 ? this.pageSizeOptions[0] : DEFAULT_PAGE_SIZE;
            }

            this._displayedPageSizeOptions = this.pageSizeOptions.slice();

            if (this._displayedPageSizeOptions.indexOf(this.pageSize) === -1) {
              this._displayedPageSizeOptions.push(this.pageSize);
            } // Sort the numbers using a number-specific sort function.


            this._displayedPageSizeOptions.sort(function (a, b) {
              return a - b;
            });

            this._changeDetectorRef.markForCheck();
          }
          /** Emits an event notifying that a change of the paginator's properties has been triggered. */

        }, {
          key: "_emitPageEvent",
          value: function _emitPageEvent(previousPageIndex) {
            this.page.emit({
              previousPageIndex: previousPageIndex,
              pageIndex: this.pageIndex,
              pageSize: this.pageSize,
              length: this.length
            });
          }
        }]);

        return _MatPaginatorBase;
      }(_MatPaginatorMixinBase);

      _MatPaginatorBase.ɵfac = function _MatPaginatorBase_Factory(t) {
        return new (t || _MatPaginatorBase)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](MatPaginatorIntl), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](undefined));
      };

      _MatPaginatorBase.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({
        type: _MatPaginatorBase,
        inputs: {
          pageIndex: "pageIndex",
          length: "length",
          pageSize: "pageSize",
          pageSizeOptions: "pageSizeOptions",
          hidePageSize: "hidePageSize",
          showFirstLastButtons: "showFirstLastButtons",
          color: "color"
        },
        outputs: {
          page: "page"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"]]
      });

      _MatPaginatorBase.ctorParameters = function () {
        return [{
          type: MatPaginatorIntl
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"]
        }, {
          type: undefined
        }];
      };

      _MatPaginatorBase.propDecorators = {
        color: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        pageIndex: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        length: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        pageSize: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        pageSizeOptions: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        hidePageSize: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        showFirstLastButtons: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        page: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](_MatPaginatorBase, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"]
        }], function () {
          return [{
            type: MatPaginatorIntl
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"]
          }, {
            type: undefined
          }];
        }, {
          page: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
          }],
          pageIndex: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          length: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          pageSize: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          pageSizeOptions: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          hidePageSize: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          showFirstLastButtons: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          color: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }]
        });
      })();
      /**
       * Component to provide navigation between paged information. Displays the size of the current
       * page, user-selectable options to change that size, what items are being shown, and
       * navigational button to go to the previous or next page.
       */


      var MatPaginator = /*#__PURE__*/function (_MatPaginatorBase2) {
        _inherits2(MatPaginator, _MatPaginatorBase2);

        var _super238 = _createSuper(MatPaginator);

        function MatPaginator(intl, changeDetectorRef, defaults) {
          var _this561;

          _classCallCheck2(this, MatPaginator);

          _this561 = _super238.call(this, intl, changeDetectorRef, defaults);

          if (defaults && defaults.formFieldAppearance != null) {
            _this561._formFieldAppearance = defaults.formFieldAppearance;
          }

          return _this561;
        }

        return MatPaginator;
      }(_MatPaginatorBase);

      MatPaginator.ɵfac = function MatPaginator_Factory(t) {
        return new (t || MatPaginator)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](MatPaginatorIntl), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](MAT_PAGINATOR_DEFAULT_OPTIONS, 8));
      };

      MatPaginator.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({
        type: MatPaginator,
        selectors: [["mat-paginator"]],
        hostAttrs: [1, "mat-paginator"],
        inputs: {
          disabled: "disabled"
        },
        exportAs: ["matPaginator"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"]],
        decls: 14,
        vars: 14,
        consts: [[1, "mat-paginator-outer-container"], [1, "mat-paginator-container"], ["class", "mat-paginator-page-size", 4, "ngIf"], [1, "mat-paginator-range-actions"], [1, "mat-paginator-range-label"], ["mat-icon-button", "", "type", "button", "class", "mat-paginator-navigation-first", 3, "matTooltip", "matTooltipDisabled", "matTooltipPosition", "disabled", "click", 4, "ngIf"], ["mat-icon-button", "", "type", "button", 1, "mat-paginator-navigation-previous", 3, "matTooltip", "matTooltipDisabled", "matTooltipPosition", "disabled", "click"], ["viewBox", "0 0 24 24", "focusable", "false", 1, "mat-paginator-icon"], ["d", "M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"], ["mat-icon-button", "", "type", "button", 1, "mat-paginator-navigation-next", 3, "matTooltip", "matTooltipDisabled", "matTooltipPosition", "disabled", "click"], ["d", "M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"], ["mat-icon-button", "", "type", "button", "class", "mat-paginator-navigation-last", 3, "matTooltip", "matTooltipDisabled", "matTooltipPosition", "disabled", "click", 4, "ngIf"], [1, "mat-paginator-page-size"], [1, "mat-paginator-page-size-label"], ["class", "mat-paginator-page-size-select", 3, "appearance", "color", 4, "ngIf"], ["class", "mat-paginator-page-size-value", 4, "ngIf"], [1, "mat-paginator-page-size-select", 3, "appearance", "color"], [3, "value", "disabled", "aria-label", "selectionChange"], [3, "value", 4, "ngFor", "ngForOf"], [3, "value"], [1, "mat-paginator-page-size-value"], ["mat-icon-button", "", "type", "button", 1, "mat-paginator-navigation-first", 3, "matTooltip", "matTooltipDisabled", "matTooltipPosition", "disabled", "click"], ["d", "M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z"], ["mat-icon-button", "", "type", "button", 1, "mat-paginator-navigation-last", 3, "matTooltip", "matTooltipDisabled", "matTooltipPosition", "disabled", "click"], ["d", "M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z"]],
        template: function MatPaginator_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "div", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](2, MatPaginator_div_2_Template, 5, 3, "div", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](3, "div", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](4, "div", 4);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](5);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](6, MatPaginator_button_6_Template, 3, 5, "button", 5);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](7, "button", 6);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function MatPaginator_Template_button_click_7_listener() {
              return ctx.previousPage();
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnamespaceSVG"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](8, "svg", 7);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](9, "path", 8);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnamespaceHTML"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](10, "button", 9);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function MatPaginator_Template_button_click_10_listener() {
              return ctx.nextPage();
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnamespaceSVG"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](11, "svg", 7);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](12, "path", 10);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](13, MatPaginator_button_13_Template, 3, 5, "button", 11);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", !ctx.hidePageSize);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](3);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"](" ", ctx._intl.getRangeLabel(ctx.pageIndex, ctx.pageSize, ctx.length), " ");

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.showFirstLastButtons);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("matTooltip", ctx._intl.previousPageLabel)("matTooltipDisabled", ctx._previousButtonsDisabled())("matTooltipPosition", "above")("disabled", ctx._previousButtonsDisabled());

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵattribute"]("aria-label", ctx._intl.previousPageLabel);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](3);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("matTooltip", ctx._intl.nextPageLabel)("matTooltipDisabled", ctx._nextButtonsDisabled())("matTooltipPosition", "above")("disabled", ctx._nextButtonsDisabled());

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵattribute"]("aria-label", ctx._intl.nextPageLabel);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](3);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.showFirstLastButtons);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["NgIf"], _angular_material_button__WEBPACK_IMPORTED_MODULE_3__["MatButton"], _angular_material_tooltip__WEBPACK_IMPORTED_MODULE_5__["MatTooltip"], _angular_material_form_field__WEBPACK_IMPORTED_MODULE_8__["MatFormField"], _angular_material_select__WEBPACK_IMPORTED_MODULE_4__["MatSelect"], _angular_common__WEBPACK_IMPORTED_MODULE_0__["NgForOf"], _angular_material_core__WEBPACK_IMPORTED_MODULE_2__["MatOption"]],
        styles: [".mat-paginator{display:block}.mat-paginator-outer-container{display:flex}.mat-paginator-container{display:flex;align-items:center;justify-content:flex-end;padding:0 8px;flex-wrap:wrap-reverse;width:100%}.mat-paginator-page-size{display:flex;align-items:baseline;margin-right:8px}[dir=rtl] .mat-paginator-page-size{margin-right:0;margin-left:8px}.mat-paginator-page-size-label{margin:0 4px}.mat-paginator-page-size-select{margin:6px 4px 0 4px;width:56px}.mat-paginator-page-size-select.mat-form-field-appearance-outline{width:64px}.mat-paginator-page-size-select.mat-form-field-appearance-fill{width:64px}.mat-paginator-range-label{margin:0 32px 0 24px}.mat-paginator-range-actions{display:flex;align-items:center}.mat-paginator-icon{width:28px;fill:currentColor}[dir=rtl] .mat-paginator-icon{transform:rotate(180deg)}\n"],
        encapsulation: 2,
        changeDetection: 0
      });

      MatPaginator.ctorParameters = function () {
        return [{
          type: MatPaginatorIntl
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [MAT_PAGINATOR_DEFAULT_OPTIONS]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](MatPaginator, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"],
          args: [{
            selector: 'mat-paginator',
            exportAs: 'matPaginator',
            template: "<div class=\"mat-paginator-outer-container\">\n  <div class=\"mat-paginator-container\">\n    <div class=\"mat-paginator-page-size\" *ngIf=\"!hidePageSize\">\n      <div class=\"mat-paginator-page-size-label\">\n        {{_intl.itemsPerPageLabel}}\n      </div>\n\n      <mat-form-field\n        *ngIf=\"_displayedPageSizeOptions.length > 1\"\n        [appearance]=\"_formFieldAppearance!\"\n        [color]=\"color\"\n        class=\"mat-paginator-page-size-select\">\n        <mat-select\n          [value]=\"pageSize\"\n          [disabled]=\"disabled\"\n          [aria-label]=\"_intl.itemsPerPageLabel\"\n          (selectionChange)=\"_changePageSize($event.value)\">\n          <mat-option *ngFor=\"let pageSizeOption of _displayedPageSizeOptions\" [value]=\"pageSizeOption\">\n            {{pageSizeOption}}\n          </mat-option>\n        </mat-select>\n      </mat-form-field>\n\n      <div\n        class=\"mat-paginator-page-size-value\"\n        *ngIf=\"_displayedPageSizeOptions.length <= 1\">{{pageSize}}</div>\n    </div>\n\n    <div class=\"mat-paginator-range-actions\">\n      <div class=\"mat-paginator-range-label\">\n        {{_intl.getRangeLabel(pageIndex, pageSize, length)}}\n      </div>\n\n      <button mat-icon-button type=\"button\"\n              class=\"mat-paginator-navigation-first\"\n              (click)=\"firstPage()\"\n              [attr.aria-label]=\"_intl.firstPageLabel\"\n              [matTooltip]=\"_intl.firstPageLabel\"\n              [matTooltipDisabled]=\"_previousButtonsDisabled()\"\n              [matTooltipPosition]=\"'above'\"\n              [disabled]=\"_previousButtonsDisabled()\"\n              *ngIf=\"showFirstLastButtons\">\n        <svg class=\"mat-paginator-icon\" viewBox=\"0 0 24 24\" focusable=\"false\">\n          <path d=\"M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z\"/>\n        </svg>\n      </button>\n      <button mat-icon-button type=\"button\"\n              class=\"mat-paginator-navigation-previous\"\n              (click)=\"previousPage()\"\n              [attr.aria-label]=\"_intl.previousPageLabel\"\n              [matTooltip]=\"_intl.previousPageLabel\"\n              [matTooltipDisabled]=\"_previousButtonsDisabled()\"\n              [matTooltipPosition]=\"'above'\"\n              [disabled]=\"_previousButtonsDisabled()\">\n        <svg class=\"mat-paginator-icon\" viewBox=\"0 0 24 24\" focusable=\"false\">\n          <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"/>\n        </svg>\n      </button>\n      <button mat-icon-button type=\"button\"\n              class=\"mat-paginator-navigation-next\"\n              (click)=\"nextPage()\"\n              [attr.aria-label]=\"_intl.nextPageLabel\"\n              [matTooltip]=\"_intl.nextPageLabel\"\n              [matTooltipDisabled]=\"_nextButtonsDisabled()\"\n              [matTooltipPosition]=\"'above'\"\n              [disabled]=\"_nextButtonsDisabled()\">\n        <svg class=\"mat-paginator-icon\" viewBox=\"0 0 24 24\" focusable=\"false\">\n          <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/>\n        </svg>\n      </button>\n      <button mat-icon-button type=\"button\"\n              class=\"mat-paginator-navigation-last\"\n              (click)=\"lastPage()\"\n              [attr.aria-label]=\"_intl.lastPageLabel\"\n              [matTooltip]=\"_intl.lastPageLabel\"\n              [matTooltipDisabled]=\"_nextButtonsDisabled()\"\n              [matTooltipPosition]=\"'above'\"\n              [disabled]=\"_nextButtonsDisabled()\"\n              *ngIf=\"showFirstLastButtons\">\n        <svg class=\"mat-paginator-icon\" viewBox=\"0 0 24 24\" focusable=\"false\">\n          <path d=\"M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z\"/>\n        </svg>\n      </button>\n    </div>\n  </div>\n</div>\n",
            inputs: ['disabled'],
            host: {
              'class': 'mat-paginator'
            },
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectionStrategy"].OnPush,
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewEncapsulation"].None,
            styles: [".mat-paginator{display:block}.mat-paginator-outer-container{display:flex}.mat-paginator-container{display:flex;align-items:center;justify-content:flex-end;padding:0 8px;flex-wrap:wrap-reverse;width:100%}.mat-paginator-page-size{display:flex;align-items:baseline;margin-right:8px}[dir=rtl] .mat-paginator-page-size{margin-right:0;margin-left:8px}.mat-paginator-page-size-label{margin:0 4px}.mat-paginator-page-size-select{margin:6px 4px 0 4px;width:56px}.mat-paginator-page-size-select.mat-form-field-appearance-outline{width:64px}.mat-paginator-page-size-select.mat-form-field-appearance-fill{width:64px}.mat-paginator-range-label{margin:0 32px 0 24px}.mat-paginator-range-actions{display:flex;align-items:center}.mat-paginator-icon{width:28px;fill:currentColor}[dir=rtl] .mat-paginator-icon{transform:rotate(180deg)}\n"]
          }]
        }], function () {
          return [{
            type: MatPaginatorIntl
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [MAT_PAGINATOR_DEFAULT_OPTIONS]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var MatPaginatorModule = function MatPaginatorModule() {
        _classCallCheck2(this, MatPaginatorModule);
      };

      MatPaginatorModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({
        type: MatPaginatorModule
      });
      MatPaginatorModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({
        factory: function MatPaginatorModule_Factory(t) {
          return new (t || MatPaginatorModule)();
        },
        providers: [MAT_PAGINATOR_INTL_PROVIDER],
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_0__["CommonModule"], _angular_material_button__WEBPACK_IMPORTED_MODULE_3__["MatButtonModule"], _angular_material_select__WEBPACK_IMPORTED_MODULE_4__["MatSelectModule"], _angular_material_tooltip__WEBPACK_IMPORTED_MODULE_5__["MatTooltipModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_2__["MatCommonModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](MatPaginatorModule, {
          declarations: function declarations() {
            return [MatPaginator];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_0__["CommonModule"], _angular_material_button__WEBPACK_IMPORTED_MODULE_3__["MatButtonModule"], _angular_material_select__WEBPACK_IMPORTED_MODULE_4__["MatSelectModule"], _angular_material_tooltip__WEBPACK_IMPORTED_MODULE_5__["MatTooltipModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_2__["MatCommonModule"]];
          },
          exports: function exports() {
            return [MatPaginator];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](MatPaginatorModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
          args: [{
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["CommonModule"], _angular_material_button__WEBPACK_IMPORTED_MODULE_3__["MatButtonModule"], _angular_material_select__WEBPACK_IMPORTED_MODULE_4__["MatSelectModule"], _angular_material_tooltip__WEBPACK_IMPORTED_MODULE_5__["MatTooltipModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_2__["MatCommonModule"]],
            exports: [MatPaginator],
            declarations: [MatPaginator],
            providers: [MAT_PAGINATOR_INTL_PROVIDER]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=paginator.js.map

      /***/

    },

    /***/
    "MBAA":
    /*!***************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/scheduled/scheduleIterable.js ***!
      \***************************************************************************/

    /*! exports provided: scheduleIterable */

    /***/
    function MBAA(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "scheduleIterable", function () {
        return scheduleIterable;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../Subscription */
      "quSY");
      /* harmony import */


      var _symbol_iterator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../symbol/iterator */
      "Lhse");

      function scheduleIterable(input, scheduler) {
        if (!input) {
          throw new Error('Iterable cannot be null');
        }

        return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
          var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
          var iterator;
          sub.add(function () {
            if (iterator && typeof iterator["return"] === 'function') {
              iterator["return"]();
            }
          });
          sub.add(scheduler.schedule(function () {
            iterator = input[_symbol_iterator__WEBPACK_IMPORTED_MODULE_2__["iterator"]]();
            sub.add(scheduler.schedule(function () {
              if (subscriber.closed) {
                return;
              }

              var value;
              var done;

              try {
                var result = iterator.next();
                value = result.value;
                done = result.done;
              } catch (err) {
                subscriber.error(err);
                return;
              }

              if (done) {
                subscriber.complete();
              } else {
                subscriber.next(value);
                this.schedule();
              }
            }));
          }));
          return sub;
        });
      } //# sourceMappingURL=scheduleIterable.js.map

      /***/

    },

    /***/
    "MCLT":
    /*!***********************************!*\
      !*** ./node_modules/util/util.js ***!
      \***********************************/

    /*! no static exports found */

    /***/
    function MCLT(module, exports, __webpack_require__) {
      // Copyright Joyent, Inc. and other Node contributors.
      //
      // Permission is hereby granted, free of charge, to any person obtaining a
      // copy of this software and associated documentation files (the
      // "Software"), to deal in the Software without restriction, including
      // without limitation the rights to use, copy, modify, merge, publish,
      // distribute, sublicense, and/or sell copies of the Software, and to permit
      // persons to whom the Software is furnished to do so, subject to the
      // following conditions:
      //
      // The above copyright notice and this permission notice shall be included
      // in all copies or substantial portions of the Software.
      //
      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
      // USE OR OTHER DEALINGS IN THE SOFTWARE.
      var formatRegExp = /%[sdj%]/g;

      exports.format = function (f) {
        if (!isString(f)) {
          var objects = [];

          for (var i = 0; i < arguments.length; i++) {
            objects.push(inspect(arguments[i]));
          }

          return objects.join(' ');
        }

        var i = 1;
        var args = arguments;
        var len = args.length;
        var str = String(f).replace(formatRegExp, function (x) {
          if (x === '%%') return '%';
          if (i >= len) return x;

          switch (x) {
            case '%s':
              return String(args[i++]);

            case '%d':
              return Number(args[i++]);

            case '%j':
              try {
                return JSON.stringify(args[i++]);
              } catch (_) {
                return '[Circular]';
              }

            default:
              return x;
          }
        });

        for (var x = args[i]; i < len; x = args[++i]) {
          if (isNull(x) || !isObject(x)) {
            str += ' ' + x;
          } else {
            str += ' ' + inspect(x);
          }
        }

        return str;
      }; // Mark that a method should not be used.
      // Returns a modified function which warns once by default.
      // If --no-deprecation is set, then it is a no-op.


      exports.deprecate = function (fn, msg) {
        // Allow for deprecating things in the process of starting up.
        if (isUndefined(global.process)) {
          return function () {
            return exports.deprecate(fn, msg).apply(this, arguments);
          };
        }

        if (process.noDeprecation === true) {
          return fn;
        }

        var warned = false;

        function deprecated() {
          if (!warned) {
            if (process.throwDeprecation) {
              throw new Error(msg);
            } else if (process.traceDeprecation) {
              console.trace(msg);
            } else {
              console.error(msg);
            }

            warned = true;
          }

          return fn.apply(this, arguments);
        }

        return deprecated;
      };

      var debugs = {};
      var debugEnviron;

      exports.debuglog = function (set) {
        if (isUndefined(debugEnviron)) debugEnviron = process.env.NODE_DEBUG || '';
        set = set.toUpperCase();

        if (!debugs[set]) {
          if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
            var pid = process.pid;

            debugs[set] = function () {
              var msg = exports.format.apply(exports, arguments);
              console.error('%s %d: %s', set, pid, msg);
            };
          } else {
            debugs[set] = function () {};
          }
        }

        return debugs[set];
      };
      /**
       * Echos the value of a value. Trys to print the value out
       * in the best way possible given the different types.
       *
       * @param {Object} obj The object to print out.
       * @param {Object} opts Optional options object that alters the output.
       */

      /* legacy: obj, showHidden, depth, colors*/


      function inspect(obj, opts) {
        // default options
        var ctx = {
          seen: [],
          stylize: stylizeNoColor
        }; // legacy...

        if (arguments.length >= 3) ctx.depth = arguments[2];
        if (arguments.length >= 4) ctx.colors = arguments[3];

        if (isBoolean(opts)) {
          // legacy...
          ctx.showHidden = opts;
        } else if (opts) {
          // got an "options" object
          exports._extend(ctx, opts);
        } // set default options


        if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
        if (isUndefined(ctx.depth)) ctx.depth = 2;
        if (isUndefined(ctx.colors)) ctx.colors = false;
        if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
        if (ctx.colors) ctx.stylize = stylizeWithColor;
        return formatValue(ctx, obj, ctx.depth);
      }

      exports.inspect = inspect; // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics

      inspect.colors = {
        'bold': [1, 22],
        'italic': [3, 23],
        'underline': [4, 24],
        'inverse': [7, 27],
        'white': [37, 39],
        'grey': [90, 39],
        'black': [30, 39],
        'blue': [34, 39],
        'cyan': [36, 39],
        'green': [32, 39],
        'magenta': [35, 39],
        'red': [31, 39],
        'yellow': [33, 39]
      }; // Don't use 'blue' not visible on cmd.exe

      inspect.styles = {
        'special': 'cyan',
        'number': 'yellow',
        'boolean': 'yellow',
        'undefined': 'grey',
        'null': 'bold',
        'string': 'green',
        'date': 'magenta',
        // "name": intentionally not styling
        'regexp': 'red'
      };

      function stylizeWithColor(str, styleType) {
        var style = inspect.styles[styleType];

        if (style) {
          return "\x1B[" + inspect.colors[style][0] + 'm' + str + "\x1B[" + inspect.colors[style][1] + 'm';
        } else {
          return str;
        }
      }

      function stylizeNoColor(str, styleType) {
        return str;
      }

      function arrayToHash(array) {
        var hash = {};
        array.forEach(function (val, idx) {
          hash[val] = true;
        });
        return hash;
      }

      function formatValue(ctx, value, recurseTimes) {
        // Provide a hook for user-specified inspect functions.
        // Check that value is an object with an inspect function on it
        if (ctx.customInspect && value && isFunction(value.inspect) && // Filter out the util module, it's inspect function is special
        value.inspect !== exports.inspect && // Also filter out any prototype objects using the circular check.
        !(value.constructor && value.constructor.prototype === value)) {
          var ret = value.inspect(recurseTimes, ctx);

          if (!isString(ret)) {
            ret = formatValue(ctx, ret, recurseTimes);
          }

          return ret;
        } // Primitive types cannot have properties


        var primitive = formatPrimitive(ctx, value);

        if (primitive) {
          return primitive;
        } // Look up the keys of the object.


        var keys = Object.keys(value);
        var visibleKeys = arrayToHash(keys);

        if (ctx.showHidden) {
          keys = Object.getOwnPropertyNames(value);
        } // IE doesn't make error fields non-enumerable
        // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx


        if (isError(value) && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
          return formatError(value);
        } // Some type of object without properties can be shortcutted.


        if (keys.length === 0) {
          if (isFunction(value)) {
            var name = value.name ? ': ' + value.name : '';
            return ctx.stylize('[Function' + name + ']', 'special');
          }

          if (isRegExp(value)) {
            return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
          }

          if (isDate(value)) {
            return ctx.stylize(Date.prototype.toString.call(value), 'date');
          }

          if (isError(value)) {
            return formatError(value);
          }
        }

        var base = '',
            array = false,
            braces = ['{', '}']; // Make Array say that they are Array

        if (isArray(value)) {
          array = true;
          braces = ['[', ']'];
        } // Make functions say that they are functions


        if (isFunction(value)) {
          var n = value.name ? ': ' + value.name : '';
          base = ' [Function' + n + ']';
        } // Make RegExps say that they are RegExps


        if (isRegExp(value)) {
          base = ' ' + RegExp.prototype.toString.call(value);
        } // Make dates with properties first say the date


        if (isDate(value)) {
          base = ' ' + Date.prototype.toUTCString.call(value);
        } // Make error with message first say the error


        if (isError(value)) {
          base = ' ' + formatError(value);
        }

        if (keys.length === 0 && (!array || value.length == 0)) {
          return braces[0] + base + braces[1];
        }

        if (recurseTimes < 0) {
          if (isRegExp(value)) {
            return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
          } else {
            return ctx.stylize('[Object]', 'special');
          }
        }

        ctx.seen.push(value);
        var output;

        if (array) {
          output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
        } else {
          output = keys.map(function (key) {
            return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
          });
        }

        ctx.seen.pop();
        return reduceToSingleString(output, base, braces);
      }

      function formatPrimitive(ctx, value) {
        if (isUndefined(value)) return ctx.stylize('undefined', 'undefined');

        if (isString(value)) {
          var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '').replace(/'/g, "\\'").replace(/\\"/g, '"') + '\'';
          return ctx.stylize(simple, 'string');
        }

        if (isNumber(value)) return ctx.stylize('' + value, 'number');
        if (isBoolean(value)) return ctx.stylize('' + value, 'boolean'); // For some reason typeof null is "object", so special case here.

        if (isNull(value)) return ctx.stylize('null', 'null');
      }

      function formatError(value) {
        return '[' + Error.prototype.toString.call(value) + ']';
      }

      function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
        var output = [];

        for (var i = 0, l = value.length; i < l; ++i) {
          if (hasOwnProperty(value, String(i))) {
            output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, String(i), true));
          } else {
            output.push('');
          }
        }

        keys.forEach(function (key) {
          if (!key.match(/^\d+$/)) {
            output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, key, true));
          }
        });
        return output;
      }

      function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
        var name, str, desc;
        desc = Object.getOwnPropertyDescriptor(value, key) || {
          value: value[key]
        };

        if (desc.get) {
          if (desc.set) {
            str = ctx.stylize('[Getter/Setter]', 'special');
          } else {
            str = ctx.stylize('[Getter]', 'special');
          }
        } else {
          if (desc.set) {
            str = ctx.stylize('[Setter]', 'special');
          }
        }

        if (!hasOwnProperty(visibleKeys, key)) {
          name = '[' + key + ']';
        }

        if (!str) {
          if (ctx.seen.indexOf(desc.value) < 0) {
            if (isNull(recurseTimes)) {
              str = formatValue(ctx, desc.value, null);
            } else {
              str = formatValue(ctx, desc.value, recurseTimes - 1);
            }

            if (str.indexOf('\n') > -1) {
              if (array) {
                str = str.split('\n').map(function (line) {
                  return '  ' + line;
                }).join('\n').substr(2);
              } else {
                str = '\n' + str.split('\n').map(function (line) {
                  return '   ' + line;
                }).join('\n');
              }
            }
          } else {
            str = ctx.stylize('[Circular]', 'special');
          }
        }

        if (isUndefined(name)) {
          if (array && key.match(/^\d+$/)) {
            return str;
          }

          name = JSON.stringify('' + key);

          if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
            name = name.substr(1, name.length - 2);
            name = ctx.stylize(name, 'name');
          } else {
            name = name.replace(/'/g, "\\'").replace(/\\"/g, '"').replace(/(^"|"$)/g, "'");
            name = ctx.stylize(name, 'string');
          }
        }

        return name + ': ' + str;
      }

      function reduceToSingleString(output, base, braces) {
        var numLinesEst = 0;
        var length = output.reduce(function (prev, cur) {
          numLinesEst++;
          if (cur.indexOf('\n') >= 0) numLinesEst++;
          return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
        }, 0);

        if (length > 60) {
          return braces[0] + (base === '' ? '' : base + '\n ') + ' ' + output.join(',\n  ') + ' ' + braces[1];
        }

        return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
      } // NOTE: These type checking functions intentionally don't use `instanceof`
      // because it is fragile and can be easily faked with `Object.create()`.


      function isArray(ar) {
        return Array.isArray(ar);
      }

      exports.isArray = isArray;

      function isBoolean(arg) {
        return typeof arg === 'boolean';
      }

      exports.isBoolean = isBoolean;

      function isNull(arg) {
        return arg === null;
      }

      exports.isNull = isNull;

      function isNullOrUndefined(arg) {
        return arg == null;
      }

      exports.isNullOrUndefined = isNullOrUndefined;

      function isNumber(arg) {
        return typeof arg === 'number';
      }

      exports.isNumber = isNumber;

      function isString(arg) {
        return typeof arg === 'string';
      }

      exports.isString = isString;

      function isSymbol(arg) {
        return typeof arg === 'symbol';
      }

      exports.isSymbol = isSymbol;

      function isUndefined(arg) {
        return arg === void 0;
      }

      exports.isUndefined = isUndefined;

      function isRegExp(re) {
        return isObject(re) && objectToString(re) === '[object RegExp]';
      }

      exports.isRegExp = isRegExp;

      function isObject(arg) {
        return typeof arg === 'object' && arg !== null;
      }

      exports.isObject = isObject;

      function isDate(d) {
        return isObject(d) && objectToString(d) === '[object Date]';
      }

      exports.isDate = isDate;

      function isError(e) {
        return isObject(e) && (objectToString(e) === '[object Error]' || e instanceof Error);
      }

      exports.isError = isError;

      function isFunction(arg) {
        return typeof arg === 'function';
      }

      exports.isFunction = isFunction;

      function isPrimitive(arg) {
        return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || typeof arg === 'symbol' || // ES6 symbol
        typeof arg === 'undefined';
      }

      exports.isPrimitive = isPrimitive;
      exports.isBuffer = __webpack_require__(
      /*! ./support/isBuffer */
      "1gqn");

      function objectToString(o) {
        return Object.prototype.toString.call(o);
      }

      function pad(n) {
        return n < 10 ? '0' + n.toString(10) : n.toString(10);
      }

      var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; // 26 Feb 16:19:34

      function timestamp() {
        var d = new Date();
        var time = [pad(d.getHours()), pad(d.getMinutes()), pad(d.getSeconds())].join(':');
        return [d.getDate(), months[d.getMonth()], time].join(' ');
      } // log is just a thin wrapper to console.log that prepends a timestamp


      exports.log = function () {
        console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
      };
      /**
       * Inherit the prototype methods from one constructor into another.
       *
       * The Function.prototype.inherits from lang.js rewritten as a standalone
       * function (not on Function.prototype). NOTE: If this file is to be loaded
       * during bootstrapping this function needs to be rewritten using some native
       * functions as prototype setup using normal JavaScript does not work as
       * expected during bootstrapping (see mirror.js in r114903).
       *
       * @param {function} ctor Constructor function which needs to inherit the
       *     prototype.
       * @param {function} superCtor Constructor function to inherit prototype from.
       */


      exports.inherits = __webpack_require__(
      /*! inherits */
      "KKCa");

      exports._extend = function (origin, add) {
        // Don't do anything if add isn't an object
        if (!add || !isObject(add)) return origin;
        var keys = Object.keys(add);
        var i = keys.length;

        while (i--) {
          origin[keys[i]] = add[keys[i]];
        }

        return origin;
      };

      function hasOwnProperty(obj, prop) {
        return Object.prototype.hasOwnProperty.call(obj, prop);
      }
      /***/

    },

    /***/
    "MN5+":
    /*!***********************************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/date-time-picker-intl.service.js ***!
      \***********************************************************************************************/

    /*! exports provided: OwlDateTimeIntl */

    /***/
    function MN5(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OwlDateTimeIntl", function () {
        return OwlDateTimeIntl;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! rxjs */
      "qCKp");

      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var OwlDateTimeIntl = function () {
        function OwlDateTimeIntl() {
          this.changes = new rxjs__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
          this.upSecondLabel = 'Add a second';
          this.downSecondLabel = 'Minus a second';
          this.upMinuteLabel = 'Add a minute';
          this.downMinuteLabel = 'Minus a minute';
          this.upHourLabel = 'Add a hour';
          this.downHourLabel = 'Minus a hour';
          this.prevMonthLabel = 'Previous month';
          this.nextMonthLabel = 'Next month';
          this.prevYearLabel = 'Previous year';
          this.nextYearLabel = 'Next year';
          this.prevMultiYearLabel = 'Previous 21 years';
          this.nextMultiYearLabel = 'Next 21 years';
          this.switchToMonthViewLabel = 'Change to month view';
          this.switchToMultiYearViewLabel = 'Choose month and year';
          this.cancelBtnLabel = 'Cancel';
          this.setBtnLabel = 'Set';
          this.rangeFromLabel = 'From';
          this.rangeToLabel = 'To';
          this.hour12AMLabel = 'AM';
          this.hour12PMLabel = 'PM';
        }

        OwlDateTimeIntl.ngInjectableDef = _angular_core__WEBPACK_IMPORTED_MODULE_0__["defineInjectable"]({
          factory: function OwlDateTimeIntl_Factory() {
            return new OwlDateTimeIntl();
          },
          token: OwlDateTimeIntl,
          providedIn: "root"
        });

        OwlDateTimeIntl.ɵfac = function OwlDateTimeIntl_Factory(t) {
          return new (t || OwlDateTimeIntl)();
        };

        OwlDateTimeIntl.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
          token: OwlDateTimeIntl,
          factory: function factory(t) {
            return OwlDateTimeIntl.ɵfac(t);
          },
          providedIn: 'root'
        });

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](OwlDateTimeIntl, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
            args: [{
              providedIn: 'root'
            }]
          }], function () {
            return [];
          }, null);
        })();

        return OwlDateTimeIntl;
      }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci1pbnRsLnNlcnZpY2UuanMiLCJzb3VyY2VzIjpbImRhdGUtdGltZS1waWNrZXItaW50bC5zZXJ2aWNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3lMQWlDeUw7Ozs7OztnREFHaksiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyBpMCBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xudmFyIE93bERhdGVUaW1lSW50bCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT3dsRGF0ZVRpbWVJbnRsKCkge1xuICAgICAgICB0aGlzLmNoYW5nZXMgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICB0aGlzLnVwU2Vjb25kTGFiZWwgPSAnQWRkIGEgc2Vjb25kJztcbiAgICAgICAgdGhpcy5kb3duU2Vjb25kTGFiZWwgPSAnTWludXMgYSBzZWNvbmQnO1xuICAgICAgICB0aGlzLnVwTWludXRlTGFiZWwgPSAnQWRkIGEgbWludXRlJztcbiAgICAgICAgdGhpcy5kb3duTWludXRlTGFiZWwgPSAnTWludXMgYSBtaW51dGUnO1xuICAgICAgICB0aGlzLnVwSG91ckxhYmVsID0gJ0FkZCBhIGhvdXInO1xuICAgICAgICB0aGlzLmRvd25Ib3VyTGFiZWwgPSAnTWludXMgYSBob3VyJztcbiAgICAgICAgdGhpcy5wcmV2TW9udGhMYWJlbCA9ICdQcmV2aW91cyBtb250aCc7XG4gICAgICAgIHRoaXMubmV4dE1vbnRoTGFiZWwgPSAnTmV4dCBtb250aCc7XG4gICAgICAgIHRoaXMucHJldlllYXJMYWJlbCA9ICdQcmV2aW91cyB5ZWFyJztcbiAgICAgICAgdGhpcy5uZXh0WWVhckxhYmVsID0gJ05leHQgeWVhcic7XG4gICAgICAgIHRoaXMucHJldk11bHRpWWVhckxhYmVsID0gJ1ByZXZpb3VzIDIxIHllYXJzJztcbiAgICAgICAgdGhpcy5uZXh0TXVsdGlZZWFyTGFiZWwgPSAnTmV4dCAyMSB5ZWFycyc7XG4gICAgICAgIHRoaXMuc3dpdGNoVG9Nb250aFZpZXdMYWJlbCA9ICdDaGFuZ2UgdG8gbW9udGggdmlldyc7XG4gICAgICAgIHRoaXMuc3dpdGNoVG9NdWx0aVllYXJWaWV3TGFiZWwgPSAnQ2hvb3NlIG1vbnRoIGFuZCB5ZWFyJztcbiAgICAgICAgdGhpcy5jYW5jZWxCdG5MYWJlbCA9ICdDYW5jZWwnO1xuICAgICAgICB0aGlzLnNldEJ0bkxhYmVsID0gJ1NldCc7XG4gICAgICAgIHRoaXMucmFuZ2VGcm9tTGFiZWwgPSAnRnJvbSc7XG4gICAgICAgIHRoaXMucmFuZ2VUb0xhYmVsID0gJ1RvJztcbiAgICAgICAgdGhpcy5ob3VyMTJBTUxhYmVsID0gJ0FNJztcbiAgICAgICAgdGhpcy5ob3VyMTJQTUxhYmVsID0gJ1BNJztcbiAgICB9XG4gICAgT3dsRGF0ZVRpbWVJbnRsLm5nSW5qZWN0YWJsZURlZiA9IGkwLmRlZmluZUluamVjdGFibGUoeyBmYWN0b3J5OiBmdW5jdGlvbiBPd2xEYXRlVGltZUludGxfRmFjdG9yeSgpIHsgcmV0dXJuIG5ldyBPd2xEYXRlVGltZUludGwoKTsgfSwgdG9rZW46IE93bERhdGVUaW1lSW50bCwgcHJvdmlkZWRJbjogXCJyb290XCIgfSk7XG4gICAgT3dsRGF0ZVRpbWVJbnRsID0gX19kZWNvcmF0ZShbXG4gICAgICAgIEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbiAgICBdLCBPd2xEYXRlVGltZUludGwpO1xuICAgIHJldHVybiBPd2xEYXRlVGltZUludGw7XG59KCkpO1xuZXhwb3J0IHsgT3dsRGF0ZVRpbWVJbnRsIH07XG4iXX0=

      /***/

    },

    /***/
    "MtjB":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/retryWhen.js ***!
      \********************************************************************/

    /*! exports provided: retryWhen */

    /***/
    function MtjB(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "retryWhen", function () {
        return retryWhen;
      });
      /* harmony import */


      var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subject */
      "XNiG");
      /* harmony import */


      var _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../innerSubscribe */
      "zx2A");

      function retryWhen(notifier) {
        return function (source) {
          return source.lift(new RetryWhenOperator(notifier, source));
        };
      }

      var RetryWhenOperator = /*#__PURE__*/function () {
        function RetryWhenOperator(notifier, source) {
          _classCallCheck2(this, RetryWhenOperator);

          this.notifier = notifier;
          this.source = source;
        }

        _createClass2(RetryWhenOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new RetryWhenSubscriber(subscriber, this.notifier, this.source));
          }
        }]);

        return RetryWhenOperator;
      }();

      var RetryWhenSubscriber = /*#__PURE__*/function (_innerSubscribe__WEBP10) {
        _inherits2(RetryWhenSubscriber, _innerSubscribe__WEBP10);

        var _super239 = _createSuper(RetryWhenSubscriber);

        function RetryWhenSubscriber(destination, notifier, source) {
          var _this562;

          _classCallCheck2(this, RetryWhenSubscriber);

          _this562 = _super239.call(this, destination);
          _this562.notifier = notifier;
          _this562.source = source;
          return _this562;
        }

        _createClass2(RetryWhenSubscriber, [{
          key: "error",
          value: function error(err) {
            if (!this.isStopped) {
              var errors = this.errors;
              var retries = this.retries;
              var retriesSubscription = this.retriesSubscription;

              if (!retries) {
                errors = new _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"]();

                try {
                  var notifier = this.notifier;
                  retries = notifier(errors);
                } catch (e) {
                  return _get2(_getPrototypeOf2(RetryWhenSubscriber.prototype), "error", this).call(this, e);
                }

                retriesSubscription = Object(_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__["innerSubscribe"])(retries, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__["SimpleInnerSubscriber"](this));
              } else {
                this.errors = undefined;
                this.retriesSubscription = undefined;
              }

              this._unsubscribeAndRecycle();

              this.errors = errors;
              this.retries = retries;
              this.retriesSubscription = retriesSubscription;
              errors.next(err);
            }
          }
        }, {
          key: "_unsubscribe",
          value: function _unsubscribe() {
            var errors = this.errors,
                retriesSubscription = this.retriesSubscription;

            if (errors) {
              errors.unsubscribe();
              this.errors = undefined;
            }

            if (retriesSubscription) {
              retriesSubscription.unsubscribe();
              this.retriesSubscription = undefined;
            }

            this.retries = undefined;
          }
        }, {
          key: "notifyNext",
          value: function notifyNext() {
            var _unsubscribe = this._unsubscribe;
            this._unsubscribe = null;

            this._unsubscribeAndRecycle();

            this._unsubscribe = _unsubscribe;
            this.source.subscribe(this);
          }
        }]);

        return RetryWhenSubscriber;
      }(_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__["SimpleOuterSubscriber"]); //# sourceMappingURL=retryWhen.js.map

      /***/

    },

    /***/
    "N/qJ":
    /*!**********************************************************************!*\
      !*** ./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/accordion.js ***!
      \**********************************************************************/

    /*! exports provided: CdkAccordion, CdkAccordionItem, CdkAccordionModule, ɵangular_material_src_cdk_accordion_accordion_a */

    /***/
    function NQJ(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkAccordion", function () {
        return CdkAccordion;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkAccordionItem", function () {
        return CdkAccordionItem;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkAccordionModule", function () {
        return CdkAccordionModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_material_src_cdk_accordion_accordion_a", function () {
        return CDK_ACCORDION;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/cdk/collections */
      "0EQZ");
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Used to generate unique ID for each accordion. */


      var nextId = 0;
      /**
       * Injection token that can be used to reference instances of `CdkAccordion`. It serves
       * as alternative token to the actual `CdkAccordion` class which could cause unnecessary
       * retention of the class and its directive metadata.
       */

      var CDK_ACCORDION = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('CdkAccordion');
      /**
       * Directive whose purpose is to manage the expanded state of CdkAccordionItem children.
       */

      var CdkAccordion = /*#__PURE__*/function () {
        function CdkAccordion() {
          _classCallCheck2(this, CdkAccordion);

          /** Emits when the state of the accordion changes */
          this._stateChanges = new rxjs__WEBPACK_IMPORTED_MODULE_3__["Subject"]();
          /** Stream that emits true/false when openAll/closeAll is triggered. */

          this._openCloseAllActions = new rxjs__WEBPACK_IMPORTED_MODULE_3__["Subject"]();
          /** A readonly id value to use for unique selection coordination. */

          this.id = "cdk-accordion-".concat(nextId++);
          this._multi = false;
        }
        /** Whether the accordion should allow multiple expanded accordion items simultaneously. */


        _createClass2(CdkAccordion, [{
          key: "multi",
          get: function get() {
            return this._multi;
          },
          set: function set(multi) {
            this._multi = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceBooleanProperty"])(multi);
          }
          /** Opens all enabled accordion items in an accordion where multi is enabled. */

        }, {
          key: "openAll",
          value: function openAll() {
            this._openCloseAll(true);
          }
          /** Closes all enabled accordion items in an accordion where multi is enabled. */

        }, {
          key: "closeAll",
          value: function closeAll() {
            this._openCloseAll(false);
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            this._stateChanges.next(changes);
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._stateChanges.complete();
          }
        }, {
          key: "_openCloseAll",
          value: function _openCloseAll(expanded) {
            if (this.multi) {
              this._openCloseAllActions.next(expanded);
            }
          }
        }]);

        return CdkAccordion;
      }();

      CdkAccordion.ɵfac = function CdkAccordion_Factory(t) {
        return new (t || CdkAccordion)();
      };

      CdkAccordion.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: CdkAccordion,
        selectors: [["cdk-accordion"], ["", "cdkAccordion", ""]],
        inputs: {
          multi: "multi"
        },
        exportAs: ["cdkAccordion"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: CDK_ACCORDION,
          useExisting: CdkAccordion
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
      });
      CdkAccordion.propDecorators = {
        multi: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CdkAccordion, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'cdk-accordion, [cdkAccordion]',
            exportAs: 'cdkAccordion',
            providers: [{
              provide: CDK_ACCORDION,
              useExisting: CdkAccordion
            }]
          }]
        }], function () {
          return [];
        }, {
          multi: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Used to generate unique ID for each accordion item. */


      var nextId$1 = 0;
      var ɵ0 = undefined;
      /**
       * An basic directive expected to be extended and decorated as a component.  Sets up all
       * events and attributes needed to be managed by a CdkAccordion parent.
       */

      var CdkAccordionItem = /*#__PURE__*/function () {
        function CdkAccordionItem(accordion, _changeDetectorRef, _expansionDispatcher) {
          var _this563 = this;

          _classCallCheck2(this, CdkAccordionItem);

          this.accordion = accordion;
          this._changeDetectorRef = _changeDetectorRef;
          this._expansionDispatcher = _expansionDispatcher;
          /** Subscription to openAll/closeAll events. */

          this._openCloseAllSubscription = rxjs__WEBPACK_IMPORTED_MODULE_3__["Subscription"].EMPTY;
          /** Event emitted every time the AccordionItem is closed. */

          this.closed = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /** Event emitted every time the AccordionItem is opened. */

          this.opened = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /** Event emitted when the AccordionItem is destroyed. */

          this.destroyed = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * Emits whenever the expanded state of the accordion changes.
           * Primarily used to facilitate two-way binding.
           * @docs-private
           */

          this.expandedChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /** The unique AccordionItem id. */

          this.id = "cdk-accordion-child-".concat(nextId$1++);
          this._expanded = false;
          this._disabled = false;
          /** Unregister function for _expansionDispatcher. */

          this._removeUniqueSelectionListener = function () {};

          this._removeUniqueSelectionListener = _expansionDispatcher.listen(function (id, accordionId) {
            if (_this563.accordion && !_this563.accordion.multi && _this563.accordion.id === accordionId && _this563.id !== id) {
              _this563.expanded = false;
            }
          }); // When an accordion item is hosted in an accordion, subscribe to open/close events.

          if (this.accordion) {
            this._openCloseAllSubscription = this._subscribeToOpenCloseAllActions();
          }
        }
        /** Whether the AccordionItem is expanded. */


        _createClass2(CdkAccordionItem, [{
          key: "expanded",
          get: function get() {
            return this._expanded;
          },
          set: function set(expanded) {
            expanded = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceBooleanProperty"])(expanded); // Only emit events and update the internal value if the value changes.

            if (this._expanded !== expanded) {
              this._expanded = expanded;
              this.expandedChange.emit(expanded);

              if (expanded) {
                this.opened.emit();
                /**
                 * In the unique selection dispatcher, the id parameter is the id of the CdkAccordionItem,
                 * the name value is the id of the accordion.
                 */

                var accordionId = this.accordion ? this.accordion.id : this.id;

                this._expansionDispatcher.notify(this.id, accordionId);
              } else {
                this.closed.emit();
              } // Ensures that the animation will run when the value is set outside of an `@Input`.
              // This includes cases like the open, close and toggle methods.


              this._changeDetectorRef.markForCheck();
            }
          }
          /** Whether the AccordionItem is disabled. */

        }, {
          key: "disabled",
          get: function get() {
            return this._disabled;
          },
          set: function set(disabled) {
            this._disabled = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceBooleanProperty"])(disabled);
          }
          /** Emits an event for the accordion item being destroyed. */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.opened.complete();
            this.closed.complete();
            this.destroyed.emit();
            this.destroyed.complete();

            this._removeUniqueSelectionListener();

            this._openCloseAllSubscription.unsubscribe();
          }
          /** Toggles the expanded state of the accordion item. */

        }, {
          key: "toggle",
          value: function toggle() {
            if (!this.disabled) {
              this.expanded = !this.expanded;
            }
          }
          /** Sets the expanded state of the accordion item to false. */

        }, {
          key: "close",
          value: function close() {
            if (!this.disabled) {
              this.expanded = false;
            }
          }
          /** Sets the expanded state of the accordion item to true. */

        }, {
          key: "open",
          value: function open() {
            if (!this.disabled) {
              this.expanded = true;
            }
          }
        }, {
          key: "_subscribeToOpenCloseAllActions",
          value: function _subscribeToOpenCloseAllActions() {
            var _this564 = this;

            return this.accordion._openCloseAllActions.subscribe(function (expanded) {
              // Only change expanded state if item is enabled
              if (!_this564.disabled) {
                _this564.expanded = expanded;
              }
            });
          }
        }]);

        return CdkAccordionItem;
      }();

      CdkAccordionItem.ɵfac = function CdkAccordionItem_Factory(t) {
        return new (t || CdkAccordionItem)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](CDK_ACCORDION, 12), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_cdk_collections__WEBPACK_IMPORTED_MODULE_1__["UniqueSelectionDispatcher"]));
      };

      CdkAccordionItem.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: CdkAccordionItem,
        selectors: [["cdk-accordion-item"], ["", "cdkAccordionItem", ""]],
        inputs: {
          expanded: "expanded",
          disabled: "disabled"
        },
        outputs: {
          closed: "closed",
          opened: "opened",
          destroyed: "destroyed",
          expandedChange: "expandedChange"
        },
        exportAs: ["cdkAccordionItem"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([// Provide `CDK_ACCORDION` as undefined to prevent nested accordion items from
        // registering to the same accordion.
        {
          provide: CDK_ACCORDION,
          useValue: ɵ0
        }])]
      });

      CdkAccordionItem.ctorParameters = function () {
        return [{
          type: CdkAccordion,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [CDK_ACCORDION]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }, {
          type: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_1__["UniqueSelectionDispatcher"]
        }];
      };

      CdkAccordionItem.propDecorators = {
        closed: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        opened: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        destroyed: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        expandedChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        expanded: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        disabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CdkAccordionItem, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'cdk-accordion-item, [cdkAccordionItem]',
            exportAs: 'cdkAccordionItem',
            providers: [// Provide `CDK_ACCORDION` as undefined to prevent nested accordion items from
            // registering to the same accordion.
            {
              provide: CDK_ACCORDION,
              useValue: ɵ0
            }]
          }]
        }], function () {
          return [{
            type: CdkAccordion,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [CDK_ACCORDION]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }, {
            type: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_1__["UniqueSelectionDispatcher"]
          }];
        }, {
          closed: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          opened: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          destroyed: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          expandedChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          expanded: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          disabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var CdkAccordionModule = function CdkAccordionModule() {
        _classCallCheck2(this, CdkAccordionModule);
      };

      CdkAccordionModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: CdkAccordionModule
      });
      CdkAccordionModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function CdkAccordionModule_Factory(t) {
          return new (t || CdkAccordionModule)();
        }
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](CdkAccordionModule, {
          declarations: [CdkAccordion, CdkAccordionItem],
          exports: [CdkAccordion, CdkAccordionItem]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CdkAccordionModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            exports: [CdkAccordion, CdkAccordionItem],
            declarations: [CdkAccordion, CdkAccordionItem]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=accordion.js.map

      /***/

    },

    /***/
    "N2+Z":
    /*!************************************************!*\
      !*** ./node_modules/aws-sdk/lib/signers/v3.js ***!
      \************************************************/

    /*! no static exports found */

    /***/
    function N2Z(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ../core */
      "QsWE");

      var inherit = AWS.util.inherit;
      /**
       * @api private
       */

      AWS.Signers.V3 = inherit(AWS.Signers.RequestSigner, {
        addAuthorization: function addAuthorization(credentials, date) {
          var datetime = AWS.util.date.rfc822(date);
          this.request.headers['X-Amz-Date'] = datetime;

          if (credentials.sessionToken) {
            this.request.headers['x-amz-security-token'] = credentials.sessionToken;
          }

          this.request.headers['X-Amzn-Authorization'] = this.authorization(credentials, datetime);
        },
        authorization: function authorization(credentials) {
          return 'AWS3 ' + 'AWSAccessKeyId=' + credentials.accessKeyId + ',' + 'Algorithm=HmacSHA256,' + 'SignedHeaders=' + this.signedHeaders() + ',' + 'Signature=' + this.signature(credentials);
        },
        signedHeaders: function signedHeaders() {
          var headers = [];
          AWS.util.arrayEach(this.headersToSign(), function iterator(h) {
            headers.push(h.toLowerCase());
          });
          return headers.sort().join(';');
        },
        canonicalHeaders: function canonicalHeaders() {
          var headers = this.request.headers;
          var parts = [];
          AWS.util.arrayEach(this.headersToSign(), function iterator(h) {
            parts.push(h.toLowerCase().trim() + ':' + String(headers[h]).trim());
          });
          return parts.sort().join('\n') + '\n';
        },
        headersToSign: function headersToSign() {
          var headers = [];
          AWS.util.each(this.request.headers, function iterator(k) {
            if (k === 'Host' || k === 'Content-Encoding' || k.match(/^X-Amz/i)) {
              headers.push(k);
            }
          });
          return headers;
        },
        signature: function signature(credentials) {
          return AWS.util.crypto.hmac(credentials.secretAccessKey, this.stringToSign(), 'base64');
        },
        stringToSign: function stringToSign() {
          var parts = [];
          parts.push(this.request.method);
          parts.push('/');
          parts.push('');
          parts.push(this.canonicalHeaders());
          parts.push(this.request.body);
          return AWS.util.crypto.sha256(parts.join('\n'));
        }
      });
      /**
       * @api private
       */

      module.exports = AWS.Signers.V3;
      /***/
    },

    /***/
    "NFeN":
    /*!**********************************************************************!*\
      !*** ./node_modules/@angular/material/__ivy_ngcc__/fesm2015/icon.js ***!
      \**********************************************************************/

    /*! exports provided: ICON_REGISTRY_PROVIDER, ICON_REGISTRY_PROVIDER_FACTORY, MAT_ICON_LOCATION, MAT_ICON_LOCATION_FACTORY, MatIcon, MatIconModule, MatIconRegistry, getMatIconFailedToSanitizeLiteralError, getMatIconFailedToSanitizeUrlError, getMatIconNameNotFoundError, getMatIconNoHttpProviderError, ɵ0 */

    /***/
    function NFeN(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ICON_REGISTRY_PROVIDER", function () {
        return ICON_REGISTRY_PROVIDER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ICON_REGISTRY_PROVIDER_FACTORY", function () {
        return ICON_REGISTRY_PROVIDER_FACTORY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_ICON_LOCATION", function () {
        return MAT_ICON_LOCATION;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_ICON_LOCATION_FACTORY", function () {
        return MAT_ICON_LOCATION_FACTORY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatIcon", function () {
        return MatIcon;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatIconModule", function () {
        return MatIconModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatIconRegistry", function () {
        return MatIconRegistry;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getMatIconFailedToSanitizeLiteralError", function () {
        return getMatIconFailedToSanitizeLiteralError;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getMatIconFailedToSanitizeUrlError", function () {
        return getMatIconFailedToSanitizeUrlError;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getMatIconNameNotFoundError", function () {
        return getMatIconNameNotFoundError;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getMatIconNoHttpProviderError", function () {
        return getMatIconNoHttpProviderError;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵ0", function () {
        return ɵ0;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_material_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/material/core */
      "FKr1");
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var _angular_common_http__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! @angular/common/http */
      "tk/3");
      /* harmony import */


      var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! @angular/platform-browser */
      "jhN1");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Returns an exception to be thrown in the case when attempting to
       * load an icon with a name that cannot be found.
       * @docs-private
       */


      var _c0 = ["*"];

      function getMatIconNameNotFoundError(iconName) {
        return Error("Unable to find icon with the name \"".concat(iconName, "\""));
      }
      /**
       * Returns an exception to be thrown when the consumer attempts to use
       * `<mat-icon>` without including @angular/common/http.
       * @docs-private
       */


      function getMatIconNoHttpProviderError() {
        return Error('Could not find HttpClient provider for use with Angular Material icons. ' + 'Please include the HttpClientModule from @angular/common/http in your ' + 'app imports.');
      }
      /**
       * Returns an exception to be thrown when a URL couldn't be sanitized.
       * @param url URL that was attempted to be sanitized.
       * @docs-private
       */


      function getMatIconFailedToSanitizeUrlError(url) {
        return Error("The URL provided to MatIconRegistry was not trusted as a resource URL " + "via Angular's DomSanitizer. Attempted URL was \"".concat(url, "\"."));
      }
      /**
       * Returns an exception to be thrown when a HTML string couldn't be sanitized.
       * @param literal HTML that was attempted to be sanitized.
       * @docs-private
       */


      function getMatIconFailedToSanitizeLiteralError(literal) {
        return Error("The literal provided to MatIconRegistry was not trusted as safe HTML by " + "Angular's DomSanitizer. Attempted literal was \"".concat(literal, "\"."));
      }
      /**
       * Configuration for an icon, including the URL and possibly the cached SVG element.
       * @docs-private
       */


      var SvgIconConfig = function SvgIconConfig(url, svgText, options) {
        _classCallCheck2(this, SvgIconConfig);

        this.url = url;
        this.svgText = svgText;
        this.options = options;
      };
      /**
       * Service to register and display icons used by the `<mat-icon>` component.
       * - Registers icon URLs by namespace and name.
       * - Registers icon set URLs by namespace.
       * - Registers aliases for CSS classes, for use with icon fonts.
       * - Loads icons from URLs and extracts individual icons from icon sets.
       */


      var MatIconRegistry = /*#__PURE__*/function () {
        function MatIconRegistry(_httpClient, _sanitizer, document, _errorHandler) {
          _classCallCheck2(this, MatIconRegistry);

          this._httpClient = _httpClient;
          this._sanitizer = _sanitizer;
          this._errorHandler = _errorHandler;
          /**
           * URLs and cached SVG elements for individual icons. Keys are of the format "[namespace]:[icon]".
           */

          this._svgIconConfigs = new Map();
          /**
           * SvgIconConfig objects and cached SVG elements for icon sets, keyed by namespace.
           * Multiple icon sets can be registered under the same namespace.
           */

          this._iconSetConfigs = new Map();
          /** Cache for icons loaded by direct URLs. */

          this._cachedIconsByUrl = new Map();
          /** In-progress icon fetches. Used to coalesce multiple requests to the same URL. */

          this._inProgressUrlFetches = new Map();
          /** Map from font identifiers to their CSS class names. Used for icon fonts. */

          this._fontCssClassesByAlias = new Map();
          /** Registered icon resolver functions. */

          this._resolvers = [];
          /**
           * The CSS class to apply when an `<mat-icon>` component has no icon name, url, or font specified.
           * The default 'material-icons' value assumes that the material icon font has been loaded as
           * described at http://google.github.io/material-design-icons/#icon-font-for-the-web
           */

          this._defaultFontSetClass = 'material-icons';
          this._document = document;
        }
        /**
         * Registers an icon by URL in the default namespace.
         * @param iconName Name under which the icon should be registered.
         * @param url
         */


        _createClass2(MatIconRegistry, [{
          key: "addSvgIcon",
          value: function addSvgIcon(iconName, url, options) {
            return this.addSvgIconInNamespace('', iconName, url, options);
          }
          /**
           * Registers an icon using an HTML string in the default namespace.
           * @param iconName Name under which the icon should be registered.
           * @param literal SVG source of the icon.
           */

        }, {
          key: "addSvgIconLiteral",
          value: function addSvgIconLiteral(iconName, literal, options) {
            return this.addSvgIconLiteralInNamespace('', iconName, literal, options);
          }
          /**
           * Registers an icon by URL in the specified namespace.
           * @param namespace Namespace in which the icon should be registered.
           * @param iconName Name under which the icon should be registered.
           * @param url
           */

        }, {
          key: "addSvgIconInNamespace",
          value: function addSvgIconInNamespace(namespace, iconName, url, options) {
            return this._addSvgIconConfig(namespace, iconName, new SvgIconConfig(url, null, options));
          }
          /**
           * Registers an icon resolver function with the registry. The function will be invoked with the
           * name and namespace of an icon when the registry tries to resolve the URL from which to fetch
           * the icon. The resolver is expected to return a `SafeResourceUrl` that points to the icon,
           * an object with the icon URL and icon options, or `null` if the icon is not supported. Resolvers
           * will be invoked in the order in which they have been registered.
           * @param resolver Resolver function to be registered.
           */

        }, {
          key: "addSvgIconResolver",
          value: function addSvgIconResolver(resolver) {
            this._resolvers.push(resolver);

            return this;
          }
          /**
           * Registers an icon using an HTML string in the specified namespace.
           * @param namespace Namespace in which the icon should be registered.
           * @param iconName Name under which the icon should be registered.
           * @param literal SVG source of the icon.
           */

        }, {
          key: "addSvgIconLiteralInNamespace",
          value: function addSvgIconLiteralInNamespace(namespace, iconName, literal, options) {
            var cleanLiteral = this._sanitizer.sanitize(_angular_core__WEBPACK_IMPORTED_MODULE_0__["SecurityContext"].HTML, literal); // TODO: add an ngDevMode check


            if (!cleanLiteral) {
              throw getMatIconFailedToSanitizeLiteralError(literal);
            }

            return this._addSvgIconConfig(namespace, iconName, new SvgIconConfig('', cleanLiteral, options));
          }
          /**
           * Registers an icon set by URL in the default namespace.
           * @param url
           */

        }, {
          key: "addSvgIconSet",
          value: function addSvgIconSet(url, options) {
            return this.addSvgIconSetInNamespace('', url, options);
          }
          /**
           * Registers an icon set using an HTML string in the default namespace.
           * @param literal SVG source of the icon set.
           */

        }, {
          key: "addSvgIconSetLiteral",
          value: function addSvgIconSetLiteral(literal, options) {
            return this.addSvgIconSetLiteralInNamespace('', literal, options);
          }
          /**
           * Registers an icon set by URL in the specified namespace.
           * @param namespace Namespace in which to register the icon set.
           * @param url
           */

        }, {
          key: "addSvgIconSetInNamespace",
          value: function addSvgIconSetInNamespace(namespace, url, options) {
            return this._addSvgIconSetConfig(namespace, new SvgIconConfig(url, null, options));
          }
          /**
           * Registers an icon set using an HTML string in the specified namespace.
           * @param namespace Namespace in which to register the icon set.
           * @param literal SVG source of the icon set.
           */

        }, {
          key: "addSvgIconSetLiteralInNamespace",
          value: function addSvgIconSetLiteralInNamespace(namespace, literal, options) {
            var cleanLiteral = this._sanitizer.sanitize(_angular_core__WEBPACK_IMPORTED_MODULE_0__["SecurityContext"].HTML, literal);

            if (!cleanLiteral) {
              throw getMatIconFailedToSanitizeLiteralError(literal);
            }

            return this._addSvgIconSetConfig(namespace, new SvgIconConfig('', cleanLiteral, options));
          }
          /**
           * Defines an alias for a CSS class name to be used for icon fonts. Creating an matIcon
           * component with the alias as the fontSet input will cause the class name to be applied
           * to the `<mat-icon>` element.
           *
           * @param alias Alias for the font.
           * @param className Class name override to be used instead of the alias.
           */

        }, {
          key: "registerFontClassAlias",
          value: function registerFontClassAlias(alias) {
            var className = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : alias;

            this._fontCssClassesByAlias.set(alias, className);

            return this;
          }
          /**
           * Returns the CSS class name associated with the alias by a previous call to
           * registerFontClassAlias. If no CSS class has been associated, returns the alias unmodified.
           */

        }, {
          key: "classNameForFontAlias",
          value: function classNameForFontAlias(alias) {
            return this._fontCssClassesByAlias.get(alias) || alias;
          }
          /**
           * Sets the CSS class name to be used for icon fonts when an `<mat-icon>` component does not
           * have a fontSet input value, and is not loading an icon by name or URL.
           *
           * @param className
           */

        }, {
          key: "setDefaultFontSetClass",
          value: function setDefaultFontSetClass(className) {
            this._defaultFontSetClass = className;
            return this;
          }
          /**
           * Returns the CSS class name to be used for icon fonts when an `<mat-icon>` component does not
           * have a fontSet input value, and is not loading an icon by name or URL.
           */

        }, {
          key: "getDefaultFontSetClass",
          value: function getDefaultFontSetClass() {
            return this._defaultFontSetClass;
          }
          /**
           * Returns an Observable that produces the icon (as an `<svg>` DOM element) from the given URL.
           * The response from the URL may be cached so this will not always cause an HTTP request, but
           * the produced element will always be a new copy of the originally fetched icon. (That is,
           * it will not contain any modifications made to elements previously returned).
           *
           * @param safeUrl URL from which to fetch the SVG icon.
           */

        }, {
          key: "getSvgIconFromUrl",
          value: function getSvgIconFromUrl(safeUrl) {
            var _this565 = this;

            var url = this._sanitizer.sanitize(_angular_core__WEBPACK_IMPORTED_MODULE_0__["SecurityContext"].RESOURCE_URL, safeUrl);

            if (!url) {
              throw getMatIconFailedToSanitizeUrlError(safeUrl);
            }

            var cachedIcon = this._cachedIconsByUrl.get(url);

            if (cachedIcon) {
              return Object(rxjs__WEBPACK_IMPORTED_MODULE_4__["of"])(cloneSvg(cachedIcon));
            }

            return this._loadSvgIconFromConfig(new SvgIconConfig(safeUrl, null)).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["tap"])(function (svg) {
              return _this565._cachedIconsByUrl.set(url, svg);
            }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["map"])(function (svg) {
              return cloneSvg(svg);
            }));
          }
          /**
           * Returns an Observable that produces the icon (as an `<svg>` DOM element) with the given name
           * and namespace. The icon must have been previously registered with addIcon or addIconSet;
           * if not, the Observable will throw an error.
           *
           * @param name Name of the icon to be retrieved.
           * @param namespace Namespace in which to look for the icon.
           */

        }, {
          key: "getNamedSvgIcon",
          value: function getNamedSvgIcon(name) {
            var namespace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
            var key = iconKey(namespace, name);

            var config = this._svgIconConfigs.get(key); // Return (copy of) cached icon if possible.


            if (config) {
              return this._getSvgFromConfig(config);
            } // Otherwise try to resolve the config from one of the resolver functions.


            config = this._getIconConfigFromResolvers(namespace, name);

            if (config) {
              this._svgIconConfigs.set(key, config);

              return this._getSvgFromConfig(config);
            } // See if we have any icon sets registered for the namespace.


            var iconSetConfigs = this._iconSetConfigs.get(namespace);

            if (iconSetConfigs) {
              return this._getSvgFromIconSetConfigs(name, iconSetConfigs);
            }

            return Object(rxjs__WEBPACK_IMPORTED_MODULE_4__["throwError"])(getMatIconNameNotFoundError(key));
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._resolvers = [];

            this._svgIconConfigs.clear();

            this._iconSetConfigs.clear();

            this._cachedIconsByUrl.clear();
          }
          /**
           * Returns the cached icon for a SvgIconConfig if available, or fetches it from its URL if not.
           */

        }, {
          key: "_getSvgFromConfig",
          value: function _getSvgFromConfig(config) {
            if (config.svgText) {
              // We already have the SVG element for this icon, return a copy.
              return Object(rxjs__WEBPACK_IMPORTED_MODULE_4__["of"])(cloneSvg(this._svgElementFromConfig(config)));
            } else {
              // Fetch the icon from the config's URL, cache it, and return a copy.
              return this._loadSvgIconFromConfig(config).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["map"])(function (svg) {
                return cloneSvg(svg);
              }));
            }
          }
          /**
           * Attempts to find an icon with the specified name in any of the SVG icon sets.
           * First searches the available cached icons for a nested element with a matching name, and
           * if found copies the element to a new `<svg>` element. If not found, fetches all icon sets
           * that have not been cached, and searches again after all fetches are completed.
           * The returned Observable produces the SVG element if possible, and throws
           * an error if no icon with the specified name can be found.
           */

        }, {
          key: "_getSvgFromIconSetConfigs",
          value: function _getSvgFromIconSetConfigs(name, iconSetConfigs) {
            var _this566 = this;

            // For all the icon set SVG elements we've fetched, see if any contain an icon with the
            // requested name.
            var namedIcon = this._extractIconWithNameFromAnySet(name, iconSetConfigs);

            if (namedIcon) {
              // We could cache namedIcon in _svgIconConfigs, but since we have to make a copy every
              // time anyway, there's probably not much advantage compared to just always extracting
              // it from the icon set.
              return Object(rxjs__WEBPACK_IMPORTED_MODULE_4__["of"])(namedIcon);
            } // Not found in any cached icon sets. If there are icon sets with URLs that we haven't
            // fetched, fetch them now and look for iconName in the results.


            var iconSetFetchRequests = iconSetConfigs.filter(function (iconSetConfig) {
              return !iconSetConfig.svgText;
            }).map(function (iconSetConfig) {
              return _this566._loadSvgIconSetFromConfig(iconSetConfig).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["catchError"])(function (err) {
                var url = _this566._sanitizer.sanitize(_angular_core__WEBPACK_IMPORTED_MODULE_0__["SecurityContext"].RESOURCE_URL, iconSetConfig.url); // Swallow errors fetching individual URLs so the
                // combined Observable won't necessarily fail.


                var errorMessage = "Loading icon set URL: ".concat(url, " failed: ").concat(err.message);

                _this566._errorHandler.handleError(new Error(errorMessage));

                return Object(rxjs__WEBPACK_IMPORTED_MODULE_4__["of"])(null);
              }));
            }); // Fetch all the icon set URLs. When the requests complete, every IconSet should have a
            // cached SVG element (unless the request failed), and we can check again for the icon.

            return Object(rxjs__WEBPACK_IMPORTED_MODULE_4__["forkJoin"])(iconSetFetchRequests).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["map"])(function () {
              var foundIcon = _this566._extractIconWithNameFromAnySet(name, iconSetConfigs); // TODO: add an ngDevMode check


              if (!foundIcon) {
                throw getMatIconNameNotFoundError(name);
              }

              return foundIcon;
            }));
          }
          /**
           * Searches the cached SVG elements for the given icon sets for a nested icon element whose "id"
           * tag matches the specified name. If found, copies the nested element to a new SVG element and
           * returns it. Returns null if no matching element is found.
           */

        }, {
          key: "_extractIconWithNameFromAnySet",
          value: function _extractIconWithNameFromAnySet(iconName, iconSetConfigs) {
            // Iterate backwards, so icon sets added later have precedence.
            for (var i = iconSetConfigs.length - 1; i >= 0; i--) {
              var config = iconSetConfigs[i]; // Parsing the icon set's text into an SVG element can be expensive. We can avoid some of
              // the parsing by doing a quick check using `indexOf` to see if there's any chance for the
              // icon to be in the set. This won't be 100% accurate, but it should help us avoid at least
              // some of the parsing.

              if (config.svgText && config.svgText.indexOf(iconName) > -1) {
                var svg = this._svgElementFromConfig(config);

                var foundIcon = this._extractSvgIconFromSet(svg, iconName, config.options);

                if (foundIcon) {
                  return foundIcon;
                }
              }
            }

            return null;
          }
          /**
           * Loads the content of the icon URL specified in the SvgIconConfig and creates an SVG element
           * from it.
           */

        }, {
          key: "_loadSvgIconFromConfig",
          value: function _loadSvgIconFromConfig(config) {
            var _this567 = this;

            return this._fetchIcon(config).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["tap"])(function (svgText) {
              return config.svgText = svgText;
            }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["map"])(function () {
              return _this567._svgElementFromConfig(config);
            }));
          }
          /**
           * Loads the content of the icon set URL specified in the
           * SvgIconConfig and attaches it to the config.
           */

        }, {
          key: "_loadSvgIconSetFromConfig",
          value: function _loadSvgIconSetFromConfig(config) {
            if (config.svgText) {
              return Object(rxjs__WEBPACK_IMPORTED_MODULE_4__["of"])(null);
            }

            return this._fetchIcon(config).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["tap"])(function (svgText) {
              return config.svgText = svgText;
            }));
          }
          /**
           * Searches the cached element of the given SvgIconConfig for a nested icon element whose "id"
           * tag matches the specified name. If found, copies the nested element to a new SVG element and
           * returns it. Returns null if no matching element is found.
           */

        }, {
          key: "_extractSvgIconFromSet",
          value: function _extractSvgIconFromSet(iconSet, iconName, options) {
            // Use the `id="iconName"` syntax in order to escape special
            // characters in the ID (versus using the #iconName syntax).
            var iconSource = iconSet.querySelector("[id=\"".concat(iconName, "\"]"));

            if (!iconSource) {
              return null;
            } // Clone the element and remove the ID to prevent multiple elements from being added
            // to the page with the same ID.


            var iconElement = iconSource.cloneNode(true);
            iconElement.removeAttribute('id'); // If the icon node is itself an <svg> node, clone and return it directly. If not, set it as
            // the content of a new <svg> node.

            if (iconElement.nodeName.toLowerCase() === 'svg') {
              return this._setSvgAttributes(iconElement, options);
            } // If the node is a <symbol>, it won't be rendered so we have to convert it into <svg>. Note
            // that the same could be achieved by referring to it via <use href="#id">, however the <use>
            // tag is problematic on Firefox, because it needs to include the current page path.


            if (iconElement.nodeName.toLowerCase() === 'symbol') {
              return this._setSvgAttributes(this._toSvgElement(iconElement), options);
            } // createElement('SVG') doesn't work as expected; the DOM ends up with
            // the correct nodes, but the SVG content doesn't render. Instead we
            // have to create an empty SVG node using innerHTML and append its content.
            // Elements created using DOMParser.parseFromString have the same problem.
            // http://stackoverflow.com/questions/23003278/svg-innerhtml-in-firefox-can-not-display


            var svg = this._svgElementFromString('<svg></svg>'); // Clone the node so we don't remove it from the parent icon set element.


            svg.appendChild(iconElement);
            return this._setSvgAttributes(svg, options);
          }
          /**
           * Creates a DOM element from the given SVG string.
           */

        }, {
          key: "_svgElementFromString",
          value: function _svgElementFromString(str) {
            var div = this._document.createElement('DIV');

            div.innerHTML = str;
            var svg = div.querySelector('svg'); // TODO: add an ngDevMode check

            if (!svg) {
              throw Error('<svg> tag not found');
            }

            return svg;
          }
          /**
           * Converts an element into an SVG node by cloning all of its children.
           */

        }, {
          key: "_toSvgElement",
          value: function _toSvgElement(element) {
            var svg = this._svgElementFromString('<svg></svg>');

            var attributes = element.attributes; // Copy over all the attributes from the `symbol` to the new SVG, except the id.

            for (var i = 0; i < attributes.length; i++) {
              var _attributes$i = attributes[i],
                  name = _attributes$i.name,
                  value = _attributes$i.value;

              if (name !== 'id') {
                svg.setAttribute(name, value);
              }
            }

            for (var _i20 = 0; _i20 < element.childNodes.length; _i20++) {
              if (element.childNodes[_i20].nodeType === this._document.ELEMENT_NODE) {
                svg.appendChild(element.childNodes[_i20].cloneNode(true));
              }
            }

            return svg;
          }
          /**
           * Sets the default attributes for an SVG element to be used as an icon.
           */

        }, {
          key: "_setSvgAttributes",
          value: function _setSvgAttributes(svg, options) {
            svg.setAttribute('fit', '');
            svg.setAttribute('height', '100%');
            svg.setAttribute('width', '100%');
            svg.setAttribute('preserveAspectRatio', 'xMidYMid meet');
            svg.setAttribute('focusable', 'false'); // Disable IE11 default behavior to make SVGs focusable.

            if (options && options.viewBox) {
              svg.setAttribute('viewBox', options.viewBox);
            }

            return svg;
          }
          /**
           * Returns an Observable which produces the string contents of the given icon. Results may be
           * cached, so future calls with the same URL may not cause another HTTP request.
           */

        }, {
          key: "_fetchIcon",
          value: function _fetchIcon(iconConfig) {
            var _this568 = this;

            var _a;

            var safeUrl = iconConfig.url,
                options = iconConfig.options;
            var withCredentials = (_a = options === null || options === void 0 ? void 0 : options.withCredentials) !== null && _a !== void 0 ? _a : false;

            if (!this._httpClient) {
              throw getMatIconNoHttpProviderError();
            } // TODO: add an ngDevMode check


            if (safeUrl == null) {
              throw Error("Cannot fetch icon from URL \"".concat(safeUrl, "\"."));
            }

            var url = this._sanitizer.sanitize(_angular_core__WEBPACK_IMPORTED_MODULE_0__["SecurityContext"].RESOURCE_URL, safeUrl); // TODO: add an ngDevMode check


            if (!url) {
              throw getMatIconFailedToSanitizeUrlError(safeUrl);
            } // Store in-progress fetches to avoid sending a duplicate request for a URL when there is
            // already a request in progress for that URL. It's necessary to call share() on the
            // Observable returned by http.get() so that multiple subscribers don't cause multiple XHRs.


            var inProgressFetch = this._inProgressUrlFetches.get(url);

            if (inProgressFetch) {
              return inProgressFetch;
            }

            var req = this._httpClient.get(url, {
              responseType: 'text',
              withCredentials: withCredentials
            }).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["finalize"])(function () {
              return _this568._inProgressUrlFetches["delete"](url);
            }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["share"])());

            this._inProgressUrlFetches.set(url, req);

            return req;
          }
          /**
           * Registers an icon config by name in the specified namespace.
           * @param namespace Namespace in which to register the icon config.
           * @param iconName Name under which to register the config.
           * @param config Config to be registered.
           */

        }, {
          key: "_addSvgIconConfig",
          value: function _addSvgIconConfig(namespace, iconName, config) {
            this._svgIconConfigs.set(iconKey(namespace, iconName), config);

            return this;
          }
          /**
           * Registers an icon set config in the specified namespace.
           * @param namespace Namespace in which to register the icon config.
           * @param config Config to be registered.
           */

        }, {
          key: "_addSvgIconSetConfig",
          value: function _addSvgIconSetConfig(namespace, config) {
            var configNamespace = this._iconSetConfigs.get(namespace);

            if (configNamespace) {
              configNamespace.push(config);
            } else {
              this._iconSetConfigs.set(namespace, [config]);
            }

            return this;
          }
          /** Parses a config's text into an SVG element. */

        }, {
          key: "_svgElementFromConfig",
          value: function _svgElementFromConfig(config) {
            if (!config.svgElement) {
              var svg = this._svgElementFromString(config.svgText);

              this._setSvgAttributes(svg, config.options);

              config.svgElement = svg;
            }

            return config.svgElement;
          }
          /** Tries to create an icon config through the registered resolver functions. */

        }, {
          key: "_getIconConfigFromResolvers",
          value: function _getIconConfigFromResolvers(namespace, name) {
            for (var i = 0; i < this._resolvers.length; i++) {
              var result = this._resolvers[i](name, namespace);

              if (result) {
                return isSafeUrlWithOptions(result) ? new SvgIconConfig(result.url, null, result.options) : new SvgIconConfig(result, null);
              }
            }

            return undefined;
          }
        }]);

        return MatIconRegistry;
      }();

      MatIconRegistry.ɵfac = function MatIconRegistry_Factory(t) {
        return new (t || MatIconRegistry)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common_http__WEBPACK_IMPORTED_MODULE_6__["HttpClient"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_platform_browser__WEBPACK_IMPORTED_MODULE_7__["DomSanitizer"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_3__["DOCUMENT"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ErrorHandler"]));
      };

      MatIconRegistry.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({
        factory: function MatIconRegistry_Factory() {
          return new MatIconRegistry(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(_angular_common_http__WEBPACK_IMPORTED_MODULE_6__["HttpClient"], 8), Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(_angular_platform_browser__WEBPACK_IMPORTED_MODULE_7__["DomSanitizer"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_3__["DOCUMENT"], 8), Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ErrorHandler"]));
        },
        token: MatIconRegistry,
        providedIn: "root"
      });

      MatIconRegistry.ctorParameters = function () {
        return [{
          type: _angular_common_http__WEBPACK_IMPORTED_MODULE_6__["HttpClient"],
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }]
        }, {
          type: _angular_platform_browser__WEBPACK_IMPORTED_MODULE_7__["DomSanitizer"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_3__["DOCUMENT"]]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ErrorHandler"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatIconRegistry, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: _angular_common_http__WEBPACK_IMPORTED_MODULE_6__["HttpClient"],
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }]
          }, {
            type: _angular_platform_browser__WEBPACK_IMPORTED_MODULE_7__["DomSanitizer"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_3__["DOCUMENT"]]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ErrorHandler"]
          }];
        }, null);
      })();
      /** @docs-private */


      function ICON_REGISTRY_PROVIDER_FACTORY(parentRegistry, httpClient, sanitizer, errorHandler, document) {
        return parentRegistry || new MatIconRegistry(httpClient, sanitizer, document, errorHandler);
      }
      /** @docs-private */


      var ICON_REGISTRY_PROVIDER = {
        // If there is already an MatIconRegistry available, use that. Otherwise, provide a new one.
        provide: MatIconRegistry,
        deps: [[new _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"](), new _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"](), MatIconRegistry], [new _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"](), _angular_common_http__WEBPACK_IMPORTED_MODULE_6__["HttpClient"]], _angular_platform_browser__WEBPACK_IMPORTED_MODULE_7__["DomSanitizer"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["ErrorHandler"], [new _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"](), _angular_common__WEBPACK_IMPORTED_MODULE_3__["DOCUMENT"]]],
        useFactory: ICON_REGISTRY_PROVIDER_FACTORY
      };
      /** Clones an SVGElement while preserving type information. */

      function cloneSvg(svg) {
        return svg.cloneNode(true);
      }
      /** Returns the cache key to use for an icon namespace and name. */


      function iconKey(namespace, name) {
        return namespace + ':' + name;
      }

      function isSafeUrlWithOptions(value) {
        return !!(value.url && value.options);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // Boilerplate for applying mixins to MatIcon.

      /** @docs-private */


      var MatIconBase = function MatIconBase(_elementRef) {
        _classCallCheck2(this, MatIconBase);

        this._elementRef = _elementRef;
      };

      var _MatIconMixinBase = Object(_angular_material_core__WEBPACK_IMPORTED_MODULE_1__["mixinColor"])(MatIconBase);
      /**
       * Injection token used to provide the current location to `MatIcon`.
       * Used to handle server-side rendering and to stub out during unit tests.
       * @docs-private
       */


      var MAT_ICON_LOCATION = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('mat-icon-location', {
        providedIn: 'root',
        factory: MAT_ICON_LOCATION_FACTORY
      });
      /** @docs-private */

      function MAT_ICON_LOCATION_FACTORY() {
        var _document = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["inject"])(_angular_common__WEBPACK_IMPORTED_MODULE_3__["DOCUMENT"]);

        var _location = _document ? _document.location : null;

        return {
          // Note that this needs to be a function, rather than a property, because Angular
          // will only resolve it once, but we want the current path on each call.
          getPathname: function getPathname() {
            return _location ? _location.pathname + _location.search : '';
          }
        };
      }
      /** SVG attributes that accept a FuncIRI (e.g. `url(<something>)`). */


      var funcIriAttributes = ['clip-path', 'color-profile', 'src', 'cursor', 'fill', 'filter', 'marker', 'marker-start', 'marker-mid', 'marker-end', 'mask', 'stroke'];

      var ɵ0 = function ɵ0(attr) {
        return "[".concat(attr, "]");
      };
      /** Selector that can be used to find all elements that are using a `FuncIRI`. */


      var funcIriAttributeSelector = funcIriAttributes.map(ɵ0).join(', ');
      /** Regex that can be used to extract the id out of a FuncIRI. */

      var funcIriPattern = /^url\(['"]?#(.*?)['"]?\)$/;
      /**
       * Component to display an icon. It can be used in the following ways:
       *
       * - Specify the svgIcon input to load an SVG icon from a URL previously registered with the
       *   addSvgIcon, addSvgIconInNamespace, addSvgIconSet, or addSvgIconSetInNamespace methods of
       *   MatIconRegistry. If the svgIcon value contains a colon it is assumed to be in the format
       *   "[namespace]:[name]", if not the value will be the name of an icon in the default namespace.
       *   Examples:
       *     `<mat-icon svgIcon="left-arrow"></mat-icon>
       *     <mat-icon svgIcon="animals:cat"></mat-icon>`
       *
       * - Use a font ligature as an icon by putting the ligature text in the content of the `<mat-icon>`
       *   component. By default the Material icons font is used as described at
       *   http://google.github.io/material-design-icons/#icon-font-for-the-web. You can specify an
       *   alternate font by setting the fontSet input to either the CSS class to apply to use the
       *   desired font, or to an alias previously registered with MatIconRegistry.registerFontClassAlias.
       *   Examples:
       *     `<mat-icon>home</mat-icon>
       *     <mat-icon fontSet="myfont">sun</mat-icon>`
       *
       * - Specify a font glyph to be included via CSS rules by setting the fontSet input to specify the
       *   font, and the fontIcon input to specify the icon. Typically the fontIcon will specify a
       *   CSS class which causes the glyph to be displayed via a :before selector, as in
       *   https://fortawesome.github.io/Font-Awesome/examples/
       *   Example:
       *     `<mat-icon fontSet="fa" fontIcon="alarm"></mat-icon>`
       */

      var MatIcon = /*#__PURE__*/function (_MatIconMixinBase2) {
        _inherits2(MatIcon, _MatIconMixinBase2);

        var _super240 = _createSuper(MatIcon);

        function MatIcon(elementRef, _iconRegistry, ariaHidden, _location, _errorHandler) {
          var _this569;

          _classCallCheck2(this, MatIcon);

          _this569 = _super240.call(this, elementRef);
          _this569._iconRegistry = _iconRegistry;
          _this569._location = _location;
          _this569._errorHandler = _errorHandler;
          _this569._inline = false;
          /** Subscription to the current in-progress SVG icon request. */

          _this569._currentIconFetch = rxjs__WEBPACK_IMPORTED_MODULE_4__["Subscription"].EMPTY; // If the user has not explicitly set aria-hidden, mark the icon as hidden, as this is
          // the right thing to do for the majority of icon use-cases.

          if (!ariaHidden) {
            elementRef.nativeElement.setAttribute('aria-hidden', 'true');
          }

          return _this569;
        }
        /**
         * Whether the icon should be inlined, automatically sizing the icon to match the font size of
         * the element the icon is contained in.
         */


        _createClass2(MatIcon, [{
          key: "inline",
          get: function get() {
            return this._inline;
          },
          set: function set(inline) {
            this._inline = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceBooleanProperty"])(inline);
          }
          /** Name of the icon in the SVG icon set. */

        }, {
          key: "svgIcon",
          get: function get() {
            return this._svgIcon;
          },
          set: function set(value) {
            if (value !== this._svgIcon) {
              if (value) {
                this._updateSvgIcon(value);
              } else if (this._svgIcon) {
                this._clearSvgElement();
              }

              this._svgIcon = value;
            }
          }
          /** Font set that the icon is a part of. */

        }, {
          key: "fontSet",
          get: function get() {
            return this._fontSet;
          },
          set: function set(value) {
            var newValue = this._cleanupFontValue(value);

            if (newValue !== this._fontSet) {
              this._fontSet = newValue;

              this._updateFontIconClasses();
            }
          }
          /** Name of an icon within a font set. */

        }, {
          key: "fontIcon",
          get: function get() {
            return this._fontIcon;
          },
          set: function set(value) {
            var newValue = this._cleanupFontValue(value);

            if (newValue !== this._fontIcon) {
              this._fontIcon = newValue;

              this._updateFontIconClasses();
            }
          }
          /**
           * Splits an svgIcon binding value into its icon set and icon name components.
           * Returns a 2-element array of [(icon set), (icon name)].
           * The separator for the two fields is ':'. If there is no separator, an empty
           * string is returned for the icon set and the entire value is returned for
           * the icon name. If the argument is falsy, returns an array of two empty strings.
           * Throws an error if the name contains two or more ':' separators.
           * Examples:
           *   `'social:cake' -> ['social', 'cake']
           *   'penguin' -> ['', 'penguin']
           *   null -> ['', '']
           *   'a:b:c' -> (throws Error)`
           */

        }, {
          key: "_splitIconName",
          value: function _splitIconName(iconName) {
            if (!iconName) {
              return ['', ''];
            }

            var parts = iconName.split(':');

            switch (parts.length) {
              case 1:
                return ['', parts[0]];
              // Use default namespace.

              case 2:
                return parts;

              default:
                throw Error("Invalid icon name: \"".concat(iconName, "\""));
              // TODO: add an ngDevMode check
            }
          }
        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            // Update font classes because ngOnChanges won't be called if none of the inputs are present,
            // e.g. <mat-icon>arrow</mat-icon> In this case we need to add a CSS class for the default font.
            this._updateFontIconClasses();
          }
        }, {
          key: "ngAfterViewChecked",
          value: function ngAfterViewChecked() {
            var cachedElements = this._elementsWithExternalReferences;

            if (cachedElements && cachedElements.size) {
              var newPath = this._location.getPathname(); // We need to check whether the URL has changed on each change detection since
              // the browser doesn't have an API that will let us react on link clicks and
              // we can't depend on the Angular router. The references need to be updated,
              // because while most browsers don't care whether the URL is correct after
              // the first render, Safari will break if the user navigates to a different
              // page and the SVG isn't re-rendered.


              if (newPath !== this._previousPath) {
                this._previousPath = newPath;

                this._prependPathToReferences(newPath);
              }
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._currentIconFetch.unsubscribe();

            if (this._elementsWithExternalReferences) {
              this._elementsWithExternalReferences.clear();
            }
          }
        }, {
          key: "_usingFontIcon",
          value: function _usingFontIcon() {
            return !this.svgIcon;
          }
        }, {
          key: "_setSvgElement",
          value: function _setSvgElement(svg) {
            this._clearSvgElement(); // Workaround for IE11 and Edge ignoring `style` tags inside dynamically-created SVGs.
            // See: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10898469/
            // Do this before inserting the element into the DOM, in order to avoid a style recalculation.


            var styleTags = svg.querySelectorAll('style');

            for (var i = 0; i < styleTags.length; i++) {
              styleTags[i].textContent += ' ';
            } // Note: we do this fix here, rather than the icon registry, because the
            // references have to point to the URL at the time that the icon was created.


            var path = this._location.getPathname();

            this._previousPath = path;

            this._cacheChildrenWithExternalReferences(svg);

            this._prependPathToReferences(path);

            this._elementRef.nativeElement.appendChild(svg);
          }
        }, {
          key: "_clearSvgElement",
          value: function _clearSvgElement() {
            var layoutElement = this._elementRef.nativeElement;
            var childCount = layoutElement.childNodes.length;

            if (this._elementsWithExternalReferences) {
              this._elementsWithExternalReferences.clear();
            } // Remove existing non-element child nodes and SVGs, and add the new SVG element. Note that
            // we can't use innerHTML, because IE will throw if the element has a data binding.


            while (childCount--) {
              var child = layoutElement.childNodes[childCount]; // 1 corresponds to Node.ELEMENT_NODE. We remove all non-element nodes in order to get rid
              // of any loose text nodes, as well as any SVG elements in order to remove any old icons.

              if (child.nodeType !== 1 || child.nodeName.toLowerCase() === 'svg') {
                layoutElement.removeChild(child);
              }
            }
          }
        }, {
          key: "_updateFontIconClasses",
          value: function _updateFontIconClasses() {
            if (!this._usingFontIcon()) {
              return;
            }

            var elem = this._elementRef.nativeElement;
            var fontSetClass = this.fontSet ? this._iconRegistry.classNameForFontAlias(this.fontSet) : this._iconRegistry.getDefaultFontSetClass();

            if (fontSetClass != this._previousFontSetClass) {
              if (this._previousFontSetClass) {
                elem.classList.remove(this._previousFontSetClass);
              }

              if (fontSetClass) {
                elem.classList.add(fontSetClass);
              }

              this._previousFontSetClass = fontSetClass;
            }

            if (this.fontIcon != this._previousFontIconClass) {
              if (this._previousFontIconClass) {
                elem.classList.remove(this._previousFontIconClass);
              }

              if (this.fontIcon) {
                elem.classList.add(this.fontIcon);
              }

              this._previousFontIconClass = this.fontIcon;
            }
          }
          /**
           * Cleans up a value to be used as a fontIcon or fontSet.
           * Since the value ends up being assigned as a CSS class, we
           * have to trim the value and omit space-separated values.
           */

        }, {
          key: "_cleanupFontValue",
          value: function _cleanupFontValue(value) {
            return typeof value === 'string' ? value.trim().split(' ')[0] : value;
          }
          /**
           * Prepends the current path to all elements that have an attribute pointing to a `FuncIRI`
           * reference. This is required because WebKit browsers require references to be prefixed with
           * the current path, if the page has a `base` tag.
           */

        }, {
          key: "_prependPathToReferences",
          value: function _prependPathToReferences(path) {
            var elements = this._elementsWithExternalReferences;

            if (elements) {
              elements.forEach(function (attrs, element) {
                attrs.forEach(function (attr) {
                  element.setAttribute(attr.name, "url('".concat(path, "#").concat(attr.value, "')"));
                });
              });
            }
          }
          /**
           * Caches the children of an SVG element that have `url()`
           * references that we need to prefix with the current path.
           */

        }, {
          key: "_cacheChildrenWithExternalReferences",
          value: function _cacheChildrenWithExternalReferences(element) {
            var elementsWithFuncIri = element.querySelectorAll(funcIriAttributeSelector);
            var elements = this._elementsWithExternalReferences = this._elementsWithExternalReferences || new Map();

            var _loop6 = function _loop6(i) {
              funcIriAttributes.forEach(function (attr) {
                var elementWithReference = elementsWithFuncIri[i];
                var value = elementWithReference.getAttribute(attr);
                var match = value ? value.match(funcIriPattern) : null;

                if (match) {
                  var attributes = elements.get(elementWithReference);

                  if (!attributes) {
                    attributes = [];
                    elements.set(elementWithReference, attributes);
                  }

                  attributes.push({
                    name: attr,
                    value: match[1]
                  });
                }
              });
            };

            for (var i = 0; i < elementsWithFuncIri.length; i++) {
              _loop6(i);
            }
          }
          /** Sets a new SVG icon with a particular name. */

        }, {
          key: "_updateSvgIcon",
          value: function _updateSvgIcon(rawName) {
            var _this570 = this;

            this._svgNamespace = null;
            this._svgName = null;

            this._currentIconFetch.unsubscribe();

            if (rawName) {
              var _this$_splitIconName = this._splitIconName(rawName),
                  _this$_splitIconName2 = _slicedToArray(_this$_splitIconName, 2),
                  namespace = _this$_splitIconName2[0],
                  iconName = _this$_splitIconName2[1];

              if (namespace) {
                this._svgNamespace = namespace;
              }

              if (iconName) {
                this._svgName = iconName;
              }

              this._currentIconFetch = this._iconRegistry.getNamedSvgIcon(iconName, namespace).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["take"])(1)).subscribe(function (svg) {
                return _this570._setSvgElement(svg);
              }, function (err) {
                var errorMessage = "Error retrieving icon ".concat(namespace, ":").concat(iconName, "! ").concat(err.message);

                _this570._errorHandler.handleError(new Error(errorMessage));
              });
            }
          }
        }]);

        return MatIcon;
      }(_MatIconMixinBase);

      MatIcon.ɵfac = function MatIcon_Factory(t) {
        return new (t || MatIcon)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](MatIconRegistry), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinjectAttribute"]('aria-hidden'), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](MAT_ICON_LOCATION), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ErrorHandler"]));
      };

      MatIcon.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: MatIcon,
        selectors: [["mat-icon"]],
        hostAttrs: ["role", "img", 1, "mat-icon", "notranslate"],
        hostVars: 7,
        hostBindings: function MatIcon_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("data-mat-icon-type", ctx._usingFontIcon() ? "font" : "svg")("data-mat-icon-name", ctx._svgName || ctx.fontIcon)("data-mat-icon-namespace", ctx._svgNamespace || ctx.fontSet);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("mat-icon-inline", ctx.inline)("mat-icon-no-color", ctx.color !== "primary" && ctx.color !== "accent" && ctx.color !== "warn");
          }
        },
        inputs: {
          color: "color",
          inline: "inline",
          svgIcon: "svgIcon",
          fontSet: "fontSet",
          fontIcon: "fontIcon"
        },
        exportAs: ["matIcon"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]],
        ngContentSelectors: _c0,
        decls: 1,
        vars: 0,
        template: function MatIcon_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](0);
          }
        },
        styles: [".mat-icon{background-repeat:no-repeat;display:inline-block;fill:currentColor;height:24px;width:24px}.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}[dir=rtl] .mat-icon-rtl-mirror{transform:scale(-1, 1)}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon{display:block}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-icon{margin:auto}\n"],
        encapsulation: 2,
        changeDetection: 0
      });

      MatIcon.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: MatIconRegistry
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Attribute"],
            args: ['aria-hidden']
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [MAT_ICON_LOCATION]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ErrorHandler"]
        }];
      };

      MatIcon.propDecorators = {
        inline: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        svgIcon: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        fontSet: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        fontIcon: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatIcon, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            template: '<ng-content></ng-content>',
            selector: 'mat-icon',
            exportAs: 'matIcon',
            inputs: ['color'],
            host: {
              'role': 'img',
              'class': 'mat-icon notranslate',
              '[attr.data-mat-icon-type]': '_usingFontIcon() ? "font" : "svg"',
              '[attr.data-mat-icon-name]': '_svgName || fontIcon',
              '[attr.data-mat-icon-namespace]': '_svgNamespace || fontSet',
              '[class.mat-icon-inline]': 'inline',
              '[class.mat-icon-no-color]': 'color !== "primary" && color !== "accent" && color !== "warn"'
            },
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            styles: [".mat-icon{background-repeat:no-repeat;display:inline-block;fill:currentColor;height:24px;width:24px}.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}[dir=rtl] .mat-icon-rtl-mirror{transform:scale(-1, 1)}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon{display:block}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-icon{margin:auto}\n"]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: MatIconRegistry
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Attribute"],
              args: ['aria-hidden']
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [MAT_ICON_LOCATION]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ErrorHandler"]
          }];
        }, {
          inline: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          svgIcon: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          fontSet: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          fontIcon: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var MatIconModule = function MatIconModule() {
        _classCallCheck2(this, MatIconModule);
      };

      MatIconModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: MatIconModule
      });
      MatIconModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function MatIconModule_Factory(t) {
          return new (t || MatIconModule)();
        },
        imports: [[_angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MatCommonModule"]], _angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MatCommonModule"]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](MatIconModule, {
          declarations: function declarations() {
            return [MatIcon];
          },
          imports: function imports() {
            return [_angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MatCommonModule"]];
          },
          exports: function exports() {
            return [MatIcon, _angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MatCommonModule"]];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatIconModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            imports: [_angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MatCommonModule"]],
            exports: [MatIcon, _angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MatCommonModule"]],
            declarations: [MatIcon]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=icon.js.map

      /***/

    },

    /***/
    "NHP+":
    /*!*************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/AsyncSubject.js ***!
      \*************************************************************/

    /*! exports provided: AsyncSubject */

    /***/
    function NHP(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AsyncSubject", function () {
        return AsyncSubject;
      });
      /* harmony import */


      var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./Subject */
      "XNiG");
      /* harmony import */


      var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./Subscription */
      "quSY");

      var AsyncSubject = /*#__PURE__*/function (_Subject__WEBPACK_IMP3) {
        _inherits2(AsyncSubject, _Subject__WEBPACK_IMP3);

        var _super241 = _createSuper(AsyncSubject);

        function AsyncSubject() {
          var _this571;

          _classCallCheck2(this, AsyncSubject);

          _this571 = _super241.apply(this, arguments);
          _this571.value = null;
          _this571.hasNext = false;
          _this571.hasCompleted = false;
          return _this571;
        }

        _createClass2(AsyncSubject, [{
          key: "_subscribe",
          value: function _subscribe(subscriber) {
            if (this.hasError) {
              subscriber.error(this.thrownError);
              return _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"].EMPTY;
            } else if (this.hasCompleted && this.hasNext) {
              subscriber.next(this.value);
              subscriber.complete();
              return _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"].EMPTY;
            }

            return _get2(_getPrototypeOf2(AsyncSubject.prototype), "_subscribe", this).call(this, subscriber);
          }
        }, {
          key: "next",
          value: function next(value) {
            if (!this.hasCompleted) {
              this.value = value;
              this.hasNext = true;
            }
          }
        }, {
          key: "error",
          value: function error(_error4) {
            if (!this.hasCompleted) {
              _get2(_getPrototypeOf2(AsyncSubject.prototype), "error", this).call(this, _error4);
            }
          }
        }, {
          key: "complete",
          value: function complete() {
            this.hasCompleted = true;

            if (this.hasNext) {
              _get2(_getPrototypeOf2(AsyncSubject.prototype), "next", this).call(this, this.value);
            }

            _get2(_getPrototypeOf2(AsyncSubject.prototype), "complete", this).call(this);
          }
        }]);

        return AsyncSubject;
      }(_Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"]); //# sourceMappingURL=AsyncSubject.js.map

      /***/

    },

    /***/
    "NJ4a":
    /*!*********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/hostReportError.js ***!
      \*********************************************************************/

    /*! exports provided: hostReportError */

    /***/
    function NJ4a(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "hostReportError", function () {
        return hostReportError;
      });

      function hostReportError(err) {
        setTimeout(function () {
          throw err;
        }, 0);
      } //# sourceMappingURL=hostReportError.js.map

      /***/

    },

    /***/
    "NJ9Y":
    /*!***************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/last.js ***!
      \***************************************************************/

    /*! exports provided: last */

    /***/
    function NJ9Y(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "last", function () {
        return last;
      });
      /* harmony import */


      var _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../util/EmptyError */
      "sVev");
      /* harmony import */


      var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./filter */
      "pLZG");
      /* harmony import */


      var _takeLast__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./takeLast */
      "BFxc");
      /* harmony import */


      var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./throwIfEmpty */
      "XDbj");
      /* harmony import */


      var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ./defaultIfEmpty */
      "xbPD");
      /* harmony import */


      var _util_identity__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! ../util/identity */
      "SpAZ");

      function last(predicate, defaultValue) {
        var hasDefaultValue = arguments.length >= 2;
        return function (source) {
          return source.pipe(predicate ? Object(_filter__WEBPACK_IMPORTED_MODULE_1__["filter"])(function (v, i) {
            return predicate(v, i, source);
          }) : _util_identity__WEBPACK_IMPORTED_MODULE_5__["identity"], Object(_takeLast__WEBPACK_IMPORTED_MODULE_2__["takeLast"])(1), hasDefaultValue ? Object(_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_4__["defaultIfEmpty"])(defaultValue) : Object(_throwIfEmpty__WEBPACK_IMPORTED_MODULE_3__["throwIfEmpty"])(function () {
            return new _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__["EmptyError"]();
          }));
        };
      } //# sourceMappingURL=last.js.map

      /***/

    },

    /***/
    "NNCq":
    /*!*****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/range.js ***!
      \*****************************************************************/

    /*! exports provided: range, dispatch */

    /***/
    function NNCq(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "range", function () {
        return range;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "dispatch", function () {
        return dispatch;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");

      function range() {
        var start = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
        var count = arguments.length > 1 ? arguments[1] : undefined;
        var scheduler = arguments.length > 2 ? arguments[2] : undefined;
        return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
          if (count === undefined) {
            count = start;
            start = 0;
          }

          var index = 0;
          var current = start;

          if (scheduler) {
            return scheduler.schedule(dispatch, 0, {
              index: index,
              count: count,
              start: start,
              subscriber: subscriber
            });
          } else {
            do {
              if (index++ >= count) {
                subscriber.complete();
                break;
              }

              subscriber.next(current++);

              if (subscriber.closed) {
                break;
              }
            } while (true);
          }

          return undefined;
        });
      }

      function dispatch(state) {
        var start = state.start,
            index = state.index,
            count = state.count,
            subscriber = state.subscriber;

        if (index >= count) {
          subscriber.complete();
          return;
        }

        subscriber.next(start);

        if (subscriber.closed) {
          return;
        }

        state.index = index + 1;
        state.start = start + 1;
        this.schedule(state);
      } //# sourceMappingURL=range.js.map

      /***/

    },

    /***/
    "NODT":
    /*!******************************************************!*\
      !*** ./node_modules/aws-sdk/node_modules/uuid/v1.js ***!
      \******************************************************/

    /*! no static exports found */

    /***/
    function NODT(module, exports, __webpack_require__) {
      var rng = __webpack_require__(
      /*! ./lib/rng */
      "ZyCK");

      var bytesToUuid = __webpack_require__(
      /*! ./lib/bytesToUuid */
      "V20V"); // **`v1()` - Generate time-based UUID**
      //
      // Inspired by https://github.com/LiosK/UUID.js
      // and http://docs.python.org/library/uuid.html


      var _nodeId;

      var _clockseq; // Previous uuid creation time


      var _lastMSecs = 0;
      var _lastNSecs = 0; // See https://github.com/broofa/node-uuid for API details

      function v1(options, buf, offset) {
        var i = buf && offset || 0;
        var b = buf || [];
        options = options || {};
        var node = options.node || _nodeId;
        var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not
        // specified.  We do this lazily to minimize issues related to insufficient
        // system entropy.  See #189

        if (node == null || clockseq == null) {
          var seedBytes = rng();

          if (node == null) {
            // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
            node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];
          }

          if (clockseq == null) {
            // Per 4.2.2, randomize (14 bit) clockseq
            clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;
          }
        } // UUID timestamps are 100 nano-second units since the Gregorian epoch,
        // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so
        // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
        // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.


        var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime(); // Per 4.2.1.2, use count of uuid's generated during the current clock
        // cycle to simulate higher resolution clock

        var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)

        var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression

        if (dt < 0 && options.clockseq === undefined) {
          clockseq = clockseq + 1 & 0x3fff;
        } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
        // time interval


        if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
          nsecs = 0;
        } // Per 4.2.1.2 Throw error if too many uuids are requested


        if (nsecs >= 10000) {
          throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec');
        }

        _lastMSecs = msecs;
        _lastNSecs = nsecs;
        _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch

        msecs += 12219292800000; // `time_low`

        var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
        b[i++] = tl >>> 24 & 0xff;
        b[i++] = tl >>> 16 & 0xff;
        b[i++] = tl >>> 8 & 0xff;
        b[i++] = tl & 0xff; // `time_mid`

        var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;
        b[i++] = tmh >>> 8 & 0xff;
        b[i++] = tmh & 0xff; // `time_high_and_version`

        b[i++] = tmh >>> 24 & 0xf | 0x10; // include version

        b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)

        b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`

        b[i++] = clockseq & 0xff; // `node`

        for (var n = 0; n < 6; ++n) {
          b[i + n] = node[n];
        }

        return buf ? buf : bytesToUuid(b);
      }

      module.exports = v1;
      /***/
    },

    /***/
    "NVWg":
    /*!*******************************************************************************!*\
      !*** ./node_modules/aws-sdk/lib/event-stream/buffered-create-event-stream.js ***!
      \*******************************************************************************/

    /*! no static exports found */

    /***/
    function NVWg(module, exports, __webpack_require__) {
      var eventMessageChunker = __webpack_require__(
      /*! ../event-stream/event-message-chunker */
      "5wkZ").eventMessageChunker;

      var parseEvent = __webpack_require__(
      /*! ./parse-event */
      "de4B").parseEvent;

      function createEventStream(body, parser, model) {
        var eventMessages = eventMessageChunker(body);
        var events = [];

        for (var i = 0; i < eventMessages.length; i++) {
          events.push(parseEvent(parser, eventMessages[i], model));
        }

        return events;
      }
      /**
       * @api private
       */


      module.exports = {
        createEventStream: createEventStream
      };
      /***/
    },

    /***/
    "NXyV":
    /*!*****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/defer.js ***!
      \*****************************************************************/

    /*! exports provided: defer */

    /***/
    function NXyV(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "defer", function () {
        return defer;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./from */
      "Cfvw");
      /* harmony import */


      var _empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./empty */
      "EY2u");

      function defer(observableFactory) {
        return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
          var input;

          try {
            input = observableFactory();
          } catch (err) {
            subscriber.error(err);
            return undefined;
          }

          var source = input ? Object(_from__WEBPACK_IMPORTED_MODULE_1__["from"])(input) : Object(_empty__WEBPACK_IMPORTED_MODULE_2__["empty"])();
          return source.subscribe(subscriber);
        });
      } //# sourceMappingURL=defer.js.map

      /***/

    },

    /***/
    "NfdI":
    /*!******************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/publish.js ***!
      \******************************************************************/

    /*! exports provided: publish */

    /***/
    function NfdI(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "publish", function () {
        return publish;
      });
      /* harmony import */


      var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subject */
      "XNiG");
      /* harmony import */


      var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./multicast */
      "oB13");

      function publish(selector) {
        return selector ? Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(function () {
          return new _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"]();
        }, selector) : Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(new _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"]());
      } //# sourceMappingURL=publish.js.map

      /***/

    },

    /***/
    "Nv8m":
    /*!****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/race.js ***!
      \****************************************************************/

    /*! exports provided: race, RaceOperator, RaceSubscriber */

    /***/
    function Nv8m(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "race", function () {
        return race;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RaceOperator", function () {
        return RaceOperator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RaceSubscriber", function () {
        return RaceSubscriber;
      });
      /* harmony import */


      var _util_isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../util/isArray */
      "DH7j");
      /* harmony import */


      var _fromArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./fromArray */
      "yCtX");
      /* harmony import */


      var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../OuterSubscriber */
      "l7GE");
      /* harmony import */


      var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ../util/subscribeToResult */
      "ZUHj");

      function race() {
        for (var _len31 = arguments.length, observables = new Array(_len31), _key33 = 0; _key33 < _len31; _key33++) {
          observables[_key33] = arguments[_key33];
        }

        if (observables.length === 1) {
          if (Object(_util_isArray__WEBPACK_IMPORTED_MODULE_0__["isArray"])(observables[0])) {
            observables = observables[0];
          } else {
            return observables[0];
          }
        }

        return Object(_fromArray__WEBPACK_IMPORTED_MODULE_1__["fromArray"])(observables, undefined).lift(new RaceOperator());
      }

      var RaceOperator = /*#__PURE__*/function () {
        function RaceOperator() {
          _classCallCheck2(this, RaceOperator);
        }

        _createClass2(RaceOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new RaceSubscriber(subscriber));
          }
        }]);

        return RaceOperator;
      }();

      var RaceSubscriber = /*#__PURE__*/function (_OuterSubscriber__WEB2) {
        _inherits2(RaceSubscriber, _OuterSubscriber__WEB2);

        var _super242 = _createSuper(RaceSubscriber);

        function RaceSubscriber(destination) {
          var _this572;

          _classCallCheck2(this, RaceSubscriber);

          _this572 = _super242.call(this, destination);
          _this572.hasFirst = false;
          _this572.observables = [];
          _this572.subscriptions = [];
          return _this572;
        }

        _createClass2(RaceSubscriber, [{
          key: "_next",
          value: function _next(observable) {
            this.observables.push(observable);
          }
        }, {
          key: "_complete",
          value: function _complete() {
            var observables = this.observables;
            var len = observables.length;

            if (len === 0) {
              this.destination.complete();
            } else {
              for (var i = 0; i < len && !this.hasFirst; i++) {
                var observable = observables[i];
                var subscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, observable, undefined, i);

                if (this.subscriptions) {
                  this.subscriptions.push(subscription);
                }

                this.add(subscription);
              }

              this.observables = null;
            }
          }
        }, {
          key: "notifyNext",
          value: function notifyNext(_outerValue, innerValue, outerIndex) {
            if (!this.hasFirst) {
              this.hasFirst = true;

              for (var i = 0; i < this.subscriptions.length; i++) {
                if (i !== outerIndex) {
                  var subscription = this.subscriptions[i];
                  subscription.unsubscribe();
                  this.remove(subscription);
                }
              }

              this.subscriptions = null;
            }

            this.destination.next(innerValue);
          }
        }]);

        return RaceSubscriber;
      }(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]); //# sourceMappingURL=race.js.map

      /***/

    },

    /***/
    "O4y0":
    /*!*********************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/SubscribeOnObservable.js ***!
      \*********************************************************************************/

    /*! exports provided: SubscribeOnObservable */

    /***/
    function O4y0(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SubscribeOnObservable", function () {
        return SubscribeOnObservable;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _scheduler_asap__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../scheduler/asap */
      "7Hc7");
      /* harmony import */


      var _util_isNumeric__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../util/isNumeric */
      "Y7HM");

      var SubscribeOnObservable = /*#__PURE__*/function (_Observable__WEBPACK_2) {
        _inherits2(SubscribeOnObservable, _Observable__WEBPACK_2);

        var _super243 = _createSuper(SubscribeOnObservable);

        function SubscribeOnObservable(source) {
          var _this573;

          var delayTime = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
          var scheduler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _scheduler_asap__WEBPACK_IMPORTED_MODULE_1__["asap"];

          _classCallCheck2(this, SubscribeOnObservable);

          _this573 = _super243.call(this);
          _this573.source = source;
          _this573.delayTime = delayTime;
          _this573.scheduler = scheduler;

          if (!Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_2__["isNumeric"])(delayTime) || delayTime < 0) {
            _this573.delayTime = 0;
          }

          if (!scheduler || typeof scheduler.schedule !== 'function') {
            _this573.scheduler = _scheduler_asap__WEBPACK_IMPORTED_MODULE_1__["asap"];
          }

          return _this573;
        }

        _createClass2(SubscribeOnObservable, [{
          key: "_subscribe",
          value: function _subscribe(subscriber) {
            var delay = this.delayTime;
            var source = this.source;
            var scheduler = this.scheduler;
            return scheduler.schedule(SubscribeOnObservable.dispatch, delay, {
              source: source,
              subscriber: subscriber
            });
          }
        }], [{
          key: "create",
          value: function create(source) {
            var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
            var scheduler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _scheduler_asap__WEBPACK_IMPORTED_MODULE_1__["asap"];
            return new SubscribeOnObservable(source, delay, scheduler);
          }
        }, {
          key: "dispatch",
          value: function dispatch(arg) {
            var source = arg.source,
                subscriber = arg.subscriber;
            return this.add(source.subscribe(subscriber));
          }
        }]);

        return SubscribeOnObservable;
      }(_Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]); //# sourceMappingURL=SubscribeOnObservable.js.map

      /***/

    },

    /***/
    "OIYi":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/en-ca.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function OIYi(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : English (Canada) [en-ca]
      //! author : Jonathan Abourbih : https://github.com/jonbca
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var enCa = moment.defineLocale('en-ca', {
          months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
          monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
          weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
          weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
          weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
          longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'YYYY-MM-DD',
            LL: 'MMMM D, YYYY',
            LLL: 'MMMM D, YYYY h:mm A',
            LLLL: 'dddd, MMMM D, YYYY h:mm A'
          },
          calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
          ordinal: function ordinal(number) {
            var b = number % 10,
                output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';
            return number + output;
          }
        });
        return enCa;
      });
      /***/

    },

    /***/
    "OQgR":
    /*!******************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/groupBy.js ***!
      \******************************************************************/

    /*! exports provided: groupBy, GroupedObservable */

    /***/
    function OQgR(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "groupBy", function () {
        return groupBy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "GroupedObservable", function () {
        return GroupedObservable;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");
      /* harmony import */


      var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../Subscription */
      "quSY");
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _Subject__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ../Subject */
      "XNiG");

      function groupBy(keySelector, elementSelector, durationSelector, subjectSelector) {
        return function (source) {
          return source.lift(new GroupByOperator(keySelector, elementSelector, durationSelector, subjectSelector));
        };
      }

      var GroupByOperator = /*#__PURE__*/function () {
        function GroupByOperator(keySelector, elementSelector, durationSelector, subjectSelector) {
          _classCallCheck2(this, GroupByOperator);

          this.keySelector = keySelector;
          this.elementSelector = elementSelector;
          this.durationSelector = durationSelector;
          this.subjectSelector = subjectSelector;
        }

        _createClass2(GroupByOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new GroupBySubscriber(subscriber, this.keySelector, this.elementSelector, this.durationSelector, this.subjectSelector));
          }
        }]);

        return GroupByOperator;
      }();

      var GroupBySubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_20) {
        _inherits2(GroupBySubscriber, _Subscriber__WEBPACK_20);

        var _super244 = _createSuper(GroupBySubscriber);

        function GroupBySubscriber(destination, keySelector, elementSelector, durationSelector, subjectSelector) {
          var _this574;

          _classCallCheck2(this, GroupBySubscriber);

          _this574 = _super244.call(this, destination);
          _this574.keySelector = keySelector;
          _this574.elementSelector = elementSelector;
          _this574.durationSelector = durationSelector;
          _this574.subjectSelector = subjectSelector;
          _this574.groups = null;
          _this574.attemptedToUnsubscribe = false;
          _this574.count = 0;
          return _this574;
        }

        _createClass2(GroupBySubscriber, [{
          key: "_next",
          value: function _next(value) {
            var key;

            try {
              key = this.keySelector(value);
            } catch (err) {
              this.error(err);
              return;
            }

            this._group(value, key);
          }
        }, {
          key: "_group",
          value: function _group(value, key) {
            var groups = this.groups;

            if (!groups) {
              groups = this.groups = new Map();
            }

            var group = groups.get(key);
            var element;

            if (this.elementSelector) {
              try {
                element = this.elementSelector(value);
              } catch (err) {
                this.error(err);
              }
            } else {
              element = value;
            }

            if (!group) {
              group = this.subjectSelector ? this.subjectSelector() : new _Subject__WEBPACK_IMPORTED_MODULE_3__["Subject"]();
              groups.set(key, group);
              var groupedObservable = new GroupedObservable(key, group, this);
              this.destination.next(groupedObservable);

              if (this.durationSelector) {
                var duration;

                try {
                  duration = this.durationSelector(new GroupedObservable(key, group));
                } catch (err) {
                  this.error(err);
                  return;
                }

                this.add(duration.subscribe(new GroupDurationSubscriber(key, group, this)));
              }
            }

            if (!group.closed) {
              group.next(element);
            }
          }
        }, {
          key: "_error",
          value: function _error(err) {
            var groups = this.groups;

            if (groups) {
              groups.forEach(function (group, key) {
                group.error(err);
              });
              groups.clear();
            }

            this.destination.error(err);
          }
        }, {
          key: "_complete",
          value: function _complete() {
            var groups = this.groups;

            if (groups) {
              groups.forEach(function (group, key) {
                group.complete();
              });
              groups.clear();
            }

            this.destination.complete();
          }
        }, {
          key: "removeGroup",
          value: function removeGroup(key) {
            this.groups["delete"](key);
          }
        }, {
          key: "unsubscribe",
          value: function unsubscribe() {
            if (!this.closed) {
              this.attemptedToUnsubscribe = true;

              if (this.count === 0) {
                _get2(_getPrototypeOf2(GroupBySubscriber.prototype), "unsubscribe", this).call(this);
              }
            }
          }
        }]);

        return GroupBySubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]);

      var GroupDurationSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_21) {
        _inherits2(GroupDurationSubscriber, _Subscriber__WEBPACK_21);

        var _super245 = _createSuper(GroupDurationSubscriber);

        function GroupDurationSubscriber(key, group, parent) {
          var _this575;

          _classCallCheck2(this, GroupDurationSubscriber);

          _this575 = _super245.call(this, group);
          _this575.key = key;
          _this575.group = group;
          _this575.parent = parent;
          return _this575;
        }

        _createClass2(GroupDurationSubscriber, [{
          key: "_next",
          value: function _next(value) {
            this.complete();
          }
        }, {
          key: "_unsubscribe",
          value: function _unsubscribe() {
            var parent = this.parent,
                key = this.key;
            this.key = this.parent = null;

            if (parent) {
              parent.removeGroup(key);
            }
          }
        }]);

        return GroupDurationSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]);

      var GroupedObservable = /*#__PURE__*/function (_Observable__WEBPACK_3) {
        _inherits2(GroupedObservable, _Observable__WEBPACK_3);

        var _super246 = _createSuper(GroupedObservable);

        function GroupedObservable(key, groupSubject, refCountSubscription) {
          var _this576;

          _classCallCheck2(this, GroupedObservable);

          _this576 = _super246.call(this);
          _this576.key = key;
          _this576.groupSubject = groupSubject;
          _this576.refCountSubscription = refCountSubscription;
          return _this576;
        }

        _createClass2(GroupedObservable, [{
          key: "_subscribe",
          value: function _subscribe(subscriber) {
            var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
            var refCountSubscription = this.refCountSubscription,
                groupSubject = this.groupSubject;

            if (refCountSubscription && !refCountSubscription.closed) {
              subscription.add(new InnerRefCountSubscription(refCountSubscription));
            }

            subscription.add(groupSubject.subscribe(subscriber));
            return subscription;
          }
        }]);

        return GroupedObservable;
      }(_Observable__WEBPACK_IMPORTED_MODULE_2__["Observable"]);

      var InnerRefCountSubscription = /*#__PURE__*/function (_Subscription__WEBPAC3) {
        _inherits2(InnerRefCountSubscription, _Subscription__WEBPAC3);

        var _super247 = _createSuper(InnerRefCountSubscription);

        function InnerRefCountSubscription(parent) {
          var _this577;

          _classCallCheck2(this, InnerRefCountSubscription);

          _this577 = _super247.call(this);
          _this577.parent = parent;
          parent.count++;
          return _this577;
        }

        _createClass2(InnerRefCountSubscription, [{
          key: "unsubscribe",
          value: function unsubscribe() {
            var parent = this.parent;

            if (!parent.closed && !this.closed) {
              _get2(_getPrototypeOf2(InnerRefCountSubscription.prototype), "unsubscribe", this).call(this);

              parent.count -= 1;

              if (parent.count === 0 && parent.attemptedToUnsubscribe) {
                parent.unsubscribe();
              }
            }
          }
        }]);

        return InnerRefCountSubscription;
      }(_Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]); //# sourceMappingURL=groupBy.js.map

      /***/

    },

    /***/
    "Oaa7":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/en-gb.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function Oaa7(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : English (United Kingdom) [en-gb]
      //! author : Chris Gedrim : https://github.com/chrisgedrim
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var enGb = moment.defineLocale('en-gb', {
          months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
          monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
          weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
          weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
          weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
          ordinal: function ordinal(number) {
            var b = number % 10,
                output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';
            return number + output;
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return enGb;
      });
      /***/

    },

    /***/
    "Ob0Z":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/mr.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function Ob0Z(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Marathi [mr]
      //! author : Harshad Kale : https://github.com/kalehv
      //! author : Vivek Athalye : https://github.com/vnathalye
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var symbolMap = {
          1: '१',
          2: '२',
          3: '३',
          4: '४',
          5: '५',
          6: '६',
          7: '७',
          8: '८',
          9: '९',
          0: '०'
        },
            numberMap = {
          '१': '1',
          '२': '2',
          '३': '3',
          '४': '4',
          '५': '5',
          '६': '6',
          '७': '7',
          '८': '8',
          '९': '9',
          '०': '0'
        };

        function relativeTimeMr(number, withoutSuffix, string, isFuture) {
          var output = '';

          if (withoutSuffix) {
            switch (string) {
              case 's':
                output = 'काही सेकंद';
                break;

              case 'ss':
                output = '%d सेकंद';
                break;

              case 'm':
                output = 'एक मिनिट';
                break;

              case 'mm':
                output = '%d मिनिटे';
                break;

              case 'h':
                output = 'एक तास';
                break;

              case 'hh':
                output = '%d तास';
                break;

              case 'd':
                output = 'एक दिवस';
                break;

              case 'dd':
                output = '%d दिवस';
                break;

              case 'M':
                output = 'एक महिना';
                break;

              case 'MM':
                output = '%d महिने';
                break;

              case 'y':
                output = 'एक वर्ष';
                break;

              case 'yy':
                output = '%d वर्षे';
                break;
            }
          } else {
            switch (string) {
              case 's':
                output = 'काही सेकंदां';
                break;

              case 'ss':
                output = '%d सेकंदां';
                break;

              case 'm':
                output = 'एका मिनिटा';
                break;

              case 'mm':
                output = '%d मिनिटां';
                break;

              case 'h':
                output = 'एका तासा';
                break;

              case 'hh':
                output = '%d तासां';
                break;

              case 'd':
                output = 'एका दिवसा';
                break;

              case 'dd':
                output = '%d दिवसां';
                break;

              case 'M':
                output = 'एका महिन्या';
                break;

              case 'MM':
                output = '%d महिन्यां';
                break;

              case 'y':
                output = 'एका वर्षा';
                break;

              case 'yy':
                output = '%d वर्षां';
                break;
            }
          }

          return output.replace(/%d/i, number);
        }

        var mr = moment.defineLocale('mr', {
          months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),
          monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),
          monthsParseExact: true,
          weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
          weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),
          weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),
          longDateFormat: {
            LT: 'A h:mm वाजता',
            LTS: 'A h:mm:ss वाजता',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm वाजता',
            LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता'
          },
          calendar: {
            sameDay: '[आज] LT',
            nextDay: '[उद्या] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[काल] LT',
            lastWeek: '[मागील] dddd, LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%sमध्ये',
            past: '%sपूर्वी',
            s: relativeTimeMr,
            ss: relativeTimeMr,
            m: relativeTimeMr,
            mm: relativeTimeMr,
            h: relativeTimeMr,
            hh: relativeTimeMr,
            d: relativeTimeMr,
            dd: relativeTimeMr,
            M: relativeTimeMr,
            MM: relativeTimeMr,
            y: relativeTimeMr,
            yy: relativeTimeMr
          },
          preparse: function preparse(string) {
            return string.replace(/[१२३४५६७८९०]/g, function (match) {
              return numberMap[match];
            });
          },
          postformat: function postformat(string) {
            return string.replace(/\d/g, function (match) {
              return symbolMap[match];
            });
          },
          meridiemParse: /पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === 'पहाटे' || meridiem === 'सकाळी') {
              return hour;
            } else if (meridiem === 'दुपारी' || meridiem === 'सायंकाळी' || meridiem === 'रात्री') {
              return hour >= 12 ? hour : hour + 12;
            }
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour >= 0 && hour < 6) {
              return 'पहाटे';
            } else if (hour < 12) {
              return 'सकाळी';
            } else if (hour < 17) {
              return 'दुपारी';
            } else if (hour < 20) {
              return 'सायंकाळी';
            } else {
              return 'रात्री';
            }
          },
          week: {
            dow: 0,
            // Sunday is the first day of the week.
            doy: 6 // The week that contains Jan 6th is the first week of the year.

          }
        });
        return mr;
      });
      /***/

    },

    /***/
    "OjkT":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/ne.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function OjkT(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Nepalese [ne]
      //! author : suvash : https://github.com/suvash
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var symbolMap = {
          1: '१',
          2: '२',
          3: '३',
          4: '४',
          5: '५',
          6: '६',
          7: '७',
          8: '८',
          9: '९',
          0: '०'
        },
            numberMap = {
          '१': '1',
          '२': '2',
          '३': '3',
          '४': '4',
          '५': '5',
          '६': '6',
          '७': '7',
          '८': '8',
          '९': '9',
          '०': '0'
        };
        var ne = moment.defineLocale('ne', {
          months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),
          monthsShort: 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),
          monthsParseExact: true,
          weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),
          weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),
          weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'Aको h:mm बजे',
            LTS: 'Aको h:mm:ss बजे',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, Aको h:mm बजे',
            LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे'
          },
          preparse: function preparse(string) {
            return string.replace(/[१२३४५६७८९०]/g, function (match) {
              return numberMap[match];
            });
          },
          postformat: function postformat(string) {
            return string.replace(/\d/g, function (match) {
              return symbolMap[match];
            });
          },
          meridiemParse: /राति|बिहान|दिउँसो|साँझ/,
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === 'राति') {
              return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'बिहान') {
              return hour;
            } else if (meridiem === 'दिउँसो') {
              return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'साँझ') {
              return hour + 12;
            }
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 3) {
              return 'राति';
            } else if (hour < 12) {
              return 'बिहान';
            } else if (hour < 16) {
              return 'दिउँसो';
            } else if (hour < 20) {
              return 'साँझ';
            } else {
              return 'राति';
            }
          },
          calendar: {
            sameDay: '[आज] LT',
            nextDay: '[भोलि] LT',
            nextWeek: '[आउँदो] dddd[,] LT',
            lastDay: '[हिजो] LT',
            lastWeek: '[गएको] dddd[,] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%sमा',
            past: '%s अगाडि',
            s: 'केही क्षण',
            ss: '%d सेकेण्ड',
            m: 'एक मिनेट',
            mm: '%d मिनेट',
            h: 'एक घण्टा',
            hh: '%d घण्टा',
            d: 'एक दिन',
            dd: '%d दिन',
            M: 'एक महिना',
            MM: '%d महिना',
            y: 'एक बर्ष',
            yy: '%d बर्ष'
          },
          week: {
            dow: 0,
            // Sunday is the first day of the week.
            doy: 6 // The week that contains Jan 6th is the first week of the year.

          }
        });
        return ne;
      });
      /***/

    },

    /***/
    "OmwH":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/zh-mo.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function OmwH(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Chinese (Macau) [zh-mo]
      //! author : Ben : https://github.com/ben-lin
      //! author : Chris Lam : https://github.com/hehachris
      //! author : Tan Yuanhong : https://github.com/le0tan
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var zhMo = moment.defineLocale('zh-mo', {
          months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
          monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
          weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
          weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),
          weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'YYYY年M月D日',
            LLL: 'YYYY年M月D日 HH:mm',
            LLLL: 'YYYY年M月D日dddd HH:mm',
            l: 'D/M/YYYY',
            ll: 'YYYY年M月D日',
            lll: 'YYYY年M月D日 HH:mm',
            llll: 'YYYY年M月D日dddd HH:mm'
          },
          meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
              return hour;
            } else if (meridiem === '中午') {
              return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === '下午' || meridiem === '晚上') {
              return hour + 12;
            }
          },
          meridiem: function meridiem(hour, minute, isLower) {
            var hm = hour * 100 + minute;

            if (hm < 600) {
              return '凌晨';
            } else if (hm < 900) {
              return '早上';
            } else if (hm < 1130) {
              return '上午';
            } else if (hm < 1230) {
              return '中午';
            } else if (hm < 1800) {
              return '下午';
            } else {
              return '晚上';
            }
          },
          calendar: {
            sameDay: '[今天] LT',
            nextDay: '[明天] LT',
            nextWeek: '[下]dddd LT',
            lastDay: '[昨天] LT',
            lastWeek: '[上]dddd LT',
            sameElse: 'L'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
          ordinal: function ordinal(number, period) {
            switch (period) {
              case 'd':
              case 'D':
              case 'DDD':
                return number + '日';

              case 'M':
                return number + '月';

              case 'w':
              case 'W':
                return number + '週';

              default:
                return number;
            }
          },
          relativeTime: {
            future: '%s內',
            past: '%s前',
            s: '幾秒',
            ss: '%d 秒',
            m: '1 分鐘',
            mm: '%d 分鐘',
            h: '1 小時',
            hh: '%d 小時',
            d: '1 天',
            dd: '%d 天',
            M: '1 個月',
            MM: '%d 個月',
            y: '1 年',
            yy: '%d 年'
          }
        });
        return zhMo;
      });
      /***/

    },

    /***/
    "OsX3":
    /*!*********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/bufferTime.js ***!
      \*********************************************************************/

    /*! exports provided: bufferTime */

    /***/
    function OsX3(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "bufferTime", function () {
        return bufferTime;
      });
      /* harmony import */


      var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../scheduler/async */
      "D0XW");
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");
      /* harmony import */


      var _util_isScheduler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../util/isScheduler */
      "z+Ro");

      function bufferTime(bufferTimeSpan) {
        var length = arguments.length;
        var scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"];

        if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_2__["isScheduler"])(arguments[arguments.length - 1])) {
          scheduler = arguments[arguments.length - 1];
          length--;
        }

        var bufferCreationInterval = null;

        if (length >= 2) {
          bufferCreationInterval = arguments[1];
        }

        var maxBufferSize = Number.POSITIVE_INFINITY;

        if (length >= 3) {
          maxBufferSize = arguments[2];
        }

        return function bufferTimeOperatorFunction(source) {
          return source.lift(new BufferTimeOperator(bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler));
        };
      }

      var BufferTimeOperator = /*#__PURE__*/function () {
        function BufferTimeOperator(bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler) {
          _classCallCheck2(this, BufferTimeOperator);

          this.bufferTimeSpan = bufferTimeSpan;
          this.bufferCreationInterval = bufferCreationInterval;
          this.maxBufferSize = maxBufferSize;
          this.scheduler = scheduler;
        }

        _createClass2(BufferTimeOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new BufferTimeSubscriber(subscriber, this.bufferTimeSpan, this.bufferCreationInterval, this.maxBufferSize, this.scheduler));
          }
        }]);

        return BufferTimeOperator;
      }();

      var Context = function Context() {
        _classCallCheck2(this, Context);

        this.buffer = [];
      };

      var BufferTimeSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_22) {
        _inherits2(BufferTimeSubscriber, _Subscriber__WEBPACK_22);

        var _super248 = _createSuper(BufferTimeSubscriber);

        function BufferTimeSubscriber(destination, bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler) {
          var _this578;

          _classCallCheck2(this, BufferTimeSubscriber);

          _this578 = _super248.call(this, destination);
          _this578.bufferTimeSpan = bufferTimeSpan;
          _this578.bufferCreationInterval = bufferCreationInterval;
          _this578.maxBufferSize = maxBufferSize;
          _this578.scheduler = scheduler;
          _this578.contexts = [];

          var context = _this578.openContext();

          _this578.timespanOnly = bufferCreationInterval == null || bufferCreationInterval < 0;

          if (_this578.timespanOnly) {
            var timeSpanOnlyState = {
              subscriber: _assertThisInitialized2(_this578),
              context: context,
              bufferTimeSpan: bufferTimeSpan
            };

            _this578.add(context.closeAction = scheduler.schedule(dispatchBufferTimeSpanOnly, bufferTimeSpan, timeSpanOnlyState));
          } else {
            var closeState = {
              subscriber: _assertThisInitialized2(_this578),
              context: context
            };
            var creationState = {
              bufferTimeSpan: bufferTimeSpan,
              bufferCreationInterval: bufferCreationInterval,
              subscriber: _assertThisInitialized2(_this578),
              scheduler: scheduler
            };

            _this578.add(context.closeAction = scheduler.schedule(dispatchBufferClose, bufferTimeSpan, closeState));

            _this578.add(scheduler.schedule(dispatchBufferCreation, bufferCreationInterval, creationState));
          }

          return _this578;
        }

        _createClass2(BufferTimeSubscriber, [{
          key: "_next",
          value: function _next(value) {
            var contexts = this.contexts;
            var len = contexts.length;
            var filledBufferContext;

            for (var i = 0; i < len; i++) {
              var context = contexts[i];
              var buffer = context.buffer;
              buffer.push(value);

              if (buffer.length == this.maxBufferSize) {
                filledBufferContext = context;
              }
            }

            if (filledBufferContext) {
              this.onBufferFull(filledBufferContext);
            }
          }
        }, {
          key: "_error",
          value: function _error(err) {
            this.contexts.length = 0;

            _get2(_getPrototypeOf2(BufferTimeSubscriber.prototype), "_error", this).call(this, err);
          }
        }, {
          key: "_complete",
          value: function _complete() {
            var contexts = this.contexts,
                destination = this.destination;

            while (contexts.length > 0) {
              var context = contexts.shift();
              destination.next(context.buffer);
            }

            _get2(_getPrototypeOf2(BufferTimeSubscriber.prototype), "_complete", this).call(this);
          }
        }, {
          key: "_unsubscribe",
          value: function _unsubscribe() {
            this.contexts = null;
          }
        }, {
          key: "onBufferFull",
          value: function onBufferFull(context) {
            this.closeContext(context);
            var closeAction = context.closeAction;
            closeAction.unsubscribe();
            this.remove(closeAction);

            if (!this.closed && this.timespanOnly) {
              context = this.openContext();
              var bufferTimeSpan = this.bufferTimeSpan;
              var timeSpanOnlyState = {
                subscriber: this,
                context: context,
                bufferTimeSpan: bufferTimeSpan
              };
              this.add(context.closeAction = this.scheduler.schedule(dispatchBufferTimeSpanOnly, bufferTimeSpan, timeSpanOnlyState));
            }
          }
        }, {
          key: "openContext",
          value: function openContext() {
            var context = new Context();
            this.contexts.push(context);
            return context;
          }
        }, {
          key: "closeContext",
          value: function closeContext(context) {
            this.destination.next(context.buffer);
            var contexts = this.contexts;
            var spliceIndex = contexts ? contexts.indexOf(context) : -1;

            if (spliceIndex >= 0) {
              contexts.splice(contexts.indexOf(context), 1);
            }
          }
        }]);

        return BufferTimeSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]);

      function dispatchBufferTimeSpanOnly(state) {
        var subscriber = state.subscriber;
        var prevContext = state.context;

        if (prevContext) {
          subscriber.closeContext(prevContext);
        }

        if (!subscriber.closed) {
          state.context = subscriber.openContext();
          state.context.closeAction = this.schedule(state, state.bufferTimeSpan);
        }
      }

      function dispatchBufferCreation(state) {
        var bufferCreationInterval = state.bufferCreationInterval,
            bufferTimeSpan = state.bufferTimeSpan,
            subscriber = state.subscriber,
            scheduler = state.scheduler;
        var context = subscriber.openContext();
        var action = this;

        if (!subscriber.closed) {
          subscriber.add(context.closeAction = scheduler.schedule(dispatchBufferClose, bufferTimeSpan, {
            subscriber: subscriber,
            context: context
          }));
          action.schedule(state, bufferCreationInterval);
        }
      }

      function dispatchBufferClose(arg) {
        var subscriber = arg.subscriber,
            context = arg.context;
        subscriber.closeContext(context);
      } //# sourceMappingURL=bufferTime.js.map

      /***/

    },

    /***/
    "Oxv6":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/tg.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function Oxv6(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Tajik [tg]
      //! author : Orif N. Jr. : https://github.com/orif-jr
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var suffixes = {
          0: '-ум',
          1: '-ум',
          2: '-юм',
          3: '-юм',
          4: '-ум',
          5: '-ум',
          6: '-ум',
          7: '-ум',
          8: '-ум',
          9: '-ум',
          10: '-ум',
          12: '-ум',
          13: '-ум',
          20: '-ум',
          30: '-юм',
          40: '-ум',
          50: '-ум',
          60: '-ум',
          70: '-ум',
          80: '-ум',
          90: '-ум',
          100: '-ум'
        };
        var tg = moment.defineLocale('tg', {
          months: {
            format: 'январи_феврали_марти_апрели_майи_июни_июли_августи_сентябри_октябри_ноябри_декабри'.split('_'),
            standalone: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_')
          },
          monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
          weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split('_'),
          weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),
          weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[Имрӯз соати] LT',
            nextDay: '[Фардо соати] LT',
            lastDay: '[Дирӯз соати] LT',
            nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT',
            lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'баъди %s',
            past: '%s пеш',
            s: 'якчанд сония',
            m: 'як дақиқа',
            mm: '%d дақиқа',
            h: 'як соат',
            hh: '%d соат',
            d: 'як рӯз',
            dd: '%d рӯз',
            M: 'як моҳ',
            MM: '%d моҳ',
            y: 'як сол',
            yy: '%d сол'
          },
          meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === 'шаб') {
              return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'субҳ') {
              return hour;
            } else if (meridiem === 'рӯз') {
              return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'бегоҳ') {
              return hour + 12;
            }
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 4) {
              return 'шаб';
            } else if (hour < 11) {
              return 'субҳ';
            } else if (hour < 16) {
              return 'рӯз';
            } else if (hour < 19) {
              return 'бегоҳ';
            } else {
              return 'шаб';
            }
          },
          dayOfMonthOrdinalParse: /\d{1,2}-(ум|юм)/,
          ordinal: function ordinal(number) {
            var a = number % 10,
                b = number >= 100 ? 100 : null;
            return number + (suffixes[number] || suffixes[a] || suffixes[b]);
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 1th is the first week of the year.

          }
        });
        return tg;
      });
      /***/

    },

    /***/
    "PA2r":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/cs.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function PA2r(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Czech [cs]
      //! author : petrbela : https://github.com/petrbela
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),
            monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),
            monthsParse = [/^led/i, /^úno/i, /^bře/i, /^dub/i, /^kvě/i, /^(čvn|červen$|června)/i, /^(čvc|červenec|července)/i, /^srp/i, /^zář/i, /^říj/i, /^lis/i, /^pro/i],
            // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.
        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.
        monthsRegex = /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;

        function plural(n) {
          return n > 1 && n < 5 && ~~(n / 10) !== 1;
        }

        function translate(number, withoutSuffix, key, isFuture) {
          var result = number + ' ';

          switch (key) {
            case 's':
              // a few seconds / in a few seconds / a few seconds ago
              return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';

            case 'ss':
              // 9 seconds / in 9 seconds / 9 seconds ago
              if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'sekundy' : 'sekund');
              } else {
                return result + 'sekundami';
              }

            case 'm':
              // a minute / in a minute / a minute ago
              return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';

            case 'mm':
              // 9 minutes / in 9 minutes / 9 minutes ago
              if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'minuty' : 'minut');
              } else {
                return result + 'minutami';
              }

            case 'h':
              // an hour / in an hour / an hour ago
              return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';

            case 'hh':
              // 9 hours / in 9 hours / 9 hours ago
              if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'hodiny' : 'hodin');
              } else {
                return result + 'hodinami';
              }

            case 'd':
              // a day / in a day / a day ago
              return withoutSuffix || isFuture ? 'den' : 'dnem';

            case 'dd':
              // 9 days / in 9 days / 9 days ago
              if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'dny' : 'dní');
              } else {
                return result + 'dny';
              }

            case 'M':
              // a month / in a month / a month ago
              return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';

            case 'MM':
              // 9 months / in 9 months / 9 months ago
              if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'měsíce' : 'měsíců');
              } else {
                return result + 'měsíci';
              }

            case 'y':
              // a year / in a year / a year ago
              return withoutSuffix || isFuture ? 'rok' : 'rokem';

            case 'yy':
              // 9 years / in 9 years / 9 years ago
              if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'roky' : 'let');
              } else {
                return result + 'lety';
              }

          }
        }

        var cs = moment.defineLocale('cs', {
          months: months,
          monthsShort: monthsShort,
          monthsRegex: monthsRegex,
          monthsShortRegex: monthsRegex,
          // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.
          // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.
          monthsStrictRegex: /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,
          monthsShortStrictRegex: /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,
          monthsParse: monthsParse,
          longMonthsParse: monthsParse,
          shortMonthsParse: monthsParse,
          weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),
          weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),
          weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),
          longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd D. MMMM YYYY H:mm',
            l: 'D. M. YYYY'
          },
          calendar: {
            sameDay: '[dnes v] LT',
            nextDay: '[zítra v] LT',
            nextWeek: function nextWeek() {
              switch (this.day()) {
                case 0:
                  return '[v neděli v] LT';

                case 1:
                case 2:
                  return '[v] dddd [v] LT';

                case 3:
                  return '[ve středu v] LT';

                case 4:
                  return '[ve čtvrtek v] LT';

                case 5:
                  return '[v pátek v] LT';

                case 6:
                  return '[v sobotu v] LT';
              }
            },
            lastDay: '[včera v] LT',
            lastWeek: function lastWeek() {
              switch (this.day()) {
                case 0:
                  return '[minulou neděli v] LT';

                case 1:
                case 2:
                  return '[minulé] dddd [v] LT';

                case 3:
                  return '[minulou středu v] LT';

                case 4:
                case 5:
                  return '[minulý] dddd [v] LT';

                case 6:
                  return '[minulou sobotu v] LT';
              }
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: 'za %s',
            past: 'před %s',
            s: translate,
            ss: translate,
            m: translate,
            mm: translate,
            h: translate,
            hh: translate,
            d: translate,
            dd: translate,
            M: translate,
            MM: translate,
            y: translate,
            yy: translate
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return cs;
      });
      /***/

    },

    /***/
    "PPXK":
    /*!************************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/calendar.component.js ***!
      \************************************************************************************/

    /*! exports provided: OwlCalendarComponent */

    /***/
    function PPXK(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OwlCalendarComponent", function () {
        return OwlCalendarComponent;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _date_time_picker_intl_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./date-time-picker-intl.service */
      "MN5+");
      /* harmony import */


      var _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./adapter/date-time-adapter.class */
      "1rjb");
      /* harmony import */


      var _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/cdk/a11y */
      "u47x");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _calendar_month_view_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! ./calendar-month-view.component */
      "L56X");
      /* harmony import */


      var _calendar_year_view_component__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! ./calendar-year-view.component */
      "I810");
      /* harmony import */


      var _calendar_multi_year_view_component__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! ./calendar-multi-year-view.component */
      "Gmk6");
      /* harmony import */


      var _adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(
      /*! ./adapter/date-time-format.class */
      "1FPZ");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(
      /*! rxjs */
      "qCKp");

      function OwlCalendarComponent_owl_date_time_month_view_18_Template(rf, ctx) {
        if (rf & 1) {
          var _r4 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "owl-date-time-month-view", 16);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("pickerMomentChange", function OwlCalendarComponent_owl_date_time_month_view_18_Template_owl_date_time_month_view_pickerMomentChange_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r4);

            var ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r3.handlePickerMomentChange($event);
          })("selectedChange", function OwlCalendarComponent_owl_date_time_month_view_18_Template_owl_date_time_month_view_selectedChange_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r4);

            var ctx_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r5.dateSelected($event);
          })("userSelection", function OwlCalendarComponent_owl_date_time_month_view_18_Template_owl_date_time_month_view_userSelection_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r4);

            var ctx_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r6.userSelected();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("pickerMoment", ctx_r0.pickerMoment)("firstDayOfWeek", ctx_r0.firstDayOfWeek)("selected", ctx_r0.selected)("selecteds", ctx_r0.selecteds)("selectMode", ctx_r0.selectMode)("minDate", ctx_r0.minDate)("maxDate", ctx_r0.maxDate)("dateFilter", ctx_r0.dateFilter)("hideOtherMonths", ctx_r0.hideOtherMonths);
        }
      }

      function OwlCalendarComponent_owl_date_time_year_view_19_Template(rf, ctx) {
        if (rf & 1) {
          var _r8 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "owl-date-time-year-view", 17);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("keyboardEnter", function OwlCalendarComponent_owl_date_time_year_view_19_Template_owl_date_time_year_view_keyboardEnter_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r8);

            var ctx_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r7.focusActiveCell();
          })("pickerMomentChange", function OwlCalendarComponent_owl_date_time_year_view_19_Template_owl_date_time_year_view_pickerMomentChange_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r8);

            var ctx_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r9.handlePickerMomentChange($event);
          })("monthSelected", function OwlCalendarComponent_owl_date_time_year_view_19_Template_owl_date_time_year_view_monthSelected_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r8);

            var ctx_r10 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r10.selectMonthInYearView($event);
          })("change", function OwlCalendarComponent_owl_date_time_year_view_19_Template_owl_date_time_year_view_change_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r8);

            var ctx_r11 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r11.goToDateInView($event, "month");
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("pickerMoment", ctx_r1.pickerMoment)("selected", ctx_r1.selected)("selecteds", ctx_r1.selecteds)("selectMode", ctx_r1.selectMode)("minDate", ctx_r1.minDate)("maxDate", ctx_r1.maxDate)("dateFilter", ctx_r1.dateFilter);
        }
      }

      function OwlCalendarComponent_owl_date_time_multi_year_view_20_Template(rf, ctx) {
        if (rf & 1) {
          var _r13 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "owl-date-time-multi-year-view", 18);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("keyboardEnter", function OwlCalendarComponent_owl_date_time_multi_year_view_20_Template_owl_date_time_multi_year_view_keyboardEnter_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r13);

            var ctx_r12 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r12.focusActiveCell();
          })("pickerMomentChange", function OwlCalendarComponent_owl_date_time_multi_year_view_20_Template_owl_date_time_multi_year_view_pickerMomentChange_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r13);

            var ctx_r14 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r14.handlePickerMomentChange($event);
          })("yearSelected", function OwlCalendarComponent_owl_date_time_multi_year_view_20_Template_owl_date_time_multi_year_view_yearSelected_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r13);

            var ctx_r15 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r15.selectYearInMultiYearView($event);
          })("change", function OwlCalendarComponent_owl_date_time_multi_year_view_20_Template_owl_date_time_multi_year_view_change_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r13);

            var ctx_r16 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r16.goToDateInView($event, "year");
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("pickerMoment", ctx_r2.pickerMoment)("selected", ctx_r2.selected)("selecteds", ctx_r2.selecteds)("selectMode", ctx_r2.selectMode)("minDate", ctx_r2.minDate)("maxDate", ctx_r2.maxDate)("dateFilter", ctx_r2.dateFilter);
        }
      }

      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var __metadata = undefined && undefined.__metadata || function (k, v) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
      };

      var __param = undefined && undefined.__param || function (paramIndex, decorator) {
        return function (target, key) {
          decorator(target, key, paramIndex);
        };
      };

      var OwlCalendarComponent = function () {
        function OwlCalendarComponent(elmRef, pickerIntl, ngZone, cdRef, dateTimeAdapter, dateTimeFormats) {
          var _this = this;

          this.elmRef = elmRef;
          this.pickerIntl = pickerIntl;
          this.ngZone = ngZone;
          this.cdRef = cdRef;
          this.dateTimeAdapter = dateTimeAdapter;
          this.dateTimeFormats = dateTimeFormats;
          this.firstDayOfWeek = 0;
          this._selecteds = [];
          this.startView = 'month';
          this.pickerMomentChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.selectedChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.userSelection = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.yearSelected = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.monthSelected = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();

          this.dateFilterForViews = function (date) {
            return !!date && (!_this.dateFilter || _this.dateFilter(date)) && (!_this.minDate || _this.dateTimeAdapter.compare(date, _this.minDate) >= 0) && (!_this.maxDate || _this.dateTimeAdapter.compare(date, _this.maxDate) <= 0);
          };

          this.intlChangesSub = rxjs__WEBPACK_IMPORTED_MODULE_10__["Subscription"].EMPTY;
          this.moveFocusOnNextTick = false;
          this.intlChangesSub = this.pickerIntl.changes.subscribe(function () {
            _this.cdRef.markForCheck();
          });
        }

        Object.defineProperty(OwlCalendarComponent.prototype, "minDate", {
          get: function get() {
            return this._minDate;
          },
          set: function set(value) {
            value = this.dateTimeAdapter.deserialize(value);
            value = this.getValidDate(value);
            this._minDate = value ? this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(value), this.dateTimeAdapter.getMonth(value), this.dateTimeAdapter.getDate(value)) : null;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlCalendarComponent.prototype, "maxDate", {
          get: function get() {
            return this._maxDate;
          },
          set: function set(value) {
            value = this.dateTimeAdapter.deserialize(value);
            value = this.getValidDate(value);
            this._maxDate = value ? this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(value), this.dateTimeAdapter.getMonth(value), this.dateTimeAdapter.getDate(value)) : null;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlCalendarComponent.prototype, "pickerMoment", {
          get: function get() {
            return this._pickerMoment;
          },
          set: function set(value) {
            value = this.dateTimeAdapter.deserialize(value);
            this._pickerMoment = this.getValidDate(value) || this.dateTimeAdapter.now();
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlCalendarComponent.prototype, "selected", {
          get: function get() {
            return this._selected;
          },
          set: function set(value) {
            value = this.dateTimeAdapter.deserialize(value);
            this._selected = this.getValidDate(value);
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlCalendarComponent.prototype, "selecteds", {
          get: function get() {
            return this._selecteds;
          },
          set: function set(values) {
            var _this = this;

            this._selecteds = values.map(function (v) {
              v = _this.dateTimeAdapter.deserialize(v);
              return _this.getValidDate(v);
            });
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlCalendarComponent.prototype, "periodButtonText", {
          get: function get() {
            return this.isMonthView ? this.dateTimeAdapter.format(this.pickerMoment, this.dateTimeFormats.monthYearLabel) : this.dateTimeAdapter.getYearName(this.pickerMoment);
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlCalendarComponent.prototype, "periodButtonLabel", {
          get: function get() {
            return this.isMonthView ? this.pickerIntl.switchToMultiYearViewLabel : this.pickerIntl.switchToMonthViewLabel;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlCalendarComponent.prototype, "prevButtonLabel", {
          get: function get() {
            if (this._currentView === 'month') {
              return this.pickerIntl.prevMonthLabel;
            } else if (this._currentView === 'year') {
              return this.pickerIntl.prevYearLabel;
            } else {
              return null;
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlCalendarComponent.prototype, "nextButtonLabel", {
          get: function get() {
            if (this._currentView === 'month') {
              return this.pickerIntl.nextMonthLabel;
            } else if (this._currentView === 'year') {
              return this.pickerIntl.nextYearLabel;
            } else {
              return null;
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlCalendarComponent.prototype, "currentView", {
          get: function get() {
            return this._currentView;
          },
          set: function set(view) {
            this._currentView = view;
            this.moveFocusOnNextTick = true;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlCalendarComponent.prototype, "isInSingleMode", {
          get: function get() {
            return this.selectMode === 'single';
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlCalendarComponent.prototype, "isInRangeMode", {
          get: function get() {
            return this.selectMode === 'range' || this.selectMode === 'rangeFrom' || this.selectMode === 'rangeTo';
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlCalendarComponent.prototype, "showControlArrows", {
          get: function get() {
            return this._currentView !== 'multi-years';
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlCalendarComponent.prototype, "isMonthView", {
          get: function get() {
            return this._currentView === 'month';
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlCalendarComponent.prototype, "owlDTCalendarClass", {
          get: function get() {
            return true;
          },
          enumerable: true,
          configurable: true
        });

        OwlCalendarComponent.prototype.ngOnInit = function () {};

        OwlCalendarComponent.prototype.ngAfterContentInit = function () {
          this._currentView = this.startView;
        };

        OwlCalendarComponent.prototype.ngAfterViewChecked = function () {
          if (this.moveFocusOnNextTick) {
            this.moveFocusOnNextTick = false;
            this.focusActiveCell();
          }
        };

        OwlCalendarComponent.prototype.ngOnDestroy = function () {
          this.intlChangesSub.unsubscribe();
        };

        OwlCalendarComponent.prototype.toggleViews = function () {
          this.currentView = this._currentView == 'month' ? 'multi-years' : 'month';
        };

        OwlCalendarComponent.prototype.previousClicked = function () {
          this.pickerMoment = this.isMonthView ? this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, -1) : this.dateTimeAdapter.addCalendarYears(this.pickerMoment, -1);
          this.pickerMomentChange.emit(this.pickerMoment);
        };

        OwlCalendarComponent.prototype.nextClicked = function () {
          this.pickerMoment = this.isMonthView ? this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, 1) : this.dateTimeAdapter.addCalendarYears(this.pickerMoment, 1);
          this.pickerMomentChange.emit(this.pickerMoment);
        };

        OwlCalendarComponent.prototype.dateSelected = function (date) {
          if (!this.dateFilterForViews(date)) {
            return;
          }

          this.selectedChange.emit(date);
        };

        OwlCalendarComponent.prototype.goToDateInView = function (date, view) {
          this.handlePickerMomentChange(date);
          this.currentView = view;
          return;
        };

        OwlCalendarComponent.prototype.handlePickerMomentChange = function (date) {
          this.pickerMoment = this.dateTimeAdapter.clampDate(date, this.minDate, this.maxDate);
          this.pickerMomentChange.emit(this.pickerMoment);
          return;
        };

        OwlCalendarComponent.prototype.userSelected = function () {
          this.userSelection.emit();
        };

        OwlCalendarComponent.prototype.prevButtonEnabled = function () {
          return !this.minDate || !this.isSameView(this.pickerMoment, this.minDate);
        };

        OwlCalendarComponent.prototype.nextButtonEnabled = function () {
          return !this.maxDate || !this.isSameView(this.pickerMoment, this.maxDate);
        };

        OwlCalendarComponent.prototype.focusActiveCell = function () {
          var _this = this;

          this.ngZone.runOutsideAngular(function () {
            _this.ngZone.onStable.asObservable().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_9__["take"])(1)).subscribe(function () {
              _this.elmRef.nativeElement.querySelector('.owl-dt-calendar-cell-active').focus();
            });
          });
        };

        OwlCalendarComponent.prototype.selectYearInMultiYearView = function (normalizedYear) {
          this.yearSelected.emit(normalizedYear);
        };

        OwlCalendarComponent.prototype.selectMonthInYearView = function (normalizedMonth) {
          this.monthSelected.emit(normalizedMonth);
        };

        OwlCalendarComponent.prototype.isSameView = function (date1, date2) {
          if (this._currentView === 'month') {
            return !!(date1 && date2 && this.dateTimeAdapter.getYear(date1) === this.dateTimeAdapter.getYear(date2) && this.dateTimeAdapter.getMonth(date1) === this.dateTimeAdapter.getMonth(date2));
          } else if (this._currentView === 'year') {
            return !!(date1 && date2 && this.dateTimeAdapter.getYear(date1) === this.dateTimeAdapter.getYear(date2));
          } else {
            return false;
          }
        };

        OwlCalendarComponent.prototype.getValidDate = function (obj) {
          return this.dateTimeAdapter.isDateInstance(obj) && this.dateTimeAdapter.isValid(obj) ? obj : null;
        };

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Function)], OwlCalendarComponent.prototype, "dateFilter", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object)], OwlCalendarComponent.prototype, "firstDayOfWeek", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlCalendarComponent.prototype, "minDate", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlCalendarComponent.prototype, "maxDate", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlCalendarComponent.prototype, "pickerMoment", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", String)], OwlCalendarComponent.prototype, "selectMode", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlCalendarComponent.prototype, "selected", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Array), __metadata("design:paramtypes", [Array])], OwlCalendarComponent.prototype, "selecteds", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", String)], OwlCalendarComponent.prototype, "startView", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Boolean)], OwlCalendarComponent.prototype, "hideOtherMonths", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", Object)], OwlCalendarComponent.prototype, "pickerMomentChange", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", Object)], OwlCalendarComponent.prototype, "selectedChange", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", Object)], OwlCalendarComponent.prototype, "userSelection", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", Object)], OwlCalendarComponent.prototype, "yearSelected", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", Object)], OwlCalendarComponent.prototype, "monthSelected", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('class.owl-dt-calendar'), __metadata("design:type", Boolean), __metadata("design:paramtypes", [])], OwlCalendarComponent.prototype, "owlDTCalendarClass", null);

        OwlCalendarComponent = __decorate([__param(4, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __param(5, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __param(5, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"])(_adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_8__["OWL_DATE_TIME_FORMATS"])), __metadata("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], _date_time_picker_intl_service__WEBPACK_IMPORTED_MODULE_1__["OwlDateTimeIntl"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"], _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__["DateTimeAdapter"], Object])], OwlCalendarComponent);

        OwlCalendarComponent.ɵfac = function OwlCalendarComponent_Factory(t) {
          return new (t || OwlCalendarComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_date_time_picker_intl_service__WEBPACK_IMPORTED_MODULE_1__["OwlDateTimeIntl"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__["DateTimeAdapter"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_8__["OWL_DATE_TIME_FORMATS"], 8));
        };

        OwlCalendarComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
          type: OwlCalendarComponent,
          selectors: [["owl-date-time-calendar"]],
          hostVars: 2,
          hostBindings: function OwlCalendarComponent_HostBindings(rf, ctx) {
            if (rf & 2) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("owl-dt-calendar", ctx.owlDTCalendarClass);
            }
          },
          inputs: {
            firstDayOfWeek: "firstDayOfWeek",
            startView: "startView",
            minDate: "minDate",
            maxDate: "maxDate",
            pickerMoment: "pickerMoment",
            selected: "selected",
            selecteds: "selecteds",
            dateFilter: "dateFilter",
            selectMode: "selectMode",
            hideOtherMonths: "hideOtherMonths"
          },
          outputs: {
            pickerMomentChange: "pickerMomentChange",
            selectedChange: "selectedChange",
            userSelection: "userSelection",
            yearSelected: "yearSelected",
            monthSelected: "monthSelected"
          },
          exportAs: ["owlDateTimeCalendar"],
          decls: 21,
          vars: 16,
          consts: [[1, "owl-dt-calendar-control"], ["type", "button", "tabindex", "0", 1, "owl-dt-control", "owl-dt-control-button", "owl-dt-control-arrow-button", 3, "disabled", "click"], ["tabindex", "-1", 1, "owl-dt-control-content", "owl-dt-control-button-content"], ["xmlns", "http://www.w3.org/2000/svg", 0, "xmlns", "xlink", "http://www.w3.org/1999/xlink", "version", "1.1", "x", "0px", "y", "0px", "viewBox", "0 0 250.738 250.738", 0, "xml", "space", "preserve", "width", "100%", "height", "100%", 2, "enable-background", "new 0 0 250.738 250.738"], ["d", "M96.633,125.369l95.053-94.533c7.101-7.055,7.101-18.492,0-25.546   c-7.1-7.054-18.613-7.054-25.714,0L58.989,111.689c-3.784,3.759-5.487,8.759-5.238,13.68c-0.249,4.922,1.454,9.921,5.238,13.681   l106.983,106.398c7.101,7.055,18.613,7.055,25.714,0c7.101-7.054,7.101-18.491,0-25.544L96.633,125.369z", 2, "fill-rule", "evenodd", "clip-rule", "evenodd"], [1, "owl-dt-calendar-control-content"], ["type", "button", "tabindex", "0", 1, "owl-dt-control", "owl-dt-control-button", "owl-dt-control-period-button", 3, "click"], [1, "owl-dt-control-button-arrow"], ["version", "1.1", "xmlns", "http://www.w3.org/2000/svg", 0, "xmlns", "xlink", "http://www.w3.org/1999/xlink", "x", "0px", "y", "0px", "width", "50%", "height", "50%", "viewBox", "0 0 292.362 292.362", 0, "xml", "space", "preserve", 2, "enable-background", "new 0 0 292.362 292.362"], ["d", "M286.935,69.377c-3.614-3.617-7.898-5.424-12.848-5.424H18.274c-4.952,0-9.233,1.807-12.85,5.424\n                                C1.807,72.998,0,77.279,0,82.228c0,4.948,1.807,9.229,5.424,12.847l127.907,127.907c3.621,3.617,7.902,5.428,12.85,5.428\n                                s9.233-1.811,12.847-5.428L286.935,95.074c3.613-3.617,5.427-7.898,5.427-12.847C292.362,77.279,290.548,72.998,286.935,69.377z"], ["version", "1.1", "xmlns", "http://www.w3.org/2000/svg", 0, "xmlns", "xlink", "http://www.w3.org/1999/xlink", "x", "0px", "y", "0px", "viewBox", "0 0 250.738 250.738", 0, "xml", "space", "preserve", 2, "enable-background", "new 0 0 250.738 250.738"], ["d", "M191.75,111.689L84.766,5.291c-7.1-7.055-18.613-7.055-25.713,0\n                    c-7.101,7.054-7.101,18.49,0,25.544l95.053,94.534l-95.053,94.533c-7.101,7.054-7.101,18.491,0,25.545\n                    c7.1,7.054,18.613,7.054,25.713,0L191.75,139.05c3.784-3.759,5.487-8.759,5.238-13.681\n                    C197.237,120.447,195.534,115.448,191.75,111.689z", 2, "fill-rule", "evenodd", "clip-rule", "evenodd"], ["cdkMonitorSubtreeFocus", "", "tabindex", "-1", 1, "owl-dt-calendar-main", 3, "ngSwitch"], [3, "pickerMoment", "firstDayOfWeek", "selected", "selecteds", "selectMode", "minDate", "maxDate", "dateFilter", "hideOtherMonths", "pickerMomentChange", "selectedChange", "userSelection", 4, "ngSwitchCase"], [3, "pickerMoment", "selected", "selecteds", "selectMode", "minDate", "maxDate", "dateFilter", "keyboardEnter", "pickerMomentChange", "monthSelected", "change", 4, "ngSwitchCase"], [3, "pickerMoment", "selected", "selecteds", "selectMode", "minDate", "maxDate", "dateFilter", "keyboardEnter", "pickerMomentChange", "yearSelected", "change", 4, "ngSwitchCase"], [3, "pickerMoment", "firstDayOfWeek", "selected", "selecteds", "selectMode", "minDate", "maxDate", "dateFilter", "hideOtherMonths", "pickerMomentChange", "selectedChange", "userSelection"], [3, "pickerMoment", "selected", "selecteds", "selectMode", "minDate", "maxDate", "dateFilter", "keyboardEnter", "pickerMomentChange", "monthSelected", "change"], [3, "pickerMoment", "selected", "selecteds", "selectMode", "minDate", "maxDate", "dateFilter", "keyboardEnter", "pickerMomentChange", "yearSelected", "change"]],
          template: function OwlCalendarComponent_Template(rf, ctx) {
            if (rf & 1) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "button", 1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function OwlCalendarComponent_Template_button_click_1_listener() {
                return ctx.previousClicked();
              });

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "span", 2);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnamespaceSVG"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "svg", 3);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](4, "path", 4);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnamespaceHTML"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "div", 5);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](6, "button", 6);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function OwlCalendarComponent_Template_button_click_6_listener() {
                return ctx.toggleViews();
              });

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](7, "span", 2);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](8);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](9, "span", 7);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnamespaceSVG"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](10, "svg", 8);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](11, "g");

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](12, "path", 9);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnamespaceHTML"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](13, "button", 1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function OwlCalendarComponent_Template_button_click_13_listener() {
                return ctx.nextClicked();
              });

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](14, "span", 2);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnamespaceSVG"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](15, "svg", 10);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](16, "path", 11);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnamespaceHTML"]();

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](17, "div", 12);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](18, OwlCalendarComponent_owl_date_time_month_view_18_Template, 1, 9, "owl-date-time-month-view", 13);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](19, OwlCalendarComponent_owl_date_time_year_view_19_Template, 1, 7, "owl-date-time-year-view", 14);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](20, OwlCalendarComponent_owl_date_time_multi_year_view_20_Template, 1, 7, "owl-date-time-multi-year-view", 15);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
            }

            if (rf & 2) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("visibility", ctx.showControlArrows ? "visible" : "hidden");

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", !ctx.prevButtonEnabled());

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-label", ctx.prevButtonLabel);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](5);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-label", ctx.periodButtonLabel);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"]("", ctx.periodButtonText, " ");

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("transform", "rotate(" + (ctx.isMonthView ? 0 : 180) + "deg)");

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](4);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("visibility", ctx.showControlArrows ? "visible" : "hidden");

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", !ctx.nextButtonEnabled());

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-label", ctx.nextButtonLabel);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](4);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngSwitch", ctx.currentView);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngSwitchCase", "month");

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngSwitchCase", "year");

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngSwitchCase", "multi-years");
            }
          },
          directives: [_angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_3__["CdkMonitorFocus"], _angular_common__WEBPACK_IMPORTED_MODULE_4__["NgSwitch"], _angular_common__WEBPACK_IMPORTED_MODULE_4__["NgSwitchCase"], _calendar_month_view_component__WEBPACK_IMPORTED_MODULE_5__["OwlMonthViewComponent"], _calendar_year_view_component__WEBPACK_IMPORTED_MODULE_6__["OwlYearViewComponent"], _calendar_multi_year_view_component__WEBPACK_IMPORTED_MODULE_7__["OwlMultiYearViewComponent"]],
          styles: [""],
          changeDetection: 0
        });

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](OwlCalendarComponent, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
            args: [{
              selector: 'owl-date-time-calendar',
              exportAs: 'owlDateTimeCalendar',
              template: "<div class=\"owl-dt-calendar-control\"><!-- focus when keyboard tab (http://kizu.ru/en/blog/keyboard-only-focus/#x) --> <button class=\"owl-dt-control owl-dt-control-button owl-dt-control-arrow-button\" type=\"button\" tabindex=\"0\" [style.visibility]=\"showControlArrows? 'visible': 'hidden'\" [disabled]=\"!prevButtonEnabled()\" [attr.aria-label]=\"prevButtonLabel\" (click)=\"previousClicked()\"><span class=\"owl-dt-control-content owl-dt-control-button-content\" tabindex=\"-1\"><!-- <editor-fold desc=\"SVG Arrow Left\"> --> <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 250.738 250.738\" style=\"enable-background:new 0 0 250.738 250.738;\" xml:space=\"preserve\" width=\"100%\" height=\"100%\"><path style=\"fill-rule: evenodd; clip-rule: evenodd;\" d=\"M96.633,125.369l95.053-94.533c7.101-7.055,7.101-18.492,0-25.546   c-7.1-7.054-18.613-7.054-25.714,0L58.989,111.689c-3.784,3.759-5.487,8.759-5.238,13.68c-0.249,4.922,1.454,9.921,5.238,13.681   l106.983,106.398c7.101,7.055,18.613,7.055,25.714,0c7.101-7.054,7.101-18.491,0-25.544L96.633,125.369z\"/></svg><!-- </editor-fold> --></span></button><div class=\"owl-dt-calendar-control-content\"><button class=\"owl-dt-control owl-dt-control-button owl-dt-control-period-button\" type=\"button\" tabindex=\"0\" [attr.aria-label]=\"periodButtonLabel\" (click)=\"toggleViews()\"><span class=\"owl-dt-control-content owl-dt-control-button-content\" tabindex=\"-1\">{{periodButtonText}} <span class=\"owl-dt-control-button-arrow\" [style.transform]=\"'rotate(' + (isMonthView? 0 : 180) +'deg)'\"><!-- <editor-fold desc=\"SVG Arrow\"> --> <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" width=\"50%\" height=\"50%\" viewBox=\"0 0 292.362 292.362\" style=\"enable-background:new 0 0 292.362 292.362;\" xml:space=\"preserve\"><g><path d=\"M286.935,69.377c-3.614-3.617-7.898-5.424-12.848-5.424H18.274c-4.952,0-9.233,1.807-12.85,5.424\n                                C1.807,72.998,0,77.279,0,82.228c0,4.948,1.807,9.229,5.424,12.847l127.907,127.907c3.621,3.617,7.902,5.428,12.85,5.428\n                                s9.233-1.811,12.847-5.428L286.935,95.074c3.613-3.617,5.427-7.898,5.427-12.847C292.362,77.279,290.548,72.998,286.935,69.377z\"/></g></svg><!-- </editor-fold> --></span></span></button></div><button class=\"owl-dt-control owl-dt-control-button owl-dt-control-arrow-button\" type=\"button\" tabindex=\"0\" [style.visibility]=\"showControlArrows? 'visible': 'hidden'\" [disabled]=\"!nextButtonEnabled()\" [attr.aria-label]=\"nextButtonLabel\" (click)=\"nextClicked()\"><span class=\"owl-dt-control-content owl-dt-control-button-content\" tabindex=\"-1\"><!-- <editor-fold desc=\"SVG Arrow Right\"> --> <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 250.738 250.738\" style=\"enable-background:new 0 0 250.738 250.738;\" xml:space=\"preserve\"><path style=\"fill-rule:evenodd;clip-rule:evenodd;\" d=\"M191.75,111.689L84.766,5.291c-7.1-7.055-18.613-7.055-25.713,0\n                    c-7.101,7.054-7.101,18.49,0,25.544l95.053,94.534l-95.053,94.533c-7.101,7.054-7.101,18.491,0,25.545\n                    c7.1,7.054,18.613,7.054,25.713,0L191.75,139.05c3.784-3.759,5.487-8.759,5.238-13.681\n                    C197.237,120.447,195.534,115.448,191.75,111.689z\"/></svg><!-- </editor-fold> --></span></button></div><div class=\"owl-dt-calendar-main\" cdkMonitorSubtreeFocus [ngSwitch]=\"currentView\" tabindex=\"-1\"><owl-date-time-month-view *ngSwitchCase=\"'month'\" [pickerMoment]=\"pickerMoment\" [firstDayOfWeek]=\"firstDayOfWeek\" [selected]=\"selected\" [selecteds]=\"selecteds\" [selectMode]=\"selectMode\" [minDate]=\"minDate\" [maxDate]=\"maxDate\" [dateFilter]=\"dateFilter\" [hideOtherMonths]=\"hideOtherMonths\" (pickerMomentChange)=\"handlePickerMomentChange($event)\" (selectedChange)=\"dateSelected($event)\" (userSelection)=\"userSelected()\"></owl-date-time-month-view><owl-date-time-year-view *ngSwitchCase=\"'year'\" [pickerMoment]=\"pickerMoment\" [selected]=\"selected\" [selecteds]=\"selecteds\" [selectMode]=\"selectMode\" [minDate]=\"minDate\" [maxDate]=\"maxDate\" [dateFilter]=\"dateFilter\" (keyboardEnter)=\"focusActiveCell()\" (pickerMomentChange)=\"handlePickerMomentChange($event)\" (monthSelected)=\"selectMonthInYearView($event)\" (change)=\"goToDateInView($event, 'month')\"></owl-date-time-year-view><owl-date-time-multi-year-view *ngSwitchCase=\"'multi-years'\" [pickerMoment]=\"pickerMoment\" [selected]=\"selected\" [selecteds]=\"selecteds\" [selectMode]=\"selectMode\" [minDate]=\"minDate\" [maxDate]=\"maxDate\" [dateFilter]=\"dateFilter\" (keyboardEnter)=\"focusActiveCell()\" (pickerMomentChange)=\"handlePickerMomentChange($event)\" (yearSelected)=\"selectYearInMultiYearView($event)\" (change)=\"goToDateInView($event, 'year')\"></owl-date-time-multi-year-view></div>",
              styles: [""],
              preserveWhitespaces: false,
              changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush
            }]
          }], function () {
            return [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
            }, {
              type: _date_time_picker_intl_service__WEBPACK_IMPORTED_MODULE_1__["OwlDateTimeIntl"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
            }, {
              type: _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__["DateTimeAdapter"],
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
              }]
            }, {
              type: Object,
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
              }, {
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
                args: [_adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_8__["OWL_DATE_TIME_FORMATS"]]
              }]
            }];
          }, {
            firstDayOfWeek: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            startView: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            pickerMomentChange: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            selectedChange: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            userSelection: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            yearSelected: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            monthSelected: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            minDate: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            maxDate: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            pickerMoment: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            selected: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            selecteds: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            owlDTCalendarClass: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['class.owl-dt-calendar']
            }],
            dateFilter: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            selectMode: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            hideOtherMonths: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }]
          });
        })();

        return OwlCalendarComponent;
      }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64, 

      /***/

    },

    /***/
    "PSD3":
    /*!**********************************************************!*\
      !*** ./node_modules/sweetalert2/dist/sweetalert2.all.js ***!
      \**********************************************************/

    /*! no static exports found */

    /***/
    function PSD3(module, exports, __webpack_require__) {
      /*!
      * sweetalert2 v8.18.0
      * Released under the MIT License.
      */
      (function (global, factory) {
        true ? module.exports = factory() : undefined;
      })(this, function () {
        'use strict';

        function _typeof(obj) {
          if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
            _typeof = function _typeof(obj) {
              return typeof obj;
            };
          } else {
            _typeof = function _typeof(obj) {
              return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
            };
          }

          return _typeof(obj);
        }

        function _classCallCheck(instance, Constructor) {
          if (!(instance instanceof Constructor)) {
            throw new TypeError("Cannot call a class as a function");
          }
        }

        function _defineProperties(target, props) {
          for (var i = 0; i < props.length; i++) {
            var descriptor = props[i];
            descriptor.enumerable = descriptor.enumerable || false;
            descriptor.configurable = true;
            if ("value" in descriptor) descriptor.writable = true;
            Object.defineProperty(target, descriptor.key, descriptor);
          }
        }

        function _createClass(Constructor, protoProps, staticProps) {
          if (protoProps) _defineProperties(Constructor.prototype, protoProps);
          if (staticProps) _defineProperties(Constructor, staticProps);
          return Constructor;
        }

        function _extends() {
          _extends = Object.assign || function (target) {
            for (var i = 1; i < arguments.length; i++) {
              var source = arguments[i];

              for (var key in source) {
                if (Object.prototype.hasOwnProperty.call(source, key)) {
                  target[key] = source[key];
                }
              }
            }

            return target;
          };

          return _extends.apply(this, arguments);
        }

        function _inherits(subClass, superClass) {
          if (typeof superClass !== "function" && superClass !== null) {
            throw new TypeError("Super expression must either be null or a function");
          }

          subClass.prototype = Object.create(superClass && superClass.prototype, {
            constructor: {
              value: subClass,
              writable: true,
              configurable: true
            }
          });
          if (superClass) _setPrototypeOf(subClass, superClass);
        }

        function _getPrototypeOf(o) {
          _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
            return o.__proto__ || Object.getPrototypeOf(o);
          };
          return _getPrototypeOf(o);
        }

        function _setPrototypeOf(o, p) {
          _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
            o.__proto__ = p;
            return o;
          };

          return _setPrototypeOf(o, p);
        }

        function isNativeReflectConstruct() {
          if (typeof Reflect === "undefined" || !Reflect.construct) return false;
          if (Reflect.construct.sham) return false;
          if (typeof Proxy === "function") return true;

          try {
            Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));
            return true;
          } catch (e) {
            return false;
          }
        }

        function _construct(Parent, args, Class) {
          if (isNativeReflectConstruct()) {
            _construct = Reflect.construct;
          } else {
            _construct = function _construct(Parent, args, Class) {
              var a = [null];
              a.push.apply(a, args);
              var Constructor = Function.bind.apply(Parent, a);
              var instance = new Constructor();
              if (Class) _setPrototypeOf(instance, Class.prototype);
              return instance;
            };
          }

          return _construct.apply(null, arguments);
        }

        function _assertThisInitialized(self) {
          if (self === void 0) {
            throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
          }

          return self;
        }

        function _possibleConstructorReturn(self, call) {
          if (call && (typeof call === "object" || typeof call === "function")) {
            return call;
          }

          return _assertThisInitialized(self);
        }

        function _superPropBase(object, property) {
          while (!Object.prototype.hasOwnProperty.call(object, property)) {
            object = _getPrototypeOf(object);
            if (object === null) break;
          }

          return object;
        }

        function _get(target, property, receiver) {
          if (typeof Reflect !== "undefined" && Reflect.get) {
            _get = Reflect.get;
          } else {
            _get = function _get(target, property, receiver) {
              var base = _superPropBase(target, property);

              if (!base) return;
              var desc = Object.getOwnPropertyDescriptor(base, property);

              if (desc.get) {
                return desc.get.call(receiver);
              }

              return desc.value;
            };
          }

          return _get(target, property, receiver || target);
        }

        var consolePrefix = 'SweetAlert2:';
        /**
         * Filter the unique values into a new array
         * @param arr
         */

        var uniqueArray = function uniqueArray(arr) {
          var result = [];

          for (var i = 0; i < arr.length; i++) {
            if (result.indexOf(arr[i]) === -1) {
              result.push(arr[i]);
            }
          }

          return result;
        };
        /**
         * Returns the array ob object values (Object.values isn't supported in IE11)
         * @param obj
         */


        var objectValues = function objectValues(obj) {
          return Object.keys(obj).map(function (key) {
            return obj[key];
          });
        };
        /**
         * Convert NodeList to Array
         * @param nodeList
         */


        var toArray = function toArray(nodeList) {
          return Array.prototype.slice.call(nodeList);
        };
        /**
         * Standardise console warnings
         * @param message
         */


        var warn = function warn(message) {
          console.warn("".concat(consolePrefix, " ").concat(message));
        };
        /**
         * Standardise console errors
         * @param message
         */


        var error = function error(message) {
          console.error("".concat(consolePrefix, " ").concat(message));
        };
        /**
         * Private global state for `warnOnce`
         * @type {Array}
         * @private
         */


        var previousWarnOnceMessages = [];
        /**
         * Show a console warning, but only if it hasn't already been shown
         * @param message
         */

        var warnOnce = function warnOnce(message) {
          if (!(previousWarnOnceMessages.indexOf(message) !== -1)) {
            previousWarnOnceMessages.push(message);
            warn(message);
          }
        };
        /**
         * Show a one-time console warning about deprecated params/methods
         */


        var warnAboutDepreation = function warnAboutDepreation(deprecatedParam, useInstead) {
          warnOnce("\"".concat(deprecatedParam, "\" is deprecated and will be removed in the next major release. Please use \"").concat(useInstead, "\" instead."));
        };
        /**
         * If `arg` is a function, call it (with no arguments or context) and return the result.
         * Otherwise, just pass the value through
         * @param arg
         */


        var callIfFunction = function callIfFunction(arg) {
          return typeof arg === 'function' ? arg() : arg;
        };

        var isPromise = function isPromise(arg) {
          return arg && Promise.resolve(arg) === arg;
        };

        var DismissReason = Object.freeze({
          cancel: 'cancel',
          backdrop: 'backdrop',
          close: 'close',
          esc: 'esc',
          timer: 'timer'
        });

        var argsToParams = function argsToParams(args) {
          var params = {};

          switch (_typeof(args[0])) {
            case 'object':
              _extends(params, args[0]);

              break;

            default:
              ['title', 'html', 'type'].forEach(function (name, index) {
                switch (_typeof(args[index])) {
                  case 'string':
                    params[name] = args[index];
                    break;

                  case 'undefined':
                    break;

                  default:
                    error("Unexpected type of ".concat(name, "! Expected \"string\", got ").concat(_typeof(args[index])));
                }
              });
          }

          return params;
        };

        var swalPrefix = 'swal2-';

        var prefix = function prefix(items) {
          var result = {};

          for (var i in items) {
            result[items[i]] = swalPrefix + items[i];
          }

          return result;
        };

        var swalClasses = prefix(['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'toast', 'toast-shown', 'toast-column', 'fade', 'show', 'hide', 'noanimation', 'close', 'title', 'header', 'content', 'actions', 'confirm', 'cancel', 'footer', 'icon', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl']);
        var iconTypes = prefix(['success', 'warning', 'info', 'question', 'error']);
        var states = {
          previousBodyPadding: null
        };

        var hasClass = function hasClass(elem, className) {
          return elem.classList.contains(className);
        };

        var removeCustomClasses = function removeCustomClasses(elem) {
          toArray(elem.classList).forEach(function (className) {
            if (!(objectValues(swalClasses).indexOf(className) !== -1) && !(objectValues(iconTypes).indexOf(className) !== -1)) {
              elem.classList.remove(className);
            }
          });
        };

        var applyCustomClass = function applyCustomClass(elem, customClass, className) {
          removeCustomClasses(elem);

          if (customClass && customClass[className]) {
            if (typeof customClass[className] !== 'string' && !customClass[className].forEach) {
              return warn("Invalid type of customClass.".concat(className, "! Expected string or iterable object, got \"").concat(_typeof(customClass[className]), "\""));
            }

            addClass(elem, customClass[className]);
          }
        };

        function getInput(content, inputType) {
          if (!inputType) {
            return null;
          }

          switch (inputType) {
            case 'select':
            case 'textarea':
            case 'file':
              return getChildByClass(content, swalClasses[inputType]);

            case 'checkbox':
              return content.querySelector(".".concat(swalClasses.checkbox, " input"));

            case 'radio':
              return content.querySelector(".".concat(swalClasses.radio, " input:checked")) || content.querySelector(".".concat(swalClasses.radio, " input:first-child"));

            case 'range':
              return content.querySelector(".".concat(swalClasses.range, " input"));

            default:
              return getChildByClass(content, swalClasses.input);
          }
        }

        var focusInput = function focusInput(input) {
          input.focus(); // place cursor at end of text in text input

          if (input.type !== 'file') {
            // http://stackoverflow.com/a/2345915
            var val = input.value;
            input.value = '';
            input.value = val;
          }
        };

        var toggleClass = function toggleClass(target, classList, condition) {
          if (!target || !classList) {
            return;
          }

          if (typeof classList === 'string') {
            classList = classList.split(/\s+/).filter(Boolean);
          }

          classList.forEach(function (className) {
            if (target.forEach) {
              target.forEach(function (elem) {
                condition ? elem.classList.add(className) : elem.classList.remove(className);
              });
            } else {
              condition ? target.classList.add(className) : target.classList.remove(className);
            }
          });
        };

        var addClass = function addClass(target, classList) {
          toggleClass(target, classList, true);
        };

        var removeClass = function removeClass(target, classList) {
          toggleClass(target, classList, false);
        };

        var getChildByClass = function getChildByClass(elem, className) {
          for (var i = 0; i < elem.childNodes.length; i++) {
            if (hasClass(elem.childNodes[i], className)) {
              return elem.childNodes[i];
            }
          }
        };

        var applyNumericalStyle = function applyNumericalStyle(elem, property, value) {
          if (value || parseInt(value) === 0) {
            elem.style[property] = typeof value === 'number' ? value + 'px' : value;
          } else {
            elem.style.removeProperty(property);
          }
        };

        var show = function show(elem) {
          var display = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'flex';
          elem.style.opacity = '';
          elem.style.display = display;
        };

        var hide = function hide(elem) {
          elem.style.opacity = '';
          elem.style.display = 'none';
        };

        var toggle = function toggle(elem, condition, display) {
          condition ? show(elem, display) : hide(elem);
        }; // borrowed from jquery $(elem).is(':visible') implementation


        var isVisible = function isVisible(elem) {
          return !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length));
        };

        var isScrollable = function isScrollable(elem) {
          return !!(elem.scrollHeight > elem.clientHeight);
        }; // borrowed from https://stackoverflow.com/a/46352119


        var hasCssAnimation = function hasCssAnimation(elem) {
          var style = window.getComputedStyle(elem);
          var animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0');
          var transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0');
          return animDuration > 0 || transDuration > 0;
        };

        var contains = function contains(haystack, needle) {
          if (typeof haystack.contains === 'function') {
            return haystack.contains(needle);
          }
        };

        var getContainer = function getContainer() {
          return document.body.querySelector('.' + swalClasses.container);
        };

        var elementBySelector = function elementBySelector(selectorString) {
          var container = getContainer();
          return container ? container.querySelector(selectorString) : null;
        };

        var elementByClass = function elementByClass(className) {
          return elementBySelector('.' + className);
        };

        var getPopup = function getPopup() {
          return elementByClass(swalClasses.popup);
        };

        var getIcons = function getIcons() {
          var popup = getPopup();
          return toArray(popup.querySelectorAll('.' + swalClasses.icon));
        };

        var getIcon = function getIcon() {
          var visibleIcon = getIcons().filter(function (icon) {
            return isVisible(icon);
          });
          return visibleIcon.length ? visibleIcon[0] : null;
        };

        var getTitle = function getTitle() {
          return elementByClass(swalClasses.title);
        };

        var getContent = function getContent() {
          return elementByClass(swalClasses.content);
        };

        var getImage = function getImage() {
          return elementByClass(swalClasses.image);
        };

        var getProgressSteps = function getProgressSteps() {
          return elementByClass(swalClasses['progress-steps']);
        };

        var getValidationMessage = function getValidationMessage() {
          return elementByClass(swalClasses['validation-message']);
        };

        var getConfirmButton = function getConfirmButton() {
          return elementBySelector('.' + swalClasses.actions + ' .' + swalClasses.confirm);
        };

        var getCancelButton = function getCancelButton() {
          return elementBySelector('.' + swalClasses.actions + ' .' + swalClasses.cancel);
        };

        var getActions = function getActions() {
          return elementByClass(swalClasses.actions);
        };

        var getHeader = function getHeader() {
          return elementByClass(swalClasses.header);
        };

        var getFooter = function getFooter() {
          return elementByClass(swalClasses.footer);
        };

        var getCloseButton = function getCloseButton() {
          return elementByClass(swalClasses.close);
        }; // https://github.com/jkup/focusable/blob/master/index.js


        var focusable = "\n  a[href],\n  area[href],\n  input:not([disabled]),\n  select:not([disabled]),\n  textarea:not([disabled]),\n  button:not([disabled]),\n  iframe,\n  object,\n  embed,\n  [tabindex=\"0\"],\n  [contenteditable],\n  audio[controls],\n  video[controls],\n  summary\n";

        var getFocusableElements = function getFocusableElements() {
          var focusableElementsWithTabindex = toArray(getPopup().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')) // sort according to tabindex
          .sort(function (a, b) {
            a = parseInt(a.getAttribute('tabindex'));
            b = parseInt(b.getAttribute('tabindex'));

            if (a > b) {
              return 1;
            } else if (a < b) {
              return -1;
            }

            return 0;
          });
          var otherFocusableElements = toArray(getPopup().querySelectorAll(focusable)).filter(function (el) {
            return el.getAttribute('tabindex') !== '-1';
          });
          return uniqueArray(focusableElementsWithTabindex.concat(otherFocusableElements)).filter(function (el) {
            return isVisible(el);
          });
        };

        var isModal = function isModal() {
          return !isToast() && !document.body.classList.contains(swalClasses['no-backdrop']);
        };

        var isToast = function isToast() {
          return document.body.classList.contains(swalClasses['toast-shown']);
        };

        var isLoading = function isLoading() {
          return getPopup().hasAttribute('data-loading');
        }; // Detect Node env


        var isNodeEnv = function isNodeEnv() {
          return typeof window === 'undefined' || typeof document === 'undefined';
        };

        var sweetHTML = "\n <div aria-labelledby=\"".concat(swalClasses.title, "\" aria-describedby=\"").concat(swalClasses.content, "\" class=\"").concat(swalClasses.popup, "\" tabindex=\"-1\">\n   <div class=\"").concat(swalClasses.header, "\">\n     <ul class=\"").concat(swalClasses['progress-steps'], "\"></ul>\n     <div class=\"").concat(swalClasses.icon, " ").concat(iconTypes.error, "\">\n       <span class=\"swal2-x-mark\"><span class=\"swal2-x-mark-line-left\"></span><span class=\"swal2-x-mark-line-right\"></span></span>\n     </div>\n     <div class=\"").concat(swalClasses.icon, " ").concat(iconTypes.question, "\"></div>\n     <div class=\"").concat(swalClasses.icon, " ").concat(iconTypes.warning, "\"></div>\n     <div class=\"").concat(swalClasses.icon, " ").concat(iconTypes.info, "\"></div>\n     <div class=\"").concat(swalClasses.icon, " ").concat(iconTypes.success, "\">\n       <div class=\"swal2-success-circular-line-left\"></div>\n       <span class=\"swal2-success-line-tip\"></span> <span class=\"swal2-success-line-long\"></span>\n       <div class=\"swal2-success-ring\"></div> <div class=\"swal2-success-fix\"></div>\n       <div class=\"swal2-success-circular-line-right\"></div>\n     </div>\n     <img class=\"").concat(swalClasses.image, "\" />\n     <h2 class=\"").concat(swalClasses.title, "\" id=\"").concat(swalClasses.title, "\"></h2>\n     <button type=\"button\" class=\"").concat(swalClasses.close, "\"></button>\n   </div>\n   <div class=\"").concat(swalClasses.content, "\">\n     <div id=\"").concat(swalClasses.content, "\"></div>\n     <input class=\"").concat(swalClasses.input, "\" />\n     <input type=\"file\" class=\"").concat(swalClasses.file, "\" />\n     <div class=\"").concat(swalClasses.range, "\">\n       <input type=\"range\" />\n       <output></output>\n     </div>\n     <select class=\"").concat(swalClasses.select, "\"></select>\n     <div class=\"").concat(swalClasses.radio, "\"></div>\n     <label for=\"").concat(swalClasses.checkbox, "\" class=\"").concat(swalClasses.checkbox, "\">\n       <input type=\"checkbox\" />\n       <span class=\"").concat(swalClasses.label, "\"></span>\n     </label>\n     <textarea class=\"").concat(swalClasses.textarea, "\"></textarea>\n     <div class=\"").concat(swalClasses['validation-message'], "\" id=\"").concat(swalClasses['validation-message'], "\"></div>\n   </div>\n   <div class=\"").concat(swalClasses.actions, "\">\n     <button type=\"button\" class=\"").concat(swalClasses.confirm, "\">OK</button>\n     <button type=\"button\" class=\"").concat(swalClasses.cancel, "\">Cancel</button>\n   </div>\n   <div class=\"").concat(swalClasses.footer, "\">\n   </div>\n </div>\n").replace(/(^|\n)\s*/g, '');

        var resetOldContainer = function resetOldContainer() {
          var oldContainer = getContainer();

          if (!oldContainer) {
            return;
          }

          oldContainer.parentNode.removeChild(oldContainer);
          removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]);
        };

        var oldInputVal; // IE11 workaround, see #1109 for details

        var resetValidationMessage = function resetValidationMessage(e) {
          if (Swal.isVisible() && oldInputVal !== e.target.value) {
            Swal.resetValidationMessage();
          }

          oldInputVal = e.target.value;
        };

        var addInputChangeListeners = function addInputChangeListeners() {
          var content = getContent();
          var input = getChildByClass(content, swalClasses.input);
          var file = getChildByClass(content, swalClasses.file);
          var range = content.querySelector(".".concat(swalClasses.range, " input"));
          var rangeOutput = content.querySelector(".".concat(swalClasses.range, " output"));
          var select = getChildByClass(content, swalClasses.select);
          var checkbox = content.querySelector(".".concat(swalClasses.checkbox, " input"));
          var textarea = getChildByClass(content, swalClasses.textarea);
          input.oninput = resetValidationMessage;
          file.onchange = resetValidationMessage;
          select.onchange = resetValidationMessage;
          checkbox.onchange = resetValidationMessage;
          textarea.oninput = resetValidationMessage;

          range.oninput = function (e) {
            resetValidationMessage(e);
            rangeOutput.value = range.value;
          };

          range.onchange = function (e) {
            resetValidationMessage(e);
            range.nextSibling.value = range.value;
          };
        };

        var getTarget = function getTarget(target) {
          return typeof target === 'string' ? document.querySelector(target) : target;
        };

        var setupAccessibility = function setupAccessibility(params) {
          var popup = getPopup();
          popup.setAttribute('role', params.toast ? 'alert' : 'dialog');
          popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive');

          if (!params.toast) {
            popup.setAttribute('aria-modal', 'true');
          }
        };

        var setupRTL = function setupRTL(targetElement) {
          if (window.getComputedStyle(targetElement).direction === 'rtl') {
            addClass(getContainer(), swalClasses.rtl);
          }
        };
        /*
         * Add modal + backdrop to DOM
         */


        var init = function init(params) {
          // Clean up the old popup container if it exists
          resetOldContainer();
          /* istanbul ignore if */

          if (isNodeEnv()) {
            error('SweetAlert2 requires document to initialize');
            return;
          }

          var container = document.createElement('div');
          container.className = swalClasses.container;
          container.innerHTML = sweetHTML;
          var targetElement = getTarget(params.target);
          targetElement.appendChild(container);
          setupAccessibility(params);
          setupRTL(targetElement);
          addInputChangeListeners();
        };

        var parseHtmlToContainer = function parseHtmlToContainer(param, target) {
          // DOM element
          if (param instanceof HTMLElement) {
            target.appendChild(param); // JQuery element(s)
          } else if (_typeof(param) === 'object') {
            handleJqueryElem(target, param); // Plain string
          } else if (param) {
            target.innerHTML = param;
          }
        };

        var handleJqueryElem = function handleJqueryElem(target, elem) {
          target.innerHTML = '';

          if (0 in elem) {
            for (var i = 0; (i in elem); i++) {
              target.appendChild(elem[i].cloneNode(true));
            }
          } else {
            target.appendChild(elem.cloneNode(true));
          }
        };

        var animationEndEvent = function () {
          // Prevent run in Node env

          /* istanbul ignore if */
          if (isNodeEnv()) {
            return false;
          }

          var testEl = document.createElement('div');
          var transEndEventNames = {
            WebkitAnimation: 'webkitAnimationEnd',
            OAnimation: 'oAnimationEnd oanimationend',
            animation: 'animationend'
          };

          for (var i in transEndEventNames) {
            if (Object.prototype.hasOwnProperty.call(transEndEventNames, i) && typeof testEl.style[i] !== 'undefined') {
              return transEndEventNames[i];
            }
          }

          return false;
        }(); // Measure width of scrollbar
        // https://github.com/twbs/bootstrap/blob/master/js/modal.js#L279-L286


        var measureScrollbar = function measureScrollbar() {
          var supportsTouch = 'ontouchstart' in window || navigator.msMaxTouchPoints;

          if (supportsTouch) {
            return 0;
          }

          var scrollDiv = document.createElement('div');
          scrollDiv.style.width = '50px';
          scrollDiv.style.height = '50px';
          scrollDiv.style.overflow = 'scroll';
          document.body.appendChild(scrollDiv);
          var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
          document.body.removeChild(scrollDiv);
          return scrollbarWidth;
        };

        var renderActions = function renderActions(instance, params) {
          var actions = getActions();
          var confirmButton = getConfirmButton();
          var cancelButton = getCancelButton(); // Actions (buttons) wrapper

          if (!params.showConfirmButton && !params.showCancelButton) {
            hide(actions);
          } // Custom class


          applyCustomClass(actions, params.customClass, 'actions'); // Render confirm button

          renderButton(confirmButton, 'confirm', params); // render Cancel Button

          renderButton(cancelButton, 'cancel', params);

          if (params.buttonsStyling) {
            handleButtonsStyling(confirmButton, cancelButton, params);
          } else {
            removeClass([confirmButton, cancelButton], swalClasses.styled);
            confirmButton.style.backgroundColor = confirmButton.style.borderLeftColor = confirmButton.style.borderRightColor = '';
            cancelButton.style.backgroundColor = cancelButton.style.borderLeftColor = cancelButton.style.borderRightColor = '';
          }

          if (params.reverseButtons) {
            confirmButton.parentNode.insertBefore(cancelButton, confirmButton);
          }
        };

        function handleButtonsStyling(confirmButton, cancelButton, params) {
          addClass([confirmButton, cancelButton], swalClasses.styled); // Buttons background colors

          if (params.confirmButtonColor) {
            confirmButton.style.backgroundColor = params.confirmButtonColor;
          }

          if (params.cancelButtonColor) {
            cancelButton.style.backgroundColor = params.cancelButtonColor;
          } // Loading state


          var confirmButtonBackgroundColor = window.getComputedStyle(confirmButton).getPropertyValue('background-color');
          confirmButton.style.borderLeftColor = confirmButtonBackgroundColor;
          confirmButton.style.borderRightColor = confirmButtonBackgroundColor;
        }

        function renderButton(button, buttonType, params) {
          toggle(button, params['showC' + buttonType.substring(1) + 'Button'], 'inline-block');
          button.innerHTML = params[buttonType + 'ButtonText']; // Set caption text

          button.setAttribute('aria-label', params[buttonType + 'ButtonAriaLabel']); // ARIA label
          // Add buttons custom classes

          button.className = swalClasses[buttonType];
          applyCustomClass(button, params.customClass, buttonType + 'Button');
          addClass(button, params[buttonType + 'ButtonClass']);
        }

        function handleBackdropParam(container, backdrop) {
          if (typeof backdrop === 'string') {
            container.style.background = backdrop;
          } else if (!backdrop) {
            addClass([document.documentElement, document.body], swalClasses['no-backdrop']);
          }
        }

        function handlePositionParam(container, position) {
          if (position in swalClasses) {
            addClass(container, swalClasses[position]);
          } else {
            warn('The "position" parameter is not valid, defaulting to "center"');
            addClass(container, swalClasses.center);
          }
        }

        function handleGrowParam(container, grow) {
          if (grow && typeof grow === 'string') {
            var growClass = 'grow-' + grow;

            if (growClass in swalClasses) {
              addClass(container, swalClasses[growClass]);
            }
          }
        }

        var renderContainer = function renderContainer(instance, params) {
          var container = getContainer();

          if (!container) {
            return;
          }

          handleBackdropParam(container, params.backdrop);

          if (!params.backdrop && params.allowOutsideClick) {
            warn('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`');
          }

          handlePositionParam(container, params.position);
          handleGrowParam(container, params.grow); // Custom class

          applyCustomClass(container, params.customClass, 'container');

          if (params.customContainerClass) {
            // @deprecated
            addClass(container, params.customContainerClass);
          }
        };
        /**
         * This module containts `WeakMap`s for each effectively-"private  property" that a `Swal` has.
         * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')`
         * This is the approach that Babel will probably take to implement private methods/fields
         *   https://github.com/tc39/proposal-private-methods
         *   https://github.com/babel/babel/pull/7555
         * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module*
         *   then we can use that language feature.
         */


        var privateProps = {
          promise: new WeakMap(),
          innerParams: new WeakMap(),
          domCache: new WeakMap()
        };
        var inputTypes = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea'];

        var renderInput = function renderInput(instance, params) {
          var content = getContent();
          var innerParams = privateProps.innerParams.get(instance);
          var rerender = !innerParams || params.input !== innerParams.input;
          inputTypes.forEach(function (inputType) {
            var inputClass = swalClasses[inputType];
            var inputContainer = getChildByClass(content, inputClass); // set attributes

            setAttributes(inputType, params.inputAttributes); // set class

            setClass(inputContainer, inputClass, params);

            if (rerender) {
              hide(inputContainer);
            }
          });

          if (params.input && rerender) {
            showInput(params);
          }
        };

        var showInput = function showInput(params) {
          if (!renderInputType[params.input]) {
            return error("Unexpected type of input! Expected \"text\", \"email\", \"password\", \"number\", \"tel\", \"select\", \"radio\", \"checkbox\", \"textarea\", \"file\" or \"url\", got \"".concat(params.input, "\""));
          }

          var input = renderInputType[params.input](params);
          show(input); // input autofocus

          setTimeout(function () {
            focusInput(input);
          });
        };

        var removeAttributes = function removeAttributes(input) {
          for (var i = 0; i < input.attributes.length; i++) {
            var attrName = input.attributes[i].name;

            if (!(['type', 'value', 'style'].indexOf(attrName) !== -1)) {
              input.removeAttribute(attrName);
            }
          }
        };

        var setAttributes = function setAttributes(inputType, inputAttributes) {
          var input = getInput(getContent(), inputType);

          if (!input) {
            return;
          }

          removeAttributes(input);

          for (var attr in inputAttributes) {
            // Do not set a placeholder for <input type="range">
            // it'll crash Edge, #1298
            if (inputType === 'range' && attr === 'placeholder') {
              continue;
            }

            input.setAttribute(attr, inputAttributes[attr]);
          }
        };

        var setClass = function setClass(inputContainer, inputClass, params) {
          inputContainer.className = inputClass;

          if (params.inputClass) {
            addClass(inputContainer, params.inputClass);
          }

          if (params.customClass) {
            addClass(inputContainer, params.customClass.input);
          }
        };

        var setInputPlaceholder = function setInputPlaceholder(input, params) {
          if (!input.placeholder || params.inputPlaceholder) {
            input.placeholder = params.inputPlaceholder;
          }
        };

        var renderInputType = {};

        renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = function (params) {
          var input = getChildByClass(getContent(), swalClasses.input);

          if (typeof params.inputValue === 'string' || typeof params.inputValue === 'number') {
            input.value = params.inputValue;
          } else if (!isPromise(params.inputValue)) {
            warn("Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"".concat(_typeof(params.inputValue), "\""));
          }

          setInputPlaceholder(input, params);
          input.type = params.input;
          return input;
        };

        renderInputType.file = function (params) {
          var input = getChildByClass(getContent(), swalClasses.file);
          setInputPlaceholder(input, params);
          input.type = params.input;
          return input;
        };

        renderInputType.range = function (params) {
          var range = getChildByClass(getContent(), swalClasses.range);
          var rangeInput = range.querySelector('input');
          var rangeOutput = range.querySelector('output');
          rangeInput.value = params.inputValue;
          rangeInput.type = params.input;
          rangeOutput.value = params.inputValue;
          return range;
        };

        renderInputType.select = function (params) {
          var select = getChildByClass(getContent(), swalClasses.select);
          select.innerHTML = '';

          if (params.inputPlaceholder) {
            var placeholder = document.createElement('option');
            placeholder.innerHTML = params.inputPlaceholder;
            placeholder.value = '';
            placeholder.disabled = true;
            placeholder.selected = true;
            select.appendChild(placeholder);
          }

          return select;
        };

        renderInputType.radio = function () {
          var radio = getChildByClass(getContent(), swalClasses.radio);
          radio.innerHTML = '';
          return radio;
        };

        renderInputType.checkbox = function (params) {
          var checkbox = getChildByClass(getContent(), swalClasses.checkbox);
          var checkboxInput = getInput(getContent(), 'checkbox');
          checkboxInput.type = 'checkbox';
          checkboxInput.value = 1;
          checkboxInput.id = swalClasses.checkbox;
          checkboxInput.checked = Boolean(params.inputValue);
          var label = checkbox.querySelector('span');
          label.innerHTML = params.inputPlaceholder;
          return checkbox;
        };

        renderInputType.textarea = function (params) {
          var textarea = getChildByClass(getContent(), swalClasses.textarea);
          textarea.value = params.inputValue;
          setInputPlaceholder(textarea, params);

          if ('MutationObserver' in window) {
            // #1699
            var initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width);
            var popupPadding = parseInt(window.getComputedStyle(getPopup()).paddingLeft) + parseInt(window.getComputedStyle(getPopup()).paddingRight);

            var outputsize = function outputsize() {
              var contentWidth = textarea.offsetWidth + popupPadding;

              if (contentWidth > initialPopupWidth) {
                getPopup().style.width = contentWidth + 'px';
              } else {
                getPopup().style.width = null;
              }
            };

            new MutationObserver(outputsize).observe(textarea, {
              attributes: true,
              attributeFilter: ['style']
            });
          }

          return textarea;
        };

        var renderContent = function renderContent(instance, params) {
          var content = getContent().querySelector('#' + swalClasses.content); // Content as HTML

          if (params.html) {
            parseHtmlToContainer(params.html, content);
            show(content, 'block'); // Content as plain text
          } else if (params.text) {
            content.textContent = params.text;
            show(content, 'block'); // No content
          } else {
            hide(content);
          }

          renderInput(instance, params); // Custom class

          applyCustomClass(getContent(), params.customClass, 'content');
        };

        var renderFooter = function renderFooter(instance, params) {
          var footer = getFooter();
          toggle(footer, params.footer);

          if (params.footer) {
            parseHtmlToContainer(params.footer, footer);
          } // Custom class


          applyCustomClass(footer, params.customClass, 'footer');
        };

        var renderCloseButton = function renderCloseButton(instance, params) {
          var closeButton = getCloseButton();
          closeButton.innerHTML = params.closeButtonHtml; // Custom class

          applyCustomClass(closeButton, params.customClass, 'closeButton');
          toggle(closeButton, params.showCloseButton);
          closeButton.setAttribute('aria-label', params.closeButtonAriaLabel);
        };

        var renderIcon = function renderIcon(instance, params) {
          var innerParams = privateProps.innerParams.get(instance); // if the icon with the given type already rendered,
          // apply the custom class without re-rendering the icon

          if (innerParams && params.type === innerParams.type && getIcon()) {
            applyCustomClass(getIcon(), params.customClass, 'icon');
            return;
          }

          hideAllIcons();

          if (!params.type) {
            return;
          }

          adjustSuccessIconBackgoundColor();

          if (Object.keys(iconTypes).indexOf(params.type) !== -1) {
            var icon = elementBySelector(".".concat(swalClasses.icon, ".").concat(iconTypes[params.type]));
            show(icon); // Custom class

            applyCustomClass(icon, params.customClass, 'icon'); // Animate icon

            toggleClass(icon, "swal2-animate-".concat(params.type, "-icon"), params.animation);
          } else {
            error("Unknown type! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"".concat(params.type, "\""));
          }
        };

        var hideAllIcons = function hideAllIcons() {
          var icons = getIcons();

          for (var i = 0; i < icons.length; i++) {
            hide(icons[i]);
          }
        }; // Adjust success icon background color to match the popup background color


        var adjustSuccessIconBackgoundColor = function adjustSuccessIconBackgoundColor() {
          var popup = getPopup();
          var popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color');
          var successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix');

          for (var i = 0; i < successIconParts.length; i++) {
            successIconParts[i].style.backgroundColor = popupBackgroundColor;
          }
        };

        var renderImage = function renderImage(instance, params) {
          var image = getImage();

          if (!params.imageUrl) {
            return hide(image);
          }

          show(image); // Src, alt

          image.setAttribute('src', params.imageUrl);
          image.setAttribute('alt', params.imageAlt); // Width, height

          applyNumericalStyle(image, 'width', params.imageWidth);
          applyNumericalStyle(image, 'height', params.imageHeight); // Class

          image.className = swalClasses.image;
          applyCustomClass(image, params.customClass, 'image');

          if (params.imageClass) {
            addClass(image, params.imageClass);
          }
        };

        var createStepElement = function createStepElement(step) {
          var stepEl = document.createElement('li');
          addClass(stepEl, swalClasses['progress-step']);
          stepEl.innerHTML = step;
          return stepEl;
        };

        var createLineElement = function createLineElement(params) {
          var lineEl = document.createElement('li');
          addClass(lineEl, swalClasses['progress-step-line']);

          if (params.progressStepsDistance) {
            lineEl.style.width = params.progressStepsDistance;
          }

          return lineEl;
        };

        var renderProgressSteps = function renderProgressSteps(instance, params) {
          var progressStepsContainer = getProgressSteps();

          if (!params.progressSteps || params.progressSteps.length === 0) {
            return hide(progressStepsContainer);
          }

          show(progressStepsContainer);
          progressStepsContainer.innerHTML = '';
          var currentProgressStep = parseInt(params.currentProgressStep === null ? Swal.getQueueStep() : params.currentProgressStep);

          if (currentProgressStep >= params.progressSteps.length) {
            warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)');
          }

          params.progressSteps.forEach(function (step, index) {
            var stepEl = createStepElement(step);
            progressStepsContainer.appendChild(stepEl);

            if (index === currentProgressStep) {
              addClass(stepEl, swalClasses['active-progress-step']);
            }

            if (index !== params.progressSteps.length - 1) {
              var lineEl = createLineElement(step);
              progressStepsContainer.appendChild(lineEl);
            }
          });
        };

        var renderTitle = function renderTitle(instance, params) {
          var title = getTitle();
          toggle(title, params.title || params.titleText);

          if (params.title) {
            parseHtmlToContainer(params.title, title);
          }

          if (params.titleText) {
            title.innerText = params.titleText;
          } // Custom class


          applyCustomClass(title, params.customClass, 'title');
        };

        var renderHeader = function renderHeader(instance, params) {
          var header = getHeader(); // Custom class

          applyCustomClass(header, params.customClass, 'header'); // Progress steps

          renderProgressSteps(instance, params); // Icon

          renderIcon(instance, params); // Image

          renderImage(instance, params); // Title

          renderTitle(instance, params); // Close button

          renderCloseButton(instance, params);
        };

        var renderPopup = function renderPopup(instance, params) {
          var popup = getPopup(); // Width

          applyNumericalStyle(popup, 'width', params.width); // Padding

          applyNumericalStyle(popup, 'padding', params.padding); // Background

          if (params.background) {
            popup.style.background = params.background;
          } // Default Class


          popup.className = swalClasses.popup;

          if (params.toast) {
            addClass([document.documentElement, document.body], swalClasses['toast-shown']);
            addClass(popup, swalClasses.toast);
          } else {
            addClass(popup, swalClasses.modal);
          } // Custom class


          applyCustomClass(popup, params.customClass, 'popup');

          if (typeof params.customClass === 'string') {
            addClass(popup, params.customClass);
          } // CSS animation


          toggleClass(popup, swalClasses.noanimation, !params.animation);
        };

        var render = function render(instance, params) {
          renderPopup(instance, params);
          renderContainer(instance, params);
          renderHeader(instance, params);
          renderContent(instance, params);
          renderActions(instance, params);
          renderFooter(instance, params);

          if (typeof params.onRender === 'function') {
            params.onRender(getPopup());
          }
        };
        /*
         * Global function to determine if SweetAlert2 popup is shown
         */


        var isVisible$1 = function isVisible$$1() {
          return isVisible(getPopup());
        };
        /*
         * Global function to click 'Confirm' button
         */


        var clickConfirm = function clickConfirm() {
          return getConfirmButton() && getConfirmButton().click();
        };
        /*
         * Global function to click 'Cancel' button
         */


        var clickCancel = function clickCancel() {
          return getCancelButton() && getCancelButton().click();
        };

        function fire() {
          var Swal = this;

          for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
            args[_key] = arguments[_key];
          }

          return _construct(Swal, args);
        }
        /**
         * Returns an extended version of `Swal` containing `params` as defaults.
         * Useful for reusing Swal configuration.
         *
         * For example:
         *
         * Before:
         * const textPromptOptions = { input: 'text', showCancelButton: true }
         * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' })
         * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' })
         *
         * After:
         * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true })
         * const {value: firstName} = await TextPrompt('What is your first name?')
         * const {value: lastName} = await TextPrompt('What is your last name?')
         *
         * @param mixinParams
         */


        function mixin(mixinParams) {
          var MixinSwal = /*#__PURE__*/function (_this) {
            _inherits(MixinSwal, _this);

            function MixinSwal() {
              _classCallCheck(this, MixinSwal);

              return _possibleConstructorReturn(this, _getPrototypeOf(MixinSwal).apply(this, arguments));
            }

            _createClass(MixinSwal, [{
              key: "_main",
              value: function _main(params) {
                return _get(_getPrototypeOf(MixinSwal.prototype), "_main", this).call(this, _extends({}, mixinParams, params));
              }
            }]);

            return MixinSwal;
          }(this);

          return MixinSwal;
        } // private global state for the queue feature


        var currentSteps = [];
        /*
         * Global function for chaining sweetAlert popups
         */

        var queue = function queue(steps) {
          var Swal = this;
          currentSteps = steps;

          var resetAndResolve = function resetAndResolve(resolve, value) {
            currentSteps = [];
            document.body.removeAttribute('data-swal2-queue-step');
            resolve(value);
          };

          var queueResult = [];
          return new Promise(function (resolve) {
            (function step(i, callback) {
              if (i < currentSteps.length) {
                document.body.setAttribute('data-swal2-queue-step', i);
                Swal.fire(currentSteps[i]).then(function (result) {
                  if (typeof result.value !== 'undefined') {
                    queueResult.push(result.value);
                    step(i + 1, callback);
                  } else {
                    resetAndResolve(resolve, {
                      dismiss: result.dismiss
                    });
                  }
                });
              } else {
                resetAndResolve(resolve, {
                  value: queueResult
                });
              }
            })(0);
          });
        };
        /*
         * Global function for getting the index of current popup in queue
         */


        var getQueueStep = function getQueueStep() {
          return document.body.getAttribute('data-swal2-queue-step');
        };
        /*
         * Global function for inserting a popup to the queue
         */


        var insertQueueStep = function insertQueueStep(step, index) {
          if (index && index < currentSteps.length) {
            return currentSteps.splice(index, 0, step);
          }

          return currentSteps.push(step);
        };
        /*
         * Global function for deleting a popup from the queue
         */


        var deleteQueueStep = function deleteQueueStep(index) {
          if (typeof currentSteps[index] !== 'undefined') {
            currentSteps.splice(index, 1);
          }
        };
        /**
         * Show spinner instead of Confirm button and disable Cancel button
         */


        var showLoading = function showLoading() {
          var popup = getPopup();

          if (!popup) {
            Swal.fire('');
          }

          popup = getPopup();
          var actions = getActions();
          var confirmButton = getConfirmButton();
          var cancelButton = getCancelButton();
          show(actions);
          show(confirmButton);
          addClass([popup, actions], swalClasses.loading);
          confirmButton.disabled = true;
          cancelButton.disabled = true;
          popup.setAttribute('data-loading', true);
          popup.setAttribute('aria-busy', true);
          popup.focus();
        };

        var RESTORE_FOCUS_TIMEOUT = 100;
        var globalState = {};

        var focusPreviousActiveElement = function focusPreviousActiveElement() {
          if (globalState.previousActiveElement && globalState.previousActiveElement.focus) {
            globalState.previousActiveElement.focus();
            globalState.previousActiveElement = null;
          } else if (document.body) {
            document.body.focus();
          }
        }; // Restore previous active (focused) element


        var restoreActiveElement = function restoreActiveElement() {
          return new Promise(function (resolve) {
            var x = window.scrollX;
            var y = window.scrollY;
            globalState.restoreFocusTimeout = setTimeout(function () {
              focusPreviousActiveElement();
              resolve();
            }, RESTORE_FOCUS_TIMEOUT); // issues/900

            if (typeof x !== 'undefined' && typeof y !== 'undefined') {
              // IE doesn't have scrollX/scrollY support
              window.scrollTo(x, y);
            }
          });
        };
        /**
         * If `timer` parameter is set, returns number of milliseconds of timer remained.
         * Otherwise, returns undefined.
         */


        var getTimerLeft = function getTimerLeft() {
          return globalState.timeout && globalState.timeout.getTimerLeft();
        };
        /**
         * Stop timer. Returns number of milliseconds of timer remained.
         * If `timer` parameter isn't set, returns undefined.
         */


        var stopTimer = function stopTimer() {
          return globalState.timeout && globalState.timeout.stop();
        };
        /**
         * Resume timer. Returns number of milliseconds of timer remained.
         * If `timer` parameter isn't set, returns undefined.
         */


        var resumeTimer = function resumeTimer() {
          return globalState.timeout && globalState.timeout.start();
        };
        /**
         * Resume timer. Returns number of milliseconds of timer remained.
         * If `timer` parameter isn't set, returns undefined.
         */


        var toggleTimer = function toggleTimer() {
          var timer = globalState.timeout;
          return timer && (timer.running ? timer.stop() : timer.start());
        };
        /**
         * Increase timer. Returns number of milliseconds of an updated timer.
         * If `timer` parameter isn't set, returns undefined.
         */


        var increaseTimer = function increaseTimer(n) {
          return globalState.timeout && globalState.timeout.increase(n);
        };
        /**
         * Check if timer is running. Returns true if timer is running
         * or false if timer is paused or stopped.
         * If `timer` parameter isn't set, returns undefined
         */


        var isTimerRunning = function isTimerRunning() {
          return globalState.timeout && globalState.timeout.isRunning();
        };

        var defaultParams = {
          title: '',
          titleText: '',
          text: '',
          html: '',
          footer: '',
          type: null,
          toast: false,
          customClass: '',
          customContainerClass: '',
          target: 'body',
          backdrop: true,
          animation: true,
          heightAuto: true,
          allowOutsideClick: true,
          allowEscapeKey: true,
          allowEnterKey: true,
          stopKeydownPropagation: true,
          keydownListenerCapture: false,
          showConfirmButton: true,
          showCancelButton: false,
          preConfirm: null,
          confirmButtonText: 'OK',
          confirmButtonAriaLabel: '',
          confirmButtonColor: null,
          confirmButtonClass: '',
          cancelButtonText: 'Cancel',
          cancelButtonAriaLabel: '',
          cancelButtonColor: null,
          cancelButtonClass: '',
          buttonsStyling: true,
          reverseButtons: false,
          focusConfirm: true,
          focusCancel: false,
          showCloseButton: false,
          closeButtonHtml: '&times;',
          closeButtonAriaLabel: 'Close this dialog',
          showLoaderOnConfirm: false,
          imageUrl: null,
          imageWidth: null,
          imageHeight: null,
          imageAlt: '',
          imageClass: '',
          timer: null,
          width: null,
          padding: null,
          background: null,
          input: null,
          inputPlaceholder: '',
          inputValue: '',
          inputOptions: {},
          inputAutoTrim: true,
          inputClass: '',
          inputAttributes: {},
          inputValidator: null,
          validationMessage: null,
          grow: false,
          position: 'center',
          progressSteps: [],
          currentProgressStep: null,
          progressStepsDistance: null,
          onBeforeOpen: null,
          onOpen: null,
          onRender: null,
          onClose: null,
          onAfterClose: null,
          scrollbarPadding: true
        };
        var updatableParams = ['title', 'titleText', 'text', 'html', 'type', 'customClass', 'showConfirmButton', 'showCancelButton', 'confirmButtonText', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonClass', 'cancelButtonText', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonClass', 'buttonsStyling', 'reverseButtons', 'imageUrl', 'imageWidth', 'imageHeigth', 'imageAlt', 'imageClass', 'progressSteps', 'currentProgressStep'];
        var deprecatedParams = {
          customContainerClass: 'customClass',
          confirmButtonClass: 'customClass',
          cancelButtonClass: 'customClass',
          imageClass: 'customClass',
          inputClass: 'customClass'
        };
        var toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'focusConfirm', 'focusCancel', 'heightAuto', 'keydownListenerCapture'];
        /**
         * Is valid parameter
         * @param {String} paramName
         */

        var isValidParameter = function isValidParameter(paramName) {
          return Object.prototype.hasOwnProperty.call(defaultParams, paramName);
        };
        /**
         * Is valid parameter for Swal.update() method
         * @param {String} paramName
         */


        var isUpdatableParameter = function isUpdatableParameter(paramName) {
          return updatableParams.indexOf(paramName) !== -1;
        };
        /**
         * Is deprecated parameter
         * @param {String} paramName
         */


        var isDeprecatedParameter = function isDeprecatedParameter(paramName) {
          return deprecatedParams[paramName];
        };

        var checkIfParamIsValid = function checkIfParamIsValid(param) {
          if (!isValidParameter(param)) {
            warn("Unknown parameter \"".concat(param, "\""));
          }
        };

        var checkIfToastParamIsValid = function checkIfToastParamIsValid(param) {
          if (toastIncompatibleParams.indexOf(param) !== -1) {
            warn("The parameter \"".concat(param, "\" is incompatible with toasts"));
          }
        };

        var checkIfParamIsDeprecated = function checkIfParamIsDeprecated(param) {
          if (isDeprecatedParameter(param)) {
            warnAboutDepreation(param, isDeprecatedParameter(param));
          }
        };
        /**
         * Show relevant warnings for given params
         *
         * @param params
         */


        var showWarningsForParams = function showWarningsForParams(params) {
          for (var param in params) {
            checkIfParamIsValid(param);

            if (params.toast) {
              checkIfToastParamIsValid(param);
            }

            checkIfParamIsDeprecated();
          }
        };

        var staticMethods = Object.freeze({
          isValidParameter: isValidParameter,
          isUpdatableParameter: isUpdatableParameter,
          isDeprecatedParameter: isDeprecatedParameter,
          argsToParams: argsToParams,
          isVisible: isVisible$1,
          clickConfirm: clickConfirm,
          clickCancel: clickCancel,
          getContainer: getContainer,
          getPopup: getPopup,
          getTitle: getTitle,
          getContent: getContent,
          getImage: getImage,
          getIcon: getIcon,
          getIcons: getIcons,
          getCloseButton: getCloseButton,
          getActions: getActions,
          getConfirmButton: getConfirmButton,
          getCancelButton: getCancelButton,
          getHeader: getHeader,
          getFooter: getFooter,
          getFocusableElements: getFocusableElements,
          getValidationMessage: getValidationMessage,
          isLoading: isLoading,
          fire: fire,
          mixin: mixin,
          queue: queue,
          getQueueStep: getQueueStep,
          insertQueueStep: insertQueueStep,
          deleteQueueStep: deleteQueueStep,
          showLoading: showLoading,
          enableLoading: showLoading,
          getTimerLeft: getTimerLeft,
          stopTimer: stopTimer,
          resumeTimer: resumeTimer,
          toggleTimer: toggleTimer,
          increaseTimer: increaseTimer,
          isTimerRunning: isTimerRunning
        });
        /**
         * Enables buttons and hide loader.
         */

        function hideLoading() {
          var innerParams = privateProps.innerParams.get(this);
          var domCache = privateProps.domCache.get(this);

          if (!innerParams.showConfirmButton) {
            hide(domCache.confirmButton);

            if (!innerParams.showCancelButton) {
              hide(domCache.actions);
            }
          }

          removeClass([domCache.popup, domCache.actions], swalClasses.loading);
          domCache.popup.removeAttribute('aria-busy');
          domCache.popup.removeAttribute('data-loading');
          domCache.confirmButton.disabled = false;
          domCache.cancelButton.disabled = false;
        }

        function getInput$1(instance) {
          var innerParams = privateProps.innerParams.get(instance || this);
          var domCache = privateProps.domCache.get(instance || this);

          if (!domCache) {
            return null;
          }

          return getInput(domCache.content, innerParams.input);
        }

        var fixScrollbar = function fixScrollbar() {
          // for queues, do not do this more than once
          if (states.previousBodyPadding !== null) {
            return;
          } // if the body has overflow


          if (document.body.scrollHeight > window.innerHeight) {
            // add padding so the content doesn't shift after removal of scrollbar
            states.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right'));
            document.body.style.paddingRight = states.previousBodyPadding + measureScrollbar() + 'px';
          }
        };

        var undoScrollbar = function undoScrollbar() {
          if (states.previousBodyPadding !== null) {
            document.body.style.paddingRight = states.previousBodyPadding + 'px';
            states.previousBodyPadding = null;
          }
        };
        /* istanbul ignore next */


        var iOSfix = function iOSfix() {
          var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;

          if (iOS && !hasClass(document.body, swalClasses.iosfix)) {
            var offset = document.body.scrollTop;
            document.body.style.top = offset * -1 + 'px';
            addClass(document.body, swalClasses.iosfix);
            lockBodyScroll();
          }
        };

        var lockBodyScroll = function lockBodyScroll() {
          // #1246
          var container = getContainer();
          var preventTouchMove;

          container.ontouchstart = function (e) {
            preventTouchMove = e.target === container || !isScrollable(container) && e.target.tagName !== 'INPUT' // #1603
            ;
          };

          container.ontouchmove = function (e) {
            if (preventTouchMove) {
              e.preventDefault();
              e.stopPropagation();
            }
          };
        };
        /* istanbul ignore next */


        var undoIOSfix = function undoIOSfix() {
          if (hasClass(document.body, swalClasses.iosfix)) {
            var offset = parseInt(document.body.style.top, 10);
            removeClass(document.body, swalClasses.iosfix);
            document.body.style.top = '';
            document.body.scrollTop = offset * -1;
          }
        };

        var isIE11 = function isIE11() {
          return !!window.MSInputMethodContext && !!document.documentMode;
        }; // Fix IE11 centering sweetalert2/issues/933

        /* istanbul ignore next */


        var fixVerticalPositionIE = function fixVerticalPositionIE() {
          var container = getContainer();
          var popup = getPopup();
          container.style.removeProperty('align-items');

          if (popup.offsetTop < 0) {
            container.style.alignItems = 'flex-start';
          }
        };
        /* istanbul ignore next */


        var IEfix = function IEfix() {
          if (typeof window !== 'undefined' && isIE11()) {
            fixVerticalPositionIE();
            window.addEventListener('resize', fixVerticalPositionIE);
          }
        };
        /* istanbul ignore next */


        var undoIEfix = function undoIEfix() {
          if (typeof window !== 'undefined' && isIE11()) {
            window.removeEventListener('resize', fixVerticalPositionIE);
          }
        }; // Adding aria-hidden="true" to elements outside of the active modal dialog ensures that
        // elements not within the active modal dialog will not be surfaced if a user opens a screen
        // reader’s list of elements (headings, form controls, landmarks, etc.) in the document.


        var setAriaHidden = function setAriaHidden() {
          var bodyChildren = toArray(document.body.children);
          bodyChildren.forEach(function (el) {
            if (el === getContainer() || contains(el, getContainer())) {
              return;
            }

            if (el.hasAttribute('aria-hidden')) {
              el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden'));
            }

            el.setAttribute('aria-hidden', 'true');
          });
        };

        var unsetAriaHidden = function unsetAriaHidden() {
          var bodyChildren = toArray(document.body.children);
          bodyChildren.forEach(function (el) {
            if (el.hasAttribute('data-previous-aria-hidden')) {
              el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden'));
              el.removeAttribute('data-previous-aria-hidden');
            } else {
              el.removeAttribute('aria-hidden');
            }
          });
        };
        /**
         * This module containts `WeakMap`s for each effectively-"private  property" that a `Swal` has.
         * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')`
         * This is the approach that Babel will probably take to implement private methods/fields
         *   https://github.com/tc39/proposal-private-methods
         *   https://github.com/babel/babel/pull/7555
         * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module*
         *   then we can use that language feature.
         */


        var privateMethods = {
          swalPromiseResolve: new WeakMap()
        };
        /*
         * Instance method to close sweetAlert
         */

        function removePopupAndResetState(instance, container, isToast, onAfterClose) {
          if (isToast) {
            triggerOnAfterCloseAndDispose(instance, onAfterClose);
          } else {
            restoreActiveElement().then(function () {
              return triggerOnAfterCloseAndDispose(instance, onAfterClose);
            });
            globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, {
              capture: globalState.keydownListenerCapture
            });
            globalState.keydownHandlerAdded = false;
          }

          if (container.parentNode) {
            container.parentNode.removeChild(container);
          }

          if (isModal()) {
            undoScrollbar();
            undoIOSfix();
            undoIEfix();
            unsetAriaHidden();
          }

          removeBodyClasses();
        }

        function removeBodyClasses() {
          removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['toast-column']]);
        }

        function disposeSwal(instance) {
          // Unset this.params so GC will dispose it (#1569)
          delete instance.params; // Unset globalState props so GC will dispose globalState (#1569)

          delete globalState.keydownHandler;
          delete globalState.keydownTarget; // Unset WeakMaps so GC will be able to dispose them (#1569)

          unsetWeakMaps(privateProps);
          unsetWeakMaps(privateMethods);
        }

        function close(resolveValue) {
          var popup = getPopup();

          if (!popup || hasClass(popup, swalClasses.hide)) {
            return;
          }

          var innerParams = privateProps.innerParams.get(this);

          if (!innerParams) {
            return;
          }

          var swalPromiseResolve = privateMethods.swalPromiseResolve.get(this);
          removeClass(popup, swalClasses.show);
          addClass(popup, swalClasses.hide);
          handlePopupAnimation(this, popup, innerParams); // Resolve Swal promise

          swalPromiseResolve(resolveValue || {});
        }

        var handlePopupAnimation = function handlePopupAnimation(instance, popup, innerParams) {
          var container = getContainer(); // If animation is supported, animate

          var animationIsSupported = animationEndEvent && hasCssAnimation(popup);
          var onClose = innerParams.onClose,
              onAfterClose = innerParams.onAfterClose;

          if (onClose !== null && typeof onClose === 'function') {
            onClose(popup);
          }

          if (animationIsSupported) {
            animatePopup(instance, popup, container, onAfterClose);
          } else {
            // Otherwise, remove immediately
            removePopupAndResetState(instance, container, isToast(), onAfterClose);
          }
        };

        var animatePopup = function animatePopup(instance, popup, container, onAfterClose) {
          globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, isToast(), onAfterClose);
          popup.addEventListener(animationEndEvent, function (e) {
            if (e.target === popup) {
              globalState.swalCloseEventFinishedCallback();
              delete globalState.swalCloseEventFinishedCallback;
            }
          });
        };

        var unsetWeakMaps = function unsetWeakMaps(obj) {
          for (var i in obj) {
            obj[i] = new WeakMap();
          }
        };

        var triggerOnAfterCloseAndDispose = function triggerOnAfterCloseAndDispose(instance, onAfterClose) {
          setTimeout(function () {
            if (onAfterClose !== null && typeof onAfterClose === 'function') {
              onAfterClose();
            }

            if (!getPopup()) {
              disposeSwal(instance);
            }
          });
        };

        function setButtonsDisabled(instance, buttons, disabled) {
          var domCache = privateProps.domCache.get(instance);
          buttons.forEach(function (button) {
            domCache[button].disabled = disabled;
          });
        }

        function setInputDisabled(input, disabled) {
          if (!input) {
            return false;
          }

          if (input.type === 'radio') {
            var radiosContainer = input.parentNode.parentNode;
            var radios = radiosContainer.querySelectorAll('input');

            for (var i = 0; i < radios.length; i++) {
              radios[i].disabled = disabled;
            }
          } else {
            input.disabled = disabled;
          }
        }

        function enableButtons() {
          setButtonsDisabled(this, ['confirmButton', 'cancelButton'], false);
        }

        function disableButtons() {
          setButtonsDisabled(this, ['confirmButton', 'cancelButton'], true);
        } // @deprecated


        function enableConfirmButton() {
          warnAboutDepreation('Swal.enableConfirmButton()', "Swal.getConfirmButton().removeAttribute('disabled')");
          setButtonsDisabled(this, ['confirmButton'], false);
        } // @deprecated


        function disableConfirmButton() {
          warnAboutDepreation('Swal.disableConfirmButton()', "Swal.getConfirmButton().setAttribute('disabled', '')");
          setButtonsDisabled(this, ['confirmButton'], true);
        }

        function enableInput() {
          return setInputDisabled(this.getInput(), false);
        }

        function disableInput() {
          return setInputDisabled(this.getInput(), true);
        }

        function showValidationMessage(error) {
          var domCache = privateProps.domCache.get(this);
          domCache.validationMessage.innerHTML = error;
          var popupComputedStyle = window.getComputedStyle(domCache.popup);
          domCache.validationMessage.style.marginLeft = "-".concat(popupComputedStyle.getPropertyValue('padding-left'));
          domCache.validationMessage.style.marginRight = "-".concat(popupComputedStyle.getPropertyValue('padding-right'));
          show(domCache.validationMessage);
          var input = this.getInput();

          if (input) {
            input.setAttribute('aria-invalid', true);
            input.setAttribute('aria-describedBy', swalClasses['validation-message']);
            focusInput(input);
            addClass(input, swalClasses.inputerror);
          }
        } // Hide block with validation message


        function resetValidationMessage$1() {
          var domCache = privateProps.domCache.get(this);

          if (domCache.validationMessage) {
            hide(domCache.validationMessage);
          }

          var input = this.getInput();

          if (input) {
            input.removeAttribute('aria-invalid');
            input.removeAttribute('aria-describedBy');
            removeClass(input, swalClasses.inputerror);
          }
        }

        function getProgressSteps$1() {
          warnAboutDepreation('Swal.getProgressSteps()', "const swalInstance = Swal.fire({progressSteps: ['1', '2', '3']}); const progressSteps = swalInstance.params.progressSteps");
          var innerParams = privateProps.innerParams.get(this);
          return innerParams.progressSteps;
        }

        function setProgressSteps(progressSteps) {
          warnAboutDepreation('Swal.setProgressSteps()', 'Swal.update()');
          var innerParams = privateProps.innerParams.get(this);

          var updatedParams = _extends({}, innerParams, {
            progressSteps: progressSteps
          });

          renderProgressSteps(this, updatedParams);
          privateProps.innerParams.set(this, updatedParams);
        }

        function showProgressSteps() {
          var domCache = privateProps.domCache.get(this);
          show(domCache.progressSteps);
        }

        function hideProgressSteps() {
          var domCache = privateProps.domCache.get(this);
          hide(domCache.progressSteps);
        }

        var Timer = /*#__PURE__*/function () {
          function Timer(callback, delay) {
            _classCallCheck(this, Timer);

            this.callback = callback;
            this.remaining = delay;
            this.running = false;
            this.start();
          }

          _createClass(Timer, [{
            key: "start",
            value: function start() {
              if (!this.running) {
                this.running = true;
                this.started = new Date();
                this.id = setTimeout(this.callback, this.remaining);
              }

              return this.remaining;
            }
          }, {
            key: "stop",
            value: function stop() {
              if (this.running) {
                this.running = false;
                clearTimeout(this.id);
                this.remaining -= new Date() - this.started;
              }

              return this.remaining;
            }
          }, {
            key: "increase",
            value: function increase(n) {
              var running = this.running;

              if (running) {
                this.stop();
              }

              this.remaining += n;

              if (running) {
                this.start();
              }

              return this.remaining;
            }
          }, {
            key: "getTimerLeft",
            value: function getTimerLeft() {
              if (this.running) {
                this.stop();
                this.start();
              }

              return this.remaining;
            }
          }, {
            key: "isRunning",
            value: function isRunning() {
              return this.running;
            }
          }]);

          return Timer;
        }();

        var defaultInputValidators = {
          email: function email(string, validationMessage) {
            return /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address');
          },
          url: function url(string, validationMessage) {
            // taken from https://stackoverflow.com/a/3809435 with a small change from #1306
            return /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid URL');
          }
        };

        function setDefaultInputValidators(params) {
          // Use default `inputValidator` for supported input types if not provided
          if (!params.inputValidator) {
            Object.keys(defaultInputValidators).forEach(function (key) {
              if (params.input === key) {
                params.inputValidator = defaultInputValidators[key];
              }
            });
          }
        }

        function validateCustomTargetElement(params) {
          // Determine if the custom target element is valid
          if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) {
            warn('Target parameter is not valid, defaulting to "body"');
            params.target = 'body';
          }
        }
        /**
         * Set type, text and actions on popup
         *
         * @param params
         * @returns {boolean}
         */


        function setParameters(params) {
          setDefaultInputValidators(params); // showLoaderOnConfirm && preConfirm

          if (params.showLoaderOnConfirm && !params.preConfirm) {
            warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\n' + 'https://sweetalert2.github.io/#ajax-request');
          } // params.animation will be actually used in renderPopup.js
          // but in case when params.animation is a function, we need to call that function
          // before popup (re)initialization, so it'll be possible to check Swal.isVisible()
          // inside the params.animation function


          params.animation = callIfFunction(params.animation);
          validateCustomTargetElement(params); // Replace newlines with <br> in title

          if (typeof params.title === 'string') {
            params.title = params.title.split('\n').join('<br />');
          }

          init(params);
        }

        function swalOpenAnimationFinished(popup, container) {
          popup.removeEventListener(animationEndEvent, swalOpenAnimationFinished);
          container.style.overflowY = 'auto';
        }
        /**
         * Open popup, add necessary classes and styles, fix scrollbar
         *
         * @param {Array} params
         */


        var openPopup = function openPopup(params) {
          var container = getContainer();
          var popup = getPopup();

          if (typeof params.onBeforeOpen === 'function') {
            params.onBeforeOpen(popup);
          }

          addClasses(container, popup, params); // scrolling is 'hidden' until animation is done, after that 'auto'

          setScrollingVisibility(container, popup);

          if (isModal()) {
            fixScrollContainer(container, params.scrollbarPadding);
          }

          if (!isToast() && !globalState.previousActiveElement) {
            globalState.previousActiveElement = document.activeElement;
          }

          if (typeof params.onOpen === 'function') {
            setTimeout(function () {
              return params.onOpen(popup);
            });
          }
        };

        var setScrollingVisibility = function setScrollingVisibility(container, popup) {
          if (animationEndEvent && hasCssAnimation(popup)) {
            container.style.overflowY = 'hidden';
            popup.addEventListener(animationEndEvent, swalOpenAnimationFinished.bind(null, popup, container));
          } else {
            container.style.overflowY = 'auto';
          }
        };

        var fixScrollContainer = function fixScrollContainer(container, scrollbarPadding) {
          iOSfix();
          IEfix();
          setAriaHidden();

          if (scrollbarPadding) {
            fixScrollbar();
          } // sweetalert2/issues/1247


          setTimeout(function () {
            container.scrollTop = 0;
          });
        };

        var addClasses = function addClasses(container, popup, params) {
          if (params.animation) {
            addClass(popup, swalClasses.show);
            addClass(container, swalClasses.fade);
          }

          show(popup);
          addClass([document.documentElement, document.body, container], swalClasses.shown);

          if (params.heightAuto && params.backdrop && !params.toast) {
            addClass([document.documentElement, document.body], swalClasses['height-auto']);
          }
        };

        var handleInputOptionsAndValue = function handleInputOptionsAndValue(instance, params) {
          if (params.input === 'select' || params.input === 'radio') {
            handleInputOptions(instance, params);
          } else if (['text', 'email', 'number', 'tel', 'textarea'].indexOf(params.input) !== -1 && isPromise(params.inputValue)) {
            handleInputValue(instance, params);
          }
        };

        var handleInputOptions = function handleInputOptions(instance, params) {
          var content = getContent();

          var processInputOptions = function processInputOptions(inputOptions) {
            return populateInputOptions[params.input](content, formatInputOptions(inputOptions), params);
          };

          if (isPromise(params.inputOptions)) {
            showLoading();
            params.inputOptions.then(function (inputOptions) {
              instance.hideLoading();
              processInputOptions(inputOptions);
            });
          } else if (_typeof(params.inputOptions) === 'object') {
            processInputOptions(params.inputOptions);
          } else {
            error("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(_typeof(params.inputOptions)));
          }
        };

        var handleInputValue = function handleInputValue(instance, params) {
          var input = instance.getInput();
          hide(input);
          params.inputValue.then(function (inputValue) {
            input.value = params.input === 'number' ? parseFloat(inputValue) || 0 : inputValue + '';
            show(input);
            input.focus();
            instance.hideLoading();
          })["catch"](function (err) {
            error('Error in inputValue promise: ' + err);
            input.value = '';
            show(input);
            input.focus();
            instance.hideLoading();
          });
        };

        var populateInputOptions = {
          select: function select(content, inputOptions, params) {
            var select = getChildByClass(content, swalClasses.select);
            inputOptions.forEach(function (inputOption) {
              var optionValue = inputOption[0];
              var optionLabel = inputOption[1];
              var option = document.createElement('option');
              option.value = optionValue;
              option.innerHTML = optionLabel;

              if (params.inputValue.toString() === optionValue.toString()) {
                option.selected = true;
              }

              select.appendChild(option);
            });
            select.focus();
          },
          radio: function radio(content, inputOptions, params) {
            var radio = getChildByClass(content, swalClasses.radio);
            inputOptions.forEach(function (inputOption) {
              var radioValue = inputOption[0];
              var radioLabel = inputOption[1];
              var radioInput = document.createElement('input');
              var radioLabelElement = document.createElement('label');
              radioInput.type = 'radio';
              radioInput.name = swalClasses.radio;
              radioInput.value = radioValue;

              if (params.inputValue.toString() === radioValue.toString()) {
                radioInput.checked = true;
              }

              var label = document.createElement('span');
              label.innerHTML = radioLabel;
              label.className = swalClasses.label;
              radioLabelElement.appendChild(radioInput);
              radioLabelElement.appendChild(label);
              radio.appendChild(radioLabelElement);
            });
            var radios = radio.querySelectorAll('input');

            if (radios.length) {
              radios[0].focus();
            }
          }
          /**
           * Converts `inputOptions` into an array of `[value, label]`s
           * @param inputOptions
           */

        };

        var formatInputOptions = function formatInputOptions(inputOptions) {
          var result = [];

          if (typeof Map !== 'undefined' && inputOptions instanceof Map) {
            inputOptions.forEach(function (value, key) {
              result.push([key, value]);
            });
          } else {
            Object.keys(inputOptions).forEach(function (key) {
              result.push([key, inputOptions[key]]);
            });
          }

          return result;
        };

        var handleConfirmButtonClick = function handleConfirmButtonClick(instance, innerParams) {
          instance.disableButtons();

          if (innerParams.input) {
            handleConfirmWithInput(instance, innerParams);
          } else {
            confirm(instance, innerParams, true);
          }
        };

        var handleCancelButtonClick = function handleCancelButtonClick(instance, dismissWith) {
          instance.disableButtons();
          dismissWith(DismissReason.cancel);
        };

        var handleConfirmWithInput = function handleConfirmWithInput(instance, innerParams) {
          var inputValue = getInputValue(instance, innerParams);

          if (innerParams.inputValidator) {
            instance.disableInput();
            var validationPromise = Promise.resolve().then(function () {
              return innerParams.inputValidator(inputValue, innerParams.validationMessage);
            });
            validationPromise.then(function (validationMessage) {
              instance.enableButtons();
              instance.enableInput();

              if (validationMessage) {
                instance.showValidationMessage(validationMessage);
              } else {
                confirm(instance, innerParams, inputValue);
              }
            });
          } else if (!instance.getInput().checkValidity()) {
            instance.enableButtons();
            instance.showValidationMessage(innerParams.validationMessage);
          } else {
            confirm(instance, innerParams, inputValue);
          }
        };

        var succeedWith = function succeedWith(instance, value) {
          instance.closePopup({
            value: value
          });
        };

        var confirm = function confirm(instance, innerParams, value) {
          if (innerParams.showLoaderOnConfirm) {
            showLoading(); // TODO: make showLoading an *instance* method
          }

          if (innerParams.preConfirm) {
            instance.resetValidationMessage();
            var preConfirmPromise = Promise.resolve().then(function () {
              return innerParams.preConfirm(value, innerParams.validationMessage);
            });
            preConfirmPromise.then(function (preConfirmValue) {
              if (isVisible(getValidationMessage()) || preConfirmValue === false) {
                instance.hideLoading();
              } else {
                succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue);
              }
            });
          } else {
            succeedWith(instance, value);
          }
        };

        var getInputValue = function getInputValue(instance, innerParams) {
          var input = instance.getInput();

          if (!input) {
            return null;
          }

          switch (innerParams.input) {
            case 'checkbox':
              return getCheckboxValue(input);

            case 'radio':
              return getRadioValue(input);

            case 'file':
              return getFileValue(input);

            default:
              return innerParams.inputAutoTrim ? input.value.trim() : input.value;
          }
        };

        var getCheckboxValue = function getCheckboxValue(input) {
          return input.checked ? 1 : 0;
        };

        var getRadioValue = function getRadioValue(input) {
          return input.checked ? input.value : null;
        };

        var getFileValue = function getFileValue(input) {
          return input.files.length ? input.files[0] : null;
        };

        var addKeydownHandler = function addKeydownHandler(instance, globalState, innerParams, dismissWith) {
          if (globalState.keydownTarget && globalState.keydownHandlerAdded) {
            globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, {
              capture: globalState.keydownListenerCapture
            });
            globalState.keydownHandlerAdded = false;
          }

          if (!innerParams.toast) {
            globalState.keydownHandler = function (e) {
              return keydownHandler(instance, e, innerParams, dismissWith);
            };

            globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup();
            globalState.keydownListenerCapture = innerParams.keydownListenerCapture;
            globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, {
              capture: globalState.keydownListenerCapture
            });
            globalState.keydownHandlerAdded = true;
          }
        }; // Focus handling


        var setFocus = function setFocus(innerParams, index, increment) {
          var focusableElements = getFocusableElements(); // search for visible elements and select the next possible match

          for (var i = 0; i < focusableElements.length; i++) {
            index = index + increment; // rollover to first item

            if (index === focusableElements.length) {
              index = 0; // go to last item
            } else if (index === -1) {
              index = focusableElements.length - 1;
            }

            return focusableElements[index].focus();
          } // no visible focusable elements, focus the popup


          getPopup().focus();
        };

        var arrowKeys = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Left', 'Right', 'Up', 'Down' // IE11
        ];
        var escKeys = ['Escape', 'Esc' // IE11
        ];

        var keydownHandler = function keydownHandler(instance, e, innerParams, dismissWith) {
          if (innerParams.stopKeydownPropagation) {
            e.stopPropagation();
          } // ENTER


          if (e.key === 'Enter') {
            handleEnter(instance, e, innerParams); // TAB
          } else if (e.key === 'Tab') {
            handleTab(e, innerParams); // ARROWS - switch focus between buttons
          } else if (arrowKeys.indexOf(e.key) !== -1) {
            handleArrows(); // ESC
          } else if (escKeys.indexOf(e.key) !== -1) {
            handleEsc(e, innerParams, dismissWith);
          }
        };

        var handleEnter = function handleEnter(instance, e, innerParams) {
          // #720 #721
          if (e.isComposing) {
            return;
          }

          if (e.target && instance.getInput() && e.target.outerHTML === instance.getInput().outerHTML) {
            if (['textarea', 'file'].indexOf(innerParams.input) !== -1) {
              return; // do not submit
            }

            clickConfirm();
            e.preventDefault();
          }
        };

        var handleTab = function handleTab(e, innerParams) {
          var targetElement = e.target;
          var focusableElements = getFocusableElements();
          var btnIndex = -1;

          for (var i = 0; i < focusableElements.length; i++) {
            if (targetElement === focusableElements[i]) {
              btnIndex = i;
              break;
            }
          }

          if (!e.shiftKey) {
            // Cycle to the next button
            setFocus(innerParams, btnIndex, 1);
          } else {
            // Cycle to the prev button
            setFocus(innerParams, btnIndex, -1);
          }

          e.stopPropagation();
          e.preventDefault();
        };

        var handleArrows = function handleArrows() {
          var confirmButton = getConfirmButton();
          var cancelButton = getCancelButton(); // focus Cancel button if Confirm button is currently focused

          if (document.activeElement === confirmButton && isVisible(cancelButton)) {
            cancelButton.focus(); // and vice versa
          } else if (document.activeElement === cancelButton && isVisible(confirmButton)) {
            confirmButton.focus();
          }
        };

        var handleEsc = function handleEsc(e, innerParams, dismissWith) {
          if (callIfFunction(innerParams.allowEscapeKey)) {
            e.preventDefault();
            dismissWith(DismissReason.esc);
          }
        };

        var handlePopupClick = function handlePopupClick(domCache, innerParams, dismissWith) {
          if (innerParams.toast) {
            handleToastClick(domCache, innerParams, dismissWith);
          } else {
            // Ignore click events that had mousedown on the popup but mouseup on the container
            // This can happen when the user drags a slider
            handleModalMousedown(domCache); // Ignore click events that had mousedown on the container but mouseup on the popup

            handleContainerMousedown(domCache);
            handleModalClick(domCache, innerParams, dismissWith);
          }
        };

        var handleToastClick = function handleToastClick(domCache, innerParams, dismissWith) {
          // Closing toast by internal click
          domCache.popup.onclick = function () {
            if (innerParams.showConfirmButton || innerParams.showCancelButton || innerParams.showCloseButton || innerParams.input) {
              return;
            }

            dismissWith(DismissReason.close);
          };
        };

        var ignoreOutsideClick = false;

        var handleModalMousedown = function handleModalMousedown(domCache) {
          domCache.popup.onmousedown = function () {
            domCache.container.onmouseup = function (e) {
              domCache.container.onmouseup = undefined; // We only check if the mouseup target is the container because usually it doesn't
              // have any other direct children aside of the popup

              if (e.target === domCache.container) {
                ignoreOutsideClick = true;
              }
            };
          };
        };

        var handleContainerMousedown = function handleContainerMousedown(domCache) {
          domCache.container.onmousedown = function () {
            domCache.popup.onmouseup = function (e) {
              domCache.popup.onmouseup = undefined; // We also need to check if the mouseup target is a child of the popup

              if (e.target === domCache.popup || domCache.popup.contains(e.target)) {
                ignoreOutsideClick = true;
              }
            };
          };
        };

        var handleModalClick = function handleModalClick(domCache, innerParams, dismissWith) {
          domCache.container.onclick = function (e) {
            if (ignoreOutsideClick) {
              ignoreOutsideClick = false;
              return;
            }

            if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) {
              dismissWith(DismissReason.backdrop);
            }
          };
        };

        function _main(userParams) {
          showWarningsForParams(userParams); // Check if there is another Swal closing

          if (getPopup() && globalState.swalCloseEventFinishedCallback) {
            globalState.swalCloseEventFinishedCallback();
            delete globalState.swalCloseEventFinishedCallback;
          } // Check if there is a swal disposal defer timer


          if (globalState.deferDisposalTimer) {
            clearTimeout(globalState.deferDisposalTimer);
            delete globalState.deferDisposalTimer;
          }

          var innerParams = _extends({}, defaultParams, userParams);

          setParameters(innerParams);
          Object.freeze(innerParams); // clear the previous timer

          if (globalState.timeout) {
            globalState.timeout.stop();
            delete globalState.timeout;
          } // clear the restore focus timeout


          clearTimeout(globalState.restoreFocusTimeout);
          var domCache = populateDomCache(this);
          render(this, innerParams);
          privateProps.innerParams.set(this, innerParams);
          return swalPromise(this, domCache, innerParams);
        }

        var swalPromise = function swalPromise(instance, domCache, innerParams) {
          return new Promise(function (resolve) {
            // functions to handle all closings/dismissals
            var dismissWith = function dismissWith(dismiss) {
              instance.closePopup({
                dismiss: dismiss
              });
            };

            privateMethods.swalPromiseResolve.set(instance, resolve);
            setupTimer(globalState, innerParams, dismissWith);

            domCache.confirmButton.onclick = function () {
              return handleConfirmButtonClick(instance, innerParams);
            };

            domCache.cancelButton.onclick = function () {
              return handleCancelButtonClick(instance, dismissWith);
            };

            domCache.closeButton.onclick = function () {
              return dismissWith(DismissReason.close);
            };

            handlePopupClick(domCache, innerParams, dismissWith);
            addKeydownHandler(instance, globalState, innerParams, dismissWith);

            if (innerParams.toast && (innerParams.input || innerParams.footer || innerParams.showCloseButton)) {
              addClass(document.body, swalClasses['toast-column']);
            } else {
              removeClass(document.body, swalClasses['toast-column']);
            }

            handleInputOptionsAndValue(instance, innerParams);
            openPopup(innerParams);
            initFocus(domCache, innerParams); // Scroll container to top on open (#1247)

            domCache.container.scrollTop = 0;
          });
        };

        var populateDomCache = function populateDomCache(instance) {
          var domCache = {
            popup: getPopup(),
            container: getContainer(),
            content: getContent(),
            actions: getActions(),
            confirmButton: getConfirmButton(),
            cancelButton: getCancelButton(),
            closeButton: getCloseButton(),
            validationMessage: getValidationMessage(),
            progressSteps: getProgressSteps()
          };
          privateProps.domCache.set(instance, domCache);
          return domCache;
        };

        var setupTimer = function setupTimer(globalState$$1, innerParams, dismissWith) {
          if (innerParams.timer) {
            globalState$$1.timeout = new Timer(function () {
              dismissWith('timer');
              delete globalState$$1.timeout;
            }, innerParams.timer);
          }
        };

        var initFocus = function initFocus(domCache, innerParams) {
          if (innerParams.toast) {
            return;
          }

          if (!callIfFunction(innerParams.allowEnterKey)) {
            return blurActiveElement();
          }

          if (innerParams.focusCancel && isVisible(domCache.cancelButton)) {
            return domCache.cancelButton.focus();
          }

          if (innerParams.focusConfirm && isVisible(domCache.confirmButton)) {
            return domCache.confirmButton.focus();
          }

          setFocus(innerParams, -1, 1);
        };

        var blurActiveElement = function blurActiveElement() {
          if (document.activeElement && typeof document.activeElement.blur === 'function') {
            document.activeElement.blur();
          }
        };
        /**
         * Updates popup parameters.
         */


        function update(params) {
          var validUpdatableParams = {}; // assign valid params from `params` to `defaults`

          Object.keys(params).forEach(function (param) {
            if (Swal.isUpdatableParameter(param)) {
              validUpdatableParams[param] = params[param];
            } else {
              warn("Invalid parameter to update: \"".concat(param, "\". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js"));
            }
          });
          var innerParams = privateProps.innerParams.get(this);

          var updatedParams = _extends({}, innerParams, validUpdatableParams);

          render(this, updatedParams);
          privateProps.innerParams.set(this, updatedParams);
          Object.defineProperties(this, {
            params: {
              value: _extends({}, this.params, params),
              writable: false,
              enumerable: true
            }
          });
        }

        var instanceMethods = Object.freeze({
          hideLoading: hideLoading,
          disableLoading: hideLoading,
          getInput: getInput$1,
          close: close,
          closePopup: close,
          closeModal: close,
          closeToast: close,
          enableButtons: enableButtons,
          disableButtons: disableButtons,
          enableConfirmButton: enableConfirmButton,
          disableConfirmButton: disableConfirmButton,
          enableInput: enableInput,
          disableInput: disableInput,
          showValidationMessage: showValidationMessage,
          resetValidationMessage: resetValidationMessage$1,
          getProgressSteps: getProgressSteps$1,
          setProgressSteps: setProgressSteps,
          showProgressSteps: showProgressSteps,
          hideProgressSteps: hideProgressSteps,
          _main: _main,
          update: update
        });
        var currentInstance; // SweetAlert constructor

        function SweetAlert() {
          // Prevent run in Node env

          /* istanbul ignore if */
          if (typeof window === 'undefined') {
            return;
          } // Check for the existence of Promise

          /* istanbul ignore if */


          if (typeof Promise === 'undefined') {
            error('This package requires a Promise library, please include a shim to enable it in this browser (See: https://github.com/sweetalert2/sweetalert2/wiki/Migration-from-SweetAlert-to-SweetAlert2#1-ie-support)');
          }

          currentInstance = this;

          for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
            args[_key] = arguments[_key];
          }

          var outerParams = Object.freeze(this.constructor.argsToParams(args));
          Object.defineProperties(this, {
            params: {
              value: outerParams,
              writable: false,
              enumerable: true,
              configurable: true
            }
          });

          var promise = this._main(this.params);

          privateProps.promise.set(this, promise);
        } // `catch` cannot be the name of a module export, so we define our thenable methods here instead


        SweetAlert.prototype.then = function (onFulfilled) {
          var promise = privateProps.promise.get(this);
          return promise.then(onFulfilled);
        };

        SweetAlert.prototype["finally"] = function (onFinally) {
          var promise = privateProps.promise.get(this);
          return promise["finally"](onFinally);
        }; // Assign instance methods from src/instanceMethods/*.js to prototype


        _extends(SweetAlert.prototype, instanceMethods); // Assign static methods from src/staticMethods/*.js to constructor


        _extends(SweetAlert, staticMethods); // Proxy to instance methods to constructor, for now, for backwards compatibility


        Object.keys(instanceMethods).forEach(function (key) {
          SweetAlert[key] = function () {
            if (currentInstance) {
              var _currentInstance;

              return (_currentInstance = currentInstance)[key].apply(_currentInstance, arguments);
            }
          };
        });
        SweetAlert.DismissReason = DismissReason;
        SweetAlert.version = '8.18.0';
        var Swal = SweetAlert;
        Swal["default"] = Swal;
        return Swal;
      });

      if (typeof this !== 'undefined' && this.Sweetalert2) {
        this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2;
      }

      "undefined" != typeof document && function (e, t) {
        var n = e.createElement("style");
        if (e.getElementsByTagName("head")[0].appendChild(n), n.styleSheet) n.styleSheet.disabled || (n.styleSheet.cssText = t);else try {
          n.innerHTML = t;
        } catch (e) {
          n.innerText = t;
        }
      }(document, "@charset \"UTF-8\";.swal2-popup.swal2-toast{flex-direction:row;align-items:center;width:auto;padding:.625em;overflow-y:hidden;box-shadow:0 0 .625em #d9d9d9}.swal2-popup.swal2-toast .swal2-header{flex-direction:row}.swal2-popup.swal2-toast .swal2-title{flex-grow:1;justify-content:flex-start;margin:0 .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{position:static;width:.8em;height:.8em;line-height:.8}.swal2-popup.swal2-toast .swal2-content{justify-content:flex-start;font-size:1em}.swal2-popup.swal2-toast .swal2-icon{width:2em;min-width:2em;height:2em;margin:0}.swal2-popup.swal2-toast .swal2-icon::before{display:flex;align-items:center;font-size:2em;font-weight:700}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-popup.swal2-toast .swal2-icon::before{font-size:.25em}}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{flex-basis:auto!important;width:auto;height:auto;margin:0 .3125em}.swal2-popup.swal2-toast .swal2-styled{margin:0 .3125em;padding:.3125em .625em;font-size:1em}.swal2-popup.swal2-toast .swal2-styled:focus{box-shadow:0 0 0 .0625em #fff,0 0 0 .125em rgba(50,100,150,.4)}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.8em;left:-.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast.swal2-show{-webkit-animation:swal2-toast-show .5s;animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{-webkit-animation:swal2-toast-hide .1s forwards;animation:swal2-toast-hide .1s forwards}.swal2-popup.swal2-toast .swal2-animate-success-icon .swal2-success-line-tip{-webkit-animation:swal2-toast-animate-success-line-tip .75s;animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-animate-success-icon .swal2-success-line-long{-webkit-animation:swal2-toast-animate-success-line-long .75s;animation:swal2-toast-animate-success-line-long .75s}.swal2-container{display:flex;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;flex-direction:row;align-items:center;justify-content:center;padding:.625em;overflow-x:hidden;background-color:transparent;-webkit-overflow-scrolling:touch}.swal2-container.swal2-top{align-items:flex-start}.swal2-container.swal2-top-left,.swal2-container.swal2-top-start{align-items:flex-start;justify-content:flex-start}.swal2-container.swal2-top-end,.swal2-container.swal2-top-right{align-items:flex-start;justify-content:flex-end}.swal2-container.swal2-center{align-items:center}.swal2-container.swal2-center-left,.swal2-container.swal2-center-start{align-items:center;justify-content:flex-start}.swal2-container.swal2-center-end,.swal2-container.swal2-center-right{align-items:center;justify-content:flex-end}.swal2-container.swal2-bottom{align-items:flex-end}.swal2-container.swal2-bottom-left,.swal2-container.swal2-bottom-start{align-items:flex-end;justify-content:flex-start}.swal2-container.swal2-bottom-end,.swal2-container.swal2-bottom-right{align-items:flex-end;justify-content:flex-end}.swal2-container.swal2-bottom-end>:first-child,.swal2-container.swal2-bottom-left>:first-child,.swal2-container.swal2-bottom-right>:first-child,.swal2-container.swal2-bottom-start>:first-child,.swal2-container.swal2-bottom>:first-child{margin-top:auto}.swal2-container.swal2-grow-fullscreen>.swal2-modal{display:flex!important;flex:1;align-self:stretch;justify-content:center}.swal2-container.swal2-grow-row>.swal2-modal{display:flex!important;flex:1;align-content:center;justify-content:center}.swal2-container.swal2-grow-column{flex:1;flex-direction:column}.swal2-container.swal2-grow-column.swal2-bottom,.swal2-container.swal2-grow-column.swal2-center,.swal2-container.swal2-grow-column.swal2-top{align-items:center}.swal2-container.swal2-grow-column.swal2-bottom-left,.swal2-container.swal2-grow-column.swal2-bottom-start,.swal2-container.swal2-grow-column.swal2-center-left,.swal2-container.swal2-grow-column.swal2-center-start,.swal2-container.swal2-grow-column.swal2-top-left,.swal2-container.swal2-grow-column.swal2-top-start{align-items:flex-start}.swal2-container.swal2-grow-column.swal2-bottom-end,.swal2-container.swal2-grow-column.swal2-bottom-right,.swal2-container.swal2-grow-column.swal2-center-end,.swal2-container.swal2-grow-column.swal2-center-right,.swal2-container.swal2-grow-column.swal2-top-end,.swal2-container.swal2-grow-column.swal2-top-right{align-items:flex-end}.swal2-container.swal2-grow-column>.swal2-modal{display:flex!important;flex:1;align-content:center;justify-content:center}.swal2-container:not(.swal2-top):not(.swal2-top-start):not(.swal2-top-end):not(.swal2-top-left):not(.swal2-top-right):not(.swal2-center-start):not(.swal2-center-end):not(.swal2-center-left):not(.swal2-center-right):not(.swal2-bottom):not(.swal2-bottom-start):not(.swal2-bottom-end):not(.swal2-bottom-left):not(.swal2-bottom-right):not(.swal2-grow-fullscreen)>.swal2-modal{margin:auto}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-container .swal2-modal{margin:0!important}}.swal2-container.swal2-fade{transition:background-color .1s}.swal2-container.swal2-shown{background-color:rgba(0,0,0,.4)}.swal2-popup{display:none;position:relative;box-sizing:border-box;flex-direction:column;justify-content:center;width:32em;max-width:100%;padding:1.25em;border:none;border-radius:.3125em;background:#fff;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-header{display:flex;flex-direction:column;align-items:center}.swal2-title{position:relative;max-width:100%;margin:0 0 .4em;padding:0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;flex-wrap:wrap;align-items:center;justify-content:center;width:100%;margin:1.25em auto 0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-actions.swal2-loading .swal2-styled.swal2-confirm{box-sizing:border-box;width:2.5em;height:2.5em;margin:.46875em;padding:0;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border:.25em solid transparent;border-radius:100%;border-color:transparent;background-color:transparent!important;color:transparent;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-actions.swal2-loading .swal2-styled.swal2-cancel{margin-right:30px;margin-left:30px}.swal2-actions.swal2-loading :not(.swal2-styled).swal2-confirm::after{content:\"\";display:inline-block;width:15px;height:15px;margin-left:5px;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border:3px solid #999;border-radius:50%;border-right-color:transparent;box-shadow:1px 1px 1px #fff}.swal2-styled{margin:.3125em;padding:.625em 2em;box-shadow:none;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#3085d6;color:#fff;font-size:1.0625em}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#aaa;color:#fff;font-size:1.0625em}.swal2-styled:focus{outline:0;box-shadow:0 0 0 2px #fff,0 0 0 4px rgba(50,100,150,.4)}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1.25em 0 0;padding:1em 0 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-image{max-width:100%;margin:1.25em auto}.swal2-close{position:absolute;z-index:2;top:0;right:0;justify-content:center;width:1.2em;height:1.2em;padding:0;overflow:hidden;transition:color .1s ease-out;border:none;border-radius:0;outline:initial;background:0 0;color:#ccc;font-family:serif;font-size:2.5em;line-height:1.2;cursor:pointer}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-content{z-index:1;justify-content:center;margin:0;padding:0;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em auto}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:100%;transition:border-color .3s,box-shadow .3s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06);color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:0 0 3px #c4e6f5}.swal2-file::-webkit-input-placeholder,.swal2-input::-webkit-input-placeholder,.swal2-textarea::-webkit-input-placeholder{color:#ccc}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::-ms-input-placeholder,.swal2-input::-ms-input-placeholder,.swal2-textarea::-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em auto;background:inherit}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-input[type=number]{max-width:10em}.swal2-file{background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:inherit;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{margin:0 .4em}.swal2-validation-message{display:none;align-items:center;justify-content:center;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;zoom:normal;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:1.25em auto 1.875em;zoom:normal;border:.25em solid transparent;border-radius:50%;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon::before{display:flex;align-items:center;height:92%;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-warning::before{content:\"!\"}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-info::before{content:\"i\"}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-question::before{content:\"?\"}.swal2-icon.swal2-question.swal2-arabic-question-mark::before{content:\"؟\"}.swal2-icon.swal2-success{border-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.875em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-progress-steps{align-items:center;margin:0 0 1.25em;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;width:2em;height:2em;border-radius:2em;background:#3085d6;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#3085d6}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;width:2.5em;height:.4em;margin:0 -1px;background:#3085d6}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-show.swal2-noanimation{-webkit-animation:none;animation:none}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-hide.swal2-noanimation{-webkit-animation:none;animation:none}.swal2-rtl .swal2-close{right:auto;left:0}.swal2-animate-success-icon .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-animate-success-icon .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-animate-success-icon .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-animate-error-icon{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-animate-error-icon .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}@supports (-ms-accelerator:true){.swal2-range input{width:100%!important}.swal2-range output{display:none}}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-range input{width:100%!important}.swal2-range output{display:none}}@-moz-document url-prefix(){.swal2-close:focus{outline:2px solid rgba(50,100,150,.4)}}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.875em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.875em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-shown{top:auto;right:auto;bottom:auto;left:auto;max-width:calc(100% - .625em * 2);background-color:transparent}body.swal2-no-backdrop .swal2-shown>.swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}body.swal2-no-backdrop .swal2-shown.swal2-top{top:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-shown.swal2-top-left,body.swal2-no-backdrop .swal2-shown.swal2-top-start{top:0;left:0}body.swal2-no-backdrop .swal2-shown.swal2-top-end,body.swal2-no-backdrop .swal2-shown.swal2-top-right{top:0;right:0}body.swal2-no-backdrop .swal2-shown.swal2-center{top:50%;left:50%;transform:translate(-50%,-50%)}body.swal2-no-backdrop .swal2-shown.swal2-center-left,body.swal2-no-backdrop .swal2-shown.swal2-center-start{top:50%;left:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-shown.swal2-center-end,body.swal2-no-backdrop .swal2-shown.swal2-center-right{top:50%;right:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-shown.swal2-bottom{bottom:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-shown.swal2-bottom-left,body.swal2-no-backdrop .swal2-shown.swal2-bottom-start{bottom:0;left:0}body.swal2-no-backdrop .swal2-shown.swal2-bottom-end,body.swal2-no-backdrop .swal2-shown.swal2-bottom-right{right:0;bottom:0}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{background-color:transparent}body.swal2-toast-shown .swal2-container.swal2-shown{background-color:transparent}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}body.swal2-toast-column .swal2-toast{flex-direction:column;align-items:stretch}body.swal2-toast-column .swal2-toast .swal2-actions{flex:1;align-self:stretch;height:2.2em;margin-top:.3125em}body.swal2-toast-column .swal2-toast .swal2-loading{justify-content:center}body.swal2-toast-column .swal2-toast .swal2-input{height:2em;margin:.3125em auto;font-size:1em}body.swal2-toast-column .swal2-toast .swal2-validation-message{font-size:1em}");
      /***/
    },

    /***/
    "PZkE":
    /*!**********************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/distinctUntilKeyChanged.js ***!
      \**********************************************************************************/

    /*! exports provided: distinctUntilKeyChanged */

    /***/
    function PZkE(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "distinctUntilKeyChanged", function () {
        return distinctUntilKeyChanged;
      });
      /* harmony import */


      var _distinctUntilChanged__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./distinctUntilChanged */
      "/uUt");

      function distinctUntilKeyChanged(key, compare) {
        return Object(_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_0__["distinctUntilChanged"])(function (x, y) {
          return compare ? compare(x[key], y[key]) : x[key] === y[key];
        });
      } //# sourceMappingURL=distinctUntilKeyChanged.js.map

      /***/

    },

    /***/
    "PeUW":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/ta.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function PeUW(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Tamil [ta]
      //! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var symbolMap = {
          1: '௧',
          2: '௨',
          3: '௩',
          4: '௪',
          5: '௫',
          6: '௬',
          7: '௭',
          8: '௮',
          9: '௯',
          0: '௦'
        },
            numberMap = {
          '௧': '1',
          '௨': '2',
          '௩': '3',
          '௪': '4',
          '௫': '5',
          '௬': '6',
          '௭': '7',
          '௮': '8',
          '௯': '9',
          '௦': '0'
        };
        var ta = moment.defineLocale('ta', {
          months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
          monthsShort: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
          weekdays: 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),
          weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),
          weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, HH:mm',
            LLLL: 'dddd, D MMMM YYYY, HH:mm'
          },
          calendar: {
            sameDay: '[இன்று] LT',
            nextDay: '[நாளை] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[நேற்று] LT',
            lastWeek: '[கடந்த வாரம்] dddd, LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s இல்',
            past: '%s முன்',
            s: 'ஒரு சில விநாடிகள்',
            ss: '%d விநாடிகள்',
            m: 'ஒரு நிமிடம்',
            mm: '%d நிமிடங்கள்',
            h: 'ஒரு மணி நேரம்',
            hh: '%d மணி நேரம்',
            d: 'ஒரு நாள்',
            dd: '%d நாட்கள்',
            M: 'ஒரு மாதம்',
            MM: '%d மாதங்கள்',
            y: 'ஒரு வருடம்',
            yy: '%d ஆண்டுகள்'
          },
          dayOfMonthOrdinalParse: /\d{1,2}வது/,
          ordinal: function ordinal(number) {
            return number + 'வது';
          },
          preparse: function preparse(string) {
            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {
              return numberMap[match];
            });
          },
          postformat: function postformat(string) {
            return string.replace(/\d/g, function (match) {
              return symbolMap[match];
            });
          },
          // refer http://ta.wikipedia.org/s/1er1
          meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 2) {
              return ' யாமம்';
            } else if (hour < 6) {
              return ' வைகறை'; // வைகறை
            } else if (hour < 10) {
              return ' காலை'; // காலை
            } else if (hour < 14) {
              return ' நண்பகல்'; // நண்பகல்
            } else if (hour < 18) {
              return ' எற்பாடு'; // எற்பாடு
            } else if (hour < 22) {
              return ' மாலை'; // மாலை
            } else {
              return ' யாமம்';
            }
          },
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === 'யாமம்') {
              return hour < 2 ? hour : hour + 12;
            } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {
              return hour;
            } else if (meridiem === 'நண்பகல்') {
              return hour >= 10 ? hour : hour + 12;
            } else {
              return hour + 12;
            }
          },
          week: {
            dow: 0,
            // Sunday is the first day of the week.
            doy: 6 // The week that contains Jan 6th is the first week of the year.

          }
        });
        return ta;
      });
      /***/

    },

    /***/
    "PfrF":
    /*!*********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/bufferWhen.js ***!
      \*********************************************************************/

    /*! exports provided: bufferWhen */

    /***/
    function PfrF(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "bufferWhen", function () {
        return bufferWhen;
      });
      /* harmony import */


      var _Subscription__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscription */
      "quSY");
      /* harmony import */


      var _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../innerSubscribe */
      "zx2A");

      function bufferWhen(closingSelector) {
        return function (source) {
          return source.lift(new BufferWhenOperator(closingSelector));
        };
      }

      var BufferWhenOperator = /*#__PURE__*/function () {
        function BufferWhenOperator(closingSelector) {
          _classCallCheck2(this, BufferWhenOperator);

          this.closingSelector = closingSelector;
        }

        _createClass2(BufferWhenOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new BufferWhenSubscriber(subscriber, this.closingSelector));
          }
        }]);

        return BufferWhenOperator;
      }();

      var BufferWhenSubscriber = /*#__PURE__*/function (_innerSubscribe__WEBP11) {
        _inherits2(BufferWhenSubscriber, _innerSubscribe__WEBP11);

        var _super249 = _createSuper(BufferWhenSubscriber);

        function BufferWhenSubscriber(destination, closingSelector) {
          var _this579;

          _classCallCheck2(this, BufferWhenSubscriber);

          _this579 = _super249.call(this, destination);
          _this579.closingSelector = closingSelector;
          _this579.subscribing = false;

          _this579.openBuffer();

          return _this579;
        }

        _createClass2(BufferWhenSubscriber, [{
          key: "_next",
          value: function _next(value) {
            this.buffer.push(value);
          }
        }, {
          key: "_complete",
          value: function _complete() {
            var buffer = this.buffer;

            if (buffer) {
              this.destination.next(buffer);
            }

            _get2(_getPrototypeOf2(BufferWhenSubscriber.prototype), "_complete", this).call(this);
          }
        }, {
          key: "_unsubscribe",
          value: function _unsubscribe() {
            this.buffer = undefined;
            this.subscribing = false;
          }
        }, {
          key: "notifyNext",
          value: function notifyNext() {
            this.openBuffer();
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete() {
            if (this.subscribing) {
              this.complete();
            } else {
              this.openBuffer();
            }
          }
        }, {
          key: "openBuffer",
          value: function openBuffer() {
            var closingSubscription = this.closingSubscription;

            if (closingSubscription) {
              this.remove(closingSubscription);
              closingSubscription.unsubscribe();
            }

            var buffer = this.buffer;

            if (this.buffer) {
              this.destination.next(buffer);
            }

            this.buffer = [];
            var closingNotifier;

            try {
              var closingSelector = this.closingSelector;
              closingNotifier = closingSelector();
            } catch (err) {
              return this.error(err);
            }

            closingSubscription = new _Subscription__WEBPACK_IMPORTED_MODULE_0__["Subscription"]();
            this.closingSubscription = closingSubscription;
            this.add(closingSubscription);
            this.subscribing = true;
            closingSubscription.add(Object(_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__["innerSubscribe"])(closingNotifier, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__["SimpleInnerSubscriber"](this)));
            this.subscribing = false;
          }
        }]);

        return BufferWhenSubscriber;
      }(_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__["SimpleOuterSubscriber"]); //# sourceMappingURL=bufferWhen.js.map

      /***/

    },

    /***/
    "Pk7N":
    /*!*****************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/dialog/dialog.service.js ***!
      \*****************************************************************************/

    /*! exports provided: OWL_DIALOG_DATA, OWL_DIALOG_SCROLL_STRATEGY, OWL_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY, OWL_DIALOG_SCROLL_STRATEGY_PROVIDER, OWL_DIALOG_DEFAULT_OPTIONS, OwlDialogService */

    /***/
    function Pk7N(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OWL_DIALOG_DATA", function () {
        return OWL_DIALOG_DATA;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OWL_DIALOG_SCROLL_STRATEGY", function () {
        return OWL_DIALOG_SCROLL_STRATEGY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OWL_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY", function () {
        return OWL_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OWL_DIALOG_SCROLL_STRATEGY_PROVIDER", function () {
        return OWL_DIALOG_SCROLL_STRATEGY_PROVIDER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OWL_DIALOG_DEFAULT_OPTIONS", function () {
        return OWL_DIALOG_DEFAULT_OPTIONS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OwlDialogService", function () {
        return OwlDialogService;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/cdk/overlay */
      "rDax");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _dialog_config_class__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./dialog-config.class */
      "Z0lH");
      /* harmony import */


      var _dialog_ref_class__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ./dialog-ref.class */
      "oJLU");
      /* harmony import */


      var _dialog_container_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! ./dialog-container.component */
      "m1pj");
      /* harmony import */


      var _utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! ../utils */
      "J+Wn");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(
      /*! @angular/cdk/portal */
      "+rOU");

      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var __metadata = undefined && undefined.__metadata || function (k, v) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
      };

      var __param = undefined && undefined.__param || function (paramIndex, decorator) {
        return function (target, key) {
          decorator(target, key, paramIndex);
        };
      };

      var OWL_DIALOG_DATA = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('OwlDialogData');
      var OWL_DIALOG_SCROLL_STRATEGY = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('owl-dialog-scroll-strategy');

      function OWL_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {
        return function () {
          return overlay.scrollStrategies.block();
        };
      }

      var OWL_DIALOG_SCROLL_STRATEGY_PROVIDER = {
        provide: OWL_DIALOG_SCROLL_STRATEGY,
        deps: [_angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_1__["Overlay"]],
        useFactory: OWL_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY
      };
      var OWL_DIALOG_DEFAULT_OPTIONS = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('owl-dialog-default-options');

      var OwlDialogService = function () {
        function OwlDialogService(overlay, injector, location, scrollStrategy, defaultOptions, parentDialog, overlayContainer) {
          var _this = this;

          this.overlay = overlay;
          this.injector = injector;
          this.location = location;
          this.scrollStrategy = scrollStrategy;
          this.defaultOptions = defaultOptions;
          this.parentDialog = parentDialog;
          this.overlayContainer = overlayContainer;
          this.ariaHiddenElements = new Map();
          this._openDialogsAtThisLevel = [];
          this._afterOpenAtThisLevel = new rxjs__WEBPACK_IMPORTED_MODULE_7__["Subject"]();
          this._afterAllClosedAtThisLevel = new rxjs__WEBPACK_IMPORTED_MODULE_7__["Subject"]();
          this.afterAllClosed = Object(rxjs__WEBPACK_IMPORTED_MODULE_7__["defer"])(function () {
            return _this._openDialogsAtThisLevel.length ? _this._afterAllClosed : _this._afterAllClosed.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_8__["startWith"])(undefined));
          });

          if (!parentDialog && location) {
            location.subscribe(function () {
              return _this.closeAll();
            });
          }
        }

        Object.defineProperty(OwlDialogService.prototype, "openDialogs", {
          get: function get() {
            return this.parentDialog ? this.parentDialog.openDialogs : this._openDialogsAtThisLevel;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDialogService.prototype, "afterOpen", {
          get: function get() {
            return this.parentDialog ? this.parentDialog.afterOpen : this._afterOpenAtThisLevel;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDialogService.prototype, "_afterAllClosed", {
          get: function get() {
            var parent = this.parentDialog;
            return parent ? parent._afterAllClosed : this._afterAllClosedAtThisLevel;
          },
          enumerable: true,
          configurable: true
        });

        OwlDialogService.prototype.open = function (componentOrTemplateRef, config) {
          var _this = this;

          config = applyConfigDefaults(config, this.defaultOptions);

          if (config.id && this.getDialogById(config.id)) {
            throw Error("Dialog with id \"" + config.id + "\" exists already. The dialog id must be unique.");
          }

          var overlayRef = this.createOverlay(config);
          var dialogContainer = this.attachDialogContainer(overlayRef, config);
          var dialogRef = this.attachDialogContent(componentOrTemplateRef, dialogContainer, overlayRef, config);

          if (!this.openDialogs.length) {
            this.hideNonDialogContentFromAssistiveTechnology();
          }

          this.openDialogs.push(dialogRef);
          dialogRef.afterClosed().subscribe(function () {
            return _this.removeOpenDialog(dialogRef);
          });
          this.afterOpen.next(dialogRef);
          return dialogRef;
        };

        OwlDialogService.prototype.closeAll = function () {
          var i = this.openDialogs.length;

          while (i--) {
            this.openDialogs[i].close();
          }
        };

        OwlDialogService.prototype.getDialogById = function (id) {
          return this.openDialogs.find(function (dialog) {
            return dialog.id === id;
          });
        };

        OwlDialogService.prototype.attachDialogContent = function (componentOrTemplateRef, dialogContainer, overlayRef, config) {
          var dialogRef = new _dialog_ref_class__WEBPACK_IMPORTED_MODULE_4__["OwlDialogRef"](overlayRef, dialogContainer, config.id, this.location);

          if (config.hasBackdrop) {
            overlayRef.backdropClick().subscribe(function () {
              if (!dialogRef.disableClose) {
                dialogRef.close();
              }
            });
          }

          if (componentOrTemplateRef instanceof _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]) {} else {
            var injector = this.createInjector(config, dialogRef, dialogContainer);
            var contentRef = dialogContainer.attachComponentPortal(new _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_9__["ComponentPortal"](componentOrTemplateRef, undefined, injector));
            dialogRef.componentInstance = contentRef.instance;
          }

          dialogRef.updateSize(config.width, config.height).updatePosition(config.position);
          return dialogRef;
        };

        OwlDialogService.prototype.createInjector = function (config, dialogRef, dialogContainer) {
          var userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
          var injectionTokens = new WeakMap();
          injectionTokens.set(_dialog_ref_class__WEBPACK_IMPORTED_MODULE_4__["OwlDialogRef"], dialogRef);
          injectionTokens.set(_dialog_container_component__WEBPACK_IMPORTED_MODULE_5__["OwlDialogContainerComponent"], dialogContainer);
          injectionTokens.set(OWL_DIALOG_DATA, config.data);
          return new _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_9__["PortalInjector"](userInjector || this.injector, injectionTokens);
        };

        OwlDialogService.prototype.createOverlay = function (config) {
          var overlayConfig = this.getOverlayConfig(config);
          return this.overlay.create(overlayConfig);
        };

        OwlDialogService.prototype.attachDialogContainer = function (overlayRef, config) {
          var containerPortal = new _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_9__["ComponentPortal"](_dialog_container_component__WEBPACK_IMPORTED_MODULE_5__["OwlDialogContainerComponent"], config.viewContainerRef);
          var containerRef = overlayRef.attach(containerPortal);
          containerRef.instance.setConfig(config);
          return containerRef.instance;
        };

        OwlDialogService.prototype.getOverlayConfig = function (dialogConfig) {
          var state = new _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_1__["OverlayConfig"]({
            positionStrategy: this.overlay.position().global(),
            scrollStrategy: dialogConfig.scrollStrategy || this.scrollStrategy(),
            panelClass: dialogConfig.paneClass,
            hasBackdrop: dialogConfig.hasBackdrop,
            minWidth: dialogConfig.minWidth,
            minHeight: dialogConfig.minHeight,
            maxWidth: dialogConfig.maxWidth,
            maxHeight: dialogConfig.maxHeight
          });

          if (dialogConfig.backdropClass) {
            state.backdropClass = dialogConfig.backdropClass;
          }

          return state;
        };

        OwlDialogService.prototype.removeOpenDialog = function (dialogRef) {
          var index = this._openDialogsAtThisLevel.indexOf(dialogRef);

          if (index > -1) {
            this.openDialogs.splice(index, 1);

            if (!this.openDialogs.length) {
              this.ariaHiddenElements.forEach(function (previousValue, element) {
                if (previousValue) {
                  element.setAttribute('aria-hidden', previousValue);
                } else {
                  element.removeAttribute('aria-hidden');
                }
              });
              this.ariaHiddenElements.clear();

              this._afterAllClosed.next();
            }
          }
        };

        OwlDialogService.prototype.hideNonDialogContentFromAssistiveTechnology = function () {
          var overlayContainer = this.overlayContainer.getContainerElement();

          if (overlayContainer.parentElement) {
            var siblings = overlayContainer.parentElement.children;

            for (var i = siblings.length - 1; i > -1; i--) {
              var sibling = siblings[i];

              if (sibling !== overlayContainer && sibling.nodeName !== 'SCRIPT' && sibling.nodeName !== 'STYLE' && !sibling.hasAttribute('aria-live')) {
                this.ariaHiddenElements.set(sibling, sibling.getAttribute('aria-hidden'));
                sibling.setAttribute('aria-hidden', 'true');
              }
            }
          }
        };

        OwlDialogService = __decorate([__param(2, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __param(3, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"])(OWL_DIALOG_SCROLL_STRATEGY)), __param(4, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __param(4, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"])(OWL_DIALOG_DEFAULT_OPTIONS)), __param(5, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __param(5, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"])()), __metadata("design:paramtypes", [_angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_1__["Overlay"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"], _angular_common__WEBPACK_IMPORTED_MODULE_2__["Location"], Function, _dialog_config_class__WEBPACK_IMPORTED_MODULE_3__["OwlDialogConfig"], OwlDialogService, _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_1__["OverlayContainer"]])], OwlDialogService);

        OwlDialogService.ɵfac = function OwlDialogService_Factory(t) {
          return new (t || OwlDialogService)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_1__["Overlay"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_2__["Location"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](OWL_DIALOG_SCROLL_STRATEGY), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](OWL_DIALOG_DEFAULT_OPTIONS, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](OwlDialogService, 12), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_1__["OverlayContainer"]));
        };

        OwlDialogService.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
          token: OwlDialogService,
          factory: function factory(t) {
            return OwlDialogService.ɵfac(t);
          }
        });

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](OwlDialogService, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
          }], function () {
            return [{
              type: _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_1__["Overlay"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]
            }, {
              type: _angular_common__WEBPACK_IMPORTED_MODULE_2__["Location"],
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
              }]
            }, {
              type: Function,
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
                args: [OWL_DIALOG_SCROLL_STRATEGY]
              }]
            }, {
              type: _dialog_config_class__WEBPACK_IMPORTED_MODULE_3__["OwlDialogConfig"],
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
              }, {
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
                args: [OWL_DIALOG_DEFAULT_OPTIONS]
              }]
            }, {
              type: OwlDialogService,
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
              }, {
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
              }]
            }, {
              type: _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_1__["OverlayContainer"]
            }];
          }, null);
        })();

        return OwlDialogService;
      }();

      function applyConfigDefaults(config, defaultOptions) {
        return Object(_utils__WEBPACK_IMPORTED_MODULE_6__["extendObject"])(new _dialog_config_class__WEBPACK_IMPORTED_MODULE_3__["OwlDialogConfig"](), config, defaultOptions);
      } //# sourceMappingURL=data:application/json;charset=utf-8;base64, 

      /***/

    },

    /***/
    "PpIw":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/kn.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function PpIw(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Kannada [kn]
      //! author : Rajeev Naik : https://github.com/rajeevnaikte
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var symbolMap = {
          1: '೧',
          2: '೨',
          3: '೩',
          4: '೪',
          5: '೫',
          6: '೬',
          7: '೭',
          8: '೮',
          9: '೯',
          0: '೦'
        },
            numberMap = {
          '೧': '1',
          '೨': '2',
          '೩': '3',
          '೪': '4',
          '೫': '5',
          '೬': '6',
          '೭': '7',
          '೮': '8',
          '೯': '9',
          '೦': '0'
        };
        var kn = moment.defineLocale('kn', {
          months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'),
          monthsShort: 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split('_'),
          monthsParseExact: true,
          weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'),
          weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),
          weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),
          longDateFormat: {
            LT: 'A h:mm',
            LTS: 'A h:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm',
            LLLL: 'dddd, D MMMM YYYY, A h:mm'
          },
          calendar: {
            sameDay: '[ಇಂದು] LT',
            nextDay: '[ನಾಳೆ] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[ನಿನ್ನೆ] LT',
            lastWeek: '[ಕೊನೆಯ] dddd, LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s ನಂತರ',
            past: '%s ಹಿಂದೆ',
            s: 'ಕೆಲವು ಕ್ಷಣಗಳು',
            ss: '%d ಸೆಕೆಂಡುಗಳು',
            m: 'ಒಂದು ನಿಮಿಷ',
            mm: '%d ನಿಮಿಷ',
            h: 'ಒಂದು ಗಂಟೆ',
            hh: '%d ಗಂಟೆ',
            d: 'ಒಂದು ದಿನ',
            dd: '%d ದಿನ',
            M: 'ಒಂದು ತಿಂಗಳು',
            MM: '%d ತಿಂಗಳು',
            y: 'ಒಂದು ವರ್ಷ',
            yy: '%d ವರ್ಷ'
          },
          preparse: function preparse(string) {
            return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {
              return numberMap[match];
            });
          },
          postformat: function postformat(string) {
            return string.replace(/\d/g, function (match) {
              return symbolMap[match];
            });
          },
          meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === 'ರಾತ್ರಿ') {
              return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {
              return hour;
            } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {
              return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'ಸಂಜೆ') {
              return hour + 12;
            }
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 4) {
              return 'ರಾತ್ರಿ';
            } else if (hour < 10) {
              return 'ಬೆಳಿಗ್ಗೆ';
            } else if (hour < 17) {
              return 'ಮಧ್ಯಾಹ್ನ';
            } else if (hour < 20) {
              return 'ಸಂಜೆ';
            } else {
              return 'ರಾತ್ರಿ';
            }
          },
          dayOfMonthOrdinalParse: /\d{1,2}(ನೇ)/,
          ordinal: function ordinal(number) {
            return number + 'ನೇ';
          },
          week: {
            dow: 0,
            // Sunday is the first day of the week.
            doy: 6 // The week that contains Jan 6th is the first week of the year.

          }
        });
        return kn;
      });
      /***/

    },

    /***/
    "Ppu6":
    /*!*******************************************************************************!*\
      !*** ./node_modules/aws-sdk/apis/cognito-identity-2014-06-30.paginators.json ***!
      \*******************************************************************************/

    /*! exports provided: pagination, default */

    /***/
    function Ppu6(module) {
      module.exports = JSON.parse("{\"pagination\":{\"ListIdentityPools\":{\"input_token\":\"NextToken\",\"limit_key\":\"MaxResults\",\"output_token\":\"NextToken\",\"result_key\":\"IdentityPools\"}}}");
      /***/
    },

    /***/
    "PqYM":
    /*!*****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/timer.js ***!
      \*****************************************************************/

    /*! exports provided: timer */

    /***/
    function PqYM(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "timer", function () {
        return timer;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../scheduler/async */
      "D0XW");
      /* harmony import */


      var _util_isNumeric__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../util/isNumeric */
      "Y7HM");
      /* harmony import */


      var _util_isScheduler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ../util/isScheduler */
      "z+Ro");

      function timer() {
        var dueTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
        var periodOrScheduler = arguments.length > 1 ? arguments[1] : undefined;
        var scheduler = arguments.length > 2 ? arguments[2] : undefined;
        var period = -1;

        if (Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_2__["isNumeric"])(periodOrScheduler)) {
          period = Number(periodOrScheduler) < 1 && 1 || Number(periodOrScheduler);
        } else if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_3__["isScheduler"])(periodOrScheduler)) {
          scheduler = periodOrScheduler;
        }

        if (!Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_3__["isScheduler"])(scheduler)) {
          scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
        }

        return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
          var due = Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_2__["isNumeric"])(dueTime) ? dueTime : +dueTime - scheduler.now();
          return scheduler.schedule(dispatch, due, {
            index: 0,
            period: period,
            subscriber: subscriber
          });
        });
      }

      function dispatch(state) {
        var index = state.index,
            period = state.period,
            subscriber = state.subscriber;
        subscriber.next(index);

        if (subscriber.closed) {
          return;
        } else if (period === -1) {
          return subscriber.complete();
        }

        state.index = index + 1;
        this.schedule(state, period);
      } //# sourceMappingURL=timer.js.map

      /***/

    },

    /***/
    "Pz8W":
    /*!*********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/scheduler/AsapAction.js ***!
      \*********************************************************************/

    /*! exports provided: AsapAction */

    /***/
    function Pz8W(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AsapAction", function () {
        return AsapAction;
      });
      /* harmony import */


      var _util_Immediate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../util/Immediate */
      "c7jc");
      /* harmony import */


      var _AsyncAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./AsyncAction */
      "3N8a");

      var AsapAction = /*#__PURE__*/function (_AsyncAction__WEBPACK) {
        _inherits2(AsapAction, _AsyncAction__WEBPACK);

        var _super250 = _createSuper(AsapAction);

        function AsapAction(scheduler, work) {
          var _this580;

          _classCallCheck2(this, AsapAction);

          _this580 = _super250.call(this, scheduler, work);
          _this580.scheduler = scheduler;
          _this580.work = work;
          return _this580;
        }

        _createClass2(AsapAction, [{
          key: "requestAsyncId",
          value: function requestAsyncId(scheduler, id) {
            var delay = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;

            if (delay !== null && delay > 0) {
              return _get2(_getPrototypeOf2(AsapAction.prototype), "requestAsyncId", this).call(this, scheduler, id, delay);
            }

            scheduler.actions.push(this);
            return scheduler.scheduled || (scheduler.scheduled = _util_Immediate__WEBPACK_IMPORTED_MODULE_0__["Immediate"].setImmediate(scheduler.flush.bind(scheduler, null)));
          }
        }, {
          key: "recycleAsyncId",
          value: function recycleAsyncId(scheduler, id) {
            var delay = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;

            if (delay !== null && delay > 0 || delay === null && this.delay > 0) {
              return _get2(_getPrototypeOf2(AsapAction.prototype), "recycleAsyncId", this).call(this, scheduler, id, delay);
            }

            if (scheduler.actions.length === 0) {
              _util_Immediate__WEBPACK_IMPORTED_MODULE_0__["Immediate"].clearImmediate(id);

              scheduler.scheduled = undefined;
            }

            return undefined;
          }
        }]);

        return AsapAction;
      }(_AsyncAction__WEBPACK_IMPORTED_MODULE_1__["AsyncAction"]); //# sourceMappingURL=AsapAction.js.map

      /***/

    },

    /***/
    "Pzvs":
    /*!******************************************!*\
      !*** ./node_modules/aws-sdk/lib/http.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function Pzvs(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ./core */
      "QsWE");

      var inherit = AWS.util.inherit;
      /**
       * The endpoint that a service will talk to, for example,
       * `'https://ec2.ap-southeast-1.amazonaws.com'`. If
       * you need to override an endpoint for a service, you can
       * set the endpoint on a service by passing the endpoint
       * object with the `endpoint` option key:
       *
       * ```javascript
       * var ep = new AWS.Endpoint('awsproxy.example.com');
       * var s3 = new AWS.S3({endpoint: ep});
       * s3.service.endpoint.hostname == 'awsproxy.example.com'
       * ```
       *
       * Note that if you do not specify a protocol, the protocol will
       * be selected based on your current {AWS.config} configuration.
       *
       * @!attribute protocol
       *   @return [String] the protocol (http or https) of the endpoint
       *     URL
       * @!attribute hostname
       *   @return [String] the host portion of the endpoint, e.g.,
       *     example.com
       * @!attribute host
       *   @return [String] the host portion of the endpoint including
       *     the port, e.g., example.com:80
       * @!attribute port
       *   @return [Integer] the port of the endpoint
       * @!attribute href
       *   @return [String] the full URL of the endpoint
       */

      AWS.Endpoint = inherit({
        /**
         * @overload Endpoint(endpoint)
         *   Constructs a new endpoint given an endpoint URL. If the
         *   URL omits a protocol (http or https), the default protocol
         *   set in the global {AWS.config} will be used.
         *   @param endpoint [String] the URL to construct an endpoint from
         */
        constructor: function Endpoint(endpoint, config) {
          AWS.util.hideProperties(this, ['slashes', 'auth', 'hash', 'search', 'query']);

          if (typeof endpoint === 'undefined' || endpoint === null) {
            throw new Error('Invalid endpoint: ' + endpoint);
          } else if (typeof endpoint !== 'string') {
            return AWS.util.copy(endpoint);
          }

          if (!endpoint.match(/^http/)) {
            var useSSL = config && config.sslEnabled !== undefined ? config.sslEnabled : AWS.config.sslEnabled;
            endpoint = (useSSL ? 'https' : 'http') + '://' + endpoint;
          }

          AWS.util.update(this, AWS.util.urlParse(endpoint)); // Ensure the port property is set as an integer

          if (this.port) {
            this.port = parseInt(this.port, 10);
          } else {
            this.port = this.protocol === 'https:' ? 443 : 80;
          }
        }
      });
      /**
       * The low level HTTP request object, encapsulating all HTTP header
       * and body data sent by a service request.
       *
       * @!attribute method
       *   @return [String] the HTTP method of the request
       * @!attribute path
       *   @return [String] the path portion of the URI, e.g.,
       *     "/list/?start=5&num=10"
       * @!attribute headers
       *   @return [map<String,String>]
       *     a map of header keys and their respective values
       * @!attribute body
       *   @return [String] the request body payload
       * @!attribute endpoint
       *   @return [AWS.Endpoint] the endpoint for the request
       * @!attribute region
       *   @api private
       *   @return [String] the region, for signing purposes only.
       */

      AWS.HttpRequest = inherit({
        /**
         * @api private
         */
        constructor: function HttpRequest(endpoint, region) {
          endpoint = new AWS.Endpoint(endpoint);
          this.method = 'POST';
          this.path = endpoint.path || '/';
          this.headers = {};
          this.body = '';
          this.endpoint = endpoint;
          this.region = region;
          this._userAgent = '';
          this.setUserAgent();
        },

        /**
         * @api private
         */
        setUserAgent: function setUserAgent() {
          this._userAgent = this.headers[this.getUserAgentHeaderName()] = AWS.util.userAgent();
        },
        getUserAgentHeaderName: function getUserAgentHeaderName() {
          var prefix = AWS.util.isBrowser() ? 'X-Amz-' : '';
          return prefix + 'User-Agent';
        },

        /**
         * @api private
         */
        appendToUserAgent: function appendToUserAgent(agentPartial) {
          if (typeof agentPartial === 'string' && agentPartial) {
            this._userAgent += ' ' + agentPartial;
          }

          this.headers[this.getUserAgentHeaderName()] = this._userAgent;
        },

        /**
         * @api private
         */
        getUserAgent: function getUserAgent() {
          return this._userAgent;
        },

        /**
         * @return [String] the part of the {path} excluding the
         *   query string
         */
        pathname: function pathname() {
          return this.path.split('?', 1)[0];
        },

        /**
         * @return [String] the query string portion of the {path}
         */
        search: function search() {
          var query = this.path.split('?', 2)[1];

          if (query) {
            query = AWS.util.queryStringParse(query);
            return AWS.util.queryParamsToString(query);
          }

          return '';
        },

        /**
         * @api private
         * update httpRequest endpoint with endpoint string
         */
        updateEndpoint: function updateEndpoint(endpointStr) {
          var newEndpoint = new AWS.Endpoint(endpointStr);
          this.endpoint = newEndpoint;
          this.path = newEndpoint.path || '/';

          if (this.headers['Host']) {
            this.headers['Host'] = newEndpoint.host;
          }
        }
      });
      /**
       * The low level HTTP response object, encapsulating all HTTP header
       * and body data returned from the request.
       *
       * @!attribute statusCode
       *   @return [Integer] the HTTP status code of the response (e.g., 200, 404)
       * @!attribute headers
       *   @return [map<String,String>]
       *      a map of response header keys and their respective values
       * @!attribute body
       *   @return [String] the response body payload
       * @!attribute [r] streaming
       *   @return [Boolean] whether this response is being streamed at a low-level.
       *     Defaults to `false` (buffered reads). Do not modify this manually, use
       *     {createUnbufferedStream} to convert the stream to unbuffered mode
       *     instead.
       */

      AWS.HttpResponse = inherit({
        /**
         * @api private
         */
        constructor: function HttpResponse() {
          this.statusCode = undefined;
          this.headers = {};
          this.body = undefined;
          this.streaming = false;
          this.stream = null;
        },

        /**
         * Disables buffering on the HTTP response and returns the stream for reading.
         * @return [Stream, XMLHttpRequest, null] the underlying stream object.
         *   Use this object to directly read data off of the stream.
         * @note This object is only available after the {AWS.Request~httpHeaders}
         *   event has fired. This method must be called prior to
         *   {AWS.Request~httpData}.
         * @example Taking control of a stream
         *   request.on('httpHeaders', function(statusCode, headers) {
         *     if (statusCode < 300) {
         *       if (headers.etag === 'xyz') {
         *         // pipe the stream, disabling buffering
         *         var stream = this.response.httpResponse.createUnbufferedStream();
         *         stream.pipe(process.stdout);
         *       } else { // abort this request and set a better error message
         *         this.abort();
         *         this.response.error = new Error('Invalid ETag');
         *       }
         *     }
         *   }).send(console.log);
         */
        createUnbufferedStream: function createUnbufferedStream() {
          this.streaming = true;
          return this.stream;
        }
      });
      AWS.HttpClient = inherit({});
      /**
       * @api private
       */

      AWS.HttpClient.getInstance = function getInstance() {
        if (this.singleton === undefined) {
          this.singleton = new this();
        }

        return this.singleton;
      };
      /***/

    },

    /***/
    "QAmw":
    /*!*****************************************!*\
      !*** ./node_modules/ngx-csv/ngx-csv.js ***!
      \*****************************************/

    /*! no static exports found */

    /***/
    function QAmw(module, exports, __webpack_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });

      var CsvConfigConsts = function () {
        function CsvConfigConsts() {}

        CsvConfigConsts.EOL = "\r\n";
        CsvConfigConsts.BOM = "\uFEFF";
        CsvConfigConsts.DEFAULT_FIELD_SEPARATOR = ',';
        CsvConfigConsts.DEFAULT_DECIMAL_SEPARATOR = '.';
        CsvConfigConsts.DEFAULT_QUOTE = '"';
        CsvConfigConsts.DEFAULT_SHOW_TITLE = false;
        CsvConfigConsts.DEFAULT_TITLE = 'My Report';
        CsvConfigConsts.DEFAULT_FILENAME = 'mycsv.csv';
        CsvConfigConsts.DEFAULT_SHOW_LABELS = false;
        CsvConfigConsts.DEFAULT_USE_BOM = true;
        CsvConfigConsts.DEFAULT_HEADER = [];
        CsvConfigConsts.DEFAULT_NO_DOWNLOAD = false;
        CsvConfigConsts.DEFAULT_REMOVE_EMPTY_VALUES = false;
        return CsvConfigConsts;
      }();

      exports.CsvConfigConsts = CsvConfigConsts;
      exports.ConfigDefaults = {
        filename: CsvConfigConsts.DEFAULT_FILENAME,
        fieldSeparator: CsvConfigConsts.DEFAULT_FIELD_SEPARATOR,
        quoteStrings: CsvConfigConsts.DEFAULT_QUOTE,
        decimalseparator: CsvConfigConsts.DEFAULT_DECIMAL_SEPARATOR,
        showLabels: CsvConfigConsts.DEFAULT_SHOW_LABELS,
        showTitle: CsvConfigConsts.DEFAULT_SHOW_TITLE,
        title: CsvConfigConsts.DEFAULT_TITLE,
        useBom: CsvConfigConsts.DEFAULT_USE_BOM,
        headers: CsvConfigConsts.DEFAULT_HEADER,
        noDownload: CsvConfigConsts.DEFAULT_NO_DOWNLOAD,
        removeEmptyValues: CsvConfigConsts.DEFAULT_REMOVE_EMPTY_VALUES
      };

      var ngxCsv = function () {
        function ngxCsv(DataJSON, filename, options) {
          this.csv = "";
          var config = options || {};
          this.data = typeof DataJSON != 'object' ? JSON.parse(DataJSON) : DataJSON;
          this._options = objectAssign({}, exports.ConfigDefaults, config);

          if (this._options.filename) {
            this._options.filename = filename;
          }

          this.generateCsv();
        }
        /**
         * Generate and Download Csv
         */


        ngxCsv.prototype.generateCsv = function () {
          if (this._options.useBom) {
            this.csv += CsvConfigConsts.BOM;
          }

          if (this._options.showTitle) {
            this.csv += this._options.title + '\r\n\n';
          }

          this.getHeaders();
          this.getBody();

          if (this.csv == '') {
            console.log("Invalid data");
            return;
          }

          if (this._options.noDownload) {
            return this.csv;
          }

          var blob = new Blob([this.csv], {
            "type": "text/csv;charset=utf8;"
          });

          if (navigator.msSaveBlob) {
            var filename = this._options.filename.replace(/ /g, "_") + ".csv";
            navigator.msSaveBlob(blob, filename);
          } else {
            var uri = 'data:attachment/csv;charset=utf-8,' + encodeURI(this.csv);
            var link = document.createElement("a");
            link.href = URL.createObjectURL(blob);
            link.setAttribute('visibility', 'hidden');
            link.download = this._options.filename.replace(/ /g, "_") + ".csv";
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
          }
        };
        /**
         * Create Headers
         */


        ngxCsv.prototype.getHeaders = function () {
          var _this = this;

          if (this._options.headers.length > 0) {
            var headers = this._options.headers;
            var row = headers.reduce(function (headerRow, header) {
              return headerRow + header + _this._options.fieldSeparator;
            }, '');
            row = row.slice(0, -1);
            this.csv += row + CsvConfigConsts.EOL;
          }
        };
        /**
         * Create Body
         */


        ngxCsv.prototype.getBody = function () {
          for (var i = 0; i < this.data.length; i++) {
            var row = "";

            for (var index in this.data[i]) {
              row += this.formartData(this.data[i][index]) + this._options.fieldSeparator;
            }

            row = row.slice(0, -1);
            this.csv += row + CsvConfigConsts.EOL;
          }
        };
        /**
         * Format Data
         * @param {any} data
         */


        ngxCsv.prototype.formartData = function (data) {
          if (this._options.removeEmptyValues && !data) {
            return "";
          }

          if (this._options.decimalseparator === 'locale' && ngxCsv.isFloat(data)) {
            return data.toLocaleString();
          }

          if (this._options.decimalseparator !== '.' && ngxCsv.isFloat(data)) {
            return data.toString().replace('.', this._options.decimalseparator);
          }

          if (typeof data === 'string') {
            data = data.replace(/"/g, '""');

            if (this._options.quoteStrings || data.indexOf(',') > -1 || data.indexOf('\n') > -1 || data.indexOf('\r') > -1) {
              data = this._options.quoteStrings + data + this._options.quoteStrings;
            }

            return data;
          }

          if (typeof data === 'boolean') {
            return data ? 'TRUE' : 'FALSE';
          }

          return data;
        };
        /**
         * Get CSV String
         */


        ngxCsv.prototype.getCsv = function () {
          return this.csv;
        };
        /**
         * Check if is Float
         * @param {any} input
         */


        ngxCsv.isFloat = function (input) {
          return +input === input && (!isFinite(input) || Boolean(input % 1));
        };

        return ngxCsv;
      }();

      exports.ngxCsv = ngxCsv;
      var hasOwnProperty = Object.prototype.hasOwnProperty;
      var propIsEnumerable = Object.prototype.propertyIsEnumerable;
      /**
       * Convet to Object
       * @param {any} val
       */

      function toObject(val) {
        if (val === null || val === undefined) {
          throw new TypeError('Object.assign cannot be called with null or undefined');
        }

        return Object(val);
      }
      /**
       * Assign data  to new Object
       * @param {any}   target
       * @param {any[]} ...source
       */


      function objectAssign(target) {
        var source = [];

        for (var _i = 1; _i < arguments.length; _i++) {
          source[_i - 1] = arguments[_i];
        }

        var from;
        var to = toObject(target);
        var symbols;

        for (var s = 1; s < arguments.length; s++) {
          from = Object(arguments[s]);

          for (var key in from) {
            if (hasOwnProperty.call(from, key)) {
              to[key] = from[key];
            }
          }

          if (Object.getOwnPropertySymbols) {
            symbols = Object.getOwnPropertySymbols(from);

            for (var i = 0; i < symbols.length; i++) {
              if (propIsEnumerable.call(from, symbols[i])) {
                to[symbols[i]] = from[symbols[i]];
              }
            }
          }
        }

        return to;
      } //# sourceMappingURL=ngx-csv.js.map

      /***/

    },

    /***/
    "QIAL":
    /*!*************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/isInteropObservable.js ***!
      \*************************************************************************/

    /*! exports provided: isInteropObservable */

    /***/
    function QIAL(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isInteropObservable", function () {
        return isInteropObservable;
      });
      /* harmony import */


      var _symbol_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../symbol/observable */
      "kJWO");

      function isInteropObservable(input) {
        return input && typeof input[_symbol_observable__WEBPACK_IMPORTED_MODULE_0__["observable"]] === 'function';
      } //# sourceMappingURL=isInteropObservable.js.map

      /***/

    },

    /***/
    "QRdw":
    /*!**************************************************************************!*\
      !*** ./node_modules/ng2-scroll-to-el/__ivy_ngcc__/scrollTo.directive.js ***!
      \**************************************************************************/

    /*! exports provided: ScrollToDirective */

    /***/
    function QRdw(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ScrollToDirective", function () {
        return ScrollToDirective;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _scrollTo_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./scrollTo.service */
      "kizl");

      var ScrollToDirective = function () {
        function ScrollToDirective(scrollToService) {
          this.scrollToService = scrollToService;
        }

        ScrollToDirective.prototype.ngOnInit = function () {
          this.scrollDuration = !this.scrollDuration ? 500 : this.scrollDuration;
          this.scrollOffset = !this.scrollOffset ? 0 : this.scrollOffset;
        };

        ScrollToDirective.prototype.onMouseClick = function () {
          this.scrollToService.scrollTo(this.scrollTo, this.scrollDuration, this.scrollOffset);
        };

        ScrollToDirective.ɵfac = function ScrollToDirective_Factory(t) {
          return new (t || ScrollToDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_scrollTo_service__WEBPACK_IMPORTED_MODULE_1__["ScrollToService"]));
        };

        ScrollToDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
          type: ScrollToDirective,
          selectors: [["", "scrollTo", ""]],
          hostBindings: function ScrollToDirective_HostBindings(rf, ctx) {
            if (rf & 1) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("mousedown", function ScrollToDirective_mousedown_HostBindingHandler() {
                return ctx.onMouseClick();
              });
            }
          },
          inputs: {
            scrollDuration: "scrollDuration",
            scrollOffset: "scrollOffset",
            scrollTo: "scrollTo"
          }
        });

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ScrollToDirective, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
            args: [{
              selector: '[scrollTo]'
            }]
          }], function () {
            return [{
              type: _scrollTo_service__WEBPACK_IMPORTED_MODULE_1__["ScrollToService"]
            }];
          }, {
            scrollDuration: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
              args: ['scrollDuration']
            }],
            scrollOffset: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
              args: ['scrollOffset']
            }],
            onMouseClick: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
              args: ['mousedown']
            }],
            scrollTo: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
              args: ['scrollTo']
            }]
          });
        })();

        return ScrollToDirective;
      }();
      /** @nocollapse */


      ScrollToDirective.ctorParameters = function () {
        return [{
          type: _scrollTo_service__WEBPACK_IMPORTED_MODULE_1__["ScrollToService"]
        }];
      };

      ScrollToDirective.propDecorators = {
        'scrollTo': [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['scrollTo']
        }],
        'scrollDuration': [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['scrollDuration']
        }],
        'scrollOffset': [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['scrollOffset']
        }],
        'onMouseClick': [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
          args: ['mousedown']
        }]
      }; //# sourceMappingURL=scrollTo.directive.js.map

      /***/
    },

    /***/
    "QVta":
    /*!*******************************************************!*\
      !*** ./node_modules/sweetalert2/src/sweetalert2.scss ***!
      \*******************************************************/

    /*! exports provided: default */

    /***/
    function QVta(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony default export */


      __webpack_exports__["default"] = "@charset \"UTF-8\";\n.swal2-popup.swal2-toast {\n  flex-direction: row;\n  align-items: center;\n  width: auto;\n  padding: 0.625em;\n  overflow-y: hidden;\n  box-shadow: 0 0 0.625em #d9d9d9;\n}\n.swal2-popup.swal2-toast .swal2-header {\n  flex-direction: row;\n}\n.swal2-popup.swal2-toast .swal2-title {\n  flex-grow: 1;\n  justify-content: flex-start;\n  margin: 0 0.6em;\n  font-size: 1em;\n}\n.swal2-popup.swal2-toast .swal2-footer {\n  margin: 0.5em 0 0;\n  padding: 0.5em 0 0;\n  font-size: 0.8em;\n}\n.swal2-popup.swal2-toast .swal2-close {\n  position: static;\n  width: 0.8em;\n  height: 0.8em;\n  line-height: 0.8;\n}\n.swal2-popup.swal2-toast .swal2-content {\n  justify-content: flex-start;\n  font-size: 1em;\n}\n.swal2-popup.swal2-toast .swal2-icon {\n  width: 2em;\n  min-width: 2em;\n  height: 2em;\n  margin: 0;\n}\n.swal2-popup.swal2-toast .swal2-icon::before {\n  display: flex;\n  align-items: center;\n  font-size: 2em;\n  font-weight: bold;\n}\n@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {\n  .swal2-popup.swal2-toast .swal2-icon::before {\n    font-size: 0.25em;\n  }\n}\n.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring {\n  width: 2em;\n  height: 2em;\n}\n.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line] {\n  top: 0.875em;\n  width: 1.375em;\n}\n.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left] {\n  left: 0.3125em;\n}\n.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right] {\n  right: 0.3125em;\n}\n.swal2-popup.swal2-toast .swal2-actions {\n  flex-basis: auto !important;\n  width: auto;\n  height: auto;\n  margin: 0 0.3125em;\n}\n.swal2-popup.swal2-toast .swal2-styled {\n  margin: 0 0.3125em;\n  padding: 0.3125em 0.625em;\n  font-size: 1em;\n}\n.swal2-popup.swal2-toast .swal2-styled:focus {\n  box-shadow: 0 0 0 0.0625em #fff, 0 0 0 0.125em rgba(50, 100, 150, 0.4);\n}\n.swal2-popup.swal2-toast .swal2-success {\n  border-color: #a5dc86;\n}\n.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line] {\n  position: absolute;\n  width: 1.6em;\n  height: 3em;\n  transform: rotate(45deg);\n  border-radius: 50%;\n}\n.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left] {\n  top: -0.8em;\n  left: -0.5em;\n  transform: rotate(-45deg);\n  transform-origin: 2em 2em;\n  border-radius: 4em 0 0 4em;\n}\n.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right] {\n  top: -0.25em;\n  left: 0.9375em;\n  transform-origin: 0 1.5em;\n  border-radius: 0 4em 4em 0;\n}\n.swal2-popup.swal2-toast .swal2-success .swal2-success-ring {\n  width: 2em;\n  height: 2em;\n}\n.swal2-popup.swal2-toast .swal2-success .swal2-success-fix {\n  top: 0;\n  left: 0.4375em;\n  width: 0.4375em;\n  height: 2.6875em;\n}\n.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line] {\n  height: 0.3125em;\n}\n.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip] {\n  top: 1.125em;\n  left: 0.1875em;\n  width: 0.75em;\n}\n.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long] {\n  top: 0.9375em;\n  right: 0.1875em;\n  width: 1.375em;\n}\n.swal2-popup.swal2-toast.swal2-show {\n  -webkit-animation: swal2-toast-show 0.5s;\n          animation: swal2-toast-show 0.5s;\n}\n.swal2-popup.swal2-toast.swal2-hide {\n  -webkit-animation: swal2-toast-hide 0.1s forwards;\n          animation: swal2-toast-hide 0.1s forwards;\n}\n.swal2-popup.swal2-toast .swal2-animate-success-icon .swal2-success-line-tip {\n  -webkit-animation: swal2-toast-animate-success-line-tip 0.75s;\n          animation: swal2-toast-animate-success-line-tip 0.75s;\n}\n.swal2-popup.swal2-toast .swal2-animate-success-icon .swal2-success-line-long {\n  -webkit-animation: swal2-toast-animate-success-line-long 0.75s;\n          animation: swal2-toast-animate-success-line-long 0.75s;\n}\n.swal2-container {\n  display: flex;\n  position: fixed;\n  z-index: 1060;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  flex-direction: row;\n  align-items: center;\n  justify-content: center;\n  padding: 0.625em;\n  overflow-x: hidden;\n  background-color: transparent;\n  -webkit-overflow-scrolling: touch;\n}\n.swal2-container.swal2-top {\n  align-items: flex-start;\n}\n.swal2-container.swal2-top-start, .swal2-container.swal2-top-left {\n  align-items: flex-start;\n  justify-content: flex-start;\n}\n.swal2-container.swal2-top-end, .swal2-container.swal2-top-right {\n  align-items: flex-start;\n  justify-content: flex-end;\n}\n.swal2-container.swal2-center {\n  align-items: center;\n}\n.swal2-container.swal2-center-start, .swal2-container.swal2-center-left {\n  align-items: center;\n  justify-content: flex-start;\n}\n.swal2-container.swal2-center-end, .swal2-container.swal2-center-right {\n  align-items: center;\n  justify-content: flex-end;\n}\n.swal2-container.swal2-bottom {\n  align-items: flex-end;\n}\n.swal2-container.swal2-bottom-start, .swal2-container.swal2-bottom-left {\n  align-items: flex-end;\n  justify-content: flex-start;\n}\n.swal2-container.swal2-bottom-end, .swal2-container.swal2-bottom-right {\n  align-items: flex-end;\n  justify-content: flex-end;\n}\n.swal2-container.swal2-bottom > :first-child, .swal2-container.swal2-bottom-start > :first-child, .swal2-container.swal2-bottom-left > :first-child, .swal2-container.swal2-bottom-end > :first-child, .swal2-container.swal2-bottom-right > :first-child {\n  margin-top: auto;\n}\n.swal2-container.swal2-grow-fullscreen > .swal2-modal {\n  display: flex !important;\n  flex: 1;\n  align-self: stretch;\n  justify-content: center;\n}\n.swal2-container.swal2-grow-row > .swal2-modal {\n  display: flex !important;\n  flex: 1;\n  align-content: center;\n  justify-content: center;\n}\n.swal2-container.swal2-grow-column {\n  flex: 1;\n  flex-direction: column;\n}\n.swal2-container.swal2-grow-column.swal2-top, .swal2-container.swal2-grow-column.swal2-center, .swal2-container.swal2-grow-column.swal2-bottom {\n  align-items: center;\n}\n.swal2-container.swal2-grow-column.swal2-top-start, .swal2-container.swal2-grow-column.swal2-center-start, .swal2-container.swal2-grow-column.swal2-bottom-start, .swal2-container.swal2-grow-column.swal2-top-left, .swal2-container.swal2-grow-column.swal2-center-left, .swal2-container.swal2-grow-column.swal2-bottom-left {\n  align-items: flex-start;\n}\n.swal2-container.swal2-grow-column.swal2-top-end, .swal2-container.swal2-grow-column.swal2-center-end, .swal2-container.swal2-grow-column.swal2-bottom-end, .swal2-container.swal2-grow-column.swal2-top-right, .swal2-container.swal2-grow-column.swal2-center-right, .swal2-container.swal2-grow-column.swal2-bottom-right {\n  align-items: flex-end;\n}\n.swal2-container.swal2-grow-column > .swal2-modal {\n  display: flex !important;\n  flex: 1;\n  align-content: center;\n  justify-content: center;\n}\n.swal2-container:not(.swal2-top):not(.swal2-top-start):not(.swal2-top-end):not(.swal2-top-left):not(.swal2-top-right):not(.swal2-center-start):not(.swal2-center-end):not(.swal2-center-left):not(.swal2-center-right):not(.swal2-bottom):not(.swal2-bottom-start):not(.swal2-bottom-end):not(.swal2-bottom-left):not(.swal2-bottom-right):not(.swal2-grow-fullscreen) > .swal2-modal {\n  margin: auto;\n}\n@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {\n  .swal2-container .swal2-modal {\n    margin: 0 !important;\n  }\n}\n.swal2-container.swal2-fade {\n  transition: background-color 0.1s;\n}\n.swal2-container.swal2-shown {\n  background-color: rgba(0, 0, 0, 0.4);\n}\n.swal2-popup {\n  display: none;\n  position: relative;\n  box-sizing: border-box;\n  flex-direction: column;\n  justify-content: center;\n  width: 32em;\n  max-width: 100%;\n  padding: 1.25em;\n  border: none;\n  border-radius: 0.3125em;\n  background: #fff;\n  font-family: inherit;\n  font-size: 1rem;\n}\n.swal2-popup:focus {\n  outline: none;\n}\n.swal2-popup.swal2-loading {\n  overflow-y: hidden;\n}\n.swal2-header {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n}\n.swal2-title {\n  position: relative;\n  max-width: 100%;\n  margin: 0 0 0.4em;\n  padding: 0;\n  color: #595959;\n  font-size: 1.875em;\n  font-weight: 600;\n  text-align: center;\n  text-transform: none;\n  word-wrap: break-word;\n}\n.swal2-actions {\n  display: flex;\n  z-index: 1;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: center;\n  width: 100%;\n  margin: 1.25em auto 0;\n}\n.swal2-actions:not(.swal2-loading) .swal2-styled[disabled] {\n  opacity: 0.4;\n}\n.swal2-actions:not(.swal2-loading) .swal2-styled:hover {\n  background-image: linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1));\n}\n.swal2-actions:not(.swal2-loading) .swal2-styled:active {\n  background-image: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2));\n}\n.swal2-actions.swal2-loading .swal2-styled.swal2-confirm {\n  box-sizing: border-box;\n  width: 2.5em;\n  height: 2.5em;\n  margin: 0.46875em;\n  padding: 0;\n  -webkit-animation: swal2-rotate-loading 1.5s linear 0s infinite normal;\n          animation: swal2-rotate-loading 1.5s linear 0s infinite normal;\n  border: 0.25em solid transparent;\n  border-radius: 100%;\n  border-color: transparent;\n  background-color: transparent !important;\n  color: transparent;\n  cursor: default;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n.swal2-actions.swal2-loading .swal2-styled.swal2-cancel {\n  margin-right: 30px;\n  margin-left: 30px;\n}\n.swal2-actions.swal2-loading :not(.swal2-styled).swal2-confirm::after {\n  content: \"\";\n  display: inline-block;\n  width: 15px;\n  height: 15px;\n  margin-left: 5px;\n  -webkit-animation: swal2-rotate-loading 1.5s linear 0s infinite normal;\n          animation: swal2-rotate-loading 1.5s linear 0s infinite normal;\n  border: 3px solid #999999;\n  border-radius: 50%;\n  border-right-color: transparent;\n  box-shadow: 1px 1px 1px #fff;\n}\n.swal2-styled {\n  margin: 0.3125em;\n  padding: 0.625em 2em;\n  box-shadow: none;\n  font-weight: 500;\n}\n.swal2-styled:not([disabled]) {\n  cursor: pointer;\n}\n.swal2-styled.swal2-confirm {\n  border: 0;\n  border-radius: 0.25em;\n  background: initial;\n  background-color: #3085d6;\n  color: #fff;\n  font-size: 1.0625em;\n}\n.swal2-styled.swal2-cancel {\n  border: 0;\n  border-radius: 0.25em;\n  background: initial;\n  background-color: #aaa;\n  color: #fff;\n  font-size: 1.0625em;\n}\n.swal2-styled:focus {\n  outline: none;\n  box-shadow: 0 0 0 2px #fff, 0 0 0 4px rgba(50, 100, 150, 0.4);\n}\n.swal2-styled::-moz-focus-inner {\n  border: 0;\n}\n.swal2-footer {\n  justify-content: center;\n  margin: 1.25em 0 0;\n  padding: 1em 0 0;\n  border-top: 1px solid #eee;\n  color: #545454;\n  font-size: 1em;\n}\n.swal2-image {\n  max-width: 100%;\n  margin: 1.25em auto;\n}\n.swal2-close {\n  position: absolute;\n  z-index: 2;\n  /* 1617 */\n  top: 0;\n  right: 0;\n  justify-content: center;\n  width: 1.2em;\n  height: 1.2em;\n  padding: 0;\n  overflow: hidden;\n  transition: color 0.1s ease-out;\n  border: none;\n  border-radius: 0;\n  outline: initial;\n  background: transparent;\n  color: #cccccc;\n  font-family: serif;\n  font-size: 2.5em;\n  line-height: 1.2;\n  cursor: pointer;\n}\n.swal2-close:hover {\n  transform: none;\n  background: transparent;\n  color: #f27474;\n}\n.swal2-content {\n  z-index: 1;\n  justify-content: center;\n  margin: 0;\n  padding: 0;\n  color: #545454;\n  font-size: 1.125em;\n  font-weight: normal;\n  line-height: normal;\n  text-align: center;\n  word-wrap: break-word;\n}\n.swal2-input,\n.swal2-file,\n.swal2-textarea,\n.swal2-select,\n.swal2-radio,\n.swal2-checkbox {\n  margin: 1em auto;\n}\n.swal2-input,\n.swal2-file,\n.swal2-textarea {\n  box-sizing: border-box;\n  width: 100%;\n  transition: border-color 0.3s, box-shadow 0.3s;\n  border: 1px solid #d9d9d9;\n  border-radius: 0.1875em;\n  background: inherit;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06);\n  color: inherit;\n  font-size: 1.125em;\n}\n.swal2-input.swal2-inputerror,\n.swal2-file.swal2-inputerror,\n.swal2-textarea.swal2-inputerror {\n  border-color: #f27474 !important;\n  box-shadow: 0 0 2px #f27474 !important;\n}\n.swal2-input:focus,\n.swal2-file:focus,\n.swal2-textarea:focus {\n  border: 1px solid #b4dbed;\n  outline: none;\n  box-shadow: 0 0 3px #c4e6f5;\n}\n.swal2-input::-moz-placeholder, .swal2-file::-moz-placeholder, .swal2-textarea::-moz-placeholder {\n  color: #cccccc;\n}\n.swal2-input::placeholder,\n.swal2-file::placeholder,\n.swal2-textarea::placeholder {\n  color: #cccccc;\n}\n.swal2-range {\n  margin: 1em auto;\n  background: inherit;\n}\n.swal2-range input {\n  width: 80%;\n}\n.swal2-range output {\n  width: 20%;\n  color: inherit;\n  font-weight: 600;\n  text-align: center;\n}\n.swal2-range input,\n.swal2-range output {\n  height: 2.625em;\n  padding: 0;\n  font-size: 1.125em;\n  line-height: 2.625em;\n}\n.swal2-input {\n  height: 2.625em;\n  padding: 0 0.75em;\n}\n.swal2-input[type=number] {\n  max-width: 10em;\n}\n.swal2-file {\n  background: inherit;\n  font-size: 1.125em;\n}\n.swal2-textarea {\n  height: 6.75em;\n  padding: 0.75em;\n}\n.swal2-select {\n  min-width: 50%;\n  max-width: 100%;\n  padding: 0.375em 0.625em;\n  background: inherit;\n  color: inherit;\n  font-size: 1.125em;\n}\n.swal2-radio,\n.swal2-checkbox {\n  align-items: center;\n  justify-content: center;\n  background: inherit;\n  color: inherit;\n}\n.swal2-radio label,\n.swal2-checkbox label {\n  margin: 0 0.6em;\n  font-size: 1.125em;\n}\n.swal2-radio input,\n.swal2-checkbox input {\n  margin: 0 0.4em;\n}\n.swal2-validation-message {\n  display: none;\n  align-items: center;\n  justify-content: center;\n  padding: 0.625em;\n  overflow: hidden;\n  background: #f0f0f0;\n  color: #666666;\n  font-size: 1em;\n  font-weight: 300;\n}\n.swal2-validation-message::before {\n  content: \"!\";\n  display: inline-block;\n  width: 1.5em;\n  min-width: 1.5em;\n  height: 1.5em;\n  margin: 0 0.625em;\n  zoom: normal;\n  border-radius: 50%;\n  background-color: #f27474;\n  color: #fff;\n  font-weight: 600;\n  line-height: 1.5em;\n  text-align: center;\n}\n.swal2-icon {\n  position: relative;\n  box-sizing: content-box;\n  justify-content: center;\n  width: 5em;\n  height: 5em;\n  margin: 1.25em auto 1.875em;\n  zoom: normal;\n  border: 0.25em solid transparent;\n  border-radius: 50%;\n  font-family: inherit;\n  line-height: 5em;\n  cursor: default;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n.swal2-icon::before {\n  display: flex;\n  align-items: center;\n  height: 92%;\n  font-size: 3.75em;\n}\n.swal2-icon.swal2-error {\n  border-color: #f27474;\n}\n.swal2-icon.swal2-error .swal2-x-mark {\n  position: relative;\n  flex-grow: 1;\n}\n.swal2-icon.swal2-error [class^=swal2-x-mark-line] {\n  display: block;\n  position: absolute;\n  top: 2.3125em;\n  width: 2.9375em;\n  height: 0.3125em;\n  border-radius: 0.125em;\n  background-color: #f27474;\n}\n.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left] {\n  left: 1.0625em;\n  transform: rotate(45deg);\n}\n.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right] {\n  right: 1em;\n  transform: rotate(-45deg);\n}\n.swal2-icon.swal2-warning {\n  border-color: #facea8;\n  color: #f8bb86;\n}\n.swal2-icon.swal2-warning::before {\n  content: \"!\";\n}\n.swal2-icon.swal2-info {\n  border-color: #9de0f6;\n  color: #3fc3ee;\n}\n.swal2-icon.swal2-info::before {\n  content: \"i\";\n}\n.swal2-icon.swal2-question {\n  border-color: #c9dae1;\n  color: #87adbd;\n}\n.swal2-icon.swal2-question::before {\n  content: \"?\";\n}\n.swal2-icon.swal2-question.swal2-arabic-question-mark::before {\n  content: \"؟\";\n}\n.swal2-icon.swal2-success {\n  border-color: #a5dc86;\n}\n.swal2-icon.swal2-success [class^=swal2-success-circular-line] {\n  position: absolute;\n  width: 3.75em;\n  height: 7.5em;\n  transform: rotate(45deg);\n  border-radius: 50%;\n}\n.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left] {\n  top: -0.4375em;\n  left: -2.0635em;\n  transform: rotate(-45deg);\n  transform-origin: 3.75em 3.75em;\n  border-radius: 7.5em 0 0 7.5em;\n}\n.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right] {\n  top: -0.6875em;\n  left: 1.875em;\n  transform: rotate(-45deg);\n  transform-origin: 0 3.75em;\n  border-radius: 0 7.5em 7.5em 0;\n}\n.swal2-icon.swal2-success .swal2-success-ring {\n  position: absolute;\n  z-index: 2;\n  top: -0.25em;\n  left: -0.25em;\n  box-sizing: content-box;\n  width: 100%;\n  height: 100%;\n  border: 0.25em solid rgba(165, 220, 134, 0.3);\n  border-radius: 50%;\n}\n.swal2-icon.swal2-success .swal2-success-fix {\n  position: absolute;\n  z-index: 1;\n  top: 0.5em;\n  left: 1.625em;\n  width: 0.4375em;\n  height: 5.625em;\n  transform: rotate(-45deg);\n}\n.swal2-icon.swal2-success [class^=swal2-success-line] {\n  display: block;\n  position: absolute;\n  z-index: 2;\n  height: 0.3125em;\n  border-radius: 0.125em;\n  background-color: #a5dc86;\n}\n.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip] {\n  top: 2.875em;\n  left: 0.875em;\n  width: 1.5625em;\n  transform: rotate(45deg);\n}\n.swal2-icon.swal2-success [class^=swal2-success-line][class$=long] {\n  top: 2.375em;\n  right: 0.5em;\n  width: 2.9375em;\n  transform: rotate(-45deg);\n}\n.swal2-progress-steps {\n  align-items: center;\n  margin: 0 0 1.25em;\n  padding: 0;\n  background: inherit;\n  font-weight: 600;\n}\n.swal2-progress-steps li {\n  display: inline-block;\n  position: relative;\n}\n.swal2-progress-steps .swal2-progress-step {\n  z-index: 20;\n  width: 2em;\n  height: 2em;\n  border-radius: 2em;\n  background: #3085d6;\n  color: #fff;\n  line-height: 2em;\n  text-align: center;\n}\n.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step {\n  background: #3085d6;\n}\n.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step {\n  background: #add8e6;\n  color: #fff;\n}\n.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step-line {\n  background: #add8e6;\n}\n.swal2-progress-steps .swal2-progress-step-line {\n  z-index: 10;\n  width: 2.5em;\n  height: 0.4em;\n  margin: 0 -1px;\n  background: #3085d6;\n}\n[class^=swal2] {\n  -webkit-tap-highlight-color: transparent;\n}\n.swal2-show {\n  -webkit-animation: swal2-show 0.3s;\n          animation: swal2-show 0.3s;\n}\n.swal2-show.swal2-noanimation {\n  -webkit-animation: none;\n          animation: none;\n}\n.swal2-hide {\n  -webkit-animation: swal2-hide 0.15s forwards;\n          animation: swal2-hide 0.15s forwards;\n}\n.swal2-hide.swal2-noanimation {\n  -webkit-animation: none;\n          animation: none;\n}\n.swal2-rtl .swal2-close {\n  right: auto;\n  left: 0;\n}\n.swal2-animate-success-icon .swal2-success-line-tip {\n  -webkit-animation: swal2-animate-success-line-tip 0.75s;\n          animation: swal2-animate-success-line-tip 0.75s;\n}\n.swal2-animate-success-icon .swal2-success-line-long {\n  -webkit-animation: swal2-animate-success-line-long 0.75s;\n          animation: swal2-animate-success-line-long 0.75s;\n}\n.swal2-animate-success-icon .swal2-success-circular-line-right {\n  -webkit-animation: swal2-rotate-success-circular-line 4.25s ease-in;\n          animation: swal2-rotate-success-circular-line 4.25s ease-in;\n}\n.swal2-animate-error-icon {\n  -webkit-animation: swal2-animate-error-icon 0.5s;\n          animation: swal2-animate-error-icon 0.5s;\n}\n.swal2-animate-error-icon .swal2-x-mark {\n  -webkit-animation: swal2-animate-error-x-mark 0.5s;\n          animation: swal2-animate-error-x-mark 0.5s;\n}\n@supports (-ms-accelerator: true) {\n  .swal2-range input {\n    width: 100% !important;\n  }\n  .swal2-range output {\n    display: none;\n  }\n}\n@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {\n  .swal2-range input {\n    width: 100% !important;\n  }\n  .swal2-range output {\n    display: none;\n  }\n}\n@-moz-document url-prefix() {\n  .swal2-close:focus {\n    outline: 2px solid rgba(50, 100, 150, 0.4);\n  }\n}\n@-webkit-keyframes swal2-toast-show {\n  0% {\n    transform: translateY(-0.625em) rotateZ(2deg);\n  }\n  33% {\n    transform: translateY(0) rotateZ(-2deg);\n  }\n  66% {\n    transform: translateY(0.3125em) rotateZ(2deg);\n  }\n  100% {\n    transform: translateY(0) rotateZ(0deg);\n  }\n}\n@keyframes swal2-toast-show {\n  0% {\n    transform: translateY(-0.625em) rotateZ(2deg);\n  }\n  33% {\n    transform: translateY(0) rotateZ(-2deg);\n  }\n  66% {\n    transform: translateY(0.3125em) rotateZ(2deg);\n  }\n  100% {\n    transform: translateY(0) rotateZ(0deg);\n  }\n}\n@-webkit-keyframes swal2-toast-hide {\n  100% {\n    transform: rotateZ(1deg);\n    opacity: 0;\n  }\n}\n@keyframes swal2-toast-hide {\n  100% {\n    transform: rotateZ(1deg);\n    opacity: 0;\n  }\n}\n@-webkit-keyframes swal2-toast-animate-success-line-tip {\n  0% {\n    top: 0.5625em;\n    left: 0.0625em;\n    width: 0;\n  }\n  54% {\n    top: 0.125em;\n    left: 0.125em;\n    width: 0;\n  }\n  70% {\n    top: 0.625em;\n    left: -0.25em;\n    width: 1.625em;\n  }\n  84% {\n    top: 1.0625em;\n    left: 0.75em;\n    width: 0.5em;\n  }\n  100% {\n    top: 1.125em;\n    left: 0.1875em;\n    width: 0.75em;\n  }\n}\n@keyframes swal2-toast-animate-success-line-tip {\n  0% {\n    top: 0.5625em;\n    left: 0.0625em;\n    width: 0;\n  }\n  54% {\n    top: 0.125em;\n    left: 0.125em;\n    width: 0;\n  }\n  70% {\n    top: 0.625em;\n    left: -0.25em;\n    width: 1.625em;\n  }\n  84% {\n    top: 1.0625em;\n    left: 0.75em;\n    width: 0.5em;\n  }\n  100% {\n    top: 1.125em;\n    left: 0.1875em;\n    width: 0.75em;\n  }\n}\n@-webkit-keyframes swal2-toast-animate-success-line-long {\n  0% {\n    top: 1.625em;\n    right: 1.375em;\n    width: 0;\n  }\n  65% {\n    top: 1.25em;\n    right: 0.9375em;\n    width: 0;\n  }\n  84% {\n    top: 0.9375em;\n    right: 0;\n    width: 1.125em;\n  }\n  100% {\n    top: 0.9375em;\n    right: 0.1875em;\n    width: 1.375em;\n  }\n}\n@keyframes swal2-toast-animate-success-line-long {\n  0% {\n    top: 1.625em;\n    right: 1.375em;\n    width: 0;\n  }\n  65% {\n    top: 1.25em;\n    right: 0.9375em;\n    width: 0;\n  }\n  84% {\n    top: 0.9375em;\n    right: 0;\n    width: 1.125em;\n  }\n  100% {\n    top: 0.9375em;\n    right: 0.1875em;\n    width: 1.375em;\n  }\n}\n@-webkit-keyframes swal2-show {\n  0% {\n    transform: scale(0.7);\n  }\n  45% {\n    transform: scale(1.05);\n  }\n  80% {\n    transform: scale(0.95);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n@keyframes swal2-show {\n  0% {\n    transform: scale(0.7);\n  }\n  45% {\n    transform: scale(1.05);\n  }\n  80% {\n    transform: scale(0.95);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n@-webkit-keyframes swal2-hide {\n  0% {\n    transform: scale(1);\n    opacity: 1;\n  }\n  100% {\n    transform: scale(0.5);\n    opacity: 0;\n  }\n}\n@keyframes swal2-hide {\n  0% {\n    transform: scale(1);\n    opacity: 1;\n  }\n  100% {\n    transform: scale(0.5);\n    opacity: 0;\n  }\n}\n@-webkit-keyframes swal2-animate-success-line-tip {\n  0% {\n    top: 1.1875em;\n    left: 0.0625em;\n    width: 0;\n  }\n  54% {\n    top: 1.0625em;\n    left: 0.125em;\n    width: 0;\n  }\n  70% {\n    top: 2.1875em;\n    left: -0.375em;\n    width: 3.125em;\n  }\n  84% {\n    top: 3em;\n    left: 1.3125em;\n    width: 1.0625em;\n  }\n  100% {\n    top: 2.8125em;\n    left: 0.875em;\n    width: 1.5625em;\n  }\n}\n@keyframes swal2-animate-success-line-tip {\n  0% {\n    top: 1.1875em;\n    left: 0.0625em;\n    width: 0;\n  }\n  54% {\n    top: 1.0625em;\n    left: 0.125em;\n    width: 0;\n  }\n  70% {\n    top: 2.1875em;\n    left: -0.375em;\n    width: 3.125em;\n  }\n  84% {\n    top: 3em;\n    left: 1.3125em;\n    width: 1.0625em;\n  }\n  100% {\n    top: 2.8125em;\n    left: 0.875em;\n    width: 1.5625em;\n  }\n}\n@-webkit-keyframes swal2-animate-success-line-long {\n  0% {\n    top: 3.375em;\n    right: 2.875em;\n    width: 0;\n  }\n  65% {\n    top: 3.375em;\n    right: 2.875em;\n    width: 0;\n  }\n  84% {\n    top: 2.1875em;\n    right: 0;\n    width: 3.4375em;\n  }\n  100% {\n    top: 2.375em;\n    right: 0.5em;\n    width: 2.9375em;\n  }\n}\n@keyframes swal2-animate-success-line-long {\n  0% {\n    top: 3.375em;\n    right: 2.875em;\n    width: 0;\n  }\n  65% {\n    top: 3.375em;\n    right: 2.875em;\n    width: 0;\n  }\n  84% {\n    top: 2.1875em;\n    right: 0;\n    width: 3.4375em;\n  }\n  100% {\n    top: 2.375em;\n    right: 0.5em;\n    width: 2.9375em;\n  }\n}\n@-webkit-keyframes swal2-rotate-success-circular-line {\n  0% {\n    transform: rotate(-45deg);\n  }\n  5% {\n    transform: rotate(-45deg);\n  }\n  12% {\n    transform: rotate(-405deg);\n  }\n  100% {\n    transform: rotate(-405deg);\n  }\n}\n@keyframes swal2-rotate-success-circular-line {\n  0% {\n    transform: rotate(-45deg);\n  }\n  5% {\n    transform: rotate(-45deg);\n  }\n  12% {\n    transform: rotate(-405deg);\n  }\n  100% {\n    transform: rotate(-405deg);\n  }\n}\n@-webkit-keyframes swal2-animate-error-x-mark {\n  0% {\n    margin-top: 1.625em;\n    transform: scale(0.4);\n    opacity: 0;\n  }\n  50% {\n    margin-top: 1.625em;\n    transform: scale(0.4);\n    opacity: 0;\n  }\n  80% {\n    margin-top: -0.375em;\n    transform: scale(1.15);\n  }\n  100% {\n    margin-top: 0;\n    transform: scale(1);\n    opacity: 1;\n  }\n}\n@keyframes swal2-animate-error-x-mark {\n  0% {\n    margin-top: 1.625em;\n    transform: scale(0.4);\n    opacity: 0;\n  }\n  50% {\n    margin-top: 1.625em;\n    transform: scale(0.4);\n    opacity: 0;\n  }\n  80% {\n    margin-top: -0.375em;\n    transform: scale(1.15);\n  }\n  100% {\n    margin-top: 0;\n    transform: scale(1);\n    opacity: 1;\n  }\n}\n@-webkit-keyframes swal2-animate-error-icon {\n  0% {\n    transform: rotateX(100deg);\n    opacity: 0;\n  }\n  100% {\n    transform: rotateX(0deg);\n    opacity: 1;\n  }\n}\n@keyframes swal2-animate-error-icon {\n  0% {\n    transform: rotateX(100deg);\n    opacity: 0;\n  }\n  100% {\n    transform: rotateX(0deg);\n    opacity: 1;\n  }\n}\n@-webkit-keyframes swal2-rotate-loading {\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(360deg);\n  }\n}\n@keyframes swal2-rotate-loading {\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(360deg);\n  }\n}\nbody.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) {\n  overflow: hidden;\n}\nbody.swal2-height-auto {\n  height: auto !important;\n}\nbody.swal2-no-backdrop .swal2-shown {\n  top: auto;\n  right: auto;\n  bottom: auto;\n  left: auto;\n  max-width: calc(100% - 0.625em * 2);\n  background-color: transparent;\n}\nbody.swal2-no-backdrop .swal2-shown > .swal2-modal {\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.4);\n}\nbody.swal2-no-backdrop .swal2-shown.swal2-top {\n  top: 0;\n  left: 50%;\n  transform: translateX(-50%);\n}\nbody.swal2-no-backdrop .swal2-shown.swal2-top-start, body.swal2-no-backdrop .swal2-shown.swal2-top-left {\n  top: 0;\n  left: 0;\n}\nbody.swal2-no-backdrop .swal2-shown.swal2-top-end, body.swal2-no-backdrop .swal2-shown.swal2-top-right {\n  top: 0;\n  right: 0;\n}\nbody.swal2-no-backdrop .swal2-shown.swal2-center {\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n}\nbody.swal2-no-backdrop .swal2-shown.swal2-center-start, body.swal2-no-backdrop .swal2-shown.swal2-center-left {\n  top: 50%;\n  left: 0;\n  transform: translateY(-50%);\n}\nbody.swal2-no-backdrop .swal2-shown.swal2-center-end, body.swal2-no-backdrop .swal2-shown.swal2-center-right {\n  top: 50%;\n  right: 0;\n  transform: translateY(-50%);\n}\nbody.swal2-no-backdrop .swal2-shown.swal2-bottom {\n  bottom: 0;\n  left: 50%;\n  transform: translateX(-50%);\n}\nbody.swal2-no-backdrop .swal2-shown.swal2-bottom-start, body.swal2-no-backdrop .swal2-shown.swal2-bottom-left {\n  bottom: 0;\n  left: 0;\n}\nbody.swal2-no-backdrop .swal2-shown.swal2-bottom-end, body.swal2-no-backdrop .swal2-shown.swal2-bottom-right {\n  right: 0;\n  bottom: 0;\n}\n@media print {\n  body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) {\n    overflow-y: scroll !important;\n  }\n  body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) > [aria-hidden=true] {\n    display: none;\n  }\n  body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container {\n    position: static !important;\n  }\n}\nbody.swal2-toast-shown .swal2-container {\n  background-color: transparent;\n}\nbody.swal2-toast-shown .swal2-container.swal2-shown {\n  background-color: transparent;\n}\nbody.swal2-toast-shown .swal2-container.swal2-top {\n  top: 0;\n  right: auto;\n  bottom: auto;\n  left: 50%;\n  transform: translateX(-50%);\n}\nbody.swal2-toast-shown .swal2-container.swal2-top-end, body.swal2-toast-shown .swal2-container.swal2-top-right {\n  top: 0;\n  right: 0;\n  bottom: auto;\n  left: auto;\n}\nbody.swal2-toast-shown .swal2-container.swal2-top-start, body.swal2-toast-shown .swal2-container.swal2-top-left {\n  top: 0;\n  right: auto;\n  bottom: auto;\n  left: 0;\n}\nbody.swal2-toast-shown .swal2-container.swal2-center-start, body.swal2-toast-shown .swal2-container.swal2-center-left {\n  top: 50%;\n  right: auto;\n  bottom: auto;\n  left: 0;\n  transform: translateY(-50%);\n}\nbody.swal2-toast-shown .swal2-container.swal2-center {\n  top: 50%;\n  right: auto;\n  bottom: auto;\n  left: 50%;\n  transform: translate(-50%, -50%);\n}\nbody.swal2-toast-shown .swal2-container.swal2-center-end, body.swal2-toast-shown .swal2-container.swal2-center-right {\n  top: 50%;\n  right: 0;\n  bottom: auto;\n  left: auto;\n  transform: translateY(-50%);\n}\nbody.swal2-toast-shown .swal2-container.swal2-bottom-start, body.swal2-toast-shown .swal2-container.swal2-bottom-left {\n  top: auto;\n  right: auto;\n  bottom: 0;\n  left: 0;\n}\nbody.swal2-toast-shown .swal2-container.swal2-bottom {\n  top: auto;\n  right: auto;\n  bottom: 0;\n  left: 50%;\n  transform: translateX(-50%);\n}\nbody.swal2-toast-shown .swal2-container.swal2-bottom-end, body.swal2-toast-shown .swal2-container.swal2-bottom-right {\n  top: auto;\n  right: 0;\n  bottom: 0;\n  left: auto;\n}\nbody.swal2-toast-column .swal2-toast {\n  flex-direction: column;\n  align-items: stretch;\n}\nbody.swal2-toast-column .swal2-toast .swal2-actions {\n  flex: 1;\n  align-self: stretch;\n  height: 2.2em;\n  margin-top: 0.3125em;\n}\nbody.swal2-toast-column .swal2-toast .swal2-loading {\n  justify-content: center;\n}\nbody.swal2-toast-column .swal2-toast .swal2-input {\n  height: 2em;\n  margin: 0.3125em auto;\n  font-size: 1em;\n}\nbody.swal2-toast-column .swal2-toast .swal2-validation-message {\n  font-size: 1em;\n}\n/*# sourceMappingURL=data:application/json;base64,  */";
      /***/
    },

    /***/
    "Qj4J":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/ar-kw.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function Qj4J(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Arabic (Kuwait) [ar-kw]
      //! author : Nusret Parlak: https://github.com/nusretparlak
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var arKw = moment.defineLocale('ar-kw', {
          months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
          monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
          weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
          weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
          weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[اليوم على الساعة] LT',
            nextDay: '[غدا على الساعة] LT',
            nextWeek: 'dddd [على الساعة] LT',
            lastDay: '[أمس على الساعة] LT',
            lastWeek: 'dddd [على الساعة] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'في %s',
            past: 'منذ %s',
            s: 'ثوان',
            ss: '%d ثانية',
            m: 'دقيقة',
            mm: '%d دقائق',
            h: 'ساعة',
            hh: '%d ساعات',
            d: 'يوم',
            dd: '%d أيام',
            M: 'شهر',
            MM: '%d أشهر',
            y: 'سنة',
            yy: '%d سنوات'
          },
          week: {
            dow: 0,
            // Sunday is the first day of the week.
            doy: 12 // The week that contains Jan 12th is the first week of the year.

          }
        });
        return arKw;
      });
      /***/

    },

    /***/
    "Qn8I":
    /*!*****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/using.js ***!
      \*****************************************************************/

    /*! exports provided: using */

    /***/
    function Qn8I(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "using", function () {
        return using;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./from */
      "Cfvw");
      /* harmony import */


      var _empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./empty */
      "EY2u");

      function using(resourceFactory, observableFactory) {
        return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
          var resource;

          try {
            resource = resourceFactory();
          } catch (err) {
            subscriber.error(err);
            return undefined;
          }

          var result;

          try {
            result = observableFactory(resource);
          } catch (err) {
            subscriber.error(err);
            return undefined;
          }

          var source = result ? Object(_from__WEBPACK_IMPORTED_MODULE_1__["from"])(result) : _empty__WEBPACK_IMPORTED_MODULE_2__["EMPTY"];
          var subscription = source.subscribe(subscriber);
          return function () {
            subscription.unsubscribe();

            if (resource) {
              resource.unsubscribe();
            }
          };
        });
      } //# sourceMappingURL=using.js.map

      /***/

    },

    /***/
    "QqCr":
    /*!************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/bindCallback.js ***!
      \************************************************************************/

    /*! exports provided: bindCallback */

    /***/
    function QqCr(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "bindCallback", function () {
        return bindCallback;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../AsyncSubject */
      "NHP+");
      /* harmony import */


      var _operators_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../operators/map */
      "lJxs");
      /* harmony import */


      var _util_canReportError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ../util/canReportError */
      "8Qeq");
      /* harmony import */


      var _util_isArray__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ../util/isArray */
      "DH7j");
      /* harmony import */


      var _util_isScheduler__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! ../util/isScheduler */
      "z+Ro");

      function bindCallback(callbackFunc, resultSelector, scheduler) {
        if (resultSelector) {
          if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_5__["isScheduler"])(resultSelector)) {
            scheduler = resultSelector;
          } else {
            return function () {
              return bindCallback(callbackFunc, scheduler).apply(void 0, arguments).pipe(Object(_operators_map__WEBPACK_IMPORTED_MODULE_2__["map"])(function (args) {
                return Object(_util_isArray__WEBPACK_IMPORTED_MODULE_4__["isArray"])(args) ? resultSelector.apply(void 0, _toConsumableArray(args)) : resultSelector(args);
              }));
            };
          }
        }

        return function () {
          for (var _len32 = arguments.length, args = new Array(_len32), _key34 = 0; _key34 < _len32; _key34++) {
            args[_key34] = arguments[_key34];
          }

          var context = this;
          var subject;
          var params = {
            context: context,
            subject: subject,
            callbackFunc: callbackFunc,
            scheduler: scheduler
          };
          return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
            if (!scheduler) {
              if (!subject) {
                subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();

                var handler = function handler() {
                  for (var _len33 = arguments.length, innerArgs = new Array(_len33), _key35 = 0; _key35 < _len33; _key35++) {
                    innerArgs[_key35] = arguments[_key35];
                  }

                  subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs);
                  subject.complete();
                };

                try {
                  callbackFunc.apply(context, [].concat(args, [handler]));
                } catch (err) {
                  if (Object(_util_canReportError__WEBPACK_IMPORTED_MODULE_3__["canReportError"])(subject)) {
                    subject.error(err);
                  } else {
                    console.warn(err);
                  }
                }
              }

              return subject.subscribe(subscriber);
            } else {
              var state = {
                args: args,
                subscriber: subscriber,
                params: params
              };
              return scheduler.schedule(dispatch, 0, state);
            }
          });
        };
      }

      function dispatch(state) {
        var _this581 = this;

        var self = this;
        var args = state.args,
            subscriber = state.subscriber,
            params = state.params;
        var callbackFunc = params.callbackFunc,
            context = params.context,
            scheduler = params.scheduler;
        var subject = params.subject;

        if (!subject) {
          subject = params.subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();

          var handler = function handler() {
            for (var _len34 = arguments.length, innerArgs = new Array(_len34), _key36 = 0; _key36 < _len34; _key36++) {
              innerArgs[_key36] = arguments[_key36];
            }

            var value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs;

            _this581.add(scheduler.schedule(dispatchNext, 0, {
              value: value,
              subject: subject
            }));
          };

          try {
            callbackFunc.apply(context, [].concat(_toConsumableArray(args), [handler]));
          } catch (err) {
            subject.error(err);
          }
        }

        this.add(subject.subscribe(subscriber));
      }

      function dispatchNext(state) {
        var value = state.value,
            subject = state.subject;
        subject.next(value);
        subject.complete();
      }

      function dispatchError(state) {
        var err = state.err,
            subject = state.subject;
        subject.error(err);
      } //# sourceMappingURL=bindCallback.js.map

      /***/

    },

    /***/
    "QsWE":
    /*!******************************************!*\
      !*** ./node_modules/aws-sdk/lib/core.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function QsWE(module, exports, __webpack_require__) {
      /**
       * The main AWS namespace
       */
      var AWS = {
        util: __webpack_require__(
        /*! ./util */
        "BaN1")
      };
      /**
       * @api private
       * @!macro [new] nobrowser
       *   @note This feature is not supported in the browser environment of the SDK.
       */

      var _hidden = {};

      _hidden.toString(); // hack to parse macro

      /**
       * @api private
       */


      module.exports = AWS;
      AWS.util.update(AWS, {
        /**
         * @constant
         */
        VERSION: '2.849.0',

        /**
         * @api private
         */
        Signers: {},

        /**
         * @api private
         */
        Protocol: {
          Json: __webpack_require__(
          /*! ./protocol/json */
          "BGYI"),
          Query: __webpack_require__(
          /*! ./protocol/query */
          "zfQR"),
          Rest: __webpack_require__(
          /*! ./protocol/rest */
          "KFai"),
          RestJson: __webpack_require__(
          /*! ./protocol/rest_json */
          "9Gqe"),
          RestXml: __webpack_require__(
          /*! ./protocol/rest_xml */
          "eFjS")
        },

        /**
         * @api private
         */
        XML: {
          Builder: __webpack_require__(
          /*! ./xml/builder */
          "wk5b"),
          Parser: null // conditionally set based on environment

        },

        /**
         * @api private
         */
        JSON: {
          Builder: __webpack_require__(
          /*! ./json/builder */
          "JWCV"),
          Parser: __webpack_require__(
          /*! ./json/parser */
          "henJ")
        },

        /**
         * @api private
         */
        Model: {
          Api: __webpack_require__(
          /*! ./model/api */
          "5wOx"),
          Operation: __webpack_require__(
          /*! ./model/operation */
          "1vLn"),
          Shape: __webpack_require__(
          /*! ./model/shape */
          "nyFZ"),
          Paginator: __webpack_require__(
          /*! ./model/paginator */
          "TkaK"),
          ResourceWaiter: __webpack_require__(
          /*! ./model/resource_waiter */
          "CbSC")
        },

        /**
         * @api private
         */
        apiLoader: __webpack_require__(
        /*! ./api_loader */
        "Y309"),

        /**
         * @api private
         */
        EndpointCache: __webpack_require__(
        /*! ../vendor/endpoint-cache */
        "EuLz").EndpointCache
      });

      __webpack_require__(
      /*! ./sequential_executor */
      "eLAQ");

      __webpack_require__(
      /*! ./service */
      "jNZN");

      __webpack_require__(
      /*! ./config */
      "bnYj");

      __webpack_require__(
      /*! ./http */
      "Pzvs");

      __webpack_require__(
      /*! ./event_listeners */
      "t6tr");

      __webpack_require__(
      /*! ./request */
      "h/dY");

      __webpack_require__(
      /*! ./response */
      "ZONe");

      __webpack_require__(
      /*! ./resource_waiter */
      "rt19");

      __webpack_require__(
      /*! ./signers/request_signer */
      "B0QO");

      __webpack_require__(
      /*! ./param_validator */
      "T0yy");
      /**
       * @readonly
       * @return [AWS.SequentialExecutor] a collection of global event listeners that
       *   are attached to every sent request.
       * @see AWS.Request AWS.Request for a list of events to listen for
       * @example Logging the time taken to send a request
       *   AWS.events.on('send', function startSend(resp) {
       *     resp.startTime = new Date().getTime();
       *   }).on('complete', function calculateTime(resp) {
       *     var time = (new Date().getTime() - resp.startTime) / 1000;
       *     console.log('Request took ' + time + ' seconds');
       *   });
       *
       *   new AWS.S3().listBuckets(); // prints 'Request took 0.285 seconds'
       */


      AWS.events = new AWS.SequentialExecutor(); //create endpoint cache lazily

      AWS.util.memoizedProperty(AWS, 'endpointCache', function () {
        return new AWS.EndpointCache(AWS.config.endpointCacheSize);
      }, true);
      /***/
    },

    /***/
    "Qu3c":
    /*!*************************************************************************!*\
      !*** ./node_modules/@angular/material/__ivy_ngcc__/fesm2015/tooltip.js ***!
      \*************************************************************************/

    /*! exports provided: MAT_TOOLTIP_DEFAULT_OPTIONS, MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY, MAT_TOOLTIP_SCROLL_STRATEGY, MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY, MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER, MatTooltip, MatTooltipModule, SCROLL_THROTTLE_MS, TOOLTIP_PANEL_CLASS, TooltipComponent, getMatTooltipInvalidPositionError, matTooltipAnimations */

    /***/
    function Qu3c(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_TOOLTIP_DEFAULT_OPTIONS", function () {
        return MAT_TOOLTIP_DEFAULT_OPTIONS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY", function () {
        return MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_TOOLTIP_SCROLL_STRATEGY", function () {
        return MAT_TOOLTIP_SCROLL_STRATEGY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY", function () {
        return MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER", function () {
        return MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatTooltip", function () {
        return MatTooltip;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatTooltipModule", function () {
        return MatTooltipModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SCROLL_THROTTLE_MS", function () {
        return SCROLL_THROTTLE_MS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TOOLTIP_PANEL_CLASS", function () {
        return TOOLTIP_PANEL_CLASS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TooltipComponent", function () {
        return TooltipComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getMatTooltipInvalidPositionError", function () {
        return getMatTooltipInvalidPositionError;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "matTooltipAnimations", function () {
        return matTooltipAnimations;
      });
      /* harmony import */


      var _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/cdk/overlay */
      "rDax");
      /* harmony import */


      var _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/cdk/a11y */
      "u47x");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_material_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/material/core */
      "FKr1");
      /* harmony import */


      var _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @angular/cdk/scrolling */
      "vxfF");
      /* harmony import */


      var _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! @angular/cdk/bidi */
      "cH1L");
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");
      /* harmony import */


      var _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(
      /*! @angular/cdk/keycodes */
      "FtGj");
      /* harmony import */


      var _angular_cdk_layout__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(
      /*! @angular/cdk/layout */
      "0MNC");
      /* harmony import */


      var _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(
      /*! @angular/cdk/platform */
      "nLfN");
      /* harmony import */


      var _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(
      /*! @angular/cdk/portal */
      "+rOU");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var _angular_animations__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(
      /*! @angular/animations */
      "R0Ic");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Animations used by MatTooltip.
       * @docs-private
       */


      var matTooltipAnimations = {
        /** Animation that transitions a tooltip in and out. */
        tooltipState: Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["trigger"])('state', [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["state"])('initial, void, hidden', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["style"])({
          opacity: 0,
          transform: 'scale(0)'
        })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["state"])('visible', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["style"])({
          transform: 'scale(1)'
        })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["transition"])('* => visible', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["animate"])('200ms cubic-bezier(0, 0, 0.2, 1)', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["keyframes"])([Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["style"])({
          opacity: 0,
          transform: 'scale(0)',
          offset: 0
        }), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["style"])({
          opacity: 0.5,
          transform: 'scale(0.99)',
          offset: 0.5
        }), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["style"])({
          opacity: 1,
          transform: 'scale(1)',
          offset: 1
        })]))), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["transition"])('* => hidden', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["animate"])('100ms cubic-bezier(0, 0, 0.2, 1)', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["style"])({
          opacity: 0
        })))])
      };
      /** Time in ms to throttle repositioning after scroll events. */

      var SCROLL_THROTTLE_MS = 20;
      /** CSS class that will be attached to the overlay panel. */

      var TOOLTIP_PANEL_CLASS = 'mat-tooltip-panel';
      /** Options used to bind passive event listeners. */

      var passiveListenerOptions = Object(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_10__["normalizePassiveListenerOptions"])({
        passive: true
      });
      /**
       * Time between the user putting the pointer on a tooltip
       * trigger and the long press event being fired.
       */

      var LONGPRESS_DELAY = 500;
      /**
       * Creates an error to be thrown if the user supplied an invalid tooltip position.
       * @docs-private
       */

      function getMatTooltipInvalidPositionError(position) {
        return Error("Tooltip position \"".concat(position, "\" is invalid."));
      }
      /** Injection token that determines the scroll handling while a tooltip is visible. */


      var MAT_TOOLTIP_SCROLL_STRATEGY = new _angular_core__WEBPACK_IMPORTED_MODULE_3__["InjectionToken"]('mat-tooltip-scroll-strategy');
      /** @docs-private */

      function MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY(overlay) {
        return function () {
          return overlay.scrollStrategies.reposition({
            scrollThrottle: SCROLL_THROTTLE_MS
          });
        };
      }
      /** @docs-private */


      var MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER = {
        provide: MAT_TOOLTIP_SCROLL_STRATEGY,
        deps: [_angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_0__["Overlay"]],
        useFactory: MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY
      };
      /** Injection token to be used to override the default options for `matTooltip`. */

      var MAT_TOOLTIP_DEFAULT_OPTIONS = new _angular_core__WEBPACK_IMPORTED_MODULE_3__["InjectionToken"]('mat-tooltip-default-options', {
        providedIn: 'root',
        factory: MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY
      });
      /** @docs-private */

      function MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY() {
        return {
          showDelay: 0,
          hideDelay: 0,
          touchendHideDelay: 1500
        };
      }
      /**
       * Directive that attaches a material design tooltip to the host element. Animates the showing and
       * hiding of a tooltip provided position (defaults to below the element).
       *
       * https://material.io/design/components/tooltips.html
       */


      var MatTooltip = /*#__PURE__*/function () {
        function MatTooltip(_overlay, _elementRef, _scrollDispatcher, _viewContainerRef, _ngZone, _platform, _ariaDescriber, _focusMonitor, scrollStrategy, _dir, _defaultOptions,
        /** @breaking-change 11.0.0 _document argument to become required. */
        _document) {
          var _this582 = this;

          _classCallCheck2(this, MatTooltip);

          this._overlay = _overlay;
          this._elementRef = _elementRef;
          this._scrollDispatcher = _scrollDispatcher;
          this._viewContainerRef = _viewContainerRef;
          this._ngZone = _ngZone;
          this._platform = _platform;
          this._ariaDescriber = _ariaDescriber;
          this._focusMonitor = _focusMonitor;
          this._dir = _dir;
          this._defaultOptions = _defaultOptions;
          this._position = 'below';
          this._disabled = false;
          this._viewInitialized = false;
          this._pointerExitEventsInitialized = false;
          /** The default delay in ms before showing the tooltip after show is called */

          this.showDelay = this._defaultOptions.showDelay;
          /** The default delay in ms before hiding the tooltip after hide is called */

          this.hideDelay = this._defaultOptions.hideDelay;
          /**
           * How touch gestures should be handled by the tooltip. On touch devices the tooltip directive
           * uses a long press gesture to show and hide, however it can conflict with the native browser
           * gestures. To work around the conflict, Angular Material disables native gestures on the
           * trigger, but that might not be desirable on particular elements (e.g. inputs and draggable
           * elements). The different values for this option configure the touch event handling as follows:
           * - `auto` - Enables touch gestures for all elements, but tries to avoid conflicts with native
           *   browser gestures on particular elements. In particular, it allows text selection on inputs
           *   and textareas, and preserves the native browser dragging on elements marked as `draggable`.
           * - `on` - Enables touch gestures for all elements and disables native
           *   browser gestures with no exceptions.
           * - `off` - Disables touch gestures. Note that this will prevent the tooltip from
           *   showing on touch devices.
           */

          this.touchGestures = 'auto';
          this._message = '';
          /** Manually-bound passive event listeners. */

          this._passiveListeners = [];
          /** Emits when the component is destroyed. */

          this._destroyed = new rxjs__WEBPACK_IMPORTED_MODULE_12__["Subject"]();
          /**
           * Handles the keydown events on the host element.
           * Needs to be an arrow function so that we can use it in addEventListener.
           */

          this._handleKeydown = function (event) {
            if (_this582._isTooltipVisible() && event.keyCode === _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__["ESCAPE"] && !Object(_angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_8__["hasModifierKey"])(event)) {
              event.preventDefault();
              event.stopPropagation();

              _this582._ngZone.run(function () {
                return _this582.hide(0);
              });
            }
          };

          this._scrollStrategy = scrollStrategy;

          if (_defaultOptions) {
            if (_defaultOptions.position) {
              this.position = _defaultOptions.position;
            }

            if (_defaultOptions.touchGestures) {
              this.touchGestures = _defaultOptions.touchGestures;
            }
          }

          _ngZone.runOutsideAngular(function () {
            _elementRef.nativeElement.addEventListener('keydown', _this582._handleKeydown);
          });
        }
        /** Allows the user to define the position of the tooltip relative to the parent element */


        _createClass2(MatTooltip, [{
          key: "position",
          get: function get() {
            return this._position;
          },
          set: function set(value) {
            if (value !== this._position) {
              this._position = value;

              if (this._overlayRef) {
                this._updatePosition();

                if (this._tooltipInstance) {
                  this._tooltipInstance.show(0);
                }

                this._overlayRef.updatePosition();
              }
            }
          }
          /** Disables the display of the tooltip. */

        }, {
          key: "disabled",
          get: function get() {
            return this._disabled;
          },
          set: function set(value) {
            this._disabled = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_7__["coerceBooleanProperty"])(value); // If tooltip is disabled, hide immediately.

            if (this._disabled) {
              this.hide(0);
            } else {
              this._setupPointerEnterEventsIfNeeded();
            }
          }
          /** The message to be displayed in the tooltip */

        }, {
          key: "message",
          get: function get() {
            return this._message;
          },
          set: function set(value) {
            var _this583 = this;

            this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this._message, 'tooltip'); // If the message is not a string (e.g. number), convert it to a string and trim it.
            // Must convert with `String(value)`, not `${value}`, otherwise Closure Compiler optimises
            // away the string-conversion: https://github.com/angular/components/issues/20684


            this._message = value != null ? String(value).trim() : '';

            if (!this._message && this._isTooltipVisible()) {
              this.hide(0);
            } else {
              this._setupPointerEnterEventsIfNeeded();

              this._updateTooltipMessage();

              this._ngZone.runOutsideAngular(function () {
                // The `AriaDescriber` has some functionality that avoids adding a description if it's the
                // same as the `aria-label` of an element, however we can't know whether the tooltip trigger
                // has a data-bound `aria-label` or when it'll be set for the first time. We can avoid the
                // issue by deferring the description by a tick so Angular has time to set the `aria-label`.
                Promise.resolve().then(function () {
                  _this583._ariaDescriber.describe(_this583._elementRef.nativeElement, _this583.message, 'tooltip');
                });
              });
            }
          }
          /** Classes to be passed to the tooltip. Supports the same syntax as `ngClass`. */

        }, {
          key: "tooltipClass",
          get: function get() {
            return this._tooltipClass;
          },
          set: function set(value) {
            this._tooltipClass = value;

            if (this._tooltipInstance) {
              this._setTooltipClass(this._tooltipClass);
            }
          }
        }, {
          key: "ngAfterViewInit",
          value: function ngAfterViewInit() {
            var _this584 = this;

            // This needs to happen after view init so the initial values for all inputs have been set.
            this._viewInitialized = true;

            this._setupPointerEnterEventsIfNeeded();

            this._focusMonitor.monitor(this._elementRef).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["takeUntil"])(this._destroyed)).subscribe(function (origin) {
              // Note that the focus monitor runs outside the Angular zone.
              if (!origin) {
                _this584._ngZone.run(function () {
                  return _this584.hide(0);
                });
              } else if (origin === 'keyboard') {
                _this584._ngZone.run(function () {
                  return _this584.show();
                });
              }
            });
          }
          /**
           * Dispose the tooltip when destroyed.
           */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            var nativeElement = this._elementRef.nativeElement;
            clearTimeout(this._touchstartTimeout);

            if (this._overlayRef) {
              this._overlayRef.dispose();

              this._tooltipInstance = null;
            } // Clean up the event listeners set in the constructor


            nativeElement.removeEventListener('keydown', this._handleKeydown);

            this._passiveListeners.forEach(function (_ref105) {
              var _ref106 = _slicedToArray(_ref105, 2),
                  event = _ref106[0],
                  listener = _ref106[1];

              nativeElement.removeEventListener(event, listener, passiveListenerOptions);
            });

            this._passiveListeners.length = 0;

            this._destroyed.next();

            this._destroyed.complete();

            this._ariaDescriber.removeDescription(nativeElement, this.message, 'tooltip');

            this._focusMonitor.stopMonitoring(nativeElement);
          }
          /** Shows the tooltip after the delay in ms, defaults to tooltip-delay-show or 0ms if no input */

        }, {
          key: "show",
          value: function show() {
            var _this585 = this;

            var delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.showDelay;

            if (this.disabled || !this.message || this._isTooltipVisible() && !this._tooltipInstance._showTimeoutId && !this._tooltipInstance._hideTimeoutId) {
              return;
            }

            var overlayRef = this._createOverlay();

            this._detach();

            this._portal = this._portal || new _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_11__["ComponentPortal"](TooltipComponent, this._viewContainerRef);
            this._tooltipInstance = overlayRef.attach(this._portal).instance;

            this._tooltipInstance.afterHidden().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["takeUntil"])(this._destroyed)).subscribe(function () {
              return _this585._detach();
            });

            this._setTooltipClass(this._tooltipClass);

            this._updateTooltipMessage();

            this._tooltipInstance.show(delay);
          }
          /** Hides the tooltip after the delay in ms, defaults to tooltip-delay-hide or 0ms if no input */

        }, {
          key: "hide",
          value: function hide() {
            var delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.hideDelay;

            if (this._tooltipInstance) {
              this._tooltipInstance.hide(delay);
            }
          }
          /** Shows/hides the tooltip */

        }, {
          key: "toggle",
          value: function toggle() {
            this._isTooltipVisible() ? this.hide() : this.show();
          }
          /** Returns true if the tooltip is currently visible to the user */

        }, {
          key: "_isTooltipVisible",
          value: function _isTooltipVisible() {
            return !!this._tooltipInstance && this._tooltipInstance.isVisible();
          }
          /** Create the overlay config and position strategy */

        }, {
          key: "_createOverlay",
          value: function _createOverlay() {
            var _this586 = this;

            if (this._overlayRef) {
              return this._overlayRef;
            }

            var scrollableAncestors = this._scrollDispatcher.getAncestorScrollContainers(this._elementRef); // Create connected position strategy that listens for scroll events to reposition.


            var strategy = this._overlay.position().flexibleConnectedTo(this._elementRef).withTransformOriginOn('.mat-tooltip').withFlexibleDimensions(false).withViewportMargin(8).withScrollableContainers(scrollableAncestors);

            strategy.positionChanges.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["takeUntil"])(this._destroyed)).subscribe(function (change) {
              if (_this586._tooltipInstance) {
                if (change.scrollableViewProperties.isOverlayClipped && _this586._tooltipInstance.isVisible()) {
                  // After position changes occur and the overlay is clipped by
                  // a parent scrollable then close the tooltip.
                  _this586._ngZone.run(function () {
                    return _this586.hide(0);
                  });
                }
              }
            });
            this._overlayRef = this._overlay.create({
              direction: this._dir,
              positionStrategy: strategy,
              panelClass: TOOLTIP_PANEL_CLASS,
              scrollStrategy: this._scrollStrategy()
            });

            this._updatePosition();

            this._overlayRef.detachments().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["takeUntil"])(this._destroyed)).subscribe(function () {
              return _this586._detach();
            });

            return this._overlayRef;
          }
          /** Detaches the currently-attached tooltip. */

        }, {
          key: "_detach",
          value: function _detach() {
            if (this._overlayRef && this._overlayRef.hasAttached()) {
              this._overlayRef.detach();
            }

            this._tooltipInstance = null;
          }
          /** Updates the position of the current tooltip. */

        }, {
          key: "_updatePosition",
          value: function _updatePosition() {
            var position = this._overlayRef.getConfig().positionStrategy;

            var origin = this._getOrigin();

            var overlay = this._getOverlayPosition();

            position.withPositions([Object.assign(Object.assign({}, origin.main), overlay.main), Object.assign(Object.assign({}, origin.fallback), overlay.fallback)]);
          }
          /**
           * Returns the origin position and a fallback position based on the user's position preference.
           * The fallback position is the inverse of the origin (e.g. `'below' -> 'above'`).
           */

        }, {
          key: "_getOrigin",
          value: function _getOrigin() {
            var isLtr = !this._dir || this._dir.value == 'ltr';
            var position = this.position;
            var originPosition;

            if (position == 'above' || position == 'below') {
              originPosition = {
                originX: 'center',
                originY: position == 'above' ? 'top' : 'bottom'
              };
            } else if (position == 'before' || position == 'left' && isLtr || position == 'right' && !isLtr) {
              originPosition = {
                originX: 'start',
                originY: 'center'
              };
            } else if (position == 'after' || position == 'right' && isLtr || position == 'left' && !isLtr) {
              originPosition = {
                originX: 'end',
                originY: 'center'
              };
            } else if (typeof ngDevMode === 'undefined' || ngDevMode) {
              throw getMatTooltipInvalidPositionError(position);
            }

            var _this$_invertPosition = this._invertPosition(originPosition.originX, originPosition.originY),
                x = _this$_invertPosition.x,
                y = _this$_invertPosition.y;

            return {
              main: originPosition,
              fallback: {
                originX: x,
                originY: y
              }
            };
          }
          /** Returns the overlay position and a fallback position based on the user's preference */

        }, {
          key: "_getOverlayPosition",
          value: function _getOverlayPosition() {
            var isLtr = !this._dir || this._dir.value == 'ltr';
            var position = this.position;
            var overlayPosition;

            if (position == 'above') {
              overlayPosition = {
                overlayX: 'center',
                overlayY: 'bottom'
              };
            } else if (position == 'below') {
              overlayPosition = {
                overlayX: 'center',
                overlayY: 'top'
              };
            } else if (position == 'before' || position == 'left' && isLtr || position == 'right' && !isLtr) {
              overlayPosition = {
                overlayX: 'end',
                overlayY: 'center'
              };
            } else if (position == 'after' || position == 'right' && isLtr || position == 'left' && !isLtr) {
              overlayPosition = {
                overlayX: 'start',
                overlayY: 'center'
              };
            } else if (typeof ngDevMode === 'undefined' || ngDevMode) {
              throw getMatTooltipInvalidPositionError(position);
            }

            var _this$_invertPosition2 = this._invertPosition(overlayPosition.overlayX, overlayPosition.overlayY),
                x = _this$_invertPosition2.x,
                y = _this$_invertPosition2.y;

            return {
              main: overlayPosition,
              fallback: {
                overlayX: x,
                overlayY: y
              }
            };
          }
          /** Updates the tooltip message and repositions the overlay according to the new message length */

        }, {
          key: "_updateTooltipMessage",
          value: function _updateTooltipMessage() {
            var _this587 = this;

            // Must wait for the message to be painted to the tooltip so that the overlay can properly
            // calculate the correct positioning based on the size of the text.
            if (this._tooltipInstance) {
              this._tooltipInstance.message = this.message;

              this._tooltipInstance._markForCheck();

              this._ngZone.onMicrotaskEmpty.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["take"])(1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["takeUntil"])(this._destroyed)).subscribe(function () {
                if (_this587._tooltipInstance) {
                  _this587._overlayRef.updatePosition();
                }
              });
            }
          }
          /** Updates the tooltip class */

        }, {
          key: "_setTooltipClass",
          value: function _setTooltipClass(tooltipClass) {
            if (this._tooltipInstance) {
              this._tooltipInstance.tooltipClass = tooltipClass;

              this._tooltipInstance._markForCheck();
            }
          }
          /** Inverts an overlay position. */

        }, {
          key: "_invertPosition",
          value: function _invertPosition(x, y) {
            if (this.position === 'above' || this.position === 'below') {
              if (y === 'top') {
                y = 'bottom';
              } else if (y === 'bottom') {
                y = 'top';
              }
            } else {
              if (x === 'end') {
                x = 'start';
              } else if (x === 'start') {
                x = 'end';
              }
            }

            return {
              x: x,
              y: y
            };
          }
          /** Binds the pointer events to the tooltip trigger. */

        }, {
          key: "_setupPointerEnterEventsIfNeeded",
          value: function _setupPointerEnterEventsIfNeeded() {
            var _this588 = this;

            // Optimization: Defer hooking up events if there's no message or the tooltip is disabled.
            if (this._disabled || !this.message || !this._viewInitialized || this._passiveListeners.length) {
              return;
            } // The mouse events shouldn't be bound on mobile devices, because they can prevent the
            // first tap from firing its click event or can cause the tooltip to open for clicks.


            if (this._platformSupportsMouseEvents()) {
              this._passiveListeners.push(['mouseenter', function () {
                _this588._setupPointerExitEventsIfNeeded();

                _this588.show();
              }]);
            } else if (this.touchGestures !== 'off') {
              this._disableNativeGesturesIfNecessary();

              this._passiveListeners.push(['touchstart', function () {
                // Note that it's important that we don't `preventDefault` here,
                // because it can prevent click events from firing on the element.
                _this588._setupPointerExitEventsIfNeeded();

                clearTimeout(_this588._touchstartTimeout);
                _this588._touchstartTimeout = setTimeout(function () {
                  return _this588.show();
                }, LONGPRESS_DELAY);
              }]);
            }

            this._addListeners(this._passiveListeners);
          }
        }, {
          key: "_setupPointerExitEventsIfNeeded",
          value: function _setupPointerExitEventsIfNeeded() {
            var _this589 = this,
                _this$_passiveListene;

            if (this._pointerExitEventsInitialized) {
              return;
            }

            this._pointerExitEventsInitialized = true;
            var exitListeners = [];

            if (this._platformSupportsMouseEvents()) {
              exitListeners.push(['mouseleave', function () {
                return _this589.hide();
              }], ['wheel', function (event) {
                return _this589._wheelListener(event);
              }]);
            } else if (this.touchGestures !== 'off') {
              this._disableNativeGesturesIfNecessary();

              var touchendListener = function touchendListener() {
                clearTimeout(_this589._touchstartTimeout);

                _this589.hide(_this589._defaultOptions.touchendHideDelay);
              };

              exitListeners.push(['touchend', touchendListener], ['touchcancel', touchendListener]);
            }

            this._addListeners(exitListeners);

            (_this$_passiveListene = this._passiveListeners).push.apply(_this$_passiveListene, exitListeners);
          }
        }, {
          key: "_addListeners",
          value: function _addListeners(listeners) {
            var _this590 = this;

            listeners.forEach(function (_ref107) {
              var _ref108 = _slicedToArray(_ref107, 2),
                  event = _ref108[0],
                  listener = _ref108[1];

              _this590._elementRef.nativeElement.addEventListener(event, listener, passiveListenerOptions);
            });
          }
        }, {
          key: "_platformSupportsMouseEvents",
          value: function _platformSupportsMouseEvents() {
            return !this._platform.IOS && !this._platform.ANDROID;
          }
          /** Listener for the `wheel` event on the element. */

        }, {
          key: "_wheelListener",
          value: function _wheelListener(event) {
            if (this._isTooltipVisible()) {
              // @breaking-change 11.0.0 Remove `|| document` once the document is a required param.
              var doc = this._document || document;
              var elementUnderPointer = doc.elementFromPoint(event.clientX, event.clientY);
              var element = this._elementRef.nativeElement; // On non-touch devices we depend on the `mouseleave` event to close the tooltip, but it
              // won't fire if the user scrolls away using the wheel without moving their cursor. We
              // work around it by finding the element under the user's cursor and closing the tooltip
              // if it's not the trigger.

              if (elementUnderPointer !== element && !element.contains(elementUnderPointer)) {
                this.hide();
              }
            }
          }
          /** Disables the native browser gestures, based on how the tooltip has been configured. */

        }, {
          key: "_disableNativeGesturesIfNecessary",
          value: function _disableNativeGesturesIfNecessary() {
            var gestures = this.touchGestures;

            if (gestures !== 'off') {
              var element = this._elementRef.nativeElement;
              var style = element.style; // If gestures are set to `auto`, we don't disable text selection on inputs and
              // textareas, because it prevents the user from typing into them on iOS Safari.

              if (gestures === 'on' || element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA') {
                style.userSelect = style.msUserSelect = style.webkitUserSelect = style.MozUserSelect = 'none';
              } // If we have `auto` gestures and the element uses native HTML dragging,
              // we don't set `-webkit-user-drag` because it prevents the native behavior.


              if (gestures === 'on' || !element.draggable) {
                style.webkitUserDrag = 'none';
              }

              style.touchAction = 'none';
              style.webkitTapHighlightColor = 'transparent';
            }
          }
        }]);

        return MatTooltip;
      }();

      MatTooltip.ɵfac = function MatTooltip_Factory(t) {
        return new (t || MatTooltip)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_0__["Overlay"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_5__["ScrollDispatcher"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_10__["Platform"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_1__["AriaDescriber"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_1__["FocusMonitor"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](MAT_TOOLTIP_SCROLL_STRATEGY), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_6__["Directionality"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](MAT_TOOLTIP_DEFAULT_OPTIONS, 8), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_2__["DOCUMENT"]));
      };

      MatTooltip.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: MatTooltip,
        selectors: [["", "matTooltip", ""]],
        hostAttrs: [1, "mat-tooltip-trigger"],
        inputs: {
          showDelay: ["matTooltipShowDelay", "showDelay"],
          hideDelay: ["matTooltipHideDelay", "hideDelay"],
          touchGestures: ["matTooltipTouchGestures", "touchGestures"],
          position: ["matTooltipPosition", "position"],
          disabled: ["matTooltipDisabled", "disabled"],
          message: ["matTooltip", "message"],
          tooltipClass: ["matTooltipClass", "tooltipClass"]
        },
        exportAs: ["matTooltip"]
      });

      MatTooltip.ctorParameters = function () {
        return [{
          type: _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_0__["Overlay"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
        }, {
          type: _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_5__["ScrollDispatcher"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewContainerRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["NgZone"]
        }, {
          type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_10__["Platform"]
        }, {
          type: _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_1__["AriaDescriber"]
        }, {
          type: _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_1__["FocusMonitor"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
            args: [MAT_TOOLTIP_SCROLL_STRATEGY]
          }]
        }, {
          type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_6__["Directionality"],
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
            args: [MAT_TOOLTIP_DEFAULT_OPTIONS]
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["DOCUMENT"]]
          }]
        }];
      };

      MatTooltip.propDecorators = {
        position: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"],
          args: ['matTooltipPosition']
        }],
        disabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"],
          args: ['matTooltipDisabled']
        }],
        showDelay: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"],
          args: ['matTooltipShowDelay']
        }],
        hideDelay: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"],
          args: ['matTooltipHideDelay']
        }],
        touchGestures: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"],
          args: ['matTooltipTouchGestures']
        }],
        message: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"],
          args: ['matTooltip']
        }],
        tooltipClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"],
          args: ['matTooltipClass']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](MatTooltip, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: '[matTooltip]',
            exportAs: 'matTooltip',
            host: {
              'class': 'mat-tooltip-trigger'
            }
          }]
        }], function () {
          return [{
            type: _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_0__["Overlay"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
          }, {
            type: _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_5__["ScrollDispatcher"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewContainerRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["NgZone"]
          }, {
            type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_10__["Platform"]
          }, {
            type: _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_1__["AriaDescriber"]
          }, {
            type: _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_1__["FocusMonitor"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
              args: [MAT_TOOLTIP_SCROLL_STRATEGY]
            }]
          }, {
            type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_6__["Directionality"],
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
              args: [MAT_TOOLTIP_DEFAULT_OPTIONS]
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["DOCUMENT"]]
            }]
          }];
        }, {
          showDelay: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"],
            args: ['matTooltipShowDelay']
          }],
          hideDelay: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"],
            args: ['matTooltipHideDelay']
          }],
          touchGestures: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"],
            args: ['matTooltipTouchGestures']
          }],
          position: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"],
            args: ['matTooltipPosition']
          }],
          disabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"],
            args: ['matTooltipDisabled']
          }],
          message: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"],
            args: ['matTooltip']
          }],
          tooltipClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"],
            args: ['matTooltipClass']
          }]
        });
      })();
      /**
       * Internal component that wraps the tooltip's content.
       * @docs-private
       */


      var TooltipComponent = /*#__PURE__*/function () {
        function TooltipComponent(_changeDetectorRef, _breakpointObserver) {
          _classCallCheck2(this, TooltipComponent);

          this._changeDetectorRef = _changeDetectorRef;
          this._breakpointObserver = _breakpointObserver;
          /** Property watched by the animation framework to show or hide the tooltip */

          this._visibility = 'initial';
          /** Whether interactions on the page should close the tooltip */

          this._closeOnInteraction = false;
          /** Subject for notifying that the tooltip has been hidden from the view */

          this._onHide = new rxjs__WEBPACK_IMPORTED_MODULE_12__["Subject"]();
          /** Stream that emits whether the user has a handset-sized display.  */

          this._isHandset = this._breakpointObserver.observe(_angular_cdk_layout__WEBPACK_IMPORTED_MODULE_9__["Breakpoints"].Handset);
        }
        /**
         * Shows the tooltip with an animation originating from the provided origin
         * @param delay Amount of milliseconds to the delay showing the tooltip.
         */


        _createClass2(TooltipComponent, [{
          key: "show",
          value: function show(delay) {
            var _this591 = this;

            // Cancel the delayed hide if it is scheduled
            if (this._hideTimeoutId) {
              clearTimeout(this._hideTimeoutId);
              this._hideTimeoutId = null;
            } // Body interactions should cancel the tooltip if there is a delay in showing.


            this._closeOnInteraction = true;
            this._showTimeoutId = setTimeout(function () {
              _this591._visibility = 'visible';
              _this591._showTimeoutId = null; // Mark for check so if any parent component has set the
              // ChangeDetectionStrategy to OnPush it will be checked anyways

              _this591._markForCheck();
            }, delay);
          }
          /**
           * Begins the animation to hide the tooltip after the provided delay in ms.
           * @param delay Amount of milliseconds to delay showing the tooltip.
           */

        }, {
          key: "hide",
          value: function hide(delay) {
            var _this592 = this;

            // Cancel the delayed show if it is scheduled
            if (this._showTimeoutId) {
              clearTimeout(this._showTimeoutId);
              this._showTimeoutId = null;
            }

            this._hideTimeoutId = setTimeout(function () {
              _this592._visibility = 'hidden';
              _this592._hideTimeoutId = null; // Mark for check so if any parent component has set the
              // ChangeDetectionStrategy to OnPush it will be checked anyways

              _this592._markForCheck();
            }, delay);
          }
          /** Returns an observable that notifies when the tooltip has been hidden from view. */

        }, {
          key: "afterHidden",
          value: function afterHidden() {
            return this._onHide;
          }
          /** Whether the tooltip is being displayed. */

        }, {
          key: "isVisible",
          value: function isVisible() {
            return this._visibility === 'visible';
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._onHide.complete();
          }
        }, {
          key: "_animationStart",
          value: function _animationStart() {
            this._closeOnInteraction = false;
          }
        }, {
          key: "_animationDone",
          value: function _animationDone(event) {
            var toState = event.toState;

            if (toState === 'hidden' && !this.isVisible()) {
              this._onHide.next();
            }

            if (toState === 'visible' || toState === 'hidden') {
              this._closeOnInteraction = true;
            }
          }
          /**
           * Interactions on the HTML body should close the tooltip immediately as defined in the
           * material design spec.
           * https://material.io/design/components/tooltips.html#behavior
           */

        }, {
          key: "_handleBodyInteraction",
          value: function _handleBodyInteraction() {
            if (this._closeOnInteraction) {
              this.hide(0);
            }
          }
          /**
           * Marks that the tooltip needs to be checked in the next change detection run.
           * Mainly used for rendering the initial text before positioning a tooltip, which
           * can be problematic in components with OnPush change detection.
           */

        }, {
          key: "_markForCheck",
          value: function _markForCheck() {
            this._changeDetectorRef.markForCheck();
          }
        }]);

        return TooltipComponent;
      }();

      TooltipComponent.ɵfac = function TooltipComponent_Factory(t) {
        return new (t || TooltipComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_cdk_layout__WEBPACK_IMPORTED_MODULE_9__["BreakpointObserver"]));
      };

      TooltipComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineComponent"]({
        type: TooltipComponent,
        selectors: [["mat-tooltip-component"]],
        hostAttrs: ["aria-hidden", "true"],
        hostVars: 2,
        hostBindings: function TooltipComponent_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function TooltipComponent_click_HostBindingHandler() {
              return ctx._handleBodyInteraction();
            }, false, _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresolveBody"])("auxclick", function TooltipComponent_auxclick_HostBindingHandler() {
              return ctx._handleBodyInteraction();
            }, false, _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresolveBody"]);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵstyleProp"]("zoom", ctx._visibility === "visible" ? 1 : null);
          }
        },
        decls: 3,
        vars: 7,
        consts: [[1, "mat-tooltip", 3, "ngClass"]],
        template: function TooltipComponent_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("@state.start", function TooltipComponent_Template_div_animation_state_start_0_listener() {
              return ctx._animationStart();
            })("@state.done", function TooltipComponent_Template_div_animation_state_done_0_listener($event) {
              return ctx._animationDone($event);
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵpipe"](1, "async");

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            var tmp_0_0 = null;

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵclassProp"]("mat-tooltip-handset", (tmp_0_0 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵpipeBind1"](1, 5, ctx._isHandset)) == null ? null : tmp_0_0.matches);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngClass", ctx.tooltipClass)("@state", ctx._visibility);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate"](ctx.message);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["NgClass"]],
        pipes: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["AsyncPipe"]],
        styles: [".mat-tooltip-panel{pointer-events:none !important}.mat-tooltip{color:#fff;border-radius:4px;margin:14px;max-width:250px;padding-left:8px;padding-right:8px;overflow:hidden;text-overflow:ellipsis}.cdk-high-contrast-active .mat-tooltip{outline:solid 1px}.mat-tooltip-handset{margin:24px;padding-left:16px;padding-right:16px}\n"],
        encapsulation: 2,
        data: {
          animation: [matTooltipAnimations.tooltipState]
        },
        changeDetection: 0
      });

      TooltipComponent.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"]
        }, {
          type: _angular_cdk_layout__WEBPACK_IMPORTED_MODULE_9__["BreakpointObserver"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](TooltipComponent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Component"],
          args: [{
            selector: 'mat-tooltip-component',
            template: "<div class=\"mat-tooltip\"\n     [ngClass]=\"tooltipClass\"\n     [class.mat-tooltip-handset]=\"(_isHandset | async)?.matches\"\n     [@state]=\"_visibility\"\n     (@state.start)=\"_animationStart()\"\n     (@state.done)=\"_animationDone($event)\">{{message}}</div>\n",
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewEncapsulation"].None,
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectionStrategy"].OnPush,
            animations: [matTooltipAnimations.tooltipState],
            host: {
              // Forces the element to have a layout in IE and Edge. This fixes issues where the element
              // won't be rendered if the animations are disabled or there is no web animations polyfill.
              '[style.zoom]': '_visibility === "visible" ? 1 : null',
              '(body:click)': 'this._handleBodyInteraction()',
              '(body:auxclick)': 'this._handleBodyInteraction()',
              'aria-hidden': 'true'
            },
            styles: [".mat-tooltip-panel{pointer-events:none !important}.mat-tooltip{color:#fff;border-radius:4px;margin:14px;max-width:250px;padding-left:8px;padding-right:8px;overflow:hidden;text-overflow:ellipsis}.cdk-high-contrast-active .mat-tooltip{outline:solid 1px}.mat-tooltip-handset{margin:24px;padding-left:16px;padding-right:16px}\n"]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"]
          }, {
            type: _angular_cdk_layout__WEBPACK_IMPORTED_MODULE_9__["BreakpointObserver"]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var MatTooltipModule = function MatTooltipModule() {
        _classCallCheck2(this, MatTooltipModule);
      };

      MatTooltipModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineNgModule"]({
        type: MatTooltipModule
      });
      MatTooltipModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineInjector"]({
        factory: function MatTooltipModule_Factory(t) {
          return new (t || MatTooltipModule)();
        },
        providers: [MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER],
        imports: [[_angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_1__["A11yModule"], _angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"], _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_0__["OverlayModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_4__["MatCommonModule"]], _angular_material_core__WEBPACK_IMPORTED_MODULE_4__["MatCommonModule"], _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_5__["CdkScrollableModule"]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵsetNgModuleScope"](MatTooltipModule, {
          declarations: function declarations() {
            return [MatTooltip, TooltipComponent];
          },
          imports: function imports() {
            return [_angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_1__["A11yModule"], _angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"], _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_0__["OverlayModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_4__["MatCommonModule"]];
          },
          exports: function exports() {
            return [MatTooltip, TooltipComponent, _angular_material_core__WEBPACK_IMPORTED_MODULE_4__["MatCommonModule"], _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_5__["CdkScrollableModule"]];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](MatTooltipModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["NgModule"],
          args: [{
            imports: [_angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_1__["A11yModule"], _angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"], _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_0__["OverlayModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_4__["MatCommonModule"]],
            exports: [MatTooltip, TooltipComponent, _angular_material_core__WEBPACK_IMPORTED_MODULE_4__["MatCommonModule"], _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_5__["CdkScrollableModule"]],
            declarations: [MatTooltip, TooltipComponent],
            entryComponents: [TooltipComponent],
            providers: [MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=tooltip.js.map

      /***/

    },

    /***/
    "R0Ic":
    /*!******************************************************************************!*\
      !*** ./node_modules/@angular/animations/__ivy_ngcc__/fesm2015/animations.js ***!
      \******************************************************************************/

    /*! exports provided: AUTO_STYLE, AnimationBuilder, AnimationFactory, NoopAnimationPlayer, animate, animateChild, animation, group, keyframes, query, sequence, stagger, state, style, transition, trigger, useAnimation, ɵAnimationGroupPlayer, ɵPRE_STYLE */

    /***/
    function R0Ic(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AUTO_STYLE", function () {
        return AUTO_STYLE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AnimationBuilder", function () {
        return AnimationBuilder;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AnimationFactory", function () {
        return AnimationFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NoopAnimationPlayer", function () {
        return NoopAnimationPlayer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "animate", function () {
        return animate;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "animateChild", function () {
        return animateChild;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "animation", function () {
        return animation;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "group", function () {
        return group;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "keyframes", function () {
        return keyframes;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "query", function () {
        return query;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "sequence", function () {
        return sequence;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "stagger", function () {
        return stagger;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "state", function () {
        return state;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "style", function () {
        return style;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "transition", function () {
        return transition;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "trigger", function () {
        return trigger;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "useAnimation", function () {
        return useAnimation;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵAnimationGroupPlayer", function () {
        return AnimationGroupPlayer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵPRE_STYLE", function () {
        return ɵPRE_STYLE;
      });
      /**
       * @license Angular v12.0.0-next.1
       * (c) 2010-2020 Google LLC. https://angular.io/
       * License: MIT
       */

      /**
       * An injectable service that produces an animation sequence programmatically within an
       * Angular component or directive.
       * Provided by the `BrowserAnimationsModule` or `NoopAnimationsModule`.
       *
       * @usageNotes
       *
       * To use this service, add it to your component or directive as a dependency.
       * The service is instantiated along with your component.
       *
       * Apps do not typically need to create their own animation players, but if you
       * do need to, follow these steps:
       *
       * 1. Use the `build()` method to create a programmatic animation using the
       * `animate()` function. The method returns an `AnimationFactory` instance.
       *
       * 2. Use the factory object to create an `AnimationPlayer` and attach it to a DOM element.
       *
       * 3. Use the player object to control the animation programmatically.
       *
       * For example:
       *
       * ```ts
       * // import the service from BrowserAnimationsModule
       * import {AnimationBuilder} from '@angular/animations';
       * // require the service as a dependency
       * class MyCmp {
       *   constructor(private _builder: AnimationBuilder) {}
       *
       *   makeAnimation(element: any) {
       *     // first define a reusable animation
       *     const myAnimation = this._builder.build([
       *       style({ width: 0 }),
       *       animate(1000, style({ width: '100px' }))
       *     ]);
       *
       *     // use the returned factory object to create a player
       *     const player = myAnimation.create(element);
       *
       *     player.play();
       *   }
       * }
       * ```
       *
       * @publicApi
       */


      var AnimationBuilder = function AnimationBuilder() {
        _classCallCheck2(this, AnimationBuilder);
      };
      /**
       * A factory object returned from the `AnimationBuilder`.`build()` method.
       *
       * @publicApi
       */


      var AnimationFactory = function AnimationFactory() {
        _classCallCheck2(this, AnimationFactory);
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Specifies automatic styling.
       *
       * @publicApi
       */


      var AUTO_STYLE = '*';
      /**
       * Creates a named animation trigger, containing a  list of `state()`
       * and `transition()` entries to be evaluated when the expression
       * bound to the trigger changes.
       *
       * @param name An identifying string.
       * @param definitions  An animation definition object, containing an array of `state()`
       * and `transition()` declarations.
       *
       * @return An object that encapsulates the trigger data.
       *
       * @usageNotes
       * Define an animation trigger in the `animations` section of `@Component` metadata.
       * In the template, reference the trigger by name and bind it to a trigger expression that
       * evaluates to a defined animation state, using the following format:
       *
       * `[@triggerName]="expression"`
       *
       * Animation trigger bindings convert all values to strings, and then match the
       * previous and current values against any linked transitions.
       * Booleans can be specified as `1` or `true` and `0` or `false`.
       *
       * ### Usage Example
       *
       * The following example creates an animation trigger reference based on the provided
       * name value.
       * The provided animation value is expected to be an array consisting of state and
       * transition declarations.
       *
       * ```typescript
       * @Component({
       *   selector: "my-component",
       *   templateUrl: "my-component-tpl.html",
       *   animations: [
       *     trigger("myAnimationTrigger", [
       *       state(...),
       *       state(...),
       *       transition(...),
       *       transition(...)
       *     ])
       *   ]
       * })
       * class MyComponent {
       *   myStatusExp = "something";
       * }
       * ```
       *
       * The template associated with this component makes use of the defined trigger
       * by binding to an element within its template code.
       *
       * ```html
       * <!-- somewhere inside of my-component-tpl.html -->
       * <div [@myAnimationTrigger]="myStatusExp">...</div>
       * ```
       *
       * ### Using an inline function
       * The `transition` animation method also supports reading an inline function which can decide
       * if its associated animation should be run.
       *
       * ```typescript
       * // this method is run each time the `myAnimationTrigger` trigger value changes.
       * function myInlineMatcherFn(fromState: string, toState: string, element: any, params: {[key:
       string]: any}): boolean {
       *   // notice that `element` and `params` are also available here
       *   return toState == 'yes-please-animate';
       * }
       *
       * @Component({
       *   selector: 'my-component',
       *   templateUrl: 'my-component-tpl.html',
       *   animations: [
       *     trigger('myAnimationTrigger', [
       *       transition(myInlineMatcherFn, [
       *         // the animation sequence code
       *       ]),
       *     ])
       *   ]
       * })
       * class MyComponent {
       *   myStatusExp = "yes-please-animate";
       * }
       * ```
       *
       * ### Disabling Animations
       * When true, the special animation control binding `@.disabled` binding prevents
       * all animations from rendering.
       * Place the  `@.disabled` binding on an element to disable
       * animations on the element itself, as well as any inner animation triggers
       * within the element.
       *
       * The following example shows how to use this feature:
       *
       * ```typescript
       * @Component({
       *   selector: 'my-component',
       *   template: `
       *     <div [@.disabled]="isDisabled">
       *       <div [@childAnimation]="exp"></div>
       *     </div>
       *   `,
       *   animations: [
       *     trigger("childAnimation", [
       *       // ...
       *     ])
       *   ]
       * })
       * class MyComponent {
       *   isDisabled = true;
       *   exp = '...';
       * }
       * ```
       *
       * When `@.disabled` is true, it prevents the `@childAnimation` trigger from animating,
       * along with any inner animations.
       *
       * ### Disable animations application-wide
       * When an area of the template is set to have animations disabled,
       * **all** inner components have their animations disabled as well.
       * This means that you can disable all animations for an app
       * by placing a host binding set on `@.disabled` on the topmost Angular component.
       *
       * ```typescript
       * import {Component, HostBinding} from '@angular/core';
       *
       * @Component({
       *   selector: 'app-component',
       *   templateUrl: 'app.component.html',
       * })
       * class AppComponent {
       *   @HostBinding('@.disabled')
       *   public animationsDisabled = true;
       * }
       * ```
       *
       * ### Overriding disablement of inner animations
       * Despite inner animations being disabled, a parent animation can `query()`
       * for inner elements located in disabled areas of the template and still animate
       * them if needed. This is also the case for when a sub animation is
       * queried by a parent and then later animated using `animateChild()`.
       *
       * ### Detecting when an animation is disabled
       * If a region of the DOM (or the entire application) has its animations disabled, the animation
       * trigger callbacks still fire, but for zero seconds. When the callback fires, it provides
       * an instance of an `AnimationEvent`. If animations are disabled,
       * the `.disabled` flag on the event is true.
       *
       * @publicApi
       */

      function trigger(name, definitions) {
        return {
          type: 7
          /* Trigger */
          ,
          name: name,
          definitions: definitions,
          options: {}
        };
      }
      /**
       * Defines an animation step that combines styling information with timing information.
       *
       * @param timings Sets `AnimateTimings` for the parent animation.
       * A string in the format "duration [delay] [easing]".
       *  - Duration and delay are expressed as a number and optional time unit,
       * such as "1s" or "10ms" for one second and 10 milliseconds, respectively.
       * The default unit is milliseconds.
       *  - The easing value controls how the animation accelerates and decelerates
       * during its runtime. Value is one of  `ease`, `ease-in`, `ease-out`,
       * `ease-in-out`, or a `cubic-bezier()` function call.
       * If not supplied, no easing is applied.
       *
       * For example, the string "1s 100ms ease-out" specifies a duration of
       * 1000 milliseconds, and delay of 100 ms, and the "ease-out" easing style,
       * which decelerates near the end of the duration.
       * @param styles Sets AnimationStyles for the parent animation.
       * A function call to either `style()` or `keyframes()`
       * that returns a collection of CSS style entries to be applied to the parent animation.
       * When null, uses the styles from the destination state.
       * This is useful when describing an animation step that will complete an animation;
       * see "Animating to the final state" in `transitions()`.
       * @returns An object that encapsulates the animation step.
       *
       * @usageNotes
       * Call within an animation `sequence()`, `{@link animations/group group()}`, or
       * `transition()` call to specify an animation step
       * that applies given style data to the parent animation for a given amount of time.
       *
       * ### Syntax Examples
       * **Timing examples**
       *
       * The following examples show various `timings` specifications.
       * - `animate(500)` : Duration is 500 milliseconds.
       * - `animate("1s")` : Duration is 1000 milliseconds.
       * - `animate("100ms 0.5s")` : Duration is 100 milliseconds, delay is 500 milliseconds.
       * - `animate("5s ease-in")` : Duration is 5000 milliseconds, easing in.
       * - `animate("5s 10ms cubic-bezier(.17,.67,.88,.1)")` : Duration is 5000 milliseconds, delay is 10
       * milliseconds, easing according to a bezier curve.
       *
       * **Style examples**
       *
       * The following example calls `style()` to set a single CSS style.
       * ```typescript
       * animate(500, style({ background: "red" }))
       * ```
       * The following example calls `keyframes()` to set a CSS style
       * to different values for successive keyframes.
       * ```typescript
       * animate(500, keyframes(
       *  [
       *   style({ background: "blue" }),
       *   style({ background: "red" })
       *  ])
       * ```
       *
       * @publicApi
       */


      function animate(timings) {
        var styles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
        return {
          type: 4
          /* Animate */
          ,
          styles: styles,
          timings: timings
        };
      }
      /**
       * @description Defines a list of animation steps to be run in parallel.
       *
       * @param steps An array of animation step objects.
       * - When steps are defined by `style()` or `animate()`
       * function calls, each call within the group is executed instantly.
       * - To specify offset styles to be applied at a later time, define steps with
       * `keyframes()`, or use `animate()` calls with a delay value.
       * For example:
       *
       * ```typescript
       * group([
       *   animate("1s", style({ background: "black" })),
       *   animate("2s", style({ color: "white" }))
       * ])
       * ```
       *
       * @param options An options object containing a delay and
       * developer-defined parameters that provide styling defaults and
       * can be overridden on invocation.
       *
       * @return An object that encapsulates the group data.
       *
       * @usageNotes
       * Grouped animations are useful when a series of styles must be
       * animated at different starting times and closed off at different ending times.
       *
       * When called within a `sequence()` or a
       * `transition()` call, does not continue to the next
       * instruction until all of the inner animation steps have completed.
       *
       * @publicApi
       */


      function group(steps) {
        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
        return {
          type: 3
          /* Group */
          ,
          steps: steps,
          options: options
        };
      }
      /**
       * Defines a list of animation steps to be run sequentially, one by one.
       *
       * @param steps An array of animation step objects.
       * - Steps defined by `style()` calls apply the styling data immediately.
       * - Steps defined by `animate()` calls apply the styling data over time
       *   as specified by the timing data.
       *
       * ```typescript
       * sequence([
       *   style({ opacity: 0 }),
       *   animate("1s", style({ opacity: 1 }))
       * ])
       * ```
       *
       * @param options An options object containing a delay and
       * developer-defined parameters that provide styling defaults and
       * can be overridden on invocation.
       *
       * @return An object that encapsulates the sequence data.
       *
       * @usageNotes
       * When you pass an array of steps to a
       * `transition()` call, the steps run sequentially by default.
       * Compare this to the `{@link animations/group group()}` call, which runs animation steps in
       *parallel.
       *
       * When a sequence is used within a `{@link animations/group group()}` or a `transition()` call,
       * execution continues to the next instruction only after each of the inner animation
       * steps have completed.
       *
       * @publicApi
       **/


      function sequence(steps) {
        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
        return {
          type: 2
          /* Sequence */
          ,
          steps: steps,
          options: options
        };
      }
      /**
       * Declares a key/value object containing CSS properties/styles that
       * can then be used for an animation `state`, within an animation `sequence`,
       * or as styling data for calls to `animate()` and `keyframes()`.
       *
       * @param tokens A set of CSS styles or HTML styles associated with an animation state.
       * The value can be any of the following:
       * - A key-value style pair associating a CSS property with a value.
       * - An array of key-value style pairs.
       * - An asterisk (*), to use auto-styling, where styles are derived from the element
       * being animated and applied to the animation when it starts.
       *
       * Auto-styling can be used to define a state that depends on layout or other
       * environmental factors.
       *
       * @return An object that encapsulates the style data.
       *
       * @usageNotes
       * The following examples create animation styles that collect a set of
       * CSS property values:
       *
       * ```typescript
       * // string values for CSS properties
       * style({ background: "red", color: "blue" })
       *
       * // numerical pixel values
       * style({ width: 100, height: 0 })
       * ```
       *
       * The following example uses auto-styling to allow a component to animate from
       * a height of 0 up to the height of the parent element:
       *
       * ```
       * style({ height: 0 }),
       * animate("1s", style({ height: "*" }))
       * ```
       *
       * @publicApi
       **/


      function style(tokens) {
        return {
          type: 6
          /* Style */
          ,
          styles: tokens,
          offset: null
        };
      }
      /**
       * Declares an animation state within a trigger attached to an element.
       *
       * @param name One or more names for the defined state in a comma-separated string.
       * The following reserved state names can be supplied to define a style for specific use
       * cases:
       *
       * - `void` You can associate styles with this name to be used when
       * the element is detached from the application. For example, when an `ngIf` evaluates
       * to false, the state of the associated element is void.
       *  - `*` (asterisk) Indicates the default state. You can associate styles with this name
       * to be used as the fallback when the state that is being animated is not declared
       * within the trigger.
       *
       * @param styles A set of CSS styles associated with this state, created using the
       * `style()` function.
       * This set of styles persists on the element once the state has been reached.
       * @param options Parameters that can be passed to the state when it is invoked.
       * 0 or more key-value pairs.
       * @return An object that encapsulates the new state data.
       *
       * @usageNotes
       * Use the `trigger()` function to register states to an animation trigger.
       * Use the `transition()` function to animate between states.
       * When a state is active within a component, its associated styles persist on the element,
       * even when the animation ends.
       *
       * @publicApi
       **/


      function state(name, styles, options) {
        return {
          type: 0
          /* State */
          ,
          name: name,
          styles: styles,
          options: options
        };
      }
      /**
       * Defines a set of animation styles, associating each style with an optional `offset` value.
       *
       * @param steps A set of animation styles with optional offset data.
       * The optional `offset` value for a style specifies a percentage of the total animation
       * time at which that style is applied.
       * @returns An object that encapsulates the keyframes data.
       *
       * @usageNotes
       * Use with the `animate()` call. Instead of applying animations
       * from the current state
       * to the destination state, keyframes describe how each style entry is applied and at what point
       * within the animation arc.
       * Compare [CSS Keyframe Animations](https://www.w3schools.com/css/css3_animations.asp).
       *
       * ### Usage
       *
       * In the following example, the offset values describe
       * when each `backgroundColor` value is applied. The color is red at the start, and changes to
       * blue when 20% of the total time has elapsed.
       *
       * ```typescript
       * // the provided offset values
       * animate("5s", keyframes([
       *   style({ backgroundColor: "red", offset: 0 }),
       *   style({ backgroundColor: "blue", offset: 0.2 }),
       *   style({ backgroundColor: "orange", offset: 0.3 }),
       *   style({ backgroundColor: "black", offset: 1 })
       * ]))
       * ```
       *
       * If there are no `offset` values specified in the style entries, the offsets
       * are calculated automatically.
       *
       * ```typescript
       * animate("5s", keyframes([
       *   style({ backgroundColor: "red" }) // offset = 0
       *   style({ backgroundColor: "blue" }) // offset = 0.33
       *   style({ backgroundColor: "orange" }) // offset = 0.66
       *   style({ backgroundColor: "black" }) // offset = 1
       * ]))
       *```
      
       * @publicApi
       */


      function keyframes(steps) {
        return {
          type: 5
          /* Keyframes */
          ,
          steps: steps
        };
      }
      /**
       * Declares an animation transition as a sequence of animation steps to run when a given
       * condition is satisfied. The condition is a Boolean expression or function that compares
       * the previous and current animation states, and returns true if this transition should occur.
       * When the state criteria of a defined transition are met, the associated animation is
       * triggered.
       *
       * @param stateChangeExpr A Boolean expression or function that compares the previous and current
       * animation states, and returns true if this transition should occur. Note that  "true" and "false"
       * match 1 and 0, respectively. An expression is evaluated each time a state change occurs in the
       * animation trigger element.
       * The animation steps run when the expression evaluates to true.
       *
       * - A state-change string takes the form "state1 => state2", where each side is a defined animation
       * state, or an asterix (*) to refer to a dynamic start or end state.
       *   - The expression string can contain multiple comma-separated statements;
       * for example "state1 => state2, state3 => state4".
       *   - Special values `:enter` and `:leave` initiate a transition on the entry and exit states,
       * equivalent to  "void => *"  and "* => void".
       *   - Special values `:increment` and `:decrement` initiate a transition when a numeric value has
       * increased or decreased in value.
       * - A function is executed each time a state change occurs in the animation trigger element.
       * The animation steps run when the function returns true.
       *
       * @param steps One or more animation objects, as returned by the `animate()` or
       * `sequence()` function, that form a transformation from one state to another.
       * A sequence is used by default when you pass an array.
       * @param options An options object that can contain a delay value for the start of the animation,
       * and additional developer-defined parameters. Provided values for additional parameters are used
       * as defaults, and override values can be passed to the caller on invocation.
       * @returns An object that encapsulates the transition data.
       *
       * @usageNotes
       * The template associated with a component binds an animation trigger to an element.
       *
       * ```HTML
       * <!-- somewhere inside of my-component-tpl.html -->
       * <div [@myAnimationTrigger]="myStatusExp">...</div>
       * ```
       *
       * All transitions are defined within an animation trigger,
       * along with named states that the transitions change to and from.
       *
       * ```typescript
       * trigger("myAnimationTrigger", [
       *  // define states
       *  state("on", style({ background: "green" })),
       *  state("off", style({ background: "grey" })),
       *  ...]
       * ```
       *
       * Note that when you call the `sequence()` function within a `{@link animations/group group()}`
       * or a `transition()` call, execution does not continue to the next instruction
       * until each of the inner animation steps have completed.
       *
       * ### Syntax examples
       *
       * The following examples define transitions between the two defined states (and default states),
       * using various options:
       *
       * ```typescript
       * // Transition occurs when the state value
       * // bound to "myAnimationTrigger" changes from "on" to "off"
       * transition("on => off", animate(500))
       * // Run the same animation for both directions
       * transition("on <=> off", animate(500))
       * // Define multiple state-change pairs separated by commas
       * transition("on => off, off => void", animate(500))
       * ```
       *
       * ### Special values for state-change expressions
       *
       * - Catch-all state change for when an element is inserted into the page and the
       * destination state is unknown:
       *
       * ```typescript
       * transition("void => *", [
       *  style({ opacity: 0 }),
       *  animate(500)
       *  ])
       * ```
       *
       * - Capture a state change between any states:
       *
       *  `transition("* => *", animate("1s 0s"))`
       *
       * - Entry and exit transitions:
       *
       * ```typescript
       * transition(":enter", [
       *   style({ opacity: 0 }),
       *   animate(500, style({ opacity: 1 }))
       *   ]),
       * transition(":leave", [
       *   animate(500, style({ opacity: 0 }))
       *   ])
       * ```
       *
       * - Use `:increment` and `:decrement` to initiate transitions:
       *
       * ```typescript
       * transition(":increment", group([
       *  query(':enter', [
       *     style({ left: '100%' }),
       *     animate('0.5s ease-out', style('*'))
       *   ]),
       *  query(':leave', [
       *     animate('0.5s ease-out', style({ left: '-100%' }))
       *  ])
       * ]))
       *
       * transition(":decrement", group([
       *  query(':enter', [
       *     style({ left: '100%' }),
       *     animate('0.5s ease-out', style('*'))
       *   ]),
       *  query(':leave', [
       *     animate('0.5s ease-out', style({ left: '-100%' }))
       *  ])
       * ]))
       * ```
       *
       * ### State-change functions
       *
       * Here is an example of a `fromState` specified as a state-change function that invokes an
       * animation when true:
       *
       * ```typescript
       * transition((fromState, toState) =>
       *  {
       *   return fromState == "off" && toState == "on";
       *  },
       *  animate("1s 0s"))
       * ```
       *
       * ### Animating to the final state
       *
       * If the final step in a transition is a call to `animate()` that uses a timing value
       * with no style data, that step is automatically considered the final animation arc,
       * for the element to reach the final state. Angular automatically adds or removes
       * CSS styles to ensure that the element is in the correct final state.
       *
       * The following example defines a transition that starts by hiding the element,
       * then makes sure that it animates properly to whatever state is currently active for trigger:
       *
       * ```typescript
       * transition("void => *", [
       *   style({ opacity: 0 }),
       *   animate(500)
       *  ])
       * ```
       * ### Boolean value matching
       * If a trigger binding value is a Boolean, it can be matched using a transition expression
       * that compares true and false or 1 and 0. For example:
       *
       * ```
       * // in the template
       * <div [@openClose]="open ? true : false">...</div>
       * // in the component metadata
       * trigger('openClose', [
       *   state('true', style({ height: '*' })),
       *   state('false', style({ height: '0px' })),
       *   transition('false <=> true', animate(500))
       * ])
       * ```
       *
       * @publicApi
       **/


      function transition(stateChangeExpr, steps) {
        var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
        return {
          type: 1
          /* Transition */
          ,
          expr: stateChangeExpr,
          animation: steps,
          options: options
        };
      }
      /**
       * Produces a reusable animation that can be invoked in another animation or sequence,
       * by calling the `useAnimation()` function.
       *
       * @param steps One or more animation objects, as returned by the `animate()`
       * or `sequence()` function, that form a transformation from one state to another.
       * A sequence is used by default when you pass an array.
       * @param options An options object that can contain a delay value for the start of the
       * animation, and additional developer-defined parameters.
       * Provided values for additional parameters are used as defaults,
       * and override values can be passed to the caller on invocation.
       * @returns An object that encapsulates the animation data.
       *
       * @usageNotes
       * The following example defines a reusable animation, providing some default parameter
       * values.
       *
       * ```typescript
       * var fadeAnimation = animation([
       *   style({ opacity: '{{ start }}' }),
       *   animate('{{ time }}',
       *   style({ opacity: '{{ end }}'}))
       *   ],
       *   { params: { time: '1000ms', start: 0, end: 1 }});
       * ```
       *
       * The following invokes the defined animation with a call to `useAnimation()`,
       * passing in override parameter values.
       *
       * ```js
       * useAnimation(fadeAnimation, {
       *   params: {
       *     time: '2s',
       *     start: 1,
       *     end: 0
       *   }
       * })
       * ```
       *
       * If any of the passed-in parameter values are missing from this call,
       * the default values are used. If one or more parameter values are missing before a step is
       * animated, `useAnimation()` throws an error.
       *
       * @publicApi
       */


      function animation(steps) {
        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
        return {
          type: 8
          /* Reference */
          ,
          animation: steps,
          options: options
        };
      }
      /**
       * Executes a queried inner animation element within an animation sequence.
       *
       * @param options An options object that can contain a delay value for the start of the
       * animation, and additional override values for developer-defined parameters.
       * @return An object that encapsulates the child animation data.
       *
       * @usageNotes
       * Each time an animation is triggered in Angular, the parent animation
       * has priority and any child animations are blocked. In order
       * for a child animation to run, the parent animation must query each of the elements
       * containing child animations, and run them using this function.
       *
       * Note that this feature is designed to be used with `query()` and it will only work
       * with animations that are assigned using the Angular animation library. CSS keyframes
       * and transitions are not handled by this API.
       *
       * @publicApi
       */


      function animateChild() {
        var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
        return {
          type: 9
          /* AnimateChild */
          ,
          options: options
        };
      }
      /**
       * Starts a reusable animation that is created using the `animation()` function.
       *
       * @param animation The reusable animation to start.
       * @param options An options object that can contain a delay value for the start of
       * the animation, and additional override values for developer-defined parameters.
       * @return An object that contains the animation parameters.
       *
       * @publicApi
       */


      function useAnimation(animation) {
        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
        return {
          type: 10
          /* AnimateRef */
          ,
          animation: animation,
          options: options
        };
      }
      /**
       * Finds one or more inner elements within the current element that is
       * being animated within a sequence. Use with `animate()`.
       *
       * @param selector The element to query, or a set of elements that contain Angular-specific
       * characteristics, specified with one or more of the following tokens.
       *  - `query(":enter")` or `query(":leave")` : Query for newly inserted/removed elements.
       *  - `query(":animating")` : Query all currently animating elements.
       *  - `query("@triggerName")` : Query elements that contain an animation trigger.
       *  - `query("@*")` : Query all elements that contain an animation triggers.
       *  - `query(":self")` : Include the current element into the animation sequence.
       *
       * @param animation One or more animation steps to apply to the queried element or elements.
       * An array is treated as an animation sequence.
       * @param options An options object. Use the 'limit' field to limit the total number of
       * items to collect.
       * @return An object that encapsulates the query data.
       *
       * @usageNotes
       * Tokens can be merged into a combined query selector string. For example:
       *
       * ```typescript
       *  query(':self, .record:enter, .record:leave, @subTrigger', [...])
       * ```
       *
       * The `query()` function collects multiple elements and works internally by using
       * `element.querySelectorAll`. Use the `limit` field of an options object to limit
       * the total number of items to be collected. For example:
       *
       * ```js
       * query('div', [
       *   animate(...),
       *   animate(...)
       * ], { limit: 1 })
       * ```
       *
       * By default, throws an error when zero items are found. Set the
       * `optional` flag to ignore this error. For example:
       *
       * ```js
       * query('.some-element-that-may-not-be-there', [
       *   animate(...),
       *   animate(...)
       * ], { optional: true })
       * ```
       *
       * ### Usage Example
       *
       * The following example queries for inner elements and animates them
       * individually using `animate()`.
       *
       * ```typescript
       * @Component({
       *   selector: 'inner',
       *   template: `
       *     <div [@queryAnimation]="exp">
       *       <h1>Title</h1>
       *       <div class="content">
       *         Blah blah blah
       *       </div>
       *     </div>
       *   `,
       *   animations: [
       *    trigger('queryAnimation', [
       *      transition('* => goAnimate', [
       *        // hide the inner elements
       *        query('h1', style({ opacity: 0 })),
       *        query('.content', style({ opacity: 0 })),
       *
       *        // animate the inner elements in, one by one
       *        query('h1', animate(1000, style({ opacity: 1 }))),
       *        query('.content', animate(1000, style({ opacity: 1 }))),
       *      ])
       *    ])
       *  ]
       * })
       * class Cmp {
       *   exp = '';
       *
       *   goAnimate() {
       *     this.exp = 'goAnimate';
       *   }
       * }
       * ```
       *
       * @publicApi
       */


      function query(selector, animation) {
        var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
        return {
          type: 11
          /* Query */
          ,
          selector: selector,
          animation: animation,
          options: options
        };
      }
      /**
       * Use within an animation `query()` call to issue a timing gap after
       * each queried item is animated.
       *
       * @param timings A delay value.
       * @param animation One ore more animation steps.
       * @returns An object that encapsulates the stagger data.
       *
       * @usageNotes
       * In the following example, a container element wraps a list of items stamped out
       * by an `ngFor`. The container element contains an animation trigger that will later be set
       * to query for each of the inner items.
       *
       * Each time items are added, the opacity fade-in animation runs,
       * and each removed item is faded out.
       * When either of these animations occur, the stagger effect is
       * applied after each item's animation is started.
       *
       * ```html
       * <!-- list.component.html -->
       * <button (click)="toggle()">Show / Hide Items</button>
       * <hr />
       * <div [@listAnimation]="items.length">
       *   <div *ngFor="let item of items">
       *     {{ item }}
       *   </div>
       * </div>
       * ```
       *
       * Here is the component code:
       *
       * ```typescript
       * import {trigger, transition, style, animate, query, stagger} from '@angular/animations';
       * @Component({
       *   templateUrl: 'list.component.html',
       *   animations: [
       *     trigger('listAnimation', [
       *     ...
       *     ])
       *   ]
       * })
       * class ListComponent {
       *   items = [];
       *
       *   showItems() {
       *     this.items = [0,1,2,3,4];
       *   }
       *
       *   hideItems() {
       *     this.items = [];
       *   }
       *
       *   toggle() {
       *     this.items.length ? this.hideItems() : this.showItems();
       *    }
       *  }
       * ```
       *
       * Here is the animation trigger code:
       *
       * ```typescript
       * trigger('listAnimation', [
       *   transition('* => *', [ // each time the binding value changes
       *     query(':leave', [
       *       stagger(100, [
       *         animate('0.5s', style({ opacity: 0 }))
       *       ])
       *     ]),
       *     query(':enter', [
       *       style({ opacity: 0 }),
       *       stagger(100, [
       *         animate('0.5s', style({ opacity: 1 }))
       *       ])
       *     ])
       *   ])
       * ])
       * ```
       *
       * @publicApi
       */


      function stagger(timings, animation) {
        return {
          type: 12
          /* Stagger */
          ,
          timings: timings,
          animation: animation
        };
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function scheduleMicroTask(cb) {
        Promise.resolve(null).then(cb);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * An empty programmatic controller for reusable animations.
       * Used internally when animations are disabled, to avoid
       * checking for the null case when an animation player is expected.
       *
       * @see `animate()`
       * @see `AnimationPlayer`
       * @see `GroupPlayer`
       *
       * @publicApi
       */


      var NoopAnimationPlayer = /*#__PURE__*/function () {
        function NoopAnimationPlayer() {
          var duration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
          var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;

          _classCallCheck2(this, NoopAnimationPlayer);

          this._onDoneFns = [];
          this._onStartFns = [];
          this._onDestroyFns = [];
          this._started = false;
          this._destroyed = false;
          this._finished = false;
          this._position = 0;
          this.parentPlayer = null;
          this.totalTime = duration + delay;
        }

        _createClass2(NoopAnimationPlayer, [{
          key: "_onFinish",
          value: function _onFinish() {
            if (!this._finished) {
              this._finished = true;

              this._onDoneFns.forEach(function (fn) {
                return fn();
              });

              this._onDoneFns = [];
            }
          }
        }, {
          key: "onStart",
          value: function onStart(fn) {
            this._onStartFns.push(fn);
          }
        }, {
          key: "onDone",
          value: function onDone(fn) {
            this._onDoneFns.push(fn);
          }
        }, {
          key: "onDestroy",
          value: function onDestroy(fn) {
            this._onDestroyFns.push(fn);
          }
        }, {
          key: "hasStarted",
          value: function hasStarted() {
            return this._started;
          }
        }, {
          key: "init",
          value: function init() {}
        }, {
          key: "play",
          value: function play() {
            if (!this.hasStarted()) {
              this._onStart();

              this.triggerMicrotask();
            }

            this._started = true;
          }
          /** @internal */

        }, {
          key: "triggerMicrotask",
          value: function triggerMicrotask() {
            var _this593 = this;

            scheduleMicroTask(function () {
              return _this593._onFinish();
            });
          }
        }, {
          key: "_onStart",
          value: function _onStart() {
            this._onStartFns.forEach(function (fn) {
              return fn();
            });

            this._onStartFns = [];
          }
        }, {
          key: "pause",
          value: function pause() {}
        }, {
          key: "restart",
          value: function restart() {}
        }, {
          key: "finish",
          value: function finish() {
            this._onFinish();
          }
        }, {
          key: "destroy",
          value: function destroy() {
            if (!this._destroyed) {
              this._destroyed = true;

              if (!this.hasStarted()) {
                this._onStart();
              }

              this.finish();

              this._onDestroyFns.forEach(function (fn) {
                return fn();
              });

              this._onDestroyFns = [];
            }
          }
        }, {
          key: "reset",
          value: function reset() {}
        }, {
          key: "setPosition",
          value: function setPosition(position) {
            this._position = this.totalTime ? position * this.totalTime : 1;
          }
        }, {
          key: "getPosition",
          value: function getPosition() {
            return this.totalTime ? this._position / this.totalTime : 1;
          }
          /** @internal */

        }, {
          key: "triggerCallback",
          value: function triggerCallback(phaseName) {
            var methods = phaseName == 'start' ? this._onStartFns : this._onDoneFns;
            methods.forEach(function (fn) {
              return fn();
            });
            methods.length = 0;
          }
        }]);

        return NoopAnimationPlayer;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A programmatic controller for a group of reusable animations.
       * Used internally to control animations.
       *
       * @see `AnimationPlayer`
       * @see `{@link animations/group group()}`
       *
       */


      var AnimationGroupPlayer = /*#__PURE__*/function () {
        function AnimationGroupPlayer(_players) {
          var _this594 = this;

          _classCallCheck2(this, AnimationGroupPlayer);

          this._onDoneFns = [];
          this._onStartFns = [];
          this._finished = false;
          this._started = false;
          this._destroyed = false;
          this._onDestroyFns = [];
          this.parentPlayer = null;
          this.totalTime = 0;
          this.players = _players;
          var doneCount = 0;
          var destroyCount = 0;
          var startCount = 0;
          var total = this.players.length;

          if (total == 0) {
            scheduleMicroTask(function () {
              return _this594._onFinish();
            });
          } else {
            this.players.forEach(function (player) {
              player.onDone(function () {
                if (++doneCount == total) {
                  _this594._onFinish();
                }
              });
              player.onDestroy(function () {
                if (++destroyCount == total) {
                  _this594._onDestroy();
                }
              });
              player.onStart(function () {
                if (++startCount == total) {
                  _this594._onStart();
                }
              });
            });
          }

          this.totalTime = this.players.reduce(function (time, player) {
            return Math.max(time, player.totalTime);
          }, 0);
        }

        _createClass2(AnimationGroupPlayer, [{
          key: "_onFinish",
          value: function _onFinish() {
            if (!this._finished) {
              this._finished = true;

              this._onDoneFns.forEach(function (fn) {
                return fn();
              });

              this._onDoneFns = [];
            }
          }
        }, {
          key: "init",
          value: function init() {
            this.players.forEach(function (player) {
              return player.init();
            });
          }
        }, {
          key: "onStart",
          value: function onStart(fn) {
            this._onStartFns.push(fn);
          }
        }, {
          key: "_onStart",
          value: function _onStart() {
            if (!this.hasStarted()) {
              this._started = true;

              this._onStartFns.forEach(function (fn) {
                return fn();
              });

              this._onStartFns = [];
            }
          }
        }, {
          key: "onDone",
          value: function onDone(fn) {
            this._onDoneFns.push(fn);
          }
        }, {
          key: "onDestroy",
          value: function onDestroy(fn) {
            this._onDestroyFns.push(fn);
          }
        }, {
          key: "hasStarted",
          value: function hasStarted() {
            return this._started;
          }
        }, {
          key: "play",
          value: function play() {
            if (!this.parentPlayer) {
              this.init();
            }

            this._onStart();

            this.players.forEach(function (player) {
              return player.play();
            });
          }
        }, {
          key: "pause",
          value: function pause() {
            this.players.forEach(function (player) {
              return player.pause();
            });
          }
        }, {
          key: "restart",
          value: function restart() {
            this.players.forEach(function (player) {
              return player.restart();
            });
          }
        }, {
          key: "finish",
          value: function finish() {
            this._onFinish();

            this.players.forEach(function (player) {
              return player.finish();
            });
          }
        }, {
          key: "destroy",
          value: function destroy() {
            this._onDestroy();
          }
        }, {
          key: "_onDestroy",
          value: function _onDestroy() {
            if (!this._destroyed) {
              this._destroyed = true;

              this._onFinish();

              this.players.forEach(function (player) {
                return player.destroy();
              });

              this._onDestroyFns.forEach(function (fn) {
                return fn();
              });

              this._onDestroyFns = [];
            }
          }
        }, {
          key: "reset",
          value: function reset() {
            this.players.forEach(function (player) {
              return player.reset();
            });
            this._destroyed = false;
            this._finished = false;
            this._started = false;
          }
        }, {
          key: "setPosition",
          value: function setPosition(p) {
            var timeAtPosition = p * this.totalTime;
            this.players.forEach(function (player) {
              var position = player.totalTime ? Math.min(1, timeAtPosition / player.totalTime) : 1;
              player.setPosition(position);
            });
          }
        }, {
          key: "getPosition",
          value: function getPosition() {
            var longestPlayer = this.players.reduce(function (longestSoFar, player) {
              var newPlayerIsLongest = longestSoFar === null || player.totalTime > longestSoFar.totalTime;
              return newPlayerIsLongest ? player : longestSoFar;
            }, null);
            return longestPlayer != null ? longestPlayer.getPosition() : 0;
          }
        }, {
          key: "beforeDestroy",
          value: function beforeDestroy() {
            this.players.forEach(function (player) {
              if (player.beforeDestroy) {
                player.beforeDestroy();
              }
            });
          }
          /** @internal */

        }, {
          key: "triggerCallback",
          value: function triggerCallback(phaseName) {
            var methods = phaseName == 'start' ? this._onStartFns : this._onDoneFns;
            methods.forEach(function (fn) {
              return fn();
            });
            methods.length = 0;
          }
        }]);

        return AnimationGroupPlayer;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ɵPRE_STYLE = '!';
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=animations.js.map

      /***/
    },

    /***/
    "R1ws":
    /*!************************************************************************************!*\
      !*** ./node_modules/@angular/platform-browser/__ivy_ngcc__/fesm2015/animations.js ***!
      \************************************************************************************/

    /*! exports provided: ANIMATION_MODULE_TYPE, BrowserAnimationsModule, NoopAnimationsModule, ɵAnimationRenderer, ɵAnimationRendererFactory, ɵBrowserAnimationBuilder, ɵBrowserAnimationFactory, ɵInjectableAnimationEngine, ɵangular_packages_platform_browser_animations_animations_a, ɵangular_packages_platform_browser_animations_animations_b, ɵangular_packages_platform_browser_animations_animations_c, ɵangular_packages_platform_browser_animations_animations_d, ɵangular_packages_platform_browser_animations_animations_e, ɵangular_packages_platform_browser_animations_animations_f */

    /***/
    function R1ws(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ANIMATION_MODULE_TYPE", function () {
        return ANIMATION_MODULE_TYPE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BrowserAnimationsModule", function () {
        return BrowserAnimationsModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NoopAnimationsModule", function () {
        return NoopAnimationsModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵAnimationRenderer", function () {
        return AnimationRenderer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵAnimationRendererFactory", function () {
        return AnimationRendererFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵBrowserAnimationBuilder", function () {
        return BrowserAnimationBuilder;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵBrowserAnimationFactory", function () {
        return BrowserAnimationFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵInjectableAnimationEngine", function () {
        return InjectableAnimationEngine;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_animations_animations_a", function () {
        return instantiateSupportedAnimationDriver;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_animations_animations_b", function () {
        return instantiateDefaultStyleNormalizer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_animations_animations_c", function () {
        return instantiateRendererFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_animations_animations_d", function () {
        return BROWSER_ANIMATIONS_PROVIDERS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_animations_animations_e", function () {
        return BROWSER_NOOP_ANIMATIONS_PROVIDERS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_animations_animations_f", function () {
        return BaseAnimationRenderer;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/platform-browser */
      "jhN1");
      /* harmony import */


      var _angular_animations__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/animations */
      "R0Ic");
      /* harmony import */


      var _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/animations/browser */
      "t9l1");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /**
       * @license Angular v12.0.0-next.1
       * (c) 2010-2020 Google LLC. https://angular.io/
       * License: MIT
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var BrowserAnimationBuilder = /*#__PURE__*/function (_angular_animations__) {
        _inherits2(BrowserAnimationBuilder, _angular_animations__);

        var _super251 = _createSuper(BrowserAnimationBuilder);

        function BrowserAnimationBuilder(rootRenderer, doc) {
          var _this595;

          _classCallCheck2(this, BrowserAnimationBuilder);

          _this595 = _super251.call(this);
          _this595._nextAnimationId = 0;
          var typeData = {
            id: '0',
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            styles: [],
            data: {
              animation: []
            }
          };
          _this595._renderer = rootRenderer.createRenderer(doc.body, typeData);
          return _this595;
        }

        _createClass2(BrowserAnimationBuilder, [{
          key: "build",
          value: function build(animation) {
            var id = this._nextAnimationId.toString();

            this._nextAnimationId++;
            var entry = Array.isArray(animation) ? Object(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["sequence"])(animation) : animation;
            issueAnimationCommand(this._renderer, null, id, 'register', [entry]);
            return new BrowserAnimationFactory(id, this._renderer);
          }
        }]);

        return BrowserAnimationBuilder;
      }(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["AnimationBuilder"]);

      BrowserAnimationBuilder.ɵfac = function BrowserAnimationBuilder_Factory(t) {
        return new (t || BrowserAnimationBuilder)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]));
      };

      BrowserAnimationBuilder.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: BrowserAnimationBuilder,
        factory: BrowserAnimationBuilder.ɵfac
      });

      BrowserAnimationBuilder.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BrowserAnimationBuilder, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
            }]
          }];
        }, null);
      })();

      var BrowserAnimationFactory = /*#__PURE__*/function (_angular_animations__2) {
        _inherits2(BrowserAnimationFactory, _angular_animations__2);

        var _super252 = _createSuper(BrowserAnimationFactory);

        function BrowserAnimationFactory(_id, _renderer) {
          var _this596;

          _classCallCheck2(this, BrowserAnimationFactory);

          _this596 = _super252.call(this);
          _this596._id = _id;
          _this596._renderer = _renderer;
          return _this596;
        }

        _createClass2(BrowserAnimationFactory, [{
          key: "create",
          value: function create(element, options) {
            return new RendererAnimationPlayer(this._id, element, options || {}, this._renderer);
          }
        }]);

        return BrowserAnimationFactory;
      }(_angular_animations__WEBPACK_IMPORTED_MODULE_2__["AnimationFactory"]);

      var RendererAnimationPlayer = /*#__PURE__*/function () {
        function RendererAnimationPlayer(id, element, options, _renderer) {
          _classCallCheck2(this, RendererAnimationPlayer);

          this.id = id;
          this.element = element;
          this._renderer = _renderer;
          this.parentPlayer = null;
          this._started = false;
          this.totalTime = 0;

          this._command('create', options);
        }

        _createClass2(RendererAnimationPlayer, [{
          key: "_listen",
          value: function _listen(eventName, callback) {
            return this._renderer.listen(this.element, "@@".concat(this.id, ":").concat(eventName), callback);
          }
        }, {
          key: "_command",
          value: function _command(command) {
            for (var _len35 = arguments.length, args = new Array(_len35 > 1 ? _len35 - 1 : 0), _key37 = 1; _key37 < _len35; _key37++) {
              args[_key37 - 1] = arguments[_key37];
            }

            return issueAnimationCommand(this._renderer, this.element, this.id, command, args);
          }
        }, {
          key: "onDone",
          value: function onDone(fn) {
            this._listen('done', fn);
          }
        }, {
          key: "onStart",
          value: function onStart(fn) {
            this._listen('start', fn);
          }
        }, {
          key: "onDestroy",
          value: function onDestroy(fn) {
            this._listen('destroy', fn);
          }
        }, {
          key: "init",
          value: function init() {
            this._command('init');
          }
        }, {
          key: "hasStarted",
          value: function hasStarted() {
            return this._started;
          }
        }, {
          key: "play",
          value: function play() {
            this._command('play');

            this._started = true;
          }
        }, {
          key: "pause",
          value: function pause() {
            this._command('pause');
          }
        }, {
          key: "restart",
          value: function restart() {
            this._command('restart');
          }
        }, {
          key: "finish",
          value: function finish() {
            this._command('finish');
          }
        }, {
          key: "destroy",
          value: function destroy() {
            this._command('destroy');
          }
        }, {
          key: "reset",
          value: function reset() {
            this._command('reset');
          }
        }, {
          key: "setPosition",
          value: function setPosition(p) {
            this._command('setPosition', p);
          }
        }, {
          key: "getPosition",
          value: function getPosition() {
            var _a, _b;

            return (_b = (_a = this._renderer.engine.players[+this.id]) === null || _a === void 0 ? void 0 : _a.getPosition()) !== null && _b !== void 0 ? _b : 0;
          }
        }]);

        return RendererAnimationPlayer;
      }();

      function issueAnimationCommand(renderer, element, id, command, args) {
        return renderer.setProperty(element, "@@".concat(id, ":").concat(command), args);
      }

      var ANIMATION_PREFIX = '@';
      var DISABLE_ANIMATIONS_FLAG = '@.disabled';

      var AnimationRendererFactory = /*#__PURE__*/function () {
        function AnimationRendererFactory(delegate, engine, _zone) {
          _classCallCheck2(this, AnimationRendererFactory);

          this.delegate = delegate;
          this.engine = engine;
          this._zone = _zone;
          this._currentId = 0;
          this._microtaskId = 1;
          this._animationCallbacksBuffer = [];
          this._rendererCache = new Map();
          this._cdRecurDepth = 0;
          this.promise = Promise.resolve(0);

          engine.onRemovalComplete = function (element, delegate) {
            // Note: if an component element has a leave animation, and the component
            // a host leave animation, the view engine will call `removeChild` for the parent
            // component renderer as well as for the child component renderer.
            // Therefore, we need to check if we already removed the element.
            if (delegate && delegate.parentNode(element)) {
              delegate.removeChild(element.parentNode, element);
            }
          };
        }

        _createClass2(AnimationRendererFactory, [{
          key: "createRenderer",
          value: function createRenderer(hostElement, type) {
            var _this597 = this;

            var EMPTY_NAMESPACE_ID = ''; // cache the delegates to find out which cached delegate can
            // be used by which cached renderer

            var delegate = this.delegate.createRenderer(hostElement, type);

            if (!hostElement || !type || !type.data || !type.data['animation']) {
              var renderer = this._rendererCache.get(delegate);

              if (!renderer) {
                renderer = new BaseAnimationRenderer(EMPTY_NAMESPACE_ID, delegate, this.engine); // only cache this result when the base renderer is used

                this._rendererCache.set(delegate, renderer);
              }

              return renderer;
            }

            var componentId = type.id;
            var namespaceId = type.id + '-' + this._currentId;
            this._currentId++;
            this.engine.register(namespaceId, hostElement);

            var registerTrigger = function registerTrigger(trigger) {
              if (Array.isArray(trigger)) {
                trigger.forEach(registerTrigger);
              } else {
                _this597.engine.registerTrigger(componentId, namespaceId, hostElement, trigger.name, trigger);
              }
            };

            var animationTriggers = type.data['animation'];
            animationTriggers.forEach(registerTrigger);
            return new AnimationRenderer(this, namespaceId, delegate, this.engine);
          }
        }, {
          key: "begin",
          value: function begin() {
            this._cdRecurDepth++;

            if (this.delegate.begin) {
              this.delegate.begin();
            }
          }
        }, {
          key: "_scheduleCountTask",
          value: function _scheduleCountTask() {
            var _this598 = this;

            // always use promise to schedule microtask instead of use Zone
            this.promise.then(function () {
              _this598._microtaskId++;
            });
          }
          /** @internal */

        }, {
          key: "scheduleListenerCallback",
          value: function scheduleListenerCallback(count, fn, data) {
            var _this599 = this;

            if (count >= 0 && count < this._microtaskId) {
              this._zone.run(function () {
                return fn(data);
              });

              return;
            }

            if (this._animationCallbacksBuffer.length == 0) {
              Promise.resolve(null).then(function () {
                _this599._zone.run(function () {
                  _this599._animationCallbacksBuffer.forEach(function (tuple) {
                    var _tuple = _slicedToArray(tuple, 2),
                        fn = _tuple[0],
                        data = _tuple[1];

                    fn(data);
                  });

                  _this599._animationCallbacksBuffer = [];
                });
              });
            }

            this._animationCallbacksBuffer.push([fn, data]);
          }
        }, {
          key: "end",
          value: function end() {
            var _this600 = this;

            this._cdRecurDepth--; // this is to prevent animations from running twice when an inner
            // component does CD when a parent component instead has inserted it

            if (this._cdRecurDepth == 0) {
              this._zone.runOutsideAngular(function () {
                _this600._scheduleCountTask();

                _this600.engine.flush(_this600._microtaskId);
              });
            }

            if (this.delegate.end) {
              this.delegate.end();
            }
          }
        }, {
          key: "whenRenderingDone",
          value: function whenRenderingDone() {
            return this.engine.whenRenderingDone();
          }
        }]);

        return AnimationRendererFactory;
      }();

      AnimationRendererFactory.ɵfac = function AnimationRendererFactory_Factory(t) {
        return new (t || AnimationRendererFactory)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵAnimationEngine"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]));
      };

      AnimationRendererFactory.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: AnimationRendererFactory,
        factory: AnimationRendererFactory.ɵfac
      });

      AnimationRendererFactory.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"]
        }, {
          type: _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵAnimationEngine"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](AnimationRendererFactory, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"]
          }, {
            type: _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵAnimationEngine"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }];
        }, null);
      })();

      var BaseAnimationRenderer = /*#__PURE__*/function () {
        function BaseAnimationRenderer(namespaceId, delegate, engine) {
          _classCallCheck2(this, BaseAnimationRenderer);

          this.namespaceId = namespaceId;
          this.delegate = delegate;
          this.engine = engine;
          this.destroyNode = this.delegate.destroyNode ? function (n) {
            return delegate.destroyNode(n);
          } : null;
        }

        _createClass2(BaseAnimationRenderer, [{
          key: "data",
          get: function get() {
            return this.delegate.data;
          }
        }, {
          key: "destroy",
          value: function destroy() {
            this.engine.destroy(this.namespaceId, this.delegate);
            this.delegate.destroy();
          }
        }, {
          key: "createElement",
          value: function createElement(name, namespace) {
            return this.delegate.createElement(name, namespace);
          }
        }, {
          key: "createComment",
          value: function createComment(value) {
            return this.delegate.createComment(value);
          }
        }, {
          key: "createText",
          value: function createText(value) {
            return this.delegate.createText(value);
          }
        }, {
          key: "appendChild",
          value: function appendChild(parent, newChild) {
            this.delegate.appendChild(parent, newChild);
            this.engine.onInsert(this.namespaceId, newChild, parent, false);
          }
        }, {
          key: "insertBefore",
          value: function insertBefore(parent, newChild, refChild) {
            var isMove = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
            this.delegate.insertBefore(parent, newChild, refChild); // If `isMove` true than we should animate this insert.

            this.engine.onInsert(this.namespaceId, newChild, parent, isMove);
          }
        }, {
          key: "removeChild",
          value: function removeChild(parent, oldChild, isHostElement) {
            this.engine.onRemove(this.namespaceId, oldChild, this.delegate, isHostElement);
          }
        }, {
          key: "selectRootElement",
          value: function selectRootElement(selectorOrNode, preserveContent) {
            return this.delegate.selectRootElement(selectorOrNode, preserveContent);
          }
        }, {
          key: "parentNode",
          value: function parentNode(node) {
            return this.delegate.parentNode(node);
          }
        }, {
          key: "nextSibling",
          value: function nextSibling(node) {
            return this.delegate.nextSibling(node);
          }
        }, {
          key: "setAttribute",
          value: function setAttribute(el, name, value, namespace) {
            this.delegate.setAttribute(el, name, value, namespace);
          }
        }, {
          key: "removeAttribute",
          value: function removeAttribute(el, name, namespace) {
            this.delegate.removeAttribute(el, name, namespace);
          }
        }, {
          key: "addClass",
          value: function addClass(el, name) {
            this.delegate.addClass(el, name);
          }
        }, {
          key: "removeClass",
          value: function removeClass(el, name) {
            this.delegate.removeClass(el, name);
          }
        }, {
          key: "setStyle",
          value: function setStyle(el, style, value, flags) {
            this.delegate.setStyle(el, style, value, flags);
          }
        }, {
          key: "removeStyle",
          value: function removeStyle(el, style, flags) {
            this.delegate.removeStyle(el, style, flags);
          }
        }, {
          key: "setProperty",
          value: function setProperty(el, name, value) {
            if (name.charAt(0) == ANIMATION_PREFIX && name == DISABLE_ANIMATIONS_FLAG) {
              this.disableAnimations(el, !!value);
            } else {
              this.delegate.setProperty(el, name, value);
            }
          }
        }, {
          key: "setValue",
          value: function setValue(node, value) {
            this.delegate.setValue(node, value);
          }
        }, {
          key: "listen",
          value: function listen(target, eventName, callback) {
            return this.delegate.listen(target, eventName, callback);
          }
        }, {
          key: "disableAnimations",
          value: function disableAnimations(element, value) {
            this.engine.disableAnimations(element, value);
          }
        }]);

        return BaseAnimationRenderer;
      }();

      var AnimationRenderer = /*#__PURE__*/function (_BaseAnimationRendere) {
        _inherits2(AnimationRenderer, _BaseAnimationRendere);

        var _super253 = _createSuper(AnimationRenderer);

        function AnimationRenderer(factory, namespaceId, delegate, engine) {
          var _this601;

          _classCallCheck2(this, AnimationRenderer);

          _this601 = _super253.call(this, namespaceId, delegate, engine);
          _this601.factory = factory;
          _this601.namespaceId = namespaceId;
          return _this601;
        }

        _createClass2(AnimationRenderer, [{
          key: "setProperty",
          value: function setProperty(el, name, value) {
            if (name.charAt(0) == ANIMATION_PREFIX) {
              if (name.charAt(1) == '.' && name == DISABLE_ANIMATIONS_FLAG) {
                value = value === undefined ? true : !!value;
                this.disableAnimations(el, value);
              } else {
                this.engine.process(this.namespaceId, el, name.substr(1), value);
              }
            } else {
              this.delegate.setProperty(el, name, value);
            }
          }
        }, {
          key: "listen",
          value: function listen(target, eventName, callback) {
            var _this602 = this;

            if (eventName.charAt(0) == ANIMATION_PREFIX) {
              var element = resolveElementFromTarget(target);
              var name = eventName.substr(1);
              var phase = ''; // @listener.phase is for trigger animation callbacks
              // @@listener is for animation builder callbacks

              if (name.charAt(0) != ANIMATION_PREFIX) {
                var _parseTriggerCallback = parseTriggerCallbackName(name);

                var _parseTriggerCallback2 = _slicedToArray(_parseTriggerCallback, 2);

                name = _parseTriggerCallback2[0];
                phase = _parseTriggerCallback2[1];
              }

              return this.engine.listen(this.namespaceId, element, name, phase, function (event) {
                var countId = event['_data'] || -1;

                _this602.factory.scheduleListenerCallback(countId, callback, event);
              });
            }

            return this.delegate.listen(target, eventName, callback);
          }
        }]);

        return AnimationRenderer;
      }(BaseAnimationRenderer);

      function resolveElementFromTarget(target) {
        switch (target) {
          case 'body':
            return document.body;

          case 'document':
            return document;

          case 'window':
            return window;

          default:
            return target;
        }
      }

      function parseTriggerCallbackName(triggerName) {
        var dotIndex = triggerName.indexOf('.');
        var trigger = triggerName.substring(0, dotIndex);
        var phase = triggerName.substr(dotIndex + 1);
        return [trigger, phase];
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var InjectableAnimationEngine = /*#__PURE__*/function (_angular_animations_b) {
        _inherits2(InjectableAnimationEngine, _angular_animations_b);

        var _super254 = _createSuper(InjectableAnimationEngine);

        function InjectableAnimationEngine(doc, driver, normalizer) {
          _classCallCheck2(this, InjectableAnimationEngine);

          return _super254.call(this, doc.body, driver, normalizer);
        }

        return InjectableAnimationEngine;
      }(_angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵAnimationEngine"]);

      InjectableAnimationEngine.ɵfac = function InjectableAnimationEngine_Factory(t) {
        return new (t || InjectableAnimationEngine)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["AnimationDriver"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵAnimationStyleNormalizer"]));
      };

      InjectableAnimationEngine.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: InjectableAnimationEngine,
        factory: InjectableAnimationEngine.ɵfac
      });

      InjectableAnimationEngine.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
          }]
        }, {
          type: _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["AnimationDriver"]
        }, {
          type: _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵAnimationStyleNormalizer"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](InjectableAnimationEngine, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
            }]
          }, {
            type: _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["AnimationDriver"]
          }, {
            type: _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵAnimationStyleNormalizer"]
          }];
        }, null);
      })();

      function instantiateSupportedAnimationDriver() {
        return Object(_angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵsupportsWebAnimations"])() ? new _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵWebAnimationsDriver"]() : new _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵCssKeyframesDriver"]();
      }

      function instantiateDefaultStyleNormalizer() {
        return new _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵWebAnimationsStyleNormalizer"]();
      }

      function instantiateRendererFactory(renderer, engine, zone) {
        return new AnimationRendererFactory(renderer, engine, zone);
      }
      /**
       * @publicApi
       */


      var ANIMATION_MODULE_TYPE = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('AnimationModuleType');
      var SHARED_ANIMATION_PROVIDERS = [{
        provide: _angular_animations__WEBPACK_IMPORTED_MODULE_2__["AnimationBuilder"],
        useClass: BrowserAnimationBuilder
      }, {
        provide: _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵAnimationStyleNormalizer"],
        useFactory: instantiateDefaultStyleNormalizer
      }, {
        provide: _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵAnimationEngine"],
        useClass: InjectableAnimationEngine
      }, {
        provide: _angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"],
        useFactory: instantiateRendererFactory,
        deps: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["ɵDomRendererFactory2"], _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵAnimationEngine"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]]
      }];
      /**
       * Separate providers from the actual module so that we can do a local modification in Google3 to
       * include them in the BrowserModule.
       */

      var BROWSER_ANIMATIONS_PROVIDERS = [{
        provide: _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["AnimationDriver"],
        useFactory: instantiateSupportedAnimationDriver
      }, {
        provide: ANIMATION_MODULE_TYPE,
        useValue: 'BrowserAnimations'
      }].concat(SHARED_ANIMATION_PROVIDERS);
      /**
       * Separate providers from the actual module so that we can do a local modification in Google3 to
       * include them in the BrowserTestingModule.
       */

      var BROWSER_NOOP_ANIMATIONS_PROVIDERS = [{
        provide: _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["AnimationDriver"],
        useClass: _angular_animations_browser__WEBPACK_IMPORTED_MODULE_3__["ɵNoopAnimationDriver"]
      }, {
        provide: ANIMATION_MODULE_TYPE,
        useValue: 'NoopAnimations'
      }].concat(SHARED_ANIMATION_PROVIDERS);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Exports `BrowserModule` with additional [dependency-injection providers](guide/glossary#provider)
       * for use with animations. See [Animations](guide/animations).
       * @publicApi
       */

      var BrowserAnimationsModule = function BrowserAnimationsModule() {
        _classCallCheck2(this, BrowserAnimationsModule);
      };

      BrowserAnimationsModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: BrowserAnimationsModule
      });
      BrowserAnimationsModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function BrowserAnimationsModule_Factory(t) {
          return new (t || BrowserAnimationsModule)();
        },
        providers: BROWSER_ANIMATIONS_PROVIDERS,
        imports: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["BrowserModule"]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](BrowserAnimationsModule, {
          exports: function exports() {
            return [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["BrowserModule"]];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BrowserAnimationsModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            exports: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["BrowserModule"]],
            providers: BROWSER_ANIMATIONS_PROVIDERS
          }]
        }], null, null);
      })();
      /**
       * A null player that must be imported to allow disabling of animations.
       * @publicApi
       */


      var NoopAnimationsModule = function NoopAnimationsModule() {
        _classCallCheck2(this, NoopAnimationsModule);
      };

      NoopAnimationsModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NoopAnimationsModule
      });
      NoopAnimationsModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NoopAnimationsModule_Factory(t) {
          return new (t || NoopAnimationsModule)();
        },
        providers: BROWSER_NOOP_ANIMATIONS_PROVIDERS,
        imports: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["BrowserModule"]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NoopAnimationsModule, {
          exports: function exports() {
            return [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["BrowserModule"]];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NoopAnimationsModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            exports: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["BrowserModule"]],
            providers: BROWSER_NOOP_ANIMATIONS_PROVIDERS
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=animations.js.map

      /***/

    },

    /***/
    "RAZl":
    /*!**************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/utils/object.utils.js ***!
      \**************************************************************************/

    /*! exports provided: extendObject */

    /***/
    function RAZl(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "extendObject", function () {
        return extendObject;
      });

      function extendObject(dest) {
        var sources = [];

        for (var _i = 1; _i < arguments.length; _i++) {
          sources[_i - 1] = arguments[_i];
        }

        if (dest == null) {
          throw TypeError('Cannot convert undefined or null to object');
        }

        for (var _a = 0, sources_1 = sources; _a < sources_1.length; _a++) {
          var source = sources_1[_a];

          if (source != null) {
            for (var key in source) {
              if (source.hasOwnProperty(key)) {
                dest[key] = source[key];
              }
            }
          }
        }

        return dest;
      }
      /***/

    },

    /***/
    "RAwQ":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/lb.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function RAwQ(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Luxembourgish [lb]
      //! author : mweimerskirch : https://github.com/mweimerskirch
      //! author : David Raison : https://github.com/kwisatz
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        function processRelativeTime(number, withoutSuffix, key, isFuture) {
          var format = {
            m: ['eng Minutt', 'enger Minutt'],
            h: ['eng Stonn', 'enger Stonn'],
            d: ['een Dag', 'engem Dag'],
            M: ['ee Mount', 'engem Mount'],
            y: ['ee Joer', 'engem Joer']
          };
          return withoutSuffix ? format[key][0] : format[key][1];
        }

        function processFutureTime(string) {
          var number = string.substr(0, string.indexOf(' '));

          if (eifelerRegelAppliesToNumber(number)) {
            return 'a ' + string;
          }

          return 'an ' + string;
        }

        function processPastTime(string) {
          var number = string.substr(0, string.indexOf(' '));

          if (eifelerRegelAppliesToNumber(number)) {
            return 'viru ' + string;
          }

          return 'virun ' + string;
        }
        /**
         * Returns true if the word before the given number loses the '-n' ending.
         * e.g. 'an 10 Deeg' but 'a 5 Deeg'
         *
         * @param number {integer}
         * @returns {boolean}
         */


        function eifelerRegelAppliesToNumber(number) {
          number = parseInt(number, 10);

          if (isNaN(number)) {
            return false;
          }

          if (number < 0) {
            // Negative Number --> always true
            return true;
          } else if (number < 10) {
            // Only 1 digit
            if (4 <= number && number <= 7) {
              return true;
            }

            return false;
          } else if (number < 100) {
            // 2 digits
            var lastDigit = number % 10,
                firstDigit = number / 10;

            if (lastDigit === 0) {
              return eifelerRegelAppliesToNumber(firstDigit);
            }

            return eifelerRegelAppliesToNumber(lastDigit);
          } else if (number < 10000) {
            // 3 or 4 digits --> recursively check first digit
            while (number >= 10) {
              number = number / 10;
            }

            return eifelerRegelAppliesToNumber(number);
          } else {
            // Anything larger than 4 digits: recursively check first n-3 digits
            number = number / 1000;
            return eifelerRegelAppliesToNumber(number);
          }
        }

        var lb = moment.defineLocale('lb', {
          months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
          monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
          monthsParseExact: true,
          weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),
          weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),
          weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'H:mm [Auer]',
            LTS: 'H:mm:ss [Auer]',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm [Auer]',
            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'
          },
          calendar: {
            sameDay: '[Haut um] LT',
            sameElse: 'L',
            nextDay: '[Muer um] LT',
            nextWeek: 'dddd [um] LT',
            lastDay: '[Gëschter um] LT',
            lastWeek: function lastWeek() {
              // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
              switch (this.day()) {
                case 2:
                case 4:
                  return '[Leschten] dddd [um] LT';

                default:
                  return '[Leschte] dddd [um] LT';
              }
            }
          },
          relativeTime: {
            future: processFutureTime,
            past: processPastTime,
            s: 'e puer Sekonnen',
            ss: '%d Sekonnen',
            m: processRelativeTime,
            mm: '%d Minutten',
            h: processRelativeTime,
            hh: '%d Stonnen',
            d: processRelativeTime,
            dd: '%d Deeg',
            M: processRelativeTime,
            MM: '%d Méint',
            y: processRelativeTime,
            yy: '%d Joer'
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return lb;
      });
      /***/

    },

    /***/
    "RUbi":
    /*!************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/scheduler/AsapScheduler.js ***!
      \************************************************************************/

    /*! exports provided: AsapScheduler */

    /***/
    function RUbi(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AsapScheduler", function () {
        return AsapScheduler;
      });
      /* harmony import */


      var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./AsyncScheduler */
      "IjjT");

      var AsapScheduler = /*#__PURE__*/function (_AsyncScheduler__WEBP2) {
        _inherits2(AsapScheduler, _AsyncScheduler__WEBP2);

        var _super255 = _createSuper(AsapScheduler);

        function AsapScheduler() {
          _classCallCheck2(this, AsapScheduler);

          return _super255.apply(this, arguments);
        }

        _createClass2(AsapScheduler, [{
          key: "flush",
          value: function flush(action) {
            this.active = true;
            this.scheduled = undefined;
            var actions = this.actions;
            var error;
            var index = -1;
            var count = actions.length;
            action = action || actions.shift();

            do {
              if (error = action.execute(action.state, action.delay)) {
                break;
              }
            } while (++index < count && (action = actions.shift()));

            this.active = false;

            if (error) {
              while (++index < count && (action = actions.shift())) {
                action.unsubscribe();
              }

              throw error;
            }
          }
        }]);

        return AsapScheduler;
      }(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_0__["AsyncScheduler"]); //# sourceMappingURL=AsapScheduler.js.map

      /***/

    },

    /***/
    "RhlD":
    /*!*************************************************************!*\
      !*** ./node_modules/rxjs-compat/add/observable/interval.js ***!
      \*************************************************************/

    /*! no static exports found */

    /***/
    function RhlD(module, exports, __webpack_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });

      var rxjs_1 = __webpack_require__(
      /*! rxjs */
      "qCKp");

      rxjs_1.Observable.interval = rxjs_1.interval; //# sourceMappingURL=interval.js.map

      /***/
    },

    /***/
    "S6ln":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/hr.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function S6ln(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Croatian [hr]
      //! author : Bojan Marković : https://github.com/bmarkovic
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        function translate(number, withoutSuffix, key) {
          var result = number + ' ';

          switch (key) {
            case 'ss':
              if (number === 1) {
                result += 'sekunda';
              } else if (number === 2 || number === 3 || number === 4) {
                result += 'sekunde';
              } else {
                result += 'sekundi';
              }

              return result;

            case 'm':
              return withoutSuffix ? 'jedna minuta' : 'jedne minute';

            case 'mm':
              if (number === 1) {
                result += 'minuta';
              } else if (number === 2 || number === 3 || number === 4) {
                result += 'minute';
              } else {
                result += 'minuta';
              }

              return result;

            case 'h':
              return withoutSuffix ? 'jedan sat' : 'jednog sata';

            case 'hh':
              if (number === 1) {
                result += 'sat';
              } else if (number === 2 || number === 3 || number === 4) {
                result += 'sata';
              } else {
                result += 'sati';
              }

              return result;

            case 'dd':
              if (number === 1) {
                result += 'dan';
              } else {
                result += 'dana';
              }

              return result;

            case 'MM':
              if (number === 1) {
                result += 'mjesec';
              } else if (number === 2 || number === 3 || number === 4) {
                result += 'mjeseca';
              } else {
                result += 'mjeseci';
              }

              return result;

            case 'yy':
              if (number === 1) {
                result += 'godina';
              } else if (number === 2 || number === 3 || number === 4) {
                result += 'godine';
              } else {
                result += 'godina';
              }

              return result;
          }
        }

        var hr = moment.defineLocale('hr', {
          months: {
            format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),
            standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')
          },
          monthsShort: 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),
          monthsParseExact: true,
          weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
          weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
          weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'Do MMMM YYYY',
            LLL: 'Do MMMM YYYY H:mm',
            LLLL: 'dddd, Do MMMM YYYY H:mm'
          },
          calendar: {
            sameDay: '[danas u] LT',
            nextDay: '[sutra u] LT',
            nextWeek: function nextWeek() {
              switch (this.day()) {
                case 0:
                  return '[u] [nedjelju] [u] LT';

                case 3:
                  return '[u] [srijedu] [u] LT';

                case 6:
                  return '[u] [subotu] [u] LT';

                case 1:
                case 2:
                case 4:
                case 5:
                  return '[u] dddd [u] LT';
              }
            },
            lastDay: '[jučer u] LT',
            lastWeek: function lastWeek() {
              switch (this.day()) {
                case 0:
                  return '[prošlu] [nedjelju] [u] LT';

                case 3:
                  return '[prošlu] [srijedu] [u] LT';

                case 6:
                  return '[prošle] [subote] [u] LT';

                case 1:
                case 2:
                case 4:
                case 5:
                  return '[prošli] dddd [u] LT';
              }
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: 'za %s',
            past: 'prije %s',
            s: 'par sekundi',
            ss: translate,
            m: translate,
            mm: translate,
            h: translate,
            hh: translate,
            d: 'dan',
            dd: translate,
            M: 'mjesec',
            MM: translate,
            y: 'godinu',
            yy: translate
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return hr;
      });
      /***/

    },

    /***/
    "S6rO":
    /*!***********************************************************************!*\
      !*** ./node_modules/aws-sdk/lib/credentials/temporary_credentials.js ***!
      \***********************************************************************/

    /*! no static exports found */

    /***/
    function S6rO(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ../core */
      "QsWE");

      var STS = __webpack_require__(
      /*! ../../clients/sts */
      "6Yqx");
      /**
       * Represents temporary credentials retrieved from {AWS.STS}. Without any
       * extra parameters, credentials will be fetched from the
       * {AWS.STS.getSessionToken} operation. If an IAM role is provided, the
       * {AWS.STS.assumeRole} operation will be used to fetch credentials for the
       * role instead.
       *
       * @note AWS.TemporaryCredentials is deprecated, but remains available for
       *   backwards compatibility. {AWS.ChainableTemporaryCredentials} is the
       *   preferred class for temporary credentials.
       *
       * To setup temporary credentials, configure a set of master credentials
       * using the standard credentials providers (environment, EC2 instance metadata,
       * or from the filesystem), then set the global credentials to a new
       * temporary credentials object:
       *
       * ```javascript
       * // Note that environment credentials are loaded by default,
       * // the following line is shown for clarity:
       * AWS.config.credentials = new AWS.EnvironmentCredentials('AWS');
       *
       * // Now set temporary credentials seeded from the master credentials
       * AWS.config.credentials = new AWS.TemporaryCredentials();
       *
       * // subsequent requests will now use temporary credentials from AWS STS.
       * new AWS.S3().listBucket(function(err, data) { ... });
       * ```
       *
       * @!attribute masterCredentials
       *   @return [AWS.Credentials] the master (non-temporary) credentials used to
       *     get and refresh temporary credentials from AWS STS.
       * @note (see constructor)
       */


      AWS.TemporaryCredentials = AWS.util.inherit(AWS.Credentials, {
        /**
         * Creates a new temporary credentials object.
         *
         * @note In order to create temporary credentials, you first need to have
         *   "master" credentials configured in {AWS.Config.credentials}. These
         *   master credentials are necessary to retrieve the temporary credentials,
         *   as well as refresh the credentials when they expire.
         * @param params [map] a map of options that are passed to the
         *   {AWS.STS.assumeRole} or {AWS.STS.getSessionToken} operations.
         *   If a `RoleArn` parameter is passed in, credentials will be based on the
         *   IAM role.
         * @param masterCredentials [AWS.Credentials] the master (non-temporary) credentials
         *  used to get and refresh temporary credentials from AWS STS.
         * @example Creating a new credentials object for generic temporary credentials
         *   AWS.config.credentials = new AWS.TemporaryCredentials();
         * @example Creating a new credentials object for an IAM role
         *   AWS.config.credentials = new AWS.TemporaryCredentials({
         *     RoleArn: 'arn:aws:iam::1234567890:role/TemporaryCredentials',
         *   });
         * @see AWS.STS.assumeRole
         * @see AWS.STS.getSessionToken
         */
        constructor: function TemporaryCredentials(params, masterCredentials) {
          AWS.Credentials.call(this);
          this.loadMasterCredentials(masterCredentials);
          this.expired = true;
          this.params = params || {};

          if (this.params.RoleArn) {
            this.params.RoleSessionName = this.params.RoleSessionName || 'temporary-credentials';
          }
        },

        /**
         * Refreshes credentials using {AWS.STS.assumeRole} or
         * {AWS.STS.getSessionToken}, depending on whether an IAM role ARN was passed
         * to the credentials {constructor}.
         *
         * @callback callback function(err)
         *   Called when the STS service responds (or fails). When
         *   this callback is called with no error, it means that the credentials
         *   information has been loaded into the object (as the `accessKeyId`,
         *   `secretAccessKey`, and `sessionToken` properties).
         *   @param err [Error] if an error occurred, this value will be filled
         * @see get
         */
        refresh: function refresh(callback) {
          this.coalesceRefresh(callback || AWS.util.fn.callback);
        },

        /**
         * @api private
         */
        load: function load(callback) {
          var self = this;
          self.createClients();
          self.masterCredentials.get(function () {
            self.service.config.credentials = self.masterCredentials;
            var operation = self.params.RoleArn ? self.service.assumeRole : self.service.getSessionToken;
            operation.call(self.service, function (err, data) {
              if (!err) {
                self.service.credentialsFrom(data, self);
              }

              callback(err);
            });
          });
        },

        /**
         * @api private
         */
        loadMasterCredentials: function loadMasterCredentials(masterCredentials) {
          this.masterCredentials = masterCredentials || AWS.config.credentials;

          while (this.masterCredentials.masterCredentials) {
            this.masterCredentials = this.masterCredentials.masterCredentials;
          }

          if (typeof this.masterCredentials.get !== 'function') {
            this.masterCredentials = new AWS.Credentials(this.masterCredentials);
          }
        },

        /**
         * @api private
         */
        createClients: function createClients() {
          this.service = this.service || new STS({
            params: this.params
          });
        }
      });
      /***/
    },

    /***/
    "SFxW":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/az.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function SFxW(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Azerbaijani [az]
      //! author : topchiyev : https://github.com/topchiyev
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var suffixes = {
          1: '-inci',
          5: '-inci',
          8: '-inci',
          70: '-inci',
          80: '-inci',
          2: '-nci',
          7: '-nci',
          20: '-nci',
          50: '-nci',
          3: '-üncü',
          4: '-üncü',
          100: '-üncü',
          6: '-ncı',
          9: '-uncu',
          10: '-uncu',
          30: '-uncu',
          60: '-ıncı',
          90: '-ıncı'
        };
        var az = moment.defineLocale('az', {
          months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),
          monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
          weekdays: 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),
          weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),
          weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[bugün saat] LT',
            nextDay: '[sabah saat] LT',
            nextWeek: '[gələn həftə] dddd [saat] LT',
            lastDay: '[dünən] LT',
            lastWeek: '[keçən həftə] dddd [saat] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s sonra',
            past: '%s əvvəl',
            s: 'bir neçə saniyə',
            ss: '%d saniyə',
            m: 'bir dəqiqə',
            mm: '%d dəqiqə',
            h: 'bir saat',
            hh: '%d saat',
            d: 'bir gün',
            dd: '%d gün',
            M: 'bir ay',
            MM: '%d ay',
            y: 'bir il',
            yy: '%d il'
          },
          meridiemParse: /gecə|səhər|gündüz|axşam/,
          isPM: function isPM(input) {
            return /^(gündüz|axşam)$/.test(input);
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 4) {
              return 'gecə';
            } else if (hour < 12) {
              return 'səhər';
            } else if (hour < 17) {
              return 'gündüz';
            } else {
              return 'axşam';
            }
          },
          dayOfMonthOrdinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,
          ordinal: function ordinal(number) {
            if (number === 0) {
              // special case for zero
              return number + '-ıncı';
            }

            var a = number % 10,
                b = number % 100 - a,
                c = number >= 100 ? 100 : null;
            return number + (suffixes[a] || suffixes[b] || suffixes[c]);
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return az;
      });
      /***/

    },

    /***/
    "SatO":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/zh-hk.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function SatO(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Chinese (Hong Kong) [zh-hk]
      //! author : Ben : https://github.com/ben-lin
      //! author : Chris Lam : https://github.com/hehachris
      //! author : Konstantin : https://github.com/skfd
      //! author : Anthony : https://github.com/anthonylau
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var zhHk = moment.defineLocale('zh-hk', {
          months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
          monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
          weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
          weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),
          weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY/MM/DD',
            LL: 'YYYY年M月D日',
            LLL: 'YYYY年M月D日 HH:mm',
            LLLL: 'YYYY年M月D日dddd HH:mm',
            l: 'YYYY/M/D',
            ll: 'YYYY年M月D日',
            lll: 'YYYY年M月D日 HH:mm',
            llll: 'YYYY年M月D日dddd HH:mm'
          },
          meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
              return hour;
            } else if (meridiem === '中午') {
              return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === '下午' || meridiem === '晚上') {
              return hour + 12;
            }
          },
          meridiem: function meridiem(hour, minute, isLower) {
            var hm = hour * 100 + minute;

            if (hm < 600) {
              return '凌晨';
            } else if (hm < 900) {
              return '早上';
            } else if (hm < 1200) {
              return '上午';
            } else if (hm === 1200) {
              return '中午';
            } else if (hm < 1800) {
              return '下午';
            } else {
              return '晚上';
            }
          },
          calendar: {
            sameDay: '[今天]LT',
            nextDay: '[明天]LT',
            nextWeek: '[下]ddddLT',
            lastDay: '[昨天]LT',
            lastWeek: '[上]ddddLT',
            sameElse: 'L'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
          ordinal: function ordinal(number, period) {
            switch (period) {
              case 'd':
              case 'D':
              case 'DDD':
                return number + '日';

              case 'M':
                return number + '月';

              case 'w':
              case 'W':
                return number + '週';

              default:
                return number;
            }
          },
          relativeTime: {
            future: '%s後',
            past: '%s前',
            s: '幾秒',
            ss: '%d 秒',
            m: '1 分鐘',
            mm: '%d 分鐘',
            h: '1 小時',
            hh: '%d 小時',
            d: '1 天',
            dd: '%d 天',
            M: '1 個月',
            MM: '%d 個月',
            y: '1 年',
            yy: '%d 年'
          }
        });
        return zhHk;
      });
      /***/

    },

    /***/
    "SeVD":
    /*!*****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/subscribeTo.js ***!
      \*****************************************************************/

    /*! exports provided: subscribeTo */

    /***/
    function SeVD(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "subscribeTo", function () {
        return subscribeTo;
      });
      /* harmony import */


      var _subscribeToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./subscribeToArray */
      "ngJS");
      /* harmony import */


      var _subscribeToPromise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./subscribeToPromise */
      "a7t3");
      /* harmony import */


      var _subscribeToIterable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./subscribeToIterable */
      "pLzU");
      /* harmony import */


      var _subscribeToObservable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./subscribeToObservable */
      "CRDf");
      /* harmony import */


      var _isArrayLike__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ./isArrayLike */
      "I55L");
      /* harmony import */


      var _isPromise__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! ./isPromise */
      "c2HN");
      /* harmony import */


      var _isObject__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! ./isObject */
      "XoHu");
      /* harmony import */


      var _symbol_iterator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! ../symbol/iterator */
      "Lhse");
      /* harmony import */


      var _symbol_observable__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(
      /*! ../symbol/observable */
      "kJWO");

      var subscribeTo = function subscribeTo(result) {
        if (!!result && typeof result[_symbol_observable__WEBPACK_IMPORTED_MODULE_8__["observable"]] === 'function') {
          return Object(_subscribeToObservable__WEBPACK_IMPORTED_MODULE_3__["subscribeToObservable"])(result);
        } else if (Object(_isArrayLike__WEBPACK_IMPORTED_MODULE_4__["isArrayLike"])(result)) {
          return Object(_subscribeToArray__WEBPACK_IMPORTED_MODULE_0__["subscribeToArray"])(result);
        } else if (Object(_isPromise__WEBPACK_IMPORTED_MODULE_5__["isPromise"])(result)) {
          return Object(_subscribeToPromise__WEBPACK_IMPORTED_MODULE_1__["subscribeToPromise"])(result);
        } else if (!!result && typeof result[_symbol_iterator__WEBPACK_IMPORTED_MODULE_7__["iterator"]] === 'function') {
          return Object(_subscribeToIterable__WEBPACK_IMPORTED_MODULE_2__["subscribeToIterable"])(result);
        } else {
          var value = Object(_isObject__WEBPACK_IMPORTED_MODULE_6__["isObject"])(result) ? 'an invalid object' : "'".concat(result, "'");
          var msg = "You provided ".concat(value, " where a stream was expected.") + ' You can provide an Observable, Promise, Array, or Iterable.';
          throw new TypeError(msg);
        }
      }; //# sourceMappingURL=subscribeTo.js.map

      /***/

    },

    /***/
    "Sl41":
    /*!********************************************************!*\
      !*** ./node_modules/aws-sdk/lib/xml/escape-element.js ***!
      \********************************************************/

    /*! no static exports found */

    /***/
    function Sl41(module, exports) {
      /**
       * Escapes characters that can not be in an XML element.
       */
      function escapeElement(value) {
        return value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
      }
      /**
       * @api private
       */


      module.exports = {
        escapeElement: escapeElement
      };
      /***/
    },

    /***/
    "SpAZ":
    /*!**************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/identity.js ***!
      \**************************************************************/

    /*! exports provided: identity */

    /***/
    function SpAZ(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "identity", function () {
        return identity;
      });

      function identity(x) {
        return x;
      } //# sourceMappingURL=identity.js.map

      /***/

    },

    /***/
    "SxV6":
    /*!****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/first.js ***!
      \****************************************************************/

    /*! exports provided: first */

    /***/
    function SxV6(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "first", function () {
        return first;
      });
      /* harmony import */


      var _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../util/EmptyError */
      "sVev");
      /* harmony import */


      var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./filter */
      "pLZG");
      /* harmony import */


      var _take__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./take */
      "IzEk");
      /* harmony import */


      var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./defaultIfEmpty */
      "xbPD");
      /* harmony import */


      var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ./throwIfEmpty */
      "XDbj");
      /* harmony import */


      var _util_identity__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! ../util/identity */
      "SpAZ");

      function first(predicate, defaultValue) {
        var hasDefaultValue = arguments.length >= 2;
        return function (source) {
          return source.pipe(predicate ? Object(_filter__WEBPACK_IMPORTED_MODULE_1__["filter"])(function (v, i) {
            return predicate(v, i, source);
          }) : _util_identity__WEBPACK_IMPORTED_MODULE_5__["identity"], Object(_take__WEBPACK_IMPORTED_MODULE_2__["take"])(1), hasDefaultValue ? Object(_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__["defaultIfEmpty"])(defaultValue) : Object(_throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__["throwIfEmpty"])(function () {
            return new _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__["EmptyError"]();
          }));
        };
      } //# sourceMappingURL=first.js.map

      /***/

    },

    /***/
    "SysZ":
    /*!************************************************!*\
      !*** ./node_modules/aws-sdk/lib/signers/s3.js ***!
      \************************************************/

    /*! no static exports found */

    /***/
    function SysZ(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ../core */
      "QsWE");

      var inherit = AWS.util.inherit;
      /**
       * @api private
       */

      AWS.Signers.S3 = inherit(AWS.Signers.RequestSigner, {
        /**
         * When building the stringToSign, these sub resource params should be
         * part of the canonical resource string with their NON-decoded values
         */
        subResources: {
          'acl': 1,
          'accelerate': 1,
          'analytics': 1,
          'cors': 1,
          'lifecycle': 1,
          'delete': 1,
          'inventory': 1,
          'location': 1,
          'logging': 1,
          'metrics': 1,
          'notification': 1,
          'partNumber': 1,
          'policy': 1,
          'requestPayment': 1,
          'replication': 1,
          'restore': 1,
          'tagging': 1,
          'torrent': 1,
          'uploadId': 1,
          'uploads': 1,
          'versionId': 1,
          'versioning': 1,
          'versions': 1,
          'website': 1
        },
        // when building the stringToSign, these querystring params should be
        // part of the canonical resource string with their NON-encoded values
        responseHeaders: {
          'response-content-type': 1,
          'response-content-language': 1,
          'response-expires': 1,
          'response-cache-control': 1,
          'response-content-disposition': 1,
          'response-content-encoding': 1
        },
        addAuthorization: function addAuthorization(credentials, date) {
          if (!this.request.headers['presigned-expires']) {
            this.request.headers['X-Amz-Date'] = AWS.util.date.rfc822(date);
          }

          if (credentials.sessionToken) {
            // presigned URLs require this header to be lowercased
            this.request.headers['x-amz-security-token'] = credentials.sessionToken;
          }

          var signature = this.sign(credentials.secretAccessKey, this.stringToSign());
          var auth = 'AWS ' + credentials.accessKeyId + ':' + signature;
          this.request.headers['Authorization'] = auth;
        },
        stringToSign: function stringToSign() {
          var r = this.request;
          var parts = [];
          parts.push(r.method);
          parts.push(r.headers['Content-MD5'] || '');
          parts.push(r.headers['Content-Type'] || ''); // This is the "Date" header, but we use X-Amz-Date.
          // The S3 signing mechanism requires us to pass an empty
          // string for this Date header regardless.

          parts.push(r.headers['presigned-expires'] || '');
          var headers = this.canonicalizedAmzHeaders();
          if (headers) parts.push(headers);
          parts.push(this.canonicalizedResource());
          return parts.join('\n');
        },
        canonicalizedAmzHeaders: function canonicalizedAmzHeaders() {
          var amzHeaders = [];
          AWS.util.each(this.request.headers, function (name) {
            if (name.match(/^x-amz-/i)) amzHeaders.push(name);
          });
          amzHeaders.sort(function (a, b) {
            return a.toLowerCase() < b.toLowerCase() ? -1 : 1;
          });
          var parts = [];
          AWS.util.arrayEach.call(this, amzHeaders, function (name) {
            parts.push(name.toLowerCase() + ':' + String(this.request.headers[name]));
          });
          return parts.join('\n');
        },
        canonicalizedResource: function canonicalizedResource() {
          var r = this.request;
          var parts = r.path.split('?');
          var path = parts[0];
          var querystring = parts[1];
          var resource = '';
          if (r.virtualHostedBucket) resource += '/' + r.virtualHostedBucket;
          resource += path;

          if (querystring) {
            // collect a list of sub resources and query params that need to be signed
            var resources = [];
            AWS.util.arrayEach.call(this, querystring.split('&'), function (param) {
              var name = param.split('=')[0];
              var value = param.split('=')[1];

              if (this.subResources[name] || this.responseHeaders[name]) {
                var subresource = {
                  name: name
                };

                if (value !== undefined) {
                  if (this.subResources[name]) {
                    subresource.value = value;
                  } else {
                    subresource.value = decodeURIComponent(value);
                  }
                }

                resources.push(subresource);
              }
            });
            resources.sort(function (a, b) {
              return a.name < b.name ? -1 : 1;
            });

            if (resources.length) {
              querystring = [];
              AWS.util.arrayEach(resources, function (res) {
                if (res.value === undefined) {
                  querystring.push(res.name);
                } else {
                  querystring.push(res.name + '=' + res.value);
                }
              });
              resource += '?' + querystring.join('&');
            }
          }

          return resource;
        },
        sign: function sign(secret, string) {
          return AWS.util.crypto.hmac(secret, string, 'base64', 'sha1');
        }
      });
      /**
       * @api private
       */

      module.exports = AWS.Signers.S3;
      /***/
    },

    /***/
    "T0AB":
    /*!******************************************************!*\
      !*** ./node_modules/aws-sdk/lib/model/collection.js ***!
      \******************************************************/

    /*! no static exports found */

    /***/
    function T0AB(module, exports, __webpack_require__) {
      var memoizedProperty = __webpack_require__(
      /*! ../util */
      "BaN1").memoizedProperty;

      function memoize(name, value, factory, nameTr) {
        memoizedProperty(this, nameTr(name), function () {
          return factory(name, value);
        });
      }

      function Collection(iterable, options, factory, nameTr, callback) {
        nameTr = nameTr || String;
        var self = this;

        for (var id in iterable) {
          if (Object.prototype.hasOwnProperty.call(iterable, id)) {
            memoize.call(self, id, iterable[id], factory, nameTr);
            if (callback) callback(id, iterable[id]);
          }
        }
      }
      /**
       * @api private
       */


      module.exports = Collection;
      /***/
    },

    /***/
    "T0yy":
    /*!*****************************************************!*\
      !*** ./node_modules/aws-sdk/lib/param_validator.js ***!
      \*****************************************************/

    /*! no static exports found */

    /***/
    function T0yy(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ./core */
      "QsWE");
      /**
       * @api private
       */


      AWS.ParamValidator = AWS.util.inherit({
        /**
         * Create a new validator object.
         *
         * @param validation [Boolean|map] whether input parameters should be
         *     validated against the operation description before sending the
         *     request. Pass a map to enable any of the following specific
         *     validation features:
         *
         *     * **min** [Boolean] &mdash; Validates that a value meets the min
         *       constraint. This is enabled by default when paramValidation is set
         *       to `true`.
         *     * **max** [Boolean] &mdash; Validates that a value meets the max
         *       constraint.
         *     * **pattern** [Boolean] &mdash; Validates that a string value matches a
         *       regular expression.
         *     * **enum** [Boolean] &mdash; Validates that a string value matches one
         *       of the allowable enum values.
         */
        constructor: function ParamValidator(validation) {
          if (validation === true || validation === undefined) {
            validation = {
              'min': true
            };
          }

          this.validation = validation;
        },
        validate: function validate(shape, params, context) {
          this.errors = [];
          this.validateMember(shape, params || {}, context || 'params');

          if (this.errors.length > 1) {
            var msg = this.errors.join('\n* ');
            msg = 'There were ' + this.errors.length + ' validation errors:\n* ' + msg;
            throw AWS.util.error(new Error(msg), {
              code: 'MultipleValidationErrors',
              errors: this.errors
            });
          } else if (this.errors.length === 1) {
            throw this.errors[0];
          } else {
            return true;
          }
        },
        fail: function fail(code, message) {
          this.errors.push(AWS.util.error(new Error(message), {
            code: code
          }));
        },
        validateStructure: function validateStructure(shape, params, context) {
          this.validateType(params, context, ['object'], 'structure');
          var paramName;

          for (var i = 0; shape.required && i < shape.required.length; i++) {
            paramName = shape.required[i];
            var value = params[paramName];

            if (value === undefined || value === null) {
              this.fail('MissingRequiredParameter', 'Missing required key \'' + paramName + '\' in ' + context);
            }
          } // validate hash members


          for (paramName in params) {
            if (!Object.prototype.hasOwnProperty.call(params, paramName)) continue;
            var paramValue = params[paramName],
                memberShape = shape.members[paramName];

            if (memberShape !== undefined) {
              var memberContext = [context, paramName].join('.');
              this.validateMember(memberShape, paramValue, memberContext);
            } else if (paramValue !== undefined && paramValue !== null) {
              this.fail('UnexpectedParameter', 'Unexpected key \'' + paramName + '\' found in ' + context);
            }
          }

          return true;
        },
        validateMember: function validateMember(shape, param, context) {
          switch (shape.type) {
            case 'structure':
              return this.validateStructure(shape, param, context);

            case 'list':
              return this.validateList(shape, param, context);

            case 'map':
              return this.validateMap(shape, param, context);

            default:
              return this.validateScalar(shape, param, context);
          }
        },
        validateList: function validateList(shape, params, context) {
          if (this.validateType(params, context, [Array])) {
            this.validateRange(shape, params.length, context, 'list member count'); // validate array members

            for (var i = 0; i < params.length; i++) {
              this.validateMember(shape.member, params[i], context + '[' + i + ']');
            }
          }
        },
        validateMap: function validateMap(shape, params, context) {
          if (this.validateType(params, context, ['object'], 'map')) {
            // Build up a count of map members to validate range traits.
            var mapCount = 0;

            for (var param in params) {
              if (!Object.prototype.hasOwnProperty.call(params, param)) continue; // Validate any map key trait constraints

              this.validateMember(shape.key, param, context + '[key=\'' + param + '\']');
              this.validateMember(shape.value, params[param], context + '[\'' + param + '\']');
              mapCount++;
            }

            this.validateRange(shape, mapCount, context, 'map member count');
          }
        },
        validateScalar: function validateScalar(shape, value, context) {
          switch (shape.type) {
            case null:
            case undefined:
            case 'string':
              return this.validateString(shape, value, context);

            case 'base64':
            case 'binary':
              return this.validatePayload(value, context);

            case 'integer':
            case 'float':
              return this.validateNumber(shape, value, context);

            case 'boolean':
              return this.validateType(value, context, ['boolean']);

            case 'timestamp':
              return this.validateType(value, context, [Date, /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z$/, 'number'], 'Date object, ISO-8601 string, or a UNIX timestamp');

            default:
              return this.fail('UnkownType', 'Unhandled type ' + shape.type + ' for ' + context);
          }
        },
        validateString: function validateString(shape, value, context) {
          var validTypes = ['string'];

          if (shape.isJsonValue) {
            validTypes = validTypes.concat(['number', 'object', 'boolean']);
          }

          if (value !== null && this.validateType(value, context, validTypes)) {
            this.validateEnum(shape, value, context);
            this.validateRange(shape, value.length, context, 'string length');
            this.validatePattern(shape, value, context);
            this.validateUri(shape, value, context);
          }
        },
        validateUri: function validateUri(shape, value, context) {
          if (shape['location'] === 'uri') {
            if (value.length === 0) {
              this.fail('UriParameterError', 'Expected uri parameter to have length >= 1,' + ' but found "' + value + '" for ' + context);
            }
          }
        },
        validatePattern: function validatePattern(shape, value, context) {
          if (this.validation['pattern'] && shape['pattern'] !== undefined) {
            if (!new RegExp(shape['pattern']).test(value)) {
              this.fail('PatternMatchError', 'Provided value "' + value + '" ' + 'does not match regex pattern /' + shape['pattern'] + '/ for ' + context);
            }
          }
        },
        validateRange: function validateRange(shape, value, context, descriptor) {
          if (this.validation['min']) {
            if (shape['min'] !== undefined && value < shape['min']) {
              this.fail('MinRangeError', 'Expected ' + descriptor + ' >= ' + shape['min'] + ', but found ' + value + ' for ' + context);
            }
          }

          if (this.validation['max']) {
            if (shape['max'] !== undefined && value > shape['max']) {
              this.fail('MaxRangeError', 'Expected ' + descriptor + ' <= ' + shape['max'] + ', but found ' + value + ' for ' + context);
            }
          }
        },
        validateEnum: function validateRange(shape, value, context) {
          if (this.validation['enum'] && shape['enum'] !== undefined) {
            // Fail if the string value is not present in the enum list
            if (shape['enum'].indexOf(value) === -1) {
              this.fail('EnumError', 'Found string value of ' + value + ', but ' + 'expected ' + shape['enum'].join('|') + ' for ' + context);
            }
          }
        },
        validateType: function validateType(value, context, acceptedTypes, type) {
          // We will not log an error for null or undefined, but we will return
          // false so that callers know that the expected type was not strictly met.
          if (value === null || value === undefined) return false;
          var foundInvalidType = false;

          for (var i = 0; i < acceptedTypes.length; i++) {
            if (typeof acceptedTypes[i] === 'string') {
              if (typeof value === acceptedTypes[i]) return true;
            } else if (acceptedTypes[i] instanceof RegExp) {
              if ((value || '').toString().match(acceptedTypes[i])) return true;
            } else {
              if (value instanceof acceptedTypes[i]) return true;
              if (AWS.util.isType(value, acceptedTypes[i])) return true;
              if (!type && !foundInvalidType) acceptedTypes = acceptedTypes.slice();
              acceptedTypes[i] = AWS.util.typeName(acceptedTypes[i]);
            }

            foundInvalidType = true;
          }

          var acceptedType = type;

          if (!acceptedType) {
            acceptedType = acceptedTypes.join(', ').replace(/,([^,]+)$/, ', or$1');
          }

          var vowel = acceptedType.match(/^[aeiou]/i) ? 'n' : '';
          this.fail('InvalidParameterType', 'Expected ' + context + ' to be a' + vowel + ' ' + acceptedType);
          return false;
        },
        validateNumber: function validateNumber(shape, value, context) {
          if (value === null || value === undefined) return;

          if (typeof value === 'string') {
            var castedValue = parseFloat(value);
            if (castedValue.toString() === value) value = castedValue;
          }

          if (this.validateType(value, context, ['number'])) {
            this.validateRange(shape, value, context, 'numeric value');
          }
        },
        validatePayload: function validatePayload(value, context) {
          if (value === null || value === undefined) return;
          if (typeof value === 'string') return;
          if (value && typeof value.byteLength === 'number') return; // typed arrays

          if (AWS.util.isNode()) {
            // special check for buffer/stream in Node.js
            var Stream = AWS.util.stream.Stream;
            if (AWS.util.Buffer.isBuffer(value) || value instanceof Stream) return;
          } else {
            if (typeof Blob !== void 0 && value instanceof Blob) return;
          }

          var types = ['Buffer', 'Stream', 'File', 'Blob', 'ArrayBuffer', 'DataView'];

          if (value) {
            for (var i = 0; i < types.length; i++) {
              if (AWS.util.isType(value, types[i])) return;
              if (AWS.util.typeName(value.constructor) === types[i]) return;
            }
          }

          this.fail('InvalidParameterType', 'Expected ' + context + ' to be a ' + 'string, Buffer, Stream, Blob, or typed array object');
        }
      });
      /***/
    },

    /***/
    "T5M2":
    /*!*********************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/date-time.class.js ***!
      \*********************************************************************************/

    /*! exports provided: OwlDateTime */

    /***/
    function T5M2(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OwlDateTime", function () {
        return OwlDateTime;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./adapter/date-time-adapter.class */
      "1rjb");
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");
      /* harmony import */


      var _adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./adapter/date-time-format.class */
      "1FPZ");

      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var __metadata = undefined && undefined.__metadata || function (k, v) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
      };

      var __param = undefined && undefined.__param || function (paramIndex, decorator) {
        return function (target, key) {
          decorator(target, key, paramIndex);
        };
      };

      var nextUniqueId = 0;

      var OwlDateTime = function () {
        function OwlDateTime(dateTimeAdapter, dateTimeFormats) {
          var _this = this;

          this.dateTimeAdapter = dateTimeAdapter;
          this.dateTimeFormats = dateTimeFormats;
          this._showSecondsTimer = false;
          this._hour12Timer = false;
          this.startView = 'month';
          this._stepHour = 1;
          this._stepMinute = 1;
          this._stepSecond = 1;
          this._firstDayOfWeek = 0;
          this._hideOtherMonths = false;

          this.dateTimeChecker = function (dateTime) {
            return !!dateTime && (!_this.dateTimeFilter || _this.dateTimeFilter(dateTime)) && (!_this.minDateTime || _this.dateTimeAdapter.compare(dateTime, _this.minDateTime) >= 0) && (!_this.maxDateTime || _this.dateTimeAdapter.compare(dateTime, _this.maxDateTime) <= 0);
          };

          if (!this.dateTimeAdapter) {
            throw Error("OwlDateTimePicker: No provider found for DateTimeAdapter. You must import one of the following " + "modules at your application root: OwlNativeDateTimeModule, OwlMomentDateTimeModule, or provide a " + "custom implementation.");
          }

          if (!this.dateTimeFormats) {
            throw Error("OwlDateTimePicker: No provider found for OWL_DATE_TIME_FORMATS. You must import one of the following " + "modules at your application root: OwlNativeDateTimeModule, OwlMomentDateTimeModule, or provide a " + "custom implementation.");
          }

          this._id = "owl-dt-picker-" + nextUniqueId++;
        }

        Object.defineProperty(OwlDateTime.prototype, "showSecondsTimer", {
          get: function get() {
            return this._showSecondsTimer;
          },
          set: function set(val) {
            this._showSecondsTimer = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceBooleanProperty"])(val);
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTime.prototype, "hour12Timer", {
          get: function get() {
            return this._hour12Timer;
          },
          set: function set(val) {
            this._hour12Timer = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceBooleanProperty"])(val);
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTime.prototype, "stepHour", {
          get: function get() {
            return this._stepHour;
          },
          set: function set(val) {
            this._stepHour = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceNumberProperty"])(val, 1);
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTime.prototype, "stepMinute", {
          get: function get() {
            return this._stepMinute;
          },
          set: function set(val) {
            this._stepMinute = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceNumberProperty"])(val, 1);
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTime.prototype, "stepSecond", {
          get: function get() {
            return this._stepSecond;
          },
          set: function set(val) {
            this._stepSecond = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceNumberProperty"])(val, 1);
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTime.prototype, "firstDayOfWeek", {
          get: function get() {
            return this._firstDayOfWeek;
          },
          set: function set(value) {
            value = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceNumberProperty"])(value, 0);

            if (value > 6 || value < 0) {
              this._firstDayOfWeek = 0;
            } else {
              this._firstDayOfWeek = value;
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTime.prototype, "hideOtherMonths", {
          get: function get() {
            return this._hideOtherMonths;
          },
          set: function set(val) {
            this._hideOtherMonths = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceBooleanProperty"])(val);
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTime.prototype, "id", {
          get: function get() {
            return this._id;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTime.prototype, "formatString", {
          get: function get() {
            return this.pickerType === 'both' ? this.dateTimeFormats.fullPickerInput : this.pickerType === 'calendar' ? this.dateTimeFormats.datePickerInput : this.dateTimeFormats.timePickerInput;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTime.prototype, "disabled", {
          get: function get() {
            return false;
          },
          enumerable: true,
          configurable: true
        });

        OwlDateTime.prototype.getValidDate = function (obj) {
          return this.dateTimeAdapter.isDateInstance(obj) && this.dateTimeAdapter.isValid(obj) ? obj : null;
        };

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Boolean), __metadata("design:paramtypes", [Boolean])], OwlDateTime.prototype, "showSecondsTimer", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Boolean), __metadata("design:paramtypes", [Boolean])], OwlDateTime.prototype, "hour12Timer", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", String)], OwlDateTime.prototype, "startView", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Number), __metadata("design:paramtypes", [Number])], OwlDateTime.prototype, "stepHour", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Number), __metadata("design:paramtypes", [Number])], OwlDateTime.prototype, "stepMinute", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Number), __metadata("design:paramtypes", [Number])], OwlDateTime.prototype, "stepSecond", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Number), __metadata("design:paramtypes", [Number])], OwlDateTime.prototype, "firstDayOfWeek", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Boolean), __metadata("design:paramtypes", [Boolean])], OwlDateTime.prototype, "hideOtherMonths", null);

        OwlDateTime = __decorate([__param(0, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __param(1, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __param(1, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"])(_adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_3__["OWL_DATE_TIME_FORMATS"])), __metadata("design:paramtypes", [_adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__["DateTimeAdapter"], Object])], OwlDateTime);

        OwlDateTime.ɵfac = function OwlDateTime_Factory(t) {
          return new (t || OwlDateTime)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__["DateTimeAdapter"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_3__["OWL_DATE_TIME_FORMATS"], 8));
        };

        OwlDateTime.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
          type: OwlDateTime,
          inputs: {
            startView: "startView",
            showSecondsTimer: "showSecondsTimer",
            hour12Timer: "hour12Timer",
            stepHour: "stepHour",
            stepMinute: "stepMinute",
            stepSecond: "stepSecond",
            firstDayOfWeek: "firstDayOfWeek",
            hideOtherMonths: "hideOtherMonths"
          }
        });
        return OwlDateTime;
      }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64, 

      /***/

    },

    /***/
    "TGZE":
    /*!******************************************************!*\
      !*** ./node_modules/rxjs/add/observable/interval.js ***!
      \******************************************************/

    /*! no static exports found */

    /***/
    function TGZE(module, exports, __webpack_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });

      __webpack_require__(
      /*! rxjs-compat/add/observable/interval */
      "RhlD"); //# sourceMappingURL=interval.js.map

      /***/

    },

    /***/
    "Tg5H":
    /*!**********************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/date-time.module.js ***!
      \**********************************************************************************/

    /*! exports provided: OwlDateTimeModule */

    /***/
    function Tg5H(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OwlDateTimeModule", function () {
        return OwlDateTimeModule;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/cdk/a11y */
      "u47x");
      /* harmony import */


      var _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/cdk/overlay */
      "rDax");
      /* harmony import */


      var _date_time_picker_trigger_directive__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ./date-time-picker-trigger.directive */
      "bWWN");
      /* harmony import */


      var _date_time_picker_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! ./date-time-picker.component */
      "7hDX");
      /* harmony import */


      var _date_time_picker_container_component__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! ./date-time-picker-container.component */
      "4km1");
      /* harmony import */


      var _date_time_picker_input_directive__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! ./date-time-picker-input.directive */
      "qbD1");
      /* harmony import */


      var _date_time_picker_intl_service__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(
      /*! ./date-time-picker-intl.service */
      "MN5+");
      /* harmony import */


      var _calendar_month_view_component__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(
      /*! ./calendar-month-view.component */
      "L56X");
      /* harmony import */


      var _calendar_body_component__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(
      /*! ./calendar-body.component */
      "jVEe");
      /* harmony import */


      var _calendar_year_view_component__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(
      /*! ./calendar-year-view.component */
      "I810");
      /* harmony import */


      var _calendar_multi_year_view_component__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(
      /*! ./calendar-multi-year-view.component */
      "Gmk6");
      /* harmony import */


      var _timer_box_component__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(
      /*! ./timer-box.component */
      "3ijt");
      /* harmony import */


      var _timer_component__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(
      /*! ./timer.component */
      "341s");
      /* harmony import */


      var _numberedFixLen_pipe__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(
      /*! ./numberedFixLen.pipe */
      "l6fG");
      /* harmony import */


      var _calendar_component__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(
      /*! ./calendar.component */
      "PPXK");
      /* harmony import */


      var _date_time_inline_component__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(
      /*! ./date-time-inline.component */
      "6Yr3");
      /* harmony import */


      var _dialog__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(
      /*! ../dialog */
      "HAEn");

      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var OwlDateTimeModule = function () {
        function OwlDateTimeModule() {}

        OwlDateTimeModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
          type: OwlDateTimeModule
        });
        OwlDateTimeModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
          factory: function OwlDateTimeModule_Factory(t) {
            return new (t || OwlDateTimeModule)();
          },
          providers: [_date_time_picker_intl_service__WEBPACK_IMPORTED_MODULE_8__["OwlDateTimeIntl"], _date_time_picker_component__WEBPACK_IMPORTED_MODULE_5__["OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER"]],
          imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_3__["OverlayModule"], _dialog__WEBPACK_IMPORTED_MODULE_18__["OwlDialogModule"], _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_2__["A11yModule"]]]
        });

        (function () {
          (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](OwlDateTimeModule, {
            declarations: function declarations() {
              return [_date_time_picker_trigger_directive__WEBPACK_IMPORTED_MODULE_4__["OwlDateTimeTriggerDirective"], _date_time_picker_input_directive__WEBPACK_IMPORTED_MODULE_7__["OwlDateTimeInputDirective"], _date_time_picker_component__WEBPACK_IMPORTED_MODULE_5__["OwlDateTimeComponent"], _date_time_picker_container_component__WEBPACK_IMPORTED_MODULE_6__["OwlDateTimeContainerComponent"], _calendar_multi_year_view_component__WEBPACK_IMPORTED_MODULE_12__["OwlMultiYearViewComponent"], _calendar_year_view_component__WEBPACK_IMPORTED_MODULE_11__["OwlYearViewComponent"], _calendar_month_view_component__WEBPACK_IMPORTED_MODULE_9__["OwlMonthViewComponent"], _timer_component__WEBPACK_IMPORTED_MODULE_14__["OwlTimerComponent"], _timer_box_component__WEBPACK_IMPORTED_MODULE_13__["OwlTimerBoxComponent"], _calendar_component__WEBPACK_IMPORTED_MODULE_16__["OwlCalendarComponent"], _calendar_body_component__WEBPACK_IMPORTED_MODULE_10__["OwlCalendarBodyComponent"], _numberedFixLen_pipe__WEBPACK_IMPORTED_MODULE_15__["NumberFixedLenPipe"], _date_time_inline_component__WEBPACK_IMPORTED_MODULE_17__["OwlDateTimeInlineComponent"]];
            },
            imports: function imports() {
              return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_3__["OverlayModule"], _dialog__WEBPACK_IMPORTED_MODULE_18__["OwlDialogModule"], _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_2__["A11yModule"]];
            },
            exports: function exports() {
              return [_calendar_component__WEBPACK_IMPORTED_MODULE_16__["OwlCalendarComponent"], _timer_component__WEBPACK_IMPORTED_MODULE_14__["OwlTimerComponent"], _date_time_picker_trigger_directive__WEBPACK_IMPORTED_MODULE_4__["OwlDateTimeTriggerDirective"], _date_time_picker_input_directive__WEBPACK_IMPORTED_MODULE_7__["OwlDateTimeInputDirective"], _date_time_picker_component__WEBPACK_IMPORTED_MODULE_5__["OwlDateTimeComponent"], _date_time_inline_component__WEBPACK_IMPORTED_MODULE_17__["OwlDateTimeInlineComponent"], _calendar_multi_year_view_component__WEBPACK_IMPORTED_MODULE_12__["OwlMultiYearViewComponent"], _calendar_year_view_component__WEBPACK_IMPORTED_MODULE_11__["OwlYearViewComponent"], _calendar_month_view_component__WEBPACK_IMPORTED_MODULE_9__["OwlMonthViewComponent"]];
            }
          });
        })();

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](OwlDateTimeModule, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
            args: [{
              imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_3__["OverlayModule"], _dialog__WEBPACK_IMPORTED_MODULE_18__["OwlDialogModule"], _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_2__["A11yModule"]],
              exports: [_calendar_component__WEBPACK_IMPORTED_MODULE_16__["OwlCalendarComponent"], _timer_component__WEBPACK_IMPORTED_MODULE_14__["OwlTimerComponent"], _date_time_picker_trigger_directive__WEBPACK_IMPORTED_MODULE_4__["OwlDateTimeTriggerDirective"], _date_time_picker_input_directive__WEBPACK_IMPORTED_MODULE_7__["OwlDateTimeInputDirective"], _date_time_picker_component__WEBPACK_IMPORTED_MODULE_5__["OwlDateTimeComponent"], _date_time_inline_component__WEBPACK_IMPORTED_MODULE_17__["OwlDateTimeInlineComponent"], _calendar_multi_year_view_component__WEBPACK_IMPORTED_MODULE_12__["OwlMultiYearViewComponent"], _calendar_year_view_component__WEBPACK_IMPORTED_MODULE_11__["OwlYearViewComponent"], _calendar_month_view_component__WEBPACK_IMPORTED_MODULE_9__["OwlMonthViewComponent"]],
              declarations: [_date_time_picker_trigger_directive__WEBPACK_IMPORTED_MODULE_4__["OwlDateTimeTriggerDirective"], _date_time_picker_input_directive__WEBPACK_IMPORTED_MODULE_7__["OwlDateTimeInputDirective"], _date_time_picker_component__WEBPACK_IMPORTED_MODULE_5__["OwlDateTimeComponent"], _date_time_picker_container_component__WEBPACK_IMPORTED_MODULE_6__["OwlDateTimeContainerComponent"], _calendar_multi_year_view_component__WEBPACK_IMPORTED_MODULE_12__["OwlMultiYearViewComponent"], _calendar_year_view_component__WEBPACK_IMPORTED_MODULE_11__["OwlYearViewComponent"], _calendar_month_view_component__WEBPACK_IMPORTED_MODULE_9__["OwlMonthViewComponent"], _timer_component__WEBPACK_IMPORTED_MODULE_14__["OwlTimerComponent"], _timer_box_component__WEBPACK_IMPORTED_MODULE_13__["OwlTimerBoxComponent"], _calendar_component__WEBPACK_IMPORTED_MODULE_16__["OwlCalendarComponent"], _calendar_body_component__WEBPACK_IMPORTED_MODULE_10__["OwlCalendarBodyComponent"], _numberedFixLen_pipe__WEBPACK_IMPORTED_MODULE_15__["NumberFixedLenPipe"], _date_time_inline_component__WEBPACK_IMPORTED_MODULE_17__["OwlDateTimeInlineComponent"]],
              providers: [_date_time_picker_intl_service__WEBPACK_IMPORTED_MODULE_8__["OwlDateTimeIntl"], _date_time_picker_component__WEBPACK_IMPORTED_MODULE_5__["OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER"]],
              entryComponents: [_date_time_picker_container_component__WEBPACK_IMPORTED_MODULE_6__["OwlDateTimeContainerComponent"]]
            }]
          }], function () {
            return [];
          }, null);
        })();

        return OwlDateTimeModule;
      }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64, 

      /***/

    },

    /***/
    "TkaK":
    /*!*****************************************************!*\
      !*** ./node_modules/aws-sdk/lib/model/paginator.js ***!
      \*****************************************************/

    /*! no static exports found */

    /***/
    function TkaK(module, exports, __webpack_require__) {
      var property = __webpack_require__(
      /*! ../util */
      "BaN1").property;

      function Paginator(name, paginator) {
        property(this, 'inputToken', paginator.input_token);
        property(this, 'limitKey', paginator.limit_key);
        property(this, 'moreResults', paginator.more_results);
        property(this, 'outputToken', paginator.output_token);
        property(this, 'resultKey', paginator.result_key);
      }
      /**
       * @api private
       */


      module.exports = Paginator;
      /***/
    },

    /***/
    "Tr+X":
    /*!********************************************************************!*\
      !*** ./node_modules/@angular/fire/node_modules/tslib/tslib.es6.js ***!
      \********************************************************************/

    /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __createBinding, __exportStar, __values, __read, __spread, __spreadArrays, __spreadArray, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault, __classPrivateFieldGet, __classPrivateFieldSet */

    /***/
    function TrX(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__extends", function () {
        return __extends;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__assign", function () {
        return _assign;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__rest", function () {
        return __rest;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__decorate", function () {
        return __decorate;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__param", function () {
        return __param;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__metadata", function () {
        return __metadata;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__awaiter", function () {
        return __awaiter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__generator", function () {
        return __generator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__createBinding", function () {
        return __createBinding;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__exportStar", function () {
        return __exportStar;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__values", function () {
        return __values;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__read", function () {
        return __read;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__spread", function () {
        return __spread;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__spreadArrays", function () {
        return __spreadArrays;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__spreadArray", function () {
        return __spreadArray;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__await", function () {
        return __await;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__asyncGenerator", function () {
        return __asyncGenerator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__asyncDelegator", function () {
        return __asyncDelegator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__asyncValues", function () {
        return __asyncValues;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__makeTemplateObject", function () {
        return __makeTemplateObject;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__importStar", function () {
        return __importStar;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__importDefault", function () {
        return __importDefault;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__classPrivateFieldGet", function () {
        return __classPrivateFieldGet;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__classPrivateFieldSet", function () {
        return __classPrivateFieldSet;
      });
      /*! *****************************************************************************
      Copyright (c) Microsoft Corporation.
      
      Permission to use, copy, modify, and/or distribute this software for any
      purpose with or without fee is hereby granted.
      
      THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
      REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
      AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
      INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
      LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
      OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
      PERFORMANCE OF THIS SOFTWARE.
      ***************************************************************************** */

      /* global Reflect, Promise */


      var _extendStatics5 = function extendStatics(d, b) {
        _extendStatics5 = Object.setPrototypeOf || {
          __proto__: []
        } instanceof Array && function (d, b) {
          d.__proto__ = b;
        } || function (d, b) {
          for (var p in b) {
            if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
          }
        };

        return _extendStatics5(d, b);
      };

      function __extends(d, b) {
        if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");

        _extendStatics5(d, b);

        function __() {
          this.constructor = d;
        }

        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
      }

      var _assign = function __assign() {
        _assign = Object.assign || function __assign(t) {
          for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];

            for (var p in s) {
              if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
            }
          }

          return t;
        };

        return _assign.apply(this, arguments);
      };

      function __rest(s, e) {
        var t = {};

        for (var p in s) {
          if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
        }

        if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
        }
        return t;
      }

      function __decorate(decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      }

      function __param(paramIndex, decorator) {
        return function (target, key) {
          decorator(target, key, paramIndex);
        };
      }

      function __metadata(metadataKey, metadataValue) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
      }

      function __awaiter(thisArg, _arguments, P, generator) {
        function adopt(value) {
          return value instanceof P ? value : new P(function (resolve) {
            resolve(value);
          });
        }

        return new (P || (P = Promise))(function (resolve, reject) {
          function fulfilled(value) {
            try {
              step(generator.next(value));
            } catch (e) {
              reject(e);
            }
          }

          function rejected(value) {
            try {
              step(generator["throw"](value));
            } catch (e) {
              reject(e);
            }
          }

          function step(result) {
            result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
          }

          step((generator = generator.apply(thisArg, _arguments || [])).next());
        });
      }

      function __generator(thisArg, body) {
        var _ = {
          label: 0,
          sent: function sent() {
            if (t[0] & 1) throw t[1];
            return t[1];
          },
          trys: [],
          ops: []
        },
            f,
            y,
            t,
            g;
        return g = {
          next: verb(0),
          "throw": verb(1),
          "return": verb(2)
        }, typeof Symbol === "function" && (g[Symbol.iterator] = function () {
          return this;
        }), g;

        function verb(n) {
          return function (v) {
            return step([n, v]);
          };
        }

        function step(op) {
          if (f) throw new TypeError("Generator is already executing.");

          while (_) {
            try {
              if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
              if (y = 0, t) op = [op[0] & 2, t.value];

              switch (op[0]) {
                case 0:
                case 1:
                  t = op;
                  break;

                case 4:
                  _.label++;
                  return {
                    value: op[1],
                    done: false
                  };

                case 5:
                  _.label++;
                  y = op[1];
                  op = [0];
                  continue;

                case 7:
                  op = _.ops.pop();

                  _.trys.pop();

                  continue;

                default:
                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
                    _ = 0;
                    continue;
                  }

                  if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
                    _.label = op[1];
                    break;
                  }

                  if (op[0] === 6 && _.label < t[1]) {
                    _.label = t[1];
                    t = op;
                    break;
                  }

                  if (t && _.label < t[2]) {
                    _.label = t[2];

                    _.ops.push(op);

                    break;
                  }

                  if (t[2]) _.ops.pop();

                  _.trys.pop();

                  continue;
              }

              op = body.call(thisArg, _);
            } catch (e) {
              op = [6, e];
              y = 0;
            } finally {
              f = t = 0;
            }
          }

          if (op[0] & 5) throw op[1];
          return {
            value: op[0] ? op[1] : void 0,
            done: true
          };
        }
      }

      var __createBinding = Object.create ? function (o, m, k, k2) {
        if (k2 === undefined) k2 = k;
        Object.defineProperty(o, k2, {
          enumerable: true,
          get: function get() {
            return m[k];
          }
        });
      } : function (o, m, k, k2) {
        if (k2 === undefined) k2 = k;
        o[k2] = m[k];
      };

      function __exportStar(m, o) {
        for (var p in m) {
          if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);
        }
      }

      function __values(o) {
        var s = typeof Symbol === "function" && Symbol.iterator,
            m = s && o[s],
            i = 0;
        if (m) return m.call(o);
        if (o && typeof o.length === "number") return {
          next: function next() {
            if (o && i >= o.length) o = void 0;
            return {
              value: o && o[i++],
              done: !o
            };
          }
        };
        throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
      }

      function __read(o, n) {
        var m = typeof Symbol === "function" && o[Symbol.iterator];
        if (!m) return o;
        var i = m.call(o),
            r,
            ar = [],
            e;

        try {
          while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
            ar.push(r.value);
          }
        } catch (error) {
          e = {
            error: error
          };
        } finally {
          try {
            if (r && !r.done && (m = i["return"])) m.call(i);
          } finally {
            if (e) throw e.error;
          }
        }

        return ar;
      }
      /** @deprecated */


      function __spread() {
        for (var ar = [], i = 0; i < arguments.length; i++) {
          ar = ar.concat(__read(arguments[i]));
        }

        return ar;
      }
      /** @deprecated */


      function __spreadArrays() {
        for (var s = 0, i = 0, il = arguments.length; i < il; i++) {
          s += arguments[i].length;
        }

        for (var r = Array(s), k = 0, i = 0; i < il; i++) {
          for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {
            r[k] = a[j];
          }
        }

        return r;
      }

      function __spreadArray(to, from) {
        for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) {
          to[j] = from[i];
        }

        return to;
      }

      function __await(v) {
        return this instanceof __await ? (this.v = v, this) : new __await(v);
      }

      function __asyncGenerator(thisArg, _arguments, generator) {
        if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
        var g = generator.apply(thisArg, _arguments || []),
            i,
            q = [];
        return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {
          return this;
        }, i;

        function verb(n) {
          if (g[n]) i[n] = function (v) {
            return new Promise(function (a, b) {
              q.push([n, v, a, b]) > 1 || resume(n, v);
            });
          };
        }

        function resume(n, v) {
          try {
            step(g[n](v));
          } catch (e) {
            settle(q[0][3], e);
          }
        }

        function step(r) {
          r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
        }

        function fulfill(value) {
          resume("next", value);
        }

        function reject(value) {
          resume("throw", value);
        }

        function settle(f, v) {
          if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);
        }
      }

      function __asyncDelegator(o) {
        var i, p;
        return i = {}, verb("next"), verb("throw", function (e) {
          throw e;
        }), verb("return"), i[Symbol.iterator] = function () {
          return this;
        }, i;

        function verb(n, f) {
          i[n] = o[n] ? function (v) {
            return (p = !p) ? {
              value: __await(o[n](v)),
              done: n === "return"
            } : f ? f(v) : v;
          } : f;
        }
      }

      function __asyncValues(o) {
        if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
        var m = o[Symbol.asyncIterator],
            i;
        return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {
          return this;
        }, i);

        function verb(n) {
          i[n] = o[n] && function (v) {
            return new Promise(function (resolve, reject) {
              v = o[n](v), settle(resolve, reject, v.done, v.value);
            });
          };
        }

        function settle(resolve, reject, d, v) {
          Promise.resolve(v).then(function (v) {
            resolve({
              value: v,
              done: d
            });
          }, reject);
        }
      }

      function __makeTemplateObject(cooked, raw) {
        if (Object.defineProperty) {
          Object.defineProperty(cooked, "raw", {
            value: raw
          });
        } else {
          cooked.raw = raw;
        }

        return cooked;
      }

      ;

      var __setModuleDefault = Object.create ? function (o, v) {
        Object.defineProperty(o, "default", {
          enumerable: true,
          value: v
        });
      } : function (o, v) {
        o["default"] = v;
      };

      function __importStar(mod) {
        if (mod && mod.__esModule) return mod;
        var result = {};
        if (mod != null) for (var k in mod) {
          if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
        }

        __setModuleDefault(result, mod);

        return result;
      }

      function __importDefault(mod) {
        return mod && mod.__esModule ? mod : {
          "default": mod
        };
      }

      function __classPrivateFieldGet(receiver, state, kind, f) {
        if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
        if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
        return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
      }

      function __classPrivateFieldSet(receiver, state, value, kind, f) {
        if (kind === "m") throw new TypeError("Private method is not writable");
        if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
        if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
        return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value;
      }
      /***/

    },

    /***/
    "UDhR":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/id.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function UDhR(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Indonesian [id]
      //! author : Mohammad Satrio Utomo : https://github.com/tyok
      //! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var id = moment.defineLocale('id', {
          months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),
          monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),
          weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),
          weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),
          weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),
          longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [pukul] HH.mm',
            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm'
          },
          meridiemParse: /pagi|siang|sore|malam/,
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === 'pagi') {
              return hour;
            } else if (meridiem === 'siang') {
              return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'sore' || meridiem === 'malam') {
              return hour + 12;
            }
          },
          meridiem: function meridiem(hours, minutes, isLower) {
            if (hours < 11) {
              return 'pagi';
            } else if (hours < 15) {
              return 'siang';
            } else if (hours < 19) {
              return 'sore';
            } else {
              return 'malam';
            }
          },
          calendar: {
            sameDay: '[Hari ini pukul] LT',
            nextDay: '[Besok pukul] LT',
            nextWeek: 'dddd [pukul] LT',
            lastDay: '[Kemarin pukul] LT',
            lastWeek: 'dddd [lalu pukul] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'dalam %s',
            past: '%s yang lalu',
            s: 'beberapa detik',
            ss: '%d detik',
            m: 'semenit',
            mm: '%d menit',
            h: 'sejam',
            hh: '%d jam',
            d: 'sehari',
            dd: '%d hari',
            M: 'sebulan',
            MM: '%d bulan',
            y: 'setahun',
            yy: '%d tahun'
          },
          week: {
            dow: 0,
            // Sunday is the first day of the week.
            doy: 6 // The week that contains Jan 6th is the first week of the year.

          }
        });
        return id;
      });
      /***/

    },

    /***/
    "UGaM":
    /*!**************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/publishBehavior.js ***!
      \**************************************************************************/

    /*! exports provided: publishBehavior */

    /***/
    function UGaM(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "publishBehavior", function () {
        return publishBehavior;
      });
      /* harmony import */


      var _BehaviorSubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../BehaviorSubject */
      "2Vo4");
      /* harmony import */


      var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./multicast */
      "oB13");

      function publishBehavior(value) {
        return function (source) {
          return Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(new _BehaviorSubject__WEBPACK_IMPORTED_MODULE_0__["BehaviorSubject"](value))(source);
        };
      } //# sourceMappingURL=publishBehavior.js.map

      /***/

    },

    /***/
    "UHp3":
    /*!*********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/windowTime.js ***!
      \*********************************************************************/

    /*! exports provided: windowTime */

    /***/
    function UHp3(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "windowTime", function () {
        return windowTime;
      });
      /* harmony import */


      var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subject */
      "XNiG");
      /* harmony import */


      var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../scheduler/async */
      "D0XW");
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");
      /* harmony import */


      var _util_isNumeric__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ../util/isNumeric */
      "Y7HM");
      /* harmony import */


      var _util_isScheduler__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ../util/isScheduler */
      "z+Ro");

      function windowTime(windowTimeSpan) {
        var scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
        var windowCreationInterval = null;
        var maxWindowSize = Number.POSITIVE_INFINITY;

        if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_4__["isScheduler"])(arguments[3])) {
          scheduler = arguments[3];
        }

        if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_4__["isScheduler"])(arguments[2])) {
          scheduler = arguments[2];
        } else if (Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_3__["isNumeric"])(arguments[2])) {
          maxWindowSize = Number(arguments[2]);
        }

        if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_4__["isScheduler"])(arguments[1])) {
          scheduler = arguments[1];
        } else if (Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_3__["isNumeric"])(arguments[1])) {
          windowCreationInterval = Number(arguments[1]);
        }

        return function windowTimeOperatorFunction(source) {
          return source.lift(new WindowTimeOperator(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler));
        };
      }

      var WindowTimeOperator = /*#__PURE__*/function () {
        function WindowTimeOperator(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler) {
          _classCallCheck2(this, WindowTimeOperator);

          this.windowTimeSpan = windowTimeSpan;
          this.windowCreationInterval = windowCreationInterval;
          this.maxWindowSize = maxWindowSize;
          this.scheduler = scheduler;
        }

        _createClass2(WindowTimeOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new WindowTimeSubscriber(subscriber, this.windowTimeSpan, this.windowCreationInterval, this.maxWindowSize, this.scheduler));
          }
        }]);

        return WindowTimeOperator;
      }();

      var CountedSubject = /*#__PURE__*/function (_Subject__WEBPACK_IMP4) {
        _inherits2(CountedSubject, _Subject__WEBPACK_IMP4);

        var _super256 = _createSuper(CountedSubject);

        function CountedSubject() {
          var _this603;

          _classCallCheck2(this, CountedSubject);

          _this603 = _super256.apply(this, arguments);
          _this603._numberOfNextedValues = 0;
          return _this603;
        }

        _createClass2(CountedSubject, [{
          key: "next",
          value: function next(value) {
            this._numberOfNextedValues++;

            _get2(_getPrototypeOf2(CountedSubject.prototype), "next", this).call(this, value);
          }
        }, {
          key: "numberOfNextedValues",
          get: function get() {
            return this._numberOfNextedValues;
          }
        }]);

        return CountedSubject;
      }(_Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"]);

      var WindowTimeSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_23) {
        _inherits2(WindowTimeSubscriber, _Subscriber__WEBPACK_23);

        var _super257 = _createSuper(WindowTimeSubscriber);

        function WindowTimeSubscriber(destination, windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler) {
          var _this604;

          _classCallCheck2(this, WindowTimeSubscriber);

          _this604 = _super257.call(this, destination);
          _this604.destination = destination;
          _this604.windowTimeSpan = windowTimeSpan;
          _this604.windowCreationInterval = windowCreationInterval;
          _this604.maxWindowSize = maxWindowSize;
          _this604.scheduler = scheduler;
          _this604.windows = [];

          var window = _this604.openWindow();

          if (windowCreationInterval !== null && windowCreationInterval >= 0) {
            var closeState = {
              subscriber: _assertThisInitialized2(_this604),
              window: window,
              context: null
            };
            var creationState = {
              windowTimeSpan: windowTimeSpan,
              windowCreationInterval: windowCreationInterval,
              subscriber: _assertThisInitialized2(_this604),
              scheduler: scheduler
            };

            _this604.add(scheduler.schedule(dispatchWindowClose, windowTimeSpan, closeState));

            _this604.add(scheduler.schedule(dispatchWindowCreation, windowCreationInterval, creationState));
          } else {
            var timeSpanOnlyState = {
              subscriber: _assertThisInitialized2(_this604),
              window: window,
              windowTimeSpan: windowTimeSpan
            };

            _this604.add(scheduler.schedule(dispatchWindowTimeSpanOnly, windowTimeSpan, timeSpanOnlyState));
          }

          return _this604;
        }

        _createClass2(WindowTimeSubscriber, [{
          key: "_next",
          value: function _next(value) {
            var windows = this.windows;
            var len = windows.length;

            for (var i = 0; i < len; i++) {
              var _window = windows[i];

              if (!_window.closed) {
                _window.next(value);

                if (_window.numberOfNextedValues >= this.maxWindowSize) {
                  this.closeWindow(_window);
                }
              }
            }
          }
        }, {
          key: "_error",
          value: function _error(err) {
            var windows = this.windows;

            while (windows.length > 0) {
              windows.shift().error(err);
            }

            this.destination.error(err);
          }
        }, {
          key: "_complete",
          value: function _complete() {
            var windows = this.windows;

            while (windows.length > 0) {
              var _window2 = windows.shift();

              if (!_window2.closed) {
                _window2.complete();
              }
            }

            this.destination.complete();
          }
        }, {
          key: "openWindow",
          value: function openWindow() {
            var window = new CountedSubject();
            this.windows.push(window);
            var destination = this.destination;
            destination.next(window);
            return window;
          }
        }, {
          key: "closeWindow",
          value: function closeWindow(window) {
            window.complete();
            var windows = this.windows;
            windows.splice(windows.indexOf(window), 1);
          }
        }]);

        return WindowTimeSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_2__["Subscriber"]);

      function dispatchWindowTimeSpanOnly(state) {
        var subscriber = state.subscriber,
            windowTimeSpan = state.windowTimeSpan,
            window = state.window;

        if (window) {
          subscriber.closeWindow(window);
        }

        state.window = subscriber.openWindow();
        this.schedule(state, windowTimeSpan);
      }

      function dispatchWindowCreation(state) {
        var windowTimeSpan = state.windowTimeSpan,
            subscriber = state.subscriber,
            scheduler = state.scheduler,
            windowCreationInterval = state.windowCreationInterval;
        var window = subscriber.openWindow();
        var action = this;
        var context = {
          action: action,
          subscription: null
        };
        var timeSpanState = {
          subscriber: subscriber,
          window: window,
          context: context
        };
        context.subscription = scheduler.schedule(dispatchWindowClose, windowTimeSpan, timeSpanState);
        action.add(context.subscription);
        action.schedule(state, windowCreationInterval);
      }

      function dispatchWindowClose(state) {
        var subscriber = state.subscriber,
            window = state.window,
            context = state.context;

        if (context && context.action && context.subscription) {
          context.action.remove(context.subscription);
        }

        subscriber.closeWindow(window);
      } //# sourceMappingURL=windowTime.js.map

      /***/

    },

    /***/
    "UQFi":
    /*!*************************************************!*\
      !*** ./node_modules/aws-sdk/lib/services/s3.js ***!
      \*************************************************/

    /*! no static exports found */

    /***/
    function UQFi(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ../core */
      "QsWE");

      var v4Credentials = __webpack_require__(
      /*! ../signers/v4_credentials */
      "FGtl");

      var resolveRegionalEndpointsFlag = __webpack_require__(
      /*! ../config_regional_endpoint */
      "ZHa6");

      var s3util = __webpack_require__(
      /*! ./s3util */
      "ze1m");

      var regionUtil = __webpack_require__(
      /*! ../region_config */
      "3uhI"); // Pull in managed upload extension


      __webpack_require__(
      /*! ../s3/managed_upload */
      "sqCk");
      /**
       * @api private
       */


      var operationsWith200StatusCodeError = {
        'completeMultipartUpload': true,
        'copyObject': true,
        'uploadPartCopy': true
      };
      /**
       * @api private
       */

      var regionRedirectErrorCodes = ['AuthorizationHeaderMalformed', // non-head operations on virtual-hosted global bucket endpoints
      'BadRequest', // head operations on virtual-hosted global bucket endpoints
      'PermanentRedirect', // non-head operations on path-style or regional endpoints
      301 // head operations on path-style or regional endpoints
      ];
      AWS.util.update(AWS.S3.prototype, {
        /**
         * @api private
         */
        getSignatureVersion: function getSignatureVersion(request) {
          var defaultApiVersion = this.api.signatureVersion;
          var userDefinedVersion = this._originalConfig ? this._originalConfig.signatureVersion : null;
          var regionDefinedVersion = this.config.signatureVersion;
          var isPresigned = request ? request.isPresigned() : false;
          /*
            1) User defined version specified:
              a) always return user defined version
            2) No user defined version specified:
              a) If not using presigned urls, default to V4
              b) If using presigned urls, default to lowest version the region supports
          */

          if (userDefinedVersion) {
            userDefinedVersion = userDefinedVersion === 'v2' ? 's3' : userDefinedVersion;
            return userDefinedVersion;
          }

          if (isPresigned !== true) {
            defaultApiVersion = 'v4';
          } else if (regionDefinedVersion) {
            defaultApiVersion = regionDefinedVersion;
          }

          return defaultApiVersion;
        },

        /**
         * @api private
         */
        getSigningName: function getSigningName() {
          var _super = AWS.Service.prototype.getSigningName;
          return this._parsedArn && this._parsedArn.service ? this._parsedArn.service : _super.call(this);
        },

        /**
         * @api private
         */
        getSignerClass: function getSignerClass(request) {
          var signatureVersion = this.getSignatureVersion(request);
          return AWS.Signers.RequestSigner.getVersion(signatureVersion);
        },

        /**
         * @api private
         */
        validateService: function validateService() {
          var msg;
          var messages = []; // default to us-east-1 when no region is provided

          if (!this.config.region) this.config.region = 'us-east-1';

          if (!this.config.endpoint && this.config.s3BucketEndpoint) {
            messages.push('An endpoint must be provided when configuring ' + '`s3BucketEndpoint` to true.');
          }

          if (messages.length === 1) {
            msg = messages[0];
          } else if (messages.length > 1) {
            msg = 'Multiple configuration errors:\n' + messages.join('\n');
          }

          if (msg) {
            throw AWS.util.error(new Error(), {
              name: 'InvalidEndpoint',
              message: msg
            });
          }
        },

        /**
         * @api private
         */
        shouldDisableBodySigning: function shouldDisableBodySigning(request) {
          var signerClass = this.getSignerClass();

          if (this.config.s3DisableBodySigning === true && signerClass === AWS.Signers.V4 && request.httpRequest.endpoint.protocol === 'https:') {
            return true;
          }

          return false;
        },

        /**
         * @api private
         */
        setupRequestListeners: function setupRequestListeners(request) {
          var prependListener = true;
          request.addListener('validate', this.validateScheme);
          request.addListener('validate', this.validateBucketName, prependListener);
          request.addListener('validate', this.optInUsEast1RegionalEndpoint, prependListener);
          request.removeListener('validate', AWS.EventListeners.Core.VALIDATE_REGION);
          request.addListener('build', this.addContentType);
          request.addListener('build', this.computeContentMd5);
          request.addListener('build', this.computeSseCustomerKeyMd5);
          request.addListener('build', this.populateURI);
          request.addListener('afterBuild', this.addExpect100Continue);
          request.addListener('extractError', this.extractError);
          request.addListener('extractData', AWS.util.hoistPayloadMember);
          request.addListener('extractData', this.extractData);
          request.addListener('extractData', this.extractErrorFrom200Response);
          request.addListener('beforePresign', this.prepareSignedUrl);

          if (this.shouldDisableBodySigning(request)) {
            request.removeListener('afterBuild', AWS.EventListeners.Core.COMPUTE_SHA256);
            request.addListener('afterBuild', this.disableBodySigning);
          } //deal with ARNs supplied to Bucket


          if (request.operation !== 'createBucket' && s3util.isArnInParam(request, 'Bucket')) {
            // avoid duplicate parsing in the future
            request.service._parsedArn = AWS.util.ARN.parse(request.params.Bucket);
            request.removeListener('validate', this.validateBucketName);
            request.removeListener('build', this.populateURI);

            if (request.service._parsedArn.service === 's3') {
              request.addListener('validate', s3util.validateS3AccessPointArn);
              request.addListener('validate', this.validateArnResourceType);
            } else if (request.service._parsedArn.service === 's3-outposts') {
              request.addListener('validate', s3util.validateOutpostsAccessPointArn);
              request.addListener('validate', s3util.validateOutpostsArn);
            }

            request.addListener('validate', s3util.validateArnRegion);
            request.addListener('validate', s3util.validateArnAccount);
            request.addListener('validate', s3util.validateArnService);
            request.addListener('build', this.populateUriFromAccessPointArn);
            request.addListener('build', s3util.validatePopulateUriFromArn);
            return;
          } //listeners regarding region inference


          request.addListener('validate', this.validateBucketEndpoint);
          request.addListener('validate', this.correctBucketRegionFromCache);
          request.onAsync('extractError', this.requestBucketRegion);

          if (AWS.util.isBrowser()) {
            request.onAsync('retry', this.reqRegionForNetworkingError);
          }
        },

        /**
         * @api private
         */
        validateScheme: function validateScheme(req) {
          var params = req.params,
              scheme = req.httpRequest.endpoint.protocol,
              sensitive = params.SSECustomerKey || params.CopySourceSSECustomerKey;

          if (sensitive && scheme !== 'https:') {
            var msg = 'Cannot send SSE keys over HTTP. Set \'sslEnabled\'' + 'to \'true\' in your configuration';
            throw AWS.util.error(new Error(), {
              code: 'ConfigError',
              message: msg
            });
          }
        },

        /**
         * @api private
         */
        validateBucketEndpoint: function validateBucketEndpoint(req) {
          if (!req.params.Bucket && req.service.config.s3BucketEndpoint) {
            var msg = 'Cannot send requests to root API with `s3BucketEndpoint` set.';
            throw AWS.util.error(new Error(), {
              code: 'ConfigError',
              message: msg
            });
          }
        },

        /**
         * Validate resource-type supplied in S3 ARN
         */
        validateArnResourceType: function validateArnResourceType(req) {
          var resource = req.service._parsedArn.resource;

          if (resource.indexOf('accesspoint:') !== 0 && resource.indexOf('accesspoint/') !== 0) {
            throw AWS.util.error(new Error(), {
              code: 'InvalidARN',
              message: 'ARN resource should begin with \'accesspoint/\''
            });
          }
        },

        /**
         * @api private
         */
        validateBucketName: function validateBucketName(req) {
          var service = req.service;
          var signatureVersion = service.getSignatureVersion(req);
          var bucket = req.params && req.params.Bucket;
          var key = req.params && req.params.Key;
          var slashIndex = bucket && bucket.indexOf('/');

          if (bucket && slashIndex >= 0) {
            if (typeof key === 'string' && slashIndex > 0) {
              req.params = AWS.util.copy(req.params); // Need to include trailing slash to match sigv2 behavior

              var prefix = bucket.substr(slashIndex + 1) || '';
              req.params.Key = prefix + '/' + key;
              req.params.Bucket = bucket.substr(0, slashIndex);
            } else if (signatureVersion === 'v4') {
              var msg = 'Bucket names cannot contain forward slashes. Bucket: ' + bucket;
              throw AWS.util.error(new Error(), {
                code: 'InvalidBucket',
                message: msg
              });
            }
          }
        },

        /**
         * @api private
         */
        isValidAccelerateOperation: function isValidAccelerateOperation(operation) {
          var invalidOperations = ['createBucket', 'deleteBucket', 'listBuckets'];
          return invalidOperations.indexOf(operation) === -1;
        },

        /**
         * When us-east-1 region endpoint configuration is set, in stead of sending request to
         * global endpoint(e.g. 's3.amazonaws.com'), we will send request to
         * 's3.us-east-1.amazonaws.com'.
         * @api private
         */
        optInUsEast1RegionalEndpoint: function optInUsEast1RegionalEndpoint(req) {
          var service = req.service;
          var config = service.config;
          config.s3UsEast1RegionalEndpoint = resolveRegionalEndpointsFlag(service._originalConfig, {
            env: 'AWS_S3_US_EAST_1_REGIONAL_ENDPOINT',
            sharedConfig: 's3_us_east_1_regional_endpoint',
            clientConfig: 's3UsEast1RegionalEndpoint'
          });

          if (!(service._originalConfig || {}).endpoint && req.httpRequest.region === 'us-east-1' && config.s3UsEast1RegionalEndpoint === 'regional' && req.httpRequest.endpoint.hostname.indexOf('s3.amazonaws.com') >= 0) {
            var insertPoint = config.endpoint.indexOf('.amazonaws.com');
            regionalEndpoint = config.endpoint.substring(0, insertPoint) + '.us-east-1' + config.endpoint.substring(insertPoint);
            req.httpRequest.updateEndpoint(regionalEndpoint);
          }
        },

        /**
         * S3 prefers dns-compatible bucket names to be moved from the uri path
         * to the hostname as a sub-domain.  This is not possible, even for dns-compat
         * buckets when using SSL and the bucket name contains a dot ('.').  The
         * ssl wildcard certificate is only 1-level deep.
         *
         * @api private
         */
        populateURI: function populateURI(req) {
          var httpRequest = req.httpRequest;
          var b = req.params.Bucket;
          var service = req.service;
          var endpoint = httpRequest.endpoint;

          if (b) {
            if (!service.pathStyleBucketName(b)) {
              if (service.config.useAccelerateEndpoint && service.isValidAccelerateOperation(req.operation)) {
                if (service.config.useDualstack) {
                  endpoint.hostname = b + '.s3-accelerate.dualstack.amazonaws.com';
                } else {
                  endpoint.hostname = b + '.s3-accelerate.amazonaws.com';
                }
              } else if (!service.config.s3BucketEndpoint) {
                endpoint.hostname = b + '.' + endpoint.hostname;
              }

              var port = endpoint.port;

              if (port !== 80 && port !== 443) {
                endpoint.host = endpoint.hostname + ':' + endpoint.port;
              } else {
                endpoint.host = endpoint.hostname;
              }

              httpRequest.virtualHostedBucket = b; // needed for signing the request

              service.removeVirtualHostedBucketFromPath(req);
            }
          }
        },

        /**
         * Takes the bucket name out of the path if bucket is virtual-hosted
         *
         * @api private
         */
        removeVirtualHostedBucketFromPath: function removeVirtualHostedBucketFromPath(req) {
          var httpRequest = req.httpRequest;
          var bucket = httpRequest.virtualHostedBucket;

          if (bucket && httpRequest.path) {
            if (req.params && req.params.Key) {
              var encodedS3Key = '/' + AWS.util.uriEscapePath(req.params.Key);

              if (httpRequest.path.indexOf(encodedS3Key) === 0 && (httpRequest.path.length === encodedS3Key.length || httpRequest.path[encodedS3Key.length] === '?')) {
                //path only contains key or path contains only key and querystring
                return;
              }
            }

            httpRequest.path = httpRequest.path.replace(new RegExp('/' + bucket), '');

            if (httpRequest.path[0] !== '/') {
              httpRequest.path = '/' + httpRequest.path;
            }
          }
        },

        /**
         * When user supply an access point ARN in the Bucket parameter, we need to
         * populate the URI according to the ARN.
         */
        populateUriFromAccessPointArn: function populateUriFromAccessPointArn(req) {
          var accessPointArn = req.service._parsedArn;
          var isOutpostArn = accessPointArn.service === 's3-outposts';
          var outpostsSuffix = isOutpostArn ? '.' + accessPointArn.outpostId : '';
          var serviceName = isOutpostArn ? 's3-outposts' : 's3-accesspoint';
          var dualStackSuffix = !isOutpostArn && req.service.config.useDualstack ? '.dualstack' : '';
          var endpoint = req.httpRequest.endpoint;
          var dnsSuffix = regionUtil.getEndpointSuffix(accessPointArn.region);
          var useArnRegion = req.service.config.s3UseArnRegion;
          endpoint.hostname = [accessPointArn.accessPoint + '-' + accessPointArn.accountId + outpostsSuffix, serviceName + dualStackSuffix, useArnRegion ? accessPointArn.region : req.service.config.region, dnsSuffix].join('.');
          endpoint.host = endpoint.hostname;
          var encodedArn = AWS.util.uriEscape(req.params.Bucket);
          var path = req.httpRequest.path; //remove the Bucket value from path

          req.httpRequest.path = path.replace(new RegExp('/' + encodedArn), '');

          if (req.httpRequest.path[0] !== '/') {
            req.httpRequest.path = '/' + req.httpRequest.path;
          }

          req.httpRequest.region = accessPointArn.region; //region used to sign
        },

        /**
         * Adds Expect: 100-continue header if payload is greater-or-equal 1MB
         * @api private
         */
        addExpect100Continue: function addExpect100Continue(req) {
          var len = req.httpRequest.headers['Content-Length'];

          if (AWS.util.isNode() && (len >= 1024 * 1024 || req.params.Body instanceof AWS.util.stream.Stream)) {
            req.httpRequest.headers['Expect'] = '100-continue';
          }
        },

        /**
         * Adds a default content type if none is supplied.
         *
         * @api private
         */
        addContentType: function addContentType(req) {
          var httpRequest = req.httpRequest;

          if (httpRequest.method === 'GET' || httpRequest.method === 'HEAD') {
            // Content-Type is not set in GET/HEAD requests
            delete httpRequest.headers['Content-Type'];
            return;
          }

          if (!httpRequest.headers['Content-Type']) {
            // always have a Content-Type
            httpRequest.headers['Content-Type'] = 'application/octet-stream';
          }

          var contentType = httpRequest.headers['Content-Type'];

          if (AWS.util.isBrowser()) {
            if (typeof httpRequest.body === 'string' && !contentType.match(/;\s*charset=/)) {
              var charset = '; charset=UTF-8';
              httpRequest.headers['Content-Type'] += charset;
            } else {
              var replaceFn = function replaceFn(_, prefix, charsetName) {
                return prefix + charsetName.toUpperCase();
              };

              httpRequest.headers['Content-Type'] = contentType.replace(/(;\s*charset=)(.+)$/, replaceFn);
            }
          }
        },

        /**
         * @api private
         */
        computableChecksumOperations: {
          putBucketCors: true,
          putBucketLifecycle: true,
          putBucketLifecycleConfiguration: true,
          putBucketTagging: true,
          deleteObjects: true,
          putBucketReplication: true,
          putObjectLegalHold: true,
          putObjectRetention: true,
          putObjectLockConfiguration: true
        },

        /**
         * Checks whether checksums should be computed for the request.
         * If the request requires checksums to be computed, this will always
         * return true, otherwise it depends on whether {AWS.Config.computeChecksums}
         * is set.
         *
         * @param req [AWS.Request] the request to check against
         * @return [Boolean] whether to compute checksums for a request.
         * @api private
         */
        willComputeChecksums: function willComputeChecksums(req) {
          if (this.computableChecksumOperations[req.operation]) return true;
          if (!this.config.computeChecksums) return false; // TODO: compute checksums for Stream objects

          if (!AWS.util.Buffer.isBuffer(req.httpRequest.body) && typeof req.httpRequest.body !== 'string') {
            return false;
          }

          var rules = req.service.api.operations[req.operation].input.members; // Sha256 signing disabled, and not a presigned url

          if (req.service.shouldDisableBodySigning(req) && !Object.prototype.hasOwnProperty.call(req.httpRequest.headers, 'presigned-expires')) {
            if (rules.ContentMD5 && !req.params.ContentMD5) {
              return true;
            }
          } // V4 signer uses SHA256 signatures so only compute MD5 if it is required


          if (req.service.getSignerClass(req) === AWS.Signers.V4) {
            if (rules.ContentMD5 && !rules.ContentMD5.required) return false;
          }

          if (rules.ContentMD5 && !req.params.ContentMD5) return true;
        },

        /**
         * A listener that computes the Content-MD5 and sets it in the header.
         * @see AWS.S3.willComputeChecksums
         * @api private
         */
        computeContentMd5: function computeContentMd5(req) {
          if (req.service.willComputeChecksums(req)) {
            var md5 = AWS.util.crypto.md5(req.httpRequest.body, 'base64');
            req.httpRequest.headers['Content-MD5'] = md5;
          }
        },

        /**
         * @api private
         */
        computeSseCustomerKeyMd5: function computeSseCustomerKeyMd5(req) {
          var keys = {
            SSECustomerKey: 'x-amz-server-side-encryption-customer-key-MD5',
            CopySourceSSECustomerKey: 'x-amz-copy-source-server-side-encryption-customer-key-MD5'
          };
          AWS.util.each(keys, function (key, header) {
            if (req.params[key]) {
              var value = AWS.util.crypto.md5(req.params[key], 'base64');
              req.httpRequest.headers[header] = value;
            }
          });
        },

        /**
         * Returns true if the bucket name should be left in the URI path for
         * a request to S3.  This function takes into account the current
         * endpoint protocol (e.g. http or https).
         *
         * @api private
         */
        pathStyleBucketName: function pathStyleBucketName(bucketName) {
          // user can force path style requests via the configuration
          if (this.config.s3ForcePathStyle) return true;
          if (this.config.s3BucketEndpoint) return false;

          if (s3util.dnsCompatibleBucketName(bucketName)) {
            return this.config.sslEnabled && bucketName.match(/\./) ? true : false;
          } else {
            return true; // not dns compatible names must always use path style
          }
        },

        /**
         * For COPY operations, some can be error even with status code 200.
         * SDK treats the response as exception when response body indicates
         * an exception or body is empty.
         *
         * @api private
         */
        extractErrorFrom200Response: function extractErrorFrom200Response(resp) {
          if (!operationsWith200StatusCodeError[resp.request.operation]) return;
          var httpResponse = resp.httpResponse;

          if (httpResponse.body && httpResponse.body.toString().match('<Error>')) {
            // Response body with '<Error>...</Error>' indicates an exception.
            // Get S3 client object. In ManagedUpload, this.service refers to
            // S3 client object.
            resp.data = null;
            var service = this.service ? this.service : this;
            service.extractError(resp);
            throw resp.error;
          } else if (!httpResponse.body || !httpResponse.body.toString().match(/<[\w_]/)) {
            // When body is empty or incomplete, S3 might stop the request on detecting client
            // side aborting the request.
            resp.data = null;
            throw AWS.util.error(new Error(), {
              code: 'InternalError',
              message: 'S3 aborted request'
            });
          }
        },

        /**
         * @return [Boolean] whether the error can be retried
         * @api private
         */
        retryableError: function retryableError(error, request) {
          if (operationsWith200StatusCodeError[request.operation] && error.statusCode === 200) {
            return true;
          } else if (request._requestRegionForBucket && request.service.bucketRegionCache[request._requestRegionForBucket]) {
            return false;
          } else if (error && error.code === 'RequestTimeout') {
            return true;
          } else if (error && regionRedirectErrorCodes.indexOf(error.code) != -1 && error.region && error.region != request.httpRequest.region) {
            request.httpRequest.region = error.region;

            if (error.statusCode === 301) {
              request.service.updateReqBucketRegion(request);
            }

            return true;
          } else {
            var _super = AWS.Service.prototype.retryableError;
            return _super.call(this, error, request);
          }
        },

        /**
         * Updates httpRequest with region. If region is not provided, then
         * the httpRequest will be updated based on httpRequest.region
         *
         * @api private
         */
        updateReqBucketRegion: function updateReqBucketRegion(request, region) {
          var httpRequest = request.httpRequest;

          if (typeof region === 'string' && region.length) {
            httpRequest.region = region;
          }

          if (!httpRequest.endpoint.host.match(/s3(?!-accelerate).*\.amazonaws\.com$/)) {
            return;
          }

          var service = request.service;
          var s3Config = service.config;
          var s3BucketEndpoint = s3Config.s3BucketEndpoint;

          if (s3BucketEndpoint) {
            delete s3Config.s3BucketEndpoint;
          }

          var newConfig = AWS.util.copy(s3Config);
          delete newConfig.endpoint;
          newConfig.region = httpRequest.region;
          httpRequest.endpoint = new AWS.S3(newConfig).endpoint;
          service.populateURI(request);
          s3Config.s3BucketEndpoint = s3BucketEndpoint;
          httpRequest.headers.Host = httpRequest.endpoint.host;

          if (request._asm.currentState === 'validate') {
            request.removeListener('build', service.populateURI);
            request.addListener('build', service.removeVirtualHostedBucketFromPath);
          }
        },

        /**
         * Provides a specialized parser for getBucketLocation -- all other
         * operations are parsed by the super class.
         *
         * @api private
         */
        extractData: function extractData(resp) {
          var req = resp.request;

          if (req.operation === 'getBucketLocation') {
            var match = resp.httpResponse.body.toString().match(/>(.+)<\/Location/);
            delete resp.data['_'];

            if (match) {
              resp.data.LocationConstraint = match[1];
            } else {
              resp.data.LocationConstraint = '';
            }
          }

          var bucket = req.params.Bucket || null;

          if (req.operation === 'deleteBucket' && typeof bucket === 'string' && !resp.error) {
            req.service.clearBucketRegionCache(bucket);
          } else {
            var headers = resp.httpResponse.headers || {};
            var region = headers['x-amz-bucket-region'] || null;

            if (!region && req.operation === 'createBucket' && !resp.error) {
              var createBucketConfiguration = req.params.CreateBucketConfiguration;

              if (!createBucketConfiguration) {
                region = 'us-east-1';
              } else if (createBucketConfiguration.LocationConstraint === 'EU') {
                region = 'eu-west-1';
              } else {
                region = createBucketConfiguration.LocationConstraint;
              }
            }

            if (region) {
              if (bucket && region !== req.service.bucketRegionCache[bucket]) {
                req.service.bucketRegionCache[bucket] = region;
              }
            }
          }

          req.service.extractRequestIds(resp);
        },

        /**
         * Extracts an error object from the http response.
         *
         * @api private
         */
        extractError: function extractError(resp) {
          var codes = {
            304: 'NotModified',
            403: 'Forbidden',
            400: 'BadRequest',
            404: 'NotFound'
          };
          var req = resp.request;
          var code = resp.httpResponse.statusCode;
          var body = resp.httpResponse.body || '';
          var headers = resp.httpResponse.headers || {};
          var region = headers['x-amz-bucket-region'] || null;
          var bucket = req.params.Bucket || null;
          var bucketRegionCache = req.service.bucketRegionCache;

          if (region && bucket && region !== bucketRegionCache[bucket]) {
            bucketRegionCache[bucket] = region;
          }

          var cachedRegion;

          if (codes[code] && body.length === 0) {
            if (bucket && !region) {
              cachedRegion = bucketRegionCache[bucket] || null;

              if (cachedRegion !== req.httpRequest.region) {
                region = cachedRegion;
              }
            }

            resp.error = AWS.util.error(new Error(), {
              code: codes[code],
              message: null,
              region: region
            });
          } else {
            var data = new AWS.XML.Parser().parse(body.toString());

            if (data.Region && !region) {
              region = data.Region;

              if (bucket && region !== bucketRegionCache[bucket]) {
                bucketRegionCache[bucket] = region;
              }
            } else if (bucket && !region && !data.Region) {
              cachedRegion = bucketRegionCache[bucket] || null;

              if (cachedRegion !== req.httpRequest.region) {
                region = cachedRegion;
              }
            }

            resp.error = AWS.util.error(new Error(), {
              code: data.Code || code,
              message: data.Message || null,
              region: region
            });
          }

          req.service.extractRequestIds(resp);
        },

        /**
         * If region was not obtained synchronously, then send async request
         * to get bucket region for errors resulting from wrong region.
         *
         * @api private
         */
        requestBucketRegion: function requestBucketRegion(resp, done) {
          var error = resp.error;
          var req = resp.request;
          var bucket = req.params.Bucket || null;

          if (!error || !bucket || error.region || req.operation === 'listObjects' || AWS.util.isNode() && req.operation === 'headBucket' || error.statusCode === 400 && req.operation !== 'headObject' || regionRedirectErrorCodes.indexOf(error.code) === -1) {
            return done();
          }

          var reqOperation = AWS.util.isNode() ? 'headBucket' : 'listObjects';
          var reqParams = {
            Bucket: bucket
          };
          if (reqOperation === 'listObjects') reqParams.MaxKeys = 0;
          var regionReq = req.service[reqOperation](reqParams);
          regionReq._requestRegionForBucket = bucket;
          regionReq.send(function () {
            var region = req.service.bucketRegionCache[bucket] || null;
            error.region = region;
            done();
          });
        },

        /**
        * For browser only. If NetworkingError received, will attempt to obtain
        * the bucket region.
        *
        * @api private
        */
        reqRegionForNetworkingError: function reqRegionForNetworkingError(resp, done) {
          if (!AWS.util.isBrowser()) {
            return done();
          }

          var error = resp.error;
          var request = resp.request;
          var bucket = request.params.Bucket;

          if (!error || error.code !== 'NetworkingError' || !bucket || request.httpRequest.region === 'us-east-1') {
            return done();
          }

          var service = request.service;
          var bucketRegionCache = service.bucketRegionCache;
          var cachedRegion = bucketRegionCache[bucket] || null;

          if (cachedRegion && cachedRegion !== request.httpRequest.region) {
            service.updateReqBucketRegion(request, cachedRegion);
            done();
          } else if (!s3util.dnsCompatibleBucketName(bucket)) {
            service.updateReqBucketRegion(request, 'us-east-1');

            if (bucketRegionCache[bucket] !== 'us-east-1') {
              bucketRegionCache[bucket] = 'us-east-1';
            }

            done();
          } else if (request.httpRequest.virtualHostedBucket) {
            var getRegionReq = service.listObjects({
              Bucket: bucket,
              MaxKeys: 0
            });
            service.updateReqBucketRegion(getRegionReq, 'us-east-1');
            getRegionReq._requestRegionForBucket = bucket;
            getRegionReq.send(function () {
              var region = service.bucketRegionCache[bucket] || null;

              if (region && region !== request.httpRequest.region) {
                service.updateReqBucketRegion(request, region);
              }

              done();
            });
          } else {
            // DNS-compatible path-style
            // (s3ForcePathStyle or bucket name with dot over https)
            // Cannot obtain region information for this case
            done();
          }
        },

        /**
         * Cache for bucket region.
         *
         * @api private
         */
        bucketRegionCache: {},

        /**
         * Clears bucket region cache.
         *
         * @api private
         */
        clearBucketRegionCache: function clearBucketRegionCache(buckets) {
          var bucketRegionCache = this.bucketRegionCache;

          if (!buckets) {
            buckets = Object.keys(bucketRegionCache);
          } else if (typeof buckets === 'string') {
            buckets = [buckets];
          }

          for (var i = 0; i < buckets.length; i++) {
            delete bucketRegionCache[buckets[i]];
          }

          return bucketRegionCache;
        },

        /**
         * Corrects request region if bucket's cached region is different
         *
         * @api private
         */
        correctBucketRegionFromCache: function correctBucketRegionFromCache(req) {
          var bucket = req.params.Bucket || null;

          if (bucket) {
            var service = req.service;
            var requestRegion = req.httpRequest.region;
            var cachedRegion = service.bucketRegionCache[bucket];

            if (cachedRegion && cachedRegion !== requestRegion) {
              service.updateReqBucketRegion(req, cachedRegion);
            }
          }
        },

        /**
         * Extracts S3 specific request ids from the http response.
         *
         * @api private
         */
        extractRequestIds: function extractRequestIds(resp) {
          var extendedRequestId = resp.httpResponse.headers ? resp.httpResponse.headers['x-amz-id-2'] : null;
          var cfId = resp.httpResponse.headers ? resp.httpResponse.headers['x-amz-cf-id'] : null;
          resp.extendedRequestId = extendedRequestId;
          resp.cfId = cfId;

          if (resp.error) {
            resp.error.requestId = resp.requestId || null;
            resp.error.extendedRequestId = extendedRequestId;
            resp.error.cfId = cfId;
          }
        },

        /**
         * Get a pre-signed URL for a given operation name.
         *
         * @note You must ensure that you have static or previously resolved
         *   credentials if you call this method synchronously (with no callback),
         *   otherwise it may not properly sign the request. If you cannot guarantee
         *   this (you are using an asynchronous credential provider, i.e., EC2
         *   IAM roles), you should always call this method with an asynchronous
         *   callback.
         * @note Not all operation parameters are supported when using pre-signed
         *   URLs. Certain parameters, such as `SSECustomerKey`, `ACL`, `Expires`,
         *   `ContentLength`, or `Tagging` must be provided as headers when sending a
         *   request. If you are using pre-signed URLs to upload from a browser and
         *   need to use these fields, see {createPresignedPost}.
         * @note The default signer allows altering the request by adding corresponding
         *   headers to set some parameters (e.g. Range) and these added parameters
         *   won't be signed. You must use signatureVersion v4 to to include these
         *   parameters in the signed portion of the URL and enforce exact matching
         *   between headers and signed params in the URL.
         * @note This operation cannot be used with a promise. See note above regarding
         *   asynchronous credentials and use with a callback.
         * @param operation [String] the name of the operation to call
         * @param params [map] parameters to pass to the operation. See the given
         *   operation for the expected operation parameters. In addition, you can
         *   also pass the "Expires" parameter to inform S3 how long the URL should
         *   work for.
         * @option params Expires [Integer] (900) the number of seconds to expire
         *   the pre-signed URL operation in. Defaults to 15 minutes.
         * @param callback [Function] if a callback is provided, this function will
         *   pass the URL as the second parameter (after the error parameter) to
         *   the callback function.
         * @return [String] if called synchronously (with no callback), returns the
         *   signed URL.
         * @return [null] nothing is returned if a callback is provided.
         * @example Pre-signing a getObject operation (synchronously)
         *   var params = {Bucket: 'bucket', Key: 'key'};
         *   var url = s3.getSignedUrl('getObject', params);
         *   console.log('The URL is', url);
         * @example Pre-signing a putObject (asynchronously)
         *   var params = {Bucket: 'bucket', Key: 'key'};
         *   s3.getSignedUrl('putObject', params, function (err, url) {
         *     console.log('The URL is', url);
         *   });
         * @example Pre-signing a putObject operation with a specific payload
         *   var params = {Bucket: 'bucket', Key: 'key', Body: 'body'};
         *   var url = s3.getSignedUrl('putObject', params);
         *   console.log('The URL is', url);
         * @example Passing in a 1-minute expiry time for a pre-signed URL
         *   var params = {Bucket: 'bucket', Key: 'key', Expires: 60};
         *   var url = s3.getSignedUrl('getObject', params);
         *   console.log('The URL is', url); // expires in 60 seconds
         */
        getSignedUrl: function getSignedUrl(operation, params, callback) {
          params = AWS.util.copy(params || {});
          var expires = params.Expires || 900;

          if (typeof expires !== 'number') {
            throw AWS.util.error(new Error(), {
              code: 'InvalidParameterException',
              message: 'The expiration must be a number, received ' + typeof expires
            });
          }

          delete params.Expires; // we can't validate this

          var request = this.makeRequest(operation, params);

          if (callback) {
            AWS.util.defer(function () {
              request.presign(expires, callback);
            });
          } else {
            return request.presign(expires, callback);
          }
        },

        /**
         * @!method  getSignedUrlPromise()
         *   Returns a 'thenable' promise that will be resolved with a pre-signed URL
         *   for a given operation name.
         *
         *   Two callbacks can be provided to the `then` method on the returned promise.
         *   The first callback will be called if the promise is fulfilled, and the second
         *   callback will be called if the promise is rejected.
         *   @note Not all operation parameters are supported when using pre-signed
         *      URLs. Certain parameters, such as `SSECustomerKey`, `ACL`, `Expires`,
         *      `ContentLength`, or `Tagging` must be provided as headers when sending a
         *      request. If you are using pre-signed URLs to upload from a browser and
         *      need to use these fields, see {createPresignedPost}.
         *   @param operation [String] the name of the operation to call
         *   @param params [map] parameters to pass to the operation. See the given
         *      operation for the expected operation parameters. In addition, you can
         *      also pass the "Expires" parameter to inform S3 how long the URL should
         *      work for.
         *   @option params Expires [Integer] (900) the number of seconds to expire
         *      the pre-signed URL operation in. Defaults to 15 minutes.
         *   @callback fulfilledCallback function(url)
         *     Called if the promise is fulfilled.
         *     @param url [String] the signed url
         *   @callback rejectedCallback function(err)
         *     Called if the promise is rejected.
         *     @param err [Error] if an error occurred, this value will be filled
         *   @return [Promise] A promise that represents the state of the `refresh` call.
         *   @example Pre-signing a getObject operation
         *      var params = {Bucket: 'bucket', Key: 'key'};
         *      var promise = s3.getSignedUrlPromise('getObject', params);
         *      promise.then(function(url) {
         *        console.log('The URL is', url);
         *      }, function(err) { ... });
         *   @example Pre-signing a putObject operation with a specific payload
         *      var params = {Bucket: 'bucket', Key: 'key', Body: 'body'};
         *      var promise = s3.getSignedUrlPromise('putObject', params);
         *      promise.then(function(url) {
         *        console.log('The URL is', url);
         *      }, function(err) { ... });
         *   @example Passing in a 1-minute expiry time for a pre-signed URL
         *      var params = {Bucket: 'bucket', Key: 'key', Expires: 60};
         *      var promise = s3.getSignedUrlPromise('getObject', params);
         *      promise.then(function(url) {
         *        console.log('The URL is', url);
         *      }, function(err) { ... });
         */

        /**
         * Get a pre-signed POST policy to support uploading to S3 directly from an
         * HTML form.
         *
         * @param params [map]
         * @option params Bucket [String]     The bucket to which the post should be
         *                                    uploaded
         * @option params Expires [Integer]   (3600) The number of seconds for which
         *                                    the presigned policy should be valid.
         * @option params Conditions [Array]  An array of conditions that must be met
         *                                    for the presigned policy to allow the
         *                                    upload. This can include required tags,
         *                                    the accepted range for content lengths,
         *                                    etc.
         * @see http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-HTTPPOSTConstructPolicy.html
         * @option params Fields [map]        Fields to include in the form. All
         *                                    values passed in as fields will be
         *                                    signed as exact match conditions.
         * @param callback [Function]
         *
         * @note All fields passed in when creating presigned post data will be signed
         *   as exact match conditions. Any fields that will be interpolated by S3
         *   must be added to the fields hash after signing, and an appropriate
         *   condition for such fields must be explicitly added to the Conditions
         *   array passed to this function before signing.
         *
         * @example Presiging post data with a known key
         *   var params = {
         *     Bucket: 'bucket',
         *     Fields: {
         *       key: 'key'
         *     }
         *   };
         *   s3.createPresignedPost(params, function(err, data) {
         *     if (err) {
         *       console.error('Presigning post data encountered an error', err);
         *     } else {
         *       console.log('The post data is', data);
         *     }
         *   });
         *
         * @example Presigning post data with an interpolated key
         *   var params = {
         *     Bucket: 'bucket',
         *     Conditions: [
         *       ['starts-with', '$key', 'path/to/uploads/']
         *     ]
         *   };
         *   s3.createPresignedPost(params, function(err, data) {
         *     if (err) {
         *       console.error('Presigning post data encountered an error', err);
         *     } else {
         *       data.Fields.key = 'path/to/uploads/${filename}';
         *       console.log('The post data is', data);
         *     }
         *   });
         *
         * @note You must ensure that you have static or previously resolved
         *   credentials if you call this method synchronously (with no callback),
         *   otherwise it may not properly sign the request. If you cannot guarantee
         *   this (you are using an asynchronous credential provider, i.e., EC2
         *   IAM roles), you should always call this method with an asynchronous
         *   callback.
         *
         * @return [map]  If called synchronously (with no callback), returns a hash
         *                with the url to set as the form action and a hash of fields
         *                to include in the form.
         * @return [null] Nothing is returned if a callback is provided.
         *
         * @callback callback function (err, data)
         *  @param err [Error] the error object returned from the policy signer
         *  @param data [map] The data necessary to construct an HTML form
         *  @param data.url [String] The URL to use as the action of the form
         *  @param data.fields [map] A hash of fields that must be included in the
         *                           form for the upload to succeed. This hash will
         *                           include the signed POST policy, your access key
         *                           ID and security token (if present), etc. These
         *                           may be safely included as input elements of type
         *                           'hidden.'
         */
        createPresignedPost: function createPresignedPost(params, callback) {
          if (typeof params === 'function' && callback === undefined) {
            callback = params;
            params = null;
          }

          params = AWS.util.copy(params || {});
          var boundParams = this.config.params || {};
          var bucket = params.Bucket || boundParams.Bucket,
              self = this,
              config = this.config,
              endpoint = AWS.util.copy(this.endpoint);

          if (!config.s3BucketEndpoint) {
            endpoint.pathname = '/' + bucket;
          }

          function finalizePost() {
            return {
              url: AWS.util.urlFormat(endpoint),
              fields: self.preparePostFields(config.credentials, config.region, bucket, params.Fields, params.Conditions, params.Expires)
            };
          }

          if (callback) {
            config.getCredentials(function (err) {
              if (err) {
                callback(err);
              } else {
                try {
                  callback(null, finalizePost());
                } catch (err) {
                  callback(err);
                }
              }
            });
          } else {
            return finalizePost();
          }
        },

        /**
         * @api private
         */
        preparePostFields: function preparePostFields(credentials, region, bucket, fields, conditions, expiresInSeconds) {
          var now = this.getSkewCorrectedDate();

          if (!credentials || !region || !bucket) {
            throw new Error('Unable to create a POST object policy without a bucket,' + ' region, and credentials');
          }

          fields = AWS.util.copy(fields || {});
          conditions = (conditions || []).slice(0);
          expiresInSeconds = expiresInSeconds || 3600;
          var signingDate = AWS.util.date.iso8601(now).replace(/[:\-]|\.\d{3}/g, '');
          var shortDate = signingDate.substr(0, 8);
          var scope = v4Credentials.createScope(shortDate, region, 's3');
          var credential = credentials.accessKeyId + '/' + scope;
          fields['bucket'] = bucket;
          fields['X-Amz-Algorithm'] = 'AWS4-HMAC-SHA256';
          fields['X-Amz-Credential'] = credential;
          fields['X-Amz-Date'] = signingDate;

          if (credentials.sessionToken) {
            fields['X-Amz-Security-Token'] = credentials.sessionToken;
          }

          for (var field in fields) {
            if (fields.hasOwnProperty(field)) {
              var condition = {};
              condition[field] = fields[field];
              conditions.push(condition);
            }
          }

          fields.Policy = this.preparePostPolicy(new Date(now.valueOf() + expiresInSeconds * 1000), conditions);
          fields['X-Amz-Signature'] = AWS.util.crypto.hmac(v4Credentials.getSigningKey(credentials, shortDate, region, 's3', true), fields.Policy, 'hex');
          return fields;
        },

        /**
         * @api private
         */
        preparePostPolicy: function preparePostPolicy(expiration, conditions) {
          return AWS.util.base64.encode(JSON.stringify({
            expiration: AWS.util.date.iso8601(expiration),
            conditions: conditions
          }));
        },

        /**
         * @api private
         */
        prepareSignedUrl: function prepareSignedUrl(request) {
          request.addListener('validate', request.service.noPresignedContentLength);
          request.removeListener('build', request.service.addContentType);

          if (!request.params.Body) {
            // no Content-MD5/SHA-256 if body is not provided
            request.removeListener('build', request.service.computeContentMd5);
          } else {
            request.addListener('afterBuild', AWS.EventListeners.Core.COMPUTE_SHA256);
          }
        },

        /**
         * @api private
         * @param request
         */
        disableBodySigning: function disableBodySigning(request) {
          var headers = request.httpRequest.headers; // Add the header to anything that isn't a presigned url, unless that presigned url had a body defined

          if (!Object.prototype.hasOwnProperty.call(headers, 'presigned-expires')) {
            headers['X-Amz-Content-Sha256'] = 'UNSIGNED-PAYLOAD';
          }
        },

        /**
         * @api private
         */
        noPresignedContentLength: function noPresignedContentLength(request) {
          if (request.params.ContentLength !== undefined) {
            throw AWS.util.error(new Error(), {
              code: 'UnexpectedParameter',
              message: 'ContentLength is not supported in pre-signed URLs.'
            });
          }
        },
        createBucket: function createBucket(params, callback) {
          // When creating a bucket *outside* the classic region, the location
          // constraint must be set for the bucket and it must match the endpoint.
          // This chunk of code will set the location constraint param based
          // on the region (when possible), but it will not override a passed-in
          // location constraint.
          if (typeof params === 'function' || !params) {
            callback = callback || params;
            params = {};
          }

          var hostname = this.endpoint.hostname; // copy params so that appending keys does not unintentioinallly
          // mutate params object argument passed in by user

          var copiedParams = AWS.util.copy(params);

          if (hostname !== this.api.globalEndpoint && !params.CreateBucketConfiguration) {
            copiedParams.CreateBucketConfiguration = {
              LocationConstraint: this.config.region
            };
          }

          return this.makeRequest('createBucket', copiedParams, callback);
        },

        /**
         * @see AWS.S3.ManagedUpload
         * @overload upload(params = {}, [options], [callback])
         *   Uploads an arbitrarily sized buffer, blob, or stream, using intelligent
         *   concurrent handling of parts if the payload is large enough. You can
         *   configure the concurrent queue size by setting `options`. Note that this
         *   is the only operation for which the SDK can retry requests with stream
         *   bodies.
         *
         *   @param (see AWS.S3.putObject)
         *   @option (see AWS.S3.ManagedUpload.constructor)
         *   @return [AWS.S3.ManagedUpload] the managed upload object that can call
         *     `send()` or track progress.
         *   @example Uploading a stream object
         *     var params = {Bucket: 'bucket', Key: 'key', Body: stream};
         *     s3.upload(params, function(err, data) {
         *       console.log(err, data);
         *     });
         *   @example Uploading a stream with concurrency of 1 and partSize of 10mb
         *     var params = {Bucket: 'bucket', Key: 'key', Body: stream};
         *     var options = {partSize: 10 * 1024 * 1024, queueSize: 1};
         *     s3.upload(params, options, function(err, data) {
         *       console.log(err, data);
         *     });
         * @callback callback function(err, data)
         *   @param err [Error] an error or null if no error occurred.
         *   @param data [map] The response data from the successful upload:
         *   @param data.Location [String] the URL of the uploaded object
         *   @param data.ETag [String] the ETag of the uploaded object
         *   @param data.Bucket [String]  the bucket to which the object was uploaded
         *   @param data.Key [String] the key to which the object was uploaded
         */
        upload: function upload(params, options, callback) {
          if (typeof options === 'function' && callback === undefined) {
            callback = options;
            options = null;
          }

          options = options || {};
          options = AWS.util.merge(options || {}, {
            service: this,
            params: params
          });
          var uploader = new AWS.S3.ManagedUpload(options);
          if (typeof callback === 'function') uploader.send(callback);
          return uploader;
        }
      });
      /**
       * @api private
       */

      AWS.S3.addPromisesToClass = function addPromisesToClass(PromiseDependency) {
        this.prototype.getSignedUrlPromise = AWS.util.promisifyMethod('getSignedUrl', PromiseDependency);
      };
      /**
       * @api private
       */


      AWS.S3.deletePromisesFromClass = function deletePromisesFromClass() {
        delete this.prototype.getSignedUrlPromise;
      };

      AWS.util.addPromises(AWS.S3);
      /***/
    },

    /***/
    "USCx":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/ga.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function USCx(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Irish or Irish Gaelic [ga]
      //! author : André Silva : https://github.com/askpt
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var months = ['Eanáir', 'Feabhra', 'Márta', 'Aibreán', 'Bealtaine', 'Meitheamh', 'Iúil', 'Lúnasa', 'Meán Fómhair', 'Deireadh Fómhair', 'Samhain', 'Nollaig'],
            monthsShort = ['Ean', 'Feabh', 'Márt', 'Aib', 'Beal', 'Meith', 'Iúil', 'Lún', 'M.F.', 'D.F.', 'Samh', 'Noll'],
            weekdays = ['Dé Domhnaigh', 'Dé Luain', 'Dé Máirt', 'Dé Céadaoin', 'Déardaoin', 'Dé hAoine', 'Dé Sathairn'],
            weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'],
            weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa'];
        var ga = moment.defineLocale('ga', {
          months: months,
          monthsShort: monthsShort,
          monthsParseExact: true,
          weekdays: weekdays,
          weekdaysShort: weekdaysShort,
          weekdaysMin: weekdaysMin,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[Inniu ag] LT',
            nextDay: '[Amárach ag] LT',
            nextWeek: 'dddd [ag] LT',
            lastDay: '[Inné ag] LT',
            lastWeek: 'dddd [seo caite] [ag] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'i %s',
            past: '%s ó shin',
            s: 'cúpla soicind',
            ss: '%d soicind',
            m: 'nóiméad',
            mm: '%d nóiméad',
            h: 'uair an chloig',
            hh: '%d uair an chloig',
            d: 'lá',
            dd: '%d lá',
            M: 'mí',
            MM: '%d míonna',
            y: 'bliain',
            yy: '%d bliain'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
          ordinal: function ordinal(number) {
            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
            return number + output;
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return ga;
      });
      /***/

    },

    /***/
    "UXbc":
    /*!*********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/mergeMapTo.js ***!
      \*********************************************************************/

    /*! exports provided: mergeMapTo */

    /***/
    function UXbc(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "mergeMapTo", function () {
        return mergeMapTo;
      });
      /* harmony import */


      var _mergeMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./mergeMap */
      "5+tZ");

      function mergeMapTo(innerObservable, resultSelector) {
        var concurrent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Number.POSITIVE_INFINITY;

        if (typeof resultSelector === 'function') {
          return Object(_mergeMap__WEBPACK_IMPORTED_MODULE_0__["mergeMap"])(function () {
            return innerObservable;
          }, resultSelector, concurrent);
        }

        if (typeof resultSelector === 'number') {
          concurrent = resultSelector;
        }

        return Object(_mergeMap__WEBPACK_IMPORTED_MODULE_0__["mergeMap"])(function () {
          return innerObservable;
        }, concurrent);
      } //# sourceMappingURL=mergeMapTo.js.map

      /***/

    },

    /***/
    "UXun":
    /*!**********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/shareReplay.js ***!
      \**********************************************************************/

    /*! exports provided: shareReplay */

    /***/
    function UXun(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "shareReplay", function () {
        return shareReplay;
      });
      /* harmony import */


      var _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../ReplaySubject */
      "jtHE");

      function shareReplay(configOrBufferSize, windowTime, scheduler) {
        var config;

        if (configOrBufferSize && typeof configOrBufferSize === 'object') {
          config = configOrBufferSize;
        } else {
          config = {
            bufferSize: configOrBufferSize,
            windowTime: windowTime,
            refCount: false,
            scheduler: scheduler
          };
        }

        return function (source) {
          return source.lift(shareReplayOperator(config));
        };
      }

      function shareReplayOperator(_ref109) {
        var _ref109$bufferSize = _ref109.bufferSize,
            bufferSize = _ref109$bufferSize === void 0 ? Number.POSITIVE_INFINITY : _ref109$bufferSize,
            _ref109$windowTime = _ref109.windowTime,
            windowTime = _ref109$windowTime === void 0 ? Number.POSITIVE_INFINITY : _ref109$windowTime,
            useRefCount = _ref109.refCount,
            scheduler = _ref109.scheduler;
        var subject;
        var refCount = 0;
        var subscription;
        var hasError = false;
        var isComplete = false;
        return function shareReplayOperation(source) {
          refCount++;
          var innerSub;

          if (!subject || hasError) {
            hasError = false;
            subject = new _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__["ReplaySubject"](bufferSize, windowTime, scheduler);
            innerSub = subject.subscribe(this);
            subscription = source.subscribe({
              next: function next(value) {
                subject.next(value);
              },
              error: function error(err) {
                hasError = true;
                subject.error(err);
              },
              complete: function complete() {
                isComplete = true;
                subscription = undefined;
                subject.complete();
              }
            });
          } else {
            innerSub = subject.subscribe(this);
          }

          this.add(function () {
            refCount--;
            innerSub.unsubscribe();

            if (subscription && !isComplete && useRefCount && refCount === 0) {
              subscription.unsubscribe();
              subscription = undefined;
              subject = undefined;
            }
          });
        };
      } //# sourceMappingURL=shareReplay.js.map

      /***/

    },

    /***/
    "UbJi":
    /*!*******************************************************************************!*\
      !*** ./node_modules/@angular/fire/__ivy_ngcc__/fesm2015/angular-fire-auth.js ***!
      \*******************************************************************************/

    /*! exports provided: AngularFireAuth, AngularFireAuthModule, LANGUAGE_CODE, PERSISTENCE, SETTINGS, TENANT_ID, USE_DEVICE_LANGUAGE, USE_EMULATOR */

    /***/
    function UbJi(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AngularFireAuth", function () {
        return AngularFireAuth;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AngularFireAuthModule", function () {
        return AngularFireAuthModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LANGUAGE_CODE", function () {
        return LANGUAGE_CODE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PERSISTENCE", function () {
        return PERSISTENCE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SETTINGS", function () {
        return SETTINGS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TENANT_ID", function () {
        return TENANT_ID;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "USE_DEVICE_LANGUAGE", function () {
        return USE_DEVICE_LANGUAGE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "USE_EMULATOR", function () {
        return USE_EMULATOR;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var _angular_fire__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/fire */
      "spgP");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");

      var proxyPolyfillCompat = {
        app: null,
        applyActionCode: null,
        checkActionCode: null,
        confirmPasswordReset: null,
        createUserWithEmailAndPassword: null,
        currentUser: null,
        fetchSignInMethodsForEmail: null,
        isSignInWithEmailLink: null,
        getRedirectResult: null,
        languageCode: null,
        settings: null,
        onAuthStateChanged: null,
        onIdTokenChanged: null,
        sendSignInLinkToEmail: null,
        sendPasswordResetEmail: null,
        setPersistence: null,
        signInAndRetrieveDataWithCredential: null,
        signInAnonymously: null,
        signInWithCredential: null,
        signInWithCustomToken: null,
        signInWithEmailAndPassword: null,
        signInWithPhoneNumber: null,
        signInWithEmailLink: null,
        signInWithPopup: null,
        signInWithRedirect: null,
        signOut: null,
        tenantId: null,
        updateCurrentUser: null,
        useDeviceLanguage: null,
        useEmulator: null,
        verifyPasswordResetCode: null
      };
      var USE_EMULATOR = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('angularfire2.auth.use-emulator');
      var SETTINGS = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('angularfire2.auth.settings');
      var TENANT_ID = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('angularfire2.auth.tenant-id');
      var LANGUAGE_CODE = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('angularfire2.auth.langugage-code');
      var USE_DEVICE_LANGUAGE = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('angularfire2.auth.use-device-language');
      var PERSISTENCE = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('angularfire.auth.persistence');

      var AngularFireAuth = function AngularFireAuth(options, nameOrConfig, // tslint:disable-next-line:ban-types
      platformId, zone, _useEmulator, // can't use the tuple here
      _settings, // can't use firebase.auth.AuthSettings here
      tenantId, languageCode, useDeviceLanguage, persistence) {
        _classCallCheck2(this, AngularFireAuth);

        var schedulers = new _angular_fire__WEBPACK_IMPORTED_MODULE_3__["ɵAngularFireSchedulers"](zone);
        var keepUnstableUntilFirst = Object(_angular_fire__WEBPACK_IMPORTED_MODULE_3__["ɵkeepUnstableUntilFirstFactory"])(schedulers);
        var logins = new rxjs__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
        var auth = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["of"])(undefined).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["observeOn"])(schedulers.outsideAngular), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function () {
          return zone.runOutsideAngular(function () {
            return __webpack_require__.e(
            /*! import() | firebase-auth */
            "firebase-auth").then(__webpack_require__.bind(null,
            /*! firebase/auth */
            "6nsN"));
          });
        }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function () {
          return Object(_angular_fire__WEBPACK_IMPORTED_MODULE_3__["ɵfirebaseAppFactory"])(options, zone, nameOrConfig);
        }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (app) {
          return zone.runOutsideAngular(function () {
            var useEmulator = _useEmulator;
            var settings = _settings;
            return Object(_angular_fire__WEBPACK_IMPORTED_MODULE_3__["ɵfetchInstance"])("".concat(app.name, ".auth"), 'AngularFireAuth', app, function () {
              var auth = zone.runOutsideAngular(function () {
                return app.auth();
              });

              if (useEmulator) {
                // Firebase Auth doesn't conform to the useEmulator convention, let's smooth that over
                auth.useEmulator("http://".concat(useEmulator.join(':')));
              }

              if (tenantId) {
                auth.tenantId = tenantId;
              }

              auth.languageCode = languageCode;

              if (useDeviceLanguage) {
                auth.useDeviceLanguage();
              }

              if (settings) {
                for (var _i21 = 0, _Object$entries = Object.entries(settings); _i21 < _Object$entries.length; _i21++) {
                  var _Object$entries$_i = _slicedToArray(_Object$entries[_i21], 2),
                      k = _Object$entries$_i[0],
                      v = _Object$entries$_i[1];

                  auth.settings[k] = v;
                }
              }

              if (persistence) {
                auth.setPersistence(persistence);
              }

              return auth;
            }, [useEmulator, tenantId, languageCode, useDeviceLanguage, settings, persistence]);
          });
        }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["shareReplay"])({
          bufferSize: 1,
          refCount: false
        }));

        if (Object(_angular_common__WEBPACK_IMPORTED_MODULE_4__["isPlatformServer"])(platformId)) {
          this.authState = this.user = this.idToken = this.idTokenResult = this.credential = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["of"])(null);
        } else {
          // HACK, as we're exporting auth.Auth, rather than auth, developers importing firebase.auth
          //       (e.g, `import { auth } from 'firebase/app'`) are getting an undefined auth object unexpectedly
          //       as we're completely lazy. Let's eagerly load the Auth SDK here.
          //       There could potentially be race conditions still... but this greatly decreases the odds while
          //       we reevaluate the API.
          var _ = auth.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["first"])()).subscribe();

          var redirectResult = auth.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (auth) {
            return auth.getRedirectResult().then(function (it) {
              return it;
            }, function () {
              return null;
            });
          }), keepUnstableUntilFirst, Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["shareReplay"])({
            bufferSize: 1,
            refCount: false
          }));

          var fromCallback = function fromCallback(cb) {
            return new rxjs__WEBPACK_IMPORTED_MODULE_1__["Observable"](function (subscriber) {
              return {
                unsubscribe: zone.runOutsideAngular(function () {
                  return cb(subscriber);
                })
              };
            });
          };

          var authStateChanged = auth.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (auth) {
            return fromCallback(auth.onAuthStateChanged.bind(auth));
          }));
          var idTokenChanged = auth.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (auth) {
            return fromCallback(auth.onIdTokenChanged.bind(auth));
          }));
          this.authState = redirectResult.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMapTo"])(authStateChanged), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["subscribeOn"])(schedulers.outsideAngular), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["observeOn"])(schedulers.insideAngular));
          this.user = redirectResult.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMapTo"])(idTokenChanged), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["subscribeOn"])(schedulers.outsideAngular), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["observeOn"])(schedulers.insideAngular));
          this.idToken = this.user.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (user) {
            return user ? Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["from"])(user.getIdToken()) : Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["of"])(null);
          }));
          this.idTokenResult = this.user.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (user) {
            return user ? Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["from"])(user.getIdTokenResult()) : Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["of"])(null);
          }));
          this.credential = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["merge"])(redirectResult, logins, // pipe in null authState to make credential zipable, just a weird devexp if
          // authState and user go null to still have a credential
          this.authState.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(function (it) {
            return !it;
          }))).pipe( // handle the { user: { } } when a user is already logged in, rather have null
          // TODO handle the type corcersion better
          Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (credential) {
            return (credential === null || credential === void 0 ? void 0 : credential.user) ? credential : null;
          }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["subscribeOn"])(schedulers.outsideAngular), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["observeOn"])(schedulers.insideAngular));
        }

        return Object(_angular_fire__WEBPACK_IMPORTED_MODULE_3__["ɵlazySDKProxy"])(this, auth, zone, {
          spy: {
            apply: function apply(name, _, val) {
              // If they call a signIn or createUser function listen into the promise
              // this will give us the user credential, push onto the logins Subject
              // to be consumed in .credential
              if (name.startsWith('signIn') || name.startsWith('createUser')) {
                // TODO fix the types, the trouble is UserCredential has everything optional
                val.then(function (user) {
                  return logins.next(user);
                });
              }
            }
          }
        });
      };

      AngularFireAuth.ɵfac = function AngularFireAuth_Factory(t) {
        return new (t || AngularFireAuth)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_fire__WEBPACK_IMPORTED_MODULE_3__["FIREBASE_OPTIONS"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_fire__WEBPACK_IMPORTED_MODULE_3__["FIREBASE_APP_NAME"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](USE_EMULATOR, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](SETTINGS, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](TENANT_ID, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](LANGUAGE_CODE, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](USE_DEVICE_LANGUAGE, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](PERSISTENCE, 8));
      };
      /** @nocollapse */


      AngularFireAuth.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function AngularFireAuth_Factory() {
          return new AngularFireAuth(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_fire__WEBPACK_IMPORTED_MODULE_3__["FIREBASE_OPTIONS"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_fire__WEBPACK_IMPORTED_MODULE_3__["FIREBASE_APP_NAME"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](USE_EMULATOR, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](SETTINGS, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](TENANT_ID, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](LANGUAGE_CODE, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](USE_DEVICE_LANGUAGE, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](PERSISTENCE, 8));
        },
        token: AngularFireAuth,
        providedIn: "any"
      });
      /** @nocollapse */

      AngularFireAuth.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_fire__WEBPACK_IMPORTED_MODULE_3__["FIREBASE_OPTIONS"]]
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_fire__WEBPACK_IMPORTED_MODULE_3__["FIREBASE_APP_NAME"]]
          }]
        }, {
          type: Object,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [USE_EMULATOR]
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [SETTINGS]
          }]
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [TENANT_ID]
          }]
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [LANGUAGE_CODE]
          }]
        }, {
          type: Boolean,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [USE_DEVICE_LANGUAGE]
          }]
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [PERSISTENCE]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](AngularFireAuth, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'any'
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_fire__WEBPACK_IMPORTED_MODULE_3__["FIREBASE_OPTIONS"]]
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_fire__WEBPACK_IMPORTED_MODULE_3__["FIREBASE_APP_NAME"]]
            }]
          }, {
            type: Object,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [USE_EMULATOR]
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [SETTINGS]
            }]
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [TENANT_ID]
            }]
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [LANGUAGE_CODE]
            }]
          }, {
            type: Boolean,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [USE_DEVICE_LANGUAGE]
            }]
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [PERSISTENCE]
            }]
          }];
        }, null);
      })();

      Object(_angular_fire__WEBPACK_IMPORTED_MODULE_3__["ɵapplyMixins"])(AngularFireAuth, [proxyPolyfillCompat]);

      var AngularFireAuthModule = function AngularFireAuthModule() {
        _classCallCheck2(this, AngularFireAuthModule);
      };

      AngularFireAuthModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: AngularFireAuthModule
      });
      AngularFireAuthModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function AngularFireAuthModule_Factory(t) {
          return new (t || AngularFireAuthModule)();
        },
        providers: [AngularFireAuth]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](AngularFireAuthModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            providers: [AngularFireAuth]
          }]
        }], null, null);
      })();
      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=angular-fire-auth.js.map

      /***/

    },

    /***/
    "UpQW":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/ur.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function UpQW(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Urdu [ur]
      //! author : Sawood Alam : https://github.com/ibnesayeed
      //! author : Zack : https://github.com/ZackVision
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var months = ['جنوری', 'فروری', 'مارچ', 'اپریل', 'مئی', 'جون', 'جولائی', 'اگست', 'ستمبر', 'اکتوبر', 'نومبر', 'دسمبر'],
            days = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ'];
        var ur = moment.defineLocale('ur', {
          months: months,
          monthsShort: months,
          weekdays: days,
          weekdaysShort: days,
          weekdaysMin: days,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd، D MMMM YYYY HH:mm'
          },
          meridiemParse: /صبح|شام/,
          isPM: function isPM(input) {
            return 'شام' === input;
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 12) {
              return 'صبح';
            }

            return 'شام';
          },
          calendar: {
            sameDay: '[آج بوقت] LT',
            nextDay: '[کل بوقت] LT',
            nextWeek: 'dddd [بوقت] LT',
            lastDay: '[گذشتہ روز بوقت] LT',
            lastWeek: '[گذشتہ] dddd [بوقت] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s بعد',
            past: '%s قبل',
            s: 'چند سیکنڈ',
            ss: '%d سیکنڈ',
            m: 'ایک منٹ',
            mm: '%d منٹ',
            h: 'ایک گھنٹہ',
            hh: '%d گھنٹے',
            d: 'ایک دن',
            dd: '%d دن',
            M: 'ایک ماہ',
            MM: '%d ماہ',
            y: 'ایک سال',
            yy: '%d سال'
          },
          preparse: function preparse(string) {
            return string.replace(/،/g, ',');
          },
          postformat: function postformat(string) {
            return string.replace(/,/g, '،');
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return ur;
      });
      /***/

    },

    /***/
    "Ur1D":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/ss.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function Ur1D(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : siSwati [ss]
      //! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var ss = moment.defineLocale('ss', {
          months: "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split('_'),
          monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),
          weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),
          weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),
          weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A'
          },
          calendar: {
            sameDay: '[Namuhla nga] LT',
            nextDay: '[Kusasa nga] LT',
            nextWeek: 'dddd [nga] LT',
            lastDay: '[Itolo nga] LT',
            lastWeek: 'dddd [leliphelile] [nga] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'nga %s',
            past: 'wenteka nga %s',
            s: 'emizuzwana lomcane',
            ss: '%d mzuzwana',
            m: 'umzuzu',
            mm: '%d emizuzu',
            h: 'lihora',
            hh: '%d emahora',
            d: 'lilanga',
            dd: '%d emalanga',
            M: 'inyanga',
            MM: '%d tinyanga',
            y: 'umnyaka',
            yy: '%d iminyaka'
          },
          meridiemParse: /ekuseni|emini|entsambama|ebusuku/,
          meridiem: function meridiem(hours, minutes, isLower) {
            if (hours < 11) {
              return 'ekuseni';
            } else if (hours < 15) {
              return 'emini';
            } else if (hours < 19) {
              return 'entsambama';
            } else {
              return 'ebusuku';
            }
          },
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === 'ekuseni') {
              return hour;
            } else if (meridiem === 'emini') {
              return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {
              if (hour === 0) {
                return 0;
              }

              return hour + 12;
            }
          },
          dayOfMonthOrdinalParse: /\d{1,2}/,
          ordinal: '%d',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return ss;
      });
      /***/

    },

    /***/
    "V20V":
    /*!*******************************************************************!*\
      !*** ./node_modules/aws-sdk/node_modules/uuid/lib/bytesToUuid.js ***!
      \*******************************************************************/

    /*! no static exports found */

    /***/
    function V20V(module, exports) {
      /**
       * Convert array of 16 byte values to UUID string format of the form:
       * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
       */
      var byteToHex = [];

      for (var i = 0; i < 256; ++i) {
        byteToHex[i] = (i + 0x100).toString(16).substr(1);
      }

      function bytesToUuid(buf, offset) {
        var i = offset || 0;
        var bth = byteToHex; // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4

        return [bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]]].join('');
      }

      module.exports = bytesToUuid;
      /***/
    },

    /***/
    "V2x9":
    /*!*******************************************!*\
      !*** ./node_modules/moment/locale/tet.js ***!
      \*******************************************/

    /*! no static exports found */

    /***/
    function V2x9(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Tetun Dili (East Timor) [tet]
      //! author : Joshua Brooks : https://github.com/joshbrooks
      //! author : Onorio De J. Afonso : https://github.com/marobo
      //! author : Sonia Simoes : https://github.com/soniasimoes
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var tet = moment.defineLocale('tet', {
          months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),
          monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
          weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),
          weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),
          weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[Ohin iha] LT',
            nextDay: '[Aban iha] LT',
            nextWeek: 'dddd [iha] LT',
            lastDay: '[Horiseik iha] LT',
            lastWeek: 'dddd [semana kotuk] [iha] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'iha %s',
            past: '%s liuba',
            s: 'segundu balun',
            ss: 'segundu %d',
            m: 'minutu ida',
            mm: 'minutu %d',
            h: 'oras ida',
            hh: 'oras %d',
            d: 'loron ida',
            dd: 'loron %d',
            M: 'fulan ida',
            MM: 'fulan %d',
            y: 'tinan ida',
            yy: 'tinan %d'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
          ordinal: function ordinal(number) {
            var b = number % 10,
                output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';
            return number + output;
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return tet;
      });
      /***/

    },

    /***/
    "VNF9":
    /*!*****************************************************!*\
      !*** ./node_modules/aws-sdk/lib/signers/v3https.js ***!
      \*****************************************************/

    /*! no static exports found */

    /***/
    function VNF9(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ../core */
      "QsWE");

      var inherit = AWS.util.inherit;

      __webpack_require__(
      /*! ./v3 */
      "N2+Z");
      /**
       * @api private
       */


      AWS.Signers.V3Https = inherit(AWS.Signers.V3, {
        authorization: function authorization(credentials) {
          return 'AWS3-HTTPS ' + 'AWSAccessKeyId=' + credentials.accessKeyId + ',' + 'Algorithm=HmacSHA256,' + 'Signature=' + this.signature(credentials);
        },
        stringToSign: function stringToSign() {
          return this.request.headers['X-Amz-Date'];
        }
      });
      /**
       * @api private
       */

      module.exports = AWS.Signers.V3Https;
      /***/
    },

    /***/
    "VRyK":
    /*!*****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/merge.js ***!
      \*****************************************************************/

    /*! exports provided: merge */

    /***/
    function VRyK(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "merge", function () {
        return merge;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _util_isScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/isScheduler */
      "z+Ro");
      /* harmony import */


      var _operators_mergeAll__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../operators/mergeAll */
      "bHdf");
      /* harmony import */


      var _fromArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./fromArray */
      "yCtX");

      function merge() {
        var concurrent = Number.POSITIVE_INFINITY;
        var scheduler = null;

        for (var _len36 = arguments.length, observables = new Array(_len36), _key38 = 0; _key38 < _len36; _key38++) {
          observables[_key38] = arguments[_key38];
        }

        var last = observables[observables.length - 1];

        if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__["isScheduler"])(last)) {
          scheduler = observables.pop();

          if (observables.length > 1 && typeof observables[observables.length - 1] === 'number') {
            concurrent = observables.pop();
          }
        } else if (typeof last === 'number') {
          concurrent = observables.pop();
        }

        if (scheduler === null && observables.length === 1 && observables[0] instanceof _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]) {
          return observables[0];
        }

        return Object(_operators_mergeAll__WEBPACK_IMPORTED_MODULE_2__["mergeAll"])(concurrent)(Object(_fromArray__WEBPACK_IMPORTED_MODULE_3__["fromArray"])(observables, scheduler));
      } //# sourceMappingURL=merge.js.map

      /***/

    },

    /***/
    "VT+K":
    /*!*******************************************************!*\
      !*** ./node_modules/aws-sdk/lib/discover_endpoint.js ***!
      \*******************************************************/

    /*! no static exports found */

    /***/
    function VTK(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ./core */
      "QsWE");

      var util = __webpack_require__(
      /*! ./util */
      "BaN1");

      var endpointDiscoveryEnabledEnvs = ['AWS_ENABLE_ENDPOINT_DISCOVERY', 'AWS_ENDPOINT_DISCOVERY_ENABLED'];
      /**
       * Generate key (except resources and operation part) to index the endpoints in the cache
       * If input shape has endpointdiscoveryid trait then use
       *   accessKey + operation + resources + region + service as cache key
       * If input shape doesn't have endpointdiscoveryid trait then use
       *   accessKey + region + service as cache key
       * @return [map<String,String>] object with keys to index endpoints.
       * @api private
       */

      function getCacheKey(request) {
        var service = request.service;
        var api = service.api || {};
        var operations = api.operations;
        var identifiers = {};

        if (service.config.region) {
          identifiers.region = service.config.region;
        }

        if (api.serviceId) {
          identifiers.serviceId = api.serviceId;
        }

        if (service.config.credentials.accessKeyId) {
          identifiers.accessKeyId = service.config.credentials.accessKeyId;
        }

        return identifiers;
      }
      /**
       * Recursive helper for marshallCustomIdentifiers().
       * Looks for required string input members that have 'endpointdiscoveryid' trait.
       * @api private
       */


      function marshallCustomIdentifiersHelper(result, params, shape) {
        if (!shape || params === undefined || params === null) return;

        if (shape.type === 'structure' && shape.required && shape.required.length > 0) {
          util.arrayEach(shape.required, function (name) {
            var memberShape = shape.members[name];

            if (memberShape.endpointDiscoveryId === true) {
              var locationName = memberShape.isLocationName ? memberShape.name : name;
              result[locationName] = String(params[name]);
            } else {
              marshallCustomIdentifiersHelper(result, params[name], memberShape);
            }
          });
        }
      }
      /**
       * Get custom identifiers for cache key.
       * Identifies custom identifiers by checking each shape's `endpointDiscoveryId` trait.
       * @param [object] request object
       * @param [object] input shape of the given operation's api
       * @api private
       */


      function marshallCustomIdentifiers(request, shape) {
        var identifiers = {};
        marshallCustomIdentifiersHelper(identifiers, request.params, shape);
        return identifiers;
      }
      /**
       * Call endpoint discovery operation when it's optional.
       * When endpoint is available in cache then use the cached endpoints. If endpoints
       * are unavailable then use regional endpoints and call endpoint discovery operation
       * asynchronously. This is turned off by default.
       * @param [object] request object
       * @api private
       */


      function optionalDiscoverEndpoint(request) {
        var service = request.service;
        var api = service.api;
        var operationModel = api.operations ? api.operations[request.operation] : undefined;
        var inputShape = operationModel ? operationModel.input : undefined;
        var identifiers = marshallCustomIdentifiers(request, inputShape);
        var cacheKey = getCacheKey(request);

        if (Object.keys(identifiers).length > 0) {
          cacheKey = util.update(cacheKey, identifiers);
          if (operationModel) cacheKey.operation = operationModel.name;
        }

        var endpoints = AWS.endpointCache.get(cacheKey);

        if (endpoints && endpoints.length === 1 && endpoints[0].Address === '') {
          //endpoint operation is being made but response not yet received
          //or endpoint operation just failed in 1 minute
          return;
        } else if (endpoints && endpoints.length > 0) {
          //found endpoint record from cache
          request.httpRequest.updateEndpoint(endpoints[0].Address);
        } else {
          //endpoint record not in cache or outdated. make discovery operation
          var endpointRequest = service.makeRequest(api.endpointOperation, {
            Operation: operationModel.name,
            Identifiers: identifiers
          });
          addApiVersionHeader(endpointRequest);
          endpointRequest.removeListener('validate', AWS.EventListeners.Core.VALIDATE_PARAMETERS);
          endpointRequest.removeListener('retry', AWS.EventListeners.Core.RETRY_CHECK); //put in a placeholder for endpoints already requested, prevent
          //too much in-flight calls

          AWS.endpointCache.put(cacheKey, [{
            Address: '',
            CachePeriodInMinutes: 1
          }]);
          endpointRequest.send(function (err, data) {
            if (data && data.Endpoints) {
              AWS.endpointCache.put(cacheKey, data.Endpoints);
            } else if (err) {
              AWS.endpointCache.put(cacheKey, [{
                Address: '',
                CachePeriodInMinutes: 1 //not to make more endpoint operation in next 1 minute

              }]);
            }
          });
        }
      }

      var requestQueue = {};
      /**
       * Call endpoint discovery operation when it's required.
       * When endpoint is available in cache then use cached ones. If endpoints are
       * unavailable then SDK should call endpoint operation then use returned new
       * endpoint for the api call. SDK will automatically attempt to do endpoint
       * discovery. This is turned off by default
       * @param [object] request object
       * @api private
       */

      function requiredDiscoverEndpoint(request, done) {
        var service = request.service;
        var api = service.api;
        var operationModel = api.operations ? api.operations[request.operation] : undefined;
        var inputShape = operationModel ? operationModel.input : undefined;
        var identifiers = marshallCustomIdentifiers(request, inputShape);
        var cacheKey = getCacheKey(request);

        if (Object.keys(identifiers).length > 0) {
          cacheKey = util.update(cacheKey, identifiers);
          if (operationModel) cacheKey.operation = operationModel.name;
        }

        var cacheKeyStr = AWS.EndpointCache.getKeyString(cacheKey);
        var endpoints = AWS.endpointCache.get(cacheKeyStr); //endpoint cache also accepts string keys

        if (endpoints && endpoints.length === 1 && endpoints[0].Address === '') {
          //endpoint operation is being made but response not yet received
          //push request object to a pending queue
          if (!requestQueue[cacheKeyStr]) requestQueue[cacheKeyStr] = [];
          requestQueue[cacheKeyStr].push({
            request: request,
            callback: done
          });
          return;
        } else if (endpoints && endpoints.length > 0) {
          request.httpRequest.updateEndpoint(endpoints[0].Address);
          done();
        } else {
          var endpointRequest = service.makeRequest(api.endpointOperation, {
            Operation: operationModel.name,
            Identifiers: identifiers
          });
          endpointRequest.removeListener('validate', AWS.EventListeners.Core.VALIDATE_PARAMETERS);
          addApiVersionHeader(endpointRequest); //put in a placeholder for endpoints already requested, prevent
          //too much in-flight calls

          AWS.endpointCache.put(cacheKeyStr, [{
            Address: '',
            CachePeriodInMinutes: 60 //long-live cache

          }]);
          endpointRequest.send(function (err, data) {
            if (err) {
              request.response.error = util.error(err, {
                retryable: false
              });
              AWS.endpointCache.remove(cacheKey); //fail all the pending requests in batch

              if (requestQueue[cacheKeyStr]) {
                var pendingRequests = requestQueue[cacheKeyStr];
                util.arrayEach(pendingRequests, function (requestContext) {
                  requestContext.request.response.error = util.error(err, {
                    retryable: false
                  });
                  requestContext.callback();
                });
                delete requestQueue[cacheKeyStr];
              }
            } else if (data) {
              AWS.endpointCache.put(cacheKeyStr, data.Endpoints);
              request.httpRequest.updateEndpoint(data.Endpoints[0].Address); //update the endpoint for all the pending requests in batch

              if (requestQueue[cacheKeyStr]) {
                var pendingRequests = requestQueue[cacheKeyStr];
                util.arrayEach(pendingRequests, function (requestContext) {
                  requestContext.request.httpRequest.updateEndpoint(data.Endpoints[0].Address);
                  requestContext.callback();
                });
                delete requestQueue[cacheKeyStr];
              }
            }

            done();
          });
        }
      }
      /**
       * add api version header to endpoint operation
       * @api private
       */


      function addApiVersionHeader(endpointRequest) {
        var api = endpointRequest.service.api;
        var apiVersion = api.apiVersion;

        if (apiVersion && !endpointRequest.httpRequest.headers['x-amz-api-version']) {
          endpointRequest.httpRequest.headers['x-amz-api-version'] = apiVersion;
        }
      }
      /**
       * If api call gets invalid endpoint exception, SDK should attempt to remove the invalid
       * endpoint from cache.
       * @api private
       */


      function invalidateCachedEndpoints(response) {
        var error = response.error;
        var httpResponse = response.httpResponse;

        if (error && (error.code === 'InvalidEndpointException' || httpResponse.statusCode === 421)) {
          var request = response.request;
          var operations = request.service.api.operations || {};
          var inputShape = operations[request.operation] ? operations[request.operation].input : undefined;
          var identifiers = marshallCustomIdentifiers(request, inputShape);
          var cacheKey = getCacheKey(request);

          if (Object.keys(identifiers).length > 0) {
            cacheKey = util.update(cacheKey, identifiers);
            if (operations[request.operation]) cacheKey.operation = operations[request.operation].name;
          }

          AWS.endpointCache.remove(cacheKey);
        }
      }
      /**
       * If endpoint is explicitly configured, SDK should not do endpoint discovery in anytime.
       * @param [object] client Service client object.
       * @api private
       */


      function hasCustomEndpoint(client) {
        //if set endpoint is set for specific client, enable endpoint discovery will raise an error.
        if (client._originalConfig && client._originalConfig.endpoint && client._originalConfig.endpointDiscoveryEnabled === true) {
          throw util.error(new Error(), {
            code: 'ConfigurationException',
            message: 'Custom endpoint is supplied; endpointDiscoveryEnabled must not be true.'
          });
        }

        ;
        var svcConfig = AWS.config[client.serviceIdentifier] || {};
        return Boolean(AWS.config.endpoint || svcConfig.endpoint || client._originalConfig && client._originalConfig.endpoint);
      }
      /**
       * @api private
       */


      function isFalsy(value) {
        return ['false', '0'].indexOf(value) >= 0;
      }
      /**
       * If endpoint discovery should perform for this request when no operation requires endpoint
       * discovery for the given service.
       * SDK performs config resolution in order like below:
       * 1. If set in client configuration.
       * 2. If set in env AWS_ENABLE_ENDPOINT_DISCOVERY.
       * 3. If set in shared ini config file with key 'endpoint_discovery_enabled'.
       * @param [object] request request object.
       * @returns [boolean|undefined] if endpoint discovery config is not set in any source, this
       *  function returns undefined
       * @api private
       */


      function resolveEndpointDiscoveryConfig(request) {
        var service = request.service || {};

        if (service.config.endpointDiscoveryEnabled !== undefined) {
          return service.config.endpointDiscoveryEnabled;
        } //shared ini file is only available in Node
        //not to check env in browser


        if (util.isBrowser()) return undefined; // If any of recognized endpoint discovery config env is set

        for (var i = 0; i < endpointDiscoveryEnabledEnvs.length; i++) {
          var env = endpointDiscoveryEnabledEnvs[i];

          if (Object.prototype.hasOwnProperty.call(process.env, env)) {
            if (process.env[env] === '' || process.env[env] === undefined) {
              throw util.error(new Error(), {
                code: 'ConfigurationException',
                message: 'environmental variable ' + env + ' cannot be set to nothing'
              });
            }

            return !isFalsy(process.env[env]);
          }
        }

        var configFile = {};

        try {
          configFile = AWS.util.iniLoader ? AWS.util.iniLoader.loadFrom({
            isConfig: true,
            filename: process.env[AWS.util.sharedConfigFileEnv]
          }) : {};
        } catch (e) {}

        var sharedFileConfig = configFile[process.env.AWS_PROFILE || AWS.util.defaultProfile] || {};

        if (Object.prototype.hasOwnProperty.call(sharedFileConfig, 'endpoint_discovery_enabled')) {
          if (sharedFileConfig.endpoint_discovery_enabled === undefined) {
            throw util.error(new Error(), {
              code: 'ConfigurationException',
              message: 'config file entry \'endpoint_discovery_enabled\' cannot be set to nothing'
            });
          }

          return !isFalsy(sharedFileConfig.endpoint_discovery_enabled);
        }

        return undefined;
      }
      /**
       * attach endpoint discovery logic to request object
       * @param [object] request
       * @api private
       */


      function discoverEndpoint(request, done) {
        var service = request.service || {};
        if (hasCustomEndpoint(service) || request.isPresigned()) return done();
        var operations = service.api.operations || {};
        var operationModel = operations[request.operation];
        var isEndpointDiscoveryRequired = operationModel ? operationModel.endpointDiscoveryRequired : 'NULL';
        var isEnabled = resolveEndpointDiscoveryConfig(request);
        var hasRequiredEndpointDiscovery = service.api.hasRequiredEndpointDiscovery;

        if (isEnabled || hasRequiredEndpointDiscovery) {
          // Once a customer enables endpoint discovery, the SDK should start appending
          // the string endpoint-discovery to the user-agent on all requests.
          request.httpRequest.appendToUserAgent('endpoint-discovery');
        }

        switch (isEndpointDiscoveryRequired) {
          case 'OPTIONAL':
            if (isEnabled || hasRequiredEndpointDiscovery) {
              // For a given service; if at least one operation requires endpoint discovery then the SDK must enable endpoint discovery
              // by default for all operations of that service, including operations where endpoint discovery is optional.
              optionalDiscoverEndpoint(request);
              request.addNamedListener('INVALIDATE_CACHED_ENDPOINTS', 'extractError', invalidateCachedEndpoints);
            }

            done();
            break;

          case 'REQUIRED':
            if (isEnabled === false) {
              // For a given operation; if endpoint discovery is required and it has been disabled on the SDK client,
              // then the SDK must return a clear and actionable exception.
              request.response.error = util.error(new Error(), {
                code: 'ConfigurationException',
                message: 'Endpoint Discovery is disabled but ' + service.api.className + '.' + request.operation + '() requires it. Please check your configurations.'
              });
              done();
              break;
            }

            request.addNamedListener('INVALIDATE_CACHED_ENDPOINTS', 'extractError', invalidateCachedEndpoints);
            requiredDiscoverEndpoint(request, done);
            break;

          case 'NULL':
          default:
            done();
            break;
        }
      }

      module.exports = {
        discoverEndpoint: discoverEndpoint,
        requiredDiscoverEndpoint: requiredDiscoverEndpoint,
        optionalDiscoverEndpoint: optionalDiscoverEndpoint,
        marshallCustomIdentifiers: marshallCustomIdentifiers,
        getCacheKey: getCacheKey,
        invalidateCachedEndpoint: invalidateCachedEndpoints
      };
      /***/
    },

    /***/
    "Vclq":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/es-us.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function Vclq(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Spanish (United States) [es-us]
      //! author : bustta : https://github.com/bustta
      //! author : chrisrodz : https://github.com/chrisrodz
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),
            _monthsShort2 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
            monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i],
            monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

        var esUs = moment.defineLocale('es-us', {
          months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
          monthsShort: function monthsShort(m, format) {
            if (!m) {
              return monthsShortDot;
            } else if (/-MMM-/.test(format)) {
              return _monthsShort2[m.month()];
            } else {
              return monthsShortDot[m.month()];
            }
          },
          monthsRegex: monthsRegex,
          monthsShortRegex: monthsRegex,
          monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
          monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
          monthsParse: monthsParse,
          longMonthsParse: monthsParse,
          shortMonthsParse: monthsParse,
          weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
          weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
          weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'MM/DD/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY h:mm A',
            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A'
          },
          calendar: {
            sameDay: function sameDay() {
              return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextDay: function nextDay() {
              return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextWeek: function nextWeek() {
              return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastDay: function lastDay() {
              return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastWeek: function lastWeek() {
              return '[el] dddd [pasado a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: 'en %s',
            past: 'hace %s',
            s: 'unos segundos',
            ss: '%d segundos',
            m: 'un minuto',
            mm: '%d minutos',
            h: 'una hora',
            hh: '%d horas',
            d: 'un día',
            dd: '%d días',
            w: 'una semana',
            ww: '%d semanas',
            M: 'un mes',
            MM: '%d meses',
            y: 'un año',
            yy: '%d años'
          },
          dayOfMonthOrdinalParse: /\d{1,2}º/,
          ordinal: '%dº',
          week: {
            dow: 0,
            // Sunday is the first day of the week.
            doy: 6 // The week that contains Jan 6th is the first week of the year.

          }
        });
        return esUs;
      });
      /***/

    },

    /***/
    "VoWP":
    /*!***********************************************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime-moment/__ivy_ngcc__/moment-adapter/moment-date-time-format.class.js ***!
      \***********************************************************************************************************/

    /*! exports provided: OWL_MOMENT_DATE_TIME_FORMATS */

    /***/
    function VoWP(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OWL_MOMENT_DATE_TIME_FORMATS", function () {
        return OWL_MOMENT_DATE_TIME_FORMATS;
      });

      var OWL_MOMENT_DATE_TIME_FORMATS = {
        parseInput: 'l LT',
        fullPickerInput: 'l LT',
        datePickerInput: 'l',
        timePickerInput: 'LT',
        monthYearLabel: 'MMM YYYY',
        dateA11yLabel: 'LL',
        monthYearA11yLabel: 'MMMM YYYY'
      };
      /***/
    },

    /***/
    "Vpsf":
    /*!*******************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/scheduler/AnimationFrameAction.js ***!
      \*******************************************************************************/

    /*! exports provided: AnimationFrameAction */

    /***/
    function Vpsf(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AnimationFrameAction", function () {
        return AnimationFrameAction;
      });
      /* harmony import */


      var _AsyncAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./AsyncAction */
      "3N8a");

      var AnimationFrameAction = /*#__PURE__*/function (_AsyncAction__WEBPACK2) {
        _inherits2(AnimationFrameAction, _AsyncAction__WEBPACK2);

        var _super258 = _createSuper(AnimationFrameAction);

        function AnimationFrameAction(scheduler, work) {
          var _this605;

          _classCallCheck2(this, AnimationFrameAction);

          _this605 = _super258.call(this, scheduler, work);
          _this605.scheduler = scheduler;
          _this605.work = work;
          return _this605;
        }

        _createClass2(AnimationFrameAction, [{
          key: "requestAsyncId",
          value: function requestAsyncId(scheduler, id) {
            var delay = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;

            if (delay !== null && delay > 0) {
              return _get2(_getPrototypeOf2(AnimationFrameAction.prototype), "requestAsyncId", this).call(this, scheduler, id, delay);
            }

            scheduler.actions.push(this);
            return scheduler.scheduled || (scheduler.scheduled = requestAnimationFrame(function () {
              return scheduler.flush(null);
            }));
          }
        }, {
          key: "recycleAsyncId",
          value: function recycleAsyncId(scheduler, id) {
            var delay = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;

            if (delay !== null && delay > 0 || delay === null && this.delay > 0) {
              return _get2(_getPrototypeOf2(AnimationFrameAction.prototype), "recycleAsyncId", this).call(this, scheduler, id, delay);
            }

            if (scheduler.actions.length === 0) {
              cancelAnimationFrame(id);
              scheduler.scheduled = undefined;
            }

            return undefined;
          }
        }]);

        return AnimationFrameAction;
      }(_AsyncAction__WEBPACK_IMPORTED_MODULE_0__["AsyncAction"]); //# sourceMappingURL=AnimationFrameAction.js.map

      /***/

    },

    /***/
    "Vz+1":
    /*!**************************************************************************!*\
      !*** ./node_modules/aws-sdk/lib/credentials/web_identity_credentials.js ***!
      \**************************************************************************/

    /*! no static exports found */

    /***/
    function Vz1(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ../core */
      "QsWE");

      var STS = __webpack_require__(
      /*! ../../clients/sts */
      "6Yqx");
      /**
       * Represents credentials retrieved from STS Web Identity Federation support.
       *
       * By default this provider gets credentials using the
       * {AWS.STS.assumeRoleWithWebIdentity} service operation. This operation
       * requires a `RoleArn` containing the ARN of the IAM trust policy for the
       * application for which credentials will be given. In addition, the
       * `WebIdentityToken` must be set to the token provided by the identity
       * provider. See {constructor} for an example on creating a credentials
       * object with proper `RoleArn` and `WebIdentityToken` values.
       *
       * ## Refreshing Credentials from Identity Service
       *
       * In addition to AWS credentials expiring after a given amount of time, the
       * login token from the identity provider will also expire. Once this token
       * expires, it will not be usable to refresh AWS credentials, and another
       * token will be needed. The SDK does not manage refreshing of the token value,
       * but this can be done through a "refresh token" supported by most identity
       * providers. Consult the documentation for the identity provider for refreshing
       * tokens. Once the refreshed token is acquired, you should make sure to update
       * this new token in the credentials object's {params} property. The following
       * code will update the WebIdentityToken, assuming you have retrieved an updated
       * token from the identity provider:
       *
       * ```javascript
       * AWS.config.credentials.params.WebIdentityToken = updatedToken;
       * ```
       *
       * Future calls to `credentials.refresh()` will now use the new token.
       *
       * @!attribute params
       *   @return [map] the map of params passed to
       *     {AWS.STS.assumeRoleWithWebIdentity}. To update the token, set the
       *     `params.WebIdentityToken` property.
       * @!attribute data
       *   @return [map] the raw data response from the call to
       *     {AWS.STS.assumeRoleWithWebIdentity}. Use this if you want to get
       *     access to other properties from the response.
       */


      AWS.WebIdentityCredentials = AWS.util.inherit(AWS.Credentials, {
        /**
         * Creates a new credentials object.
         * @param (see AWS.STS.assumeRoleWithWebIdentity)
         * @example Creating a new credentials object
         *   AWS.config.credentials = new AWS.WebIdentityCredentials({
         *     RoleArn: 'arn:aws:iam::1234567890:role/WebIdentity',
         *     WebIdentityToken: 'ABCDEFGHIJKLMNOP', // token from identity service
         *     RoleSessionName: 'web' // optional name, defaults to web-identity
         *   }, {
         *     // optionally provide configuration to apply to the underlying AWS.STS service client
         *     // if configuration is not provided, then configuration will be pulled from AWS.config
         *
         *     // specify timeout options
         *     httpOptions: {
         *       timeout: 100
         *     }
         *   });
         * @see AWS.STS.assumeRoleWithWebIdentity
         * @see AWS.Config
         */
        constructor: function WebIdentityCredentials(params, clientConfig) {
          AWS.Credentials.call(this);
          this.expired = true;
          this.params = params;
          this.params.RoleSessionName = this.params.RoleSessionName || 'web-identity';
          this.data = null;
          this._clientConfig = AWS.util.copy(clientConfig || {});
        },

        /**
         * Refreshes credentials using {AWS.STS.assumeRoleWithWebIdentity}
         *
         * @callback callback function(err)
         *   Called when the STS service responds (or fails). When
         *   this callback is called with no error, it means that the credentials
         *   information has been loaded into the object (as the `accessKeyId`,
         *   `secretAccessKey`, and `sessionToken` properties).
         *   @param err [Error] if an error occurred, this value will be filled
         * @see get
         */
        refresh: function refresh(callback) {
          this.coalesceRefresh(callback || AWS.util.fn.callback);
        },

        /**
         * @api private
         */
        load: function load(callback) {
          var self = this;
          self.createClients();
          self.service.assumeRoleWithWebIdentity(function (err, data) {
            self.data = null;

            if (!err) {
              self.data = data;
              self.service.credentialsFrom(data, self);
            }

            callback(err);
          });
        },

        /**
         * @api private
         */
        createClients: function createClients() {
          if (!this.service) {
            var stsConfig = AWS.util.merge({}, this._clientConfig);
            stsConfig.params = this.params;
            this.service = new STS(stsConfig);
          }
        }
      });
      /***/
    },

    /***/
    "WMd4":
    /*!*************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/Notification.js ***!
      \*************************************************************/

    /*! exports provided: NotificationKind, Notification */

    /***/
    function WMd4(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NotificationKind", function () {
        return NotificationKind;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Notification", function () {
        return Notification;
      });
      /* harmony import */


      var _observable_empty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./observable/empty */
      "EY2u");
      /* harmony import */


      var _observable_of__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./observable/of */
      "LRne");
      /* harmony import */


      var _observable_throwError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./observable/throwError */
      "z6cu");

      var NotificationKind;

      (function (NotificationKind) {
        NotificationKind["NEXT"] = "N";
        NotificationKind["ERROR"] = "E";
        NotificationKind["COMPLETE"] = "C";
      })(NotificationKind || (NotificationKind = {}));

      var Notification = /*#__PURE__*/function () {
        function Notification(kind, value, error) {
          _classCallCheck2(this, Notification);

          this.kind = kind;
          this.value = value;
          this.error = error;
          this.hasValue = kind === 'N';
        }

        _createClass2(Notification, [{
          key: "observe",
          value: function observe(observer) {
            switch (this.kind) {
              case 'N':
                return observer.next && observer.next(this.value);

              case 'E':
                return observer.error && observer.error(this.error);

              case 'C':
                return observer.complete && observer.complete();
            }
          }
        }, {
          key: "do",
          value: function _do(next, error, complete) {
            var kind = this.kind;

            switch (kind) {
              case 'N':
                return next && next(this.value);

              case 'E':
                return error && error(this.error);

              case 'C':
                return complete && complete();
            }
          }
        }, {
          key: "accept",
          value: function accept(nextOrObserver, error, complete) {
            if (nextOrObserver && typeof nextOrObserver.next === 'function') {
              return this.observe(nextOrObserver);
            } else {
              return this["do"](nextOrObserver, error, complete);
            }
          }
        }, {
          key: "toObservable",
          value: function toObservable() {
            var kind = this.kind;

            switch (kind) {
              case 'N':
                return Object(_observable_of__WEBPACK_IMPORTED_MODULE_1__["of"])(this.value);

              case 'E':
                return Object(_observable_throwError__WEBPACK_IMPORTED_MODULE_2__["throwError"])(this.error);

              case 'C':
                return Object(_observable_empty__WEBPACK_IMPORTED_MODULE_0__["empty"])();
            }

            throw new Error('unexpected notification kind value');
          }
        }], [{
          key: "createNext",
          value: function createNext(value) {
            if (typeof value !== 'undefined') {
              return new Notification('N', value);
            }

            return Notification.undefinedValueNotification;
          }
        }, {
          key: "createError",
          value: function createError(err) {
            return new Notification('E', undefined, err);
          }
        }, {
          key: "createComplete",
          value: function createComplete() {
            return Notification.completeNotification;
          }
        }]);

        return Notification;
      }();

      Notification.completeNotification = new Notification('C');
      Notification.undefinedValueNotification = new Notification('N', undefined); //# sourceMappingURL=Notification.js.map

      /***/
    },

    /***/
    "WPMC":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/generate.js ***!
      \********************************************************************/

    /*! exports provided: generate */

    /***/
    function WPMC(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "generate", function () {
        return generate;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/identity */
      "SpAZ");
      /* harmony import */


      var _util_isScheduler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../util/isScheduler */
      "z+Ro");

      function generate(initialStateOrOptions, condition, iterate, resultSelectorOrObservable, scheduler) {
        var resultSelector;
        var initialState;

        if (arguments.length == 1) {
          var options = initialStateOrOptions;
          initialState = options.initialState;
          condition = options.condition;
          iterate = options.iterate;
          resultSelector = options.resultSelector || _util_identity__WEBPACK_IMPORTED_MODULE_1__["identity"];
          scheduler = options.scheduler;
        } else if (resultSelectorOrObservable === undefined || Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_2__["isScheduler"])(resultSelectorOrObservable)) {
          initialState = initialStateOrOptions;
          resultSelector = _util_identity__WEBPACK_IMPORTED_MODULE_1__["identity"];
          scheduler = resultSelectorOrObservable;
        } else {
          initialState = initialStateOrOptions;
          resultSelector = resultSelectorOrObservable;
        }

        return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
          var state = initialState;

          if (scheduler) {
            return scheduler.schedule(dispatch, 0, {
              subscriber: subscriber,
              iterate: iterate,
              condition: condition,
              resultSelector: resultSelector,
              state: state
            });
          }

          do {
            if (condition) {
              var conditionResult = void 0;

              try {
                conditionResult = condition(state);
              } catch (err) {
                subscriber.error(err);
                return undefined;
              }

              if (!conditionResult) {
                subscriber.complete();
                break;
              }
            }

            var value = void 0;

            try {
              value = resultSelector(state);
            } catch (err) {
              subscriber.error(err);
              return undefined;
            }

            subscriber.next(value);

            if (subscriber.closed) {
              break;
            }

            try {
              state = iterate(state);
            } catch (err) {
              subscriber.error(err);
              return undefined;
            }
          } while (true);

          return undefined;
        });
      }

      function dispatch(state) {
        var subscriber = state.subscriber,
            condition = state.condition;

        if (subscriber.closed) {
          return undefined;
        }

        if (state.needIterate) {
          try {
            state.state = state.iterate(state.state);
          } catch (err) {
            subscriber.error(err);
            return undefined;
          }
        } else {
          state.needIterate = true;
        }

        if (condition) {
          var conditionResult;

          try {
            conditionResult = condition(state.state);
          } catch (err) {
            subscriber.error(err);
            return undefined;
          }

          if (!conditionResult) {
            subscriber.complete();
            return undefined;
          }

          if (subscriber.closed) {
            return undefined;
          }
        }

        var value;

        try {
          value = state.resultSelector(state.state);
        } catch (err) {
          subscriber.error(err);
          return undefined;
        }

        if (subscriber.closed) {
          return undefined;
        }

        subscriber.next(value);

        if (subscriber.closed) {
          return undefined;
        }

        return this.schedule(state);
      } //# sourceMappingURL=generate.js.map

      /***/

    },

    /***/
    "WYrj":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/dv.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function WYrj(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Maldivian [dv]
      //! author : Jawish Hameed : https://github.com/jawish
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var months = ['ޖެނުއަރީ', 'ފެބްރުއަރީ', 'މާރިޗު', 'އޭޕްރީލު', 'މޭ', 'ޖޫން', 'ޖުލައި', 'އޯގަސްޓު', 'ސެޕްޓެމްބަރު', 'އޮކްޓޯބަރު', 'ނޮވެމްބަރު', 'ޑިސެމްބަރު'],
            weekdays = ['އާދިއްތަ', 'ހޯމަ', 'އަންގާރަ', 'ބުދަ', 'ބުރާސްފަތި', 'ހުކުރު', 'ހޮނިހިރު'];
        var dv = moment.defineLocale('dv', {
          months: months,
          monthsShort: months,
          weekdays: weekdays,
          weekdaysShort: weekdays,
          weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'D/M/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm'
          },
          meridiemParse: /މކ|މފ/,
          isPM: function isPM(input) {
            return 'މފ' === input;
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 12) {
              return 'މކ';
            } else {
              return 'މފ';
            }
          },
          calendar: {
            sameDay: '[މިއަދު] LT',
            nextDay: '[މާދަމާ] LT',
            nextWeek: 'dddd LT',
            lastDay: '[އިއްޔެ] LT',
            lastWeek: '[ފާއިތުވި] dddd LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'ތެރޭގައި %s',
            past: 'ކުރިން %s',
            s: 'ސިކުންތުކޮޅެއް',
            ss: 'd% ސިކުންތު',
            m: 'މިނިޓެއް',
            mm: 'މިނިޓު %d',
            h: 'ގަޑިއިރެއް',
            hh: 'ގަޑިއިރު %d',
            d: 'ދުވަހެއް',
            dd: 'ދުވަސް %d',
            M: 'މަހެއް',
            MM: 'މަސް %d',
            y: 'އަހަރެއް',
            yy: 'އަހަރު %d'
          },
          preparse: function preparse(string) {
            return string.replace(/،/g, ',');
          },
          postformat: function postformat(string) {
            return string.replace(/,/g, '،');
          },
          week: {
            dow: 7,
            // Sunday is the first day of the week.
            doy: 12 // The week that contains Jan 12th is the first week of the year.

          }
        });
        return dv;
      });
      /***/

    },

    /***/
    "Wp6s":
    /*!**********************************************************************!*\
      !*** ./node_modules/@angular/material/__ivy_ngcc__/fesm2015/card.js ***!
      \**********************************************************************/

    /*! exports provided: MatCard, MatCardActions, MatCardAvatar, MatCardContent, MatCardFooter, MatCardHeader, MatCardImage, MatCardLgImage, MatCardMdImage, MatCardModule, MatCardSmImage, MatCardSubtitle, MatCardTitle, MatCardTitleGroup, MatCardXlImage */

    /***/
    function Wp6s(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatCard", function () {
        return MatCard;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatCardActions", function () {
        return MatCardActions;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatCardAvatar", function () {
        return MatCardAvatar;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatCardContent", function () {
        return MatCardContent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatCardFooter", function () {
        return MatCardFooter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatCardHeader", function () {
        return MatCardHeader;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatCardImage", function () {
        return MatCardImage;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatCardLgImage", function () {
        return MatCardLgImage;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatCardMdImage", function () {
        return MatCardMdImage;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatCardModule", function () {
        return MatCardModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatCardSmImage", function () {
        return MatCardSmImage;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatCardSubtitle", function () {
        return MatCardSubtitle;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatCardTitle", function () {
        return MatCardTitle;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatCardTitleGroup", function () {
        return MatCardTitleGroup;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatCardXlImage", function () {
        return MatCardXlImage;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/platform-browser/animations */
      "R1ws");
      /* harmony import */


      var _angular_material_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/material/core */
      "FKr1");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Content of a card, needed as it's used as a selector in the API.
       * @docs-private
       */


      var _c0 = ["*", [["mat-card-footer"]]];
      var _c1 = ["*", "mat-card-footer"];
      var _c2 = [[["", "mat-card-avatar", ""], ["", "matCardAvatar", ""]], [["mat-card-title"], ["mat-card-subtitle"], ["", "mat-card-title", ""], ["", "mat-card-subtitle", ""], ["", "matCardTitle", ""], ["", "matCardSubtitle", ""]], "*"];
      var _c3 = ["[mat-card-avatar], [matCardAvatar]", "mat-card-title, mat-card-subtitle,\n      [mat-card-title], [mat-card-subtitle],\n      [matCardTitle], [matCardSubtitle]", "*"];
      var _c4 = [[["mat-card-title"], ["mat-card-subtitle"], ["", "mat-card-title", ""], ["", "mat-card-subtitle", ""], ["", "matCardTitle", ""], ["", "matCardSubtitle", ""]], [["img"]], "*"];
      var _c5 = ["mat-card-title, mat-card-subtitle,\n      [mat-card-title], [mat-card-subtitle],\n      [matCardTitle], [matCardSubtitle]", "img", "*"];

      var MatCardContent = function MatCardContent() {
        _classCallCheck2(this, MatCardContent);
      };

      MatCardContent.ɵfac = function MatCardContent_Factory(t) {
        return new (t || MatCardContent)();
      };

      MatCardContent.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatCardContent,
        selectors: [["mat-card-content"], ["", "mat-card-content", ""], ["", "matCardContent", ""]],
        hostAttrs: [1, "mat-card-content"]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatCardContent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'mat-card-content, [mat-card-content], [matCardContent]',
            host: {
              'class': 'mat-card-content'
            }
          }]
        }], null, null);
      })();
      /**
       * Title of a card, needed as it's used as a selector in the API.
       * @docs-private
       */


      var MatCardTitle = function MatCardTitle() {
        _classCallCheck2(this, MatCardTitle);
      };

      MatCardTitle.ɵfac = function MatCardTitle_Factory(t) {
        return new (t || MatCardTitle)();
      };

      MatCardTitle.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatCardTitle,
        selectors: [["mat-card-title"], ["", "mat-card-title", ""], ["", "matCardTitle", ""]],
        hostAttrs: [1, "mat-card-title"]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatCardTitle, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: "mat-card-title, [mat-card-title], [matCardTitle]",
            host: {
              'class': 'mat-card-title'
            }
          }]
        }], null, null);
      })();
      /**
       * Sub-title of a card, needed as it's used as a selector in the API.
       * @docs-private
       */


      var MatCardSubtitle = function MatCardSubtitle() {
        _classCallCheck2(this, MatCardSubtitle);
      };

      MatCardSubtitle.ɵfac = function MatCardSubtitle_Factory(t) {
        return new (t || MatCardSubtitle)();
      };

      MatCardSubtitle.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatCardSubtitle,
        selectors: [["mat-card-subtitle"], ["", "mat-card-subtitle", ""], ["", "matCardSubtitle", ""]],
        hostAttrs: [1, "mat-card-subtitle"]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatCardSubtitle, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]",
            host: {
              'class': 'mat-card-subtitle'
            }
          }]
        }], null, null);
      })();
      /**
       * Action section of a card, needed as it's used as a selector in the API.
       * @docs-private
       */


      var MatCardActions = function MatCardActions() {
        _classCallCheck2(this, MatCardActions);

        /** Position of the actions inside the card. */
        this.align = 'start';
      };

      MatCardActions.ɵfac = function MatCardActions_Factory(t) {
        return new (t || MatCardActions)();
      };

      MatCardActions.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatCardActions,
        selectors: [["mat-card-actions"]],
        hostAttrs: [1, "mat-card-actions"],
        hostVars: 2,
        hostBindings: function MatCardActions_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("mat-card-actions-align-end", ctx.align === "end");
          }
        },
        inputs: {
          align: "align"
        },
        exportAs: ["matCardActions"]
      });
      MatCardActions.propDecorators = {
        align: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatCardActions, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'mat-card-actions',
            exportAs: 'matCardActions',
            host: {
              'class': 'mat-card-actions',
              '[class.mat-card-actions-align-end]': 'align === "end"'
            }
          }]
        }], function () {
          return [];
        }, {
          align: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * Footer of a card, needed as it's used as a selector in the API.
       * @docs-private
       */


      var MatCardFooter = function MatCardFooter() {
        _classCallCheck2(this, MatCardFooter);
      };

      MatCardFooter.ɵfac = function MatCardFooter_Factory(t) {
        return new (t || MatCardFooter)();
      };

      MatCardFooter.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatCardFooter,
        selectors: [["mat-card-footer"]],
        hostAttrs: [1, "mat-card-footer"]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatCardFooter, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'mat-card-footer',
            host: {
              'class': 'mat-card-footer'
            }
          }]
        }], null, null);
      })();
      /**
       * Image used in a card, needed to add the mat- CSS styling.
       * @docs-private
       */


      var MatCardImage = function MatCardImage() {
        _classCallCheck2(this, MatCardImage);
      };

      MatCardImage.ɵfac = function MatCardImage_Factory(t) {
        return new (t || MatCardImage)();
      };

      MatCardImage.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatCardImage,
        selectors: [["", "mat-card-image", ""], ["", "matCardImage", ""]],
        hostAttrs: [1, "mat-card-image"]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatCardImage, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[mat-card-image], [matCardImage]',
            host: {
              'class': 'mat-card-image'
            }
          }]
        }], null, null);
      })();
      /**
       * Image used in a card, needed to add the mat- CSS styling.
       * @docs-private
       */


      var MatCardSmImage = function MatCardSmImage() {
        _classCallCheck2(this, MatCardSmImage);
      };

      MatCardSmImage.ɵfac = function MatCardSmImage_Factory(t) {
        return new (t || MatCardSmImage)();
      };

      MatCardSmImage.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatCardSmImage,
        selectors: [["", "mat-card-sm-image", ""], ["", "matCardImageSmall", ""]],
        hostAttrs: [1, "mat-card-sm-image"]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatCardSmImage, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[mat-card-sm-image], [matCardImageSmall]',
            host: {
              'class': 'mat-card-sm-image'
            }
          }]
        }], null, null);
      })();
      /**
       * Image used in a card, needed to add the mat- CSS styling.
       * @docs-private
       */


      var MatCardMdImage = function MatCardMdImage() {
        _classCallCheck2(this, MatCardMdImage);
      };

      MatCardMdImage.ɵfac = function MatCardMdImage_Factory(t) {
        return new (t || MatCardMdImage)();
      };

      MatCardMdImage.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatCardMdImage,
        selectors: [["", "mat-card-md-image", ""], ["", "matCardImageMedium", ""]],
        hostAttrs: [1, "mat-card-md-image"]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatCardMdImage, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[mat-card-md-image], [matCardImageMedium]',
            host: {
              'class': 'mat-card-md-image'
            }
          }]
        }], null, null);
      })();
      /**
       * Image used in a card, needed to add the mat- CSS styling.
       * @docs-private
       */


      var MatCardLgImage = function MatCardLgImage() {
        _classCallCheck2(this, MatCardLgImage);
      };

      MatCardLgImage.ɵfac = function MatCardLgImage_Factory(t) {
        return new (t || MatCardLgImage)();
      };

      MatCardLgImage.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatCardLgImage,
        selectors: [["", "mat-card-lg-image", ""], ["", "matCardImageLarge", ""]],
        hostAttrs: [1, "mat-card-lg-image"]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatCardLgImage, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[mat-card-lg-image], [matCardImageLarge]',
            host: {
              'class': 'mat-card-lg-image'
            }
          }]
        }], null, null);
      })();
      /**
       * Large image used in a card, needed to add the mat- CSS styling.
       * @docs-private
       */


      var MatCardXlImage = function MatCardXlImage() {
        _classCallCheck2(this, MatCardXlImage);
      };

      MatCardXlImage.ɵfac = function MatCardXlImage_Factory(t) {
        return new (t || MatCardXlImage)();
      };

      MatCardXlImage.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatCardXlImage,
        selectors: [["", "mat-card-xl-image", ""], ["", "matCardImageXLarge", ""]],
        hostAttrs: [1, "mat-card-xl-image"]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatCardXlImage, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[mat-card-xl-image], [matCardImageXLarge]',
            host: {
              'class': 'mat-card-xl-image'
            }
          }]
        }], null, null);
      })();
      /**
       * Avatar image used in a card, needed to add the mat- CSS styling.
       * @docs-private
       */


      var MatCardAvatar = function MatCardAvatar() {
        _classCallCheck2(this, MatCardAvatar);
      };

      MatCardAvatar.ɵfac = function MatCardAvatar_Factory(t) {
        return new (t || MatCardAvatar)();
      };

      MatCardAvatar.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: MatCardAvatar,
        selectors: [["", "mat-card-avatar", ""], ["", "matCardAvatar", ""]],
        hostAttrs: [1, "mat-card-avatar"]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatCardAvatar, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[mat-card-avatar], [matCardAvatar]',
            host: {
              'class': 'mat-card-avatar'
            }
          }]
        }], null, null);
      })();
      /**
       * A basic content container component that adds the styles of a Material design card.
       *
       * While this component can be used alone, it also provides a number
       * of preset styles for common card sections, including:
       * - mat-card-title
       * - mat-card-subtitle
       * - mat-card-content
       * - mat-card-actions
       * - mat-card-footer
       */


      var MatCard = // @breaking-change 9.0.0 `_animationMode` parameter to be made required.
      function MatCard(_animationMode) {
        _classCallCheck2(this, MatCard);

        this._animationMode = _animationMode;
      };

      MatCard.ɵfac = function MatCard_Factory(t) {
        return new (t || MatCard)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_1__["ANIMATION_MODULE_TYPE"], 8));
      };

      MatCard.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: MatCard,
        selectors: [["mat-card"]],
        hostAttrs: [1, "mat-card", "mat-focus-indicator"],
        hostVars: 2,
        hostBindings: function MatCard_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("_mat-animation-noopable", ctx._animationMode === "NoopAnimations");
          }
        },
        exportAs: ["matCard"],
        ngContentSelectors: _c1,
        decls: 2,
        vars: 0,
        template: function MatCard_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"](_c0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](1, 1);
          }
        },
        styles: [".mat-card{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);display:block;position:relative;padding:16px;border-radius:4px}._mat-animation-noopable.mat-card{transition:none;animation:none}.mat-card .mat-divider-horizontal{position:absolute;left:0;width:100%}[dir=rtl] .mat-card .mat-divider-horizontal{left:auto;right:0}.mat-card .mat-divider-horizontal.mat-divider-inset{position:static;margin:0}[dir=rtl] .mat-card .mat-divider-horizontal.mat-divider-inset{margin-right:0}.cdk-high-contrast-active .mat-card{outline:solid 1px}.mat-card-actions,.mat-card-subtitle,.mat-card-content{display:block;margin-bottom:16px}.mat-card-title{display:block;margin-bottom:8px}.mat-card-actions{margin-left:-8px;margin-right:-8px;padding:8px 0}.mat-card-actions-align-end{display:flex;justify-content:flex-end}.mat-card-image{width:calc(100% + 32px);margin:0 -16px 16px -16px}.mat-card-footer{display:block;margin:0 -16px -16px -16px}.mat-card-actions .mat-button,.mat-card-actions .mat-raised-button,.mat-card-actions .mat-stroked-button{margin:0 8px}.mat-card-header{display:flex;flex-direction:row}.mat-card-header .mat-card-title{margin-bottom:12px}.mat-card-header-text{margin:0 16px}.mat-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0;object-fit:cover}.mat-card-title-group{display:flex;justify-content:space-between}.mat-card-sm-image{width:80px;height:80px}.mat-card-md-image{width:112px;height:112px}.mat-card-lg-image{width:152px;height:152px}.mat-card-xl-image{width:240px;height:240px;margin:-8px}.mat-card-title-group>.mat-card-xl-image{margin:-8px 0 8px}@media(max-width: 599px){.mat-card-title-group{margin:0}.mat-card-xl-image{margin-left:0;margin-right:0}}.mat-card>:first-child,.mat-card-content>:first-child{margin-top:0}.mat-card>:last-child:not(.mat-card-footer),.mat-card-content>:last-child:not(.mat-card-footer){margin-bottom:0}.mat-card-image:first-child{margin-top:-16px;border-top-left-radius:inherit;border-top-right-radius:inherit}.mat-card>.mat-card-actions:last-child{margin-bottom:-8px;padding-bottom:0}.mat-card-actions .mat-button:first-child,.mat-card-actions .mat-raised-button:first-child,.mat-card-actions .mat-stroked-button:first-child{margin-left:0;margin-right:0}.mat-card-title:not(:first-child),.mat-card-subtitle:not(:first-child){margin-top:-4px}.mat-card-header .mat-card-subtitle:not(:first-child){margin-top:-8px}.mat-card>.mat-card-xl-image:first-child{margin-top:-8px}.mat-card>.mat-card-xl-image:last-child{margin-bottom:-8px}\n"],
        encapsulation: 2,
        changeDetection: 0
      });

      MatCard.ctorParameters = function () {
        return [{
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_1__["ANIMATION_MODULE_TYPE"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatCard, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'mat-card',
            exportAs: 'matCard',
            template: "<ng-content></ng-content>\n<ng-content select=\"mat-card-footer\"></ng-content>\n",
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            host: {
              'class': 'mat-card mat-focus-indicator',
              '[class._mat-animation-noopable]': '_animationMode === "NoopAnimations"'
            },
            styles: [".mat-card{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);display:block;position:relative;padding:16px;border-radius:4px}._mat-animation-noopable.mat-card{transition:none;animation:none}.mat-card .mat-divider-horizontal{position:absolute;left:0;width:100%}[dir=rtl] .mat-card .mat-divider-horizontal{left:auto;right:0}.mat-card .mat-divider-horizontal.mat-divider-inset{position:static;margin:0}[dir=rtl] .mat-card .mat-divider-horizontal.mat-divider-inset{margin-right:0}.cdk-high-contrast-active .mat-card{outline:solid 1px}.mat-card-actions,.mat-card-subtitle,.mat-card-content{display:block;margin-bottom:16px}.mat-card-title{display:block;margin-bottom:8px}.mat-card-actions{margin-left:-8px;margin-right:-8px;padding:8px 0}.mat-card-actions-align-end{display:flex;justify-content:flex-end}.mat-card-image{width:calc(100% + 32px);margin:0 -16px 16px -16px}.mat-card-footer{display:block;margin:0 -16px -16px -16px}.mat-card-actions .mat-button,.mat-card-actions .mat-raised-button,.mat-card-actions .mat-stroked-button{margin:0 8px}.mat-card-header{display:flex;flex-direction:row}.mat-card-header .mat-card-title{margin-bottom:12px}.mat-card-header-text{margin:0 16px}.mat-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0;object-fit:cover}.mat-card-title-group{display:flex;justify-content:space-between}.mat-card-sm-image{width:80px;height:80px}.mat-card-md-image{width:112px;height:112px}.mat-card-lg-image{width:152px;height:152px}.mat-card-xl-image{width:240px;height:240px;margin:-8px}.mat-card-title-group>.mat-card-xl-image{margin:-8px 0 8px}@media(max-width: 599px){.mat-card-title-group{margin:0}.mat-card-xl-image{margin-left:0;margin-right:0}}.mat-card>:first-child,.mat-card-content>:first-child{margin-top:0}.mat-card>:last-child:not(.mat-card-footer),.mat-card-content>:last-child:not(.mat-card-footer){margin-bottom:0}.mat-card-image:first-child{margin-top:-16px;border-top-left-radius:inherit;border-top-right-radius:inherit}.mat-card>.mat-card-actions:last-child{margin-bottom:-8px;padding-bottom:0}.mat-card-actions .mat-button:first-child,.mat-card-actions .mat-raised-button:first-child,.mat-card-actions .mat-stroked-button:first-child{margin-left:0;margin-right:0}.mat-card-title:not(:first-child),.mat-card-subtitle:not(:first-child){margin-top:-4px}.mat-card-header .mat-card-subtitle:not(:first-child){margin-top:-8px}.mat-card>.mat-card-xl-image:first-child{margin-top:-8px}.mat-card>.mat-card-xl-image:last-child{margin-bottom:-8px}\n"]
          }]
        }], function () {
          return [{
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_1__["ANIMATION_MODULE_TYPE"]]
            }]
          }];
        }, null);
      })();
      /**
       * Component intended to be used within the `<mat-card>` component. It adds styles for a
       * preset header section (i.e. a title, subtitle, and avatar layout).
       * @docs-private
       */


      var MatCardHeader = function MatCardHeader() {
        _classCallCheck2(this, MatCardHeader);
      };

      MatCardHeader.ɵfac = function MatCardHeader_Factory(t) {
        return new (t || MatCardHeader)();
      };

      MatCardHeader.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: MatCardHeader,
        selectors: [["mat-card-header"]],
        hostAttrs: [1, "mat-card-header"],
        ngContentSelectors: _c3,
        decls: 4,
        vars: 0,
        consts: [[1, "mat-card-header-text"]],
        template: function MatCardHeader_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"](_c2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](2, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](3, 2);
          }
        },
        encapsulation: 2,
        changeDetection: 0
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatCardHeader, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'mat-card-header',
            template: "<ng-content select=\"[mat-card-avatar], [matCardAvatar]\"></ng-content>\n<div class=\"mat-card-header-text\">\n  <ng-content\n      select=\"mat-card-title, mat-card-subtitle,\n      [mat-card-title], [mat-card-subtitle],\n      [matCardTitle], [matCardSubtitle]\"></ng-content>\n</div>\n<ng-content></ng-content>\n",
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            host: {
              'class': 'mat-card-header'
            }
          }]
        }], null, null);
      })();
      /**
       * Component intended to be used within the `<mat-card>` component. It adds styles for a preset
       * layout that groups an image with a title section.
       * @docs-private
       */


      var MatCardTitleGroup = function MatCardTitleGroup() {
        _classCallCheck2(this, MatCardTitleGroup);
      };

      MatCardTitleGroup.ɵfac = function MatCardTitleGroup_Factory(t) {
        return new (t || MatCardTitleGroup)();
      };

      MatCardTitleGroup.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: MatCardTitleGroup,
        selectors: [["mat-card-title-group"]],
        hostAttrs: [1, "mat-card-title-group"],
        ngContentSelectors: _c5,
        decls: 4,
        vars: 0,
        template: function MatCardTitleGroup_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"](_c4);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](2, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](3, 2);
          }
        },
        encapsulation: 2,
        changeDetection: 0
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatCardTitleGroup, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'mat-card-title-group',
            template: "<div>\n  <ng-content\n      select=\"mat-card-title, mat-card-subtitle,\n      [mat-card-title], [mat-card-subtitle],\n      [matCardTitle], [matCardSubtitle]\"></ng-content>\n</div>\n<ng-content select=\"img\"></ng-content>\n<ng-content></ng-content>\n",
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            host: {
              'class': 'mat-card-title-group'
            }
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var MatCardModule = function MatCardModule() {
        _classCallCheck2(this, MatCardModule);
      };

      MatCardModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: MatCardModule
      });
      MatCardModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function MatCardModule_Factory(t) {
          return new (t || MatCardModule)();
        },
        imports: [[_angular_material_core__WEBPACK_IMPORTED_MODULE_2__["MatCommonModule"]], _angular_material_core__WEBPACK_IMPORTED_MODULE_2__["MatCommonModule"]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](MatCardModule, {
          declarations: function declarations() {
            return [MatCard, MatCardHeader, MatCardTitleGroup, MatCardContent, MatCardTitle, MatCardSubtitle, MatCardActions, MatCardFooter, MatCardSmImage, MatCardMdImage, MatCardLgImage, MatCardImage, MatCardXlImage, MatCardAvatar];
          },
          imports: function imports() {
            return [_angular_material_core__WEBPACK_IMPORTED_MODULE_2__["MatCommonModule"]];
          },
          exports: function exports() {
            return [MatCard, MatCardHeader, MatCardTitleGroup, MatCardContent, MatCardTitle, MatCardSubtitle, MatCardActions, MatCardFooter, MatCardSmImage, MatCardMdImage, MatCardLgImage, MatCardImage, MatCardXlImage, MatCardAvatar, _angular_material_core__WEBPACK_IMPORTED_MODULE_2__["MatCommonModule"]];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatCardModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            imports: [_angular_material_core__WEBPACK_IMPORTED_MODULE_2__["MatCommonModule"]],
            exports: [MatCard, MatCardHeader, MatCardTitleGroup, MatCardContent, MatCardTitle, MatCardSubtitle, MatCardActions, MatCardFooter, MatCardSmImage, MatCardMdImage, MatCardLgImage, MatCardImage, MatCardXlImage, MatCardAvatar, _angular_material_core__WEBPACK_IMPORTED_MODULE_2__["MatCommonModule"]],
            declarations: [MatCard, MatCardHeader, MatCardTitleGroup, MatCardContent, MatCardTitle, MatCardSubtitle, MatCardActions, MatCardFooter, MatCardSmImage, MatCardMdImage, MatCardLgImage, MatCardImage, MatCardXlImage, MatCardAvatar]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=card.js.map

      /***/

    },

    /***/
    "Wv91":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/tk.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function Wv91(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Turkmen [tk]
      //! author : Atamyrat Abdyrahmanov : https://github.com/atamyratabdy
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var suffixes = {
          1: "'inji",
          5: "'inji",
          8: "'inji",
          70: "'inji",
          80: "'inji",
          2: "'nji",
          7: "'nji",
          20: "'nji",
          50: "'nji",
          3: "'ünji",
          4: "'ünji",
          100: "'ünji",
          6: "'njy",
          9: "'unjy",
          10: "'unjy",
          30: "'unjy",
          60: "'ynjy",
          90: "'ynjy"
        };
        var tk = moment.defineLocale('tk', {
          months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split('_'),
          monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'),
          weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split('_'),
          weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'),
          weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[bugün sagat] LT',
            nextDay: '[ertir sagat] LT',
            nextWeek: '[indiki] dddd [sagat] LT',
            lastDay: '[düýn] LT',
            lastWeek: '[geçen] dddd [sagat] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s soň',
            past: '%s öň',
            s: 'birnäçe sekunt',
            m: 'bir minut',
            mm: '%d minut',
            h: 'bir sagat',
            hh: '%d sagat',
            d: 'bir gün',
            dd: '%d gün',
            M: 'bir aý',
            MM: '%d aý',
            y: 'bir ýyl',
            yy: '%d ýyl'
          },
          ordinal: function ordinal(number, period) {
            switch (period) {
              case 'd':
              case 'D':
              case 'Do':
              case 'DD':
                return number;

              default:
                if (number === 0) {
                  // special case for zero
                  return number + "'unjy";
                }

                var a = number % 10,
                    b = number % 100 - a,
                    c = number >= 100 ? 100 : null;
                return number + (suffixes[a] || suffixes[b] || suffixes[c]);
            }
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return tk;
      });
      /***/

    },

    /***/
    "WxRl":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/hu.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function WxRl(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Hungarian [hu]
      //! author : Adam Brunner : https://github.com/adambrunner
      //! author : Peter Viszt  : https://github.com/passatgt
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');

        function translate(number, withoutSuffix, key, isFuture) {
          var num = number;

          switch (key) {
            case 's':
              return isFuture || withoutSuffix ? 'néhány másodperc' : 'néhány másodperce';

            case 'ss':
              return num + (isFuture || withoutSuffix) ? ' másodperc' : ' másodperce';

            case 'm':
              return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');

            case 'mm':
              return num + (isFuture || withoutSuffix ? ' perc' : ' perce');

            case 'h':
              return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');

            case 'hh':
              return num + (isFuture || withoutSuffix ? ' óra' : ' órája');

            case 'd':
              return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');

            case 'dd':
              return num + (isFuture || withoutSuffix ? ' nap' : ' napja');

            case 'M':
              return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');

            case 'MM':
              return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');

            case 'y':
              return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');

            case 'yy':
              return num + (isFuture || withoutSuffix ? ' év' : ' éve');
          }

          return '';
        }

        function week(isFuture) {
          return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';
        }

        var hu = moment.defineLocale('hu', {
          months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),
          monthsShort: 'jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.'.split('_'),
          monthsParseExact: true,
          weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),
          weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),
          weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),
          longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'YYYY.MM.DD.',
            LL: 'YYYY. MMMM D.',
            LLL: 'YYYY. MMMM D. H:mm',
            LLLL: 'YYYY. MMMM D., dddd H:mm'
          },
          meridiemParse: /de|du/i,
          isPM: function isPM(input) {
            return input.charAt(1).toLowerCase() === 'u';
          },
          meridiem: function meridiem(hours, minutes, isLower) {
            if (hours < 12) {
              return isLower === true ? 'de' : 'DE';
            } else {
              return isLower === true ? 'du' : 'DU';
            }
          },
          calendar: {
            sameDay: '[ma] LT[-kor]',
            nextDay: '[holnap] LT[-kor]',
            nextWeek: function nextWeek() {
              return week.call(this, true);
            },
            lastDay: '[tegnap] LT[-kor]',
            lastWeek: function lastWeek() {
              return week.call(this, false);
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s múlva',
            past: '%s',
            s: translate,
            ss: translate,
            m: translate,
            mm: translate,
            h: translate,
            hh: translate,
            d: translate,
            dd: translate,
            M: translate,
            MM: translate,
            y: translate,
            yy: translate
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return hu;
      });
      /***/

    },

    /***/
    "WyKG":
    /*!******************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/toSubscriber.js ***!
      \******************************************************************/

    /*! exports provided: toSubscriber */

    /***/
    function WyKG(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "toSubscriber", function () {
        return toSubscriber;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");
      /* harmony import */


      var _symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../symbol/rxSubscriber */
      "2QA8");
      /* harmony import */


      var _Observer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../Observer */
      "gRHU");

      function toSubscriber(nextOrObserver, error, complete) {
        if (nextOrObserver) {
          if (nextOrObserver instanceof _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]) {
            return nextOrObserver;
          }

          if (nextOrObserver[_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_1__["rxSubscriber"]]) {
            return nextOrObserver[_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_1__["rxSubscriber"]]();
          }
        }

        if (!nextOrObserver && !error && !complete) {
          return new _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"](_Observer__WEBPACK_IMPORTED_MODULE_2__["empty"]);
        }

        return new _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"](nextOrObserver, error, complete);
      } //# sourceMappingURL=toSubscriber.js.map

      /***/

    },

    /***/
    "WyaX":
    /*!***************************************************************************************************!*\
      !*** ./node_modules/ngx-bootstrap/__ivy_ngcc__/positioning/fesm2015/ngx-bootstrap-positioning.js ***!
      \***************************************************************************************************/

    /*! exports provided: Positioning, PositioningService, positionElements */

    /***/
    function WyaX(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Positioning", function () {
        return Positioning;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PositioningService", function () {
        return PositioningService;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "positionElements", function () {
        return positionElements;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * Get CSS computed property of the given element
       * @param {?} element
       * @param {?=} property
       * @return {?}
       */


      function getStyleComputedProperty(element, property) {
        if (element.nodeType !== 1) {
          return [];
        } // NOTE: 1 DOM access here

        /** @type {?} */


        var window = element.ownerDocument.defaultView;
        /** @type {?} */

        var css = window.getComputedStyle(element, null);
        return property ? css[
        /** @type {?} */
        property] : css;
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * Returns the parentNode or the host of the element
       * @param {?} element
       * @return {?}
       */


      function getParentNode(element) {
        if (element.nodeName === 'HTML') {
          return element;
        }

        return element.parentNode || element.host;
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} element
       * @return {?}
       */


      function getScrollParent(element) {
        // Return body, `getScroll` will take care to get the correct `scrollTop` from it
        if (!element) {
          return document.body;
        }

        switch (element.nodeName) {
          case 'HTML':
          case 'BODY':
            return element.ownerDocument.body;

          case '#document':
            return element.body;

          default:
        } // Firefox want us to check `-x` and `-y` variations as well


        var _getStyleComputedProp = getStyleComputedProperty(element),
            overflow = _getStyleComputedProp.overflow,
            overflowX = _getStyleComputedProp.overflowX,
            overflowY = _getStyleComputedProp.overflowY;

        if (/(auto|scroll|overlay)/.test(String(overflow) + String(overflowY) + String(overflowX))) {
          return element;
        }

        return getScrollParent(getParentNode(element));
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /** @type {?} */


      var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /** @type {?} */

      var isIE11 = isBrowser && !!(
      /** @type {?} */
      window.MSInputMethodContext &&
      /** @type {?} */
      document.documentMode);
      /** @type {?} */

      var isIE10 = isBrowser && !!(
      /** @type {?} */
      window.MSInputMethodContext && /MSIE 10/.test(
      /** @type {?} */
      navigator.userAgent));
      /**
       * @param {?=} version
       * @return {?}
       */

      function isIE(version) {
        if (version === 11) {
          return isIE11;
        }

        if (version === 10) {
          return isIE10;
        }

        return isIE11 || isIE10;
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} element
       * @return {?}
       */


      function getOffsetParent(element) {
        if (!element) {
          return document.documentElement;
        }
        /** @type {?} */


        var noOffsetParent = isIE(10) ? document.body : null; // NOTE: 1 DOM access here

        /** @type {?} */

        var offsetParent = element.offsetParent || null; // Skip hidden elements which don't have an offsetParent

        /** @type {?} */

        var sibling;

        while (offsetParent === noOffsetParent && element.nextElementSibling && sibling !== element.nextElementSibling) {
          sibling = element.nextElementSibling;
          offsetParent = sibling.offsetParent;
        }
        /** @type {?} */


        var nodeName = offsetParent && offsetParent.nodeName;

        if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
          return sibling ? sibling.ownerDocument.documentElement : document.documentElement;
        } // .offsetParent will return the closest TH, TD or TABLE in case


        if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {
          return getOffsetParent(offsetParent);
        }

        return offsetParent;
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} element
       * @return {?}
       */


      function isOffsetContainer(element) {
        var nodeName = element.nodeName;

        if (nodeName === 'BODY') {
          return false;
        }

        return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * Finds the root node (document, shadowDOM root) of the given element
       * @param {?} node
       * @return {?}
       */


      function getRoot(node) {
        if (node.parentNode !== null) {
          return getRoot(node.parentNode);
        }

        return node;
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} element1
       * @param {?} element2
       * @return {?}
       */


      function findCommonOffsetParent(element1, element2) {
        // This check is needed to avoid errors in case one of the elements isn't defined for any reason
        if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {
          return document.documentElement;
        } // Here we make sure to give as "start" the element that comes first in the DOM

        /* tslint:disable-next-line: no-bitwise */

        /** @type {?} */


        var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;
        /** @type {?} */

        var start = order ? element1 : element2;
        /** @type {?} */

        var end = order ? element2 : element1; // Get common ancestor container

        /** @type {?} */

        var range = document.createRange();
        range.setStart(start, 0);
        range.setEnd(end, 0);
        var commonAncestorContainer = range.commonAncestorContainer; // Both nodes are inside #document

        if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {
          if (isOffsetContainer(commonAncestorContainer)) {
            return commonAncestorContainer;
          }

          return getOffsetParent(commonAncestorContainer);
        } // one of the nodes is inside shadowDOM, find which one

        /** @type {?} */


        var element1root = getRoot(element1);

        if (element1root.host) {
          return findCommonOffsetParent(element1root.host, element2);
        } else {
          return findCommonOffsetParent(element1, getRoot(element2).host);
        }
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * Helper to detect borders of a given element
       */

      /**
       * @param {?} styles
       * @param {?} axis
       * @return {?}
       */


      function getBordersSize(styles, axis) {
        /** @type {?} */
        var sideA = axis === 'x' ? 'Left' : 'Top';
        /** @type {?} */

        var sideB = sideA === 'Left' ? 'Right' : 'Bottom';
        return parseFloat(styles[
        /** @type {?} */
        "border".concat(sideA, "Width")]) + parseFloat(styles[
        /** @type {?} */
        "border".concat(sideB, "Width")]);
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} axis
       * @param {?} body
       * @param {?} html
       * @param {?} computedStyle
       * @return {?}
       */


      function getSize(axis, body, html, computedStyle) {
        return Math.max(
        /** @type {?} */
        body["offset".concat(axis)],
        /** @type {?} */
        body["scroll".concat(axis)],
        /** @type {?} */
        html["client".concat(axis)],
        /** @type {?} */
        html["offset".concat(axis)],
        /** @type {?} */
        html["scroll".concat(axis)], isIE(10) ? parseInt(
        /** @type {?} */
        html["offset".concat(axis)], 10) + parseInt(computedStyle[
        /** @type {?} */
        "margin".concat(axis === 'Height' ? 'Top' : 'Left')], 10) + parseInt(computedStyle[
        /** @type {?} */
        "margin".concat(axis === 'Height' ? 'Bottom' : 'Right')], 10) : 0);
      }
      /**
       * @param {?} document
       * @return {?}
       */


      function getWindowSizes(document) {
        /** @type {?} */
        var body = document.body;
        /** @type {?} */

        var html = document.documentElement;
        /** @type {?} */

        var computedStyle = isIE(10) && getComputedStyle(html);
        return {
          height: getSize('Height', body, html, computedStyle),
          width: getSize('Width', body, html, computedStyle)
        };
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * Gets the scroll value of the given element in the given side (top and left)
       * @param {?} element
       * @param {?=} side
       * @return {?}
       */


      function getScroll(element) {
        var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';

        /** @type {?} */
        var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';
        /** @type {?} */

        var nodeName = element.nodeName;

        if (nodeName === 'BODY' || nodeName === 'HTML') {
          /** @type {?} */
          var html = element.ownerDocument.documentElement;
          /** @type {?} */

          var scrollingElement = element.ownerDocument.scrollingElement || html;
          return scrollingElement[upperSide];
        }

        return element[upperSide];
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} offsets
       * @return {?}
       */


      function getClientRect(offsets) {
        return Object.assign({}, offsets, {
          right: offsets.left + offsets.width,
          bottom: offsets.top + offsets.height
        });
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} element
       * @return {?}
       */


      function getBoundingClientRect(element) {
        /** @type {?} */
        var rect = {}; // IE10 10 FIX: Please, don't ask, the element isn't
        // considered in DOM in some circumstances...
        // This isn't reproducible in IE10 compatibility mode of IE11

        try {
          if (isIE(10)) {
            rect = element.getBoundingClientRect();
            /** @type {?} */

            var scrollTop = getScroll(element, 'top');
            /** @type {?} */

            var scrollLeft = getScroll(element, 'left');
            rect.top += scrollTop;
            rect.left += scrollLeft;
            rect.bottom += scrollTop;
            rect.right += scrollLeft;
          } else {
            rect = element.getBoundingClientRect();
          }
        } catch (e) {
          return undefined;
        }
        /** @type {?} */


        var result = {
          left: rect.left,
          top: rect.top,
          width: rect.right - rect.left,
          height: rect.bottom - rect.top
        }; // subtract scrollbar size from sizes

        /** @type {?} */

        var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};
        /** @type {?} */

        var width = sizes.width || element.clientWidth || result.right - result.left;
        /** @type {?} */

        var height = sizes.height || element.clientHeight || result.bottom - result.top;
        /** @type {?} */

        var horizScrollbar = element.offsetWidth - width;
        /** @type {?} */

        var vertScrollbar = element.offsetHeight - height; // if an hypothetical scrollbar is detected, we must be sure it's not a `border`
        // we make this check conditional for performance reasons

        if (horizScrollbar || vertScrollbar) {
          /** @type {?} */
          var styles = getStyleComputedProperty(element);
          horizScrollbar -= getBordersSize(styles, 'x');
          vertScrollbar -= getBordersSize(styles, 'y');
          result.width -= horizScrollbar;
          result.height -= vertScrollbar;
        }

        return getClientRect(result);
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} rect
       * @param {?} element
       * @param {?=} subtract
       * @return {?}
       */


      function includeScroll(rect, element) {
        var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;

        /** @type {?} */
        var scrollTop = getScroll(element, 'top');
        /** @type {?} */

        var scrollLeft = getScroll(element, 'left');
        /** @type {?} */

        var modifier = subtract ? -1 : 1;
        rect.top += scrollTop * modifier;
        rect.bottom += scrollTop * modifier;
        rect.left += scrollLeft * modifier;
        rect.right += scrollLeft * modifier;
        return rect;
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} children
       * @param {?} parent
       * @param {?=} fixedPosition
       * @return {?}
       */


      function getOffsetRectRelativeToArbitraryNode(children, parent) {
        var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;

        /** @type {?} */
        var isIE10 = isIE(10);
        /** @type {?} */

        var isHTML = parent.nodeName === 'HTML';
        /** @type {?} */

        var childrenRect = getBoundingClientRect(children);
        /** @type {?} */

        var parentRect = getBoundingClientRect(parent);
        /** @type {?} */

        var scrollParent = getScrollParent(children);
        /** @type {?} */

        var styles = getStyleComputedProperty(parent);
        /** @type {?} */

        var borderTopWidth = parseFloat(styles.borderTopWidth);
        /** @type {?} */

        var borderLeftWidth = parseFloat(styles.borderLeftWidth); // In cases where the parent is fixed, we must ignore negative scroll in offset calc

        if (fixedPosition && isHTML) {
          parentRect.top = Math.max(parentRect.top, 0);
          parentRect.left = Math.max(parentRect.left, 0);
        }
        /** @type {?} */


        var offsets = getClientRect({
          top: childrenRect.top - parentRect.top - borderTopWidth,
          left: childrenRect.left - parentRect.left - borderLeftWidth,
          width: childrenRect.width,
          height: childrenRect.height
        });
        offsets.marginTop = 0;
        offsets.marginLeft = 0; // Subtract margins of documentElement in case it's being used as parent
        // we do this only on HTML because it's the only element that behaves
        // differently when margins are applied to it. The margins are included in
        // the box of the documentElement, in the other cases not.

        if (!isIE10 && isHTML) {
          /** @type {?} */
          var marginTop = parseFloat(styles.marginTop);
          /** @type {?} */

          var marginLeft = parseFloat(styles.marginLeft);
          offsets.top -= borderTopWidth - marginTop;
          offsets.bottom -= borderTopWidth - marginTop;
          offsets.left -= borderLeftWidth - marginLeft;
          offsets.right -= borderLeftWidth - marginLeft; // Attach marginTop and marginLeft because in some circumstances we may need them

          offsets.marginTop = marginTop;
          offsets.marginLeft = marginLeft;
        }

        if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
          offsets = includeScroll(offsets, parent);
        }

        return offsets;
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} element
       * @param {?=} excludeScroll
       * @return {?}
       */


      function getViewportOffsetRectRelativeToArtbitraryNode(element) {
        var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;

        /** @type {?} */
        var html = element.ownerDocument.documentElement;
        /** @type {?} */

        var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
        /** @type {?} */

        var width = Math.max(html.clientWidth, window.innerWidth || 0);
        /** @type {?} */

        var height = Math.max(html.clientHeight, window.innerHeight || 0);
        /** @type {?} */

        var scrollTop = !excludeScroll ? getScroll(html) : 0;
        /** @type {?} */

        var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
        /** @type {?} */

        var offset = {
          top: scrollTop - Number(relativeOffset.top) + Number(relativeOffset.marginTop),
          left: scrollLeft - Number(relativeOffset.left) + Number(relativeOffset.marginLeft),
          width: width,
          height: height
        };
        return getClientRect(offset);
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} element
       * @return {?}
       */


      function isFixed(element) {
        /** @type {?} */
        var nodeName = element.nodeName;

        if (nodeName === 'BODY' || nodeName === 'HTML') {
          return false;
        }

        if (getStyleComputedProperty(element, 'position') === 'fixed') {
          return true;
        }

        return isFixed(getParentNode(element));
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} element
       * @return {?}
       */


      function getFixedPositionOffsetParent(element) {
        // This check is needed to avoid errors in case one of the elements isn't defined for any reason
        if (!element || !element.parentElement || isIE()) {
          return document.documentElement;
        }
        /** @type {?} */


        var el = element.parentElement;

        while (el && getStyleComputedProperty(el, 'transform') === 'none') {
          el = el.parentElement;
        }

        return el || document.documentElement;
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} target
       * @param {?} host
       * @param {?=} padding
       * @param {?=} boundariesElement
       * @param {?=} fixedPosition
       * @return {?}
       */


      function getBoundaries(target, host) {
        var padding = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
        var boundariesElement = arguments.length > 3 ? arguments[3] : undefined;
        var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
        // NOTE: 1 DOM access here
        // NOTE: 1 DOM access here

        /** @type {?} */
        var boundaries = {
          top: 0,
          left: 0
        };
        /** @type {?} */

        var offsetParent = fixedPosition ? getFixedPositionOffsetParent(target) : findCommonOffsetParent(target, host); // Handle viewport case

        if (boundariesElement === 'viewport') {
          boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
        } else {
          // Handle other cases based on DOM element used as boundaries

          /** @type {?} */
          var boundariesNode;

          if (boundariesElement === 'scrollParent') {
            boundariesNode = getScrollParent(getParentNode(host));

            if (boundariesNode.nodeName === 'BODY') {
              boundariesNode = target.ownerDocument.documentElement;
            }
          } else if (boundariesElement === 'window') {
            boundariesNode = target.ownerDocument.documentElement;
          } else {
            boundariesNode = boundariesElement;
          }
          /** @type {?} */


          var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition); // In case of HTML, we need a different computation

          if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
            var _getWindowSizes = getWindowSizes(target.ownerDocument),
                height = _getWindowSizes.height,
                width = _getWindowSizes.width;

            boundaries.top += offsets.top - offsets.marginTop;
            boundaries.bottom = Number(height) + Number(offsets.top);
            boundaries.left += offsets.left - offsets.marginLeft;
            boundaries.right = Number(width) + Number(offsets.left);
          } else {
            // for all the other DOM elements, this one is good
            boundaries = offsets;
          }
        } // Add paddings


        boundaries.left += padding;
        boundaries.top += padding;
        boundaries.right -= padding;
        boundaries.bottom -= padding;
        return boundaries;
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} __0
       * @return {?}
       */


      function getArea(_ref110) {
        var width = _ref110.width,
            height = _ref110.height;
        return width * height;
      }
      /**
       * @param {?} placement
       * @param {?} refRect
       * @param {?} target
       * @param {?} host
       * @param {?=} allowedPositions
       * @param {?=} boundariesElement
       * @param {?=} padding
       * @return {?}
       */


      function computeAutoPlacement(placement, refRect, target, host) {
        var allowedPositions = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : ['top', 'bottom', 'right', 'left'];
        var boundariesElement = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'viewport';
        var padding = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;

        if (placement.indexOf('auto') === -1) {
          return placement;
        }
        /** @type {?} */


        var boundaries = getBoundaries(target, host, padding, boundariesElement);
        /** @type {?} */

        var rects = {
          top: {
            width: boundaries.width,
            height: refRect.top - boundaries.top
          },
          right: {
            width: boundaries.right - refRect.right,
            height: boundaries.height
          },
          bottom: {
            width: boundaries.width,
            height: boundaries.bottom - refRect.bottom
          },
          left: {
            width: refRect.left - boundaries.left,
            height: boundaries.height
          }
        };
        /** @type {?} */

        var sortedAreas = Object.keys(rects).map(
        /**
        * @param {?} key
        * @return {?}
        */
        function (key) {
          return Object.assign({
            key: key
          }, rects[key], {
            area: getArea(rects[key])
          });
        }).sort(
        /**
        * @param {?} a
        * @param {?} b
        * @return {?}
        */
        function (a, b) {
          return b.area - a.area;
        });
        /** @type {?} */

        var filteredAreas = sortedAreas.filter(
        /**
        * @param {?} __0
        * @return {?}
        */
        function (_ref111) {
          var width = _ref111.width,
              height = _ref111.height;
          return width >= target.clientWidth && height >= target.clientHeight;
        });
        filteredAreas = filteredAreas.filter(
        /**
        * @param {?} position
        * @return {?}
        */
        function (position) {
          return allowedPositions.some(
          /**
          * @param {?} allowedPosition
          * @return {?}
          */
          function (allowedPosition) {
            return allowedPosition === position.key;
          });
        });
        /** @type {?} */

        var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;
        /** @type {?} */

        var variation = placement.split(' ')[1]; // for tooltip on auto position

        target.className = target.className.replace(/bs-tooltip-auto/g, "bs-tooltip-".concat(computedPlacement));
        return computedPlacement + (variation ? "-".concat(variation) : '');
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} data
       * @return {?}
       */


      function getOffsets(data) {
        return {
          width: data.offsets.target.width,
          height: data.offsets.target.height,
          left: Math.floor(data.offsets.target.left),
          top: Math.round(data.offsets.target.top),
          bottom: Math.round(data.offsets.target.bottom),
          right: Math.floor(data.offsets.target.right)
        };
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * Get the opposite placement of the given one
       * @param {?} placement
       * @return {?}
       */


      function getOppositePlacement(placement) {
        /** @type {?} */
        var hash = {
          left: 'right',
          right: 'left',
          bottom: 'top',
          top: 'bottom'
        };
        return placement.replace(/left|right|bottom|top/g,
        /**
        * @param {?} matched
        * @return {?}
        */
        function (matched) {
          return (
            /** @type {?} */
            hash[matched]
          );
        });
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * Get the opposite placement variation of the given one
       * @param {?} variation
       * @return {?}
       */


      function getOppositeVariation(variation) {
        if (variation === 'right') {
          return 'left';
        } else if (variation === 'left') {
          return 'right';
        }

        return variation;
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * Get the outer sizes of the given element (offset size + margins)
       * @param {?} element
       * @return {?}
       */


      function getOuterSizes(element) {
        /** @type {?} */
        var window = element.ownerDocument.defaultView;
        /** @type {?} */

        var styles = window.getComputedStyle(element);
        /** @type {?} */

        var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);
        /** @type {?} */

        var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);
        return {
          width: Number(element.offsetWidth) + y,
          height: Number(element.offsetHeight) + x
        };
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} target
       * @param {?} host
       * @param {?=} fixedPosition
       * @return {?}
       */


      function getReferenceOffsets(target, host) {
        var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;

        /** @type {?} */
        var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(target) : findCommonOffsetParent(target, host);
        return getOffsetRectRelativeToArbitraryNode(host, commonOffsetParent, fixedPosition);
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} target
       * @param {?} hostOffsets
       * @param {?} position
       * @return {?}
       */


      function getTargetOffsets(target, hostOffsets, position) {
        /** @type {?} */
        var placement = position.split(' ')[0]; // Get target node sizes

        /** @type {?} */

        var targetRect = getOuterSizes(target); // Add position, width and height to our offsets object

        /** @type {?} */

        var targetOffsets = {
          width: targetRect.width,
          height: targetRect.height
        }; // depending by the target placement we have to compute its offsets slightly differently

        /** @type {?} */

        var isHoriz = ['right', 'left'].indexOf(placement) !== -1;
        /** @type {?} */

        var mainSide = isHoriz ? 'top' : 'left';
        /** @type {?} */

        var secondarySide = isHoriz ? 'left' : 'top';
        /** @type {?} */

        var measurement = isHoriz ? 'height' : 'width';
        /** @type {?} */

        var secondaryMeasurement = !isHoriz ? 'height' : 'width';

        /** @type {?} */
        targetOffsets[mainSide] = hostOffsets[mainSide] + hostOffsets[measurement] / 2 - targetRect[measurement] / 2;

        /** @type {?} */
        targetOffsets[secondarySide] = placement === secondarySide ? hostOffsets[secondarySide] - targetRect[secondaryMeasurement] :
        /** @type {?} */
        hostOffsets[getOppositePlacement(secondarySide)];
        return targetOffsets;
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * Helper used to know if the given modifier is enabled.
       * @param {?} options
       * @param {?} modifierName
       * @return {?}
       */


      function isModifierEnabled(options, modifierName) {
        return options && options.modifiers && options.modifiers[modifierName] && options.modifiers[modifierName].enabled;
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * Tells if a given input is a number
       * @param {?} n
       * @return {?}
       */


      function isNumeric(n) {
        return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} data
       * @param {?=} renderer
       * @return {?}
       */


      function updateContainerClass(data, renderer) {
        /** @type {?} */
        var target = data.instance.target;
        /** @type {?} */

        var containerClass = target.className;

        if (data.placementAuto) {
          containerClass = containerClass.replace(/bs-popover-auto/g, "bs-popover-".concat(data.placement));
          containerClass = containerClass.replace(/bs-tooltip-auto/g, "bs-tooltip-".concat(data.placement));
          containerClass = containerClass.replace(/\sauto/g, " ".concat(data.placement));

          if (containerClass.indexOf('popover') !== -1 && containerClass.indexOf('popover-auto') === -1) {
            containerClass += ' popover-auto';
          }

          if (containerClass.indexOf('tooltip') !== -1 && containerClass.indexOf('tooltip-auto') === -1) {
            containerClass += ' tooltip-auto';
          }
        }

        containerClass = containerClass.replace(/left|right|top|bottom/g, "".concat(data.placement.split(' ')[0]));

        if (renderer) {
          renderer.setAttribute(target, 'class', containerClass);
          return;
        }

        target.className = containerClass;
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} element
       * @param {?} styles
       * @param {?=} renderer
       * @return {?}
       */


      function setStyles(element, styles, renderer) {
        Object.keys(styles).forEach(
        /**
        * @param {?} prop
        * @return {?}
        */
        function (prop) {
          /** @type {?} */
          var unit = ''; // add unit if the value is numeric and is one of the following

          if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {
            unit = 'px';
          }

          if (renderer) {
            renderer.setStyle(element, prop, "".concat(String(styles[prop])).concat(unit));
            return;
          }

          element.style[prop] = String(styles[prop]) + unit;
        });
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} data
       * @return {?}
       */


      function arrow(data) {
        var _data$offsets$arrow;

        /** @type {?} */
        var targetOffsets = data.offsets.target; // if arrowElement is a string, suppose it's a CSS selector

        /** @type {?} */

        var arrowElement = data.instance.target.querySelector('.arrow'); // if arrowElement is not found, don't run the modifier

        if (!arrowElement) {
          return data;
        }
        /** @type {?} */


        var isVertical = ['left', 'right'].indexOf(data.placement.split(' ')[0]) !== -1;
        /** @type {?} */

        var len = isVertical ? 'height' : 'width';
        /** @type {?} */

        var sideCapitalized = isVertical ? 'Top' : 'Left';
        /** @type {?} */

        var side = sideCapitalized.toLowerCase();
        /** @type {?} */

        var altSide = isVertical ? 'left' : 'top';
        /** @type {?} */

        var opSide = isVertical ? 'bottom' : 'right';
        /** @type {?} */

        var arrowElementSize = getOuterSizes(arrowElement)[len];
        /** @type {?} */

        var placementVariation = data.placement.split(' ')[1]; // top/left side

        if (data.offsets.host[opSide] - arrowElementSize <
        /** @type {?} */
        targetOffsets[side]) {
          /** @type {?} */
          targetOffsets[side] -=
          /** @type {?} */
          targetOffsets[side] - (data.offsets.host[opSide] - arrowElementSize);
        } // bottom/right side


        if (Number(
        /** @type {?} */
        data.offsets.host[side]) + Number(arrowElementSize) >
        /** @type {?} */
        targetOffsets[opSide]) {
          /** @type {?} */
          targetOffsets[side] += Number(
          /** @type {?} */
          data.offsets.host[side]) + Number(arrowElementSize) - Number(
          /** @type {?} */
          targetOffsets[opSide]);
        }

        targetOffsets = getClientRect(targetOffsets); // Compute the sideValue using the updated target offsets
        // take target margin in account because we don't have this info available

        /** @type {?} */

        var css = getStyleComputedProperty(data.instance.target);
        /** @type {?} */

        var targetMarginSide = parseFloat(css["margin".concat(sideCapitalized)]);
        /** @type {?} */

        var targetBorderSide = parseFloat(css["border".concat(sideCapitalized, "Width")]); // compute center of the target

        /** @type {?} */

        var center;

        if (!placementVariation) {
          center = Number(
          /** @type {?} */
          data.offsets.host[side]) + Number(data.offsets.host[len] / 2 - arrowElementSize / 2);
        } else {
          /** @type {?} */
          var targetBorderRadius = parseFloat(css.borderRadius);
          /** @type {?} */

          var targetSideArrowOffset = Number(targetMarginSide + targetBorderSide + targetBorderRadius);
          center = side === placementVariation ? Number(
          /** @type {?} */
          data.offsets.host[side]) + targetSideArrowOffset : Number(
          /** @type {?} */
          data.offsets.host[side]) + Number(data.offsets.host[len] - targetSideArrowOffset);
        }
        /** @type {?} */


        var sideValue = center -
        /** @type {?} */
        targetOffsets[side] - targetMarginSide - targetBorderSide; // prevent arrowElement from being placed not contiguously to its target

        sideValue = Math.max(Math.min(targetOffsets[len] - arrowElementSize, sideValue), 0);
        data.offsets.arrow = (_data$offsets$arrow = {}, _defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), _defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);
        data.instance.arrow = arrowElement;
        return data;
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} data
       * @return {?}
       */


      function flip(data) {
        data.offsets.target = getClientRect(data.offsets.target);

        if (!isModifierEnabled(data.options, 'flip')) {
          data.offsets.target = Object.assign({}, data.offsets.target, getTargetOffsets(data.instance.target, data.offsets.host, data.placement));
          return data;
        }
        /** @type {?} */


        var boundaries = getBoundaries(data.instance.target, data.instance.host, 0, // padding
        'viewport', false // positionFixed
        );
        /** @type {?} */

        var placement = data.placement.split(' ')[0];
        /** @type {?} */

        var variation = data.placement.split(' ')[1] || '';
        /** @type {?} */

        var offsetsHost = data.offsets.host;
        /** @type {?} */

        var target = data.instance.target;
        /** @type {?} */

        var host = data.instance.host;
        /** @type {?} */

        var adaptivePosition = computeAutoPlacement('auto', offsetsHost, target, host, data.options.allowedPositions);
        /** @type {?} */

        var flipOrder = [placement, adaptivePosition];
        /* tslint:disable-next-line: cyclomatic-complexity */

        flipOrder.forEach(
        /**
        * @param {?} step
        * @param {?} index
        * @return {?}
        */
        function (step, index) {
          if (placement !== step || flipOrder.length === index + 1) {
            return data;
          }

          placement = data.placement.split(' ')[0]; // using floor because the host offsets may contain decimals we are not going to consider here

          /** @type {?} */

          var overlapsRef = placement === 'left' && Math.floor(data.offsets.target.right) > Math.floor(data.offsets.host.left) || placement === 'right' && Math.floor(data.offsets.target.left) < Math.floor(data.offsets.host.right) || placement === 'top' && Math.floor(data.offsets.target.bottom) > Math.floor(data.offsets.host.top) || placement === 'bottom' && Math.floor(data.offsets.target.top) < Math.floor(data.offsets.host.bottom);
          /** @type {?} */

          var overflowsLeft = Math.floor(data.offsets.target.left) < Math.floor(boundaries.left);
          /** @type {?} */

          var overflowsRight = Math.floor(data.offsets.target.right) > Math.floor(boundaries.right);
          /** @type {?} */

          var overflowsTop = Math.floor(data.offsets.target.top) < Math.floor(boundaries.top);
          /** @type {?} */

          var overflowsBottom = Math.floor(data.offsets.target.bottom) > Math.floor(boundaries.bottom);
          /** @type {?} */

          var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom; // flip the variation if required

          /** @type {?} */

          var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;
          /** @type {?} */

          var flippedVariation = isVertical && variation === 'left' && overflowsLeft || isVertical && variation === 'right' && overflowsRight || !isVertical && variation === 'left' && overflowsTop || !isVertical && variation === 'right' && overflowsBottom;

          if (overlapsRef || overflowsBoundaries || flippedVariation) {
            if (overlapsRef || overflowsBoundaries) {
              placement = flipOrder[index + 1];
            }

            if (flippedVariation) {
              variation = getOppositeVariation(variation);
            }

            data.placement = placement + (variation ? " ".concat(variation) : '');
            data.offsets.target = Object.assign({}, data.offsets.target, getTargetOffsets(data.instance.target, data.offsets.host, data.placement));
          }
        });
        return data;
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} targetElement
       * @param {?} hostElement
       * @param {?} position
       * @param {?} options
       * @return {?}
       */


      function initData(targetElement, hostElement, position, options) {
        /** @type {?} */
        var hostElPosition = getReferenceOffsets(targetElement, hostElement);

        if (!position.match(/^(auto)*\s*(left|right|top|bottom)*$/) && !position.match(/^(left|right|top|bottom)*(?: (left|right|top|bottom))?\s*(start|end)*$/)) {
          /* tslint:disable-next-line: no-parameter-reassignment */
          position = 'auto';
        }
        /** @type {?} */


        var placementAuto = !!position.match(/auto/g); // support old placements 'auto left|right|top|bottom'

        /** @type {?} */

        var placement = position.match(/auto\s(left|right|top|bottom)/) ? position.split(' ')[1] || 'auto' : position; // Normalize placements that have identical main placement and variation ("right right" => "right").

        /** @type {?} */

        var matches = placement.match(/^(left|right|top|bottom)* ?(?!\1)(left|right|top|bottom)?/);

        if (matches) {
          placement = matches[1] + (matches[2] ? " ".concat(matches[2]) : '');
        } // "left right", "top bottom" etc. placements also considered incorrect.


        if (['left right', 'right left', 'top bottom', 'bottom top'].indexOf(placement) !== -1) {
          placement = 'auto';
        }
        /** @type {?} */


        var targetOffset = getTargetOffsets(targetElement, hostElPosition, placement);
        placement = computeAutoPlacement(placement, hostElPosition, targetElement, hostElement, options ? options.allowedPositions : undefined);
        return {
          options: options,
          instance: {
            target: targetElement,
            host: hostElement,
            arrow: null
          },
          offsets: {
            target: targetOffset,
            host: hostElPosition,
            arrow: null
          },
          positionFixed: false,
          placement: placement,
          placementAuto: placementAuto
        };
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} data
       * @return {?}
       */


      function preventOverflow(data) {
        if (!isModifierEnabled(data.options, 'preventOverflow')) {
          return data;
        } // NOTE: DOM access here
        // resets the targetOffsets's position so that the document size can be calculated excluding
        // the size of the targetOffsets element itself

        /** @type {?} */


        var transformProp = 'transform';
        /** @type {?} */

        var targetStyles = data.instance.target.style; // assignment to help minification

        var top = targetStyles.top,
            left = targetStyles.left,
            transform = targetStyles[transformProp];
        targetStyles.top = '';
        targetStyles.left = '';
        targetStyles[transformProp] = '';
        /** @type {?} */

        var boundaries = getBoundaries(data.instance.target, data.instance.host, 0, // padding
        'scrollParent', false // positionFixed
        ); // NOTE: DOM access here
        // restores the original style properties after the offsets have been computed

        targetStyles.top = top;
        targetStyles.left = left;
        targetStyles[transformProp] = transform;
        /** @type {?} */

        var order = ['left', 'right', 'top', 'bottom'];
        /** @type {?} */

        var check = {
          /**
           * @param {?} placement
           * @return {?}
           */
          primary: function primary(placement) {
            /** @type {?} */
            var value =
            /** @type {?} */
            data.offsets.target[placement];

            if (
            /** @type {?} */
            data.offsets.target[placement] < boundaries[placement] && !false // options.escapeWithReference
            ) {
                value = Math.max(
                /** @type {?} */
                data.offsets.target[placement], boundaries[placement]);
              }

            return _defineProperty({}, placement, value);
          },

          /**
           * @param {?} placement
           * @return {?}
           */
          secondary: function secondary(placement) {
            /** @type {?} */
            var mainSide = placement === 'right' ? 'left' : 'top';
            /** @type {?} */

            var value = data.offsets.target[mainSide];

            if (
            /** @type {?} */
            data.offsets.target[placement] > boundaries[placement] && !false // escapeWithReference
            ) {
                value = Math.min(data.offsets.target[mainSide], boundaries[placement] - (placement === 'right' ? data.offsets.target.width : data.offsets.target.height));
              }

            return _defineProperty({}, mainSide, value);
          }
        };
        /** @type {?} */

        var side;
        order.forEach(
        /**
        * @param {?} placement
        * @return {?}
        */
        function (placement) {
          side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';
          data.offsets.target = Object.assign({}, data.offsets.target,
          /** @type {?} */
          check[side](placement));
        });
        return data;
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} data
       * @return {?}
       */


      function shift(data) {
        /** @type {?} */
        var placement = data.placement;
        /** @type {?} */

        var basePlacement = placement.split(' ')[0];
        /** @type {?} */

        var shiftVariation = placement.split(' ')[1];

        if (shiftVariation) {
          var _data$offsets = data.offsets,
              host = _data$offsets.host,
              target = _data$offsets.target;
          /** @type {?} */

          var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;
          /** @type {?} */

          var side = isVertical ? 'left' : 'top';
          /** @type {?} */

          var measurement = isVertical ? 'width' : 'height';
          /** @type {?} */

          var shiftOffsets = {
            start: _defineProperty({}, side, host[side]),
            end: _defineProperty({}, side, host[side] + host[measurement] - target[measurement])
          };
          data.offsets.target = Object.assign({}, target, _defineProperty({}, side, side === shiftVariation ?
          /** @type {?} */
          shiftOffsets.start[side] :
          /** @type {?} */
          shiftOffsets.end[side]));
        }

        return data;
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var Positioning = /*#__PURE__*/function () {
        function Positioning() {
          _classCallCheck2(this, Positioning);
        }

        _createClass2(Positioning, [{
          key: "position",
          value:
          /**
           * @param {?} hostElement
           * @param {?} targetElement
           * @param {?=} round
           * @return {?}
           */
          function position(hostElement, targetElement) {
            var round = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
            return this.offset(hostElement, targetElement, false);
          }
          /**
           * @param {?} hostElement
           * @param {?} targetElement
           * @param {?=} round
           * @return {?}
           */

        }, {
          key: "offset",
          value: function offset(hostElement, targetElement) {
            var round = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
            return getReferenceOffsets(targetElement, hostElement);
          }
          /**
           * @param {?} hostElement
           * @param {?} targetElement
           * @param {?} position
           * @param {?=} appendToBody
           * @param {?=} options
           * @return {?}
           */

        }, {
          key: "positionElements",
          value: function positionElements(hostElement, targetElement, position, appendToBody, options) {
            /** @type {?} */
            var chainOfModifiers = [flip, shift, preventOverflow, arrow];
            return chainOfModifiers.reduce(
            /**
            * @param {?} modifiedData
            * @param {?} modifier
            * @return {?}
            */
            function (modifiedData, modifier) {
              return modifier(modifiedData);
            }, initData(targetElement, hostElement, position, options));
          }
        }]);

        return Positioning;
      }();
      /** @type {?} */


      var positionService = new Positioning();
      /**
       * @param {?} hostElement
       * @param {?} targetElement
       * @param {?} placement
       * @param {?=} appendToBody
       * @param {?=} options
       * @param {?=} renderer
       * @return {?}
       */

      function positionElements(hostElement, targetElement, placement, appendToBody, options, renderer) {
        /** @type {?} */
        var data = positionService.positionElements(hostElement, targetElement, placement, appendToBody, options);
        /** @type {?} */

        var offsets = getOffsets(data);
        setStyles(targetElement, {
          'will-change': 'transform',
          top: '0px',
          left: '0px',
          transform: "translate3d(".concat(offsets.left, "px, ").concat(offsets.top, "px, 0px)")
        }, renderer);

        if (data.instance.arrow) {
          setStyles(data.instance.arrow, data.offsets.arrow, renderer);
        }

        updateContainerClass(data, renderer);
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @record
       */


      function PositioningOptions() {}

      if (false) {}

      var PositioningService = /*#__PURE__*/function () {
        /**
         * @param {?} ngZone
         * @param {?} rendererFactory
         * @param {?} platformId
         */
        function PositioningService(ngZone, rendererFactory, platformId) {
          var _this606 = this;

          _classCallCheck2(this, PositioningService);

          this.update$$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          this.positionElements = new Map();
          this.isDisabled = false;

          if (Object(_angular_common__WEBPACK_IMPORTED_MODULE_1__["isPlatformBrowser"])(platformId)) {
            ngZone.runOutsideAngular(
            /**
            * @return {?}
            */
            function () {
              _this606.triggerEvent$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["merge"])(Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(window, 'scroll', {
                passive: true
              }), Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(window, 'resize', {
                passive: true
              }),
              /* tslint:disable-next-line: deprecation */
              Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(0, rxjs__WEBPACK_IMPORTED_MODULE_2__["animationFrameScheduler"]), _this606.update$$);

              _this606.triggerEvent$.subscribe(
              /**
              * @return {?}
              */
              function () {
                if (_this606.isDisabled) {
                  return;
                }

                _this606.positionElements
                /* tslint:disable-next-line: no-any */
                .forEach(
                /**
                * @param {?} positionElement
                * @return {?}
                */
                function (positionElement) {
                  positionElements(_getHtmlElement(positionElement.target), _getHtmlElement(positionElement.element), positionElement.attachment, positionElement.appendToBody, _this606.options, rendererFactory.createRenderer(null, null));
                });
              });
            });
          }
        }
        /**
         * @param {?} options
         * @return {?}
         */


        _createClass2(PositioningService, [{
          key: "position",
          value: function position(options) {
            this.addPositionElement(options);
          }
          /**
           * @return {?}
           */

        }, {
          key: "event$",
          get: function get() {
            return this.triggerEvent$;
          }
          /**
           * @return {?}
           */

        }, {
          key: "disable",
          value: function disable() {
            this.isDisabled = true;
          }
          /**
           * @return {?}
           */

        }, {
          key: "enable",
          value: function enable() {
            this.isDisabled = false;
          }
          /**
           * @param {?} options
           * @return {?}
           */

        }, {
          key: "addPositionElement",
          value: function addPositionElement(options) {
            this.positionElements.set(_getHtmlElement(options.element), options);
          }
          /**
           * @return {?}
           */

        }, {
          key: "calcPosition",
          value: function calcPosition() {
            this.update$$.next();
          }
          /**
           * @param {?} elRef
           * @return {?}
           */

        }, {
          key: "deletePositionElement",
          value: function deletePositionElement(elRef) {
            this.positionElements["delete"](_getHtmlElement(elRef));
          }
          /**
           * @param {?} options
           * @return {?}
           */

        }, {
          key: "setOptions",
          value: function setOptions(options) {
            this.options = options;
          }
        }]);

        return PositioningService;
      }();

      PositioningService.ɵfac = function PositioningService_Factory(t) {
        return new (t || PositioningService)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]));
      };

      PositioningService.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: PositioningService,
        factory: PositioningService.ɵfac
      });
      /** @nocollapse */

      PositioningService.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"]
        }, {
          type: Number,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](PositioningService, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["RendererFactory2"]
          }, {
            type: Number,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]]
            }]
          }];
        }, null);
      })();

      if (false) {}
      /**
       * @param {?} element
       * @return {?}
       */


      function _getHtmlElement(element) {
        // it means that we got a selector
        if (typeof element === 'string') {
          return document.querySelector(element);
        }

        if (element instanceof _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]) {
          return element.nativeElement;
        }

        return element;
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */
      //# sourceMappingURL=ngx-bootstrap-positioning.js.map

      /***/

    },

    /***/
    "X709":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/sv.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function X709(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Swedish [sv]
      //! author : Jens Alm : https://github.com/ulmus
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var sv = moment.defineLocale('sv', {
          months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),
          monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
          weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),
          weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'),
          weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [kl.] HH:mm',
            LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',
            lll: 'D MMM YYYY HH:mm',
            llll: 'ddd D MMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[Idag] LT',
            nextDay: '[Imorgon] LT',
            lastDay: '[Igår] LT',
            nextWeek: '[På] dddd LT',
            lastWeek: '[I] dddd[s] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'om %s',
            past: 'för %s sedan',
            s: 'några sekunder',
            ss: '%d sekunder',
            m: 'en minut',
            mm: '%d minuter',
            h: 'en timme',
            hh: '%d timmar',
            d: 'en dag',
            dd: '%d dagar',
            M: 'en månad',
            MM: '%d månader',
            y: 'ett år',
            yy: '%d år'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(\:e|\:a)/,
          ordinal: function ordinal(number) {
            var b = number % 10,
                output = ~~(number % 100 / 10) === 1 ? ':e' : b === 1 ? ':a' : b === 2 ? ':a' : b === 3 ? ':e' : ':e';
            return number + output;
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return sv;
      });
      /***/

    },

    /***/
    "XDbj":
    /*!***********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/throwIfEmpty.js ***!
      \***********************************************************************/

    /*! exports provided: throwIfEmpty */

    /***/
    function XDbj(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "throwIfEmpty", function () {
        return throwIfEmpty;
      });
      /* harmony import */


      var _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../util/EmptyError */
      "sVev");
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");

      function throwIfEmpty() {
        var errorFactory = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultErrorFactory;
        return function (source) {
          return source.lift(new ThrowIfEmptyOperator(errorFactory));
        };
      }

      var ThrowIfEmptyOperator = /*#__PURE__*/function () {
        function ThrowIfEmptyOperator(errorFactory) {
          _classCallCheck2(this, ThrowIfEmptyOperator);

          this.errorFactory = errorFactory;
        }

        _createClass2(ThrowIfEmptyOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new ThrowIfEmptySubscriber(subscriber, this.errorFactory));
          }
        }]);

        return ThrowIfEmptyOperator;
      }();

      var ThrowIfEmptySubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_24) {
        _inherits2(ThrowIfEmptySubscriber, _Subscriber__WEBPACK_24);

        var _super259 = _createSuper(ThrowIfEmptySubscriber);

        function ThrowIfEmptySubscriber(destination, errorFactory) {
          var _this607;

          _classCallCheck2(this, ThrowIfEmptySubscriber);

          _this607 = _super259.call(this, destination);
          _this607.errorFactory = errorFactory;
          _this607.hasValue = false;
          return _this607;
        }

        _createClass2(ThrowIfEmptySubscriber, [{
          key: "_next",
          value: function _next(value) {
            this.hasValue = true;
            this.destination.next(value);
          }
        }, {
          key: "_complete",
          value: function _complete() {
            if (!this.hasValue) {
              var err;

              try {
                err = this.errorFactory();
              } catch (e) {
                err = e;
              }

              this.destination.error(err);
            } else {
              return this.destination.complete();
            }
          }
        }]);

        return ThrowIfEmptySubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]);

      function defaultErrorFactory() {
        return new _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__["EmptyError"]();
      } //# sourceMappingURL=throwIfEmpty.js.map

      /***/

    },

    /***/
    "XDpg":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/zh-cn.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function XDpg(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Chinese (China) [zh-cn]
      //! author : suupic : https://github.com/suupic
      //! author : Zeno Zeng : https://github.com/zenozeng
      //! author : uu109 : https://github.com/uu109
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var zhCn = moment.defineLocale('zh-cn', {
          months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
          monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
          weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
          weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),
          weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY/MM/DD',
            LL: 'YYYY年M月D日',
            LLL: 'YYYY年M月D日Ah点mm分',
            LLLL: 'YYYY年M月D日ddddAh点mm分',
            l: 'YYYY/M/D',
            ll: 'YYYY年M月D日',
            lll: 'YYYY年M月D日 HH:mm',
            llll: 'YYYY年M月D日dddd HH:mm'
          },
          meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
              return hour;
            } else if (meridiem === '下午' || meridiem === '晚上') {
              return hour + 12;
            } else {
              // '中午'
              return hour >= 11 ? hour : hour + 12;
            }
          },
          meridiem: function meridiem(hour, minute, isLower) {
            var hm = hour * 100 + minute;

            if (hm < 600) {
              return '凌晨';
            } else if (hm < 900) {
              return '早上';
            } else if (hm < 1130) {
              return '上午';
            } else if (hm < 1230) {
              return '中午';
            } else if (hm < 1800) {
              return '下午';
            } else {
              return '晚上';
            }
          },
          calendar: {
            sameDay: '[今天]LT',
            nextDay: '[明天]LT',
            nextWeek: function nextWeek(now) {
              if (now.week() !== this.week()) {
                return '[下]dddLT';
              } else {
                return '[本]dddLT';
              }
            },
            lastDay: '[昨天]LT',
            lastWeek: function lastWeek(now) {
              if (this.week() !== now.week()) {
                return '[上]dddLT';
              } else {
                return '[本]dddLT';
              }
            },
            sameElse: 'L'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/,
          ordinal: function ordinal(number, period) {
            switch (period) {
              case 'd':
              case 'D':
              case 'DDD':
                return number + '日';

              case 'M':
                return number + '月';

              case 'w':
              case 'W':
                return number + '周';

              default:
                return number;
            }
          },
          relativeTime: {
            future: '%s后',
            past: '%s前',
            s: '几秒',
            ss: '%d 秒',
            m: '1 分钟',
            mm: '%d 分钟',
            h: '1 小时',
            hh: '%d 小时',
            d: '1 天',
            dd: '%d 天',
            w: '1 周',
            ww: '%d 周',
            M: '1 个月',
            MM: '%d 个月',
            y: '1 年',
            yy: '%d 年'
          },
          week: {
            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return zhCn;
      });
      /***/

    },

    /***/
    "XLvN":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/te.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function XLvN(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Telugu [te]
      //! author : Krishna Chaitanya Thota : https://github.com/kcthota
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var te = moment.defineLocale('te', {
          months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),
          monthsShort: 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),
          monthsParseExact: true,
          weekdays: 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),
          weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),
          weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),
          longDateFormat: {
            LT: 'A h:mm',
            LTS: 'A h:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm',
            LLLL: 'dddd, D MMMM YYYY, A h:mm'
          },
          calendar: {
            sameDay: '[నేడు] LT',
            nextDay: '[రేపు] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[నిన్న] LT',
            lastWeek: '[గత] dddd, LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s లో',
            past: '%s క్రితం',
            s: 'కొన్ని క్షణాలు',
            ss: '%d సెకన్లు',
            m: 'ఒక నిమిషం',
            mm: '%d నిమిషాలు',
            h: 'ఒక గంట',
            hh: '%d గంటలు',
            d: 'ఒక రోజు',
            dd: '%d రోజులు',
            M: 'ఒక నెల',
            MM: '%d నెలలు',
            y: 'ఒక సంవత్సరం',
            yy: '%d సంవత్సరాలు'
          },
          dayOfMonthOrdinalParse: /\d{1,2}వ/,
          ordinal: '%dవ',
          meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === 'రాత్రి') {
              return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'ఉదయం') {
              return hour;
            } else if (meridiem === 'మధ్యాహ్నం') {
              return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'సాయంత్రం') {
              return hour + 12;
            }
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 4) {
              return 'రాత్రి';
            } else if (hour < 10) {
              return 'ఉదయం';
            } else if (hour < 17) {
              return 'మధ్యాహ్నం';
            } else if (hour < 20) {
              return 'సాయంత్రం';
            } else {
              return 'రాత్రి';
            }
          },
          week: {
            dow: 0,
            // Sunday is the first day of the week.
            doy: 6 // The week that contains Jan 6th is the first week of the year.

          }
        });
        return te;
      });
      /***/

    },

    /***/
    "XNiG":
    /*!********************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/Subject.js ***!
      \********************************************************/

    /*! exports provided: SubjectSubscriber, Subject, AnonymousSubject */

    /***/
    function XNiG(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SubjectSubscriber", function () {
        return SubjectSubscriber;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Subject", function () {
        return Subject;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AnonymousSubject", function () {
        return AnonymousSubject;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./Observable */
      "HDdC");
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./Subscriber */
      "7o/Q");
      /* harmony import */


      var _Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./Subscription */
      "quSY");
      /* harmony import */


      var _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./util/ObjectUnsubscribedError */
      "9ppp");
      /* harmony import */


      var _SubjectSubscription__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ./SubjectSubscription */
      "Ylt2");
      /* harmony import */


      var _internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! ../internal/symbol/rxSubscriber */
      "2QA8");

      var SubjectSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_25) {
        _inherits2(SubjectSubscriber, _Subscriber__WEBPACK_25);

        var _super260 = _createSuper(SubjectSubscriber);

        function SubjectSubscriber(destination) {
          var _this608;

          _classCallCheck2(this, SubjectSubscriber);

          _this608 = _super260.call(this, destination);
          _this608.destination = destination;
          return _this608;
        }

        return SubjectSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]);

      var Subject = /*#__PURE__*/function (_Observable__WEBPACK_4, _internal_symbol_rxSu2) {
        _inherits2(Subject, _Observable__WEBPACK_4);

        var _super261 = _createSuper(Subject);

        function Subject() {
          var _this609;

          _classCallCheck2(this, Subject);

          _this609 = _super261.call(this);
          _this609.observers = [];
          _this609.closed = false;
          _this609.isStopped = false;
          _this609.hasError = false;
          _this609.thrownError = null;
          return _this609;
        }

        _createClass2(Subject, [{
          key: _internal_symbol_rxSu2,
          value: function value() {
            return new SubjectSubscriber(this);
          }
        }, {
          key: "lift",
          value: function lift(operator) {
            var subject = new AnonymousSubject(this, this);
            subject.operator = operator;
            return subject;
          }
        }, {
          key: "next",
          value: function next(value) {
            if (this.closed) {
              throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__["ObjectUnsubscribedError"]();
            }

            if (!this.isStopped) {
              var observers = this.observers;
              var len = observers.length;
              var copy = observers.slice();

              for (var i = 0; i < len; i++) {
                copy[i].next(value);
              }
            }
          }
        }, {
          key: "error",
          value: function error(err) {
            if (this.closed) {
              throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__["ObjectUnsubscribedError"]();
            }

            this.hasError = true;
            this.thrownError = err;
            this.isStopped = true;
            var observers = this.observers;
            var len = observers.length;
            var copy = observers.slice();

            for (var i = 0; i < len; i++) {
              copy[i].error(err);
            }

            this.observers.length = 0;
          }
        }, {
          key: "complete",
          value: function complete() {
            if (this.closed) {
              throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__["ObjectUnsubscribedError"]();
            }

            this.isStopped = true;
            var observers = this.observers;
            var len = observers.length;
            var copy = observers.slice();

            for (var i = 0; i < len; i++) {
              copy[i].complete();
            }

            this.observers.length = 0;
          }
        }, {
          key: "unsubscribe",
          value: function unsubscribe() {
            this.isStopped = true;
            this.closed = true;
            this.observers = null;
          }
        }, {
          key: "_trySubscribe",
          value: function _trySubscribe(subscriber) {
            if (this.closed) {
              throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__["ObjectUnsubscribedError"]();
            } else {
              return _get2(_getPrototypeOf2(Subject.prototype), "_trySubscribe", this).call(this, subscriber);
            }
          }
        }, {
          key: "_subscribe",
          value: function _subscribe(subscriber) {
            if (this.closed) {
              throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__["ObjectUnsubscribedError"]();
            } else if (this.hasError) {
              subscriber.error(this.thrownError);
              return _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"].EMPTY;
            } else if (this.isStopped) {
              subscriber.complete();
              return _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"].EMPTY;
            } else {
              this.observers.push(subscriber);
              return new _SubjectSubscription__WEBPACK_IMPORTED_MODULE_4__["SubjectSubscription"](this, subscriber);
            }
          }
        }, {
          key: "asObservable",
          value: function asObservable() {
            var observable = new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]();
            observable.source = this;
            return observable;
          }
        }]);

        return Subject;
      }(_Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"], _internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_5__["rxSubscriber"]);

      Subject.create = function (destination, source) {
        return new AnonymousSubject(destination, source);
      };

      var AnonymousSubject = /*#__PURE__*/function (_Subject) {
        _inherits2(AnonymousSubject, _Subject);

        var _super262 = _createSuper(AnonymousSubject);

        function AnonymousSubject(destination, source) {
          var _this610;

          _classCallCheck2(this, AnonymousSubject);

          _this610 = _super262.call(this);
          _this610.destination = destination;
          _this610.source = source;
          return _this610;
        }

        _createClass2(AnonymousSubject, [{
          key: "next",
          value: function next(value) {
            var destination = this.destination;

            if (destination && destination.next) {
              destination.next(value);
            }
          }
        }, {
          key: "error",
          value: function error(err) {
            var destination = this.destination;

            if (destination && destination.error) {
              this.destination.error(err);
            }
          }
        }, {
          key: "complete",
          value: function complete() {
            var destination = this.destination;

            if (destination && destination.complete) {
              this.destination.complete();
            }
          }
        }, {
          key: "_subscribe",
          value: function _subscribe(subscriber) {
            var source = this.source;

            if (source) {
              return this.source.subscribe(subscriber);
            } else {
              return _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"].EMPTY;
            }
          }
        }]);

        return AnonymousSubject;
      }(Subject); //# sourceMappingURL=Subject.js.map

      /***/

    },

    /***/
    "XoHu":
    /*!**************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/isObject.js ***!
      \**************************************************************/

    /*! exports provided: isObject */

    /***/
    function XoHu(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isObject", function () {
        return isObject;
      });

      function isObject(x) {
        return x !== null && typeof x === 'object';
      } //# sourceMappingURL=isObject.js.map

      /***/

    },

    /***/
    "XoYk":
    /*!************************************************************************************!*\
      !*** ./node_modules/@angular/fire/__ivy_ngcc__/fesm2015/angular-fire-messaging.js ***!
      \************************************************************************************/

    /*! exports provided: AngularFireMessaging, AngularFireMessagingModule, SERVICE_WORKER, VAPID_KEY */

    /***/
    function XoYk(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AngularFireMessaging", function () {
        return AngularFireMessaging;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AngularFireMessagingModule", function () {
        return AngularFireMessagingModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SERVICE_WORKER", function () {
        return SERVICE_WORKER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "VAPID_KEY", function () {
        return VAPID_KEY;
      });
      /* harmony import */


      var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! tslib */
      "Tr+X");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var firebase_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! firebase/app */
      "Jgta");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var _angular_fire__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @angular/fire */
      "spgP");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");

      var proxyPolyfillCompat = {
        deleteToken: null,
        getToken: null,
        onMessage: null,
        onBackgroundMessage: null,
        onTokenRefresh: null,
        requestPermission: null,
        setBackgroundMessageHandler: null,
        useServiceWorker: null,
        usePublicVapidKey: null
      };
      var VAPID_KEY = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('angularfire2.messaging.vapid-key');
      var SERVICE_WORKER = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('angularfire2.messaging.service-worker-registeration'); // SEMVER(7): drop

      var firebaseLTv8 = parseInt(firebase_app__WEBPACK_IMPORTED_MODULE_2__["default"].SDK_VERSION, 10) < 8;

      var AngularFireMessaging = function AngularFireMessaging(options, nameOrConfig, // tslint:disable-next-line:ban-types
      platformId, zone, vapidKey, _serviceWorker) {
        var _this611 = this;

        _classCallCheck2(this, AngularFireMessaging);

        var schedulers = new _angular_fire__WEBPACK_IMPORTED_MODULE_5__["ɵAngularFireSchedulers"](zone);
        var serviceWorker = _serviceWorker;
        var messaging = Object(rxjs__WEBPACK_IMPORTED_MODULE_3__["of"])(undefined).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["subscribeOn"])(schedulers.outsideAngular), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["observeOn"])(schedulers.insideAngular), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["switchMap"])(function () {
          return Object(_angular_common__WEBPACK_IMPORTED_MODULE_6__["isPlatformServer"])(platformId) ? rxjs__WEBPACK_IMPORTED_MODULE_3__["EMPTY"] : __webpack_require__.e(
          /*! import() | firebase-messaging */
          "firebase-messaging").then(__webpack_require__.bind(null,
          /*! firebase/messaging */
          "dB9c"));
        }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["map"])(function () {
          return Object(_angular_fire__WEBPACK_IMPORTED_MODULE_5__["ɵfirebaseAppFactory"])(options, zone, nameOrConfig);
        }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["switchMap"])(function (app) {
          return Object(_angular_fire__WEBPACK_IMPORTED_MODULE_5__["ɵfetchInstance"])("".concat(app.name, ".messaging"), 'AngularFireMessaging', app, function () {
            return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(_this611, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
              var messaging;
              return regeneratorRuntime.wrap(function _callee$(_context3) {
                while (1) {
                  switch (_context3.prev = _context3.next) {
                    case 0:
                      messaging = app.messaging();

                      if (!firebaseLTv8) {
                        _context3.next = 9;
                        break;
                      }

                      if (vapidKey) {
                        messaging.usePublicVapidKey(vapidKey);
                      }

                      if (!serviceWorker) {
                        _context3.next = 9;
                        break;
                      }

                      _context3.t0 = messaging;
                      _context3.next = 7;
                      return serviceWorker;

                    case 7:
                      _context3.t1 = _context3.sent;

                      _context3.t0.useServiceWorker.call(_context3.t0, _context3.t1);

                    case 9:
                      return _context3.abrupt("return", messaging);

                    case 10:
                    case "end":
                      return _context3.stop();
                  }
                }
              }, _callee);
            }));
          }, [vapidKey, serviceWorker]);
        }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["shareReplay"])({
          bufferSize: 1,
          refCount: false
        }));
        this.requestPermission = messaging.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["subscribeOn"])(schedulers.outsideAngular), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["observeOn"])(schedulers.insideAngular), // tslint:disable-next-line
        Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["switchMap"])(function (messaging) {
          return firebase_app__WEBPACK_IMPORTED_MODULE_2__["default"].messaging.isSupported() ? messaging.requestPermission() : Object(rxjs__WEBPACK_IMPORTED_MODULE_3__["throwError"])('Not supported.');
        }));
        this.getToken = messaging.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["subscribeOn"])(schedulers.outsideAngular), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["observeOn"])(schedulers.insideAngular), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["switchMap"])(function (messaging) {
          return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(_this611, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
            var serviceWorkerRegistration;
            return regeneratorRuntime.wrap(function _callee2$(_context4) {
              while (1) {
                switch (_context4.prev = _context4.next) {
                  case 0:
                    if (!(firebase_app__WEBPACK_IMPORTED_MODULE_2__["default"].messaging.isSupported() && Notification.permission === 'granted')) {
                      _context4.next = 20;
                      break;
                    }

                    if (!firebaseLTv8) {
                      _context4.next = 7;
                      break;
                    }

                    _context4.next = 4;
                    return messaging.getToken();

                  case 4:
                    return _context4.abrupt("return", _context4.sent);

                  case 7:
                    if (!serviceWorker) {
                      _context4.next = 13;
                      break;
                    }

                    _context4.next = 10;
                    return serviceWorker;

                  case 10:
                    _context4.t0 = _context4.sent;
                    _context4.next = 14;
                    break;

                  case 13:
                    _context4.t0 = null;

                  case 14:
                    serviceWorkerRegistration = _context4.t0;
                    _context4.next = 17;
                    return messaging.getToken({
                      vapidKey: vapidKey,
                      serviceWorkerRegistration: serviceWorkerRegistration
                    });

                  case 17:
                    return _context4.abrupt("return", _context4.sent);

                  case 18:
                    _context4.next = 21;
                    break;

                  case 20:
                    return _context4.abrupt("return", null);

                  case 21:
                  case "end":
                    return _context4.stop();
                }
              }
            }, _callee2);
          }));
        }));
        var notificationPermission$ = new rxjs__WEBPACK_IMPORTED_MODULE_3__["Observable"](function (emitter) {
          navigator.permissions.query({
            name: 'notifications'
          }).then(function (notificationPerm) {
            notificationPerm.onchange = function () {
              return emitter.next();
            };
          });
        });
        var tokenChange$ = messaging.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["subscribeOn"])(schedulers.outsideAngular), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["observeOn"])(schedulers.insideAngular), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["switchMapTo"])(notificationPermission$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["switchMapTo"])(this.getToken));
        this.tokenChanges = messaging.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["subscribeOn"])(schedulers.outsideAngular), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["observeOn"])(schedulers.insideAngular), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["switchMap"])(function () {
          return firebase_app__WEBPACK_IMPORTED_MODULE_2__["default"].messaging.isSupported() ? Object(rxjs__WEBPACK_IMPORTED_MODULE_3__["concat"])(_this611.getToken, tokenChange$) : rxjs__WEBPACK_IMPORTED_MODULE_3__["EMPTY"];
        }));
        this.messages = messaging.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["subscribeOn"])(schedulers.outsideAngular), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["observeOn"])(schedulers.insideAngular), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["switchMap"])(function (messaging) {
          return firebase_app__WEBPACK_IMPORTED_MODULE_2__["default"].messaging.isSupported() ? new rxjs__WEBPACK_IMPORTED_MODULE_3__["Observable"](function (emitter) {
            return messaging.onMessage(function (next) {
              return emitter.next(next);
            }, function (err) {
              return emitter.error(err);
            }, function () {
              return emitter.complete();
            });
          }) : rxjs__WEBPACK_IMPORTED_MODULE_3__["EMPTY"];
        }));
        this.requestToken = Object(rxjs__WEBPACK_IMPORTED_MODULE_3__["of"])(undefined).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["subscribeOn"])(schedulers.outsideAngular), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["observeOn"])(schedulers.insideAngular), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["switchMap"])(function () {
          return _this611.requestPermission;
        }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["catchError"])(function () {
          return Object(rxjs__WEBPACK_IMPORTED_MODULE_3__["of"])(null);
        }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["mergeMap"])(function () {
          return _this611.tokenChanges;
        })); // SEMVER(7): drop token

        this.deleteToken = function (token) {
          return messaging.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["subscribeOn"])(schedulers.outsideAngular), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["observeOn"])(schedulers.insideAngular), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["switchMap"])(function (messaging) {
            return messaging.deleteToken(token || undefined);
          }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["defaultIfEmpty"])(false));
        };

        return Object(_angular_fire__WEBPACK_IMPORTED_MODULE_5__["ɵlazySDKProxy"])(this, messaging, zone);
      };

      AngularFireMessaging.ɵfac = function AngularFireMessaging_Factory(t) {
        return new (t || AngularFireMessaging)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_fire__WEBPACK_IMPORTED_MODULE_5__["FIREBASE_OPTIONS"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_fire__WEBPACK_IMPORTED_MODULE_5__["FIREBASE_APP_NAME"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["PLATFORM_ID"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](VAPID_KEY, 8), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](SERVICE_WORKER, 8));
      };
      /** @nocollapse */


      AngularFireMessaging.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({
        factory: function AngularFireMessaging_Factory() {
          return new AngularFireMessaging(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_fire__WEBPACK_IMPORTED_MODULE_5__["FIREBASE_OPTIONS"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_fire__WEBPACK_IMPORTED_MODULE_5__["FIREBASE_APP_NAME"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["PLATFORM_ID"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](VAPID_KEY, 8), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](SERVICE_WORKER, 8));
        },
        token: AngularFireMessaging,
        providedIn: "any"
      });
      /** @nocollapse */

      AngularFireMessaging.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_fire__WEBPACK_IMPORTED_MODULE_5__["FIREBASE_OPTIONS"]]
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_fire__WEBPACK_IMPORTED_MODULE_5__["FIREBASE_APP_NAME"]]
          }]
        }, {
          type: Object,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["PLATFORM_ID"]]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [VAPID_KEY]
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [SERVICE_WORKER]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](AngularFireMessaging, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'any'
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_fire__WEBPACK_IMPORTED_MODULE_5__["FIREBASE_OPTIONS"]]
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_fire__WEBPACK_IMPORTED_MODULE_5__["FIREBASE_APP_NAME"]]
            }]
          }, {
            type: Object,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["PLATFORM_ID"]]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [VAPID_KEY]
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [SERVICE_WORKER]
            }]
          }];
        }, null);
      })();

      Object(_angular_fire__WEBPACK_IMPORTED_MODULE_5__["ɵapplyMixins"])(AngularFireMessaging, [proxyPolyfillCompat]);

      var AngularFireMessagingModule = function AngularFireMessagingModule() {
        _classCallCheck2(this, AngularFireMessagingModule);
      };

      AngularFireMessagingModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({
        type: AngularFireMessagingModule
      });
      AngularFireMessagingModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({
        factory: function AngularFireMessagingModule_Factory(t) {
          return new (t || AngularFireMessagingModule)();
        },
        providers: [AngularFireMessaging]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](AngularFireMessagingModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
          args: [{
            providers: [AngularFireMessaging]
          }]
        }], null, null);
      })();
      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=angular-fire-messaging.js.map

      /***/

    },

    /***/
    "XqQ8":
    /*!*********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/exhaustMap.js ***!
      \*********************************************************************/

    /*! exports provided: exhaustMap */

    /***/
    function XqQ8(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "exhaustMap", function () {
        return exhaustMap;
      });
      /* harmony import */


      var _map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./map */
      "lJxs");
      /* harmony import */


      var _observable_from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../observable/from */
      "Cfvw");
      /* harmony import */


      var _innerSubscribe__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../innerSubscribe */
      "zx2A");

      function exhaustMap(project, resultSelector) {
        if (resultSelector) {
          return function (source) {
            return source.pipe(exhaustMap(function (a, i) {
              return Object(_observable_from__WEBPACK_IMPORTED_MODULE_1__["from"])(project(a, i)).pipe(Object(_map__WEBPACK_IMPORTED_MODULE_0__["map"])(function (b, ii) {
                return resultSelector(a, b, i, ii);
              }));
            }));
          };
        }

        return function (source) {
          return source.lift(new ExhaustMapOperator(project));
        };
      }

      var ExhaustMapOperator = /*#__PURE__*/function () {
        function ExhaustMapOperator(project) {
          _classCallCheck2(this, ExhaustMapOperator);

          this.project = project;
        }

        _createClass2(ExhaustMapOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new ExhaustMapSubscriber(subscriber, this.project));
          }
        }]);

        return ExhaustMapOperator;
      }();

      var ExhaustMapSubscriber = /*#__PURE__*/function (_innerSubscribe__WEBP12) {
        _inherits2(ExhaustMapSubscriber, _innerSubscribe__WEBP12);

        var _super263 = _createSuper(ExhaustMapSubscriber);

        function ExhaustMapSubscriber(destination, project) {
          var _this612;

          _classCallCheck2(this, ExhaustMapSubscriber);

          _this612 = _super263.call(this, destination);
          _this612.project = project;
          _this612.hasSubscription = false;
          _this612.hasCompleted = false;
          _this612.index = 0;
          return _this612;
        }

        _createClass2(ExhaustMapSubscriber, [{
          key: "_next",
          value: function _next(value) {
            if (!this.hasSubscription) {
              this.tryNext(value);
            }
          }
        }, {
          key: "tryNext",
          value: function tryNext(value) {
            var result;
            var index = this.index++;

            try {
              result = this.project(value, index);
            } catch (err) {
              this.destination.error(err);
              return;
            }

            this.hasSubscription = true;

            this._innerSub(result);
          }
        }, {
          key: "_innerSub",
          value: function _innerSub(result) {
            var innerSubscriber = new _innerSubscribe__WEBPACK_IMPORTED_MODULE_2__["SimpleInnerSubscriber"](this);
            var destination = this.destination;
            destination.add(innerSubscriber);
            var innerSubscription = Object(_innerSubscribe__WEBPACK_IMPORTED_MODULE_2__["innerSubscribe"])(result, innerSubscriber);

            if (innerSubscription !== innerSubscriber) {
              destination.add(innerSubscription);
            }
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.hasCompleted = true;

            if (!this.hasSubscription) {
              this.destination.complete();
            }

            this.unsubscribe();
          }
        }, {
          key: "notifyNext",
          value: function notifyNext(innerValue) {
            this.destination.next(innerValue);
          }
        }, {
          key: "notifyError",
          value: function notifyError(err) {
            this.destination.error(err);
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete() {
            this.hasSubscription = false;

            if (this.hasCompleted) {
              this.destination.complete();
            }
          }
        }]);

        return ExhaustMapSubscriber;
      }(_innerSubscribe__WEBPACK_IMPORTED_MODULE_2__["SimpleOuterSubscriber"]); //# sourceMappingURL=exhaustMap.js.map

      /***/

    },

    /***/
    "Y/cZ":
    /*!**********************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/Scheduler.js ***!
      \**********************************************************/

    /*! exports provided: Scheduler */

    /***/
    function YCZ(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Scheduler", function () {
        return Scheduler;
      });

      var Scheduler = /*#__PURE__*/function () {
        function Scheduler(SchedulerAction) {
          var now = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Scheduler.now;

          _classCallCheck2(this, Scheduler);

          this.SchedulerAction = SchedulerAction;
          this.now = now;
        }

        _createClass2(Scheduler, [{
          key: "schedule",
          value: function schedule(work) {
            var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
            var state = arguments.length > 2 ? arguments[2] : undefined;
            return new this.SchedulerAction(this, work).schedule(state, delay);
          }
        }]);

        return Scheduler;
      }();

      Scheduler.now = function () {
        return Date.now();
      }; //# sourceMappingURL=Scheduler.js.map

      /***/

    },

    /***/
    "Y309":
    /*!************************************************!*\
      !*** ./node_modules/aws-sdk/lib/api_loader.js ***!
      \************************************************/

    /*! no static exports found */

    /***/
    function Y309(module, exports) {
      function apiLoader(svc, version) {
        if (!apiLoader.services.hasOwnProperty(svc)) {
          throw new Error('InvalidService: Failed to load api for ' + svc);
        }

        return apiLoader.services[svc][version];
      }
      /**
       * @api private
       *
       * This member of AWS.apiLoader is private, but changing it will necessitate a
       * change to ../scripts/services-table-generator.ts
       */


      apiLoader.services = {};
      /**
       * @api private
       */

      module.exports = apiLoader;
      /***/
    },

    /***/
    "Y6u4":
    /*!******************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/TimeoutError.js ***!
      \******************************************************************/

    /*! exports provided: TimeoutError */

    /***/
    function Y6u4(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TimeoutError", function () {
        return TimeoutError;
      });

      var TimeoutErrorImpl = function () {
        function TimeoutErrorImpl() {
          Error.call(this);
          this.message = 'Timeout has occurred';
          this.name = 'TimeoutError';
          return this;
        }

        TimeoutErrorImpl.prototype = Object.create(Error.prototype);
        return TimeoutErrorImpl;
      }();

      var TimeoutError = TimeoutErrorImpl; //# sourceMappingURL=TimeoutError.js.map

      /***/
    },

    /***/
    "Y6wi":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/switchAll.js ***!
      \********************************************************************/

    /*! exports provided: switchAll */

    /***/
    function Y6wi(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "switchAll", function () {
        return switchAll;
      });
      /* harmony import */


      var _switchMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./switchMap */
      "eIep");
      /* harmony import */


      var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/identity */
      "SpAZ");

      function switchAll() {
        return Object(_switchMap__WEBPACK_IMPORTED_MODULE_0__["switchMap"])(_util_identity__WEBPACK_IMPORTED_MODULE_1__["identity"]);
      } //# sourceMappingURL=switchAll.js.map

      /***/

    },

    /***/
    "Y7HM":
    /*!***************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/isNumeric.js ***!
      \***************************************************************/

    /*! exports provided: isNumeric */

    /***/
    function Y7HM(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isNumeric", function () {
        return isNumeric;
      });
      /* harmony import */


      var _isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./isArray */
      "DH7j");

      function isNumeric(val) {
        return !Object(_isArray__WEBPACK_IMPORTED_MODULE_0__["isArray"])(val) && val - parseFloat(val) + 1 >= 0;
      } //# sourceMappingURL=isNumeric.js.map

      /***/

    },

    /***/
    "YRex":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/ug-cn.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function YRex(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Uyghur (China) [ug-cn]
      //! author: boyaq : https://github.com/boyaq
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var ugCn = moment.defineLocale('ug-cn', {
          months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split('_'),
          monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split('_'),
          weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split('_'),
          weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),
          weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',
            LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',
            LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm'
          },
          meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === 'يېرىم كېچە' || meridiem === 'سەھەر' || meridiem === 'چۈشتىن بۇرۇن') {
              return hour;
            } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {
              return hour + 12;
            } else {
              return hour >= 11 ? hour : hour + 12;
            }
          },
          meridiem: function meridiem(hour, minute, isLower) {
            var hm = hour * 100 + minute;

            if (hm < 600) {
              return 'يېرىم كېچە';
            } else if (hm < 900) {
              return 'سەھەر';
            } else if (hm < 1130) {
              return 'چۈشتىن بۇرۇن';
            } else if (hm < 1230) {
              return 'چۈش';
            } else if (hm < 1800) {
              return 'چۈشتىن كېيىن';
            } else {
              return 'كەچ';
            }
          },
          calendar: {
            sameDay: '[بۈگۈن سائەت] LT',
            nextDay: '[ئەتە سائەت] LT',
            nextWeek: '[كېلەركى] dddd [سائەت] LT',
            lastDay: '[تۆنۈگۈن] LT',
            lastWeek: '[ئالدىنقى] dddd [سائەت] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s كېيىن',
            past: '%s بۇرۇن',
            s: 'نەچچە سېكونت',
            ss: '%d سېكونت',
            m: 'بىر مىنۇت',
            mm: '%d مىنۇت',
            h: 'بىر سائەت',
            hh: '%d سائەت',
            d: 'بىر كۈن',
            dd: '%d كۈن',
            M: 'بىر ئاي',
            MM: '%d ئاي',
            y: 'بىر يىل',
            yy: '%d يىل'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,
          ordinal: function ordinal(number, period) {
            switch (period) {
              case 'd':
              case 'D':
              case 'DDD':
                return number + '-كۈنى';

              case 'w':
              case 'W':
                return number + '-ھەپتە';

              default:
                return number;
            }
          },
          preparse: function preparse(string) {
            return string.replace(/،/g, ',');
          },
          postformat: function postformat(string) {
            return string.replace(/,/g, '،');
          },
          week: {
            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 1st is the first week of the year.

          }
        });
        return ugCn;
      });
      /***/

    },

    /***/
    "YcCt":
    /*!********************************************!*\
      !*** ./node_modules/querystring/decode.js ***!
      \********************************************/

    /*! no static exports found */

    /***/
    function YcCt(module, exports, __webpack_require__) {
      "use strict"; // Copyright Joyent, Inc. and other Node contributors.
      //
      // Permission is hereby granted, free of charge, to any person obtaining a
      // copy of this software and associated documentation files (the
      // "Software"), to deal in the Software without restriction, including
      // without limitation the rights to use, copy, modify, merge, publish,
      // distribute, sublicense, and/or sell copies of the Software, and to permit
      // persons to whom the Software is furnished to do so, subject to the
      // following conditions:
      //
      // The above copyright notice and this permission notice shall be included
      // in all copies or substantial portions of the Software.
      //
      // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
      // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
      // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
      // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
      // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
      // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
      // USE OR OTHER DEALINGS IN THE SOFTWARE.
      // If obj.hasOwnProperty has been overridden, then calling
      // obj.hasOwnProperty(prop) will break.
      // See: https://github.com/joyent/node/issues/1707

      function hasOwnProperty(obj, prop) {
        return Object.prototype.hasOwnProperty.call(obj, prop);
      }

      module.exports = function (qs, sep, eq, options) {
        sep = sep || '&';
        eq = eq || '=';
        var obj = {};

        if (typeof qs !== 'string' || qs.length === 0) {
          return obj;
        }

        var regexp = /\+/g;
        qs = qs.split(sep);
        var maxKeys = 1000;

        if (options && typeof options.maxKeys === 'number') {
          maxKeys = options.maxKeys;
        }

        var len = qs.length; // maxKeys <= 0 means that we should not limit keys count

        if (maxKeys > 0 && len > maxKeys) {
          len = maxKeys;
        }

        for (var i = 0; i < len; ++i) {
          var x = qs[i].replace(regexp, '%20'),
              idx = x.indexOf(eq),
              kstr,
              vstr,
              k,
              v;

          if (idx >= 0) {
            kstr = x.substr(0, idx);
            vstr = x.substr(idx + 1);
          } else {
            kstr = x;
            vstr = '';
          }

          k = decodeURIComponent(kstr);
          v = decodeURIComponent(vstr);

          if (!hasOwnProperty(obj, k)) {
            obj[k] = v;
          } else if (Array.isArray(obj[k])) {
            obj[k].push(v);
          } else {
            obj[k] = [obj[k], v];
          }
        }

        return obj;
      };
      /***/

    },

    /***/
    "YhS8":
    /*!*********************************************************************************************************!*\
      !*** ./node_modules/ngx-daterangepicker-material/__ivy_ngcc__/fesm2015/ngx-daterangepicker-material.js ***!
      \*********************************************************************************************************/

    /*! exports provided: DaterangepickerComponent, DaterangepickerDirective, DefaultLocaleConfig, LOCALE_CONFIG, LocaleService, NgxDaterangepickerMd */

    /***/
    function YhS8(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DaterangepickerComponent", function () {
        return DaterangepickerComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DaterangepickerDirective", function () {
        return DaterangepickerDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DefaultLocaleConfig", function () {
        return DefaultLocaleConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LOCALE_CONFIG", function () {
        return LOCALE_CONFIG;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LocaleService", function () {
        return LocaleService;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgxDaterangepickerMd", function () {
        return NgxDaterangepickerMd;
      });
      /* harmony import */


      var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! tslib */
      "mrSG");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_forms__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/forms */
      "3Pt+");
      /* harmony import */


      var moment__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! moment */
      "wd/R");
      /* harmony import */


      var moment__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_4__);

      var _c0 = ["pickerContainer"];

      var _c1 = function _c1(a0) {
        return {
          "active": a0
        };
      };

      function DaterangepickerComponent_li_4_Template(rf, ctx) {
        if (rf & 1) {
          var _r7 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "li");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "button", 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("click", function DaterangepickerComponent_li_4_Template_button_click_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r7);

            var range_r5 = ctx.$implicit;

            var ctx_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]();

            return ctx_r6.clickRange($event, range_r5);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var range_r5 = ctx.$implicit;

          var ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("disabled", ctx_r1.disableRange(range_r5))("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵpureFunction1"](3, _c1, range_r5 === ctx_r1.chosenRange));

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](range_r5);
        }
      }

      function DaterangepickerComponent_div_5_table_2_th_3_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](0, "th");
        }
      }

      function DaterangepickerComponent_div_5_table_2_ng_container_4_Template(rf, ctx) {
        if (rf & 1) {
          var _r21 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "th", 19);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("click", function DaterangepickerComponent_div_5_table_2_ng_container_4_Template_th_click_1_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r21);

            var ctx_r20 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

            return ctx_r20.clickPrev(ctx_r20.sideEnum.left);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerEnd"]();
        }
      }

      function DaterangepickerComponent_div_5_table_2_ng_container_5_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](1, "th");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerEnd"]();
        }
      }

      function DaterangepickerComponent_div_5_table_2_ng_container_7_option_4_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "option", 25);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var m_r24 = ctx.$implicit;

          var ctx_r22 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](4);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("disabled", ctx_r22.calendarVariables.left.dropdowns.inMinYear && m_r24 < ctx_r22.calendarVariables.left.minDate.month() || ctx_r22.calendarVariables.left.dropdowns.inMaxYear && m_r24 > ctx_r22.calendarVariables.left.maxDate.month())("value", m_r24)("selected", ctx_r22.calendarVariables.left.dropdowns.currentMonth == m_r24);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate1"](" ", ctx_r22.locale.monthNames[m_r24], " ");
        }
      }

      function DaterangepickerComponent_div_5_table_2_ng_container_7_option_8_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "option", 26);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var y_r25 = ctx.$implicit;

          var ctx_r23 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](4);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("selected", y_r25 === ctx_r23.calendarVariables.left.dropdowns.currentYear);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate1"](" ", y_r25, " ");
        }
      }

      function DaterangepickerComponent_div_5_table_2_ng_container_7_Template(rf, ctx) {
        if (rf & 1) {
          var _r27 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "div", 20);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](3, "select", 21);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("change", function DaterangepickerComponent_div_5_table_2_ng_container_7_Template_select_change_3_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r27);

            var ctx_r26 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

            return ctx_r26.monthChanged($event, ctx_r26.sideEnum.left);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](4, DaterangepickerComponent_div_5_table_2_ng_container_7_option_4_Template, 2, 4, "option", 22);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](5, "div", 20);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](6);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](7, "select", 23);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("change", function DaterangepickerComponent_div_5_table_2_ng_container_7_Template_select_change_7_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r27);

            var ctx_r28 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

            return ctx_r28.yearChanged($event, ctx_r28.sideEnum.left);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](8, DaterangepickerComponent_div_5_table_2_ng_container_7_option_8_Template, 2, 2, "option", 24);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerEnd"]();
        }

        if (rf & 2) {
          var ctx_r13 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate1"](" ", ctx_r13.locale.monthNames[ctx_r13.calendarVariables == null ? null : ctx_r13.calendarVariables.left == null ? null : ctx_r13.calendarVariables.left.calendar[1][1].month()], " ");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngForOf", ctx_r13.calendarVariables.left.dropdowns.monthArrays);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate1"](" ", ctx_r13.calendarVariables == null ? null : ctx_r13.calendarVariables.left == null ? null : ctx_r13.calendarVariables.left.calendar[1][1].format(" YYYY"), " ");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngForOf", ctx_r13.calendarVariables.left.dropdowns.yearArrays);
        }
      }

      function DaterangepickerComponent_div_5_table_2_ng_container_8_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerEnd"]();
        }

        if (rf & 2) {
          var ctx_r14 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate2"](" ", ctx_r14.locale.monthNames[ctx_r14.calendarVariables == null ? null : ctx_r14.calendarVariables.left == null ? null : ctx_r14.calendarVariables.left.calendar[1][1].month()], " ", ctx_r14.calendarVariables == null ? null : ctx_r14.calendarVariables.left == null ? null : ctx_r14.calendarVariables.left.calendar[1][1].format(" YYYY"), " ");
        }
      }

      function DaterangepickerComponent_div_5_table_2_ng_container_9_Template(rf, ctx) {
        if (rf & 1) {
          var _r30 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "th", 27);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("click", function DaterangepickerComponent_div_5_table_2_ng_container_9_Template_th_click_1_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r30);

            var ctx_r29 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

            return ctx_r29.clickNext(ctx_r29.sideEnum.left);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerEnd"]();
        }
      }

      function DaterangepickerComponent_div_5_table_2_ng_container_10_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](1, "th");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerEnd"]();
        }
      }

      function DaterangepickerComponent_div_5_table_2_th_12_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "th", 28);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r17 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](ctx_r17.locale.weekLabel);
        }
      }

      function DaterangepickerComponent_div_5_table_2_th_13_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "th");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var dayofweek_r31 = ctx.$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](dayofweek_r31);
        }
      }

      function DaterangepickerComponent_div_5_table_2_tr_15_td_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "td", 28);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var row_r32 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit;

          var ctx_r33 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](ctx_r33.calendarVariables.left.calendar[row_r32][0].week());
        }
      }

      function DaterangepickerComponent_div_5_table_2_tr_15_td_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "td", 28);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var row_r32 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit;

          var ctx_r34 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](ctx_r34.calendarVariables.left.calendar[row_r32][0].isoWeek());
        }
      }

      function DaterangepickerComponent_div_5_table_2_tr_15_td_3_Template(rf, ctx) {
        if (rf & 1) {
          var _r40 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "td", 30);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("click", function DaterangepickerComponent_div_5_table_2_tr_15_td_3_Template_td_click_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r40);

            var col_r38 = ctx.$implicit;

            var row_r32 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit;

            var ctx_r39 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

            return ctx_r39.clickDate($event, ctx_r39.sideEnum.left, row_r32, col_r38);
          })("mouseenter", function DaterangepickerComponent_div_5_table_2_tr_15_td_3_Template_td_mouseenter_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r40);

            var col_r38 = ctx.$implicit;

            var row_r32 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit;

            var ctx_r42 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

            return ctx_r42.hoverDate($event, ctx_r42.sideEnum.left, row_r32, col_r38);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var col_r38 = ctx.$implicit;

          var row_r32 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit;

          var ctx_r35 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵclassMap"](ctx_r35.calendarVariables.left.classes[row_r32][col_r38]);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](ctx_r35.calendarVariables.left.calendar[row_r32][col_r38].date());
        }
      }

      function DaterangepickerComponent_div_5_table_2_tr_15_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "tr");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](1, DaterangepickerComponent_div_5_table_2_tr_15_td_1_Template, 3, 1, "td", 16);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](2, DaterangepickerComponent_div_5_table_2_tr_15_td_2_Template, 3, 1, "td", 16);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](3, DaterangepickerComponent_div_5_table_2_tr_15_td_3_Template, 3, 3, "td", 29);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var row_r32 = ctx.$implicit;

          var ctx_r19 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵclassMap"](ctx_r19.calendarVariables.left.classes[row_r32].classList);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r19.showWeekNumbers);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r19.showISOWeekNumbers);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngForOf", ctx_r19.calendarVariables.left.calCols);
        }
      }

      function DaterangepickerComponent_div_5_table_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "table", 12);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "thead");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](2, "tr");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](3, DaterangepickerComponent_div_5_table_2_th_3_Template, 1, 0, "th", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](4, DaterangepickerComponent_div_5_table_2_ng_container_4_Template, 2, 0, "ng-container", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](5, DaterangepickerComponent_div_5_table_2_ng_container_5_Template, 2, 0, "ng-container", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](6, "th", 14);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](7, DaterangepickerComponent_div_5_table_2_ng_container_7_Template, 9, 4, "ng-container", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](8, DaterangepickerComponent_div_5_table_2_ng_container_8_Template, 2, 2, "ng-container", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](9, DaterangepickerComponent_div_5_table_2_ng_container_9_Template, 2, 0, "ng-container", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](10, DaterangepickerComponent_div_5_table_2_ng_container_10_Template, 2, 0, "ng-container", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](11, "tr", 15);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](12, DaterangepickerComponent_div_5_table_2_th_12_Template, 3, 1, "th", 16);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](13, DaterangepickerComponent_div_5_table_2_th_13_Template, 3, 1, "th", 3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](14, "tbody", 17);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](15, DaterangepickerComponent_div_5_table_2_tr_15_Template, 4, 5, "tr", 18);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r8 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r8.showWeekNumbers || ctx_r8.showISOWeekNumbers);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", !ctx_r8.calendarVariables.left.minDate || ctx_r8.calendarVariables.left.minDate.isBefore(ctx_r8.calendarVariables.left.calendar.firstDay) && (!ctx_r8.linkedCalendars || true));

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", !(!ctx_r8.calendarVariables.left.minDate || ctx_r8.calendarVariables.left.minDate.isBefore(ctx_r8.calendarVariables.left.calendar.firstDay) && (!ctx_r8.linkedCalendars || true)));

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r8.showDropdowns && ctx_r8.calendarVariables.left.dropdowns);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", !ctx_r8.showDropdowns || !ctx_r8.calendarVariables.left.dropdowns);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", (!ctx_r8.calendarVariables.left.maxDate || ctx_r8.calendarVariables.left.maxDate.isAfter(ctx_r8.calendarVariables.left.calendar.lastDay)) && (!ctx_r8.linkedCalendars || ctx_r8.singleDatePicker));

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", !((!ctx_r8.calendarVariables.left.maxDate || ctx_r8.calendarVariables.left.maxDate.isAfter(ctx_r8.calendarVariables.left.calendar.lastDay)) && (!ctx_r8.linkedCalendars || ctx_r8.singleDatePicker)));

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r8.showWeekNumbers || ctx_r8.showISOWeekNumbers);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngForOf", ctx_r8.locale.daysOfWeek);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngForOf", ctx_r8.calendarVariables.left.calRows);
        }
      }

      function DaterangepickerComponent_div_5_div_3_option_3_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "option", 40);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var i_r49 = ctx.$implicit;

          var ctx_r45 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("value", i_r49)("disabled", ctx_r45.timepickerVariables.left.disabledHours.indexOf(i_r49) > -1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](i_r49);
        }
      }

      function DaterangepickerComponent_div_5_div_3_option_6_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "option", 40);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var i_r50 = ctx.$implicit;
          var index_r51 = ctx.index;

          var ctx_r46 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("value", i_r50)("disabled", ctx_r46.timepickerVariables.left.disabledMinutes.indexOf(i_r50) > -1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](ctx_r46.timepickerVariables.left.minutesLabel[index_r51]);
        }
      }

      function DaterangepickerComponent_div_5_div_3_select_10_option_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "option", 40);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var i_r53 = ctx.$implicit;
          var index_r54 = ctx.index;

          var ctx_r52 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](4);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("value", i_r53)("disabled", ctx_r52.timepickerVariables.left.disabledSeconds.indexOf(i_r53) > -1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](ctx_r52.timepickerVariables.left.secondsLabel[index_r54]);
        }
      }

      function DaterangepickerComponent_div_5_div_3_select_10_Template(rf, ctx) {
        if (rf & 1) {
          var _r56 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "select", 41);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("ngModelChange", function DaterangepickerComponent_div_5_div_3_select_10_Template_select_ngModelChange_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r56);

            var ctx_r55 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

            return ctx_r55.timepickerVariables.left.selectedSecond = $event;
          })("ngModelChange", function DaterangepickerComponent_div_5_div_3_select_10_Template_select_ngModelChange_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r56);

            var ctx_r57 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

            return ctx_r57.timeChanged($event, ctx_r57.sideEnum.left);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](1, DaterangepickerComponent_div_5_div_3_select_10_option_1_Template, 2, 3, "option", 34);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r47 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("disabled", !ctx_r47.startDate)("ngModel", ctx_r47.timepickerVariables.left.selectedSecond);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngForOf", ctx_r47.timepickerVariables.left.seconds);
        }
      }

      function DaterangepickerComponent_div_5_div_3_select_14_Template(rf, ctx) {
        if (rf & 1) {
          var _r59 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "select", 42);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("ngModelChange", function DaterangepickerComponent_div_5_div_3_select_14_Template_select_ngModelChange_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r59);

            var ctx_r58 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

            return ctx_r58.timepickerVariables.left.ampmModel = $event;
          })("ngModelChange", function DaterangepickerComponent_div_5_div_3_select_14_Template_select_ngModelChange_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r59);

            var ctx_r60 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

            return ctx_r60.timeChanged($event, ctx_r60.sideEnum.left);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "option", 43);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](2, "AM");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](3, "option", 44);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](4, "PM");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r48 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngModel", ctx_r48.timepickerVariables.left.ampmModel);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("disabled", ctx_r48.timepickerVariables.left.amDisabled);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("disabled", ctx_r48.timepickerVariables.left.pmDisabled);
        }
      }

      function DaterangepickerComponent_div_5_div_3_Template(rf, ctx) {
        if (rf & 1) {
          var _r62 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 31);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "div", 32);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](2, "select", 33);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("ngModelChange", function DaterangepickerComponent_div_5_div_3_Template_select_ngModelChange_2_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r62);

            var ctx_r61 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2);

            return ctx_r61.timepickerVariables.left.selectedHour = $event;
          })("ngModelChange", function DaterangepickerComponent_div_5_div_3_Template_select_ngModelChange_2_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r62);

            var ctx_r63 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2);

            return ctx_r63.timeChanged($event, ctx_r63.sideEnum.left);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](3, DaterangepickerComponent_div_5_div_3_option_3_Template, 2, 3, "option", 34);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](4, "div", 32);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](5, "select", 35);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("ngModelChange", function DaterangepickerComponent_div_5_div_3_Template_select_ngModelChange_5_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r62);

            var ctx_r64 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2);

            return ctx_r64.timepickerVariables.left.selectedMinute = $event;
          })("ngModelChange", function DaterangepickerComponent_div_5_div_3_Template_select_ngModelChange_5_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r62);

            var ctx_r65 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2);

            return ctx_r65.timeChanged($event, ctx_r65.sideEnum.left);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](6, DaterangepickerComponent_div_5_div_3_option_6_Template, 2, 3, "option", 34);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](7, "span", 36);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](8, "span", 37);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](9, "div", 32);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](10, DaterangepickerComponent_div_5_div_3_select_10_Template, 2, 3, "select", 38);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](11, "span", 36);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](12, "span", 37);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](13, "div", 32);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](14, DaterangepickerComponent_div_5_div_3_select_14_Template, 5, 3, "select", 39);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](15, "span", 36);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](16, "span", 37);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("disabled", !ctx_r9.startDate)("ngModel", ctx_r9.timepickerVariables.left.selectedHour);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngForOf", ctx_r9.timepickerVariables.left.hours);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("disabled", !ctx_r9.startDate)("ngModel", ctx_r9.timepickerVariables.left.selectedMinute);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngForOf", ctx_r9.timepickerVariables.left.minutes);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](4);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r9.timePickerSeconds);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](4);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", !ctx_r9.timePicker24Hour);
        }
      }

      var _c2 = function _c2(a0, a1) {
        return {
          right: a0,
          left: a1
        };
      };

      function DaterangepickerComponent_div_5_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 8);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "div", 9);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](2, DaterangepickerComponent_div_5_table_2_Template, 16, 10, "table", 10);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](3, DaterangepickerComponent_div_5_div_3_Template, 17, 8, "div", 11);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵpureFunction2"](3, _c2, ctx_r2.singleDatePicker, !ctx_r2.singleDatePicker));

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r2.calendarVariables);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r2.timePicker);
        }
      }

      function DaterangepickerComponent_div_6_table_2_th_3_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](0, "th");
        }
      }

      function DaterangepickerComponent_div_6_table_2_ng_container_4_Template(rf, ctx) {
        if (rf & 1) {
          var _r79 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "th", 19);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("click", function DaterangepickerComponent_div_6_table_2_ng_container_4_Template_th_click_1_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r79);

            var ctx_r78 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

            return ctx_r78.clickPrev(ctx_r78.sideEnum.right);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerEnd"]();
        }
      }

      function DaterangepickerComponent_div_6_table_2_ng_container_5_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](1, "th");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerEnd"]();
        }
      }

      function DaterangepickerComponent_div_6_table_2_ng_container_7_option_4_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "option", 25);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var m_r82 = ctx.$implicit;

          var ctx_r80 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](4);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("disabled", ctx_r80.calendarVariables.right.dropdowns.inMinYear && ctx_r80.calendarVariables.right.minDate && m_r82 < ctx_r80.calendarVariables.right.minDate.month() || ctx_r80.calendarVariables.right.dropdowns.inMaxYear && ctx_r80.calendarVariables.right.maxDate && m_r82 > ctx_r80.calendarVariables.right.maxDate.month())("value", m_r82)("selected", ctx_r80.calendarVariables.right.dropdowns.currentMonth == m_r82);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate1"](" ", ctx_r80.locale.monthNames[m_r82], " ");
        }
      }

      function DaterangepickerComponent_div_6_table_2_ng_container_7_option_8_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "option", 26);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var y_r83 = ctx.$implicit;

          var ctx_r81 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](4);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("selected", y_r83 === ctx_r81.calendarVariables.right.dropdowns.currentYear);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate1"](" ", y_r83, " ");
        }
      }

      function DaterangepickerComponent_div_6_table_2_ng_container_7_Template(rf, ctx) {
        if (rf & 1) {
          var _r85 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "div", 20);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](3, "select", 21);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("change", function DaterangepickerComponent_div_6_table_2_ng_container_7_Template_select_change_3_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r85);

            var ctx_r84 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

            return ctx_r84.monthChanged($event, ctx_r84.sideEnum.right);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](4, DaterangepickerComponent_div_6_table_2_ng_container_7_option_4_Template, 2, 4, "option", 22);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](5, "div", 20);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](6);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](7, "select", 23);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("change", function DaterangepickerComponent_div_6_table_2_ng_container_7_Template_select_change_7_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r85);

            var ctx_r86 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

            return ctx_r86.yearChanged($event, ctx_r86.sideEnum.right);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](8, DaterangepickerComponent_div_6_table_2_ng_container_7_option_8_Template, 2, 2, "option", 24);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerEnd"]();
        }

        if (rf & 2) {
          var ctx_r71 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate1"](" ", ctx_r71.locale.monthNames[ctx_r71.calendarVariables == null ? null : ctx_r71.calendarVariables.right == null ? null : ctx_r71.calendarVariables.right.calendar[1][1].month()], " ");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngForOf", ctx_r71.calendarVariables.right.dropdowns.monthArrays);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate1"](" ", ctx_r71.calendarVariables == null ? null : ctx_r71.calendarVariables.right == null ? null : ctx_r71.calendarVariables.right.calendar[1][1].format(" YYYY"), " ");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngForOf", ctx_r71.calendarVariables.right.dropdowns.yearArrays);
        }
      }

      function DaterangepickerComponent_div_6_table_2_ng_container_8_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerEnd"]();
        }

        if (rf & 2) {
          var ctx_r72 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate2"](" ", ctx_r72.locale.monthNames[ctx_r72.calendarVariables == null ? null : ctx_r72.calendarVariables.right == null ? null : ctx_r72.calendarVariables.right.calendar[1][1].month()], " ", ctx_r72.calendarVariables == null ? null : ctx_r72.calendarVariables.right == null ? null : ctx_r72.calendarVariables.right.calendar[1][1].format(" YYYY"), " ");
        }
      }

      function DaterangepickerComponent_div_6_table_2_ng_container_9_Template(rf, ctx) {
        if (rf & 1) {
          var _r88 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "th", 27);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("click", function DaterangepickerComponent_div_6_table_2_ng_container_9_Template_th_click_1_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r88);

            var ctx_r87 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

            return ctx_r87.clickNext(ctx_r87.sideEnum.right);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerEnd"]();
        }
      }

      function DaterangepickerComponent_div_6_table_2_ng_container_10_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](1, "th");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerEnd"]();
        }
      }

      function DaterangepickerComponent_div_6_table_2_th_12_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "th", 28);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r75 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](ctx_r75.locale.weekLabel);
        }
      }

      function DaterangepickerComponent_div_6_table_2_th_13_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "th");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var dayofweek_r89 = ctx.$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](dayofweek_r89);
        }
      }

      function DaterangepickerComponent_div_6_table_2_tr_15_td_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "td", 28);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var row_r90 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit;

          var ctx_r91 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](ctx_r91.calendarVariables.right.calendar[row_r90][0].week());
        }
      }

      function DaterangepickerComponent_div_6_table_2_tr_15_td_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "td", 28);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var row_r90 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit;

          var ctx_r92 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](ctx_r92.calendarVariables.right.calendar[row_r90][0].isoWeek());
        }
      }

      function DaterangepickerComponent_div_6_table_2_tr_15_td_3_Template(rf, ctx) {
        if (rf & 1) {
          var _r98 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "td", 30);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("click", function DaterangepickerComponent_div_6_table_2_tr_15_td_3_Template_td_click_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r98);

            var col_r96 = ctx.$implicit;

            var row_r90 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit;

            var ctx_r97 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

            return ctx_r97.clickDate($event, ctx_r97.sideEnum.right, row_r90, col_r96);
          })("mouseenter", function DaterangepickerComponent_div_6_table_2_tr_15_td_3_Template_td_mouseenter_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r98);

            var col_r96 = ctx.$implicit;

            var row_r90 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit;

            var ctx_r100 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

            return ctx_r100.hoverDate($event, ctx_r100.sideEnum.right, row_r90, col_r96);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var col_r96 = ctx.$implicit;

          var row_r90 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit;

          var ctx_r93 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵclassMap"](ctx_r93.calendarVariables.right.classes[row_r90][col_r96]);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](ctx_r93.calendarVariables.right.calendar[row_r90][col_r96].date());
        }
      }

      function DaterangepickerComponent_div_6_table_2_tr_15_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "tr");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](1, DaterangepickerComponent_div_6_table_2_tr_15_td_1_Template, 3, 1, "td", 16);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](2, DaterangepickerComponent_div_6_table_2_tr_15_td_2_Template, 3, 1, "td", 16);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](3, DaterangepickerComponent_div_6_table_2_tr_15_td_3_Template, 3, 3, "td", 29);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var row_r90 = ctx.$implicit;

          var ctx_r77 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵclassMap"](ctx_r77.calendarVariables.right.classes[row_r90].classList);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r77.showWeekNumbers);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r77.showISOWeekNumbers);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngForOf", ctx_r77.calendarVariables.right.calCols);
        }
      }

      function DaterangepickerComponent_div_6_table_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "table", 12);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "thead");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](2, "tr");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](3, DaterangepickerComponent_div_6_table_2_th_3_Template, 1, 0, "th", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](4, DaterangepickerComponent_div_6_table_2_ng_container_4_Template, 2, 0, "ng-container", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](5, DaterangepickerComponent_div_6_table_2_ng_container_5_Template, 2, 0, "ng-container", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](6, "th", 46);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](7, DaterangepickerComponent_div_6_table_2_ng_container_7_Template, 9, 4, "ng-container", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](8, DaterangepickerComponent_div_6_table_2_ng_container_8_Template, 2, 2, "ng-container", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](9, DaterangepickerComponent_div_6_table_2_ng_container_9_Template, 2, 0, "ng-container", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](10, DaterangepickerComponent_div_6_table_2_ng_container_10_Template, 2, 0, "ng-container", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](11, "tr", 15);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](12, DaterangepickerComponent_div_6_table_2_th_12_Template, 3, 1, "th", 16);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](13, DaterangepickerComponent_div_6_table_2_th_13_Template, 3, 1, "th", 3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](14, "tbody");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](15, DaterangepickerComponent_div_6_table_2_tr_15_Template, 4, 5, "tr", 18);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r66 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r66.showWeekNumbers || ctx_r66.showISOWeekNumbers);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", (!ctx_r66.calendarVariables.right.minDate || ctx_r66.calendarVariables.right.minDate.isBefore(ctx_r66.calendarVariables.right.calendar.firstDay)) && !ctx_r66.linkedCalendars);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", !((!ctx_r66.calendarVariables.right.minDate || ctx_r66.calendarVariables.right.minDate.isBefore(ctx_r66.calendarVariables.right.calendar.firstDay)) && !ctx_r66.linkedCalendars));

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r66.showDropdowns && ctx_r66.calendarVariables.right.dropdowns);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", !ctx_r66.showDropdowns || !ctx_r66.calendarVariables.right.dropdowns);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", !ctx_r66.calendarVariables.right.maxDate || ctx_r66.calendarVariables.right.maxDate.isAfter(ctx_r66.calendarVariables.right.calendar.lastDay) && (!ctx_r66.linkedCalendars || ctx_r66.singleDatePicker || true));

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", !(!ctx_r66.calendarVariables.right.maxDate || ctx_r66.calendarVariables.right.maxDate.isAfter(ctx_r66.calendarVariables.right.calendar.lastDay) && (!ctx_r66.linkedCalendars || ctx_r66.singleDatePicker || true)));

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r66.showWeekNumbers || ctx_r66.showISOWeekNumbers);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngForOf", ctx_r66.locale.daysOfWeek);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngForOf", ctx_r66.calendarVariables.right.calRows);
        }
      }

      function DaterangepickerComponent_div_6_div_3_option_3_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "option", 40);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var i_r107 = ctx.$implicit;

          var ctx_r103 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("value", i_r107)("disabled", ctx_r103.timepickerVariables.right.disabledHours.indexOf(i_r107) > -1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](i_r107);
        }
      }

      function DaterangepickerComponent_div_6_div_3_option_8_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "option", 40);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var i_r108 = ctx.$implicit;
          var index_r109 = ctx.index;

          var ctx_r104 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("value", i_r108)("disabled", ctx_r104.timepickerVariables.right.disabledMinutes.indexOf(i_r108) > -1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](ctx_r104.timepickerVariables.right.minutesLabel[index_r109]);
        }
      }

      function DaterangepickerComponent_div_6_div_3_select_12_option_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "option", 40);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var i_r111 = ctx.$implicit;
          var index_r112 = ctx.index;

          var ctx_r110 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](4);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("value", i_r111)("disabled", ctx_r110.timepickerVariables.right.disabledSeconds.indexOf(i_r111) > -1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](ctx_r110.timepickerVariables.right.secondsLabel[index_r112]);
        }
      }

      function DaterangepickerComponent_div_6_div_3_select_12_Template(rf, ctx) {
        if (rf & 1) {
          var _r114 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "select", 41);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("ngModelChange", function DaterangepickerComponent_div_6_div_3_select_12_Template_select_ngModelChange_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r114);

            var ctx_r113 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

            return ctx_r113.timepickerVariables.right.selectedSecond = $event;
          })("ngModelChange", function DaterangepickerComponent_div_6_div_3_select_12_Template_select_ngModelChange_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r114);

            var ctx_r115 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

            return ctx_r115.timeChanged($event, ctx_r115.sideEnum.right);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](1, DaterangepickerComponent_div_6_div_3_select_12_option_1_Template, 2, 3, "option", 34);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r105 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("disabled", !ctx_r105.startDate)("ngModel", ctx_r105.timepickerVariables.right.selectedSecond);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngForOf", ctx_r105.timepickerVariables.right.seconds);
        }
      }

      function DaterangepickerComponent_div_6_div_3_select_16_Template(rf, ctx) {
        if (rf & 1) {
          var _r117 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "select", 42);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("ngModelChange", function DaterangepickerComponent_div_6_div_3_select_16_Template_select_ngModelChange_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r117);

            var ctx_r116 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

            return ctx_r116.timepickerVariables.right.ampmModel = $event;
          })("ngModelChange", function DaterangepickerComponent_div_6_div_3_select_16_Template_select_ngModelChange_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r117);

            var ctx_r118 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

            return ctx_r118.timeChanged($event, ctx_r118.sideEnum.right);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "option", 43);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](2, "AM");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](3, "option", 44);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](4, "PM");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r106 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngModel", ctx_r106.timepickerVariables.right.ampmModel);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("disabled", ctx_r106.timepickerVariables.right.amDisabled);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("disabled", ctx_r106.timepickerVariables.right.pmDisabled);
        }
      }

      function DaterangepickerComponent_div_6_div_3_Template(rf, ctx) {
        if (rf & 1) {
          var _r120 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 31);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "div", 32);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](2, "select", 47);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("ngModelChange", function DaterangepickerComponent_div_6_div_3_Template_select_ngModelChange_2_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r120);

            var ctx_r119 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2);

            return ctx_r119.timepickerVariables.right.selectedHour = $event;
          })("ngModelChange", function DaterangepickerComponent_div_6_div_3_Template_select_ngModelChange_2_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r120);

            var ctx_r121 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2);

            return ctx_r121.timeChanged($event, ctx_r121.sideEnum.right);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](3, DaterangepickerComponent_div_6_div_3_option_3_Template, 2, 3, "option", 34);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](4, "span", 36);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](5, "span", 37);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](6, "div", 32);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](7, "select", 35);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("ngModelChange", function DaterangepickerComponent_div_6_div_3_Template_select_ngModelChange_7_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r120);

            var ctx_r122 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2);

            return ctx_r122.timepickerVariables.right.selectedMinute = $event;
          })("ngModelChange", function DaterangepickerComponent_div_6_div_3_Template_select_ngModelChange_7_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r120);

            var ctx_r123 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2);

            return ctx_r123.timeChanged($event, ctx_r123.sideEnum.right);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](8, DaterangepickerComponent_div_6_div_3_option_8_Template, 2, 3, "option", 34);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](9, "span", 36);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](10, "span", 37);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](11, "div", 32);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](12, DaterangepickerComponent_div_6_div_3_select_12_Template, 2, 3, "select", 38);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](13, "span", 36);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](14, "span", 37);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](15, "div", 32);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](16, DaterangepickerComponent_div_6_div_3_select_16_Template, 5, 3, "select", 39);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](17, "span", 36);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](18, "span", 37);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r67 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("disabled", !ctx_r67.startDate)("ngModel", ctx_r67.timepickerVariables.right.selectedHour);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngForOf", ctx_r67.timepickerVariables.right.hours);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](4);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("disabled", !ctx_r67.startDate)("ngModel", ctx_r67.timepickerVariables.right.selectedMinute);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngForOf", ctx_r67.timepickerVariables.right.minutes);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](4);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r67.timePickerSeconds);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](4);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", !ctx_r67.timePicker24Hour);
        }
      }

      function DaterangepickerComponent_div_6_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 45);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "div", 9);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](2, DaterangepickerComponent_div_6_table_2_Template, 16, 10, "table", 10);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](3, DaterangepickerComponent_div_6_div_3_Template, 19, 8, "div", 11);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r3.calendarVariables);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r3.timePicker);
        }
      }

      function DaterangepickerComponent_div_7_button_2_Template(rf, ctx) {
        if (rf & 1) {
          var _r127 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "button", 53);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("click", function DaterangepickerComponent_div_7_button_2_Template_button_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r127);

            var ctx_r126 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2);

            return ctx_r126.clear();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnamespaceSVG"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](2, "svg", 54);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](3, "path", 55);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r124 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("title", ctx_r124.locale.clearLabel);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate1"](" ", ctx_r124.locale.clearLabel, " ");
        }
      }

      function DaterangepickerComponent_div_7_button_3_Template(rf, ctx) {
        if (rf & 1) {
          var _r129 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "button", 56);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("click", function DaterangepickerComponent_div_7_button_3_Template_button_click_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r129);

            var ctx_r128 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2);

            return ctx_r128.clickCancel($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r125 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](ctx_r125.locale.cancelLabel);
        }
      }

      function DaterangepickerComponent_div_7_Template(rf, ctx) {
        if (rf & 1) {
          var _r131 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 48);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "div", 49);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](2, DaterangepickerComponent_div_7_button_2_Template, 4, 2, "button", 50);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](3, DaterangepickerComponent_div_7_button_3_Template, 2, 1, "button", 51);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](4, "button", 52);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("click", function DaterangepickerComponent_div_7_Template_button_click_4_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r131);

            var ctx_r130 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]();

            return ctx_r130.clickApply($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](5);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r4.showClearButton);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r4.showCancel);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("disabled", ctx_r4.applyBtn.disabled);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](ctx_r4.locale.applyLabel);
        }
      }

      var _c3 = function _c3(a0, a1, a2, a3, a4, a5, a6) {
        return {
          ltr: a0,
          rtl: a1,
          "shown": a2,
          "hidden": a3,
          "inline": a4,
          "double": a5,
          "show-ranges": a6
        };
      };

      var moment = moment__WEBPACK_IMPORTED_MODULE_4__;
      var LOCALE_CONFIG = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["InjectionToken"]('daterangepicker.config');
      /**
       *  DefaultLocaleConfig
       */

      var DefaultLocaleConfig = {
        direction: 'ltr',
        separator: ' - ',
        weekLabel: 'W',
        applyLabel: 'Apply',
        cancelLabel: 'Cancel',
        clearLabel: 'Clear',
        customRangeLabel: 'Custom range',
        daysOfWeek: moment.weekdaysMin(),
        monthNames: moment.monthsShort(),
        firstDay: moment.localeData().firstDayOfWeek()
      };

      var LocaleService = /*#__PURE__*/function () {
        function LocaleService(_config) {
          _classCallCheck2(this, LocaleService);

          this._config = _config;
        }

        _createClass2(LocaleService, [{
          key: "config",
          get: function get() {
            if (!this._config) {
              return DefaultLocaleConfig;
            }

            return Object.assign({}, DefaultLocaleConfig, this._config);
          }
        }]);

        return LocaleService;
      }();

      LocaleService.ɵfac = function LocaleService_Factory(t) {
        return new (t || LocaleService)(_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵinject"](LOCALE_CONFIG));
      };

      LocaleService.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineInjectable"]({
        token: LocaleService,
        factory: function factory(t) {
          return LocaleService.ɵfac(t);
        }
      });

      LocaleService.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Inject"],
            args: [LOCALE_CONFIG]
          }]
        }];
      };

      LocaleService = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__param"])(0, Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Inject"])(LOCALE_CONFIG))], LocaleService);
      var DaterangepickerComponent_1;
      var moment$1 = moment__WEBPACK_IMPORTED_MODULE_4__;
      var SideEnum;

      (function (SideEnum) {
        SideEnum["left"] = "left";
        SideEnum["right"] = "right";
      })(SideEnum || (SideEnum = {}));

      var DaterangepickerComponent = DaterangepickerComponent_1 = /*#__PURE__*/function () {
        function DaterangepickerComponent(el, _ref, _localeService) {
          _classCallCheck2(this, DaterangepickerComponent);

          this.el = el;
          this._ref = _ref;
          this._localeService = _localeService;
          this._old = {
            start: null,
            end: null
          };
          this.calendarVariables = {
            left: {},
            right: {}
          };
          this.tooltiptext = []; // for storing tooltiptext

          this.timepickerVariables = {
            left: {},
            right: {}
          };
          this.daterangepicker = {
            start: new _angular_forms__WEBPACK_IMPORTED_MODULE_3__["FormControl"](),
            end: new _angular_forms__WEBPACK_IMPORTED_MODULE_3__["FormControl"]()
          };
          this.applyBtn = {
            disabled: false
          };
          this.startDate = moment$1().startOf('day');
          this.endDate = moment$1().endOf('day');
          this.dateLimit = null; // used in template for compile time support of enum values.

          this.sideEnum = SideEnum;
          this.minDate = null;
          this.maxDate = null;
          this.autoApply = false;
          this.singleDatePicker = false;
          this.showDropdowns = false;
          this.showWeekNumbers = false;
          this.showISOWeekNumbers = false;
          this.linkedCalendars = false;
          this.autoUpdateInput = true;
          this.alwaysShowCalendars = false;
          this.maxSpan = false;
          this.lockStartDate = false; // timepicker variables

          this.timePicker = false;
          this.timePicker24Hour = false;
          this.timePickerIncrement = 1;
          this.timePickerSeconds = false; // end of timepicker variables

          this.showClearButton = false;
          this.firstMonthDayClass = null;
          this.lastMonthDayClass = null;
          this.emptyWeekRowClass = null;
          this.emptyWeekColumnClass = null;
          this.firstDayOfNextMonthClass = null;
          this.lastDayOfPreviousMonthClass = null;
          this._locale = {}; // custom ranges

          this._ranges = {};
          this.showCancel = false;
          this.keepCalendarOpeningWithRange = false;
          this.showRangeLabelOnInput = false;
          this.customRangeDirection = false;
          this.rangesArray = []; // some state information

          this.isShown = false;
          this.inline = true;
          this.leftCalendar = {};
          this.rightCalendar = {};
          this.showCalInRanges = false;
          this.nowHoveredDate = null;
          this.pickingDate = false;
          this.options = {}; // should get some opt from user

          this.closeOnAutoApply = true;
          this.choosedDate = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["EventEmitter"]();
          this.rangeClicked = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["EventEmitter"]();
          this.datesUpdated = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["EventEmitter"]();
          this.startDateChanged = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["EventEmitter"]();
          this.endDateChanged = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["EventEmitter"]();
        }

        _createClass2(DaterangepickerComponent, [{
          key: "locale",
          get: function get() {
            return this._locale;
          },
          set: function set(value) {
            this._locale = Object.assign({}, this._localeService.config, value);
          }
        }, {
          key: "ranges",
          get: function get() {
            return this._ranges;
          },
          set: function set(value) {
            this._ranges = value;
            this.renderRanges();
          }
        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            this._buildLocale();

            var daysOfWeek = _toConsumableArray(this.locale.daysOfWeek);

            this.locale.firstDay = this.locale.firstDay % 7;

            if (this.locale.firstDay !== 0) {
              var iterator = this.locale.firstDay;

              while (iterator > 0) {
                daysOfWeek.push(daysOfWeek.shift());
                iterator--;
              }
            }

            this.locale.daysOfWeek = daysOfWeek;

            if (this.inline) {
              this._old.start = this.startDate.clone();
              this._old.end = this.endDate.clone();
            }

            if (this.startDate && this.timePicker) {
              this.setStartDate(this.startDate);
              this.renderTimePicker(SideEnum.left);
            }

            if (this.endDate && this.timePicker) {
              this.setEndDate(this.endDate);
              this.renderTimePicker(SideEnum.right);
            }

            this.updateMonthsInView();
            this.renderCalendar(SideEnum.left);
            this.renderCalendar(SideEnum.right);
            this.renderRanges();
          }
        }, {
          key: "renderRanges",
          value: function renderRanges() {
            this.rangesArray = [];
            var start, end;

            if (typeof this.ranges === 'object') {
              for (var range in this.ranges) {
                if (this.ranges[range]) {
                  if (typeof this.ranges[range][0] === 'string') {
                    start = moment$1(this.ranges[range][0], this.locale.format);
                  } else {
                    start = moment$1(this.ranges[range][0]);
                  }

                  if (typeof this.ranges[range][1] === 'string') {
                    end = moment$1(this.ranges[range][1], this.locale.format);
                  } else {
                    end = moment$1(this.ranges[range][1]);
                  } // If the start or end date exceed those allowed by the minDate or maxSpan
                  // options, shorten the range to the allowable period.


                  if (this.minDate && start.isBefore(this.minDate)) {
                    start = this.minDate.clone();
                  }

                  var maxDate = this.maxDate;

                  if (this.maxSpan && maxDate && start.clone().add(this.maxSpan).isAfter(maxDate)) {
                    maxDate = start.clone().add(this.maxSpan);
                  }

                  if (maxDate && end.isAfter(maxDate)) {
                    end = maxDate.clone();
                  } // If the end of the range is before the minimum or the start of the range is
                  // after the maximum, don't display this range option at all.


                  if (this.minDate && end.isBefore(this.minDate, this.timePicker ? 'minute' : 'day') || maxDate && start.isAfter(maxDate, this.timePicker ? 'minute' : 'day')) {
                    continue;
                  } // Support unicode chars in the range names.


                  var elem = document.createElement('textarea');
                  elem.innerHTML = range;
                  var rangeHtml = elem.value;
                  this.ranges[rangeHtml] = [start, end];
                }
              }

              for (var _range2 in this.ranges) {
                if (this.ranges[_range2]) {
                  this.rangesArray.push(_range2);
                }
              }

              if (this.showCustomRangeLabel) {
                this.rangesArray.push(this.locale.customRangeLabel);
              }

              this.showCalInRanges = !this.rangesArray.length || this.alwaysShowCalendars;

              if (!this.timePicker) {
                this.startDate = this.startDate.startOf('day');
                this.endDate = this.endDate.endOf('day');
              }
            }
          }
        }, {
          key: "renderTimePicker",
          value: function renderTimePicker(side) {
            var selected, minDate;
            var maxDate = this.maxDate;

            if (side === SideEnum.left) {
              selected = this.startDate.clone(), minDate = this.minDate;
            } else if (side === SideEnum.right && this.endDate) {
              selected = this.endDate.clone(), minDate = this.startDate;
            } else if (side === SideEnum.right && !this.endDate) {
              // don't have an end date, use the start date then put the selected time for the right side as the time
              selected = this._getDateWithTime(this.startDate, SideEnum.right);

              if (selected.isBefore(this.startDate)) {
                selected = this.startDate.clone(); //set it back to the start date the time was backwards
              }

              minDate = this.startDate;
            }

            var start = this.timePicker24Hour ? 0 : 1;
            var end = this.timePicker24Hour ? 23 : 12;
            this.timepickerVariables[side] = {
              hours: [],
              minutes: [],
              minutesLabel: [],
              seconds: [],
              secondsLabel: [],
              disabledHours: [],
              disabledMinutes: [],
              disabledSeconds: [],
              selectedHour: 0,
              selectedMinute: 0,
              selectedSecond: 0
            }; // generate hours

            for (var i = start; i <= end; i++) {
              var i_in_24 = i;

              if (!this.timePicker24Hour) {
                i_in_24 = selected.hour() >= 12 ? i === 12 ? 12 : i + 12 : i === 12 ? 0 : i;
              }

              var time = selected.clone().hour(i_in_24);
              var disabled = false;

              if (minDate && time.minute(59).isBefore(minDate)) {
                disabled = true;
              }

              if (maxDate && time.minute(0).isAfter(maxDate)) {
                disabled = true;
              }

              this.timepickerVariables[side].hours.push(i);

              if (i_in_24 === selected.hour() && !disabled) {
                this.timepickerVariables[side].selectedHour = i;
              } else if (disabled) {
                this.timepickerVariables[side].disabledHours.push(i);
              }
            } // generate minutes


            for (var _i22 = 0; _i22 < 60; _i22 += this.timePickerIncrement) {
              var padded = _i22 < 10 ? '0' + _i22 : _i22;

              var _time = selected.clone().minute(_i22);

              var _disabled2 = false;

              if (minDate && _time.second(59).isBefore(minDate)) {
                _disabled2 = true;
              }

              if (maxDate && _time.second(0).isAfter(maxDate)) {
                _disabled2 = true;
              }

              this.timepickerVariables[side].minutes.push(_i22);
              this.timepickerVariables[side].minutesLabel.push(padded);

              if (selected.minute() === _i22 && !_disabled2) {
                this.timepickerVariables[side].selectedMinute = _i22;
              } else if (_disabled2) {
                this.timepickerVariables[side].disabledMinutes.push(_i22);
              }
            } // generate seconds


            if (this.timePickerSeconds) {
              for (var _i23 = 0; _i23 < 60; _i23++) {
                var _padded = _i23 < 10 ? '0' + _i23 : _i23;

                var _time2 = selected.clone().second(_i23);

                var _disabled3 = false;

                if (minDate && _time2.isBefore(minDate)) {
                  _disabled3 = true;
                }

                if (maxDate && _time2.isAfter(maxDate)) {
                  _disabled3 = true;
                }

                this.timepickerVariables[side].seconds.push(_i23);
                this.timepickerVariables[side].secondsLabel.push(_padded);

                if (selected.second() === _i23 && !_disabled3) {
                  this.timepickerVariables[side].selectedSecond = _i23;
                } else if (_disabled3) {
                  this.timepickerVariables[side].disabledSeconds.push(_i23);
                }
              }
            } // generate AM/PM


            if (!this.timePicker24Hour) {
              var am_html = '';
              var pm_html = '';

              if (minDate && selected.clone().hour(12).minute(0).second(0).isBefore(minDate)) {
                this.timepickerVariables[side].amDisabled = true;
              }

              if (maxDate && selected.clone().hour(0).minute(0).second(0).isAfter(maxDate)) {
                this.timepickerVariables[side].pmDisabled = true;
              }

              if (selected.hour() >= 12) {
                this.timepickerVariables[side].ampmModel = 'PM';
              } else {
                this.timepickerVariables[side].ampmModel = 'AM';
              }
            }

            this.timepickerVariables[side].selected = selected;
          }
        }, {
          key: "renderCalendar",
          value: function renderCalendar(side) {
            var mainCalendar = side === SideEnum.left ? this.leftCalendar : this.rightCalendar;
            var month = mainCalendar.month.month();
            var year = mainCalendar.month.year();
            var hour = mainCalendar.month.hour();
            var minute = mainCalendar.month.minute();
            var second = mainCalendar.month.second();
            var daysInMonth = moment$1([year, month]).daysInMonth();
            var firstDay = moment$1([year, month, 1]);
            var lastDay = moment$1([year, month, daysInMonth]);
            var lastMonth = moment$1(firstDay).subtract(1, 'month').month();
            var lastYear = moment$1(firstDay).subtract(1, 'month').year();
            var daysInLastMonth = moment$1([lastYear, lastMonth]).daysInMonth();
            var dayOfWeek = firstDay.day(); // initialize a 6 rows x 7 columns array for the calendar

            var calendar = [];
            calendar.firstDay = firstDay;
            calendar.lastDay = lastDay;

            for (var i = 0; i < 6; i++) {
              calendar[i] = [];
            } // populate the calendar with date objects


            var startDay = daysInLastMonth - dayOfWeek + this.locale.firstDay + 1;

            if (startDay > daysInLastMonth) {
              startDay -= 7;
            }

            if (dayOfWeek === this.locale.firstDay) {
              startDay = daysInLastMonth - 6;
            }

            var curDate = moment$1([lastYear, lastMonth, startDay, 12, minute, second]);

            for (var _i24 = 0, col = 0, row = 0; _i24 < 42; _i24++, col++, curDate = moment$1(curDate).add(24, 'hour')) {
              if (_i24 > 0 && col % 7 === 0) {
                col = 0;
                row++;
              }

              calendar[row][col] = curDate.clone().hour(hour).minute(minute).second(second);
              curDate.hour(12);

              if (this.minDate && calendar[row][col].format('YYYY-MM-DD') === this.minDate.format('YYYY-MM-DD') && calendar[row][col].isBefore(this.minDate) && side === 'left') {
                calendar[row][col] = this.minDate.clone();
              }

              if (this.maxDate && calendar[row][col].format('YYYY-MM-DD') === this.maxDate.format('YYYY-MM-DD') && calendar[row][col].isAfter(this.maxDate) && side === 'right') {
                calendar[row][col] = this.maxDate.clone();
              }
            } // make the calendar object available to hoverDate/clickDate


            if (side === SideEnum.left) {
              this.leftCalendar.calendar = calendar;
            } else {
              this.rightCalendar.calendar = calendar;
            } //
            // Display the calendar
            //


            var minDate = side === 'left' ? this.minDate : this.startDate;
            var maxDate = this.maxDate; // adjust maxDate to reflect the dateLimit setting in order to
            // grey out end dates beyond the dateLimit

            if (this.endDate === null && this.dateLimit) {
              var maxLimit = this.startDate.clone().add(this.dateLimit, 'day').endOf('day');

              if (!maxDate || maxLimit.isBefore(maxDate)) {
                maxDate = maxLimit;
              }
            }

            this.calendarVariables[side] = {
              month: month,
              year: year,
              hour: hour,
              minute: minute,
              second: second,
              daysInMonth: daysInMonth,
              firstDay: firstDay,
              lastDay: lastDay,
              lastMonth: lastMonth,
              lastYear: lastYear,
              daysInLastMonth: daysInLastMonth,
              dayOfWeek: dayOfWeek,
              // other vars
              calRows: Array.from(Array(6).keys()),
              calCols: Array.from(Array(7).keys()),
              classes: {},
              minDate: minDate,
              maxDate: maxDate,
              calendar: calendar
            };

            if (this.showDropdowns) {
              var currentMonth = calendar[1][1].month();
              var currentYear = calendar[1][1].year();
              var realCurrentYear = moment$1().year();
              var maxYear = maxDate && maxDate.year() || realCurrentYear + 5;
              var minYear = minDate && minDate.year() || realCurrentYear - 50;
              var inMinYear = currentYear === minYear;
              var inMaxYear = currentYear === maxYear;
              var years = [];

              for (var y = minYear; y <= maxYear; y++) {
                years.push(y);
              }

              this.calendarVariables[side].dropdowns = {
                currentMonth: currentMonth,
                currentYear: currentYear,
                maxYear: maxYear,
                minYear: minYear,
                inMinYear: inMinYear,
                inMaxYear: inMaxYear,
                monthArrays: Array.from(Array(12).keys()),
                yearArrays: years
              };
            }

            this._buildCells(calendar, side);
          }
        }, {
          key: "setStartDate",
          value: function setStartDate(startDate) {
            if (typeof startDate === 'string') {
              this.startDate = moment$1(startDate, this.locale.format);
            }

            if (typeof startDate === 'object') {
              this.pickingDate = true;
              this.startDate = moment$1(startDate);
            }

            if (!this.timePicker) {
              this.pickingDate = true;
              this.startDate = this.startDate.startOf('day');
            }

            if (this.timePicker && this.timePickerIncrement) {
              this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);
            }

            if (this.minDate && this.startDate.isBefore(this.minDate)) {
              this.startDate = this.minDate.clone();

              if (this.timePicker && this.timePickerIncrement) {
                this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);
              }
            }

            if (this.maxDate && this.startDate.isAfter(this.maxDate)) {
              this.startDate = this.maxDate.clone();

              if (this.timePicker && this.timePickerIncrement) {
                this.startDate.minute(Math.floor(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);
              }
            }

            if (!this.isShown) {
              this.updateElement();
            }

            this.startDateChanged.emit({
              startDate: this.startDate
            });
            this.updateMonthsInView();
          }
        }, {
          key: "setEndDate",
          value: function setEndDate(endDate) {
            if (typeof endDate === 'string') {
              this.endDate = moment$1(endDate, this.locale.format);
            }

            if (typeof endDate === 'object') {
              this.pickingDate = false;
              this.endDate = moment$1(endDate);
            }

            if (!this.timePicker) {
              this.pickingDate = false;
              this.endDate = this.endDate.add(1, 'd').startOf('day').subtract(1, 'second');
            }

            if (this.timePicker && this.timePickerIncrement) {
              this.endDate.minute(Math.round(this.endDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);
            }

            if (this.endDate.isBefore(this.startDate)) {
              this.endDate = this.startDate.clone();
            }

            if (this.maxDate && this.endDate.isAfter(this.maxDate)) {
              this.endDate = this.maxDate.clone();
            }

            if (this.dateLimit && this.startDate.clone().add(this.dateLimit, 'day').isBefore(this.endDate)) {
              this.endDate = this.startDate.clone().add(this.dateLimit, 'day');
            }

            if (!this.isShown) {// this.updateElement();
            }

            this.endDateChanged.emit({
              endDate: this.endDate
            });
            this.updateMonthsInView();
          }
        }, {
          key: "isInvalidDate",
          value: function isInvalidDate(date) {
            return false;
          }
        }, {
          key: "isCustomDate",
          value: function isCustomDate(date) {
            return false;
          }
        }, {
          key: "isTooltipDate",
          value: function isTooltipDate(date) {
            return null;
          }
        }, {
          key: "updateView",
          value: function updateView() {
            if (this.timePicker) {
              this.renderTimePicker(SideEnum.left);
              this.renderTimePicker(SideEnum.right);
            }

            this.updateMonthsInView();
            this.updateCalendars();
          }
        }, {
          key: "updateMonthsInView",
          value: function updateMonthsInView() {
            if (this.endDate) {
              // if both dates are visible already, do nothing
              if (!this.singleDatePicker && this.leftCalendar.month && this.rightCalendar.month && (this.startDate && this.leftCalendar && this.startDate.format('YYYY-MM') === this.leftCalendar.month.format('YYYY-MM') || this.startDate && this.rightCalendar && this.startDate.format('YYYY-MM') === this.rightCalendar.month.format('YYYY-MM')) && (this.endDate.format('YYYY-MM') === this.leftCalendar.month.format('YYYY-MM') || this.endDate.format('YYYY-MM') === this.rightCalendar.month.format('YYYY-MM'))) {
                return;
              }

              if (this.startDate) {
                this.leftCalendar.month = this.startDate.clone().date(2);

                if (!this.linkedCalendars && (this.endDate.month() !== this.startDate.month() || this.endDate.year() !== this.startDate.year())) {
                  this.rightCalendar.month = this.endDate.clone().date(2);
                } else {
                  this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');
                }
              }
            } else {
              if (this.leftCalendar.month.format('YYYY-MM') !== this.startDate.format('YYYY-MM') && this.rightCalendar.month.format('YYYY-MM') !== this.startDate.format('YYYY-MM')) {
                this.leftCalendar.month = this.startDate.clone().date(2);
                this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');
              }
            }

            if (this.maxDate && this.linkedCalendars && !this.singleDatePicker && this.rightCalendar.month > this.maxDate) {
              this.rightCalendar.month = this.maxDate.clone().date(2);
              this.leftCalendar.month = this.maxDate.clone().date(2).subtract(1, 'month');
            }
          }
          /**
           *  This is responsible for updating the calendars
           */

        }, {
          key: "updateCalendars",
          value: function updateCalendars() {
            this.renderCalendar(SideEnum.left);
            this.renderCalendar(SideEnum.right);

            if (this.endDate === null) {
              return;
            }

            this.calculateChosenLabel();
          }
        }, {
          key: "updateElement",
          value: function updateElement() {
            var format = this.locale.displayFormat ? this.locale.displayFormat : this.locale.format;

            if (!this.singleDatePicker && this.autoUpdateInput) {
              if (this.startDate && this.endDate) {
                // if we use ranges and should show range label on input
                if (this.rangesArray.length && this.showRangeLabelOnInput === true && this.chosenRange && this.locale.customRangeLabel !== this.chosenRange) {
                  this.chosenLabel = this.chosenRange;
                } else {
                  this.chosenLabel = this.startDate.format(format) + this.locale.separator + this.endDate.format(format);
                }
              }
            } else if (this.autoUpdateInput) {
              this.chosenLabel = this.startDate.format(format);
            }
          }
        }, {
          key: "remove",
          value: function remove() {
            this.isShown = false;
          }
          /**
           * this should calculate the label
           */

        }, {
          key: "calculateChosenLabel",
          value: function calculateChosenLabel() {
            if (!this.locale || !this.locale.separator) {
              this._buildLocale();
            }

            var customRange = true;
            var i = 0;

            if (this.rangesArray.length > 0) {
              for (var range in this.ranges) {
                if (this.ranges[range]) {
                  if (this.timePicker) {
                    var format = this.timePickerSeconds ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD HH:mm'; // ignore times when comparing dates if time picker seconds is not enabled

                    if (this.startDate.format(format) === this.ranges[range][0].format(format) && this.endDate.format(format) === this.ranges[range][1].format(format)) {
                      customRange = false;
                      this.chosenRange = this.rangesArray[i];
                      break;
                    }
                  } else {
                    // ignore times when comparing dates if time picker is not enabled
                    if (this.startDate.format('YYYY-MM-DD') === this.ranges[range][0].format('YYYY-MM-DD') && this.endDate.format('YYYY-MM-DD') === this.ranges[range][1].format('YYYY-MM-DD')) {
                      customRange = false;
                      this.chosenRange = this.rangesArray[i];
                      break;
                    }
                  }

                  i++;
                }
              }

              if (customRange) {
                if (this.showCustomRangeLabel) {
                  this.chosenRange = this.locale.customRangeLabel;
                } else {
                  this.chosenRange = null;
                } // if custom label: show calendar


                this.showCalInRanges = true;
              }
            }

            this.updateElement();
          }
        }, {
          key: "clickApply",
          value: function clickApply(e) {
            if (!this.singleDatePicker && this.startDate && !this.endDate) {
              this.endDate = this._getDateWithTime(this.startDate, SideEnum.right);
              this.calculateChosenLabel();
            }

            if (this.isInvalidDate && this.startDate && this.endDate) {
              // get if there are invalid date between range
              var d = this.startDate.clone();

              while (d.isBefore(this.endDate)) {
                if (this.isInvalidDate(d)) {
                  this.endDate = d.subtract(1, 'days');
                  this.calculateChosenLabel();
                  break;
                }

                d.add(1, 'days');
              }
            }

            if (this.chosenLabel) {
              this.choosedDate.emit({
                chosenLabel: this.chosenLabel,
                startDate: this.startDate,
                endDate: this.endDate
              });
            }

            this.datesUpdated.emit({
              startDate: this.startDate,
              endDate: this.endDate
            });

            if (e || this.closeOnAutoApply && !e) {
              this.hide();
            }
          }
        }, {
          key: "clickCancel",
          value: function clickCancel(e) {
            this.startDate = this._old.start;
            this.endDate = this._old.end;

            if (this.inline) {
              this.updateView();
            }

            this.hide();
          }
          /**
           * called when month is changed
           * @param monthEvent get value in event.target.value
           * @param side left or right
           */

        }, {
          key: "monthChanged",
          value: function monthChanged(monthEvent, side) {
            var year = this.calendarVariables[side].dropdowns.currentYear;
            var month = parseInt(monthEvent.target.value, 10);
            this.monthOrYearChanged(month, year, side);
          }
          /**
           * called when year is changed
           * @param yearEvent get value in event.target.value
           * @param side left or right
           */

        }, {
          key: "yearChanged",
          value: function yearChanged(yearEvent, side) {
            var month = this.calendarVariables[side].dropdowns.currentMonth;
            var year = parseInt(yearEvent.target.value, 10);
            this.monthOrYearChanged(month, year, side);
          }
          /**
           * called when time is changed
           * @param timeEvent  an event
           * @param side left or right
           */

        }, {
          key: "timeChanged",
          value: function timeChanged(timeEvent, side) {
            var hour = parseInt(this.timepickerVariables[side].selectedHour, 10);
            var minute = parseInt(this.timepickerVariables[side].selectedMinute, 10);
            var second = this.timePickerSeconds ? parseInt(this.timepickerVariables[side].selectedSecond, 10) : 0;

            if (!this.timePicker24Hour) {
              var ampm = this.timepickerVariables[side].ampmModel;

              if (ampm === 'PM' && hour < 12) {
                hour += 12;
              }

              if (ampm === 'AM' && hour === 12) {
                hour = 0;
              }
            }

            if (side === SideEnum.left) {
              var _start8 = this.startDate.clone();

              _start8.hour(hour);

              _start8.minute(minute);

              _start8.second(second);

              this.setStartDate(_start8);

              if (this.singleDatePicker) {
                this.endDate = this.startDate.clone();
              } else if (this.endDate && this.endDate.format('YYYY-MM-DD') === _start8.format('YYYY-MM-DD') && this.endDate.isBefore(_start8)) {
                this.setEndDate(_start8.clone());
              } else if (!this.endDate && this.timePicker) {
                var startClone = this._getDateWithTime(_start8, SideEnum.right);

                if (startClone.isBefore(_start8)) {
                  this.timepickerVariables[SideEnum.right].selectedHour = hour;
                  this.timepickerVariables[SideEnum.right].selectedMinute = minute;
                  this.timepickerVariables[SideEnum.right].selectedSecond = second;
                }
              }
            } else if (this.endDate) {
              var end = this.endDate.clone();
              end.hour(hour);
              end.minute(minute);
              end.second(second);
              this.setEndDate(end);
            } // update the calendars so all clickable dates reflect the new time component


            this.updateCalendars(); // re-render the time pickers because changing one selection can affect what's enabled in another

            this.renderTimePicker(SideEnum.left);
            this.renderTimePicker(SideEnum.right);

            if (this.autoApply) {
              this.clickApply();
            }
          }
          /**
           *  call when month or year changed
           * @param month month number 0 -11
           * @param year year eg: 1995
           * @param side left or right
           */

        }, {
          key: "monthOrYearChanged",
          value: function monthOrYearChanged(month, year, side) {
            var isLeft = side === SideEnum.left;

            if (!isLeft) {
              if (year < this.startDate.year() || year === this.startDate.year() && month < this.startDate.month()) {
                month = this.startDate.month();
                year = this.startDate.year();
              }
            }

            if (this.minDate) {
              if (year < this.minDate.year() || year === this.minDate.year() && month < this.minDate.month()) {
                month = this.minDate.month();
                year = this.minDate.year();
              }
            }

            if (this.maxDate) {
              if (year > this.maxDate.year() || year === this.maxDate.year() && month > this.maxDate.month()) {
                month = this.maxDate.month();
                year = this.maxDate.year();
              }
            }

            this.calendarVariables[side].dropdowns.currentYear = year;
            this.calendarVariables[side].dropdowns.currentMonth = month;

            if (isLeft) {
              this.leftCalendar.month.month(month).year(year);

              if (this.linkedCalendars) {
                this.rightCalendar.month = this.leftCalendar.month.clone().add(1, 'month');
              }
            } else {
              this.rightCalendar.month.month(month).year(year);

              if (this.linkedCalendars) {
                this.leftCalendar.month = this.rightCalendar.month.clone().subtract(1, 'month');
              }
            }

            this.updateCalendars();
          }
          /**
           * Click on previous month
           * @param side left or right calendar
           */

        }, {
          key: "clickPrev",
          value: function clickPrev(side) {
            if (side === SideEnum.left) {
              this.leftCalendar.month.subtract(1, 'month');

              if (this.linkedCalendars) {
                this.rightCalendar.month.subtract(1, 'month');
              }
            } else {
              this.rightCalendar.month.subtract(1, 'month');
            }

            this.updateCalendars();
          }
          /**
           * Click on next month
           * @param side left or right calendar
           */

        }, {
          key: "clickNext",
          value: function clickNext(side) {
            if (side === SideEnum.left) {
              this.leftCalendar.month.add(1, 'month');
            } else {
              this.rightCalendar.month.add(1, 'month');

              if (this.linkedCalendars) {
                this.leftCalendar.month.add(1, 'month');
              }
            }

            this.updateCalendars();
          }
          /**
           * When hovering a date
           * @param e event: get value by e.target.value
           * @param side left or right
           * @param row row position of the current date clicked
           * @param col col position of the current date clicked
           */

        }, {
          key: "hoverDate",
          value: function hoverDate(e, side, row, col) {
            var leftCalDate = this.calendarVariables.left.calendar[row][col];
            var rightCalDate = this.calendarVariables.right.calendar[row][col];

            if (this.pickingDate) {
              this.nowHoveredDate = side === SideEnum.left ? leftCalDate : rightCalDate;
              this.renderCalendar(SideEnum.left);
              this.renderCalendar(SideEnum.right);
            }

            var tooltip = side === SideEnum.left ? this.tooltiptext[leftCalDate] : this.tooltiptext[rightCalDate];

            if (tooltip.length > 0) {
              e.target.setAttribute('title', tooltip);
            }
          }
          /**
           * When selecting a date
           * @param e event: get value by e.target.value
           * @param side left or right
           * @param row row position of the current date clicked
           * @param col col position of the current date clicked
           */

        }, {
          key: "clickDate",
          value: function clickDate(e, side, row, col) {
            if (e.target.tagName === 'TD') {
              if (!e.target.classList.contains('available')) {
                return;
              }
            } else if (e.target.tagName === 'SPAN') {
              if (!e.target.parentElement.classList.contains('available')) {
                return;
              }
            }

            if (this.rangesArray.length) {
              this.chosenRange = this.locale.customRangeLabel;
            }

            var date = side === SideEnum.left ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];

            if ((this.endDate || date.isBefore(this.startDate, 'day') && this.customRangeDirection === false) && this.lockStartDate === false) {
              // picking start
              if (this.timePicker) {
                date = this._getDateWithTime(date, SideEnum.left);
              }

              this.endDate = null;
              this.setStartDate(date.clone());
            } else if (!this.endDate && date.isBefore(this.startDate) && this.customRangeDirection === false) {
              // special case: clicking the same date for start/end,
              // but the time of the end date is before the start date
              this.setEndDate(this.startDate.clone());
            } else {
              // picking end
              if (this.timePicker) {
                date = this._getDateWithTime(date, SideEnum.right);
              }

              if (date.isBefore(this.startDate, 'day') === true && this.customRangeDirection === true) {
                this.setEndDate(this.startDate);
                this.setStartDate(date.clone());
              } else {
                this.setEndDate(date.clone());
              }

              if (this.autoApply) {
                this.calculateChosenLabel();
              }
            }

            if (this.singleDatePicker) {
              this.setEndDate(this.startDate);
              this.updateElement();

              if (this.autoApply) {
                this.clickApply();
              }
            }

            this.updateView();

            if (this.autoApply && this.startDate && this.endDate) {
              this.clickApply();
            } // This is to cancel the blur event handler if the mouse was in one of the inputs


            e.stopPropagation();
          }
          /**
           *  Click on the custom range
           * @param e: Event
           * @param label
           */

        }, {
          key: "clickRange",
          value: function clickRange(e, label) {
            this.chosenRange = label;

            if (label === this.locale.customRangeLabel) {
              this.isShown = true; // show calendars

              this.showCalInRanges = true;
            } else {
              var dates = this.ranges[label];
              this.startDate = dates[0].clone();
              this.endDate = dates[1].clone();

              if (this.showRangeLabelOnInput && label !== this.locale.customRangeLabel) {
                this.chosenLabel = label;
              } else {
                this.calculateChosenLabel();
              }

              this.showCalInRanges = !this.rangesArray.length || this.alwaysShowCalendars;

              if (!this.timePicker) {
                this.startDate.startOf('day');
                this.endDate.endOf('day');
              }

              if (!this.alwaysShowCalendars) {
                this.isShown = false; // hide calendars
              }

              this.rangeClicked.emit({
                label: label,
                dates: dates
              });

              if (!this.keepCalendarOpeningWithRange || this.autoApply) {
                this.clickApply();
              } else {
                if (!this.alwaysShowCalendars) {
                  return this.clickApply();
                }

                if (this.maxDate && this.maxDate.isSame(dates[0], 'month')) {
                  this.rightCalendar.month.month(dates[0].month());
                  this.rightCalendar.month.year(dates[0].year());
                  this.leftCalendar.month.month(dates[0].month() - 1);
                  this.leftCalendar.month.year(dates[1].year());
                } else {
                  this.leftCalendar.month.month(dates[0].month());
                  this.leftCalendar.month.year(dates[0].year()); // get the next year

                  var nextMonth = dates[0].clone().add(1, 'month');
                  this.rightCalendar.month.month(nextMonth.month());
                  this.rightCalendar.month.year(nextMonth.year());
                }

                this.updateCalendars();

                if (this.timePicker) {
                  this.renderTimePicker(SideEnum.left);
                  this.renderTimePicker(SideEnum.right);
                }
              }
            }
          }
        }, {
          key: "show",
          value: function show(e) {
            if (this.isShown) {
              return;
            }

            this._old.start = this.startDate.clone();
            this._old.end = this.endDate.clone();
            this.isShown = true;
            this.updateView();
          }
        }, {
          key: "hide",
          value: function hide(e) {
            if (!this.isShown) {
              return;
            } // incomplete date selection, revert to last values


            if (!this.endDate) {
              if (this._old.start) {
                this.startDate = this._old.start.clone();
              }

              if (this._old.end) {
                this.endDate = this._old.end.clone();
              }
            } // if a new date range was selected, invoke the user callback function


            if (!this.startDate.isSame(this._old.start) || !this.endDate.isSame(this._old.end)) {// this.callback(this.startDate, this.endDate, this.chosenLabel);
            } // if picker is attached to a text input, update it


            this.updateElement();
            this.isShown = false;

            this._ref.detectChanges();
          }
          /**
           * handle click on all element in the component, useful for outside of click
           * @param e event
           */

        }, {
          key: "handleInternalClick",
          value: function handleInternalClick(e) {
            e.stopPropagation();
          }
          /**
           * update the locale options
           * @param locale
           */

        }, {
          key: "updateLocale",
          value: function updateLocale(locale) {
            for (var key in locale) {
              if (locale.hasOwnProperty(key)) {
                this.locale[key] = locale[key];

                if (key === 'customRangeLabel') {
                  this.renderRanges();
                }
              }
            }
          }
          /**
           *  clear the daterange picker
           */

        }, {
          key: "clear",
          value: function clear() {
            this.startDate = moment$1().startOf('day');
            this.endDate = moment$1().endOf('day');
            this.choosedDate.emit({
              chosenLabel: '',
              startDate: null,
              endDate: null
            });
            this.datesUpdated.emit({
              startDate: null,
              endDate: null
            });
            this.hide();
          }
          /**
           * Find out if the selected range should be disabled if it doesn't
           * fit into minDate and maxDate limitations.
           */

        }, {
          key: "disableRange",
          value: function disableRange(range) {
            var _this613 = this;

            if (range === this.locale.customRangeLabel) {
              return false;
            }

            var rangeMarkers = this.ranges[range];
            var areBothBefore = rangeMarkers.every(function (date) {
              if (!_this613.minDate) {
                return false;
              }

              return date.isBefore(_this613.minDate);
            });
            var areBothAfter = rangeMarkers.every(function (date) {
              if (!_this613.maxDate) {
                return false;
              }

              return date.isAfter(_this613.maxDate);
            });
            return areBothBefore || areBothAfter;
          }
          /**
           *
           * @param date the date to add time
           * @param side left or right
           */

        }, {
          key: "_getDateWithTime",
          value: function _getDateWithTime(date, side) {
            var hour = parseInt(this.timepickerVariables[side].selectedHour, 10);

            if (!this.timePicker24Hour) {
              var ampm = this.timepickerVariables[side].ampmModel;

              if (ampm === 'PM' && hour < 12) {
                hour += 12;
              }

              if (ampm === 'AM' && hour === 12) {
                hour = 0;
              }
            }

            var minute = parseInt(this.timepickerVariables[side].selectedMinute, 10);
            var second = this.timePickerSeconds ? parseInt(this.timepickerVariables[side].selectedSecond, 10) : 0;
            return date.clone().hour(hour).minute(minute).second(second);
          }
          /**
           *  build the locale config
           */

        }, {
          key: "_buildLocale",
          value: function _buildLocale() {
            this.locale = Object.assign({}, this._localeService.config, this.locale);

            if (!this.locale.format) {
              if (this.timePicker) {
                this.locale.format = moment$1.localeData().longDateFormat('lll');
              } else {
                this.locale.format = moment$1.localeData().longDateFormat('L');
              }
            }
          }
        }, {
          key: "_buildCells",
          value: function _buildCells(calendar, side) {
            var _this614 = this;

            var _loop7 = function _loop7(row) {
              _this614.calendarVariables[side].classes[row] = {};
              var rowClasses = [];

              if (_this614.emptyWeekRowClass && Array.from(Array(7).keys()).some(function (i) {
                return calendar[row][i].month() !== _this614.calendarVariables[side].month;
              })) {
                rowClasses.push(_this614.emptyWeekRowClass);
              }

              for (var col = 0; col < 7; col++) {
                var classes = []; // empty week row class

                if (_this614.emptyWeekColumnClass) {
                  if (calendar[row][col].month() !== _this614.calendarVariables[side].month) {
                    classes.push(_this614.emptyWeekColumnClass);
                  }
                } // highlight today's date


                if (calendar[row][col].isSame(new Date(), 'day')) {
                  classes.push('today');
                } // highlight weekends


                if (calendar[row][col].isoWeekday() > 5) {
                  classes.push('weekend');
                } // grey out the dates in other months displayed at beginning and end of this calendar


                if (calendar[row][col].month() !== calendar[1][1].month()) {
                  classes.push('off'); // mark the last day of the previous month in this calendar

                  if (_this614.lastDayOfPreviousMonthClass && (calendar[row][col].month() < calendar[1][1].month() || calendar[1][1].month() === 0) && calendar[row][col].date() === _this614.calendarVariables[side].daysInLastMonth) {
                    classes.push(_this614.lastDayOfPreviousMonthClass);
                  } // mark the first day of the next month in this calendar


                  if (_this614.firstDayOfNextMonthClass && (calendar[row][col].month() > calendar[1][1].month() || calendar[row][col].month() === 0) && calendar[row][col].date() === 1) {
                    classes.push(_this614.firstDayOfNextMonthClass);
                  }
                } // mark the first day of the current month with a custom class


                if (_this614.firstMonthDayClass && calendar[row][col].month() === calendar[1][1].month() && calendar[row][col].date() === calendar.firstDay.date()) {
                  classes.push(_this614.firstMonthDayClass);
                } // mark the last day of the current month with a custom class


                if (_this614.lastMonthDayClass && calendar[row][col].month() === calendar[1][1].month() && calendar[row][col].date() === calendar.lastDay.date()) {
                  classes.push(_this614.lastMonthDayClass);
                } // don't allow selection of dates before the minimum date


                if (_this614.minDate && calendar[row][col].isBefore(_this614.minDate, 'day')) {
                  classes.push('off', 'disabled');
                } // don't allow selection of dates after the maximum date


                if (_this614.calendarVariables[side].maxDate && calendar[row][col].isAfter(_this614.calendarVariables[side].maxDate, 'day')) {
                  classes.push('off', 'disabled');
                } // don't allow selection of date if a custom function decides it's invalid


                if (_this614.isInvalidDate(calendar[row][col])) {
                  classes.push('off', 'disabled', 'invalid');
                } // highlight the currently selected start date


                if (_this614.startDate && calendar[row][col].format('YYYY-MM-DD') === _this614.startDate.format('YYYY-MM-DD')) {
                  classes.push('active', 'start-date');
                } // highlight the currently selected end date


                if (_this614.endDate != null && calendar[row][col].format('YYYY-MM-DD') === _this614.endDate.format('YYYY-MM-DD')) {
                  classes.push('active', 'end-date');
                } // highlight dates in-between the selected dates


                if ((_this614.nowHoveredDate != null && _this614.pickingDate || _this614.endDate != null) && calendar[row][col] > _this614.startDate && (calendar[row][col] < _this614.endDate || calendar[row][col] < _this614.nowHoveredDate && _this614.pickingDate) && !classes.find(function (el) {
                  return el === 'off';
                })) {
                  classes.push('in-range');
                } // apply custom classes for this date


                var isCustom = _this614.isCustomDate(calendar[row][col]);

                if (isCustom !== false) {
                  if (typeof isCustom === 'string') {
                    classes.push(isCustom);
                  } else {
                    Array.prototype.push.apply(classes, isCustom);
                  }
                } // apply custom tooltip for this date


                var isTooltip = _this614.isTooltipDate(calendar[row][col]);

                if (isTooltip) {
                  if (typeof isTooltip === 'string') {
                    _this614.tooltiptext[calendar[row][col]] = isTooltip; // setting tooltiptext for custom date
                  } else {
                    _this614.tooltiptext[calendar[row][col]] = 'Put the tooltip as the returned value of isTooltipDate';
                  }
                } else {
                  _this614.tooltiptext[calendar[row][col]] = '';
                } // store classes var


                var cname = '',
                    disabled = false;

                for (var i = 0; i < classes.length; i++) {
                  cname += classes[i] + ' ';

                  if (classes[i] === 'disabled') {
                    disabled = true;
                  }
                }

                if (!disabled) {
                  cname += 'available';
                }

                _this614.calendarVariables[side].classes[row][col] = cname.replace(/^\s+|\s+$/g, '');
              }

              _this614.calendarVariables[side].classes[row].classList = rowClasses.join(' ');
            };

            for (var row = 0; row < 6; row++) {
              _loop7(row);
            }
          }
          /**
           * Find out if the current calendar row has current month days
           * (as opposed to consisting of only previous/next month days)
           */

        }, {
          key: "hasCurrentMonthDays",
          value: function hasCurrentMonthDays(currentMonth, row) {
            for (var day = 0; day < 7; day++) {
              if (row[day].month() === currentMonth) {
                return true;
              }
            }

            return false;
          }
        }]);

        return DaterangepickerComponent;
      }();

      DaterangepickerComponent.ɵfac = function DaterangepickerComponent_Factory(t) {
        return new (t || DaterangepickerComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_2__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_2__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](LocaleService));
      };

      DaterangepickerComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineComponent"]({
        type: DaterangepickerComponent,
        selectors: [["ngx-daterangepicker-material"]],
        viewQuery: function DaterangepickerComponent_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵviewQuery"](_c0, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵloadQuery"]()) && (ctx.pickerContainer = _t.first);
          }
        },
        hostBindings: function DaterangepickerComponent_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("click", function DaterangepickerComponent_click_HostBindingHandler($event) {
              return ctx.handleInternalClick($event);
            });
          }
        },
        inputs: {
          startDate: "startDate",
          endDate: "endDate",
          dateLimit: "dateLimit",
          minDate: "minDate",
          maxDate: "maxDate",
          autoApply: "autoApply",
          singleDatePicker: "singleDatePicker",
          showDropdowns: "showDropdowns",
          showWeekNumbers: "showWeekNumbers",
          showISOWeekNumbers: "showISOWeekNumbers",
          linkedCalendars: "linkedCalendars",
          autoUpdateInput: "autoUpdateInput",
          alwaysShowCalendars: "alwaysShowCalendars",
          maxSpan: "maxSpan",
          lockStartDate: "lockStartDate",
          timePicker: "timePicker",
          timePicker24Hour: "timePicker24Hour",
          timePickerIncrement: "timePickerIncrement",
          timePickerSeconds: "timePickerSeconds",
          showClearButton: "showClearButton",
          firstMonthDayClass: "firstMonthDayClass",
          lastMonthDayClass: "lastMonthDayClass",
          emptyWeekRowClass: "emptyWeekRowClass",
          emptyWeekColumnClass: "emptyWeekColumnClass",
          firstDayOfNextMonthClass: "firstDayOfNextMonthClass",
          lastDayOfPreviousMonthClass: "lastDayOfPreviousMonthClass",
          showCancel: "showCancel",
          keepCalendarOpeningWithRange: "keepCalendarOpeningWithRange",
          showRangeLabelOnInput: "showRangeLabelOnInput",
          customRangeDirection: "customRangeDirection",
          closeOnAutoApply: "closeOnAutoApply",
          locale: "locale",
          ranges: "ranges",
          isInvalidDate: "isInvalidDate",
          isCustomDate: "isCustomDate",
          isTooltipDate: "isTooltipDate",
          showCustomRangeLabel: "showCustomRangeLabel",
          drops: "drops",
          opens: "opens"
        },
        outputs: {
          choosedDate: "choosedDate",
          rangeClicked: "rangeClicked",
          datesUpdated: "datesUpdated",
          startDateChanged: "startDateChanged",
          endDateChanged: "endDateChanged"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵProvidersFeature"]([{
          provide: _angular_forms__WEBPACK_IMPORTED_MODULE_3__["NG_VALUE_ACCESSOR"],
          useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["forwardRef"])(function () {
            return DaterangepickerComponent_1;
          }),
          multi: true
        }])],
        decls: 8,
        vars: 15,
        consts: [[1, "md-drppicker", 3, "ngClass"], ["pickerContainer", ""], [1, "ranges"], [4, "ngFor", "ngForOf"], ["class", "calendar", 3, "ngClass", 4, "ngIf"], ["class", "calendar right", 4, "ngIf"], ["class", "buttons", 4, "ngIf"], ["type", "button", 3, "disabled", "ngClass", "click"], [1, "calendar", 3, "ngClass"], [1, "calendar-table"], ["class", "table-condensed", 4, "ngIf"], ["class", "calendar-time", 4, "ngIf"], [1, "table-condensed"], [4, "ngIf"], ["colspan", "5", 1, "month", "drp-animate"], [1, "week-days"], ["class", "week", 4, "ngIf"], [1, "drp-animate"], [3, "class", 4, "ngFor", "ngForOf"], [1, "prev", "available", 3, "click"], [1, "dropdowns"], [1, "monthselect", 3, "change"], [3, "disabled", "value", "selected", 4, "ngFor", "ngForOf"], [1, "yearselect", 3, "change"], [3, "selected", 4, "ngFor", "ngForOf"], [3, "disabled", "value", "selected"], [3, "selected"], [1, "next", "available", 3, "click"], [1, "week"], [3, "class", "click", "mouseenter", 4, "ngFor", "ngForOf"], [3, "click", "mouseenter"], [1, "calendar-time"], [1, "select"], [1, "hourselect", "select-item", 3, "disabled", "ngModel", "ngModelChange"], [3, "value", "disabled", 4, "ngFor", "ngForOf"], [1, "select-item", "minuteselect", 3, "disabled", "ngModel", "ngModelChange"], [1, "select-highlight"], [1, "select-bar"], ["class", "select-item secondselect", 3, "disabled", "ngModel", "ngModelChange", 4, "ngIf"], ["class", "select-item ampmselect", 3, "ngModel", "ngModelChange", 4, "ngIf"], [3, "value", "disabled"], [1, "select-item", "secondselect", 3, "disabled", "ngModel", "ngModelChange"], [1, "select-item", "ampmselect", 3, "ngModel", "ngModelChange"], ["value", "AM", 3, "disabled"], ["value", "PM", 3, "disabled"], [1, "calendar", "right"], ["colspan", "5", 1, "month"], [1, "select-item", "hourselect", 3, "disabled", "ngModel", "ngModelChange"], [1, "buttons"], [1, "buttons_input"], ["class", "btn btn-default clear", "type", "button", 3, "title", "click", 4, "ngIf"], ["class", "btn btn-default", "type", "button", 3, "click", 4, "ngIf"], ["type", "button", 1, "btn", 3, "disabled", "click"], ["type", "button", 1, "btn", "btn-default", "clear", 3, "title", "click"], ["xmlns", "http://www.w3.org/2000/svg", "width", "30", "height", "30", "viewBox", "0 -5 24 24"], ["d", "M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"], ["type", "button", 1, "btn", "btn-default", 3, "click"]],
        template: function DaterangepickerComponent_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 0, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](2, "div", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](3, "ul");

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](4, DaterangepickerComponent_li_4_Template, 3, 5, "li", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](5, DaterangepickerComponent_div_5_Template, 4, 6, "div", 4);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](6, DaterangepickerComponent_div_6_Template, 4, 2, "div", 5);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](7, DaterangepickerComponent_div_7_Template, 6, 4, "div", 6);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵclassMap"]("drops-" + ctx.drops + "-" + ctx.opens);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵpureFunction7"](7, _c3, ctx.locale.direction === "ltr", ctx.locale.direction === "rtl", ctx.isShown || ctx.inline, !ctx.isShown && !ctx.inline, ctx.inline, !ctx.singleDatePicker && ctx.showCalInRanges, ctx.rangesArray.length));

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](4);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngForOf", ctx.rangesArray);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx.showCalInRanges);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx.showCalInRanges && !ctx.singleDatePicker);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", !ctx.autoApply && (!ctx.rangesArray.length || ctx.showCalInRanges && !ctx.singleDatePicker));
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgClass"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["NgSelectOption"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["ɵangular_packages_forms_forms_x"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["SelectControlValueAccessor"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["NgControlStatus"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["NgModel"]],
        styles: [".md-drppicker{position:absolute;font-family:Roboto,sans-serif;color:inherit;border-radius:4px;width:278px;padding:4px;margin-top:-10px;overflow:hidden;z-index:1000;font-size:14px;background-color:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,.16),0 2px 8px 0 rgba(0,0,0,.12)}.md-drppicker.double{width:auto}.md-drppicker.inline{position:relative;display:inline-block}.md-drppicker:after,.md-drppicker:before{position:absolute;display:inline-block;border-bottom-color:rgba(0,0,0,.2);content:''}.md-drppicker.openscenter:after,.md-drppicker.openscenter:before{left:0;right:0;width:0;margin-left:auto;margin-right:auto}.md-drppicker.single .calendar,.md-drppicker.single .ranges{float:none}.md-drppicker.shown{transform:scale(1);transition:.1s ease-in-out;transform-origin:0 0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.md-drppicker.shown.drops-up-left{transform-origin:100% 100%}.md-drppicker.shown.drops-up-right{transform-origin:0 100%}.md-drppicker.shown.drops-down-left{transform-origin:100% 0}.md-drppicker.shown.drops-down-right{transform-origin:0 0}.md-drppicker.shown.drops-down-center{transform-origin:NaN}.md-drppicker.shown.drops-up-center{transform-origin:50%}.md-drppicker.shown .calendar{display:block}.md-drppicker.hidden{transition:.1s;transform:scale(0);transform-origin:0 0;cursor:default;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.md-drppicker.hidden.drops-up-left{transform-origin:100% 100%}.md-drppicker.hidden.drops-up-right{transform-origin:0 100%}.md-drppicker.hidden.drops-down-left{transform-origin:100% 0}.md-drppicker.hidden.drops-down-right{transform-origin:0 0}.md-drppicker.hidden.drops-down-center{transform-origin:NaN}.md-drppicker.hidden.drops-up-center{transform-origin:50%}.md-drppicker.hidden .calendar{display:none}.md-drppicker .calendar{max-width:270px;margin:4px}.md-drppicker .calendar.single .calendar-table{border:none}.md-drppicker .calendar td,.md-drppicker .calendar th{padding:0;white-space:nowrap;text-align:center;min-width:32px}.md-drppicker .calendar td span,.md-drppicker .calendar th span{pointer-events:none}.md-drppicker .calendar-table{border:1px solid #fff;padding:4px;border-radius:4px;background-color:#fff}.md-drppicker table{width:100%;margin:0}.md-drppicker th{color:#988c8c}.md-drppicker td,.md-drppicker th{text-align:center;border-radius:4px;border:1px solid transparent;white-space:nowrap;cursor:pointer;height:2em;width:2em}.md-drppicker td.available.prev,.md-drppicker th.available.prev{display:block;background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K);background-repeat:no-repeat;background-size:.5em;background-position:center;opacity:.8;transition:background-color .2s;border-radius:2em}.md-drppicker td.available.prev:hover,.md-drppicker th.available.prev:hover{margin:0}.md-drppicker td.available.next,.md-drppicker th.available.next{transform:rotate(180deg);display:block;background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K);background-repeat:no-repeat;background-size:.5em;background-position:center;opacity:.8;transition:background-color .2s;border-radius:2em}.md-drppicker td.available.next:hover,.md-drppicker th.available.next:hover{margin:0;transform:rotate(180deg)}.md-drppicker td.available:hover,.md-drppicker th.available:hover{background-color:#eee;border-color:transparent;color:inherit;background-repeat:no-repeat;background-size:.5em;background-position:center;margin:.25em 0;opacity:.8;border-radius:2em;transform:scale(1);transition:450ms cubic-bezier(.23,1,.32,1)}.md-drppicker td.week,.md-drppicker th.week{font-size:80%;color:#ccc}.md-drppicker td{margin:.25em 0;opacity:.8;transition:450ms cubic-bezier(.23,1,.32,1);border-radius:2em;transform:scale(1)}.md-drppicker td.off,.md-drppicker td.off.end-date,.md-drppicker td.off.in-range,.md-drppicker td.off.start-date{background-color:#fff;border-color:transparent;color:#999}.md-drppicker td.in-range{background-color:#dde2e4;border-color:transparent;color:#000;border-radius:0}.md-drppicker td.start-date{border-radius:2em 0 0 2em}.md-drppicker td.end-date{border-radius:0 2em 2em 0}.md-drppicker td.start-date.end-date{border-radius:4px}.md-drppicker td.active{transition:background .3s ease-out;background:rgba(0,0,0,.1)}.md-drppicker td.active,.md-drppicker td.active:hover{background-color:#3f51b5;border-color:transparent;color:#fff}.md-drppicker th.month{width:auto}.md-drppicker option.disabled,.md-drppicker td.disabled{color:#999;cursor:not-allowed;text-decoration:line-through}.md-drppicker .dropdowns{background-repeat:no-repeat;background-size:10px;background-position-y:center;background-position-x:right;width:50px;background-image:url(data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDI1NSAyNTUiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDI1NSAyNTU7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8ZyBpZD0iYXJyb3ctZHJvcC1kb3duIj4KCQk8cG9seWdvbiBwb2ludHM9IjAsNjMuNzUgMTI3LjUsMTkxLjI1IDI1NSw2My43NSAgICIgZmlsbD0iIzk4OGM4YyIvPgoJPC9nPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo=)}.md-drppicker .dropdowns select{display:inline-block;background-color:rgba(255,255,255,.9);width:100%;padding:5px;border:1px solid #f2f2f2;border-radius:2px;height:3rem}.md-drppicker .dropdowns select.ampmselect,.md-drppicker .dropdowns select.hourselect,.md-drppicker .dropdowns select.minuteselect,.md-drppicker .dropdowns select.secondselect{width:50px;margin:0 auto;background:#eee;border:1px solid #eee;padding:2px;outline:0;font-size:12px}.md-drppicker .dropdowns select.monthselect,.md-drppicker .dropdowns select.yearselect{font-size:12px;height:auto;cursor:pointer;opacity:0;position:absolute;top:0;left:0;margin:0;padding:0}.md-drppicker th.month>div{position:relative;display:inline-block}.md-drppicker .calendar-time{text-align:center;margin:4px auto 0;line-height:30px;position:relative}.md-drppicker .calendar-time .select{display:inline}.md-drppicker .calendar-time .select .select-item{display:inline-block;width:auto;position:relative;font-family:inherit;background-color:transparent;padding:10px 10px 10px 0;font-size:18px;border-radius:0;border:none;border-bottom:1px solid rgba(0,0,0,.12)}.md-drppicker .calendar-time .select .select-item:after{position:absolute;top:18px;right:10px;width:0;height:0;padding:0;content:'';border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid rgba(0,0,0,.12);pointer-events:none}.md-drppicker .calendar-time .select .select-item:focus{outline:0}.md-drppicker .calendar-time .select .select-item .select-label{color:rgba(0,0,0,.26);font-size:16px;font-weight:400;position:absolute;pointer-events:none;left:0;top:10px;transition:.2s}.md-drppicker .calendar-time select.disabled{color:#ccc;cursor:not-allowed}.md-drppicker .label-input{border:1px solid #ccc;border-radius:4px;color:#555;height:30px;line-height:30px;display:block;vertical-align:middle;margin:0 auto 5px;padding:0 0 0 28px;width:100%}.md-drppicker .label-input.active{border:1px solid #08c;border-radius:4px}.md-drppicker .md-drppicker_input{position:relative;padding:0 30px 0 0}.md-drppicker .md-drppicker_input i,.md-drppicker .md-drppicker_input svg{position:absolute;left:8px;top:8px}.md-drppicker.rtl .label-input{padding-right:28px;padding-left:6px}.md-drppicker.rtl .md-drppicker_input i,.md-drppicker.rtl .md-drppicker_input svg{left:auto;right:8px}.md-drppicker .show-ranges .drp-calendar.left{border-left:1px solid #ddd}.md-drppicker .ranges{float:none;text-align:left;margin:0}.md-drppicker .ranges ul{list-style:none;margin:0 auto;padding:0;width:100%}.md-drppicker .ranges ul li{font-size:12px}.md-drppicker .ranges ul li button{padding:8px 12px;width:100%;background:0 0;border:none;text-align:left;cursor:pointer}.md-drppicker .ranges ul li button.active{background-color:#3f51b5;color:#fff}.md-drppicker .ranges ul li button[disabled]{opacity:.3}.md-drppicker .ranges ul li button:active{background:0 0}.md-drppicker .ranges ul li:hover{background-color:#eee}.md-drppicker .show-calendar .ranges{margin-top:8px}.md-drppicker [hidden]{display:none}.md-drppicker .buttons{text-align:right;margin:0 5px 5px 0}.md-drppicker .btn{position:relative;overflow:hidden;border-width:0;outline:0;padding:0 6px;cursor:pointer;border-radius:2px;box-shadow:0 1px 4px rgba(0,0,0,.6);background-color:#3f51b5;color:#ecf0f1;transition:background-color .4s;height:auto;text-transform:uppercase;line-height:36px;border:none}.md-drppicker .btn:focus,.md-drppicker .btn:hover{background-color:#3f51b5}.md-drppicker .btn>*{position:relative}.md-drppicker .btn span{display:block;padding:12px 24px}.md-drppicker .btn:before{content:\"\";position:absolute;top:50%;left:50%;display:block;width:0;padding-top:0;border-radius:100%;background-color:rgba(236,240,241,.3);transform:translate(-50%,-50%)}.md-drppicker .btn:active:before{width:120%;padding-top:120%;transition:width .2s ease-out,padding-top .2s ease-out}.md-drppicker .btn:disabled{opacity:.5}.md-drppicker .btn.btn-default{color:#000;background-color:#dcdcdc}.md-drppicker .clear{box-shadow:none;background-color:#fff!important}.md-drppicker .clear svg{color:#eb3232;fill:currentColor}@media (min-width:564px){.md-drppicker{width:auto}.md-drppicker.single .calendar.left{clear:none}.md-drppicker.ltr{direction:ltr;text-align:left}.md-drppicker.ltr .calendar.left{clear:left}.md-drppicker.ltr .calendar.left .calendar-table{border-right:none;border-top-right-radius:0;border-bottom-right-radius:0;padding-right:12px}.md-drppicker.ltr .calendar.right{margin-left:0}.md-drppicker.ltr .calendar.right .calendar-table{border-left:none;border-top-left-radius:0;border-bottom-left-radius:0}.md-drppicker.ltr .left .md-drppicker_input,.md-drppicker.ltr .right .md-drppicker_input{padding-right:35px}.md-drppicker.ltr .calendar,.md-drppicker.ltr .ranges{float:left}.md-drppicker.rtl{direction:rtl;text-align:right}.md-drppicker.rtl .calendar.left{clear:right;margin-left:0}.md-drppicker.rtl .calendar.left .calendar-table{border-left:none;border-top-left-radius:0;border-bottom-left-radius:0}.md-drppicker.rtl .calendar.right{margin-right:0}.md-drppicker.rtl .calendar.right .calendar-table{border-right:none;border-top-right-radius:0;border-bottom-right-radius:0}.md-drppicker.rtl .calendar.left .calendar-table,.md-drppicker.rtl .left .md-drppicker_input{padding-left:12px}.md-drppicker.rtl .calendar,.md-drppicker.rtl .ranges{text-align:right;float:right}.drp-animate{transform:translate(0);transition:transform .2s,opacity .2s}.drp-animate.drp-picker-site-this{transition-timing-function:linear}.drp-animate.drp-animate-right{transform:translateX(10%);opacity:0}.drp-animate.drp-animate-left{transform:translateX(-10%);opacity:0}}@media (min-width:730px){.md-drppicker .ranges{width:auto}.md-drppicker.ltr .ranges{float:left}.md-drppicker.rtl .ranges{float:right}.md-drppicker .calendar.left{clear:none!important}}"],
        encapsulation: 2
      });

      DaterangepickerComponent.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ChangeDetectorRef"]
        }, {
          type: LocaleService
        }];
      };

      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "startDate", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "endDate", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "dateLimit", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "minDate", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "maxDate", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "autoApply", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "singleDatePicker", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "showDropdowns", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "showWeekNumbers", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "showISOWeekNumbers", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "linkedCalendars", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "autoUpdateInput", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "alwaysShowCalendars", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "maxSpan", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "lockStartDate", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "timePicker", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "timePicker24Hour", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "timePickerIncrement", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "timePickerSeconds", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "showClearButton", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "firstMonthDayClass", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "lastMonthDayClass", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "emptyWeekRowClass", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "emptyWeekColumnClass", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "firstDayOfNextMonthClass", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "lastDayOfPreviousMonthClass", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "locale", null);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "ranges", null);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "showCustomRangeLabel", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "showCancel", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "keepCalendarOpeningWithRange", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "showRangeLabelOnInput", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "customRangeDirection", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "drops", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "opens", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "closeOnAutoApply", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"])()], DaterangepickerComponent.prototype, "choosedDate", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"])()], DaterangepickerComponent.prototype, "rangeClicked", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"])()], DaterangepickerComponent.prototype, "datesUpdated", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"])()], DaterangepickerComponent.prototype, "startDateChanged", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"])()], DaterangepickerComponent.prototype, "endDateChanged", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["ViewChild"])('pickerContainer')], DaterangepickerComponent.prototype, "pickerContainer", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "isInvalidDate", null);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "isCustomDate", null);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerComponent.prototype, "isTooltipDate", null);
      var DaterangepickerDirective_1;
      var moment$2 = moment__WEBPACK_IMPORTED_MODULE_4__;

      var DaterangepickerDirective = DaterangepickerDirective_1 = /*#__PURE__*/function () {
        function DaterangepickerDirective(viewContainerRef, _changeDetectorRef, _componentFactoryResolver, _el, _renderer, differs, _localeService, elementRef) {
          _classCallCheck2(this, DaterangepickerDirective);

          this.viewContainerRef = viewContainerRef;
          this._changeDetectorRef = _changeDetectorRef;
          this._componentFactoryResolver = _componentFactoryResolver;
          this._el = _el;
          this._renderer = _renderer;
          this.differs = differs;
          this._localeService = _localeService;
          this.elementRef = elementRef;
          this._onChange = Function.prototype;
          this._onTouched = Function.prototype;
          this._validatorChange = Function.prototype;
          this.dateLimit = null;
          this.showCancel = false;
          this.lockStartDate = false; // timepicker variables

          this.timePicker = false;
          this.timePicker24Hour = false;
          this.timePickerIncrement = 1;
          this.timePickerSeconds = false;
          this.closeOnAutoApply = true;
          this._locale = {};
          this._endKey = 'endDate';
          this._startKey = 'startDate';
          this.notForChangesProperty = ['locale', 'endKey', 'startKey'];
          this.onChange = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["EventEmitter"]();
          this.rangeClicked = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["EventEmitter"]();
          this.datesUpdated = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["EventEmitter"]();
          this.startDateChanged = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["EventEmitter"]();
          this.endDateChanged = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["EventEmitter"]();
          this.drops = 'down';
          this.opens = 'auto';

          var componentFactory = this._componentFactoryResolver.resolveComponentFactory(DaterangepickerComponent);

          viewContainerRef.clear();
          var componentRef = viewContainerRef.createComponent(componentFactory);
          this.picker = componentRef.instance;
          this.picker.inline = false; // set inline to false for all directive usage
        }

        _createClass2(DaterangepickerDirective, [{
          key: "locale",
          get: function get() {
            return this._locale;
          },
          set: function set(value) {
            this._locale = Object.assign({}, this._localeService.config, value);
          }
        }, {
          key: "startKey",
          set: function set(value) {
            if (value !== null) {
              this._startKey = value;
            } else {
              this._startKey = 'startDate';
            }
          }
        }, {
          key: "endKey",
          set: function set(value) {
            if (value !== null) {
              this._endKey = value;
            } else {
              this._endKey = 'endDate';
            }
          }
        }, {
          key: "value",
          get: function get() {
            return this._value || null;
          },
          set: function set(val) {
            this._value = val;

            this._onChange(val);

            this._changeDetectorRef.markForCheck();
          }
        }, {
          key: "disabled",
          get: function get() {
            return this._disabled;
          }
        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            var _this615 = this;

            this.picker.startDateChanged.asObservable().subscribe(function (itemChanged) {
              _this615.startDateChanged.emit(itemChanged);
            });
            this.picker.endDateChanged.asObservable().subscribe(function (itemChanged) {
              _this615.endDateChanged.emit(itemChanged);
            });
            this.picker.rangeClicked.asObservable().subscribe(function (range) {
              _this615.rangeClicked.emit(range);
            });
            this.picker.datesUpdated.asObservable().subscribe(function (range) {
              _this615.datesUpdated.emit(range);
            });
            this.picker.choosedDate.asObservable().subscribe(function (change) {
              if (change) {
                var value = {};
                value[_this615._startKey] = change.startDate;
                value[_this615._endKey] = change.endDate;
                _this615.value = value;

                _this615.onChange.emit(value);

                if (typeof change.chosenLabel === 'string') {
                  _this615._el.nativeElement.value = change.chosenLabel;
                }
              }
            });
            this.picker.firstMonthDayClass = this.firstMonthDayClass;
            this.picker.lastMonthDayClass = this.lastMonthDayClass;
            this.picker.emptyWeekRowClass = this.emptyWeekRowClass;
            this.picker.emptyWeekColumnClass = this.emptyWeekColumnClass;
            this.picker.firstDayOfNextMonthClass = this.firstDayOfNextMonthClass;
            this.picker.lastDayOfPreviousMonthClass = this.lastDayOfPreviousMonthClass;
            this.picker.drops = this.drops;
            this.picker.opens = this.opens;
            this.localeDiffer = this.differs.find(this.locale).create();
            this.picker.closeOnAutoApply = this.closeOnAutoApply;
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            for (var change in changes) {
              if (changes.hasOwnProperty(change)) {
                if (this.notForChangesProperty.indexOf(change) === -1) {
                  this.picker[change] = changes[change].currentValue;
                }
              }
            }
          }
        }, {
          key: "ngDoCheck",
          value: function ngDoCheck() {
            if (this.localeDiffer) {
              var changes = this.localeDiffer.diff(this.locale);

              if (changes) {
                this.picker.updateLocale(this.locale);
              }
            }
          }
        }, {
          key: "onBlur",
          value: function onBlur() {
            this._onTouched();
          }
        }, {
          key: "open",
          value: function open(event) {
            var _this616 = this;

            if (this.disabled) {
              return;
            }

            this.picker.show(event);
            setTimeout(function () {
              _this616.setPosition();
            });
          }
        }, {
          key: "hide",
          value: function hide(e) {
            this.picker.hide(e);
          }
        }, {
          key: "toggle",
          value: function toggle(e) {
            if (this.picker.isShown) {
              this.hide(e);
            } else {
              this.open(e);
            }
          }
        }, {
          key: "clear",
          value: function clear() {
            this.picker.clear();
          }
        }, {
          key: "writeValue",
          value: function writeValue(value) {
            this.setValue(value);
          }
        }, {
          key: "registerOnChange",
          value: function registerOnChange(fn) {
            this._onChange = fn;
          }
        }, {
          key: "registerOnTouched",
          value: function registerOnTouched(fn) {
            this._onTouched = fn;
          }
        }, {
          key: "setDisabledState",
          value: function setDisabledState(state) {
            this._disabled = state;
          }
        }, {
          key: "setValue",
          value: function setValue(val) {
            if (val) {
              this.value = val;

              if (val[this._startKey]) {
                this.picker.setStartDate(val[this._startKey]);
              }

              if (val[this._endKey]) {
                this.picker.setEndDate(val[this._endKey]);
              }

              this.picker.calculateChosenLabel();

              if (this.picker.chosenLabel) {
                this._el.nativeElement.value = this.picker.chosenLabel;
              }
            } else {
              this.picker.clear();
            }
          }
          /**
           * Set position of the calendar
           */

        }, {
          key: "setPosition",
          value: function setPosition() {
            var style;
            var containerTop;
            var container = this.picker.pickerContainer.nativeElement;
            var element = this._el.nativeElement;

            if (this.drops && this.drops === 'up') {
              containerTop = element.offsetTop - container.clientHeight + 'px';
            } else {
              containerTop = 'auto';
            }

            if (this.opens === 'left') {
              style = {
                top: containerTop,
                left: element.offsetLeft - container.clientWidth + element.clientWidth + 'px',
                right: 'auto'
              };
            } else if (this.opens === 'center') {
              style = {
                top: containerTop,
                left: element.offsetLeft + element.clientWidth / 2 - container.clientWidth / 2 + 'px',
                right: 'auto'
              };
            } else if (this.opens === 'right') {
              style = {
                top: containerTop,
                left: element.offsetLeft + 'px',
                right: 'auto'
              };
            } else {
              var position = element.offsetLeft + element.clientWidth / 2 - container.clientWidth / 2;

              if (position < 0) {
                style = {
                  top: containerTop,
                  left: element.offsetLeft + 'px',
                  right: 'auto'
                };
              } else {
                style = {
                  top: containerTop,
                  left: position + 'px',
                  right: 'auto'
                };
              }
            }

            if (style) {
              this._renderer.setStyle(container, 'top', style.top);

              this._renderer.setStyle(container, 'left', style.left);

              this._renderer.setStyle(container, 'right', style.right);
            }
          }
        }, {
          key: "inputChanged",
          value: function inputChanged(e) {
            if (e.target.tagName.toLowerCase() !== 'input') {
              return;
            }

            if (!e.target.value.length) {
              return;
            }

            var dateString = e.target.value.split(this.picker.locale.separator);
            var start = null,
                end = null;

            if (dateString.length === 2) {
              start = moment$2(dateString[0], this.picker.locale.format);
              end = moment$2(dateString[1], this.picker.locale.format);
            }

            if (this.singleDatePicker || start === null || end === null) {
              start = moment$2(e.target.value, this.picker.locale.format);
              end = start;
            }

            if (!start.isValid() || !end.isValid()) {
              return;
            }

            this.picker.setStartDate(start);
            this.picker.setEndDate(end);
            this.picker.updateView();
          }
          /**
           * For click outside of the calendar's container
           * @param event event object
           */

        }, {
          key: "outsideClick",
          value: function outsideClick(event) {
            if (!event.target) {
              return;
            }

            if (event.target.classList.contains('ngx-daterangepicker-action')) {
              return;
            }

            if (!this.elementRef.nativeElement.contains(event.target)) {
              this.hide();
            }
          }
        }]);

        return DaterangepickerDirective;
      }();

      DaterangepickerDirective.ɵfac = function DaterangepickerDirective_Factory(t) {
        return new (t || DaterangepickerDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_2__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_2__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_2__["ComponentFactoryResolver"]), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_2__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_2__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_2__["KeyValueDiffers"]), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](LocaleService), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_2__["ElementRef"]));
      };

      DaterangepickerDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineDirective"]({
        type: DaterangepickerDirective,
        selectors: [["input", "ngxDaterangepickerMd", ""]],
        hostVars: 1,
        hostBindings: function DaterangepickerDirective_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("keyup.esc", function DaterangepickerDirective_keyup_esc_HostBindingHandler() {
              return ctx.hide();
            })("blur", function DaterangepickerDirective_blur_HostBindingHandler() {
              return ctx.onBlur();
            })("click", function DaterangepickerDirective_click_HostBindingHandler() {
              return ctx.open();
            })("keyup", function DaterangepickerDirective_keyup_HostBindingHandler($event) {
              return ctx.inputChanged($event);
            })("click", function DaterangepickerDirective_click_HostBindingHandler($event) {
              return ctx.outsideClick($event);
            }, false, _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵresolveDocument"]);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵhostProperty"]("disabled", ctx.disabled);
          }
        },
        inputs: {
          dateLimit: "dateLimit",
          showCancel: "showCancel",
          lockStartDate: "lockStartDate",
          timePicker: "timePicker",
          timePicker24Hour: "timePicker24Hour",
          timePickerIncrement: "timePickerIncrement",
          timePickerSeconds: "timePickerSeconds",
          closeOnAutoApply: "closeOnAutoApply",
          _endKey: "_endKey",
          drops: "drops",
          opens: "opens",
          locale: "locale",
          startKey: "startKey",
          endKey: "endKey",
          minDate: "minDate",
          maxDate: "maxDate",
          autoApply: "autoApply",
          alwaysShowCalendars: "alwaysShowCalendars",
          showCustomRangeLabel: "showCustomRangeLabel",
          linkedCalendars: "linkedCalendars",
          singleDatePicker: "singleDatePicker",
          showWeekNumbers: "showWeekNumbers",
          showISOWeekNumbers: "showISOWeekNumbers",
          showDropdowns: "showDropdowns",
          isInvalidDate: "isInvalidDate",
          isCustomDate: "isCustomDate",
          isTooltipDate: "isTooltipDate",
          showClearButton: "showClearButton",
          customRangeDirection: "customRangeDirection",
          ranges: "ranges",
          lastMonthDayClass: "lastMonthDayClass",
          emptyWeekRowClass: "emptyWeekRowClass",
          emptyWeekColumnClass: "emptyWeekColumnClass",
          firstDayOfNextMonthClass: "firstDayOfNextMonthClass",
          lastDayOfPreviousMonthClass: "lastDayOfPreviousMonthClass",
          keepCalendarOpeningWithRange: "keepCalendarOpeningWithRange",
          showRangeLabelOnInput: "showRangeLabelOnInput"
        },
        outputs: {
          onChange: "change",
          rangeClicked: "rangeClicked",
          datesUpdated: "datesUpdated",
          startDateChanged: "startDateChanged",
          endDateChanged: "endDateChanged"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵProvidersFeature"]([{
          provide: _angular_forms__WEBPACK_IMPORTED_MODULE_3__["NG_VALUE_ACCESSOR"],
          useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["forwardRef"])(function () {
            return DaterangepickerDirective_1;
          }),
          multi: true
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵNgOnChangesFeature"]]
      });

      DaterangepickerDirective.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ViewContainerRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ChangeDetectorRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ComponentFactoryResolver"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Renderer2"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["KeyValueDiffers"]
        }, {
          type: LocaleService
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ElementRef"]
        }];
      };

      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "minDate", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "maxDate", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "autoApply", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "alwaysShowCalendars", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "showCustomRangeLabel", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "linkedCalendars", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "dateLimit", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "singleDatePicker", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "showWeekNumbers", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "showISOWeekNumbers", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "showDropdowns", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "isInvalidDate", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "isCustomDate", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "isTooltipDate", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "showClearButton", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "customRangeDirection", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "ranges", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "opens", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "drops", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "lastMonthDayClass", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "emptyWeekRowClass", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "emptyWeekColumnClass", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "firstDayOfNextMonthClass", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "lastDayOfPreviousMonthClass", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "keepCalendarOpeningWithRange", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "showRangeLabelOnInput", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "showCancel", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "lockStartDate", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "timePicker", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "timePicker24Hour", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "timePickerIncrement", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "timePickerSeconds", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "closeOnAutoApply", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "locale", null);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "_endKey", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "startKey", null);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"])()], DaterangepickerDirective.prototype, "endKey", null);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"])('change')], DaterangepickerDirective.prototype, "onChange", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"])('rangeClicked')], DaterangepickerDirective.prototype, "rangeClicked", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"])('datesUpdated')], DaterangepickerDirective.prototype, "datesUpdated", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"])()], DaterangepickerDirective.prototype, "startDateChanged", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"])()], DaterangepickerDirective.prototype, "endDateChanged", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["HostBinding"])('disabled')], DaterangepickerDirective.prototype, "disabled", null);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["HostListener"])('document:click', ['$event'])], DaterangepickerDirective.prototype, "outsideClick", null);
      var NgxDaterangepickerMd_1;

      var NgxDaterangepickerMd = NgxDaterangepickerMd_1 = /*#__PURE__*/function () {
        function NgxDaterangepickerMd() {
          _classCallCheck2(this, NgxDaterangepickerMd);
        }

        _createClass2(NgxDaterangepickerMd, null, [{
          key: "forRoot",
          value: function forRoot() {
            var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            return {
              ngModule: NgxDaterangepickerMd_1,
              providers: [{
                provide: LOCALE_CONFIG,
                useValue: config
              }, {
                provide: LocaleService,
                useClass: LocaleService,
                deps: [LOCALE_CONFIG]
              }]
            };
          }
        }]);

        return NgxDaterangepickerMd;
      }();

      NgxDaterangepickerMd.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineNgModule"]({
        type: NgxDaterangepickerMd
      });
      NgxDaterangepickerMd.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineInjector"]({
        factory: function NgxDaterangepickerMd_Factory(t) {
          return new (t || NgxDaterangepickerMd)();
        },
        providers: [],
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["FormsModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["ReactiveFormsModule"]]]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](LocaleService, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Injectable"]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Inject"],
              args: [LOCALE_CONFIG]
            }]
          }];
        }, null);
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](DaterangepickerComponent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Component"],
          args: [{
            selector: 'ngx-daterangepicker-material',
            template: "<div class=\"md-drppicker\" #pickerContainer\n[ngClass]=\"{\n    ltr: locale.direction === 'ltr',\n    rtl: this.locale.direction === 'rtl',\n    'shown': isShown || inline,\n    'hidden': !isShown && !inline,\n    'inline': inline,\n    'double': !singleDatePicker && showCalInRanges,\n    'show-ranges': rangesArray.length\n}\" [class]=\"'drops-' + drops + '-' + opens\">\n    <div class=\"ranges\">\n        <ul>\n          <li *ngFor=\"let range of rangesArray\">\n            <button type=\"button\"\n                    (click)=\"clickRange($event, range)\"\n                    [disabled]=\"disableRange(range)\"\n                    [ngClass]=\"{'active': range === chosenRange}\">{{range}}</button>\n          </li>\n        </ul>\n    </div>\n    <div class=\"calendar\" [ngClass]=\"{right: singleDatePicker, left: !singleDatePicker}\"\n        *ngIf=\"showCalInRanges\">\n        <div class=\"calendar-table\">\n            <table class=\"table-condensed\" *ngIf=\"calendarVariables\">\n                <thead>\n                    <tr>\n                        <th *ngIf=\"showWeekNumbers || showISOWeekNumbers\"></th>\n                        <ng-container *ngIf=\"!calendarVariables.left.minDate || calendarVariables.left.minDate.isBefore(calendarVariables.left.calendar.firstDay) && (!this.linkedCalendars || true)\">\n                            <th (click)=\"clickPrev(sideEnum.left)\" class=\"prev available\" >\n                            </th>\n                        </ng-container>\n                        <ng-container *ngIf=\"!(!calendarVariables.left.minDate || calendarVariables.left.minDate.isBefore(calendarVariables.left.calendar.firstDay) && (!this.linkedCalendars || true))\">\n                            <th></th>\n                        </ng-container>\n                        <th colspan=\"5\" class=\"month drp-animate\">\n                            <ng-container *ngIf=\"showDropdowns && calendarVariables.left.dropdowns\">\n                                <div class=\"dropdowns\">\n                                        {{this.locale.monthNames[calendarVariables?.left?.calendar[1][1].month()]}}\n                                        <select class=\"monthselect\" (change)=\"monthChanged($event, sideEnum.left)\">\n                                                <option\n                                                [disabled]=\"(calendarVariables.left.dropdowns.inMinYear && m < calendarVariables.left.minDate.month()) || (calendarVariables.left.dropdowns.inMaxYear && m > calendarVariables.left.maxDate.month())\"\n                                                *ngFor=\"let m of calendarVariables.left.dropdowns.monthArrays\" [value]=\"m\" [selected]=\"calendarVariables.left.dropdowns.currentMonth == m\">\n                                                    {{locale.monthNames[m]}}\n                                                </option>\n                                        </select>\n                                </div>\n                                <div class=\"dropdowns\">\n                                    {{ calendarVariables?.left?.calendar[1][1].format(\" YYYY\")}}\n                                    <select class=\"yearselect\"  (change)=\"yearChanged($event, sideEnum.left)\">\n                                        <option *ngFor=\"let y of calendarVariables.left.dropdowns.yearArrays\" [selected]=\"y === calendarVariables.left.dropdowns.currentYear\">\n                                            {{y}}\n                                        </option>\n                                    </select>\n                                </div>\n                            </ng-container>\n                            <ng-container *ngIf=\"!showDropdowns || !calendarVariables.left.dropdowns\">\n                                    {{this.locale.monthNames[calendarVariables?.left?.calendar[1][1].month()]}}  {{ calendarVariables?.left?.calendar[1][1].format(\" YYYY\")}}\n                            </ng-container>\n                        </th>\n                        <ng-container *ngIf=\"(!calendarVariables.left.maxDate || calendarVariables.left.maxDate.isAfter(calendarVariables.left.calendar.lastDay)) && (!linkedCalendars || singleDatePicker )\">\n                            <th class=\"next available\" (click)=\"clickNext(sideEnum.left)\">\n                            </th>\n                        </ng-container>\n                        <ng-container *ngIf=\"!((!calendarVariables.left.maxDate || calendarVariables.left.maxDate.isAfter(calendarVariables.left.calendar.lastDay)) && (!linkedCalendars || singleDatePicker ))\">\n                            <th></th>\n                        </ng-container>\n                    </tr>\n                    <tr class='week-days'>\n                        <th *ngIf=\"showWeekNumbers || showISOWeekNumbers\" class=\"week\"><span>{{this.locale.weekLabel}}</span></th>\n                        <th *ngFor=\"let dayofweek of locale.daysOfWeek\"><span>{{dayofweek}}</span></th>\n                    </tr>\n                </thead>\n                <tbody class=\"drp-animate\">\n                    <tr *ngFor=\"let row of calendarVariables.left.calRows\" [class]=\"calendarVariables.left.classes[row].classList\">\n                        <!-- add week number -->\n                        <td  class=\"week\" *ngIf=\"showWeekNumbers\">\n                            <span>{{calendarVariables.left.calendar[row][0].week()}}</span>\n                        </td>\n                        <td class=\"week\" *ngIf=\"showISOWeekNumbers\">\n                            <span>{{calendarVariables.left.calendar[row][0].isoWeek()}}</span>\n                        </td>\n                        <!-- cal -->\n                        <td *ngFor=\"let col of calendarVariables.left.calCols\" [class]=\"calendarVariables.left.classes[row][col]\" (click)=\"clickDate($event, sideEnum.left, row, col)\" (mouseenter)=\"hoverDate($event, sideEnum.left, row, col)\">\n                            <span>{{calendarVariables.left.calendar[row][col].date()}}</span>\n                        </td>\n                    </tr>\n                </tbody>\n            </table>\n        </div>\n        <div class=\"calendar-time\" *ngIf=\"timePicker\">\n            <div class=\"select\">\n                <select class=\"hourselect select-item\" [disabled]=\"!startDate\" [(ngModel)]=\"timepickerVariables.left.selectedHour\" (ngModelChange)=\"timeChanged($event, sideEnum.left)\">\n                    <option *ngFor=\"let i of timepickerVariables.left.hours\"\n                    [value]=\"i\"\n                    [disabled]=\"timepickerVariables.left.disabledHours.indexOf(i) > -1\">{{i}}</option>\n                </select>\n            </div>\n            <div class=\"select\">\n                <select class=\"select-item minuteselect\" [disabled]=\"!startDate\" [(ngModel)]=\"timepickerVariables.left.selectedMinute\" (ngModelChange)=\"timeChanged($event, sideEnum.left)\">\n                    <option *ngFor=\"let i of timepickerVariables.left.minutes; let index = index;\"\n                    [value]=\"i\"\n                    [disabled]=\"timepickerVariables.left.disabledMinutes.indexOf(i) > -1\">{{timepickerVariables.left.minutesLabel[index]}}</option>\n                </select>\n                <span class=\"select-highlight\"></span>\n                <span class=\"select-bar\"></span>\n            </div>\n            <div class=\"select\">\n                <select class=\"select-item secondselect\" *ngIf=\"timePickerSeconds\" [disabled]=\"!startDate\" [(ngModel)]=\"timepickerVariables.left.selectedSecond\" (ngModelChange)=\"timeChanged($event, sideEnum.left)\">\n                    <option *ngFor=\"let i of timepickerVariables.left.seconds; let index = index;\"\n                    [value]=\"i\"\n                    [disabled]=\"timepickerVariables.left.disabledSeconds.indexOf(i) > -1\">{{timepickerVariables.left.secondsLabel[index]}}</option>\n                </select>\n                <span class=\"select-highlight\"></span>\n                <span class=\"select-bar\"></span>\n            </div>\n            <div class=\"select\">\n                <select class=\"select-item ampmselect\" *ngIf=\"!timePicker24Hour\" [(ngModel)]=\"timepickerVariables.left.ampmModel\" (ngModelChange)=\"timeChanged($event, sideEnum.left)\">\n                    <option value=\"AM\" [disabled]=\"timepickerVariables.left.amDisabled\">AM</option>\n                    <option value=\"PM\"  [disabled]=\"timepickerVariables.left.pmDisabled\">PM</option>\n                </select>\n                <span class=\"select-highlight\"></span>\n                <span class=\"select-bar\"></span>\n            </div>\n        </div>\n    </div>\n    <div class=\"calendar right\"\n        *ngIf=\"showCalInRanges && !singleDatePicker\"\n        >\n        <div class=\"calendar-table\">\n            <table class=\"table-condensed\" *ngIf=\"calendarVariables\">\n                <thead>\n                    <tr>\n                        <th *ngIf=\"showWeekNumbers || showISOWeekNumbers\"></th>\n                        <ng-container *ngIf=\"(!calendarVariables.right.minDate || calendarVariables.right.minDate.isBefore(calendarVariables.right.calendar.firstDay)) && (!this.linkedCalendars)\">\n                            <th (click)=\"clickPrev(sideEnum.right)\" class=\"prev available\" >\n                            </th>\n                        </ng-container>\n                        <ng-container *ngIf=\"!((!calendarVariables.right.minDate || calendarVariables.right.minDate.isBefore(calendarVariables.right.calendar.firstDay)) && (!this.linkedCalendars))\">\n                            <th></th>\n                        </ng-container>\n                        <th colspan=\"5\" class=\"month\">\n                            <ng-container *ngIf=\"showDropdowns && calendarVariables.right.dropdowns\">\n                                <div class=\"dropdowns\">\n                                    {{this.locale.monthNames[calendarVariables?.right?.calendar[1][1].month()]}}\n                                    <select class=\"monthselect\" (change)=\"monthChanged($event, sideEnum.right)\">\n                                            <option\n                                            [disabled]=\"(calendarVariables.right.dropdowns.inMinYear && calendarVariables.right.minDate && m < calendarVariables.right.minDate.month()) || (calendarVariables.right.dropdowns.inMaxYear && calendarVariables.right.maxDate && m > calendarVariables.right.maxDate.month())\"\n                                            *ngFor=\"let m of calendarVariables.right.dropdowns.monthArrays\" [value]=\"m\" [selected]=\"calendarVariables.right.dropdowns.currentMonth == m\">\n                                                {{locale.monthNames[m]}}\n                                            </option>\n                                    </select>\n                                </div>\n                                <div class=\"dropdowns\">\n                                        {{ calendarVariables?.right?.calendar[1][1].format(\" YYYY\")}}\n                                        <select class=\"yearselect\" (change)=\"yearChanged($event, sideEnum.right)\">\n                                        <option *ngFor=\"let y of calendarVariables.right.dropdowns.yearArrays\" [selected]=\"y === calendarVariables.right.dropdowns.currentYear\">\n                                            {{y}}\n                                        </option>\n                                    </select>\n                                </div>\n                            </ng-container>\n                            <ng-container *ngIf=\"!showDropdowns || !calendarVariables.right.dropdowns\">\n                                    {{this.locale.monthNames[calendarVariables?.right?.calendar[1][1].month()]}}  {{ calendarVariables?.right?.calendar[1][1].format(\" YYYY\")}}\n                            </ng-container>\n                        </th>\n                            <ng-container *ngIf=\"!calendarVariables.right.maxDate || calendarVariables.right.maxDate.isAfter(calendarVariables.right.calendar.lastDay) && (!linkedCalendars || singleDatePicker || true)\">\n                                <th class=\"next available\" (click)=\"clickNext(sideEnum.right)\">\n                                </th>\n                            </ng-container>\n                            <ng-container *ngIf=\"!(!calendarVariables.right.maxDate || calendarVariables.right.maxDate.isAfter(calendarVariables.right.calendar.lastDay) && (!linkedCalendars || singleDatePicker || true))\">\n                                <th></th>\n                            </ng-container>\n                    </tr>\n\n                    <tr class='week-days'>\n                        <th *ngIf=\"showWeekNumbers || showISOWeekNumbers\" class=\"week\"><span>{{this.locale.weekLabel}}</span></th>\n                        <th *ngFor=\"let dayofweek of locale.daysOfWeek\"><span>{{dayofweek}}</span></th>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr *ngFor=\"let row of calendarVariables.right.calRows\" [class]=\"calendarVariables.right.classes[row].classList\">\n                        <td class=\"week\" *ngIf=\"showWeekNumbers\">\n                            <span>{{calendarVariables.right.calendar[row][0].week()}}</span>\n                        </td>\n                        <td class=\"week\" *ngIf=\"showISOWeekNumbers\">\n                            <span>{{calendarVariables.right.calendar[row][0].isoWeek()}}</span>\n                        </td>\n                        <td *ngFor=\"let col of calendarVariables.right.calCols\" [class]=\"calendarVariables.right.classes[row][col]\" (click)=\"clickDate($event, sideEnum.right, row, col)\" (mouseenter)=\"hoverDate($event, sideEnum.right, row, col)\">\n                            <span>{{calendarVariables.right.calendar[row][col].date()}}</span>\n                        </td>\n                    </tr>\n                </tbody>\n            </table>\n        </div>\n        <div class=\"calendar-time\" *ngIf=\"timePicker\">\n            <div class=\"select\">\n                <select class=\"select-item hourselect\" [disabled]=\"!startDate\" [(ngModel)]=\"timepickerVariables.right.selectedHour\" (ngModelChange)=\"timeChanged($event, sideEnum.right)\">\n                    <option *ngFor=\"let i of timepickerVariables.right.hours\"\n                    [value]=\"i\"\n                    [disabled]=\"timepickerVariables.right.disabledHours.indexOf(i) > -1\">{{i}}</option>\n                </select>\n                <span class=\"select-highlight\"></span>\n                <span class=\"select-bar\"></span>\n            </div>\n            <div class=\"select\">\n                <select class=\"select-item minuteselect\" [disabled]=\"!startDate\" [(ngModel)]=\"timepickerVariables.right.selectedMinute\" (ngModelChange)=\"timeChanged($event, sideEnum.right)\">\n                    <option *ngFor=\"let i of timepickerVariables.right.minutes; let index = index;\"\n                    [value]=\"i\"\n                    [disabled]=\"timepickerVariables.right.disabledMinutes.indexOf(i) > -1\">{{timepickerVariables.right.minutesLabel[index]}}</option>\n                </select>\n                <span class=\"select-highlight\"></span>\n                <span class=\"select-bar\"></span>\n            </div>\n            <div class=\"select\">\n                <select *ngIf=\"timePickerSeconds\" class=\"select-item secondselect\" [disabled]=\"!startDate\" [(ngModel)]=\"timepickerVariables.right.selectedSecond\" (ngModelChange)=\"timeChanged($event, sideEnum.right)\">\n                    <option *ngFor=\"let i of timepickerVariables.right.seconds; let index = index;\"\n                    [value]=\"i\"\n                    [disabled]=\"timepickerVariables.right.disabledSeconds.indexOf(i) > -1\">{{timepickerVariables.right.secondsLabel[index]}}</option>\n                </select>\n                <span class=\"select-highlight\"></span>\n                <span class=\"select-bar\"></span>\n            </div>\n            <div class=\"select\">\n                <select *ngIf=\"!timePicker24Hour\" class=\"select-item ampmselect\" [(ngModel)]=\"timepickerVariables.right.ampmModel\" (ngModelChange)=\"timeChanged($event, sideEnum.right)\">\n                    <option value=\"AM\" [disabled]=\"timepickerVariables.right.amDisabled\">AM</option>\n                    <option value=\"PM\"  [disabled]=\"timepickerVariables.right.pmDisabled\">PM</option>\n                </select>\n                <span class=\"select-highlight\"></span>\n                <span class=\"select-bar\"></span>\n            </div>\n        </div>\n    </div>\n    <div class=\"buttons\" *ngIf=\"!autoApply && ( !rangesArray.length || (showCalInRanges && !singleDatePicker))\">\n        <div class=\"buttons_input\">\n            <button  *ngIf=\"showClearButton\" class=\"btn btn-default clear\" type=\"button\" (click)=\"clear()\" [title]=\"locale.clearLabel\">\n                {{locale.clearLabel}}\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"30\" height=\"30\" viewBox=\"0 -5 24 24\"><path d=\"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\"/></svg>\n            </button>\n            <button class=\"btn btn-default\" *ngIf=\"showCancel\" type=\"button\" (click)=\"clickCancel($event)\">{{locale.cancelLabel}}</button>\n            <button class=\"btn\"  [disabled]=\"applyBtn.disabled\" type=\"button\" (click)=\"clickApply($event)\">{{locale.applyLabel}}</button>\n        </div>\n    </div>\n</div>\n",
            host: {
              '(click)': 'handleInternalClick($event)'
            },
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ViewEncapsulation"].None,
            providers: [{
              provide: _angular_forms__WEBPACK_IMPORTED_MODULE_3__["NG_VALUE_ACCESSOR"],
              useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["forwardRef"])(function () {
                return DaterangepickerComponent_1;
              }),
              multi: true
            }],
            styles: [".md-drppicker{position:absolute;font-family:Roboto,sans-serif;color:inherit;border-radius:4px;width:278px;padding:4px;margin-top:-10px;overflow:hidden;z-index:1000;font-size:14px;background-color:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,.16),0 2px 8px 0 rgba(0,0,0,.12)}.md-drppicker.double{width:auto}.md-drppicker.inline{position:relative;display:inline-block}.md-drppicker:after,.md-drppicker:before{position:absolute;display:inline-block;border-bottom-color:rgba(0,0,0,.2);content:''}.md-drppicker.openscenter:after,.md-drppicker.openscenter:before{left:0;right:0;width:0;margin-left:auto;margin-right:auto}.md-drppicker.single .calendar,.md-drppicker.single .ranges{float:none}.md-drppicker.shown{transform:scale(1);transition:.1s ease-in-out;transform-origin:0 0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.md-drppicker.shown.drops-up-left{transform-origin:100% 100%}.md-drppicker.shown.drops-up-right{transform-origin:0 100%}.md-drppicker.shown.drops-down-left{transform-origin:100% 0}.md-drppicker.shown.drops-down-right{transform-origin:0 0}.md-drppicker.shown.drops-down-center{transform-origin:NaN}.md-drppicker.shown.drops-up-center{transform-origin:50%}.md-drppicker.shown .calendar{display:block}.md-drppicker.hidden{transition:.1s;transform:scale(0);transform-origin:0 0;cursor:default;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.md-drppicker.hidden.drops-up-left{transform-origin:100% 100%}.md-drppicker.hidden.drops-up-right{transform-origin:0 100%}.md-drppicker.hidden.drops-down-left{transform-origin:100% 0}.md-drppicker.hidden.drops-down-right{transform-origin:0 0}.md-drppicker.hidden.drops-down-center{transform-origin:NaN}.md-drppicker.hidden.drops-up-center{transform-origin:50%}.md-drppicker.hidden .calendar{display:none}.md-drppicker .calendar{max-width:270px;margin:4px}.md-drppicker .calendar.single .calendar-table{border:none}.md-drppicker .calendar td,.md-drppicker .calendar th{padding:0;white-space:nowrap;text-align:center;min-width:32px}.md-drppicker .calendar td span,.md-drppicker .calendar th span{pointer-events:none}.md-drppicker .calendar-table{border:1px solid #fff;padding:4px;border-radius:4px;background-color:#fff}.md-drppicker table{width:100%;margin:0}.md-drppicker th{color:#988c8c}.md-drppicker td,.md-drppicker th{text-align:center;border-radius:4px;border:1px solid transparent;white-space:nowrap;cursor:pointer;height:2em;width:2em}.md-drppicker td.available.prev,.md-drppicker th.available.prev{display:block;background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K);background-repeat:no-repeat;background-size:.5em;background-position:center;opacity:.8;transition:background-color .2s;border-radius:2em}.md-drppicker td.available.prev:hover,.md-drppicker th.available.prev:hover{margin:0}.md-drppicker td.available.next,.md-drppicker th.available.next{transform:rotate(180deg);display:block;background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K);background-repeat:no-repeat;background-size:.5em;background-position:center;opacity:.8;transition:background-color .2s;border-radius:2em}.md-drppicker td.available.next:hover,.md-drppicker th.available.next:hover{margin:0;transform:rotate(180deg)}.md-drppicker td.available:hover,.md-drppicker th.available:hover{background-color:#eee;border-color:transparent;color:inherit;background-repeat:no-repeat;background-size:.5em;background-position:center;margin:.25em 0;opacity:.8;border-radius:2em;transform:scale(1);transition:450ms cubic-bezier(.23,1,.32,1)}.md-drppicker td.week,.md-drppicker th.week{font-size:80%;color:#ccc}.md-drppicker td{margin:.25em 0;opacity:.8;transition:450ms cubic-bezier(.23,1,.32,1);border-radius:2em;transform:scale(1)}.md-drppicker td.off,.md-drppicker td.off.end-date,.md-drppicker td.off.in-range,.md-drppicker td.off.start-date{background-color:#fff;border-color:transparent;color:#999}.md-drppicker td.in-range{background-color:#dde2e4;border-color:transparent;color:#000;border-radius:0}.md-drppicker td.start-date{border-radius:2em 0 0 2em}.md-drppicker td.end-date{border-radius:0 2em 2em 0}.md-drppicker td.start-date.end-date{border-radius:4px}.md-drppicker td.active{transition:background .3s ease-out;background:rgba(0,0,0,.1)}.md-drppicker td.active,.md-drppicker td.active:hover{background-color:#3f51b5;border-color:transparent;color:#fff}.md-drppicker th.month{width:auto}.md-drppicker option.disabled,.md-drppicker td.disabled{color:#999;cursor:not-allowed;text-decoration:line-through}.md-drppicker .dropdowns{background-repeat:no-repeat;background-size:10px;background-position-y:center;background-position-x:right;width:50px;background-image:url(data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDI1NSAyNTUiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDI1NSAyNTU7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8ZyBpZD0iYXJyb3ctZHJvcC1kb3duIj4KCQk8cG9seWdvbiBwb2ludHM9IjAsNjMuNzUgMTI3LjUsMTkxLjI1IDI1NSw2My43NSAgICIgZmlsbD0iIzk4OGM4YyIvPgoJPC9nPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo=)}.md-drppicker .dropdowns select{display:inline-block;background-color:rgba(255,255,255,.9);width:100%;padding:5px;border:1px solid #f2f2f2;border-radius:2px;height:3rem}.md-drppicker .dropdowns select.ampmselect,.md-drppicker .dropdowns select.hourselect,.md-drppicker .dropdowns select.minuteselect,.md-drppicker .dropdowns select.secondselect{width:50px;margin:0 auto;background:#eee;border:1px solid #eee;padding:2px;outline:0;font-size:12px}.md-drppicker .dropdowns select.monthselect,.md-drppicker .dropdowns select.yearselect{font-size:12px;height:auto;cursor:pointer;opacity:0;position:absolute;top:0;left:0;margin:0;padding:0}.md-drppicker th.month>div{position:relative;display:inline-block}.md-drppicker .calendar-time{text-align:center;margin:4px auto 0;line-height:30px;position:relative}.md-drppicker .calendar-time .select{display:inline}.md-drppicker .calendar-time .select .select-item{display:inline-block;width:auto;position:relative;font-family:inherit;background-color:transparent;padding:10px 10px 10px 0;font-size:18px;border-radius:0;border:none;border-bottom:1px solid rgba(0,0,0,.12)}.md-drppicker .calendar-time .select .select-item:after{position:absolute;top:18px;right:10px;width:0;height:0;padding:0;content:'';border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid rgba(0,0,0,.12);pointer-events:none}.md-drppicker .calendar-time .select .select-item:focus{outline:0}.md-drppicker .calendar-time .select .select-item .select-label{color:rgba(0,0,0,.26);font-size:16px;font-weight:400;position:absolute;pointer-events:none;left:0;top:10px;transition:.2s}.md-drppicker .calendar-time select.disabled{color:#ccc;cursor:not-allowed}.md-drppicker .label-input{border:1px solid #ccc;border-radius:4px;color:#555;height:30px;line-height:30px;display:block;vertical-align:middle;margin:0 auto 5px;padding:0 0 0 28px;width:100%}.md-drppicker .label-input.active{border:1px solid #08c;border-radius:4px}.md-drppicker .md-drppicker_input{position:relative;padding:0 30px 0 0}.md-drppicker .md-drppicker_input i,.md-drppicker .md-drppicker_input svg{position:absolute;left:8px;top:8px}.md-drppicker.rtl .label-input{padding-right:28px;padding-left:6px}.md-drppicker.rtl .md-drppicker_input i,.md-drppicker.rtl .md-drppicker_input svg{left:auto;right:8px}.md-drppicker .show-ranges .drp-calendar.left{border-left:1px solid #ddd}.md-drppicker .ranges{float:none;text-align:left;margin:0}.md-drppicker .ranges ul{list-style:none;margin:0 auto;padding:0;width:100%}.md-drppicker .ranges ul li{font-size:12px}.md-drppicker .ranges ul li button{padding:8px 12px;width:100%;background:0 0;border:none;text-align:left;cursor:pointer}.md-drppicker .ranges ul li button.active{background-color:#3f51b5;color:#fff}.md-drppicker .ranges ul li button[disabled]{opacity:.3}.md-drppicker .ranges ul li button:active{background:0 0}.md-drppicker .ranges ul li:hover{background-color:#eee}.md-drppicker .show-calendar .ranges{margin-top:8px}.md-drppicker [hidden]{display:none}.md-drppicker .buttons{text-align:right;margin:0 5px 5px 0}.md-drppicker .btn{position:relative;overflow:hidden;border-width:0;outline:0;padding:0 6px;cursor:pointer;border-radius:2px;box-shadow:0 1px 4px rgba(0,0,0,.6);background-color:#3f51b5;color:#ecf0f1;transition:background-color .4s;height:auto;text-transform:uppercase;line-height:36px;border:none}.md-drppicker .btn:focus,.md-drppicker .btn:hover{background-color:#3f51b5}.md-drppicker .btn>*{position:relative}.md-drppicker .btn span{display:block;padding:12px 24px}.md-drppicker .btn:before{content:\"\";position:absolute;top:50%;left:50%;display:block;width:0;padding-top:0;border-radius:100%;background-color:rgba(236,240,241,.3);transform:translate(-50%,-50%)}.md-drppicker .btn:active:before{width:120%;padding-top:120%;transition:width .2s ease-out,padding-top .2s ease-out}.md-drppicker .btn:disabled{opacity:.5}.md-drppicker .btn.btn-default{color:#000;background-color:#dcdcdc}.md-drppicker .clear{box-shadow:none;background-color:#fff!important}.md-drppicker .clear svg{color:#eb3232;fill:currentColor}@media (min-width:564px){.md-drppicker{width:auto}.md-drppicker.single .calendar.left{clear:none}.md-drppicker.ltr{direction:ltr;text-align:left}.md-drppicker.ltr .calendar.left{clear:left}.md-drppicker.ltr .calendar.left .calendar-table{border-right:none;border-top-right-radius:0;border-bottom-right-radius:0;padding-right:12px}.md-drppicker.ltr .calendar.right{margin-left:0}.md-drppicker.ltr .calendar.right .calendar-table{border-left:none;border-top-left-radius:0;border-bottom-left-radius:0}.md-drppicker.ltr .left .md-drppicker_input,.md-drppicker.ltr .right .md-drppicker_input{padding-right:35px}.md-drppicker.ltr .calendar,.md-drppicker.ltr .ranges{float:left}.md-drppicker.rtl{direction:rtl;text-align:right}.md-drppicker.rtl .calendar.left{clear:right;margin-left:0}.md-drppicker.rtl .calendar.left .calendar-table{border-left:none;border-top-left-radius:0;border-bottom-left-radius:0}.md-drppicker.rtl .calendar.right{margin-right:0}.md-drppicker.rtl .calendar.right .calendar-table{border-right:none;border-top-right-radius:0;border-bottom-right-radius:0}.md-drppicker.rtl .calendar.left .calendar-table,.md-drppicker.rtl .left .md-drppicker_input{padding-left:12px}.md-drppicker.rtl .calendar,.md-drppicker.rtl .ranges{text-align:right;float:right}.drp-animate{transform:translate(0);transition:transform .2s,opacity .2s}.drp-animate.drp-picker-site-this{transition-timing-function:linear}.drp-animate.drp-animate-right{transform:translateX(10%);opacity:0}.drp-animate.drp-animate-left{transform:translateX(-10%);opacity:0}}@media (min-width:730px){.md-drppicker .ranges{width:auto}.md-drppicker.ltr .ranges{float:left}.md-drppicker.rtl .ranges{float:right}.md-drppicker .calendar.left{clear:none!important}}"]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ChangeDetectorRef"]
          }, {
            type: LocaleService
          }];
        }, {
          startDate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          endDate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          dateLimit: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          minDate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          maxDate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          autoApply: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          singleDatePicker: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          showDropdowns: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          showWeekNumbers: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          showISOWeekNumbers: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          linkedCalendars: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          autoUpdateInput: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          alwaysShowCalendars: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          maxSpan: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          lockStartDate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          timePicker: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          timePicker24Hour: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          timePickerIncrement: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          timePickerSeconds: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          showClearButton: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          firstMonthDayClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          lastMonthDayClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          emptyWeekRowClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          emptyWeekColumnClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          firstDayOfNextMonthClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          lastDayOfPreviousMonthClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          showCancel: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          keepCalendarOpeningWithRange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          showRangeLabelOnInput: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          customRangeDirection: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          closeOnAutoApply: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          choosedDate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"]
          }],
          rangeClicked: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"]
          }],
          datesUpdated: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"]
          }],
          startDateChanged: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"]
          }],
          endDateChanged: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"]
          }],
          locale: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          ranges: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          isInvalidDate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          isCustomDate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          isTooltipDate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          showCustomRangeLabel: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          drops: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          opens: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          pickerContainer: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ViewChild"],
            args: ['pickerContainer']
          }]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](DaterangepickerDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Directive"],
          args: [{
            selector: 'input[ngxDaterangepickerMd]',
            host: {
              '(keyup.esc)': 'hide()',
              '(blur)': 'onBlur()',
              '(click)': 'open()',
              '(keyup)': 'inputChanged($event)'
            },
            providers: [{
              provide: _angular_forms__WEBPACK_IMPORTED_MODULE_3__["NG_VALUE_ACCESSOR"],
              useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["forwardRef"])(function () {
                return DaterangepickerDirective_1;
              }),
              multi: true
            }]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ViewContainerRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ChangeDetectorRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ComponentFactoryResolver"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Renderer2"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["KeyValueDiffers"]
          }, {
            type: LocaleService
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ElementRef"]
          }];
        }, {
          dateLimit: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          showCancel: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          lockStartDate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          timePicker: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          timePicker24Hour: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          timePickerIncrement: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          timePickerSeconds: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          closeOnAutoApply: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          _endKey: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          onChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"],
            args: ['change']
          }],
          rangeClicked: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"],
            args: ['rangeClicked']
          }],
          datesUpdated: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"],
            args: ['datesUpdated']
          }],
          startDateChanged: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"]
          }],
          endDateChanged: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"]
          }],
          drops: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          opens: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          locale: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          startKey: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          endKey: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          disabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["HostBinding"],
            args: ['disabled']
          }],

          /**
           * For click outside of the calendar's container
           * @param event event object
           */
          outsideClick: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["HostListener"],
            args: ['document:click', ['$event']]
          }],
          minDate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          maxDate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          autoApply: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          alwaysShowCalendars: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          showCustomRangeLabel: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          linkedCalendars: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          singleDatePicker: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          showWeekNumbers: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          showISOWeekNumbers: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          showDropdowns: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          isInvalidDate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          isCustomDate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          isTooltipDate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          showClearButton: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          customRangeDirection: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          ranges: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          lastMonthDayClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          emptyWeekRowClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          emptyWeekColumnClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          firstDayOfNextMonthClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          lastDayOfPreviousMonthClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          keepCalendarOpeningWithRange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          showRangeLabelOnInput: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }]
        });
      })();

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵsetNgModuleScope"](NgxDaterangepickerMd, {
          declarations: function declarations() {
            return [DaterangepickerComponent, DaterangepickerDirective];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["FormsModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["ReactiveFormsModule"]];
          },
          exports: function exports() {
            return [DaterangepickerComponent, DaterangepickerDirective];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](NgxDaterangepickerMd, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["NgModule"],
          args: [{
            declarations: [DaterangepickerComponent, DaterangepickerDirective],
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["FormsModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["ReactiveFormsModule"]],
            providers: [],
            exports: [DaterangepickerComponent, DaterangepickerDirective],
            entryComponents: [DaterangepickerComponent]
          }]
        }], function () {
          return [];
        }, null);
      })();
      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=ngx-daterangepicker-material.js.map

      /***/

    },

    /***/
    "Ylt2":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/SubjectSubscription.js ***!
      \********************************************************************/

    /*! exports provided: SubjectSubscription */

    /***/
    function Ylt2(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SubjectSubscription", function () {
        return SubjectSubscription;
      });
      /* harmony import */


      var _Subscription__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./Subscription */
      "quSY");

      var SubjectSubscription = /*#__PURE__*/function (_Subscription__WEBPAC4) {
        _inherits2(SubjectSubscription, _Subscription__WEBPAC4);

        var _super264 = _createSuper(SubjectSubscription);

        function SubjectSubscription(subject, subscriber) {
          var _this617;

          _classCallCheck2(this, SubjectSubscription);

          _this617 = _super264.call(this);
          _this617.subject = subject;
          _this617.subscriber = subscriber;
          _this617.closed = false;
          return _this617;
        }

        _createClass2(SubjectSubscription, [{
          key: "unsubscribe",
          value: function unsubscribe() {
            if (this.closed) {
              return;
            }

            this.closed = true;
            var subject = this.subject;
            var observers = subject.observers;
            this.subject = null;

            if (!observers || observers.length === 0 || subject.isStopped || subject.closed) {
              return;
            }

            var subscriberIndex = observers.indexOf(this.subscriber);

            if (subscriberIndex !== -1) {
              observers.splice(subscriberIndex, 1);
            }
          }
        }]);

        return SubjectSubscription;
      }(_Subscription__WEBPACK_IMPORTED_MODULE_0__["Subscription"]); //# sourceMappingURL=SubjectSubscription.js.map

      /***/

    },

    /***/
    "YuR2":
    /*!**********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/scheduler/QueueAction.js ***!
      \**********************************************************************/

    /*! exports provided: QueueAction */

    /***/
    function YuR2(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "QueueAction", function () {
        return QueueAction;
      });
      /* harmony import */


      var _AsyncAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./AsyncAction */
      "3N8a");

      var QueueAction = /*#__PURE__*/function (_AsyncAction__WEBPACK3) {
        _inherits2(QueueAction, _AsyncAction__WEBPACK3);

        var _super265 = _createSuper(QueueAction);

        function QueueAction(scheduler, work) {
          var _this618;

          _classCallCheck2(this, QueueAction);

          _this618 = _super265.call(this, scheduler, work);
          _this618.scheduler = scheduler;
          _this618.work = work;
          return _this618;
        }

        _createClass2(QueueAction, [{
          key: "schedule",
          value: function schedule(state) {
            var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;

            if (delay > 0) {
              return _get2(_getPrototypeOf2(QueueAction.prototype), "schedule", this).call(this, state, delay);
            }

            this.delay = delay;
            this.state = state;
            this.scheduler.flush(this);
            return this;
          }
        }, {
          key: "execute",
          value: function execute(state, delay) {
            return delay > 0 || this.closed ? _get2(_getPrototypeOf2(QueueAction.prototype), "execute", this).call(this, state, delay) : this._execute(state, delay);
          }
        }, {
          key: "requestAsyncId",
          value: function requestAsyncId(scheduler, id) {
            var delay = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;

            if (delay !== null && delay > 0 || delay === null && this.delay > 0) {
              return _get2(_getPrototypeOf2(QueueAction.prototype), "requestAsyncId", this).call(this, scheduler, id, delay);
            }

            return scheduler.flush(this);
          }
        }]);

        return QueueAction;
      }(_AsyncAction__WEBPACK_IMPORTED_MODULE_0__["AsyncAction"]); //# sourceMappingURL=QueueAction.js.map

      /***/

    },

    /***/
    "YuTi":
    /*!***********************************!*\
      !*** (webpack)/buildin/module.js ***!
      \***********************************/

    /*! no static exports found */

    /***/
    function YuTi(module, exports) {
      module.exports = function (module) {
        if (!module.webpackPolyfill) {
          module.deprecate = function () {};

          module.paths = []; // module.parent = undefined by default

          if (!module.children) module.children = [];
          Object.defineProperty(module, "loaded", {
            enumerable: true,
            get: function get() {
              return module.l;
            }
          });
          Object.defineProperty(module, "id", {
            enumerable: true,
            get: function get() {
              return module.i;
            }
          });
          module.webpackPolyfill = 1;
        }

        return module;
      };
      /***/

    },

    /***/
    "Z0lH":
    /*!**********************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/dialog/dialog-config.class.js ***!
      \**********************************************************************************/

    /*! exports provided: OwlDialogConfig */

    /***/
    function Z0lH(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OwlDialogConfig", function () {
        return OwlDialogConfig;
      });
      /* harmony import */


      var _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/cdk/overlay */
      "rDax");

      var uniqueId = 0;

      var OwlDialogConfig = function () {
        function OwlDialogConfig() {
          this.ariaDescribedBy = null;
          this.autoFocus = true;
          this.hasBackdrop = true;
          this.data = null;
          this.disableClose = false;
          this.role = 'dialog';
          this.paneClass = '';
          this.event = null;
          this.backdropClass = '';
          this.closeOnNavigation = true;
          this.width = '';
          this.height = '';
          this.maxWidth = '85vw';
          this.scrollStrategy = new _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_0__["NoopScrollStrategy"]();
          this.id = "owl-dialog-" + uniqueId++;
        }

        return OwlDialogConfig;
      }();
      /***/

    },

    /***/
    "Z4QM":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/sd.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function Z4QM(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Sindhi [sd]
      //! author : Narain Sagar : https://github.com/narainsagar
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var months = ['جنوري', 'فيبروري', 'مارچ', 'اپريل', 'مئي', 'جون', 'جولاءِ', 'آگسٽ', 'سيپٽمبر', 'آڪٽوبر', 'نومبر', 'ڊسمبر'],
            days = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر'];
        var sd = moment.defineLocale('sd', {
          months: months,
          monthsShort: months,
          weekdays: days,
          weekdaysShort: days,
          weekdaysMin: days,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd، D MMMM YYYY HH:mm'
          },
          meridiemParse: /صبح|شام/,
          isPM: function isPM(input) {
            return 'شام' === input;
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 12) {
              return 'صبح';
            }

            return 'شام';
          },
          calendar: {
            sameDay: '[اڄ] LT',
            nextDay: '[سڀاڻي] LT',
            nextWeek: 'dddd [اڳين هفتي تي] LT',
            lastDay: '[ڪالهه] LT',
            lastWeek: '[گزريل هفتي] dddd [تي] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s پوء',
            past: '%s اڳ',
            s: 'چند سيڪنڊ',
            ss: '%d سيڪنڊ',
            m: 'هڪ منٽ',
            mm: '%d منٽ',
            h: 'هڪ ڪلاڪ',
            hh: '%d ڪلاڪ',
            d: 'هڪ ڏينهن',
            dd: '%d ڏينهن',
            M: 'هڪ مهينو',
            MM: '%d مهينا',
            y: 'هڪ سال',
            yy: '%d سال'
          },
          preparse: function preparse(string) {
            return string.replace(/،/g, ',');
          },
          postformat: function postformat(string) {
            return string.replace(/,/g, '،');
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return sd;
      });
      /***/

    },

    /***/
    "ZAMP":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/ms-my.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function ZAMP(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Malay [ms-my]
      //! note : DEPRECATED, the correct one is [ms]
      //! author : Weldan Jamili : https://github.com/weldan
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var msMy = moment.defineLocale('ms-my', {
          months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),
          monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
          weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
          weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
          weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
          longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [pukul] HH.mm',
            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm'
          },
          meridiemParse: /pagi|tengahari|petang|malam/,
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === 'pagi') {
              return hour;
            } else if (meridiem === 'tengahari') {
              return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'petang' || meridiem === 'malam') {
              return hour + 12;
            }
          },
          meridiem: function meridiem(hours, minutes, isLower) {
            if (hours < 11) {
              return 'pagi';
            } else if (hours < 15) {
              return 'tengahari';
            } else if (hours < 19) {
              return 'petang';
            } else {
              return 'malam';
            }
          },
          calendar: {
            sameDay: '[Hari ini pukul] LT',
            nextDay: '[Esok pukul] LT',
            nextWeek: 'dddd [pukul] LT',
            lastDay: '[Kelmarin pukul] LT',
            lastWeek: 'dddd [lepas pukul] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'dalam %s',
            past: '%s yang lepas',
            s: 'beberapa saat',
            ss: '%d saat',
            m: 'seminit',
            mm: '%d minit',
            h: 'sejam',
            hh: '%d jam',
            d: 'sehari',
            dd: '%d hari',
            M: 'sebulan',
            MM: '%d bulan',
            y: 'setahun',
            yy: '%d tahun'
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return msMy;
      });
      /***/

    },

    /***/
    "ZHa6":
    /*!**************************************************************!*\
      !*** ./node_modules/aws-sdk/lib/config_regional_endpoint.js ***!
      \**************************************************************/

    /*! no static exports found */

    /***/
    function ZHa6(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ./core */
      "QsWE");
      /**
       * @api private
       */


      function validateRegionalEndpointsFlagValue(configValue, errorOptions) {
        if (typeof configValue !== 'string') return undefined;else if (['legacy', 'regional'].indexOf(configValue.toLowerCase()) >= 0) {
          return configValue.toLowerCase();
        } else {
          throw AWS.util.error(new Error(), errorOptions);
        }
      }
      /**
       * Resolve the configuration value for regional endpoint from difference sources: client
       * config, environmental variable, shared config file. Value can be case-insensitive
       * 'legacy' or 'reginal'.
       * @param originalConfig user-supplied config object to resolve
       * @param options a map of config property names from individual configuration source
       *  - env: name of environmental variable that refers to the config
       *  - sharedConfig: name of shared configuration file property that refers to the config
       *  - clientConfig: name of client configuration property that refers to the config
       *
       * @api private
       */


      function resolveRegionalEndpointsFlag(originalConfig, options) {
        originalConfig = originalConfig || {}; //validate config value

        var resolved;

        if (originalConfig[options.clientConfig]) {
          resolved = validateRegionalEndpointsFlagValue(originalConfig[options.clientConfig], {
            code: 'InvalidConfiguration',
            message: 'invalid "' + options.clientConfig + '" configuration. Expect "legacy" ' + ' or "regional". Got "' + originalConfig[options.clientConfig] + '".'
          });
          if (resolved) return resolved;
        }

        if (!AWS.util.isNode()) return resolved; //validate environmental variable

        if (Object.prototype.hasOwnProperty.call(process.env, options.env)) {
          var envFlag = process.env[options.env];
          resolved = validateRegionalEndpointsFlagValue(envFlag, {
            code: 'InvalidEnvironmentalVariable',
            message: 'invalid ' + options.env + ' environmental variable. Expect "legacy" ' + ' or "regional". Got "' + process.env[options.env] + '".'
          });
          if (resolved) return resolved;
        } //validate shared config file


        var profile = {};

        try {
          var profiles = AWS.util.getProfilesFromSharedConfig(AWS.util.iniLoader);
          profile = profiles[process.env.AWS_PROFILE || AWS.util.defaultProfile];
        } catch (e) {}

        ;

        if (profile && Object.prototype.hasOwnProperty.call(profile, options.sharedConfig)) {
          var fileFlag = profile[options.sharedConfig];
          resolved = validateRegionalEndpointsFlagValue(fileFlag, {
            code: 'InvalidConfiguration',
            message: 'invalid ' + options.sharedConfig + ' profile config. Expect "legacy" ' + ' or "regional". Got "' + profile[options.sharedConfig] + '".'
          });
          if (resolved) return resolved;
        }

        return resolved;
      }

      module.exports = resolveRegionalEndpointsFlag;
      /***/
    },

    /***/
    "ZJYt":
    /*!**************************************************!*\
      !*** ./node_modules/aws-sdk/lib/xml/xml-node.js ***!
      \**************************************************/

    /*! no static exports found */

    /***/
    function ZJYt(module, exports, __webpack_require__) {
      var escapeAttribute = __webpack_require__(
      /*! ./escape-attribute */
      "m5lJ").escapeAttribute;
      /**
       * Represents an XML node.
       * @api private
       */


      function XmlNode(name, children) {
        if (children === void 0) {
          children = [];
        }

        this.name = name;
        this.children = children;
        this.attributes = {};
      }

      XmlNode.prototype.addAttribute = function (name, value) {
        this.attributes[name] = value;
        return this;
      };

      XmlNode.prototype.addChildNode = function (child) {
        this.children.push(child);
        return this;
      };

      XmlNode.prototype.removeAttribute = function (name) {
        delete this.attributes[name];
        return this;
      };

      XmlNode.prototype.toString = function () {
        var hasChildren = Boolean(this.children.length);
        var xmlText = '<' + this.name; // add attributes

        var attributes = this.attributes;

        for (var i = 0, attributeNames = Object.keys(attributes); i < attributeNames.length; i++) {
          var attributeName = attributeNames[i];
          var attribute = attributes[attributeName];

          if (typeof attribute !== 'undefined' && attribute !== null) {
            xmlText += ' ' + attributeName + '=\"' + escapeAttribute('' + attribute) + '\"';
          }
        }

        return xmlText += !hasChildren ? '/>' : '>' + this.children.map(function (c) {
          return c.toString();
        }).join('') + '</' + this.name + '>';
      };
      /**
       * @api private
       */


      module.exports = {
        XmlNode: XmlNode
      };
      /***/
    },

    /***/
    "ZONe":
    /*!**********************************************!*\
      !*** ./node_modules/aws-sdk/lib/response.js ***!
      \**********************************************/

    /*! no static exports found */

    /***/
    function ZONe(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ./core */
      "QsWE");

      var inherit = AWS.util.inherit;

      var jmespath = __webpack_require__(
      /*! jmespath */
      "CNpV");
      /**
       * This class encapsulates the response information
       * from a service request operation sent through {AWS.Request}.
       * The response object has two main properties for getting information
       * back from a request:
       *
       * ## The `data` property
       *
       * The `response.data` property contains the serialized object data
       * retrieved from the service request. For instance, for an
       * Amazon DynamoDB `listTables` method call, the response data might
       * look like:
       *
       * ```
       * > resp.data
       * { TableNames:
       *    [ 'table1', 'table2', ... ] }
       * ```
       *
       * The `data` property can be null if an error occurs (see below).
       *
       * ## The `error` property
       *
       * In the event of a service error (or transfer error), the
       * `response.error` property will be filled with the given
       * error data in the form:
       *
       * ```
       * { code: 'SHORT_UNIQUE_ERROR_CODE',
       *   message: 'Some human readable error message' }
       * ```
       *
       * In the case of an error, the `data` property will be `null`.
       * Note that if you handle events that can be in a failure state,
       * you should always check whether `response.error` is set
       * before attempting to access the `response.data` property.
       *
       * @!attribute data
       *   @readonly
       *   @!group Data Properties
       *   @note Inside of a {AWS.Request~httpData} event, this
       *     property contains a single raw packet instead of the
       *     full de-serialized service response.
       *   @return [Object] the de-serialized response data
       *     from the service.
       *
       * @!attribute error
       *   An structure containing information about a service
       *   or networking error.
       *   @readonly
       *   @!group Data Properties
       *   @note This attribute is only filled if a service or
       *     networking error occurs.
       *   @return [Error]
       *     * code [String] a unique short code representing the
       *       error that was emitted.
       *     * message [String] a longer human readable error message
       *     * retryable [Boolean] whether the error message is
       *       retryable.
       *     * statusCode [Numeric] in the case of a request that reached the service,
       *       this value contains the response status code.
       *     * time [Date] the date time object when the error occurred.
       *     * hostname [String] set when a networking error occurs to easily
       *       identify the endpoint of the request.
       *     * region [String] set when a networking error occurs to easily
       *       identify the region of the request.
       *
       * @!attribute requestId
       *   @readonly
       *   @!group Data Properties
       *   @return [String] the unique request ID associated with the response.
       *     Log this value when debugging requests for AWS support.
       *
       * @!attribute retryCount
       *   @readonly
       *   @!group Operation Properties
       *   @return [Integer] the number of retries that were
       *     attempted before the request was completed.
       *
       * @!attribute redirectCount
       *   @readonly
       *   @!group Operation Properties
       *   @return [Integer] the number of redirects that were
       *     followed before the request was completed.
       *
       * @!attribute httpResponse
       *   @readonly
       *   @!group HTTP Properties
       *   @return [AWS.HttpResponse] the raw HTTP response object
       *     containing the response headers and body information
       *     from the server.
       *
       * @see AWS.Request
       */


      AWS.Response = inherit({
        /**
         * @api private
         */
        constructor: function Response(request) {
          this.request = request;
          this.data = null;
          this.error = null;
          this.retryCount = 0;
          this.redirectCount = 0;
          this.httpResponse = new AWS.HttpResponse();

          if (request) {
            this.maxRetries = request.service.numRetries();
            this.maxRedirects = request.service.config.maxRedirects;
          }
        },

        /**
         * Creates a new request for the next page of response data, calling the
         * callback with the page data if a callback is provided.
         *
         * @callback callback function(err, data)
         *   Called when a page of data is returned from the next request.
         *
         *   @param err [Error] an error object, if an error occurred in the request
         *   @param data [Object] the next page of data, or null, if there are no
         *     more pages left.
         * @return [AWS.Request] the request object for the next page of data
         * @return [null] if no callback is provided and there are no pages left
         *   to retrieve.
         * @since v1.4.0
         */
        nextPage: function nextPage(callback) {
          var config;
          var service = this.request.service;
          var operation = this.request.operation;

          try {
            config = service.paginationConfig(operation, true);
          } catch (e) {
            this.error = e;
          }

          if (!this.hasNextPage()) {
            if (callback) callback(this.error, null);else if (this.error) throw this.error;
            return null;
          }

          var params = AWS.util.copy(this.request.params);

          if (!this.nextPageTokens) {
            return callback ? callback(null, null) : null;
          } else {
            var inputTokens = config.inputToken;
            if (typeof inputTokens === 'string') inputTokens = [inputTokens];

            for (var i = 0; i < inputTokens.length; i++) {
              params[inputTokens[i]] = this.nextPageTokens[i];
            }

            return service.makeRequest(this.request.operation, params, callback);
          }
        },

        /**
         * @return [Boolean] whether more pages of data can be returned by further
         *   requests
         * @since v1.4.0
         */
        hasNextPage: function hasNextPage() {
          this.cacheNextPageTokens();
          if (this.nextPageTokens) return true;
          if (this.nextPageTokens === undefined) return undefined;else return false;
        },

        /**
         * @api private
         */
        cacheNextPageTokens: function cacheNextPageTokens() {
          if (Object.prototype.hasOwnProperty.call(this, 'nextPageTokens')) return this.nextPageTokens;
          this.nextPageTokens = undefined;
          var config = this.request.service.paginationConfig(this.request.operation);
          if (!config) return this.nextPageTokens;
          this.nextPageTokens = null;

          if (config.moreResults) {
            if (!jmespath.search(this.data, config.moreResults)) {
              return this.nextPageTokens;
            }
          }

          var exprs = config.outputToken;
          if (typeof exprs === 'string') exprs = [exprs];
          AWS.util.arrayEach.call(this, exprs, function (expr) {
            var output = jmespath.search(this.data, expr);

            if (output) {
              this.nextPageTokens = this.nextPageTokens || [];
              this.nextPageTokens.push(output);
            }
          });
          return this.nextPageTokens;
        }
      });
      /***/
    },

    /***/
    "ZUHj":
    /*!***********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/subscribeToResult.js ***!
      \***********************************************************************/

    /*! exports provided: subscribeToResult */

    /***/
    function ZUHj(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "subscribeToResult", function () {
        return subscribeToResult;
      });
      /* harmony import */


      var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../InnerSubscriber */
      "51Dv");
      /* harmony import */


      var _subscribeTo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./subscribeTo */
      "SeVD");
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");

      function subscribeToResult(outerSubscriber, result, outerValue, outerIndex) {
        var innerSubscriber = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_0__["InnerSubscriber"](outerSubscriber, outerValue, outerIndex);

        if (innerSubscriber.closed) {
          return undefined;
        }

        if (result instanceof _Observable__WEBPACK_IMPORTED_MODULE_2__["Observable"]) {
          return result.subscribe(innerSubscriber);
        }

        return Object(_subscribeTo__WEBPACK_IMPORTED_MODULE_1__["subscribeTo"])(result)(innerSubscriber);
      } //# sourceMappingURL=subscribeToResult.js.map

      /***/

    },

    /***/
    "Zduo":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/eo.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function Zduo(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Esperanto [eo]
      //! author : Colin Dean : https://github.com/colindean
      //! author : Mia Nordentoft Imperatori : https://github.com/miestasmia
      //! comment : miestasmia corrected the translation by colindean
      //! comment : Vivakvo corrected the translation by colindean and miestasmia
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var eo = moment.defineLocale('eo', {
          months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),
          monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec'.split('_'),
          weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),
          weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),
          weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: '[la] D[-an de] MMMM, YYYY',
            LLL: '[la] D[-an de] MMMM, YYYY HH:mm',
            LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',
            llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm'
          },
          meridiemParse: /[ap]\.t\.m/i,
          isPM: function isPM(input) {
            return input.charAt(0).toLowerCase() === 'p';
          },
          meridiem: function meridiem(hours, minutes, isLower) {
            if (hours > 11) {
              return isLower ? 'p.t.m.' : 'P.T.M.';
            } else {
              return isLower ? 'a.t.m.' : 'A.T.M.';
            }
          },
          calendar: {
            sameDay: '[Hodiaŭ je] LT',
            nextDay: '[Morgaŭ je] LT',
            nextWeek: 'dddd[n je] LT',
            lastDay: '[Hieraŭ je] LT',
            lastWeek: '[pasintan] dddd[n je] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'post %s',
            past: 'antaŭ %s',
            s: 'kelkaj sekundoj',
            ss: '%d sekundoj',
            m: 'unu minuto',
            mm: '%d minutoj',
            h: 'unu horo',
            hh: '%d horoj',
            d: 'unu tago',
            //ne 'diurno', ĉar estas uzita por proksimumo
            dd: '%d tagoj',
            M: 'unu monato',
            MM: '%d monatoj',
            y: 'unu jaro',
            yy: '%d jaroj'
          },
          dayOfMonthOrdinalParse: /\d{1,2}a/,
          ordinal: '%da',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return eo;
      });
      /***/

    },

    /***/
    "Zs65":
    /*!**********************************************************!*\
      !*** ./node_modules/firebase/database/dist/index.esm.js ***!
      \**********************************************************/

    /*! no exports provided */

    /***/
    function Zs65(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony import */


      var _firebase_database__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @firebase/database */
      "6Uf2"); //# sourceMappingURL=index.esm.js.map

      /***/

    },

    /***/
    "Zy1z":
    /*!*******************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/pairwise.js ***!
      \*******************************************************************/

    /*! exports provided: pairwise */

    /***/
    function Zy1z(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "pairwise", function () {
        return pairwise;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");

      function pairwise() {
        return function (source) {
          return source.lift(new PairwiseOperator());
        };
      }

      var PairwiseOperator = /*#__PURE__*/function () {
        function PairwiseOperator() {
          _classCallCheck2(this, PairwiseOperator);
        }

        _createClass2(PairwiseOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new PairwiseSubscriber(subscriber));
          }
        }]);

        return PairwiseOperator;
      }();

      var PairwiseSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_26) {
        _inherits2(PairwiseSubscriber, _Subscriber__WEBPACK_26);

        var _super266 = _createSuper(PairwiseSubscriber);

        function PairwiseSubscriber(destination) {
          var _this619;

          _classCallCheck2(this, PairwiseSubscriber);

          _this619 = _super266.call(this, destination);
          _this619.hasPrev = false;
          return _this619;
        }

        _createClass2(PairwiseSubscriber, [{
          key: "_next",
          value: function _next(value) {
            var pair;

            if (this.hasPrev) {
              pair = [this.prev, value];
            } else {
              this.hasPrev = true;
            }

            this.prev = value;

            if (pair) {
              this.destination.next(pair);
            }
          }
        }]);

        return PairwiseSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=pairwise.js.map

      /***/

    },

    /***/
    "ZyCK":
    /*!*******************************************************************!*\
      !*** ./node_modules/aws-sdk/node_modules/uuid/lib/rng-browser.js ***!
      \*******************************************************************/

    /*! no static exports found */

    /***/
    function ZyCK(module, exports) {
      // Unique ID creation requires a high quality random # generator.  In the
      // browser this is a little complicated due to unknown quality of Math.random()
      // and inconsistent support for the `crypto` API.  We do the best we can via
      // feature-detection
      // getRandomValues needs to be invoked in a context where "this" is a Crypto
      // implementation. Also, find the complete implementation of crypto on IE11.
      var getRandomValues = typeof crypto != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto);

      if (getRandomValues) {
        // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto
        var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef

        module.exports = function whatwgRNG() {
          getRandomValues(rnds8);
          return rnds8;
        };
      } else {
        // Math.random()-based (RNG)
        //
        // If all else fails, use Math.random().  It's fast, but is of unspecified
        // quality.
        var rnds = new Array(16);

        module.exports = function mathRNG() {
          for (var i = 0, r; i < 16; i++) {
            if ((i & 0x03) === 0) r = Math.random() * 0x100000000;
            rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;
          }

          return rnds;
        };
      }
      /***/

    },

    /***/
    "Zyez":
    /*!************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/sequenceEqual.js ***!
      \************************************************************************/

    /*! exports provided: sequenceEqual, SequenceEqualOperator, SequenceEqualSubscriber */

    /***/
    function Zyez(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "sequenceEqual", function () {
        return sequenceEqual;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SequenceEqualOperator", function () {
        return SequenceEqualOperator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SequenceEqualSubscriber", function () {
        return SequenceEqualSubscriber;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");

      function sequenceEqual(compareTo, comparator) {
        return function (source) {
          return source.lift(new SequenceEqualOperator(compareTo, comparator));
        };
      }

      var SequenceEqualOperator = /*#__PURE__*/function () {
        function SequenceEqualOperator(compareTo, comparator) {
          _classCallCheck2(this, SequenceEqualOperator);

          this.compareTo = compareTo;
          this.comparator = comparator;
        }

        _createClass2(SequenceEqualOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new SequenceEqualSubscriber(subscriber, this.compareTo, this.comparator));
          }
        }]);

        return SequenceEqualOperator;
      }();

      var SequenceEqualSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_27) {
        _inherits2(SequenceEqualSubscriber, _Subscriber__WEBPACK_27);

        var _super267 = _createSuper(SequenceEqualSubscriber);

        function SequenceEqualSubscriber(destination, compareTo, comparator) {
          var _this620;

          _classCallCheck2(this, SequenceEqualSubscriber);

          _this620 = _super267.call(this, destination);
          _this620.compareTo = compareTo;
          _this620.comparator = comparator;
          _this620._a = [];
          _this620._b = [];
          _this620._oneComplete = false;

          _this620.destination.add(compareTo.subscribe(new SequenceEqualCompareToSubscriber(destination, _assertThisInitialized2(_this620))));

          return _this620;
        }

        _createClass2(SequenceEqualSubscriber, [{
          key: "_next",
          value: function _next(value) {
            if (this._oneComplete && this._b.length === 0) {
              this.emit(false);
            } else {
              this._a.push(value);

              this.checkValues();
            }
          }
        }, {
          key: "_complete",
          value: function _complete() {
            if (this._oneComplete) {
              this.emit(this._a.length === 0 && this._b.length === 0);
            } else {
              this._oneComplete = true;
            }

            this.unsubscribe();
          }
        }, {
          key: "checkValues",
          value: function checkValues() {
            var _a = this._a,
                _b = this._b,
                comparator = this.comparator;

            while (_a.length > 0 && _b.length > 0) {
              var a = _a.shift();

              var b = _b.shift();

              var areEqual = false;

              try {
                areEqual = comparator ? comparator(a, b) : a === b;
              } catch (e) {
                this.destination.error(e);
              }

              if (!areEqual) {
                this.emit(false);
              }
            }
          }
        }, {
          key: "emit",
          value: function emit(value) {
            var destination = this.destination;
            destination.next(value);
            destination.complete();
          }
        }, {
          key: "nextB",
          value: function nextB(value) {
            if (this._oneComplete && this._a.length === 0) {
              this.emit(false);
            } else {
              this._b.push(value);

              this.checkValues();
            }
          }
        }, {
          key: "completeB",
          value: function completeB() {
            if (this._oneComplete) {
              this.emit(this._a.length === 0 && this._b.length === 0);
            } else {
              this._oneComplete = true;
            }
          }
        }]);

        return SequenceEqualSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]);

      var SequenceEqualCompareToSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_28) {
        _inherits2(SequenceEqualCompareToSubscriber, _Subscriber__WEBPACK_28);

        var _super268 = _createSuper(SequenceEqualCompareToSubscriber);

        function SequenceEqualCompareToSubscriber(destination, parent) {
          var _this621;

          _classCallCheck2(this, SequenceEqualCompareToSubscriber);

          _this621 = _super268.call(this, destination);
          _this621.parent = parent;
          return _this621;
        }

        _createClass2(SequenceEqualCompareToSubscriber, [{
          key: "_next",
          value: function _next(value) {
            this.parent.nextB(value);
          }
        }, {
          key: "_error",
          value: function _error(err) {
            this.parent.error(err);
            this.unsubscribe();
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.parent.completeB();
            this.unsubscribe();
          }
        }]);

        return SequenceEqualCompareToSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=sequenceEqual.js.map

      /***/

    },

    /***/
    "a0Xn":
    /*!*************************************************************************************!*\
      !*** ./node_modules/angular-highcharts/__ivy_ngcc__/fesm2015/angular-highcharts.js ***!
      \*************************************************************************************/

    /*! exports provided: Chart, ChartModule, HIGHCHARTS_MODULES, MapChart, StockChart, ɵa, ɵb */

    /***/
    function a0Xn(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Chart", function () {
        return Chart;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ChartModule", function () {
        return ChartModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HIGHCHARTS_MODULES", function () {
        return HIGHCHARTS_MODULES;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MapChart", function () {
        return MapChart;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "StockChart", function () {
        return StockChart;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵa", function () {
        return ChartService;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵb", function () {
        return ChartDirective;
      });
      /* harmony import */


      var highcharts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! highcharts */
      "6n/F");
      /* harmony import */


      var highcharts__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(highcharts__WEBPACK_IMPORTED_MODULE_0__);
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var Chart = /*#__PURE__*/function () {
        /**
         * @param {?=} options
         */
        function Chart() {
          var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
            series: []
          };

          _classCallCheck2(this, Chart);

          this.options = options;
          this.refSubject = new rxjs__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();
          this.ref$ = this.refSubject.asObservable();
        }
        /**
         * Add Point
         * @param {?} point         Highcharts.DataPoint, number touple or number
         * @param {?=} serieIndex    Index position of series. This defaults to 0.
         * @param {?=} redraw        Flag whether or not to redraw point. This defaults to true.
         * @param {?=} shift         Shift point to the start of series. This defaults to false.
         * @return {?}
         */


        _createClass2(Chart, [{
          key: "addPoint",
          value: function addPoint(point) {
            var serieIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
            var redraw = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
            var shift = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
            this.ref$.subscribe(
            /**
            * @param {?} chart
            * @return {?}
            */
            function (chart) {
              if (chart.series.length > serieIndex) {
                chart.series[serieIndex].addPoint(point, redraw, shift);
              }
            });
          }
          /**
           * Add Series
           * @param {?} series        Series Configuration
           * @param {?=} redraw        Flag whether or not to redraw series. This defaults to true.
           * @param {?=} animation     Whether to apply animation, and optionally animation configuration. This defaults to false.
           * @return {?}
           */

        }, {
          key: "addSeries",
          value: function addSeries(series) {
            var redraw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
            var animation = arguments.length > 2 ? arguments[2] : undefined;
            this.ref$.subscribe(
            /**
            * @param {?} chart
            * @return {?}
            */
            function (chart) {
              chart.addSeries(series, redraw, animation);
            });
          }
          /**
           * Remove Point
           * @param {?} pointIndex    Index of Point
           * @param {?=} serieIndex    Specified Index of Series. Defaults to 0.
           * @return {?}
           */

        }, {
          key: "removePoint",
          value: function removePoint(pointIndex) {
            var serieIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
            this.ref$.subscribe(
            /**
            * @param {?} chart
            * @return {?}
            */
            function (chart) {
              if (chart.series.length > serieIndex && chart.series[serieIndex].data.length > pointIndex) {
                chart.series[serieIndex].removePoint(pointIndex, true);
              }
            });
          }
          /**
           * Remove Series
           * @param {?} seriesIndex    Index position of series to remove.
           * @return {?}
           */

        }, {
          key: "removeSeries",
          value: function removeSeries(seriesIndex) {
            this.ref$.subscribe(
            /**
            * @param {?} chart
            * @return {?}
            */
            function (chart) {
              if (chart.series.length > seriesIndex) {
                chart.series[seriesIndex].remove(true);
              }
            });
          }
          /**
           * @param {?} el
           * @return {?}
           */

        }, {
          key: "init",
          value: function init(el) {
            var _this622 = this;

            if (!this.ref) {
              Object(highcharts__WEBPACK_IMPORTED_MODULE_0__["chart"])(el.nativeElement, this.options,
              /**
              * @param {?} chart
              * @return {?}
              */
              function (chart) {
                _this622.refSubject.next(chart);

                _this622.ref = chart;

                _this622.refSubject.complete();
              });
            }
          }
          /**
           * @return {?}
           */

        }, {
          key: "destroy",
          value: function destroy() {
            if (this.ref) {
              this.options = this.ref.options;
              this.ref.destroy();
              this.ref = undefined; // new init subject

              this.refSubject = new rxjs__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();
              this.ref$ = this.refSubject.asObservable();
            }
          }
        }]);

        return Chart;
      }();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @license
       * Copyright Felix Itzenplitz. All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at
       * https://github.com/cebor/angular-highcharts/blob/master/LICENSE
       */


      var MapChart = /*#__PURE__*/function () {
        /**
         * @param {?=} options
         */
        function MapChart() {
          var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
            series: []
          };

          _classCallCheck2(this, MapChart);

          this.options = options;
          this.refSubject = new rxjs__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();
          this.ref$ = this.refSubject.asObservable();
        }
        /**
         * @param {?} el
         * @return {?}
         */


        _createClass2(MapChart, [{
          key: "init",
          value: function init(el) {
            var _this623 = this;

            if (!this.ref) {
              Object(highcharts__WEBPACK_IMPORTED_MODULE_0__["mapChart"])(el.nativeElement, this.options,
              /**
              * @param {?} chart
              * @return {?}
              */
              function (chart) {
                _this623.refSubject.next(chart);

                _this623.ref = chart;

                _this623.refSubject.complete();
              });
            }
          }
          /**
           * @return {?}
           */

        }, {
          key: "destroy",
          value: function destroy() {
            if (this.ref) {
              this.options = this.ref.options;
              this.ref.destroy();
              this.ref = undefined; // new init subject

              this.refSubject = new rxjs__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();
              this.ref$ = this.refSubject.asObservable();
            }
          }
        }]);

        return MapChart;
      }();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @license
       * Copyright Felix Itzenplitz. All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at
       * https://github.com/cebor/angular-highcharts/blob/master/LICENSE
       *
       * @author Felix Itzenplitz
       * @author Timothy A. Perez (contributor)
       */


      var StockChart = /*#__PURE__*/function () {
        /**
         * @param {?=} options
         */
        function StockChart() {
          var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
            series: []
          };

          _classCallCheck2(this, StockChart);

          this.options = options;
          this.refSubject = new rxjs__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();
          this.ref$ = this.refSubject.asObservable();
        }
        /**
         * @param {?} el
         * @return {?}
         */


        _createClass2(StockChart, [{
          key: "init",
          value: function init(el) {
            var _this624 = this;

            if (!this.ref) {
              Object(highcharts__WEBPACK_IMPORTED_MODULE_0__["stockChart"])(el.nativeElement, this.options,
              /**
              * @param {?} chart
              * @return {?}
              */
              function (chart) {
                _this624.refSubject.next(chart);

                _this624.ref = chart;

                _this624.refSubject.complete();
              });
            }
          }
          /**
           * @return {?}
           */

        }, {
          key: "destroy",
          value: function destroy() {
            if (this.ref) {
              this.options = this.ref.options;
              this.ref.destroy();
              this.ref = undefined; // new init subject

              this.refSubject = new rxjs__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();
              this.ref$ = this.refSubject.asObservable();
            }
          }
        }]);

        return StockChart;
      }();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var ChartDirective = /*#__PURE__*/function () {
        /**
         * @param {?} el
         */
        function ChartDirective(el) {
          _classCallCheck2(this, ChartDirective);

          this.el = el;
        }
        /**
         * @param {?} changes
         * @return {?}
         */


        _createClass2(ChartDirective, [{
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            if (!changes.chart.isFirstChange()) {
              this.destroy();
              this.init();
            }
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            this.init();
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.destroy();
          }
          /**
           * @private
           * @return {?}
           */

        }, {
          key: "init",
          value: function init() {
            if (this.chart instanceof Chart || this.chart instanceof StockChart || this.chart instanceof MapChart) {
              this.chart.init(this.el);
            }
          }
          /**
           * @private
           * @return {?}
           */

        }, {
          key: "destroy",
          value: function destroy() {
            if (this.chart instanceof Chart || this.chart instanceof StockChart || this.chart instanceof MapChart) {
              this.chart.destroy();
            }
          }
        }]);

        return ChartDirective;
      }();

      ChartDirective.ɵfac = function ChartDirective_Factory(t) {
        return new (t || ChartDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_2__["ElementRef"]));
      };

      ChartDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineDirective"]({
        type: ChartDirective,
        selectors: [["", "chart", ""]],
        inputs: {
          chart: "chart"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵNgOnChangesFeature"]]
      });
      /** @nocollapse */

      ChartDirective.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ElementRef"]
        }];
      };

      ChartDirective.propDecorators = {
        chart: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](ChartDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Directive"],
          args: [{
            selector: '[chart]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ElementRef"]
          }];
        }, {
          chart: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }]
        });
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /** @type {?} */


      var HIGHCHARTS_MODULES = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["InjectionToken"]('HighchartsModules');

      var ChartService = /*#__PURE__*/function () {
        /**
         * @param {?} chartModules
         */
        function ChartService(chartModules) {
          _classCallCheck2(this, ChartService);

          this.chartModules = chartModules;
        }
        /**
         * @return {?}
         */


        _createClass2(ChartService, [{
          key: "initModules",
          value: function initModules() {
            this.chartModules.forEach(
            /**
            * @param {?} chartModule
            * @return {?}
            */
            function (chartModule) {
              chartModule(highcharts__WEBPACK_IMPORTED_MODULE_0__);
            });
          }
        }]);

        return ChartService;
      }();

      ChartService.ɵfac = function ChartService_Factory(t) {
        return new (t || ChartService)(_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵinject"](HIGHCHARTS_MODULES));
      };

      ChartService.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineInjectable"]({
        token: ChartService,
        factory: ChartService.ɵfac
      });
      /** @nocollapse */

      ChartService.ctorParameters = function () {
        return [{
          type: Array,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Inject"],
            args: [HIGHCHARTS_MODULES]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](ChartService, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Injectable"]
        }], function () {
          return [{
            type: Array,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Inject"],
              args: [HIGHCHARTS_MODULES]
            }]
          }];
        }, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var ɵ0 = [];

      var ChartModule =
      /**
       * @param {?} cs
       */
      function ChartModule(cs) {
        _classCallCheck2(this, ChartModule);

        this.cs = cs;
        this.cs.initModules();
      };

      ChartModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineNgModule"]({
        type: ChartModule
      });
      ChartModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineInjector"]({
        factory: function ChartModule_Factory(t) {
          return new (t || ChartModule)(_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵinject"](ChartService));
        },
        providers: [{
          provide: HIGHCHARTS_MODULES,
          useValue: ɵ0
        }, ChartService]
      });
      /** @nocollapse */

      ChartModule.ctorParameters = function () {
        return [{
          type: ChartService
        }];
      };

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵsetNgModuleScope"](ChartModule, {
          declarations: [ChartDirective],
          exports: [ChartDirective]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](ChartModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["NgModule"],
          args: [{
            exports: [ChartDirective],
            declarations: [ChartDirective],
            providers: [{
              provide: HIGHCHARTS_MODULES,
              useValue: ɵ0
            }, ChartService]
          }]
        }], function () {
          return [{
            type: ChartService
          }];
        }, null);
      })(); //# sourceMappingURL=angular-highcharts.js.map

      /***/

    },

    /***/
    "a3Wg":
    /*!**********************************************************************************************************!*\
      !*** ./node_modules/@angular/platform-browser-dynamic/__ivy_ngcc__/fesm2015/platform-browser-dynamic.js ***!
      \**********************************************************************************************************/

    /*! exports provided: JitCompilerFactory, RESOURCE_CACHE_PROVIDER, VERSION, platformBrowserDynamic, ɵCOMPILER_PROVIDERS__POST_R3__, ɵCompilerImpl, ɵINTERNAL_BROWSER_DYNAMIC_PLATFORM_PROVIDERS, ɵResourceLoaderImpl, ɵangular_packages_platform_browser_dynamic_platform_browser_dynamic_a, ɵplatformCoreDynamic */

    /***/
    function a3Wg(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "JitCompilerFactory", function () {
        return JitCompilerFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RESOURCE_CACHE_PROVIDER", function () {
        return RESOURCE_CACHE_PROVIDER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "VERSION", function () {
        return VERSION;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "platformBrowserDynamic", function () {
        return platformBrowserDynamic;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵCOMPILER_PROVIDERS__POST_R3__", function () {
        return COMPILER_PROVIDERS__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵCompilerImpl", function () {
        return CompilerImpl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵINTERNAL_BROWSER_DYNAMIC_PLATFORM_PROVIDERS", function () {
        return INTERNAL_BROWSER_DYNAMIC_PLATFORM_PROVIDERS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵResourceLoaderImpl", function () {
        return ResourceLoaderImpl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_dynamic_platform_browser_dynamic_a", function () {
        return CachedResourceLoader;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵplatformCoreDynamic", function () {
        return platformCoreDynamic;
      });
      /* harmony import */


      var _angular_compiler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/compiler */
      "1uSB");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/platform-browser */
      "jhN1");
      /**
       * @license Angular v12.0.0-next.1
       * (c) 2010-2020 Google LLC. https://angular.io/
       * License: MIT
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var MODULE_SUFFIX = '';
      var builtinExternalReferences = createBuiltinExternalReferencesMap();

      var JitReflector = /*#__PURE__*/function () {
        function JitReflector() {
          _classCallCheck2(this, JitReflector);

          this.reflectionCapabilities = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵReflectionCapabilities"]();
        }

        _createClass2(JitReflector, [{
          key: "componentModuleUrl",
          value: function componentModuleUrl(type, cmpMetadata) {
            var moduleId = cmpMetadata.moduleId;

            if (typeof moduleId === 'string') {
              var scheme = Object(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["getUrlScheme"])(moduleId);
              return scheme ? moduleId : "package:".concat(moduleId).concat(MODULE_SUFFIX);
            } else if (moduleId !== null && moduleId !== void 0) {
              throw Object(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["syntaxError"])("moduleId should be a string in \"".concat(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵstringify"])(type), "\". See https://goo.gl/wIDDiL for more information.\n") + "If you're using Webpack you should inline the template and the styles, see https://goo.gl/X2J8zc.");
            }

            return "./".concat(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵstringify"])(type));
          }
        }, {
          key: "parameters",
          value: function parameters(typeOrFunc) {
            return this.reflectionCapabilities.parameters(typeOrFunc);
          }
        }, {
          key: "tryAnnotations",
          value: function tryAnnotations(typeOrFunc) {
            return this.annotations(typeOrFunc);
          }
        }, {
          key: "annotations",
          value: function annotations(typeOrFunc) {
            return this.reflectionCapabilities.annotations(typeOrFunc);
          }
        }, {
          key: "shallowAnnotations",
          value: function shallowAnnotations(typeOrFunc) {
            throw new Error('Not supported in JIT mode');
          }
        }, {
          key: "propMetadata",
          value: function propMetadata(typeOrFunc) {
            return this.reflectionCapabilities.propMetadata(typeOrFunc);
          }
        }, {
          key: "hasLifecycleHook",
          value: function hasLifecycleHook(type, lcProperty) {
            return this.reflectionCapabilities.hasLifecycleHook(type, lcProperty);
          }
        }, {
          key: "guards",
          value: function guards(type) {
            return this.reflectionCapabilities.guards(type);
          }
        }, {
          key: "resolveExternalReference",
          value: function resolveExternalReference(ref) {
            return builtinExternalReferences.get(ref) || ref.runtime;
          }
        }]);

        return JitReflector;
      }();

      function createBuiltinExternalReferencesMap() {
        var map = new Map();
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].ANALYZE_FOR_ENTRY_COMPONENTS, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ANALYZE_FOR_ENTRY_COMPONENTS"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].ElementRef, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].NgModuleRef, _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleRef"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].ViewContainerRef, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewContainerRef"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].ChangeDetectorRef, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].Renderer2, _angular_core__WEBPACK_IMPORTED_MODULE_1__["Renderer2"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].QueryList, _angular_core__WEBPACK_IMPORTED_MODULE_1__["QueryList"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].TemplateRef, _angular_core__WEBPACK_IMPORTED_MODULE_1__["TemplateRef"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].CodegenComponentFactoryResolver, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵCodegenComponentFactoryResolver"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].ComponentFactoryResolver, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentFactoryResolver"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].ComponentFactory, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentFactory"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].ComponentRef, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentRef"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].NgModuleFactory, _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleFactory"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].createModuleFactory, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵcmf"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].moduleDef, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵmod"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].moduleProviderDef, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵmpd"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].RegisterModuleFactoryFn, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵregisterModuleFactory"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].Injector, _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].ViewEncapsulation, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewEncapsulation"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].ChangeDetectionStrategy, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectionStrategy"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].SecurityContext, _angular_core__WEBPACK_IMPORTED_MODULE_1__["SecurityContext"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].LOCALE_ID, _angular_core__WEBPACK_IMPORTED_MODULE_1__["LOCALE_ID"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].TRANSLATIONS_FORMAT, _angular_core__WEBPACK_IMPORTED_MODULE_1__["TRANSLATIONS_FORMAT"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].inlineInterpolate, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵinlineInterpolate"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].interpolate, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵinterpolate"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].EMPTY_ARRAY, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵEMPTY_ARRAY"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].EMPTY_MAP, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵEMPTY_MAP"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].viewDef, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵvid"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].elementDef, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵeld"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].anchorDef, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵand"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].textDef, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵted"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].directiveDef, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵdid"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].providerDef, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵprd"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].queryDef, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵqud"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].pureArrayDef, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵpad"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].pureObjectDef, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵpod"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].purePipeDef, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵppd"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].pipeDef, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵpid"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].nodeValue, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵnov"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].ngContentDef, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵncd"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].unwrapValue, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵunv"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].createRendererType2, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵcrt"]);
        map.set(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Identifiers"].createComponentFactory, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵccf"]);
        return map;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ERROR_COLLECTOR_TOKEN = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('ErrorCollector');
      /**
       * A default provider for {@link PACKAGE_ROOT_URL} that maps to '/'.
       */

      var DEFAULT_PACKAGE_URL_PROVIDER = {
        provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["PACKAGE_ROOT_URL"],
        useValue: '/'
      };
      var _NO_RESOURCE_LOADER = {
        get: function get(url) {
          throw new Error("No ResourceLoader implementation has been provided. Can't read the url \"".concat(url, "\""));
        }
      };
      var baseHtmlParser = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('HtmlParser');

      var CompilerImpl = /*#__PURE__*/function () {
        function CompilerImpl(injector, _metadataResolver, templateParser, styleCompiler, viewCompiler, ngModuleCompiler, summaryResolver, compileReflector, jitEvaluator, compilerConfig, console) {
          _classCallCheck2(this, CompilerImpl);

          this._metadataResolver = _metadataResolver;
          this._delegate = new _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["JitCompiler"](_metadataResolver, templateParser, styleCompiler, viewCompiler, ngModuleCompiler, summaryResolver, compileReflector, jitEvaluator, compilerConfig, console, this.getExtraNgModuleProviders.bind(this));
          this.injector = injector;
        }

        _createClass2(CompilerImpl, [{
          key: "getExtraNgModuleProviders",
          value: function getExtraNgModuleProviders() {
            return [this._metadataResolver.getProviderMetadata(new _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["ProviderMeta"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["Compiler"], {
              useValue: this
            }))];
          }
        }, {
          key: "compileModuleSync",
          value: function compileModuleSync(moduleType) {
            return this._delegate.compileModuleSync(moduleType);
          }
        }, {
          key: "compileModuleAsync",
          value: function compileModuleAsync(moduleType) {
            return this._delegate.compileModuleAsync(moduleType);
          }
        }, {
          key: "compileModuleAndAllComponentsSync",
          value: function compileModuleAndAllComponentsSync(moduleType) {
            var result = this._delegate.compileModuleAndAllComponentsSync(moduleType);

            return {
              ngModuleFactory: result.ngModuleFactory,
              componentFactories: result.componentFactories
            };
          }
        }, {
          key: "compileModuleAndAllComponentsAsync",
          value: function compileModuleAndAllComponentsAsync(moduleType) {
            return this._delegate.compileModuleAndAllComponentsAsync(moduleType).then(function (result) {
              return {
                ngModuleFactory: result.ngModuleFactory,
                componentFactories: result.componentFactories
              };
            });
          }
        }, {
          key: "loadAotSummaries",
          value: function loadAotSummaries(summaries) {
            this._delegate.loadAotSummaries(summaries);
          }
        }, {
          key: "hasAotSummary",
          value: function hasAotSummary(ref) {
            return this._delegate.hasAotSummary(ref);
          }
        }, {
          key: "getComponentFactory",
          value: function getComponentFactory(component) {
            return this._delegate.getComponentFactory(component);
          }
        }, {
          key: "clearCache",
          value: function clearCache() {
            this._delegate.clearCache();
          }
        }, {
          key: "clearCacheFor",
          value: function clearCacheFor(type) {
            this._delegate.clearCacheFor(type);
          }
        }, {
          key: "getModuleId",
          value: function getModuleId(moduleType) {
            var meta = this._metadataResolver.getNgModuleMetadata(moduleType);

            return meta && meta.id || undefined;
          }
        }]);

        return CompilerImpl;
      }();

      var ɵ0 = new JitReflector(),
          ɵ1 = _NO_RESOURCE_LOADER,
          ɵ2 = function ɵ2(parser, translations, format, config, console) {
        translations = translations || '';
        var missingTranslation = translations ? config.missingTranslation : _angular_core__WEBPACK_IMPORTED_MODULE_1__["MissingTranslationStrategy"].Ignore;
        return new _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["I18NHtmlParser"](parser, translations, format, missingTranslation, console);
      },
          ɵ3 = new _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["CompilerConfig"]();
      /**
       * A set of providers that provide `JitCompiler` and its dependencies to use for
       * template compilation.
       */


      var COMPILER_PROVIDERS__PRE_R3__ = [{
        provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["CompileReflector"],
        useValue: ɵ0
      }, {
        provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["ResourceLoader"],
        useValue: ɵ1
      }, {
        provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["JitSummaryResolver"],
        deps: []
      }, {
        provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["SummaryResolver"],
        useExisting: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["JitSummaryResolver"]
      }, {
        provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵConsole"],
        deps: []
      }, {
        provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Lexer"],
        deps: []
      }, {
        provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Parser"],
        deps: [_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Lexer"]]
      }, {
        provide: baseHtmlParser,
        useClass: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["HtmlParser"],
        deps: []
      }, {
        provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["I18NHtmlParser"],
        useFactory: ɵ2,
        deps: [baseHtmlParser, [new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"](), new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["TRANSLATIONS"])], [new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"](), new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["TRANSLATIONS_FORMAT"])], [_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["CompilerConfig"]], [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵConsole"]]]
      }, {
        provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["HtmlParser"],
        useExisting: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["I18NHtmlParser"]
      }, {
        provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["TemplateParser"],
        deps: [_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["CompilerConfig"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["CompileReflector"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["Parser"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["ElementSchemaRegistry"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["I18NHtmlParser"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵConsole"]]
      }, {
        provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["JitEvaluator"],
        useClass: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["JitEvaluator"],
        deps: []
      }, {
        provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["DirectiveNormalizer"],
        deps: [_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["ResourceLoader"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["UrlResolver"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["HtmlParser"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["CompilerConfig"]]
      }, {
        provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["CompileMetadataResolver"],
        deps: [_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["CompilerConfig"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["HtmlParser"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["NgModuleResolver"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["DirectiveResolver"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["PipeResolver"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["SummaryResolver"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["ElementSchemaRegistry"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["DirectiveNormalizer"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵConsole"], [_angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["StaticSymbolCache"]], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["CompileReflector"], [_angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"], ERROR_COLLECTOR_TOKEN]]
      }, DEFAULT_PACKAGE_URL_PROVIDER, {
        provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["StyleCompiler"],
        deps: [_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["UrlResolver"]]
      }, {
        provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["ViewCompiler"],
        deps: [_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["CompileReflector"]]
      }, {
        provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["NgModuleCompiler"],
        deps: [_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["CompileReflector"]]
      }, {
        provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["CompilerConfig"],
        useValue: ɵ3
      }, {
        provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Compiler"],
        useClass: CompilerImpl,
        deps: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["CompileMetadataResolver"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["TemplateParser"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["StyleCompiler"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["ViewCompiler"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["NgModuleCompiler"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["SummaryResolver"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["CompileReflector"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["JitEvaluator"], _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["CompilerConfig"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵConsole"]]
      }, {
        provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["DomElementSchemaRegistry"],
        deps: []
      }, {
        provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["ElementSchemaRegistry"],
        useExisting: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["DomElementSchemaRegistry"]
      }, {
        provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["UrlResolver"],
        deps: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["PACKAGE_ROOT_URL"]]
      }, {
        provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["DirectiveResolver"],
        deps: [_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["CompileReflector"]]
      }, {
        provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["PipeResolver"],
        deps: [_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["CompileReflector"]]
      }, {
        provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["NgModuleResolver"],
        deps: [_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["CompileReflector"]]
      }];
      var COMPILER_PROVIDERS__POST_R3__ = [{
        provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Compiler"],
        useFactory: function useFactory() {
          return new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Compiler"]();
        }
      }];
      var COMPILER_PROVIDERS = COMPILER_PROVIDERS__POST_R3__;
      /**
       * @publicApi
       */

      var JitCompilerFactory = /*#__PURE__*/function () {
        /* @internal */
        function JitCompilerFactory(defaultOptions) {
          _classCallCheck2(this, JitCompilerFactory);

          var compilerOptions = {
            useJit: true,
            defaultEncapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewEncapsulation"].Emulated,
            missingTranslation: _angular_core__WEBPACK_IMPORTED_MODULE_1__["MissingTranslationStrategy"].Warning
          };
          this._defaultOptions = [compilerOptions].concat(_toConsumableArray(defaultOptions));
        }

        _createClass2(JitCompilerFactory, [{
          key: "createCompiler",
          value: function createCompiler() {
            var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];

            var opts = _mergeOptions(this._defaultOptions.concat(options));

            var injector = _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"].create([COMPILER_PROVIDERS, {
              provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["CompilerConfig"],
              useFactory: function useFactory() {
                return new _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["CompilerConfig"]({
                  // let explicit values from the compiler options overwrite options
                  // from the app providers
                  useJit: opts.useJit,
                  jitDevMode: Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["isDevMode"])(),
                  // let explicit values from the compiler options overwrite options
                  // from the app providers
                  defaultEncapsulation: opts.defaultEncapsulation,
                  missingTranslation: opts.missingTranslation,
                  preserveWhitespaces: opts.preserveWhitespaces
                });
              },
              deps: []
            }, opts.providers]);

            return injector.get(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Compiler"]);
          }
        }]);

        return JitCompilerFactory;
      }();

      function _mergeOptions(optionsArr) {
        return {
          useJit: _lastDefined(optionsArr.map(function (options) {
            return options.useJit;
          })),
          defaultEncapsulation: _lastDefined(optionsArr.map(function (options) {
            return options.defaultEncapsulation;
          })),
          providers: _mergeArrays(optionsArr.map(function (options) {
            return options.providers;
          })),
          missingTranslation: _lastDefined(optionsArr.map(function (options) {
            return options.missingTranslation;
          })),
          preserveWhitespaces: _lastDefined(optionsArr.map(function (options) {
            return options.preserveWhitespaces;
          }))
        };
      }

      function _lastDefined(args) {
        for (var i = args.length - 1; i >= 0; i--) {
          if (args[i] !== undefined) {
            return args[i];
          }
        }

        return undefined;
      }

      function _mergeArrays(parts) {
        var result = [];
        parts.forEach(function (part) {
          return part && result.push.apply(result, _toConsumableArray(part));
        });
        return result;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ɵ0$1 = {};
      /**
       * A platform that included corePlatform and the compiler.
       *
       * @publicApi
       */

      var platformCoreDynamic = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["createPlatformFactory"])(_angular_core__WEBPACK_IMPORTED_MODULE_1__["platformCore"], 'coreDynamic', [{
        provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["COMPILER_OPTIONS"],
        useValue: ɵ0$1,
        multi: true
      }, {
        provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["CompilerFactory"],
        useClass: JitCompilerFactory,
        deps: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["COMPILER_OPTIONS"]]
      }]);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var ResourceLoaderImpl = /*#__PURE__*/function (_angular_compiler__WE) {
        _inherits2(ResourceLoaderImpl, _angular_compiler__WE);

        var _super269 = _createSuper(ResourceLoaderImpl);

        function ResourceLoaderImpl() {
          _classCallCheck2(this, ResourceLoaderImpl);

          return _super269.apply(this, arguments);
        }

        _createClass2(ResourceLoaderImpl, [{
          key: "get",
          value: function get(url) {
            var resolve;
            var reject;
            var promise = new Promise(function (res, rej) {
              resolve = res;
              reject = rej;
            });
            var xhr = new XMLHttpRequest();
            xhr.open('GET', url, true);
            xhr.responseType = 'text';

            xhr.onload = function () {
              // responseText is the old-school way of retrieving response (supported by IE8 & 9)
              // response/responseType properties were introduced in ResourceLoader Level2 spec (supported
              // by IE10)
              var response = xhr.response || xhr.responseText; // normalize IE9 bug (https://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 : 0;
              }

              if (200 <= status && status <= 300) {
                resolve(response);
              } else {
                reject("Failed to load ".concat(url));
              }
            };

            xhr.onerror = function () {
              reject("Failed to load ".concat(url));
            };

            xhr.send();
            return promise;
          }
        }]);

        return ResourceLoaderImpl;
      }(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["ResourceLoader"]);

      ResourceLoaderImpl.ɵfac = function ResourceLoaderImpl_Factory(t) {
        return ɵResourceLoaderImpl_BaseFactory(t || ResourceLoaderImpl);
      };

      ResourceLoaderImpl.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({
        token: ResourceLoaderImpl,
        factory: ResourceLoaderImpl.ɵfac
      });

      var ɵResourceLoaderImpl_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetInheritedFactory"](ResourceLoaderImpl);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](ResourceLoaderImpl, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ɵ0$2 = {
        providers: [{
          provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["ResourceLoader"],
          useClass: ResourceLoaderImpl,
          deps: []
        }]
      },
          ɵ1$1 = _angular_common__WEBPACK_IMPORTED_MODULE_2__["ɵPLATFORM_BROWSER_ID"];
      /**
       * @publicApi
       */

      var INTERNAL_BROWSER_DYNAMIC_PLATFORM_PROVIDERS = [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_3__["ɵINTERNAL_BROWSER_PLATFORM_PROVIDERS"], {
        provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["COMPILER_OPTIONS"],
        useValue: ɵ0$2,
        multi: true
      }, {
        provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["PLATFORM_ID"],
        useValue: ɵ1$1
      }];
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * An implementation of ResourceLoader that uses a template cache to avoid doing an actual
       * ResourceLoader.
       *
       * The template cache needs to be built and loaded into window.$templateCache
       * via a separate mechanism.
       *
       * @publicApi
       */

      var CachedResourceLoader = /*#__PURE__*/function (_angular_compiler__WE2) {
        _inherits2(CachedResourceLoader, _angular_compiler__WE2);

        var _super270 = _createSuper(CachedResourceLoader);

        function CachedResourceLoader() {
          var _this625;

          _classCallCheck2(this, CachedResourceLoader);

          _this625 = _super270.call(this);
          _this625._cache = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵglobal"].$templateCache;

          if (_this625._cache == null) {
            throw new Error('CachedResourceLoader: Template cache was not found in $templateCache.');
          }

          return _this625;
        }

        _createClass2(CachedResourceLoader, [{
          key: "get",
          value: function get(url) {
            if (this._cache.hasOwnProperty(url)) {
              return Promise.resolve(this._cache[url]);
            } else {
              return Promise.reject('CachedResourceLoader: Did not find cached template for ' + url);
            }
          }
        }]);

        return CachedResourceLoader;
      }(_angular_compiler__WEBPACK_IMPORTED_MODULE_0__["ResourceLoader"]);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @publicApi
       */


      var VERSION = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Version"]('12.0.0-next.1');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @publicApi
       */

      var RESOURCE_CACHE_PROVIDER = [{
        provide: _angular_compiler__WEBPACK_IMPORTED_MODULE_0__["ResourceLoader"],
        useClass: CachedResourceLoader,
        deps: []
      }];
      /**
       * @publicApi
       */

      var platformBrowserDynamic = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["createPlatformFactory"])(platformCoreDynamic, 'browserDynamic', INTERNAL_BROWSER_DYNAMIC_PLATFORM_PROVIDERS);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // This file only reexports content of the `src` folder. Keep it that way.

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=platform-browser-dynamic.js.map

      /***/
    },

    /***/
    "a7t3":
    /*!************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/subscribeToPromise.js ***!
      \************************************************************************/

    /*! exports provided: subscribeToPromise */

    /***/
    function a7t3(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "subscribeToPromise", function () {
        return subscribeToPromise;
      });
      /* harmony import */


      var _hostReportError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./hostReportError */
      "NJ4a");

      var subscribeToPromise = function subscribeToPromise(promise) {
        return function (subscriber) {
          promise.then(function (value) {
            if (!subscriber.closed) {
              subscriber.next(value);
              subscriber.complete();
            }
          }, function (err) {
            return subscriber.error(err);
          }).then(null, _hostReportError__WEBPACK_IMPORTED_MODULE_0__["hostReportError"]);
          return subscriber;
        };
      }; //# sourceMappingURL=subscribeToPromise.js.map

      /***/

    },

    /***/
    "aCrv":
    /*!*****************************************************!*\
      !*** ./node_modules/@tweenjs/tween.js/src/Tween.js ***!
      \*****************************************************/

    /*! no static exports found */

    /***/
    function aCrv(module, exports, __webpack_require__) {
      var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;
      /**
      * Tween.js - Licensed under the MIT license
      * https://github.com/tweenjs/tween.js
      * ----------------------------------------------
      *
      * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.
      * Thank you all, you're awesome!
      */


      var _Group = function _Group() {
        this._tweens = {};
        this._tweensAddedDuringUpdate = {};
      };

      _Group.prototype = {
        getAll: function getAll() {
          return Object.keys(this._tweens).map(function (tweenId) {
            return this._tweens[tweenId];
          }.bind(this));
        },
        removeAll: function removeAll() {
          this._tweens = {};
        },
        add: function add(tween) {
          this._tweens[tween.getId()] = tween;
          this._tweensAddedDuringUpdate[tween.getId()] = tween;
        },
        remove: function remove(tween) {
          delete this._tweens[tween.getId()];
          delete this._tweensAddedDuringUpdate[tween.getId()];
        },
        update: function update(time, preserve) {
          var tweenIds = Object.keys(this._tweens);

          if (tweenIds.length === 0) {
            return false;
          }

          time = time !== undefined ? time : TWEEN.now(); // Tweens are updated in "batches". If you add a new tween during an update, then the
          // new tween will be updated in the next batch.
          // If you remove a tween during an update, it may or may not be updated. However,
          // if the removed tween was added during the current batch, then it will not be updated.

          while (tweenIds.length > 0) {
            this._tweensAddedDuringUpdate = {};

            for (var i = 0; i < tweenIds.length; i++) {
              var tween = this._tweens[tweenIds[i]];

              if (tween && tween.update(time) === false) {
                tween._isPlaying = false;

                if (!preserve) {
                  delete this._tweens[tweenIds[i]];
                }
              }
            }

            tweenIds = Object.keys(this._tweensAddedDuringUpdate);
          }

          return true;
        }
      };
      var TWEEN = new _Group();
      TWEEN.Group = _Group;
      TWEEN._nextId = 0;

      TWEEN.nextId = function () {
        return TWEEN._nextId++;
      }; // Include a performance.now polyfill.
      // In node.js, use process.hrtime.


      if (typeof self === 'undefined' && typeof process !== 'undefined' && process.hrtime) {
        TWEEN.now = function () {
          var time = process.hrtime(); // Convert [seconds, nanoseconds] to milliseconds.

          return time[0] * 1000 + time[1] / 1000000;
        };
      } // In a browser, use self.performance.now if it is available.
      else if (typeof self !== 'undefined' && self.performance !== undefined && self.performance.now !== undefined) {
          // This must be bound, because directly assigning this function
          // leads to an invocation exception in Chrome.
          TWEEN.now = self.performance.now.bind(self.performance);
        } // Use Date.now if it is available.
        else if (Date.now !== undefined) {
            TWEEN.now = Date.now;
          } // Otherwise, use 'new Date().getTime()'.
          else {
              TWEEN.now = function () {
                return new Date().getTime();
              };
            }

      TWEEN.Tween = function (object, group) {
        this._object = object;
        this._valuesStart = {};
        this._valuesEnd = {};
        this._valuesStartRepeat = {};
        this._duration = 1000;
        this._repeat = 0;
        this._repeatDelayTime = undefined;
        this._yoyo = false;
        this._isPlaying = false;
        this._reversed = false;
        this._delayTime = 0;
        this._startTime = null;
        this._easingFunction = TWEEN.Easing.Linear.None;
        this._interpolationFunction = TWEEN.Interpolation.Linear;
        this._chainedTweens = [];
        this._onStartCallback = null;
        this._onStartCallbackFired = false;
        this._onUpdateCallback = null;
        this._onRepeatCallback = null;
        this._onCompleteCallback = null;
        this._onStopCallback = null;
        this._group = group || TWEEN;
        this._id = TWEEN.nextId();
      };

      TWEEN.Tween.prototype = {
        getId: function getId() {
          return this._id;
        },
        isPlaying: function isPlaying() {
          return this._isPlaying;
        },
        to: function to(properties, duration) {
          this._valuesEnd = properties;

          if (duration !== undefined) {
            this._duration = duration;
          }

          return this;
        },
        duration: function duration(d) {
          this._duration = d;
          return this;
        },
        start: function start(time) {
          this._group.add(this);

          this._isPlaying = true;
          this._onStartCallbackFired = false;
          this._startTime = time !== undefined ? typeof time === 'string' ? TWEEN.now() + parseFloat(time) : time : TWEEN.now();
          this._startTime += this._delayTime;

          for (var property in this._valuesEnd) {
            // Check if an Array was provided as property value
            if (this._valuesEnd[property] instanceof Array) {
              if (this._valuesEnd[property].length === 0) {
                continue;
              } // Create a local copy of the Array with the start value at the front


              this._valuesEnd[property] = [this._object[property]].concat(this._valuesEnd[property]);
            } // If `to()` specifies a property that doesn't exist in the source object,
            // we should not set that property in the object


            if (this._object[property] === undefined) {
              continue;
            } // Save the starting value.


            this._valuesStart[property] = this._object[property];

            if (this._valuesStart[property] instanceof Array === false) {
              this._valuesStart[property] *= 1.0; // Ensures we're using numbers, not strings
            }

            this._valuesStartRepeat[property] = this._valuesStart[property] || 0;
          }

          return this;
        },
        stop: function stop() {
          if (!this._isPlaying) {
            return this;
          }

          this._group.remove(this);

          this._isPlaying = false;

          if (this._onStopCallback !== null) {
            this._onStopCallback(this._object);
          }

          this.stopChainedTweens();
          return this;
        },
        end: function end() {
          this.update(Infinity);
          return this;
        },
        stopChainedTweens: function stopChainedTweens() {
          for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {
            this._chainedTweens[i].stop();
          }
        },
        group: function group(_group2) {
          this._group = _group2;
          return this;
        },
        delay: function delay(amount) {
          this._delayTime = amount;
          return this;
        },
        repeat: function repeat(times) {
          this._repeat = times;
          return this;
        },
        repeatDelay: function repeatDelay(amount) {
          this._repeatDelayTime = amount;
          return this;
        },
        yoyo: function yoyo(_yoyo) {
          this._yoyo = _yoyo;
          return this;
        },
        easing: function easing(easingFunction) {
          this._easingFunction = easingFunction;
          return this;
        },
        interpolation: function interpolation(interpolationFunction) {
          this._interpolationFunction = interpolationFunction;
          return this;
        },
        chain: function chain() {
          this._chainedTweens = arguments;
          return this;
        },
        onStart: function onStart(callback) {
          this._onStartCallback = callback;
          return this;
        },
        onUpdate: function onUpdate(callback) {
          this._onUpdateCallback = callback;
          return this;
        },
        onRepeat: function onRepeat(callback) {
          this._onRepeatCallback = callback;
          return this;
        },
        onComplete: function onComplete(callback) {
          this._onCompleteCallback = callback;
          return this;
        },
        onStop: function onStop(callback) {
          this._onStopCallback = callback;
          return this;
        },
        update: function update(time) {
          var property;
          var elapsed;
          var value;

          if (time < this._startTime) {
            return true;
          }

          if (this._onStartCallbackFired === false) {
            if (this._onStartCallback !== null) {
              this._onStartCallback(this._object);
            }

            this._onStartCallbackFired = true;
          }

          elapsed = (time - this._startTime) / this._duration;
          elapsed = this._duration === 0 || elapsed > 1 ? 1 : elapsed;
          value = this._easingFunction(elapsed);

          for (property in this._valuesEnd) {
            // Don't update properties that do not exist in the source object
            if (this._valuesStart[property] === undefined) {
              continue;
            }

            var start = this._valuesStart[property] || 0;
            var end = this._valuesEnd[property];

            if (end instanceof Array) {
              this._object[property] = this._interpolationFunction(end, value);
            } else {
              // Parses relative end values with start as base (e.g.: +10, -3)
              if (typeof end === 'string') {
                if (end.charAt(0) === '+' || end.charAt(0) === '-') {
                  end = start + parseFloat(end);
                } else {
                  end = parseFloat(end);
                }
              } // Protect against non numeric properties.


              if (typeof end === 'number') {
                this._object[property] = start + (end - start) * value;
              }
            }
          }

          if (this._onUpdateCallback !== null) {
            this._onUpdateCallback(this._object, elapsed);
          }

          if (elapsed === 1) {
            if (this._repeat > 0) {
              if (isFinite(this._repeat)) {
                this._repeat--;
              } // Reassign starting values, restart by making startTime = now


              for (property in this._valuesStartRepeat) {
                if (typeof this._valuesEnd[property] === 'string') {
                  this._valuesStartRepeat[property] = this._valuesStartRepeat[property] + parseFloat(this._valuesEnd[property]);
                }

                if (this._yoyo) {
                  var tmp = this._valuesStartRepeat[property];
                  this._valuesStartRepeat[property] = this._valuesEnd[property];
                  this._valuesEnd[property] = tmp;
                }

                this._valuesStart[property] = this._valuesStartRepeat[property];
              }

              if (this._yoyo) {
                this._reversed = !this._reversed;
              }

              if (this._repeatDelayTime !== undefined) {
                this._startTime = time + this._repeatDelayTime;
              } else {
                this._startTime = time + this._delayTime;
              }

              if (this._onRepeatCallback !== null) {
                this._onRepeatCallback(this._object);
              }

              return true;
            } else {
              if (this._onCompleteCallback !== null) {
                this._onCompleteCallback(this._object);
              }

              for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {
                // Make the chained tweens start exactly at the time they should,
                // even if the `update()` method was called way past the duration of the tween
                this._chainedTweens[i].start(this._startTime + this._duration);
              }

              return false;
            }
          }

          return true;
        }
      };
      TWEEN.Easing = {
        Linear: {
          None: function None(k) {
            return k;
          }
        },
        Quadratic: {
          In: function In(k) {
            return k * k;
          },
          Out: function Out(k) {
            return k * (2 - k);
          },
          InOut: function InOut(k) {
            if ((k *= 2) < 1) {
              return 0.5 * k * k;
            }

            return -0.5 * (--k * (k - 2) - 1);
          }
        },
        Cubic: {
          In: function In(k) {
            return k * k * k;
          },
          Out: function Out(k) {
            return --k * k * k + 1;
          },
          InOut: function InOut(k) {
            if ((k *= 2) < 1) {
              return 0.5 * k * k * k;
            }

            return 0.5 * ((k -= 2) * k * k + 2);
          }
        },
        Quartic: {
          In: function In(k) {
            return k * k * k * k;
          },
          Out: function Out(k) {
            return 1 - --k * k * k * k;
          },
          InOut: function InOut(k) {
            if ((k *= 2) < 1) {
              return 0.5 * k * k * k * k;
            }

            return -0.5 * ((k -= 2) * k * k * k - 2);
          }
        },
        Quintic: {
          In: function In(k) {
            return k * k * k * k * k;
          },
          Out: function Out(k) {
            return --k * k * k * k * k + 1;
          },
          InOut: function InOut(k) {
            if ((k *= 2) < 1) {
              return 0.5 * k * k * k * k * k;
            }

            return 0.5 * ((k -= 2) * k * k * k * k + 2);
          }
        },
        Sinusoidal: {
          In: function In(k) {
            return 1 - Math.cos(k * Math.PI / 2);
          },
          Out: function Out(k) {
            return Math.sin(k * Math.PI / 2);
          },
          InOut: function InOut(k) {
            return 0.5 * (1 - Math.cos(Math.PI * k));
          }
        },
        Exponential: {
          In: function In(k) {
            return k === 0 ? 0 : Math.pow(1024, k - 1);
          },
          Out: function Out(k) {
            return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);
          },
          InOut: function InOut(k) {
            if (k === 0) {
              return 0;
            }

            if (k === 1) {
              return 1;
            }

            if ((k *= 2) < 1) {
              return 0.5 * Math.pow(1024, k - 1);
            }

            return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);
          }
        },
        Circular: {
          In: function In(k) {
            return 1 - Math.sqrt(1 - k * k);
          },
          Out: function Out(k) {
            return Math.sqrt(1 - --k * k);
          },
          InOut: function InOut(k) {
            if ((k *= 2) < 1) {
              return -0.5 * (Math.sqrt(1 - k * k) - 1);
            }

            return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);
          }
        },
        Elastic: {
          In: function In(k) {
            if (k === 0) {
              return 0;
            }

            if (k === 1) {
              return 1;
            }

            return -Math.pow(2, 10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI);
          },
          Out: function Out(k) {
            if (k === 0) {
              return 0;
            }

            if (k === 1) {
              return 1;
            }

            return Math.pow(2, -10 * k) * Math.sin((k - 0.1) * 5 * Math.PI) + 1;
          },
          InOut: function InOut(k) {
            if (k === 0) {
              return 0;
            }

            if (k === 1) {
              return 1;
            }

            k *= 2;

            if (k < 1) {
              return -0.5 * Math.pow(2, 10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI);
            }

            return 0.5 * Math.pow(2, -10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI) + 1;
          }
        },
        Back: {
          In: function In(k) {
            var s = 1.70158;
            return k * k * ((s + 1) * k - s);
          },
          Out: function Out(k) {
            var s = 1.70158;
            return --k * k * ((s + 1) * k + s) + 1;
          },
          InOut: function InOut(k) {
            var s = 1.70158 * 1.525;

            if ((k *= 2) < 1) {
              return 0.5 * (k * k * ((s + 1) * k - s));
            }

            return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);
          }
        },
        Bounce: {
          In: function In(k) {
            return 1 - TWEEN.Easing.Bounce.Out(1 - k);
          },
          Out: function Out(k) {
            if (k < 1 / 2.75) {
              return 7.5625 * k * k;
            } else if (k < 2 / 2.75) {
              return 7.5625 * (k -= 1.5 / 2.75) * k + 0.75;
            } else if (k < 2.5 / 2.75) {
              return 7.5625 * (k -= 2.25 / 2.75) * k + 0.9375;
            } else {
              return 7.5625 * (k -= 2.625 / 2.75) * k + 0.984375;
            }
          },
          InOut: function InOut(k) {
            if (k < 0.5) {
              return TWEEN.Easing.Bounce.In(k * 2) * 0.5;
            }

            return TWEEN.Easing.Bounce.Out(k * 2 - 1) * 0.5 + 0.5;
          }
        }
      };
      TWEEN.Interpolation = {
        Linear: function Linear(v, k) {
          var m = v.length - 1;
          var f = m * k;
          var i = Math.floor(f);
          var fn = TWEEN.Interpolation.Utils.Linear;

          if (k < 0) {
            return fn(v[0], v[1], f);
          }

          if (k > 1) {
            return fn(v[m], v[m - 1], m - f);
          }

          return fn(v[i], v[i + 1 > m ? m : i + 1], f - i);
        },
        Bezier: function Bezier(v, k) {
          var b = 0;
          var n = v.length - 1;
          var pw = Math.pow;
          var bn = TWEEN.Interpolation.Utils.Bernstein;

          for (var i = 0; i <= n; i++) {
            b += pw(1 - k, n - i) * pw(k, i) * v[i] * bn(n, i);
          }

          return b;
        },
        CatmullRom: function CatmullRom(v, k) {
          var m = v.length - 1;
          var f = m * k;
          var i = Math.floor(f);
          var fn = TWEEN.Interpolation.Utils.CatmullRom;

          if (v[0] === v[m]) {
            if (k < 0) {
              i = Math.floor(f = m * (1 + k));
            }

            return fn(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i);
          } else {
            if (k < 0) {
              return v[0] - (fn(v[0], v[0], v[1], v[1], -f) - v[0]);
            }

            if (k > 1) {
              return v[m] - (fn(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);
            }

            return fn(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i);
          }
        },
        Utils: {
          Linear: function Linear(p0, p1, t) {
            return (p1 - p0) * t + p0;
          },
          Bernstein: function Bernstein(n, i) {
            var fc = TWEEN.Interpolation.Utils.Factorial;
            return fc(n) / fc(i) / fc(n - i);
          },
          Factorial: function () {
            var a = [1];
            return function (n) {
              var s = 1;

              if (a[n]) {
                return a[n];
              }

              for (var i = n; i > 1; i--) {
                s *= i;
              }

              a[n] = s;
              return s;
            };
          }(),
          CatmullRom: function CatmullRom(p0, p1, p2, p3, t) {
            var v0 = (p2 - p0) * 0.5;
            var v1 = (p3 - p1) * 0.5;
            var t2 = t * t;
            var t3 = t * t2;
            return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;
          }
        }
      }; // UMD (Universal Module Definition)

      (function (root) {
        if (true) {
          // AMD
          !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () {
            return TWEEN;
          }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
        } else {}
      })(this);
      /***/

    },

    /***/
    "aGrj":
    /*!**********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/switchMapTo.js ***!
      \**********************************************************************/

    /*! exports provided: switchMapTo */

    /***/
    function aGrj(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "switchMapTo", function () {
        return switchMapTo;
      });
      /* harmony import */


      var _switchMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./switchMap */
      "eIep");

      function switchMapTo(innerObservable, resultSelector) {
        return resultSelector ? Object(_switchMap__WEBPACK_IMPORTED_MODULE_0__["switchMap"])(function () {
          return innerObservable;
        }, resultSelector) : Object(_switchMap__WEBPACK_IMPORTED_MODULE_0__["switchMap"])(function () {
          return innerObservable;
        });
      } //# sourceMappingURL=switchMapTo.js.map

      /***/

    },

    /***/
    "aIdf":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/br.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function aIdf(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Breton [br]
      //! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        function relativeTimeWithMutation(number, withoutSuffix, key) {
          var format = {
            mm: 'munutenn',
            MM: 'miz',
            dd: 'devezh'
          };
          return number + ' ' + mutation(format[key], number);
        }

        function specialMutationForYears(number) {
          switch (lastNumber(number)) {
            case 1:
            case 3:
            case 4:
            case 5:
            case 9:
              return number + ' bloaz';

            default:
              return number + ' vloaz';
          }
        }

        function lastNumber(number) {
          if (number > 9) {
            return lastNumber(number % 10);
          }

          return number;
        }

        function mutation(text, number) {
          if (number === 2) {
            return softMutation(text);
          }

          return text;
        }

        function softMutation(text) {
          var mutationTable = {
            m: 'v',
            b: 'v',
            d: 'z'
          };

          if (mutationTable[text.charAt(0)] === undefined) {
            return text;
          }

          return mutationTable[text.charAt(0)] + text.substring(1);
        }

        var monthsParse = [/^gen/i, /^c[ʼ\']hwe/i, /^meu/i, /^ebr/i, /^mae/i, /^(mez|eve)/i, /^gou/i, /^eos/i, /^gwe/i, /^her/i, /^du/i, /^ker/i],
            monthsRegex = /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
            monthsStrictRegex = /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,
            monthsShortStrictRegex = /^(gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
            fullWeekdaysParse = [/^sul/i, /^lun/i, /^meurzh/i, /^merc[ʼ\']her/i, /^yaou/i, /^gwener/i, /^sadorn/i],
            shortWeekdaysParse = [/^Sul/i, /^Lun/i, /^Meu/i, /^Mer/i, /^Yao/i, /^Gwe/i, /^Sad/i],
            minWeekdaysParse = [/^Su/i, /^Lu/i, /^Me([^r]|$)/i, /^Mer/i, /^Ya/i, /^Gw/i, /^Sa/i];
        var br = moment.defineLocale('br', {
          months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),
          monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
          weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'),
          weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
          weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
          weekdaysParse: minWeekdaysParse,
          fullWeekdaysParse: fullWeekdaysParse,
          shortWeekdaysParse: shortWeekdaysParse,
          minWeekdaysParse: minWeekdaysParse,
          monthsRegex: monthsRegex,
          monthsShortRegex: monthsRegex,
          monthsStrictRegex: monthsStrictRegex,
          monthsShortStrictRegex: monthsShortStrictRegex,
          monthsParse: monthsParse,
          longMonthsParse: monthsParse,
          shortMonthsParse: monthsParse,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [a viz] MMMM YYYY',
            LLL: 'D [a viz] MMMM YYYY HH:mm',
            LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[Hiziv da] LT',
            nextDay: '[Warcʼhoazh da] LT',
            nextWeek: 'dddd [da] LT',
            lastDay: '[Decʼh da] LT',
            lastWeek: 'dddd [paset da] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'a-benn %s',
            past: '%s ʼzo',
            s: 'un nebeud segondennoù',
            ss: '%d eilenn',
            m: 'ur vunutenn',
            mm: relativeTimeWithMutation,
            h: 'un eur',
            hh: '%d eur',
            d: 'un devezh',
            dd: relativeTimeWithMutation,
            M: 'ur miz',
            MM: relativeTimeWithMutation,
            y: 'ur bloaz',
            yy: specialMutationForYears
          },
          dayOfMonthOrdinalParse: /\d{1,2}(añ|vet)/,
          ordinal: function ordinal(number) {
            var output = number === 1 ? 'añ' : 'vet';
            return number + output;
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          },
          meridiemParse: /a.m.|g.m./,
          // goude merenn | a-raok merenn
          isPM: function isPM(token) {
            return token === 'g.m.';
          },
          meridiem: function meridiem(hour, minute, isLower) {
            return hour < 12 ? 'a.m.' : 'g.m.';
          }
        });
        return br;
      });
      /***/

    },

    /***/
    "aIsn":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/mi.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function aIsn(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Maori [mi]
      //! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var mi = moment.defineLocale('mi', {
          months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),
          monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),
          monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
          monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
          monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
          monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,
          weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),
          weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
          weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [i] HH:mm',
            LLLL: 'dddd, D MMMM YYYY [i] HH:mm'
          },
          calendar: {
            sameDay: '[i teie mahana, i] LT',
            nextDay: '[apopo i] LT',
            nextWeek: 'dddd [i] LT',
            lastDay: '[inanahi i] LT',
            lastWeek: 'dddd [whakamutunga i] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'i roto i %s',
            past: '%s i mua',
            s: 'te hēkona ruarua',
            ss: '%d hēkona',
            m: 'he meneti',
            mm: '%d meneti',
            h: 'te haora',
            hh: '%d haora',
            d: 'he ra',
            dd: '%d ra',
            M: 'he marama',
            MM: '%d marama',
            y: 'he tau',
            yy: '%d tau'
          },
          dayOfMonthOrdinalParse: /\d{1,2}º/,
          ordinal: '%dº',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return mi;
      });
      /***/

    },

    /***/
    "aQkU":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/mk.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function aQkU(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Macedonian [mk]
      //! author : Borislav Mickov : https://github.com/B0k0
      //! author : Sashko Todorov : https://github.com/bkyceh
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var mk = moment.defineLocale('mk', {
          months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),
          monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),
          weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),
          weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'),
          weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'),
          longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'D.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY H:mm',
            LLLL: 'dddd, D MMMM YYYY H:mm'
          },
          calendar: {
            sameDay: '[Денес во] LT',
            nextDay: '[Утре во] LT',
            nextWeek: '[Во] dddd [во] LT',
            lastDay: '[Вчера во] LT',
            lastWeek: function lastWeek() {
              switch (this.day()) {
                case 0:
                case 3:
                case 6:
                  return '[Изминатата] dddd [во] LT';

                case 1:
                case 2:
                case 4:
                case 5:
                  return '[Изминатиот] dddd [во] LT';
              }
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: 'за %s',
            past: 'пред %s',
            s: 'неколку секунди',
            ss: '%d секунди',
            m: 'една минута',
            mm: '%d минути',
            h: 'еден час',
            hh: '%d часа',
            d: 'еден ден',
            dd: '%d дена',
            M: 'еден месец',
            MM: '%d месеци',
            y: 'една година',
            yy: '%d години'
          },
          dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
          ordinal: function ordinal(number) {
            var lastDigit = number % 10,
                last2Digits = number % 100;

            if (number === 0) {
              return number + '-ев';
            } else if (last2Digits === 0) {
              return number + '-ен';
            } else if (last2Digits > 10 && last2Digits < 20) {
              return number + '-ти';
            } else if (lastDigit === 1) {
              return number + '-ви';
            } else if (lastDigit === 2) {
              return number + '-ри';
            } else if (lastDigit === 7 || lastDigit === 8) {
              return number + '-ми';
            } else {
              return number + '-ти';
            }
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return mk;
      });
      /***/

    },

    /***/
    "b1Dy":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/en-nz.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function b1Dy(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : English (New Zealand) [en-nz]
      //! author : Luke McGregor : https://github.com/lukemcgregor
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var enNz = moment.defineLocale('en-nz', {
          months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
          monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
          weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
          weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
          weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
          longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A'
          },
          calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
          ordinal: function ordinal(number) {
            var b = number % 10,
                output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';
            return number + output;
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return enNz;
      });
      /***/

    },

    /***/
    "bHdf":
    /*!*******************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/mergeAll.js ***!
      \*******************************************************************/

    /*! exports provided: mergeAll */

    /***/
    function bHdf(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "mergeAll", function () {
        return mergeAll;
      });
      /* harmony import */


      var _mergeMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./mergeMap */
      "5+tZ");
      /* harmony import */


      var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/identity */
      "SpAZ");

      function mergeAll() {
        var concurrent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number.POSITIVE_INFINITY;
        return Object(_mergeMap__WEBPACK_IMPORTED_MODULE_0__["mergeMap"])(_util_identity__WEBPACK_IMPORTED_MODULE_1__["identity"], concurrent);
      } //# sourceMappingURL=mergeAll.js.map

      /***/

    },

    /***/
    "bNI1":
    /*!**************************************************************!*\
      !*** ./node_modules/moment-timezone/data/packed/latest.json ***!
      \**************************************************************/

    /*! exports provided: version, zones, links, countries, default */

    /***/
    function bNI1(module) {
      module.exports = JSON.parse("{\"version\":\"2021a\",\"zones\":[\"Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5\",\"Africa/Accra|LMT GMT +0020 +0030|.Q 0 -k -u|01212121212121212121212121212121212121212121212131313131313131|-2bRzX.8 9RbX.8 fdE 1BAk MLE 1Bck MLE 1Bck MLE 1Bck MLE 1BAk MLE 1Bck MLE 1Bck MLE 1Bck MLE 1BAk MLE 1Bck MLE 1Bck MLE 1Bck MLE 1BAk MLE 1Bck MLE 1Bck MLE 1Bck MLE 1BAk MLE 1Bck MLE 1Bck MLE 1Bck MLE Mok 1BXE M0k 1BXE fak 9vbu bjCu MLu 1Bcu MLu 1BAu MLu 1Bcu MLu 1Bcu MLu 1Bcu MLu|41e5\",\"Africa/Nairobi|LMT +0230 EAT +0245|-2r.g -2u -30 -2J|012132|-2ua2r.g N6nV.g 3Fbu h1cu dzbJ|47e5\",\"Africa/Algiers|PMT WET WEST CET CEST|-9.l 0 -10 -10 -20|0121212121212121343431312123431213|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5\",\"Africa/Lagos|LMT GMT +0030 WAT|-d.z 0 -u -10|01023|-2B40d.z 7iod.z dnXK.p dLzH.z|17e6\",\"Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldX0 2xoo0|39e4\",\"Africa/Maputo|LMT CAT|-2a.k -20|01|-2GJea.k|26e5\",\"Africa/Cairo|EET EEST|-20 -30|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1bIO0 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0|15e6\",\"Africa/Casablanca|LMT +00 +01|u.k 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0|32e5\",\"Africa/Ceuta|WET WEST CET CEST|0 -10 -10 -20|010101010101010101010232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-25KN0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|85e3\",\"Africa/El_Aaiun|LMT -01 +00 +01|Q.M 10 0 -10|012323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0|20e4\",\"Africa/Johannesburg|SAST SAST SAST|-1u -20 -30|012121|-2GJdu 1Ajdu 1cL0 1cN0 1cL0|84e5\",\"Africa/Juba|LMT CAT CAST EAT|-26.s -20 -30 -30|012121212121212121212121212121212131|-1yW26.s 1zK06.s 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 PeX0|\",\"Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|012121212121212121212121212121212131|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 HjL0|51e5\",\"Africa/Monrovia|MMT MMT GMT|H.8 I.u 0|012|-23Lzg.Q 28G01.m|11e5\",\"Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5\",\"Africa/Sao_Tome|LMT GMT WAT|A.J 0 -10|0121|-2le00 4i6N0 2q00|\",\"Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5\",\"Africa/Tunis|PMT CET CEST|-9.l -10 -20|0121212121212121212121212121212121|-2nco9.l 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5\",\"Africa/Windhoek|+0130 SAST SAST CAT WAT|-1u -20 -30 -20 -10|01213434343434343434343434343434343434343434343434343|-2GJdu 1Ajdu 1cL0 1SqL0 9Io0 16P0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4\",\"America/Adak|NST NWT NPT BST BDT AHST HST HDT|b0 a0 a0 b0 a0 a0 a0 90|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326\",\"America/Anchorage|AST AWT APT AHST AHDT YST AKST AKDT|a0 90 90 a0 90 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T00 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4\",\"America/Port_of_Spain|LMT AST|46.4 40|01|-2kNvR.U|43e3\",\"America/Araguaina|LMT -03 -02|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4\",\"America/Argentina/Buenos_Aires|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0|\",\"America/Argentina/Catamarca|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323132321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0|\",\"America/Argentina/Cordoba|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323132323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0|\",\"America/Argentina/Jujuy|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323121323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0|\",\"America/Argentina/La_Rioja|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|\",\"America/Argentina/Mendoza|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232312121321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0|\",\"America/Argentina/Rio_Gallegos|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|\",\"America/Argentina/Salta|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0|\",\"America/Argentina/San_Juan|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0|\",\"America/Argentina/San_Luis|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323121212321212|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0|\",\"America/Argentina/Tucuman|CMT -04 -03 -02|4g.M 40 30 20|0121212121212121212121212121212121212121212323232313232123232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0|\",\"America/Argentina/Ushuaia|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0|\",\"America/Curacao|LMT -0430 AST|4z.L 4u 40|012|-2kV7o.d 28KLS.d|15e4\",\"America/Asuncion|AMT -04 -03|3O.E 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-1x589.k 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0|28e5\",\"America/Atikokan|CST CDT CWT CPT EST|60 50 50 50 50|0101234|-25TQ0 1in0 Rnb0 3je0 8x30 iw0|28e2\",\"America/Bahia_Banderas|LMT MST CST PST MDT CDT|71 70 60 80 60 50|0121212131414141414141414141414141414152525252525252525252525252525252525252525252525252525252|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|84e3\",\"America/Bahia|LMT -03 -02|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5\",\"America/Barbados|LMT BMT AST ADT|3W.t 3W.t 40 30|01232323232|-1Q0I1.v jsM0 1ODC1.v IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4\",\"America/Belem|LMT -03 -02|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5\",\"America/Belize|LMT CST -0530 CWT CPT CDT|5Q.M 60 5u 50 50 50|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121215151|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu Rcu 7Bt0 Ni0 4nd0 Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu e9Au qn0 lxB0 mn0|57e3\",\"America/Blanc-Sablon|AST ADT AWT APT|40 30 30 30|010230|-25TS0 1in0 UGp0 8x50 iu0|11e2\",\"America/Boa_Vista|LMT -04 -03|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2\",\"America/Bogota|BMT -05 -04|4U.g 50 40|0121|-2eb73.I 38yo3.I 2en0|90e5\",\"America/Boise|PST PDT MST MWT MPT MDT|80 70 70 60 60 60|0101023425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-261q0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4\",\"America/Cambridge_Bay|-00 MST MWT MPT MDDT MDT CST CDT EST|0 70 60 60 50 60 60 50 50|0123141515151515151515151515151515151515151515678651515151515151515151515151515151515151515151515151515151515151515151515151|-21Jc0 RO90 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2\",\"America/Campo_Grande|LMT -04 -03|3C.s 40 30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4\",\"America/Cancun|LMT CST EST EDT CDT|5L.4 60 50 40 50|0123232341414141414141414141414141414141412|-1UQG0 2q2o0 yLB0 1lb0 14p0 1lb0 14p0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4\",\"America/Caracas|CMT -0430 -04|4r.E 4u 40|01212|-2kV7w.k 28KM2.k 1IwOu kqo0|29e5\",\"America/Cayenne|LMT -04 -03|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3\",\"America/Panama|CMT EST|5j.A 50|01|-2uduE.o|15e5\",\"America/Chicago|CST CDT EST CWT CPT|60 50 50 50 50|01010101010101010101010101010101010102010101010103401010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5\",\"America/Chihuahua|LMT MST CST CDT MDT|74.k 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|81e4\",\"America/Costa_Rica|SJMT CST CDT|5A.d 60 50|0121212121|-1Xd6n.L 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5\",\"America/Creston|MST PST|70 80|010|-29DR0 43B0|53e2\",\"America/Cuiaba|LMT -04 -03|3I.k 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|54e4\",\"America/Danmarkshavn|LMT -03 -02 GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8\",\"America/Dawson_Creek|PST PDT PWT PPT MST|80 70 70 70 70|0102301010101010101010101010101010101010101010101010101014|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3\",\"America/Dawson|YST YDT YWT YPT YDDT PST PDT MST|90 80 80 80 70 80 70 70|010102304056565656565656565656565656565656565656565656565656565656565656565656565656565656567|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|13e2\",\"America/Denver|MST MDT MWT MPT|70 60 60 60|01010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5\",\"America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|0123425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 JxX1 SMX 1cN0 1cL0 aW10 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5\",\"America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|0121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 XQp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5\",\"America/Eirunepe|LMT -05 -04|4D.s 50 40|0121212121212121212121212121212121|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3\",\"America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5\",\"America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQE0 4PX0 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOO0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5\",\"America/Fort_Nelson|PST PDT PWT PPT MST|80 70 70 70 70|01023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010104|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2\",\"America/Fort_Wayne|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010101023010101010101010101040454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Fortaleza|LMT -03 -02|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5\",\"America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3\",\"America/Godthab|LMT -03 -02|3q.U 30 20|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e3\",\"America/Goose_Bay|NST NDT NST NDT NWT NPT AST ADT ADDT|3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|010232323232323245232323232323232323232323232323232323232326767676767676767676767676767676767676767676768676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-25TSt.8 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2\",\"America/Grand_Turk|KMT EST EDT AST|57.a 50 40 40|0121212121212121212121212121212121212121212121212121212121212121212121212132121212121212121212121212121212121212121|-2l1uQ.O 2HHBQ.O 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 7jA0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2\",\"America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5\",\"America/Guayaquil|QMT -05 -04|5e 50 40|0121|-1yVSK 2uILK rz0|27e5\",\"America/Guyana|LMT -0345 -03 -04|3Q.E 3J 30 40|0123|-2dvU7.k 2r6LQ.k Bxbf|80e4\",\"America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4\",\"America/Havana|HMT CST CDT|5t.A 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Meuu.o 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5\",\"America/Hermosillo|LMT MST CST PST MDT|7n.Q 70 60 80 60|0121212131414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0|64e4\",\"America/Indiana/Knox|CST CDT CWT CPT EST|60 50 50 50 50|0101023010101010101010101010101010101040101010101010101010101010101010101010101010101010141010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Marengo|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010104545454545414545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Petersburg|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010104010101010101010101010141014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Tell_City|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010401054541010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 8wn0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Vevay|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010102304545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Vincennes|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Winamac|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010101010454541054545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Inuvik|-00 PST PDDT MST MDT|0 80 60 70 60|0121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-FnA0 tWU0 1fA0 wPe0 2pz0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2\",\"America/Iqaluit|-00 EWT EPT EST EDDT EDT CST CDT|0 40 40 50 30 40 60 50|01234353535353535353535353535353535353535353567353535353535353535353535353535353535353535353535353535353535353535353535353|-16K00 7nX0 iv0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2\",\"America/Jamaica|KMT EST EDT|57.a 50 40|0121212121212121212121|-2l1uQ.O 2uM1Q.O 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4\",\"America/Juneau|PST PWT PPT PDT YDT YST AKST AKDT|80 70 70 70 80 90 90 80|01203030303030303030303030403030356767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3\",\"America/Kentucky/Louisville|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101010102301010101010101010101010101454545454545414545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 1nX1 e0X 9vd0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Kentucky/Monticello|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/La_Paz|CMT BST -04|4w.A 3w.A 40|012|-1x37r.o 13b0|19e5\",\"America/Lima|LMT -05 -04|58.A 50 40|0121212121212121|-2tyGP.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6\",\"America/Los_Angeles|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6\",\"America/Maceio|LMT -03 -02|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4\",\"America/Managua|MMT CST EST CDT|5J.c 60 50 50|0121313121213131|-1quie.M 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5\",\"America/Manaus|LMT -04 -03|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5\",\"America/Martinique|FFMT AST ADT|44.k 40 30|0121|-2mPTT.E 2LPbT.E 19X0|39e4\",\"America/Matamoros|LMT CST CDT|6E 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4\",\"America/Mazatlan|LMT MST CST PST MDT|75.E 70 60 80 60|0121212131414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|44e4\",\"America/Menominee|CST CDT CWT CPT EST|60 50 50 50 50|01010230101041010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2\",\"America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQG0 2q2o0 2hz0 wu30 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|11e5\",\"America/Metlakatla|PST PWT PPT PDT AKST AKDT|80 70 70 70 90 80|01203030303030303030303030303030304545450454545454545454545454545454545454545454|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2\",\"America/Mexico_City|LMT MST CST CDT CWT|6A.A 70 60 50 50|012121232324232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|20e6\",\"America/Miquelon|LMT AST -03 -02|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mKkf.k 2LTAf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2\",\"America/Moncton|EST AST ADT AWT APT|50 40 30 30 30|012121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsH0 CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3\",\"America/Monterrey|LMT CST CDT|6F.g 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|41e5\",\"America/Montevideo|LMT MMT -04 -03 -0330 -0230 -02 -0130|3I.P 3I.P 40 30 3u 2u 20 1u|012343434343434343434343435353636353636375363636363636363636363636363636363636363636363|-2tRUf.9 sVc0 8jcf.9 1db0 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1fAu 1cLu 1o0u 11zu NAu 3jXu zXu Dq0u 19Xu pcu jz0 cm10 19X0 6tB0 1fbu 3o0u jX0 4vB0 xz0 3Cp0 mmu 1a10 IMu Db0 4c10 uL0 1Nd0 An0 1SN0 uL0 mp0 28L0 iPB0 un0 1SN0 xz0 1zd0 Lz0 1zd0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5\",\"America/Toronto|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101012301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1nX0 11z0 1o10 11z0 1o10 1qL0 11D0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5\",\"America/Nassau|LMT EST EWT EPT EDT|59.u 50 40 40 40|01212314141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-2kNuO.u 1drbO.u 6tX0 cp0 1hS0 pF0 J630 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|24e4\",\"America/New_York|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6\",\"America/Nipigon|EST EDT EWT EPT|50 40 40 40|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 Rnb0 3je0 8x40 iv0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|16e2\",\"America/Nome|NST NWT NPT BST BDT YST AKST AKDT|b0 a0 a0 b0 a0 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2\",\"America/Noronha|LMT -02 -01|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2\",\"America/North_Dakota/Beulah|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/North_Dakota/Center|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/North_Dakota/New_Salem|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Ojinaga|LMT MST CST CDT MDT|6V.E 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3\",\"America/Pangnirtung|-00 AST AWT APT ADDT ADT EDT EST CST CDT|0 40 30 30 20 30 40 50 60 50|012314151515151515151515151515151515167676767689767676767676767676767676767676767676767676767676767676767676767676767676767|-1XiM0 PnG0 8x50 iu0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1o00 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2\",\"America/Paramaribo|LMT PMT PMT -0330 -03|3E.E 3E.Q 3E.A 3u 30|01234|-2nDUj.k Wqo0.c qanX.I 1yVXN.o|24e4\",\"America/Phoenix|MST MDT MWT|70 60 60|01010202010|-261r0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5\",\"America/Port-au-Prince|PPMT EST EDT|4N 50 40|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-28RHb 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5\",\"America/Rio_Branco|LMT -05 -04|4v.c 50 40|01212121212121212121212121212121|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4\",\"America/Porto_Velho|LMT -04 -03|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4\",\"America/Puerto_Rico|AST AWT APT|40 30 30|0120|-17lU0 7XT0 iu0|24e5\",\"America/Punta_Arenas|SMT -05 -04 -03|4G.K 50 40 30|0102021212121212121232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-2q2jh.e fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|\",\"America/Rainy_River|CST CDT CWT CPT|60 50 50 50|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TQ0 1in0 Rnb0 3je0 8x30 iw0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|842\",\"America/Rankin_Inlet|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313131313131313131313131313131313131313131313131313131313131313131|-vDc0 keu0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2\",\"America/Recife|LMT -03 -02|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5\",\"America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4\",\"America/Resolute|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313431313131313131313131313131313131313131313131313131313131313131|-SnA0 GWS0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229\",\"America/Santarem|LMT -04 -03|3C.M 40 30|0121212121212121212121212121212|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4\",\"America/Santiago|SMT -05 -04 -03|4G.K 50 40 30|010202121212121212321232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-2q2jh.e fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 jb0 1oN0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0|62e5\",\"America/Santo_Domingo|SDMT EST EDT -0430 AST|4E 50 40 4u 40|01213131313131414|-1ttjk 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5\",\"America/Sao_Paulo|LMT -03 -02|36.s 30 20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6\",\"America/Scoresbysund|LMT -02 -01 +00|1r.Q 20 10 0|0121323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|452\",\"America/Sitka|PST PWT PPT PDT YST AKST AKDT|80 70 70 70 90 90 80|01203030303030303030303030303030345656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2\",\"America/St_Johns|NST NDT NST NDT NWT NPT NDDT|3u.Q 2u.Q 3u 2u 2u 2u 1u|01010101010101010101010101010101010102323232323232324523232323232323232323232323232323232323232323232323232323232323232323232323232323232326232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-28oit.8 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4\",\"America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3\",\"America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5\",\"America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656\",\"America/Thunder_Bay|CST EST EWT EPT EDT|60 50 40 40 40|0123141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-2q5S0 1iaN0 8x40 iv0 XNB0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4\",\"America/Vancouver|PST PDT PWT PPT|80 70 70 70|0102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TO0 1in0 UGp0 8x10 iy0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5\",\"America/Whitehorse|YST YDT YWT YPT YDDT PST PDT MST|90 80 80 80 70 80 70 70|010102304056565656565656565656565656565656565656565656565656565656565656565656565656565656567|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 3NA0 vrd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|23e3\",\"America/Winnipeg|CST CDT CWT CPT|60 50 50 50|010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aIi0 WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4\",\"America/Yakutat|YST YWT YPT YDT AKST AKDT|90 80 80 80 90 80|01203030303030303030303030303030304545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-17T10 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642\",\"America/Yellowknife|-00 MST MWT MPT MDDT MDT|0 70 60 60 50 60|012314151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151|-1pdA0 hix0 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3\",\"Antarctica/Casey|-00 +08 +11|0 -80 -b0|0121212121212|-2q00 1DjS0 T90 40P0 KL0 blz0 3m10 1o30 14k0 1kr0 12l0 1o01|10\",\"Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70\",\"Antarctica/DumontDUrville|-00 +10|0 -a0|0101|-U0o0 cfq0 bFm0|80\",\"Antarctica/Macquarie|AEST AEDT -00|-a0 -b0 0|010201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 1a00 4SK0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 3Co0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|1\",\"Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60\",\"Pacific/Auckland|NZMT NZST NZST NZDT|-bu -cu -c0 -d0|01020202020202020202020202023232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1GCVu Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|14e5\",\"Antarctica/Palmer|-00 -03 -04 -02|0 30 40 20|0121212121213121212121212121212121212121212121212121212121212121212121212121212121|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40\",\"Antarctica/Rothera|-00 -03|0 30|01|gOo0|130\",\"Antarctica/Syowa|-00 +03|0 -30|01|-vs00|20\",\"Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|40\",\"Antarctica/Vostok|-00 +06|0 -60|01|-tjA0|25\",\"Europe/Oslo|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2awM0 Qm0 W6o0 5pf0 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 wJc0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1qM0 WM0 zpc0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e4\",\"Asia/Riyadh|LMT +03|-36.Q -30|01|-TvD6.Q|57e5\",\"Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|012323232323232323232321232323232323232323232323232|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|15e5\",\"Asia/Amman|LMT EET EEST|-2n.I -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e5\",\"Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3\",\"Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4\",\"Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4\",\"Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4\",\"Asia/Atyrau|LMT +03 +05 +06 +04|-3r.I -30 -50 -60 -40|01232323232323232323242323232323232324242424242|-1Pc3r.I eUor.I 24PW0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|\",\"Asia/Baghdad|BMT +03 +04|-2V.A -30 -40|012121212121212121212121212121212121212121212121212121|-26BeV.A 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5\",\"Asia/Qatar|LMT +04 +03|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4\",\"Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5\",\"Asia/Bangkok|BMT +07|-6G.4 -70|01|-218SG.4|15e6\",\"Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|\",\"Asia/Beirut|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-21aq0 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0|22e5\",\"Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4\",\"Asia/Brunei|LMT +0730 +08|-7D.E -7u -80|012|-1KITD.E gDc9.E|42e4\",\"Asia/Kolkata|MMT IST +0630|-5l.a -5u -6u|012121|-2zOtl.a 1r2LP.a 1un0 HB0 7zX0|15e6\",\"Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4\",\"Asia/Choibalsan|LMT +07 +08 +10 +09|-7C -70 -80 -a0 -90|0123434343434343434343434343434343434343434343424242|-2APHC 2UkoC cKn0 1da0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 3Db0 h1f0 1cJ0 1cP0 1cJ0|38e3\",\"Asia/Shanghai|CST CDT|-80 -90|01010101010101010101010101010|-23uw0 18n0 OjB0 Rz0 11d0 1wL0 A10 8HX0 1G10 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 aL0 1tU30 Rb0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6\",\"Asia/Colombo|MMT +0530 +06 +0630|-5j.w -5u -60 -6u|01231321|-2zOtj.w 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5\",\"Asia/Dhaka|HMT +0630 +0530 +06 +07|-5R.k -6u -5u -60 -70|0121343|-18LFR.k 1unn.k HB0 m6n0 2kxbu 1i00|16e6\",\"Asia/Damascus|LMT EET EEST|-2p.c -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|26e5\",\"Asia/Dili|LMT +08 +09|-8m.k -80 -90|01212|-2le8m.k 1dnXm.k 1nfA0 Xld0|19e4\",\"Asia/Dubai|LMT +04|-3F.c -40|01|-21JfF.c|39e5\",\"Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4\",\"Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212312121212121212121212121212121212121212121|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|\",\"Asia/Gaza|EET EEST IST IDT|-20 -30 -20 -30|010101010101010101010101010101010123232323232323232323232323232320101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2o0 MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|18e5\",\"Asia/Hebron|EET EEST IST IDT|-20 -30 -20 -30|01010101010101010101010101010101012323232323232323232323232323232010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2o0 MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|25e4\",\"Asia/Ho_Chi_Minh|LMT PLMT +07 +08 +09|-76.E -76.u -70 -80 -90|0123423232|-2yC76.E bK00.a 1h7b6.u 5lz0 18o0 3Oq0 k5b0 aW00 BAM0|90e5\",\"Asia/Hong_Kong|LMT HKT HKST HKWT JST|-7A.G -80 -90 -8u -90|0123412121212121212121212121212121212121212121212121212121212121212121|-2CFH0 1taO0 Hc0 xUu 9tBu 11z0 1tDu Rc0 1wo0 11A0 1cM0 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5\",\"Asia/Hovd|LMT +06 +07 +08|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3\",\"Asia/Irkutsk|IMT +07 +08 +09|-6V.5 -70 -80 -90|01232323232323232323232123232323232323232323232323232323232323232|-21zGV.5 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4\",\"Europe/Istanbul|IMT EET EEST +03 +04|-1U.U -20 -30 -30 -40|0121212121212121212121212121212121212121212121234312121212121212121212121212121212121212121212121212121212121212123|-2ogNU.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSN0 CL0 mp0 1Vz0 1gN0 8yn0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1ip0 19X0 1ip0 17b0 qdB0 38L0 1jd0 Tz0 l6O0 11A0 WN0 1qL0 TB0 1tX0 U10 1tz0 11B0 1in0 17d0 z90 cne0 pb0 2Cp0 1800 14o0 1dc0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6\",\"Asia/Jakarta|BMT +0720 +0730 +09 +08 WIB|-77.c -7k -7u -90 -80 -70|01232425|-1Q0Tk luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6\",\"Asia/Jayapura|LMT +09 +0930 WIT|-9m.M -90 -9u -90|0123|-1uu9m.M sMMm.M L4nu|26e4\",\"Asia/Jerusalem|JMT IST IDT IDDT|-2k.E -20 -30 -40|01212121212121321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-26Bek.E SyOk.E MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 3LA0 Eo0 oo0 1co0 1dA0 16o0 10M0 1jc0 1tA0 14o0 1cM0 1a00 11A0 1Nc0 Ao0 1Nc0 Ao0 1Ko0 LA0 1o00 WM0 EQK0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0|81e4\",\"Asia/Kabul|+04 +0430|-40 -4u|01|-10Qs0|46e5\",\"Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4\",\"Asia/Karachi|LMT +0530 +0630 +05 PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6\",\"Asia/Urumqi|LMT +06|-5O.k -60|01|-1GgtO.k|32e5\",\"Asia/Kathmandu|LMT +0530 +0545|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5\",\"Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2\",\"Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5\",\"Asia/Kuala_Lumpur|SMT +07 +0720 +0730 +09 +08|-6T.p -70 -7k -7u -90 -80|0123435|-2Bg6T.p 17anT.p l5XE 17bO 8Fyu 1so1u|71e5\",\"Asia/Kuching|LMT +0730 +08 +0820 +09|-7l.k -7u -80 -8k -90|0123232323232323242|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0|13e4\",\"Asia/Macau|LMT CST +09 +10 CDT|-7y.a -80 -90 -a0 -90|012323214141414141414141414141414141414141414141414141414141414141414141|-2CFHy.a 1uqKy.a PX0 1kn0 15B0 11b0 4Qq0 1oM0 11c0 1ko0 1u00 11A0 1cM0 11c0 1o00 11A0 1o00 11A0 1oo0 1400 1o00 11A0 1o00 U00 1tA0 U00 1wo0 Rc0 1wru U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cK0 1cO0 1cK0 1cO0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|57e4\",\"Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3\",\"Asia/Makassar|LMT MMT +08 +09 WITA|-7V.A -7V.A -80 -90 -80|01234|-21JjV.A vfc0 myLV.A 8ML0|15e5\",\"Asia/Manila|PST PDT JST|-80 -90 -90|010201010|-1kJI0 AL0 cK10 65X0 mXB0 vX0 VK10 1db0|24e6\",\"Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|32e4\",\"Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4\",\"Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5\",\"Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5\",\"Asia/Oral|LMT +03 +05 +06 +04|-3p.o -30 -50 -60 -40|01232323232323232424242424242424242424242424242|-1Pc3p.o eUop.o 23CK0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4\",\"Asia/Pontianak|LMT PMT +0730 +09 +08 WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4\",\"Asia/Pyongyang|LMT KST JST KST|-8n -8u -90 -90|012313|-2um8n 97XR 1lTzu 2Onc0 6BA0|29e5\",\"Asia/Qostanay|LMT +04 +05 +06|-4e.s -40 -50 -60|012323232323232323232123232323232323232323232323|-1Pc4e.s eUoe.s 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|\",\"Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|01232323232323232323232323232323232323232323232|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 zQl0|73e4\",\"Asia/Rangoon|RMT +0630 +09|-6o.L -6u -90|0121|-21Jio.L SmnS.L 7j9u|48e5\",\"Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4\",\"Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4\",\"Asia/Seoul|LMT KST JST KST KDT KDT|-8r.Q -8u -90 -90 -a0 -9u|012343434343151515151515134343|-2um8r.Q 97XV.Q 1m1zu 6CM0 Fz0 1kN0 14n0 1kN0 14L0 1zd0 On0 69B0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6\",\"Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2\",\"Asia/Taipei|CST JST CDT|-80 -90 -90|01020202020202020202020202020202020202020|-1iw80 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5\",\"Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5\",\"Asia/Tbilisi|TBMT +03 +04 +05|-2X.b -30 -40 -50|0123232323232323232323212121232323232323232323212|-1Pc2X.b 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5\",\"Asia/Tehran|LMT TMT +0330 +04 +05 +0430|-3p.I -3p.I -3u -40 -50 -4u|01234325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2btDp.I 1d3c0 1huLT.I TXu 1pz0 sN0 vAu 1cL0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0|14e6\",\"Asia/Thimphu|LMT +0530 +06|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3\",\"Asia/Tokyo|JST JDT|-90 -a0|010101010|-QJJ0 Rc0 1lc0 14o0 1zc0 Oo0 1zc0 Oo0|38e6\",\"Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5\",\"Asia/Ulaanbaatar|LMT +07 +08 +09|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5\",\"Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2\",\"Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4\",\"Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4\",\"Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5\",\"Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5\",\"Atlantic/Azores|HMT -02 -01 +00 WET|1S.w 20 10 0 0|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121232323232323232323232323232323234323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2ldW0 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|25e4\",\"Atlantic/Bermuda|BMT BST AST ADT|4j.i 3j.i 40 30|010102323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-28p7E.G 1bb0 1i10 11X0 ru30 thbE.G 1PX0 11B0 1tz0 Rd0 1zb0 Op0 1zb0 3I10 Lz0 1EN0 FX0 1HB0 FX0 1Kp0 Db0 1Kp0 Db0 1Kp0 FX0 93d0 11z0 GAp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3\",\"Atlantic/Canary|LMT -01 WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4\",\"Atlantic/Cape_Verde|LMT -02 -01|1y.4 20 10|01212|-2ldW0 1eEo0 7zX0 1djf0|50e4\",\"Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|49e3\",\"Atlantic/Madeira|FMT -01 +00 +01 WET WEST|17.A 10 0 -10 0 -10|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2ldX0 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e4\",\"Atlantic/Reykjavik|LMT -01 +00 GMT|1s 10 0 0|012121212121212121212121212121212121212121212121212121212121212121213|-2uWmw mfaw 1Bd0 ML0 1LB0 Cn0 1LB0 3fX0 C10 HrX0 1cO0 LB0 1EL0 LA0 1C00 Oo0 1wo0 Rc0 1wo0 Rc0 1wo0 Rc0 1zc0 Oo0 1zc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0|12e4\",\"Atlantic/South_Georgia|-02|20|0||30\",\"Atlantic/Stanley|SMT -04 -03 -02|3P.o 40 30 20|012121212121212323212121212121212121212121212121212121212121212121212|-2kJw8.A 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2\",\"Australia/Sydney|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293k0 xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|40e5\",\"Australia/Adelaide|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293ju xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|11e5\",\"Australia/Brisbane|AEST AEDT|-a0 -b0|01010101010101010|-293k0 xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5\",\"Australia/Broken_Hill|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293ju xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|18e3\",\"Australia/Hobart|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 1a00 1qM0 Oo0 1zc0 Oo0 TAo0 yM0 1cM0 1cM0 1fA0 1a00 VfA0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|21e4\",\"Australia/Darwin|ACST ACDT|-9u -au|010101010|-293ju xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00|12e4\",\"Australia/Eucla|+0845 +0945|-8J -9J|0101010101010101010|-293iJ xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368\",\"Australia/Lord_Howe|AEST +1030 +1130 +11|-a0 -au -bu -b0|0121212121313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313|raC0 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu|347\",\"Australia/Lindeman|AEST AEDT|-a0 -b0|010101010101010101010|-293k0 xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10\",\"Australia/Melbourne|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293k0 xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|39e5\",\"Australia/Perth|AWST AWDT|-80 -90|0101010101010101010|-293i0 xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5\",\"CET|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|\",\"Pacific/Easter|EMT -07 -06 -05|7h.s 70 60 50|012121212121212121212121212123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1uSgG.w 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0|30e2\",\"CST6CDT|CST CDT CWT CPT|60 50 50 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"EET|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|\",\"Europe/Dublin|DMT IST GMT BST IST|p.l -y.D 0 -10 -10|01232323232324242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-2ax9y.D Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g600 14o0 1wo0 17c0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5\",\"EST|EST|50|0||\",\"EST5EDT|EST EDT EWT EPT|50 40 40 40|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 SgN0 8x40 iv0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"Etc/GMT-0|GMT|0|0||\",\"Etc/GMT-1|+01|-10|0||\",\"Pacific/Port_Moresby|+10|-a0|0||25e4\",\"Etc/GMT-11|+11|-b0|0||\",\"Pacific/Tarawa|+12|-c0|0||29e3\",\"Etc/GMT-13|+13|-d0|0||\",\"Etc/GMT-14|+14|-e0|0||\",\"Etc/GMT-2|+02|-20|0||\",\"Etc/GMT-3|+03|-30|0||\",\"Etc/GMT-4|+04|-40|0||\",\"Etc/GMT-5|+05|-50|0||\",\"Etc/GMT-6|+06|-60|0||\",\"Indian/Christmas|+07|-70|0||21e2\",\"Etc/GMT-8|+08|-80|0||\",\"Pacific/Palau|+09|-90|0||21e3\",\"Etc/GMT+1|-01|10|0||\",\"Etc/GMT+10|-10|a0|0||\",\"Etc/GMT+11|-11|b0|0||\",\"Etc/GMT+12|-12|c0|0||\",\"Etc/GMT+3|-03|30|0||\",\"Etc/GMT+4|-04|40|0||\",\"Etc/GMT+5|-05|50|0||\",\"Etc/GMT+6|-06|60|0||\",\"Etc/GMT+7|-07|70|0||\",\"Etc/GMT+8|-08|80|0||\",\"Etc/GMT+9|-09|90|0||\",\"Etc/UTC|UTC|0|0||\",\"Europe/Amsterdam|AMT NST +0120 +0020 CEST CET|-j.w -1j.w -1k -k -20 -10|010101010101010101010101010101010101010101012323234545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2aFcj.w 11b0 1iP0 11A0 1io0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1co0 1io0 1yo0 Pc0 1a00 1fA0 1Bc0 Mo0 1tc0 Uo0 1tA0 U00 1uo0 W00 1s00 VA0 1so0 Vc0 1sM0 UM0 1wo0 Rc0 1u00 Wo0 1rA0 W00 1s00 VA0 1sM0 UM0 1w00 fV0 BCX.w 1tA0 U00 1u00 Wo0 1sm0 601k WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|16e5\",\"Europe/Andorra|WET CET CEST|0 -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-UBA0 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|79e3\",\"Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|10e5\",\"Europe/Athens|AMT EET EEST CEST CET|-1y.Q -20 -30 -20 -10|012123434121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a61x.Q CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|35e5\",\"Europe/London|GMT BST BDST|0 -10 -20|0101010101010101010101010101010101010101010101010121212121210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|10e6\",\"Europe/Belgrade|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19RC0 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5\",\"Europe/Berlin|CET CEST CEMT|-10 -20 -30|01010101010101210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e5\",\"Europe/Prague|CET CEST GMT|-10 -20 0|01010101010101010201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 1qM0 11c0 mp0 xA0 mn0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|13e5\",\"Europe/Brussels|WET CET CEST WEST|0 -10 -20 -10|0121212103030303030303030303030303030303030303030303212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ehc0 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|21e5\",\"Europe/Bucharest|BMT EET EEST|-1I.o -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1xApI.o 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|19e5\",\"Europe/Budapest|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 1oo0 11c0 1lc0 17c0 O1V0 3Nf0 WM0 1fA0 1cM0 1cM0 1oJ0 1dd0 1020 1fX0 1cp0 1cM0 1cM0 1cM0 1fA0 1a00 bhy0 Rb0 1wr0 Rc0 1C00 LA0 1C00 LA0 SNW0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cO0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5\",\"Europe/Zurich|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19Lc0 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e4\",\"Europe/Chisinau|CMT BMT EET EEST CEST CET MSK MSD|-1T -1I.o -20 -30 -20 -10 -30 -40|012323232323232323234545467676767676767676767323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-26jdT wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|67e4\",\"Europe/Copenhagen|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 Tz0 VuO0 60q0 WM0 1fA0 1cM0 1cM0 1cM0 S00 1HA0 Nc0 1C00 Dc0 1Nc0 Ao0 1h5A0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5\",\"Europe/Gibraltar|GMT BST BDST CET CEST|0 -10 -20 -10 -20|010101010101010101010101010101010101010101010101012121212121010121010101010101010101034343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|30e3\",\"Europe/Helsinki|HMT EET EEST|-1D.N -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1WuND.N OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5\",\"Europe/Kaliningrad|CET CEST EET EEST MSK MSD +03|-10 -20 -20 -30 -30 -40 -30|01010101010101232454545454545454543232323232323232323232323232323232323232323262|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 390 7A0 1en0 12N0 1pbb0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4\",\"Europe/Kiev|KMT EET MSK CEST CET MSD EEST|-22.4 -20 -30 -20 -10 -40 -30|0123434252525252525252525256161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc22.4 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|34e5\",\"Europe/Kirov|LMT +03 +04 +05|-3i.M -30 -40 -50|01232323232323232321212121212121212121212121212121212121212121|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4\",\"Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121214121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2le00 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 pvy0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e5\",\"Europe/Luxembourg|LMT CET CEST WET WEST WEST WET|-o.A -10 -20 0 -10 -20 -10|0121212134343434343434343434343434343434343434343434565651212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2DG0o.A t6mo.A TB0 1nX0 Up0 1o20 11A0 rW0 CM0 1qP0 R90 1EO0 UK0 1u20 10m0 1ip0 1in0 17e0 19W0 1fB0 1db0 1cp0 1in0 17d0 1fz0 1a10 1in0 1a10 1in0 17f0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 vA0 60L0 WM0 1fA0 1cM0 17c0 1io0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4\",\"Europe/Madrid|WET WEST WEMT CET CEST|0 -10 -20 -10 -20|010101010101010101210343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-25Td0 19B0 1cL0 1dd0 b1z0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1in0 17d0 iIn0 Hd0 1cL0 bb0 1200 2s20 14n0 5aL0 Mp0 1vz0 17d0 1in0 17d0 1in0 17d0 1in0 17d0 6hX0 11B0 XHX0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e5\",\"Europe/Malta|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4\",\"Europe/Minsk|MMT EET MSK CEST CET MSD EEST +03|-1O -20 -30 -20 -10 -40 -30 -30|01234343252525252525252525261616161616161616161616161616161616161617|-1Pc1O eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5\",\"Europe/Monaco|PMT WET WEST WEMT CET CEST|-9.l 0 -10 -20 -10 -20|01212121212121212121212121212121212121212121212121232323232345454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2n5c9.l cFX9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 2RV0 11z0 11B0 1ze0 WM0 1fA0 1cM0 1fa0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e3\",\"Europe/Moscow|MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|012132345464575454545454545454545458754545454545454545454545454545454545454595|-2ag2u.h 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6\",\"Europe/Paris|PMT WET WEST CEST CET WEMT|-9.l 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123434352543434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e6\",\"Europe/Riga|RMT LST EET MSK CEST CET MSD EEST|-1A.y -2A.y -20 -30 -20 -10 -40 -30|010102345454536363636363636363727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-25TzA.y 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|64e4\",\"Europe/Rome|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|39e5\",\"Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5\",\"Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810|\",\"Europe/Simferopol|SMT EET MSK CEST CET MSD EEST MSK|-2g -20 -30 -20 -10 -40 -30 -40|012343432525252525252525252161616525252616161616161616161616161616161616172|-1Pc2g eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eL0 1cL0 1cN0 1cL0 1cN0 dX0 WL0 1cN0 1cL0 1fB0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4\",\"Europe/Sofia|EET CET CEST EEST|-20 -10 -20 -30|01212103030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030|-168L0 WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5\",\"Europe/Stockholm|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 TB0 2yDe0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|15e5\",\"Europe/Tallinn|TMT CET CEST EET MSK MSD EEST|-1D -10 -20 -20 -30 -40 -30|012103421212454545454545454546363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-26oND teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e4\",\"Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4\",\"Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|13e5\",\"Europe/Uzhgorod|CET CEST MSK MSD EET EEST|-10 -20 -30 -40 -20 -30|010101023232323232323232320454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-1cqL0 6i00 WM0 1fA0 1cM0 1ml0 1Cp0 1r3W0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 1Nf0 2pw0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e4\",\"Europe/Vienna|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1ao0 1co0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|18e5\",\"Europe/Vilnius|WMT KMT CET EET MSK CEST MSD EEST|-1o -1z.A -10 -20 -30 -20 -40 -30|012324525254646464646464646473737373737373737352537373737373737373737373737373737373737373737373737373737373737373737373|-293do 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4\",\"Europe/Volgograd|LMT +03 +04 +05|-2V.E -30 -40 -50|0123232323232323212121212121212121212121212121212121212121212121|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 9Jd0 5gn0|10e5\",\"Europe/Warsaw|WMT CET CEST EET EEST|-1o -10 -20 -20 -30|012121234312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ctdo 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5\",\"Europe/Zaporozhye|+0220 EET MSK CEST CET MSD EEST|-2k -20 -30 -20 -10 -40 -30|01234342525252525252525252526161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc2k eUok rdb0 2RE0 WM0 1fA0 8m0 1v9a0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|77e4\",\"HST|HST|a0|0||\",\"Indian/Chagos|LMT +05 +06|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2\",\"Indian/Cocos|+0630|-6u|0||596\",\"Indian/Kerguelen|-00 +05|0 -50|01|-MG00|130\",\"Indian/Mahe|LMT +04|-3F.M -40|01|-2xorF.M|79e3\",\"Indian/Maldives|MMT +05|-4S -50|01|-olgS|35e4\",\"Indian/Mauritius|LMT +04 +05|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4\",\"Indian/Reunion|LMT +04|-3F.Q -40|01|-2mDDF.Q|84e4\",\"Pacific/Kwajalein|+11 +10 +09 -12 +12|-b0 -a0 -90 c0 -c0|012034|-1kln0 akp0 6Up0 12ry0 Wan0|14e3\",\"MET|MET MEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|\",\"MST|MST|70|0||\",\"MST7MDT|MST MDT MWT MPT|70 60 60 60|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"Pacific/Chatham|+1215 +1245 +1345|-cf -cJ -dJ|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-WqAf 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|600\",\"Pacific/Apia|LMT -1130 -11 -10 +14 +13|bq.U bu b0 a0 -e0 -d0|01232345454545454545454545454545454545454545454545454545454|-2nDMx.4 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|37e3\",\"Pacific/Bougainville|+10 +09 +11|-a0 -90 -b0|0102|-16Wy0 7CN0 2MQp0|18e4\",\"Pacific/Chuuk|+10 +09|-a0 -90|01010|-2ewy0 axB0 RVX0 axd0|49e3\",\"Pacific/Efate|LMT +11 +12|-bd.g -b0 -c0|012121212121212121212121|-2l9nd.g 2uNXd.g Dc0 n610 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3\",\"Pacific/Enderbury|-12 -11 +13|c0 b0 -d0|012|nIc0 B7X0|1\",\"Pacific/Fakaofo|-11 +13|b0 -d0|01|1Gfn0|483\",\"Pacific/Fiji|LMT +12 +13|-bT.I -c0 -d0|0121212121212121212121212121212121212121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 2hc0 bc0 20o0 pc0 20o0 pc0 20o0 pc0 20o0 pc0 20o0 s00 1VA0 s00 20o0 pc0 20o0 pc0 20o0 pc0 20o0 pc0 20o0 s00 20o0 pc0 20o0 pc0 20o0 pc0 20o0 pc0 20o0 s00 1VA0 s00|88e4\",\"Pacific/Galapagos|LMT -05 -06|5W.o 50 60|01212|-1yVS1.A 2dTz1.A gNd0 rz0|25e3\",\"Pacific/Gambier|LMT -09|8X.M 90|01|-2jof0.c|125\",\"Pacific/Guadalcanal|LMT +11|-aD.M -b0|01|-2joyD.M|11e4\",\"Pacific/Guam|GST +09 GDT ChST|-a0 -90 -b0 -a0|01020202020202020203|-18jK0 6pB0 AhB0 3QL0 g2p0 3p91 WOX rX0 1zd0 Rb0 1wp0 Rb0 5xd0 rX0 5sN0 zb1 1C0X On0 ULb0|17e4\",\"Pacific/Honolulu|HST HDT HWT HPT HST|au 9u 9u 9u a0|0102304|-1thLu 8x0 lef0 8wWu iAu 46p0|37e4\",\"Pacific/Kiritimati|-1040 -10 +14|aE a0 -e0|012|nIaE B7Xk|51e2\",\"Pacific/Kosrae|+11 +09 +10 +12|-b0 -90 -a0 -c0|01021030|-2ewz0 axC0 HBy0 akp0 axd0 WOK0 1bdz0|66e2\",\"Pacific/Majuro|+11 +09 +10 +12|-b0 -90 -a0 -c0|0102103|-2ewz0 axC0 HBy0 akp0 6RB0 12um0|28e3\",\"Pacific/Marquesas|LMT -0930|9i 9u|01|-2joeG|86e2\",\"Pacific/Pago_Pago|LMT SST|bm.M b0|01|-2nDMB.c|37e2\",\"Pacific/Nauru|LMT +1130 +09 +12|-b7.E -bu -90 -c0|01213|-1Xdn7.E QCnB.E 7mqu 1lnbu|10e3\",\"Pacific/Niue|-1120 -1130 -11|bk bu b0|012|-KfME 17y0a|12e2\",\"Pacific/Norfolk|+1112 +1130 +1230 +11 +12|-bc -bu -cu -b0 -c0|012134343434343434343434343434343434343434|-Kgbc W01G Oo0 1COo0 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|25e4\",\"Pacific/Noumea|LMT +11 +12|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3\",\"Pacific/Pitcairn|-0830 -08|8u 80|01|18Vku|56\",\"Pacific/Pohnpei|+11 +09 +10|-b0 -90 -a0|010210|-2ewz0 axC0 HBy0 akp0 axd0|34e3\",\"Pacific/Rarotonga|-1030 -0930 -10|au 9u a0|012121212121212121212121212|lyWu IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3\",\"Pacific/Tahiti|LMT -10|9W.g a0|01|-2joe1.I|18e4\",\"Pacific/Tongatapu|+1220 +13 +14|-ck -d0 -e0|0121212121|-1aB0k 2n5dk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00|75e3\",\"PST8PDT|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"WET|WET WEST|0 -10|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|\"],\"links\":[\"Africa/Abidjan|Africa/Bamako\",\"Africa/Abidjan|Africa/Banjul\",\"Africa/Abidjan|Africa/Conakry\",\"Africa/Abidjan|Africa/Dakar\",\"Africa/Abidjan|Africa/Freetown\",\"Africa/Abidjan|Africa/Lome\",\"Africa/Abidjan|Africa/Nouakchott\",\"Africa/Abidjan|Africa/Ouagadougou\",\"Africa/Abidjan|Africa/Timbuktu\",\"Africa/Abidjan|Atlantic/St_Helena\",\"Africa/Cairo|Egypt\",\"Africa/Johannesburg|Africa/Maseru\",\"Africa/Johannesburg|Africa/Mbabane\",\"Africa/Lagos|Africa/Bangui\",\"Africa/Lagos|Africa/Brazzaville\",\"Africa/Lagos|Africa/Douala\",\"Africa/Lagos|Africa/Kinshasa\",\"Africa/Lagos|Africa/Libreville\",\"Africa/Lagos|Africa/Luanda\",\"Africa/Lagos|Africa/Malabo\",\"Africa/Lagos|Africa/Niamey\",\"Africa/Lagos|Africa/Porto-Novo\",\"Africa/Maputo|Africa/Blantyre\",\"Africa/Maputo|Africa/Bujumbura\",\"Africa/Maputo|Africa/Gaborone\",\"Africa/Maputo|Africa/Harare\",\"Africa/Maputo|Africa/Kigali\",\"Africa/Maputo|Africa/Lubumbashi\",\"Africa/Maputo|Africa/Lusaka\",\"Africa/Nairobi|Africa/Addis_Ababa\",\"Africa/Nairobi|Africa/Asmara\",\"Africa/Nairobi|Africa/Asmera\",\"Africa/Nairobi|Africa/Dar_es_Salaam\",\"Africa/Nairobi|Africa/Djibouti\",\"Africa/Nairobi|Africa/Kampala\",\"Africa/Nairobi|Africa/Mogadishu\",\"Africa/Nairobi|Indian/Antananarivo\",\"Africa/Nairobi|Indian/Comoro\",\"Africa/Nairobi|Indian/Mayotte\",\"Africa/Tripoli|Libya\",\"America/Adak|America/Atka\",\"America/Adak|US/Aleutian\",\"America/Anchorage|US/Alaska\",\"America/Argentina/Buenos_Aires|America/Buenos_Aires\",\"America/Argentina/Catamarca|America/Argentina/ComodRivadavia\",\"America/Argentina/Catamarca|America/Catamarca\",\"America/Argentina/Cordoba|America/Cordoba\",\"America/Argentina/Cordoba|America/Rosario\",\"America/Argentina/Jujuy|America/Jujuy\",\"America/Argentina/Mendoza|America/Mendoza\",\"America/Atikokan|America/Coral_Harbour\",\"America/Chicago|US/Central\",\"America/Curacao|America/Aruba\",\"America/Curacao|America/Kralendijk\",\"America/Curacao|America/Lower_Princes\",\"America/Denver|America/Shiprock\",\"America/Denver|Navajo\",\"America/Denver|US/Mountain\",\"America/Detroit|US/Michigan\",\"America/Edmonton|Canada/Mountain\",\"America/Fort_Wayne|America/Indiana/Indianapolis\",\"America/Fort_Wayne|America/Indianapolis\",\"America/Fort_Wayne|US/East-Indiana\",\"America/Godthab|America/Nuuk\",\"America/Halifax|Canada/Atlantic\",\"America/Havana|Cuba\",\"America/Indiana/Knox|America/Knox_IN\",\"America/Indiana/Knox|US/Indiana-Starke\",\"America/Jamaica|Jamaica\",\"America/Kentucky/Louisville|America/Louisville\",\"America/Los_Angeles|US/Pacific\",\"America/Manaus|Brazil/West\",\"America/Mazatlan|Mexico/BajaSur\",\"America/Mexico_City|Mexico/General\",\"America/New_York|US/Eastern\",\"America/Noronha|Brazil/DeNoronha\",\"America/Panama|America/Cayman\",\"America/Phoenix|US/Arizona\",\"America/Port_of_Spain|America/Anguilla\",\"America/Port_of_Spain|America/Antigua\",\"America/Port_of_Spain|America/Dominica\",\"America/Port_of_Spain|America/Grenada\",\"America/Port_of_Spain|America/Guadeloupe\",\"America/Port_of_Spain|America/Marigot\",\"America/Port_of_Spain|America/Montserrat\",\"America/Port_of_Spain|America/St_Barthelemy\",\"America/Port_of_Spain|America/St_Kitts\",\"America/Port_of_Spain|America/St_Lucia\",\"America/Port_of_Spain|America/St_Thomas\",\"America/Port_of_Spain|America/St_Vincent\",\"America/Port_of_Spain|America/Tortola\",\"America/Port_of_Spain|America/Virgin\",\"America/Regina|Canada/Saskatchewan\",\"America/Rio_Branco|America/Porto_Acre\",\"America/Rio_Branco|Brazil/Acre\",\"America/Santiago|Chile/Continental\",\"America/Sao_Paulo|Brazil/East\",\"America/St_Johns|Canada/Newfoundland\",\"America/Tijuana|America/Ensenada\",\"America/Tijuana|America/Santa_Isabel\",\"America/Tijuana|Mexico/BajaNorte\",\"America/Toronto|America/Montreal\",\"America/Toronto|Canada/Eastern\",\"America/Vancouver|Canada/Pacific\",\"America/Whitehorse|Canada/Yukon\",\"America/Winnipeg|Canada/Central\",\"Asia/Ashgabat|Asia/Ashkhabad\",\"Asia/Bangkok|Asia/Phnom_Penh\",\"Asia/Bangkok|Asia/Vientiane\",\"Asia/Dhaka|Asia/Dacca\",\"Asia/Dubai|Asia/Muscat\",\"Asia/Ho_Chi_Minh|Asia/Saigon\",\"Asia/Hong_Kong|Hongkong\",\"Asia/Jerusalem|Asia/Tel_Aviv\",\"Asia/Jerusalem|Israel\",\"Asia/Kathmandu|Asia/Katmandu\",\"Asia/Kolkata|Asia/Calcutta\",\"Asia/Kuala_Lumpur|Asia/Singapore\",\"Asia/Kuala_Lumpur|Singapore\",\"Asia/Macau|Asia/Macao\",\"Asia/Makassar|Asia/Ujung_Pandang\",\"Asia/Nicosia|Europe/Nicosia\",\"Asia/Qatar|Asia/Bahrain\",\"Asia/Rangoon|Asia/Yangon\",\"Asia/Riyadh|Asia/Aden\",\"Asia/Riyadh|Asia/Kuwait\",\"Asia/Seoul|ROK\",\"Asia/Shanghai|Asia/Chongqing\",\"Asia/Shanghai|Asia/Chungking\",\"Asia/Shanghai|Asia/Harbin\",\"Asia/Shanghai|PRC\",\"Asia/Taipei|ROC\",\"Asia/Tehran|Iran\",\"Asia/Thimphu|Asia/Thimbu\",\"Asia/Tokyo|Japan\",\"Asia/Ulaanbaatar|Asia/Ulan_Bator\",\"Asia/Urumqi|Asia/Kashgar\",\"Atlantic/Faroe|Atlantic/Faeroe\",\"Atlantic/Reykjavik|Iceland\",\"Atlantic/South_Georgia|Etc/GMT+2\",\"Australia/Adelaide|Australia/South\",\"Australia/Brisbane|Australia/Queensland\",\"Australia/Broken_Hill|Australia/Yancowinna\",\"Australia/Darwin|Australia/North\",\"Australia/Hobart|Australia/Currie\",\"Australia/Hobart|Australia/Tasmania\",\"Australia/Lord_Howe|Australia/LHI\",\"Australia/Melbourne|Australia/Victoria\",\"Australia/Perth|Australia/West\",\"Australia/Sydney|Australia/ACT\",\"Australia/Sydney|Australia/Canberra\",\"Australia/Sydney|Australia/NSW\",\"Etc/GMT-0|Etc/GMT\",\"Etc/GMT-0|Etc/GMT+0\",\"Etc/GMT-0|Etc/GMT0\",\"Etc/GMT-0|Etc/Greenwich\",\"Etc/GMT-0|GMT\",\"Etc/GMT-0|GMT+0\",\"Etc/GMT-0|GMT-0\",\"Etc/GMT-0|GMT0\",\"Etc/GMT-0|Greenwich\",\"Etc/UTC|Etc/UCT\",\"Etc/UTC|Etc/Universal\",\"Etc/UTC|Etc/Zulu\",\"Etc/UTC|UCT\",\"Etc/UTC|UTC\",\"Etc/UTC|Universal\",\"Etc/UTC|Zulu\",\"Europe/Belgrade|Europe/Ljubljana\",\"Europe/Belgrade|Europe/Podgorica\",\"Europe/Belgrade|Europe/Sarajevo\",\"Europe/Belgrade|Europe/Skopje\",\"Europe/Belgrade|Europe/Zagreb\",\"Europe/Chisinau|Europe/Tiraspol\",\"Europe/Dublin|Eire\",\"Europe/Helsinki|Europe/Mariehamn\",\"Europe/Istanbul|Asia/Istanbul\",\"Europe/Istanbul|Turkey\",\"Europe/Lisbon|Portugal\",\"Europe/London|Europe/Belfast\",\"Europe/London|Europe/Guernsey\",\"Europe/London|Europe/Isle_of_Man\",\"Europe/London|Europe/Jersey\",\"Europe/London|GB\",\"Europe/London|GB-Eire\",\"Europe/Moscow|W-SU\",\"Europe/Oslo|Arctic/Longyearbyen\",\"Europe/Oslo|Atlantic/Jan_Mayen\",\"Europe/Prague|Europe/Bratislava\",\"Europe/Rome|Europe/San_Marino\",\"Europe/Rome|Europe/Vatican\",\"Europe/Warsaw|Poland\",\"Europe/Zurich|Europe/Busingen\",\"Europe/Zurich|Europe/Vaduz\",\"Indian/Christmas|Etc/GMT-7\",\"Pacific/Auckland|Antarctica/McMurdo\",\"Pacific/Auckland|Antarctica/South_Pole\",\"Pacific/Auckland|NZ\",\"Pacific/Chatham|NZ-CHAT\",\"Pacific/Chuuk|Pacific/Truk\",\"Pacific/Chuuk|Pacific/Yap\",\"Pacific/Easter|Chile/EasterIsland\",\"Pacific/Guam|Pacific/Saipan\",\"Pacific/Honolulu|Pacific/Johnston\",\"Pacific/Honolulu|US/Hawaii\",\"Pacific/Kwajalein|Kwajalein\",\"Pacific/Pago_Pago|Pacific/Midway\",\"Pacific/Pago_Pago|Pacific/Samoa\",\"Pacific/Pago_Pago|US/Samoa\",\"Pacific/Palau|Etc/GMT-9\",\"Pacific/Pohnpei|Pacific/Ponape\",\"Pacific/Port_Moresby|Etc/GMT-10\",\"Pacific/Tarawa|Etc/GMT-12\",\"Pacific/Tarawa|Pacific/Funafuti\",\"Pacific/Tarawa|Pacific/Wake\",\"Pacific/Tarawa|Pacific/Wallis\"],\"countries\":[\"AD|Europe/Andorra\",\"AE|Asia/Dubai\",\"AF|Asia/Kabul\",\"AG|America/Port_of_Spain America/Antigua\",\"AI|America/Port_of_Spain America/Anguilla\",\"AL|Europe/Tirane\",\"AM|Asia/Yerevan\",\"AO|Africa/Lagos Africa/Luanda\",\"AQ|Antarctica/Casey Antarctica/Davis Antarctica/DumontDUrville Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Syowa Antarctica/Troll Antarctica/Vostok Pacific/Auckland Antarctica/McMurdo\",\"AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia\",\"AS|Pacific/Pago_Pago\",\"AT|Europe/Vienna\",\"AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Currie Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla\",\"AW|America/Curacao America/Aruba\",\"AX|Europe/Helsinki Europe/Mariehamn\",\"AZ|Asia/Baku\",\"BA|Europe/Belgrade Europe/Sarajevo\",\"BB|America/Barbados\",\"BD|Asia/Dhaka\",\"BE|Europe/Brussels\",\"BF|Africa/Abidjan Africa/Ouagadougou\",\"BG|Europe/Sofia\",\"BH|Asia/Qatar Asia/Bahrain\",\"BI|Africa/Maputo Africa/Bujumbura\",\"BJ|Africa/Lagos Africa/Porto-Novo\",\"BL|America/Port_of_Spain America/St_Barthelemy\",\"BM|Atlantic/Bermuda\",\"BN|Asia/Brunei\",\"BO|America/La_Paz\",\"BQ|America/Curacao America/Kralendijk\",\"BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco\",\"BS|America/Nassau\",\"BT|Asia/Thimphu\",\"BW|Africa/Maputo Africa/Gaborone\",\"BY|Europe/Minsk\",\"BZ|America/Belize\",\"CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Blanc-Sablon America/Toronto America/Nipigon America/Thunder_Bay America/Iqaluit America/Pangnirtung America/Atikokan America/Winnipeg America/Rainy_River America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Yellowknife America/Inuvik America/Creston America/Dawson_Creek America/Fort_Nelson America/Vancouver America/Whitehorse America/Dawson\",\"CC|Indian/Cocos\",\"CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi\",\"CF|Africa/Lagos Africa/Bangui\",\"CG|Africa/Lagos Africa/Brazzaville\",\"CH|Europe/Zurich\",\"CI|Africa/Abidjan\",\"CK|Pacific/Rarotonga\",\"CL|America/Santiago America/Punta_Arenas Pacific/Easter\",\"CM|Africa/Lagos Africa/Douala\",\"CN|Asia/Shanghai Asia/Urumqi\",\"CO|America/Bogota\",\"CR|America/Costa_Rica\",\"CU|America/Havana\",\"CV|Atlantic/Cape_Verde\",\"CW|America/Curacao\",\"CX|Indian/Christmas\",\"CY|Asia/Nicosia Asia/Famagusta\",\"CZ|Europe/Prague\",\"DE|Europe/Zurich Europe/Berlin Europe/Busingen\",\"DJ|Africa/Nairobi Africa/Djibouti\",\"DK|Europe/Copenhagen\",\"DM|America/Port_of_Spain America/Dominica\",\"DO|America/Santo_Domingo\",\"DZ|Africa/Algiers\",\"EC|America/Guayaquil Pacific/Galapagos\",\"EE|Europe/Tallinn\",\"EG|Africa/Cairo\",\"EH|Africa/El_Aaiun\",\"ER|Africa/Nairobi Africa/Asmara\",\"ES|Europe/Madrid Africa/Ceuta Atlantic/Canary\",\"ET|Africa/Nairobi Africa/Addis_Ababa\",\"FI|Europe/Helsinki\",\"FJ|Pacific/Fiji\",\"FK|Atlantic/Stanley\",\"FM|Pacific/Chuuk Pacific/Pohnpei Pacific/Kosrae\",\"FO|Atlantic/Faroe\",\"FR|Europe/Paris\",\"GA|Africa/Lagos Africa/Libreville\",\"GB|Europe/London\",\"GD|America/Port_of_Spain America/Grenada\",\"GE|Asia/Tbilisi\",\"GF|America/Cayenne\",\"GG|Europe/London Europe/Guernsey\",\"GH|Africa/Accra\",\"GI|Europe/Gibraltar\",\"GL|America/Nuuk America/Danmarkshavn America/Scoresbysund America/Thule\",\"GM|Africa/Abidjan Africa/Banjul\",\"GN|Africa/Abidjan Africa/Conakry\",\"GP|America/Port_of_Spain America/Guadeloupe\",\"GQ|Africa/Lagos Africa/Malabo\",\"GR|Europe/Athens\",\"GS|Atlantic/South_Georgia\",\"GT|America/Guatemala\",\"GU|Pacific/Guam\",\"GW|Africa/Bissau\",\"GY|America/Guyana\",\"HK|Asia/Hong_Kong\",\"HN|America/Tegucigalpa\",\"HR|Europe/Belgrade Europe/Zagreb\",\"HT|America/Port-au-Prince\",\"HU|Europe/Budapest\",\"ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura\",\"IE|Europe/Dublin\",\"IL|Asia/Jerusalem\",\"IM|Europe/London Europe/Isle_of_Man\",\"IN|Asia/Kolkata\",\"IO|Indian/Chagos\",\"IQ|Asia/Baghdad\",\"IR|Asia/Tehran\",\"IS|Atlantic/Reykjavik\",\"IT|Europe/Rome\",\"JE|Europe/London Europe/Jersey\",\"JM|America/Jamaica\",\"JO|Asia/Amman\",\"JP|Asia/Tokyo\",\"KE|Africa/Nairobi\",\"KG|Asia/Bishkek\",\"KH|Asia/Bangkok Asia/Phnom_Penh\",\"KI|Pacific/Tarawa Pacific/Enderbury Pacific/Kiritimati\",\"KM|Africa/Nairobi Indian/Comoro\",\"KN|America/Port_of_Spain America/St_Kitts\",\"KP|Asia/Pyongyang\",\"KR|Asia/Seoul\",\"KW|Asia/Riyadh Asia/Kuwait\",\"KY|America/Panama America/Cayman\",\"KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral\",\"LA|Asia/Bangkok Asia/Vientiane\",\"LB|Asia/Beirut\",\"LC|America/Port_of_Spain America/St_Lucia\",\"LI|Europe/Zurich Europe/Vaduz\",\"LK|Asia/Colombo\",\"LR|Africa/Monrovia\",\"LS|Africa/Johannesburg Africa/Maseru\",\"LT|Europe/Vilnius\",\"LU|Europe/Luxembourg\",\"LV|Europe/Riga\",\"LY|Africa/Tripoli\",\"MA|Africa/Casablanca\",\"MC|Europe/Monaco\",\"MD|Europe/Chisinau\",\"ME|Europe/Belgrade Europe/Podgorica\",\"MF|America/Port_of_Spain America/Marigot\",\"MG|Africa/Nairobi Indian/Antananarivo\",\"MH|Pacific/Majuro Pacific/Kwajalein\",\"MK|Europe/Belgrade Europe/Skopje\",\"ML|Africa/Abidjan Africa/Bamako\",\"MM|Asia/Yangon\",\"MN|Asia/Ulaanbaatar Asia/Hovd Asia/Choibalsan\",\"MO|Asia/Macau\",\"MP|Pacific/Guam Pacific/Saipan\",\"MQ|America/Martinique\",\"MR|Africa/Abidjan Africa/Nouakchott\",\"MS|America/Port_of_Spain America/Montserrat\",\"MT|Europe/Malta\",\"MU|Indian/Mauritius\",\"MV|Indian/Maldives\",\"MW|Africa/Maputo Africa/Blantyre\",\"MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Mazatlan America/Chihuahua America/Ojinaga America/Hermosillo America/Tijuana America/Bahia_Banderas\",\"MY|Asia/Kuala_Lumpur Asia/Kuching\",\"MZ|Africa/Maputo\",\"NA|Africa/Windhoek\",\"NC|Pacific/Noumea\",\"NE|Africa/Lagos Africa/Niamey\",\"NF|Pacific/Norfolk\",\"NG|Africa/Lagos\",\"NI|America/Managua\",\"NL|Europe/Amsterdam\",\"NO|Europe/Oslo\",\"NP|Asia/Kathmandu\",\"NR|Pacific/Nauru\",\"NU|Pacific/Niue\",\"NZ|Pacific/Auckland Pacific/Chatham\",\"OM|Asia/Dubai Asia/Muscat\",\"PA|America/Panama\",\"PE|America/Lima\",\"PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier\",\"PG|Pacific/Port_Moresby Pacific/Bougainville\",\"PH|Asia/Manila\",\"PK|Asia/Karachi\",\"PL|Europe/Warsaw\",\"PM|America/Miquelon\",\"PN|Pacific/Pitcairn\",\"PR|America/Puerto_Rico\",\"PS|Asia/Gaza Asia/Hebron\",\"PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores\",\"PW|Pacific/Palau\",\"PY|America/Asuncion\",\"QA|Asia/Qatar\",\"RE|Indian/Reunion\",\"RO|Europe/Bucharest\",\"RS|Europe/Belgrade\",\"RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Astrakhan Europe/Volgograd Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr\",\"RW|Africa/Maputo Africa/Kigali\",\"SA|Asia/Riyadh\",\"SB|Pacific/Guadalcanal\",\"SC|Indian/Mahe\",\"SD|Africa/Khartoum\",\"SE|Europe/Stockholm\",\"SG|Asia/Singapore\",\"SH|Africa/Abidjan Atlantic/St_Helena\",\"SI|Europe/Belgrade Europe/Ljubljana\",\"SJ|Europe/Oslo Arctic/Longyearbyen\",\"SK|Europe/Prague Europe/Bratislava\",\"SL|Africa/Abidjan Africa/Freetown\",\"SM|Europe/Rome Europe/San_Marino\",\"SN|Africa/Abidjan Africa/Dakar\",\"SO|Africa/Nairobi Africa/Mogadishu\",\"SR|America/Paramaribo\",\"SS|Africa/Juba\",\"ST|Africa/Sao_Tome\",\"SV|America/El_Salvador\",\"SX|America/Curacao America/Lower_Princes\",\"SY|Asia/Damascus\",\"SZ|Africa/Johannesburg Africa/Mbabane\",\"TC|America/Grand_Turk\",\"TD|Africa/Ndjamena\",\"TF|Indian/Reunion Indian/Kerguelen\",\"TG|Africa/Abidjan Africa/Lome\",\"TH|Asia/Bangkok\",\"TJ|Asia/Dushanbe\",\"TK|Pacific/Fakaofo\",\"TL|Asia/Dili\",\"TM|Asia/Ashgabat\",\"TN|Africa/Tunis\",\"TO|Pacific/Tongatapu\",\"TR|Europe/Istanbul\",\"TT|America/Port_of_Spain\",\"TV|Pacific/Funafuti\",\"TW|Asia/Taipei\",\"TZ|Africa/Nairobi Africa/Dar_es_Salaam\",\"UA|Europe/Simferopol Europe/Kiev Europe/Uzhgorod Europe/Zaporozhye\",\"UG|Africa/Nairobi Africa/Kampala\",\"UM|Pacific/Pago_Pago Pacific/Wake Pacific/Honolulu Pacific/Midway\",\"US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu\",\"UY|America/Montevideo\",\"UZ|Asia/Samarkand Asia/Tashkent\",\"VA|Europe/Rome Europe/Vatican\",\"VC|America/Port_of_Spain America/St_Vincent\",\"VE|America/Caracas\",\"VG|America/Port_of_Spain America/Tortola\",\"VI|America/Port_of_Spain America/St_Thomas\",\"VN|Asia/Bangkok Asia/Ho_Chi_Minh\",\"VU|Pacific/Efate\",\"WF|Pacific/Wallis\",\"WS|Pacific/Apia\",\"YE|Asia/Riyadh Asia/Aden\",\"YT|Africa/Nairobi Indian/Mayotte\",\"ZA|Africa/Johannesburg\",\"ZM|Africa/Maputo Africa/Lusaka\",\"ZW|Africa/Maputo Africa/Harare\"]}");
      /***/
    },

    /***/
    "bOMt":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/nb.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function bOMt(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Norwegian Bokmål [nb]
      //! authors : Espen Hovlandsdal : https://github.com/rexxars
      //!           Sigurd Gartmann : https://github.com/sigurdga
      //!           Stephen Ramthun : https://github.com/stephenramthun
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var nb = moment.defineLocale('nb', {
          months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
          monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),
          monthsParseExact: true,
          weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
          weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'),
          weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY [kl.] HH:mm',
            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm'
          },
          calendar: {
            sameDay: '[i dag kl.] LT',
            nextDay: '[i morgen kl.] LT',
            nextWeek: 'dddd [kl.] LT',
            lastDay: '[i går kl.] LT',
            lastWeek: '[forrige] dddd [kl.] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'om %s',
            past: '%s siden',
            s: 'noen sekunder',
            ss: '%d sekunder',
            m: 'ett minutt',
            mm: '%d minutter',
            h: 'en time',
            hh: '%d timer',
            d: 'en dag',
            dd: '%d dager',
            w: 'en uke',
            ww: '%d uker',
            M: 'en måned',
            MM: '%d måneder',
            y: 'ett år',
            yy: '%d år'
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return nb;
      });
      /***/

    },

    /***/
    "bOdf":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/concatMap.js ***!
      \********************************************************************/

    /*! exports provided: concatMap */

    /***/
    function bOdf(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "concatMap", function () {
        return concatMap;
      });
      /* harmony import */


      var _mergeMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./mergeMap */
      "5+tZ");

      function concatMap(project, resultSelector) {
        return Object(_mergeMap__WEBPACK_IMPORTED_MODULE_0__["mergeMap"])(project, resultSelector, 1);
      } //# sourceMappingURL=concatMap.js.map

      /***/

    },

    /***/
    "bTqV":
    /*!************************************************************************!*\
      !*** ./node_modules/@angular/material/__ivy_ngcc__/fesm2015/button.js ***!
      \************************************************************************/

    /*! exports provided: MatAnchor, MatButton, MatButtonModule */

    /***/
    function bTqV(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatAnchor", function () {
        return MatAnchor;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatButton", function () {
        return MatButton;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatButtonModule", function () {
        return MatButtonModule;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_material_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/material/core */
      "FKr1");
      /* harmony import */


      var _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/cdk/a11y */
      "u47x");
      /* harmony import */


      var _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/platform-browser/animations */
      "R1ws");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Default color palette for round buttons (mat-fab and mat-mini-fab) */


      var _c0 = ["mat-button", ""];
      var _c1 = ["*"];
      var _c2 = ".mat-button .mat-button-focus-overlay,.mat-icon-button .mat-button-focus-overlay{opacity:0}.mat-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay,.mat-stroked-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay{opacity:.04}@media(hover: none){.mat-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay,.mat-stroked-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay{opacity:0}}.mat-button,.mat-icon-button,.mat-stroked-button,.mat-flat-button{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible}.mat-button::-moz-focus-inner,.mat-icon-button::-moz-focus-inner,.mat-stroked-button::-moz-focus-inner,.mat-flat-button::-moz-focus-inner{border:0}.mat-button.mat-button-disabled,.mat-icon-button.mat-button-disabled,.mat-stroked-button.mat-button-disabled,.mat-flat-button.mat-button-disabled{cursor:default}.mat-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-button.cdk-program-focused .mat-button-focus-overlay,.mat-icon-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-icon-button.cdk-program-focused .mat-button-focus-overlay,.mat-stroked-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-stroked-button.cdk-program-focused .mat-button-focus-overlay,.mat-flat-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-flat-button.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-button::-moz-focus-inner,.mat-icon-button::-moz-focus-inner,.mat-stroked-button::-moz-focus-inner,.mat-flat-button::-moz-focus-inner{border:0}.mat-raised-button{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible;transform:translate3d(0, 0, 0);transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-raised-button::-moz-focus-inner{border:0}.mat-raised-button.mat-button-disabled{cursor:default}.mat-raised-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-raised-button.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-raised-button::-moz-focus-inner{border:0}._mat-animation-noopable.mat-raised-button{transition:none;animation:none}.mat-stroked-button{border:1px solid currentColor;padding:0 15px;line-height:34px}.mat-stroked-button .mat-button-ripple.mat-ripple,.mat-stroked-button .mat-button-focus-overlay{top:-1px;left:-1px;right:-1px;bottom:-1px}.mat-fab{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible;transform:translate3d(0, 0, 0);transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);min-width:0;border-radius:50%;width:56px;height:56px;padding:0;flex-shrink:0}.mat-fab::-moz-focus-inner{border:0}.mat-fab.mat-button-disabled{cursor:default}.mat-fab.cdk-keyboard-focused .mat-button-focus-overlay,.mat-fab.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-fab::-moz-focus-inner{border:0}._mat-animation-noopable.mat-fab{transition:none;animation:none}.mat-fab .mat-button-wrapper{padding:16px 0;display:inline-block;line-height:24px}.mat-mini-fab{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible;transform:translate3d(0, 0, 0);transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);min-width:0;border-radius:50%;width:40px;height:40px;padding:0;flex-shrink:0}.mat-mini-fab::-moz-focus-inner{border:0}.mat-mini-fab.mat-button-disabled{cursor:default}.mat-mini-fab.cdk-keyboard-focused .mat-button-focus-overlay,.mat-mini-fab.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-mini-fab::-moz-focus-inner{border:0}._mat-animation-noopable.mat-mini-fab{transition:none;animation:none}.mat-mini-fab .mat-button-wrapper{padding:8px 0;display:inline-block;line-height:24px}.mat-icon-button{padding:0;min-width:0;width:40px;height:40px;flex-shrink:0;line-height:40px;border-radius:50%}.mat-icon-button i,.mat-icon-button .mat-icon{line-height:24px}.mat-button-ripple.mat-ripple,.mat-button-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-button-ripple.mat-ripple:not(:empty){transform:translateZ(0)}.mat-button-focus-overlay{opacity:0;transition:opacity 200ms cubic-bezier(0.35, 0, 0.25, 1),background-color 200ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable .mat-button-focus-overlay{transition:none}.mat-button-ripple-round{border-radius:50%;z-index:1}.mat-button .mat-button-wrapper>*,.mat-flat-button .mat-button-wrapper>*,.mat-stroked-button .mat-button-wrapper>*,.mat-raised-button .mat-button-wrapper>*,.mat-icon-button .mat-button-wrapper>*,.mat-fab .mat-button-wrapper>*,.mat-mini-fab .mat-button-wrapper>*{vertical-align:middle}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button{display:inline-flex;justify-content:center;align-items:center;font-size:inherit;width:2.5em;height:2.5em}.cdk-high-contrast-active .mat-button,.cdk-high-contrast-active .mat-flat-button,.cdk-high-contrast-active .mat-raised-button,.cdk-high-contrast-active .mat-icon-button,.cdk-high-contrast-active .mat-fab,.cdk-high-contrast-active .mat-mini-fab{outline:solid 1px}.cdk-high-contrast-active .mat-button-base.cdk-keyboard-focused,.cdk-high-contrast-active .mat-button-base.cdk-program-focused{outline:solid 3px}\n";
      var DEFAULT_ROUND_BUTTON_COLOR = 'accent';
      /**
       * List of classes to add to MatButton instances based on host attributes to
       * style as different variants.
       */

      var BUTTON_HOST_ATTRIBUTES = ['mat-button', 'mat-flat-button', 'mat-icon-button', 'mat-raised-button', 'mat-stroked-button', 'mat-mini-fab', 'mat-fab']; // Boilerplate for applying mixins to MatButton.

      /** @docs-private */

      var MatButtonBase = function MatButtonBase(_elementRef) {
        _classCallCheck2(this, MatButtonBase);

        this._elementRef = _elementRef;
      };

      var _MatButtonMixinBase = Object(_angular_material_core__WEBPACK_IMPORTED_MODULE_1__["mixinColor"])(Object(_angular_material_core__WEBPACK_IMPORTED_MODULE_1__["mixinDisabled"])(Object(_angular_material_core__WEBPACK_IMPORTED_MODULE_1__["mixinDisableRipple"])(MatButtonBase)));
      /**
       * Material design button.
       */


      var MatButton = /*#__PURE__*/function (_MatButtonMixinBase2) {
        _inherits2(MatButton, _MatButtonMixinBase2);

        var _super271 = _createSuper(MatButton);

        function MatButton(elementRef, _focusMonitor, _animationMode) {
          var _this626;

          _classCallCheck2(this, MatButton);

          _this626 = _super271.call(this, elementRef);
          _this626._focusMonitor = _focusMonitor;
          _this626._animationMode = _animationMode;
          /** Whether the button is round. */

          _this626.isRoundButton = _this626._hasHostAttributes('mat-fab', 'mat-mini-fab');
          /** Whether the button is icon button. */

          _this626.isIconButton = _this626._hasHostAttributes('mat-icon-button'); // For each of the variant selectors that is present in the button's host
          // attributes, add the correct corresponding class.

          var _iterator59 = _createForOfIteratorHelper(BUTTON_HOST_ATTRIBUTES),
              _step58;

          try {
            for (_iterator59.s(); !(_step58 = _iterator59.n()).done;) {
              var attr = _step58.value;

              if (_this626._hasHostAttributes(attr)) {
                _this626._getHostElement().classList.add(attr);
              }
            } // Add a class that applies to all buttons. This makes it easier to target if somebody
            // wants to target all Material buttons. We do it here rather than `host` to ensure that
            // the class is applied to derived classes.

          } catch (err) {
            _iterator59.e(err);
          } finally {
            _iterator59.f();
          }

          elementRef.nativeElement.classList.add('mat-button-base');

          if (_this626.isRoundButton) {
            _this626.color = DEFAULT_ROUND_BUTTON_COLOR;
          }

          return _this626;
        }

        _createClass2(MatButton, [{
          key: "ngAfterViewInit",
          value: function ngAfterViewInit() {
            this._focusMonitor.monitor(this._elementRef, true);
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._focusMonitor.stopMonitoring(this._elementRef);
          }
          /** Focuses the button. */

        }, {
          key: "focus",
          value: function focus(origin, options) {
            if (origin) {
              this._focusMonitor.focusVia(this._getHostElement(), origin, options);
            } else {
              this._getHostElement().focus(options);
            }
          }
        }, {
          key: "_getHostElement",
          value: function _getHostElement() {
            return this._elementRef.nativeElement;
          }
        }, {
          key: "_isRippleDisabled",
          value: function _isRippleDisabled() {
            return this.disableRipple || this.disabled;
          }
          /** Gets whether the button has one of the given attributes. */

        }, {
          key: "_hasHostAttributes",
          value: function _hasHostAttributes() {
            var _this627 = this;

            for (var _len37 = arguments.length, attributes = new Array(_len37), _key39 = 0; _key39 < _len37; _key39++) {
              attributes[_key39] = arguments[_key39];
            }

            return attributes.some(function (attribute) {
              return _this627._getHostElement().hasAttribute(attribute);
            });
          }
        }]);

        return MatButton;
      }(_MatButtonMixinBase);

      MatButton.ɵfac = function MatButton_Factory(t) {
        return new (t || MatButton)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_2__["FocusMonitor"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_3__["ANIMATION_MODULE_TYPE"], 8));
      };

      MatButton.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: MatButton,
        selectors: [["button", "mat-button", ""], ["button", "mat-raised-button", ""], ["button", "mat-icon-button", ""], ["button", "mat-fab", ""], ["button", "mat-mini-fab", ""], ["button", "mat-stroked-button", ""], ["button", "mat-flat-button", ""]],
        viewQuery: function MatButton_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](_angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MatRipple"], 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.ripple = _t.first);
          }
        },
        hostAttrs: [1, "mat-focus-indicator"],
        hostVars: 5,
        hostBindings: function MatButton_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("disabled", ctx.disabled || null);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("_mat-animation-noopable", ctx._animationMode === "NoopAnimations")("mat-button-disabled", ctx.disabled);
          }
        },
        inputs: {
          disabled: "disabled",
          disableRipple: "disableRipple",
          color: "color"
        },
        exportAs: ["matButton"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]],
        attrs: _c0,
        ngContentSelectors: _c1,
        decls: 4,
        vars: 5,
        consts: [[1, "mat-button-wrapper"], ["matRipple", "", 1, "mat-button-ripple", 3, "matRippleDisabled", "matRippleCentered", "matRippleTrigger"], [1, "mat-button-focus-overlay"]],
        template: function MatButton_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](2, "span", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](3, "span", 2);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("mat-button-ripple-round", ctx.isRoundButton || ctx.isIconButton);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("matRippleDisabled", ctx._isRippleDisabled())("matRippleCentered", ctx.isIconButton)("matRippleTrigger", ctx._getHostElement());
          }
        },
        directives: [_angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MatRipple"]],
        styles: [_c2],
        encapsulation: 2,
        changeDetection: 0
      });

      MatButton.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_2__["FocusMonitor"]
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_3__["ANIMATION_MODULE_TYPE"]]
          }]
        }];
      };

      MatButton.propDecorators = {
        ripple: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
          args: [_angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MatRipple"]]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatButton, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button],\n             button[mat-fab], button[mat-mini-fab], button[mat-stroked-button],\n             button[mat-flat-button]",
            exportAs: 'matButton',
            host: {
              '[attr.disabled]': 'disabled || null',
              '[class._mat-animation-noopable]': '_animationMode === "NoopAnimations"',
              // Add a class for disabled button styling instead of the using attribute
              // selector or pseudo-selector.  This allows users to create focusabled
              // disabled buttons without recreating the styles.
              '[class.mat-button-disabled]': 'disabled',
              'class': 'mat-focus-indicator'
            },
            template: "<span class=\"mat-button-wrapper\"><ng-content></ng-content></span>\n<span matRipple class=\"mat-button-ripple\"\n      [class.mat-button-ripple-round]=\"isRoundButton || isIconButton\"\n      [matRippleDisabled]=\"_isRippleDisabled()\"\n      [matRippleCentered]=\"isIconButton\"\n      [matRippleTrigger]=\"_getHostElement()\"></span>\n<span class=\"mat-button-focus-overlay\"></span>\n",
            inputs: ['disabled', 'disableRipple', 'color'],
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            styles: [".mat-button .mat-button-focus-overlay,.mat-icon-button .mat-button-focus-overlay{opacity:0}.mat-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay,.mat-stroked-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay{opacity:.04}@media(hover: none){.mat-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay,.mat-stroked-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay{opacity:0}}.mat-button,.mat-icon-button,.mat-stroked-button,.mat-flat-button{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible}.mat-button::-moz-focus-inner,.mat-icon-button::-moz-focus-inner,.mat-stroked-button::-moz-focus-inner,.mat-flat-button::-moz-focus-inner{border:0}.mat-button.mat-button-disabled,.mat-icon-button.mat-button-disabled,.mat-stroked-button.mat-button-disabled,.mat-flat-button.mat-button-disabled{cursor:default}.mat-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-button.cdk-program-focused .mat-button-focus-overlay,.mat-icon-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-icon-button.cdk-program-focused .mat-button-focus-overlay,.mat-stroked-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-stroked-button.cdk-program-focused .mat-button-focus-overlay,.mat-flat-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-flat-button.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-button::-moz-focus-inner,.mat-icon-button::-moz-focus-inner,.mat-stroked-button::-moz-focus-inner,.mat-flat-button::-moz-focus-inner{border:0}.mat-raised-button{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible;transform:translate3d(0, 0, 0);transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-raised-button::-moz-focus-inner{border:0}.mat-raised-button.mat-button-disabled{cursor:default}.mat-raised-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-raised-button.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-raised-button::-moz-focus-inner{border:0}._mat-animation-noopable.mat-raised-button{transition:none;animation:none}.mat-stroked-button{border:1px solid currentColor;padding:0 15px;line-height:34px}.mat-stroked-button .mat-button-ripple.mat-ripple,.mat-stroked-button .mat-button-focus-overlay{top:-1px;left:-1px;right:-1px;bottom:-1px}.mat-fab{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible;transform:translate3d(0, 0, 0);transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);min-width:0;border-radius:50%;width:56px;height:56px;padding:0;flex-shrink:0}.mat-fab::-moz-focus-inner{border:0}.mat-fab.mat-button-disabled{cursor:default}.mat-fab.cdk-keyboard-focused .mat-button-focus-overlay,.mat-fab.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-fab::-moz-focus-inner{border:0}._mat-animation-noopable.mat-fab{transition:none;animation:none}.mat-fab .mat-button-wrapper{padding:16px 0;display:inline-block;line-height:24px}.mat-mini-fab{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible;transform:translate3d(0, 0, 0);transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);min-width:0;border-radius:50%;width:40px;height:40px;padding:0;flex-shrink:0}.mat-mini-fab::-moz-focus-inner{border:0}.mat-mini-fab.mat-button-disabled{cursor:default}.mat-mini-fab.cdk-keyboard-focused .mat-button-focus-overlay,.mat-mini-fab.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-mini-fab::-moz-focus-inner{border:0}._mat-animation-noopable.mat-mini-fab{transition:none;animation:none}.mat-mini-fab .mat-button-wrapper{padding:8px 0;display:inline-block;line-height:24px}.mat-icon-button{padding:0;min-width:0;width:40px;height:40px;flex-shrink:0;line-height:40px;border-radius:50%}.mat-icon-button i,.mat-icon-button .mat-icon{line-height:24px}.mat-button-ripple.mat-ripple,.mat-button-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-button-ripple.mat-ripple:not(:empty){transform:translateZ(0)}.mat-button-focus-overlay{opacity:0;transition:opacity 200ms cubic-bezier(0.35, 0, 0.25, 1),background-color 200ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable .mat-button-focus-overlay{transition:none}.mat-button-ripple-round{border-radius:50%;z-index:1}.mat-button .mat-button-wrapper>*,.mat-flat-button .mat-button-wrapper>*,.mat-stroked-button .mat-button-wrapper>*,.mat-raised-button .mat-button-wrapper>*,.mat-icon-button .mat-button-wrapper>*,.mat-fab .mat-button-wrapper>*,.mat-mini-fab .mat-button-wrapper>*{vertical-align:middle}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button{display:inline-flex;justify-content:center;align-items:center;font-size:inherit;width:2.5em;height:2.5em}.cdk-high-contrast-active .mat-button,.cdk-high-contrast-active .mat-flat-button,.cdk-high-contrast-active .mat-raised-button,.cdk-high-contrast-active .mat-icon-button,.cdk-high-contrast-active .mat-fab,.cdk-high-contrast-active .mat-mini-fab{outline:solid 1px}.cdk-high-contrast-active .mat-button-base.cdk-keyboard-focused,.cdk-high-contrast-active .mat-button-base.cdk-program-focused{outline:solid 3px}\n"]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_2__["FocusMonitor"]
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_3__["ANIMATION_MODULE_TYPE"]]
            }]
          }];
        }, {
          ripple: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
            args: [_angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MatRipple"]]
          }]
        });
      })();
      /**
       * Material design anchor button.
       */


      var MatAnchor = /*#__PURE__*/function (_MatButton) {
        _inherits2(MatAnchor, _MatButton);

        var _super272 = _createSuper(MatAnchor);

        function MatAnchor(focusMonitor, elementRef, animationMode) {
          _classCallCheck2(this, MatAnchor);

          return _super272.call(this, elementRef, focusMonitor, animationMode);
        }

        _createClass2(MatAnchor, [{
          key: "_haltDisabledEvents",
          value: function _haltDisabledEvents(event) {
            // A disabled button shouldn't apply any actions
            if (this.disabled) {
              event.preventDefault();
              event.stopImmediatePropagation();
            }
          }
        }]);

        return MatAnchor;
      }(MatButton);

      MatAnchor.ɵfac = function MatAnchor_Factory(t) {
        return new (t || MatAnchor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_2__["FocusMonitor"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_3__["ANIMATION_MODULE_TYPE"], 8));
      };

      MatAnchor.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: MatAnchor,
        selectors: [["a", "mat-button", ""], ["a", "mat-raised-button", ""], ["a", "mat-icon-button", ""], ["a", "mat-fab", ""], ["a", "mat-mini-fab", ""], ["a", "mat-stroked-button", ""], ["a", "mat-flat-button", ""]],
        hostAttrs: [1, "mat-focus-indicator"],
        hostVars: 7,
        hostBindings: function MatAnchor_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function MatAnchor_click_HostBindingHandler($event) {
              return ctx._haltDisabledEvents($event);
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("tabindex", ctx.disabled ? -1 : ctx.tabIndex || 0)("disabled", ctx.disabled || null)("aria-disabled", ctx.disabled.toString());

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("_mat-animation-noopable", ctx._animationMode === "NoopAnimations")("mat-button-disabled", ctx.disabled);
          }
        },
        inputs: {
          disabled: "disabled",
          disableRipple: "disableRipple",
          color: "color",
          tabIndex: "tabIndex"
        },
        exportAs: ["matButton", "matAnchor"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]],
        attrs: _c0,
        ngContentSelectors: _c1,
        decls: 4,
        vars: 5,
        consts: [[1, "mat-button-wrapper"], ["matRipple", "", 1, "mat-button-ripple", 3, "matRippleDisabled", "matRippleCentered", "matRippleTrigger"], [1, "mat-button-focus-overlay"]],
        template: function MatAnchor_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](2, "span", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](3, "span", 2);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("mat-button-ripple-round", ctx.isRoundButton || ctx.isIconButton);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("matRippleDisabled", ctx._isRippleDisabled())("matRippleCentered", ctx.isIconButton)("matRippleTrigger", ctx._getHostElement());
          }
        },
        directives: [_angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MatRipple"]],
        styles: [_c2],
        encapsulation: 2,
        changeDetection: 0
      });

      MatAnchor.ctorParameters = function () {
        return [{
          type: _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_2__["FocusMonitor"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_3__["ANIMATION_MODULE_TYPE"]]
          }]
        }];
      };

      MatAnchor.propDecorators = {
        tabIndex: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatAnchor, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab],\n             a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]",
            exportAs: 'matButton, matAnchor',
            host: {
              // Note that we ignore the user-specified tabindex when it's disabled for
              // consistency with the `mat-button` applied on native buttons where even
              // though they have an index, they're not tabbable.
              '[attr.tabindex]': 'disabled ? -1 : (tabIndex || 0)',
              '[attr.disabled]': 'disabled || null',
              '[attr.aria-disabled]': 'disabled.toString()',
              '(click)': '_haltDisabledEvents($event)',
              '[class._mat-animation-noopable]': '_animationMode === "NoopAnimations"',
              '[class.mat-button-disabled]': 'disabled',
              'class': 'mat-focus-indicator'
            },
            inputs: ['disabled', 'disableRipple', 'color'],
            template: "<span class=\"mat-button-wrapper\"><ng-content></ng-content></span>\n<span matRipple class=\"mat-button-ripple\"\n      [class.mat-button-ripple-round]=\"isRoundButton || isIconButton\"\n      [matRippleDisabled]=\"_isRippleDisabled()\"\n      [matRippleCentered]=\"isIconButton\"\n      [matRippleTrigger]=\"_getHostElement()\"></span>\n<span class=\"mat-button-focus-overlay\"></span>\n",
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            styles: [".mat-button .mat-button-focus-overlay,.mat-icon-button .mat-button-focus-overlay{opacity:0}.mat-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay,.mat-stroked-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay{opacity:.04}@media(hover: none){.mat-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay,.mat-stroked-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay{opacity:0}}.mat-button,.mat-icon-button,.mat-stroked-button,.mat-flat-button{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible}.mat-button::-moz-focus-inner,.mat-icon-button::-moz-focus-inner,.mat-stroked-button::-moz-focus-inner,.mat-flat-button::-moz-focus-inner{border:0}.mat-button.mat-button-disabled,.mat-icon-button.mat-button-disabled,.mat-stroked-button.mat-button-disabled,.mat-flat-button.mat-button-disabled{cursor:default}.mat-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-button.cdk-program-focused .mat-button-focus-overlay,.mat-icon-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-icon-button.cdk-program-focused .mat-button-focus-overlay,.mat-stroked-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-stroked-button.cdk-program-focused .mat-button-focus-overlay,.mat-flat-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-flat-button.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-button::-moz-focus-inner,.mat-icon-button::-moz-focus-inner,.mat-stroked-button::-moz-focus-inner,.mat-flat-button::-moz-focus-inner{border:0}.mat-raised-button{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible;transform:translate3d(0, 0, 0);transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-raised-button::-moz-focus-inner{border:0}.mat-raised-button.mat-button-disabled{cursor:default}.mat-raised-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-raised-button.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-raised-button::-moz-focus-inner{border:0}._mat-animation-noopable.mat-raised-button{transition:none;animation:none}.mat-stroked-button{border:1px solid currentColor;padding:0 15px;line-height:34px}.mat-stroked-button .mat-button-ripple.mat-ripple,.mat-stroked-button .mat-button-focus-overlay{top:-1px;left:-1px;right:-1px;bottom:-1px}.mat-fab{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible;transform:translate3d(0, 0, 0);transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);min-width:0;border-radius:50%;width:56px;height:56px;padding:0;flex-shrink:0}.mat-fab::-moz-focus-inner{border:0}.mat-fab.mat-button-disabled{cursor:default}.mat-fab.cdk-keyboard-focused .mat-button-focus-overlay,.mat-fab.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-fab::-moz-focus-inner{border:0}._mat-animation-noopable.mat-fab{transition:none;animation:none}.mat-fab .mat-button-wrapper{padding:16px 0;display:inline-block;line-height:24px}.mat-mini-fab{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible;transform:translate3d(0, 0, 0);transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);min-width:0;border-radius:50%;width:40px;height:40px;padding:0;flex-shrink:0}.mat-mini-fab::-moz-focus-inner{border:0}.mat-mini-fab.mat-button-disabled{cursor:default}.mat-mini-fab.cdk-keyboard-focused .mat-button-focus-overlay,.mat-mini-fab.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-mini-fab::-moz-focus-inner{border:0}._mat-animation-noopable.mat-mini-fab{transition:none;animation:none}.mat-mini-fab .mat-button-wrapper{padding:8px 0;display:inline-block;line-height:24px}.mat-icon-button{padding:0;min-width:0;width:40px;height:40px;flex-shrink:0;line-height:40px;border-radius:50%}.mat-icon-button i,.mat-icon-button .mat-icon{line-height:24px}.mat-button-ripple.mat-ripple,.mat-button-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-button-ripple.mat-ripple:not(:empty){transform:translateZ(0)}.mat-button-focus-overlay{opacity:0;transition:opacity 200ms cubic-bezier(0.35, 0, 0.25, 1),background-color 200ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable .mat-button-focus-overlay{transition:none}.mat-button-ripple-round{border-radius:50%;z-index:1}.mat-button .mat-button-wrapper>*,.mat-flat-button .mat-button-wrapper>*,.mat-stroked-button .mat-button-wrapper>*,.mat-raised-button .mat-button-wrapper>*,.mat-icon-button .mat-button-wrapper>*,.mat-fab .mat-button-wrapper>*,.mat-mini-fab .mat-button-wrapper>*{vertical-align:middle}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button{display:inline-flex;justify-content:center;align-items:center;font-size:inherit;width:2.5em;height:2.5em}.cdk-high-contrast-active .mat-button,.cdk-high-contrast-active .mat-flat-button,.cdk-high-contrast-active .mat-raised-button,.cdk-high-contrast-active .mat-icon-button,.cdk-high-contrast-active .mat-fab,.cdk-high-contrast-active .mat-mini-fab{outline:solid 1px}.cdk-high-contrast-active .mat-button-base.cdk-keyboard-focused,.cdk-high-contrast-active .mat-button-base.cdk-program-focused{outline:solid 3px}\n"]
          }]
        }], function () {
          return [{
            type: _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_2__["FocusMonitor"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_3__["ANIMATION_MODULE_TYPE"]]
            }]
          }];
        }, {
          tabIndex: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var MatButtonModule = function MatButtonModule() {
        _classCallCheck2(this, MatButtonModule);
      };

      MatButtonModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: MatButtonModule
      });
      MatButtonModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function MatButtonModule_Factory(t) {
          return new (t || MatButtonModule)();
        },
        imports: [[_angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MatRippleModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MatCommonModule"]], _angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MatCommonModule"]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](MatButtonModule, {
          declarations: function declarations() {
            return [MatButton, MatAnchor];
          },
          imports: function imports() {
            return [_angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MatRippleModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MatCommonModule"]];
          },
          exports: function exports() {
            return [MatButton, MatAnchor, _angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MatCommonModule"]];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MatButtonModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            imports: [_angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MatRippleModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MatCommonModule"]],
            exports: [MatButton, MatAnchor, _angular_material_core__WEBPACK_IMPORTED_MODULE_1__["MatCommonModule"]],
            declarations: [MatButton, MatAnchor]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=button.js.map

      /***/

    },

    /***/
    "bWWN":
    /*!****************************************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/date-time-picker-trigger.directive.js ***!
      \****************************************************************************************************/

    /*! exports provided: OwlDateTimeTriggerDirective */

    /***/
    function bWWN(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OwlDateTimeTriggerDirective", function () {
        return OwlDateTimeTriggerDirective;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _date_time_picker_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./date-time-picker.component */
      "7hDX");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! rxjs */
      "qCKp");

      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var __metadata = undefined && undefined.__metadata || function (k, v) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
      };

      var OwlDateTimeTriggerDirective = function () {
        function OwlDateTimeTriggerDirective(changeDetector) {
          this.changeDetector = changeDetector;
          this.stateChanges = rxjs__WEBPACK_IMPORTED_MODULE_2__["Subscription"].EMPTY;
        }

        Object.defineProperty(OwlDateTimeTriggerDirective.prototype, "disabled", {
          get: function get() {
            return this._disabled === undefined ? this.dtPicker.disabled : !!this._disabled;
          },
          set: function set(value) {
            this._disabled = value;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeTriggerDirective.prototype, "owlDTTriggerDisabledClass", {
          get: function get() {
            return this.disabled;
          },
          enumerable: true,
          configurable: true
        });

        OwlDateTimeTriggerDirective.prototype.ngOnInit = function () {};

        OwlDateTimeTriggerDirective.prototype.ngOnChanges = function (changes) {
          if (changes.datepicker) {
            this.watchStateChanges();
          }
        };

        OwlDateTimeTriggerDirective.prototype.ngAfterContentInit = function () {
          this.watchStateChanges();
        };

        OwlDateTimeTriggerDirective.prototype.ngOnDestroy = function () {
          this.stateChanges.unsubscribe();
        };

        OwlDateTimeTriggerDirective.prototype.handleClickOnHost = function (event) {
          if (this.dtPicker) {
            this.dtPicker.open();
            event.stopPropagation();
          }
        };

        OwlDateTimeTriggerDirective.prototype.watchStateChanges = function () {
          var _this = this;

          this.stateChanges.unsubscribe();
          var inputDisabled = this.dtPicker && this.dtPicker.dtInput ? this.dtPicker.dtInput.disabledChange : Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])();
          var pickerDisabled = this.dtPicker ? this.dtPicker.disabledChange : Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])();
          this.stateChanges = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["merge"])(pickerDisabled, inputDisabled).subscribe(function () {
            _this.changeDetector.markForCheck();
          });
        };

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])('owlDateTimeTrigger'), __metadata("design:type", _date_time_picker_component__WEBPACK_IMPORTED_MODULE_1__["OwlDateTimeComponent"])], OwlDateTimeTriggerDirective.prototype, "dtPicker", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Boolean), __metadata("design:paramtypes", [Boolean])], OwlDateTimeTriggerDirective.prototype, "disabled", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('class.owl-dt-trigger-disabled'), __metadata("design:type", Boolean), __metadata("design:paramtypes", [])], OwlDateTimeTriggerDirective.prototype, "owlDTTriggerDisabledClass", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"])('click', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [Event]), __metadata("design:returntype", void 0)], OwlDateTimeTriggerDirective.prototype, "handleClickOnHost", null);

        OwlDateTimeTriggerDirective = __decorate([__metadata("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]])], OwlDateTimeTriggerDirective);

        OwlDateTimeTriggerDirective.ɵfac = function OwlDateTimeTriggerDirective_Factory(t) {
          return new (t || OwlDateTimeTriggerDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]));
        };

        OwlDateTimeTriggerDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
          type: OwlDateTimeTriggerDirective,
          selectors: [["", "owlDateTimeTrigger", ""]],
          hostVars: 2,
          hostBindings: function OwlDateTimeTriggerDirective_HostBindings(rf, ctx) {
            if (rf & 1) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function OwlDateTimeTriggerDirective_click_HostBindingHandler($event) {
                return ctx.handleClickOnHost($event);
              });
            }

            if (rf & 2) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("owl-dt-trigger-disabled", ctx.owlDTTriggerDisabledClass);
            }
          },
          inputs: {
            disabled: "disabled",
            dtPicker: ["owlDateTimeTrigger", "dtPicker"]
          },
          features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
        });

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](OwlDateTimeTriggerDirective, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
            args: [{
              selector: '[owlDateTimeTrigger]'
            }]
          }], function () {
            return [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
            }];
          }, {
            disabled: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            owlDTTriggerDisabledClass: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['class.owl-dt-trigger-disabled']
            }],
            handleClickOnHost: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
              args: ['click', ['$event']]
            }],
            dtPicker: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
              args: ['owlDateTimeTrigger']
            }]
          });
        })();

        return OwlDateTimeTriggerDirective;
      }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64, 

      /***/

    },

    /***/
    "bXm7":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/kk.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function bXm7(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Kazakh [kk]
      //! authors : Nurlan Rakhimzhanov : https://github.com/nurlan
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var suffixes = {
          0: '-ші',
          1: '-ші',
          2: '-ші',
          3: '-ші',
          4: '-ші',
          5: '-ші',
          6: '-шы',
          7: '-ші',
          8: '-ші',
          9: '-шы',
          10: '-шы',
          20: '-шы',
          30: '-шы',
          40: '-шы',
          50: '-ші',
          60: '-шы',
          70: '-ші',
          80: '-ші',
          90: '-шы',
          100: '-ші'
        };
        var kk = moment.defineLocale('kk', {
          months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),
          monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),
          weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),
          weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),
          weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[Бүгін сағат] LT',
            nextDay: '[Ертең сағат] LT',
            nextWeek: 'dddd [сағат] LT',
            lastDay: '[Кеше сағат] LT',
            lastWeek: '[Өткен аптаның] dddd [сағат] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s ішінде',
            past: '%s бұрын',
            s: 'бірнеше секунд',
            ss: '%d секунд',
            m: 'бір минут',
            mm: '%d минут',
            h: 'бір сағат',
            hh: '%d сағат',
            d: 'бір күн',
            dd: '%d күн',
            M: 'бір ай',
            MM: '%d ай',
            y: 'бір жыл',
            yy: '%d жыл'
          },
          dayOfMonthOrdinalParse: /\d{1,2}-(ші|шы)/,
          ordinal: function ordinal(number) {
            var a = number % 10,
                b = number >= 100 ? 100 : null;
            return number + (suffixes[number] || suffixes[a] || suffixes[b]);
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return kk;
      });
      /***/

    },

    /***/
    "bYM6":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/ar-tn.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function bYM6(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale  :  Arabic (Tunisia) [ar-tn]
      //! author : Nader Toukabri : https://github.com/naderio
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var arTn = moment.defineLocale('ar-tn', {
          months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
          monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
          weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
          weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
          weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[اليوم على الساعة] LT',
            nextDay: '[غدا على الساعة] LT',
            nextWeek: 'dddd [على الساعة] LT',
            lastDay: '[أمس على الساعة] LT',
            lastWeek: 'dddd [على الساعة] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'في %s',
            past: 'منذ %s',
            s: 'ثوان',
            ss: '%d ثانية',
            m: 'دقيقة',
            mm: '%d دقائق',
            h: 'ساعة',
            hh: '%d ساعات',
            d: 'يوم',
            dd: '%d أيام',
            M: 'شهر',
            MM: '%d أشهر',
            y: 'سنة',
            yy: '%d سنوات'
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return arTn;
      });
      /***/

    },

    /***/
    "bnYj":
    /*!********************************************!*\
      !*** ./node_modules/aws-sdk/lib/config.js ***!
      \********************************************/

    /*! no static exports found */

    /***/
    function bnYj(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ./core */
      "QsWE");

      __webpack_require__(
      /*! ./credentials */
      "8loY");

      __webpack_require__(
      /*! ./credentials/credential_provider_chain */
      "u8bp");

      var PromisesDependency;
      /**
       * The main configuration class used by all service objects to set
       * the region, credentials, and other options for requests.
       *
       * By default, credentials and region settings are left unconfigured.
       * This should be configured by the application before using any
       * AWS service APIs.
       *
       * In order to set global configuration options, properties should
       * be assigned to the global {AWS.config} object.
       *
       * @see AWS.config
       *
       * @!group General Configuration Options
       *
       * @!attribute credentials
       *   @return [AWS.Credentials] the AWS credentials to sign requests with.
       *
       * @!attribute region
       *   @example Set the global region setting to us-west-2
       *     AWS.config.update({region: 'us-west-2'});
       *   @return [AWS.Credentials] The region to send service requests to.
       *   @see http://docs.amazonwebservices.com/general/latest/gr/rande.html
       *     A list of available endpoints for each AWS service
       *
       * @!attribute maxRetries
       *   @return [Integer] the maximum amount of retries to perform for a
       *     service request. By default this value is calculated by the specific
       *     service object that the request is being made to.
       *
       * @!attribute maxRedirects
       *   @return [Integer] the maximum amount of redirects to follow for a
       *     service request. Defaults to 10.
       *
       * @!attribute paramValidation
       *   @return [Boolean|map] whether input parameters should be validated against
       *     the operation description before sending the request. Defaults to true.
       *     Pass a map to enable any of the following specific validation features:
       *
       *     * **min** [Boolean] &mdash; Validates that a value meets the min
       *       constraint. This is enabled by default when paramValidation is set
       *       to `true`.
       *     * **max** [Boolean] &mdash; Validates that a value meets the max
       *       constraint.
       *     * **pattern** [Boolean] &mdash; Validates that a string value matches a
       *       regular expression.
       *     * **enum** [Boolean] &mdash; Validates that a string value matches one
       *       of the allowable enum values.
       *
       * @!attribute computeChecksums
       *   @return [Boolean] whether to compute checksums for payload bodies when
       *     the service accepts it (currently supported in S3 only).
       *
       * @!attribute convertResponseTypes
       *   @return [Boolean] whether types are converted when parsing response data.
       *     Currently only supported for JSON based services. Turning this off may
       *     improve performance on large response payloads. Defaults to `true`.
       *
       * @!attribute correctClockSkew
       *   @return [Boolean] whether to apply a clock skew correction and retry
       *     requests that fail because of an skewed client clock. Defaults to
       *     `false`.
       *
       * @!attribute sslEnabled
       *   @return [Boolean] whether SSL is enabled for requests
       *
       * @!attribute s3ForcePathStyle
       *   @return [Boolean] whether to force path style URLs for S3 objects
       *
       * @!attribute s3BucketEndpoint
       *   @note Setting this configuration option requires an `endpoint` to be
       *     provided explicitly to the service constructor.
       *   @return [Boolean] whether the provided endpoint addresses an individual
       *     bucket (false if it addresses the root API endpoint).
       *
       * @!attribute s3DisableBodySigning
       *   @return [Boolean] whether to disable S3 body signing when using signature version `v4`.
       *     Body signing can only be disabled when using https. Defaults to `true`.
       *
       * @!attribute s3UsEast1RegionalEndpoint
       *   @return ['legacy'|'regional'] when region is set to 'us-east-1', whether to send s3
       *     request to global endpoints or 'us-east-1' regional endpoints. This config is only
       *     applicable to S3 client;
       *     Defaults to 'legacy'
       * @!attribute s3UseArnRegion
       *   @return [Boolean] whether to override the request region with the region inferred
       *     from requested resource's ARN. Only available for S3 buckets
       *     Defaults to `true`
       *
       * @!attribute useAccelerateEndpoint
       *   @note This configuration option is only compatible with S3 while accessing
       *     dns-compatible buckets.
       *   @return [Boolean] Whether to use the Accelerate endpoint with the S3 service.
       *     Defaults to `false`.
       *
       * @!attribute retryDelayOptions
       *   @example Set the base retry delay for all services to 300 ms
       *     AWS.config.update({retryDelayOptions: {base: 300}});
       *     // Delays with maxRetries = 3: 300, 600, 1200
       *   @example Set a custom backoff function to provide delay values on retries
       *     AWS.config.update({retryDelayOptions: {customBackoff: function(retryCount, err) {
       *       // returns delay in ms
       *     }}});
       *   @return [map] A set of options to configure the retry delay on retryable errors.
       *     Currently supported options are:
       *
       *     * **base** [Integer] &mdash; The base number of milliseconds to use in the
       *       exponential backoff for operation retries. Defaults to 100 ms for all services except
       *       DynamoDB, where it defaults to 50ms.
       *
       *     * **customBackoff ** [function] &mdash; A custom function that accepts a
       *       retry count and error and returns the amount of time to delay in
       *       milliseconds. If the result is a non-zero negative value, no further
       *       retry attempts will be made. The `base` option will be ignored if this
       *       option is supplied. The function is only called for retryable errors.
       *
       * @!attribute httpOptions
       *   @return [map] A set of options to pass to the low-level HTTP request.
       *     Currently supported options are:
       *
       *     * **proxy** [String] &mdash; the URL to proxy requests through
       *     * **agent** [http.Agent, https.Agent] &mdash; the Agent object to perform
       *       HTTP requests with. Used for connection pooling. Note that for
       *       SSL connections, a special Agent object is used in order to enable
       *       peer certificate verification. This feature is only supported in the
       *       Node.js environment.
       *     * **connectTimeout** [Integer] &mdash; Sets the socket to timeout after
       *       failing to establish a connection with the server after
       *       `connectTimeout` milliseconds. This timeout has no effect once a socket
       *       connection has been established.
       *     * **timeout** [Integer] &mdash; The number of milliseconds a request can
       *       take before automatically being terminated.
       *       Defaults to two minutes (120000).
       *     * **xhrAsync** [Boolean] &mdash; Whether the SDK will send asynchronous
       *       HTTP requests. Used in the browser environment only. Set to false to
       *       send requests synchronously. Defaults to true (async on).
       *     * **xhrWithCredentials** [Boolean] &mdash; Sets the "withCredentials"
       *       property of an XMLHttpRequest object. Used in the browser environment
       *       only. Defaults to false.
       * @!attribute logger
       *   @return [#write,#log] an object that responds to .write() (like a stream)
       *     or .log() (like the console object) in order to log information about
       *     requests
       *
       * @!attribute systemClockOffset
       *   @return [Number] an offset value in milliseconds to apply to all signing
       *     times. Use this to compensate for clock skew when your system may be
       *     out of sync with the service time. Note that this configuration option
       *     can only be applied to the global `AWS.config` object and cannot be
       *     overridden in service-specific configuration. Defaults to 0 milliseconds.
       *
       * @!attribute signatureVersion
       *   @return [String] the signature version to sign requests with (overriding
       *     the API configuration). Possible values are: 'v2', 'v3', 'v4'.
       *
       * @!attribute signatureCache
       *   @return [Boolean] whether the signature to sign requests with (overriding
       *     the API configuration) is cached. Only applies to the signature version 'v4'.
       *     Defaults to `true`.
       *
       * @!attribute endpointDiscoveryEnabled
       *   @return [Boolean|undefined] whether to call operations with endpoints
       *     given by service dynamically. Setting this config to `true` will enable
       *     endpoint discovery for all applicable operations. Setting it to `false`
       *     will explicitly disable endpoint discovery even though operations that
       *     require endpoint discovery will presumably fail. Leaving it to
       *     `undefined` means SDK only do endpoint discovery when it's required.
       *     Defaults to `undefined`
       *
       * @!attribute endpointCacheSize
       *   @return [Number] the size of the global cache storing endpoints from endpoint
       *     discovery operations. Once endpoint cache is created, updating this setting
       *     cannot change existing cache size.
       *     Defaults to 1000
       *
       * @!attribute hostPrefixEnabled
       *   @return [Boolean] whether to marshal request parameters to the prefix of
       *     hostname. Defaults to `true`.
       *
       * @!attribute stsRegionalEndpoints
       *   @return ['legacy'|'regional'] whether to send sts request to global endpoints or
       *     regional endpoints.
       *     Defaults to 'legacy'
       */

      AWS.Config = AWS.util.inherit({
        /**
         * @!endgroup
         */

        /**
         * Creates a new configuration object. This is the object that passes
         * option data along to service requests, including credentials, security,
         * region information, and some service specific settings.
         *
         * @example Creating a new configuration object with credentials and region
         *   var config = new AWS.Config({
         *     accessKeyId: 'AKID', secretAccessKey: 'SECRET', region: 'us-west-2'
         *   });
         * @option options accessKeyId [String] your AWS access key ID.
         * @option options secretAccessKey [String] your AWS secret access key.
         * @option options sessionToken [AWS.Credentials] the optional AWS
         *   session token to sign requests with.
         * @option options credentials [AWS.Credentials] the AWS credentials
         *   to sign requests with. You can either specify this object, or
         *   specify the accessKeyId and secretAccessKey options directly.
         * @option options credentialProvider [AWS.CredentialProviderChain] the
         *   provider chain used to resolve credentials if no static `credentials`
         *   property is set.
         * @option options region [String] the region to send service requests to.
         *   See {region} for more information.
         * @option options maxRetries [Integer] the maximum amount of retries to
         *   attempt with a request. See {maxRetries} for more information.
         * @option options maxRedirects [Integer] the maximum amount of redirects to
         *   follow with a request. See {maxRedirects} for more information.
         * @option options sslEnabled [Boolean] whether to enable SSL for
         *   requests.
         * @option options paramValidation [Boolean|map] whether input parameters
         *   should be validated against the operation description before sending
         *   the request. Defaults to true. Pass a map to enable any of the
         *   following specific validation features:
         *
         *   * **min** [Boolean] &mdash; Validates that a value meets the min
         *     constraint. This is enabled by default when paramValidation is set
         *     to `true`.
         *   * **max** [Boolean] &mdash; Validates that a value meets the max
         *     constraint.
         *   * **pattern** [Boolean] &mdash; Validates that a string value matches a
         *     regular expression.
         *   * **enum** [Boolean] &mdash; Validates that a string value matches one
         *     of the allowable enum values.
         * @option options computeChecksums [Boolean] whether to compute checksums
         *   for payload bodies when the service accepts it (currently supported
         *   in S3 only)
         * @option options convertResponseTypes [Boolean] whether types are converted
         *     when parsing response data. Currently only supported for JSON based
         *     services. Turning this off may improve performance on large response
         *     payloads. Defaults to `true`.
         * @option options correctClockSkew [Boolean] whether to apply a clock skew
         *     correction and retry requests that fail because of an skewed client
         *     clock. Defaults to `false`.
         * @option options s3ForcePathStyle [Boolean] whether to force path
         *   style URLs for S3 objects.
         * @option options s3BucketEndpoint [Boolean] whether the provided endpoint
         *   addresses an individual bucket (false if it addresses the root API
         *   endpoint). Note that setting this configuration option requires an
         *   `endpoint` to be provided explicitly to the service constructor.
         * @option options s3DisableBodySigning [Boolean] whether S3 body signing
         *   should be disabled when using signature version `v4`. Body signing
         *   can only be disabled when using https. Defaults to `true`.
         * @option options s3UsEast1RegionalEndpoint ['legacy'|'regional'] when region
         *   is set to 'us-east-1', whether to send s3 request to global endpoints or
         *   'us-east-1' regional endpoints. This config is only applicable to S3 client.
         *   Defaults to `legacy`
         * @option options s3UseArnRegion [Boolean] whether to override the request region
         *   with the region inferred from requested resource's ARN. Only available for S3 buckets
         *   Defaults to `true`
         *
         * @option options retryDelayOptions [map] A set of options to configure
         *   the retry delay on retryable errors. Currently supported options are:
         *
         *   * **base** [Integer] &mdash; The base number of milliseconds to use in the
         *     exponential backoff for operation retries. Defaults to 100 ms for all
         *     services except DynamoDB, where it defaults to 50ms.
         *   * **customBackoff ** [function] &mdash; A custom function that accepts a
         *     retry count and error and returns the amount of time to delay in
         *     milliseconds. If the result is a non-zero negative value, no further
         *     retry attempts will be made. The `base` option will be ignored if this
         *     option is supplied. The function is only called for retryable errors.
         * @option options httpOptions [map] A set of options to pass to the low-level
         *   HTTP request. Currently supported options are:
         *
         *   * **proxy** [String] &mdash; the URL to proxy requests through
         *   * **agent** [http.Agent, https.Agent] &mdash; the Agent object to perform
         *     HTTP requests with. Used for connection pooling. Defaults to the global
         *     agent (`http.globalAgent`) for non-SSL connections. Note that for
         *     SSL connections, a special Agent object is used in order to enable
         *     peer certificate verification. This feature is only available in the
         *     Node.js environment.
         *   * **connectTimeout** [Integer] &mdash; Sets the socket to timeout after
         *     failing to establish a connection with the server after
         *     `connectTimeout` milliseconds. This timeout has no effect once a socket
         *     connection has been established.
         *   * **timeout** [Integer] &mdash; Sets the socket to timeout after timeout
         *     milliseconds of inactivity on the socket. Defaults to two minutes
         *     (120000).
         *   * **xhrAsync** [Boolean] &mdash; Whether the SDK will send asynchronous
         *     HTTP requests. Used in the browser environment only. Set to false to
         *     send requests synchronously. Defaults to true (async on).
         *   * **xhrWithCredentials** [Boolean] &mdash; Sets the "withCredentials"
         *     property of an XMLHttpRequest object. Used in the browser environment
         *     only. Defaults to false.
         * @option options apiVersion [String, Date] a String in YYYY-MM-DD format
         *   (or a date) that represents the latest possible API version that can be
         *   used in all services (unless overridden by `apiVersions`). Specify
         *   'latest' to use the latest possible version.
         * @option options apiVersions [map<String, String|Date>] a map of service
         *   identifiers (the lowercase service class name) with the API version to
         *   use when instantiating a service. Specify 'latest' for each individual
         *   that can use the latest available version.
         * @option options logger [#write,#log] an object that responds to .write()
         *   (like a stream) or .log() (like the console object) in order to log
         *   information about requests
         * @option options systemClockOffset [Number] an offset value in milliseconds
         *   to apply to all signing times. Use this to compensate for clock skew
         *   when your system may be out of sync with the service time. Note that
         *   this configuration option can only be applied to the global `AWS.config`
         *   object and cannot be overridden in service-specific configuration.
         *   Defaults to 0 milliseconds.
         * @option options signatureVersion [String] the signature version to sign
         *   requests with (overriding the API configuration). Possible values are:
         *   'v2', 'v3', 'v4'.
         * @option options signatureCache [Boolean] whether the signature to sign
         *   requests with (overriding the API configuration) is cached. Only applies
         *   to the signature version 'v4'. Defaults to `true`.
         * @option options dynamoDbCrc32 [Boolean] whether to validate the CRC32
         *   checksum of HTTP response bodies returned by DynamoDB. Default: `true`.
         * @option options useAccelerateEndpoint [Boolean] Whether to use the
         *   S3 Transfer Acceleration endpoint with the S3 service. Default: `false`.
         * @option options clientSideMonitoring [Boolean] whether to collect and
         *   publish this client's performance metrics of all its API requests.
         * @option options endpointDiscoveryEnabled [Boolean|undefined] whether to
         *   call operations with endpoints given by service dynamically. Setting this
         * config to `true` will enable endpoint discovery for all applicable operations.
         *   Setting it to `false` will explicitly disable endpoint discovery even though
         *   operations that require endpoint discovery will presumably fail. Leaving it
         *   to `undefined` means SDK will only do endpoint discovery when it's required.
         *   Defaults to `undefined`
         * @option options endpointCacheSize [Number] the size of the global cache storing
         *   endpoints from endpoint discovery operations. Once endpoint cache is created,
         *   updating this setting cannot change existing cache size.
         *   Defaults to 1000
         * @option options hostPrefixEnabled [Boolean] whether to marshal request
         *   parameters to the prefix of hostname.
         *   Defaults to `true`.
         * @option options stsRegionalEndpoints ['legacy'|'regional'] whether to send sts request
         *   to global endpoints or regional endpoints.
         *   Defaults to 'legacy'.
         */
        constructor: function Config(options) {
          if (options === undefined) options = {};
          options = this.extractCredentials(options);
          AWS.util.each.call(this, this.keys, function (key, value) {
            this.set(key, options[key], value);
          });
        },

        /**
         * @!group Managing Credentials
         */

        /**
         * Loads credentials from the configuration object. This is used internally
         * by the SDK to ensure that refreshable {Credentials} objects are properly
         * refreshed and loaded when sending a request. If you want to ensure that
         * your credentials are loaded prior to a request, you can use this method
         * directly to provide accurate credential data stored in the object.
         *
         * @note If you configure the SDK with static or environment credentials,
         *   the credential data should already be present in {credentials} attribute.
         *   This method is primarily necessary to load credentials from asynchronous
         *   sources, or sources that can refresh credentials periodically.
         * @example Getting your access key
         *   AWS.config.getCredentials(function(err) {
         *     if (err) console.log(err.stack); // credentials not loaded
         *     else console.log("Access Key:", AWS.config.credentials.accessKeyId);
         *   })
         * @callback callback function(err)
         *   Called when the {credentials} have been properly set on the configuration
         *   object.
         *
         *   @param err [Error] if this is set, credentials were not successfully
         *     loaded and this error provides information why.
         * @see credentials
         * @see Credentials
         */
        getCredentials: function getCredentials(callback) {
          var self = this;

          function finish(err) {
            callback(err, err ? null : self.credentials);
          }

          function credError(msg, err) {
            return new AWS.util.error(err || new Error(), {
              code: 'CredentialsError',
              message: msg,
              name: 'CredentialsError'
            });
          }

          function getAsyncCredentials() {
            self.credentials.get(function (err) {
              if (err) {
                var msg = 'Could not load credentials from ' + self.credentials.constructor.name;
                err = credError(msg, err);
              }

              finish(err);
            });
          }

          function getStaticCredentials() {
            var err = null;

            if (!self.credentials.accessKeyId || !self.credentials.secretAccessKey) {
              err = credError('Missing credentials');
            }

            finish(err);
          }

          if (self.credentials) {
            if (typeof self.credentials.get === 'function') {
              getAsyncCredentials();
            } else {
              // static credentials
              getStaticCredentials();
            }
          } else if (self.credentialProvider) {
            self.credentialProvider.resolve(function (err, creds) {
              if (err) {
                err = credError('Could not load credentials from any providers', err);
              }

              self.credentials = creds;
              finish(err);
            });
          } else {
            finish(credError('No credentials to load'));
          }
        },

        /**
         * @!group Loading and Setting Configuration Options
         */

        /**
         * @overload update(options, allowUnknownKeys = false)
         *   Updates the current configuration object with new options.
         *
         *   @example Update maxRetries property of a configuration object
         *     config.update({maxRetries: 10});
         *   @param [Object] options a map of option keys and values.
         *   @param [Boolean] allowUnknownKeys whether unknown keys can be set on
         *     the configuration object. Defaults to `false`.
         *   @see constructor
         */
        update: function update(options, allowUnknownKeys) {
          allowUnknownKeys = allowUnknownKeys || false;
          options = this.extractCredentials(options);
          AWS.util.each.call(this, options, function (key, value) {
            if (allowUnknownKeys || Object.prototype.hasOwnProperty.call(this.keys, key) || AWS.Service.hasService(key)) {
              this.set(key, value);
            }
          });
        },

        /**
         * Loads configuration data from a JSON file into this config object.
         * @note Loading configuration will reset all existing configuration
         *   on the object.
         * @!macro nobrowser
         * @param path [String] the path relative to your process's current
         *    working directory to load configuration from.
         * @return [AWS.Config] the same configuration object
         */
        loadFromPath: function loadFromPath(path) {
          this.clear();
          var options = JSON.parse(AWS.util.readFileSync(path));
          var fileSystemCreds = new AWS.FileSystemCredentials(path);
          var chain = new AWS.CredentialProviderChain();
          chain.providers.unshift(fileSystemCreds);
          chain.resolve(function (err, creds) {
            if (err) throw err;else options.credentials = creds;
          });
          this.constructor(options);
          return this;
        },

        /**
         * Clears configuration data on this object
         *
         * @api private
         */
        clear: function clear() {
          /*jshint forin:false */
          AWS.util.each.call(this, this.keys, function (key) {
            delete this[key];
          }); // reset credential provider

          this.set('credentials', undefined);
          this.set('credentialProvider', undefined);
        },

        /**
         * Sets a property on the configuration object, allowing for a
         * default value
         * @api private
         */
        set: function set(property, value, defaultValue) {
          if (value === undefined) {
            if (defaultValue === undefined) {
              defaultValue = this.keys[property];
            }

            if (typeof defaultValue === 'function') {
              this[property] = defaultValue.call(this);
            } else {
              this[property] = defaultValue;
            }
          } else if (property === 'httpOptions' && this[property]) {
            // deep merge httpOptions
            this[property] = AWS.util.merge(this[property], value);
          } else {
            this[property] = value;
          }
        },

        /**
         * All of the keys with their default values.
         *
         * @constant
         * @api private
         */
        keys: {
          credentials: null,
          credentialProvider: null,
          region: null,
          logger: null,
          apiVersions: {},
          apiVersion: null,
          endpoint: undefined,
          httpOptions: {
            timeout: 120000
          },
          maxRetries: undefined,
          maxRedirects: 10,
          paramValidation: true,
          sslEnabled: true,
          s3ForcePathStyle: false,
          s3BucketEndpoint: false,
          s3DisableBodySigning: true,
          s3UsEast1RegionalEndpoint: 'legacy',
          s3UseArnRegion: undefined,
          computeChecksums: true,
          convertResponseTypes: true,
          correctClockSkew: false,
          customUserAgent: null,
          dynamoDbCrc32: true,
          systemClockOffset: 0,
          signatureVersion: null,
          signatureCache: true,
          retryDelayOptions: {},
          useAccelerateEndpoint: false,
          clientSideMonitoring: false,
          endpointDiscoveryEnabled: undefined,
          endpointCacheSize: 1000,
          hostPrefixEnabled: true,
          stsRegionalEndpoints: 'legacy'
        },

        /**
         * Extracts accessKeyId, secretAccessKey and sessionToken
         * from a configuration hash.
         *
         * @api private
         */
        extractCredentials: function extractCredentials(options) {
          if (options.accessKeyId && options.secretAccessKey) {
            options = AWS.util.copy(options);
            options.credentials = new AWS.Credentials(options);
          }

          return options;
        },

        /**
         * Sets the promise dependency the SDK will use wherever Promises are returned.
         * Passing `null` will force the SDK to use native Promises if they are available.
         * If native Promises are not available, passing `null` will have no effect.
         * @param [Constructor] dep A reference to a Promise constructor
         */
        setPromisesDependency: function setPromisesDependency(dep) {
          PromisesDependency = dep; // if null was passed in, we should try to use native promises

          if (dep === null && typeof Promise === 'function') {
            PromisesDependency = Promise;
          }

          var constructors = [AWS.Request, AWS.Credentials, AWS.CredentialProviderChain];

          if (AWS.S3) {
            constructors.push(AWS.S3);

            if (AWS.S3.ManagedUpload) {
              constructors.push(AWS.S3.ManagedUpload);
            }
          }

          AWS.util.addPromises(constructors, PromisesDependency);
        },

        /**
         * Gets the promise dependency set by `AWS.config.setPromisesDependency`.
         */
        getPromisesDependency: function getPromisesDependency() {
          return PromisesDependency;
        }
      });
      /**
       * @return [AWS.Config] The global configuration object singleton instance
       * @readonly
       * @see AWS.Config
       */

      AWS.config = new AWS.Config();
      /***/
    },

    /***/
    "bpih":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/it.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function bpih(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Italian [it]
      //! author : Lorenzo : https://github.com/aliem
      //! author: Mattia Larentis: https://github.com/nostalgiaz
      //! author: Marco : https://github.com/Manfre98
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var it = moment.defineLocale('it', {
          months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),
          monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
          weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),
          weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
          weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: function sameDay() {
              return '[Oggi a' + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + ']LT';
            },
            nextDay: function nextDay() {
              return '[Domani a' + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + ']LT';
            },
            nextWeek: function nextWeek() {
              return 'dddd [a' + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + ']LT';
            },
            lastDay: function lastDay() {
              return '[Ieri a' + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + ']LT';
            },
            lastWeek: function lastWeek() {
              switch (this.day()) {
                case 0:
                  return '[La scorsa] dddd [a' + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + ']LT';

                default:
                  return '[Lo scorso] dddd [a' + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + ']LT';
              }
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: 'tra %s',
            past: '%s fa',
            s: 'alcuni secondi',
            ss: '%d secondi',
            m: 'un minuto',
            mm: '%d minuti',
            h: "un'ora",
            hh: '%d ore',
            d: 'un giorno',
            dd: '%d giorni',
            w: 'una settimana',
            ww: '%d settimane',
            M: 'un mese',
            MM: '%d mesi',
            y: 'un anno',
            yy: '%d anni'
          },
          dayOfMonthOrdinalParse: /\d{1,2}º/,
          ordinal: '%dº',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return it;
      });
      /***/

    },

    /***/
    "bquJ":
    /*!******************************************************************************************!*\
      !*** ./node_modules/@ngx-formly/bootstrap/__ivy_ngcc__/fesm2015/ngx-formly-bootstrap.js ***!
      \******************************************************************************************/

    /*! exports provided: FormlyBootstrapModule, FormlyFieldCheckbox, FormlyFieldMultiCheckbox, FormlyFieldInput, FormlyFieldRadio, FormlyFieldTextArea, FormlyFieldSelect, FormlyWrapperFormField, ɵb, ɵa */

    /***/
    function bquJ(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormlyBootstrapModule", function () {
        return FormlyBootstrapModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormlyFieldCheckbox", function () {
        return FormlyFieldCheckbox;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormlyFieldMultiCheckbox", function () {
        return FormlyFieldMultiCheckbox;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormlyFieldInput", function () {
        return FormlyFieldInput;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormlyFieldRadio", function () {
        return FormlyFieldRadio;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormlyFieldTextArea", function () {
        return FormlyFieldTextArea;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormlyFieldSelect", function () {
        return FormlyFieldSelect;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormlyWrapperFormField", function () {
        return FormlyWrapperFormField;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵb", function () {
        return BOOTSTRAP_FORMLY_CONFIG;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵa", function () {
        return FIELD_TYPE_COMPONENTS;
      });
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_forms__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/forms */
      "3Pt+");
      /* harmony import */


      var _ngx_formly_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @ngx-formly/core */
      "0FS3");
      /* harmony import */


      var _ngx_formly_core_select__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @ngx-formly/core/select */
      "oKox");
      /* harmony import */


      var _ngx_formly_bootstrap_addons__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! @ngx-formly/bootstrap/addons */
      "85ns");
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      function FormlyFieldCheckbox_label_2_span_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1, "*");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }
      }

      function FormlyFieldCheckbox_label_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "label", 3);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](2, FormlyFieldCheckbox_label_2_span_2_Template, 2, 0, "span", 4);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassProp"]("form-check-label", ctx_r0.to.formCheck.indexOf("custom") === -1)("custom-control-label", ctx_r0.to.formCheck.indexOf("custom") === 0);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("for", ctx_r0.id);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"](" ", ctx_r0.to.label, " ");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx_r0.to.required && ctx_r0.to.hideRequiredMarker !== true);
        }
      }

      var _c0 = function _c0(a0, a1, a2, a3, a4, a5) {
        return {
          "form-check": a0,
          "form-check-inline": a1,
          "custom-control": a2,
          "custom-checkbox": a3,
          "custom-control-inline": a4,
          "custom-switch": a5
        };
      };

      function FormlyFieldMultiCheckbox_div_1_Template(rf, ctx) {
        if (rf & 1) {
          var _r4 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div", 1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "input", 2);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("change", function FormlyFieldMultiCheckbox_div_1_Template_input_change_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵrestoreView"](_r4);

            var option_r1 = ctx.$implicit;

            var ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

            return ctx_r3.onChange(option_r1.value, $event.target.checked);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](2, "label", 3);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var option_r1 = ctx.$implicit;
          var i_r2 = ctx.index;

          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpureFunction6"](15, _c0, ctx_r0.to.formCheck.indexOf("custom") === -1, ctx_r0.to.formCheck === "inline", ctx_r0.to.formCheck.indexOf("custom") === 0, ctx_r0.to.formCheck === "custom" || ctx_r0.to.formCheck === "custom-inline", ctx_r0.to.formCheck === "custom-inline", ctx_r0.to.formCheck === "custom-switch"));

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassProp"]("form-check-input", ctx_r0.to.formCheck.indexOf("custom") === -1)("custom-control-input", ctx_r0.to.formCheck.indexOf("custom") === 0);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("id", ctx_r0.id + "_" + i_r2)("value", option_r1.value)("checked", ctx_r0.isChecked(option_r1))("formlyAttributes", ctx_r0.field);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassProp"]("form-check-label", ctx_r0.to.formCheck.indexOf("custom") === -1)("custom-control-label", ctx_r0.to.formCheck.indexOf("custom") === 0);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("for", ctx_r0.id + "_" + i_r2);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"](" ", option_r1.label, " ");
        }
      }

      function FormlyFieldInput_input_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](0, "input", 2);
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassProp"]("is-invalid", ctx_r0.showError);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("type", ctx_r0.type)("formControl", ctx_r0.formControl)("formlyAttributes", ctx_r0.field);
        }
      }

      function FormlyFieldInput_ng_template_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](0, "input", 3);
        }

        if (rf & 2) {
          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassProp"]("is-invalid", ctx_r2.showError);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("formControl", ctx_r2.formControl)("formlyAttributes", ctx_r2.field);
        }
      }

      var _c1 = function _c1(a0, a1, a2, a3) {
        return {
          "form-check": a0,
          "form-check-inline": a1,
          "custom-control custom-radio": a2,
          "custom-control-inline": a3
        };
      };

      function FormlyFieldRadio_div_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div", 1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](1, "input", 2);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](2, "label", 3);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var option_r1 = ctx.$implicit;
          var i_r2 = ctx.index;

          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpureFunction4"](20, _c1, ctx_r0.to.formCheck.indexOf("custom") === -1, ctx_r0.to.formCheck === "inline", ctx_r0.to.formCheck.indexOf("custom") === 0, ctx_r0.to.formCheck === "custom-inline"));

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassProp"]("form-check-input", ctx_r0.to.formCheck.indexOf("custom") === -1)("custom-control-input", ctx_r0.to.formCheck.indexOf("custom") === 0)("is-invalid", ctx_r0.showError);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("id", ctx_r0.id + "_" + i_r2)("name", ctx_r0.field.name || ctx_r0.id)("value", option_r1.value)("formControl", ctx_r0.formControl)("formlyAttributes", ctx_r0.field);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵattribute"]("value", option_r1.value)("disabled", option_r1.disabled || ctx_r0.formControl.disabled ? true : null);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassProp"]("form-check-label", ctx_r0.to.formCheck.indexOf("custom") === -1)("custom-control-label", ctx_r0.to.formCheck.indexOf("custom") === 0);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("for", ctx_r0.id + "_" + i_r2);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"](" ", option_r1.label, " ");
        }
      }

      function FormlyFieldSelect_select_0_ng_container_1_ng_container_1_ng_container_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "option", 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerEnd"]();
        }

        if (rf & 2) {
          var opt_r9 = ctx.$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngValue", opt_r9.value)("disabled", opt_r9.disabled);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate"](opt_r9.label);
        }
      }

      function FormlyFieldSelect_select_0_ng_container_1_ng_container_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, FormlyFieldSelect_select_0_ng_container_1_ng_container_1_ng_container_1_Template, 3, 3, "ng-container", 6);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerEnd"]();
        }

        if (rf & 2) {
          var opts_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]().ngIf;

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngForOf", opts_r4);
        }
      }

      function FormlyFieldSelect_select_0_ng_container_1_ng_template_2_ng_container_0_option_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "option", 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var opt_r12 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]().$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngValue", opt_r12.value)("disabled", opt_r12.disabled);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate"](opt_r12.label);
        }
      }

      function FormlyFieldSelect_select_0_ng_container_1_ng_template_2_ng_container_0_ng_template_2_option_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "option", 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var child_r18 = ctx.$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngValue", child_r18.value)("disabled", child_r18.disabled);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"](" ", child_r18.label, " ");
        }
      }

      function FormlyFieldSelect_select_0_ng_container_1_ng_template_2_ng_container_0_ng_template_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "optgroup", 10);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, FormlyFieldSelect_select_0_ng_container_1_ng_template_2_ng_container_0_ng_template_2_option_1_Template, 2, 3, "option", 11);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var opt_r12 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]().$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("label", opt_r12.label);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngForOf", opt_r12.group);
        }
      }

      function FormlyFieldSelect_select_0_ng_container_1_ng_template_2_ng_container_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, FormlyFieldSelect_select_0_ng_container_1_ng_template_2_ng_container_0_option_1_Template, 2, 3, "option", 8);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](2, FormlyFieldSelect_select_0_ng_container_1_ng_template_2_ng_container_0_ng_template_2_Template, 2, 2, "ng-template", null, 9, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplateRefExtractor"]);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerEnd"]();
        }

        if (rf & 2) {
          var opt_r12 = ctx.$implicit;

          var _r14 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵreference"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", !opt_r12.group)("ngIfElse", _r14);
        }
      }

      function FormlyFieldSelect_select_0_ng_container_1_ng_template_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](0, FormlyFieldSelect_select_0_ng_container_1_ng_template_2_ng_container_0_Template, 4, 2, "ng-container", 6);
        }

        if (rf & 2) {
          var opts_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]().ngIf;

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngForOf", opts_r4);
        }
      }

      function FormlyFieldSelect_select_0_ng_container_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, FormlyFieldSelect_select_0_ng_container_1_ng_container_1_Template, 2, 1, "ng-container", 4);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](2, FormlyFieldSelect_select_0_ng_container_1_ng_template_2_Template, 1, 1, "ng-template", null, 5, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplateRefExtractor"]);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerEnd"]();
        }

        if (rf & 2) {
          var _r6 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵreference"](3);

          var ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx_r3.to._flatOptions)("ngIfElse", _r6);
        }
      }

      function FormlyFieldSelect_select_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "select", 2);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, FormlyFieldSelect_select_0_ng_container_1_Template, 4, 2, "ng-container", 3);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipe"](2, "async");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipe"](3, "formlySelectOptions");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassProp"]("custom-select", ctx_r0.to.customSelect)("is-invalid", ctx_r0.showError);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("formControl", ctx_r0.formControl)("compareWith", ctx_r0.to.compareWith)("formlyAttributes", ctx_r0.field);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipeBind1"](2, 8, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipeBind2"](3, 10, ctx_r0.to.options, ctx_r0.field)));
        }
      }

      function FormlyFieldSelect_ng_template_1_option_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "option", 14);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r21 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngValue", null);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate"](ctx_r21.to.placeholder);
        }
      }

      function FormlyFieldSelect_ng_template_1_ng_container_2_ng_container_1_ng_container_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "option", 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerEnd"]();
        }

        if (rf & 2) {
          var opt_r28 = ctx.$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngValue", opt_r28.value)("disabled", opt_r28.disabled);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate"](opt_r28.label);
        }
      }

      function FormlyFieldSelect_ng_template_1_ng_container_2_ng_container_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, FormlyFieldSelect_ng_template_1_ng_container_2_ng_container_1_ng_container_1_Template, 3, 3, "ng-container", 6);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerEnd"]();
        }

        if (rf & 2) {
          var opts_r23 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]().ngIf;

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngForOf", opts_r23);
        }
      }

      function FormlyFieldSelect_ng_template_1_ng_container_2_ng_template_2_ng_container_0_option_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "option", 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var opt_r31 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]().$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngValue", opt_r31.value)("disabled", opt_r31.disabled);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate"](opt_r31.label);
        }
      }

      function FormlyFieldSelect_ng_template_1_ng_container_2_ng_template_2_ng_container_0_ng_template_2_option_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "option", 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var child_r37 = ctx.$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngValue", child_r37.value)("disabled", child_r37.disabled);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"](" ", child_r37.label, " ");
        }
      }

      function FormlyFieldSelect_ng_template_1_ng_container_2_ng_template_2_ng_container_0_ng_template_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "optgroup", 10);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, FormlyFieldSelect_ng_template_1_ng_container_2_ng_template_2_ng_container_0_ng_template_2_option_1_Template, 2, 3, "option", 11);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var opt_r31 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]().$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("label", opt_r31.label);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngForOf", opt_r31.group);
        }
      }

      function FormlyFieldSelect_ng_template_1_ng_container_2_ng_template_2_ng_container_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, FormlyFieldSelect_ng_template_1_ng_container_2_ng_template_2_ng_container_0_option_1_Template, 2, 3, "option", 8);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](2, FormlyFieldSelect_ng_template_1_ng_container_2_ng_template_2_ng_container_0_ng_template_2_Template, 2, 2, "ng-template", null, 9, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplateRefExtractor"]);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerEnd"]();
        }

        if (rf & 2) {
          var opt_r31 = ctx.$implicit;

          var _r33 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵreference"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", !opt_r31.group)("ngIfElse", _r33);
        }
      }

      function FormlyFieldSelect_ng_template_1_ng_container_2_ng_template_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](0, FormlyFieldSelect_ng_template_1_ng_container_2_ng_template_2_ng_container_0_Template, 4, 2, "ng-container", 6);
        }

        if (rf & 2) {
          var opts_r23 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]().ngIf;

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngForOf", opts_r23);
        }
      }

      function FormlyFieldSelect_ng_template_1_ng_container_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, FormlyFieldSelect_ng_template_1_ng_container_2_ng_container_1_Template, 2, 1, "ng-container", 4);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](2, FormlyFieldSelect_ng_template_1_ng_container_2_ng_template_2_Template, 1, 1, "ng-template", null, 5, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplateRefExtractor"]);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerEnd"]();
        }

        if (rf & 2) {
          var _r25 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵreference"](3);

          var ctx_r22 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx_r22.to._flatOptions)("ngIfElse", _r25);
        }
      }

      function FormlyFieldSelect_ng_template_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "select", 12);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, FormlyFieldSelect_ng_template_1_option_1_Template, 2, 2, "option", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](2, FormlyFieldSelect_ng_template_1_ng_container_2_Template, 4, 2, "ng-container", 3);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipe"](3, "async");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipe"](4, "formlySelectOptions");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassProp"]("custom-select", ctx_r2.to.customSelect)("is-invalid", ctx_r2.showError);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("formControl", ctx_r2.formControl)("compareWith", ctx_r2.to.compareWith)("formlyAttributes", ctx_r2.field);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx_r2.to.placeholder);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipeBind1"](3, 9, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipeBind2"](4, 11, ctx_r2.to.options, ctx_r2.field)));
        }
      }

      function FormlyWrapperFormField_label_1_span_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1, "*");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }
      }

      function FormlyWrapperFormField_label_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "label");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](2, FormlyWrapperFormField_label_1_span_2_Template, 2, 0, "span", 1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵattribute"]("for", ctx_r0.id);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"](" ", ctx_r0.to.label, " ");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx_r0.to.required && ctx_r0.to.hideRequiredMarker !== true);
        }
      }

      function FormlyWrapperFormField_ng_template_2_Template(rf, ctx) {}

      function FormlyWrapperFormField_div_4_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div", 5);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](1, "formly-validation-message", 6);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵstyleProp"]("display", "block");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("field", ctx_r3.field);
        }
      }

      function FormlyWrapperFormField_small_5_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "small", 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate"](ctx_r4.to.description);
        }
      }

      var FormlyFieldCheckbox = /*#__PURE__*/function (_ngx_formly_core__WEB2) {
        _inherits2(FormlyFieldCheckbox, _ngx_formly_core__WEB2);

        var _super273 = _createSuper(FormlyFieldCheckbox);

        function FormlyFieldCheckbox() {
          var _this628;

          _classCallCheck2(this, FormlyFieldCheckbox);

          _this628 = _super273.apply(this, arguments);
          _this628.defaultOptions = {
            templateOptions: {
              indeterminate: true,
              hideLabel: true,
              formCheck: 'custom'
            }
          };
          return _this628;
        }

        return FormlyFieldCheckbox;
      }(_ngx_formly_core__WEBPACK_IMPORTED_MODULE_4__["FieldType"]);

      FormlyFieldCheckbox.ɵfac = function FormlyFieldCheckbox_Factory(t) {
        return ɵFormlyFieldCheckbox_BaseFactory(t || FormlyFieldCheckbox);
      };

      FormlyFieldCheckbox.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({
        type: FormlyFieldCheckbox,
        selectors: [["formly-field-checkbox"]],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"]],
        decls: 3,
        vars: 20,
        consts: [[3, "ngClass"], ["type", "checkbox", 3, "indeterminate", "formControl", "formlyAttributes"], [3, "for", "form-check-label", "custom-control-label", 4, "ngIf"], [3, "for"], [4, "ngIf"]],
        template: function FormlyFieldCheckbox_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](1, "input", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](2, FormlyFieldCheckbox_label_2_Template, 3, 7, "label", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpureFunction6"](13, _c0, ctx.to.formCheck.indexOf("custom") === -1, ctx.to.formCheck === "inline", ctx.to.formCheck.indexOf("custom") === 0, ctx.to.formCheck === "custom" || ctx.to.formCheck === "custom-inline", ctx.to.formCheck === "custom-inline", ctx.to.formCheck === "custom-switch"));

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassProp"]("is-invalid", ctx.showError)("form-check-input", ctx.to.formCheck.indexOf("custom") === -1)("position-static", ctx.to.formCheck === "nolabel")("custom-control-input", ctx.to.formCheck.indexOf("custom") === 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("indeterminate", ctx.to.indeterminate && ctx.formControl.value === null)("formControl", ctx.formControl)("formlyAttributes", ctx.field);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.to.formCheck !== "nolabel");
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["NgClass"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["CheckboxControlValueAccessor"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["NgControlStatus"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["FormControlDirective"], _ngx_formly_core__WEBPACK_IMPORTED_MODULE_4__["FormlyAttributes"], _angular_common__WEBPACK_IMPORTED_MODULE_2__["NgIf"]],
        encapsulation: 2
      });

      var ɵFormlyFieldCheckbox_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetInheritedFactory"](FormlyFieldCheckbox);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](FormlyFieldCheckbox, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"],
          args: [{
            selector: 'formly-field-checkbox',
            template: "\n    <div [ngClass]=\"{\n      'form-check': to.formCheck.indexOf('custom') === -1,\n      'form-check-inline': to.formCheck === 'inline',\n      'custom-control': to.formCheck.indexOf('custom') === 0,\n      'custom-checkbox': to.formCheck === 'custom' || to.formCheck === 'custom-inline',\n      'custom-control-inline': to.formCheck === 'custom-inline',\n      'custom-switch': to.formCheck === 'custom-switch'\n    }\">\n      <input type=\"checkbox\"\n        [class.is-invalid]=\"showError\"\n        [class.form-check-input]=\"to.formCheck.indexOf('custom') === -1\"\n        [class.position-static]=\"to.formCheck === 'nolabel'\"\n        [class.custom-control-input]=\"to.formCheck.indexOf('custom') === 0\"\n        [indeterminate]=\"to.indeterminate && formControl.value === null\"\n        [formControl]=\"formControl\"\n        [formlyAttributes]=\"field\">\n      <label [for]=\"id\"\n        *ngIf=\"to.formCheck !== 'nolabel'\"\n        [class.form-check-label]=\"to.formCheck.indexOf('custom') === -1\"\n        [class.custom-control-label]=\"to.formCheck.indexOf('custom') === 0\"\n      >\n        {{ to.label }}\n        <span *ngIf=\"to.required && to.hideRequiredMarker !== true\">*</span>\n      </label>\n    </div>\n  "
          }]
        }], null, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var FormlyFieldMultiCheckbox = /*#__PURE__*/function (_ngx_formly_core__WEB3) {
        _inherits2(FormlyFieldMultiCheckbox, _ngx_formly_core__WEB3);

        var _super274 = _createSuper(FormlyFieldMultiCheckbox);

        function FormlyFieldMultiCheckbox() {
          var _this629;

          _classCallCheck2(this, FormlyFieldMultiCheckbox);

          _this629 = _super274.apply(this, arguments);
          _this629.defaultOptions = {
            templateOptions: {
              options: [],
              formCheck: 'custom'
            }
          };
          return _this629;
        }
        /**
         * @param {?} value
         * @param {?} checked
         * @return {?}
         */


        _createClass2(FormlyFieldMultiCheckbox, [{
          key: "onChange",
          value: function onChange(value, checked) {
            if (this.to.type === 'array') {
              this.formControl.patchValue(checked ? [].concat(_toConsumableArray(this.formControl.value || []), [value]) : _toConsumableArray(this.formControl.value || []).filter(
              /**
              * @param {?} o
              * @return {?}
              */
              function (o) {
                return o !== value;
              }));
            } else {
              this.formControl.patchValue(Object.assign({}, this.formControl.value, _defineProperty({}, value, checked)));
            }

            this.formControl.markAsTouched();
          }
          /**
           * @param {?} option
           * @return {?}
           */

        }, {
          key: "isChecked",
          value: function isChecked(option) {
            /** @type {?} */
            var value = this.formControl.value;
            return value && (this.to.type === 'array' ? value.indexOf(option.value) !== -1 : value[option.value]);
          }
        }]);

        return FormlyFieldMultiCheckbox;
      }(_ngx_formly_core__WEBPACK_IMPORTED_MODULE_4__["FieldType"]);

      FormlyFieldMultiCheckbox.ɵfac = function FormlyFieldMultiCheckbox_Factory(t) {
        return ɵFormlyFieldMultiCheckbox_BaseFactory(t || FormlyFieldMultiCheckbox);
      };

      FormlyFieldMultiCheckbox.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({
        type: FormlyFieldMultiCheckbox,
        selectors: [["formly-field-multicheckbox"]],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"]],
        decls: 4,
        vars: 6,
        consts: [[3, "ngClass", 4, "ngFor", "ngForOf"], [3, "ngClass"], ["type", "checkbox", 3, "id", "value", "checked", "formlyAttributes", "change"], [3, "for"]],
        template: function FormlyFieldMultiCheckbox_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div");

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, FormlyFieldMultiCheckbox_div_1_Template, 4, 22, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipe"](2, "async");

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipe"](3, "formlySelectOptions");

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngForOf", _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipeBind1"](2, 1, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipeBind2"](3, 3, ctx.to.options, ctx.field)));
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["NgForOf"], _angular_common__WEBPACK_IMPORTED_MODULE_2__["NgClass"], _ngx_formly_core__WEBPACK_IMPORTED_MODULE_4__["FormlyAttributes"]],
        pipes: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["AsyncPipe"], _ngx_formly_core_select__WEBPACK_IMPORTED_MODULE_5__["ɵa"]],
        encapsulation: 2
      });

      var ɵFormlyFieldMultiCheckbox_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetInheritedFactory"](FormlyFieldMultiCheckbox);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](FormlyFieldMultiCheckbox, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"],
          args: [{
            selector: 'formly-field-multicheckbox',
            template: "\n    <div>\n      <div *ngFor=\"let option of to.options | formlySelectOptions:field | async; let i = index;\"\n        [ngClass]=\"{\n          'form-check': to.formCheck.indexOf('custom') === -1,\n          'form-check-inline': to.formCheck === 'inline',\n          'custom-control': to.formCheck.indexOf('custom') === 0,\n          'custom-checkbox': to.formCheck === 'custom' || to.formCheck === 'custom-inline',\n          'custom-control-inline': to.formCheck === 'custom-inline',\n          'custom-switch': to.formCheck === 'custom-switch'\n        }\"\n      >\n        <input type=\"checkbox\"\n          [id]=\"id + '_' + i\"\n          [class.form-check-input]=\"to.formCheck.indexOf('custom') === -1\"\n          [class.custom-control-input]=\"to.formCheck.indexOf('custom') === 0\"\n          [value]=\"option.value\"\n          [checked]=\"isChecked(option)\"\n          [formlyAttributes]=\"field\"\n          (change)=\"onChange(option.value, $event.target.checked)\">\n        <label\n          [class.form-check-label]=\"to.formCheck.indexOf('custom') === -1\"\n          [class.custom-control-label]=\"to.formCheck.indexOf('custom') === 0\"\n          [for]=\"id + '_' + i\">\n          {{ option.label }}\n        </label>\n      </div>\n    </div>\n  "
          }]
        }], null, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var FormlyFieldInput = /*#__PURE__*/function (_ngx_formly_core__WEB4) {
        _inherits2(FormlyFieldInput, _ngx_formly_core__WEB4);

        var _super275 = _createSuper(FormlyFieldInput);

        function FormlyFieldInput() {
          _classCallCheck2(this, FormlyFieldInput);

          return _super275.apply(this, arguments);
        }

        _createClass2(FormlyFieldInput, [{
          key: "type",
          get:
          /**
           * @return {?}
           */
          function get() {
            return this.to.type || 'text';
          }
        }]);

        return FormlyFieldInput;
      }(_ngx_formly_core__WEBPACK_IMPORTED_MODULE_4__["FieldType"]);

      FormlyFieldInput.ɵfac = function FormlyFieldInput_Factory(t) {
        return ɵFormlyFieldInput_BaseFactory(t || FormlyFieldInput);
      };

      FormlyFieldInput.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({
        type: FormlyFieldInput,
        selectors: [["formly-field-input"]],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"]],
        decls: 3,
        vars: 2,
        consts: [["class", "form-control", 3, "type", "formControl", "formlyAttributes", "is-invalid", 4, "ngIf", "ngIfElse"], ["numberTmp", ""], [1, "form-control", 3, "type", "formControl", "formlyAttributes"], ["type", "number", 1, "form-control", 3, "formControl", "formlyAttributes"]],
        template: function FormlyFieldInput_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](0, FormlyFieldInput_input_0_Template, 1, 5, "input", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, FormlyFieldInput_ng_template_1_Template, 1, 4, "ng-template", null, 1, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplateRefExtractor"]);
          }

          if (rf & 2) {
            var _r1 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵreference"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.type !== "number")("ngIfElse", _r1);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["NgIf"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["DefaultValueAccessor"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["NgControlStatus"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["FormControlDirective"], _ngx_formly_core__WEBPACK_IMPORTED_MODULE_4__["FormlyAttributes"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["NumberValueAccessor"]],
        encapsulation: 2
      });

      var ɵFormlyFieldInput_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetInheritedFactory"](FormlyFieldInput);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](FormlyFieldInput, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"],
          args: [{
            selector: 'formly-field-input',
            template: "\n    <input *ngIf=\"type !== 'number' else numberTmp\" [type]=\"type\" [formControl]=\"formControl\" class=\"form-control\" [formlyAttributes]=\"field\" [class.is-invalid]=\"showError\">\n    <ng-template #numberTmp>\n      <input type=\"number\" [formControl]=\"formControl\" class=\"form-control\" [formlyAttributes]=\"field\" [class.is-invalid]=\"showError\">\n    </ng-template>\n  "
          }]
        }], null, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var FormlyFieldRadio = /*#__PURE__*/function (_ngx_formly_core__WEB5) {
        _inherits2(FormlyFieldRadio, _ngx_formly_core__WEB5);

        var _super276 = _createSuper(FormlyFieldRadio);

        function FormlyFieldRadio() {
          var _this630;

          _classCallCheck2(this, FormlyFieldRadio);

          _this630 = _super276.apply(this, arguments);
          _this630.defaultOptions = {
            templateOptions: {
              options: [],
              formCheck: 'custom'
            }
          };
          return _this630;
        }

        return FormlyFieldRadio;
      }(_ngx_formly_core__WEBPACK_IMPORTED_MODULE_4__["FieldType"]);

      FormlyFieldRadio.ɵfac = function FormlyFieldRadio_Factory(t) {
        return ɵFormlyFieldRadio_BaseFactory(t || FormlyFieldRadio);
      };

      FormlyFieldRadio.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({
        type: FormlyFieldRadio,
        selectors: [["formly-field-radio"]],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"]],
        decls: 4,
        vars: 6,
        consts: [[3, "ngClass", 4, "ngFor", "ngForOf"], [3, "ngClass"], ["type", "radio", 3, "id", "name", "value", "formControl", "formlyAttributes"], [3, "for"]],
        template: function FormlyFieldRadio_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div");

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, FormlyFieldRadio_div_1_Template, 4, 25, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipe"](2, "async");

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipe"](3, "formlySelectOptions");

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngForOf", _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipeBind1"](2, 1, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipeBind2"](3, 3, ctx.to.options, ctx.field)));
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["NgForOf"], _angular_common__WEBPACK_IMPORTED_MODULE_2__["NgClass"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["RadioControlValueAccessor"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["DefaultValueAccessor"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["NgControlStatus"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["FormControlDirective"], _ngx_formly_core__WEBPACK_IMPORTED_MODULE_4__["FormlyAttributes"]],
        pipes: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["AsyncPipe"], _ngx_formly_core_select__WEBPACK_IMPORTED_MODULE_5__["ɵa"]],
        encapsulation: 2
      });

      var ɵFormlyFieldRadio_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetInheritedFactory"](FormlyFieldRadio);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](FormlyFieldRadio, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"],
          args: [{
            selector: 'formly-field-radio',
            template: "\n    <div>\n      <div *ngFor=\"let option of to.options | formlySelectOptions:field | async; let i = index;\"\n        [ngClass]=\"{\n          'form-check': to.formCheck.indexOf('custom') === -1,\n          'form-check-inline': to.formCheck === 'inline',\n          'custom-control custom-radio': to.formCheck.indexOf('custom') === 0,\n          'custom-control-inline': to.formCheck === 'custom-inline'\n        }\"\n      >\n        <input type=\"radio\"\n          [id]=\"id + '_' + i\"\n          [class.form-check-input]=\"to.formCheck.indexOf('custom') === -1\"\n          [class.custom-control-input]=\"to.formCheck.indexOf('custom') === 0\"\n          [name]=\"field.name || id\"\n          [class.is-invalid]=\"showError\"\n          [attr.value]=\"option.value\"\n          [value]=\"option.value\"\n          [formControl]=\"formControl\"\n          [formlyAttributes]=\"field\"\n          [attr.disabled]=\"option.disabled || formControl.disabled ? true : null\">\n        <label\n          [class.form-check-label]=\"to.formCheck.indexOf('custom') === -1\"\n          [class.custom-control-label]=\"to.formCheck.indexOf('custom') === 0\"\n          [for]=\"id + '_' + i\">\n          {{ option.label }}\n        </label>\n      </div>\n    </div>\n  "
          }]
        }], null, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var FormlyFieldTextArea = /*#__PURE__*/function (_ngx_formly_core__WEB6) {
        _inherits2(FormlyFieldTextArea, _ngx_formly_core__WEB6);

        var _super277 = _createSuper(FormlyFieldTextArea);

        function FormlyFieldTextArea() {
          var _this631;

          _classCallCheck2(this, FormlyFieldTextArea);

          _this631 = _super277.apply(this, arguments);
          _this631.defaultOptions = {
            templateOptions: {
              cols: 1,
              rows: 1
            }
          };
          return _this631;
        }

        return FormlyFieldTextArea;
      }(_ngx_formly_core__WEBPACK_IMPORTED_MODULE_4__["FieldType"]);

      FormlyFieldTextArea.ɵfac = function FormlyFieldTextArea_Factory(t) {
        return ɵFormlyFieldTextArea_BaseFactory(t || FormlyFieldTextArea);
      };

      FormlyFieldTextArea.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({
        type: FormlyFieldTextArea,
        selectors: [["formly-field-textarea"]],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"]],
        decls: 2,
        vars: 6,
        consts: [[1, "form-control", 3, "formControl", "cols", "rows", "formlyAttributes"]],
        template: function FormlyFieldTextArea_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "textarea", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1, "    ");

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassProp"]("is-invalid", ctx.showError);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("formControl", ctx.formControl)("cols", ctx.to.cols)("rows", ctx.to.rows)("formlyAttributes", ctx.field);
          }
        },
        directives: [_angular_forms__WEBPACK_IMPORTED_MODULE_3__["DefaultValueAccessor"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["NgControlStatus"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["FormControlDirective"], _ngx_formly_core__WEBPACK_IMPORTED_MODULE_4__["FormlyAttributes"]],
        encapsulation: 2
      });

      var ɵFormlyFieldTextArea_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetInheritedFactory"](FormlyFieldTextArea);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](FormlyFieldTextArea, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"],
          args: [{
            selector: 'formly-field-textarea',
            template: "\n    <textarea [formControl]=\"formControl\" [cols]=\"to.cols\"\n      [rows]=\"to.rows\" class=\"form-control\" [class.is-invalid]=\"showError\"\n      [formlyAttributes]=\"field\">\n    </textarea>\n  "
          }]
        }], null, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var FormlyFieldSelect = /*#__PURE__*/function (_ngx_formly_core__WEB7) {
        _inherits2(FormlyFieldSelect, _ngx_formly_core__WEB7);

        var _super278 = _createSuper(FormlyFieldSelect);

        /**
         * @param {?} ngZone
         */
        function FormlyFieldSelect(ngZone) {
          var _this632;

          _classCallCheck2(this, FormlyFieldSelect);

          _this632 = _super278.call(this);
          _this632.ngZone = ngZone;
          _this632.defaultOptions = {
            templateOptions: {
              options: [],

              /**
               * @param {?} o1
               * @param {?} o2
               * @return {?}
               */
              compareWith: function compareWith(o1, o2) {
                return o1 === o2;
              }
            }
          };
          return _this632;
        } // workaround for https://github.com/angular/angular/issues/10010

        /**
         * @param {?} s
         * @return {?}
         */


        _createClass2(FormlyFieldSelect, [{
          key: "selectAccessor",
          set: function set(s) {
            var _this633 = this;

            if (!s) return;
            /** @type {?} */

            var writeValue = s.writeValue.bind(s);

            if (s._getOptionId(s.value) === null) {
              writeValue(s.value);
            }

            s.writeValue =
            /**
            * @param {?} value
            * @return {?}
            */
            function (value) {
              /** @type {?} */
              var id = s._idCounter;
              writeValue(value);

              if (value === null) {
                _this633.ngZone.onStable.asObservable().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_0__["take"])(1)).subscribe(
                /**
                * @return {?}
                */
                function () {
                  if (id !== s._idCounter && s._getOptionId(value) === null && s._elementRef.nativeElement.selectedIndex !== -1) {
                    writeValue(value);
                  }
                });
              }
            };
          }
        }]);

        return FormlyFieldSelect;
      }(_ngx_formly_core__WEBPACK_IMPORTED_MODULE_4__["FieldType"]);

      FormlyFieldSelect.ɵfac = function FormlyFieldSelect_Factory(t) {
        return new (t || FormlyFieldSelect)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]));
      };

      FormlyFieldSelect.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({
        type: FormlyFieldSelect,
        selectors: [["formly-field-select"]],
        viewQuery: function FormlyFieldSelect_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵviewQuery"](_angular_forms__WEBPACK_IMPORTED_MODULE_3__["SelectControlValueAccessor"], 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx.selectAccessor = _t.first);
          }
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"]],
        decls: 3,
        vars: 2,
        consts: [["class", "form-control", "multiple", "", 3, "custom-select", "formControl", "compareWith", "is-invalid", "formlyAttributes", 4, "ngIf", "ngIfElse"], ["singleSelect", ""], ["multiple", "", 1, "form-control", 3, "formControl", "compareWith", "formlyAttributes"], [4, "ngIf"], [4, "ngIf", "ngIfElse"], ["grouplist", ""], [4, "ngFor", "ngForOf"], [3, "ngValue", "disabled"], [3, "ngValue", "disabled", 4, "ngIf", "ngIfElse"], ["optgroup", ""], [3, "label"], [3, "ngValue", "disabled", 4, "ngFor", "ngForOf"], [1, "form-control", 3, "formControl", "compareWith", "formlyAttributes"], [3, "ngValue", 4, "ngIf"], [3, "ngValue"]],
        template: function FormlyFieldSelect_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](0, FormlyFieldSelect_select_0_Template, 4, 13, "select", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, FormlyFieldSelect_ng_template_1_Template, 5, 14, "ng-template", null, 1, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplateRefExtractor"]);
          }

          if (rf & 2) {
            var _r1 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵreference"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.to.multiple)("ngIfElse", _r1);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["NgIf"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["SelectMultipleControlValueAccessor"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["NgControlStatus"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["FormControlDirective"], _ngx_formly_core__WEBPACK_IMPORTED_MODULE_4__["FormlyAttributes"], _angular_common__WEBPACK_IMPORTED_MODULE_2__["NgForOf"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["NgSelectOption"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["ɵangular_packages_forms_forms_x"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["SelectControlValueAccessor"]],
        pipes: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["AsyncPipe"], _ngx_formly_core_select__WEBPACK_IMPORTED_MODULE_5__["ɵa"]],
        encapsulation: 2
      });
      /** @nocollapse */

      FormlyFieldSelect.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        }];
      };

      FormlyFieldSelect.propDecorators = {
        selectAccessor: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewChild"],
          args: [_angular_forms__WEBPACK_IMPORTED_MODULE_3__["SelectControlValueAccessor"]]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](FormlyFieldSelect, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"],
          args: [{
            selector: 'formly-field-select',
            template: "\n    <select *ngIf=\"to.multiple; else singleSelect\" class=\"form-control\"\n      multiple\n      [class.custom-select]=\"to.customSelect\"\n      [formControl]=\"formControl\"\n      [compareWith]=\"to.compareWith\"\n      [class.is-invalid]=\"showError\"\n      [formlyAttributes]=\"field\">\n      <ng-container *ngIf=\"to.options | formlySelectOptions:field | async as opts\">\n        <ng-container *ngIf=\"to._flatOptions else grouplist\">\n          <ng-container *ngFor=\"let opt of opts\">\n            <option [ngValue]=\"opt.value\" [disabled]=\"opt.disabled\">{{ opt.label }}</option>\n          </ng-container>\n        </ng-container>\n\n        <ng-template #grouplist>\n          <ng-container *ngFor=\"let opt of opts\">\n            <option *ngIf=\"!opt.group else optgroup\" [ngValue]=\"opt.value\" [disabled]=\"opt.disabled\">{{ opt.label }}</option>\n            <ng-template #optgroup>\n              <optgroup [label]=\"opt.label\">\n                <option *ngFor=\"let child of opt.group\" [ngValue]=\"child.value\" [disabled]=\"child.disabled\">\n                  {{ child.label }}\n                </option>\n              </optgroup>\n            </ng-template>\n          </ng-container>\n        </ng-template>\n      </ng-container>\n    </select>\n\n    <ng-template #singleSelect>\n      <select class=\"form-control\"\n        [formControl]=\"formControl\"\n        [compareWith]=\"to.compareWith\"\n        [class.custom-select]=\"to.customSelect\"\n        [class.is-invalid]=\"showError\"\n        [formlyAttributes]=\"field\">\n        <option *ngIf=\"to.placeholder\" [ngValue]=\"null\">{{ to.placeholder }}</option>\n        <ng-container *ngIf=\"to.options | formlySelectOptions:field | async as opts\">\n          <ng-container *ngIf=\"to._flatOptions else grouplist\">\n            <ng-container *ngFor=\"let opt of opts\">\n              <option [ngValue]=\"opt.value\" [disabled]=\"opt.disabled\">{{ opt.label }}</option>\n            </ng-container>\n          </ng-container>\n\n          <ng-template #grouplist>\n            <ng-container *ngFor=\"let opt of opts\">\n              <option *ngIf=\"!opt.group else optgroup\" [ngValue]=\"opt.value\" [disabled]=\"opt.disabled\">{{ opt.label }}</option>\n              <ng-template #optgroup>\n                <optgroup [label]=\"opt.label\">\n                  <option *ngFor=\"let child of opt.group\" [ngValue]=\"child.value\" [disabled]=\"child.disabled\">\n                    {{ child.label }}\n                  </option>\n                </optgroup>\n              </ng-template>\n            </ng-container>\n          </ng-template>\n        </ng-container>\n      </select>\n    </ng-template>\n  "
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
          }];
        }, {
          selectAccessor: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewChild"],
            args: [_angular_forms__WEBPACK_IMPORTED_MODULE_3__["SelectControlValueAccessor"]]
          }]
        });
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var FormlyWrapperFormField = /*#__PURE__*/function (_ngx_formly_core__WEB8) {
        _inherits2(FormlyWrapperFormField, _ngx_formly_core__WEB8);

        var _super279 = _createSuper(FormlyWrapperFormField);

        function FormlyWrapperFormField() {
          _classCallCheck2(this, FormlyWrapperFormField);

          return _super279.apply(this, arguments);
        }

        return FormlyWrapperFormField;
      }(_ngx_formly_core__WEBPACK_IMPORTED_MODULE_4__["FieldWrapper"]);

      FormlyWrapperFormField.ɵfac = function FormlyWrapperFormField_Factory(t) {
        return ɵFormlyWrapperFormField_BaseFactory(t || FormlyWrapperFormField);
      };

      FormlyWrapperFormField.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({
        type: FormlyWrapperFormField,
        selectors: [["formly-wrapper-form-field"]],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"]],
        decls: 6,
        vars: 5,
        consts: [[1, "form-group"], [4, "ngIf"], ["fieldComponent", ""], ["class", "invalid-feedback", 3, "display", 4, "ngIf"], ["class", "form-text text-muted", 4, "ngIf"], [1, "invalid-feedback"], [3, "field"], [1, "form-text", "text-muted"]],
        template: function FormlyWrapperFormField_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, FormlyWrapperFormField_label_1_Template, 3, 3, "label", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](2, FormlyWrapperFormField_ng_template_2_Template, 0, 0, "ng-template", null, 2, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplateRefExtractor"]);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](4, FormlyWrapperFormField_div_4_Template, 2, 3, "div", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](5, FormlyWrapperFormField_small_5_Template, 2, 1, "small", 4);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassProp"]("has-error", ctx.showError);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.to.label && ctx.to.hideLabel !== true);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](3);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.showError);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.to.description);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["NgIf"], _ngx_formly_core__WEBPACK_IMPORTED_MODULE_4__["ɵc"]],
        encapsulation: 2
      });

      var ɵFormlyWrapperFormField_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetInheritedFactory"](FormlyWrapperFormField);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](FormlyWrapperFormField, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"],
          args: [{
            selector: 'formly-wrapper-form-field',
            template: "\n    <div class=\"form-group\" [class.has-error]=\"showError\">\n      <label *ngIf=\"to.label && to.hideLabel !== true\" [attr.for]=\"id\">\n        {{ to.label }}\n        <span *ngIf=\"to.required && to.hideRequiredMarker !== true\">*</span>\n      </label>\n\n      <ng-template #fieldComponent></ng-template>\n\n      <div *ngIf=\"showError\" class=\"invalid-feedback\" [style.display]=\"'block'\">\n        <formly-validation-message [field]=\"field\"></formly-validation-message>\n      </div>\n\n      <small *ngIf=\"to.description\" class=\"form-text text-muted\">{{ to.description }}</small>\n    </div>\n  "
          }]
        }], null, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /** @type {?} */


      var FIELD_TYPE_COMPONENTS = [// types
      FormlyFieldInput, FormlyFieldCheckbox, FormlyFieldRadio, FormlyFieldSelect, FormlyFieldTextArea, FormlyFieldMultiCheckbox, // wrappers
      FormlyWrapperFormField];
      /** @type {?} */

      var BOOTSTRAP_FORMLY_CONFIG = {
        types: [{
          name: 'input',
          component: FormlyFieldInput,
          wrappers: ['form-field']
        }, {
          name: 'checkbox',
          component: FormlyFieldCheckbox,
          wrappers: ['form-field']
        }, {
          name: 'radio',
          component: FormlyFieldRadio,
          wrappers: ['form-field']
        }, {
          name: 'select',
          component: FormlyFieldSelect,
          wrappers: ['form-field']
        }, {
          name: 'textarea',
          component: FormlyFieldTextArea,
          wrappers: ['form-field']
        }, {
          name: 'multicheckbox',
          component: FormlyFieldMultiCheckbox,
          wrappers: ['form-field']
        }],
        wrappers: [{
          name: 'form-field',
          component: FormlyWrapperFormField
        }]
      };
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      var FormlyBootstrapModule = function FormlyBootstrapModule() {
        _classCallCheck2(this, FormlyBootstrapModule);
      };

      FormlyBootstrapModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({
        type: FormlyBootstrapModule
      });
      FormlyBootstrapModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({
        factory: function FormlyBootstrapModule_Factory(t) {
          return new (t || FormlyBootstrapModule)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["ReactiveFormsModule"], _ngx_formly_core_select__WEBPACK_IMPORTED_MODULE_5__["FormlySelectModule"], _ngx_formly_core__WEBPACK_IMPORTED_MODULE_4__["FormlyModule"].forChild(BOOTSTRAP_FORMLY_CONFIG), _ngx_formly_bootstrap_addons__WEBPACK_IMPORTED_MODULE_6__["FormlyBootstrapAddonsModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](FormlyBootstrapModule, {
          declarations: function declarations() {
            return [FormlyFieldInput, FormlyFieldCheckbox, FormlyFieldRadio, FormlyFieldSelect, FormlyFieldTextArea, FormlyFieldMultiCheckbox, FormlyWrapperFormField];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["ReactiveFormsModule"], _ngx_formly_core_select__WEBPACK_IMPORTED_MODULE_5__["FormlySelectModule"], _ngx_formly_core__WEBPACK_IMPORTED_MODULE_4__["FormlyModule"], _ngx_formly_bootstrap_addons__WEBPACK_IMPORTED_MODULE_6__["FormlyBootstrapAddonsModule"]];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](FormlyBootstrapModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
          args: [{
            declarations: [FIELD_TYPE_COMPONENTS],
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_3__["ReactiveFormsModule"], _ngx_formly_core_select__WEBPACK_IMPORTED_MODULE_5__["FormlySelectModule"], _ngx_formly_core__WEBPACK_IMPORTED_MODULE_4__["FormlyModule"].forChild(BOOTSTRAP_FORMLY_CONFIG), _ngx_formly_bootstrap_addons__WEBPACK_IMPORTED_MODULE_6__["FormlyBootstrapAddonsModule"]]
          }]
        }], null, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */
      //# sourceMappingURL=ngx-formly-bootstrap.js.map

      /***/

    },

    /***/
    "bxKX":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/it-ch.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function bxKX(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Italian (Switzerland) [it-ch]
      //! author : xfh : https://github.com/xfh
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var itCh = moment.defineLocale('it-ch', {
          months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),
          monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
          weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),
          weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
          weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[Oggi alle] LT',
            nextDay: '[Domani alle] LT',
            nextWeek: 'dddd [alle] LT',
            lastDay: '[Ieri alle] LT',
            lastWeek: function lastWeek() {
              switch (this.day()) {
                case 0:
                  return '[la scorsa] dddd [alle] LT';

                default:
                  return '[lo scorso] dddd [alle] LT';
              }
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: function future(s) {
              return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;
            },
            past: '%s fa',
            s: 'alcuni secondi',
            ss: '%d secondi',
            m: 'un minuto',
            mm: '%d minuti',
            h: "un'ora",
            hh: '%d ore',
            d: 'un giorno',
            dd: '%d giorni',
            M: 'un mese',
            MM: '%d mesi',
            y: 'un anno',
            yy: '%d anni'
          },
          dayOfMonthOrdinalParse: /\d{1,2}º/,
          ordinal: '%dº',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return itCh;
      });
      /***/

    },

    /***/
    "c2HN":
    /*!***************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/isPromise.js ***!
      \***************************************************************/

    /*! exports provided: isPromise */

    /***/
    function c2HN(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isPromise", function () {
        return isPromise;
      });

      function isPromise(value) {
        return !!value && typeof value.subscribe !== 'function' && typeof value.then === 'function';
      } //# sourceMappingURL=isPromise.js.map

      /***/

    },

    /***/
    "c6ID":
    /*!*****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/sample.js ***!
      \*****************************************************************/

    /*! exports provided: sample */

    /***/
    function c6ID(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "sample", function () {
        return sample;
      });
      /* harmony import */


      var _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../innerSubscribe */
      "zx2A");

      function sample(notifier) {
        return function (source) {
          return source.lift(new SampleOperator(notifier));
        };
      }

      var SampleOperator = /*#__PURE__*/function () {
        function SampleOperator(notifier) {
          _classCallCheck2(this, SampleOperator);

          this.notifier = notifier;
        }

        _createClass2(SampleOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            var sampleSubscriber = new SampleSubscriber(subscriber);
            var subscription = source.subscribe(sampleSubscriber);
            subscription.add(Object(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["innerSubscribe"])(this.notifier, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleInnerSubscriber"](sampleSubscriber)));
            return subscription;
          }
        }]);

        return SampleOperator;
      }();

      var SampleSubscriber = /*#__PURE__*/function (_innerSubscribe__WEBP13) {
        _inherits2(SampleSubscriber, _innerSubscribe__WEBP13);

        var _super280 = _createSuper(SampleSubscriber);

        function SampleSubscriber() {
          var _this634;

          _classCallCheck2(this, SampleSubscriber);

          _this634 = _super280.apply(this, arguments);
          _this634.hasValue = false;
          return _this634;
        }

        _createClass2(SampleSubscriber, [{
          key: "_next",
          value: function _next(value) {
            this.value = value;
            this.hasValue = true;
          }
        }, {
          key: "notifyNext",
          value: function notifyNext() {
            this.emitValue();
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete() {
            this.emitValue();
          }
        }, {
          key: "emitValue",
          value: function emitValue() {
            if (this.hasValue) {
              this.hasValue = false;
              this.destination.next(this.value);
            }
          }
        }]);

        return SampleSubscriber;
      }(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleOuterSubscriber"]); //# sourceMappingURL=sample.js.map

      /***/

    },

    /***/
    "c7jc":
    /*!***************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/Immediate.js ***!
      \***************************************************************/

    /*! exports provided: Immediate, TestTools */

    /***/
    function c7jc(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Immediate", function () {
        return Immediate;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TestTools", function () {
        return TestTools;
      });

      var nextHandle = 1;

      var RESOLVED = function () {
        return Promise.resolve();
      }();

      var activeHandles = {};

      function findAndClearHandle(handle) {
        if (handle in activeHandles) {
          delete activeHandles[handle];
          return true;
        }

        return false;
      }

      var Immediate = {
        setImmediate: function setImmediate(cb) {
          var handle = nextHandle++;
          activeHandles[handle] = true;
          RESOLVED.then(function () {
            return findAndClearHandle(handle) && cb();
          });
          return handle;
        },
        clearImmediate: function clearImmediate(handle) {
          findAndClearHandle(handle);
        }
      };
      var TestTools = {
        pending: function pending() {
          return Object.keys(activeHandles).length;
        }
      }; //# sourceMappingURL=Immediate.js.map

      /***/
    },

    /***/
    "c8WW":
    /*!**************************************************!*\
      !*** ./node_modules/aws-sdk/lib/xml/xml-text.js ***!
      \**************************************************/

    /*! no static exports found */

    /***/
    function c8WW(module, exports, __webpack_require__) {
      var escapeElement = __webpack_require__(
      /*! ./escape-element */
      "Sl41").escapeElement;
      /**
       * Represents an XML text value.
       * @api private
       */


      function XmlText(value) {
        this.value = value;
      }

      XmlText.prototype.toString = function () {
        return escapeElement('' + this.value);
      };
      /**
       * @api private
       */


      module.exports = {
        XmlText: XmlText
      };
      /***/
    },

    /***/
    "cBqT":
    /*!***************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/find.js ***!
      \***************************************************************/

    /*! exports provided: find, FindValueOperator, FindValueSubscriber */

    /***/
    function cBqT(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "find", function () {
        return find;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FindValueOperator", function () {
        return FindValueOperator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FindValueSubscriber", function () {
        return FindValueSubscriber;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");

      function find(predicate, thisArg) {
        if (typeof predicate !== 'function') {
          throw new TypeError('predicate is not a function');
        }

        return function (source) {
          return source.lift(new FindValueOperator(predicate, source, false, thisArg));
        };
      }

      var FindValueOperator = /*#__PURE__*/function () {
        function FindValueOperator(predicate, source, yieldIndex, thisArg) {
          _classCallCheck2(this, FindValueOperator);

          this.predicate = predicate;
          this.source = source;
          this.yieldIndex = yieldIndex;
          this.thisArg = thisArg;
        }

        _createClass2(FindValueOperator, [{
          key: "call",
          value: function call(observer, source) {
            return source.subscribe(new FindValueSubscriber(observer, this.predicate, this.source, this.yieldIndex, this.thisArg));
          }
        }]);

        return FindValueOperator;
      }();

      var FindValueSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_29) {
        _inherits2(FindValueSubscriber, _Subscriber__WEBPACK_29);

        var _super281 = _createSuper(FindValueSubscriber);

        function FindValueSubscriber(destination, predicate, source, yieldIndex, thisArg) {
          var _this635;

          _classCallCheck2(this, FindValueSubscriber);

          _this635 = _super281.call(this, destination);
          _this635.predicate = predicate;
          _this635.source = source;
          _this635.yieldIndex = yieldIndex;
          _this635.thisArg = thisArg;
          _this635.index = 0;
          return _this635;
        }

        _createClass2(FindValueSubscriber, [{
          key: "notifyComplete",
          value: function notifyComplete(value) {
            var destination = this.destination;
            destination.next(value);
            destination.complete();
            this.unsubscribe();
          }
        }, {
          key: "_next",
          value: function _next(value) {
            var predicate = this.predicate,
                thisArg = this.thisArg;
            var index = this.index++;

            try {
              var result = predicate.call(thisArg || this, value, index, this.source);

              if (result) {
                this.notifyComplete(this.yieldIndex ? index : value);
              }
            } catch (err) {
              this.destination.error(err);
            }
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.notifyComplete(this.yieldIndex ? -1 : undefined);
          }
        }]);

        return FindValueSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=find.js.map

      /***/

    },

    /***/
    "cDwd":
    /*!*********************************************************************************!*\
      !*** ./node_modules/ngx-audio-player/__ivy_ngcc__/fesm2015/ngx-audio-player.js ***!
      \*********************************************************************************/

    /*! exports provided: AudioPlayerComponent, NgxAudioPlayerModule, Track, ɵa */

    /***/
    function cDwd(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AudioPlayerComponent", function () {
        return AudioPlayerComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgxAudioPlayerModule", function () {
        return NgxAudioPlayerModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Track", function () {
        return Track;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵa", function () {
        return SecondsToMinutesPipe;
      });
      /* harmony import */


      var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! tslib */
      "tzUe");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_material_table__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/material/table */
      "+0xr");
      /* harmony import */


      var _angular_material_paginator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/material/paginator */
      "M9IT");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var _angular_material_slider__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @angular/material/slider */
      "5RNC");
      /* harmony import */


      var _angular_material_form_field__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! @angular/material/form-field */
      "kmnG");
      /* harmony import */


      var _angular_material_expansion__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! @angular/material/expansion */
      "7EHt");
      /* harmony import */


      var _angular_material_card__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(
      /*! @angular/material/card */
      "Wp6s");
      /* harmony import */


      var _angular_material_button__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(
      /*! @angular/material/button */
      "bTqV");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_forms__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(
      /*! @angular/forms */
      "3Pt+");
      /* harmony import */


      var _angular_material_icon__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(
      /*! @angular/material/icon */
      "NFeN");

      var _c0 = ["audioPlayer"];

      function AudioPlayerComponent_button_3_Template(rf, ctx) {
        if (rf & 1) {
          var _r13 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "button", 19);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function AudioPlayerComponent_button_3_Template_button_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵrestoreView"](_r13);

            var ctx_r12 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

            return ctx_r12.previousSong();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "mat-icon", 20);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnamespaceSVG"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](2, "svg", 21);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](3, "path", 22);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](4, "path", 23);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("disabled", ctx_r1.loaderDisplay);
        }
      }

      function AudioPlayerComponent__svg_svg_5_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnamespaceSVG"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "svg", 24);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "g", 25);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](2, "rect", 26);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](3, "animate", 27);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](4, "g", 28);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](5, "rect", 26);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](6, "animate", 29);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](7, "g", 30);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](8, "rect", 26);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](9, "animate", 31);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](10, "g", 32);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](11, "rect", 26);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](12, "animate", 33);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](13, "g", 34);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](14, "rect", 26);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](15, "animate", 35);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](16, "g", 36);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](17, "rect", 26);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](18, "animate", 37);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](19, "g", 38);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](20, "rect", 26);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](21, "animate", 39);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](22, "g", 40);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](23, "rect", 26);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](24, "animate", 41);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](25, "g", 42);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](26, "rect", 26);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](27, "animate", 43);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](28, "g", 44);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](29, "rect", 26);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](30, "animate", 45);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](31, "g", 46);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](32, "rect", 26);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](33, "animate", 47);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](34, "g", 48);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](35, "rect", 26);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](36, "animate", 49);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }
      }

      function AudioPlayerComponent_mat_icon_6_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "mat-icon", 50);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnamespaceSVG"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "svg", 21);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](2, "path", 51);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](3, "path", 52);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }
      }

      function AudioPlayerComponent_mat_icon_7_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "mat-icon", 53);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnamespaceSVG"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "svg", 21);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](2, "path", 54);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](3, "path", 52);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }
      }

      function AudioPlayerComponent_button_8_Template(rf, ctx) {
        if (rf & 1) {
          var _r15 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "button", 55);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function AudioPlayerComponent_button_8_Template_button_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵrestoreView"](_r15);

            var ctx_r14 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

            return ctx_r14.nextSong();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "mat-icon", 56);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnamespaceSVG"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](2, "svg", 21);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](3, "path", 57);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](4, "path", 52);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("disabled", ctx_r5.loaderDisplay);
        }
      }

      function AudioPlayerComponent_span_12_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipe"](2, "secondsToMinutes");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"](" ", _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipeBind1"](2, 1, ctx_r6.currentTime), " ");
        }
      }

      function AudioPlayerComponent_span_15_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipe"](2, "secondsToMinutes");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"](" -", _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipeBind1"](2, 1, ctx_r7.duration - ctx_r7.currentTime), " ");
        }
      }

      function AudioPlayerComponent_button_16_mat_icon_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "mat-icon", 62);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnamespaceSVG"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "svg", 63);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](2, "g");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](3, "g");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](4, "path", 64);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](5, "path", 65);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](6, "path", 66);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }
      }

      function AudioPlayerComponent_button_16_mat_icon_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "mat-icon", 67);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnamespaceSVG"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "svg", 63);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](2, "g");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](3, "path", 68);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](4, "path", 69);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }
      }

      function AudioPlayerComponent_button_16_mat_icon_3_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "mat-icon", 70);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnamespaceSVG"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "svg", 63);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](2, "g");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](3, "path", 68);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](4, "path", 71);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }
      }

      function AudioPlayerComponent_button_16_Template(rf, ctx) {
        if (rf & 1) {
          var _r20 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "button", 58);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function AudioPlayerComponent_button_16_Template_button_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵrestoreView"](_r20);

            var ctx_r19 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

            return ctx_r19.toggleRepeat();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, AudioPlayerComponent_button_16_mat_icon_1_Template, 7, 0, "mat-icon", 59);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](2, AudioPlayerComponent_button_16_mat_icon_2_Template, 5, 0, "mat-icon", 60);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](3, AudioPlayerComponent_button_16_mat_icon_3_Template, 5, 0, "mat-icon", 61);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r8 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx_r8.repeat === "none");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx_r8.repeat === "all");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx_r8.repeat === "one");
        }
      }

      function AudioPlayerComponent_button_17_mat_icon_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "mat-icon", 67);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnamespaceSVG"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "svg", 73);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](2, "path", 74);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](3, "path", 52);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }
      }

      function AudioPlayerComponent_button_17_mat_icon_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "mat-icon", 70);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnamespaceSVG"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "svg", 73);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](2, "path", 75);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](3, "path", 52);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }
      }

      function AudioPlayerComponent_button_17_Template(rf, ctx) {
        if (rf & 1) {
          var _r24 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "button", 72);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function AudioPlayerComponent_button_17_Template_button_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵrestoreView"](_r24);

            var ctx_r23 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

            return ctx_r23.toggleVolume();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, AudioPlayerComponent_button_17_mat_icon_1_Template, 4, 0, "mat-icon", 60);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](2, AudioPlayerComponent_button_17_mat_icon_2_Template, 4, 0, "mat-icon", 61);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx_r9.volume === 0);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx_r9.volume > 0);
        }
      }

      function AudioPlayerComponent_mat_card_18_span_3_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r25 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate2"]("", ctx_r25.tracks[ctx_r25.currentIndex] == null ? null : ctx_r25.tracks[ctx_r25.currentIndex].title, "", ctx_r25.displayArtist && (ctx_r25.tracks[ctx_r25.currentIndex] == null ? null : ctx_r25.tracks[ctx_r25.currentIndex].artist) ? " | " + (ctx_r25.tracks[ctx_r25.currentIndex] == null ? null : ctx_r25.tracks[ctx_r25.currentIndex].artist) : "", "");
        }
      }

      function AudioPlayerComponent_mat_card_18_marquee_4_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "marquee", 81);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r26 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate2"]("", ctx_r26.tracks[ctx_r26.currentIndex] == null ? null : ctx_r26.tracks[ctx_r26.currentIndex].title, "", ctx_r26.displayArtist && (ctx_r26.tracks[ctx_r26.currentIndex] == null ? null : ctx_r26.tracks[ctx_r26.currentIndex].artist) ? " | " + (ctx_r26.tracks[ctx_r26.currentIndex] == null ? null : ctx_r26.tracks[ctx_r26.currentIndex].artist) : "", " ");
        }
      }

      function AudioPlayerComponent_mat_card_18_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "mat-card", 76);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "div", 77);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](2, "div", 78);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](3, AudioPlayerComponent_mat_card_18_span_3_Template, 2, 2, "span", 12);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](4, AudioPlayerComponent_mat_card_18_marquee_4_Template, 2, 2, "marquee", 79);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](5, "div", 80);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r10 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", !ctx_r10.isPlaying);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx_r10.isPlaying);
        }
      }

      function AudioPlayerComponent_mat_accordion_19_th_6_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "th", 95);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r27 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate"](ctx_r27.titleHeader);
        }
      }

      function AudioPlayerComponent_mat_accordion_19_td_7_Template(rf, ctx) {
        if (rf & 1) {
          var _r39 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "td", 96);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function AudioPlayerComponent_mat_accordion_19_td_7_Template_td_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵrestoreView"](_r39);

            var element_r37 = ctx.$implicit;

            var ctx_r38 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](2);

            return ctx_r38.selectTrack(element_r37.index);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var element_r37 = ctx.$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"](" ", element_r37.title, " ");
        }
      }

      function AudioPlayerComponent_mat_accordion_19_th_9_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "th", 95);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r29 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate"](ctx_r29.artistHeader);
        }
      }

      function AudioPlayerComponent_mat_accordion_19_td_10_Template(rf, ctx) {
        if (rf & 1) {
          var _r42 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "td", 96);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function AudioPlayerComponent_mat_accordion_19_td_10_Template_td_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵrestoreView"](_r42);

            var element_r40 = ctx.$implicit;

            var ctx_r41 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](2);

            return ctx_r41.selectTrack(element_r40.index);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var element_r40 = ctx.$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"](" ", (element_r40 == null ? null : element_r40.artist) ? element_r40 == null ? null : element_r40.artist : "", " ");
        }
      }

      function AudioPlayerComponent_mat_accordion_19_th_12_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "th", 95);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r31 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate"](ctx_r31.durationHeader);
        }
      }

      function AudioPlayerComponent_mat_accordion_19_td_13_Template(rf, ctx) {
        if (rf & 1) {
          var _r45 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "td", 96);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function AudioPlayerComponent_mat_accordion_19_td_13_Template_td_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵrestoreView"](_r45);

            var element_r43 = ctx.$implicit;

            var ctx_r44 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](2);

            return ctx_r44.selectTrack(element_r43.index);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipe"](2, "secondsToMinutes");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var element_r43 = ctx.$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"](" ", (element_r43 == null ? null : element_r43.duration) ? _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpipeBind1"](2, 1, element_r43 == null ? null : element_r43.duration) : "", " ");
        }
      }

      function AudioPlayerComponent_mat_accordion_19_th_15_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](0, "th", 95);
        }
      }

      function AudioPlayerComponent_mat_accordion_19_td_16_div_1_mat_icon_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "mat-icon", 99);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnamespaceSVG"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "svg", 100);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](2, "path", 52);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](3, "path", 101);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }
      }

      function AudioPlayerComponent_mat_accordion_19_td_16_div_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, AudioPlayerComponent_mat_accordion_19_td_16_div_1_mat_icon_1_Template, 4, 0, "mat-icon", 98);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r47 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx_r47.isPlaying);
        }
      }

      function AudioPlayerComponent_mat_accordion_19_td_16_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "td", 97);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, AudioPlayerComponent_mat_accordion_19_td_16_div_1_Template, 2, 1, "div", 12);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var element_r46 = ctx.$implicit;

          var ctx_r34 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", (ctx_r34.tracks[ctx_r34.currentIndex] == null ? null : ctx_r34.tracks[ctx_r34.currentIndex].title) === element_r46.title);
        }
      }

      function AudioPlayerComponent_mat_accordion_19_tr_17_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](0, "tr", 102);
        }
      }

      function AudioPlayerComponent_mat_accordion_19_tr_18_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](0, "tr", 103);
        }
      }

      function AudioPlayerComponent_mat_accordion_19_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "mat-accordion", 82);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](1, "mat-expansion-panel", 83);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](2, "mat-expansion-panel-header");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](4, "table", 84);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerStart"](5, 85);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](6, AudioPlayerComponent_mat_accordion_19_th_6_Template, 2, 1, "th", 86);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](7, AudioPlayerComponent_mat_accordion_19_td_7_Template, 2, 1, "td", 87);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerStart"](8, 88);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](9, AudioPlayerComponent_mat_accordion_19_th_9_Template, 2, 1, "th", 86);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](10, AudioPlayerComponent_mat_accordion_19_td_10_Template, 2, 1, "td", 87);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerStart"](11, 89);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](12, AudioPlayerComponent_mat_accordion_19_th_12_Template, 2, 1, "th", 86);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](13, AudioPlayerComponent_mat_accordion_19_td_13_Template, 3, 3, "td", 87);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerStart"](14, 90);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](15, AudioPlayerComponent_mat_accordion_19_th_15_Template, 1, 0, "th", 86);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](16, AudioPlayerComponent_mat_accordion_19_td_16_Template, 2, 1, "td", 91);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementContainerEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](17, AudioPlayerComponent_mat_accordion_19_tr_17_Template, 1, 0, "tr", 92);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](18, AudioPlayerComponent_mat_accordion_19_tr_18_Template, 1, 0, "tr", 93);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](19, "mat-paginator", 94);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r11 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("expanded", ctx_r11.expanded);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"](" ", ctx_r11.tableHeader, " ");

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("dataSource", ctx_r11.dataSource);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](13);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("matHeaderRowDef", ctx_r11.displayedColumns);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("matRowDefColumns", ctx_r11.displayedColumns);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("pageSizeOptions", ctx_r11.pageSizeOptions);
        }
      }

      var AudioPlayerService = /*#__PURE__*/function () {
        function AudioPlayerService() {
          _classCallCheck2(this, AudioPlayerService);

          // Dynamic update of playlist
          this.tracks = [];
          this.playlistSubject$ = new rxjs__WEBPACK_IMPORTED_MODULE_4__["BehaviorSubject"](this.tracks); // Get the current track

          this.currentTrack = null;
          this.currentTrackSubject$ = new rxjs__WEBPACK_IMPORTED_MODULE_4__["BehaviorSubject"](this.currentTrack); // Get the current time

          this.currentTime = null;
          this.currentTimeSubject$ = new rxjs__WEBPACK_IMPORTED_MODULE_4__["BehaviorSubject"](this.currentTime);
        }

        _createClass2(AudioPlayerService, [{
          key: "setPlaylist",
          value: function setPlaylist(tracks) {
            this.tracks = tracks;
            this.playlistSubject$.next(this.tracks);
          }
        }, {
          key: "getPlaylist",
          value: function getPlaylist() {
            return this.playlistSubject$.asObservable();
          }
        }, {
          key: "setCurrentTrack",
          value: function setCurrentTrack(currentTrack) {
            this.currentTrack = currentTrack;
            this.currentTrackSubject$.next(this.currentTrack);
          }
        }, {
          key: "getCurrentTrack",
          value: function getCurrentTrack() {
            return this.currentTrackSubject$.asObservable();
          }
        }, {
          key: "setCurrentTime",
          value: function setCurrentTime(currentTime) {
            this.currentTime = currentTime;
            this.currentTimeSubject$.next(this.currentTime);
          }
        }, {
          key: "getCurrentTime",
          value: function getCurrentTime() {
            return this.currentTimeSubject$.asObservable();
          }
        }]);

        return AudioPlayerService;
      }();

      AudioPlayerService.ɵfac = function AudioPlayerService_Factory(t) {
        return new (t || AudioPlayerService)();
      };

      AudioPlayerService.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function AudioPlayerService_Factory() {
          return new AudioPlayerService();
        },
        token: AudioPlayerService,
        providedIn: "root"
      });

      var AudioPlayerComponent = /*#__PURE__*/function () {
        function AudioPlayerComponent(elem) {
          _classCallCheck2(this, AudioPlayerComponent);

          this.repeat = 'all';
          this.dataSource = new _angular_material_table__WEBPACK_IMPORTED_MODULE_2__["MatTableDataSource"]();
          this.tracks = [];
          this.displayTitle = true;
          this.displayPlaylist = true;
          this.displayVolumeControls = true;
          this.displayRepeatControls = true;
          this.pageSizeOptions = [10, 20, 30];
          this.expanded = true;
          this.autoPlay = false;
          this.disablePositionSlider = false;
          this.displayArtist = false;
          this.displayDuration = false; // Support for internationalization

          this.tableHeader = 'Playlist';
          this.titleHeader = 'Title';
          this.artistHeader = 'Artist';
          this.durationHeader = 'Duration';
          this.currentIndex = 0;
          this.trackEnded = new rxjs__WEBPACK_IMPORTED_MODULE_4__["Subject"]();
          this.iOS = (/iPad|iPhone|iPod/.test(navigator.platform) || navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1) && !window.MSStream;
          this.loaderDisplay = false;
          this.isPlaying = false;
          this.currentTime = 0;
          this.volume = 0.1;
          this.duration = 0.01;
          this.startOffsetValue = 0;
          this.endOffset = 0;

          if (elem.nativeElement.tagName.toLowerCase() === 'mat-advanced-audio-player') {
            console.warn("'mat-advanced-audio-player' selector is deprecated; use 'ngx-audio-player' instead.");
          }

          this.audioPlayerService = new AudioPlayerService();
        }

        _createClass2(AudioPlayerComponent, [{
          key: "playlist",
          set: function set(playlist) {
            this.audioPlayerService.setPlaylist(playlist);
          }
        }, {
          key: "matPaginator",
          set: function set(mp) {
            this.paginator = mp;
            this.setDataSourceAttributes();
          }
        }, {
          key: "startOffset",
          get: function get() {
            return this.startOffsetValue;
          },
          set: function set(seconds) {
            this.startOffsetValue = seconds;
            this.player.nativeElement.currentTime = seconds;
          }
        }, {
          key: "currTimePosChanged",
          value: function currTimePosChanged(event) {
            this.player.nativeElement.currentTime = event.value;
          }
        }, {
          key: "bindPlayerEvent",
          value: function bindPlayerEvent() {
            var _this636 = this;

            this.player.nativeElement.addEventListener('playing', function () {
              _this636.isPlaying = true;
            });
            this.player.nativeElement.addEventListener('pause', function () {
              _this636.isPlaying = false;
            });
            this.player.nativeElement.addEventListener('timeupdate', function () {
              _this636.currentTime = Math.floor(_this636.player.nativeElement.currentTime); // BUG: Commenting for `ended` event not firing #66
              // if (this.currentTime >= this.duration - this.endOffset) {
              //     this.player.nativeElement.pause();
              // }
            });
            this.player.nativeElement.addEventListener('volume', function () {
              _this636.volume = Math.floor(_this636.player.nativeElement.volume);
            });

            if (!this.iOS) {
              this.player.nativeElement.addEventListener('loadstart', function () {
                _this636.loaderDisplay = true;
              });
            }

            this.player.nativeElement.addEventListener('loadedmetadata', function () {
              _this636.loaderDisplay = false;
              _this636.duration = Math.floor(_this636.player.nativeElement.duration);
            });
            this.player.nativeElement.addEventListener('ended', function () {
              _this636.trackEnded.next('ended');
            });
          }
        }, {
          key: "playBtnHandler",
          value: function playBtnHandler() {
            if (this.loaderDisplay) {
              return;
            }

            if (this.player.nativeElement.paused) {
              if (this.currentTime >= this.duration - this.endOffset) {
                this.player.nativeElement.currentTime = this.startOffset;
              } else {
                this.player.nativeElement.currentTime = this.currentTime;
              }

              this.player.nativeElement.play();
            } else {
              this.currentTime = this.player.nativeElement.currentTime;
              this.player.nativeElement.pause();
            }
          }
        }, {
          key: "play",
          value: function play(track) {
            var _this637 = this;

            if (track) {
              this.startOffset = track.startOffset || 0;
              this.endOffset = track.endOffset || 0;
            }

            setTimeout(function () {
              _this637.player.nativeElement.play();
            }, 50);
          }
        }, {
          key: "toggleVolume",
          value: function toggleVolume() {
            if (this.volume === 0) {
              this.setVolume(1.0);
            } else {
              this.setVolume(0);
            }
          }
        }, {
          key: "toggleRepeat",
          value: function toggleRepeat() {
            if (this.repeat === 'none') {
              this.repeat = 'all';
            } else if (this.repeat === 'all') {
              if (this.tracks.length > 1) {
                this.repeat = 'one';
              } else {
                this.repeat = 'none';
              }
            } else if (this.repeat === 'one' && this.tracks.length > 1) {
              this.repeat = 'none';
            }
          }
        }, {
          key: "setVolume",
          value: function setVolume(vol) {
            this.volume = vol;
            this.player.nativeElement.volume = this.volume;
          }
        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            var _this638 = this;

            this.bindPlayerEvent(); // auto play next track

            this.player.nativeElement.addEventListener('ended', function () {
              if (_this638.checkIfSongHasStartedSinceAtleastTwoSeconds()) {
                if (_this638.repeat === 'all') {
                  _this638.nextSong();
                } else if (_this638.repeat === 'one') {
                  _this638.play();
                } else if (_this638.repeat === 'none') {// Do nothing
                }
              }
            });
            this.player.nativeElement.addEventListener('timeupdate', function () {
              _this638.audioPlayerService.setCurrentTime(_this638.player.nativeElement.currentTime);
            }); // Subscribe to playlist observer from AudioPlayerService and
            // update the playlist within MatAdvancedAudioPlayerComponent

            this.audioPlayerService.getPlaylist().subscribe(function (tracks) {
              if (tracks !== null && tracks !== []) {
                _this638.tracks = tracks;

                _this638.initialize();
              }
            });
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            if (changes.hasOwnProperty('displayArtist') || changes.hasOwnProperty('displayDuration')) {
              this.buildDisplayedColumns();
            }
          }
        }, {
          key: "buildDisplayedColumns",
          value: function buildDisplayedColumns() {
            this.displayedColumns = ['title'];

            if (this.displayArtist) {
              this.displayedColumns.push('artist');
            }

            if (this.displayDuration) {
              this.displayedColumns.push('duration');
            }

            this.displayedColumns.push('status');
          }
        }, {
          key: "initialize",
          value: function initialize() {
            this.buildDisplayedColumns(); // populate indexs for the track and configure
            // material table data source and paginator

            this.setDataSourceAttributes();
            this.player.nativeElement.currentTime = this.startOffset;
            this.updateCurrentTrack();

            if (this.autoPlay) {
              this.play();
            }
          }
        }, {
          key: "setDataSourceAttributes",
          value: function setDataSourceAttributes() {
            var index = 1;

            if (this.tracks) {
              this.tracks.forEach(function (track) {
                track.index = index++;
              });
              this.dataSource = new _angular_material_table__WEBPACK_IMPORTED_MODULE_2__["MatTableDataSource"](this.tracks);
              this.dataSource.paginator = this.paginator;
            }
          }
        }, {
          key: "nextSong",
          value: function nextSong() {
            if (this.displayPlaylist === true && ((this.currentIndex + 1) % this.paginator.pageSize === 0 || this.currentIndex + 1 === this.paginator.length)) {
              if (this.paginator.hasNextPage()) {
                this.paginator.nextPage();
              } else if (!this.paginator.hasNextPage()) {
                this.paginator.firstPage();
              }
            }

            this.currentTime = 0;
            this.duration = 0.01;

            if (this.currentIndex + 1 >= this.tracks.length) {
              this.currentIndex = 0;
            } else {
              this.currentIndex++;
            }

            this.updateCurrentTrack();
            this.play();
          }
        }, {
          key: "previousSong",
          value: function previousSong() {
            this.currentTime = 0;
            this.duration = 0.01;

            if (!this.checkIfSongHasStartedSinceAtleastTwoSeconds()) {
              if (this.displayPlaylist === true && (this.currentIndex % this.paginator.pageSize === 0 || this.currentIndex === 0)) {
                if (this.paginator.hasPreviousPage()) {
                  this.paginator.previousPage();
                } else if (!this.paginator.hasPreviousPage()) {
                  this.paginator.lastPage();
                }
              }

              if (this.currentIndex - 1 < 0) {
                this.currentIndex = this.tracks.length - 1;
              } else {
                this.currentIndex--;
              }
            } else {
              this.resetSong();
            }

            this.updateCurrentTrack();
            this.play();
          }
        }, {
          key: "resetSong",
          value: function resetSong() {
            this.player.nativeElement.src = this.tracks[this.currentIndex].link;
          }
        }, {
          key: "selectTrack",
          value: function selectTrack(index) {
            this.currentIndex = index - 1;
            this.updateCurrentTrack();
            this.play();
          }
        }, {
          key: "checkIfSongHasStartedSinceAtleastTwoSeconds",
          value: function checkIfSongHasStartedSinceAtleastTwoSeconds() {
            return this.player.nativeElement.currentTime > 2;
          }
        }, {
          key: "updateCurrentTrack",
          value: function updateCurrentTrack() {
            this.audioPlayerService.setCurrentTrack(this.tracks[this.currentIndex]);
          }
        }]);

        return AudioPlayerComponent;
      }();

      AudioPlayerComponent.ɵfac = function AudioPlayerComponent_Factory(t) {
        return new (t || AudioPlayerComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]));
      };

      AudioPlayerComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({
        type: AudioPlayerComponent,
        selectors: [["ngx-audio-player"]],
        viewQuery: function AudioPlayerComponent_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵviewQuery"](_angular_material_paginator__WEBPACK_IMPORTED_MODULE_3__["MatPaginator"], 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵviewQuery"](_c0, 3);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx.matPaginator = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx.player = _t.first);
          }
        },
        inputs: {
          displayTitle: "displayTitle",
          displayPlaylist: "displayPlaylist",
          displayVolumeControls: "displayVolumeControls",
          displayRepeatControls: "displayRepeatControls",
          pageSizeOptions: "pageSizeOptions",
          expanded: "expanded",
          autoPlay: "autoPlay",
          disablePositionSlider: "disablePositionSlider",
          displayArtist: "displayArtist",
          displayDuration: "displayDuration",
          tableHeader: "tableHeader",
          titleHeader: "titleHeader",
          artistHeader: "artistHeader",
          durationHeader: "durationHeader",
          endOffset: "endOffset",
          playlist: "playlist",
          startOffset: "startOffset"
        },
        outputs: {
          trackEnded: "trackEnded"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵNgOnChangesFeature"]],
        decls: 20,
        vars: 17,
        consts: [[1, "ngx-d-flex", "ngx-justify-content-center", "ngx-audio-player", "z-depth-1", "mat-elevation-z2", 2, "margin", "0px"], [3, "src"], ["audioPlayer", ""], ["class", "ngx-p-1", "mat-button", "", 3, "disabled", "click", 4, "ngIf"], ["mat-button", "", 1, "ngx-p-1", "play-pause", 3, "disabled", "click"], ["height", "34px", "preserveAspectRatio", "xMidYMid", "style", "margin: auto; display: block; shape-rendering: auto;", "viewBox", "0 0 100 100", "width", "34px", "xmlns", "http://www.w3.org/2000/svg", 4, "ngIf"], ["aria-hidden", "true", "class", "play-track", 4, "ngIf"], ["aria-hidden", "true", "class", "pause-track", 4, "ngIf"], ["class", "ngx-p-1 skip-next", "mat-button", "", 3, "disabled", "click", 4, "ngIf"], [1, "ngx-col"], [1, "ngx-d-flex", "ngx-flex-fill", "ngx-justify-content-center"], [1, "ngx-d-none", "ngx-d-sm-block", "ngx-py-3", "ngx-px-1", 2, "font-size", "12px"], [4, "ngIf"], [1, "ngx-d-none", "ngx-d-sm-block", "ngx-flex-fill", "ngx-p-1", 2, "width", "100%", 3, "disabled", "min", "max", "value", "change"], [1, "ngx-py-3", "ngx-px-1", 2, "font-size", "12px", "text-align", "right"], ["class", "ngx-p-1 volume justify-content-center", "mat-button", "", 3, "click", 4, "ngIf"], ["class", "ngx-p-1 volume", "mat-button", "", 3, "click", 4, "ngIf"], ["class", "mat-elevation-z1 ngx-audio-player", 4, "ngIf"], ["class", "ngx-audio-player", 4, "ngIf"], ["mat-button", "", 1, "ngx-p-1", 3, "disabled", "click"], ["aria-hidden", "true"], ["height", "32", "viewBox", "0 0 24 24", "width", "32", "xmlns", "http://www.w3.org/2000/svg"], ["d", "M6 6h2v12H6zm3.5 6l8.5 6V6z"], ["d", "M0 0h32v32H0z", "fill", "none"], ["height", "34px", "preserveAspectRatio", "xMidYMid", "viewBox", "0 0 100 100", "width", "34px", "xmlns", "http://www.w3.org/2000/svg", 2, "margin", "auto", "display", "block", "shape-rendering", "auto"], ["transform", "rotate(0 50 50)"], ["fill", "#7a7a7a", "height", "12", "rx", "3", "ry", "6", "width", "6", "x", "47", "y", "20"], ["attributeName", "opacity", "begin", "-0.9166666666666666s", "dur", "1s", "keyTimes", "0;1", "repeatCount", "indefinite", "values", "1;0"], ["transform", "rotate(30 50 50)"], ["attributeName", "opacity", "begin", "-0.8333333333333334s", "dur", "1s", "keyTimes", "0;1", "repeatCount", "indefinite", "values", "1;0"], ["transform", "rotate(60 50 50)"], ["attributeName", "opacity", "begin", "-0.75s", "dur", "1s", "keyTimes", "0;1", "repeatCount", "indefinite", "values", "1;0"], ["transform", "rotate(90 50 50)"], ["attributeName", "opacity", "begin", "-0.6666666666666666s", "dur", "1s", "keyTimes", "0;1", "repeatCount", "indefinite", "values", "1;0"], ["transform", "rotate(120 50 50)"], ["attributeName", "opacity", "begin", "-0.5833333333333334s", "dur", "1s", "keyTimes", "0;1", "repeatCount", "indefinite", "values", "1;0"], ["transform", "rotate(150 50 50)"], ["attributeName", "opacity", "begin", "-0.5s", "dur", "1s", "keyTimes", "0;1", "repeatCount", "indefinite", "values", "1;0"], ["transform", "rotate(180 50 50)"], ["attributeName", "opacity", "begin", "-0.4166666666666667s", "dur", "1s", "keyTimes", "0;1", "repeatCount", "indefinite", "values", "1;0"], ["transform", "rotate(210 50 50)"], ["attributeName", "opacity", "begin", "-0.3333333333333333s", "dur", "1s", "keyTimes", "0;1", "repeatCount", "indefinite", "values", "1;0"], ["transform", "rotate(240 50 50)"], ["attributeName", "opacity", "begin", "-0.25s", "dur", "1s", "keyTimes", "0;1", "repeatCount", "indefinite", "values", "1;0"], ["transform", "rotate(270 50 50)"], ["attributeName", "opacity", "begin", "-0.16666666666666666s", "dur", "1s", "keyTimes", "0;1", "repeatCount", "indefinite", "values", "1;0"], ["transform", "rotate(300 50 50)"], ["attributeName", "opacity", "begin", "-0.08333333333333333s", "dur", "1s", "keyTimes", "0;1", "repeatCount", "indefinite", "values", "1;0"], ["transform", "rotate(330 50 50)"], ["attributeName", "opacity", "begin", "0s", "dur", "1s", "keyTimes", "0;1", "repeatCount", "indefinite", "values", "1;0"], ["aria-hidden", "true", 1, "play-track"], ["d", "M8 5v14l11-7z"], ["d", "M0 0h24v24H0z", "fill", "none"], ["aria-hidden", "true", 1, "pause-track"], ["d", "M6 19h4V5H6v14zm8-14v14h4V5h-4z"], ["mat-button", "", 1, "ngx-p-1", "skip-next", 3, "disabled", "click"], ["aria-hidden", "true", 1, "next-track"], ["d", "M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z"], ["mat-button", "", 1, "ngx-p-1", "volume", "justify-content-center", 3, "click"], ["aria-hidden", "true", "class", "volume-mute justify-content-center", 4, "ngIf"], ["aria-hidden", "true", "class", "volume-mute", 4, "ngIf"], ["aria-hidden", "true", "class", "volume-up", 4, "ngIf"], ["aria-hidden", "true", 1, "volume-mute", "justify-content-center"], ["height", "24", "width", "24", "xmlns", "http://www.w3.org/2000/svg", "viewBox", "0 0 22 22"], ["d", "m0,0l24,0l0,24l-24,0l0,-24z", "fill", "none"], ["d", "m8,20l0,1.932a0.5,0.5 0 0 1 -0.82,0.385l-4.12,-3.433a0.5,0.5 0 0 1 0.322,-0.884l14.618,0a2,2 0 0 0 2,-2l0,-8l2,0l0,8a4,4 0 0 1 -4,4l-10,0zm8,-16l0,-1.932a0.5,0.5 0 0 1 0.82,-0.385l4.12,3.433a0.5,0.5 0 0 1 -0.321,0.884l-14.619,0a2,2 0 0 0 -2,2l0,8l-2,0l0,-8a4,4 0 0 1 4,-4l10,0z"], ["d", "M 3 0 L 22.4164 22.2706 L 21 24 L 1.5836 1.8128 L 3 0"], ["aria-hidden", "true", 1, "volume-mute"], ["fill", "none", "d", "M0 0h24v24H0z"], ["d", "M8 20v1.932a.5.5 0 0 1-.82.385l-4.12-3.433A.5.5 0 0 1 3.382 18H18a2 2 0 0 0 2-2V8h2v8a4 4 0 0 1-4 4H8zm8-16V2.068a.5.5 0 0 1 .82-.385l4.12 3.433a.5.5 0 0 1-.321.884H6a2 2 0 0 0-2 2v8H2V8a4 4 0 0 1 4-4h10z"], ["aria-hidden", "true", 1, "volume-up"], ["d", "M8 20v1.932a.5.5 0 0 1-.82.385l-4.12-3.433A.5.5 0 0 1 3.382 18H18a2 2 0 0 0 2-2V8h2v8a4 4 0 0 1-4 4H8zm8-16V2.068a.5.5 0 0 1 .82-.385l4.12 3.433a.5.5 0 0 1-.321.884H6a2 2 0 0 0-2 2v8H2V8a4 4 0 0 1 4-4h10zm-5 4h2v8h-2v-6H9V9l2-1z"], ["mat-button", "", 1, "ngx-p-1", "volume", 3, "click"], ["height", "28", "viewBox", "0 0 24 24", "width", "28", "xmlns", "http://www.w3.org/2000/svg"], ["d", "M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z"], ["d", "M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"], [1, "mat-elevation-z1", "ngx-audio-player"], [2, "text-align", "center"], [2, "margin", "1px 2px", "padding", "1em"], ["behavior", "scroll", "direction", "left", 4, "ngIf"], [1, "clear"], ["behavior", "scroll", "direction", "left"], [1, "ngx-audio-player"], [3, "expanded"], ["mat-table", "", 1, "mat-elevation-z6", 3, "dataSource"], ["matColumnDef", "title"], ["mat-header-cell", "", 4, "matHeaderCellDef"], ["mat-cell", "", 3, "click", 4, "matCellDef"], ["matColumnDef", "artist"], ["matColumnDef", "duration"], ["matColumnDef", "status"], ["mat-cell", "", 4, "matCellDef"], ["mat-header-row", "", 4, "matHeaderRowDef"], ["class", "mat-select-content", "mat-row", "", 4, "matRowDef", "matRowDefColumns"], ["showFirstLastButtons", "", 3, "pageSizeOptions"], ["mat-header-cell", ""], ["mat-cell", "", 3, "click"], ["mat-cell", ""], ["aria-hidden", "true", "class", "currently-playing", 4, "ngIf"], ["aria-hidden", "true", 1, "currently-playing"], ["height", "24", "viewBox", "0 0 24 24", "width", "24", "xmlns", "http://www.w3.org/2000/svg"], ["d", "M12 3v9.28c-.47-.17-.97-.28-1.5-.28C8.01 12 6 14.01 6 16.5S8.01 21 10.5 21c2.31 0 4.2-1.75 4.45-4H15V6h4V3h-7z"], ["mat-header-row", ""], ["mat-row", "", 1, "mat-select-content"]],
        template: function AudioPlayerComponent_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "mat-card", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](1, "audio", 1, 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](3, AudioPlayerComponent_button_3_Template, 5, 1, "button", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](4, "button", 4);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function AudioPlayerComponent_Template_button_click_4_listener() {
              return ctx.playBtnHandler();
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](5, AudioPlayerComponent__svg_svg_5_Template, 37, 0, "svg", 5);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](6, AudioPlayerComponent_mat_icon_6_Template, 4, 0, "mat-icon", 6);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](7, AudioPlayerComponent_mat_icon_7_Template, 4, 0, "mat-icon", 7);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](8, AudioPlayerComponent_button_8_Template, 5, 1, "button", 8);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](9, "div", 9);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](10, "div", 10);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](11, "div", 11);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](12, AudioPlayerComponent_span_12_Template, 3, 3, "span", 12);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](13, "mat-slider", 13);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("change", function AudioPlayerComponent_Template_mat_slider_change_13_listener($event) {
              return ctx.currTimePosChanged($event);
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](14, "div", 14);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](15, AudioPlayerComponent_span_15_Template, 3, 3, "span", 12);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](16, AudioPlayerComponent_button_16_Template, 4, 3, "button", 15);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](17, AudioPlayerComponent_button_17_Template, 3, 2, "button", 16);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](18, AudioPlayerComponent_mat_card_18_Template, 6, 2, "mat-card", 17);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](19, AudioPlayerComponent_mat_accordion_19_Template, 20, 6, "mat-accordion", 18);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("src", ctx.tracks[ctx.currentIndex] == null ? null : ctx.tracks[ctx.currentIndex].link, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsanitizeUrl"]);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.tracks.length > 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("disabled", ctx.loaderDisplay);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.loaderDisplay);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", !ctx.loaderDisplay && !ctx.isPlaying);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", !ctx.loaderDisplay && ctx.isPlaying);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.tracks.length > 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](4);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.duration !== 0.01);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpropertyInterpolate"]("max", ctx.duration - ctx.endOffset);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpropertyInterpolate"]("value", ctx.currentTime);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("disabled", ctx.disablePositionSlider)("min", ctx.startOffset);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.duration !== 0.01);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.displayRepeatControls);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.displayVolumeControls);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.displayTitle);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.displayPlaylist && ctx.tracks.length > 1);
          }
        },
        directives: function directives() {
          return [_angular_material_card__WEBPACK_IMPORTED_MODULE_8__["MatCard"], _angular_common__WEBPACK_IMPORTED_MODULE_10__["NgIf"], _angular_material_button__WEBPACK_IMPORTED_MODULE_9__["MatButton"], _angular_material_slider__WEBPACK_IMPORTED_MODULE_5__["MatSlider"], _angular_material_icon__WEBPACK_IMPORTED_MODULE_12__["MatIcon"], _angular_material_expansion__WEBPACK_IMPORTED_MODULE_7__["MatAccordion"], _angular_material_expansion__WEBPACK_IMPORTED_MODULE_7__["MatExpansionPanel"], _angular_material_expansion__WEBPACK_IMPORTED_MODULE_7__["MatExpansionPanelHeader"], _angular_material_table__WEBPACK_IMPORTED_MODULE_2__["MatTable"], _angular_material_table__WEBPACK_IMPORTED_MODULE_2__["MatColumnDef"], _angular_material_table__WEBPACK_IMPORTED_MODULE_2__["MatHeaderCellDef"], _angular_material_table__WEBPACK_IMPORTED_MODULE_2__["MatCellDef"], _angular_material_table__WEBPACK_IMPORTED_MODULE_2__["MatHeaderRowDef"], _angular_material_table__WEBPACK_IMPORTED_MODULE_2__["MatRowDef"], _angular_material_paginator__WEBPACK_IMPORTED_MODULE_3__["MatPaginator"], _angular_material_table__WEBPACK_IMPORTED_MODULE_2__["MatHeaderCell"], _angular_material_table__WEBPACK_IMPORTED_MODULE_2__["MatCell"], _angular_material_table__WEBPACK_IMPORTED_MODULE_2__["MatHeaderRow"], _angular_material_table__WEBPACK_IMPORTED_MODULE_2__["MatRow"]];
        },
        pipes: function pipes() {
          return [SecondsToMinutesPipe];
        },
        styles: ["mat-card[_ngcontent-%COMP%], mat-slider[_ngcontent-%COMP%]{padding:0!important}button[_ngcontent-%COMP%]:focus, button[_ngcontent-%COMP%]:hover{outline:0!important}svg[_ngcontent-%COMP%]{vertical-align:top}.mat-icon[_ngcontent-%COMP%]{height:32px!important;width:32px!important}mat-icon[_ngcontent-%COMP%] > .currently-playing[_ngcontent-%COMP%]{height:16px!important;width:16px!important}table[_ngcontent-%COMP%]{width:100%}  .ngx-audio-player{min-width:375px}.mat-expansion-panel[_ngcontent-%COMP%]{min-width:375px}  .mat-paginator-container{justify-content:space-between!important}.material-icons[_ngcontent-%COMP%]{font-size:16px!important}.play-pause[_ngcontent-%COMP%]{border-left:1px solid rgba(0,0,0,.1);border-right:1px solid rgba(0,0,0,.1)}.volume[_ngcontent-%COMP%]{border-left:1px solid rgba(0,0,0,.1)}.skip-next[_ngcontent-%COMP%]{border-right:1px solid rgba(0,0,0,.1)}*[_ngcontent-%COMP%], [_ngcontent-%COMP%]::after, [_ngcontent-%COMP%]::before{box-sizing:inherit}.ngx-p-1[_ngcontent-%COMP%]{padding:.25rem!important}.ngx-col[_ngcontent-%COMP%], .ngx-col-1[_ngcontent-%COMP%], .ngx-col-10[_ngcontent-%COMP%], .ngx-col-11[_ngcontent-%COMP%], .ngx-col-12[_ngcontent-%COMP%], .ngx-col-2[_ngcontent-%COMP%], .ngx-col-3[_ngcontent-%COMP%], .ngx-col-4[_ngcontent-%COMP%], .ngx-col-5[_ngcontent-%COMP%], .ngx-col-6[_ngcontent-%COMP%], .ngx-col-7[_ngcontent-%COMP%], .ngx-col-8[_ngcontent-%COMP%], .ngx-col-9[_ngcontent-%COMP%], .ngx-col-auto[_ngcontent-%COMP%], .ngx-col-lg[_ngcontent-%COMP%], .ngx-col-lg-1[_ngcontent-%COMP%], .ngx-col-lg-10[_ngcontent-%COMP%], .ngx-col-lg-11[_ngcontent-%COMP%], .ngx-col-lg-12[_ngcontent-%COMP%], .ngx-col-lg-2[_ngcontent-%COMP%], .ngx-col-lg-3[_ngcontent-%COMP%], .ngx-col-lg-4[_ngcontent-%COMP%], .ngx-col-lg-5[_ngcontent-%COMP%], .ngx-col-lg-6[_ngcontent-%COMP%], .ngx-col-lg-7[_ngcontent-%COMP%], .ngx-col-lg-8[_ngcontent-%COMP%], .ngx-col-lg-9[_ngcontent-%COMP%], .ngx-col-lg-auto[_ngcontent-%COMP%], .ngx-col-md[_ngcontent-%COMP%], .ngx-col-md-1[_ngcontent-%COMP%], .ngx-col-md-10[_ngcontent-%COMP%], .ngx-col-md-11[_ngcontent-%COMP%], .ngx-col-md-12[_ngcontent-%COMP%], .ngx-col-md-2[_ngcontent-%COMP%], .ngx-col-md-3[_ngcontent-%COMP%], .ngx-col-md-4[_ngcontent-%COMP%], .ngx-col-md-5[_ngcontent-%COMP%], .ngx-col-md-6[_ngcontent-%COMP%], .ngx-col-md-7[_ngcontent-%COMP%], .ngx-col-md-8[_ngcontent-%COMP%], .ngx-col-md-9[_ngcontent-%COMP%], .ngx-col-md-auto[_ngcontent-%COMP%], .ngx-col-sm[_ngcontent-%COMP%], .ngx-col-sm-1[_ngcontent-%COMP%], .ngx-col-sm-10[_ngcontent-%COMP%], .ngx-col-sm-11[_ngcontent-%COMP%], .ngx-col-sm-12[_ngcontent-%COMP%], .ngx-col-sm-2[_ngcontent-%COMP%], .ngx-col-sm-3[_ngcontent-%COMP%], .ngx-col-sm-4[_ngcontent-%COMP%], .ngx-col-sm-5[_ngcontent-%COMP%], .ngx-col-sm-6[_ngcontent-%COMP%], .ngx-col-sm-7[_ngcontent-%COMP%], .ngx-col-sm-8[_ngcontent-%COMP%], .ngx-col-sm-9[_ngcontent-%COMP%], .ngx-col-sm-auto[_ngcontent-%COMP%], .ngx-col-xl[_ngcontent-%COMP%], .ngx-col-xl-1[_ngcontent-%COMP%], .ngx-col-xl-10[_ngcontent-%COMP%], .ngx-col-xl-11[_ngcontent-%COMP%], .ngx-col-xl-12[_ngcontent-%COMP%], .ngx-col-xl-2[_ngcontent-%COMP%], .ngx-col-xl-3[_ngcontent-%COMP%], .ngx-col-xl-4[_ngcontent-%COMP%], .ngx-col-xl-5[_ngcontent-%COMP%], .ngx-col-xl-6[_ngcontent-%COMP%], .ngx-col-xl-7[_ngcontent-%COMP%], .ngx-col-xl-8[_ngcontent-%COMP%], .ngx-col-xl-9[_ngcontent-%COMP%], .ngx-col-xl-auto[_ngcontent-%COMP%]{position:relative;width:100%;padding-right:15px;padding-left:15px}.ngx-col[_ngcontent-%COMP%]{flex-basis:0;flex-grow:1;max-width:100%}.ngx-justify-content-center[_ngcontent-%COMP%]{justify-content:center!important}.ngx-flex-fill[_ngcontent-%COMP%]{flex:1 1 auto!important}.ngx-d-flex[_ngcontent-%COMP%]{display:flex!important}.ngx-pb-3[_ngcontent-%COMP%], .ngx-py-3[_ngcontent-%COMP%]{padding-bottom:1rem!important}.ngx-pt-3[_ngcontent-%COMP%], .ngx-py-3[_ngcontent-%COMP%]{padding-top:1rem!important}.ngx-pl-1[_ngcontent-%COMP%], .ngx-px-1[_ngcontent-%COMP%]{padding-left:.25rem!important}.ngx-pr-1[_ngcontent-%COMP%], .ngx-px-1[_ngcontent-%COMP%]{padding-right:.25rem!important}@media (max-width:768px){.ngx-sm-block[_ngcontent-%COMP%]{display:block!important}.ngx-d-none[_ngcontent-%COMP%]{display:none!important}}"]
      });

      AudioPlayerComponent.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
        }];
      };

      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"])(), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Array), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:paramtypes", [Array])], AudioPlayerComponent.prototype, "playlist", null);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewChild"])(_angular_material_paginator__WEBPACK_IMPORTED_MODULE_3__["MatPaginator"], {
        "static": false
      }), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", _angular_material_paginator__WEBPACK_IMPORTED_MODULE_3__["MatPaginator"]), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:paramtypes", [_angular_material_paginator__WEBPACK_IMPORTED_MODULE_3__["MatPaginator"]])], AudioPlayerComponent.prototype, "matPaginator", null);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"])(), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Object)], AudioPlayerComponent.prototype, "displayTitle", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"])(), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Object)], AudioPlayerComponent.prototype, "displayPlaylist", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"])(), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Object)], AudioPlayerComponent.prototype, "displayVolumeControls", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"])(), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Object)], AudioPlayerComponent.prototype, "displayRepeatControls", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"])(), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Object)], AudioPlayerComponent.prototype, "pageSizeOptions", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"])(), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Object)], AudioPlayerComponent.prototype, "expanded", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"])(), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Object)], AudioPlayerComponent.prototype, "autoPlay", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"])(), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Object)], AudioPlayerComponent.prototype, "disablePositionSlider", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"])(), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Object)], AudioPlayerComponent.prototype, "displayArtist", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"])(), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Object)], AudioPlayerComponent.prototype, "displayDuration", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"])(), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Object)], AudioPlayerComponent.prototype, "tableHeader", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"])(), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Object)], AudioPlayerComponent.prototype, "titleHeader", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"])(), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Object)], AudioPlayerComponent.prototype, "artistHeader", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"])(), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Object)], AudioPlayerComponent.prototype, "durationHeader", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"])(), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", rxjs__WEBPACK_IMPORTED_MODULE_4__["Subject"])], AudioPlayerComponent.prototype, "trackEnded", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewChild"])('audioPlayer', {
        "static": true
      }), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"])], AudioPlayerComponent.prototype, "player", void 0);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"])(), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Number), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:paramtypes", [Number])], AudioPlayerComponent.prototype, "startOffset", null);
      Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"])(), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:type", Object)], AudioPlayerComponent.prototype, "endOffset", void 0);
      AudioPlayerComponent = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__metadata"])("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]])], AudioPlayerComponent);
      /*
       * Transform seconds to minutes:seconds
       * Example : 270 -> 02:30
      */

      var SecondsToMinutesPipe = /*#__PURE__*/function () {
        function SecondsToMinutesPipe() {
          _classCallCheck2(this, SecondsToMinutesPipe);
        }

        _createClass2(SecondsToMinutesPipe, [{
          key: "transform",
          value: function transform(time) {
            var hours = ('0' + Math.floor(time / 3600)).slice(-2);
            var minutes = ('0' + Math.floor(time % 3600 / 60)).slice(-2);
            var seconds = ('0' + time % 60).slice(-2);

            if (hours !== '00') {
              return "".concat(hours, ":").concat(minutes, ":").concat(seconds);
            }

            return "".concat(minutes, ":").concat(seconds);
          }
        }]);

        return SecondsToMinutesPipe;
      }();

      SecondsToMinutesPipe.ɵfac = function SecondsToMinutesPipe_Factory(t) {
        return new (t || SecondsToMinutesPipe)();
      };

      SecondsToMinutesPipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefinePipe"]({
        name: "secondsToMinutes",
        type: SecondsToMinutesPipe,
        pure: true
      });

      var NgxAudioPlayerModule = function NgxAudioPlayerModule() {
        _classCallCheck2(this, NgxAudioPlayerModule);
      };

      NgxAudioPlayerModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({
        type: NgxAudioPlayerModule
      });
      NgxAudioPlayerModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({
        factory: function NgxAudioPlayerModule_Factory(t) {
          return new (t || NgxAudioPlayerModule)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_10__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_11__["FormsModule"], _angular_material_button__WEBPACK_IMPORTED_MODULE_9__["MatButtonModule"], _angular_material_card__WEBPACK_IMPORTED_MODULE_8__["MatCardModule"], _angular_material_table__WEBPACK_IMPORTED_MODULE_2__["MatTableModule"], _angular_material_form_field__WEBPACK_IMPORTED_MODULE_6__["MatFormFieldModule"], _angular_material_slider__WEBPACK_IMPORTED_MODULE_5__["MatSliderModule"], _angular_material_expansion__WEBPACK_IMPORTED_MODULE_7__["MatExpansionModule"], _angular_material_paginator__WEBPACK_IMPORTED_MODULE_3__["MatPaginatorModule"], _angular_material_icon__WEBPACK_IMPORTED_MODULE_12__["MatIconModule"]]]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](AudioPlayerService, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [];
        }, null);
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](AudioPlayerComponent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"],
          args: [{
            selector: 'ngx-audio-player',
            template: "<mat-card class=\"ngx-d-flex ngx-justify-content-center ngx-audio-player z-depth-1 mat-elevation-z2\"\n    style=\"margin: 0px;\">\n\n    <audio #audioPlayer [src]=\"tracks[currentIndex]?.link\"></audio>\n\n    <button *ngIf=\"tracks.length > 1\" (click)='previousSong();' [disabled]=\"loaderDisplay\" class=\"ngx-p-1\" mat-button>\n        <mat-icon aria-hidden=\"true\">\n            <!-- Skip previous icon (skip_previous) -->\n            <svg height=\"32\" viewBox=\"0 0 24 24\" width=\"32\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M6 6h2v12H6zm3.5 6l8.5 6V6z\" />\n                <path d=\"M0 0h32v32H0z\" fill=\"none\" />\n            </svg>\n        </mat-icon>\n    </button>\n    <button (click)='playBtnHandler();' [disabled]=\"loaderDisplay\" class=\"ngx-p-1 play-pause\" mat-button>\n\n        <svg *ngIf=\"loaderDisplay\" height=\"34px\" preserveAspectRatio=\"xMidYMid\"\n            style=\"margin: auto; display: block; shape-rendering: auto;\" viewBox=\"0 0 100 100\" width=\"34px\"\n            xmlns=\"http://www.w3.org/2000/svg\">\n            <g transform=\"rotate(0 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"-0.9166666666666666s\" dur=\"1s\" keyTimes=\"0;1\"\n                        repeatCount=\"indefinite\" values=\"1;0\" />\n                </rect>\n            </g>\n            <g transform=\"rotate(30 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"-0.8333333333333334s\" dur=\"1s\" keyTimes=\"0;1\"\n                        repeatCount=\"indefinite\" values=\"1;0\" />\n                </rect>\n            </g>\n            <g transform=\"rotate(60 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"-0.75s\" dur=\"1s\" keyTimes=\"0;1\" repeatCount=\"indefinite\"\n                        values=\"1;0\" />\n                </rect>\n            </g>\n            <g transform=\"rotate(90 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"-0.6666666666666666s\" dur=\"1s\" keyTimes=\"0;1\"\n                        repeatCount=\"indefinite\" values=\"1;0\" />\n                </rect>\n            </g>\n            <g transform=\"rotate(120 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"-0.5833333333333334s\" dur=\"1s\" keyTimes=\"0;1\"\n                        repeatCount=\"indefinite\" values=\"1;0\" />\n                </rect>\n            </g>\n            <g transform=\"rotate(150 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"-0.5s\" dur=\"1s\" keyTimes=\"0;1\" repeatCount=\"indefinite\"\n                        values=\"1;0\" />\n                </rect>\n            </g>\n            <g transform=\"rotate(180 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"-0.4166666666666667s\" dur=\"1s\" keyTimes=\"0;1\"\n                        repeatCount=\"indefinite\" values=\"1;0\" />\n                </rect>\n            </g>\n            <g transform=\"rotate(210 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"-0.3333333333333333s\" dur=\"1s\" keyTimes=\"0;1\"\n                        repeatCount=\"indefinite\" values=\"1;0\" />\n                </rect>\n            </g>\n            <g transform=\"rotate(240 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"-0.25s\" dur=\"1s\" keyTimes=\"0;1\" repeatCount=\"indefinite\"\n                        values=\"1;0\" />\n                </rect>\n            </g>\n            <g transform=\"rotate(270 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"-0.16666666666666666s\" dur=\"1s\" keyTimes=\"0;1\"\n                        repeatCount=\"indefinite\" values=\"1;0\" />\n                </rect>\n            </g>\n            <g transform=\"rotate(300 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"-0.08333333333333333s\" dur=\"1s\" keyTimes=\"0;1\"\n                        repeatCount=\"indefinite\" values=\"1;0\" />\n                </rect>\n            </g>\n            <g transform=\"rotate(330 50 50)\">\n                <rect fill=\"#7a7a7a\" height=\"12\" rx=\"3\" ry=\"6\" width=\"6\" x=\"47\" y=\"20\">\n                    <animate attributeName=\"opacity\" begin=\"0s\" dur=\"1s\" keyTimes=\"0;1\" repeatCount=\"indefinite\"\n                        values=\"1;0\" />\n                </rect>\n            </g>\n        </svg>\n\n        <mat-icon *ngIf=\"!loaderDisplay && !isPlaying\" aria-hidden=\"true\" class=\"play-track\">\n            <!-- Play icon (play_arrow) -->\n            <svg height=\"32\" viewBox=\"0 0 24 24\" width=\"32\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M8 5v14l11-7z\" />\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n            </svg>\n        </mat-icon>\n        <mat-icon *ngIf=\"!loaderDisplay && isPlaying\" aria-hidden=\"true\" class=\"pause-track\">\n            <!-- Pause icon (pause) -->\n            <svg height=\"32\" viewBox=\"0 0 24 24\" width=\"32\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M6 19h4V5H6v14zm8-14v14h4V5h-4z\" />\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n            </svg>\n        </mat-icon>\n    </button>\n    <button *ngIf=\"tracks.length > 1\" (click)='nextSong();' [disabled]=\"loaderDisplay\" class=\"ngx-p-1 skip-next\"\n        mat-button>\n        <mat-icon aria-hidden=\"true\" class=\"next-track\">\n            <!-- Skip next icon (skip_next) -->\n            <svg height=\"32\" viewBox=\"0 0 24 24\" width=\"32\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z\" />\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n            </svg>\n        </mat-icon>\n    </button>\n\n    <div class=\"ngx-col\">\n        <div class=\"ngx-d-flex ngx-flex-fill ngx-justify-content-center\">\n            <div class=\"ngx-d-none ngx-d-sm-block ngx-py-3 ngx-px-1\" style=\"font-size: 12px\">\n                <span *ngIf=\"duration !== 0.01\">\n                    {{currentTime | secondsToMinutes}}\n                </span>\n            </div>\n            <mat-slider [disabled]=\"disablePositionSlider\" (change)=\"currTimePosChanged($event)\" [min]=\"startOffset\"\n                class=\"ngx-d-none ngx-d-sm-block ngx-flex-fill ngx-p-1\" max=\"{{duration-endOffset}}\" style=\"width: 100%\"\n                value=\"{{currentTime}}\"></mat-slider>\n\n            <div class=\"ngx-py-3 ngx-px-1\" style=\"font-size: 12px; text-align: right\">\n                <span *ngIf=\"duration !== 0.01\">\n                    -{{duration-currentTime | secondsToMinutes }}\n                </span>\n            </div>\n        </div>\n    </div>\n    <button (click)='toggleRepeat();' *ngIf=\"displayRepeatControls\" class=\"ngx-p-1 volume justify-content-center\"\n        mat-button>\n        <mat-icon *ngIf=\"repeat === 'none'\" aria-hidden=\"true\" class=\"volume-mute justify-content-center\">\n            <!-- Repeat None -->\n            <svg height=\"24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 22 22\">\n                <g>\n                    <g>\n                        <path d=\"m0,0l24,0l0,24l-24,0l0,-24z\" fill=\"none\" />\n                        <path\n                            d=\"m8,20l0,1.932a0.5,0.5 0 0 1 -0.82,0.385l-4.12,-3.433a0.5,0.5 0 0 1 0.322,-0.884l14.618,0a2,2 0 0 0 2,-2l0,-8l2,0l0,8a4,4 0 0 1 -4,4l-10,0zm8,-16l0,-1.932a0.5,0.5 0 0 1 0.82,-0.385l4.12,3.433a0.5,0.5 0 0 1 -0.321,0.884l-14.619,0a2,2 0 0 0 -2,2l0,8l-2,0l0,-8a4,4 0 0 1 4,-4l10,0z\" />\n                        <path d=\"M 3 0 L 22.4164 22.2706 L 21 24 L 1.5836 1.8128 L 3 0\"></path>\n                    </g>\n                    <!-- <line xmlns=\"http://www.w3.org/2000/svg\" id=\"svg_4\" y2=\"22.27056\" x2=\"22.41638\" y1=\"1.81276\" x1=\"1.58362\" stroke-width=\"2\" fill=\"none\"/> -->\n                </g>\n            </svg>\n        </mat-icon>\n        <mat-icon *ngIf=\"repeat === 'all'\" aria-hidden=\"true\" class=\"volume-mute\">\n            <!-- Repeat All -->\n            <svg height=\"24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 22 22\">\n                <g>\n                    <path fill=\"none\" d=\"M0 0h24v24H0z\" />\n                    <path\n                        d=\"M8 20v1.932a.5.5 0 0 1-.82.385l-4.12-3.433A.5.5 0 0 1 3.382 18H18a2 2 0 0 0 2-2V8h2v8a4 4 0 0 1-4 4H8zm8-16V2.068a.5.5 0 0 1 .82-.385l4.12 3.433a.5.5 0 0 1-.321.884H6a2 2 0 0 0-2 2v8H2V8a4 4 0 0 1 4-4h10z\" />\n                </g>\n            </svg>\n        </mat-icon>\n        <mat-icon *ngIf=\"repeat === 'one'\" aria-hidden=\"true\" class=\"volume-up\">\n            <!-- Repeat ONE -->\n            <svg height=\"24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 22 22\">\n                <g>\n                    <path fill=\"none\" d=\"M0 0h24v24H0z\" />\n                    <path\n                        d=\"M8 20v1.932a.5.5 0 0 1-.82.385l-4.12-3.433A.5.5 0 0 1 3.382 18H18a2 2 0 0 0 2-2V8h2v8a4 4 0 0 1-4 4H8zm8-16V2.068a.5.5 0 0 1 .82-.385l4.12 3.433a.5.5 0 0 1-.321.884H6a2 2 0 0 0-2 2v8H2V8a4 4 0 0 1 4-4h10zm-5 4h2v8h-2v-6H9V9l2-1z\" />\n                </g>\n            </svg>\n        </mat-icon>\n    </button>\n    <button (click)='toggleVolume();' *ngIf=\"displayVolumeControls\" class=\"ngx-p-1 volume\" mat-button>\n        <mat-icon *ngIf=\"volume === 0\" aria-hidden=\"true\" class=\"volume-mute\">\n            <!-- Volume mute icon (volume_off) -->\n            <svg height=\"28\" viewBox=\"0 0 24 24\" width=\"28\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path\n                    d=\"M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z\" />\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n            </svg>\n        </mat-icon>\n        <mat-icon *ngIf=\"volume > 0\" aria-hidden=\"true\" class=\"volume-up\">\n            <!-- Volume up icon (volume_up) -->\n            <svg height=\"28\" viewBox=\"0 0 24 24\" width=\"28\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path\n                    d=\"M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z\" />\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n            </svg>\n        </mat-icon>\n    </button>\n</mat-card>\n\n<mat-card *ngIf=\"displayTitle\" class=\"mat-elevation-z1 ngx-audio-player\">\n    <div style=\"text-align: center;\">\n        <div style=\"margin: 1px 2px; padding: 1em\">\n            <span *ngIf=\"!isPlaying\">{{ tracks[currentIndex]?.title }}{{ displayArtist && tracks[currentIndex]?.artist ?\n                ' | ' + tracks[currentIndex]?.artist : ''}}</span>\n            <marquee *ngIf=\"isPlaying\" behavior=\"scroll\" direction=\"left\">{{ tracks[currentIndex]?.title\n                }}{{ displayArtist && tracks[currentIndex]?.artist ? ' | ' + tracks[currentIndex]?.artist : ''}}\n            </marquee>\n        </div>\n        <div class=\"clear\"></div>\n    </div>\n</mat-card>\n\n<mat-accordion class=\"ngx-audio-player\" *ngIf=\"displayPlaylist && tracks.length > 1\">\n    <mat-expansion-panel [expanded]=\"expanded\">\n        <mat-expansion-panel-header>\n            {{tableHeader}}\n        </mat-expansion-panel-header>\n        <table [dataSource]=\"dataSource\" class=\"mat-elevation-z6\" mat-table>\n            <ng-container matColumnDef=\"title\">\n                <th *matHeaderCellDef mat-header-cell>{{titleHeader}}</th>\n                <td (click)=\"selectTrack(element.index)\" *matCellDef=\"let element\" mat-cell>\n                    {{element.title}}\n                </td>\n            </ng-container>\n            <ng-container matColumnDef=\"artist\">\n                <th *matHeaderCellDef mat-header-cell>{{artistHeader}}</th>\n                <td (click)=\"selectTrack(element.index)\" *matCellDef=\"let element\" mat-cell>\n                    {{element?.artist ? element?.artist : ''}}\n                </td>\n            </ng-container>\n            <ng-container matColumnDef=\"duration\">\n                <th *matHeaderCellDef mat-header-cell>{{durationHeader}}</th>\n                <td (click)=\"selectTrack(element.index)\" *matCellDef=\"let element\" mat-cell>\n                    {{element?.duration ? (element?.duration | secondsToMinutes) : ''}}\n                </td>\n            </ng-container>\n            <ng-container matColumnDef=\"status\">\n                <th *matHeaderCellDef mat-header-cell></th>\n                <td *matCellDef=\"let element\" mat-cell>\n                    <div *ngIf=\"tracks[currentIndex]?.title === element.title\">\n                        <!-- <mat-icon *ngIf=\"isPlaying\" aria-hidden=\"true\">\n                          <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M6 19h4V5H6v14zm8-14v14h4V5h-4z\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/></svg>\n                        </mat-icon> -->\n                        <mat-icon *ngIf=\"isPlaying\" aria-hidden=\"true\" class=\"currently-playing\">\n                            <!-- Play icon (play_arrow) -->\n                            <svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\">\n                                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n                                <path\n                                    d=\"M12 3v9.28c-.47-.17-.97-.28-1.5-.28C8.01 12 6 14.01 6 16.5S8.01 21 10.5 21c2.31 0 4.2-1.75 4.45-4H15V6h4V3h-7z\" />\n                            </svg>\n                        </mat-icon>\n                    </div>\n                </td>\n            </ng-container>\n            <tr *matHeaderRowDef=\"displayedColumns\" mat-header-row></tr>\n            <tr *matRowDef=\"let row; columns: displayedColumns;\" class=\"mat-select-content\" mat-row></tr>\n        </table>\n        <mat-paginator [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons></mat-paginator>\n    </mat-expansion-panel>\n</mat-accordion>",
            styles: ["mat-card,mat-slider{padding:0!important}button:focus,button:hover{outline:0!important}svg{vertical-align:top}.mat-icon{height:32px!important;width:32px!important}mat-icon>.currently-playing{height:16px!important;width:16px!important}table{width:100%}::ng-deep .ngx-audio-player{min-width:375px}.mat-expansion-panel{min-width:375px}::ng-deep .mat-paginator-container{justify-content:space-between!important}.material-icons{font-size:16px!important}.play-pause{border-left:1px solid rgba(0,0,0,.1);border-right:1px solid rgba(0,0,0,.1)}.volume{border-left:1px solid rgba(0,0,0,.1)}.skip-next{border-right:1px solid rgba(0,0,0,.1)}*,::after,::before{box-sizing:inherit}.ngx-p-1{padding:.25rem!important}.ngx-col,.ngx-col-1,.ngx-col-10,.ngx-col-11,.ngx-col-12,.ngx-col-2,.ngx-col-3,.ngx-col-4,.ngx-col-5,.ngx-col-6,.ngx-col-7,.ngx-col-8,.ngx-col-9,.ngx-col-auto,.ngx-col-lg,.ngx-col-lg-1,.ngx-col-lg-10,.ngx-col-lg-11,.ngx-col-lg-12,.ngx-col-lg-2,.ngx-col-lg-3,.ngx-col-lg-4,.ngx-col-lg-5,.ngx-col-lg-6,.ngx-col-lg-7,.ngx-col-lg-8,.ngx-col-lg-9,.ngx-col-lg-auto,.ngx-col-md,.ngx-col-md-1,.ngx-col-md-10,.ngx-col-md-11,.ngx-col-md-12,.ngx-col-md-2,.ngx-col-md-3,.ngx-col-md-4,.ngx-col-md-5,.ngx-col-md-6,.ngx-col-md-7,.ngx-col-md-8,.ngx-col-md-9,.ngx-col-md-auto,.ngx-col-sm,.ngx-col-sm-1,.ngx-col-sm-10,.ngx-col-sm-11,.ngx-col-sm-12,.ngx-col-sm-2,.ngx-col-sm-3,.ngx-col-sm-4,.ngx-col-sm-5,.ngx-col-sm-6,.ngx-col-sm-7,.ngx-col-sm-8,.ngx-col-sm-9,.ngx-col-sm-auto,.ngx-col-xl,.ngx-col-xl-1,.ngx-col-xl-10,.ngx-col-xl-11,.ngx-col-xl-12,.ngx-col-xl-2,.ngx-col-xl-3,.ngx-col-xl-4,.ngx-col-xl-5,.ngx-col-xl-6,.ngx-col-xl-7,.ngx-col-xl-8,.ngx-col-xl-9,.ngx-col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.ngx-col{flex-basis:0;flex-grow:1;max-width:100%}.ngx-justify-content-center{justify-content:center!important}.ngx-flex-fill{flex:1 1 auto!important}.ngx-d-flex{display:flex!important}.ngx-pb-3,.ngx-py-3{padding-bottom:1rem!important}.ngx-pt-3,.ngx-py-3{padding-top:1rem!important}.ngx-pl-1,.ngx-px-1{padding-left:.25rem!important}.ngx-pr-1,.ngx-px-1{padding-right:.25rem!important}@media (max-width:768px){.ngx-sm-block{display:block!important}.ngx-d-none{display:none!important}}"]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
          }];
        }, {
          displayTitle: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          displayPlaylist: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          displayVolumeControls: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          displayRepeatControls: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          pageSizeOptions: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          expanded: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          autoPlay: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          disablePositionSlider: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          displayArtist: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          displayDuration: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          tableHeader: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          titleHeader: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          artistHeader: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          durationHeader: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          trackEnded: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
          }],
          endOffset: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          playlist: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          matPaginator: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewChild"],
            args: [_angular_material_paginator__WEBPACK_IMPORTED_MODULE_3__["MatPaginator"], {
              "static": false
            }]
          }],
          startOffset: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          player: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewChild"],
            args: ['audioPlayer', {
              "static": true
            }]
          }]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](SecondsToMinutesPipe, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Pipe"],
          args: [{
            name: 'secondsToMinutes'
          }]
        }], null, null);
      })();

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](NgxAudioPlayerModule, {
          declarations: function declarations() {
            return [SecondsToMinutesPipe, AudioPlayerComponent];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_10__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_11__["FormsModule"], _angular_material_button__WEBPACK_IMPORTED_MODULE_9__["MatButtonModule"], _angular_material_card__WEBPACK_IMPORTED_MODULE_8__["MatCardModule"], _angular_material_table__WEBPACK_IMPORTED_MODULE_2__["MatTableModule"], _angular_material_form_field__WEBPACK_IMPORTED_MODULE_6__["MatFormFieldModule"], _angular_material_slider__WEBPACK_IMPORTED_MODULE_5__["MatSliderModule"], _angular_material_expansion__WEBPACK_IMPORTED_MODULE_7__["MatExpansionModule"], _angular_material_paginator__WEBPACK_IMPORTED_MODULE_3__["MatPaginatorModule"], _angular_material_icon__WEBPACK_IMPORTED_MODULE_12__["MatIconModule"]];
          },
          exports: function exports() {
            return [AudioPlayerComponent];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](NgxAudioPlayerModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
          args: [{
            declarations: [SecondsToMinutesPipe, AudioPlayerComponent],
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_10__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_11__["FormsModule"], _angular_material_button__WEBPACK_IMPORTED_MODULE_9__["MatButtonModule"], _angular_material_card__WEBPACK_IMPORTED_MODULE_8__["MatCardModule"], _angular_material_table__WEBPACK_IMPORTED_MODULE_2__["MatTableModule"], _angular_material_form_field__WEBPACK_IMPORTED_MODULE_6__["MatFormFieldModule"], _angular_material_slider__WEBPACK_IMPORTED_MODULE_5__["MatSliderModule"], _angular_material_expansion__WEBPACK_IMPORTED_MODULE_7__["MatExpansionModule"], _angular_material_paginator__WEBPACK_IMPORTED_MODULE_3__["MatPaginatorModule"], _angular_material_icon__WEBPACK_IMPORTED_MODULE_12__["MatIconModule"]],
            exports: [AudioPlayerComponent]
          }]
        }], null, null);
      })();

      var Track = function Track() {
        var _this639 = this;

        _classCallCheck2(this, Track);

        this.toString = function () {
          return "Track (index: ".concat(_this639.index, ", title: ").concat(_this639.title, ")");
        };
      };
      /*
       * Public API Surface of ngx-audio-player
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=ngx-audio-player.js.map

      /***/

    },

    /***/
    "cH1L":
    /*!*****************************************************************!*\
      !*** ./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/bidi.js ***!
      \*****************************************************************/

    /*! exports provided: BidiModule, DIR_DOCUMENT, Dir, Directionality, ɵangular_material_src_cdk_bidi_bidi_a */

    /***/
    function cH1L(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BidiModule", function () {
        return BidiModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DIR_DOCUMENT", function () {
        return DIR_DOCUMENT;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Dir", function () {
        return Dir;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Directionality", function () {
        return Directionality;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_material_src_cdk_bidi_bidi_a", function () {
        return DIR_DOCUMENT_FACTORY;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Injection token used to inject the document into Directionality.
       * This is used so that the value can be faked in tests.
       *
       * We can't use the real document in tests because changing the real `dir` causes geometry-based
       * tests in Safari to fail.
       *
       * We also can't re-provide the DOCUMENT token from platform-brower because the unit tests
       * themselves use things like `querySelector` in test code.
       *
       * This token is defined in a separate file from Directionality as a workaround for
       * https://github.com/angular/angular/issues/22559
       *
       * @docs-private
       */


      var DIR_DOCUMENT = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('cdk-dir-doc', {
        providedIn: 'root',
        factory: DIR_DOCUMENT_FACTORY
      });
      /** @docs-private */

      function DIR_DOCUMENT_FACTORY() {
        return Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["inject"])(_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * The directionality (LTR / RTL) context for the application (or a subtree of it).
       * Exposes the current direction and a stream of direction changes.
       */


      var Directionality = /*#__PURE__*/function () {
        function Directionality(_document) {
          _classCallCheck2(this, Directionality);

          /** The current 'ltr' or 'rtl' value. */
          this.value = 'ltr';
          /** Stream that emits whenever the 'ltr' / 'rtl' state changes. */

          this.change = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();

          if (_document) {
            // TODO: handle 'auto' value -
            // We still need to account for dir="auto".
            // It looks like HTMLElemenet.dir is also "auto" when that's set to the attribute,
            // but getComputedStyle return either "ltr" or "rtl". avoiding getComputedStyle for now
            var bodyDir = _document.body ? _document.body.dir : null;
            var htmlDir = _document.documentElement ? _document.documentElement.dir : null;
            var value = bodyDir || htmlDir;
            this.value = value === 'ltr' || value === 'rtl' ? value : 'ltr';
          }
        }

        _createClass2(Directionality, [{
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.change.complete();
          }
        }]);

        return Directionality;
      }();

      Directionality.ɵfac = function Directionality_Factory(t) {
        return new (t || Directionality)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](DIR_DOCUMENT, 8));
      };

      Directionality.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({
        factory: function Directionality_Factory() {
          return new Directionality(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(DIR_DOCUMENT, 8));
        },
        token: Directionality,
        providedIn: "root"
      });

      Directionality.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [DIR_DOCUMENT]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](Directionality, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [DIR_DOCUMENT]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Directive to listen for changes of direction of part of the DOM.
       *
       * Provides itself as Directionality such that descendant directives only need to ever inject
       * Directionality to get the closest direction.
       */


      var Dir = /*#__PURE__*/function () {
        function Dir() {
          _classCallCheck2(this, Dir);

          /** Normalized direction that accounts for invalid/unsupported values. */
          this._dir = 'ltr';
          /** Whether the `value` has been set to its initial value. */

          this._isInitialized = false;
          /** Event emitted when the direction changes. */

          this.change = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        }
        /** @docs-private */


        _createClass2(Dir, [{
          key: "dir",
          get: function get() {
            return this._dir;
          },
          set: function set(value) {
            var old = this._dir;
            var normalizedValue = value ? value.toLowerCase() : value;
            this._rawDir = value;
            this._dir = normalizedValue === 'ltr' || normalizedValue === 'rtl' ? normalizedValue : 'ltr';

            if (old !== this._dir && this._isInitialized) {
              this.change.emit(this._dir);
            }
          }
          /** Current layout direction of the element. */

        }, {
          key: "value",
          get: function get() {
            return this.dir;
          }
          /** Initialize once default value has been set. */

        }, {
          key: "ngAfterContentInit",
          value: function ngAfterContentInit() {
            this._isInitialized = true;
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.change.complete();
          }
        }]);

        return Dir;
      }();

      Dir.ɵfac = function Dir_Factory(t) {
        return new (t || Dir)();
      };

      Dir.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: Dir,
        selectors: [["", "dir", ""]],
        hostVars: 1,
        hostBindings: function Dir_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("dir", ctx._rawDir);
          }
        },
        inputs: {
          dir: "dir"
        },
        outputs: {
          change: "dirChange"
        },
        exportAs: ["dir"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: Directionality,
          useExisting: Dir
        }])]
      });
      Dir.propDecorators = {
        change: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
          args: ['dirChange']
        }],
        dir: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](Dir, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[dir]',
            providers: [{
              provide: Directionality,
              useExisting: Dir
            }],
            host: {
              '[attr.dir]': '_rawDir'
            },
            exportAs: 'dir'
          }]
        }], function () {
          return [];
        }, {
          change: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
            args: ['dirChange']
          }],
          dir: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var BidiModule = function BidiModule() {
        _classCallCheck2(this, BidiModule);
      };

      BidiModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: BidiModule
      });
      BidiModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function BidiModule_Factory(t) {
          return new (t || BidiModule)();
        }
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](BidiModule, {
          declarations: [Dir],
          exports: [Dir]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BidiModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            exports: [Dir],
            declarations: [Dir]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=bidi.js.map

      /***/

    },

    /***/
    "cP5s":
    /*!*******************************************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/adapter/native-date-time-format.class.js ***!
      \*******************************************************************************************************/

    /*! exports provided: OWL_NATIVE_DATE_TIME_FORMATS */

    /***/
    function cP5s(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OWL_NATIVE_DATE_TIME_FORMATS", function () {
        return OWL_NATIVE_DATE_TIME_FORMATS;
      });

      var OWL_NATIVE_DATE_TIME_FORMATS = {
        parseInput: null,
        fullPickerInput: {
          year: 'numeric',
          month: 'numeric',
          day: 'numeric',
          hour: 'numeric',
          minute: 'numeric'
        },
        datePickerInput: {
          year: 'numeric',
          month: 'numeric',
          day: 'numeric'
        },
        timePickerInput: {
          hour: 'numeric',
          minute: 'numeric'
        },
        monthYearLabel: {
          year: 'numeric',
          month: 'short'
        },
        dateA11yLabel: {
          year: 'numeric',
          month: 'long',
          day: 'numeric'
        },
        monthYearA11yLabel: {
          year: 'numeric',
          month: 'long'
        }
      };
      /***/
    },

    /***/
    "cRix":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/fy.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function cRix(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Frisian [fy]
      //! author : Robin van der Vliet : https://github.com/robin0van0der0v
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),
            monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');
        var fy = moment.defineLocale('fy', {
          months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),
          monthsShort: function monthsShort(m, format) {
            if (!m) {
              return monthsShortWithDots;
            } else if (/-MMM-/.test(format)) {
              return monthsShortWithoutDots[m.month()];
            } else {
              return monthsShortWithDots[m.month()];
            }
          },
          monthsParseExact: true,
          weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),
          weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),
          weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD-MM-YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[hjoed om] LT',
            nextDay: '[moarn om] LT',
            nextWeek: 'dddd [om] LT',
            lastDay: '[juster om] LT',
            lastWeek: '[ôfrûne] dddd [om] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'oer %s',
            past: '%s lyn',
            s: 'in pear sekonden',
            ss: '%d sekonden',
            m: 'ien minút',
            mm: '%d minuten',
            h: 'ien oere',
            hh: '%d oeren',
            d: 'ien dei',
            dd: '%d dagen',
            M: 'ien moanne',
            MM: '%d moannen',
            y: 'ien jier',
            yy: '%d jierren'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
          ordinal: function ordinal(number) {
            return number + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de');
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return fy;
      });
      /***/

    },

    /***/
    "coGc":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/delayWhen.js ***!
      \********************************************************************/

    /*! exports provided: delayWhen */

    /***/
    function coGc(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "delayWhen", function () {
        return delayWhen;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../OuterSubscriber */
      "l7GE");
      /* harmony import */


      var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ../util/subscribeToResult */
      "ZUHj");

      function delayWhen(delayDurationSelector, subscriptionDelay) {
        if (subscriptionDelay) {
          return function (source) {
            return new SubscriptionDelayObservable(source, subscriptionDelay).lift(new DelayWhenOperator(delayDurationSelector));
          };
        }

        return function (source) {
          return source.lift(new DelayWhenOperator(delayDurationSelector));
        };
      }

      var DelayWhenOperator = /*#__PURE__*/function () {
        function DelayWhenOperator(delayDurationSelector) {
          _classCallCheck2(this, DelayWhenOperator);

          this.delayDurationSelector = delayDurationSelector;
        }

        _createClass2(DelayWhenOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new DelayWhenSubscriber(subscriber, this.delayDurationSelector));
          }
        }]);

        return DelayWhenOperator;
      }();

      var DelayWhenSubscriber = /*#__PURE__*/function (_OuterSubscriber__WEB3) {
        _inherits2(DelayWhenSubscriber, _OuterSubscriber__WEB3);

        var _super282 = _createSuper(DelayWhenSubscriber);

        function DelayWhenSubscriber(destination, delayDurationSelector) {
          var _this640;

          _classCallCheck2(this, DelayWhenSubscriber);

          _this640 = _super282.call(this, destination);
          _this640.delayDurationSelector = delayDurationSelector;
          _this640.completed = false;
          _this640.delayNotifierSubscriptions = [];
          _this640.index = 0;
          return _this640;
        }

        _createClass2(DelayWhenSubscriber, [{
          key: "notifyNext",
          value: function notifyNext(outerValue, _innerValue, _outerIndex, _innerIndex, innerSub) {
            this.destination.next(outerValue);
            this.removeSubscription(innerSub);
            this.tryComplete();
          }
        }, {
          key: "notifyError",
          value: function notifyError(error, innerSub) {
            this._error(error);
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete(innerSub) {
            var value = this.removeSubscription(innerSub);

            if (value) {
              this.destination.next(value);
            }

            this.tryComplete();
          }
        }, {
          key: "_next",
          value: function _next(value) {
            var index = this.index++;

            try {
              var delayNotifier = this.delayDurationSelector(value, index);

              if (delayNotifier) {
                this.tryDelay(delayNotifier, value);
              }
            } catch (err) {
              this.destination.error(err);
            }
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.completed = true;
            this.tryComplete();
            this.unsubscribe();
          }
        }, {
          key: "removeSubscription",
          value: function removeSubscription(subscription) {
            subscription.unsubscribe();
            var subscriptionIdx = this.delayNotifierSubscriptions.indexOf(subscription);

            if (subscriptionIdx !== -1) {
              this.delayNotifierSubscriptions.splice(subscriptionIdx, 1);
            }

            return subscription.outerValue;
          }
        }, {
          key: "tryDelay",
          value: function tryDelay(delayNotifier, value) {
            var notifierSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, delayNotifier, value);

            if (notifierSubscription && !notifierSubscription.closed) {
              var destination = this.destination;
              destination.add(notifierSubscription);
              this.delayNotifierSubscriptions.push(notifierSubscription);
            }
          }
        }, {
          key: "tryComplete",
          value: function tryComplete() {
            if (this.completed && this.delayNotifierSubscriptions.length === 0) {
              this.destination.complete();
            }
          }
        }]);

        return DelayWhenSubscriber;
      }(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]);

      var SubscriptionDelayObservable = /*#__PURE__*/function (_Observable__WEBPACK_5) {
        _inherits2(SubscriptionDelayObservable, _Observable__WEBPACK_5);

        var _super283 = _createSuper(SubscriptionDelayObservable);

        function SubscriptionDelayObservable(source, subscriptionDelay) {
          var _this641;

          _classCallCheck2(this, SubscriptionDelayObservable);

          _this641 = _super283.call(this);
          _this641.source = source;
          _this641.subscriptionDelay = subscriptionDelay;
          return _this641;
        }

        _createClass2(SubscriptionDelayObservable, [{
          key: "_subscribe",
          value: function _subscribe(subscriber) {
            this.subscriptionDelay.subscribe(new SubscriptionDelaySubscriber(subscriber, this.source));
          }
        }]);

        return SubscriptionDelayObservable;
      }(_Observable__WEBPACK_IMPORTED_MODULE_1__["Observable"]);

      var SubscriptionDelaySubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_30) {
        _inherits2(SubscriptionDelaySubscriber, _Subscriber__WEBPACK_30);

        var _super284 = _createSuper(SubscriptionDelaySubscriber);

        function SubscriptionDelaySubscriber(parent, source) {
          var _this642;

          _classCallCheck2(this, SubscriptionDelaySubscriber);

          _this642 = _super284.call(this);
          _this642.parent = parent;
          _this642.source = source;
          _this642.sourceSubscribed = false;
          return _this642;
        }

        _createClass2(SubscriptionDelaySubscriber, [{
          key: "_next",
          value: function _next(unused) {
            this.subscribeToSource();
          }
        }, {
          key: "_error",
          value: function _error(err) {
            this.unsubscribe();
            this.parent.error(err);
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.unsubscribe();
            this.subscribeToSource();
          }
        }, {
          key: "subscribeToSource",
          value: function subscribeToSource() {
            if (!this.sourceSubscribed) {
              this.sourceSubscribed = true;
              this.unsubscribe();
              this.source.subscribe(this.parent);
            }
          }
        }]);

        return SubscriptionDelaySubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=delayWhen.js.map

      /***/

    },

    /***/
    "cp0P":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/forkJoin.js ***!
      \********************************************************************/

    /*! exports provided: forkJoin */

    /***/
    function cp0P(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "forkJoin", function () {
        return forkJoin;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/isArray */
      "DH7j");
      /* harmony import */


      var _operators_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../operators/map */
      "lJxs");
      /* harmony import */


      var _util_isObject__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ../util/isObject */
      "XoHu");
      /* harmony import */


      var _from__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ./from */
      "Cfvw");

      function forkJoin() {
        for (var _len38 = arguments.length, sources = new Array(_len38), _key40 = 0; _key40 < _len38; _key40++) {
          sources[_key40] = arguments[_key40];
        }

        if (sources.length === 1) {
          var first = sources[0];

          if (Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(first)) {
            return forkJoinInternal(first, null);
          }

          if (Object(_util_isObject__WEBPACK_IMPORTED_MODULE_3__["isObject"])(first) && Object.getPrototypeOf(first) === Object.prototype) {
            var keys = Object.keys(first);
            return forkJoinInternal(keys.map(function (key) {
              return first[key];
            }), keys);
          }
        }

        if (typeof sources[sources.length - 1] === 'function') {
          var resultSelector = sources.pop();
          sources = sources.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(sources[0]) ? sources[0] : sources;
          return forkJoinInternal(sources, null).pipe(Object(_operators_map__WEBPACK_IMPORTED_MODULE_2__["map"])(function (args) {
            return resultSelector.apply(void 0, _toConsumableArray(args));
          }));
        }

        return forkJoinInternal(sources, null);
      }

      function forkJoinInternal(sources, keys) {
        return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
          var len = sources.length;

          if (len === 0) {
            subscriber.complete();
            return;
          }

          var values = new Array(len);
          var completed = 0;
          var emitted = 0;

          var _loop8 = function _loop8(i) {
            var source = Object(_from__WEBPACK_IMPORTED_MODULE_4__["from"])(sources[i]);
            var hasValue = false;
            subscriber.add(source.subscribe({
              next: function next(value) {
                if (!hasValue) {
                  hasValue = true;
                  emitted++;
                }

                values[i] = value;
              },
              error: function error(err) {
                return subscriber.error(err);
              },
              complete: function complete() {
                completed++;

                if (completed === len || !hasValue) {
                  if (emitted === len) {
                    subscriber.next(keys ? keys.reduce(function (result, key, i) {
                      return result[key] = values[i], result;
                    }, {}) : values);
                  }

                  subscriber.complete();
                }
              }
            }));
          };

          for (var i = 0; i < len; i++) {
            _loop8(i);
          }
        });
      } //# sourceMappingURL=forkJoin.js.map

      /***/

    },

    /***/
    "cx9U":
    /*!*****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/single.js ***!
      \*****************************************************************/

    /*! exports provided: single */

    /***/
    function cx9U(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "single", function () {
        return single;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");
      /* harmony import */


      var _util_EmptyError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/EmptyError */
      "sVev");

      function single(predicate) {
        return function (source) {
          return source.lift(new SingleOperator(predicate, source));
        };
      }

      var SingleOperator = /*#__PURE__*/function () {
        function SingleOperator(predicate, source) {
          _classCallCheck2(this, SingleOperator);

          this.predicate = predicate;
          this.source = source;
        }

        _createClass2(SingleOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new SingleSubscriber(subscriber, this.predicate, this.source));
          }
        }]);

        return SingleOperator;
      }();

      var SingleSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_31) {
        _inherits2(SingleSubscriber, _Subscriber__WEBPACK_31);

        var _super285 = _createSuper(SingleSubscriber);

        function SingleSubscriber(destination, predicate, source) {
          var _this643;

          _classCallCheck2(this, SingleSubscriber);

          _this643 = _super285.call(this, destination);
          _this643.predicate = predicate;
          _this643.source = source;
          _this643.seenValue = false;
          _this643.index = 0;
          return _this643;
        }

        _createClass2(SingleSubscriber, [{
          key: "applySingleValue",
          value: function applySingleValue(value) {
            if (this.seenValue) {
              this.destination.error('Sequence contains more than one element');
            } else {
              this.seenValue = true;
              this.singleValue = value;
            }
          }
        }, {
          key: "_next",
          value: function _next(value) {
            var index = this.index++;

            if (this.predicate) {
              this.tryNext(value, index);
            } else {
              this.applySingleValue(value);
            }
          }
        }, {
          key: "tryNext",
          value: function tryNext(value, index) {
            try {
              if (this.predicate(value, index, this.source)) {
                this.applySingleValue(value);
              }
            } catch (err) {
              this.destination.error(err);
            }
          }
        }, {
          key: "_complete",
          value: function _complete() {
            var destination = this.destination;

            if (this.index > 0) {
              destination.next(this.seenValue ? this.singleValue : undefined);
              destination.complete();
            } else {
              destination.error(new _util_EmptyError__WEBPACK_IMPORTED_MODULE_1__["EmptyError"]());
            }
          }
        }]);

        return SingleSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=single.js.map

      /***/

    },

    /***/
    "czMo":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/en-il.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function czMo(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : English (Israel) [en-il]
      //! author : Chris Gedrim : https://github.com/chrisgedrim
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var enIl = moment.defineLocale('en-il', {
          months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
          monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
          weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
          weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
          weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
          ordinal: function ordinal(number) {
            var b = number % 10,
                output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';
            return number + output;
          }
        });
        return enIl;
      });
      /***/

    },

    /***/
    "d3UM":
    /*!************************************************************************!*\
      !*** ./node_modules/@angular/material/__ivy_ngcc__/fesm2015/select.js ***!
      \************************************************************************/

    /*! exports provided: MAT_SELECT_CONFIG, MAT_SELECT_SCROLL_STRATEGY, MAT_SELECT_SCROLL_STRATEGY_PROVIDER, MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY, MAT_SELECT_TRIGGER, MatSelect, MatSelectChange, MatSelectModule, MatSelectTrigger, SELECT_ITEM_HEIGHT_EM, SELECT_MULTIPLE_PANEL_PADDING_X, SELECT_PANEL_INDENT_PADDING_X, SELECT_PANEL_MAX_HEIGHT, SELECT_PANEL_PADDING_X, SELECT_PANEL_VIEWPORT_PADDING, _MatSelectBase, matSelectAnimations */

    /***/
    function d3UM(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_SELECT_CONFIG", function () {
        return MAT_SELECT_CONFIG;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_SELECT_SCROLL_STRATEGY", function () {
        return MAT_SELECT_SCROLL_STRATEGY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_SELECT_SCROLL_STRATEGY_PROVIDER", function () {
        return MAT_SELECT_SCROLL_STRATEGY_PROVIDER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY", function () {
        return MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_SELECT_TRIGGER", function () {
        return MAT_SELECT_TRIGGER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatSelect", function () {
        return MatSelect;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatSelectChange", function () {
        return MatSelectChange;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatSelectModule", function () {
        return MatSelectModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatSelectTrigger", function () {
        return MatSelectTrigger;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SELECT_ITEM_HEIGHT_EM", function () {
        return SELECT_ITEM_HEIGHT_EM;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SELECT_MULTIPLE_PANEL_PADDING_X", function () {
        return SELECT_MULTIPLE_PANEL_PADDING_X;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SELECT_PANEL_INDENT_PADDING_X", function () {
        return SELECT_PANEL_INDENT_PADDING_X;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SELECT_PANEL_MAX_HEIGHT", function () {
        return SELECT_PANEL_MAX_HEIGHT;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SELECT_PANEL_PADDING_X", function () {
        return SELECT_PANEL_PADDING_X;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SELECT_PANEL_VIEWPORT_PADDING", function () {
        return SELECT_PANEL_VIEWPORT_PADDING;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "_MatSelectBase", function () {
        return _MatSelectBase;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "matSelectAnimations", function () {
        return matSelectAnimations;
      });
      /* harmony import */


      var _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/cdk/overlay */
      "rDax");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_material_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/material/core */
      "FKr1");
      /* harmony import */


      var _angular_material_form_field__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/material/form-field */
      "kmnG");
      /* harmony import */


      var _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @angular/cdk/scrolling */
      "vxfF");
      /* harmony import */


      var _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! @angular/cdk/a11y */
      "u47x");
      /* harmony import */


      var _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! @angular/cdk/bidi */
      "cH1L");
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");
      /* harmony import */


      var _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(
      /*! @angular/cdk/collections */
      "0EQZ");
      /* harmony import */


      var _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(
      /*! @angular/cdk/keycodes */
      "FtGj");
      /* harmony import */


      var _angular_forms__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(
      /*! @angular/forms */
      "3Pt+");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var _angular_animations__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(
      /*! @angular/animations */
      "R0Ic");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * The following are all the animations for the mat-select component, with each
       * const containing the metadata for one animation.
       *
       * The values below match the implementation of the AngularJS Material mat-select animation.
       * @docs-private
       */


      var _c0 = ["trigger"];
      var _c1 = ["panel"];

      function MatSelect_span_4_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "span", 8);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](ctx_r2.placeholder);
        }
      }

      function MatSelect_span_5_span_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "span", 12);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](ctx_r5.triggerValue);
        }
      }

      function MatSelect_span_5_ng_content_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵprojection"](0, 0, ["*ngSwitchCase", "true"]);
        }
      }

      function MatSelect_span_5_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "span", 9);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](1, MatSelect_span_5_span_1_Template, 2, 1, "span", 10);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](2, MatSelect_span_5_ng_content_2_Template, 1, 0, "ng-content", 11);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngSwitch", !!ctx_r3.customTrigger);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngSwitchCase", true);
        }
      }

      function MatSelect_ng_template_8_Template(rf, ctx) {
        if (rf & 1) {
          var _r9 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "div", 14, 15);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("@transformPanel.done", function MatSelect_ng_template_8_Template_div_animation_transformPanel_done_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r9);

            var ctx_r8 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]();

            return ctx_r8._panelDoneAnimatingStream.next($event.toState);
          })("keydown", function MatSelect_ng_template_8_Template_div_keydown_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r9);

            var ctx_r10 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]();

            return ctx_r10._handleKeydown($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵprojection"](3, 1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("@transformPanelWrap", undefined);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵclassMapInterpolate1"]("mat-select-panel ", ctx_r4._getPanelTheme(), "");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵstyleProp"]("transform-origin", ctx_r4._transformOrigin)("font-size", ctx_r4._triggerFontSize, "px");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngClass", ctx_r4.panelClass)("@transformPanel", ctx_r4.multiple ? "showing-multiple" : "showing");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵattribute"]("id", ctx_r4.id + "-panel")("aria-multiselectable", ctx_r4.multiple)("aria-label", ctx_r4.ariaLabel || null)("aria-labelledby", ctx_r4._getPanelAriaLabelledby());
        }
      }

      var _c2 = [[["mat-select-trigger"]], "*"];
      var _c3 = ["mat-select-trigger", "*"];
      var matSelectAnimations = {
        /**
         * This animation ensures the select's overlay panel animation (transformPanel) is called when
         * closing the select.
         * This is needed due to https://github.com/angular/angular/issues/23302
         */
        transformPanelWrap: Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["trigger"])('transformPanelWrap', [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["transition"])('* => void', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["query"])('@transformPanel', [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["animateChild"])()], {
          optional: true
        }))]),

        /**
         * This animation transforms the select's overlay panel on and off the page.
         *
         * When the panel is attached to the DOM, it expands its width by the amount of padding, scales it
         * up to 100% on the Y axis, fades in its border, and translates slightly up and to the
         * side to ensure the option text correctly overlaps the trigger text.
         *
         * When the panel is removed from the DOM, it simply fades out linearly.
         */
        transformPanel: Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["trigger"])('transformPanel', [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["state"])('void', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["style"])({
          transform: 'scaleY(0.8)',
          minWidth: '100%',
          opacity: 0
        })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["state"])('showing', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["style"])({
          opacity: 1,
          minWidth: 'calc(100% + 32px)',
          transform: 'scaleY(1)'
        })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["state"])('showing-multiple', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["style"])({
          opacity: 1,
          minWidth: 'calc(100% + 64px)',
          transform: 'scaleY(1)'
        })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["transition"])('void => *', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["animate"])('120ms cubic-bezier(0, 0, 0.2, 1)')), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["transition"])('* => void', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["animate"])('100ms 25ms linear', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_14__["style"])({
          opacity: 0
        })))])
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Returns an exception to be thrown when attempting to change a select's `multiple` option
       * after initialization.
       * @docs-private
       */

      function getMatSelectDynamicMultipleError() {
        return Error('Cannot change `multiple` mode of select after initialization.');
      }
      /**
       * Returns an exception to be thrown when attempting to assign a non-array value to a select
       * in `multiple` mode. Note that `undefined` and `null` are still valid values to allow for
       * resetting the value.
       * @docs-private
       */


      function getMatSelectNonArrayValueError() {
        return Error('Value must be an array in multiple-selection mode.');
      }
      /**
       * Returns an exception to be thrown when assigning a non-function value to the comparator
       * used to determine if a value corresponds to an option. Note that whether the function
       * actually takes two values and returns a boolean is not checked.
       */


      function getMatSelectNonFunctionValueError() {
        return Error('`compareWith` must be a function.');
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var nextUniqueId = 0;
      /**
       * The following style constants are necessary to save here in order
       * to properly calculate the alignment of the selected option over
       * the trigger element.
       */

      /**
       * The max height of the select's overlay panel.
       * @deprecated To be turned into a private variable.
       * @breaking-change 12.0.0
       */

      var SELECT_PANEL_MAX_HEIGHT = 256;
      /**
       * The panel's padding on the x-axis.
       * @deprecated To be turned into a private variable.
       * @breaking-change 12.0.0
       */

      var SELECT_PANEL_PADDING_X = 16;
      /**
       * The panel's x axis padding if it is indented (e.g. there is an option group).
       * @deprecated To be turned into a private variable.
       * @breaking-change 12.0.0
       */

      var SELECT_PANEL_INDENT_PADDING_X = SELECT_PANEL_PADDING_X * 2;
      /**
       * The height of the select items in `em` units.
       * @deprecated To be turned into a private variable.
       * @breaking-change 12.0.0
       */

      var SELECT_ITEM_HEIGHT_EM = 3; // TODO(josephperrott): Revert to a constant after 2018 spec updates are fully merged.

      /**
       * Distance between the panel edge and the option text in
       * multi-selection mode.
       *
       * Calculated as:
       * (SELECT_PANEL_PADDING_X * 1.5) + 16 = 40
       * The padding is multiplied by 1.5 because the checkbox's margin is half the padding.
       * The checkbox width is 16px.
       *
       * @deprecated To be turned into a private variable.
       * @breaking-change 12.0.0
       */

      var SELECT_MULTIPLE_PANEL_PADDING_X = SELECT_PANEL_PADDING_X * 1.5 + 16;
      /**
       * The select panel will only "fit" inside the viewport if it is positioned at
       * this value or more away from the viewport boundary.
       *
       * @deprecated To be turned into a private variable.
       * @breaking-change 12.0.0
       */

      var SELECT_PANEL_VIEWPORT_PADDING = 8;
      /** Injection token that determines the scroll handling while a select is open. */

      var MAT_SELECT_SCROLL_STRATEGY = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["InjectionToken"]('mat-select-scroll-strategy');
      /** @docs-private */

      function MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {
        return function () {
          return overlay.scrollStrategies.reposition();
        };
      }
      /** Injection token that can be used to provide the default options the select module. */


      var MAT_SELECT_CONFIG = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["InjectionToken"]('MAT_SELECT_CONFIG');
      /** @docs-private */

      var MAT_SELECT_SCROLL_STRATEGY_PROVIDER = {
        provide: MAT_SELECT_SCROLL_STRATEGY,
        deps: [_angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_0__["Overlay"]],
        useFactory: MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY
      };
      /** Change event object that is emitted when the select value has changed. */

      var MatSelectChange = function MatSelectChange(
      /** Reference to the select that emitted the change event. */
      source,
      /** Current value of the select that emitted the event. */
      value) {
        _classCallCheck2(this, MatSelectChange);

        this.source = source;
        this.value = value;
      }; // Boilerplate for applying mixins to MatSelect.

      /** @docs-private */


      var MatSelectBase = function MatSelectBase(_elementRef, _defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl) {
        _classCallCheck2(this, MatSelectBase);

        this._elementRef = _elementRef;
        this._defaultErrorStateMatcher = _defaultErrorStateMatcher;
        this._parentForm = _parentForm;
        this._parentFormGroup = _parentFormGroup;
        this.ngControl = ngControl;
      };

      var _MatSelectMixinBase = Object(_angular_material_core__WEBPACK_IMPORTED_MODULE_3__["mixinDisableRipple"])(Object(_angular_material_core__WEBPACK_IMPORTED_MODULE_3__["mixinTabIndex"])(Object(_angular_material_core__WEBPACK_IMPORTED_MODULE_3__["mixinDisabled"])(Object(_angular_material_core__WEBPACK_IMPORTED_MODULE_3__["mixinErrorState"])(MatSelectBase))));
      /**
       * Injection token that can be used to reference instances of `MatSelectTrigger`. It serves as
       * alternative token to the actual `MatSelectTrigger` class which could cause unnecessary
       * retention of the class and its directive metadata.
       */


      var MAT_SELECT_TRIGGER = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["InjectionToken"]('MatSelectTrigger');
      /**
       * Allows the user to customize the trigger that is displayed when the select has a value.
       */

      var MatSelectTrigger = function MatSelectTrigger() {
        _classCallCheck2(this, MatSelectTrigger);
      };

      MatSelectTrigger.ɵfac = function MatSelectTrigger_Factory(t) {
        return new (t || MatSelectTrigger)();
      };

      MatSelectTrigger.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineDirective"]({
        type: MatSelectTrigger,
        selectors: [["mat-select-trigger"]],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵProvidersFeature"]([{
          provide: MAT_SELECT_TRIGGER,
          useExisting: MatSelectTrigger
        }])]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](MatSelectTrigger, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Directive"],
          args: [{
            selector: 'mat-select-trigger',
            providers: [{
              provide: MAT_SELECT_TRIGGER,
              useExisting: MatSelectTrigger
            }]
          }]
        }], null, null);
      })();
      /** Base class with all of the `MatSelect` functionality. */


      var _MatSelectBase = /*#__PURE__*/function (_MatSelectMixinBase2) {
        _inherits2(_MatSelectBase, _MatSelectMixinBase2);

        var _super286 = _createSuper(_MatSelectBase);

        function _MatSelectBase(_viewportRuler, _changeDetectorRef, _ngZone, _defaultErrorStateMatcher, elementRef, _dir, _parentForm, _parentFormGroup, _parentFormField, ngControl, tabIndex, scrollStrategyFactory, _liveAnnouncer, _defaultOptions) {
          var _this644;

          _classCallCheck2(this, _MatSelectBase);

          var _a, _b, _c;

          _this644 = _super286.call(this, elementRef, _defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);
          _this644._viewportRuler = _viewportRuler;
          _this644._changeDetectorRef = _changeDetectorRef;
          _this644._ngZone = _ngZone;
          _this644._dir = _dir;
          _this644._parentFormField = _parentFormField;
          _this644.ngControl = ngControl;
          _this644._liveAnnouncer = _liveAnnouncer;
          _this644._defaultOptions = _defaultOptions;
          /** Whether or not the overlay panel is open. */

          _this644._panelOpen = false;
          /** Comparison function to specify which option is displayed. Defaults to object equality. */

          _this644._compareWith = function (o1, o2) {
            return o1 === o2;
          };
          /** Unique id for this input. */


          _this644._uid = "mat-select-".concat(nextUniqueId++);
          /** Current `ariar-labelledby` value for the select trigger. */

          _this644._triggerAriaLabelledBy = null;
          /** Emits whenever the component is destroyed. */

          _this644._destroy = new rxjs__WEBPACK_IMPORTED_MODULE_12__["Subject"]();
          /** `View -> model callback called when value changes` */

          _this644._onChange = function () {};
          /** `View -> model callback called when select has been touched` */


          _this644._onTouched = function () {};
          /** ID for the DOM node containing the select's value. */


          _this644._valueId = "mat-select-value-".concat(nextUniqueId++);
          /** Emits when the panel element is finished transforming in. */

          _this644._panelDoneAnimatingStream = new rxjs__WEBPACK_IMPORTED_MODULE_12__["Subject"]();
          _this644._overlayPanelClass = ((_a = _this644._defaultOptions) === null || _a === void 0 ? void 0 : _a.overlayPanelClass) || '';
          _this644._focused = false;
          /** A name for this control that can be used by `mat-form-field`. */

          _this644.controlType = 'mat-select';
          _this644._required = false;
          _this644._multiple = false;
          _this644._disableOptionCentering = (_c = (_b = _this644._defaultOptions) === null || _b === void 0 ? void 0 : _b.disableOptionCentering) !== null && _c !== void 0 ? _c : false;
          /** Aria label of the select. If not specified, the placeholder will be used as label. */

          _this644.ariaLabel = '';
          /** Combined stream of all of the child options' change events. */

          _this644.optionSelectionChanges = Object(rxjs__WEBPACK_IMPORTED_MODULE_12__["defer"])(function () {
            var options = _this644.options;

            if (options) {
              return options.changes.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["startWith"])(options), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["switchMap"])(function () {
                return Object(rxjs__WEBPACK_IMPORTED_MODULE_12__["merge"]).apply(void 0, _toConsumableArray(options.map(function (option) {
                  return option.onSelectionChange;
                })));
              }));
            }

            return _this644._ngZone.onStable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["take"])(1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["switchMap"])(function () {
              return _this644.optionSelectionChanges;
            }));
          });
          /** Event emitted when the select panel has been toggled. */

          _this644.openedChange = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["EventEmitter"]();
          /** Event emitted when the select has been opened. */

          _this644._openedStream = _this644.openedChange.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["filter"])(function (o) {
            return o;
          }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["map"])(function () {}));
          /** Event emitted when the select has been closed. */

          _this644._closedStream = _this644.openedChange.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["filter"])(function (o) {
            return !o;
          }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["map"])(function () {}));
          /** Event emitted when the selected value has been changed by the user. */

          _this644.selectionChange = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["EventEmitter"]();
          /**
           * Event that emits whenever the raw value of the select changes. This is here primarily
           * to facilitate the two-way binding for the `value` input.
           * @docs-private
           */

          _this644.valueChange = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["EventEmitter"]();

          if (_this644.ngControl) {
            // Note: we provide the value accessor through here, instead of
            // the `providers` to avoid running into a circular import.
            _this644.ngControl.valueAccessor = _assertThisInitialized2(_this644);
          } // Note that we only want to set this when the defaults pass it in, otherwise it should
          // stay as `undefined` so that it falls back to the default in the key manager.


          if ((_defaultOptions === null || _defaultOptions === void 0 ? void 0 : _defaultOptions.typeaheadDebounceInterval) != null) {
            _this644._typeaheadDebounceInterval = _defaultOptions.typeaheadDebounceInterval;
          }

          _this644._scrollStrategyFactory = scrollStrategyFactory;
          _this644._scrollStrategy = _this644._scrollStrategyFactory();
          _this644.tabIndex = parseInt(tabIndex) || 0; // Force setter to be called in case id was not specified.

          _this644.id = _this644.id;
          return _this644;
        }
        /** Whether the select is focused. */


        _createClass2(_MatSelectBase, [{
          key: "focused",
          get: function get() {
            return this._focused || this._panelOpen;
          }
          /** Placeholder to be shown if no value has been selected. */

        }, {
          key: "placeholder",
          get: function get() {
            return this._placeholder;
          },
          set: function set(value) {
            this._placeholder = value;
            this.stateChanges.next();
          }
          /** Whether the component is required. */

        }, {
          key: "required",
          get: function get() {
            return this._required;
          },
          set: function set(value) {
            this._required = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_8__["coerceBooleanProperty"])(value);
            this.stateChanges.next();
          }
          /** Whether the user should be allowed to select multiple options. */

        }, {
          key: "multiple",
          get: function get() {
            return this._multiple;
          },
          set: function set(value) {
            if (this._selectionModel && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw getMatSelectDynamicMultipleError();
            }

            this._multiple = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_8__["coerceBooleanProperty"])(value);
          }
          /** Whether to center the active option over the trigger. */

        }, {
          key: "disableOptionCentering",
          get: function get() {
            return this._disableOptionCentering;
          },
          set: function set(value) {
            this._disableOptionCentering = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_8__["coerceBooleanProperty"])(value);
          }
          /**
           * Function to compare the option values with the selected values. The first argument
           * is a value from an option. The second is a value from the selection. A boolean
           * should be returned.
           */

        }, {
          key: "compareWith",
          get: function get() {
            return this._compareWith;
          },
          set: function set(fn) {
            if (typeof fn !== 'function' && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw getMatSelectNonFunctionValueError();
            }

            this._compareWith = fn;

            if (this._selectionModel) {
              // A different comparator means the selection could change.
              this._initializeSelection();
            }
          }
          /** Value of the select control. */

        }, {
          key: "value",
          get: function get() {
            return this._value;
          },
          set: function set(newValue) {
            // Always re-assign an array, because it might have been mutated.
            if (newValue !== this._value || this._multiple && Array.isArray(newValue)) {
              if (this.options) {
                this._setSelectionByValue(newValue);
              }

              this._value = newValue;
            }
          }
          /** Time to wait in milliseconds after the last keystroke before moving focus to an item. */

        }, {
          key: "typeaheadDebounceInterval",
          get: function get() {
            return this._typeaheadDebounceInterval;
          },
          set: function set(value) {
            this._typeaheadDebounceInterval = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_8__["coerceNumberProperty"])(value);
          }
          /** Unique id of the element. */

        }, {
          key: "id",
          get: function get() {
            return this._id;
          },
          set: function set(value) {
            this._id = value || this._uid;
            this.stateChanges.next();
          }
        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            var _this645 = this;

            this._selectionModel = new _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_9__["SelectionModel"](this.multiple);
            this.stateChanges.next(); // We need `distinctUntilChanged` here, because some browsers will
            // fire the animation end event twice for the same animation. See:
            // https://github.com/angular/angular/issues/24084

            this._panelDoneAnimatingStream.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["distinctUntilChanged"])(), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["takeUntil"])(this._destroy)).subscribe(function () {
              return _this645._panelDoneAnimating(_this645.panelOpen);
            });
          }
        }, {
          key: "ngAfterContentInit",
          value: function ngAfterContentInit() {
            var _this646 = this;

            this._initKeyManager();

            this._selectionModel.changed.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["takeUntil"])(this._destroy)).subscribe(function (event) {
              event.added.forEach(function (option) {
                return option.select();
              });
              event.removed.forEach(function (option) {
                return option.deselect();
              });
            });

            this.options.changes.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["startWith"])(null), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["takeUntil"])(this._destroy)).subscribe(function () {
              _this646._resetOptions();

              _this646._initializeSelection();
            });
          }
        }, {
          key: "ngDoCheck",
          value: function ngDoCheck() {
            var newAriaLabelledby = this._getTriggerAriaLabelledby(); // We have to manage setting the `aria-labelledby` ourselves, because part of its value
            // is computed as a result of a content query which can cause this binding to trigger a
            // "changed after checked" error.


            if (newAriaLabelledby !== this._triggerAriaLabelledBy) {
              var element = this._elementRef.nativeElement;
              this._triggerAriaLabelledBy = newAriaLabelledby;

              if (newAriaLabelledby) {
                element.setAttribute('aria-labelledby', newAriaLabelledby);
              } else {
                element.removeAttribute('aria-labelledby');
              }
            }

            if (this.ngControl) {
              this.updateErrorState();
            }
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            // Updating the disabled state is handled by `mixinDisabled`, but we need to additionally let
            // the parent form field know to run change detection when the disabled state changes.
            if (changes['disabled']) {
              this.stateChanges.next();
            }

            if (changes['typeaheadDebounceInterval'] && this._keyManager) {
              this._keyManager.withTypeAhead(this._typeaheadDebounceInterval);
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._destroy.next();

            this._destroy.complete();

            this.stateChanges.complete();
          }
          /** Toggles the overlay panel open or closed. */

        }, {
          key: "toggle",
          value: function toggle() {
            this.panelOpen ? this.close() : this.open();
          }
          /** Opens the overlay panel. */

        }, {
          key: "open",
          value: function open() {
            if (this._canOpen()) {
              this._panelOpen = true;

              this._keyManager.withHorizontalOrientation(null);

              this._highlightCorrectOption();

              this._changeDetectorRef.markForCheck();
            }
          }
          /** Closes the overlay panel and focuses the host element. */

        }, {
          key: "close",
          value: function close() {
            if (this._panelOpen) {
              this._panelOpen = false;

              this._keyManager.withHorizontalOrientation(this._isRtl() ? 'rtl' : 'ltr');

              this._changeDetectorRef.markForCheck();

              this._onTouched();
            }
          }
          /**
           * Sets the select's value. Part of the ControlValueAccessor interface
           * required to integrate with Angular's core forms API.
           *
           * @param value New value to be written to the model.
           */

        }, {
          key: "writeValue",
          value: function writeValue(value) {
            this.value = value;
          }
          /**
           * Saves a callback function to be invoked when the select's value
           * changes from user input. Part of the ControlValueAccessor interface
           * required to integrate with Angular's core forms API.
           *
           * @param fn Callback to be triggered when the value changes.
           */

        }, {
          key: "registerOnChange",
          value: function registerOnChange(fn) {
            this._onChange = fn;
          }
          /**
           * Saves a callback function to be invoked when the select is blurred
           * by the user. Part of the ControlValueAccessor interface required
           * to integrate with Angular's core forms API.
           *
           * @param fn Callback to be triggered when the component has been touched.
           */

        }, {
          key: "registerOnTouched",
          value: function registerOnTouched(fn) {
            this._onTouched = fn;
          }
          /**
           * Disables the select. Part of the ControlValueAccessor interface required
           * to integrate with Angular's core forms API.
           *
           * @param isDisabled Sets whether the component is disabled.
           */

        }, {
          key: "setDisabledState",
          value: function setDisabledState(isDisabled) {
            this.disabled = isDisabled;

            this._changeDetectorRef.markForCheck();

            this.stateChanges.next();
          }
          /** Whether or not the overlay panel is open. */

        }, {
          key: "panelOpen",
          get: function get() {
            return this._panelOpen;
          }
          /** The currently selected option. */

        }, {
          key: "selected",
          get: function get() {
            return this.multiple ? this._selectionModel.selected : this._selectionModel.selected[0];
          }
          /** The value displayed in the trigger. */

        }, {
          key: "triggerValue",
          get: function get() {
            if (this.empty) {
              return '';
            }

            if (this._multiple) {
              var selectedOptions = this._selectionModel.selected.map(function (option) {
                return option.viewValue;
              });

              if (this._isRtl()) {
                selectedOptions.reverse();
              } // TODO(crisbeto): delimiter should be configurable for proper localization.


              return selectedOptions.join(', ');
            }

            return this._selectionModel.selected[0].viewValue;
          }
          /** Whether the element is in RTL mode. */

        }, {
          key: "_isRtl",
          value: function _isRtl() {
            return this._dir ? this._dir.value === 'rtl' : false;
          }
          /** Handles all keydown events on the select. */

        }, {
          key: "_handleKeydown",
          value: function _handleKeydown(event) {
            if (!this.disabled) {
              this.panelOpen ? this._handleOpenKeydown(event) : this._handleClosedKeydown(event);
            }
          }
          /** Handles keyboard events while the select is closed. */

        }, {
          key: "_handleClosedKeydown",
          value: function _handleClosedKeydown(event) {
            var keyCode = event.keyCode;
            var isArrowKey = keyCode === _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_10__["DOWN_ARROW"] || keyCode === _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_10__["UP_ARROW"] || keyCode === _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_10__["LEFT_ARROW"] || keyCode === _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_10__["RIGHT_ARROW"];
            var isOpenKey = keyCode === _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_10__["ENTER"] || keyCode === _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_10__["SPACE"];
            var manager = this._keyManager; // Open the select on ALT + arrow key to match the native <select>

            if (!manager.isTyping() && isOpenKey && !Object(_angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_10__["hasModifierKey"])(event) || (this.multiple || event.altKey) && isArrowKey) {
              event.preventDefault(); // prevents the page from scrolling down when pressing space

              this.open();
            } else if (!this.multiple) {
              var previouslySelectedOption = this.selected;
              manager.onKeydown(event);
              var selectedOption = this.selected; // Since the value has changed, we need to announce it ourselves.

              if (selectedOption && previouslySelectedOption !== selectedOption) {
                // We set a duration on the live announcement, because we want the live element to be
                // cleared after a while so that users can't navigate to it using the arrow keys.
                this._liveAnnouncer.announce(selectedOption.viewValue, 10000);
              }
            }
          }
          /** Handles keyboard events when the selected is open. */

        }, {
          key: "_handleOpenKeydown",
          value: function _handleOpenKeydown(event) {
            var manager = this._keyManager;
            var keyCode = event.keyCode;
            var isArrowKey = keyCode === _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_10__["DOWN_ARROW"] || keyCode === _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_10__["UP_ARROW"];
            var isTyping = manager.isTyping();

            if (isArrowKey && event.altKey) {
              // Close the select on ALT + arrow key to match the native <select>
              event.preventDefault();
              this.close(); // Don't do anything in this case if the user is typing,
              // because the typing sequence can include the space key.
            } else if (!isTyping && (keyCode === _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_10__["ENTER"] || keyCode === _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_10__["SPACE"]) && manager.activeItem && !Object(_angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_10__["hasModifierKey"])(event)) {
              event.preventDefault();

              manager.activeItem._selectViaInteraction();
            } else if (!isTyping && this._multiple && keyCode === _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_10__["A"] && event.ctrlKey) {
              event.preventDefault();
              var hasDeselectedOptions = this.options.some(function (opt) {
                return !opt.disabled && !opt.selected;
              });
              this.options.forEach(function (option) {
                if (!option.disabled) {
                  hasDeselectedOptions ? option.select() : option.deselect();
                }
              });
            } else {
              var previouslyFocusedIndex = manager.activeItemIndex;
              manager.onKeydown(event);

              if (this._multiple && isArrowKey && event.shiftKey && manager.activeItem && manager.activeItemIndex !== previouslyFocusedIndex) {
                manager.activeItem._selectViaInteraction();
              }
            }
          }
        }, {
          key: "_onFocus",
          value: function _onFocus() {
            if (!this.disabled) {
              this._focused = true;
              this.stateChanges.next();
            }
          }
          /**
           * Calls the touched callback only if the panel is closed. Otherwise, the trigger will
           * "blur" to the panel when it opens, causing a false positive.
           */

        }, {
          key: "_onBlur",
          value: function _onBlur() {
            this._focused = false;

            if (!this.disabled && !this.panelOpen) {
              this._onTouched();

              this._changeDetectorRef.markForCheck();

              this.stateChanges.next();
            }
          }
          /**
           * Callback that is invoked when the overlay panel has been attached.
           */

        }, {
          key: "_onAttached",
          value: function _onAttached() {
            var _this647 = this;

            this.overlayDir.positionChange.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["take"])(1)).subscribe(function () {
              _this647._changeDetectorRef.detectChanges();

              _this647._positioningSettled();
            });
          }
          /** Returns the theme to be used on the panel. */

        }, {
          key: "_getPanelTheme",
          value: function _getPanelTheme() {
            return this._parentFormField ? "mat-".concat(this._parentFormField.color) : '';
          }
          /** Whether the select has a value. */

        }, {
          key: "empty",
          get: function get() {
            return !this._selectionModel || this._selectionModel.isEmpty();
          }
        }, {
          key: "_initializeSelection",
          value: function _initializeSelection() {
            var _this648 = this;

            // Defer setting the value in order to avoid the "Expression
            // has changed after it was checked" errors from Angular.
            Promise.resolve().then(function () {
              _this648._setSelectionByValue(_this648.ngControl ? _this648.ngControl.value : _this648._value);

              _this648.stateChanges.next();
            });
          }
          /**
           * Sets the selected option based on a value. If no option can be
           * found with the designated value, the select trigger is cleared.
           */

        }, {
          key: "_setSelectionByValue",
          value: function _setSelectionByValue(value) {
            var _this649 = this;

            this._selectionModel.selected.forEach(function (option) {
              return option.setInactiveStyles();
            });

            this._selectionModel.clear();

            if (this.multiple && value) {
              if (!Array.isArray(value) && (typeof ngDevMode === 'undefined' || ngDevMode)) {
                throw getMatSelectNonArrayValueError();
              }

              value.forEach(function (currentValue) {
                return _this649._selectValue(currentValue);
              });

              this._sortValues();
            } else {
              var correspondingOption = this._selectValue(value); // Shift focus to the active item. Note that we shouldn't do this in multiple
              // mode, because we don't know what option the user interacted with last.


              if (correspondingOption) {
                this._keyManager.updateActiveItem(correspondingOption);
              } else if (!this.panelOpen) {
                // Otherwise reset the highlighted option. Note that we only want to do this while
                // closed, because doing it while open can shift the user's focus unnecessarily.
                this._keyManager.updateActiveItem(-1);
              }
            }

            this._changeDetectorRef.markForCheck();
          }
          /**
           * Finds and selects and option based on its value.
           * @returns Option that has the corresponding value.
           */

        }, {
          key: "_selectValue",
          value: function _selectValue(value) {
            var _this650 = this;

            var correspondingOption = this.options.find(function (option) {
              // Skip options that are already in the model. This allows us to handle cases
              // where the same primitive value is selected multiple times.
              if (_this650._selectionModel.isSelected(option)) {
                return false;
              }

              try {
                // Treat null as a special reset value.
                return option.value != null && _this650._compareWith(option.value, value);
              } catch (error) {
                if (typeof ngDevMode === 'undefined' || ngDevMode) {
                  // Notify developers of errors in their comparator.
                  console.warn(error);
                }

                return false;
              }
            });

            if (correspondingOption) {
              this._selectionModel.select(correspondingOption);
            }

            return correspondingOption;
          }
          /** Sets up a key manager to listen to keyboard events on the overlay panel. */

        }, {
          key: "_initKeyManager",
          value: function _initKeyManager() {
            var _this651 = this;

            this._keyManager = new _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_6__["ActiveDescendantKeyManager"](this.options).withTypeAhead(this._typeaheadDebounceInterval).withVerticalOrientation().withHorizontalOrientation(this._isRtl() ? 'rtl' : 'ltr').withHomeAndEnd().withAllowedModifierKeys(['shiftKey']);

            this._keyManager.tabOut.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["takeUntil"])(this._destroy)).subscribe(function () {
              if (_this651.panelOpen) {
                // Select the active item when tabbing away. This is consistent with how the native
                // select behaves. Note that we only want to do this in single selection mode.
                if (!_this651.multiple && _this651._keyManager.activeItem) {
                  _this651._keyManager.activeItem._selectViaInteraction();
                } // Restore focus to the trigger before closing. Ensures that the focus
                // position won't be lost if the user got focus into the overlay.


                _this651.focus();

                _this651.close();
              }
            });

            this._keyManager.change.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["takeUntil"])(this._destroy)).subscribe(function () {
              if (_this651._panelOpen && _this651.panel) {
                _this651._scrollOptionIntoView(_this651._keyManager.activeItemIndex || 0);
              } else if (!_this651._panelOpen && !_this651.multiple && _this651._keyManager.activeItem) {
                _this651._keyManager.activeItem._selectViaInteraction();
              }
            });
          }
          /** Drops current option subscriptions and IDs and resets from scratch. */

        }, {
          key: "_resetOptions",
          value: function _resetOptions() {
            var _this652 = this;

            var changedOrDestroyed = Object(rxjs__WEBPACK_IMPORTED_MODULE_12__["merge"])(this.options.changes, this._destroy);
            this.optionSelectionChanges.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["takeUntil"])(changedOrDestroyed)).subscribe(function (event) {
              _this652._onSelect(event.source, event.isUserInput);

              if (event.isUserInput && !_this652.multiple && _this652._panelOpen) {
                _this652.close();

                _this652.focus();
              }
            }); // Listen to changes in the internal state of the options and react accordingly.
            // Handles cases like the labels of the selected options changing.

            Object(rxjs__WEBPACK_IMPORTED_MODULE_12__["merge"]).apply(void 0, _toConsumableArray(this.options.map(function (option) {
              return option._stateChanges;
            }))).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["takeUntil"])(changedOrDestroyed)).subscribe(function () {
              _this652._changeDetectorRef.markForCheck();

              _this652.stateChanges.next();
            });
          }
          /** Invoked when an option is clicked. */

        }, {
          key: "_onSelect",
          value: function _onSelect(option, isUserInput) {
            var wasSelected = this._selectionModel.isSelected(option);

            if (option.value == null && !this._multiple) {
              option.deselect();

              this._selectionModel.clear();

              if (this.value != null) {
                this._propagateChanges(option.value);
              }
            } else {
              if (wasSelected !== option.selected) {
                option.selected ? this._selectionModel.select(option) : this._selectionModel.deselect(option);
              }

              if (isUserInput) {
                this._keyManager.setActiveItem(option);
              }

              if (this.multiple) {
                this._sortValues();

                if (isUserInput) {
                  // In case the user selected the option with their mouse, we
                  // want to restore focus back to the trigger, in order to
                  // prevent the select keyboard controls from clashing with
                  // the ones from `mat-option`.
                  this.focus();
                }
              }
            }

            if (wasSelected !== this._selectionModel.isSelected(option)) {
              this._propagateChanges();
            }

            this.stateChanges.next();
          }
          /** Sorts the selected values in the selected based on their order in the panel. */

        }, {
          key: "_sortValues",
          value: function _sortValues() {
            var _this653 = this;

            if (this.multiple) {
              var options = this.options.toArray();

              this._selectionModel.sort(function (a, b) {
                return _this653.sortComparator ? _this653.sortComparator(a, b, options) : options.indexOf(a) - options.indexOf(b);
              });

              this.stateChanges.next();
            }
          }
          /** Emits change event to set the model value. */

        }, {
          key: "_propagateChanges",
          value: function _propagateChanges(fallbackValue) {
            var valueToEmit = null;

            if (this.multiple) {
              valueToEmit = this.selected.map(function (option) {
                return option.value;
              });
            } else {
              valueToEmit = this.selected ? this.selected.value : fallbackValue;
            }

            this._value = valueToEmit;
            this.valueChange.emit(valueToEmit);

            this._onChange(valueToEmit);

            this.selectionChange.emit(this._getChangeEvent(valueToEmit));

            this._changeDetectorRef.markForCheck();
          }
          /**
           * Highlights the selected item. If no option is selected, it will highlight
           * the first item instead.
           */

        }, {
          key: "_highlightCorrectOption",
          value: function _highlightCorrectOption() {
            if (this._keyManager) {
              if (this.empty) {
                this._keyManager.setFirstItemActive();
              } else {
                this._keyManager.setActiveItem(this._selectionModel.selected[0]);
              }
            }
          }
          /** Whether the panel is allowed to open. */

        }, {
          key: "_canOpen",
          value: function _canOpen() {
            var _a;

            return !this._panelOpen && !this.disabled && ((_a = this.options) === null || _a === void 0 ? void 0 : _a.length) > 0;
          }
          /** Focuses the select element. */

        }, {
          key: "focus",
          value: function focus(options) {
            this._elementRef.nativeElement.focus(options);
          }
          /** Gets the aria-labelledby for the select panel. */

        }, {
          key: "_getPanelAriaLabelledby",
          value: function _getPanelAriaLabelledby() {
            if (this.ariaLabel) {
              return null;
            }

            var labelId = this._getLabelId();

            return this.ariaLabelledby ? labelId + ' ' + this.ariaLabelledby : labelId;
          }
          /** Determines the `aria-activedescendant` to be set on the host. */

        }, {
          key: "_getAriaActiveDescendant",
          value: function _getAriaActiveDescendant() {
            if (this.panelOpen && this._keyManager && this._keyManager.activeItem) {
              return this._keyManager.activeItem.id;
            }

            return null;
          }
          /** Gets the ID of the element that is labelling the select. */

        }, {
          key: "_getLabelId",
          value: function _getLabelId() {
            var _a;

            return ((_a = this._parentFormField) === null || _a === void 0 ? void 0 : _a.getLabelId()) || '';
          }
          /** Gets the aria-labelledby of the select component trigger. */

        }, {
          key: "_getTriggerAriaLabelledby",
          value: function _getTriggerAriaLabelledby() {
            if (this.ariaLabel) {
              return null;
            }

            var value = this._getLabelId() + ' ' + this._valueId;

            if (this.ariaLabelledby) {
              value += ' ' + this.ariaLabelledby;
            }

            return value;
          }
          /** Called when the overlay panel is done animating. */

        }, {
          key: "_panelDoneAnimating",
          value: function _panelDoneAnimating(isOpen) {
            this.openedChange.emit(isOpen);
          }
          /**
           * Implemented as part of MatFormFieldControl.
           * @docs-private
           */

        }, {
          key: "setDescribedByIds",
          value: function setDescribedByIds(ids) {
            this._ariaDescribedby = ids.join(' ');
          }
          /**
           * Implemented as part of MatFormFieldControl.
           * @docs-private
           */

        }, {
          key: "onContainerClick",
          value: function onContainerClick() {
            this.focus();
            this.open();
          }
          /**
           * Implemented as part of MatFormFieldControl.
           * @docs-private
           */

        }, {
          key: "shouldLabelFloat",
          get: function get() {
            return this._panelOpen || !this.empty;
          }
        }]);

        return _MatSelectBase;
      }(_MatSelectMixinBase);

      _MatSelectBase.ɵfac = function _MatSelectBase_Factory(t) {
        return new (t || _MatSelectBase)(_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_5__["ViewportRuler"]), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_2__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_2__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_material_core__WEBPACK_IMPORTED_MODULE_3__["ErrorStateMatcher"]), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_2__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_7__["Directionality"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_forms__WEBPACK_IMPORTED_MODULE_11__["NgForm"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_forms__WEBPACK_IMPORTED_MODULE_11__["FormGroupDirective"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_material_form_field__WEBPACK_IMPORTED_MODULE_4__["MAT_FORM_FIELD"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_forms__WEBPACK_IMPORTED_MODULE_11__["NgControl"], 10), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵinjectAttribute"]('tabindex'), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](MAT_SELECT_SCROLL_STRATEGY), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_6__["LiveAnnouncer"]), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](MAT_SELECT_CONFIG, 8));
      };

      _MatSelectBase.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineDirective"]({
        type: _MatSelectBase,
        viewQuery: function _MatSelectBase_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵviewQuery"](_c0, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵviewQuery"](_c1, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵviewQuery"](_angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_0__["CdkConnectedOverlay"], 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵloadQuery"]()) && (ctx.trigger = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵloadQuery"]()) && (ctx.panel = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵloadQuery"]()) && (ctx.overlayDir = _t.first);
          }
        },
        inputs: {
          ariaLabel: ["aria-label", "ariaLabel"],
          id: "id",
          placeholder: "placeholder",
          required: "required",
          multiple: "multiple",
          disableOptionCentering: "disableOptionCentering",
          compareWith: "compareWith",
          value: "value",
          typeaheadDebounceInterval: "typeaheadDebounceInterval",
          panelClass: "panelClass",
          ariaLabelledby: ["aria-labelledby", "ariaLabelledby"],
          errorStateMatcher: "errorStateMatcher",
          sortComparator: "sortComparator"
        },
        outputs: {
          openedChange: "openedChange",
          _openedStream: "opened",
          _closedStream: "closed",
          selectionChange: "selectionChange",
          valueChange: "valueChange"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵInheritDefinitionFeature"], _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵNgOnChangesFeature"]]
      });

      _MatSelectBase.ctorParameters = function () {
        return [{
          type: _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_5__["ViewportRuler"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ChangeDetectorRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["NgZone"]
        }, {
          type: _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["ErrorStateMatcher"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ElementRef"]
        }, {
          type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_7__["Directionality"],
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Optional"]
          }]
        }, {
          type: _angular_forms__WEBPACK_IMPORTED_MODULE_11__["NgForm"],
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Optional"]
          }]
        }, {
          type: _angular_forms__WEBPACK_IMPORTED_MODULE_11__["FormGroupDirective"],
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Optional"]
          }]
        }, {
          type: _angular_material_form_field__WEBPACK_IMPORTED_MODULE_4__["MatFormField"],
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Inject"],
            args: [_angular_material_form_field__WEBPACK_IMPORTED_MODULE_4__["MAT_FORM_FIELD"]]
          }]
        }, {
          type: _angular_forms__WEBPACK_IMPORTED_MODULE_11__["NgControl"],
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Self"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Optional"]
          }]
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Attribute"],
            args: ['tabindex']
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Inject"],
            args: [MAT_SELECT_SCROLL_STRATEGY]
          }]
        }, {
          type: _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_6__["LiveAnnouncer"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Inject"],
            args: [MAT_SELECT_CONFIG]
          }]
        }];
      };

      _MatSelectBase.propDecorators = {
        trigger: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ViewChild"],
          args: ['trigger']
        }],
        panel: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ViewChild"],
          args: ['panel']
        }],
        overlayDir: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ViewChild"],
          args: [_angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_0__["CdkConnectedOverlay"]]
        }],
        panelClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
        }],
        placeholder: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
        }],
        required: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
        }],
        multiple: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
        }],
        disableOptionCentering: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
        }],
        compareWith: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
        }],
        value: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
        }],
        ariaLabel: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"],
          args: ['aria-label']
        }],
        ariaLabelledby: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"],
          args: ['aria-labelledby']
        }],
        errorStateMatcher: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
        }],
        typeaheadDebounceInterval: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
        }],
        sortComparator: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
        }],
        id: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
        }],
        openedChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"]
        }],
        _openedStream: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"],
          args: ['opened']
        }],
        _closedStream: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"],
          args: ['closed']
        }],
        selectionChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"]
        }],
        valueChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](_MatSelectBase, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Directive"]
        }], function () {
          return [{
            type: _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_5__["ViewportRuler"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ChangeDetectorRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["NgZone"]
          }, {
            type: _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["ErrorStateMatcher"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ElementRef"]
          }, {
            type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_7__["Directionality"],
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Optional"]
            }]
          }, {
            type: _angular_forms__WEBPACK_IMPORTED_MODULE_11__["NgForm"],
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Optional"]
            }]
          }, {
            type: _angular_forms__WEBPACK_IMPORTED_MODULE_11__["FormGroupDirective"],
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Optional"]
            }]
          }, {
            type: _angular_material_form_field__WEBPACK_IMPORTED_MODULE_4__["MatFormField"],
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Inject"],
              args: [_angular_material_form_field__WEBPACK_IMPORTED_MODULE_4__["MAT_FORM_FIELD"]]
            }]
          }, {
            type: _angular_forms__WEBPACK_IMPORTED_MODULE_11__["NgControl"],
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Self"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Optional"]
            }]
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Attribute"],
              args: ['tabindex']
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Inject"],
              args: [MAT_SELECT_SCROLL_STRATEGY]
            }]
          }, {
            type: _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_6__["LiveAnnouncer"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Inject"],
              args: [MAT_SELECT_CONFIG]
            }]
          }];
        }, {
          ariaLabel: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"],
            args: ['aria-label']
          }],
          openedChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"]
          }],
          _openedStream: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"],
            args: ['opened']
          }],
          _closedStream: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"],
            args: ['closed']
          }],
          selectionChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"]
          }],
          valueChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Output"]
          }],
          id: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          placeholder: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          required: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          multiple: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          disableOptionCentering: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          compareWith: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          value: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          typeaheadDebounceInterval: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          trigger: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ViewChild"],
            args: ['trigger']
          }],
          panel: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ViewChild"],
            args: ['panel']
          }],
          overlayDir: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ViewChild"],
            args: [_angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_0__["CdkConnectedOverlay"]]
          }],
          panelClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          ariaLabelledby: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"],
            args: ['aria-labelledby']
          }],
          errorStateMatcher: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          sortComparator: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }]
        });
      })();

      var MatSelect = /*#__PURE__*/function (_MatSelectBase2) {
        _inherits2(MatSelect, _MatSelectBase2);

        var _super287 = _createSuper(MatSelect);

        function MatSelect() {
          var _this654;

          _classCallCheck2(this, MatSelect);

          _this654 = _super287.apply(this, arguments);
          /** The scroll position of the overlay panel, calculated to center the selected option. */

          _this654._scrollTop = 0;
          /** The cached font-size of the trigger element. */

          _this654._triggerFontSize = 0;
          /** The value of the select panel's transform-origin property. */

          _this654._transformOrigin = 'top';
          /**
           * The y-offset of the overlay panel in relation to the trigger's top start corner.
           * This must be adjusted to align the selected option text over the trigger text.
           * when the panel opens. Will change based on the y-position of the selected option.
           */

          _this654._offsetY = 0;
          _this654._positions = [{
            originX: 'start',
            originY: 'top',
            overlayX: 'start',
            overlayY: 'top'
          }, {
            originX: 'start',
            originY: 'bottom',
            overlayX: 'start',
            overlayY: 'bottom'
          }];
          return _this654;
        }
        /**
         * Calculates the scroll position of the select's overlay panel.
         *
         * Attempts to center the selected option in the panel. If the option is
         * too high or too low in the panel to be scrolled to the center, it clamps the
         * scroll position to the min or max scroll positions respectively.
         */


        _createClass2(MatSelect, [{
          key: "_calculateOverlayScroll",
          value: function _calculateOverlayScroll(selectedIndex, scrollBuffer, maxScroll) {
            var itemHeight = this._getItemHeight();

            var optionOffsetFromScrollTop = itemHeight * selectedIndex;
            var halfOptionHeight = itemHeight / 2; // Starts at the optionOffsetFromScrollTop, which scrolls the option to the top of the
            // scroll container, then subtracts the scroll buffer to scroll the option down to
            // the center of the overlay panel. Half the option height must be re-added to the
            // scrollTop so the option is centered based on its middle, not its top edge.

            var optimalScrollPosition = optionOffsetFromScrollTop - scrollBuffer + halfOptionHeight;
            return Math.min(Math.max(0, optimalScrollPosition), maxScroll);
          }
        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            var _this655 = this;

            _get2(_getPrototypeOf2(MatSelect.prototype), "ngOnInit", this).call(this);

            this._viewportRuler.change().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["takeUntil"])(this._destroy)).subscribe(function () {
              if (_this655.panelOpen) {
                _this655._triggerRect = _this655.trigger.nativeElement.getBoundingClientRect();

                _this655._changeDetectorRef.markForCheck();
              }
            });
          }
        }, {
          key: "open",
          value: function open() {
            var _this656 = this;

            if (_get2(_getPrototypeOf2(MatSelect.prototype), "_canOpen", this).call(this)) {
              _get2(_getPrototypeOf2(MatSelect.prototype), "open", this).call(this);

              this._triggerRect = this.trigger.nativeElement.getBoundingClientRect(); // Note: The computed font-size will be a string pixel value (e.g. "16px").
              // `parseInt` ignores the trailing 'px' and converts this to a number.

              this._triggerFontSize = parseInt(getComputedStyle(this.trigger.nativeElement).fontSize || '0');

              this._calculateOverlayPosition(); // Set the font size on the panel element once it exists.


              this._ngZone.onStable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_13__["take"])(1)).subscribe(function () {
                if (_this656._triggerFontSize && _this656.overlayDir.overlayRef && _this656.overlayDir.overlayRef.overlayElement) {
                  _this656.overlayDir.overlayRef.overlayElement.style.fontSize = "".concat(_this656._triggerFontSize, "px");
                }
              });
            }
          }
          /** Scrolls the active option into view. */

        }, {
          key: "_scrollOptionIntoView",
          value: function _scrollOptionIntoView(index) {
            var labelCount = Object(_angular_material_core__WEBPACK_IMPORTED_MODULE_3__["_countGroupLabelsBeforeOption"])(index, this.options, this.optionGroups);

            var itemHeight = this._getItemHeight();

            this.panel.nativeElement.scrollTop = Object(_angular_material_core__WEBPACK_IMPORTED_MODULE_3__["_getOptionScrollPosition"])((index + labelCount) * itemHeight, itemHeight, this.panel.nativeElement.scrollTop, SELECT_PANEL_MAX_HEIGHT);
          }
        }, {
          key: "_positioningSettled",
          value: function _positioningSettled() {
            this._calculateOverlayOffsetX();

            this.panel.nativeElement.scrollTop = this._scrollTop;
          }
        }, {
          key: "_panelDoneAnimating",
          value: function _panelDoneAnimating(isOpen) {
            if (this.panelOpen) {
              this._scrollTop = 0;
            } else {
              this.overlayDir.offsetX = 0;

              this._changeDetectorRef.markForCheck();
            }

            _get2(_getPrototypeOf2(MatSelect.prototype), "_panelDoneAnimating", this).call(this, isOpen);
          }
        }, {
          key: "_getChangeEvent",
          value: function _getChangeEvent(value) {
            return new MatSelectChange(this, value);
          }
          /**
           * Sets the x-offset of the overlay panel in relation to the trigger's top start corner.
           * This must be adjusted to align the selected option text over the trigger text when
           * the panel opens. Will change based on LTR or RTL text direction. Note that the offset
           * can't be calculated until the panel has been attached, because we need to know the
           * content width in order to constrain the panel within the viewport.
           */

        }, {
          key: "_calculateOverlayOffsetX",
          value: function _calculateOverlayOffsetX() {
            var overlayRect = this.overlayDir.overlayRef.overlayElement.getBoundingClientRect();

            var viewportSize = this._viewportRuler.getViewportSize();

            var isRtl = this._isRtl();

            var paddingWidth = this.multiple ? SELECT_MULTIPLE_PANEL_PADDING_X + SELECT_PANEL_PADDING_X : SELECT_PANEL_PADDING_X * 2;
            var offsetX; // Adjust the offset, depending on the option padding.

            if (this.multiple) {
              offsetX = SELECT_MULTIPLE_PANEL_PADDING_X;
            } else if (this.disableOptionCentering) {
              offsetX = SELECT_PANEL_PADDING_X;
            } else {
              var selected = this._selectionModel.selected[0] || this.options.first;
              offsetX = selected && selected.group ? SELECT_PANEL_INDENT_PADDING_X : SELECT_PANEL_PADDING_X;
            } // Invert the offset in LTR.


            if (!isRtl) {
              offsetX *= -1;
            } // Determine how much the select overflows on each side.


            var leftOverflow = 0 - (overlayRect.left + offsetX - (isRtl ? paddingWidth : 0));
            var rightOverflow = overlayRect.right + offsetX - viewportSize.width + (isRtl ? 0 : paddingWidth); // If the element overflows on either side, reduce the offset to allow it to fit.

            if (leftOverflow > 0) {
              offsetX += leftOverflow + SELECT_PANEL_VIEWPORT_PADDING;
            } else if (rightOverflow > 0) {
              offsetX -= rightOverflow + SELECT_PANEL_VIEWPORT_PADDING;
            } // Set the offset directly in order to avoid having to go through change detection and
            // potentially triggering "changed after it was checked" errors. Round the value to avoid
            // blurry content in some browsers.


            this.overlayDir.offsetX = Math.round(offsetX);
            this.overlayDir.overlayRef.updatePosition();
          }
          /**
           * Calculates the y-offset of the select's overlay panel in relation to the
           * top start corner of the trigger. It has to be adjusted in order for the
           * selected option to be aligned over the trigger when the panel opens.
           */

        }, {
          key: "_calculateOverlayOffsetY",
          value: function _calculateOverlayOffsetY(selectedIndex, scrollBuffer, maxScroll) {
            var itemHeight = this._getItemHeight();

            var optionHeightAdjustment = (itemHeight - this._triggerRect.height) / 2;
            var maxOptionsDisplayed = Math.floor(SELECT_PANEL_MAX_HEIGHT / itemHeight);
            var optionOffsetFromPanelTop; // Disable offset if requested by user by returning 0 as value to offset

            if (this.disableOptionCentering) {
              return 0;
            }

            if (this._scrollTop === 0) {
              optionOffsetFromPanelTop = selectedIndex * itemHeight;
            } else if (this._scrollTop === maxScroll) {
              var firstDisplayedIndex = this._getItemCount() - maxOptionsDisplayed;
              var selectedDisplayIndex = selectedIndex - firstDisplayedIndex; // The first item is partially out of the viewport. Therefore we need to calculate what
              // portion of it is shown in the viewport and account for it in our offset.

              var partialItemHeight = itemHeight - (this._getItemCount() * itemHeight - SELECT_PANEL_MAX_HEIGHT) % itemHeight; // Because the panel height is longer than the height of the options alone,
              // there is always extra padding at the top or bottom of the panel. When
              // scrolled to the very bottom, this padding is at the top of the panel and
              // must be added to the offset.

              optionOffsetFromPanelTop = selectedDisplayIndex * itemHeight + partialItemHeight;
            } else {
              // If the option was scrolled to the middle of the panel using a scroll buffer,
              // its offset will be the scroll buffer minus the half height that was added to
              // center it.
              optionOffsetFromPanelTop = scrollBuffer - itemHeight / 2;
            } // The final offset is the option's offset from the top, adjusted for the height difference,
            // multiplied by -1 to ensure that the overlay moves in the correct direction up the page.
            // The value is rounded to prevent some browsers from blurring the content.


            return Math.round(optionOffsetFromPanelTop * -1 - optionHeightAdjustment);
          }
          /**
           * Checks that the attempted overlay position will fit within the viewport.
           * If it will not fit, tries to adjust the scroll position and the associated
           * y-offset so the panel can open fully on-screen. If it still won't fit,
           * sets the offset back to 0 to allow the fallback position to take over.
           */

        }, {
          key: "_checkOverlayWithinViewport",
          value: function _checkOverlayWithinViewport(maxScroll) {
            var itemHeight = this._getItemHeight();

            var viewportSize = this._viewportRuler.getViewportSize();

            var topSpaceAvailable = this._triggerRect.top - SELECT_PANEL_VIEWPORT_PADDING;
            var bottomSpaceAvailable = viewportSize.height - this._triggerRect.bottom - SELECT_PANEL_VIEWPORT_PADDING;
            var panelHeightTop = Math.abs(this._offsetY);
            var totalPanelHeight = Math.min(this._getItemCount() * itemHeight, SELECT_PANEL_MAX_HEIGHT);
            var panelHeightBottom = totalPanelHeight - panelHeightTop - this._triggerRect.height;

            if (panelHeightBottom > bottomSpaceAvailable) {
              this._adjustPanelUp(panelHeightBottom, bottomSpaceAvailable);
            } else if (panelHeightTop > topSpaceAvailable) {
              this._adjustPanelDown(panelHeightTop, topSpaceAvailable, maxScroll);
            } else {
              this._transformOrigin = this._getOriginBasedOnOption();
            }
          }
          /** Adjusts the overlay panel up to fit in the viewport. */

        }, {
          key: "_adjustPanelUp",
          value: function _adjustPanelUp(panelHeightBottom, bottomSpaceAvailable) {
            // Browsers ignore fractional scroll offsets, so we need to round.
            var distanceBelowViewport = Math.round(panelHeightBottom - bottomSpaceAvailable); // Scrolls the panel up by the distance it was extending past the boundary, then
            // adjusts the offset by that amount to move the panel up into the viewport.

            this._scrollTop -= distanceBelowViewport;
            this._offsetY -= distanceBelowViewport;
            this._transformOrigin = this._getOriginBasedOnOption(); // If the panel is scrolled to the very top, it won't be able to fit the panel
            // by scrolling, so set the offset to 0 to allow the fallback position to take
            // effect.

            if (this._scrollTop <= 0) {
              this._scrollTop = 0;
              this._offsetY = 0;
              this._transformOrigin = "50% bottom 0px";
            }
          }
          /** Adjusts the overlay panel down to fit in the viewport. */

        }, {
          key: "_adjustPanelDown",
          value: function _adjustPanelDown(panelHeightTop, topSpaceAvailable, maxScroll) {
            // Browsers ignore fractional scroll offsets, so we need to round.
            var distanceAboveViewport = Math.round(panelHeightTop - topSpaceAvailable); // Scrolls the panel down by the distance it was extending past the boundary, then
            // adjusts the offset by that amount to move the panel down into the viewport.

            this._scrollTop += distanceAboveViewport;
            this._offsetY += distanceAboveViewport;
            this._transformOrigin = this._getOriginBasedOnOption(); // If the panel is scrolled to the very bottom, it won't be able to fit the
            // panel by scrolling, so set the offset to 0 to allow the fallback position
            // to take effect.

            if (this._scrollTop >= maxScroll) {
              this._scrollTop = maxScroll;
              this._offsetY = 0;
              this._transformOrigin = "50% top 0px";
              return;
            }
          }
          /** Calculates the scroll position and x- and y-offsets of the overlay panel. */

        }, {
          key: "_calculateOverlayPosition",
          value: function _calculateOverlayPosition() {
            var itemHeight = this._getItemHeight();

            var items = this._getItemCount();

            var panelHeight = Math.min(items * itemHeight, SELECT_PANEL_MAX_HEIGHT);
            var scrollContainerHeight = items * itemHeight; // The farthest the panel can be scrolled before it hits the bottom

            var maxScroll = scrollContainerHeight - panelHeight; // If no value is selected we open the popup to the first item.

            var selectedOptionOffset;

            if (this.empty) {
              selectedOptionOffset = 0;
            } else {
              selectedOptionOffset = Math.max(this.options.toArray().indexOf(this._selectionModel.selected[0]), 0);
            }

            selectedOptionOffset += Object(_angular_material_core__WEBPACK_IMPORTED_MODULE_3__["_countGroupLabelsBeforeOption"])(selectedOptionOffset, this.options, this.optionGroups); // We must maintain a scroll buffer so the selected option will be scrolled to the
            // center of the overlay panel rather than the top.

            var scrollBuffer = panelHeight / 2;
            this._scrollTop = this._calculateOverlayScroll(selectedOptionOffset, scrollBuffer, maxScroll);
            this._offsetY = this._calculateOverlayOffsetY(selectedOptionOffset, scrollBuffer, maxScroll);

            this._checkOverlayWithinViewport(maxScroll);
          }
          /** Sets the transform origin point based on the selected option. */

        }, {
          key: "_getOriginBasedOnOption",
          value: function _getOriginBasedOnOption() {
            var itemHeight = this._getItemHeight();

            var optionHeightAdjustment = (itemHeight - this._triggerRect.height) / 2;
            var originY = Math.abs(this._offsetY) - optionHeightAdjustment + itemHeight / 2;
            return "50% ".concat(originY, "px 0px");
          }
          /** Calculates the height of the select's options. */

        }, {
          key: "_getItemHeight",
          value: function _getItemHeight() {
            return this._triggerFontSize * SELECT_ITEM_HEIGHT_EM;
          }
          /** Calculates the amount of items in the select. This includes options and group labels. */

        }, {
          key: "_getItemCount",
          value: function _getItemCount() {
            return this.options.length + this.optionGroups.length;
          }
        }]);

        return MatSelect;
      }(_MatSelectBase);

      MatSelect.ɵfac = function MatSelect_Factory(t) {
        return ɵMatSelect_BaseFactory(t || MatSelect);
      };

      MatSelect.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineComponent"]({
        type: MatSelect,
        selectors: [["mat-select"]],
        contentQueries: function MatSelect_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵcontentQuery"](dirIndex, MAT_SELECT_TRIGGER, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵcontentQuery"](dirIndex, _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatOption"], 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵcontentQuery"](dirIndex, _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MAT_OPTGROUP"], 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵloadQuery"]()) && (ctx.customTrigger = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵloadQuery"]()) && (ctx.options = _t);
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵloadQuery"]()) && (ctx.optionGroups = _t);
          }
        },
        hostAttrs: ["role", "combobox", "aria-autocomplete", "none", "aria-haspopup", "true", 1, "mat-select"],
        hostVars: 20,
        hostBindings: function MatSelect_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("keydown", function MatSelect_keydown_HostBindingHandler($event) {
              return ctx._handleKeydown($event);
            })("focus", function MatSelect_focus_HostBindingHandler() {
              return ctx._onFocus();
            })("blur", function MatSelect_blur_HostBindingHandler() {
              return ctx._onBlur();
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵattribute"]("id", ctx.id)("tabindex", ctx.tabIndex)("aria-controls", ctx.panelOpen ? ctx.id + "-panel" : null)("aria-expanded", ctx.panelOpen)("aria-label", ctx.ariaLabel || null)("aria-required", ctx.required.toString())("aria-disabled", ctx.disabled.toString())("aria-invalid", ctx.errorState)("aria-describedby", ctx._ariaDescribedby || null)("aria-activedescendant", ctx._getAriaActiveDescendant());

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵclassProp"]("mat-select-disabled", ctx.disabled)("mat-select-invalid", ctx.errorState)("mat-select-required", ctx.required)("mat-select-empty", ctx.empty)("mat-select-multiple", ctx.multiple);
          }
        },
        inputs: {
          disabled: "disabled",
          disableRipple: "disableRipple",
          tabIndex: "tabIndex"
        },
        exportAs: ["matSelect"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵProvidersFeature"]([{
          provide: _angular_material_form_field__WEBPACK_IMPORTED_MODULE_4__["MatFormFieldControl"],
          useExisting: MatSelect
        }, {
          provide: _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MAT_OPTION_PARENT_COMPONENT"],
          useExisting: MatSelect
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵInheritDefinitionFeature"]],
        ngContentSelectors: _c3,
        decls: 9,
        vars: 12,
        consts: [["cdk-overlay-origin", "", 1, "mat-select-trigger", 3, "click"], ["origin", "cdkOverlayOrigin", "trigger", ""], [1, "mat-select-value", 3, "ngSwitch"], ["class", "mat-select-placeholder mat-select-min-line", 4, "ngSwitchCase"], ["class", "mat-select-value-text", 3, "ngSwitch", 4, "ngSwitchCase"], [1, "mat-select-arrow-wrapper"], [1, "mat-select-arrow"], ["cdk-connected-overlay", "", "cdkConnectedOverlayLockPosition", "", "cdkConnectedOverlayHasBackdrop", "", "cdkConnectedOverlayBackdropClass", "cdk-overlay-transparent-backdrop", 3, "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOrigin", "cdkConnectedOverlayOpen", "cdkConnectedOverlayPositions", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayOffsetY", "backdropClick", "attach", "detach"], [1, "mat-select-placeholder", "mat-select-min-line"], [1, "mat-select-value-text", 3, "ngSwitch"], ["class", "mat-select-min-line", 4, "ngSwitchDefault"], [4, "ngSwitchCase"], [1, "mat-select-min-line"], [1, "mat-select-panel-wrap"], ["role", "listbox", "tabindex", "-1", 3, "ngClass", "keydown"], ["panel", ""]],
        template: function MatSelect_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵprojectionDef"](_c2);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 0, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("click", function MatSelect_Template_div_click_0_listener() {
              return ctx.toggle();
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](3, "div", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](4, MatSelect_span_4_Template, 2, 1, "span", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](5, MatSelect_span_5_Template, 3, 2, "span", 4);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](6, "div", 5);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](7, "div", 6);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](8, MatSelect_ng_template_8_Template, 4, 14, "ng-template", 7);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("backdropClick", function MatSelect_Template_ng_template_backdropClick_8_listener() {
              return ctx.close();
            })("attach", function MatSelect_Template_ng_template_attach_8_listener() {
              return ctx._onAttached();
            })("detach", function MatSelect_Template_ng_template_detach_8_listener() {
              return ctx.close();
            });
          }

          if (rf & 2) {
            var _r0 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵreference"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵattribute"]("aria-owns", ctx.panelOpen ? ctx.id + "-panel" : null);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](3);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngSwitch", ctx.empty);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵattribute"]("id", ctx._valueId);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngSwitchCase", true);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngSwitchCase", false);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](3);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("cdkConnectedOverlayPanelClass", ctx._overlayPanelClass)("cdkConnectedOverlayScrollStrategy", ctx._scrollStrategy)("cdkConnectedOverlayOrigin", _r0)("cdkConnectedOverlayOpen", ctx.panelOpen)("cdkConnectedOverlayPositions", ctx._positions)("cdkConnectedOverlayMinWidth", ctx._triggerRect == null ? null : ctx._triggerRect.width)("cdkConnectedOverlayOffsetY", ctx._offsetY);
          }
        },
        directives: [_angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_0__["CdkOverlayOrigin"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgSwitch"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgSwitchCase"], _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_0__["CdkConnectedOverlay"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgSwitchDefault"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgClass"]],
        styles: [".mat-select{display:inline-block;width:100%;outline:none}.mat-select-trigger{display:inline-table;cursor:pointer;position:relative;box-sizing:border-box}.mat-select-disabled .mat-select-trigger{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.mat-select-value{display:table-cell;max-width:0;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-select-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-select-arrow-wrapper{display:table-cell;vertical-align:middle}.mat-form-field-appearance-fill .mat-select-arrow-wrapper{transform:translateY(-50%)}.mat-form-field-appearance-outline .mat-select-arrow-wrapper{transform:translateY(-25%)}.mat-form-field-appearance-standard.mat-form-field-has-label .mat-select:not(.mat-select-empty) .mat-select-arrow-wrapper{transform:translateY(-50%)}.mat-form-field-appearance-standard .mat-select.mat-select-empty .mat-select-arrow-wrapper{transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}._mat-animation-noopable.mat-form-field-appearance-standard .mat-select.mat-select-empty .mat-select-arrow-wrapper{transition:none}.mat-select-arrow{width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid;margin:0 4px}.mat-select-panel-wrap{flex-basis:100%}.mat-select-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;padding-top:0;padding-bottom:0;max-height:256px;min-width:100%;border-radius:4px;outline:0}.cdk-high-contrast-active .mat-select-panel{outline:solid 1px}.mat-select-panel .mat-optgroup-label,.mat-select-panel .mat-option{font-size:inherit;line-height:3em;height:3em}.mat-form-field-type-mat-select:not(.mat-form-field-disabled) .mat-form-field-flex{cursor:pointer}.mat-form-field-type-mat-select .mat-form-field-label{width:calc(100% - 18px)}.mat-select-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}._mat-animation-noopable .mat-select-placeholder{transition:none}.mat-form-field-hide-placeholder .mat-select-placeholder{color:transparent;-webkit-text-fill-color:transparent;transition:none;display:block}.mat-select-min-line:empty::before{content:\" \";white-space:pre;width:1px}\n"],
        encapsulation: 2,
        data: {
          animation: [matSelectAnimations.transformPanelWrap, matSelectAnimations.transformPanel]
        },
        changeDetection: 0
      });
      MatSelect.propDecorators = {
        options: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChildren"],
          args: [_angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatOption"], {
            descendants: true
          }]
        }],
        optionGroups: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChildren"],
          args: [_angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MAT_OPTGROUP"], {
            descendants: true
          }]
        }],
        customTrigger: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChild"],
          args: [MAT_SELECT_TRIGGER]
        }]
      };

      var ɵMatSelect_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetInheritedFactory"](MatSelect);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](MatSelect, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Component"],
          args: [{
            selector: 'mat-select',
            exportAs: 'matSelect',
            template: "<!--\n Note that the select trigger element specifies `aria-owns` pointing to the listbox overlay.\n While aria-owns is not required for the ARIA 1.2 `role=\"combobox\"` interaction pattern,\n it fixes an issue with VoiceOver when the select appears inside of an `aria-model=\"true\"`\n element (e.g. a dialog). Without this `aria-owns`, the `aria-modal` on a dialog prevents\n VoiceOver from \"seeing\" the select's listbox overlay for aria-activedescendant.\n Using `aria-owns` re-parents the select overlay so that it works again.\n See https://github.com/angular/components/issues/20694\n-->\n<div cdk-overlay-origin\n     [attr.aria-owns]=\"panelOpen ? id + '-panel' : null\"\n     class=\"mat-select-trigger\"\n     (click)=\"toggle()\"\n     #origin=\"cdkOverlayOrigin\"\n     #trigger>\n  <div class=\"mat-select-value\" [ngSwitch]=\"empty\" [attr.id]=\"_valueId\">\n    <span class=\"mat-select-placeholder mat-select-min-line\" *ngSwitchCase=\"true\">{{placeholder}}</span>\n    <span class=\"mat-select-value-text\" *ngSwitchCase=\"false\" [ngSwitch]=\"!!customTrigger\">\n      <span class=\"mat-select-min-line\" *ngSwitchDefault>{{triggerValue}}</span>\n      <ng-content select=\"mat-select-trigger\" *ngSwitchCase=\"true\"></ng-content>\n    </span>\n  </div>\n\n  <div class=\"mat-select-arrow-wrapper\"><div class=\"mat-select-arrow\"></div></div>\n</div>\n\n<ng-template\n  cdk-connected-overlay\n  cdkConnectedOverlayLockPosition\n  cdkConnectedOverlayHasBackdrop\n  cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n  [cdkConnectedOverlayPanelClass]=\"_overlayPanelClass\"\n  [cdkConnectedOverlayScrollStrategy]=\"_scrollStrategy\"\n  [cdkConnectedOverlayOrigin]=\"origin\"\n  [cdkConnectedOverlayOpen]=\"panelOpen\"\n  [cdkConnectedOverlayPositions]=\"_positions\"\n  [cdkConnectedOverlayMinWidth]=\"_triggerRect?.width!\"\n  [cdkConnectedOverlayOffsetY]=\"_offsetY\"\n  (backdropClick)=\"close()\"\n  (attach)=\"_onAttached()\"\n  (detach)=\"close()\">\n  <div class=\"mat-select-panel-wrap\" [@transformPanelWrap]>\n    <div\n      #panel\n      role=\"listbox\"\n      tabindex=\"-1\"\n      class=\"mat-select-panel {{ _getPanelTheme() }}\"\n      [attr.id]=\"id + '-panel'\"\n      [attr.aria-multiselectable]=\"multiple\"\n      [attr.aria-label]=\"ariaLabel || null\"\n      [attr.aria-labelledby]=\"_getPanelAriaLabelledby()\"\n      [ngClass]=\"panelClass\"\n      [@transformPanel]=\"multiple ? 'showing-multiple' : 'showing'\"\n      (@transformPanel.done)=\"_panelDoneAnimatingStream.next($event.toState)\"\n      [style.transformOrigin]=\"_transformOrigin\"\n      [style.font-size.px]=\"_triggerFontSize\"\n      (keydown)=\"_handleKeydown($event)\">\n      <ng-content></ng-content>\n    </div>\n  </div>\n</ng-template>\n",
            inputs: ['disabled', 'disableRipple', 'tabIndex'],
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ViewEncapsulation"].None,
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ChangeDetectionStrategy"].OnPush,
            host: {
              'role': 'combobox',
              'aria-autocomplete': 'none',
              // TODO(crisbeto): the value for aria-haspopup should be `listbox`, but currently it's difficult
              // to sync into Google, because of an outdated automated a11y check which flags it as an invalid
              // value. At some point we should try to switch it back to being `listbox`.
              'aria-haspopup': 'true',
              'class': 'mat-select',
              '[attr.id]': 'id',
              '[attr.tabindex]': 'tabIndex',
              '[attr.aria-controls]': 'panelOpen ? id + "-panel" : null',
              '[attr.aria-expanded]': 'panelOpen',
              '[attr.aria-label]': 'ariaLabel || null',
              '[attr.aria-required]': 'required.toString()',
              '[attr.aria-disabled]': 'disabled.toString()',
              '[attr.aria-invalid]': 'errorState',
              '[attr.aria-describedby]': '_ariaDescribedby || null',
              '[attr.aria-activedescendant]': '_getAriaActiveDescendant()',
              '[class.mat-select-disabled]': 'disabled',
              '[class.mat-select-invalid]': 'errorState',
              '[class.mat-select-required]': 'required',
              '[class.mat-select-empty]': 'empty',
              '[class.mat-select-multiple]': 'multiple',
              '(keydown)': '_handleKeydown($event)',
              '(focus)': '_onFocus()',
              '(blur)': '_onBlur()'
            },
            animations: [matSelectAnimations.transformPanelWrap, matSelectAnimations.transformPanel],
            providers: [{
              provide: _angular_material_form_field__WEBPACK_IMPORTED_MODULE_4__["MatFormFieldControl"],
              useExisting: MatSelect
            }, {
              provide: _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MAT_OPTION_PARENT_COMPONENT"],
              useExisting: MatSelect
            }],
            styles: [".mat-select{display:inline-block;width:100%;outline:none}.mat-select-trigger{display:inline-table;cursor:pointer;position:relative;box-sizing:border-box}.mat-select-disabled .mat-select-trigger{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.mat-select-value{display:table-cell;max-width:0;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-select-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-select-arrow-wrapper{display:table-cell;vertical-align:middle}.mat-form-field-appearance-fill .mat-select-arrow-wrapper{transform:translateY(-50%)}.mat-form-field-appearance-outline .mat-select-arrow-wrapper{transform:translateY(-25%)}.mat-form-field-appearance-standard.mat-form-field-has-label .mat-select:not(.mat-select-empty) .mat-select-arrow-wrapper{transform:translateY(-50%)}.mat-form-field-appearance-standard .mat-select.mat-select-empty .mat-select-arrow-wrapper{transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}._mat-animation-noopable.mat-form-field-appearance-standard .mat-select.mat-select-empty .mat-select-arrow-wrapper{transition:none}.mat-select-arrow{width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid;margin:0 4px}.mat-select-panel-wrap{flex-basis:100%}.mat-select-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;padding-top:0;padding-bottom:0;max-height:256px;min-width:100%;border-radius:4px;outline:0}.cdk-high-contrast-active .mat-select-panel{outline:solid 1px}.mat-select-panel .mat-optgroup-label,.mat-select-panel .mat-option{font-size:inherit;line-height:3em;height:3em}.mat-form-field-type-mat-select:not(.mat-form-field-disabled) .mat-form-field-flex{cursor:pointer}.mat-form-field-type-mat-select .mat-form-field-label{width:calc(100% - 18px)}.mat-select-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}._mat-animation-noopable .mat-select-placeholder{transition:none}.mat-form-field-hide-placeholder .mat-select-placeholder{color:transparent;-webkit-text-fill-color:transparent;transition:none;display:block}.mat-select-min-line:empty::before{content:\" \";white-space:pre;width:1px}\n"]
          }]
        }], null, {
          options: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChildren"],
            args: [_angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatOption"], {
              descendants: true
            }]
          }],
          optionGroups: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChildren"],
            args: [_angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MAT_OPTGROUP"], {
              descendants: true
            }]
          }],
          customTrigger: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChild"],
            args: [MAT_SELECT_TRIGGER]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var MatSelectModule = function MatSelectModule() {
        _classCallCheck2(this, MatSelectModule);
      };

      MatSelectModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineNgModule"]({
        type: MatSelectModule
      });
      MatSelectModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineInjector"]({
        factory: function MatSelectModule_Factory(t) {
          return new (t || MatSelectModule)();
        },
        providers: [MAT_SELECT_SCROLL_STRATEGY_PROVIDER],
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_0__["OverlayModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatOptionModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatCommonModule"]], _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_5__["CdkScrollableModule"], _angular_material_form_field__WEBPACK_IMPORTED_MODULE_4__["MatFormFieldModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatOptionModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatCommonModule"]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵsetNgModuleScope"](MatSelectModule, {
          declarations: function declarations() {
            return [MatSelect, MatSelectTrigger];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_0__["OverlayModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatOptionModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatCommonModule"]];
          },
          exports: function exports() {
            return [_angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_5__["CdkScrollableModule"], _angular_material_form_field__WEBPACK_IMPORTED_MODULE_4__["MatFormFieldModule"], MatSelect, MatSelectTrigger, _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatOptionModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatCommonModule"]];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](MatSelectModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["NgModule"],
          args: [{
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_cdk_overlay__WEBPACK_IMPORTED_MODULE_0__["OverlayModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatOptionModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatCommonModule"]],
            exports: [_angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_5__["CdkScrollableModule"], _angular_material_form_field__WEBPACK_IMPORTED_MODULE_4__["MatFormFieldModule"], MatSelect, MatSelectTrigger, _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatOptionModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatCommonModule"]],
            declarations: [MatSelect, MatSelectTrigger],
            providers: [MAT_SELECT_SCROLL_STRATEGY_PROVIDER]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=select.js.map

      /***/

    },

    /***/
    "dNwA":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/sw.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function dNwA(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Swahili [sw]
      //! author : Fahad Kassim : https://github.com/fadsel
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var sw = moment.defineLocale('sw', {
          months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),
          monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),
          weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),
          weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),
          weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'hh:mm A',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[leo saa] LT',
            nextDay: '[kesho saa] LT',
            nextWeek: '[wiki ijayo] dddd [saat] LT',
            lastDay: '[jana] LT',
            lastWeek: '[wiki iliyopita] dddd [saat] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s baadaye',
            past: 'tokea %s',
            s: 'hivi punde',
            ss: 'sekunde %d',
            m: 'dakika moja',
            mm: 'dakika %d',
            h: 'saa limoja',
            hh: 'masaa %d',
            d: 'siku moja',
            dd: 'siku %d',
            M: 'mwezi mmoja',
            MM: 'miezi %d',
            y: 'mwaka mmoja',
            yy: 'miaka %d'
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return sw;
      });
      /***/

    },

    /***/
    "dZIy":
    /*!*********************************************************************************************!*\
      !*** ./node_modules/ngx-bootstrap/__ivy_ngcc__/dropdown/fesm2015/ngx-bootstrap-dropdown.js ***!
      \*********************************************************************************************/

    /*! exports provided: BsDropdownConfig, BsDropdownContainerComponent, BsDropdownDirective, BsDropdownMenuDirective, BsDropdownModule, BsDropdownState, BsDropdownToggleDirective */

    /***/
    function dZIy(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BsDropdownConfig", function () {
        return BsDropdownConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BsDropdownContainerComponent", function () {
        return BsDropdownContainerComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BsDropdownDirective", function () {
        return BsDropdownDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BsDropdownMenuDirective", function () {
        return BsDropdownMenuDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BsDropdownModule", function () {
        return BsDropdownModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BsDropdownState", function () {
        return BsDropdownState;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BsDropdownToggleDirective", function () {
        return BsDropdownToggleDirective;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var ngx_bootstrap_component_loader__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ngx-bootstrap/component-loader */
      "3XJ7");
      /* harmony import */


      var ngx_bootstrap_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ngx-bootstrap/utils */
      "lUod");
      /* harmony import */


      var _angular_animations__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/animations */
      "R0Ic");
      /* harmony import */


      var ngx_bootstrap_positioning__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! ngx-bootstrap/positioning */
      "WyaX");
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * Default dropdown configuration
       */


      var _c0 = ["*"];

      var BsDropdownConfig = function BsDropdownConfig() {
        _classCallCheck2(this, BsDropdownConfig);

        /**
         * default dropdown auto closing behavior
         */
        this.autoClose = true;
        /**
         * default dropdown auto closing behavior
         */

        this.insideClick = false;
        /**
         * turn on/off animation
         */

        this.isAnimated = false;
      };

      BsDropdownConfig.ɵfac = function BsDropdownConfig_Factory(t) {
        return new (t || BsDropdownConfig)();
      };

      BsDropdownConfig.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: BsDropdownConfig,
        factory: BsDropdownConfig.ɵfac
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BsDropdownConfig, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [];
        }, null);
      })();

      if (false) {}
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var BsDropdownState = function BsDropdownState() {
        var _this657 = this;

        _classCallCheck2(this, BsDropdownState);

        this.direction = 'down';
        this.isOpenChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.isDisabledChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.toggleClick = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.dropdownMenu = new Promise(
        /**
        * @param {?} resolve
        * @return {?}
        */
        function (resolve) {
          _this657.resolveDropdownMenu = resolve;
        });
      };

      BsDropdownState.ɵfac = function BsDropdownState_Factory(t) {
        return new (t || BsDropdownState)();
      };

      BsDropdownState.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: BsDropdownState,
        factory: BsDropdownState.ɵfac
      });
      /** @nocollapse */

      BsDropdownState.ctorParameters = function () {
        return [];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BsDropdownState, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [];
        }, null);
      })();

      if (false) {}
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /** @type {?} */


      var DROPDOWN_ANIMATION_TIMING = '220ms cubic-bezier(0, 0, 0.2, 1)';
      /** @type {?} */

      var dropdownAnimation = [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_4__["style"])({
        height: 0,
        overflow: 'hidden'
      }), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_4__["animate"])(DROPDOWN_ANIMATION_TIMING, Object(_angular_animations__WEBPACK_IMPORTED_MODULE_4__["style"])({
        height: '*',
        overflow: 'hidden'
      }))];
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      var BsDropdownContainerComponent = /*#__PURE__*/function () {
        /**
         * @param {?} _state
         * @param {?} cd
         * @param {?} _renderer
         * @param {?} _element
         * @param {?} _builder
         */
        function BsDropdownContainerComponent(_state, cd, _renderer, _element, _builder) {
          var _this658 = this;

          _classCallCheck2(this, BsDropdownContainerComponent);

          this._state = _state;
          this.cd = cd;
          this._renderer = _renderer;
          this._element = _element;
          this.isOpen = false;
          this._factoryDropDownAnimation = _builder.build(dropdownAnimation);
          this._subscription = _state.isOpenChange.subscribe(
          /**
          * @param {?} value
          * @return {?}
          */
          function (value) {
            _this658.isOpen = value;
            /** @type {?} */

            var dropdown = _this658._element.nativeElement.querySelector('.dropdown-menu');

            _this658._renderer.addClass(_this658._element.nativeElement.querySelector('div'), 'open');

            if (dropdown && !Object(ngx_bootstrap_utils__WEBPACK_IMPORTED_MODULE_3__["isBs3"])()) {
              _this658._renderer.addClass(dropdown, 'show');

              if (dropdown.classList.contains('dropdown-menu-right')) {
                _this658._renderer.setStyle(dropdown, 'left', 'auto');

                _this658._renderer.setStyle(dropdown, 'right', '0');
              }

              if (_this658.direction === 'up') {
                _this658._renderer.setStyle(dropdown, 'top', 'auto');

                _this658._renderer.setStyle(dropdown, 'transform', 'translateY(-101%)');
              }
            }

            if (dropdown && _this658._state.isAnimated) {
              _this658._factoryDropDownAnimation.create(dropdown).play();
            }

            _this658.cd.markForCheck();

            _this658.cd.detectChanges();
          });
        }
        /**
         * @return {?}
         */


        _createClass2(BsDropdownContainerComponent, [{
          key: "direction",
          get: function get() {
            return this._state.direction;
          }
          /**
           * \@internal
           * @param {?} el
           * @return {?}
           */

        }, {
          key: "_contains",
          value: function _contains(el) {
            return this._element.nativeElement.contains(el);
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._subscription.unsubscribe();
          }
        }]);

        return BsDropdownContainerComponent;
      }();

      BsDropdownContainerComponent.ɵfac = function BsDropdownContainerComponent_Factory(t) {
        return new (t || BsDropdownContainerComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](BsDropdownState), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_animations__WEBPACK_IMPORTED_MODULE_4__["AnimationBuilder"]));
      };

      BsDropdownContainerComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: BsDropdownContainerComponent,
        selectors: [["bs-dropdown-container"]],
        hostAttrs: [2, "display", "block", "position", "absolute", "z-index", "1040"],
        ngContentSelectors: _c0,
        decls: 2,
        vars: 8,
        template: function BsDropdownContainerComponent_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("dropup", ctx.direction === "up")("dropdown", ctx.direction === "down")("show", ctx.isOpen)("open", ctx.isOpen);
          }
        },
        directives: function directives() {
          return [BsDropdownDirective];
        },
        encapsulation: 2,
        changeDetection: 0
      });
      /** @nocollapse */

      BsDropdownContainerComponent.ctorParameters = function () {
        return [{
          type: BsDropdownState
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_animations__WEBPACK_IMPORTED_MODULE_4__["AnimationBuilder"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BsDropdownContainerComponent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'bs-dropdown-container',
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            host: {
              style: 'display:block;position: absolute;z-index: 1040'
            },
            template: "\n    <div [class.dropup]=\"direction === 'up'\"\n         [class.dropdown]=\"direction === 'down'\"\n         [class.show]=\"isOpen\"\n         [class.open]=\"isOpen\"><ng-content></ng-content>\n    </div>\n  "
          }]
        }], function () {
          return [{
            type: BsDropdownState
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_animations__WEBPACK_IMPORTED_MODULE_4__["AnimationBuilder"]
          }];
        }, null);
      })();

      if (false) {}
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var BsDropdownDirective = /*#__PURE__*/function () {
        /**
         * @param {?} _elementRef
         * @param {?} _renderer
         * @param {?} _viewContainerRef
         * @param {?} _cis
         * @param {?} _state
         * @param {?} _config
         * @param {?} _builder
         */
        function BsDropdownDirective(_elementRef, _renderer, _viewContainerRef, _cis, _state, _config, _builder) {
          _classCallCheck2(this, BsDropdownDirective);

          this._elementRef = _elementRef;
          this._renderer = _renderer;
          this._viewContainerRef = _viewContainerRef;
          this._cis = _cis;
          this._state = _state;
          this._config = _config; // todo: move to component loader

          this._isInlineOpen = false;
          this._subscriptions = [];
          this._isInited = false; // set initial dropdown state from config

          this._state.autoClose = this._config.autoClose;
          this._state.insideClick = this._config.insideClick;
          this._state.isAnimated = this._config.isAnimated;
          this._factoryDropDownAnimation = _builder.build(dropdownAnimation); // create dropdown component loader

          this._dropdown = this._cis.createLoader(this._elementRef, this._viewContainerRef, this._renderer).provide({
            provide: BsDropdownState,
            useValue: this._state
          });
          this.onShown = this._dropdown.onShown;
          this.onHidden = this._dropdown.onHidden;
          this.isOpenChange = this._state.isOpenChange;
        }
        /**
         * Indicates that dropdown will be closed on item or document click,
         * and after pressing ESC
         * @param {?} value
         * @return {?}
         */


        _createClass2(BsDropdownDirective, [{
          key: "autoClose",
          get:
          /**
           * @return {?}
           */
          function get() {
            return this._state.autoClose;
          }
          /**
           * Indicates that dropdown will be animated
           * @param {?} value
           * @return {?}
           */
          ,
          set: function set(value) {
            this._state.autoClose = value;
          }
        }, {
          key: "isAnimated",
          get:
          /**
           * @return {?}
           */
          function get() {
            return this._state.isAnimated;
          }
          /**
           * This attribute indicates that the dropdown shouldn't close on inside click when autoClose is set to true
           * @param {?} value
           * @return {?}
           */
          ,
          set: function set(value) {
            this._state.isAnimated = value;
          }
        }, {
          key: "insideClick",
          get:
          /**
           * @return {?}
           */
          function get() {
            return this._state.insideClick;
          }
          /**
           * Disables dropdown toggle and hides dropdown menu if opened
           * @param {?} value
           * @return {?}
           */
          ,
          set: function set(value) {
            this._state.insideClick = value;
          }
        }, {
          key: "isDisabled",
          get:
          /**
           * @return {?}
           */
          function get() {
            return this._isDisabled;
          }
          /**
           * Returns whether or not the popover is currently being shown
           * @return {?}
           */
          ,
          set: function set(value) {
            this._isDisabled = value;

            this._state.isDisabledChange.emit(value);

            if (value) {
              this.hide();
            }
          }
        }, {
          key: "isOpen",
          get: function get() {
            if (this._showInline) {
              return this._isInlineOpen;
            }

            return this._dropdown.isShown;
          }
          /**
           * @param {?} value
           * @return {?}
           */
          ,
          set: function set(value) {
            if (value) {
              this.show();
            } else {
              this.hide();
            }
          }
          /**
           * @return {?}
           */

        }, {
          key: "isBs4",
          get: function get() {
            return !Object(ngx_bootstrap_utils__WEBPACK_IMPORTED_MODULE_3__["isBs3"])();
          }
          /**
           * @private
           * @return {?}
           */

        }, {
          key: "_showInline",
          get: function get() {
            return !this.container;
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            var _this659 = this;

            // fix: seems there are an issue with `routerLinkActive`
            // which result in duplicated call ngOnInit without call to ngOnDestroy
            // read more: https://github.com/valor-software/ngx-bootstrap/issues/1885
            if (this._isInited) {
              return;
            }

            this._isInited = true; // attach DOM listeners

            this._dropdown.listen({
              // because of dropdown inline mode
              outsideClick: false,
              triggers: this.triggers,
              show:
              /**
              * @return {?}
              */
              function show() {
                return _this659.show();
              }
            }); // toggle visibility on toggle element click


            this._subscriptions.push(this._state.toggleClick.subscribe(
            /**
            * @param {?} value
            * @return {?}
            */
            function (value) {
              return _this659.toggle(value);
            })); // hide dropdown if set disabled while opened


            this._subscriptions.push(this._state.isDisabledChange.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["filter"])(
            /**
            * @param {?} value
            * @return {?}
            */
            function (value) {
              return value;
            })).subscribe(
            /**
            * @param {?} value
            * @return {?}
            */
            function (value) {
              return _this659.hide();
            }));
          }
          /**
           * Opens an element’s popover. This is considered a “manual” triggering of
           * the popover.
           * @return {?}
           */

        }, {
          key: "show",
          value: function show() {
            var _this660 = this;

            if (this.isOpen || this.isDisabled) {
              return;
            }

            if (this._showInline) {
              if (!this._inlinedMenu) {
                this._state.dropdownMenu.then(
                /**
                * @param {?} dropdownMenu
                * @return {?}
                */
                function (dropdownMenu) {
                  _this660._dropdown.attachInline(dropdownMenu.viewContainer, dropdownMenu.templateRef);

                  _this660._inlinedMenu = _this660._dropdown._inlineViewRef;

                  _this660.addBs4Polyfills();

                  _this660._renderer.addClass(_this660._inlinedMenu.rootNodes[0].parentNode, 'open');

                  _this660.playAnimation();
                }) // swallow errors
                ["catch"]();
              }

              this.addBs4Polyfills();
              this._isInlineOpen = true;
              this.onShown.emit(true);

              this._state.isOpenChange.emit(true);

              this.playAnimation();
              return;
            }

            this._state.dropdownMenu.then(
            /**
            * @param {?} dropdownMenu
            * @return {?}
            */
            function (dropdownMenu) {
              // check direction in which dropdown should be opened

              /** @type {?} */
              var _dropup = _this660.dropup || typeof _this660.dropup !== 'undefined' && _this660.dropup;

              _this660._state.direction = _dropup ? 'up' : 'down';
              /** @type {?} */

              var _placement = _this660.placement || (_dropup ? 'top start' : 'bottom start'); // show dropdown


              _this660._dropdown.attach(BsDropdownContainerComponent).to(_this660.container).position({
                attachment: _placement
              }).show({
                content: dropdownMenu.templateRef,
                placement: _placement
              });

              _this660._state.isOpenChange.emit(true);
            }) // swallow error
            ["catch"]();
          }
          /**
           * Closes an element’s popover. This is considered a “manual” triggering of
           * the popover.
           * @return {?}
           */

        }, {
          key: "hide",
          value: function hide() {
            if (!this.isOpen) {
              return;
            }

            if (this._showInline) {
              this.removeShowClass();
              this.removeDropupStyles();
              this._isInlineOpen = false;
              this.onHidden.emit(true);
            } else {
              this._dropdown.hide();
            }

            this._state.isOpenChange.emit(false);
          }
          /**
           * Toggles an element’s popover. This is considered a “manual” triggering of
           * the popover. With parameter <code>true</code> allows toggling, with parameter <code>false</code>
           * only hides opened dropdown. Parameter usage will be removed in ngx-bootstrap v3
           * @param {?=} value
           * @return {?}
           */

        }, {
          key: "toggle",
          value: function toggle(value) {
            if (this.isOpen || !value) {
              return this.hide();
            }

            return this.show();
          }
          /**
           * \@internal
           * @param {?} event
           * @return {?}
           */

        }, {
          key: "_contains",
          value: function _contains(event) {
            return this._elementRef.nativeElement.contains(event.target) || this._dropdown.instance && this._dropdown.instance._contains(event.target);
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            // clean up subscriptions and destroy dropdown
            var _iterator60 = _createForOfIteratorHelper(this._subscriptions),
                _step59;

            try {
              for (_iterator60.s(); !(_step59 = _iterator60.n()).done;) {
                var sub = _step59.value;
                sub.unsubscribe();
              }
            } catch (err) {
              _iterator60.e(err);
            } finally {
              _iterator60.f();
            }

            this._dropdown.dispose();
          }
          /**
           * @private
           * @return {?}
           */

        }, {
          key: "addBs4Polyfills",
          value: function addBs4Polyfills() {
            if (!Object(ngx_bootstrap_utils__WEBPACK_IMPORTED_MODULE_3__["isBs3"])()) {
              this.addShowClass();
              this.checkRightAlignment();
              this.addDropupStyles();
            }
          }
          /**
           * @private
           * @return {?}
           */

        }, {
          key: "playAnimation",
          value: function playAnimation() {
            var _this661 = this;

            if (this._state.isAnimated && this._inlinedMenu) {
              setTimeout(
              /**
              * @return {?}
              */
              function () {
                _this661._factoryDropDownAnimation.create(_this661._inlinedMenu.rootNodes[0]).play();
              });
            }
          }
          /**
           * @private
           * @return {?}
           */

        }, {
          key: "addShowClass",
          value: function addShowClass() {
            if (this._inlinedMenu && this._inlinedMenu.rootNodes[0]) {
              this._renderer.addClass(this._inlinedMenu.rootNodes[0], 'show');
            }
          }
          /**
           * @private
           * @return {?}
           */

        }, {
          key: "removeShowClass",
          value: function removeShowClass() {
            if (this._inlinedMenu && this._inlinedMenu.rootNodes[0]) {
              this._renderer.removeClass(this._inlinedMenu.rootNodes[0], 'show');
            }
          }
          /**
           * @private
           * @return {?}
           */

        }, {
          key: "checkRightAlignment",
          value: function checkRightAlignment() {
            if (this._inlinedMenu && this._inlinedMenu.rootNodes[0]) {
              /** @type {?} */
              var isRightAligned = this._inlinedMenu.rootNodes[0].classList.contains('dropdown-menu-right');

              this._renderer.setStyle(this._inlinedMenu.rootNodes[0], 'left', isRightAligned ? 'auto' : '0');

              this._renderer.setStyle(this._inlinedMenu.rootNodes[0], 'right', isRightAligned ? '0' : 'auto');
            }
          }
          /**
           * @private
           * @return {?}
           */

        }, {
          key: "addDropupStyles",
          value: function addDropupStyles() {
            if (this._inlinedMenu && this._inlinedMenu.rootNodes[0]) {
              // a little hack to not break support of bootstrap 4 beta
              this._renderer.setStyle(this._inlinedMenu.rootNodes[0], 'top', this.dropup ? 'auto' : '100%');

              this._renderer.setStyle(this._inlinedMenu.rootNodes[0], 'transform', this.dropup ? 'translateY(-101%)' : 'translateY(0)');

              this._renderer.setStyle(this._inlinedMenu.rootNodes[0], 'bottom', 'auto');
            }
          }
          /**
           * @private
           * @return {?}
           */

        }, {
          key: "removeDropupStyles",
          value: function removeDropupStyles() {
            if (this._inlinedMenu && this._inlinedMenu.rootNodes[0]) {
              this._renderer.removeStyle(this._inlinedMenu.rootNodes[0], 'top');

              this._renderer.removeStyle(this._inlinedMenu.rootNodes[0], 'transform');

              this._renderer.removeStyle(this._inlinedMenu.rootNodes[0], 'bottom');
            }
          }
        }]);

        return BsDropdownDirective;
      }();

      BsDropdownDirective.ɵfac = function BsDropdownDirective_Factory(t) {
        return new (t || BsDropdownDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](ngx_bootstrap_component_loader__WEBPACK_IMPORTED_MODULE_2__["ComponentLoaderFactory"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](BsDropdownState), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](BsDropdownConfig), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_animations__WEBPACK_IMPORTED_MODULE_4__["AnimationBuilder"]));
      };

      BsDropdownDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: BsDropdownDirective,
        selectors: [["", "bsDropdown", ""], ["", "dropdown", ""]],
        hostVars: 6,
        hostBindings: function BsDropdownDirective_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("dropup", ctx.dropup)("open", ctx.isOpen)("show", ctx.isOpen && ctx.isBs4);
          }
        },
        inputs: {
          autoClose: "autoClose",
          isAnimated: "isAnimated",
          insideClick: "insideClick",
          isDisabled: "isDisabled",
          isOpen: "isOpen",
          placement: "placement",
          triggers: "triggers",
          container: "container",
          dropup: "dropup"
        },
        outputs: {
          onShown: "onShown",
          onHidden: "onHidden",
          isOpenChange: "isOpenChange"
        },
        exportAs: ["bs-dropdown"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([BsDropdownState])]
      });
      /** @nocollapse */

      BsDropdownDirective.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
        }, {
          type: ngx_bootstrap_component_loader__WEBPACK_IMPORTED_MODULE_2__["ComponentLoaderFactory"]
        }, {
          type: BsDropdownState
        }, {
          type: BsDropdownConfig
        }, {
          type: _angular_animations__WEBPACK_IMPORTED_MODULE_4__["AnimationBuilder"]
        }];
      };

      BsDropdownDirective.propDecorators = {
        placement: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        triggers: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        container: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        dropup: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        autoClose: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        isAnimated: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        insideClick: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        isDisabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        isOpen: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        isOpenChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onShown: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onHidden: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BsDropdownDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[bsDropdown],[dropdown]',
            exportAs: 'bs-dropdown',
            providers: [BsDropdownState],
            host: {
              '[class.dropup]': 'dropup',
              '[class.open]': 'isOpen',
              '[class.show]': 'isOpen && isBs4'
            }
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
          }, {
            type: ngx_bootstrap_component_loader__WEBPACK_IMPORTED_MODULE_2__["ComponentLoaderFactory"]
          }, {
            type: BsDropdownState
          }, {
            type: BsDropdownConfig
          }, {
            type: _angular_animations__WEBPACK_IMPORTED_MODULE_4__["AnimationBuilder"]
          }];
        }, {
          onShown: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          onHidden: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          isOpenChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          autoClose: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          isAnimated: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          insideClick: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          isDisabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          isOpen: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          placement: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          triggers: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          container: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          dropup: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      if (false) {}
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var BsDropdownMenuDirective = // tslint:disable:no-any

      /**
       * @param {?} _state
       * @param {?} _viewContainer
       * @param {?} _templateRef
       */
      function BsDropdownMenuDirective(_state, _viewContainer, _templateRef) {
        _classCallCheck2(this, BsDropdownMenuDirective);

        _state.resolveDropdownMenu({
          templateRef: _templateRef,
          viewContainer: _viewContainer
        });
      };

      BsDropdownMenuDirective.ɵfac = function BsDropdownMenuDirective_Factory(t) {
        return new (t || BsDropdownMenuDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](BsDropdownState), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]));
      };

      BsDropdownMenuDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: BsDropdownMenuDirective,
        selectors: [["", "bsDropdownMenu", ""], ["", "dropdownMenu", ""]],
        exportAs: ["bs-dropdown-menu"]
      });
      /** @nocollapse */

      BsDropdownMenuDirective.ctorParameters = function () {
        return [{
          type: BsDropdownState
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BsDropdownMenuDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[bsDropdownMenu],[dropdownMenu]',
            exportAs: 'bs-dropdown-menu'
          }]
        }], function () {
          return [{
            type: BsDropdownState
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }];
        }, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var BsDropdownToggleDirective = /*#__PURE__*/function () {
        /**
         * @param {?} _changeDetectorRef
         * @param {?} _dropdown
         * @param {?} _element
         * @param {?} _renderer
         * @param {?} _state
         */
        function BsDropdownToggleDirective(_changeDetectorRef, _dropdown, _element, _renderer, _state) {
          var _this662 = this;

          _classCallCheck2(this, BsDropdownToggleDirective);

          this._changeDetectorRef = _changeDetectorRef;
          this._dropdown = _dropdown;
          this._element = _element;
          this._renderer = _renderer;
          this._state = _state;
          this.isDisabled = null;
          this._subscriptions = []; // sync is open value with state

          this._subscriptions.push(this._state.isOpenChange.subscribe(
          /**
          * @param {?} value
          * @return {?}
          */
          function (value) {
            _this662.isOpen = value;

            if (value) {
              _this662._documentClickListener = _this662._renderer.listen('document', 'click',
              /**
              * @param {?} event
              * @return {?}
              */
              function (event) {
                if (_this662._state.autoClose && event.button !== 2 && !_this662._element.nativeElement.contains(event.target) && !(_this662._state.insideClick && _this662._dropdown._contains(event))) {
                  _this662._state.toggleClick.emit(false);

                  _this662._changeDetectorRef.detectChanges();
                }
              });
              _this662._escKeyUpListener = _this662._renderer.listen(_this662._element.nativeElement, 'keyup.esc',
              /**
              * @return {?}
              */
              function () {
                if (_this662._state.autoClose) {
                  _this662._state.toggleClick.emit(false);

                  _this662._changeDetectorRef.detectChanges();
                }
              });
            } else {
              _this662._documentClickListener();

              _this662._escKeyUpListener();
            }
          })); // populate disabled state


          this._subscriptions.push(this._state.isDisabledChange.subscribe(
          /**
          * @param {?} value
          * @return {?}
          */
          function (value) {
            return _this662.isDisabled = value || null;
          }));
        }
        /**
         * @return {?}
         */


        _createClass2(BsDropdownToggleDirective, [{
          key: "onClick",
          value: function onClick() {
            if (this.isDisabled) {
              return;
            }

            this._state.toggleClick.emit(true);
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            if (this._documentClickListener) {
              this._documentClickListener();
            }

            if (this._escKeyUpListener) {
              this._escKeyUpListener();
            }

            var _iterator61 = _createForOfIteratorHelper(this._subscriptions),
                _step60;

            try {
              for (_iterator61.s(); !(_step60 = _iterator61.n()).done;) {
                var sub = _step60.value;
                sub.unsubscribe();
              }
            } catch (err) {
              _iterator61.e(err);
            } finally {
              _iterator61.f();
            }
          }
        }]);

        return BsDropdownToggleDirective;
      }();

      BsDropdownToggleDirective.ɵfac = function BsDropdownToggleDirective_Factory(t) {
        return new (t || BsDropdownToggleDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](BsDropdownDirective), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](BsDropdownState));
      };

      BsDropdownToggleDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: BsDropdownToggleDirective,
        selectors: [["", "bsDropdownToggle", ""], ["", "dropdownToggle", ""]],
        hostVars: 3,
        hostBindings: function BsDropdownToggleDirective_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function BsDropdownToggleDirective_click_HostBindingHandler() {
              return ctx.onClick();
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-haspopup", true)("disabled", ctx.isDisabled)("aria-expanded", ctx.isOpen);
          }
        },
        exportAs: ["bs-dropdown-toggle"]
      });
      /** @nocollapse */

      BsDropdownToggleDirective.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }, {
          type: BsDropdownDirective
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }, {
          type: BsDropdownState
        }];
      };

      BsDropdownToggleDirective.propDecorators = {
        isDisabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['attr.disabled']
        }],
        isOpen: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['attr.aria-expanded']
        }],
        onClick: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
          args: ['click', []]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BsDropdownToggleDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[bsDropdownToggle],[dropdownToggle]',
            exportAs: 'bs-dropdown-toggle',
            host: {
              '[attr.aria-haspopup]': 'true'
            }
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }, {
            type: BsDropdownDirective
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }, {
            type: BsDropdownState
          }];
        }, {
          isDisabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['attr.disabled']
          }],
          isOpen: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['attr.aria-expanded']
          }],

          /**
           * @return {?}
           */
          onClick: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
            args: ['click', []]
          }]
        });
      })();

      if (false) {}
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var BsDropdownModule = /*#__PURE__*/function () {
        function BsDropdownModule() {
          _classCallCheck2(this, BsDropdownModule);
        }

        _createClass2(BsDropdownModule, null, [{
          key: "forRoot",
          value: // tslint:disable-next-line:no-any

          /**
           * @param {?=} config
           * @return {?}
           */
          function forRoot(config) {
            return {
              ngModule: BsDropdownModule,
              providers: [ngx_bootstrap_component_loader__WEBPACK_IMPORTED_MODULE_2__["ComponentLoaderFactory"], ngx_bootstrap_positioning__WEBPACK_IMPORTED_MODULE_5__["PositioningService"], BsDropdownState, {
                provide: BsDropdownConfig,
                useValue: config ? config : {
                  autoClose: true,
                  insideClick: false
                }
              }]
            };
          }
        }]);

        return BsDropdownModule;
      }();

      BsDropdownModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: BsDropdownModule
      });
      BsDropdownModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function BsDropdownModule_Factory(t) {
          return new (t || BsDropdownModule)();
        }
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](BsDropdownModule, {
          declarations: [BsDropdownMenuDirective, BsDropdownToggleDirective, BsDropdownContainerComponent, BsDropdownDirective],
          exports: [BsDropdownMenuDirective, BsDropdownToggleDirective, BsDropdownDirective]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BsDropdownModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            declarations: [BsDropdownMenuDirective, BsDropdownToggleDirective, BsDropdownContainerComponent, BsDropdownDirective],
            exports: [BsDropdownMenuDirective, BsDropdownToggleDirective, BsDropdownDirective],
            entryComponents: [BsDropdownContainerComponent]
          }]
        }], null, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */
      //# sourceMappingURL=ngx-bootstrap-dropdown.js.map

      /***/

    },

    /***/
    "de4B":
    /*!**************************************************************!*\
      !*** ./node_modules/aws-sdk/lib/event-stream/parse-event.js ***!
      \**************************************************************/

    /*! no static exports found */

    /***/
    function de4B(module, exports, __webpack_require__) {
      var parseMessage = __webpack_require__(
      /*! ./parse-message */
      "4eZz").parseMessage;
      /**
       *
       * @param {*} parser
       * @param {Buffer} message
       * @param {*} shape
       * @api private
       */


      function parseEvent(parser, message, shape) {
        var parsedMessage = parseMessage(message); // check if message is an event or error

        var messageType = parsedMessage.headers[':message-type'];

        if (messageType) {
          if (messageType.value === 'error') {
            throw parseError(parsedMessage);
          } else if (messageType.value !== 'event') {
            // not sure how to parse non-events/non-errors, ignore for now
            return;
          }
        } // determine event type


        var eventType = parsedMessage.headers[':event-type']; // check that the event type is modeled

        var eventModel = shape.members[eventType.value];

        if (!eventModel) {
          return;
        }

        var result = {}; // check if an event payload exists

        var eventPayloadMemberName = eventModel.eventPayloadMemberName;

        if (eventPayloadMemberName) {
          var payloadShape = eventModel.members[eventPayloadMemberName]; // if the shape is binary, return the byte array

          if (payloadShape.type === 'binary') {
            result[eventPayloadMemberName] = parsedMessage.body;
          } else {
            result[eventPayloadMemberName] = parser.parse(parsedMessage.body.toString(), payloadShape);
          }
        } // read event headers


        var eventHeaderNames = eventModel.eventHeaderMemberNames;

        for (var i = 0; i < eventHeaderNames.length; i++) {
          var name = eventHeaderNames[i];

          if (parsedMessage.headers[name]) {
            // parse the header!
            result[name] = eventModel.members[name].toType(parsedMessage.headers[name].value);
          }
        }

        var output = {};
        output[eventType.value] = result;
        return output;
      }

      function parseError(message) {
        var errorCode = message.headers[':error-code'];
        var errorMessage = message.headers[':error-message'];
        var error = new Error(errorMessage.value || errorMessage);
        error.code = error.name = errorCode.value || errorCode;
        return error;
      }
      /**
       * @api private
       */


      module.exports = {
        parseEvent: parseEvent
      };
      /***/
    },

    /***/
    "dkDA":
    /*!**********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/materialize.js ***!
      \**********************************************************************/

    /*! exports provided: materialize */

    /***/
    function dkDA(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "materialize", function () {
        return materialize;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");
      /* harmony import */


      var _Notification__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../Notification */
      "WMd4");

      function materialize() {
        return function materializeOperatorFunction(source) {
          return source.lift(new MaterializeOperator());
        };
      }

      var MaterializeOperator = /*#__PURE__*/function () {
        function MaterializeOperator() {
          _classCallCheck2(this, MaterializeOperator);
        }

        _createClass2(MaterializeOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new MaterializeSubscriber(subscriber));
          }
        }]);

        return MaterializeOperator;
      }();

      var MaterializeSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_32) {
        _inherits2(MaterializeSubscriber, _Subscriber__WEBPACK_32);

        var _super288 = _createSuper(MaterializeSubscriber);

        function MaterializeSubscriber(destination) {
          _classCallCheck2(this, MaterializeSubscriber);

          return _super288.call(this, destination);
        }

        _createClass2(MaterializeSubscriber, [{
          key: "_next",
          value: function _next(value) {
            this.destination.next(_Notification__WEBPACK_IMPORTED_MODULE_1__["Notification"].createNext(value));
          }
        }, {
          key: "_error",
          value: function _error(err) {
            var destination = this.destination;
            destination.next(_Notification__WEBPACK_IMPORTED_MODULE_1__["Notification"].createError(err));
            destination.complete();
          }
        }, {
          key: "_complete",
          value: function _complete() {
            var destination = this.destination;
            destination.next(_Notification__WEBPACK_IMPORTED_MODULE_1__["Notification"].createComplete());
            destination.complete();
          }
        }]);

        return MaterializeSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=materialize.js.map

      /***/

    },

    /***/
    "e+ae":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/sk.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function eAe(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Slovak [sk]
      //! author : Martin Minka : https://github.com/k2s
      //! based on work of petrbela : https://github.com/petrbela
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),
            monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');

        function plural(n) {
          return n > 1 && n < 5;
        }

        function translate(number, withoutSuffix, key, isFuture) {
          var result = number + ' ';

          switch (key) {
            case 's':
              // a few seconds / in a few seconds / a few seconds ago
              return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami';

            case 'ss':
              // 9 seconds / in 9 seconds / 9 seconds ago
              if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'sekundy' : 'sekúnd');
              } else {
                return result + 'sekundami';
              }

            case 'm':
              // a minute / in a minute / a minute ago
              return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou';

            case 'mm':
              // 9 minutes / in 9 minutes / 9 minutes ago
              if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'minúty' : 'minút');
              } else {
                return result + 'minútami';
              }

            case 'h':
              // an hour / in an hour / an hour ago
              return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';

            case 'hh':
              // 9 hours / in 9 hours / 9 hours ago
              if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'hodiny' : 'hodín');
              } else {
                return result + 'hodinami';
              }

            case 'd':
              // a day / in a day / a day ago
              return withoutSuffix || isFuture ? 'deň' : 'dňom';

            case 'dd':
              // 9 days / in 9 days / 9 days ago
              if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'dni' : 'dní');
              } else {
                return result + 'dňami';
              }

            case 'M':
              // a month / in a month / a month ago
              return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';

            case 'MM':
              // 9 months / in 9 months / 9 months ago
              if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'mesiace' : 'mesiacov');
              } else {
                return result + 'mesiacmi';
              }

            case 'y':
              // a year / in a year / a year ago
              return withoutSuffix || isFuture ? 'rok' : 'rokom';

            case 'yy':
              // 9 years / in 9 years / 9 years ago
              if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'roky' : 'rokov');
              } else {
                return result + 'rokmi';
              }

          }
        }

        var sk = moment.defineLocale('sk', {
          months: months,
          monthsShort: monthsShort,
          weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),
          weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'),
          weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'),
          longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd D. MMMM YYYY H:mm'
          },
          calendar: {
            sameDay: '[dnes o] LT',
            nextDay: '[zajtra o] LT',
            nextWeek: function nextWeek() {
              switch (this.day()) {
                case 0:
                  return '[v nedeľu o] LT';

                case 1:
                case 2:
                  return '[v] dddd [o] LT';

                case 3:
                  return '[v stredu o] LT';

                case 4:
                  return '[vo štvrtok o] LT';

                case 5:
                  return '[v piatok o] LT';

                case 6:
                  return '[v sobotu o] LT';
              }
            },
            lastDay: '[včera o] LT',
            lastWeek: function lastWeek() {
              switch (this.day()) {
                case 0:
                  return '[minulú nedeľu o] LT';

                case 1:
                case 2:
                  return '[minulý] dddd [o] LT';

                case 3:
                  return '[minulú stredu o] LT';

                case 4:
                case 5:
                  return '[minulý] dddd [o] LT';

                case 6:
                  return '[minulú sobotu o] LT';
              }
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: 'za %s',
            past: 'pred %s',
            s: translate,
            ss: translate,
            m: translate,
            mm: translate,
            h: translate,
            hh: translate,
            d: translate,
            dd: translate,
            M: translate,
            MM: translate,
            y: translate,
            yy: translate
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return sk;
      });
      /***/

    },

    /***/
    "e/mZ":
    /*!***********************************************************************************************************!*\
      !*** ./node_modules/angular2-multiselect-dropdown/__ivy_ngcc__/fesm2015/angular2-multiselect-dropdown.js ***!
      \***********************************************************************************************************/

    /*! exports provided: AngularMultiSelect, AngularMultiSelectModule, ClickOutsideDirective, Item, ListFilterPipe, TemplateRenderer, ɵa, ɵb, ɵc, ɵd, ɵe, ɵf, ɵg, ɵh, ɵi, ɵj, ɵk, ɵm */

    /***/
    function eMZ(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AngularMultiSelect", function () {
        return AngularMultiSelect;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AngularMultiSelectModule", function () {
        return AngularMultiSelectModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ClickOutsideDirective", function () {
        return ClickOutsideDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Item", function () {
        return Item;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ListFilterPipe", function () {
        return ListFilterPipe;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TemplateRenderer", function () {
        return TemplateRenderer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵa", function () {
        return DROPDOWN_CONTROL_VALUE_ACCESSOR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵb", function () {
        return DROPDOWN_CONTROL_VALIDATION;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵc", function () {
        return ScrollDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵd", function () {
        return styleDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵe", function () {
        return setPosition;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵf", function () {
        return Badge;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵg", function () {
        return Search;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵh", function () {
        return CIcon;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵi", function () {
        return VIRTUAL_SCROLLER_DEFAULT_OPTIONS_FACTORY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵj", function () {
        return VirtualScrollerComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵk", function () {
        return VirtualScrollerModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵm", function () {
        return DataService;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_forms__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/forms */
      "3Pt+");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var _tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @tweenjs/tween.js */
      "aCrv");
      /* harmony import */


      var _tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_4__);
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      function CIcon__svg_svg_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnamespaceSVG"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "svg", 4);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "g");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](2, "path", 5);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }
      }

      function CIcon__svg_svg_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnamespaceSVG"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "svg", 6);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "g");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "g", 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "g");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](4, "path", 8);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }
      }

      function CIcon__svg_svg_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnamespaceSVG"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "svg", 6);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "g");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "g", 9);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "g");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](4, "path", 10);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }
      }

      function CIcon__svg_svg_3_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnamespaceSVG"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "svg", 11);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "g");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "g");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "g", 12);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](4, "g");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](5, "path", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }
      }

      function CIcon__svg_svg_4_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnamespaceSVG"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "svg", 14);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "g");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](2, "path", 15);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }
      }

      var _c0 = ["header"];
      var _c1 = ["container"];
      var _c2 = ["content"];
      var _c3 = ["invisiblePadding"];
      var _c4 = ["*"];
      var _c5 = ["searchInput"];
      var _c6 = ["selectedList"];
      var _c7 = ["dropdownList"];
      var _c8 = ["cuppaDropdown"];

      function AngularMultiSelect_span_5_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r2.settings.text);
        }
      }

      function AngularMultiSelect_span_6_span_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var item_r29 = ctx.$implicit;

          var ctx_r28 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"](" ", item_r29[ctx_r28.settings.labelKey], " ");
        }
      }

      function AngularMultiSelect_span_6_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, AngularMultiSelect_span_6_span_1_Template, 2, 1, "span", 25);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx_r3.selectedItems)("ngForTrackBy", ctx_r3.trackByFn.bind(ctx_r3));
        }
      }

      function AngularMultiSelect_span_7_div_1_span_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 32);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var item_r32 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r34 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](item_r32[ctx_r34.settings.labelKey]);
        }
      }

      function AngularMultiSelect_span_7_div_1_span_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 32);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "c-templateRenderer", 33);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var item_r32 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r35 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("data", ctx_r35.badgeTempl)("item", item_r32);
        }
      }

      function AngularMultiSelect_span_7_div_1_Template(rf, ctx) {
        if (rf & 1) {
          var _r39 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 28);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, AngularMultiSelect_span_7_div_1_span_1_Template, 2, 1, "span", 29);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, AngularMultiSelect_span_7_div_1_span_2_Template, 2, 2, "span", 29);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "span", 30);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function AngularMultiSelect_span_7_div_1_Template_span_click_3_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r39);

            var item_r32 = ctx.$implicit;
            var k_r33 = ctx.index;

            var ctx_r38 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            ctx_r38.onItemClick(item_r32, k_r33, $event);
            return $event.stopPropagation();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](4, "c-icon", 31);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r31 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx_r31.badgeTempl);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r31.badgeTempl);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("name", "remove");
        }
      }

      function AngularMultiSelect_span_7_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 26);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, AngularMultiSelect_span_7_div_1_Template, 5, 3, "div", 27);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx_r4.selectedItems)("ngForTrackBy", ctx_r4.trackByFn.bind(ctx_r4));
        }
      }

      function AngularMultiSelect_div_8_div_1_span_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 32);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var item_r41 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r43 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](item_r41[ctx_r43.settings.labelKey]);
        }
      }

      function AngularMultiSelect_div_8_div_1_span_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 32);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "c-templateRenderer", 33);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var item_r41 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r44 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("data", ctx_r44.badgeTempl)("item", item_r41);
        }
      }

      function AngularMultiSelect_div_8_div_1_Template(rf, ctx) {
        if (rf & 1) {
          var _r48 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 35);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, AngularMultiSelect_div_8_div_1_span_1_Template, 2, 1, "span", 29);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, AngularMultiSelect_div_8_div_1_span_2_Template, 2, 2, "span", 29);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "span", 30);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function AngularMultiSelect_div_8_div_1_Template_span_click_3_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r48);

            var item_r41 = ctx.$implicit;
            var k_r42 = ctx.index;

            var ctx_r47 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            ctx_r47.onItemClick(item_r41, k_r42, $event);
            return $event.stopPropagation();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](4, "c-icon", 31);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var k_r42 = ctx.index;

          var ctx_r40 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("hidden", k_r42 > ctx_r40.settings.badgeShowLimit - 1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx_r40.badgeTempl);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r40.badgeTempl);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("name", "remove");
        }
      }

      function AngularMultiSelect_div_8_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 26);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, AngularMultiSelect_div_8_div_1_Template, 5, 4, "div", 34);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx_r5.selectedItems)("ngForTrackBy", ctx_r5.trackByFn.bind(ctx_r5));
        }
      }

      function AngularMultiSelect_span_9_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 36);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"]("+", (ctx_r6.selectedItems == null ? null : ctx_r6.selectedItems.length) - ctx_r6.settings.badgeShowLimit, "");
        }
      }

      function AngularMultiSelect_span_10_Template(rf, ctx) {
        if (rf & 1) {
          var _r50 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 37);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function AngularMultiSelect_span_10_Template_span_click_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r50);

            var ctx_r49 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            ctx_r49.clearSelection($event);
            return $event.stopPropagation();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "c-icon", 31);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("name", "remove");
        }
      }

      function AngularMultiSelect_span_11_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 38);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "c-icon", 31);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("name", "angle-down");
        }
      }

      function AngularMultiSelect_span_12_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 39);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "c-icon", 31);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("name", "angle-up");
        }
      }

      function AngularMultiSelect_div_18_input_1_Template(rf, ctx) {
        if (rf & 1) {
          var _r53 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "input", 44);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function AngularMultiSelect_div_18_input_1_Template_input_change_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r53);

            var ctx_r52 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r52.toggleSelectAll($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r51 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("checked", ctx_r51.isSelectAll)("disabled", ctx_r51.settings.limitSelection == (ctx_r51.selectedItems == null ? null : ctx_r51.selectedItems.length))("id", ctx_r51.id);
        }
      }

      function AngularMultiSelect_div_18_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 40);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, AngularMultiSelect_div_18_input_1_Template, 1, 3, "input", 41);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "label", 42);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "span", 43);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](4);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "span", 43);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](6);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r11 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r11.settings.showCheckbox);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("for", ctx_r11.id);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("hidden", ctx_r11.isSelectAll);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r11.settings.selectAllText);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("hidden", !ctx_r11.isSelectAll);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r11.settings.unSelectAllText);
        }
      }

      function AngularMultiSelect_img_19_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "img", 45);
        }
      }

      function AngularMultiSelect_div_20_span_3_Template(rf, ctx) {
        if (rf & 1) {
          var _r61 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 52);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function AngularMultiSelect_div_20_span_3_Template_span_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r61);

            var ctx_r60 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r60.clearSearch();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "c-icon", 31);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r54 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("hidden", ctx_r54.filter == undefined || (ctx_r54.filter == null ? null : ctx_r54.filter.length) == 0);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("name", "clear");
        }
      }

      function AngularMultiSelect_div_20_span_4_Template(rf, ctx) {
        if (rf & 1) {
          var _r63 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 52);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function AngularMultiSelect_div_20_span_4_Template_span_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r63);

            var ctx_r62 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r62.resetInfiniteSearch();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "c-icon", 31);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r55 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("hidden", ctx_r55.filter == undefined || (ctx_r55.filter == null ? null : ctx_r55.filter.length) == 0);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("name", "clear");
        }
      }

      function AngularMultiSelect_div_20_input_5_Template(rf, ctx) {
        if (rf & 1) {
          var _r66 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "input", 53, 54);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("ngModelChange", function AngularMultiSelect_div_20_input_5_Template_input_ngModelChange_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r66);

            var ctx_r65 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r65.filter = $event;
          })("keyup", function AngularMultiSelect_div_20_input_5_Template_input_keyup_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r66);

            var ctx_r67 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r67.filterGroupedList();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r56 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("placeholder", ctx_r56.settings.searchPlaceholderText)("ngModel", ctx_r56.filter);
        }
      }

      function AngularMultiSelect_div_20_input_6_Template(rf, ctx) {
        if (rf & 1) {
          var _r70 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "input", 55, 54);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("ngModelChange", function AngularMultiSelect_div_20_input_6_Template_input_ngModelChange_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r70);

            var ctx_r69 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r69.filter = $event;
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r57 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("placeholder", ctx_r57.settings.searchPlaceholderText)("ngModel", ctx_r57.filter);
        }
      }

      function AngularMultiSelect_div_20_input_7_Template(rf, ctx) {
        if (rf & 1) {
          var _r73 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "input", 53, 54);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("ngModelChange", function AngularMultiSelect_div_20_input_7_Template_input_ngModelChange_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r73);

            var ctx_r72 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r72.filter = $event;
          })("keyup", function AngularMultiSelect_div_20_input_7_Template_input_keyup_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r73);

            var ctx_r74 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r74.searchTerm$.next($event.target.value);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r58 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("placeholder", ctx_r58.settings.searchPlaceholderText)("ngModel", ctx_r58.filter);
        }
      }

      function AngularMultiSelect_div_20_c_templateRenderer_8_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "c-templateRenderer", 33);
        }

        if (rf & 2) {
          var ctx_r59 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("data", ctx_r59.searchTempl)("item", ctx_r59.item);
        }
      }

      function AngularMultiSelect_div_20_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 46);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "span", 47);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](2, "c-icon", 31);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, AngularMultiSelect_div_20_span_3_Template, 2, 2, "span", 48);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](4, AngularMultiSelect_div_20_span_4_Template, 2, 2, "span", 48);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](5, AngularMultiSelect_div_20_input_5_Template, 2, 2, "input", 49);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](6, AngularMultiSelect_div_20_input_6_Template, 2, 2, "input", 50);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](7, AngularMultiSelect_div_20_input_7_Template, 2, 2, "input", 49);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](8, AngularMultiSelect_div_20_c_templateRenderer_8_Template, 1, 2, "c-templateRenderer", 51);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r13 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("name", "search");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx_r13.settings.lazyLoading);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r13.settings.lazyLoading);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r13.settings.groupBy && !ctx_r13.settings.lazyLoading && !ctx_r13.searchTempl);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx_r13.settings.groupBy && !ctx_r13.settings.lazyLoading && !ctx_r13.searchTempl);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r13.settings.lazyLoading && !ctx_r13.searchTempl);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r13.searchTempl);
        }
      }

      function AngularMultiSelect_div_21_div_1_Template(rf, ctx) {
        if (rf & 1) {
          var _r78 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 57);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function AngularMultiSelect_div_21_div_1_Template_div_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r78);

            var ctx_r77 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r77.toggleFilterSelectAll();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "input", 58);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "label");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "span", 43);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](4);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "span", 43);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](6);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r75 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("checked", ctx_r75.isFilterSelectAll)("disabled", ctx_r75.settings.limitSelection == (ctx_r75.selectedItems == null ? null : ctx_r75.selectedItems.length));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("hidden", ctx_r75.isFilterSelectAll);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r75.settings.filterSelectAllText);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("hidden", !ctx_r75.isFilterSelectAll);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r75.settings.filterUnSelectAllText);
        }
      }

      function AngularMultiSelect_div_21_div_2_Template(rf, ctx) {
        if (rf & 1) {
          var _r80 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 57);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function AngularMultiSelect_div_21_div_2_Template_div_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r80);

            var ctx_r79 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r79.toggleFilterSelectAll();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "input", 59);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "label");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "span", 43);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](4);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "span", 43);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](6);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r76 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("checked", ctx_r76.isFilterSelectAll && (ctx_r76.filter == null ? null : ctx_r76.filter.length) > 0)("disabled", ctx_r76.settings.limitSelection == (ctx_r76.selectedItems == null ? null : ctx_r76.selectedItems.length));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("hidden", ctx_r76.isFilterSelectAll);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r76.settings.filterSelectAllText);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("hidden", !ctx_r76.isFilterSelectAll);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r76.settings.filterUnSelectAllText);
        }
      }

      function AngularMultiSelect_div_21_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 20);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, AngularMultiSelect_div_21_div_1_Template, 7, 6, "div", 56);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, AngularMultiSelect_div_21_div_2_Template, 7, 6, "div", 56);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r14 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx_r14.settings.groupBy && (ctx_r14.filter == null ? null : ctx_r14.filter.length) > 0 && ctx_r14.filterLength > 0 && !ctx_r14.settings.singleSelection);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r14.settings.groupBy && (ctx_r14.filter == null ? null : ctx_r14.filter.length) > 0 && (ctx_r14.groupedData == null ? null : ctx_r14.groupedData.length) > 0 && !ctx_r14.settings.singleSelection);
        }
      }

      function AngularMultiSelect_div_22_div_1_Template(rf, ctx) {
        if (rf & 1) {
          var _r83 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 57);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function AngularMultiSelect_div_22_div_1_Template_div_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r83);

            var ctx_r82 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r82.toggleInfiniteFilterSelectAll();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "input", 59);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "label");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "span", 43);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](4);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "span", 43);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](6);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r81 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("checked", ctx_r81.isInfiniteFilterSelectAll)("disabled", ctx_r81.settings.limitSelection == (ctx_r81.selectedItems == null ? null : ctx_r81.selectedItems.length));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("hidden", ctx_r81.isInfiniteFilterSelectAll);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r81.settings.filterSelectAllText);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("hidden", !ctx_r81.isInfiniteFilterSelectAll);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r81.settings.filterUnSelectAllText);
        }
      }

      function AngularMultiSelect_div_22_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 20);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, AngularMultiSelect_div_22_div_1_Template, 7, 6, "div", 56);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r15 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", (ctx_r15.filter == null ? null : ctx_r15.filter.length) > 0 && ctx_r15.infiniteFilterLength > 0);
        }
      }

      function AngularMultiSelect_label_24_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "label", 60);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r16 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("hidden", ctx_r16.filter == undefined || (ctx_r16.filter == null ? null : ctx_r16.filter.length) == 0);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r16.settings.noDataLabel);
        }
      }

      function AngularMultiSelect_label_25_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "label", 60);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r17 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("hidden", ctx_r17.filter == undefined || (ctx_r17.filter == null ? null : ctx_r17.filter.length) == 0);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r17.settings.noDataLabel);
        }
      }

      function AngularMultiSelect_div_26_Template(rf, ctx) {
        if (rf & 1) {
          var _r85 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 61);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "button", 62);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function AngularMultiSelect_div_26_Template_button_click_1_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r85);

            var ctx_r84 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r84.addFilterNewItem();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r18 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("hidden", ctx_r18.filter == undefined || (ctx_r18.filter == null ? null : ctx_r18.filter.length) == 0);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r18.settings.addNewButtonText);
        }
      }

      function AngularMultiSelect_div_27_li_2_input_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "input", 59);
        }

        if (rf & 2) {
          var item_r87 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r89 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("checked", ctx_r89.isSelected(item_r87))("disabled", ctx_r89.settings.limitSelection == (ctx_r89.selectedItems == null ? null : ctx_r89.selectedItems.length) && !ctx_r89.isSelected(item_r87) || item_r87.disabled);
        }
      }

      var _c9 = function _c9(a0) {
        return {
          "selected-item": a0
        };
      };

      function AngularMultiSelect_div_27_li_2_Template(rf, ctx) {
        if (rf & 1) {
          var _r92 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li", 66);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function AngularMultiSelect_div_27_li_2_Template_li_click_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r92);

            var item_r87 = ctx.$implicit;
            var i_r88 = ctx.index;

            var ctx_r91 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r91.onItemClick(item_r87, i_r88, $event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, AngularMultiSelect_div_27_li_2_input_1_Template, 1, 2, "input", 67);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "label");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var item_r87 = ctx.$implicit;

          var ctx_r86 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](3, _c9, ctx_r86.isSelected(item_r87) == true));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r86.settings.showCheckbox);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](item_r87[ctx_r86.settings.labelKey]);
        }
      }

      function AngularMultiSelect_div_27_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 63);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "ul", 64);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, AngularMultiSelect_div_27_li_2_Template, 4, 5, "li", 65);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpipe"](3, "listFilter");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r19 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("max-height", ctx_r19.settings.maxHeight + "px");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpipeBind3"](3, 3, ctx_r19.data, ctx_r19.filter, ctx_r19.settings.searchBy));
        }
      }

      function AngularMultiSelect_div_28_li_3_input_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "input", 71);
        }

        if (rf & 2) {
          var item_r95 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r97 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("checked", ctx_r97.isSelected(item_r95))("disabled", ctx_r97.settings.limitSelection == (ctx_r97.selectedItems == null ? null : ctx_r97.selectedItems.length) && !ctx_r97.isSelected(item_r95) || item_r95.disabled);
        }
      }

      function AngularMultiSelect_div_28_li_3_Template(rf, ctx) {
        if (rf & 1) {
          var _r100 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li", 66);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function AngularMultiSelect_div_28_li_3_Template_li_click_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r100);

            var item_r95 = ctx.$implicit;
            var i_r96 = ctx.index;

            var ctx_r99 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r99.onItemClick(item_r95, i_r96, $event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, AngularMultiSelect_div_28_li_3_input_1_Template, 1, 2, "input", 70);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "label");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var item_r95 = ctx.$implicit;

          var ctx_r94 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](3, _c9, ctx_r94.isSelected(item_r95) == true));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r94.settings.showCheckbox);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](item_r95[ctx_r94.settings.labelKey]);
        }
      }

      var _c10 = function _c10(a0) {
        return {
          "height": a0
        };
      };

      function AngularMultiSelect_div_28_Template(rf, ctx) {
        if (rf & 1) {
          var _r102 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 63);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "ul", 68, 69);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("vsStart", function AngularMultiSelect_div_28_Template_ul_vsStart_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r102);

            var ctx_r101 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r101.onScrollEnd($event);
          })("vsEnd", function AngularMultiSelect_div_28_Template_ul_vsEnd_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r102);

            var ctx_r103 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r103.onScrollEnd($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, AngularMultiSelect_div_28_li_3_Template, 4, 5, "li", 65);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var _r93 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](2);

          var ctx_r20 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("max-height", ctx_r20.settings.maxHeight + "px");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("enableUnequalChildrenSizes", ctx_r20.randomSize)("items", ctx_r20.virtualdata)("ngStyle", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](6, _c10, ctx_r20.settings.maxHeight + "px"));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", _r93.viewPortItems);
        }
      }

      function AngularMultiSelect_div_29_li_2_input_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "input", 71);
        }

        if (rf & 2) {
          var item_r105 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r107 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("checked", ctx_r107.isSelected(item_r105))("disabled", ctx_r107.settings.limitSelection == (ctx_r107.selectedItems == null ? null : ctx_r107.selectedItems.length) && !ctx_r107.isSelected(item_r105) || item_r105.disabled);
        }
      }

      function AngularMultiSelect_div_29_li_2_Template(rf, ctx) {
        if (rf & 1) {
          var _r110 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li", 66);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function AngularMultiSelect_div_29_li_2_Template_li_click_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r110);

            var item_r105 = ctx.$implicit;
            var i_r106 = ctx.index;

            var ctx_r109 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r109.onItemClick(item_r105, i_r106, $event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, AngularMultiSelect_div_29_li_2_input_1_Template, 1, 2, "input", 70);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](2, "label");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](3, "c-templateRenderer", 33);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var item_r105 = ctx.$implicit;

          var ctx_r104 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](4, _c9, ctx_r104.isSelected(item_r105) == true));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r104.settings.showCheckbox);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("data", ctx_r104.itemTempl)("item", item_r105);
        }
      }

      function AngularMultiSelect_div_29_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 63);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "ul", 64);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, AngularMultiSelect_div_29_li_2_Template, 4, 6, "li", 65);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpipe"](3, "listFilter");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r21 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("max-height", ctx_r21.settings.maxHeight + "px");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpipeBind3"](3, 3, ctx_r21.data, ctx_r21.filter, ctx_r21.settings.searchBy));
        }
      }

      function AngularMultiSelect_div_30_li_3_input_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "input", 71);
        }

        if (rf & 2) {
          var item_r113 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r115 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("checked", ctx_r115.isSelected(item_r113))("disabled", ctx_r115.settings.limitSelection == (ctx_r115.selectedItems == null ? null : ctx_r115.selectedItems.length) && !ctx_r115.isSelected(item_r113) || item_r113.disabled);
        }
      }

      function AngularMultiSelect_div_30_li_3_Template(rf, ctx) {
        if (rf & 1) {
          var _r118 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li", 66);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function AngularMultiSelect_div_30_li_3_Template_li_click_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r118);

            var item_r113 = ctx.$implicit;
            var i_r114 = ctx.index;

            var ctx_r117 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r117.onItemClick(item_r113, i_r114, $event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, AngularMultiSelect_div_30_li_3_input_1_Template, 1, 2, "input", 70);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](2, "label");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](3, "c-templateRenderer", 33);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var item_r113 = ctx.$implicit;

          var ctx_r112 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](4, _c9, ctx_r112.isSelected(item_r113) == true));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r112.settings.showCheckbox);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("data", ctx_r112.itemTempl)("item", item_r113);
        }
      }

      function AngularMultiSelect_div_30_Template(rf, ctx) {
        if (rf & 1) {
          var _r120 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 63);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "ul", 68, 72);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("vsStart", function AngularMultiSelect_div_30_Template_ul_vsStart_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r120);

            var ctx_r119 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r119.onScrollEnd($event);
          })("vsEnd", function AngularMultiSelect_div_30_Template_ul_vsEnd_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r120);

            var ctx_r121 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r121.onScrollEnd($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, AngularMultiSelect_div_30_li_3_Template, 4, 6, "li", 65);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var _r111 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](2);

          var ctx_r22 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("max-height", ctx_r22.settings.maxHeight + "px");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("enableUnequalChildrenSizes", ctx_r22.randomSize)("items", ctx_r22.virtualdata)("ngStyle", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](6, _c10, ctx_r22.settings.maxHeight + "px"));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", _r111.viewPortItems);
        }
      }

      function AngularMultiSelect_div_31_span_3_li_1_input_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "input", 71);
        }

        if (rf & 2) {
          var item_r124 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2).$implicit;

          var ctx_r128 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("checked", ctx_r128.isSelected(item_r124))("disabled", ctx_r128.settings.limitSelection == (ctx_r128.selectedItems == null ? null : ctx_r128.selectedItems.length) && !ctx_r128.isSelected(item_r124) || item_r124.disabled);
        }
      }

      var _c11 = function _c11(a0, a1) {
        return {
          "grp-title": a0,
          "grp-item": a1
        };
      };

      function AngularMultiSelect_div_31_span_3_li_1_Template(rf, ctx) {
        if (rf & 1) {
          var _r132 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li", 66);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function AngularMultiSelect_div_31_span_3_li_1_Template_li_click_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r132);

            var ctx_r131 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            var item_r124 = ctx_r131.$implicit;
            var i_r125 = ctx_r131.index;

            var ctx_r130 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r130.onItemClick(item_r124, i_r125, $event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, AngularMultiSelect_div_31_span_3_li_1_input_1_Template, 1, 2, "input", 70);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](2, "label");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](3, "c-templateRenderer", 33);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var item_r124 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r126 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction2"](4, _c11, item_r124.grpTitle, !item_r124.grpTitle && !ctx_r126.settings.singleSelection));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r126.settings.showCheckbox && !ctx_r126.settings.singleSelection);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("data", ctx_r126.itemTempl)("item", item_r124);
        }
      }

      function AngularMultiSelect_div_31_span_3_li_2_input_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "input", 71);
        }

        if (rf & 2) {
          var item_r124 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2).$implicit;

          var ctx_r134 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("checked", ctx_r134.isSelected(item_r124))("disabled", ctx_r134.settings.limitSelection == (ctx_r134.selectedItems == null ? null : ctx_r134.selectedItems.length) && !ctx_r134.isSelected(item_r124) || item_r124.disabled);
        }
      }

      function AngularMultiSelect_div_31_span_3_li_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li", 77);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, AngularMultiSelect_div_31_span_3_li_2_input_1_Template, 1, 2, "input", 70);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](2, "label");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](3, "c-templateRenderer", 33);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var item_r124 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r127 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction2"](4, _c11, item_r124.grpTitle, !item_r124.grpTitle && !ctx_r127.settings.singleSelection));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r127.settings.showCheckbox);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("data", ctx_r127.itemTempl)("item", item_r124);
        }
      }

      function AngularMultiSelect_div_31_span_3_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, AngularMultiSelect_div_31_span_3_li_1_Template, 4, 7, "li", 75);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, AngularMultiSelect_div_31_span_3_li_2_Template, 4, 7, "li", 76);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var item_r124 = ctx.$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !item_r124.grpTitle);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", item_r124.grpTitle);
        }
      }

      function AngularMultiSelect_div_31_Template(rf, ctx) {
        if (rf & 1) {
          var _r138 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 63);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "ul", 68, 73);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("vsStart", function AngularMultiSelect_div_31_Template_ul_vsStart_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r138);

            var ctx_r137 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r137.onScrollEnd($event);
          })("vsEnd", function AngularMultiSelect_div_31_Template_ul_vsEnd_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r138);

            var ctx_r139 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r139.onScrollEnd($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, AngularMultiSelect_div_31_span_3_Template, 3, 2, "span", 74);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var _r122 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](2);

          var ctx_r23 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("max-height", ctx_r23.settings.maxHeight + "px");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("enableUnequalChildrenSizes", ctx_r23.randomSize)("items", ctx_r23.virtualdata)("ngStyle", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](6, _c10, ctx_r23.settings.maxHeight + "px"));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", _r122.viewPortItems);
        }
      }

      function AngularMultiSelect_div_32_span_2_input_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "input", 71);
        }

        if (rf & 2) {
          var item_r141 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r143 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("checked", item_r141.selected)("disabled", ctx_r143.settings.limitSelection == (ctx_r143.selectedItems == null ? null : ctx_r143.selectedItems.length) && !ctx_r143.isSelected(item_r141) || item_r141.disabled);
        }
      }

      function AngularMultiSelect_div_32_span_2_span_6_input_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "input", 71);
        }

        if (rf & 2) {
          var val_r146 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r148 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("checked", ctx_r148.isSelected(val_r146))("disabled", ctx_r148.settings.limitSelection == (ctx_r148.selectedItems == null ? null : ctx_r148.selectedItems.length) && !ctx_r148.isSelected(val_r146) || val_r146.disabled);
        }
      }

      function AngularMultiSelect_div_32_span_2_span_6_Template(rf, ctx) {
        if (rf & 1) {
          var _r151 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "li", 66);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function AngularMultiSelect_div_32_span_2_span_6_Template_li_click_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r151);

            var val_r146 = ctx.$implicit;
            var j_r147 = ctx.index;

            var ctx_r150 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](3);

            ctx_r150.onItemClick(val_r146, j_r147, $event);
            return $event.stopPropagation();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, AngularMultiSelect_div_32_span_2_span_6_input_2_Template, 1, 2, "input", 70);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](3, "label");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](4, "c-templateRenderer", 33);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var val_r146 = ctx.$implicit;

          var ctx_r144 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction2"](4, _c11, val_r146.grpTitle, !val_r146.grpTitle && !ctx_r144.settings.singleSelection));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r144.settings.showCheckbox);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("data", ctx_r144.itemTempl)("item", val_r146);
        }
      }

      function AngularMultiSelect_div_32_span_2_Template(rf, ctx) {
        if (rf & 1) {
          var _r153 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "li", 66);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function AngularMultiSelect_div_32_span_2_Template_li_click_1_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r153);

            var item_r141 = ctx.$implicit;

            var ctx_r152 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r152.selectGroup(item_r141);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, AngularMultiSelect_div_32_span_2_input_2_Template, 1, 2, "input", 70);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "label");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](4);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "ul", 64);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](6, AngularMultiSelect_div_32_span_2_span_6_Template, 5, 7, "span", 74);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var item_r141 = ctx.$implicit;

          var ctx_r140 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction2"](4, _c11, item_r141.grpTitle, !item_r141.grpTitle && !ctx_r140.settings.singleSelection));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r140.settings.showCheckbox && !ctx_r140.settings.singleSelection);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](item_r141[ctx_r140.settings.labelKey]);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", item_r141.list);
        }
      }

      function AngularMultiSelect_div_32_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 63);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "ul", 64);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, AngularMultiSelect_div_32_span_2_Template, 7, 7, "span", 74);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r24 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("max-height", ctx_r24.settings.maxHeight + "px");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx_r24.groupedData);
        }
      }

      function AngularMultiSelect_div_33_span_4_li_1_input_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "input", 71);
        }

        if (rf & 2) {
          var item_r156 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2).$implicit;

          var ctx_r160 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("checked", ctx_r160.isSelected(item_r156))("disabled", ctx_r160.settings.limitSelection == (ctx_r160.selectedItems == null ? null : ctx_r160.selectedItems.length) && !ctx_r160.isSelected(item_r156) || item_r156.disabled);
        }
      }

      var _c12 = function _c12(a0, a1, a2) {
        return {
          "grp-title": a0,
          "grp-item": a1,
          "selected-item": a2
        };
      };

      function AngularMultiSelect_div_33_span_4_li_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li", 77);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, AngularMultiSelect_div_33_span_4_li_1_input_1_Template, 1, 2, "input", 70);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "label");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var item_r156 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r158 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction3"](3, _c12, item_r156.grpTitle, !item_r156.grpTitle && !ctx_r158.settings.singleSelection, ctx_r158.isSelected(item_r156) == true));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r158.settings.showCheckbox && !item_r156.grpTitle && !ctx_r158.settings.singleSelection);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](item_r156[ctx_r158.settings.labelKey]);
        }
      }

      function AngularMultiSelect_div_33_span_4_li_2_input_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "input", 71);
        }

        if (rf & 2) {
          var item_r156 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2).$implicit;

          var ctx_r163 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("checked", ctx_r163.isSelected(item_r156))("disabled", ctx_r163.settings.limitSelection == (ctx_r163.selectedItems == null ? null : ctx_r163.selectedItems.length) && !ctx_r163.isSelected(item_r156) || item_r156.disabled);
        }
      }

      function AngularMultiSelect_div_33_span_4_li_2_Template(rf, ctx) {
        if (rf & 1) {
          var _r167 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li", 66);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function AngularMultiSelect_div_33_span_4_li_2_Template_li_click_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r167);

            var ctx_r166 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            var item_r156 = ctx_r166.$implicit;
            var i_r157 = ctx_r166.index;

            var ctx_r165 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r165.onItemClick(item_r156, i_r157, $event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, AngularMultiSelect_div_33_span_4_li_2_input_1_Template, 1, 2, "input", 70);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "label");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var item_r156 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r159 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction3"](3, _c12, item_r156.grpTitle, !item_r156.grpTitle && !ctx_r159.settings.singleSelection, ctx_r159.isSelected(item_r156) == true));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r159.settings.showCheckbox && !item_r156.grpTitle);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](item_r156[ctx_r159.settings.labelKey]);
        }
      }

      function AngularMultiSelect_div_33_span_4_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, AngularMultiSelect_div_33_span_4_li_1_Template, 4, 7, "li", 76);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, AngularMultiSelect_div_33_span_4_li_2_Template, 4, 7, "li", 75);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var item_r156 = ctx.$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", item_r156.grpTitle);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !item_r156.grpTitle);
        }
      }

      function AngularMultiSelect_div_33_Template(rf, ctx) {
        if (rf & 1) {
          var _r170 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 63);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "virtual-scroller", 78);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("vsUpdate", function AngularMultiSelect_div_33_Template_virtual_scroller_vsUpdate_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r170);

            var ctx_r169 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r169.viewPortItems = $event;
          })("vsEnd", function AngularMultiSelect_div_33_Template_virtual_scroller_vsEnd_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r170);

            var ctx_r171 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r171.onScrollEnd($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "ul", 68, 79);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("vsStart", function AngularMultiSelect_div_33_Template_ul_vsStart_2_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r170);

            var ctx_r172 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r172.onScrollEnd($event);
          })("vsEnd", function AngularMultiSelect_div_33_Template_ul_vsEnd_2_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r170);

            var ctx_r173 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r173.onScrollEnd($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](4, AngularMultiSelect_div_33_span_4_Template, 3, 2, "span", 74);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var _r154 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](3);

          var ctx_r25 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("max-height", ctx_r25.settings.maxHeight + "px");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("items", ctx_r25.groupedData)("ngStyle", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](8, _c10, ctx_r25.settings.maxHeight + "px"));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("enableUnequalChildrenSizes", ctx_r25.randomSize)("items", ctx_r25.virtualdata)("ngStyle", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](10, _c10, ctx_r25.settings.maxHeight + "px"));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", _r154.viewPortItems);
        }
      }

      function AngularMultiSelect_div_34_span_2_input_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "input", 71);
        }

        if (rf & 2) {
          var item_r175 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r177 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("checked", item_r175.selected)("disabled", ctx_r177.settings.limitSelection == (ctx_r177.selectedItems == null ? null : ctx_r177.selectedItems.length) && !ctx_r177.isSelected(item_r175) || item_r175.disabled);
        }
      }

      function AngularMultiSelect_div_34_span_2_span_6_input_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "input", 71);
        }

        if (rf & 2) {
          var val_r180 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r182 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("checked", ctx_r182.isSelected(val_r180))("disabled", ctx_r182.settings.limitSelection == (ctx_r182.selectedItems == null ? null : ctx_r182.selectedItems.length) && !ctx_r182.isSelected(val_r180) || val_r180.disabled);
        }
      }

      var _c13 = function _c13(a0, a1, a2) {
        return {
          "selected-item": a0,
          "grp-title": a1,
          "grp-item": a2
        };
      };

      function AngularMultiSelect_div_34_span_2_span_6_Template(rf, ctx) {
        if (rf & 1) {
          var _r185 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "li", 66);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function AngularMultiSelect_div_34_span_2_span_6_Template_li_click_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r185);

            var val_r180 = ctx.$implicit;
            var j_r181 = ctx.index;

            var ctx_r184 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](3);

            ctx_r184.onItemClick(val_r180, j_r181, $event);
            return $event.stopPropagation();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, AngularMultiSelect_div_34_span_2_span_6_input_2_Template, 1, 2, "input", 70);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "label");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](4);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var val_r180 = ctx.$implicit;

          var ctx_r178 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction3"](3, _c13, ctx_r178.isSelected(val_r180) == true, val_r180.grpTitle, !val_r180.grpTitle && !ctx_r178.settings.singleSelection));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r178.settings.showCheckbox);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](val_r180[ctx_r178.settings.labelKey]);
        }
      }

      function AngularMultiSelect_div_34_span_2_Template(rf, ctx) {
        if (rf & 1) {
          var _r187 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "li", 66);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function AngularMultiSelect_div_34_span_2_Template_li_click_1_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r187);

            var item_r175 = ctx.$implicit;

            var ctx_r186 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r186.selectGroup(item_r175);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, AngularMultiSelect_div_34_span_2_input_2_Template, 1, 2, "input", 70);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "label");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](4);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "ul", 64);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](6, AngularMultiSelect_div_34_span_2_span_6_Template, 5, 7, "span", 74);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var item_r175 = ctx.$implicit;

          var ctx_r174 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction2"](4, _c11, item_r175.grpTitle, !item_r175.grpTitle && !ctx_r174.settings.singleSelection));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r174.settings.showCheckbox && !ctx_r174.settings.singleSelection);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](item_r175[ctx_r174.settings.labelKey]);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", item_r175.list);
        }
      }

      function AngularMultiSelect_div_34_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 63);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "ul", 64);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, AngularMultiSelect_div_34_span_2_Template, 7, 7, "span", 74);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r26 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("max-height", ctx_r26.settings.maxHeight + "px");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx_r26.groupedData);
        }
      }

      function AngularMultiSelect_h5_35_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "h5", 80);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r27 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r27.settings.noDataLabel);
        }
      }

      var _c14 = function _c14(a0) {
        return {
          "disabled": a0
        };
      };

      var _c15 = function _c15(a0, a1) {
        return {
          "arrow-up": a0,
          "arrow-down": a1
        };
      };

      var _c16 = function _c16(a0) {
        return {
          "single-select-mode": a0
        };
      };

      var MyException =
      /**
       * @param {?} status
       * @param {?} body
       */
      function MyException(status, body) {
        _classCallCheck2(this, MyException);

        this.status = status;
        this.body = body;
      };

      if (false) {}
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var ClickOutsideDirective = /*#__PURE__*/function () {
        /**
         * @param {?} _elementRef
         */
        function ClickOutsideDirective(_elementRef) {
          _classCallCheck2(this, ClickOutsideDirective);

          this._elementRef = _elementRef;
          this.clickOutside = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        }
        /**
         * @param {?} event
         * @param {?} targetElement
         * @return {?}
         */


        _createClass2(ClickOutsideDirective, [{
          key: "onClick",
          value: function onClick(event, targetElement) {
            if (!targetElement) {
              return;
            }
            /** @type {?} */


            var clickedInside = this._elementRef.nativeElement.contains(targetElement);

            if (!clickedInside) {
              this.clickOutside.emit(event);
            }
          }
        }]);

        return ClickOutsideDirective;
      }();

      ClickOutsideDirective.ɵfac = function ClickOutsideDirective_Factory(t) {
        return new (t || ClickOutsideDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]));
      };

      ClickOutsideDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: ClickOutsideDirective,
        selectors: [["", "clickOutside", ""]],
        hostBindings: function ClickOutsideDirective_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function ClickOutsideDirective_click_HostBindingHandler($event) {
              return ctx.onClick($event, $event.target);
            }, false, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵresolveDocument"])("touchstart", function ClickOutsideDirective_touchstart_HostBindingHandler($event) {
              return ctx.onClick($event, $event.target);
            }, false, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵresolveDocument"]);
          }
        },
        outputs: {
          clickOutside: "clickOutside"
        }
      });
      /** @nocollapse */

      ClickOutsideDirective.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }];
      };

      ClickOutsideDirective.propDecorators = {
        clickOutside: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onClick: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
          args: ['document:click', ['$event', '$event.target']]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
          args: ['document:touchstart', ['$event', '$event.target']]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ClickOutsideDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[clickOutside]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }];
        }, {
          clickOutside: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],

          /**
           * @param {?} event
           * @param {?} targetElement
           * @return {?}
           */
          onClick: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
            args: ['document:click', ['$event', '$event.target']]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
            args: ['document:touchstart', ['$event', '$event.target']]
          }]
        });
      })();

      if (false) {}

      var ScrollDirective = /*#__PURE__*/function () {
        /**
         * @param {?} _elementRef
         */
        function ScrollDirective(_elementRef) {
          _classCallCheck2(this, ScrollDirective);

          this._elementRef = _elementRef;
          this.scroll = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        }
        /**
         * @param {?} event
         * @param {?} targetElement
         * @return {?}
         */


        _createClass2(ScrollDirective, [{
          key: "onClick",
          value: function onClick(event, targetElement) {
            this.scroll.emit(event);
          }
        }]);

        return ScrollDirective;
      }();

      ScrollDirective.ɵfac = function ScrollDirective_Factory(t) {
        return new (t || ScrollDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]));
      };

      ScrollDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: ScrollDirective,
        selectors: [["", "scroll", ""]],
        hostBindings: function ScrollDirective_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("scroll", function ScrollDirective_scroll_HostBindingHandler($event) {
              return ctx.onClick($event);
            });
          }
        },
        outputs: {
          scroll: "scroll"
        }
      });
      /** @nocollapse */

      ScrollDirective.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }];
      };

      ScrollDirective.propDecorators = {
        scroll: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onClick: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
          args: ['scroll', ['$event']]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ScrollDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[scroll]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }];
        }, {
          scroll: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],

          /**
           * @param {?} event
           * @param {?} targetElement
           * @return {?}
           */
          onClick: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
            args: ['scroll', ['$event']]
          }]
        });
      })();

      if (false) {}

      var styleDirective = /*#__PURE__*/function () {
        /**
         * @param {?} el
         */
        function styleDirective(el) {
          _classCallCheck2(this, styleDirective);

          this.el = el;
        }
        /**
         * @return {?}
         */


        _createClass2(styleDirective, [{
          key: "ngOnInit",
          value: function ngOnInit() {
            this.el.nativeElement.style.top = this.styleVal;
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngOnChanges",
          value: function ngOnChanges() {
            this.el.nativeElement.style.top = this.styleVal;
          }
        }]);

        return styleDirective;
      }();

      styleDirective.ɵfac = function styleDirective_Factory(t) {
        return new (t || styleDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]));
      };

      styleDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: styleDirective,
        selectors: [["", "styleProp", ""]],
        inputs: {
          styleVal: ["styleProp", "styleVal"]
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
      });
      /** @nocollapse */

      styleDirective.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }];
      };

      styleDirective.propDecorators = {
        styleVal: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['styleProp']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](styleDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[styleProp]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }];
        }, {
          styleVal: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['styleProp']
          }]
        });
      })();

      if (false) {}

      var setPosition = /*#__PURE__*/function () {
        /**
         * @param {?} el
         */
        function setPosition(el) {
          _classCallCheck2(this, setPosition);

          this.el = el;
        }
        /**
         * @return {?}
         */


        _createClass2(setPosition, [{
          key: "ngOnInit",
          value: function ngOnInit() {
            if (this.height) {
              this.el.nativeElement.style.bottom = parseInt(this.height + 15 + "") + 'px';
            }
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngOnChanges",
          value: function ngOnChanges() {
            if (this.height) {
              this.el.nativeElement.style.bottom = parseInt(this.height + 15 + "") + 'px';
            }
          }
        }]);

        return setPosition;
      }();

      setPosition.ɵfac = function setPosition_Factory(t) {
        return new (t || setPosition)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]));
      };

      setPosition.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: setPosition,
        selectors: [["", "setPosition", ""]],
        inputs: {
          height: ["setPosition", "height"]
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
      });
      /** @nocollapse */

      setPosition.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }];
      };

      setPosition.propDecorators = {
        height: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['setPosition']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](setPosition, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[setPosition]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }];
        }, {
          height: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['setPosition']
          }]
        });
      })();

      if (false) {}
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var DataService = /*#__PURE__*/function () {
        function DataService() {
          _classCallCheck2(this, DataService);

          this.filteredData = [];
          this.subject = new rxjs__WEBPACK_IMPORTED_MODULE_3__["Subject"]();
        }
        /**
         * @param {?} data
         * @return {?}
         */


        _createClass2(DataService, [{
          key: "setData",
          value: function setData(data) {
            this.filteredData = data;
            this.subject.next(data);
          }
          /**
           * @return {?}
           */

        }, {
          key: "getData",
          value: function getData() {
            return this.subject.asObservable();
          }
          /**
           * @return {?}
           */

        }, {
          key: "getFilteredData",
          value: function getFilteredData() {
            if (this.filteredData && this.filteredData.length > 0) {
              return this.filteredData;
            } else {
              return [];
            }
          }
        }]);

        return DataService;
      }();

      DataService.ɵfac = function DataService_Factory(t) {
        return new (t || DataService)();
      };

      DataService.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: DataService,
        factory: DataService.ɵfac
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DataService, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [];
        }, null);
      })();

      if (false) {}
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var ListFilterPipe = /*#__PURE__*/function () {
        /**
         * @param {?} ds
         */
        function ListFilterPipe(ds) {
          _classCallCheck2(this, ListFilterPipe);

          this.ds = ds;
          this.filteredList = [];
        }
        /**
         * @param {?} items
         * @param {?} filter
         * @param {?} searchBy
         * @return {?}
         */


        _createClass2(ListFilterPipe, [{
          key: "transform",
          value: function transform(items, filter, searchBy) {
            var _this663 = this;

            if (!items || !filter) {
              this.ds.setData(items);
              return items;
            }

            this.filteredList = items.filter(
            /**
            * @param {?} item
            * @return {?}
            */
            function (item) {
              return _this663.applyFilter(item, filter, searchBy);
            });
            this.ds.setData(this.filteredList);
            return this.filteredList;
          }
          /**
           * @param {?} item
           * @param {?} filter
           * @param {?} searchBy
           * @return {?}
           */

        }, {
          key: "applyFilter",
          value: function applyFilter(item, filter, searchBy) {
            /** @type {?} */
            var found = false;

            if (searchBy.length > 0) {
              if (item.grpTitle) {
                found = true;
              } else {
                for (var t = 0; t < searchBy.length; t++) {
                  if (filter && item[searchBy[t]] && item[searchBy[t]] != "") {
                    if (item[searchBy[t]].toString().toLowerCase().indexOf(filter.toLowerCase()) >= 0) {
                      found = true;
                    }
                  }
                }
              }
            } else {
              if (item.grpTitle) {
                found = true;
              } else {
                for (var prop in item) {
                  if (filter && item[prop]) {
                    if (item[prop].toString().toLowerCase().indexOf(filter.toLowerCase()) >= 0) {
                      found = true;
                    }
                  }
                }
              }
            }

            return found;
          }
        }]);

        return ListFilterPipe;
      }();

      ListFilterPipe.ɵfac = function ListFilterPipe_Factory(t) {
        return new (t || ListFilterPipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](DataService));
      };

      ListFilterPipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({
        name: "listFilter",
        type: ListFilterPipe,
        pure: true
      });
      /** @nocollapse */

      ListFilterPipe.ctorParameters = function () {
        return [{
          type: DataService
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ListFilterPipe, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
          args: [{
            name: 'listFilter',
            pure: true
          }]
        }], function () {
          return [{
            type: DataService
          }];
        }, null);
      })();

      if (false) {}
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var Item = function Item() {
        _classCallCheck2(this, Item);
      };

      Item.ɵfac = function Item_Factory(t) {
        return new (t || Item)();
      };

      Item.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: Item,
        selectors: [["c-item"]],
        contentQueries: function Item_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"], 3);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.template = _t.first);
          }
        },
        decls: 0,
        vars: 0,
        template: function Item_Template(rf, ctx) {},
        encapsulation: 2
      });
      /** @nocollapse */

      Item.ctorParameters = function () {
        return [];
      };

      Item.propDecorators = {
        template: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"], {
            "static": true
          }]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](Item, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'c-item',
            template: ""
          }]
        }], function () {
          return [];
        }, {
          template: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"], {
              "static": true
            }]
          }]
        });
      })();

      if (false) {}

      var Badge = function Badge() {
        _classCallCheck2(this, Badge);
      };

      Badge.ɵfac = function Badge_Factory(t) {
        return new (t || Badge)();
      };

      Badge.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: Badge,
        selectors: [["c-badge"]],
        contentQueries: function Badge_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"], 3);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.template = _t.first);
          }
        },
        decls: 0,
        vars: 0,
        template: function Badge_Template(rf, ctx) {},
        encapsulation: 2
      });
      /** @nocollapse */

      Badge.ctorParameters = function () {
        return [];
      };

      Badge.propDecorators = {
        template: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"], {
            "static": true
          }]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](Badge, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'c-badge',
            template: ""
          }]
        }], function () {
          return [];
        }, {
          template: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"], {
              "static": true
            }]
          }]
        });
      })();

      if (false) {}

      var Search = function Search() {
        _classCallCheck2(this, Search);
      };

      Search.ɵfac = function Search_Factory(t) {
        return new (t || Search)();
      };

      Search.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: Search,
        selectors: [["c-search"]],
        contentQueries: function Search_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"], 3);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.template = _t.first);
          }
        },
        decls: 0,
        vars: 0,
        template: function Search_Template(rf, ctx) {},
        encapsulation: 2
      });
      /** @nocollapse */

      Search.ctorParameters = function () {
        return [];
      };

      Search.propDecorators = {
        template: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"], {
            "static": true
          }]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](Search, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'c-search',
            template: ""
          }]
        }], function () {
          return [];
        }, {
          template: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"], {
              "static": true
            }]
          }]
        });
      })();

      if (false) {}

      var TemplateRenderer = /*#__PURE__*/function () {
        /**
         * @param {?} viewContainer
         */
        function TemplateRenderer(viewContainer) {
          _classCallCheck2(this, TemplateRenderer);

          this.viewContainer = viewContainer;
        }
        /**
         * @return {?}
         */


        _createClass2(TemplateRenderer, [{
          key: "ngOnInit",
          value: function ngOnInit() {
            this.view = this.viewContainer.createEmbeddedView(this.data.template, {
              '\$implicit': this.data,
              'item': this.item
            });
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.view.destroy();
          }
        }]);

        return TemplateRenderer;
      }();

      TemplateRenderer.ɵfac = function TemplateRenderer_Factory(t) {
        return new (t || TemplateRenderer)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]));
      };

      TemplateRenderer.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: TemplateRenderer,
        selectors: [["c-templateRenderer"]],
        inputs: {
          data: "data",
          item: "item"
        },
        decls: 0,
        vars: 0,
        template: function TemplateRenderer_Template(rf, ctx) {},
        encapsulation: 2
      });
      /** @nocollapse */

      TemplateRenderer.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
        }];
      };

      TemplateRenderer.propDecorators = {
        data: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        item: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](TemplateRenderer, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'c-templateRenderer',
            template: ""
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
          }];
        }, {
          data: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          item: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      if (false) {}

      var CIcon = function CIcon() {
        _classCallCheck2(this, CIcon);
      };

      CIcon.ɵfac = function CIcon_Factory(t) {
        return new (t || CIcon)();
      };

      CIcon.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: CIcon,
        selectors: [["c-icon"]],
        inputs: {
          name: "name"
        },
        decls: 5,
        vars: 5,
        consts: [["width", "100%", "height", "100%", "version", "1.1", "id", "Capa_1", "xmlns", "http://www.w3.org/2000/svg", 0, "xmlns", "xlink", "http://www.w3.org/1999/xlink", "x", "0px", "y", "0px", "viewBox", "0 0 47.971 47.971", "style", "enable-background:new 0 0 47.971 47.971;", 0, "xml", "space", "preserve", 4, "ngIf"], ["version", "1.1", "id", "Capa_1", "xmlns", "http://www.w3.org/2000/svg", 0, "xmlns", "xlink", "http://www.w3.org/1999/xlink", "x", "0px", "y", "0px", "width", "100%", "height", "100%", "viewBox", "0 0 612 612", "style", "enable-background:new 0 0 612 612;", 0, "xml", "space", "preserve", 4, "ngIf"], ["version", "1.1", "id", "Capa_1", "xmlns", "http://www.w3.org/2000/svg", 0, "xmlns", "xlink", "http://www.w3.org/1999/xlink", "x", "0px", "y", "0px", "width", "100%", "height", "100%", "viewBox", "0 0 615.52 615.52", "style", "enable-background:new 0 0 615.52 615.52;", 0, "xml", "space", "preserve", 4, "ngIf"], ["version", "1.1", "id", "Capa_1", "xmlns", "http://www.w3.org/2000/svg", 0, "xmlns", "xlink", "http://www.w3.org/1999/xlink", "x", "0px", "y", "0px", "viewBox", "0 0 51.976 51.976", "style", "enable-background:new 0 0 51.976 51.976;", 0, "xml", "space", "preserve", 4, "ngIf"], ["width", "100%", "height", "100%", "version", "1.1", "id", "Capa_1", "xmlns", "http://www.w3.org/2000/svg", 0, "xmlns", "xlink", "http://www.w3.org/1999/xlink", "x", "0px", "y", "0px", "viewBox", "0 0 47.971 47.971", 0, "xml", "space", "preserve", 2, "enable-background", "new 0 0 47.971 47.971"], ["d", "M28.228,23.986L47.092,5.122c1.172-1.171,1.172-3.071,0-4.242c-1.172-1.172-3.07-1.172-4.242,0L23.986,19.744L5.121,0.88\n                                c-1.172-1.172-3.07-1.172-4.242,0c-1.172,1.171-1.172,3.071,0,4.242l18.865,18.864L0.879,42.85c-1.172,1.171-1.172,3.071,0,4.242\n                                C1.465,47.677,2.233,47.97,3,47.97s1.535-0.293,2.121-0.879l18.865-18.864L42.85,47.091c0.586,0.586,1.354,0.879,2.121,0.879\n                                s1.535-0.293,2.121-0.879c1.172-1.171,1.172-3.071,0-4.242L28.228,23.986z"], ["version", "1.1", "id", "Capa_1", "xmlns", "http://www.w3.org/2000/svg", 0, "xmlns", "xlink", "http://www.w3.org/1999/xlink", "x", "0px", "y", "0px", "width", "100%", "height", "100%", "viewBox", "0 0 612 612", 0, "xml", "space", "preserve", 2, "enable-background", "new 0 0 612 612"], ["id", "_x31_0_34_"], ["d", "M604.501,134.782c-9.999-10.05-26.222-10.05-36.221,0L306.014,422.558L43.721,134.782\n\t\t\t\tc-9.999-10.05-26.223-10.05-36.222,0s-9.999,26.35,0,36.399l279.103,306.241c5.331,5.357,12.422,7.652,19.386,7.296\n\t\t\t\tc6.988,0.356,14.055-1.939,19.386-7.296l279.128-306.268C614.5,161.106,614.5,144.832,604.501,134.782z"], ["id", "_x39__30_"], ["d", "M604.501,440.509L325.398,134.956c-5.331-5.357-12.423-7.627-19.386-7.27c-6.989-0.357-14.056,1.913-19.387,7.27\n\t\t\t\tL7.499,440.509c-9.999,10.024-9.999,26.298,0,36.323s26.223,10.024,36.222,0l262.293-287.164L568.28,476.832\n\t\t\t\tc9.999,10.024,26.222,10.024,36.221,0C614.5,466.809,614.5,450.534,604.501,440.509z"], ["version", "1.1", "id", "Capa_1", "xmlns", "http://www.w3.org/2000/svg", 0, "xmlns", "xlink", "http://www.w3.org/1999/xlink", "x", "0px", "y", "0px", "width", "100%", "height", "100%", "viewBox", "0 0 615.52 615.52", 0, "xml", "space", "preserve", 2, "enable-background", "new 0 0 615.52 615.52"], ["id", "Search__x28_and_thou_shall_find_x29_"], ["d", "M602.531,549.736l-184.31-185.368c26.679-37.72,42.528-83.729,42.528-133.548C460.75,103.35,357.997,0,231.258,0\n\t\t\t\t\tC104.518,0,1.765,103.35,1.765,230.82c0,127.47,102.753,230.82,229.493,230.82c49.53,0,95.271-15.944,132.78-42.777\n\t\t\t\t\tl184.31,185.366c7.482,7.521,17.292,11.291,27.102,11.291c9.812,0,19.62-3.77,27.083-11.291\n\t\t\t\t\tC617.496,589.188,617.496,564.777,602.531,549.736z M355.9,319.763l-15.042,21.273L319.7,356.174\n\t\t\t\t\tc-26.083,18.658-56.667,28.526-88.442,28.526c-84.365,0-152.995-69.035-152.995-153.88c0-84.846,68.63-153.88,152.995-153.88\n\t\t\t\t\ts152.996,69.034,152.996,153.88C384.271,262.769,374.462,293.526,355.9,319.763z"], ["version", "1.1", "id", "Capa_1", "xmlns", "http://www.w3.org/2000/svg", 0, "xmlns", "xlink", "http://www.w3.org/1999/xlink", "x", "0px", "y", "0px", "viewBox", "0 0 51.976 51.976", 0, "xml", "space", "preserve", 2, "enable-background", "new 0 0 51.976 51.976"], ["d", "M44.373,7.603c-10.137-10.137-26.632-10.138-36.77,0c-10.138,10.138-10.137,26.632,0,36.77s26.632,10.138,36.77,0\n\t\tC54.51,34.235,54.51,17.74,44.373,7.603z M36.241,36.241c-0.781,0.781-2.047,0.781-2.828,0l-7.425-7.425l-7.778,7.778\n\t\tc-0.781,0.781-2.047,0.781-2.828,0c-0.781-0.781-0.781-2.047,0-2.828l7.778-7.778l-7.425-7.425c-0.781-0.781-0.781-2.048,0-2.828\n\t\tc0.781-0.781,2.047-0.781,2.828,0l7.425,7.425l7.071-7.071c0.781-0.781,2.047-0.781,2.828,0c0.781,0.781,0.781,2.047,0,2.828\n\t\tl-7.071,7.071l7.425,7.425C37.022,34.194,37.022,35.46,36.241,36.241z"]],
        template: function CIcon_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, CIcon__svg_svg_0_Template, 3, 0, "svg", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, CIcon__svg_svg_1_Template, 5, 0, "svg", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, CIcon__svg_svg_2_Template, 5, 0, "svg", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, CIcon__svg_svg_3_Template, 6, 0, "svg", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](4, CIcon__svg_svg_4_Template, 3, 0, "svg", 3);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.name == "remove");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.name == "angle-down");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.name == "angle-up");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.name == "search");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.name == "clear");
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["NgIf"]],
        encapsulation: 2
      });
      CIcon.propDecorators = {
        name: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CIcon, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'c-icon',
            template: "<svg *ngIf=\"name == 'remove'\" width=\"100%\" height=\"100%\" version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n                        viewBox=\"0 0 47.971 47.971\" style=\"enable-background:new 0 0 47.971 47.971;\" xml:space=\"preserve\">\n                        <g>\n                            <path d=\"M28.228,23.986L47.092,5.122c1.172-1.171,1.172-3.071,0-4.242c-1.172-1.172-3.07-1.172-4.242,0L23.986,19.744L5.121,0.88\n                                c-1.172-1.172-3.07-1.172-4.242,0c-1.172,1.171-1.172,3.071,0,4.242l18.865,18.864L0.879,42.85c-1.172,1.171-1.172,3.071,0,4.242\n                                C1.465,47.677,2.233,47.97,3,47.97s1.535-0.293,2.121-0.879l18.865-18.864L42.85,47.091c0.586,0.586,1.354,0.879,2.121,0.879\n                                s1.535-0.293,2.121-0.879c1.172-1.171,1.172-3.071,0-4.242L28.228,23.986z\"/>\n                        </g>\n                    </svg>\n            <svg *ngIf=\"name == 'angle-down'\" version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t width=\"100%\" height=\"100%\" viewBox=\"0 0 612 612\" style=\"enable-background:new 0 0 612 612;\" xml:space=\"preserve\">\n<g>\n\t<g id=\"_x31_0_34_\">\n\t\t<g>\n\t\t\t<path d=\"M604.501,134.782c-9.999-10.05-26.222-10.05-36.221,0L306.014,422.558L43.721,134.782\n\t\t\t\tc-9.999-10.05-26.223-10.05-36.222,0s-9.999,26.35,0,36.399l279.103,306.241c5.331,5.357,12.422,7.652,19.386,7.296\n\t\t\t\tc6.988,0.356,14.055-1.939,19.386-7.296l279.128-306.268C614.5,161.106,614.5,144.832,604.501,134.782z\"/>\n\t\t</g>\n\t</g>\n</g>\n</svg>\n<svg *ngIf=\"name == 'angle-up'\" version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t width=\"100%\" height=\"100%\" viewBox=\"0 0 612 612\" style=\"enable-background:new 0 0 612 612;\" xml:space=\"preserve\">\n<g>\n\t<g id=\"_x39__30_\">\n\t\t<g>\n\t\t\t<path d=\"M604.501,440.509L325.398,134.956c-5.331-5.357-12.423-7.627-19.386-7.27c-6.989-0.357-14.056,1.913-19.387,7.27\n\t\t\t\tL7.499,440.509c-9.999,10.024-9.999,26.298,0,36.323s26.223,10.024,36.222,0l262.293-287.164L568.28,476.832\n\t\t\t\tc9.999,10.024,26.222,10.024,36.221,0C614.5,466.809,614.5,450.534,604.501,440.509z\"/>\n\t\t</g>\n\t</g>\n</g>\n\n</svg>\n<svg *ngIf=\"name == 'search'\" version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t width=\"100%\" height=\"100%\" viewBox=\"0 0 615.52 615.52\" style=\"enable-background:new 0 0 615.52 615.52;\"\n\t xml:space=\"preserve\">\n<g>\n\t<g>\n\t\t<g id=\"Search__x28_and_thou_shall_find_x29_\">\n\t\t\t<g>\n\t\t\t\t<path d=\"M602.531,549.736l-184.31-185.368c26.679-37.72,42.528-83.729,42.528-133.548C460.75,103.35,357.997,0,231.258,0\n\t\t\t\t\tC104.518,0,1.765,103.35,1.765,230.82c0,127.47,102.753,230.82,229.493,230.82c49.53,0,95.271-15.944,132.78-42.777\n\t\t\t\t\tl184.31,185.366c7.482,7.521,17.292,11.291,27.102,11.291c9.812,0,19.62-3.77,27.083-11.291\n\t\t\t\t\tC617.496,589.188,617.496,564.777,602.531,549.736z M355.9,319.763l-15.042,21.273L319.7,356.174\n\t\t\t\t\tc-26.083,18.658-56.667,28.526-88.442,28.526c-84.365,0-152.995-69.035-152.995-153.88c0-84.846,68.63-153.88,152.995-153.88\n\t\t\t\t\ts152.996,69.034,152.996,153.88C384.271,262.769,374.462,293.526,355.9,319.763z\"/>\n\t\t\t</g>\n\t\t</g>\n\t</g>\n</g>\n\n</svg>\n<svg *ngIf=\"name == 'clear'\" version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t viewBox=\"0 0 51.976 51.976\" style=\"enable-background:new 0 0 51.976 51.976;\" xml:space=\"preserve\">\n<g>\n\t<path d=\"M44.373,7.603c-10.137-10.137-26.632-10.138-36.77,0c-10.138,10.138-10.137,26.632,0,36.77s26.632,10.138,36.77,0\n\t\tC54.51,34.235,54.51,17.74,44.373,7.603z M36.241,36.241c-0.781,0.781-2.047,0.781-2.828,0l-7.425-7.425l-7.778,7.778\n\t\tc-0.781,0.781-2.047,0.781-2.828,0c-0.781-0.781-0.781-2.047,0-2.828l7.778-7.778l-7.425-7.425c-0.781-0.781-0.781-2.048,0-2.828\n\t\tc0.781-0.781,2.047-0.781,2.828,0l7.425,7.425l7.071-7.071c0.781-0.781,2.047-0.781,2.828,0c0.781,0.781,0.781,2.047,0,2.828\n\t\tl-7.071,7.071l7.425,7.425C37.022,34.194,37.022,35.46,36.241,36.241z\"/>\n</g>\n</svg>",
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None
          }]
        }], null, {
          name: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      if (false) {}
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @return {?}
       */


      function VIRTUAL_SCROLLER_DEFAULT_OPTIONS_FACTORY() {
        return {
          scrollThrottlingTime: 0,
          scrollDebounceTime: 0,
          scrollAnimationTime: 750,
          checkResizeInterval: 1000,
          resizeBypassRefreshThreshold: 5,
          modifyOverflowStyleOfParentScroll: true,
          stripedTable: false
        };
      }

      var VirtualScrollerComponent = /*#__PURE__*/function () {
        /**
         * @param {?} element
         * @param {?} renderer
         * @param {?} zone
         * @param {?} changeDetectorRef
         * @param {?} platformId
         * @param {?} options
         */
        function VirtualScrollerComponent(element, renderer, zone, changeDetectorRef, platformId, options) {
          _classCallCheck2(this, VirtualScrollerComponent);

          this.element = element;
          this.renderer = renderer;
          this.zone = zone;
          this.changeDetectorRef = changeDetectorRef;
          this.window = window;
          this.executeRefreshOutsideAngularZone = false;
          this._enableUnequalChildrenSizes = false;
          this.useMarginInsteadOfTranslate = false;
          this.ssrViewportWidth = 1920;
          this.ssrViewportHeight = 1080;
          this._bufferAmount = 0;
          this._items = [];

          this.compareItems =
          /**
          * @param {?} item1
          * @param {?} item2
          * @return {?}
          */
          function (item1, item2) {
            return item1 === item2;
          };

          this.vsUpdate = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.vsChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.vsStart = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.vsEnd = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.calculatedScrollbarWidth = 0;
          this.calculatedScrollbarHeight = 0;
          this.padding = 0;
          this.previousViewPort =
          /** @type {?} */
          {};
          this.cachedPageSize = 0;
          this.previousScrollNumberElements = 0;
          this.isAngularUniversalSSR = Object(_angular_common__WEBPACK_IMPORTED_MODULE_2__["isPlatformServer"])(platformId);
          this.scrollThrottlingTime = options.scrollThrottlingTime;
          this.scrollDebounceTime = options.scrollDebounceTime;
          this.scrollAnimationTime = options.scrollAnimationTime;
          this.scrollbarWidth = options.scrollbarWidth;
          this.scrollbarHeight = options.scrollbarHeight;
          this.checkResizeInterval = options.checkResizeInterval;
          this.resizeBypassRefreshThreshold = options.resizeBypassRefreshThreshold;
          this.modifyOverflowStyleOfParentScroll = options.modifyOverflowStyleOfParentScroll;
          this.stripedTable = options.stripedTable;
          this.horizontal = false;
          this.resetWrapGroupDimensions();
        }
        /**
         * @return {?}
         */


        _createClass2(VirtualScrollerComponent, [{
          key: "viewPortInfo",
          get: function get() {
            /** @type {?} */
            var pageInfo = this.previousViewPort ||
            /** @type {?} */
            {};
            return {
              startIndex: pageInfo.startIndex || 0,
              endIndex: pageInfo.endIndex || 0,
              scrollStartPosition: pageInfo.scrollStartPosition || 0,
              scrollEndPosition: pageInfo.scrollEndPosition || 0,
              maxScrollPosition: pageInfo.maxScrollPosition || 0,
              startIndexWithBuffer: pageInfo.startIndexWithBuffer || 0,
              endIndexWithBuffer: pageInfo.endIndexWithBuffer || 0
            };
          }
          /**
           * @return {?}
           */

        }, {
          key: "enableUnequalChildrenSizes",
          get: function get() {
            return this._enableUnequalChildrenSizes;
          }
          /**
           * @param {?} value
           * @return {?}
           */
          ,
          set: function set(value) {
            if (this._enableUnequalChildrenSizes === value) {
              return;
            }

            this._enableUnequalChildrenSizes = value;
            this.minMeasuredChildWidth = undefined;
            this.minMeasuredChildHeight = undefined;
          }
          /**
           * @return {?}
           */

        }, {
          key: "bufferAmount",
          get: function get() {
            if (typeof this._bufferAmount === 'number' && this._bufferAmount >= 0) {
              return this._bufferAmount;
            } else {
              return this.enableUnequalChildrenSizes ? 5 : 0;
            }
          }
          /**
           * @param {?} value
           * @return {?}
           */
          ,
          set: function set(value) {
            this._bufferAmount = value;
          }
          /**
           * @return {?}
           */

        }, {
          key: "scrollThrottlingTime",
          get: function get() {
            return this._scrollThrottlingTime;
          }
          /**
           * @param {?} value
           * @return {?}
           */
          ,
          set: function set(value) {
            this._scrollThrottlingTime = value;
            this.updateOnScrollFunction();
          }
          /**
           * @return {?}
           */

        }, {
          key: "scrollDebounceTime",
          get: function get() {
            return this._scrollDebounceTime;
          }
          /**
           * @param {?} value
           * @return {?}
           */
          ,
          set: function set(value) {
            this._scrollDebounceTime = value;
            this.updateOnScrollFunction();
          }
          /**
           * @protected
           * @return {?}
           */

        }, {
          key: "updateOnScrollFunction",
          value: function updateOnScrollFunction() {
            var _this664 = this;

            if (this.scrollDebounceTime) {
              this.onScroll =
              /** @type {?} */
              this.debounce(
              /**
              * @return {?}
              */
              function () {
                _this664.refresh_internal(false);
              }, this.scrollDebounceTime);
            } else if (this.scrollThrottlingTime) {
              this.onScroll =
              /** @type {?} */
              this.throttleTrailing(
              /**
              * @return {?}
              */
              function () {
                _this664.refresh_internal(false);
              }, this.scrollThrottlingTime);
            } else {
              this.onScroll =
              /**
              * @return {?}
              */
              function () {
                _this664.refresh_internal(false);
              };
            }
          }
          /**
           * @return {?}
           */

        }, {
          key: "checkResizeInterval",
          get: function get() {
            return this._checkResizeInterval;
          }
          /**
           * @param {?} value
           * @return {?}
           */
          ,
          set: function set(value) {
            if (this._checkResizeInterval === value) {
              return;
            }

            this._checkResizeInterval = value;
            this.addScrollEventHandlers();
          }
          /**
           * @return {?}
           */

        }, {
          key: "items",
          get: function get() {
            return this._items;
          }
          /**
           * @param {?} value
           * @return {?}
           */
          ,
          set: function set(value) {
            if (value === this._items) {
              return;
            }

            this._items = value || [];
            this.refresh_internal(true);
          }
          /**
           * @return {?}
           */

        }, {
          key: "horizontal",
          get: function get() {
            return this._horizontal;
          }
          /**
           * @param {?} value
           * @return {?}
           */
          ,
          set: function set(value) {
            this._horizontal = value;
            this.updateDirection();
          }
          /**
           * @protected
           * @return {?}
           */

        }, {
          key: "revertParentOverscroll",
          value: function revertParentOverscroll() {
            /** @type {?} */
            var scrollElement = this.getScrollElement();

            if (scrollElement && this.oldParentScrollOverflow) {
              scrollElement.style['overflow-y'] = this.oldParentScrollOverflow.y;
              scrollElement.style['overflow-x'] = this.oldParentScrollOverflow.x;
            }

            this.oldParentScrollOverflow = undefined;
          }
          /**
           * @return {?}
           */

        }, {
          key: "parentScroll",
          get: function get() {
            return this._parentScroll;
          }
          /**
           * @param {?} value
           * @return {?}
           */
          ,
          set: function set(value) {
            if (this._parentScroll === value) {
              return;
            }

            this.revertParentOverscroll();
            this._parentScroll = value;
            this.addScrollEventHandlers();
            /** @type {?} */

            var scrollElement = this.getScrollElement();

            if (this.modifyOverflowStyleOfParentScroll && scrollElement !== this.element.nativeElement) {
              this.oldParentScrollOverflow = {
                x: scrollElement.style['overflow-x'],
                y: scrollElement.style['overflow-y']
              };
              scrollElement.style['overflow-y'] = this.horizontal ? 'visible' : 'auto';
              scrollElement.style['overflow-x'] = this.horizontal ? 'auto' : 'visible';
            }
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            this.addScrollEventHandlers();
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.removeScrollEventHandlers();
            this.revertParentOverscroll();
          }
          /**
           * @param {?} changes
           * @return {?}
           */

        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            /** @type {?} */
            var indexLengthChanged = this.cachedItemsLength !== this.items.length;
            this.cachedItemsLength = this.items.length;
            /** @type {?} */

            var firstRun = !changes.items || !changes.items.previousValue || changes.items.previousValue.length === 0;
            this.refresh_internal(indexLengthChanged || firstRun);
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngDoCheck",
          value: function ngDoCheck() {
            if (this.cachedItemsLength !== this.items.length) {
              this.cachedItemsLength = this.items.length;
              this.refresh_internal(true);
              return;
            }

            if (this.previousViewPort && this.viewPortItems && this.viewPortItems.length > 0) {
              /** @type {?} */
              var itemsArrayChanged = false;

              for (var i = 0; i < this.viewPortItems.length; ++i) {
                if (!this.compareItems(this.items[this.previousViewPort.startIndexWithBuffer + i], this.viewPortItems[i])) {
                  itemsArrayChanged = true;
                  break;
                }
              }

              if (itemsArrayChanged) {
                this.refresh_internal(true);
              }
            }
          }
          /**
           * @return {?}
           */

        }, {
          key: "refresh",
          value: function refresh() {
            this.refresh_internal(true);
          }
          /**
           * @return {?}
           */

        }, {
          key: "invalidateAllCachedMeasurements",
          value: function invalidateAllCachedMeasurements() {
            this.wrapGroupDimensions = {
              maxChildSizePerWrapGroup: [],
              numberOfKnownWrapGroupChildSizes: 0,
              sumOfKnownWrapGroupChildWidths: 0,
              sumOfKnownWrapGroupChildHeights: 0
            };
            this.minMeasuredChildWidth = undefined;
            this.minMeasuredChildHeight = undefined;
            this.refresh_internal(false);
          }
          /**
           * @param {?} item
           * @return {?}
           */

        }, {
          key: "invalidateCachedMeasurementForItem",
          value: function invalidateCachedMeasurementForItem(item) {
            if (this.enableUnequalChildrenSizes) {
              /** @type {?} */
              var index = this.items && this.items.indexOf(item);

              if (index >= 0) {
                this.invalidateCachedMeasurementAtIndex(index);
              }
            } else {
              this.minMeasuredChildWidth = undefined;
              this.minMeasuredChildHeight = undefined;
            }

            this.refresh_internal(false);
          }
          /**
           * @param {?} index
           * @return {?}
           */

        }, {
          key: "invalidateCachedMeasurementAtIndex",
          value: function invalidateCachedMeasurementAtIndex(index) {
            if (this.enableUnequalChildrenSizes) {
              /** @type {?} */
              var cachedMeasurement = this.wrapGroupDimensions.maxChildSizePerWrapGroup[index];

              if (cachedMeasurement) {
                this.wrapGroupDimensions.maxChildSizePerWrapGroup[index] = undefined;
                --this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;
                this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths -= cachedMeasurement.childWidth || 0;
                this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights -= cachedMeasurement.childHeight || 0;
              }
            } else {
              this.minMeasuredChildWidth = undefined;
              this.minMeasuredChildHeight = undefined;
            }

            this.refresh_internal(false);
          }
          /**
           * @param {?} item
           * @param {?=} alignToBeginning
           * @param {?=} additionalOffset
           * @param {?=} animationMilliseconds
           * @param {?=} animationCompletedCallback
           * @return {?}
           */

        }, {
          key: "scrollInto",
          value: function scrollInto(item) {
            var alignToBeginning = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
            var additionalOffset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
            var animationMilliseconds = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined;
            var animationCompletedCallback = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : undefined;

            /** @type {?} */
            var index = this.items.indexOf(item);

            if (index === -1) {
              return;
            }

            this.scrollToIndex(index, alignToBeginning, additionalOffset, animationMilliseconds, animationCompletedCallback);
          }
          /**
           * @param {?} index
           * @param {?=} alignToBeginning
           * @param {?=} additionalOffset
           * @param {?=} animationMilliseconds
           * @param {?=} animationCompletedCallback
           * @return {?}
           */

        }, {
          key: "scrollToIndex",
          value: function scrollToIndex(index) {
            var _this665 = this;

            var alignToBeginning = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
            var additionalOffset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
            var animationMilliseconds = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined;
            var animationCompletedCallback = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : undefined;

            /** @type {?} */
            var maxRetries = 5;
            /** @type {?} */

            var retryIfNeeded =
            /**
            * @return {?}
            */
            function retryIfNeeded() {
              --maxRetries;

              if (maxRetries <= 0) {
                if (animationCompletedCallback) {
                  animationCompletedCallback();
                }

                return;
              }
              /** @type {?} */


              var dimensions = _this665.calculateDimensions();
              /** @type {?} */


              var desiredStartIndex = Math.min(Math.max(index, 0), dimensions.itemCount - 1);

              if (_this665.previousViewPort.startIndex === desiredStartIndex) {
                if (animationCompletedCallback) {
                  animationCompletedCallback();
                }

                return;
              }

              _this665.scrollToIndex_internal(index, alignToBeginning, additionalOffset, 0, retryIfNeeded);
            };

            this.scrollToIndex_internal(index, alignToBeginning, additionalOffset, animationMilliseconds, retryIfNeeded);
          }
          /**
           * @protected
           * @param {?} index
           * @param {?=} alignToBeginning
           * @param {?=} additionalOffset
           * @param {?=} animationMilliseconds
           * @param {?=} animationCompletedCallback
           * @return {?}
           */

        }, {
          key: "scrollToIndex_internal",
          value: function scrollToIndex_internal(index) {
            var alignToBeginning = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
            var additionalOffset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
            var animationMilliseconds = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined;
            var animationCompletedCallback = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : undefined;
            animationMilliseconds = animationMilliseconds === undefined ? this.scrollAnimationTime : animationMilliseconds;
            /** @type {?} */

            var dimensions = this.calculateDimensions();
            /** @type {?} */

            var scroll = this.calculatePadding(index, dimensions) + additionalOffset;

            if (!alignToBeginning) {
              scroll -= dimensions.wrapGroupsPerPage * dimensions[this._childScrollDim];
            }

            this.scrollToPosition(scroll, animationMilliseconds, animationCompletedCallback);
          }
          /**
           * @param {?} scrollPosition
           * @param {?=} animationMilliseconds
           * @param {?=} animationCompletedCallback
           * @return {?}
           */

        }, {
          key: "scrollToPosition",
          value: function scrollToPosition(scrollPosition) {
            var _this666 = this;

            var animationMilliseconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
            var animationCompletedCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
            scrollPosition += this.getElementsOffset();
            animationMilliseconds = animationMilliseconds === undefined ? this.scrollAnimationTime : animationMilliseconds;
            /** @type {?} */

            var scrollElement = this.getScrollElement();
            /** @type {?} */

            var animationRequest;

            if (this.currentTween) {
              this.currentTween.stop();
              this.currentTween = undefined;
            }

            if (!animationMilliseconds) {
              this.renderer.setProperty(scrollElement, this._scrollType, scrollPosition);
              this.refresh_internal(false, animationCompletedCallback);
              return;
            }
            /** @type {?} */


            var tweenConfigObj = {
              scrollPosition: scrollElement[this._scrollType]
            };
            /** @type {?} */

            var newTween = new _tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_4__["Tween"](tweenConfigObj).to({
              scrollPosition: scrollPosition
            }, animationMilliseconds).easing(_tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_4__["Easing"].Quadratic.Out).onUpdate(
            /**
            * @param {?} data
            * @return {?}
            */
            function (data) {
              if (isNaN(data.scrollPosition)) {
                return;
              }

              _this666.renderer.setProperty(scrollElement, _this666._scrollType, data.scrollPosition);

              _this666.refresh_internal(false);
            }).onStop(
            /**
            * @return {?}
            */
            function () {
              cancelAnimationFrame(animationRequest);
            }).start();
            /** @type {?} */

            var animate =
            /**
            * @param {?=} time
            * @return {?}
            */
            function animate(time) {
              if (!newTween["isPlaying"]()) {
                return;
              }

              newTween.update(time);

              if (tweenConfigObj.scrollPosition === scrollPosition) {
                _this666.refresh_internal(false, animationCompletedCallback);

                return;
              }

              _this666.zone.runOutsideAngular(
              /**
              * @return {?}
              */
              function () {
                animationRequest = requestAnimationFrame(animate);
              });
            };

            animate();
            this.currentTween = newTween;
          }
          /**
           * @protected
           * @param {?} element
           * @return {?}
           */

        }, {
          key: "getElementSize",
          value: function getElementSize(element) {
            /** @type {?} */
            var result = element.getBoundingClientRect();
            /** @type {?} */

            var styles = getComputedStyle(element);
            /** @type {?} */

            var marginTop = parseInt(styles['margin-top'], 10) || 0;
            /** @type {?} */

            var marginBottom = parseInt(styles['margin-bottom'], 10) || 0;
            /** @type {?} */

            var marginLeft = parseInt(styles['margin-left'], 10) || 0;
            /** @type {?} */

            var marginRight = parseInt(styles['margin-right'], 10) || 0;
            return {
              top: result.top + marginTop,
              bottom: result.bottom + marginBottom,
              left: result.left + marginLeft,
              right: result.right + marginRight,
              width: result.width + marginLeft + marginRight,
              height: result.height + marginTop + marginBottom
            };
          }
          /**
           * @protected
           * @return {?}
           */

        }, {
          key: "checkScrollElementResized",
          value: function checkScrollElementResized() {
            /** @type {?} */
            var boundingRect = this.getElementSize(this.getScrollElement());
            /** @type {?} */

            var sizeChanged;

            if (!this.previousScrollBoundingRect) {
              sizeChanged = true;
            } else {
              /** @type {?} */
              var widthChange = Math.abs(boundingRect.width - this.previousScrollBoundingRect.width);
              /** @type {?} */

              var heightChange = Math.abs(boundingRect.height - this.previousScrollBoundingRect.height);
              sizeChanged = widthChange > this.resizeBypassRefreshThreshold || heightChange > this.resizeBypassRefreshThreshold;
            }

            if (sizeChanged) {
              this.previousScrollBoundingRect = boundingRect;

              if (boundingRect.width > 0 && boundingRect.height > 0) {
                this.refresh_internal(false);
              }
            }
          }
          /**
           * @protected
           * @return {?}
           */

        }, {
          key: "updateDirection",
          value: function updateDirection() {
            if (this.horizontal) {
              this._invisiblePaddingProperty = 'width';
              this._offsetType = 'offsetLeft';
              this._pageOffsetType = 'pageXOffset';
              this._childScrollDim = 'childWidth';
              this._marginDir = 'margin-left';
              this._translateDir = 'translateX';
              this._scrollType = 'scrollLeft';
            } else {
              this._invisiblePaddingProperty = 'height';
              this._offsetType = 'offsetTop';
              this._pageOffsetType = 'pageYOffset';
              this._childScrollDim = 'childHeight';
              this._marginDir = 'margin-top';
              this._translateDir = 'translateY';
              this._scrollType = 'scrollTop';
            }
          }
          /**
           * @protected
           * @param {?} func
           * @param {?} wait
           * @return {?}
           */

        }, {
          key: "debounce",
          value: function debounce(func, wait) {
            /** @type {?} */
            var throttled = this.throttleTrailing(func, wait);
            /** @type {?} */

            var result =
            /**
            * @return {?}
            */
            function result() {
              throttled['cancel']();
              throttled.apply(this, arguments);
            };

            result['cancel'] =
            /**
            * @return {?}
            */
            function () {
              throttled['cancel']();
            };

            return result;
          }
          /**
           * @protected
           * @param {?} func
           * @param {?} wait
           * @return {?}
           */

        }, {
          key: "throttleTrailing",
          value: function throttleTrailing(func, wait) {
            /** @type {?} */
            var timeout = undefined;
            /** @type {?} */

            var _arguments = arguments;
            /** @type {?} */

            var result =
            /**
            * @return {?}
            */
            function result() {
              /** @type {?} */
              var _this = this;

              _arguments = arguments;

              if (timeout) {
                return;
              }

              if (wait <= 0) {
                func.apply(_this, _arguments);
              } else {
                timeout = setTimeout(
                /**
                * @return {?}
                */
                function () {
                  timeout = undefined;
                  func.apply(_this, _arguments);
                }, wait);
              }
            };

            result['cancel'] =
            /**
            * @return {?}
            */
            function () {
              if (timeout) {
                clearTimeout(timeout);
                timeout = undefined;
              }
            };

            return result;
          }
          /**
           * @protected
           * @param {?} itemsArrayModified
           * @param {?=} refreshCompletedCallback
           * @param {?=} maxRunTimes
           * @return {?}
           */

        }, {
          key: "refresh_internal",
          value: function refresh_internal(itemsArrayModified) {
            var _this667 = this;

            var refreshCompletedCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
            var maxRunTimes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 2;

            //note: maxRunTimes is to force it to keep recalculating if the previous iteration caused a re-render (different sliced items in viewport or scrollPosition changed).
            //The default of 2x max will probably be accurate enough without causing too large a performance bottleneck
            //The code would typically quit out on the 2nd iteration anyways. The main time it'd think more than 2 runs would be necessary would be for vastly different sized child items or if this is the 1st time the items array was initialized.
            //Without maxRunTimes, If the user is actively scrolling this code would become an infinite loop until they stopped scrolling. This would be okay, except each scroll event would start an additional infinte loop. We want to short-circuit it to prevent this.
            if (itemsArrayModified && this.previousViewPort && this.previousViewPort.scrollStartPosition > 0) {
              //if items were prepended, scroll forward to keep same items visible

              /** @type {?} */
              var oldViewPort = this.previousViewPort;
              /** @type {?} */

              var oldViewPortItems = this.viewPortItems;
              /** @type {?} */

              var oldRefreshCompletedCallback = refreshCompletedCallback;

              refreshCompletedCallback =
              /**
              * @return {?}
              */
              function refreshCompletedCallback() {
                /** @type {?} */
                var scrollLengthDelta = _this667.previousViewPort.scrollLength - oldViewPort.scrollLength;

                if (scrollLengthDelta > 0 && _this667.viewPortItems) {
                  /** @type {?} */
                  var oldStartItem = oldViewPortItems[0];
                  /** @type {?} */

                  var oldStartItemIndex = _this667.items.findIndex(
                  /**
                  * @param {?} x
                  * @return {?}
                  */
                  function (x) {
                    return _this667.compareItems(oldStartItem, x);
                  });

                  if (oldStartItemIndex > _this667.previousViewPort.startIndexWithBuffer) {
                    /** @type {?} */
                    var itemOrderChanged = false;

                    for (var i = 1; i < _this667.viewPortItems.length; ++i) {
                      if (!_this667.compareItems(_this667.items[oldStartItemIndex + i], oldViewPortItems[i])) {
                        itemOrderChanged = true;
                        break;
                      }
                    }

                    if (!itemOrderChanged) {
                      _this667.scrollToPosition(_this667.previousViewPort.scrollStartPosition + scrollLengthDelta, 0, oldRefreshCompletedCallback);

                      return;
                    }
                  }
                }

                if (oldRefreshCompletedCallback) {
                  oldRefreshCompletedCallback();
                }
              };
            }

            this.zone.runOutsideAngular(
            /**
            * @return {?}
            */
            function () {
              requestAnimationFrame(
              /**
              * @return {?}
              */
              function () {
                if (itemsArrayModified) {
                  _this667.resetWrapGroupDimensions();
                }
                /** @type {?} */


                var viewport = _this667.calculateViewport();
                /** @type {?} */


                var startChanged = itemsArrayModified || viewport.startIndex !== _this667.previousViewPort.startIndex;
                /** @type {?} */

                var endChanged = itemsArrayModified || viewport.endIndex !== _this667.previousViewPort.endIndex;
                /** @type {?} */

                var scrollLengthChanged = viewport.scrollLength !== _this667.previousViewPort.scrollLength;
                /** @type {?} */

                var paddingChanged = viewport.padding !== _this667.previousViewPort.padding;
                /** @type {?} */

                var scrollPositionChanged = viewport.scrollStartPosition !== _this667.previousViewPort.scrollStartPosition || viewport.scrollEndPosition !== _this667.previousViewPort.scrollEndPosition || viewport.maxScrollPosition !== _this667.previousViewPort.maxScrollPosition;
                _this667.previousViewPort = viewport;

                if (scrollLengthChanged) {
                  _this667.renderer.setStyle(_this667.invisiblePaddingElementRef.nativeElement, _this667._invisiblePaddingProperty, "".concat(viewport.scrollLength, "px"));
                }

                if (paddingChanged) {
                  if (_this667.useMarginInsteadOfTranslate) {
                    _this667.renderer.setStyle(_this667.contentElementRef.nativeElement, _this667._marginDir, "".concat(viewport.padding, "px"));
                  } else {
                    _this667.renderer.setStyle(_this667.contentElementRef.nativeElement, 'transform', "".concat(_this667._translateDir, "(").concat(viewport.padding, "px)"));

                    _this667.renderer.setStyle(_this667.contentElementRef.nativeElement, 'webkitTransform', "".concat(_this667._translateDir, "(").concat(viewport.padding, "px)"));
                  }
                }

                if (_this667.headerElementRef) {
                  /** @type {?} */
                  var scrollPosition = _this667.getScrollElement()[_this667._scrollType];
                  /** @type {?} */


                  var containerOffset = _this667.getElementsOffset();
                  /** @type {?} */


                  var offset = Math.max(scrollPosition - viewport.padding - containerOffset + _this667.headerElementRef.nativeElement.clientHeight, 0);

                  _this667.renderer.setStyle(_this667.headerElementRef.nativeElement, 'transform', "".concat(_this667._translateDir, "(").concat(offset, "px)"));

                  _this667.renderer.setStyle(_this667.headerElementRef.nativeElement, 'webkitTransform', "".concat(_this667._translateDir, "(").concat(offset, "px)"));
                }
                /** @type {?} */


                var changeEventArg = startChanged || endChanged ? {
                  startIndex: viewport.startIndex,
                  endIndex: viewport.endIndex,
                  scrollStartPosition: viewport.scrollStartPosition,
                  scrollEndPosition: viewport.scrollEndPosition,
                  startIndexWithBuffer: viewport.startIndexWithBuffer,
                  endIndexWithBuffer: viewport.endIndexWithBuffer,
                  maxScrollPosition: viewport.maxScrollPosition
                } : undefined;

                if (startChanged || endChanged || scrollPositionChanged) {
                  /** @type {?} */
                  var handleChanged =
                  /**
                  * @return {?}
                  */
                  function handleChanged() {
                    // update the scroll list to trigger re-render of components in viewport
                    _this667.viewPortItems = viewport.startIndexWithBuffer >= 0 && viewport.endIndexWithBuffer >= 0 ? _this667.items.slice(viewport.startIndexWithBuffer, viewport.endIndexWithBuffer + 1) : [];

                    _this667.vsUpdate.emit(_this667.viewPortItems);

                    if (startChanged) {
                      _this667.vsStart.emit(changeEventArg);
                    }

                    if (endChanged) {
                      _this667.vsEnd.emit(changeEventArg);
                    }

                    if (startChanged || endChanged) {
                      _this667.changeDetectorRef.markForCheck();

                      _this667.vsChange.emit(changeEventArg);
                    }

                    if (maxRunTimes > 0) {
                      _this667.refresh_internal(false, refreshCompletedCallback, maxRunTimes - 1);

                      return;
                    }

                    if (refreshCompletedCallback) {
                      refreshCompletedCallback();
                    }
                  };

                  if (_this667.executeRefreshOutsideAngularZone) {
                    handleChanged();
                  } else {
                    _this667.zone.run(handleChanged);
                  }
                } else {
                  if (maxRunTimes > 0 && (scrollLengthChanged || paddingChanged)) {
                    _this667.refresh_internal(false, refreshCompletedCallback, maxRunTimes - 1);

                    return;
                  }

                  if (refreshCompletedCallback) {
                    refreshCompletedCallback();
                  }
                }
              });
            });
          }
          /**
           * @protected
           * @return {?}
           */

        }, {
          key: "getScrollElement",
          value: function getScrollElement() {
            return this.parentScroll instanceof Window ? document.scrollingElement || document.documentElement || document.body : this.parentScroll || this.element.nativeElement;
          }
          /**
           * @protected
           * @return {?}
           */

        }, {
          key: "addScrollEventHandlers",
          value: function addScrollEventHandlers() {
            var _this668 = this;

            if (this.isAngularUniversalSSR) {
              return;
            }
            /** @type {?} */


            var scrollElement = this.getScrollElement();
            this.removeScrollEventHandlers();
            this.zone.runOutsideAngular(
            /**
            * @return {?}
            */
            function () {
              if (_this668.parentScroll instanceof Window) {
                _this668.disposeScrollHandler = _this668.renderer.listen('window', 'scroll', _this668.onScroll);
                _this668.disposeResizeHandler = _this668.renderer.listen('window', 'resize', _this668.onScroll);
              } else {
                _this668.disposeScrollHandler = _this668.renderer.listen(scrollElement, 'scroll', _this668.onScroll);

                if (_this668._checkResizeInterval > 0) {
                  _this668.checkScrollElementResizedTimer =
                  /** @type {?} */
                  setInterval(
                  /**
                  * @return {?}
                  */
                  function () {
                    _this668.checkScrollElementResized();
                  }, _this668._checkResizeInterval);
                }
              }
            });
          }
          /**
           * @protected
           * @return {?}
           */

        }, {
          key: "removeScrollEventHandlers",
          value: function removeScrollEventHandlers() {
            if (this.checkScrollElementResizedTimer) {
              clearInterval(this.checkScrollElementResizedTimer);
            }

            if (this.disposeScrollHandler) {
              this.disposeScrollHandler();
              this.disposeScrollHandler = undefined;
            }

            if (this.disposeResizeHandler) {
              this.disposeResizeHandler();
              this.disposeResizeHandler = undefined;
            }
          }
          /**
           * @protected
           * @return {?}
           */

        }, {
          key: "getElementsOffset",
          value: function getElementsOffset() {
            if (this.isAngularUniversalSSR) {
              return 0;
            }
            /** @type {?} */


            var offset = 0;

            if (this.containerElementRef && this.containerElementRef.nativeElement) {
              offset += this.containerElementRef.nativeElement[this._offsetType];
            }

            if (this.parentScroll) {
              /** @type {?} */
              var scrollElement = this.getScrollElement();
              /** @type {?} */

              var elementClientRect = this.getElementSize(this.element.nativeElement);
              /** @type {?} */

              var scrollClientRect = this.getElementSize(scrollElement);

              if (this.horizontal) {
                offset += elementClientRect.left - scrollClientRect.left;
              } else {
                offset += elementClientRect.top - scrollClientRect.top;
              }

              if (!(this.parentScroll instanceof Window)) {
                offset += scrollElement[this._scrollType];
              }
            }

            return offset;
          }
          /**
           * @protected
           * @return {?}
           */

        }, {
          key: "countItemsPerWrapGroup",
          value: function countItemsPerWrapGroup() {
            if (this.isAngularUniversalSSR) {
              return Math.round(this.horizontal ? this.ssrViewportHeight / this.ssrChildHeight : this.ssrViewportWidth / this.ssrChildWidth);
            }
            /** @type {?} */


            var propertyName = this.horizontal ? 'offsetLeft' : 'offsetTop';
            /** @type {?} */

            var children = (this.containerElementRef && this.containerElementRef.nativeElement || this.contentElementRef.nativeElement).children;
            /** @type {?} */

            var childrenLength = children ? children.length : 0;

            if (childrenLength === 0) {
              return 1;
            }
            /** @type {?} */


            var firstOffset = children[0][propertyName];
            /** @type {?} */

            var result = 1;

            while (result < childrenLength && firstOffset === children[result][propertyName]) {
              ++result;
            }

            return result;
          }
          /**
           * @protected
           * @return {?}
           */

        }, {
          key: "getScrollStartPosition",
          value: function getScrollStartPosition() {
            /** @type {?} */
            var windowScrollValue = undefined;

            if (this.parentScroll instanceof Window) {
              windowScrollValue = window[this._pageOffsetType];
            }

            return windowScrollValue || this.getScrollElement()[this._scrollType] || 0;
          }
          /**
           * @protected
           * @return {?}
           */

        }, {
          key: "resetWrapGroupDimensions",
          value: function resetWrapGroupDimensions() {
            /** @type {?} */
            var oldWrapGroupDimensions = this.wrapGroupDimensions;
            this.invalidateAllCachedMeasurements();

            if (!this.enableUnequalChildrenSizes || !oldWrapGroupDimensions || oldWrapGroupDimensions.numberOfKnownWrapGroupChildSizes === 0) {
              return;
            }
            /** @type {?} */


            var itemsPerWrapGroup = this.countItemsPerWrapGroup();

            for (var wrapGroupIndex = 0; wrapGroupIndex < oldWrapGroupDimensions.maxChildSizePerWrapGroup.length; ++wrapGroupIndex) {
              /** @type {?} */
              var oldWrapGroupDimension = oldWrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex];

              if (!oldWrapGroupDimension || !oldWrapGroupDimension.items || !oldWrapGroupDimension.items.length) {
                continue;
              }

              if (oldWrapGroupDimension.items.length !== itemsPerWrapGroup) {
                return;
              }
              /** @type {?} */


              var itemsChanged = false;
              /** @type {?} */

              var arrayStartIndex = itemsPerWrapGroup * wrapGroupIndex;

              for (var i = 0; i < itemsPerWrapGroup; ++i) {
                if (!this.compareItems(oldWrapGroupDimension.items[i], this.items[arrayStartIndex + i])) {
                  itemsChanged = true;
                  break;
                }
              }

              if (!itemsChanged) {
                ++this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;
                this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths += oldWrapGroupDimension.childWidth || 0;
                this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights += oldWrapGroupDimension.childHeight || 0;
                this.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex] = oldWrapGroupDimension;
              }
            }
          }
          /**
           * @protected
           * @return {?}
           */

        }, {
          key: "calculateDimensions",
          value: function calculateDimensions() {
            /** @type {?} */
            var scrollElement = this.getScrollElement();
            /** @type {?} */

            var maxCalculatedScrollBarSize = 25;
            this.calculatedScrollbarHeight = Math.max(Math.min(scrollElement.offsetHeight - scrollElement.clientHeight, maxCalculatedScrollBarSize), this.calculatedScrollbarHeight);
            this.calculatedScrollbarWidth = Math.max(Math.min(scrollElement.offsetWidth - scrollElement.clientWidth, maxCalculatedScrollBarSize), this.calculatedScrollbarWidth);
            /** @type {?} */

            var viewportWidth = scrollElement.offsetWidth - (this.scrollbarWidth || this.calculatedScrollbarWidth || (this.horizontal ? 0 : maxCalculatedScrollBarSize));
            /** @type {?} */

            var viewportHeight = scrollElement.offsetHeight - (this.scrollbarHeight || this.calculatedScrollbarHeight || (this.horizontal ? maxCalculatedScrollBarSize : 0));
            /** @type {?} */

            var content = this.containerElementRef && this.containerElementRef.nativeElement || this.contentElementRef.nativeElement;
            /** @type {?} */

            var itemsPerWrapGroup = this.countItemsPerWrapGroup();
            /** @type {?} */

            var wrapGroupsPerPage;
            /** @type {?} */

            var defaultChildWidth;
            /** @type {?} */

            var defaultChildHeight;

            if (this.isAngularUniversalSSR) {
              viewportWidth = this.ssrViewportWidth;
              viewportHeight = this.ssrViewportHeight;
              defaultChildWidth = this.ssrChildWidth;
              defaultChildHeight = this.ssrChildHeight;
              /** @type {?} */

              var itemsPerRow = Math.max(Math.ceil(viewportWidth / defaultChildWidth), 1);
              /** @type {?} */

              var itemsPerCol = Math.max(Math.ceil(viewportHeight / defaultChildHeight), 1);
              wrapGroupsPerPage = this.horizontal ? itemsPerRow : itemsPerCol;
            } else if (!this.enableUnequalChildrenSizes) {
              if (content.children.length > 0) {
                if (!this.childWidth || !this.childHeight) {
                  if (!this.minMeasuredChildWidth && viewportWidth > 0) {
                    this.minMeasuredChildWidth = viewportWidth;
                  }

                  if (!this.minMeasuredChildHeight && viewportHeight > 0) {
                    this.minMeasuredChildHeight = viewportHeight;
                  }
                }
                /** @type {?} */


                var child = content.children[0];
                /** @type {?} */

                var clientRect = this.getElementSize(child);
                this.minMeasuredChildWidth = Math.min(this.minMeasuredChildWidth, clientRect.width);
                this.minMeasuredChildHeight = Math.min(this.minMeasuredChildHeight, clientRect.height);
              }

              defaultChildWidth = this.childWidth || this.minMeasuredChildWidth || viewportWidth;
              defaultChildHeight = this.childHeight || this.minMeasuredChildHeight || viewportHeight;
              /** @type {?} */

              var _itemsPerRow = Math.max(Math.ceil(viewportWidth / defaultChildWidth), 1);
              /** @type {?} */


              var _itemsPerCol = Math.max(Math.ceil(viewportHeight / defaultChildHeight), 1);

              wrapGroupsPerPage = this.horizontal ? _itemsPerRow : _itemsPerCol;
            } else {
              /** @type {?} */
              var scrollOffset = scrollElement[this._scrollType] - (this.previousViewPort ? this.previousViewPort.padding : 0);
              /** @type {?} */

              var arrayStartIndex = this.previousViewPort.startIndexWithBuffer || 0;
              /** @type {?} */

              var wrapGroupIndex = Math.ceil(arrayStartIndex / itemsPerWrapGroup);
              /** @type {?} */

              var maxWidthForWrapGroup = 0;
              /** @type {?} */

              var maxHeightForWrapGroup = 0;
              /** @type {?} */

              var sumOfVisibleMaxWidths = 0;
              /** @type {?} */

              var sumOfVisibleMaxHeights = 0;
              wrapGroupsPerPage = 0;

              for (var i = 0; i < content.children.length; ++i) {
                ++arrayStartIndex;
                /** @type {?} */

                var _child = content.children[i];
                /** @type {?} */

                var _clientRect = this.getElementSize(_child);

                maxWidthForWrapGroup = Math.max(maxWidthForWrapGroup, _clientRect.width);
                maxHeightForWrapGroup = Math.max(maxHeightForWrapGroup, _clientRect.height);

                if (arrayStartIndex % itemsPerWrapGroup === 0) {
                  /** @type {?} */
                  var oldValue = this.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex];

                  if (oldValue) {
                    --this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;
                    this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths -= oldValue.childWidth || 0;
                    this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights -= oldValue.childHeight || 0;
                  }

                  ++this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;
                  /** @type {?} */

                  var items = this.items.slice(arrayStartIndex - itemsPerWrapGroup, arrayStartIndex);
                  this.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex] = {
                    childWidth: maxWidthForWrapGroup,
                    childHeight: maxHeightForWrapGroup,
                    items: items
                  };
                  this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths += maxWidthForWrapGroup;
                  this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights += maxHeightForWrapGroup;

                  if (this.horizontal) {
                    /** @type {?} */
                    var maxVisibleWidthForWrapGroup = Math.min(maxWidthForWrapGroup, Math.max(viewportWidth - sumOfVisibleMaxWidths, 0));

                    if (scrollOffset > 0) {
                      /** @type {?} */
                      var scrollOffsetToRemove = Math.min(scrollOffset, maxVisibleWidthForWrapGroup);
                      maxVisibleWidthForWrapGroup -= scrollOffsetToRemove;
                      scrollOffset -= scrollOffsetToRemove;
                    }

                    sumOfVisibleMaxWidths += maxVisibleWidthForWrapGroup;

                    if (maxVisibleWidthForWrapGroup > 0 && viewportWidth >= sumOfVisibleMaxWidths) {
                      ++wrapGroupsPerPage;
                    }
                  } else {
                    /** @type {?} */
                    var maxVisibleHeightForWrapGroup = Math.min(maxHeightForWrapGroup, Math.max(viewportHeight - sumOfVisibleMaxHeights, 0));

                    if (scrollOffset > 0) {
                      /** @type {?} */
                      var _scrollOffsetToRemove = Math.min(scrollOffset, maxVisibleHeightForWrapGroup);

                      maxVisibleHeightForWrapGroup -= _scrollOffsetToRemove;
                      scrollOffset -= _scrollOffsetToRemove;
                    }

                    sumOfVisibleMaxHeights += maxVisibleHeightForWrapGroup;

                    if (maxVisibleHeightForWrapGroup > 0 && viewportHeight >= sumOfVisibleMaxHeights) {
                      ++wrapGroupsPerPage;
                    }
                  }

                  ++wrapGroupIndex;
                  maxWidthForWrapGroup = 0;
                  maxHeightForWrapGroup = 0;
                }
              }
              /** @type {?} */


              var averageChildWidth = this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths / this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;
              /** @type {?} */

              var averageChildHeight = this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights / this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;
              defaultChildWidth = this.childWidth || averageChildWidth || viewportWidth;
              defaultChildHeight = this.childHeight || averageChildHeight || viewportHeight;

              if (this.horizontal) {
                if (viewportWidth > sumOfVisibleMaxWidths) {
                  wrapGroupsPerPage += Math.ceil((viewportWidth - sumOfVisibleMaxWidths) / defaultChildWidth);
                }
              } else {
                if (viewportHeight > sumOfVisibleMaxHeights) {
                  wrapGroupsPerPage += Math.ceil((viewportHeight - sumOfVisibleMaxHeights) / defaultChildHeight);
                }
              }
            }
            /** @type {?} */


            var itemCount = this.items.length;
            /** @type {?} */

            var itemsPerPage = itemsPerWrapGroup * wrapGroupsPerPage;
            /** @type {?} */

            var pageCount_fractional = itemCount / itemsPerPage;
            /** @type {?} */

            var numberOfWrapGroups = Math.ceil(itemCount / itemsPerWrapGroup);
            /** @type {?} */

            var scrollLength = 0;
            /** @type {?} */

            var defaultScrollLengthPerWrapGroup = this.horizontal ? defaultChildWidth : defaultChildHeight;

            if (this.enableUnequalChildrenSizes) {
              /** @type {?} */
              var numUnknownChildSizes = 0;

              for (var _i25 = 0; _i25 < numberOfWrapGroups; ++_i25) {
                /** @type {?} */
                var childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[_i25] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[_i25][this._childScrollDim];

                if (childSize) {
                  scrollLength += childSize;
                } else {
                  ++numUnknownChildSizes;
                }
              }

              scrollLength += Math.round(numUnknownChildSizes * defaultScrollLengthPerWrapGroup);
            } else {
              scrollLength = numberOfWrapGroups * defaultScrollLengthPerWrapGroup;
            }

            if (this.headerElementRef) {
              scrollLength += this.headerElementRef.nativeElement.clientHeight;
            }
            /** @type {?} */


            var viewportLength = this.horizontal ? viewportWidth : viewportHeight;
            /** @type {?} */

            var maxScrollPosition = Math.max(scrollLength - viewportLength, 0);
            return {
              itemCount: itemCount,
              itemsPerWrapGroup: itemsPerWrapGroup,
              wrapGroupsPerPage: wrapGroupsPerPage,
              itemsPerPage: itemsPerPage,
              pageCount_fractional: pageCount_fractional,
              childWidth: defaultChildWidth,
              childHeight: defaultChildHeight,
              scrollLength: scrollLength,
              viewportLength: viewportLength,
              maxScrollPosition: maxScrollPosition
            };
          }
          /**
           * @protected
           * @param {?} arrayStartIndexWithBuffer
           * @param {?} dimensions
           * @return {?}
           */

        }, {
          key: "calculatePadding",
          value: function calculatePadding(arrayStartIndexWithBuffer, dimensions) {
            if (dimensions.itemCount === 0) {
              return 0;
            }
            /** @type {?} */


            var defaultScrollLengthPerWrapGroup = dimensions[this._childScrollDim];
            /** @type {?} */

            var startingWrapGroupIndex = Math.floor(arrayStartIndexWithBuffer / dimensions.itemsPerWrapGroup) || 0;

            if (!this.enableUnequalChildrenSizes) {
              return defaultScrollLengthPerWrapGroup * startingWrapGroupIndex;
            }
            /** @type {?} */


            var numUnknownChildSizes = 0;
            /** @type {?} */

            var result = 0;

            for (var i = 0; i < startingWrapGroupIndex; ++i) {
              /** @type {?} */
              var childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];

              if (childSize) {
                result += childSize;
              } else {
                ++numUnknownChildSizes;
              }
            }

            result += Math.round(numUnknownChildSizes * defaultScrollLengthPerWrapGroup);
            return result;
          }
          /**
           * @protected
           * @param {?} scrollPosition
           * @param {?} dimensions
           * @return {?}
           */

        }, {
          key: "calculatePageInfo",
          value: function calculatePageInfo(scrollPosition, dimensions) {
            /** @type {?} */
            var scrollPercentage = 0;

            if (this.enableUnequalChildrenSizes) {
              /** @type {?} */
              var numberOfWrapGroups = Math.ceil(dimensions.itemCount / dimensions.itemsPerWrapGroup);
              /** @type {?} */

              var totalScrolledLength = 0;
              /** @type {?} */

              var defaultScrollLengthPerWrapGroup = dimensions[this._childScrollDim];

              for (var i = 0; i < numberOfWrapGroups; ++i) {
                /** @type {?} */
                var childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];

                if (childSize) {
                  totalScrolledLength += childSize;
                } else {
                  totalScrolledLength += defaultScrollLengthPerWrapGroup;
                }

                if (scrollPosition < totalScrolledLength) {
                  scrollPercentage = i / numberOfWrapGroups;
                  break;
                }
              }
            } else {
              scrollPercentage = scrollPosition / dimensions.scrollLength;
            }
            /** @type {?} */


            var startingArrayIndex_fractional = Math.min(Math.max(scrollPercentage * dimensions.pageCount_fractional, 0), dimensions.pageCount_fractional) * dimensions.itemsPerPage;
            /** @type {?} */

            var maxStart = dimensions.itemCount - dimensions.itemsPerPage - 1;
            /** @type {?} */

            var arrayStartIndex = Math.min(Math.floor(startingArrayIndex_fractional), maxStart);
            arrayStartIndex -= arrayStartIndex % dimensions.itemsPerWrapGroup; // round down to start of wrapGroup

            if (this.stripedTable) {
              /** @type {?} */
              var bufferBoundary = 2 * dimensions.itemsPerWrapGroup;

              if (arrayStartIndex % bufferBoundary !== 0) {
                arrayStartIndex = Math.max(arrayStartIndex - arrayStartIndex % bufferBoundary, 0);
              }
            }
            /** @type {?} */


            var arrayEndIndex = Math.ceil(startingArrayIndex_fractional) + dimensions.itemsPerPage - 1;
            /** @type {?} */

            var endIndexWithinWrapGroup = (arrayEndIndex + 1) % dimensions.itemsPerWrapGroup;

            if (endIndexWithinWrapGroup > 0) {
              arrayEndIndex += dimensions.itemsPerWrapGroup - endIndexWithinWrapGroup; // round up to end of wrapGroup
            }

            if (isNaN(arrayStartIndex)) {
              arrayStartIndex = 0;
            }

            if (isNaN(arrayEndIndex)) {
              arrayEndIndex = 0;
            }

            arrayStartIndex = Math.min(Math.max(arrayStartIndex, 0), dimensions.itemCount - 1);
            arrayEndIndex = Math.min(Math.max(arrayEndIndex, 0), dimensions.itemCount - 1);
            /** @type {?} */

            var bufferSize = this.bufferAmount * dimensions.itemsPerWrapGroup;
            /** @type {?} */

            var startIndexWithBuffer = Math.min(Math.max(arrayStartIndex - bufferSize, 0), dimensions.itemCount - 1);
            /** @type {?} */

            var endIndexWithBuffer = Math.min(Math.max(arrayEndIndex + bufferSize, 0), dimensions.itemCount - 1);
            return {
              startIndex: arrayStartIndex,
              endIndex: arrayEndIndex,
              startIndexWithBuffer: startIndexWithBuffer,
              endIndexWithBuffer: endIndexWithBuffer,
              scrollStartPosition: scrollPosition,
              scrollEndPosition: scrollPosition + dimensions.viewportLength,
              maxScrollPosition: dimensions.maxScrollPosition
            };
          }
          /**
           * @protected
           * @return {?}
           */

        }, {
          key: "calculateViewport",
          value: function calculateViewport() {
            /** @type {?} */
            var dimensions = this.calculateDimensions();
            /** @type {?} */

            var offset = this.getElementsOffset();
            /** @type {?} */

            var scrollStartPosition = this.getScrollStartPosition();

            if (scrollStartPosition > dimensions.scrollLength + offset && !(this.parentScroll instanceof Window)) {
              scrollStartPosition = dimensions.scrollLength;
            } else {
              scrollStartPosition -= offset;
            }

            scrollStartPosition = Math.max(0, scrollStartPosition);
            /** @type {?} */

            var pageInfo = this.calculatePageInfo(scrollStartPosition, dimensions);
            /** @type {?} */

            var newPadding = this.calculatePadding(pageInfo.startIndexWithBuffer, dimensions);
            /** @type {?} */

            var newScrollLength = dimensions.scrollLength;
            return {
              startIndex: pageInfo.startIndex,
              endIndex: pageInfo.endIndex,
              startIndexWithBuffer: pageInfo.startIndexWithBuffer,
              endIndexWithBuffer: pageInfo.endIndexWithBuffer,
              padding: Math.round(newPadding),
              scrollLength: Math.round(newScrollLength),
              scrollStartPosition: pageInfo.scrollStartPosition,
              scrollEndPosition: pageInfo.scrollEndPosition,
              maxScrollPosition: pageInfo.maxScrollPosition
            };
          }
        }]);

        return VirtualScrollerComponent;
      }();

      VirtualScrollerComponent.ɵfac = function VirtualScrollerComponent_Factory(t) {
        return new (t || VirtualScrollerComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"]('virtual-scroller-default-options', 8));
      };

      VirtualScrollerComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: VirtualScrollerComponent,
        selectors: [["virtual-scroller"], ["", "virtualScroller", ""]],
        contentQueries: function VirtualScrollerComponent_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, _c0, 1, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, _c1, 1, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.headerElementRef = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.containerElementRef = _t.first);
          }
        },
        viewQuery: function VirtualScrollerComponent_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](_c2, 1, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](_c3, 1, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.contentElementRef = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.invisiblePaddingElementRef = _t.first);
          }
        },
        hostVars: 6,
        hostBindings: function VirtualScrollerComponent_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("horizontal", ctx.horizontal)("vertical", !ctx.horizontal)("selfScroll", !ctx.parentScroll);
          }
        },
        inputs: {
          executeRefreshOutsideAngularZone: "executeRefreshOutsideAngularZone",
          useMarginInsteadOfTranslate: "useMarginInsteadOfTranslate",
          ssrViewportWidth: "ssrViewportWidth",
          ssrViewportHeight: "ssrViewportHeight",
          compareItems: "compareItems",
          scrollThrottlingTime: "scrollThrottlingTime",
          scrollDebounceTime: "scrollDebounceTime",
          scrollAnimationTime: "scrollAnimationTime",
          scrollbarWidth: "scrollbarWidth",
          scrollbarHeight: "scrollbarHeight",
          checkResizeInterval: "checkResizeInterval",
          resizeBypassRefreshThreshold: "resizeBypassRefreshThreshold",
          modifyOverflowStyleOfParentScroll: "modifyOverflowStyleOfParentScroll",
          stripedTable: "stripedTable",
          horizontal: "horizontal",
          enableUnequalChildrenSizes: "enableUnequalChildrenSizes",
          bufferAmount: "bufferAmount",
          items: "items",
          parentScroll: "parentScroll",
          childWidth: "childWidth",
          childHeight: "childHeight",
          ssrChildWidth: "ssrChildWidth",
          ssrChildHeight: "ssrChildHeight"
        },
        outputs: {
          vsUpdate: "vsUpdate",
          vsChange: "vsChange",
          vsStart: "vsStart",
          vsEnd: "vsEnd"
        },
        exportAs: ["virtualScroller"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]],
        ngContentSelectors: _c4,
        decls: 5,
        vars: 0,
        consts: [[1, "total-padding"], ["invisiblePadding", ""], [1, "scrollable-content"], ["content", ""]],
        template: function VirtualScrollerComponent_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div", 0, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "div", 2, 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](4);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
          }
        },
        styles: ["[_nghost-%COMP%] {\n      position: relative;\n\t  display: block;\n      -webkit-overflow-scrolling: touch;\n    }\n\t\n\t.horizontal.selfScroll[_nghost-%COMP%] {\n      overflow-y: visible;\n      overflow-x: auto;\n\t}\n\t.vertical.selfScroll[_nghost-%COMP%] {\n      overflow-y: auto;\n      overflow-x: visible;\n\t}\n\t\n    .scrollable-content[_ngcontent-%COMP%] {\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 100%;\n      max-width: 100vw;\n      max-height: 100vh;\n      position: absolute;\n    }\n\n\t.scrollable-content[_ngcontent-%COMP%]     > * {\n\t\tbox-sizing: border-box;\n\t}\n\t\n\t.horizontal[_nghost-%COMP%] {\n\t\twhite-space: nowrap;\n\t}\n\t\n\t.horizontal[_nghost-%COMP%]   .scrollable-content[_ngcontent-%COMP%] {\n\t\tdisplay: flex;\n\t}\n\t\n\t.horizontal[_nghost-%COMP%]   .scrollable-content[_ngcontent-%COMP%]     > * {\n\t\tflex-shrink: 0;\n\t\tflex-grow: 0;\n\t\twhite-space: initial;\n\t}\n\t\n    .total-padding[_ngcontent-%COMP%] {\n      width: 1px;\n      opacity: 0;\n    }\n    \n    .horizontal[_nghost-%COMP%]   .total-padding[_ngcontent-%COMP%] {\n      height: 100%;\n    }"]
      });
      /** @nocollapse */

      VirtualScrollerComponent.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }, {
          type: Object,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]]
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: ['virtual-scroller-default-options']
          }]
        }];
      };

      VirtualScrollerComponent.propDecorators = {
        executeRefreshOutsideAngularZone: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        enableUnequalChildrenSizes: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        useMarginInsteadOfTranslate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        modifyOverflowStyleOfParentScroll: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        stripedTable: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        scrollbarWidth: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        scrollbarHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        childWidth: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        childHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        ssrChildWidth: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        ssrChildHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        ssrViewportWidth: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        ssrViewportHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        bufferAmount: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        scrollAnimationTime: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        resizeBypassRefreshThreshold: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        scrollThrottlingTime: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        scrollDebounceTime: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        checkResizeInterval: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        items: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        compareItems: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        horizontal: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        parentScroll: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        vsUpdate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        vsChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        vsStart: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        vsEnd: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        contentElementRef: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
          args: ['content', {
            read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"],
            "static": false
          }]
        }],
        invisiblePaddingElementRef: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
          args: ['invisiblePadding', {
            read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"],
            "static": false
          }]
        }],
        headerElementRef: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: ['header', {
            read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"],
            "static": false
          }]
        }],
        containerElementRef: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: ['container', {
            read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"],
            "static": false
          }]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](VirtualScrollerComponent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'virtual-scroller,[virtualScroller]',
            exportAs: 'virtualScroller',
            template: "\n    <div class=\"total-padding\" #invisiblePadding></div>\n    <div class=\"scrollable-content\" #content>\n      <ng-content></ng-content>\n    </div>\n  ",
            host: {
              '[class.horizontal]': "horizontal",
              '[class.vertical]': "!horizontal",
              '[class.selfScroll]': "!parentScroll"
            },
            styles: ["\n    :host {\n      position: relative;\n\t  display: block;\n      -webkit-overflow-scrolling: touch;\n    }\n\t\n\t:host.horizontal.selfScroll {\n      overflow-y: visible;\n      overflow-x: auto;\n\t}\n\t:host.vertical.selfScroll {\n      overflow-y: auto;\n      overflow-x: visible;\n\t}\n\t\n    .scrollable-content {\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 100%;\n      max-width: 100vw;\n      max-height: 100vh;\n      position: absolute;\n    }\n\n\t.scrollable-content ::ng-deep > * {\n\t\tbox-sizing: border-box;\n\t}\n\t\n\t:host.horizontal {\n\t\twhite-space: nowrap;\n\t}\n\t\n\t:host.horizontal .scrollable-content {\n\t\tdisplay: flex;\n\t}\n\t\n\t:host.horizontal .scrollable-content ::ng-deep > * {\n\t\tflex-shrink: 0;\n\t\tflex-grow: 0;\n\t\twhite-space: initial;\n\t}\n\t\n    .total-padding {\n      width: 1px;\n      opacity: 0;\n    }\n    \n    :host.horizontal .total-padding {\n      height: 100%;\n    }\n  "]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }, {
            type: Object,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]]
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: ['virtual-scroller-default-options']
            }]
          }];
        }, {
          executeRefreshOutsideAngularZone: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          useMarginInsteadOfTranslate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          ssrViewportWidth: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          ssrViewportHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          compareItems: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          vsUpdate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          vsChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          vsStart: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          vsEnd: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          scrollThrottlingTime: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          scrollDebounceTime: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          scrollAnimationTime: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          scrollbarWidth: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          scrollbarHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          checkResizeInterval: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          resizeBypassRefreshThreshold: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          modifyOverflowStyleOfParentScroll: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          stripedTable: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          horizontal: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          enableUnequalChildrenSizes: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          bufferAmount: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          items: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          parentScroll: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          childWidth: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          childHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          ssrChildWidth: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          ssrChildHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          contentElementRef: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
            args: ['content', {
              read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"],
              "static": false
            }]
          }],
          invisiblePaddingElementRef: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
            args: ['invisiblePadding', {
              read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"],
              "static": false
            }]
          }],
          headerElementRef: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: ['header', {
              read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"],
              "static": false
            }]
          }],
          containerElementRef: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: ['container', {
              read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"],
              "static": false
            }]
          }]
        });
      })();

      if (false) {}

      var VirtualScrollerModule = function VirtualScrollerModule() {
        _classCallCheck2(this, VirtualScrollerModule);
      };

      VirtualScrollerModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: VirtualScrollerModule
      });
      VirtualScrollerModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function VirtualScrollerModule_Factory(t) {
          return new (t || VirtualScrollerModule)();
        },
        providers: [{
          provide: 'virtual-scroller-default-options',
          useFactory: VIRTUAL_SCROLLER_DEFAULT_OPTIONS_FACTORY
        }],
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](VirtualScrollerModule, {
          declarations: function declarations() {
            return [VirtualScrollerComponent];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"]];
          },
          exports: function exports() {
            return [VirtualScrollerComponent];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](VirtualScrollerModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            exports: [VirtualScrollerComponent],
            declarations: [VirtualScrollerComponent],
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"]],
            providers: [{
              provide: 'virtual-scroller-default-options',
              useFactory: VIRTUAL_SCROLLER_DEFAULT_OPTIONS_FACTORY
            }]
          }]
        }], null, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /** @type {?} */


      var DROPDOWN_CONTROL_VALUE_ACCESSOR = {
        provide: _angular_forms__WEBPACK_IMPORTED_MODULE_1__["NG_VALUE_ACCESSOR"],
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(
        /**
        * @return {?}
        */
        function () {
          return AngularMultiSelect;
        }),
        multi: true
      };
      /** @type {?} */

      var DROPDOWN_CONTROL_VALIDATION = {
        provide: _angular_forms__WEBPACK_IMPORTED_MODULE_1__["NG_VALIDATORS"],
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(
        /**
        * @return {?}
        */
        function () {
          return AngularMultiSelect;
        }),
        multi: true
      };
      /** @type {?} */

      var noop =
      /**
      * @return {?}
      */
      function noop() {};

      var ɵ0 = noop;

      var AngularMultiSelect = /*#__PURE__*/function () {
        /**
         * @param {?} _elementRef
         * @param {?} cdr
         * @param {?} ds
         */
        function AngularMultiSelect(_elementRef, cdr, ds) {
          var _this669 = this;

          _classCallCheck2(this, AngularMultiSelect);

          this._elementRef = _elementRef;
          this.cdr = cdr;
          this.ds = ds;
          this.onSelect = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.onDeSelect = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.onSelectAll = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.onDeSelectAll = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.onOpen = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.onClose = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.onScrollToEnd = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.onFilterSelectAll = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.onFilterDeSelectAll = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.onAddFilterNewItem = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.onGroupSelect = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.onGroupDeSelect = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.virtualdata = [];
          this.searchTerm$ = new rxjs__WEBPACK_IMPORTED_MODULE_3__["Subject"]();
          this.isActive = false;
          this.isSelectAll = false;
          this.isFilterSelectAll = false;
          this.isInfiniteFilterSelectAll = false;
          this.chunkIndex = [];
          this.cachedItems = [];
          this.groupCachedItems = [];
          this.itemHeight = 41.6;
          this.filterLength = 0;
          this.infiniteFilterLength = 0;
          this.dropdownListYOffset = 0;
          this.dropDownWidth = 0;
          this.dropDownTop = 0;
          this.dropDownLeft = 0;
          this.id = Math.random().toString(36).substring(2);
          this.defaultSettings = {
            singleSelection: false,
            text: 'Select',
            enableCheckAll: true,
            selectAllText: 'Select All',
            unSelectAllText: 'UnSelect All',
            filterSelectAllText: 'Select all filtered results',
            filterUnSelectAllText: 'UnSelect all filtered results',
            enableSearchFilter: false,
            searchBy: [],
            maxHeight: 300,
            badgeShowLimit: 999999999999,
            classes: '',
            disabled: false,
            searchPlaceholderText: 'Search',
            showCheckbox: true,
            noDataLabel: 'No Data Available',
            searchAutofocus: true,
            lazyLoading: false,
            labelKey: 'itemName',
            primaryKey: 'id',
            position: 'bottom',
            autoPosition: true,
            enableFilterSelectAll: true,
            selectGroup: false,
            addNewItemOnFilter: false,
            addNewButtonText: "Add",
            escapeToClose: true,
            clearAll: true,
            tagToBody: true
          };
          this.randomSize = true;
          this.filteredList = [];
          this.virtualScroollInit = false;
          this.isDisabledItemPresent = false;
          this.onTouchedCallback = noop;
          this.onChangeCallback = noop;
          this.searchTerm$.asObservable().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["debounceTime"])(1000), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["distinctUntilChanged"])(), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["tap"])(
          /**
          * @param {?} term
          * @return {?}
          */
          function (term) {
            return term;
          })).subscribe(
          /**
          * @param {?} val
          * @return {?}
          */
          function (val) {
            _this669.filterInfiniteList(val);
          });
        }
        /**
         * @param {?} event
         * @return {?}
         */


        _createClass2(AngularMultiSelect, [{
          key: "onEscapeDown",
          value: function onEscapeDown(event) {
            if (this.settings.escapeToClose) {
              this.closeDropdown();
            }
          }
          /**
           * @param {?} event
           * @return {?}
           */

        }, {
          key: "onScroll",
          value: function onScroll(event) {
            if (this.isActive) {
              this.closeDropdown();
              /** @type {?} */

              var elem = this.cuppaDropdown.nativeElement;

              if (this.settings.autoPosition) {
                this.dropDownTop = elem.getBoundingClientRect().y + elem.clientHeight + 1;
              }

              this.dropDownLeft = elem.getBoundingClientRect().x;
            }
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            var _this670 = this;

            this.settings = Object.assign(this.defaultSettings, this.settings);
            this.cachedItems = this.cloneArray(this.data);

            if (this.settings.position == 'top') {
              setTimeout(
              /**
              * @return {?}
              */
              function () {
                _this670.selectedListHeight = {
                  val: 0
                };
                _this670.selectedListHeight.val = _this670.selectedListElem.nativeElement.clientHeight;
              });
            }

            this.subscription = this.ds.getData().subscribe(
            /**
            * @param {?} data
            * @return {?}
            */
            function (data) {
              if (data) {
                /** @type {?} */
                var len = 0;
                data.forEach(
                /**
                * @param {?} obj
                * @param {?} i
                * @return {?}
                */
                function (obj, i) {
                  if (obj.disabled) {
                    _this670.isDisabledItemPresent = true;
                  }

                  if (!obj.hasOwnProperty('grpTitle')) {
                    len++;
                  }
                });
                _this670.filterLength = len;

                _this670.onFilterChange(data);
              }
            });
            setTimeout(
            /**
            * @return {?}
            */
            function () {
              _this670.calculateDropdownDirection();
            });
            this.virtualScroollInit = false;
          }
          /**
           * @param {?} changes
           * @return {?}
           */

        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            if (changes.data && !changes.data.firstChange) {
              if (this.settings.groupBy) {
                this.groupedData = this.transformData(this.data, this.settings.groupBy);

                if (this.data.length == 0) {
                  this.selectedItems = [];
                }

                this.groupCachedItems = this.cloneArray(this.groupedData);
              }

              this.cachedItems = this.cloneArray(this.data);
            }

            if (changes.settings && !changes.settings.firstChange) {
              this.settings = Object.assign(this.defaultSettings, this.settings);
            }

            if (changes.loading) {}

            if (this.settings.lazyLoading && this.virtualScroollInit && changes.data) {
              this.virtualdata = changes.data.currentValue;
            }
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngDoCheck",
          value: function ngDoCheck() {
            if (this.selectedItems) {
              if (this.selectedItems.length == 0 || this.data.length == 0 || this.selectedItems.length < this.data.length) {
                this.isSelectAll = false;
              }
            }
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngAfterViewInit",
          value: function ngAfterViewInit() {
            if (this.settings.lazyLoading) {// this._elementRef.nativeElement.getElementsByClassName("lazyContainer")[0].addEventListener('scroll', this.onScroll.bind(this));
            }
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngAfterViewChecked",
          value: function ngAfterViewChecked() {
            if (this.selectedListElem.nativeElement.clientHeight && this.settings.position == 'top' && this.selectedListHeight) {
              this.selectedListHeight.val = this.selectedListElem.nativeElement.clientHeight;
              this.cdr.detectChanges();
            }

            this.calculateDropdownDirection();
          }
          /**
           * @param {?} item
           * @param {?} index
           * @param {?} evt
           * @return {?}
           */

        }, {
          key: "onItemClick",
          value: function onItemClick(item, index, evt) {
            if (item.disabled) {
              return false;
            }

            if (this.settings.disabled) {
              return false;
            }
            /** @type {?} */


            var found = this.isSelected(item);
            /** @type {?} */

            var limit = this.selectedItems.length < this.settings.limitSelection ? true : false;

            if (!found) {
              if (this.settings.limitSelection) {
                if (limit) {
                  this.addSelected(item);
                  this.onSelect.emit(item);
                }
              } else {
                this.addSelected(item);
                this.onSelect.emit(item);
              }
            } else {
              this.removeSelected(item);
              this.onDeSelect.emit(item);
            }

            if (this.isSelectAll || this.data.length > this.selectedItems.length) {
              this.isSelectAll = false;
            }

            if (this.data.length == this.selectedItems.length) {
              this.isSelectAll = true;
            }

            if (this.settings.groupBy) {
              this.updateGroupInfo(item);
            }
          }
          /**
           * @param {?} c
           * @return {?}
           */

        }, {
          key: "validate",
          value: function validate(c) {
            return null;
          }
          /**
           * @param {?} value
           * @return {?}
           */

        }, {
          key: "writeValue",
          value: function writeValue(value) {
            if (value !== undefined && value !== null && value !== '') {
              if (this.settings.singleSelection) {
                if (this.settings.groupBy) {
                  this.groupedData = this.transformData(this.data, this.settings.groupBy);
                  this.groupCachedItems = this.cloneArray(this.groupedData);
                  this.selectedItems = [value[0]];
                } else {
                  try {
                    if (value.length > 1) {
                      this.selectedItems = [value[0]];
                      throw new MyException(404, {
                        "msg": "Single Selection Mode, Selected Items cannot have more than one item."
                      });
                    } else {
                      this.selectedItems = value;
                    }
                  } catch (e) {
                    console.error(e.body.msg);
                  }
                }
              } else {
                if (this.settings.limitSelection) {
                  this.selectedItems = value.slice(0, this.settings.limitSelection);
                } else {
                  this.selectedItems = value;
                }

                if (this.selectedItems.length === this.data.length && this.data.length > 0) {
                  this.isSelectAll = true;
                }

                if (this.settings.groupBy) {
                  this.groupedData = this.transformData(this.data, this.settings.groupBy);
                  this.groupCachedItems = this.cloneArray(this.groupedData);
                }
              }
            } else {
              this.selectedItems = [];
            }
          } //From ControlValueAccessor interface

          /**
           * @param {?} fn
           * @return {?}
           */

        }, {
          key: "registerOnChange",
          value: function registerOnChange(fn) {
            this.onChangeCallback = fn;
          } //From ControlValueAccessor interface

          /**
           * @param {?} fn
           * @return {?}
           */

        }, {
          key: "registerOnTouched",
          value: function registerOnTouched(fn) {
            this.onTouchedCallback = fn;
          }
          /**
           * @param {?} index
           * @param {?} item
           * @return {?}
           */

        }, {
          key: "trackByFn",
          value: function trackByFn(index, item) {
            return item[this.settings.primaryKey];
          }
          /**
           * @param {?} clickedItem
           * @return {?}
           */

        }, {
          key: "isSelected",
          value: function isSelected(clickedItem) {
            var _this671 = this;

            if (clickedItem.disabled) {
              return false;
            }
            /** @type {?} */


            var found = false;
            this.selectedItems && this.selectedItems.forEach(
            /**
            * @param {?} item
            * @return {?}
            */
            function (item) {
              if (clickedItem[_this671.settings.primaryKey] === item[_this671.settings.primaryKey]) {
                found = true;
              }
            });
            return found;
          }
          /**
           * @param {?} item
           * @return {?}
           */

        }, {
          key: "addSelected",
          value: function addSelected(item) {
            if (item.disabled) {
              return;
            }

            if (this.settings.singleSelection) {
              this.selectedItems = [];
              this.selectedItems.push(item);
              this.closeDropdown();
            } else this.selectedItems.push(item);

            this.onChangeCallback(this.selectedItems);
            this.onTouchedCallback(this.selectedItems);
          }
          /**
           * @param {?} clickedItem
           * @return {?}
           */

        }, {
          key: "removeSelected",
          value: function removeSelected(clickedItem) {
            var _this672 = this;

            this.selectedItems && this.selectedItems.forEach(
            /**
            * @param {?} item
            * @return {?}
            */
            function (item) {
              if (clickedItem[_this672.settings.primaryKey] === item[_this672.settings.primaryKey]) {
                _this672.selectedItems.splice(_this672.selectedItems.indexOf(item), 1);
              }
            });
            this.onChangeCallback(this.selectedItems);
            this.onTouchedCallback(this.selectedItems);
          }
          /**
           * @param {?} evt
           * @return {?}
           */

        }, {
          key: "toggleDropdown",
          value: function toggleDropdown(evt) {
            var _this673 = this;

            if (this.settings.disabled) {
              return false;
            }

            this.isActive = !this.isActive;

            if (this.isActive) {
              if (this.settings.searchAutofocus && this.searchInput && this.settings.enableSearchFilter && !this.searchTempl) {
                setTimeout(
                /**
                * @return {?}
                */
                function () {
                  _this673.searchInput.nativeElement.focus();
                }, 0);
              }

              this.onOpen.emit(true);
            } else {
              this.onClose.emit(false);
            }

            if (this.settings.lazyLoading) {
              this.virtualdata = this.data;
              this.virtualScroollInit = true;
            }

            evt.preventDefault();
          }
          /**
           * @return {?}
           */

        }, {
          key: "openDropdown",
          value: function openDropdown() {
            var _this674 = this;

            if (this.settings.disabled) {
              return false;
            }

            this.isActive = true;

            if (this.settings.searchAutofocus && this.searchInput && this.settings.enableSearchFilter && !this.searchTempl) {
              setTimeout(
              /**
              * @return {?}
              */
              function () {
                _this674.searchInput.nativeElement.focus();
              }, 0);
            }

            this.onOpen.emit(true);
          }
          /**
           * @return {?}
           */

        }, {
          key: "closeDropdown",
          value: function closeDropdown() {
            if (this.searchInput && this.settings.lazyLoading) {
              this.searchInput.nativeElement.value = "";
            }

            if (this.searchInput) {
              this.searchInput.nativeElement.value = "";
            }

            this.filter = "";
            this.isActive = false;
            this.onClose.emit(false);
          }
          /**
           * @return {?}
           */

        }, {
          key: "closeDropdownOnClickOut",
          value: function closeDropdownOnClickOut() {
            if (this.isActive) {
              if (this.searchInput && this.settings.lazyLoading) {
                this.searchInput.nativeElement.value = "";
              }

              if (this.searchInput) {
                this.searchInput.nativeElement.value = "";
              }

              this.filter = "";
              this.isActive = false;
              this.clearSearch();
              this.onClose.emit(false);
            }
          }
          /**
           * @param {?} event
           * @return {?}
           */

        }, {
          key: "toggleSelectAll",
          value: function toggleSelectAll(event) {
            var _this675 = this;

            if (!this.isSelectAll) {
              this.selectedItems = [];

              if (this.settings.groupBy) {
                this.groupedData.forEach(
                /**
                * @param {?} obj
                * @return {?}
                */
                function (obj) {
                  obj.selected = !obj.disabled;
                });
                this.groupCachedItems.forEach(
                /**
                * @param {?} obj
                * @return {?}
                */
                function (obj) {
                  obj.selected = !obj.disabled;
                });
              } // this.selectedItems = this.data.slice();


              this.selectedItems = this.data.filter(
              /**
              * @param {?} individualData
              * @return {?}
              */
              function (individualData) {
                return !individualData.disabled;
              });
              this.isSelectAll = true;
              this.onChangeCallback(this.selectedItems);
              this.onTouchedCallback(this.selectedItems);
              this.onSelectAll.emit(this.selectedItems);
            } else {
              if (this.settings.groupBy) {
                this.groupedData.forEach(
                /**
                * @param {?} obj
                * @return {?}
                */
                function (obj) {
                  obj.selected = false;
                });
                this.groupCachedItems.forEach(
                /**
                * @param {?} obj
                * @return {?}
                */
                function (obj) {
                  obj.selected = false;
                });
              }

              this.selectedItems = [];
              this.isSelectAll = false;
              this.onChangeCallback(this.selectedItems);
              this.onTouchedCallback(this.selectedItems);
              this.onDeSelectAll.emit(this.selectedItems);
            }

            setTimeout(
            /**
            * @return {?}
            */
            function () {
              _this675.calculateDropdownDirection();
            });
            event.stopPropagation();
          }
          /**
           * @return {?}
           */

        }, {
          key: "filterGroupedList",
          value: function filterGroupedList() {
            var _this676 = this;

            if (this.filter == "" || this.filter == null) {
              this.clearSearch();
              return;
            }

            this.groupedData = this.cloneArray(this.groupCachedItems);
            this.groupedData = this.groupedData.filter(
            /**
            * @param {?} obj
            * @return {?}
            */
            function (obj) {
              /** @type {?} */
              var arr = [];

              if (obj[_this676.settings.labelKey].toLowerCase().indexOf(_this676.filter.toLowerCase()) > -1) {
                arr = obj.list;
              } else {
                arr = obj.list.filter(
                /**
                * @param {?} t
                * @return {?}
                */
                function (t) {
                  return t[_this676.settings.labelKey].toLowerCase().indexOf(_this676.filter.toLowerCase()) > -1;
                });
              }

              obj.list = arr;

              if (obj[_this676.settings.labelKey].toLowerCase().indexOf(_this676.filter.toLowerCase()) > -1) {
                return arr;
              } else {
                return arr.some(
                /**
                * @param {?} cat
                * @return {?}
                */
                function (cat) {
                  return cat[_this676.settings.labelKey].toLowerCase().indexOf(_this676.filter.toLowerCase()) > -1;
                });
              }
            });
          }
          /**
           * @return {?}
           */

        }, {
          key: "toggleFilterSelectAll",
          value: function toggleFilterSelectAll() {
            var _this677 = this;

            if (!this.isFilterSelectAll) {
              /** @type {?} */
              var added = [];

              if (this.settings.groupBy) {
                /*                 this.groupedData.forEach((item: any) => {
                                    if (item.list) {
                                        item.list.forEach((el: any) => {
                                            if (!this.isSelected(el)) {
                                                this.addSelected(el);
                                                added.push(el);
                                            }
                                        });
                                    }
                                    this.updateGroupInfo(item);
                
                                }); */
                this.ds.getFilteredData().forEach(
                /**
                * @param {?} el
                * @return {?}
                */
                function (el) {
                  if (!_this677.isSelected(el) && !el.hasOwnProperty('grpTitle')) {
                    _this677.addSelected(el);

                    added.push(el);
                  }
                });
              } else {
                this.ds.getFilteredData().forEach(
                /**
                * @param {?} item
                * @return {?}
                */
                function (item) {
                  if (!_this677.isSelected(item)) {
                    _this677.addSelected(item);

                    added.push(item);
                  }
                });
              }

              this.isFilterSelectAll = true;
              this.onFilterSelectAll.emit(added);
            } else {
              /** @type {?} */
              var removed = [];

              if (this.settings.groupBy) {
                /*                 this.groupedData.forEach((item: any) => {
                                    if (item.list) {
                                        item.list.forEach((el: any) => {
                                            if (this.isSelected(el)) {
                                                this.removeSelected(el);
                                                removed.push(el);
                                            }
                                        });
                                    }
                                }); */
                this.ds.getFilteredData().forEach(
                /**
                * @param {?} el
                * @return {?}
                */
                function (el) {
                  if (_this677.isSelected(el)) {
                    _this677.removeSelected(el);

                    removed.push(el);
                  }
                });
              } else {
                this.ds.getFilteredData().forEach(
                /**
                * @param {?} item
                * @return {?}
                */
                function (item) {
                  if (_this677.isSelected(item)) {
                    _this677.removeSelected(item);

                    removed.push(item);
                  }
                });
              }

              this.isFilterSelectAll = false;
              this.onFilterDeSelectAll.emit(removed);
            }
          }
          /**
           * @return {?}
           */

        }, {
          key: "toggleInfiniteFilterSelectAll",
          value: function toggleInfiniteFilterSelectAll() {
            var _this678 = this;

            if (!this.isInfiniteFilterSelectAll) {
              this.virtualdata.forEach(
              /**
              * @param {?} item
              * @return {?}
              */
              function (item) {
                if (!_this678.isSelected(item)) {
                  _this678.addSelected(item);
                }
              });
              this.isInfiniteFilterSelectAll = true;
            } else {
              this.virtualdata.forEach(
              /**
              * @param {?} item
              * @return {?}
              */
              function (item) {
                if (_this678.isSelected(item)) {
                  _this678.removeSelected(item);
                }
              });
              this.isInfiniteFilterSelectAll = false;
            }
          }
          /**
           * @return {?}
           */

        }, {
          key: "clearSearch",
          value: function clearSearch() {
            if (this.settings.groupBy) {
              this.groupedData = [];
              this.groupedData = this.cloneArray(this.groupCachedItems);
            }

            this.filter = "";
            this.isFilterSelectAll = false;
          }
          /**
           * @param {?} data
           * @return {?}
           */

        }, {
          key: "onFilterChange",
          value: function onFilterChange(data) {
            var _this679 = this;

            if (this.filter && this.filter == "" || data.length == 0) {
              this.isFilterSelectAll = false;
            }
            /** @type {?} */


            var cnt = 0;
            data.forEach(
            /**
            * @param {?} item
            * @return {?}
            */
            function (item) {
              if (!item.hasOwnProperty('grpTitle') && _this679.isSelected(item)) {
                cnt++;
              }
            });

            if (cnt > 0 && this.filterLength == cnt) {
              this.isFilterSelectAll = true;
            } else if (cnt > 0 && this.filterLength != cnt) {
              this.isFilterSelectAll = false;
            }

            this.cdr.detectChanges();
          }
          /**
           * @param {?} arr
           * @return {?}
           */

        }, {
          key: "cloneArray",
          value: function cloneArray(arr) {
            /** @type {?} */
            var i;
            /** @type {?} */

            var copy;

            if (Array.isArray(arr)) {
              return JSON.parse(JSON.stringify(arr));
            } else if (typeof arr === 'object') {
              throw 'Cannot clone array containing an object!';
            } else {
              return arr;
            }
          }
          /**
           * @param {?} item
           * @return {?}
           */

        }, {
          key: "updateGroupInfo",
          value: function updateGroupInfo(item) {
            var _this680 = this;

            if (item.disabled) {
              return false;
            }
            /** @type {?} */


            var key = this.settings.groupBy;
            this.groupedData.forEach(
            /**
            * @param {?} obj
            * @return {?}
            */
            function (obj) {
              /** @type {?} */
              var cnt = 0;

              if (obj.grpTitle && item[key] == obj[key]) {
                if (obj.list) {
                  obj.list.forEach(
                  /**
                  * @param {?} el
                  * @return {?}
                  */
                  function (el) {
                    if (_this680.isSelected(el)) {
                      cnt++;
                    }
                  });
                }
              }

              if (obj.list && cnt === obj.list.length && item[key] == obj[key]) {
                obj.selected = true;
              } else if (obj.list && cnt != obj.list.length && item[key] == obj[key]) {
                obj.selected = false;
              }
            });
            this.groupCachedItems.forEach(
            /**
            * @param {?} obj
            * @return {?}
            */
            function (obj) {
              /** @type {?} */
              var cnt = 0;

              if (obj.grpTitle && item[key] == obj[key]) {
                if (obj.list) {
                  obj.list.forEach(
                  /**
                  * @param {?} el
                  * @return {?}
                  */
                  function (el) {
                    if (_this680.isSelected(el)) {
                      cnt++;
                    }
                  });
                }
              }

              if (obj.list && cnt === obj.list.length && item[key] == obj[key]) {
                obj.selected = true;
              } else if (obj.list && cnt != obj.list.length && item[key] == obj[key]) {
                obj.selected = false;
              }
            });
          }
          /**
           * @param {?} arr
           * @param {?} field
           * @return {?}
           */

        }, {
          key: "transformData",
          value: function transformData(arr, field) {
            var _this681 = this;

            /** @type {?} */
            var groupedObj = arr.reduce(
            /**
            * @param {?} prev
            * @param {?} cur
            * @return {?}
            */
            function (prev, cur) {
              if (!prev[cur[field]]) {
                prev[cur[field]] = [cur];
              } else {
                prev[cur[field]].push(cur);
              }

              return prev;
            }, {});
            /** @type {?} */

            var tempArr = [];
            Object.keys(groupedObj).map(
            /**
            * @param {?} x
            * @return {?}
            */
            function (x) {
              /** @type {?} */
              var obj = {};
              /** @type {?} */

              var disabledChildrens = [];
              obj["grpTitle"] = true;
              obj[_this681.settings.labelKey] = x;
              obj[_this681.settings.groupBy] = x;
              obj['selected'] = false;
              obj['list'] = [];
              /** @type {?} */

              var cnt = 0;
              groupedObj[x].forEach(
              /**
              * @param {?} item
              * @return {?}
              */
              function (item) {
                item['list'] = [];

                if (item.disabled) {
                  _this681.isDisabledItemPresent = true;
                  disabledChildrens.push(item);
                }

                obj.list.push(item);

                if (_this681.isSelected(item)) {
                  cnt++;
                }
              });

              if (cnt == obj.list.length) {
                obj.selected = true;
              } else {
                obj.selected = false;
              } // Check if current group item's all childrens are disabled or not


              obj['disabled'] = disabledChildrens.length === groupedObj[x].length;
              tempArr.push(obj); // obj.list.forEach((item: any) => {
              //     tempArr.push(item);
              // });
            });
            return tempArr;
          }
          /**
           * @param {?} evt
           * @return {?}
           */

        }, {
          key: "filterInfiniteList",
          value: function filterInfiniteList(evt) {
            var _this682 = this;

            /** @type {?} */
            var filteredElems = [];

            if (this.settings.groupBy) {
              this.groupedData = this.groupCachedItems.slice();
            } else {
              this.data = this.cachedItems.slice();
              this.virtualdata = this.cachedItems.slice();
            }

            if ((evt != null || evt != '') && !this.settings.groupBy) {
              if (this.settings.searchBy.length > 0) {
                var _loop9 = function _loop9(t) {
                  _this682.virtualdata.filter(
                  /**
                  * @param {?} el
                  * @return {?}
                  */
                  function (el) {
                    if (el[_this682.settings.searchBy[t].toString()].toString().toLowerCase().indexOf(evt.toString().toLowerCase()) >= 0) {
                      filteredElems.push(el);
                    }
                  });
                };

                for (var t = 0; t < this.settings.searchBy.length; t++) {
                  _loop9(t);
                }
              } else {
                this.virtualdata.filter(
                /**
                * @param {?} el
                * @return {?}
                */
                function (el) {
                  for (var prop in el) {
                    if (el[prop].toString().toLowerCase().indexOf(evt.toString().toLowerCase()) >= 0) {
                      filteredElems.push(el);
                      break;
                    }
                  }
                });
              }

              this.virtualdata = [];
              this.virtualdata = filteredElems;
              this.infiniteFilterLength = this.virtualdata.length;
            }

            if (evt.toString() != '' && this.settings.groupBy) {
              this.groupedData.filter(
              /**
              * @param {?} el
              * @return {?}
              */
              function (el) {
                if (el.hasOwnProperty('grpTitle')) {
                  filteredElems.push(el);
                } else {
                  for (var prop in el) {
                    if (el[prop].toString().toLowerCase().indexOf(evt.toString().toLowerCase()) >= 0) {
                      filteredElems.push(el);
                      break;
                    }
                  }
                }
              });
              this.groupedData = [];
              this.groupedData = filteredElems;
              this.infiniteFilterLength = this.groupedData.length;
            } else if (evt.toString() == '' && this.cachedItems.length > 0) {
              this.virtualdata = [];
              this.virtualdata = this.cachedItems;
              this.infiniteFilterLength = 0;
            }

            this.virtualScroller.refresh();
          }
          /**
           * @return {?}
           */

        }, {
          key: "resetInfiniteSearch",
          value: function resetInfiniteSearch() {
            this.filter = "";
            this.isInfiniteFilterSelectAll = false;
            this.virtualdata = [];
            this.virtualdata = this.cachedItems;
            this.groupedData = this.groupCachedItems;
            this.infiniteFilterLength = 0;
          }
          /**
           * @param {?} e
           * @return {?}
           */

        }, {
          key: "onScrollEnd",
          value: function onScrollEnd(e) {
            if (e.endIndex === this.data.length - 1 || e.startIndex === 0) {}

            this.onScrollToEnd.emit(e);
          }
          /**
           * @return {?}
           */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            if (this.subscription) {
              this.subscription.unsubscribe();
            }
          }
          /**
           * @param {?} item
           * @return {?}
           */

        }, {
          key: "selectGroup",
          value: function selectGroup(item) {
            var _this683 = this;

            if (item.disabled) {
              return false;
            }

            if (item.selected) {
              item.selected = false;
              item.list.forEach(
              /**
              * @param {?} obj
              * @return {?}
              */
              function (obj) {
                _this683.removeSelected(obj);
              });
              this.onGroupDeSelect.emit(item);
              this.updateGroupInfo(item);
            } else {
              item.selected = true;
              item.list.forEach(
              /**
              * @param {?} obj
              * @return {?}
              */
              function (obj) {
                if (!_this683.isSelected(obj)) {
                  _this683.addSelected(obj);
                }
              });
              this.onGroupSelect.emit(item);
              this.updateGroupInfo(item);
            }
          }
          /**
           * @return {?}
           */

        }, {
          key: "addFilterNewItem",
          value: function addFilterNewItem() {
            this.onAddFilterNewItem.emit(this.filter);
            this.filterPipe = new ListFilterPipe(this.ds);
            this.filterPipe.transform(this.data, this.filter, this.settings.searchBy);
          }
          /**
           * @return {?}
           */

        }, {
          key: "calculateDropdownDirection",
          value: function calculateDropdownDirection() {
            /** @type {?} */
            var shouldOpenTowardsTop = this.settings.position == 'top';
            /** @type {?} */

            var elem = this.cuppaDropdown.nativeElement;
            /** @type {?} */

            var dropdownWidth = elem.clientWidth;
            this.dropDownWidth = dropdownWidth;
            this.dropDownLeft = elem.getBoundingClientRect().x;

            if (this.settings.position == 'top' && !this.settings.autoPosition) {
              this.openTowardsTop(true);
            } else if (this.settings.position == 'bottom' && !this.settings.autoPosition) {
              this.openTowardsTop(false);
            }

            if (this.settings.autoPosition) {
              /** @type {?} */
              var dropdownHeight = this.dropdownListElem.nativeElement.clientHeight;
              /** @type {?} */

              var viewportHeight = document.documentElement.clientHeight;
              /** @type {?} */

              var selectedListBounds = this.selectedListElem.nativeElement.getBoundingClientRect();
              /** @type {?} */

              var spaceOnTop = selectedListBounds.top;
              /** @type {?} */

              var spaceOnBottom = viewportHeight - selectedListBounds.top;

              if (spaceOnBottom < spaceOnTop && dropdownHeight < spaceOnTop) {
                this.openTowardsTop(true);
              } else {
                this.openTowardsTop(false);
              } // Keep preference if there is not enough space on either the top or bottom

              /* 			if (spaceOnTop || spaceOnBottom) {
                              if (shouldOpenTowardsTop) {
                                  shouldOpenTowardsTop = spaceOnTop;
                              } else {
                                  shouldOpenTowardsTop = !spaceOnBottom;
                              }
                          } */

            }
          }
          /**
           * @param {?} value
           * @return {?}
           */

        }, {
          key: "openTowardsTop",
          value: function openTowardsTop(value) {
            /** @type {?} */
            var elem = this.cuppaDropdown.nativeElement;

            if (value && this.selectedListElem.nativeElement.clientHeight) {
              this.dropdownListYOffset = 15 - this.selectedListElem.nativeElement.clientHeight;
              this.dropDownTop = elem.getBoundingClientRect().y - this.dropdownListElem.nativeElement.clientHeight - 15;
              this.settings.position = 'top';
            } else {
              this.dropDownTop = elem.getBoundingClientRect().y + elem.clientHeight + 1;
              this.dropdownListYOffset = 0;
              this.settings.position = 'bottom';
            }
          }
          /**
           * @param {?=} e
           * @return {?}
           */

        }, {
          key: "clearSelection",
          value: function clearSelection(e) {
            if (this.settings.groupBy) {
              this.groupCachedItems.forEach(
              /**
              * @param {?} obj
              * @return {?}
              */
              function (obj) {
                obj.selected = false;
              });
            }

            this.clearSearch();
            this.selectedItems = [];
            this.isSelectAll = false;
            this.onChangeCallback(this.selectedItems);
            this.onTouchedCallback(this.selectedItems);
            this.onDeSelectAll.emit(this.selectedItems);
          }
        }]);

        return AngularMultiSelect;
      }();

      AngularMultiSelect.ɵfac = function AngularMultiSelect_Factory(t) {
        return new (t || AngularMultiSelect)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](DataService));
      };

      AngularMultiSelect.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: AngularMultiSelect,
        selectors: [["angular2-multiselect"]],
        contentQueries: function AngularMultiSelect_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, Item, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, Badge, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, Search, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.itemTempl = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.badgeTempl = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.searchTempl = _t.first);
          }
        },
        viewQuery: function AngularMultiSelect_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](_c5, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](_c6, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](_c7, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](_c8, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](VirtualScrollerComponent, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.searchInput = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.selectedListElem = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.dropdownListElem = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.cuppaDropdown = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.virtualScroller = _t.first);
          }
        },
        hostVars: 2,
        hostBindings: function AngularMultiSelect_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("keyup.escape", function AngularMultiSelect_keyup_escape_HostBindingHandler($event) {
              return ctx.onEscapeDown($event);
            }, false, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵresolveDocument"])("scroll", function AngularMultiSelect_scroll_HostBindingHandler($event) {
              return ctx.onScroll($event);
            }, false, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵresolveWindow"]);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"](ctx.defaultSettings.classes);
          }
        },
        inputs: {
          settings: "settings",
          data: "data",
          loading: "loading"
        },
        outputs: {
          onSelect: "onSelect",
          onDeSelect: "onDeSelect",
          onSelectAll: "onSelectAll",
          onDeSelectAll: "onDeSelectAll",
          onOpen: "onOpen",
          onClose: "onClose",
          onScrollToEnd: "onScrollToEnd",
          onFilterSelectAll: "onFilterSelectAll",
          onFilterDeSelectAll: "onFilterDeSelectAll",
          onAddFilterNewItem: "onAddFilterNewItem",
          onGroupSelect: "onGroupSelect",
          onGroupDeSelect: "onGroupDeSelect"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([DROPDOWN_CONTROL_VALUE_ACCESSOR, DROPDOWN_CONTROL_VALIDATION]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]],
        decls: 36,
        vars: 47,
        consts: [[1, "cuppa-dropdown", 3, "clickOutside"], ["cuppaDropdown", ""], [1, "selected-list"], ["selectedList", ""], [1, "c-btn", 3, "ngClass", "click"], [4, "ngIf"], ["class", "c-list", 4, "ngIf"], ["class", "countplaceholder", 4, "ngIf"], ["class", "c-remove clear-all", 3, "click", 4, "ngIf"], ["class", "c-angle-down", 4, "ngIf"], ["class", "c-angle-up", 4, "ngIf"], [1, "dropdown-list", "tagToBody", "animated", "fadeIn", 3, "hidden"], ["dropdownList", ""], [1, "arrow-2", 3, "ngClass"], [3, "ngClass"], [1, "list-area", 3, "ngClass"], ["class", "pure-checkbox select-all", 4, "ngIf"], ["class", "loading-icon", "src", "assets/img/loading.gif", 4, "ngIf"], ["class", "list-filter", 4, "ngIf"], ["class", "filter-select-all", 4, "ngIf"], [1, "filter-select-all"], ["class", "nodata-label", 3, "hidden", 4, "ngIf"], ["class", "btn-container", 3, "hidden", 4, "ngIf"], ["style", "overflow: auto;", 3, "maxHeight", 4, "ngIf"], ["class", "list-message", 4, "ngIf"], [4, "ngFor", "ngForOf", "ngForTrackBy"], [1, "c-list"], ["class", "c-token", 4, "ngFor", "ngForOf", "ngForTrackBy"], [1, "c-token"], ["class", "c-label", 4, "ngIf"], [1, "c-remove", 3, "click"], [3, "name"], [1, "c-label"], [3, "data", "item"], ["class", "c-token", 3, "hidden", 4, "ngFor", "ngForOf", "ngForTrackBy"], [1, "c-token", 3, "hidden"], [1, "countplaceholder"], [1, "c-remove", "clear-all", 3, "click"], [1, "c-angle-down"], [1, "c-angle-up"], [1, "pure-checkbox", "select-all"], ["type", "checkbox", 3, "checked", "disabled", "id", "change", 4, "ngIf"], [3, "for"], [3, "hidden"], ["type", "checkbox", 3, "checked", "disabled", "id", "change"], ["src", "assets/img/loading.gif", 1, "loading-icon"], [1, "list-filter"], ["id", "searchIcon", 1, "c-search"], ["class", "c-clear", 3, "hidden", "click", 4, "ngIf"], ["class", "c-input", "type", "text", "aria-labelledby", "searchIcon", 3, "placeholder", "ngModel", "ngModelChange", "keyup", 4, "ngIf"], ["class", "c-input", "type", "text", "aria-labelledby", "searchIcon", 3, "placeholder", "ngModel", "ngModelChange", 4, "ngIf"], [3, "data", "item", 4, "ngIf"], [1, "c-clear", 3, "hidden", "click"], ["type", "text", "aria-labelledby", "searchIcon", 1, "c-input", 3, "placeholder", "ngModel", "ngModelChange", "keyup"], ["searchInput", ""], ["type", "text", "aria-labelledby", "searchIcon", 1, "c-input", 3, "placeholder", "ngModel", "ngModelChange"], ["class", "pure-checkbox select-all", 3, "click", 4, "ngIf"], [1, "pure-checkbox", "select-all", 3, "click"], ["type", "checkbox", "aria-labelledby", "optionName", "aria-label", "option", 3, "checked", "disabled"], ["type", "checkbox", "aria-labelledby", "option", 3, "checked", "disabled"], [1, "nodata-label", 3, "hidden"], [1, "btn-container", 3, "hidden"], [1, "c-btn", "btn-iceblue", 3, "click"], [2, "overflow", "auto"], [1, "lazyContainer"], ["class", "pure-checkbox", 3, "ngClass", "click", 4, "ngFor", "ngForOf"], [1, "pure-checkbox", 3, "ngClass", "click"], ["type", "checkbox", "aria-labelledby", "option", 3, "checked", "disabled", 4, "ngIf"], ["virtualScroller", "", 1, "lazyContainer", 3, "enableUnequalChildrenSizes", "items", "ngStyle", "vsStart", "vsEnd"], ["scroll", ""], ["type", "checkbox", 3, "checked", "disabled", 4, "ngIf"], ["type", "checkbox", 3, "checked", "disabled"], ["scroll2", ""], ["scroll3", ""], [4, "ngFor", "ngForOf"], ["class", "pure-checkbox", 3, "ngClass", "click", 4, "ngIf"], ["class", "pure-checkbox", 3, "ngClass", 4, "ngIf"], [1, "pure-checkbox", 3, "ngClass"], [3, "items", "ngStyle", "vsUpdate", "vsEnd"], ["scroll4", ""], [1, "list-message"]],
        template: function AngularMultiSelect_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("clickOutside", function AngularMultiSelect_Template_div_clickOutside_0_listener() {
              return ctx.closeDropdownOnClickOut();
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "div", 2, 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](4, "div", 4);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function AngularMultiSelect_Template_div_click_4_listener($event) {
              return ctx.toggleDropdown($event);
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](5, AngularMultiSelect_span_5_Template, 2, 1, "span", 5);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](6, AngularMultiSelect_span_6_Template, 2, 2, "span", 5);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](7, AngularMultiSelect_span_7_Template, 2, 2, "span", 6);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](8, AngularMultiSelect_div_8_Template, 2, 2, "div", 6);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](9, AngularMultiSelect_span_9_Template, 2, 1, "span", 7);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](10, AngularMultiSelect_span_10_Template, 2, 1, "span", 8);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](11, AngularMultiSelect_span_11_Template, 2, 1, "span", 9);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](12, AngularMultiSelect_span_12_Template, 2, 1, "span", 10);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](13, "div", 11, 12);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](15, "div", 13);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](16, "div", 14);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](17, "div", 15);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](18, AngularMultiSelect_div_18_Template, 7, 6, "div", 16);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](19, AngularMultiSelect_img_19_Template, 1, 0, "img", 17);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](20, AngularMultiSelect_div_20_Template, 9, 7, "div", 18);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](21, AngularMultiSelect_div_21_Template, 3, 2, "div", 19);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](22, AngularMultiSelect_div_22_Template, 2, 1, "div", 19);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](23, "div", 20);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](24, AngularMultiSelect_label_24_Template, 2, 2, "label", 21);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](25, AngularMultiSelect_label_25_Template, 2, 2, "label", 21);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](26, AngularMultiSelect_div_26_Template, 3, 2, "div", 22);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](27, AngularMultiSelect_div_27_Template, 4, 7, "div", 23);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](28, AngularMultiSelect_div_28_Template, 4, 8, "div", 23);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](29, AngularMultiSelect_div_29_Template, 4, 7, "div", 23);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](30, AngularMultiSelect_div_30_Template, 4, 8, "div", 23);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](31, AngularMultiSelect_div_31_Template, 4, 8, "div", 23);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](32, AngularMultiSelect_div_32_Template, 3, 3, "div", 23);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](33, AngularMultiSelect_div_33_Template, 5, 12, "div", 23);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](34, AngularMultiSelect_div_34_Template, 3, 3, "div", 23);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](35, AngularMultiSelect_h5_35_Template, 2, 1, "h5", 24);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](4);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](37, _c14, ctx.settings.disabled));

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("tabindex", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", (ctx.selectedItems == null ? null : ctx.selectedItems.length) == 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.settings.singleSelection && !ctx.badgeTempl);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", (ctx.selectedItems == null ? null : ctx.selectedItems.length) > 0 && ctx.settings.singleSelection && ctx.badgeTempl);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", (ctx.selectedItems == null ? null : ctx.selectedItems.length) > 0 && !ctx.settings.singleSelection);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", (ctx.selectedItems == null ? null : ctx.selectedItems.length) > ctx.settings.badgeShowLimit);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.settings.clearAll && (ctx.selectedItems == null ? null : ctx.selectedItems.length) > 0 && !ctx.settings.disabled);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx.isActive);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.isActive);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("width", ctx.dropDownWidth, "px")("top", ctx.dropDownTop, "px")("left", ctx.dropDownLeft, "px");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("hidden", !ctx.isActive);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction2"](39, _c15, ctx.settings.position == "bottom", ctx.settings.position == "top"));

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction2"](42, _c15, ctx.settings.position == "bottom", ctx.settings.position == "top"));

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](45, _c16, ctx.settings.singleSelection));

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.settings.enableCheckAll && !ctx.settings.singleSelection && !ctx.settings.limitSelection && (ctx.data == null ? null : ctx.data.length) > 0 && !ctx.isDisabledItemPresent);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.loading);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.settings.enableSearchFilter);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx.settings.lazyLoading && ctx.settings.enableFilterSelectAll && !ctx.isDisabledItemPresent);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.settings.lazyLoading && ctx.settings.enableFilterSelectAll && !ctx.isDisabledItemPresent && !ctx.settings.singleSelection);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx.settings.groupBy && ctx.filterLength == 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.settings.groupBy && (ctx.groupedData == null ? null : ctx.groupedData.length) == 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.settings.addNewItemOnFilter && ctx.filterLength == 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx.settings.groupBy && !ctx.settings.lazyLoading && ctx.itemTempl == undefined);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx.settings.groupBy && ctx.settings.lazyLoading && ctx.itemTempl == undefined);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx.settings.groupBy && !ctx.settings.lazyLoading && ctx.itemTempl != undefined);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx.settings.groupBy && ctx.settings.lazyLoading && ctx.itemTempl != undefined);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.settings.groupBy && ctx.settings.lazyLoading && ctx.itemTempl != undefined);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.settings.groupBy && !ctx.settings.lazyLoading && ctx.itemTempl != undefined);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.settings.groupBy && ctx.settings.lazyLoading && ctx.itemTempl == undefined);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.settings.groupBy && !ctx.settings.lazyLoading && ctx.itemTempl == undefined);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", (ctx.data == null ? null : ctx.data.length) == 0);
          }
        },
        directives: [ClickOutsideDirective, _angular_common__WEBPACK_IMPORTED_MODULE_2__["NgClass"], _angular_common__WEBPACK_IMPORTED_MODULE_2__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_2__["NgForOf"], CIcon, TemplateRenderer, _angular_forms__WEBPACK_IMPORTED_MODULE_1__["DefaultValueAccessor"], _angular_forms__WEBPACK_IMPORTED_MODULE_1__["NgControlStatus"], _angular_forms__WEBPACK_IMPORTED_MODULE_1__["NgModel"], VirtualScrollerComponent, _angular_common__WEBPACK_IMPORTED_MODULE_2__["NgStyle"]],
        pipes: [ListFilterPipe],
        styles: ["virtual-scroll{display:block;width:100%}.cuppa-dropdown{position:relative}.c-btn{display:inline-block;border-width:1px;line-height:1.25;border-radius:3px;font-size:.85rem;padding:5px 10px;cursor:pointer;-webkit-box-align:center;align-items:center;min-height:38px}.c-btn.disabled{background:#ccc}.selected-list .c-list{float:left;padding:0;margin:0;width:calc(100% - 20px)}.selected-list .c-list .c-token{list-style:none;padding:4px 22px 4px 8px;border-radius:2px;margin-right:4px;margin-top:2px;float:left;position:relative}.selected-list .c-list .c-token .c-label{display:block;float:left}.selected-list .c-list .c-token .c-remove{position:absolute;right:8px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);width:8px}.selected-list .c-list .c-token .c-remove svg{fill:#fff}.selected-list .fa-angle-down,.selected-list .fa-angle-up{font-size:15pt;position:absolute;right:10px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.selected-list .c-angle-down,.selected-list .c-angle-up{width:12px;height:12px;position:absolute;right:10px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);pointer-events:none}.selected-list .c-angle-down svg,.selected-list .c-angle-up svg{fill:#333}.selected-list .countplaceholder{position:absolute;right:45px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.selected-list .c-btn{width:100%;padding:5px 10px;cursor:pointer;display:-webkit-box;display:flex;position:relative}.selected-list .c-btn .c-icon{position:absolute;right:5px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.dropdown-list.tagToBody{position:fixed}.dropdown-list{position:absolute;padding-top:14px;width:100%;z-index:99999}.dropdown-list ul{padding:0;list-style:none;overflow:auto;margin:0}.dropdown-list ul li{padding:10px;cursor:pointer;text-align:left}.dropdown-list ul li:first-child{padding-top:10px}.dropdown-list ul li:last-child{padding-bottom:10px}.dropdown-list ::-webkit-scrollbar{width:8px}.dropdown-list ::-webkit-scrollbar-thumb{background:#ccc;border-radius:5px}.dropdown-list ::-webkit-scrollbar-track{background:#f2f2f2}.arrow-down,.arrow-up{width:0;height:0;border-left:13px solid transparent;border-right:13px solid transparent;border-bottom:15px solid #fff;margin-left:15px;position:absolute;top:0}.arrow-down{bottom:-14px;top:unset;-webkit-transform:rotate(180deg);transform:rotate(180deg)}.arrow-2{border-bottom:15px solid #ccc;top:-1px}.arrow-down.arrow-2{top:unset;bottom:-16px}.list-area{border:1px solid #ccc;border-radius:3px;background:#fff;margin:0}.select-all{padding:10px;border-bottom:1px solid #ccc;text-align:left}.list-filter{border-bottom:1px solid #ccc;position:relative;padding-left:35px;height:35px}.list-filter input{border:0;width:100%;height:100%;padding:0}.list-filter input:focus{outline:0}.list-filter .c-search{position:absolute;top:9px;left:10px;width:15px;height:15px}.list-filter .c-search svg{fill:#888}.list-filter .c-clear{position:absolute;top:10px;right:10px;width:15px;height:15px}.list-filter .c-clear svg{fill:#888}.pure-checkbox input[type=checkbox]{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.pure-checkbox input[type=checkbox]:focus+label:before,.pure-checkbox input[type=checkbox]:hover+label:before{background-color:#f2f2f2}.pure-checkbox input[type=checkbox]:active+label:before{-webkit-transition-duration:0s;transition-duration:0s}.pure-checkbox input[type=checkbox]:disabled+label{color:#ccc}.pure-checkbox input[type=checkbox]+label{position:relative;padding-left:2em;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;margin:0;font-weight:300}.pure-checkbox input[type=checkbox]+label:before{box-sizing:content-box;content:'';position:absolute;top:50%;left:0;width:15px;height:15px;margin-top:-9px;text-align:center;-webkit-transition:.4s;transition:.4s;border-radius:3px}.pure-checkbox input[type=checkbox]+label:after{box-sizing:content-box;content:'';position:absolute;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:50%;transform-origin:50%;-webkit-transition:-webkit-transform .2s ease-out;transition:transform .2s ease-out,-webkit-transform .2s ease-out;background-color:transparent;top:50%;left:3px;width:9px;height:4px;margin-top:-5px;border-style:solid;border-width:0 0 2px 2px;-webkit-border-image:none;-o-border-image:none;border-image:none;-webkit-transform:rotate(-45deg) scale(0);transform:rotate(-45deg) scale(0)}.pure-checkbox input[type=checkbox]:disabled+label:before{border-color:#ccc}.pure-checkbox input[type=checkbox]:disabled:focus+label:before .pure-checkbox input[type=checkbox]:disabled:hover+label:before{background-color:inherit}.pure-checkbox input[type=checkbox]:disabled:checked+label:before{background-color:#ccc}.pure-checkbox input[type=radio]:checked+label:before{background-color:#fff}.pure-checkbox input[type=radio]:checked+label:after{-webkit-transform:scale(1);transform:scale(1)}.pure-checkbox input[type=radio]+label:before{border-radius:50%}.pure-checkbox input[type=checkbox]:checked+label:after{content:'';-webkit-transition:-webkit-transform .2s ease-out;transition:transform .2s ease-out,-webkit-transform .2s ease-out;-webkit-transform:rotate(-45deg) scale(1);transform:rotate(-45deg) scale(1)}.list-message{text-align:center;margin:0;padding:15px 0;font-size:initial}.list-grp{padding:0 15px!important}.list-grp h4{text-transform:capitalize;margin:15px 0 0;font-size:14px;font-weight:700}.list-grp>li{padding-left:15px!important}.grp-item{padding-left:30px!important}.grp-title{padding-bottom:0!important}.grp-title label{margin-bottom:0!important;font-weight:800;text-transform:capitalize}.grp-title:hover{background:0 0!important}.loading-icon{width:20px;position:absolute;right:10px;top:23px;z-index:1}.nodata-label{width:100%;text-align:center;padding:10px 0 0}.btn-container{text-align:center;padding:0 5px 10px}.clear-all{width:8px;position:absolute;top:50%;right:30px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}"],
        encapsulation: 2
      });
      /** @nocollapse */

      AngularMultiSelect.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }, {
          type: DataService
        }];
      };

      AngularMultiSelect.propDecorators = {
        data: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        settings: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        loading: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        onSelect: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
          args: ['onSelect']
        }],
        onDeSelect: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
          args: ['onDeSelect']
        }],
        onSelectAll: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
          args: ['onSelectAll']
        }],
        onDeSelectAll: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
          args: ['onDeSelectAll']
        }],
        onOpen: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
          args: ['onOpen']
        }],
        onClose: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
          args: ['onClose']
        }],
        onScrollToEnd: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
          args: ['onScrollToEnd']
        }],
        onFilterSelectAll: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
          args: ['onFilterSelectAll']
        }],
        onFilterDeSelectAll: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
          args: ['onFilterDeSelectAll']
        }],
        onAddFilterNewItem: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
          args: ['onAddFilterNewItem']
        }],
        onGroupSelect: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
          args: ['onGroupSelect']
        }],
        onGroupDeSelect: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
          args: ['onGroupDeSelect']
        }],
        itemTempl: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [Item, {
            "static": false
          }]
        }],
        badgeTempl: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [Badge, {
            "static": false
          }]
        }],
        searchTempl: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [Search, {
            "static": false
          }]
        }],
        searchInput: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
          args: ['searchInput', {
            "static": false
          }]
        }],
        selectedListElem: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
          args: ['selectedList', {
            "static": false
          }]
        }],
        dropdownListElem: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
          args: ['dropdownList', {
            "static": false
          }]
        }],
        cuppaDropdown: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
          args: ['cuppaDropdown', {
            "static": false
          }]
        }],
        onEscapeDown: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
          args: ['document:keyup.escape', ['$event']]
        }],
        onScroll: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
          args: ['window:scroll', ['$event']]
        }],
        virtualScroller: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
          args: [VirtualScrollerComponent, {
            "static": false
          }]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](AngularMultiSelect, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'angular2-multiselect',
            template: "<div class=\"cuppa-dropdown\" (clickOutside)=\"closeDropdownOnClickOut()\" #cuppaDropdown>\n    <div class=\"selected-list\" #selectedList>\n        <div class=\"c-btn\" (click)=\"toggleDropdown($event)\" [ngClass]=\"{'disabled': settings.disabled}\" [attr.tabindex]=\"0\">\n\n            <span *ngIf=\"selectedItems?.length == 0\">{{settings.text}}</span>\n            <span *ngIf=\"settings.singleSelection && !badgeTempl\">\n                <span *ngFor=\"let item of selectedItems;trackBy: trackByFn.bind(this);let k = index\">\n                    {{item[settings.labelKey]}}\n                </span>\n            </span>\n            <span class=\"c-list\" *ngIf=\"selectedItems?.length > 0 && settings.singleSelection && badgeTempl \">\n                <div class=\"c-token\" *ngFor=\"let item of selectedItems;trackBy: trackByFn.bind(this);let k = index\">\n                    <span *ngIf=\"!badgeTempl\" class=\"c-label\">{{item[settings.labelKey]}}</span>\n\n                    <span *ngIf=\"badgeTempl\" class=\"c-label\">\n                        <c-templateRenderer [data]=\"badgeTempl\" [item]=\"item\"></c-templateRenderer>\n                    </span>\n                    <span class=\"c-remove\" (click)=\"onItemClick(item,k,$event);$event.stopPropagation()\">\n                        <c-icon [name]=\"'remove'\"></c-icon>\n                    </span>\n                </div>\n            </span>\n            <div class=\"c-list\" *ngIf=\"selectedItems?.length > 0 && !settings.singleSelection\">\n                <div class=\"c-token\" *ngFor=\"let item of selectedItems;trackBy: trackByFn.bind(this);let k = index\" [hidden]=\"k > settings.badgeShowLimit-1\">\n                    <span *ngIf=\"!badgeTempl\" class=\"c-label\">{{item[settings.labelKey]}}</span>\n                    <span *ngIf=\"badgeTempl\" class=\"c-label\">\n                        <c-templateRenderer [data]=\"badgeTempl\" [item]=\"item\"></c-templateRenderer>\n                    </span>\n                    <span class=\"c-remove\" (click)=\"onItemClick(item,k,$event);$event.stopPropagation()\">\n                        <c-icon [name]=\"'remove'\"></c-icon>\n                    </span>\n                </div>\n            </div>\n            <span class=\"countplaceholder\" *ngIf=\"selectedItems?.length > settings.badgeShowLimit\">+{{selectedItems?.length - settings.badgeShowLimit }}</span>\n            <span class=\"c-remove clear-all\" *ngIf=\"settings.clearAll && selectedItems?.length > 0 && !settings.disabled\" (click)=\"clearSelection($event);$event.stopPropagation()\">\n                <c-icon [name]=\"'remove'\"></c-icon>\n            </span>\n            <span *ngIf=\"!isActive\" class=\"c-angle-down\">\n                <c-icon [name]=\"'angle-down'\"></c-icon>\n            </span>\n            <span *ngIf=\"isActive\" class=\"c-angle-up\">\n                <c-icon [name]=\"'angle-up'\"></c-icon>\n\n            </span>\n        </div>\n    </div>\n    <div #dropdownList class=\"dropdown-list tagToBody animated fadeIn\" \n    [style.width.px]=\"dropDownWidth\" \n    [style.top.px]=\"dropDownTop\" \n    [style.left.px]=\"dropDownLeft\" \n        [hidden]=\"!isActive\">\n        <div [ngClass]=\"{'arrow-up': settings.position == 'bottom', 'arrow-down': settings.position == 'top'}\" class=\"arrow-2\"></div>\n        <div [ngClass]=\"{'arrow-up': settings.position == 'bottom', 'arrow-down': settings.position == 'top'}\"></div>\n        <div class=\"list-area\" [ngClass]=\"{'single-select-mode': settings.singleSelection }\">\n            <div class=\"pure-checkbox select-all\" *ngIf=\"settings.enableCheckAll && !settings.singleSelection && !settings.limitSelection && data?.length > 0 && !isDisabledItemPresent\"\n                >\n                <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelectAll\" [disabled]=\"settings.limitSelection == selectedItems?.length\"\n                [id]=\"id\" (change)=\"toggleSelectAll($event)\"/>\n                <label [for]=\"id\">\n                    <span [hidden]=\"isSelectAll\">{{settings.selectAllText}}</span>\n                    <span [hidden]=\"!isSelectAll\">{{settings.unSelectAllText}}</span>\n                </label>\n            </div>\n            <img class=\"loading-icon\" *ngIf=\"loading\" src=\"assets/img/loading.gif\" />\n            <div class=\"list-filter\" *ngIf=\"settings.enableSearchFilter\">\n                <span class=\"c-search\" id=\"searchIcon\">\n                    <c-icon [name]=\"'search'\"></c-icon>\n                </span>\n                <span *ngIf=\"!settings.lazyLoading\" [hidden]=\"filter == undefined || filter?.length == 0\" class=\"c-clear\" (click)=\"clearSearch()\">\n                    <c-icon [name]=\"'clear'\"></c-icon>\n                </span>\n                <span *ngIf=\"settings.lazyLoading\" [hidden]=\"filter == undefined || filter?.length == 0\" class=\"c-clear\" (click)=\"resetInfiniteSearch()\">\n                    <c-icon [name]=\"'clear'\"></c-icon>\n                </span>\n\n                <input class=\"c-input\" *ngIf=\"settings.groupBy && !settings.lazyLoading && !searchTempl\" #searchInput type=\"text\" [placeholder]=\"settings.searchPlaceholderText\"\n                    [(ngModel)]=\"filter\" (keyup)=\"filterGroupedList()\" aria-labelledby=\"searchIcon\">\n                <input class=\"c-input\" *ngIf=\"!settings.groupBy && !settings.lazyLoading && !searchTempl\" #searchInput type=\"text\" [placeholder]=\"settings.searchPlaceholderText\"\n                    [(ngModel)]=\"filter\" aria-labelledby=\"searchIcon\">\n                <input class=\"c-input\" *ngIf=\"settings.lazyLoading && !searchTempl\" #searchInput type=\"text\" [placeholder]=\"settings.searchPlaceholderText\"\n                    [(ngModel)]=\"filter\" (keyup)=\"searchTerm$.next($event.target.value)\" aria-labelledby=\"searchIcon\">\n                <!--            <input class=\"c-input\" *ngIf=\"!settings.lazyLoading && !searchTempl && settings.groupBy\" #searchInput type=\"text\" [placeholder]=\"settings.searchPlaceholderText\"\n                [(ngModel)]=\"filter\" (keyup)=\"filterGroupList($event)\">-->\n                <c-templateRenderer *ngIf=\"searchTempl\" [data]=\"searchTempl\" [item]=\"item\"></c-templateRenderer>\n            </div>\n            <div class=\"filter-select-all\" *ngIf=\"!settings.lazyLoading && settings.enableFilterSelectAll && !isDisabledItemPresent\">\n                <div class=\"pure-checkbox select-all\" *ngIf=\"!settings.groupBy && filter?.length > 0 && filterLength > 0  && !settings.singleSelection\" (click)=\"toggleFilterSelectAll()\">\n                    <input type=\"checkbox\" [checked]=\"isFilterSelectAll\" [disabled]=\"settings.limitSelection == selectedItems?.length\" aria-labelledby=\"optionName\"\n                    aria-label=\"option\"/>\n                    <label>\n                        <span [hidden]=\"isFilterSelectAll\">{{settings.filterSelectAllText}}</span>\n                        <span [hidden]=\"!isFilterSelectAll\">{{settings.filterUnSelectAllText}}</span>\n                    </label>\n                </div>\n                <div class=\"pure-checkbox select-all\" *ngIf=\"settings.groupBy && filter?.length > 0 && groupedData?.length > 0  && !settings.singleSelection\" (click)=\"toggleFilterSelectAll()\">\n                    <input type=\"checkbox\" [checked]=\"isFilterSelectAll && filter?.length > 0\" [disabled]=\"settings.limitSelection == selectedItems?.length\"\n                    aria-labelledby=\"option\"/>\n                    <label>\n                        <span [hidden]=\"isFilterSelectAll\">{{settings.filterSelectAllText}}</span>\n                        <span [hidden]=\"!isFilterSelectAll\">{{settings.filterUnSelectAllText}}</span>\n                    </label>\n                </div>\n            </div>\n            <div class=\"filter-select-all\" *ngIf=\"settings.lazyLoading && settings.enableFilterSelectAll && !isDisabledItemPresent && !settings.singleSelection\">\n                <div class=\"pure-checkbox select-all\" *ngIf=\"filter?.length > 0 && infiniteFilterLength > 0\" (click)=\"toggleInfiniteFilterSelectAll()\">\n                    <input type=\"checkbox\" [checked]=\"isInfiniteFilterSelectAll\" [disabled]=\"settings.limitSelection == selectedItems?.length\"\n                    aria-labelledby=\"option\"/>\n                    <label>\n                        <span [hidden]=\"isInfiniteFilterSelectAll\">{{settings.filterSelectAllText}}</span>\n                        <span [hidden]=\"!isInfiniteFilterSelectAll\">{{settings.filterUnSelectAllText}}</span>\n                    </label>\n                </div>\n            </div>\n            <div class=\"filter-select-all\">\n                <label class=\"nodata-label\" *ngIf=\"!settings.groupBy && filterLength == 0\" [hidden]=\"filter == undefined || filter?.length == 0\">{{settings.noDataLabel}}</label>\n                <label class=\"nodata-label\" *ngIf=\"settings.groupBy && groupedData?.length == 0\" [hidden]=\"filter == undefined || filter?.length == 0\">{{settings.noDataLabel}}</label>\n\n                <div class=\"btn-container\" *ngIf=\"settings.addNewItemOnFilter && filterLength == 0\" [hidden]=\"filter == undefined || filter?.length == 0\">\n                    <button class=\"c-btn btn-iceblue\" (click)=\"addFilterNewItem()\">{{settings.addNewButtonText}}</button>\n                </div>\n            </div>\n\n            <div *ngIf=\"!settings.groupBy && !settings.lazyLoading && itemTempl == undefined\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n                style=\"overflow: auto;\">\n                <ul class=\"lazyContainer\">\n                    <li *ngFor=\"let item of data | listFilter:filter : settings.searchBy; let i = index;\" (click)=\"onItemClick(item,i,$event)\"\n                        class=\"pure-checkbox\" [ngClass]=\"{'selected-item': isSelected(item) == true }\">\n                        <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n                        aria-labelledby=\"option\"/>\n                        <label>{{item[settings.labelKey]}}</label>\n                    </li>\n                </ul>\n            </div>\n            <!-- lazy loading -->\n            <div *ngIf=\"!settings.groupBy && settings.lazyLoading && itemTempl == undefined\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n                style=\"overflow: auto;\">\n                <ul virtualScroller #scroll [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\" (vsStart)=\"onScrollEnd($event)\"\n                    (vsEnd)=\"onScrollEnd($event)\" [ngStyle]=\"{'height': settings.maxHeight+'px'}\" class=\"lazyContainer\">\n                    <li *ngFor=\"let item of scroll.viewPortItems; let i = index;\" (click)=\"onItemClick(item,i,$event)\" class=\"pure-checkbox\"\n                        [ngClass]=\"{'selected-item': isSelected(item) == true }\">\n                        <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n                        />\n                        <label>{{item[settings.labelKey]}}</label>\n                    </li>\n                </ul>\n            </div>\n            <!-- custom template -->\n            <div *ngIf=\"!settings.groupBy && !settings.lazyLoading && itemTempl != undefined\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n                style=\"overflow: auto;\">\n                <ul class=\"lazyContainer\">\n                    <li *ngFor=\"let item of data | listFilter:filter : settings.searchBy; let i = index;\" (click)=\"onItemClick(item,i,$event)\"\n                        class=\"pure-checkbox\" [ngClass]=\"{'selected-item': isSelected(item) == true }\">\n                        <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n                        />\n                        <label></label>\n                        <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n                    </li>\n                </ul>\n            </div>\n            <!-- lazy loading and custom template -->\n            <div *ngIf=\"!settings.groupBy && settings.lazyLoading && itemTempl != undefined\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n                style=\"overflow: auto;\">\n                <ul virtualScroller #scroll2 [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\" (vsStart)=\"onScrollEnd($event)\"\n                    (vsEnd)=\"onScrollEnd($event)\" class=\"lazyContainer\" [ngStyle]=\"{'height': settings.maxHeight+'px'}\">\n                    <li *ngFor=\"let item of scroll2.viewPortItems; let i = index;\" (click)=\"onItemClick(item,i,$event)\" class=\"pure-checkbox\"\n                        [ngClass]=\"{'selected-item': isSelected(item) == true }\">\n                        <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n                        />\n                        <label></label>\n                        <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n                    </li>\n                </ul>\n            </div>\n            <!-- lazy loading, group By and custom template -->\n            <div *ngIf=\"settings.groupBy && settings.lazyLoading && itemTempl != undefined\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n                style=\"overflow: auto;\">\n                <ul virtualScroller #scroll3 [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\" (vsStart)=\"onScrollEnd($event)\"\n                    (vsEnd)=\"onScrollEnd($event)\" [ngStyle]=\"{'height': settings.maxHeight+'px'}\" class=\"lazyContainer\">\n                    <span *ngFor=\"let item of scroll3.viewPortItems; let i = index;\">\n                        <li (click)=\"onItemClick(item,i,$event)\" *ngIf=\"!item.grpTitle\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection}\"\n                            class=\"pure-checkbox\">\n                            <input *ngIf=\"settings.showCheckbox && !settings.singleSelection\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n                            />\n                            <label></label>\n                            <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n                        </li>\n                        <li *ngIf=\"item.grpTitle\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection}\"\n                            class=\"pure-checkbox\">\n                            <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n                            />\n                            <label></label>\n                            <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n                        </li>\n                    </span>\n                </ul>\n            </div>\n            <!-- group By and custom template -->\n            <div *ngIf=\"settings.groupBy && !settings.lazyLoading && itemTempl != undefined\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n                style=\"overflow: auto;\">\n                <ul class=\"lazyContainer\">\n                    <span *ngFor=\"let item of groupedData; let i = index;\">\n                        <li (click)=\"selectGroup(item)\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection}\"\n                            class=\"pure-checkbox\">\n                            <input *ngIf=\"settings.showCheckbox && !settings.singleSelection\" type=\"checkbox\" [checked]=\"item.selected\" [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n                            />\n                            <label>{{item[settings.labelKey]}}</label>\n                            <ul class=\"lazyContainer\">\n                                <span *ngFor=\"let val of item.list ; let j = index;\">\n                                    <li (click)=\"onItemClick(val,j,$event); $event.stopPropagation()\" [ngClass]=\"{'grp-title': val.grpTitle,'grp-item': !val.grpTitle && !settings.singleSelection}\"\n                                        class=\"pure-checkbox\">\n                                        <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(val)\" [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(val)) || val.disabled\"\n                                        />\n                                        <label></label>\n                                        <c-templateRenderer [data]=\"itemTempl\" [item]=\"val\"></c-templateRenderer>\n                                    </li>\n                                </span>\n                            </ul>\n\n                        </li>\n                    </span>\n                </ul>\n            </div>\n            <!-- lazy loading, group By -->\n            <div *ngIf=\"settings.groupBy && settings.lazyLoading && itemTempl == undefined\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n                style=\"overflow: auto;\">\n                <virtual-scroller [items]=\"groupedData\" (vsUpdate)=\"viewPortItems = $event\" (vsEnd)=\"onScrollEnd($event)\" [ngStyle]=\"{'height': settings.maxHeight+'px'}\">\n                    <ul virtualScroller #scroll4 [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\" (vsStart)=\"onScrollEnd($event)\"\n                        (vsEnd)=\"onScrollEnd($event)\" [ngStyle]=\"{'height': settings.maxHeight+'px'}\" class=\"lazyContainer\">\n                        <span *ngFor=\"let item of scroll4.viewPortItems; let i = index;\">\n                            <li *ngIf=\"item.grpTitle\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection, 'selected-item': isSelected(item) == true }\"\n                                class=\"pure-checkbox\">\n                                <input *ngIf=\"settings.showCheckbox && !item.grpTitle && !settings.singleSelection\" type=\"checkbox\" [checked]=\"isSelected(item)\"\n                                    [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n                                />\n                                <label>{{item[settings.labelKey]}}</label>\n                            </li>\n                            <li (click)=\"onItemClick(item,i,$event)\" *ngIf=\"!item.grpTitle\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection, 'selected-item': isSelected(item) == true }\"\n                                class=\"pure-checkbox\">\n                                <input *ngIf=\"settings.showCheckbox && !item.grpTitle\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n                                />\n                                <label>{{item[settings.labelKey]}}</label>\n                            </li>\n                        </span>\n                    </ul>\n                </virtual-scroller>\n            </div>\n            <!-- group By -->\n            <div *ngIf=\"settings.groupBy && !settings.lazyLoading && itemTempl == undefined\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n                style=\"overflow: auto;\">\n                <ul class=\"lazyContainer\">\n                    <span *ngFor=\"let item of groupedData ; let i = index;\">\n                        <li (click)=\"selectGroup(item)\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection}\"\n                            class=\"pure-checkbox\">\n                            <input *ngIf=\"settings.showCheckbox && !settings.singleSelection\" type=\"checkbox\" [checked]=\"item.selected\" [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n                            />\n                            <label>{{item[settings.labelKey]}}</label>\n                            <ul class=\"lazyContainer\">\n                                <span *ngFor=\"let val of item.list ; let j = index;\">\n                                    <li (click)=\"onItemClick(val,j,$event); $event.stopPropagation()\" [ngClass]=\"{'selected-item': isSelected(val) == true,'grp-title': val.grpTitle,'grp-item': !val.grpTitle && !settings.singleSelection}\"\n                                        class=\"pure-checkbox\">\n                                        <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(val)\" [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(val)) || val.disabled\"\n                                        />\n                                        <label>{{val[settings.labelKey]}}</label>\n                                    </li>\n                                </span>\n                            </ul>\n                        </li>\n                    </span>\n                    <!-- <span *ngFor=\"let item of groupedData ; let i = index;\">\n                    <li (click)=\"onItemClick(item,i,$event)\" *ngIf=\"!item.grpTitle\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle}\" class=\"pure-checkbox\">\n                    <input *ngIf=\"settings.showCheckbox && !item.grpTitle\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"\n                    />\n                    <label>{{item[settings.labelKey]}}</label>\n                </li>\n                <li *ngIf=\"item.grpTitle && !settings.selectGroup\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle}\" class=\"pure-checkbox\">\n                    <input *ngIf=\"settings.showCheckbox && settings.selectGroup\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"\n                    />\n                    <label>{{item[settings.labelKey]}}</label>\n                </li>\n                 <li  (click)=\"selectGroup(item)\" *ngIf=\"item.grpTitle && settings.selectGroup\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle}\" class=\"pure-checkbox\">\n                    <input *ngIf=\"settings.showCheckbox && settings.selectGroup\" type=\"checkbox\" [checked]=\"item.selected\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"\n                    />\n                    <label>{{item[settings.labelKey]}}</label>\n                </li>\n                </span> -->\n                </ul>\n            </div>\n            <h5 class=\"list-message\" *ngIf=\"data?.length == 0\">{{settings.noDataLabel}}</h5>\n        </div>\n    </div>\n</div>",
            host: {
              '[class]': 'defaultSettings.classes'
            },
            providers: [DROPDOWN_CONTROL_VALUE_ACCESSOR, DROPDOWN_CONTROL_VALIDATION],
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            styles: ["virtual-scroll{display:block;width:100%}.cuppa-dropdown{position:relative}.c-btn{display:inline-block;border-width:1px;line-height:1.25;border-radius:3px;font-size:.85rem;padding:5px 10px;cursor:pointer;-webkit-box-align:center;align-items:center;min-height:38px}.c-btn.disabled{background:#ccc}.selected-list .c-list{float:left;padding:0;margin:0;width:calc(100% - 20px)}.selected-list .c-list .c-token{list-style:none;padding:4px 22px 4px 8px;border-radius:2px;margin-right:4px;margin-top:2px;float:left;position:relative}.selected-list .c-list .c-token .c-label{display:block;float:left}.selected-list .c-list .c-token .c-remove{position:absolute;right:8px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);width:8px}.selected-list .c-list .c-token .c-remove svg{fill:#fff}.selected-list .fa-angle-down,.selected-list .fa-angle-up{font-size:15pt;position:absolute;right:10px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.selected-list .c-angle-down,.selected-list .c-angle-up{width:12px;height:12px;position:absolute;right:10px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);pointer-events:none}.selected-list .c-angle-down svg,.selected-list .c-angle-up svg{fill:#333}.selected-list .countplaceholder{position:absolute;right:45px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.selected-list .c-btn{width:100%;padding:5px 10px;cursor:pointer;display:-webkit-box;display:flex;position:relative}.selected-list .c-btn .c-icon{position:absolute;right:5px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.dropdown-list.tagToBody{position:fixed}.dropdown-list{position:absolute;padding-top:14px;width:100%;z-index:99999}.dropdown-list ul{padding:0;list-style:none;overflow:auto;margin:0}.dropdown-list ul li{padding:10px;cursor:pointer;text-align:left}.dropdown-list ul li:first-child{padding-top:10px}.dropdown-list ul li:last-child{padding-bottom:10px}.dropdown-list ::-webkit-scrollbar{width:8px}.dropdown-list ::-webkit-scrollbar-thumb{background:#ccc;border-radius:5px}.dropdown-list ::-webkit-scrollbar-track{background:#f2f2f2}.arrow-down,.arrow-up{width:0;height:0;border-left:13px solid transparent;border-right:13px solid transparent;border-bottom:15px solid #fff;margin-left:15px;position:absolute;top:0}.arrow-down{bottom:-14px;top:unset;-webkit-transform:rotate(180deg);transform:rotate(180deg)}.arrow-2{border-bottom:15px solid #ccc;top:-1px}.arrow-down.arrow-2{top:unset;bottom:-16px}.list-area{border:1px solid #ccc;border-radius:3px;background:#fff;margin:0}.select-all{padding:10px;border-bottom:1px solid #ccc;text-align:left}.list-filter{border-bottom:1px solid #ccc;position:relative;padding-left:35px;height:35px}.list-filter input{border:0;width:100%;height:100%;padding:0}.list-filter input:focus{outline:0}.list-filter .c-search{position:absolute;top:9px;left:10px;width:15px;height:15px}.list-filter .c-search svg{fill:#888}.list-filter .c-clear{position:absolute;top:10px;right:10px;width:15px;height:15px}.list-filter .c-clear svg{fill:#888}.pure-checkbox input[type=checkbox]{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.pure-checkbox input[type=checkbox]:focus+label:before,.pure-checkbox input[type=checkbox]:hover+label:before{background-color:#f2f2f2}.pure-checkbox input[type=checkbox]:active+label:before{-webkit-transition-duration:0s;transition-duration:0s}.pure-checkbox input[type=checkbox]:disabled+label{color:#ccc}.pure-checkbox input[type=checkbox]+label{position:relative;padding-left:2em;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;margin:0;font-weight:300}.pure-checkbox input[type=checkbox]+label:before{box-sizing:content-box;content:'';position:absolute;top:50%;left:0;width:15px;height:15px;margin-top:-9px;text-align:center;-webkit-transition:.4s;transition:.4s;border-radius:3px}.pure-checkbox input[type=checkbox]+label:after{box-sizing:content-box;content:'';position:absolute;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:50%;transform-origin:50%;-webkit-transition:-webkit-transform .2s ease-out;transition:transform .2s ease-out,-webkit-transform .2s ease-out;background-color:transparent;top:50%;left:3px;width:9px;height:4px;margin-top:-5px;border-style:solid;border-width:0 0 2px 2px;-webkit-border-image:none;-o-border-image:none;border-image:none;-webkit-transform:rotate(-45deg) scale(0);transform:rotate(-45deg) scale(0)}.pure-checkbox input[type=checkbox]:disabled+label:before{border-color:#ccc}.pure-checkbox input[type=checkbox]:disabled:focus+label:before .pure-checkbox input[type=checkbox]:disabled:hover+label:before{background-color:inherit}.pure-checkbox input[type=checkbox]:disabled:checked+label:before{background-color:#ccc}.pure-checkbox input[type=radio]:checked+label:before{background-color:#fff}.pure-checkbox input[type=radio]:checked+label:after{-webkit-transform:scale(1);transform:scale(1)}.pure-checkbox input[type=radio]+label:before{border-radius:50%}.pure-checkbox input[type=checkbox]:checked+label:after{content:'';-webkit-transition:-webkit-transform .2s ease-out;transition:transform .2s ease-out,-webkit-transform .2s ease-out;-webkit-transform:rotate(-45deg) scale(1);transform:rotate(-45deg) scale(1)}.list-message{text-align:center;margin:0;padding:15px 0;font-size:initial}.list-grp{padding:0 15px!important}.list-grp h4{text-transform:capitalize;margin:15px 0 0;font-size:14px;font-weight:700}.list-grp>li{padding-left:15px!important}.grp-item{padding-left:30px!important}.grp-title{padding-bottom:0!important}.grp-title label{margin-bottom:0!important;font-weight:800;text-transform:capitalize}.grp-title:hover{background:0 0!important}.loading-icon{width:20px;position:absolute;right:10px;top:23px;z-index:1}.nodata-label{width:100%;text-align:center;padding:10px 0 0}.btn-container{text-align:center;padding:0 5px 10px}.clear-all{width:8px;position:absolute;top:50%;right:30px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}"]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }, {
            type: DataService
          }];
        }, {
          onSelect: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
            args: ['onSelect']
          }],
          onDeSelect: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
            args: ['onDeSelect']
          }],
          onSelectAll: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
            args: ['onSelectAll']
          }],
          onDeSelectAll: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
            args: ['onDeSelectAll']
          }],
          onOpen: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
            args: ['onOpen']
          }],
          onClose: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
            args: ['onClose']
          }],
          onScrollToEnd: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
            args: ['onScrollToEnd']
          }],
          onFilterSelectAll: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
            args: ['onFilterSelectAll']
          }],
          onFilterDeSelectAll: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
            args: ['onFilterDeSelectAll']
          }],
          onAddFilterNewItem: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
            args: ['onAddFilterNewItem']
          }],
          onGroupSelect: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
            args: ['onGroupSelect']
          }],
          onGroupDeSelect: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"],
            args: ['onGroupDeSelect']
          }],

          /**
           * @param {?} event
           * @return {?}
           */
          onEscapeDown: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
            args: ['document:keyup.escape', ['$event']]
          }],

          /**
           * @param {?} event
           * @return {?}
           */
          onScroll: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
            args: ['window:scroll', ['$event']]
          }],
          settings: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          data: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          loading: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          itemTempl: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [Item, {
              "static": false
            }]
          }],
          badgeTempl: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [Badge, {
              "static": false
            }]
          }],
          searchTempl: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [Search, {
              "static": false
            }]
          }],
          searchInput: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
            args: ['searchInput', {
              "static": false
            }]
          }],
          selectedListElem: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
            args: ['selectedList', {
              "static": false
            }]
          }],
          dropdownListElem: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
            args: ['dropdownList', {
              "static": false
            }]
          }],
          cuppaDropdown: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
            args: ['cuppaDropdown', {
              "static": false
            }]
          }],
          virtualScroller: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
            args: [VirtualScrollerComponent, {
              "static": false
            }]
          }]
        });
      })();

      if (false) {}

      var AngularMultiSelectModule = function AngularMultiSelectModule() {
        _classCallCheck2(this, AngularMultiSelectModule);
      };

      AngularMultiSelectModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: AngularMultiSelectModule
      });
      AngularMultiSelectModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function AngularMultiSelectModule_Factory(t) {
          return new (t || AngularMultiSelectModule)();
        },
        providers: [DataService],
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormsModule"], VirtualScrollerModule]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](AngularMultiSelectModule, {
          declarations: function declarations() {
            return [AngularMultiSelect, ClickOutsideDirective, ScrollDirective, styleDirective, ListFilterPipe, Item, TemplateRenderer, Badge, Search, setPosition, CIcon];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormsModule"], VirtualScrollerModule];
          },
          exports: function exports() {
            return [AngularMultiSelect, ClickOutsideDirective, ScrollDirective, styleDirective, ListFilterPipe, Item, TemplateRenderer, Badge, Search, setPosition, CIcon];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](AngularMultiSelectModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormsModule"], VirtualScrollerModule],
            declarations: [AngularMultiSelect, ClickOutsideDirective, ScrollDirective, styleDirective, ListFilterPipe, Item, TemplateRenderer, Badge, Search, setPosition, CIcon],
            exports: [AngularMultiSelect, ClickOutsideDirective, ScrollDirective, styleDirective, ListFilterPipe, Item, TemplateRenderer, Badge, Search, setPosition, CIcon],
            providers: [DataService]
          }]
        }], null, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */
      //# sourceMappingURL=angular2-multiselect-dropdown.js.map

      /***/

    },

    /***/
    "eFjS":
    /*!*******************************************************!*\
      !*** ./node_modules/aws-sdk/lib/protocol/rest_xml.js ***!
      \*******************************************************/

    /*! no static exports found */

    /***/
    function eFjS(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ../core */
      "QsWE");

      var util = __webpack_require__(
      /*! ../util */
      "BaN1");

      var Rest = __webpack_require__(
      /*! ./rest */
      "KFai");

      function populateBody(req) {
        var input = req.service.api.operations[req.operation].input;
        var builder = new AWS.XML.Builder();
        var params = req.params;
        var payload = input.payload;

        if (payload) {
          var payloadMember = input.members[payload];
          params = params[payload];
          if (params === undefined) return;

          if (payloadMember.type === 'structure') {
            var rootElement = payloadMember.name;
            req.httpRequest.body = builder.toXML(params, payloadMember, rootElement, true);
          } else {
            // non-xml payload
            req.httpRequest.body = params;
          }
        } else {
          req.httpRequest.body = builder.toXML(params, input, input.name || input.shape || util.string.upperFirst(req.operation) + 'Request');
        }
      }

      function buildRequest(req) {
        Rest.buildRequest(req); // never send body payload on GET/HEAD

        if (['GET', 'HEAD'].indexOf(req.httpRequest.method) < 0) {
          populateBody(req);
        }
      }

      function extractError(resp) {
        Rest.extractError(resp);
        var data;

        try {
          data = new AWS.XML.Parser().parse(resp.httpResponse.body.toString());
        } catch (e) {
          data = {
            Code: resp.httpResponse.statusCode,
            Message: resp.httpResponse.statusMessage
          };
        }

        if (data.Errors) data = data.Errors;
        if (data.Error) data = data.Error;

        if (data.Code) {
          resp.error = util.error(new Error(), {
            code: data.Code,
            message: data.Message
          });
        } else {
          resp.error = util.error(new Error(), {
            code: resp.httpResponse.statusCode,
            message: null
          });
        }
      }

      function extractData(resp) {
        Rest.extractData(resp);
        var parser;
        var req = resp.request;
        var body = resp.httpResponse.body;
        var operation = req.service.api.operations[req.operation];
        var output = operation.output;
        var hasEventOutput = operation.hasEventOutput;
        var payload = output.payload;

        if (payload) {
          var payloadMember = output.members[payload];

          if (payloadMember.isEventStream) {
            parser = new AWS.XML.Parser();
            resp.data[payload] = util.createEventStream(AWS.HttpClient.streamsApiVersion === 2 ? resp.httpResponse.stream : resp.httpResponse.body, parser, payloadMember);
          } else if (payloadMember.type === 'structure') {
            parser = new AWS.XML.Parser();
            resp.data[payload] = parser.parse(body.toString(), payloadMember);
          } else if (payloadMember.type === 'binary' || payloadMember.isStreaming) {
            resp.data[payload] = body;
          } else {
            resp.data[payload] = payloadMember.toType(body);
          }
        } else if (body.length > 0) {
          parser = new AWS.XML.Parser();
          var data = parser.parse(body.toString(), output);
          util.update(resp.data, data);
        }
      }
      /**
       * @api private
       */


      module.exports = {
        buildRequest: buildRequest,
        extractError: extractError,
        extractData: extractData
      };
      /***/
    },

    /***/
    "eIep":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/switchMap.js ***!
      \********************************************************************/

    /*! exports provided: switchMap */

    /***/
    function eIep(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "switchMap", function () {
        return switchMap;
      });
      /* harmony import */


      var _map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./map */
      "lJxs");
      /* harmony import */


      var _observable_from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../observable/from */
      "Cfvw");
      /* harmony import */


      var _innerSubscribe__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../innerSubscribe */
      "zx2A");

      function switchMap(project, resultSelector) {
        if (typeof resultSelector === 'function') {
          return function (source) {
            return source.pipe(switchMap(function (a, i) {
              return Object(_observable_from__WEBPACK_IMPORTED_MODULE_1__["from"])(project(a, i)).pipe(Object(_map__WEBPACK_IMPORTED_MODULE_0__["map"])(function (b, ii) {
                return resultSelector(a, b, i, ii);
              }));
            }));
          };
        }

        return function (source) {
          return source.lift(new SwitchMapOperator(project));
        };
      }

      var SwitchMapOperator = /*#__PURE__*/function () {
        function SwitchMapOperator(project) {
          _classCallCheck2(this, SwitchMapOperator);

          this.project = project;
        }

        _createClass2(SwitchMapOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new SwitchMapSubscriber(subscriber, this.project));
          }
        }]);

        return SwitchMapOperator;
      }();

      var SwitchMapSubscriber = /*#__PURE__*/function (_innerSubscribe__WEBP14) {
        _inherits2(SwitchMapSubscriber, _innerSubscribe__WEBP14);

        var _super289 = _createSuper(SwitchMapSubscriber);

        function SwitchMapSubscriber(destination, project) {
          var _this684;

          _classCallCheck2(this, SwitchMapSubscriber);

          _this684 = _super289.call(this, destination);
          _this684.project = project;
          _this684.index = 0;
          return _this684;
        }

        _createClass2(SwitchMapSubscriber, [{
          key: "_next",
          value: function _next(value) {
            var result;
            var index = this.index++;

            try {
              result = this.project(value, index);
            } catch (error) {
              this.destination.error(error);
              return;
            }

            this._innerSub(result);
          }
        }, {
          key: "_innerSub",
          value: function _innerSub(result) {
            var innerSubscription = this.innerSubscription;

            if (innerSubscription) {
              innerSubscription.unsubscribe();
            }

            var innerSubscriber = new _innerSubscribe__WEBPACK_IMPORTED_MODULE_2__["SimpleInnerSubscriber"](this);
            var destination = this.destination;
            destination.add(innerSubscriber);
            this.innerSubscription = Object(_innerSubscribe__WEBPACK_IMPORTED_MODULE_2__["innerSubscribe"])(result, innerSubscriber);

            if (this.innerSubscription !== innerSubscriber) {
              destination.add(this.innerSubscription);
            }
          }
        }, {
          key: "_complete",
          value: function _complete() {
            var innerSubscription = this.innerSubscription;

            if (!innerSubscription || innerSubscription.closed) {
              _get2(_getPrototypeOf2(SwitchMapSubscriber.prototype), "_complete", this).call(this);
            }

            this.unsubscribe();
          }
        }, {
          key: "_unsubscribe",
          value: function _unsubscribe() {
            this.innerSubscription = undefined;
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete() {
            this.innerSubscription = undefined;

            if (this.isStopped) {
              _get2(_getPrototypeOf2(SwitchMapSubscriber.prototype), "_complete", this).call(this);
            }
          }
        }, {
          key: "notifyNext",
          value: function notifyNext(innerValue) {
            this.destination.next(innerValue);
          }
        }]);

        return SwitchMapSubscriber;
      }(_innerSubscribe__WEBPACK_IMPORTED_MODULE_2__["SimpleOuterSubscriber"]); //# sourceMappingURL=switchMap.js.map

      /***/

    },

    /***/
    "eLAQ":
    /*!*********************************************************!*\
      !*** ./node_modules/aws-sdk/lib/sequential_executor.js ***!
      \*********************************************************/

    /*! no static exports found */

    /***/
    function eLAQ(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ./core */
      "QsWE");
      /**
       * @api private
       * @!method on(eventName, callback)
       *   Registers an event listener callback for the event given by `eventName`.
       *   Parameters passed to the callback function depend on the individual event
       *   being triggered. See the event documentation for those parameters.
       *
       *   @param eventName [String] the event name to register the listener for
       *   @param callback [Function] the listener callback function
       *   @param toHead [Boolean] attach the listener callback to the head of callback array if set to true.
       *     Default to be false.
       *   @return [AWS.SequentialExecutor] the same object for chaining
       */


      AWS.SequentialExecutor = AWS.util.inherit({
        constructor: function SequentialExecutor() {
          this._events = {};
        },

        /**
         * @api private
         */
        listeners: function listeners(eventName) {
          return this._events[eventName] ? this._events[eventName].slice(0) : [];
        },
        on: function on(eventName, listener, toHead) {
          if (this._events[eventName]) {
            toHead ? this._events[eventName].unshift(listener) : this._events[eventName].push(listener);
          } else {
            this._events[eventName] = [listener];
          }

          return this;
        },
        onAsync: function onAsync(eventName, listener, toHead) {
          listener._isAsync = true;
          return this.on(eventName, listener, toHead);
        },
        removeListener: function removeListener(eventName, listener) {
          var listeners = this._events[eventName];

          if (listeners) {
            var length = listeners.length;
            var position = -1;

            for (var i = 0; i < length; ++i) {
              if (listeners[i] === listener) {
                position = i;
              }
            }

            if (position > -1) {
              listeners.splice(position, 1);
            }
          }

          return this;
        },
        removeAllListeners: function removeAllListeners(eventName) {
          if (eventName) {
            delete this._events[eventName];
          } else {
            this._events = {};
          }

          return this;
        },

        /**
         * @api private
         */
        emit: function emit(eventName, eventArgs, doneCallback) {
          if (!doneCallback) doneCallback = function doneCallback() {};
          var listeners = this.listeners(eventName);
          var count = listeners.length;
          this.callListeners(listeners, eventArgs, doneCallback);
          return count > 0;
        },

        /**
         * @api private
         */
        callListeners: function callListeners(listeners, args, doneCallback, prevError) {
          var self = this;
          var error = prevError || null;

          function callNextListener(err) {
            if (err) {
              error = AWS.util.error(error || new Error(), err);

              if (self._haltHandlersOnError) {
                return doneCallback.call(self, error);
              }
            }

            self.callListeners(listeners, args, doneCallback, error);
          }

          while (listeners.length > 0) {
            var listener = listeners.shift();

            if (listener._isAsync) {
              // asynchronous listener
              listener.apply(self, args.concat([callNextListener]));
              return; // stop here, callNextListener will continue
            } else {
              // synchronous listener
              try {
                listener.apply(self, args);
              } catch (err) {
                error = AWS.util.error(error || new Error(), err);
              }

              if (error && self._haltHandlersOnError) {
                doneCallback.call(self, error);
                return;
              }
            }
          }

          doneCallback.call(self, error);
        },

        /**
         * Adds or copies a set of listeners from another list of
         * listeners or SequentialExecutor object.
         *
         * @param listeners [map<String,Array<Function>>, AWS.SequentialExecutor]
         *   a list of events and callbacks, or an event emitter object
         *   containing listeners to add to this emitter object.
         * @return [AWS.SequentialExecutor] the emitter object, for chaining.
         * @example Adding listeners from a map of listeners
         *   emitter.addListeners({
         *     event1: [function() { ... }, function() { ... }],
         *     event2: [function() { ... }]
         *   });
         *   emitter.emit('event1'); // emitter has event1
         *   emitter.emit('event2'); // emitter has event2
         * @example Adding listeners from another emitter object
         *   var emitter1 = new AWS.SequentialExecutor();
         *   emitter1.on('event1', function() { ... });
         *   emitter1.on('event2', function() { ... });
         *   var emitter2 = new AWS.SequentialExecutor();
         *   emitter2.addListeners(emitter1);
         *   emitter2.emit('event1'); // emitter2 has event1
         *   emitter2.emit('event2'); // emitter2 has event2
         */
        addListeners: function addListeners(listeners) {
          var self = this; // extract listeners if parameter is an SequentialExecutor object

          if (listeners._events) listeners = listeners._events;
          AWS.util.each(listeners, function (event, callbacks) {
            if (typeof callbacks === 'function') callbacks = [callbacks];
            AWS.util.arrayEach(callbacks, function (callback) {
              self.on(event, callback);
            });
          });
          return self;
        },

        /**
         * Registers an event with {on} and saves the callback handle function
         * as a property on the emitter object using a given `name`.
         *
         * @param name [String] the property name to set on this object containing
         *   the callback function handle so that the listener can be removed in
         *   the future.
         * @param (see on)
         * @return (see on)
         * @example Adding a named listener DATA_CALLBACK
         *   var listener = function() { doSomething(); };
         *   emitter.addNamedListener('DATA_CALLBACK', 'data', listener);
         *
         *   // the following prints: true
         *   console.log(emitter.DATA_CALLBACK == listener);
         */
        addNamedListener: function addNamedListener(name, eventName, callback, toHead) {
          this[name] = callback;
          this.addListener(eventName, callback, toHead);
          return this;
        },

        /**
         * @api private
         */
        addNamedAsyncListener: function addNamedAsyncListener(name, eventName, callback, toHead) {
          callback._isAsync = true;
          return this.addNamedListener(name, eventName, callback, toHead);
        },

        /**
         * Helper method to add a set of named listeners using
         * {addNamedListener}. The callback contains a parameter
         * with a handle to the `addNamedListener` method.
         *
         * @callback callback function(add)
         *   The callback function is called immediately in order to provide
         *   the `add` function to the block. This simplifies the addition of
         *   a large group of named listeners.
         *   @param add [Function] the {addNamedListener} function to call
         *     when registering listeners.
         * @example Adding a set of named listeners
         *   emitter.addNamedListeners(function(add) {
         *     add('DATA_CALLBACK', 'data', function() { ... });
         *     add('OTHER', 'otherEvent', function() { ... });
         *     add('LAST', 'lastEvent', function() { ... });
         *   });
         *
         *   // these properties are now set:
         *   emitter.DATA_CALLBACK;
         *   emitter.OTHER;
         *   emitter.LAST;
         */
        addNamedListeners: function addNamedListeners(callback) {
          var self = this;
          callback(function () {
            self.addNamedListener.apply(self, arguments);
          }, function () {
            self.addNamedAsyncListener.apply(self, arguments);
          });
          return this;
        }
      });
      /**
       * {on} is the prefered method.
       * @api private
       */

      AWS.SequentialExecutor.prototype.addListener = AWS.SequentialExecutor.prototype.on;
      /**
       * @api private
       */

      module.exports = AWS.SequentialExecutor;
      /***/
    },

    /***/
    "eNwd":
    /*!*************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/scheduler/animationFrame.js ***!
      \*************************************************************************/

    /*! exports provided: animationFrameScheduler, animationFrame */

    /***/
    function eNwd(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "animationFrameScheduler", function () {
        return animationFrameScheduler;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "animationFrame", function () {
        return animationFrame;
      });
      /* harmony import */


      var _AnimationFrameAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./AnimationFrameAction */
      "Vpsf");
      /* harmony import */


      var _AnimationFrameScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./AnimationFrameScheduler */
      "znLP");

      var animationFrameScheduler = new _AnimationFrameScheduler__WEBPACK_IMPORTED_MODULE_1__["AnimationFrameScheduler"](_AnimationFrameAction__WEBPACK_IMPORTED_MODULE_0__["AnimationFrameAction"]);
      var animationFrame = animationFrameScheduler; //# sourceMappingURL=animationFrame.js.map

      /***/
    },

    /***/
    "eSIH":
    /*!*********************************************************************!*\
      !*** ./node_modules/ng-select2/__ivy_ngcc__/fesm2015/ng-select2.js ***!
      \*********************************************************************/

    /*! exports provided: NgSelect2Component, NgSelect2Module */

    /***/
    function eSIH(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgSelect2Component", function () {
        return NgSelect2Component;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgSelect2Module", function () {
        return NgSelect2Module;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_forms__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/forms */
      "3Pt+");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/common */
      "ofXK"); /// <reference types="select2" />


      var _c0 = ["selector"];
      var _c1 = [[["option"], ["optgroup"]]];
      var _c2 = ["option, optgroup"];

      var NgSelect2Component = /*#__PURE__*/function () {
        // private style = `CSS`;
        function NgSelect2Component(renderer, zone, _element) {
          _classCallCheck2(this, NgSelect2Component);

          this.renderer = renderer;
          this.zone = zone;
          this._element = _element; // value for placeholder

          this.placeholder = '';
          this.dropdownParent = '';
          this.allowClear = false; // enable / disable select2

          this.disabled = false; // emitter when value is changed

          this.valueChanged = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.element = undefined;
          this.check = false;

          this.propagateChange = function (value) {};
        }

        _createClass2(NgSelect2Component, [{
          key: "ngDoCheck",
          value: function ngDoCheck() {
            if (!this.element) {
              return;
            }
          }
        }, {
          key: "ngOnInit",
          value: function ngOnInit() {// if (this.cssImport) {
            //   const head = document.getElementsByTagName('head')[0];
            //   const link: any = head.children[head.children.length - 1];
            //   if (!link.version) {
            //     const newLink = this.renderer.createElement(head, 'style');
            //     this.renderer.setElementProperty(newLink, 'type', 'text/css');
            //     this.renderer.setElementProperty(newLink, 'version', 'select2');
            //     this.renderer.setElementProperty(newLink, 'innerHTML', this.style);
            //   }
            // }
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            if (!this.element) {
              return;
            }

            if (changes['data'] && JSON.stringify(changes['data'].previousValue) !== JSON.stringify(changes['data'].currentValue)) {
              this.initPlugin();
              var newValue = this.value;
              this.setElementValue(newValue);
              this.valueChanged.emit(newValue);
              this.propagateChange(newValue);
            }

            if (changes['value'] && changes['value'].previousValue !== changes['value'].currentValue) {
              var _newValue = changes['value'].currentValue;
              this.setElementValue(_newValue);
              this.valueChanged.emit(_newValue);
              this.propagateChange(_newValue);
            }

            if (changes['disabled'] && changes['disabled'].previousValue !== changes['disabled'].currentValue) {
              this.renderer.setProperty(this.selector.nativeElement, 'disabled', this.disabled);
            }

            if (changes['placeholder'] && changes['placeholder'].previousValue !== changes['placeholder'].currentValue) {
              this.element.data('select2').$container.find('.select2-selection__placeholder').text(this.placeholder);
            }

            if (changes['dropdownParent'] && changes['dropdownParent'].previousValue !== changes['dropdownParent'].currentValue) {
              this.renderer.setAttribute(this.selector.nativeElement, 'data-dropdownParent', this.dropdownParent);
            }

            if (changes['allowClear'] && changes['allowClear'].previousValue !== changes['allowClear'].currentValue) {
              this.renderer.setAttribute(this.selector.nativeElement, 'data-allow-clear', this.allowClear.toString());
            }
          }
        }, {
          key: "ngAfterViewInit",
          value: function ngAfterViewInit() {
            var _this685 = this;

            this.element = jQuery(this.selector.nativeElement);
            this.renderer.setAttribute(this.selector.nativeElement, 'data-dropdownParent', this.dropdownParent);
            this.renderer.setAttribute(this.selector.nativeElement, 'data-allow-clear', this.allowClear.toString()); // console.log(this.selector.nativeElement);

            this.initPlugin();

            if (this.value !== undefined && this.value !== null) {
              this.setElementValue(this.value);
            }

            this.element.on('select2:select select2:unselect', function (e) {
              // const newValue: string = (e.type === 'select2:unselect') ? '' : this.element.val();
              var newValue = _this685.element.val();

              _this685.valueChanged.emit(newValue);

              _this685.propagateChange(newValue);
            });
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            if (this.element) {
              this.element.off('select2:select');
            }
          }
        }, {
          key: "initPlugin",
          value: function initPlugin() {
            var _this686 = this;

            if (!this.element.select2) {
              if (!this.check) {
                this.check = true;
                console.log('Please add Select2 library (js file) to the project.' + 'You can download it from https://github.com/select2/select2/tree/master/dist/js.');
              }

              return;
            } // If select2 already initialized remove him and remove all tags inside


            if (this.element.hasClass('select2-hidden-accessible') === true) {
              this.element.select2('destroy');
              this.renderer.setProperty(this.selector.nativeElement, 'innerHTML', '');
            }

            var options = {
              data: this.data,
              width: this.width ? this.width : 'resolve',
              placeholder: this.placeholder
            };

            if (this.dropdownParent) {
              options = {
                data: this.data,
                width: this.width ? this.width : 'resolve',
                dropdownParent: jQuery('#' + this.dropdownParent)
              };
            }

            Object.assign(options, this.options);

            if (options.matcher) {
              jQuery.fn.select2.amd.require(['select2/compat/matcher'], function (oldMatcher) {
                options.matcher = oldMatcher(options.matcher);

                _this686.element.select2(options);

                if (typeof _this686.value !== 'undefined') {
                  _this686.setElementValue(_this686.value);
                }
              });
            } else {
              this.element.select2(options);
            }

            this.renderer.setProperty(this.selector.nativeElement, 'disabled', this.disabled);
          }
        }, {
          key: "setElementValue",
          value: function setElementValue(newValue) {
            // this.zone.run(() => {
            if (Array.isArray(newValue)) {
              var _iterator62 = _createForOfIteratorHelper(this.selector.nativeElement.options),
                  _step61;

              try {
                for (_iterator62.s(); !(_step61 = _iterator62.n()).done;) {
                  var option = _step61.value;
                  this.renderer.setProperty(option, 'selected', newValue.indexOf(option.value) > -1);
                }
              } catch (err) {
                _iterator62.e(err);
              } finally {
                _iterator62.f();
              }
            } else {
              this.renderer.setProperty(this.selector.nativeElement, 'value', newValue);
            }

            if (this.element) {
              this.element.trigger('change.select2');
            } // });

          }
        }, {
          key: "writeValue",
          value: function writeValue(value) {
            if (value !== undefined) {
              this.value = value;
              this.setElementValue(value);
            }
          }
        }, {
          key: "registerOnChange",
          value: function registerOnChange(fn) {
            this.propagateChange = fn;
          }
        }, {
          key: "registerOnTouched",
          value: function registerOnTouched() {}
        }, {
          key: "setDisabledState",
          value: function setDisabledState(isDisabled) {
            this.disabled = isDisabled;
            this.renderer.setProperty(this.selector.nativeElement, 'disabled', this.disabled);
          }
        }]);

        return NgSelect2Component;
      }();

      NgSelect2Component.ɵfac = function NgSelect2Component_Factory(t) {
        return new (t || NgSelect2Component)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]));
      };

      NgSelect2Component.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: NgSelect2Component,
        selectors: [["ng-select2"]],
        viewQuery: function NgSelect2Component_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](_c0, 3);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.selector = _t.first);
          }
        },
        inputs: {
          placeholder: "placeholder",
          dropdownParent: "dropdownParent",
          allowClear: "allowClear",
          disabled: "disabled",
          value: "value",
          data: "data",
          width: "width",
          options: "options"
        },
        outputs: {
          valueChanged: "valueChanged"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([{
          provide: _angular_forms__WEBPACK_IMPORTED_MODULE_1__["NG_VALUE_ACCESSOR"],
          useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
            return NgSelect2Component;
          }),
          multi: true
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]],
        ngContentSelectors: _c2,
        decls: 3,
        vars: 0,
        consts: [["selector", ""]],
        template: function NgSelect2Component_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"](_c1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "select", null, 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
          }
        },
        encapsulation: 2,
        changeDetection: 0
      });

      NgSelect2Component.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }];
      };

      NgSelect2Component.propDecorators = {
        selector: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
          args: ['selector', {
            "static": true
          }]
        }],
        data: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        placeholder: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        dropdownParent: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        allowClear: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        value: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        width: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        disabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        options: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        valueChanged: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgSelect2Component, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'ng-select2',
            template: "<select #selector>\r\n  <ng-content select=\"option, optgroup\">\r\n  </ng-content>\r\n</select>\r\n",
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            providers: [{
              provide: _angular_forms__WEBPACK_IMPORTED_MODULE_1__["NG_VALUE_ACCESSOR"],
              useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
                return NgSelect2Component;
              }),
              multi: true
            }]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }];
        }, {
          placeholder: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          dropdownParent: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          allowClear: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          disabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          valueChanged: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          value: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          selector: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
            args: ['selector', {
              "static": true
            }]
          }],
          data: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          width: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          options: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var NgSelect2Module = function NgSelect2Module() {
        _classCallCheck2(this, NgSelect2Module);
      };

      NgSelect2Module.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NgSelect2Module
      });
      NgSelect2Module.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NgSelect2Module_Factory(t) {
          return new (t || NgSelect2Module)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgSelect2Module, {
          declarations: function declarations() {
            return [NgSelect2Component];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"]];
          },
          exports: function exports() {
            return [NgSelect2Component];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgSelect2Module, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"]],
            declarations: [NgSelect2Component],
            exports: [NgSelect2Component]
          }]
        }], null, null);
      })();
      /*
       * Public API Surface of ng-select2
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=ng-select2.js.map

      /***/

    },

    /***/
    "f0Wu":
    /*!***********************************************!*\
      !*** ./node_modules/moment-timezone/index.js ***!
      \***********************************************/

    /*! no static exports found */

    /***/
    function f0Wu(module, exports, __webpack_require__) {
      var moment = module.exports = __webpack_require__(
      /*! ./moment-timezone */
      "Dvum");

      moment.tz.load(__webpack_require__(
      /*! ./data/packed/latest.json */
      "bNI1"));
      /***/
    },

    /***/
    "f29J":
    /*!*****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/concat.js ***!
      \*****************************************************************/

    /*! exports provided: concat */

    /***/
    function f29J(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "concat", function () {
        return concat;
      });
      /* harmony import */


      var _observable_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../observable/concat */
      "GyhO");

      function concat() {
        for (var _len39 = arguments.length, observables = new Array(_len39), _key41 = 0; _key41 < _len39; _key41++) {
          observables[_key41] = arguments[_key41];
        }

        return function (source) {
          return source.lift.call(Object(_observable_concat__WEBPACK_IMPORTED_MODULE_0__["concat"]).apply(void 0, [source].concat(observables)));
        };
      } //# sourceMappingURL=concat.js.map

      /***/

    },

    /***/
    "f6nW":
    /*!******************************************************************!*\
      !*** ./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/table.js ***!
      \******************************************************************/

    /*! exports provided: DataSource, BaseCdkCell, BaseRowDef, CDK_ROW_TEMPLATE, CDK_TABLE, CDK_TABLE_TEMPLATE, CdkCell, CdkCellDef, CdkCellOutlet, CdkColumnDef, CdkFooterCell, CdkFooterCellDef, CdkFooterRow, CdkFooterRowDef, CdkHeaderCell, CdkHeaderCellDef, CdkHeaderRow, CdkHeaderRowDef, CdkNoDataRow, CdkRow, CdkRowDef, CdkTable, CdkTableModule, CdkTextColumn, DataRowOutlet, FooterRowOutlet, HeaderRowOutlet, NoDataRowOutlet, STICKY_DIRECTIONS, STICKY_POSITIONING_LISTENER, StickyStyler, TEXT_COLUMN_OPTIONS, _COALESCED_STYLE_SCHEDULER, _CoalescedStyleScheduler, _Schedule, mixinHasStickyInput */

    /***/
    function f6nW(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BaseCdkCell", function () {
        return BaseCdkCell;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BaseRowDef", function () {
        return BaseRowDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CDK_ROW_TEMPLATE", function () {
        return CDK_ROW_TEMPLATE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CDK_TABLE", function () {
        return CDK_TABLE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CDK_TABLE_TEMPLATE", function () {
        return CDK_TABLE_TEMPLATE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkCell", function () {
        return CdkCell;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkCellDef", function () {
        return CdkCellDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkCellOutlet", function () {
        return CdkCellOutlet;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkColumnDef", function () {
        return CdkColumnDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkFooterCell", function () {
        return CdkFooterCell;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkFooterCellDef", function () {
        return CdkFooterCellDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkFooterRow", function () {
        return CdkFooterRow;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkFooterRowDef", function () {
        return CdkFooterRowDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkHeaderCell", function () {
        return CdkHeaderCell;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkHeaderCellDef", function () {
        return CdkHeaderCellDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkHeaderRow", function () {
        return CdkHeaderRow;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkHeaderRowDef", function () {
        return CdkHeaderRowDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkNoDataRow", function () {
        return CdkNoDataRow;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkRow", function () {
        return CdkRow;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkRowDef", function () {
        return CdkRowDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkTable", function () {
        return CdkTable;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkTableModule", function () {
        return CdkTableModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkTextColumn", function () {
        return CdkTextColumn;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DataRowOutlet", function () {
        return DataRowOutlet;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FooterRowOutlet", function () {
        return FooterRowOutlet;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HeaderRowOutlet", function () {
        return HeaderRowOutlet;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NoDataRowOutlet", function () {
        return NoDataRowOutlet;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "STICKY_DIRECTIONS", function () {
        return STICKY_DIRECTIONS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "STICKY_POSITIONING_LISTENER", function () {
        return STICKY_POSITIONING_LISTENER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "StickyStyler", function () {
        return StickyStyler;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TEXT_COLUMN_OPTIONS", function () {
        return TEXT_COLUMN_OPTIONS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "_COALESCED_STYLE_SCHEDULER", function () {
        return _COALESCED_STYLE_SCHEDULER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "_CoalescedStyleScheduler", function () {
        return _CoalescedStyleScheduler;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "_Schedule", function () {
        return _Schedule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "mixinHasStickyInput", function () {
        return mixinHasStickyInput;
      });
      /* harmony import */


      var _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/cdk/bidi */
      "cH1L");
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");
      /* harmony import */


      var _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/cdk/collections */
      "0EQZ");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/cdk/platform */
      "nLfN");
      /* harmony import */


      var _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @angular/cdk/scrolling */
      "vxfF");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "DataSource", function () {
        return _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_2__["DataSource"];
      });
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");

      var _c0 = [[["caption"]], [["colgroup"], ["col"]]];
      var _c1 = ["caption", "colgroup, col"];

      function CdkTextColumn_th_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "th", 3);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵstyleProp"]("text-align", ctx_r0.justify);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate1"](" ", ctx_r0.headerText, " ");
        }
      }

      function CdkTextColumn_td_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "td", 4);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var data_r2 = ctx.$implicit;

          var ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵstyleProp"]("text-align", ctx_r1.justify);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate1"](" ", ctx_r1.dataAccessor(data_r2, ctx_r1.name), " ");
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Mixin to provide a directive with a function that checks if the sticky input has been
       * changed since the last time the function was called. Essentially adds a dirty-check to the
       * sticky value.
       * @docs-private
       */


      function mixinHasStickyInput(base) {
        return /*#__PURE__*/function (_base7) {
          _inherits2(_class6, _base7);

          var _super290 = _createSuper(_class6);

          function _class6() {
            var _this687;

            _classCallCheck2(this, _class6);

            for (var _len40 = arguments.length, args = new Array(_len40), _key42 = 0; _key42 < _len40; _key42++) {
              args[_key42] = arguments[_key42];
            }

            _this687 = _super290.call.apply(_super290, [this].concat(args));
            _this687._sticky = false;
            /** Whether the sticky input has changed since it was last checked. */

            _this687._hasStickyChanged = false;
            return _this687;
          }
          /** Whether sticky positioning should be applied. */


          _createClass2(_class6, [{
            key: "sticky",
            get: function get() {
              return this._sticky;
            },
            set: function set(v) {
              var prevValue = this._sticky;
              this._sticky = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_1__["coerceBooleanProperty"])(v);
              this._hasStickyChanged = prevValue !== this._sticky;
            }
            /** Whether the sticky value has changed since this was last called. */

          }, {
            key: "hasStickyChanged",
            value: function hasStickyChanged() {
              var hasStickyChanged = this._hasStickyChanged;
              this._hasStickyChanged = false;
              return hasStickyChanged;
            }
            /** Resets the dirty check for cases where the sticky state has been used without checking. */

          }, {
            key: "resetStickyChanged",
            value: function resetStickyChanged() {
              this._hasStickyChanged = false;
            }
          }]);

          return _class6;
        }(base);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Used to provide a table to some of the sub-components without causing a circular dependency.
       * @docs-private
       */


      var CDK_TABLE = new _angular_core__WEBPACK_IMPORTED_MODULE_3__["InjectionToken"]('CDK_TABLE');
      /** Injection token that can be used to specify the text column options. */

      var TEXT_COLUMN_OPTIONS = new _angular_core__WEBPACK_IMPORTED_MODULE_3__["InjectionToken"]('text-column-options');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Cell definition for a CDK table.
       * Captures the template of a column's data row cell as well as cell-specific properties.
       */

      var CdkCellDef = function CdkCellDef(
      /** @docs-private */
      template) {
        _classCallCheck2(this, CdkCellDef);

        this.template = template;
      };

      CdkCellDef.ɵfac = function CdkCellDef_Factory(t) {
        return new (t || CdkCellDef)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]));
      };

      CdkCellDef.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: CdkCellDef,
        selectors: [["", "cdkCellDef", ""]]
      });

      CdkCellDef.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](CdkCellDef, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: '[cdkCellDef]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]
          }];
        }, null);
      })();
      /**
       * Header cell definition for a CDK table.
       * Captures the template of a column's header cell and as well as cell-specific properties.
       */


      var CdkHeaderCellDef = function CdkHeaderCellDef(
      /** @docs-private */
      template) {
        _classCallCheck2(this, CdkHeaderCellDef);

        this.template = template;
      };

      CdkHeaderCellDef.ɵfac = function CdkHeaderCellDef_Factory(t) {
        return new (t || CdkHeaderCellDef)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]));
      };

      CdkHeaderCellDef.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: CdkHeaderCellDef,
        selectors: [["", "cdkHeaderCellDef", ""]]
      });

      CdkHeaderCellDef.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](CdkHeaderCellDef, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: '[cdkHeaderCellDef]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]
          }];
        }, null);
      })();
      /**
       * Footer cell definition for a CDK table.
       * Captures the template of a column's footer cell and as well as cell-specific properties.
       */


      var CdkFooterCellDef = function CdkFooterCellDef(
      /** @docs-private */
      template) {
        _classCallCheck2(this, CdkFooterCellDef);

        this.template = template;
      };

      CdkFooterCellDef.ɵfac = function CdkFooterCellDef_Factory(t) {
        return new (t || CdkFooterCellDef)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]));
      };

      CdkFooterCellDef.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: CdkFooterCellDef,
        selectors: [["", "cdkFooterCellDef", ""]]
      });

      CdkFooterCellDef.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](CdkFooterCellDef, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: '[cdkFooterCellDef]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]
          }];
        }, null);
      })(); // Boilerplate for applying mixins to CdkColumnDef.

      /** @docs-private */


      var CdkColumnDefBase = function CdkColumnDefBase() {
        _classCallCheck2(this, CdkColumnDefBase);
      };

      var _CdkColumnDefBase = mixinHasStickyInput(CdkColumnDefBase);
      /**
       * Column definition for the CDK table.
       * Defines a set of cells available for a table column.
       */


      var CdkColumnDef = /*#__PURE__*/function (_CdkColumnDefBase2) {
        _inherits2(CdkColumnDef, _CdkColumnDefBase2);

        var _super291 = _createSuper(CdkColumnDef);

        function CdkColumnDef(_table) {
          var _this688;

          _classCallCheck2(this, CdkColumnDef);

          _this688 = _super291.call(this);
          _this688._table = _table;
          _this688._stickyEnd = false;
          return _this688;
        }
        /** Unique name for this column. */


        _createClass2(CdkColumnDef, [{
          key: "name",
          get: function get() {
            return this._name;
          },
          set: function set(name) {
            this._setNameInput(name);
          }
          /**
           * Whether this column should be sticky positioned on the end of the row. Should make sure
           * that it mimics the `CanStick` mixin such that `_hasStickyChanged` is set to true if the value
           * has been changed.
           */

        }, {
          key: "stickyEnd",
          get: function get() {
            return this._stickyEnd;
          },
          set: function set(v) {
            var prevValue = this._stickyEnd;
            this._stickyEnd = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_1__["coerceBooleanProperty"])(v);
            this._hasStickyChanged = prevValue !== this._stickyEnd;
          }
          /**
           * Overridable method that sets the css classes that will be added to every cell in this
           * column.
           * In the future, columnCssClassName will change from type string[] to string and this
           * will set a single string value.
           * @docs-private
           */

        }, {
          key: "_updateColumnCssClassName",
          value: function _updateColumnCssClassName() {
            this._columnCssClassName = ["cdk-column-".concat(this.cssClassFriendlyName)];
          }
          /**
           * This has been extracted to a util because of TS 4 and VE.
           * View Engine doesn't support property rename inheritance.
           * TS 4.0 doesn't allow properties to override accessors or vice-versa.
           * @docs-private
           */

        }, {
          key: "_setNameInput",
          value: function _setNameInput(value) {
            // If the directive is set without a name (updated programatically), then this setter will
            // trigger with an empty string and should not overwrite the programatically set value.
            if (value) {
              this._name = value;
              this.cssClassFriendlyName = value.replace(/[^a-z0-9_-]/ig, '-');

              this._updateColumnCssClassName();
            }
          }
        }]);

        return CdkColumnDef;
      }(_CdkColumnDefBase);

      CdkColumnDef.ɵfac = function CdkColumnDef_Factory(t) {
        return new (t || CdkColumnDef)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](CDK_TABLE, 8));
      };

      CdkColumnDef.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: CdkColumnDef,
        selectors: [["", "cdkColumnDef", ""]],
        contentQueries: function CdkColumnDef_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵcontentQuery"](dirIndex, CdkCellDef, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵcontentQuery"](dirIndex, CdkHeaderCellDef, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵcontentQuery"](dirIndex, CdkFooterCellDef, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx.cell = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx.headerCell = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx.footerCell = _t.first);
          }
        },
        inputs: {
          sticky: "sticky",
          name: ["cdkColumnDef", "name"],
          stickyEnd: "stickyEnd"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵProvidersFeature"]([{
          provide: 'MAT_SORT_HEADER_COLUMN_DEF',
          useExisting: CdkColumnDef
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵInheritDefinitionFeature"]]
      });

      CdkColumnDef.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
            args: [CDK_TABLE]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
          }]
        }];
      };

      CdkColumnDef.propDecorators = {
        name: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"],
          args: ['cdkColumnDef']
        }],
        stickyEnd: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"],
          args: ['stickyEnd']
        }],
        cell: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChild"],
          args: [CdkCellDef]
        }],
        headerCell: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChild"],
          args: [CdkHeaderCellDef]
        }],
        footerCell: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChild"],
          args: [CdkFooterCellDef]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](CdkColumnDef, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: '[cdkColumnDef]',
            inputs: ['sticky'],
            providers: [{
              provide: 'MAT_SORT_HEADER_COLUMN_DEF',
              useExisting: CdkColumnDef
            }]
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
              args: [CDK_TABLE]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
            }]
          }];
        }, {
          name: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"],
            args: ['cdkColumnDef']
          }],
          stickyEnd: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"],
            args: ['stickyEnd']
          }],
          cell: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChild"],
            args: [CdkCellDef]
          }],
          headerCell: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChild"],
            args: [CdkHeaderCellDef]
          }],
          footerCell: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChild"],
            args: [CdkFooterCellDef]
          }]
        });
      })();
      /** Base class for the cells. Adds a CSS classname that identifies the column it renders in. */


      var BaseCdkCell = function BaseCdkCell(columnDef, elementRef) {
        _classCallCheck2(this, BaseCdkCell);

        // If IE 11 is dropped before we switch to setting a single class name, change to multi param
        // with destructuring.
        var classList = elementRef.nativeElement.classList;

        var _iterator63 = _createForOfIteratorHelper(columnDef._columnCssClassName),
            _step62;

        try {
          for (_iterator63.s(); !(_step62 = _iterator63.n()).done;) {
            var className = _step62.value;
            classList.add(className);
          }
        } catch (err) {
          _iterator63.e(err);
        } finally {
          _iterator63.f();
        }
      };
      /** Header cell template container that adds the right classes and role. */


      var CdkHeaderCell = /*#__PURE__*/function (_BaseCdkCell) {
        _inherits2(CdkHeaderCell, _BaseCdkCell);

        var _super292 = _createSuper(CdkHeaderCell);

        function CdkHeaderCell(columnDef, elementRef) {
          _classCallCheck2(this, CdkHeaderCell);

          return _super292.call(this, columnDef, elementRef);
        }

        return CdkHeaderCell;
      }(BaseCdkCell);

      CdkHeaderCell.ɵfac = function CdkHeaderCell_Factory(t) {
        return new (t || CdkHeaderCell)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](CdkColumnDef), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]));
      };

      CdkHeaderCell.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: CdkHeaderCell,
        selectors: [["cdk-header-cell"], ["th", "cdk-header-cell", ""]],
        hostAttrs: ["role", "columnheader", 1, "cdk-header-cell"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵInheritDefinitionFeature"]]
      });

      CdkHeaderCell.ctorParameters = function () {
        return [{
          type: CdkColumnDef
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](CdkHeaderCell, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: 'cdk-header-cell, th[cdk-header-cell]',
            host: {
              'class': 'cdk-header-cell',
              'role': 'columnheader'
            }
          }]
        }], function () {
          return [{
            type: CdkColumnDef
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
          }];
        }, null);
      })();
      /** Footer cell template container that adds the right classes and role. */


      var CdkFooterCell = /*#__PURE__*/function (_BaseCdkCell2) {
        _inherits2(CdkFooterCell, _BaseCdkCell2);

        var _super293 = _createSuper(CdkFooterCell);

        function CdkFooterCell(columnDef, elementRef) {
          _classCallCheck2(this, CdkFooterCell);

          return _super293.call(this, columnDef, elementRef);
        }

        return CdkFooterCell;
      }(BaseCdkCell);

      CdkFooterCell.ɵfac = function CdkFooterCell_Factory(t) {
        return new (t || CdkFooterCell)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](CdkColumnDef), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]));
      };

      CdkFooterCell.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: CdkFooterCell,
        selectors: [["cdk-footer-cell"], ["td", "cdk-footer-cell", ""]],
        hostAttrs: ["role", "gridcell", 1, "cdk-footer-cell"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵInheritDefinitionFeature"]]
      });

      CdkFooterCell.ctorParameters = function () {
        return [{
          type: CdkColumnDef
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](CdkFooterCell, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: 'cdk-footer-cell, td[cdk-footer-cell]',
            host: {
              'class': 'cdk-footer-cell',
              'role': 'gridcell'
            }
          }]
        }], function () {
          return [{
            type: CdkColumnDef
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
          }];
        }, null);
      })();
      /** Cell template container that adds the right classes and role. */


      var CdkCell = /*#__PURE__*/function (_BaseCdkCell3) {
        _inherits2(CdkCell, _BaseCdkCell3);

        var _super294 = _createSuper(CdkCell);

        function CdkCell(columnDef, elementRef) {
          _classCallCheck2(this, CdkCell);

          return _super294.call(this, columnDef, elementRef);
        }

        return CdkCell;
      }(BaseCdkCell);

      CdkCell.ɵfac = function CdkCell_Factory(t) {
        return new (t || CdkCell)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](CdkColumnDef), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]));
      };

      CdkCell.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: CdkCell,
        selectors: [["cdk-cell"], ["td", "cdk-cell", ""]],
        hostAttrs: ["role", "gridcell", 1, "cdk-cell"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵInheritDefinitionFeature"]]
      });

      CdkCell.ctorParameters = function () {
        return [{
          type: CdkColumnDef
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](CdkCell, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: 'cdk-cell, td[cdk-cell]',
            host: {
              'class': 'cdk-cell',
              'role': 'gridcell'
            }
          }]
        }], function () {
          return [{
            type: CdkColumnDef
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @docs-private
       */


      var _Schedule = function _Schedule() {
        _classCallCheck2(this, _Schedule);

        this.tasks = [];
        this.endTasks = [];
      };
      /** Injection token used to provide a coalesced style scheduler. */


      var _COALESCED_STYLE_SCHEDULER = new _angular_core__WEBPACK_IMPORTED_MODULE_3__["InjectionToken"]('_COALESCED_STYLE_SCHEDULER');
      /**
       * Allows grouping up CSSDom mutations after the current execution context.
       * This can significantly improve performance when separate consecutive functions are
       * reading from the CSSDom and then mutating it.
       *
       * @docs-private
       */


      var _CoalescedStyleScheduler = /*#__PURE__*/function () {
        function _CoalescedStyleScheduler(_ngZone) {
          _classCallCheck2(this, _CoalescedStyleScheduler);

          this._ngZone = _ngZone;
          this._currentSchedule = null;
          this._destroyed = new rxjs__WEBPACK_IMPORTED_MODULE_7__["Subject"]();
        }
        /**
         * Schedules the specified task to run at the end of the current VM turn.
         */


        _createClass2(_CoalescedStyleScheduler, [{
          key: "schedule",
          value: function schedule(task) {
            this._createScheduleIfNeeded();

            this._currentSchedule.tasks.push(task);
          }
          /**
           * Schedules the specified task to run after other scheduled tasks at the end of the current
           * VM turn.
           */

        }, {
          key: "scheduleEnd",
          value: function scheduleEnd(task) {
            this._createScheduleIfNeeded();

            this._currentSchedule.endTasks.push(task);
          }
          /** Prevent any further tasks from running. */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._destroyed.next();

            this._destroyed.complete();
          }
        }, {
          key: "_createScheduleIfNeeded",
          value: function _createScheduleIfNeeded() {
            var _this689 = this;

            if (this._currentSchedule) {
              return;
            }

            this._currentSchedule = new _Schedule();

            this._getScheduleObservable().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_8__["takeUntil"])(this._destroyed)).subscribe(function () {
              while (_this689._currentSchedule.tasks.length || _this689._currentSchedule.endTasks.length) {
                var schedule = _this689._currentSchedule; // Capture new tasks scheduled by the current set of tasks.

                _this689._currentSchedule = new _Schedule();

                var _iterator64 = _createForOfIteratorHelper(schedule.tasks),
                    _step63;

                try {
                  for (_iterator64.s(); !(_step63 = _iterator64.n()).done;) {
                    var task = _step63.value;
                    task();
                  }
                } catch (err) {
                  _iterator64.e(err);
                } finally {
                  _iterator64.f();
                }

                var _iterator65 = _createForOfIteratorHelper(schedule.endTasks),
                    _step64;

                try {
                  for (_iterator65.s(); !(_step64 = _iterator65.n()).done;) {
                    var _task = _step64.value;

                    _task();
                  }
                } catch (err) {
                  _iterator65.e(err);
                } finally {
                  _iterator65.f();
                }
              }

              _this689._currentSchedule = null;
            });
          }
        }, {
          key: "_getScheduleObservable",
          value: function _getScheduleObservable() {
            // Use onStable when in the context of an ongoing change detection cycle so that we
            // do not accidentally trigger additional cycles.
            return this._ngZone.isStable ? Object(rxjs__WEBPACK_IMPORTED_MODULE_7__["from"])(Promise.resolve(undefined)) : this._ngZone.onStable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_8__["take"])(1));
          }
        }]);

        return _CoalescedStyleScheduler;
      }();

      _CoalescedStyleScheduler.ɵfac = function _CoalescedStyleScheduler_Factory(t) {
        return new (t || _CoalescedStyleScheduler)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["NgZone"]));
      };

      _CoalescedStyleScheduler.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineInjectable"]({
        token: _CoalescedStyleScheduler,
        factory: _CoalescedStyleScheduler.ɵfac
      });

      _CoalescedStyleScheduler.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["NgZone"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](_CoalescedStyleScheduler, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Injectable"]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["NgZone"]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * The row template that can be used by the mat-table. Should not be used outside of the
       * material library.
       */


      var CDK_ROW_TEMPLATE = "<ng-container cdkCellOutlet></ng-container>";
      /**
       * Base class for the CdkHeaderRowDef and CdkRowDef that handles checking their columns inputs
       * for changes and notifying the table.
       */

      var BaseRowDef = /*#__PURE__*/function () {
        function BaseRowDef(
        /** @docs-private */
        template, _differs) {
          _classCallCheck2(this, BaseRowDef);

          this.template = template;
          this._differs = _differs;
        }

        _createClass2(BaseRowDef, [{
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            // Create a new columns differ if one does not yet exist. Initialize it based on initial value
            // of the columns property or an empty array if none is provided.
            if (!this._columnsDiffer) {
              var columns = changes['columns'] && changes['columns'].currentValue || [];
              this._columnsDiffer = this._differs.find(columns).create();

              this._columnsDiffer.diff(columns);
            }
          }
          /**
           * Returns the difference between the current columns and the columns from the last diff, or null
           * if there is no difference.
           */

        }, {
          key: "getColumnsDiff",
          value: function getColumnsDiff() {
            return this._columnsDiffer.diff(this.columns);
          }
          /** Gets this row def's relevant cell template from the provided column def. */

        }, {
          key: "extractCellTemplate",
          value: function extractCellTemplate(column) {
            if (this instanceof CdkHeaderRowDef) {
              return column.headerCell.template;
            }

            if (this instanceof CdkFooterRowDef) {
              return column.footerCell.template;
            } else {
              return column.cell.template;
            }
          }
        }]);

        return BaseRowDef;
      }();

      BaseRowDef.ɵfac = function BaseRowDef_Factory(t) {
        return new (t || BaseRowDef)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["IterableDiffers"]));
      };

      BaseRowDef.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: BaseRowDef,
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵNgOnChangesFeature"]]
      });

      BaseRowDef.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["IterableDiffers"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](BaseRowDef, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["IterableDiffers"]
          }];
        }, null);
      })(); // Boilerplate for applying mixins to CdkHeaderRowDef.

      /** @docs-private */


      var CdkHeaderRowDefBase = /*#__PURE__*/function (_BaseRowDef) {
        _inherits2(CdkHeaderRowDefBase, _BaseRowDef);

        var _super295 = _createSuper(CdkHeaderRowDefBase);

        function CdkHeaderRowDefBase() {
          _classCallCheck2(this, CdkHeaderRowDefBase);

          return _super295.apply(this, arguments);
        }

        return CdkHeaderRowDefBase;
      }(BaseRowDef);

      var _CdkHeaderRowDefBase = mixinHasStickyInput(CdkHeaderRowDefBase);
      /**
       * Header row definition for the CDK table.
       * Captures the header row's template and other header properties such as the columns to display.
       */


      var CdkHeaderRowDef = /*#__PURE__*/function (_CdkHeaderRowDefBase2) {
        _inherits2(CdkHeaderRowDef, _CdkHeaderRowDefBase2);

        var _super296 = _createSuper(CdkHeaderRowDef);

        function CdkHeaderRowDef(template, _differs, _table) {
          var _this690;

          _classCallCheck2(this, CdkHeaderRowDef);

          _this690 = _super296.call(this, template, _differs);
          _this690._table = _table;
          return _this690;
        } // Prerender fails to recognize that ngOnChanges in a part of this class through inheritance.
        // Explicitly define it so that the method is called as part of the Angular lifecycle.


        _createClass2(CdkHeaderRowDef, [{
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            _get2(_getPrototypeOf2(CdkHeaderRowDef.prototype), "ngOnChanges", this).call(this, changes);
          }
        }]);

        return CdkHeaderRowDef;
      }(_CdkHeaderRowDefBase);

      CdkHeaderRowDef.ɵfac = function CdkHeaderRowDef_Factory(t) {
        return new (t || CdkHeaderRowDef)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["IterableDiffers"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](CDK_TABLE, 8));
      };

      CdkHeaderRowDef.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: CdkHeaderRowDef,
        selectors: [["", "cdkHeaderRowDef", ""]],
        inputs: {
          columns: ["cdkHeaderRowDef", "columns"],
          sticky: ["cdkHeaderRowDefSticky", "sticky"]
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵInheritDefinitionFeature"], _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵNgOnChangesFeature"]]
      });

      CdkHeaderRowDef.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["IterableDiffers"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
            args: [CDK_TABLE]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](CdkHeaderRowDef, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: '[cdkHeaderRowDef]',
            inputs: ['columns: cdkHeaderRowDef', 'sticky: cdkHeaderRowDefSticky']
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["IterableDiffers"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
              args: [CDK_TABLE]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
            }]
          }];
        }, null);
      })(); // Boilerplate for applying mixins to CdkFooterRowDef.

      /** @docs-private */


      var CdkFooterRowDefBase = /*#__PURE__*/function (_BaseRowDef2) {
        _inherits2(CdkFooterRowDefBase, _BaseRowDef2);

        var _super297 = _createSuper(CdkFooterRowDefBase);

        function CdkFooterRowDefBase() {
          _classCallCheck2(this, CdkFooterRowDefBase);

          return _super297.apply(this, arguments);
        }

        return CdkFooterRowDefBase;
      }(BaseRowDef);

      var _CdkFooterRowDefBase = mixinHasStickyInput(CdkFooterRowDefBase);
      /**
       * Footer row definition for the CDK table.
       * Captures the footer row's template and other footer properties such as the columns to display.
       */


      var CdkFooterRowDef = /*#__PURE__*/function (_CdkFooterRowDefBase2) {
        _inherits2(CdkFooterRowDef, _CdkFooterRowDefBase2);

        var _super298 = _createSuper(CdkFooterRowDef);

        function CdkFooterRowDef(template, _differs, _table) {
          var _this691;

          _classCallCheck2(this, CdkFooterRowDef);

          _this691 = _super298.call(this, template, _differs);
          _this691._table = _table;
          return _this691;
        } // Prerender fails to recognize that ngOnChanges in a part of this class through inheritance.
        // Explicitly define it so that the method is called as part of the Angular lifecycle.


        _createClass2(CdkFooterRowDef, [{
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            _get2(_getPrototypeOf2(CdkFooterRowDef.prototype), "ngOnChanges", this).call(this, changes);
          }
        }]);

        return CdkFooterRowDef;
      }(_CdkFooterRowDefBase);

      CdkFooterRowDef.ɵfac = function CdkFooterRowDef_Factory(t) {
        return new (t || CdkFooterRowDef)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["IterableDiffers"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](CDK_TABLE, 8));
      };

      CdkFooterRowDef.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: CdkFooterRowDef,
        selectors: [["", "cdkFooterRowDef", ""]],
        inputs: {
          columns: ["cdkFooterRowDef", "columns"],
          sticky: ["cdkFooterRowDefSticky", "sticky"]
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵInheritDefinitionFeature"], _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵNgOnChangesFeature"]]
      });

      CdkFooterRowDef.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["IterableDiffers"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
            args: [CDK_TABLE]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](CdkFooterRowDef, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: '[cdkFooterRowDef]',
            inputs: ['columns: cdkFooterRowDef', 'sticky: cdkFooterRowDefSticky']
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["IterableDiffers"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
              args: [CDK_TABLE]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
            }]
          }];
        }, null);
      })();
      /**
       * Data row definition for the CDK table.
       * Captures the header row's template and other row properties such as the columns to display and
       * a when predicate that describes when this row should be used.
       */


      var CdkRowDef = /*#__PURE__*/function (_BaseRowDef3) {
        _inherits2(CdkRowDef, _BaseRowDef3);

        var _super299 = _createSuper(CdkRowDef);

        // TODO(andrewseguin): Add an input for providing a switch function to determine
        //   if this template should be used.
        function CdkRowDef(template, _differs, _table) {
          var _this692;

          _classCallCheck2(this, CdkRowDef);

          _this692 = _super299.call(this, template, _differs);
          _this692._table = _table;
          return _this692;
        }

        return CdkRowDef;
      }(BaseRowDef);

      CdkRowDef.ɵfac = function CdkRowDef_Factory(t) {
        return new (t || CdkRowDef)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["IterableDiffers"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](CDK_TABLE, 8));
      };

      CdkRowDef.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: CdkRowDef,
        selectors: [["", "cdkRowDef", ""]],
        inputs: {
          columns: ["cdkRowDefColumns", "columns"],
          when: ["cdkRowDefWhen", "when"]
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵInheritDefinitionFeature"]]
      });

      CdkRowDef.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["IterableDiffers"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
            args: [CDK_TABLE]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](CdkRowDef, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: '[cdkRowDef]',
            inputs: ['columns: cdkRowDefColumns', 'when: cdkRowDefWhen']
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["IterableDiffers"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
              args: [CDK_TABLE]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
            }]
          }];
        }, null);
      })();
      /**
       * Outlet for rendering cells inside of a row or header row.
       * @docs-private
       */


      var CdkCellOutlet = /*#__PURE__*/function () {
        function CdkCellOutlet(_viewContainer) {
          _classCallCheck2(this, CdkCellOutlet);

          this._viewContainer = _viewContainer;
          CdkCellOutlet.mostRecentCellOutlet = this;
        }

        _createClass2(CdkCellOutlet, [{
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            // If this was the last outlet being rendered in the view, remove the reference
            // from the static property after it has been destroyed to avoid leaking memory.
            if (CdkCellOutlet.mostRecentCellOutlet === this) {
              CdkCellOutlet.mostRecentCellOutlet = null;
            }
          }
        }]);

        return CdkCellOutlet;
      }();

      CdkCellOutlet.ɵfac = function CdkCellOutlet_Factory(t) {
        return new (t || CdkCellOutlet)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewContainerRef"]));
      };

      CdkCellOutlet.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: CdkCellOutlet,
        selectors: [["", "cdkCellOutlet", ""]]
      });
      /**
       * Static property containing the latest constructed instance of this class.
       * Used by the CDK table when each CdkHeaderRow and CdkRow component is created using
       * createEmbeddedView. After one of these components are created, this property will provide
       * a handle to provide that component's cells and context. After init, the CdkCellOutlet will
       * construct the cells with the provided context.
       */

      CdkCellOutlet.mostRecentCellOutlet = null;

      CdkCellOutlet.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewContainerRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](CdkCellOutlet, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: '[cdkCellOutlet]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewContainerRef"]
          }];
        }, null);
      })();
      /** Header template container that contains the cell outlet. Adds the right class and role. */


      var CdkHeaderRow = function CdkHeaderRow() {
        _classCallCheck2(this, CdkHeaderRow);
      };

      CdkHeaderRow.ɵfac = function CdkHeaderRow_Factory(t) {
        return new (t || CdkHeaderRow)();
      };

      CdkHeaderRow.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineComponent"]({
        type: CdkHeaderRow,
        selectors: [["cdk-header-row"], ["tr", "cdk-header-row", ""]],
        hostAttrs: ["role", "row", 1, "cdk-header-row"],
        decls: 1,
        vars: 0,
        consts: [["cdkCellOutlet", ""]],
        template: function CdkHeaderRow_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementContainer"](0, 0);
          }
        },
        directives: [CdkCellOutlet],
        encapsulation: 2
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](CdkHeaderRow, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Component"],
          args: [{
            selector: 'cdk-header-row, tr[cdk-header-row]',
            template: CDK_ROW_TEMPLATE,
            host: {
              'class': 'cdk-header-row',
              'role': 'row'
            },
            // See note on CdkTable for explanation on why this uses the default change detection strategy.
            // tslint:disable-next-line:validate-decorators
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectionStrategy"].Default,
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewEncapsulation"].None
          }]
        }], null, null);
      })();
      /** Footer template container that contains the cell outlet. Adds the right class and role. */


      var CdkFooterRow = function CdkFooterRow() {
        _classCallCheck2(this, CdkFooterRow);
      };

      CdkFooterRow.ɵfac = function CdkFooterRow_Factory(t) {
        return new (t || CdkFooterRow)();
      };

      CdkFooterRow.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineComponent"]({
        type: CdkFooterRow,
        selectors: [["cdk-footer-row"], ["tr", "cdk-footer-row", ""]],
        hostAttrs: ["role", "row", 1, "cdk-footer-row"],
        decls: 1,
        vars: 0,
        consts: [["cdkCellOutlet", ""]],
        template: function CdkFooterRow_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementContainer"](0, 0);
          }
        },
        directives: [CdkCellOutlet],
        encapsulation: 2
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](CdkFooterRow, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Component"],
          args: [{
            selector: 'cdk-footer-row, tr[cdk-footer-row]',
            template: CDK_ROW_TEMPLATE,
            host: {
              'class': 'cdk-footer-row',
              'role': 'row'
            },
            // See note on CdkTable for explanation on why this uses the default change detection strategy.
            // tslint:disable-next-line:validate-decorators
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectionStrategy"].Default,
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewEncapsulation"].None
          }]
        }], null, null);
      })();
      /** Data row template container that contains the cell outlet. Adds the right class and role. */


      var CdkRow = function CdkRow() {
        _classCallCheck2(this, CdkRow);
      };

      CdkRow.ɵfac = function CdkRow_Factory(t) {
        return new (t || CdkRow)();
      };

      CdkRow.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineComponent"]({
        type: CdkRow,
        selectors: [["cdk-row"], ["tr", "cdk-row", ""]],
        hostAttrs: ["role", "row", 1, "cdk-row"],
        decls: 1,
        vars: 0,
        consts: [["cdkCellOutlet", ""]],
        template: function CdkRow_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementContainer"](0, 0);
          }
        },
        directives: [CdkCellOutlet],
        encapsulation: 2
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](CdkRow, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Component"],
          args: [{
            selector: 'cdk-row, tr[cdk-row]',
            template: CDK_ROW_TEMPLATE,
            host: {
              'class': 'cdk-row',
              'role': 'row'
            },
            // See note on CdkTable for explanation on why this uses the default change detection strategy.
            // tslint:disable-next-line:validate-decorators
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectionStrategy"].Default,
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewEncapsulation"].None
          }]
        }], null, null);
      })();
      /** Row that can be used to display a message when no data is shown in the table. */


      var CdkNoDataRow = function CdkNoDataRow(templateRef) {
        _classCallCheck2(this, CdkNoDataRow);

        this.templateRef = templateRef;
      };

      CdkNoDataRow.ɵfac = function CdkNoDataRow_Factory(t) {
        return new (t || CdkNoDataRow)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]));
      };

      CdkNoDataRow.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: CdkNoDataRow,
        selectors: [["ng-template", "cdkNoDataRow", ""]]
      });

      CdkNoDataRow.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](CdkNoDataRow, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: 'ng-template[cdkNoDataRow]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * List of all possible directions that can be used for sticky positioning.
       * @docs-private
       */


      var STICKY_DIRECTIONS = ['top', 'bottom', 'left', 'right'];
      /**
       * Applies and removes sticky positioning styles to the `CdkTable` rows and columns cells.
       * @docs-private
       */

      var StickyStyler = /*#__PURE__*/function () {
        /**
         * @param _isNativeHtmlTable Whether the sticky logic should be based on a table
         *     that uses the native `<table>` element.
         * @param _stickCellCss The CSS class that will be applied to every row/cell that has
         *     sticky positioning applied.
         * @param direction The directionality context of the table (ltr/rtl); affects column positioning
         *     by reversing left/right positions.
         * @param _isBrowser Whether the table is currently being rendered on the server or the client.
         * @param _needsPositionStickyOnElement Whether we need to specify position: sticky on cells
         *     using inline styles. If false, it is assumed that position: sticky is included in
         *     the component stylesheet for _stickCellCss.
         * @param _positionListener A listener that is notified of changes to sticky rows/columns
         *     and their dimensions.
         */
        function StickyStyler(_isNativeHtmlTable, _stickCellCss, direction,
        /**
         * @deprecated `_coalescedStyleScheduler` parameter to become required.
         * @breaking-change 11.0.0
         */
        _coalescedStyleScheduler) {
          var _isBrowser = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;

          var _needsPositionStickyOnElement = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;

          var _positionListener = arguments.length > 6 ? arguments[6] : undefined;

          _classCallCheck2(this, StickyStyler);

          this._isNativeHtmlTable = _isNativeHtmlTable;
          this._stickCellCss = _stickCellCss;
          this.direction = direction;
          this._coalescedStyleScheduler = _coalescedStyleScheduler;
          this._isBrowser = _isBrowser;
          this._needsPositionStickyOnElement = _needsPositionStickyOnElement;
          this._positionListener = _positionListener;
          this._cachedCellWidths = [];
          this._borderCellCss = {
            'top': "".concat(_stickCellCss, "-border-elem-top"),
            'bottom': "".concat(_stickCellCss, "-border-elem-bottom"),
            'left': "".concat(_stickCellCss, "-border-elem-left"),
            'right': "".concat(_stickCellCss, "-border-elem-right")
          };
        }
        /**
         * Clears the sticky positioning styles from the row and its cells by resetting the `position`
         * style, setting the zIndex to 0, and unsetting each provided sticky direction.
         * @param rows The list of rows that should be cleared from sticking in the provided directions
         * @param stickyDirections The directions that should no longer be set as sticky on the rows.
         */


        _createClass2(StickyStyler, [{
          key: "clearStickyPositioning",
          value: function clearStickyPositioning(rows, stickyDirections) {
            var _this693 = this;

            var elementsToClear = [];

            var _iterator66 = _createForOfIteratorHelper(rows),
                _step65;

            try {
              for (_iterator66.s(); !(_step65 = _iterator66.n()).done;) {
                var row = _step65.value;

                // If the row isn't an element (e.g. if it's an `ng-container`),
                // it won't have inline styles or `children` so we skip it.
                if (row.nodeType !== row.ELEMENT_NODE) {
                  continue;
                }

                elementsToClear.push(row);

                for (var i = 0; i < row.children.length; i++) {
                  elementsToClear.push(row.children[i]);
                }
              } // Coalesce with sticky row/column updates (and potentially other changes like column resize).

            } catch (err) {
              _iterator66.e(err);
            } finally {
              _iterator66.f();
            }

            this._scheduleStyleChanges(function () {
              var _iterator67 = _createForOfIteratorHelper(elementsToClear),
                  _step66;

              try {
                for (_iterator67.s(); !(_step66 = _iterator67.n()).done;) {
                  var element = _step66.value;

                  _this693._removeStickyStyle(element, stickyDirections);
                }
              } catch (err) {
                _iterator67.e(err);
              } finally {
                _iterator67.f();
              }
            });
          }
          /**
           * Applies sticky left and right positions to the cells of each row according to the sticky
           * states of the rendered column definitions.
           * @param rows The rows that should have its set of cells stuck according to the sticky states.
           * @param stickyStartStates A list of boolean states where each state represents whether the cell
           *     in this index position should be stuck to the start of the row.
           * @param stickyEndStates A list of boolean states where each state represents whether the cell
           *     in this index position should be stuck to the end of the row.
           * @param recalculateCellWidths Whether the sticky styler should recalculate the width of each
           *     column cell. If `false` cached widths will be used instead.
           */

        }, {
          key: "updateStickyColumns",
          value: function updateStickyColumns(rows, stickyStartStates, stickyEndStates) {
            var _this694 = this;

            var recalculateCellWidths = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;

            if (!rows.length || !this._isBrowser || !(stickyStartStates.some(function (state) {
              return state;
            }) || stickyEndStates.some(function (state) {
              return state;
            }))) {
              if (this._positionListener) {
                this._positionListener.stickyColumnsUpdated({
                  sizes: []
                });

                this._positionListener.stickyEndColumnsUpdated({
                  sizes: []
                });
              }

              return;
            }

            var firstRow = rows[0];
            var numCells = firstRow.children.length;

            var cellWidths = this._getCellWidths(firstRow, recalculateCellWidths);

            var startPositions = this._getStickyStartColumnPositions(cellWidths, stickyStartStates);

            var endPositions = this._getStickyEndColumnPositions(cellWidths, stickyEndStates);

            var lastStickyStart = stickyStartStates.lastIndexOf(true);
            var firstStickyEnd = stickyEndStates.indexOf(true); // Coalesce with sticky row updates (and potentially other changes like column resize).

            this._scheduleStyleChanges(function () {
              var isRtl = _this694.direction === 'rtl';
              var start = isRtl ? 'right' : 'left';
              var end = isRtl ? 'left' : 'right';

              var _iterator68 = _createForOfIteratorHelper(rows),
                  _step67;

              try {
                for (_iterator68.s(); !(_step67 = _iterator68.n()).done;) {
                  var row = _step67.value;

                  for (var i = 0; i < numCells; i++) {
                    var cell = row.children[i];

                    if (stickyStartStates[i]) {
                      _this694._addStickyStyle(cell, start, startPositions[i], i === lastStickyStart);
                    }

                    if (stickyEndStates[i]) {
                      _this694._addStickyStyle(cell, end, endPositions[i], i === firstStickyEnd);
                    }
                  }
                }
              } catch (err) {
                _iterator68.e(err);
              } finally {
                _iterator68.f();
              }

              if (_this694._positionListener) {
                _this694._positionListener.stickyColumnsUpdated({
                  sizes: lastStickyStart === -1 ? [] : cellWidths.slice(0, lastStickyStart + 1).map(function (width, index) {
                    return stickyStartStates[index] ? width : null;
                  })
                });

                _this694._positionListener.stickyEndColumnsUpdated({
                  sizes: firstStickyEnd === -1 ? [] : cellWidths.slice(firstStickyEnd).map(function (width, index) {
                    return stickyEndStates[index + firstStickyEnd] ? width : null;
                  }).reverse()
                });
              }
            });
          }
          /**
           * Applies sticky positioning to the row's cells if using the native table layout, and to the
           * row itself otherwise.
           * @param rowsToStick The list of rows that should be stuck according to their corresponding
           *     sticky state and to the provided top or bottom position.
           * @param stickyStates A list of boolean states where each state represents whether the row
           *     should be stuck in the particular top or bottom position.
           * @param position The position direction in which the row should be stuck if that row should be
           *     sticky.
           *
           */

        }, {
          key: "stickRows",
          value: function stickRows(rowsToStick, stickyStates, position) {
            var _this695 = this;

            // Since we can't measure the rows on the server, we can't stick the rows properly.
            if (!this._isBrowser) {
              return;
            } // If positioning the rows to the bottom, reverse their order when evaluating the sticky
            // position such that the last row stuck will be "bottom: 0px" and so on. Note that the
            // sticky states need to be reversed as well.


            var rows = position === 'bottom' ? rowsToStick.slice().reverse() : rowsToStick;
            var states = position === 'bottom' ? stickyStates.slice().reverse() : stickyStates; // Measure row heights all at once before adding sticky styles to reduce layout thrashing.

            var stickyOffsets = [];
            var stickyCellHeights = [];
            var elementsToStick = [];

            for (var rowIndex = 0, stickyOffset = 0; rowIndex < rows.length; rowIndex++) {
              stickyOffsets[rowIndex] = stickyOffset;

              if (!states[rowIndex]) {
                continue;
              }

              var row = rows[rowIndex];
              elementsToStick[rowIndex] = this._isNativeHtmlTable ? Array.from(row.children) : [row];
              var height = row.getBoundingClientRect().height;
              stickyOffset += height;
              stickyCellHeights[rowIndex] = height;
            }

            var borderedRowIndex = states.lastIndexOf(true); // Coalesce with other sticky row updates (top/bottom), sticky columns updates
            // (and potentially other changes like column resize).

            this._scheduleStyleChanges(function () {
              var _a, _b;

              for (var _rowIndex = 0; _rowIndex < rows.length; _rowIndex++) {
                if (!states[_rowIndex]) {
                  continue;
                }

                var offset = stickyOffsets[_rowIndex];
                var isBorderedRowIndex = _rowIndex === borderedRowIndex;

                var _iterator69 = _createForOfIteratorHelper(elementsToStick[_rowIndex]),
                    _step68;

                try {
                  for (_iterator69.s(); !(_step68 = _iterator69.n()).done;) {
                    var element = _step68.value;

                    _this695._addStickyStyle(element, position, offset, isBorderedRowIndex);
                  }
                } catch (err) {
                  _iterator69.e(err);
                } finally {
                  _iterator69.f();
                }
              }

              if (position === 'top') {
                (_a = _this695._positionListener) === null || _a === void 0 ? void 0 : _a.stickyHeaderRowsUpdated({
                  sizes: stickyCellHeights,
                  elements: elementsToStick
                });
              } else {
                (_b = _this695._positionListener) === null || _b === void 0 ? void 0 : _b.stickyFooterRowsUpdated({
                  sizes: stickyCellHeights,
                  elements: elementsToStick
                });
              }
            });
          }
          /**
           * When using the native table in Safari, sticky footer cells do not stick. The only way to stick
           * footer rows is to apply sticky styling to the tfoot container. This should only be done if
           * all footer rows are sticky. If not all footer rows are sticky, remove sticky positioning from
           * the tfoot element.
           */

        }, {
          key: "updateStickyFooterContainer",
          value: function updateStickyFooterContainer(tableElement, stickyStates) {
            var _this696 = this;

            if (!this._isNativeHtmlTable) {
              return;
            }

            var tfoot = tableElement.querySelector('tfoot'); // Coalesce with other sticky updates (and potentially other changes like column resize).

            this._scheduleStyleChanges(function () {
              if (stickyStates.some(function (state) {
                return !state;
              })) {
                _this696._removeStickyStyle(tfoot, ['bottom']);
              } else {
                _this696._addStickyStyle(tfoot, 'bottom', 0, false);
              }
            });
          }
          /**
           * Removes the sticky style on the element by removing the sticky cell CSS class, re-evaluating
           * the zIndex, removing each of the provided sticky directions, and removing the
           * sticky position if there are no more directions.
           */

        }, {
          key: "_removeStickyStyle",
          value: function _removeStickyStyle(element, stickyDirections) {
            var _iterator70 = _createForOfIteratorHelper(stickyDirections),
                _step69;

            try {
              for (_iterator70.s(); !(_step69 = _iterator70.n()).done;) {
                var dir = _step69.value;
                element.style[dir] = '';
                element.classList.remove(this._borderCellCss[dir]);
              } // If the element no longer has any more sticky directions, remove sticky positioning and
              // the sticky CSS class.
              // Short-circuit checking element.style[dir] for stickyDirections as they
              // were already removed above.

            } catch (err) {
              _iterator70.e(err);
            } finally {
              _iterator70.f();
            }

            var hasDirection = STICKY_DIRECTIONS.some(function (dir) {
              return stickyDirections.indexOf(dir) === -1 && element.style[dir];
            });

            if (hasDirection) {
              element.style.zIndex = this._getCalculatedZIndex(element);
            } else {
              // When not hasDirection, _getCalculatedZIndex will always return ''.
              element.style.zIndex = '';

              if (this._needsPositionStickyOnElement) {
                element.style.position = '';
              }

              element.classList.remove(this._stickCellCss);
            }
          }
          /**
           * Adds the sticky styling to the element by adding the sticky style class, changing position
           * to be sticky (and -webkit-sticky), setting the appropriate zIndex, and adding a sticky
           * direction and value.
           */

        }, {
          key: "_addStickyStyle",
          value: function _addStickyStyle(element, dir, dirValue, isBorderElement) {
            element.classList.add(this._stickCellCss);

            if (isBorderElement) {
              element.classList.add(this._borderCellCss[dir]);
            }

            element.style[dir] = "".concat(dirValue, "px");
            element.style.zIndex = this._getCalculatedZIndex(element);

            if (this._needsPositionStickyOnElement) {
              element.style.cssText += 'position: -webkit-sticky; position: sticky; ';
            }
          }
          /**
           * Calculate what the z-index should be for the element, depending on what directions (top,
           * bottom, left, right) have been set. It should be true that elements with a top direction
           * should have the highest index since these are elements like a table header. If any of those
           * elements are also sticky in another direction, then they should appear above other elements
           * that are only sticky top (e.g. a sticky column on a sticky header). Bottom-sticky elements
           * (e.g. footer rows) should then be next in the ordering such that they are below the header
           * but above any non-sticky elements. Finally, left/right sticky elements (e.g. sticky columns)
           * should minimally increment so that they are above non-sticky elements but below top and bottom
           * elements.
           */

        }, {
          key: "_getCalculatedZIndex",
          value: function _getCalculatedZIndex(element) {
            var zIndexIncrements = {
              top: 100,
              bottom: 10,
              left: 1,
              right: 1
            };
            var zIndex = 0; // Use `Iterable` instead of `Array` because TypeScript, as of 3.6.3,
            // loses the array generic type in the `for of`. But we *also* have to use `Array` because
            // typescript won't iterate over an `Iterable` unless you compile with `--downlevelIteration`

            var _iterator71 = _createForOfIteratorHelper(STICKY_DIRECTIONS),
                _step70;

            try {
              for (_iterator71.s(); !(_step70 = _iterator71.n()).done;) {
                var dir = _step70.value;

                if (element.style[dir]) {
                  zIndex += zIndexIncrements[dir];
                }
              }
            } catch (err) {
              _iterator71.e(err);
            } finally {
              _iterator71.f();
            }

            return zIndex ? "".concat(zIndex) : '';
          }
          /** Gets the widths for each cell in the provided row. */

        }, {
          key: "_getCellWidths",
          value: function _getCellWidths(row) {
            var recalculateCellWidths = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;

            if (!recalculateCellWidths && this._cachedCellWidths.length) {
              return this._cachedCellWidths;
            }

            var cellWidths = [];
            var firstRowCells = row.children;

            for (var i = 0; i < firstRowCells.length; i++) {
              var cell = firstRowCells[i];
              cellWidths.push(cell.getBoundingClientRect().width);
            }

            this._cachedCellWidths = cellWidths;
            return cellWidths;
          }
          /**
           * Determines the left and right positions of each sticky column cell, which will be the
           * accumulation of all sticky column cell widths to the left and right, respectively.
           * Non-sticky cells do not need to have a value set since their positions will not be applied.
           */

        }, {
          key: "_getStickyStartColumnPositions",
          value: function _getStickyStartColumnPositions(widths, stickyStates) {
            var positions = [];
            var nextPosition = 0;

            for (var i = 0; i < widths.length; i++) {
              if (stickyStates[i]) {
                positions[i] = nextPosition;
                nextPosition += widths[i];
              }
            }

            return positions;
          }
          /**
           * Determines the left and right positions of each sticky column cell, which will be the
           * accumulation of all sticky column cell widths to the left and right, respectively.
           * Non-sticky cells do not need to have a value set since their positions will not be applied.
           */

        }, {
          key: "_getStickyEndColumnPositions",
          value: function _getStickyEndColumnPositions(widths, stickyStates) {
            var positions = [];
            var nextPosition = 0;

            for (var i = widths.length; i > 0; i--) {
              if (stickyStates[i]) {
                positions[i] = nextPosition;
                nextPosition += widths[i];
              }
            }

            return positions;
          }
          /**
           * Schedules styles to be applied when the style scheduler deems appropriate.
           * @breaking-change 11.0.0 This method can be removed in favor of calling
           * `CoalescedStyleScheduler.schedule` directly once the scheduler is a required parameter.
           */

        }, {
          key: "_scheduleStyleChanges",
          value: function _scheduleStyleChanges(changes) {
            if (this._coalescedStyleScheduler) {
              this._coalescedStyleScheduler.schedule(changes);
            } else {
              changes();
            }
          }
        }]);

        return StickyStyler;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Returns an error to be thrown when attempting to find an unexisting column.
       * @param id Id whose lookup failed.
       * @docs-private
       */


      function getTableUnknownColumnError(id) {
        return Error("Could not find column with id \"".concat(id, "\"."));
      }
      /**
       * Returns an error to be thrown when two column definitions have the same name.
       * @docs-private
       */


      function getTableDuplicateColumnNameError(name) {
        return Error("Duplicate column definition name provided: \"".concat(name, "\"."));
      }
      /**
       * Returns an error to be thrown when there are multiple rows that are missing a when function.
       * @docs-private
       */


      function getTableMultipleDefaultRowDefsError() {
        return Error("There can only be one default row without a when predicate function.");
      }
      /**
       * Returns an error to be thrown when there are no matching row defs for a particular set of data.
       * @docs-private
       */


      function getTableMissingMatchingRowDefError(data) {
        return Error("Could not find a matching row definition for the" + "provided row data: ".concat(JSON.stringify(data)));
      }
      /**
       * Returns an error to be thrown when there is no row definitions present in the content.
       * @docs-private
       */


      function getTableMissingRowDefsError() {
        return Error('Missing definitions for header, footer, and row; ' + 'cannot determine which columns should be rendered.');
      }
      /**
       * Returns an error to be thrown when the data source does not match the compatible types.
       * @docs-private
       */


      function getTableUnknownDataSourceError() {
        return Error("Provided data source did not match an array, Observable, or DataSource");
      }
      /**
       * Returns an error to be thrown when the text column cannot find a parent table to inject.
       * @docs-private
       */


      function getTableTextColumnMissingParentTableError() {
        return Error("Text column could not find a parent table for registration.");
      }
      /**
       * Returns an error to be thrown when a table text column doesn't have a name.
       * @docs-private
       */


      function getTableTextColumnMissingNameError() {
        return Error("Table text column must have a name.");
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** The injection token used to specify the StickyPositioningListener. */


      var STICKY_POSITIONING_LISTENER = new _angular_core__WEBPACK_IMPORTED_MODULE_3__["InjectionToken"]('CDK_SPL');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Provides a handle for the table to grab the view container's ng-container to insert data rows.
       * @docs-private
       */

      var DataRowOutlet = function DataRowOutlet(viewContainer, elementRef) {
        _classCallCheck2(this, DataRowOutlet);

        this.viewContainer = viewContainer;
        this.elementRef = elementRef;
      };

      DataRowOutlet.ɵfac = function DataRowOutlet_Factory(t) {
        return new (t || DataRowOutlet)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]));
      };

      DataRowOutlet.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: DataRowOutlet,
        selectors: [["", "rowOutlet", ""]]
      });

      DataRowOutlet.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewContainerRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](DataRowOutlet, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: '[rowOutlet]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewContainerRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
          }];
        }, null);
      })();
      /**
       * Provides a handle for the table to grab the view container's ng-container to insert the header.
       * @docs-private
       */


      var HeaderRowOutlet = function HeaderRowOutlet(viewContainer, elementRef) {
        _classCallCheck2(this, HeaderRowOutlet);

        this.viewContainer = viewContainer;
        this.elementRef = elementRef;
      };

      HeaderRowOutlet.ɵfac = function HeaderRowOutlet_Factory(t) {
        return new (t || HeaderRowOutlet)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]));
      };

      HeaderRowOutlet.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: HeaderRowOutlet,
        selectors: [["", "headerRowOutlet", ""]]
      });

      HeaderRowOutlet.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewContainerRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](HeaderRowOutlet, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: '[headerRowOutlet]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewContainerRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
          }];
        }, null);
      })();
      /**
       * Provides a handle for the table to grab the view container's ng-container to insert the footer.
       * @docs-private
       */


      var FooterRowOutlet = function FooterRowOutlet(viewContainer, elementRef) {
        _classCallCheck2(this, FooterRowOutlet);

        this.viewContainer = viewContainer;
        this.elementRef = elementRef;
      };

      FooterRowOutlet.ɵfac = function FooterRowOutlet_Factory(t) {
        return new (t || FooterRowOutlet)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]));
      };

      FooterRowOutlet.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: FooterRowOutlet,
        selectors: [["", "footerRowOutlet", ""]]
      });

      FooterRowOutlet.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewContainerRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](FooterRowOutlet, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: '[footerRowOutlet]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewContainerRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
          }];
        }, null);
      })();
      /**
       * Provides a handle for the table to grab the view
       * container's ng-container to insert the no data row.
       * @docs-private
       */


      var NoDataRowOutlet = function NoDataRowOutlet(viewContainer, elementRef) {
        _classCallCheck2(this, NoDataRowOutlet);

        this.viewContainer = viewContainer;
        this.elementRef = elementRef;
      };

      NoDataRowOutlet.ɵfac = function NoDataRowOutlet_Factory(t) {
        return new (t || NoDataRowOutlet)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]));
      };

      NoDataRowOutlet.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: NoDataRowOutlet,
        selectors: [["", "noDataRowOutlet", ""]]
      });

      NoDataRowOutlet.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewContainerRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](NoDataRowOutlet, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: '[noDataRowOutlet]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewContainerRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
          }];
        }, null);
      })();
      /**
       * The table template that can be used by the mat-table. Should not be used outside of the
       * material library.
       * @docs-private
       */


      var CDK_TABLE_TEMPLATE = // Note that according to MDN, the `caption` element has to be projected as the **first**
      // element in the table. See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/caption
      "\n  <ng-content select=\"caption\"></ng-content>\n  <ng-content select=\"colgroup, col\"></ng-content>\n  <ng-container headerRowOutlet></ng-container>\n  <ng-container rowOutlet></ng-container>\n  <ng-container noDataRowOutlet></ng-container>\n  <ng-container footerRowOutlet></ng-container>\n";
      /**
       * Class used to conveniently type the embedded view ref for rows with a context.
       * @docs-private
       */

      var RowViewRef = /*#__PURE__*/function (_angular_core__WEBPAC) {
        _inherits2(RowViewRef, _angular_core__WEBPAC);

        var _super300 = _createSuper(RowViewRef);

        function RowViewRef() {
          _classCallCheck2(this, RowViewRef);

          return _super300.apply(this, arguments);
        }

        return RowViewRef;
      }(_angular_core__WEBPACK_IMPORTED_MODULE_3__["EmbeddedViewRef"]);
      /**
       * A data table that can render a header row, data rows, and a footer row.
       * Uses the dataSource input to determine the data to be rendered. The data can be provided either
       * as a data array, an Observable stream that emits the data array to render, or a DataSource with a
       * connect function that will return an Observable stream that emits the data array to render.
       */


      var CdkTable = /*#__PURE__*/function () {
        function CdkTable(_differs, _changeDetectorRef, _elementRef, role, _dir, _document, _platform,
        /**
         * @deprecated `_coalescedStyleScheduler`, `_viewRepeater` and `_viewportRuler`
         *    parameters to become required.
         * @breaking-change 11.0.0
         */
        _viewRepeater, _coalescedStyleScheduler, _stickyPositioningListener, // Optional for backwards compatibility. The viewport ruler is provided in root. Therefore,
        // this property will never be null.
        // tslint:disable-next-line: lightweight-tokens
        _viewportRuler) {
          _classCallCheck2(this, CdkTable);

          this._differs = _differs;
          this._changeDetectorRef = _changeDetectorRef;
          this._elementRef = _elementRef;
          this._dir = _dir;
          this._platform = _platform;
          this._viewRepeater = _viewRepeater;
          this._coalescedStyleScheduler = _coalescedStyleScheduler;
          this._stickyPositioningListener = _stickyPositioningListener;
          this._viewportRuler = _viewportRuler;
          /** Subject that emits when the component has been destroyed. */

          this._onDestroy = new rxjs__WEBPACK_IMPORTED_MODULE_7__["Subject"]();
          /**
           * Map of all the user's defined columns (header, data, and footer cell template) identified by
           * name. Collection populated by the column definitions gathered by `ContentChildren` as well as
           * any custom column definitions added to `_customColumnDefs`.
           */

          this._columnDefsByName = new Map();
          /**
           * Column definitions that were defined outside of the direct content children of the table.
           * These will be defined when, e.g., creating a wrapper around the cdkTable that has
           * column definitions as *its* content child.
           */

          this._customColumnDefs = new Set();
          /**
           * Data row definitions that were defined outside of the direct content children of the table.
           * These will be defined when, e.g., creating a wrapper around the cdkTable that has
           * built-in data rows as *its* content child.
           */

          this._customRowDefs = new Set();
          /**
           * Header row definitions that were defined outside of the direct content children of the table.
           * These will be defined when, e.g., creating a wrapper around the cdkTable that has
           * built-in header rows as *its* content child.
           */

          this._customHeaderRowDefs = new Set();
          /**
           * Footer row definitions that were defined outside of the direct content children of the table.
           * These will be defined when, e.g., creating a wrapper around the cdkTable that has a
           * built-in footer row as *its* content child.
           */

          this._customFooterRowDefs = new Set();
          /**
           * Whether the header row definition has been changed. Triggers an update to the header row after
           * content is checked. Initialized as true so that the table renders the initial set of rows.
           */

          this._headerRowDefChanged = true;
          /**
           * Whether the footer row definition has been changed. Triggers an update to the footer row after
           * content is checked. Initialized as true so that the table renders the initial set of rows.
           */

          this._footerRowDefChanged = true;
          /**
           * Whether the sticky column styles need to be updated. Set to `true` when the visible columns
           * change.
           */

          this._stickyColumnStylesNeedReset = true;
          /**
           * Whether the sticky styler should recalculate cell widths when applying sticky styles. If
           * `false`, cached values will be used instead. This is only applicable to tables with
           * {@link fixedLayout} enabled. For other tables, cell widths will always be recalculated.
           */

          this._forceRecalculateCellWidths = true;
          /**
           * Cache of the latest rendered `RenderRow` objects as a map for easy retrieval when constructing
           * a new list of `RenderRow` objects for rendering rows. Since the new list is constructed with
           * the cached `RenderRow` objects when possible, the row identity is preserved when the data
           * and row template matches, which allows the `IterableDiffer` to check rows by reference
           * and understand which rows are added/moved/removed.
           *
           * Implemented as a map of maps where the first key is the `data: T` object and the second is the
           * `CdkRowDef<T>` object. With the two keys, the cache points to a `RenderRow<T>` object that
           * contains an array of created pairs. The array is necessary to handle cases where the data
           * array contains multiple duplicate data objects and each instantiated `RenderRow` must be
           * stored.
           */

          this._cachedRenderRowsMap = new Map();
          /**
           * CSS class added to any row or cell that has sticky positioning applied. May be overriden by
           * table subclasses.
           */

          this.stickyCssClass = 'cdk-table-sticky';
          /**
           * Whether to manually add positon: sticky to all sticky cell elements. Not needed if
           * the position is set in a selector associated with the value of stickyCssClass. May be
           * overridden by table subclasses
           */

          this.needsPositionStickyOnElement = true;
          /** Whether the no data row is currently showing anything. */

          this._isShowingNoDataRow = false;
          this._multiTemplateDataRows = false;
          this._fixedLayout = false; // TODO(andrewseguin): Remove max value as the end index
          //   and instead calculate the view on init and scroll.

          /**
           * Stream containing the latest information on what rows are being displayed on screen.
           * Can be used by the data source to as a heuristic of what data should be provided.
           *
           * @docs-private
           */

          this.viewChange = new rxjs__WEBPACK_IMPORTED_MODULE_7__["BehaviorSubject"]({
            start: 0,
            end: Number.MAX_VALUE
          });

          if (!role) {
            this._elementRef.nativeElement.setAttribute('role', 'grid');
          }

          this._document = _document;
          this._isNativeHtmlTable = this._elementRef.nativeElement.nodeName === 'TABLE';
        }
        /**
         * Tracking function that will be used to check the differences in data changes. Used similarly
         * to `ngFor` `trackBy` function. Optimize row operations by identifying a row based on its data
         * relative to the function to know if a row should be added/removed/moved.
         * Accepts a function that takes two parameters, `index` and `item`.
         */


        _createClass2(CdkTable, [{
          key: "trackBy",
          get: function get() {
            return this._trackByFn;
          },
          set: function set(fn) {
            if ((typeof ngDevMode === 'undefined' || ngDevMode) && fn != null && typeof fn !== 'function') {
              console.warn("trackBy must be a function, but received ".concat(JSON.stringify(fn), "."));
            }

            this._trackByFn = fn;
          }
          /**
           * The table's source of data, which can be provided in three ways (in order of complexity):
           *   - Simple data array (each object represents one table row)
           *   - Stream that emits a data array each time the array changes
           *   - `DataSource` object that implements the connect/disconnect interface.
           *
           * If a data array is provided, the table must be notified when the array's objects are
           * added, removed, or moved. This can be done by calling the `renderRows()` function which will
           * render the diff since the last table render. If the data array reference is changed, the table
           * will automatically trigger an update to the rows.
           *
           * When providing an Observable stream, the table will trigger an update automatically when the
           * stream emits a new array of data.
           *
           * Finally, when providing a `DataSource` object, the table will use the Observable stream
           * provided by the connect function and trigger updates when that stream emits new data array
           * values. During the table's ngOnDestroy or when the data source is removed from the table, the
           * table will call the DataSource's `disconnect` function (may be useful for cleaning up any
           * subscriptions registered during the connect process).
           */

        }, {
          key: "dataSource",
          get: function get() {
            return this._dataSource;
          },
          set: function set(dataSource) {
            if (this._dataSource !== dataSource) {
              this._switchDataSource(dataSource);
            }
          }
          /**
           * Whether to allow multiple rows per data object by evaluating which rows evaluate their 'when'
           * predicate to true. If `multiTemplateDataRows` is false, which is the default value, then each
           * dataobject will render the first row that evaluates its when predicate to true, in the order
           * defined in the table, or otherwise the default row which does not have a when predicate.
           */

        }, {
          key: "multiTemplateDataRows",
          get: function get() {
            return this._multiTemplateDataRows;
          },
          set: function set(v) {
            this._multiTemplateDataRows = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_1__["coerceBooleanProperty"])(v); // In Ivy if this value is set via a static attribute (e.g. <table multiTemplateDataRows>),
            // this setter will be invoked before the row outlet has been defined hence the null check.

            if (this._rowOutlet && this._rowOutlet.viewContainer.length) {
              this._forceRenderDataRows();

              this.updateStickyColumnStyles();
            }
          }
          /**
           * Whether to use a fixed table layout. Enabling this option will enforce consistent column widths
           * and optimize rendering sticky styles for native tables. No-op for flex tables.
           */

        }, {
          key: "fixedLayout",
          get: function get() {
            return this._fixedLayout;
          },
          set: function set(v) {
            this._fixedLayout = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_1__["coerceBooleanProperty"])(v); // Toggling `fixedLayout` may change column widths. Sticky column styles should be recalculated.

            this._forceRecalculateCellWidths = true;
            this._stickyColumnStylesNeedReset = true;
          }
        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            var _this697 = this;

            this._setupStickyStyler();

            if (this._isNativeHtmlTable) {
              this._applyNativeTableSections();
            } // Set up the trackBy function so that it uses the `RenderRow` as its identity by default. If
            // the user has provided a custom trackBy, return the result of that function as evaluated
            // with the values of the `RenderRow`'s data and index.


            this._dataDiffer = this._differs.find([]).create(function (_i, dataRow) {
              return _this697.trackBy ? _this697.trackBy(dataRow.dataIndex, dataRow.data) : dataRow;
            }); // Table cell dimensions may change after resizing the window. Signal the sticky styler to
            // refresh its cache of cell widths the next time sticky styles are updated.
            // @breaking-change 11.0.0 Remove null check for _viewportRuler once it's a required parameter.

            if (this._viewportRuler) {
              this._viewportRuler.change().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_8__["takeUntil"])(this._onDestroy)).subscribe(function () {
                _this697._forceRecalculateCellWidths = true;
              });
            }
          }
        }, {
          key: "ngAfterContentChecked",
          value: function ngAfterContentChecked() {
            // Cache the row and column definitions gathered by ContentChildren and programmatic injection.
            this._cacheRowDefs();

            this._cacheColumnDefs(); // Make sure that the user has at least added header, footer, or data row def.


            if (!this._headerRowDefs.length && !this._footerRowDefs.length && !this._rowDefs.length && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw getTableMissingRowDefsError();
            } // Render updates if the list of columns have been changed for the header, row, or footer defs.


            var columnsChanged = this._renderUpdatedColumns();

            var rowDefsChanged = columnsChanged || this._headerRowDefChanged || this._footerRowDefChanged; // Ensure sticky column styles are reset if set to `true` elsewhere.

            this._stickyColumnStylesNeedReset = this._stickyColumnStylesNeedReset || rowDefsChanged;
            this._forceRecalculateCellWidths = rowDefsChanged; // If the header row definition has been changed, trigger a render to the header row.

            if (this._headerRowDefChanged) {
              this._forceRenderHeaderRows();

              this._headerRowDefChanged = false;
            } // If the footer row definition has been changed, trigger a render to the footer row.


            if (this._footerRowDefChanged) {
              this._forceRenderFooterRows();

              this._footerRowDefChanged = false;
            } // If there is a data source and row definitions, connect to the data source unless a
            // connection has already been made.


            if (this.dataSource && this._rowDefs.length > 0 && !this._renderChangeSubscription) {
              this._observeRenderChanges();
            } else if (this._stickyColumnStylesNeedReset) {
              // In the above case, _observeRenderChanges will result in updateStickyColumnStyles being
              // called when it row data arrives. Otherwise, we need to call it proactively.
              this.updateStickyColumnStyles();
            }

            this._checkStickyStates();
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._rowOutlet.viewContainer.clear();

            this._noDataRowOutlet.viewContainer.clear();

            this._headerRowOutlet.viewContainer.clear();

            this._footerRowOutlet.viewContainer.clear();

            this._cachedRenderRowsMap.clear();

            this._onDestroy.next();

            this._onDestroy.complete();

            if (Object(_angular_cdk_collections__WEBPACK_IMPORTED_MODULE_2__["isDataSource"])(this.dataSource)) {
              this.dataSource.disconnect(this);
            }
          }
          /**
           * Renders rows based on the table's latest set of data, which was either provided directly as an
           * input or retrieved through an Observable stream (directly or from a DataSource).
           * Checks for differences in the data since the last diff to perform only the necessary
           * changes (add/remove/move rows).
           *
           * If the table's data source is a DataSource or Observable, this will be invoked automatically
           * each time the provided Observable stream emits a new data array. Otherwise if your data is
           * an array, this function will need to be called to render any changes.
           */

        }, {
          key: "renderRows",
          value: function renderRows() {
            var _this698 = this;

            this._renderRows = this._getAllRenderRows();

            var changes = this._dataDiffer.diff(this._renderRows);

            if (!changes) {
              this._updateNoDataRow();

              return;
            }

            var viewContainer = this._rowOutlet.viewContainer; // @breaking-change 11.0.0 Remove null check for `_viewRepeater` and the
            // `else` clause once `_viewRepeater` is turned into a required parameter.

            if (this._viewRepeater) {
              this._viewRepeater.applyChanges(changes, viewContainer, function (record, _adjustedPreviousIndex, currentIndex) {
                return _this698._getEmbeddedViewArgs(record.item, currentIndex);
              }, function (record) {
                return record.item.data;
              }, function (change) {
                if (change.operation === 1
                /* INSERTED */
                && change.context) {
                  _this698._renderCellTemplateForItem(change.record.item.rowDef, change.context);
                }
              });
            } else {
              changes.forEachOperation(function (record, prevIndex, currentIndex) {
                if (record.previousIndex == null) {
                  var renderRow = record.item;
                  var rowDef = renderRow.rowDef;
                  var context = {
                    $implicit: renderRow.data
                  };

                  _this698._renderRow(_this698._rowOutlet, rowDef, currentIndex, context);
                } else if (currentIndex == null) {
                  viewContainer.remove(prevIndex);
                } else {
                  var view = viewContainer.get(prevIndex);
                  viewContainer.move(view, currentIndex);
                }
              });
            } // Update the meta context of a row's context data (index, count, first, last, ...)


            this._updateRowIndexContext(); // Update rows that did not get added/removed/moved but may have had their identity changed,
            // e.g. if trackBy matched data on some property but the actual data reference changed.


            changes.forEachIdentityChange(function (record) {
              var rowView = viewContainer.get(record.currentIndex);
              rowView.context.$implicit = record.item.data;
            });

            this._updateNoDataRow();

            this.updateStickyColumnStyles();
          }
          /** Adds a column definition that was not included as part of the content children. */

        }, {
          key: "addColumnDef",
          value: function addColumnDef(columnDef) {
            this._customColumnDefs.add(columnDef);
          }
          /** Removes a column definition that was not included as part of the content children. */

        }, {
          key: "removeColumnDef",
          value: function removeColumnDef(columnDef) {
            this._customColumnDefs["delete"](columnDef);
          }
          /** Adds a row definition that was not included as part of the content children. */

        }, {
          key: "addRowDef",
          value: function addRowDef(rowDef) {
            this._customRowDefs.add(rowDef);
          }
          /** Removes a row definition that was not included as part of the content children. */

        }, {
          key: "removeRowDef",
          value: function removeRowDef(rowDef) {
            this._customRowDefs["delete"](rowDef);
          }
          /** Adds a header row definition that was not included as part of the content children. */

        }, {
          key: "addHeaderRowDef",
          value: function addHeaderRowDef(headerRowDef) {
            this._customHeaderRowDefs.add(headerRowDef);

            this._headerRowDefChanged = true;
          }
          /** Removes a header row definition that was not included as part of the content children. */

        }, {
          key: "removeHeaderRowDef",
          value: function removeHeaderRowDef(headerRowDef) {
            this._customHeaderRowDefs["delete"](headerRowDef);

            this._headerRowDefChanged = true;
          }
          /** Adds a footer row definition that was not included as part of the content children. */

        }, {
          key: "addFooterRowDef",
          value: function addFooterRowDef(footerRowDef) {
            this._customFooterRowDefs.add(footerRowDef);

            this._footerRowDefChanged = true;
          }
          /** Removes a footer row definition that was not included as part of the content children. */

        }, {
          key: "removeFooterRowDef",
          value: function removeFooterRowDef(footerRowDef) {
            this._customFooterRowDefs["delete"](footerRowDef);

            this._footerRowDefChanged = true;
          }
          /** Sets a no data row definition that was not included as a part of the content children. */

        }, {
          key: "setNoDataRow",
          value: function setNoDataRow(noDataRow) {
            this._customNoDataRow = noDataRow;
          }
          /**
           * Updates the header sticky styles. First resets all applied styles with respect to the cells
           * sticking to the top. Then, evaluating which cells need to be stuck to the top. This is
           * automatically called when the header row changes its displayed set of columns, or if its
           * sticky input changes. May be called manually for cases where the cell content changes outside
           * of these events.
           */

        }, {
          key: "updateStickyHeaderRowStyles",
          value: function updateStickyHeaderRowStyles() {
            var headerRows = this._getRenderedRows(this._headerRowOutlet);

            var tableElement = this._elementRef.nativeElement; // Hide the thead element if there are no header rows. This is necessary to satisfy
            // overzealous a11y checkers that fail because the `rowgroup` element does not contain
            // required child `row`.

            var thead = tableElement.querySelector('thead');

            if (thead) {
              thead.style.display = headerRows.length ? '' : 'none';
            }

            var stickyStates = this._headerRowDefs.map(function (def) {
              return def.sticky;
            });

            this._stickyStyler.clearStickyPositioning(headerRows, ['top']);

            this._stickyStyler.stickRows(headerRows, stickyStates, 'top'); // Reset the dirty state of the sticky input change since it has been used.


            this._headerRowDefs.forEach(function (def) {
              return def.resetStickyChanged();
            });
          }
          /**
           * Updates the footer sticky styles. First resets all applied styles with respect to the cells
           * sticking to the bottom. Then, evaluating which cells need to be stuck to the bottom. This is
           * automatically called when the footer row changes its displayed set of columns, or if its
           * sticky input changes. May be called manually for cases where the cell content changes outside
           * of these events.
           */

        }, {
          key: "updateStickyFooterRowStyles",
          value: function updateStickyFooterRowStyles() {
            var footerRows = this._getRenderedRows(this._footerRowOutlet);

            var tableElement = this._elementRef.nativeElement; // Hide the tfoot element if there are no footer rows. This is necessary to satisfy
            // overzealous a11y checkers that fail because the `rowgroup` element does not contain
            // required child `row`.

            var tfoot = tableElement.querySelector('tfoot');

            if (tfoot) {
              tfoot.style.display = footerRows.length ? '' : 'none';
            }

            var stickyStates = this._footerRowDefs.map(function (def) {
              return def.sticky;
            });

            this._stickyStyler.clearStickyPositioning(footerRows, ['bottom']);

            this._stickyStyler.stickRows(footerRows, stickyStates, 'bottom');

            this._stickyStyler.updateStickyFooterContainer(this._elementRef.nativeElement, stickyStates); // Reset the dirty state of the sticky input change since it has been used.


            this._footerRowDefs.forEach(function (def) {
              return def.resetStickyChanged();
            });
          }
          /**
           * Updates the column sticky styles. First resets all applied styles with respect to the cells
           * sticking to the left and right. Then sticky styles are added for the left and right according
           * to the column definitions for each cell in each row. This is automatically called when
           * the data source provides a new set of data or when a column definition changes its sticky
           * input. May be called manually for cases where the cell content changes outside of these events.
           */

        }, {
          key: "updateStickyColumnStyles",
          value: function updateStickyColumnStyles() {
            var _this699 = this;

            var headerRows = this._getRenderedRows(this._headerRowOutlet);

            var dataRows = this._getRenderedRows(this._rowOutlet);

            var footerRows = this._getRenderedRows(this._footerRowOutlet); // For tables not using a fixed layout, the column widths may change when new rows are rendered.
            // In a table using a fixed layout, row content won't affect column width, so sticky styles
            // don't need to be cleared unless either the sticky column config changes or one of the row
            // defs change.


            if (this._isNativeHtmlTable && !this._fixedLayout || this._stickyColumnStylesNeedReset) {
              // Clear the left and right positioning from all columns in the table across all rows since
              // sticky columns span across all table sections (header, data, footer)
              this._stickyStyler.clearStickyPositioning([].concat(_toConsumableArray(headerRows), _toConsumableArray(dataRows), _toConsumableArray(footerRows)), ['left', 'right']);

              this._stickyColumnStylesNeedReset = false;
            } // Update the sticky styles for each header row depending on the def's sticky state


            headerRows.forEach(function (headerRow, i) {
              _this699._addStickyColumnStyles([headerRow], _this699._headerRowDefs[i]);
            }); // Update the sticky styles for each data row depending on its def's sticky state

            this._rowDefs.forEach(function (rowDef) {
              // Collect all the rows rendered with this row definition.
              var rows = [];

              for (var i = 0; i < dataRows.length; i++) {
                if (_this699._renderRows[i].rowDef === rowDef) {
                  rows.push(dataRows[i]);
                }
              }

              _this699._addStickyColumnStyles(rows, rowDef);
            }); // Update the sticky styles for each footer row depending on the def's sticky state


            footerRows.forEach(function (footerRow, i) {
              _this699._addStickyColumnStyles([footerRow], _this699._footerRowDefs[i]);
            }); // Reset the dirty state of the sticky input change since it has been used.

            Array.from(this._columnDefsByName.values()).forEach(function (def) {
              return def.resetStickyChanged();
            });
          }
          /**
           * Get the list of RenderRow objects to render according to the current list of data and defined
           * row definitions. If the previous list already contained a particular pair, it should be reused
           * so that the differ equates their references.
           */

        }, {
          key: "_getAllRenderRows",
          value: function _getAllRenderRows() {
            var renderRows = []; // Store the cache and create a new one. Any re-used RenderRow objects will be moved into the
            // new cache while unused ones can be picked up by garbage collection.

            var prevCachedRenderRows = this._cachedRenderRowsMap;
            this._cachedRenderRowsMap = new Map(); // For each data object, get the list of rows that should be rendered, represented by the
            // respective `RenderRow` object which is the pair of `data` and `CdkRowDef`.

            for (var i = 0; i < this._data.length; i++) {
              var data = this._data[i];

              var renderRowsForData = this._getRenderRowsForData(data, i, prevCachedRenderRows.get(data));

              if (!this._cachedRenderRowsMap.has(data)) {
                this._cachedRenderRowsMap.set(data, new WeakMap());
              }

              for (var j = 0; j < renderRowsForData.length; j++) {
                var renderRow = renderRowsForData[j];

                var cache = this._cachedRenderRowsMap.get(renderRow.data);

                if (cache.has(renderRow.rowDef)) {
                  cache.get(renderRow.rowDef).push(renderRow);
                } else {
                  cache.set(renderRow.rowDef, [renderRow]);
                }

                renderRows.push(renderRow);
              }
            }

            return renderRows;
          }
          /**
           * Gets a list of `RenderRow<T>` for the provided data object and any `CdkRowDef` objects that
           * should be rendered for this data. Reuses the cached RenderRow objects if they match the same
           * `(T, CdkRowDef)` pair.
           */

        }, {
          key: "_getRenderRowsForData",
          value: function _getRenderRowsForData(data, dataIndex, cache) {
            var rowDefs = this._getRowDefs(data, dataIndex);

            return rowDefs.map(function (rowDef) {
              var cachedRenderRows = cache && cache.has(rowDef) ? cache.get(rowDef) : [];

              if (cachedRenderRows.length) {
                var dataRow = cachedRenderRows.shift();
                dataRow.dataIndex = dataIndex;
                return dataRow;
              } else {
                return {
                  data: data,
                  rowDef: rowDef,
                  dataIndex: dataIndex
                };
              }
            });
          }
          /** Update the map containing the content's column definitions. */

        }, {
          key: "_cacheColumnDefs",
          value: function _cacheColumnDefs() {
            var _this700 = this;

            this._columnDefsByName.clear();

            var columnDefs = mergeArrayAndSet(this._getOwnDefs(this._contentColumnDefs), this._customColumnDefs);
            columnDefs.forEach(function (columnDef) {
              if (_this700._columnDefsByName.has(columnDef.name) && (typeof ngDevMode === 'undefined' || ngDevMode)) {
                throw getTableDuplicateColumnNameError(columnDef.name);
              }

              _this700._columnDefsByName.set(columnDef.name, columnDef);
            });
          }
          /** Update the list of all available row definitions that can be used. */

        }, {
          key: "_cacheRowDefs",
          value: function _cacheRowDefs() {
            this._headerRowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentHeaderRowDefs), this._customHeaderRowDefs);
            this._footerRowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentFooterRowDefs), this._customFooterRowDefs);
            this._rowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentRowDefs), this._customRowDefs); // After all row definitions are determined, find the row definition to be considered default.

            var defaultRowDefs = this._rowDefs.filter(function (def) {
              return !def.when;
            });

            if (!this.multiTemplateDataRows && defaultRowDefs.length > 1 && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw getTableMultipleDefaultRowDefsError();
            }

            this._defaultRowDef = defaultRowDefs[0];
          }
          /**
           * Check if the header, data, or footer rows have changed what columns they want to display or
           * whether the sticky states have changed for the header or footer. If there is a diff, then
           * re-render that section.
           */

        }, {
          key: "_renderUpdatedColumns",
          value: function _renderUpdatedColumns() {
            var columnsDiffReducer = function columnsDiffReducer(acc, def) {
              return acc || !!def.getColumnsDiff();
            }; // Force re-render data rows if the list of column definitions have changed.


            var dataColumnsChanged = this._rowDefs.reduce(columnsDiffReducer, false);

            if (dataColumnsChanged) {
              this._forceRenderDataRows();
            } // Force re-render header/footer rows if the list of column definitions have changed.


            var headerColumnsChanged = this._headerRowDefs.reduce(columnsDiffReducer, false);

            if (headerColumnsChanged) {
              this._forceRenderHeaderRows();
            }

            var footerColumnsChanged = this._footerRowDefs.reduce(columnsDiffReducer, false);

            if (footerColumnsChanged) {
              this._forceRenderFooterRows();
            }

            return dataColumnsChanged || headerColumnsChanged || footerColumnsChanged;
          }
          /**
           * Switch to the provided data source by resetting the data and unsubscribing from the current
           * render change subscription if one exists. If the data source is null, interpret this by
           * clearing the row outlet. Otherwise start listening for new data.
           */

        }, {
          key: "_switchDataSource",
          value: function _switchDataSource(dataSource) {
            this._data = [];

            if (Object(_angular_cdk_collections__WEBPACK_IMPORTED_MODULE_2__["isDataSource"])(this.dataSource)) {
              this.dataSource.disconnect(this);
            } // Stop listening for data from the previous data source.


            if (this._renderChangeSubscription) {
              this._renderChangeSubscription.unsubscribe();

              this._renderChangeSubscription = null;
            }

            if (!dataSource) {
              if (this._dataDiffer) {
                this._dataDiffer.diff([]);
              }

              this._rowOutlet.viewContainer.clear();
            }

            this._dataSource = dataSource;
          }
          /** Set up a subscription for the data provided by the data source. */

        }, {
          key: "_observeRenderChanges",
          value: function _observeRenderChanges() {
            var _this701 = this;

            // If no data source has been set, there is nothing to observe for changes.
            if (!this.dataSource) {
              return;
            }

            var dataStream;

            if (Object(_angular_cdk_collections__WEBPACK_IMPORTED_MODULE_2__["isDataSource"])(this.dataSource)) {
              dataStream = this.dataSource.connect(this);
            } else if (Object(rxjs__WEBPACK_IMPORTED_MODULE_7__["isObservable"])(this.dataSource)) {
              dataStream = this.dataSource;
            } else if (Array.isArray(this.dataSource)) {
              dataStream = Object(rxjs__WEBPACK_IMPORTED_MODULE_7__["of"])(this.dataSource);
            }

            if (dataStream === undefined && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw getTableUnknownDataSourceError();
            }

            this._renderChangeSubscription = dataStream.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_8__["takeUntil"])(this._onDestroy)).subscribe(function (data) {
              _this701._data = data || [];

              _this701.renderRows();
            });
          }
          /**
           * Clears any existing content in the header row outlet and creates a new embedded view
           * in the outlet using the header row definition.
           */

        }, {
          key: "_forceRenderHeaderRows",
          value: function _forceRenderHeaderRows() {
            var _this702 = this;

            // Clear the header row outlet if any content exists.
            if (this._headerRowOutlet.viewContainer.length > 0) {
              this._headerRowOutlet.viewContainer.clear();
            }

            this._headerRowDefs.forEach(function (def, i) {
              return _this702._renderRow(_this702._headerRowOutlet, def, i);
            });

            this.updateStickyHeaderRowStyles();
          }
          /**
           * Clears any existing content in the footer row outlet and creates a new embedded view
           * in the outlet using the footer row definition.
           */

        }, {
          key: "_forceRenderFooterRows",
          value: function _forceRenderFooterRows() {
            var _this703 = this;

            // Clear the footer row outlet if any content exists.
            if (this._footerRowOutlet.viewContainer.length > 0) {
              this._footerRowOutlet.viewContainer.clear();
            }

            this._footerRowDefs.forEach(function (def, i) {
              return _this703._renderRow(_this703._footerRowOutlet, def, i);
            });

            this.updateStickyFooterRowStyles();
          }
          /** Adds the sticky column styles for the rows according to the columns' stick states. */

        }, {
          key: "_addStickyColumnStyles",
          value: function _addStickyColumnStyles(rows, rowDef) {
            var _this704 = this;

            var columnDefs = Array.from(rowDef.columns || []).map(function (columnName) {
              var columnDef = _this704._columnDefsByName.get(columnName);

              if (!columnDef && (typeof ngDevMode === 'undefined' || ngDevMode)) {
                throw getTableUnknownColumnError(columnName);
              }

              return columnDef;
            });
            var stickyStartStates = columnDefs.map(function (columnDef) {
              return columnDef.sticky;
            });
            var stickyEndStates = columnDefs.map(function (columnDef) {
              return columnDef.stickyEnd;
            });

            this._stickyStyler.updateStickyColumns(rows, stickyStartStates, stickyEndStates, !this._fixedLayout || this._forceRecalculateCellWidths);
          }
          /** Gets the list of rows that have been rendered in the row outlet. */

        }, {
          key: "_getRenderedRows",
          value: function _getRenderedRows(rowOutlet) {
            var renderedRows = [];

            for (var i = 0; i < rowOutlet.viewContainer.length; i++) {
              var viewRef = rowOutlet.viewContainer.get(i);
              renderedRows.push(viewRef.rootNodes[0]);
            }

            return renderedRows;
          }
          /**
           * Get the matching row definitions that should be used for this row data. If there is only
           * one row definition, it is returned. Otherwise, find the row definitions that has a when
           * predicate that returns true with the data. If none return true, return the default row
           * definition.
           */

        }, {
          key: "_getRowDefs",
          value: function _getRowDefs(data, dataIndex) {
            if (this._rowDefs.length == 1) {
              return [this._rowDefs[0]];
            }

            var rowDefs = [];

            if (this.multiTemplateDataRows) {
              rowDefs = this._rowDefs.filter(function (def) {
                return !def.when || def.when(dataIndex, data);
              });
            } else {
              var rowDef = this._rowDefs.find(function (def) {
                return def.when && def.when(dataIndex, data);
              }) || this._defaultRowDef;

              if (rowDef) {
                rowDefs.push(rowDef);
              }
            }

            if (!rowDefs.length && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw getTableMissingMatchingRowDefError(data);
            }

            return rowDefs;
          }
        }, {
          key: "_getEmbeddedViewArgs",
          value: function _getEmbeddedViewArgs(renderRow, index) {
            var rowDef = renderRow.rowDef;
            var context = {
              $implicit: renderRow.data
            };
            return {
              templateRef: rowDef.template,
              context: context,
              index: index
            };
          }
          /**
           * Creates a new row template in the outlet and fills it with the set of cell templates.
           * Optionally takes a context to provide to the row and cells, as well as an optional index
           * of where to place the new row template in the outlet.
           */

        }, {
          key: "_renderRow",
          value: function _renderRow(outlet, rowDef, index) {
            var context = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
            // TODO(andrewseguin): enforce that one outlet was instantiated from createEmbeddedView
            var view = outlet.viewContainer.createEmbeddedView(rowDef.template, context, index);

            this._renderCellTemplateForItem(rowDef, context);

            return view;
          }
        }, {
          key: "_renderCellTemplateForItem",
          value: function _renderCellTemplateForItem(rowDef, context) {
            var _iterator72 = _createForOfIteratorHelper(this._getCellTemplates(rowDef)),
                _step71;

            try {
              for (_iterator72.s(); !(_step71 = _iterator72.n()).done;) {
                var cellTemplate = _step71.value;

                if (CdkCellOutlet.mostRecentCellOutlet) {
                  CdkCellOutlet.mostRecentCellOutlet._viewContainer.createEmbeddedView(cellTemplate, context);
                }
              }
            } catch (err) {
              _iterator72.e(err);
            } finally {
              _iterator72.f();
            }

            this._changeDetectorRef.markForCheck();
          }
          /**
           * Updates the index-related context for each row to reflect any changes in the index of the rows,
           * e.g. first/last/even/odd.
           */

        }, {
          key: "_updateRowIndexContext",
          value: function _updateRowIndexContext() {
            var viewContainer = this._rowOutlet.viewContainer;

            for (var renderIndex = 0, count = viewContainer.length; renderIndex < count; renderIndex++) {
              var viewRef = viewContainer.get(renderIndex);
              var context = viewRef.context;
              context.count = count;
              context.first = renderIndex === 0;
              context.last = renderIndex === count - 1;
              context.even = renderIndex % 2 === 0;
              context.odd = !context.even;

              if (this.multiTemplateDataRows) {
                context.dataIndex = this._renderRows[renderIndex].dataIndex;
                context.renderIndex = renderIndex;
              } else {
                context.index = this._renderRows[renderIndex].dataIndex;
              }
            }
          }
          /** Gets the column definitions for the provided row def. */

        }, {
          key: "_getCellTemplates",
          value: function _getCellTemplates(rowDef) {
            var _this705 = this;

            if (!rowDef || !rowDef.columns) {
              return [];
            }

            return Array.from(rowDef.columns, function (columnId) {
              var column = _this705._columnDefsByName.get(columnId);

              if (!column && (typeof ngDevMode === 'undefined' || ngDevMode)) {
                throw getTableUnknownColumnError(columnId);
              }

              return rowDef.extractCellTemplate(column);
            });
          }
          /** Adds native table sections (e.g. tbody) and moves the row outlets into them. */

        }, {
          key: "_applyNativeTableSections",
          value: function _applyNativeTableSections() {
            var documentFragment = this._document.createDocumentFragment();

            var sections = [{
              tag: 'thead',
              outlets: [this._headerRowOutlet]
            }, {
              tag: 'tbody',
              outlets: [this._rowOutlet, this._noDataRowOutlet]
            }, {
              tag: 'tfoot',
              outlets: [this._footerRowOutlet]
            }];

            for (var _i26 = 0, _sections = sections; _i26 < _sections.length; _i26++) {
              var section = _sections[_i26];

              var element = this._document.createElement(section.tag);

              element.setAttribute('role', 'rowgroup');

              var _iterator73 = _createForOfIteratorHelper(section.outlets),
                  _step72;

              try {
                for (_iterator73.s(); !(_step72 = _iterator73.n()).done;) {
                  var outlet = _step72.value;
                  element.appendChild(outlet.elementRef.nativeElement);
                }
              } catch (err) {
                _iterator73.e(err);
              } finally {
                _iterator73.f();
              }

              documentFragment.appendChild(element);
            } // Use a DocumentFragment so we don't hit the DOM on each iteration.


            this._elementRef.nativeElement.appendChild(documentFragment);
          }
          /**
           * Forces a re-render of the data rows. Should be called in cases where there has been an input
           * change that affects the evaluation of which rows should be rendered, e.g. toggling
           * `multiTemplateDataRows` or adding/removing row definitions.
           */

        }, {
          key: "_forceRenderDataRows",
          value: function _forceRenderDataRows() {
            this._dataDiffer.diff([]);

            this._rowOutlet.viewContainer.clear();

            this.renderRows();
          }
          /**
           * Checks if there has been a change in sticky states since last check and applies the correct
           * sticky styles. Since checking resets the "dirty" state, this should only be performed once
           * during a change detection and after the inputs are settled (after content check).
           */

        }, {
          key: "_checkStickyStates",
          value: function _checkStickyStates() {
            var stickyCheckReducer = function stickyCheckReducer(acc, d) {
              return acc || d.hasStickyChanged();
            }; // Note that the check needs to occur for every definition since it notifies the definition
            // that it can reset its dirty state. Using another operator like `some` may short-circuit
            // remaining definitions and leave them in an unchecked state.


            if (this._headerRowDefs.reduce(stickyCheckReducer, false)) {
              this.updateStickyHeaderRowStyles();
            }

            if (this._footerRowDefs.reduce(stickyCheckReducer, false)) {
              this.updateStickyFooterRowStyles();
            }

            if (Array.from(this._columnDefsByName.values()).reduce(stickyCheckReducer, false)) {
              this._stickyColumnStylesNeedReset = true;
              this.updateStickyColumnStyles();
            }
          }
          /**
           * Creates the sticky styler that will be used for sticky rows and columns. Listens
           * for directionality changes and provides the latest direction to the styler. Re-applies column
           * stickiness when directionality changes.
           */

        }, {
          key: "_setupStickyStyler",
          value: function _setupStickyStyler() {
            var _this706 = this;

            var direction = this._dir ? this._dir.value : 'ltr';
            this._stickyStyler = new StickyStyler(this._isNativeHtmlTable, this.stickyCssClass, direction, this._coalescedStyleScheduler, this._platform.isBrowser, this.needsPositionStickyOnElement, this._stickyPositioningListener);
            (this._dir ? this._dir.change : Object(rxjs__WEBPACK_IMPORTED_MODULE_7__["of"])()).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_8__["takeUntil"])(this._onDestroy)).subscribe(function (value) {
              _this706._stickyStyler.direction = value;

              _this706.updateStickyColumnStyles();
            });
          }
          /** Filters definitions that belong to this table from a QueryList. */

        }, {
          key: "_getOwnDefs",
          value: function _getOwnDefs(items) {
            var _this707 = this;

            return items.filter(function (item) {
              return !item._table || item._table === _this707;
            });
          }
          /** Creates or removes the no data row, depending on whether any data is being shown. */

        }, {
          key: "_updateNoDataRow",
          value: function _updateNoDataRow() {
            var noDataRow = this._customNoDataRow || this._noDataRow;

            if (noDataRow) {
              var shouldShow = this._rowOutlet.viewContainer.length === 0;

              if (shouldShow !== this._isShowingNoDataRow) {
                var container = this._noDataRowOutlet.viewContainer;
                shouldShow ? container.createEmbeddedView(noDataRow.templateRef) : container.clear();
                this._isShowingNoDataRow = shouldShow;
              }
            }
          }
        }]);

        return CdkTable;
      }();

      CdkTable.ɵfac = function CdkTable_Factory(t) {
        return new (t || CdkTable)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["IterableDiffers"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinjectAttribute"]('role'), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_0__["Directionality"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_6__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["Platform"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_cdk_collections__WEBPACK_IMPORTED_MODULE_2__["_VIEW_REPEATER_STRATEGY"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_COALESCED_STYLE_SCHEDULER, 8), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](STICKY_POSITIONING_LISTENER, 12), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_5__["ViewportRuler"], 8));
      };

      CdkTable.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineComponent"]({
        type: CdkTable,
        selectors: [["cdk-table"], ["table", "cdk-table", ""]],
        contentQueries: function CdkTable_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵcontentQuery"](dirIndex, CdkNoDataRow, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵcontentQuery"](dirIndex, CdkColumnDef, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵcontentQuery"](dirIndex, CdkRowDef, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵcontentQuery"](dirIndex, CdkHeaderRowDef, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵcontentQuery"](dirIndex, CdkFooterRowDef, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx._noDataRow = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx._contentColumnDefs = _t);
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx._contentRowDefs = _t);
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx._contentHeaderRowDefs = _t);
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx._contentFooterRowDefs = _t);
          }
        },
        viewQuery: function CdkTable_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵviewQuery"](DataRowOutlet, 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵviewQuery"](HeaderRowOutlet, 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵviewQuery"](FooterRowOutlet, 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵviewQuery"](NoDataRowOutlet, 3);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx._rowOutlet = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx._headerRowOutlet = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx._footerRowOutlet = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx._noDataRowOutlet = _t.first);
          }
        },
        hostAttrs: [1, "cdk-table"],
        hostVars: 2,
        hostBindings: function CdkTable_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵclassProp"]("cdk-table-fixed-layout", ctx.fixedLayout);
          }
        },
        inputs: {
          trackBy: "trackBy",
          dataSource: "dataSource",
          multiTemplateDataRows: "multiTemplateDataRows",
          fixedLayout: "fixedLayout"
        },
        exportAs: ["cdkTable"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵProvidersFeature"]([{
          provide: CDK_TABLE,
          useExisting: CdkTable
        }, {
          provide: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_2__["_VIEW_REPEATER_STRATEGY"],
          useClass: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_2__["_DisposeViewRepeaterStrategy"]
        }, {
          provide: _COALESCED_STYLE_SCHEDULER,
          useClass: _CoalescedStyleScheduler
        }, // Prevent nested tables from seeing this table's StickyPositioningListener.
        {
          provide: STICKY_POSITIONING_LISTENER,
          useValue: null
        }])],
        ngContentSelectors: _c1,
        decls: 6,
        vars: 0,
        consts: [["headerRowOutlet", ""], ["rowOutlet", ""], ["noDataRowOutlet", ""], ["footerRowOutlet", ""]],
        template: function CdkTable_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵprojectionDef"](_c0);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵprojection"](0);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵprojection"](1, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementContainer"](2, 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementContainer"](3, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementContainer"](4, 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementContainer"](5, 3);
          }
        },
        directives: [HeaderRowOutlet, DataRowOutlet, NoDataRowOutlet, FooterRowOutlet],
        styles: [".cdk-table-fixed-layout{table-layout:fixed}\n"],
        encapsulation: 2
      });

      CdkTable.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["IterableDiffers"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Attribute"],
            args: ['role']
          }]
        }, {
          type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_0__["Directionality"],
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_6__["DOCUMENT"]]
          }]
        }, {
          type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["Platform"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
            args: [_angular_cdk_collections__WEBPACK_IMPORTED_MODULE_2__["_VIEW_REPEATER_STRATEGY"]]
          }]
        }, {
          type: _CoalescedStyleScheduler,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
            args: [_COALESCED_STYLE_SCHEDULER]
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["SkipSelf"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
            args: [STICKY_POSITIONING_LISTENER]
          }]
        }, {
          type: _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_5__["ViewportRuler"],
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
          }]
        }];
      };

      CdkTable.propDecorators = {
        trackBy: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }],
        dataSource: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }],
        multiTemplateDataRows: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }],
        fixedLayout: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }],
        _rowOutlet: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
          args: [DataRowOutlet, {
            "static": true
          }]
        }],
        _headerRowOutlet: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
          args: [HeaderRowOutlet, {
            "static": true
          }]
        }],
        _footerRowOutlet: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
          args: [FooterRowOutlet, {
            "static": true
          }]
        }],
        _noDataRowOutlet: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
          args: [NoDataRowOutlet, {
            "static": true
          }]
        }],
        _contentColumnDefs: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChildren"],
          args: [CdkColumnDef, {
            descendants: true
          }]
        }],
        _contentRowDefs: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChildren"],
          args: [CdkRowDef, {
            descendants: true
          }]
        }],
        _contentHeaderRowDefs: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChildren"],
          args: [CdkHeaderRowDef, {
            descendants: true
          }]
        }],
        _contentFooterRowDefs: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChildren"],
          args: [CdkFooterRowDef, {
            descendants: true
          }]
        }],
        _noDataRow: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChild"],
          args: [CdkNoDataRow]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](CdkTable, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Component"],
          args: [{
            selector: 'cdk-table, table[cdk-table]',
            exportAs: 'cdkTable',
            template: CDK_TABLE_TEMPLATE,
            host: {
              'class': 'cdk-table',
              '[class.cdk-table-fixed-layout]': 'fixedLayout'
            },
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewEncapsulation"].None,
            // The "OnPush" status for the `MatTable` component is effectively a noop, so we are removing it.
            // The view for `MatTable` consists entirely of templates declared in other views. As they are
            // declared elsewhere, they are checked when their declaration points are checked.
            // tslint:disable-next-line:validate-decorators
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectionStrategy"].Default,
            providers: [{
              provide: CDK_TABLE,
              useExisting: CdkTable
            }, {
              provide: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_2__["_VIEW_REPEATER_STRATEGY"],
              useClass: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_2__["_DisposeViewRepeaterStrategy"]
            }, {
              provide: _COALESCED_STYLE_SCHEDULER,
              useClass: _CoalescedStyleScheduler
            }, // Prevent nested tables from seeing this table's StickyPositioningListener.
            {
              provide: STICKY_POSITIONING_LISTENER,
              useValue: null
            }],
            styles: [".cdk-table-fixed-layout{table-layout:fixed}\n"]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["IterableDiffers"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Attribute"],
              args: ['role']
            }]
          }, {
            type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_0__["Directionality"],
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_6__["DOCUMENT"]]
            }]
          }, {
            type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["Platform"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
              args: [_angular_cdk_collections__WEBPACK_IMPORTED_MODULE_2__["_VIEW_REPEATER_STRATEGY"]]
            }]
          }, {
            type: _CoalescedStyleScheduler,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
              args: [_COALESCED_STYLE_SCHEDULER]
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["SkipSelf"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
              args: [STICKY_POSITIONING_LISTENER]
            }]
          }, {
            type: _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_5__["ViewportRuler"],
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
            }]
          }];
        }, {
          trackBy: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }],
          dataSource: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }],
          multiTemplateDataRows: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }],
          fixedLayout: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }],
          _rowOutlet: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
            args: [DataRowOutlet, {
              "static": true
            }]
          }],
          _headerRowOutlet: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
            args: [HeaderRowOutlet, {
              "static": true
            }]
          }],
          _footerRowOutlet: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
            args: [FooterRowOutlet, {
              "static": true
            }]
          }],
          _noDataRowOutlet: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
            args: [NoDataRowOutlet, {
              "static": true
            }]
          }],
          _contentColumnDefs: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChildren"],
            args: [CdkColumnDef, {
              descendants: true
            }]
          }],
          _contentRowDefs: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChildren"],
            args: [CdkRowDef, {
              descendants: true
            }]
          }],
          _contentHeaderRowDefs: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChildren"],
            args: [CdkHeaderRowDef, {
              descendants: true
            }]
          }],
          _contentFooterRowDefs: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChildren"],
            args: [CdkFooterRowDef, {
              descendants: true
            }]
          }],
          _noDataRow: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChild"],
            args: [CdkNoDataRow]
          }]
        });
      })();
      /** Utility function that gets a merged list of the entries in an array and values of a Set. */


      function mergeArrayAndSet(array, set) {
        return array.concat(Array.from(set));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Column that simply shows text content for the header and row cells. Assumes that the table
       * is using the native table implementation (`<table>`).
       *
       * By default, the name of this column will be the header text and data property accessor.
       * The header text can be overridden with the `headerText` input. Cell values can be overridden with
       * the `dataAccessor` input. Change the text justification to the start or end using the `justify`
       * input.
       */


      var CdkTextColumn = /*#__PURE__*/function () {
        function CdkTextColumn( // `CdkTextColumn` is always requiring a table, but we just assert it manually
        // for better error reporting.
        // tslint:disable-next-line: lightweight-tokens
        _table, _options) {
          _classCallCheck2(this, CdkTextColumn);

          this._table = _table;
          this._options = _options;
          /** Alignment of the cell values. */

          this.justify = 'start';
          this._options = _options || {};
        }
        /** Column name that should be used to reference this column. */


        _createClass2(CdkTextColumn, [{
          key: "name",
          get: function get() {
            return this._name;
          },
          set: function set(name) {
            this._name = name; // With Ivy, inputs can be initialized before static query results are
            // available. In that case, we defer the synchronization until "ngOnInit" fires.

            this._syncColumnDefName();
          }
        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            this._syncColumnDefName();

            if (this.headerText === undefined) {
              this.headerText = this._createDefaultHeaderText();
            }

            if (!this.dataAccessor) {
              this.dataAccessor = this._options.defaultDataAccessor || function (data, name) {
                return data[name];
              };
            }

            if (this._table) {
              // Provide the cell and headerCell directly to the table with the static `ViewChild` query,
              // since the columnDef will not pick up its content by the time the table finishes checking
              // its content and initializing the rows.
              this.columnDef.cell = this.cell;
              this.columnDef.headerCell = this.headerCell;

              this._table.addColumnDef(this.columnDef);
            } else if (typeof ngDevMode === 'undefined' || ngDevMode) {
              throw getTableTextColumnMissingParentTableError();
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            if (this._table) {
              this._table.removeColumnDef(this.columnDef);
            }
          }
          /**
           * Creates a default header text. Use the options' header text transformation function if one
           * has been provided. Otherwise simply capitalize the column name.
           */

        }, {
          key: "_createDefaultHeaderText",
          value: function _createDefaultHeaderText() {
            var name = this.name;

            if (!name && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw getTableTextColumnMissingNameError();
            }

            if (this._options && this._options.defaultHeaderTextTransform) {
              return this._options.defaultHeaderTextTransform(name);
            }

            return name[0].toUpperCase() + name.slice(1);
          }
          /** Synchronizes the column definition name with the text column name. */

        }, {
          key: "_syncColumnDefName",
          value: function _syncColumnDefName() {
            if (this.columnDef) {
              this.columnDef.name = this.name;
            }
          }
        }]);

        return CdkTextColumn;
      }();

      CdkTextColumn.ɵfac = function CdkTextColumn_Factory(t) {
        return new (t || CdkTextColumn)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](CdkTable, 8), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](TEXT_COLUMN_OPTIONS, 8));
      };

      CdkTextColumn.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineComponent"]({
        type: CdkTextColumn,
        selectors: [["cdk-text-column"]],
        viewQuery: function CdkTextColumn_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵviewQuery"](CdkColumnDef, 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵviewQuery"](CdkCellDef, 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵviewQuery"](CdkHeaderCellDef, 3);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx.columnDef = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx.cell = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx.headerCell = _t.first);
          }
        },
        inputs: {
          justify: "justify",
          name: "name",
          headerText: "headerText",
          dataAccessor: "dataAccessor"
        },
        decls: 3,
        vars: 0,
        consts: [["cdkColumnDef", ""], ["cdk-header-cell", "", 3, "text-align", 4, "cdkHeaderCellDef"], ["cdk-cell", "", 3, "text-align", 4, "cdkCellDef"], ["cdk-header-cell", ""], ["cdk-cell", ""]],
        template: function CdkTextColumn_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementContainerStart"](0, 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](1, CdkTextColumn_th_1_Template, 2, 3, "th", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](2, CdkTextColumn_td_2_Template, 2, 3, "td", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementContainerEnd"]();
          }
        },
        directives: [CdkColumnDef, CdkHeaderCellDef, CdkCellDef, CdkHeaderCell, CdkCell],
        encapsulation: 2
      });

      CdkTextColumn.ctorParameters = function () {
        return [{
          type: CdkTable,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
            args: [TEXT_COLUMN_OPTIONS]
          }]
        }];
      };

      CdkTextColumn.propDecorators = {
        name: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }],
        headerText: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }],
        dataAccessor: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }],
        justify: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }],
        columnDef: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
          args: [CdkColumnDef, {
            "static": true
          }]
        }],
        cell: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
          args: [CdkCellDef, {
            "static": true
          }]
        }],
        headerCell: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
          args: [CdkHeaderCellDef, {
            "static": true
          }]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](CdkTextColumn, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Component"],
          args: [{
            selector: 'cdk-text-column',
            template: "\n    <ng-container cdkColumnDef>\n      <th cdk-header-cell *cdkHeaderCellDef [style.text-align]=\"justify\">\n        {{headerText}}\n      </th>\n      <td cdk-cell *cdkCellDef=\"let data\" [style.text-align]=\"justify\">\n        {{dataAccessor(data, name)}}\n      </td>\n    </ng-container>\n  ",
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewEncapsulation"].None,
            // Change detection is intentionally not set to OnPush. This component's template will be provided
            // to the table to be inserted into its view. This is problematic when change detection runs since
            // the bindings in this template will be evaluated _after_ the table's view is evaluated, which
            // mean's the template in the table's view will not have the updated value (and in fact will cause
            // an ExpressionChangedAfterItHasBeenCheckedError).
            // tslint:disable-next-line:validate-decorators
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectionStrategy"].Default
          }]
        }], function () {
          return [{
            type: CdkTable,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
              args: [TEXT_COLUMN_OPTIONS]
            }]
          }];
        }, {
          justify: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }],
          name: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }],
          headerText: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }],
          dataAccessor: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }],
          columnDef: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
            args: [CdkColumnDef, {
              "static": true
            }]
          }],
          cell: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
            args: [CdkCellDef, {
              "static": true
            }]
          }],
          headerCell: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChild"],
            args: [CdkHeaderCellDef, {
              "static": true
            }]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var EXPORTED_DECLARATIONS = [CdkTable, CdkRowDef, CdkCellDef, CdkCellOutlet, CdkHeaderCellDef, CdkFooterCellDef, CdkColumnDef, CdkCell, CdkRow, CdkHeaderCell, CdkFooterCell, CdkHeaderRow, CdkHeaderRowDef, CdkFooterRow, CdkFooterRowDef, DataRowOutlet, HeaderRowOutlet, FooterRowOutlet, CdkTextColumn, CdkNoDataRow, NoDataRowOutlet];

      var CdkTableModule = function CdkTableModule() {
        _classCallCheck2(this, CdkTableModule);
      };

      CdkTableModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineNgModule"]({
        type: CdkTableModule
      });
      CdkTableModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineInjector"]({
        factory: function CdkTableModule_Factory(t) {
          return new (t || CdkTableModule)();
        },
        imports: [[_angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_5__["ScrollingModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵsetNgModuleScope"](CdkTableModule, {
          declarations: function declarations() {
            return [CdkTable, CdkRowDef, CdkCellDef, CdkCellOutlet, CdkHeaderCellDef, CdkFooterCellDef, CdkColumnDef, CdkCell, CdkRow, CdkHeaderCell, CdkFooterCell, CdkHeaderRow, CdkHeaderRowDef, CdkFooterRow, CdkFooterRowDef, DataRowOutlet, HeaderRowOutlet, FooterRowOutlet, CdkTextColumn, CdkNoDataRow, NoDataRowOutlet];
          },
          imports: function imports() {
            return [_angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_5__["ScrollingModule"]];
          },
          exports: function exports() {
            return [CdkTable, CdkRowDef, CdkCellDef, CdkCellOutlet, CdkHeaderCellDef, CdkFooterCellDef, CdkColumnDef, CdkCell, CdkRow, CdkHeaderCell, CdkFooterCell, CdkHeaderRow, CdkHeaderRowDef, CdkFooterRow, CdkFooterRowDef, DataRowOutlet, HeaderRowOutlet, FooterRowOutlet, CdkTextColumn, CdkNoDataRow, NoDataRowOutlet];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](CdkTableModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["NgModule"],
          args: [{
            exports: EXPORTED_DECLARATIONS,
            declarations: EXPORTED_DECLARATIONS,
            imports: [_angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_5__["ScrollingModule"]]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=table.js.map

      /***/

    },

    /***/
    "fB2i":
    /*!************************************************************************************************!*\
      !*** ./node_modules/@tinymce/tinymce-angular/__ivy_ngcc__/fesm2015/tinymce-tinymce-angular.js ***!
      \************************************************************************************************/

    /*! exports provided: EditorComponent, EditorModule, TINYMCE_SCRIPT_SRC, ɵa */

    /***/
    function fB2i(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "EditorComponent", function () {
        return EditorComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "EditorModule", function () {
        return EditorModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TINYMCE_SCRIPT_SRC", function () {
        return TINYMCE_SCRIPT_SRC;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵa", function () {
        return Events;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_forms__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/forms */
      "3Pt+");
      /**
       * Copyright (c) 2017-present, Ephox, Inc.
       *
       * This source code is licensed under the Apache 2 license found in the
       * LICENSE file in the root directory of this source tree.
       *
       */


      function EditorComponent_ng_template_0_Template(rf, ctx) {}

      var getTinymce = function getTinymce() {
        var w = typeof window !== 'undefined' ? window : undefined;
        return w && w.tinymce ? w.tinymce : null;
      };

      var ɵ0 = getTinymce;

      var Events = function Events() {
        _classCallCheck2(this, Events);

        this.onBeforePaste = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onBlur = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onClick = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onContextMenu = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onCopy = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onCut = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onDblclick = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onDrag = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onDragDrop = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onDragEnd = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onDragGesture = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onDragOver = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onDrop = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onFocus = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onFocusIn = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onFocusOut = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onKeyDown = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onKeyPress = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onKeyUp = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onMouseDown = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onMouseEnter = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onMouseLeave = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onMouseMove = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onMouseOut = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onMouseOver = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onMouseUp = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onPaste = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onSelectionChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onActivate = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onAddUndo = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onBeforeAddUndo = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onBeforeExecCommand = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onBeforeGetContent = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onBeforeRenderUI = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onBeforeSetContent = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onClearUndos = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onDeactivate = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onDirty = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onExecCommand = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onGetContent = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onHide = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onInit = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onLoadContent = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onNodeChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onPostProcess = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onPostRender = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onPreInit = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onPreProcess = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onProgressState = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onRedo = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onRemove = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onReset = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onSaveContent = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onSetAttrib = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onObjectResizeStart = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onObjectResized = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onObjectSelected = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onSetContent = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onShow = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onSubmit = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onUndo = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        this.onVisualAid = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
      };

      Events.ɵfac = function Events_Factory(t) {
        return new (t || Events)();
      };

      Events.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: Events,
        outputs: {
          onBeforePaste: "onBeforePaste",
          onBlur: "onBlur",
          onClick: "onClick",
          onContextMenu: "onContextMenu",
          onCopy: "onCopy",
          onCut: "onCut",
          onDblclick: "onDblclick",
          onDrag: "onDrag",
          onDragDrop: "onDragDrop",
          onDragEnd: "onDragEnd",
          onDragGesture: "onDragGesture",
          onDragOver: "onDragOver",
          onDrop: "onDrop",
          onFocus: "onFocus",
          onFocusIn: "onFocusIn",
          onFocusOut: "onFocusOut",
          onKeyDown: "onKeyDown",
          onKeyPress: "onKeyPress",
          onKeyUp: "onKeyUp",
          onMouseDown: "onMouseDown",
          onMouseEnter: "onMouseEnter",
          onMouseLeave: "onMouseLeave",
          onMouseMove: "onMouseMove",
          onMouseOut: "onMouseOut",
          onMouseOver: "onMouseOver",
          onMouseUp: "onMouseUp",
          onPaste: "onPaste",
          onSelectionChange: "onSelectionChange",
          onActivate: "onActivate",
          onAddUndo: "onAddUndo",
          onBeforeAddUndo: "onBeforeAddUndo",
          onBeforeExecCommand: "onBeforeExecCommand",
          onBeforeGetContent: "onBeforeGetContent",
          onBeforeRenderUI: "onBeforeRenderUI",
          onBeforeSetContent: "onBeforeSetContent",
          onChange: "onChange",
          onClearUndos: "onClearUndos",
          onDeactivate: "onDeactivate",
          onDirty: "onDirty",
          onExecCommand: "onExecCommand",
          onGetContent: "onGetContent",
          onHide: "onHide",
          onInit: "onInit",
          onLoadContent: "onLoadContent",
          onNodeChange: "onNodeChange",
          onPostProcess: "onPostProcess",
          onPostRender: "onPostRender",
          onPreInit: "onPreInit",
          onPreProcess: "onPreProcess",
          onProgressState: "onProgressState",
          onRedo: "onRedo",
          onRemove: "onRemove",
          onReset: "onReset",
          onSaveContent: "onSaveContent",
          onSetAttrib: "onSetAttrib",
          onObjectResizeStart: "onObjectResizeStart",
          onObjectResized: "onObjectResized",
          onObjectSelected: "onObjectSelected",
          onSetContent: "onSetContent",
          onShow: "onShow",
          onSubmit: "onSubmit",
          onUndo: "onUndo",
          onVisualAid: "onVisualAid"
        }
      });
      Events.propDecorators = {
        onBeforePaste: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onBlur: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onClick: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onContextMenu: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onCopy: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onCut: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onDblclick: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onDrag: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onDragDrop: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onDragEnd: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onDragGesture: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onDragOver: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onDrop: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onFocus: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onFocusIn: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onFocusOut: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onKeyDown: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onKeyPress: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onKeyUp: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onMouseDown: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onMouseEnter: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onMouseLeave: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onMouseMove: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onMouseOut: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onMouseOver: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onMouseUp: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onPaste: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onSelectionChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onActivate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onAddUndo: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onBeforeAddUndo: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onBeforeExecCommand: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onBeforeGetContent: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onBeforeRenderUI: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onBeforeSetContent: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onClearUndos: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onDeactivate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onDirty: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onExecCommand: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onGetContent: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onHide: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onInit: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onLoadContent: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onNodeChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onPostProcess: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onPostRender: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onPreInit: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onPreProcess: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onProgressState: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onRedo: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onRemove: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onReset: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onSaveContent: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onSetAttrib: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onObjectResizeStart: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onObjectResized: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onObjectSelected: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onSetContent: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onShow: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onSubmit: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onUndo: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onVisualAid: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };
      var validEvents = ['onActivate', 'onAddUndo', 'onBeforeAddUndo', 'onBeforeExecCommand', 'onBeforeGetContent', 'onBeforeRenderUI', 'onBeforeSetContent', 'onBeforePaste', 'onBlur', 'onChange', 'onClearUndos', 'onClick', 'onContextMenu', 'onCopy', 'onCut', 'onDblclick', 'onDeactivate', 'onDirty', 'onDrag', 'onDragDrop', 'onDragEnd', 'onDragGesture', 'onDragOver', 'onDrop', 'onExecCommand', 'onFocus', 'onFocusIn', 'onFocusOut', 'onGetContent', 'onHide', 'onInit', 'onKeyDown', 'onKeyPress', 'onKeyUp', 'onLoadContent', 'onMouseDown', 'onMouseEnter', 'onMouseLeave', 'onMouseMove', 'onMouseOut', 'onMouseOver', 'onMouseUp', 'onNodeChange', 'onObjectResizeStart', 'onObjectResized', 'onObjectSelected', 'onPaste', 'onPostProcess', 'onPostRender', 'onPreProcess', 'onProgressState', 'onRedo', 'onRemove', 'onReset', 'onSaveContent', 'onSelectionChange', 'onSetAttrib', 'onSetContent', 'onShow', 'onSubmit', 'onUndo', 'onVisualAid'];
      /**
       * Copyright (c) 2017-present, Ephox, Inc.
       *
       * This source code is licensed under the Apache 2 license found in the
       * LICENSE file in the root directory of this source tree.
       *
       */

      var bindHandlers = function bindHandlers(ctx, editor) {
        validEvents.forEach(function (eventName) {
          var eventEmitter = ctx[eventName];
          editor.on(eventName.substring(2), function (event) {
            return ctx.ngZone.run(function () {
              return eventEmitter.emit({
                event: event,
                editor: editor
              });
            });
          });
        });
      };

      var ɵ0$1 = bindHandlers;
      var unique = 0;

      var uuid = function uuid(prefix) {
        var date = new Date();
        var time = date.getTime();
        var random = Math.floor(Math.random() * 1000000000);
        unique++;
        return prefix + '_' + random + unique + String(time);
      };

      var ɵ1 = uuid;

      var isTextarea = function isTextarea(element) {
        return typeof element !== 'undefined' && element.tagName.toLowerCase() === 'textarea';
      };

      var ɵ2 = isTextarea;

      var normalizePluginArray = function normalizePluginArray(plugins) {
        if (typeof plugins === 'undefined' || plugins === '') {
          return [];
        }

        return Array.isArray(plugins) ? plugins : plugins.split(' ');
      };

      var ɵ3 = normalizePluginArray;

      var mergePlugins = function mergePlugins(initPlugins, inputPlugins) {
        return normalizePluginArray(initPlugins).concat(normalizePluginArray(inputPlugins));
      };

      var ɵ4 = mergePlugins; // tslint:disable-next-line:no-empty

      var noop = function noop() {};

      var ɵ5 = noop;

      var isNullOrUndefined = function isNullOrUndefined(value) {
        return value === null || value === undefined;
      };

      var ɵ6 = isNullOrUndefined;
      /**
       * Copyright (c) 2017-present, Ephox, Inc.
       *
       * This source code is licensed under the Apache 2 license found in the
       * LICENSE file in the root directory of this source tree.
       *
       */

      var createState = function createState() {
        return {
          listeners: [],
          scriptId: uuid('tiny-script'),
          scriptLoaded: false
        };
      };

      var ɵ0$2 = createState;

      var CreateScriptLoader = function CreateScriptLoader() {
        var state = createState();

        var injectScriptTag = function injectScriptTag(scriptId, doc, url, callback) {
          var scriptTag = doc.createElement('script');
          scriptTag.referrerPolicy = 'origin';
          scriptTag.type = 'application/javascript';
          scriptTag.id = scriptId;
          scriptTag.src = url;

          var handler = function handler() {
            scriptTag.removeEventListener('load', handler);
            callback();
          };

          scriptTag.addEventListener('load', handler);

          if (doc.head) {
            doc.head.appendChild(scriptTag);
          }
        };

        var load = function load(doc, url, callback) {
          if (state.scriptLoaded) {
            callback();
          } else {
            state.listeners.push(callback);

            if (!doc.getElementById(state.scriptId)) {
              injectScriptTag(state.scriptId, doc, url, function () {
                state.listeners.forEach(function (fn) {
                  return fn();
                });
                state.scriptLoaded = true;
              });
            }
          }
        }; // Only to be used by tests.


        var reinitialize = function reinitialize() {
          state = createState();
        };

        return {
          load: load,
          reinitialize: reinitialize
        };
      };

      var ɵ1$1 = CreateScriptLoader;
      var ScriptLoader = CreateScriptLoader();
      var TINYMCE_SCRIPT_SRC = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('TINYMCE_SCRIPT_SRC');
      var EDITOR_COMPONENT_VALUE_ACCESSOR = {
        provide: _angular_forms__WEBPACK_IMPORTED_MODULE_2__["NG_VALUE_ACCESSOR"],
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return EditorComponent;
        }),
        multi: true
      };

      var EditorComponent = /*#__PURE__*/function (_Events) {
        _inherits2(EditorComponent, _Events);

        var _super301 = _createSuper(EditorComponent);

        function EditorComponent(elementRef, ngZone, platformId, tinymceScriptSrc) {
          var _this708;

          _classCallCheck2(this, EditorComponent);

          _this708 = _super301.call(this);
          _this708.platformId = platformId;
          _this708.tinymceScriptSrc = tinymceScriptSrc;
          _this708.cloudChannel = '5';
          _this708.apiKey = 'no-api-key';
          _this708.id = '';
          _this708.modelEvents = 'change keyup undo redo';
          _this708.onTouchedCallback = noop;
          _this708.onChangeCallback = noop;
          _this708._elementRef = elementRef;
          _this708.ngZone = ngZone;
          _this708.initialise = _this708.initialise.bind(_assertThisInitialized2(_this708));
          return _this708;
        }

        _createClass2(EditorComponent, [{
          key: "disabled",
          get: function get() {
            return this._disabled;
          },
          set: function set(val) {
            this._disabled = val;

            if (this._editor && this._editor.initialized) {
              this._editor.setMode(val ? 'readonly' : 'design');
            }
          }
        }, {
          key: "editor",
          get: function get() {
            return this._editor;
          }
        }, {
          key: "writeValue",
          value: function writeValue(value) {
            if (this._editor && this._editor.initialized) {
              this._editor.setContent(isNullOrUndefined(value) ? '' : value);
            } else {
              this.initialValue = value === null ? undefined : value;
            }
          }
        }, {
          key: "registerOnChange",
          value: function registerOnChange(fn) {
            this.onChangeCallback = fn;
          }
        }, {
          key: "registerOnTouched",
          value: function registerOnTouched(fn) {
            this.onTouchedCallback = fn;
          }
        }, {
          key: "setDisabledState",
          value: function setDisabledState(isDisabled) {
            if (this._editor) {
              this._editor.setMode(isDisabled ? 'readonly' : 'design');
            } else if (isDisabled) {
              this.init = Object.assign(Object.assign({}, this.init), {
                readonly: true
              });
            }
          }
        }, {
          key: "ngAfterViewInit",
          value: function ngAfterViewInit() {
            if (Object(_angular_common__WEBPACK_IMPORTED_MODULE_1__["isPlatformBrowser"])(this.platformId)) {
              this.id = this.id || uuid('tiny-angular');
              this.inline = typeof this.inline !== 'undefined' ? typeof this.inline === 'boolean' ? this.inline : true : this.init && this.init.inline;
              this.createElement();

              if (getTinymce() !== null) {
                this.initialise();
              } else if (this._element && this._element.ownerDocument) {
                ScriptLoader.load(this._element.ownerDocument, this.getScriptSrc(), this.initialise);
              }
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            if (getTinymce() !== null) {
              getTinymce().remove(this._editor);
            }
          }
        }, {
          key: "createElement",
          value: function createElement() {
            var tagName = typeof this.tagName === 'string' ? this.tagName : 'div';
            this._element = document.createElement(this.inline ? tagName : 'textarea');

            if (this._element) {
              this._element.id = this.id;

              if (isTextarea(this._element)) {
                this._element.style.visibility = 'hidden';
              }

              this._elementRef.nativeElement.appendChild(this._element);
            }
          }
        }, {
          key: "initialise",
          value: function initialise() {
            var _this709 = this;

            var finalInit = Object.assign(Object.assign({}, this.init), {
              target: this._element,
              inline: this.inline,
              readonly: this.disabled,
              plugins: mergePlugins(this.init && this.init.plugins, this.plugins),
              toolbar: this.toolbar || this.init && this.init.toolbar,
              setup: function setup(editor) {
                _this709._editor = editor;
                editor.on('init', function (e) {
                  _this709.initEditor(editor);
                });
                bindHandlers(_this709, editor);

                if (_this709.init && typeof _this709.init.setup === 'function') {
                  _this709.init.setup(editor);
                }
              }
            });

            if (isTextarea(this._element)) {
              this._element.style.visibility = '';
            }

            this.ngZone.runOutsideAngular(function () {
              getTinymce().init(finalInit);
            });
          }
        }, {
          key: "getScriptSrc",
          value: function getScriptSrc() {
            return isNullOrUndefined(this.tinymceScriptSrc) ? "https://cdn.tiny.cloud/1/".concat(this.apiKey, "/tinymce/").concat(this.cloudChannel, "/tinymce.min.js") : this.tinymceScriptSrc;
          }
        }, {
          key: "initEditor",
          value: function initEditor(editor) {
            var _this710 = this;

            editor.on('blur', function () {
              return _this710.ngZone.run(function () {
                return _this710.onTouchedCallback();
              });
            });
            editor.on(this.modelEvents, function () {
              _this710.ngZone.run(function () {
                return _this710.onChangeCallback(editor.getContent({
                  format: _this710.outputFormat
                }));
              });
            });

            if (typeof this.initialValue === 'string') {
              this.ngZone.run(function () {
                editor.setContent(_this710.initialValue);

                _this710.onChangeCallback(editor.getContent({
                  format: _this710.outputFormat
                }));
              });
            }
          }
        }]);

        return EditorComponent;
      }(Events);

      EditorComponent.ɵfac = function EditorComponent_Factory(t) {
        return new (t || EditorComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](TINYMCE_SCRIPT_SRC, 8));
      };

      EditorComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: EditorComponent,
        selectors: [["editor"]],
        inputs: {
          cloudChannel: "cloudChannel",
          apiKey: "apiKey",
          id: "id",
          modelEvents: "modelEvents",
          disabled: "disabled",
          initialValue: "initialValue",
          init: "init",
          inline: "inline",
          outputFormat: "outputFormat",
          tagName: "tagName",
          plugins: "plugins",
          toolbar: "toolbar"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([EDITOR_COMPONENT_VALUE_ACCESSOR]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]],
        decls: 1,
        vars: 0,
        template: function EditorComponent_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, EditorComponent_ng_template_0_Template, 0, 0, "ng-template");
          }
        },
        styles: ["[_nghost-%COMP%] { display: block; }"]
      });

      EditorComponent.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }, {
          type: Object,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]]
          }]
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [TINYMCE_SCRIPT_SRC]
          }]
        }];
      };

      EditorComponent.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }, {
          type: Object,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]]
          }]
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [TINYMCE_SCRIPT_SRC]
          }]
        }];
      };

      EditorComponent.propDecorators = {
        disabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        cloudChannel: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        apiKey: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        init: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        id: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        initialValue: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        outputFormat: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        inline: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        tagName: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        plugins: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        toolbar: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        modelEvents: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](EditorComponent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'editor',
            template: '<ng-template></ng-template>',
            providers: [EDITOR_COMPONENT_VALUE_ACCESSOR],
            styles: [':host { display: block; }']
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }, {
            type: Object,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]]
            }]
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [TINYMCE_SCRIPT_SRC]
            }]
          }];
        }, {
          cloudChannel: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          apiKey: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          id: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          modelEvents: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          disabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          initialValue: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          init: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          inline: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          outputFormat: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          tagName: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          plugins: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          toolbar: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var EditorModule = function EditorModule() {
        _classCallCheck2(this, EditorModule);
      };

      EditorModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: EditorModule
      });
      EditorModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function EditorModule_Factory(t) {
          return new (t || EditorModule)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_2__["FormsModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](EditorModule, {
          declarations: function declarations() {
            return [EditorComponent];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_2__["FormsModule"]];
          },
          exports: function exports() {
            return [EditorComponent];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](EditorModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_forms__WEBPACK_IMPORTED_MODULE_2__["FormsModule"]],
            declarations: [EditorComponent],
            exports: [EditorComponent]
          }]
        }], null, null);
      })();
      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=tinymce-tinymce-angular.js.map

      /***/

    },

    /***/
    "fFD9":
    /*!************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/combineLatest.js ***!
      \************************************************************************/

    /*! exports provided: combineLatest */

    /***/
    function fFD9(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "combineLatest", function () {
        return combineLatest;
      });
      /* harmony import */


      var _util_isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../util/isArray */
      "DH7j");
      /* harmony import */


      var _observable_combineLatest__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../observable/combineLatest */
      "itXk");
      /* harmony import */


      var _observable_from__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../observable/from */
      "Cfvw");

      var none = {};

      function combineLatest() {
        for (var _len41 = arguments.length, observables = new Array(_len41), _key43 = 0; _key43 < _len41; _key43++) {
          observables[_key43] = arguments[_key43];
        }

        var project = null;

        if (typeof observables[observables.length - 1] === 'function') {
          project = observables.pop();
        }

        if (observables.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_0__["isArray"])(observables[0])) {
          observables = observables[0].slice();
        }

        return function (source) {
          return source.lift.call(Object(_observable_from__WEBPACK_IMPORTED_MODULE_2__["from"])([source].concat(_toConsumableArray(observables))), new _observable_combineLatest__WEBPACK_IMPORTED_MODULE_1__["CombineLatestOperator"](project));
        };
      } //# sourceMappingURL=combineLatest.js.map

      /***/

    },

    /***/
    "fXoL":
    /*!******************************************************************!*\
      !*** ./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js ***!
      \******************************************************************/

    /*! exports provided: ANALYZE_FOR_ENTRY_COMPONENTS, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Compiler, CompilerFactory, Component, ComponentFactory, ComponentFactoryResolver, ComponentRef, ContentChild, ContentChildren, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, DefaultIterableDiffer, Directive, ElementRef, EmbeddedViewRef, ErrorHandler, EventEmitter, Host, HostBinding, HostListener, INJECTOR, Inject, InjectFlags, Injectable, InjectionToken, Injector, Input, IterableDiffers, KeyValueDiffers, LOCALE_ID, MissingTranslationStrategy, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModule, NgModuleFactory, NgModuleFactoryLoader, NgModuleRef, NgProbeToken, NgZone, Optional, Output, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, Pipe, PlatformRef, Query, QueryList, ReflectiveInjector, ReflectiveKey, Renderer2, RendererFactory2, RendererStyleFlags2, ResolvedReflectiveFactory, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, SystemJsNgModuleLoader, SystemJsNgModuleLoaderConfig, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation, ViewRef, WrappedValue, asNativeElements, assertPlatform, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getPlatform, inject, isDevMode, platformCore, resolveForwardRef, setTestabilityGetter, ɵ0, ɵALLOW_MULTIPLE_PLATFORMS, ɵAPP_ID_RANDOM_PROVIDER, ɵCREATE_ATTRIBUTE_DECORATOR__POST_R3__, ɵChangeDetectorStatus, ɵCodegenComponentFactoryResolver, ɵCompiler_compileModuleAndAllComponentsAsync__POST_R3__, ɵCompiler_compileModuleAndAllComponentsSync__POST_R3__, ɵCompiler_compileModuleAsync__POST_R3__, ɵCompiler_compileModuleSync__POST_R3__, ɵComponentFactory, ɵConsole, ɵDEFAULT_LOCALE_ID, ɵEMPTY_ARRAY, ɵEMPTY_MAP, ɵINJECTOR_IMPL__POST_R3__, ɵINJECTOR_SCOPE, ɵLifecycleHooksFeature, ɵLocaleDataIndex, ɵNG_COMP_DEF, ɵNG_DIR_DEF, ɵNG_ELEMENT_ID, ɵNG_INJ_DEF, ɵNG_MOD_DEF, ɵNG_PIPE_DEF, ɵNG_PROV_DEF, ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, ɵNO_CHANGE, ɵNgModuleFactory, ɵNoopNgZone, ɵReflectionCapabilities, ɵRender3ComponentFactory, ɵRender3ComponentRef, ɵRender3NgModuleRef, ɵSWITCH_CHANGE_DETECTOR_REF_FACTORY__POST_R3__, ɵSWITCH_COMPILE_COMPONENT__POST_R3__, ɵSWITCH_COMPILE_DIRECTIVE__POST_R3__, ɵSWITCH_COMPILE_INJECTABLE__POST_R3__, ɵSWITCH_COMPILE_NGMODULE__POST_R3__, ɵSWITCH_COMPILE_PIPE__POST_R3__, ɵSWITCH_ELEMENT_REF_FACTORY__POST_R3__, ɵSWITCH_IVY_ENABLED__POST_R3__, ɵSWITCH_RENDERER2_FACTORY__POST_R3__, ɵSWITCH_TEMPLATE_REF_FACTORY__POST_R3__, ɵSWITCH_VIEW_CONTAINER_REF_FACTORY__POST_R3__, ɵ_sanitizeHtml, ɵ_sanitizeUrl, ɵallowSanitizationBypassAndThrow, ɵand, ɵangular_packages_core_core_a, ɵangular_packages_core_core_b, ɵangular_packages_core_core_ba, ɵangular_packages_core_core_bb, ɵangular_packages_core_core_bc, ɵangular_packages_core_core_bd, ɵangular_packages_core_core_be, ɵangular_packages_core_core_bf, ɵangular_packages_core_core_bg, ɵangular_packages_core_core_bh, ɵangular_packages_core_core_bi, ɵangular_packages_core_core_bj, ɵangular_packages_core_core_bl, ɵangular_packages_core_core_bm, ɵangular_packages_core_core_bn, ɵangular_packages_core_core_bo, ɵangular_packages_core_core_bp, ɵangular_packages_core_core_bq, ɵangular_packages_core_core_br, ɵangular_packages_core_core_bs, ɵangular_packages_core_core_bv, ɵangular_packages_core_core_bw, ɵangular_packages_core_core_bx, ɵangular_packages_core_core_bz, ɵangular_packages_core_core_c, ɵangular_packages_core_core_cb, ɵangular_packages_core_core_cc, ɵangular_packages_core_core_d, ɵangular_packages_core_core_e, ɵangular_packages_core_core_f, ɵangular_packages_core_core_g, ɵangular_packages_core_core_h, ɵangular_packages_core_core_i, ɵangular_packages_core_core_j, ɵangular_packages_core_core_k, ɵangular_packages_core_core_l, ɵangular_packages_core_core_m, ɵangular_packages_core_core_n, ɵangular_packages_core_core_o, ɵangular_packages_core_core_p, ɵangular_packages_core_core_q, ɵangular_packages_core_core_r, ɵangular_packages_core_core_s, ɵangular_packages_core_core_t, ɵangular_packages_core_core_u, ɵangular_packages_core_core_v, ɵangular_packages_core_core_w, ɵangular_packages_core_core_x, ɵangular_packages_core_core_y, ɵangular_packages_core_core_z, ɵbypassSanitizationTrustHtml, ɵbypassSanitizationTrustResourceUrl, ɵbypassSanitizationTrustScript, ɵbypassSanitizationTrustStyle, ɵbypassSanitizationTrustUrl, ɵccf, ɵclearOverrides, ɵclearResolutionOfComponentResourcesQueue, ɵcmf, ɵcompileComponent, ɵcompileDirective, ɵcompileNgModule, ɵcompileNgModuleDefs, ɵcompileNgModuleFactory__POST_R3__, ɵcompilePipe, ɵcreateInjector, ɵcrt, ɵdefaultIterableDiffers, ɵdefaultKeyValueDiffers, ɵdetectChanges, ɵdevModeEqual, ɵdid, ɵeld, ɵfindLocaleData, ɵflushModuleScopingQueueAsMuchAsPossible, ɵgetComponentViewDefinitionFactory, ɵgetDebugNodeR2, ɵgetDebugNode__POST_R3__, ɵgetDirectives, ɵgetHostElement, ɵgetInjectableDef, ɵgetLContext, ɵgetLocaleCurrencyCode, ɵgetLocalePluralCase, ɵgetModuleFactory__POST_R3__, ɵgetSanitizationBypassType, ɵglobal, ɵinitServicesIfNeeded, ɵinlineInterpolate, ɵinterpolate, ɵisBoundToModule__POST_R3__, ɵisDefaultChangeDetectionStrategy, ɵisListLikeIterable, ɵisObservable, ɵisPromise, ɵisSubscribable, ɵivyEnabled, ɵmakeDecorator, ɵmarkDirty, ɵmod, ɵmpd, ɵncd, ɵnoSideEffects, ɵnov, ɵoverrideComponentView, ɵoverrideProvider, ɵpad, ɵpatchComponentDefWithScope, ɵpid, ɵpod, ɵppd, ɵprd, ɵpublishDefaultGlobalUtils, ɵpublishGlobalUtil, ɵqud, ɵregisterLocaleData, ɵregisterModuleFactory, ɵregisterNgModuleType, ɵrenderComponent, ɵresetCompiledComponents, ɵresetJitOptions, ɵresolveComponentResources, ɵsetClassMetadata, ɵsetCurrentInjector, ɵsetDocument, ɵsetLocaleId, ɵstore, ɵstringify, ɵted, ɵtransitiveScopesFor, ɵunregisterLocaleData, ɵunv, ɵunwrapSafeValue, ɵvid, ɵwhenRendered, ɵɵCopyDefinitionFeature, ɵɵInheritDefinitionFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵadvance, ɵɵattribute, ɵɵattributeInterpolate1, ɵɵattributeInterpolate2, ɵɵattributeInterpolate3, ɵɵattributeInterpolate4, ɵɵattributeInterpolate5, ɵɵattributeInterpolate6, ɵɵattributeInterpolate7, ɵɵattributeInterpolate8, ɵɵattributeInterpolateV, ɵɵclassMap, ɵɵclassMapInterpolate1, ɵɵclassMapInterpolate2, ɵɵclassMapInterpolate3, ɵɵclassMapInterpolate4, ɵɵclassMapInterpolate5, ɵɵclassMapInterpolate6, ɵɵclassMapInterpolate7, ɵɵclassMapInterpolate8, ɵɵclassMapInterpolateV, ɵɵclassProp, ɵɵcontentQuery, ɵɵdefineComponent, ɵɵdefineDirective, ɵɵdefineInjectable, ɵɵdefineInjector, ɵɵdefineNgModule, ɵɵdefinePipe, ɵɵdirectiveInject, ɵɵdisableBindings, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵenableBindings, ɵɵgetCurrentView, ɵɵgetFactoryOf, ɵɵgetInheritedFactory, ɵɵhostProperty, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵinject, ɵɵinjectAttribute, ɵɵinjectPipeChangeDetectorRef, ɵɵinvalidFactory, ɵɵinvalidFactoryDep, ɵɵlistener, ɵɵloadQuery, ɵɵnamespaceHTML, ɵɵnamespaceMathML, ɵɵnamespaceSVG, ɵɵnextContext, ɵɵngDeclareComponent, ɵɵngDeclareDirective, ɵɵngDeclarePipe, ɵɵpipe, ɵɵpipeBind1, ɵɵpipeBind2, ɵɵpipeBind3, ɵɵpipeBind4, ɵɵpipeBindV, ɵɵprojection, ɵɵprojectionDef, ɵɵproperty, ɵɵpropertyInterpolate, ɵɵpropertyInterpolate1, ɵɵpropertyInterpolate2, ɵɵpropertyInterpolate3, ɵɵpropertyInterpolate4, ɵɵpropertyInterpolate5, ɵɵpropertyInterpolate6, ɵɵpropertyInterpolate7, ɵɵpropertyInterpolate8, ɵɵpropertyInterpolateV, ɵɵpureFunction0, ɵɵpureFunction1, ɵɵpureFunction2, ɵɵpureFunction3, ɵɵpureFunction4, ɵɵpureFunction5, ɵɵpureFunction6, ɵɵpureFunction7, ɵɵpureFunction8, ɵɵpureFunctionV, ɵɵqueryRefresh, ɵɵreference, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵrestoreView, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵstyleMap, ɵɵstyleMapInterpolate1, ɵɵstyleMapInterpolate2, ɵɵstyleMapInterpolate3, ɵɵstyleMapInterpolate4, ɵɵstyleMapInterpolate5, ɵɵstyleMapInterpolate6, ɵɵstyleMapInterpolate7, ɵɵstyleMapInterpolate8, ɵɵstyleMapInterpolateV, ɵɵstyleProp, ɵɵstylePropInterpolate1, ɵɵstylePropInterpolate2, ɵɵstylePropInterpolate3, ɵɵstylePropInterpolate4, ɵɵstylePropInterpolate5, ɵɵstylePropInterpolate6, ɵɵstylePropInterpolate7, ɵɵstylePropInterpolate8, ɵɵstylePropInterpolateV, ɵɵsyntheticHostListener, ɵɵsyntheticHostProperty, ɵɵtemplate, ɵɵtemplateRefExtractor, ɵɵtext, ɵɵtextInterpolate, ɵɵtextInterpolate1, ɵɵtextInterpolate2, ɵɵtextInterpolate3, ɵɵtextInterpolate4, ɵɵtextInterpolate5, ɵɵtextInterpolate6, ɵɵtextInterpolate7, ɵɵtextInterpolate8, ɵɵtextInterpolateV, ɵɵtrustConstantHtml, ɵɵtrustConstantResourceUrl, ɵɵviewQuery */

    /***/
    function fXoL(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ANALYZE_FOR_ENTRY_COMPONENTS", function () {
        return ANALYZE_FOR_ENTRY_COMPONENTS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "APP_BOOTSTRAP_LISTENER", function () {
        return APP_BOOTSTRAP_LISTENER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "APP_ID", function () {
        return APP_ID;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "APP_INITIALIZER", function () {
        return APP_INITIALIZER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ApplicationInitStatus", function () {
        return ApplicationInitStatus;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ApplicationModule", function () {
        return ApplicationModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ApplicationRef", function () {
        return ApplicationRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Attribute", function () {
        return Attribute;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "COMPILER_OPTIONS", function () {
        return COMPILER_OPTIONS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CUSTOM_ELEMENTS_SCHEMA", function () {
        return CUSTOM_ELEMENTS_SCHEMA;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ChangeDetectionStrategy", function () {
        return ChangeDetectionStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ChangeDetectorRef", function () {
        return ChangeDetectorRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Compiler", function () {
        return Compiler;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CompilerFactory", function () {
        return CompilerFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Component", function () {
        return Component;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ComponentFactory", function () {
        return ComponentFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ComponentFactoryResolver", function () {
        return ComponentFactoryResolver;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ComponentRef", function () {
        return ComponentRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ContentChild", function () {
        return ContentChild;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ContentChildren", function () {
        return ContentChildren;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DEFAULT_CURRENCY_CODE", function () {
        return DEFAULT_CURRENCY_CODE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DebugElement", function () {
        return DebugElement;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DebugEventListener", function () {
        return DebugEventListener;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DebugNode", function () {
        return DebugNode;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DefaultIterableDiffer", function () {
        return DefaultIterableDiffer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Directive", function () {
        return Directive;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ElementRef", function () {
        return ElementRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "EmbeddedViewRef", function () {
        return EmbeddedViewRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ErrorHandler", function () {
        return ErrorHandler;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "EventEmitter", function () {
        return EventEmitter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Host", function () {
        return Host;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HostBinding", function () {
        return HostBinding;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HostListener", function () {
        return HostListener;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "INJECTOR", function () {
        return INJECTOR$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Inject", function () {
        return Inject;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "InjectFlags", function () {
        return InjectFlags;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Injectable", function () {
        return Injectable;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "InjectionToken", function () {
        return InjectionToken;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Injector", function () {
        return Injector;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Input", function () {
        return Input;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "IterableDiffers", function () {
        return IterableDiffers;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "KeyValueDiffers", function () {
        return KeyValueDiffers;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LOCALE_ID", function () {
        return LOCALE_ID$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MissingTranslationStrategy", function () {
        return MissingTranslationStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ModuleWithComponentFactories", function () {
        return ModuleWithComponentFactories;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NO_ERRORS_SCHEMA", function () {
        return NO_ERRORS_SCHEMA;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgModule", function () {
        return NgModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgModuleFactory", function () {
        return NgModuleFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgModuleFactoryLoader", function () {
        return NgModuleFactoryLoader;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgModuleRef", function () {
        return NgModuleRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgProbeToken", function () {
        return NgProbeToken;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgZone", function () {
        return NgZone;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Optional", function () {
        return Optional;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Output", function () {
        return Output;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PACKAGE_ROOT_URL", function () {
        return PACKAGE_ROOT_URL;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PLATFORM_ID", function () {
        return PLATFORM_ID;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PLATFORM_INITIALIZER", function () {
        return PLATFORM_INITIALIZER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Pipe", function () {
        return Pipe;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PlatformRef", function () {
        return PlatformRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Query", function () {
        return Query;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "QueryList", function () {
        return QueryList;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ReflectiveInjector", function () {
        return ReflectiveInjector;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ReflectiveKey", function () {
        return ReflectiveKey;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Renderer2", function () {
        return Renderer2;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RendererFactory2", function () {
        return RendererFactory2;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RendererStyleFlags2", function () {
        return RendererStyleFlags2;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ResolvedReflectiveFactory", function () {
        return ResolvedReflectiveFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Sanitizer", function () {
        return Sanitizer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SecurityContext", function () {
        return SecurityContext;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Self", function () {
        return Self;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SimpleChange", function () {
        return SimpleChange;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SkipSelf", function () {
        return SkipSelf;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SystemJsNgModuleLoader", function () {
        return SystemJsNgModuleLoader;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SystemJsNgModuleLoaderConfig", function () {
        return SystemJsNgModuleLoaderConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TRANSLATIONS", function () {
        return TRANSLATIONS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TRANSLATIONS_FORMAT", function () {
        return TRANSLATIONS_FORMAT;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TemplateRef", function () {
        return TemplateRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Testability", function () {
        return Testability;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TestabilityRegistry", function () {
        return TestabilityRegistry;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Type", function () {
        return Type;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "VERSION", function () {
        return VERSION;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Version", function () {
        return Version;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ViewChild", function () {
        return ViewChild;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ViewChildren", function () {
        return ViewChildren;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ViewContainerRef", function () {
        return ViewContainerRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ViewEncapsulation", function () {
        return ViewEncapsulation;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ViewRef", function () {
        return ViewRef$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "WrappedValue", function () {
        return WrappedValue;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "asNativeElements", function () {
        return asNativeElements;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "assertPlatform", function () {
        return assertPlatform;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "createPlatform", function () {
        return createPlatform;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "createPlatformFactory", function () {
        return createPlatformFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "defineInjectable", function () {
        return defineInjectable;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "destroyPlatform", function () {
        return destroyPlatform;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "enableProdMode", function () {
        return enableProdMode;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "forwardRef", function () {
        return forwardRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getDebugNode", function () {
        return getDebugNode$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getModuleFactory", function () {
        return getModuleFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getPlatform", function () {
        return getPlatform;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "inject", function () {
        return inject;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isDevMode", function () {
        return isDevMode;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "platformCore", function () {
        return platformCore;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "resolveForwardRef", function () {
        return resolveForwardRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "setTestabilityGetter", function () {
        return setTestabilityGetter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵ0", function () {
        return ɵ0$3;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵALLOW_MULTIPLE_PLATFORMS", function () {
        return ALLOW_MULTIPLE_PLATFORMS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵAPP_ID_RANDOM_PROVIDER", function () {
        return APP_ID_RANDOM_PROVIDER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵCREATE_ATTRIBUTE_DECORATOR__POST_R3__", function () {
        return CREATE_ATTRIBUTE_DECORATOR__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵChangeDetectorStatus", function () {
        return ChangeDetectorStatus;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵCodegenComponentFactoryResolver", function () {
        return CodegenComponentFactoryResolver;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵCompiler_compileModuleAndAllComponentsAsync__POST_R3__", function () {
        return Compiler_compileModuleAndAllComponentsAsync__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵCompiler_compileModuleAndAllComponentsSync__POST_R3__", function () {
        return Compiler_compileModuleAndAllComponentsSync__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵCompiler_compileModuleAsync__POST_R3__", function () {
        return Compiler_compileModuleAsync__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵCompiler_compileModuleSync__POST_R3__", function () {
        return Compiler_compileModuleSync__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵComponentFactory", function () {
        return ComponentFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵConsole", function () {
        return Console;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵDEFAULT_LOCALE_ID", function () {
        return DEFAULT_LOCALE_ID;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵEMPTY_ARRAY", function () {
        return EMPTY_ARRAY$4;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵEMPTY_MAP", function () {
        return EMPTY_MAP;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵINJECTOR_IMPL__POST_R3__", function () {
        return INJECTOR_IMPL__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵINJECTOR_SCOPE", function () {
        return INJECTOR_SCOPE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵLifecycleHooksFeature", function () {
        return LifecycleHooksFeature;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵLocaleDataIndex", function () {
        return LocaleDataIndex;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵNG_COMP_DEF", function () {
        return NG_COMP_DEF;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵNG_DIR_DEF", function () {
        return NG_DIR_DEF;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵNG_ELEMENT_ID", function () {
        return NG_ELEMENT_ID;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵNG_INJ_DEF", function () {
        return NG_INJ_DEF;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵNG_MOD_DEF", function () {
        return NG_MOD_DEF;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵNG_PIPE_DEF", function () {
        return NG_PIPE_DEF;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵNG_PROV_DEF", function () {
        return NG_PROV_DEF;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR", function () {
        return NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵNO_CHANGE", function () {
        return NO_CHANGE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵNgModuleFactory", function () {
        return NgModuleFactory$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵNoopNgZone", function () {
        return NoopNgZone;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵReflectionCapabilities", function () {
        return ReflectionCapabilities;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵRender3ComponentFactory", function () {
        return ComponentFactory$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵRender3ComponentRef", function () {
        return ComponentRef$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵRender3NgModuleRef", function () {
        return NgModuleRef$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵSWITCH_CHANGE_DETECTOR_REF_FACTORY__POST_R3__", function () {
        return SWITCH_CHANGE_DETECTOR_REF_FACTORY__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵSWITCH_COMPILE_COMPONENT__POST_R3__", function () {
        return SWITCH_COMPILE_COMPONENT__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵSWITCH_COMPILE_DIRECTIVE__POST_R3__", function () {
        return SWITCH_COMPILE_DIRECTIVE__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵSWITCH_COMPILE_INJECTABLE__POST_R3__", function () {
        return SWITCH_COMPILE_INJECTABLE__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵSWITCH_COMPILE_NGMODULE__POST_R3__", function () {
        return SWITCH_COMPILE_NGMODULE__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵSWITCH_COMPILE_PIPE__POST_R3__", function () {
        return SWITCH_COMPILE_PIPE__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵSWITCH_ELEMENT_REF_FACTORY__POST_R3__", function () {
        return SWITCH_ELEMENT_REF_FACTORY__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵSWITCH_IVY_ENABLED__POST_R3__", function () {
        return SWITCH_IVY_ENABLED__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵSWITCH_RENDERER2_FACTORY__POST_R3__", function () {
        return SWITCH_RENDERER2_FACTORY__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵSWITCH_TEMPLATE_REF_FACTORY__POST_R3__", function () {
        return SWITCH_TEMPLATE_REF_FACTORY__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵSWITCH_VIEW_CONTAINER_REF_FACTORY__POST_R3__", function () {
        return SWITCH_VIEW_CONTAINER_REF_FACTORY__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵ_sanitizeHtml", function () {
        return _sanitizeHtml;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵ_sanitizeUrl", function () {
        return _sanitizeUrl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵallowSanitizationBypassAndThrow", function () {
        return allowSanitizationBypassAndThrow;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵand", function () {
        return anchorDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_a", function () {
        return isForwardRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_b", function () {
        return injectInjectorOnly;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_ba", function () {
        return zoneSchedulerFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bb", function () {
        return USD_CURRENCY_CODE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bc", function () {
        return _def;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bd", function () {
        return DebugContext;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_be", function () {
        return NgOnChangesFeatureImpl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bf", function () {
        return SCHEDULER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bg", function () {
        return injectAttributeImpl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bh", function () {
        return getLView;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bi", function () {
        return getBindingRoot;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bj", function () {
        return nextContextImpl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bl", function () {
        return pureFunction1Internal;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bm", function () {
        return pureFunction2Internal;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bn", function () {
        return pureFunction3Internal;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bo", function () {
        return pureFunction4Internal;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bp", function () {
        return pureFunctionVInternal;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bq", function () {
        return getUrlSanitizer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_br", function () {
        return makePropDecorator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bs", function () {
        return makeParamDecorator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bv", function () {
        return getClosureSafeProperty;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bw", function () {
        return NullInjector;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bx", function () {
        return getInjectImplementation;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_bz", function () {
        return getNativeByTNode;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_c", function () {
        return attachInjectFlag;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_cb", function () {
        return getRootContext;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_cc", function () {
        return i18nPostprocess;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_d", function () {
        return ReflectiveInjector_;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_e", function () {
        return ReflectiveDependency;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_f", function () {
        return resolveReflectiveProviders;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_g", function () {
        return _appIdRandomProviderFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_h", function () {
        return injectRenderer2;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_i", function () {
        return injectElementRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_j", function () {
        return createElementRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_k", function () {
        return getModuleFactory__PRE_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_l", function () {
        return injectTemplateRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_m", function () {
        return createTemplateRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_n", function () {
        return injectViewContainerRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_o", function () {
        return DebugNode__PRE_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_p", function () {
        return DebugElement__PRE_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_q", function () {
        return getDebugNodeR2__PRE_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_r", function () {
        return injectChangeDetectorRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_s", function () {
        return DefaultIterableDifferFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_t", function () {
        return DefaultKeyValueDifferFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_u", function () {
        return defaultIterableDiffersFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_v", function () {
        return defaultKeyValueDiffersFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_w", function () {
        return _iterableDiffersFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_x", function () {
        return _keyValueDiffersFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_y", function () {
        return _localeFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_core_core_z", function () {
        return APPLICATION_MODULE_PROVIDERS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵbypassSanitizationTrustHtml", function () {
        return bypassSanitizationTrustHtml;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵbypassSanitizationTrustResourceUrl", function () {
        return bypassSanitizationTrustResourceUrl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵbypassSanitizationTrustScript", function () {
        return bypassSanitizationTrustScript;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵbypassSanitizationTrustStyle", function () {
        return bypassSanitizationTrustStyle;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵbypassSanitizationTrustUrl", function () {
        return bypassSanitizationTrustUrl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵccf", function () {
        return createComponentFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵclearOverrides", function () {
        return clearOverrides;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵclearResolutionOfComponentResourcesQueue", function () {
        return clearResolutionOfComponentResourcesQueue;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵcmf", function () {
        return createNgModuleFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵcompileComponent", function () {
        return compileComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵcompileDirective", function () {
        return compileDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵcompileNgModule", function () {
        return compileNgModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵcompileNgModuleDefs", function () {
        return compileNgModuleDefs;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵcompileNgModuleFactory__POST_R3__", function () {
        return compileNgModuleFactory__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵcompilePipe", function () {
        return compilePipe;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵcreateInjector", function () {
        return createInjector;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵcrt", function () {
        return createRendererType2;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵdefaultIterableDiffers", function () {
        return defaultIterableDiffers;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵdefaultKeyValueDiffers", function () {
        return defaultKeyValueDiffers;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵdetectChanges", function () {
        return detectChanges;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵdevModeEqual", function () {
        return devModeEqual;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵdid", function () {
        return directiveDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵeld", function () {
        return elementDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵfindLocaleData", function () {
        return findLocaleData;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵflushModuleScopingQueueAsMuchAsPossible", function () {
        return flushModuleScopingQueueAsMuchAsPossible;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵgetComponentViewDefinitionFactory", function () {
        return getComponentViewDefinitionFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵgetDebugNodeR2", function () {
        return getDebugNodeR2;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵgetDebugNode__POST_R3__", function () {
        return getDebugNode__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵgetDirectives", function () {
        return getDirectives;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵgetHostElement", function () {
        return getHostElement;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵgetInjectableDef", function () {
        return getInjectableDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵgetLContext", function () {
        return getLContext;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵgetLocaleCurrencyCode", function () {
        return getLocaleCurrencyCode;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵgetLocalePluralCase", function () {
        return getLocalePluralCase;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵgetModuleFactory__POST_R3__", function () {
        return getModuleFactory__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵgetSanitizationBypassType", function () {
        return getSanitizationBypassType;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵglobal", function () {
        return _global;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵinitServicesIfNeeded", function () {
        return initServicesIfNeeded;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵinlineInterpolate", function () {
        return inlineInterpolate;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵinterpolate", function () {
        return interpolate;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵisBoundToModule__POST_R3__", function () {
        return isBoundToModule__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵisDefaultChangeDetectionStrategy", function () {
        return isDefaultChangeDetectionStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵisListLikeIterable", function () {
        return isListLikeIterable;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵisObservable", function () {
        return isObservable;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵisPromise", function () {
        return isPromise;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵisSubscribable", function () {
        return isSubscribable;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵivyEnabled", function () {
        return ivyEnabled;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵmakeDecorator", function () {
        return makeDecorator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵmarkDirty", function () {
        return markDirty;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵmod", function () {
        return moduleDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵmpd", function () {
        return moduleProvideDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵncd", function () {
        return ngContentDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵnoSideEffects", function () {
        return noSideEffects;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵnov", function () {
        return nodeValue;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵoverrideComponentView", function () {
        return overrideComponentView;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵoverrideProvider", function () {
        return overrideProvider;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵpad", function () {
        return pureArrayDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵpatchComponentDefWithScope", function () {
        return patchComponentDefWithScope;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵpid", function () {
        return pipeDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵpod", function () {
        return pureObjectDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵppd", function () {
        return purePipeDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵprd", function () {
        return providerDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵpublishDefaultGlobalUtils", function () {
        return publishDefaultGlobalUtils;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵpublishGlobalUtil", function () {
        return publishGlobalUtil;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵqud", function () {
        return queryDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵregisterLocaleData", function () {
        return registerLocaleData;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵregisterModuleFactory", function () {
        return registerModuleFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵregisterNgModuleType", function () {
        return registerNgModuleType;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵrenderComponent", function () {
        return renderComponent$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵresetCompiledComponents", function () {
        return resetCompiledComponents;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵresetJitOptions", function () {
        return resetJitOptions;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵresolveComponentResources", function () {
        return resolveComponentResources;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵsetClassMetadata", function () {
        return setClassMetadata;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵsetCurrentInjector", function () {
        return setCurrentInjector;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵsetDocument", function () {
        return setDocument;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵsetLocaleId", function () {
        return setLocaleId;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵstore", function () {
        return store;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵstringify", function () {
        return stringify;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵted", function () {
        return textDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵtransitiveScopesFor", function () {
        return transitiveScopesFor;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵunregisterLocaleData", function () {
        return unregisterAllLocaleData;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵunv", function () {
        return unwrapValue;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵunwrapSafeValue", function () {
        return unwrapSafeValue;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵvid", function () {
        return viewDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵwhenRendered", function () {
        return whenRendered;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵCopyDefinitionFeature", function () {
        return ɵɵCopyDefinitionFeature;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵInheritDefinitionFeature", function () {
        return ɵɵInheritDefinitionFeature;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵNgOnChangesFeature", function () {
        return ɵɵNgOnChangesFeature;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵProvidersFeature", function () {
        return ɵɵProvidersFeature;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵadvance", function () {
        return ɵɵadvance;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵattribute", function () {
        return ɵɵattribute;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵattributeInterpolate1", function () {
        return ɵɵattributeInterpolate1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵattributeInterpolate2", function () {
        return ɵɵattributeInterpolate2;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵattributeInterpolate3", function () {
        return ɵɵattributeInterpolate3;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵattributeInterpolate4", function () {
        return ɵɵattributeInterpolate4;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵattributeInterpolate5", function () {
        return ɵɵattributeInterpolate5;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵattributeInterpolate6", function () {
        return ɵɵattributeInterpolate6;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵattributeInterpolate7", function () {
        return ɵɵattributeInterpolate7;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵattributeInterpolate8", function () {
        return ɵɵattributeInterpolate8;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵattributeInterpolateV", function () {
        return ɵɵattributeInterpolateV;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵclassMap", function () {
        return ɵɵclassMap;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵclassMapInterpolate1", function () {
        return ɵɵclassMapInterpolate1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵclassMapInterpolate2", function () {
        return ɵɵclassMapInterpolate2;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵclassMapInterpolate3", function () {
        return ɵɵclassMapInterpolate3;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵclassMapInterpolate4", function () {
        return ɵɵclassMapInterpolate4;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵclassMapInterpolate5", function () {
        return ɵɵclassMapInterpolate5;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵclassMapInterpolate6", function () {
        return ɵɵclassMapInterpolate6;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵclassMapInterpolate7", function () {
        return ɵɵclassMapInterpolate7;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵclassMapInterpolate8", function () {
        return ɵɵclassMapInterpolate8;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵclassMapInterpolateV", function () {
        return ɵɵclassMapInterpolateV;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵclassProp", function () {
        return ɵɵclassProp;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵcontentQuery", function () {
        return ɵɵcontentQuery;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵdefineComponent", function () {
        return ɵɵdefineComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵdefineDirective", function () {
        return ɵɵdefineDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵdefineInjectable", function () {
        return ɵɵdefineInjectable;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵdefineInjector", function () {
        return ɵɵdefineInjector;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵdefineNgModule", function () {
        return ɵɵdefineNgModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵdefinePipe", function () {
        return ɵɵdefinePipe;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵdirectiveInject", function () {
        return ɵɵdirectiveInject;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵdisableBindings", function () {
        return ɵɵdisableBindings;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵelement", function () {
        return ɵɵelement;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵelementContainer", function () {
        return ɵɵelementContainer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵelementContainerEnd", function () {
        return ɵɵelementContainerEnd;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵelementContainerStart", function () {
        return ɵɵelementContainerStart;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵelementEnd", function () {
        return ɵɵelementEnd;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵelementStart", function () {
        return ɵɵelementStart;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵenableBindings", function () {
        return ɵɵenableBindings;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵgetCurrentView", function () {
        return ɵɵgetCurrentView;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵgetFactoryOf", function () {
        return ɵɵgetFactoryOf;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵgetInheritedFactory", function () {
        return ɵɵgetInheritedFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵhostProperty", function () {
        return ɵɵhostProperty;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵi18n", function () {
        return ɵɵi18n;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵi18nApply", function () {
        return ɵɵi18nApply;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵi18nAttributes", function () {
        return ɵɵi18nAttributes;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵi18nEnd", function () {
        return ɵɵi18nEnd;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵi18nExp", function () {
        return ɵɵi18nExp;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵi18nPostprocess", function () {
        return ɵɵi18nPostprocess;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵi18nStart", function () {
        return ɵɵi18nStart;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵinject", function () {
        return ɵɵinject;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵinjectAttribute", function () {
        return ɵɵinjectAttribute;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵinjectPipeChangeDetectorRef", function () {
        return ɵɵinjectPipeChangeDetectorRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵinvalidFactory", function () {
        return ɵɵinvalidFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵinvalidFactoryDep", function () {
        return ɵɵinvalidFactoryDep;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵlistener", function () {
        return ɵɵlistener;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵloadQuery", function () {
        return ɵɵloadQuery;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵnamespaceHTML", function () {
        return ɵɵnamespaceHTML;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵnamespaceMathML", function () {
        return ɵɵnamespaceMathML;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵnamespaceSVG", function () {
        return ɵɵnamespaceSVG;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵnextContext", function () {
        return ɵɵnextContext;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵngDeclareComponent", function () {
        return ɵɵngDeclareComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵngDeclareDirective", function () {
        return ɵɵngDeclareDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵngDeclarePipe", function () {
        return ɵɵngDeclarePipe;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpipe", function () {
        return ɵɵpipe;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpipeBind1", function () {
        return ɵɵpipeBind1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpipeBind2", function () {
        return ɵɵpipeBind2;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpipeBind3", function () {
        return ɵɵpipeBind3;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpipeBind4", function () {
        return ɵɵpipeBind4;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpipeBindV", function () {
        return ɵɵpipeBindV;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵprojection", function () {
        return ɵɵprojection;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵprojectionDef", function () {
        return ɵɵprojectionDef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵproperty", function () {
        return ɵɵproperty;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpropertyInterpolate", function () {
        return ɵɵpropertyInterpolate;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpropertyInterpolate1", function () {
        return ɵɵpropertyInterpolate1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpropertyInterpolate2", function () {
        return ɵɵpropertyInterpolate2;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpropertyInterpolate3", function () {
        return ɵɵpropertyInterpolate3;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpropertyInterpolate4", function () {
        return ɵɵpropertyInterpolate4;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpropertyInterpolate5", function () {
        return ɵɵpropertyInterpolate5;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpropertyInterpolate6", function () {
        return ɵɵpropertyInterpolate6;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpropertyInterpolate7", function () {
        return ɵɵpropertyInterpolate7;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpropertyInterpolate8", function () {
        return ɵɵpropertyInterpolate8;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpropertyInterpolateV", function () {
        return ɵɵpropertyInterpolateV;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpureFunction0", function () {
        return ɵɵpureFunction0;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpureFunction1", function () {
        return ɵɵpureFunction1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpureFunction2", function () {
        return ɵɵpureFunction2;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpureFunction3", function () {
        return ɵɵpureFunction3;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpureFunction4", function () {
        return ɵɵpureFunction4;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpureFunction5", function () {
        return ɵɵpureFunction5;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpureFunction6", function () {
        return ɵɵpureFunction6;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpureFunction7", function () {
        return ɵɵpureFunction7;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpureFunction8", function () {
        return ɵɵpureFunction8;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵpureFunctionV", function () {
        return ɵɵpureFunctionV;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵqueryRefresh", function () {
        return ɵɵqueryRefresh;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵreference", function () {
        return ɵɵreference;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵresolveBody", function () {
        return ɵɵresolveBody;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵresolveDocument", function () {
        return ɵɵresolveDocument;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵresolveWindow", function () {
        return ɵɵresolveWindow;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵrestoreView", function () {
        return ɵɵrestoreView;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵsanitizeHtml", function () {
        return ɵɵsanitizeHtml;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵsanitizeResourceUrl", function () {
        return ɵɵsanitizeResourceUrl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵsanitizeScript", function () {
        return ɵɵsanitizeScript;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵsanitizeStyle", function () {
        return ɵɵsanitizeStyle;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵsanitizeUrl", function () {
        return ɵɵsanitizeUrl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵsanitizeUrlOrResourceUrl", function () {
        return ɵɵsanitizeUrlOrResourceUrl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵsetComponentScope", function () {
        return ɵɵsetComponentScope;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵsetNgModuleScope", function () {
        return ɵɵsetNgModuleScope;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵstyleMap", function () {
        return ɵɵstyleMap;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵstyleMapInterpolate1", function () {
        return ɵɵstyleMapInterpolate1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵstyleMapInterpolate2", function () {
        return ɵɵstyleMapInterpolate2;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵstyleMapInterpolate3", function () {
        return ɵɵstyleMapInterpolate3;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵstyleMapInterpolate4", function () {
        return ɵɵstyleMapInterpolate4;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵstyleMapInterpolate5", function () {
        return ɵɵstyleMapInterpolate5;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵstyleMapInterpolate6", function () {
        return ɵɵstyleMapInterpolate6;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵstyleMapInterpolate7", function () {
        return ɵɵstyleMapInterpolate7;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵstyleMapInterpolate8", function () {
        return ɵɵstyleMapInterpolate8;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵstyleMapInterpolateV", function () {
        return ɵɵstyleMapInterpolateV;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵstyleProp", function () {
        return ɵɵstyleProp;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵstylePropInterpolate1", function () {
        return ɵɵstylePropInterpolate1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵstylePropInterpolate2", function () {
        return ɵɵstylePropInterpolate2;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵstylePropInterpolate3", function () {
        return ɵɵstylePropInterpolate3;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵstylePropInterpolate4", function () {
        return ɵɵstylePropInterpolate4;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵstylePropInterpolate5", function () {
        return ɵɵstylePropInterpolate5;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵstylePropInterpolate6", function () {
        return ɵɵstylePropInterpolate6;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵstylePropInterpolate7", function () {
        return ɵɵstylePropInterpolate7;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵstylePropInterpolate8", function () {
        return ɵɵstylePropInterpolate8;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵstylePropInterpolateV", function () {
        return ɵɵstylePropInterpolateV;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵsyntheticHostListener", function () {
        return ɵɵsyntheticHostListener;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵsyntheticHostProperty", function () {
        return ɵɵsyntheticHostProperty;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵtemplate", function () {
        return ɵɵtemplate;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵtemplateRefExtractor", function () {
        return ɵɵtemplateRefExtractor;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵtext", function () {
        return ɵɵtext;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵtextInterpolate", function () {
        return ɵɵtextInterpolate;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵtextInterpolate1", function () {
        return ɵɵtextInterpolate1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵtextInterpolate2", function () {
        return ɵɵtextInterpolate2;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵtextInterpolate3", function () {
        return ɵɵtextInterpolate3;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵtextInterpolate4", function () {
        return ɵɵtextInterpolate4;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵtextInterpolate5", function () {
        return ɵɵtextInterpolate5;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵtextInterpolate6", function () {
        return ɵɵtextInterpolate6;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵtextInterpolate7", function () {
        return ɵɵtextInterpolate7;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵtextInterpolate8", function () {
        return ɵɵtextInterpolate8;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵtextInterpolateV", function () {
        return ɵɵtextInterpolateV;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵtrustConstantHtml", function () {
        return ɵɵtrustConstantHtml;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵtrustConstantResourceUrl", function () {
        return ɵɵtrustConstantResourceUrl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵɵviewQuery", function () {
        return ɵɵviewQuery;
      });
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /**
       * @license Angular v12.0.0-next.1
       * (c) 2010-2020 Google LLC. https://angular.io/
       * License: MIT
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function getClosureSafeProperty(objWithPropertyToExtract) {
        for (var key in objWithPropertyToExtract) {
          if (objWithPropertyToExtract[key] === getClosureSafeProperty) {
            return key;
          }
        }

        throw Error('Could not find renamed property on target object.');
      }
      /**
       * Sets properties on a target object from a source object, but only if
       * the property doesn't already exist on the target object.
       * @param target The target to set properties on
       * @param source The source of the property keys and values to set
       */


      function fillProperties(target, source) {
        for (var key in source) {
          if (source.hasOwnProperty(key) && !target.hasOwnProperty(key)) {
            target[key] = source[key];
          }
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function stringify(token) {
        if (typeof token === 'string') {
          return token;
        }

        if (Array.isArray(token)) {
          return '[' + token.map(stringify).join(', ') + ']';
        }

        if (token == null) {
          return '' + token;
        }

        if (token.overriddenName) {
          return "".concat(token.overriddenName);
        }

        if (token.name) {
          return "".concat(token.name);
        }

        var res = token.toString();

        if (res == null) {
          return '' + res;
        }

        var newLineIndex = res.indexOf('\n');
        return newLineIndex === -1 ? res : res.substring(0, newLineIndex);
      }
      /**
       * Concatenates two strings with separator, allocating new strings only when necessary.
       *
       * @param before before string.
       * @param separator separator string.
       * @param after after string.
       * @returns concatenated string.
       */


      function concatStringsWithSpace(before, after) {
        return before == null || before === '' ? after === null ? '' : after : after == null || after === '' ? before : before + ' ' + after;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var __forward_ref__ = getClosureSafeProperty({
        __forward_ref__: getClosureSafeProperty
      });
      /**
       * Allows to refer to references which are not yet defined.
       *
       * For instance, `forwardRef` is used when the `token` which we need to refer to for the purposes of
       * DI is declared, but not yet defined. It is also used when the `token` which we use when creating
       * a query is not yet defined.
       *
       * @usageNotes
       * ### Example
       * {@example core/di/ts/forward_ref/forward_ref_spec.ts region='forward_ref'}
       * @publicApi
       */


      function forwardRef(forwardRefFn) {
        forwardRefFn.__forward_ref__ = forwardRef;

        forwardRefFn.toString = function () {
          return stringify(this());
        };

        return forwardRefFn;
      }
      /**
       * Lazily retrieves the reference value from a forwardRef.
       *
       * Acts as the identity function when given a non-forward-ref value.
       *
       * @usageNotes
       * ### Example
       *
       * {@example core/di/ts/forward_ref/forward_ref_spec.ts region='resolve_forward_ref'}
       *
       * @see `forwardRef`
       * @publicApi
       */


      function resolveForwardRef(type) {
        return isForwardRef(type) ? type() : type;
      }
      /** Checks whether a function is wrapped by a `forwardRef`. */


      function isForwardRef(fn) {
        return typeof fn === 'function' && fn.hasOwnProperty(__forward_ref__) && fn.__forward_ref__ === forwardRef;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function assertNumber(actual, msg) {
        if (!(typeof actual === 'number')) {
          throwError(msg, typeof actual, 'number', '===');
        }
      }

      function assertNumberInRange(actual, minInclusive, maxInclusive) {
        assertNumber(actual, 'Expected a number');
        assertLessThanOrEqual(actual, maxInclusive, 'Expected number to be less than or equal to');
        assertGreaterThanOrEqual(actual, minInclusive, 'Expected number to be greater than or equal to');
      }

      function assertString(actual, msg) {
        if (!(typeof actual === 'string')) {
          throwError(msg, actual === null ? 'null' : typeof actual, 'string', '===');
        }
      }

      function assertFunction(actual, msg) {
        if (!(typeof actual === 'function')) {
          throwError(msg, actual === null ? 'null' : typeof actual, 'function', '===');
        }
      }

      function assertEqual(actual, expected, msg) {
        if (!(actual == expected)) {
          throwError(msg, actual, expected, '==');
        }
      }

      function assertNotEqual(actual, expected, msg) {
        if (!(actual != expected)) {
          throwError(msg, actual, expected, '!=');
        }
      }

      function assertSame(actual, expected, msg) {
        if (!(actual === expected)) {
          throwError(msg, actual, expected, '===');
        }
      }

      function assertNotSame(actual, expected, msg) {
        if (!(actual !== expected)) {
          throwError(msg, actual, expected, '!==');
        }
      }

      function assertLessThan(actual, expected, msg) {
        if (!(actual < expected)) {
          throwError(msg, actual, expected, '<');
        }
      }

      function assertLessThanOrEqual(actual, expected, msg) {
        if (!(actual <= expected)) {
          throwError(msg, actual, expected, '<=');
        }
      }

      function assertGreaterThan(actual, expected, msg) {
        if (!(actual > expected)) {
          throwError(msg, actual, expected, '>');
        }
      }

      function assertGreaterThanOrEqual(actual, expected, msg) {
        if (!(actual >= expected)) {
          throwError(msg, actual, expected, '>=');
        }
      }

      function assertNotDefined(actual, msg) {
        if (actual != null) {
          throwError(msg, actual, null, '==');
        }
      }

      function assertDefined(actual, msg) {
        if (actual == null) {
          throwError(msg, actual, null, '!=');
        }
      }

      function throwError(msg, actual, expected, comparison) {
        throw new Error("ASSERTION ERROR: ".concat(msg) + (comparison == null ? '' : " [Expected=> ".concat(expected, " ").concat(comparison, " ").concat(actual, " <=Actual]")));
      }

      function assertDomNode(node) {
        // If we're in a worker, `Node` will not be defined.
        if (!(typeof Node !== 'undefined' && node instanceof Node) && !(typeof node === 'object' && node != null && node.constructor.name === 'WebWorkerRenderNode')) {
          throwError("The provided value must be an instance of a DOM Node but got ".concat(stringify(node)));
        }
      }

      function assertIndexInRange(arr, index) {
        assertDefined(arr, 'Array must be defined.');
        var maxLen = arr.length;

        if (index < 0 || index >= maxLen) {
          throwError("Index expected to be less than ".concat(maxLen, " but got ").concat(index));
        }
      }

      function assertOneOf(value) {
        for (var _len42 = arguments.length, validValues = new Array(_len42 > 1 ? _len42 - 1 : 0), _key44 = 1; _key44 < _len42; _key44++) {
          validValues[_key44 - 1] = arguments[_key44];
        }

        if (validValues.indexOf(value) !== -1) return true;
        throwError("Expected value to be one of ".concat(JSON.stringify(validValues), " but was ").concat(JSON.stringify(value), "."));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Construct an `InjectableDef` which defines how a token will be constructed by the DI system, and
       * in which injectors (if any) it will be available.
       *
       * This should be assigned to a static `ɵprov` field on a type, which will then be an
       * `InjectableType`.
       *
       * Options:
       * * `providedIn` determines which injectors will include the injectable, by either associating it
       *   with an `@NgModule` or other `InjectorType`, or by specifying that this injectable should be
       *   provided in the `'root'` injector, which will be the application-level injector in most apps.
       * * `factory` gives the zero argument function which will create an instance of the injectable.
       *   The factory can call `inject` to access the `Injector` and request injection of dependencies.
       *
       * @codeGenApi
       * @publicApi This instruction has been emitted by ViewEngine for some time and is deployed to npm.
       */


      function ɵɵdefineInjectable(opts) {
        return {
          token: opts.token,
          providedIn: opts.providedIn || null,
          factory: opts.factory,
          value: undefined
        };
      }
      /**
       * @deprecated in v8, delete after v10. This API should be used only by generated code, and that
       * code should now use ɵɵdefineInjectable instead.
       * @publicApi
       */


      var defineInjectable = ɵɵdefineInjectable;
      /**
       * Construct an `InjectorDef` which configures an injector.
       *
       * This should be assigned to a static injector def (`ɵinj`) field on a type, which will then be an
       * `InjectorType`.
       *
       * Options:
       *
       * * `factory`: an `InjectorType` is an instantiable type, so a zero argument `factory` function to
       *   create the type must be provided. If that factory function needs to inject arguments, it can
       *   use the `inject` function.
       * * `providers`: an optional array of providers to add to the injector. Each provider must
       *   either have a factory or point to a type which has a `ɵprov` static property (the
       *   type must be an `InjectableType`).
       * * `imports`: an optional array of imports of other `InjectorType`s or `InjectorTypeWithModule`s
       *   whose providers will also be added to the injector. Locally provided types will override
       *   providers from imports.
       *
       * @codeGenApi
       */

      function ɵɵdefineInjector(options) {
        return {
          factory: options.factory,
          providers: options.providers || [],
          imports: options.imports || []
        };
      }
      /**
       * Read the injectable def (`ɵprov`) for `type` in a way which is immune to accidentally reading
       * inherited value.
       *
       * @param type A type which may have its own (non-inherited) `ɵprov`.
       */


      function getInjectableDef(type) {
        return getOwnDefinition(type, NG_PROV_DEF) || getOwnDefinition(type, NG_INJECTABLE_DEF);
      }
      /**
       * Return definition only if it is defined directly on `type` and is not inherited from a base
       * class of `type`.
       */


      function getOwnDefinition(type, field) {
        return type.hasOwnProperty(field) ? type[field] : null;
      }
      /**
       * Read the injectable def (`ɵprov`) for `type` or read the `ɵprov` from one of its ancestors.
       *
       * @param type A type which may have `ɵprov`, via inheritance.
       *
       * @deprecated Will be removed in a future version of Angular, where an error will occur in the
       *     scenario if we find the `ɵprov` on an ancestor only.
       */


      function getInheritedInjectableDef(type) {
        var def = type && (type[NG_PROV_DEF] || type[NG_INJECTABLE_DEF]);

        if (def) {
          var typeName = getTypeName(type); // TODO(FW-1307): Re-add ngDevMode when closure can handle it
          // ngDevMode &&

          console.warn("DEPRECATED: DI is instantiating a token \"".concat(typeName, "\" that inherits its @Injectable decorator but does not provide one itself.\n") + "This will become an error in a future version of Angular. Please add @Injectable() to the \"".concat(typeName, "\" class."));
          return def;
        } else {
          return null;
        }
      }
      /** Gets the name of a type, accounting for some cross-browser differences. */


      function getTypeName(type) {
        // `Function.prototype.name` behaves differently between IE and other browsers. In most browsers
        // it'll always return the name of the function itself, no matter how many other functions it
        // inherits from. On IE the function doesn't have its own `name` property, but it takes it from
        // the lowest level in the prototype chain. E.g. if we have `class Foo extends Parent` most
        // browsers will evaluate `Foo.name` to `Foo` while IE will return `Parent`. We work around
        // the issue by converting the function to a string and parsing its name out that way via a regex.
        if (type.hasOwnProperty('name')) {
          return type.name;
        }

        var match = ('' + type).match(/^function\s*([^\s(]+)/);
        return match === null ? '' : match[1];
      }
      /**
       * Read the injector def type in a way which is immune to accidentally reading inherited value.
       *
       * @param type type which may have an injector def (`ɵinj`)
       */


      function getInjectorDef(type) {
        return type && (type.hasOwnProperty(NG_INJ_DEF) || type.hasOwnProperty(NG_INJECTOR_DEF)) ? type[NG_INJ_DEF] : null;
      }

      var NG_PROV_DEF = getClosureSafeProperty({
        ɵprov: getClosureSafeProperty
      });
      var NG_INJ_DEF = getClosureSafeProperty({
        ɵinj: getClosureSafeProperty
      }); // We need to keep these around so we can read off old defs if new defs are unavailable

      var NG_INJECTABLE_DEF = getClosureSafeProperty({
        ngInjectableDef: getClosureSafeProperty
      });
      var NG_INJECTOR_DEF = getClosureSafeProperty({
        ngInjectorDef: getClosureSafeProperty
      });
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Injection flags for DI.
       *
       * @publicApi
       */

      var InjectFlags;

      (function (InjectFlags) {
        // TODO(alxhub): make this 'const' (and remove `InternalInjectFlags` enum) when ngc no longer
        // writes exports of it into ngfactory files.

        /** Check self and check parent injector if needed */
        InjectFlags[InjectFlags["Default"] = 0] = "Default";
        /**
         * Specifies that an injector should retrieve a dependency from any injector until reaching the
         * host element of the current component. (Only used with Element Injector)
         */

        InjectFlags[InjectFlags["Host"] = 1] = "Host";
        /** Don't ascend to ancestors of the node requesting injection. */

        InjectFlags[InjectFlags["Self"] = 2] = "Self";
        /** Skip the node that is requesting injection. */

        InjectFlags[InjectFlags["SkipSelf"] = 4] = "SkipSelf";
        /** Inject `defaultValue` instead if token not found. */

        InjectFlags[InjectFlags["Optional"] = 8] = "Optional";
      })(InjectFlags || (InjectFlags = {}));
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Current implementation of inject.
       *
       * By default, it is `injectInjectorOnly`, which makes it `Injector`-only aware. It can be changed
       * to `directiveInject`, which brings in the `NodeInjector` system of ivy. It is designed this
       * way for two reasons:
       *  1. `Injector` should not depend on ivy logic.
       *  2. To maintain tree shake-ability we don't want to bring in unnecessary code.
       */


      var _injectImplementation;

      function getInjectImplementation() {
        return _injectImplementation;
      }
      /**
       * Sets the current inject implementation.
       */


      function setInjectImplementation(impl) {
        var previous = _injectImplementation;
        _injectImplementation = impl;
        return previous;
      }
      /**
       * Injects `root` tokens in limp mode.
       *
       * If no injector exists, we can still inject tree-shakable providers which have `providedIn` set to
       * `"root"`. This is known as the limp mode injection. In such case the value is stored in the
       * `InjectableDef`.
       */


      function injectRootLimpMode(token, notFoundValue, flags) {
        var injectableDef = getInjectableDef(token);

        if (injectableDef && injectableDef.providedIn == 'root') {
          return injectableDef.value === undefined ? injectableDef.value = injectableDef.factory() : injectableDef.value;
        }

        if (flags & InjectFlags.Optional) return null;
        if (notFoundValue !== undefined) return notFoundValue;
        throw new Error("Injector: NOT_FOUND [".concat(stringify(token), "]"));
      }
      /**
       * Assert that `_injectImplementation` is not `fn`.
       *
       * This is useful, to prevent infinite recursion.
       *
       * @param fn Function which it should not equal to
       */


      function assertInjectImplementationNotEqual(fn) {
        ngDevMode && assertNotEqual(_injectImplementation, fn, 'Calling ɵɵinject would cause infinite recursion');
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Convince closure compiler that the wrapped function has no side-effects.
       *
       * Closure compiler always assumes that `toString` has no side-effects. We use this quirk to
       * allow us to execute a function but have closure compiler mark the call as no-side-effects.
       * It is important that the return value for the `noSideEffects` function be assigned
       * to something which is retained otherwise the call to `noSideEffects` will be removed by closure
       * compiler.
       */


      function noSideEffects(fn) {
        return {
          toString: fn
        }.toString();
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * The strategy that the default change detector uses to detect changes.
       * When set, takes effect the next time change detection is triggered.
       *
       * @see {@link ChangeDetectorRef#usage-notes Change detection usage}
       *
       * @publicApi
       */


      var ChangeDetectionStrategy;

      (function (ChangeDetectionStrategy) {
        /**
         * Use the `CheckOnce` strategy, meaning that automatic change detection is deactivated
         * until reactivated by setting the strategy to `Default` (`CheckAlways`).
         * Change detection can still be explicitly invoked.
         * This strategy applies to all child directives and cannot be overridden.
         */
        ChangeDetectionStrategy[ChangeDetectionStrategy["OnPush"] = 0] = "OnPush";
        /**
         * Use the default `CheckAlways` strategy, in which change detection is automatic until
         * explicitly deactivated.
         */

        ChangeDetectionStrategy[ChangeDetectionStrategy["Default"] = 1] = "Default";
      })(ChangeDetectionStrategy || (ChangeDetectionStrategy = {}));
      /**
       * Defines the possible states of the default change detector.
       * @see `ChangeDetectorRef`
       */


      var ChangeDetectorStatus;

      (function (ChangeDetectorStatus) {
        /**
         * A state in which, after calling `detectChanges()`, the change detector
         * state becomes `Checked`, and must be explicitly invoked or reactivated.
         */
        ChangeDetectorStatus[ChangeDetectorStatus["CheckOnce"] = 0] = "CheckOnce";
        /**
         * A state in which change detection is skipped until the change detector mode
         * becomes `CheckOnce`.
         */

        ChangeDetectorStatus[ChangeDetectorStatus["Checked"] = 1] = "Checked";
        /**
         * A state in which change detection continues automatically until explicitly
         * deactivated.
         */

        ChangeDetectorStatus[ChangeDetectorStatus["CheckAlways"] = 2] = "CheckAlways";
        /**
         * A state in which a change detector sub tree is not a part of the main tree and
         * should be skipped.
         */

        ChangeDetectorStatus[ChangeDetectorStatus["Detached"] = 3] = "Detached";
        /**
         * Indicates that the change detector encountered an error checking a binding
         * or calling a directive lifecycle method and is now in an inconsistent state. Change
         * detectors in this state do not detect changes.
         */

        ChangeDetectorStatus[ChangeDetectorStatus["Errored"] = 4] = "Errored";
        /**
         * Indicates that the change detector has been destroyed.
         */

        ChangeDetectorStatus[ChangeDetectorStatus["Destroyed"] = 5] = "Destroyed";
      })(ChangeDetectorStatus || (ChangeDetectorStatus = {}));
      /**
       * Reports whether a given strategy is currently the default for change detection.
       * @param changeDetectionStrategy The strategy to check.
       * @returns True if the given strategy is the current default, false otherwise.
       * @see `ChangeDetectorStatus`
       * @see `ChangeDetectorRef`
       */


      function isDefaultChangeDetectionStrategy(changeDetectionStrategy) {
        return changeDetectionStrategy == null || changeDetectionStrategy === ChangeDetectionStrategy.Default;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Defines template and style encapsulation options available for Component's {@link Component}.
       *
       * See {@link Component#encapsulation encapsulation}.
       *
       * @usageNotes
       * ### Example
       *
       * {@example core/ts/metadata/encapsulation.ts region='longform'}
       *
       * @publicApi
       */


      var ViewEncapsulation;

      (function (ViewEncapsulation) {
        /**
         * Emulate `Native` scoping of styles by adding an attribute containing surrogate id to the Host
         * Element and pre-processing the style rules provided via {@link Component#styles styles} or
         * {@link Component#styleUrls styleUrls}, and adding the new Host Element attribute to all
         * selectors.
         *
         * This is the default option.
         */
        ViewEncapsulation[ViewEncapsulation["Emulated"] = 0] = "Emulated"; // Historically the 1 value was for `Native` encapsulation which has been removed as of v11.

        /**
         * Don't provide any template or style encapsulation.
         */

        ViewEncapsulation[ViewEncapsulation["None"] = 2] = "None";
        /**
         * Use Shadow DOM to encapsulate styles.
         *
         * For the DOM this means using modern [Shadow
         * DOM](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM) and
         * creating a ShadowRoot for Component's Host Element.
         */

        ViewEncapsulation[ViewEncapsulation["ShadowDom"] = 3] = "ShadowDom";
      })(ViewEncapsulation || (ViewEncapsulation = {}));
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var __globalThis = typeof globalThis !== 'undefined' && globalThis;

      var __window = typeof window !== 'undefined' && window;

      var __self = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope && self;

      var __global = typeof global !== 'undefined' && global; // Always use __globalThis if available, which is the spec-defined global variable across all
      // environments, then fallback to __global first, because in Node tests both __global and
      // __window may be defined and _global should be __global in that case.


      var _global = __globalThis || __global || __window || __self;
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function ngDevModeResetPerfCounters() {
        var locationString = typeof location !== 'undefined' ? location.toString() : '';
        var newCounters = {
          namedConstructors: locationString.indexOf('ngDevMode=namedConstructors') != -1,
          firstCreatePass: 0,
          tNode: 0,
          tView: 0,
          rendererCreateTextNode: 0,
          rendererSetText: 0,
          rendererCreateElement: 0,
          rendererAddEventListener: 0,
          rendererSetAttribute: 0,
          rendererRemoveAttribute: 0,
          rendererSetProperty: 0,
          rendererSetClassName: 0,
          rendererAddClass: 0,
          rendererRemoveClass: 0,
          rendererSetStyle: 0,
          rendererRemoveStyle: 0,
          rendererDestroy: 0,
          rendererDestroyNode: 0,
          rendererMoveNode: 0,
          rendererRemoveNode: 0,
          rendererAppendChild: 0,
          rendererInsertBefore: 0,
          rendererCreateComment: 0
        }; // Make sure to refer to ngDevMode as ['ngDevMode'] for closure.

        var allowNgDevModeTrue = locationString.indexOf('ngDevMode=false') === -1;
        _global['ngDevMode'] = allowNgDevModeTrue && newCounters;
        return newCounters;
      }
      /**
       * This function checks to see if the `ngDevMode` has been set. If yes,
       * then we honor it, otherwise we default to dev mode with additional checks.
       *
       * The idea is that unless we are doing production build where we explicitly
       * set `ngDevMode == false` we should be helping the developer by providing
       * as much early warning and errors as possible.
       *
       * `ɵɵdefineComponent` is guaranteed to have been called before any component template functions
       * (and thus Ivy instructions), so a single initialization there is sufficient to ensure ngDevMode
       * is defined for the entire instruction set.
       *
       * When checking `ngDevMode` on toplevel, always init it before referencing it
       * (e.g. `((typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode())`), otherwise you can
       *  get a `ReferenceError` like in https://github.com/angular/angular/issues/31595.
       *
       * Details on possible values for `ngDevMode` can be found on its docstring.
       *
       * NOTE:
       * - changes to the `ngDevMode` name must be synced with `compiler-cli/src/tooling.ts`.
       */


      function initNgDevMode() {
        // The below checks are to ensure that calling `initNgDevMode` multiple times does not
        // reset the counters.
        // If the `ngDevMode` is not an object, then it means we have not created the perf counters
        // yet.
        if (typeof ngDevMode === 'undefined' || ngDevMode) {
          if (typeof ngDevMode !== 'object') {
            ngDevModeResetPerfCounters();
          }

          return typeof ngDevMode !== 'undefined' && !!ngDevMode;
        }

        return false;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * This file contains reuseable "empty" symbols that can be used as default return values
       * in different parts of the rendering code. Because the same symbols are returned, this
       * allows for identity checks against these values to be consistently used by the framework
       * code.
       */


      var EMPTY_OBJ = {};
      var EMPTY_ARRAY = []; // freezing the values prevents any code from accidentally inserting new values in

      if ((typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode()) {
        // These property accesses can be ignored because ngDevMode will be set to false
        // when optimizing code and the whole if statement will be dropped.
        // tslint:disable-next-line:no-toplevel-property-access
        Object.freeze(EMPTY_OBJ); // tslint:disable-next-line:no-toplevel-property-access

        Object.freeze(EMPTY_ARRAY);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var NG_COMP_DEF = getClosureSafeProperty({
        ɵcmp: getClosureSafeProperty
      });
      var NG_DIR_DEF = getClosureSafeProperty({
        ɵdir: getClosureSafeProperty
      });
      var NG_PIPE_DEF = getClosureSafeProperty({
        ɵpipe: getClosureSafeProperty
      });
      var NG_MOD_DEF = getClosureSafeProperty({
        ɵmod: getClosureSafeProperty
      });
      var NG_LOC_ID_DEF = getClosureSafeProperty({
        ɵloc: getClosureSafeProperty
      });
      var NG_FACTORY_DEF = getClosureSafeProperty({
        ɵfac: getClosureSafeProperty
      });
      /**
       * If a directive is diPublic, bloomAdd sets a property on the type with this constant as
       * the key and the directive's unique ID as the value. This allows us to map directives to their
       * bloom filter bit for DI.
       */
      // TODO(misko): This is wrong. The NG_ELEMENT_ID should never be minified.

      var NG_ELEMENT_ID = getClosureSafeProperty({
        __NG_ELEMENT_ID__: getClosureSafeProperty
      });
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var _renderCompCount = 0;
      /**
       * Create a component definition object.
       *
       *
       * # Example
       * ```
       * class MyDirective {
       *   // Generated by Angular Template Compiler
       *   // [Symbol] syntax will not be supported by TypeScript until v2.7
       *   static ɵcmp = defineComponent({
       *     ...
       *   });
       * }
       * ```
       * @codeGenApi
       */

      function ɵɵdefineComponent(componentDefinition) {
        return noSideEffects(function () {
          // Initialize ngDevMode. This must be the first statement in ɵɵdefineComponent.
          // See the `initNgDevMode` docstring for more information.
          (typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode();
          var type = componentDefinition.type;
          var typePrototype = type.prototype;
          var declaredInputs = {};
          var def = {
            type: type,
            providersResolver: null,
            decls: componentDefinition.decls,
            vars: componentDefinition.vars,
            factory: null,
            template: componentDefinition.template || null,
            consts: componentDefinition.consts || null,
            ngContentSelectors: componentDefinition.ngContentSelectors,
            hostBindings: componentDefinition.hostBindings || null,
            hostVars: componentDefinition.hostVars || 0,
            hostAttrs: componentDefinition.hostAttrs || null,
            contentQueries: componentDefinition.contentQueries || null,
            declaredInputs: declaredInputs,
            inputs: null,
            outputs: null,
            exportAs: componentDefinition.exportAs || null,
            onPush: componentDefinition.changeDetection === ChangeDetectionStrategy.OnPush,
            directiveDefs: null,
            pipeDefs: null,
            selectors: componentDefinition.selectors || EMPTY_ARRAY,
            viewQuery: componentDefinition.viewQuery || null,
            features: componentDefinition.features || null,
            data: componentDefinition.data || {},
            // TODO(misko): convert ViewEncapsulation into const enum so that it can be used
            // directly in the next line. Also `None` should be 0 not 2.
            encapsulation: componentDefinition.encapsulation || ViewEncapsulation.Emulated,
            id: 'c',
            styles: componentDefinition.styles || EMPTY_ARRAY,
            _: null,
            setInput: null,
            schemas: componentDefinition.schemas || null,
            tView: null
          };
          var directiveTypes = componentDefinition.directives;
          var feature = componentDefinition.features;
          var pipeTypes = componentDefinition.pipes;
          def.id += _renderCompCount++;
          def.inputs = invertObject(componentDefinition.inputs, declaredInputs), def.outputs = invertObject(componentDefinition.outputs), feature && feature.forEach(function (fn) {
            return fn(def);
          });
          def.directiveDefs = directiveTypes ? function () {
            return (typeof directiveTypes === 'function' ? directiveTypes() : directiveTypes).map(extractDirectiveDef);
          } : null;
          def.pipeDefs = pipeTypes ? function () {
            return (typeof pipeTypes === 'function' ? pipeTypes() : pipeTypes).map(extractPipeDef);
          } : null;
          return def;
        });
      }
      /**
       * Generated next to NgModules to monkey-patch directive and pipe references onto a component's
       * definition, when generating a direct reference in the component file would otherwise create an
       * import cycle.
       *
       * See [this explanation](https://hackmd.io/Odw80D0pR6yfsOjg_7XCJg?view) for more details.
       *
       * @codeGenApi
       */


      function ɵɵsetComponentScope(type, directives, pipes) {
        var def = type.ɵcmp;

        def.directiveDefs = function () {
          return directives.map(extractDirectiveDef);
        };

        def.pipeDefs = function () {
          return pipes.map(extractPipeDef);
        };
      }

      function extractDirectiveDef(type) {
        var def = getComponentDef(type) || getDirectiveDef(type);

        if (ngDevMode && !def) {
          throw new Error("'".concat(type.name, "' is neither 'ComponentType' or 'DirectiveType'."));
        }

        return def;
      }

      function extractPipeDef(type) {
        var def = getPipeDef(type);

        if (ngDevMode && !def) {
          throw new Error("'".concat(type.name, "' is not a 'PipeType'."));
        }

        return def;
      }

      var autoRegisterModuleById = {};
      /**
       * @codeGenApi
       */

      function ɵɵdefineNgModule(def) {
        var res = {
          type: def.type,
          bootstrap: def.bootstrap || EMPTY_ARRAY,
          declarations: def.declarations || EMPTY_ARRAY,
          imports: def.imports || EMPTY_ARRAY,
          exports: def.exports || EMPTY_ARRAY,
          transitiveCompileScopes: null,
          schemas: def.schemas || null,
          id: def.id || null
        };

        if (def.id != null) {
          noSideEffects(function () {
            autoRegisterModuleById[def.id] = def.type;
          });
        }

        return res;
      }
      /**
       * Adds the module metadata that is necessary to compute the module's transitive scope to an
       * existing module definition.
       *
       * Scope metadata of modules is not used in production builds, so calls to this function can be
       * marked pure to tree-shake it from the bundle, allowing for all referenced declarations
       * to become eligible for tree-shaking as well.
       *
       * @codeGenApi
       */


      function ɵɵsetNgModuleScope(type, scope) {
        return noSideEffects(function () {
          var ngModuleDef = getNgModuleDef(type, true);
          ngModuleDef.declarations = scope.declarations || EMPTY_ARRAY;
          ngModuleDef.imports = scope.imports || EMPTY_ARRAY;
          ngModuleDef.exports = scope.exports || EMPTY_ARRAY;
        });
      }
      /**
       * Inverts an inputs or outputs lookup such that the keys, which were the
       * minified keys, are part of the values, and the values are parsed so that
       * the publicName of the property is the new key
       *
       * e.g. for
       *
       * ```
       * class Comp {
       *   @Input()
       *   propName1: string;
       *
       *   @Input('publicName2')
       *   declaredPropName2: number;
       * }
       * ```
       *
       * will be serialized as
       *
       * ```
       * {
       *   propName1: 'propName1',
       *   declaredPropName2: ['publicName2', 'declaredPropName2'],
       * }
       * ```
       *
       * which is than translated by the minifier as:
       *
       * ```
       * {
       *   minifiedPropName1: 'propName1',
       *   minifiedPropName2: ['publicName2', 'declaredPropName2'],
       * }
       * ```
       *
       * becomes: (public name => minifiedName)
       *
       * ```
       * {
       *  'propName1': 'minifiedPropName1',
       *  'publicName2': 'minifiedPropName2',
       * }
       * ```
       *
       * Optionally the function can take `secondary` which will result in: (public name => declared name)
       *
       * ```
       * {
       *  'propName1': 'propName1',
       *  'publicName2': 'declaredPropName2',
       * }
       * ```
       *
      
       */


      function invertObject(obj, secondary) {
        if (obj == null) return EMPTY_OBJ;
        var newLookup = {};

        for (var minifiedKey in obj) {
          if (obj.hasOwnProperty(minifiedKey)) {
            var publicName = obj[minifiedKey];
            var declaredName = publicName;

            if (Array.isArray(publicName)) {
              declaredName = publicName[1];
              publicName = publicName[0];
            }

            newLookup[publicName] = minifiedKey;

            if (secondary) {
              secondary[publicName] = declaredName;
            }
          }
        }

        return newLookup;
      }
      /**
       * Create a directive definition object.
       *
       * # Example
       * ```ts
       * class MyDirective {
       *   // Generated by Angular Template Compiler
       *   // [Symbol] syntax will not be supported by TypeScript until v2.7
       *   static ɵdir = ɵɵdefineDirective({
       *     ...
       *   });
       * }
       * ```
       *
       * @codeGenApi
       */


      var ɵɵdefineDirective = ɵɵdefineComponent;
      /**
       * Create a pipe definition object.
       *
       * # Example
       * ```
       * class MyPipe implements PipeTransform {
       *   // Generated by Angular Template Compiler
       *   static ɵpipe = definePipe({
       *     ...
       *   });
       * }
       * ```
       * @param pipeDef Pipe definition generated by the compiler
       *
       * @codeGenApi
       */

      function ɵɵdefinePipe(pipeDef) {
        return {
          type: pipeDef.type,
          name: pipeDef.name,
          factory: null,
          pure: pipeDef.pure !== false,
          onDestroy: pipeDef.type.prototype.ngOnDestroy || null
        };
      }
      /**
       * The following getter methods retrieve the definition from the type. Currently the retrieval
       * honors inheritance, but in the future we may change the rule to require that definitions are
       * explicit. This would require some sort of migration strategy.
       */


      function getComponentDef(type) {
        return type[NG_COMP_DEF] || null;
      }

      function getDirectiveDef(type) {
        return type[NG_DIR_DEF] || null;
      }

      function getPipeDef(type) {
        return type[NG_PIPE_DEF] || null;
      }

      function getNgModuleDef(type, throwNotFound) {
        var ngModuleDef = type[NG_MOD_DEF] || null;

        if (!ngModuleDef && throwNotFound === true) {
          throw new Error("Type ".concat(stringify(type), " does not have '\u0275mod' property."));
        }

        return ngModuleDef;
      }

      function getNgLocaleIdDef(type) {
        return type[NG_LOC_ID_DEF] || null;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // Below are constants for LView indices to help us look up LView members
      // without having to remember the specific indices.
      // Uglify will inline these when minifying so there shouldn't be a cost.


      var HOST = 0;
      var TVIEW = 1;
      var FLAGS = 2;
      var PARENT = 3;
      var NEXT = 4;
      var TRANSPLANTED_VIEWS_TO_REFRESH = 5;
      var T_HOST = 6;
      var CLEANUP = 7;
      var CONTEXT = 8;
      var INJECTOR = 9;
      var RENDERER_FACTORY = 10;
      var RENDERER = 11;
      var SANITIZER = 12;
      var CHILD_HEAD = 13;
      var CHILD_TAIL = 14; // FIXME(misko): Investigate if the three declarations aren't all same thing.

      var DECLARATION_VIEW = 15;
      var DECLARATION_COMPONENT_VIEW = 16;
      var DECLARATION_LCONTAINER = 17;
      var PREORDER_HOOK_FLAGS = 18;
      var QUERIES = 19;
      /**
       * Size of LView's header. Necessary to adjust for it when setting slots.
       *
       * IMPORTANT: `HEADER_OFFSET` should only be referred to the in the `ɵɵ*` instructions to translate
       * instruction index into `LView` index. All other indexes should be in the `LView` index space and
       * there should be no need to refer to `HEADER_OFFSET` anywhere else.
       */

      var HEADER_OFFSET = 20;
      /**
       * Converts `TViewType` into human readable text.
       * Make sure this matches with `TViewType`
       */

      var TViewTypeAsString = ['Root', 'Component', 'Embedded']; // Note: This hack is necessary so we don't erroneously get a circular dependency
      // failure based on types.

      var unusedValueExportToPlacateAjd = 1;
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Special location which allows easy identification of type. If we have an array which was
       * retrieved from the `LView` and that array has `true` at `TYPE` location, we know it is
       * `LContainer`.
       */

      var TYPE = 1;
      /**
       * Below are constants for LContainer indices to help us look up LContainer members
       * without having to remember the specific indices.
       * Uglify will inline these when minifying so there shouldn't be a cost.
       */

      /**
       * Flag to signify that this `LContainer` may have transplanted views which need to be change
       * detected. (see: `LView[DECLARATION_COMPONENT_VIEW])`.
       *
       * This flag, once set, is never unset for the `LContainer`. This means that when unset we can skip
       * a lot of work in `refreshEmbeddedViews`. But when set we still need to verify
       * that the `MOVED_VIEWS` are transplanted and on-push.
       */

      var HAS_TRANSPLANTED_VIEWS = 2; // PARENT, NEXT, TRANSPLANTED_VIEWS_TO_REFRESH are indices 3, 4, and 5
      // As we already have these constants in LView, we don't need to re-create them.
      // T_HOST is index 6
      // We already have this constants in LView, we don't need to re-create it.

      var NATIVE = 7;
      var VIEW_REFS = 8;
      var MOVED_VIEWS = 9;
      /**
       * Size of LContainer's header. Represents the index after which all views in the
       * container will be inserted. We need to keep a record of current views so we know
       * which views are already in the DOM (and don't need to be re-added) and so we can
       * remove views from the DOM when they are no longer required.
       */

      var CONTAINER_HEADER_OFFSET = 10; // Note: This hack is necessary so we don't erroneously get a circular dependency
      // failure based on types.

      var unusedValueExportToPlacateAjd$1 = 1;
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * True if `value` is `LView`.
       * @param value wrapped value of `RNode`, `LView`, `LContainer`
       */

      function isLView(value) {
        return Array.isArray(value) && typeof value[TYPE] === 'object';
      }
      /**
       * True if `value` is `LContainer`.
       * @param value wrapped value of `RNode`, `LView`, `LContainer`
       */


      function isLContainer(value) {
        return Array.isArray(value) && value[TYPE] === true;
      }

      function isContentQueryHost(tNode) {
        return (tNode.flags & 8
        /* hasContentQuery */
        ) !== 0;
      }

      function isComponentHost(tNode) {
        return (tNode.flags & 2
        /* isComponentHost */
        ) === 2
        /* isComponentHost */
        ;
      }

      function isDirectiveHost(tNode) {
        return (tNode.flags & 1
        /* isDirectiveHost */
        ) === 1
        /* isDirectiveHost */
        ;
      }

      function isComponentDef(def) {
        return def.template !== null;
      }

      function isRootView(target) {
        return (target[FLAGS] & 512
        /* IsRoot */
        ) !== 0;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // [Assert functions do not constraint type when they are guarded by a truthy
      // expression.](https://github.com/microsoft/TypeScript/issues/37295)


      function assertTNodeForLView(tNode, lView) {
        assertTNodeForTView(tNode, lView[TVIEW]);
      }

      function assertTNodeForTView(tNode, tView) {
        assertTNode(tNode);
        tNode.hasOwnProperty('tView_') && assertEqual(tNode.tView_, tView, 'This TNode does not belong to this TView.');
      }

      function assertTNode(tNode) {
        assertDefined(tNode, 'TNode must be defined');

        if (!(tNode && typeof tNode === 'object' && tNode.hasOwnProperty('directiveStylingLast'))) {
          throwError('Not of type TNode, got: ' + tNode);
        }
      }

      function assertTIcu(tIcu) {
        assertDefined(tIcu, 'Expected TIcu to be defined');

        if (!(typeof tIcu.currentCaseLViewIndex === 'number')) {
          throwError('Object is not of TIcu type.');
        }
      }

      function assertComponentType(actual) {
        var msg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Type passed in is not ComponentType, it does not have \'ɵcmp\' property.';

        if (!getComponentDef(actual)) {
          throwError(msg);
        }
      }

      function assertNgModuleType(actual) {
        var msg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Type passed in is not NgModuleType, it does not have \'ɵmod\' property.';

        if (!getNgModuleDef(actual)) {
          throwError(msg);
        }
      }

      function assertCurrentTNodeIsParent(isParent) {
        assertEqual(isParent, true, 'currentTNode should be a parent');
      }

      function assertHasParent(tNode) {
        assertDefined(tNode, 'currentTNode should exist!');
        assertDefined(tNode.parent, 'currentTNode should have a parent');
      }

      function assertDataNext(lView, index, arr) {
        if (arr == null) arr = lView;
        assertEqual(arr.length, index, "index ".concat(index, " expected to be at the end of arr (length ").concat(arr.length, ")"));
      }

      function assertLContainer(value) {
        assertDefined(value, 'LContainer must be defined');
        assertEqual(isLContainer(value), true, 'Expecting LContainer');
      }

      function assertLViewOrUndefined(value) {
        value && assertEqual(isLView(value), true, 'Expecting LView or undefined or null');
      }

      function assertLView(value) {
        assertDefined(value, 'LView must be defined');
        assertEqual(isLView(value), true, 'Expecting LView');
      }

      function assertFirstCreatePass(tView, errMessage) {
        assertEqual(tView.firstCreatePass, true, errMessage || 'Should only be called in first create pass.');
      }

      function assertFirstUpdatePass(tView, errMessage) {
        assertEqual(tView.firstUpdatePass, true, errMessage || 'Should only be called in first update pass.');
      }
      /**
       * This is a basic sanity check that an object is probably a directive def. DirectiveDef is
       * an interface, so we can't do a direct instanceof check.
       */


      function assertDirectiveDef(obj) {
        if (obj.type === undefined || obj.selectors == undefined || obj.inputs === undefined) {
          throwError("Expected a DirectiveDef/ComponentDef and this object does not seem to have the expected shape.");
        }
      }

      function assertIndexInDeclRange(lView, index) {
        var tView = lView[1];
        assertBetween(HEADER_OFFSET, tView.bindingStartIndex, index);
      }

      function assertIndexInVarsRange(lView, index) {
        var tView = lView[1];
        assertBetween(tView.bindingStartIndex, tView.expandoStartIndex, index);
      }

      function assertIndexInExpandoRange(lView, index) {
        var tView = lView[1];
        assertBetween(tView.expandoStartIndex, lView.length, index);
      }

      function assertBetween(lower, upper, index) {
        if (!(lower <= index && index < upper)) {
          throwError("Index out of range (expecting ".concat(lower, " <= ").concat(index, " < ").concat(upper, ")"));
        }
      }

      function assertProjectionSlots(lView, errMessage) {
        assertDefined(lView[DECLARATION_COMPONENT_VIEW], 'Component views should exist.');
        assertDefined(lView[DECLARATION_COMPONENT_VIEW][T_HOST].projection, errMessage || 'Components with projection nodes (<ng-content>) must have projection slots defined.');
      }

      function assertParentView(lView, errMessage) {
        assertDefined(lView, errMessage || 'Component views should always have a parent view (component\'s host view)');
      }
      /**
       * This is a basic sanity check that the `injectorIndex` seems to point to what looks like a
       * NodeInjector data structure.
       *
       * @param lView `LView` which should be checked.
       * @param injectorIndex index into the `LView` where the `NodeInjector` is expected.
       */


      function assertNodeInjector(lView, injectorIndex) {
        assertIndexInExpandoRange(lView, injectorIndex);
        assertIndexInExpandoRange(lView, injectorIndex + 8
        /* PARENT */
        );
        assertNumber(lView[injectorIndex + 0], 'injectorIndex should point to a bloom filter');
        assertNumber(lView[injectorIndex + 1], 'injectorIndex should point to a bloom filter');
        assertNumber(lView[injectorIndex + 2], 'injectorIndex should point to a bloom filter');
        assertNumber(lView[injectorIndex + 3], 'injectorIndex should point to a bloom filter');
        assertNumber(lView[injectorIndex + 4], 'injectorIndex should point to a bloom filter');
        assertNumber(lView[injectorIndex + 5], 'injectorIndex should point to a bloom filter');
        assertNumber(lView[injectorIndex + 6], 'injectorIndex should point to a bloom filter');
        assertNumber(lView[injectorIndex + 7], 'injectorIndex should point to a bloom filter');
        assertNumber(lView[injectorIndex + 8
        /* PARENT */
        ], 'injectorIndex should point to parent injector');
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function getFactoryDef(type, throwNotFound) {
        var hasFactoryDef = type.hasOwnProperty(NG_FACTORY_DEF);

        if (!hasFactoryDef && throwNotFound === true && ngDevMode) {
          throw new Error("Type ".concat(stringify(type), " does not have '\u0275fac' property."));
        }

        return hasFactoryDef ? type[NG_FACTORY_DEF] : null;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // Base URL for the error details page.
      // Keep this value in sync with a similar const in
      // `packages/compiler-cli/src/ngtsc/diagnostics/src/error_code.ts`.


      var ERROR_DETAILS_PAGE_BASE_URL = 'https://angular.io/errors';

      var RuntimeError = /*#__PURE__*/function (_Error) {
        _inherits2(RuntimeError, _Error);

        var _super302 = _createSuper(RuntimeError);

        function RuntimeError(code, message) {
          var _this711;

          _classCallCheck2(this, RuntimeError);

          _this711 = _super302.call(this, formatRuntimeError(code, message));
          _this711.code = code;
          return _this711;
        }

        return RuntimeError;
      }( /*#__PURE__*/_wrapNativeSuper(Error)); // Contains a set of error messages that have details guides at angular.io.
      // Full list of available error guides can be found at https://angular.io/errors

      /* tslint:disable:no-toplevel-property-access */


      var RUNTIME_ERRORS_WITH_GUIDES = new Set(["100"
      /* EXPRESSION_CHANGED_AFTER_CHECKED */
      , "200"
      /* CYCLIC_DI_DEPENDENCY */
      , "201"
      /* PROVIDER_NOT_FOUND */
      , "300"
      /* MULTIPLE_COMPONENTS_MATCH */
      , "301"
      /* EXPORT_NOT_FOUND */
      , "302"
      /* PIPE_NOT_FOUND */
      ]);
      /* tslint:enable:no-toplevel-property-access */

      /** Called to format a runtime error */

      function formatRuntimeError(code, message) {
        var fullCode = code ? "NG0".concat(code, ": ") : '';
        var errorMessage = "".concat(fullCode).concat(message); // Some runtime errors are still thrown without `ngDevMode` (for example
        // `throwProviderNotFoundError`), so we add `ngDevMode` check here to avoid pulling
        // `RUNTIME_ERRORS_WITH_GUIDES` symbol into prod bundles.
        // TODO: revisit all instances where `RuntimeError` is thrown and see if `ngDevMode` can be added
        // there instead to tree-shake more devmode-only code (and eventually remove `ngDevMode` check
        // from this code).

        if (ngDevMode && RUNTIME_ERRORS_WITH_GUIDES.has(code)) {
          errorMessage = "".concat(errorMessage, ". Find more at ").concat(ERROR_DETAILS_PAGE_BASE_URL, "/NG0").concat(code);
        }

        return errorMessage;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Used for stringify render output in Ivy.
       * Important! This function is very performance-sensitive and we should
       * be extra careful not to introduce megamorphic reads in it.
       * Check `core/test/render3/perf/render_stringify` for benchmarks and alternate implementations.
       */


      function renderStringify(value) {
        if (typeof value === 'string') return value;
        if (value == null) return ''; // Use `String` so that it invokes the `toString` method of the value. Note that this
        // appears to be faster than calling `value.toString` (see `render_stringify` benchmark).

        return String(value);
      }
      /**
       * Used to stringify a value so that it can be displayed in an error message.
       * Important! This function contains a megamorphic read and should only be
       * used for error messages.
       */


      function stringifyForError(value) {
        if (typeof value === 'function') return value.name || value.toString();

        if (typeof value === 'object' && value != null && typeof value.type === 'function') {
          return value.type.name || value.type.toString();
        }

        return renderStringify(value);
      }
      /** Called when directives inject each other (creating a circular dependency) */


      function throwCyclicDependencyError(token, path) {
        var depPath = path ? ". Dependency path: ".concat(path.join(' > '), " > ").concat(token) : '';
        throw new RuntimeError("200"
        /* CYCLIC_DI_DEPENDENCY */
        , "Circular dependency in DI detected for ".concat(token).concat(depPath));
      }

      function throwMixedMultiProviderError() {
        throw new Error("Cannot mix multi providers and regular providers");
      }

      function throwInvalidProviderError(ngModuleType, providers, provider) {
        var ngModuleDetail = '';

        if (ngModuleType && providers) {
          var providerDetail = providers.map(function (v) {
            return v == provider ? '?' + provider + '?' : '...';
          });
          ngModuleDetail = " - only instances of Provider and Type are allowed, got: [".concat(providerDetail.join(', '), "]");
        }

        throw new Error("Invalid provider for the NgModule '".concat(stringify(ngModuleType), "'") + ngModuleDetail);
      }
      /** Throws an error when a token is not found in DI. */


      function throwProviderNotFoundError(token, injectorName) {
        var injectorDetails = injectorName ? " in ".concat(injectorName) : '';
        throw new RuntimeError("201"
        /* PROVIDER_NOT_FOUND */
        , "No provider for ".concat(stringifyForError(token), " found").concat(injectorDetails));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Represents a basic change from a previous to a new value for a single
       * property on a directive instance. Passed as a value in a
       * {@link SimpleChanges} object to the `ngOnChanges` hook.
       *
       * @see `OnChanges`
       *
       * @publicApi
       */


      var SimpleChange = /*#__PURE__*/function () {
        function SimpleChange(previousValue, currentValue, firstChange) {
          _classCallCheck2(this, SimpleChange);

          this.previousValue = previousValue;
          this.currentValue = currentValue;
          this.firstChange = firstChange;
        }
        /**
         * Check whether the new value is the first value assigned.
         */


        _createClass2(SimpleChange, [{
          key: "isFirstChange",
          value: function isFirstChange() {
            return this.firstChange;
          }
        }]);

        return SimpleChange;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * The NgOnChangesFeature decorates a component with support for the ngOnChanges
       * lifecycle hook, so it should be included in any component that implements
       * that hook.
       *
       * If the component or directive uses inheritance, the NgOnChangesFeature MUST
       * be included as a feature AFTER {@link InheritDefinitionFeature}, otherwise
       * inherited properties will not be propagated to the ngOnChanges lifecycle
       * hook.
       *
       * Example usage:
       *
       * ```
       * static ɵcmp = defineComponent({
       *   ...
       *   inputs: {name: 'publicName'},
       *   features: [NgOnChangesFeature]
       * });
       * ```
       *
       * @codeGenApi
       */


      function ɵɵNgOnChangesFeature() {
        return NgOnChangesFeatureImpl;
      }

      function NgOnChangesFeatureImpl(definition) {
        if (definition.type.prototype.ngOnChanges) {
          definition.setInput = ngOnChangesSetInput;
        }

        return rememberChangeHistoryAndInvokeOnChangesHook;
      } // This option ensures that the ngOnChanges lifecycle hook will be inherited
      // from superclasses (in InheritDefinitionFeature).

      /** @nocollapse */
      // tslint:disable-next-line:no-toplevel-property-access


      ɵɵNgOnChangesFeature.ngInherit = true;
      /**
       * This is a synthetic lifecycle hook which gets inserted into `TView.preOrderHooks` to simulate
       * `ngOnChanges`.
       *
       * The hook reads the `NgSimpleChangesStore` data from the component instance and if changes are
       * found it invokes `ngOnChanges` on the component instance.
       *
       * @param this Component instance. Because this function gets inserted into `TView.preOrderHooks`,
       *     it is guaranteed to be called with component instance.
       */

      function rememberChangeHistoryAndInvokeOnChangesHook() {
        var simpleChangesStore = getSimpleChangesStore(this);
        var current = simpleChangesStore === null || simpleChangesStore === void 0 ? void 0 : simpleChangesStore.current;

        if (current) {
          var previous = simpleChangesStore.previous;

          if (previous === EMPTY_OBJ) {
            simpleChangesStore.previous = current;
          } else {
            // New changes are copied to the previous store, so that we don't lose history for inputs
            // which were not changed this time
            for (var key in current) {
              previous[key] = current[key];
            }
          }

          simpleChangesStore.current = null;
          this.ngOnChanges(current);
        }
      }

      function ngOnChangesSetInput(instance, value, publicName, privateName) {
        var simpleChangesStore = getSimpleChangesStore(instance) || setSimpleChangesStore(instance, {
          previous: EMPTY_OBJ,
          current: null
        });
        var current = simpleChangesStore.current || (simpleChangesStore.current = {});
        var previous = simpleChangesStore.previous;
        var declaredName = this.declaredInputs[publicName];
        var previousChange = previous[declaredName];
        current[declaredName] = new SimpleChange(previousChange && previousChange.currentValue, value, previous === EMPTY_OBJ);
        instance[privateName] = value;
      }

      var SIMPLE_CHANGES_STORE = '__ngSimpleChanges__';

      function getSimpleChangesStore(instance) {
        return instance[SIMPLE_CHANGES_STORE] || null;
      }

      function setSimpleChangesStore(instance, store) {
        return instance[SIMPLE_CHANGES_STORE] = store;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var SVG_NAMESPACE = 'http://www.w3.org/2000/svg';
      var MATH_ML_NAMESPACE = 'http://www.w3.org/1998/MathML/';
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * This property will be monkey-patched on elements, components and directives
       */

      var MONKEY_PATCH_KEY_NAME = '__ngContext__';
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Most of the use of `document` in Angular is from within the DI system so it is possible to simply
       * inject the `DOCUMENT` token and are done.
       *
       * Ivy is special because it does not rely upon the DI and must get hold of the document some other
       * way.
       *
       * The solution is to define `getDocument()` and `setDocument()` top-level functions for ivy.
       * Wherever ivy needs the global document, it calls `getDocument()` instead.
       *
       * When running ivy outside of a browser environment, it is necessary to call `setDocument()` to
       * tell ivy what the global `document` is.
       *
       * Angular does this for us in each of the standard platforms (`Browser`, `Server`, and `WebWorker`)
       * by calling `setDocument()` when providing the `DOCUMENT` token.
       */

      var DOCUMENT = undefined;
      /**
       * Tell ivy what the `document` is for this platform.
       *
       * It is only necessary to call this if the current platform is not a browser.
       *
       * @param document The object representing the global `document` in this environment.
       */

      function setDocument(document) {
        DOCUMENT = document;
      }
      /**
       * Access the object that represents the `document` for this platform.
       *
       * Ivy calls this whenever it needs to access the `document` object.
       * For example to create the renderer or to do sanitization.
       */


      function getDocument() {
        if (DOCUMENT !== undefined) {
          return DOCUMENT;
        } else if (typeof document !== 'undefined') {
          return document;
        } // No "document" can be found. This should only happen if we are running ivy outside Angular and
        // the current platform is not a browser. Since this is not a supported scenario at the moment
        // this should not happen in Angular apps.
        // Once we support running ivy outside of Angular we will need to publish `setDocument()` as a
        // public API. Meanwhile we just return `undefined` and let the application fail.


        return undefined;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // TODO: cleanup once the code is merged in angular/angular


      var RendererStyleFlags3;

      (function (RendererStyleFlags3) {
        RendererStyleFlags3[RendererStyleFlags3["Important"] = 1] = "Important";
        RendererStyleFlags3[RendererStyleFlags3["DashCase"] = 2] = "DashCase";
      })(RendererStyleFlags3 || (RendererStyleFlags3 = {}));
      /** Returns whether the `renderer` is a `ProceduralRenderer3` */


      function isProceduralRenderer(renderer) {
        return !!renderer.listen;
      }

      var ɵ0 = function ɵ0(hostElement, rendererType) {
        return getDocument();
      };

      var domRendererFactory3 = {
        createRenderer: ɵ0
      }; // Note: This hack is necessary so we don't erroneously get a circular dependency
      // failure based on types.

      var unusedValueExportToPlacateAjd$2 = 1;
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * For efficiency reasons we often put several different data types (`RNode`, `LView`, `LContainer`)
       * in same location in `LView`. This is because we don't want to pre-allocate space for it
       * because the storage is sparse. This file contains utilities for dealing with such data types.
       *
       * How do we know what is stored at a given location in `LView`.
       * - `Array.isArray(value) === false` => `RNode` (The normal storage value)
       * - `Array.isArray(value) === true` => then the `value[0]` represents the wrapped value.
       *   - `typeof value[TYPE] === 'object'` => `LView`
       *      - This happens when we have a component at a given location
       *   - `typeof value[TYPE] === true` => `LContainer`
       *      - This happens when we have `LContainer` binding at a given location.
       *
       *
       * NOTE: it is assumed that `Array.isArray` and `typeof` operations are very efficient.
       */

      /**
       * Returns `RNode`.
       * @param value wrapped value of `RNode`, `LView`, `LContainer`
       */

      function unwrapRNode(value) {
        while (Array.isArray(value)) {
          value = value[HOST];
        }

        return value;
      }
      /**
       * Returns `LView` or `null` if not found.
       * @param value wrapped value of `RNode`, `LView`, `LContainer`
       */


      function unwrapLView(value) {
        while (Array.isArray(value)) {
          // This check is same as `isLView()` but we don't call at as we don't want to call
          // `Array.isArray()` twice and give JITer more work for inlining.
          if (typeof value[TYPE] === 'object') return value;
          value = value[HOST];
        }

        return null;
      }
      /**
       * Returns `LContainer` or `null` if not found.
       * @param value wrapped value of `RNode`, `LView`, `LContainer`
       */


      function unwrapLContainer(value) {
        while (Array.isArray(value)) {
          // This check is same as `isLContainer()` but we don't call at as we don't want to call
          // `Array.isArray()` twice and give JITer more work for inlining.
          if (value[TYPE] === true) return value;
          value = value[HOST];
        }

        return null;
      }
      /**
       * Retrieves an element value from the provided `viewData`, by unwrapping
       * from any containers, component views, or style contexts.
       */


      function getNativeByIndex(index, lView) {
        ngDevMode && assertIndexInRange(lView, index);
        ngDevMode && assertGreaterThanOrEqual(index, HEADER_OFFSET, 'Expected to be past HEADER_OFFSET');
        return unwrapRNode(lView[index]);
      }
      /**
       * Retrieve an `RNode` for a given `TNode` and `LView`.
       *
       * This function guarantees in dev mode to retrieve a non-null `RNode`.
       *
       * @param tNode
       * @param lView
       */


      function getNativeByTNode(tNode, lView) {
        ngDevMode && assertTNodeForLView(tNode, lView);
        ngDevMode && assertIndexInRange(lView, tNode.index);
        var node = unwrapRNode(lView[tNode.index]);
        ngDevMode && !isProceduralRenderer(lView[RENDERER]) && assertDomNode(node);
        return node;
      }
      /**
       * Retrieve an `RNode` or `null` for a given `TNode` and `LView`.
       *
       * Some `TNode`s don't have associated `RNode`s. For example `Projection`
       *
       * @param tNode
       * @param lView
       */


      function getNativeByTNodeOrNull(tNode, lView) {
        var index = tNode === null ? -1 : tNode.index;

        if (index !== -1) {
          ngDevMode && assertTNodeForLView(tNode, lView);
          var node = unwrapRNode(lView[index]);
          ngDevMode && node !== null && !isProceduralRenderer(lView[RENDERER]) && assertDomNode(node);
          return node;
        }

        return null;
      } // fixme(misko): The return Type should be `TNode|null`


      function getTNode(tView, index) {
        ngDevMode && assertGreaterThan(index, -1, 'wrong index for TNode');
        ngDevMode && assertLessThan(index, tView.data.length, 'wrong index for TNode');
        var tNode = tView.data[index];
        ngDevMode && tNode !== null && assertTNode(tNode);
        return tNode;
      }
      /** Retrieves a value from any `LView` or `TData`. */


      function load(view, index) {
        ngDevMode && assertIndexInRange(view, index);
        return view[index];
      }

      function getComponentLViewByIndex(nodeIndex, hostView) {
        // Could be an LView or an LContainer. If LContainer, unwrap to find LView.
        ngDevMode && assertIndexInRange(hostView, nodeIndex);
        var slotValue = hostView[nodeIndex];
        var lView = isLView(slotValue) ? slotValue : slotValue[HOST];
        return lView;
      }
      /**
       * Returns the monkey-patch value data present on the target (which could be
       * a component, directive or a DOM node).
       */


      function readPatchedData(target) {
        ngDevMode && assertDefined(target, 'Target expected');
        return target[MONKEY_PATCH_KEY_NAME] || null;
      }

      function readPatchedLView(target) {
        var value = readPatchedData(target);

        if (value) {
          return Array.isArray(value) ? value : value.lView;
        }

        return null;
      }
      /** Checks whether a given view is in creation mode */


      function isCreationMode(view) {
        return (view[FLAGS] & 4
        /* CreationMode */
        ) === 4
        /* CreationMode */
        ;
      }
      /**
       * Returns a boolean for whether the view is attached to the change detection tree.
       *
       * Note: This determines whether a view should be checked, not whether it's inserted
       * into a container. For that, you'll want `viewAttachedToContainer` below.
       */


      function viewAttachedToChangeDetector(view) {
        return (view[FLAGS] & 128
        /* Attached */
        ) === 128
        /* Attached */
        ;
      }
      /** Returns a boolean for whether the view is attached to a container. */


      function viewAttachedToContainer(view) {
        return isLContainer(view[PARENT]);
      }

      function getConstant(consts, index) {
        if (index === null || index === undefined) return null;
        ngDevMode && assertIndexInRange(consts, index);
        return consts[index];
      }
      /**
       * Resets the pre-order hook flags of the view.
       * @param lView the LView on which the flags are reset
       */


      function resetPreOrderHookFlags(lView) {
        lView[PREORDER_HOOK_FLAGS] = 0;
      }
      /**
       * Updates the `TRANSPLANTED_VIEWS_TO_REFRESH` counter on the `LContainer` as well as the parents
       * whose
       *  1. counter goes from 0 to 1, indicating that there is a new child that has a view to refresh
       *  or
       *  2. counter goes from 1 to 0, indicating there are no more descendant views to refresh
       */


      function updateTransplantedViewCount(lContainer, amount) {
        lContainer[TRANSPLANTED_VIEWS_TO_REFRESH] += amount;
        var viewOrContainer = lContainer;
        var parent = lContainer[PARENT];

        while (parent !== null && (amount === 1 && viewOrContainer[TRANSPLANTED_VIEWS_TO_REFRESH] === 1 || amount === -1 && viewOrContainer[TRANSPLANTED_VIEWS_TO_REFRESH] === 0)) {
          parent[TRANSPLANTED_VIEWS_TO_REFRESH] += amount;
          viewOrContainer = parent;
          parent = parent[PARENT];
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var instructionState = {
        lFrame: createLFrame(null),
        bindingsEnabled: true,
        isInCheckNoChangesMode: false
      };
      /**
       * Returns true if the instruction state stack is empty.
       *
       * Intended to be called from tests only (tree shaken otherwise).
       */

      function specOnlyIsInstructionStateEmpty() {
        return instructionState.lFrame.parent === null;
      }

      function getElementDepthCount() {
        return instructionState.lFrame.elementDepthCount;
      }

      function increaseElementDepthCount() {
        instructionState.lFrame.elementDepthCount++;
      }

      function decreaseElementDepthCount() {
        instructionState.lFrame.elementDepthCount--;
      }

      function getBindingsEnabled() {
        return instructionState.bindingsEnabled;
      }
      /**
       * Enables directive matching on elements.
       *
       *  * Example:
       * ```
       * <my-comp my-directive>
       *   Should match component / directive.
       * </my-comp>
       * <div ngNonBindable>
       *   <!-- ɵɵdisableBindings() -->
       *   <my-comp my-directive>
       *     Should not match component / directive because we are in ngNonBindable.
       *   </my-comp>
       *   <!-- ɵɵenableBindings() -->
       * </div>
       * ```
       *
       * @codeGenApi
       */


      function ɵɵenableBindings() {
        instructionState.bindingsEnabled = true;
      }
      /**
       * Disables directive matching on element.
       *
       *  * Example:
       * ```
       * <my-comp my-directive>
       *   Should match component / directive.
       * </my-comp>
       * <div ngNonBindable>
       *   <!-- ɵɵdisableBindings() -->
       *   <my-comp my-directive>
       *     Should not match component / directive because we are in ngNonBindable.
       *   </my-comp>
       *   <!-- ɵɵenableBindings() -->
       * </div>
       * ```
       *
       * @codeGenApi
       */


      function ɵɵdisableBindings() {
        instructionState.bindingsEnabled = false;
      }
      /**
       * Return the current `LView`.
       */


      function getLView() {
        return instructionState.lFrame.lView;
      }
      /**
       * Return the current `TView`.
       */


      function getTView() {
        return instructionState.lFrame.tView;
      }
      /**
       * Restores `contextViewData` to the given OpaqueViewState instance.
       *
       * Used in conjunction with the getCurrentView() instruction to save a snapshot
       * of the current view and restore it when listeners are invoked. This allows
       * walking the declaration view tree in listeners to get vars from parent views.
       *
       * @param viewToRestore The OpaqueViewState instance to restore.
       *
       * @codeGenApi
       */


      function ɵɵrestoreView(viewToRestore) {
        instructionState.lFrame.contextLView = viewToRestore;
      }

      function getCurrentTNode() {
        var currentTNode = getCurrentTNodePlaceholderOk();

        while (currentTNode !== null && currentTNode.type === 64
        /* Placeholder */
        ) {
          currentTNode = currentTNode.parent;
        }

        return currentTNode;
      }

      function getCurrentTNodePlaceholderOk() {
        return instructionState.lFrame.currentTNode;
      }

      function getCurrentParentTNode() {
        var lFrame = instructionState.lFrame;
        var currentTNode = lFrame.currentTNode;
        return lFrame.isParent ? currentTNode : currentTNode.parent;
      }

      function setCurrentTNode(tNode, isParent) {
        ngDevMode && tNode && assertTNodeForTView(tNode, instructionState.lFrame.tView);
        var lFrame = instructionState.lFrame;
        lFrame.currentTNode = tNode;
        lFrame.isParent = isParent;
      }

      function isCurrentTNodeParent() {
        return instructionState.lFrame.isParent;
      }

      function setCurrentTNodeAsNotParent() {
        instructionState.lFrame.isParent = false;
      }

      function setCurrentTNodeAsParent() {
        instructionState.lFrame.isParent = true;
      }

      function getContextLView() {
        return instructionState.lFrame.contextLView;
      }

      function isInCheckNoChangesMode() {
        // TODO(misko): remove this from the LView since it is ngDevMode=true mode only.
        return instructionState.isInCheckNoChangesMode;
      }

      function setIsInCheckNoChangesMode(mode) {
        instructionState.isInCheckNoChangesMode = mode;
      } // top level variables should not be exported for performance reasons (PERF_NOTES.md)


      function getBindingRoot() {
        var lFrame = instructionState.lFrame;
        var index = lFrame.bindingRootIndex;

        if (index === -1) {
          index = lFrame.bindingRootIndex = lFrame.tView.bindingStartIndex;
        }

        return index;
      }

      function getBindingIndex() {
        return instructionState.lFrame.bindingIndex;
      }

      function setBindingIndex(value) {
        return instructionState.lFrame.bindingIndex = value;
      }

      function nextBindingIndex() {
        return instructionState.lFrame.bindingIndex++;
      }

      function incrementBindingIndex(count) {
        var lFrame = instructionState.lFrame;
        var index = lFrame.bindingIndex;
        lFrame.bindingIndex = lFrame.bindingIndex + count;
        return index;
      }

      function isInI18nBlock() {
        return instructionState.lFrame.inI18n;
      }

      function setInI18nBlock(isInI18nBlock) {
        instructionState.lFrame.inI18n = isInI18nBlock;
      }
      /**
       * Set a new binding root index so that host template functions can execute.
       *
       * Bindings inside the host template are 0 index. But because we don't know ahead of time
       * how many host bindings we have we can't pre-compute them. For this reason they are all
       * 0 index and we just shift the root so that they match next available location in the LView.
       *
       * @param bindingRootIndex Root index for `hostBindings`
       * @param currentDirectiveIndex `TData[currentDirectiveIndex]` will point to the current directive
       *        whose `hostBindings` are being processed.
       */


      function setBindingRootForHostBindings(bindingRootIndex, currentDirectiveIndex) {
        var lFrame = instructionState.lFrame;
        lFrame.bindingIndex = lFrame.bindingRootIndex = bindingRootIndex;
        setCurrentDirectiveIndex(currentDirectiveIndex);
      }
      /**
       * When host binding is executing this points to the directive index.
       * `TView.data[getCurrentDirectiveIndex()]` is `DirectiveDef`
       * `LView[getCurrentDirectiveIndex()]` is directive instance.
       */


      function getCurrentDirectiveIndex() {
        return instructionState.lFrame.currentDirectiveIndex;
      }
      /**
       * Sets an index of a directive whose `hostBindings` are being processed.
       *
       * @param currentDirectiveIndex `TData` index where current directive instance can be found.
       */


      function setCurrentDirectiveIndex(currentDirectiveIndex) {
        instructionState.lFrame.currentDirectiveIndex = currentDirectiveIndex;
      }
      /**
       * Retrieve the current `DirectiveDef` which is active when `hostBindings` instruction is being
       * executed.
       *
       * @param tData Current `TData` where the `DirectiveDef` will be looked up at.
       */


      function getCurrentDirectiveDef(tData) {
        var currentDirectiveIndex = instructionState.lFrame.currentDirectiveIndex;
        return currentDirectiveIndex === -1 ? null : tData[currentDirectiveIndex];
      }

      function getCurrentQueryIndex() {
        return instructionState.lFrame.currentQueryIndex;
      }

      function setCurrentQueryIndex(value) {
        instructionState.lFrame.currentQueryIndex = value;
      }
      /**
       * Returns a `TNode` of the location where the current `LView` is declared at.
       *
       * @param lView an `LView` that we want to find parent `TNode` for.
       */


      function getDeclarationTNode(lView) {
        var tView = lView[TVIEW]; // Return the declaration parent for embedded views

        if (tView.type === 2
        /* Embedded */
        ) {
            ngDevMode && assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');
            return tView.declTNode;
          } // Components don't have `TView.declTNode` because each instance of component could be
        // inserted in different location, hence `TView.declTNode` is meaningless.
        // Falling back to `T_HOST` in case we cross component boundary.


        if (tView.type === 1
        /* Component */
        ) {
            return lView[T_HOST];
          } // Remaining TNode type is `TViewType.Root` which doesn't have a parent TNode.


        return null;
      }
      /**
       * This is a light weight version of the `enterView` which is needed by the DI system.
       *
       * @param lView `LView` location of the DI context.
       * @param tNode `TNode` for DI context
       * @param flags DI context flags. if `SkipSelf` flag is set than we walk up the declaration
       *     tree from `tNode`  until we find parent declared `TElementNode`.
       * @returns `true` if we have successfully entered DI associated with `tNode` (or with declared
       *     `TNode` if `flags` has  `SkipSelf`). Failing to enter DI implies that no associated
       *     `NodeInjector` can be found and we should instead use `ModuleInjector`.
       *     - If `true` than this call must be fallowed by `leaveDI`
       *     - If `false` than this call failed and we should NOT call `leaveDI`
       */


      function enterDI(lView, tNode, flags) {
        ngDevMode && assertLViewOrUndefined(lView);

        if (flags & InjectFlags.SkipSelf) {
          ngDevMode && assertTNodeForTView(tNode, lView[TVIEW]);
          var parentTNode = tNode;
          var parentLView = lView;

          while (true) {
            ngDevMode && assertDefined(parentTNode, 'Parent TNode should be defined');
            parentTNode = parentTNode.parent;

            if (parentTNode === null && !(flags & InjectFlags.Host)) {
              parentTNode = getDeclarationTNode(parentLView);
              if (parentTNode === null) break; // In this case, a parent exists and is definitely an element. So it will definitely
              // have an existing lView as the declaration view, which is why we can assume it's defined.

              ngDevMode && assertDefined(parentLView, 'Parent LView should be defined');
              parentLView = parentLView[DECLARATION_VIEW]; // In Ivy there are Comment nodes that correspond to ngIf and NgFor embedded directives
              // We want to skip those and look only at Elements and ElementContainers to ensure
              // we're looking at true parent nodes, and not content or other types.

              if (parentTNode.type & (2
              /* Element */
              | 8
              /* ElementContainer */
              )) {
                break;
              }
            } else {
              break;
            }
          }

          if (parentTNode === null) {
            // If we failed to find a parent TNode this means that we should use module injector.
            return false;
          } else {
            tNode = parentTNode;
            lView = parentLView;
          }
        }

        ngDevMode && assertTNodeForLView(tNode, lView);
        var lFrame = instructionState.lFrame = allocLFrame();
        lFrame.currentTNode = tNode;
        lFrame.lView = lView;
        return true;
      }
      /**
       * Swap the current lView with a new lView.
       *
       * For performance reasons we store the lView in the top level of the module.
       * This way we minimize the number of properties to read. Whenever a new view
       * is entered we have to store the lView for later, and when the view is
       * exited the state has to be restored
       *
       * @param newView New lView to become active
       * @returns the previously active lView;
       */


      function enterView(newView) {
        ngDevMode && assertNotEqual(newView[0], newView[1], '????');
        ngDevMode && assertLViewOrUndefined(newView);
        var newLFrame = allocLFrame();

        if (ngDevMode) {
          assertEqual(newLFrame.isParent, true, 'Expected clean LFrame');
          assertEqual(newLFrame.lView, null, 'Expected clean LFrame');
          assertEqual(newLFrame.tView, null, 'Expected clean LFrame');
          assertEqual(newLFrame.selectedIndex, -1, 'Expected clean LFrame');
          assertEqual(newLFrame.elementDepthCount, 0, 'Expected clean LFrame');
          assertEqual(newLFrame.currentDirectiveIndex, -1, 'Expected clean LFrame');
          assertEqual(newLFrame.currentNamespace, null, 'Expected clean LFrame');
          assertEqual(newLFrame.bindingRootIndex, -1, 'Expected clean LFrame');
          assertEqual(newLFrame.currentQueryIndex, 0, 'Expected clean LFrame');
        }

        var tView = newView[TVIEW];
        instructionState.lFrame = newLFrame;
        ngDevMode && tView.firstChild && assertTNodeForTView(tView.firstChild, tView);
        newLFrame.currentTNode = tView.firstChild;
        newLFrame.lView = newView;
        newLFrame.tView = tView;
        newLFrame.contextLView = newView;
        newLFrame.bindingIndex = tView.bindingStartIndex;
        newLFrame.inI18n = false;
      }
      /**
       * Allocates next free LFrame. This function tries to reuse the `LFrame`s to lower memory pressure.
       */


      function allocLFrame() {
        var currentLFrame = instructionState.lFrame;
        var childLFrame = currentLFrame === null ? null : currentLFrame.child;
        var newLFrame = childLFrame === null ? createLFrame(currentLFrame) : childLFrame;
        return newLFrame;
      }

      function createLFrame(parent) {
        var lFrame = {
          currentTNode: null,
          isParent: true,
          lView: null,
          tView: null,
          selectedIndex: -1,
          contextLView: null,
          elementDepthCount: 0,
          currentNamespace: null,
          currentDirectiveIndex: -1,
          bindingRootIndex: -1,
          bindingIndex: -1,
          currentQueryIndex: 0,
          parent: parent,
          child: null,
          inI18n: false
        };
        parent !== null && (parent.child = lFrame); // link the new LFrame for reuse.

        return lFrame;
      }
      /**
       * A lightweight version of leave which is used with DI.
       *
       * This function only resets `currentTNode` and `LView` as those are the only properties
       * used with DI (`enterDI()`).
       *
       * NOTE: This function is reexported as `leaveDI`. However `leaveDI` has return type of `void` where
       * as `leaveViewLight` has `LFrame`. This is so that `leaveViewLight` can be used in `leaveView`.
       */


      function leaveViewLight() {
        var oldLFrame = instructionState.lFrame;
        instructionState.lFrame = oldLFrame.parent;
        oldLFrame.currentTNode = null;
        oldLFrame.lView = null;
        return oldLFrame;
      }
      /**
       * This is a lightweight version of the `leaveView` which is needed by the DI system.
       *
       * NOTE: this function is an alias so that we can change the type of the function to have `void`
       * return type.
       */


      var leaveDI = leaveViewLight;
      /**
       * Leave the current `LView`
       *
       * This pops the `LFrame` with the associated `LView` from the stack.
       *
       * IMPORTANT: We must zero out the `LFrame` values here otherwise they will be retained. This is
       * because for performance reasons we don't release `LFrame` but rather keep it for next use.
       */

      function leaveView() {
        var oldLFrame = leaveViewLight();
        oldLFrame.isParent = true;
        oldLFrame.tView = null;
        oldLFrame.selectedIndex = -1;
        oldLFrame.contextLView = null;
        oldLFrame.elementDepthCount = 0;
        oldLFrame.currentDirectiveIndex = -1;
        oldLFrame.currentNamespace = null;
        oldLFrame.bindingRootIndex = -1;
        oldLFrame.bindingIndex = -1;
        oldLFrame.currentQueryIndex = 0;
      }

      function nextContextImpl(level) {
        var contextLView = instructionState.lFrame.contextLView = walkUpViews(level, instructionState.lFrame.contextLView);
        return contextLView[CONTEXT];
      }

      function walkUpViews(nestingLevel, currentView) {
        while (nestingLevel > 0) {
          ngDevMode && assertDefined(currentView[DECLARATION_VIEW], 'Declaration view should be defined if nesting level is greater than 0.');
          currentView = currentView[DECLARATION_VIEW];
          nestingLevel--;
        }

        return currentView;
      }
      /**
       * Gets the currently selected element index.
       *
       * Used with {@link property} instruction (and more in the future) to identify the index in the
       * current `LView` to act on.
       */


      function getSelectedIndex() {
        return instructionState.lFrame.selectedIndex;
      }
      /**
       * Sets the most recent index passed to {@link select}
       *
       * Used with {@link property} instruction (and more in the future) to identify the index in the
       * current `LView` to act on.
       *
       * (Note that if an "exit function" was set earlier (via `setElementExitFn()`) then that will be
       * run if and when the provided `index` value is different from the current selected index value.)
       */


      function setSelectedIndex(index) {
        ngDevMode && index !== -1 && assertGreaterThanOrEqual(index, HEADER_OFFSET, 'Index must be past HEADER_OFFSET (or -1).');
        ngDevMode && assertLessThan(index, instructionState.lFrame.lView.length, 'Can\'t set index passed end of LView');
        instructionState.lFrame.selectedIndex = index;
      }
      /**
       * Gets the `tNode` that represents currently selected element.
       */


      function getSelectedTNode() {
        var lFrame = instructionState.lFrame;
        return getTNode(lFrame.tView, lFrame.selectedIndex);
      }
      /**
       * Sets the namespace used to create elements to `'http://www.w3.org/2000/svg'` in global state.
       *
       * @codeGenApi
       */


      function ɵɵnamespaceSVG() {
        instructionState.lFrame.currentNamespace = SVG_NAMESPACE;
      }
      /**
       * Sets the namespace used to create elements to `'http://www.w3.org/1998/MathML/'` in global state.
       *
       * @codeGenApi
       */


      function ɵɵnamespaceMathML() {
        instructionState.lFrame.currentNamespace = MATH_ML_NAMESPACE;
      }
      /**
       * Sets the namespace used to create elements to `null`, which forces element creation to use
       * `createElement` rather than `createElementNS`.
       *
       * @codeGenApi
       */


      function ɵɵnamespaceHTML() {
        namespaceHTMLInternal();
      }
      /**
       * Sets the namespace used to create elements to `null`, which forces element creation to use
       * `createElement` rather than `createElementNS`.
       */


      function namespaceHTMLInternal() {
        instructionState.lFrame.currentNamespace = null;
      }

      function getNamespace() {
        return instructionState.lFrame.currentNamespace;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Adds all directive lifecycle hooks from the given `DirectiveDef` to the given `TView`.
       *
       * Must be run *only* on the first template pass.
       *
       * Sets up the pre-order hooks on the provided `tView`,
       * see {@link HookData} for details about the data structure.
       *
       * @param directiveIndex The index of the directive in LView
       * @param directiveDef The definition containing the hooks to setup in tView
       * @param tView The current TView
       */


      function registerPreOrderHooks(directiveIndex, directiveDef, tView) {
        ngDevMode && assertFirstCreatePass(tView);
        var _directiveDef$type$pr = directiveDef.type.prototype,
            ngOnChanges = _directiveDef$type$pr.ngOnChanges,
            ngOnInit = _directiveDef$type$pr.ngOnInit,
            ngDoCheck = _directiveDef$type$pr.ngDoCheck;

        if (ngOnChanges) {
          var wrappedOnChanges = NgOnChangesFeatureImpl(directiveDef);
          (tView.preOrderHooks || (tView.preOrderHooks = [])).push(directiveIndex, wrappedOnChanges);
          (tView.preOrderCheckHooks || (tView.preOrderCheckHooks = [])).push(directiveIndex, wrappedOnChanges);
        }

        if (ngOnInit) {
          (tView.preOrderHooks || (tView.preOrderHooks = [])).push(0 - directiveIndex, ngOnInit);
        }

        if (ngDoCheck) {
          (tView.preOrderHooks || (tView.preOrderHooks = [])).push(directiveIndex, ngDoCheck);
          (tView.preOrderCheckHooks || (tView.preOrderCheckHooks = [])).push(directiveIndex, ngDoCheck);
        }
      }
      /**
       *
       * Loops through the directives on the provided `tNode` and queues hooks to be
       * run that are not initialization hooks.
       *
       * Should be executed during `elementEnd()` and similar to
       * preserve hook execution order. Content, view, and destroy hooks for projected
       * components and directives must be called *before* their hosts.
       *
       * Sets up the content, view, and destroy hooks on the provided `tView`,
       * see {@link HookData} for details about the data structure.
       *
       * NOTE: This does not set up `onChanges`, `onInit` or `doCheck`, those are set up
       * separately at `elementStart`.
       *
       * @param tView The current TView
       * @param tNode The TNode whose directives are to be searched for hooks to queue
       */


      function registerPostOrderHooks(tView, tNode) {
        ngDevMode && assertFirstCreatePass(tView); // It's necessary to loop through the directives at elementEnd() (rather than processing in
        // directiveCreate) so we can preserve the current hook order. Content, view, and destroy
        // hooks for projected components and directives must be called *before* their hosts.

        for (var i = tNode.directiveStart, end = tNode.directiveEnd; i < end; i++) {
          var _directiveDef = tView.data[i];
          ngDevMode && assertDefined(_directiveDef, 'Expecting DirectiveDef');
          var lifecycleHooks = _directiveDef.type.prototype;
          var ngAfterContentInit = lifecycleHooks.ngAfterContentInit,
              ngAfterContentChecked = lifecycleHooks.ngAfterContentChecked,
              ngAfterViewInit = lifecycleHooks.ngAfterViewInit,
              ngAfterViewChecked = lifecycleHooks.ngAfterViewChecked,
              ngOnDestroy = lifecycleHooks.ngOnDestroy;

          if (ngAfterContentInit) {
            (tView.contentHooks || (tView.contentHooks = [])).push(-i, ngAfterContentInit);
          }

          if (ngAfterContentChecked) {
            (tView.contentHooks || (tView.contentHooks = [])).push(i, ngAfterContentChecked);
            (tView.contentCheckHooks || (tView.contentCheckHooks = [])).push(i, ngAfterContentChecked);
          }

          if (ngAfterViewInit) {
            (tView.viewHooks || (tView.viewHooks = [])).push(-i, ngAfterViewInit);
          }

          if (ngAfterViewChecked) {
            (tView.viewHooks || (tView.viewHooks = [])).push(i, ngAfterViewChecked);
            (tView.viewCheckHooks || (tView.viewCheckHooks = [])).push(i, ngAfterViewChecked);
          }

          if (ngOnDestroy != null) {
            (tView.destroyHooks || (tView.destroyHooks = [])).push(i, ngOnDestroy);
          }
        }
      }
      /**
       * Executing hooks requires complex logic as we need to deal with 2 constraints.
       *
       * 1. Init hooks (ngOnInit, ngAfterContentInit, ngAfterViewInit) must all be executed once and only
       * once, across many change detection cycles. This must be true even if some hooks throw, or if
       * some recursively trigger a change detection cycle.
       * To solve that, it is required to track the state of the execution of these init hooks.
       * This is done by storing and maintaining flags in the view: the {@link InitPhaseState},
       * and the index within that phase. They can be seen as a cursor in the following structure:
       * [[onInit1, onInit2], [afterContentInit1], [afterViewInit1, afterViewInit2, afterViewInit3]]
       * They are are stored as flags in LView[FLAGS].
       *
       * 2. Pre-order hooks can be executed in batches, because of the select instruction.
       * To be able to pause and resume their execution, we also need some state about the hook's array
       * that is being processed:
       * - the index of the next hook to be executed
       * - the number of init hooks already found in the processed part of the  array
       * They are are stored as flags in LView[PREORDER_HOOK_FLAGS].
       */

      /**
       * Executes pre-order check hooks ( OnChanges, DoChanges) given a view where all the init hooks were
       * executed once. This is a light version of executeInitAndCheckPreOrderHooks where we can skip read
       * / write of the init-hooks related flags.
       * @param lView The LView where hooks are defined
       * @param hooks Hooks to be run
       * @param nodeIndex 3 cases depending on the value:
       * - undefined: all hooks from the array should be executed (post-order case)
       * - null: execute hooks only from the saved index until the end of the array (pre-order case, when
       * flushing the remaining hooks)
       * - number: execute hooks only from the saved index until that node index exclusive (pre-order
       * case, when executing select(number))
       */


      function executeCheckHooks(lView, hooks, nodeIndex) {
        callHooks(lView, hooks, 3
        /* InitPhaseCompleted */
        , nodeIndex);
      }
      /**
       * Executes post-order init and check hooks (one of AfterContentInit, AfterContentChecked,
       * AfterViewInit, AfterViewChecked) given a view where there are pending init hooks to be executed.
       * @param lView The LView where hooks are defined
       * @param hooks Hooks to be run
       * @param initPhase A phase for which hooks should be run
       * @param nodeIndex 3 cases depending on the value:
       * - undefined: all hooks from the array should be executed (post-order case)
       * - null: execute hooks only from the saved index until the end of the array (pre-order case, when
       * flushing the remaining hooks)
       * - number: execute hooks only from the saved index until that node index exclusive (pre-order
       * case, when executing select(number))
       */


      function executeInitAndCheckHooks(lView, hooks, initPhase, nodeIndex) {
        ngDevMode && assertNotEqual(initPhase, 3
        /* InitPhaseCompleted */
        , 'Init pre-order hooks should not be called more than once');

        if ((lView[FLAGS] & 3
        /* InitPhaseStateMask */
        ) === initPhase) {
          callHooks(lView, hooks, initPhase, nodeIndex);
        }
      }

      function incrementInitPhaseFlags(lView, initPhase) {
        ngDevMode && assertNotEqual(initPhase, 3
        /* InitPhaseCompleted */
        , 'Init hooks phase should not be incremented after all init hooks have been run.');
        var flags = lView[FLAGS];

        if ((flags & 3
        /* InitPhaseStateMask */
        ) === initPhase) {
          flags &= 2047
          /* IndexWithinInitPhaseReset */
          ;
          flags += 1
          /* InitPhaseStateIncrementer */
          ;
          lView[FLAGS] = flags;
        }
      }
      /**
       * Calls lifecycle hooks with their contexts, skipping init hooks if it's not
       * the first LView pass
       *
       * @param currentView The current view
       * @param arr The array in which the hooks are found
       * @param initPhaseState the current state of the init phase
       * @param currentNodeIndex 3 cases depending on the value:
       * - undefined: all hooks from the array should be executed (post-order case)
       * - null: execute hooks only from the saved index until the end of the array (pre-order case, when
       * flushing the remaining hooks)
       * - number: execute hooks only from the saved index until that node index exclusive (pre-order
       * case, when executing select(number))
       */


      function callHooks(currentView, arr, initPhase, currentNodeIndex) {
        ngDevMode && assertEqual(isInCheckNoChangesMode(), false, 'Hooks should never be run when in check no changes mode.');
        var startIndex = currentNodeIndex !== undefined ? currentView[PREORDER_HOOK_FLAGS] & 65535
        /* IndexOfTheNextPreOrderHookMaskMask */
        : 0;
        var nodeIndexLimit = currentNodeIndex != null ? currentNodeIndex : -1;
        var max = arr.length - 1; // Stop the loop at length - 1, because we look for the hook at i + 1

        var lastNodeIndexFound = 0;

        for (var i = startIndex; i < max; i++) {
          var hook = arr[i + 1];

          if (typeof hook === 'number') {
            lastNodeIndexFound = arr[i];

            if (currentNodeIndex != null && lastNodeIndexFound >= currentNodeIndex) {
              break;
            }
          } else {
            var isInitHook = arr[i] < 0;
            if (isInitHook) currentView[PREORDER_HOOK_FLAGS] += 65536
            /* NumberOfInitHooksCalledIncrementer */
            ;

            if (lastNodeIndexFound < nodeIndexLimit || nodeIndexLimit == -1) {
              callHook(currentView, initPhase, arr, i);
              currentView[PREORDER_HOOK_FLAGS] = (currentView[PREORDER_HOOK_FLAGS] & 4294901760
              /* NumberOfInitHooksCalledMask */
              ) + i + 2;
            }

            i++;
          }
        }
      }
      /**
       * Execute one hook against the current `LView`.
       *
       * @param currentView The current view
       * @param initPhaseState the current state of the init phase
       * @param arr The array in which the hooks are found
       * @param i The current index within the hook data array
       */


      function callHook(currentView, initPhase, arr, i) {
        var isInitHook = arr[i] < 0;
        var hook = arr[i + 1];
        var directiveIndex = isInitHook ? -arr[i] : arr[i];
        var directive = currentView[directiveIndex];

        if (isInitHook) {
          var indexWithintInitPhase = currentView[FLAGS] >> 11
          /* IndexWithinInitPhaseShift */
          ; // The init phase state must be always checked here as it may have been recursively updated.

          if (indexWithintInitPhase < currentView[PREORDER_HOOK_FLAGS] >> 16
          /* NumberOfInitHooksCalledShift */
          && (currentView[FLAGS] & 3
          /* InitPhaseStateMask */
          ) === initPhase) {
            currentView[FLAGS] += 2048
            /* IndexWithinInitPhaseIncrementer */
            ;
            hook.call(directive);
          }
        } else {
          hook.call(directive);
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var NO_PARENT_INJECTOR = -1;
      /**
       * Each injector is saved in 9 contiguous slots in `LView` and 9 contiguous slots in
       * `TView.data`. This allows us to store information about the current node's tokens (which
       * can be shared in `TView`) as well as the tokens of its ancestor nodes (which cannot be
       * shared, so they live in `LView`).
       *
       * Each of these slots (aside from the last slot) contains a bloom filter. This bloom filter
       * determines whether a directive is available on the associated node or not. This prevents us
       * from searching the directives array at this level unless it's probable the directive is in it.
       *
       * See: https://en.wikipedia.org/wiki/Bloom_filter for more about bloom filters.
       *
       * Because all injectors have been flattened into `LView` and `TViewData`, they cannot typed
       * using interfaces as they were previously. The start index of each `LInjector` and `TInjector`
       * will differ based on where it is flattened into the main array, so it's not possible to know
       * the indices ahead of time and save their types here. The interfaces are still included here
       * for documentation purposes.
       *
       * export interface LInjector extends Array<any> {
       *
       *    // Cumulative bloom for directive IDs 0-31  (IDs are % BLOOM_SIZE)
       *    [0]: number;
       *
       *    // Cumulative bloom for directive IDs 32-63
       *    [1]: number;
       *
       *    // Cumulative bloom for directive IDs 64-95
       *    [2]: number;
       *
       *    // Cumulative bloom for directive IDs 96-127
       *    [3]: number;
       *
       *    // Cumulative bloom for directive IDs 128-159
       *    [4]: number;
       *
       *    // Cumulative bloom for directive IDs 160 - 191
       *    [5]: number;
       *
       *    // Cumulative bloom for directive IDs 192 - 223
       *    [6]: number;
       *
       *    // Cumulative bloom for directive IDs 224 - 255
       *    [7]: number;
       *
       *    // We need to store a reference to the injector's parent so DI can keep looking up
       *    // the injector tree until it finds the dependency it's looking for.
       *    [PARENT_INJECTOR]: number;
       * }
       *
       * export interface TInjector extends Array<any> {
       *
       *    // Shared node bloom for directive IDs 0-31  (IDs are % BLOOM_SIZE)
       *    [0]: number;
       *
       *    // Shared node bloom for directive IDs 32-63
       *    [1]: number;
       *
       *    // Shared node bloom for directive IDs 64-95
       *    [2]: number;
       *
       *    // Shared node bloom for directive IDs 96-127
       *    [3]: number;
       *
       *    // Shared node bloom for directive IDs 128-159
       *    [4]: number;
       *
       *    // Shared node bloom for directive IDs 160 - 191
       *    [5]: number;
       *
       *    // Shared node bloom for directive IDs 192 - 223
       *    [6]: number;
       *
       *    // Shared node bloom for directive IDs 224 - 255
       *    [7]: number;
       *
       *    // Necessary to find directive indices for a particular node.
       *    [TNODE]: TElementNode|TElementContainerNode|TContainerNode;
       *  }
       */

      /**
       * Factory for creating instances of injectors in the NodeInjector.
       *
       * This factory is complicated by the fact that it can resolve `multi` factories as well.
       *
       * NOTE: Some of the fields are optional which means that this class has two hidden classes.
       * - One without `multi` support (most common)
       * - One with `multi` values, (rare).
       *
       * Since VMs can cache up to 4 inline hidden classes this is OK.
       *
       * - Single factory: Only `resolving` and `factory` is defined.
       * - `providers` factory: `componentProviders` is a number and `index = -1`.
       * - `viewProviders` factory: `componentProviders` is a number and `index` points to `providers`.
       */

      var NodeInjectorFactory = function NodeInjectorFactory(
      /**
       * Factory to invoke in order to create a new instance.
       */
      factory,
      /**
       * Set to `true` if the token is declared in `viewProviders` (or if it is component).
       */
      isViewProvider, injectImplementation) {
        _classCallCheck2(this, NodeInjectorFactory);

        this.factory = factory;
        /**
         * Marker set to true during factory invocation to see if we get into recursive loop.
         * Recursive loop causes an error to be displayed.
         */

        this.resolving = false;
        ngDevMode && assertDefined(factory, 'Factory not specified');
        ngDevMode && assertEqual(typeof factory, 'function', 'Expected factory function.');
        this.canSeeViewProviders = isViewProvider;
        this.injectImpl = injectImplementation;
      };

      function isFactory(obj) {
        return obj instanceof NodeInjectorFactory;
      } // Note: This hack is necessary so we don't erroneously get a circular dependency
      // failure based on types.


      var unusedValueExportToPlacateAjd$3 = 1;
      /**
       * Converts `TNodeType` into human readable text.
       * Make sure this matches with `TNodeType`
       */

      function toTNodeTypeAsString(tNodeType) {
        var text = '';
        tNodeType & 1
        /* Text */
        && (text += '|Text');
        tNodeType & 2
        /* Element */
        && (text += '|Element');
        tNodeType & 4
        /* Container */
        && (text += '|Container');
        tNodeType & 8
        /* ElementContainer */
        && (text += '|ElementContainer');
        tNodeType & 16
        /* Projection */
        && (text += '|Projection');
        tNodeType & 32
        /* Icu */
        && (text += '|IcuContainer');
        tNodeType & 64
        /* Placeholder */
        && (text += '|Placeholder');
        return text.length > 0 ? text.substring(1) : text;
      } // Note: This hack is necessary so we don't erroneously get a circular dependency
      // failure based on types.


      var unusedValueExportToPlacateAjd$4 = 1;
      /**
       * Returns `true` if the `TNode` has a directive which has `@Input()` for `class` binding.
       *
       * ```
       * <div my-dir [class]="exp"></div>
       * ```
       * and
       * ```
       * @Directive({
       * })
       * class MyDirective {
       *   @Input()
       *   class: string;
       * }
       * ```
       *
       * In the above case it is necessary to write the reconciled styling information into the
       * directive's input.
       *
       * @param tNode
       */

      function hasClassInput(tNode) {
        return (tNode.flags & 16
        /* hasClassInput */
        ) !== 0;
      }
      /**
       * Returns `true` if the `TNode` has a directive which has `@Input()` for `style` binding.
       *
       * ```
       * <div my-dir [style]="exp"></div>
       * ```
       * and
       * ```
       * @Directive({
       * })
       * class MyDirective {
       *   @Input()
       *   class: string;
       * }
       * ```
       *
       * In the above case it is necessary to write the reconciled styling information into the
       * directive's input.
       *
       * @param tNode
       */


      function hasStyleInput(tNode) {
        return (tNode.flags & 32
        /* hasStyleInput */
        ) !== 0;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function assertTNodeType(tNode, expectedTypes, message) {
        assertDefined(tNode, 'should be called with a TNode');

        if ((tNode.type & expectedTypes) === 0) {
          throwError(message || "Expected [".concat(toTNodeTypeAsString(expectedTypes), "] but got ").concat(toTNodeTypeAsString(tNode.type), "."));
        }
      }

      function assertPureTNodeType(type) {
        if (!(type === 2
        /* Element */
        || //
        type === 1
        /* Text */
        || //
        type === 4
        /* Container */
        || //
        type === 8
        /* ElementContainer */
        || //
        type === 32
        /* Icu */
        || //
        type === 16
        /* Projection */
        || //
        type === 64
        /* Placeholder */
        )) {
          throwError("Expected TNodeType to have only a single type selected, but got ".concat(toTNodeTypeAsString(type), "."));
        }
      }
      /**
       * Assigns all attribute values to the provided element via the inferred renderer.
       *
       * This function accepts two forms of attribute entries:
       *
       * default: (key, value):
       *  attrs = [key1, value1, key2, value2]
       *
       * namespaced: (NAMESPACE_MARKER, uri, name, value)
       *  attrs = [NAMESPACE_MARKER, uri, name, value, NAMESPACE_MARKER, uri, name, value]
       *
       * The `attrs` array can contain a mix of both the default and namespaced entries.
       * The "default" values are set without a marker, but if the function comes across
       * a marker value then it will attempt to set a namespaced value. If the marker is
       * not of a namespaced value then the function will quit and return the index value
       * where it stopped during the iteration of the attrs array.
       *
       * See [AttributeMarker] to understand what the namespace marker value is.
       *
       * Note that this instruction does not support assigning style and class values to
       * an element. See `elementStart` and `elementHostAttrs` to learn how styling values
       * are applied to an element.
       * @param renderer The renderer to be used
       * @param native The element that the attributes will be assigned to
       * @param attrs The attribute array of values that will be assigned to the element
       * @returns the index value that was last accessed in the attributes array
       */


      function setUpAttributes(renderer, _native, attrs) {
        var isProc = isProceduralRenderer(renderer);
        var i = 0;

        while (i < attrs.length) {
          var value = attrs[i];

          if (typeof value === 'number') {
            // only namespaces are supported. Other value types (such as style/class
            // entries) are not supported in this function.
            if (value !== 0
            /* NamespaceURI */
            ) {
                break;
              } // we just landed on the marker value ... therefore
            // we should skip to the next entry


            i++;
            var namespaceURI = attrs[i++];
            var attrName = attrs[i++];
            var attrVal = attrs[i++];
            ngDevMode && ngDevMode.rendererSetAttribute++;
            isProc ? renderer.setAttribute(_native, attrName, attrVal, namespaceURI) : _native.setAttributeNS(namespaceURI, attrName, attrVal);
          } else {
            // attrName is string;
            var _attrName = value;
            var _attrVal = attrs[++i]; // Standard attributes

            ngDevMode && ngDevMode.rendererSetAttribute++;

            if (isAnimationProp(_attrName)) {
              if (isProc) {
                renderer.setProperty(_native, _attrName, _attrVal);
              }
            } else {
              isProc ? renderer.setAttribute(_native, _attrName, _attrVal) : _native.setAttribute(_attrName, _attrVal);
            }

            i++;
          }
        } // another piece of code may iterate over the same attributes array. Therefore
        // it may be helpful to return the exact spot where the attributes array exited
        // whether by running into an unsupported marker or if all the static values were
        // iterated over.


        return i;
      }
      /**
       * Test whether the given value is a marker that indicates that the following
       * attribute values in a `TAttributes` array are only the names of attributes,
       * and not name-value pairs.
       * @param marker The attribute marker to test.
       * @returns true if the marker is a "name-only" marker (e.g. `Bindings`, `Template` or `I18n`).
       */


      function isNameOnlyAttributeMarker(marker) {
        return marker === 3
        /* Bindings */
        || marker === 4
        /* Template */
        || marker === 6
        /* I18n */
        ;
      }

      function isAnimationProp(name) {
        // Perf note: accessing charCodeAt to check for the first character of a string is faster as
        // compared to accessing a character at index 0 (ex. name[0]). The main reason for this is that
        // charCodeAt doesn't allocate memory to return a substring.
        return name.charCodeAt(0) === 64
        /* AT_SIGN */
        ;
      }
      /**
       * Merges `src` `TAttributes` into `dst` `TAttributes` removing any duplicates in the process.
       *
       * This merge function keeps the order of attrs same.
       *
       * @param dst Location of where the merged `TAttributes` should end up.
       * @param src `TAttributes` which should be appended to `dst`
       */


      function mergeHostAttrs(dst, src) {
        if (src === null || src.length === 0) {// do nothing
        } else if (dst === null || dst.length === 0) {
          // We have source, but dst is empty, just make a copy.
          dst = src.slice();
        } else {
          var srcMarker = -1
          /* ImplicitAttributes */
          ;

          for (var i = 0; i < src.length; i++) {
            var item = src[i];

            if (typeof item === 'number') {
              srcMarker = item;
            } else {
              if (srcMarker === 0
              /* NamespaceURI */
              ) {// Case where we need to consume `key1`, `key2`, `value` items.
                } else if (srcMarker === -1
              /* ImplicitAttributes */
              || srcMarker === 2
              /* Styles */
              ) {
                  // Case where we have to consume `key1` and `value` only.
                  mergeHostAttribute(dst, srcMarker, item, null, src[++i]);
                } else {
                // Case where we have to consume `key1` only.
                mergeHostAttribute(dst, srcMarker, item, null, null);
              }
            }
          }
        }

        return dst;
      }
      /**
       * Append `key`/`value` to existing `TAttributes` taking region marker and duplicates into account.
       *
       * @param dst `TAttributes` to append to.
       * @param marker Region where the `key`/`value` should be added.
       * @param key1 Key to add to `TAttributes`
       * @param key2 Key to add to `TAttributes` (in case of `AttributeMarker.NamespaceURI`)
       * @param value Value to add or to overwrite to `TAttributes` Only used if `marker` is not Class.
       */


      function mergeHostAttribute(dst, marker, key1, key2, value) {
        var i = 0; // Assume that new markers will be inserted at the end.

        var markerInsertPosition = dst.length; // scan until correct type.

        if (marker === -1
        /* ImplicitAttributes */
        ) {
            markerInsertPosition = -1;
          } else {
          while (i < dst.length) {
            var dstValue = dst[i++];

            if (typeof dstValue === 'number') {
              if (dstValue === marker) {
                markerInsertPosition = -1;
                break;
              } else if (dstValue > marker) {
                // We need to save this as we want the markers to be inserted in specific order.
                markerInsertPosition = i - 1;
                break;
              }
            }
          }
        } // search until you find place of insertion


        while (i < dst.length) {
          var item = dst[i];

          if (typeof item === 'number') {
            // since `i` started as the index after the marker, we did not find it if we are at the next
            // marker
            break;
          } else if (item === key1) {
            // We already have same token
            if (key2 === null) {
              if (value !== null) {
                dst[i + 1] = value;
              }

              return;
            } else if (key2 === dst[i + 1]) {
              dst[i + 2] = value;
              return;
            }
          } // Increment counter.


          i++;
          if (key2 !== null) i++;
          if (value !== null) i++;
        } // insert at location.


        if (markerInsertPosition !== -1) {
          dst.splice(markerInsertPosition, 0, marker);
          i = markerInsertPosition + 1;
        }

        dst.splice(i++, 0, key1);

        if (key2 !== null) {
          dst.splice(i++, 0, key2);
        }

        if (value !== null) {
          dst.splice(i++, 0, value);
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      /// Parent Injector Utils ///////////////////////////////////////////////////////////////


      function hasParentInjector(parentLocation) {
        return parentLocation !== NO_PARENT_INJECTOR;
      }

      function getParentInjectorIndex(parentLocation) {
        ngDevMode && assertNumber(parentLocation, 'Number expected');
        ngDevMode && assertNotEqual(parentLocation, -1, 'Not a valid state.');
        var parentInjectorIndex = parentLocation & 32767
        /* InjectorIndexMask */
        ;
        ngDevMode && assertGreaterThan(parentInjectorIndex, HEADER_OFFSET, 'Parent injector must be pointing past HEADER_OFFSET.');
        return parentLocation & 32767
        /* InjectorIndexMask */
        ;
      }

      function getParentInjectorViewOffset(parentLocation) {
        return parentLocation >> 16
        /* ViewOffsetShift */
        ;
      }
      /**
       * Unwraps a parent injector location number to find the view offset from the current injector,
       * then walks up the declaration view tree until the view is found that contains the parent
       * injector.
       *
       * @param location The location of the parent injector, which contains the view offset
       * @param startView The LView instance from which to start walking up the view tree
       * @returns The LView instance that contains the parent injector
       */


      function getParentInjectorView(location, startView) {
        var viewOffset = getParentInjectorViewOffset(location);
        var parentView = startView; // For most cases, the parent injector can be found on the host node (e.g. for component
        // or container), but we must keep the loop here to support the rarer case of deeply nested
        // <ng-template> tags or inline views, where the parent injector might live many views
        // above the child injector.

        while (viewOffset > 0) {
          parentView = parentView[DECLARATION_VIEW];
          viewOffset--;
        }

        return parentView;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Defines if the call to `inject` should include `viewProviders` in its resolution.
       *
       * This is set to true when we try to instantiate a component. This value is reset in
       * `getNodeInjectable` to a value which matches the declaration location of the token about to be
       * instantiated. This is done so that if we are injecting a token which was declared outside of
       * `viewProviders` we don't accidentally pull `viewProviders` in.
       *
       * Example:
       *
       * ```
       * @Injectable()
       * class MyService {
       *   constructor(public value: String) {}
       * }
       *
       * @Component({
       *   providers: [
       *     MyService,
       *     {provide: String, value: 'providers' }
       *   ]
       *   viewProviders: [
       *     {provide: String, value: 'viewProviders'}
       *   ]
       * })
       * class MyComponent {
       *   constructor(myService: MyService, value: String) {
       *     // We expect that Component can see into `viewProviders`.
       *     expect(value).toEqual('viewProviders');
       *     // `MyService` was not declared in `viewProviders` hence it can't see it.
       *     expect(myService.value).toEqual('providers');
       *   }
       * }
       *
       * ```
       */


      var includeViewProviders = true;

      function setIncludeViewProviders(v) {
        var oldValue = includeViewProviders;
        includeViewProviders = v;
        return oldValue;
      }
      /**
       * The number of slots in each bloom filter (used by DI). The larger this number, the fewer
       * directives that will share slots, and thus, the fewer false positives when checking for
       * the existence of a directive.
       */


      var BLOOM_SIZE = 256;
      var BLOOM_MASK = BLOOM_SIZE - 1;
      /**
       * The number of bits that is represented by a single bloom bucket. JS bit operations are 32 bits,
       * so each bucket represents 32 distinct tokens which accounts for log2(32) = 5 bits of a bloom hash
       * number.
       */

      var BLOOM_BUCKET_BITS = 5;
      /** Counter used to generate unique IDs for directives. */

      var nextNgElementId = 0;
      /**
       * Registers this directive as present in its node's injector by flipping the directive's
       * corresponding bit in the injector's bloom filter.
       *
       * @param injectorIndex The index of the node injector where this token should be registered
       * @param tView The TView for the injector's bloom filters
       * @param type The directive token to register
       */

      function bloomAdd(injectorIndex, tView, type) {
        ngDevMode && assertEqual(tView.firstCreatePass, true, 'expected firstCreatePass to be true');
        var id;

        if (typeof type === 'string') {
          id = type.charCodeAt(0) || 0;
        } else if (type.hasOwnProperty(NG_ELEMENT_ID)) {
          id = type[NG_ELEMENT_ID];
        } // Set a unique ID on the directive type, so if something tries to inject the directive,
        // we can easily retrieve the ID and hash it into the bloom bit that should be checked.


        if (id == null) {
          id = type[NG_ELEMENT_ID] = nextNgElementId++;
        } // We only have BLOOM_SIZE (256) slots in our bloom filter (8 buckets * 32 bits each),
        // so all unique IDs must be modulo-ed into a number from 0 - 255 to fit into the filter.


        var bloomHash = id & BLOOM_MASK; // Create a mask that targets the specific bit associated with the directive.
        // JS bit operations are 32 bits, so this will be a number between 2^0 and 2^31, corresponding
        // to bit positions 0 - 31 in a 32 bit integer.

        var mask = 1 << bloomHash; // Each bloom bucket in `tData` represents `BLOOM_BUCKET_BITS` number of bits of `bloomHash`.
        // Any bits in `bloomHash` beyond `BLOOM_BUCKET_BITS` indicate the bucket offset that the mask
        // should be written to.

        tView.data[injectorIndex + (bloomHash >> BLOOM_BUCKET_BITS)] |= mask;
      }
      /**
       * Creates (or gets an existing) injector for a given element or container.
       *
       * @param tNode for which an injector should be retrieved / created.
       * @param lView View where the node is stored
       * @returns Node injector
       */


      function getOrCreateNodeInjectorForNode(tNode, lView) {
        var existingInjectorIndex = getInjectorIndex(tNode, lView);

        if (existingInjectorIndex !== -1) {
          return existingInjectorIndex;
        }

        var tView = lView[TVIEW];

        if (tView.firstCreatePass) {
          tNode.injectorIndex = lView.length;
          insertBloom(tView.data, tNode); // foundation for node bloom

          insertBloom(lView, null); // foundation for cumulative bloom

          insertBloom(tView.blueprint, null);
        }

        var parentLoc = getParentInjectorLocation(tNode, lView);
        var injectorIndex = tNode.injectorIndex; // If a parent injector can't be found, its location is set to -1.
        // In that case, we don't need to set up a cumulative bloom

        if (hasParentInjector(parentLoc)) {
          var parentIndex = getParentInjectorIndex(parentLoc);
          var parentLView = getParentInjectorView(parentLoc, lView);
          var parentData = parentLView[TVIEW].data; // Creates a cumulative bloom filter that merges the parent's bloom filter
          // and its own cumulative bloom (which contains tokens for all ancestors)

          for (var i = 0; i < 8
          /* BLOOM_SIZE */
          ; i++) {
            lView[injectorIndex + i] = parentLView[parentIndex + i] | parentData[parentIndex + i];
          }
        }

        lView[injectorIndex + 8
        /* PARENT */
        ] = parentLoc;
        return injectorIndex;
      }

      function insertBloom(arr, footer) {
        arr.push(0, 0, 0, 0, 0, 0, 0, 0, footer);
      }

      function getInjectorIndex(tNode, lView) {
        if (tNode.injectorIndex === -1 || // If the injector index is the same as its parent's injector index, then the index has been
        // copied down from the parent node. No injector has been created yet on this node.
        tNode.parent && tNode.parent.injectorIndex === tNode.injectorIndex || // After the first template pass, the injector index might exist but the parent values
        // might not have been calculated yet for this instance
        lView[tNode.injectorIndex + 8
        /* PARENT */
        ] === null) {
          return -1;
        } else {
          ngDevMode && assertIndexInRange(lView, tNode.injectorIndex);
          return tNode.injectorIndex;
        }
      }
      /**
       * Finds the index of the parent injector, with a view offset if applicable. Used to set the
       * parent injector initially.
       *
       * @returns Returns a number that is the combination of the number of LViews that we have to go up
       * to find the LView containing the parent inject AND the index of the injector within that LView.
       */


      function getParentInjectorLocation(tNode, lView) {
        if (tNode.parent && tNode.parent.injectorIndex !== -1) {
          // If we have a parent `TNode` and there is an injector associated with it we are done, because
          // the parent injector is within the current `LView`.
          return tNode.parent.injectorIndex; // ViewOffset is 0
        } // When parent injector location is computed it may be outside of the current view. (ie it could
        // be pointing to a declared parent location). This variable stores number of declaration parents
        // we need to walk up in order to find the parent injector location.


        var declarationViewOffset = 0;
        var parentTNode = null;
        var lViewCursor = lView; // The parent injector is not in the current `LView`. We will have to walk the declared parent
        // `LView` hierarchy and look for it. If we walk of the top, that means that there is no parent
        // `NodeInjector`.

        while (lViewCursor !== null) {
          // First determine the `parentTNode` location. The parent pointer differs based on `TView.type`.
          var tView = lViewCursor[TVIEW];
          var tViewType = tView.type;

          if (tViewType === 2
          /* Embedded */
          ) {
              ngDevMode && assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');
              parentTNode = tView.declTNode;
            } else if (tViewType === 1
          /* Component */
          ) {
              // Components don't have `TView.declTNode` because each instance of component could be
              // inserted in different location, hence `TView.declTNode` is meaningless.
              parentTNode = lViewCursor[T_HOST];
            } else {
            ngDevMode && assertEqual(tView.type, 0
            /* Root */
            , 'Root type expected');
            parentTNode = null;
          }

          if (parentTNode === null) {
            // If we have no parent, than we are done.
            return NO_PARENT_INJECTOR;
          }

          ngDevMode && parentTNode && assertTNodeForLView(parentTNode, lViewCursor[DECLARATION_VIEW]); // Every iteration of the loop requires that we go to the declared parent.

          declarationViewOffset++;
          lViewCursor = lViewCursor[DECLARATION_VIEW];

          if (parentTNode.injectorIndex !== -1) {
            // We found a NodeInjector which points to something.
            return parentTNode.injectorIndex | declarationViewOffset << 16
            /* ViewOffsetShift */
            ;
          }
        }

        return NO_PARENT_INJECTOR;
      }
      /**
       * Makes a type or an injection token public to the DI system by adding it to an
       * injector's bloom filter.
       *
       * @param di The node injector in which a directive will be added
       * @param token The type or the injection token to be made public
       */


      function diPublicInInjector(injectorIndex, tView, token) {
        bloomAdd(injectorIndex, tView, token);
      }
      /**
       * Inject static attribute value into directive constructor.
       *
       * This method is used with `factory` functions which are generated as part of
       * `defineDirective` or `defineComponent`. The method retrieves the static value
       * of an attribute. (Dynamic attributes are not supported since they are not resolved
       *  at the time of injection and can change over time.)
       *
       * # Example
       * Given:
       * ```
       * @Component(...)
       * class MyComponent {
       *   constructor(@Attribute('title') title: string) { ... }
       * }
       * ```
       * When instantiated with
       * ```
       * <my-component title="Hello"></my-component>
       * ```
       *
       * Then factory method generated is:
       * ```
       * MyComponent.ɵcmp = defineComponent({
       *   factory: () => new MyComponent(injectAttribute('title'))
       *   ...
       * })
       * ```
       *
       * @publicApi
       */


      function injectAttributeImpl(tNode, attrNameToInject) {
        ngDevMode && assertTNodeType(tNode, 12
        /* AnyContainer */
        | 3
        /* AnyRNode */
        );
        ngDevMode && assertDefined(tNode, 'expecting tNode');

        if (attrNameToInject === 'class') {
          return tNode.classes;
        }

        if (attrNameToInject === 'style') {
          return tNode.styles;
        }

        var attrs = tNode.attrs;

        if (attrs) {
          var attrsLength = attrs.length;
          var i = 0;

          while (i < attrsLength) {
            var value = attrs[i]; // If we hit a `Bindings` or `Template` marker then we are done.

            if (isNameOnlyAttributeMarker(value)) break; // Skip namespaced attributes

            if (value === 0
            /* NamespaceURI */
            ) {
                // we skip the next two values
                // as namespaced attributes looks like
                // [..., AttributeMarker.NamespaceURI, 'http://someuri.com/test', 'test:exist',
                // 'existValue', ...]
                i = i + 2;
              } else if (typeof value === 'number') {
              // Skip to the first value of the marked attribute.
              i++;

              while (i < attrsLength && typeof attrs[i] === 'string') {
                i++;
              }
            } else if (value === attrNameToInject) {
              return attrs[i + 1];
            } else {
              i = i + 2;
            }
          }
        }

        return null;
      }

      function notFoundValueOrThrow(notFoundValue, token, flags) {
        if (flags & InjectFlags.Optional) {
          return notFoundValue;
        } else {
          throwProviderNotFoundError(token, 'NodeInjector');
        }
      }
      /**
       * Returns the value associated to the given token from the ModuleInjector or throws exception
       *
       * @param lView The `LView` that contains the `tNode`
       * @param token The token to look for
       * @param flags Injection flags
       * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`
       * @returns the value from the injector or throws an exception
       */


      function lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue) {
        if (flags & InjectFlags.Optional && notFoundValue === undefined) {
          // This must be set or the NullInjector will throw for optional deps
          notFoundValue = null;
        }

        if ((flags & (InjectFlags.Self | InjectFlags.Host)) === 0) {
          var moduleInjector = lView[INJECTOR]; // switch to `injectInjectorOnly` implementation for module injector, since module injector
          // should not have access to Component/Directive DI scope (that may happen through
          // `directiveInject` implementation)

          var previousInjectImplementation = setInjectImplementation(undefined);

          try {
            if (moduleInjector) {
              return moduleInjector.get(token, notFoundValue, flags & InjectFlags.Optional);
            } else {
              return injectRootLimpMode(token, notFoundValue, flags & InjectFlags.Optional);
            }
          } finally {
            setInjectImplementation(previousInjectImplementation);
          }
        }

        return notFoundValueOrThrow(notFoundValue, token, flags);
      }
      /**
       * Returns the value associated to the given token from the NodeInjectors => ModuleInjector.
       *
       * Look for the injector providing the token by walking up the node injector tree and then
       * the module injector tree.
       *
       * This function patches `token` with `__NG_ELEMENT_ID__` which contains the id for the bloom
       * filter. `-1` is reserved for injecting `Injector` (implemented by `NodeInjector`)
       *
       * @param tNode The Node where the search for the injector should start
       * @param lView The `LView` that contains the `tNode`
       * @param token The token to look for
       * @param flags Injection flags
       * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`
       * @returns the value from the injector, `null` when not found, or `notFoundValue` if provided
       */


      function getOrCreateInjectable(tNode, lView, token) {
        var flags = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : InjectFlags.Default;
        var notFoundValue = arguments.length > 4 ? arguments[4] : undefined;

        if (tNode !== null) {
          var bloomHash = bloomHashBitOrFactory(token); // If the ID stored here is a function, this is a special object like ElementRef or TemplateRef
          // so just call the factory function to create it.

          if (typeof bloomHash === 'function') {
            if (!enterDI(lView, tNode, flags)) {
              // Failed to enter DI, try module injector instead. If a token is injected with the @Host
              // flag, the module injector is not searched for that token in Ivy.
              return flags & InjectFlags.Host ? notFoundValueOrThrow(notFoundValue, token, flags) : lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);
            }

            try {
              var value = bloomHash();

              if (value == null && !(flags & InjectFlags.Optional)) {
                throwProviderNotFoundError(token);
              } else {
                return value;
              }
            } finally {
              leaveDI();
            }
          } else if (typeof bloomHash === 'number') {
            // A reference to the previous injector TView that was found while climbing the element
            // injector tree. This is used to know if viewProviders can be accessed on the current
            // injector.
            var previousTView = null;
            var injectorIndex = getInjectorIndex(tNode, lView);
            var parentLocation = NO_PARENT_INJECTOR;
            var hostTElementNode = flags & InjectFlags.Host ? lView[DECLARATION_COMPONENT_VIEW][T_HOST] : null; // If we should skip this injector, or if there is no injector on this node, start by
            // searching the parent injector.

            if (injectorIndex === -1 || flags & InjectFlags.SkipSelf) {
              parentLocation = injectorIndex === -1 ? getParentInjectorLocation(tNode, lView) : lView[injectorIndex + 8
              /* PARENT */
              ];

              if (parentLocation === NO_PARENT_INJECTOR || !shouldSearchParent(flags, false)) {
                injectorIndex = -1;
              } else {
                previousTView = lView[TVIEW];
                injectorIndex = getParentInjectorIndex(parentLocation);
                lView = getParentInjectorView(parentLocation, lView);
              }
            } // Traverse up the injector tree until we find a potential match or until we know there
            // *isn't* a match.


            while (injectorIndex !== -1) {
              ngDevMode && assertNodeInjector(lView, injectorIndex); // Check the current injector. If it matches, see if it contains token.

              var tView = lView[TVIEW];
              ngDevMode && assertTNodeForLView(tView.data[injectorIndex + 8
              /* TNODE */
              ], lView);

              if (bloomHasToken(bloomHash, injectorIndex, tView.data)) {
                // At this point, we have an injector which *may* contain the token, so we step through
                // the providers and directives associated with the injector's corresponding node to get
                // the instance.
                var instance = searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode);

                if (instance !== NOT_FOUND) {
                  return instance;
                }
              }

              parentLocation = lView[injectorIndex + 8
              /* PARENT */
              ];

              if (parentLocation !== NO_PARENT_INJECTOR && shouldSearchParent(flags, lView[TVIEW].data[injectorIndex + 8
              /* TNODE */
              ] === hostTElementNode) && bloomHasToken(bloomHash, injectorIndex, lView)) {
                // The def wasn't found anywhere on this node, so it was a false positive.
                // Traverse up the tree and continue searching.
                previousTView = tView;
                injectorIndex = getParentInjectorIndex(parentLocation);
                lView = getParentInjectorView(parentLocation, lView);
              } else {
                // If we should not search parent OR If the ancestor bloom filter value does not have the
                // bit corresponding to the directive we can give up on traversing up to find the specific
                // injector.
                injectorIndex = -1;
              }
            }
          }
        }

        return lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);
      }

      var NOT_FOUND = {};

      function createNodeInjector() {
        return new NodeInjector(getCurrentTNode(), getLView());
      }

      function searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode) {
        var currentTView = lView[TVIEW];
        var tNode = currentTView.data[injectorIndex + 8
        /* TNODE */
        ]; // First, we need to determine if view providers can be accessed by the starting element.
        // There are two possibilities

        var canAccessViewProviders = previousTView == null ? // 1) This is the first invocation `previousTView == null` which means that we are at the
        // `TNode` of where injector is starting to look. In such a case the only time we are allowed
        // to look into the ViewProviders is if:
        // - we are on a component
        // - AND the injector set `includeViewProviders` to true (implying that the token can see
        // ViewProviders because it is the Component or a Service which itself was declared in
        // ViewProviders)
        isComponentHost(tNode) && includeViewProviders : // 2) `previousTView != null` which means that we are now walking across the parent nodes.
        // In such a case we are only allowed to look into the ViewProviders if:
        // - We just crossed from child View to Parent View `previousTView != currentTView`
        // - AND the parent TNode is an Element.
        // This means that we just came from the Component's View and therefore are allowed to see
        // into the ViewProviders.
        previousTView != currentTView && (tNode.type & 3
        /* AnyRNode */
        ) !== 0; // This special case happens when there is a @host on the inject and when we are searching
        // on the host element node.

        var isHostSpecialCase = flags & InjectFlags.Host && hostTElementNode === tNode;
        var injectableIdx = locateDirectiveOrProvider(tNode, currentTView, token, canAccessViewProviders, isHostSpecialCase);

        if (injectableIdx !== null) {
          return getNodeInjectable(lView, currentTView, injectableIdx, tNode);
        } else {
          return NOT_FOUND;
        }
      }
      /**
       * Searches for the given token among the node's directives and providers.
       *
       * @param tNode TNode on which directives are present.
       * @param tView The tView we are currently processing
       * @param token Provider token or type of a directive to look for.
       * @param canAccessViewProviders Whether view providers should be considered.
       * @param isHostSpecialCase Whether the host special case applies.
       * @returns Index of a found directive or provider, or null when none found.
       */


      function locateDirectiveOrProvider(tNode, tView, token, canAccessViewProviders, isHostSpecialCase) {
        var nodeProviderIndexes = tNode.providerIndexes;
        var tInjectables = tView.data;
        var injectablesStart = nodeProviderIndexes & 1048575
        /* ProvidersStartIndexMask */
        ;
        var directivesStart = tNode.directiveStart;
        var directiveEnd = tNode.directiveEnd;
        var cptViewProvidersCount = nodeProviderIndexes >> 20
        /* CptViewProvidersCountShift */
        ;
        var startingIndex = canAccessViewProviders ? injectablesStart : injectablesStart + cptViewProvidersCount; // When the host special case applies, only the viewProviders and the component are visible

        var endIndex = isHostSpecialCase ? injectablesStart + cptViewProvidersCount : directiveEnd;

        for (var i = startingIndex; i < endIndex; i++) {
          var providerTokenOrDef = tInjectables[i];

          if (i < directivesStart && token === providerTokenOrDef || i >= directivesStart && providerTokenOrDef.type === token) {
            return i;
          }
        }

        if (isHostSpecialCase) {
          var dirDef = tInjectables[directivesStart];

          if (dirDef && isComponentDef(dirDef) && dirDef.type === token) {
            return directivesStart;
          }
        }

        return null;
      }
      /**
       * Retrieve or instantiate the injectable from the `LView` at particular `index`.
       *
       * This function checks to see if the value has already been instantiated and if so returns the
       * cached `injectable`. Otherwise if it detects that the value is still a factory it
       * instantiates the `injectable` and caches the value.
       */


      function getNodeInjectable(lView, tView, index, tNode) {
        var value = lView[index];
        var tData = tView.data;

        if (isFactory(value)) {
          var factory = value;

          if (factory.resolving) {
            throwCyclicDependencyError(stringifyForError(tData[index]));
          }

          var previousIncludeViewProviders = setIncludeViewProviders(factory.canSeeViewProviders);
          factory.resolving = true;
          var previousInjectImplementation = factory.injectImpl ? setInjectImplementation(factory.injectImpl) : null;
          var success = enterDI(lView, tNode, InjectFlags.Default);
          ngDevMode && assertEqual(success, true, 'Because flags do not contain \`SkipSelf\' we expect this to always succeed.');

          try {
            value = lView[index] = factory.factory(undefined, tData, lView, tNode); // This code path is hit for both directives and providers.
            // For perf reasons, we want to avoid searching for hooks on providers.
            // It does no harm to try (the hooks just won't exist), but the extra
            // checks are unnecessary and this is a hot path. So we check to see
            // if the index of the dependency is in the directive range for this
            // tNode. If it's not, we know it's a provider and skip hook registration.

            if (tView.firstCreatePass && index >= tNode.directiveStart) {
              ngDevMode && assertDirectiveDef(tData[index]);
              registerPreOrderHooks(index, tData[index], tView);
            }
          } finally {
            previousInjectImplementation !== null && setInjectImplementation(previousInjectImplementation);
            setIncludeViewProviders(previousIncludeViewProviders);
            factory.resolving = false;
            leaveDI();
          }
        }

        return value;
      }
      /**
       * Returns the bit in an injector's bloom filter that should be used to determine whether or not
       * the directive might be provided by the injector.
       *
       * When a directive is public, it is added to the bloom filter and given a unique ID that can be
       * retrieved on the Type. When the directive isn't public or the token is not a directive `null`
       * is returned as the node injector can not possibly provide that token.
       *
       * @param token the injection token
       * @returns the matching bit to check in the bloom filter or `null` if the token is not known.
       *   When the returned value is negative then it represents special values such as `Injector`.
       */


      function bloomHashBitOrFactory(token) {
        ngDevMode && assertDefined(token, 'token must be defined');

        if (typeof token === 'string') {
          return token.charCodeAt(0) || 0;
        }

        var tokenId = // First check with `hasOwnProperty` so we don't get an inherited ID.
        token.hasOwnProperty(NG_ELEMENT_ID) ? token[NG_ELEMENT_ID] : undefined; // Negative token IDs are used for special objects such as `Injector`

        if (typeof tokenId === 'number') {
          if (tokenId >= 0) {
            return tokenId & BLOOM_MASK;
          } else {
            ngDevMode && assertEqual(tokenId, -1
            /* Injector */
            , 'Expecting to get Special Injector Id');
            return createNodeInjector;
          }
        } else {
          return tokenId;
        }
      }

      function bloomHasToken(bloomHash, injectorIndex, injectorView) {
        // Create a mask that targets the specific bit associated with the directive we're looking for.
        // JS bit operations are 32 bits, so this will be a number between 2^0 and 2^31, corresponding
        // to bit positions 0 - 31 in a 32 bit integer.
        var mask = 1 << bloomHash; // Each bloom bucket in `injectorView` represents `BLOOM_BUCKET_BITS` number of bits of
        // `bloomHash`. Any bits in `bloomHash` beyond `BLOOM_BUCKET_BITS` indicate the bucket offset
        // that should be used.

        var value = injectorView[injectorIndex + (bloomHash >> BLOOM_BUCKET_BITS)]; // If the bloom filter value has the bit corresponding to the directive's bloomBit flipped on,
        // this injector is a potential match.

        return !!(value & mask);
      }
      /** Returns true if flags prevent parent injector from being searched for tokens */


      function shouldSearchParent(flags, isFirstHostTNode) {
        return !(flags & InjectFlags.Self) && !(flags & InjectFlags.Host && isFirstHostTNode);
      }

      var NodeInjector = /*#__PURE__*/function () {
        function NodeInjector(_tNode, _lView) {
          _classCallCheck2(this, NodeInjector);

          this._tNode = _tNode;
          this._lView = _lView;
        }

        _createClass2(NodeInjector, [{
          key: "get",
          value: function get(token, notFoundValue) {
            return getOrCreateInjectable(this._tNode, this._lView, token, undefined, notFoundValue);
          }
        }]);

        return NodeInjector;
      }();
      /**
       * @codeGenApi
       */


      function ɵɵgetFactoryOf(type) {
        var typeAny = type;

        if (isForwardRef(type)) {
          return function () {
            var factory = ɵɵgetFactoryOf(resolveForwardRef(typeAny));
            return factory ? factory() : null;
          };
        }

        var factory = getFactoryDef(typeAny);

        if (factory === null) {
          var injectorDef = getInjectorDef(typeAny);
          factory = injectorDef && injectorDef.factory;
        }

        return factory || null;
      }
      /**
       * @codeGenApi
       */


      function ɵɵgetInheritedFactory(type) {
        return noSideEffects(function () {
          var ownConstructor = type.prototype.constructor;
          var ownFactory = ownConstructor[NG_FACTORY_DEF] || ɵɵgetFactoryOf(ownConstructor);
          var objectPrototype = Object.prototype;
          var parent = Object.getPrototypeOf(type.prototype).constructor; // Go up the prototype until we hit `Object`.

          while (parent && parent !== objectPrototype) {
            var factory = parent[NG_FACTORY_DEF] || ɵɵgetFactoryOf(parent); // If we hit something that has a factory and the factory isn't the same as the type,
            // we've found the inherited factory. Note the check that the factory isn't the type's
            // own factory is redundant in most cases, but if the user has custom decorators on the
            // class, this lookup will start one level down in the prototype chain, causing us to
            // find the own factory first and potentially triggering an infinite loop downstream.

            if (factory && factory !== ownFactory) {
              return factory;
            }

            parent = Object.getPrototypeOf(parent);
          } // There is no factory defined. Either this was improper usage of inheritance
          // (no Angular decorator on the superclass) or there is no constructor at all
          // in the inheritance chain. Since the two cases cannot be distinguished, the
          // latter has to be assumed.


          return function (t) {
            return new t();
          };
        });
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Facade for the attribute injection from DI.
       *
       * @codeGenApi
       */


      function ɵɵinjectAttribute(attrNameToInject) {
        return injectAttributeImpl(getCurrentTNode(), attrNameToInject);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ANNOTATIONS = '__annotations__';
      var PARAMETERS = '__parameters__';
      var PROP_METADATA = '__prop__metadata__';
      /**
       * @suppress {globalThis}
       */

      function makeDecorator(name, props, parentClass, additionalProcessing, typeFn) {
        return noSideEffects(function () {
          var metaCtor = makeMetadataCtor(props);

          function DecoratorFactory() {
            for (var _len43 = arguments.length, args = new Array(_len43), _key45 = 0; _key45 < _len43; _key45++) {
              args[_key45] = arguments[_key45];
            }

            if (this instanceof DecoratorFactory) {
              metaCtor.call.apply(metaCtor, [this].concat(args));
              return this;
            }

            var annotationInstance = _construct2(DecoratorFactory, args);

            return function TypeDecorator(cls) {
              if (typeFn) typeFn.apply(void 0, [cls].concat(args)); // Use of Object.defineProperty is important since it creates non-enumerable property which
              // prevents the property is copied during subclassing.

              var annotations = cls.hasOwnProperty(ANNOTATIONS) ? cls[ANNOTATIONS] : Object.defineProperty(cls, ANNOTATIONS, {
                value: []
              })[ANNOTATIONS];
              annotations.push(annotationInstance);
              if (additionalProcessing) additionalProcessing(cls);
              return cls;
            };
          }

          if (parentClass) {
            DecoratorFactory.prototype = Object.create(parentClass.prototype);
          }

          DecoratorFactory.prototype.ngMetadataName = name;
          DecoratorFactory.annotationCls = DecoratorFactory;
          return DecoratorFactory;
        });
      }

      function makeMetadataCtor(props) {
        return function ctor() {
          if (props) {
            var values = props.apply(void 0, arguments);

            for (var propName in values) {
              this[propName] = values[propName];
            }
          }
        };
      }

      function makeParamDecorator(name, props, parentClass) {
        return noSideEffects(function () {
          var metaCtor = makeMetadataCtor(props);

          function ParamDecoratorFactory() {
            for (var _len44 = arguments.length, args = new Array(_len44), _key46 = 0; _key46 < _len44; _key46++) {
              args[_key46] = arguments[_key46];
            }

            if (this instanceof ParamDecoratorFactory) {
              metaCtor.apply(this, args);
              return this;
            }

            var annotationInstance = _construct2(ParamDecoratorFactory, args);

            ParamDecorator.annotation = annotationInstance;
            return ParamDecorator;

            function ParamDecorator(cls, unusedKey, index) {
              // Use of Object.defineProperty is important since it creates non-enumerable property which
              // prevents the property is copied during subclassing.
              var parameters = cls.hasOwnProperty(PARAMETERS) ? cls[PARAMETERS] : Object.defineProperty(cls, PARAMETERS, {
                value: []
              })[PARAMETERS]; // there might be gaps if some in between parameters do not have annotations.
              // we pad with nulls.

              while (parameters.length <= index) {
                parameters.push(null);
              }

              (parameters[index] = parameters[index] || []).push(annotationInstance);
              return cls;
            }
          }

          if (parentClass) {
            ParamDecoratorFactory.prototype = Object.create(parentClass.prototype);
          }

          ParamDecoratorFactory.prototype.ngMetadataName = name;
          ParamDecoratorFactory.annotationCls = ParamDecoratorFactory;
          return ParamDecoratorFactory;
        });
      }

      function makePropDecorator(name, props, parentClass, additionalProcessing) {
        return noSideEffects(function () {
          var metaCtor = makeMetadataCtor(props);

          function PropDecoratorFactory() {
            for (var _len45 = arguments.length, args = new Array(_len45), _key47 = 0; _key47 < _len45; _key47++) {
              args[_key47] = arguments[_key47];
            }

            if (this instanceof PropDecoratorFactory) {
              metaCtor.apply(this, args);
              return this;
            }

            var decoratorInstance = _construct2(PropDecoratorFactory, args);

            function PropDecorator(target, name) {
              var constructor = target.constructor; // Use of Object.defineProperty is important because it creates a non-enumerable property
              // which prevents the property from being copied during subclassing.

              var meta = constructor.hasOwnProperty(PROP_METADATA) ? constructor[PROP_METADATA] : Object.defineProperty(constructor, PROP_METADATA, {
                value: {}
              })[PROP_METADATA];
              meta[name] = meta.hasOwnProperty(name) && meta[name] || [];
              meta[name].unshift(decoratorInstance);
              if (additionalProcessing) additionalProcessing.apply(void 0, [target, name].concat(args));
            }

            return PropDecorator;
          }

          if (parentClass) {
            PropDecoratorFactory.prototype = Object.create(parentClass.prototype);
          }

          PropDecoratorFactory.prototype.ngMetadataName = name;
          PropDecoratorFactory.annotationCls = PropDecoratorFactory;
          return PropDecoratorFactory;
        });
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function CREATE_ATTRIBUTE_DECORATOR__PRE_R3__() {
        return makeParamDecorator('Attribute', function (attributeName) {
          return {
            attributeName: attributeName
          };
        });
      }

      function CREATE_ATTRIBUTE_DECORATOR__POST_R3__() {
        return makeParamDecorator('Attribute', function (attributeName) {
          return {
            attributeName: attributeName,
            __NG_ELEMENT_ID__: function __NG_ELEMENT_ID__() {
              return ɵɵinjectAttribute(attributeName);
            }
          };
        });
      }

      var CREATE_ATTRIBUTE_DECORATOR_IMPL = CREATE_ATTRIBUTE_DECORATOR__POST_R3__;
      /**
       * Attribute decorator and metadata.
       *
       * @Annotation
       * @publicApi
       */

      var Attribute = CREATE_ATTRIBUTE_DECORATOR_IMPL();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Creates a token that can be used in a DI Provider.
       *
       * Use an `InjectionToken` whenever the type you are injecting is not reified (does not have a
       * runtime representation) such as when injecting an interface, callable type, array or
       * parameterized type.
       *
       * `InjectionToken` is parameterized on `T` which is the type of object which will be returned by
       * the `Injector`. This provides additional level of type safety.
       *
       * ```
       * interface MyInterface {...}
       * var myInterface = injector.get(new InjectionToken<MyInterface>('SomeToken'));
       * // myInterface is inferred to be MyInterface.
       * ```
       *
       * When creating an `InjectionToken`, you can optionally specify a factory function which returns
       * (possibly by creating) a default value of the parameterized type `T`. This sets up the
       * `InjectionToken` using this factory as a provider as if it was defined explicitly in the
       * application's root injector. If the factory function, which takes zero arguments, needs to inject
       * dependencies, it can do so using the `inject` function. See below for an example.
       *
       * Additionally, if a `factory` is specified you can also specify the `providedIn` option, which
       * overrides the above behavior and marks the token as belonging to a particular `@NgModule`. As
       * mentioned above, `'root'` is the default value for `providedIn`.
       *
       * @usageNotes
       * ### Basic Example
       *
       * ### Plain InjectionToken
       *
       * {@example core/di/ts/injector_spec.ts region='InjectionToken'}
       *
       * ### Tree-shakable InjectionToken
       *
       * {@example core/di/ts/injector_spec.ts region='ShakableInjectionToken'}
       *
       *
       * @publicApi
       */

      var InjectionToken = /*#__PURE__*/function () {
        function InjectionToken(_desc, options) {
          _classCallCheck2(this, InjectionToken);

          this._desc = _desc;
          /** @internal */

          this.ngMetadataName = 'InjectionToken';
          this.ɵprov = undefined;

          if (typeof options == 'number') {
            (typeof ngDevMode === 'undefined' || ngDevMode) && assertLessThan(options, 0, 'Only negative numbers are supported here'); // This is a special hack to assign __NG_ELEMENT_ID__ to this instance.
            // See `InjectorMarkers`

            this.__NG_ELEMENT_ID__ = options;
          } else if (options !== undefined) {
            this.ɵprov = ɵɵdefineInjectable({
              token: this,
              providedIn: options.providedIn || 'root',
              factory: options.factory
            });
          }
        }

        _createClass2(InjectionToken, [{
          key: "toString",
          value: function toString() {
            return "InjectionToken ".concat(this._desc);
          }
        }]);

        return InjectionToken;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A DI token that you can use to create a virtual [provider](guide/glossary#provider)
       * that will populate the `entryComponents` field of components and NgModules
       * based on its `useValue` property value.
       * All components that are referenced in the `useValue` value (either directly
       * or in a nested array or map) are added to the `entryComponents` property.
       *
       * @usageNotes
       *
       * The following example shows how the router can populate the `entryComponents`
       * field of an NgModule based on a router configuration that refers
       * to components.
       *
       * ```typescript
       * // helper function inside the router
       * function provideRoutes(routes) {
       *   return [
       *     {provide: ROUTES, useValue: routes},
       *     {provide: ANALYZE_FOR_ENTRY_COMPONENTS, useValue: routes, multi: true}
       *   ];
       * }
       *
       * // user code
       * let routes = [
       *   {path: '/root', component: RootComp},
       *   {path: '/teams', component: TeamsComp}
       * ];
       *
       * @NgModule({
       *   providers: [provideRoutes(routes)]
       * })
       * class ModuleWithRoutes {}
       * ```
       *
       * @publicApi
       * @deprecated Since 9.0.0. With Ivy, this property is no longer necessary.
       */


      var ANALYZE_FOR_ENTRY_COMPONENTS = new InjectionToken('AnalyzeForEntryComponents'); // Stores the default value of `emitDistinctChangesOnly` when the `emitDistinctChangesOnly` is not
      // explicitly set. This value will be changed to `true` in v12.
      // TODO(misko): switch the default in v12 to `true`. See: packages/compiler/src/core.ts

      var emitDistinctChangesOnlyDefaultValue = false;
      /**
       * Base class for query metadata.
       *
       * @see `ContentChildren`.
       * @see `ContentChild`.
       * @see `ViewChildren`.
       * @see `ViewChild`.
       *
       * @publicApi
       */

      var Query = function Query() {
        _classCallCheck2(this, Query);
      };

      var ɵ0$1 = function ɵ0$1(selector) {
        var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
        return Object.assign({
          selector: selector,
          first: false,
          isViewQuery: false,
          descendants: false,
          emitDistinctChangesOnly: emitDistinctChangesOnlyDefaultValue
        }, data);
      };
      /**
       * ContentChildren decorator and metadata.
       *
       *
       * @Annotation
       * @publicApi
       */


      var ContentChildren = makePropDecorator('ContentChildren', ɵ0$1, Query);

      var ɵ1 = function ɵ1(selector) {
        var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
        return Object.assign({
          selector: selector,
          first: true,
          isViewQuery: false,
          descendants: true
        }, data);
      };
      /**
       * ContentChild decorator and metadata.
       *
       *
       * @Annotation
       *
       * @publicApi
       */


      var ContentChild = makePropDecorator('ContentChild', ɵ1, Query);

      var ɵ2 = function ɵ2(selector) {
        var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
        return Object.assign({
          selector: selector,
          first: false,
          isViewQuery: true,
          descendants: true,
          emitDistinctChangesOnly: emitDistinctChangesOnlyDefaultValue
        }, data);
      };
      /**
       * ViewChildren decorator and metadata.
       *
       * @Annotation
       * @publicApi
       */


      var ViewChildren = makePropDecorator('ViewChildren', ɵ2, Query);

      var ɵ3 = function ɵ3(selector, data) {
        return Object.assign({
          selector: selector,
          first: true,
          isViewQuery: true,
          descendants: true
        }, data);
      };
      /**
       * ViewChild decorator and metadata.
       *
       * @Annotation
       * @publicApi
       */


      var ViewChild = makePropDecorator('ViewChild', ɵ3, Query);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var R3ResolvedDependencyType;

      (function (R3ResolvedDependencyType) {
        R3ResolvedDependencyType[R3ResolvedDependencyType["Token"] = 0] = "Token";
        R3ResolvedDependencyType[R3ResolvedDependencyType["Attribute"] = 1] = "Attribute";
        R3ResolvedDependencyType[R3ResolvedDependencyType["ChangeDetectorRef"] = 2] = "ChangeDetectorRef";
        R3ResolvedDependencyType[R3ResolvedDependencyType["Invalid"] = 3] = "Invalid";
      })(R3ResolvedDependencyType || (R3ResolvedDependencyType = {}));

      var R3FactoryTarget;

      (function (R3FactoryTarget) {
        R3FactoryTarget[R3FactoryTarget["Directive"] = 0] = "Directive";
        R3FactoryTarget[R3FactoryTarget["Component"] = 1] = "Component";
        R3FactoryTarget[R3FactoryTarget["Injectable"] = 2] = "Injectable";
        R3FactoryTarget[R3FactoryTarget["Pipe"] = 3] = "Pipe";
        R3FactoryTarget[R3FactoryTarget["NgModule"] = 4] = "NgModule";
      })(R3FactoryTarget || (R3FactoryTarget = {}));

      var ViewEncapsulation$1;

      (function (ViewEncapsulation) {
        ViewEncapsulation[ViewEncapsulation["Emulated"] = 0] = "Emulated"; // Historically the 1 value was for `Native` encapsulation which has been removed as of v11.

        ViewEncapsulation[ViewEncapsulation["None"] = 2] = "None";
        ViewEncapsulation[ViewEncapsulation["ShadowDom"] = 3] = "ShadowDom";
      })(ViewEncapsulation$1 || (ViewEncapsulation$1 = {}));
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function getCompilerFacade() {
        var globalNg = _global['ng'];

        if (!globalNg || !globalNg.ɵcompilerFacade) {
          throw new Error("Angular JIT compilation failed: '@angular/compiler' not loaded!\n" + "  - JIT compilation is discouraged for production use-cases! Consider AOT mode instead.\n" + "  - Did you bootstrap using '@angular/platform-browser-dynamic' or '@angular/platform-server'?\n" + "  - Alternatively provide the compiler with 'import \"@angular/compiler\";' before bootstrapping.");
        }

        return globalNg.ɵcompilerFacade;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @description
       *
       * Represents a type that a Component or other object is instances of.
       *
       * An example of a `Type` is `MyCustomComponent` class, which in JavaScript is represented by
       * the `MyCustomComponent` constructor function.
       *
       * @publicApi
       */


      var Type = Function;

      function isType(v) {
        return typeof v === 'function';
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Equivalent to ES6 spread, add each item to an array.
       *
       * @param items The items to add
       * @param arr The array to which you want to add the items
       */


      function addAllToArray(items, arr) {
        for (var i = 0; i < items.length; i++) {
          arr.push(items[i]);
        }
      }
      /**
       * Determines if the contents of two arrays is identical
       *
       * @param a first array
       * @param b second array
       * @param identityAccessor Optional function for extracting stable object identity from a value in
       *     the array.
       */


      function arrayEquals(a, b, identityAccessor) {
        if (a.length !== b.length) return false;

        for (var i = 0; i < a.length; i++) {
          var valueA = a[i];
          var valueB = b[i];

          if (identityAccessor) {
            valueA = identityAccessor(valueA);
            valueB = identityAccessor(valueB);
          }

          if (valueB !== valueA) {
            return false;
          }
        }

        return true;
      }
      /**
       * Flattens an array.
       */


      function flatten(list, dst) {
        if (dst === undefined) dst = list;

        for (var i = 0; i < list.length; i++) {
          var item = list[i];

          if (Array.isArray(item)) {
            // we need to inline it.
            if (dst === list) {
              // Our assumption that the list was already flat was wrong and
              // we need to clone flat since we need to write to it.
              dst = list.slice(0, i);
            }

            flatten(item, dst);
          } else if (dst !== list) {
            dst.push(item);
          }
        }

        return dst;
      }

      function deepForEach(input, fn) {
        input.forEach(function (value) {
          return Array.isArray(value) ? deepForEach(value, fn) : fn(value);
        });
      }

      function addToArray(arr, index, value) {
        // perf: array.push is faster than array.splice!
        if (index >= arr.length) {
          arr.push(value);
        } else {
          arr.splice(index, 0, value);
        }
      }

      function removeFromArray(arr, index) {
        // perf: array.pop is faster than array.splice!
        if (index >= arr.length - 1) {
          return arr.pop();
        } else {
          return arr.splice(index, 1)[0];
        }
      }

      function newArray(size, value) {
        var list = [];

        for (var i = 0; i < size; i++) {
          list.push(value);
        }

        return list;
      }
      /**
       * Remove item from array (Same as `Array.splice()` but faster.)
       *
       * `Array.splice()` is not as fast because it has to allocate an array for the elements which were
       * removed. This causes memory pressure and slows down code when most of the time we don't
       * care about the deleted items array.
       *
       * https://jsperf.com/fast-array-splice (About 20x faster)
       *
       * @param array Array to splice
       * @param index Index of element in array to remove.
       * @param count Number of items to remove.
       */


      function arraySplice(array, index, count) {
        var length = array.length - count;

        while (index < length) {
          array[index] = array[index + count];
          index++;
        }

        while (count--) {
          array.pop(); // shrink the array
        }
      }
      /**
       * Same as `Array.splice(index, 0, value)` but faster.
       *
       * `Array.splice()` is not fast because it has to allocate an array for the elements which were
       * removed. This causes memory pressure and slows down code when most of the time we don't
       * care about the deleted items array.
       *
       * @param array Array to splice.
       * @param index Index in array where the `value` should be added.
       * @param value Value to add to array.
       */


      function arrayInsert(array, index, value) {
        ngDevMode && assertLessThanOrEqual(index, array.length, 'Can\'t insert past array end.');
        var end = array.length;

        while (end > index) {
          var previousEnd = end - 1;
          array[end] = array[previousEnd];
          end = previousEnd;
        }

        array[index] = value;
      }
      /**
       * Same as `Array.splice2(index, 0, value1, value2)` but faster.
       *
       * `Array.splice()` is not fast because it has to allocate an array for the elements which were
       * removed. This causes memory pressure and slows down code when most of the time we don't
       * care about the deleted items array.
       *
       * @param array Array to splice.
       * @param index Index in array where the `value` should be added.
       * @param value1 Value to add to array.
       * @param value2 Value to add to array.
       */


      function arrayInsert2(array, index, value1, value2) {
        ngDevMode && assertLessThanOrEqual(index, array.length, 'Can\'t insert past array end.');
        var end = array.length;

        if (end == index) {
          // inserting at the end.
          array.push(value1, value2);
        } else if (end === 1) {
          // corner case when we have less items in array than we have items to insert.
          array.push(value2, array[0]);
          array[0] = value1;
        } else {
          end--;
          array.push(array[end - 1], array[end]);

          while (end > index) {
            var previousEnd = end - 2;
            array[end] = array[previousEnd];
            end--;
          }

          array[index] = value1;
          array[index + 1] = value2;
        }
      }
      /**
       * Insert a `value` into an `array` so that the array remains sorted.
       *
       * NOTE:
       * - Duplicates are not allowed, and are ignored.
       * - This uses binary search algorithm for fast inserts.
       *
       * @param array A sorted array to insert into.
       * @param value The value to insert.
       * @returns index of the inserted value.
       */


      function arrayInsertSorted(array, value) {
        var index = arrayIndexOfSorted(array, value);

        if (index < 0) {
          // if we did not find it insert it.
          index = ~index;
          arrayInsert(array, index, value);
        }

        return index;
      }
      /**
       * Remove `value` from a sorted `array`.
       *
       * NOTE:
       * - This uses binary search algorithm for fast removals.
       *
       * @param array A sorted array to remove from.
       * @param value The value to remove.
       * @returns index of the removed value.
       *   - positive index if value found and removed.
       *   - negative index if value not found. (`~index` to get the value where it should have been
       *     inserted)
       */


      function arrayRemoveSorted(array, value) {
        var index = arrayIndexOfSorted(array, value);

        if (index >= 0) {
          arraySplice(array, index, 1);
        }

        return index;
      }
      /**
       * Get an index of an `value` in a sorted `array`.
       *
       * NOTE:
       * - This uses binary search algorithm for fast removals.
       *
       * @param array A sorted array to binary search.
       * @param value The value to look for.
       * @returns index of the value.
       *   - positive index if value found.
       *   - negative index if value not found. (`~index` to get the value where it should have been
       *     located)
       */


      function arrayIndexOfSorted(array, value) {
        return _arrayIndexOfSorted(array, value, 0);
      }
      /**
       * Set a `value` for a `key`.
       *
       * @param keyValueArray to modify.
       * @param key The key to locate or create.
       * @param value The value to set for a `key`.
       * @returns index (always even) of where the value vas set.
       */


      function keyValueArraySet(keyValueArray, key, value) {
        var index = keyValueArrayIndexOf(keyValueArray, key);

        if (index >= 0) {
          // if we found it set it.
          keyValueArray[index | 1] = value;
        } else {
          index = ~index;
          arrayInsert2(keyValueArray, index, key, value);
        }

        return index;
      }
      /**
       * Retrieve a `value` for a `key` (on `undefined` if not found.)
       *
       * @param keyValueArray to search.
       * @param key The key to locate.
       * @return The `value` stored at the `key` location or `undefined if not found.
       */


      function keyValueArrayGet(keyValueArray, key) {
        var index = keyValueArrayIndexOf(keyValueArray, key);

        if (index >= 0) {
          // if we found it retrieve it.
          return keyValueArray[index | 1];
        }

        return undefined;
      }
      /**
       * Retrieve a `key` index value in the array or `-1` if not found.
       *
       * @param keyValueArray to search.
       * @param key The key to locate.
       * @returns index of where the key is (or should have been.)
       *   - positive (even) index if key found.
       *   - negative index if key not found. (`~index` (even) to get the index where it should have
       *     been inserted.)
       */


      function keyValueArrayIndexOf(keyValueArray, key) {
        return _arrayIndexOfSorted(keyValueArray, key, 1);
      }
      /**
       * Delete a `key` (and `value`) from the `KeyValueArray`.
       *
       * @param keyValueArray to modify.
       * @param key The key to locate or delete (if exist).
       * @returns index of where the key was (or should have been.)
       *   - positive (even) index if key found and deleted.
       *   - negative index if key not found. (`~index` (even) to get the index where it should have
       *     been.)
       */


      function keyValueArrayDelete(keyValueArray, key) {
        var index = keyValueArrayIndexOf(keyValueArray, key);

        if (index >= 0) {
          // if we found it remove it.
          arraySplice(keyValueArray, index, 2);
        }

        return index;
      }
      /**
       * INTERNAL: Get an index of an `value` in a sorted `array` by grouping search by `shift`.
       *
       * NOTE:
       * - This uses binary search algorithm for fast removals.
       *
       * @param array A sorted array to binary search.
       * @param value The value to look for.
       * @param shift grouping shift.
       *   - `0` means look at every location
       *   - `1` means only look at every other (even) location (the odd locations are to be ignored as
       *         they are values.)
       * @returns index of the value.
       *   - positive index if value found.
       *   - negative index if value not found. (`~index` to get the value where it should have been
       * inserted)
       */


      function _arrayIndexOfSorted(array, value, shift) {
        ngDevMode && assertEqual(Array.isArray(array), true, 'Expecting an array');
        var start = 0;
        var end = array.length >> shift;

        while (end !== start) {
          var middle = start + (end - start >> 1); // find the middle.

          var current = array[middle << shift];

          if (value === current) {
            return middle << shift;
          } else if (current > value) {
            end = middle;
          } else {
            start = middle + 1; // We already searched middle so make it non-inclusive by adding 1
          }
        }

        return ~(end << shift);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /*
       * #########################
       * Attention: These Regular expressions have to hold even if the code is minified!
       * ##########################
       */

      /**
       * Regular expression that detects pass-through constructors for ES5 output. This Regex
       * intends to capture the common delegation pattern emitted by TypeScript and Babel. Also
       * it intends to capture the pattern where existing constructors have been downleveled from
       * ES2015 to ES5 using TypeScript w/ downlevel iteration. e.g.
       *
       * ```
       *   function MyClass() {
       *     var _this = _super.apply(this, arguments) || this;
       * ```
       *
       * ```
       *   function MyClass() {
       *     var _this = _super.apply(this, __spread(arguments)) || this;
       * ```
       *
       * More details can be found in: https://github.com/angular/angular/issues/38453.
       */


      var ES5_DELEGATE_CTOR = /^function\s+\S+\(\)\s*{[\s\S]+\.apply\(this,\s*(arguments|[^()]+\(arguments\))\)/;
      /** Regular expression that detects ES2015 classes which extend from other classes. */

      var ES2015_INHERITED_CLASS = /^class\s+[A-Za-z\d$_]*\s*extends\s+[^{]+{/;
      /**
       * Regular expression that detects ES2015 classes which extend from other classes and
       * have an explicit constructor defined.
       */

      var ES2015_INHERITED_CLASS_WITH_CTOR = /^class\s+[A-Za-z\d$_]*\s*extends\s+[^{]+{[\s\S]*constructor\s*\(/;
      /**
       * Regular expression that detects ES2015 classes which extend from other classes
       * and inherit a constructor.
       */

      var ES2015_INHERITED_CLASS_WITH_DELEGATE_CTOR = /^class\s+[A-Za-z\d$_]*\s*extends\s+[^{]+{[\s\S]*constructor\s*\(\)\s*{\s*super\(\.\.\.arguments\)/;
      /**
       * Determine whether a stringified type is a class which delegates its constructor
       * to its parent.
       *
       * This is not trivial since compiled code can actually contain a constructor function
       * even if the original source code did not. For instance, when the child class contains
       * an initialized instance property.
       */

      function isDelegateCtor(typeStr) {
        return ES5_DELEGATE_CTOR.test(typeStr) || ES2015_INHERITED_CLASS_WITH_DELEGATE_CTOR.test(typeStr) || ES2015_INHERITED_CLASS.test(typeStr) && !ES2015_INHERITED_CLASS_WITH_CTOR.test(typeStr);
      }

      var ReflectionCapabilities = /*#__PURE__*/function () {
        function ReflectionCapabilities(reflect) {
          _classCallCheck2(this, ReflectionCapabilities);

          this._reflect = reflect || _global['Reflect'];
        }

        _createClass2(ReflectionCapabilities, [{
          key: "isReflectionEnabled",
          value: function isReflectionEnabled() {
            return true;
          }
        }, {
          key: "factory",
          value: function factory(t) {
            return function () {
              for (var _len46 = arguments.length, args = new Array(_len46), _key48 = 0; _key48 < _len46; _key48++) {
                args[_key48] = arguments[_key48];
              }

              return _construct2(t, args);
            };
          }
          /** @internal */

        }, {
          key: "_zipTypesAndAnnotations",
          value: function _zipTypesAndAnnotations(paramTypes, paramAnnotations) {
            var result;

            if (typeof paramTypes === 'undefined') {
              result = newArray(paramAnnotations.length);
            } else {
              result = newArray(paramTypes.length);
            }

            for (var i = 0; i < result.length; i++) {
              // TS outputs Object for parameters without types, while Traceur omits
              // the annotations. For now we preserve the Traceur behavior to aid
              // migration, but this can be revisited.
              if (typeof paramTypes === 'undefined') {
                result[i] = [];
              } else if (paramTypes[i] && paramTypes[i] != Object) {
                result[i] = [paramTypes[i]];
              } else {
                result[i] = [];
              }

              if (paramAnnotations && paramAnnotations[i] != null) {
                result[i] = result[i].concat(paramAnnotations[i]);
              }
            }

            return result;
          }
        }, {
          key: "_ownParameters",
          value: function _ownParameters(type, parentCtor) {
            var typeStr = type.toString(); // If we have no decorators, we only have function.length as metadata.
            // In that case, to detect whether a child class declared an own constructor or not,
            // we need to look inside of that constructor to check whether it is
            // just calling the parent.
            // This also helps to work around for https://github.com/Microsoft/TypeScript/issues/12439
            // that sets 'design:paramtypes' to []
            // if a class inherits from another class but has no ctor declared itself.

            if (isDelegateCtor(typeStr)) {
              return null;
            } // Prefer the direct API.


            if (type.parameters && type.parameters !== parentCtor.parameters) {
              return type.parameters;
            } // API of tsickle for lowering decorators to properties on the class.


            var tsickleCtorParams = type.ctorParameters;

            if (tsickleCtorParams && tsickleCtorParams !== parentCtor.ctorParameters) {
              // Newer tsickle uses a function closure
              // Retain the non-function case for compatibility with older tsickle
              var ctorParameters = typeof tsickleCtorParams === 'function' ? tsickleCtorParams() : tsickleCtorParams;

              var _paramTypes = ctorParameters.map(function (ctorParam) {
                return ctorParam && ctorParam.type;
              });

              var _paramAnnotations = ctorParameters.map(function (ctorParam) {
                return ctorParam && convertTsickleDecoratorIntoMetadata(ctorParam.decorators);
              });

              return this._zipTypesAndAnnotations(_paramTypes, _paramAnnotations);
            } // API for metadata created by invoking the decorators.


            var paramAnnotations = type.hasOwnProperty(PARAMETERS) && type[PARAMETERS];

            var paramTypes = this._reflect && this._reflect.getOwnMetadata && this._reflect.getOwnMetadata('design:paramtypes', type);

            if (paramTypes || paramAnnotations) {
              return this._zipTypesAndAnnotations(paramTypes, paramAnnotations);
            } // If a class has no decorators, at least create metadata
            // based on function.length.
            // Note: We know that this is a real constructor as we checked
            // the content of the constructor above.


            return newArray(type.length);
          }
        }, {
          key: "parameters",
          value: function parameters(type) {
            // Note: only report metadata if we have at least one class decorator
            // to stay in sync with the static reflector.
            if (!isType(type)) {
              return [];
            }

            var parentCtor = getParentCtor(type);

            var parameters = this._ownParameters(type, parentCtor);

            if (!parameters && parentCtor !== Object) {
              parameters = this.parameters(parentCtor);
            }

            return parameters || [];
          }
        }, {
          key: "_ownAnnotations",
          value: function _ownAnnotations(typeOrFunc, parentCtor) {
            // Prefer the direct API.
            if (typeOrFunc.annotations && typeOrFunc.annotations !== parentCtor.annotations) {
              var annotations = typeOrFunc.annotations;

              if (typeof annotations === 'function' && annotations.annotations) {
                annotations = annotations.annotations;
              }

              return annotations;
            } // API of tsickle for lowering decorators to properties on the class.


            if (typeOrFunc.decorators && typeOrFunc.decorators !== parentCtor.decorators) {
              return convertTsickleDecoratorIntoMetadata(typeOrFunc.decorators);
            } // API for metadata created by invoking the decorators.


            if (typeOrFunc.hasOwnProperty(ANNOTATIONS)) {
              return typeOrFunc[ANNOTATIONS];
            }

            return null;
          }
        }, {
          key: "annotations",
          value: function annotations(typeOrFunc) {
            if (!isType(typeOrFunc)) {
              return [];
            }

            var parentCtor = getParentCtor(typeOrFunc);
            var ownAnnotations = this._ownAnnotations(typeOrFunc, parentCtor) || [];
            var parentAnnotations = parentCtor !== Object ? this.annotations(parentCtor) : [];
            return parentAnnotations.concat(ownAnnotations);
          }
        }, {
          key: "_ownPropMetadata",
          value: function _ownPropMetadata(typeOrFunc, parentCtor) {
            // Prefer the direct API.
            if (typeOrFunc.propMetadata && typeOrFunc.propMetadata !== parentCtor.propMetadata) {
              var propMetadata = typeOrFunc.propMetadata;

              if (typeof propMetadata === 'function' && propMetadata.propMetadata) {
                propMetadata = propMetadata.propMetadata;
              }

              return propMetadata;
            } // API of tsickle for lowering decorators to properties on the class.


            if (typeOrFunc.propDecorators && typeOrFunc.propDecorators !== parentCtor.propDecorators) {
              var propDecorators = typeOrFunc.propDecorators;
              var _propMetadata = {};
              Object.keys(propDecorators).forEach(function (prop) {
                _propMetadata[prop] = convertTsickleDecoratorIntoMetadata(propDecorators[prop]);
              });
              return _propMetadata;
            } // API for metadata created by invoking the decorators.


            if (typeOrFunc.hasOwnProperty(PROP_METADATA)) {
              return typeOrFunc[PROP_METADATA];
            }

            return null;
          }
        }, {
          key: "propMetadata",
          value: function propMetadata(typeOrFunc) {
            if (!isType(typeOrFunc)) {
              return {};
            }

            var parentCtor = getParentCtor(typeOrFunc);
            var propMetadata = {};

            if (parentCtor !== Object) {
              var parentPropMetadata = this.propMetadata(parentCtor);
              Object.keys(parentPropMetadata).forEach(function (propName) {
                propMetadata[propName] = parentPropMetadata[propName];
              });
            }

            var ownPropMetadata = this._ownPropMetadata(typeOrFunc, parentCtor);

            if (ownPropMetadata) {
              Object.keys(ownPropMetadata).forEach(function (propName) {
                var decorators = [];

                if (propMetadata.hasOwnProperty(propName)) {
                  decorators.push.apply(decorators, _toConsumableArray(propMetadata[propName]));
                }

                decorators.push.apply(decorators, _toConsumableArray(ownPropMetadata[propName]));
                propMetadata[propName] = decorators;
              });
            }

            return propMetadata;
          }
        }, {
          key: "ownPropMetadata",
          value: function ownPropMetadata(typeOrFunc) {
            if (!isType(typeOrFunc)) {
              return {};
            }

            return this._ownPropMetadata(typeOrFunc, getParentCtor(typeOrFunc)) || {};
          }
        }, {
          key: "hasLifecycleHook",
          value: function hasLifecycleHook(type, lcProperty) {
            return type instanceof Type && lcProperty in type.prototype;
          }
        }, {
          key: "guards",
          value: function guards(type) {
            return {};
          }
        }, {
          key: "getter",
          value: function getter(name) {
            return new Function('o', 'return o.' + name + ';');
          }
        }, {
          key: "setter",
          value: function setter(name) {
            return new Function('o', 'v', 'return o.' + name + ' = v;');
          }
        }, {
          key: "method",
          value: function method(name) {
            var functionBody = "if (!o.".concat(name, ") throw new Error('\"").concat(name, "\" is undefined');\n        return o.").concat(name, ".apply(o, args);");
            return new Function('o', 'args', functionBody);
          } // There is not a concept of import uri in Js, but this is useful in developing Dart applications.

        }, {
          key: "importUri",
          value: function importUri(type) {
            // StaticSymbol
            if (typeof type === 'object' && type['filePath']) {
              return type['filePath'];
            } // Runtime type


            return "./".concat(stringify(type));
          }
        }, {
          key: "resourceUri",
          value: function resourceUri(type) {
            return "./".concat(stringify(type));
          }
        }, {
          key: "resolveIdentifier",
          value: function resolveIdentifier(name, moduleUrl, members, runtime) {
            return runtime;
          }
        }, {
          key: "resolveEnum",
          value: function resolveEnum(enumIdentifier, name) {
            return enumIdentifier[name];
          }
        }]);

        return ReflectionCapabilities;
      }();

      function convertTsickleDecoratorIntoMetadata(decoratorInvocations) {
        if (!decoratorInvocations) {
          return [];
        }

        return decoratorInvocations.map(function (decoratorInvocation) {
          var decoratorType = decoratorInvocation.type;
          var annotationCls = decoratorType.annotationCls;
          var annotationArgs = decoratorInvocation.args ? decoratorInvocation.args : [];
          return _construct2(annotationCls, _toConsumableArray(annotationArgs));
        });
      }

      function getParentCtor(ctor) {
        var parentProto = ctor.prototype ? Object.getPrototypeOf(ctor.prototype) : null;
        var parentCtor = parentProto ? parentProto.constructor : null; // Note: We always use `Object` as the null value
        // to simplify checking later on.

        return parentCtor || Object;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var _THROW_IF_NOT_FOUND = {};
      var THROW_IF_NOT_FOUND = _THROW_IF_NOT_FOUND;
      /*
       * Name of a property (that we patch onto DI decorator), which is used as an annotation of which
       * InjectFlag this decorator represents. This allows to avoid direct references to the DI decorators
       * in the code, thus making them tree-shakable.
       */

      var DI_DECORATOR_FLAG = '__NG_DI_FLAG__';
      var NG_TEMP_TOKEN_PATH = 'ngTempTokenPath';
      var NG_TOKEN_PATH = 'ngTokenPath';
      var NEW_LINE = /\n/gm;
      var NO_NEW_LINE = 'ɵ';
      var SOURCE = '__source';
      var ɵ0$2 = getClosureSafeProperty;
      var USE_VALUE = getClosureSafeProperty({
        provide: String,
        useValue: ɵ0$2
      });
      /**
       * Current injector value used by `inject`.
       * - `undefined`: it is an error to call `inject`
       * - `null`: `inject` can be called but there is no injector (limp-mode).
       * - Injector instance: Use the injector for resolution.
       */

      var _currentInjector = undefined;

      function setCurrentInjector(injector) {
        var former = _currentInjector;
        _currentInjector = injector;
        return former;
      }

      function injectInjectorOnly(token) {
        var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : InjectFlags.Default;

        if (_currentInjector === undefined) {
          throw new Error("inject() must be called from an injection context");
        } else if (_currentInjector === null) {
          return injectRootLimpMode(token, undefined, flags);
        } else {
          return _currentInjector.get(token, flags & InjectFlags.Optional ? null : undefined, flags);
        }
      }

      function ɵɵinject(token) {
        var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : InjectFlags.Default;
        return (getInjectImplementation() || injectInjectorOnly)(resolveForwardRef(token), flags);
      }
      /**
       * Throws an error indicating that a factory function could not be generated by the compiler for a
       * particular class.
       *
       * This instruction allows the actual error message to be optimized away when ngDevMode is turned
       * off, saving bytes of generated code while still providing a good experience in dev mode.
       *
       * The name of the class is not mentioned here, but will be in the generated factory function name
       * and thus in the stack trace.
       *
       * @codeGenApi
       */


      function ɵɵinvalidFactoryDep(index) {
        var msg = ngDevMode ? "This constructor is not compatible with Angular Dependency Injection because its dependency at index ".concat(index, " of the parameter list is invalid.\nThis can happen if the dependency type is a primitive like a string or if an ancestor of this class is missing an Angular decorator.\n\nPlease check that 1) the type for the parameter at index ").concat(index, " is correct and 2) the correct Angular decorators are defined for this class and its ancestors.") : 'invalid';
        throw new Error(msg);
      }
      /**
       * Injects a token from the currently active injector.
       *
       * Must be used in the context of a factory function such as one defined for an
       * `InjectionToken`. Throws an error if not called from such a context.
       *
       * Within such a factory function, using this function to request injection of a dependency
       * is faster and more type-safe than providing an additional array of dependencies
       * (as has been common with `useFactory` providers).
       *
       * @param token The injection token for the dependency to be injected.
       * @param flags Optional flags that control how injection is executed.
       * The flags correspond to injection strategies that can be specified with
       * parameter decorators `@Host`, `@Self`, `@SkipSef`, and `@Optional`.
       * @returns the injected value if injection is successful, `null` otherwise.
       *
       * @usageNotes
       *
       * ### Example
       *
       * {@example core/di/ts/injector_spec.ts region='ShakableInjectionToken'}
       *
       * @publicApi
       */


      var inject = ɵɵinject;

      function injectArgs(types) {
        var args = [];

        for (var i = 0; i < types.length; i++) {
          var arg = resolveForwardRef(types[i]);

          if (Array.isArray(arg)) {
            if (arg.length === 0) {
              throw new Error('Arguments array must have arguments.');
            }

            var type = undefined;
            var flags = InjectFlags.Default;

            for (var j = 0; j < arg.length; j++) {
              var meta = arg[j];
              var flag = getInjectFlag(meta);

              if (typeof flag === 'number') {
                // Special case when we handle @Inject decorator.
                if (flag === -1
                /* Inject */
                ) {
                    type = meta.token;
                  } else {
                  flags |= flag;
                }
              } else {
                type = meta;
              }
            }

            args.push(ɵɵinject(type, flags));
          } else {
            args.push(ɵɵinject(arg));
          }
        }

        return args;
      }
      /**
       * Attaches a given InjectFlag to a given decorator using monkey-patching.
       * Since DI decorators can be used in providers `deps` array (when provider is configured using
       * `useFactory`) without initialization (e.g. `Host`) and as an instance (e.g. `new Host()`), we
       * attach the flag to make it available both as a static property and as a field on decorator
       * instance.
       *
       * @param decorator Provided DI decorator.
       * @param flag InjectFlag that should be applied.
       */


      function attachInjectFlag(decorator, flag) {
        decorator[DI_DECORATOR_FLAG] = flag;
        decorator.prototype[DI_DECORATOR_FLAG] = flag;
        return decorator;
      }
      /**
       * Reads monkey-patched property that contains InjectFlag attached to a decorator.
       *
       * @param token Token that may contain monkey-patched DI flags property.
       */


      function getInjectFlag(token) {
        return token[DI_DECORATOR_FLAG];
      }

      function catchInjectorError(e, token, injectorErrorName, source) {
        var tokenPath = e[NG_TEMP_TOKEN_PATH];

        if (token[SOURCE]) {
          tokenPath.unshift(token[SOURCE]);
        }

        e.message = formatError('\n' + e.message, tokenPath, injectorErrorName, source);
        e[NG_TOKEN_PATH] = tokenPath;
        e[NG_TEMP_TOKEN_PATH] = null;
        throw e;
      }

      function formatError(text, obj, injectorErrorName) {
        var source = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
        text = text && text.charAt(0) === '\n' && text.charAt(1) == NO_NEW_LINE ? text.substr(2) : text;
        var context = stringify(obj);

        if (Array.isArray(obj)) {
          context = obj.map(stringify).join(' -> ');
        } else if (typeof obj === 'object') {
          var parts = [];

          for (var key in obj) {
            if (obj.hasOwnProperty(key)) {
              var value = obj[key];
              parts.push(key + ':' + (typeof value === 'string' ? JSON.stringify(value) : stringify(value)));
            }
          }

          context = "{".concat(parts.join(', '), "}");
        }

        return "".concat(injectorErrorName).concat(source ? '(' + source + ')' : '', "[").concat(context, "]: ").concat(text.replace(NEW_LINE, '\n  '));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ɵ0$3 = function ɵ0$3(token) {
        return {
          token: token
        };
      };
      /**
       * Inject decorator and metadata.
       *
       * @Annotation
       * @publicApi
       */


      var Inject = attachInjectFlag( // Disable tslint because `DecoratorFlags` is a const enum which gets inlined.
      // tslint:disable-next-line: no-toplevel-property-access
      makeParamDecorator('Inject', ɵ0$3), -1
      /* Inject */
      );
      /**
       * Optional decorator and metadata.
       *
       * @Annotation
       * @publicApi
       */

      var Optional = // Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.
      // tslint:disable-next-line: no-toplevel-property-access
      attachInjectFlag(makeParamDecorator('Optional'), 8
      /* Optional */
      );
      /**
       * Self decorator and metadata.
       *
       * @Annotation
       * @publicApi
       */

      var Self = // Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.
      // tslint:disable-next-line: no-toplevel-property-access
      attachInjectFlag(makeParamDecorator('Self'), 2
      /* Self */
      );
      /**
       * `SkipSelf` decorator and metadata.
       *
       * @Annotation
       * @publicApi
       */

      var SkipSelf = // Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.
      // tslint:disable-next-line: no-toplevel-property-access
      attachInjectFlag(makeParamDecorator('SkipSelf'), 4
      /* SkipSelf */
      );
      /**
       * Host decorator and metadata.
       *
       * @Annotation
       * @publicApi
       */

      var Host = // Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.
      // tslint:disable-next-line: no-toplevel-property-access
      attachInjectFlag(makeParamDecorator('Host'), 1
      /* Host */
      );
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var _reflect = null;

      function getReflect() {
        return _reflect = _reflect || new ReflectionCapabilities();
      }

      function reflectDependencies(type) {
        return convertDependencies(getReflect().parameters(type));
      }

      function convertDependencies(deps) {
        var compiler = getCompilerFacade();
        return deps.map(function (dep) {
          return reflectDependency(compiler, dep);
        });
      }

      function reflectDependency(compiler, dep) {
        var meta = {
          token: null,
          host: false,
          optional: false,
          resolved: compiler.R3ResolvedDependencyType.Token,
          self: false,
          skipSelf: false
        };

        function setTokenAndResolvedType(token) {
          meta.resolved = compiler.R3ResolvedDependencyType.Token;
          meta.token = token;
        }

        if (Array.isArray(dep) && dep.length > 0) {
          for (var j = 0; j < dep.length; j++) {
            var param = dep[j];

            if (param === undefined) {
              // param may be undefined if type of dep is not set by ngtsc
              continue;
            }

            var proto = Object.getPrototypeOf(param);

            if (param instanceof Optional || proto.ngMetadataName === 'Optional') {
              meta.optional = true;
            } else if (param instanceof SkipSelf || proto.ngMetadataName === 'SkipSelf') {
              meta.skipSelf = true;
            } else if (param instanceof Self || proto.ngMetadataName === 'Self') {
              meta.self = true;
            } else if (param instanceof Host || proto.ngMetadataName === 'Host') {
              meta.host = true;
            } else if (param instanceof Inject) {
              meta.token = param.token;
            } else if (param instanceof Attribute) {
              if (param.attributeName === undefined) {
                throw new Error("Attribute name must be defined.");
              }

              meta.token = param.attributeName;
              meta.resolved = compiler.R3ResolvedDependencyType.Attribute;
            } else if (param.__ChangeDetectorRef__ === true) {
              meta.token = param;
              meta.resolved = compiler.R3ResolvedDependencyType.ChangeDetectorRef;
            } else {
              setTokenAndResolvedType(param);
            }
          }
        } else if (dep === undefined || Array.isArray(dep) && dep.length === 0) {
          meta.token = undefined;
          meta.resolved = R3ResolvedDependencyType.Invalid;
        } else {
          setTokenAndResolvedType(dep);
        }

        return meta;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Used to resolve resource URLs on `@Component` when used with JIT compilation.
       *
       * Example:
       * ```
       * @Component({
       *   selector: 'my-comp',
       *   templateUrl: 'my-comp.html', // This requires asynchronous resolution
       * })
       * class MyComponent{
       * }
       *
       * // Calling `renderComponent` will fail because `renderComponent` is a synchronous process
       * // and `MyComponent`'s `@Component.templateUrl` needs to be resolved asynchronously.
       *
       * // Calling `resolveComponentResources()` will resolve `@Component.templateUrl` into
       * // `@Component.template`, which allows `renderComponent` to proceed in a synchronous manner.
       *
       * // Use browser's `fetch()` function as the default resource resolution strategy.
       * resolveComponentResources(fetch).then(() => {
       *   // After resolution all URLs have been converted into `template` strings.
       *   renderComponent(MyComponent);
       * });
       *
       * ```
       *
       * NOTE: In AOT the resolution happens during compilation, and so there should be no need
       * to call this method outside JIT mode.
       *
       * @param resourceResolver a function which is responsible for returning a `Promise` to the
       * contents of the resolved URL. Browser's `fetch()` method is a good default implementation.
       */


      function resolveComponentResources(resourceResolver) {
        // Store all promises which are fetching the resources.
        var componentResolved = []; // Cache so that we don't fetch the same resource more than once.

        var urlMap = new Map();

        function cachedResourceResolve(url) {
          var promise = urlMap.get(url);

          if (!promise) {
            var resp = resourceResolver(url);
            urlMap.set(url, promise = resp.then(unwrapResponse));
          }

          return promise;
        }

        componentResourceResolutionQueue.forEach(function (component, type) {
          var promises = [];

          if (component.templateUrl) {
            promises.push(cachedResourceResolve(component.templateUrl).then(function (template) {
              component.template = template;
            }));
          }

          var styleUrls = component.styleUrls;
          var styles = component.styles || (component.styles = []);
          var styleOffset = component.styles.length;
          styleUrls && styleUrls.forEach(function (styleUrl, index) {
            styles.push(''); // pre-allocate array.

            promises.push(cachedResourceResolve(styleUrl).then(function (style) {
              styles[styleOffset + index] = style;
              styleUrls.splice(styleUrls.indexOf(styleUrl), 1);

              if (styleUrls.length == 0) {
                component.styleUrls = undefined;
              }
            }));
          });
          var fullyResolved = Promise.all(promises).then(function () {
            return componentDefResolved(type);
          });
          componentResolved.push(fullyResolved);
        });
        clearResolutionOfComponentResourcesQueue();
        return Promise.all(componentResolved).then(function () {
          return undefined;
        });
      }

      var componentResourceResolutionQueue = new Map(); // Track when existing ɵcmp for a Type is waiting on resources.

      var componentDefPendingResolution = new Set();

      function maybeQueueResolutionOfComponentResources(type, metadata) {
        if (componentNeedsResolution(metadata)) {
          componentResourceResolutionQueue.set(type, metadata);
          componentDefPendingResolution.add(type);
        }
      }

      function isComponentDefPendingResolution(type) {
        return componentDefPendingResolution.has(type);
      }

      function componentNeedsResolution(component) {
        return !!(component.templateUrl && !component.hasOwnProperty('template') || component.styleUrls && component.styleUrls.length);
      }

      function clearResolutionOfComponentResourcesQueue() {
        var old = componentResourceResolutionQueue;
        componentResourceResolutionQueue = new Map();
        return old;
      }

      function restoreComponentResolutionQueue(queue) {
        componentDefPendingResolution.clear();
        queue.forEach(function (_, type) {
          return componentDefPendingResolution.add(type);
        });
        componentResourceResolutionQueue = queue;
      }

      function isComponentResourceResolutionQueueEmpty() {
        return componentResourceResolutionQueue.size === 0;
      }

      function unwrapResponse(response) {
        return typeof response == 'string' ? response : response.text();
      }

      function componentDefResolved(type) {
        componentDefPendingResolution["delete"](type);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * The Trusted Types policy, or null if Trusted Types are not
       * enabled/supported, or undefined if the policy has not been created yet.
       */


      var policy;
      /**
       * Returns the Trusted Types policy, or null if Trusted Types are not
       * enabled/supported. The first call to this function will create the policy.
       */

      function getPolicy() {
        if (policy === undefined) {
          policy = null;

          if (_global.trustedTypes) {
            try {
              policy = _global.trustedTypes.createPolicy('angular', {
                createHTML: function createHTML(s) {
                  return s;
                },
                createScript: function createScript(s) {
                  return s;
                },
                createScriptURL: function createScriptURL(s) {
                  return s;
                }
              });
            } catch (_a) {// trustedTypes.createPolicy throws if called with a name that is
              // already registered, even in report-only mode. Until the API changes,
              // catch the error not to break the applications functionally. In such
              // cases, the code will fall back to using strings.
            }
          }
        }

        return policy;
      }
      /**
       * Unsafely promote a string to a TrustedHTML, falling back to strings when
       * Trusted Types are not available.
       * @security This is a security-sensitive function; any use of this function
       * must go through security review. In particular, it must be assured that the
       * provided string will never cause an XSS vulnerability if used in a context
       * that will be interpreted as HTML by a browser, e.g. when assigning to
       * element.innerHTML.
       */


      function trustedHTMLFromString(html) {
        var _a;

        return ((_a = getPolicy()) === null || _a === void 0 ? void 0 : _a.createHTML(html)) || html;
      }
      /**
       * Unsafely promote a string to a TrustedScript, falling back to strings when
       * Trusted Types are not available.
       * @security In particular, it must be assured that the provided string will
       * never cause an XSS vulnerability if used in a context that will be
       * interpreted and executed as a script by a browser, e.g. when calling eval.
       */


      function trustedScriptFromString(script) {
        var _a;

        return ((_a = getPolicy()) === null || _a === void 0 ? void 0 : _a.createScript(script)) || script;
      }
      /**
       * Unsafely promote a string to a TrustedScriptURL, falling back to strings
       * when Trusted Types are not available.
       * @security This is a security-sensitive function; any use of this function
       * must go through security review. In particular, it must be assured that the
       * provided string will never cause an XSS vulnerability if used in a context
       * that will cause a browser to load and execute a resource, e.g. when
       * assigning to script.src.
       */


      function trustedScriptURLFromString(url) {
        var _a;

        return ((_a = getPolicy()) === null || _a === void 0 ? void 0 : _a.createScriptURL(url)) || url;
      }
      /**
       * Unsafely call the Function constructor with the given string arguments. It
       * is only available in development mode, and should be stripped out of
       * production code.
       * @security This is a security-sensitive function; any use of this function
       * must go through security review. In particular, it must be assured that it
       * is only called from development code, as use in production code can lead to
       * XSS vulnerabilities.
       */


      function newTrustedFunctionForDev() {
        if (typeof ngDevMode === 'undefined') {
          throw new Error('newTrustedFunctionForDev should never be called in production');
        }

        for (var _len47 = arguments.length, args = new Array(_len47), _key49 = 0; _key49 < _len47; _key49++) {
          args[_key49] = arguments[_key49];
        }

        if (!_global.trustedTypes) {
          // In environments that don't support Trusted Types, fall back to the most
          // straightforward implementation:
          return _construct2(Function, args);
        } // Chrome currently does not support passing TrustedScript to the Function
        // constructor. The following implements the workaround proposed on the page
        // below, where the Chromium bug is also referenced:
        // https://github.com/w3c/webappsec-trusted-types/wiki/Trusted-Types-for-function-constructor


        var fnArgs = args.slice(0, -1).join(',');
        var fnBody = args[args.length - 1];
        var body = "(function anonymous(".concat(fnArgs, "\n) { ").concat(fnBody, "\n})"); // Using eval directly confuses the compiler and prevents this module from
        // being stripped out of JS binaries even if not used. The global['eval']
        // indirection fixes that.

        var fn = _global['eval'](trustedScriptFromString(body));

        if (fn.bind === undefined) {
          // Workaround for a browser bug that only exists in Chrome 83, where passing
          // a TrustedScript to eval just returns the TrustedScript back without
          // evaluating it. In that case, fall back to the most straightforward
          // implementation:
          return _construct2(Function, args);
        } // To completely mimic the behavior of calling "new Function", two more
        // things need to happen:
        // 1. Stringifying the resulting function should return its source code


        fn.toString = function () {
          return body;
        }; // 2. When calling the resulting function, `this` should refer to `global`


        return fn.bind(_global); // When Trusted Types support in Function constructors is widely available,
        // the implementation of this function can be simplified to:
        // return new Function(...args.map(a => trustedScriptFromString(a)));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * The Trusted Types policy, or null if Trusted Types are not
       * enabled/supported, or undefined if the policy has not been created yet.
       */


      var policy$1;
      /**
       * Returns the Trusted Types policy, or null if Trusted Types are not
       * enabled/supported. The first call to this function will create the policy.
       */

      function getPolicy$1() {
        if (policy$1 === undefined) {
          policy$1 = null;

          if (_global.trustedTypes) {
            try {
              policy$1 = _global.trustedTypes.createPolicy('angular#unsafe-bypass', {
                createHTML: function createHTML(s) {
                  return s;
                },
                createScript: function createScript(s) {
                  return s;
                },
                createScriptURL: function createScriptURL(s) {
                  return s;
                }
              });
            } catch (_a) {// trustedTypes.createPolicy throws if called with a name that is
              // already registered, even in report-only mode. Until the API changes,
              // catch the error not to break the applications functionally. In such
              // cases, the code will fall back to using strings.
            }
          }
        }

        return policy$1;
      }
      /**
       * Unsafely promote a string to a TrustedHTML, falling back to strings when
       * Trusted Types are not available.
       * @security This is a security-sensitive function; any use of this function
       * must go through security review. In particular, it must be assured that it
       * is only passed strings that come directly from custom sanitizers or the
       * bypassSecurityTrust* functions.
       */


      function trustedHTMLFromStringBypass(html) {
        var _a;

        return ((_a = getPolicy$1()) === null || _a === void 0 ? void 0 : _a.createHTML(html)) || html;
      }
      /**
       * Unsafely promote a string to a TrustedScript, falling back to strings when
       * Trusted Types are not available.
       * @security This is a security-sensitive function; any use of this function
       * must go through security review. In particular, it must be assured that it
       * is only passed strings that come directly from custom sanitizers or the
       * bypassSecurityTrust* functions.
       */


      function trustedScriptFromStringBypass(script) {
        var _a;

        return ((_a = getPolicy$1()) === null || _a === void 0 ? void 0 : _a.createScript(script)) || script;
      }
      /**
       * Unsafely promote a string to a TrustedScriptURL, falling back to strings
       * when Trusted Types are not available.
       * @security This is a security-sensitive function; any use of this function
       * must go through security review. In particular, it must be assured that it
       * is only passed strings that come directly from custom sanitizers or the
       * bypassSecurityTrust* functions.
       */


      function trustedScriptURLFromStringBypass(url) {
        var _a;

        return ((_a = getPolicy$1()) === null || _a === void 0 ? void 0 : _a.createScriptURL(url)) || url;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var SafeValueImpl = /*#__PURE__*/function () {
        function SafeValueImpl(changingThisBreaksApplicationSecurity) {
          _classCallCheck2(this, SafeValueImpl);

          this.changingThisBreaksApplicationSecurity = changingThisBreaksApplicationSecurity;
        }

        _createClass2(SafeValueImpl, [{
          key: "toString",
          value: function toString() {
            return "SafeValue must use [property]=binding: ".concat(this.changingThisBreaksApplicationSecurity) + " (see https://g.co/ng/security#xss)";
          }
        }]);

        return SafeValueImpl;
      }();

      var SafeHtmlImpl = /*#__PURE__*/function (_SafeValueImpl) {
        _inherits2(SafeHtmlImpl, _SafeValueImpl);

        var _super303 = _createSuper(SafeHtmlImpl);

        function SafeHtmlImpl() {
          _classCallCheck2(this, SafeHtmlImpl);

          return _super303.apply(this, arguments);
        }

        _createClass2(SafeHtmlImpl, [{
          key: "getTypeName",
          value: function getTypeName() {
            return "HTML"
            /* Html */
            ;
          }
        }]);

        return SafeHtmlImpl;
      }(SafeValueImpl);

      var SafeStyleImpl = /*#__PURE__*/function (_SafeValueImpl2) {
        _inherits2(SafeStyleImpl, _SafeValueImpl2);

        var _super304 = _createSuper(SafeStyleImpl);

        function SafeStyleImpl() {
          _classCallCheck2(this, SafeStyleImpl);

          return _super304.apply(this, arguments);
        }

        _createClass2(SafeStyleImpl, [{
          key: "getTypeName",
          value: function getTypeName() {
            return "Style"
            /* Style */
            ;
          }
        }]);

        return SafeStyleImpl;
      }(SafeValueImpl);

      var SafeScriptImpl = /*#__PURE__*/function (_SafeValueImpl3) {
        _inherits2(SafeScriptImpl, _SafeValueImpl3);

        var _super305 = _createSuper(SafeScriptImpl);

        function SafeScriptImpl() {
          _classCallCheck2(this, SafeScriptImpl);

          return _super305.apply(this, arguments);
        }

        _createClass2(SafeScriptImpl, [{
          key: "getTypeName",
          value: function getTypeName() {
            return "Script"
            /* Script */
            ;
          }
        }]);

        return SafeScriptImpl;
      }(SafeValueImpl);

      var SafeUrlImpl = /*#__PURE__*/function (_SafeValueImpl4) {
        _inherits2(SafeUrlImpl, _SafeValueImpl4);

        var _super306 = _createSuper(SafeUrlImpl);

        function SafeUrlImpl() {
          _classCallCheck2(this, SafeUrlImpl);

          return _super306.apply(this, arguments);
        }

        _createClass2(SafeUrlImpl, [{
          key: "getTypeName",
          value: function getTypeName() {
            return "URL"
            /* Url */
            ;
          }
        }]);

        return SafeUrlImpl;
      }(SafeValueImpl);

      var SafeResourceUrlImpl = /*#__PURE__*/function (_SafeValueImpl5) {
        _inherits2(SafeResourceUrlImpl, _SafeValueImpl5);

        var _super307 = _createSuper(SafeResourceUrlImpl);

        function SafeResourceUrlImpl() {
          _classCallCheck2(this, SafeResourceUrlImpl);

          return _super307.apply(this, arguments);
        }

        _createClass2(SafeResourceUrlImpl, [{
          key: "getTypeName",
          value: function getTypeName() {
            return "ResourceURL"
            /* ResourceUrl */
            ;
          }
        }]);

        return SafeResourceUrlImpl;
      }(SafeValueImpl);

      function unwrapSafeValue(value) {
        return value instanceof SafeValueImpl ? value.changingThisBreaksApplicationSecurity : value;
      }

      function allowSanitizationBypassAndThrow(value, type) {
        var actualType = getSanitizationBypassType(value);

        if (actualType != null && actualType !== type) {
          // Allow ResourceURLs in URL contexts, they are strictly more trusted.
          if (actualType === "ResourceURL"
          /* ResourceUrl */
          && type === "URL"
          /* Url */
          ) return true;
          throw new Error("Required a safe ".concat(type, ", got a ").concat(actualType, " (see https://g.co/ng/security#xss)"));
        }

        return actualType === type;
      }

      function getSanitizationBypassType(value) {
        return value instanceof SafeValueImpl && value.getTypeName() || null;
      }
      /**
       * Mark `html` string as trusted.
       *
       * This function wraps the trusted string in `String` and brands it in a way which makes it
       * recognizable to {@link htmlSanitizer} to be trusted implicitly.
       *
       * @param trustedHtml `html` string which needs to be implicitly trusted.
       * @returns a `html` which has been branded to be implicitly trusted.
       */


      function bypassSanitizationTrustHtml(trustedHtml) {
        return new SafeHtmlImpl(trustedHtml);
      }
      /**
       * Mark `style` string as trusted.
       *
       * This function wraps the trusted string in `String` and brands it in a way which makes it
       * recognizable to {@link styleSanitizer} to be trusted implicitly.
       *
       * @param trustedStyle `style` string which needs to be implicitly trusted.
       * @returns a `style` hich has been branded to be implicitly trusted.
       */


      function bypassSanitizationTrustStyle(trustedStyle) {
        return new SafeStyleImpl(trustedStyle);
      }
      /**
       * Mark `script` string as trusted.
       *
       * This function wraps the trusted string in `String` and brands it in a way which makes it
       * recognizable to {@link scriptSanitizer} to be trusted implicitly.
       *
       * @param trustedScript `script` string which needs to be implicitly trusted.
       * @returns a `script` which has been branded to be implicitly trusted.
       */


      function bypassSanitizationTrustScript(trustedScript) {
        return new SafeScriptImpl(trustedScript);
      }
      /**
       * Mark `url` string as trusted.
       *
       * This function wraps the trusted string in `String` and brands it in a way which makes it
       * recognizable to {@link urlSanitizer} to be trusted implicitly.
       *
       * @param trustedUrl `url` string which needs to be implicitly trusted.
       * @returns a `url`  which has been branded to be implicitly trusted.
       */


      function bypassSanitizationTrustUrl(trustedUrl) {
        return new SafeUrlImpl(trustedUrl);
      }
      /**
       * Mark `url` string as trusted.
       *
       * This function wraps the trusted string in `String` and brands it in a way which makes it
       * recognizable to {@link resourceUrlSanitizer} to be trusted implicitly.
       *
       * @param trustedResourceUrl `url` string which needs to be implicitly trusted.
       * @returns a `url` which has been branded to be implicitly trusted.
       */


      function bypassSanitizationTrustResourceUrl(trustedResourceUrl) {
        return new SafeResourceUrlImpl(trustedResourceUrl);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * This helper is used to get hold of an inert tree of DOM elements containing dirty HTML
       * that needs sanitizing.
       * Depending upon browser support we use one of two strategies for doing this.
       * Default: DOMParser strategy
       * Fallback: InertDocument strategy
       */


      function getInertBodyHelper(defaultDoc) {
        var inertDocumentHelper = new InertDocumentHelper(defaultDoc);
        return isDOMParserAvailable() ? new DOMParserHelper(inertDocumentHelper) : inertDocumentHelper;
      }
      /**
       * Uses DOMParser to create and fill an inert body element.
       * This is the default strategy used in browsers that support it.
       */


      var DOMParserHelper = /*#__PURE__*/function () {
        function DOMParserHelper(inertDocumentHelper) {
          _classCallCheck2(this, DOMParserHelper);

          this.inertDocumentHelper = inertDocumentHelper;
        }

        _createClass2(DOMParserHelper, [{
          key: "getInertBodyElement",
          value: function getInertBodyElement(html) {
            // We add these extra elements to ensure that the rest of the content is parsed as expected
            // e.g. leading whitespace is maintained and tags like `<meta>` do not get hoisted to the
            // `<head>` tag. Note that the `<body>` tag is closed implicitly to prevent unclosed tags
            // in `html` from consuming the otherwise explicit `</body>` tag.
            html = '<body><remove></remove>' + html;

            try {
              var body = new window.DOMParser().parseFromString(trustedHTMLFromString(html), 'text/html').body;

              if (body === null) {
                // In some browsers (e.g. Mozilla/5.0 iPad AppleWebKit Mobile) the `body` property only
                // becomes available in the following tick of the JS engine. In that case we fall back to
                // the `inertDocumentHelper` instead.
                return this.inertDocumentHelper.getInertBodyElement(html);
              }

              body.removeChild(body.firstChild);
              return body;
            } catch (_a) {
              return null;
            }
          }
        }]);

        return DOMParserHelper;
      }();
      /**
       * Use an HTML5 `template` element, if supported, or an inert body element created via
       * `createHtmlDocument` to create and fill an inert DOM element.
       * This is the fallback strategy if the browser does not support DOMParser.
       */


      var InertDocumentHelper = /*#__PURE__*/function () {
        function InertDocumentHelper(defaultDoc) {
          _classCallCheck2(this, InertDocumentHelper);

          this.defaultDoc = defaultDoc;
          this.inertDocument = this.defaultDoc.implementation.createHTMLDocument('sanitization-inert');

          if (this.inertDocument.body == null) {
            // usually there should be only one body element in the document, but IE doesn't have any, so
            // we need to create one.
            var inertHtml = this.inertDocument.createElement('html');
            this.inertDocument.appendChild(inertHtml);
            var inertBodyElement = this.inertDocument.createElement('body');
            inertHtml.appendChild(inertBodyElement);
          }
        }

        _createClass2(InertDocumentHelper, [{
          key: "getInertBodyElement",
          value: function getInertBodyElement(html) {
            // Prefer using <template> element if supported.
            var templateEl = this.inertDocument.createElement('template');

            if ('content' in templateEl) {
              templateEl.innerHTML = trustedHTMLFromString(html);
              return templateEl;
            } // Note that previously we used to do something like `this.inertDocument.body.innerHTML = html`
            // and we returned the inert `body` node. This was changed, because IE seems to treat setting
            // `innerHTML` on an inserted element differently, compared to one that hasn't been inserted
            // yet. In particular, IE appears to split some of the text into multiple text nodes rather
            // than keeping them in a single one which ends up messing with Ivy's i18n parsing further
            // down the line. This has been worked around by creating a new inert `body` and using it as
            // the root node in which we insert the HTML.


            var inertBody = this.inertDocument.createElement('body');
            inertBody.innerHTML = trustedHTMLFromString(html); // Support: IE 11 only
            // strip custom-namespaced attributes on IE<=11

            if (this.defaultDoc.documentMode) {
              this.stripCustomNsAttrs(inertBody);
            }

            return inertBody;
          }
          /**
           * When IE11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1'
           * attribute to declare ns1 namespace and prefixes the attribute with 'ns1' (e.g.
           * 'ns1:xlink:foo').
           *
           * This is undesirable since we don't want to allow any of these custom attributes. This method
           * strips them all.
           */

        }, {
          key: "stripCustomNsAttrs",
          value: function stripCustomNsAttrs(el) {
            var elAttrs = el.attributes; // loop backwards so that we can support removals.

            for (var i = elAttrs.length - 1; 0 < i; i--) {
              var attrib = elAttrs.item(i);
              var attrName = attrib.name;

              if (attrName === 'xmlns:ns1' || attrName.indexOf('ns1:') === 0) {
                el.removeAttribute(attrName);
              }
            }

            var childNode = el.firstChild;

            while (childNode) {
              if (childNode.nodeType === Node.ELEMENT_NODE) this.stripCustomNsAttrs(childNode);
              childNode = childNode.nextSibling;
            }
          }
        }]);

        return InertDocumentHelper;
      }();
      /**
       * We need to determine whether the DOMParser exists in the global context and
       * supports parsing HTML; HTML parsing support is not as wide as other formats, see
       * https://developer.mozilla.org/en-US/docs/Web/API/DOMParser#Browser_compatibility.
       *
       * @suppress {uselessCode}
       */


      function isDOMParserAvailable() {
        try {
          return !!new window.DOMParser().parseFromString(trustedHTMLFromString(''), 'text/html');
        } catch (_a) {
          return false;
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A pattern that recognizes a commonly useful subset of URLs that are safe.
       *
       * This regular expression matches a subset of URLs that will not cause script
       * execution if used in URL context within a HTML document. Specifically, this
       * regular expression matches if (comment from here on and regex copied from
       * Soy's EscapingConventions):
       * (1) Either an allowed protocol (http, https, mailto or ftp).
       * (2) or no protocol.  A protocol must be followed by a colon. The below
       *     allows that by allowing colons only after one of the characters [/?#].
       *     A colon after a hash (#) must be in the fragment.
       *     Otherwise, a colon after a (?) must be in a query.
       *     Otherwise, a colon after a single solidus (/) must be in a path.
       *     Otherwise, a colon after a double solidus (//) must be in the authority
       *     (before port).
       *
       * The pattern disallows &, used in HTML entity declarations before
       * one of the characters in [/?#]. This disallows HTML entities used in the
       * protocol name, which should never happen, e.g. "h&#116;tp" for "http".
       * It also disallows HTML entities in the first path part of a relative path,
       * e.g. "foo&lt;bar/baz".  Our existing escaping functions should not produce
       * that. More importantly, it disallows masking of a colon,
       * e.g. "javascript&#58;...".
       *
       * This regular expression was taken from the Closure sanitization library.
       */


      var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^&:/?#]*(?:[/?#]|$))/gi;
      /* A pattern that matches safe srcset values */

      var SAFE_SRCSET_PATTERN = /^(?:(?:https?|file):|[^&:/?#]*(?:[/?#]|$))/gi;
      /** A pattern that matches safe data URLs. Only matches image, video and audio types. */

      var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+\/]+=*$/i;

      function _sanitizeUrl(url) {
        url = String(url);
        if (url.match(SAFE_URL_PATTERN) || url.match(DATA_URL_PATTERN)) return url;

        if (typeof ngDevMode === 'undefined' || ngDevMode) {
          console.warn("WARNING: sanitizing unsafe URL value ".concat(url, " (see https://g.co/ng/security#xss)"));
        }

        return 'unsafe:' + url;
      }

      function sanitizeSrcset(srcset) {
        srcset = String(srcset);
        return srcset.split(',').map(function (srcset) {
          return _sanitizeUrl(srcset.trim());
        }).join(', ');
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function tagSet(tags) {
        var res = {};

        var _iterator74 = _createForOfIteratorHelper(tags.split(',')),
            _step73;

        try {
          for (_iterator74.s(); !(_step73 = _iterator74.n()).done;) {
            var t = _step73.value;
            res[t] = true;
          }
        } catch (err) {
          _iterator74.e(err);
        } finally {
          _iterator74.f();
        }

        return res;
      }

      function merge() {
        var res = {};

        for (var _len48 = arguments.length, sets = new Array(_len48), _key50 = 0; _key50 < _len48; _key50++) {
          sets[_key50] = arguments[_key50];
        }

        for (var _i27 = 0, _sets = sets; _i27 < _sets.length; _i27++) {
          var s = _sets[_i27];

          for (var v in s) {
            if (s.hasOwnProperty(v)) res[v] = true;
          }
        }

        return res;
      } // Good source of info about elements and attributes
      // https://html.spec.whatwg.org/#semantics
      // https://simon.html5.org/html-elements
      // Safe Void Elements - HTML5
      // https://html.spec.whatwg.org/#void-elements


      var VOID_ELEMENTS = tagSet('area,br,col,hr,img,wbr'); // Elements that you can, intentionally, leave open (and which close themselves)
      // https://html.spec.whatwg.org/#optional-tags

      var OPTIONAL_END_TAG_BLOCK_ELEMENTS = tagSet('colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr');
      var OPTIONAL_END_TAG_INLINE_ELEMENTS = tagSet('rp,rt');
      var OPTIONAL_END_TAG_ELEMENTS = merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, OPTIONAL_END_TAG_BLOCK_ELEMENTS); // Safe Block Elements - HTML5

      var BLOCK_ELEMENTS = merge(OPTIONAL_END_TAG_BLOCK_ELEMENTS, tagSet('address,article,' + 'aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,' + 'h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul')); // Inline Elements - HTML5

      var INLINE_ELEMENTS = merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, tagSet('a,abbr,acronym,audio,b,' + 'bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,' + 'samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video'));
      var VALID_ELEMENTS = merge(VOID_ELEMENTS, BLOCK_ELEMENTS, INLINE_ELEMENTS, OPTIONAL_END_TAG_ELEMENTS); // Attributes that have href and hence need to be sanitized

      var URI_ATTRS = tagSet('background,cite,href,itemtype,longdesc,poster,src,xlink:href'); // Attributes that have special href set hence need to be sanitized

      var SRCSET_ATTRS = tagSet('srcset');
      var HTML_ATTRS = tagSet('abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,' + 'compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,' + 'ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,' + 'scope,scrolling,shape,size,sizes,span,srclang,start,summary,tabindex,target,title,translate,type,usemap,' + 'valign,value,vspace,width'); // Accessibility attributes as per WAI-ARIA 1.1 (W3C Working Draft 14 December 2018)

      var ARIA_ATTRS = tagSet('aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,' + 'aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,' + 'aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,' + 'aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,' + 'aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,' + 'aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,' + 'aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext'); // NB: This currently consciously doesn't support SVG. SVG sanitization has had several security
      // issues in the past, so it seems safer to leave it out if possible. If support for binding SVG via
      // innerHTML is required, SVG attributes should be added here.
      // NB: Sanitization does not allow <form> elements or other active elements (<button> etc). Those
      // can be sanitized, but they increase security surface area without a legitimate use case, so they
      // are left out here.

      var VALID_ATTRS = merge(URI_ATTRS, SRCSET_ATTRS, HTML_ATTRS, ARIA_ATTRS); // Elements whose content should not be traversed/preserved, if the elements themselves are invalid.
      //
      // Typically, `<invalid>Some content</invalid>` would traverse (and in this case preserve)
      // `Some content`, but strip `invalid-element` opening/closing tags. For some elements, though, we
      // don't want to preserve the content, if the elements themselves are going to be removed.

      var SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS = tagSet('script,style,template');
      /**
       * SanitizingHtmlSerializer serializes a DOM fragment, stripping out any unsafe elements and unsafe
       * attributes.
       */

      var SanitizingHtmlSerializer = /*#__PURE__*/function () {
        function SanitizingHtmlSerializer() {
          _classCallCheck2(this, SanitizingHtmlSerializer);

          // Explicitly track if something was stripped, to avoid accidentally warning of sanitization just
          // because characters were re-encoded.
          this.sanitizedSomething = false;
          this.buf = [];
        }

        _createClass2(SanitizingHtmlSerializer, [{
          key: "sanitizeChildren",
          value: function sanitizeChildren(el) {
            // This cannot use a TreeWalker, as it has to run on Angular's various DOM adapters.
            // However this code never accesses properties off of `document` before deleting its contents
            // again, so it shouldn't be vulnerable to DOM clobbering.
            var current = el.firstChild;
            var traverseContent = true;

            while (current) {
              if (current.nodeType === Node.ELEMENT_NODE) {
                traverseContent = this.startElement(current);
              } else if (current.nodeType === Node.TEXT_NODE) {
                this.chars(current.nodeValue);
              } else {
                // Strip non-element, non-text nodes.
                this.sanitizedSomething = true;
              }

              if (traverseContent && current.firstChild) {
                current = current.firstChild;
                continue;
              }

              while (current) {
                // Leaving the element. Walk up and to the right, closing tags as we go.
                if (current.nodeType === Node.ELEMENT_NODE) {
                  this.endElement(current);
                }

                var next = this.checkClobberedElement(current, current.nextSibling);

                if (next) {
                  current = next;
                  break;
                }

                current = this.checkClobberedElement(current, current.parentNode);
              }
            }

            return this.buf.join('');
          }
          /**
           * Sanitizes an opening element tag (if valid) and returns whether the element's contents should
           * be traversed. Element content must always be traversed (even if the element itself is not
           * valid/safe), unless the element is one of `SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS`.
           *
           * @param element The element to sanitize.
           * @return True if the element's contents should be traversed.
           */

        }, {
          key: "startElement",
          value: function startElement(element) {
            var tagName = element.nodeName.toLowerCase();

            if (!VALID_ELEMENTS.hasOwnProperty(tagName)) {
              this.sanitizedSomething = true;
              return !SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS.hasOwnProperty(tagName);
            }

            this.buf.push('<');
            this.buf.push(tagName);
            var elAttrs = element.attributes;

            for (var i = 0; i < elAttrs.length; i++) {
              var elAttr = elAttrs.item(i);
              var attrName = elAttr.name;
              var lower = attrName.toLowerCase();

              if (!VALID_ATTRS.hasOwnProperty(lower)) {
                this.sanitizedSomething = true;
                continue;
              }

              var value = elAttr.value; // TODO(martinprobst): Special case image URIs for data:image/...

              if (URI_ATTRS[lower]) value = _sanitizeUrl(value);
              if (SRCSET_ATTRS[lower]) value = sanitizeSrcset(value);
              this.buf.push(' ', attrName, '="', encodeEntities(value), '"');
            }

            this.buf.push('>');
            return true;
          }
        }, {
          key: "endElement",
          value: function endElement(current) {
            var tagName = current.nodeName.toLowerCase();

            if (VALID_ELEMENTS.hasOwnProperty(tagName) && !VOID_ELEMENTS.hasOwnProperty(tagName)) {
              this.buf.push('</');
              this.buf.push(tagName);
              this.buf.push('>');
            }
          }
        }, {
          key: "chars",
          value: function chars(_chars) {
            this.buf.push(encodeEntities(_chars));
          }
        }, {
          key: "checkClobberedElement",
          value: function checkClobberedElement(node, nextNode) {
            if (nextNode && (node.compareDocumentPosition(nextNode) & Node.DOCUMENT_POSITION_CONTAINED_BY) === Node.DOCUMENT_POSITION_CONTAINED_BY) {
              throw new Error("Failed to sanitize html because the element is clobbered: ".concat(node.outerHTML));
            }

            return nextNode;
          }
        }]);

        return SanitizingHtmlSerializer;
      }(); // Regular Expressions for parsing tags and attributes


      var SURROGATE_PAIR_REGEXP = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; // ! to ~ is the ASCII range.

      var NON_ALPHANUMERIC_REGEXP = /([^\#-~ |!])/g;
      /**
       * Escapes all potentially dangerous characters, so that the
       * resulting string can be safely inserted into attribute or
       * element text.
       * @param value
       */

      function encodeEntities(value) {
        return value.replace(/&/g, '&amp;').replace(SURROGATE_PAIR_REGEXP, function (match) {
          var hi = match.charCodeAt(0);
          var low = match.charCodeAt(1);
          return '&#' + ((hi - 0xD800) * 0x400 + (low - 0xDC00) + 0x10000) + ';';
        }).replace(NON_ALPHANUMERIC_REGEXP, function (match) {
          return '&#' + match.charCodeAt(0) + ';';
        }).replace(/</g, '&lt;').replace(/>/g, '&gt;');
      }

      var inertBodyHelper;
      /**
       * Sanitizes the given unsafe, untrusted HTML fragment, and returns HTML text that is safe to add to
       * the DOM in a browser environment.
       */

      function _sanitizeHtml(defaultDoc, unsafeHtmlInput) {
        var inertBodyElement = null;

        try {
          inertBodyHelper = inertBodyHelper || getInertBodyHelper(defaultDoc); // Make sure unsafeHtml is actually a string (TypeScript types are not enforced at runtime).

          var unsafeHtml = unsafeHtmlInput ? String(unsafeHtmlInput) : '';
          inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeHtml); // mXSS protection. Repeatedly parse the document to make sure it stabilizes, so that a browser
          // trying to auto-correct incorrect HTML cannot cause formerly inert HTML to become dangerous.

          var mXSSAttempts = 5;
          var parsedHtml = unsafeHtml;

          do {
            if (mXSSAttempts === 0) {
              throw new Error('Failed to sanitize html because the input is unstable');
            }

            mXSSAttempts--;
            unsafeHtml = parsedHtml;
            parsedHtml = inertBodyElement.innerHTML;
            inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeHtml);
          } while (unsafeHtml !== parsedHtml);

          var sanitizer = new SanitizingHtmlSerializer();
          var safeHtml = sanitizer.sanitizeChildren(getTemplateContent(inertBodyElement) || inertBodyElement);

          if ((typeof ngDevMode === 'undefined' || ngDevMode) && sanitizer.sanitizedSomething) {
            console.warn('WARNING: sanitizing HTML stripped some content, see https://g.co/ng/security#xss');
          }

          return trustedHTMLFromString(safeHtml);
        } finally {
          // In case anything goes wrong, clear out inertElement to reset the entire DOM structure.
          if (inertBodyElement) {
            var parent = getTemplateContent(inertBodyElement) || inertBodyElement;

            while (parent.firstChild) {
              parent.removeChild(parent.firstChild);
            }
          }
        }
      }

      function getTemplateContent(el) {
        return 'content' in el
        /** Microsoft/TypeScript#21517 */
        && isTemplateElement(el) ? el.content : null;
      }

      function isTemplateElement(el) {
        return el.nodeType === Node.ELEMENT_NODE && el.nodeName === 'TEMPLATE';
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A SecurityContext marks a location that has dangerous security implications, e.g. a DOM property
       * like `innerHTML` that could cause Cross Site Scripting (XSS) security bugs when improperly
       * handled.
       *
       * See DomSanitizer for more details on security in Angular applications.
       *
       * @publicApi
       */


      var SecurityContext;

      (function (SecurityContext) {
        SecurityContext[SecurityContext["NONE"] = 0] = "NONE";
        SecurityContext[SecurityContext["HTML"] = 1] = "HTML";
        SecurityContext[SecurityContext["STYLE"] = 2] = "STYLE";
        SecurityContext[SecurityContext["SCRIPT"] = 3] = "SCRIPT";
        SecurityContext[SecurityContext["URL"] = 4] = "URL";
        SecurityContext[SecurityContext["RESOURCE_URL"] = 5] = "RESOURCE_URL";
      })(SecurityContext || (SecurityContext = {}));
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * An `html` sanitizer which converts untrusted `html` **string** into trusted string by removing
       * dangerous content.
       *
       * This method parses the `html` and locates potentially dangerous content (such as urls and
       * javascript) and removes it.
       *
       * It is possible to mark a string as trusted by calling {@link bypassSanitizationTrustHtml}.
       *
       * @param unsafeHtml untrusted `html`, typically from the user.
       * @returns `html` string which is safe to display to user, because all of the dangerous javascript
       * and urls have been removed.
       *
       * @codeGenApi
       */


      function ɵɵsanitizeHtml(unsafeHtml) {
        var sanitizer = getSanitizer();

        if (sanitizer) {
          return trustedHTMLFromStringBypass(sanitizer.sanitize(SecurityContext.HTML, unsafeHtml) || '');
        }

        if (allowSanitizationBypassAndThrow(unsafeHtml, "HTML"
        /* Html */
        )) {
          return trustedHTMLFromStringBypass(unwrapSafeValue(unsafeHtml));
        }

        return _sanitizeHtml(getDocument(), renderStringify(unsafeHtml));
      }
      /**
       * A `style` sanitizer which converts untrusted `style` **string** into trusted string by removing
       * dangerous content.
       *
       * It is possible to mark a string as trusted by calling {@link bypassSanitizationTrustStyle}.
       *
       * @param unsafeStyle untrusted `style`, typically from the user.
       * @returns `style` string which is safe to bind to the `style` properties.
       *
       * @codeGenApi
       */


      function ɵɵsanitizeStyle(unsafeStyle) {
        var sanitizer = getSanitizer();

        if (sanitizer) {
          return sanitizer.sanitize(SecurityContext.STYLE, unsafeStyle) || '';
        }

        if (allowSanitizationBypassAndThrow(unsafeStyle, "Style"
        /* Style */
        )) {
          return unwrapSafeValue(unsafeStyle);
        }

        return renderStringify(unsafeStyle);
      }
      /**
       * A `url` sanitizer which converts untrusted `url` **string** into trusted string by removing
       * dangerous
       * content.
       *
       * This method parses the `url` and locates potentially dangerous content (such as javascript) and
       * removes it.
       *
       * It is possible to mark a string as trusted by calling {@link bypassSanitizationTrustUrl}.
       *
       * @param unsafeUrl untrusted `url`, typically from the user.
       * @returns `url` string which is safe to bind to the `src` properties such as `<img src>`, because
       * all of the dangerous javascript has been removed.
       *
       * @codeGenApi
       */


      function ɵɵsanitizeUrl(unsafeUrl) {
        var sanitizer = getSanitizer();

        if (sanitizer) {
          return sanitizer.sanitize(SecurityContext.URL, unsafeUrl) || '';
        }

        if (allowSanitizationBypassAndThrow(unsafeUrl, "URL"
        /* Url */
        )) {
          return unwrapSafeValue(unsafeUrl);
        }

        return _sanitizeUrl(renderStringify(unsafeUrl));
      }
      /**
       * A `url` sanitizer which only lets trusted `url`s through.
       *
       * This passes only `url`s marked trusted by calling {@link bypassSanitizationTrustResourceUrl}.
       *
       * @param unsafeResourceUrl untrusted `url`, typically from the user.
       * @returns `url` string which is safe to bind to the `src` properties such as `<img src>`, because
       * only trusted `url`s have been allowed to pass.
       *
       * @codeGenApi
       */


      function ɵɵsanitizeResourceUrl(unsafeResourceUrl) {
        var sanitizer = getSanitizer();

        if (sanitizer) {
          return trustedScriptURLFromStringBypass(sanitizer.sanitize(SecurityContext.RESOURCE_URL, unsafeResourceUrl) || '');
        }

        if (allowSanitizationBypassAndThrow(unsafeResourceUrl, "ResourceURL"
        /* ResourceUrl */
        )) {
          return trustedScriptURLFromStringBypass(unwrapSafeValue(unsafeResourceUrl));
        }

        throw new Error('unsafe value used in a resource URL context (see https://g.co/ng/security#xss)');
      }
      /**
       * A `script` sanitizer which only lets trusted javascript through.
       *
       * This passes only `script`s marked trusted by calling {@link
       * bypassSanitizationTrustScript}.
       *
       * @param unsafeScript untrusted `script`, typically from the user.
       * @returns `url` string which is safe to bind to the `<script>` element such as `<img src>`,
       * because only trusted `scripts` have been allowed to pass.
       *
       * @codeGenApi
       */


      function ɵɵsanitizeScript(unsafeScript) {
        var sanitizer = getSanitizer();

        if (sanitizer) {
          return trustedScriptFromStringBypass(sanitizer.sanitize(SecurityContext.SCRIPT, unsafeScript) || '');
        }

        if (allowSanitizationBypassAndThrow(unsafeScript, "Script"
        /* Script */
        )) {
          return trustedScriptFromStringBypass(unwrapSafeValue(unsafeScript));
        }

        throw new Error('unsafe value used in a script context');
      }
      /**
       * A template tag function for promoting the associated constant literal to a
       * TrustedHTML. Interpolation is explicitly not allowed.
       *
       * @param html constant template literal containing trusted HTML.
       * @returns TrustedHTML wrapping `html`.
       *
       * @security This is a security-sensitive function and should only be used to
       * convert constant values of attributes and properties found in
       * application-provided Angular templates to TrustedHTML.
       *
       * @codeGenApi
       */


      function ɵɵtrustConstantHtml(html) {
        // The following runtime check ensures that the function was called as a
        // template tag (e.g. ɵɵtrustConstantHtml`content`), without any interpolation
        // (e.g. not ɵɵtrustConstantHtml`content ${variable}`). A TemplateStringsArray
        // is an array with a `raw` property that is also an array. The associated
        // template literal has no interpolation if and only if the length of the
        // TemplateStringsArray is 1.
        if (ngDevMode && (!Array.isArray(html) || !Array.isArray(html.raw) || html.length !== 1)) {
          throw new Error("Unexpected interpolation in trusted HTML constant: ".concat(html.join('?')));
        }

        return trustedHTMLFromString(html[0]);
      }
      /**
       * A template tag function for promoting the associated constant literal to a
       * TrustedScriptURL. Interpolation is explicitly not allowed.
       *
       * @param url constant template literal containing a trusted script URL.
       * @returns TrustedScriptURL wrapping `url`.
       *
       * @security This is a security-sensitive function and should only be used to
       * convert constant values of attributes and properties found in
       * application-provided Angular templates to TrustedScriptURL.
       *
       * @codeGenApi
       */


      function ɵɵtrustConstantResourceUrl(url) {
        // The following runtime check ensures that the function was called as a
        // template tag (e.g. ɵɵtrustConstantResourceUrl`content`), without any
        // interpolation (e.g. not ɵɵtrustConstantResourceUrl`content ${variable}`). A
        // TemplateStringsArray is an array with a `raw` property that is also an
        // array. The associated template literal has no interpolation if and only if
        // the length of the TemplateStringsArray is 1.
        if (ngDevMode && (!Array.isArray(url) || !Array.isArray(url.raw) || url.length !== 1)) {
          throw new Error("Unexpected interpolation in trusted URL constant: ".concat(url.join('?')));
        }

        return trustedScriptURLFromString(url[0]);
      }
      /**
       * Detects which sanitizer to use for URL property, based on tag name and prop name.
       *
       * The rules are based on the RESOURCE_URL context config from
       * `packages/compiler/src/schema/dom_security_schema.ts`.
       * If tag and prop names don't match Resource URL schema, use URL sanitizer.
       */


      function getUrlSanitizer(tag, prop) {
        if (prop === 'src' && (tag === 'embed' || tag === 'frame' || tag === 'iframe' || tag === 'media' || tag === 'script') || prop === 'href' && (tag === 'base' || tag === 'link')) {
          return ɵɵsanitizeResourceUrl;
        }

        return ɵɵsanitizeUrl;
      }
      /**
       * Sanitizes URL, selecting sanitizer function based on tag and property names.
       *
       * This function is used in case we can't define security context at compile time, when only prop
       * name is available. This happens when we generate host bindings for Directives/Components. The
       * host element is unknown at compile time, so we defer calculation of specific sanitizer to
       * runtime.
       *
       * @param unsafeUrl untrusted `url`, typically from the user.
       * @param tag target element tag name.
       * @param prop name of the property that contains the value.
       * @returns `url` string which is safe to bind.
       *
       * @codeGenApi
       */


      function ɵɵsanitizeUrlOrResourceUrl(unsafeUrl, tag, prop) {
        return getUrlSanitizer(tag, prop)(unsafeUrl);
      }

      function validateAgainstEventProperties(name) {
        if (name.toLowerCase().startsWith('on')) {
          var msg = "Binding to event property '".concat(name, "' is disallowed for security reasons, ") + "please use (".concat(name.slice(2), ")=...") + "\nIf '".concat(name, "' is a directive input, make sure the directive is imported by the") + " current module.";
          throw new Error(msg);
        }
      }

      function validateAgainstEventAttributes(name) {
        if (name.toLowerCase().startsWith('on')) {
          var msg = "Binding to event attribute '".concat(name, "' is disallowed for security reasons, ") + "please use (".concat(name.slice(2), ")=...");
          throw new Error(msg);
        }
      }

      function getSanitizer() {
        var lView = getLView();
        return lView && lView[SANITIZER];
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ERROR_TYPE = 'ngType';
      var ERROR_DEBUG_CONTEXT = 'ngDebugContext';
      var ERROR_ORIGINAL_ERROR = 'ngOriginalError';
      var ERROR_LOGGER = 'ngErrorLogger';

      function wrappedError(message, originalError) {
        var msg = "".concat(message, " caused by: ").concat(originalError instanceof Error ? originalError.message : originalError);
        var error = Error(msg);
        error[ERROR_ORIGINAL_ERROR] = originalError;
        return error;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function getType(error) {
        return error[ERROR_TYPE];
      }

      function getDebugContext(error) {
        return error[ERROR_DEBUG_CONTEXT];
      }

      function getOriginalError(error) {
        return error[ERROR_ORIGINAL_ERROR];
      }

      function getErrorLogger(error) {
        return error[ERROR_LOGGER] || defaultErrorLogger;
      }

      function defaultErrorLogger(console) {
        for (var _len49 = arguments.length, values = new Array(_len49 > 1 ? _len49 - 1 : 0), _key51 = 1; _key51 < _len49; _key51++) {
          values[_key51 - 1] = arguments[_key51];
        }

        console.error.apply(console, values);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Provides a hook for centralized exception handling.
       *
       * The default implementation of `ErrorHandler` prints error messages to the `console`. To
       * intercept error handling, write a custom exception handler that replaces this default as
       * appropriate for your app.
       *
       * @usageNotes
       * ### Example
       *
       * ```
       * class MyErrorHandler implements ErrorHandler {
       *   handleError(error) {
       *     // do something with the exception
       *   }
       * }
       *
       * @NgModule({
       *   providers: [{provide: ErrorHandler, useClass: MyErrorHandler}]
       * })
       * class MyModule {}
       * ```
       *
       * @publicApi
       */


      var ErrorHandler = /*#__PURE__*/function () {
        function ErrorHandler() {
          _classCallCheck2(this, ErrorHandler);

          /**
           * @internal
           */
          this._console = console;
        }

        _createClass2(ErrorHandler, [{
          key: "handleError",
          value: function handleError(error) {
            var originalError = this._findOriginalError(error);

            var context = this._findContext(error); // Note: Browser consoles show the place from where console.error was called.
            // We can use this to give users additional information about the error.


            var errorLogger = getErrorLogger(error);
            errorLogger(this._console, "ERROR", error);

            if (originalError) {
              errorLogger(this._console, "ORIGINAL ERROR", originalError);
            }

            if (context) {
              errorLogger(this._console, 'ERROR CONTEXT', context);
            }
          }
          /** @internal */

        }, {
          key: "_findContext",
          value: function _findContext(error) {
            if (error) {
              return getDebugContext(error) ? getDebugContext(error) : this._findContext(getOriginalError(error));
            }

            return null;
          }
          /** @internal */

        }, {
          key: "_findOriginalError",
          value: function _findOriginalError(error) {
            var e = getOriginalError(error);

            while (e && getOriginalError(e)) {
              e = getOriginalError(e);
            }

            return e;
          }
        }]);

        return ErrorHandler;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Defines a schema that allows an NgModule to contain the following:
       * - Non-Angular elements named with dash case (`-`).
       * - Element properties named with dash case (`-`).
       * Dash case is the naming convention for custom elements.
       *
       * @publicApi
       */


      var CUSTOM_ELEMENTS_SCHEMA = {
        name: 'custom-elements'
      };
      /**
       * Defines a schema that allows any property on any element.
       *
       * @publicApi
       */

      var NO_ERRORS_SCHEMA = {
        name: 'no-errors-schema'
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Disallowed strings in the comment.
       *
       * see: https://html.spec.whatwg.org/multipage/syntax.html#comments
       */

      var COMMENT_DISALLOWED = /^>|^->|<!--|-->|--!>|<!-$/g;
      /**
       * Delimiter in the disallowed strings which needs to be wrapped with zero with character.
       */

      var COMMENT_DELIMITER = /(<|>)/;
      var COMMENT_DELIMITER_ESCAPED = "\u200B$1\u200B";
      /**
       * Escape the content of comment strings so that it can be safely inserted into a comment node.
       *
       * The issue is that HTML does not specify any way to escape comment end text inside the comment.
       * Consider: `<!-- The way you close a comment is with ">", and "->" at the beginning or by "-->" or
       * "--!>" at the end. -->`. Above the `"-->"` is meant to be text not an end to the comment. This
       * can be created programmatically through DOM APIs. (`<!--` are also disallowed.)
       *
       * see: https://html.spec.whatwg.org/multipage/syntax.html#comments
       *
       * ```
       * div.innerHTML = div.innerHTML
       * ```
       *
       * One would expect that the above code would be safe to do, but it turns out that because comment
       * text is not escaped, the comment may contain text which will prematurely close the comment
       * opening up the application for XSS attack. (In SSR we programmatically create comment nodes which
       * may contain such text and expect them to be safe.)
       *
       * This function escapes the comment text by looking for comment delimiters (`<` and `>`) and
       * surrounding them with `_>_` where the `_` is a zero width space `\u200B`. The result is that if a
       * comment contains any of the comment start/end delimiters (such as `<!--`, `-->` or `--!>`) the
       * text it will render normally but it will not cause the HTML parser to close/open the comment.
       *
       * @param value text to make safe for comment node by escaping the comment open/close character
       *     sequence.
       */

      function escapeCommentText(value) {
        return value.replace(COMMENT_DISALLOWED, function (text) {
          return text.replace(COMMENT_DELIMITER, COMMENT_DELIMITER_ESCAPED);
        });
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * THIS FILE CONTAINS CODE WHICH SHOULD BE TREE SHAKEN AND NEVER CALLED FROM PRODUCTION CODE!!!
       */

      /**
       * Creates an `Array` construction with a given name. This is useful when
       * looking for memory consumption to see what time of array it is.
       *
       *
       * @param name Name to give to the constructor
       * @returns A subclass of `Array` if possible. This can only be done in
       *          environments which support `class` construct.
       */


      function createNamedArrayType(name) {
        // This should never be called in prod mode, so let's verify that is the case.
        if (ngDevMode) {
          try {
            // If this function were compromised the following could lead to arbitrary
            // script execution. We bless it with Trusted Types anyway since this
            // function is stripped out of production binaries.
            return newTrustedFunctionForDev('Array', "return class ".concat(name, " extends Array{}"))(Array);
          } catch (e) {
            // If it does not work just give up and fall back to regular Array.
            return Array;
          }
        } else {
          throw new Error('Looks like we are in \'prod mode\', but we are creating a named Array type, which is wrong! Check your code');
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function normalizeDebugBindingName(name) {
        // Attribute names with `$` (eg `x-y$`) are valid per spec, but unsupported by some browsers
        name = camelCaseToDashCase(name.replace(/[$@]/g, '_'));
        return "ng-reflect-".concat(name);
      }

      var CAMEL_CASE_REGEXP = /([A-Z])/g;

      function camelCaseToDashCase(input) {
        return input.replace(CAMEL_CASE_REGEXP, function () {
          for (var _len50 = arguments.length, m = new Array(_len50), _key52 = 0; _key52 < _len50; _key52++) {
            m[_key52] = arguments[_key52];
          }

          return '-' + m[1].toLowerCase();
        });
      }

      function normalizeDebugBindingValue(value) {
        try {
          // Limit the size of the value as otherwise the DOM just gets polluted.
          return value != null ? value.toString().slice(0, 30) : value;
        } catch (e) {
          return '[ERROR] Exception while trying to serialize the value';
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Returns the matching `LContext` data for a given DOM node, directive or component instance.
       *
       * This function will examine the provided DOM element, component, or directive instance\'s
       * monkey-patched property to derive the `LContext` data. Once called then the monkey-patched
       * value will be that of the newly created `LContext`.
       *
       * If the monkey-patched value is the `LView` instance then the context value for that
       * target will be created and the monkey-patch reference will be updated. Therefore when this
       * function is called it may mutate the provided element\'s, component\'s or any of the associated
       * directive\'s monkey-patch values.
       *
       * If the monkey-patch value is not detected then the code will walk up the DOM until an element
       * is found which contains a monkey-patch reference. When that occurs then the provided element
       * will be updated with a new context (which is then returned). If the monkey-patch value is not
       * detected for a component/directive instance then it will throw an error (all components and
       * directives should be automatically monkey-patched by ivy).
       *
       * @param target Component, Directive or DOM Node.
       */


      function getLContext(target) {
        var mpValue = readPatchedData(target);

        if (mpValue) {
          // only when it's an array is it considered an LView instance
          // ... otherwise it's an already constructed LContext instance
          if (Array.isArray(mpValue)) {
            var lView = mpValue;
            var nodeIndex;
            var component = undefined;
            var directives = undefined;

            if (isComponentInstance(target)) {
              nodeIndex = findViaComponent(lView, target);

              if (nodeIndex == -1) {
                throw new Error('The provided component was not found in the application');
              }

              component = target;
            } else if (isDirectiveInstance(target)) {
              nodeIndex = findViaDirective(lView, target);

              if (nodeIndex == -1) {
                throw new Error('The provided directive was not found in the application');
              }

              directives = getDirectivesAtNodeIndex(nodeIndex, lView, false);
            } else {
              nodeIndex = findViaNativeElement(lView, target);

              if (nodeIndex == -1) {
                return null;
              }
            } // the goal is not to fill the entire context full of data because the lookups
            // are expensive. Instead, only the target data (the element, component, container, ICU
            // expression or directive details) are filled into the context. If called multiple times
            // with different target values then the missing target data will be filled in.


            var _native2 = unwrapRNode(lView[nodeIndex]);

            var existingCtx = readPatchedData(_native2);
            var context = existingCtx && !Array.isArray(existingCtx) ? existingCtx : createLContext(lView, nodeIndex, _native2); // only when the component has been discovered then update the monkey-patch

            if (component && context.component === undefined) {
              context.component = component;
              attachPatchData(context.component, context);
            } // only when the directives have been discovered then update the monkey-patch


            if (directives && context.directives === undefined) {
              context.directives = directives;

              for (var i = 0; i < directives.length; i++) {
                attachPatchData(directives[i], context);
              }
            }

            attachPatchData(context["native"], context);
            mpValue = context;
          }
        } else {
          var rElement = target;
          ngDevMode && assertDomNode(rElement); // if the context is not found then we need to traverse upwards up the DOM
          // to find the nearest element that has already been monkey patched with data

          var parent = rElement;

          while (parent = parent.parentNode) {
            var parentContext = readPatchedData(parent);

            if (parentContext) {
              var _lView2 = void 0;

              if (Array.isArray(parentContext)) {
                _lView2 = parentContext;
              } else {
                _lView2 = parentContext.lView;
              } // the edge of the app was also reached here through another means
              // (maybe because the DOM was changed manually).


              if (!_lView2) {
                return null;
              }

              var index = findViaNativeElement(_lView2, rElement);

              if (index >= 0) {
                var _native3 = unwrapRNode(_lView2[index]);

                var _context5 = createLContext(_lView2, index, _native3);

                attachPatchData(_native3, _context5);
                mpValue = _context5;
                break;
              }
            }
          }
        }

        return mpValue || null;
      }
      /**
       * Creates an empty instance of a `LContext` context
       */


      function createLContext(lView, nodeIndex, _native4) {
        return {
          lView: lView,
          nodeIndex: nodeIndex,
          "native": _native4,
          component: undefined,
          directives: undefined,
          localRefs: undefined
        };
      }
      /**
       * Takes a component instance and returns the view for that component.
       *
       * @param componentInstance
       * @returns The component's view
       */


      function getComponentViewByInstance(componentInstance) {
        var lView = readPatchedData(componentInstance);
        var view;

        if (Array.isArray(lView)) {
          var nodeIndex = findViaComponent(lView, componentInstance);
          view = getComponentLViewByIndex(nodeIndex, lView);
          var context = createLContext(lView, nodeIndex, view[HOST]);
          context.component = componentInstance;
          attachPatchData(componentInstance, context);
          attachPatchData(context["native"], context);
        } else {
          var _context6 = lView;
          view = getComponentLViewByIndex(_context6.nodeIndex, _context6.lView);
        }

        return view;
      }
      /**
       * Assigns the given data to the given target (which could be a component,
       * directive or DOM node instance) using monkey-patching.
       */


      function attachPatchData(target, data) {
        target[MONKEY_PATCH_KEY_NAME] = data;
      }

      function isComponentInstance(instance) {
        return instance && instance.constructor && instance.constructor.ɵcmp;
      }

      function isDirectiveInstance(instance) {
        return instance && instance.constructor && instance.constructor.ɵdir;
      }
      /**
       * Locates the element within the given LView and returns the matching index
       */


      function findViaNativeElement(lView, target) {
        var tView = lView[TVIEW];

        for (var i = HEADER_OFFSET; i < tView.bindingStartIndex; i++) {
          if (unwrapRNode(lView[i]) === target) {
            return i;
          }
        }

        return -1;
      }
      /**
       * Locates the next tNode (child, sibling or parent).
       */


      function traverseNextElement(tNode) {
        if (tNode.child) {
          return tNode.child;
        } else if (tNode.next) {
          return tNode.next;
        } else {
          // Let's take the following template: <div><span>text</span></div><component/>
          // After checking the text node, we need to find the next parent that has a "next" TNode,
          // in this case the parent `div`, so that we can find the component.
          while (tNode.parent && !tNode.parent.next) {
            tNode = tNode.parent;
          }

          return tNode.parent && tNode.parent.next;
        }
      }
      /**
       * Locates the component within the given LView and returns the matching index
       */


      function findViaComponent(lView, componentInstance) {
        var componentIndices = lView[TVIEW].components;

        if (componentIndices) {
          for (var i = 0; i < componentIndices.length; i++) {
            var elementComponentIndex = componentIndices[i];
            var componentView = getComponentLViewByIndex(elementComponentIndex, lView);

            if (componentView[CONTEXT] === componentInstance) {
              return elementComponentIndex;
            }
          }
        } else {
          var rootComponentView = getComponentLViewByIndex(HEADER_OFFSET, lView);
          var rootComponent = rootComponentView[CONTEXT];

          if (rootComponent === componentInstance) {
            // we are dealing with the root element here therefore we know that the
            // element is the very first element after the HEADER data in the lView
            return HEADER_OFFSET;
          }
        }

        return -1;
      }
      /**
       * Locates the directive within the given LView and returns the matching index
       */


      function findViaDirective(lView, directiveInstance) {
        // if a directive is monkey patched then it will (by default)
        // have a reference to the LView of the current view. The
        // element bound to the directive being search lives somewhere
        // in the view data. We loop through the nodes and check their
        // list of directives for the instance.
        var tNode = lView[TVIEW].firstChild;

        while (tNode) {
          var directiveIndexStart = tNode.directiveStart;
          var directiveIndexEnd = tNode.directiveEnd;

          for (var i = directiveIndexStart; i < directiveIndexEnd; i++) {
            if (lView[i] === directiveInstance) {
              return tNode.index;
            }
          }

          tNode = traverseNextElement(tNode);
        }

        return -1;
      }
      /**
       * Returns a list of directives extracted from the given view based on the
       * provided list of directive index values.
       *
       * @param nodeIndex The node index
       * @param lView The target view data
       * @param includeComponents Whether or not to include components in returned directives
       */


      function getDirectivesAtNodeIndex(nodeIndex, lView, includeComponents) {
        var tNode = lView[TVIEW].data[nodeIndex];
        var directiveStartIndex = tNode.directiveStart;
        if (directiveStartIndex == 0) return EMPTY_ARRAY;
        var directiveEndIndex = tNode.directiveEnd;
        if (!includeComponents && tNode.flags & 2
        /* isComponentHost */
        ) directiveStartIndex++;
        return lView.slice(directiveStartIndex, directiveEndIndex);
      }

      function getComponentAtNodeIndex(nodeIndex, lView) {
        var tNode = lView[TVIEW].data[nodeIndex];
        var directiveStartIndex = tNode.directiveStart;
        return tNode.flags & 2
        /* isComponentHost */
        ? lView[directiveStartIndex] : null;
      }
      /**
       * Returns a map of local references (local reference name => element or directive instance) that
       * exist on a given element.
       */


      function discoverLocalRefs(lView, nodeIndex) {
        var tNode = lView[TVIEW].data[nodeIndex];

        if (tNode && tNode.localNames) {
          var result = {};
          var localIndex = tNode.index + 1;

          for (var i = 0; i < tNode.localNames.length; i += 2) {
            result[tNode.localNames[i]] = lView[localIndex];
            localIndex++;
          }

          return result;
        }

        return null;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ɵ0$4 = function ɵ0$4() {
        return (typeof requestAnimationFrame !== 'undefined' && requestAnimationFrame || // browser only
        setTimeout // everything else
        ).bind(_global);
      };

      var defaultScheduler = ɵ0$4();
      /**
       *
       * @codeGenApi
       */

      function ɵɵresolveWindow(element) {
        return {
          name: 'window',
          target: element.ownerDocument.defaultView
        };
      }
      /**
       *
       * @codeGenApi
       */


      function ɵɵresolveDocument(element) {
        return {
          name: 'document',
          target: element.ownerDocument
        };
      }
      /**
       *
       * @codeGenApi
       */


      function ɵɵresolveBody(element) {
        return {
          name: 'body',
          target: element.ownerDocument.body
        };
      }
      /**
       * The special delimiter we use to separate property names, prefixes, and suffixes
       * in property binding metadata. See storeBindingMetadata().
       *
       * We intentionally use the Unicode "REPLACEMENT CHARACTER" (U+FFFD) as a delimiter
       * because it is a very uncommon character that is unlikely to be part of a user's
       * property names or interpolation strings. If it is in fact used in a property
       * binding, DebugElement.properties will not return the correct value for that
       * binding. However, there should be no runtime effect for real applications.
       *
       * This character is typically rendered as a question mark inside of a diamond.
       * See https://en.wikipedia.org/wiki/Specials_(Unicode_block)
       *
       */


      var INTERPOLATION_DELIMITER = "\uFFFD";
      /**
       * Unwrap a value which might be behind a closure (for forward declaration reasons).
       */

      function maybeUnwrapFn(value) {
        if (value instanceof Function) {
          return value();
        } else {
          return value;
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Called when there are multiple component selectors that match a given node */


      function throwMultipleComponentError(tNode) {
        throw new RuntimeError("300"
        /* MULTIPLE_COMPONENTS_MATCH */
        , "Multiple components match node with tagname ".concat(tNode.value));
      }
      /** Throws an ExpressionChangedAfterChecked error if checkNoChanges mode is on. */


      function throwErrorIfNoChangesMode(creationMode, oldValue, currValue, propName) {
        var field = propName ? " for '".concat(propName, "'") : '';
        var msg = "ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value".concat(field, ": '").concat(oldValue, "'. Current value: '").concat(currValue, "'.");

        if (creationMode) {
          msg += " It seems like the view has been created after its parent and its children have been dirty checked." + " Has it been created in a change detection hook?";
        } // TODO: include debug context, see `viewDebugError` function in
        // `packages/core/src/view/errors.ts` for reference.


        throw new RuntimeError("100"
        /* EXPRESSION_CHANGED_AFTER_CHECKED */
        , msg);
      }

      function constructDetailsForInterpolation(lView, rootIndex, expressionIndex, meta, changedValue) {
        var _meta$split = meta.split(INTERPOLATION_DELIMITER),
            _meta$split2 = _toArray(_meta$split),
            propName = _meta$split2[0],
            prefix = _meta$split2[1],
            chunks = _meta$split2.slice(2);

        var oldValue = prefix,
            newValue = prefix;

        for (var i = 0; i < chunks.length; i++) {
          var slotIdx = rootIndex + i;
          oldValue += "".concat(lView[slotIdx]).concat(chunks[i]);
          newValue += "".concat(slotIdx === expressionIndex ? changedValue : lView[slotIdx]).concat(chunks[i]);
        }

        return {
          propName: propName,
          oldValue: oldValue,
          newValue: newValue
        };
      }
      /**
       * Constructs an object that contains details for the ExpressionChangedAfterItHasBeenCheckedError:
       * - property name (for property bindings or interpolations)
       * - old and new values, enriched using information from metadata
       *
       * More information on the metadata storage format can be found in `storePropertyBindingMetadata`
       * function description.
       */


      function getExpressionChangedErrorDetails(lView, bindingIndex, oldValue, newValue) {
        var tData = lView[TVIEW].data;
        var metadata = tData[bindingIndex];

        if (typeof metadata === 'string') {
          // metadata for property interpolation
          if (metadata.indexOf(INTERPOLATION_DELIMITER) > -1) {
            return constructDetailsForInterpolation(lView, bindingIndex, bindingIndex, metadata, newValue);
          } // metadata for property binding


          return {
            propName: metadata,
            oldValue: oldValue,
            newValue: newValue
          };
        } // metadata is not available for this expression, check if this expression is a part of the
        // property interpolation by going from the current binding index left and look for a string that
        // contains INTERPOLATION_DELIMITER, the layout in tView.data for this case will look like this:
        // [..., 'id�Prefix � and � suffix', null, null, null, ...]


        if (metadata === null) {
          var idx = bindingIndex - 1;

          while (typeof tData[idx] !== 'string' && tData[idx + 1] === null) {
            idx--;
          }

          var meta = tData[idx];

          if (typeof meta === 'string') {
            var matches = meta.match(new RegExp(INTERPOLATION_DELIMITER, 'g')); // first interpolation delimiter separates property name from interpolation parts (in case of
            // property interpolations), so we subtract one from total number of found delimiters

            if (matches && matches.length - 1 > bindingIndex - idx) {
              return constructDetailsForInterpolation(lView, idx, bindingIndex, meta, newValue);
            }
          }
        }

        return {
          propName: undefined,
          oldValue: oldValue,
          newValue: newValue
        };
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Flags for renderer-specific style modifiers.
       * @publicApi
       */


      var RendererStyleFlags2;

      (function (RendererStyleFlags2) {
        // TODO(misko): This needs to be refactored into a separate file so that it can be imported from
        // `node_manipulation.ts` Currently doing the import cause resolution order to change and fails
        // the tests. The work around is to have hard coded value in `node_manipulation.ts` for now.

        /**
         * Marks a style as important.
         */
        RendererStyleFlags2[RendererStyleFlags2["Important"] = 1] = "Important";
        /**
         * Marks a style as using dash case naming (this-is-dash-case).
         */

        RendererStyleFlags2[RendererStyleFlags2["DashCase"] = 2] = "DashCase";
      })(RendererStyleFlags2 || (RendererStyleFlags2 = {}));
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var _icuContainerIterate;
      /**
       * Iterator which provides ability to visit all of the `TIcuContainerNode` root `RNode`s.
       */


      function icuContainerIterate(tIcuContainerNode, lView) {
        return _icuContainerIterate(tIcuContainerNode, lView);
      }
      /**
       * Ensures that `IcuContainerVisitor`'s implementation is present.
       *
       * This function is invoked when i18n instruction comes across an ICU. The purpose is to allow the
       * bundler to tree shake ICU logic and only load it if ICU instruction is executed.
       */


      function ensureIcuContainerVisitorLoaded(loader) {
        if (_icuContainerIterate === undefined) {
          // Do not inline this function. We want to keep `ensureIcuContainerVisitorLoaded` light, so it
          // can be inlined into call-site.
          _icuContainerIterate = loader();
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // Note: This hack is necessary so we don't erroneously get a circular dependency
      // failure based on types.


      var unusedValueExportToPlacateAjd$5 = 1;
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Gets the parent LView of the passed LView, if the PARENT is an LContainer, will get the parent of
       * that LContainer, which is an LView
       * @param lView the lView whose parent to get
       */

      function getLViewParent(lView) {
        ngDevMode && assertLView(lView);
        var parent = lView[PARENT];
        return isLContainer(parent) ? parent[PARENT] : parent;
      }
      /**
       * Retrieve the root view from any component or `LView` by walking the parent `LView` until
       * reaching the root `LView`.
       *
       * @param componentOrLView any component or `LView`
       */


      function getRootView(componentOrLView) {
        ngDevMode && assertDefined(componentOrLView, 'component');
        var lView = isLView(componentOrLView) ? componentOrLView : readPatchedLView(componentOrLView);

        while (lView && !(lView[FLAGS] & 512
        /* IsRoot */
        )) {
          lView = getLViewParent(lView);
        }

        ngDevMode && assertLView(lView);
        return lView;
      }
      /**
       * Returns the `RootContext` instance that is associated with
       * the application where the target is situated. It does this by walking the parent views until it
       * gets to the root view, then getting the context off of that.
       *
       * @param viewOrComponent the `LView` or component to get the root context for.
       */


      function getRootContext(viewOrComponent) {
        var rootView = getRootView(viewOrComponent);
        ngDevMode && assertDefined(rootView[CONTEXT], 'RootView has no context. Perhaps it is disconnected?');
        return rootView[CONTEXT];
      }
      /**
       * Gets the first `LContainer` in the LView or `null` if none exists.
       */


      function getFirstLContainer(lView) {
        return getNearestLContainer(lView[CHILD_HEAD]);
      }
      /**
       * Gets the next `LContainer` that is a sibling of the given container.
       */


      function getNextLContainer(container) {
        return getNearestLContainer(container[NEXT]);
      }

      function getNearestLContainer(viewOrContainer) {
        while (viewOrContainer !== null && !isLContainer(viewOrContainer)) {
          viewOrContainer = viewOrContainer[NEXT];
        }

        return viewOrContainer;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var unusedValueToPlacateAjd = unusedValueExportToPlacateAjd$1 + unusedValueExportToPlacateAjd$4 + unusedValueExportToPlacateAjd$5 + unusedValueExportToPlacateAjd$2 + unusedValueExportToPlacateAjd;
      /**
       * NOTE: for performance reasons, the possible actions are inlined within the function instead of
       * being passed as an argument.
       */

      function applyToElementOrContainer(action, renderer, parent, lNodeToHandle, beforeNode) {
        // If this slot was allocated for a text node dynamically created by i18n, the text node itself
        // won't be created until i18nApply() in the update block, so this node should be skipped.
        // For more info, see "ICU expressions should work inside an ngTemplateOutlet inside an ngFor"
        // in `i18n_spec.ts`.
        if (lNodeToHandle != null) {
          var lContainer;
          var isComponent = false; // We are expecting an RNode, but in the case of a component or LContainer the `RNode` is
          // wrapped in an array which needs to be unwrapped. We need to know if it is a component and if
          // it has LContainer so that we can process all of those cases appropriately.

          if (isLContainer(lNodeToHandle)) {
            lContainer = lNodeToHandle;
          } else if (isLView(lNodeToHandle)) {
            isComponent = true;
            ngDevMode && assertDefined(lNodeToHandle[HOST], 'HOST must be defined for a component LView');
            lNodeToHandle = lNodeToHandle[HOST];
          }

          var rNode = unwrapRNode(lNodeToHandle);
          ngDevMode && !isProceduralRenderer(renderer) && assertDomNode(rNode);

          if (action === 0
          /* Create */
          && parent !== null) {
            if (beforeNode == null) {
              nativeAppendChild(renderer, parent, rNode);
            } else {
              nativeInsertBefore(renderer, parent, rNode, beforeNode || null, true);
            }
          } else if (action === 1
          /* Insert */
          && parent !== null) {
            nativeInsertBefore(renderer, parent, rNode, beforeNode || null, true);
          } else if (action === 2
          /* Detach */
          ) {
              nativeRemoveNode(renderer, rNode, isComponent);
            } else if (action === 3
          /* Destroy */
          ) {
              ngDevMode && ngDevMode.rendererDestroyNode++;
              renderer.destroyNode(rNode);
            }

          if (lContainer != null) {
            applyContainer(renderer, action, lContainer, parent, beforeNode);
          }
        }
      }

      function createTextNode(renderer, value) {
        ngDevMode && ngDevMode.rendererCreateTextNode++;
        ngDevMode && ngDevMode.rendererSetText++;
        return isProceduralRenderer(renderer) ? renderer.createText(value) : renderer.createTextNode(value);
      }

      function updateTextNode(renderer, rNode, value) {
        ngDevMode && ngDevMode.rendererSetText++;
        isProceduralRenderer(renderer) ? renderer.setValue(rNode, value) : rNode.textContent = value;
      }

      function createCommentNode(renderer, value) {
        ngDevMode && ngDevMode.rendererCreateComment++; // isProceduralRenderer check is not needed because both `Renderer2` and `Renderer3` have the same
        // method name.

        return renderer.createComment(escapeCommentText(value));
      }
      /**
       * Creates a native element from a tag name, using a renderer.
       * @param renderer A renderer to use
       * @param name the tag name
       * @param namespace Optional namespace for element.
       * @returns the element created
       */


      function createElementNode(renderer, name, namespace) {
        ngDevMode && ngDevMode.rendererCreateElement++;

        if (isProceduralRenderer(renderer)) {
          return renderer.createElement(name, namespace);
        } else {
          return namespace === null ? renderer.createElement(name) : renderer.createElementNS(namespace, name);
        }
      }
      /**
       * Removes all DOM elements associated with a view.
       *
       * Because some root nodes of the view may be containers, we sometimes need
       * to propagate deeply into the nested containers to remove all elements in the
       * views beneath it.
       *
       * @param tView The `TView' of the `LView` from which elements should be added or removed
       * @param lView The view from which elements should be added or removed
       */


      function removeViewFromContainer(tView, lView) {
        var renderer = lView[RENDERER];
        applyView(tView, lView, renderer, 2
        /* Detach */
        , null, null);
        lView[HOST] = null;
        lView[T_HOST] = null;
      }
      /**
       * Adds all DOM elements associated with a view.
       *
       * Because some root nodes of the view may be containers, we sometimes need
       * to propagate deeply into the nested containers to add all elements in the
       * views beneath it.
       *
       * @param tView The `TView' of the `LView` from which elements should be added or removed
       * @param parentTNode The `TNode` where the `LView` should be attached to.
       * @param renderer Current renderer to use for DOM manipulations.
       * @param lView The view from which elements should be added or removed
       * @param parentNativeNode The parent `RElement` where it should be inserted into.
       * @param beforeNode The node before which elements should be added, if insert mode
       */


      function addViewToContainer(tView, parentTNode, renderer, lView, parentNativeNode, beforeNode) {
        lView[HOST] = parentNativeNode;
        lView[T_HOST] = parentTNode;
        applyView(tView, lView, renderer, 1
        /* Insert */
        , parentNativeNode, beforeNode);
      }
      /**
       * Detach a `LView` from the DOM by detaching its nodes.
       *
       * @param tView The `TView' of the `LView` to be detached
       * @param lView the `LView` to be detached.
       */


      function renderDetachView(tView, lView) {
        applyView(tView, lView, lView[RENDERER], 2
        /* Detach */
        , null, null);
      }
      /**
       * Traverses down and up the tree of views and containers to remove listeners and
       * call onDestroy callbacks.
       *
       * Notes:
       *  - Because it's used for onDestroy calls, it needs to be bottom-up.
       *  - Must process containers instead of their views to avoid splicing
       *  when views are destroyed and re-added.
       *  - Using a while loop because it's faster than recursion
       *  - Destroy only called on movement to sibling or movement to parent (laterally or up)
       *
       *  @param rootView The view to destroy
       */


      function destroyViewTree(rootView) {
        // If the view has no children, we can clean it up and return early.
        var lViewOrLContainer = rootView[CHILD_HEAD];

        if (!lViewOrLContainer) {
          return cleanUpView(rootView[TVIEW], rootView);
        }

        while (lViewOrLContainer) {
          var next = null;

          if (isLView(lViewOrLContainer)) {
            // If LView, traverse down to child.
            next = lViewOrLContainer[CHILD_HEAD];
          } else {
            ngDevMode && assertLContainer(lViewOrLContainer); // If container, traverse down to its first LView.

            var firstView = lViewOrLContainer[CONTAINER_HEADER_OFFSET];
            if (firstView) next = firstView;
          }

          if (!next) {
            // Only clean up view when moving to the side or up, as destroy hooks
            // should be called in order from the bottom up.
            while (lViewOrLContainer && !lViewOrLContainer[NEXT] && lViewOrLContainer !== rootView) {
              if (isLView(lViewOrLContainer)) {
                cleanUpView(lViewOrLContainer[TVIEW], lViewOrLContainer);
              }

              lViewOrLContainer = lViewOrLContainer[PARENT];
            }

            if (lViewOrLContainer === null) lViewOrLContainer = rootView;

            if (isLView(lViewOrLContainer)) {
              cleanUpView(lViewOrLContainer[TVIEW], lViewOrLContainer);
            }

            next = lViewOrLContainer && lViewOrLContainer[NEXT];
          }

          lViewOrLContainer = next;
        }
      }
      /**
       * Inserts a view into a container.
       *
       * This adds the view to the container's array of active views in the correct
       * position. It also adds the view's elements to the DOM if the container isn't a
       * root node of another view (in that case, the view's elements will be added when
       * the container's parent view is added later).
       *
       * @param tView The `TView' of the `LView` to insert
       * @param lView The view to insert
       * @param lContainer The container into which the view should be inserted
       * @param index Which index in the container to insert the child view into
       */


      function insertView(tView, lView, lContainer, index) {
        ngDevMode && assertLView(lView);
        ngDevMode && assertLContainer(lContainer);
        var indexInContainer = CONTAINER_HEADER_OFFSET + index;
        var containerLength = lContainer.length;

        if (index > 0) {
          // This is a new view, we need to add it to the children.
          lContainer[indexInContainer - 1][NEXT] = lView;
        }

        if (index < containerLength - CONTAINER_HEADER_OFFSET) {
          lView[NEXT] = lContainer[indexInContainer];
          addToArray(lContainer, CONTAINER_HEADER_OFFSET + index, lView);
        } else {
          lContainer.push(lView);
          lView[NEXT] = null;
        }

        lView[PARENT] = lContainer; // track views where declaration and insertion points are different

        var declarationLContainer = lView[DECLARATION_LCONTAINER];

        if (declarationLContainer !== null && lContainer !== declarationLContainer) {
          trackMovedView(declarationLContainer, lView);
        } // notify query that a new view has been added


        var lQueries = lView[QUERIES];

        if (lQueries !== null) {
          lQueries.insertView(tView);
        } // Sets the attached flag


        lView[FLAGS] |= 128
        /* Attached */
        ;
      }
      /**
       * Track views created from the declaration container (TemplateRef) and inserted into a
       * different LContainer.
       */


      function trackMovedView(declarationContainer, lView) {
        ngDevMode && assertDefined(lView, 'LView required');
        ngDevMode && assertLContainer(declarationContainer);
        var movedViews = declarationContainer[MOVED_VIEWS];
        var insertedLContainer = lView[PARENT];
        ngDevMode && assertLContainer(insertedLContainer);
        var insertedComponentLView = insertedLContainer[PARENT][DECLARATION_COMPONENT_VIEW];
        ngDevMode && assertDefined(insertedComponentLView, 'Missing insertedComponentLView');
        var declaredComponentLView = lView[DECLARATION_COMPONENT_VIEW];
        ngDevMode && assertDefined(declaredComponentLView, 'Missing declaredComponentLView');

        if (declaredComponentLView !== insertedComponentLView) {
          // At this point the declaration-component is not same as insertion-component; this means that
          // this is a transplanted view. Mark the declared lView as having transplanted views so that
          // those views can participate in CD.
          declarationContainer[HAS_TRANSPLANTED_VIEWS] = true;
        }

        if (movedViews === null) {
          declarationContainer[MOVED_VIEWS] = [lView];
        } else {
          movedViews.push(lView);
        }
      }

      function detachMovedView(declarationContainer, lView) {
        ngDevMode && assertLContainer(declarationContainer);
        ngDevMode && assertDefined(declarationContainer[MOVED_VIEWS], 'A projected view should belong to a non-empty projected views collection');
        var movedViews = declarationContainer[MOVED_VIEWS];
        var declarationViewIndex = movedViews.indexOf(lView);
        var insertionLContainer = lView[PARENT];
        ngDevMode && assertLContainer(insertionLContainer); // If the view was marked for refresh but then detached before it was checked (where the flag
        // would be cleared and the counter decremented), we need to decrement the view counter here
        // instead.

        if (lView[FLAGS] & 1024
        /* RefreshTransplantedView */
        ) {
            lView[FLAGS] &= ~1024
            /* RefreshTransplantedView */
            ;
            updateTransplantedViewCount(insertionLContainer, -1);
          }

        movedViews.splice(declarationViewIndex, 1);
      }
      /**
       * Detaches a view from a container.
       *
       * This method removes the view from the container's array of active views. It also
       * removes the view's elements from the DOM.
       *
       * @param lContainer The container from which to detach a view
       * @param removeIndex The index of the view to detach
       * @returns Detached LView instance.
       */


      function detachView(lContainer, removeIndex) {
        if (lContainer.length <= CONTAINER_HEADER_OFFSET) return;
        var indexInContainer = CONTAINER_HEADER_OFFSET + removeIndex;
        var viewToDetach = lContainer[indexInContainer];

        if (viewToDetach) {
          var declarationLContainer = viewToDetach[DECLARATION_LCONTAINER];

          if (declarationLContainer !== null && declarationLContainer !== lContainer) {
            detachMovedView(declarationLContainer, viewToDetach);
          }

          if (removeIndex > 0) {
            lContainer[indexInContainer - 1][NEXT] = viewToDetach[NEXT];
          }

          var removedLView = removeFromArray(lContainer, CONTAINER_HEADER_OFFSET + removeIndex);
          removeViewFromContainer(viewToDetach[TVIEW], viewToDetach); // notify query that a view has been removed

          var lQueries = removedLView[QUERIES];

          if (lQueries !== null) {
            lQueries.detachView(removedLView[TVIEW]);
          }

          viewToDetach[PARENT] = null;
          viewToDetach[NEXT] = null; // Unsets the attached flag

          viewToDetach[FLAGS] &= ~128
          /* Attached */
          ;
        }

        return viewToDetach;
      }
      /**
       * A standalone function which destroys an LView,
       * conducting clean up (e.g. removing listeners, calling onDestroys).
       *
       * @param tView The `TView' of the `LView` to be destroyed
       * @param lView The view to be destroyed.
       */


      function destroyLView(tView, lView) {
        if (!(lView[FLAGS] & 256
        /* Destroyed */
        )) {
          var renderer = lView[RENDERER];

          if (isProceduralRenderer(renderer) && renderer.destroyNode) {
            applyView(tView, lView, renderer, 3
            /* Destroy */
            , null, null);
          }

          destroyViewTree(lView);
        }
      }
      /**
       * Calls onDestroys hooks for all directives and pipes in a given view and then removes all
       * listeners. Listeners are removed as the last step so events delivered in the onDestroys hooks
       * can be propagated to @Output listeners.
       *
       * @param tView `TView` for the `LView` to clean up.
       * @param lView The LView to clean up
       */


      function cleanUpView(tView, lView) {
        if (!(lView[FLAGS] & 256
        /* Destroyed */
        )) {
          // Usually the Attached flag is removed when the view is detached from its parent, however
          // if it's a root view, the flag won't be unset hence why we're also removing on destroy.
          lView[FLAGS] &= ~128
          /* Attached */
          ; // Mark the LView as destroyed *before* executing the onDestroy hooks. An onDestroy hook
          // runs arbitrary user code, which could include its own `viewRef.destroy()` (or similar). If
          // We don't flag the view as destroyed before the hooks, this could lead to an infinite loop.
          // This also aligns with the ViewEngine behavior. It also means that the onDestroy hook is
          // really more of an "afterDestroy" hook if you think about it.

          lView[FLAGS] |= 256
          /* Destroyed */
          ;
          executeOnDestroys(tView, lView);
          processCleanups(tView, lView); // For component views only, the local renderer is destroyed at clean up time.

          if (lView[TVIEW].type === 1
          /* Component */
          && isProceduralRenderer(lView[RENDERER])) {
            ngDevMode && ngDevMode.rendererDestroy++;
            lView[RENDERER].destroy();
          }

          var declarationContainer = lView[DECLARATION_LCONTAINER]; // we are dealing with an embedded view that is still inserted into a container

          if (declarationContainer !== null && isLContainer(lView[PARENT])) {
            // and this is a projected view
            if (declarationContainer !== lView[PARENT]) {
              detachMovedView(declarationContainer, lView);
            } // For embedded views still attached to a container: remove query result from this view.


            var lQueries = lView[QUERIES];

            if (lQueries !== null) {
              lQueries.detachView(tView);
            }
          }
        }
      }
      /** Removes listeners and unsubscribes from output subscriptions */


      function processCleanups(tView, lView) {
        var tCleanup = tView.cleanup;
        var lCleanup = lView[CLEANUP]; // `LCleanup` contains both share information with `TCleanup` as well as instance specific
        // information appended at the end. We need to know where the end of the `TCleanup` information
        // is, and we track this with `lastLCleanupIndex`.

        var lastLCleanupIndex = -1;

        if (tCleanup !== null) {
          for (var i = 0; i < tCleanup.length - 1; i += 2) {
            if (typeof tCleanup[i] === 'string') {
              // This is a native DOM listener
              var idxOrTargetGetter = tCleanup[i + 1];
              var target = typeof idxOrTargetGetter === 'function' ? idxOrTargetGetter(lView) : unwrapRNode(lView[idxOrTargetGetter]);
              var listener = lCleanup[lastLCleanupIndex = tCleanup[i + 2]];
              var useCaptureOrSubIdx = tCleanup[i + 3];

              if (typeof useCaptureOrSubIdx === 'boolean') {
                // native DOM listener registered with Renderer3
                target.removeEventListener(tCleanup[i], listener, useCaptureOrSubIdx);
              } else {
                if (useCaptureOrSubIdx >= 0) {
                  // unregister
                  lCleanup[lastLCleanupIndex = useCaptureOrSubIdx]();
                } else {
                  // Subscription
                  lCleanup[lastLCleanupIndex = -useCaptureOrSubIdx].unsubscribe();
                }
              }

              i += 2;
            } else {
              // This is a cleanup function that is grouped with the index of its context
              var context = lCleanup[lastLCleanupIndex = tCleanup[i + 1]];
              tCleanup[i].call(context);
            }
          }
        }

        if (lCleanup !== null) {
          for (var _i28 = lastLCleanupIndex + 1; _i28 < lCleanup.length; _i28++) {
            var instanceCleanupFn = lCleanup[_i28];
            ngDevMode && assertFunction(instanceCleanupFn, 'Expecting instance cleanup function.');
            instanceCleanupFn();
          }

          lView[CLEANUP] = null;
        }
      }
      /** Calls onDestroy hooks for this view */


      function executeOnDestroys(tView, lView) {
        var destroyHooks;

        if (tView != null && (destroyHooks = tView.destroyHooks) != null) {
          for (var i = 0; i < destroyHooks.length; i += 2) {
            var context = lView[destroyHooks[i]]; // Only call the destroy hook if the context has been requested.

            if (!(context instanceof NodeInjectorFactory)) {
              var toCall = destroyHooks[i + 1];

              if (Array.isArray(toCall)) {
                for (var j = 0; j < toCall.length; j += 2) {
                  toCall[j + 1].call(context[toCall[j]]);
                }
              } else {
                toCall.call(context);
              }
            }
          }
        }
      }
      /**
       * Returns a native element if a node can be inserted into the given parent.
       *
       * There are two reasons why we may not be able to insert a element immediately.
       * - Projection: When creating a child content element of a component, we have to skip the
       *   insertion because the content of a component will be projected.
       *   `<component><content>delayed due to projection</content></component>`
       * - Parent container is disconnected: This can happen when we are inserting a view into
       *   parent container, which itself is disconnected. For example the parent container is part
       *   of a View which has not be inserted or is made for projection but has not been inserted
       *   into destination.
       *
       * @param tView: Current `TView`.
       * @param tNode: `TNode` for which we wish to retrieve render parent.
       * @param lView: Current `LView`.
       */


      function getParentRElement(tView, tNode, lView) {
        return getClosestRElement(tView, tNode.parent, lView);
      }
      /**
       * Get closest `RElement` or `null` if it can't be found.
       *
       * If `TNode` is `TNodeType.Element` => return `RElement` at `LView[tNode.index]` location.
       * If `TNode` is `TNodeType.ElementContainer|IcuContain` => return the parent (recursively).
       * If `TNode` is `null` then return host `RElement`:
       *   - return `null` if projection
       *   - return `null` if parent container is disconnected (we have no parent.)
       *
       * @param tView: Current `TView`.
       * @param tNode: `TNode` for which we wish to retrieve `RElement` (or `null` if host element is
       *     needed).
       * @param lView: Current `LView`.
       * @returns `null` if the `RElement` can't be determined at this time (no parent / projection)
       */


      function getClosestRElement(tView, tNode, lView) {
        var parentTNode = tNode; // Skip over element and ICU containers as those are represented by a comment node and
        // can't be used as a render parent.

        while (parentTNode !== null && parentTNode.type & (8
        /* ElementContainer */
        | 32
        /* Icu */
        )) {
          tNode = parentTNode;
          parentTNode = tNode.parent;
        } // If the parent tNode is null, then we are inserting across views: either into an embedded view
        // or a component view.


        if (parentTNode === null) {
          // We are inserting a root element of the component view into the component host element and
          // it should always be eager.
          return lView[HOST];
        } else {
          ngDevMode && assertTNodeType(parentTNode, 3
          /* AnyRNode */
          | 4
          /* Container */
          );

          if (parentTNode.flags & 2
          /* isComponentHost */
          ) {
              ngDevMode && assertTNodeForLView(parentTNode, lView);
              var encapsulation = tView.data[parentTNode.directiveStart].encapsulation; // We've got a parent which is an element in the current view. We just need to verify if the
              // parent element is not a component. Component's content nodes are not inserted immediately
              // because they will be projected, and so doing insert at this point would be wasteful.
              // Since the projection would then move it to its final destination. Note that we can't
              // make this assumption when using the Shadow DOM, because the native projection placeholders
              // (<content> or <slot>) have to be in place as elements are being inserted.

              if (encapsulation === ViewEncapsulation.None || encapsulation === ViewEncapsulation.Emulated) {
                return null;
              }
            }

          return getNativeByTNode(parentTNode, lView);
        }
      }
      /**
       * Inserts a native node before another native node for a given parent using {@link Renderer3}.
       * This is a utility function that can be used when native nodes were determined - it abstracts an
       * actual renderer being used.
       */


      function nativeInsertBefore(renderer, parent, child, beforeNode, isMove) {
        ngDevMode && ngDevMode.rendererInsertBefore++;

        if (isProceduralRenderer(renderer)) {
          renderer.insertBefore(parent, child, beforeNode, isMove);
        } else {
          parent.insertBefore(child, beforeNode, isMove);
        }
      }

      function nativeAppendChild(renderer, parent, child) {
        ngDevMode && ngDevMode.rendererAppendChild++;
        ngDevMode && assertDefined(parent, 'parent node must be defined');

        if (isProceduralRenderer(renderer)) {
          renderer.appendChild(parent, child);
        } else {
          parent.appendChild(child);
        }
      }

      function nativeAppendOrInsertBefore(renderer, parent, child, beforeNode, isMove) {
        if (beforeNode !== null) {
          nativeInsertBefore(renderer, parent, child, beforeNode, isMove);
        } else {
          nativeAppendChild(renderer, parent, child);
        }
      }
      /** Removes a node from the DOM given its native parent. */


      function nativeRemoveChild(renderer, parent, child, isHostElement) {
        if (isProceduralRenderer(renderer)) {
          renderer.removeChild(parent, child, isHostElement);
        } else {
          parent.removeChild(child);
        }
      }
      /**
       * Returns a native parent of a given native node.
       */


      function nativeParentNode(renderer, node) {
        return isProceduralRenderer(renderer) ? renderer.parentNode(node) : node.parentNode;
      }
      /**
       * Returns a native sibling of a given native node.
       */


      function nativeNextSibling(renderer, node) {
        return isProceduralRenderer(renderer) ? renderer.nextSibling(node) : node.nextSibling;
      }
      /**
       * Find a node in front of which `currentTNode` should be inserted.
       *
       * This method determines the `RNode` in front of which we should insert the `currentRNode`. This
       * takes `TNode.insertBeforeIndex` into account if i18n code has been invoked.
       *
       * @param parentTNode parent `TNode`
       * @param currentTNode current `TNode` (The node which we would like to insert into the DOM)
       * @param lView current `LView`
       */


      function getInsertInFrontOfRNode(parentTNode, currentTNode, lView) {
        return _getInsertInFrontOfRNodeWithI18n(parentTNode, currentTNode, lView);
      }
      /**
       * Find a node in front of which `currentTNode` should be inserted. (Does not take i18n into
       * account)
       *
       * This method determines the `RNode` in front of which we should insert the `currentRNode`. This
       * does not take `TNode.insertBeforeIndex` into account.
       *
       * @param parentTNode parent `TNode`
       * @param currentTNode current `TNode` (The node which we would like to insert into the DOM)
       * @param lView current `LView`
       */


      function getInsertInFrontOfRNodeWithNoI18n(parentTNode, currentTNode, lView) {
        if (parentTNode.type & (8
        /* ElementContainer */
        | 32
        /* Icu */
        )) {
          return getNativeByTNode(parentTNode, lView);
        }

        return null;
      }
      /**
       * Tree shakable boundary for `getInsertInFrontOfRNodeWithI18n` function.
       *
       * This function will only be set if i18n code runs.
       */


      var _getInsertInFrontOfRNodeWithI18n = getInsertInFrontOfRNodeWithNoI18n;
      /**
       * Tree shakable boundary for `processI18nInsertBefore` function.
       *
       * This function will only be set if i18n code runs.
       */

      var _processI18nInsertBefore;

      function setI18nHandling(getInsertInFrontOfRNodeWithI18n, processI18nInsertBefore) {
        _getInsertInFrontOfRNodeWithI18n = getInsertInFrontOfRNodeWithI18n;
        _processI18nInsertBefore = processI18nInsertBefore;
      }
      /**
       * Appends the `child` native node (or a collection of nodes) to the `parent`.
       *
       * @param tView The `TView' to be appended
       * @param lView The current LView
       * @param childRNode The native child (or children) that should be appended
       * @param childTNode The TNode of the child element
       */


      function appendChild(tView, lView, childRNode, childTNode) {
        var parentRNode = getParentRElement(tView, childTNode, lView);
        var renderer = lView[RENDERER];
        var parentTNode = childTNode.parent || lView[T_HOST];
        var anchorNode = getInsertInFrontOfRNode(parentTNode, childTNode, lView);

        if (parentRNode != null) {
          if (Array.isArray(childRNode)) {
            for (var i = 0; i < childRNode.length; i++) {
              nativeAppendOrInsertBefore(renderer, parentRNode, childRNode[i], anchorNode, false);
            }
          } else {
            nativeAppendOrInsertBefore(renderer, parentRNode, childRNode, anchorNode, false);
          }
        }

        _processI18nInsertBefore !== undefined && _processI18nInsertBefore(renderer, childTNode, lView, childRNode, parentRNode);
      }
      /**
       * Returns the first native node for a given LView, starting from the provided TNode.
       *
       * Native nodes are returned in the order in which those appear in the native tree (DOM).
       */


      function getFirstNativeNode(lView, tNode) {
        if (tNode !== null) {
          ngDevMode && assertTNodeType(tNode, 3
          /* AnyRNode */
          | 12
          /* AnyContainer */
          | 32
          /* Icu */
          | 16
          /* Projection */
          );
          var tNodeType = tNode.type;

          if (tNodeType & 3
          /* AnyRNode */
          ) {
              return getNativeByTNode(tNode, lView);
            } else if (tNodeType & 4
          /* Container */
          ) {
              return getBeforeNodeForView(-1, lView[tNode.index]);
            } else if (tNodeType & 8
          /* ElementContainer */
          ) {
              var elIcuContainerChild = tNode.child;

              if (elIcuContainerChild !== null) {
                return getFirstNativeNode(lView, elIcuContainerChild);
              } else {
                var rNodeOrLContainer = lView[tNode.index];

                if (isLContainer(rNodeOrLContainer)) {
                  return getBeforeNodeForView(-1, rNodeOrLContainer);
                } else {
                  return unwrapRNode(rNodeOrLContainer);
                }
              }
            } else if (tNodeType & 32
          /* Icu */
          ) {
              var nextRNode = icuContainerIterate(tNode, lView);
              var rNode = nextRNode(); // If the ICU container has no nodes, than we use the ICU anchor as the node.

              return rNode || unwrapRNode(lView[tNode.index]);
            } else {
            var projectionNodes = getProjectionNodes(lView, tNode);

            if (projectionNodes !== null) {
              if (Array.isArray(projectionNodes)) {
                return projectionNodes[0];
              }

              var parentView = getLViewParent(lView[DECLARATION_COMPONENT_VIEW]);
              ngDevMode && assertParentView(parentView);
              return getFirstNativeNode(parentView, projectionNodes);
            } else {
              return getFirstNativeNode(lView, tNode.next);
            }
          }
        }

        return null;
      }

      function getProjectionNodes(lView, tNode) {
        if (tNode !== null) {
          var componentView = lView[DECLARATION_COMPONENT_VIEW];
          var componentHost = componentView[T_HOST];
          var slotIdx = tNode.projection;
          ngDevMode && assertProjectionSlots(lView);
          return componentHost.projection[slotIdx];
        }

        return null;
      }

      function getBeforeNodeForView(viewIndexInContainer, lContainer) {
        var nextViewIndex = CONTAINER_HEADER_OFFSET + viewIndexInContainer + 1;

        if (nextViewIndex < lContainer.length) {
          var lView = lContainer[nextViewIndex];
          var firstTNodeOfView = lView[TVIEW].firstChild;

          if (firstTNodeOfView !== null) {
            return getFirstNativeNode(lView, firstTNodeOfView);
          }
        }

        return lContainer[NATIVE];
      }
      /**
       * Removes a native node itself using a given renderer. To remove the node we are looking up its
       * parent from the native tree as not all platforms / browsers support the equivalent of
       * node.remove().
       *
       * @param renderer A renderer to be used
       * @param rNode The native node that should be removed
       * @param isHostElement A flag indicating if a node to be removed is a host of a component.
       */


      function nativeRemoveNode(renderer, rNode, isHostElement) {
        ngDevMode && ngDevMode.rendererRemoveNode++;
        var nativeParent = nativeParentNode(renderer, rNode);

        if (nativeParent) {
          nativeRemoveChild(renderer, nativeParent, rNode, isHostElement);
        }
      }
      /**
       * Performs the operation of `action` on the node. Typically this involves inserting or removing
       * nodes on the LView or projection boundary.
       */


      function applyNodes(renderer, action, tNode, lView, parentRElement, beforeNode, isProjection) {
        while (tNode != null) {
          ngDevMode && assertTNodeForLView(tNode, lView);
          ngDevMode && assertTNodeType(tNode, 3
          /* AnyRNode */
          | 12
          /* AnyContainer */
          | 16
          /* Projection */
          | 32
          /* Icu */
          );
          var rawSlotValue = lView[tNode.index];
          var tNodeType = tNode.type;

          if (isProjection) {
            if (action === 0
            /* Create */
            ) {
                rawSlotValue && attachPatchData(unwrapRNode(rawSlotValue), lView);
                tNode.flags |= 4
                /* isProjected */
                ;
              }
          }

          if ((tNode.flags & 64
          /* isDetached */
          ) !== 64
          /* isDetached */
          ) {
              if (tNodeType & 8
              /* ElementContainer */
              ) {
                  applyNodes(renderer, action, tNode.child, lView, parentRElement, beforeNode, false);
                  applyToElementOrContainer(action, renderer, parentRElement, rawSlotValue, beforeNode);
                } else if (tNodeType & 32
              /* Icu */
              ) {
                  var nextRNode = icuContainerIterate(tNode, lView);
                  var rNode = void 0;

                  while (rNode = nextRNode()) {
                    applyToElementOrContainer(action, renderer, parentRElement, rNode, beforeNode);
                  }

                  applyToElementOrContainer(action, renderer, parentRElement, rawSlotValue, beforeNode);
                } else if (tNodeType & 16
              /* Projection */
              ) {
                  applyProjectionRecursive(renderer, action, lView, tNode, parentRElement, beforeNode);
                } else {
                ngDevMode && assertTNodeType(tNode, 3
                /* AnyRNode */
                | 4
                /* Container */
                );
                applyToElementOrContainer(action, renderer, parentRElement, rawSlotValue, beforeNode);
              }
            }

          tNode = isProjection ? tNode.projectionNext : tNode.next;
        }
      }

      function applyView(tView, lView, renderer, action, parentRElement, beforeNode) {
        applyNodes(renderer, action, tView.firstChild, lView, parentRElement, beforeNode, false);
      }
      /**
       * `applyProjection` performs operation on the projection.
       *
       * Inserting a projection requires us to locate the projected nodes from the parent component. The
       * complication is that those nodes themselves could be re-projected from their parent component.
       *
       * @param tView The `TView` of `LView` which needs to be inserted, detached, destroyed
       * @param lView The `LView` which needs to be inserted, detached, destroyed.
       * @param tProjectionNode node to project
       */


      function applyProjection(tView, lView, tProjectionNode) {
        var renderer = lView[RENDERER];
        var parentRNode = getParentRElement(tView, tProjectionNode, lView);
        var parentTNode = tProjectionNode.parent || lView[T_HOST];
        var beforeNode = getInsertInFrontOfRNode(parentTNode, tProjectionNode, lView);
        applyProjectionRecursive(renderer, 0
        /* Create */
        , lView, tProjectionNode, parentRNode, beforeNode);
      }
      /**
       * `applyProjectionRecursive` performs operation on the projection specified by `action` (insert,
       * detach, destroy)
       *
       * Inserting a projection requires us to locate the projected nodes from the parent component. The
       * complication is that those nodes themselves could be re-projected from their parent component.
       *
       * @param renderer Render to use
       * @param action action to perform (insert, detach, destroy)
       * @param lView The LView which needs to be inserted, detached, destroyed.
       * @param tProjectionNode node to project
       * @param parentRElement parent DOM element for insertion/removal.
       * @param beforeNode Before which node the insertions should happen.
       */


      function applyProjectionRecursive(renderer, action, lView, tProjectionNode, parentRElement, beforeNode) {
        var componentLView = lView[DECLARATION_COMPONENT_VIEW];
        var componentNode = componentLView[T_HOST];
        ngDevMode && assertEqual(typeof tProjectionNode.projection, 'number', 'expecting projection index');
        var nodeToProjectOrRNodes = componentNode.projection[tProjectionNode.projection];

        if (Array.isArray(nodeToProjectOrRNodes)) {
          // This should not exist, it is a bit of a hack. When we bootstrap a top level node and we
          // need to support passing projectable nodes, so we cheat and put them in the TNode
          // of the Host TView. (Yes we put instance info at the T Level). We can get away with it
          // because we know that that TView is not shared and therefore it will not be a problem.
          // This should be refactored and cleaned up.
          for (var i = 0; i < nodeToProjectOrRNodes.length; i++) {
            var rNode = nodeToProjectOrRNodes[i];
            applyToElementOrContainer(action, renderer, parentRElement, rNode, beforeNode);
          }
        } else {
          var nodeToProject = nodeToProjectOrRNodes;
          var projectedComponentLView = componentLView[PARENT];
          applyNodes(renderer, action, nodeToProject, projectedComponentLView, parentRElement, beforeNode, true);
        }
      }
      /**
       * `applyContainer` performs an operation on the container and its views as specified by
       * `action` (insert, detach, destroy)
       *
       * Inserting a Container is complicated by the fact that the container may have Views which
       * themselves have containers or projections.
       *
       * @param renderer Renderer to use
       * @param action action to perform (insert, detach, destroy)
       * @param lContainer The LContainer which needs to be inserted, detached, destroyed.
       * @param parentRElement parent DOM element for insertion/removal.
       * @param beforeNode Before which node the insertions should happen.
       */


      function applyContainer(renderer, action, lContainer, parentRElement, beforeNode) {
        ngDevMode && assertLContainer(lContainer);
        var anchor = lContainer[NATIVE]; // LContainer has its own before node.

        var _native5 = unwrapRNode(lContainer); // An LContainer can be created dynamically on any node by injecting ViewContainerRef.
        // Asking for a ViewContainerRef on an element will result in a creation of a separate anchor
        // node (comment in the DOM) that will be different from the LContainer's host node. In this
        // particular case we need to execute action on 2 nodes:
        // - container's host node (this is done in the executeActionOnElementOrContainer)
        // - container's host node (this is done here)


        if (anchor !== _native5) {
          // This is very strange to me (Misko). I would expect that the native is same as anchor. I
          // don't see a reason why they should be different, but they are.
          //
          // If they are we need to process the second anchor as well.
          applyToElementOrContainer(action, renderer, parentRElement, anchor, beforeNode);
        }

        for (var i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
          var lView = lContainer[i];
          applyView(lView[TVIEW], lView, renderer, action, parentRElement, anchor);
        }
      }
      /**
       * Writes class/style to element.
       *
       * @param renderer Renderer to use.
       * @param isClassBased `true` if it should be written to `class` (`false` to write to `style`)
       * @param rNode The Node to write to.
       * @param prop Property to write to. This would be the class/style name.
       * @param value Value to write. If `null`/`undefined`/`false` this is considered a remove (set/add
       *        otherwise).
       */


      function applyStyling(renderer, isClassBased, rNode, prop, value) {
        var isProcedural = isProceduralRenderer(renderer);

        if (isClassBased) {
          // We actually want JS true/false here because any truthy value should add the class
          if (!value) {
            ngDevMode && ngDevMode.rendererRemoveClass++;

            if (isProcedural) {
              renderer.removeClass(rNode, prop);
            } else {
              rNode.classList.remove(prop);
            }
          } else {
            ngDevMode && ngDevMode.rendererAddClass++;

            if (isProcedural) {
              renderer.addClass(rNode, prop);
            } else {
              ngDevMode && assertDefined(rNode.classList, 'HTMLElement expected');
              rNode.classList.add(prop);
            }
          }
        } else {
          var flags = prop.indexOf('-') === -1 ? undefined : RendererStyleFlags2.DashCase;

          if (value == null
          /** || value === undefined */
          ) {
              ngDevMode && ngDevMode.rendererRemoveStyle++;

              if (isProcedural) {
                renderer.removeStyle(rNode, prop, flags);
              } else {
                rNode.style.removeProperty(prop);
              }
            } else {
            // A value is important if it ends with `!important`. The style
            // parser strips any semicolons at the end of the value.
            var isImportant = typeof value === 'string' ? value.endsWith('!important') : false;

            if (isImportant) {
              // !important has to be stripped from the value for it to be valid.
              value = value.slice(0, -10);
              flags |= RendererStyleFlags2.Important;
            }

            ngDevMode && ngDevMode.rendererSetStyle++;

            if (isProcedural) {
              renderer.setStyle(rNode, prop, value, flags);
            } else {
              ngDevMode && assertDefined(rNode.style, 'HTMLElement expected');
              rNode.style.setProperty(prop, value, isImportant ? 'important' : '');
            }
          }
        }
      }
      /**
       * Write `cssText` to `RElement`.
       *
       * This function does direct write without any reconciliation. Used for writing initial values, so
       * that static styling values do not pull in the style parser.
       *
       * @param renderer Renderer to use
       * @param element The element which needs to be updated.
       * @param newValue The new class list to write.
       */


      function writeDirectStyle(renderer, element, newValue) {
        ngDevMode && assertString(newValue, '\'newValue\' should be a string');

        if (isProceduralRenderer(renderer)) {
          renderer.setAttribute(element, 'style', newValue);
        } else {
          element.style.cssText = newValue;
        }

        ngDevMode && ngDevMode.rendererSetStyle++;
      }
      /**
       * Write `className` to `RElement`.
       *
       * This function does direct write without any reconciliation. Used for writing initial values, so
       * that static styling values do not pull in the style parser.
       *
       * @param renderer Renderer to use
       * @param element The element which needs to be updated.
       * @param newValue The new class list to write.
       */


      function writeDirectClass(renderer, element, newValue) {
        ngDevMode && assertString(newValue, '\'newValue\' should be a string');

        if (isProceduralRenderer(renderer)) {
          if (newValue === '') {
            // There are tests in `google3` which expect `element.getAttribute('class')` to be `null`.
            renderer.removeAttribute(element, 'class');
          } else {
            renderer.setAttribute(element, 'class', newValue);
          }
        } else {
          element.className = newValue;
        }

        ngDevMode && ngDevMode.rendererSetClassName++;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Returns an index of `classToSearch` in `className` taking token boundaries into account.
       *
       * `classIndexOf('AB A', 'A', 0)` will be 3 (not 0 since `AB!==A`)
       *
       * @param className A string containing classes (whitespace separated)
       * @param classToSearch A class name to locate
       * @param startingIndex Starting location of search
       * @returns an index of the located class (or -1 if not found)
       */


      function classIndexOf(className, classToSearch, startingIndex) {
        ngDevMode && assertNotEqual(classToSearch, '', 'can not look for "" string.');
        var end = className.length;

        while (true) {
          var foundIndex = className.indexOf(classToSearch, startingIndex);
          if (foundIndex === -1) return foundIndex;

          if (foundIndex === 0 || className.charCodeAt(foundIndex - 1) <= 32
          /* SPACE */
          ) {
              // Ensure that it has leading whitespace
              var length = classToSearch.length;

              if (foundIndex + length === end || className.charCodeAt(foundIndex + length) <= 32
              /* SPACE */
              ) {
                  // Ensure that it has trailing whitespace
                  return foundIndex;
                }
            } // False positive, keep searching from where we left off.


          startingIndex = foundIndex + 1;
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var unusedValueToPlacateAjd$1 = unusedValueExportToPlacateAjd$4 + unusedValueExportToPlacateAjd$5;
      var NG_TEMPLATE_SELECTOR = 'ng-template';
      /**
       * Search the `TAttributes` to see if it contains `cssClassToMatch` (case insensitive)
       *
       * @param attrs `TAttributes` to search through.
       * @param cssClassToMatch class to match (lowercase)
       * @param isProjectionMode Whether or not class matching should look into the attribute `class` in
       *    addition to the `AttributeMarker.Classes`.
       */

      function isCssClassMatching(attrs, cssClassToMatch, isProjectionMode) {
        // TODO(misko): The fact that this function needs to know about `isProjectionMode` seems suspect.
        // It is strange to me that sometimes the class information comes in form of `class` attribute
        // and sometimes in form of `AttributeMarker.Classes`. Some investigation is needed to determine
        // if that is the right behavior.
        ngDevMode && assertEqual(cssClassToMatch, cssClassToMatch.toLowerCase(), 'Class name expected to be lowercase.');
        var i = 0;

        while (i < attrs.length) {
          var item = attrs[i++];

          if (isProjectionMode && item === 'class') {
            item = attrs[i];

            if (classIndexOf(item.toLowerCase(), cssClassToMatch, 0) !== -1) {
              return true;
            }
          } else if (item === 1
          /* Classes */
          ) {
              // We found the classes section. Start searching for the class.
              while (i < attrs.length && typeof (item = attrs[i++]) == 'string') {
                // while we have strings
                if (item.toLowerCase() === cssClassToMatch) return true;
              }

              return false;
            }
        }

        return false;
      }
      /**
       * Checks whether the `tNode` represents an inline template (e.g. `*ngFor`).
       *
       * @param tNode current TNode
       */


      function isInlineTemplate(tNode) {
        return tNode.type === 4
        /* Container */
        && tNode.value !== NG_TEMPLATE_SELECTOR;
      }
      /**
       * Function that checks whether a given tNode matches tag-based selector and has a valid type.
       *
       * Matching can be performed in 2 modes: projection mode (when we project nodes) and regular
       * directive matching mode:
       * - in the "directive matching" mode we do _not_ take TContainer's tagName into account if it is
       * different from NG_TEMPLATE_SELECTOR (value different from NG_TEMPLATE_SELECTOR indicates that a
       * tag name was extracted from * syntax so we would match the same directive twice);
       * - in the "projection" mode, we use a tag name potentially extracted from the * syntax processing
       * (applicable to TNodeType.Container only).
       */


      function hasTagAndTypeMatch(tNode, currentSelector, isProjectionMode) {
        var tagNameToCompare = tNode.type === 4
        /* Container */
        && !isProjectionMode ? NG_TEMPLATE_SELECTOR : tNode.value;
        return currentSelector === tagNameToCompare;
      }
      /**
       * A utility function to match an Ivy node static data against a simple CSS selector
       *
       * @param node static data of the node to match
       * @param selector The selector to try matching against the node.
       * @param isProjectionMode if `true` we are matching for content projection, otherwise we are doing
       * directive matching.
       * @returns true if node matches the selector.
       */


      function isNodeMatchingSelector(tNode, selector, isProjectionMode) {
        ngDevMode && assertDefined(selector[0], 'Selector should have a tag name');
        var mode = 4
        /* ELEMENT */
        ;
        var nodeAttrs = tNode.attrs || []; // Find the index of first attribute that has no value, only a name.

        var nameOnlyMarkerIdx = getNameOnlyMarkerIndex(nodeAttrs); // When processing ":not" selectors, we skip to the next ":not" if the
        // current one doesn't match

        var skipToNextSelector = false;

        for (var i = 0; i < selector.length; i++) {
          var current = selector[i];

          if (typeof current === 'number') {
            // If we finish processing a :not selector and it hasn't failed, return false
            if (!skipToNextSelector && !isPositive(mode) && !isPositive(current)) {
              return false;
            } // If we are skipping to the next :not() and this mode flag is positive,
            // it's a part of the current :not() selector, and we should keep skipping


            if (skipToNextSelector && isPositive(current)) continue;
            skipToNextSelector = false;
            mode = current | mode & 1
            /* NOT */
            ;
            continue;
          }

          if (skipToNextSelector) continue;

          if (mode & 4
          /* ELEMENT */
          ) {
              mode = 2
              /* ATTRIBUTE */
              | mode & 1
              /* NOT */
              ;

              if (current !== '' && !hasTagAndTypeMatch(tNode, current, isProjectionMode) || current === '' && selector.length === 1) {
                if (isPositive(mode)) return false;
                skipToNextSelector = true;
              }
            } else {
            var selectorAttrValue = mode & 8
            /* CLASS */
            ? current : selector[++i]; // special case for matching against classes when a tNode has been instantiated with
            // class and style values as separate attribute values (e.g. ['title', CLASS, 'foo'])

            if (mode & 8
            /* CLASS */
            && tNode.attrs !== null) {
              if (!isCssClassMatching(tNode.attrs, selectorAttrValue, isProjectionMode)) {
                if (isPositive(mode)) return false;
                skipToNextSelector = true;
              }

              continue;
            }

            var attrName = mode & 8
            /* CLASS */
            ? 'class' : current;
            var attrIndexInNode = findAttrIndexInNode(attrName, nodeAttrs, isInlineTemplate(tNode), isProjectionMode);

            if (attrIndexInNode === -1) {
              if (isPositive(mode)) return false;
              skipToNextSelector = true;
              continue;
            }

            if (selectorAttrValue !== '') {
              var nodeAttrValue = void 0;

              if (attrIndexInNode > nameOnlyMarkerIdx) {
                nodeAttrValue = '';
              } else {
                ngDevMode && assertNotEqual(nodeAttrs[attrIndexInNode], 0
                /* NamespaceURI */
                , 'We do not match directives on namespaced attributes'); // we lowercase the attribute value to be able to match
                // selectors without case-sensitivity
                // (selectors are already in lowercase when generated)

                nodeAttrValue = nodeAttrs[attrIndexInNode + 1].toLowerCase();
              }

              var compareAgainstClassName = mode & 8
              /* CLASS */
              ? nodeAttrValue : null;

              if (compareAgainstClassName && classIndexOf(compareAgainstClassName, selectorAttrValue, 0) !== -1 || mode & 2
              /* ATTRIBUTE */
              && selectorAttrValue !== nodeAttrValue) {
                if (isPositive(mode)) return false;
                skipToNextSelector = true;
              }
            }
          }
        }

        return isPositive(mode) || skipToNextSelector;
      }

      function isPositive(mode) {
        return (mode & 1
        /* NOT */
        ) === 0;
      }
      /**
       * Examines the attribute's definition array for a node to find the index of the
       * attribute that matches the given `name`.
       *
       * NOTE: This will not match namespaced attributes.
       *
       * Attribute matching depends upon `isInlineTemplate` and `isProjectionMode`.
       * The following table summarizes which types of attributes we attempt to match:
       *
       * ===========================================================================================================
       * Modes                   | Normal Attributes | Bindings Attributes | Template Attributes | I18n
       * Attributes
       * ===========================================================================================================
       * Inline + Projection     | YES               | YES                 | NO                  | YES
       * -----------------------------------------------------------------------------------------------------------
       * Inline + Directive      | NO                | NO                  | YES                 | NO
       * -----------------------------------------------------------------------------------------------------------
       * Non-inline + Projection | YES               | YES                 | NO                  | YES
       * -----------------------------------------------------------------------------------------------------------
       * Non-inline + Directive  | YES               | YES                 | NO                  | YES
       * ===========================================================================================================
       *
       * @param name the name of the attribute to find
       * @param attrs the attribute array to examine
       * @param isInlineTemplate true if the node being matched is an inline template (e.g. `*ngFor`)
       * rather than a manually expanded template node (e.g `<ng-template>`).
       * @param isProjectionMode true if we are matching against content projection otherwise we are
       * matching against directives.
       */


      function findAttrIndexInNode(name, attrs, isInlineTemplate, isProjectionMode) {
        if (attrs === null) return -1;
        var i = 0;

        if (isProjectionMode || !isInlineTemplate) {
          var bindingsMode = false;

          while (i < attrs.length) {
            var maybeAttrName = attrs[i];

            if (maybeAttrName === name) {
              return i;
            } else if (maybeAttrName === 3
            /* Bindings */
            || maybeAttrName === 6
            /* I18n */
            ) {
                bindingsMode = true;
              } else if (maybeAttrName === 1
            /* Classes */
            || maybeAttrName === 2
            /* Styles */
            ) {
                var value = attrs[++i]; // We should skip classes here because we have a separate mechanism for
                // matching classes in projection mode.

                while (typeof value === 'string') {
                  value = attrs[++i];
                }

                continue;
              } else if (maybeAttrName === 4
            /* Template */
            ) {
                // We do not care about Template attributes in this scenario.
                break;
              } else if (maybeAttrName === 0
            /* NamespaceURI */
            ) {
                // Skip the whole namespaced attribute and value. This is by design.
                i += 4;
                continue;
              } // In binding mode there are only names, rather than name-value pairs.


            i += bindingsMode ? 1 : 2;
          } // We did not match the attribute


          return -1;
        } else {
          return matchTemplateAttribute(attrs, name);
        }
      }

      function isNodeMatchingSelectorList(tNode, selector) {
        var isProjectionMode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;

        for (var i = 0; i < selector.length; i++) {
          if (isNodeMatchingSelector(tNode, selector[i], isProjectionMode)) {
            return true;
          }
        }

        return false;
      }

      function getProjectAsAttrValue(tNode) {
        var nodeAttrs = tNode.attrs;

        if (nodeAttrs != null) {
          var ngProjectAsAttrIdx = nodeAttrs.indexOf(5
          /* ProjectAs */
          ); // only check for ngProjectAs in attribute names, don't accidentally match attribute's value
          // (attribute names are stored at even indexes)

          if ((ngProjectAsAttrIdx & 1) === 0) {
            return nodeAttrs[ngProjectAsAttrIdx + 1];
          }
        }

        return null;
      }

      function getNameOnlyMarkerIndex(nodeAttrs) {
        for (var i = 0; i < nodeAttrs.length; i++) {
          var nodeAttr = nodeAttrs[i];

          if (isNameOnlyAttributeMarker(nodeAttr)) {
            return i;
          }
        }

        return nodeAttrs.length;
      }

      function matchTemplateAttribute(attrs, name) {
        var i = attrs.indexOf(4
        /* Template */
        );

        if (i > -1) {
          i++;

          while (i < attrs.length) {
            var attr = attrs[i]; // Return in case we checked all template attrs and are switching to the next section in the
            // attrs array (that starts with a number that represents an attribute marker).

            if (typeof attr === 'number') return -1;
            if (attr === name) return i;
            i++;
          }
        }

        return -1;
      }
      /**
       * Checks whether a selector is inside a CssSelectorList
       * @param selector Selector to be checked.
       * @param list List in which to look for the selector.
       */


      function isSelectorInSelectorList(selector, list) {
        selectorListLoop: for (var i = 0; i < list.length; i++) {
          var currentSelectorInList = list[i];

          if (selector.length !== currentSelectorInList.length) {
            continue;
          }

          for (var j = 0; j < selector.length; j++) {
            if (selector[j] !== currentSelectorInList[j]) {
              continue selectorListLoop;
            }
          }

          return true;
        }

        return false;
      }

      function maybeWrapInNotSelector(isNegativeMode, chunk) {
        return isNegativeMode ? ':not(' + chunk.trim() + ')' : chunk;
      }

      function stringifyCSSSelector(selector) {
        var result = selector[0];
        var i = 1;
        var mode = 2
        /* ATTRIBUTE */
        ;
        var currentChunk = '';
        var isNegativeMode = false;

        while (i < selector.length) {
          var valueOrMarker = selector[i];

          if (typeof valueOrMarker === 'string') {
            if (mode & 2
            /* ATTRIBUTE */
            ) {
                var attrValue = selector[++i];
                currentChunk += '[' + valueOrMarker + (attrValue.length > 0 ? '="' + attrValue + '"' : '') + ']';
              } else if (mode & 8
            /* CLASS */
            ) {
                currentChunk += '.' + valueOrMarker;
              } else if (mode & 4
            /* ELEMENT */
            ) {
                currentChunk += ' ' + valueOrMarker;
              }
          } else {
            //
            // Append current chunk to the final result in case we come across SelectorFlag, which
            // indicates that the previous section of a selector is over. We need to accumulate content
            // between flags to make sure we wrap the chunk later in :not() selector if needed, e.g.
            // ```
            //  ['', Flags.CLASS, '.classA', Flags.CLASS | Flags.NOT, '.classB', '.classC']
            // ```
            // should be transformed to `.classA :not(.classB .classC)`.
            //
            // Note: for negative selector part, we accumulate content between flags until we find the
            // next negative flag. This is needed to support a case where `:not()` rule contains more than
            // one chunk, e.g. the following selector:
            // ```
            //  ['', Flags.ELEMENT | Flags.NOT, 'p', Flags.CLASS, 'foo', Flags.CLASS | Flags.NOT, 'bar']
            // ```
            // should be stringified to `:not(p.foo) :not(.bar)`
            //
            if (currentChunk !== '' && !isPositive(valueOrMarker)) {
              result += maybeWrapInNotSelector(isNegativeMode, currentChunk);
              currentChunk = '';
            }

            mode = valueOrMarker; // According to CssSelector spec, once we come across `SelectorFlags.NOT` flag, the negative
            // mode is maintained for remaining chunks of a selector.

            isNegativeMode = isNegativeMode || !isPositive(mode);
          }

          i++;
        }

        if (currentChunk !== '') {
          result += maybeWrapInNotSelector(isNegativeMode, currentChunk);
        }

        return result;
      }
      /**
       * Generates string representation of CSS selector in parsed form.
       *
       * ComponentDef and DirectiveDef are generated with the selector in parsed form to avoid doing
       * additional parsing at runtime (for example, for directive matching). However in some cases (for
       * example, while bootstrapping a component), a string version of the selector is required to query
       * for the host element on the page. This function takes the parsed form of a selector and returns
       * its string representation.
       *
       * @param selectorList selector in parsed form
       * @returns string representation of a given selector
       */


      function stringifyCSSSelectorList(selectorList) {
        return selectorList.map(stringifyCSSSelector).join(',');
      }
      /**
       * Extracts attributes and classes information from a given CSS selector.
       *
       * This function is used while creating a component dynamically. In this case, the host element
       * (that is created dynamically) should contain attributes and classes specified in component's CSS
       * selector.
       *
       * @param selector CSS selector in parsed form (in a form of array)
       * @returns object with `attrs` and `classes` fields that contain extracted information
       */


      function extractAttrsAndClassesFromSelector(selector) {
        var attrs = [];
        var classes = [];
        var i = 1;
        var mode = 2
        /* ATTRIBUTE */
        ;

        while (i < selector.length) {
          var valueOrMarker = selector[i];

          if (typeof valueOrMarker === 'string') {
            if (mode === 2
            /* ATTRIBUTE */
            ) {
                if (valueOrMarker !== '') {
                  attrs.push(valueOrMarker, selector[++i]);
                }
              } else if (mode === 8
            /* CLASS */
            ) {
                classes.push(valueOrMarker);
              }
          } else {
            // According to CssSelector spec, once we come across `SelectorFlags.NOT` flag, the negative
            // mode is maintained for remaining chunks of a selector. Since attributes and classes are
            // extracted only for "positive" part of the selector, we can stop here.
            if (!isPositive(mode)) break;
            mode = valueOrMarker;
          }

          i++;
        }

        return {
          attrs: attrs,
          classes: classes
        };
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** A special value which designates that a value has not changed. */


      var NO_CHANGE = typeof ngDevMode === 'undefined' || ngDevMode ? {
        __brand__: 'NO_CHANGE'
      } : {};
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Advances to an element for later binding instructions.
       *
       * Used in conjunction with instructions like {@link property} to act on elements with specified
       * indices, for example those created with {@link element} or {@link elementStart}.
       *
       * ```ts
       * (rf: RenderFlags, ctx: any) => {
       *   if (rf & 1) {
       *     text(0, 'Hello');
       *     text(1, 'Goodbye')
       *     element(2, 'div');
       *   }
       *   if (rf & 2) {
       *     advance(2); // Advance twice to the <div>.
       *     property('title', 'test');
       *   }
       *  }
       * ```
       * @param delta Number of elements to advance forwards by.
       *
       * @codeGenApi
       */

      function ɵɵadvance(delta) {
        ngDevMode && assertGreaterThan(delta, 0, 'Can only advance forward');
        selectIndexInternal(getTView(), getLView(), getSelectedIndex() + delta, isInCheckNoChangesMode());
      }

      function selectIndexInternal(tView, lView, index, checkNoChangesMode) {
        ngDevMode && assertIndexInDeclRange(lView, index); // Flush the initial hooks for elements in the view that have been added up to this point.
        // PERF WARNING: do NOT extract this to a separate function without running benchmarks

        if (!checkNoChangesMode) {
          var hooksInitPhaseCompleted = (lView[FLAGS] & 3
          /* InitPhaseStateMask */
          ) === 3
          /* InitPhaseCompleted */
          ;

          if (hooksInitPhaseCompleted) {
            var preOrderCheckHooks = tView.preOrderCheckHooks;

            if (preOrderCheckHooks !== null) {
              executeCheckHooks(lView, preOrderCheckHooks, index);
            }
          } else {
            var preOrderHooks = tView.preOrderHooks;

            if (preOrderHooks !== null) {
              executeInitAndCheckHooks(lView, preOrderHooks, 0
              /* OnInitHooksToBeRun */
              , index);
            }
          }
        } // We must set the selected index *after* running the hooks, because hooks may have side-effects
        // that cause other template functions to run, thus updating the selected index, which is global
        // state. If we run `setSelectedIndex` *before* we run the hooks, in some cases the selected index
        // will be altered by the time we leave the `ɵɵadvance` instruction.


        setSelectedIndex(index);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function toTStylingRange(prev, next) {
        ngDevMode && assertNumberInRange(prev, 0, 32767
        /* UNSIGNED_MASK */
        );
        ngDevMode && assertNumberInRange(next, 0, 32767
        /* UNSIGNED_MASK */
        );
        return prev << 17
        /* PREV_SHIFT */
        | next << 2
        /* NEXT_SHIFT */
        ;
      }

      function getTStylingRangePrev(tStylingRange) {
        ngDevMode && assertNumber(tStylingRange, 'expected number');
        return tStylingRange >> 17
        /* PREV_SHIFT */
        & 32767
        /* UNSIGNED_MASK */
        ;
      }

      function getTStylingRangePrevDuplicate(tStylingRange) {
        ngDevMode && assertNumber(tStylingRange, 'expected number');
        return (tStylingRange & 2
        /* PREV_DUPLICATE */
        ) == 2
        /* PREV_DUPLICATE */
        ;
      }

      function setTStylingRangePrev(tStylingRange, previous) {
        ngDevMode && assertNumber(tStylingRange, 'expected number');
        ngDevMode && assertNumberInRange(previous, 0, 32767
        /* UNSIGNED_MASK */
        );
        return tStylingRange & ~4294836224
        /* PREV_MASK */
        | previous << 17
        /* PREV_SHIFT */
        ;
      }

      function setTStylingRangePrevDuplicate(tStylingRange) {
        ngDevMode && assertNumber(tStylingRange, 'expected number');
        return tStylingRange | 2
        /* PREV_DUPLICATE */
        ;
      }

      function getTStylingRangeNext(tStylingRange) {
        ngDevMode && assertNumber(tStylingRange, 'expected number');
        return (tStylingRange & 131068
        /* NEXT_MASK */
        ) >> 2
        /* NEXT_SHIFT */
        ;
      }

      function setTStylingRangeNext(tStylingRange, next) {
        ngDevMode && assertNumber(tStylingRange, 'expected number');
        ngDevMode && assertNumberInRange(next, 0, 32767
        /* UNSIGNED_MASK */
        );
        return tStylingRange & ~131068
        /* NEXT_MASK */
        | //
        next << 2
        /* NEXT_SHIFT */
        ;
      }

      function getTStylingRangeNextDuplicate(tStylingRange) {
        ngDevMode && assertNumber(tStylingRange, 'expected number');
        return (tStylingRange & 1
        /* NEXT_DUPLICATE */
        ) === 1
        /* NEXT_DUPLICATE */
        ;
      }

      function setTStylingRangeNextDuplicate(tStylingRange) {
        ngDevMode && assertNumber(tStylingRange, 'expected number');
        return tStylingRange | 1
        /* NEXT_DUPLICATE */
        ;
      }

      function getTStylingRangeTail(tStylingRange) {
        ngDevMode && assertNumber(tStylingRange, 'expected number');
        var next = getTStylingRangeNext(tStylingRange);
        return next === 0 ? getTStylingRangePrev(tStylingRange) : next;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Patch a `debug` property on top of the existing object.
       *
       * NOTE: always call this method with `ngDevMode && attachDebugObject(...)`
       *
       * @param obj Object to patch
       * @param debug Value to patch
       */


      function attachDebugObject(obj, debug) {
        if (ngDevMode) {
          Object.defineProperty(obj, 'debug', {
            value: debug,
            enumerable: false
          });
        } else {
          throw new Error('This method should be guarded with `ngDevMode` so that it can be tree shaken in production!');
        }
      }
      /**
       * Patch a `debug` property getter on top of the existing object.
       *
       * NOTE: always call this method with `ngDevMode && attachDebugObject(...)`
       *
       * @param obj Object to patch
       * @param debugGetter Getter returning a value to patch
       */


      function attachDebugGetter(obj, debugGetter) {
        if (ngDevMode) {
          Object.defineProperty(obj, 'debug', {
            get: debugGetter,
            enumerable: false
          });
        } else {
          throw new Error('This method should be guarded with `ngDevMode` so that it can be tree shaken in production!');
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var NG_DEV_MODE = (typeof ngDevMode === 'undefined' || !!ngDevMode) && initNgDevMode();
      /*
       * This file contains conditionally attached classes which provide human readable (debug) level
       * information for `LView`, `LContainer` and other internal data structures. These data structures
       * are stored internally as array which makes it very difficult during debugging to reason about the
       * current state of the system.
       *
       * Patching the array with extra property does change the array's hidden class' but it does not
       * change the cost of access, therefore this patching should not have significant if any impact in
       * `ngDevMode` mode. (see: https://jsperf.com/array-vs-monkey-patch-array)
       *
       * So instead of seeing:
       * ```
       * Array(30) [Object, 659, null, …]
       * ```
       *
       * You get to see:
       * ```
       * LViewDebug {
       *   views: [...],
       *   flags: {attached: true, ...}
       *   nodes: [
       *     {html: '<div id="123">', ..., nodes: [
       *       {html: '<span>', ..., nodes: null}
       *     ]}
       *   ]
       * }
       * ```
       */

      var LVIEW_COMPONENT_CACHE;
      var LVIEW_EMBEDDED_CACHE;
      var LVIEW_ROOT;
      /**
       * This function clones a blueprint and creates LView.
       *
       * Simple slice will keep the same type, and we need it to be LView
       */

      function cloneToLViewFromTViewBlueprint(tView) {
        var debugTView = tView;
        var lView = getLViewToClone(debugTView.type, tView.template && tView.template.name);
        return lView.concat(tView.blueprint);
      }

      function getLViewToClone(type, name) {
        switch (type) {
          case 0
          /* Root */
          :
            if (LVIEW_ROOT === undefined) LVIEW_ROOT = new (createNamedArrayType('LRootView'))();
            return LVIEW_ROOT;

          case 1
          /* Component */
          :
            if (LVIEW_COMPONENT_CACHE === undefined) LVIEW_COMPONENT_CACHE = new Map();
            var componentArray = LVIEW_COMPONENT_CACHE.get(name);

            if (componentArray === undefined) {
              componentArray = new (createNamedArrayType('LComponentView' + nameSuffix(name)))();
              LVIEW_COMPONENT_CACHE.set(name, componentArray);
            }

            return componentArray;

          case 2
          /* Embedded */
          :
            if (LVIEW_EMBEDDED_CACHE === undefined) LVIEW_EMBEDDED_CACHE = new Map();
            var embeddedArray = LVIEW_EMBEDDED_CACHE.get(name);

            if (embeddedArray === undefined) {
              embeddedArray = new (createNamedArrayType('LEmbeddedView' + nameSuffix(name)))();
              LVIEW_EMBEDDED_CACHE.set(name, embeddedArray);
            }

            return embeddedArray;
        }

        throw new Error('unreachable code');
      }

      function nameSuffix(text) {
        if (text == null) return '';
        var index = text.lastIndexOf('_Template');
        return '_' + (index === -1 ? text : text.substr(0, index));
      }
      /**
       * This class is a debug version of Object literal so that we can have constructor name show up
       * in
       * debug tools in ngDevMode.
       */


      var TViewConstructor = /*#__PURE__*/function () {
        function TView(type, blueprint, template, queries, viewQuery, declTNode, data, bindingStartIndex, expandoStartIndex, hostBindingOpCodes, firstCreatePass, firstUpdatePass, staticViewQueries, staticContentQueries, preOrderHooks, preOrderCheckHooks, contentHooks, contentCheckHooks, viewHooks, viewCheckHooks, destroyHooks, cleanup, contentQueries, components, directiveRegistry, pipeRegistry, firstChild, schemas, consts, incompleteFirstPass, _decls, _vars) {
          _classCallCheck2(this, TView);

          this.type = type;
          this.blueprint = blueprint;
          this.template = template;
          this.queries = queries;
          this.viewQuery = viewQuery;
          this.declTNode = declTNode;
          this.data = data;
          this.bindingStartIndex = bindingStartIndex;
          this.expandoStartIndex = expandoStartIndex;
          this.hostBindingOpCodes = hostBindingOpCodes;
          this.firstCreatePass = firstCreatePass;
          this.firstUpdatePass = firstUpdatePass;
          this.staticViewQueries = staticViewQueries;
          this.staticContentQueries = staticContentQueries;
          this.preOrderHooks = preOrderHooks;
          this.preOrderCheckHooks = preOrderCheckHooks;
          this.contentHooks = contentHooks;
          this.contentCheckHooks = contentCheckHooks;
          this.viewHooks = viewHooks;
          this.viewCheckHooks = viewCheckHooks;
          this.destroyHooks = destroyHooks;
          this.cleanup = cleanup;
          this.contentQueries = contentQueries;
          this.components = components;
          this.directiveRegistry = directiveRegistry;
          this.pipeRegistry = pipeRegistry;
          this.firstChild = firstChild;
          this.schemas = schemas;
          this.consts = consts;
          this.incompleteFirstPass = incompleteFirstPass;
          this._decls = _decls;
          this._vars = _vars;
        }

        _createClass2(TView, [{
          key: "template_",
          get: function get() {
            var buf = [];
            processTNodeChildren(this.firstChild, buf);
            return buf.join('');
          }
        }, {
          key: "type_",
          get: function get() {
            return TViewTypeAsString[this.type] || "TViewType.?".concat(this.type, "?");
          }
        }]);

        return TView;
      }();

      var TNode = /*#__PURE__*/function () {
        function TNode(tView_, //
        type, //
        index, //
        insertBeforeIndex, //
        injectorIndex, //
        directiveStart, //
        directiveEnd, //
        directiveStylingLast, //
        propertyBindings, //
        flags, //
        providerIndexes, //
        value, //
        attrs, //
        mergedAttrs, //
        localNames, //
        initialInputs, //
        inputs, //
        outputs, //
        tViews, //
        next, //
        projectionNext, //
        child, //
        parent, //
        projection, //
        styles, //
        stylesWithoutHost, //
        residualStyles, //
        classes, //
        classesWithoutHost, //
        residualClasses, //
        classBindings, //
        styleBindings) {
          _classCallCheck2(this, TNode);

          this.tView_ = tView_;
          this.type = type;
          this.index = index;
          this.insertBeforeIndex = insertBeforeIndex;
          this.injectorIndex = injectorIndex;
          this.directiveStart = directiveStart;
          this.directiveEnd = directiveEnd;
          this.directiveStylingLast = directiveStylingLast;
          this.propertyBindings = propertyBindings;
          this.flags = flags;
          this.providerIndexes = providerIndexes;
          this.value = value;
          this.attrs = attrs;
          this.mergedAttrs = mergedAttrs;
          this.localNames = localNames;
          this.initialInputs = initialInputs;
          this.inputs = inputs;
          this.outputs = outputs;
          this.tViews = tViews;
          this.next = next;
          this.projectionNext = projectionNext;
          this.child = child;
          this.parent = parent;
          this.projection = projection;
          this.styles = styles;
          this.stylesWithoutHost = stylesWithoutHost;
          this.residualStyles = residualStyles;
          this.classes = classes;
          this.classesWithoutHost = classesWithoutHost;
          this.residualClasses = residualClasses;
          this.classBindings = classBindings;
          this.styleBindings = styleBindings;
        }
        /**
         * Return a human debug version of the set of `NodeInjector`s which will be consulted when
         * resolving tokens from this `TNode`.
         *
         * When debugging applications, it is often difficult to determine which `NodeInjector`s will be
         * consulted. This method shows a list of `DebugNode`s representing the `TNode`s which will be
         * consulted in order when resolving a token starting at this `TNode`.
         *
         * The original data is stored in `LView` and `TView` with a lot of offset indexes, and so it is
         * difficult to reason about.
         *
         * @param lView The `LView` instance for this `TNode`.
         */


        _createClass2(TNode, [{
          key: "debugNodeInjectorPath",
          value: function debugNodeInjectorPath(lView) {
            var path = [];
            var injectorIndex = getInjectorIndex(this, lView);

            if (injectorIndex === -1) {
              // Looks like the current `TNode` does not have `NodeInjector` associated with it => look for
              // parent NodeInjector.
              var parentLocation = getParentInjectorLocation(this, lView);

              if (parentLocation !== NO_PARENT_INJECTOR) {
                // We found a parent, so start searching from the parent location.
                injectorIndex = getParentInjectorIndex(parentLocation);
                lView = getParentInjectorView(parentLocation, lView);
              } else {// No parents have been found, so there are no `NodeInjector`s to consult.
              }
            }

            while (injectorIndex !== -1) {
              ngDevMode && assertNodeInjector(lView, injectorIndex);
              var tNode = lView[TVIEW].data[injectorIndex + 8
              /* TNODE */
              ];
              path.push(buildDebugNode(tNode, lView));
              var _parentLocation = lView[injectorIndex + 8
              /* PARENT */
              ];

              if (_parentLocation === NO_PARENT_INJECTOR) {
                injectorIndex = -1;
              } else {
                injectorIndex = getParentInjectorIndex(_parentLocation);
                lView = getParentInjectorView(_parentLocation, lView);
              }
            }

            return path;
          }
        }, {
          key: "type_",
          get: function get() {
            return toTNodeTypeAsString(this.type) || "TNodeType.?".concat(this.type, "?");
          }
        }, {
          key: "flags_",
          get: function get() {
            var flags = [];
            if (this.flags & 16
            /* hasClassInput */
            ) flags.push('TNodeFlags.hasClassInput');
            if (this.flags & 8
            /* hasContentQuery */
            ) flags.push('TNodeFlags.hasContentQuery');
            if (this.flags & 32
            /* hasStyleInput */
            ) flags.push('TNodeFlags.hasStyleInput');
            if (this.flags & 128
            /* hasHostBindings */
            ) flags.push('TNodeFlags.hasHostBindings');
            if (this.flags & 2
            /* isComponentHost */
            ) flags.push('TNodeFlags.isComponentHost');
            if (this.flags & 1
            /* isDirectiveHost */
            ) flags.push('TNodeFlags.isDirectiveHost');
            if (this.flags & 64
            /* isDetached */
            ) flags.push('TNodeFlags.isDetached');
            if (this.flags & 4
            /* isProjected */
            ) flags.push('TNodeFlags.isProjected');
            return flags.join('|');
          }
        }, {
          key: "template_",
          get: function get() {
            if (this.type & 1
            /* Text */
            ) return this.value;
            var buf = [];
            var tagName = typeof this.value === 'string' && this.value || this.type_;
            buf.push('<', tagName);

            if (this.flags) {
              buf.push(' ', this.flags_);
            }

            if (this.attrs) {
              for (var i = 0; i < this.attrs.length;) {
                var attrName = this.attrs[i++];

                if (typeof attrName == 'number') {
                  break;
                }

                var attrValue = this.attrs[i++];
                buf.push(' ', attrName, '="', attrValue, '"');
              }
            }

            buf.push('>');
            processTNodeChildren(this.child, buf);
            buf.push('</', tagName, '>');
            return buf.join('');
          }
        }, {
          key: "styleBindings_",
          get: function get() {
            return toDebugStyleBinding(this, false);
          }
        }, {
          key: "classBindings_",
          get: function get() {
            return toDebugStyleBinding(this, true);
          }
        }, {
          key: "providerIndexStart_",
          get: function get() {
            return this.providerIndexes & 1048575
            /* ProvidersStartIndexMask */
            ;
          }
        }, {
          key: "providerIndexEnd_",
          get: function get() {
            return this.providerIndexStart_ + (this.providerIndexes >>> 20
            /* CptViewProvidersCountShift */
            );
          }
        }]);

        return TNode;
      }();

      var TNodeDebug = TNode;

      function toDebugStyleBinding(tNode, isClassBased) {
        var tData = tNode.tView_.data;
        var bindings = [];
        var range = isClassBased ? tNode.classBindings : tNode.styleBindings;
        var prev = getTStylingRangePrev(range);
        var next = getTStylingRangeNext(range);
        var isTemplate = next !== 0;
        var cursor = isTemplate ? next : prev;

        while (cursor !== 0) {
          var itemKey = tData[cursor];
          var itemRange = tData[cursor + 1];
          bindings.unshift({
            key: itemKey,
            index: cursor,
            isTemplate: isTemplate,
            prevDuplicate: getTStylingRangePrevDuplicate(itemRange),
            nextDuplicate: getTStylingRangeNextDuplicate(itemRange),
            nextIndex: getTStylingRangeNext(itemRange),
            prevIndex: getTStylingRangePrev(itemRange)
          });
          if (cursor === prev) isTemplate = false;
          cursor = getTStylingRangePrev(itemRange);
        }

        bindings.push((isClassBased ? tNode.residualClasses : tNode.residualStyles) || null);
        return bindings;
      }

      function processTNodeChildren(tNode, buf) {
        while (tNode) {
          buf.push(tNode.template_);
          tNode = tNode.next;
        }
      }

      var TViewData = NG_DEV_MODE && createNamedArrayType('TViewData') || null;
      var TVIEWDATA_EMPTY; // can't initialize here or it will not be tree shaken, because
      // `LView` constructor could have side-effects.

      /**
       * This function clones a blueprint and creates TData.
       *
       * Simple slice will keep the same type, and we need it to be TData
       */

      function cloneToTViewData(list) {
        if (TVIEWDATA_EMPTY === undefined) TVIEWDATA_EMPTY = new TViewData();
        return TVIEWDATA_EMPTY.concat(list);
      }

      var LViewBlueprint = NG_DEV_MODE && createNamedArrayType('LViewBlueprint') || null;
      var MatchesArray = NG_DEV_MODE && createNamedArrayType('MatchesArray') || null;
      var TViewComponents = NG_DEV_MODE && createNamedArrayType('TViewComponents') || null;
      var TNodeLocalNames = NG_DEV_MODE && createNamedArrayType('TNodeLocalNames') || null;
      var TNodeInitialInputs = NG_DEV_MODE && createNamedArrayType('TNodeInitialInputs') || null;
      var TNodeInitialData = NG_DEV_MODE && createNamedArrayType('TNodeInitialData') || null;
      var LCleanup = NG_DEV_MODE && createNamedArrayType('LCleanup') || null;
      var TCleanup = NG_DEV_MODE && createNamedArrayType('TCleanup') || null;

      function attachLViewDebug(lView) {
        attachDebugObject(lView, new LViewDebug(lView));
      }

      function attachLContainerDebug(lContainer) {
        attachDebugObject(lContainer, new LContainerDebug(lContainer));
      }

      function toDebug(obj) {
        if (obj) {
          var debug = obj.debug;
          assertDefined(debug, 'Object does not have a debug representation.');
          return debug;
        } else {
          return obj;
        }
      }
      /**
       * Use this method to unwrap a native element in `LView` and convert it into HTML for easier
       * reading.
       *
       * @param value possibly wrapped native DOM node.
       * @param includeChildren If `true` then the serialized HTML form will include child elements
       * (same
       * as `outerHTML`). If `false` then the serialized HTML form will only contain the element
       * itself
       * (will not serialize child elements).
       */


      function toHtml(value) {
        var includeChildren = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
        var node = unwrapRNode(value);

        if (node) {
          switch (node.nodeType) {
            case Node.TEXT_NODE:
              return node.textContent;

            case Node.COMMENT_NODE:
              return "<!--".concat(node.textContent, "-->");

            case Node.ELEMENT_NODE:
              var outerHTML = node.outerHTML;

              if (includeChildren) {
                return outerHTML;
              } else {
                var innerHTML = '>' + node.innerHTML + '<';
                return outerHTML.split(innerHTML)[0] + '>';
              }

          }
        }

        return null;
      }

      var LViewDebug = /*#__PURE__*/function () {
        function LViewDebug(_raw_lView) {
          _classCallCheck2(this, LViewDebug);

          this._raw_lView = _raw_lView;
        }
        /**
         * Flags associated with the `LView` unpacked into a more readable state.
         */


        _createClass2(LViewDebug, [{
          key: "flags",
          get: function get() {
            var flags = this._raw_lView[FLAGS];
            return {
              __raw__flags__: flags,
              initPhaseState: flags & 3
              /* InitPhaseStateMask */
              ,
              creationMode: !!(flags & 4
              /* CreationMode */
              ),
              firstViewPass: !!(flags & 8
              /* FirstLViewPass */
              ),
              checkAlways: !!(flags & 16
              /* CheckAlways */
              ),
              dirty: !!(flags & 64
              /* Dirty */
              ),
              attached: !!(flags & 128
              /* Attached */
              ),
              destroyed: !!(flags & 256
              /* Destroyed */
              ),
              isRoot: !!(flags & 512
              /* IsRoot */
              ),
              indexWithinInitPhase: flags >> 11
              /* IndexWithinInitPhaseShift */

            };
          }
        }, {
          key: "parent",
          get: function get() {
            return toDebug(this._raw_lView[PARENT]);
          }
        }, {
          key: "hostHTML",
          get: function get() {
            return toHtml(this._raw_lView[HOST], true);
          }
        }, {
          key: "html",
          get: function get() {
            return (this.nodes || []).map(mapToHTML).join('');
          }
        }, {
          key: "context",
          get: function get() {
            return this._raw_lView[CONTEXT];
          }
          /**
           * The tree of nodes associated with the current `LView`. The nodes have been normalized into
           * a tree structure with relevant details pulled out for readability.
           */

        }, {
          key: "nodes",
          get: function get() {
            var lView = this._raw_lView;
            var tNode = lView[TVIEW].firstChild;
            return toDebugNodes(tNode, lView);
          }
        }, {
          key: "template",
          get: function get() {
            return this.tView.template_;
          }
        }, {
          key: "tView",
          get: function get() {
            return this._raw_lView[TVIEW];
          }
        }, {
          key: "cleanup",
          get: function get() {
            return this._raw_lView[CLEANUP];
          }
        }, {
          key: "injector",
          get: function get() {
            return this._raw_lView[INJECTOR];
          }
        }, {
          key: "rendererFactory",
          get: function get() {
            return this._raw_lView[RENDERER_FACTORY];
          }
        }, {
          key: "renderer",
          get: function get() {
            return this._raw_lView[RENDERER];
          }
        }, {
          key: "sanitizer",
          get: function get() {
            return this._raw_lView[SANITIZER];
          }
        }, {
          key: "childHead",
          get: function get() {
            return toDebug(this._raw_lView[CHILD_HEAD]);
          }
        }, {
          key: "next",
          get: function get() {
            return toDebug(this._raw_lView[NEXT]);
          }
        }, {
          key: "childTail",
          get: function get() {
            return toDebug(this._raw_lView[CHILD_TAIL]);
          }
        }, {
          key: "declarationView",
          get: function get() {
            return toDebug(this._raw_lView[DECLARATION_VIEW]);
          }
        }, {
          key: "queries",
          get: function get() {
            return this._raw_lView[QUERIES];
          }
        }, {
          key: "tHost",
          get: function get() {
            return this._raw_lView[T_HOST];
          }
        }, {
          key: "decls",
          get: function get() {
            return toLViewRange(this.tView, this._raw_lView, HEADER_OFFSET, this.tView.bindingStartIndex);
          }
        }, {
          key: "vars",
          get: function get() {
            return toLViewRange(this.tView, this._raw_lView, this.tView.bindingStartIndex, this.tView.expandoStartIndex);
          }
        }, {
          key: "expando",
          get: function get() {
            return toLViewRange(this.tView, this._raw_lView, this.tView.expandoStartIndex, this._raw_lView.length);
          }
          /**
           * Normalized view of child views (and containers) attached at this location.
           */

        }, {
          key: "childViews",
          get: function get() {
            var childViews = [];
            var child = this.childHead;

            while (child) {
              childViews.push(child);
              child = child.next;
            }

            return childViews;
          }
        }]);

        return LViewDebug;
      }();

      function mapToHTML(node) {
        if (node.type === 'ElementContainer') {
          return (node.children || []).map(mapToHTML).join('');
        } else if (node.type === 'IcuContainer') {
          throw new Error('Not implemented');
        } else {
          return toHtml(node["native"], true) || '';
        }
      }

      function toLViewRange(tView, lView, start, end) {
        var content = [];

        for (var index = start; index < end; index++) {
          content.push({
            index: index,
            t: tView.data[index],
            l: lView[index]
          });
        }

        return {
          start: start,
          end: end,
          length: end - start,
          content: content
        };
      }
      /**
       * Turns a flat list of nodes into a tree by walking the associated `TNode` tree.
       *
       * @param tNode
       * @param lView
       */


      function toDebugNodes(tNode, lView) {
        if (tNode) {
          var debugNodes = [];
          var tNodeCursor = tNode;

          while (tNodeCursor) {
            debugNodes.push(buildDebugNode(tNodeCursor, lView));
            tNodeCursor = tNodeCursor.next;
          }

          return debugNodes;
        } else {
          return [];
        }
      }

      function buildDebugNode(tNode, lView) {
        var rawValue = lView[tNode.index];

        var _native6 = unwrapRNode(rawValue);

        var factories = [];
        var instances = [];
        var tView = lView[TVIEW];

        for (var i = tNode.directiveStart; i < tNode.directiveEnd; i++) {
          var def = tView.data[i];
          factories.push(def.type);
          instances.push(lView[i]);
        }

        return {
          html: toHtml(_native6),
          type: toTNodeTypeAsString(tNode.type),
          tNode: tNode,
          "native": _native6,
          children: toDebugNodes(tNode.child, lView),
          factories: factories,
          instances: instances,
          injector: buildNodeInjectorDebug(tNode, tView, lView),

          get injectorResolutionPath() {
            return tNode.debugNodeInjectorPath(lView);
          }

        };
      }

      function buildNodeInjectorDebug(tNode, tView, lView) {
        var viewProviders = [];

        for (var i = tNode.providerIndexStart_; i < tNode.providerIndexEnd_; i++) {
          viewProviders.push(tView.data[i]);
        }

        var providers = [];

        for (var _i29 = tNode.providerIndexEnd_; _i29 < tNode.directiveEnd; _i29++) {
          providers.push(tView.data[_i29]);
        }

        var nodeInjectorDebug = {
          bloom: toBloom(lView, tNode.injectorIndex),
          cumulativeBloom: toBloom(tView.data, tNode.injectorIndex),
          providers: providers,
          viewProviders: viewProviders,
          parentInjectorIndex: lView[tNode.providerIndexStart_ - 1]
        };
        return nodeInjectorDebug;
      }
      /**
       * Convert a number at `idx` location in `array` into binary representation.
       *
       * @param array
       * @param idx
       */


      function binary(array, idx) {
        var value = array[idx]; // If not a number we print 8 `?` to retain alignment but let user know that it was called on
        // wrong type.

        if (typeof value !== 'number') return '????????'; // We prefix 0s so that we have constant length number

        var text = '00000000' + value.toString(2);
        return text.substring(text.length - 8);
      }
      /**
       * Convert a bloom filter at location `idx` in `array` into binary representation.
       *
       * @param array
       * @param idx
       */


      function toBloom(array, idx) {
        if (idx < 0) {
          return 'NO_NODE_INJECTOR';
        }

        return "".concat(binary(array, idx + 7), "_").concat(binary(array, idx + 6), "_").concat(binary(array, idx + 5), "_").concat(binary(array, idx + 4), "_").concat(binary(array, idx + 3), "_").concat(binary(array, idx + 2), "_").concat(binary(array, idx + 1), "_").concat(binary(array, idx + 0));
      }

      var LContainerDebug = /*#__PURE__*/function () {
        function LContainerDebug(_raw_lContainer) {
          _classCallCheck2(this, LContainerDebug);

          this._raw_lContainer = _raw_lContainer;
        }

        _createClass2(LContainerDebug, [{
          key: "hasTransplantedViews",
          get: function get() {
            return this._raw_lContainer[HAS_TRANSPLANTED_VIEWS];
          }
        }, {
          key: "views",
          get: function get() {
            return this._raw_lContainer.slice(CONTAINER_HEADER_OFFSET).map(toDebug);
          }
        }, {
          key: "parent",
          get: function get() {
            return toDebug(this._raw_lContainer[PARENT]);
          }
        }, {
          key: "movedViews",
          get: function get() {
            return this._raw_lContainer[MOVED_VIEWS];
          }
        }, {
          key: "host",
          get: function get() {
            return this._raw_lContainer[HOST];
          }
        }, {
          key: "native",
          get: function get() {
            return this._raw_lContainer[NATIVE];
          }
        }, {
          key: "next",
          get: function get() {
            return toDebug(this._raw_lContainer[NEXT]);
          }
        }]);

        return LContainerDebug;
      }();

      var ɵ0$5 = function ɵ0$5() {
        return Promise.resolve(null);
      };
      /**
       * A permanent marker promise which signifies that the current CD tree is
       * clean.
       */


      var _CLEAN_PROMISE = ɵ0$5();
      /**
       * Invoke `HostBindingsFunction`s for view.
       *
       * This methods executes `TView.hostBindingOpCodes`. It is used to execute the
       * `HostBindingsFunction`s associated with the current `LView`.
       *
       * @param tView Current `TView`.
       * @param lView Current `LView`.
       */


      function processHostBindingOpCodes(tView, lView) {
        var hostBindingOpCodes = tView.hostBindingOpCodes;
        if (hostBindingOpCodes === null) return;

        try {
          for (var i = 0; i < hostBindingOpCodes.length; i++) {
            var opCode = hostBindingOpCodes[i];

            if (opCode < 0) {
              // Negative numbers are element indexes.
              setSelectedIndex(~opCode);
            } else {
              // Positive numbers are NumberTuple which store bindingRootIndex and directiveIndex.
              var directiveIdx = opCode;
              var bindingRootIndx = hostBindingOpCodes[++i];
              var hostBindingFn = hostBindingOpCodes[++i];
              setBindingRootForHostBindings(bindingRootIndx, directiveIdx);
              var context = lView[directiveIdx];
              hostBindingFn(2
              /* Update */
              , context);
            }
          }
        } finally {
          setSelectedIndex(-1);
        }
      }
      /** Refreshes all content queries declared by directives in a given view */


      function refreshContentQueries(tView, lView) {
        var contentQueries = tView.contentQueries;

        if (contentQueries !== null) {
          for (var i = 0; i < contentQueries.length; i += 2) {
            var queryStartIdx = contentQueries[i];
            var directiveDefIdx = contentQueries[i + 1];

            if (directiveDefIdx !== -1) {
              var _directiveDef2 = tView.data[directiveDefIdx];
              ngDevMode && assertDefined(_directiveDef2, 'DirectiveDef not found.');
              ngDevMode && assertDefined(_directiveDef2.contentQueries, 'contentQueries function should be defined');
              setCurrentQueryIndex(queryStartIdx);

              _directiveDef2.contentQueries(2
              /* Update */
              , lView[directiveDefIdx], directiveDefIdx);
            }
          }
        }
      }
      /** Refreshes child components in the current view (update mode). */


      function refreshChildComponents(hostLView, components) {
        for (var i = 0; i < components.length; i++) {
          refreshComponent(hostLView, components[i]);
        }
      }
      /** Renders child components in the current view (creation mode). */


      function renderChildComponents(hostLView, components) {
        for (var i = 0; i < components.length; i++) {
          renderComponent(hostLView, components[i]);
        }
      }

      function createLView(parentLView, tView, context, flags, host, tHostNode, rendererFactory, renderer, sanitizer, injector) {
        var lView = ngDevMode ? cloneToLViewFromTViewBlueprint(tView) : tView.blueprint.slice();
        lView[HOST] = host;
        lView[FLAGS] = flags | 4
        /* CreationMode */
        | 128
        /* Attached */
        | 8
        /* FirstLViewPass */
        ;
        resetPreOrderHookFlags(lView);
        ngDevMode && tView.declTNode && parentLView && assertTNodeForLView(tView.declTNode, parentLView);
        lView[PARENT] = lView[DECLARATION_VIEW] = parentLView;
        lView[CONTEXT] = context;
        lView[RENDERER_FACTORY] = rendererFactory || parentLView && parentLView[RENDERER_FACTORY];
        ngDevMode && assertDefined(lView[RENDERER_FACTORY], 'RendererFactory is required');
        lView[RENDERER] = renderer || parentLView && parentLView[RENDERER];
        ngDevMode && assertDefined(lView[RENDERER], 'Renderer is required');
        lView[SANITIZER] = sanitizer || parentLView && parentLView[SANITIZER] || null;
        lView[INJECTOR] = injector || parentLView && parentLView[INJECTOR] || null;
        lView[T_HOST] = tHostNode;
        ngDevMode && assertEqual(tView.type == 2
        /* Embedded */
        ? parentLView !== null : true, true, 'Embedded views must have parentLView');
        lView[DECLARATION_COMPONENT_VIEW] = tView.type == 2
        /* Embedded */
        ? parentLView[DECLARATION_COMPONENT_VIEW] : lView;
        ngDevMode && attachLViewDebug(lView);
        return lView;
      }

      function getOrCreateTNode(tView, index, type, name, attrs) {
        ngDevMode && index !== 0 && // 0 are bogus nodes and they are OK. See `createContainerRef` in
        // `view_engine_compatibility` for additional context.
        assertGreaterThanOrEqual(index, HEADER_OFFSET, 'TNodes can\'t be in the LView header.'); // Keep this function short, so that the VM will inline it.

        ngDevMode && assertPureTNodeType(type);
        var tNode = tView.data[index];

        if (tNode === null) {
          tNode = createTNodeAtIndex(tView, index, type, name, attrs);

          if (isInI18nBlock()) {
            // If we are in i18n block then all elements should be pre declared through `Placeholder`
            // See `TNodeType.Placeholder` and `LFrame.inI18n` for more context.
            // If the `TNode` was not pre-declared than it means it was not mentioned which means it was
            // removed, so we mark it as detached.
            tNode.flags |= 64
            /* isDetached */
            ;
          }
        } else if (tNode.type & 64
        /* Placeholder */
        ) {
            tNode.type = type;
            tNode.value = name;
            tNode.attrs = attrs;
            var parent = getCurrentParentTNode();
            tNode.injectorIndex = parent === null ? -1 : parent.injectorIndex;
            ngDevMode && assertTNodeForTView(tNode, tView);
            ngDevMode && assertEqual(index, tNode.index, 'Expecting same index');
          }

        setCurrentTNode(tNode, true);
        return tNode;
      }

      function createTNodeAtIndex(tView, index, type, name, attrs) {
        var currentTNode = getCurrentTNodePlaceholderOk();
        var isParent = isCurrentTNodeParent();
        var parent = isParent ? currentTNode : currentTNode && currentTNode.parent; // Parents cannot cross component boundaries because components will be used in multiple places.

        var tNode = tView.data[index] = createTNode(tView, parent, type, index, name, attrs); // Assign a pointer to the first child node of a given view. The first node is not always the one
        // at index 0, in case of i18n, index 0 can be the instruction `i18nStart` and the first node has
        // the index 1 or more, so we can't just check node index.

        if (tView.firstChild === null) {
          tView.firstChild = tNode;
        }

        if (currentTNode !== null) {
          if (isParent) {
            // FIXME(misko): This logic looks unnecessarily complicated. Could we simplify?
            if (currentTNode.child == null && tNode.parent !== null) {
              // We are in the same view, which means we are adding content node to the parent view.
              currentTNode.child = tNode;
            }
          } else {
            if (currentTNode.next === null) {
              // In the case of i18n the `currentTNode` may already be linked, in which case we don't want
              // to break the links which i18n created.
              currentTNode.next = tNode;
            }
          }
        }

        return tNode;
      }
      /**
       * When elements are created dynamically after a view blueprint is created (e.g. through
       * i18nApply()), we need to adjust the blueprint for future
       * template passes.
       *
       * @param tView `TView` associated with `LView`
       * @param lView The `LView` containing the blueprint to adjust
       * @param numSlotsToAlloc The number of slots to alloc in the LView, should be >0
       * @param initialValue Initial value to store in blueprint
       */


      function allocExpando(tView, lView, numSlotsToAlloc, initialValue) {
        if (numSlotsToAlloc === 0) return -1;

        if (ngDevMode) {
          assertFirstCreatePass(tView);
          assertSame(tView, lView[TVIEW], '`LView` must be associated with `TView`!');
          assertEqual(tView.data.length, lView.length, 'Expecting LView to be same size as TView');
          assertEqual(tView.data.length, tView.blueprint.length, 'Expecting Blueprint to be same size as TView');
          assertFirstUpdatePass(tView);
        }

        var allocIdx = lView.length;

        for (var i = 0; i < numSlotsToAlloc; i++) {
          lView.push(initialValue);
          tView.blueprint.push(initialValue);
          tView.data.push(null);
        }

        return allocIdx;
      } //////////////////////////
      //// Render
      //////////////////////////

      /**
       * Processes a view in the creation mode. This includes a number of steps in a specific order:
       * - creating view query functions (if any);
       * - executing a template function in the creation mode;
       * - updating static queries (if any);
       * - creating child components defined in a given view.
       */


      function renderView(tView, lView, context) {
        ngDevMode && assertEqual(isCreationMode(lView), true, 'Should be run in creation mode');
        enterView(lView);

        try {
          var viewQuery = tView.viewQuery;

          if (viewQuery !== null) {
            executeViewQueryFn(1
            /* Create */
            , viewQuery, context);
          } // Execute a template associated with this view, if it exists. A template function might not be
          // defined for the root component views.


          var templateFn = tView.template;

          if (templateFn !== null) {
            executeTemplate(tView, lView, templateFn, 1
            /* Create */
            , context);
          } // This needs to be set before children are processed to support recursive components.
          // This must be set to false immediately after the first creation run because in an
          // ngFor loop, all the views will be created together before update mode runs and turns
          // off firstCreatePass. If we don't set it here, instances will perform directive
          // matching, etc again and again.


          if (tView.firstCreatePass) {
            tView.firstCreatePass = false;
          } // We resolve content queries specifically marked as `static` in creation mode. Dynamic
          // content queries are resolved during change detection (i.e. update mode), after embedded
          // views are refreshed (see block above).


          if (tView.staticContentQueries) {
            refreshContentQueries(tView, lView);
          } // We must materialize query results before child components are processed
          // in case a child component has projected a container. The LContainer needs
          // to exist so the embedded views are properly attached by the container.


          if (tView.staticViewQueries) {
            executeViewQueryFn(2
            /* Update */
            , tView.viewQuery, context);
          } // Render child component views.


          var components = tView.components;

          if (components !== null) {
            renderChildComponents(lView, components);
          }
        } catch (error) {
          // If we didn't manage to get past the first template pass due to
          // an error, mark the view as corrupted so we can try to recover.
          if (tView.firstCreatePass) {
            tView.incompleteFirstPass = true;
          }

          throw error;
        } finally {
          lView[FLAGS] &= ~4
          /* CreationMode */
          ;
          leaveView();
        }
      }
      /**
       * Processes a view in update mode. This includes a number of steps in a specific order:
       * - executing a template function in update mode;
       * - executing hooks;
       * - refreshing queries;
       * - setting host bindings;
       * - refreshing child (embedded and component) views.
       */


      function refreshView(tView, lView, templateFn, context) {
        ngDevMode && assertEqual(isCreationMode(lView), false, 'Should be run in update mode');
        var flags = lView[FLAGS];
        if ((flags & 256
        /* Destroyed */
        ) === 256
        /* Destroyed */
        ) return;
        enterView(lView); // Check no changes mode is a dev only mode used to verify that bindings have not changed
        // since they were assigned. We do not want to execute lifecycle hooks in that mode.

        var isInCheckNoChangesPass = isInCheckNoChangesMode();

        try {
          resetPreOrderHookFlags(lView);
          setBindingIndex(tView.bindingStartIndex);

          if (templateFn !== null) {
            executeTemplate(tView, lView, templateFn, 2
            /* Update */
            , context);
          }

          var hooksInitPhaseCompleted = (flags & 3
          /* InitPhaseStateMask */
          ) === 3
          /* InitPhaseCompleted */
          ; // execute pre-order hooks (OnInit, OnChanges, DoCheck)
          // PERF WARNING: do NOT extract this to a separate function without running benchmarks

          if (!isInCheckNoChangesPass) {
            if (hooksInitPhaseCompleted) {
              var preOrderCheckHooks = tView.preOrderCheckHooks;

              if (preOrderCheckHooks !== null) {
                executeCheckHooks(lView, preOrderCheckHooks, null);
              }
            } else {
              var preOrderHooks = tView.preOrderHooks;

              if (preOrderHooks !== null) {
                executeInitAndCheckHooks(lView, preOrderHooks, 0
                /* OnInitHooksToBeRun */
                , null);
              }

              incrementInitPhaseFlags(lView, 0
              /* OnInitHooksToBeRun */
              );
            }
          } // First mark transplanted views that are declared in this lView as needing a refresh at their
          // insertion points. This is needed to avoid the situation where the template is defined in this
          // `LView` but its declaration appears after the insertion component.


          markTransplantedViewsForRefresh(lView);
          refreshEmbeddedViews(lView); // Content query results must be refreshed before content hooks are called.

          if (tView.contentQueries !== null) {
            refreshContentQueries(tView, lView);
          } // execute content hooks (AfterContentInit, AfterContentChecked)
          // PERF WARNING: do NOT extract this to a separate function without running benchmarks


          if (!isInCheckNoChangesPass) {
            if (hooksInitPhaseCompleted) {
              var contentCheckHooks = tView.contentCheckHooks;

              if (contentCheckHooks !== null) {
                executeCheckHooks(lView, contentCheckHooks);
              }
            } else {
              var contentHooks = tView.contentHooks;

              if (contentHooks !== null) {
                executeInitAndCheckHooks(lView, contentHooks, 1
                /* AfterContentInitHooksToBeRun */
                );
              }

              incrementInitPhaseFlags(lView, 1
              /* AfterContentInitHooksToBeRun */
              );
            }
          }

          processHostBindingOpCodes(tView, lView); // Refresh child component views.

          var components = tView.components;

          if (components !== null) {
            refreshChildComponents(lView, components);
          } // View queries must execute after refreshing child components because a template in this view
          // could be inserted in a child component. If the view query executes before child component
          // refresh, the template might not yet be inserted.


          var viewQuery = tView.viewQuery;

          if (viewQuery !== null) {
            executeViewQueryFn(2
            /* Update */
            , viewQuery, context);
          } // execute view hooks (AfterViewInit, AfterViewChecked)
          // PERF WARNING: do NOT extract this to a separate function without running benchmarks


          if (!isInCheckNoChangesPass) {
            if (hooksInitPhaseCompleted) {
              var viewCheckHooks = tView.viewCheckHooks;

              if (viewCheckHooks !== null) {
                executeCheckHooks(lView, viewCheckHooks);
              }
            } else {
              var viewHooks = tView.viewHooks;

              if (viewHooks !== null) {
                executeInitAndCheckHooks(lView, viewHooks, 2
                /* AfterViewInitHooksToBeRun */
                );
              }

              incrementInitPhaseFlags(lView, 2
              /* AfterViewInitHooksToBeRun */
              );
            }
          }

          if (tView.firstUpdatePass === true) {
            // We need to make sure that we only flip the flag on successful `refreshView` only
            // Don't do this in `finally` block.
            // If we did this in `finally` block then an exception could block the execution of styling
            // instructions which in turn would be unable to insert themselves into the styling linked
            // list. The result of this would be that if the exception would not be throw on subsequent CD
            // the styling would be unable to process it data and reflect to the DOM.
            tView.firstUpdatePass = false;
          } // Do not reset the dirty state when running in check no changes mode. We don't want components
          // to behave differently depending on whether check no changes is enabled or not. For example:
          // Marking an OnPush component as dirty from within the `ngAfterViewInit` hook in order to
          // refresh a `NgClass` binding should work. If we would reset the dirty state in the check
          // no changes cycle, the component would be not be dirty for the next update pass. This would
          // be different in production mode where the component dirty state is not reset.


          if (!isInCheckNoChangesPass) {
            lView[FLAGS] &= ~(64
            /* Dirty */
            | 8
            /* FirstLViewPass */
            );
          }

          if (lView[FLAGS] & 1024
          /* RefreshTransplantedView */
          ) {
              lView[FLAGS] &= ~1024
              /* RefreshTransplantedView */
              ;
              updateTransplantedViewCount(lView[PARENT], -1);
            }
        } finally {
          leaveView();
        }
      }

      function renderComponentOrTemplate(tView, lView, templateFn, context) {
        var rendererFactory = lView[RENDERER_FACTORY];
        var normalExecutionPath = !isInCheckNoChangesMode();
        var creationModeIsActive = isCreationMode(lView);

        try {
          if (normalExecutionPath && !creationModeIsActive && rendererFactory.begin) {
            rendererFactory.begin();
          }

          if (creationModeIsActive) {
            renderView(tView, lView, context);
          }

          refreshView(tView, lView, templateFn, context);
        } finally {
          if (normalExecutionPath && !creationModeIsActive && rendererFactory.end) {
            rendererFactory.end();
          }
        }
      }

      function executeTemplate(tView, lView, templateFn, rf, context) {
        var prevSelectedIndex = getSelectedIndex();

        try {
          setSelectedIndex(-1);

          if (rf & 2
          /* Update */
          && lView.length > HEADER_OFFSET) {
            // When we're updating, inherently select 0 so we don't
            // have to generate that instruction for most update blocks.
            selectIndexInternal(tView, lView, HEADER_OFFSET, isInCheckNoChangesMode());
          }

          templateFn(rf, context);
        } finally {
          setSelectedIndex(prevSelectedIndex);
        }
      } //////////////////////////
      //// Element
      //////////////////////////


      function executeContentQueries(tView, tNode, lView) {
        if (isContentQueryHost(tNode)) {
          var _start9 = tNode.directiveStart;
          var end = tNode.directiveEnd;

          for (var directiveIndex = _start9; directiveIndex < end; directiveIndex++) {
            var def = tView.data[directiveIndex];

            if (def.contentQueries) {
              def.contentQueries(1
              /* Create */
              , lView[directiveIndex], directiveIndex);
            }
          }
        }
      }
      /**
       * Creates directive instances.
       */


      function createDirectivesInstances(tView, lView, tNode) {
        if (!getBindingsEnabled()) return;
        instantiateAllDirectives(tView, lView, tNode, getNativeByTNode(tNode, lView));

        if ((tNode.flags & 128
        /* hasHostBindings */
        ) === 128
        /* hasHostBindings */
        ) {
            invokeDirectivesHostBindings(tView, lView, tNode);
          }
      }
      /**
       * Takes a list of local names and indices and pushes the resolved local variable values
       * to LView in the same order as they are loaded in the template with load().
       */


      function saveResolvedLocalsInData(viewData, tNode) {
        var localRefExtractor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : getNativeByTNode;
        var localNames = tNode.localNames;

        if (localNames !== null) {
          var localIndex = tNode.index + 1;

          for (var i = 0; i < localNames.length; i += 2) {
            var index = localNames[i + 1];
            var value = index === -1 ? localRefExtractor(tNode, viewData) : viewData[index];
            viewData[localIndex++] = value;
          }
        }
      }
      /**
       * Gets TView from a template function or creates a new TView
       * if it doesn't already exist.
       *
       * @param def ComponentDef
       * @returns TView
       */


      function getOrCreateTComponentView(def) {
        var tView = def.tView; // Create a TView if there isn't one, or recreate it if the first create pass didn't
        // complete successfully since we can't know for sure whether it's in a usable shape.

        if (tView === null || tView.incompleteFirstPass) {
          // Declaration node here is null since this function is called when we dynamically create a
          // component and hence there is no declaration.
          var declTNode = null;
          return def.tView = createTView(1
          /* Component */
          , declTNode, def.template, def.decls, def.vars, def.directiveDefs, def.pipeDefs, def.viewQuery, def.schemas, def.consts);
        }

        return tView;
      }
      /**
       * Creates a TView instance
       *
       * @param type Type of `TView`.
       * @param declTNode Declaration location of this `TView`.
       * @param templateFn Template function
       * @param decls The number of nodes, local refs, and pipes in this template
       * @param directives Registry of directives for this view
       * @param pipes Registry of pipes for this view
       * @param viewQuery View queries for this view
       * @param schemas Schemas for this view
       * @param consts Constants for this view
       */


      function createTView(type, declTNode, templateFn, decls, vars, directives, pipes, viewQuery, schemas, constsOrFactory) {
        ngDevMode && ngDevMode.tView++;
        var bindingStartIndex = HEADER_OFFSET + decls; // This length does not yet contain host bindings from child directives because at this point,
        // we don't know which directives are active on this template. As soon as a directive is matched
        // that has a host binding, we will update the blueprint with that def's hostVars count.

        var initialViewLength = bindingStartIndex + vars;
        var blueprint = createViewBlueprint(bindingStartIndex, initialViewLength);
        var consts = typeof constsOrFactory === 'function' ? constsOrFactory() : constsOrFactory;
        var tView = blueprint[TVIEW] = ngDevMode ? new TViewConstructor(type, // type: TViewType,
        blueprint, // blueprint: LView,
        templateFn, // template: ComponentTemplate<{}>|null,
        null, // queries: TQueries|null
        viewQuery, // viewQuery: ViewQueriesFunction<{}>|null,
        declTNode, // declTNode: TNode|null,
        cloneToTViewData(blueprint).fill(null, bindingStartIndex), // data: TData,
        bindingStartIndex, // bindingStartIndex: number,
        initialViewLength, // expandoStartIndex: number,
        null, // hostBindingOpCodes: HostBindingOpCodes,
        true, // firstCreatePass: boolean,
        true, // firstUpdatePass: boolean,
        false, // staticViewQueries: boolean,
        false, // staticContentQueries: boolean,
        null, // preOrderHooks: HookData|null,
        null, // preOrderCheckHooks: HookData|null,
        null, // contentHooks: HookData|null,
        null, // contentCheckHooks: HookData|null,
        null, // viewHooks: HookData|null,
        null, // viewCheckHooks: HookData|null,
        null, // destroyHooks: DestroyHookData|null,
        null, // cleanup: any[]|null,
        null, // contentQueries: number[]|null,
        null, // components: number[]|null,
        typeof directives === 'function' ? //
        directives() : //
        directives, // directiveRegistry: DirectiveDefList|null,
        typeof pipes === 'function' ? pipes() : pipes, // pipeRegistry: PipeDefList|null,
        null, // firstChild: TNode|null,
        schemas, // schemas: SchemaMetadata[]|null,
        consts, // consts: TConstants|null
        false, // incompleteFirstPass: boolean
        decls, // ngDevMode only: decls
        vars) : {
          type: type,
          blueprint: blueprint,
          template: templateFn,
          queries: null,
          viewQuery: viewQuery,
          declTNode: declTNode,
          data: blueprint.slice().fill(null, bindingStartIndex),
          bindingStartIndex: bindingStartIndex,
          expandoStartIndex: initialViewLength,
          hostBindingOpCodes: null,
          firstCreatePass: true,
          firstUpdatePass: true,
          staticViewQueries: false,
          staticContentQueries: false,
          preOrderHooks: null,
          preOrderCheckHooks: null,
          contentHooks: null,
          contentCheckHooks: null,
          viewHooks: null,
          viewCheckHooks: null,
          destroyHooks: null,
          cleanup: null,
          contentQueries: null,
          components: null,
          directiveRegistry: typeof directives === 'function' ? directives() : directives,
          pipeRegistry: typeof pipes === 'function' ? pipes() : pipes,
          firstChild: null,
          schemas: schemas,
          consts: consts,
          incompleteFirstPass: false
        };

        if (ngDevMode) {
          // For performance reasons it is important that the tView retains the same shape during runtime.
          // (To make sure that all of the code is monomorphic.) For this reason we seal the object to
          // prevent class transitions.
          Object.seal(tView);
        }

        return tView;
      }

      function createViewBlueprint(bindingStartIndex, initialViewLength) {
        var blueprint = ngDevMode ? new LViewBlueprint() : [];

        for (var i = 0; i < initialViewLength; i++) {
          blueprint.push(i < bindingStartIndex ? null : NO_CHANGE);
        }

        return blueprint;
      }

      function createError(text, token) {
        return new Error("Renderer: ".concat(text, " [").concat(stringifyForError(token), "]"));
      }

      function assertHostNodeExists(rElement, elementOrSelector) {
        if (!rElement) {
          if (typeof elementOrSelector === 'string') {
            throw createError('Host node with selector not found:', elementOrSelector);
          } else {
            throw createError('Host node is required:', elementOrSelector);
          }
        }
      }
      /**
       * Locates the host native element, used for bootstrapping existing nodes into rendering pipeline.
       *
       * @param rendererFactory Factory function to create renderer instance.
       * @param elementOrSelector Render element or CSS selector to locate the element.
       * @param encapsulation View Encapsulation defined for component that requests host element.
       */


      function locateHostElement(renderer, elementOrSelector, encapsulation) {
        if (isProceduralRenderer(renderer)) {
          // When using native Shadow DOM, do not clear host element to allow native slot projection
          var preserveContent = encapsulation === ViewEncapsulation.ShadowDom;
          return renderer.selectRootElement(elementOrSelector, preserveContent);
        }

        var rElement = typeof elementOrSelector === 'string' ? renderer.querySelector(elementOrSelector) : elementOrSelector;
        ngDevMode && assertHostNodeExists(rElement, elementOrSelector); // Always clear host element's content when Renderer3 is in use. For procedural renderer case we
        // make it depend on whether ShadowDom encapsulation is used (in which case the content should be
        // preserved to allow native slot projection). ShadowDom encapsulation requires procedural
        // renderer, and procedural renderer case is handled above.

        rElement.textContent = '';
        return rElement;
      }
      /**
       * Saves context for this cleanup function in LView.cleanupInstances.
       *
       * On the first template pass, saves in TView:
       * - Cleanup function
       * - Index of context we just saved in LView.cleanupInstances
       *
       * This function can also be used to store instance specific cleanup fns. In that case the `context`
       * is `null` and the function is store in `LView` (rather than it `TView`).
       */


      function storeCleanupWithContext(tView, lView, context, cleanupFn) {
        var lCleanup = getOrCreateLViewCleanup(lView);

        if (context === null) {
          // If context is null that this is instance specific callback. These callbacks can only be
          // inserted after template shared instances. For this reason in ngDevMode we freeze the TView.
          if (ngDevMode) {
            Object.freeze(getOrCreateTViewCleanup(tView));
          }

          lCleanup.push(cleanupFn);
        } else {
          lCleanup.push(context);

          if (tView.firstCreatePass) {
            getOrCreateTViewCleanup(tView).push(cleanupFn, lCleanup.length - 1);
          }
        }
      }

      function createTNode(tView, tParent, type, index, value, attrs) {
        ngDevMode && index !== 0 && // 0 are bogus nodes and they are OK. See `createContainerRef` in
        // `view_engine_compatibility` for additional context.
        assertGreaterThanOrEqual(index, HEADER_OFFSET, 'TNodes can\'t be in the LView header.');
        ngDevMode && assertNotSame(attrs, undefined, '\'undefined\' is not valid value for \'attrs\'');
        ngDevMode && ngDevMode.tNode++;
        ngDevMode && tParent && assertTNodeForTView(tParent, tView);
        var injectorIndex = tParent ? tParent.injectorIndex : -1;
        var tNode = ngDevMode ? new TNodeDebug(tView, // tView_: TView
        type, // type: TNodeType
        index, // index: number
        null, // insertBeforeIndex: null|-1|number|number[]
        injectorIndex, // injectorIndex: number
        -1, // directiveStart: number
        -1, // directiveEnd: number
        -1, // directiveStylingLast: number
        null, // propertyBindings: number[]|null
        0, // flags: TNodeFlags
        0, // providerIndexes: TNodeProviderIndexes
        value, // value: string|null
        attrs, // attrs: (string|AttributeMarker|(string|SelectorFlags)[])[]|null
        null, // mergedAttrs
        null, // localNames: (string|number)[]|null
        undefined, // initialInputs: (string[]|null)[]|null|undefined
        null, // inputs: PropertyAliases|null
        null, // outputs: PropertyAliases|null
        null, // tViews: ITView|ITView[]|null
        null, // next: ITNode|null
        null, // projectionNext: ITNode|null
        null, // child: ITNode|null
        tParent, // parent: TElementNode|TContainerNode|null
        null, // projection: number|(ITNode|RNode[])[]|null
        null, // styles: string|null
        null, // stylesWithoutHost: string|null
        undefined, // residualStyles: string|null
        null, // classes: string|null
        null, // classesWithoutHost: string|null
        undefined, // residualClasses: string|null
        0, // classBindings: TStylingRange;
        0) : {
          type: type,
          index: index,
          insertBeforeIndex: null,
          injectorIndex: injectorIndex,
          directiveStart: -1,
          directiveEnd: -1,
          directiveStylingLast: -1,
          propertyBindings: null,
          flags: 0,
          providerIndexes: 0,
          value: value,
          attrs: attrs,
          mergedAttrs: null,
          localNames: null,
          initialInputs: undefined,
          inputs: null,
          outputs: null,
          tViews: null,
          next: null,
          projectionNext: null,
          child: null,
          parent: tParent,
          projection: null,
          styles: null,
          stylesWithoutHost: null,
          residualStyles: undefined,
          classes: null,
          classesWithoutHost: null,
          residualClasses: undefined,
          classBindings: 0,
          styleBindings: 0
        };

        if (ngDevMode) {
          // For performance reasons it is important that the tNode retains the same shape during runtime.
          // (To make sure that all of the code is monomorphic.) For this reason we seal the object to
          // prevent class transitions.
          Object.seal(tNode);
        }

        return tNode;
      }

      function generatePropertyAliases(inputAliasMap, directiveDefIdx, propStore) {
        for (var publicName in inputAliasMap) {
          if (inputAliasMap.hasOwnProperty(publicName)) {
            propStore = propStore === null ? {} : propStore;
            var internalName = inputAliasMap[publicName];

            if (propStore.hasOwnProperty(publicName)) {
              propStore[publicName].push(directiveDefIdx, internalName);
            } else {
              propStore[publicName] = [directiveDefIdx, internalName];
            }
          }
        }

        return propStore;
      }
      /**
       * Initializes data structures required to work with directive inputs and outputs.
       * Initialization is done for all directives matched on a given TNode.
       */


      function initializeInputAndOutputAliases(tView, tNode) {
        ngDevMode && assertFirstCreatePass(tView);
        var start = tNode.directiveStart;
        var end = tNode.directiveEnd;
        var tViewData = tView.data;
        var tNodeAttrs = tNode.attrs;
        var inputsFromAttrs = ngDevMode ? new TNodeInitialInputs() : [];
        var inputsStore = null;
        var outputsStore = null;

        for (var i = start; i < end; i++) {
          var _directiveDef3 = tViewData[i];
          var directiveInputs = _directiveDef3.inputs; // Do not use unbound attributes as inputs to structural directives, since structural
          // directive inputs can only be set using microsyntax (e.g. `<div *dir="exp">`).
          // TODO(FW-1930): microsyntax expressions may also contain unbound/static attributes, which
          // should be set for inline templates.

          var initialInputs = tNodeAttrs !== null && !isInlineTemplate(tNode) ? generateInitialInputs(directiveInputs, tNodeAttrs) : null;
          inputsFromAttrs.push(initialInputs);
          inputsStore = generatePropertyAliases(directiveInputs, i, inputsStore);
          outputsStore = generatePropertyAliases(_directiveDef3.outputs, i, outputsStore);
        }

        if (inputsStore !== null) {
          if (inputsStore.hasOwnProperty('class')) {
            tNode.flags |= 16
            /* hasClassInput */
            ;
          }

          if (inputsStore.hasOwnProperty('style')) {
            tNode.flags |= 32
            /* hasStyleInput */
            ;
          }
        }

        tNode.initialInputs = inputsFromAttrs;
        tNode.inputs = inputsStore;
        tNode.outputs = outputsStore;
      }
      /**
       * Mapping between attributes names that don't correspond to their element property names.
       *
       * Performance note: this function is written as a series of if checks (instead of, say, a property
       * object lookup) for performance reasons - the series of `if` checks seems to be the fastest way of
       * mapping property names. Do NOT change without benchmarking.
       *
       * Note: this mapping has to be kept in sync with the equally named mapping in the template
       * type-checking machinery of ngtsc.
       */


      function mapPropName(name) {
        if (name === 'class') return 'className';
        if (name === 'for') return 'htmlFor';
        if (name === 'formaction') return 'formAction';
        if (name === 'innerHtml') return 'innerHTML';
        if (name === 'readonly') return 'readOnly';
        if (name === 'tabindex') return 'tabIndex';
        return name;
      }

      function elementPropertyInternal(tView, tNode, lView, propName, value, renderer, sanitizer, nativeOnly) {
        ngDevMode && assertNotSame(value, NO_CHANGE, 'Incoming value should never be NO_CHANGE.');
        var element = getNativeByTNode(tNode, lView);
        var inputData = tNode.inputs;
        var dataValue;

        if (!nativeOnly && inputData != null && (dataValue = inputData[propName])) {
          setInputsForProperty(tView, lView, dataValue, propName, value);
          if (isComponentHost(tNode)) markDirtyIfOnPush(lView, tNode.index);

          if (ngDevMode) {
            setNgReflectProperties(lView, element, tNode.type, dataValue, value);
          }
        } else if (tNode.type & 3
        /* AnyRNode */
        ) {
            propName = mapPropName(propName);

            if (ngDevMode) {
              validateAgainstEventProperties(propName);

              if (!validateProperty(tView, element, propName, tNode)) {
                // Return here since we only log warnings for unknown properties.
                logUnknownPropertyError(propName, tNode);
                return;
              }

              ngDevMode.rendererSetProperty++;
            } // It is assumed that the sanitizer is only added when the compiler determines that the
            // property is risky, so sanitization can be done without further checks.


            value = sanitizer != null ? sanitizer(value, tNode.value || '', propName) : value;

            if (isProceduralRenderer(renderer)) {
              renderer.setProperty(element, propName, value);
            } else if (!isAnimationProp(propName)) {
              element.setProperty ? element.setProperty(propName, value) : element[propName] = value;
            }
          } else if (tNode.type & 12
        /* AnyContainer */
        ) {
            // If the node is a container and the property didn't
            // match any of the inputs or schemas we should throw.
            if (ngDevMode && !matchingSchemas(tView, tNode.value)) {
              logUnknownPropertyError(propName, tNode);
            }
          }
      }
      /** If node is an OnPush component, marks its LView dirty. */


      function markDirtyIfOnPush(lView, viewIndex) {
        ngDevMode && assertLView(lView);
        var childComponentLView = getComponentLViewByIndex(viewIndex, lView);

        if (!(childComponentLView[FLAGS] & 16
        /* CheckAlways */
        )) {
          childComponentLView[FLAGS] |= 64
          /* Dirty */
          ;
        }
      }

      function setNgReflectProperty(lView, element, type, attrName, value) {
        var renderer = lView[RENDERER];
        attrName = normalizeDebugBindingName(attrName);
        var debugValue = normalizeDebugBindingValue(value);

        if (type & 3
        /* AnyRNode */
        ) {
            if (value == null) {
              isProceduralRenderer(renderer) ? renderer.removeAttribute(element, attrName) : element.removeAttribute(attrName);
            } else {
              isProceduralRenderer(renderer) ? renderer.setAttribute(element, attrName, debugValue) : element.setAttribute(attrName, debugValue);
            }
          } else {
          var textContent = escapeCommentText("bindings=".concat(JSON.stringify(_defineProperty({}, attrName, debugValue), null, 2)));

          if (isProceduralRenderer(renderer)) {
            renderer.setValue(element, textContent);
          } else {
            element.textContent = textContent;
          }
        }
      }

      function setNgReflectProperties(lView, element, type, dataValue, value) {
        if (type & (3
        /* AnyRNode */
        | 4
        /* Container */
        )) {
          /**
           * dataValue is an array containing runtime input or output names for the directives:
           * i+0: directive instance index
           * i+1: privateName
           *
           * e.g. [0, 'change', 'change-minified']
           * we want to set the reflected property with the privateName: dataValue[i+1]
           */
          for (var i = 0; i < dataValue.length; i += 2) {
            setNgReflectProperty(lView, element, type, dataValue[i + 1], value);
          }
        }
      }

      function validateProperty(tView, element, propName, tNode) {
        // If `schemas` is set to `null`, that's an indication that this Component was compiled in AOT
        // mode where this check happens at compile time. In JIT mode, `schemas` is always present and
        // defined as an array (as an empty array in case `schemas` field is not defined) and we should
        // execute the check below.
        if (tView.schemas === null) return true; // The property is considered valid if the element matches the schema, it exists on the element
        // or it is synthetic, and we are in a browser context (web worker nodes should be skipped).

        if (matchingSchemas(tView, tNode.value) || propName in element || isAnimationProp(propName)) {
          return true;
        } // Note: `typeof Node` returns 'function' in most browsers, but on IE it is 'object' so we
        // need to account for both here, while being careful for `typeof null` also returning 'object'.


        return typeof Node === 'undefined' || Node === null || !(element instanceof Node);
      }

      function matchingSchemas(tView, tagName) {
        var schemas = tView.schemas;

        if (schemas !== null) {
          for (var i = 0; i < schemas.length; i++) {
            var schema = schemas[i];

            if (schema === NO_ERRORS_SCHEMA || schema === CUSTOM_ELEMENTS_SCHEMA && tagName && tagName.indexOf('-') > -1) {
              return true;
            }
          }
        }

        return false;
      }
      /**
       * Logs an error that a property is not supported on an element.
       * @param propName Name of the invalid property.
       * @param tNode Node on which we encountered the property.
       */


      function logUnknownPropertyError(propName, tNode) {
        var message = "Can't bind to '".concat(propName, "' since it isn't a known property of '").concat(tNode.value, "'.");
        console.error(formatRuntimeError("303"
        /* UNKNOWN_BINDING */
        , message));
      }
      /**
       * Instantiate a root component.
       */


      function instantiateRootComponent(tView, lView, def) {
        var rootTNode = getCurrentTNode();

        if (tView.firstCreatePass) {
          if (def.providersResolver) def.providersResolver(def);
          var directiveIndex = allocExpando(tView, lView, 1, null);
          ngDevMode && assertEqual(directiveIndex, rootTNode.directiveStart, 'Because this is a root component the allocated expando should match the TNode component.');
          configureViewWithDirective(tView, rootTNode, lView, directiveIndex, def);
        }

        var directive = getNodeInjectable(lView, tView, rootTNode.directiveStart, rootTNode);
        attachPatchData(directive, lView);

        var _native7 = getNativeByTNode(rootTNode, lView);

        if (_native7) {
          attachPatchData(_native7, lView);
        }

        return directive;
      }
      /**
       * Resolve the matched directives on a node.
       */


      function resolveDirectives(tView, lView, tNode, localRefs) {
        // Please make sure to have explicit type for `exportsMap`. Inferred type triggers bug in
        // tsickle.
        ngDevMode && assertFirstCreatePass(tView);
        var hasDirectives = false;

        if (getBindingsEnabled()) {
          var directiveDefs = findDirectiveDefMatches(tView, lView, tNode);
          var exportsMap = localRefs === null ? null : {
            '': -1
          };

          if (directiveDefs !== null) {
            hasDirectives = true;
            initTNodeFlags(tNode, tView.data.length, directiveDefs.length); // When the same token is provided by several directives on the same node, some rules apply in
            // the viewEngine:
            // - viewProviders have priority over providers
            // - the last directive in NgModule.declarations has priority over the previous one
            // So to match these rules, the order in which providers are added in the arrays is very
            // important.

            for (var i = 0; i < directiveDefs.length; i++) {
              var def = directiveDefs[i];
              if (def.providersResolver) def.providersResolver(def);
            }

            var preOrderHooksFound = false;
            var preOrderCheckHooksFound = false;
            var directiveIdx = allocExpando(tView, lView, directiveDefs.length, null);
            ngDevMode && assertSame(directiveIdx, tNode.directiveStart, 'TNode.directiveStart should point to just allocated space');

            for (var _i30 = 0; _i30 < directiveDefs.length; _i30++) {
              var _def2 = directiveDefs[_i30]; // Merge the attrs in the order of matches. This assumes that the first directive is the
              // component itself, so that the component has the least priority.

              tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, _def2.hostAttrs);
              configureViewWithDirective(tView, tNode, lView, directiveIdx, _def2);
              saveNameToExportMap(directiveIdx, _def2, exportsMap);
              if (_def2.contentQueries !== null) tNode.flags |= 8
              /* hasContentQuery */
              ;
              if (_def2.hostBindings !== null || _def2.hostAttrs !== null || _def2.hostVars !== 0) tNode.flags |= 128
              /* hasHostBindings */
              ;
              var lifeCycleHooks = _def2.type.prototype; // Only push a node index into the preOrderHooks array if this is the first
              // pre-order hook found on this node.

              if (!preOrderHooksFound && (lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngOnInit || lifeCycleHooks.ngDoCheck)) {
                // We will push the actual hook function into this array later during dir instantiation.
                // We cannot do it now because we must ensure hooks are registered in the same
                // order that directives are created (i.e. injection order).
                (tView.preOrderHooks || (tView.preOrderHooks = [])).push(tNode.index);
                preOrderHooksFound = true;
              }

              if (!preOrderCheckHooksFound && (lifeCycleHooks.ngOnChanges || lifeCycleHooks.ngDoCheck)) {
                (tView.preOrderCheckHooks || (tView.preOrderCheckHooks = [])).push(tNode.index);
                preOrderCheckHooksFound = true;
              }

              directiveIdx++;
            }

            initializeInputAndOutputAliases(tView, tNode);
          }

          if (exportsMap) cacheMatchingLocalNames(tNode, localRefs, exportsMap);
        } // Merge the template attrs last so that they have the highest priority.


        tNode.mergedAttrs = mergeHostAttrs(tNode.mergedAttrs, tNode.attrs);
        return hasDirectives;
      }
      /**
       * Add `hostBindings` to the `TView.hostBindingOpCodes`.
       *
       * @param tView `TView` to which the `hostBindings` should be added.
       * @param tNode `TNode` the element which contains the directive
       * @param lView `LView` current `LView`
       * @param directiveIdx Directive index in view.
       * @param directiveVarsIdx Where will the directive's vars be stored
       * @param def `ComponentDef`/`DirectiveDef`, which contains the `hostVars`/`hostBindings` to add.
       */


      function registerHostBindingOpCodes(tView, tNode, lView, directiveIdx, directiveVarsIdx, def) {
        ngDevMode && assertFirstCreatePass(tView);
        var hostBindings = def.hostBindings;

        if (hostBindings) {
          var hostBindingOpCodes = tView.hostBindingOpCodes;

          if (hostBindingOpCodes === null) {
            hostBindingOpCodes = tView.hostBindingOpCodes = [];
          }

          var elementIndx = ~tNode.index;

          if (lastSelectedElementIdx(hostBindingOpCodes) != elementIndx) {
            // Conditionally add select element so that we are more efficient in execution.
            // NOTE: this is strictly not necessary and it trades code size for runtime perf.
            // (We could just always add it.)
            hostBindingOpCodes.push(elementIndx);
          }

          hostBindingOpCodes.push(directiveIdx, directiveVarsIdx, hostBindings);
        }
      }
      /**
       * Returns the last selected element index in the `HostBindingOpCodes`
       *
       * For perf reasons we don't need to update the selected element index in `HostBindingOpCodes` only
       * if it changes. This method returns the last index (or '0' if not found.)
       *
       * Selected element index are only the ones which are negative.
       */


      function lastSelectedElementIdx(hostBindingOpCodes) {
        var i = hostBindingOpCodes.length;

        while (i > 0) {
          var value = hostBindingOpCodes[--i];

          if (typeof value === 'number' && value < 0) {
            return value;
          }
        }

        return 0;
      }
      /**
       * Instantiate all the directives that were previously resolved on the current node.
       */


      function instantiateAllDirectives(tView, lView, tNode, _native8) {
        var start = tNode.directiveStart;
        var end = tNode.directiveEnd;

        if (!tView.firstCreatePass) {
          getOrCreateNodeInjectorForNode(tNode, lView);
        }

        attachPatchData(_native8, lView);
        var initialInputs = tNode.initialInputs;

        for (var i = start; i < end; i++) {
          var def = tView.data[i];
          var isComponent = isComponentDef(def);

          if (isComponent) {
            ngDevMode && assertTNodeType(tNode, 3
            /* AnyRNode */
            );
            addComponentLogic(lView, tNode, def);
          }

          var directive = getNodeInjectable(lView, tView, i, tNode);
          attachPatchData(directive, lView);

          if (initialInputs !== null) {
            setInputsFromAttrs(lView, i - start, directive, def, tNode, initialInputs);
          }

          if (isComponent) {
            var componentView = getComponentLViewByIndex(tNode.index, lView);
            componentView[CONTEXT] = directive;
          }
        }
      }

      function invokeDirectivesHostBindings(tView, lView, tNode) {
        var start = tNode.directiveStart;
        var end = tNode.directiveEnd;
        var firstCreatePass = tView.firstCreatePass;
        var elementIndex = tNode.index;
        var currentDirectiveIndex = getCurrentDirectiveIndex();

        try {
          setSelectedIndex(elementIndex);

          for (var dirIndex = start; dirIndex < end; dirIndex++) {
            var def = tView.data[dirIndex];
            var directive = lView[dirIndex];
            setCurrentDirectiveIndex(dirIndex);

            if (def.hostBindings !== null || def.hostVars !== 0 || def.hostAttrs !== null) {
              invokeHostBindingsInCreationMode(def, directive);
            }
          }
        } finally {
          setSelectedIndex(-1);
          setCurrentDirectiveIndex(currentDirectiveIndex);
        }
      }
      /**
       * Invoke the host bindings in creation mode.
       *
       * @param def `DirectiveDef` which may contain the `hostBindings` function.
       * @param directive Instance of directive.
       */


      function invokeHostBindingsInCreationMode(def, directive) {
        if (def.hostBindings !== null) {
          def.hostBindings(1
          /* Create */
          , directive);
        }
      }
      /**
       * Matches the current node against all available selectors.
       * If a component is matched (at most one), it is returned in first position in the array.
       */


      function findDirectiveDefMatches(tView, viewData, tNode) {
        ngDevMode && assertFirstCreatePass(tView);
        ngDevMode && assertTNodeType(tNode, 3
        /* AnyRNode */
        | 12
        /* AnyContainer */
        );
        var registry = tView.directiveRegistry;
        var matches = null;

        if (registry) {
          for (var i = 0; i < registry.length; i++) {
            var def = registry[i];

            if (isNodeMatchingSelectorList(tNode, def.selectors,
            /* isProjectionMode */
            false)) {
              matches || (matches = ngDevMode ? new MatchesArray() : []);
              diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, viewData), tView, def.type);

              if (isComponentDef(def)) {
                if (ngDevMode) {
                  assertTNodeType(tNode, 2
                  /* Element */
                  , "\"".concat(tNode.value, "\" tags cannot be used as component hosts. ") + "Please use a different tag to activate the ".concat(stringify(def.type), " component."));
                  if (tNode.flags & 2
                  /* isComponentHost */
                  ) throwMultipleComponentError(tNode);
                }

                markAsComponentHost(tView, tNode); // The component is always stored first with directives after.

                matches.unshift(def);
              } else {
                matches.push(def);
              }
            }
          }
        }

        return matches;
      }
      /**
       * Marks a given TNode as a component's host. This consists of:
       * - setting appropriate TNode flags;
       * - storing index of component's host element so it will be queued for view refresh during CD.
       */


      function markAsComponentHost(tView, hostTNode) {
        ngDevMode && assertFirstCreatePass(tView);
        hostTNode.flags |= 2
        /* isComponentHost */
        ;
        (tView.components || (tView.components = ngDevMode ? new TViewComponents() : [])).push(hostTNode.index);
      }
      /** Caches local names and their matching directive indices for query and template lookups. */


      function cacheMatchingLocalNames(tNode, localRefs, exportsMap) {
        if (localRefs) {
          var localNames = tNode.localNames = ngDevMode ? new TNodeLocalNames() : []; // Local names must be stored in tNode in the same order that localRefs are defined
          // in the template to ensure the data is loaded in the same slots as their refs
          // in the template (for template queries).

          for (var i = 0; i < localRefs.length; i += 2) {
            var index = exportsMap[localRefs[i + 1]];
            if (index == null) throw new RuntimeError("301"
            /* EXPORT_NOT_FOUND */
            , "Export of name '".concat(localRefs[i + 1], "' not found!"));
            localNames.push(localRefs[i], index);
          }
        }
      }
      /**
       * Builds up an export map as directives are created, so local refs can be quickly mapped
       * to their directive instances.
       */


      function saveNameToExportMap(directiveIdx, def, exportsMap) {
        if (exportsMap) {
          if (def.exportAs) {
            for (var i = 0; i < def.exportAs.length; i++) {
              exportsMap[def.exportAs[i]] = directiveIdx;
            }
          }

          if (isComponentDef(def)) exportsMap[''] = directiveIdx;
        }
      }
      /**
       * Initializes the flags on the current node, setting all indices to the initial index,
       * the directive count to 0, and adding the isComponent flag.
       * @param index the initial index
       */


      function initTNodeFlags(tNode, index, numberOfDirectives) {
        ngDevMode && assertNotEqual(numberOfDirectives, tNode.directiveEnd - tNode.directiveStart, 'Reached the max number of directives');
        tNode.flags |= 1
        /* isDirectiveHost */
        ; // When the first directive is created on a node, save the index

        tNode.directiveStart = index;
        tNode.directiveEnd = index + numberOfDirectives;
        tNode.providerIndexes = index;
      }
      /**
       * Setup directive for instantiation.
       *
       * We need to create a `NodeInjectorFactory` which is then inserted in both the `Blueprint` as well
       * as `LView`. `TView` gets the `DirectiveDef`.
       *
       * @param tView `TView`
       * @param tNode `TNode`
       * @param lView `LView`
       * @param directiveIndex Index where the directive will be stored in the Expando.
       * @param def `DirectiveDef`
       */


      function configureViewWithDirective(tView, tNode, lView, directiveIndex, def) {
        ngDevMode && assertGreaterThanOrEqual(directiveIndex, HEADER_OFFSET, 'Must be in Expando section');
        tView.data[directiveIndex] = def;
        var directiveFactory = def.factory || (def.factory = getFactoryDef(def.type, true));
        var nodeInjectorFactory = new NodeInjectorFactory(directiveFactory, isComponentDef(def), null);
        tView.blueprint[directiveIndex] = nodeInjectorFactory;
        lView[directiveIndex] = nodeInjectorFactory;
        registerHostBindingOpCodes(tView, tNode, lView, directiveIndex, allocExpando(tView, lView, def.hostVars, NO_CHANGE), def);
      }

      function addComponentLogic(lView, hostTNode, def) {
        var _native9 = getNativeByTNode(hostTNode, lView);

        var tView = getOrCreateTComponentView(def); // Only component views should be added to the view tree directly. Embedded views are
        // accessed through their containers because they may be removed / re-added later.

        var rendererFactory = lView[RENDERER_FACTORY];
        var componentView = addToViewTree(lView, createLView(lView, tView, null, def.onPush ? 64
        /* Dirty */
        : 16
        /* CheckAlways */
        , _native9, hostTNode, rendererFactory, rendererFactory.createRenderer(_native9, def), null, null)); // Component view will always be created before any injected LContainers,
        // so this is a regular element, wrap it with the component view

        lView[hostTNode.index] = componentView;
      }

      function elementAttributeInternal(tNode, lView, name, value, sanitizer, namespace) {
        if (ngDevMode) {
          assertNotSame(value, NO_CHANGE, 'Incoming value should never be NO_CHANGE.');
          validateAgainstEventAttributes(name);
          assertTNodeType(tNode, 2
          /* Element */
          , "Attempted to set attribute `".concat(name, "` on a container node. ") + "Host bindings are not valid on ng-container or ng-template.");
        }

        var element = getNativeByTNode(tNode, lView);
        setElementAttribute(lView[RENDERER], element, namespace, tNode.value, name, value, sanitizer);
      }

      function setElementAttribute(renderer, element, namespace, tagName, name, value, sanitizer) {
        if (value == null) {
          ngDevMode && ngDevMode.rendererRemoveAttribute++;
          isProceduralRenderer(renderer) ? renderer.removeAttribute(element, name, namespace) : element.removeAttribute(name);
        } else {
          ngDevMode && ngDevMode.rendererSetAttribute++;
          var strValue = sanitizer == null ? renderStringify(value) : sanitizer(value, tagName || '', name);

          if (isProceduralRenderer(renderer)) {
            renderer.setAttribute(element, name, strValue, namespace);
          } else {
            namespace ? element.setAttributeNS(namespace, name, strValue) : element.setAttribute(name, strValue);
          }
        }
      }
      /**
       * Sets initial input properties on directive instances from attribute data
       *
       * @param lView Current LView that is being processed.
       * @param directiveIndex Index of the directive in directives array
       * @param instance Instance of the directive on which to set the initial inputs
       * @param def The directive def that contains the list of inputs
       * @param tNode The static data for this node
       */


      function setInputsFromAttrs(lView, directiveIndex, instance, def, tNode, initialInputData) {
        var initialInputs = initialInputData[directiveIndex];

        if (initialInputs !== null) {
          var setInput = def.setInput;

          for (var i = 0; i < initialInputs.length;) {
            var publicName = initialInputs[i++];
            var privateName = initialInputs[i++];
            var value = initialInputs[i++];

            if (setInput !== null) {
              def.setInput(instance, value, publicName, privateName);
            } else {
              instance[privateName] = value;
            }

            if (ngDevMode) {
              var nativeElement = getNativeByTNode(tNode, lView);
              setNgReflectProperty(lView, nativeElement, tNode.type, privateName, value);
            }
          }
        }
      }
      /**
       * Generates initialInputData for a node and stores it in the template's static storage
       * so subsequent template invocations don't have to recalculate it.
       *
       * initialInputData is an array containing values that need to be set as input properties
       * for directives on this node, but only once on creation. We need this array to support
       * the case where you set an @Input property of a directive using attribute-like syntax.
       * e.g. if you have a `name` @Input, you can set it once like this:
       *
       * <my-component name="Bess"></my-component>
       *
       * @param inputs The list of inputs from the directive def
       * @param attrs The static attrs on this node
       */


      function generateInitialInputs(inputs, attrs) {
        var inputsToStore = null;
        var i = 0;

        while (i < attrs.length) {
          var attrName = attrs[i];

          if (attrName === 0
          /* NamespaceURI */
          ) {
              // We do not allow inputs on namespaced attributes.
              i += 4;
              continue;
            } else if (attrName === 5
          /* ProjectAs */
          ) {
              // Skip over the `ngProjectAs` value.
              i += 2;
              continue;
            } // If we hit any other attribute markers, we're done anyway. None of those are valid inputs.


          if (typeof attrName === 'number') break;

          if (inputs.hasOwnProperty(attrName)) {
            if (inputsToStore === null) inputsToStore = [];
            inputsToStore.push(attrName, inputs[attrName], attrs[i + 1]);
          }

          i += 2;
        }

        return inputsToStore;
      } //////////////////////////
      //// ViewContainer & View
      //////////////////////////
      // Not sure why I need to do `any` here but TS complains later.


      var LContainerArray = (typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode() && createNamedArrayType('LContainer');
      /**
       * Creates a LContainer, either from a container instruction, or for a ViewContainerRef.
       *
       * @param hostNative The host element for the LContainer
       * @param hostTNode The host TNode for the LContainer
       * @param currentView The parent view of the LContainer
       * @param native The native comment element
       * @param isForViewContainerRef Optional a flag indicating the ViewContainerRef case
       * @returns LContainer
       */

      function createLContainer(hostNative, currentView, _native10, tNode) {
        ngDevMode && assertLView(currentView);
        ngDevMode && !isProceduralRenderer(currentView[RENDERER]) && assertDomNode(_native10); // https://jsperf.com/array-literal-vs-new-array-really

        var lContainer = new (ngDevMode ? LContainerArray : Array)(hostNative, // host native
        true, // Boolean `true` in this position signifies that this is an `LContainer`
        false, // has transplanted views
        currentView, // parent
        null, // next
        0, // transplanted views to refresh count
        tNode, // t_host
        _native10, // native,
        null, // view refs
        null);
        ngDevMode && assertEqual(lContainer.length, CONTAINER_HEADER_OFFSET, 'Should allocate correct number of slots for LContainer header.');
        ngDevMode && attachLContainerDebug(lContainer);
        return lContainer;
      }
      /**
       * Goes over embedded views (ones created through ViewContainerRef APIs) and refreshes
       * them by executing an associated template function.
       */


      function refreshEmbeddedViews(lView) {
        for (var lContainer = getFirstLContainer(lView); lContainer !== null; lContainer = getNextLContainer(lContainer)) {
          for (var i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
            var embeddedLView = lContainer[i];
            var embeddedTView = embeddedLView[TVIEW];
            ngDevMode && assertDefined(embeddedTView, 'TView must be allocated');

            if (viewAttachedToChangeDetector(embeddedLView)) {
              refreshView(embeddedTView, embeddedLView, embeddedTView.template, embeddedLView[CONTEXT]);
            }
          }
        }
      }
      /**
       * Mark transplanted views as needing to be refreshed at their insertion points.
       *
       * @param lView The `LView` that may have transplanted views.
       */


      function markTransplantedViewsForRefresh(lView) {
        for (var lContainer = getFirstLContainer(lView); lContainer !== null; lContainer = getNextLContainer(lContainer)) {
          if (!lContainer[HAS_TRANSPLANTED_VIEWS]) continue;
          var movedViews = lContainer[MOVED_VIEWS];
          ngDevMode && assertDefined(movedViews, 'Transplanted View flags set but missing MOVED_VIEWS');

          for (var i = 0; i < movedViews.length; i++) {
            var movedLView = movedViews[i];
            var insertionLContainer = movedLView[PARENT];
            ngDevMode && assertLContainer(insertionLContainer); // We don't want to increment the counter if the moved LView was already marked for
            // refresh.

            if ((movedLView[FLAGS] & 1024
            /* RefreshTransplantedView */
            ) === 0) {
              updateTransplantedViewCount(insertionLContainer, 1);
            } // Note, it is possible that the `movedViews` is tracking views that are transplanted *and*
            // those that aren't (declaration component === insertion component). In the latter case,
            // it's fine to add the flag, as we will clear it immediately in
            // `refreshEmbeddedViews` for the view currently being refreshed.


            movedLView[FLAGS] |= 1024
            /* RefreshTransplantedView */
            ;
          }
        }
      } /////////////

      /**
       * Refreshes components by entering the component view and processing its bindings, queries, etc.
       *
       * @param componentHostIdx  Element index in LView[] (adjusted for HEADER_OFFSET)
       */


      function refreshComponent(hostLView, componentHostIdx) {
        ngDevMode && assertEqual(isCreationMode(hostLView), false, 'Should be run in update mode');
        var componentView = getComponentLViewByIndex(componentHostIdx, hostLView); // Only attached components that are CheckAlways or OnPush and dirty should be refreshed

        if (viewAttachedToChangeDetector(componentView)) {
          var tView = componentView[TVIEW];

          if (componentView[FLAGS] & (16
          /* CheckAlways */
          | 64
          /* Dirty */
          )) {
            refreshView(tView, componentView, tView.template, componentView[CONTEXT]);
          } else if (componentView[TRANSPLANTED_VIEWS_TO_REFRESH] > 0) {
            // Only attached components that are CheckAlways or OnPush and dirty should be refreshed
            refreshContainsDirtyView(componentView);
          }
        }
      }
      /**
       * Refreshes all transplanted views marked with `LViewFlags.RefreshTransplantedView` that are
       * children or descendants of the given lView.
       *
       * @param lView The lView which contains descendant transplanted views that need to be refreshed.
       */


      function refreshContainsDirtyView(lView) {
        for (var lContainer = getFirstLContainer(lView); lContainer !== null; lContainer = getNextLContainer(lContainer)) {
          for (var i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
            var embeddedLView = lContainer[i];

            if (embeddedLView[FLAGS] & 1024
            /* RefreshTransplantedView */
            ) {
                var embeddedTView = embeddedLView[TVIEW];
                ngDevMode && assertDefined(embeddedTView, 'TView must be allocated');
                refreshView(embeddedTView, embeddedLView, embeddedTView.template, embeddedLView[CONTEXT]);
              } else if (embeddedLView[TRANSPLANTED_VIEWS_TO_REFRESH] > 0) {
              refreshContainsDirtyView(embeddedLView);
            }
          }
        }

        var tView = lView[TVIEW]; // Refresh child component views.

        var components = tView.components;

        if (components !== null) {
          for (var _i31 = 0; _i31 < components.length; _i31++) {
            var componentView = getComponentLViewByIndex(components[_i31], lView); // Only attached components that are CheckAlways or OnPush and dirty should be refreshed

            if (viewAttachedToChangeDetector(componentView) && componentView[TRANSPLANTED_VIEWS_TO_REFRESH] > 0) {
              refreshContainsDirtyView(componentView);
            }
          }
        }
      }

      function renderComponent(hostLView, componentHostIdx) {
        ngDevMode && assertEqual(isCreationMode(hostLView), true, 'Should be run in creation mode');
        var componentView = getComponentLViewByIndex(componentHostIdx, hostLView);
        var componentTView = componentView[TVIEW];
        syncViewWithBlueprint(componentTView, componentView);
        renderView(componentTView, componentView, componentView[CONTEXT]);
      }
      /**
       * Syncs an LView instance with its blueprint if they have gotten out of sync.
       *
       * Typically, blueprints and their view instances should always be in sync, so the loop here
       * will be skipped. However, consider this case of two components side-by-side:
       *
       * App template:
       * ```
       * <comp></comp>
       * <comp></comp>
       * ```
       *
       * The following will happen:
       * 1. App template begins processing.
       * 2. First <comp> is matched as a component and its LView is created.
       * 3. Second <comp> is matched as a component and its LView is created.
       * 4. App template completes processing, so it's time to check child templates.
       * 5. First <comp> template is checked. It has a directive, so its def is pushed to blueprint.
       * 6. Second <comp> template is checked. Its blueprint has been updated by the first
       * <comp> template, but its LView was created before this update, so it is out of sync.
       *
       * Note that embedded views inside ngFor loops will never be out of sync because these views
       * are processed as soon as they are created.
       *
       * @param tView The `TView` that contains the blueprint for syncing
       * @param lView The view to sync
       */


      function syncViewWithBlueprint(tView, lView) {
        for (var i = lView.length; i < tView.blueprint.length; i++) {
          lView.push(tView.blueprint[i]);
        }
      }
      /**
       * Adds LView or LContainer to the end of the current view tree.
       *
       * This structure will be used to traverse through nested views to remove listeners
       * and call onDestroy callbacks.
       *
       * @param lView The view where LView or LContainer should be added
       * @param adjustedHostIndex Index of the view's host node in LView[], adjusted for header
       * @param lViewOrLContainer The LView or LContainer to add to the view tree
       * @returns The state passed in
       */


      function addToViewTree(lView, lViewOrLContainer) {
        // TODO(benlesh/misko): This implementation is incorrect, because it always adds the LContainer
        // to the end of the queue, which means if the developer retrieves the LContainers from RNodes out
        // of order, the change detection will run out of order, as the act of retrieving the the
        // LContainer from the RNode is what adds it to the queue.
        if (lView[CHILD_HEAD]) {
          lView[CHILD_TAIL][NEXT] = lViewOrLContainer;
        } else {
          lView[CHILD_HEAD] = lViewOrLContainer;
        }

        lView[CHILD_TAIL] = lViewOrLContainer;
        return lViewOrLContainer;
      } ///////////////////////////////
      //// Change detection
      ///////////////////////////////

      /**
       * Marks current view and all ancestors dirty.
       *
       * Returns the root view because it is found as a byproduct of marking the view tree
       * dirty, and can be used by methods that consume markViewDirty() to easily schedule
       * change detection. Otherwise, such methods would need to traverse up the view tree
       * an additional time to get the root view and schedule a tick on it.
       *
       * @param lView The starting LView to mark dirty
       * @returns the root LView
       */


      function markViewDirty(lView) {
        while (lView) {
          lView[FLAGS] |= 64
          /* Dirty */
          ;
          var parent = getLViewParent(lView); // Stop traversing up as soon as you find a root view that wasn't attached to any container

          if (isRootView(lView) && !parent) {
            return lView;
          } // continue otherwise


          lView = parent;
        }

        return null;
      }
      /**
       * Used to schedule change detection on the whole application.
       *
       * Unlike `tick`, `scheduleTick` coalesces multiple calls into one change detection run.
       * It is usually called indirectly by calling `markDirty` when the view needs to be
       * re-rendered.
       *
       * Typically `scheduleTick` uses `requestAnimationFrame` to coalesce multiple
       * `scheduleTick` requests. The scheduling function can be overridden in
       * `renderComponent`'s `scheduler` option.
       */


      function scheduleTick(rootContext, flags) {
        var nothingScheduled = rootContext.flags === 0
        /* Empty */
        ;

        if (nothingScheduled && rootContext.clean == _CLEAN_PROMISE) {
          // https://github.com/angular/angular/issues/39296
          // should only attach the flags when really scheduling a tick
          rootContext.flags |= flags;
          var res;
          rootContext.clean = new Promise(function (r) {
            return res = r;
          });
          rootContext.scheduler(function () {
            if (rootContext.flags & 1
            /* DetectChanges */
            ) {
                rootContext.flags &= ~1
                /* DetectChanges */
                ;
                tickRootContext(rootContext);
              }

            if (rootContext.flags & 2
            /* FlushPlayers */
            ) {
                rootContext.flags &= ~2
                /* FlushPlayers */
                ;
                var playerHandler = rootContext.playerHandler;

                if (playerHandler) {
                  playerHandler.flushPlayers();
                }
              }

            rootContext.clean = _CLEAN_PROMISE;
            res(null);
          });
        }
      }

      function tickRootContext(rootContext) {
        for (var i = 0; i < rootContext.components.length; i++) {
          var rootComponent = rootContext.components[i];
          var lView = readPatchedLView(rootComponent);
          var tView = lView[TVIEW];
          renderComponentOrTemplate(tView, lView, tView.template, rootComponent);
        }
      }

      function detectChangesInternal(tView, lView, context) {
        var rendererFactory = lView[RENDERER_FACTORY];
        if (rendererFactory.begin) rendererFactory.begin();

        try {
          refreshView(tView, lView, tView.template, context);
        } catch (error) {
          handleError(lView, error);
          throw error;
        } finally {
          if (rendererFactory.end) rendererFactory.end();
        }
      }
      /**
       * Synchronously perform change detection on a root view and its components.
       *
       * @param lView The view which the change detection should be performed on.
       */


      function detectChangesInRootView(lView) {
        tickRootContext(lView[CONTEXT]);
      }

      function checkNoChangesInternal(tView, view, context) {
        setIsInCheckNoChangesMode(true);

        try {
          detectChangesInternal(tView, view, context);
        } finally {
          setIsInCheckNoChangesMode(false);
        }
      }
      /**
       * Checks the change detector on a root view and its components, and throws if any changes are
       * detected.
       *
       * This is used in development mode to verify that running change detection doesn't
       * introduce other changes.
       *
       * @param lView The view which the change detection should be checked on.
       */


      function checkNoChangesInRootView(lView) {
        setIsInCheckNoChangesMode(true);

        try {
          detectChangesInRootView(lView);
        } finally {
          setIsInCheckNoChangesMode(false);
        }
      }

      function executeViewQueryFn(flags, viewQueryFn, component) {
        ngDevMode && assertDefined(viewQueryFn, 'View queries function to execute must be defined.');
        setCurrentQueryIndex(0);
        viewQueryFn(flags, component);
      } ///////////////////////////////
      //// Bindings & interpolations
      ///////////////////////////////

      /**
       * Stores meta-data for a property binding to be used by TestBed's `DebugElement.properties`.
       *
       * In order to support TestBed's `DebugElement.properties` we need to save, for each binding:
       * - a bound property name;
       * - a static parts of interpolated strings;
       *
       * A given property metadata is saved at the binding's index in the `TView.data` (in other words, a
       * property binding metadata will be stored in `TView.data` at the same index as a bound value in
       * `LView`). Metadata are represented as `INTERPOLATION_DELIMITER`-delimited string with the
       * following format:
       * - `propertyName` for bound properties;
       * - `propertyName�prefix�interpolation_static_part1�..interpolation_static_partN�suffix` for
       * interpolated properties.
       *
       * @param tData `TData` where meta-data will be saved;
       * @param tNode `TNode` that is a target of the binding;
       * @param propertyName bound property name;
       * @param bindingIndex binding index in `LView`
       * @param interpolationParts static interpolation parts (for property interpolations)
       */


      function storePropertyBindingMetadata(tData, tNode, propertyName, bindingIndex) {
        // Binding meta-data are stored only the first time a given property instruction is processed.
        // Since we don't have a concept of the "first update pass" we need to check for presence of the
        // binding meta-data to decide if one should be stored (or if was stored already).
        if (tData[bindingIndex] === null) {
          if (tNode.inputs == null || !tNode.inputs[propertyName]) {
            var propBindingIdxs = tNode.propertyBindings || (tNode.propertyBindings = []);
            propBindingIdxs.push(bindingIndex);
            var bindingMetadata = propertyName;

            for (var _len51 = arguments.length, interpolationParts = new Array(_len51 > 4 ? _len51 - 4 : 0), _key53 = 4; _key53 < _len51; _key53++) {
              interpolationParts[_key53 - 4] = arguments[_key53];
            }

            if (interpolationParts.length > 0) {
              bindingMetadata += INTERPOLATION_DELIMITER + interpolationParts.join(INTERPOLATION_DELIMITER);
            }

            tData[bindingIndex] = bindingMetadata;
          }
        }
      }

      var CLEAN_PROMISE = _CLEAN_PROMISE;

      function getOrCreateLViewCleanup(view) {
        // top level variables should not be exported for performance reasons (PERF_NOTES.md)
        return view[CLEANUP] || (view[CLEANUP] = ngDevMode ? new LCleanup() : []);
      }

      function getOrCreateTViewCleanup(tView) {
        return tView.cleanup || (tView.cleanup = ngDevMode ? new TCleanup() : []);
      }
      /**
       * There are cases where the sub component's renderer needs to be included
       * instead of the current renderer (see the componentSyntheticHost* instructions).
       */


      function loadComponentRenderer(currentDef, tNode, lView) {
        // TODO(FW-2043): the `currentDef` is null when host bindings are invoked while creating root
        // component (see packages/core/src/render3/component.ts). This is not consistent with the process
        // of creating inner components, when current directive index is available in the state. In order
        // to avoid relying on current def being `null` (thus special-casing root component creation), the
        // process of creating root component should be unified with the process of creating inner
        // components.
        if (currentDef === null || isComponentDef(currentDef)) {
          lView = unwrapLView(lView[tNode.index]);
        }

        return lView[RENDERER];
      }
      /** Handles an error thrown in an LView. */


      function handleError(lView, error) {
        var injector = lView[INJECTOR];
        var errorHandler = injector ? injector.get(ErrorHandler, null) : null;
        errorHandler && errorHandler.handleError(error);
      }
      /**
       * Set the inputs of directives at the current node to corresponding value.
       *
       * @param tView The current TView
       * @param lView the `LView` which contains the directives.
       * @param inputs mapping between the public "input" name and privately-known,
       *        possibly minified, property names to write to.
       * @param value Value to set.
       */


      function setInputsForProperty(tView, lView, inputs, publicName, value) {
        for (var i = 0; i < inputs.length;) {
          var index = inputs[i++];
          var privateName = inputs[i++];
          var instance = lView[index];
          ngDevMode && assertIndexInRange(lView, index);
          var def = tView.data[index];

          if (def.setInput !== null) {
            def.setInput(instance, value, publicName, privateName);
          } else {
            instance[privateName] = value;
          }
        }
      }
      /**
       * Updates a text binding at a given index in a given LView.
       */


      function textBindingInternal(lView, index, value) {
        ngDevMode && assertString(value, 'Value should be a string');
        ngDevMode && assertNotSame(value, NO_CHANGE, 'value should not be NO_CHANGE');
        ngDevMode && assertIndexInRange(lView, index);
        var element = getNativeByIndex(index, lView);
        ngDevMode && assertDefined(element, 'native element should exist');
        updateTextNode(lView[RENDERER], element, value);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Compute the static styling (class/style) from `TAttributes`.
       *
       * This function should be called during `firstCreatePass` only.
       *
       * @param tNode The `TNode` into which the styling information should be loaded.
       * @param attrs `TAttributes` containing the styling information.
       * @param writeToHost Where should the resulting static styles be written?
       *   - `false` Write to `TNode.stylesWithoutHost` / `TNode.classesWithoutHost`
       *   - `true` Write to `TNode.styles` / `TNode.classes`
       */


      function computeStaticStyling(tNode, attrs, writeToHost) {
        ngDevMode && assertFirstCreatePass(getTView(), 'Expecting to be called in first template pass only');
        var styles = writeToHost ? tNode.styles : null;
        var classes = writeToHost ? tNode.classes : null;
        var mode = 0;

        if (attrs !== null) {
          for (var i = 0; i < attrs.length; i++) {
            var value = attrs[i];

            if (typeof value === 'number') {
              mode = value;
            } else if (mode == 1
            /* Classes */
            ) {
                classes = concatStringsWithSpace(classes, value);
              } else if (mode == 2
            /* Styles */
            ) {
                var style = value;
                var styleValue = attrs[++i];
                styles = concatStringsWithSpace(styles, style + ': ' + styleValue + ';');
              }
          }
        }

        writeToHost ? tNode.styles = styles : tNode.stylesWithoutHost = styles;
        writeToHost ? tNode.classes = classes : tNode.classesWithoutHost = classes;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Synchronously perform change detection on a component (and possibly its sub-components).
       *
       * This function triggers change detection in a synchronous way on a component.
       *
       * @param component The component which the change detection should be performed on.
       */


      function detectChanges(component) {
        var view = getComponentViewByInstance(component);
        detectChangesInternal(view[TVIEW], view, component);
      }
      /**
       * Marks the component as dirty (needing change detection). Marking a component dirty will
       * schedule a change detection on it at some point in the future.
       *
       * Marking an already dirty component as dirty won't do anything. Only one outstanding change
       * detection can be scheduled per component tree.
       *
       * @param component Component to mark as dirty.
       */


      function markDirty(component) {
        ngDevMode && assertDefined(component, 'component');
        var rootView = markViewDirty(getComponentViewByInstance(component));
        ngDevMode && assertDefined(rootView[CONTEXT], 'rootContext should be defined');
        scheduleTick(rootView[CONTEXT], 1
        /* DetectChanges */
        );
      }
      /**
       * Used to perform change detection on the whole application.
       *
       * This is equivalent to `detectChanges`, but invoked on root component. Additionally, `tick`
       * executes lifecycle hooks and conditionally checks components based on their
       * `ChangeDetectionStrategy` and dirtiness.
       *
       * The preferred way to trigger change detection is to call `markDirty`. `markDirty` internally
       * schedules `tick` using a scheduler in order to coalesce multiple `markDirty` calls into a
       * single change detection run. By default, the scheduler is `requestAnimationFrame`, but can
       * be changed when calling `renderComponent` and providing the `scheduler` option.
       */


      function tick(component) {
        var rootView = getRootView(component);
        var rootContext = rootView[CONTEXT];
        tickRootContext(rootContext);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * An InjectionToken that gets the current `Injector` for `createInjector()`-style injectors.
       *
       * Requesting this token instead of `Injector` allows `StaticInjector` to be tree-shaken from a
       * project.
       *
       * @publicApi
       */


      var INJECTOR$1 = new InjectionToken('INJECTOR', // Dissable tslint because this is const enum which gets inlined not top level prop access.
      // tslint:disable-next-line: no-toplevel-property-access
      -1
      /* Injector */
      );
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var NullInjector = /*#__PURE__*/function () {
        function NullInjector() {
          _classCallCheck2(this, NullInjector);
        }

        _createClass2(NullInjector, [{
          key: "get",
          value: function get(token) {
            var notFoundValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : THROW_IF_NOT_FOUND;

            if (notFoundValue === THROW_IF_NOT_FOUND) {
              var error = new Error("NullInjectorError: No provider for ".concat(stringify(token), "!"));
              error.name = 'NullInjectorError';
              throw error;
            }

            return notFoundValue;
          }
        }]);

        return NullInjector;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * An internal token whose presence in an injector indicates that the injector should treat itself
       * as a root scoped injector when processing requests for unknown tokens which may indicate
       * they are provided in the root scope.
       */


      var INJECTOR_SCOPE = new InjectionToken('Set Injector scope.');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Marker which indicates that a value has not yet been created from the factory function.
       */

      var NOT_YET = {};
      /**
       * Marker which indicates that the factory function for a token is in the process of being called.
       *
       * If the injector is asked to inject a token with its value set to CIRCULAR, that indicates
       * injection of a dependency has recursively attempted to inject the original token, and there is
       * a circular dependency among the providers.
       */

      var CIRCULAR = {};
      var EMPTY_ARRAY$1 = [];
      /**
       * A lazily initialized NullInjector.
       */

      var NULL_INJECTOR = undefined;

      function getNullInjector() {
        if (NULL_INJECTOR === undefined) {
          NULL_INJECTOR = new NullInjector();
        }

        return NULL_INJECTOR;
      }
      /**
       * Create a new `Injector` which is configured using a `defType` of `InjectorType<any>`s.
       *
       * @publicApi
       */


      function createInjector(defType) {
        var parent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
        var additionalProviders = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
        var name = arguments.length > 3 ? arguments[3] : undefined;
        var injector = createInjectorWithoutInjectorInstances(defType, parent, additionalProviders, name);

        injector._resolveInjectorDefTypes();

        return injector;
      }
      /**
       * Creates a new injector without eagerly resolving its injector types. Can be used in places
       * where resolving the injector types immediately can lead to an infinite loop. The injector types
       * should be resolved at a later point by calling `_resolveInjectorDefTypes`.
       */


      function createInjectorWithoutInjectorInstances(defType) {
        var parent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
        var additionalProviders = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
        var name = arguments.length > 3 ? arguments[3] : undefined;
        return new R3Injector(defType, additionalProviders, parent || getNullInjector(), name);
      }

      var R3Injector = /*#__PURE__*/function () {
        function R3Injector(def, additionalProviders, parent) {
          var _this712 = this;

          var source = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;

          _classCallCheck2(this, R3Injector);

          this.parent = parent;
          /**
           * Map of tokens to records which contain the instances of those tokens.
           * - `null` value implies that we don't have the record. Used by tree-shakable injectors
           * to prevent further searches.
           */

          this.records = new Map();
          /**
           * The transitive set of `InjectorType`s which define this injector.
           */

          this.injectorDefTypes = new Set();
          /**
           * Set of values instantiated by this injector which contain `ngOnDestroy` lifecycle hooks.
           */

          this.onDestroy = new Set();
          this._destroyed = false;
          var dedupStack = []; // Start off by creating Records for every provider declared in every InjectorType
          // included transitively in additional providers then do the same for `def`. This order is
          // important because `def` may include providers that override ones in additionalProviders.

          additionalProviders && deepForEach(additionalProviders, function (provider) {
            return _this712.processProvider(provider, def, additionalProviders);
          });
          deepForEach([def], function (injectorDef) {
            return _this712.processInjectorType(injectorDef, [], dedupStack);
          }); // Make sure the INJECTOR token provides this injector.

          this.records.set(INJECTOR$1, makeRecord(undefined, this)); // Detect whether this injector has the APP_ROOT_SCOPE token and thus should provide
          // any injectable scoped to APP_ROOT_SCOPE.

          var record = this.records.get(INJECTOR_SCOPE);
          this.scope = record != null ? record.value : null; // Source name, used for debugging

          this.source = source || (typeof def === 'object' ? null : stringify(def));
        }
        /**
         * Flag indicating that this injector was previously destroyed.
         */


        _createClass2(R3Injector, [{
          key: "destroyed",
          get: function get() {
            return this._destroyed;
          }
          /**
           * Destroy the injector and release references to every instance or provider associated with it.
           *
           * Also calls the `OnDestroy` lifecycle hooks of every instance that was created for which a
           * hook was found.
           */

        }, {
          key: "destroy",
          value: function destroy() {
            this.assertNotDestroyed(); // Set destroyed = true first, in case lifecycle hooks re-enter destroy().

            this._destroyed = true;

            try {
              // Call all the lifecycle hooks.
              this.onDestroy.forEach(function (service) {
                return service.ngOnDestroy();
              });
            } finally {
              // Release all references.
              this.records.clear();
              this.onDestroy.clear();
              this.injectorDefTypes.clear();
            }
          }
        }, {
          key: "get",
          value: function get(token) {
            var notFoundValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : THROW_IF_NOT_FOUND;
            var flags = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : InjectFlags.Default;
            this.assertNotDestroyed(); // Set the injection context.

            var previousInjector = setCurrentInjector(this);

            try {
              // Check for the SkipSelf flag.
              if (!(flags & InjectFlags.SkipSelf)) {
                // SkipSelf isn't set, check if the record belongs to this injector.
                var record = this.records.get(token);

                if (record === undefined) {
                  // No record, but maybe the token is scoped to this injector. Look for an injectable
                  // def with a scope matching this injector.
                  var def = couldBeInjectableType(token) && getInjectableDef(token);

                  if (def && this.injectableDefInScope(def)) {
                    // Found an injectable def and it's scoped to this injector. Pretend as if it was here
                    // all along.
                    record = makeRecord(injectableDefOrInjectorDefFactory(token), NOT_YET);
                  } else {
                    record = null;
                  }

                  this.records.set(token, record);
                } // If a record was found, get the instance for it and return it.


                if (record != null
                /* NOT null || undefined */
                ) {
                    return this.hydrate(token, record);
                  }
              } // Select the next injector based on the Self flag - if self is set, the next injector is
              // the NullInjector, otherwise it's the parent.


              var nextInjector = !(flags & InjectFlags.Self) ? this.parent : getNullInjector(); // Set the notFoundValue based on the Optional flag - if optional is set and notFoundValue
              // is undefined, the value is null, otherwise it's the notFoundValue.

              notFoundValue = flags & InjectFlags.Optional && notFoundValue === THROW_IF_NOT_FOUND ? null : notFoundValue;
              return nextInjector.get(token, notFoundValue);
            } catch (e) {
              if (e.name === 'NullInjectorError') {
                var path = e[NG_TEMP_TOKEN_PATH] = e[NG_TEMP_TOKEN_PATH] || [];
                path.unshift(stringify(token));

                if (previousInjector) {
                  // We still have a parent injector, keep throwing
                  throw e;
                } else {
                  // Format & throw the final error message when we don't have any previous injector
                  return catchInjectorError(e, token, 'R3InjectorError', this.source);
                }
              } else {
                throw e;
              }
            } finally {
              // Lastly, clean up the state by restoring the previous injector.
              setCurrentInjector(previousInjector);
            }
          }
          /** @internal */

        }, {
          key: "_resolveInjectorDefTypes",
          value: function _resolveInjectorDefTypes() {
            var _this713 = this;

            this.injectorDefTypes.forEach(function (defType) {
              return _this713.get(defType);
            });
          }
        }, {
          key: "toString",
          value: function toString() {
            var tokens = [],
                records = this.records;
            records.forEach(function (v, token) {
              return tokens.push(stringify(token));
            });
            return "R3Injector[".concat(tokens.join(', '), "]");
          }
        }, {
          key: "assertNotDestroyed",
          value: function assertNotDestroyed() {
            if (this._destroyed) {
              throw new Error('Injector has already been destroyed.');
            }
          }
          /**
           * Add an `InjectorType` or `InjectorTypeWithProviders` and all of its transitive providers
           * to this injector.
           *
           * If an `InjectorTypeWithProviders` that declares providers besides the type is specified,
           * the function will return "true" to indicate that the providers of the type definition need
           * to be processed. This allows us to process providers of injector types after all imports of
           * an injector definition are processed. (following View Engine semantics: see FW-1349)
           */

        }, {
          key: "processInjectorType",
          value: function processInjectorType(defOrWrappedDef, parents, dedupStack) {
            var _this714 = this;

            defOrWrappedDef = resolveForwardRef(defOrWrappedDef);
            if (!defOrWrappedDef) return false; // Either the defOrWrappedDef is an InjectorType (with injector def) or an
            // InjectorDefTypeWithProviders (aka ModuleWithProviders). Detecting either is a megamorphic
            // read, so care is taken to only do the read once.
            // First attempt to read the injector def (`ɵinj`).

            var def = getInjectorDef(defOrWrappedDef); // If that's not present, then attempt to read ngModule from the InjectorDefTypeWithProviders.

            var ngModule = def == null && defOrWrappedDef.ngModule || undefined; // Determine the InjectorType. In the case where `defOrWrappedDef` is an `InjectorType`,
            // then this is easy. In the case of an InjectorDefTypeWithProviders, then the definition type
            // is the `ngModule`.

            var defType = ngModule === undefined ? defOrWrappedDef : ngModule; // Check for circular dependencies.

            if (ngDevMode && parents.indexOf(defType) !== -1) {
              var defName = stringify(defType);
              var path = parents.map(stringify);
              throwCyclicDependencyError(defName, path);
            } // Check for multiple imports of the same module


            var isDuplicate = dedupStack.indexOf(defType) !== -1; // Finally, if defOrWrappedType was an `InjectorDefTypeWithProviders`, then the actual
            // `InjectorDef` is on its `ngModule`.

            if (ngModule !== undefined) {
              def = getInjectorDef(ngModule);
            } // If no definition was found, it might be from exports. Remove it.


            if (def == null) {
              return false;
            } // Add providers in the same way that @NgModule resolution did:
            // First, include providers from any imports.


            if (def.imports != null && !isDuplicate) {
              // Before processing defType's imports, add it to the set of parents. This way, if it ends
              // up deeply importing itself, this can be detected.
              ngDevMode && parents.push(defType); // Add it to the set of dedups. This way we can detect multiple imports of the same module

              dedupStack.push(defType);
              var importTypesWithProviders;

              try {
                deepForEach(def.imports, function (imported) {
                  if (_this714.processInjectorType(imported, parents, dedupStack)) {
                    if (importTypesWithProviders === undefined) importTypesWithProviders = []; // If the processed import is an injector type with providers, we store it in the
                    // list of import types with providers, so that we can process those afterwards.

                    importTypesWithProviders.push(imported);
                  }
                });
              } finally {
                // Remove it from the parents set when finished.
                ngDevMode && parents.pop();
              } // Imports which are declared with providers (TypeWithProviders) need to be processed
              // after all imported modules are processed. This is similar to how View Engine
              // processes/merges module imports in the metadata resolver. See: FW-1349.


              if (importTypesWithProviders !== undefined) {
                var _loop10 = function _loop10(i) {
                  var _importTypesWithProvi = importTypesWithProviders[i],
                      ngModule = _importTypesWithProvi.ngModule,
                      providers = _importTypesWithProvi.providers;
                  deepForEach(providers, function (provider) {
                    return _this714.processProvider(provider, ngModule, providers || EMPTY_ARRAY$1);
                  });
                };

                for (var i = 0; i < importTypesWithProviders.length; i++) {
                  _loop10(i);
                }
              }
            } // Track the InjectorType and add a provider for it. It's important that this is done after the
            // def's imports.


            this.injectorDefTypes.add(defType);
            this.records.set(defType, makeRecord(def.factory, NOT_YET)); // Next, include providers listed on the definition itself.

            var defProviders = def.providers;

            if (defProviders != null && !isDuplicate) {
              var injectorType = defOrWrappedDef;
              deepForEach(defProviders, function (provider) {
                return _this714.processProvider(provider, injectorType, defProviders);
              });
            }

            return ngModule !== undefined && defOrWrappedDef.providers !== undefined;
          }
          /**
           * Process a `SingleProvider` and add it.
           */

        }, {
          key: "processProvider",
          value: function processProvider(provider, ngModuleType, providers) {
            // Determine the token from the provider. Either it's its own token, or has a {provide: ...}
            // property.
            provider = resolveForwardRef(provider);
            var token = isTypeProvider(provider) ? provider : resolveForwardRef(provider && provider.provide); // Construct a `Record` for the provider.

            var record = providerToRecord(provider, ngModuleType, providers);

            if (!isTypeProvider(provider) && provider.multi === true) {
              // If the provider indicates that it's a multi-provider, process it specially.
              // First check whether it's been defined already.
              var multiRecord = this.records.get(token);

              if (multiRecord) {
                // It has. Throw a nice error if
                if (ngDevMode && multiRecord.multi === undefined) {
                  throwMixedMultiProviderError();
                }
              } else {
                multiRecord = makeRecord(undefined, NOT_YET, true);

                multiRecord.factory = function () {
                  return injectArgs(multiRecord.multi);
                };

                this.records.set(token, multiRecord);
              }

              token = provider;
              multiRecord.multi.push(provider);
            } else {
              var existing = this.records.get(token);

              if (ngDevMode && existing && existing.multi !== undefined) {
                throwMixedMultiProviderError();
              }
            }

            this.records.set(token, record);
          }
        }, {
          key: "hydrate",
          value: function hydrate(token, record) {
            if (ngDevMode && record.value === CIRCULAR) {
              throwCyclicDependencyError(stringify(token));
            } else if (record.value === NOT_YET) {
              record.value = CIRCULAR;
              record.value = record.factory();
            }

            if (typeof record.value === 'object' && record.value && hasOnDestroy(record.value)) {
              this.onDestroy.add(record.value);
            }

            return record.value;
          }
        }, {
          key: "injectableDefInScope",
          value: function injectableDefInScope(def) {
            if (!def.providedIn) {
              return false;
            } else if (typeof def.providedIn === 'string') {
              return def.providedIn === 'any' || def.providedIn === this.scope;
            } else {
              return this.injectorDefTypes.has(def.providedIn);
            }
          }
        }]);

        return R3Injector;
      }();

      function injectableDefOrInjectorDefFactory(token) {
        // Most tokens will have an injectable def directly on them, which specifies a factory directly.
        var injectableDef = getInjectableDef(token);
        var factory = injectableDef !== null ? injectableDef.factory : getFactoryDef(token);

        if (factory !== null) {
          return factory;
        } // If the token is an NgModule, it's also injectable but the factory is on its injector def
        // (`ɵinj`)


        var injectorDef = getInjectorDef(token);

        if (injectorDef !== null) {
          return injectorDef.factory;
        } // InjectionTokens should have an injectable def (ɵprov) and thus should be handled above.
        // If it's missing that, it's an error.


        if (token instanceof InjectionToken) {
          throw new Error("Token ".concat(stringify(token), " is missing a \u0275prov definition."));
        } // Undecorated types can sometimes be created if they have no constructor arguments.


        if (token instanceof Function) {
          return getUndecoratedInjectableFactory(token);
        } // There was no way to resolve a factory for this token.


        throw new Error('unreachable');
      }

      function getUndecoratedInjectableFactory(token) {
        // If the token has parameters then it has dependencies that we cannot resolve implicitly.
        var paramLength = token.length;

        if (paramLength > 0) {
          var args = newArray(paramLength, '?');
          throw new Error("Can't resolve all parameters for ".concat(stringify(token), ": (").concat(args.join(', '), ")."));
        } // The constructor function appears to have no parameters.
        // This might be because it inherits from a super-class. In which case, use an injectable
        // def from an ancestor if there is one.
        // Otherwise this really is a simple class with no dependencies, so return a factory that
        // just instantiates the zero-arg constructor.


        var inheritedInjectableDef = getInheritedInjectableDef(token);

        if (inheritedInjectableDef !== null) {
          return function () {
            return inheritedInjectableDef.factory(token);
          };
        } else {
          return function () {
            return new token();
          };
        }
      }

      function providerToRecord(provider, ngModuleType, providers) {
        if (isValueProvider(provider)) {
          return makeRecord(undefined, provider.useValue);
        } else {
          var factory = providerToFactory(provider, ngModuleType, providers);
          return makeRecord(factory, NOT_YET);
        }
      }
      /**
       * Converts a `SingleProvider` into a factory function.
       *
       * @param provider provider to convert to factory
       */


      function providerToFactory(provider, ngModuleType, providers) {
        var factory = undefined;

        if (isTypeProvider(provider)) {
          var unwrappedProvider = resolveForwardRef(provider);
          return getFactoryDef(unwrappedProvider) || injectableDefOrInjectorDefFactory(unwrappedProvider);
        } else {
          if (isValueProvider(provider)) {
            factory = function factory() {
              return resolveForwardRef(provider.useValue);
            };
          } else if (isFactoryProvider(provider)) {
            factory = function factory() {
              return provider.useFactory.apply(provider, _toConsumableArray(injectArgs(provider.deps || [])));
            };
          } else if (isExistingProvider(provider)) {
            factory = function factory() {
              return ɵɵinject(resolveForwardRef(provider.useExisting));
            };
          } else {
            var classRef = resolveForwardRef(provider && (provider.useClass || provider.provide));

            if (ngDevMode && !classRef) {
              throwInvalidProviderError(ngModuleType, providers, provider);
            }

            if (hasDeps(provider)) {
              factory = function factory() {
                return _construct2(classRef, _toConsumableArray(injectArgs(provider.deps)));
              };
            } else {
              return getFactoryDef(classRef) || injectableDefOrInjectorDefFactory(classRef);
            }
          }
        }

        return factory;
      }

      function makeRecord(factory, value) {
        var multi = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
        return {
          factory: factory,
          value: value,
          multi: multi ? [] : undefined
        };
      }

      function isValueProvider(value) {
        return value !== null && typeof value == 'object' && USE_VALUE in value;
      }

      function isExistingProvider(value) {
        return !!(value && value.useExisting);
      }

      function isFactoryProvider(value) {
        return !!(value && value.useFactory);
      }

      function isTypeProvider(value) {
        return typeof value === 'function';
      }

      function isClassProvider(value) {
        return !!value.useClass;
      }

      function hasDeps(value) {
        return !!value.deps;
      }

      function hasOnDestroy(value) {
        return value !== null && typeof value === 'object' && typeof value.ngOnDestroy === 'function';
      }

      function couldBeInjectableType(value) {
        return typeof value === 'function' || typeof value === 'object' && value instanceof InjectionToken;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function INJECTOR_IMPL__PRE_R3__(providers, parent, name) {
        return new StaticInjector(providers, parent, name);
      }

      function INJECTOR_IMPL__POST_R3__(providers, parent, name) {
        return createInjector({
          name: name
        }, parent, providers, name);
      }

      var INJECTOR_IMPL = INJECTOR_IMPL__POST_R3__;
      /**
       * Concrete injectors implement this interface. Injectors are configured
       * with [providers](guide/glossary#provider) that associate
       * dependencies of various types with [injection tokens](guide/glossary#di-token).
       *
       * @see ["DI Providers"](guide/dependency-injection-providers).
       * @see `StaticProvider`
       *
       * @usageNotes
       *
       *  The following example creates a service injector instance.
       *
       * {@example core/di/ts/provider_spec.ts region='ConstructorProvider'}
       *
       * ### Usage example
       *
       * {@example core/di/ts/injector_spec.ts region='Injector'}
       *
       * `Injector` returns itself when given `Injector` as a token:
       *
       * {@example core/di/ts/injector_spec.ts region='injectInjector'}
       *
       * @publicApi
       */

      var Injector = /*#__PURE__*/function () {
        function Injector() {
          _classCallCheck2(this, Injector);
        }

        _createClass2(Injector, null, [{
          key: "create",
          value: function create(options, parent) {
            if (Array.isArray(options)) {
              return INJECTOR_IMPL(options, parent, '');
            } else {
              return INJECTOR_IMPL(options.providers, options.parent, options.name || '');
            }
          }
        }]);

        return Injector;
      }();

      Injector.THROW_IF_NOT_FOUND = THROW_IF_NOT_FOUND;
      Injector.NULL = new NullInjector();
      /** @nocollapse */

      Injector.ɵprov = ɵɵdefineInjectable({
        token: Injector,
        providedIn: 'any',
        factory: function factory() {
          return ɵɵinject(INJECTOR$1);
        }
      });
      /**
       * @internal
       * @nocollapse
       */

      Injector.__NG_ELEMENT_ID__ = -1
      /* Injector */
      ;

      var IDENT = function IDENT(value) {
        return value;
      };

      var ɵ0$6 = IDENT;
      var EMPTY = [];
      var CIRCULAR$1 = IDENT;

      var MULTI_PROVIDER_FN = function MULTI_PROVIDER_FN() {
        return Array.prototype.slice.call(arguments);
      };

      var ɵ1$1 = MULTI_PROVIDER_FN;
      var NO_NEW_LINE$1 = 'ɵ';

      var StaticInjector = /*#__PURE__*/function () {
        function StaticInjector(providers) {
          var parent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Injector.NULL;
          var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;

          _classCallCheck2(this, StaticInjector);

          this.parent = parent;
          this.source = source;
          var records = this._records = new Map();
          records.set(Injector, {
            token: Injector,
            fn: IDENT,
            deps: EMPTY,
            value: this,
            useNew: false
          });
          records.set(INJECTOR$1, {
            token: INJECTOR$1,
            fn: IDENT,
            deps: EMPTY,
            value: this,
            useNew: false
          });
          this.scope = recursivelyProcessProviders(records, providers);
        }

        _createClass2(StaticInjector, [{
          key: "get",
          value: function get(token, notFoundValue) {
            var flags = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : InjectFlags.Default;
            var records = this._records;
            var record = records.get(token);

            if (record === undefined) {
              // This means we have never seen this record, see if it is tree shakable provider.
              var injectableDef = getInjectableDef(token);

              if (injectableDef) {
                var providedIn = injectableDef && injectableDef.providedIn;

                if (providedIn === 'any' || providedIn != null && providedIn === this.scope) {
                  records.set(token, record = resolveProvider({
                    provide: token,
                    useFactory: injectableDef.factory,
                    deps: EMPTY
                  }));
                }
              }

              if (record === undefined) {
                // Set record to null to make sure that we don't go through expensive lookup above again.
                records.set(token, null);
              }
            }

            var lastInjector = setCurrentInjector(this);

            try {
              return tryResolveToken(token, record, records, this.parent, notFoundValue, flags);
            } catch (e) {
              return catchInjectorError(e, token, 'StaticInjectorError', this.source);
            } finally {
              setCurrentInjector(lastInjector);
            }
          }
        }, {
          key: "toString",
          value: function toString() {
            var tokens = [],
                records = this._records;
            records.forEach(function (v, token) {
              return tokens.push(stringify(token));
            });
            return "StaticInjector[".concat(tokens.join(', '), "]");
          }
        }]);

        return StaticInjector;
      }();

      function resolveProvider(provider) {
        var deps = computeDeps(provider);
        var fn = IDENT;
        var value = EMPTY;
        var useNew = false;
        var provide = resolveForwardRef(provider.provide);

        if (USE_VALUE in provider) {
          // We need to use USE_VALUE in provider since provider.useValue could be defined as undefined.
          value = provider.useValue;
        } else if (provider.useFactory) {
          fn = provider.useFactory;
        } else if (provider.useExisting) {// Just use IDENT
        } else if (provider.useClass) {
          useNew = true;
          fn = resolveForwardRef(provider.useClass);
        } else if (typeof provide == 'function') {
          useNew = true;
          fn = provide;
        } else {
          throw staticError('StaticProvider does not have [useValue|useFactory|useExisting|useClass] or [provide] is not newable', provider);
        }

        return {
          deps: deps,
          fn: fn,
          useNew: useNew,
          value: value
        };
      }

      function multiProviderMixError(token) {
        return staticError('Cannot mix multi providers and regular providers', token);
      }

      function recursivelyProcessProviders(records, provider) {
        var scope = null;

        if (provider) {
          provider = resolveForwardRef(provider);

          if (Array.isArray(provider)) {
            // if we have an array recurse into the array
            for (var i = 0; i < provider.length; i++) {
              scope = recursivelyProcessProviders(records, provider[i]) || scope;
            }
          } else if (typeof provider === 'function') {
            // Functions were supported in ReflectiveInjector, but are not here. For safety give useful
            // error messages
            throw staticError('Function/Class not supported', provider);
          } else if (provider && typeof provider === 'object' && provider.provide) {
            // At this point we have what looks like a provider: {provide: ?, ....}
            var token = resolveForwardRef(provider.provide);
            var resolvedProvider = resolveProvider(provider);

            if (provider.multi === true) {
              // This is a multi provider.
              var multiProvider = records.get(token);

              if (multiProvider) {
                if (multiProvider.fn !== MULTI_PROVIDER_FN) {
                  throw multiProviderMixError(token);
                }
              } else {
                // Create a placeholder factory which will look up the constituents of the multi provider.
                records.set(token, multiProvider = {
                  token: provider.provide,
                  deps: [],
                  useNew: false,
                  fn: MULTI_PROVIDER_FN,
                  value: EMPTY
                });
              } // Treat the provider as the token.


              token = provider;
              multiProvider.deps.push({
                token: token,
                options: 6
                /* Default */

              });
            }

            var record = records.get(token);

            if (record && record.fn == MULTI_PROVIDER_FN) {
              throw multiProviderMixError(token);
            }

            if (token === INJECTOR_SCOPE) {
              scope = resolvedProvider.value;
            }

            records.set(token, resolvedProvider);
          } else {
            throw staticError('Unexpected provider', provider);
          }
        }

        return scope;
      }

      function tryResolveToken(token, record, records, parent, notFoundValue, flags) {
        try {
          return resolveToken(token, record, records, parent, notFoundValue, flags);
        } catch (e) {
          // ensure that 'e' is of type Error.
          if (!(e instanceof Error)) {
            e = new Error(e);
          }

          var path = e[NG_TEMP_TOKEN_PATH] = e[NG_TEMP_TOKEN_PATH] || [];
          path.unshift(token);

          if (record && record.value == CIRCULAR$1) {
            // Reset the Circular flag.
            record.value = EMPTY;
          }

          throw e;
        }
      }

      function resolveToken(token, record, records, parent, notFoundValue, flags) {
        var value;

        if (record && !(flags & InjectFlags.SkipSelf)) {
          // If we don't have a record, this implies that we don't own the provider hence don't know how
          // to resolve it.
          value = record.value;

          if (value == CIRCULAR$1) {
            throw Error(NO_NEW_LINE$1 + 'Circular dependency');
          } else if (value === EMPTY) {
            record.value = CIRCULAR$1;
            var obj = undefined;
            var useNew = record.useNew;
            var fn = record.fn;
            var depRecords = record.deps;
            var deps = EMPTY;

            if (depRecords.length) {
              deps = [];

              for (var i = 0; i < depRecords.length; i++) {
                var depRecord = depRecords[i];
                var options = depRecord.options;
                var childRecord = options & 2
                /* CheckSelf */
                ? records.get(depRecord.token) : undefined;
                deps.push(tryResolveToken( // Current Token to resolve
                depRecord.token, // A record which describes how to resolve the token.
                // If undefined, this means we don't have such a record
                childRecord, // Other records we know about.
                records, // If we don't know how to resolve dependency and we should not check parent for it,
                // than pass in Null injector.
                !childRecord && !(options & 4
                /* CheckParent */
                ) ? Injector.NULL : parent, options & 1
                /* Optional */
                ? null : Injector.THROW_IF_NOT_FOUND, InjectFlags.Default));
              }
            }

            record.value = value = useNew ? _construct2(fn, _toConsumableArray(deps)) : fn.apply(obj, deps);
          }
        } else if (!(flags & InjectFlags.Self)) {
          value = parent.get(token, notFoundValue, InjectFlags.Default);
        } else if (!(flags & InjectFlags.Optional)) {
          value = Injector.NULL.get(token, notFoundValue);
        } else {
          value = Injector.NULL.get(token, typeof notFoundValue !== 'undefined' ? notFoundValue : null);
        }

        return value;
      }

      function computeDeps(provider) {
        var deps = EMPTY;
        var providerDeps = provider.deps;

        if (providerDeps && providerDeps.length) {
          deps = [];

          for (var i = 0; i < providerDeps.length; i++) {
            var options = 6
            /* Default */
            ;
            var token = resolveForwardRef(providerDeps[i]);

            if (Array.isArray(token)) {
              for (var j = 0, annotations = token; j < annotations.length; j++) {
                var annotation = annotations[j];

                if (annotation instanceof Optional || annotation == Optional) {
                  options = options | 1
                  /* Optional */
                  ;
                } else if (annotation instanceof SkipSelf || annotation == SkipSelf) {
                  options = options & ~2
                  /* CheckSelf */
                  ;
                } else if (annotation instanceof Self || annotation == Self) {
                  options = options & ~4
                  /* CheckParent */
                  ;
                } else if (annotation instanceof Inject) {
                  token = annotation.token;
                } else {
                  token = resolveForwardRef(annotation);
                }
              }
            }

            deps.push({
              token: token,
              options: options
            });
          }
        } else if (provider.useExisting) {
          var _token = resolveForwardRef(provider.useExisting);

          deps = [{
            token: _token,
            options: 6
            /* Default */

          }];
        } else if (!providerDeps && !(USE_VALUE in provider)) {
          // useValue & useExisting are the only ones which are exempt from deps all others need it.
          throw staticError('\'deps\' required', provider);
        }

        return deps;
      }

      function staticError(text, obj) {
        return new Error(formatError(text, obj, 'StaticInjectorError'));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Retrieves the component instance associated with a given DOM element.
       *
       * @usageNotes
       * Given the following DOM structure:
       * ```html
       * <my-app>
       *   <div>
       *     <child-comp></child-comp>
       *   </div>
       * </my-app>
       * ```
       * Calling `getComponent` on `<child-comp>` will return the instance of `ChildComponent`
       * associated with this DOM element.
       *
       * Calling the function on `<my-app>` will return the `MyApp` instance.
       *
       *
       * @param element DOM element from which the component should be retrieved.
       * @returns Component instance associated with the element or `null` if there
       *    is no component associated with it.
       *
       * @publicApi
       * @globalApi ng
       */


      function getComponent(element) {
        assertDomElement(element);
        var context = loadLContext(element, false);
        if (context === null) return null;

        if (context.component === undefined) {
          context.component = getComponentAtNodeIndex(context.nodeIndex, context.lView);
        }

        return context.component;
      }
      /**
       * If inside an embedded view (e.g. `*ngIf` or `*ngFor`), retrieves the context of the embedded
       * view that the element is part of. Otherwise retrieves the instance of the component whose view
       * owns the element (in this case, the result is the same as calling `getOwningComponent`).
       *
       * @param element Element for which to get the surrounding component instance.
       * @returns Instance of the component that is around the element or null if the element isn't
       *    inside any component.
       *
       * @publicApi
       * @globalApi ng
       */


      function getContext(element) {
        assertDomElement(element);
        var context = loadLContext(element, false);
        return context === null ? null : context.lView[CONTEXT];
      }
      /**
       * Retrieves the component instance whose view contains the DOM element.
       *
       * For example, if `<child-comp>` is used in the template of `<app-comp>`
       * (i.e. a `ViewChild` of `<app-comp>`), calling `getOwningComponent` on `<child-comp>`
       * would return `<app-comp>`.
       *
       * @param elementOrDir DOM element, component or directive instance
       *    for which to retrieve the root components.
       * @returns Component instance whose view owns the DOM element or null if the element is not
       *    part of a component view.
       *
       * @publicApi
       * @globalApi ng
       */


      function getOwningComponent(elementOrDir) {
        var context = loadLContext(elementOrDir, false);
        if (context === null) return null;
        var lView = context.lView;
        var parent;
        ngDevMode && assertLView(lView);

        while (lView[TVIEW].type === 2
        /* Embedded */
        && (parent = getLViewParent(lView))) {
          lView = parent;
        }

        return lView[FLAGS] & 512
        /* IsRoot */
        ? null : lView[CONTEXT];
      }
      /**
       * Retrieves all root components associated with a DOM element, directive or component instance.
       * Root components are those which have been bootstrapped by Angular.
       *
       * @param elementOrDir DOM element, component or directive instance
       *    for which to retrieve the root components.
       * @returns Root components associated with the target object.
       *
       * @publicApi
       * @globalApi ng
       */


      function getRootComponents(elementOrDir) {
        return _toConsumableArray(getRootContext(elementOrDir).components);
      }
      /**
       * Retrieves an `Injector` associated with an element, component or directive instance.
       *
       * @param elementOrDir DOM element, component or directive instance for which to
       *    retrieve the injector.
       * @returns Injector associated with the element, component or directive instance.
       *
       * @publicApi
       * @globalApi ng
       */


      function getInjector(elementOrDir) {
        var context = loadLContext(elementOrDir, false);
        if (context === null) return Injector.NULL;
        var tNode = context.lView[TVIEW].data[context.nodeIndex];
        return new NodeInjector(tNode, context.lView);
      }
      /**
       * Retrieve a set of injection tokens at a given DOM node.
       *
       * @param element Element for which the injection tokens should be retrieved.
       */


      function getInjectionTokens(element) {
        var context = loadLContext(element, false);
        if (context === null) return [];
        var lView = context.lView;
        var tView = lView[TVIEW];
        var tNode = tView.data[context.nodeIndex];
        var providerTokens = [];
        var startIndex = tNode.providerIndexes & 1048575
        /* ProvidersStartIndexMask */
        ;
        var endIndex = tNode.directiveEnd;

        for (var i = startIndex; i < endIndex; i++) {
          var value = tView.data[i];

          if (isDirectiveDefHack(value)) {
            // The fact that we sometimes store Type and sometimes DirectiveDef in this location is a
            // design flaw.  We should always store same type so that we can be monomorphic. The issue
            // is that for Components/Directives we store the def instead the type. The correct behavior
            // is that we should always be storing injectable type in this location.
            value = value.type;
          }

          providerTokens.push(value);
        }

        return providerTokens;
      }
      /**
       * Retrieves directive instances associated with a given DOM element. Does not include
       * component instances.
       *
       * @usageNotes
       * Given the following DOM structure:
       * ```
       * <my-app>
       *   <button my-button></button>
       *   <my-comp></my-comp>
       * </my-app>
       * ```
       * Calling `getDirectives` on `<button>` will return an array with an instance of the `MyButton`
       * directive that is associated with the DOM element.
       *
       * Calling `getDirectives` on `<my-comp>` will return an empty array.
       *
       * @param element DOM element for which to get the directives.
       * @returns Array of directives associated with the element.
       *
       * @publicApi
       * @globalApi ng
       */


      function getDirectives(element) {
        var context = loadLContext(element);

        if (context.directives === undefined) {
          context.directives = getDirectivesAtNodeIndex(context.nodeIndex, context.lView, false);
        } // The `directives` in this case are a named array called `LComponentView`. Clone the
        // result so we don't expose an internal data structure in the user's console.


        return context.directives === null ? [] : _toConsumableArray(context.directives);
      }

      function loadLContext(target) {
        var throwOnNotFound = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
        var context = getLContext(target);

        if (!context && throwOnNotFound) {
          throw new Error(ngDevMode ? "Unable to find context associated with ".concat(stringifyForError(target)) : 'Invalid ng target');
        }

        return context;
      }
      /**
       * Retrieve map of local references.
       *
       * The references are retrieved as a map of local reference name to element or directive instance.
       *
       * @param target DOM element, component or directive instance for which to retrieve
       *    the local references.
       */


      function getLocalRefs(target) {
        var context = loadLContext(target, false);
        if (context === null) return {};

        if (context.localRefs === undefined) {
          context.localRefs = discoverLocalRefs(context.lView, context.nodeIndex);
        }

        return context.localRefs || {};
      }
      /**
       * Retrieves the host element of a component or directive instance.
       * The host element is the DOM element that matched the selector of the directive.
       *
       * @param componentOrDirective Component or directive instance for which the host
       *     element should be retrieved.
       * @returns Host element of the target.
       *
       * @publicApi
       * @globalApi ng
       */


      function getHostElement(componentOrDirective) {
        return getLContext(componentOrDirective)["native"];
      }
      /**
       * Retrieves the rendered text for a given component.
       *
       * This function retrieves the host element of a component and
       * and then returns the `textContent` for that element. This implies
       * that the text returned will include re-projected content of
       * the component as well.
       *
       * @param component The component to return the content text for.
       */


      function getRenderedText(component) {
        var hostElement = getHostElement(component);
        return hostElement.textContent || '';
      }

      function loadLContextFromNode(node) {
        if (!(node instanceof Node)) throw new Error('Expecting instance of DOM Element');
        return loadLContext(node);
      }
      /**
       * Retrieves a list of event listeners associated with a DOM element. The list does include host
       * listeners, but it does not include event listeners defined outside of the Angular context
       * (e.g. through `addEventListener`).
       *
       * @usageNotes
       * Given the following DOM structure:
       * ```
       * <my-app>
       *   <div (click)="doSomething()"></div>
       * </my-app>
       *
       * ```
       * Calling `getListeners` on `<div>` will return an object that looks as follows:
       * ```
       * {
       *   name: 'click',
       *   element: <div>,
       *   callback: () => doSomething(),
       *   useCapture: false
       * }
       * ```
       *
       * @param element Element for which the DOM listeners should be retrieved.
       * @returns Array of event listeners on the DOM element.
       *
       * @publicApi
       * @globalApi ng
       */


      function getListeners(element) {
        assertDomElement(element);
        var lContext = loadLContext(element, false);
        if (lContext === null) return [];
        var lView = lContext.lView;
        var tView = lView[TVIEW];
        var lCleanup = lView[CLEANUP];
        var tCleanup = tView.cleanup;
        var listeners = [];

        if (tCleanup && lCleanup) {
          for (var i = 0; i < tCleanup.length;) {
            var firstParam = tCleanup[i++];
            var secondParam = tCleanup[i++];

            if (typeof firstParam === 'string') {
              var name = firstParam;
              var listenerElement = unwrapRNode(lView[secondParam]);
              var callback = lCleanup[tCleanup[i++]];
              var useCaptureOrIndx = tCleanup[i++]; // if useCaptureOrIndx is boolean then report it as is.
              // if useCaptureOrIndx is positive number then it in unsubscribe method
              // if useCaptureOrIndx is negative number then it is a Subscription

              var type = typeof useCaptureOrIndx === 'boolean' || useCaptureOrIndx >= 0 ? 'dom' : 'output';
              var useCapture = typeof useCaptureOrIndx === 'boolean' ? useCaptureOrIndx : false;

              if (element == listenerElement) {
                listeners.push({
                  element: element,
                  name: name,
                  callback: callback,
                  useCapture: useCapture,
                  type: type
                });
              }
            }
          }
        }

        listeners.sort(sortListeners);
        return listeners;
      }

      function sortListeners(a, b) {
        if (a.name == b.name) return 0;
        return a.name < b.name ? -1 : 1;
      }
      /**
       * This function should not exist because it is megamorphic and only mostly correct.
       *
       * See call site for more info.
       */


      function isDirectiveDefHack(obj) {
        return obj.type !== undefined && obj.template !== undefined && obj.declaredInputs !== undefined;
      }
      /**
       * Returns the attached `DebugNode` instance for an element in the DOM.
       *
       * @param element DOM element which is owned by an existing component's view.
       */


      function getDebugNode(element) {
        var debugNode = null;
        var lContext = loadLContextFromNode(element);
        var lView = lContext.lView;
        var nodeIndex = lContext.nodeIndex;

        if (nodeIndex !== -1) {
          var valueInLView = lView[nodeIndex]; // this means that value in the lView is a component with its own
          // data. In this situation the TNode is not accessed at the same spot.

          var tNode = isLView(valueInLView) ? valueInLView[T_HOST] : getTNode(lView[TVIEW], nodeIndex);
          ngDevMode && assertEqual(tNode.index, nodeIndex, 'Expecting that TNode at index is same as index');
          debugNode = buildDebugNode(tNode, lView);
        }

        return debugNode;
      }
      /**
       * Retrieve the component `LView` from component/element.
       *
       * NOTE: `LView` is a private and should not be leaked outside.
       *       Don't export this method to `ng.*` on window.
       *
       * @param target DOM element or component instance for which to retrieve the LView.
       */


      function getComponentLView(target) {
        var lContext = loadLContext(target);
        var nodeIndx = lContext.nodeIndex;
        var lView = lContext.lView;
        var componentLView = lView[nodeIndx];
        ngDevMode && assertLView(componentLView);
        return componentLView;
      }
      /** Asserts that a value is a DOM Element. */


      function assertDomElement(value) {
        if (typeof Element !== 'undefined' && !(value instanceof Element)) {
          throw new Error('Expecting instance of DOM Element');
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Marks a component for check (in case of OnPush components) and synchronously
       * performs change detection on the application this component belongs to.
       *
       * @param component Component to {@link ChangeDetectorRef#markForCheck mark for check}.
       *
       * @publicApi
       * @globalApi ng
       */


      function applyChanges(component) {
        markDirty(component);
        getRootComponents(component).forEach(function (rootComponent) {
          return detectChanges(rootComponent);
        });
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * This file introduces series of globally accessible debug tools
       * to allow for the Angular debugging story to function.
       *
       * To see this in action run the following command:
       *
       *   bazel run --config=ivy
       *   //packages/core/test/bundling/todo:devserver
       *
       *  Then load `localhost:5432` and start using the console tools.
       */

      /**
       * This value reflects the property on the window where the dev
       * tools are patched (window.ng).
       * */


      var GLOBAL_PUBLISH_EXPANDO_KEY = 'ng';
      var _published = false;
      /**
       * Publishes a collection of default debug tools onto`window.ng`.
       *
       * These functions are available globally when Angular is in development
       * mode and are automatically stripped away from prod mode is on.
       */

      function publishDefaultGlobalUtils() {
        if (!_published) {
          _published = true;
          publishGlobalUtil('getComponent', getComponent);
          publishGlobalUtil('getContext', getContext);
          publishGlobalUtil('getListeners', getListeners);
          publishGlobalUtil('getOwningComponent', getOwningComponent);
          publishGlobalUtil('getHostElement', getHostElement);
          publishGlobalUtil('getInjector', getInjector);
          publishGlobalUtil('getRootComponents', getRootComponents);
          publishGlobalUtil('getDirectives', getDirectives);
          publishGlobalUtil('applyChanges', applyChanges);
        }
      }
      /**
       * Publishes the given function to `window.ng` so that it can be
       * used from the browser console when an application is not in production.
       */


      function publishGlobalUtil(name, fn) {
        if (typeof COMPILED === 'undefined' || !COMPILED) {
          // Note: we can't export `ng` when using closure enhanced optimization as:
          // - closure declares globals itself for minified names, which sometimes clobber our `ng` global
          // - we can't declare a closure extern as the namespace `ng` is already used within Google
          //   for typings for AngularJS (via `goog.provide('ng....')`).
          var w = _global;
          ngDevMode && assertDefined(fn, 'function not defined');

          if (w) {
            var container = w[GLOBAL_PUBLISH_EXPANDO_KEY];

            if (!container) {
              container = w[GLOBAL_PUBLISH_EXPANDO_KEY] = {};
            }

            container[name] = fn;
          }
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ɵ0$7 = function ɵ0$7(token, notFoundValue) {
        throwProviderNotFoundError(token, 'NullInjector');
      }; // TODO: A hack to not pull in the NullInjector from @angular/core.


      var NULL_INJECTOR$1 = {
        get: ɵ0$7
      };
      /**
       * Bootstraps a Component into an existing host element and returns an instance
       * of the component.
       *
       * Use this function to bootstrap a component into the DOM tree. Each invocation
       * of this function will create a separate tree of components, injectors and
       * change detection cycles and lifetimes. To dynamically insert a new component
       * into an existing tree such that it shares the same injection, change detection
       * and object lifetime, use {@link ViewContainer#createComponent}.
       *
       * @param componentType Component to bootstrap
       * @param options Optional parameters which control bootstrapping
       */

      function renderComponent$1(componentType
      /* Type as workaround for: Microsoft/TypeScript/issues/4881 */
      ) {
        var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
        ngDevMode && publishDefaultGlobalUtils();
        ngDevMode && assertComponentType(componentType);
        var rendererFactory = opts.rendererFactory || domRendererFactory3;
        var sanitizer = opts.sanitizer || null;
        var componentDef = getComponentDef(componentType);
        if (componentDef.type != componentType) componentDef.type = componentType; // The first index of the first selector is the tag name.

        var componentTag = componentDef.selectors[0][0];
        var hostRenderer = rendererFactory.createRenderer(null, null);
        var hostRNode = locateHostElement(hostRenderer, opts.host || componentTag, componentDef.encapsulation);
        var rootFlags = componentDef.onPush ? 64
        /* Dirty */
        | 512
        /* IsRoot */
        : 16
        /* CheckAlways */
        | 512
        /* IsRoot */
        ;
        var rootContext = createRootContext(opts.scheduler, opts.playerHandler);
        var renderer = rendererFactory.createRenderer(hostRNode, componentDef);
        var rootTView = createTView(0
        /* Root */
        , null, null, 1, 0, null, null, null, null, null);
        var rootView = createLView(null, rootTView, rootContext, rootFlags, null, null, rendererFactory, renderer, null, opts.injector || null);
        enterView(rootView);
        var component;

        try {
          if (rendererFactory.begin) rendererFactory.begin();
          var componentView = createRootComponentView(hostRNode, componentDef, rootView, rendererFactory, renderer, sanitizer);
          component = createRootComponent(componentView, componentDef, rootView, rootContext, opts.hostFeatures || null); // create mode pass

          renderView(rootTView, rootView, null); // update mode pass

          refreshView(rootTView, rootView, null, null);
        } finally {
          leaveView();
          if (rendererFactory.end) rendererFactory.end();
        }

        return component;
      }
      /**
       * Creates the root component view and the root component node.
       *
       * @param rNode Render host element.
       * @param def ComponentDef
       * @param rootView The parent view where the host node is stored
       * @param rendererFactory Factory to be used for creating child renderers.
       * @param hostRenderer The current renderer
       * @param sanitizer The sanitizer, if provided
       *
       * @returns Component view created
       */


      function createRootComponentView(rNode, def, rootView, rendererFactory, hostRenderer, sanitizer) {
        var tView = rootView[TVIEW];
        var index = HEADER_OFFSET;
        ngDevMode && assertIndexInRange(rootView, index);
        rootView[index] = rNode; // '#host' is added here as we don't know the real host DOM name (we don't want to read it) and at
        // the same time we want to communicate the debug `TNode` that this is a special `TNode`
        // representing a host element.

        var tNode = getOrCreateTNode(tView, index, 2
        /* Element */
        , '#host', null);
        var mergedAttrs = tNode.mergedAttrs = def.hostAttrs;

        if (mergedAttrs !== null) {
          computeStaticStyling(tNode, mergedAttrs, true);

          if (rNode !== null) {
            setUpAttributes(hostRenderer, rNode, mergedAttrs);

            if (tNode.classes !== null) {
              writeDirectClass(hostRenderer, rNode, tNode.classes);
            }

            if (tNode.styles !== null) {
              writeDirectStyle(hostRenderer, rNode, tNode.styles);
            }
          }
        }

        var viewRenderer = rendererFactory.createRenderer(rNode, def);
        var componentView = createLView(rootView, getOrCreateTComponentView(def), null, def.onPush ? 64
        /* Dirty */
        : 16
        /* CheckAlways */
        , rootView[index], tNode, rendererFactory, viewRenderer, sanitizer || null, null);

        if (tView.firstCreatePass) {
          diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, rootView), tView, def.type);
          markAsComponentHost(tView, tNode);
          initTNodeFlags(tNode, rootView.length, 1);
        }

        addToViewTree(rootView, componentView); // Store component view at node index, with node as the HOST

        return rootView[index] = componentView;
      }
      /**
       * Creates a root component and sets it up with features and host bindings. Shared by
       * renderComponent() and ViewContainerRef.createComponent().
       */


      function createRootComponent(componentView, componentDef, rootLView, rootContext, hostFeatures) {
        var tView = rootLView[TVIEW]; // Create directive instance with factory() and store at next index in viewData

        var component = instantiateRootComponent(tView, rootLView, componentDef);
        rootContext.components.push(component);
        componentView[CONTEXT] = component;
        hostFeatures && hostFeatures.forEach(function (feature) {
          return feature(component, componentDef);
        }); // We want to generate an empty QueryList for root content queries for backwards
        // compatibility with ViewEngine.

        if (componentDef.contentQueries) {
          var tNode = getCurrentTNode();
          ngDevMode && assertDefined(tNode, 'TNode expected');
          componentDef.contentQueries(1
          /* Create */
          , component, tNode.directiveStart);
        }

        var rootTNode = getCurrentTNode();
        ngDevMode && assertDefined(rootTNode, 'tNode should have been already created');

        if (tView.firstCreatePass && (componentDef.hostBindings !== null || componentDef.hostAttrs !== null)) {
          setSelectedIndex(rootTNode.index);
          var rootTView = rootLView[TVIEW];
          registerHostBindingOpCodes(rootTView, rootTNode, rootLView, rootTNode.directiveStart, rootTNode.directiveEnd, componentDef);
          invokeHostBindingsInCreationMode(componentDef, component);
        }

        return component;
      }

      function createRootContext(scheduler, playerHandler) {
        return {
          components: [],
          scheduler: scheduler || defaultScheduler,
          clean: CLEAN_PROMISE,
          playerHandler: playerHandler || null,
          flags: 0
          /* Empty */

        };
      }
      /**
       * Used to enable lifecycle hooks on the root component.
       *
       * Include this feature when calling `renderComponent` if the root component
       * you are rendering has lifecycle hooks defined. Otherwise, the hooks won't
       * be called properly.
       *
       * Example:
       *
       * ```
       * renderComponent(AppComponent, {hostFeatures: [LifecycleHooksFeature]});
       * ```
       */


      function LifecycleHooksFeature(component, def) {
        var lView = readPatchedLView(component);
        ngDevMode && assertDefined(lView, 'LView is required');
        var tView = lView[TVIEW];
        var tNode = getCurrentTNode();
        ngDevMode && assertDefined(tNode, 'TNode is required');
        registerPostOrderHooks(tView, tNode);
      }
      /**
       * Wait on component until it is rendered.
       *
       * This function returns a `Promise` which is resolved when the component's
       * change detection is executed. This is determined by finding the scheduler
       * associated with the `component`'s render tree and waiting until the scheduler
       * flushes. If nothing is scheduled, the function returns a resolved promise.
       *
       * Example:
       * ```
       * await whenRendered(myComponent);
       * ```
       *
       * @param component Component to wait upon
       * @returns Promise which resolves when the component is rendered.
       */


      function whenRendered(component) {
        return getRootContext(component).clean;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function getSuperType(type) {
        return Object.getPrototypeOf(type.prototype).constructor;
      }
      /**
       * Merges the definition from a super class to a sub class.
       * @param definition The definition that is a SubClass of another directive of component
       *
       * @codeGenApi
       */


      function ɵɵInheritDefinitionFeature(definition) {
        var superType = getSuperType(definition.type);
        var shouldInheritFields = true;
        var inheritanceChain = [definition];

        while (superType) {
          var superDef = undefined;

          if (isComponentDef(definition)) {
            // Don't use getComponentDef/getDirectiveDef. This logic relies on inheritance.
            superDef = superType.ɵcmp || superType.ɵdir;
          } else {
            if (superType.ɵcmp) {
              throw new Error('Directives cannot inherit Components');
            } // Don't use getComponentDef/getDirectiveDef. This logic relies on inheritance.


            superDef = superType.ɵdir;
          }

          if (superDef) {
            if (shouldInheritFields) {
              inheritanceChain.push(superDef); // Some fields in the definition may be empty, if there were no values to put in them that
              // would've justified object creation. Unwrap them if necessary.

              var writeableDef = definition;
              writeableDef.inputs = maybeUnwrapEmpty(definition.inputs);
              writeableDef.declaredInputs = maybeUnwrapEmpty(definition.declaredInputs);
              writeableDef.outputs = maybeUnwrapEmpty(definition.outputs); // Merge hostBindings

              var superHostBindings = superDef.hostBindings;
              superHostBindings && inheritHostBindings(definition, superHostBindings); // Merge queries

              var superViewQuery = superDef.viewQuery;
              var superContentQueries = superDef.contentQueries;
              superViewQuery && inheritViewQuery(definition, superViewQuery);
              superContentQueries && inheritContentQueries(definition, superContentQueries); // Merge inputs and outputs

              fillProperties(definition.inputs, superDef.inputs);
              fillProperties(definition.declaredInputs, superDef.declaredInputs);
              fillProperties(definition.outputs, superDef.outputs); // Merge animations metadata.
              // If `superDef` is a Component, the `data` field is present (defaults to an empty object).

              if (isComponentDef(superDef) && superDef.data.animation) {
                // If super def is a Component, the `definition` is also a Component, since Directives can
                // not inherit Components (we throw an error above and cannot reach this code).
                var defData = definition.data;
                defData.animation = (defData.animation || []).concat(superDef.data.animation);
              }
            } // Run parent features


            var features = superDef.features;

            if (features) {
              for (var i = 0; i < features.length; i++) {
                var feature = features[i];

                if (feature && feature.ngInherit) {
                  feature(definition);
                } // If `InheritDefinitionFeature` is a part of the current `superDef`, it means that this
                // def already has all the necessary information inherited from its super class(es), so we
                // can stop merging fields from super classes. However we need to iterate through the
                // prototype chain to look for classes that might contain other "features" (like
                // NgOnChanges), which we should invoke for the original `definition`. We set the
                // `shouldInheritFields` flag to indicate that, essentially skipping fields inheritance
                // logic and only invoking functions from the "features" list.


                if (feature === ɵɵInheritDefinitionFeature) {
                  shouldInheritFields = false;
                }
              }
            }
          }

          superType = Object.getPrototypeOf(superType);
        }

        mergeHostAttrsAcrossInheritance(inheritanceChain);
      }
      /**
       * Merge the `hostAttrs` and `hostVars` from the inherited parent to the base class.
       *
       * @param inheritanceChain A list of `WritableDefs` starting at the top most type and listing
       * sub-types in order. For each type take the `hostAttrs` and `hostVars` and merge it with the child
       * type.
       */


      function mergeHostAttrsAcrossInheritance(inheritanceChain) {
        var hostVars = 0;
        var hostAttrs = null; // We process the inheritance order from the base to the leaves here.

        for (var i = inheritanceChain.length - 1; i >= 0; i--) {
          var def = inheritanceChain[i]; // For each `hostVars`, we need to add the superclass amount.

          def.hostVars = hostVars += def.hostVars; // for each `hostAttrs` we need to merge it with superclass.

          def.hostAttrs = mergeHostAttrs(def.hostAttrs, hostAttrs = mergeHostAttrs(hostAttrs, def.hostAttrs));
        }
      }

      function maybeUnwrapEmpty(value) {
        if (value === EMPTY_OBJ) {
          return {};
        } else if (value === EMPTY_ARRAY) {
          return [];
        } else {
          return value;
        }
      }

      function inheritViewQuery(definition, superViewQuery) {
        var prevViewQuery = definition.viewQuery;

        if (prevViewQuery) {
          definition.viewQuery = function (rf, ctx) {
            superViewQuery(rf, ctx);
            prevViewQuery(rf, ctx);
          };
        } else {
          definition.viewQuery = superViewQuery;
        }
      }

      function inheritContentQueries(definition, superContentQueries) {
        var prevContentQueries = definition.contentQueries;

        if (prevContentQueries) {
          definition.contentQueries = function (rf, ctx, directiveIndex) {
            superContentQueries(rf, ctx, directiveIndex);
            prevContentQueries(rf, ctx, directiveIndex);
          };
        } else {
          definition.contentQueries = superContentQueries;
        }
      }

      function inheritHostBindings(definition, superHostBindings) {
        var prevHostBindings = definition.hostBindings;

        if (prevHostBindings) {
          definition.hostBindings = function (rf, ctx) {
            superHostBindings(rf, ctx);
            prevHostBindings(rf, ctx);
          };
        } else {
          definition.hostBindings = superHostBindings;
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Fields which exist on either directive or component definitions, and need to be copied from
       * parent to child classes by the `ɵɵCopyDefinitionFeature`.
       */


      var COPY_DIRECTIVE_FIELDS = [// The child class should use the providers of its parent.
      'providersResolver'];
      /**
       * Fields which exist only on component definitions, and need to be copied from parent to child
       * classes by the `ɵɵCopyDefinitionFeature`.
       *
       * The type here allows any field of `ComponentDef` which is not also a property of `DirectiveDef`,
       * since those should go in `COPY_DIRECTIVE_FIELDS` above.
       */

      var COPY_COMPONENT_FIELDS = [// The child class should use the template function of its parent, including all template
      // semantics.
      'template', 'decls', 'consts', 'vars', 'onPush', 'ngContentSelectors', // The child class should use the CSS styles of its parent, including all styling semantics.
      'styles', 'encapsulation', // The child class should be checked by the runtime in the same way as its parent.
      'schemas'];
      /**
       * Copies the fields not handled by the `ɵɵInheritDefinitionFeature` from the supertype of a
       * definition.
       *
       * This exists primarily to support ngcc migration of an existing View Engine pattern, where an
       * entire decorator is inherited from a parent to a child class. When ngcc detects this case, it
       * generates a skeleton definition on the child class, and applies this feature.
       *
       * The `ɵɵCopyDefinitionFeature` then copies any needed fields from the parent class' definition,
       * including things like the component template function.
       *
       * @param definition The definition of a child class which inherits from a parent class with its
       * own definition.
       *
       * @codeGenApi
       */

      function ɵɵCopyDefinitionFeature(definition) {
        var superType = getSuperType(definition.type);
        var superDef = undefined;

        if (isComponentDef(definition)) {
          // Don't use getComponentDef/getDirectiveDef. This logic relies on inheritance.
          superDef = superType.ɵcmp;
        } else {
          // Don't use getComponentDef/getDirectiveDef. This logic relies on inheritance.
          superDef = superType.ɵdir;
        } // Needed because `definition` fields are readonly.


        var defAny = definition; // Copy over any fields that apply to either directives or components.

        var _iterator75 = _createForOfIteratorHelper(COPY_DIRECTIVE_FIELDS),
            _step74;

        try {
          for (_iterator75.s(); !(_step74 = _iterator75.n()).done;) {
            var _field = _step74.value;
            defAny[_field] = superDef[_field];
          }
        } catch (err) {
          _iterator75.e(err);
        } finally {
          _iterator75.f();
        }

        if (isComponentDef(superDef)) {
          // Copy over any component-specific fields.
          var _iterator76 = _createForOfIteratorHelper(COPY_COMPONENT_FIELDS),
              _step75;

          try {
            for (_iterator76.s(); !(_step75 = _iterator76.n()).done;) {
              var field = _step75.value;
              defAny[field] = superDef[field];
            }
          } catch (err) {
            _iterator76.e(err);
          } finally {
            _iterator76.f();
          }
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var _symbolIterator = null;

      function getSymbolIterator() {
        if (!_symbolIterator) {
          var _Symbol = _global['Symbol'];

          if (_Symbol && _Symbol.iterator) {
            _symbolIterator = _Symbol.iterator;
          } else {
            // es6-shim specific logic
            var keys = Object.getOwnPropertyNames(Map.prototype);

            for (var i = 0; i < keys.length; ++i) {
              var key = keys[i];

              if (key !== 'entries' && key !== 'size' && Map.prototype[key] === Map.prototype['entries']) {
                _symbolIterator = key;
              }
            }
          }
        }

        return _symbolIterator;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function devModeEqual(a, b) {
        var isListLikeIterableA = isListLikeIterable(a);
        var isListLikeIterableB = isListLikeIterable(b);

        if (isListLikeIterableA && isListLikeIterableB) {
          return areIterablesEqual(a, b, devModeEqual);
        } else {
          var isAObject = a && (typeof a === 'object' || typeof a === 'function');
          var isBObject = b && (typeof b === 'object' || typeof b === 'function');

          if (!isListLikeIterableA && isAObject && !isListLikeIterableB && isBObject) {
            return true;
          } else {
            return Object.is(a, b);
          }
        }
      }
      /**
       * Indicates that the result of a {@link Pipe} transformation has changed even though the
       * reference has not changed.
       *
       * Wrapped values are unwrapped automatically during the change detection, and the unwrapped value
       * is stored.
       *
       * Example:
       *
       * ```
       * if (this._latestValue === this._latestReturnedValue) {
       *    return this._latestReturnedValue;
       *  } else {
       *    this._latestReturnedValue = this._latestValue;
       *    return WrappedValue.wrap(this._latestValue); // this will force update
       *  }
       * ```
       *
       * @publicApi
       * @deprecated from v10 stop using. (No replacement, deemed unnecessary.)
       */


      var WrappedValue = /*#__PURE__*/function () {
        function WrappedValue(value) {
          _classCallCheck2(this, WrappedValue);

          this.wrapped = value;
        }
        /** Creates a wrapped value. */


        _createClass2(WrappedValue, null, [{
          key: "wrap",
          value: function wrap(value) {
            return new WrappedValue(value);
          }
          /**
           * Returns the underlying value of a wrapped value.
           * Returns the given `value` when it is not wrapped.
           **/

        }, {
          key: "unwrap",
          value: function unwrap(value) {
            return WrappedValue.isWrapped(value) ? value.wrapped : value;
          }
          /** Returns true if `value` is a wrapped value. */

        }, {
          key: "isWrapped",
          value: function isWrapped(value) {
            return value instanceof WrappedValue;
          }
        }]);

        return WrappedValue;
      }();

      function isListLikeIterable(obj) {
        if (!isJsObject(obj)) return false;
        return Array.isArray(obj) || !(obj instanceof Map) && // JS Map are iterables but return entries as [k, v]
        getSymbolIterator() in obj; // JS Iterable have a Symbol.iterator prop
      }

      function areIterablesEqual(a, b, comparator) {
        var iterator1 = a[getSymbolIterator()]();
        var iterator2 = b[getSymbolIterator()]();

        while (true) {
          var item1 = iterator1.next();
          var item2 = iterator2.next();
          if (item1.done && item2.done) return true;
          if (item1.done || item2.done) return false;
          if (!comparator(item1.value, item2.value)) return false;
        }
      }

      function iterateListLike(obj, fn) {
        if (Array.isArray(obj)) {
          for (var i = 0; i < obj.length; i++) {
            fn(obj[i]);
          }
        } else {
          var iterator = obj[getSymbolIterator()]();
          var item;

          while (!(item = iterator.next()).done) {
            fn(item.value);
          }
        }
      }

      function isJsObject(o) {
        return o !== null && (typeof o === 'function' || typeof o === 'object');
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // TODO(misko): consider inlining

      /** Updates binding and returns the value. */


      function updateBinding(lView, bindingIndex, value) {
        return lView[bindingIndex] = value;
      }
      /** Gets the current binding value. */


      function getBinding(lView, bindingIndex) {
        ngDevMode && assertIndexInRange(lView, bindingIndex);
        ngDevMode && assertNotSame(lView[bindingIndex], NO_CHANGE, 'Stored value should never be NO_CHANGE.');
        return lView[bindingIndex];
      }
      /**
       * Updates binding if changed, then returns whether it was updated.
       *
       * This function also checks the `CheckNoChangesMode` and throws if changes are made.
       * Some changes (Objects/iterables) during `CheckNoChangesMode` are exempt to comply with VE
       * behavior.
       *
       * @param lView current `LView`
       * @param bindingIndex The binding in the `LView` to check
       * @param value New value to check against `lView[bindingIndex]`
       * @returns `true` if the bindings has changed. (Throws if binding has changed during
       *          `CheckNoChangesMode`)
       */


      function bindingUpdated(lView, bindingIndex, value) {
        ngDevMode && assertNotSame(value, NO_CHANGE, 'Incoming value should never be NO_CHANGE.');
        ngDevMode && assertLessThan(bindingIndex, lView.length, "Slot should have been initialized to NO_CHANGE");
        var oldValue = lView[bindingIndex];

        if (Object.is(oldValue, value)) {
          return false;
        } else {
          if (ngDevMode && isInCheckNoChangesMode()) {
            // View engine didn't report undefined values as changed on the first checkNoChanges pass
            // (before the change detection was run).
            var oldValueToCompare = oldValue !== NO_CHANGE ? oldValue : undefined;

            if (!devModeEqual(oldValueToCompare, value)) {
              var details = getExpressionChangedErrorDetails(lView, bindingIndex, oldValueToCompare, value);
              throwErrorIfNoChangesMode(oldValue === NO_CHANGE, details.oldValue, details.newValue, details.propName);
            } // There was a change, but the `devModeEqual` decided that the change is exempt from an error.
            // For this reason we exit as if no change. The early exit is needed to prevent the changed
            // value to be written into `LView` (If we would write the new value that we would not see it
            // as change on next CD.)


            return false;
          }

          lView[bindingIndex] = value;
          return true;
        }
      }
      /** Updates 2 bindings if changed, then returns whether either was updated. */


      function bindingUpdated2(lView, bindingIndex, exp1, exp2) {
        var different = bindingUpdated(lView, bindingIndex, exp1);
        return bindingUpdated(lView, bindingIndex + 1, exp2) || different;
      }
      /** Updates 3 bindings if changed, then returns whether any was updated. */


      function bindingUpdated3(lView, bindingIndex, exp1, exp2, exp3) {
        var different = bindingUpdated2(lView, bindingIndex, exp1, exp2);
        return bindingUpdated(lView, bindingIndex + 2, exp3) || different;
      }
      /** Updates 4 bindings if changed, then returns whether any was updated. */


      function bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4) {
        var different = bindingUpdated2(lView, bindingIndex, exp1, exp2);
        return bindingUpdated2(lView, bindingIndex + 2, exp3, exp4) || different;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Updates the value of or removes a bound attribute on an Element.
       *
       * Used in the case of `[attr.title]="value"`
       *
       * @param name name The name of the attribute.
       * @param value value The attribute is removed when value is `null` or `undefined`.
       *                  Otherwise the attribute value is set to the stringified value.
       * @param sanitizer An optional function used to sanitize the value.
       * @param namespace Optional namespace to use when setting the attribute.
       *
       * @codeGenApi
       */


      function ɵɵattribute(name, value, sanitizer, namespace) {
        var lView = getLView();
        var bindingIndex = nextBindingIndex();

        if (bindingUpdated(lView, bindingIndex, value)) {
          var tView = getTView();
          var tNode = getSelectedTNode();
          elementAttributeInternal(tNode, lView, name, value, sanitizer, namespace);
          ngDevMode && storePropertyBindingMetadata(tView.data, tNode, 'attr.' + name, bindingIndex);
        }

        return ɵɵattribute;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Create interpolation bindings with a variable number of expressions.
       *
       * If there are 1 to 8 expressions `interpolation1()` to `interpolation8()` should be used instead.
       * Those are faster because there is no need to create an array of expressions and iterate over it.
       *
       * `values`:
       * - has static text at even indexes,
       * - has evaluated expressions at odd indexes.
       *
       * Returns the concatenated string when any of the arguments changes, `NO_CHANGE` otherwise.
       */


      function interpolationV(lView, values) {
        ngDevMode && assertLessThan(2, values.length, 'should have at least 3 values');
        ngDevMode && assertEqual(values.length % 2, 1, 'should have an odd number of values');
        var isBindingUpdated = false;
        var bindingIndex = getBindingIndex();

        for (var i = 1; i < values.length; i += 2) {
          // Check if bindings (odd indexes) have changed
          isBindingUpdated = bindingUpdated(lView, bindingIndex++, values[i]) || isBindingUpdated;
        }

        setBindingIndex(bindingIndex);

        if (!isBindingUpdated) {
          return NO_CHANGE;
        } // Build the updated content


        var content = values[0];

        for (var _i32 = 1; _i32 < values.length; _i32 += 2) {
          content += renderStringify(values[_i32]) + values[_i32 + 1];
        }

        return content;
      }
      /**
       * Creates an interpolation binding with 1 expression.
       *
       * @param prefix static value used for concatenation only.
       * @param v0 value checked for change.
       * @param suffix static value used for concatenation only.
       */


      function interpolation1(lView, prefix, v0, suffix) {
        var different = bindingUpdated(lView, nextBindingIndex(), v0);
        return different ? prefix + renderStringify(v0) + suffix : NO_CHANGE;
      }
      /**
       * Creates an interpolation binding with 2 expressions.
       */


      function interpolation2(lView, prefix, v0, i0, v1, suffix) {
        var bindingIndex = getBindingIndex();
        var different = bindingUpdated2(lView, bindingIndex, v0, v1);
        incrementBindingIndex(2);
        return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + suffix : NO_CHANGE;
      }
      /**
       * Creates an interpolation binding with 3 expressions.
       */


      function interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix) {
        var bindingIndex = getBindingIndex();
        var different = bindingUpdated3(lView, bindingIndex, v0, v1, v2);
        incrementBindingIndex(3);
        return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + suffix : NO_CHANGE;
      }
      /**
       * Create an interpolation binding with 4 expressions.
       */


      function interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {
        var bindingIndex = getBindingIndex();
        var different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
        incrementBindingIndex(4);
        return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + suffix : NO_CHANGE;
      }
      /**
       * Creates an interpolation binding with 5 expressions.
       */


      function interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {
        var bindingIndex = getBindingIndex();
        var different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
        different = bindingUpdated(lView, bindingIndex + 4, v4) || different;
        incrementBindingIndex(5);
        return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + suffix : NO_CHANGE;
      }
      /**
       * Creates an interpolation binding with 6 expressions.
       */


      function interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {
        var bindingIndex = getBindingIndex();
        var different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
        different = bindingUpdated2(lView, bindingIndex + 4, v4, v5) || different;
        incrementBindingIndex(6);
        return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + suffix : NO_CHANGE;
      }
      /**
       * Creates an interpolation binding with 7 expressions.
       */


      function interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {
        var bindingIndex = getBindingIndex();
        var different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
        different = bindingUpdated3(lView, bindingIndex + 4, v4, v5, v6) || different;
        incrementBindingIndex(7);
        return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + i5 + renderStringify(v6) + suffix : NO_CHANGE;
      }
      /**
       * Creates an interpolation binding with 8 expressions.
       */


      function interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {
        var bindingIndex = getBindingIndex();
        var different = bindingUpdated4(lView, bindingIndex, v0, v1, v2, v3);
        different = bindingUpdated4(lView, bindingIndex + 4, v4, v5, v6, v7) || different;
        incrementBindingIndex(8);
        return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + i1 + renderStringify(v2) + i2 + renderStringify(v3) + i3 + renderStringify(v4) + i4 + renderStringify(v5) + i5 + renderStringify(v6) + i6 + renderStringify(v7) + suffix : NO_CHANGE;
      }
      /**
       *
       * Update an interpolated attribute on an element with single bound value surrounded by text.
       *
       * Used when the value passed to a property has 1 interpolated value in it:
       *
       * ```html
       * <div attr.title="prefix{{v0}}suffix"></div>
       * ```
       *
       * Its compiled representation is::
       *
       * ```ts
       * ɵɵattributeInterpolate1('title', 'prefix', v0, 'suffix');
       * ```
       *
       * @param attrName The name of the attribute to update
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param sanitizer An optional sanitizer function
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵattributeInterpolate1(attrName, prefix, v0, suffix, sanitizer, namespace) {
        var lView = getLView();
        var interpolatedValue = interpolation1(lView, prefix, v0, suffix);

        if (interpolatedValue !== NO_CHANGE) {
          var tNode = getSelectedTNode();
          elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
          ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 1, prefix, suffix);
        }

        return ɵɵattributeInterpolate1;
      }
      /**
       *
       * Update an interpolated attribute on an element with 2 bound values surrounded by text.
       *
       * Used when the value passed to a property has 2 interpolated values in it:
       *
       * ```html
       * <div attr.title="prefix{{v0}}-{{v1}}suffix"></div>
       * ```
       *
       * Its compiled representation is::
       *
       * ```ts
       * ɵɵattributeInterpolate2('title', 'prefix', v0, '-', v1, 'suffix');
       * ```
       *
       * @param attrName The name of the attribute to update
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param sanitizer An optional sanitizer function
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵattributeInterpolate2(attrName, prefix, v0, i0, v1, suffix, sanitizer, namespace) {
        var lView = getLView();
        var interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);

        if (interpolatedValue !== NO_CHANGE) {
          var tNode = getSelectedTNode();
          elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
          ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 2, prefix, i0, suffix);
        }

        return ɵɵattributeInterpolate2;
      }
      /**
       *
       * Update an interpolated attribute on an element with 3 bound values surrounded by text.
       *
       * Used when the value passed to a property has 3 interpolated values in it:
       *
       * ```html
       * <div attr.title="prefix{{v0}}-{{v1}}-{{v2}}suffix"></div>
       * ```
       *
       * Its compiled representation is::
       *
       * ```ts
       * ɵɵattributeInterpolate3(
       * 'title', 'prefix', v0, '-', v1, '-', v2, 'suffix');
       * ```
       *
       * @param attrName The name of the attribute to update
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param sanitizer An optional sanitizer function
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵattributeInterpolate3(attrName, prefix, v0, i0, v1, i1, v2, suffix, sanitizer, namespace) {
        var lView = getLView();
        var interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);

        if (interpolatedValue !== NO_CHANGE) {
          var tNode = getSelectedTNode();
          elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
          ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 3, prefix, i0, i1, suffix);
        }

        return ɵɵattributeInterpolate3;
      }
      /**
       *
       * Update an interpolated attribute on an element with 4 bound values surrounded by text.
       *
       * Used when the value passed to a property has 4 interpolated values in it:
       *
       * ```html
       * <div attr.title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix"></div>
       * ```
       *
       * Its compiled representation is::
       *
       * ```ts
       * ɵɵattributeInterpolate4(
       * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');
       * ```
       *
       * @param attrName The name of the attribute to update
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param sanitizer An optional sanitizer function
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵattributeInterpolate4(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, suffix, sanitizer, namespace) {
        var lView = getLView();
        var interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);

        if (interpolatedValue !== NO_CHANGE) {
          var tNode = getSelectedTNode();
          elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
          ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 4, prefix, i0, i1, i2, suffix);
        }

        return ɵɵattributeInterpolate4;
      }
      /**
       *
       * Update an interpolated attribute on an element with 5 bound values surrounded by text.
       *
       * Used when the value passed to a property has 5 interpolated values in it:
       *
       * ```html
       * <div attr.title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix"></div>
       * ```
       *
       * Its compiled representation is::
       *
       * ```ts
       * ɵɵattributeInterpolate5(
       * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');
       * ```
       *
       * @param attrName The name of the attribute to update
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param i3 Static value used for concatenation only.
       * @param v4 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param sanitizer An optional sanitizer function
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵattributeInterpolate5(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix, sanitizer, namespace) {
        var lView = getLView();
        var interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);

        if (interpolatedValue !== NO_CHANGE) {
          var tNode = getSelectedTNode();
          elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
          ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 5, prefix, i0, i1, i2, i3, suffix);
        }

        return ɵɵattributeInterpolate5;
      }
      /**
       *
       * Update an interpolated attribute on an element with 6 bound values surrounded by text.
       *
       * Used when the value passed to a property has 6 interpolated values in it:
       *
       * ```html
       * <div attr.title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix"></div>
       * ```
       *
       * Its compiled representation is::
       *
       * ```ts
       * ɵɵattributeInterpolate6(
       *    'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');
       * ```
       *
       * @param attrName The name of the attribute to update
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param i3 Static value used for concatenation only.
       * @param v4 Value checked for change.
       * @param i4 Static value used for concatenation only.
       * @param v5 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param sanitizer An optional sanitizer function
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵattributeInterpolate6(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix, sanitizer, namespace) {
        var lView = getLView();
        var interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);

        if (interpolatedValue !== NO_CHANGE) {
          var tNode = getSelectedTNode();
          elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
          ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 6, prefix, i0, i1, i2, i3, i4, suffix);
        }

        return ɵɵattributeInterpolate6;
      }
      /**
       *
       * Update an interpolated attribute on an element with 7 bound values surrounded by text.
       *
       * Used when the value passed to a property has 7 interpolated values in it:
       *
       * ```html
       * <div attr.title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix"></div>
       * ```
       *
       * Its compiled representation is::
       *
       * ```ts
       * ɵɵattributeInterpolate7(
       *    'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');
       * ```
       *
       * @param attrName The name of the attribute to update
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param i3 Static value used for concatenation only.
       * @param v4 Value checked for change.
       * @param i4 Static value used for concatenation only.
       * @param v5 Value checked for change.
       * @param i5 Static value used for concatenation only.
       * @param v6 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param sanitizer An optional sanitizer function
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵattributeInterpolate7(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix, sanitizer, namespace) {
        var lView = getLView();
        var interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);

        if (interpolatedValue !== NO_CHANGE) {
          var tNode = getSelectedTNode();
          elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
          ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 7, prefix, i0, i1, i2, i3, i4, i5, suffix);
        }

        return ɵɵattributeInterpolate7;
      }
      /**
       *
       * Update an interpolated attribute on an element with 8 bound values surrounded by text.
       *
       * Used when the value passed to a property has 8 interpolated values in it:
       *
       * ```html
       * <div attr.title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix"></div>
       * ```
       *
       * Its compiled representation is::
       *
       * ```ts
       * ɵɵattributeInterpolate8(
       *  'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, 'suffix');
       * ```
       *
       * @param attrName The name of the attribute to update
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param i3 Static value used for concatenation only.
       * @param v4 Value checked for change.
       * @param i4 Static value used for concatenation only.
       * @param v5 Value checked for change.
       * @param i5 Static value used for concatenation only.
       * @param v6 Value checked for change.
       * @param i6 Static value used for concatenation only.
       * @param v7 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param sanitizer An optional sanitizer function
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵattributeInterpolate8(attrName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix, sanitizer, namespace) {
        var lView = getLView();
        var interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);

        if (interpolatedValue !== NO_CHANGE) {
          var tNode = getSelectedTNode();
          elementAttributeInternal(tNode, lView, attrName, interpolatedValue, sanitizer, namespace);
          ngDevMode && storePropertyBindingMetadata(getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - 8, prefix, i0, i1, i2, i3, i4, i5, i6, suffix);
        }

        return ɵɵattributeInterpolate8;
      }
      /**
       * Update an interpolated attribute on an element with 9 or more bound values surrounded by text.
       *
       * Used when the number of interpolated values exceeds 8.
       *
       * ```html
       * <div
       *  title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix"></div>
       * ```
       *
       * Its compiled representation is::
       *
       * ```ts
       * ɵɵattributeInterpolateV(
       *  'title', ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,
       *  'suffix']);
       * ```
       *
       * @param attrName The name of the attribute to update.
       * @param values The collection of values and the strings in-between those values, beginning with
       * a string prefix and ending with a string suffix.
       * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)
       * @param sanitizer An optional sanitizer function
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵattributeInterpolateV(attrName, values, sanitizer, namespace) {
        var lView = getLView();
        var interpolated = interpolationV(lView, values);

        if (interpolated !== NO_CHANGE) {
          var tNode = getSelectedTNode();
          elementAttributeInternal(tNode, lView, attrName, interpolated, sanitizer, namespace);

          if (ngDevMode) {
            var interpolationInBetween = [values[0]]; // prefix

            for (var i = 2; i < values.length; i += 2) {
              interpolationInBetween.push(values[i]);
            }

            storePropertyBindingMetadata.apply(void 0, [getTView().data, tNode, 'attr.' + attrName, getBindingIndex() - interpolationInBetween.length + 1].concat(interpolationInBetween));
          }
        }

        return ɵɵattributeInterpolateV;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function templateFirstCreatePass(index, tView, lView, templateFn, decls, vars, tagName, attrsIndex, localRefsIndex) {
        ngDevMode && assertFirstCreatePass(tView);
        ngDevMode && ngDevMode.firstCreatePass++;
        var tViewConsts = tView.consts; // TODO(pk): refactor getOrCreateTNode to have the "create" only version

        var tNode = getOrCreateTNode(tView, index, 4
        /* Container */
        , tagName || null, getConstant(tViewConsts, attrsIndex));
        resolveDirectives(tView, lView, tNode, getConstant(tViewConsts, localRefsIndex));
        registerPostOrderHooks(tView, tNode);
        var embeddedTView = tNode.tViews = createTView(2
        /* Embedded */
        , tNode, templateFn, decls, vars, tView.directiveRegistry, tView.pipeRegistry, null, tView.schemas, tViewConsts);

        if (tView.queries !== null) {
          tView.queries.template(tView, tNode);
          embeddedTView.queries = tView.queries.embeddedTView(tNode);
        }

        return tNode;
      }
      /**
       * Creates an LContainer for an ng-template (dynamically-inserted view), e.g.
       *
       * <ng-template #foo>
       *    <div></div>
       * </ng-template>
       *
       * @param index The index of the container in the data array
       * @param templateFn Inline template
       * @param decls The number of nodes, local refs, and pipes for this template
       * @param vars The number of bindings for this template
       * @param tagName The name of the container element, if applicable
       * @param attrsIndex Index of template attributes in the `consts` array.
       * @param localRefs Index of the local references in the `consts` array.
       * @param localRefExtractor A function which extracts local-refs values from the template.
       *        Defaults to the current element associated with the local-ref.
       *
       * @codeGenApi
       */


      function ɵɵtemplate(index, templateFn, decls, vars, tagName, attrsIndex, localRefsIndex, localRefExtractor) {
        var lView = getLView();
        var tView = getTView();
        var adjustedIndex = index + HEADER_OFFSET;
        var tNode = tView.firstCreatePass ? templateFirstCreatePass(adjustedIndex, tView, lView, templateFn, decls, vars, tagName, attrsIndex, localRefsIndex) : tView.data[adjustedIndex];
        setCurrentTNode(tNode, false);
        var comment = lView[RENDERER].createComment(ngDevMode ? 'container' : '');
        appendChild(tView, lView, comment, tNode);
        attachPatchData(comment, lView);
        addToViewTree(lView, lView[adjustedIndex] = createLContainer(comment, lView, comment, tNode));

        if (isDirectiveHost(tNode)) {
          createDirectivesInstances(tView, lView, tNode);
        }

        if (localRefsIndex != null) {
          saveResolvedLocalsInData(lView, tNode, localRefExtractor);
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Store a value in the `data` at a given `index`. */


      function store(tView, lView, index, value) {
        // We don't store any static data for local variables, so the first time
        // we see the template, we should store as null to avoid a sparse array
        if (index >= tView.data.length) {
          tView.data[index] = null;
          tView.blueprint[index] = null;
        }

        lView[index] = value;
      }
      /**
       * Retrieves a local reference from the current contextViewData.
       *
       * If the reference to retrieve is in a parent view, this instruction is used in conjunction
       * with a nextContext() call, which walks up the tree and updates the contextViewData instance.
       *
       * @param index The index of the local ref in contextViewData.
       *
       * @codeGenApi
       */


      function ɵɵreference(index) {
        var contextLView = getContextLView();
        return load(contextLView, HEADER_OFFSET + index);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A mapping of the @angular/core API surface used in generated expressions to the actual symbols.
       *
       * This should be kept up to date with the public exports of @angular/core.
       */


      var angularCoreDiEnv = {
        'ɵɵdefineInjectable': ɵɵdefineInjectable,
        'ɵɵdefineInjector': ɵɵdefineInjector,
        'ɵɵinject': ɵɵinject,
        'ɵɵgetFactoryOf': getFactoryOf,
        'ɵɵinvalidFactoryDep': ɵɵinvalidFactoryDep
      };

      function getFactoryOf(type) {
        var typeAny = type;

        if (isForwardRef(type)) {
          return function () {
            var factory = getFactoryOf(resolveForwardRef(typeAny));
            return factory ? factory() : null;
          };
        }

        var def = getInjectableDef(typeAny) || getInjectorDef(typeAny);

        if (!def || def.factory === undefined) {
          return null;
        }

        return def.factory;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Compile an Angular injectable according to its `Injectable` metadata, and patch the resulting
       * injectable def (`ɵprov`) onto the injectable type.
       */


      function compileInjectable(type, srcMeta) {
        var ngInjectableDef = null;
        var ngFactoryDef = null; // if NG_PROV_DEF is already defined on this class then don't overwrite it

        if (!type.hasOwnProperty(NG_PROV_DEF)) {
          Object.defineProperty(type, NG_PROV_DEF, {
            get: function get() {
              if (ngInjectableDef === null) {
                ngInjectableDef = getCompilerFacade().compileInjectable(angularCoreDiEnv, "ng:///".concat(type.name, "/\u0275prov.js"), getInjectableMetadata(type, srcMeta));
              }

              return ngInjectableDef;
            }
          });
        } // if NG_FACTORY_DEF is already defined on this class then don't overwrite it


        if (!type.hasOwnProperty(NG_FACTORY_DEF)) {
          Object.defineProperty(type, NG_FACTORY_DEF, {
            get: function get() {
              if (ngFactoryDef === null) {
                var metadata = getInjectableMetadata(type, srcMeta);
                var compiler = getCompilerFacade();
                ngFactoryDef = compiler.compileFactory(angularCoreDiEnv, "ng:///".concat(type.name, "/\u0275fac.js"), {
                  name: metadata.name,
                  type: metadata.type,
                  typeArgumentCount: metadata.typeArgumentCount,
                  deps: reflectDependencies(type),
                  injectFn: 'inject',
                  target: compiler.R3FactoryTarget.Injectable
                });
              }

              return ngFactoryDef;
            },
            // Leave this configurable so that the factories from directives or pipes can take precedence.
            configurable: true
          });
        }
      }

      var ɵ0$8 = getClosureSafeProperty;
      var USE_VALUE$1 = getClosureSafeProperty({
        provide: String,
        useValue: ɵ0$8
      });

      function isUseClassProvider(meta) {
        return meta.useClass !== undefined;
      }

      function isUseValueProvider(meta) {
        return USE_VALUE$1 in meta;
      }

      function isUseFactoryProvider(meta) {
        return meta.useFactory !== undefined;
      }

      function isUseExistingProvider(meta) {
        return meta.useExisting !== undefined;
      }

      function getInjectableMetadata(type, srcMeta) {
        // Allow the compilation of a class with a `@Injectable()` decorator without parameters
        var meta = srcMeta || {
          providedIn: null
        };
        var compilerMeta = {
          name: type.name,
          type: type,
          typeArgumentCount: 0,
          providedIn: meta.providedIn,
          userDeps: undefined
        };

        if ((isUseClassProvider(meta) || isUseFactoryProvider(meta)) && meta.deps !== undefined) {
          compilerMeta.userDeps = convertDependencies(meta.deps);
        }

        if (isUseClassProvider(meta)) {
          // The user explicitly specified useClass, and may or may not have provided deps.
          compilerMeta.useClass = resolveForwardRef(meta.useClass);
        } else if (isUseValueProvider(meta)) {
          // The user explicitly specified useValue.
          compilerMeta.useValue = resolveForwardRef(meta.useValue);
        } else if (isUseFactoryProvider(meta)) {
          // The user explicitly specified useFactory.
          compilerMeta.useFactory = meta.useFactory;
        } else if (isUseExistingProvider(meta)) {
          // The user explicitly specified useExisting.
          compilerMeta.useExisting = resolveForwardRef(meta.useExisting);
        }

        return compilerMeta;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ɵ0$9 = getClosureSafeProperty;
      var USE_VALUE$2 = getClosureSafeProperty({
        provide: String,
        useValue: ɵ0$9
      });
      var EMPTY_ARRAY$2 = [];

      function convertInjectableProviderToFactory(type, provider) {
        if (!provider) {
          var reflectionCapabilities = new ReflectionCapabilities();
          var deps = reflectionCapabilities.parameters(type); // TODO - convert to flags.

          return function () {
            return _construct2(type, _toConsumableArray(injectArgs(deps)));
          };
        }

        if (USE_VALUE$2 in provider) {
          var valueProvider = provider;
          return function () {
            return valueProvider.useValue;
          };
        } else if (provider.useExisting) {
          var existingProvider = provider;
          return function () {
            return ɵɵinject(resolveForwardRef(existingProvider.useExisting));
          };
        } else if (provider.useFactory) {
          var factoryProvider = provider;
          return function () {
            return factoryProvider.useFactory.apply(factoryProvider, _toConsumableArray(injectArgs(factoryProvider.deps || EMPTY_ARRAY$2)));
          };
        } else if (provider.useClass) {
          var classProvider = provider;
          var _deps3 = provider.deps;

          if (!_deps3) {
            var _reflectionCapabilities = new ReflectionCapabilities();

            _deps3 = _reflectionCapabilities.parameters(type);
          }

          return function () {
            return _construct2(resolveForwardRef(classProvider.useClass), _toConsumableArray(injectArgs(_deps3)));
          };
        } else {
          var _deps4 = provider.deps;

          if (!_deps4) {
            var _reflectionCapabilities2 = new ReflectionCapabilities();

            _deps4 = _reflectionCapabilities2.parameters(type);
          }

          return function () {
            return _construct2(type, _toConsumableArray(injectArgs(_deps4)));
          };
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ɵ0$a = function ɵ0$a(type, meta) {
        return SWITCH_COMPILE_INJECTABLE(type, meta);
      };
      /**
       * Injectable decorator and metadata.
       *
       * @Annotation
       * @publicApi
       */


      var Injectable = makeDecorator('Injectable', undefined, undefined, undefined, ɵ0$a);
      /**
       * Supports @Injectable() in JIT mode for Render2.
       */

      function render2CompileInjectable(injectableType, options) {
        if (options && options.providedIn !== undefined && !getInjectableDef(injectableType)) {
          injectableType.ɵprov = ɵɵdefineInjectable({
            token: injectableType,
            providedIn: options.providedIn,
            factory: convertInjectableProviderToFactory(injectableType, options)
          });
        }
      }

      var SWITCH_COMPILE_INJECTABLE__POST_R3__ = compileInjectable;
      var SWITCH_COMPILE_INJECTABLE__PRE_R3__ = render2CompileInjectable;
      var SWITCH_COMPILE_INJECTABLE = SWITCH_COMPILE_INJECTABLE__POST_R3__;
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      function findFirstClosedCycle(keys) {
        var res = [];

        for (var i = 0; i < keys.length; ++i) {
          if (res.indexOf(keys[i]) > -1) {
            res.push(keys[i]);
            return res;
          }

          res.push(keys[i]);
        }

        return res;
      }

      function constructResolvingPath(keys) {
        if (keys.length > 1) {
          var reversed = findFirstClosedCycle(keys.slice().reverse());
          var tokenStrs = reversed.map(function (k) {
            return stringify(k.token);
          });
          return ' (' + tokenStrs.join(' -> ') + ')';
        }

        return '';
      }

      function injectionError(injector, key, constructResolvingMessage, originalError) {
        var keys = [key];
        var errMsg = constructResolvingMessage(keys);
        var error = originalError ? wrappedError(errMsg, originalError) : Error(errMsg);
        error.addKey = addKey;
        error.keys = keys;
        error.injectors = [injector];
        error.constructResolvingMessage = constructResolvingMessage;
        error[ERROR_ORIGINAL_ERROR] = originalError;
        return error;
      }

      function addKey(injector, key) {
        this.injectors.push(injector);
        this.keys.push(key); // Note: This updated message won't be reflected in the `.stack` property

        this.message = this.constructResolvingMessage(this.keys);
      }
      /**
       * Thrown when trying to retrieve a dependency by key from {@link Injector}, but the
       * {@link Injector} does not have a {@link Provider} for the given key.
       *
       * @usageNotes
       * ### Example
       *
       * ```typescript
       * class A {
       *   constructor(b:B) {}
       * }
       *
       * expect(() => Injector.resolveAndCreate([A])).toThrowError();
       * ```
       */


      function noProviderError(injector, key) {
        return injectionError(injector, key, function (keys) {
          var first = stringify(keys[0].token);
          return "No provider for ".concat(first, "!").concat(constructResolvingPath(keys));
        });
      }
      /**
       * Thrown when dependencies form a cycle.
       *
       * @usageNotes
       * ### Example
       *
       * ```typescript
       * var injector = Injector.resolveAndCreate([
       *   {provide: "one", useFactory: (two) => "two", deps: [[new Inject("two")]]},
       *   {provide: "two", useFactory: (one) => "one", deps: [[new Inject("one")]]}
       * ]);
       *
       * expect(() => injector.get("one")).toThrowError();
       * ```
       *
       * Retrieving `A` or `B` throws a `CyclicDependencyError` as the graph above cannot be constructed.
       */


      function cyclicDependencyError(injector, key) {
        return injectionError(injector, key, function (keys) {
          return "Cannot instantiate cyclic dependency!".concat(constructResolvingPath(keys));
        });
      }
      /**
       * Thrown when a constructing type returns with an Error.
       *
       * The `InstantiationError` class contains the original error plus the dependency graph which caused
       * this object to be instantiated.
       *
       * @usageNotes
       * ### Example
       *
       * ```typescript
       * class A {
       *   constructor() {
       *     throw new Error('message');
       *   }
       * }
       *
       * var injector = Injector.resolveAndCreate([A]);
      
       * try {
       *   injector.get(A);
       * } catch (e) {
       *   expect(e instanceof InstantiationError).toBe(true);
       *   expect(e.originalException.message).toEqual("message");
       *   expect(e.originalStack).toBeDefined();
       * }
       * ```
       */


      function instantiationError(injector, originalException, originalStack, key) {
        return injectionError(injector, key, function (keys) {
          var first = stringify(keys[0].token);
          return "".concat(originalException.message, ": Error during instantiation of ").concat(first, "!").concat(constructResolvingPath(keys), ".");
        }, originalException);
      }
      /**
       * Thrown when an object other then {@link Provider} (or `Type`) is passed to {@link Injector}
       * creation.
       *
       * @usageNotes
       * ### Example
       *
       * ```typescript
       * expect(() => Injector.resolveAndCreate(["not a type"])).toThrowError();
       * ```
       */


      function invalidProviderError(provider) {
        return Error("Invalid provider - only instances of Provider and Type are allowed, got: ".concat(provider));
      }
      /**
       * Thrown when the class has no annotation information.
       *
       * Lack of annotation information prevents the {@link Injector} from determining which dependencies
       * need to be injected into the constructor.
       *
       * @usageNotes
       * ### Example
       *
       * ```typescript
       * class A {
       *   constructor(b) {}
       * }
       *
       * expect(() => Injector.resolveAndCreate([A])).toThrowError();
       * ```
       *
       * This error is also thrown when the class not marked with {@link Injectable} has parameter types.
       *
       * ```typescript
       * class B {}
       *
       * class A {
       *   constructor(b:B) {} // no information about the parameter types of A is available at runtime.
       * }
       *
       * expect(() => Injector.resolveAndCreate([A,B])).toThrowError();
       * ```
       *
       */


      function noAnnotationError(typeOrFunc, params) {
        var signature = [];

        for (var i = 0, ii = params.length; i < ii; i++) {
          var parameter = params[i];

          if (!parameter || parameter.length == 0) {
            signature.push('?');
          } else {
            signature.push(parameter.map(stringify).join(' '));
          }
        }

        return Error('Cannot resolve all parameters for \'' + stringify(typeOrFunc) + '\'(' + signature.join(', ') + '). ' + 'Make sure that all the parameters are decorated with Inject or have valid type annotations and that \'' + stringify(typeOrFunc) + '\' is decorated with Injectable.');
      }
      /**
       * Thrown when getting an object by index.
       *
       * @usageNotes
       * ### Example
       *
       * ```typescript
       * class A {}
       *
       * var injector = Injector.resolveAndCreate([A]);
       *
       * expect(() => injector.getAt(100)).toThrowError();
       * ```
       *
       */


      function outOfBoundsError(index) {
        return Error("Index ".concat(index, " is out-of-bounds."));
      } // TODO: add a working example after alpha38 is released

      /**
       * Thrown when a multi provider and a regular provider are bound to the same token.
       *
       * @usageNotes
       * ### Example
       *
       * ```typescript
       * expect(() => Injector.resolveAndCreate([
       *   { provide: "Strings", useValue: "string1", multi: true},
       *   { provide: "Strings", useValue: "string2", multi: false}
       * ])).toThrowError();
       * ```
       */


      function mixingMultiProvidersWithRegularProvidersError(provider1, provider2) {
        return Error("Cannot mix multi providers and regular providers, got: ".concat(provider1, " ").concat(provider2));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A unique object used for retrieving items from the {@link ReflectiveInjector}.
       *
       * Keys have:
       * - a system-wide unique `id`.
       * - a `token`.
       *
       * `Key` is used internally by {@link ReflectiveInjector} because its system-wide unique `id` allows
       * the
       * injector to store created objects in a more efficient way.
       *
       * `Key` should not be created directly. {@link ReflectiveInjector} creates keys automatically when
       * resolving
       * providers.
       *
       * @deprecated No replacement
       * @publicApi
       */


      var ReflectiveKey = /*#__PURE__*/function () {
        /**
         * Private
         */
        function ReflectiveKey(token, id) {
          _classCallCheck2(this, ReflectiveKey);

          this.token = token;
          this.id = id;

          if (!token) {
            throw new Error('Token must be defined!');
          }

          this.displayName = stringify(this.token);
        }
        /**
         * Retrieves a `Key` for a token.
         */


        _createClass2(ReflectiveKey, null, [{
          key: "get",
          value: function get(token) {
            return _globalKeyRegistry.get(resolveForwardRef(token));
          }
          /**
           * @returns the number of keys registered in the system.
           */

        }, {
          key: "numberOfKeys",
          get: function get() {
            return _globalKeyRegistry.numberOfKeys;
          }
        }]);

        return ReflectiveKey;
      }();

      var KeyRegistry = /*#__PURE__*/function () {
        function KeyRegistry() {
          _classCallCheck2(this, KeyRegistry);

          this._allKeys = new Map();
        }

        _createClass2(KeyRegistry, [{
          key: "get",
          value: function get(token) {
            if (token instanceof ReflectiveKey) return token;

            if (this._allKeys.has(token)) {
              return this._allKeys.get(token);
            }

            var newKey = new ReflectiveKey(token, ReflectiveKey.numberOfKeys);

            this._allKeys.set(token, newKey);

            return newKey;
          }
        }, {
          key: "numberOfKeys",
          get: function get() {
            return this._allKeys.size;
          }
        }]);

        return KeyRegistry;
      }();

      var _globalKeyRegistry = new KeyRegistry();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Provides access to reflection data about symbols. Used internally by Angular
       * to power dependency injection and compilation.
       */


      var Reflector = /*#__PURE__*/function () {
        function Reflector(reflectionCapabilities) {
          _classCallCheck2(this, Reflector);

          this.reflectionCapabilities = reflectionCapabilities;
        }

        _createClass2(Reflector, [{
          key: "updateCapabilities",
          value: function updateCapabilities(caps) {
            this.reflectionCapabilities = caps;
          }
        }, {
          key: "factory",
          value: function factory(type) {
            return this.reflectionCapabilities.factory(type);
          }
        }, {
          key: "parameters",
          value: function parameters(typeOrFunc) {
            return this.reflectionCapabilities.parameters(typeOrFunc);
          }
        }, {
          key: "annotations",
          value: function annotations(typeOrFunc) {
            return this.reflectionCapabilities.annotations(typeOrFunc);
          }
        }, {
          key: "propMetadata",
          value: function propMetadata(typeOrFunc) {
            return this.reflectionCapabilities.propMetadata(typeOrFunc);
          }
        }, {
          key: "hasLifecycleHook",
          value: function hasLifecycleHook(type, lcProperty) {
            return this.reflectionCapabilities.hasLifecycleHook(type, lcProperty);
          }
        }, {
          key: "getter",
          value: function getter(name) {
            return this.reflectionCapabilities.getter(name);
          }
        }, {
          key: "setter",
          value: function setter(name) {
            return this.reflectionCapabilities.setter(name);
          }
        }, {
          key: "method",
          value: function method(name) {
            return this.reflectionCapabilities.method(name);
          }
        }, {
          key: "importUri",
          value: function importUri(type) {
            return this.reflectionCapabilities.importUri(type);
          }
        }, {
          key: "resourceUri",
          value: function resourceUri(type) {
            return this.reflectionCapabilities.resourceUri(type);
          }
        }, {
          key: "resolveIdentifier",
          value: function resolveIdentifier(name, moduleUrl, members, runtime) {
            return this.reflectionCapabilities.resolveIdentifier(name, moduleUrl, members, runtime);
          }
        }, {
          key: "resolveEnum",
          value: function resolveEnum(identifier, name) {
            return this.reflectionCapabilities.resolveEnum(identifier, name);
          }
        }]);

        return Reflector;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * The {@link Reflector} used internally in Angular to access metadata
       * about symbols.
       */


      var reflector = new Reflector(new ReflectionCapabilities());
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * `Dependency` is used by the framework to extend DI.
       * This is internal to Angular and should not be used directly.
       */

      var ReflectiveDependency = /*#__PURE__*/function () {
        function ReflectiveDependency(key, optional, visibility) {
          _classCallCheck2(this, ReflectiveDependency);

          this.key = key;
          this.optional = optional;
          this.visibility = visibility;
        }

        _createClass2(ReflectiveDependency, null, [{
          key: "fromKey",
          value: function fromKey(key) {
            return new ReflectiveDependency(key, false, null);
          }
        }]);

        return ReflectiveDependency;
      }();

      var _EMPTY_LIST = [];

      var ResolvedReflectiveProvider_ = function ResolvedReflectiveProvider_(key, resolvedFactories, multiProvider) {
        _classCallCheck2(this, ResolvedReflectiveProvider_);

        this.key = key;
        this.resolvedFactories = resolvedFactories;
        this.multiProvider = multiProvider;
        this.resolvedFactory = this.resolvedFactories[0];
      };
      /**
       * An internal resolved representation of a factory function created by resolving `Provider`.
       * @publicApi
       */


      var ResolvedReflectiveFactory = function ResolvedReflectiveFactory(
      /**
       * Factory function which can return an instance of an object represented by a key.
       */
      factory,
      /**
       * Arguments (dependencies) to the `factory` function.
       */
      dependencies) {
        _classCallCheck2(this, ResolvedReflectiveFactory);

        this.factory = factory;
        this.dependencies = dependencies;
      };
      /**
       * Resolve a single provider.
       */


      function resolveReflectiveFactory(provider) {
        var factoryFn;
        var resolvedDeps;

        if (provider.useClass) {
          var useClass = resolveForwardRef(provider.useClass);
          factoryFn = reflector.factory(useClass);
          resolvedDeps = _dependenciesFor(useClass);
        } else if (provider.useExisting) {
          factoryFn = function factoryFn(aliasInstance) {
            return aliasInstance;
          };

          resolvedDeps = [ReflectiveDependency.fromKey(ReflectiveKey.get(provider.useExisting))];
        } else if (provider.useFactory) {
          factoryFn = provider.useFactory;
          resolvedDeps = constructDependencies(provider.useFactory, provider.deps);
        } else {
          factoryFn = function factoryFn() {
            return provider.useValue;
          };

          resolvedDeps = _EMPTY_LIST;
        }

        return new ResolvedReflectiveFactory(factoryFn, resolvedDeps);
      }
      /**
       * Converts the `Provider` into `ResolvedProvider`.
       *
       * `Injector` internally only uses `ResolvedProvider`, `Provider` contains convenience provider
       * syntax.
       */


      function resolveReflectiveProvider(provider) {
        return new ResolvedReflectiveProvider_(ReflectiveKey.get(provider.provide), [resolveReflectiveFactory(provider)], provider.multi || false);
      }
      /**
       * Resolve a list of Providers.
       */


      function resolveReflectiveProviders(providers) {
        var normalized = _normalizeProviders(providers, []);

        var resolved = normalized.map(resolveReflectiveProvider);
        var resolvedProviderMap = mergeResolvedReflectiveProviders(resolved, new Map());
        return Array.from(resolvedProviderMap.values());
      }
      /**
       * Merges a list of ResolvedProviders into a list where each key is contained exactly once and
       * multi providers have been merged.
       */


      function mergeResolvedReflectiveProviders(providers, normalizedProvidersMap) {
        for (var i = 0; i < providers.length; i++) {
          var provider = providers[i];
          var existing = normalizedProvidersMap.get(provider.key.id);

          if (existing) {
            if (provider.multiProvider !== existing.multiProvider) {
              throw mixingMultiProvidersWithRegularProvidersError(existing, provider);
            }

            if (provider.multiProvider) {
              for (var j = 0; j < provider.resolvedFactories.length; j++) {
                existing.resolvedFactories.push(provider.resolvedFactories[j]);
              }
            } else {
              normalizedProvidersMap.set(provider.key.id, provider);
            }
          } else {
            var resolvedProvider = void 0;

            if (provider.multiProvider) {
              resolvedProvider = new ResolvedReflectiveProvider_(provider.key, provider.resolvedFactories.slice(), provider.multiProvider);
            } else {
              resolvedProvider = provider;
            }

            normalizedProvidersMap.set(provider.key.id, resolvedProvider);
          }
        }

        return normalizedProvidersMap;
      }

      function _normalizeProviders(providers, res) {
        providers.forEach(function (b) {
          if (b instanceof Type) {
            res.push({
              provide: b,
              useClass: b
            });
          } else if (b && typeof b == 'object' && b.provide !== undefined) {
            res.push(b);
          } else if (Array.isArray(b)) {
            _normalizeProviders(b, res);
          } else {
            throw invalidProviderError(b);
          }
        });
        return res;
      }

      function constructDependencies(typeOrFunc, dependencies) {
        if (!dependencies) {
          return _dependenciesFor(typeOrFunc);
        } else {
          var params = dependencies.map(function (t) {
            return [t];
          });
          return dependencies.map(function (t) {
            return _extractToken(typeOrFunc, t, params);
          });
        }
      }

      function _dependenciesFor(typeOrFunc) {
        var params = reflector.parameters(typeOrFunc);
        if (!params) return [];

        if (params.some(function (p) {
          return p == null;
        })) {
          throw noAnnotationError(typeOrFunc, params);
        }

        return params.map(function (p) {
          return _extractToken(typeOrFunc, p, params);
        });
      }

      function _extractToken(typeOrFunc, metadata, params) {
        var token = null;
        var optional = false;

        if (!Array.isArray(metadata)) {
          if (metadata instanceof Inject) {
            return _createDependency(metadata.token, optional, null);
          } else {
            return _createDependency(metadata, optional, null);
          }
        }

        var visibility = null;

        for (var i = 0; i < metadata.length; ++i) {
          var paramMetadata = metadata[i];

          if (paramMetadata instanceof Type) {
            token = paramMetadata;
          } else if (paramMetadata instanceof Inject) {
            token = paramMetadata.token;
          } else if (paramMetadata instanceof Optional) {
            optional = true;
          } else if (paramMetadata instanceof Self || paramMetadata instanceof SkipSelf) {
            visibility = paramMetadata;
          } else if (paramMetadata instanceof InjectionToken) {
            token = paramMetadata;
          }
        }

        token = resolveForwardRef(token);

        if (token != null) {
          return _createDependency(token, optional, visibility);
        } else {
          throw noAnnotationError(typeOrFunc, params);
        }
      }

      function _createDependency(token, optional, visibility) {
        return new ReflectiveDependency(ReflectiveKey.get(token), optional, visibility);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // Threshold for the dynamic version


      var UNDEFINED = {};
      /**
       * A ReflectiveDependency injection container used for instantiating objects and resolving
       * dependencies.
       *
       * An `Injector` is a replacement for a `new` operator, which can automatically resolve the
       * constructor dependencies.
       *
       * In typical use, application code asks for the dependencies in the constructor and they are
       * resolved by the `Injector`.
       *
       * @usageNotes
       * ### Example
       *
       * The following example creates an `Injector` configured to create `Engine` and `Car`.
       *
       * ```typescript
       * @Injectable()
       * class Engine {
       * }
       *
       * @Injectable()
       * class Car {
       *   constructor(public engine:Engine) {}
       * }
       *
       * var injector = ReflectiveInjector.resolveAndCreate([Car, Engine]);
       * var car = injector.get(Car);
       * expect(car instanceof Car).toBe(true);
       * expect(car.engine instanceof Engine).toBe(true);
       * ```
       *
       * Notice, we don't use the `new` operator because we explicitly want to have the `Injector`
       * resolve all of the object's dependencies automatically.
       *
       * @deprecated from v5 - slow and brings in a lot of code, Use `Injector.create` instead.
       * @publicApi
       */

      var ReflectiveInjector = /*#__PURE__*/function () {
        function ReflectiveInjector() {
          _classCallCheck2(this, ReflectiveInjector);
        }

        _createClass2(ReflectiveInjector, null, [{
          key: "resolve",
          value:
          /**
           * Turns an array of provider definitions into an array of resolved providers.
           *
           * A resolution is a process of flattening multiple nested arrays and converting individual
           * providers into an array of `ResolvedReflectiveProvider`s.
           *
           * @usageNotes
           * ### Example
           *
           * ```typescript
           * @Injectable()
           * class Engine {
           * }
           *
           * @Injectable()
           * class Car {
           *   constructor(public engine:Engine) {}
           * }
           *
           * var providers = ReflectiveInjector.resolve([Car, [[Engine]]]);
           *
           * expect(providers.length).toEqual(2);
           *
           * expect(providers[0] instanceof ResolvedReflectiveProvider).toBe(true);
           * expect(providers[0].key.displayName).toBe("Car");
           * expect(providers[0].dependencies.length).toEqual(1);
           * expect(providers[0].factory).toBeDefined();
           *
           * expect(providers[1].key.displayName).toBe("Engine");
           * });
           * ```
           *
           */
          function resolve(providers) {
            return resolveReflectiveProviders(providers);
          }
          /**
           * Resolves an array of providers and creates an injector from those providers.
           *
           * The passed-in providers can be an array of `Type`, `Provider`,
           * or a recursive array of more providers.
           *
           * @usageNotes
           * ### Example
           *
           * ```typescript
           * @Injectable()
           * class Engine {
           * }
           *
           * @Injectable()
           * class Car {
           *   constructor(public engine:Engine) {}
           * }
           *
           * var injector = ReflectiveInjector.resolveAndCreate([Car, Engine]);
           * expect(injector.get(Car) instanceof Car).toBe(true);
           * ```
           */

        }, {
          key: "resolveAndCreate",
          value: function resolveAndCreate(providers, parent) {
            var ResolvedReflectiveProviders = ReflectiveInjector.resolve(providers);
            return ReflectiveInjector.fromResolvedProviders(ResolvedReflectiveProviders, parent);
          }
          /**
           * Creates an injector from previously resolved providers.
           *
           * This API is the recommended way to construct injectors in performance-sensitive parts.
           *
           * @usageNotes
           * ### Example
           *
           * ```typescript
           * @Injectable()
           * class Engine {
           * }
           *
           * @Injectable()
           * class Car {
           *   constructor(public engine:Engine) {}
           * }
           *
           * var providers = ReflectiveInjector.resolve([Car, Engine]);
           * var injector = ReflectiveInjector.fromResolvedProviders(providers);
           * expect(injector.get(Car) instanceof Car).toBe(true);
           * ```
           */

        }, {
          key: "fromResolvedProviders",
          value: function fromResolvedProviders(providers, parent) {
            return new ReflectiveInjector_(providers, parent);
          }
        }]);

        return ReflectiveInjector;
      }();

      var ReflectiveInjector_ = /*#__PURE__*/function () {
        /**
         * Private
         */
        function ReflectiveInjector_(_providers, _parent) {
          _classCallCheck2(this, ReflectiveInjector_);

          /** @internal */
          this._constructionCounter = 0;
          this._providers = _providers;
          this.parent = _parent || null;
          var len = _providers.length;
          this.keyIds = [];
          this.objs = [];

          for (var i = 0; i < len; i++) {
            this.keyIds[i] = _providers[i].key.id;
            this.objs[i] = UNDEFINED;
          }
        }

        _createClass2(ReflectiveInjector_, [{
          key: "get",
          value: function get(token) {
            var notFoundValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : THROW_IF_NOT_FOUND;
            return this._getByKey(ReflectiveKey.get(token), null, notFoundValue);
          }
        }, {
          key: "resolveAndCreateChild",
          value: function resolveAndCreateChild(providers) {
            var ResolvedReflectiveProviders = ReflectiveInjector.resolve(providers);
            return this.createChildFromResolved(ResolvedReflectiveProviders);
          }
        }, {
          key: "createChildFromResolved",
          value: function createChildFromResolved(providers) {
            var inj = new ReflectiveInjector_(providers);
            inj.parent = this;
            return inj;
          }
        }, {
          key: "resolveAndInstantiate",
          value: function resolveAndInstantiate(provider) {
            return this.instantiateResolved(ReflectiveInjector.resolve([provider])[0]);
          }
        }, {
          key: "instantiateResolved",
          value: function instantiateResolved(provider) {
            return this._instantiateProvider(provider);
          }
        }, {
          key: "getProviderAtIndex",
          value: function getProviderAtIndex(index) {
            if (index < 0 || index >= this._providers.length) {
              throw outOfBoundsError(index);
            }

            return this._providers[index];
          }
          /** @internal */

        }, {
          key: "_new",
          value: function _new(provider) {
            if (this._constructionCounter++ > this._getMaxNumberOfObjects()) {
              throw cyclicDependencyError(this, provider.key);
            }

            return this._instantiateProvider(provider);
          }
        }, {
          key: "_getMaxNumberOfObjects",
          value: function _getMaxNumberOfObjects() {
            return this.objs.length;
          }
        }, {
          key: "_instantiateProvider",
          value: function _instantiateProvider(provider) {
            if (provider.multiProvider) {
              var res = [];

              for (var i = 0; i < provider.resolvedFactories.length; ++i) {
                res[i] = this._instantiate(provider, provider.resolvedFactories[i]);
              }

              return res;
            } else {
              return this._instantiate(provider, provider.resolvedFactories[0]);
            }
          }
        }, {
          key: "_instantiate",
          value: function _instantiate(provider, ResolvedReflectiveFactory) {
            var _this715 = this;

            var factory = ResolvedReflectiveFactory.factory;
            var deps;

            try {
              deps = ResolvedReflectiveFactory.dependencies.map(function (dep) {
                return _this715._getByReflectiveDependency(dep);
              });
            } catch (e) {
              if (e.addKey) {
                e.addKey(this, provider.key);
              }

              throw e;
            }

            var obj;

            try {
              obj = factory.apply(void 0, _toConsumableArray(deps));
            } catch (e) {
              throw instantiationError(this, e, e.stack, provider.key);
            }

            return obj;
          }
        }, {
          key: "_getByReflectiveDependency",
          value: function _getByReflectiveDependency(dep) {
            return this._getByKey(dep.key, dep.visibility, dep.optional ? null : THROW_IF_NOT_FOUND);
          }
        }, {
          key: "_getByKey",
          value: function _getByKey(key, visibility, notFoundValue) {
            if (key === ReflectiveInjector_.INJECTOR_KEY) {
              return this;
            }

            if (visibility instanceof Self) {
              return this._getByKeySelf(key, notFoundValue);
            } else {
              return this._getByKeyDefault(key, notFoundValue, visibility);
            }
          }
        }, {
          key: "_getObjByKeyId",
          value: function _getObjByKeyId(keyId) {
            for (var i = 0; i < this.keyIds.length; i++) {
              if (this.keyIds[i] === keyId) {
                if (this.objs[i] === UNDEFINED) {
                  this.objs[i] = this._new(this._providers[i]);
                }

                return this.objs[i];
              }
            }

            return UNDEFINED;
          }
          /** @internal */

        }, {
          key: "_throwOrNull",
          value: function _throwOrNull(key, notFoundValue) {
            if (notFoundValue !== THROW_IF_NOT_FOUND) {
              return notFoundValue;
            } else {
              throw noProviderError(this, key);
            }
          }
          /** @internal */

        }, {
          key: "_getByKeySelf",
          value: function _getByKeySelf(key, notFoundValue) {
            var obj = this._getObjByKeyId(key.id);

            return obj !== UNDEFINED ? obj : this._throwOrNull(key, notFoundValue);
          }
          /** @internal */

        }, {
          key: "_getByKeyDefault",
          value: function _getByKeyDefault(key, notFoundValue, visibility) {
            var inj;

            if (visibility instanceof SkipSelf) {
              inj = this.parent;
            } else {
              inj = this;
            }

            while (inj instanceof ReflectiveInjector_) {
              var inj_ = inj;

              var obj = inj_._getObjByKeyId(key.id);

              if (obj !== UNDEFINED) return obj;
              inj = inj_.parent;
            }

            if (inj !== null) {
              return inj.get(key.token, notFoundValue);
            } else {
              return this._throwOrNull(key, notFoundValue);
            }
          }
        }, {
          key: "displayName",
          get: function get() {
            var providers = _mapProviders(this, function (b) {
              return ' "' + b.key.displayName + '" ';
            }).join(', ');

            return "ReflectiveInjector(providers: [".concat(providers, "])");
          }
        }, {
          key: "toString",
          value: function toString() {
            return this.displayName;
          }
        }]);

        return ReflectiveInjector_;
      }();

      ReflectiveInjector_.INJECTOR_KEY = ReflectiveKey.get(Injector);

      function _mapProviders(injector, fn) {
        var res = [];

        for (var i = 0; i < injector._providers.length; ++i) {
          res[i] = fn(injector.getProviderAtIndex(i));
        }

        return res;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function ɵɵdirectiveInject(token) {
        var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : InjectFlags.Default;
        var lView = getLView(); // Fall back to inject() if view hasn't been created. This situation can happen in tests
        // if inject utilities are used before bootstrapping.

        if (lView === null) {
          // Verify that we will not get into infinite loop.
          ngDevMode && assertInjectImplementationNotEqual(ɵɵdirectiveInject);
          return ɵɵinject(token, flags);
        }

        var tNode = getCurrentTNode();
        return getOrCreateInjectable(tNode, lView, resolveForwardRef(token), flags);
      }
      /**
       * Throws an error indicating that a factory function could not be generated by the compiler for a
       * particular class.
       *
       * This instruction allows the actual error message to be optimized away when ngDevMode is turned
       * off, saving bytes of generated code while still providing a good experience in dev mode.
       *
       * The name of the class is not mentioned here, but will be in the generated factory function name
       * and thus in the stack trace.
       *
       * @codeGenApi
       */


      function ɵɵinvalidFactory() {
        var msg = ngDevMode ? "This constructor was not compatible with Dependency Injection." : 'invalid';
        throw new Error(msg);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Update a property on a selected element.
       *
       * Operates on the element selected by index via the {@link select} instruction.
       *
       * If the property name also exists as an input property on one of the element's directives,
       * the component property will be set instead of the element property. This check must
       * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled
       *
       * @param propName Name of property. Because it is going to DOM, this is not subject to
       *        renaming as part of minification.
       * @param value New value to write.
       * @param sanitizer An optional function used to sanitize the value.
       * @returns This function returns itself so that it may be chained
       * (e.g. `property('name', ctx.name)('title', ctx.title)`)
       *
       * @codeGenApi
       */


      function ɵɵproperty(propName, value, sanitizer) {
        var lView = getLView();
        var bindingIndex = nextBindingIndex();

        if (bindingUpdated(lView, bindingIndex, value)) {
          var tView = getTView();
          var tNode = getSelectedTNode();
          elementPropertyInternal(tView, tNode, lView, propName, value, lView[RENDERER], sanitizer, false);
          ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);
        }

        return ɵɵproperty;
      }
      /**
       * Given `<div style="..." my-dir>` and `MyDir` with `@Input('style')` we need to write to
       * directive input.
       */


      function setDirectiveInputsWhichShadowsStyling(tView, tNode, lView, value, isClassBased) {
        var inputs = tNode.inputs;
        var property = isClassBased ? 'class' : 'style'; // We support both 'class' and `className` hence the fallback.

        setInputsForProperty(tView, lView, inputs[property], property, value);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function elementStartFirstCreatePass(index, tView, lView, _native11, name, attrsIndex, localRefsIndex) {
        ngDevMode && assertFirstCreatePass(tView);
        ngDevMode && ngDevMode.firstCreatePass++;
        var tViewConsts = tView.consts;
        var attrs = getConstant(tViewConsts, attrsIndex);
        var tNode = getOrCreateTNode(tView, index, 2
        /* Element */
        , name, attrs);
        var hasDirectives = resolveDirectives(tView, lView, tNode, getConstant(tViewConsts, localRefsIndex));
        ngDevMode && logUnknownElementError(tView, _native11, tNode, hasDirectives);

        if (tNode.attrs !== null) {
          computeStaticStyling(tNode, tNode.attrs, false);
        }

        if (tNode.mergedAttrs !== null) {
          computeStaticStyling(tNode, tNode.mergedAttrs, true);
        }

        if (tView.queries !== null) {
          tView.queries.elementStart(tView, tNode);
        }

        return tNode;
      }
      /**
       * Create DOM element. The instruction must later be followed by `elementEnd()` call.
       *
       * @param index Index of the element in the LView array
       * @param name Name of the DOM Node
       * @param attrsIndex Index of the element's attributes in the `consts` array.
       * @param localRefsIndex Index of the element's local references in the `consts` array.
       *
       * Attributes and localRefs are passed as an array of strings where elements with an even index
       * hold an attribute name and elements with an odd index hold an attribute value, ex.:
       * ['id', 'warning5', 'class', 'alert']
       *
       * @codeGenApi
       */


      function ɵɵelementStart(index, name, attrsIndex, localRefsIndex) {
        var lView = getLView();
        var tView = getTView();
        var adjustedIndex = HEADER_OFFSET + index;
        ngDevMode && assertEqual(getBindingIndex(), tView.bindingStartIndex, 'elements should be created before any bindings');
        ngDevMode && assertIndexInRange(lView, adjustedIndex);
        var renderer = lView[RENDERER];

        var _native12 = lView[adjustedIndex] = createElementNode(renderer, name, getNamespace());

        var tNode = tView.firstCreatePass ? elementStartFirstCreatePass(adjustedIndex, tView, lView, _native12, name, attrsIndex, localRefsIndex) : tView.data[adjustedIndex];
        setCurrentTNode(tNode, true);
        var mergedAttrs = tNode.mergedAttrs;

        if (mergedAttrs !== null) {
          setUpAttributes(renderer, _native12, mergedAttrs);
        }

        var classes = tNode.classes;

        if (classes !== null) {
          writeDirectClass(renderer, _native12, classes);
        }

        var styles = tNode.styles;

        if (styles !== null) {
          writeDirectStyle(renderer, _native12, styles);
        }

        if ((tNode.flags & 64
        /* isDetached */
        ) !== 64
        /* isDetached */
        ) {
            // In the i18n case, the translation may have removed this element, so only add it if it is not
            // detached. See `TNodeType.Placeholder` and `LFrame.inI18n` for more context.
            appendChild(tView, lView, _native12, tNode);
          } // any immediate children of a component or template container must be pre-emptively
        // monkey-patched with the component view data so that the element can be inspected
        // later on using any element discovery utility methods (see `element_discovery.ts`)


        if (getElementDepthCount() === 0) {
          attachPatchData(_native12, lView);
        }

        increaseElementDepthCount();

        if (isDirectiveHost(tNode)) {
          createDirectivesInstances(tView, lView, tNode);
          executeContentQueries(tView, tNode, lView);
        }

        if (localRefsIndex !== null) {
          saveResolvedLocalsInData(lView, tNode);
        }
      }
      /**
       * Mark the end of the element.
       *
       * @codeGenApi
       */


      function ɵɵelementEnd() {
        var currentTNode = getCurrentTNode();
        ngDevMode && assertDefined(currentTNode, 'No parent node to close.');

        if (isCurrentTNodeParent()) {
          setCurrentTNodeAsNotParent();
        } else {
          ngDevMode && assertHasParent(getCurrentTNode());
          currentTNode = currentTNode.parent;
          setCurrentTNode(currentTNode, false);
        }

        var tNode = currentTNode;
        ngDevMode && assertTNodeType(tNode, 3
        /* AnyRNode */
        );
        decreaseElementDepthCount();
        var tView = getTView();

        if (tView.firstCreatePass) {
          registerPostOrderHooks(tView, currentTNode);

          if (isContentQueryHost(currentTNode)) {
            tView.queries.elementEnd(currentTNode);
          }
        }

        if (tNode.classesWithoutHost != null && hasClassInput(tNode)) {
          setDirectiveInputsWhichShadowsStyling(tView, tNode, getLView(), tNode.classesWithoutHost, true);
        }

        if (tNode.stylesWithoutHost != null && hasStyleInput(tNode)) {
          setDirectiveInputsWhichShadowsStyling(tView, tNode, getLView(), tNode.stylesWithoutHost, false);
        }
      }
      /**
       * Creates an empty element using {@link elementStart} and {@link elementEnd}
       *
       * @param index Index of the element in the data array
       * @param name Name of the DOM Node
       * @param attrsIndex Index of the element's attributes in the `consts` array.
       * @param localRefsIndex Index of the element's local references in the `consts` array.
       *
       * @codeGenApi
       */


      function ɵɵelement(index, name, attrsIndex, localRefsIndex) {
        ɵɵelementStart(index, name, attrsIndex, localRefsIndex);
        ɵɵelementEnd();
      }

      function logUnknownElementError(tView, element, tNode, hasDirectives) {
        var schemas = tView.schemas; // If `schemas` is set to `null`, that's an indication that this Component was compiled in AOT
        // mode where this check happens at compile time. In JIT mode, `schemas` is always present and
        // defined as an array (as an empty array in case `schemas` field is not defined) and we should
        // execute the check below.

        if (schemas === null) return;
        var tagName = tNode.value; // If the element matches any directive, it's considered as valid.

        if (!hasDirectives && tagName !== null) {
          // The element is unknown if it's an instance of HTMLUnknownElement or it isn't registered
          // as a custom element. Note that unknown elements with a dash in their name won't be instances
          // of HTMLUnknownElement in browsers that support web components.
          var isUnknown = // Note that we can't check for `typeof HTMLUnknownElement === 'function'`,
          // because while most browsers return 'function', IE returns 'object'.
          typeof HTMLUnknownElement !== 'undefined' && HTMLUnknownElement && element instanceof HTMLUnknownElement || typeof customElements !== 'undefined' && tagName.indexOf('-') > -1 && !customElements.get(tagName);

          if (isUnknown && !matchingSchemas(tView, tagName)) {
            var message = "'".concat(tagName, "' is not a known element:\n");
            message += "1. If '".concat(tagName, "' is an Angular component, then verify that it is part of this module.\n");

            if (tagName && tagName.indexOf('-') > -1) {
              message += "2. If '".concat(tagName, "' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.");
            } else {
              message += "2. To allow any element add 'NO_ERRORS_SCHEMA' to the '@NgModule.schemas' of this component.";
            }

            console.error(formatRuntimeError("304"
            /* UNKNOWN_ELEMENT */
            , message));
          }
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function elementContainerStartFirstCreatePass(index, tView, lView, attrsIndex, localRefsIndex) {
        ngDevMode && ngDevMode.firstCreatePass++;
        var tViewConsts = tView.consts;
        var attrs = getConstant(tViewConsts, attrsIndex);
        var tNode = getOrCreateTNode(tView, index, 8
        /* ElementContainer */
        , 'ng-container', attrs); // While ng-container doesn't necessarily support styling, we use the style context to identify
        // and execute directives on the ng-container.

        if (attrs !== null) {
          computeStaticStyling(tNode, attrs, true);
        }

        var localRefs = getConstant(tViewConsts, localRefsIndex);
        resolveDirectives(tView, lView, tNode, localRefs);

        if (tView.queries !== null) {
          tView.queries.elementStart(tView, tNode);
        }

        return tNode;
      }
      /**
       * Creates a logical container for other nodes (<ng-container>) backed by a comment node in the DOM.
       * The instruction must later be followed by `elementContainerEnd()` call.
       *
       * @param index Index of the element in the LView array
       * @param attrsIndex Index of the container attributes in the `consts` array.
       * @param localRefsIndex Index of the container's local references in the `consts` array.
       *
       * Even if this instruction accepts a set of attributes no actual attribute values are propagated to
       * the DOM (as a comment node can't have attributes). Attributes are here only for directive
       * matching purposes and setting initial inputs of directives.
       *
       * @codeGenApi
       */


      function ɵɵelementContainerStart(index, attrsIndex, localRefsIndex) {
        var lView = getLView();
        var tView = getTView();
        var adjustedIndex = index + HEADER_OFFSET;
        ngDevMode && assertIndexInRange(lView, adjustedIndex);
        ngDevMode && assertEqual(getBindingIndex(), tView.bindingStartIndex, 'element containers should be created before any bindings');
        var tNode = tView.firstCreatePass ? elementContainerStartFirstCreatePass(adjustedIndex, tView, lView, attrsIndex, localRefsIndex) : tView.data[adjustedIndex];
        setCurrentTNode(tNode, true);
        ngDevMode && ngDevMode.rendererCreateComment++;

        var _native13 = lView[adjustedIndex] = lView[RENDERER].createComment(ngDevMode ? 'ng-container' : '');

        appendChild(tView, lView, _native13, tNode);
        attachPatchData(_native13, lView);

        if (isDirectiveHost(tNode)) {
          createDirectivesInstances(tView, lView, tNode);
          executeContentQueries(tView, tNode, lView);
        }

        if (localRefsIndex != null) {
          saveResolvedLocalsInData(lView, tNode);
        }
      }
      /**
       * Mark the end of the <ng-container>.
       *
       * @codeGenApi
       */


      function ɵɵelementContainerEnd() {
        var currentTNode = getCurrentTNode();
        var tView = getTView();

        if (isCurrentTNodeParent()) {
          setCurrentTNodeAsNotParent();
        } else {
          ngDevMode && assertHasParent(currentTNode);
          currentTNode = currentTNode.parent;
          setCurrentTNode(currentTNode, false);
        }

        ngDevMode && assertTNodeType(currentTNode, 8
        /* ElementContainer */
        );

        if (tView.firstCreatePass) {
          registerPostOrderHooks(tView, currentTNode);

          if (isContentQueryHost(currentTNode)) {
            tView.queries.elementEnd(currentTNode);
          }
        }
      }
      /**
       * Creates an empty logical container using {@link elementContainerStart}
       * and {@link elementContainerEnd}
       *
       * @param index Index of the element in the LView array
       * @param attrsIndex Index of the container attributes in the `consts` array.
       * @param localRefsIndex Index of the container's local references in the `consts` array.
       *
       * @codeGenApi
       */


      function ɵɵelementContainer(index, attrsIndex, localRefsIndex) {
        ɵɵelementContainerStart(index, attrsIndex, localRefsIndex);
        ɵɵelementContainerEnd();
      }
      /**
       * Returns the current OpaqueViewState instance.
       *
       * Used in conjunction with the restoreView() instruction to save a snapshot
       * of the current view and restore it when listeners are invoked. This allows
       * walking the declaration view tree in listeners to get vars from parent views.
       *
       * @codeGenApi
       */


      function ɵɵgetCurrentView() {
        return getLView();
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Determine if the argument is shaped like a Promise
       */


      function isPromise(obj) {
        // allow any Promise/A+ compliant thenable.
        // It's up to the caller to ensure that obj.then conforms to the spec
        return !!obj && typeof obj.then === 'function';
      }
      /**
       * Determine if the argument is a Subscribable
       */


      function isSubscribable(obj) {
        return !!obj && typeof obj.subscribe === 'function';
      }
      /**
       * Determine if the argument is an Observable
       *
       * Strictly this tests that the `obj` is `Subscribable`, since `Observable`
       * types need additional methods, such as `lift()`. But it is adequate for our
       * needs since within the Angular framework code we only ever need to use the
       * `subscribe()` method, and RxJS has mechanisms to wrap `Subscribable` objects
       * into `Observable` as needed.
       */


      var isObservable = isSubscribable;
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Adds an event listener to the current node.
       *
       * If an output exists on one of the node's directives, it also subscribes to the output
       * and saves the subscription for later cleanup.
       *
       * @param eventName Name of the event
       * @param listenerFn The function to be called when event emits
       * @param useCapture Whether or not to use capture in event listener
       * @param eventTargetResolver Function that returns global target information in case this listener
       * should be attached to a global object like window, document or body
       *
       * @codeGenApi
       */

      function ɵɵlistener(eventName, listenerFn) {
        var useCapture = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
        var eventTargetResolver = arguments.length > 3 ? arguments[3] : undefined;
        var lView = getLView();
        var tView = getTView();
        var tNode = getCurrentTNode();
        listenerInternal(tView, lView, lView[RENDERER], tNode, eventName, listenerFn, useCapture, eventTargetResolver);
        return ɵɵlistener;
      }
      /**
       * Registers a synthetic host listener (e.g. `(@foo.start)`) on a component or directive.
       *
       * This instruction is for compatibility purposes and is designed to ensure that a
       * synthetic host listener (e.g. `@HostListener('@foo.start')`) properly gets rendered
       * in the component's renderer. Normally all host listeners are evaluated with the
       * parent component's renderer, but, in the case of animation @triggers, they need
       * to be evaluated with the sub component's renderer (because that's where the
       * animation triggers are defined).
       *
       * Do not use this instruction as a replacement for `listener`. This instruction
       * only exists to ensure compatibility with the ViewEngine's host binding behavior.
       *
       * @param eventName Name of the event
       * @param listenerFn The function to be called when event emits
       * @param useCapture Whether or not to use capture in event listener
       * @param eventTargetResolver Function that returns global target information in case this listener
       * should be attached to a global object like window, document or body
       *
       * @codeGenApi
       */


      function ɵɵsyntheticHostListener(eventName, listenerFn) {
        var useCapture = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
        var eventTargetResolver = arguments.length > 3 ? arguments[3] : undefined;
        var tNode = getCurrentTNode();
        var lView = getLView();
        var tView = getTView();
        var currentDef = getCurrentDirectiveDef(tView.data);
        var renderer = loadComponentRenderer(currentDef, tNode, lView);
        listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn, useCapture, eventTargetResolver);
        return ɵɵsyntheticHostListener;
      }
      /**
       * A utility function that checks if a given element has already an event handler registered for an
       * event with a specified name. The TView.cleanup data structure is used to find out which events
       * are registered for a given element.
       */


      function findExistingListener(tView, lView, eventName, tNodeIdx) {
        var tCleanup = tView.cleanup;

        if (tCleanup != null) {
          for (var i = 0; i < tCleanup.length - 1; i += 2) {
            var cleanupEventName = tCleanup[i];

            if (cleanupEventName === eventName && tCleanup[i + 1] === tNodeIdx) {
              // We have found a matching event name on the same node but it might not have been
              // registered yet, so we must explicitly verify entries in the LView cleanup data
              // structures.
              var lCleanup = lView[CLEANUP];
              var listenerIdxInLCleanup = tCleanup[i + 2];
              return lCleanup.length > listenerIdxInLCleanup ? lCleanup[listenerIdxInLCleanup] : null;
            } // TView.cleanup can have a mix of 4-elements entries (for event handler cleanups) or
            // 2-element entries (for directive and queries destroy hooks). As such we can encounter
            // blocks of 4 or 2 items in the tView.cleanup and this is why we iterate over 2 elements
            // first and jump another 2 elements if we detect listeners cleanup (4 elements). Also check
            // documentation of TView.cleanup for more details of this data structure layout.


            if (typeof cleanupEventName === 'string') {
              i += 2;
            }
          }
        }

        return null;
      }

      function listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn) {
        var useCapture = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false;
        var eventTargetResolver = arguments.length > 7 ? arguments[7] : undefined;
        var isTNodeDirectiveHost = isDirectiveHost(tNode);
        var firstCreatePass = tView.firstCreatePass;
        var tCleanup = firstCreatePass && getOrCreateTViewCleanup(tView); // When the ɵɵlistener instruction was generated and is executed we know that there is either a
        // native listener or a directive output on this element. As such we we know that we will have to
        // register a listener and store its cleanup function on LView.

        var lCleanup = getOrCreateLViewCleanup(lView);
        ngDevMode && assertTNodeType(tNode, 3
        /* AnyRNode */
        | 12
        /* AnyContainer */
        );
        var processOutputs = true; // add native event listener - applicable to elements only

        if (tNode.type & 3
        /* AnyRNode */
        ) {
            var _native14 = getNativeByTNode(tNode, lView);

            var resolved = eventTargetResolver ? eventTargetResolver(_native14) : EMPTY_OBJ;
            var target = resolved.target || _native14;
            var lCleanupIndex = lCleanup.length;
            var idxOrTargetGetter = eventTargetResolver ? function (_lView) {
              return eventTargetResolver(unwrapRNode(_lView[tNode.index])).target;
            } : tNode.index; // In order to match current behavior, native DOM event listeners must be added for all
            // events (including outputs).

            if (isProceduralRenderer(renderer)) {
              // There might be cases where multiple directives on the same element try to register an event
              // handler function for the same event. In this situation we want to avoid registration of
              // several native listeners as each registration would be intercepted by NgZone and
              // trigger change detection. This would mean that a single user action would result in several
              // change detections being invoked. To avoid this situation we want to have only one call to
              // native handler registration (for the same element and same type of event).
              //
              // In order to have just one native event handler in presence of multiple handler functions,
              // we just register a first handler function as a native event listener and then chain
              // (coalesce) other handler functions on top of the first native handler function.
              var existingListener = null; // Please note that the coalescing described here doesn't happen for events specifying an
              // alternative target (ex. (document:click)) - this is to keep backward compatibility with the
              // view engine.
              // Also, we don't have to search for existing listeners is there are no directives
              // matching on a given node as we can't register multiple event handlers for the same event in
              // a template (this would mean having duplicate attributes).

              if (!eventTargetResolver && isTNodeDirectiveHost) {
                existingListener = findExistingListener(tView, lView, eventName, tNode.index);
              }

              if (existingListener !== null) {
                // Attach a new listener to coalesced listeners list, maintaining the order in which
                // listeners are registered. For performance reasons, we keep a reference to the last
                // listener in that list (in `__ngLastListenerFn__` field), so we can avoid going through
                // the entire set each time we need to add a new listener.
                var lastListenerFn = existingListener.__ngLastListenerFn__ || existingListener;
                lastListenerFn.__ngNextListenerFn__ = listenerFn;
                existingListener.__ngLastListenerFn__ = listenerFn;
                processOutputs = false;
              } else {
                // The first argument of `listen` function in Procedural Renderer is:
                // - either a target name (as a string) in case of global target (window, document, body)
                // - or element reference (in all other cases)
                listenerFn = wrapListener(tNode, lView, listenerFn, false
                /** preventDefault */
                );
                var cleanupFn = renderer.listen(resolved.name || target, eventName, listenerFn);
                ngDevMode && ngDevMode.rendererAddEventListener++;
                lCleanup.push(listenerFn, cleanupFn);
                tCleanup && tCleanup.push(eventName, idxOrTargetGetter, lCleanupIndex, lCleanupIndex + 1);
              }
            } else {
              listenerFn = wrapListener(tNode, lView, listenerFn, true
              /** preventDefault */
              );
              target.addEventListener(eventName, listenerFn, useCapture);
              ngDevMode && ngDevMode.rendererAddEventListener++;
              lCleanup.push(listenerFn);
              tCleanup && tCleanup.push(eventName, idxOrTargetGetter, lCleanupIndex, useCapture);
            }
          } else {
          // Even if there is no native listener to add, we still need to wrap the listener so that OnPush
          // ancestors are marked dirty when an event occurs.
          listenerFn = wrapListener(tNode, lView, listenerFn, false
          /** preventDefault */
          );
        } // subscribe to directive outputs


        var outputs = tNode.outputs;
        var props;

        if (processOutputs && outputs !== null && (props = outputs[eventName])) {
          var propsLength = props.length;

          if (propsLength) {
            for (var i = 0; i < propsLength; i += 2) {
              var index = props[i];
              ngDevMode && assertIndexInRange(lView, index);
              var minifiedName = props[i + 1];
              var directiveInstance = lView[index];
              var output = directiveInstance[minifiedName];

              if (ngDevMode && !isObservable(output)) {
                throw new Error("@Output ".concat(minifiedName, " not initialized in '").concat(directiveInstance.constructor.name, "'."));
              }

              var subscription = output.subscribe(listenerFn);
              var idx = lCleanup.length;
              lCleanup.push(listenerFn, subscription);
              tCleanup && tCleanup.push(eventName, tNode.index, idx, -(idx + 1));
            }
          }
        }
      }

      function executeListenerWithErrorHandling(lView, listenerFn, e) {
        try {
          // Only explicitly returning false from a listener should preventDefault
          return listenerFn(e) !== false;
        } catch (error) {
          handleError(lView, error);
          return false;
        }
      }
      /**
       * Wraps an event listener with a function that marks ancestors dirty and prevents default behavior,
       * if applicable.
       *
       * @param tNode The TNode associated with this listener
       * @param lView The LView that contains this listener
       * @param listenerFn The listener function to call
       * @param wrapWithPreventDefault Whether or not to prevent default behavior
       * (the procedural renderer does this already, so in those cases, we should skip)
       */


      function wrapListener(tNode, lView, listenerFn, wrapWithPreventDefault) {
        // Note: we are performing most of the work in the listener function itself
        // to optimize listener registration.
        return function wrapListenerIn_markDirtyAndPreventDefault(e) {
          // Ivy uses `Function` as a special token that allows us to unwrap the function
          // so that it can be invoked programmatically by `DebugNode.triggerEventHandler`.
          if (e === Function) {
            return listenerFn;
          } // In order to be backwards compatible with View Engine, events on component host nodes
          // must also mark the component view itself dirty (i.e. the view that it owns).


          var startView = tNode.flags & 2
          /* isComponentHost */
          ? getComponentLViewByIndex(tNode.index, lView) : lView; // See interfaces/view.ts for more on LViewFlags.ManualOnPush

          if ((lView[FLAGS] & 32
          /* ManualOnPush */
          ) === 0) {
            markViewDirty(startView);
          }

          var result = executeListenerWithErrorHandling(lView, listenerFn, e); // A just-invoked listener function might have coalesced listeners so we need to check for
          // their presence and invoke as needed.

          var nextListenerFn = wrapListenerIn_markDirtyAndPreventDefault.__ngNextListenerFn__;

          while (nextListenerFn) {
            // We should prevent default if any of the listeners explicitly return false
            result = executeListenerWithErrorHandling(lView, nextListenerFn, e) && result;
            nextListenerFn = nextListenerFn.__ngNextListenerFn__;
          }

          if (wrapWithPreventDefault && result === false) {
            e.preventDefault(); // Necessary for legacy browsers that don't support preventDefault (e.g. IE)

            e.returnValue = false;
          }

          return result;
        };
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Retrieves a context at the level specified and saves it as the global, contextViewData.
       * Will get the next level up if level is not specified.
       *
       * This is used to save contexts of parent views so they can be bound in embedded views, or
       * in conjunction with reference() to bind a ref from a parent view.
       *
       * @param level The relative level of the view from which to grab context compared to contextVewData
       * @returns context
       *
       * @codeGenApi
       */


      function ɵɵnextContext() {
        var level = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
        return nextContextImpl(level);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Checks a given node against matching projection slots and returns the
       * determined slot index. Returns "null" if no slot matched the given node.
       *
       * This function takes into account the parsed ngProjectAs selector from the
       * node's attributes. If present, it will check whether the ngProjectAs selector
       * matches any of the projection slot selectors.
       */


      function matchingProjectionSlotIndex(tNode, projectionSlots) {
        var wildcardNgContentIndex = null;
        var ngProjectAsAttrVal = getProjectAsAttrValue(tNode);

        for (var i = 0; i < projectionSlots.length; i++) {
          var slotValue = projectionSlots[i]; // The last wildcard projection slot should match all nodes which aren't matching
          // any selector. This is necessary to be backwards compatible with view engine.

          if (slotValue === '*') {
            wildcardNgContentIndex = i;
            continue;
          } // If we ran into an `ngProjectAs` attribute, we should match its parsed selector
          // to the list of selectors, otherwise we fall back to matching against the node.


          if (ngProjectAsAttrVal === null ? isNodeMatchingSelectorList(tNode, slotValue,
          /* isProjectionMode */
          true) : isSelectorInSelectorList(ngProjectAsAttrVal, slotValue)) {
            return i; // first matching selector "captures" a given node
          }
        }

        return wildcardNgContentIndex;
      }
      /**
       * Instruction to distribute projectable nodes among <ng-content> occurrences in a given template.
       * It takes all the selectors from the entire component's template and decides where
       * each projected node belongs (it re-distributes nodes among "buckets" where each "bucket" is
       * backed by a selector).
       *
       * This function requires CSS selectors to be provided in 2 forms: parsed (by a compiler) and text,
       * un-parsed form.
       *
       * The parsed form is needed for efficient matching of a node against a given CSS selector.
       * The un-parsed, textual form is needed for support of the ngProjectAs attribute.
       *
       * Having a CSS selector in 2 different formats is not ideal, but alternatives have even more
       * drawbacks:
       * - having only a textual form would require runtime parsing of CSS selectors;
       * - we can't have only a parsed as we can't re-construct textual form from it (as entered by a
       * template author).
       *
       * @param projectionSlots? A collection of projection slots. A projection slot can be based
       *        on a parsed CSS selectors or set to the wildcard selector ("*") in order to match
       *        all nodes which do not match any selector. If not specified, a single wildcard
       *        selector projection slot will be defined.
       *
       * @codeGenApi
       */


      function ɵɵprojectionDef(projectionSlots) {
        var componentNode = getLView()[DECLARATION_COMPONENT_VIEW][T_HOST];

        if (!componentNode.projection) {
          // If no explicit projection slots are defined, fall back to a single
          // projection slot with the wildcard selector.
          var numProjectionSlots = projectionSlots ? projectionSlots.length : 1;
          var projectionHeads = componentNode.projection = newArray(numProjectionSlots, null);
          var tails = projectionHeads.slice();
          var componentChild = componentNode.child;

          while (componentChild !== null) {
            var slotIndex = projectionSlots ? matchingProjectionSlotIndex(componentChild, projectionSlots) : 0;

            if (slotIndex !== null) {
              if (tails[slotIndex]) {
                tails[slotIndex].projectionNext = componentChild;
              } else {
                projectionHeads[slotIndex] = componentChild;
              }

              tails[slotIndex] = componentChild;
            }

            componentChild = componentChild.next;
          }
        }
      }
      /**
       * Inserts previously re-distributed projected nodes. This instruction must be preceded by a call
       * to the projectionDef instruction.
       *
       * @param nodeIndex
       * @param selectorIndex:
       *        - 0 when the selector is `*` (or unspecified as this is the default value),
       *        - 1 based index of the selector from the {@link projectionDef}
       *
       * @codeGenApi
       */


      function ɵɵprojection(nodeIndex) {
        var selectorIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
        var attrs = arguments.length > 2 ? arguments[2] : undefined;
        var lView = getLView();
        var tView = getTView();
        var tProjectionNode = getOrCreateTNode(tView, HEADER_OFFSET + nodeIndex, 16
        /* Projection */
        , null, attrs || null); // We can't use viewData[HOST_NODE] because projection nodes can be nested in embedded views.

        if (tProjectionNode.projection === null) tProjectionNode.projection = selectorIndex; // `<ng-content>` has no content

        setCurrentTNodeAsNotParent();

        if ((tProjectionNode.flags & 64
        /* isDetached */
        ) !== 64
        /* isDetached */
        ) {
            // re-distribution of projectable nodes is stored on a component's view level
            applyProjection(tView, lView, tProjectionNode);
          }
      }
      /**
       *
       * Update an interpolated property on an element with a lone bound value
       *
       * Used when the value passed to a property has 1 interpolated value in it, an no additional text
       * surrounds that interpolated value:
       *
       * ```html
       * <div title="{{v0}}"></div>
       * ```
       *
       * Its compiled representation is::
       *
       * ```ts
       * ɵɵpropertyInterpolate('title', v0);
       * ```
       *
       * If the property name also exists as an input property on one of the element's directives,
       * the component property will be set instead of the element property. This check must
       * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.
       *
       * @param propName The name of the property to update
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param sanitizer An optional sanitizer function
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵpropertyInterpolate(propName, v0, sanitizer) {
        ɵɵpropertyInterpolate1(propName, '', v0, '', sanitizer);
        return ɵɵpropertyInterpolate;
      }
      /**
       *
       * Update an interpolated property on an element with single bound value surrounded by text.
       *
       * Used when the value passed to a property has 1 interpolated value in it:
       *
       * ```html
       * <div title="prefix{{v0}}suffix"></div>
       * ```
       *
       * Its compiled representation is::
       *
       * ```ts
       * ɵɵpropertyInterpolate1('title', 'prefix', v0, 'suffix');
       * ```
       *
       * If the property name also exists as an input property on one of the element's directives,
       * the component property will be set instead of the element property. This check must
       * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.
       *
       * @param propName The name of the property to update
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param sanitizer An optional sanitizer function
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵpropertyInterpolate1(propName, prefix, v0, suffix, sanitizer) {
        var lView = getLView();
        var interpolatedValue = interpolation1(lView, prefix, v0, suffix);

        if (interpolatedValue !== NO_CHANGE) {
          var tView = getTView();
          var tNode = getSelectedTNode();
          elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
          ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 1, prefix, suffix);
        }

        return ɵɵpropertyInterpolate1;
      }
      /**
       *
       * Update an interpolated property on an element with 2 bound values surrounded by text.
       *
       * Used when the value passed to a property has 2 interpolated values in it:
       *
       * ```html
       * <div title="prefix{{v0}}-{{v1}}suffix"></div>
       * ```
       *
       * Its compiled representation is::
       *
       * ```ts
       * ɵɵpropertyInterpolate2('title', 'prefix', v0, '-', v1, 'suffix');
       * ```
       *
       * If the property name also exists as an input property on one of the element's directives,
       * the component property will be set instead of the element property. This check must
       * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.
       *
       * @param propName The name of the property to update
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param sanitizer An optional sanitizer function
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵpropertyInterpolate2(propName, prefix, v0, i0, v1, suffix, sanitizer) {
        var lView = getLView();
        var interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);

        if (interpolatedValue !== NO_CHANGE) {
          var tView = getTView();
          var tNode = getSelectedTNode();
          elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
          ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 2, prefix, i0, suffix);
        }

        return ɵɵpropertyInterpolate2;
      }
      /**
       *
       * Update an interpolated property on an element with 3 bound values surrounded by text.
       *
       * Used when the value passed to a property has 3 interpolated values in it:
       *
       * ```html
       * <div title="prefix{{v0}}-{{v1}}-{{v2}}suffix"></div>
       * ```
       *
       * Its compiled representation is::
       *
       * ```ts
       * ɵɵpropertyInterpolate3(
       * 'title', 'prefix', v0, '-', v1, '-', v2, 'suffix');
       * ```
       *
       * If the property name also exists as an input property on one of the element's directives,
       * the component property will be set instead of the element property. This check must
       * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.
       *
       * @param propName The name of the property to update
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param sanitizer An optional sanitizer function
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵpropertyInterpolate3(propName, prefix, v0, i0, v1, i1, v2, suffix, sanitizer) {
        var lView = getLView();
        var interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);

        if (interpolatedValue !== NO_CHANGE) {
          var tView = getTView();
          var tNode = getSelectedTNode();
          elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
          ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 3, prefix, i0, i1, suffix);
        }

        return ɵɵpropertyInterpolate3;
      }
      /**
       *
       * Update an interpolated property on an element with 4 bound values surrounded by text.
       *
       * Used when the value passed to a property has 4 interpolated values in it:
       *
       * ```html
       * <div title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix"></div>
       * ```
       *
       * Its compiled representation is::
       *
       * ```ts
       * ɵɵpropertyInterpolate4(
       * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');
       * ```
       *
       * If the property name also exists as an input property on one of the element's directives,
       * the component property will be set instead of the element property. This check must
       * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.
       *
       * @param propName The name of the property to update
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param sanitizer An optional sanitizer function
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵpropertyInterpolate4(propName, prefix, v0, i0, v1, i1, v2, i2, v3, suffix, sanitizer) {
        var lView = getLView();
        var interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);

        if (interpolatedValue !== NO_CHANGE) {
          var tView = getTView();
          var tNode = getSelectedTNode();
          elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
          ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 4, prefix, i0, i1, i2, suffix);
        }

        return ɵɵpropertyInterpolate4;
      }
      /**
       *
       * Update an interpolated property on an element with 5 bound values surrounded by text.
       *
       * Used when the value passed to a property has 5 interpolated values in it:
       *
       * ```html
       * <div title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix"></div>
       * ```
       *
       * Its compiled representation is::
       *
       * ```ts
       * ɵɵpropertyInterpolate5(
       * 'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');
       * ```
       *
       * If the property name also exists as an input property on one of the element's directives,
       * the component property will be set instead of the element property. This check must
       * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.
       *
       * @param propName The name of the property to update
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param i3 Static value used for concatenation only.
       * @param v4 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param sanitizer An optional sanitizer function
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵpropertyInterpolate5(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix, sanitizer) {
        var lView = getLView();
        var interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);

        if (interpolatedValue !== NO_CHANGE) {
          var tView = getTView();
          var tNode = getSelectedTNode();
          elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
          ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 5, prefix, i0, i1, i2, i3, suffix);
        }

        return ɵɵpropertyInterpolate5;
      }
      /**
       *
       * Update an interpolated property on an element with 6 bound values surrounded by text.
       *
       * Used when the value passed to a property has 6 interpolated values in it:
       *
       * ```html
       * <div title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix"></div>
       * ```
       *
       * Its compiled representation is::
       *
       * ```ts
       * ɵɵpropertyInterpolate6(
       *    'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');
       * ```
       *
       * If the property name also exists as an input property on one of the element's directives,
       * the component property will be set instead of the element property. This check must
       * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.
       *
       * @param propName The name of the property to update
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param i3 Static value used for concatenation only.
       * @param v4 Value checked for change.
       * @param i4 Static value used for concatenation only.
       * @param v5 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param sanitizer An optional sanitizer function
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵpropertyInterpolate6(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix, sanitizer) {
        var lView = getLView();
        var interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);

        if (interpolatedValue !== NO_CHANGE) {
          var tView = getTView();
          var tNode = getSelectedTNode();
          elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
          ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 6, prefix, i0, i1, i2, i3, i4, suffix);
        }

        return ɵɵpropertyInterpolate6;
      }
      /**
       *
       * Update an interpolated property on an element with 7 bound values surrounded by text.
       *
       * Used when the value passed to a property has 7 interpolated values in it:
       *
       * ```html
       * <div title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix"></div>
       * ```
       *
       * Its compiled representation is::
       *
       * ```ts
       * ɵɵpropertyInterpolate7(
       *    'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');
       * ```
       *
       * If the property name also exists as an input property on one of the element's directives,
       * the component property will be set instead of the element property. This check must
       * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.
       *
       * @param propName The name of the property to update
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param i3 Static value used for concatenation only.
       * @param v4 Value checked for change.
       * @param i4 Static value used for concatenation only.
       * @param v5 Value checked for change.
       * @param i5 Static value used for concatenation only.
       * @param v6 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param sanitizer An optional sanitizer function
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵpropertyInterpolate7(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix, sanitizer) {
        var lView = getLView();
        var interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);

        if (interpolatedValue !== NO_CHANGE) {
          var tView = getTView();
          var tNode = getSelectedTNode();
          elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
          ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 7, prefix, i0, i1, i2, i3, i4, i5, suffix);
        }

        return ɵɵpropertyInterpolate7;
      }
      /**
       *
       * Update an interpolated property on an element with 8 bound values surrounded by text.
       *
       * Used when the value passed to a property has 8 interpolated values in it:
       *
       * ```html
       * <div title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix"></div>
       * ```
       *
       * Its compiled representation is::
       *
       * ```ts
       * ɵɵpropertyInterpolate8(
       *  'title', 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, 'suffix');
       * ```
       *
       * If the property name also exists as an input property on one of the element's directives,
       * the component property will be set instead of the element property. This check must
       * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.
       *
       * @param propName The name of the property to update
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param i3 Static value used for concatenation only.
       * @param v4 Value checked for change.
       * @param i4 Static value used for concatenation only.
       * @param v5 Value checked for change.
       * @param i5 Static value used for concatenation only.
       * @param v6 Value checked for change.
       * @param i6 Static value used for concatenation only.
       * @param v7 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param sanitizer An optional sanitizer function
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵpropertyInterpolate8(propName, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix, sanitizer) {
        var lView = getLView();
        var interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);

        if (interpolatedValue !== NO_CHANGE) {
          var tView = getTView();
          var tNode = getSelectedTNode();
          elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);
          ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, getBindingIndex() - 8, prefix, i0, i1, i2, i3, i4, i5, i6, suffix);
        }

        return ɵɵpropertyInterpolate8;
      }
      /**
       * Update an interpolated property on an element with 9 or more bound values surrounded by text.
       *
       * Used when the number of interpolated values exceeds 8.
       *
       * ```html
       * <div
       *  title="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix"></div>
       * ```
       *
       * Its compiled representation is::
       *
       * ```ts
       * ɵɵpropertyInterpolateV(
       *  'title', ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,
       *  'suffix']);
       * ```
       *
       * If the property name also exists as an input property on one of the element's directives,
       * the component property will be set instead of the element property. This check must
       * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.
       *
       * @param propName The name of the property to update.
       * @param values The collection of values and the strings inbetween those values, beginning with a
       * string prefix and ending with a string suffix.
       * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)
       * @param sanitizer An optional sanitizer function
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵpropertyInterpolateV(propName, values, sanitizer) {
        var lView = getLView();
        var interpolatedValue = interpolationV(lView, values);

        if (interpolatedValue !== NO_CHANGE) {
          var tView = getTView();
          var tNode = getSelectedTNode();
          elementPropertyInternal(tView, tNode, lView, propName, interpolatedValue, lView[RENDERER], sanitizer, false);

          if (ngDevMode) {
            var interpolationInBetween = [values[0]]; // prefix

            for (var i = 2; i < values.length; i += 2) {
              interpolationInBetween.push(values[i]);
            }

            storePropertyBindingMetadata.apply(void 0, [tView.data, tNode, propName, getBindingIndex() - interpolationInBetween.length + 1].concat(interpolationInBetween));
          }
        }

        return ɵɵpropertyInterpolateV;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * This file contains reuseable "empty" symbols that can be used as default return values
       * in different parts of the rendering code. Because the same symbols are returned, this
       * allows for identity checks against these values to be consistently used by the framework
       * code.
       */


      var EMPTY_OBJ$1 = {};
      var EMPTY_ARRAY$3 = []; // freezing the values prevents any code from accidentally inserting new values in

      if ((typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode()) {
        // These property accesses can be ignored because ngDevMode will be set to false
        // when optimizing code and the whole if statement will be dropped.
        // tslint:disable-next-line:no-toplevel-property-access
        Object.freeze(EMPTY_OBJ$1); // tslint:disable-next-line:no-toplevel-property-access

        Object.freeze(EMPTY_ARRAY$3);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * NOTE: The word `styling` is used interchangeably as style or class styling.
       *
       * This file contains code to link styling instructions together so that they can be replayed in
       * priority order. The file exists because Ivy styling instruction execution order does not match
       * that of the priority order. The purpose of this code is to create a linked list so that the
       * instructions can be traversed in priority order when computing the styles.
       *
       * Assume we are dealing with the following code:
       * ```
       * @Component({
       *   template: `
       *     <my-cmp [style]=" {color: '#001'} "
       *             [style.color]=" #002 "
       *             dir-style-color-1
       *             dir-style-color-2> `
       * })
       * class ExampleComponent {
       *   static ngComp = ... {
       *     ...
       *     // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`
       *     ɵɵstyleMap({color: '#001'});
       *     ɵɵstyleProp('color', '#002');
       *     ...
       *   }
       * }
       *
       * @Directive({
       *   selector: `[dir-style-color-1]',
       * })
       * class Style1Directive {
       *   @HostBinding('style') style = {color: '#005'};
       *   @HostBinding('style.color') color = '#006';
       *
       *   static ngDir = ... {
       *     ...
       *     // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`
       *     ɵɵstyleMap({color: '#005'});
       *     ɵɵstyleProp('color', '#006');
       *     ...
       *   }
       * }
       *
       * @Directive({
       *   selector: `[dir-style-color-2]',
       * })
       * class Style2Directive {
       *   @HostBinding('style') style = {color: '#007'};
       *   @HostBinding('style.color') color = '#008';
       *
       *   static ngDir = ... {
       *     ...
       *     // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`
       *     ɵɵstyleMap({color: '#007'});
       *     ɵɵstyleProp('color', '#008');
       *     ...
       *   }
       * }
       *
       * @Directive({
       *   selector: `my-cmp',
       * })
       * class MyComponent {
       *   @HostBinding('style') style = {color: '#003'};
       *   @HostBinding('style.color') color = '#004';
       *
       *   static ngComp = ... {
       *     ...
       *     // Compiler ensures that `ɵɵstyleProp` is after `ɵɵstyleMap`
       *     ɵɵstyleMap({color: '#003'});
       *     ɵɵstyleProp('color', '#004');
       *     ...
       *   }
       * }
       * ```
       *
       * The Order of instruction execution is:
       *
       * NOTE: the comment binding location is for illustrative purposes only.
       *
       * ```
       * // Template: (ExampleComponent)
       *     ɵɵstyleMap({color: '#001'});   // Binding index: 10
       *     ɵɵstyleProp('color', '#002');  // Binding index: 12
       * // MyComponent
       *     ɵɵstyleMap({color: '#003'});   // Binding index: 20
       *     ɵɵstyleProp('color', '#004');  // Binding index: 22
       * // Style1Directive
       *     ɵɵstyleMap({color: '#005'});   // Binding index: 24
       *     ɵɵstyleProp('color', '#006');  // Binding index: 26
       * // Style2Directive
       *     ɵɵstyleMap({color: '#007'});   // Binding index: 28
       *     ɵɵstyleProp('color', '#008');  // Binding index: 30
       * ```
       *
       * The correct priority order of concatenation is:
       *
       * ```
       * // MyComponent
       *     ɵɵstyleMap({color: '#003'});   // Binding index: 20
       *     ɵɵstyleProp('color', '#004');  // Binding index: 22
       * // Style1Directive
       *     ɵɵstyleMap({color: '#005'});   // Binding index: 24
       *     ɵɵstyleProp('color', '#006');  // Binding index: 26
       * // Style2Directive
       *     ɵɵstyleMap({color: '#007'});   // Binding index: 28
       *     ɵɵstyleProp('color', '#008');  // Binding index: 30
       * // Template: (ExampleComponent)
       *     ɵɵstyleMap({color: '#001'});   // Binding index: 10
       *     ɵɵstyleProp('color', '#002');  // Binding index: 12
       * ```
       *
       * What color should be rendered?
       *
       * Once the items are correctly sorted in the list, the answer is simply the last item in the
       * concatenation list which is `#002`.
       *
       * To do so we keep a linked list of all of the bindings which pertain to this element.
       * Notice that the bindings are inserted in the order of execution, but the `TView.data` allows
       * us to traverse them in the order of priority.
       *
       * |Idx|`TView.data`|`LView`          | Notes
       * |---|------------|-----------------|--------------
       * |...|            |                 |
       * |10 |`null`      |`{color: '#001'}`| `ɵɵstyleMap('color', {color: '#001'})`
       * |11 |`30 | 12`   | ...             |
       * |12 |`color`     |`'#002'`         | `ɵɵstyleProp('color', '#002')`
       * |13 |`10 | 0`    | ...             |
       * |...|            |                 |
       * |20 |`null`      |`{color: '#003'}`| `ɵɵstyleMap('color', {color: '#003'})`
       * |21 |`0 | 22`    | ...             |
       * |22 |`color`     |`'#004'`         | `ɵɵstyleProp('color', '#004')`
       * |23 |`20 | 24`   | ...             |
       * |24 |`null`      |`{color: '#005'}`| `ɵɵstyleMap('color', {color: '#005'})`
       * |25 |`22 | 26`   | ...             |
       * |26 |`color`     |`'#006'`         | `ɵɵstyleProp('color', '#006')`
       * |27 |`24 | 28`   | ...             |
       * |28 |`null`      |`{color: '#007'}`| `ɵɵstyleMap('color', {color: '#007'})`
       * |29 |`26 | 30`   | ...             |
       * |30 |`color`     |`'#008'`         | `ɵɵstyleProp('color', '#008')`
       * |31 |`28 | 10`   | ...             |
       *
       * The above data structure allows us to re-concatenate the styling no matter which data binding
       * changes.
       *
       * NOTE: in addition to keeping track of next/previous index the `TView.data` also stores prev/next
       * duplicate bit. The duplicate bit if true says there either is a binding with the same name or
       * there is a map (which may contain the name). This information is useful in knowing if other
       * styles with higher priority need to be searched for overwrites.
       *
       * NOTE: See `should support example in 'tnode_linked_list.ts' documentation` in
       * `tnode_linked_list_spec.ts` for working example.
       */


      var __unused_const_as_closure_does_not_like_standalone_comment_blocks__;
      /**
       * Insert new `tStyleValue` at `TData` and link existing style bindings such that we maintain linked
       * list of styles and compute the duplicate flag.
       *
       * Note: this function is executed during `firstUpdatePass` only to populate the `TView.data`.
       *
       * The function works by keeping track of `tStylingRange` which contains two pointers pointing to
       * the head/tail of the template portion of the styles.
       *  - if `isHost === false` (we are template) then insertion is at tail of `TStylingRange`
       *  - if `isHost === true` (we are host binding) then insertion is at head of `TStylingRange`
       *
       * @param tData The `TData` to insert into.
       * @param tNode `TNode` associated with the styling element.
       * @param tStylingKey See `TStylingKey`.
       * @param index location of where `tStyleValue` should be stored (and linked into list.)
       * @param isHostBinding `true` if the insertion is for a `hostBinding`. (insertion is in front of
       *               template.)
       * @param isClassBinding True if the associated `tStylingKey` as a `class` styling.
       *                       `tNode.classBindings` should be used (or `tNode.styleBindings` otherwise.)
       */


      function insertTStylingBinding(tData, tNode, tStylingKeyWithStatic, index, isHostBinding, isClassBinding) {
        ngDevMode && assertFirstUpdatePass(getTView());
        var tBindings = isClassBinding ? tNode.classBindings : tNode.styleBindings;
        var tmplHead = getTStylingRangePrev(tBindings);
        var tmplTail = getTStylingRangeNext(tBindings);
        tData[index] = tStylingKeyWithStatic;
        var isKeyDuplicateOfStatic = false;
        var tStylingKey;

        if (Array.isArray(tStylingKeyWithStatic)) {
          // We are case when the `TStylingKey` contains static fields as well.
          var staticKeyValueArray = tStylingKeyWithStatic;
          tStylingKey = staticKeyValueArray[1]; // unwrap.
          // We need to check if our key is present in the static so that we can mark it as duplicate.

          if (tStylingKey === null || keyValueArrayIndexOf(staticKeyValueArray, tStylingKey) > 0) {
            // tStylingKey is present in the statics, need to mark it as duplicate.
            isKeyDuplicateOfStatic = true;
          }
        } else {
          tStylingKey = tStylingKeyWithStatic;
        }

        if (isHostBinding) {
          // We are inserting host bindings
          // If we don't have template bindings then `tail` is 0.
          var hasTemplateBindings = tmplTail !== 0; // This is important to know because that means that the `head` can't point to the first
          // template bindings (there are none.) Instead the head points to the tail of the template.

          if (hasTemplateBindings) {
            // template head's "prev" will point to last host binding or to 0 if no host bindings yet
            var previousNode = getTStylingRangePrev(tData[tmplHead + 1]);
            tData[index + 1] = toTStylingRange(previousNode, tmplHead); // if a host binding has already been registered, we need to update the next of that host
            // binding to point to this one

            if (previousNode !== 0) {
              // We need to update the template-tail value to point to us.
              tData[previousNode + 1] = setTStylingRangeNext(tData[previousNode + 1], index);
            } // The "previous" of the template binding head should point to this host binding


            tData[tmplHead + 1] = setTStylingRangePrev(tData[tmplHead + 1], index);
          } else {
            tData[index + 1] = toTStylingRange(tmplHead, 0); // if a host binding has already been registered, we need to update the next of that host
            // binding to point to this one

            if (tmplHead !== 0) {
              // We need to update the template-tail value to point to us.
              tData[tmplHead + 1] = setTStylingRangeNext(tData[tmplHead + 1], index);
            } // if we don't have template, the head points to template-tail, and needs to be advanced.


            tmplHead = index;
          }
        } else {
          // We are inserting in template section.
          // We need to set this binding's "previous" to the current template tail
          tData[index + 1] = toTStylingRange(tmplTail, 0);
          ngDevMode && assertEqual(tmplHead !== 0 && tmplTail === 0, false, 'Adding template bindings after hostBindings is not allowed.');

          if (tmplHead === 0) {
            tmplHead = index;
          } else {
            // We need to update the previous value "next" to point to this binding
            tData[tmplTail + 1] = setTStylingRangeNext(tData[tmplTail + 1], index);
          }

          tmplTail = index;
        } // Now we need to update / compute the duplicates.
        // Starting with our location search towards head (least priority)


        if (isKeyDuplicateOfStatic) {
          tData[index + 1] = setTStylingRangePrevDuplicate(tData[index + 1]);
        }

        markDuplicates(tData, tStylingKey, index, true, isClassBinding);
        markDuplicates(tData, tStylingKey, index, false, isClassBinding);
        markDuplicateOfResidualStyling(tNode, tStylingKey, tData, index, isClassBinding);
        tBindings = toTStylingRange(tmplHead, tmplTail);

        if (isClassBinding) {
          tNode.classBindings = tBindings;
        } else {
          tNode.styleBindings = tBindings;
        }
      }
      /**
       * Look into the residual styling to see if the current `tStylingKey` is duplicate of residual.
       *
       * @param tNode `TNode` where the residual is stored.
       * @param tStylingKey `TStylingKey` to store.
       * @param tData `TData` associated with the current `LView`.
       * @param index location of where `tStyleValue` should be stored (and linked into list.)
       * @param isClassBinding True if the associated `tStylingKey` as a `class` styling.
       *                       `tNode.classBindings` should be used (or `tNode.styleBindings` otherwise.)
       */


      function markDuplicateOfResidualStyling(tNode, tStylingKey, tData, index, isClassBinding) {
        var residual = isClassBinding ? tNode.residualClasses : tNode.residualStyles;

        if (residual != null
        /* or undefined */
        && typeof tStylingKey == 'string' && keyValueArrayIndexOf(residual, tStylingKey) >= 0) {
          // We have duplicate in the residual so mark ourselves as duplicate.
          tData[index + 1] = setTStylingRangeNextDuplicate(tData[index + 1]);
        }
      }
      /**
       * Marks `TStyleValue`s as duplicates if another style binding in the list has the same
       * `TStyleValue`.
       *
       * NOTE: this function is intended to be called twice once with `isPrevDir` set to `true` and once
       * with it set to `false` to search both the previous as well as next items in the list.
       *
       * No duplicate case
       * ```
       *   [style.color]
       *   [style.width.px] <<- index
       *   [style.height.px]
       * ```
       *
       * In the above case adding `[style.width.px]` to the existing `[style.color]` produces no
       * duplicates because `width` is not found in any other part of the linked list.
       *
       * Duplicate case
       * ```
       *   [style.color]
       *   [style.width.em]
       *   [style.width.px] <<- index
       * ```
       * In the above case adding `[style.width.px]` will produce a duplicate with `[style.width.em]`
       * because `width` is found in the chain.
       *
       * Map case 1
       * ```
       *   [style.width.px]
       *   [style.color]
       *   [style]  <<- index
       * ```
       * In the above case adding `[style]` will produce a duplicate with any other bindings because
       * `[style]` is a Map and as such is fully dynamic and could produce `color` or `width`.
       *
       * Map case 2
       * ```
       *   [style]
       *   [style.width.px]
       *   [style.color]  <<- index
       * ```
       * In the above case adding `[style.color]` will produce a duplicate because there is already a
       * `[style]` binding which is a Map and as such is fully dynamic and could produce `color` or
       * `width`.
       *
       * NOTE: Once `[style]` (Map) is added into the system all things are mapped as duplicates.
       * NOTE: We use `style` as example, but same logic is applied to `class`es as well.
       *
       * @param tData `TData` where the linked list is stored.
       * @param tStylingKey `TStylingKeyPrimitive` which contains the value to compare to other keys in
       *        the linked list.
       * @param index Starting location in the linked list to search from
       * @param isPrevDir Direction.
       *        - `true` for previous (lower priority);
       *        - `false` for next (higher priority).
       */


      function markDuplicates(tData, tStylingKey, index, isPrevDir, isClassBinding) {
        var tStylingAtIndex = tData[index + 1];
        var isMap = tStylingKey === null;
        var cursor = isPrevDir ? getTStylingRangePrev(tStylingAtIndex) : getTStylingRangeNext(tStylingAtIndex);
        var foundDuplicate = false; // We keep iterating as long as we have a cursor
        // AND either:
        // - we found what we are looking for, OR
        // - we are a map in which case we have to continue searching even after we find what we were
        //   looking for since we are a wild card and everything needs to be flipped to duplicate.

        while (cursor !== 0 && (foundDuplicate === false || isMap)) {
          ngDevMode && assertIndexInRange(tData, cursor);
          var tStylingValueAtCursor = tData[cursor];
          var tStyleRangeAtCursor = tData[cursor + 1];

          if (isStylingMatch(tStylingValueAtCursor, tStylingKey)) {
            foundDuplicate = true;
            tData[cursor + 1] = isPrevDir ? setTStylingRangeNextDuplicate(tStyleRangeAtCursor) : setTStylingRangePrevDuplicate(tStyleRangeAtCursor);
          }

          cursor = isPrevDir ? getTStylingRangePrev(tStyleRangeAtCursor) : getTStylingRangeNext(tStyleRangeAtCursor);
        }

        if (foundDuplicate) {
          // if we found a duplicate, than mark ourselves.
          tData[index + 1] = isPrevDir ? setTStylingRangePrevDuplicate(tStylingAtIndex) : setTStylingRangeNextDuplicate(tStylingAtIndex);
        }
      }
      /**
       * Determines if two `TStylingKey`s are a match.
       *
       * When computing whether a binding contains a duplicate, we need to compare if the instruction
       * `TStylingKey` has a match.
       *
       * Here are examples of `TStylingKey`s which match given `tStylingKeyCursor` is:
       * - `color`
       *    - `color`    // Match another color
       *    - `null`     // That means that `tStylingKey` is a `classMap`/`styleMap` instruction
       *    - `['', 'color', 'other', true]` // wrapped `color` so match
       *    - `['', null, 'other', true]`       // wrapped `null` so match
       *    - `['', 'width', 'color', 'value']` // wrapped static value contains a match on `'color'`
       * - `null`       // `tStylingKeyCursor` always match as it is `classMap`/`styleMap` instruction
       *
       * @param tStylingKeyCursor
       * @param tStylingKey
       */


      function isStylingMatch(tStylingKeyCursor, tStylingKey) {
        ngDevMode && assertNotEqual(Array.isArray(tStylingKey), true, 'Expected that \'tStylingKey\' has been unwrapped');

        if (tStylingKeyCursor === null || // If the cursor is `null` it means that we have map at that
        // location so we must assume that we have a match.
        tStylingKey == null || // If `tStylingKey` is `null` then it is a map therefor assume that it
        // contains a match.
        (Array.isArray(tStylingKeyCursor) ? tStylingKeyCursor[1] : tStylingKeyCursor) === tStylingKey // If the keys match explicitly than we are a match.
        ) {
            return true;
          } else if (Array.isArray(tStylingKeyCursor) && typeof tStylingKey === 'string') {
          // if we did not find a match, but `tStylingKeyCursor` is `KeyValueArray` that means cursor has
          // statics and we need to check those as well.
          return keyValueArrayIndexOf(tStylingKeyCursor, tStylingKey) >= 0; // see if we are matching the key
        }

        return false;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // Global state of the parser. (This makes parser non-reentrant, but that is not an issue)


      var parserState = {
        textEnd: 0,
        key: 0,
        keyEnd: 0,
        value: 0,
        valueEnd: 0
      };
      /**
       * Retrieves the last parsed `key` of style.
       * @param text the text to substring the key from.
       */

      function getLastParsedKey(text) {
        return text.substring(parserState.key, parserState.keyEnd);
      }
      /**
       * Retrieves the last parsed `value` of style.
       * @param text the text to substring the key from.
       */


      function getLastParsedValue(text) {
        return text.substring(parserState.value, parserState.valueEnd);
      }
      /**
       * Initializes `className` string for parsing and parses the first token.
       *
       * This function is intended to be used in this format:
       * ```
       * for (let i = parseClassName(text); i >= 0; i = parseClassNameNext(text, i)) {
       *   const key = getLastParsedKey();
       *   ...
       * }
       * ```
       * @param text `className` to parse
       * @returns index where the next invocation of `parseClassNameNext` should resume.
       */


      function parseClassName(text) {
        resetParserState(text);
        return parseClassNameNext(text, consumeWhitespace(text, 0, parserState.textEnd));
      }
      /**
       * Parses next `className` token.
       *
       * This function is intended to be used in this format:
       * ```
       * for (let i = parseClassName(text); i >= 0; i = parseClassNameNext(text, i)) {
       *   const key = getLastParsedKey();
       *   ...
       * }
       * ```
       *
       * @param text `className` to parse
       * @param index where the parsing should resume.
       * @returns index where the next invocation of `parseClassNameNext` should resume.
       */


      function parseClassNameNext(text, index) {
        var end = parserState.textEnd;

        if (end === index) {
          return -1;
        }

        index = parserState.keyEnd = consumeClassToken(text, parserState.key = index, end);
        return consumeWhitespace(text, index, end);
      }
      /**
       * Initializes `cssText` string for parsing and parses the first key/values.
       *
       * This function is intended to be used in this format:
       * ```
       * for (let i = parseStyle(text); i >= 0; i = parseStyleNext(text, i))) {
       *   const key = getLastParsedKey();
       *   const value = getLastParsedValue();
       *   ...
       * }
       * ```
       * @param text `cssText` to parse
       * @returns index where the next invocation of `parseStyleNext` should resume.
       */


      function parseStyle(text) {
        resetParserState(text);
        return parseStyleNext(text, consumeWhitespace(text, 0, parserState.textEnd));
      }
      /**
       * Parses the next `cssText` key/values.
       *
       * This function is intended to be used in this format:
       * ```
       * for (let i = parseStyle(text); i >= 0; i = parseStyleNext(text, i))) {
       *   const key = getLastParsedKey();
       *   const value = getLastParsedValue();
       *   ...
       * }
       *
       * @param text `cssText` to parse
       * @param index where the parsing should resume.
       * @returns index where the next invocation of `parseStyleNext` should resume.
       */


      function parseStyleNext(text, startIndex) {
        var end = parserState.textEnd;
        var index = parserState.key = consumeWhitespace(text, startIndex, end);

        if (end === index) {
          // we reached an end so just quit
          return -1;
        }

        index = parserState.keyEnd = consumeStyleKey(text, index, end);
        index = consumeSeparator(text, index, end, 58
        /* COLON */
        );
        index = parserState.value = consumeWhitespace(text, index, end);
        index = parserState.valueEnd = consumeStyleValue(text, index, end);
        return consumeSeparator(text, index, end, 59
        /* SEMI_COLON */
        );
      }
      /**
       * Reset the global state of the styling parser.
       * @param text The styling text to parse.
       */


      function resetParserState(text) {
        parserState.key = 0;
        parserState.keyEnd = 0;
        parserState.value = 0;
        parserState.valueEnd = 0;
        parserState.textEnd = text.length;
      }
      /**
       * Returns index of next non-whitespace character.
       *
       * @param text Text to scan
       * @param startIndex Starting index of character where the scan should start.
       * @param endIndex Ending index of character where the scan should end.
       * @returns Index of next non-whitespace character (May be the same as `start` if no whitespace at
       *          that location.)
       */


      function consumeWhitespace(text, startIndex, endIndex) {
        while (startIndex < endIndex && text.charCodeAt(startIndex) <= 32
        /* SPACE */
        ) {
          startIndex++;
        }

        return startIndex;
      }
      /**
       * Returns index of last char in class token.
       *
       * @param text Text to scan
       * @param startIndex Starting index of character where the scan should start.
       * @param endIndex Ending index of character where the scan should end.
       * @returns Index after last char in class token.
       */


      function consumeClassToken(text, startIndex, endIndex) {
        while (startIndex < endIndex && text.charCodeAt(startIndex) > 32
        /* SPACE */
        ) {
          startIndex++;
        }

        return startIndex;
      }
      /**
       * Consumes all of the characters belonging to style key and token.
       *
       * @param text Text to scan
       * @param startIndex Starting index of character where the scan should start.
       * @param endIndex Ending index of character where the scan should end.
       * @returns Index after last style key character.
       */


      function consumeStyleKey(text, startIndex, endIndex) {
        var ch;

        while (startIndex < endIndex && ((ch = text.charCodeAt(startIndex)) === 45
        /* DASH */
        || ch === 95
        /* UNDERSCORE */
        || (ch & -33
        /* UPPER_CASE */
        ) >= 65
        /* A */
        && (ch & -33
        /* UPPER_CASE */
        ) <= 90
        /* Z */
        || ch >= 48
        /* ZERO */
        && ch <= 57
        /* NINE */
        )) {
          startIndex++;
        }

        return startIndex;
      }
      /**
       * Consumes all whitespace and the separator `:` after the style key.
       *
       * @param text Text to scan
       * @param startIndex Starting index of character where the scan should start.
       * @param endIndex Ending index of character where the scan should end.
       * @returns Index after separator and surrounding whitespace.
       */


      function consumeSeparator(text, startIndex, endIndex, separator) {
        startIndex = consumeWhitespace(text, startIndex, endIndex);

        if (startIndex < endIndex) {
          if (ngDevMode && text.charCodeAt(startIndex) !== separator) {
            malformedStyleError(text, String.fromCharCode(separator), startIndex);
          }

          startIndex++;
        }

        return startIndex;
      }
      /**
       * Consumes style value honoring `url()` and `""` text.
       *
       * @param text Text to scan
       * @param startIndex Starting index of character where the scan should start.
       * @param endIndex Ending index of character where the scan should end.
       * @returns Index after last style value character.
       */


      function consumeStyleValue(text, startIndex, endIndex) {
        var ch1 = -1; // 1st previous character

        var ch2 = -1; // 2nd previous character

        var ch3 = -1; // 3rd previous character

        var i = startIndex;
        var lastChIndex = i;

        while (i < endIndex) {
          var ch = text.charCodeAt(i++);

          if (ch === 59
          /* SEMI_COLON */
          ) {
              return lastChIndex;
            } else if (ch === 34
          /* DOUBLE_QUOTE */
          || ch === 39
          /* SINGLE_QUOTE */
          ) {
              lastChIndex = i = consumeQuotedText(text, ch, i, endIndex);
            } else if (startIndex === i - 4 && // We have seen only 4 characters so far "URL(" (Ignore "foo_URL()")
          ch3 === 85
          /* U */
          && ch2 === 82
          /* R */
          && ch1 === 76
          /* L */
          && ch === 40
          /* OPEN_PAREN */
          ) {
              lastChIndex = i = consumeQuotedText(text, 41
              /* CLOSE_PAREN */
              , i, endIndex);
            } else if (ch > 32
          /* SPACE */
          ) {
              // if we have a non-whitespace character then capture its location
              lastChIndex = i;
            }

          ch3 = ch2;
          ch2 = ch1;
          ch1 = ch & -33
          /* UPPER_CASE */
          ;
        }

        return lastChIndex;
      }
      /**
       * Consumes all of the quoted characters.
       *
       * @param text Text to scan
       * @param quoteCharCode CharCode of either `"` or `'` quote or `)` for `url(...)`.
       * @param startIndex Starting index of character where the scan should start.
       * @param endIndex Ending index of character where the scan should end.
       * @returns Index after quoted characters.
       */


      function consumeQuotedText(text, quoteCharCode, startIndex, endIndex) {
        var ch1 = -1; // 1st previous character

        var index = startIndex;

        while (index < endIndex) {
          var ch = text.charCodeAt(index++);

          if (ch == quoteCharCode && ch1 !== 92
          /* BACK_SLASH */
          ) {
              return index;
            }

          if (ch == 92
          /* BACK_SLASH */
          && ch1 === 92
          /* BACK_SLASH */
          ) {
              // two back slashes cancel each other out. For example `"\\"` should properly end the
              // quotation. (It should not assume that the last `"` is escaped.)
              ch1 = 0;
            } else {
            ch1 = ch;
          }
        }

        throw ngDevMode ? malformedStyleError(text, String.fromCharCode(quoteCharCode), endIndex) : new Error();
      }

      function malformedStyleError(text, expecting, index) {
        ngDevMode && assertEqual(typeof text === 'string', true, 'String expected here');
        throw throwError("Malformed style at location ".concat(index, " in string '") + text.substring(0, index) + '[>>' + text.substring(index, index + 1) + '<<]' + text.substr(index + 1) + "'. Expecting '".concat(expecting, "'."));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Update a style binding on an element with the provided value.
       *
       * If the style value is falsy then it will be removed from the element
       * (or assigned a different value depending if there are any styles placed
       * on the element with `styleMap` or any static styles that are
       * present from when the element was created with `styling`).
       *
       * Note that the styling element is updated as part of `stylingApply`.
       *
       * @param prop A valid CSS property.
       * @param value New value to write (`null` or an empty string to remove).
       * @param suffix Optional suffix. Used with scalar values to add unit such as `px`.
       *
       * Note that this will apply the provided style value to the host element if this function is called
       * within a host binding function.
       *
       * @codeGenApi
       */


      function ɵɵstyleProp(prop, value, suffix) {
        checkStylingProperty(prop, value, suffix, false);
        return ɵɵstyleProp;
      }
      /**
       * Update a class binding on an element with the provided value.
       *
       * This instruction is meant to handle the `[class.foo]="exp"` case and,
       * therefore, the class binding itself must already be allocated using
       * `styling` within the creation block.
       *
       * @param prop A valid CSS class (only one).
       * @param value A true/false value which will turn the class on or off.
       *
       * Note that this will apply the provided class value to the host element if this function
       * is called within a host binding function.
       *
       * @codeGenApi
       */


      function ɵɵclassProp(className, value) {
        checkStylingProperty(className, value, null, true);
        return ɵɵclassProp;
      }
      /**
       * Update style bindings using an object literal on an element.
       *
       * This instruction is meant to apply styling via the `[style]="exp"` template bindings.
       * When styles are applied to the element they will then be updated with respect to
       * any styles/classes set via `styleProp`. If any styles are set to falsy
       * then they will be removed from the element.
       *
       * Note that the styling instruction will not be applied until `stylingApply` is called.
       *
       * @param styles A key/value style map of the styles that will be applied to the given element.
       *        Any missing styles (that have already been applied to the element beforehand) will be
       *        removed (unset) from the element's styling.
       *
       * Note that this will apply the provided styleMap value to the host element if this function
       * is called within a host binding.
       *
       * @codeGenApi
       */


      function ɵɵstyleMap(styles) {
        checkStylingMap(styleKeyValueArraySet, styleStringParser, styles, false);
      }
      /**
       * Parse text as style and add values to KeyValueArray.
       *
       * This code is pulled out to a separate function so that it can be tree shaken away if it is not
       * needed. It is only referenced from `ɵɵstyleMap`.
       *
       * @param keyValueArray KeyValueArray to add parsed values to.
       * @param text text to parse.
       */


      function styleStringParser(keyValueArray, text) {
        for (var i = parseStyle(text); i >= 0; i = parseStyleNext(text, i)) {
          styleKeyValueArraySet(keyValueArray, getLastParsedKey(text), getLastParsedValue(text));
        }
      }
      /**
       * Update class bindings using an object literal or class-string on an element.
       *
       * This instruction is meant to apply styling via the `[class]="exp"` template bindings.
       * When classes are applied to the element they will then be updated with
       * respect to any styles/classes set via `classProp`. If any
       * classes are set to falsy then they will be removed from the element.
       *
       * Note that the styling instruction will not be applied until `stylingApply` is called.
       * Note that this will the provided classMap value to the host element if this function is called
       * within a host binding.
       *
       * @param classes A key/value map or string of CSS classes that will be added to the
       *        given element. Any missing classes (that have already been applied to the element
       *        beforehand) will be removed (unset) from the element's list of CSS classes.
       *
       * @codeGenApi
       */


      function ɵɵclassMap(classes) {
        checkStylingMap(keyValueArraySet, classStringParser, classes, true);
      }
      /**
       * Parse text as class and add values to KeyValueArray.
       *
       * This code is pulled out to a separate function so that it can be tree shaken away if it is not
       * needed. It is only referenced from `ɵɵclassMap`.
       *
       * @param keyValueArray KeyValueArray to add parsed values to.
       * @param text text to parse.
       */


      function classStringParser(keyValueArray, text) {
        for (var i = parseClassName(text); i >= 0; i = parseClassNameNext(text, i)) {
          keyValueArraySet(keyValueArray, getLastParsedKey(text), true);
        }
      }
      /**
       * Common code between `ɵɵclassProp` and `ɵɵstyleProp`.
       *
       * @param prop property name.
       * @param value binding value.
       * @param suffix suffix for the property (e.g. `em` or `px`)
       * @param isClassBased `true` if `class` change (`false` if `style`)
       */


      function checkStylingProperty(prop, value, suffix, isClassBased) {
        var lView = getLView();
        var tView = getTView(); // Styling instructions use 2 slots per binding.
        // 1. one for the value / TStylingKey
        // 2. one for the intermittent-value / TStylingRange

        var bindingIndex = incrementBindingIndex(2);

        if (tView.firstUpdatePass) {
          stylingFirstUpdatePass(tView, prop, bindingIndex, isClassBased);
        }

        if (value !== NO_CHANGE && bindingUpdated(lView, bindingIndex, value)) {
          var tNode = tView.data[getSelectedIndex()];
          updateStyling(tView, tNode, lView, lView[RENDERER], prop, lView[bindingIndex + 1] = normalizeSuffix(value, suffix), isClassBased, bindingIndex);
        }
      }
      /**
       * Common code between `ɵɵclassMap` and `ɵɵstyleMap`.
       *
       * @param keyValueArraySet (See `keyValueArraySet` in "util/array_utils") Gets passed in as a
       *        function so that `style` can be processed. This is done for tree shaking purposes.
       * @param stringParser Parser used to parse `value` if `string`. (Passed in as `style` and `class`
       *        have different parsers.)
       * @param value bound value from application
       * @param isClassBased `true` if `class` change (`false` if `style`)
       */


      function checkStylingMap(keyValueArraySet, stringParser, value, isClassBased) {
        var tView = getTView();
        var bindingIndex = incrementBindingIndex(2);

        if (tView.firstUpdatePass) {
          stylingFirstUpdatePass(tView, null, bindingIndex, isClassBased);
        }

        var lView = getLView();

        if (value !== NO_CHANGE && bindingUpdated(lView, bindingIndex, value)) {
          // `getSelectedIndex()` should be here (rather than in instruction) so that it is guarded by the
          // if so as not to read unnecessarily.
          var tNode = tView.data[getSelectedIndex()];

          if (hasStylingInputShadow(tNode, isClassBased) && !isInHostBindings(tView, bindingIndex)) {
            if (ngDevMode) {
              // verify that if we are shadowing then `TData` is appropriately marked so that we skip
              // processing this binding in styling resolution.
              var tStylingKey = tView.data[bindingIndex];
              assertEqual(Array.isArray(tStylingKey) ? tStylingKey[1] : tStylingKey, false, 'Styling linked list shadow input should be marked as \'false\'');
            } // VE does not concatenate the static portion like we are doing here.
            // Instead VE just ignores the static completely if dynamic binding is present.
            // Because of locality we have already set the static portion because we don't know if there
            // is a dynamic portion until later. If we would ignore the static portion it would look like
            // the binding has removed it. This would confuse `[ngStyle]`/`[ngClass]` to do the wrong
            // thing as it would think that the static portion was removed. For this reason we
            // concatenate it so that `[ngStyle]`/`[ngClass]`  can continue to work on changed.


            var staticPrefix = isClassBased ? tNode.classesWithoutHost : tNode.stylesWithoutHost;
            ngDevMode && isClassBased === false && staticPrefix !== null && assertEqual(staticPrefix.endsWith(';'), true, 'Expecting static portion to end with \';\'');

            if (staticPrefix !== null) {
              // We want to make sure that falsy values of `value` become empty strings.
              value = concatStringsWithSpace(staticPrefix, value ? value : '');
            } // Given `<div [style] my-dir>` such that `my-dir` has `@Input('style')`.
            // This takes over the `[style]` binding. (Same for `[class]`)


            setDirectiveInputsWhichShadowsStyling(tView, tNode, lView, value, isClassBased);
          } else {
            updateStylingMap(tView, tNode, lView, lView[RENDERER], lView[bindingIndex + 1], lView[bindingIndex + 1] = toStylingKeyValueArray(keyValueArraySet, stringParser, value), isClassBased, bindingIndex);
          }
        }
      }
      /**
       * Determines when the binding is in `hostBindings` section
       *
       * @param tView Current `TView`
       * @param bindingIndex index of binding which we would like if it is in `hostBindings`
       */


      function isInHostBindings(tView, bindingIndex) {
        // All host bindings are placed after the expando section.
        return bindingIndex >= tView.expandoStartIndex;
      }
      /**
       * Collects the necessary information to insert the binding into a linked list of style bindings
       * using `insertTStylingBinding`.
       *
       * @param tView `TView` where the binding linked list will be stored.
       * @param tStylingKey Property/key of the binding.
       * @param bindingIndex Index of binding associated with the `prop`
       * @param isClassBased `true` if `class` change (`false` if `style`)
       */


      function stylingFirstUpdatePass(tView, tStylingKey, bindingIndex, isClassBased) {
        ngDevMode && assertFirstUpdatePass(tView);
        var tData = tView.data;

        if (tData[bindingIndex + 1] === null) {
          // The above check is necessary because we don't clear first update pass until first successful
          // (no exception) template execution. This prevents the styling instruction from double adding
          // itself to the list.
          // `getSelectedIndex()` should be here (rather than in instruction) so that it is guarded by the
          // if so as not to read unnecessarily.
          var tNode = tData[getSelectedIndex()];
          ngDevMode && assertDefined(tNode, 'TNode expected');
          var isHostBindings = isInHostBindings(tView, bindingIndex);

          if (hasStylingInputShadow(tNode, isClassBased) && tStylingKey === null && !isHostBindings) {
            // `tStylingKey === null` implies that we are either `[style]` or `[class]` binding.
            // If there is a directive which uses `@Input('style')` or `@Input('class')` than
            // we need to neutralize this binding since that directive is shadowing it.
            // We turn this into a noop by setting the key to `false`
            tStylingKey = false;
          }

          tStylingKey = wrapInStaticStylingKey(tData, tNode, tStylingKey, isClassBased);
          insertTStylingBinding(tData, tNode, tStylingKey, bindingIndex, isHostBindings, isClassBased);
        }
      }
      /**
       * Adds static styling information to the binding if applicable.
       *
       * The linked list of styles not only stores the list and keys, but also stores static styling
       * information on some of the keys. This function determines if the key should contain the styling
       * information and computes it.
       *
       * See `TStylingStatic` for more details.
       *
       * @param tData `TData` where the linked list is stored.
       * @param tNode `TNode` for which the styling is being computed.
       * @param stylingKey `TStylingKeyPrimitive` which may need to be wrapped into `TStylingKey`
       * @param isClassBased `true` if `class` (`false` if `style`)
       */


      function wrapInStaticStylingKey(tData, tNode, stylingKey, isClassBased) {
        var hostDirectiveDef = getCurrentDirectiveDef(tData);
        var residual = isClassBased ? tNode.residualClasses : tNode.residualStyles;

        if (hostDirectiveDef === null) {
          // We are in template node.
          // If template node already had styling instruction then it has already collected the static
          // styling and there is no need to collect them again. We know that we are the first styling
          // instruction because the `TNode.*Bindings` points to 0 (nothing has been inserted yet).
          var isFirstStylingInstructionInTemplate = (isClassBased ? tNode.classBindings : tNode.styleBindings) === 0;

          if (isFirstStylingInstructionInTemplate) {
            // It would be nice to be able to get the statics from `mergeAttrs`, however, at this point
            // they are already merged and it would not be possible to figure which property belongs where
            // in the priority.
            stylingKey = collectStylingFromDirectives(null, tData, tNode, stylingKey, isClassBased);
            stylingKey = collectStylingFromTAttrs(stylingKey, tNode.attrs, isClassBased); // We know that if we have styling binding in template we can't have residual.

            residual = null;
          }
        } else {
          // We are in host binding node and there was no binding instruction in template node.
          // This means that we need to compute the residual.
          var directiveStylingLast = tNode.directiveStylingLast;
          var isFirstStylingInstructionInHostBinding = directiveStylingLast === -1 || tData[directiveStylingLast] !== hostDirectiveDef;

          if (isFirstStylingInstructionInHostBinding) {
            stylingKey = collectStylingFromDirectives(hostDirectiveDef, tData, tNode, stylingKey, isClassBased);

            if (residual === null) {
              // - If `null` than either:
              //    - Template styling instruction already ran and it has consumed the static
              //      styling into its `TStylingKey` and so there is no need to update residual. Instead
              //      we need to update the `TStylingKey` associated with the first template node
              //      instruction. OR
              //    - Some other styling instruction ran and determined that there are no residuals
              var templateStylingKey = getTemplateHeadTStylingKey(tData, tNode, isClassBased);

              if (templateStylingKey !== undefined && Array.isArray(templateStylingKey)) {
                // Only recompute if `templateStylingKey` had static values. (If no static value found
                // then there is nothing to do since this operation can only produce less static keys, not
                // more.)
                templateStylingKey = collectStylingFromDirectives(null, tData, tNode, templateStylingKey[1]
                /* unwrap previous statics */
                , isClassBased);
                templateStylingKey = collectStylingFromTAttrs(templateStylingKey, tNode.attrs, isClassBased);
                setTemplateHeadTStylingKey(tData, tNode, isClassBased, templateStylingKey);
              }
            } else {
              // We only need to recompute residual if it is not `null`.
              // - If existing residual (implies there was no template styling). This means that some of
              //   the statics may have moved from the residual to the `stylingKey` and so we have to
              //   recompute.
              // - If `undefined` this is the first time we are running.
              residual = collectResidual(tData, tNode, isClassBased);
            }
          }
        }

        if (residual !== undefined) {
          isClassBased ? tNode.residualClasses = residual : tNode.residualStyles = residual;
        }

        return stylingKey;
      }
      /**
       * Retrieve the `TStylingKey` for the template styling instruction.
       *
       * This is needed since `hostBinding` styling instructions are inserted after the template
       * instruction. While the template instruction needs to update the residual in `TNode` the
       * `hostBinding` instructions need to update the `TStylingKey` of the template instruction because
       * the template instruction is downstream from the `hostBindings` instructions.
       *
       * @param tData `TData` where the linked list is stored.
       * @param tNode `TNode` for which the styling is being computed.
       * @param isClassBased `true` if `class` (`false` if `style`)
       * @return `TStylingKey` if found or `undefined` if not found.
       */


      function getTemplateHeadTStylingKey(tData, tNode, isClassBased) {
        var bindings = isClassBased ? tNode.classBindings : tNode.styleBindings;

        if (getTStylingRangeNext(bindings) === 0) {
          // There does not seem to be a styling instruction in the `template`.
          return undefined;
        }

        return tData[getTStylingRangePrev(bindings)];
      }
      /**
       * Update the `TStylingKey` of the first template instruction in `TNode`.
       *
       * Logically `hostBindings` styling instructions are of lower priority than that of the template.
       * However, they execute after the template styling instructions. This means that they get inserted
       * in front of the template styling instructions.
       *
       * If we have a template styling instruction and a new `hostBindings` styling instruction is
       * executed it means that it may need to steal static fields from the template instruction. This
       * method allows us to update the first template instruction `TStylingKey` with a new value.
       *
       * Assume:
       * ```
       * <div my-dir style="color: red" [style.color]="tmplExp"></div>
       *
       * @Directive({
       *   host: {
       *     'style': 'width: 100px',
       *     '[style.color]': 'dirExp',
       *   }
       * })
       * class MyDir {}
       * ```
       *
       * when `[style.color]="tmplExp"` executes it creates this data structure.
       * ```
       *  ['', 'color', 'color', 'red', 'width', '100px'],
       * ```
       *
       * The reason for this is that the template instruction does not know if there are styling
       * instructions and must assume that there are none and must collect all of the static styling.
       * (both
       * `color' and 'width`)
       *
       * When `'[style.color]': 'dirExp',` executes we need to insert a new data into the linked list.
       * ```
       *  ['', 'color', 'width', '100px'],  // newly inserted
       *  ['', 'color', 'color', 'red', 'width', '100px'], // this is wrong
       * ```
       *
       * Notice that the template statics is now wrong as it incorrectly contains `width` so we need to
       * update it like so:
       * ```
       *  ['', 'color', 'width', '100px'],
       *  ['', 'color', 'color', 'red'],    // UPDATE
       * ```
       *
       * @param tData `TData` where the linked list is stored.
       * @param tNode `TNode` for which the styling is being computed.
       * @param isClassBased `true` if `class` (`false` if `style`)
       * @param tStylingKey New `TStylingKey` which is replacing the old one.
       */


      function setTemplateHeadTStylingKey(tData, tNode, isClassBased, tStylingKey) {
        var bindings = isClassBased ? tNode.classBindings : tNode.styleBindings;
        ngDevMode && assertNotEqual(getTStylingRangeNext(bindings), 0, 'Expecting to have at least one template styling binding.');
        tData[getTStylingRangePrev(bindings)] = tStylingKey;
      }
      /**
       * Collect all static values after the current `TNode.directiveStylingLast` index.
       *
       * Collect the remaining styling information which has not yet been collected by an existing
       * styling instruction.
       *
       * @param tData `TData` where the `DirectiveDefs` are stored.
       * @param tNode `TNode` which contains the directive range.
       * @param isClassBased `true` if `class` (`false` if `style`)
       */


      function collectResidual(tData, tNode, isClassBased) {
        var residual = undefined;
        var directiveEnd = tNode.directiveEnd;
        ngDevMode && assertNotEqual(tNode.directiveStylingLast, -1, 'By the time this function gets called at least one hostBindings-node styling instruction must have executed.'); // We add `1 + tNode.directiveStart` because we need to skip the current directive (as we are
        // collecting things after the last `hostBindings` directive which had a styling instruction.)

        for (var i = 1 + tNode.directiveStylingLast; i < directiveEnd; i++) {
          var attrs = tData[i].hostAttrs;
          residual = collectStylingFromTAttrs(residual, attrs, isClassBased);
        }

        return collectStylingFromTAttrs(residual, tNode.attrs, isClassBased);
      }
      /**
       * Collect the static styling information with lower priority than `hostDirectiveDef`.
       *
       * (This is opposite of residual styling.)
       *
       * @param hostDirectiveDef `DirectiveDef` for which we want to collect lower priority static
       *        styling. (Or `null` if template styling)
       * @param tData `TData` where the linked list is stored.
       * @param tNode `TNode` for which the styling is being computed.
       * @param stylingKey Existing `TStylingKey` to update or wrap.
       * @param isClassBased `true` if `class` (`false` if `style`)
       */


      function collectStylingFromDirectives(hostDirectiveDef, tData, tNode, stylingKey, isClassBased) {
        // We need to loop because there can be directives which have `hostAttrs` but don't have
        // `hostBindings` so this loop catches up to the current directive..
        var currentDirective = null;
        var directiveEnd = tNode.directiveEnd;
        var directiveStylingLast = tNode.directiveStylingLast;

        if (directiveStylingLast === -1) {
          directiveStylingLast = tNode.directiveStart;
        } else {
          directiveStylingLast++;
        }

        while (directiveStylingLast < directiveEnd) {
          currentDirective = tData[directiveStylingLast];
          ngDevMode && assertDefined(currentDirective, 'expected to be defined');
          stylingKey = collectStylingFromTAttrs(stylingKey, currentDirective.hostAttrs, isClassBased);
          if (currentDirective === hostDirectiveDef) break;
          directiveStylingLast++;
        }

        if (hostDirectiveDef !== null) {
          // we only advance the styling cursor if we are collecting data from host bindings.
          // Template executes before host bindings and so if we would update the index,
          // host bindings would not get their statics.
          tNode.directiveStylingLast = directiveStylingLast;
        }

        return stylingKey;
      }
      /**
       * Convert `TAttrs` into `TStylingStatic`.
       *
       * @param stylingKey existing `TStylingKey` to update or wrap.
       * @param attrs `TAttributes` to process.
       * @param isClassBased `true` if `class` (`false` if `style`)
       */


      function collectStylingFromTAttrs(stylingKey, attrs, isClassBased) {
        var desiredMarker = isClassBased ? 1
        /* Classes */
        : 2
        /* Styles */
        ;
        var currentMarker = -1
        /* ImplicitAttributes */
        ;

        if (attrs !== null) {
          for (var i = 0; i < attrs.length; i++) {
            var item = attrs[i];

            if (typeof item === 'number') {
              currentMarker = item;
            } else {
              if (currentMarker === desiredMarker) {
                if (!Array.isArray(stylingKey)) {
                  stylingKey = stylingKey === undefined ? [] : ['', stylingKey];
                }

                keyValueArraySet(stylingKey, item, isClassBased ? true : attrs[++i]);
              }
            }
          }
        }

        return stylingKey === undefined ? null : stylingKey;
      }
      /**
       * Convert user input to `KeyValueArray`.
       *
       * This function takes user input which could be `string`, Object literal, or iterable and converts
       * it into a consistent representation. The output of this is `KeyValueArray` (which is an array
       * where
       * even indexes contain keys and odd indexes contain values for those keys).
       *
       * The advantage of converting to `KeyValueArray` is that we can perform diff in an input
       * independent
       * way.
       * (ie we can compare `foo bar` to `['bar', 'baz'] and determine a set of changes which need to be
       * applied)
       *
       * The fact that `KeyValueArray` is sorted is very important because it allows us to compute the
       * difference in linear fashion without the need to allocate any additional data.
       *
       * For example if we kept this as a `Map` we would have to iterate over previous `Map` to determine
       * which values need to be deleted, over the new `Map` to determine additions, and we would have to
       * keep additional `Map` to keep track of duplicates or items which have not yet been visited.
       *
       * @param keyValueArraySet (See `keyValueArraySet` in "util/array_utils") Gets passed in as a
       *        function so that `style` can be processed. This is done
       *        for tree shaking purposes.
       * @param stringParser The parser is passed in so that it will be tree shakable. See
       *        `styleStringParser` and `classStringParser`
       * @param value The value to parse/convert to `KeyValueArray`
       */


      function toStylingKeyValueArray(keyValueArraySet, stringParser, value) {
        if (value == null
        /*|| value === undefined */
        || value === '') return EMPTY_ARRAY$3;
        var styleKeyValueArray = [];
        var unwrappedValue = unwrapSafeValue(value);

        if (Array.isArray(unwrappedValue)) {
          for (var i = 0; i < unwrappedValue.length; i++) {
            keyValueArraySet(styleKeyValueArray, unwrappedValue[i], true);
          }
        } else if (typeof unwrappedValue === 'object') {
          for (var key in unwrappedValue) {
            if (unwrappedValue.hasOwnProperty(key)) {
              keyValueArraySet(styleKeyValueArray, key, unwrappedValue[key]);
            }
          }
        } else if (typeof unwrappedValue === 'string') {
          stringParser(styleKeyValueArray, unwrappedValue);
        } else {
          ngDevMode && throwError('Unsupported styling type ' + typeof unwrappedValue + ': ' + unwrappedValue);
        }

        return styleKeyValueArray;
      }
      /**
       * Set a `value` for a `key`.
       *
       * See: `keyValueArraySet` for details
       *
       * @param keyValueArray KeyValueArray to add to.
       * @param key Style key to add.
       * @param value The value to set.
       */


      function styleKeyValueArraySet(keyValueArray, key, value) {
        keyValueArraySet(keyValueArray, key, unwrapSafeValue(value));
      }
      /**
       * Update map based styling.
       *
       * Map based styling could be anything which contains more than one binding. For example `string`,
       * or object literal. Dealing with all of these types would complicate the logic so
       * instead this function expects that the complex input is first converted into normalized
       * `KeyValueArray`. The advantage of normalization is that we get the values sorted, which makes it
       * very cheap to compute deltas between the previous and current value.
       *
       * @param tView Associated `TView.data` contains the linked list of binding priorities.
       * @param tNode `TNode` where the binding is located.
       * @param lView `LView` contains the values associated with other styling binding at this `TNode`.
       * @param renderer Renderer to use if any updates.
       * @param oldKeyValueArray Previous value represented as `KeyValueArray`
       * @param newKeyValueArray Current value represented as `KeyValueArray`
       * @param isClassBased `true` if `class` (`false` if `style`)
       * @param bindingIndex Binding index of the binding.
       */


      function updateStylingMap(tView, tNode, lView, renderer, oldKeyValueArray, newKeyValueArray, isClassBased, bindingIndex) {
        if (oldKeyValueArray === NO_CHANGE) {
          // On first execution the oldKeyValueArray is NO_CHANGE => treat it as empty KeyValueArray.
          oldKeyValueArray = EMPTY_ARRAY$3;
        }

        var oldIndex = 0;
        var newIndex = 0;
        var oldKey = 0 < oldKeyValueArray.length ? oldKeyValueArray[0] : null;
        var newKey = 0 < newKeyValueArray.length ? newKeyValueArray[0] : null;

        while (oldKey !== null || newKey !== null) {
          ngDevMode && assertLessThan(oldIndex, 999, 'Are we stuck in infinite loop?');
          ngDevMode && assertLessThan(newIndex, 999, 'Are we stuck in infinite loop?');
          var oldValue = oldIndex < oldKeyValueArray.length ? oldKeyValueArray[oldIndex + 1] : undefined;
          var newValue = newIndex < newKeyValueArray.length ? newKeyValueArray[newIndex + 1] : undefined;
          var setKey = null;
          var setValue = undefined;

          if (oldKey === newKey) {
            // UPDATE: Keys are equal => new value is overwriting old value.
            oldIndex += 2;
            newIndex += 2;

            if (oldValue !== newValue) {
              setKey = newKey;
              setValue = newValue;
            }
          } else if (newKey === null || oldKey !== null && oldKey < newKey) {
            // DELETE: oldKey key is missing or we did not find the oldKey in the newValue
            // (because the keyValueArray is sorted and `newKey` is found later alphabetically).
            // `"background" < "color"` so we need to delete `"background"` because it is not found in the
            // new array.
            oldIndex += 2;
            setKey = oldKey;
          } else {
            // CREATE: newKey's is earlier alphabetically than oldKey's (or no oldKey) => we have new key.
            // `"color" > "background"` so we need to add `color` because it is in new array but not in
            // old array.
            ngDevMode && assertDefined(newKey, 'Expecting to have a valid key');
            newIndex += 2;
            setKey = newKey;
            setValue = newValue;
          }

          if (setKey !== null) {
            updateStyling(tView, tNode, lView, renderer, setKey, setValue, isClassBased, bindingIndex);
          }

          oldKey = oldIndex < oldKeyValueArray.length ? oldKeyValueArray[oldIndex] : null;
          newKey = newIndex < newKeyValueArray.length ? newKeyValueArray[newIndex] : null;
        }
      }
      /**
       * Update a simple (property name) styling.
       *
       * This function takes `prop` and updates the DOM to that value. The function takes the binding
       * value as well as binding priority into consideration to determine which value should be written
       * to DOM. (For example it may be determined that there is a higher priority overwrite which blocks
       * the DOM write, or if the value goes to `undefined` a lower priority overwrite may be consulted.)
       *
       * @param tView Associated `TView.data` contains the linked list of binding priorities.
       * @param tNode `TNode` where the binding is located.
       * @param lView `LView` contains the values associated with other styling binding at this `TNode`.
       * @param renderer Renderer to use if any updates.
       * @param prop Either style property name or a class name.
       * @param value Either style value for `prop` or `true`/`false` if `prop` is class.
       * @param isClassBased `true` if `class` (`false` if `style`)
       * @param bindingIndex Binding index of the binding.
       */


      function updateStyling(tView, tNode, lView, renderer, prop, value, isClassBased, bindingIndex) {
        if (!(tNode.type & 3
        /* AnyRNode */
        )) {
          // It is possible to have styling on non-elements (such as ng-container).
          // This is rare, but it does happen. In such a case, just ignore the binding.
          return;
        }

        var tData = tView.data;
        var tRange = tData[bindingIndex + 1];
        var higherPriorityValue = getTStylingRangeNextDuplicate(tRange) ? findStylingValue(tData, tNode, lView, prop, getTStylingRangeNext(tRange), isClassBased) : undefined;

        if (!isStylingValuePresent(higherPriorityValue)) {
          // We don't have a next duplicate, or we did not find a duplicate value.
          if (!isStylingValuePresent(value)) {
            // We should delete current value or restore to lower priority value.
            if (getTStylingRangePrevDuplicate(tRange)) {
              // We have a possible prev duplicate, let's retrieve it.
              value = findStylingValue(tData, null, lView, prop, bindingIndex, isClassBased);
            }
          }

          var rNode = getNativeByIndex(getSelectedIndex(), lView);
          applyStyling(renderer, isClassBased, rNode, prop, value);
        }
      }
      /**
       * Search for styling value with higher priority which is overwriting current value, or a
       * value of lower priority to which we should fall back if the value is `undefined`.
       *
       * When value is being applied at a location, related values need to be consulted.
       * - If there is a higher priority binding, we should be using that one instead.
       *   For example `<div  [style]="{color:exp1}" [style.color]="exp2">` change to `exp1`
       *   requires that we check `exp2` to see if it is set to value other than `undefined`.
       * - If there is a lower priority binding and we are changing to `undefined`
       *   For example `<div  [style]="{color:exp1}" [style.color]="exp2">` change to `exp2` to
       *   `undefined` requires that we check `exp1` (and static values) and use that as new value.
       *
       * NOTE: The styling stores two values.
       * 1. The raw value which came from the application is stored at `index + 0` location. (This value
       *    is used for dirty checking).
       * 2. The normalized value is stored at `index + 1`.
       *
       * @param tData `TData` used for traversing the priority.
       * @param tNode `TNode` to use for resolving static styling. Also controls search direction.
       *   - `TNode` search next and quit as soon as `isStylingValuePresent(value)` is true.
       *      If no value found consult `tNode.residualStyle`/`tNode.residualClass` for default value.
       *   - `null` search prev and go all the way to end. Return last value where
       *     `isStylingValuePresent(value)` is true.
       * @param lView `LView` used for retrieving the actual values.
       * @param prop Property which we are interested in.
       * @param index Starting index in the linked list of styling bindings where the search should start.
       * @param isClassBased `true` if `class` (`false` if `style`)
       */


      function findStylingValue(tData, tNode, lView, prop, index, isClassBased) {
        // `TNode` to use for resolving static styling. Also controls search direction.
        //   - `TNode` search next and quit as soon as `isStylingValuePresent(value)` is true.
        //      If no value found consult `tNode.residualStyle`/`tNode.residualClass` for default value.
        //   - `null` search prev and go all the way to end. Return last value where
        //     `isStylingValuePresent(value)` is true.
        var isPrevDirection = tNode === null;
        var value = undefined;

        while (index > 0) {
          var rawKey = tData[index];
          var containsStatics = Array.isArray(rawKey); // Unwrap the key if we contain static values.

          var key = containsStatics ? rawKey[1] : rawKey;
          var isStylingMap = key === null;
          var valueAtLViewIndex = lView[index + 1];

          if (valueAtLViewIndex === NO_CHANGE) {
            // In firstUpdatePass the styling instructions create a linked list of styling.
            // On subsequent passes it is possible for a styling instruction to try to read a binding
            // which
            // has not yet executed. In that case we will find `NO_CHANGE` and we should assume that
            // we have `undefined` (or empty array in case of styling-map instruction) instead. This
            // allows the resolution to apply the value (which may later be overwritten when the
            // binding actually executes.)
            valueAtLViewIndex = isStylingMap ? EMPTY_ARRAY$3 : undefined;
          }

          var currentValue = isStylingMap ? keyValueArrayGet(valueAtLViewIndex, prop) : key === prop ? valueAtLViewIndex : undefined;

          if (containsStatics && !isStylingValuePresent(currentValue)) {
            currentValue = keyValueArrayGet(rawKey, prop);
          }

          if (isStylingValuePresent(currentValue)) {
            value = currentValue;

            if (isPrevDirection) {
              return value;
            }
          }

          var tRange = tData[index + 1];
          index = isPrevDirection ? getTStylingRangePrev(tRange) : getTStylingRangeNext(tRange);
        }

        if (tNode !== null) {
          // in case where we are going in next direction AND we did not find anything, we need to
          // consult residual styling
          var residual = isClassBased ? tNode.residualClasses : tNode.residualStyles;

          if (residual != null
          /** OR residual !=== undefined */
          ) {
              value = keyValueArrayGet(residual, prop);
            }
        }

        return value;
      }
      /**
       * Determines if the binding value should be used (or if the value is 'undefined' and hence priority
       * resolution should be used.)
       *
       * @param value Binding style value.
       */


      function isStylingValuePresent(value) {
        // Currently only `undefined` value is considered non-binding. That is `undefined` says I don't
        // have an opinion as to what this binding should be and you should consult other bindings by
        // priority to determine the valid value.
        // This is extracted into a single function so that we have a single place to control this.
        return value !== undefined;
      }
      /**
       * Normalizes and/or adds a suffix to the value.
       *
       * If value is `null`/`undefined` no suffix is added
       * @param value
       * @param suffix
       */


      function normalizeSuffix(value, suffix) {
        if (value == null
        /** || value === undefined */
        ) {// do nothing
          } else if (typeof suffix === 'string') {
          value = value + suffix;
        } else if (typeof value === 'object') {
          value = stringify(unwrapSafeValue(value));
        }

        return value;
      }
      /**
       * Tests if the `TNode` has input shadow.
       *
       * An input shadow is when a directive steals (shadows) the input by using `@Input('style')` or
       * `@Input('class')` as input.
       *
       * @param tNode `TNode` which we would like to see if it has shadow.
       * @param isClassBased `true` if `class` (`false` if `style`)
       */


      function hasStylingInputShadow(tNode, isClassBased) {
        return (tNode.flags & (isClassBased ? 16
        /* hasClassInput */
        : 32
        /* hasStyleInput */
        )) !== 0;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Create static text node
       *
       * @param index Index of the node in the data array
       * @param value Static string value to write.
       *
       * @codeGenApi
       */


      function ɵɵtext(index) {
        var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
        var lView = getLView();
        var tView = getTView();
        var adjustedIndex = index + HEADER_OFFSET;
        ngDevMode && assertEqual(getBindingIndex(), tView.bindingStartIndex, 'text nodes should be created before any bindings');
        ngDevMode && assertIndexInRange(lView, adjustedIndex);
        var tNode = tView.firstCreatePass ? getOrCreateTNode(tView, adjustedIndex, 1
        /* Text */
        , value, null) : tView.data[adjustedIndex];
        var textNative = lView[adjustedIndex] = createTextNode(lView[RENDERER], value);
        appendChild(tView, lView, textNative, tNode); // Text nodes are self closing.

        setCurrentTNode(tNode, false);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       *
       * Update text content with a lone bound value
       *
       * Used when a text node has 1 interpolated value in it, an no additional text
       * surrounds that interpolated value:
       *
       * ```html
       * <div>{{v0}}</div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵtextInterpolate(v0);
       * ```
       * @returns itself, so that it may be chained.
       * @see textInterpolateV
       * @codeGenApi
       */


      function ɵɵtextInterpolate(v0) {
        ɵɵtextInterpolate1('', v0, '');
        return ɵɵtextInterpolate;
      }
      /**
       *
       * Update text content with single bound value surrounded by other text.
       *
       * Used when a text node has 1 interpolated value in it:
       *
       * ```html
       * <div>prefix{{v0}}suffix</div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵtextInterpolate1('prefix', v0, 'suffix');
       * ```
       * @returns itself, so that it may be chained.
       * @see textInterpolateV
       * @codeGenApi
       */


      function ɵɵtextInterpolate1(prefix, v0, suffix) {
        var lView = getLView();
        var interpolated = interpolation1(lView, prefix, v0, suffix);

        if (interpolated !== NO_CHANGE) {
          textBindingInternal(lView, getSelectedIndex(), interpolated);
        }

        return ɵɵtextInterpolate1;
      }
      /**
       *
       * Update text content with 2 bound values surrounded by other text.
       *
       * Used when a text node has 2 interpolated values in it:
       *
       * ```html
       * <div>prefix{{v0}}-{{v1}}suffix</div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵtextInterpolate2('prefix', v0, '-', v1, 'suffix');
       * ```
       * @returns itself, so that it may be chained.
       * @see textInterpolateV
       * @codeGenApi
       */


      function ɵɵtextInterpolate2(prefix, v0, i0, v1, suffix) {
        var lView = getLView();
        var interpolated = interpolation2(lView, prefix, v0, i0, v1, suffix);

        if (interpolated !== NO_CHANGE) {
          textBindingInternal(lView, getSelectedIndex(), interpolated);
        }

        return ɵɵtextInterpolate2;
      }
      /**
       *
       * Update text content with 3 bound values surrounded by other text.
       *
       * Used when a text node has 3 interpolated values in it:
       *
       * ```html
       * <div>prefix{{v0}}-{{v1}}-{{v2}}suffix</div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵtextInterpolate3(
       * 'prefix', v0, '-', v1, '-', v2, 'suffix');
       * ```
       * @returns itself, so that it may be chained.
       * @see textInterpolateV
       * @codeGenApi
       */


      function ɵɵtextInterpolate3(prefix, v0, i0, v1, i1, v2, suffix) {
        var lView = getLView();
        var interpolated = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);

        if (interpolated !== NO_CHANGE) {
          textBindingInternal(lView, getSelectedIndex(), interpolated);
        }

        return ɵɵtextInterpolate3;
      }
      /**
       *
       * Update text content with 4 bound values surrounded by other text.
       *
       * Used when a text node has 4 interpolated values in it:
       *
       * ```html
       * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix</div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵtextInterpolate4(
       * 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');
       * ```
       * @returns itself, so that it may be chained.
       * @see ɵɵtextInterpolateV
       * @codeGenApi
       */


      function ɵɵtextInterpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {
        var lView = getLView();
        var interpolated = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);

        if (interpolated !== NO_CHANGE) {
          textBindingInternal(lView, getSelectedIndex(), interpolated);
        }

        return ɵɵtextInterpolate4;
      }
      /**
       *
       * Update text content with 5 bound values surrounded by other text.
       *
       * Used when a text node has 5 interpolated values in it:
       *
       * ```html
       * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix</div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵtextInterpolate5(
       * 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');
       * ```
       * @returns itself, so that it may be chained.
       * @see textInterpolateV
       * @codeGenApi
       */


      function ɵɵtextInterpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {
        var lView = getLView();
        var interpolated = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);

        if (interpolated !== NO_CHANGE) {
          textBindingInternal(lView, getSelectedIndex(), interpolated);
        }

        return ɵɵtextInterpolate5;
      }
      /**
       *
       * Update text content with 6 bound values surrounded by other text.
       *
       * Used when a text node has 6 interpolated values in it:
       *
       * ```html
       * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix</div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵtextInterpolate6(
       *    'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');
       * ```
       *
       * @param i4 Static value used for concatenation only.
       * @param v5 Value checked for change. @returns itself, so that it may be chained.
       * @see textInterpolateV
       * @codeGenApi
       */


      function ɵɵtextInterpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {
        var lView = getLView();
        var interpolated = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);

        if (interpolated !== NO_CHANGE) {
          textBindingInternal(lView, getSelectedIndex(), interpolated);
        }

        return ɵɵtextInterpolate6;
      }
      /**
       *
       * Update text content with 7 bound values surrounded by other text.
       *
       * Used when a text node has 7 interpolated values in it:
       *
       * ```html
       * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix</div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵtextInterpolate7(
       *    'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');
       * ```
       * @returns itself, so that it may be chained.
       * @see textInterpolateV
       * @codeGenApi
       */


      function ɵɵtextInterpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {
        var lView = getLView();
        var interpolated = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);

        if (interpolated !== NO_CHANGE) {
          textBindingInternal(lView, getSelectedIndex(), interpolated);
        }

        return ɵɵtextInterpolate7;
      }
      /**
       *
       * Update text content with 8 bound values surrounded by other text.
       *
       * Used when a text node has 8 interpolated values in it:
       *
       * ```html
       * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix</div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵtextInterpolate8(
       *  'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, 'suffix');
       * ```
       * @returns itself, so that it may be chained.
       * @see textInterpolateV
       * @codeGenApi
       */


      function ɵɵtextInterpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {
        var lView = getLView();
        var interpolated = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);

        if (interpolated !== NO_CHANGE) {
          textBindingInternal(lView, getSelectedIndex(), interpolated);
        }

        return ɵɵtextInterpolate8;
      }
      /**
       * Update text content with 9 or more bound values other surrounded by text.
       *
       * Used when the number of interpolated values exceeds 8.
       *
       * ```html
       * <div>prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix</div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵtextInterpolateV(
       *  ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,
       *  'suffix']);
       * ```
       *.
       * @param values The collection of values and the strings in between those values, beginning with
       * a string prefix and ending with a string suffix.
       * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)
       *
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵtextInterpolateV(values) {
        var lView = getLView();
        var interpolated = interpolationV(lView, values);

        if (interpolated !== NO_CHANGE) {
          textBindingInternal(lView, getSelectedIndex(), interpolated);
        }

        return ɵɵtextInterpolateV;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       *
       * Update an interpolated class on an element with single bound value surrounded by text.
       *
       * Used when the value passed to a property has 1 interpolated value in it:
       *
       * ```html
       * <div class="prefix{{v0}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵclassMapInterpolate1('prefix', v0, 'suffix');
       * ```
       *
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @codeGenApi
       */


      function ɵɵclassMapInterpolate1(prefix, v0, suffix) {
        var lView = getLView();
        var interpolatedValue = interpolation1(lView, prefix, v0, suffix);
        checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
      }
      /**
       *
       * Update an interpolated class on an element with 2 bound values surrounded by text.
       *
       * Used when the value passed to a property has 2 interpolated values in it:
       *
       * ```html
       * <div class="prefix{{v0}}-{{v1}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵclassMapInterpolate2('prefix', v0, '-', v1, 'suffix');
       * ```
       *
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @codeGenApi
       */


      function ɵɵclassMapInterpolate2(prefix, v0, i0, v1, suffix) {
        var lView = getLView();
        var interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);
        checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
      }
      /**
       *
       * Update an interpolated class on an element with 3 bound values surrounded by text.
       *
       * Used when the value passed to a property has 3 interpolated values in it:
       *
       * ```html
       * <div class="prefix{{v0}}-{{v1}}-{{v2}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵclassMapInterpolate3(
       * 'prefix', v0, '-', v1, '-', v2, 'suffix');
       * ```
       *
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @codeGenApi
       */


      function ɵɵclassMapInterpolate3(prefix, v0, i0, v1, i1, v2, suffix) {
        var lView = getLView();
        var interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);
        checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
      }
      /**
       *
       * Update an interpolated class on an element with 4 bound values surrounded by text.
       *
       * Used when the value passed to a property has 4 interpolated values in it:
       *
       * ```html
       * <div class="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵclassMapInterpolate4(
       * 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');
       * ```
       *
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @codeGenApi
       */


      function ɵɵclassMapInterpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {
        var lView = getLView();
        var interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);
        checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
      }
      /**
       *
       * Update an interpolated class on an element with 5 bound values surrounded by text.
       *
       * Used when the value passed to a property has 5 interpolated values in it:
       *
       * ```html
       * <div class="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵclassMapInterpolate5(
       * 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');
       * ```
       *
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param i3 Static value used for concatenation only.
       * @param v4 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @codeGenApi
       */


      function ɵɵclassMapInterpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {
        var lView = getLView();
        var interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);
        checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
      }
      /**
       *
       * Update an interpolated class on an element with 6 bound values surrounded by text.
       *
       * Used when the value passed to a property has 6 interpolated values in it:
       *
       * ```html
       * <div class="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵclassMapInterpolate6(
       *    'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');
       * ```
       *
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param i3 Static value used for concatenation only.
       * @param v4 Value checked for change.
       * @param i4 Static value used for concatenation only.
       * @param v5 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @codeGenApi
       */


      function ɵɵclassMapInterpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {
        var lView = getLView();
        var interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);
        checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
      }
      /**
       *
       * Update an interpolated class on an element with 7 bound values surrounded by text.
       *
       * Used when the value passed to a property has 7 interpolated values in it:
       *
       * ```html
       * <div class="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵclassMapInterpolate7(
       *    'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');
       * ```
       *
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param i3 Static value used for concatenation only.
       * @param v4 Value checked for change.
       * @param i4 Static value used for concatenation only.
       * @param v5 Value checked for change.
       * @param i5 Static value used for concatenation only.
       * @param v6 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @codeGenApi
       */


      function ɵɵclassMapInterpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {
        var lView = getLView();
        var interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);
        checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
      }
      /**
       *
       * Update an interpolated class on an element with 8 bound values surrounded by text.
       *
       * Used when the value passed to a property has 8 interpolated values in it:
       *
       * ```html
       * <div class="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵclassMapInterpolate8(
       *  'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, 'suffix');
       * ```
       *
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param i3 Static value used for concatenation only.
       * @param v4 Value checked for change.
       * @param i4 Static value used for concatenation only.
       * @param v5 Value checked for change.
       * @param i5 Static value used for concatenation only.
       * @param v6 Value checked for change.
       * @param i6 Static value used for concatenation only.
       * @param v7 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @codeGenApi
       */


      function ɵɵclassMapInterpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {
        var lView = getLView();
        var interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);
        checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
      }
      /**
       * Update an interpolated class on an element with 9 or more bound values surrounded by text.
       *
       * Used when the number of interpolated values exceeds 8.
       *
       * ```html
       * <div
       *  class="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵclassMapInterpolateV(
       *  ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,
       *  'suffix']);
       * ```
       *.
       * @param values The collection of values and the strings in-between those values, beginning with
       * a string prefix and ending with a string suffix.
       * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)
       * @codeGenApi
       */


      function ɵɵclassMapInterpolateV(values) {
        var lView = getLView();
        var interpolatedValue = interpolationV(lView, values);
        checkStylingMap(keyValueArraySet, classStringParser, interpolatedValue, true);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       *
       * Update an interpolated style on an element with single bound value surrounded by text.
       *
       * Used when the value passed to a property has 1 interpolated value in it:
       *
       * ```html
       * <div style="key: {{v0}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵstyleMapInterpolate1('key: ', v0, 'suffix');
       * ```
       *
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @codeGenApi
       */


      function ɵɵstyleMapInterpolate1(prefix, v0, suffix) {
        var lView = getLView();
        var interpolatedValue = interpolation1(lView, prefix, v0, suffix);
        ɵɵstyleMap(interpolatedValue);
      }
      /**
       *
       * Update an interpolated style on an element with 2 bound values surrounded by text.
       *
       * Used when the value passed to a property has 2 interpolated values in it:
       *
       * ```html
       * <div style="key: {{v0}}; key1: {{v1}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵstyleMapInterpolate2('key: ', v0, '; key1: ', v1, 'suffix');
       * ```
       *
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @codeGenApi
       */


      function ɵɵstyleMapInterpolate2(prefix, v0, i0, v1, suffix) {
        var lView = getLView();
        var interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);
        ɵɵstyleMap(interpolatedValue);
      }
      /**
       *
       * Update an interpolated style on an element with 3 bound values surrounded by text.
       *
       * Used when the value passed to a property has 3 interpolated values in it:
       *
       * ```html
       * <div style="key: {{v0}}; key2: {{v1}}; key2: {{v2}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵstyleMapInterpolate3(
       *     'key: ', v0, '; key1: ', v1, '; key2: ', v2, 'suffix');
       * ```
       *
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @codeGenApi
       */


      function ɵɵstyleMapInterpolate3(prefix, v0, i0, v1, i1, v2, suffix) {
        var lView = getLView();
        var interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);
        ɵɵstyleMap(interpolatedValue);
      }
      /**
       *
       * Update an interpolated style on an element with 4 bound values surrounded by text.
       *
       * Used when the value passed to a property has 4 interpolated values in it:
       *
       * ```html
       * <div style="key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵstyleMapInterpolate4(
       *     'key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, 'suffix');
       * ```
       *
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @codeGenApi
       */


      function ɵɵstyleMapInterpolate4(prefix, v0, i0, v1, i1, v2, i2, v3, suffix) {
        var lView = getLView();
        var interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);
        ɵɵstyleMap(interpolatedValue);
      }
      /**
       *
       * Update an interpolated style on an element with 5 bound values surrounded by text.
       *
       * Used when the value passed to a property has 5 interpolated values in it:
       *
       * ```html
       * <div style="key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}; key4: {{v4}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵstyleMapInterpolate5(
       *     'key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, '; key4: ', v4, 'suffix');
       * ```
       *
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param i3 Static value used for concatenation only.
       * @param v4 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @codeGenApi
       */


      function ɵɵstyleMapInterpolate5(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix) {
        var lView = getLView();
        var interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);
        ɵɵstyleMap(interpolatedValue);
      }
      /**
       *
       * Update an interpolated style on an element with 6 bound values surrounded by text.
       *
       * Used when the value passed to a property has 6 interpolated values in it:
       *
       * ```html
       * <div style="key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}; key4: {{v4}};
       *             key5: {{v5}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵstyleMapInterpolate6(
       *    'key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, '; key4: ', v4, '; key5: ', v5,
       *    'suffix');
       * ```
       *
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param i3 Static value used for concatenation only.
       * @param v4 Value checked for change.
       * @param i4 Static value used for concatenation only.
       * @param v5 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @codeGenApi
       */


      function ɵɵstyleMapInterpolate6(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix) {
        var lView = getLView();
        var interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);
        ɵɵstyleMap(interpolatedValue);
      }
      /**
       *
       * Update an interpolated style on an element with 7 bound values surrounded by text.
       *
       * Used when the value passed to a property has 7 interpolated values in it:
       *
       * ```html
       * <div style="key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}; key4: {{v4}}; key5: {{v5}};
       *             key6: {{v6}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵstyleMapInterpolate7(
       *    'key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, '; key4: ', v4, '; key5: ', v5,
       *    '; key6: ', v6, 'suffix');
       * ```
       *
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param i3 Static value used for concatenation only.
       * @param v4 Value checked for change.
       * @param i4 Static value used for concatenation only.
       * @param v5 Value checked for change.
       * @param i5 Static value used for concatenation only.
       * @param v6 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @codeGenApi
       */


      function ɵɵstyleMapInterpolate7(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix) {
        var lView = getLView();
        var interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);
        ɵɵstyleMap(interpolatedValue);
      }
      /**
       *
       * Update an interpolated style on an element with 8 bound values surrounded by text.
       *
       * Used when the value passed to a property has 8 interpolated values in it:
       *
       * ```html
       * <div style="key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}; key4: {{v4}}; key5: {{v5}};
       *             key6: {{v6}}; key7: {{v7}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵstyleMapInterpolate8(
       *    'key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, '; key4: ', v4, '; key5: ', v5,
       *    '; key6: ', v6, '; key7: ', v7, 'suffix');
       * ```
       *
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param i3 Static value used for concatenation only.
       * @param v4 Value checked for change.
       * @param i4 Static value used for concatenation only.
       * @param v5 Value checked for change.
       * @param i5 Static value used for concatenation only.
       * @param v6 Value checked for change.
       * @param i6 Static value used for concatenation only.
       * @param v7 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @codeGenApi
       */


      function ɵɵstyleMapInterpolate8(prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix) {
        var lView = getLView();
        var interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);
        ɵɵstyleMap(interpolatedValue);
      }
      /**
       * Update an interpolated style on an element with 9 or more bound values surrounded by text.
       *
       * Used when the number of interpolated values exceeds 8.
       *
       * ```html
       * <div
       *  class="key: {{v0}}; key1: {{v1}}; key2: {{v2}}; key3: {{v3}}; key4: {{v4}}; key5: {{v5}};
       *         key6: {{v6}}; key7: {{v7}}; key8: {{v8}}; key9: {{v9}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵstyleMapInterpolateV(
       *    ['key: ', v0, '; key1: ', v1, '; key2: ', v2, '; key3: ', v3, '; key4: ', v4, '; key5: ', v5,
       *     '; key6: ', v6, '; key7: ', v7, '; key8: ', v8, '; key9: ', v9, 'suffix']);
       * ```
       *.
       * @param values The collection of values and the strings in-between those values, beginning with
       * a string prefix and ending with a string suffix.
       * (e.g. `['prefix', value0, '; key2: ', value1, '; key2: ', value2, ..., value99, 'suffix']`)
       * @codeGenApi
       */


      function ɵɵstyleMapInterpolateV(values) {
        var lView = getLView();
        var interpolatedValue = interpolationV(lView, values);
        ɵɵstyleMap(interpolatedValue);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       *
       * Update an interpolated style property on an element with single bound value surrounded by text.
       *
       * Used when the value passed to a property has 1 interpolated value in it:
       *
       * ```html
       * <div style.color="prefix{{v0}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵstylePropInterpolate1(0, 'prefix', v0, 'suffix');
       * ```
       *
       * @param styleIndex Index of style to update. This index value refers to the
       *        index of the style in the style bindings array that was passed into
       *        `styling`.
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵstylePropInterpolate1(prop, prefix, v0, suffix, valueSuffix) {
        var lView = getLView();
        var interpolatedValue = interpolation1(lView, prefix, v0, suffix);
        checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
        return ɵɵstylePropInterpolate1;
      }
      /**
       *
       * Update an interpolated style property on an element with 2 bound values surrounded by text.
       *
       * Used when the value passed to a property has 2 interpolated values in it:
       *
       * ```html
       * <div style.color="prefix{{v0}}-{{v1}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵstylePropInterpolate2(0, 'prefix', v0, '-', v1, 'suffix');
       * ```
       *
       * @param styleIndex Index of style to update. This index value refers to the
       *        index of the style in the style bindings array that was passed into
       *        `styling`.
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵstylePropInterpolate2(prop, prefix, v0, i0, v1, suffix, valueSuffix) {
        var lView = getLView();
        var interpolatedValue = interpolation2(lView, prefix, v0, i0, v1, suffix);
        checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
        return ɵɵstylePropInterpolate2;
      }
      /**
       *
       * Update an interpolated style property on an element with 3 bound values surrounded by text.
       *
       * Used when the value passed to a property has 3 interpolated values in it:
       *
       * ```html
       * <div style.color="prefix{{v0}}-{{v1}}-{{v2}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵstylePropInterpolate3(0, 'prefix', v0, '-', v1, '-', v2, 'suffix');
       * ```
       *
       * @param styleIndex Index of style to update. This index value refers to the
       *        index of the style in the style bindings array that was passed into
       *        `styling`.
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵstylePropInterpolate3(prop, prefix, v0, i0, v1, i1, v2, suffix, valueSuffix) {
        var lView = getLView();
        var interpolatedValue = interpolation3(lView, prefix, v0, i0, v1, i1, v2, suffix);
        checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
        return ɵɵstylePropInterpolate3;
      }
      /**
       *
       * Update an interpolated style property on an element with 4 bound values surrounded by text.
       *
       * Used when the value passed to a property has 4 interpolated values in it:
       *
       * ```html
       * <div style.color="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵstylePropInterpolate4(0, 'prefix', v0, '-', v1, '-', v2, '-', v3, 'suffix');
       * ```
       *
       * @param styleIndex Index of style to update. This index value refers to the
       *        index of the style in the style bindings array that was passed into
       *        `styling`.
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵstylePropInterpolate4(prop, prefix, v0, i0, v1, i1, v2, i2, v3, suffix, valueSuffix) {
        var lView = getLView();
        var interpolatedValue = interpolation4(lView, prefix, v0, i0, v1, i1, v2, i2, v3, suffix);
        checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
        return ɵɵstylePropInterpolate4;
      }
      /**
       *
       * Update an interpolated style property on an element with 5 bound values surrounded by text.
       *
       * Used when the value passed to a property has 5 interpolated values in it:
       *
       * ```html
       * <div style.color="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵstylePropInterpolate5(0, 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, 'suffix');
       * ```
       *
       * @param styleIndex Index of style to update. This index value refers to the
       *        index of the style in the style bindings array that was passed into
       *        `styling`.
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param i3 Static value used for concatenation only.
       * @param v4 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵstylePropInterpolate5(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix, valueSuffix) {
        var lView = getLView();
        var interpolatedValue = interpolation5(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, suffix);
        checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
        return ɵɵstylePropInterpolate5;
      }
      /**
       *
       * Update an interpolated style property on an element with 6 bound values surrounded by text.
       *
       * Used when the value passed to a property has 6 interpolated values in it:
       *
       * ```html
       * <div style.color="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵstylePropInterpolate6(0, 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, 'suffix');
       * ```
       *
       * @param styleIndex Index of style to update. This index value refers to the
       *        index of the style in the style bindings array that was passed into
       *        `styling`.
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param i3 Static value used for concatenation only.
       * @param v4 Value checked for change.
       * @param i4 Static value used for concatenation only.
       * @param v5 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵstylePropInterpolate6(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix, valueSuffix) {
        var lView = getLView();
        var interpolatedValue = interpolation6(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, suffix);
        checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
        return ɵɵstylePropInterpolate6;
      }
      /**
       *
       * Update an interpolated style property on an element with 7 bound values surrounded by text.
       *
       * Used when the value passed to a property has 7 interpolated values in it:
       *
       * ```html
       * <div style.color="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵstylePropInterpolate7(
       *    0, 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, 'suffix');
       * ```
       *
       * @param styleIndex Index of style to update. This index value refers to the
       *        index of the style in the style bindings array that was passed into
       *        `styling`.
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param i3 Static value used for concatenation only.
       * @param v4 Value checked for change.
       * @param i4 Static value used for concatenation only.
       * @param v5 Value checked for change.
       * @param i5 Static value used for concatenation only.
       * @param v6 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵstylePropInterpolate7(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix, valueSuffix) {
        var lView = getLView();
        var interpolatedValue = interpolation7(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, suffix);
        checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
        return ɵɵstylePropInterpolate7;
      }
      /**
       *
       * Update an interpolated style property on an element with 8 bound values surrounded by text.
       *
       * Used when the value passed to a property has 8 interpolated values in it:
       *
       * ```html
       * <div style.color="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}suffix"></div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵstylePropInterpolate8(0, 'prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6,
       * '-', v7, 'suffix');
       * ```
       *
       * @param styleIndex Index of style to update. This index value refers to the
       *        index of the style in the style bindings array that was passed into
       *        `styling`.
       * @param prefix Static value used for concatenation only.
       * @param v0 Value checked for change.
       * @param i0 Static value used for concatenation only.
       * @param v1 Value checked for change.
       * @param i1 Static value used for concatenation only.
       * @param v2 Value checked for change.
       * @param i2 Static value used for concatenation only.
       * @param v3 Value checked for change.
       * @param i3 Static value used for concatenation only.
       * @param v4 Value checked for change.
       * @param i4 Static value used for concatenation only.
       * @param v5 Value checked for change.
       * @param i5 Static value used for concatenation only.
       * @param v6 Value checked for change.
       * @param i6 Static value used for concatenation only.
       * @param v7 Value checked for change.
       * @param suffix Static value used for concatenation only.
       * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵstylePropInterpolate8(prop, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix, valueSuffix) {
        var lView = getLView();
        var interpolatedValue = interpolation8(lView, prefix, v0, i0, v1, i1, v2, i2, v3, i3, v4, i4, v5, i5, v6, i6, v7, suffix);
        checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
        return ɵɵstylePropInterpolate8;
      }
      /**
       * Update an interpolated style property on an element with 9 or more bound values surrounded by
       * text.
       *
       * Used when the number of interpolated values exceeds 8.
       *
       * ```html
       * <div
       *  style.color="prefix{{v0}}-{{v1}}-{{v2}}-{{v3}}-{{v4}}-{{v5}}-{{v6}}-{{v7}}-{{v8}}-{{v9}}suffix">
       * </div>
       * ```
       *
       * Its compiled representation is:
       *
       * ```ts
       * ɵɵstylePropInterpolateV(
       *  0, ['prefix', v0, '-', v1, '-', v2, '-', v3, '-', v4, '-', v5, '-', v6, '-', v7, '-', v9,
       *  'suffix']);
       * ```
       *
       * @param styleIndex Index of style to update. This index value refers to the
       *        index of the style in the style bindings array that was passed into
       *        `styling`..
       * @param values The collection of values and the strings in-between those values, beginning with
       * a string prefix and ending with a string suffix.
       * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)
       * @param valueSuffix Optional suffix. Used with scalar values to add unit such as `px`.
       * @returns itself, so that it may be chained.
       * @codeGenApi
       */


      function ɵɵstylePropInterpolateV(prop, values, valueSuffix) {
        var lView = getLView();
        var interpolatedValue = interpolationV(lView, values);
        checkStylingProperty(prop, interpolatedValue, valueSuffix, false);
        return ɵɵstylePropInterpolateV;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Update a property on a host element. Only applies to native node properties, not inputs.
       *
       * Operates on the element selected by index via the {@link select} instruction.
       *
       * @param propName Name of property. Because it is going to DOM, this is not subject to
       *        renaming as part of minification.
       * @param value New value to write.
       * @param sanitizer An optional function used to sanitize the value.
       * @returns This function returns itself so that it may be chained
       * (e.g. `property('name', ctx.name)('title', ctx.title)`)
       *
       * @codeGenApi
       */


      function ɵɵhostProperty(propName, value, sanitizer) {
        var lView = getLView();
        var bindingIndex = nextBindingIndex();

        if (bindingUpdated(lView, bindingIndex, value)) {
          var tView = getTView();
          var tNode = getSelectedTNode();
          elementPropertyInternal(tView, tNode, lView, propName, value, lView[RENDERER], sanitizer, true);
          ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);
        }

        return ɵɵhostProperty;
      }
      /**
       * Updates a synthetic host binding (e.g. `[@foo]`) on a component or directive.
       *
       * This instruction is for compatibility purposes and is designed to ensure that a
       * synthetic host binding (e.g. `@HostBinding('@foo')`) properly gets rendered in
       * the component's renderer. Normally all host bindings are evaluated with the parent
       * component's renderer, but, in the case of animation @triggers, they need to be
       * evaluated with the sub component's renderer (because that's where the animation
       * triggers are defined).
       *
       * Do not use this instruction as a replacement for `elementProperty`. This instruction
       * only exists to ensure compatibility with the ViewEngine's host binding behavior.
       *
       * @param index The index of the element to update in the data array
       * @param propName Name of property. Because it is going to DOM, this is not subject to
       *        renaming as part of minification.
       * @param value New value to write.
       * @param sanitizer An optional function used to sanitize the value.
       *
       * @codeGenApi
       */


      function ɵɵsyntheticHostProperty(propName, value, sanitizer) {
        var lView = getLView();
        var bindingIndex = nextBindingIndex();

        if (bindingUpdated(lView, bindingIndex, value)) {
          var tView = getTView();
          var tNode = getSelectedTNode();
          var currentDef = getCurrentDirectiveDef(tView.data);
          var renderer = loadComponentRenderer(currentDef, tNode, lView);
          elementPropertyInternal(tView, tNode, lView, propName, value, renderer, sanitizer, true);
          ngDevMode && storePropertyBindingMetadata(tView.data, tNode, propName, bindingIndex);
        }

        return ɵɵsyntheticHostProperty;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * NOTE: changes to the `ngI18nClosureMode` name must be synced with `compiler-cli/src/tooling.ts`.
       */


      if (typeof ngI18nClosureMode === 'undefined') {
        // These property accesses can be ignored because ngI18nClosureMode will be set to false
        // when optimizing code and the whole if statement will be dropped.
        // Make sure to refer to ngI18nClosureMode as ['ngI18nClosureMode'] for closure.
        // NOTE: we need to have it in IIFE so that the tree-shaker is happy.
        (function () {
          // tslint:disable-next-line:no-toplevel-property-access
          _global['ngI18nClosureMode'] = // TODO(FW-1250): validate that this actually, you know, works.
          // tslint:disable-next-line:no-toplevel-property-access
          typeof goog !== 'undefined' && typeof goog.getMsg === 'function';
        })();
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // THIS CODE IS GENERATED - DO NOT MODIFY
      // See angular/tools/gulp-tasks/cldr/extract.js


      var u = undefined;

      function plural(n) {
        var i = Math.floor(Math.abs(n)),
            v = n.toString().replace(/^[^.]*\.?/, '').length;
        if (i === 1 && v === 0) return 1;
        return 5;
      }

      var localeEn = ['en', [['a', 'p'], ['AM', 'PM'], u], [['AM', 'PM'], u, u], [['S', 'M', 'T', 'W', 'T', 'F', 'S'], ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']], u, [['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'], ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']], u, [['B', 'A'], ['BC', 'AD'], ['Before Christ', 'Anno Domini']], 0, [6, 0], ['M/d/yy', 'MMM d, y', 'MMMM d, y', 'EEEE, MMMM d, y'], ['h:mm a', 'h:mm:ss a', 'h:mm:ss a z', 'h:mm:ss a zzzz'], ['{1}, {0}', u, '{1} \'at\' {0}', u], ['.', ',', ';', '%', '+', '-', 'E', '×', '‰', '∞', 'NaN', ':'], ['#,##0.###', '#,##0%', '¤#,##0.00', '#E0'], 'USD', '$', 'US Dollar', {}, 'ltr', plural];
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * This const is used to store the locale data registered with `registerLocaleData`
       */

      var LOCALE_DATA = {};
      /**
       * Register locale data to be used internally by Angular. See the
       * ["I18n guide"](guide/i18n#i18n-pipes) to know how to import additional locale data.
       *
       * The signature `registerLocaleData(data: any, extraData?: any)` is deprecated since v5.1
       */

      function registerLocaleData(data, localeId, extraData) {
        if (typeof localeId !== 'string') {
          extraData = localeId;
          localeId = data[LocaleDataIndex.LocaleId];
        }

        localeId = localeId.toLowerCase().replace(/_/g, '-');
        LOCALE_DATA[localeId] = data;

        if (extraData) {
          LOCALE_DATA[localeId][LocaleDataIndex.ExtraData] = extraData;
        }
      }
      /**
       * Finds the locale data for a given locale.
       *
       * @param locale The locale code.
       * @returns The locale data.
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       */


      function findLocaleData(locale) {
        var normalizedLocale = normalizeLocale(locale);
        var match = getLocaleData(normalizedLocale);

        if (match) {
          return match;
        } // let's try to find a parent locale


        var parentLocale = normalizedLocale.split('-')[0];
        match = getLocaleData(parentLocale);

        if (match) {
          return match;
        }

        if (parentLocale === 'en') {
          return localeEn;
        }

        throw new Error("Missing locale data for the locale \"".concat(locale, "\"."));
      }
      /**
       * Retrieves the default currency code for the given locale.
       *
       * The default is defined as the first currency which is still in use.
       *
       * @param locale The code of the locale whose currency code we want.
       * @returns The code of the default currency for the given locale.
       *
       */


      function getLocaleCurrencyCode(locale) {
        var data = findLocaleData(locale);
        return data[LocaleDataIndex.CurrencyCode] || null;
      }
      /**
       * Retrieves the plural function used by ICU expressions to determine the plural case to use
       * for a given locale.
       * @param locale A locale code for the locale format rules to use.
       * @returns The plural function for the locale.
       * @see `NgPlural`
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       */


      function getLocalePluralCase(locale) {
        var data = findLocaleData(locale);
        return data[LocaleDataIndex.PluralCase];
      }
      /**
       * Helper function to get the given `normalizedLocale` from `LOCALE_DATA`
       * or from the global `ng.common.locale`.
       */


      function getLocaleData(normalizedLocale) {
        if (!(normalizedLocale in LOCALE_DATA)) {
          LOCALE_DATA[normalizedLocale] = _global.ng && _global.ng.common && _global.ng.common.locales && _global.ng.common.locales[normalizedLocale];
        }

        return LOCALE_DATA[normalizedLocale];
      }
      /**
       * Helper function to remove all the locale data from `LOCALE_DATA`.
       */


      function unregisterAllLocaleData() {
        LOCALE_DATA = {};
      }
      /**
       * Index of each type of locale data from the locale data array
       */


      var LocaleDataIndex;

      (function (LocaleDataIndex) {
        LocaleDataIndex[LocaleDataIndex["LocaleId"] = 0] = "LocaleId";
        LocaleDataIndex[LocaleDataIndex["DayPeriodsFormat"] = 1] = "DayPeriodsFormat";
        LocaleDataIndex[LocaleDataIndex["DayPeriodsStandalone"] = 2] = "DayPeriodsStandalone";
        LocaleDataIndex[LocaleDataIndex["DaysFormat"] = 3] = "DaysFormat";
        LocaleDataIndex[LocaleDataIndex["DaysStandalone"] = 4] = "DaysStandalone";
        LocaleDataIndex[LocaleDataIndex["MonthsFormat"] = 5] = "MonthsFormat";
        LocaleDataIndex[LocaleDataIndex["MonthsStandalone"] = 6] = "MonthsStandalone";
        LocaleDataIndex[LocaleDataIndex["Eras"] = 7] = "Eras";
        LocaleDataIndex[LocaleDataIndex["FirstDayOfWeek"] = 8] = "FirstDayOfWeek";
        LocaleDataIndex[LocaleDataIndex["WeekendRange"] = 9] = "WeekendRange";
        LocaleDataIndex[LocaleDataIndex["DateFormat"] = 10] = "DateFormat";
        LocaleDataIndex[LocaleDataIndex["TimeFormat"] = 11] = "TimeFormat";
        LocaleDataIndex[LocaleDataIndex["DateTimeFormat"] = 12] = "DateTimeFormat";
        LocaleDataIndex[LocaleDataIndex["NumberSymbols"] = 13] = "NumberSymbols";
        LocaleDataIndex[LocaleDataIndex["NumberFormats"] = 14] = "NumberFormats";
        LocaleDataIndex[LocaleDataIndex["CurrencyCode"] = 15] = "CurrencyCode";
        LocaleDataIndex[LocaleDataIndex["CurrencySymbol"] = 16] = "CurrencySymbol";
        LocaleDataIndex[LocaleDataIndex["CurrencyName"] = 17] = "CurrencyName";
        LocaleDataIndex[LocaleDataIndex["Currencies"] = 18] = "Currencies";
        LocaleDataIndex[LocaleDataIndex["Directionality"] = 19] = "Directionality";
        LocaleDataIndex[LocaleDataIndex["PluralCase"] = 20] = "PluralCase";
        LocaleDataIndex[LocaleDataIndex["ExtraData"] = 21] = "ExtraData";
      })(LocaleDataIndex || (LocaleDataIndex = {}));
      /**
       * Returns the canonical form of a locale name - lowercase with `_` replaced with `-`.
       */


      function normalizeLocale(locale) {
        return locale.toLowerCase().replace(/_/g, '-');
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var pluralMapping = ['zero', 'one', 'two', 'few', 'many'];
      /**
       * Returns the plural case based on the locale
       */

      function getPluralCase(value, locale) {
        var plural = getLocalePluralCase(locale)(parseInt(value, 10));
        var result = pluralMapping[plural];
        return result !== undefined ? result : 'other';
      }
      /**
       * The locale id that the application is using by default (for translations and ICU expressions).
       */


      var DEFAULT_LOCALE_ID = 'en-US';
      /**
       * USD currency code that the application uses by default for CurrencyPipe when no
       * DEFAULT_CURRENCY_CODE is provided.
       */

      var USD_CURRENCY_CODE = 'USD';
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Marks that the next string is an element name.
       *
       * See `I18nMutateOpCodes` documentation.
       */

      var ELEMENT_MARKER = {
        marker: 'element'
      };
      /**
       * Marks that the next string is comment text need for ICU.
       *
       * See `I18nMutateOpCodes` documentation.
       */

      var ICU_MARKER = {
        marker: 'ICU'
      };
      /**
       * See `I18nCreateOpCodes`
       */

      var I18nCreateOpCode;

      (function (I18nCreateOpCode) {
        /**
         * Number of bits to shift index so that it can be combined with the `APPEND_EAGERLY` and
         * `COMMENT`.
         */
        I18nCreateOpCode[I18nCreateOpCode["SHIFT"] = 2] = "SHIFT";
        /**
         * Should the node be appended to parent imedditatly after creation.
         */

        I18nCreateOpCode[I18nCreateOpCode["APPEND_EAGERLY"] = 1] = "APPEND_EAGERLY";
        /**
         * If set the node should be comment (rather than a text) node.
         */

        I18nCreateOpCode[I18nCreateOpCode["COMMENT"] = 2] = "COMMENT";
      })(I18nCreateOpCode || (I18nCreateOpCode = {})); // Note: This hack is necessary so we don't erroneously get a circular dependency
      // failure based on types.


      var unusedValueExportToPlacateAjd$6 = 1;
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * The locale id that the application is currently using (for translations and ICU expressions).
       * This is the ivy version of `LOCALE_ID` that was defined as an injection token for the view engine
       * but is now defined as a global value.
       */

      var LOCALE_ID = DEFAULT_LOCALE_ID;
      /**
       * Sets the locale id that will be used for translations and ICU expressions.
       * This is the ivy version of `LOCALE_ID` that was defined as an injection token for the view engine
       * but is now defined as a global value.
       *
       * @param localeId
       */

      function setLocaleId(localeId) {
        assertDefined(localeId, "Expected localeId to be defined");

        if (typeof localeId === 'string') {
          LOCALE_ID = localeId.toLowerCase().replace(/_/g, '-');
        }
      }
      /**
       * Gets the locale id that will be used for translations and ICU expressions.
       * This is the ivy version of `LOCALE_ID` that was defined as an injection token for the view engine
       * but is now defined as a global value.
       */


      function getLocaleId() {
        return LOCALE_ID;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Find a node in front of which `currentTNode` should be inserted (takes i18n into account).
       *
       * This method determines the `RNode` in front of which we should insert the `currentRNode`. This
       * takes `TNode.insertBeforeIndex` into account.
       *
       * @param parentTNode parent `TNode`
       * @param currentTNode current `TNode` (The node which we would like to insert into the DOM)
       * @param lView current `LView`
       */


      function getInsertInFrontOfRNodeWithI18n(parentTNode, currentTNode, lView) {
        var tNodeInsertBeforeIndex = currentTNode.insertBeforeIndex;
        var insertBeforeIndex = Array.isArray(tNodeInsertBeforeIndex) ? tNodeInsertBeforeIndex[0] : tNodeInsertBeforeIndex;

        if (insertBeforeIndex === null) {
          return getInsertInFrontOfRNodeWithNoI18n(parentTNode, currentTNode, lView);
        } else {
          ngDevMode && assertIndexInRange(lView, insertBeforeIndex);
          return unwrapRNode(lView[insertBeforeIndex]);
        }
      }
      /**
       * Process `TNode.insertBeforeIndex` by adding i18n text nodes.
       *
       * See `TNode.insertBeforeIndex`
       */


      function processI18nInsertBefore(renderer, childTNode, lView, childRNode, parentRElement) {
        var tNodeInsertBeforeIndex = childTNode.insertBeforeIndex;

        if (Array.isArray(tNodeInsertBeforeIndex)) {
          // An array indicates that there are i18n nodes that need to be added as children of this
          // `childRNode`. These i18n nodes were created before this `childRNode` was available and so
          // only now can be added. The first element of the array is the normal index where we should
          // insert the `childRNode`. Additional elements are the extra nodes to be added as children of
          // `childRNode`.
          ngDevMode && assertDomNode(childRNode);
          var i18nParent = childRNode;
          var anchorRNode = null;

          if (!(childTNode.type & 3
          /* AnyRNode */
          )) {
            anchorRNode = i18nParent;
            i18nParent = parentRElement;
          }

          if (i18nParent !== null && (childTNode.flags & 2
          /* isComponentHost */
          ) === 0) {
            for (var i = 1; i < tNodeInsertBeforeIndex.length; i++) {
              // No need to `unwrapRNode` because all of the indexes point to i18n text nodes.
              // see `assertDomNode` below.
              var i18nChild = lView[tNodeInsertBeforeIndex[i]];
              nativeInsertBefore(renderer, i18nParent, i18nChild, anchorRNode, false);
            }
          }
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Add `tNode` to `previousTNodes` list and update relevant `TNode`s in `previousTNodes` list
       * `tNode.insertBeforeIndex`.
       *
       * Things to keep in mind:
       * 1. All i18n text nodes are encoded as `TNodeType.Element` and are created eagerly by the
       *    `ɵɵi18nStart` instruction.
       * 2. All `TNodeType.Placeholder` `TNodes` are elements which will be created later by
       *    `ɵɵelementStart` instruction.
       * 3. `ɵɵelementStart` instruction will create `TNode`s in the ascending `TNode.index` order. (So a
       *    smaller index `TNode` is guaranteed to be created before a larger one)
       *
       * We use the above three invariants to determine `TNode.insertBeforeIndex`.
       *
       * In an ideal world `TNode.insertBeforeIndex` would always be `TNode.next.index`. However,
       * this will not work because `TNode.next.index` may be larger than `TNode.index` which means that
       * the next node is not yet created and therefore we can't insert in front of it.
       *
       * Rule1: `TNode.insertBeforeIndex = null` if `TNode.next === null` (Initial condition, as we don't
       *        know if there will be further `TNode`s inserted after.)
       * Rule2: If `previousTNode` is created after the `tNode` being inserted, then
       *        `previousTNode.insertBeforeNode = tNode.index` (So when a new `tNode` is added we check
       *        previous to see if we can update its `insertBeforeTNode`)
       *
       * See `TNode.insertBeforeIndex` for more context.
       *
       * @param previousTNodes A list of previous TNodes so that we can easily traverse `TNode`s in
       *     reverse order. (If `TNode` would have `previous` this would not be necessary.)
       * @param newTNode A TNode to add to the `previousTNodes` list.
       */


      function addTNodeAndUpdateInsertBeforeIndex(previousTNodes, newTNode) {
        // Start with Rule1
        ngDevMode && assertEqual(newTNode.insertBeforeIndex, null, 'We expect that insertBeforeIndex is not set');
        previousTNodes.push(newTNode);

        if (previousTNodes.length > 1) {
          for (var i = previousTNodes.length - 2; i >= 0; i--) {
            var existingTNode = previousTNodes[i]; // Text nodes are created eagerly and so they don't need their `indexBeforeIndex` updated.
            // It is safe to ignore them.

            if (!isI18nText(existingTNode)) {
              if (isNewTNodeCreatedBefore(existingTNode, newTNode) && getInsertBeforeIndex(existingTNode) === null) {
                // If it was created before us in time, (and it does not yet have `insertBeforeIndex`)
                // then add the `insertBeforeIndex`.
                setInsertBeforeIndex(existingTNode, newTNode.index);
              }
            }
          }
        }
      }

      function isI18nText(tNode) {
        return !(tNode.type & 64
        /* Placeholder */
        );
      }

      function isNewTNodeCreatedBefore(existingTNode, newTNode) {
        return isI18nText(newTNode) || existingTNode.index > newTNode.index;
      }

      function getInsertBeforeIndex(tNode) {
        var index = tNode.insertBeforeIndex;
        return Array.isArray(index) ? index[0] : index;
      }

      function setInsertBeforeIndex(tNode, value) {
        var index = tNode.insertBeforeIndex;

        if (Array.isArray(index)) {
          // Array is stored if we have to insert child nodes. See `TNode.insertBeforeIndex`
          index[0] = value;
        } else {
          setI18nHandling(getInsertInFrontOfRNodeWithI18n, processI18nInsertBefore);
          tNode.insertBeforeIndex = value;
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Retrieve `TIcu` at a given `index`.
       *
       * The `TIcu` can be stored either directly (if it is nested ICU) OR
       * it is stored inside tho `TIcuContainer` if it is top level ICU.
       *
       * The reason for this is that the top level ICU need a `TNode` so that they are part of the render
       * tree, but nested ICU's have no TNode, because we don't know ahead of time if the nested ICU is
       * expressed (parent ICU may have selected a case which does not contain it.)
       *
       * @param tView Current `TView`.
       * @param index Index where the value should be read from.
       */


      function getTIcu(tView, index) {
        var value = tView.data[index];
        if (value === null || typeof value === 'string') return null;

        if (ngDevMode && !(value.hasOwnProperty('tViews') || value.hasOwnProperty('currentCaseLViewIndex'))) {
          throwError('We expect to get \'null\'|\'TIcu\'|\'TIcuContainer\', but got: ' + value);
        } // Here the `value.hasOwnProperty('currentCaseLViewIndex')` is a polymorphic read as it can be
        // either TIcu or TIcuContainerNode. This is not ideal, but we still think it is OK because it
        // will be just two cases which fits into the browser inline cache (inline cache can take up to
        // 4)


        var tIcu = value.hasOwnProperty('currentCaseLViewIndex') ? value : value.value;
        ngDevMode && assertTIcu(tIcu);
        return tIcu;
      }
      /**
       * Store `TIcu` at a give `index`.
       *
       * The `TIcu` can be stored either directly (if it is nested ICU) OR
       * it is stored inside tho `TIcuContainer` if it is top level ICU.
       *
       * The reason for this is that the top level ICU need a `TNode` so that they are part of the render
       * tree, but nested ICU's have no TNode, because we don't know ahead of time if the nested ICU is
       * expressed (parent ICU may have selected a case which does not contain it.)
       *
       * @param tView Current `TView`.
       * @param index Index where the value should be stored at in `Tview.data`
       * @param tIcu The TIcu to store.
       */


      function setTIcu(tView, index, tIcu) {
        var tNode = tView.data[index];
        ngDevMode && assertEqual(tNode === null || tNode.hasOwnProperty('tViews'), true, 'We expect to get \'null\'|\'TIcuContainer\'');

        if (tNode === null) {
          tView.data[index] = tIcu;
        } else {
          ngDevMode && assertTNodeType(tNode, 32
          /* Icu */
          );
          tNode.value = tIcu;
        }
      }
      /**
       * Set `TNode.insertBeforeIndex` taking the `Array` into account.
       *
       * See `TNode.insertBeforeIndex`
       */


      function setTNodeInsertBeforeIndex(tNode, index) {
        ngDevMode && assertTNode(tNode);
        var insertBeforeIndex = tNode.insertBeforeIndex;

        if (insertBeforeIndex === null) {
          setI18nHandling(getInsertInFrontOfRNodeWithI18n, processI18nInsertBefore);
          insertBeforeIndex = tNode.insertBeforeIndex = [null
          /* may be updated to number later */
          , index];
        } else {
          assertEqual(Array.isArray(insertBeforeIndex), true, 'Expecting array here');
          insertBeforeIndex.push(index);
        }
      }
      /**
       * Create `TNode.type=TNodeType.Placeholder` node.
       *
       * See `TNodeType.Placeholder` for more information.
       */


      function createTNodePlaceholder(tView, previousTNodes, index) {
        var tNode = createTNodeAtIndex(tView, index, 64
        /* Placeholder */
        , null, null);
        addTNodeAndUpdateInsertBeforeIndex(previousTNodes, tNode);
        return tNode;
      }
      /**
       * Returns current ICU case.
       *
       * ICU cases are stored as index into the `TIcu.cases`.
       * At times it is necessary to communicate that the ICU case just switched and that next ICU update
       * should update all bindings regardless of the mask. In such a case the we store negative numbers
       * for cases which have just been switched. This function removes the negative flag.
       */


      function getCurrentICUCaseIndex(tIcu, lView) {
        var currentCase = lView[tIcu.currentCaseLViewIndex];
        return currentCase === null ? currentCase : currentCase < 0 ? ~currentCase : currentCase;
      }

      function getParentFromIcuCreateOpCode(mergedCode) {
        return mergedCode >>> 17
        /* SHIFT_PARENT */
        ;
      }

      function getRefFromIcuCreateOpCode(mergedCode) {
        return (mergedCode & 131070
        /* MASK_REF */
        ) >>> 1
        /* SHIFT_REF */
        ;
      }

      function getInstructionFromIcuCreateOpCode(mergedCode) {
        return mergedCode & 1
        /* MASK_INSTRUCTION */
        ;
      }

      function icuCreateOpCode(opCode, parentIdx, refIdx) {
        ngDevMode && assertGreaterThanOrEqual(parentIdx, 0, 'Missing parent index');
        ngDevMode && assertGreaterThan(refIdx, 0, 'Missing ref index');
        return opCode | parentIdx << 17
        /* SHIFT_PARENT */
        | refIdx << 1
        /* SHIFT_REF */
        ;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Keep track of which input bindings in `ɵɵi18nExp` have changed.
       *
       * This is used to efficiently update expressions in i18n only when the corresponding input has
       * changed.
       *
       * 1) Each bit represents which of the `ɵɵi18nExp` has changed.
       * 2) There are 32 bits allowed in JS.
       * 3) Bit 32 is special as it is shared for all changes past 32. (In other words if you have more
       * than 32 `ɵɵi18nExp` then all changes past 32nd `ɵɵi18nExp` will be mapped to same bit. This means
       * that we may end up changing more than we need to. But i18n expressions with 32 bindings is rare
       * so in practice it should not be an issue.)
       */


      var changeMask = 0;
      /**
       * Keeps track of which bit needs to be updated in `changeMask`
       *
       * This value gets incremented on every call to `ɵɵi18nExp`
       */

      var changeMaskCounter = 0;
      /**
       * Keep track of which input bindings in `ɵɵi18nExp` have changed.
       *
       * `setMaskBit` gets invoked by each call to `ɵɵi18nExp`.
       *
       * @param hasChange did `ɵɵi18nExp` detect a change.
       */

      function setMaskBit(hasChange) {
        if (hasChange) {
          changeMask = changeMask | 1 << Math.min(changeMaskCounter, 31);
        }

        changeMaskCounter++;
      }

      function applyI18n(tView, lView, index) {
        if (changeMaskCounter > 0) {
          ngDevMode && assertDefined(tView, "tView should be defined");
          var tI18n = tView.data[index]; // When `index` points to an `ɵɵi18nAttributes` then we have an array otherwise `TI18n`

          var updateOpCodes = Array.isArray(tI18n) ? tI18n : tI18n.update;
          var bindingsStartIndex = getBindingIndex() - changeMaskCounter - 1;
          applyUpdateOpCodes(tView, lView, updateOpCodes, bindingsStartIndex, changeMask);
        } // Reset changeMask & maskBit to default for the next update cycle


        changeMask = 0;
        changeMaskCounter = 0;
      }
      /**
       * Apply `I18nCreateOpCodes` op-codes as stored in `TI18n.create`.
       *
       * Creates text (and comment) nodes which are internationalized.
       *
       * @param lView Current lView
       * @param createOpCodes Set of op-codes to apply
       * @param parentRNode Parent node (so that direct children can be added eagerly) or `null` if it is
       *     a root node.
       * @param insertInFrontOf DOM node that should be used as an anchor.
       */


      function applyCreateOpCodes(lView, createOpCodes, parentRNode, insertInFrontOf) {
        var renderer = lView[RENDERER];

        for (var i = 0; i < createOpCodes.length; i++) {
          var opCode = createOpCodes[i++];
          var text = createOpCodes[i];
          var isComment = (opCode & I18nCreateOpCode.COMMENT) === I18nCreateOpCode.COMMENT;
          var appendNow = (opCode & I18nCreateOpCode.APPEND_EAGERLY) === I18nCreateOpCode.APPEND_EAGERLY;
          var index = opCode >>> I18nCreateOpCode.SHIFT;
          var rNode = lView[index];

          if (rNode === null) {
            // We only create new DOM nodes if they don't already exist: If ICU switches case back to a
            // case which was already instantiated, no need to create new DOM nodes.
            rNode = lView[index] = isComment ? renderer.createComment(text) : createTextNode(renderer, text);
          }

          if (appendNow && parentRNode !== null) {
            nativeInsertBefore(renderer, parentRNode, rNode, insertInFrontOf, false);
          }
        }
      }
      /**
       * Apply `I18nMutateOpCodes` OpCodes.
       *
       * @param tView Current `TView`
       * @param mutableOpCodes Mutable OpCodes to process
       * @param lView Current `LView`
       * @param anchorRNode place where the i18n node should be inserted.
       */


      function applyMutableOpCodes(tView, mutableOpCodes, lView, anchorRNode) {
        ngDevMode && assertDomNode(anchorRNode);
        var renderer = lView[RENDERER]; // `rootIdx` represents the node into which all inserts happen.

        var rootIdx = null; // `rootRNode` represents the real node into which we insert. This can be different from
        // `lView[rootIdx]` if we have projection.
        //  - null we don't have a parent (as can be the case in when we are inserting into a root of
        //    LView which has no parent.)
        //  - `RElement` The element representing the root after taking projection into account.

        var rootRNode;

        for (var i = 0; i < mutableOpCodes.length; i++) {
          var opCode = mutableOpCodes[i];

          if (typeof opCode == 'string') {
            var textNodeIndex = mutableOpCodes[++i];

            if (lView[textNodeIndex] === null) {
              ngDevMode && ngDevMode.rendererCreateTextNode++;
              ngDevMode && assertIndexInRange(lView, textNodeIndex);
              lView[textNodeIndex] = createTextNode(renderer, opCode);
            }
          } else if (typeof opCode == 'number') {
            switch (opCode & 1
            /* MASK_INSTRUCTION */
            ) {
              case 0
              /* AppendChild */
              :
                var parentIdx = getParentFromIcuCreateOpCode(opCode);

                if (rootIdx === null) {
                  // The first operation should save the `rootIdx` because the first operation
                  // must insert into the root. (Only subsequent operations can insert into a dynamic
                  // parent)
                  rootIdx = parentIdx;
                  rootRNode = nativeParentNode(renderer, anchorRNode);
                }

                var insertInFrontOf = void 0;
                var parentRNode = void 0;

                if (parentIdx === rootIdx) {
                  insertInFrontOf = anchorRNode;
                  parentRNode = rootRNode;
                } else {
                  insertInFrontOf = null;
                  parentRNode = unwrapRNode(lView[parentIdx]);
                } // FIXME(misko): Refactor with `processI18nText`


                if (parentRNode !== null) {
                  // This can happen if the `LView` we are adding to is not attached to a parent `LView`.
                  // In such a case there is no "root" we can attach to. This is fine, as we still need to
                  // create the elements. When the `LView` gets later added to a parent these "root" nodes
                  // get picked up and added.
                  ngDevMode && assertDomNode(parentRNode);
                  var refIdx = getRefFromIcuCreateOpCode(opCode);
                  ngDevMode && assertGreaterThan(refIdx, HEADER_OFFSET, 'Missing ref'); // `unwrapRNode` is not needed here as all of these point to RNodes as part of the i18n
                  // which can't have components.

                  var child = lView[refIdx];
                  ngDevMode && assertDomNode(child);
                  nativeInsertBefore(renderer, parentRNode, child, insertInFrontOf, false);
                  var tIcu = getTIcu(tView, refIdx);

                  if (tIcu !== null && typeof tIcu === 'object') {
                    // If we just added a comment node which has ICU then that ICU may have already been
                    // rendered and therefore we need to re-add it here.
                    ngDevMode && assertTIcu(tIcu);
                    var caseIndex = getCurrentICUCaseIndex(tIcu, lView);

                    if (caseIndex !== null) {
                      applyMutableOpCodes(tView, tIcu.create[caseIndex], lView, lView[tIcu.anchorIdx]);
                    }
                  }
                }

                break;

              case 1
              /* Attr */
              :
                var elementNodeIndex = opCode >>> 1
                /* SHIFT_REF */
                ;
                var attrName = mutableOpCodes[++i];
                var attrValue = mutableOpCodes[++i]; // This code is used for ICU expressions only, since we don't support
                // directives/components in ICUs, we don't need to worry about inputs here

                setElementAttribute(renderer, getNativeByIndex(elementNodeIndex, lView), null, null, attrName, attrValue, null);
                break;

              default:
                throw new Error("Unable to determine the type of mutate operation for \"".concat(opCode, "\""));
            }
          } else {
            switch (opCode) {
              case ICU_MARKER:
                var commentValue = mutableOpCodes[++i];
                var commentNodeIndex = mutableOpCodes[++i];

                if (lView[commentNodeIndex] === null) {
                  ngDevMode && assertEqual(typeof commentValue, 'string', "Expected \"".concat(commentValue, "\" to be a comment node value"));
                  ngDevMode && ngDevMode.rendererCreateComment++;
                  ngDevMode && assertIndexInExpandoRange(lView, commentNodeIndex);
                  var commentRNode = lView[commentNodeIndex] = createCommentNode(renderer, commentValue); // FIXME(misko): Attaching patch data is only needed for the root (Also add tests)

                  attachPatchData(commentRNode, lView);
                }

                break;

              case ELEMENT_MARKER:
                var tagName = mutableOpCodes[++i];
                var _elementNodeIndex = mutableOpCodes[++i];

                if (lView[_elementNodeIndex] === null) {
                  ngDevMode && assertEqual(typeof tagName, 'string', "Expected \"".concat(tagName, "\" to be an element node tag name"));
                  ngDevMode && ngDevMode.rendererCreateElement++;
                  ngDevMode && assertIndexInExpandoRange(lView, _elementNodeIndex);
                  var elementRNode = lView[_elementNodeIndex] = createElementNode(renderer, tagName, null); // FIXME(misko): Attaching patch data is only needed for the root (Also add tests)

                  attachPatchData(elementRNode, lView);
                }

                break;

              default:
                ngDevMode && throwError("Unable to determine the type of mutate operation for \"".concat(opCode, "\""));
            }
          }
        }
      }
      /**
       * Apply `I18nUpdateOpCodes` OpCodes
       *
       * @param tView Current `TView`
       * @param lView Current `LView`
       * @param updateOpCodes OpCodes to process
       * @param bindingsStartIndex Location of the first `ɵɵi18nApply`
       * @param changeMask Each bit corresponds to a `ɵɵi18nExp` (Counting backwards from
       *     `bindingsStartIndex`)
       */


      function applyUpdateOpCodes(tView, lView, updateOpCodes, bindingsStartIndex, changeMask) {
        for (var i = 0; i < updateOpCodes.length; i++) {
          // bit code to check if we should apply the next update
          var checkBit = updateOpCodes[i]; // Number of opCodes to skip until next set of update codes

          var skipCodes = updateOpCodes[++i];

          if (checkBit & changeMask) {
            // The value has been updated since last checked
            var value = '';

            for (var j = i + 1; j <= i + skipCodes; j++) {
              var opCode = updateOpCodes[j];

              if (typeof opCode == 'string') {
                value += opCode;
              } else if (typeof opCode == 'number') {
                if (opCode < 0) {
                  // Negative opCode represent `i18nExp` values offset.
                  value += renderStringify(lView[bindingsStartIndex - opCode]);
                } else {
                  var nodeIndex = opCode >>> 2
                  /* SHIFT_REF */
                  ;

                  switch (opCode & 3
                  /* MASK_OPCODE */
                  ) {
                    case 1
                    /* Attr */
                    :
                      var propName = updateOpCodes[++j];
                      var sanitizeFn = updateOpCodes[++j];
                      var tNodeOrTagName = tView.data[nodeIndex];
                      ngDevMode && assertDefined(tNodeOrTagName, 'Experting TNode or string');

                      if (typeof tNodeOrTagName === 'string') {
                        // IF we don't have a `TNode`, then we are an element in ICU (as ICU content does
                        // not have TNode), in which case we know that there are no directives, and hence
                        // we use attribute setting.
                        setElementAttribute(lView[RENDERER], lView[nodeIndex], null, tNodeOrTagName, propName, value, sanitizeFn);
                      } else {
                        elementPropertyInternal(tView, tNodeOrTagName, lView, propName, value, lView[RENDERER], sanitizeFn, false);
                      }

                      break;

                    case 0
                    /* Text */
                    :
                      var rText = lView[nodeIndex];
                      rText !== null && updateTextNode(lView[RENDERER], rText, value);
                      break;

                    case 2
                    /* IcuSwitch */
                    :
                      applyIcuSwitchCase(tView, getTIcu(tView, nodeIndex), lView, value);
                      break;

                    case 3
                    /* IcuUpdate */
                    :
                      applyIcuUpdateCase(tView, getTIcu(tView, nodeIndex), bindingsStartIndex, lView);
                      break;
                  }
                }
              }
            }
          } else {
            var _opCode = updateOpCodes[i + 1];

            if (_opCode > 0 && (_opCode & 3
            /* MASK_OPCODE */
            ) === 3
            /* IcuUpdate */
            ) {
                // Special case for the `icuUpdateCase`. It could be that the mask did not match, but
                // we still need to execute `icuUpdateCase` because the case has changed recently due to
                // previous `icuSwitchCase` instruction. (`icuSwitchCase` and `icuUpdateCase` always come in
                // pairs.)
                var _nodeIndex = _opCode >>> 2
                /* SHIFT_REF */
                ;

                var tIcu = getTIcu(tView, _nodeIndex);
                var currentIndex = lView[tIcu.currentCaseLViewIndex];

                if (currentIndex < 0) {
                  applyIcuUpdateCase(tView, tIcu, bindingsStartIndex, lView);
                }
              }
          }

          i += skipCodes;
        }
      }
      /**
       * Apply OpCodes associated with updating an existing ICU.
       *
       * @param tView Current `TView`
       * @param tIcu Current `TIcu`
       * @param bindingsStartIndex Location of the first `ɵɵi18nApply`
       * @param lView Current `LView`
       */


      function applyIcuUpdateCase(tView, tIcu, bindingsStartIndex, lView) {
        ngDevMode && assertIndexInRange(lView, tIcu.currentCaseLViewIndex);
        var activeCaseIndex = lView[tIcu.currentCaseLViewIndex];

        if (activeCaseIndex !== null) {
          var mask = changeMask;

          if (activeCaseIndex < 0) {
            // Clear the flag.
            // Negative number means that the ICU was freshly created and we need to force the update.
            activeCaseIndex = lView[tIcu.currentCaseLViewIndex] = ~activeCaseIndex; // -1 is same as all bits on, which simulates creation since it marks all bits dirty

            mask = -1;
          }

          applyUpdateOpCodes(tView, lView, tIcu.update[activeCaseIndex], bindingsStartIndex, mask);
        }
      }
      /**
       * Apply OpCodes associated with switching a case on ICU.
       *
       * This involves tearing down existing case and than building up a new case.
       *
       * @param tView Current `TView`
       * @param tIcu Current `TIcu`
       * @param lView Current `LView`
       * @param value Value of the case to update to.
       */


      function applyIcuSwitchCase(tView, tIcu, lView, value) {
        // Rebuild a new case for this ICU
        var caseIndex = getCaseIndex(tIcu, value);
        var activeCaseIndex = getCurrentICUCaseIndex(tIcu, lView);

        if (activeCaseIndex !== caseIndex) {
          applyIcuSwitchCaseRemove(tView, tIcu, lView);
          lView[tIcu.currentCaseLViewIndex] = caseIndex === null ? null : ~caseIndex;

          if (caseIndex !== null) {
            // Add the nodes for the new case
            var anchorRNode = lView[tIcu.anchorIdx];

            if (anchorRNode) {
              ngDevMode && assertDomNode(anchorRNode);
              applyMutableOpCodes(tView, tIcu.create[caseIndex], lView, anchorRNode);
            }
          }
        }
      }
      /**
       * Apply OpCodes associated with tearing ICU case.
       *
       * This involves tearing down existing case and than building up a new case.
       *
       * @param tView Current `TView`
       * @param tIcu Current `TIcu`
       * @param lView Current `LView`
       */


      function applyIcuSwitchCaseRemove(tView, tIcu, lView) {
        var activeCaseIndex = getCurrentICUCaseIndex(tIcu, lView);

        if (activeCaseIndex !== null) {
          var removeCodes = tIcu.remove[activeCaseIndex];

          for (var i = 0; i < removeCodes.length; i++) {
            var nodeOrIcuIndex = removeCodes[i];

            if (nodeOrIcuIndex > 0) {
              // Positive numbers are `RNode`s.
              var rNode = getNativeByIndex(nodeOrIcuIndex, lView);
              rNode !== null && nativeRemoveNode(lView[RENDERER], rNode);
            } else {
              // Negative numbers are ICUs
              applyIcuSwitchCaseRemove(tView, getTIcu(tView, ~nodeOrIcuIndex), lView);
            }
          }
        }
      }
      /**
       * Returns the index of the current case of an ICU expression depending on the main binding value
       *
       * @param icuExpression
       * @param bindingValue The value of the main binding used by this ICU expression
       */


      function getCaseIndex(icuExpression, bindingValue) {
        var index = icuExpression.cases.indexOf(bindingValue);

        if (index === -1) {
          switch (icuExpression.type) {
            case 1
            /* plural */
            :
              {
                var resolvedCase = getPluralCase(bindingValue, getLocaleId());
                index = icuExpression.cases.indexOf(resolvedCase);

                if (index === -1 && resolvedCase !== 'other') {
                  index = icuExpression.cases.indexOf('other');
                }

                break;
              }

            case 0
            /* select */
            :
              {
                index = icuExpression.cases.indexOf('other');
                break;
              }
          }
        }

        return index === -1 ? null : index;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function loadIcuContainerVisitor() {
        var _stack = [];

        var _index = -1;

        var _lView;

        var _removes;
        /**
         * Retrieves a set of root nodes from `TIcu.remove`. Used by `TNodeType.ICUContainer`
         * to determine which root belong to the ICU.
         *
         * Example of usage.
         * ```
         * const nextRNode = icuContainerIteratorStart(tIcuContainerNode, lView);
         * let rNode: RNode|null;
         * while(rNode = nextRNode()) {
         *   console.log(rNode);
         * }
         * ```
         *
         * @param tIcuContainerNode Current `TIcuContainerNode`
         * @param lView `LView` where the `RNode`s should be looked up.
         */


        function icuContainerIteratorStart(tIcuContainerNode, lView) {
          _lView = lView;

          while (_stack.length) {
            _stack.pop();
          }

          ngDevMode && assertTNodeForLView(tIcuContainerNode, lView);
          enterIcu(tIcuContainerNode.value, lView);
          return icuContainerIteratorNext;
        }

        function enterIcu(tIcu, lView) {
          _index = 0;
          var currentCase = getCurrentICUCaseIndex(tIcu, lView);

          if (currentCase !== null) {
            ngDevMode && assertNumberInRange(currentCase, 0, tIcu.cases.length - 1);
            _removes = tIcu.remove[currentCase];
          } else {
            _removes = EMPTY_ARRAY;
          }
        }

        function icuContainerIteratorNext() {
          if (_index < _removes.length) {
            var removeOpCode = _removes[_index++];
            ngDevMode && assertNumber(removeOpCode, 'Expecting OpCode number');

            if (removeOpCode > 0) {
              var rNode = _lView[removeOpCode];
              ngDevMode && assertDomNode(rNode);
              return rNode;
            } else {
              _stack.push(_index, _removes); // ICUs are represented by negative indices


              var tIcuIndex = ~removeOpCode;
              var tIcu = _lView[TVIEW].data[tIcuIndex];
              ngDevMode && assertTIcu(tIcu);
              enterIcu(tIcu, _lView);
              return icuContainerIteratorNext();
            }
          } else {
            if (_stack.length === 0) {
              return null;
            } else {
              _removes = _stack.pop();
              _index = _stack.pop();
              return icuContainerIteratorNext();
            }
          }
        }

        return icuContainerIteratorStart;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Converts `I18nCreateOpCodes` array into a human readable format.
       *
       * This function is attached to the `I18nCreateOpCodes.debug` property if `ngDevMode` is enabled.
       * This function provides a human readable view of the opcodes. This is useful when debugging the
       * application as well as writing more readable tests.
       *
       * @param this `I18nCreateOpCodes` if attached as a method.
       * @param opcodes `I18nCreateOpCodes` if invoked as a function.
       */


      function i18nCreateOpCodesToString(opcodes) {
        var createOpCodes = opcodes || (Array.isArray(this) ? this : []);
        var lines = [];

        for (var i = 0; i < createOpCodes.length; i++) {
          var opCode = createOpCodes[i++];
          var text = createOpCodes[i];
          var isComment = (opCode & I18nCreateOpCode.COMMENT) === I18nCreateOpCode.COMMENT;
          var appendNow = (opCode & I18nCreateOpCode.APPEND_EAGERLY) === I18nCreateOpCode.APPEND_EAGERLY;
          var index = opCode >>> I18nCreateOpCode.SHIFT;
          lines.push("lView[".concat(index, "] = document.").concat(isComment ? 'createComment' : 'createText', "(").concat(JSON.stringify(text), ");"));

          if (appendNow) {
            lines.push("parent.appendChild(lView[".concat(index, "]);"));
          }
        }

        return lines;
      }
      /**
       * Converts `I18nUpdateOpCodes` array into a human readable format.
       *
       * This function is attached to the `I18nUpdateOpCodes.debug` property if `ngDevMode` is enabled.
       * This function provides a human readable view of the opcodes. This is useful when debugging the
       * application as well as writing more readable tests.
       *
       * @param this `I18nUpdateOpCodes` if attached as a method.
       * @param opcodes `I18nUpdateOpCodes` if invoked as a function.
       */


      function i18nUpdateOpCodesToString(opcodes) {
        var parser = new OpCodeParser(opcodes || (Array.isArray(this) ? this : []));
        var lines = [];

        function consumeOpCode(value) {
          var ref = value >>> 2
          /* SHIFT_REF */
          ;
          var opCode = value & 3
          /* MASK_OPCODE */
          ;

          switch (opCode) {
            case 0
            /* Text */
            :
              return "(lView[".concat(ref, "] as Text).textContent = $$$");

            case 1
            /* Attr */
            :
              var attrName = parser.consumeString();
              var sanitizationFn = parser.consumeFunction();

              var _value9 = sanitizationFn ? "(".concat(sanitizationFn, ")($$$)") : '$$$';

              return "(lView[".concat(ref, "] as Element).setAttribute('").concat(attrName, "', ").concat(_value9, ")");

            case 2
            /* IcuSwitch */
            :
              return "icuSwitchCase(".concat(ref, ", $$$)");

            case 3
            /* IcuUpdate */
            :
              return "icuUpdateCase(".concat(ref, ")");
          }

          throw new Error('unexpected OpCode');
        }

        while (parser.hasMore()) {
          var mask = parser.consumeNumber();
          var size = parser.consumeNumber();
          var end = parser.i + size;
          var statements = [];
          var statement = '';

          while (parser.i < end) {
            var value = parser.consumeNumberOrString();

            if (typeof value === 'string') {
              statement += value;
            } else if (value < 0) {
              // Negative numbers are ref indexes
              // Here `i` refers to current binding index. It is to signify that the value is relative,
              // rather than absolute.
              statement += '${lView[i' + value + ']}';
            } else {
              // Positive numbers are operations.
              var opCodeText = consumeOpCode(value);
              statements.push(opCodeText.replace('$$$', '`' + statement + '`') + ';');
              statement = '';
            }
          }

          lines.push("if (mask & 0b".concat(mask.toString(2), ") { ").concat(statements.join(' '), " }"));
        }

        return lines;
      }
      /**
       * Converts `I18nCreateOpCodes` array into a human readable format.
       *
       * This function is attached to the `I18nCreateOpCodes.debug` if `ngDevMode` is enabled. This
       * function provides a human readable view of the opcodes. This is useful when debugging the
       * application as well as writing more readable tests.
       *
       * @param this `I18nCreateOpCodes` if attached as a method.
       * @param opcodes `I18nCreateOpCodes` if invoked as a function.
       */


      function icuCreateOpCodesToString(opcodes) {
        var parser = new OpCodeParser(opcodes || (Array.isArray(this) ? this : []));
        var lines = [];

        function consumeOpCode(opCode) {
          var parent = getParentFromIcuCreateOpCode(opCode);
          var ref = getRefFromIcuCreateOpCode(opCode);

          switch (getInstructionFromIcuCreateOpCode(opCode)) {
            case 0
            /* AppendChild */
            :
              return "(lView[".concat(parent, "] as Element).appendChild(lView[").concat(lastRef, "])");

            case 1
            /* Attr */
            :
              return "(lView[".concat(ref, "] as Element).setAttribute(\"").concat(parser.consumeString(), "\", \"").concat(parser.consumeString(), "\")");
          }

          throw new Error('Unexpected OpCode: ' + getInstructionFromIcuCreateOpCode(opCode));
        }

        var lastRef = -1;

        while (parser.hasMore()) {
          var value = parser.consumeNumberStringOrMarker();

          if (value === ICU_MARKER) {
            var text = parser.consumeString();
            lastRef = parser.consumeNumber();
            lines.push("lView[".concat(lastRef, "] = document.createComment(\"").concat(text, "\")"));
          } else if (value === ELEMENT_MARKER) {
            var _text2 = parser.consumeString();

            lastRef = parser.consumeNumber();
            lines.push("lView[".concat(lastRef, "] = document.createElement(\"").concat(_text2, "\")"));
          } else if (typeof value === 'string') {
            lastRef = parser.consumeNumber();
            lines.push("lView[".concat(lastRef, "] = document.createTextNode(\"").concat(value, "\")"));
          } else if (typeof value === 'number') {
            var line = consumeOpCode(value);
            line && lines.push(line);
          } else {
            throw new Error('Unexpected value');
          }
        }

        return lines;
      }
      /**
       * Converts `I18nRemoveOpCodes` array into a human readable format.
       *
       * This function is attached to the `I18nRemoveOpCodes.debug` if `ngDevMode` is enabled. This
       * function provides a human readable view of the opcodes. This is useful when debugging the
       * application as well as writing more readable tests.
       *
       * @param this `I18nRemoveOpCodes` if attached as a method.
       * @param opcodes `I18nRemoveOpCodes` if invoked as a function.
       */


      function i18nRemoveOpCodesToString(opcodes) {
        var removeCodes = opcodes || (Array.isArray(this) ? this : []);
        var lines = [];

        for (var i = 0; i < removeCodes.length; i++) {
          var nodeOrIcuIndex = removeCodes[i];

          if (nodeOrIcuIndex > 0) {
            // Positive numbers are `RNode`s.
            lines.push("remove(lView[".concat(nodeOrIcuIndex, "])"));
          } else {
            // Negative numbers are ICUs
            lines.push("removeNestedICU(".concat(~nodeOrIcuIndex, ")"));
          }
        }

        return lines;
      }

      var OpCodeParser = /*#__PURE__*/function () {
        function OpCodeParser(codes) {
          _classCallCheck2(this, OpCodeParser);

          this.i = 0;
          this.codes = codes;
        }

        _createClass2(OpCodeParser, [{
          key: "hasMore",
          value: function hasMore() {
            return this.i < this.codes.length;
          }
        }, {
          key: "consumeNumber",
          value: function consumeNumber() {
            var value = this.codes[this.i++];
            assertNumber(value, 'expecting number in OpCode');
            return value;
          }
        }, {
          key: "consumeString",
          value: function consumeString() {
            var value = this.codes[this.i++];
            assertString(value, 'expecting string in OpCode');
            return value;
          }
        }, {
          key: "consumeFunction",
          value: function consumeFunction() {
            var value = this.codes[this.i++];

            if (value === null || typeof value === 'function') {
              return value;
            }

            throw new Error('expecting function in OpCode');
          }
        }, {
          key: "consumeNumberOrString",
          value: function consumeNumberOrString() {
            var value = this.codes[this.i++];

            if (typeof value === 'string') {
              return value;
            }

            assertNumber(value, 'expecting number or string in OpCode');
            return value;
          }
        }, {
          key: "consumeNumberStringOrMarker",
          value: function consumeNumberStringOrMarker() {
            var value = this.codes[this.i++];

            if (typeof value === 'string' || typeof value === 'number' || value == ICU_MARKER || value == ELEMENT_MARKER) {
              return value;
            }

            assertNumber(value, 'expecting number, string, ICU_MARKER or ELEMENT_MARKER in OpCode');
            return value;
          }
        }]);

        return OpCodeParser;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var BINDING_REGEXP = /�(\d+):?\d*�/gi;
      var ICU_REGEXP = /({\s*�\d+:?\d*�\s*,\s*\S{6}\s*,[\s\S]*})/gi;
      var NESTED_ICU = /�(\d+)�/;
      var ICU_BLOCK_REGEXP = /^\s*(�\d+:?\d*�)\s*,\s*(select|plural)\s*,/;
      var MARKER = "\uFFFD";
      var SUBTEMPLATE_REGEXP = /�\/?\*(\d+:\d+)�/gi;
      var PH_REGEXP = /�(\/?[#*]\d+):?\d*�/gi;
      /**
       * Angular Dart introduced &ngsp; as a placeholder for non-removable space, see:
       * https://github.com/dart-lang/angular/blob/0bb611387d29d65b5af7f9d2515ab571fd3fbee4/_tests/test/compiler/preserve_whitespace_test.dart#L25-L32
       * In Angular Dart &ngsp; is converted to the 0xE500 PUA (Private Use Areas) unicode character
       * and later on replaced by a space. We are re-implementing the same idea here, since translations
       * might contain this special character.
       */

      var NGSP_UNICODE_REGEXP = /\uE500/g;

      function replaceNgsp(value) {
        return value.replace(NGSP_UNICODE_REGEXP, ' ');
      }
      /**
       * Create dynamic nodes from i18n translation block.
       *
       * - Text nodes are created synchronously
       * - TNodes are linked into tree lazily
       *
       * @param tView Current `TView`
       * @parentTNodeIndex index to the parent TNode of this i18n block
       * @param lView Current `LView`
       * @param index Index of `ɵɵi18nStart` instruction.
       * @param message Message to translate.
       * @param subTemplateIndex Index into the sub template of message translation. (ie in case of
       *     `ngIf`) (-1 otherwise)
       */


      function i18nStartFirstCreatePass(tView, parentTNodeIndex, lView, index, message, subTemplateIndex) {
        var rootTNode = getCurrentParentTNode();
        var createOpCodes = [];
        var updateOpCodes = [];
        var existingTNodeStack = [[]];

        if (ngDevMode) {
          attachDebugGetter(createOpCodes, i18nCreateOpCodesToString);
          attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);
        }

        message = getTranslationForTemplate(message, subTemplateIndex);
        var msgParts = replaceNgsp(message).split(PH_REGEXP);

        for (var i = 0; i < msgParts.length; i++) {
          var value = msgParts[i];

          if ((i & 1) === 0) {
            // Even indexes are text (including bindings & ICU expressions)
            var parts = i18nParseTextIntoPartsAndICU(value);

            for (var j = 0; j < parts.length; j++) {
              var part = parts[j];

              if ((j & 1) === 0) {
                // `j` is odd therefore `part` is string
                var text = part;
                ngDevMode && assertString(text, 'Parsed ICU part should be string');

                if (text !== '') {
                  i18nStartFirstCreatePassProcessTextNode(tView, rootTNode, existingTNodeStack[0], createOpCodes, updateOpCodes, lView, text);
                }
              } else {
                // `j` is Even therefor `part` is an `ICUExpression`
                var icuExpression = part; // Verify that ICU expression has the right shape. Translations might contain invalid
                // constructions (while original messages were correct), so ICU parsing at runtime may
                // not succeed (thus `icuExpression` remains a string).
                // Note: we intentionally retain the error here by not using `ngDevMode`, because
                // the value can change based on the locale and users aren't guaranteed to hit
                // an invalid string while they're developing.

                if (typeof icuExpression !== 'object') {
                  throw new Error("Unable to parse ICU expression in \"".concat(message, "\" message."));
                }

                var icuContainerTNode = createTNodeAndAddOpCode(tView, rootTNode, existingTNodeStack[0], lView, createOpCodes, ngDevMode ? "ICU ".concat(index, ":").concat(icuExpression.mainBinding) : '', true);
                var icuNodeIndex = icuContainerTNode.index;
                ngDevMode && assertGreaterThanOrEqual(icuNodeIndex, HEADER_OFFSET, 'Index must be in absolute LView offset');
                icuStart(tView, lView, updateOpCodes, parentTNodeIndex, icuExpression, icuNodeIndex);
              }
            }
          } else {
            // Odd indexes are placeholders (elements and sub-templates)
            // At this point value is something like: '/#1:2' (originally coming from '�/#1:2�')
            var isClosing = value.charCodeAt(0) === 47
            /* SLASH */
            ;
            var type = value.charCodeAt(isClosing ? 1 : 0);
            ngDevMode && assertOneOf(type, 42
            /* STAR */
            , 35
            /* HASH */
            );

            var _index3 = HEADER_OFFSET + Number.parseInt(value.substring(isClosing ? 2 : 1));

            if (isClosing) {
              existingTNodeStack.shift();
              setCurrentTNode(getCurrentParentTNode(), false);
            } else {
              var tNode = createTNodePlaceholder(tView, existingTNodeStack[0], _index3);
              existingTNodeStack.unshift([]);
              setCurrentTNode(tNode, true);
            }
          }
        }

        tView.data[index] = {
          create: createOpCodes,
          update: updateOpCodes
        };
      }
      /**
       * Allocate space in i18n Range add create OpCode instruction to crete a text or comment node.
       *
       * @param tView Current `TView` needed to allocate space in i18n range.
       * @param rootTNode Root `TNode` of the i18n block. This node determines if the new TNode will be
       *     added as part of the `i18nStart` instruction or as part of the `TNode.insertBeforeIndex`.
       * @param existingTNodes internal state for `addTNodeAndUpdateInsertBeforeIndex`.
       * @param lView Current `LView` needed to allocate space in i18n range.
       * @param createOpCodes Array storing `I18nCreateOpCodes` where new opCodes will be added.
       * @param text Text to be added when the `Text` or `Comment` node will be created.
       * @param isICU true if a `Comment` node for ICU (instead of `Text`) node should be created.
       */


      function createTNodeAndAddOpCode(tView, rootTNode, existingTNodes, lView, createOpCodes, text, isICU) {
        var i18nNodeIdx = allocExpando(tView, lView, 1, null);
        var opCode = i18nNodeIdx << I18nCreateOpCode.SHIFT;
        var parentTNode = getCurrentParentTNode();

        if (rootTNode === parentTNode) {
          // FIXME(misko): A null `parentTNode` should represent when we fall of the `LView` boundary.
          // (there is no parent), but in some circumstances (because we are inconsistent about how we set
          // `previousOrParentTNode`) it could point to `rootTNode` So this is a work around.
          parentTNode = null;
        }

        if (parentTNode === null) {
          // If we don't have a parent that means that we can eagerly add nodes.
          // If we have a parent than these nodes can't be added now (as the parent has not been created
          // yet) and instead the `parentTNode` is responsible for adding it. See
          // `TNode.insertBeforeIndex`
          opCode |= I18nCreateOpCode.APPEND_EAGERLY;
        }

        if (isICU) {
          opCode |= I18nCreateOpCode.COMMENT;
          ensureIcuContainerVisitorLoaded(loadIcuContainerVisitor);
        }

        createOpCodes.push(opCode, text === null ? '' : text); // We store `{{?}}` so that when looking at debug `TNodeType.template` we can see where the
        // bindings are.

        var tNode = createTNodeAtIndex(tView, i18nNodeIdx, isICU ? 32
        /* Icu */
        : 1
        /* Text */
        , text === null ? ngDevMode ? '{{?}}' : '' : text, null);
        addTNodeAndUpdateInsertBeforeIndex(existingTNodes, tNode);
        var tNodeIdx = tNode.index;
        setCurrentTNode(tNode, false
        /* Text nodes are self closing */
        );

        if (parentTNode !== null && rootTNode !== parentTNode) {
          // We are a child of deeper node (rather than a direct child of `i18nStart` instruction.)
          // We have to make sure to add ourselves to the parent.
          setTNodeInsertBeforeIndex(parentTNode, tNodeIdx);
        }

        return tNode;
      }
      /**
       * Processes text node in i18n block.
       *
       * Text nodes can have:
       * - Create instruction in `createOpCodes` for creating the text node.
       * - Allocate spec for text node in i18n range of `LView`
       * - If contains binding:
       *    - bindings => allocate space in i18n range of `LView` to store the binding value.
       *    - populate `updateOpCodes` with update instructions.
       *
       * @param tView Current `TView`
       * @param rootTNode Root `TNode` of the i18n block. This node determines if the new TNode will
       *     be added as part of the `i18nStart` instruction or as part of the
       *     `TNode.insertBeforeIndex`.
       * @param existingTNodes internal state for `addTNodeAndUpdateInsertBeforeIndex`.
       * @param createOpCodes Location where the creation OpCodes will be stored.
       * @param lView Current `LView`
       * @param text The translated text (which may contain binding)
       */


      function i18nStartFirstCreatePassProcessTextNode(tView, rootTNode, existingTNodes, createOpCodes, updateOpCodes, lView, text) {
        var hasBinding = text.match(BINDING_REGEXP);
        var tNode = createTNodeAndAddOpCode(tView, rootTNode, existingTNodes, lView, createOpCodes, hasBinding ? null : text, false);

        if (hasBinding) {
          generateBindingUpdateOpCodes(updateOpCodes, text, tNode.index);
        }
      }
      /**
       * See `i18nAttributes` above.
       */


      function i18nAttributesFirstPass(tView, index, values) {
        var previousElement = getCurrentTNode();
        var previousElementIndex = previousElement.index;
        var updateOpCodes = [];

        if (ngDevMode) {
          attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);
        }

        if (tView.firstCreatePass && tView.data[index] === null) {
          for (var i = 0; i < values.length; i += 2) {
            var attrName = values[i];
            var message = values[i + 1];

            if (message !== '') {
              // Check if attribute value contains an ICU and throw an error if that's the case.
              // ICUs in element attributes are not supported.
              // Note: we intentionally retain the error here by not using `ngDevMode`, because
              // the `value` can change based on the locale and users aren't guaranteed to hit
              // an invalid string while they're developing.
              if (ICU_REGEXP.test(message)) {
                throw new Error("ICU expressions are not supported in attributes. Message: \"".concat(message, "\"."));
              } // i18n attributes that hit this code path are guaranteed to have bindings, because
              // the compiler treats static i18n attributes as regular attribute bindings.


              generateBindingUpdateOpCodes(updateOpCodes, message, previousElementIndex, attrName);
            }
          }

          tView.data[index] = updateOpCodes;
        }
      }
      /**
       * Generate the OpCodes to update the bindings of a string.
       *
       * @param updateOpCodes Place where the update opcodes will be stored.
       * @param str The string containing the bindings.
       * @param destinationNode Index of the destination node which will receive the binding.
       * @param attrName Name of the attribute, if the string belongs to an attribute.
       * @param sanitizeFn Sanitization function used to sanitize the string after update, if necessary.
       */


      function generateBindingUpdateOpCodes(updateOpCodes, str, destinationNode, attrName) {
        var sanitizeFn = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
        ngDevMode && assertGreaterThanOrEqual(destinationNode, HEADER_OFFSET, 'Index must be in absolute LView offset');
        var maskIndex = updateOpCodes.length; // Location of mask

        var sizeIndex = maskIndex + 1; // location of size for skipping

        updateOpCodes.push(null, null); // Alloc space for mask and size

        var startIndex = maskIndex + 2; // location of first allocation.

        if (ngDevMode) {
          attachDebugGetter(updateOpCodes, i18nUpdateOpCodesToString);
        }

        var textParts = str.split(BINDING_REGEXP);
        var mask = 0;

        for (var j = 0; j < textParts.length; j++) {
          var textValue = textParts[j];

          if (j & 1) {
            // Odd indexes are bindings
            var bindingIndex = parseInt(textValue, 10);
            updateOpCodes.push(-1 - bindingIndex);
            mask = mask | toMaskBit(bindingIndex);
          } else if (textValue !== '') {
            // Even indexes are text
            updateOpCodes.push(textValue);
          }
        }

        updateOpCodes.push(destinationNode << 2
        /* SHIFT_REF */
        | (attrName ? 1
        /* Attr */
        : 0
        /* Text */
        ));

        if (attrName) {
          updateOpCodes.push(attrName, sanitizeFn);
        }

        updateOpCodes[maskIndex] = mask;
        updateOpCodes[sizeIndex] = updateOpCodes.length - startIndex;
        return mask;
      }
      /**
       * Convert binding index to mask bit.
       *
       * Each index represents a single bit on the bit-mask. Because bit-mask only has 32 bits, we make
       * the 32nd bit share all masks for all bindings higher than 32. Since it is extremely rare to
       * have more than 32 bindings this will be hit very rarely. The downside of hitting this corner
       * case is that we will execute binding code more often than necessary. (penalty of performance)
       */


      function toMaskBit(bindingIndex) {
        return 1 << Math.min(bindingIndex, 31);
      }

      function isRootTemplateMessage(subTemplateIndex) {
        return subTemplateIndex === -1;
      }
      /**
       * Removes everything inside the sub-templates of a message.
       */


      function removeInnerTemplateTranslation(message) {
        var match;
        var res = '';
        var index = 0;
        var inTemplate = false;
        var tagMatched;

        while ((match = SUBTEMPLATE_REGEXP.exec(message)) !== null) {
          if (!inTemplate) {
            res += message.substring(index, match.index + match[0].length);
            tagMatched = match[1];
            inTemplate = true;
          } else {
            if (match[0] === "".concat(MARKER, "/*").concat(tagMatched).concat(MARKER)) {
              index = match.index;
              inTemplate = false;
            }
          }
        }

        ngDevMode && assertEqual(inTemplate, false, "Tag mismatch: unable to find the end of the sub-template in the translation \"".concat(message, "\""));
        res += message.substr(index);
        return res;
      }
      /**
       * Extracts a part of a message and removes the rest.
       *
       * This method is used for extracting a part of the message associated with a template. A
       * translated message can span multiple templates.
       *
       * Example:
       * ```
       * <div i18n>Translate <span *ngIf>me</span>!</div>
       * ```
       *
       * @param message The message to crop
       * @param subTemplateIndex Index of the sub-template to extract. If undefined it returns the
       * external template and removes all sub-templates.
       */


      function getTranslationForTemplate(message, subTemplateIndex) {
        if (isRootTemplateMessage(subTemplateIndex)) {
          // We want the root template message, ignore all sub-templates
          return removeInnerTemplateTranslation(message);
        } else {
          // We want a specific sub-template
          var _start10 = message.indexOf(":".concat(subTemplateIndex).concat(MARKER)) + 2 + subTemplateIndex.toString().length;

          var end = message.search(new RegExp("".concat(MARKER, "\\/\\*\\d+:").concat(subTemplateIndex).concat(MARKER)));
          return removeInnerTemplateTranslation(message.substring(_start10, end));
        }
      }
      /**
       * Generate the OpCodes for ICU expressions.
       *
       * @param icuExpression
       * @param index Index where the anchor is stored and an optional `TIcuContainerNode`
       *   - `lView[anchorIdx]` points to a `Comment` node representing the anchor for the ICU.
       *   - `tView.data[anchorIdx]` points to the `TIcuContainerNode` if ICU is root (`null` otherwise)
       */


      function icuStart(tView, lView, updateOpCodes, parentIdx, icuExpression, anchorIdx) {
        ngDevMode && assertDefined(icuExpression, 'ICU expression must be defined');
        var bindingMask = 0;
        var tIcu = {
          type: icuExpression.type,
          currentCaseLViewIndex: allocExpando(tView, lView, 1, null),
          anchorIdx: anchorIdx,
          cases: [],
          create: [],
          remove: [],
          update: []
        };
        addUpdateIcuSwitch(updateOpCodes, icuExpression, anchorIdx);
        setTIcu(tView, anchorIdx, tIcu);
        var values = icuExpression.values;

        for (var i = 0; i < values.length; i++) {
          // Each value is an array of strings & other ICU expressions
          var valueArr = values[i];
          var nestedIcus = [];

          for (var j = 0; j < valueArr.length; j++) {
            var value = valueArr[j];

            if (typeof value !== 'string') {
              // It is an nested ICU expression
              var icuIndex = nestedIcus.push(value) - 1; // Replace nested ICU expression by a comment node

              valueArr[j] = "<!--\uFFFD".concat(icuIndex, "\uFFFD-->");
            }
          }

          bindingMask = parseIcuCase(tView, tIcu, lView, updateOpCodes, parentIdx, icuExpression.cases[i], valueArr.join(''), nestedIcus) | bindingMask;
        }

        if (bindingMask) {
          addUpdateIcuUpdate(updateOpCodes, bindingMask, anchorIdx);
        }
      }
      /**
       * Parses text containing an ICU expression and produces a JSON object for it.
       * Original code from closure library, modified for Angular.
       *
       * @param pattern Text containing an ICU expression that needs to be parsed.
       *
       */


      function parseICUBlock(pattern) {
        var cases = [];
        var values = [];
        var icuType = 1
        /* plural */
        ;
        var mainBinding = 0;
        pattern = pattern.replace(ICU_BLOCK_REGEXP, function (str, binding, type) {
          if (type === 'select') {
            icuType = 0
            /* select */
            ;
          } else {
            icuType = 1
            /* plural */
            ;
          }

          mainBinding = parseInt(binding.substr(1), 10);
          return '';
        });
        var parts = i18nParseTextIntoPartsAndICU(pattern); // Looking for (key block)+ sequence. One of the keys has to be "other".

        for (var pos = 0; pos < parts.length;) {
          var key = parts[pos++].trim();

          if (icuType === 1
          /* plural */
          ) {
              // Key can be "=x", we just want "x"
              key = key.replace(/\s*(?:=)?(\w+)\s*/, '$1');
            }

          if (key.length) {
            cases.push(key);
          }

          var blocks = i18nParseTextIntoPartsAndICU(parts[pos++]);

          if (cases.length > values.length) {
            values.push(blocks);
          }
        } // TODO(ocombe): support ICU expressions in attributes, see #21615


        return {
          type: icuType,
          mainBinding: mainBinding,
          cases: cases,
          values: values
        };
      }
      /**
       * Breaks pattern into strings and top level {...} blocks.
       * Can be used to break a message into text and ICU expressions, or to break an ICU expression
       * into keys and cases. Original code from closure library, modified for Angular.
       *
       * @param pattern (sub)Pattern to be broken.
       * @returns An `Array<string|IcuExpression>` where:
       *   - odd positions: `string` => text between ICU expressions
       *   - even positions: `ICUExpression` => ICU expression parsed into `ICUExpression` record.
       */


      function i18nParseTextIntoPartsAndICU(pattern) {
        if (!pattern) {
          return [];
        }

        var prevPos = 0;
        var braceStack = [];
        var results = [];
        var braces = /[{}]/g; // lastIndex doesn't get set to 0 so we have to.

        braces.lastIndex = 0;
        var match;

        while (match = braces.exec(pattern)) {
          var pos = match.index;

          if (match[0] == '}') {
            braceStack.pop();

            if (braceStack.length == 0) {
              // End of the block.
              var block = pattern.substring(prevPos, pos);

              if (ICU_BLOCK_REGEXP.test(block)) {
                results.push(parseICUBlock(block));
              } else {
                results.push(block);
              }

              prevPos = pos + 1;
            }
          } else {
            if (braceStack.length == 0) {
              var _substring = pattern.substring(prevPos, pos);

              results.push(_substring);
              prevPos = pos + 1;
            }

            braceStack.push('{');
          }
        }

        var substring = pattern.substring(prevPos);
        results.push(substring);
        return results;
      }
      /**
       * Parses a node, its children and its siblings, and generates the mutate & update OpCodes.
       *
       */


      function parseIcuCase(tView, tIcu, lView, updateOpCodes, parentIdx, caseName, unsafeCaseHtml, nestedIcus) {
        var create = [];
        var remove = [];
        var update = [];

        if (ngDevMode) {
          attachDebugGetter(create, icuCreateOpCodesToString);
          attachDebugGetter(remove, i18nRemoveOpCodesToString);
          attachDebugGetter(update, i18nUpdateOpCodesToString);
        }

        tIcu.cases.push(caseName);
        tIcu.create.push(create);
        tIcu.remove.push(remove);
        tIcu.update.push(update);
        var inertBodyHelper = getInertBodyHelper(getDocument());
        var inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeCaseHtml);
        ngDevMode && assertDefined(inertBodyElement, 'Unable to generate inert body element');
        var inertRootNode = getTemplateContent(inertBodyElement) || inertBodyElement;

        if (inertRootNode) {
          return walkIcuTree(tView, tIcu, lView, updateOpCodes, create, remove, update, inertRootNode, parentIdx, nestedIcus, 0);
        } else {
          return 0;
        }
      }

      function walkIcuTree(tView, tIcu, lView, sharedUpdateOpCodes, create, remove, update, parentNode, parentIdx, nestedIcus, depth) {
        var bindingMask = 0;
        var currentNode = parentNode.firstChild;

        while (currentNode) {
          var newIndex = allocExpando(tView, lView, 1, null);

          switch (currentNode.nodeType) {
            case Node.ELEMENT_NODE:
              var element = currentNode;
              var tagName = element.tagName.toLowerCase();

              if (VALID_ELEMENTS.hasOwnProperty(tagName)) {
                addCreateNodeAndAppend(create, ELEMENT_MARKER, tagName, parentIdx, newIndex);
                tView.data[newIndex] = tagName;
                var elAttrs = element.attributes;

                for (var i = 0; i < elAttrs.length; i++) {
                  var attr = elAttrs.item(i);
                  var lowerAttrName = attr.name.toLowerCase();

                  var _hasBinding = !!attr.value.match(BINDING_REGEXP); // we assume the input string is safe, unless it's using a binding


                  if (_hasBinding) {
                    if (VALID_ATTRS.hasOwnProperty(lowerAttrName)) {
                      if (URI_ATTRS[lowerAttrName]) {
                        generateBindingUpdateOpCodes(update, attr.value, newIndex, attr.name, _sanitizeUrl);
                      } else if (SRCSET_ATTRS[lowerAttrName]) {
                        generateBindingUpdateOpCodes(update, attr.value, newIndex, attr.name, sanitizeSrcset);
                      } else {
                        generateBindingUpdateOpCodes(update, attr.value, newIndex, attr.name);
                      }
                    } else {
                      ngDevMode && console.warn("WARNING: ignoring unsafe attribute value " + "".concat(lowerAttrName, " on element ").concat(tagName, " ") + "(see https://g.co/ng/security#xss)");
                    }
                  } else {
                    addCreateAttribute(create, newIndex, attr);
                  }
                } // Parse the children of this node (if any)


                bindingMask = walkIcuTree(tView, tIcu, lView, sharedUpdateOpCodes, create, remove, update, currentNode, newIndex, nestedIcus, depth + 1) | bindingMask;
                addRemoveNode(remove, newIndex, depth);
              }

              break;

            case Node.TEXT_NODE:
              var value = currentNode.textContent || '';
              var hasBinding = value.match(BINDING_REGEXP);
              addCreateNodeAndAppend(create, null, hasBinding ? '' : value, parentIdx, newIndex);
              addRemoveNode(remove, newIndex, depth);

              if (hasBinding) {
                bindingMask = generateBindingUpdateOpCodes(update, value, newIndex) | bindingMask;
              }

              break;

            case Node.COMMENT_NODE:
              // Check if the comment node is a placeholder for a nested ICU
              var isNestedIcu = NESTED_ICU.exec(currentNode.textContent || '');

              if (isNestedIcu) {
                var nestedIcuIndex = parseInt(isNestedIcu[1], 10);
                var icuExpression = nestedIcus[nestedIcuIndex]; // Create the comment node that will anchor the ICU expression

                addCreateNodeAndAppend(create, ICU_MARKER, ngDevMode ? "nested ICU ".concat(nestedIcuIndex) : '', parentIdx, newIndex);
                icuStart(tView, lView, sharedUpdateOpCodes, parentIdx, icuExpression, newIndex);
                addRemoveNestedIcu(remove, newIndex, depth);
              }

              break;
          }

          currentNode = currentNode.nextSibling;
        }

        return bindingMask;
      }

      function addRemoveNode(remove, index, depth) {
        if (depth === 0) {
          remove.push(index);
        }
      }

      function addRemoveNestedIcu(remove, index, depth) {
        if (depth === 0) {
          remove.push(~index); // remove ICU at `index`

          remove.push(index); // remove ICU comment at `index`
        }
      }

      function addUpdateIcuSwitch(update, icuExpression, index) {
        update.push(toMaskBit(icuExpression.mainBinding), 2, -1 - icuExpression.mainBinding, index << 2
        /* SHIFT_REF */
        | 2
        /* IcuSwitch */
        );
      }

      function addUpdateIcuUpdate(update, bindingMask, index) {
        update.push(bindingMask, 1, index << 2
        /* SHIFT_REF */
        | 3
        /* IcuUpdate */
        );
      }

      function addCreateNodeAndAppend(create, marker, text, appendToParentIdx, createAtIdx) {
        if (marker !== null) {
          create.push(marker);
        }

        create.push(text, createAtIdx, icuCreateOpCode(0
        /* AppendChild */
        , appendToParentIdx, createAtIdx));
      }

      function addCreateAttribute(create, newIndex, attr) {
        create.push(newIndex << 1
        /* SHIFT_REF */
        | 1
        /* Attr */
        , attr.name, attr.value);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // i18nPostprocess consts


      var ROOT_TEMPLATE_ID = 0;
      var PP_MULTI_VALUE_PLACEHOLDERS_REGEXP = /\[(�.+?�?)\]/;
      var PP_PLACEHOLDERS_REGEXP = /\[(�.+?�?)\]|(�\/?\*\d+:\d+�)/g;
      var PP_ICU_VARS_REGEXP = /({\s*)(VAR_(PLURAL|SELECT)(_\d+)?)(\s*,)/g;
      var PP_ICU_PLACEHOLDERS_REGEXP = /{([A-Z0-9_]+)}/g;
      var PP_ICUS_REGEXP = /�I18N_EXP_(ICU(_\d+)?)�/g;
      var PP_CLOSE_TEMPLATE_REGEXP = /\/\*/;
      var PP_TEMPLATE_ID_REGEXP = /\d+\:(\d+)/;
      /**
       * Handles message string post-processing for internationalization.
       *
       * Handles message string post-processing by transforming it from intermediate
       * format (that might contain some markers that we need to replace) to the final
       * form, consumable by i18nStart instruction. Post processing steps include:
       *
       * 1. Resolve all multi-value cases (like [�*1:1��#2:1�|�#4:1�|�5�])
       * 2. Replace all ICU vars (like "VAR_PLURAL")
       * 3. Replace all placeholders used inside ICUs in a form of {PLACEHOLDER}
       * 4. Replace all ICU references with corresponding values (like �ICU_EXP_ICU_1�)
       *    in case multiple ICUs have the same placeholder name
       *
       * @param message Raw translation string for post processing
       * @param replacements Set of replacements that should be applied
       *
       * @returns Transformed string that can be consumed by i18nStart instruction
       *
       * @codeGenApi
       */

      function i18nPostprocess(message) {
        var replacements = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};

        /**
         * Step 1: resolve all multi-value placeholders like [�#5�|�*1:1��#2:1�|�#4:1�]
         *
         * Note: due to the way we process nested templates (BFS), multi-value placeholders are typically
         * grouped by templates, for example: [�#5�|�#6�|�#1:1�|�#3:2�] where �#5� and �#6� belong to root
         * template, �#1:1� belong to nested template with index 1 and �#1:2� - nested template with index
         * 3. However in real templates the order might be different: i.e. �#1:1� and/or �#3:2� may go in
         * front of �#6�. The post processing step restores the right order by keeping track of the
         * template id stack and looks for placeholders that belong to the currently active template.
         */
        var result = message;

        if (PP_MULTI_VALUE_PLACEHOLDERS_REGEXP.test(message)) {
          var matches = {};
          var templateIdsStack = [ROOT_TEMPLATE_ID];
          result = result.replace(PP_PLACEHOLDERS_REGEXP, function (m, phs, tmpl) {
            var content = phs || tmpl;
            var placeholders = matches[content] || [];

            if (!placeholders.length) {
              content.split('|').forEach(function (placeholder) {
                var match = placeholder.match(PP_TEMPLATE_ID_REGEXP);
                var templateId = match ? parseInt(match[1], 10) : ROOT_TEMPLATE_ID;
                var isCloseTemplateTag = PP_CLOSE_TEMPLATE_REGEXP.test(placeholder);
                placeholders.push([templateId, isCloseTemplateTag, placeholder]);
              });
              matches[content] = placeholders;
            }

            if (!placeholders.length) {
              throw new Error("i18n postprocess: unmatched placeholder - ".concat(content));
            }

            var currentTemplateId = templateIdsStack[templateIdsStack.length - 1];
            var idx = 0; // find placeholder index that matches current template id

            for (var i = 0; i < placeholders.length; i++) {
              if (placeholders[i][0] === currentTemplateId) {
                idx = i;
                break;
              }
            } // update template id stack based on the current tag extracted


            var _placeholders$idx = _slicedToArray(placeholders[idx], 3),
                templateId = _placeholders$idx[0],
                isCloseTemplateTag = _placeholders$idx[1],
                placeholder = _placeholders$idx[2];

            if (isCloseTemplateTag) {
              templateIdsStack.pop();
            } else if (currentTemplateId !== templateId) {
              templateIdsStack.push(templateId);
            } // remove processed tag from the list


            placeholders.splice(idx, 1);
            return placeholder;
          });
        } // return current result if no replacements specified


        if (!Object.keys(replacements).length) {
          return result;
        }
        /**
         * Step 2: replace all ICU vars (like "VAR_PLURAL")
         */


        result = result.replace(PP_ICU_VARS_REGEXP, function (match, start, key, _type, _idx, end) {
          return replacements.hasOwnProperty(key) ? "".concat(start).concat(replacements[key]).concat(end) : match;
        });
        /**
         * Step 3: replace all placeholders used inside ICUs in a form of {PLACEHOLDER}
         */

        result = result.replace(PP_ICU_PLACEHOLDERS_REGEXP, function (match, key) {
          return replacements.hasOwnProperty(key) ? replacements[key] : match;
        });
        /**
         * Step 4: replace all ICU references with corresponding values (like �ICU_EXP_ICU_1�) in case
         * multiple ICUs have the same placeholder name
         */

        result = result.replace(PP_ICUS_REGEXP, function (match, key) {
          if (replacements.hasOwnProperty(key)) {
            var list = replacements[key];

            if (!list.length) {
              throw new Error("i18n postprocess: unmatched ICU - ".concat(match, " with key: ").concat(key));
            }

            return list.shift();
          }

          return match;
        });
        return result;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Marks a block of text as translatable.
       *
       * The instructions `i18nStart` and `i18nEnd` mark the translation block in the template.
       * The translation `message` is the value which is locale specific. The translation string may
       * contain placeholders which associate inner elements and sub-templates within the translation.
       *
       * The translation `message` placeholders are:
       * - `�{index}(:{block})�`: *Binding Placeholder*: Marks a location where an expression will be
       *   interpolated into. The placeholder `index` points to the expression binding index. An optional
       *   `block` that matches the sub-template in which it was declared.
       * - `�#{index}(:{block})�`/`�/#{index}(:{block})�`: *Element Placeholder*:  Marks the beginning
       *   and end of DOM element that were embedded in the original translation block. The placeholder
       *   `index` points to the element index in the template instructions set. An optional `block` that
       *   matches the sub-template in which it was declared.
       * - `�*{index}:{block}�`/`�/*{index}:{block}�`: *Sub-template Placeholder*: Sub-templates must be
       *   split up and translated separately in each angular template function. The `index` points to the
       *   `template` instruction index. A `block` that matches the sub-template in which it was declared.
       *
       * @param index A unique index of the translation in the static block.
       * @param messageIndex An index of the translation message from the `def.consts` array.
       * @param subTemplateIndex Optional sub-template index in the `message`.
       *
       * @codeGenApi
       */


      function ɵɵi18nStart(index, messageIndex) {
        var subTemplateIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1;
        var tView = getTView();
        var lView = getLView();
        var adjustedIndex = HEADER_OFFSET + index;
        ngDevMode && assertDefined(tView, "tView should be defined");
        var message = getConstant(tView.consts, messageIndex);
        var parentTNode = getCurrentParentTNode();

        if (tView.firstCreatePass) {
          i18nStartFirstCreatePass(tView, parentTNode === null ? 0 : parentTNode.index, lView, adjustedIndex, message, subTemplateIndex);
        }

        var tI18n = tView.data[adjustedIndex];
        var sameViewParentTNode = parentTNode === lView[T_HOST] ? null : parentTNode;
        var parentRNode = getClosestRElement(tView, sameViewParentTNode, lView); // If `parentTNode` is an `ElementContainer` than it has `<!--ng-container--->`.
        // When we do inserts we have to make sure to insert in front of `<!--ng-container--->`.

        var insertInFrontOf = parentTNode && parentTNode.type & 8
        /* ElementContainer */
        ? lView[parentTNode.index] : null;
        applyCreateOpCodes(lView, tI18n.create, parentRNode, insertInFrontOf);
        setInI18nBlock(true);
      }
      /**
       * Translates a translation block marked by `i18nStart` and `i18nEnd`. It inserts the text/ICU nodes
       * into the render tree, moves the placeholder nodes and removes the deleted nodes.
       *
       * @codeGenApi
       */


      function ɵɵi18nEnd() {
        setInI18nBlock(false);
      }
      /**
       *
       * Use this instruction to create a translation block that doesn't contain any placeholder.
       * It calls both {@link i18nStart} and {@link i18nEnd} in one instruction.
       *
       * The translation `message` is the value which is locale specific. The translation string may
       * contain placeholders which associate inner elements and sub-templates within the translation.
       *
       * The translation `message` placeholders are:
       * - `�{index}(:{block})�`: *Binding Placeholder*: Marks a location where an expression will be
       *   interpolated into. The placeholder `index` points to the expression binding index. An optional
       *   `block` that matches the sub-template in which it was declared.
       * - `�#{index}(:{block})�`/`�/#{index}(:{block})�`: *Element Placeholder*:  Marks the beginning
       *   and end of DOM element that were embedded in the original translation block. The placeholder
       *   `index` points to the element index in the template instructions set. An optional `block` that
       *   matches the sub-template in which it was declared.
       * - `�*{index}:{block}�`/`�/*{index}:{block}�`: *Sub-template Placeholder*: Sub-templates must be
       *   split up and translated separately in each angular template function. The `index` points to the
       *   `template` instruction index. A `block` that matches the sub-template in which it was declared.
       *
       * @param index A unique index of the translation in the static block.
       * @param messageIndex An index of the translation message from the `def.consts` array.
       * @param subTemplateIndex Optional sub-template index in the `message`.
       *
       * @codeGenApi
       */


      function ɵɵi18n(index, messageIndex, subTemplateIndex) {
        ɵɵi18nStart(index, messageIndex, subTemplateIndex);
        ɵɵi18nEnd();
      }
      /**
       * Marks a list of attributes as translatable.
       *
       * @param index A unique index in the static block
       * @param values
       *
       * @codeGenApi
       */


      function ɵɵi18nAttributes(index, attrsIndex) {
        var tView = getTView();
        ngDevMode && assertDefined(tView, "tView should be defined");
        var attrs = getConstant(tView.consts, attrsIndex);
        i18nAttributesFirstPass(tView, index + HEADER_OFFSET, attrs);
      }
      /**
       * Stores the values of the bindings during each update cycle in order to determine if we need to
       * update the translated nodes.
       *
       * @param value The binding's value
       * @returns This function returns itself so that it may be chained
       * (e.g. `i18nExp(ctx.name)(ctx.title)`)
       *
       * @codeGenApi
       */


      function ɵɵi18nExp(value) {
        var lView = getLView();
        setMaskBit(bindingUpdated(lView, nextBindingIndex(), value));
        return ɵɵi18nExp;
      }
      /**
       * Updates a translation block or an i18n attribute when the bindings have changed.
       *
       * @param index Index of either {@link i18nStart} (translation block) or {@link i18nAttributes}
       * (i18n attribute) on which it should update the content.
       *
       * @codeGenApi
       */


      function ɵɵi18nApply(index) {
        applyI18n(getTView(), getLView(), index + HEADER_OFFSET);
      }
      /**
       * Handles message string post-processing for internationalization.
       *
       * Handles message string post-processing by transforming it from intermediate
       * format (that might contain some markers that we need to replace) to the final
       * form, consumable by i18nStart instruction. Post processing steps include:
       *
       * 1. Resolve all multi-value cases (like [�*1:1��#2:1�|�#4:1�|�5�])
       * 2. Replace all ICU vars (like "VAR_PLURAL")
       * 3. Replace all placeholders used inside ICUs in a form of {PLACEHOLDER}
       * 4. Replace all ICU references with corresponding values (like �ICU_EXP_ICU_1�)
       *    in case multiple ICUs have the same placeholder name
       *
       * @param message Raw translation string for post processing
       * @param replacements Set of replacements that should be applied
       *
       * @returns Transformed string that can be consumed by i18nStart instruction
       *
       * @codeGenApi
       */


      function ɵɵi18nPostprocess(message) {
        var replacements = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
        return i18nPostprocess(message, replacements);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Resolves the providers which are defined in the DirectiveDef.
       *
       * When inserting the tokens and the factories in their respective arrays, we can assume that
       * this method is called first for the component (if any), and then for other directives on the same
       * node.
       * As a consequence,the providers are always processed in that order:
       * 1) The view providers of the component
       * 2) The providers of the component
       * 3) The providers of the other directives
       * This matches the structure of the injectables arrays of a view (for each node).
       * So the tokens and the factories can be pushed at the end of the arrays, except
       * in one case for multi providers.
       *
       * @param def the directive definition
       * @param providers: Array of `providers`.
       * @param viewProviders: Array of `viewProviders`.
       */


      function providersResolver(def, providers, viewProviders) {
        var tView = getTView();

        if (tView.firstCreatePass) {
          var isComponent = isComponentDef(def); // The list of view providers is processed first, and the flags are updated

          resolveProvider$1(viewProviders, tView.data, tView.blueprint, isComponent, true); // Then, the list of providers is processed, and the flags are updated

          resolveProvider$1(providers, tView.data, tView.blueprint, isComponent, false);
        }
      }
      /**
       * Resolves a provider and publishes it to the DI system.
       */


      function resolveProvider$1(provider, tInjectables, lInjectablesBlueprint, isComponent, isViewProvider) {
        provider = resolveForwardRef(provider);

        if (Array.isArray(provider)) {
          // Recursively call `resolveProvider`
          // Recursion is OK in this case because this code will not be in hot-path once we implement
          // cloning of the initial state.
          for (var i = 0; i < provider.length; i++) {
            resolveProvider$1(provider[i], tInjectables, lInjectablesBlueprint, isComponent, isViewProvider);
          }
        } else {
          var tView = getTView();
          var lView = getLView();
          var token = isTypeProvider(provider) ? provider : resolveForwardRef(provider.provide);
          var providerFactory = providerToFactory(provider);
          var tNode = getCurrentTNode();
          var beginIndex = tNode.providerIndexes & 1048575
          /* ProvidersStartIndexMask */
          ;
          var endIndex = tNode.directiveStart;
          var cptViewProvidersCount = tNode.providerIndexes >> 20
          /* CptViewProvidersCountShift */
          ;

          if (isTypeProvider(provider) || !provider.multi) {
            // Single provider case: the factory is created and pushed immediately
            var factory = new NodeInjectorFactory(providerFactory, isViewProvider, ɵɵdirectiveInject);
            var existingFactoryIndex = indexOf(token, tInjectables, isViewProvider ? beginIndex : beginIndex + cptViewProvidersCount, endIndex);

            if (existingFactoryIndex === -1) {
              diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, token);
              registerDestroyHooksIfSupported(tView, provider, tInjectables.length);
              tInjectables.push(token);
              tNode.directiveStart++;
              tNode.directiveEnd++;

              if (isViewProvider) {
                tNode.providerIndexes += 1048576
                /* CptViewProvidersCountShifter */
                ;
              }

              lInjectablesBlueprint.push(factory);
              lView.push(factory);
            } else {
              lInjectablesBlueprint[existingFactoryIndex] = factory;
              lView[existingFactoryIndex] = factory;
            }
          } else {
            // Multi provider case:
            // We create a multi factory which is going to aggregate all the values.
            // Since the output of such a factory depends on content or view injection,
            // we create two of them, which are linked together.
            //
            // The first one (for view providers) is always in the first block of the injectables array,
            // and the second one (for providers) is always in the second block.
            // This is important because view providers have higher priority. When a multi token
            // is being looked up, the view providers should be found first.
            // Note that it is not possible to have a multi factory in the third block (directive block).
            //
            // The algorithm to process multi providers is as follows:
            // 1) If the multi provider comes from the `viewProviders` of the component:
            //   a) If the special view providers factory doesn't exist, it is created and pushed.
            //   b) Else, the multi provider is added to the existing multi factory.
            // 2) If the multi provider comes from the `providers` of the component or of another
            // directive:
            //   a) If the multi factory doesn't exist, it is created and provider pushed into it.
            //      It is also linked to the multi factory for view providers, if it exists.
            //   b) Else, the multi provider is added to the existing multi factory.
            var existingProvidersFactoryIndex = indexOf(token, tInjectables, beginIndex + cptViewProvidersCount, endIndex);
            var existingViewProvidersFactoryIndex = indexOf(token, tInjectables, beginIndex, beginIndex + cptViewProvidersCount);
            var doesProvidersFactoryExist = existingProvidersFactoryIndex >= 0 && lInjectablesBlueprint[existingProvidersFactoryIndex];
            var doesViewProvidersFactoryExist = existingViewProvidersFactoryIndex >= 0 && lInjectablesBlueprint[existingViewProvidersFactoryIndex];

            if (isViewProvider && !doesViewProvidersFactoryExist || !isViewProvider && !doesProvidersFactoryExist) {
              // Cases 1.a and 2.a
              diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, lView), tView, token);

              var _factory2 = multiFactory(isViewProvider ? multiViewProvidersFactoryResolver : multiProvidersFactoryResolver, lInjectablesBlueprint.length, isViewProvider, isComponent, providerFactory);

              if (!isViewProvider && doesViewProvidersFactoryExist) {
                lInjectablesBlueprint[existingViewProvidersFactoryIndex].providerFactory = _factory2;
              }

              registerDestroyHooksIfSupported(tView, provider, tInjectables.length, 0);
              tInjectables.push(token);
              tNode.directiveStart++;
              tNode.directiveEnd++;

              if (isViewProvider) {
                tNode.providerIndexes += 1048576
                /* CptViewProvidersCountShifter */
                ;
              }

              lInjectablesBlueprint.push(_factory2);
              lView.push(_factory2);
            } else {
              // Cases 1.b and 2.b
              var indexInFactory = multiFactoryAdd(lInjectablesBlueprint[isViewProvider ? existingViewProvidersFactoryIndex : existingProvidersFactoryIndex], providerFactory, !isViewProvider && isComponent);
              registerDestroyHooksIfSupported(tView, provider, existingProvidersFactoryIndex > -1 ? existingProvidersFactoryIndex : existingViewProvidersFactoryIndex, indexInFactory);
            }

            if (!isViewProvider && isComponent && doesViewProvidersFactoryExist) {
              lInjectablesBlueprint[existingViewProvidersFactoryIndex].componentProviders++;
            }
          }
        }
      }
      /**
       * Registers the `ngOnDestroy` hook of a provider, if the provider supports destroy hooks.
       * @param tView `TView` in which to register the hook.
       * @param provider Provider whose hook should be registered.
       * @param contextIndex Index under which to find the context for the hook when it's being invoked.
       * @param indexInFactory Only required for `multi` providers. Index of the provider in the multi
       * provider factory.
       */


      function registerDestroyHooksIfSupported(tView, provider, contextIndex, indexInFactory) {
        var providerIsTypeProvider = isTypeProvider(provider);

        if (providerIsTypeProvider || isClassProvider(provider)) {
          var prototype = (provider.useClass || provider).prototype;
          var ngOnDestroy = prototype.ngOnDestroy;

          if (ngOnDestroy) {
            var hooks = tView.destroyHooks || (tView.destroyHooks = []);

            if (!providerIsTypeProvider && provider.multi) {
              ngDevMode && assertDefined(indexInFactory, 'indexInFactory when registering multi factory destroy hook');
              var existingCallbacksIndex = hooks.indexOf(contextIndex);

              if (existingCallbacksIndex === -1) {
                hooks.push(contextIndex, [indexInFactory, ngOnDestroy]);
              } else {
                hooks[existingCallbacksIndex + 1].push(indexInFactory, ngOnDestroy);
              }
            } else {
              hooks.push(contextIndex, ngOnDestroy);
            }
          }
        }
      }
      /**
       * Add a factory in a multi factory.
       * @returns Index at which the factory was inserted.
       */


      function multiFactoryAdd(multiFactory, factory, isComponentProvider) {
        if (isComponentProvider) {
          multiFactory.componentProviders++;
        }

        return multiFactory.multi.push(factory) - 1;
      }
      /**
       * Returns the index of item in the array, but only in the begin to end range.
       */


      function indexOf(item, arr, begin, end) {
        for (var i = begin; i < end; i++) {
          if (arr[i] === item) return i;
        }

        return -1;
      }
      /**
       * Use this with `multi` `providers`.
       */


      function multiProvidersFactoryResolver(_, tData, lData, tNode) {
        return multiResolve(this.multi, []);
      }
      /**
       * Use this with `multi` `viewProviders`.
       *
       * This factory knows how to concatenate itself with the existing `multi` `providers`.
       */


      function multiViewProvidersFactoryResolver(_, tData, lView, tNode) {
        var factories = this.multi;
        var result;

        if (this.providerFactory) {
          var componentCount = this.providerFactory.componentProviders;
          var multiProviders = getNodeInjectable(lView, lView[TVIEW], this.providerFactory.index, tNode); // Copy the section of the array which contains `multi` `providers` from the component

          result = multiProviders.slice(0, componentCount); // Insert the `viewProvider` instances.

          multiResolve(factories, result); // Copy the section of the array which contains `multi` `providers` from other directives

          for (var i = componentCount; i < multiProviders.length; i++) {
            result.push(multiProviders[i]);
          }
        } else {
          result = []; // Insert the `viewProvider` instances.

          multiResolve(factories, result);
        }

        return result;
      }
      /**
       * Maps an array of factories into an array of values.
       */


      function multiResolve(factories, result) {
        for (var i = 0; i < factories.length; i++) {
          var factory = factories[i];
          result.push(factory());
        }

        return result;
      }
      /**
       * Creates a multi factory.
       */


      function multiFactory(factoryFn, index, isViewProvider, isComponent, f) {
        var factory = new NodeInjectorFactory(factoryFn, isViewProvider, ɵɵdirectiveInject);
        factory.multi = [];
        factory.index = index;
        factory.componentProviders = 0;
        multiFactoryAdd(factory, f, isComponent && !isViewProvider);
        return factory;
      }
      /**
       * This feature resolves the providers of a directive (or component),
       * and publish them into the DI system, making it visible to others for injection.
       *
       * For example:
       * ```ts
       * class ComponentWithProviders {
       *   constructor(private greeter: GreeterDE) {}
       *
       *   static ɵcmp = defineComponent({
       *     type: ComponentWithProviders,
       *     selectors: [['component-with-providers']],
       *    factory: () => new ComponentWithProviders(directiveInject(GreeterDE as any)),
       *    decls: 1,
       *    vars: 1,
       *    template: function(fs: RenderFlags, ctx: ComponentWithProviders) {
       *      if (fs & RenderFlags.Create) {
       *        ɵɵtext(0);
       *      }
       *      if (fs & RenderFlags.Update) {
       *        ɵɵtextInterpolate(ctx.greeter.greet());
       *      }
       *    },
       *    features: [ɵɵProvidersFeature([GreeterDE])]
       *  });
       * }
       * ```
       *
       * @param definition
       *
       * @codeGenApi
       */


      function ɵɵProvidersFeature(providers) {
        var viewProviders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
        return function (definition) {
          definition.providersResolver = function (def, processProvidersFn) {
            return providersResolver(def, //
            processProvidersFn ? processProvidersFn(providers) : providers, //
            viewProviders);
          };
        };
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Represents a component created by a `ComponentFactory`.
       * Provides access to the component instance and related objects,
       * and provides the means of destroying the instance.
       *
       * @publicApi
       */


      var ComponentRef = function ComponentRef() {
        _classCallCheck2(this, ComponentRef);
      };
      /**
       * Base class for a factory that can create a component dynamically.
       * Instantiate a factory for a given type of component with `resolveComponentFactory()`.
       * Use the resulting `ComponentFactory.create()` method to create a component of that type.
       *
       * @see [Dynamic Components](guide/dynamic-component-loader)
       *
       * @publicApi
       */


      var ComponentFactory = function ComponentFactory() {
        _classCallCheck2(this, ComponentFactory);
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function noComponentFactoryError(component) {
        var error = Error("No component factory found for ".concat(stringify(component), ". Did you add it to @NgModule.entryComponents?"));
        error[ERROR_COMPONENT] = component;
        return error;
      }

      var ERROR_COMPONENT = 'ngComponent';

      function getComponent$1(error) {
        return error[ERROR_COMPONENT];
      }

      var _NullComponentFactoryResolver = /*#__PURE__*/function () {
        function _NullComponentFactoryResolver() {
          _classCallCheck2(this, _NullComponentFactoryResolver);
        }

        _createClass2(_NullComponentFactoryResolver, [{
          key: "resolveComponentFactory",
          value: function resolveComponentFactory(component) {
            throw noComponentFactoryError(component);
          }
        }]);

        return _NullComponentFactoryResolver;
      }();
      /**
       * A simple registry that maps `Components` to generated `ComponentFactory` classes
       * that can be used to create instances of components.
       * Use to obtain the factory for a given component type,
       * then use the factory's `create()` method to create a component of that type.
       *
       * @see [Dynamic Components](guide/dynamic-component-loader)
       * @publicApi
       */


      var ComponentFactoryResolver = function ComponentFactoryResolver() {
        _classCallCheck2(this, ComponentFactoryResolver);
      };

      ComponentFactoryResolver.NULL = new _NullComponentFactoryResolver();

      var CodegenComponentFactoryResolver = /*#__PURE__*/function () {
        function CodegenComponentFactoryResolver(factories, _parent, _ngModule) {
          _classCallCheck2(this, CodegenComponentFactoryResolver);

          this._parent = _parent;
          this._ngModule = _ngModule;
          this._factories = new Map();

          for (var i = 0; i < factories.length; i++) {
            var factory = factories[i];

            this._factories.set(factory.componentType, factory);
          }
        }

        _createClass2(CodegenComponentFactoryResolver, [{
          key: "resolveComponentFactory",
          value: function resolveComponentFactory(component) {
            var factory = this._factories.get(component);

            if (!factory && this._parent) {
              factory = this._parent.resolveComponentFactory(component);
            }

            if (!factory) {
              throw noComponentFactoryError(component);
            }

            return new ComponentFactoryBoundToModule(factory, this._ngModule);
          }
        }]);

        return CodegenComponentFactoryResolver;
      }();

      var ComponentFactoryBoundToModule = /*#__PURE__*/function (_ComponentFactory) {
        _inherits2(ComponentFactoryBoundToModule, _ComponentFactory);

        var _super308 = _createSuper(ComponentFactoryBoundToModule);

        function ComponentFactoryBoundToModule(factory, ngModule) {
          var _this716;

          _classCallCheck2(this, ComponentFactoryBoundToModule);

          _this716 = _super308.call(this);
          _this716.factory = factory;
          _this716.ngModule = ngModule;
          _this716.selector = factory.selector;
          _this716.componentType = factory.componentType;
          _this716.ngContentSelectors = factory.ngContentSelectors;
          _this716.inputs = factory.inputs;
          _this716.outputs = factory.outputs;
          return _this716;
        }

        _createClass2(ComponentFactoryBoundToModule, [{
          key: "create",
          value: function create(injector, projectableNodes, rootSelectorOrNode, ngModule) {
            return this.factory.create(injector, projectableNodes, rootSelectorOrNode, ngModule || this.ngModule);
          }
        }]);

        return ComponentFactoryBoundToModule;
      }(ComponentFactory);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function noop() {// Do nothing.
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Creates an ElementRef from the most recent node.
       *
       * @returns The ElementRef instance to use
       */


      function injectElementRef() {
        return createElementRef(getCurrentTNode(), getLView());
      }
      /**
       * Creates an ElementRef given a node.
       *
       * @param tNode The node for which you'd like an ElementRef
       * @param lView The view to which the node belongs
       * @returns The ElementRef instance to use
       */


      function createElementRef(tNode, lView) {
        return new ElementRef(getNativeByTNode(tNode, lView));
      }

      var SWITCH_ELEMENT_REF_FACTORY__POST_R3__ = injectElementRef;
      var SWITCH_ELEMENT_REF_FACTORY__PRE_R3__ = noop;
      var SWITCH_ELEMENT_REF_FACTORY = SWITCH_ELEMENT_REF_FACTORY__POST_R3__;
      /**
       * A wrapper around a native element inside of a View.
       *
       * An `ElementRef` is backed by a render-specific element. In the browser, this is usually a DOM
       * element.
       *
       * @security Permitting direct access to the DOM can make your application more vulnerable to
       * XSS attacks. Carefully review any use of `ElementRef` in your code. For more detail, see the
       * [Security Guide](https://g.co/ng/security).
       *
       * @publicApi
       */
      // Note: We don't expose things like `Injector`, `ViewContainer`, ... here,
      // i.e. users have to ask for what they need. With that, we can build better analysis tools
      // and could do better codegen in the future.

      var ElementRef = function ElementRef(nativeElement) {
        _classCallCheck2(this, ElementRef);

        this.nativeElement = nativeElement;
      };
      /**
       * @internal
       * @nocollapse
       */


      ElementRef.__NG_ELEMENT_ID__ = SWITCH_ELEMENT_REF_FACTORY;
      /**
       * Unwraps `ElementRef` and return the `nativeElement`.
       *
       * @param value value to unwrap
       * @returns `nativeElement` if `ElementRef` otherwise returns value as is.
       */

      function unwrapElementRef(value) {
        return value instanceof ElementRef ? value.nativeElement : value;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var Renderer2Interceptor = new InjectionToken('Renderer2Interceptor');
      /**
       * Creates and initializes a custom renderer that implements the `Renderer2` base class.
       *
       * @publicApi
       */

      var RendererFactory2 = function RendererFactory2() {
        _classCallCheck2(this, RendererFactory2);
      };
      /**
       * Extend this base class to implement custom rendering. By default, Angular
       * renders a template into DOM. You can use custom rendering to intercept
       * rendering calls, or to render to something other than DOM.
       *
       * Create your custom renderer using `RendererFactory2`.
       *
       * Use a custom renderer to bypass Angular's templating and
       * make custom UI changes that can't be expressed declaratively.
       * For example if you need to set a property or an attribute whose name is
       * not statically known, use the `setProperty()` or
       * `setAttribute()` method.
       *
       * @publicApi
       */


      var Renderer2 = function Renderer2() {
        _classCallCheck2(this, Renderer2);
      };
      /**
       * @internal
       * @nocollapse
       */


      Renderer2.__NG_ELEMENT_ID__ = function () {
        return SWITCH_RENDERER2_FACTORY();
      };

      var SWITCH_RENDERER2_FACTORY__POST_R3__ = injectRenderer2;
      var SWITCH_RENDERER2_FACTORY__PRE_R3__ = noop;
      var SWITCH_RENDERER2_FACTORY = SWITCH_RENDERER2_FACTORY__POST_R3__;
      /** Returns a Renderer2 (or throws when application was bootstrapped with Renderer3) */

      function getOrCreateRenderer2(lView) {
        var renderer = lView[RENDERER];

        if (ngDevMode && !isProceduralRenderer(renderer)) {
          throw new Error('Cannot inject Renderer2 when the application uses Renderer3!');
        }

        return renderer;
      }
      /** Injects a Renderer2 for the current component. */


      function injectRenderer2() {
        // We need the Renderer to be based on the component that it's being injected into, however since
        // DI happens before we've entered its view, `getLView` will return the parent view instead.
        var lView = getLView();
        var tNode = getCurrentTNode();
        var nodeAtIndex = getComponentLViewByIndex(tNode.index, lView);
        return getOrCreateRenderer2(isLView(nodeAtIndex) ? nodeAtIndex : lView);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Sanitizer is used by the views to sanitize potentially dangerous values.
       *
       * @publicApi
       */


      var Sanitizer = function Sanitizer() {
        _classCallCheck2(this, Sanitizer);
      };
      /** @nocollapse */


      Sanitizer.ɵprov = ɵɵdefineInjectable({
        token: Sanitizer,
        providedIn: 'root',
        factory: function factory() {
          return null;
        }
      });
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @description Represents the version of Angular
       *
       * @publicApi
       */

      var Version = function Version(full) {
        _classCallCheck2(this, Version);

        this.full = full;
        this.major = full.split('.')[0];
        this.minor = full.split('.')[1];
        this.patch = full.split('.').slice(2).join('.');
      };
      /**
       * @publicApi
       */


      var VERSION = new Version('12.0.0-next.1');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var DefaultIterableDifferFactory = /*#__PURE__*/function () {
        function DefaultIterableDifferFactory() {
          _classCallCheck2(this, DefaultIterableDifferFactory);
        }

        _createClass2(DefaultIterableDifferFactory, [{
          key: "supports",
          value: function supports(obj) {
            return isListLikeIterable(obj);
          }
        }, {
          key: "create",
          value: function create(trackByFn) {
            return new DefaultIterableDiffer(trackByFn);
          }
        }]);

        return DefaultIterableDifferFactory;
      }();

      var trackByIdentity = function trackByIdentity(index, item) {
        return item;
      };

      var ɵ0$b = trackByIdentity;
      /**
       * @deprecated v4.0.0 - Should not be part of public API.
       * @publicApi
       */

      var DefaultIterableDiffer = /*#__PURE__*/function () {
        function DefaultIterableDiffer(trackByFn) {
          _classCallCheck2(this, DefaultIterableDiffer);

          this.length = 0; // Keeps track of the used records at any point in time (during & across `_check()` calls)

          this._linkedRecords = null; // Keeps track of the removed records at any point in time during `_check()` calls.

          this._unlinkedRecords = null;
          this._previousItHead = null;
          this._itHead = null;
          this._itTail = null;
          this._additionsHead = null;
          this._additionsTail = null;
          this._movesHead = null;
          this._movesTail = null;
          this._removalsHead = null;
          this._removalsTail = null; // Keeps track of records where custom track by is the same, but item identity has changed

          this._identityChangesHead = null;
          this._identityChangesTail = null;
          this._trackByFn = trackByFn || trackByIdentity;
        }

        _createClass2(DefaultIterableDiffer, [{
          key: "forEachItem",
          value: function forEachItem(fn) {
            var record;

            for (record = this._itHead; record !== null; record = record._next) {
              fn(record);
            }
          }
        }, {
          key: "forEachOperation",
          value: function forEachOperation(fn) {
            var nextIt = this._itHead;
            var nextRemove = this._removalsHead;
            var addRemoveOffset = 0;
            var moveOffsets = null;

            while (nextIt || nextRemove) {
              // Figure out which is the next record to process
              // Order: remove, add, move
              var record = !nextRemove || nextIt && nextIt.currentIndex < getPreviousIndex(nextRemove, addRemoveOffset, moveOffsets) ? nextIt : nextRemove;
              var adjPreviousIndex = getPreviousIndex(record, addRemoveOffset, moveOffsets);
              var currentIndex = record.currentIndex; // consume the item, and adjust the addRemoveOffset and update moveDistance if necessary

              if (record === nextRemove) {
                addRemoveOffset--;
                nextRemove = nextRemove._nextRemoved;
              } else {
                nextIt = nextIt._next;

                if (record.previousIndex == null) {
                  addRemoveOffset++;
                } else {
                  // INVARIANT:  currentIndex < previousIndex
                  if (!moveOffsets) moveOffsets = [];
                  var localMovePreviousIndex = adjPreviousIndex - addRemoveOffset;
                  var localCurrentIndex = currentIndex - addRemoveOffset;

                  if (localMovePreviousIndex != localCurrentIndex) {
                    for (var i = 0; i < localMovePreviousIndex; i++) {
                      var offset = i < moveOffsets.length ? moveOffsets[i] : moveOffsets[i] = 0;
                      var index = offset + i;

                      if (localCurrentIndex <= index && index < localMovePreviousIndex) {
                        moveOffsets[i] = offset + 1;
                      }
                    }

                    var previousIndex = record.previousIndex;
                    moveOffsets[previousIndex] = localCurrentIndex - localMovePreviousIndex;
                  }
                }
              }

              if (adjPreviousIndex !== currentIndex) {
                fn(record, adjPreviousIndex, currentIndex);
              }
            }
          }
        }, {
          key: "forEachPreviousItem",
          value: function forEachPreviousItem(fn) {
            var record;

            for (record = this._previousItHead; record !== null; record = record._nextPrevious) {
              fn(record);
            }
          }
        }, {
          key: "forEachAddedItem",
          value: function forEachAddedItem(fn) {
            var record;

            for (record = this._additionsHead; record !== null; record = record._nextAdded) {
              fn(record);
            }
          }
        }, {
          key: "forEachMovedItem",
          value: function forEachMovedItem(fn) {
            var record;

            for (record = this._movesHead; record !== null; record = record._nextMoved) {
              fn(record);
            }
          }
        }, {
          key: "forEachRemovedItem",
          value: function forEachRemovedItem(fn) {
            var record;

            for (record = this._removalsHead; record !== null; record = record._nextRemoved) {
              fn(record);
            }
          }
        }, {
          key: "forEachIdentityChange",
          value: function forEachIdentityChange(fn) {
            var record;

            for (record = this._identityChangesHead; record !== null; record = record._nextIdentityChange) {
              fn(record);
            }
          }
        }, {
          key: "diff",
          value: function diff(collection) {
            if (collection == null) collection = [];

            if (!isListLikeIterable(collection)) {
              throw new Error("Error trying to diff '".concat(stringify(collection), "'. Only arrays and iterables are allowed"));
            }

            if (this.check(collection)) {
              return this;
            } else {
              return null;
            }
          }
        }, {
          key: "onDestroy",
          value: function onDestroy() {}
        }, {
          key: "check",
          value: function check(collection) {
            var _this717 = this;

            this._reset();

            var record = this._itHead;
            var mayBeDirty = false;
            var index;
            var item;
            var itemTrackBy;

            if (Array.isArray(collection)) {
              this.length = collection.length;

              for (var _index4 = 0; _index4 < this.length; _index4++) {
                item = collection[_index4];
                itemTrackBy = this._trackByFn(_index4, item);

                if (record === null || !Object.is(record.trackById, itemTrackBy)) {
                  record = this._mismatch(record, item, itemTrackBy, _index4);
                  mayBeDirty = true;
                } else {
                  if (mayBeDirty) {
                    // TODO(misko): can we limit this to duplicates only?
                    record = this._verifyReinsertion(record, item, itemTrackBy, _index4);
                  }

                  if (!Object.is(record.item, item)) this._addIdentityChange(record, item);
                }

                record = record._next;
              }
            } else {
              index = 0;
              iterateListLike(collection, function (item) {
                itemTrackBy = _this717._trackByFn(index, item);

                if (record === null || !Object.is(record.trackById, itemTrackBy)) {
                  record = _this717._mismatch(record, item, itemTrackBy, index);
                  mayBeDirty = true;
                } else {
                  if (mayBeDirty) {
                    // TODO(misko): can we limit this to duplicates only?
                    record = _this717._verifyReinsertion(record, item, itemTrackBy, index);
                  }

                  if (!Object.is(record.item, item)) _this717._addIdentityChange(record, item);
                }

                record = record._next;
                index++;
              });
              this.length = index;
            }

            this._truncate(record);

            this.collection = collection;
            return this.isDirty;
          }
          /* CollectionChanges is considered dirty if it has any additions, moves, removals, or identity
           * changes.
           */

        }, {
          key: "isDirty",
          get: function get() {
            return this._additionsHead !== null || this._movesHead !== null || this._removalsHead !== null || this._identityChangesHead !== null;
          }
          /**
           * Reset the state of the change objects to show no changes. This means set previousKey to
           * currentKey, and clear all of the queues (additions, moves, removals).
           * Set the previousIndexes of moved and added items to their currentIndexes
           * Reset the list of additions, moves and removals
           *
           * @internal
           */

        }, {
          key: "_reset",
          value: function _reset() {
            if (this.isDirty) {
              var record;

              for (record = this._previousItHead = this._itHead; record !== null; record = record._next) {
                record._nextPrevious = record._next;
              }

              for (record = this._additionsHead; record !== null; record = record._nextAdded) {
                record.previousIndex = record.currentIndex;
              }

              this._additionsHead = this._additionsTail = null;

              for (record = this._movesHead; record !== null; record = record._nextMoved) {
                record.previousIndex = record.currentIndex;
              }

              this._movesHead = this._movesTail = null;
              this._removalsHead = this._removalsTail = null;
              this._identityChangesHead = this._identityChangesTail = null; // TODO(vicb): when assert gets supported
              // assert(!this.isDirty);
            }
          }
          /**
           * This is the core function which handles differences between collections.
           *
           * - `record` is the record which we saw at this position last time. If null then it is a new
           *   item.
           * - `item` is the current item in the collection
           * - `index` is the position of the item in the collection
           *
           * @internal
           */

        }, {
          key: "_mismatch",
          value: function _mismatch(record, item, itemTrackBy, index) {
            // The previous record after which we will append the current one.
            var previousRecord;

            if (record === null) {
              previousRecord = this._itTail;
            } else {
              previousRecord = record._prev; // Remove the record from the collection since we know it does not match the item.

              this._remove(record);
            } // See if we have evicted the item, which used to be at some anterior position of _itHead list.


            record = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);

            if (record !== null) {
              // It is an item which we have evicted earlier: reinsert it back into the list.
              // But first we need to check if identity changed, so we can update in view if necessary.
              if (!Object.is(record.item, item)) this._addIdentityChange(record, item);

              this._reinsertAfter(record, previousRecord, index);
            } else {
              // Attempt to see if the item is at some posterior position of _itHead list.
              record = this._linkedRecords === null ? null : this._linkedRecords.get(itemTrackBy, index);

              if (record !== null) {
                // We have the item in _itHead at/after `index` position. We need to move it forward in the
                // collection.
                // But first we need to check if identity changed, so we can update in view if necessary.
                if (!Object.is(record.item, item)) this._addIdentityChange(record, item);

                this._moveAfter(record, previousRecord, index);
              } else {
                // It is a new item: add it.
                record = this._addAfter(new IterableChangeRecord_(item, itemTrackBy), previousRecord, index);
              }
            }

            return record;
          }
          /**
           * This check is only needed if an array contains duplicates. (Short circuit of nothing dirty)
           *
           * Use case: `[a, a]` => `[b, a, a]`
           *
           * If we did not have this check then the insertion of `b` would:
           *   1) evict first `a`
           *   2) insert `b` at `0` index.
           *   3) leave `a` at index `1` as is. <-- this is wrong!
           *   3) reinsert `a` at index 2. <-- this is wrong!
           *
           * The correct behavior is:
           *   1) evict first `a`
           *   2) insert `b` at `0` index.
           *   3) reinsert `a` at index 1.
           *   3) move `a` at from `1` to `2`.
           *
           *
           * Double check that we have not evicted a duplicate item. We need to check if the item type may
           * have already been removed:
           * The insertion of b will evict the first 'a'. If we don't reinsert it now it will be reinserted
           * at the end. Which will show up as the two 'a's switching position. This is incorrect, since a
           * better way to think of it is as insert of 'b' rather then switch 'a' with 'b' and then add 'a'
           * at the end.
           *
           * @internal
           */

        }, {
          key: "_verifyReinsertion",
          value: function _verifyReinsertion(record, item, itemTrackBy, index) {
            var reinsertRecord = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);

            if (reinsertRecord !== null) {
              record = this._reinsertAfter(reinsertRecord, record._prev, index);
            } else if (record.currentIndex != index) {
              record.currentIndex = index;

              this._addToMoves(record, index);
            }

            return record;
          }
          /**
           * Get rid of any excess {@link IterableChangeRecord_}s from the previous collection
           *
           * - `record` The first excess {@link IterableChangeRecord_}.
           *
           * @internal
           */

        }, {
          key: "_truncate",
          value: function _truncate(record) {
            // Anything after that needs to be removed;
            while (record !== null) {
              var nextRecord = record._next;

              this._addToRemovals(this._unlink(record));

              record = nextRecord;
            }

            if (this._unlinkedRecords !== null) {
              this._unlinkedRecords.clear();
            }

            if (this._additionsTail !== null) {
              this._additionsTail._nextAdded = null;
            }

            if (this._movesTail !== null) {
              this._movesTail._nextMoved = null;
            }

            if (this._itTail !== null) {
              this._itTail._next = null;
            }

            if (this._removalsTail !== null) {
              this._removalsTail._nextRemoved = null;
            }

            if (this._identityChangesTail !== null) {
              this._identityChangesTail._nextIdentityChange = null;
            }
          }
          /** @internal */

        }, {
          key: "_reinsertAfter",
          value: function _reinsertAfter(record, prevRecord, index) {
            if (this._unlinkedRecords !== null) {
              this._unlinkedRecords.remove(record);
            }

            var prev = record._prevRemoved;
            var next = record._nextRemoved;

            if (prev === null) {
              this._removalsHead = next;
            } else {
              prev._nextRemoved = next;
            }

            if (next === null) {
              this._removalsTail = prev;
            } else {
              next._prevRemoved = prev;
            }

            this._insertAfter(record, prevRecord, index);

            this._addToMoves(record, index);

            return record;
          }
          /** @internal */

        }, {
          key: "_moveAfter",
          value: function _moveAfter(record, prevRecord, index) {
            this._unlink(record);

            this._insertAfter(record, prevRecord, index);

            this._addToMoves(record, index);

            return record;
          }
          /** @internal */

        }, {
          key: "_addAfter",
          value: function _addAfter(record, prevRecord, index) {
            this._insertAfter(record, prevRecord, index);

            if (this._additionsTail === null) {
              // TODO(vicb):
              // assert(this._additionsHead === null);
              this._additionsTail = this._additionsHead = record;
            } else {
              // TODO(vicb):
              // assert(_additionsTail._nextAdded === null);
              // assert(record._nextAdded === null);
              this._additionsTail = this._additionsTail._nextAdded = record;
            }

            return record;
          }
          /** @internal */

        }, {
          key: "_insertAfter",
          value: function _insertAfter(record, prevRecord, index) {
            // TODO(vicb):
            // assert(record != prevRecord);
            // assert(record._next === null);
            // assert(record._prev === null);
            var next = prevRecord === null ? this._itHead : prevRecord._next; // TODO(vicb):
            // assert(next != record);
            // assert(prevRecord != record);

            record._next = next;
            record._prev = prevRecord;

            if (next === null) {
              this._itTail = record;
            } else {
              next._prev = record;
            }

            if (prevRecord === null) {
              this._itHead = record;
            } else {
              prevRecord._next = record;
            }

            if (this._linkedRecords === null) {
              this._linkedRecords = new _DuplicateMap();
            }

            this._linkedRecords.put(record);

            record.currentIndex = index;
            return record;
          }
          /** @internal */

        }, {
          key: "_remove",
          value: function _remove(record) {
            return this._addToRemovals(this._unlink(record));
          }
          /** @internal */

        }, {
          key: "_unlink",
          value: function _unlink(record) {
            if (this._linkedRecords !== null) {
              this._linkedRecords.remove(record);
            }

            var prev = record._prev;
            var next = record._next; // TODO(vicb):
            // assert((record._prev = null) === null);
            // assert((record._next = null) === null);

            if (prev === null) {
              this._itHead = next;
            } else {
              prev._next = next;
            }

            if (next === null) {
              this._itTail = prev;
            } else {
              next._prev = prev;
            }

            return record;
          }
          /** @internal */

        }, {
          key: "_addToMoves",
          value: function _addToMoves(record, toIndex) {
            // TODO(vicb):
            // assert(record._nextMoved === null);
            if (record.previousIndex === toIndex) {
              return record;
            }

            if (this._movesTail === null) {
              // TODO(vicb):
              // assert(_movesHead === null);
              this._movesTail = this._movesHead = record;
            } else {
              // TODO(vicb):
              // assert(_movesTail._nextMoved === null);
              this._movesTail = this._movesTail._nextMoved = record;
            }

            return record;
          }
        }, {
          key: "_addToRemovals",
          value: function _addToRemovals(record) {
            if (this._unlinkedRecords === null) {
              this._unlinkedRecords = new _DuplicateMap();
            }

            this._unlinkedRecords.put(record);

            record.currentIndex = null;
            record._nextRemoved = null;

            if (this._removalsTail === null) {
              // TODO(vicb):
              // assert(_removalsHead === null);
              this._removalsTail = this._removalsHead = record;
              record._prevRemoved = null;
            } else {
              // TODO(vicb):
              // assert(_removalsTail._nextRemoved === null);
              // assert(record._nextRemoved === null);
              record._prevRemoved = this._removalsTail;
              this._removalsTail = this._removalsTail._nextRemoved = record;
            }

            return record;
          }
          /** @internal */

        }, {
          key: "_addIdentityChange",
          value: function _addIdentityChange(record, item) {
            record.item = item;

            if (this._identityChangesTail === null) {
              this._identityChangesTail = this._identityChangesHead = record;
            } else {
              this._identityChangesTail = this._identityChangesTail._nextIdentityChange = record;
            }

            return record;
          }
        }]);

        return DefaultIterableDiffer;
      }();

      var IterableChangeRecord_ = function IterableChangeRecord_(item, trackById) {
        _classCallCheck2(this, IterableChangeRecord_);

        this.item = item;
        this.trackById = trackById;
        this.currentIndex = null;
        this.previousIndex = null;
        /** @internal */

        this._nextPrevious = null;
        /** @internal */

        this._prev = null;
        /** @internal */

        this._next = null;
        /** @internal */

        this._prevDup = null;
        /** @internal */

        this._nextDup = null;
        /** @internal */

        this._prevRemoved = null;
        /** @internal */

        this._nextRemoved = null;
        /** @internal */

        this._nextAdded = null;
        /** @internal */

        this._nextMoved = null;
        /** @internal */

        this._nextIdentityChange = null;
      }; // A linked list of IterableChangeRecords with the same IterableChangeRecord_.item


      var _DuplicateItemRecordList = /*#__PURE__*/function () {
        function _DuplicateItemRecordList() {
          _classCallCheck2(this, _DuplicateItemRecordList);

          /** @internal */
          this._head = null;
          /** @internal */

          this._tail = null;
        }
        /**
         * Append the record to the list of duplicates.
         *
         * Note: by design all records in the list of duplicates hold the same value in record.item.
         */


        _createClass2(_DuplicateItemRecordList, [{
          key: "add",
          value: function add(record) {
            if (this._head === null) {
              this._head = this._tail = record;
              record._nextDup = null;
              record._prevDup = null;
            } else {
              // TODO(vicb):
              // assert(record.item ==  _head.item ||
              //       record.item is num && record.item.isNaN && _head.item is num && _head.item.isNaN);
              this._tail._nextDup = record;
              record._prevDup = this._tail;
              record._nextDup = null;
              this._tail = record;
            }
          } // Returns a IterableChangeRecord_ having IterableChangeRecord_.trackById == trackById and
          // IterableChangeRecord_.currentIndex >= atOrAfterIndex

        }, {
          key: "get",
          value: function get(trackById, atOrAfterIndex) {
            var record;

            for (record = this._head; record !== null; record = record._nextDup) {
              if ((atOrAfterIndex === null || atOrAfterIndex <= record.currentIndex) && Object.is(record.trackById, trackById)) {
                return record;
              }
            }

            return null;
          }
          /**
           * Remove one {@link IterableChangeRecord_} from the list of duplicates.
           *
           * Returns whether the list of duplicates is empty.
           */

        }, {
          key: "remove",
          value: function remove(record) {
            // TODO(vicb):
            // assert(() {
            //  // verify that the record being removed is in the list.
            //  for (IterableChangeRecord_ cursor = _head; cursor != null; cursor = cursor._nextDup) {
            //    if (identical(cursor, record)) return true;
            //  }
            //  return false;
            //});
            var prev = record._prevDup;
            var next = record._nextDup;

            if (prev === null) {
              this._head = next;
            } else {
              prev._nextDup = next;
            }

            if (next === null) {
              this._tail = prev;
            } else {
              next._prevDup = prev;
            }

            return this._head === null;
          }
        }]);

        return _DuplicateItemRecordList;
      }();

      var _DuplicateMap = /*#__PURE__*/function () {
        function _DuplicateMap() {
          _classCallCheck2(this, _DuplicateMap);

          this.map = new Map();
        }

        _createClass2(_DuplicateMap, [{
          key: "put",
          value: function put(record) {
            var key = record.trackById;
            var duplicates = this.map.get(key);

            if (!duplicates) {
              duplicates = new _DuplicateItemRecordList();
              this.map.set(key, duplicates);
            }

            duplicates.add(record);
          }
          /**
           * Retrieve the `value` using key. Because the IterableChangeRecord_ value may be one which we
           * have already iterated over, we use the `atOrAfterIndex` to pretend it is not there.
           *
           * Use case: `[a, b, c, a, a]` if we are at index `3` which is the second `a` then asking if we
           * have any more `a`s needs to return the second `a`.
           */

        }, {
          key: "get",
          value: function get(trackById, atOrAfterIndex) {
            var key = trackById;
            var recordList = this.map.get(key);
            return recordList ? recordList.get(trackById, atOrAfterIndex) : null;
          }
          /**
           * Removes a {@link IterableChangeRecord_} from the list of duplicates.
           *
           * The list of duplicates also is removed from the map if it gets empty.
           */

        }, {
          key: "remove",
          value: function remove(record) {
            var key = record.trackById;
            var recordList = this.map.get(key); // Remove the list of duplicates when it gets empty

            if (recordList.remove(record)) {
              this.map["delete"](key);
            }

            return record;
          }
        }, {
          key: "isEmpty",
          get: function get() {
            return this.map.size === 0;
          }
        }, {
          key: "clear",
          value: function clear() {
            this.map.clear();
          }
        }]);

        return _DuplicateMap;
      }();

      function getPreviousIndex(item, addRemoveOffset, moveOffsets) {
        var previousIndex = item.previousIndex;
        if (previousIndex === null) return previousIndex;
        var moveOffset = 0;

        if (moveOffsets && previousIndex < moveOffsets.length) {
          moveOffset = moveOffsets[previousIndex];
        }

        return previousIndex + addRemoveOffset + moveOffset;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var DefaultKeyValueDifferFactory = /*#__PURE__*/function () {
        function DefaultKeyValueDifferFactory() {
          _classCallCheck2(this, DefaultKeyValueDifferFactory);
        }

        _createClass2(DefaultKeyValueDifferFactory, [{
          key: "supports",
          value: function supports(obj) {
            return obj instanceof Map || isJsObject(obj);
          }
        }, {
          key: "create",
          value: function create() {
            return new DefaultKeyValueDiffer();
          }
        }]);

        return DefaultKeyValueDifferFactory;
      }();

      var DefaultKeyValueDiffer = /*#__PURE__*/function () {
        function DefaultKeyValueDiffer() {
          _classCallCheck2(this, DefaultKeyValueDiffer);

          this._records = new Map();
          this._mapHead = null; // _appendAfter is used in the check loop

          this._appendAfter = null;
          this._previousMapHead = null;
          this._changesHead = null;
          this._changesTail = null;
          this._additionsHead = null;
          this._additionsTail = null;
          this._removalsHead = null;
          this._removalsTail = null;
        }

        _createClass2(DefaultKeyValueDiffer, [{
          key: "isDirty",
          get: function get() {
            return this._additionsHead !== null || this._changesHead !== null || this._removalsHead !== null;
          }
        }, {
          key: "forEachItem",
          value: function forEachItem(fn) {
            var record;

            for (record = this._mapHead; record !== null; record = record._next) {
              fn(record);
            }
          }
        }, {
          key: "forEachPreviousItem",
          value: function forEachPreviousItem(fn) {
            var record;

            for (record = this._previousMapHead; record !== null; record = record._nextPrevious) {
              fn(record);
            }
          }
        }, {
          key: "forEachChangedItem",
          value: function forEachChangedItem(fn) {
            var record;

            for (record = this._changesHead; record !== null; record = record._nextChanged) {
              fn(record);
            }
          }
        }, {
          key: "forEachAddedItem",
          value: function forEachAddedItem(fn) {
            var record;

            for (record = this._additionsHead; record !== null; record = record._nextAdded) {
              fn(record);
            }
          }
        }, {
          key: "forEachRemovedItem",
          value: function forEachRemovedItem(fn) {
            var record;

            for (record = this._removalsHead; record !== null; record = record._nextRemoved) {
              fn(record);
            }
          }
        }, {
          key: "diff",
          value: function diff(map) {
            if (!map) {
              map = new Map();
            } else if (!(map instanceof Map || isJsObject(map))) {
              throw new Error("Error trying to diff '".concat(stringify(map), "'. Only maps and objects are allowed"));
            }

            return this.check(map) ? this : null;
          }
        }, {
          key: "onDestroy",
          value: function onDestroy() {}
          /**
           * Check the current state of the map vs the previous.
           * The algorithm is optimised for when the keys do no change.
           */

        }, {
          key: "check",
          value: function check(map) {
            var _this718 = this;

            this._reset();

            var insertBefore = this._mapHead;
            this._appendAfter = null;

            this._forEach(map, function (value, key) {
              if (insertBefore && insertBefore.key === key) {
                _this718._maybeAddToChanges(insertBefore, value);

                _this718._appendAfter = insertBefore;
                insertBefore = insertBefore._next;
              } else {
                var record = _this718._getOrCreateRecordForKey(key, value);

                insertBefore = _this718._insertBeforeOrAppend(insertBefore, record);
              }
            }); // Items remaining at the end of the list have been deleted


            if (insertBefore) {
              if (insertBefore._prev) {
                insertBefore._prev._next = null;
              }

              this._removalsHead = insertBefore;

              for (var record = insertBefore; record !== null; record = record._nextRemoved) {
                if (record === this._mapHead) {
                  this._mapHead = null;
                }

                this._records["delete"](record.key);

                record._nextRemoved = record._next;
                record.previousValue = record.currentValue;
                record.currentValue = null;
                record._prev = null;
                record._next = null;
              }
            } // Make sure tails have no next records from previous runs


            if (this._changesTail) this._changesTail._nextChanged = null;
            if (this._additionsTail) this._additionsTail._nextAdded = null;
            return this.isDirty;
          }
          /**
           * Inserts a record before `before` or append at the end of the list when `before` is null.
           *
           * Notes:
           * - This method appends at `this._appendAfter`,
           * - This method updates `this._appendAfter`,
           * - The return value is the new value for the insertion pointer.
           */

        }, {
          key: "_insertBeforeOrAppend",
          value: function _insertBeforeOrAppend(before, record) {
            if (before) {
              var prev = before._prev;
              record._next = before;
              record._prev = prev;
              before._prev = record;

              if (prev) {
                prev._next = record;
              }

              if (before === this._mapHead) {
                this._mapHead = record;
              }

              this._appendAfter = before;
              return before;
            }

            if (this._appendAfter) {
              this._appendAfter._next = record;
              record._prev = this._appendAfter;
            } else {
              this._mapHead = record;
            }

            this._appendAfter = record;
            return null;
          }
        }, {
          key: "_getOrCreateRecordForKey",
          value: function _getOrCreateRecordForKey(key, value) {
            if (this._records.has(key)) {
              var _record = this._records.get(key);

              this._maybeAddToChanges(_record, value);

              var prev = _record._prev;
              var next = _record._next;

              if (prev) {
                prev._next = next;
              }

              if (next) {
                next._prev = prev;
              }

              _record._next = null;
              _record._prev = null;
              return _record;
            }

            var record = new KeyValueChangeRecord_(key);

            this._records.set(key, record);

            record.currentValue = value;

            this._addToAdditions(record);

            return record;
          }
          /** @internal */

        }, {
          key: "_reset",
          value: function _reset() {
            if (this.isDirty) {
              var record; // let `_previousMapHead` contain the state of the map before the changes

              this._previousMapHead = this._mapHead;

              for (record = this._previousMapHead; record !== null; record = record._next) {
                record._nextPrevious = record._next;
              } // Update `record.previousValue` with the value of the item before the changes
              // We need to update all changed items (that's those which have been added and changed)


              for (record = this._changesHead; record !== null; record = record._nextChanged) {
                record.previousValue = record.currentValue;
              }

              for (record = this._additionsHead; record != null; record = record._nextAdded) {
                record.previousValue = record.currentValue;
              }

              this._changesHead = this._changesTail = null;
              this._additionsHead = this._additionsTail = null;
              this._removalsHead = null;
            }
          } // Add the record or a given key to the list of changes only when the value has actually changed

        }, {
          key: "_maybeAddToChanges",
          value: function _maybeAddToChanges(record, newValue) {
            if (!Object.is(newValue, record.currentValue)) {
              record.previousValue = record.currentValue;
              record.currentValue = newValue;

              this._addToChanges(record);
            }
          }
        }, {
          key: "_addToAdditions",
          value: function _addToAdditions(record) {
            if (this._additionsHead === null) {
              this._additionsHead = this._additionsTail = record;
            } else {
              this._additionsTail._nextAdded = record;
              this._additionsTail = record;
            }
          }
        }, {
          key: "_addToChanges",
          value: function _addToChanges(record) {
            if (this._changesHead === null) {
              this._changesHead = this._changesTail = record;
            } else {
              this._changesTail._nextChanged = record;
              this._changesTail = record;
            }
          }
          /** @internal */

        }, {
          key: "_forEach",
          value: function _forEach(obj, fn) {
            if (obj instanceof Map) {
              obj.forEach(fn);
            } else {
              Object.keys(obj).forEach(function (k) {
                return fn(obj[k], k);
              });
            }
          }
        }]);

        return DefaultKeyValueDiffer;
      }();

      var KeyValueChangeRecord_ = function KeyValueChangeRecord_(key) {
        _classCallCheck2(this, KeyValueChangeRecord_);

        this.key = key;
        this.previousValue = null;
        this.currentValue = null;
        /** @internal */

        this._nextPrevious = null;
        /** @internal */

        this._next = null;
        /** @internal */

        this._prev = null;
        /** @internal */

        this._nextAdded = null;
        /** @internal */

        this._nextRemoved = null;
        /** @internal */

        this._nextChanged = null;
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function defaultIterableDiffersFactory() {
        return new IterableDiffers([new DefaultIterableDifferFactory()]);
      }
      /**
       * A repository of different iterable diffing strategies used by NgFor, NgClass, and others.
       *
       * @publicApi
       */


      var IterableDiffers = /*#__PURE__*/function () {
        function IterableDiffers(factories) {
          _classCallCheck2(this, IterableDiffers);

          this.factories = factories;
        }

        _createClass2(IterableDiffers, [{
          key: "find",
          value: function find(iterable) {
            var factory = this.factories.find(function (f) {
              return f.supports(iterable);
            });

            if (factory != null) {
              return factory;
            } else {
              throw new Error("Cannot find a differ supporting object '".concat(iterable, "' of type '").concat(getTypeNameForDebugging(iterable), "'"));
            }
          }
        }], [{
          key: "create",
          value: function create(factories, parent) {
            if (parent != null) {
              var copied = parent.factories.slice();
              factories = factories.concat(copied);
            }

            return new IterableDiffers(factories);
          }
          /**
           * Takes an array of {@link IterableDifferFactory} and returns a provider used to extend the
           * inherited {@link IterableDiffers} instance with the provided factories and return a new
           * {@link IterableDiffers} instance.
           *
           * @usageNotes
           * ### Example
           *
           * The following example shows how to extend an existing list of factories,
           * which will only be applied to the injector for this component and its children.
           * This step is all that's required to make a new {@link IterableDiffer} available.
           *
           * ```
           * @Component({
           *   viewProviders: [
           *     IterableDiffers.extend([new ImmutableListDiffer()])
           *   ]
           * })
           * ```
           */

        }, {
          key: "extend",
          value: function extend(factories) {
            return {
              provide: IterableDiffers,
              useFactory: function useFactory(parent) {
                // if parent is null, it means that we are in the root injector and we have just overridden
                // the default injection mechanism for IterableDiffers, in such a case just assume
                // `defaultIterableDiffersFactory`.
                return IterableDiffers.create(factories, parent || defaultIterableDiffersFactory());
              },
              // Dependency technically isn't optional, but we can provide a better error message this way.
              deps: [[IterableDiffers, new SkipSelf(), new Optional()]]
            };
          }
        }]);

        return IterableDiffers;
      }();
      /** @nocollapse */


      IterableDiffers.ɵprov = ɵɵdefineInjectable({
        token: IterableDiffers,
        providedIn: 'root',
        factory: defaultIterableDiffersFactory
      });

      function getTypeNameForDebugging(type) {
        return type['name'] || typeof type;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function defaultKeyValueDiffersFactory() {
        return new KeyValueDiffers([new DefaultKeyValueDifferFactory()]);
      }
      /**
       * A repository of different Map diffing strategies used by NgClass, NgStyle, and others.
       *
       * @publicApi
       */


      var KeyValueDiffers = /*#__PURE__*/function () {
        function KeyValueDiffers(factories) {
          _classCallCheck2(this, KeyValueDiffers);

          this.factories = factories;
        }

        _createClass2(KeyValueDiffers, [{
          key: "find",
          value: function find(kv) {
            var factory = this.factories.find(function (f) {
              return f.supports(kv);
            });

            if (factory) {
              return factory;
            }

            throw new Error("Cannot find a differ supporting object '".concat(kv, "'"));
          }
        }], [{
          key: "create",
          value: function create(factories, parent) {
            if (parent) {
              var copied = parent.factories.slice();
              factories = factories.concat(copied);
            }

            return new KeyValueDiffers(factories);
          }
          /**
           * Takes an array of {@link KeyValueDifferFactory} and returns a provider used to extend the
           * inherited {@link KeyValueDiffers} instance with the provided factories and return a new
           * {@link KeyValueDiffers} instance.
           *
           * @usageNotes
           * ### Example
           *
           * The following example shows how to extend an existing list of factories,
           * which will only be applied to the injector for this component and its children.
           * This step is all that's required to make a new {@link KeyValueDiffer} available.
           *
           * ```
           * @Component({
           *   viewProviders: [
           *     KeyValueDiffers.extend([new ImmutableMapDiffer()])
           *   ]
           * })
           * ```
           */

        }, {
          key: "extend",
          value: function extend(factories) {
            return {
              provide: KeyValueDiffers,
              useFactory: function useFactory(parent) {
                // if parent is null, it means that we are in the root injector and we have just overridden
                // the default injection mechanism for KeyValueDiffers, in such a case just assume
                // `defaultKeyValueDiffersFactory`.
                return KeyValueDiffers.create(factories, parent || defaultKeyValueDiffersFactory());
              },
              // Dependency technically isn't optional, but we can provide a better error message this way.
              deps: [[KeyValueDiffers, new SkipSelf(), new Optional()]]
            };
          }
        }]);

        return KeyValueDiffers;
      }();
      /** @nocollapse */


      KeyValueDiffers.ɵprov = ɵɵdefineInjectable({
        token: KeyValueDiffers,
        providedIn: 'root',
        factory: defaultKeyValueDiffersFactory
      });
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      function collectNativeNodes(tView, lView, tNode, result) {
        var isProjection = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;

        while (tNode !== null) {
          ngDevMode && assertTNodeType(tNode, 3
          /* AnyRNode */
          | 12
          /* AnyContainer */
          | 16
          /* Projection */
          | 32
          /* Icu */
          );
          var lNode = lView[tNode.index];

          if (lNode !== null) {
            result.push(unwrapRNode(lNode));
          } // A given lNode can represent either a native node or a LContainer (when it is a host of a
          // ViewContainerRef). When we find a LContainer we need to descend into it to collect root nodes
          // from the views in this container.


          if (isLContainer(lNode)) {
            for (var i = CONTAINER_HEADER_OFFSET; i < lNode.length; i++) {
              var lViewInAContainer = lNode[i];
              var lViewFirstChildTNode = lViewInAContainer[TVIEW].firstChild;

              if (lViewFirstChildTNode !== null) {
                collectNativeNodes(lViewInAContainer[TVIEW], lViewInAContainer, lViewFirstChildTNode, result);
              }
            }
          }

          var tNodeType = tNode.type;

          if (tNodeType & 8
          /* ElementContainer */
          ) {
              collectNativeNodes(tView, lView, tNode.child, result);
            } else if (tNodeType & 32
          /* Icu */
          ) {
              var nextRNode = icuContainerIterate(tNode, lView);
              var rNode = void 0;

              while (rNode = nextRNode()) {
                result.push(rNode);
              }
            } else if (tNodeType & 16
          /* Projection */
          ) {
              var nodesInSlot = getProjectionNodes(lView, tNode);

              if (Array.isArray(nodesInSlot)) {
                result.push.apply(result, _toConsumableArray(nodesInSlot));
              } else {
                var parentView = getLViewParent(lView[DECLARATION_COMPONENT_VIEW]);
                ngDevMode && assertParentView(parentView);
                collectNativeNodes(parentView[TVIEW], parentView, nodesInSlot, result, true);
              }
            }

          tNode = isProjection ? tNode.projectionNext : tNode.next;
        }

        return result;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ViewRef = /*#__PURE__*/function () {
        function ViewRef(
        /**
         * This represents `LView` associated with the component when ViewRef is a ChangeDetectorRef.
         *
         * When ViewRef is created for a dynamic component, this also represents the `LView` for the
         * component.
         *
         * For a "regular" ViewRef created for an embedded view, this is the `LView` for the embedded
         * view.
         *
         * @internal
         */
        _lView,
        /**
         * This represents the `LView` associated with the point where `ChangeDetectorRef` was
         * requested.
         *
         * This may be different from `_lView` if the `_cdRefInjectingView` is an embedded view.
         */
        _cdRefInjectingView) {
          _classCallCheck2(this, ViewRef);

          this._lView = _lView;
          this._cdRefInjectingView = _cdRefInjectingView;
          this._appRef = null;
          this._attachedToViewContainer = false;
        }

        _createClass2(ViewRef, [{
          key: "rootNodes",
          get: function get() {
            var lView = this._lView;
            var tView = lView[TVIEW];
            return collectNativeNodes(tView, lView, tView.firstChild, []);
          }
        }, {
          key: "context",
          get: function get() {
            return this._lView[CONTEXT];
          }
        }, {
          key: "destroyed",
          get: function get() {
            return (this._lView[FLAGS] & 256
            /* Destroyed */
            ) === 256
            /* Destroyed */
            ;
          }
        }, {
          key: "destroy",
          value: function destroy() {
            if (this._appRef) {
              this._appRef.detachView(this);
            } else if (this._attachedToViewContainer) {
              var parent = this._lView[PARENT];

              if (isLContainer(parent)) {
                var viewRefs = parent[VIEW_REFS];
                var index = viewRefs ? viewRefs.indexOf(this) : -1;

                if (index > -1) {
                  ngDevMode && assertEqual(index, parent.indexOf(this._lView) - CONTAINER_HEADER_OFFSET, 'An attached view should be in the same position within its container as its ViewRef in the VIEW_REFS array.');
                  detachView(parent, index);
                  removeFromArray(viewRefs, index);
                }
              }

              this._attachedToViewContainer = false;
            }

            destroyLView(this._lView[TVIEW], this._lView);
          }
        }, {
          key: "onDestroy",
          value: function onDestroy(callback) {
            storeCleanupWithContext(this._lView[TVIEW], this._lView, null, callback);
          }
          /**
           * Marks a view and all of its ancestors dirty.
           *
           * It also triggers change detection by calling `scheduleTick` internally, which coalesces
           * multiple `markForCheck` calls to into one change detection run.
           *
           * This can be used to ensure an {@link ChangeDetectionStrategy#OnPush OnPush} component is
           * checked when it needs to be re-rendered but the two normal triggers haven't marked it
           * dirty (i.e. inputs haven't changed and events haven't fired in the view).
           *
           * <!-- TODO: Add a link to a chapter on OnPush components -->
           *
           * @usageNotes
           * ### Example
           *
           * ```typescript
           * @Component({
           *   selector: 'my-app',
           *   template: `Number of ticks: {{numberOfTicks}}`
           *   changeDetection: ChangeDetectionStrategy.OnPush,
           * })
           * class AppComponent {
           *   numberOfTicks = 0;
           *
           *   constructor(private ref: ChangeDetectorRef) {
           *     setInterval(() => {
           *       this.numberOfTicks++;
           *       // the following is required, otherwise the view will not be updated
           *       this.ref.markForCheck();
           *     }, 1000);
           *   }
           * }
           * ```
           */

        }, {
          key: "markForCheck",
          value: function markForCheck() {
            markViewDirty(this._cdRefInjectingView || this._lView);
          }
          /**
           * Detaches the view from the change detection tree.
           *
           * Detached views will not be checked during change detection runs until they are
           * re-attached, even if they are dirty. `detach` can be used in combination with
           * {@link ChangeDetectorRef#detectChanges detectChanges} to implement local change
           * detection checks.
           *
           * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->
           * <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->
           *
           * @usageNotes
           * ### Example
           *
           * The following example defines a component with a large list of readonly data.
           * Imagine the data changes constantly, many times per second. For performance reasons,
           * we want to check and update the list every five seconds. We can do that by detaching
           * the component's change detector and doing a local check every five seconds.
           *
           * ```typescript
           * class DataProvider {
           *   // in a real application the returned data will be different every time
           *   get data() {
           *     return [1,2,3,4,5];
           *   }
           * }
           *
           * @Component({
           *   selector: 'giant-list',
           *   template: `
           *     <li *ngFor="let d of dataProvider.data">Data {{d}}</li>
           *   `,
           * })
           * class GiantList {
           *   constructor(private ref: ChangeDetectorRef, private dataProvider: DataProvider) {
           *     ref.detach();
           *     setInterval(() => {
           *       this.ref.detectChanges();
           *     }, 5000);
           *   }
           * }
           *
           * @Component({
           *   selector: 'app',
           *   providers: [DataProvider],
           *   template: `
           *     <giant-list><giant-list>
           *   `,
           * })
           * class App {
           * }
           * ```
           */

        }, {
          key: "detach",
          value: function detach() {
            this._lView[FLAGS] &= ~128
            /* Attached */
            ;
          }
          /**
           * Re-attaches a view to the change detection tree.
           *
           * This can be used to re-attach views that were previously detached from the tree
           * using {@link ChangeDetectorRef#detach detach}. Views are attached to the tree by default.
           *
           * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->
           *
           * @usageNotes
           * ### Example
           *
           * The following example creates a component displaying `live` data. The component will detach
           * its change detector from the main change detector tree when the component's live property
           * is set to false.
           *
           * ```typescript
           * class DataProvider {
           *   data = 1;
           *
           *   constructor() {
           *     setInterval(() => {
           *       this.data = this.data * 2;
           *     }, 500);
           *   }
           * }
           *
           * @Component({
           *   selector: 'live-data',
           *   inputs: ['live'],
           *   template: 'Data: {{dataProvider.data}}'
           * })
           * class LiveData {
           *   constructor(private ref: ChangeDetectorRef, private dataProvider: DataProvider) {}
           *
           *   set live(value) {
           *     if (value) {
           *       this.ref.reattach();
           *     } else {
           *       this.ref.detach();
           *     }
           *   }
           * }
           *
           * @Component({
           *   selector: 'my-app',
           *   providers: [DataProvider],
           *   template: `
           *     Live Update: <input type="checkbox" [(ngModel)]="live">
           *     <live-data [live]="live"><live-data>
           *   `,
           * })
           * class AppComponent {
           *   live = true;
           * }
           * ```
           */

        }, {
          key: "reattach",
          value: function reattach() {
            this._lView[FLAGS] |= 128
            /* Attached */
            ;
          }
          /**
           * Checks the view and its children.
           *
           * This can also be used in combination with {@link ChangeDetectorRef#detach detach} to implement
           * local change detection checks.
           *
           * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->
           * <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->
           *
           * @usageNotes
           * ### Example
           *
           * The following example defines a component with a large list of readonly data.
           * Imagine, the data changes constantly, many times per second. For performance reasons,
           * we want to check and update the list every five seconds.
           *
           * We can do that by detaching the component's change detector and doing a local change detection
           * check every five seconds.
           *
           * See {@link ChangeDetectorRef#detach detach} for more information.
           */

        }, {
          key: "detectChanges",
          value: function detectChanges() {
            detectChangesInternal(this._lView[TVIEW], this._lView, this.context);
          }
          /**
           * Checks the change detector and its children, and throws if any changes are detected.
           *
           * This is used in development mode to verify that running change detection doesn't
           * introduce other changes.
           */

        }, {
          key: "checkNoChanges",
          value: function checkNoChanges() {
            checkNoChangesInternal(this._lView[TVIEW], this._lView, this.context);
          }
        }, {
          key: "attachToViewContainerRef",
          value: function attachToViewContainerRef() {
            if (this._appRef) {
              throw new Error('This view is already attached directly to the ApplicationRef!');
            }

            this._attachedToViewContainer = true;
          }
        }, {
          key: "detachFromAppRef",
          value: function detachFromAppRef() {
            this._appRef = null;
            renderDetachView(this._lView[TVIEW], this._lView);
          }
        }, {
          key: "attachToAppRef",
          value: function attachToAppRef(appRef) {
            if (this._attachedToViewContainer) {
              throw new Error('This view is already attached to a ViewContainer!');
            }

            this._appRef = appRef;
          }
        }]);

        return ViewRef;
      }();
      /** @internal */


      var RootViewRef = /*#__PURE__*/function (_ViewRef) {
        _inherits2(RootViewRef, _ViewRef);

        var _super309 = _createSuper(RootViewRef);

        function RootViewRef(_view) {
          var _this719;

          _classCallCheck2(this, RootViewRef);

          _this719 = _super309.call(this, _view);
          _this719._view = _view;
          return _this719;
        }

        _createClass2(RootViewRef, [{
          key: "detectChanges",
          value: function detectChanges() {
            detectChangesInRootView(this._view);
          }
        }, {
          key: "checkNoChanges",
          value: function checkNoChanges() {
            checkNoChangesInRootView(this._view);
          }
        }, {
          key: "context",
          get: function get() {
            return null;
          }
        }]);

        return RootViewRef;
      }(ViewRef);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var SWITCH_CHANGE_DETECTOR_REF_FACTORY__POST_R3__ = injectChangeDetectorRef;
      var SWITCH_CHANGE_DETECTOR_REF_FACTORY__PRE_R3__ = noop;
      var SWITCH_CHANGE_DETECTOR_REF_FACTORY = SWITCH_CHANGE_DETECTOR_REF_FACTORY__POST_R3__;
      /**
       * Base class that provides change detection functionality.
       * A change-detection tree collects all views that are to be checked for changes.
       * Use the methods to add and remove views from the tree, initiate change-detection,
       * and explicitly mark views as _dirty_, meaning that they have changed and need to be re-rendered.
       *
       * @see [Using change detection hooks](guide/lifecycle-hooks#using-change-detection-hooks)
       * @see [Defining custom change detection](guide/lifecycle-hooks#defining-custom-change-detection)
       *
       * @usageNotes
       *
       * The following examples demonstrate how to modify default change-detection behavior
       * to perform explicit detection when needed.
       *
       * ### Use `markForCheck()` with `CheckOnce` strategy
       *
       * The following example sets the `OnPush` change-detection strategy for a component
       * (`CheckOnce`, rather than the default `CheckAlways`), then forces a second check
       * after an interval. See [live demo](https://plnkr.co/edit/GC512b?p=preview).
       *
       * <code-example path="core/ts/change_detect/change-detection.ts"
       * region="mark-for-check"></code-example>
       *
       * ### Detach change detector to limit how often check occurs
       *
       * The following example defines a component with a large list of read-only data
       * that is expected to change constantly, many times per second.
       * To improve performance, we want to check and update the list
       * less often than the changes actually occur. To do that, we detach
       * the component's change detector and perform an explicit local check every five seconds.
       *
       * <code-example path="core/ts/change_detect/change-detection.ts" region="detach"></code-example>
       *
       *
       * ### Reattaching a detached component
       *
       * The following example creates a component displaying live data.
       * The component detaches its change detector from the main change detector tree
       * when the `live` property is set to false, and reattaches it when the property
       * becomes true.
       *
       * <code-example path="core/ts/change_detect/change-detection.ts" region="reattach"></code-example>
       *
       * @publicApi
       */

      var ChangeDetectorRef = function ChangeDetectorRef() {
        _classCallCheck2(this, ChangeDetectorRef);
      };
      /**
       * @internal
       * @nocollapse
       */


      ChangeDetectorRef.__NG_ELEMENT_ID__ = SWITCH_CHANGE_DETECTOR_REF_FACTORY;
      /**
       * This marker is need so that the JIT compiler can correctly identify this class as special.
       *
       * @internal
       * @nocollapse
       */

      ChangeDetectorRef.__ChangeDetectorRef__ = true;
      /** Returns a ChangeDetectorRef (a.k.a. a ViewRef) */

      function injectChangeDetectorRef() {
        var isPipe = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
        return createViewRef(getCurrentTNode(), getLView(), isPipe);
      }
      /**
       * Creates a ViewRef and stores it on the injector as ChangeDetectorRef (public alias).
       *
       * @param tNode The node that is requesting a ChangeDetectorRef
       * @param lView The view to which the node belongs
       * @param isPipe Whether the view is being injected into a pipe.
       * @returns The ChangeDetectorRef to use
       */


      function createViewRef(tNode, lView, isPipe) {
        // `isComponentView` will be true for Component and Directives (but not for Pipes).
        // See https://github.com/angular/angular/pull/33072 for proper fix
        var isComponentView = !isPipe && isComponentHost(tNode);

        if (isComponentView) {
          // The LView represents the location where the component is declared.
          // Instead we want the LView for the component View and so we need to look it up.
          var componentView = getComponentLViewByIndex(tNode.index, lView); // look down

          return new ViewRef(componentView, componentView);
        } else if (tNode.type & (3
        /* AnyRNode */
        | 12
        /* AnyContainer */
        | 32
        /* Icu */
        )) {
          // The LView represents the location where the injection is requested from.
          // We need to locate the containing LView (in case where the `lView` is an embedded view)
          var hostComponentView = lView[DECLARATION_COMPONENT_VIEW]; // look up

          return new ViewRef(hostComponentView, lView);
        }

        return null;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Structural diffing for `Object`s and `Map`s.
       */


      var keyValDiff = [new DefaultKeyValueDifferFactory()];
      /**
       * Structural diffing for `Iterable` types such as `Array`s.
       */

      var iterableDiff = [new DefaultIterableDifferFactory()];
      var defaultIterableDiffers = new IterableDiffers(iterableDiff);
      var defaultKeyValueDiffers = new KeyValueDiffers(keyValDiff);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var SWITCH_TEMPLATE_REF_FACTORY__POST_R3__ = injectTemplateRef;
      var SWITCH_TEMPLATE_REF_FACTORY__PRE_R3__ = noop;
      var SWITCH_TEMPLATE_REF_FACTORY = SWITCH_TEMPLATE_REF_FACTORY__POST_R3__;
      /**
       * Represents an embedded template that can be used to instantiate embedded views.
       * To instantiate embedded views based on a template, use the `ViewContainerRef`
       * method `createEmbeddedView()`.
       *
       * Access a `TemplateRef` instance by placing a directive on an `<ng-template>`
       * element (or directive prefixed with `*`). The `TemplateRef` for the embedded view
       * is injected into the constructor of the directive,
       * using the `TemplateRef` token.
       *
       * You can also use a `Query` to find a `TemplateRef` associated with
       * a component or a directive.
       *
       * @see `ViewContainerRef`
       * @see [Navigate the Component Tree with DI](guide/dependency-injection-navtree)
       *
       * @publicApi
       */

      var TemplateRef = function TemplateRef() {
        _classCallCheck2(this, TemplateRef);
      };
      /**
       * @internal
       * @nocollapse
       */


      TemplateRef.__NG_ELEMENT_ID__ = SWITCH_TEMPLATE_REF_FACTORY;
      var ViewEngineTemplateRef = TemplateRef;

      var R3TemplateRef = /*#__PURE__*/function (_ViewEngineTemplateRe) {
        _inherits2(TemplateRef, _ViewEngineTemplateRe);

        var _super310 = _createSuper(TemplateRef);

        function TemplateRef(_declarationLView, _declarationTContainer, elementRef) {
          var _this720;

          _classCallCheck2(this, TemplateRef);

          _this720 = _super310.call(this);
          _this720._declarationLView = _declarationLView;
          _this720._declarationTContainer = _declarationTContainer;
          _this720.elementRef = elementRef;
          return _this720;
        }

        _createClass2(TemplateRef, [{
          key: "createEmbeddedView",
          value: function createEmbeddedView(context) {
            var embeddedTView = this._declarationTContainer.tViews;
            var embeddedLView = createLView(this._declarationLView, embeddedTView, context, 16
            /* CheckAlways */
            , null, embeddedTView.declTNode, null, null, null, null);
            var declarationLContainer = this._declarationLView[this._declarationTContainer.index];
            ngDevMode && assertLContainer(declarationLContainer);
            embeddedLView[DECLARATION_LCONTAINER] = declarationLContainer;
            var declarationViewLQueries = this._declarationLView[QUERIES];

            if (declarationViewLQueries !== null) {
              embeddedLView[QUERIES] = declarationViewLQueries.createEmbeddedView(embeddedTView);
            }

            renderView(embeddedTView, embeddedLView, context);
            return new ViewRef(embeddedLView);
          }
        }]);

        return TemplateRef;
      }(ViewEngineTemplateRef);
      /**
       * Creates a TemplateRef given a node.
       *
       * @returns The TemplateRef instance to use
       */


      function injectTemplateRef() {
        return createTemplateRef(getCurrentTNode(), getLView());
      }
      /**
       * Creates a TemplateRef and stores it on the injector.
       *
       * @param hostTNode The node on which a TemplateRef is requested
       * @param hostLView The `LView` to which the node belongs
       * @returns The TemplateRef instance or null if we can't create a TemplateRef on a given node type
       */


      function createTemplateRef(hostTNode, hostLView) {
        if (hostTNode.type & 4
        /* Container */
        ) {
            ngDevMode && assertDefined(hostTNode.tViews, 'TView must be allocated');
            return new R3TemplateRef(hostLView, hostTNode, createElementRef(hostTNode, hostLView));
          }

        return null;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Represents an instance of an `NgModule` created by an `NgModuleFactory`.
       * Provides access to the `NgModule` instance and related objects.
       *
       * @publicApi
       */


      var NgModuleRef = function NgModuleRef() {
        _classCallCheck2(this, NgModuleRef);
      };
      /**
       * @publicApi
       */


      var NgModuleFactory = function NgModuleFactory() {
        _classCallCheck2(this, NgModuleFactory);
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var SWITCH_VIEW_CONTAINER_REF_FACTORY__POST_R3__ = injectViewContainerRef;
      var SWITCH_VIEW_CONTAINER_REF_FACTORY__PRE_R3__ = noop;
      var SWITCH_VIEW_CONTAINER_REF_FACTORY = SWITCH_VIEW_CONTAINER_REF_FACTORY__POST_R3__;
      /**
       * Represents a container where one or more views can be attached to a component.
       *
       * Can contain *host views* (created by instantiating a
       * component with the `createComponent()` method), and *embedded views*
       * (created by instantiating a `TemplateRef` with the `createEmbeddedView()` method).
       *
       * A view container instance can contain other view containers,
       * creating a [view hierarchy](guide/glossary#view-tree).
       *
       * @see `ComponentRef`
       * @see `EmbeddedViewRef`
       *
       * @publicApi
       */

      var ViewContainerRef = function ViewContainerRef() {
        _classCallCheck2(this, ViewContainerRef);
      };
      /**
       * @internal
       * @nocollapse
       */


      ViewContainerRef.__NG_ELEMENT_ID__ = SWITCH_VIEW_CONTAINER_REF_FACTORY;
      /**
       * Creates a ViewContainerRef and stores it on the injector. Or, if the ViewContainerRef
       * already exists, retrieves the existing ViewContainerRef.
       *
       * @returns The ViewContainerRef instance to use
       */

      function injectViewContainerRef() {
        var previousTNode = getCurrentTNode();
        return createContainerRef(previousTNode, getLView());
      }

      var VE_ViewContainerRef = ViewContainerRef;

      var R3ViewContainerRef = /*#__PURE__*/function (_VE_ViewContainerRef) {
        _inherits2(ViewContainerRef, _VE_ViewContainerRef);

        var _super311 = _createSuper(ViewContainerRef);

        function ViewContainerRef(_lContainer, _hostTNode, _hostLView) {
          var _this721;

          _classCallCheck2(this, ViewContainerRef);

          _this721 = _super311.call(this);
          _this721._lContainer = _lContainer;
          _this721._hostTNode = _hostTNode;
          _this721._hostLView = _hostLView;
          return _this721;
        }

        _createClass2(ViewContainerRef, [{
          key: "element",
          get: function get() {
            return createElementRef(this._hostTNode, this._hostLView);
          }
        }, {
          key: "injector",
          get: function get() {
            return new NodeInjector(this._hostTNode, this._hostLView);
          }
          /** @deprecated No replacement */

        }, {
          key: "parentInjector",
          get: function get() {
            var parentLocation = getParentInjectorLocation(this._hostTNode, this._hostLView);

            if (hasParentInjector(parentLocation)) {
              var parentView = getParentInjectorView(parentLocation, this._hostLView);
              var injectorIndex = getParentInjectorIndex(parentLocation);
              ngDevMode && assertNodeInjector(parentView, injectorIndex);
              var parentTNode = parentView[TVIEW].data[injectorIndex + 8
              /* TNODE */
              ];
              return new NodeInjector(parentTNode, parentView);
            } else {
              return new NodeInjector(null, this._hostLView);
            }
          }
        }, {
          key: "clear",
          value: function clear() {
            while (this.length > 0) {
              this.remove(this.length - 1);
            }
          }
        }, {
          key: "get",
          value: function get(index) {
            var viewRefs = getViewRefs(this._lContainer);
            return viewRefs !== null && viewRefs[index] || null;
          }
        }, {
          key: "length",
          get: function get() {
            return this._lContainer.length - CONTAINER_HEADER_OFFSET;
          }
        }, {
          key: "createEmbeddedView",
          value: function createEmbeddedView(templateRef, context, index) {
            var viewRef = templateRef.createEmbeddedView(context || {});
            this.insert(viewRef, index);
            return viewRef;
          }
        }, {
          key: "createComponent",
          value: function createComponent(componentFactory, index, injector, projectableNodes, ngModuleRef) {
            var contextInjector = injector || this.parentInjector;

            if (!ngModuleRef && componentFactory.ngModule == null && contextInjector) {
              // DO NOT REFACTOR. The code here used to have a `value || undefined` expression
              // which seems to cause internal google apps to fail. This is documented in the
              // following internal bug issue: go/b/142967802
              var result = contextInjector.get(NgModuleRef, null);

              if (result) {
                ngModuleRef = result;
              }
            }

            var componentRef = componentFactory.create(contextInjector, projectableNodes, undefined, ngModuleRef);
            this.insert(componentRef.hostView, index);
            return componentRef;
          }
        }, {
          key: "insert",
          value: function insert(viewRef, index) {
            var lView = viewRef._lView;
            var tView = lView[TVIEW];

            if (ngDevMode && viewRef.destroyed) {
              throw new Error('Cannot insert a destroyed View in a ViewContainer!');
            }

            if (viewAttachedToContainer(lView)) {
              // If view is already attached, detach it first so we clean up references appropriately.
              var prevIdx = this.indexOf(viewRef); // A view might be attached either to this or a different container. The `prevIdx` for
              // those cases will be:
              // equal to -1 for views attached to this ViewContainerRef
              // >= 0 for views attached to a different ViewContainerRef

              if (prevIdx !== -1) {
                this.detach(prevIdx);
              } else {
                var prevLContainer = lView[PARENT];
                ngDevMode && assertEqual(isLContainer(prevLContainer), true, 'An attached view should have its PARENT point to a container.'); // We need to re-create a R3ViewContainerRef instance since those are not stored on
                // LView (nor anywhere else).

                var prevVCRef = new R3ViewContainerRef(prevLContainer, prevLContainer[T_HOST], prevLContainer[PARENT]);
                prevVCRef.detach(prevVCRef.indexOf(viewRef));
              }
            } // Logical operation of adding `LView` to `LContainer`


            var adjustedIdx = this._adjustIndex(index);

            var lContainer = this._lContainer;
            insertView(tView, lView, lContainer, adjustedIdx); // Physical operation of adding the DOM nodes.

            var beforeNode = getBeforeNodeForView(adjustedIdx, lContainer);
            var renderer = lView[RENDERER];
            var parentRNode = nativeParentNode(renderer, lContainer[NATIVE]);

            if (parentRNode !== null) {
              addViewToContainer(tView, lContainer[T_HOST], renderer, lView, parentRNode, beforeNode);
            }

            viewRef.attachToViewContainerRef();
            addToArray(getOrCreateViewRefs(lContainer), adjustedIdx, viewRef);
            return viewRef;
          }
        }, {
          key: "move",
          value: function move(viewRef, newIndex) {
            if (ngDevMode && viewRef.destroyed) {
              throw new Error('Cannot move a destroyed View in a ViewContainer!');
            }

            return this.insert(viewRef, newIndex);
          }
        }, {
          key: "indexOf",
          value: function indexOf(viewRef) {
            var viewRefsArr = getViewRefs(this._lContainer);
            return viewRefsArr !== null ? viewRefsArr.indexOf(viewRef) : -1;
          }
        }, {
          key: "remove",
          value: function remove(index) {
            var adjustedIdx = this._adjustIndex(index, -1);

            var detachedView = detachView(this._lContainer, adjustedIdx);

            if (detachedView) {
              // Before destroying the view, remove it from the container's array of `ViewRef`s.
              // This ensures the view container length is updated before calling
              // `destroyLView`, which could recursively call view container methods that
              // rely on an accurate container length.
              // (e.g. a method on this view container being called by a child directive's OnDestroy
              // lifecycle hook)
              removeFromArray(getOrCreateViewRefs(this._lContainer), adjustedIdx);
              destroyLView(detachedView[TVIEW], detachedView);
            }
          }
        }, {
          key: "detach",
          value: function detach(index) {
            var adjustedIdx = this._adjustIndex(index, -1);

            var view = detachView(this._lContainer, adjustedIdx);
            var wasDetached = view && removeFromArray(getOrCreateViewRefs(this._lContainer), adjustedIdx) != null;
            return wasDetached ? new ViewRef(view) : null;
          }
        }, {
          key: "_adjustIndex",
          value: function _adjustIndex(index) {
            var shift = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;

            if (index == null) {
              return this.length + shift;
            }

            if (ngDevMode) {
              assertGreaterThan(index, -1, "ViewRef index must be positive, got ".concat(index)); // +1 because it's legal to insert at the end.

              assertLessThan(index, this.length + 1 + shift, 'index');
            }

            return index;
          }
        }]);

        return ViewContainerRef;
      }(VE_ViewContainerRef);

      function getViewRefs(lContainer) {
        return lContainer[VIEW_REFS];
      }

      function getOrCreateViewRefs(lContainer) {
        return lContainer[VIEW_REFS] || (lContainer[VIEW_REFS] = []);
      }
      /**
       * Creates a ViewContainerRef and stores it on the injector.
       *
       * @param ViewContainerRefToken The ViewContainerRef type
       * @param ElementRefToken The ElementRef type
       * @param hostTNode The node that is requesting a ViewContainerRef
       * @param hostLView The view to which the node belongs
       * @returns The ViewContainerRef instance to use
       */


      function createContainerRef(hostTNode, hostLView) {
        ngDevMode && assertTNodeType(hostTNode, 12
        /* AnyContainer */
        | 3
        /* AnyRNode */
        );
        var lContainer;
        var slotValue = hostLView[hostTNode.index];

        if (isLContainer(slotValue)) {
          // If the host is a container, we don't need to create a new LContainer
          lContainer = slotValue;
        } else {
          var commentNode; // If the host is an element container, the native host element is guaranteed to be a
          // comment and we can reuse that comment as anchor element for the new LContainer.
          // The comment node in question is already part of the DOM structure so we don't need to append
          // it again.

          if (hostTNode.type & 8
          /* ElementContainer */
          ) {
              commentNode = unwrapRNode(slotValue);
            } else {
            // If the host is a regular element, we have to insert a comment node manually which will
            // be used as an anchor when inserting elements. In this specific case we use low-level DOM
            // manipulation to insert it.
            var renderer = hostLView[RENDERER];
            ngDevMode && ngDevMode.rendererCreateComment++;
            commentNode = renderer.createComment(ngDevMode ? 'container' : '');
            var hostNative = getNativeByTNode(hostTNode, hostLView);
            var parentOfHostNative = nativeParentNode(renderer, hostNative);
            nativeInsertBefore(renderer, parentOfHostNative, commentNode, nativeNextSibling(renderer, hostNative), false);
          }

          hostLView[hostTNode.index] = lContainer = createLContainer(slotValue, hostLView, commentNode, hostTNode);
          addToViewTree(hostLView, lContainer);
        }

        return new R3ViewContainerRef(lContainer, hostTNode, hostLView);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function expressionChangedAfterItHasBeenCheckedError(context, oldValue, currValue, isFirstCheck) {
        var msg = "ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: '".concat(oldValue, "'. Current value: '").concat(currValue, "'.");

        if (isFirstCheck) {
          msg += " It seems like the view has been created after its parent and its children have been dirty checked." + " Has it been created in a change detection hook ?";
        }

        return viewDebugError(msg, context);
      }

      function viewWrappedDebugError(err, context) {
        if (!(err instanceof Error)) {
          // errors that are not Error instances don't have a stack,
          // so it is ok to wrap them into a new Error object...
          err = new Error(err.toString());
        }

        _addDebugContext(err, context);

        return err;
      }

      function viewDebugError(msg, context) {
        var err = new Error(msg);

        _addDebugContext(err, context);

        return err;
      }

      function _addDebugContext(err, context) {
        err[ERROR_DEBUG_CONTEXT] = context;
        err[ERROR_LOGGER] = context.logError.bind(context);
      }

      function isViewDebugError(err) {
        return !!getDebugContext(err);
      }

      function viewDestroyedError(action) {
        return new Error("ViewDestroyedError: Attempt to use a destroyed view: ".concat(action));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // Called before each cycle of a view's check to detect whether this is in the
      // initState for which we need to call ngOnInit, ngAfterContentInit or ngAfterViewInit
      // lifecycle methods. Returns true if this check cycle should call lifecycle
      // methods.


      function shiftInitState(view, priorInitState, newInitState) {
        // Only update the InitState if we are currently in the prior state.
        // For example, only move into CallingInit if we are in BeforeInit. Only
        // move into CallingContentInit if we are in CallingInit. Normally this will
        // always be true because of how checkCycle is called in checkAndUpdateView.
        // However, if checkAndUpdateView is called recursively or if an exception is
        // thrown while checkAndUpdateView is running, checkAndUpdateView starts over
        // from the beginning. This ensures the state is monotonically increasing,
        // terminating in the AfterInit state, which ensures the Init methods are called
        // at least once and only once.
        var state = view.state;
        var initState = state & 1792
        /* InitState_Mask */
        ;

        if (initState === priorInitState) {
          view.state = state & ~1792
          /* InitState_Mask */
          | newInitState;
          view.initIndex = -1;
          return true;
        }

        return initState === newInitState;
      } // Returns true if the lifecycle init method should be called for the node with
      // the given init index.


      function shouldCallLifecycleInitHook(view, initState, index) {
        if ((view.state & 1792
        /* InitState_Mask */
        ) === initState && view.initIndex <= index) {
          view.initIndex = index + 1;
          return true;
        }

        return false;
      }
      /**
       * Node instance data.
       *
       * We have a separate type per NodeType to save memory
       * (TextData | ElementData | ProviderData | PureExpressionData | QueryList<any>)
       *
       * To keep our code monomorphic,
       * we prohibit using `NodeData` directly but enforce the use of accessors (`asElementData`, ...).
       * This way, no usage site can get a `NodeData` from view.nodes and then use it for different
       * purposes.
       */


      var NodeData = function NodeData() {
        _classCallCheck2(this, NodeData);
      };
      /**
       * Accessor for view.nodes, enforcing that every usage site stays monomorphic.
       */


      function asTextData(view, index) {
        return view.nodes[index];
      }
      /**
       * Accessor for view.nodes, enforcing that every usage site stays monomorphic.
       */


      function asElementData(view, index) {
        return view.nodes[index];
      }
      /**
       * Accessor for view.nodes, enforcing that every usage site stays monomorphic.
       */


      function asProviderData(view, index) {
        return view.nodes[index];
      }
      /**
       * Accessor for view.nodes, enforcing that every usage site stays monomorphic.
       */


      function asPureExpressionData(view, index) {
        return view.nodes[index];
      }
      /**
       * Accessor for view.nodes, enforcing that every usage site stays monomorphic.
       */


      function asQueryList(view, index) {
        return view.nodes[index];
      }

      var DebugContext = function DebugContext() {
        _classCallCheck2(this, DebugContext);
      };
      /**
       * This object is used to prevent cycles in the source files and to have a place where
       * debug mode can hook it. It is lazily filled when `isDevMode` is known.
       */


      var Services = {
        setCurrentNode: undefined,
        createRootView: undefined,
        createEmbeddedView: undefined,
        createComponentView: undefined,
        createNgModuleRef: undefined,
        overrideProvider: undefined,
        overrideComponentView: undefined,
        clearOverrides: undefined,
        checkAndUpdateView: undefined,
        checkNoChangesView: undefined,
        destroyView: undefined,
        resolveDep: undefined,
        createDebugContext: undefined,
        handleEvent: undefined,
        updateDirectives: undefined,
        updateRenderer: undefined,
        dirtyParentQueries: undefined
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var NOOP = function NOOP() {};

      var _tokenKeyCache = new Map();

      function tokenKey(token) {
        var key = _tokenKeyCache.get(token);

        if (!key) {
          key = stringify(token) + '_' + _tokenKeyCache.size;

          _tokenKeyCache.set(token, key);
        }

        return key;
      }

      function unwrapValue(view, nodeIdx, bindingIdx, value) {
        if (WrappedValue.isWrapped(value)) {
          value = WrappedValue.unwrap(value);
          var globalBindingIdx = view.def.nodes[nodeIdx].bindingIndex + bindingIdx;
          var oldValue = WrappedValue.unwrap(view.oldValues[globalBindingIdx]);
          view.oldValues[globalBindingIdx] = new WrappedValue(oldValue);
        }

        return value;
      }

      var UNDEFINED_RENDERER_TYPE_ID = '$$undefined';
      var EMPTY_RENDERER_TYPE_ID = '$$empty'; // Attention: this function is called as top level function.
      // Putting any logic in here will destroy closure tree shaking!

      function createRendererType2(values) {
        return {
          id: UNDEFINED_RENDERER_TYPE_ID,
          styles: values.styles,
          encapsulation: values.encapsulation,
          data: values.data
        };
      }

      var _renderCompCount$1 = 0;

      function resolveRendererType2(type) {
        if (type && type.id === UNDEFINED_RENDERER_TYPE_ID) {
          // first time we see this RendererType2. Initialize it...
          var isFilled = type.encapsulation != null && type.encapsulation !== ViewEncapsulation.None || type.styles.length || Object.keys(type.data).length;

          if (isFilled) {
            type.id = "c".concat(_renderCompCount$1++);
          } else {
            type.id = EMPTY_RENDERER_TYPE_ID;
          }
        }

        if (type && type.id === EMPTY_RENDERER_TYPE_ID) {
          type = null;
        }

        return type || null;
      }

      function checkBinding(view, def, bindingIdx, value) {
        var oldValues = view.oldValues;

        if (view.state & 2
        /* FirstCheck */
        || !Object.is(oldValues[def.bindingIndex + bindingIdx], value)) {
          return true;
        }

        return false;
      }

      function checkAndUpdateBinding(view, def, bindingIdx, value) {
        if (checkBinding(view, def, bindingIdx, value)) {
          view.oldValues[def.bindingIndex + bindingIdx] = value;
          return true;
        }

        return false;
      }

      function checkBindingNoChanges(view, def, bindingIdx, value) {
        var oldValue = view.oldValues[def.bindingIndex + bindingIdx];

        if (view.state & 1
        /* BeforeFirstCheck */
        || !devModeEqual(oldValue, value)) {
          var bindingName = def.bindings[bindingIdx].name;
          throw expressionChangedAfterItHasBeenCheckedError(Services.createDebugContext(view, def.nodeIndex), "".concat(bindingName, ": ").concat(oldValue), "".concat(bindingName, ": ").concat(value), (view.state & 1
          /* BeforeFirstCheck */
          ) !== 0);
        }
      }

      function markParentViewsForCheck(view) {
        var currView = view;

        while (currView) {
          if (currView.def.flags & 2
          /* OnPush */
          ) {
              currView.state |= 8
              /* ChecksEnabled */
              ;
            }

          currView = currView.viewContainerParent || currView.parent;
        }
      }

      function markParentViewsForCheckProjectedViews(view, endView) {
        var currView = view;

        while (currView && currView !== endView) {
          currView.state |= 64
          /* CheckProjectedViews */
          ;
          currView = currView.viewContainerParent || currView.parent;
        }
      }

      function dispatchEvent(view, nodeIndex, eventName, event) {
        try {
          var nodeDef = view.def.nodes[nodeIndex];
          var startView = nodeDef.flags & 33554432
          /* ComponentView */
          ? asElementData(view, nodeIndex).componentView : view;
          markParentViewsForCheck(startView);
          return Services.handleEvent(view, nodeIndex, eventName, event);
        } catch (e) {
          // Attention: Don't rethrow, as it would cancel Observable subscriptions!
          view.root.errorHandler.handleError(e);
        }
      }

      function declaredViewContainer(view) {
        if (view.parent) {
          var parentView = view.parent;
          return asElementData(parentView, view.parentNodeDef.nodeIndex);
        }

        return null;
      }
      /**
       * for component views, this is the host element.
       * for embedded views, this is the index of the parent node
       * that contains the view container.
       */


      function viewParentEl(view) {
        var parentView = view.parent;

        if (parentView) {
          return view.parentNodeDef.parent;
        } else {
          return null;
        }
      }

      function renderNode(view, def) {
        switch (def.flags & 201347067
        /* Types */
        ) {
          case 1
          /* TypeElement */
          :
            return asElementData(view, def.nodeIndex).renderElement;

          case 2
          /* TypeText */
          :
            return asTextData(view, def.nodeIndex).renderText;
        }
      }

      function elementEventFullName(target, name) {
        return target ? "".concat(target, ":").concat(name) : name;
      }

      function isComponentView(view) {
        return !!view.parent && !!(view.parentNodeDef.flags & 32768
        /* Component */
        );
      }

      function isEmbeddedView(view) {
        return !!view.parent && !(view.parentNodeDef.flags & 32768
        /* Component */
        );
      }

      function filterQueryId(queryId) {
        return 1 << queryId % 32;
      }

      function splitMatchedQueriesDsl(matchedQueriesDsl) {
        var matchedQueries = {};
        var matchedQueryIds = 0;
        var references = {};

        if (matchedQueriesDsl) {
          matchedQueriesDsl.forEach(function (_ref114) {
            var _ref115 = _slicedToArray(_ref114, 2),
                queryId = _ref115[0],
                valueType = _ref115[1];

            if (typeof queryId === 'number') {
              matchedQueries[queryId] = valueType;
              matchedQueryIds |= filterQueryId(queryId);
            } else {
              references[queryId] = valueType;
            }
          });
        }

        return {
          matchedQueries: matchedQueries,
          references: references,
          matchedQueryIds: matchedQueryIds
        };
      }

      function splitDepsDsl(deps, sourceName) {
        return deps.map(function (value) {
          var token;
          var flags;

          if (Array.isArray(value)) {
            var _value10 = _slicedToArray(value, 2);

            flags = _value10[0];
            token = _value10[1];
          } else {
            flags = 0
            /* None */
            ;
            token = value;
          }

          if (token && (typeof token === 'function' || typeof token === 'object') && sourceName) {
            Object.defineProperty(token, SOURCE, {
              value: sourceName,
              configurable: true
            });
          }

          return {
            flags: flags,
            token: token,
            tokenKey: tokenKey(token)
          };
        });
      }

      function getParentRenderElement(view, renderHost, def) {
        var renderParent = def.renderParent;

        if (renderParent) {
          if ((renderParent.flags & 1
          /* TypeElement */
          ) === 0 || (renderParent.flags & 33554432
          /* ComponentView */
          ) === 0 || renderParent.element.componentRendererType && (renderParent.element.componentRendererType.encapsulation === ViewEncapsulation.ShadowDom || // TODO(FW-2290): remove the `encapsulation === 1` fallback logic in v12.
          renderParent.element.componentRendererType.encapsulation === 1)) {
            // only children of non components, or children of components with native encapsulation should
            // be attached.
            return asElementData(view, def.renderParent.nodeIndex).renderElement;
          }
        } else {
          return renderHost;
        }
      }

      var DEFINITION_CACHE = new WeakMap();

      function resolveDefinition(factory) {
        var value = DEFINITION_CACHE.get(factory);

        if (!value) {
          value = factory(function () {
            return NOOP;
          });
          value.factory = factory;
          DEFINITION_CACHE.set(factory, value);
        }

        return value;
      }

      function rootRenderNodes(view) {
        var renderNodes = [];
        visitRootRenderNodes(view, 0
        /* Collect */
        , undefined, undefined, renderNodes);
        return renderNodes;
      }

      function visitRootRenderNodes(view, action, parentNode, nextSibling, target) {
        // We need to re-compute the parent node in case the nodes have been moved around manually
        if (action === 3
        /* RemoveChild */
        ) {
            parentNode = view.renderer.parentNode(renderNode(view, view.def.lastRenderRootNode));
          }

        visitSiblingRenderNodes(view, action, 0, view.def.nodes.length - 1, parentNode, nextSibling, target);
      }

      function visitSiblingRenderNodes(view, action, startIndex, endIndex, parentNode, nextSibling, target) {
        for (var i = startIndex; i <= endIndex; i++) {
          var nodeDef = view.def.nodes[i];

          if (nodeDef.flags & (1
          /* TypeElement */
          | 2
          /* TypeText */
          | 8
          /* TypeNgContent */
          )) {
            visitRenderNode(view, nodeDef, action, parentNode, nextSibling, target);
          } // jump to next sibling


          i += nodeDef.childCount;
        }
      }

      function visitProjectedRenderNodes(view, ngContentIndex, action, parentNode, nextSibling, target) {
        var compView = view;

        while (compView && !isComponentView(compView)) {
          compView = compView.parent;
        }

        var hostView = compView.parent;
        var hostElDef = viewParentEl(compView);
        var startIndex = hostElDef.nodeIndex + 1;
        var endIndex = hostElDef.nodeIndex + hostElDef.childCount;

        for (var i = startIndex; i <= endIndex; i++) {
          var nodeDef = hostView.def.nodes[i];

          if (nodeDef.ngContentIndex === ngContentIndex) {
            visitRenderNode(hostView, nodeDef, action, parentNode, nextSibling, target);
          } // jump to next sibling


          i += nodeDef.childCount;
        }

        if (!hostView.parent) {
          // a root view
          var projectedNodes = view.root.projectableNodes[ngContentIndex];

          if (projectedNodes) {
            for (var _i33 = 0; _i33 < projectedNodes.length; _i33++) {
              execRenderNodeAction(view, projectedNodes[_i33], action, parentNode, nextSibling, target);
            }
          }
        }
      }

      function visitRenderNode(view, nodeDef, action, parentNode, nextSibling, target) {
        if (nodeDef.flags & 8
        /* TypeNgContent */
        ) {
            visitProjectedRenderNodes(view, nodeDef.ngContent.index, action, parentNode, nextSibling, target);
          } else {
          var rn = renderNode(view, nodeDef);

          if (action === 3
          /* RemoveChild */
          && nodeDef.flags & 33554432
          /* ComponentView */
          && nodeDef.bindingFlags & 48
          /* CatSyntheticProperty */
          ) {
            // Note: we might need to do both actions.
            if (nodeDef.bindingFlags & 16
            /* SyntheticProperty */
            ) {
              execRenderNodeAction(view, rn, action, parentNode, nextSibling, target);
            }

            if (nodeDef.bindingFlags & 32
            /* SyntheticHostProperty */
            ) {
              var compView = asElementData(view, nodeDef.nodeIndex).componentView;
              execRenderNodeAction(compView, rn, action, parentNode, nextSibling, target);
            }
          } else {
            execRenderNodeAction(view, rn, action, parentNode, nextSibling, target);
          }

          if (nodeDef.flags & 16777216
          /* EmbeddedViews */
          ) {
              var embeddedViews = asElementData(view, nodeDef.nodeIndex).viewContainer._embeddedViews;

              for (var k = 0; k < embeddedViews.length; k++) {
                visitRootRenderNodes(embeddedViews[k], action, parentNode, nextSibling, target);
              }
            }

          if (nodeDef.flags & 1
          /* TypeElement */
          && !nodeDef.element.name) {
            visitSiblingRenderNodes(view, action, nodeDef.nodeIndex + 1, nodeDef.nodeIndex + nodeDef.childCount, parentNode, nextSibling, target);
          }
        }
      }

      function execRenderNodeAction(view, renderNode, action, parentNode, nextSibling, target) {
        var renderer = view.renderer;

        switch (action) {
          case 1
          /* AppendChild */
          :
            renderer.appendChild(parentNode, renderNode);
            break;

          case 2
          /* InsertBefore */
          :
            renderer.insertBefore(parentNode, renderNode, nextSibling);
            break;

          case 3
          /* RemoveChild */
          :
            renderer.removeChild(parentNode, renderNode);
            break;

          case 0
          /* Collect */
          :
            target.push(renderNode);
            break;
        }
      }

      var NS_PREFIX_RE = /^:([^:]+):(.+)$/;

      function splitNamespace(name) {
        if (name[0] === ':') {
          var match = name.match(NS_PREFIX_RE);
          return [match[1], match[2]];
        }

        return ['', name];
      }

      function calcBindingFlags(bindings) {
        var flags = 0;

        for (var i = 0; i < bindings.length; i++) {
          flags |= bindings[i].flags;
        }

        return flags;
      }

      function interpolate(valueCount, constAndInterp) {
        var result = '';

        for (var i = 0; i < valueCount * 2; i = i + 2) {
          result = result + constAndInterp[i] + _toStringWithNull(constAndInterp[i + 1]);
        }

        return result + constAndInterp[valueCount * 2];
      }

      function inlineInterpolate(valueCount, c0, a1, c1, a2, c2, a3, c3, a4, c4, a5, c5, a6, c6, a7, c7, a8, c8, a9, c9) {
        switch (valueCount) {
          case 1:
            return c0 + _toStringWithNull(a1) + c1;

          case 2:
            return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2;

          case 3:
            return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) + c3;

          case 4:
            return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) + c3 + _toStringWithNull(a4) + c4;

          case 5:
            return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) + c3 + _toStringWithNull(a4) + c4 + _toStringWithNull(a5) + c5;

          case 6:
            return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) + c3 + _toStringWithNull(a4) + c4 + _toStringWithNull(a5) + c5 + _toStringWithNull(a6) + c6;

          case 7:
            return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) + c3 + _toStringWithNull(a4) + c4 + _toStringWithNull(a5) + c5 + _toStringWithNull(a6) + c6 + _toStringWithNull(a7) + c7;

          case 8:
            return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) + c3 + _toStringWithNull(a4) + c4 + _toStringWithNull(a5) + c5 + _toStringWithNull(a6) + c6 + _toStringWithNull(a7) + c7 + _toStringWithNull(a8) + c8;

          case 9:
            return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) + c3 + _toStringWithNull(a4) + c4 + _toStringWithNull(a5) + c5 + _toStringWithNull(a6) + c6 + _toStringWithNull(a7) + c7 + _toStringWithNull(a8) + c8 + _toStringWithNull(a9) + c9;

          default:
            throw new Error("Does not support more than 9 expressions");
        }
      }

      function _toStringWithNull(v) {
        return v != null ? v.toString() : '';
      }

      var EMPTY_ARRAY$4 = [];
      var EMPTY_MAP = {};
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var UNDEFINED_VALUE = {};
      var InjectorRefTokenKey = tokenKey(Injector);
      var INJECTORRefTokenKey = tokenKey(INJECTOR$1);
      var NgModuleRefTokenKey = tokenKey(NgModuleRef);

      function moduleProvideDef(flags, token, value, deps) {
        // Need to resolve forwardRefs as e.g. for `useValue` we
        // lowered the expression and then stopped evaluating it,
        // i.e. also didn't unwrap it.
        value = resolveForwardRef(value);
        var depDefs = splitDepsDsl(deps, stringify(token));
        return {
          // will bet set by the module definition
          index: -1,
          deps: depDefs,
          flags: flags,
          token: token,
          value: value
        };
      }

      function moduleDef(providers) {
        var providersByKey = {};
        var modules = [];
        var scope = null;

        for (var i = 0; i < providers.length; i++) {
          var provider = providers[i];

          if (provider.token === INJECTOR_SCOPE) {
            scope = provider.value;
          }

          if (provider.flags & 1073741824
          /* TypeNgModule */
          ) {
              modules.push(provider.token);
            }

          provider.index = i;
          providersByKey[tokenKey(provider.token)] = provider;
        }

        return {
          // Will be filled later...
          factory: null,
          providersByKey: providersByKey,
          providers: providers,
          modules: modules,
          scope: scope
        };
      }

      function initNgModule(data) {
        var def = data._def;
        var providers = data._providers = newArray(def.providers.length);

        for (var i = 0; i < def.providers.length; i++) {
          var provDef = def.providers[i];

          if (!(provDef.flags & 4096
          /* LazyProvider */
          )) {
            // Make sure the provider has not been already initialized outside this loop.
            if (providers[i] === undefined) {
              providers[i] = _createProviderInstance(data, provDef);
            }
          }
        }
      }

      function resolveNgModuleDep(data, depDef) {
        var notFoundValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Injector.THROW_IF_NOT_FOUND;
        var former = setCurrentInjector(data);

        try {
          if (depDef.flags & 8
          /* Value */
          ) {
              return depDef.token;
            }

          if (depDef.flags & 2
          /* Optional */
          ) {
              notFoundValue = null;
            }

          if (depDef.flags & 1
          /* SkipSelf */
          ) {
              return data._parent.get(depDef.token, notFoundValue);
            }

          var _tokenKey = depDef.tokenKey;

          switch (_tokenKey) {
            case InjectorRefTokenKey:
            case INJECTORRefTokenKey:
            case NgModuleRefTokenKey:
              return data;
          }

          var _providerDef2 = data._def.providersByKey[_tokenKey];
          var injectableDef;

          if (_providerDef2) {
            var providerInstance = data._providers[_providerDef2.index];

            if (providerInstance === undefined) {
              providerInstance = data._providers[_providerDef2.index] = _createProviderInstance(data, _providerDef2);
            }

            return providerInstance === UNDEFINED_VALUE ? undefined : providerInstance;
          } else if ((injectableDef = getInjectableDef(depDef.token)) && targetsModule(data, injectableDef)) {
            var index = data._providers.length;
            data._def.providers[index] = data._def.providersByKey[depDef.tokenKey] = {
              flags: 1024
              /* TypeFactoryProvider */
              | 4096
              /* LazyProvider */
              ,
              value: injectableDef.factory,
              deps: [],
              index: index,
              token: depDef.token
            };
            data._providers[index] = UNDEFINED_VALUE;
            return data._providers[index] = _createProviderInstance(data, data._def.providersByKey[depDef.tokenKey]);
          } else if (depDef.flags & 4
          /* Self */
          ) {
              return notFoundValue;
            }

          return data._parent.get(depDef.token, notFoundValue);
        } finally {
          setCurrentInjector(former);
        }
      }

      function moduleTransitivelyPresent(ngModule, scope) {
        return ngModule._def.modules.indexOf(scope) > -1;
      }

      function targetsModule(ngModule, def) {
        var providedIn = def.providedIn;
        return providedIn != null && (providedIn === 'any' || providedIn === ngModule._def.scope || moduleTransitivelyPresent(ngModule, providedIn));
      }

      function _createProviderInstance(ngModule, providerDef) {
        var injectable;

        switch (providerDef.flags & 201347067
        /* Types */
        ) {
          case 512
          /* TypeClassProvider */
          :
            injectable = _createClass(ngModule, providerDef.value, providerDef.deps);
            break;

          case 1024
          /* TypeFactoryProvider */
          :
            injectable = _callFactory(ngModule, providerDef.value, providerDef.deps);
            break;

          case 2048
          /* TypeUseExistingProvider */
          :
            injectable = resolveNgModuleDep(ngModule, providerDef.deps[0]);
            break;

          case 256
          /* TypeValueProvider */
          :
            injectable = providerDef.value;
            break;
        } // The read of `ngOnDestroy` here is slightly expensive as it's megamorphic, so it should be
        // avoided if possible. The sequence of checks here determines whether ngOnDestroy needs to be
        // checked. It might not if the `injectable` isn't an object or if NodeFlags.OnDestroy is already
        // set (ngOnDestroy was detected statically).


        if (injectable !== UNDEFINED_VALUE && injectable !== null && typeof injectable === 'object' && !(providerDef.flags & 131072
        /* OnDestroy */
        ) && typeof injectable.ngOnDestroy === 'function') {
          providerDef.flags |= 131072
          /* OnDestroy */
          ;
        }

        return injectable === undefined ? UNDEFINED_VALUE : injectable;
      }

      function _createClass(ngModule, ctor, deps) {
        var len = deps.length;

        switch (len) {
          case 0:
            return new ctor();

          case 1:
            return new ctor(resolveNgModuleDep(ngModule, deps[0]));

          case 2:
            return new ctor(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]));

          case 3:
            return new ctor(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]), resolveNgModuleDep(ngModule, deps[2]));

          default:
            var depValues = [];

            for (var i = 0; i < len; i++) {
              depValues[i] = resolveNgModuleDep(ngModule, deps[i]);
            }

            return _construct2(ctor, depValues);
        }
      }

      function _callFactory(ngModule, factory, deps) {
        var len = deps.length;

        switch (len) {
          case 0:
            return factory();

          case 1:
            return factory(resolveNgModuleDep(ngModule, deps[0]));

          case 2:
            return factory(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]));

          case 3:
            return factory(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]), resolveNgModuleDep(ngModule, deps[2]));

          default:
            var depValues = [];

            for (var i = 0; i < len; i++) {
              depValues[i] = resolveNgModuleDep(ngModule, deps[i]);
            }

            return factory.apply(void 0, depValues);
        }
      }

      function callNgModuleLifecycle(ngModule, lifecycles) {
        var def = ngModule._def;
        var destroyed = new Set();

        for (var i = 0; i < def.providers.length; i++) {
          var provDef = def.providers[i];

          if (provDef.flags & 131072
          /* OnDestroy */
          ) {
              var instance = ngModule._providers[i];

              if (instance && instance !== UNDEFINED_VALUE) {
                var onDestroy = instance.ngOnDestroy;

                if (typeof onDestroy === 'function' && !destroyed.has(instance)) {
                  onDestroy.apply(instance);
                  destroyed.add(instance);
                }
              }
            }
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function attachEmbeddedView(parentView, elementData, viewIndex, view) {
        var embeddedViews = elementData.viewContainer._embeddedViews;

        if (viewIndex === null || viewIndex === undefined) {
          viewIndex = embeddedViews.length;
        }

        view.viewContainerParent = parentView;
        addToArray(embeddedViews, viewIndex, view);
        attachProjectedView(elementData, view);
        Services.dirtyParentQueries(view);
        var prevView = viewIndex > 0 ? embeddedViews[viewIndex - 1] : null;
        renderAttachEmbeddedView(elementData, prevView, view);
      }

      function attachProjectedView(vcElementData, view) {
        var dvcElementData = declaredViewContainer(view);

        if (!dvcElementData || dvcElementData === vcElementData || view.state & 16
        /* IsProjectedView */
        ) {
            return;
          } // Note: For performance reasons, we
        // - add a view to template._projectedViews only 1x throughout its lifetime,
        //   and remove it not until the view is destroyed.
        //   (hard, as when a parent view is attached/detached we would need to attach/detach all
        //    nested projected views as well, even across component boundaries).
        // - don't track the insertion order of views in the projected views array
        //   (hard, as when the views of the same template are inserted different view containers)


        view.state |= 16
        /* IsProjectedView */
        ;
        var projectedViews = dvcElementData.template._projectedViews;

        if (!projectedViews) {
          projectedViews = dvcElementData.template._projectedViews = [];
        }

        projectedViews.push(view); // Note: we are changing the NodeDef here as we cannot calculate
        // the fact whether a template is used for projection during compilation.

        markNodeAsProjectedTemplate(view.parent.def, view.parentNodeDef);
      }

      function markNodeAsProjectedTemplate(viewDef, nodeDef) {
        if (nodeDef.flags & 4
        /* ProjectedTemplate */
        ) {
            return;
          }

        viewDef.nodeFlags |= 4
        /* ProjectedTemplate */
        ;
        nodeDef.flags |= 4
        /* ProjectedTemplate */
        ;
        var parentNodeDef = nodeDef.parent;

        while (parentNodeDef) {
          parentNodeDef.childFlags |= 4
          /* ProjectedTemplate */
          ;
          parentNodeDef = parentNodeDef.parent;
        }
      }

      function detachEmbeddedView(elementData, viewIndex) {
        var embeddedViews = elementData.viewContainer._embeddedViews;

        if (viewIndex == null || viewIndex >= embeddedViews.length) {
          viewIndex = embeddedViews.length - 1;
        }

        if (viewIndex < 0) {
          return null;
        }

        var view = embeddedViews[viewIndex];
        view.viewContainerParent = null;
        removeFromArray(embeddedViews, viewIndex); // See attachProjectedView for why we don't update projectedViews here.

        Services.dirtyParentQueries(view);
        renderDetachView$1(view);
        return view;
      }

      function detachProjectedView(view) {
        if (!(view.state & 16
        /* IsProjectedView */
        )) {
          return;
        }

        var dvcElementData = declaredViewContainer(view);

        if (dvcElementData) {
          var projectedViews = dvcElementData.template._projectedViews;

          if (projectedViews) {
            removeFromArray(projectedViews, projectedViews.indexOf(view));
            Services.dirtyParentQueries(view);
          }
        }
      }

      function moveEmbeddedView(elementData, oldViewIndex, newViewIndex) {
        var embeddedViews = elementData.viewContainer._embeddedViews;
        var view = embeddedViews[oldViewIndex];
        removeFromArray(embeddedViews, oldViewIndex);

        if (newViewIndex == null) {
          newViewIndex = embeddedViews.length;
        }

        addToArray(embeddedViews, newViewIndex, view); // Note: Don't need to change projectedViews as the order in there
        // as always invalid...

        Services.dirtyParentQueries(view);
        renderDetachView$1(view);
        var prevView = newViewIndex > 0 ? embeddedViews[newViewIndex - 1] : null;
        renderAttachEmbeddedView(elementData, prevView, view);
        return view;
      }

      function renderAttachEmbeddedView(elementData, prevView, view) {
        var prevRenderNode = prevView ? renderNode(prevView, prevView.def.lastRenderRootNode) : elementData.renderElement;
        var parentNode = view.renderer.parentNode(prevRenderNode);
        var nextSibling = view.renderer.nextSibling(prevRenderNode); // Note: We can't check if `nextSibling` is present, as on WebWorkers it will always be!
        // However, browsers automatically do `appendChild` when there is no `nextSibling`.

        visitRootRenderNodes(view, 2
        /* InsertBefore */
        , parentNode, nextSibling, undefined);
      }

      function renderDetachView$1(view) {
        visitRootRenderNodes(view, 3
        /* RemoveChild */
        , null, null, undefined);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var EMPTY_CONTEXT = {}; // Attention: this function is called as top level function.
      // Putting any logic in here will destroy closure tree shaking!

      function createComponentFactory(selector, componentType, viewDefFactory, inputs, outputs, ngContentSelectors) {
        return new ComponentFactory_(selector, componentType, viewDefFactory, inputs, outputs, ngContentSelectors);
      }

      function getComponentViewDefinitionFactory(componentFactory) {
        return componentFactory.viewDefFactory;
      }

      var ComponentFactory_ = /*#__PURE__*/function (_ComponentFactory2) {
        _inherits2(ComponentFactory_, _ComponentFactory2);

        var _super312 = _createSuper(ComponentFactory_);

        function ComponentFactory_(selector, componentType, viewDefFactory, _inputs, _outputs, ngContentSelectors) {
          var _this722;

          _classCallCheck2(this, ComponentFactory_);

          // Attention: this ctor is called as top level function.
          // Putting any logic in here will destroy closure tree shaking!
          _this722 = _super312.call(this);
          _this722.selector = selector;
          _this722.componentType = componentType;
          _this722._inputs = _inputs;
          _this722._outputs = _outputs;
          _this722.ngContentSelectors = ngContentSelectors;
          _this722.viewDefFactory = viewDefFactory;
          return _this722;
        }

        _createClass2(ComponentFactory_, [{
          key: "inputs",
          get: function get() {
            var inputsArr = [];
            var inputs = this._inputs;

            for (var propName in inputs) {
              var templateName = inputs[propName];
              inputsArr.push({
                propName: propName,
                templateName: templateName
              });
            }

            return inputsArr;
          }
        }, {
          key: "outputs",
          get: function get() {
            var outputsArr = [];

            for (var propName in this._outputs) {
              var templateName = this._outputs[propName];
              outputsArr.push({
                propName: propName,
                templateName: templateName
              });
            }

            return outputsArr;
          }
          /**
           * Creates a new component.
           */

        }, {
          key: "create",
          value: function create(injector, projectableNodes, rootSelectorOrNode, ngModule) {
            if (!ngModule) {
              throw new Error('ngModule should be provided');
            }

            var viewDef = resolveDefinition(this.viewDefFactory);
            var componentNodeIndex = viewDef.nodes[0].element.componentProvider.nodeIndex;
            var view = Services.createRootView(injector, projectableNodes || [], rootSelectorOrNode, viewDef, ngModule, EMPTY_CONTEXT);
            var component = asProviderData(view, componentNodeIndex).instance;

            if (rootSelectorOrNode) {
              view.renderer.setAttribute(asElementData(view, 0).renderElement, 'ng-version', VERSION.full);
            }

            return new ComponentRef_(view, new ViewRef_(view), component);
          }
        }]);

        return ComponentFactory_;
      }(ComponentFactory);

      var ComponentRef_ = /*#__PURE__*/function (_ComponentRef) {
        _inherits2(ComponentRef_, _ComponentRef);

        var _super313 = _createSuper(ComponentRef_);

        function ComponentRef_(_view, _viewRef, _component) {
          var _this723;

          _classCallCheck2(this, ComponentRef_);

          _this723 = _super313.call(this);
          _this723._view = _view;
          _this723._viewRef = _viewRef;
          _this723._component = _component;
          _this723._elDef = _this723._view.def.nodes[0];
          _this723.hostView = _viewRef;
          _this723.changeDetectorRef = _viewRef;
          _this723.instance = _component;
          return _this723;
        }

        _createClass2(ComponentRef_, [{
          key: "location",
          get: function get() {
            return new ElementRef(asElementData(this._view, this._elDef.nodeIndex).renderElement);
          }
        }, {
          key: "injector",
          get: function get() {
            return new Injector_(this._view, this._elDef);
          }
        }, {
          key: "componentType",
          get: function get() {
            return this._component.constructor;
          }
        }, {
          key: "destroy",
          value: function destroy() {
            this._viewRef.destroy();
          }
        }, {
          key: "onDestroy",
          value: function onDestroy(callback) {
            this._viewRef.onDestroy(callback);
          }
        }]);

        return ComponentRef_;
      }(ComponentRef);

      function createViewContainerData(view, elDef, elData) {
        return new ViewContainerRef_(view, elDef, elData);
      }

      var ViewContainerRef_ = /*#__PURE__*/function () {
        function ViewContainerRef_(_view, _elDef, _data) {
          _classCallCheck2(this, ViewContainerRef_);

          this._view = _view;
          this._elDef = _elDef;
          this._data = _data;
          /**
           * @internal
           */

          this._embeddedViews = [];
        }

        _createClass2(ViewContainerRef_, [{
          key: "element",
          get: function get() {
            return new ElementRef(this._data.renderElement);
          }
        }, {
          key: "injector",
          get: function get() {
            return new Injector_(this._view, this._elDef);
          }
          /** @deprecated No replacement */

        }, {
          key: "parentInjector",
          get: function get() {
            var view = this._view;
            var elDef = this._elDef.parent;

            while (!elDef && view) {
              elDef = viewParentEl(view);
              view = view.parent;
            }

            return view ? new Injector_(view, elDef) : new Injector_(this._view, null);
          }
        }, {
          key: "clear",
          value: function clear() {
            var len = this._embeddedViews.length;

            for (var i = len - 1; i >= 0; i--) {
              var view = detachEmbeddedView(this._data, i);
              Services.destroyView(view);
            }
          }
        }, {
          key: "get",
          value: function get(index) {
            var view = this._embeddedViews[index];

            if (view) {
              var ref = new ViewRef_(view);
              ref.attachToViewContainerRef(this);
              return ref;
            }

            return null;
          }
        }, {
          key: "length",
          get: function get() {
            return this._embeddedViews.length;
          }
        }, {
          key: "createEmbeddedView",
          value: function createEmbeddedView(templateRef, context, index) {
            var viewRef = templateRef.createEmbeddedView(context || {});
            this.insert(viewRef, index);
            return viewRef;
          }
        }, {
          key: "createComponent",
          value: function createComponent(componentFactory, index, injector, projectableNodes, ngModuleRef) {
            var contextInjector = injector || this.parentInjector;

            if (!ngModuleRef && !(componentFactory instanceof ComponentFactoryBoundToModule)) {
              ngModuleRef = contextInjector.get(NgModuleRef);
            }

            var componentRef = componentFactory.create(contextInjector, projectableNodes, undefined, ngModuleRef);
            this.insert(componentRef.hostView, index);
            return componentRef;
          }
        }, {
          key: "insert",
          value: function insert(viewRef, index) {
            if (viewRef.destroyed) {
              throw new Error('Cannot insert a destroyed View in a ViewContainer!');
            }

            var viewRef_ = viewRef;
            var viewData = viewRef_._view;
            attachEmbeddedView(this._view, this._data, index, viewData);
            viewRef_.attachToViewContainerRef(this);
            return viewRef;
          }
        }, {
          key: "move",
          value: function move(viewRef, currentIndex) {
            if (viewRef.destroyed) {
              throw new Error('Cannot move a destroyed View in a ViewContainer!');
            }

            var previousIndex = this._embeddedViews.indexOf(viewRef._view);

            moveEmbeddedView(this._data, previousIndex, currentIndex);
            return viewRef;
          }
        }, {
          key: "indexOf",
          value: function indexOf(viewRef) {
            return this._embeddedViews.indexOf(viewRef._view);
          }
        }, {
          key: "remove",
          value: function remove(index) {
            var viewData = detachEmbeddedView(this._data, index);

            if (viewData) {
              Services.destroyView(viewData);
            }
          }
        }, {
          key: "detach",
          value: function detach(index) {
            var view = detachEmbeddedView(this._data, index);
            return view ? new ViewRef_(view) : null;
          }
        }]);

        return ViewContainerRef_;
      }();

      function createChangeDetectorRef(view) {
        return new ViewRef_(view);
      }

      var ViewRef_ = /*#__PURE__*/function () {
        function ViewRef_(_view) {
          _classCallCheck2(this, ViewRef_);

          this._view = _view;
          this._viewContainerRef = null;
          this._appRef = null;
        }

        _createClass2(ViewRef_, [{
          key: "rootNodes",
          get: function get() {
            return rootRenderNodes(this._view);
          }
        }, {
          key: "context",
          get: function get() {
            return this._view.context;
          }
        }, {
          key: "destroyed",
          get: function get() {
            return (this._view.state & 128
            /* Destroyed */
            ) !== 0;
          }
        }, {
          key: "markForCheck",
          value: function markForCheck() {
            markParentViewsForCheck(this._view);
          }
        }, {
          key: "detach",
          value: function detach() {
            this._view.state &= ~4
            /* Attached */
            ;
          }
        }, {
          key: "detectChanges",
          value: function detectChanges() {
            var fs = this._view.root.rendererFactory;

            if (fs.begin) {
              fs.begin();
            }

            try {
              Services.checkAndUpdateView(this._view);
            } finally {
              if (fs.end) {
                fs.end();
              }
            }
          }
        }, {
          key: "checkNoChanges",
          value: function checkNoChanges() {
            Services.checkNoChangesView(this._view);
          }
        }, {
          key: "reattach",
          value: function reattach() {
            this._view.state |= 4
            /* Attached */
            ;
          }
        }, {
          key: "onDestroy",
          value: function onDestroy(callback) {
            if (!this._view.disposables) {
              this._view.disposables = [];
            }

            this._view.disposables.push(callback);
          }
        }, {
          key: "destroy",
          value: function destroy() {
            if (this._appRef) {
              this._appRef.detachView(this);
            } else if (this._viewContainerRef) {
              this._viewContainerRef.detach(this._viewContainerRef.indexOf(this));
            }

            Services.destroyView(this._view);
          }
        }, {
          key: "detachFromAppRef",
          value: function detachFromAppRef() {
            this._appRef = null;
            renderDetachView$1(this._view);
            Services.dirtyParentQueries(this._view);
          }
        }, {
          key: "attachToAppRef",
          value: function attachToAppRef(appRef) {
            if (this._viewContainerRef) {
              throw new Error('This view is already attached to a ViewContainer!');
            }

            this._appRef = appRef;
          }
        }, {
          key: "attachToViewContainerRef",
          value: function attachToViewContainerRef(vcRef) {
            if (this._appRef) {
              throw new Error('This view is already attached directly to the ApplicationRef!');
            }

            this._viewContainerRef = vcRef;
          }
        }]);

        return ViewRef_;
      }();

      function createTemplateData(view, def) {
        return new TemplateRef_(view, def);
      }

      var TemplateRef_ = /*#__PURE__*/function (_TemplateRef) {
        _inherits2(TemplateRef_, _TemplateRef);

        var _super314 = _createSuper(TemplateRef_);

        function TemplateRef_(_parentView, _def) {
          var _this724;

          _classCallCheck2(this, TemplateRef_);

          _this724 = _super314.call(this);
          _this724._parentView = _parentView;
          _this724._def = _def;
          return _this724;
        }

        _createClass2(TemplateRef_, [{
          key: "createEmbeddedView",
          value: function createEmbeddedView(context) {
            return new ViewRef_(Services.createEmbeddedView(this._parentView, this._def, this._def.element.template, context));
          }
        }, {
          key: "elementRef",
          get: function get() {
            return new ElementRef(asElementData(this._parentView, this._def.nodeIndex).renderElement);
          }
        }]);

        return TemplateRef_;
      }(TemplateRef);

      function createInjector$1(view, elDef) {
        return new Injector_(view, elDef);
      }

      var Injector_ = /*#__PURE__*/function () {
        function Injector_(view, elDef) {
          _classCallCheck2(this, Injector_);

          this.view = view;
          this.elDef = elDef;
        }

        _createClass2(Injector_, [{
          key: "get",
          value: function get(token) {
            var notFoundValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Injector.THROW_IF_NOT_FOUND;
            var allowPrivateServices = this.elDef ? (this.elDef.flags & 33554432
            /* ComponentView */
            ) !== 0 : false;
            return Services.resolveDep(this.view, this.elDef, allowPrivateServices, {
              flags: 0
              /* None */
              ,
              token: token,
              tokenKey: tokenKey(token)
            }, notFoundValue);
          }
        }]);

        return Injector_;
      }();

      function nodeValue(view, index) {
        var def = view.def.nodes[index];

        if (def.flags & 1
        /* TypeElement */
        ) {
            var elData = asElementData(view, def.nodeIndex);
            return def.element.template ? elData.template : elData.renderElement;
          } else if (def.flags & 2
        /* TypeText */
        ) {
            return asTextData(view, def.nodeIndex).renderText;
          } else if (def.flags & (20224
        /* CatProvider */
        | 16
        /* TypePipe */
        )) {
          return asProviderData(view, def.nodeIndex).instance;
        }

        throw new Error("Illegal state: read nodeValue for node index ".concat(index));
      }

      function createNgModuleRef(moduleType, parent, bootstrapComponents, def) {
        return new NgModuleRef_(moduleType, parent, bootstrapComponents, def);
      }

      var NgModuleRef_ = /*#__PURE__*/function () {
        function NgModuleRef_(_moduleType, _parent, _bootstrapComponents, _def) {
          _classCallCheck2(this, NgModuleRef_);

          this._moduleType = _moduleType;
          this._parent = _parent;
          this._bootstrapComponents = _bootstrapComponents;
          this._def = _def;
          this._destroyListeners = [];
          this._destroyed = false;
          this.injector = this;
          initNgModule(this);
        }

        _createClass2(NgModuleRef_, [{
          key: "get",
          value: function get(token) {
            var notFoundValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Injector.THROW_IF_NOT_FOUND;
            var injectFlags = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : InjectFlags.Default;
            var flags = 0
            /* None */
            ;

            if (injectFlags & InjectFlags.SkipSelf) {
              flags |= 1
              /* SkipSelf */
              ;
            } else if (injectFlags & InjectFlags.Self) {
              flags |= 4
              /* Self */
              ;
            }

            return resolveNgModuleDep(this, {
              token: token,
              tokenKey: tokenKey(token),
              flags: flags
            }, notFoundValue);
          }
        }, {
          key: "instance",
          get: function get() {
            return this.get(this._moduleType);
          }
        }, {
          key: "componentFactoryResolver",
          get: function get() {
            return this.get(ComponentFactoryResolver);
          }
        }, {
          key: "destroy",
          value: function destroy() {
            if (this._destroyed) {
              throw new Error("The ng module ".concat(stringify(this.instance.constructor), " has already been destroyed."));
            }

            this._destroyed = true;
            callNgModuleLifecycle(this, 131072
            /* OnDestroy */
            );

            this._destroyListeners.forEach(function (listener) {
              return listener();
            });
          }
        }, {
          key: "onDestroy",
          value: function onDestroy(callback) {
            this._destroyListeners.push(callback);
          }
        }]);

        return NgModuleRef_;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var Renderer2TokenKey = tokenKey(Renderer2);
      var ElementRefTokenKey = tokenKey(ElementRef);
      var ViewContainerRefTokenKey = tokenKey(ViewContainerRef);
      var TemplateRefTokenKey = tokenKey(TemplateRef);
      var ChangeDetectorRefTokenKey = tokenKey(ChangeDetectorRef);
      var InjectorRefTokenKey$1 = tokenKey(Injector);
      var INJECTORRefTokenKey$1 = tokenKey(INJECTOR$1);

      function directiveDef(checkIndex, flags, matchedQueries, childCount, ctor, deps, props, outputs) {
        var bindings = [];

        if (props) {
          for (var prop in props) {
            var _props$prop = _slicedToArray(props[prop], 2),
                bindingIndex = _props$prop[0],
                nonMinifiedName = _props$prop[1];

            bindings[bindingIndex] = {
              flags: 8
              /* TypeProperty */
              ,
              name: prop,
              nonMinifiedName: nonMinifiedName,
              ns: null,
              securityContext: null,
              suffix: null
            };
          }
        }

        var outputDefs = [];

        if (outputs) {
          for (var propName in outputs) {
            outputDefs.push({
              type: 1
              /* DirectiveOutput */
              ,
              propName: propName,
              target: null,
              eventName: outputs[propName]
            });
          }
        }

        flags |= 16384
        /* TypeDirective */
        ;
        return _def(checkIndex, flags, matchedQueries, childCount, ctor, ctor, deps, bindings, outputDefs);
      }

      function pipeDef(flags, ctor, deps) {
        flags |= 16
        /* TypePipe */
        ;
        return _def(-1, flags, null, 0, ctor, ctor, deps);
      }

      function providerDef(flags, matchedQueries, token, value, deps) {
        return _def(-1, flags, matchedQueries, 0, token, value, deps);
      }

      function _def(checkIndex, flags, matchedQueriesDsl, childCount, token, value, deps, bindings, outputs) {
        var _splitMatchedQueriesD = splitMatchedQueriesDsl(matchedQueriesDsl),
            matchedQueries = _splitMatchedQueriesD.matchedQueries,
            references = _splitMatchedQueriesD.references,
            matchedQueryIds = _splitMatchedQueriesD.matchedQueryIds;

        if (!outputs) {
          outputs = [];
        }

        if (!bindings) {
          bindings = [];
        } // Need to resolve forwardRefs as e.g. for `useValue` we
        // lowered the expression and then stopped evaluating it,
        // i.e. also didn't unwrap it.


        value = resolveForwardRef(value);
        var depDefs = splitDepsDsl(deps, stringify(token));
        return {
          // will bet set by the view definition
          nodeIndex: -1,
          parent: null,
          renderParent: null,
          bindingIndex: -1,
          outputIndex: -1,
          // regular values
          checkIndex: checkIndex,
          flags: flags,
          childFlags: 0,
          directChildFlags: 0,
          childMatchedQueries: 0,
          matchedQueries: matchedQueries,
          matchedQueryIds: matchedQueryIds,
          references: references,
          ngContentIndex: -1,
          childCount: childCount,
          bindings: bindings,
          bindingFlags: calcBindingFlags(bindings),
          outputs: outputs,
          element: null,
          provider: {
            token: token,
            value: value,
            deps: depDefs
          },
          text: null,
          query: null,
          ngContent: null
        };
      }

      function createProviderInstance(view, def) {
        return _createProviderInstance$1(view, def);
      }

      function createPipeInstance(view, def) {
        // deps are looked up from component.
        var compView = view;

        while (compView.parent && !isComponentView(compView)) {
          compView = compView.parent;
        } // pipes can see the private services of the component


        var allowPrivateServices = true; // pipes are always eager and classes!

        return createClass(compView.parent, viewParentEl(compView), allowPrivateServices, def.provider.value, def.provider.deps);
      }

      function createDirectiveInstance(view, def) {
        // components can see other private services, other directives can't.
        var allowPrivateServices = (def.flags & 32768
        /* Component */
        ) > 0; // directives are always eager and classes!

        var instance = createClass(view, def.parent, allowPrivateServices, def.provider.value, def.provider.deps);

        if (def.outputs.length) {
          for (var i = 0; i < def.outputs.length; i++) {
            var output = def.outputs[i];
            var outputObservable = instance[output.propName];

            if (isObservable(outputObservable)) {
              var subscription = outputObservable.subscribe(eventHandlerClosure(view, def.parent.nodeIndex, output.eventName));
              view.disposables[def.outputIndex + i] = subscription.unsubscribe.bind(subscription);
            } else {
              throw new Error("@Output ".concat(output.propName, " not initialized in '").concat(instance.constructor.name, "'."));
            }
          }
        }

        return instance;
      }

      function eventHandlerClosure(view, index, eventName) {
        return function (event) {
          return dispatchEvent(view, index, eventName, event);
        };
      }

      function checkAndUpdateDirectiveInline(view, def, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
        var providerData = asProviderData(view, def.nodeIndex);
        var directive = providerData.instance;
        var changed = false;
        var changes = undefined;
        var bindLen = def.bindings.length;

        if (bindLen > 0 && checkBinding(view, def, 0, v0)) {
          changed = true;
          changes = updateProp(view, providerData, def, 0, v0, changes);
        }

        if (bindLen > 1 && checkBinding(view, def, 1, v1)) {
          changed = true;
          changes = updateProp(view, providerData, def, 1, v1, changes);
        }

        if (bindLen > 2 && checkBinding(view, def, 2, v2)) {
          changed = true;
          changes = updateProp(view, providerData, def, 2, v2, changes);
        }

        if (bindLen > 3 && checkBinding(view, def, 3, v3)) {
          changed = true;
          changes = updateProp(view, providerData, def, 3, v3, changes);
        }

        if (bindLen > 4 && checkBinding(view, def, 4, v4)) {
          changed = true;
          changes = updateProp(view, providerData, def, 4, v4, changes);
        }

        if (bindLen > 5 && checkBinding(view, def, 5, v5)) {
          changed = true;
          changes = updateProp(view, providerData, def, 5, v5, changes);
        }

        if (bindLen > 6 && checkBinding(view, def, 6, v6)) {
          changed = true;
          changes = updateProp(view, providerData, def, 6, v6, changes);
        }

        if (bindLen > 7 && checkBinding(view, def, 7, v7)) {
          changed = true;
          changes = updateProp(view, providerData, def, 7, v7, changes);
        }

        if (bindLen > 8 && checkBinding(view, def, 8, v8)) {
          changed = true;
          changes = updateProp(view, providerData, def, 8, v8, changes);
        }

        if (bindLen > 9 && checkBinding(view, def, 9, v9)) {
          changed = true;
          changes = updateProp(view, providerData, def, 9, v9, changes);
        }

        if (changes) {
          directive.ngOnChanges(changes);
        }

        if (def.flags & 65536
        /* OnInit */
        && shouldCallLifecycleInitHook(view, 256
        /* InitState_CallingOnInit */
        , def.nodeIndex)) {
          directive.ngOnInit();
        }

        if (def.flags & 262144
        /* DoCheck */
        ) {
            directive.ngDoCheck();
          }

        return changed;
      }

      function checkAndUpdateDirectiveDynamic(view, def, values) {
        var providerData = asProviderData(view, def.nodeIndex);
        var directive = providerData.instance;
        var changed = false;
        var changes = undefined;

        for (var i = 0; i < values.length; i++) {
          if (checkBinding(view, def, i, values[i])) {
            changed = true;
            changes = updateProp(view, providerData, def, i, values[i], changes);
          }
        }

        if (changes) {
          directive.ngOnChanges(changes);
        }

        if (def.flags & 65536
        /* OnInit */
        && shouldCallLifecycleInitHook(view, 256
        /* InitState_CallingOnInit */
        , def.nodeIndex)) {
          directive.ngOnInit();
        }

        if (def.flags & 262144
        /* DoCheck */
        ) {
            directive.ngDoCheck();
          }

        return changed;
      }

      function _createProviderInstance$1(view, def) {
        // private services can see other private services
        var allowPrivateServices = (def.flags & 8192
        /* PrivateProvider */
        ) > 0;
        var providerDef = def.provider;

        switch (def.flags & 201347067
        /* Types */
        ) {
          case 512
          /* TypeClassProvider */
          :
            return createClass(view, def.parent, allowPrivateServices, providerDef.value, providerDef.deps);

          case 1024
          /* TypeFactoryProvider */
          :
            return callFactory(view, def.parent, allowPrivateServices, providerDef.value, providerDef.deps);

          case 2048
          /* TypeUseExistingProvider */
          :
            return resolveDep(view, def.parent, allowPrivateServices, providerDef.deps[0]);

          case 256
          /* TypeValueProvider */
          :
            return providerDef.value;
        }
      }

      function createClass(view, elDef, allowPrivateServices, ctor, deps) {
        var len = deps.length;

        switch (len) {
          case 0:
            return new ctor();

          case 1:
            return new ctor(resolveDep(view, elDef, allowPrivateServices, deps[0]));

          case 2:
            return new ctor(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]));

          case 3:
            return new ctor(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]), resolveDep(view, elDef, allowPrivateServices, deps[2]));

          default:
            var depValues = [];

            for (var i = 0; i < len; i++) {
              depValues.push(resolveDep(view, elDef, allowPrivateServices, deps[i]));
            }

            return _construct2(ctor, depValues);
        }
      }

      function callFactory(view, elDef, allowPrivateServices, factory, deps) {
        var len = deps.length;

        switch (len) {
          case 0:
            return factory();

          case 1:
            return factory(resolveDep(view, elDef, allowPrivateServices, deps[0]));

          case 2:
            return factory(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]));

          case 3:
            return factory(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]), resolveDep(view, elDef, allowPrivateServices, deps[2]));

          default:
            var depValues = [];

            for (var i = 0; i < len; i++) {
              depValues.push(resolveDep(view, elDef, allowPrivateServices, deps[i]));
            }

            return factory.apply(void 0, depValues);
        }
      } // This default value is when checking the hierarchy for a token.
      //
      // It means both:
      // - the token is not provided by the current injector,
      // - only the element injectors should be checked (ie do not check module injectors
      //
      //          mod1
      //         /
      //       el1   mod2
      //         \  /
      //         el2
      //
      // When requesting el2.injector.get(token), we should check in the following order and return the
      // first found value:
      // - el2.injector.get(token, default)
      // - el1.injector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) -> do not check the module
      // - mod2.injector.get(token, default)


      var NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR = {};

      function resolveDep(view, elDef, allowPrivateServices, depDef) {
        var notFoundValue = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : Injector.THROW_IF_NOT_FOUND;

        if (depDef.flags & 8
        /* Value */
        ) {
            return depDef.token;
          }

        var startView = view;

        if (depDef.flags & 2
        /* Optional */
        ) {
            notFoundValue = null;
          }

        var tokenKey = depDef.tokenKey;

        if (tokenKey === ChangeDetectorRefTokenKey) {
          // directives on the same element as a component should be able to control the change detector
          // of that component as well.
          allowPrivateServices = !!(elDef && elDef.element.componentView);
        }

        if (elDef && depDef.flags & 1
        /* SkipSelf */
        ) {
          allowPrivateServices = false;
          elDef = elDef.parent;
        }

        var searchView = view;

        while (searchView) {
          if (elDef) {
            switch (tokenKey) {
              case Renderer2TokenKey:
                {
                  var compView = findCompView(searchView, elDef, allowPrivateServices);
                  return compView.renderer;
                }

              case ElementRefTokenKey:
                return new ElementRef(asElementData(searchView, elDef.nodeIndex).renderElement);

              case ViewContainerRefTokenKey:
                return asElementData(searchView, elDef.nodeIndex).viewContainer;

              case TemplateRefTokenKey:
                {
                  if (elDef.element.template) {
                    return asElementData(searchView, elDef.nodeIndex).template;
                  }

                  break;
                }

              case ChangeDetectorRefTokenKey:
                {
                  var cdView = findCompView(searchView, elDef, allowPrivateServices);
                  return createChangeDetectorRef(cdView);
                }

              case InjectorRefTokenKey$1:
              case INJECTORRefTokenKey$1:
                return createInjector$1(searchView, elDef);

              default:
                var _providerDef3 = (allowPrivateServices ? elDef.element.allProviders : elDef.element.publicProviders)[tokenKey];

                if (_providerDef3) {
                  var providerData = asProviderData(searchView, _providerDef3.nodeIndex);

                  if (!providerData) {
                    providerData = {
                      instance: _createProviderInstance$1(searchView, _providerDef3)
                    };
                    searchView.nodes[_providerDef3.nodeIndex] = providerData;
                  }

                  return providerData.instance;
                }

            }
          }

          allowPrivateServices = isComponentView(searchView);
          elDef = viewParentEl(searchView);
          searchView = searchView.parent;

          if (depDef.flags & 4
          /* Self */
          ) {
              searchView = null;
            }
        }

        var value = startView.root.injector.get(depDef.token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR);

        if (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR || notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) {
          // Return the value from the root element injector when
          // - it provides it
          //   (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
          // - the module injector should not be checked
          //   (notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
          return value;
        }

        return startView.root.ngModule.injector.get(depDef.token, notFoundValue);
      }

      function findCompView(view, elDef, allowPrivateServices) {
        var compView;

        if (allowPrivateServices) {
          compView = asElementData(view, elDef.nodeIndex).componentView;
        } else {
          compView = view;

          while (compView.parent && !isComponentView(compView)) {
            compView = compView.parent;
          }
        }

        return compView;
      }

      function updateProp(view, providerData, def, bindingIdx, value, changes) {
        if (def.flags & 32768
        /* Component */
        ) {
            var compView = asElementData(view, def.parent.nodeIndex).componentView;

            if (compView.def.flags & 2
            /* OnPush */
            ) {
                compView.state |= 8
                /* ChecksEnabled */
                ;
              }
          }

        var binding = def.bindings[bindingIdx];
        var propName = binding.name; // Note: This is still safe with Closure Compiler as
        // the user passed in the property name as an object has to `providerDef`,
        // so Closure Compiler will have renamed the property correctly already.

        providerData.instance[propName] = value;

        if (def.flags & 524288
        /* OnChanges */
        ) {
            changes = changes || {};
            var oldValue = WrappedValue.unwrap(view.oldValues[def.bindingIndex + bindingIdx]);
            var _binding = def.bindings[bindingIdx];
            changes[_binding.nonMinifiedName] = new SimpleChange(oldValue, value, (view.state & 2
            /* FirstCheck */
            ) !== 0);
          }

        view.oldValues[def.bindingIndex + bindingIdx] = value;
        return changes;
      } // This function calls the ngAfterContentCheck, ngAfterContentInit,
      // ngAfterViewCheck, and ngAfterViewInit lifecycle hooks (depending on the node
      // flags in lifecycle). Unlike ngDoCheck, ngOnChanges and ngOnInit, which are
      // called during a pre-order traversal of the view tree (that is calling the
      // parent hooks before the child hooks) these events are sent in using a
      // post-order traversal of the tree (children before parents). This changes the
      // meaning of initIndex in the view state. For ngOnInit, initIndex tracks the
      // expected nodeIndex which a ngOnInit should be called. When sending
      // ngAfterContentInit and ngAfterViewInit it is the expected count of
      // ngAfterContentInit or ngAfterViewInit methods that have been called. This
      // ensure that despite being called recursively or after picking up after an
      // exception, the ngAfterContentInit or ngAfterViewInit will be called on the
      // correct nodes. Consider for example, the following (where E is an element
      // and D is a directive)
      //  Tree:       pre-order index  post-order index
      //    E1        0                6
      //      E2      1                1
      //       D3     2                0
      //      E4      3                5
      //       E5     4                4
      //        E6    5                2
      //        E7    6                3
      // As can be seen, the post-order index has an unclear relationship to the
      // pre-order index (postOrderIndex === preOrderIndex - parentCount +
      // childCount). Since number of calls to ngAfterContentInit and ngAfterViewInit
      // are stable (will be the same for the same view regardless of exceptions or
      // recursion) we just need to count them which will roughly correspond to the
      // post-order index (it skips elements and directives that do not have
      // lifecycle hooks).
      //
      // For example, if an exception is raised in the E6.onAfterViewInit() the
      // initIndex is left at 3 (by shouldCallLifecycleInitHook() which set it to
      // initIndex + 1). When checkAndUpdateView() is called again D3, E2 and E6 will
      // not have their ngAfterViewInit() called but, starting with E7, the rest of
      // the view will begin getting ngAfterViewInit() called until a check and
      // pass is complete.
      //
      // This algorthim also handles recursion. Consider if E4's ngAfterViewInit()
      // indirectly calls E1's ChangeDetectorRef.detectChanges(). The expected
      // initIndex is set to 6, the recusive checkAndUpdateView() starts walk again.
      // D3, E2, E6, E7, E5 and E4 are skipped, ngAfterViewInit() is called on E1.
      // When the recursion returns the initIndex will be 7 so E1 is skipped as it
      // has already been called in the recursively called checkAnUpdateView().


      function callLifecycleHooksChildrenFirst(view, lifecycles) {
        if (!(view.def.nodeFlags & lifecycles)) {
          return;
        }

        var nodes = view.def.nodes;
        var initIndex = 0;

        for (var i = 0; i < nodes.length; i++) {
          var nodeDef = nodes[i];
          var parent = nodeDef.parent;

          if (!parent && nodeDef.flags & lifecycles) {
            // matching root node (e.g. a pipe)
            callProviderLifecycles(view, i, nodeDef.flags & lifecycles, initIndex++);
          }

          if ((nodeDef.childFlags & lifecycles) === 0) {
            // no child matches one of the lifecycles
            i += nodeDef.childCount;
          }

          while (parent && parent.flags & 1
          /* TypeElement */
          && i === parent.nodeIndex + parent.childCount) {
            // last child of an element
            if (parent.directChildFlags & lifecycles) {
              initIndex = callElementProvidersLifecycles(view, parent, lifecycles, initIndex);
            }

            parent = parent.parent;
          }
        }
      }

      function callElementProvidersLifecycles(view, elDef, lifecycles, initIndex) {
        for (var i = elDef.nodeIndex + 1; i <= elDef.nodeIndex + elDef.childCount; i++) {
          var nodeDef = view.def.nodes[i];

          if (nodeDef.flags & lifecycles) {
            callProviderLifecycles(view, i, nodeDef.flags & lifecycles, initIndex++);
          } // only visit direct children


          i += nodeDef.childCount;
        }

        return initIndex;
      }

      function callProviderLifecycles(view, index, lifecycles, initIndex) {
        var providerData = asProviderData(view, index);

        if (!providerData) {
          return;
        }

        var provider = providerData.instance;

        if (!provider) {
          return;
        }

        Services.setCurrentNode(view, index);

        if (lifecycles & 1048576
        /* AfterContentInit */
        && shouldCallLifecycleInitHook(view, 512
        /* InitState_CallingAfterContentInit */
        , initIndex)) {
          provider.ngAfterContentInit();
        }

        if (lifecycles & 2097152
        /* AfterContentChecked */
        ) {
            provider.ngAfterContentChecked();
          }

        if (lifecycles & 4194304
        /* AfterViewInit */
        && shouldCallLifecycleInitHook(view, 768
        /* InitState_CallingAfterViewInit */
        , initIndex)) {
          provider.ngAfterViewInit();
        }

        if (lifecycles & 8388608
        /* AfterViewChecked */
        ) {
            provider.ngAfterViewChecked();
          }

        if (lifecycles & 131072
        /* OnDestroy */
        ) {
            provider.ngOnDestroy();
          }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ComponentFactoryResolver$1 = /*#__PURE__*/function (_ComponentFactoryReso) {
        _inherits2(ComponentFactoryResolver$1, _ComponentFactoryReso);

        var _super315 = _createSuper(ComponentFactoryResolver$1);

        /**
         * @param ngModule The NgModuleRef to which all resolved factories are bound.
         */
        function ComponentFactoryResolver$1(ngModule) {
          var _this725;

          _classCallCheck2(this, ComponentFactoryResolver$1);

          _this725 = _super315.call(this);
          _this725.ngModule = ngModule;
          return _this725;
        }

        _createClass2(ComponentFactoryResolver$1, [{
          key: "resolveComponentFactory",
          value: function resolveComponentFactory(component) {
            ngDevMode && assertComponentType(component);
            var componentDef = getComponentDef(component);
            return new ComponentFactory$1(componentDef, this.ngModule);
          }
        }]);

        return ComponentFactoryResolver$1;
      }(ComponentFactoryResolver);

      function toRefArray(map) {
        var array = [];

        for (var nonMinified in map) {
          if (map.hasOwnProperty(nonMinified)) {
            var minified = map[nonMinified];
            array.push({
              propName: minified,
              templateName: nonMinified
            });
          }
        }

        return array;
      }

      function getNamespace$1(elementName) {
        var name = elementName.toLowerCase();
        return name === 'svg' ? SVG_NAMESPACE : name === 'math' ? MATH_ML_NAMESPACE : null;
      }
      /**
       * A change detection scheduler token for {@link RootContext}. This token is the default value used
       * for the default `RootContext` found in the {@link ROOT_CONTEXT} token.
       */


      var SCHEDULER = new InjectionToken('SCHEDULER_TOKEN', {
        providedIn: 'root',
        factory: function factory() {
          return defaultScheduler;
        }
      });

      function createChainedInjector(rootViewInjector, moduleInjector) {
        return {
          get: function get(token, notFoundValue, flags) {
            var value = rootViewInjector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, flags);

            if (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR || notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) {
              // Return the value from the root element injector when
              // - it provides it
              //   (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
              // - the module injector should not be checked
              //   (notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
              return value;
            }

            return moduleInjector.get(token, notFoundValue, flags);
          }
        };
      }
      /**
       * Render3 implementation of {@link viewEngine_ComponentFactory}.
       */


      var ComponentFactory$1 = /*#__PURE__*/function (_ComponentFactory3) {
        _inherits2(ComponentFactory$1, _ComponentFactory3);

        var _super316 = _createSuper(ComponentFactory$1);

        /**
         * @param componentDef The component definition.
         * @param ngModule The NgModuleRef to which the factory is bound.
         */
        function ComponentFactory$1(componentDef, ngModule) {
          var _this726;

          _classCallCheck2(this, ComponentFactory$1);

          _this726 = _super316.call(this);
          _this726.componentDef = componentDef;
          _this726.ngModule = ngModule;
          _this726.componentType = componentDef.type;
          _this726.selector = stringifyCSSSelectorList(componentDef.selectors);
          _this726.ngContentSelectors = componentDef.ngContentSelectors ? componentDef.ngContentSelectors : [];
          _this726.isBoundToModule = !!ngModule;
          return _this726;
        }

        _createClass2(ComponentFactory$1, [{
          key: "inputs",
          get: function get() {
            return toRefArray(this.componentDef.inputs);
          }
        }, {
          key: "outputs",
          get: function get() {
            return toRefArray(this.componentDef.outputs);
          }
        }, {
          key: "create",
          value: function create(injector, projectableNodes, rootSelectorOrNode, ngModule) {
            ngModule = ngModule || this.ngModule;
            var rootViewInjector = ngModule ? createChainedInjector(injector, ngModule.injector) : injector;
            var rendererFactory = rootViewInjector.get(RendererFactory2, domRendererFactory3);
            var sanitizer = rootViewInjector.get(Sanitizer, null);
            var hostRenderer = rendererFactory.createRenderer(null, this.componentDef); // Determine a tag name used for creating host elements when this component is created
            // dynamically. Default to 'div' if this component did not specify any tag name in its selector.

            var elementName = this.componentDef.selectors[0][0] || 'div';
            var hostRNode = rootSelectorOrNode ? locateHostElement(hostRenderer, rootSelectorOrNode, this.componentDef.encapsulation) : createElementNode(rendererFactory.createRenderer(null, this.componentDef), elementName, getNamespace$1(elementName));
            var rootFlags = this.componentDef.onPush ? 64
            /* Dirty */
            | 512
            /* IsRoot */
            : 16
            /* CheckAlways */
            | 512
            /* IsRoot */
            ;
            var rootContext = createRootContext(); // Create the root view. Uses empty TView and ContentTemplate.

            var rootTView = createTView(0
            /* Root */
            , null, null, 1, 0, null, null, null, null, null);
            var rootLView = createLView(null, rootTView, rootContext, rootFlags, null, null, rendererFactory, hostRenderer, sanitizer, rootViewInjector); // rootView is the parent when bootstrapping
            // TODO(misko): it looks like we are entering view here but we don't really need to as
            // `renderView` does that. However as the code is written it is needed because
            // `createRootComponentView` and `createRootComponent` both read global state. Fixing those
            // issues would allow us to drop this.

            enterView(rootLView);
            var component;
            var tElementNode;

            try {
              var componentView = createRootComponentView(hostRNode, this.componentDef, rootLView, rendererFactory, hostRenderer);

              if (hostRNode) {
                if (rootSelectorOrNode) {
                  setUpAttributes(hostRenderer, hostRNode, ['ng-version', VERSION.full]);
                } else {
                  // If host element is created as a part of this function call (i.e. `rootSelectorOrNode`
                  // is not defined), also apply attributes and classes extracted from component selector.
                  // Extract attributes and classes from the first selector only to match VE behavior.
                  var _extractAttrsAndClass = extractAttrsAndClassesFromSelector(this.componentDef.selectors[0]),
                      attrs = _extractAttrsAndClass.attrs,
                      classes = _extractAttrsAndClass.classes;

                  if (attrs) {
                    setUpAttributes(hostRenderer, hostRNode, attrs);
                  }

                  if (classes && classes.length > 0) {
                    writeDirectClass(hostRenderer, hostRNode, classes.join(' '));
                  }
                }
              }

              tElementNode = getTNode(rootTView, HEADER_OFFSET);

              if (projectableNodes !== undefined) {
                var projection = tElementNode.projection = [];

                for (var i = 0; i < this.ngContentSelectors.length; i++) {
                  var nodesforSlot = projectableNodes[i]; // Projectable nodes can be passed as array of arrays or an array of iterables (ngUpgrade
                  // case). Here we do normalize passed data structure to be an array of arrays to avoid
                  // complex checks down the line.
                  // We also normalize the length of the passed in projectable nodes (to match the number of
                  // <ng-container> slots defined by a component).

                  projection.push(nodesforSlot != null ? Array.from(nodesforSlot) : null);
                }
              } // TODO: should LifecycleHooksFeature and other host features be generated by the compiler and
              // executed here?
              // Angular 5 reference: https://stackblitz.com/edit/lifecycle-hooks-vcref


              component = createRootComponent(componentView, this.componentDef, rootLView, rootContext, [LifecycleHooksFeature]);
              renderView(rootTView, rootLView, null);
            } finally {
              leaveView();
            }

            return new ComponentRef$1(this.componentType, component, createElementRef(tElementNode, rootLView), rootLView, tElementNode);
          }
        }]);

        return ComponentFactory$1;
      }(ComponentFactory);

      var componentFactoryResolver = new ComponentFactoryResolver$1();
      /**
       * Creates a ComponentFactoryResolver and stores it on the injector. Or, if the
       * ComponentFactoryResolver
       * already exists, retrieves the existing ComponentFactoryResolver.
       *
       * @returns The ComponentFactoryResolver instance to use
       */

      function injectComponentFactoryResolver() {
        return componentFactoryResolver;
      }
      /**
       * Represents an instance of a Component created via a {@link ComponentFactory}.
       *
       * `ComponentRef` provides access to the Component Instance as well other objects related to this
       * Component Instance and allows you to destroy the Component Instance via the {@link #destroy}
       * method.
       *
       */


      var ComponentRef$1 = /*#__PURE__*/function (_ComponentRef2) {
        _inherits2(ComponentRef$1, _ComponentRef2);

        var _super317 = _createSuper(ComponentRef$1);

        function ComponentRef$1(componentType, instance, location, _rootLView, _tNode) {
          var _this727;

          _classCallCheck2(this, ComponentRef$1);

          _this727 = _super317.call(this);
          _this727.location = location;
          _this727._rootLView = _rootLView;
          _this727._tNode = _tNode;
          _this727.instance = instance;
          _this727.hostView = _this727.changeDetectorRef = new RootViewRef(_rootLView);
          _this727.componentType = componentType;
          return _this727;
        }

        _createClass2(ComponentRef$1, [{
          key: "injector",
          get: function get() {
            return new NodeInjector(this._tNode, this._rootLView);
          }
        }, {
          key: "destroy",
          value: function destroy() {
            this.hostView.destroy();
          }
        }, {
          key: "onDestroy",
          value: function onDestroy(callback) {
            this.hostView.onDestroy(callback);
          }
        }]);

        return ComponentRef$1;
      }(ComponentRef);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Adds decorator, constructor, and property metadata to a given type via static metadata fields
       * on the type.
       *
       * These metadata fields can later be read with Angular's `ReflectionCapabilities` API.
       *
       * Calls to `setClassMetadata` can be guarded by ngDevMode, resulting in the metadata assignments
       * being tree-shaken away during production builds.
       */


      function setClassMetadata(type, decorators, ctorParameters, propDecorators) {
        return noSideEffects(function () {
          var clazz = type;

          if (decorators !== null) {
            if (clazz.hasOwnProperty('decorators') && clazz.decorators !== undefined) {
              var _clazz$decorators;

              (_clazz$decorators = clazz.decorators).push.apply(_clazz$decorators, _toConsumableArray(decorators));
            } else {
              clazz.decorators = decorators;
            }
          }

          if (ctorParameters !== null) {
            // Rather than merging, clobber the existing parameters. If other projects exist which
            // use tsickle-style annotations and reflect over them in the same way, this could
            // cause issues, but that is vanishingly unlikely.
            clazz.ctorParameters = ctorParameters;
          }

          if (propDecorators !== null) {
            // The property decorator objects are merged as it is possible different fields have
            // different decorator types. Decorators on individual fields are not merged, as it's
            // also incredibly unlikely that a field will be decorated both with an Angular
            // decorator and a non-Angular decorator that's also been downleveled.
            if (clazz.hasOwnProperty('propDecorators') && clazz.propDecorators !== undefined) {
              clazz.propDecorators = Object.assign(Object.assign({}, clazz.propDecorators), propDecorators);
            } else {
              clazz.propDecorators = propDecorators;
            }
          }
        });
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Map of module-id to the corresponding NgModule.
       * - In pre Ivy we track NgModuleFactory,
       * - In post Ivy we track the NgModuleType
       */


      var modules = new Map();
      /**
       * Registers a loaded module. Should only be called from generated NgModuleFactory code.
       * @publicApi
       */

      function registerModuleFactory(id, factory) {
        var existing = modules.get(id);
        assertSameOrNotExisting(id, existing && existing.moduleType, factory.moduleType);
        modules.set(id, factory);
      }

      function assertSameOrNotExisting(id, type, incoming) {
        if (type && type !== incoming) {
          throw new Error("Duplicate module registered for ".concat(id, " - ").concat(stringify(type), " vs ").concat(stringify(type.name)));
        }
      }

      function registerNgModuleType(ngModuleType) {
        var visited = new Set();
        recurse(ngModuleType);

        function recurse(ngModuleType) {
          // The imports array of an NgModule must refer to other NgModules,
          // so an error is thrown if no module definition is available.
          var def = getNgModuleDef(ngModuleType,
          /* throwNotFound */
          true);
          var id = def.id;

          if (id !== null) {
            var existing = modules.get(id);
            assertSameOrNotExisting(id, existing, ngModuleType);
            modules.set(id, ngModuleType);
          }

          var imports = maybeUnwrapFn(def.imports);

          var _iterator77 = _createForOfIteratorHelper(imports),
              _step76;

          try {
            for (_iterator77.s(); !(_step76 = _iterator77.n()).done;) {
              var i = _step76.value;

              if (!visited.has(i)) {
                visited.add(i);
                recurse(i);
              }
            }
          } catch (err) {
            _iterator77.e(err);
          } finally {
            _iterator77.f();
          }
        }
      }

      function clearModulesForTest() {
        modules.clear();
      }

      function getRegisteredNgModuleType(id) {
        return modules.get(id) || autoRegisterModuleById[id];
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var NgModuleRef$1 = /*#__PURE__*/function (_NgModuleRef) {
        _inherits2(NgModuleRef$1, _NgModuleRef);

        var _super318 = _createSuper(NgModuleRef$1);

        function NgModuleRef$1(ngModuleType, _parent) {
          var _this728;

          _classCallCheck2(this, NgModuleRef$1);

          _this728 = _super318.call(this);
          _this728._parent = _parent; // tslint:disable-next-line:require-internal-with-underscore

          _this728._bootstrapComponents = [];
          _this728.injector = _assertThisInitialized2(_this728);
          _this728.destroyCbs = []; // When bootstrapping a module we have a dependency graph that looks like this:
          // ApplicationRef -> ComponentFactoryResolver -> NgModuleRef. The problem is that if the
          // module being resolved tries to inject the ComponentFactoryResolver, it'll create a
          // circular dependency which will result in a runtime error, because the injector doesn't
          // exist yet. We work around the issue by creating the ComponentFactoryResolver ourselves
          // and providing it, rather than letting the injector resolve it.

          _this728.componentFactoryResolver = new ComponentFactoryResolver$1(_assertThisInitialized2(_this728));
          var ngModuleDef = getNgModuleDef(ngModuleType);
          ngDevMode && assertDefined(ngModuleDef, "NgModule '".concat(stringify(ngModuleType), "' is not a subtype of 'NgModuleType'."));
          var ngLocaleIdDef = getNgLocaleIdDef(ngModuleType);
          ngLocaleIdDef && setLocaleId(ngLocaleIdDef);
          _this728._bootstrapComponents = maybeUnwrapFn(ngModuleDef.bootstrap);
          _this728._r3Injector = createInjectorWithoutInjectorInstances(ngModuleType, _parent, [{
            provide: NgModuleRef,
            useValue: _assertThisInitialized2(_this728)
          }, {
            provide: ComponentFactoryResolver,
            useValue: _this728.componentFactoryResolver
          }], stringify(ngModuleType)); // We need to resolve the injector types separately from the injector creation, because
          // the module might be trying to use this ref in its contructor for DI which will cause a
          // circular error that will eventually error out, because the injector isn't created yet.

          _this728._r3Injector._resolveInjectorDefTypes();

          _this728.instance = _this728.get(ngModuleType);
          return _this728;
        }

        _createClass2(NgModuleRef$1, [{
          key: "get",
          value: function get(token) {
            var notFoundValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Injector.THROW_IF_NOT_FOUND;
            var injectFlags = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : InjectFlags.Default;

            if (token === Injector || token === NgModuleRef || token === INJECTOR$1) {
              return this;
            }

            return this._r3Injector.get(token, notFoundValue, injectFlags);
          }
        }, {
          key: "destroy",
          value: function destroy() {
            ngDevMode && assertDefined(this.destroyCbs, 'NgModule already destroyed');
            var injector = this._r3Injector;
            !injector.destroyed && injector.destroy();
            this.destroyCbs.forEach(function (fn) {
              return fn();
            });
            this.destroyCbs = null;
          }
        }, {
          key: "onDestroy",
          value: function onDestroy(callback) {
            ngDevMode && assertDefined(this.destroyCbs, 'NgModule already destroyed');
            this.destroyCbs.push(callback);
          }
        }]);

        return NgModuleRef$1;
      }(NgModuleRef);

      var NgModuleFactory$1 = /*#__PURE__*/function (_NgModuleFactory) {
        _inherits2(NgModuleFactory$1, _NgModuleFactory);

        var _super319 = _createSuper(NgModuleFactory$1);

        function NgModuleFactory$1(moduleType) {
          var _this729;

          _classCallCheck2(this, NgModuleFactory$1);

          _this729 = _super319.call(this);
          _this729.moduleType = moduleType;
          var ngModuleDef = getNgModuleDef(moduleType);

          if (ngModuleDef !== null) {
            // Register the NgModule with Angular's module registry. The location (and hence timing) of
            // this call is critical to ensure this works correctly (modules get registered when expected)
            // without bloating bundles (modules are registered when otherwise not referenced).
            //
            // In View Engine, registration occurs in the .ngfactory.js file as a side effect. This has
            // several practical consequences:
            //
            // - If an .ngfactory file is not imported from, the module won't be registered (and can be
            //   tree shaken).
            // - If an .ngfactory file is imported from, the module will be registered even if an instance
            //   is not actually created (via `create` below).
            // - Since an .ngfactory file in View Engine references the .ngfactory files of the NgModule's
            //   imports,
            //
            // In Ivy, things are a bit different. .ngfactory files still exist for compatibility, but are
            // not a required API to use - there are other ways to obtain an NgModuleFactory for a given
            // NgModule. Thus, relying on a side effect in the .ngfactory file is not sufficient. Instead,
            // the side effect of registration is added here, in the constructor of NgModuleFactory,
            // ensuring no matter how a factory is created, the module is registered correctly.
            //
            // An alternative would be to include the registration side effect inline following the actual
            // NgModule definition. This also has the correct timing, but breaks tree-shaking - modules
            // will be registered and retained even if they're otherwise never referenced.
            registerNgModuleType(moduleType);
          }

          return _this729;
        }

        _createClass2(NgModuleFactory$1, [{
          key: "create",
          value: function create(parentInjector) {
            return new NgModuleRef$1(this.moduleType, parentInjector);
          }
        }]);

        return NgModuleFactory$1;
      }(NgModuleFactory);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Bindings for pure functions are stored after regular bindings.
       *
       * |-------decls------|---------vars---------|                 |----- hostVars (dir1) ------|
       * ------------------------------------------------------------------------------------------
       * | nodes/refs/pipes | bindings | fn slots  | injector | dir1 | host bindings | host slots |
       * ------------------------------------------------------------------------------------------
       *                    ^                      ^
       *      TView.bindingStartIndex      TView.expandoStartIndex
       *
       * Pure function instructions are given an offset from the binding root. Adding the offset to the
       * binding root gives the first index where the bindings are stored. In component views, the binding
       * root is the bindingStartIndex. In host bindings, the binding root is the expandoStartIndex +
       * any directive instances + any hostVars in directives evaluated before it.
       *
       * See VIEW_DATA.md for more information about host binding resolution.
       */

      /**
       * If the value hasn't been saved, calls the pure function to store and return the
       * value. If it has been saved, returns the saved value.
       *
       * @param slotOffset the offset from binding root to the reserved slot
       * @param pureFn Function that returns a value
       * @param thisArg Optional calling context of pureFn
       * @returns value
       *
       * @codeGenApi
       */


      function ɵɵpureFunction0(slotOffset, pureFn, thisArg) {
        var bindingIndex = getBindingRoot() + slotOffset;
        var lView = getLView();
        return lView[bindingIndex] === NO_CHANGE ? updateBinding(lView, bindingIndex, thisArg ? pureFn.call(thisArg) : pureFn()) : getBinding(lView, bindingIndex);
      }
      /**
       * If the value of the provided exp has changed, calls the pure function to return
       * an updated value. Or if the value has not changed, returns cached value.
       *
       * @param slotOffset the offset from binding root to the reserved slot
       * @param pureFn Function that returns an updated value
       * @param exp Updated expression value
       * @param thisArg Optional calling context of pureFn
       * @returns Updated or cached value
       *
       * @codeGenApi
       */


      function ɵɵpureFunction1(slotOffset, pureFn, exp, thisArg) {
        return pureFunction1Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp, thisArg);
      }
      /**
       * If the value of any provided exp has changed, calls the pure function to return
       * an updated value. Or if no values have changed, returns cached value.
       *
       * @param slotOffset the offset from binding root to the reserved slot
       * @param pureFn
       * @param exp1
       * @param exp2
       * @param thisArg Optional calling context of pureFn
       * @returns Updated or cached value
       *
       * @codeGenApi
       */


      function ɵɵpureFunction2(slotOffset, pureFn, exp1, exp2, thisArg) {
        return pureFunction2Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2, thisArg);
      }
      /**
       * If the value of any provided exp has changed, calls the pure function to return
       * an updated value. Or if no values have changed, returns cached value.
       *
       * @param slotOffset the offset from binding root to the reserved slot
       * @param pureFn
       * @param exp1
       * @param exp2
       * @param exp3
       * @param thisArg Optional calling context of pureFn
       * @returns Updated or cached value
       *
       * @codeGenApi
       */


      function ɵɵpureFunction3(slotOffset, pureFn, exp1, exp2, exp3, thisArg) {
        return pureFunction3Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2, exp3, thisArg);
      }
      /**
       * If the value of any provided exp has changed, calls the pure function to return
       * an updated value. Or if no values have changed, returns cached value.
       *
       * @param slotOffset the offset from binding root to the reserved slot
       * @param pureFn
       * @param exp1
       * @param exp2
       * @param exp3
       * @param exp4
       * @param thisArg Optional calling context of pureFn
       * @returns Updated or cached value
       *
       * @codeGenApi
       */


      function ɵɵpureFunction4(slotOffset, pureFn, exp1, exp2, exp3, exp4, thisArg) {
        return pureFunction4Internal(getLView(), getBindingRoot(), slotOffset, pureFn, exp1, exp2, exp3, exp4, thisArg);
      }
      /**
       * If the value of any provided exp has changed, calls the pure function to return
       * an updated value. Or if no values have changed, returns cached value.
       *
       * @param slotOffset the offset from binding root to the reserved slot
       * @param pureFn
       * @param exp1
       * @param exp2
       * @param exp3
       * @param exp4
       * @param exp5
       * @param thisArg Optional calling context of pureFn
       * @returns Updated or cached value
       *
       * @codeGenApi
       */


      function ɵɵpureFunction5(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, thisArg) {
        var bindingIndex = getBindingRoot() + slotOffset;
        var lView = getLView();
        var different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);
        return bindingUpdated(lView, bindingIndex + 4, exp5) || different ? updateBinding(lView, bindingIndex + 5, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5) : pureFn(exp1, exp2, exp3, exp4, exp5)) : getBinding(lView, bindingIndex + 5);
      }
      /**
       * If the value of any provided exp has changed, calls the pure function to return
       * an updated value. Or if no values have changed, returns cached value.
       *
       * @param slotOffset the offset from binding root to the reserved slot
       * @param pureFn
       * @param exp1
       * @param exp2
       * @param exp3
       * @param exp4
       * @param exp5
       * @param exp6
       * @param thisArg Optional calling context of pureFn
       * @returns Updated or cached value
       *
       * @codeGenApi
       */


      function ɵɵpureFunction6(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6, thisArg) {
        var bindingIndex = getBindingRoot() + slotOffset;
        var lView = getLView();
        var different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);
        return bindingUpdated2(lView, bindingIndex + 4, exp5, exp6) || different ? updateBinding(lView, bindingIndex + 6, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5, exp6) : pureFn(exp1, exp2, exp3, exp4, exp5, exp6)) : getBinding(lView, bindingIndex + 6);
      }
      /**
       * If the value of any provided exp has changed, calls the pure function to return
       * an updated value. Or if no values have changed, returns cached value.
       *
       * @param slotOffset the offset from binding root to the reserved slot
       * @param pureFn
       * @param exp1
       * @param exp2
       * @param exp3
       * @param exp4
       * @param exp5
       * @param exp6
       * @param exp7
       * @param thisArg Optional calling context of pureFn
       * @returns Updated or cached value
       *
       * @codeGenApi
       */


      function ɵɵpureFunction7(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6, exp7, thisArg) {
        var bindingIndex = getBindingRoot() + slotOffset;
        var lView = getLView();
        var different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);
        return bindingUpdated3(lView, bindingIndex + 4, exp5, exp6, exp7) || different ? updateBinding(lView, bindingIndex + 7, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5, exp6, exp7) : pureFn(exp1, exp2, exp3, exp4, exp5, exp6, exp7)) : getBinding(lView, bindingIndex + 7);
      }
      /**
       * If the value of any provided exp has changed, calls the pure function to return
       * an updated value. Or if no values have changed, returns cached value.
       *
       * @param slotOffset the offset from binding root to the reserved slot
       * @param pureFn
       * @param exp1
       * @param exp2
       * @param exp3
       * @param exp4
       * @param exp5
       * @param exp6
       * @param exp7
       * @param exp8
       * @param thisArg Optional calling context of pureFn
       * @returns Updated or cached value
       *
       * @codeGenApi
       */


      function ɵɵpureFunction8(slotOffset, pureFn, exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8, thisArg) {
        var bindingIndex = getBindingRoot() + slotOffset;
        var lView = getLView();
        var different = bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4);
        return bindingUpdated4(lView, bindingIndex + 4, exp5, exp6, exp7, exp8) || different ? updateBinding(lView, bindingIndex + 8, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8) : pureFn(exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8)) : getBinding(lView, bindingIndex + 8);
      }
      /**
       * pureFunction instruction that can support any number of bindings.
       *
       * If the value of any provided exp has changed, calls the pure function to return
       * an updated value. Or if no values have changed, returns cached value.
       *
       * @param slotOffset the offset from binding root to the reserved slot
       * @param pureFn A pure function that takes binding values and builds an object or array
       * containing those values.
       * @param exps An array of binding values
       * @param thisArg Optional calling context of pureFn
       * @returns Updated or cached value
       *
       * @codeGenApi
       */


      function ɵɵpureFunctionV(slotOffset, pureFn, exps, thisArg) {
        return pureFunctionVInternal(getLView(), getBindingRoot(), slotOffset, pureFn, exps, thisArg);
      }
      /**
       * Results of a pure function invocation are stored in LView in a dedicated slot that is initialized
       * to NO_CHANGE. In rare situations a pure pipe might throw an exception on the very first
       * invocation and not produce any valid results. In this case LView would keep holding the NO_CHANGE
       * value. The NO_CHANGE is not something that we can use in expressions / bindings thus we convert
       * it to `undefined`.
       */


      function getPureFunctionReturnValue(lView, returnValueIndex) {
        ngDevMode && assertIndexInRange(lView, returnValueIndex);
        var lastReturnValue = lView[returnValueIndex];
        return lastReturnValue === NO_CHANGE ? undefined : lastReturnValue;
      }
      /**
       * If the value of the provided exp has changed, calls the pure function to return
       * an updated value. Or if the value has not changed, returns cached value.
       *
       * @param lView LView in which the function is being executed.
       * @param bindingRoot Binding root index.
       * @param slotOffset the offset from binding root to the reserved slot
       * @param pureFn Function that returns an updated value
       * @param exp Updated expression value
       * @param thisArg Optional calling context of pureFn
       * @returns Updated or cached value
       */


      function pureFunction1Internal(lView, bindingRoot, slotOffset, pureFn, exp, thisArg) {
        var bindingIndex = bindingRoot + slotOffset;
        return bindingUpdated(lView, bindingIndex, exp) ? updateBinding(lView, bindingIndex + 1, thisArg ? pureFn.call(thisArg, exp) : pureFn(exp)) : getPureFunctionReturnValue(lView, bindingIndex + 1);
      }
      /**
       * If the value of any provided exp has changed, calls the pure function to return
       * an updated value. Or if no values have changed, returns cached value.
       *
       * @param lView LView in which the function is being executed.
       * @param bindingRoot Binding root index.
       * @param slotOffset the offset from binding root to the reserved slot
       * @param pureFn
       * @param exp1
       * @param exp2
       * @param thisArg Optional calling context of pureFn
       * @returns Updated or cached value
       */


      function pureFunction2Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, thisArg) {
        var bindingIndex = bindingRoot + slotOffset;
        return bindingUpdated2(lView, bindingIndex, exp1, exp2) ? updateBinding(lView, bindingIndex + 2, thisArg ? pureFn.call(thisArg, exp1, exp2) : pureFn(exp1, exp2)) : getPureFunctionReturnValue(lView, bindingIndex + 2);
      }
      /**
       * If the value of any provided exp has changed, calls the pure function to return
       * an updated value. Or if no values have changed, returns cached value.
       *
       * @param lView LView in which the function is being executed.
       * @param bindingRoot Binding root index.
       * @param slotOffset the offset from binding root to the reserved slot
       * @param pureFn
       * @param exp1
       * @param exp2
       * @param exp3
       * @param thisArg Optional calling context of pureFn
       * @returns Updated or cached value
       */


      function pureFunction3Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, exp3, thisArg) {
        var bindingIndex = bindingRoot + slotOffset;
        return bindingUpdated3(lView, bindingIndex, exp1, exp2, exp3) ? updateBinding(lView, bindingIndex + 3, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3) : pureFn(exp1, exp2, exp3)) : getPureFunctionReturnValue(lView, bindingIndex + 3);
      }
      /**
       * If the value of any provided exp has changed, calls the pure function to return
       * an updated value. Or if no values have changed, returns cached value.
       *
       * @param lView LView in which the function is being executed.
       * @param bindingRoot Binding root index.
       * @param slotOffset the offset from binding root to the reserved slot
       * @param pureFn
       * @param exp1
       * @param exp2
       * @param exp3
       * @param exp4
       * @param thisArg Optional calling context of pureFn
       * @returns Updated or cached value
       *
       */


      function pureFunction4Internal(lView, bindingRoot, slotOffset, pureFn, exp1, exp2, exp3, exp4, thisArg) {
        var bindingIndex = bindingRoot + slotOffset;
        return bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4) ? updateBinding(lView, bindingIndex + 4, thisArg ? pureFn.call(thisArg, exp1, exp2, exp3, exp4) : pureFn(exp1, exp2, exp3, exp4)) : getPureFunctionReturnValue(lView, bindingIndex + 4);
      }
      /**
       * pureFunction instruction that can support any number of bindings.
       *
       * If the value of any provided exp has changed, calls the pure function to return
       * an updated value. Or if no values have changed, returns cached value.
       *
       * @param lView LView in which the function is being executed.
       * @param bindingRoot Binding root index.
       * @param slotOffset the offset from binding root to the reserved slot
       * @param pureFn A pure function that takes binding values and builds an object or array
       * containing those values.
       * @param exps An array of binding values
       * @param thisArg Optional calling context of pureFn
       * @returns Updated or cached value
       */


      function pureFunctionVInternal(lView, bindingRoot, slotOffset, pureFn, exps, thisArg) {
        var bindingIndex = bindingRoot + slotOffset;
        var different = false;

        for (var i = 0; i < exps.length; i++) {
          bindingUpdated(lView, bindingIndex++, exps[i]) && (different = true);
        }

        return different ? updateBinding(lView, bindingIndex, pureFn.apply(thisArg, exps)) : getPureFunctionReturnValue(lView, bindingIndex);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Create a pipe.
       *
       * @param index Pipe index where the pipe will be stored.
       * @param pipeName The name of the pipe
       * @returns T the instance of the pipe.
       *
       * @codeGenApi
       */


      function ɵɵpipe(index, pipeName) {
        var tView = getTView();
        var pipeDef;
        var adjustedIndex = index + HEADER_OFFSET;

        if (tView.firstCreatePass) {
          pipeDef = getPipeDef$1(pipeName, tView.pipeRegistry);
          tView.data[adjustedIndex] = pipeDef;

          if (pipeDef.onDestroy) {
            (tView.destroyHooks || (tView.destroyHooks = [])).push(adjustedIndex, pipeDef.onDestroy);
          }
        } else {
          pipeDef = tView.data[adjustedIndex];
        }

        var pipeFactory = pipeDef.factory || (pipeDef.factory = getFactoryDef(pipeDef.type, true));
        var previousInjectImplementation = setInjectImplementation(ɵɵdirectiveInject);

        try {
          // DI for pipes is supposed to behave like directives when placed on a component
          // host node, which means that we have to disable access to `viewProviders`.
          var previousIncludeViewProviders = setIncludeViewProviders(false);
          var pipeInstance = pipeFactory();
          setIncludeViewProviders(previousIncludeViewProviders);
          store(tView, getLView(), adjustedIndex, pipeInstance);
          return pipeInstance;
        } finally {
          // we have to restore the injector implementation in finally, just in case the creation of the
          // pipe throws an error.
          setInjectImplementation(previousInjectImplementation);
        }
      }
      /**
       * Searches the pipe registry for a pipe with the given name. If one is found,
       * returns the pipe. Otherwise, an error is thrown because the pipe cannot be resolved.
       *
       * @param name Name of pipe to resolve
       * @param registry Full list of available pipes
       * @returns Matching PipeDef
       */


      function getPipeDef$1(name, registry) {
        if (registry) {
          for (var i = registry.length - 1; i >= 0; i--) {
            var _pipeDef = registry[i];

            if (name === _pipeDef.name) {
              return _pipeDef;
            }
          }
        }

        throw new RuntimeError("302"
        /* PIPE_NOT_FOUND */
        , "The pipe '".concat(name, "' could not be found!"));
      }
      /**
       * Invokes a pipe with 1 arguments.
       *
       * This instruction acts as a guard to {@link PipeTransform#transform} invoking
       * the pipe only when an input to the pipe changes.
       *
       * @param index Pipe index where the pipe was stored on creation.
       * @param slotOffset the offset in the reserved slot space
       * @param v1 1st argument to {@link PipeTransform#transform}.
       *
       * @codeGenApi
       */


      function ɵɵpipeBind1(index, slotOffset, v1) {
        var adjustedIndex = index + HEADER_OFFSET;
        var lView = getLView();
        var pipeInstance = load(lView, adjustedIndex);
        return unwrapValue$1(lView, isPure(lView, adjustedIndex) ? pureFunction1Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, pipeInstance) : pipeInstance.transform(v1));
      }
      /**
       * Invokes a pipe with 2 arguments.
       *
       * This instruction acts as a guard to {@link PipeTransform#transform} invoking
       * the pipe only when an input to the pipe changes.
       *
       * @param index Pipe index where the pipe was stored on creation.
       * @param slotOffset the offset in the reserved slot space
       * @param v1 1st argument to {@link PipeTransform#transform}.
       * @param v2 2nd argument to {@link PipeTransform#transform}.
       *
       * @codeGenApi
       */


      function ɵɵpipeBind2(index, slotOffset, v1, v2) {
        var adjustedIndex = index + HEADER_OFFSET;
        var lView = getLView();
        var pipeInstance = load(lView, adjustedIndex);
        return unwrapValue$1(lView, isPure(lView, adjustedIndex) ? pureFunction2Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, pipeInstance) : pipeInstance.transform(v1, v2));
      }
      /**
       * Invokes a pipe with 3 arguments.
       *
       * This instruction acts as a guard to {@link PipeTransform#transform} invoking
       * the pipe only when an input to the pipe changes.
       *
       * @param index Pipe index where the pipe was stored on creation.
       * @param slotOffset the offset in the reserved slot space
       * @param v1 1st argument to {@link PipeTransform#transform}.
       * @param v2 2nd argument to {@link PipeTransform#transform}.
       * @param v3 4rd argument to {@link PipeTransform#transform}.
       *
       * @codeGenApi
       */


      function ɵɵpipeBind3(index, slotOffset, v1, v2, v3) {
        var adjustedIndex = index + HEADER_OFFSET;
        var lView = getLView();
        var pipeInstance = load(lView, adjustedIndex);
        return unwrapValue$1(lView, isPure(lView, adjustedIndex) ? pureFunction3Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, v3, pipeInstance) : pipeInstance.transform(v1, v2, v3));
      }
      /**
       * Invokes a pipe with 4 arguments.
       *
       * This instruction acts as a guard to {@link PipeTransform#transform} invoking
       * the pipe only when an input to the pipe changes.
       *
       * @param index Pipe index where the pipe was stored on creation.
       * @param slotOffset the offset in the reserved slot space
       * @param v1 1st argument to {@link PipeTransform#transform}.
       * @param v2 2nd argument to {@link PipeTransform#transform}.
       * @param v3 3rd argument to {@link PipeTransform#transform}.
       * @param v4 4th argument to {@link PipeTransform#transform}.
       *
       * @codeGenApi
       */


      function ɵɵpipeBind4(index, slotOffset, v1, v2, v3, v4) {
        var adjustedIndex = index + HEADER_OFFSET;
        var lView = getLView();
        var pipeInstance = load(lView, adjustedIndex);
        return unwrapValue$1(lView, isPure(lView, adjustedIndex) ? pureFunction4Internal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, v1, v2, v3, v4, pipeInstance) : pipeInstance.transform(v1, v2, v3, v4));
      }
      /**
       * Invokes a pipe with variable number of arguments.
       *
       * This instruction acts as a guard to {@link PipeTransform#transform} invoking
       * the pipe only when an input to the pipe changes.
       *
       * @param index Pipe index where the pipe was stored on creation.
       * @param slotOffset the offset in the reserved slot space
       * @param values Array of arguments to pass to {@link PipeTransform#transform} method.
       *
       * @codeGenApi
       */


      function ɵɵpipeBindV(index, slotOffset, values) {
        var adjustedIndex = index + HEADER_OFFSET;
        var lView = getLView();
        var pipeInstance = load(lView, adjustedIndex);
        return unwrapValue$1(lView, isPure(lView, adjustedIndex) ? pureFunctionVInternal(lView, getBindingRoot(), slotOffset, pipeInstance.transform, values, pipeInstance) : pipeInstance.transform.apply(pipeInstance, values));
      }

      function isPure(lView, index) {
        return lView[TVIEW].data[index].pure;
      }
      /**
       * Unwrap the output of a pipe transformation.
       * In order to trick change detection into considering that the new value is always different from
       * the old one, the old value is overwritten by NO_CHANGE.
       *
       * @param newValue the pipe transformation output.
       */


      function unwrapValue$1(lView, newValue) {
        if (WrappedValue.isWrapped(newValue)) {
          newValue = WrappedValue.unwrap(newValue); // The NO_CHANGE value needs to be written at the index where the impacted binding value is
          // stored

          var bindingToInvalidateIdx = getBindingIndex();
          lView[bindingToInvalidateIdx] = NO_CHANGE;
        }

        return newValue;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var EventEmitter_ = /*#__PURE__*/function (_rxjs__WEBPACK_IMPORT) {
        _inherits2(EventEmitter_, _rxjs__WEBPACK_IMPORT);

        var _super320 = _createSuper(EventEmitter_);

        function EventEmitter_() {
          var _this730;

          var isAsync = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;

          _classCallCheck2(this, EventEmitter_);

          _this730 = _super320.call(this);
          _this730.__isAsync = isAsync;
          return _this730;
        }

        _createClass2(EventEmitter_, [{
          key: "emit",
          value: function emit(value) {
            _get2(_getPrototypeOf2(EventEmitter_.prototype), "next", this).call(this, value);
          }
        }, {
          key: "subscribe",
          value: function subscribe(observerOrNext, error, complete) {
            var schedulerFn;

            var errorFn = function errorFn(err) {
              return null;
            };

            var completeFn = function completeFn() {
              return null;
            };

            if (observerOrNext && typeof observerOrNext === 'object') {
              schedulerFn = this.__isAsync ? function (value) {
                setTimeout(function () {
                  return observerOrNext.next(value);
                });
              } : function (value) {
                observerOrNext.next(value);
              };

              if (observerOrNext.error) {
                errorFn = this.__isAsync ? function (err) {
                  setTimeout(function () {
                    return observerOrNext.error(err);
                  });
                } : function (err) {
                  observerOrNext.error(err);
                };
              }

              if (observerOrNext.complete) {
                completeFn = this.__isAsync ? function () {
                  setTimeout(function () {
                    return observerOrNext.complete();
                  });
                } : function () {
                  observerOrNext.complete();
                };
              }
            } else {
              schedulerFn = this.__isAsync ? function (value) {
                setTimeout(function () {
                  return observerOrNext(value);
                });
              } : function (value) {
                observerOrNext(value);
              };

              if (error) {
                errorFn = this.__isAsync ? function (err) {
                  setTimeout(function () {
                    return error(err);
                  });
                } : function (err) {
                  error(err);
                };
              }

              if (complete) {
                completeFn = this.__isAsync ? function () {
                  setTimeout(function () {
                    return complete();
                  });
                } : function () {
                  complete();
                };
              }
            }

            var sink = _get2(_getPrototypeOf2(EventEmitter_.prototype), "subscribe", this).call(this, schedulerFn, errorFn, completeFn);

            if (observerOrNext instanceof rxjs__WEBPACK_IMPORTED_MODULE_0__["Subscription"]) {
              observerOrNext.add(sink);
            }

            return sink;
          }
        }]);

        return EventEmitter_;
      }(rxjs__WEBPACK_IMPORTED_MODULE_0__["Subject"]);
      /**
       * @publicApi
       */


      var EventEmitter = EventEmitter_;
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      function symbolIterator() {
        return this._results[getSymbolIterator()]();
      }
      /**
       * An unmodifiable list of items that Angular keeps up to date when the state
       * of the application changes.
       *
       * The type of object that {@link ViewChildren}, {@link ContentChildren}, and {@link QueryList}
       * provide.
       *
       * Implements an iterable interface, therefore it can be used in both ES6
       * javascript `for (var i of items)` loops as well as in Angular templates with
       * `*ngFor="let i of myList"`.
       *
       * Changes can be observed by subscribing to the changes `Observable`.
       *
       * NOTE: In the future this class will implement an `Observable` interface.
       *
       * @usageNotes
       * ### Example
       * ```typescript
       * @Component({...})
       * class Container {
       *   @ViewChildren(Item) items:QueryList<Item>;
       * }
       * ```
       *
       * @publicApi
       */


      var QueryList = /*#__PURE__*/function () {
        /**
         * @param emitDistinctChangesOnly Whether `QueryList.changes` should fire only when actual change
         *     has occurred. Or if it should fire when query is recomputed. (recomputing could resolve in
         *     the same result) This is set to `false` for backwards compatibility but will be changed to
         *     true in v12.
         */
        function QueryList() {
          var _emitDistinctChangesOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;

          _classCallCheck2(this, QueryList);

          this._emitDistinctChangesOnly = _emitDistinctChangesOnly;
          this.dirty = true;
          this._results = [];
          this._changesDetected = false;
          this._changes = null;
          this.length = 0;
          this.first = undefined;
          this.last = undefined; // This function should be declared on the prototype, but doing so there will cause the class
          // declaration to have side-effects and become not tree-shakable. For this reason we do it in
          // the constructor.
          // [getSymbolIterator()](): Iterator<T> { ... }

          var symbol = getSymbolIterator();
          var proto = QueryList.prototype;
          if (!proto[symbol]) proto[symbol] = symbolIterator;
        }
        /**
         * Returns `Observable` of `QueryList` notifying the subscriber of changes.
         */


        _createClass2(QueryList, [{
          key: "changes",
          get: function get() {
            return this._changes || (this._changes = new EventEmitter());
          }
          /**
           * Returns the QueryList entry at `index`.
           */

        }, {
          key: "get",
          value: function get(index) {
            return this._results[index];
          }
          /**
           * See
           * [Array.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)
           */

        }, {
          key: "map",
          value: function map(fn) {
            return this._results.map(fn);
          }
          /**
           * See
           * [Array.filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)
           */

        }, {
          key: "filter",
          value: function filter(fn) {
            return this._results.filter(fn);
          }
          /**
           * See
           * [Array.find](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find)
           */

        }, {
          key: "find",
          value: function find(fn) {
            return this._results.find(fn);
          }
          /**
           * See
           * [Array.reduce](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)
           */

        }, {
          key: "reduce",
          value: function reduce(fn, init) {
            return this._results.reduce(fn, init);
          }
          /**
           * See
           * [Array.forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)
           */

        }, {
          key: "forEach",
          value: function forEach(fn) {
            this._results.forEach(fn);
          }
          /**
           * See
           * [Array.some](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some)
           */

        }, {
          key: "some",
          value: function some(fn) {
            return this._results.some(fn);
          }
          /**
           * Returns a copy of the internal results list as an Array.
           */

        }, {
          key: "toArray",
          value: function toArray() {
            return this._results.slice();
          }
        }, {
          key: "toString",
          value: function toString() {
            return this._results.toString();
          }
          /**
           * Updates the stored data of the query list, and resets the `dirty` flag to `false`, so that
           * on change detection, it will not notify of changes to the queries, unless a new change
           * occurs.
           *
           * @param resultsTree The query results to store
           * @param identityAccessor Optional function for extracting stable object identity from a value
           *    in the array. This function is executed for each element of the query result list while
           *    comparing current query list with the new one (provided as a first argument of the `reset`
           *    function) to detect if the lists are different. If the function is not provided, elements
           *    are compared as is (without any pre-processing).
           */

        }, {
          key: "reset",
          value: function reset(resultsTree, identityAccessor) {
            // Cast to `QueryListInternal` so that we can mutate fields which are readonly for the usage of
            // QueryList (but not for QueryList itself.)
            var self = this;
            self.dirty = false;
            var newResultFlat = flatten(resultsTree);

            if (this._changesDetected = !arrayEquals(self._results, newResultFlat, identityAccessor)) {
              self._results = newResultFlat;
              self.length = newResultFlat.length;
              self.last = newResultFlat[this.length - 1];
              self.first = newResultFlat[0];
            }
          }
          /**
           * Triggers a change event by emitting on the `changes` {@link EventEmitter}.
           */

        }, {
          key: "notifyOnChanges",
          value: function notifyOnChanges() {
            if (this._changes && (this._changesDetected || !this._emitDistinctChangesOnly)) this._changes.emit(this);
          }
          /** internal */

        }, {
          key: "setDirty",
          value: function setDirty() {
            this.dirty = true;
          }
          /** internal */

        }, {
          key: "destroy",
          value: function destroy() {
            this.changes.complete();
            this.changes.unsubscribe();
          }
        }]);

        return QueryList;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // Note: This hack is necessary so we don't erroneously get a circular dependency
      // failure based on types.


      var unusedValueExportToPlacateAjd$7 = 1;
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // Note: This hack is necessary so we don't erroneously get a circular dependency
      // failure based on types.

      var unusedValueExportToPlacateAjd$8 = 1;
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var unusedValueToPlacateAjd$2 = unusedValueExportToPlacateAjd$7 + unusedValueExportToPlacateAjd$3 + unusedValueExportToPlacateAjd$4 + unusedValueExportToPlacateAjd$8;

      var LQuery_ = /*#__PURE__*/function () {
        function LQuery_(queryList) {
          _classCallCheck2(this, LQuery_);

          this.queryList = queryList;
          this.matches = null;
        }

        _createClass2(LQuery_, [{
          key: "clone",
          value: function clone() {
            return new LQuery_(this.queryList);
          }
        }, {
          key: "setDirty",
          value: function setDirty() {
            this.queryList.setDirty();
          }
        }]);

        return LQuery_;
      }();

      var LQueries_ = /*#__PURE__*/function () {
        function LQueries_() {
          var queries = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];

          _classCallCheck2(this, LQueries_);

          this.queries = queries;
        }

        _createClass2(LQueries_, [{
          key: "createEmbeddedView",
          value: function createEmbeddedView(tView) {
            var tQueries = tView.queries;

            if (tQueries !== null) {
              var noOfInheritedQueries = tView.contentQueries !== null ? tView.contentQueries[0] : tQueries.length;
              var viewLQueries = []; // An embedded view has queries propagated from a declaration view at the beginning of the
              // TQueries collection and up until a first content query declared in the embedded view. Only
              // propagated LQueries are created at this point (LQuery corresponding to declared content
              // queries will be instantiated from the content query instructions for each directive).

              for (var i = 0; i < noOfInheritedQueries; i++) {
                var tQuery = tQueries.getByIndex(i);
                var parentLQuery = this.queries[tQuery.indexInDeclarationView];
                viewLQueries.push(parentLQuery.clone());
              }

              return new LQueries_(viewLQueries);
            }

            return null;
          }
        }, {
          key: "insertView",
          value: function insertView(tView) {
            this.dirtyQueriesWithMatches(tView);
          }
        }, {
          key: "detachView",
          value: function detachView(tView) {
            this.dirtyQueriesWithMatches(tView);
          }
        }, {
          key: "dirtyQueriesWithMatches",
          value: function dirtyQueriesWithMatches(tView) {
            for (var i = 0; i < this.queries.length; i++) {
              if (getTQuery(tView, i).matches !== null) {
                this.queries[i].setDirty();
              }
            }
          }
        }]);

        return LQueries_;
      }();

      var TQueryMetadata_ = function TQueryMetadata_(predicate, flags) {
        var read = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;

        _classCallCheck2(this, TQueryMetadata_);

        this.predicate = predicate;
        this.flags = flags;
        this.read = read;
      };

      var TQueries_ = /*#__PURE__*/function () {
        function TQueries_() {
          var queries = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];

          _classCallCheck2(this, TQueries_);

          this.queries = queries;
        }

        _createClass2(TQueries_, [{
          key: "elementStart",
          value: function elementStart(tView, tNode) {
            ngDevMode && assertFirstCreatePass(tView, 'Queries should collect results on the first template pass only');

            for (var i = 0; i < this.queries.length; i++) {
              this.queries[i].elementStart(tView, tNode);
            }
          }
        }, {
          key: "elementEnd",
          value: function elementEnd(tNode) {
            for (var i = 0; i < this.queries.length; i++) {
              this.queries[i].elementEnd(tNode);
            }
          }
        }, {
          key: "embeddedTView",
          value: function embeddedTView(tNode) {
            var queriesForTemplateRef = null;

            for (var i = 0; i < this.length; i++) {
              var childQueryIndex = queriesForTemplateRef !== null ? queriesForTemplateRef.length : 0;
              var tqueryClone = this.getByIndex(i).embeddedTView(tNode, childQueryIndex);

              if (tqueryClone) {
                tqueryClone.indexInDeclarationView = i;

                if (queriesForTemplateRef !== null) {
                  queriesForTemplateRef.push(tqueryClone);
                } else {
                  queriesForTemplateRef = [tqueryClone];
                }
              }
            }

            return queriesForTemplateRef !== null ? new TQueries_(queriesForTemplateRef) : null;
          }
        }, {
          key: "template",
          value: function template(tView, tNode) {
            ngDevMode && assertFirstCreatePass(tView, 'Queries should collect results on the first template pass only');

            for (var i = 0; i < this.queries.length; i++) {
              this.queries[i].template(tView, tNode);
            }
          }
        }, {
          key: "getByIndex",
          value: function getByIndex(index) {
            ngDevMode && assertIndexInRange(this.queries, index);
            return this.queries[index];
          }
        }, {
          key: "length",
          get: function get() {
            return this.queries.length;
          }
        }, {
          key: "track",
          value: function track(tquery) {
            this.queries.push(tquery);
          }
        }]);

        return TQueries_;
      }();

      var TQuery_ = /*#__PURE__*/function () {
        function TQuery_(metadata) {
          var nodeIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;

          _classCallCheck2(this, TQuery_);

          this.metadata = metadata;
          this.matches = null;
          this.indexInDeclarationView = -1;
          this.crossesNgTemplate = false;
          /**
           * A flag indicating if a given query still applies to nodes it is crossing. We use this flag
           * (alongside with _declarationNodeIndex) to know when to stop applying content queries to
           * elements in a template.
           */

          this._appliesToNextNode = true;
          this._declarationNodeIndex = nodeIndex;
        }

        _createClass2(TQuery_, [{
          key: "elementStart",
          value: function elementStart(tView, tNode) {
            if (this.isApplyingToNode(tNode)) {
              this.matchTNode(tView, tNode);
            }
          }
        }, {
          key: "elementEnd",
          value: function elementEnd(tNode) {
            if (this._declarationNodeIndex === tNode.index) {
              this._appliesToNextNode = false;
            }
          }
        }, {
          key: "template",
          value: function template(tView, tNode) {
            this.elementStart(tView, tNode);
          }
        }, {
          key: "embeddedTView",
          value: function embeddedTView(tNode, childQueryIndex) {
            if (this.isApplyingToNode(tNode)) {
              this.crossesNgTemplate = true; // A marker indicating a `<ng-template>` element (a placeholder for query results from
              // embedded views created based on this `<ng-template>`).

              this.addMatch(-tNode.index, childQueryIndex);
              return new TQuery_(this.metadata);
            }

            return null;
          }
        }, {
          key: "isApplyingToNode",
          value: function isApplyingToNode(tNode) {
            if (this._appliesToNextNode && (this.metadata.flags & 1
            /* descendants */
            ) !== 1
            /* descendants */
            ) {
                var declarationNodeIdx = this._declarationNodeIndex;
                var parent = tNode.parent; // Determine if a given TNode is a "direct" child of a node on which a content query was
                // declared (only direct children of query's host node can match with the descendants: false
                // option). There are 3 main use-case / conditions to consider here:
                // - <needs-target><i #target></i></needs-target>: here <i #target> parent node is a query
                // host node;
                // - <needs-target><ng-template [ngIf]="true"><i #target></i></ng-template></needs-target>:
                // here <i #target> parent node is null;
                // - <needs-target><ng-container><i #target></i></ng-container></needs-target>: here we need
                // to go past `<ng-container>` to determine <i #target> parent node (but we shouldn't traverse
                // up past the query's host node!).

                while (parent !== null && parent.type & 8
                /* ElementContainer */
                && parent.index !== declarationNodeIdx) {
                  parent = parent.parent;
                }

                return declarationNodeIdx === (parent !== null ? parent.index : -1);
              }

            return this._appliesToNextNode;
          }
        }, {
          key: "matchTNode",
          value: function matchTNode(tView, tNode) {
            var predicate = this.metadata.predicate;

            if (Array.isArray(predicate)) {
              for (var i = 0; i < predicate.length; i++) {
                var name = predicate[i];
                this.matchTNodeWithReadOption(tView, tNode, getIdxOfMatchingSelector(tNode, name)); // Also try matching the name to a provider since strings can be used as DI tokens too.

                this.matchTNodeWithReadOption(tView, tNode, locateDirectiveOrProvider(tNode, tView, name, false, false));
              }
            } else {
              if (predicate === TemplateRef) {
                if (tNode.type & 4
                /* Container */
                ) {
                    this.matchTNodeWithReadOption(tView, tNode, -1);
                  }
              } else {
                this.matchTNodeWithReadOption(tView, tNode, locateDirectiveOrProvider(tNode, tView, predicate, false, false));
              }
            }
          }
        }, {
          key: "matchTNodeWithReadOption",
          value: function matchTNodeWithReadOption(tView, tNode, nodeMatchIdx) {
            if (nodeMatchIdx !== null) {
              var read = this.metadata.read;

              if (read !== null) {
                if (read === ElementRef || read === ViewContainerRef || read === TemplateRef && tNode.type & 4
                /* Container */
                ) {
                  this.addMatch(tNode.index, -2);
                } else {
                  var directiveOrProviderIdx = locateDirectiveOrProvider(tNode, tView, read, false, false);

                  if (directiveOrProviderIdx !== null) {
                    this.addMatch(tNode.index, directiveOrProviderIdx);
                  }
                }
              } else {
                this.addMatch(tNode.index, nodeMatchIdx);
              }
            }
          }
        }, {
          key: "addMatch",
          value: function addMatch(tNodeIdx, matchIdx) {
            if (this.matches === null) {
              this.matches = [tNodeIdx, matchIdx];
            } else {
              this.matches.push(tNodeIdx, matchIdx);
            }
          }
        }]);

        return TQuery_;
      }();
      /**
       * Iterates over local names for a given node and returns directive index
       * (or -1 if a local name points to an element).
       *
       * @param tNode static data of a node to check
       * @param selector selector to match
       * @returns directive index, -1 or null if a selector didn't match any of the local names
       */


      function getIdxOfMatchingSelector(tNode, selector) {
        var localNames = tNode.localNames;

        if (localNames !== null) {
          for (var i = 0; i < localNames.length; i += 2) {
            if (localNames[i] === selector) {
              return localNames[i + 1];
            }
          }
        }

        return null;
      }

      function createResultByTNodeType(tNode, currentView) {
        if (tNode.type & (3
        /* AnyRNode */
        | 8
        /* ElementContainer */
        )) {
          return createElementRef(tNode, currentView);
        } else if (tNode.type & 4
        /* Container */
        ) {
            return createTemplateRef(tNode, currentView);
          }

        return null;
      }

      function createResultForNode(lView, tNode, matchingIdx, read) {
        if (matchingIdx === -1) {
          // if read token and / or strategy is not specified, detect it using appropriate tNode type
          return createResultByTNodeType(tNode, lView);
        } else if (matchingIdx === -2) {
          // read a special token from a node injector
          return createSpecialToken(lView, tNode, read);
        } else {
          // read a token
          return getNodeInjectable(lView, lView[TVIEW], matchingIdx, tNode);
        }
      }

      function createSpecialToken(lView, tNode, read) {
        if (read === ElementRef) {
          return createElementRef(tNode, lView);
        } else if (read === TemplateRef) {
          return createTemplateRef(tNode, lView);
        } else if (read === ViewContainerRef) {
          ngDevMode && assertTNodeType(tNode, 3
          /* AnyRNode */
          | 12
          /* AnyContainer */
          );
          return createContainerRef(tNode, lView);
        } else {
          ngDevMode && throwError("Special token to read should be one of ElementRef, TemplateRef or ViewContainerRef but got ".concat(stringify(read), "."));
        }
      }
      /**
       * A helper function that creates query results for a given view. This function is meant to do the
       * processing once and only once for a given view instance (a set of results for a given view
       * doesn't change).
       */


      function materializeViewResults(tView, lView, tQuery, queryIndex) {
        var lQuery = lView[QUERIES].queries[queryIndex];

        if (lQuery.matches === null) {
          var tViewData = tView.data;
          var tQueryMatches = tQuery.matches;
          var result = [];

          for (var i = 0; i < tQueryMatches.length; i += 2) {
            var matchedNodeIdx = tQueryMatches[i];

            if (matchedNodeIdx < 0) {
              // we at the <ng-template> marker which might have results in views created based on this
              // <ng-template> - those results will be in separate views though, so here we just leave
              // null as a placeholder
              result.push(null);
            } else {
              ngDevMode && assertIndexInRange(tViewData, matchedNodeIdx);
              var tNode = tViewData[matchedNodeIdx];
              result.push(createResultForNode(lView, tNode, tQueryMatches[i + 1], tQuery.metadata.read));
            }
          }

          lQuery.matches = result;
        }

        return lQuery.matches;
      }
      /**
       * A helper function that collects (already materialized) query results from a tree of views,
       * starting with a provided LView.
       */


      function collectQueryResults(tView, lView, queryIndex, result) {
        var tQuery = tView.queries.getByIndex(queryIndex);
        var tQueryMatches = tQuery.matches;

        if (tQueryMatches !== null) {
          var lViewResults = materializeViewResults(tView, lView, tQuery, queryIndex);

          for (var i = 0; i < tQueryMatches.length; i += 2) {
            var tNodeIdx = tQueryMatches[i];

            if (tNodeIdx > 0) {
              result.push(lViewResults[i / 2]);
            } else {
              var childQueryIndex = tQueryMatches[i + 1];
              var declarationLContainer = lView[-tNodeIdx];
              ngDevMode && assertLContainer(declarationLContainer); // collect matches for views inserted in this container

              for (var _i34 = CONTAINER_HEADER_OFFSET; _i34 < declarationLContainer.length; _i34++) {
                var embeddedLView = declarationLContainer[_i34];

                if (embeddedLView[DECLARATION_LCONTAINER] === embeddedLView[PARENT]) {
                  collectQueryResults(embeddedLView[TVIEW], embeddedLView, childQueryIndex, result);
                }
              } // collect matches for views created from this declaration container and inserted into
              // different containers


              if (declarationLContainer[MOVED_VIEWS] !== null) {
                var embeddedLViews = declarationLContainer[MOVED_VIEWS];

                for (var _i35 = 0; _i35 < embeddedLViews.length; _i35++) {
                  var _embeddedLView = embeddedLViews[_i35];
                  collectQueryResults(_embeddedLView[TVIEW], _embeddedLView, childQueryIndex, result);
                }
              }
            }
          }
        }

        return result;
      }
      /**
       * Refreshes a query by combining matches from all active views and removing matches from deleted
       * views.
       *
       * @returns `true` if a query got dirty during change detection or if this is a static query
       * resolving in creation mode, `false` otherwise.
       *
       * @codeGenApi
       */


      function ɵɵqueryRefresh(queryList) {
        var lView = getLView();
        var tView = getTView();
        var queryIndex = getCurrentQueryIndex();
        setCurrentQueryIndex(queryIndex + 1);
        var tQuery = getTQuery(tView, queryIndex);

        if (queryList.dirty && isCreationMode(lView) === ((tQuery.metadata.flags & 2
        /* isStatic */
        ) === 2
        /* isStatic */
        )) {
          if (tQuery.matches === null) {
            queryList.reset([]);
          } else {
            var result = tQuery.crossesNgTemplate ? collectQueryResults(tView, lView, queryIndex, []) : materializeViewResults(tView, lView, tQuery, queryIndex);
            queryList.reset(result, unwrapElementRef);
            queryList.notifyOnChanges();
          }

          return true;
        }

        return false;
      }
      /**
       * Creates new QueryList, stores the reference in LView and returns QueryList.
       *
       * @param predicate The type for which the query will search
       * @param flags Flags associated with the query
       * @param read What to save in the query
       *
       * @codeGenApi
       */


      function ɵɵviewQuery(predicate, flags, read) {
        ngDevMode && assertNumber(flags, 'Expecting flags');
        var tView = getTView();

        if (tView.firstCreatePass) {
          createTQuery(tView, new TQueryMetadata_(predicate, flags, read), -1);

          if ((flags & 2
          /* isStatic */
          ) === 2
          /* isStatic */
          ) {
              tView.staticViewQueries = true;
            }
        }

        createLQuery(tView, getLView(), flags);
      }
      /**
       * Registers a QueryList, associated with a content query, for later refresh (part of a view
       * refresh).
       *
       * @param directiveIndex Current directive index
       * @param predicate The type for which the query will search
       * @param flags Flags associated with the query
       * @param read What to save in the query
       * @returns QueryList<T>
       *
       * @codeGenApi
       */


      function ɵɵcontentQuery(directiveIndex, predicate, flags, read) {
        ngDevMode && assertNumber(flags, 'Expecting flags');
        var tView = getTView();

        if (tView.firstCreatePass) {
          var tNode = getCurrentTNode();
          createTQuery(tView, new TQueryMetadata_(predicate, flags, read), tNode.index);
          saveContentQueryAndDirectiveIndex(tView, directiveIndex);

          if ((flags & 2
          /* isStatic */
          ) === 2
          /* isStatic */
          ) {
              tView.staticContentQueries = true;
            }
        }

        createLQuery(tView, getLView(), flags);
      }
      /**
       * Loads a QueryList corresponding to the current view or content query.
       *
       * @codeGenApi
       */


      function ɵɵloadQuery() {
        return loadQueryInternal(getLView(), getCurrentQueryIndex());
      }

      function loadQueryInternal(lView, queryIndex) {
        ngDevMode && assertDefined(lView[QUERIES], 'LQueries should be defined when trying to load a query');
        ngDevMode && assertIndexInRange(lView[QUERIES].queries, queryIndex);
        return lView[QUERIES].queries[queryIndex].queryList;
      }

      function createLQuery(tView, lView, flags) {
        var queryList = new QueryList((flags & 4
        /* emitDistinctChangesOnly */
        ) === 4
        /* emitDistinctChangesOnly */
        );
        storeCleanupWithContext(tView, lView, queryList, queryList.destroy);
        if (lView[QUERIES] === null) lView[QUERIES] = new LQueries_();
        lView[QUERIES].queries.push(new LQuery_(queryList));
      }

      function createTQuery(tView, metadata, nodeIndex) {
        if (tView.queries === null) tView.queries = new TQueries_();
        tView.queries.track(new TQuery_(metadata, nodeIndex));
      }

      function saveContentQueryAndDirectiveIndex(tView, directiveIndex) {
        var tViewContentQueries = tView.contentQueries || (tView.contentQueries = []);
        var lastSavedDirectiveIndex = tViewContentQueries.length ? tViewContentQueries[tViewContentQueries.length - 1] : -1;

        if (directiveIndex !== lastSavedDirectiveIndex) {
          tViewContentQueries.push(tView.queries.length - 1, directiveIndex);
        }
      }

      function getTQuery(tView, index) {
        ngDevMode && assertDefined(tView.queries, 'TQueries must be defined to retrieve a TQuery');
        return tView.queries.getByIndex(index);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Retrieves `TemplateRef` instance from `Injector` when a local reference is placed on the
       * `<ng-template>` element.
       *
       * @codeGenApi
       */


      function ɵɵtemplateRefExtractor(tNode, lView) {
        return createTemplateRef(tNode, lView);
      }
      /**
       * Returns the appropriate `ChangeDetectorRef` for a pipe.
       *
       * @codeGenApi
       */


      function ɵɵinjectPipeChangeDetectorRef() {
        var flags = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : InjectFlags.Default;
        var value = injectChangeDetectorRef(true);

        if (value == null && !(flags & InjectFlags.Optional)) {
          throwProviderNotFoundError('ChangeDetectorRef');
        } else {
          return value;
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ɵ0$c = function ɵ0$c() {
        return {
          'ɵɵattribute': ɵɵattribute,
          'ɵɵattributeInterpolate1': ɵɵattributeInterpolate1,
          'ɵɵattributeInterpolate2': ɵɵattributeInterpolate2,
          'ɵɵattributeInterpolate3': ɵɵattributeInterpolate3,
          'ɵɵattributeInterpolate4': ɵɵattributeInterpolate4,
          'ɵɵattributeInterpolate5': ɵɵattributeInterpolate5,
          'ɵɵattributeInterpolate6': ɵɵattributeInterpolate6,
          'ɵɵattributeInterpolate7': ɵɵattributeInterpolate7,
          'ɵɵattributeInterpolate8': ɵɵattributeInterpolate8,
          'ɵɵattributeInterpolateV': ɵɵattributeInterpolateV,
          'ɵɵdefineComponent': ɵɵdefineComponent,
          'ɵɵdefineDirective': ɵɵdefineDirective,
          'ɵɵdefineInjectable': ɵɵdefineInjectable,
          'ɵɵdefineInjector': ɵɵdefineInjector,
          'ɵɵdefineNgModule': ɵɵdefineNgModule,
          'ɵɵdefinePipe': ɵɵdefinePipe,
          'ɵɵdirectiveInject': ɵɵdirectiveInject,
          'ɵɵgetFactoryOf': ɵɵgetFactoryOf,
          'ɵɵgetInheritedFactory': ɵɵgetInheritedFactory,
          'ɵɵinject': ɵɵinject,
          'ɵɵinjectAttribute': ɵɵinjectAttribute,
          'ɵɵinvalidFactory': ɵɵinvalidFactory,
          'ɵɵinvalidFactoryDep': ɵɵinvalidFactoryDep,
          'ɵɵinjectPipeChangeDetectorRef': ɵɵinjectPipeChangeDetectorRef,
          'ɵɵtemplateRefExtractor': ɵɵtemplateRefExtractor,
          'ɵɵNgOnChangesFeature': ɵɵNgOnChangesFeature,
          'ɵɵProvidersFeature': ɵɵProvidersFeature,
          'ɵɵCopyDefinitionFeature': ɵɵCopyDefinitionFeature,
          'ɵɵInheritDefinitionFeature': ɵɵInheritDefinitionFeature,
          'ɵɵnextContext': ɵɵnextContext,
          'ɵɵnamespaceHTML': ɵɵnamespaceHTML,
          'ɵɵnamespaceMathML': ɵɵnamespaceMathML,
          'ɵɵnamespaceSVG': ɵɵnamespaceSVG,
          'ɵɵenableBindings': ɵɵenableBindings,
          'ɵɵdisableBindings': ɵɵdisableBindings,
          'ɵɵelementStart': ɵɵelementStart,
          'ɵɵelementEnd': ɵɵelementEnd,
          'ɵɵelement': ɵɵelement,
          'ɵɵelementContainerStart': ɵɵelementContainerStart,
          'ɵɵelementContainerEnd': ɵɵelementContainerEnd,
          'ɵɵelementContainer': ɵɵelementContainer,
          'ɵɵpureFunction0': ɵɵpureFunction0,
          'ɵɵpureFunction1': ɵɵpureFunction1,
          'ɵɵpureFunction2': ɵɵpureFunction2,
          'ɵɵpureFunction3': ɵɵpureFunction3,
          'ɵɵpureFunction4': ɵɵpureFunction4,
          'ɵɵpureFunction5': ɵɵpureFunction5,
          'ɵɵpureFunction6': ɵɵpureFunction6,
          'ɵɵpureFunction7': ɵɵpureFunction7,
          'ɵɵpureFunction8': ɵɵpureFunction8,
          'ɵɵpureFunctionV': ɵɵpureFunctionV,
          'ɵɵgetCurrentView': ɵɵgetCurrentView,
          'ɵɵrestoreView': ɵɵrestoreView,
          'ɵɵlistener': ɵɵlistener,
          'ɵɵprojection': ɵɵprojection,
          'ɵɵsyntheticHostProperty': ɵɵsyntheticHostProperty,
          'ɵɵsyntheticHostListener': ɵɵsyntheticHostListener,
          'ɵɵpipeBind1': ɵɵpipeBind1,
          'ɵɵpipeBind2': ɵɵpipeBind2,
          'ɵɵpipeBind3': ɵɵpipeBind3,
          'ɵɵpipeBind4': ɵɵpipeBind4,
          'ɵɵpipeBindV': ɵɵpipeBindV,
          'ɵɵprojectionDef': ɵɵprojectionDef,
          'ɵɵhostProperty': ɵɵhostProperty,
          'ɵɵproperty': ɵɵproperty,
          'ɵɵpropertyInterpolate': ɵɵpropertyInterpolate,
          'ɵɵpropertyInterpolate1': ɵɵpropertyInterpolate1,
          'ɵɵpropertyInterpolate2': ɵɵpropertyInterpolate2,
          'ɵɵpropertyInterpolate3': ɵɵpropertyInterpolate3,
          'ɵɵpropertyInterpolate4': ɵɵpropertyInterpolate4,
          'ɵɵpropertyInterpolate5': ɵɵpropertyInterpolate5,
          'ɵɵpropertyInterpolate6': ɵɵpropertyInterpolate6,
          'ɵɵpropertyInterpolate7': ɵɵpropertyInterpolate7,
          'ɵɵpropertyInterpolate8': ɵɵpropertyInterpolate8,
          'ɵɵpropertyInterpolateV': ɵɵpropertyInterpolateV,
          'ɵɵpipe': ɵɵpipe,
          'ɵɵqueryRefresh': ɵɵqueryRefresh,
          'ɵɵviewQuery': ɵɵviewQuery,
          'ɵɵloadQuery': ɵɵloadQuery,
          'ɵɵcontentQuery': ɵɵcontentQuery,
          'ɵɵreference': ɵɵreference,
          'ɵɵclassMap': ɵɵclassMap,
          'ɵɵclassMapInterpolate1': ɵɵclassMapInterpolate1,
          'ɵɵclassMapInterpolate2': ɵɵclassMapInterpolate2,
          'ɵɵclassMapInterpolate3': ɵɵclassMapInterpolate3,
          'ɵɵclassMapInterpolate4': ɵɵclassMapInterpolate4,
          'ɵɵclassMapInterpolate5': ɵɵclassMapInterpolate5,
          'ɵɵclassMapInterpolate6': ɵɵclassMapInterpolate6,
          'ɵɵclassMapInterpolate7': ɵɵclassMapInterpolate7,
          'ɵɵclassMapInterpolate8': ɵɵclassMapInterpolate8,
          'ɵɵclassMapInterpolateV': ɵɵclassMapInterpolateV,
          'ɵɵstyleMap': ɵɵstyleMap,
          'ɵɵstyleMapInterpolate1': ɵɵstyleMapInterpolate1,
          'ɵɵstyleMapInterpolate2': ɵɵstyleMapInterpolate2,
          'ɵɵstyleMapInterpolate3': ɵɵstyleMapInterpolate3,
          'ɵɵstyleMapInterpolate4': ɵɵstyleMapInterpolate4,
          'ɵɵstyleMapInterpolate5': ɵɵstyleMapInterpolate5,
          'ɵɵstyleMapInterpolate6': ɵɵstyleMapInterpolate6,
          'ɵɵstyleMapInterpolate7': ɵɵstyleMapInterpolate7,
          'ɵɵstyleMapInterpolate8': ɵɵstyleMapInterpolate8,
          'ɵɵstyleMapInterpolateV': ɵɵstyleMapInterpolateV,
          'ɵɵstyleProp': ɵɵstyleProp,
          'ɵɵstylePropInterpolate1': ɵɵstylePropInterpolate1,
          'ɵɵstylePropInterpolate2': ɵɵstylePropInterpolate2,
          'ɵɵstylePropInterpolate3': ɵɵstylePropInterpolate3,
          'ɵɵstylePropInterpolate4': ɵɵstylePropInterpolate4,
          'ɵɵstylePropInterpolate5': ɵɵstylePropInterpolate5,
          'ɵɵstylePropInterpolate6': ɵɵstylePropInterpolate6,
          'ɵɵstylePropInterpolate7': ɵɵstylePropInterpolate7,
          'ɵɵstylePropInterpolate8': ɵɵstylePropInterpolate8,
          'ɵɵstylePropInterpolateV': ɵɵstylePropInterpolateV,
          'ɵɵclassProp': ɵɵclassProp,
          'ɵɵadvance': ɵɵadvance,
          'ɵɵtemplate': ɵɵtemplate,
          'ɵɵtext': ɵɵtext,
          'ɵɵtextInterpolate': ɵɵtextInterpolate,
          'ɵɵtextInterpolate1': ɵɵtextInterpolate1,
          'ɵɵtextInterpolate2': ɵɵtextInterpolate2,
          'ɵɵtextInterpolate3': ɵɵtextInterpolate3,
          'ɵɵtextInterpolate4': ɵɵtextInterpolate4,
          'ɵɵtextInterpolate5': ɵɵtextInterpolate5,
          'ɵɵtextInterpolate6': ɵɵtextInterpolate6,
          'ɵɵtextInterpolate7': ɵɵtextInterpolate7,
          'ɵɵtextInterpolate8': ɵɵtextInterpolate8,
          'ɵɵtextInterpolateV': ɵɵtextInterpolateV,
          'ɵɵi18n': ɵɵi18n,
          'ɵɵi18nAttributes': ɵɵi18nAttributes,
          'ɵɵi18nExp': ɵɵi18nExp,
          'ɵɵi18nStart': ɵɵi18nStart,
          'ɵɵi18nEnd': ɵɵi18nEnd,
          'ɵɵi18nApply': ɵɵi18nApply,
          'ɵɵi18nPostprocess': ɵɵi18nPostprocess,
          'ɵɵresolveWindow': ɵɵresolveWindow,
          'ɵɵresolveDocument': ɵɵresolveDocument,
          'ɵɵresolveBody': ɵɵresolveBody,
          'ɵɵsetComponentScope': ɵɵsetComponentScope,
          'ɵɵsetNgModuleScope': ɵɵsetNgModuleScope,
          'ɵɵsanitizeHtml': ɵɵsanitizeHtml,
          'ɵɵsanitizeStyle': ɵɵsanitizeStyle,
          'ɵɵsanitizeResourceUrl': ɵɵsanitizeResourceUrl,
          'ɵɵsanitizeScript': ɵɵsanitizeScript,
          'ɵɵsanitizeUrl': ɵɵsanitizeUrl,
          'ɵɵsanitizeUrlOrResourceUrl': ɵɵsanitizeUrlOrResourceUrl,
          'ɵɵtrustConstantHtml': ɵɵtrustConstantHtml,
          'ɵɵtrustConstantResourceUrl': ɵɵtrustConstantResourceUrl,
          'forwardRef': forwardRef,
          'resolveForwardRef': resolveForwardRef
        };
      };
      /**
       * A mapping of the @angular/core API surface used in generated expressions to the actual symbols.
       *
       * This should be kept up to date with the public exports of @angular/core.
       */


      var angularCoreEnv = ɵ0$c();
      var jitOptions = null;

      function setJitOptions(options) {
        if (jitOptions !== null) {
          if (options.defaultEncapsulation !== jitOptions.defaultEncapsulation) {
            ngDevMode && console.error('Provided value for `defaultEncapsulation` can not be changed once it has been set.');
            return;
          }

          if (options.preserveWhitespaces !== jitOptions.preserveWhitespaces) {
            ngDevMode && console.error('Provided value for `preserveWhitespaces` can not be changed once it has been set.');
            return;
          }
        }

        jitOptions = options;
      }

      function getJitOptions() {
        return jitOptions;
      }

      function resetJitOptions() {
        jitOptions = null;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var EMPTY_ARRAY$5 = [];
      var moduleQueue = [];
      /**
       * Enqueues moduleDef to be checked later to see if scope can be set on its
       * component declarations.
       */

      function enqueueModuleForDelayedScoping(moduleType, ngModule) {
        moduleQueue.push({
          moduleType: moduleType,
          ngModule: ngModule
        });
      }

      var flushingModuleQueue = false;
      /**
       * Loops over queued module definitions, if a given module definition has all of its
       * declarations resolved, it dequeues that module definition and sets the scope on
       * its declarations.
       */

      function flushModuleScopingQueueAsMuchAsPossible() {
        if (!flushingModuleQueue) {
          flushingModuleQueue = true;

          try {
            for (var i = moduleQueue.length - 1; i >= 0; i--) {
              var _moduleQueue$i = moduleQueue[i],
                  moduleType = _moduleQueue$i.moduleType,
                  ngModule = _moduleQueue$i.ngModule;

              if (ngModule.declarations && ngModule.declarations.every(isResolvedDeclaration)) {
                // dequeue
                moduleQueue.splice(i, 1);
                setScopeOnDeclaredComponents(moduleType, ngModule);
              }
            }
          } finally {
            flushingModuleQueue = false;
          }
        }
      }
      /**
       * Returns truthy if a declaration has resolved. If the declaration happens to be
       * an array of declarations, it will recurse to check each declaration in that array
       * (which may also be arrays).
       */


      function isResolvedDeclaration(declaration) {
        if (Array.isArray(declaration)) {
          return declaration.every(isResolvedDeclaration);
        }

        return !!resolveForwardRef(declaration);
      }
      /**
       * Compiles a module in JIT mode.
       *
       * This function automatically gets called when a class has a `@NgModule` decorator.
       */


      function compileNgModule(moduleType) {
        var ngModule = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
        compileNgModuleDefs(moduleType, ngModule); // Because we don't know if all declarations have resolved yet at the moment the
        // NgModule decorator is executing, we're enqueueing the setting of module scope
        // on its declarations to be run at a later time when all declarations for the module,
        // including forward refs, have resolved.

        enqueueModuleForDelayedScoping(moduleType, ngModule);
      }
      /**
       * Compiles and adds the `ɵmod` and `ɵinj` properties to the module class.
       *
       * It's possible to compile a module via this API which will allow duplicate declarations in its
       * root.
       */


      function compileNgModuleDefs(moduleType, ngModule) {
        var allowDuplicateDeclarationsInRoot = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
        ngDevMode && assertDefined(moduleType, 'Required value moduleType');
        ngDevMode && assertDefined(ngModule, 'Required value ngModule');
        var declarations = flatten(ngModule.declarations || EMPTY_ARRAY$5);
        var ngModuleDef = null;
        Object.defineProperty(moduleType, NG_MOD_DEF, {
          configurable: true,
          get: function get() {
            if (ngModuleDef === null) {
              if (ngDevMode && ngModule.imports && ngModule.imports.indexOf(moduleType) > -1) {
                // We need to assert this immediately, because allowing it to continue will cause it to
                // go into an infinite loop before we've reached the point where we throw all the errors.
                throw new Error("'".concat(stringifyForError(moduleType), "' module can't import itself"));
              }

              ngModuleDef = getCompilerFacade().compileNgModule(angularCoreEnv, "ng:///".concat(moduleType.name, "/\u0275mod.js"), {
                type: moduleType,
                bootstrap: flatten(ngModule.bootstrap || EMPTY_ARRAY$5).map(resolveForwardRef),
                declarations: declarations.map(resolveForwardRef),
                imports: flatten(ngModule.imports || EMPTY_ARRAY$5).map(resolveForwardRef).map(expandModuleWithProviders),
                exports: flatten(ngModule.exports || EMPTY_ARRAY$5).map(resolveForwardRef).map(expandModuleWithProviders),
                schemas: ngModule.schemas ? flatten(ngModule.schemas) : null,
                id: ngModule.id || null
              }); // Set `schemas` on ngModuleDef to an empty array in JIT mode to indicate that runtime
              // should verify that there are no unknown elements in a template. In AOT mode, that check
              // happens at compile time and `schemas` information is not present on Component and Module
              // defs after compilation (so the check doesn't happen the second time at runtime).

              if (!ngModuleDef.schemas) {
                ngModuleDef.schemas = [];
              }
            }

            return ngModuleDef;
          }
        });
        var ngInjectorDef = null;
        Object.defineProperty(moduleType, NG_INJ_DEF, {
          get: function get() {
            if (ngInjectorDef === null) {
              ngDevMode && verifySemanticsOfNgModuleDef(moduleType, allowDuplicateDeclarationsInRoot);
              var meta = {
                name: moduleType.name,
                type: moduleType,
                deps: reflectDependencies(moduleType),
                providers: ngModule.providers || EMPTY_ARRAY$5,
                imports: [(ngModule.imports || EMPTY_ARRAY$5).map(resolveForwardRef), (ngModule.exports || EMPTY_ARRAY$5).map(resolveForwardRef)]
              };
              ngInjectorDef = getCompilerFacade().compileInjector(angularCoreEnv, "ng:///".concat(moduleType.name, "/\u0275inj.js"), meta);
            }

            return ngInjectorDef;
          },
          // Make the property configurable in dev mode to allow overriding in tests
          configurable: !!ngDevMode
        });
      }

      function verifySemanticsOfNgModuleDef(moduleType, allowDuplicateDeclarationsInRoot, importingModule) {
        if (verifiedNgModule.get(moduleType)) return;
        verifiedNgModule.set(moduleType, true);
        moduleType = resolveForwardRef(moduleType);
        var ngModuleDef;

        if (importingModule) {
          ngModuleDef = getNgModuleDef(moduleType);

          if (!ngModuleDef) {
            throw new Error("Unexpected value '".concat(moduleType.name, "' imported by the module '").concat(importingModule.name, "'. Please add an @NgModule annotation."));
          }
        } else {
          ngModuleDef = getNgModuleDef(moduleType, true);
        }

        var errors = [];
        var declarations = maybeUnwrapFn(ngModuleDef.declarations);
        var imports = maybeUnwrapFn(ngModuleDef.imports);
        flatten(imports).map(unwrapModuleWithProvidersImports).forEach(function (mod) {
          verifySemanticsOfNgModuleImport(mod, moduleType);
          verifySemanticsOfNgModuleDef(mod, false, moduleType);
        });
        var exports = maybeUnwrapFn(ngModuleDef.exports);
        declarations.forEach(verifyDeclarationsHaveDefinitions);
        declarations.forEach(verifyDirectivesHaveSelector);
        var combinedDeclarations = [].concat(_toConsumableArray(declarations.map(resolveForwardRef)), _toConsumableArray(flatten(imports.map(computeCombinedExports)).map(resolveForwardRef)));
        exports.forEach(verifyExportsAreDeclaredOrReExported);
        declarations.forEach(function (decl) {
          return verifyDeclarationIsUnique(decl, allowDuplicateDeclarationsInRoot);
        });
        declarations.forEach(verifyComponentEntryComponentsIsPartOfNgModule);
        var ngModule = getAnnotation(moduleType, 'NgModule');

        if (ngModule) {
          ngModule.imports && flatten(ngModule.imports).map(unwrapModuleWithProvidersImports).forEach(function (mod) {
            verifySemanticsOfNgModuleImport(mod, moduleType);
            verifySemanticsOfNgModuleDef(mod, false, moduleType);
          });
          ngModule.bootstrap && deepForEach(ngModule.bootstrap, verifyCorrectBootstrapType);
          ngModule.bootstrap && deepForEach(ngModule.bootstrap, verifyComponentIsPartOfNgModule);
          ngModule.entryComponents && deepForEach(ngModule.entryComponents, verifyComponentIsPartOfNgModule);
        } // Throw Error if any errors were detected.


        if (errors.length) {
          throw new Error(errors.join('\n'));
        } ////////////////////////////////////////////////////////////////////////////////////////////////


        function verifyDeclarationsHaveDefinitions(type) {
          type = resolveForwardRef(type);
          var def = getComponentDef(type) || getDirectiveDef(type) || getPipeDef(type);

          if (!def) {
            errors.push("Unexpected value '".concat(stringifyForError(type), "' declared by the module '").concat(stringifyForError(moduleType), "'. Please add a @Pipe/@Directive/@Component annotation."));
          }
        }

        function verifyDirectivesHaveSelector(type) {
          type = resolveForwardRef(type);
          var def = getDirectiveDef(type);

          if (!getComponentDef(type) && def && def.selectors.length == 0) {
            errors.push("Directive ".concat(stringifyForError(type), " has no selector, please add it!"));
          }
        }

        function verifyExportsAreDeclaredOrReExported(type) {
          type = resolveForwardRef(type);
          var kind = getComponentDef(type) && 'component' || getDirectiveDef(type) && 'directive' || getPipeDef(type) && 'pipe';

          if (kind) {
            // only checked if we are declared as Component, Directive, or Pipe
            // Modules don't need to be declared or imported.
            if (combinedDeclarations.lastIndexOf(type) === -1) {
              // We are exporting something which we don't explicitly declare or import.
              errors.push("Can't export ".concat(kind, " ").concat(stringifyForError(type), " from ").concat(stringifyForError(moduleType), " as it was neither declared nor imported!"));
            }
          }
        }

        function verifyDeclarationIsUnique(type, suppressErrors) {
          type = resolveForwardRef(type);
          var existingModule = ownerNgModule.get(type);

          if (existingModule && existingModule !== moduleType) {
            if (!suppressErrors) {
              var _modules = [existingModule, moduleType].map(stringifyForError).sort();

              errors.push("Type ".concat(stringifyForError(type), " is part of the declarations of 2 modules: ").concat(_modules[0], " and ").concat(_modules[1], "! ") + "Please consider moving ".concat(stringifyForError(type), " to a higher module that imports ").concat(_modules[0], " and ").concat(_modules[1], ". ") + "You can also create a new NgModule that exports and includes ".concat(stringifyForError(type), " then import that NgModule in ").concat(_modules[0], " and ").concat(_modules[1], "."));
            }
          } else {
            // Mark type as having owner.
            ownerNgModule.set(type, moduleType);
          }
        }

        function verifyComponentIsPartOfNgModule(type) {
          type = resolveForwardRef(type);
          var existingModule = ownerNgModule.get(type);

          if (!existingModule) {
            errors.push("Component ".concat(stringifyForError(type), " is not part of any NgModule or the module has not been imported into your module."));
          }
        }

        function verifyCorrectBootstrapType(type) {
          type = resolveForwardRef(type);

          if (!getComponentDef(type)) {
            errors.push("".concat(stringifyForError(type), " cannot be used as an entry component."));
          }
        }

        function verifyComponentEntryComponentsIsPartOfNgModule(type) {
          type = resolveForwardRef(type);

          if (getComponentDef(type)) {
            // We know we are component
            var component = getAnnotation(type, 'Component');

            if (component && component.entryComponents) {
              deepForEach(component.entryComponents, verifyComponentIsPartOfNgModule);
            }
          }
        }

        function verifySemanticsOfNgModuleImport(type, importingModule) {
          type = resolveForwardRef(type);

          if (getComponentDef(type) || getDirectiveDef(type)) {
            throw new Error("Unexpected directive '".concat(type.name, "' imported by the module '").concat(importingModule.name, "'. Please add an @NgModule annotation."));
          }

          if (getPipeDef(type)) {
            throw new Error("Unexpected pipe '".concat(type.name, "' imported by the module '").concat(importingModule.name, "'. Please add an @NgModule annotation."));
          }
        }
      }

      function unwrapModuleWithProvidersImports(typeOrWithProviders) {
        typeOrWithProviders = resolveForwardRef(typeOrWithProviders);
        return typeOrWithProviders.ngModule || typeOrWithProviders;
      }

      function getAnnotation(type, name) {
        var annotation = null;
        collect(type.__annotations__);
        collect(type.decorators);
        return annotation;

        function collect(annotations) {
          if (annotations) {
            annotations.forEach(readAnnotation);
          }
        }

        function readAnnotation(decorator) {
          if (!annotation) {
            var proto = Object.getPrototypeOf(decorator);

            if (proto.ngMetadataName == name) {
              annotation = decorator;
            } else if (decorator.type) {
              var _proto = Object.getPrototypeOf(decorator.type);

              if (_proto.ngMetadataName == name) {
                annotation = decorator.args[0];
              }
            }
          }
        }
      }
      /**
       * Keep track of compiled components. This is needed because in tests we often want to compile the
       * same component with more than one NgModule. This would cause an error unless we reset which
       * NgModule the component belongs to. We keep the list of compiled components here so that the
       * TestBed can reset it later.
       */


      var ownerNgModule = new Map();
      var verifiedNgModule = new Map();

      function resetCompiledComponents() {
        ownerNgModule = new Map();
        verifiedNgModule = new Map();
        moduleQueue.length = 0;
      }
      /**
       * Computes the combined declarations of explicit declarations, as well as declarations inherited by
       * traversing the exports of imported modules.
       * @param type
       */


      function computeCombinedExports(type) {
        type = resolveForwardRef(type);
        var ngModuleDef = getNgModuleDef(type, true);
        return _toConsumableArray(flatten(maybeUnwrapFn(ngModuleDef.exports).map(function (type) {
          var ngModuleDef = getNgModuleDef(type);

          if (ngModuleDef) {
            verifySemanticsOfNgModuleDef(type, false);
            return computeCombinedExports(type);
          } else {
            return type;
          }
        })));
      }
      /**
       * Some declared components may be compiled asynchronously, and thus may not have their
       * ɵcmp set yet. If this is the case, then a reference to the module is written into
       * the `ngSelectorScope` property of the declared type.
       */


      function setScopeOnDeclaredComponents(moduleType, ngModule) {
        var declarations = flatten(ngModule.declarations || EMPTY_ARRAY$5);
        var transitiveScopes = transitiveScopesFor(moduleType);
        declarations.forEach(function (declaration) {
          if (declaration.hasOwnProperty(NG_COMP_DEF)) {
            // A `ɵcmp` field exists - go ahead and patch the component directly.
            var component = declaration;
            var componentDef = getComponentDef(component);
            patchComponentDefWithScope(componentDef, transitiveScopes);
          } else if (!declaration.hasOwnProperty(NG_DIR_DEF) && !declaration.hasOwnProperty(NG_PIPE_DEF)) {
            // Set `ngSelectorScope` for future reference when the component compilation finishes.
            declaration.ngSelectorScope = moduleType;
          }
        });
      }
      /**
       * Patch the definition of a component with directives and pipes from the compilation scope of
       * a given module.
       */


      function patchComponentDefWithScope(componentDef, transitiveScopes) {
        componentDef.directiveDefs = function () {
          return Array.from(transitiveScopes.compilation.directives).map(function (dir) {
            return dir.hasOwnProperty(NG_COMP_DEF) ? getComponentDef(dir) : getDirectiveDef(dir);
          }).filter(function (def) {
            return !!def;
          });
        };

        componentDef.pipeDefs = function () {
          return Array.from(transitiveScopes.compilation.pipes).map(function (pipe) {
            return getPipeDef(pipe);
          });
        };

        componentDef.schemas = transitiveScopes.schemas; // Since we avoid Components/Directives/Pipes recompiling in case there are no overrides, we
        // may face a problem where previously compiled defs available to a given Component/Directive
        // are cached in TView and may become stale (in case any of these defs gets recompiled). In
        // order to avoid this problem, we force fresh TView to be created.

        componentDef.tView = null;
      }
      /**
       * Compute the pair of transitive scopes (compilation scope and exported scope) for a given module.
       *
       * This operation is memoized and the result is cached on the module's definition. This function can
       * be called on modules with components that have not fully compiled yet, but the result should not
       * be used until they have.
       *
       * @param moduleType module that transitive scope should be calculated for.
       */


      function transitiveScopesFor(moduleType) {
        if (!isNgModule(moduleType)) {
          throw new Error("".concat(moduleType.name, " does not have a module def (\u0275mod property)"));
        }

        var def = getNgModuleDef(moduleType);

        if (def.transitiveCompileScopes !== null) {
          return def.transitiveCompileScopes;
        }

        var scopes = {
          schemas: def.schemas || null,
          compilation: {
            directives: new Set(),
            pipes: new Set()
          },
          exported: {
            directives: new Set(),
            pipes: new Set()
          }
        };
        maybeUnwrapFn(def.imports).forEach(function (imported) {
          var importedType = imported;

          if (!isNgModule(importedType)) {
            throw new Error("Importing ".concat(importedType.name, " which does not have a \u0275mod property"));
          } // When this module imports another, the imported module's exported directives and pipes are
          // added to the compilation scope of this module.


          var importedScope = transitiveScopesFor(importedType);
          importedScope.exported.directives.forEach(function (entry) {
            return scopes.compilation.directives.add(entry);
          });
          importedScope.exported.pipes.forEach(function (entry) {
            return scopes.compilation.pipes.add(entry);
          });
        });
        maybeUnwrapFn(def.declarations).forEach(function (declared) {
          var declaredWithDefs = declared;

          if (getPipeDef(declaredWithDefs)) {
            scopes.compilation.pipes.add(declared);
          } else {
            // Either declared has a ɵcmp or ɵdir, or it's a component which hasn't
            // had its template compiled yet. In either case, it gets added to the compilation's
            // directives.
            scopes.compilation.directives.add(declared);
          }
        });
        maybeUnwrapFn(def.exports).forEach(function (exported) {
          var exportedType = exported; // Either the type is a module, a pipe, or a component/directive (which may not have a
          // ɵcmp as it might be compiled asynchronously).

          if (isNgModule(exportedType)) {
            // When this module exports another, the exported module's exported directives and pipes are
            // added to both the compilation and exported scopes of this module.
            var exportedScope = transitiveScopesFor(exportedType);
            exportedScope.exported.directives.forEach(function (entry) {
              scopes.compilation.directives.add(entry);
              scopes.exported.directives.add(entry);
            });
            exportedScope.exported.pipes.forEach(function (entry) {
              scopes.compilation.pipes.add(entry);
              scopes.exported.pipes.add(entry);
            });
          } else if (getPipeDef(exportedType)) {
            scopes.exported.pipes.add(exportedType);
          } else {
            scopes.exported.directives.add(exportedType);
          }
        });
        def.transitiveCompileScopes = scopes;
        return scopes;
      }

      function expandModuleWithProviders(value) {
        if (isModuleWithProviders(value)) {
          return value.ngModule;
        }

        return value;
      }

      function isModuleWithProviders(value) {
        return value.ngModule !== undefined;
      }

      function isNgModule(value) {
        return !!getNgModuleDef(value);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Keep track of the compilation depth to avoid reentrancy issues during JIT compilation. This
       * matters in the following scenario:
       *
       * Consider a component 'A' that extends component 'B', both declared in module 'M'. During
       * the compilation of 'A' the definition of 'B' is requested to capture the inheritance chain,
       * potentially triggering compilation of 'B'. If this nested compilation were to trigger
       * `flushModuleScopingQueueAsMuchAsPossible` it may happen that module 'M' is still pending in the
       * queue, resulting in 'A' and 'B' to be patched with the NgModule scope. As the compilation of
       * 'A' is still in progress, this would introduce a circular dependency on its compilation. To avoid
       * this issue, the module scope queue is only flushed for compilations at the depth 0, to ensure
       * all compilations have finished.
       */


      var compilationDepth = 0;
      /**
       * Compile an Angular component according to its decorator metadata, and patch the resulting
       * component def (ɵcmp) onto the component type.
       *
       * Compilation may be asynchronous (due to the need to resolve URLs for the component template or
       * other resources, for example). In the event that compilation is not immediate, `compileComponent`
       * will enqueue resource resolution into a global queue and will fail to return the `ɵcmp`
       * until the global queue has been resolved with a call to `resolveComponentResources`.
       */

      function compileComponent(type, metadata) {
        // Initialize ngDevMode. This must be the first statement in compileComponent.
        // See the `initNgDevMode` docstring for more information.
        (typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode();
        var ngComponentDef = null; // Metadata may have resources which need to be resolved.

        maybeQueueResolutionOfComponentResources(type, metadata); // Note that we're using the same function as `Directive`, because that's only subset of metadata
        // that we need to create the ngFactoryDef. We're avoiding using the component metadata
        // because we'd have to resolve the asynchronous templates.

        addDirectiveFactoryDef(type, metadata);
        Object.defineProperty(type, NG_COMP_DEF, {
          get: function get() {
            if (ngComponentDef === null) {
              var compiler = getCompilerFacade();

              if (componentNeedsResolution(metadata)) {
                var error = ["Component '".concat(type.name, "' is not resolved:")];

                if (metadata.templateUrl) {
                  error.push(" - templateUrl: ".concat(metadata.templateUrl));
                }

                if (metadata.styleUrls && metadata.styleUrls.length) {
                  error.push(" - styleUrls: ".concat(JSON.stringify(metadata.styleUrls)));
                }

                error.push("Did you run and wait for 'resolveComponentResources()'?");
                throw new Error(error.join('\n'));
              } // This const was called `jitOptions` previously but had to be renamed to `options` because
              // of a bug with Terser that caused optimized JIT builds to throw a `ReferenceError`.
              // This bug was investigated in https://github.com/angular/angular-cli/issues/17264.
              // We should not rename it back until https://github.com/terser/terser/issues/615 is fixed.


              var options = getJitOptions();
              var preserveWhitespaces = metadata.preserveWhitespaces;

              if (preserveWhitespaces === undefined) {
                if (options !== null && options.preserveWhitespaces !== undefined) {
                  preserveWhitespaces = options.preserveWhitespaces;
                } else {
                  preserveWhitespaces = false;
                }
              }

              var encapsulation = metadata.encapsulation;

              if (encapsulation === undefined) {
                if (options !== null && options.defaultEncapsulation !== undefined) {
                  encapsulation = options.defaultEncapsulation;
                } else {
                  encapsulation = ViewEncapsulation.Emulated;
                }
              }

              var templateUrl = metadata.templateUrl || "ng:///".concat(type.name, "/template.html");
              var meta = Object.assign(Object.assign({}, directiveMetadata(type, metadata)), {
                typeSourceSpan: compiler.createParseSourceSpan('Component', type.name, templateUrl),
                template: metadata.template || '',
                preserveWhitespaces: preserveWhitespaces,
                styles: metadata.styles || EMPTY_ARRAY,
                animations: metadata.animations,
                directives: [],
                changeDetection: metadata.changeDetection,
                pipes: new Map(),
                encapsulation: encapsulation,
                interpolation: metadata.interpolation,
                viewProviders: metadata.viewProviders || null
              });
              compilationDepth++;

              try {
                if (meta.usesInheritance) {
                  addDirectiveDefToUndecoratedParents(type);
                }

                ngComponentDef = compiler.compileComponent(angularCoreEnv, templateUrl, meta);
              } finally {
                // Ensure that the compilation depth is decremented even when the compilation failed.
                compilationDepth--;
              }

              if (compilationDepth === 0) {
                // When NgModule decorator executed, we enqueued the module definition such that
                // it would only dequeue and add itself as module scope to all of its declarations,
                // but only if  if all of its declarations had resolved. This call runs the check
                // to see if any modules that are in the queue can be dequeued and add scope to
                // their declarations.
                flushModuleScopingQueueAsMuchAsPossible();
              } // If component compilation is async, then the @NgModule annotation which declares the
              // component may execute and set an ngSelectorScope property on the component type. This
              // allows the component to patch itself with directiveDefs from the module after it
              // finishes compiling.


              if (hasSelectorScope(type)) {
                var scopes = transitiveScopesFor(type.ngSelectorScope);
                patchComponentDefWithScope(ngComponentDef, scopes);
              }
            }

            return ngComponentDef;
          },
          // Make the property configurable in dev mode to allow overriding in tests
          configurable: !!ngDevMode
        });
      }

      function hasSelectorScope(component) {
        return component.ngSelectorScope !== undefined;
      }
      /**
       * Compile an Angular directive according to its decorator metadata, and patch the resulting
       * directive def onto the component type.
       *
       * In the event that compilation is not immediate, `compileDirective` will return a `Promise` which
       * will resolve when compilation completes and the directive becomes usable.
       */


      function compileDirective(type, directive) {
        var ngDirectiveDef = null;
        addDirectiveFactoryDef(type, directive || {});
        Object.defineProperty(type, NG_DIR_DEF, {
          get: function get() {
            if (ngDirectiveDef === null) {
              // `directive` can be null in the case of abstract directives as a base class
              // that use `@Directive()` with no selector. In that case, pass empty object to the
              // `directiveMetadata` function instead of null.
              var meta = getDirectiveMetadata(type, directive || {});
              ngDirectiveDef = getCompilerFacade().compileDirective(angularCoreEnv, meta.sourceMapUrl, meta.metadata);
            }

            return ngDirectiveDef;
          },
          // Make the property configurable in dev mode to allow overriding in tests
          configurable: !!ngDevMode
        });
      }

      function getDirectiveMetadata(type, metadata) {
        var name = type && type.name;
        var sourceMapUrl = "ng:///".concat(name, "/\u0275dir.js");
        var compiler = getCompilerFacade();
        var facade = directiveMetadata(type, metadata);
        facade.typeSourceSpan = compiler.createParseSourceSpan('Directive', name, sourceMapUrl);

        if (facade.usesInheritance) {
          addDirectiveDefToUndecoratedParents(type);
        }

        return {
          metadata: facade,
          sourceMapUrl: sourceMapUrl
        };
      }

      function addDirectiveFactoryDef(type, metadata) {
        var ngFactoryDef = null;
        Object.defineProperty(type, NG_FACTORY_DEF, {
          get: function get() {
            if (ngFactoryDef === null) {
              var meta = getDirectiveMetadata(type, metadata);
              var compiler = getCompilerFacade();
              ngFactoryDef = compiler.compileFactory(angularCoreEnv, "ng:///".concat(type.name, "/\u0275fac.js"), Object.assign(Object.assign({}, meta.metadata), {
                injectFn: 'directiveInject',
                target: compiler.R3FactoryTarget.Directive
              }));
            }

            return ngFactoryDef;
          },
          // Make the property configurable in dev mode to allow overriding in tests
          configurable: !!ngDevMode
        });
      }

      function extendsDirectlyFromObject(type) {
        return Object.getPrototypeOf(type.prototype) === Object.prototype;
      }
      /**
       * Extract the `R3DirectiveMetadata` for a particular directive (either a `Directive` or a
       * `Component`).
       */


      function directiveMetadata(type, metadata) {
        // Reflect inputs and outputs.
        var reflect = getReflect();
        var propMetadata = reflect.ownPropMetadata(type);
        return {
          name: type.name,
          type: type,
          typeArgumentCount: 0,
          selector: metadata.selector !== undefined ? metadata.selector : null,
          deps: reflectDependencies(type),
          host: metadata.host || EMPTY_OBJ,
          propMetadata: propMetadata,
          inputs: metadata.inputs || EMPTY_ARRAY,
          outputs: metadata.outputs || EMPTY_ARRAY,
          queries: extractQueriesMetadata(type, propMetadata, isContentQuery),
          lifecycle: {
            usesOnChanges: reflect.hasLifecycleHook(type, 'ngOnChanges')
          },
          typeSourceSpan: null,
          usesInheritance: !extendsDirectlyFromObject(type),
          exportAs: extractExportAs(metadata.exportAs),
          providers: metadata.providers || null,
          viewQueries: extractQueriesMetadata(type, propMetadata, isViewQuery)
        };
      }
      /**
       * Adds a directive definition to all parent classes of a type that don't have an Angular decorator.
       */


      function addDirectiveDefToUndecoratedParents(type) {
        var objPrototype = Object.prototype;
        var parent = Object.getPrototypeOf(type.prototype).constructor; // Go up the prototype until we hit `Object`.

        while (parent && parent !== objPrototype) {
          // Since inheritance works if the class was annotated already, we only need to add
          // the def if there are no annotations and the def hasn't been created already.
          if (!getDirectiveDef(parent) && !getComponentDef(parent) && shouldAddAbstractDirective(parent)) {
            compileDirective(parent, null);
          }

          parent = Object.getPrototypeOf(parent);
        }
      }

      function convertToR3QueryPredicate(selector) {
        return typeof selector === 'string' ? splitByComma(selector) : resolveForwardRef(selector);
      }

      function convertToR3QueryMetadata(propertyName, ann) {
        return {
          propertyName: propertyName,
          predicate: convertToR3QueryPredicate(ann.selector),
          descendants: ann.descendants,
          first: ann.first,
          read: ann.read ? ann.read : null,
          "static": !!ann["static"],
          emitDistinctChangesOnly: !!ann.emitDistinctChangesOnly
        };
      }

      function extractQueriesMetadata(type, propMetadata, isQueryAnn) {
        var queriesMeta = [];

        var _loop11 = function _loop11(field) {
          if (propMetadata.hasOwnProperty(field)) {
            var annotations = propMetadata[field];
            annotations.forEach(function (ann) {
              if (isQueryAnn(ann)) {
                if (!ann.selector) {
                  throw new Error("Can't construct a query for the property \"".concat(field, "\" of ") + "\"".concat(stringifyForError(type), "\" since the query selector wasn't defined."));
                }

                if (annotations.some(isInputAnnotation)) {
                  throw new Error("Cannot combine @Input decorators with query decorators");
                }

                queriesMeta.push(convertToR3QueryMetadata(field, ann));
              }
            });
          }
        };

        for (var field in propMetadata) {
          _loop11(field);
        }

        return queriesMeta;
      }

      function extractExportAs(exportAs) {
        return exportAs === undefined ? null : splitByComma(exportAs);
      }

      function isContentQuery(value) {
        var name = value.ngMetadataName;
        return name === 'ContentChild' || name === 'ContentChildren';
      }

      function isViewQuery(value) {
        var name = value.ngMetadataName;
        return name === 'ViewChild' || name === 'ViewChildren';
      }

      function isInputAnnotation(value) {
        return value.ngMetadataName === 'Input';
      }

      function splitByComma(value) {
        return value.split(',').map(function (piece) {
          return piece.trim();
        });
      }

      var LIFECYCLE_HOOKS = ['ngOnChanges', 'ngOnInit', 'ngOnDestroy', 'ngDoCheck', 'ngAfterViewInit', 'ngAfterViewChecked', 'ngAfterContentInit', 'ngAfterContentChecked'];

      function shouldAddAbstractDirective(type) {
        var reflect = getReflect();

        if (LIFECYCLE_HOOKS.some(function (hookName) {
          return reflect.hasLifecycleHook(type, hookName);
        })) {
          return true;
        }

        var propMetadata = reflect.propMetadata(type);

        for (var field in propMetadata) {
          var annotations = propMetadata[field];

          for (var i = 0; i < annotations.length; i++) {
            var current = annotations[i];
            var metadataName = current.ngMetadataName;

            if (isInputAnnotation(current) || isContentQuery(current) || isViewQuery(current) || metadataName === 'Output' || metadataName === 'HostBinding' || metadataName === 'HostListener') {
              return true;
            }
          }
        }

        return false;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function compilePipe(type, meta) {
        var ngPipeDef = null;
        var ngFactoryDef = null;
        Object.defineProperty(type, NG_FACTORY_DEF, {
          get: function get() {
            if (ngFactoryDef === null) {
              var metadata = getPipeMetadata(type, meta);
              var compiler = getCompilerFacade();
              ngFactoryDef = compiler.compileFactory(angularCoreEnv, "ng:///".concat(metadata.name, "/\u0275fac.js"), Object.assign(Object.assign({}, metadata), {
                injectFn: 'directiveInject',
                target: compiler.R3FactoryTarget.Pipe
              }));
            }

            return ngFactoryDef;
          },
          // Make the property configurable in dev mode to allow overriding in tests
          configurable: !!ngDevMode
        });
        Object.defineProperty(type, NG_PIPE_DEF, {
          get: function get() {
            if (ngPipeDef === null) {
              var metadata = getPipeMetadata(type, meta);
              ngPipeDef = getCompilerFacade().compilePipe(angularCoreEnv, "ng:///".concat(metadata.name, "/\u0275pipe.js"), metadata);
            }

            return ngPipeDef;
          },
          // Make the property configurable in dev mode to allow overriding in tests
          configurable: !!ngDevMode
        });
      }

      function getPipeMetadata(type, meta) {
        return {
          type: type,
          typeArgumentCount: 0,
          name: type.name,
          deps: reflectDependencies(type),
          pipeName: meta.name,
          pure: meta.pure !== undefined ? meta.pure : true
        };
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ɵ0$d = function ɵ0$d() {
        var dir = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
        return dir;
      },
          ɵ1$2 = function ɵ1$2(type, meta) {
        return SWITCH_COMPILE_DIRECTIVE(type, meta);
      };
      /**
       * Type of the Directive metadata.
       *
       * @publicApi
       */


      var Directive = makeDecorator('Directive', ɵ0$d, undefined, undefined, ɵ1$2);

      var ɵ2$1 = function ɵ2$1() {
        var c = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
        return Object.assign({
          changeDetection: ChangeDetectionStrategy.Default
        }, c);
      },
          ɵ3$1 = function ɵ3$1(type, meta) {
        return SWITCH_COMPILE_COMPONENT(type, meta);
      };
      /**
       * Component decorator and metadata.
       *
       * @Annotation
       * @publicApi
       */


      var Component = makeDecorator('Component', ɵ2$1, Directive, undefined, ɵ3$1);

      var ɵ4 = function ɵ4(p) {
        return Object.assign({
          pure: true
        }, p);
      },
          ɵ5 = function ɵ5(type, meta) {
        return SWITCH_COMPILE_PIPE(type, meta);
      };
      /**
       * @Annotation
       * @publicApi
       */


      var Pipe = makeDecorator('Pipe', ɵ4, undefined, undefined, ɵ5);

      var ɵ6 = function ɵ6(bindingPropertyName) {
        return {
          bindingPropertyName: bindingPropertyName
        };
      };
      /**
       * @Annotation
       * @publicApi
       */


      var Input = makePropDecorator('Input', ɵ6);

      var ɵ7 = function ɵ7(bindingPropertyName) {
        return {
          bindingPropertyName: bindingPropertyName
        };
      };
      /**
       * @Annotation
       * @publicApi
       */


      var Output = makePropDecorator('Output', ɵ7);

      var ɵ8 = function ɵ8(hostPropertyName) {
        return {
          hostPropertyName: hostPropertyName
        };
      };
      /**
       * @Annotation
       * @publicApi
       */


      var HostBinding = makePropDecorator('HostBinding', ɵ8);

      var ɵ9 = function ɵ9(eventName, args) {
        return {
          eventName: eventName,
          args: args
        };
      };
      /**
       * Decorator that binds a DOM event to a host listener and supplies configuration metadata.
       * Angular invokes the supplied handler method when the host element emits the specified event,
       * and updates the bound element with the result.
       *
       * If the handler method returns false, applies `preventDefault` on the bound element.
       *
       * @usageNotes
       *
       * The following example declares a directive
       * that attaches a click listener to a button and counts clicks.
       *
       * ```ts
       * @Directive({selector: 'button[counting]'})
       * class CountClicks {
       *   numberOfClicks = 0;
       *
       *   @HostListener('click', ['$event.target'])
       *   onClick(btn) {
       *     console.log('button', btn, 'number of clicks:', this.numberOfClicks++);
       *  }
       * }
       *
       * @Component({
       *   selector: 'app',
       *   template: '<button counting>Increment</button>',
       * })
       * class App {}
       *
       * ```
       *
       * The following example registers another DOM event handler that listens for key-press events.
       * ``` ts
       * import { HostListener, Component } from "@angular/core";
       *
       * @Component({
       *   selector: 'app',
       *   template: `<h1>Hello, you have pressed keys {{counter}} number of times!</h1> Press any key to
       * increment the counter.
       *   <button (click)="resetCounter()">Reset Counter</button>`
       * })
       * class AppComponent {
       *   counter = 0;
       *   @HostListener('window:keydown', ['$event'])
       *   handleKeyDown(event: KeyboardEvent) {
       *     this.counter++;
       *   }
       *   resetCounter() {
       *     this.counter = 0;
       *   }
       * }
       * ```
       *
       * @Annotation
       * @publicApi
       */


      var HostListener = makePropDecorator('HostListener', ɵ9);
      var SWITCH_COMPILE_COMPONENT__POST_R3__ = compileComponent;
      var SWITCH_COMPILE_DIRECTIVE__POST_R3__ = compileDirective;
      var SWITCH_COMPILE_PIPE__POST_R3__ = compilePipe;
      var SWITCH_COMPILE_COMPONENT__PRE_R3__ = noop;
      var SWITCH_COMPILE_DIRECTIVE__PRE_R3__ = noop;
      var SWITCH_COMPILE_PIPE__PRE_R3__ = noop;
      var SWITCH_COMPILE_COMPONENT = SWITCH_COMPILE_COMPONENT__POST_R3__;
      var SWITCH_COMPILE_DIRECTIVE = SWITCH_COMPILE_DIRECTIVE__POST_R3__;
      var SWITCH_COMPILE_PIPE = SWITCH_COMPILE_PIPE__POST_R3__;
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var ɵ0$e = function ɵ0$e(ngModule) {
        return ngModule;
      },
          ɵ1$3 =
      /**
       * Decorator that marks the following class as an NgModule, and supplies
       * configuration metadata for it.
       *
       * * The `declarations` and `entryComponents` options configure the compiler
       * with information about what belongs to the NgModule.
       * * The `providers` options configures the NgModule's injector to provide
       * dependencies the NgModule members.
       * * The `imports` and `exports` options bring in members from other modules, and make
       * this module's members available to others.
       */
      function ɵ1$3(type, meta) {
        return SWITCH_COMPILE_NGMODULE(type, meta);
      };
      /**
       * @Annotation
       * @publicApi
       */


      var NgModule = makeDecorator('NgModule', ɵ0$e, undefined, undefined, ɵ1$3);

      function preR3NgModuleCompile(moduleType, metadata) {
        var imports = metadata && metadata.imports || [];

        if (metadata && metadata.exports) {
          imports = [].concat(_toConsumableArray(imports), [metadata.exports]);
        }

        moduleType.ɵinj = ɵɵdefineInjector({
          factory: convertInjectableProviderToFactory(moduleType, {
            useClass: moduleType
          }),
          providers: metadata && metadata.providers,
          imports: imports
        });
      }

      var SWITCH_COMPILE_NGMODULE__POST_R3__ = compileNgModule;
      var SWITCH_COMPILE_NGMODULE__PRE_R3__ = preR3NgModuleCompile;
      var SWITCH_COMPILE_NGMODULE = SWITCH_COMPILE_NGMODULE__POST_R3__;
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A [DI token](guide/glossary#di-token "DI token definition") that you can use to provide
       * one or more initialization functions.
       *
       * The provided functions are injected at application startup and executed during
       * app initialization. If any of these functions returns a Promise, initialization
       * does not complete until the Promise is resolved.
       *
       * You can, for example, create a factory function that loads language data
       * or an external configuration, and provide that function to the `APP_INITIALIZER` token.
       * The function is executed during the application bootstrap process,
       * and the needed data is available on startup.
       *
       * @see `ApplicationInitStatus`
       *
       * @publicApi
       */

      var APP_INITIALIZER = new InjectionToken('Application Initializer');
      /**
       * A class that reflects the state of running {@link APP_INITIALIZER} functions.
       *
       * @publicApi
       */

      var ApplicationInitStatus = /*#__PURE__*/function () {
        function ApplicationInitStatus(appInits) {
          var _this731 = this;

          _classCallCheck2(this, ApplicationInitStatus);

          this.appInits = appInits;
          this.resolve = noop;
          this.reject = noop;
          this.initialized = false;
          this.done = false;
          this.donePromise = new Promise(function (res, rej) {
            _this731.resolve = res;
            _this731.reject = rej;
          });
        }
        /** @internal */


        _createClass2(ApplicationInitStatus, [{
          key: "runInitializers",
          value: function runInitializers() {
            var _this732 = this;

            if (this.initialized) {
              return;
            }

            var asyncInitPromises = [];

            var complete = function complete() {
              _this732.done = true;

              _this732.resolve();
            };

            if (this.appInits) {
              for (var i = 0; i < this.appInits.length; i++) {
                var initResult = this.appInits[i]();

                if (isPromise(initResult)) {
                  asyncInitPromises.push(initResult);
                }
              }
            }

            Promise.all(asyncInitPromises).then(function () {
              complete();
            })["catch"](function (e) {
              _this732.reject(e);
            });

            if (asyncInitPromises.length === 0) {
              complete();
            }

            this.initialized = true;
          }
        }]);

        return ApplicationInitStatus;
      }();

      ApplicationInitStatus.ɵfac = function ApplicationInitStatus_Factory(t) {
        return new (t || ApplicationInitStatus)(ɵɵinject(APP_INITIALIZER, 8));
      };

      ApplicationInitStatus.ɵprov = ɵɵdefineInjectable({
        token: ApplicationInitStatus,
        factory: ApplicationInitStatus.ɵfac
      });

      ApplicationInitStatus.ctorParameters = function () {
        return [{
          type: Array,
          decorators: [{
            type: Inject,
            args: [APP_INITIALIZER]
          }, {
            type: Optional
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationInitStatus, [{
          type: Injectable
        }], function () {
          return [{
            type: Array,
            decorators: [{
              type: Inject,
              args: [APP_INITIALIZER]
            }, {
              type: Optional
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A [DI token](guide/glossary#di-token "DI token definition") representing a unique string ID, used
       * primarily for prefixing application attributes and CSS styles when
       * {@link ViewEncapsulation#Emulated ViewEncapsulation.Emulated} is being used.
       *
       * BY default, the value is randomly generated and assigned to the application by Angular.
       * To provide a custom ID value, use a DI provider <!-- TODO: provider --> to configure
       * the root {@link Injector} that uses this token.
       *
       * @publicApi
       */


      var APP_ID = new InjectionToken('AppId');

      function _appIdRandomProviderFactory() {
        return "".concat(_randomChar()).concat(_randomChar()).concat(_randomChar());
      }
      /**
       * Providers that generate a random `APP_ID_TOKEN`.
       * @publicApi
       */


      var APP_ID_RANDOM_PROVIDER = {
        provide: APP_ID,
        useFactory: _appIdRandomProviderFactory,
        deps: []
      };

      function _randomChar() {
        return String.fromCharCode(97 + Math.floor(Math.random() * 25));
      }
      /**
       * A function that is executed when a platform is initialized.
       * @publicApi
       */


      var PLATFORM_INITIALIZER = new InjectionToken('Platform Initializer');
      /**
       * A token that indicates an opaque platform ID.
       * @publicApi
       */

      var PLATFORM_ID = new InjectionToken('Platform ID');
      /**
       * A [DI token](guide/glossary#di-token "DI token definition") that provides a set of callbacks to
       * be called for every component that is bootstrapped.
       *
       * Each callback must take a `ComponentRef` instance and return nothing.
       *
       * `(componentRef: ComponentRef) => void`
       *
       * @publicApi
       */

      var APP_BOOTSTRAP_LISTENER = new InjectionToken('appBootstrapListener');
      /**
       * A [DI token](guide/glossary#di-token "DI token definition") that indicates the root directory of
       * the application
       * @publicApi
       */

      var PACKAGE_ROOT_URL = new InjectionToken('Application Packages Root URL');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var Console = /*#__PURE__*/function () {
        function Console() {
          _classCallCheck2(this, Console);
        }

        _createClass2(Console, [{
          key: "log",
          value: function log(message) {
            // tslint:disable-next-line:no-console
            console.log(message);
          } // Note: for reporting errors use `DOM.logError()` as it is platform specific

        }, {
          key: "warn",
          value: function warn(message) {
            // tslint:disable-next-line:no-console
            console.warn(message);
          }
        }]);

        return Console;
      }();

      Console.ɵfac = function Console_Factory(t) {
        return new (t || Console)();
      };

      Console.ɵprov = ɵɵdefineInjectable({
        token: Console,
        factory: Console.ɵfac
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Console, [{
          type: Injectable
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Provide this token to set the locale of your application.
       * It is used for i18n extraction, by i18n pipes (DatePipe, I18nPluralPipe, CurrencyPipe,
       * DecimalPipe and PercentPipe) and by ICU expressions.
       *
       * See the [i18n guide](guide/i18n#setting-up-locale) for more information.
       *
       * @usageNotes
       * ### Example
       *
       * ```typescript
       * import { LOCALE_ID } from '@angular/core';
       * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
       * import { AppModule } from './app/app.module';
       *
       * platformBrowserDynamic().bootstrapModule(AppModule, {
       *   providers: [{provide: LOCALE_ID, useValue: 'en-US' }]
       * });
       * ```
       *
       * @publicApi
       */


      var LOCALE_ID$1 = new InjectionToken('LocaleId');
      /**
       * Provide this token to set the default currency code your application uses for
       * CurrencyPipe when there is no currency code passed into it. This is only used by
       * CurrencyPipe and has no relation to locale currency. Defaults to USD if not configured.
       *
       * See the [i18n guide](guide/i18n#setting-up-locale) for more information.
       *
       * <div class="alert is-helpful">
       *
       * **Deprecation notice:**
       *
       * The default currency code is currently always `USD` but this is deprecated from v9.
       *
       * **In v10 the default currency code will be taken from the current locale.**
       *
       * If you need the previous behavior then set it by creating a `DEFAULT_CURRENCY_CODE` provider in
       * your application `NgModule`:
       *
       * ```ts
       * {provide: DEFAULT_CURRENCY_CODE, useValue: 'USD'}
       * ```
       *
       * </div>
       *
       * @usageNotes
       * ### Example
       *
       * ```typescript
       * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
       * import { AppModule } from './app/app.module';
       *
       * platformBrowserDynamic().bootstrapModule(AppModule, {
       *   providers: [{provide: DEFAULT_CURRENCY_CODE, useValue: 'EUR' }]
       * });
       * ```
       *
       * @publicApi
       */

      var DEFAULT_CURRENCY_CODE = new InjectionToken('DefaultCurrencyCode');
      /**
       * Use this token at bootstrap to provide the content of your translation file (`xtb`,
       * `xlf` or `xlf2`) when you want to translate your application in another language.
       *
       * See the [i18n guide](guide/i18n#merge) for more information.
       *
       * @usageNotes
       * ### Example
       *
       * ```typescript
       * import { TRANSLATIONS } from '@angular/core';
       * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
       * import { AppModule } from './app/app.module';
       *
       * // content of your translation file
       * const translations = '....';
       *
       * platformBrowserDynamic().bootstrapModule(AppModule, {
       *   providers: [{provide: TRANSLATIONS, useValue: translations }]
       * });
       * ```
       *
       * @publicApi
       */

      var TRANSLATIONS = new InjectionToken('Translations');
      /**
       * Provide this token at bootstrap to set the format of your {@link TRANSLATIONS}: `xtb`,
       * `xlf` or `xlf2`.
       *
       * See the [i18n guide](guide/i18n#merge) for more information.
       *
       * @usageNotes
       * ### Example
       *
       * ```typescript
       * import { TRANSLATIONS_FORMAT } from '@angular/core';
       * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
       * import { AppModule } from './app/app.module';
       *
       * platformBrowserDynamic().bootstrapModule(AppModule, {
       *   providers: [{provide: TRANSLATIONS_FORMAT, useValue: 'xlf' }]
       * });
       * ```
       *
       * @publicApi
       */

      var TRANSLATIONS_FORMAT = new InjectionToken('TranslationsFormat');
      /**
       * Use this enum at bootstrap as an option of `bootstrapModule` to define the strategy
       * that the compiler should use in case of missing translations:
       * - Error: throw if you have missing translations.
       * - Warning (default): show a warning in the console and/or shell.
       * - Ignore: do nothing.
       *
       * See the [i18n guide](guide/i18n#missing-translation) for more information.
       *
       * @usageNotes
       * ### Example
       * ```typescript
       * import { MissingTranslationStrategy } from '@angular/core';
       * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
       * import { AppModule } from './app/app.module';
       *
       * platformBrowserDynamic().bootstrapModule(AppModule, {
       *   missingTranslation: MissingTranslationStrategy.Error
       * });
       * ```
       *
       * @publicApi
       */

      var MissingTranslationStrategy;

      (function (MissingTranslationStrategy) {
        MissingTranslationStrategy[MissingTranslationStrategy["Error"] = 0] = "Error";
        MissingTranslationStrategy[MissingTranslationStrategy["Warning"] = 1] = "Warning";
        MissingTranslationStrategy[MissingTranslationStrategy["Ignore"] = 2] = "Ignore";
      })(MissingTranslationStrategy || (MissingTranslationStrategy = {}));
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var SWITCH_IVY_ENABLED__POST_R3__ = true;
      var SWITCH_IVY_ENABLED__PRE_R3__ = false;
      var ivyEnabled = SWITCH_IVY_ENABLED__POST_R3__;
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Combination of NgModuleFactory and ComponentFactories.
       *
       * @publicApi
       */

      var ModuleWithComponentFactories = function ModuleWithComponentFactories(ngModuleFactory, componentFactories) {
        _classCallCheck2(this, ModuleWithComponentFactories);

        this.ngModuleFactory = ngModuleFactory;
        this.componentFactories = componentFactories;
      };

      function _throwError() {
        throw new Error("Runtime compiler is not loaded");
      }

      var Compiler_compileModuleSync__PRE_R3__ = _throwError;

      var Compiler_compileModuleSync__POST_R3__ = function Compiler_compileModuleSync__POST_R3__(moduleType) {
        return new NgModuleFactory$1(moduleType);
      };

      var Compiler_compileModuleSync = Compiler_compileModuleSync__POST_R3__;
      var Compiler_compileModuleAsync__PRE_R3__ = _throwError;

      var Compiler_compileModuleAsync__POST_R3__ = function Compiler_compileModuleAsync__POST_R3__(moduleType) {
        return Promise.resolve(Compiler_compileModuleSync__POST_R3__(moduleType));
      };

      var Compiler_compileModuleAsync = Compiler_compileModuleAsync__POST_R3__;
      var Compiler_compileModuleAndAllComponentsSync__PRE_R3__ = _throwError;

      var Compiler_compileModuleAndAllComponentsSync__POST_R3__ = function Compiler_compileModuleAndAllComponentsSync__POST_R3__(moduleType) {
        var ngModuleFactory = Compiler_compileModuleSync__POST_R3__(moduleType);
        var moduleDef = getNgModuleDef(moduleType);
        var componentFactories = maybeUnwrapFn(moduleDef.declarations).reduce(function (factories, declaration) {
          var componentDef = getComponentDef(declaration);
          componentDef && factories.push(new ComponentFactory$1(componentDef));
          return factories;
        }, []);
        return new ModuleWithComponentFactories(ngModuleFactory, componentFactories);
      };

      var Compiler_compileModuleAndAllComponentsSync = Compiler_compileModuleAndAllComponentsSync__POST_R3__;
      var Compiler_compileModuleAndAllComponentsAsync__PRE_R3__ = _throwError;

      var Compiler_compileModuleAndAllComponentsAsync__POST_R3__ = function Compiler_compileModuleAndAllComponentsAsync__POST_R3__(moduleType) {
        return Promise.resolve(Compiler_compileModuleAndAllComponentsSync__POST_R3__(moduleType));
      };

      var Compiler_compileModuleAndAllComponentsAsync = Compiler_compileModuleAndAllComponentsAsync__POST_R3__;
      /**
       * Low-level service for running the angular compiler during runtime
       * to create {@link ComponentFactory}s, which
       * can later be used to create and render a Component instance.
       *
       * Each `@NgModule` provides an own `Compiler` to its injector,
       * that will use the directives/pipes of the ng module for compilation
       * of components.
       *
       * @publicApi
       */

      var Compiler = /*#__PURE__*/function () {
        function Compiler() {
          _classCallCheck2(this, Compiler);

          /**
           * Compiles the given NgModule and all of its components. All templates of the components listed
           * in `entryComponents` have to be inlined.
           */
          this.compileModuleSync = Compiler_compileModuleSync;
          /**
           * Compiles the given NgModule and all of its components
           */

          this.compileModuleAsync = Compiler_compileModuleAsync;
          /**
           * Same as {@link #compileModuleSync} but also creates ComponentFactories for all components.
           */

          this.compileModuleAndAllComponentsSync = Compiler_compileModuleAndAllComponentsSync;
          /**
           * Same as {@link #compileModuleAsync} but also creates ComponentFactories for all components.
           */

          this.compileModuleAndAllComponentsAsync = Compiler_compileModuleAndAllComponentsAsync;
        }
        /**
         * Clears all caches.
         */


        _createClass2(Compiler, [{
          key: "clearCache",
          value: function clearCache() {}
          /**
           * Clears the cache for the given component/ngModule.
           */

        }, {
          key: "clearCacheFor",
          value: function clearCacheFor(type) {}
          /**
           * Returns the id for a given NgModule, if one is defined and known to the compiler.
           */

        }, {
          key: "getModuleId",
          value: function getModuleId(moduleType) {
            return undefined;
          }
        }]);

        return Compiler;
      }();

      Compiler.ɵfac = function Compiler_Factory(t) {
        return new (t || Compiler)();
      };

      Compiler.ɵprov = ɵɵdefineInjectable({
        token: Compiler,
        factory: Compiler.ɵfac
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Compiler, [{
          type: Injectable
        }], function () {
          return [];
        }, null);
      })();
      /**
       * Token to provide CompilerOptions in the platform injector.
       *
       * @publicApi
       */


      var COMPILER_OPTIONS = new InjectionToken('compilerOptions');
      /**
       * A factory for creating a Compiler
       *
       * @publicApi
       */

      var CompilerFactory = function CompilerFactory() {
        _classCallCheck2(this, CompilerFactory);
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var promise = function () {
        return Promise.resolve(0);
      }();

      function scheduleMicroTask(fn) {
        if (typeof Zone === 'undefined') {
          // use promise to schedule microTask instead of use Zone
          promise.then(function () {
            fn && fn.apply(null, null);
          });
        } else {
          Zone.current.scheduleMicroTask('scheduleMicrotask', fn);
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function getNativeRequestAnimationFrame() {
        var nativeRequestAnimationFrame = _global['requestAnimationFrame'];
        var nativeCancelAnimationFrame = _global['cancelAnimationFrame'];

        if (typeof Zone !== 'undefined' && nativeRequestAnimationFrame && nativeCancelAnimationFrame) {
          // use unpatched version of requestAnimationFrame(native delegate) if possible
          // to avoid another Change detection
          var unpatchedRequestAnimationFrame = nativeRequestAnimationFrame[Zone.__symbol__('OriginalDelegate')];

          if (unpatchedRequestAnimationFrame) {
            nativeRequestAnimationFrame = unpatchedRequestAnimationFrame;
          }

          var unpatchedCancelAnimationFrame = nativeCancelAnimationFrame[Zone.__symbol__('OriginalDelegate')];

          if (unpatchedCancelAnimationFrame) {
            nativeCancelAnimationFrame = unpatchedCancelAnimationFrame;
          }
        }

        return {
          nativeRequestAnimationFrame: nativeRequestAnimationFrame,
          nativeCancelAnimationFrame: nativeCancelAnimationFrame
        };
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * An injectable service for executing work inside or outside of the Angular zone.
       *
       * The most common use of this service is to optimize performance when starting a work consisting of
       * one or more asynchronous tasks that don't require UI updates or error handling to be handled by
       * Angular. Such tasks can be kicked off via {@link #runOutsideAngular} and if needed, these tasks
       * can reenter the Angular zone via {@link #run}.
       *
       * <!-- TODO: add/fix links to:
       *   - docs explaining zones and the use of zones in Angular and change-detection
       *   - link to runOutsideAngular/run (throughout this file!)
       *   -->
       *
       * @usageNotes
       * ### Example
       *
       * ```
       * import {Component, NgZone} from '@angular/core';
       * import {NgIf} from '@angular/common';
       *
       * @Component({
       *   selector: 'ng-zone-demo',
       *   template: `
       *     <h2>Demo: NgZone</h2>
       *
       *     <p>Progress: {{progress}}%</p>
       *     <p *ngIf="progress >= 100">Done processing {{label}} of Angular zone!</p>
       *
       *     <button (click)="processWithinAngularZone()">Process within Angular zone</button>
       *     <button (click)="processOutsideOfAngularZone()">Process outside of Angular zone</button>
       *   `,
       * })
       * export class NgZoneDemo {
       *   progress: number = 0;
       *   label: string;
       *
       *   constructor(private _ngZone: NgZone) {}
       *
       *   // Loop inside the Angular zone
       *   // so the UI DOES refresh after each setTimeout cycle
       *   processWithinAngularZone() {
       *     this.label = 'inside';
       *     this.progress = 0;
       *     this._increaseProgress(() => console.log('Inside Done!'));
       *   }
       *
       *   // Loop outside of the Angular zone
       *   // so the UI DOES NOT refresh after each setTimeout cycle
       *   processOutsideOfAngularZone() {
       *     this.label = 'outside';
       *     this.progress = 0;
       *     this._ngZone.runOutsideAngular(() => {
       *       this._increaseProgress(() => {
       *         // reenter the Angular zone and display done
       *         this._ngZone.run(() => { console.log('Outside Done!'); });
       *       });
       *     });
       *   }
       *
       *   _increaseProgress(doneCallback: () => void) {
       *     this.progress += 1;
       *     console.log(`Current progress: ${this.progress}%`);
       *
       *     if (this.progress < 100) {
       *       window.setTimeout(() => this._increaseProgress(doneCallback), 10);
       *     } else {
       *       doneCallback();
       *     }
       *   }
       * }
       * ```
       *
       * @publicApi
       */


      var NgZone = /*#__PURE__*/function () {
        function NgZone(_ref116) {
          var _ref116$enableLongSta = _ref116.enableLongStackTrace,
              enableLongStackTrace = _ref116$enableLongSta === void 0 ? false : _ref116$enableLongSta,
              _ref116$shouldCoalesc = _ref116.shouldCoalesceEventChangeDetection,
              shouldCoalesceEventChangeDetection = _ref116$shouldCoalesc === void 0 ? false : _ref116$shouldCoalesc,
              _ref116$shouldCoalesc2 = _ref116.shouldCoalesceRunChangeDetection,
              shouldCoalesceRunChangeDetection = _ref116$shouldCoalesc2 === void 0 ? false : _ref116$shouldCoalesc2;

          _classCallCheck2(this, NgZone);

          this.hasPendingMacrotasks = false;
          this.hasPendingMicrotasks = false;
          /**
           * Whether there are no outstanding microtasks or macrotasks.
           */

          this.isStable = true;
          /**
           * Notifies when code enters Angular Zone. This gets fired first on VM Turn.
           */

          this.onUnstable = new EventEmitter(false);
          /**
           * Notifies when there is no more microtasks enqueued in the current VM Turn.
           * This is a hint for Angular to do change detection, which may enqueue more microtasks.
           * For this reason this event can fire multiple times per VM Turn.
           */

          this.onMicrotaskEmpty = new EventEmitter(false);
          /**
           * Notifies when the last `onMicrotaskEmpty` has run and there are no more microtasks, which
           * implies we are about to relinquish VM turn.
           * This event gets called just once.
           */

          this.onStable = new EventEmitter(false);
          /**
           * Notifies that an error has been delivered.
           */

          this.onError = new EventEmitter(false);

          if (typeof Zone == 'undefined') {
            throw new Error("In this configuration Angular requires Zone.js");
          }

          Zone.assertZonePatched();
          var self = this;
          self._nesting = 0;
          self._outer = self._inner = Zone.current;

          if (Zone['TaskTrackingZoneSpec']) {
            self._inner = self._inner.fork(new Zone['TaskTrackingZoneSpec']());
          }

          if (enableLongStackTrace && Zone['longStackTraceZoneSpec']) {
            self._inner = self._inner.fork(Zone['longStackTraceZoneSpec']);
          } // if shouldCoalesceRunChangeDetection is true, all tasks including event tasks will be
          // coalesced, so shouldCoalesceEventChangeDetection option is not necessary and can be skipped.


          self.shouldCoalesceEventChangeDetection = !shouldCoalesceRunChangeDetection && shouldCoalesceEventChangeDetection;
          self.shouldCoalesceRunChangeDetection = shouldCoalesceRunChangeDetection;
          self.lastRequestAnimationFrameId = -1;
          self.nativeRequestAnimationFrame = getNativeRequestAnimationFrame().nativeRequestAnimationFrame;
          forkInnerZoneWithAngularBehavior(self);
        }

        _createClass2(NgZone, [{
          key: "run",
          value:
          /**
           * Executes the `fn` function synchronously within the Angular zone and returns value returned by
           * the function.
           *
           * Running functions via `run` allows you to reenter Angular zone from a task that was executed
           * outside of the Angular zone (typically started via {@link #runOutsideAngular}).
           *
           * Any future tasks or microtasks scheduled from within this function will continue executing from
           * within the Angular zone.
           *
           * If a synchronous error happens it will be rethrown and not reported via `onError`.
           */
          function run(fn, applyThis, applyArgs) {
            return this._inner.run(fn, applyThis, applyArgs);
          }
          /**
           * Executes the `fn` function synchronously within the Angular zone as a task and returns value
           * returned by the function.
           *
           * Running functions via `run` allows you to reenter Angular zone from a task that was executed
           * outside of the Angular zone (typically started via {@link #runOutsideAngular}).
           *
           * Any future tasks or microtasks scheduled from within this function will continue executing from
           * within the Angular zone.
           *
           * If a synchronous error happens it will be rethrown and not reported via `onError`.
           */

        }, {
          key: "runTask",
          value: function runTask(fn, applyThis, applyArgs, name) {
            var zone = this._inner;
            var task = zone.scheduleEventTask('NgZoneEvent: ' + name, fn, EMPTY_PAYLOAD, noop, noop);

            try {
              return zone.runTask(task, applyThis, applyArgs);
            } finally {
              zone.cancelTask(task);
            }
          }
          /**
           * Same as `run`, except that synchronous errors are caught and forwarded via `onError` and not
           * rethrown.
           */

        }, {
          key: "runGuarded",
          value: function runGuarded(fn, applyThis, applyArgs) {
            return this._inner.runGuarded(fn, applyThis, applyArgs);
          }
          /**
           * Executes the `fn` function synchronously in Angular's parent zone and returns value returned by
           * the function.
           *
           * Running functions via {@link #runOutsideAngular} allows you to escape Angular's zone and do
           * work that
           * doesn't trigger Angular change-detection or is subject to Angular's error handling.
           *
           * Any future tasks or microtasks scheduled from within this function will continue executing from
           * outside of the Angular zone.
           *
           * Use {@link #run} to reenter the Angular zone and do work that updates the application model.
           */

        }, {
          key: "runOutsideAngular",
          value: function runOutsideAngular(fn) {
            return this._outer.run(fn);
          }
        }], [{
          key: "isInAngularZone",
          value: function isInAngularZone() {
            return Zone.current.get('isAngularZone') === true;
          }
        }, {
          key: "assertInAngularZone",
          value: function assertInAngularZone() {
            if (!NgZone.isInAngularZone()) {
              throw new Error('Expected to be in Angular Zone, but it is not!');
            }
          }
        }, {
          key: "assertNotInAngularZone",
          value: function assertNotInAngularZone() {
            if (NgZone.isInAngularZone()) {
              throw new Error('Expected to not be in Angular Zone, but it is!');
            }
          }
        }]);

        return NgZone;
      }();

      var EMPTY_PAYLOAD = {};

      function checkStable(zone) {
        if (zone._nesting == 0 && !zone.hasPendingMicrotasks && !zone.isStable) {
          try {
            zone._nesting++;
            zone.onMicrotaskEmpty.emit(null);
          } finally {
            zone._nesting--;

            if (!zone.hasPendingMicrotasks) {
              try {
                zone.runOutsideAngular(function () {
                  return zone.onStable.emit(null);
                });
              } finally {
                zone.isStable = true;
              }
            }
          }
        }
      }

      function delayChangeDetectionForEvents(zone) {
        if (zone.lastRequestAnimationFrameId !== -1) {
          return;
        }

        zone.lastRequestAnimationFrameId = zone.nativeRequestAnimationFrame.call(_global, function () {
          // This is a work around for https://github.com/angular/angular/issues/36839.
          // The core issue is that when event coalescing is enabled it is possible for microtasks
          // to get flushed too early (As is the case with `Promise.then`) between the
          // coalescing eventTasks.
          //
          // To workaround this we schedule a "fake" eventTask before we process the
          // coalescing eventTasks. The benefit of this is that the "fake" container eventTask
          //  will prevent the microtasks queue from getting drained in between the coalescing
          // eventTask execution.
          if (!zone.fakeTopEventTask) {
            zone.fakeTopEventTask = Zone.root.scheduleEventTask('fakeTopEventTask', function () {
              zone.lastRequestAnimationFrameId = -1;
              updateMicroTaskStatus(zone);
              checkStable(zone);
            }, undefined, function () {}, function () {});
          }

          zone.fakeTopEventTask.invoke();
        });
        updateMicroTaskStatus(zone);
      }

      function forkInnerZoneWithAngularBehavior(zone) {
        var delayChangeDetectionForEventsDelegate = function delayChangeDetectionForEventsDelegate() {
          delayChangeDetectionForEvents(zone);
        };

        zone._inner = zone._inner.fork({
          name: 'angular',
          properties: {
            'isAngularZone': true
          },
          onInvokeTask: function onInvokeTask(delegate, current, target, task, applyThis, applyArgs) {
            try {
              onEnter(zone);
              return delegate.invokeTask(target, task, applyThis, applyArgs);
            } finally {
              if (zone.shouldCoalesceEventChangeDetection && task.type === 'eventTask' || zone.shouldCoalesceRunChangeDetection) {
                delayChangeDetectionForEventsDelegate();
              }

              onLeave(zone);
            }
          },
          onInvoke: function onInvoke(delegate, current, target, callback, applyThis, applyArgs, source) {
            try {
              onEnter(zone);
              return delegate.invoke(target, callback, applyThis, applyArgs, source);
            } finally {
              if (zone.shouldCoalesceRunChangeDetection) {
                delayChangeDetectionForEventsDelegate();
              }

              onLeave(zone);
            }
          },
          onHasTask: function onHasTask(delegate, current, target, hasTaskState) {
            delegate.hasTask(target, hasTaskState);

            if (current === target) {
              // We are only interested in hasTask events which originate from our zone
              // (A child hasTask event is not interesting to us)
              if (hasTaskState.change == 'microTask') {
                zone._hasPendingMicrotasks = hasTaskState.microTask;
                updateMicroTaskStatus(zone);
                checkStable(zone);
              } else if (hasTaskState.change == 'macroTask') {
                zone.hasPendingMacrotasks = hasTaskState.macroTask;
              }
            }
          },
          onHandleError: function onHandleError(delegate, current, target, error) {
            delegate.handleError(target, error);
            zone.runOutsideAngular(function () {
              return zone.onError.emit(error);
            });
            return false;
          }
        });
      }

      function updateMicroTaskStatus(zone) {
        if (zone._hasPendingMicrotasks || (zone.shouldCoalesceEventChangeDetection || zone.shouldCoalesceRunChangeDetection) && zone.lastRequestAnimationFrameId !== -1) {
          zone.hasPendingMicrotasks = true;
        } else {
          zone.hasPendingMicrotasks = false;
        }
      }

      function onEnter(zone) {
        zone._nesting++;

        if (zone.isStable) {
          zone.isStable = false;
          zone.onUnstable.emit(null);
        }
      }

      function onLeave(zone) {
        zone._nesting--;
        checkStable(zone);
      }
      /**
       * Provides a noop implementation of `NgZone` which does nothing. This zone requires explicit calls
       * to framework to perform rendering.
       */


      var NoopNgZone = /*#__PURE__*/function () {
        function NoopNgZone() {
          _classCallCheck2(this, NoopNgZone);

          this.hasPendingMicrotasks = false;
          this.hasPendingMacrotasks = false;
          this.isStable = true;
          this.onUnstable = new EventEmitter();
          this.onMicrotaskEmpty = new EventEmitter();
          this.onStable = new EventEmitter();
          this.onError = new EventEmitter();
        }

        _createClass2(NoopNgZone, [{
          key: "run",
          value: function run(fn, applyThis, applyArgs) {
            return fn.apply(applyThis, applyArgs);
          }
        }, {
          key: "runGuarded",
          value: function runGuarded(fn, applyThis, applyArgs) {
            return fn.apply(applyThis, applyArgs);
          }
        }, {
          key: "runOutsideAngular",
          value: function runOutsideAngular(fn) {
            return fn();
          }
        }, {
          key: "runTask",
          value: function runTask(fn, applyThis, applyArgs, name) {
            return fn.apply(applyThis, applyArgs);
          }
        }]);

        return NoopNgZone;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * The Testability service provides testing hooks that can be accessed from
       * the browser and by services such as Protractor. Each bootstrapped Angular
       * application on the page will have an instance of Testability.
       * @publicApi
       */


      var Testability = /*#__PURE__*/function () {
        function Testability(_ngZone) {
          var _this733 = this;

          _classCallCheck2(this, Testability);

          this._ngZone = _ngZone;
          this._pendingCount = 0;
          this._isZoneStable = true;
          /**
           * Whether any work was done since the last 'whenStable' callback. This is
           * useful to detect if this could have potentially destabilized another
           * component while it is stabilizing.
           * @internal
           */

          this._didWork = false;
          this._callbacks = [];
          this.taskTrackingZone = null;

          this._watchAngularEvents();

          _ngZone.run(function () {
            _this733.taskTrackingZone = typeof Zone == 'undefined' ? null : Zone.current.get('TaskTrackingZone');
          });
        }

        _createClass2(Testability, [{
          key: "_watchAngularEvents",
          value: function _watchAngularEvents() {
            var _this734 = this;

            this._ngZone.onUnstable.subscribe({
              next: function next() {
                _this734._didWork = true;
                _this734._isZoneStable = false;
              }
            });

            this._ngZone.runOutsideAngular(function () {
              _this734._ngZone.onStable.subscribe({
                next: function next() {
                  NgZone.assertNotInAngularZone();
                  scheduleMicroTask(function () {
                    _this734._isZoneStable = true;

                    _this734._runCallbacksIfReady();
                  });
                }
              });
            });
          }
          /**
           * Increases the number of pending request
           * @deprecated pending requests are now tracked with zones.
           */

        }, {
          key: "increasePendingRequestCount",
          value: function increasePendingRequestCount() {
            this._pendingCount += 1;
            this._didWork = true;
            return this._pendingCount;
          }
          /**
           * Decreases the number of pending request
           * @deprecated pending requests are now tracked with zones
           */

        }, {
          key: "decreasePendingRequestCount",
          value: function decreasePendingRequestCount() {
            this._pendingCount -= 1;

            if (this._pendingCount < 0) {
              throw new Error('pending async requests below zero');
            }

            this._runCallbacksIfReady();

            return this._pendingCount;
          }
          /**
           * Whether an associated application is stable
           */

        }, {
          key: "isStable",
          value: function isStable() {
            return this._isZoneStable && this._pendingCount === 0 && !this._ngZone.hasPendingMacrotasks;
          }
        }, {
          key: "_runCallbacksIfReady",
          value: function _runCallbacksIfReady() {
            var _this735 = this;

            if (this.isStable()) {
              // Schedules the call backs in a new frame so that it is always async.
              scheduleMicroTask(function () {
                while (_this735._callbacks.length !== 0) {
                  var cb = _this735._callbacks.pop();

                  clearTimeout(cb.timeoutId);
                  cb.doneCb(_this735._didWork);
                }

                _this735._didWork = false;
              });
            } else {
              // Still not stable, send updates.
              var pending = this.getPendingTasks();
              this._callbacks = this._callbacks.filter(function (cb) {
                if (cb.updateCb && cb.updateCb(pending)) {
                  clearTimeout(cb.timeoutId);
                  return false;
                }

                return true;
              });
              this._didWork = true;
            }
          }
        }, {
          key: "getPendingTasks",
          value: function getPendingTasks() {
            if (!this.taskTrackingZone) {
              return [];
            } // Copy the tasks data so that we don't leak tasks.


            return this.taskTrackingZone.macroTasks.map(function (t) {
              return {
                source: t.source,
                // From TaskTrackingZone:
                // https://github.com/angular/zone.js/blob/master/lib/zone-spec/task-tracking.ts#L40
                creationLocation: t.creationLocation,
                data: t.data
              };
            });
          }
        }, {
          key: "addCallback",
          value: function addCallback(cb, timeout, updateCb) {
            var _this736 = this;

            var timeoutId = -1;

            if (timeout && timeout > 0) {
              timeoutId = setTimeout(function () {
                _this736._callbacks = _this736._callbacks.filter(function (cb) {
                  return cb.timeoutId !== timeoutId;
                });
                cb(_this736._didWork, _this736.getPendingTasks());
              }, timeout);
            }

            this._callbacks.push({
              doneCb: cb,
              timeoutId: timeoutId,
              updateCb: updateCb
            });
          }
          /**
           * Wait for the application to be stable with a timeout. If the timeout is reached before that
           * happens, the callback receives a list of the macro tasks that were pending, otherwise null.
           *
           * @param doneCb The callback to invoke when Angular is stable or the timeout expires
           *    whichever comes first.
           * @param timeout Optional. The maximum time to wait for Angular to become stable. If not
           *    specified, whenStable() will wait forever.
           * @param updateCb Optional. If specified, this callback will be invoked whenever the set of
           *    pending macrotasks changes. If this callback returns true doneCb will not be invoked
           *    and no further updates will be issued.
           */

        }, {
          key: "whenStable",
          value: function whenStable(doneCb, timeout, updateCb) {
            if (updateCb && !this.taskTrackingZone) {
              throw new Error('Task tracking zone is required when passing an update callback to ' + 'whenStable(). Is "zone.js/dist/task-tracking.js" loaded?');
            } // These arguments are 'Function' above to keep the public API simple.


            this.addCallback(doneCb, timeout, updateCb);

            this._runCallbacksIfReady();
          }
          /**
           * Get the number of pending requests
           * @deprecated pending requests are now tracked with zones
           */

        }, {
          key: "getPendingRequestCount",
          value: function getPendingRequestCount() {
            return this._pendingCount;
          }
          /**
           * Find providers by name
           * @param using The root element to search from
           * @param provider The name of binding variable
           * @param exactMatch Whether using exactMatch
           */

        }, {
          key: "findProviders",
          value: function findProviders(using, provider, exactMatch) {
            // TODO(juliemr): implement.
            return [];
          }
        }]);

        return Testability;
      }();

      Testability.ɵfac = function Testability_Factory(t) {
        return new (t || Testability)(ɵɵinject(NgZone));
      };

      Testability.ɵprov = ɵɵdefineInjectable({
        token: Testability,
        factory: Testability.ɵfac
      });

      Testability.ctorParameters = function () {
        return [{
          type: NgZone
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Testability, [{
          type: Injectable
        }], function () {
          return [{
            type: NgZone
          }];
        }, null);
      })();
      /**
       * A global registry of {@link Testability} instances for specific elements.
       * @publicApi
       */


      var TestabilityRegistry = /*#__PURE__*/function () {
        function TestabilityRegistry() {
          _classCallCheck2(this, TestabilityRegistry);

          /** @internal */
          this._applications = new Map();

          _testabilityGetter.addToWindow(this);
        }
        /**
         * Registers an application with a testability hook so that it can be tracked
         * @param token token of application, root element
         * @param testability Testability hook
         */


        _createClass2(TestabilityRegistry, [{
          key: "registerApplication",
          value: function registerApplication(token, testability) {
            this._applications.set(token, testability);
          }
          /**
           * Unregisters an application.
           * @param token token of application, root element
           */

        }, {
          key: "unregisterApplication",
          value: function unregisterApplication(token) {
            this._applications["delete"](token);
          }
          /**
           * Unregisters all applications
           */

        }, {
          key: "unregisterAllApplications",
          value: function unregisterAllApplications() {
            this._applications.clear();
          }
          /**
           * Get a testability hook associated with the application
           * @param elem root element
           */

        }, {
          key: "getTestability",
          value: function getTestability(elem) {
            return this._applications.get(elem) || null;
          }
          /**
           * Get all registered testabilities
           */

        }, {
          key: "getAllTestabilities",
          value: function getAllTestabilities() {
            return Array.from(this._applications.values());
          }
          /**
           * Get all registered applications(root elements)
           */

        }, {
          key: "getAllRootElements",
          value: function getAllRootElements() {
            return Array.from(this._applications.keys());
          }
          /**
           * Find testability of a node in the Tree
           * @param elem node
           * @param findInAncestors whether finding testability in ancestors if testability was not found in
           * current node
           */

        }, {
          key: "findTestabilityInTree",
          value: function findTestabilityInTree(elem) {
            var findInAncestors = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
            return _testabilityGetter.findTestabilityInTree(this, elem, findInAncestors);
          }
        }]);

        return TestabilityRegistry;
      }();

      TestabilityRegistry.ɵfac = function TestabilityRegistry_Factory(t) {
        return new (t || TestabilityRegistry)();
      };

      TestabilityRegistry.ɵprov = ɵɵdefineInjectable({
        token: TestabilityRegistry,
        factory: TestabilityRegistry.ɵfac
      });

      TestabilityRegistry.ctorParameters = function () {
        return [];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(TestabilityRegistry, [{
          type: Injectable
        }], function () {
          return [];
        }, null);
      })();

      var _NoopGetTestability = /*#__PURE__*/function () {
        function _NoopGetTestability() {
          _classCallCheck2(this, _NoopGetTestability);
        }

        _createClass2(_NoopGetTestability, [{
          key: "addToWindow",
          value: function addToWindow(registry) {}
        }, {
          key: "findTestabilityInTree",
          value: function findTestabilityInTree(registry, elem, findInAncestors) {
            return null;
          }
        }]);

        return _NoopGetTestability;
      }();
      /**
       * Set the {@link GetTestability} implementation used by the Angular testing framework.
       * @publicApi
       */


      function setTestabilityGetter(getter) {
        _testabilityGetter = getter;
      }

      var _testabilityGetter = new _NoopGetTestability();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * This file is used to control if the default rendering pipeline should be `ViewEngine` or `Ivy`.
       *
       * For more information on how to run and debug tests with either Ivy or View Engine (legacy),
       * please see [BAZEL.md](./docs/BAZEL.md).
       */


      var _devMode = true;
      var _runModeLocked = false;
      /**
       * Returns whether Angular is in development mode. After called once,
       * the value is locked and won't change any more.
       *
       * By default, this is true, unless a user calls `enableProdMode` before calling this.
       *
       * @publicApi
       */

      function isDevMode() {
        _runModeLocked = true;
        return _devMode;
      }
      /**
       * Disable Angular's development mode, which turns off assertions and other
       * checks within the framework.
       *
       * One important assertion this disables verifies that a change detection pass
       * does not result in additional changes to any bindings (also known as
       * unidirectional data flow).
       *
       * @publicApi
       */


      function enableProdMode() {
        if (_runModeLocked) {
          throw new Error('Cannot enable prod mode after platform setup.');
        } // The below check is there so when ngDevMode is set via terser
        // `global['ngDevMode'] = false;` is also dropped.


        if (typeof ngDevMode === undefined || !!ngDevMode) {
          _global['ngDevMode'] = false;
        }

        _devMode = false;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var _platform;

      var compileNgModuleFactory = compileNgModuleFactory__POST_R3__;

      function compileNgModuleFactory__PRE_R3__(injector, options, moduleType) {
        var compilerFactory = injector.get(CompilerFactory);
        var compiler = compilerFactory.createCompiler([options]);
        return compiler.compileModuleAsync(moduleType);
      }

      function compileNgModuleFactory__POST_R3__(injector, options, moduleType) {
        ngDevMode && assertNgModuleType(moduleType);
        var moduleFactory = new NgModuleFactory$1(moduleType); // All of the logic below is irrelevant for AOT-compiled code.

        if (typeof ngJitMode !== 'undefined' && !ngJitMode) {
          return Promise.resolve(moduleFactory);
        }

        var compilerOptions = injector.get(COMPILER_OPTIONS, []).concat(options); // Configure the compiler to use the provided options. This call may fail when multiple modules
        // are bootstrapped with incompatible options, as a component can only be compiled according to
        // a single set of options.

        setJitOptions({
          defaultEncapsulation: _lastDefined(compilerOptions.map(function (opts) {
            return opts.defaultEncapsulation;
          })),
          preserveWhitespaces: _lastDefined(compilerOptions.map(function (opts) {
            return opts.preserveWhitespaces;
          }))
        });

        if (isComponentResourceResolutionQueueEmpty()) {
          return Promise.resolve(moduleFactory);
        }

        var compilerProviders = _mergeArrays(compilerOptions.map(function (o) {
          return o.providers;
        })); // In case there are no compiler providers, we just return the module factory as
        // there won't be any resource loader. This can happen with Ivy, because AOT compiled
        // modules can be still passed through "bootstrapModule". In that case we shouldn't
        // unnecessarily require the JIT compiler.


        if (compilerProviders.length === 0) {
          return Promise.resolve(moduleFactory);
        }

        var compiler = getCompilerFacade();
        var compilerInjector = Injector.create({
          providers: compilerProviders
        });
        var resourceLoader = compilerInjector.get(compiler.ResourceLoader); // The resource loader can also return a string while the "resolveComponentResources"
        // always expects a promise. Therefore we need to wrap the returned value in a promise.

        return resolveComponentResources(function (url) {
          return Promise.resolve(resourceLoader.get(url));
        }).then(function () {
          return moduleFactory;
        });
      } // the `window.ng` global utilities are only available in non-VE versions of
      // Angular. The function switch below will make sure that the code is not
      // included into Angular when PRE mode is active.


      function publishDefaultGlobalUtils__PRE_R3__() {}

      function publishDefaultGlobalUtils__POST_R3__() {
        ngDevMode && publishDefaultGlobalUtils();
      }

      var publishDefaultGlobalUtils$1 = publishDefaultGlobalUtils__POST_R3__;
      var isBoundToModule = isBoundToModule__POST_R3__;

      function isBoundToModule__PRE_R3__(cf) {
        return cf instanceof ComponentFactoryBoundToModule;
      }

      function isBoundToModule__POST_R3__(cf) {
        return cf.isBoundToModule;
      }

      var ALLOW_MULTIPLE_PLATFORMS = new InjectionToken('AllowMultipleToken');
      /**
       * A token for third-party components that can register themselves with NgProbe.
       *
       * @publicApi
       */

      var NgProbeToken = function NgProbeToken(name, token) {
        _classCallCheck2(this, NgProbeToken);

        this.name = name;
        this.token = token;
      };
      /**
       * Creates a platform.
       * Platforms must be created on launch using this function.
       *
       * @publicApi
       */


      function createPlatform(injector) {
        if (_platform && !_platform.destroyed && !_platform.injector.get(ALLOW_MULTIPLE_PLATFORMS, false)) {
          throw new Error('There can be only one platform. Destroy the previous one to create a new one.');
        }

        publishDefaultGlobalUtils$1();
        _platform = injector.get(PlatformRef);
        var inits = injector.get(PLATFORM_INITIALIZER, null);
        if (inits) inits.forEach(function (init) {
          return init();
        });
        return _platform;
      }
      /**
       * Creates a factory for a platform. Can be used to provide or override `Providers` specific to
       * your application's runtime needs, such as `PLATFORM_INITIALIZER` and `PLATFORM_ID`.
       * @param parentPlatformFactory Another platform factory to modify. Allows you to compose factories
       * to build up configurations that might be required by different libraries or parts of the
       * application.
       * @param name Identifies the new platform factory.
       * @param providers A set of dependency providers for platforms created with the new factory.
       *
       * @publicApi
       */


      function createPlatformFactory(parentPlatformFactory, name) {
        var providers = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
        var desc = "Platform: ".concat(name);
        var marker = new InjectionToken(desc);
        return function () {
          var extraProviders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
          var platform = getPlatform();

          if (!platform || platform.injector.get(ALLOW_MULTIPLE_PLATFORMS, false)) {
            if (parentPlatformFactory) {
              parentPlatformFactory(providers.concat(extraProviders).concat({
                provide: marker,
                useValue: true
              }));
            } else {
              var injectedProviders = providers.concat(extraProviders).concat({
                provide: marker,
                useValue: true
              }, {
                provide: INJECTOR_SCOPE,
                useValue: 'platform'
              });
              createPlatform(Injector.create({
                providers: injectedProviders,
                name: desc
              }));
            }
          }

          return assertPlatform(marker);
        };
      }
      /**
       * Checks that there is currently a platform that contains the given token as a provider.
       *
       * @publicApi
       */


      function assertPlatform(requiredToken) {
        var platform = getPlatform();

        if (!platform) {
          throw new Error('No platform exists!');
        }

        if (!platform.injector.get(requiredToken, null)) {
          throw new Error('A platform with a different configuration has been created. Please destroy it first.');
        }

        return platform;
      }
      /**
       * Destroys the current Angular platform and all Angular applications on the page.
       * Destroys all modules and listeners registered with the platform.
       *
       * @publicApi
       */


      function destroyPlatform() {
        if (_platform && !_platform.destroyed) {
          _platform.destroy();
        }
      }
      /**
       * Returns the current platform.
       *
       * @publicApi
       */


      function getPlatform() {
        return _platform && !_platform.destroyed ? _platform : null;
      }
      /**
       * The Angular platform is the entry point for Angular on a web page.
       * Each page has exactly one platform. Services (such as reflection) which are common
       * to every Angular application running on the page are bound in its scope.
       * A page's platform is initialized implicitly when a platform is created using a platform
       * factory such as `PlatformBrowser`, or explicitly by calling the `createPlatform()` function.
       *
       * @publicApi
       */


      var PlatformRef = /*#__PURE__*/function () {
        /** @internal */
        function PlatformRef(_injector) {
          _classCallCheck2(this, PlatformRef);

          this._injector = _injector;
          this._modules = [];
          this._destroyListeners = [];
          this._destroyed = false;
        }
        /**
         * Creates an instance of an `@NgModule` for the given platform for offline compilation.
         *
         * @usageNotes
         *
         * The following example creates the NgModule for a browser platform.
         *
         * ```typescript
         * my_module.ts:
         *
         * @NgModule({
         *   imports: [BrowserModule]
         * })
         * class MyModule {}
         *
         * main.ts:
         * import {MyModuleNgFactory} from './my_module.ngfactory';
         * import {platformBrowser} from '@angular/platform-browser';
         *
         * let moduleRef = platformBrowser().bootstrapModuleFactory(MyModuleNgFactory);
         * ```
         */


        _createClass2(PlatformRef, [{
          key: "bootstrapModuleFactory",
          value: function bootstrapModuleFactory(moduleFactory, options) {
            var _this737 = this;

            // Note: We need to create the NgZone _before_ we instantiate the module,
            // as instantiating the module creates some providers eagerly.
            // So we create a mini parent injector that just contains the new NgZone and
            // pass that as parent to the NgModuleFactory.
            var ngZoneOption = options ? options.ngZone : undefined;
            var ngZoneEventCoalescing = options && options.ngZoneEventCoalescing || false;
            var ngZoneRunCoalescing = options && options.ngZoneRunCoalescing || false;
            var ngZone = getNgZone(ngZoneOption, {
              ngZoneEventCoalescing: ngZoneEventCoalescing,
              ngZoneRunCoalescing: ngZoneRunCoalescing
            });
            var providers = [{
              provide: NgZone,
              useValue: ngZone
            }]; // Note: Create ngZoneInjector within ngZone.run so that all of the instantiated services are
            // created within the Angular zone
            // Do not try to replace ngZone.run with ApplicationRef#run because ApplicationRef would then be
            // created outside of the Angular zone.

            return ngZone.run(function () {
              var ngZoneInjector = Injector.create({
                providers: providers,
                parent: _this737.injector,
                name: moduleFactory.moduleType.name
              });
              var moduleRef = moduleFactory.create(ngZoneInjector);
              var exceptionHandler = moduleRef.injector.get(ErrorHandler, null);

              if (!exceptionHandler) {
                throw new Error('No ErrorHandler. Is platform module (BrowserModule) included?');
              }

              ngZone.runOutsideAngular(function () {
                var subscription = ngZone.onError.subscribe({
                  next: function next(error) {
                    exceptionHandler.handleError(error);
                  }
                });
                moduleRef.onDestroy(function () {
                  remove(_this737._modules, moduleRef);
                  subscription.unsubscribe();
                });
              });
              return _callAndReportToErrorHandler(exceptionHandler, ngZone, function () {
                var initStatus = moduleRef.injector.get(ApplicationInitStatus);
                initStatus.runInitializers();
                return initStatus.donePromise.then(function () {
                  if (ivyEnabled) {
                    // If the `LOCALE_ID` provider is defined at bootstrap then we set the value for ivy
                    var localeId = moduleRef.injector.get(LOCALE_ID$1, DEFAULT_LOCALE_ID);
                    setLocaleId(localeId || DEFAULT_LOCALE_ID);
                  }

                  _this737._moduleDoBootstrap(moduleRef);

                  return moduleRef;
                });
              });
            });
          }
          /**
           * Creates an instance of an `@NgModule` for a given platform using the given runtime compiler.
           *
           * @usageNotes
           * ### Simple Example
           *
           * ```typescript
           * @NgModule({
           *   imports: [BrowserModule]
           * })
           * class MyModule {}
           *
           * let moduleRef = platformBrowser().bootstrapModule(MyModule);
           * ```
           *
           */

        }, {
          key: "bootstrapModule",
          value: function bootstrapModule(moduleType) {
            var _this738 = this;

            var compilerOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
            var options = optionsReducer({}, compilerOptions);
            return compileNgModuleFactory(this.injector, options, moduleType).then(function (moduleFactory) {
              return _this738.bootstrapModuleFactory(moduleFactory, options);
            });
          }
        }, {
          key: "_moduleDoBootstrap",
          value: function _moduleDoBootstrap(moduleRef) {
            var appRef = moduleRef.injector.get(ApplicationRef);

            if (moduleRef._bootstrapComponents.length > 0) {
              moduleRef._bootstrapComponents.forEach(function (f) {
                return appRef.bootstrap(f);
              });
            } else if (moduleRef.instance.ngDoBootstrap) {
              moduleRef.instance.ngDoBootstrap(appRef);
            } else {
              throw new Error("The module ".concat(stringify(moduleRef.instance.constructor), " was bootstrapped, but it does not declare \"@NgModule.bootstrap\" components nor a \"ngDoBootstrap\" method. ") + "Please define one of these.");
            }

            this._modules.push(moduleRef);
          }
          /**
           * Registers a listener to be called when the platform is destroyed.
           */

        }, {
          key: "onDestroy",
          value: function onDestroy(callback) {
            this._destroyListeners.push(callback);
          }
          /**
           * Retrieves the platform {@link Injector}, which is the parent injector for
           * every Angular application on the page and provides singleton providers.
           */

        }, {
          key: "injector",
          get: function get() {
            return this._injector;
          }
          /**
           * Destroys the current Angular platform and all Angular applications on the page.
           * Destroys all modules and listeners registered with the platform.
           */

        }, {
          key: "destroy",
          value: function destroy() {
            if (this._destroyed) {
              throw new Error('The platform has already been destroyed!');
            }

            this._modules.slice().forEach(function (module) {
              return module.destroy();
            });

            this._destroyListeners.forEach(function (listener) {
              return listener();
            });

            this._destroyed = true;
          }
        }, {
          key: "destroyed",
          get: function get() {
            return this._destroyed;
          }
        }]);

        return PlatformRef;
      }();

      PlatformRef.ɵfac = function PlatformRef_Factory(t) {
        return new (t || PlatformRef)(ɵɵinject(Injector));
      };

      PlatformRef.ɵprov = ɵɵdefineInjectable({
        token: PlatformRef,
        factory: PlatformRef.ɵfac
      });

      PlatformRef.ctorParameters = function () {
        return [{
          type: Injector
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(PlatformRef, [{
          type: Injectable
        }], function () {
          return [{
            type: Injector
          }];
        }, null);
      })();

      function getNgZone(ngZoneOption, extra) {
        var ngZone;

        if (ngZoneOption === 'noop') {
          ngZone = new NoopNgZone();
        } else {
          ngZone = (ngZoneOption === 'zone.js' ? undefined : ngZoneOption) || new NgZone({
            enableLongStackTrace: isDevMode(),
            shouldCoalesceEventChangeDetection: !!(extra === null || extra === void 0 ? void 0 : extra.ngZoneEventCoalescing),
            shouldCoalesceRunChangeDetection: !!(extra === null || extra === void 0 ? void 0 : extra.ngZoneRunCoalescing)
          });
        }

        return ngZone;
      }

      function _callAndReportToErrorHandler(errorHandler, ngZone, callback) {
        try {
          var result = callback();

          if (isPromise(result)) {
            return result["catch"](function (e) {
              ngZone.runOutsideAngular(function () {
                return errorHandler.handleError(e);
              }); // rethrow as the exception handler might not do it

              throw e;
            });
          }

          return result;
        } catch (e) {
          ngZone.runOutsideAngular(function () {
            return errorHandler.handleError(e);
          }); // rethrow as the exception handler might not do it

          throw e;
        }
      }

      function optionsReducer(dst, objs) {
        if (Array.isArray(objs)) {
          dst = objs.reduce(optionsReducer, dst);
        } else {
          dst = Object.assign(Object.assign({}, dst), objs);
        }

        return dst;
      }
      /**
       * A reference to an Angular application running on a page.
       *
       * @usageNotes
       *
       * {@a is-stable-examples}
       * ### isStable examples and caveats
       *
       * Note two important points about `isStable`, demonstrated in the examples below:
       * - the application will never be stable if you start any kind
       * of recurrent asynchronous task when the application starts
       * (for example for a polling process, started with a `setInterval`, a `setTimeout`
       * or using RxJS operators like `interval`);
       * - the `isStable` Observable runs outside of the Angular zone.
       *
       * Let's imagine that you start a recurrent task
       * (here incrementing a counter, using RxJS `interval`),
       * and at the same time subscribe to `isStable`.
       *
       * ```
       * constructor(appRef: ApplicationRef) {
       *   appRef.isStable.pipe(
       *      filter(stable => stable)
       *   ).subscribe(() => console.log('App is stable now');
       *   interval(1000).subscribe(counter => console.log(counter));
       * }
       * ```
       * In this example, `isStable` will never emit `true`,
       * and the trace "App is stable now" will never get logged.
       *
       * If you want to execute something when the app is stable,
       * you have to wait for the application to be stable
       * before starting your polling process.
       *
       * ```
       * constructor(appRef: ApplicationRef) {
       *   appRef.isStable.pipe(
       *     first(stable => stable),
       *     tap(stable => console.log('App is stable now')),
       *     switchMap(() => interval(1000))
       *   ).subscribe(counter => console.log(counter));
       * }
       * ```
       * In this example, the trace "App is stable now" will be logged
       * and then the counter starts incrementing every second.
       *
       * Note also that this Observable runs outside of the Angular zone,
       * which means that the code in the subscription
       * to this Observable will not trigger the change detection.
       *
       * Let's imagine that instead of logging the counter value,
       * you update a field of your component
       * and display it in its template.
       *
       * ```
       * constructor(appRef: ApplicationRef) {
       *   appRef.isStable.pipe(
       *     first(stable => stable),
       *     switchMap(() => interval(1000))
       *   ).subscribe(counter => this.value = counter);
       * }
       * ```
       * As the `isStable` Observable runs outside the zone,
       * the `value` field will be updated properly,
       * but the template will not be refreshed!
       *
       * You'll have to manually trigger the change detection to update the template.
       *
       * ```
       * constructor(appRef: ApplicationRef, cd: ChangeDetectorRef) {
       *   appRef.isStable.pipe(
       *     first(stable => stable),
       *     switchMap(() => interval(1000))
       *   ).subscribe(counter => {
       *     this.value = counter;
       *     cd.detectChanges();
       *   });
       * }
       * ```
       *
       * Or make the subscription callback run inside the zone.
       *
       * ```
       * constructor(appRef: ApplicationRef, zone: NgZone) {
       *   appRef.isStable.pipe(
       *     first(stable => stable),
       *     switchMap(() => interval(1000))
       *   ).subscribe(counter => zone.run(() => this.value = counter));
       * }
       * ```
       *
       * @publicApi
       */


      var ApplicationRef = /*#__PURE__*/function () {
        /** @internal */
        function ApplicationRef(_zone, _console, _injector, _exceptionHandler, _componentFactoryResolver, _initStatus) {
          var _this739 = this;

          _classCallCheck2(this, ApplicationRef);

          this._zone = _zone;
          this._console = _console;
          this._injector = _injector;
          this._exceptionHandler = _exceptionHandler;
          this._componentFactoryResolver = _componentFactoryResolver;
          this._initStatus = _initStatus;
          /** @internal */

          this._bootstrapListeners = [];
          this._views = [];
          this._runningTick = false;
          this._stable = true;
          /**
           * Get a list of component types registered to this application.
           * This list is populated even before the component is created.
           */

          this.componentTypes = [];
          /**
           * Get a list of components registered to this application.
           */

          this.components = [];
          this._onMicrotaskEmptySubscription = this._zone.onMicrotaskEmpty.subscribe({
            next: function next() {
              _this739._zone.run(function () {
                _this739.tick();
              });
            }
          });
          var isCurrentlyStable = new rxjs__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (observer) {
            _this739._stable = _this739._zone.isStable && !_this739._zone.hasPendingMacrotasks && !_this739._zone.hasPendingMicrotasks;

            _this739._zone.runOutsideAngular(function () {
              observer.next(_this739._stable);
              observer.complete();
            });
          });
          var isStable = new rxjs__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (observer) {
            // Create the subscription to onStable outside the Angular Zone so that
            // the callback is run outside the Angular Zone.
            var stableSub;

            _this739._zone.runOutsideAngular(function () {
              stableSub = _this739._zone.onStable.subscribe(function () {
                NgZone.assertNotInAngularZone(); // Check whether there are no pending macro/micro tasks in the next tick
                // to allow for NgZone to update the state.

                scheduleMicroTask(function () {
                  if (!_this739._stable && !_this739._zone.hasPendingMacrotasks && !_this739._zone.hasPendingMicrotasks) {
                    _this739._stable = true;
                    observer.next(true);
                  }
                });
              });
            });

            var unstableSub = _this739._zone.onUnstable.subscribe(function () {
              NgZone.assertInAngularZone();

              if (_this739._stable) {
                _this739._stable = false;

                _this739._zone.runOutsideAngular(function () {
                  observer.next(false);
                });
              }
            });

            return function () {
              stableSub.unsubscribe();
              unstableSub.unsubscribe();
            };
          });
          this.isStable = Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["merge"])(isCurrentlyStable, isStable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["share"])()));
        }
        /**
         * Bootstrap a new component at the root level of the application.
         *
         * @usageNotes
         * ### Bootstrap process
         *
         * When bootstrapping a new root component into an application, Angular mounts the
         * specified application component onto DOM elements identified by the componentType's
         * selector and kicks off automatic change detection to finish initializing the component.
         *
         * Optionally, a component can be mounted onto a DOM element that does not match the
         * componentType's selector.
         *
         * ### Example
         * {@example core/ts/platform/platform.ts region='longform'}
         */


        _createClass2(ApplicationRef, [{
          key: "bootstrap",
          value: function bootstrap(componentOrFactory, rootSelectorOrNode) {
            var _this740 = this;

            if (!this._initStatus.done) {
              throw new Error('Cannot bootstrap as there are still asynchronous initializers running. Bootstrap components in the `ngDoBootstrap` method of the root module.');
            }

            var componentFactory;

            if (componentOrFactory instanceof ComponentFactory) {
              componentFactory = componentOrFactory;
            } else {
              componentFactory = this._componentFactoryResolver.resolveComponentFactory(componentOrFactory);
            }

            this.componentTypes.push(componentFactory.componentType); // Create a factory associated with the current module if it's not bound to some other

            var ngModule = isBoundToModule(componentFactory) ? undefined : this._injector.get(NgModuleRef);
            var selectorOrNode = rootSelectorOrNode || componentFactory.selector;
            var compRef = componentFactory.create(Injector.NULL, [], selectorOrNode, ngModule);
            var nativeElement = compRef.location.nativeElement;
            var testability = compRef.injector.get(Testability, null);
            var testabilityRegistry = testability && compRef.injector.get(TestabilityRegistry);

            if (testability && testabilityRegistry) {
              testabilityRegistry.registerApplication(nativeElement, testability);
            }

            compRef.onDestroy(function () {
              _this740.detachView(compRef.hostView);

              remove(_this740.components, compRef);

              if (testabilityRegistry) {
                testabilityRegistry.unregisterApplication(nativeElement);
              }
            });

            this._loadComponent(compRef);

            if (isDevMode()) {
              this._console.log("Angular is running in development mode. Call enableProdMode() to enable production mode.");
            }

            return compRef;
          }
          /**
           * Invoke this method to explicitly process change detection and its side-effects.
           *
           * In development mode, `tick()` also performs a second change detection cycle to ensure that no
           * further changes are detected. If additional changes are picked up during this second cycle,
           * bindings in the app have side-effects that cannot be resolved in a single change detection
           * pass.
           * In this case, Angular throws an error, since an Angular application can only have one change
           * detection pass during which all change detection must complete.
           */

        }, {
          key: "tick",
          value: function tick() {
            var _this741 = this;

            if (this._runningTick) {
              throw new Error('ApplicationRef.tick is called recursively');
            }

            try {
              this._runningTick = true;

              var _iterator78 = _createForOfIteratorHelper(this._views),
                  _step77;

              try {
                for (_iterator78.s(); !(_step77 = _iterator78.n()).done;) {
                  var _view2 = _step77.value;

                  _view2.detectChanges();
                } // Note that we have still left the `isDevMode()` condition in order to avoid
                // creating a breaking change for projects that still use the View Engine.

              } catch (err) {
                _iterator78.e(err);
              } finally {
                _iterator78.f();
              }

              if ((typeof ngDevMode === 'undefined' || ngDevMode) && isDevMode()) {
                var _iterator79 = _createForOfIteratorHelper(this._views),
                    _step78;

                try {
                  for (_iterator79.s(); !(_step78 = _iterator79.n()).done;) {
                    var view = _step78.value;
                    view.checkNoChanges();
                  }
                } catch (err) {
                  _iterator79.e(err);
                } finally {
                  _iterator79.f();
                }
              }
            } catch (e) {
              // Attention: Don't rethrow as it could cancel subscriptions to Observables!
              this._zone.runOutsideAngular(function () {
                return _this741._exceptionHandler.handleError(e);
              });
            } finally {
              this._runningTick = false;
            }
          }
          /**
           * Attaches a view so that it will be dirty checked.
           * The view will be automatically detached when it is destroyed.
           * This will throw if the view is already attached to a ViewContainer.
           */

        }, {
          key: "attachView",
          value: function attachView(viewRef) {
            var view = viewRef;

            this._views.push(view);

            view.attachToAppRef(this);
          }
          /**
           * Detaches a view from dirty checking again.
           */

        }, {
          key: "detachView",
          value: function detachView(viewRef) {
            var view = viewRef;
            remove(this._views, view);
            view.detachFromAppRef();
          }
        }, {
          key: "_loadComponent",
          value: function _loadComponent(componentRef) {
            this.attachView(componentRef.hostView);
            this.tick();
            this.components.push(componentRef); // Get the listeners lazily to prevent DI cycles.

            var listeners = this._injector.get(APP_BOOTSTRAP_LISTENER, []).concat(this._bootstrapListeners);

            listeners.forEach(function (listener) {
              return listener(componentRef);
            });
          }
          /** @internal */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._views.slice().forEach(function (view) {
              return view.destroy();
            });

            this._onMicrotaskEmptySubscription.unsubscribe();
          }
          /**
           * Returns the number of attached views.
           */

        }, {
          key: "viewCount",
          get: function get() {
            return this._views.length;
          }
        }]);

        return ApplicationRef;
      }();

      ApplicationRef.ɵfac = function ApplicationRef_Factory(t) {
        return new (t || ApplicationRef)(ɵɵinject(NgZone), ɵɵinject(Console), ɵɵinject(Injector), ɵɵinject(ErrorHandler), ɵɵinject(ComponentFactoryResolver), ɵɵinject(ApplicationInitStatus));
      };

      ApplicationRef.ɵprov = ɵɵdefineInjectable({
        token: ApplicationRef,
        factory: ApplicationRef.ɵfac
      });

      ApplicationRef.ctorParameters = function () {
        return [{
          type: NgZone
        }, {
          type: Console
        }, {
          type: Injector
        }, {
          type: ErrorHandler
        }, {
          type: ComponentFactoryResolver
        }, {
          type: ApplicationInitStatus
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationRef, [{
          type: Injectable
        }], function () {
          return [{
            type: NgZone
          }, {
            type: Console
          }, {
            type: Injector
          }, {
            type: ErrorHandler
          }, {
            type: ComponentFactoryResolver
          }, {
            type: ApplicationInitStatus
          }];
        }, null);
      })();

      function remove(list, el) {
        var index = list.indexOf(el);

        if (index > -1) {
          list.splice(index, 1);
        }
      }

      function _lastDefined(args) {
        for (var i = args.length - 1; i >= 0; i--) {
          if (args[i] !== undefined) {
            return args[i];
          }
        }

        return undefined;
      }

      function _mergeArrays(parts) {
        var result = [];
        parts.forEach(function (part) {
          return part && result.push.apply(result, _toConsumableArray(part));
        });
        return result;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Used to load ng module factories.
       *
       * @publicApi
       * @deprecated the `string` form of `loadChildren` is deprecated, and `NgModuleFactoryLoader` is
       * part of its implementation. See `LoadChildren` for more details.
       */


      var NgModuleFactoryLoader = function NgModuleFactoryLoader() {
        _classCallCheck2(this, NgModuleFactoryLoader);
      };

      function getModuleFactory__PRE_R3__(id) {
        var factory = getRegisteredNgModuleType(id);
        if (!factory) throw noModuleError(id);
        return factory;
      }

      function getModuleFactory__POST_R3__(id) {
        var type = getRegisteredNgModuleType(id);
        if (!type) throw noModuleError(id);
        return new NgModuleFactory$1(type);
      }
      /**
       * Returns the NgModuleFactory with the given id, if it exists and has been loaded.
       * Factories for modules that do not specify an `id` cannot be retrieved. Throws if the module
       * cannot be found.
       * @publicApi
       */


      var getModuleFactory = getModuleFactory__POST_R3__;

      function noModuleError(id) {
        return new Error("No module with ID ".concat(id, " loaded"));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var _SEPARATOR = '#';
      var FACTORY_CLASS_SUFFIX = 'NgFactory';
      /**
       * Configuration for SystemJsNgModuleLoader.
       * token.
       *
       * @publicApi
       * @deprecated the `string` form of `loadChildren` is deprecated, and `SystemJsNgModuleLoaderConfig`
       * is part of its implementation. See `LoadChildren` for more details.
       */

      var SystemJsNgModuleLoaderConfig = function SystemJsNgModuleLoaderConfig() {
        _classCallCheck2(this, SystemJsNgModuleLoaderConfig);
      };

      var DEFAULT_CONFIG = {
        factoryPathPrefix: '',
        factoryPathSuffix: '.ngfactory'
      };
      /**
       * NgModuleFactoryLoader that uses SystemJS to load NgModuleFactory
       * @publicApi
       * @deprecated the `string` form of `loadChildren` is deprecated, and `SystemJsNgModuleLoader` is
       * part of its implementation. See `LoadChildren` for more details.
       */

      var SystemJsNgModuleLoader = /*#__PURE__*/function () {
        function SystemJsNgModuleLoader(_compiler, config) {
          _classCallCheck2(this, SystemJsNgModuleLoader);

          this._compiler = _compiler;
          this._config = config || DEFAULT_CONFIG;
        }

        _createClass2(SystemJsNgModuleLoader, [{
          key: "load",
          value: function load(path) {
            var legacyOfflineMode = !ivyEnabled && this._compiler instanceof Compiler;
            return legacyOfflineMode ? this.loadFactory(path) : this.loadAndCompile(path);
          }
        }, {
          key: "loadAndCompile",
          value: function loadAndCompile(path) {
            var _this742 = this;

            var _path$split = path.split(_SEPARATOR),
                _path$split2 = _slicedToArray(_path$split, 2),
                module = _path$split2[0],
                exportName = _path$split2[1];

            if (exportName === undefined) {
              exportName = 'default';
            }

            return __webpack_require__("zn8P")(module).then(function (module) {
              return module[exportName];
            }).then(function (type) {
              return checkNotEmpty(type, module, exportName);
            }).then(function (type) {
              return _this742._compiler.compileModuleAsync(type);
            });
          }
        }, {
          key: "loadFactory",
          value: function loadFactory(path) {
            var _path$split3 = path.split(_SEPARATOR),
                _path$split4 = _slicedToArray(_path$split3, 2),
                module = _path$split4[0],
                exportName = _path$split4[1];

            var factoryClassSuffix = FACTORY_CLASS_SUFFIX;

            if (exportName === undefined) {
              exportName = 'default';
              factoryClassSuffix = '';
            }

            return __webpack_require__("zn8P")(this._config.factoryPathPrefix + module + this._config.factoryPathSuffix).then(function (module) {
              return module[exportName + factoryClassSuffix];
            }).then(function (factory) {
              return checkNotEmpty(factory, module, exportName);
            });
          }
        }]);

        return SystemJsNgModuleLoader;
      }();

      SystemJsNgModuleLoader.ɵfac = function SystemJsNgModuleLoader_Factory(t) {
        return new (t || SystemJsNgModuleLoader)(ɵɵinject(Compiler), ɵɵinject(SystemJsNgModuleLoaderConfig, 8));
      };

      SystemJsNgModuleLoader.ɵprov = ɵɵdefineInjectable({
        token: SystemJsNgModuleLoader,
        factory: SystemJsNgModuleLoader.ɵfac
      });

      SystemJsNgModuleLoader.ctorParameters = function () {
        return [{
          type: Compiler
        }, {
          type: SystemJsNgModuleLoaderConfig,
          decorators: [{
            type: Optional
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(SystemJsNgModuleLoader, [{
          type: Injectable
        }], function () {
          return [{
            type: Compiler
          }, {
            type: SystemJsNgModuleLoaderConfig,
            decorators: [{
              type: Optional
            }]
          }];
        }, null);
      })();

      function checkNotEmpty(value, modulePath, exportName) {
        if (!value) {
          throw new Error("Cannot find '".concat(exportName, "' in '").concat(modulePath, "'"));
        }

        return value;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Represents an Angular [view](guide/glossary#view "Definition").
       *
       * @see {@link ChangeDetectorRef#usage-notes Change detection usage}
       *
       * @publicApi
       */


      var ViewRef$1 = /*#__PURE__*/function (_ChangeDetectorRef) {
        _inherits2(ViewRef$1, _ChangeDetectorRef);

        var _super321 = _createSuper(ViewRef$1);

        function ViewRef$1() {
          _classCallCheck2(this, ViewRef$1);

          return _super321.apply(this, arguments);
        }

        return ViewRef$1;
      }(ChangeDetectorRef);
      /**
       * Represents an Angular [view](guide/glossary#view) in a view container.
       * An [embedded view](guide/glossary#view-tree) can be referenced from a component
       * other than the hosting component whose template defines it, or it can be defined
       * independently by a `TemplateRef`.
       *
       * Properties of elements in a view can change, but the structure (number and order) of elements in
       * a view cannot. Change the structure of elements by inserting, moving, or
       * removing nested views in a view container.
       *
       * @see `ViewContainerRef`
       *
       * @usageNotes
       *
       * The following template breaks down into two separate `TemplateRef` instances,
       * an outer one and an inner one.
       *
       * ```
       * Count: {{items.length}}
       * <ul>
       *   <li *ngFor="let  item of items">{{item}}</li>
       * </ul>
       * ```
       *
       * This is the outer `TemplateRef`:
       *
       * ```
       * Count: {{items.length}}
       * <ul>
       *   <ng-template ngFor let-item [ngForOf]="items"></ng-template>
       * </ul>
       * ```
       *
       * This is the inner `TemplateRef`:
       *
       * ```
       *   <li>{{item}}</li>
       * ```
       *
       * The outer and inner `TemplateRef` instances are assembled into views as follows:
       *
       * ```
       * <!-- ViewRef: outer-0 -->
       * Count: 2
       * <ul>
       *   <ng-template view-container-ref></ng-template>
       *   <!-- ViewRef: inner-1 --><li>first</li><!-- /ViewRef: inner-1 -->
       *   <!-- ViewRef: inner-2 --><li>second</li><!-- /ViewRef: inner-2 -->
       * </ul>
       * <!-- /ViewRef: outer-0 -->
       * ```
       * @publicApi
       */


      var EmbeddedViewRef = /*#__PURE__*/function (_ViewRef$) {
        _inherits2(EmbeddedViewRef, _ViewRef$);

        var _super322 = _createSuper(EmbeddedViewRef);

        function EmbeddedViewRef() {
          _classCallCheck2(this, EmbeddedViewRef);

          return _super322.apply(this, arguments);
        }

        return EmbeddedViewRef;
      }(ViewRef$1);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @publicApi
       */


      var DebugEventListener = function DebugEventListener(name, callback) {
        _classCallCheck2(this, DebugEventListener);

        this.name = name;
        this.callback = callback;
      };

      var DebugNode__PRE_R3__ = /*#__PURE__*/function () {
        function DebugNode__PRE_R3__(nativeNode, parent, _debugContext) {
          _classCallCheck2(this, DebugNode__PRE_R3__);

          this.listeners = [];
          this.parent = null;
          this._debugContext = _debugContext;
          this.nativeNode = nativeNode;

          if (parent && parent instanceof DebugElement__PRE_R3__) {
            parent.addChild(this);
          }
        }

        _createClass2(DebugNode__PRE_R3__, [{
          key: "injector",
          get: function get() {
            return this._debugContext.injector;
          }
        }, {
          key: "componentInstance",
          get: function get() {
            return this._debugContext.component;
          }
        }, {
          key: "context",
          get: function get() {
            return this._debugContext.context;
          }
        }, {
          key: "references",
          get: function get() {
            return this._debugContext.references;
          }
        }, {
          key: "providerTokens",
          get: function get() {
            return this._debugContext.providerTokens;
          }
        }]);

        return DebugNode__PRE_R3__;
      }();

      var DebugElement__PRE_R3__ = /*#__PURE__*/function (_DebugNode__PRE_R3__) {
        _inherits2(DebugElement__PRE_R3__, _DebugNode__PRE_R3__);

        var _super323 = _createSuper(DebugElement__PRE_R3__);

        function DebugElement__PRE_R3__(nativeNode, parent, _debugContext) {
          var _this743;

          _classCallCheck2(this, DebugElement__PRE_R3__);

          _this743 = _super323.call(this, nativeNode, parent, _debugContext);
          _this743.properties = {};
          _this743.attributes = {};
          _this743.classes = {};
          _this743.styles = {};
          _this743.childNodes = [];
          _this743.nativeElement = nativeNode;
          return _this743;
        }

        _createClass2(DebugElement__PRE_R3__, [{
          key: "addChild",
          value: function addChild(child) {
            if (child) {
              this.childNodes.push(child);
              child.parent = this;
            }
          }
        }, {
          key: "removeChild",
          value: function removeChild(child) {
            var childIndex = this.childNodes.indexOf(child);

            if (childIndex !== -1) {
              child.parent = null;
              this.childNodes.splice(childIndex, 1);
            }
          }
        }, {
          key: "insertChildrenAfter",
          value: function insertChildrenAfter(child, newChildren) {
            var _this744 = this;

            var siblingIndex = this.childNodes.indexOf(child);

            if (siblingIndex !== -1) {
              var _this$childNodes;

              (_this$childNodes = this.childNodes).splice.apply(_this$childNodes, [siblingIndex + 1, 0].concat(_toConsumableArray(newChildren)));

              newChildren.forEach(function (c) {
                if (c.parent) {
                  c.parent.removeChild(c);
                }

                child.parent = _this744;
              });
            }
          }
        }, {
          key: "insertBefore",
          value: function insertBefore(refChild, newChild) {
            var refIndex = this.childNodes.indexOf(refChild);

            if (refIndex === -1) {
              this.addChild(newChild);
            } else {
              if (newChild.parent) {
                newChild.parent.removeChild(newChild);
              }

              newChild.parent = this;
              this.childNodes.splice(refIndex, 0, newChild);
            }
          }
        }, {
          key: "query",
          value: function query(predicate) {
            var results = this.queryAll(predicate);
            return results[0] || null;
          }
        }, {
          key: "queryAll",
          value: function queryAll(predicate) {
            var matches = [];

            _queryElementChildren(this, predicate, matches);

            return matches;
          }
        }, {
          key: "queryAllNodes",
          value: function queryAllNodes(predicate) {
            var matches = [];

            _queryNodeChildren(this, predicate, matches);

            return matches;
          }
        }, {
          key: "children",
          get: function get() {
            return this.childNodes //
            .filter(function (node) {
              return node instanceof DebugElement__PRE_R3__;
            });
          }
        }, {
          key: "triggerEventHandler",
          value: function triggerEventHandler(eventName, eventObj) {
            this.listeners.forEach(function (listener) {
              if (listener.name == eventName) {
                listener.callback(eventObj);
              }
            });
          }
        }]);

        return DebugElement__PRE_R3__;
      }(DebugNode__PRE_R3__);
      /**
       * @publicApi
       */


      function asNativeElements(debugEls) {
        return debugEls.map(function (el) {
          return el.nativeElement;
        });
      }

      function _queryElementChildren(element, predicate, matches) {
        element.childNodes.forEach(function (node) {
          if (node instanceof DebugElement__PRE_R3__) {
            if (predicate(node)) {
              matches.push(node);
            }

            _queryElementChildren(node, predicate, matches);
          }
        });
      }

      function _queryNodeChildren(parentNode, predicate, matches) {
        if (parentNode instanceof DebugElement__PRE_R3__) {
          parentNode.childNodes.forEach(function (node) {
            if (predicate(node)) {
              matches.push(node);
            }

            if (node instanceof DebugElement__PRE_R3__) {
              _queryNodeChildren(node, predicate, matches);
            }
          });
        }
      }

      var DebugNode__POST_R3__ = /*#__PURE__*/function () {
        function DebugNode__POST_R3__(nativeNode) {
          _classCallCheck2(this, DebugNode__POST_R3__);

          this.nativeNode = nativeNode;
        }

        _createClass2(DebugNode__POST_R3__, [{
          key: "parent",
          get: function get() {
            var parent = this.nativeNode.parentNode;
            return parent ? new DebugElement__POST_R3__(parent) : null;
          }
        }, {
          key: "injector",
          get: function get() {
            return getInjector(this.nativeNode);
          }
        }, {
          key: "componentInstance",
          get: function get() {
            var nativeElement = this.nativeNode;
            return nativeElement && (getComponent(nativeElement) || getOwningComponent(nativeElement));
          }
        }, {
          key: "context",
          get: function get() {
            return getComponent(this.nativeNode) || getContext(this.nativeNode);
          }
        }, {
          key: "listeners",
          get: function get() {
            return getListeners(this.nativeNode).filter(function (listener) {
              return listener.type === 'dom';
            });
          }
        }, {
          key: "references",
          get: function get() {
            return getLocalRefs(this.nativeNode);
          }
        }, {
          key: "providerTokens",
          get: function get() {
            return getInjectionTokens(this.nativeNode);
          }
        }]);

        return DebugNode__POST_R3__;
      }();

      var DebugElement__POST_R3__ = /*#__PURE__*/function (_DebugNode__POST_R3__) {
        _inherits2(DebugElement__POST_R3__, _DebugNode__POST_R3__);

        var _super324 = _createSuper(DebugElement__POST_R3__);

        function DebugElement__POST_R3__(nativeNode) {
          _classCallCheck2(this, DebugElement__POST_R3__);

          ngDevMode && assertDomNode(nativeNode);
          return _super324.call(this, nativeNode);
        }

        _createClass2(DebugElement__POST_R3__, [{
          key: "nativeElement",
          get: function get() {
            return this.nativeNode.nodeType == Node.ELEMENT_NODE ? this.nativeNode : null;
          }
        }, {
          key: "name",
          get: function get() {
            try {
              var context = loadLContext(this.nativeNode);
              var lView = context.lView;
              var tData = lView[TVIEW].data;
              var tNode = tData[context.nodeIndex];
              return tNode.value;
            } catch (e) {
              return this.nativeNode.nodeName;
            }
          }
          /**
           *  Gets a map of property names to property values for an element.
           *
           *  This map includes:
           *  - Regular property bindings (e.g. `[id]="id"`)
           *  - Host property bindings (e.g. `host: { '[id]': "id" }`)
           *  - Interpolated property bindings (e.g. `id="{{ value }}")
           *
           *  It does not include:
           *  - input property bindings (e.g. `[myCustomInput]="value"`)
           *  - attribute bindings (e.g. `[attr.role]="menu"`)
           */

        }, {
          key: "properties",
          get: function get() {
            var context = loadLContext(this.nativeNode, false);

            if (context == null) {
              return {};
            }

            var lView = context.lView;
            var tData = lView[TVIEW].data;
            var tNode = tData[context.nodeIndex];
            var properties = {}; // Collect properties from the DOM.

            copyDomProperties(this.nativeElement, properties); // Collect properties from the bindings. This is needed for animation renderer which has
            // synthetic properties which don't get reflected into the DOM.

            collectPropertyBindings(properties, tNode, lView, tData);
            return properties;
          }
        }, {
          key: "attributes",
          get: function get() {
            var attributes = {};
            var element = this.nativeElement;

            if (!element) {
              return attributes;
            }

            var context = loadLContext(element, false);

            if (context == null) {
              return {};
            }

            var lView = context.lView;
            var tNodeAttrs = lView[TVIEW].data[context.nodeIndex].attrs;
            var lowercaseTNodeAttrs = []; // For debug nodes we take the element's attribute directly from the DOM since it allows us
            // to account for ones that weren't set via bindings (e.g. ViewEngine keeps track of the ones
            // that are set through `Renderer2`). The problem is that the browser will lowercase all names,
            // however since we have the attributes already on the TNode, we can preserve the case by going
            // through them once, adding them to the `attributes` map and putting their lower-cased name
            // into an array. Afterwards when we're going through the native DOM attributes, we can check
            // whether we haven't run into an attribute already through the TNode.

            if (tNodeAttrs) {
              var i = 0;

              while (i < tNodeAttrs.length) {
                var attrName = tNodeAttrs[i]; // Stop as soon as we hit a marker. We only care about the regular attributes. Everything
                // else will be handled below when we read the final attributes off the DOM.

                if (typeof attrName !== 'string') break;
                var attrValue = tNodeAttrs[i + 1];
                attributes[attrName] = attrValue;
                lowercaseTNodeAttrs.push(attrName.toLowerCase());
                i += 2;
              }
            }

            var eAttrs = element.attributes;

            for (var _i36 = 0; _i36 < eAttrs.length; _i36++) {
              var attr = eAttrs[_i36];
              var lowercaseName = attr.name.toLowerCase(); // Make sure that we don't assign the same attribute both in its
              // case-sensitive form and the lower-cased one from the browser.

              if (lowercaseTNodeAttrs.indexOf(lowercaseName) === -1) {
                // Save the lowercase name to align the behavior between browsers.
                // IE preserves the case, while all other browser convert it to lower case.
                attributes[lowercaseName] = attr.value;
              }
            }

            return attributes;
          }
        }, {
          key: "styles",
          get: function get() {
            if (this.nativeElement && this.nativeElement.style) {
              return this.nativeElement.style;
            }

            return {};
          }
        }, {
          key: "classes",
          get: function get() {
            var result = {};
            var element = this.nativeElement; // SVG elements return an `SVGAnimatedString` instead of a plain string for the `className`.

            var className = element.className;
            var classes = className && typeof className !== 'string' ? className.baseVal.split(' ') : className.split(' ');
            classes.forEach(function (value) {
              return result[value] = true;
            });
            return result;
          }
        }, {
          key: "childNodes",
          get: function get() {
            var childNodes = this.nativeNode.childNodes;
            var children = [];

            for (var i = 0; i < childNodes.length; i++) {
              var element = childNodes[i];
              children.push(getDebugNode__POST_R3__(element));
            }

            return children;
          }
        }, {
          key: "children",
          get: function get() {
            var nativeElement = this.nativeElement;
            if (!nativeElement) return [];
            var childNodes = nativeElement.children;
            var children = [];

            for (var i = 0; i < childNodes.length; i++) {
              var element = childNodes[i];
              children.push(getDebugNode__POST_R3__(element));
            }

            return children;
          }
        }, {
          key: "query",
          value: function query(predicate) {
            var results = this.queryAll(predicate);
            return results[0] || null;
          }
        }, {
          key: "queryAll",
          value: function queryAll(predicate) {
            var matches = [];

            _queryAllR3(this, predicate, matches, true);

            return matches;
          }
        }, {
          key: "queryAllNodes",
          value: function queryAllNodes(predicate) {
            var matches = [];

            _queryAllR3(this, predicate, matches, false);

            return matches;
          }
        }, {
          key: "triggerEventHandler",
          value: function triggerEventHandler(eventName, eventObj) {
            var node = this.nativeNode;
            var invokedListeners = [];
            this.listeners.forEach(function (listener) {
              if (listener.name === eventName) {
                var callback = listener.callback;
                callback.call(node, eventObj);
                invokedListeners.push(callback);
              }
            }); // We need to check whether `eventListeners` exists, because it's something
            // that Zone.js only adds to `EventTarget` in browser environments.

            if (typeof node.eventListeners === 'function') {
              // Note that in Ivy we wrap event listeners with a call to `event.preventDefault` in some
              // cases. We use '__ngUnwrap__' as a special token that gives us access to the actual event
              // listener.
              node.eventListeners(eventName).forEach(function (listener) {
                // In order to ensure that we can detect the special __ngUnwrap__ token described above, we
                // use `toString` on the listener and see if it contains the token. We use this approach to
                // ensure that it still worked with compiled code since it cannot remove or rename string
                // literals. We also considered using a special function name (i.e. if(listener.name ===
                // special)) but that was more cumbersome and we were also concerned the compiled code could
                // strip the name, turning the condition in to ("" === "") and always returning true.
                if (listener.toString().indexOf('__ngUnwrap__') !== -1) {
                  var unwrappedListener = listener('__ngUnwrap__');
                  return invokedListeners.indexOf(unwrappedListener) === -1 && unwrappedListener.call(node, eventObj);
                }
              });
            }
          }
        }]);

        return DebugElement__POST_R3__;
      }(DebugNode__POST_R3__);

      function copyDomProperties(element, properties) {
        if (element) {
          // Skip own properties (as those are patched)
          var obj = Object.getPrototypeOf(element);
          var NodePrototype = Node.prototype;

          while (obj !== null && obj !== NodePrototype) {
            var descriptors = Object.getOwnPropertyDescriptors(obj);

            for (var key in descriptors) {
              if (!key.startsWith('__') && !key.startsWith('on')) {
                // don't include properties starting with `__` and `on`.
                // `__` are patched values which should not be included.
                // `on` are listeners which also should not be included.
                var value = element[key];

                if (isPrimitiveValue(value)) {
                  properties[key] = value;
                }
              }
            }

            obj = Object.getPrototypeOf(obj);
          }
        }
      }

      function isPrimitiveValue(value) {
        return typeof value === 'string' || typeof value === 'boolean' || typeof value === 'number' || value === null;
      }

      function _queryAllR3(parentElement, predicate, matches, elementsOnly) {
        var context = loadLContext(parentElement.nativeNode, false);

        if (context !== null) {
          var parentTNode = context.lView[TVIEW].data[context.nodeIndex];

          _queryNodeChildrenR3(parentTNode, context.lView, predicate, matches, elementsOnly, parentElement.nativeNode);
        } else {
          // If the context is null, then `parentElement` was either created with Renderer2 or native DOM
          // APIs.
          _queryNativeNodeDescendants(parentElement.nativeNode, predicate, matches, elementsOnly);
        }
      }
      /**
       * Recursively match the current TNode against the predicate, and goes on with the next ones.
       *
       * @param tNode the current TNode
       * @param lView the LView of this TNode
       * @param predicate the predicate to match
       * @param matches the list of positive matches
       * @param elementsOnly whether only elements should be searched
       * @param rootNativeNode the root native node on which predicate should not be matched
       */


      function _queryNodeChildrenR3(tNode, lView, predicate, matches, elementsOnly, rootNativeNode) {
        ngDevMode && assertTNodeForLView(tNode, lView);
        var nativeNode = getNativeByTNodeOrNull(tNode, lView); // For each type of TNode, specific logic is executed.

        if (tNode.type & (3
        /* AnyRNode */
        | 8
        /* ElementContainer */
        )) {
          // Case 1: the TNode is an element
          // The native node has to be checked.
          _addQueryMatchR3(nativeNode, predicate, matches, elementsOnly, rootNativeNode);

          if (isComponentHost(tNode)) {
            // If the element is the host of a component, then all nodes in its view have to be processed.
            // Note: the component's content (tNode.child) will be processed from the insertion points.
            var componentView = getComponentLViewByIndex(tNode.index, lView);

            if (componentView && componentView[TVIEW].firstChild) {
              _queryNodeChildrenR3(componentView[TVIEW].firstChild, componentView, predicate, matches, elementsOnly, rootNativeNode);
            }
          } else {
            if (tNode.child) {
              // Otherwise, its children have to be processed.
              _queryNodeChildrenR3(tNode.child, lView, predicate, matches, elementsOnly, rootNativeNode);
            } // We also have to query the DOM directly in order to catch elements inserted through
            // Renderer2. Note that this is __not__ optimal, because we're walking similar trees multiple
            // times. ViewEngine could do it more efficiently, because all the insertions go through
            // Renderer2, however that's not the case in Ivy. This approach is being used because:
            // 1. Matching the ViewEngine behavior would mean potentially introducing a depedency
            //    from `Renderer2` to Ivy which could bring Ivy code into ViewEngine.
            // 2. We would have to make `Renderer3` "know" about debug nodes.
            // 3. It allows us to capture nodes that were inserted directly via the DOM.


            nativeNode && _queryNativeNodeDescendants(nativeNode, predicate, matches, elementsOnly);
          } // In all cases, if a dynamic container exists for this node, each view inside it has to be
          // processed.


          var nodeOrContainer = lView[tNode.index];

          if (isLContainer(nodeOrContainer)) {
            _queryNodeChildrenInContainerR3(nodeOrContainer, predicate, matches, elementsOnly, rootNativeNode);
          }
        } else if (tNode.type & 4
        /* Container */
        ) {
            // Case 2: the TNode is a container
            // The native node has to be checked.
            var lContainer = lView[tNode.index];

            _addQueryMatchR3(lContainer[NATIVE], predicate, matches, elementsOnly, rootNativeNode); // Each view inside the container has to be processed.


            _queryNodeChildrenInContainerR3(lContainer, predicate, matches, elementsOnly, rootNativeNode);
          } else if (tNode.type & 16
        /* Projection */
        ) {
            // Case 3: the TNode is a projection insertion point (i.e. a <ng-content>).
            // The nodes projected at this location all need to be processed.
            var _componentView = lView[DECLARATION_COMPONENT_VIEW];
            var componentHost = _componentView[T_HOST];
            var head = componentHost.projection[tNode.projection];

            if (Array.isArray(head)) {
              var _iterator80 = _createForOfIteratorHelper(head),
                  _step79;

              try {
                for (_iterator80.s(); !(_step79 = _iterator80.n()).done;) {
                  var _nativeNode2 = _step79.value;

                  _addQueryMatchR3(_nativeNode2, predicate, matches, elementsOnly, rootNativeNode);
                }
              } catch (err) {
                _iterator80.e(err);
              } finally {
                _iterator80.f();
              }
            } else if (head) {
              var nextLView = _componentView[PARENT];
              var nextTNode = nextLView[TVIEW].data[head.index];

              _queryNodeChildrenR3(nextTNode, nextLView, predicate, matches, elementsOnly, rootNativeNode);
            }
          } else if (tNode.child) {
          // Case 4: the TNode is a view.
          _queryNodeChildrenR3(tNode.child, lView, predicate, matches, elementsOnly, rootNativeNode);
        } // We don't want to go to the next sibling of the root node.


        if (rootNativeNode !== nativeNode) {
          // To determine the next node to be processed, we need to use the next or the projectionNext
          // link, depending on whether the current node has been projected.
          var _nextTNode = tNode.flags & 4
          /* isProjected */
          ? tNode.projectionNext : tNode.next;

          if (_nextTNode) {
            _queryNodeChildrenR3(_nextTNode, lView, predicate, matches, elementsOnly, rootNativeNode);
          }
        }
      }
      /**
       * Process all TNodes in a given container.
       *
       * @param lContainer the container to be processed
       * @param predicate the predicate to match
       * @param matches the list of positive matches
       * @param elementsOnly whether only elements should be searched
       * @param rootNativeNode the root native node on which predicate should not be matched
       */


      function _queryNodeChildrenInContainerR3(lContainer, predicate, matches, elementsOnly, rootNativeNode) {
        for (var i = CONTAINER_HEADER_OFFSET; i < lContainer.length; i++) {
          var childView = lContainer[i];
          var firstChild = childView[TVIEW].firstChild;

          if (firstChild) {
            _queryNodeChildrenR3(firstChild, childView, predicate, matches, elementsOnly, rootNativeNode);
          }
        }
      }
      /**
       * Match the current native node against the predicate.
       *
       * @param nativeNode the current native node
       * @param predicate the predicate to match
       * @param matches the list of positive matches
       * @param elementsOnly whether only elements should be searched
       * @param rootNativeNode the root native node on which predicate should not be matched
       */


      function _addQueryMatchR3(nativeNode, predicate, matches, elementsOnly, rootNativeNode) {
        if (rootNativeNode !== nativeNode) {
          var debugNode = getDebugNode$1(nativeNode);

          if (!debugNode) {
            return;
          } // Type of the "predicate and "matches" array are set based on the value of
          // the "elementsOnly" parameter. TypeScript is not able to properly infer these
          // types with generics, so we manually cast the parameters accordingly.


          if (elementsOnly && debugNode instanceof DebugElement__POST_R3__ && predicate(debugNode) && matches.indexOf(debugNode) === -1) {
            matches.push(debugNode);
          } else if (!elementsOnly && predicate(debugNode) && matches.indexOf(debugNode) === -1) {
            matches.push(debugNode);
          }
        }
      }
      /**
       * Match all the descendants of a DOM node against a predicate.
       *
       * @param nativeNode the current native node
       * @param predicate the predicate to match
       * @param matches the list where matches are stored
       * @param elementsOnly whether only elements should be searched
       */


      function _queryNativeNodeDescendants(parentNode, predicate, matches, elementsOnly) {
        var nodes = parentNode.childNodes;
        var length = nodes.length;

        for (var i = 0; i < length; i++) {
          var node = nodes[i];
          var debugNode = getDebugNode$1(node);

          if (debugNode) {
            if (elementsOnly && debugNode instanceof DebugElement__POST_R3__ && predicate(debugNode) && matches.indexOf(debugNode) === -1) {
              matches.push(debugNode);
            } else if (!elementsOnly && predicate(debugNode) && matches.indexOf(debugNode) === -1) {
              matches.push(debugNode);
            }

            _queryNativeNodeDescendants(node, predicate, matches, elementsOnly);
          }
        }
      }
      /**
       * Iterates through the property bindings for a given node and generates
       * a map of property names to values. This map only contains property bindings
       * defined in templates, not in host bindings.
       */


      function collectPropertyBindings(properties, tNode, lView, tData) {
        var bindingIndexes = tNode.propertyBindings;

        if (bindingIndexes !== null) {
          for (var i = 0; i < bindingIndexes.length; i++) {
            var bindingIndex = bindingIndexes[i];
            var propMetadata = tData[bindingIndex];
            var metadataParts = propMetadata.split(INTERPOLATION_DELIMITER);
            var propertyName = metadataParts[0];

            if (metadataParts.length > 1) {
              var value = metadataParts[1];

              for (var j = 1; j < metadataParts.length - 1; j++) {
                value += renderStringify(lView[bindingIndex + j - 1]) + metadataParts[j + 1];
              }

              properties[propertyName] = value;
            } else {
              properties[propertyName] = lView[bindingIndex];
            }
          }
        }
      } // Need to keep the nodes in a global Map so that multiple angular apps are supported.


      var _nativeNodeToDebugNode = new Map();

      function getDebugNode__PRE_R3__(nativeNode) {
        return _nativeNodeToDebugNode.get(nativeNode) || null;
      }

      var NG_DEBUG_PROPERTY = '__ng_debug__';

      function getDebugNode__POST_R3__(nativeNode) {
        if (nativeNode instanceof Node) {
          if (!nativeNode.hasOwnProperty(NG_DEBUG_PROPERTY)) {
            nativeNode[NG_DEBUG_PROPERTY] = nativeNode.nodeType == Node.ELEMENT_NODE ? new DebugElement__POST_R3__(nativeNode) : new DebugNode__POST_R3__(nativeNode);
          }

          return nativeNode[NG_DEBUG_PROPERTY];
        }

        return null;
      }
      /**
       * @publicApi
       */


      var getDebugNode$1 = getDebugNode__POST_R3__;

      function getDebugNodeR2__PRE_R3__(nativeNode) {
        return getDebugNode__PRE_R3__(nativeNode);
      }

      function getDebugNodeR2__POST_R3__(_nativeNode) {
        return null;
      }

      var getDebugNodeR2 = getDebugNodeR2__POST_R3__;

      function getAllDebugNodes() {
        return Array.from(_nativeNodeToDebugNode.values());
      }

      function indexDebugNode(node) {
        _nativeNodeToDebugNode.set(node.nativeNode, node);
      }

      function removeDebugNodeFromIndex(node) {
        _nativeNodeToDebugNode["delete"](node.nativeNode);
      }
      /**
       * @publicApi
       */


      var DebugNode = DebugNode__POST_R3__;
      /**
       * @publicApi
       */

      var DebugElement = DebugElement__POST_R3__;
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var _CORE_PLATFORM_PROVIDERS = [// Set a default platform name for platforms that don't set it explicitly.
      {
        provide: PLATFORM_ID,
        useValue: 'unknown'
      }, {
        provide: PlatformRef,
        deps: [Injector]
      }, {
        provide: TestabilityRegistry,
        deps: []
      }, {
        provide: Console,
        deps: []
      }];
      /**
       * This platform has to be included in any other platform
       *
       * @publicApi
       */

      var platformCore = createPlatformFactory(null, 'core', _CORE_PLATFORM_PROVIDERS);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      function _iterableDiffersFactory() {
        return defaultIterableDiffers;
      }

      function _keyValueDiffersFactory() {
        return defaultKeyValueDiffers;
      }

      function _localeFactory(locale) {
        locale = locale || getGlobalLocale();

        if (ivyEnabled) {
          setLocaleId(locale);
        }

        return locale;
      }
      /**
       * Work out the locale from the potential global properties.
       *
       * * Closure Compiler: use `goog.LOCALE`.
       * * Ivy enabled: use `$localize.locale`
       */


      function getGlobalLocale() {
        if (typeof ngI18nClosureMode !== 'undefined' && ngI18nClosureMode && typeof goog !== 'undefined' && goog.LOCALE !== 'en') {
          // * The default `goog.LOCALE` value is `en`, while Angular used `en-US`.
          // * In order to preserve backwards compatibility, we use Angular default value over
          //   Closure Compiler's one.
          return goog.LOCALE;
        } else {
          // KEEP `typeof $localize !== 'undefined' && $localize.locale` IN SYNC WITH THE LOCALIZE
          // COMPILE-TIME INLINER.
          //
          // * During compile time inlining of translations the expression will be replaced
          //   with a string literal that is the current locale. Other forms of this expression are not
          //   guaranteed to be replaced.
          //
          // * During runtime translation evaluation, the developer is required to set `$localize.locale`
          //   if required, or just to provide their own `LOCALE_ID` provider.
          return ivyEnabled && typeof $localize !== 'undefined' && $localize.locale || DEFAULT_LOCALE_ID;
        }
      }

      var ɵ0$f = USD_CURRENCY_CODE;
      /**
       * A built-in [dependency injection token](guide/glossary#di-token)
       * that is used to configure the root injector for bootstrapping.
       */

      var APPLICATION_MODULE_PROVIDERS = [{
        provide: ApplicationRef,
        useClass: ApplicationRef,
        deps: [NgZone, Console, Injector, ErrorHandler, ComponentFactoryResolver, ApplicationInitStatus]
      }, {
        provide: SCHEDULER,
        deps: [NgZone],
        useFactory: zoneSchedulerFactory
      }, {
        provide: ApplicationInitStatus,
        useClass: ApplicationInitStatus,
        deps: [[new Optional(), APP_INITIALIZER]]
      }, {
        provide: Compiler,
        useClass: Compiler,
        deps: []
      }, APP_ID_RANDOM_PROVIDER, {
        provide: IterableDiffers,
        useFactory: _iterableDiffersFactory,
        deps: []
      }, {
        provide: KeyValueDiffers,
        useFactory: _keyValueDiffersFactory,
        deps: []
      }, {
        provide: LOCALE_ID$1,
        useFactory: _localeFactory,
        deps: [[new Inject(LOCALE_ID$1), new Optional(), new SkipSelf()]]
      }, {
        provide: DEFAULT_CURRENCY_CODE,
        useValue: ɵ0$f
      }];
      /**
       * Schedule work at next available slot.
       *
       * In Ivy this is just `requestAnimationFrame`. For compatibility reasons when bootstrapped
       * using `platformRef.bootstrap` we need to use `NgZone.onStable` as the scheduling mechanism.
       * This overrides the scheduling mechanism in Ivy to `NgZone.onStable`.
       *
       * @param ngZone NgZone to use for scheduling.
       */

      function zoneSchedulerFactory(ngZone) {
        var queue = [];
        ngZone.onStable.subscribe(function () {
          while (queue.length) {
            queue.pop()();
          }
        });
        return function (fn) {
          queue.push(fn);
        };
      }
      /**
       * Configures the root injector for an app with
       * providers of `@angular/core` dependencies that `ApplicationRef` needs
       * to bootstrap components.
       *
       * Re-exported by `BrowserModule`, which is included automatically in the root
       * `AppModule` when you create a new app with the CLI `new` command.
       *
       * @publicApi
       */


      var ApplicationModule = // Inject ApplicationRef to make it eager...
      function ApplicationModule(appRef) {
        _classCallCheck2(this, ApplicationModule);
      };

      ApplicationModule.ɵmod = ɵɵdefineNgModule({
        type: ApplicationModule
      });
      ApplicationModule.ɵinj = ɵɵdefineInjector({
        factory: function ApplicationModule_Factory(t) {
          return new (t || ApplicationModule)(ɵɵinject(ApplicationRef));
        },
        providers: APPLICATION_MODULE_PROVIDERS
      });

      ApplicationModule.ctorParameters = function () {
        return [{
          type: ApplicationRef
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationModule, [{
          type: NgModule,
          args: [{
            providers: APPLICATION_MODULE_PROVIDERS
          }]
        }], function () {
          return [{
            type: ApplicationRef
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function anchorDef(flags, matchedQueriesDsl, ngContentIndex, childCount, handleEvent, templateFactory) {
        flags |= 1
        /* TypeElement */
        ;

        var _splitMatchedQueriesD2 = splitMatchedQueriesDsl(matchedQueriesDsl),
            matchedQueries = _splitMatchedQueriesD2.matchedQueries,
            references = _splitMatchedQueriesD2.references,
            matchedQueryIds = _splitMatchedQueriesD2.matchedQueryIds;

        var template = templateFactory ? resolveDefinition(templateFactory) : null;
        return {
          // will bet set by the view definition
          nodeIndex: -1,
          parent: null,
          renderParent: null,
          bindingIndex: -1,
          outputIndex: -1,
          // regular values
          flags: flags,
          checkIndex: -1,
          childFlags: 0,
          directChildFlags: 0,
          childMatchedQueries: 0,
          matchedQueries: matchedQueries,
          matchedQueryIds: matchedQueryIds,
          references: references,
          ngContentIndex: ngContentIndex,
          childCount: childCount,
          bindings: [],
          bindingFlags: 0,
          outputs: [],
          element: {
            ns: null,
            name: null,
            attrs: null,
            template: template,
            componentProvider: null,
            componentView: null,
            componentRendererType: null,
            publicProviders: null,
            allProviders: null,
            handleEvent: handleEvent || NOOP
          },
          provider: null,
          text: null,
          query: null,
          ngContent: null
        };
      }

      function elementDef(checkIndex, flags, matchedQueriesDsl, ngContentIndex, childCount, namespaceAndName) {
        var fixedAttrs = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : [];
        var bindings = arguments.length > 7 ? arguments[7] : undefined;
        var outputs = arguments.length > 8 ? arguments[8] : undefined;
        var handleEvent = arguments.length > 9 ? arguments[9] : undefined;
        var componentView = arguments.length > 10 ? arguments[10] : undefined;
        var componentRendererType = arguments.length > 11 ? arguments[11] : undefined;

        if (!handleEvent) {
          handleEvent = NOOP;
        }

        var _splitMatchedQueriesD3 = splitMatchedQueriesDsl(matchedQueriesDsl),
            matchedQueries = _splitMatchedQueriesD3.matchedQueries,
            references = _splitMatchedQueriesD3.references,
            matchedQueryIds = _splitMatchedQueriesD3.matchedQueryIds;

        var ns = null;
        var name = null;

        if (namespaceAndName) {
          var _splitNamespace = splitNamespace(namespaceAndName);

          var _splitNamespace2 = _slicedToArray(_splitNamespace, 2);

          ns = _splitNamespace2[0];
          name = _splitNamespace2[1];
        }

        bindings = bindings || [];
        var bindingDefs = [];

        for (var i = 0; i < bindings.length; i++) {
          var _bindings$i = _slicedToArray(bindings[i], 3),
              bindingFlags = _bindings$i[0],
              _namespaceAndName = _bindings$i[1],
              suffixOrSecurityContext = _bindings$i[2];

          var _splitNamespace3 = splitNamespace(_namespaceAndName),
              _splitNamespace4 = _slicedToArray(_splitNamespace3, 2),
              _ns = _splitNamespace4[0],
              _name2 = _splitNamespace4[1];

          var securityContext = undefined;
          var suffix = undefined;

          switch (bindingFlags & 15
          /* Types */
          ) {
            case 4
            /* TypeElementStyle */
            :
              suffix = suffixOrSecurityContext;
              break;

            case 1
            /* TypeElementAttribute */
            :
            case 8
            /* TypeProperty */
            :
              securityContext = suffixOrSecurityContext;
              break;
          }

          bindingDefs[i] = {
            flags: bindingFlags,
            ns: _ns,
            name: _name2,
            nonMinifiedName: _name2,
            securityContext: securityContext,
            suffix: suffix
          };
        }

        outputs = outputs || [];
        var outputDefs = [];

        for (var _i37 = 0; _i37 < outputs.length; _i37++) {
          var _outputs$_i = _slicedToArray(outputs[_i37], 2),
              target = _outputs$_i[0],
              eventName = _outputs$_i[1];

          outputDefs[_i37] = {
            type: 0
            /* ElementOutput */
            ,
            target: target,
            eventName: eventName,
            propName: null
          };
        }

        fixedAttrs = fixedAttrs || [];
        var attrs = fixedAttrs.map(function (_ref117) {
          var _ref118 = _slicedToArray(_ref117, 2),
              namespaceAndName = _ref118[0],
              value = _ref118[1];

          var _splitNamespace5 = splitNamespace(namespaceAndName),
              _splitNamespace6 = _slicedToArray(_splitNamespace5, 2),
              ns = _splitNamespace6[0],
              name = _splitNamespace6[1];

          return [ns, name, value];
        });
        componentRendererType = resolveRendererType2(componentRendererType);

        if (componentView) {
          flags |= 33554432
          /* ComponentView */
          ;
        }

        flags |= 1
        /* TypeElement */
        ;
        return {
          // will bet set by the view definition
          nodeIndex: -1,
          parent: null,
          renderParent: null,
          bindingIndex: -1,
          outputIndex: -1,
          // regular values
          checkIndex: checkIndex,
          flags: flags,
          childFlags: 0,
          directChildFlags: 0,
          childMatchedQueries: 0,
          matchedQueries: matchedQueries,
          matchedQueryIds: matchedQueryIds,
          references: references,
          ngContentIndex: ngContentIndex,
          childCount: childCount,
          bindings: bindingDefs,
          bindingFlags: calcBindingFlags(bindingDefs),
          outputs: outputDefs,
          element: {
            ns: ns,
            name: name,
            attrs: attrs,
            template: null,
            // will bet set by the view definition
            componentProvider: null,
            componentView: componentView || null,
            componentRendererType: componentRendererType,
            publicProviders: null,
            allProviders: null,
            handleEvent: handleEvent || NOOP
          },
          provider: null,
          text: null,
          query: null,
          ngContent: null
        };
      }

      function createElement(view, renderHost, def) {
        var elDef = def.element;
        var rootSelectorOrNode = view.root.selectorOrNode;
        var renderer = view.renderer;
        var el;

        if (view.parent || !rootSelectorOrNode) {
          if (elDef.name) {
            el = renderer.createElement(elDef.name, elDef.ns);
          } else {
            el = renderer.createComment('');
          }

          var parentEl = getParentRenderElement(view, renderHost, def);

          if (parentEl) {
            renderer.appendChild(parentEl, el);
          }
        } else {
          // when using native Shadow DOM, do not clear the root element contents to allow slot projection
          var preserveContent = !!elDef.componentRendererType && elDef.componentRendererType.encapsulation === ViewEncapsulation.ShadowDom;
          el = renderer.selectRootElement(rootSelectorOrNode, preserveContent);
        }

        if (elDef.attrs) {
          for (var i = 0; i < elDef.attrs.length; i++) {
            var _elDef$attrs$i = _slicedToArray(elDef.attrs[i], 3),
                ns = _elDef$attrs$i[0],
                name = _elDef$attrs$i[1],
                value = _elDef$attrs$i[2];

            renderer.setAttribute(el, name, value, ns);
          }
        }

        return el;
      }

      function listenToElementOutputs(view, compView, def, el) {
        for (var i = 0; i < def.outputs.length; i++) {
          var output = def.outputs[i];
          var handleEventClosure = renderEventHandlerClosure(view, def.nodeIndex, elementEventFullName(output.target, output.eventName));
          var listenTarget = output.target;
          var listenerView = view;

          if (output.target === 'component') {
            listenTarget = null;
            listenerView = compView;
          }

          var disposable = listenerView.renderer.listen(listenTarget || el, output.eventName, handleEventClosure);
          view.disposables[def.outputIndex + i] = disposable;
        }
      }

      function renderEventHandlerClosure(view, index, eventName) {
        return function (event) {
          return dispatchEvent(view, index, eventName, event);
        };
      }

      function checkAndUpdateElementInline(view, def, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
        var bindLen = def.bindings.length;
        var changed = false;
        if (bindLen > 0 && checkAndUpdateElementValue(view, def, 0, v0)) changed = true;
        if (bindLen > 1 && checkAndUpdateElementValue(view, def, 1, v1)) changed = true;
        if (bindLen > 2 && checkAndUpdateElementValue(view, def, 2, v2)) changed = true;
        if (bindLen > 3 && checkAndUpdateElementValue(view, def, 3, v3)) changed = true;
        if (bindLen > 4 && checkAndUpdateElementValue(view, def, 4, v4)) changed = true;
        if (bindLen > 5 && checkAndUpdateElementValue(view, def, 5, v5)) changed = true;
        if (bindLen > 6 && checkAndUpdateElementValue(view, def, 6, v6)) changed = true;
        if (bindLen > 7 && checkAndUpdateElementValue(view, def, 7, v7)) changed = true;
        if (bindLen > 8 && checkAndUpdateElementValue(view, def, 8, v8)) changed = true;
        if (bindLen > 9 && checkAndUpdateElementValue(view, def, 9, v9)) changed = true;
        return changed;
      }

      function checkAndUpdateElementDynamic(view, def, values) {
        var changed = false;

        for (var i = 0; i < values.length; i++) {
          if (checkAndUpdateElementValue(view, def, i, values[i])) changed = true;
        }

        return changed;
      }

      function checkAndUpdateElementValue(view, def, bindingIdx, value) {
        if (!checkAndUpdateBinding(view, def, bindingIdx, value)) {
          return false;
        }

        var binding = def.bindings[bindingIdx];
        var elData = asElementData(view, def.nodeIndex);
        var renderNode = elData.renderElement;
        var name = binding.name;

        switch (binding.flags & 15
        /* Types */
        ) {
          case 1
          /* TypeElementAttribute */
          :
            setElementAttribute$1(view, binding, renderNode, binding.ns, name, value);
            break;

          case 2
          /* TypeElementClass */
          :
            setElementClass(view, renderNode, name, value);
            break;

          case 4
          /* TypeElementStyle */
          :
            setElementStyle(view, binding, renderNode, name, value);
            break;

          case 8
          /* TypeProperty */
          :
            var bindView = def.flags & 33554432
            /* ComponentView */
            && binding.flags & 32
            /* SyntheticHostProperty */
            ? elData.componentView : view;
            setElementProperty(bindView, binding, renderNode, name, value);
            break;
        }

        return true;
      }

      function setElementAttribute$1(view, binding, renderNode, ns, name, value) {
        var securityContext = binding.securityContext;
        var renderValue = securityContext ? view.root.sanitizer.sanitize(securityContext, value) : value;
        renderValue = renderValue != null ? renderValue.toString() : null;
        var renderer = view.renderer;

        if (value != null) {
          renderer.setAttribute(renderNode, name, renderValue, ns);
        } else {
          renderer.removeAttribute(renderNode, name, ns);
        }
      }

      function setElementClass(view, renderNode, name, value) {
        var renderer = view.renderer;

        if (value) {
          renderer.addClass(renderNode, name);
        } else {
          renderer.removeClass(renderNode, name);
        }
      }

      function setElementStyle(view, binding, renderNode, name, value) {
        var renderValue = view.root.sanitizer.sanitize(SecurityContext.STYLE, value);

        if (renderValue != null) {
          renderValue = renderValue.toString();
          var unit = binding.suffix;

          if (unit != null) {
            renderValue = renderValue + unit;
          }
        } else {
          renderValue = null;
        }

        var renderer = view.renderer;

        if (renderValue != null) {
          renderer.setStyle(renderNode, name, renderValue);
        } else {
          renderer.removeStyle(renderNode, name);
        }
      }

      function setElementProperty(view, binding, renderNode, name, value) {
        var securityContext = binding.securityContext;
        var renderValue = securityContext ? view.root.sanitizer.sanitize(securityContext, value) : value;
        view.renderer.setProperty(renderNode, name, renderValue);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function queryDef(flags, id, bindings) {
        var bindingDefs = [];

        for (var propName in bindings) {
          var bindingType = bindings[propName];
          bindingDefs.push({
            propName: propName,
            bindingType: bindingType
          });
        }

        return {
          // will bet set by the view definition
          nodeIndex: -1,
          parent: null,
          renderParent: null,
          bindingIndex: -1,
          outputIndex: -1,
          // regular values
          // TODO(vicb): check
          checkIndex: -1,
          flags: flags,
          childFlags: 0,
          directChildFlags: 0,
          childMatchedQueries: 0,
          ngContentIndex: -1,
          matchedQueries: {},
          matchedQueryIds: 0,
          references: {},
          childCount: 0,
          bindings: [],
          bindingFlags: 0,
          outputs: [],
          element: null,
          provider: null,
          text: null,
          query: {
            id: id,
            filterId: filterQueryId(id),
            bindings: bindingDefs
          },
          ngContent: null
        };
      }

      function createQuery(emitDistinctChangesOnly) {
        return new QueryList(emitDistinctChangesOnly);
      }

      function dirtyParentQueries(view) {
        var queryIds = view.def.nodeMatchedQueries;

        while (view.parent && isEmbeddedView(view)) {
          var tplDef = view.parentNodeDef;
          view = view.parent; // content queries

          var end = tplDef.nodeIndex + tplDef.childCount;

          for (var i = 0; i <= end; i++) {
            var nodeDef = view.def.nodes[i];

            if (nodeDef.flags & 67108864
            /* TypeContentQuery */
            && nodeDef.flags & 536870912
            /* DynamicQuery */
            && (nodeDef.query.filterId & queryIds) === nodeDef.query.filterId) {
              asQueryList(view, i).setDirty();
            }

            if (nodeDef.flags & 1
            /* TypeElement */
            && i + nodeDef.childCount < tplDef.nodeIndex || !(nodeDef.childFlags & 67108864
            /* TypeContentQuery */
            ) || !(nodeDef.childFlags & 536870912
            /* DynamicQuery */
            )) {
              // skip elements that don't contain the template element or no query.
              i += nodeDef.childCount;
            }
          }
        } // view queries


        if (view.def.nodeFlags & 134217728
        /* TypeViewQuery */
        ) {
            for (var _i38 = 0; _i38 < view.def.nodes.length; _i38++) {
              var _nodeDef = view.def.nodes[_i38];

              if (_nodeDef.flags & 134217728
              /* TypeViewQuery */
              && _nodeDef.flags & 536870912
              /* DynamicQuery */
              ) {
                asQueryList(view, _i38).setDirty();
              } // only visit the root nodes


              _i38 += _nodeDef.childCount;
            }
          }
      }

      function checkAndUpdateQuery(view, nodeDef) {
        var queryList = asQueryList(view, nodeDef.nodeIndex);

        if (!queryList.dirty) {
          return;
        }

        var directiveInstance;
        var newValues = undefined;

        if (nodeDef.flags & 67108864
        /* TypeContentQuery */
        ) {
            var _elementDef = nodeDef.parent.parent;
            newValues = calcQueryValues(view, _elementDef.nodeIndex, _elementDef.nodeIndex + _elementDef.childCount, nodeDef.query, []);
            directiveInstance = asProviderData(view, nodeDef.parent.nodeIndex).instance;
          } else if (nodeDef.flags & 134217728
        /* TypeViewQuery */
        ) {
            newValues = calcQueryValues(view, 0, view.def.nodes.length - 1, nodeDef.query, []);
            directiveInstance = view.component;
          }

        queryList.reset(newValues, unwrapElementRef);
        var bindings = nodeDef.query.bindings;
        var notify = false;

        for (var i = 0; i < bindings.length; i++) {
          var binding = bindings[i];
          var boundValue = void 0;

          switch (binding.bindingType) {
            case 0
            /* First */
            :
              boundValue = queryList.first;
              break;

            case 1
            /* All */
            :
              boundValue = queryList;
              notify = true;
              break;
          }

          directiveInstance[binding.propName] = boundValue;
        }

        if (notify) {
          queryList.notifyOnChanges();
        }
      }

      function calcQueryValues(view, startIndex, endIndex, queryDef, values) {
        for (var i = startIndex; i <= endIndex; i++) {
          var nodeDef = view.def.nodes[i];
          var valueType = nodeDef.matchedQueries[queryDef.id];

          if (valueType != null) {
            values.push(getQueryValue(view, nodeDef, valueType));
          }

          if (nodeDef.flags & 1
          /* TypeElement */
          && nodeDef.element.template && (nodeDef.element.template.nodeMatchedQueries & queryDef.filterId) === queryDef.filterId) {
            var elementData = asElementData(view, i); // check embedded views that were attached at the place of their template,
            // but process child nodes first if some match the query (see issue #16568)

            if ((nodeDef.childMatchedQueries & queryDef.filterId) === queryDef.filterId) {
              calcQueryValues(view, i + 1, i + nodeDef.childCount, queryDef, values);
              i += nodeDef.childCount;
            }

            if (nodeDef.flags & 16777216
            /* EmbeddedViews */
            ) {
                var embeddedViews = elementData.viewContainer._embeddedViews;

                for (var k = 0; k < embeddedViews.length; k++) {
                  var embeddedView = embeddedViews[k];
                  var dvc = declaredViewContainer(embeddedView);

                  if (dvc && dvc === elementData) {
                    calcQueryValues(embeddedView, 0, embeddedView.def.nodes.length - 1, queryDef, values);
                  }
                }
              }

            var projectedViews = elementData.template._projectedViews;

            if (projectedViews) {
              for (var _k = 0; _k < projectedViews.length; _k++) {
                var projectedView = projectedViews[_k];
                calcQueryValues(projectedView, 0, projectedView.def.nodes.length - 1, queryDef, values);
              }
            }
          }

          if ((nodeDef.childMatchedQueries & queryDef.filterId) !== queryDef.filterId) {
            // if no child matches the query, skip the children.
            i += nodeDef.childCount;
          }
        }

        return values;
      }

      function getQueryValue(view, nodeDef, queryValueType) {
        if (queryValueType != null) {
          // a match
          switch (queryValueType) {
            case 1
            /* RenderElement */
            :
              return asElementData(view, nodeDef.nodeIndex).renderElement;

            case 0
            /* ElementRef */
            :
              return new ElementRef(asElementData(view, nodeDef.nodeIndex).renderElement);

            case 2
            /* TemplateRef */
            :
              return asElementData(view, nodeDef.nodeIndex).template;

            case 3
            /* ViewContainerRef */
            :
              return asElementData(view, nodeDef.nodeIndex).viewContainer;

            case 4
            /* Provider */
            :
              return asProviderData(view, nodeDef.nodeIndex).instance;
          }
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function ngContentDef(ngContentIndex, index) {
        return {
          // will bet set by the view definition
          nodeIndex: -1,
          parent: null,
          renderParent: null,
          bindingIndex: -1,
          outputIndex: -1,
          // regular values
          checkIndex: -1,
          flags: 8
          /* TypeNgContent */
          ,
          childFlags: 0,
          directChildFlags: 0,
          childMatchedQueries: 0,
          matchedQueries: {},
          matchedQueryIds: 0,
          references: {},
          ngContentIndex: ngContentIndex,
          childCount: 0,
          bindings: [],
          bindingFlags: 0,
          outputs: [],
          element: null,
          provider: null,
          text: null,
          query: null,
          ngContent: {
            index: index
          }
        };
      }

      function appendNgContent(view, renderHost, def) {
        var parentEl = getParentRenderElement(view, renderHost, def);

        if (!parentEl) {
          // Nothing to do if there is no parent element.
          return;
        }

        var ngContentIndex = def.ngContent.index;
        visitProjectedRenderNodes(view, ngContentIndex, 1
        /* AppendChild */
        , parentEl, null, undefined);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function purePipeDef(checkIndex, argCount) {
        // argCount + 1 to include the pipe as first arg
        return _pureExpressionDef(128
        /* TypePurePipe */
        , checkIndex, newArray(argCount + 1));
      }

      function pureArrayDef(checkIndex, argCount) {
        return _pureExpressionDef(32
        /* TypePureArray */
        , checkIndex, newArray(argCount));
      }

      function pureObjectDef(checkIndex, propToIndex) {
        var keys = Object.keys(propToIndex);
        var nbKeys = keys.length;
        var propertyNames = [];

        for (var i = 0; i < nbKeys; i++) {
          var key = keys[i];
          var index = propToIndex[key];
          propertyNames.push(key);
        }

        return _pureExpressionDef(64
        /* TypePureObject */
        , checkIndex, propertyNames);
      }

      function _pureExpressionDef(flags, checkIndex, propertyNames) {
        var bindings = [];

        for (var i = 0; i < propertyNames.length; i++) {
          var prop = propertyNames[i];
          bindings.push({
            flags: 8
            /* TypeProperty */
            ,
            name: prop,
            ns: null,
            nonMinifiedName: prop,
            securityContext: null,
            suffix: null
          });
        }

        return {
          // will bet set by the view definition
          nodeIndex: -1,
          parent: null,
          renderParent: null,
          bindingIndex: -1,
          outputIndex: -1,
          // regular values
          checkIndex: checkIndex,
          flags: flags,
          childFlags: 0,
          directChildFlags: 0,
          childMatchedQueries: 0,
          matchedQueries: {},
          matchedQueryIds: 0,
          references: {},
          ngContentIndex: -1,
          childCount: 0,
          bindings: bindings,
          bindingFlags: calcBindingFlags(bindings),
          outputs: [],
          element: null,
          provider: null,
          text: null,
          query: null,
          ngContent: null
        };
      }

      function createPureExpression(view, def) {
        return {
          value: undefined
        };
      }

      function checkAndUpdatePureExpressionInline(view, def, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
        var bindings = def.bindings;
        var changed = false;
        var bindLen = bindings.length;
        if (bindLen > 0 && checkAndUpdateBinding(view, def, 0, v0)) changed = true;
        if (bindLen > 1 && checkAndUpdateBinding(view, def, 1, v1)) changed = true;
        if (bindLen > 2 && checkAndUpdateBinding(view, def, 2, v2)) changed = true;
        if (bindLen > 3 && checkAndUpdateBinding(view, def, 3, v3)) changed = true;
        if (bindLen > 4 && checkAndUpdateBinding(view, def, 4, v4)) changed = true;
        if (bindLen > 5 && checkAndUpdateBinding(view, def, 5, v5)) changed = true;
        if (bindLen > 6 && checkAndUpdateBinding(view, def, 6, v6)) changed = true;
        if (bindLen > 7 && checkAndUpdateBinding(view, def, 7, v7)) changed = true;
        if (bindLen > 8 && checkAndUpdateBinding(view, def, 8, v8)) changed = true;
        if (bindLen > 9 && checkAndUpdateBinding(view, def, 9, v9)) changed = true;

        if (changed) {
          var data = asPureExpressionData(view, def.nodeIndex);
          var value;

          switch (def.flags & 201347067
          /* Types */
          ) {
            case 32
            /* TypePureArray */
            :
              value = [];
              if (bindLen > 0) value.push(v0);
              if (bindLen > 1) value.push(v1);
              if (bindLen > 2) value.push(v2);
              if (bindLen > 3) value.push(v3);
              if (bindLen > 4) value.push(v4);
              if (bindLen > 5) value.push(v5);
              if (bindLen > 6) value.push(v6);
              if (bindLen > 7) value.push(v7);
              if (bindLen > 8) value.push(v8);
              if (bindLen > 9) value.push(v9);
              break;

            case 64
            /* TypePureObject */
            :
              value = {};
              if (bindLen > 0) value[bindings[0].name] = v0;
              if (bindLen > 1) value[bindings[1].name] = v1;
              if (bindLen > 2) value[bindings[2].name] = v2;
              if (bindLen > 3) value[bindings[3].name] = v3;
              if (bindLen > 4) value[bindings[4].name] = v4;
              if (bindLen > 5) value[bindings[5].name] = v5;
              if (bindLen > 6) value[bindings[6].name] = v6;
              if (bindLen > 7) value[bindings[7].name] = v7;
              if (bindLen > 8) value[bindings[8].name] = v8;
              if (bindLen > 9) value[bindings[9].name] = v9;
              break;

            case 128
            /* TypePurePipe */
            :
              var pipe = v0;

              switch (bindLen) {
                case 1:
                  value = pipe.transform(v0);
                  break;

                case 2:
                  value = pipe.transform(v1);
                  break;

                case 3:
                  value = pipe.transform(v1, v2);
                  break;

                case 4:
                  value = pipe.transform(v1, v2, v3);
                  break;

                case 5:
                  value = pipe.transform(v1, v2, v3, v4);
                  break;

                case 6:
                  value = pipe.transform(v1, v2, v3, v4, v5);
                  break;

                case 7:
                  value = pipe.transform(v1, v2, v3, v4, v5, v6);
                  break;

                case 8:
                  value = pipe.transform(v1, v2, v3, v4, v5, v6, v7);
                  break;

                case 9:
                  value = pipe.transform(v1, v2, v3, v4, v5, v6, v7, v8);
                  break;

                case 10:
                  value = pipe.transform(v1, v2, v3, v4, v5, v6, v7, v8, v9);
                  break;
              }

              break;
          }

          data.value = value;
        }

        return changed;
      }

      function checkAndUpdatePureExpressionDynamic(view, def, values) {
        var bindings = def.bindings;
        var changed = false;

        for (var i = 0; i < values.length; i++) {
          // Note: We need to loop over all values, so that
          // the old values are updates as well!
          if (checkAndUpdateBinding(view, def, i, values[i])) {
            changed = true;
          }
        }

        if (changed) {
          var data = asPureExpressionData(view, def.nodeIndex);
          var value;

          switch (def.flags & 201347067
          /* Types */
          ) {
            case 32
            /* TypePureArray */
            :
              value = values;
              break;

            case 64
            /* TypePureObject */
            :
              value = {};

              for (var _i39 = 0; _i39 < values.length; _i39++) {
                value[bindings[_i39].name] = values[_i39];
              }

              break;

            case 128
            /* TypePurePipe */
            :
              var pipe = values[0];
              var params = values.slice(1);
              value = pipe.transform.apply(pipe, _toConsumableArray(params));
              break;
          }

          data.value = value;
        }

        return changed;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function textDef(checkIndex, ngContentIndex, staticText) {
        var bindings = [];

        for (var i = 1; i < staticText.length; i++) {
          bindings[i - 1] = {
            flags: 8
            /* TypeProperty */
            ,
            name: null,
            ns: null,
            nonMinifiedName: null,
            securityContext: null,
            suffix: staticText[i]
          };
        }

        return {
          // will bet set by the view definition
          nodeIndex: -1,
          parent: null,
          renderParent: null,
          bindingIndex: -1,
          outputIndex: -1,
          // regular values
          checkIndex: checkIndex,
          flags: 2
          /* TypeText */
          ,
          childFlags: 0,
          directChildFlags: 0,
          childMatchedQueries: 0,
          matchedQueries: {},
          matchedQueryIds: 0,
          references: {},
          ngContentIndex: ngContentIndex,
          childCount: 0,
          bindings: bindings,
          bindingFlags: 8
          /* TypeProperty */
          ,
          outputs: [],
          element: null,
          provider: null,
          text: {
            prefix: staticText[0]
          },
          query: null,
          ngContent: null
        };
      }

      function createText(view, renderHost, def) {
        var renderNode;
        var renderer = view.renderer;
        renderNode = renderer.createText(def.text.prefix);
        var parentEl = getParentRenderElement(view, renderHost, def);

        if (parentEl) {
          renderer.appendChild(parentEl, renderNode);
        }

        return {
          renderText: renderNode
        };
      }

      function checkAndUpdateTextInline(view, def, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
        var changed = false;
        var bindings = def.bindings;
        var bindLen = bindings.length;
        if (bindLen > 0 && checkAndUpdateBinding(view, def, 0, v0)) changed = true;
        if (bindLen > 1 && checkAndUpdateBinding(view, def, 1, v1)) changed = true;
        if (bindLen > 2 && checkAndUpdateBinding(view, def, 2, v2)) changed = true;
        if (bindLen > 3 && checkAndUpdateBinding(view, def, 3, v3)) changed = true;
        if (bindLen > 4 && checkAndUpdateBinding(view, def, 4, v4)) changed = true;
        if (bindLen > 5 && checkAndUpdateBinding(view, def, 5, v5)) changed = true;
        if (bindLen > 6 && checkAndUpdateBinding(view, def, 6, v6)) changed = true;
        if (bindLen > 7 && checkAndUpdateBinding(view, def, 7, v7)) changed = true;
        if (bindLen > 8 && checkAndUpdateBinding(view, def, 8, v8)) changed = true;
        if (bindLen > 9 && checkAndUpdateBinding(view, def, 9, v9)) changed = true;

        if (changed) {
          var value = def.text.prefix;
          if (bindLen > 0) value += _addInterpolationPart(v0, bindings[0]);
          if (bindLen > 1) value += _addInterpolationPart(v1, bindings[1]);
          if (bindLen > 2) value += _addInterpolationPart(v2, bindings[2]);
          if (bindLen > 3) value += _addInterpolationPart(v3, bindings[3]);
          if (bindLen > 4) value += _addInterpolationPart(v4, bindings[4]);
          if (bindLen > 5) value += _addInterpolationPart(v5, bindings[5]);
          if (bindLen > 6) value += _addInterpolationPart(v6, bindings[6]);
          if (bindLen > 7) value += _addInterpolationPart(v7, bindings[7]);
          if (bindLen > 8) value += _addInterpolationPart(v8, bindings[8]);
          if (bindLen > 9) value += _addInterpolationPart(v9, bindings[9]);
          var _renderNode = asTextData(view, def.nodeIndex).renderText;
          view.renderer.setValue(_renderNode, value);
        }

        return changed;
      }

      function checkAndUpdateTextDynamic(view, def, values) {
        var bindings = def.bindings;
        var changed = false;

        for (var i = 0; i < values.length; i++) {
          // Note: We need to loop over all values, so that
          // the old values are updates as well!
          if (checkAndUpdateBinding(view, def, i, values[i])) {
            changed = true;
          }
        }

        if (changed) {
          var value = '';

          for (var _i40 = 0; _i40 < values.length; _i40++) {
            value = value + _addInterpolationPart(values[_i40], bindings[_i40]);
          }

          value = def.text.prefix + value;
          var _renderNode2 = asTextData(view, def.nodeIndex).renderText;
          view.renderer.setValue(_renderNode2, value);
        }

        return changed;
      }

      function _addInterpolationPart(value, binding) {
        var valueStr = value != null ? value.toString() : '';
        return valueStr + binding.suffix;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function viewDef(flags, nodes, updateDirectives, updateRenderer) {
        // clone nodes and set auto calculated values
        var viewBindingCount = 0;
        var viewDisposableCount = 0;
        var viewNodeFlags = 0;
        var viewRootNodeFlags = 0;
        var viewMatchedQueries = 0;
        var currentParent = null;
        var currentRenderParent = null;
        var currentElementHasPublicProviders = false;
        var currentElementHasPrivateProviders = false;
        var lastRenderRootNode = null;

        for (var i = 0; i < nodes.length; i++) {
          var node = nodes[i];
          node.nodeIndex = i;
          node.parent = currentParent;
          node.bindingIndex = viewBindingCount;
          node.outputIndex = viewDisposableCount;
          node.renderParent = currentRenderParent;
          viewNodeFlags |= node.flags;
          viewMatchedQueries |= node.matchedQueryIds;

          if (node.element) {
            var elDef = node.element;
            elDef.publicProviders = currentParent ? currentParent.element.publicProviders : Object.create(null);
            elDef.allProviders = elDef.publicProviders; // Note: We assume that all providers of an element are before any child element!

            currentElementHasPublicProviders = false;
            currentElementHasPrivateProviders = false;

            if (node.element.template) {
              viewMatchedQueries |= node.element.template.nodeMatchedQueries;
            }
          }

          validateNode(currentParent, node, nodes.length);
          viewBindingCount += node.bindings.length;
          viewDisposableCount += node.outputs.length;

          if (!currentRenderParent && node.flags & 3
          /* CatRenderNode */
          ) {
            lastRenderRootNode = node;
          }

          if (node.flags & 20224
          /* CatProvider */
          ) {
              if (!currentElementHasPublicProviders) {
                currentElementHasPublicProviders = true; // Use prototypical inheritance to not get O(n^2) complexity...

                currentParent.element.publicProviders = Object.create(currentParent.element.publicProviders);
                currentParent.element.allProviders = currentParent.element.publicProviders;
              }

              var isPrivateService = (node.flags & 8192
              /* PrivateProvider */
              ) !== 0;
              var isComponent = (node.flags & 32768
              /* Component */
              ) !== 0;

              if (!isPrivateService || isComponent) {
                currentParent.element.publicProviders[tokenKey(node.provider.token)] = node;
              } else {
                if (!currentElementHasPrivateProviders) {
                  currentElementHasPrivateProviders = true; // Use prototypical inheritance to not get O(n^2) complexity...

                  currentParent.element.allProviders = Object.create(currentParent.element.publicProviders);
                }

                currentParent.element.allProviders[tokenKey(node.provider.token)] = node;
              }

              if (isComponent) {
                currentParent.element.componentProvider = node;
              }
            }

          if (currentParent) {
            currentParent.childFlags |= node.flags;
            currentParent.directChildFlags |= node.flags;
            currentParent.childMatchedQueries |= node.matchedQueryIds;

            if (node.element && node.element.template) {
              currentParent.childMatchedQueries |= node.element.template.nodeMatchedQueries;
            }
          } else {
            viewRootNodeFlags |= node.flags;
          }

          if (node.childCount > 0) {
            currentParent = node;

            if (!isNgContainer(node)) {
              currentRenderParent = node;
            }
          } else {
            // When the current node has no children, check if it is the last children of its parent.
            // When it is, propagate the flags up.
            // The loop is required because an element could be the last transitive children of several
            // elements. We loop to either the root or the highest opened element (= with remaining
            // children)
            while (currentParent && i === currentParent.nodeIndex + currentParent.childCount) {
              var newParent = currentParent.parent;

              if (newParent) {
                newParent.childFlags |= currentParent.childFlags;
                newParent.childMatchedQueries |= currentParent.childMatchedQueries;
              }

              currentParent = newParent; // We also need to update the render parent & account for ng-container

              if (currentParent && isNgContainer(currentParent)) {
                currentRenderParent = currentParent.renderParent;
              } else {
                currentRenderParent = currentParent;
              }
            }
          }
        }

        var handleEvent = function handleEvent(view, nodeIndex, eventName, event) {
          return nodes[nodeIndex].element.handleEvent(view, eventName, event);
        };

        return {
          // Will be filled later...
          factory: null,
          nodeFlags: viewNodeFlags,
          rootNodeFlags: viewRootNodeFlags,
          nodeMatchedQueries: viewMatchedQueries,
          flags: flags,
          nodes: nodes,
          updateDirectives: updateDirectives || NOOP,
          updateRenderer: updateRenderer || NOOP,
          handleEvent: handleEvent,
          bindingCount: viewBindingCount,
          outputCount: viewDisposableCount,
          lastRenderRootNode: lastRenderRootNode
        };
      }

      function isNgContainer(node) {
        return (node.flags & 1
        /* TypeElement */
        ) !== 0 && node.element.name === null;
      }

      function validateNode(parent, node, nodeCount) {
        var template = node.element && node.element.template;

        if (template) {
          if (!template.lastRenderRootNode) {
            throw new Error("Illegal State: Embedded templates without nodes are not allowed!");
          }

          if (template.lastRenderRootNode && template.lastRenderRootNode.flags & 16777216
          /* EmbeddedViews */
          ) {
              throw new Error("Illegal State: Last root node of a template can't have embedded views, at index ".concat(node.nodeIndex, "!"));
            }
        }

        if (node.flags & 20224
        /* CatProvider */
        ) {
            var parentFlags = parent ? parent.flags : 0;

            if ((parentFlags & 1
            /* TypeElement */
            ) === 0) {
              throw new Error("Illegal State: StaticProvider/Directive nodes need to be children of elements or anchors, at index ".concat(node.nodeIndex, "!"));
            }
          }

        if (node.query) {
          if (node.flags & 67108864
          /* TypeContentQuery */
          && (!parent || (parent.flags & 16384
          /* TypeDirective */
          ) === 0)) {
            throw new Error("Illegal State: Content Query nodes need to be children of directives, at index ".concat(node.nodeIndex, "!"));
          }

          if (node.flags & 134217728
          /* TypeViewQuery */
          && parent) {
            throw new Error("Illegal State: View Query nodes have to be top level nodes, at index ".concat(node.nodeIndex, "!"));
          }
        }

        if (node.childCount) {
          var parentEnd = parent ? parent.nodeIndex + parent.childCount : nodeCount - 1;

          if (node.nodeIndex <= parentEnd && node.nodeIndex + node.childCount > parentEnd) {
            throw new Error("Illegal State: childCount of node leads outside of parent, at index ".concat(node.nodeIndex, "!"));
          }
        }
      }

      function createEmbeddedView(parent, anchorDef, viewDef, context) {
        // embedded views are seen as siblings to the anchor, so we need
        // to get the parent of the anchor and use it as parentIndex.
        var view = createView(parent.root, parent.renderer, parent, anchorDef, viewDef);
        initView(view, parent.component, context);
        createViewNodes(view);
        return view;
      }

      function createRootView(root, def, context) {
        var view = createView(root, root.renderer, null, null, def);
        initView(view, context, context);
        createViewNodes(view);
        return view;
      }

      function createComponentView(parentView, nodeDef, viewDef, hostElement) {
        var rendererType = nodeDef.element.componentRendererType;
        var compRenderer;

        if (!rendererType) {
          compRenderer = parentView.root.renderer;
        } else {
          compRenderer = parentView.root.rendererFactory.createRenderer(hostElement, rendererType);
        }

        return createView(parentView.root, compRenderer, parentView, nodeDef.element.componentProvider, viewDef);
      }

      function createView(root, renderer, parent, parentNodeDef, def) {
        var nodes = new Array(def.nodes.length);
        var disposables = def.outputCount ? new Array(def.outputCount) : null;
        var view = {
          def: def,
          parent: parent,
          viewContainerParent: null,
          parentNodeDef: parentNodeDef,
          context: null,
          component: null,
          nodes: nodes,
          state: 13
          /* CatInit */
          ,
          root: root,
          renderer: renderer,
          oldValues: new Array(def.bindingCount),
          disposables: disposables,
          initIndex: -1
        };
        return view;
      }

      function initView(view, component, context) {
        view.component = component;
        view.context = context;
      }

      function createViewNodes(view) {
        var renderHost;

        if (isComponentView(view)) {
          var hostDef = view.parentNodeDef;
          renderHost = asElementData(view.parent, hostDef.parent.nodeIndex).renderElement;
        }

        var def = view.def;
        var nodes = view.nodes;

        for (var i = 0; i < def.nodes.length; i++) {
          var nodeDef = def.nodes[i];
          Services.setCurrentNode(view, i);
          var nodeData = void 0;

          switch (nodeDef.flags & 201347067
          /* Types */
          ) {
            case 1
            /* TypeElement */
            :
              var el = createElement(view, renderHost, nodeDef);
              var componentView = undefined;

              if (nodeDef.flags & 33554432
              /* ComponentView */
              ) {
                  var compViewDef = resolveDefinition(nodeDef.element.componentView);
                  componentView = Services.createComponentView(view, nodeDef, compViewDef, el);
                }

              listenToElementOutputs(view, componentView, nodeDef, el);
              nodeData = {
                renderElement: el,
                componentView: componentView,
                viewContainer: null,
                template: nodeDef.element.template ? createTemplateData(view, nodeDef) : undefined
              };

              if (nodeDef.flags & 16777216
              /* EmbeddedViews */
              ) {
                  nodeData.viewContainer = createViewContainerData(view, nodeDef, nodeData);
                }

              break;

            case 2
            /* TypeText */
            :
              nodeData = createText(view, renderHost, nodeDef);
              break;

            case 512
            /* TypeClassProvider */
            :
            case 1024
            /* TypeFactoryProvider */
            :
            case 2048
            /* TypeUseExistingProvider */
            :
            case 256
            /* TypeValueProvider */
            :
              {
                nodeData = nodes[i];

                if (!nodeData && !(nodeDef.flags & 4096
                /* LazyProvider */
                )) {
                  var instance = createProviderInstance(view, nodeDef);
                  nodeData = {
                    instance: instance
                  };
                }

                break;
              }

            case 16
            /* TypePipe */
            :
              {
                var _instance = createPipeInstance(view, nodeDef);

                nodeData = {
                  instance: _instance
                };
                break;
              }

            case 16384
            /* TypeDirective */
            :
              {
                nodeData = nodes[i];

                if (!nodeData) {
                  var _instance2 = createDirectiveInstance(view, nodeDef);

                  nodeData = {
                    instance: _instance2
                  };
                }

                if (nodeDef.flags & 32768
                /* Component */
                ) {
                    var compView = asElementData(view, nodeDef.parent.nodeIndex).componentView;
                    initView(compView, nodeData.instance, nodeData.instance);
                  }

                break;
              }

            case 32
            /* TypePureArray */
            :
            case 64
            /* TypePureObject */
            :
            case 128
            /* TypePurePipe */
            :
              nodeData = createPureExpression(view, nodeDef);
              break;

            case 67108864
            /* TypeContentQuery */
            :
            case 134217728
            /* TypeViewQuery */
            :
              nodeData = createQuery((nodeDef.flags & -2147483648
              /* EmitDistinctChangesOnly */
              ) === -2147483648
              /* EmitDistinctChangesOnly */
              );
              break;

            case 8
            /* TypeNgContent */
            :
              appendNgContent(view, renderHost, nodeDef); // no runtime data needed for NgContent...

              nodeData = undefined;
              break;
          }

          nodes[i] = nodeData;
        } // Create the ViewData.nodes of component views after we created everything else,
        // so that e.g. ng-content works


        execComponentViewsAction(view, ViewAction.CreateViewNodes); // fill static content and view queries

        execQueriesAction(view, 67108864
        /* TypeContentQuery */
        | 134217728
        /* TypeViewQuery */
        , 268435456
        /* StaticQuery */
        , 0
        /* CheckAndUpdate */
        );
      }

      function checkNoChangesView(view) {
        markProjectedViewsForCheck(view);
        Services.updateDirectives(view, 1
        /* CheckNoChanges */
        );
        execEmbeddedViewsAction(view, ViewAction.CheckNoChanges);
        Services.updateRenderer(view, 1
        /* CheckNoChanges */
        );
        execComponentViewsAction(view, ViewAction.CheckNoChanges); // Note: We don't check queries for changes as we didn't do this in v2.x.
        // TODO(tbosch): investigate if we can enable the check again in v5.x with a nicer error message.

        view.state &= ~(64
        /* CheckProjectedViews */
        | 32
        /* CheckProjectedView */
        );
      }

      function checkAndUpdateView(view) {
        if (view.state & 1
        /* BeforeFirstCheck */
        ) {
            view.state &= ~1
            /* BeforeFirstCheck */
            ;
            view.state |= 2
            /* FirstCheck */
            ;
          } else {
          view.state &= ~2
          /* FirstCheck */
          ;
        }

        shiftInitState(view, 0
        /* InitState_BeforeInit */
        , 256
        /* InitState_CallingOnInit */
        );
        markProjectedViewsForCheck(view);
        Services.updateDirectives(view, 0
        /* CheckAndUpdate */
        );
        execEmbeddedViewsAction(view, ViewAction.CheckAndUpdate);
        execQueriesAction(view, 67108864
        /* TypeContentQuery */
        , 536870912
        /* DynamicQuery */
        , 0
        /* CheckAndUpdate */
        );
        var callInit = shiftInitState(view, 256
        /* InitState_CallingOnInit */
        , 512
        /* InitState_CallingAfterContentInit */
        );
        callLifecycleHooksChildrenFirst(view, 2097152
        /* AfterContentChecked */
        | (callInit ? 1048576
        /* AfterContentInit */
        : 0));
        Services.updateRenderer(view, 0
        /* CheckAndUpdate */
        );
        execComponentViewsAction(view, ViewAction.CheckAndUpdate);
        execQueriesAction(view, 134217728
        /* TypeViewQuery */
        , 536870912
        /* DynamicQuery */
        , 0
        /* CheckAndUpdate */
        );
        callInit = shiftInitState(view, 512
        /* InitState_CallingAfterContentInit */
        , 768
        /* InitState_CallingAfterViewInit */
        );
        callLifecycleHooksChildrenFirst(view, 8388608
        /* AfterViewChecked */
        | (callInit ? 4194304
        /* AfterViewInit */
        : 0));

        if (view.def.flags & 2
        /* OnPush */
        ) {
            view.state &= ~8
            /* ChecksEnabled */
            ;
          }

        view.state &= ~(64
        /* CheckProjectedViews */
        | 32
        /* CheckProjectedView */
        );
        shiftInitState(view, 768
        /* InitState_CallingAfterViewInit */
        , 1024
        /* InitState_AfterInit */
        );
      }

      function checkAndUpdateNode(view, nodeDef, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
        if (argStyle === 0
        /* Inline */
        ) {
            return checkAndUpdateNodeInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
          } else {
          return checkAndUpdateNodeDynamic(view, nodeDef, v0);
        }
      }

      function markProjectedViewsForCheck(view) {
        var def = view.def;

        if (!(def.nodeFlags & 4
        /* ProjectedTemplate */
        )) {
          return;
        }

        for (var i = 0; i < def.nodes.length; i++) {
          var nodeDef = def.nodes[i];

          if (nodeDef.flags & 4
          /* ProjectedTemplate */
          ) {
              var projectedViews = asElementData(view, i).template._projectedViews;

              if (projectedViews) {
                for (var _i41 = 0; _i41 < projectedViews.length; _i41++) {
                  var projectedView = projectedViews[_i41];
                  projectedView.state |= 32
                  /* CheckProjectedView */
                  ;
                  markParentViewsForCheckProjectedViews(projectedView, view);
                }
              }
            } else if ((nodeDef.childFlags & 4
          /* ProjectedTemplate */
          ) === 0) {
            // a parent with leafs
            // no child is a component,
            // then skip the children
            i += nodeDef.childCount;
          }
        }
      }

      function checkAndUpdateNodeInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
        switch (nodeDef.flags & 201347067
        /* Types */
        ) {
          case 1
          /* TypeElement */
          :
            return checkAndUpdateElementInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);

          case 2
          /* TypeText */
          :
            return checkAndUpdateTextInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);

          case 16384
          /* TypeDirective */
          :
            return checkAndUpdateDirectiveInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);

          case 32
          /* TypePureArray */
          :
          case 64
          /* TypePureObject */
          :
          case 128
          /* TypePurePipe */
          :
            return checkAndUpdatePureExpressionInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);

          default:
            throw 'unreachable';
        }
      }

      function checkAndUpdateNodeDynamic(view, nodeDef, values) {
        switch (nodeDef.flags & 201347067
        /* Types */
        ) {
          case 1
          /* TypeElement */
          :
            return checkAndUpdateElementDynamic(view, nodeDef, values);

          case 2
          /* TypeText */
          :
            return checkAndUpdateTextDynamic(view, nodeDef, values);

          case 16384
          /* TypeDirective */
          :
            return checkAndUpdateDirectiveDynamic(view, nodeDef, values);

          case 32
          /* TypePureArray */
          :
          case 64
          /* TypePureObject */
          :
          case 128
          /* TypePurePipe */
          :
            return checkAndUpdatePureExpressionDynamic(view, nodeDef, values);

          default:
            throw 'unreachable';
        }
      }

      function checkNoChangesNode(view, nodeDef, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
        if (argStyle === 0
        /* Inline */
        ) {
            checkNoChangesNodeInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
          } else {
          checkNoChangesNodeDynamic(view, nodeDef, v0);
        } // Returning false is ok here as we would have thrown in case of a change.


        return false;
      }

      function checkNoChangesNodeInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
        var bindLen = nodeDef.bindings.length;
        if (bindLen > 0) checkBindingNoChanges(view, nodeDef, 0, v0);
        if (bindLen > 1) checkBindingNoChanges(view, nodeDef, 1, v1);
        if (bindLen > 2) checkBindingNoChanges(view, nodeDef, 2, v2);
        if (bindLen > 3) checkBindingNoChanges(view, nodeDef, 3, v3);
        if (bindLen > 4) checkBindingNoChanges(view, nodeDef, 4, v4);
        if (bindLen > 5) checkBindingNoChanges(view, nodeDef, 5, v5);
        if (bindLen > 6) checkBindingNoChanges(view, nodeDef, 6, v6);
        if (bindLen > 7) checkBindingNoChanges(view, nodeDef, 7, v7);
        if (bindLen > 8) checkBindingNoChanges(view, nodeDef, 8, v8);
        if (bindLen > 9) checkBindingNoChanges(view, nodeDef, 9, v9);
      }

      function checkNoChangesNodeDynamic(view, nodeDef, values) {
        for (var i = 0; i < values.length; i++) {
          checkBindingNoChanges(view, nodeDef, i, values[i]);
        }
      }
      /**
       * Workaround https://github.com/angular/tsickle/issues/497
       * @suppress {misplacedTypeAnnotation}
       */


      function checkNoChangesQuery(view, nodeDef) {
        var queryList = asQueryList(view, nodeDef.nodeIndex);

        if (queryList.dirty) {
          throw expressionChangedAfterItHasBeenCheckedError(Services.createDebugContext(view, nodeDef.nodeIndex), "Query ".concat(nodeDef.query.id, " not dirty"), "Query ".concat(nodeDef.query.id, " dirty"), (view.state & 1
          /* BeforeFirstCheck */
          ) !== 0);
        }
      }

      function destroyView(view) {
        if (view.state & 128
        /* Destroyed */
        ) {
            return;
          }

        execEmbeddedViewsAction(view, ViewAction.Destroy);
        execComponentViewsAction(view, ViewAction.Destroy);
        callLifecycleHooksChildrenFirst(view, 131072
        /* OnDestroy */
        );

        if (view.disposables) {
          for (var i = 0; i < view.disposables.length; i++) {
            view.disposables[i]();
          }
        }

        detachProjectedView(view);

        if (view.renderer.destroyNode) {
          destroyViewNodes(view);
        }

        if (isComponentView(view)) {
          view.renderer.destroy();
        }

        view.state |= 128
        /* Destroyed */
        ;
      }

      function destroyViewNodes(view) {
        var len = view.def.nodes.length;

        for (var i = 0; i < len; i++) {
          var def = view.def.nodes[i];

          if (def.flags & 1
          /* TypeElement */
          ) {
              view.renderer.destroyNode(asElementData(view, i).renderElement);
            } else if (def.flags & 2
          /* TypeText */
          ) {
              view.renderer.destroyNode(asTextData(view, i).renderText);
            } else if (def.flags & 67108864
          /* TypeContentQuery */
          || def.flags & 134217728
          /* TypeViewQuery */
          ) {
              asQueryList(view, i).destroy();
            }
        }
      }

      var ViewAction;

      (function (ViewAction) {
        ViewAction[ViewAction["CreateViewNodes"] = 0] = "CreateViewNodes";
        ViewAction[ViewAction["CheckNoChanges"] = 1] = "CheckNoChanges";
        ViewAction[ViewAction["CheckNoChangesProjectedViews"] = 2] = "CheckNoChangesProjectedViews";
        ViewAction[ViewAction["CheckAndUpdate"] = 3] = "CheckAndUpdate";
        ViewAction[ViewAction["CheckAndUpdateProjectedViews"] = 4] = "CheckAndUpdateProjectedViews";
        ViewAction[ViewAction["Destroy"] = 5] = "Destroy";
      })(ViewAction || (ViewAction = {}));

      function execComponentViewsAction(view, action) {
        var def = view.def;

        if (!(def.nodeFlags & 33554432
        /* ComponentView */
        )) {
          return;
        }

        for (var i = 0; i < def.nodes.length; i++) {
          var nodeDef = def.nodes[i];

          if (nodeDef.flags & 33554432
          /* ComponentView */
          ) {
              // a leaf
              callViewAction(asElementData(view, i).componentView, action);
            } else if ((nodeDef.childFlags & 33554432
          /* ComponentView */
          ) === 0) {
            // a parent with leafs
            // no child is a component,
            // then skip the children
            i += nodeDef.childCount;
          }
        }
      }

      function execEmbeddedViewsAction(view, action) {
        var def = view.def;

        if (!(def.nodeFlags & 16777216
        /* EmbeddedViews */
        )) {
          return;
        }

        for (var i = 0; i < def.nodes.length; i++) {
          var nodeDef = def.nodes[i];

          if (nodeDef.flags & 16777216
          /* EmbeddedViews */
          ) {
              // a leaf
              var embeddedViews = asElementData(view, i).viewContainer._embeddedViews;

              for (var k = 0; k < embeddedViews.length; k++) {
                callViewAction(embeddedViews[k], action);
              }
            } else if ((nodeDef.childFlags & 16777216
          /* EmbeddedViews */
          ) === 0) {
            // a parent with leafs
            // no child is a component,
            // then skip the children
            i += nodeDef.childCount;
          }
        }
      }

      function callViewAction(view, action) {
        var viewState = view.state;

        switch (action) {
          case ViewAction.CheckNoChanges:
            if ((viewState & 128
            /* Destroyed */
            ) === 0) {
              if ((viewState & 12
              /* CatDetectChanges */
              ) === 12
              /* CatDetectChanges */
              ) {
                  checkNoChangesView(view);
                } else if (viewState & 64
              /* CheckProjectedViews */
              ) {
                  execProjectedViewsAction(view, ViewAction.CheckNoChangesProjectedViews);
                }
            }

            break;

          case ViewAction.CheckNoChangesProjectedViews:
            if ((viewState & 128
            /* Destroyed */
            ) === 0) {
              if (viewState & 32
              /* CheckProjectedView */
              ) {
                  checkNoChangesView(view);
                } else if (viewState & 64
              /* CheckProjectedViews */
              ) {
                  execProjectedViewsAction(view, action);
                }
            }

            break;

          case ViewAction.CheckAndUpdate:
            if ((viewState & 128
            /* Destroyed */
            ) === 0) {
              if ((viewState & 12
              /* CatDetectChanges */
              ) === 12
              /* CatDetectChanges */
              ) {
                  checkAndUpdateView(view);
                } else if (viewState & 64
              /* CheckProjectedViews */
              ) {
                  execProjectedViewsAction(view, ViewAction.CheckAndUpdateProjectedViews);
                }
            }

            break;

          case ViewAction.CheckAndUpdateProjectedViews:
            if ((viewState & 128
            /* Destroyed */
            ) === 0) {
              if (viewState & 32
              /* CheckProjectedView */
              ) {
                  checkAndUpdateView(view);
                } else if (viewState & 64
              /* CheckProjectedViews */
              ) {
                  execProjectedViewsAction(view, action);
                }
            }

            break;

          case ViewAction.Destroy:
            // Note: destroyView recurses over all views,
            // so we don't need to special case projected views here.
            destroyView(view);
            break;

          case ViewAction.CreateViewNodes:
            createViewNodes(view);
            break;
        }
      }

      function execProjectedViewsAction(view, action) {
        execEmbeddedViewsAction(view, action);
        execComponentViewsAction(view, action);
      }

      function execQueriesAction(view, queryFlags, staticDynamicQueryFlag, checkType) {
        if (!(view.def.nodeFlags & queryFlags) || !(view.def.nodeFlags & staticDynamicQueryFlag)) {
          return;
        }

        var nodeCount = view.def.nodes.length;

        for (var i = 0; i < nodeCount; i++) {
          var nodeDef = view.def.nodes[i];

          if (nodeDef.flags & queryFlags && nodeDef.flags & staticDynamicQueryFlag) {
            Services.setCurrentNode(view, nodeDef.nodeIndex);

            switch (checkType) {
              case 0
              /* CheckAndUpdate */
              :
                checkAndUpdateQuery(view, nodeDef);
                break;

              case 1
              /* CheckNoChanges */
              :
                checkNoChangesQuery(view, nodeDef);
                break;
            }
          }

          if (!(nodeDef.childFlags & queryFlags) || !(nodeDef.childFlags & staticDynamicQueryFlag)) {
            // no child has a matching query
            // then skip the children
            i += nodeDef.childCount;
          }
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var initialized = false;

      function initServicesIfNeeded() {
        if (initialized) {
          return;
        }

        initialized = true;
        var services = isDevMode() ? createDebugServices() : createProdServices();
        Services.setCurrentNode = services.setCurrentNode;
        Services.createRootView = services.createRootView;
        Services.createEmbeddedView = services.createEmbeddedView;
        Services.createComponentView = services.createComponentView;
        Services.createNgModuleRef = services.createNgModuleRef;
        Services.overrideProvider = services.overrideProvider;
        Services.overrideComponentView = services.overrideComponentView;
        Services.clearOverrides = services.clearOverrides;
        Services.checkAndUpdateView = services.checkAndUpdateView;
        Services.checkNoChangesView = services.checkNoChangesView;
        Services.destroyView = services.destroyView;
        Services.resolveDep = resolveDep;
        Services.createDebugContext = services.createDebugContext;
        Services.handleEvent = services.handleEvent;
        Services.updateDirectives = services.updateDirectives;
        Services.updateRenderer = services.updateRenderer;
        Services.dirtyParentQueries = dirtyParentQueries;
      }

      function createProdServices() {
        return {
          setCurrentNode: function setCurrentNode() {},
          createRootView: createProdRootView,
          createEmbeddedView: createEmbeddedView,
          createComponentView: createComponentView,
          createNgModuleRef: createNgModuleRef,
          overrideProvider: NOOP,
          overrideComponentView: NOOP,
          clearOverrides: NOOP,
          checkAndUpdateView: checkAndUpdateView,
          checkNoChangesView: checkNoChangesView,
          destroyView: destroyView,
          createDebugContext: function createDebugContext(view, nodeIndex) {
            return new DebugContext_(view, nodeIndex);
          },
          handleEvent: function handleEvent(view, nodeIndex, eventName, event) {
            return view.def.handleEvent(view, nodeIndex, eventName, event);
          },
          updateDirectives: function updateDirectives(view, checkType) {
            return view.def.updateDirectives(checkType === 0
            /* CheckAndUpdate */
            ? prodCheckAndUpdateNode : prodCheckNoChangesNode, view);
          },
          updateRenderer: function updateRenderer(view, checkType) {
            return view.def.updateRenderer(checkType === 0
            /* CheckAndUpdate */
            ? prodCheckAndUpdateNode : prodCheckNoChangesNode, view);
          }
        };
      }

      function createDebugServices() {
        return {
          setCurrentNode: debugSetCurrentNode,
          createRootView: debugCreateRootView,
          createEmbeddedView: debugCreateEmbeddedView,
          createComponentView: debugCreateComponentView,
          createNgModuleRef: debugCreateNgModuleRef,
          overrideProvider: debugOverrideProvider,
          overrideComponentView: debugOverrideComponentView,
          clearOverrides: debugClearOverrides,
          checkAndUpdateView: debugCheckAndUpdateView,
          checkNoChangesView: debugCheckNoChangesView,
          destroyView: debugDestroyView,
          createDebugContext: function createDebugContext(view, nodeIndex) {
            return new DebugContext_(view, nodeIndex);
          },
          handleEvent: debugHandleEvent,
          updateDirectives: debugUpdateDirectives,
          updateRenderer: debugUpdateRenderer
        };
      }

      function createProdRootView(elInjector, projectableNodes, rootSelectorOrNode, def, ngModule, context) {
        var rendererFactory = ngModule.injector.get(RendererFactory2);
        return createRootView(createRootData(elInjector, ngModule, rendererFactory, projectableNodes, rootSelectorOrNode), def, context);
      }

      function debugCreateRootView(elInjector, projectableNodes, rootSelectorOrNode, def, ngModule, context) {
        var rendererFactory = ngModule.injector.get(RendererFactory2);
        var root = createRootData(elInjector, ngModule, new DebugRendererFactory2(rendererFactory), projectableNodes, rootSelectorOrNode);
        var defWithOverride = applyProviderOverridesToView(def);
        return callWithDebugContext(DebugAction.create, createRootView, null, [root, defWithOverride, context]);
      }

      function createRootData(elInjector, ngModule, rendererFactory, projectableNodes, rootSelectorOrNode) {
        var sanitizer = ngModule.injector.get(Sanitizer);
        var errorHandler = ngModule.injector.get(ErrorHandler);
        var renderer = rendererFactory.createRenderer(null, null);
        return {
          ngModule: ngModule,
          injector: elInjector,
          projectableNodes: projectableNodes,
          selectorOrNode: rootSelectorOrNode,
          sanitizer: sanitizer,
          rendererFactory: rendererFactory,
          renderer: renderer,
          errorHandler: errorHandler
        };
      }

      function debugCreateEmbeddedView(parentView, anchorDef, viewDef, context) {
        var defWithOverride = applyProviderOverridesToView(viewDef);
        return callWithDebugContext(DebugAction.create, createEmbeddedView, null, [parentView, anchorDef, defWithOverride, context]);
      }

      function debugCreateComponentView(parentView, nodeDef, viewDef, hostElement) {
        var overrideComponentView = viewDefOverrides.get(nodeDef.element.componentProvider.provider.token);

        if (overrideComponentView) {
          viewDef = overrideComponentView;
        } else {
          viewDef = applyProviderOverridesToView(viewDef);
        }

        return callWithDebugContext(DebugAction.create, createComponentView, null, [parentView, nodeDef, viewDef, hostElement]);
      }

      function debugCreateNgModuleRef(moduleType, parentInjector, bootstrapComponents, def) {
        var defWithOverride = applyProviderOverridesToNgModule(def);
        return createNgModuleRef(moduleType, parentInjector, bootstrapComponents, defWithOverride);
      }

      var providerOverrides = new Map();
      var providerOverridesWithScope = new Map();
      var viewDefOverrides = new Map();

      function debugOverrideProvider(override) {
        providerOverrides.set(override.token, override);
        var injectableDef;

        if (typeof override.token === 'function' && (injectableDef = getInjectableDef(override.token)) && typeof injectableDef.providedIn === 'function') {
          providerOverridesWithScope.set(override.token, override);
        }
      }

      function debugOverrideComponentView(comp, compFactory) {
        var hostViewDef = resolveDefinition(getComponentViewDefinitionFactory(compFactory));
        var compViewDef = resolveDefinition(hostViewDef.nodes[0].element.componentView);
        viewDefOverrides.set(comp, compViewDef);
      }

      function debugClearOverrides() {
        providerOverrides.clear();
        providerOverridesWithScope.clear();
        viewDefOverrides.clear();
      } // Notes about the algorithm:
      // 1) Locate the providers of an element and check if one of them was overwritten
      // 2) Change the providers of that element
      //
      // We only create new datastructures if we need to, to keep perf impact
      // reasonable.


      function applyProviderOverridesToView(def) {
        if (providerOverrides.size === 0) {
          return def;
        }

        var elementIndicesWithOverwrittenProviders = findElementIndicesWithOverwrittenProviders(def);

        if (elementIndicesWithOverwrittenProviders.length === 0) {
          return def;
        } // clone the whole view definition,
        // as it maintains references between the nodes that are hard to update.


        def = def.factory(function () {
          return NOOP;
        });

        for (var i = 0; i < elementIndicesWithOverwrittenProviders.length; i++) {
          applyProviderOverridesToElement(def, elementIndicesWithOverwrittenProviders[i]);
        }

        return def;

        function findElementIndicesWithOverwrittenProviders(def) {
          var elIndicesWithOverwrittenProviders = [];
          var lastElementDef = null;

          for (var _i42 = 0; _i42 < def.nodes.length; _i42++) {
            var nodeDef = def.nodes[_i42];

            if (nodeDef.flags & 1
            /* TypeElement */
            ) {
                lastElementDef = nodeDef;
              }

            if (lastElementDef && nodeDef.flags & 3840
            /* CatProviderNoDirective */
            && providerOverrides.has(nodeDef.provider.token)) {
              elIndicesWithOverwrittenProviders.push(lastElementDef.nodeIndex);
              lastElementDef = null;
            }
          }

          return elIndicesWithOverwrittenProviders;
        }

        function applyProviderOverridesToElement(viewDef, elIndex) {
          for (var _i43 = elIndex + 1; _i43 < viewDef.nodes.length; _i43++) {
            var nodeDef = viewDef.nodes[_i43];

            if (nodeDef.flags & 1
            /* TypeElement */
            ) {
                // stop at the next element
                return;
              }

            if (nodeDef.flags & 3840
            /* CatProviderNoDirective */
            ) {
                var provider = nodeDef.provider;
                var override = providerOverrides.get(provider.token);

                if (override) {
                  nodeDef.flags = nodeDef.flags & ~3840
                  /* CatProviderNoDirective */
                  | override.flags;
                  provider.deps = splitDepsDsl(override.deps);
                  provider.value = override.value;
                }
              }
          }
        }
      } // Notes about the algorithm:
      // We only create new datastructures if we need to, to keep perf impact
      // reasonable.


      function applyProviderOverridesToNgModule(def) {
        var _calcHasOverrides = calcHasOverrides(def),
            hasOverrides = _calcHasOverrides.hasOverrides,
            hasDeprecatedOverrides = _calcHasOverrides.hasDeprecatedOverrides;

        if (!hasOverrides) {
          return def;
        } // clone the whole view definition,
        // as it maintains references between the nodes that are hard to update.


        def = def.factory(function () {
          return NOOP;
        });
        applyProviderOverrides(def);
        return def;

        function calcHasOverrides(def) {
          var hasOverrides = false;
          var hasDeprecatedOverrides = false;

          if (providerOverrides.size === 0) {
            return {
              hasOverrides: hasOverrides,
              hasDeprecatedOverrides: hasDeprecatedOverrides
            };
          }

          def.providers.forEach(function (node) {
            var override = providerOverrides.get(node.token);

            if (node.flags & 3840
            /* CatProviderNoDirective */
            && override) {
              hasOverrides = true;
              hasDeprecatedOverrides = hasDeprecatedOverrides || override.deprecatedBehavior;
            }
          });
          def.modules.forEach(function (module) {
            providerOverridesWithScope.forEach(function (override, token) {
              if (getInjectableDef(token).providedIn === module) {
                hasOverrides = true;
                hasDeprecatedOverrides = hasDeprecatedOverrides || override.deprecatedBehavior;
              }
            });
          });
          return {
            hasOverrides: hasOverrides,
            hasDeprecatedOverrides: hasDeprecatedOverrides
          };
        }

        function applyProviderOverrides(def) {
          for (var i = 0; i < def.providers.length; i++) {
            var provider = def.providers[i];

            if (hasDeprecatedOverrides) {
              // We had a bug where me made
              // all providers lazy. Keep this logic behind a flag
              // for migrating existing users.
              provider.flags |= 4096
              /* LazyProvider */
              ;
            }

            var override = providerOverrides.get(provider.token);

            if (override) {
              provider.flags = provider.flags & ~3840
              /* CatProviderNoDirective */
              | override.flags;
              provider.deps = splitDepsDsl(override.deps);
              provider.value = override.value;
            }
          }

          if (providerOverridesWithScope.size > 0) {
            var moduleSet = new Set(def.modules);
            providerOverridesWithScope.forEach(function (override, token) {
              if (moduleSet.has(getInjectableDef(token).providedIn)) {
                var _provider = {
                  token: token,
                  flags: override.flags | (hasDeprecatedOverrides ? 4096
                  /* LazyProvider */
                  : 0
                  /* None */
                  ),
                  deps: splitDepsDsl(override.deps),
                  value: override.value,
                  index: def.providers.length
                };
                def.providers.push(_provider);
                def.providersByKey[tokenKey(token)] = _provider;
              }
            });
          }
        }
      }

      function prodCheckAndUpdateNode(view, checkIndex, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
        var nodeDef = view.def.nodes[checkIndex];
        checkAndUpdateNode(view, nodeDef, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
        return nodeDef.flags & 224
        /* CatPureExpression */
        ? asPureExpressionData(view, checkIndex).value : undefined;
      }

      function prodCheckNoChangesNode(view, checkIndex, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
        var nodeDef = view.def.nodes[checkIndex];
        checkNoChangesNode(view, nodeDef, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
        return nodeDef.flags & 224
        /* CatPureExpression */
        ? asPureExpressionData(view, checkIndex).value : undefined;
      }

      function debugCheckAndUpdateView(view) {
        return callWithDebugContext(DebugAction.detectChanges, checkAndUpdateView, null, [view]);
      }

      function debugCheckNoChangesView(view) {
        return callWithDebugContext(DebugAction.checkNoChanges, checkNoChangesView, null, [view]);
      }

      function debugDestroyView(view) {
        return callWithDebugContext(DebugAction.destroy, destroyView, null, [view]);
      }

      var DebugAction;

      (function (DebugAction) {
        DebugAction[DebugAction["create"] = 0] = "create";
        DebugAction[DebugAction["detectChanges"] = 1] = "detectChanges";
        DebugAction[DebugAction["checkNoChanges"] = 2] = "checkNoChanges";
        DebugAction[DebugAction["destroy"] = 3] = "destroy";
        DebugAction[DebugAction["handleEvent"] = 4] = "handleEvent";
      })(DebugAction || (DebugAction = {}));

      var _currentAction;

      var _currentView;

      var _currentNodeIndex;

      function debugSetCurrentNode(view, nodeIndex) {
        _currentView = view;
        _currentNodeIndex = nodeIndex;
      }

      function debugHandleEvent(view, nodeIndex, eventName, event) {
        debugSetCurrentNode(view, nodeIndex);
        return callWithDebugContext(DebugAction.handleEvent, view.def.handleEvent, null, [view, nodeIndex, eventName, event]);
      }

      function debugUpdateDirectives(view, checkType) {
        if (view.state & 128
        /* Destroyed */
        ) {
            throw viewDestroyedError(DebugAction[_currentAction]);
          }

        debugSetCurrentNode(view, nextDirectiveWithBinding(view, 0));
        return view.def.updateDirectives(debugCheckDirectivesFn, view);

        function debugCheckDirectivesFn(view, nodeIndex, argStyle) {
          var nodeDef = view.def.nodes[nodeIndex];

          for (var _len52 = arguments.length, values = new Array(_len52 > 3 ? _len52 - 3 : 0), _key54 = 3; _key54 < _len52; _key54++) {
            values[_key54 - 3] = arguments[_key54];
          }

          if (checkType === 0
          /* CheckAndUpdate */
          ) {
              debugCheckAndUpdateNode(view, nodeDef, argStyle, values);
            } else {
            debugCheckNoChangesNode(view, nodeDef, argStyle, values);
          }

          if (nodeDef.flags & 16384
          /* TypeDirective */
          ) {
              debugSetCurrentNode(view, nextDirectiveWithBinding(view, nodeIndex));
            }

          return nodeDef.flags & 224
          /* CatPureExpression */
          ? asPureExpressionData(view, nodeDef.nodeIndex).value : undefined;
        }
      }

      function debugUpdateRenderer(view, checkType) {
        if (view.state & 128
        /* Destroyed */
        ) {
            throw viewDestroyedError(DebugAction[_currentAction]);
          }

        debugSetCurrentNode(view, nextRenderNodeWithBinding(view, 0));
        return view.def.updateRenderer(debugCheckRenderNodeFn, view);

        function debugCheckRenderNodeFn(view, nodeIndex, argStyle) {
          var nodeDef = view.def.nodes[nodeIndex];

          for (var _len53 = arguments.length, values = new Array(_len53 > 3 ? _len53 - 3 : 0), _key55 = 3; _key55 < _len53; _key55++) {
            values[_key55 - 3] = arguments[_key55];
          }

          if (checkType === 0
          /* CheckAndUpdate */
          ) {
              debugCheckAndUpdateNode(view, nodeDef, argStyle, values);
            } else {
            debugCheckNoChangesNode(view, nodeDef, argStyle, values);
          }

          if (nodeDef.flags & 3
          /* CatRenderNode */
          ) {
              debugSetCurrentNode(view, nextRenderNodeWithBinding(view, nodeIndex));
            }

          return nodeDef.flags & 224
          /* CatPureExpression */
          ? asPureExpressionData(view, nodeDef.nodeIndex).value : undefined;
        }
      }

      function debugCheckAndUpdateNode(view, nodeDef, argStyle, givenValues) {
        var changed = checkAndUpdateNode.apply(void 0, [view, nodeDef, argStyle].concat(_toConsumableArray(givenValues)));

        if (changed) {
          var values = argStyle === 1
          /* Dynamic */
          ? givenValues[0] : givenValues;

          if (nodeDef.flags & 16384
          /* TypeDirective */
          ) {
              var bindingValues = {};

              for (var i = 0; i < nodeDef.bindings.length; i++) {
                var binding = nodeDef.bindings[i];
                var value = values[i];

                if (binding.flags & 8
                /* TypeProperty */
                ) {
                    bindingValues[normalizeDebugBindingName(binding.nonMinifiedName)] = normalizeDebugBindingValue(value);
                  }
              }

              var elDef = nodeDef.parent;
              var el = asElementData(view, elDef.nodeIndex).renderElement;

              if (!elDef.element.name) {
                // a comment.
                view.renderer.setValue(el, escapeCommentText("bindings=".concat(JSON.stringify(bindingValues, null, 2))));
              } else {
                // a regular element.
                for (var attr in bindingValues) {
                  var _value11 = bindingValues[attr];

                  if (_value11 != null) {
                    view.renderer.setAttribute(el, attr, _value11);
                  } else {
                    view.renderer.removeAttribute(el, attr);
                  }
                }
              }
            }
        }
      }

      function debugCheckNoChangesNode(view, nodeDef, argStyle, values) {
        checkNoChangesNode.apply(void 0, [view, nodeDef, argStyle].concat(_toConsumableArray(values)));
      }

      function nextDirectiveWithBinding(view, nodeIndex) {
        for (var i = nodeIndex; i < view.def.nodes.length; i++) {
          var nodeDef = view.def.nodes[i];

          if (nodeDef.flags & 16384
          /* TypeDirective */
          && nodeDef.bindings && nodeDef.bindings.length) {
            return i;
          }
        }

        return null;
      }

      function nextRenderNodeWithBinding(view, nodeIndex) {
        for (var i = nodeIndex; i < view.def.nodes.length; i++) {
          var nodeDef = view.def.nodes[i];

          if (nodeDef.flags & 3
          /* CatRenderNode */
          && nodeDef.bindings && nodeDef.bindings.length) {
            return i;
          }
        }

        return null;
      }

      var DebugContext_ = /*#__PURE__*/function () {
        function DebugContext_(view, nodeIndex) {
          _classCallCheck2(this, DebugContext_);

          this.view = view;
          this.nodeIndex = nodeIndex;

          if (nodeIndex == null) {
            this.nodeIndex = nodeIndex = 0;
          }

          this.nodeDef = view.def.nodes[nodeIndex];
          var elDef = this.nodeDef;
          var elView = view;

          while (elDef && (elDef.flags & 1
          /* TypeElement */
          ) === 0) {
            elDef = elDef.parent;
          }

          if (!elDef) {
            while (!elDef && elView) {
              elDef = viewParentEl(elView);
              elView = elView.parent;
            }
          }

          this.elDef = elDef;
          this.elView = elView;
        }

        _createClass2(DebugContext_, [{
          key: "elOrCompView",
          get: function get() {
            // Has to be done lazily as we use the DebugContext also during creation of elements...
            return asElementData(this.elView, this.elDef.nodeIndex).componentView || this.view;
          }
        }, {
          key: "injector",
          get: function get() {
            return createInjector$1(this.elView, this.elDef);
          }
        }, {
          key: "component",
          get: function get() {
            return this.elOrCompView.component;
          }
        }, {
          key: "context",
          get: function get() {
            return this.elOrCompView.context;
          }
        }, {
          key: "providerTokens",
          get: function get() {
            var tokens = [];

            if (this.elDef) {
              for (var i = this.elDef.nodeIndex + 1; i <= this.elDef.nodeIndex + this.elDef.childCount; i++) {
                var childDef = this.elView.def.nodes[i];

                if (childDef.flags & 20224
                /* CatProvider */
                ) {
                    tokens.push(childDef.provider.token);
                  }

                i += childDef.childCount;
              }
            }

            return tokens;
          }
        }, {
          key: "references",
          get: function get() {
            var references = {};

            if (this.elDef) {
              collectReferences(this.elView, this.elDef, references);

              for (var i = this.elDef.nodeIndex + 1; i <= this.elDef.nodeIndex + this.elDef.childCount; i++) {
                var childDef = this.elView.def.nodes[i];

                if (childDef.flags & 20224
                /* CatProvider */
                ) {
                    collectReferences(this.elView, childDef, references);
                  }

                i += childDef.childCount;
              }
            }

            return references;
          }
        }, {
          key: "componentRenderElement",
          get: function get() {
            var elData = findHostElement(this.elOrCompView);
            return elData ? elData.renderElement : undefined;
          }
        }, {
          key: "renderNode",
          get: function get() {
            return this.nodeDef.flags & 2
            /* TypeText */
            ? renderNode(this.view, this.nodeDef) : renderNode(this.elView, this.elDef);
          }
        }, {
          key: "logError",
          value: function logError(console) {
            for (var _len54 = arguments.length, values = new Array(_len54 > 1 ? _len54 - 1 : 0), _key56 = 1; _key56 < _len54; _key56++) {
              values[_key56 - 1] = arguments[_key56];
            }

            var logViewDef;
            var logNodeIndex;

            if (this.nodeDef.flags & 2
            /* TypeText */
            ) {
                logViewDef = this.view.def;
                logNodeIndex = this.nodeDef.nodeIndex;
              } else {
              logViewDef = this.elView.def;
              logNodeIndex = this.elDef.nodeIndex;
            } // Note: we only generate a log function for text and element nodes
            // to make the generated code as small as possible.


            var renderNodeIndex = getRenderNodeIndex(logViewDef, logNodeIndex);
            var currRenderNodeIndex = -1;

            var nodeLogger = function nodeLogger() {
              currRenderNodeIndex++;

              if (currRenderNodeIndex === renderNodeIndex) {
                var _console$error;

                return (_console$error = console.error).bind.apply(_console$error, [console].concat(values));
              } else {
                return NOOP;
              }
            };

            logViewDef.factory(nodeLogger);

            if (currRenderNodeIndex < renderNodeIndex) {
              console.error('Illegal state: the ViewDefinitionFactory did not call the logger!');
              console.error.apply(console, values);
            }
          }
        }]);

        return DebugContext_;
      }();

      function getRenderNodeIndex(viewDef, nodeIndex) {
        var renderNodeIndex = -1;

        for (var i = 0; i <= nodeIndex; i++) {
          var nodeDef = viewDef.nodes[i];

          if (nodeDef.flags & 3
          /* CatRenderNode */
          ) {
              renderNodeIndex++;
            }
        }

        return renderNodeIndex;
      }

      function findHostElement(view) {
        while (view && !isComponentView(view)) {
          view = view.parent;
        }

        if (view.parent) {
          return asElementData(view.parent, viewParentEl(view).nodeIndex);
        }

        return null;
      }

      function collectReferences(view, nodeDef, references) {
        for (var refName in nodeDef.references) {
          references[refName] = getQueryValue(view, nodeDef, nodeDef.references[refName]);
        }
      }

      function callWithDebugContext(action, fn, self, args) {
        var oldAction = _currentAction;
        var oldView = _currentView;
        var oldNodeIndex = _currentNodeIndex;

        try {
          _currentAction = action;
          var result = fn.apply(self, args);
          _currentView = oldView;
          _currentNodeIndex = oldNodeIndex;
          _currentAction = oldAction;
          return result;
        } catch (e) {
          if (isViewDebugError(e) || !_currentView) {
            throw e;
          }

          throw viewWrappedDebugError(e, getCurrentDebugContext());
        }
      }

      function getCurrentDebugContext() {
        return _currentView ? new DebugContext_(_currentView, _currentNodeIndex) : null;
      }

      var DebugRendererFactory2 = /*#__PURE__*/function () {
        function DebugRendererFactory2(delegate) {
          _classCallCheck2(this, DebugRendererFactory2);

          this.delegate = delegate;
        }

        _createClass2(DebugRendererFactory2, [{
          key: "createRenderer",
          value: function createRenderer(element, renderData) {
            return new DebugRenderer2(this.delegate.createRenderer(element, renderData));
          }
        }, {
          key: "begin",
          value: function begin() {
            if (this.delegate.begin) {
              this.delegate.begin();
            }
          }
        }, {
          key: "end",
          value: function end() {
            if (this.delegate.end) {
              this.delegate.end();
            }
          }
        }, {
          key: "whenRenderingDone",
          value: function whenRenderingDone() {
            if (this.delegate.whenRenderingDone) {
              return this.delegate.whenRenderingDone();
            }

            return Promise.resolve(null);
          }
        }]);

        return DebugRendererFactory2;
      }();

      var DebugRenderer2 = /*#__PURE__*/function () {
        function DebugRenderer2(delegate) {
          _classCallCheck2(this, DebugRenderer2);

          this.delegate = delegate;
          /**
           * Factory function used to create a `DebugContext` when a node is created.
           *
           * The `DebugContext` allows to retrieve information about the nodes that are useful in tests.
           *
           * The factory is configurable so that the `DebugRenderer2` could instantiate either a View Engine
           * or a Render context.
           */

          this.debugContextFactory = getCurrentDebugContext;
          this.data = this.delegate.data;
        }

        _createClass2(DebugRenderer2, [{
          key: "createDebugContext",
          value: function createDebugContext(nativeElement) {
            return this.debugContextFactory(nativeElement);
          }
        }, {
          key: "destroyNode",
          value: function destroyNode(node) {
            var debugNode = getDebugNode$1(node);
            removeDebugNodeFromIndex(debugNode);

            if (debugNode instanceof DebugNode__PRE_R3__) {
              debugNode.listeners.length = 0;
            }

            if (this.delegate.destroyNode) {
              this.delegate.destroyNode(node);
            }
          }
        }, {
          key: "destroy",
          value: function destroy() {
            this.delegate.destroy();
          }
        }, {
          key: "createElement",
          value: function createElement(name, namespace) {
            var el = this.delegate.createElement(name, namespace);
            var debugCtx = this.createDebugContext(el);

            if (debugCtx) {
              var debugEl = new DebugElement__PRE_R3__(el, null, debugCtx);
              debugEl.name = name;
              indexDebugNode(debugEl);
            }

            return el;
          }
        }, {
          key: "createComment",
          value: function createComment(value) {
            var comment = this.delegate.createComment(escapeCommentText(value));
            var debugCtx = this.createDebugContext(comment);

            if (debugCtx) {
              indexDebugNode(new DebugNode__PRE_R3__(comment, null, debugCtx));
            }

            return comment;
          }
        }, {
          key: "createText",
          value: function createText(value) {
            var text = this.delegate.createText(value);
            var debugCtx = this.createDebugContext(text);

            if (debugCtx) {
              indexDebugNode(new DebugNode__PRE_R3__(text, null, debugCtx));
            }

            return text;
          }
        }, {
          key: "appendChild",
          value: function appendChild(parent, newChild) {
            var debugEl = getDebugNode$1(parent);
            var debugChildEl = getDebugNode$1(newChild);

            if (debugEl && debugChildEl && debugEl instanceof DebugElement__PRE_R3__) {
              debugEl.addChild(debugChildEl);
            }

            this.delegate.appendChild(parent, newChild);
          }
        }, {
          key: "insertBefore",
          value: function insertBefore(parent, newChild, refChild, isMove) {
            var debugEl = getDebugNode$1(parent);
            var debugChildEl = getDebugNode$1(newChild);
            var debugRefEl = getDebugNode$1(refChild);

            if (debugEl && debugChildEl && debugEl instanceof DebugElement__PRE_R3__) {
              debugEl.insertBefore(debugRefEl, debugChildEl);
            }

            this.delegate.insertBefore(parent, newChild, refChild, isMove);
          }
        }, {
          key: "removeChild",
          value: function removeChild(parent, oldChild) {
            var debugEl = getDebugNode$1(parent);
            var debugChildEl = getDebugNode$1(oldChild);

            if (debugEl && debugChildEl && debugEl instanceof DebugElement__PRE_R3__) {
              debugEl.removeChild(debugChildEl);
            }

            this.delegate.removeChild(parent, oldChild);
          }
        }, {
          key: "selectRootElement",
          value: function selectRootElement(selectorOrNode, preserveContent) {
            var el = this.delegate.selectRootElement(selectorOrNode, preserveContent);
            var debugCtx = getCurrentDebugContext();

            if (debugCtx) {
              indexDebugNode(new DebugElement__PRE_R3__(el, null, debugCtx));
            }

            return el;
          }
        }, {
          key: "setAttribute",
          value: function setAttribute(el, name, value, namespace) {
            var debugEl = getDebugNode$1(el);

            if (debugEl && debugEl instanceof DebugElement__PRE_R3__) {
              var fullName = namespace ? namespace + ':' + name : name;
              debugEl.attributes[fullName] = value;
            }

            this.delegate.setAttribute(el, name, value, namespace);
          }
        }, {
          key: "removeAttribute",
          value: function removeAttribute(el, name, namespace) {
            var debugEl = getDebugNode$1(el);

            if (debugEl && debugEl instanceof DebugElement__PRE_R3__) {
              var fullName = namespace ? namespace + ':' + name : name;
              debugEl.attributes[fullName] = null;
            }

            this.delegate.removeAttribute(el, name, namespace);
          }
        }, {
          key: "addClass",
          value: function addClass(el, name) {
            var debugEl = getDebugNode$1(el);

            if (debugEl && debugEl instanceof DebugElement__PRE_R3__) {
              debugEl.classes[name] = true;
            }

            this.delegate.addClass(el, name);
          }
        }, {
          key: "removeClass",
          value: function removeClass(el, name) {
            var debugEl = getDebugNode$1(el);

            if (debugEl && debugEl instanceof DebugElement__PRE_R3__) {
              debugEl.classes[name] = false;
            }

            this.delegate.removeClass(el, name);
          }
        }, {
          key: "setStyle",
          value: function setStyle(el, style, value, flags) {
            var debugEl = getDebugNode$1(el);

            if (debugEl && debugEl instanceof DebugElement__PRE_R3__) {
              debugEl.styles[style] = value;
            }

            this.delegate.setStyle(el, style, value, flags);
          }
        }, {
          key: "removeStyle",
          value: function removeStyle(el, style, flags) {
            var debugEl = getDebugNode$1(el);

            if (debugEl && debugEl instanceof DebugElement__PRE_R3__) {
              debugEl.styles[style] = null;
            }

            this.delegate.removeStyle(el, style, flags);
          }
        }, {
          key: "setProperty",
          value: function setProperty(el, name, value) {
            var debugEl = getDebugNode$1(el);

            if (debugEl && debugEl instanceof DebugElement__PRE_R3__) {
              debugEl.properties[name] = value;
            }

            this.delegate.setProperty(el, name, value);
          }
        }, {
          key: "listen",
          value: function listen(target, eventName, callback) {
            if (typeof target !== 'string') {
              var debugEl = getDebugNode$1(target);

              if (debugEl) {
                debugEl.listeners.push(new DebugEventListener(eventName, callback));
              }
            }

            return this.delegate.listen(target, eventName, callback);
          }
        }, {
          key: "parentNode",
          value: function parentNode(node) {
            return this.delegate.parentNode(node);
          }
        }, {
          key: "nextSibling",
          value: function nextSibling(node) {
            return this.delegate.nextSibling(node);
          }
        }, {
          key: "setValue",
          value: function setValue(node, value) {
            return this.delegate.setValue(node, value);
          }
        }]);

        return DebugRenderer2;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function overrideProvider(override) {
        initServicesIfNeeded();
        return Services.overrideProvider(override);
      }

      function overrideComponentView(comp, componentFactory) {
        initServicesIfNeeded();
        return Services.overrideComponentView(comp, componentFactory);
      }

      function clearOverrides() {
        initServicesIfNeeded();
        return Services.clearOverrides();
      } // Attention: this function is called as top level function.
      // Putting any logic in here will destroy closure tree shaking!


      function createNgModuleFactory(ngModuleType, bootstrapComponents, defFactory) {
        return new NgModuleFactory_(ngModuleType, bootstrapComponents, defFactory);
      }

      function cloneNgModuleDefinition(def) {
        var providers = Array.from(def.providers);
        var modules = Array.from(def.modules);
        var providersByKey = {};

        for (var key in def.providersByKey) {
          providersByKey[key] = def.providersByKey[key];
        }

        return {
          factory: def.factory,
          scope: def.scope,
          providers: providers,
          modules: modules,
          providersByKey: providersByKey
        };
      }

      var NgModuleFactory_ = /*#__PURE__*/function (_NgModuleFactory2) {
        _inherits2(NgModuleFactory_, _NgModuleFactory2);

        var _super325 = _createSuper(NgModuleFactory_);

        function NgModuleFactory_(moduleType, _bootstrapComponents, _ngModuleDefFactory) {
          var _this745;

          _classCallCheck2(this, NgModuleFactory_);

          // Attention: this ctor is called as top level function.
          // Putting any logic in here will destroy closure tree shaking!
          _this745 = _super325.call(this);
          _this745.moduleType = moduleType;
          _this745._bootstrapComponents = _bootstrapComponents;
          _this745._ngModuleDefFactory = _ngModuleDefFactory;
          return _this745;
        }

        _createClass2(NgModuleFactory_, [{
          key: "create",
          value: function create(parentInjector) {
            initServicesIfNeeded(); // Clone the NgModuleDefinition so that any tree shakeable provider definition
            // added to this instance of the NgModuleRef doesn't affect the cached copy.
            // See https://github.com/angular/angular/issues/25018.

            var def = cloneNgModuleDefinition(resolveDefinition(this._ngModuleDefFactory));
            return Services.createNgModuleRef(this.moduleType, parentInjector || Injector.NULL, this._bootstrapComponents, def);
          }
        }]);

        return NgModuleFactory_;
      }(NgModuleFactory);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Compiles a partial directive declaration object into a full directive definition object.
       *
       * @codeGenApi
       */


      function ɵɵngDeclareDirective(decl) {
        var compiler = getCompilerFacade();
        return compiler.compileDirectiveDeclaration(angularCoreEnv, "ng:///".concat(decl.type.name, "/\u0275fac.js"), decl);
      }
      /**
       * Compiles a partial component declaration object into a full component definition object.
       *
       * @codeGenApi
       */


      function ɵɵngDeclareComponent(decl) {
        var compiler = getCompilerFacade();
        return compiler.compileComponentDeclaration(angularCoreEnv, "ng:///".concat(decl.type.name, "/\u0275cmp.js"), decl);
      }
      /**
       * Compiles a partial pipe declaration object into a full pipe definition object.
       *
       * @codeGenApi
       */


      function ɵɵngDeclarePipe(decl) {
        var compiler = getCompilerFacade();
        return compiler.compilePipeDeclaration(angularCoreEnv, "ng:///".concat(decl.type.name, "/\u0275pipe.js"), decl);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // clang-format on

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      if (typeof ngDevMode !== 'undefined' && ngDevMode) {
        // This helper is to give a reasonable error message to people upgrading to v9 that have not yet
        // installed `@angular/localize` in their app.
        // tslint:disable-next-line: no-toplevel-property-access
        _global.$localize = _global.$localize || function () {
          throw new Error('It looks like your application or one of its dependencies is using i18n.\n' + 'Angular 9 introduced a global `$localize()` function that needs to be loaded.\n' + 'Please run `ng add @angular/localize` from the Angular CLI.\n' + '(For non-CLI projects, add `import \'@angular/localize/init\';` to your `polyfills.ts` file.\n' + 'For server-side rendering applications add the import to your `main.server.ts` file.)');
        };
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // This file only reexports content of the `src` folder. Keep it that way.

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=core.js.map

      /***/

    },

    /***/
    "fzPg":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/yo.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function fzPg(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Yoruba Nigeria [yo]
      //! author : Atolagbe Abisoye : https://github.com/andela-batolagbe
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var yo = moment.defineLocale('yo', {
          months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),
          monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),
          weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),
          weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),
          weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),
          longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A'
          },
          calendar: {
            sameDay: '[Ònì ni] LT',
            nextDay: '[Ọ̀la ni] LT',
            nextWeek: "dddd [Ọsẹ̀ tón'bọ] [ni] LT",
            lastDay: '[Àna ni] LT',
            lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'ní %s',
            past: '%s kọjá',
            s: 'ìsẹjú aayá die',
            ss: 'aayá %d',
            m: 'ìsẹjú kan',
            mm: 'ìsẹjú %d',
            h: 'wákati kan',
            hh: 'wákati %d',
            d: 'ọjọ́ kan',
            dd: 'ọjọ́ %d',
            M: 'osù kan',
            MM: 'osù %d',
            y: 'ọdún kan',
            yy: 'ọdún %d'
          },
          dayOfMonthOrdinalParse: /ọjọ́\s\d{1,2}/,
          ordinal: 'ọjọ́ %d',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return yo;
      });
      /***/

    },

    /***/
    "gRHU":
    /*!*********************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/Observer.js ***!
      \*********************************************************/

    /*! exports provided: empty */

    /***/
    function gRHU(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "empty", function () {
        return empty;
      });
      /* harmony import */


      var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./config */
      "2fFW");
      /* harmony import */


      var _util_hostReportError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./util/hostReportError */
      "NJ4a");

      var empty = {
        closed: true,
        next: function next(value) {},
        error: function error(err) {
          if (_config__WEBPACK_IMPORTED_MODULE_0__["config"].useDeprecatedSynchronousErrorHandling) {
            throw err;
          } else {
            Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_1__["hostReportError"])(err);
          }
        },
        complete: function complete() {}
      }; //# sourceMappingURL=Observer.js.map

      /***/
    },

    /***/
    "gVVK":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/sl.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function gVVK(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Slovenian [sl]
      //! author : Robert Sedovšek : https://github.com/sedovsek
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        function processRelativeTime(number, withoutSuffix, key, isFuture) {
          var result = number + ' ';

          switch (key) {
            case 's':
              return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';

            case 'ss':
              if (number === 1) {
                result += withoutSuffix ? 'sekundo' : 'sekundi';
              } else if (number === 2) {
                result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';
              } else if (number < 5) {
                result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';
              } else {
                result += 'sekund';
              }

              return result;

            case 'm':
              return withoutSuffix ? 'ena minuta' : 'eno minuto';

            case 'mm':
              if (number === 1) {
                result += withoutSuffix ? 'minuta' : 'minuto';
              } else if (number === 2) {
                result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
              } else if (number < 5) {
                result += withoutSuffix || isFuture ? 'minute' : 'minutami';
              } else {
                result += withoutSuffix || isFuture ? 'minut' : 'minutami';
              }

              return result;

            case 'h':
              return withoutSuffix ? 'ena ura' : 'eno uro';

            case 'hh':
              if (number === 1) {
                result += withoutSuffix ? 'ura' : 'uro';
              } else if (number === 2) {
                result += withoutSuffix || isFuture ? 'uri' : 'urama';
              } else if (number < 5) {
                result += withoutSuffix || isFuture ? 'ure' : 'urami';
              } else {
                result += withoutSuffix || isFuture ? 'ur' : 'urami';
              }

              return result;

            case 'd':
              return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';

            case 'dd':
              if (number === 1) {
                result += withoutSuffix || isFuture ? 'dan' : 'dnem';
              } else if (number === 2) {
                result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
              } else {
                result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
              }

              return result;

            case 'M':
              return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';

            case 'MM':
              if (number === 1) {
                result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
              } else if (number === 2) {
                result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
              } else if (number < 5) {
                result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
              } else {
                result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
              }

              return result;

            case 'y':
              return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';

            case 'yy':
              if (number === 1) {
                result += withoutSuffix || isFuture ? 'leto' : 'letom';
              } else if (number === 2) {
                result += withoutSuffix || isFuture ? 'leti' : 'letoma';
              } else if (number < 5) {
                result += withoutSuffix || isFuture ? 'leta' : 'leti';
              } else {
                result += withoutSuffix || isFuture ? 'let' : 'leti';
              }

              return result;
          }
        }

        var sl = moment.defineLocale('sl', {
          months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),
          monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),
          monthsParseExact: true,
          weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),
          weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),
          weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD. MM. YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd, D. MMMM YYYY H:mm'
          },
          calendar: {
            sameDay: '[danes ob] LT',
            nextDay: '[jutri ob] LT',
            nextWeek: function nextWeek() {
              switch (this.day()) {
                case 0:
                  return '[v] [nedeljo] [ob] LT';

                case 3:
                  return '[v] [sredo] [ob] LT';

                case 6:
                  return '[v] [soboto] [ob] LT';

                case 1:
                case 2:
                case 4:
                case 5:
                  return '[v] dddd [ob] LT';
              }
            },
            lastDay: '[včeraj ob] LT',
            lastWeek: function lastWeek() {
              switch (this.day()) {
                case 0:
                  return '[prejšnjo] [nedeljo] [ob] LT';

                case 3:
                  return '[prejšnjo] [sredo] [ob] LT';

                case 6:
                  return '[prejšnjo] [soboto] [ob] LT';

                case 1:
                case 2:
                case 4:
                case 5:
                  return '[prejšnji] dddd [ob] LT';
              }
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: 'čez %s',
            past: 'pred %s',
            s: processRelativeTime,
            ss: processRelativeTime,
            m: processRelativeTime,
            mm: processRelativeTime,
            h: processRelativeTime,
            hh: processRelativeTime,
            d: processRelativeTime,
            dd: processRelativeTime,
            M: processRelativeTime,
            MM: processRelativeTime,
            y: processRelativeTime,
            yy: processRelativeTime
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return sl;
      });
      /***/

    },

    /***/
    "gaZ0":
    /*!******************************************************************!*\
      !*** ./node_modules/aws-sdk/lib/query/query_param_serializer.js ***!
      \******************************************************************/

    /*! no static exports found */

    /***/
    function gaZ0(module, exports, __webpack_require__) {
      var util = __webpack_require__(
      /*! ../util */
      "BaN1");

      function QueryParamSerializer() {}

      QueryParamSerializer.prototype.serialize = function (params, shape, fn) {
        serializeStructure('', params, shape, fn);
      };

      function ucfirst(shape) {
        if (shape.isQueryName || shape.api.protocol !== 'ec2') {
          return shape.name;
        } else {
          return shape.name[0].toUpperCase() + shape.name.substr(1);
        }
      }

      function serializeStructure(prefix, struct, rules, fn) {
        util.each(rules.members, function (name, member) {
          var value = struct[name];
          if (value === null || value === undefined) return;
          var memberName = ucfirst(member);
          memberName = prefix ? prefix + '.' + memberName : memberName;
          serializeMember(memberName, value, member, fn);
        });
      }

      function serializeMap(name, map, rules, fn) {
        var i = 1;
        util.each(map, function (key, value) {
          var prefix = rules.flattened ? '.' : '.entry.';
          var position = prefix + i++ + '.';
          var keyName = position + (rules.key.name || 'key');
          var valueName = position + (rules.value.name || 'value');
          serializeMember(name + keyName, key, rules.key, fn);
          serializeMember(name + valueName, value, rules.value, fn);
        });
      }

      function serializeList(name, list, rules, fn) {
        var memberRules = rules.member || {};

        if (list.length === 0) {
          fn.call(this, name, null);
          return;
        }

        util.arrayEach(list, function (v, n) {
          var suffix = '.' + (n + 1);

          if (rules.api.protocol === 'ec2') {
            // Do nothing for EC2
            suffix = suffix + ''; // make linter happy
          } else if (rules.flattened) {
            if (memberRules.name) {
              var parts = name.split('.');
              parts.pop();
              parts.push(ucfirst(memberRules));
              name = parts.join('.');
            }
          } else {
            suffix = '.' + (memberRules.name ? memberRules.name : 'member') + suffix;
          }

          serializeMember(name + suffix, v, memberRules, fn);
        });
      }

      function serializeMember(name, value, rules, fn) {
        if (value === null || value === undefined) return;

        if (rules.type === 'structure') {
          serializeStructure(name, value, rules, fn);
        } else if (rules.type === 'list') {
          serializeList(name, value, rules, fn);
        } else if (rules.type === 'map') {
          serializeMap(name, value, rules, fn);
        } else {
          fn(name, rules.toWireFormat(value).toString());
        }
      }
      /**
       * @api private
       */


      module.exports = QueryParamSerializer;
      /***/
    },

    /***/
    "gcYM":
    /*!***********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/throttleTime.js ***!
      \***********************************************************************/

    /*! exports provided: throttleTime */

    /***/
    function gcYM(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "throttleTime", function () {
        return throttleTime;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");
      /* harmony import */


      var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../scheduler/async */
      "D0XW");
      /* harmony import */


      var _throttle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./throttle */
      "yuhW");

      function throttleTime(duration) {
        var scheduler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
        var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _throttle__WEBPACK_IMPORTED_MODULE_2__["defaultThrottleConfig"];
        return function (source) {
          return source.lift(new ThrottleTimeOperator(duration, scheduler, config.leading, config.trailing));
        };
      }

      var ThrottleTimeOperator = /*#__PURE__*/function () {
        function ThrottleTimeOperator(duration, scheduler, leading, trailing) {
          _classCallCheck2(this, ThrottleTimeOperator);

          this.duration = duration;
          this.scheduler = scheduler;
          this.leading = leading;
          this.trailing = trailing;
        }

        _createClass2(ThrottleTimeOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new ThrottleTimeSubscriber(subscriber, this.duration, this.scheduler, this.leading, this.trailing));
          }
        }]);

        return ThrottleTimeOperator;
      }();

      var ThrottleTimeSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_33) {
        _inherits2(ThrottleTimeSubscriber, _Subscriber__WEBPACK_33);

        var _super326 = _createSuper(ThrottleTimeSubscriber);

        function ThrottleTimeSubscriber(destination, duration, scheduler, leading, trailing) {
          var _this746;

          _classCallCheck2(this, ThrottleTimeSubscriber);

          _this746 = _super326.call(this, destination);
          _this746.duration = duration;
          _this746.scheduler = scheduler;
          _this746.leading = leading;
          _this746.trailing = trailing;
          _this746._hasTrailingValue = false;
          _this746._trailingValue = null;
          return _this746;
        }

        _createClass2(ThrottleTimeSubscriber, [{
          key: "_next",
          value: function _next(value) {
            if (this.throttled) {
              if (this.trailing) {
                this._trailingValue = value;
                this._hasTrailingValue = true;
              }
            } else {
              this.add(this.throttled = this.scheduler.schedule(dispatchNext, this.duration, {
                subscriber: this
              }));

              if (this.leading) {
                this.destination.next(value);
              } else if (this.trailing) {
                this._trailingValue = value;
                this._hasTrailingValue = true;
              }
            }
          }
        }, {
          key: "_complete",
          value: function _complete() {
            if (this._hasTrailingValue) {
              this.destination.next(this._trailingValue);
              this.destination.complete();
            } else {
              this.destination.complete();
            }
          }
        }, {
          key: "clearThrottle",
          value: function clearThrottle() {
            var throttled = this.throttled;

            if (throttled) {
              if (this.trailing && this._hasTrailingValue) {
                this.destination.next(this._trailingValue);
                this._trailingValue = null;
                this._hasTrailingValue = false;
              }

              throttled.unsubscribe();
              this.remove(throttled);
              this.throttled = null;
            }
          }
        }]);

        return ThrottleTimeSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]);

      function dispatchNext(arg) {
        var subscriber = arg.subscriber;
        subscriber.clearThrottle();
      } //# sourceMappingURL=throttleTime.js.map

      /***/

    },

    /***/
    "gekB":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/fi.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function gekB(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Finnish [fi]
      //! author : Tarmo Aidantausta : https://github.com/bleadof
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),
            numbersFuture = ['nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden', numbersPast[7], numbersPast[8], numbersPast[9]];

        function translate(number, withoutSuffix, key, isFuture) {
          var result = '';

          switch (key) {
            case 's':
              return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';

            case 'ss':
              result = isFuture ? 'sekunnin' : 'sekuntia';
              break;

            case 'm':
              return isFuture ? 'minuutin' : 'minuutti';

            case 'mm':
              result = isFuture ? 'minuutin' : 'minuuttia';
              break;

            case 'h':
              return isFuture ? 'tunnin' : 'tunti';

            case 'hh':
              result = isFuture ? 'tunnin' : 'tuntia';
              break;

            case 'd':
              return isFuture ? 'päivän' : 'päivä';

            case 'dd':
              result = isFuture ? 'päivän' : 'päivää';
              break;

            case 'M':
              return isFuture ? 'kuukauden' : 'kuukausi';

            case 'MM':
              result = isFuture ? 'kuukauden' : 'kuukautta';
              break;

            case 'y':
              return isFuture ? 'vuoden' : 'vuosi';

            case 'yy':
              result = isFuture ? 'vuoden' : 'vuotta';
              break;
          }

          result = verbalNumber(number, isFuture) + ' ' + result;
          return result;
        }

        function verbalNumber(number, isFuture) {
          return number < 10 ? isFuture ? numbersFuture[number] : numbersPast[number] : number;
        }

        var fi = moment.defineLocale('fi', {
          months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),
          monthsShort: 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),
          weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),
          weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),
          weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),
          longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD.MM.YYYY',
            LL: 'Do MMMM[ta] YYYY',
            LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',
            LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',
            l: 'D.M.YYYY',
            ll: 'Do MMM YYYY',
            lll: 'Do MMM YYYY, [klo] HH.mm',
            llll: 'ddd, Do MMM YYYY, [klo] HH.mm'
          },
          calendar: {
            sameDay: '[tänään] [klo] LT',
            nextDay: '[huomenna] [klo] LT',
            nextWeek: 'dddd [klo] LT',
            lastDay: '[eilen] [klo] LT',
            lastWeek: '[viime] dddd[na] [klo] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s päästä',
            past: '%s sitten',
            s: translate,
            ss: translate,
            m: translate,
            mm: translate,
            h: translate,
            hh: translate,
            d: translate,
            dd: translate,
            M: translate,
            MM: translate,
            y: translate,
            yy: translate
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return fi;
      });
      /***/

    },

    /***/
    "gjCT":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/ar-sa.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function gjCT(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Arabic (Saudi Arabia) [ar-sa]
      //! author : Suhail Alkowaileet : https://github.com/xsoh
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var symbolMap = {
          1: '١',
          2: '٢',
          3: '٣',
          4: '٤',
          5: '٥',
          6: '٦',
          7: '٧',
          8: '٨',
          9: '٩',
          0: '٠'
        },
            numberMap = {
          '١': '1',
          '٢': '2',
          '٣': '3',
          '٤': '4',
          '٥': '5',
          '٦': '6',
          '٧': '7',
          '٨': '8',
          '٩': '9',
          '٠': '0'
        };
        var arSa = moment.defineLocale('ar-sa', {
          months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
          monthsShort: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
          weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
          weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
          weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm'
          },
          meridiemParse: /ص|م/,
          isPM: function isPM(input) {
            return 'م' === input;
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 12) {
              return 'ص';
            } else {
              return 'م';
            }
          },
          calendar: {
            sameDay: '[اليوم على الساعة] LT',
            nextDay: '[غدا على الساعة] LT',
            nextWeek: 'dddd [على الساعة] LT',
            lastDay: '[أمس على الساعة] LT',
            lastWeek: 'dddd [على الساعة] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'في %s',
            past: 'منذ %s',
            s: 'ثوان',
            ss: '%d ثانية',
            m: 'دقيقة',
            mm: '%d دقائق',
            h: 'ساعة',
            hh: '%d ساعات',
            d: 'يوم',
            dd: '%d أيام',
            M: 'شهر',
            MM: '%d أشهر',
            y: 'سنة',
            yy: '%d سنوات'
          },
          preparse: function preparse(string) {
            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
              return numberMap[match];
            }).replace(/،/g, ',');
          },
          postformat: function postformat(string) {
            return string.replace(/\d/g, function (match) {
              return symbolMap[match];
            }).replace(/,/g, '،');
          },
          week: {
            dow: 0,
            // Sunday is the first day of the week.
            doy: 6 // The week that contains Jan 6th is the first week of the year.

          }
        });
        return arSa;
      });
      /***/

    },

    /***/
    "gren":
    /*!***************************************************************************!*\
      !*** ./node_modules/ngx-ui-loader/__ivy_ngcc__/fesm2015/ngx-ui-loader.js ***!
      \***************************************************************************/

    /*! exports provided: NgxUiLoaderHttpModule, NgxUiLoaderModule, NgxUiLoaderRouterModule, NgxUiLoaderService, PB_DIRECTION, POSITION, SPINNER, ɵa, ɵb, ɵc, ɵd, ɵe, ɵf */

    /***/
    function gren(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgxUiLoaderHttpModule", function () {
        return NgxUiLoaderHttpModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgxUiLoaderModule", function () {
        return NgxUiLoaderModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgxUiLoaderRouterModule", function () {
        return NgxUiLoaderRouterModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgxUiLoaderService", function () {
        return NgxUiLoaderService;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PB_DIRECTION", function () {
        return PB_DIRECTION;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "POSITION", function () {
        return POSITION;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SPINNER", function () {
        return SPINNER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵa", function () {
        return NGX_UI_LOADER_CONFIG_TOKEN;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵb", function () {
        return NgxUiLoaderComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵc", function () {
        return NgxUiLoaderBlurredDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵd", function () {
        return NGX_UI_LOADER_ROUTER_CONFIG_TOKEN;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵe", function () {
        return NgxUiLoaderHttpInterceptor;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵf", function () {
        return NGX_UI_LOADER_HTTP_CONFIG_TOKEN;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/platform-browser */
      "jhN1");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var _angular_router__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @angular/router */
      "tyNb");
      /* harmony import */


      var _angular_common_http__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! @angular/common/http */
      "tk/3");
      /* eslint-disable @typescript-eslint/naming-convention */

      /**
       * Available spinner types
       */


      function NgxUiLoaderComponent_div_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div", 9);
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("height", ctx_r0.pbThickness, "px")("color", ctx_r0.pbColor);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("ngx-position-absolute", ctx_r0.loaderId !== ctx_r0.defaultConfig.masterLoaderId)("loading-foreground", ctx_r0.showForeground)("foreground-closing", ctx_r0.foregroundClosing)("fast-closing", ctx_r0.foregroundClosing && ctx_r0.fastFadeOut);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngClass", "ngx-progress-bar-" + ctx_r0.pbDirection);
        }
      }

      function NgxUiLoaderComponent_img_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "img", 10);
        }

        if (rf & 2) {
          var ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("width", ctx_r1.logoSize, "px")("height", ctx_r1.logoSize, "px")("top", ctx_r1.logoTop);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngClass", ctx_r1.logoPosition)("src", ctx_r1.trustedLogoUrl, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsanitizeUrl"]);
        }
      }

      function NgxUiLoaderComponent_div_4_div_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div");
        }
      }

      function NgxUiLoaderComponent_div_4_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgxUiLoaderComponent_div_4_div_1_Template, 1, 0, "div", 11);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"](ctx_r2.fgSpinnerClass);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx_r2.fgDivs);
        }
      }

      function NgxUiLoaderComponent_ng_template_5_ng_container_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainer"](0);
        }
      }

      function NgxUiLoaderComponent_ng_template_5_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgxUiLoaderComponent_ng_template_5_ng_container_0_Template, 1, 0, "ng-container", 12);
        }

        if (rf & 2) {
          var ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r4.fgsTemplate);
        }
      }

      function NgxUiLoaderComponent_div_10_div_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div");
        }
      }

      function NgxUiLoaderComponent_div_10_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, NgxUiLoaderComponent_div_10_div_1_Template, 1, 0, "div", 11);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"](ctx_r5.bgSpinnerClass);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx_r5.bgDivs);
        }
      }

      function NgxUiLoaderComponent_ng_template_11_ng_container_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainer"](0);
        }
      }

      function NgxUiLoaderComponent_ng_template_11_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgxUiLoaderComponent_ng_template_11_ng_container_0_Template, 1, 0, "ng-container", 12);
        }

        if (rf & 2) {
          var ctx_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r7.bgsTemplate);
        }
      }

      var SPINNER;

      (function (SPINNER) {
        SPINNER["ballScaleMultiple"] = "ball-scale-multiple";
        SPINNER["ballSpin"] = "ball-spin";
        SPINNER["ballSpinClockwise"] = "ball-spin-clockwise";
        SPINNER["ballSpinClockwiseFadeRotating"] = "ball-spin-clockwise-fade-rotating";
        SPINNER["ballSpinFadeRotating"] = "ball-spin-fade-rotating";
        SPINNER["chasingDots"] = "chasing-dots";
        SPINNER["circle"] = "circle";
        SPINNER["cubeGrid"] = "cube-grid";
        SPINNER["doubleBounce"] = "double-bounce";
        SPINNER["fadingCircle"] = "fading-circle";
        SPINNER["foldingCube"] = "folding-cube";
        SPINNER["pulse"] = "pulse";
        SPINNER["rectangleBounce"] = "rectangle-bounce";
        SPINNER["rectangleBounceParty"] = "rectangle-bounce-party";
        SPINNER["rectangleBouncePulseOut"] = "rectangle-bounce-pulse-out";
        SPINNER["rectangleBouncePulseOutRapid"] = "rectangle-bounce-pulse-out-rapid";
        SPINNER["rotatingPlane"] = "rotating-plane";
        SPINNER["squareJellyBox"] = "square-jelly-box";
        SPINNER["squareLoader"] = "square-loader";
        SPINNER["threeBounce"] = "three-bounce";
        SPINNER["threeStrings"] = "three-strings";
        SPINNER["wanderingCubes"] = "wandering-cubes";
      })(SPINNER || (SPINNER = {}));
      /**
       * Available postions
       */


      var POSITION;

      (function (POSITION) {
        POSITION["bottomCenter"] = "bottom-center";
        POSITION["bottomLeft"] = "bottom-left";
        POSITION["bottomRight"] = "bottom-right";
        POSITION["centerCenter"] = "center-center";
        POSITION["centerLeft"] = "center-left";
        POSITION["centerRight"] = "center-right";
        POSITION["topCenter"] = "top-center";
        POSITION["topLeft"] = "top-left";
        POSITION["topRight"] = "top-right";
      })(POSITION || (POSITION = {}));
      /**
       * Progress bar directions
       */


      var PB_DIRECTION;

      (function (PB_DIRECTION) {
        PB_DIRECTION["leftToRight"] = "ltr";
        PB_DIRECTION["rightToLeft"] = "rtl";
      })(PB_DIRECTION || (PB_DIRECTION = {}));
      /**
       * The default value of foreground task id
       */


      var DEFAULT_FG_TASK_ID = 'fg-default';
      /**
       * The default value of background task id
       */

      var DEFAULT_BG_TASK_ID = 'bg-default';
      /**
       * The default value of loader id
       */

      var DEFAULT_MASTER_LOADER_ID = 'master';
      var DEFAULT_TIME = {};
      var MIN_DELAY = 0;
      var MIN_TIME = 0;
      var CLOSING_TIME = 1001;
      var FAST_CLOSING_TIME = 601;
      var BACKGROUND = false;
      var FOREGROUND = true;
      var OVERLAY_DISAPPEAR_TIME = 500;
      var FAST_OVERLAY_DISAPPEAR_TIME = 300;
      /**
       * Http loader taskId
       */

      var HTTP_LOADER_TASK_ID = '$_http-loader';
      /**
       * Router loader taskId
       */

      var ROUTER_LOADER_TASK_ID = '$_router_loader';
      /**
       * The configuration of spinners
       */

      var SPINNER_CONFIG = {
        'ball-scale-multiple': {
          divs: 3,
          "class": 'sk-ball-scale-multiple'
        },
        'ball-spin': {
          divs: 8,
          "class": 'sk-ball-spin'
        },
        'ball-spin-clockwise': {
          divs: 8,
          "class": 'sk-ball-spin-clockwise'
        },
        'ball-spin-clockwise-fade-rotating': {
          divs: 8,
          "class": 'sk-ball-spin-clockwise-fade-rotating'
        },
        'ball-spin-fade-rotating': {
          divs: 8,
          "class": 'sk-ball-spin-fade-rotating'
        },
        'chasing-dots': {
          divs: 2,
          "class": 'sk-chasing-dots'
        },
        circle: {
          divs: 12,
          "class": 'sk-circle'
        },
        'cube-grid': {
          divs: 9,
          "class": 'sk-cube-grid'
        },
        'double-bounce': {
          divs: 2,
          "class": 'sk-double-bounce'
        },
        'fading-circle': {
          divs: 12,
          "class": 'sk-fading-circle'
        },
        'folding-cube': {
          divs: 4,
          "class": 'sk-folding-cube'
        },
        pulse: {
          divs: 1,
          "class": 'sk-pulse'
        },
        'rectangle-bounce': {
          divs: 5,
          "class": 'sk-rectangle-bounce'
        },
        'rectangle-bounce-party': {
          divs: 5,
          "class": 'sk-rectangle-bounce-party'
        },
        'rectangle-bounce-pulse-out': {
          divs: 5,
          "class": 'sk-rectangle-bounce-pulse-out'
        },
        'rectangle-bounce-pulse-out-rapid': {
          divs: 5,
          "class": 'sk-rectangle-bounce-pulse-out-rapid'
        },
        'rotating-plane': {
          divs: 1,
          "class": 'sk-rotating-plane'
        },
        'square-jelly-box': {
          divs: 2,
          "class": 'sk-square-jelly-box'
        },
        'square-loader': {
          divs: 1,
          "class": 'sk-square-loader'
        },
        'three-bounce': {
          divs: 3,
          "class": 'sk-three-bounce'
        },
        'three-strings': {
          divs: 3,
          "class": 'sk-three-strings'
        },
        'wandering-cubes': {
          divs: 2,
          "class": 'sk-wandering-cubes'
        }
      };
      /**
       * The default configuration of ngx-ui-loader
       */

      var DEFAULT_CONFIG = {
        bgsColor: '#00ACC1',
        bgsOpacity: 0.5,
        bgsPosition: POSITION.bottomRight,
        bgsSize: 60,
        bgsType: SPINNER.ballSpinClockwise,
        blur: 5,
        delay: 0,
        fastFadeOut: false,
        fgsColor: '#00ACC1',
        fgsPosition: POSITION.centerCenter,
        fgsSize: 60,
        fgsType: SPINNER.ballSpinClockwise,
        gap: 24,
        logoPosition: POSITION.centerCenter,
        logoSize: 120,
        logoUrl: '',
        masterLoaderId: DEFAULT_MASTER_LOADER_ID,
        overlayBorderRadius: '0',
        overlayColor: 'rgba(40, 40, 40, 0.8)',
        pbColor: '#00ACC1',
        pbDirection: PB_DIRECTION.leftToRight,
        pbThickness: 3,
        hasProgressBar: true,
        text: '',
        textColor: '#FFFFFF',
        textPosition: POSITION.centerCenter,
        maxTime: -1,
        minTime: 300
      };
      /**
       * Injection token for ngx-ui-loader configuration
       */

      var NGX_UI_LOADER_CONFIG_TOKEN = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('ngxUiLoaderCustom.config');

      var NgxUiLoaderService = /*#__PURE__*/function () {
        /**
         * Constructor
         */
        function NgxUiLoaderService(config) {
          _classCallCheck2(this, NgxUiLoaderService);

          this.config = config;
          this.defaultConfig = Object.assign({}, DEFAULT_CONFIG);

          if (this.config) {
            if (this.config.minTime && this.config.minTime < MIN_TIME) {
              this.config.minTime = MIN_TIME;
            }

            this.defaultConfig = Object.assign(Object.assign({}, this.defaultConfig), this.config);
          }

          this.loaders = {};
          this.showForeground = new rxjs__WEBPACK_IMPORTED_MODULE_1__["BehaviorSubject"]({
            loaderId: '',
            isShow: false
          });
          this.showForeground$ = this.showForeground.asObservable();
          this.showBackground = new rxjs__WEBPACK_IMPORTED_MODULE_1__["BehaviorSubject"]({
            loaderId: '',
            isShow: false
          });
          this.showBackground$ = this.showBackground.asObservable();
          this.fgClosing = new rxjs__WEBPACK_IMPORTED_MODULE_1__["BehaviorSubject"]({
            loaderId: '',
            isShow: false
          });
          this.foregroundClosing$ = this.fgClosing.asObservable();
          this.bgClosing = new rxjs__WEBPACK_IMPORTED_MODULE_1__["BehaviorSubject"]({
            loaderId: '',
            isShow: false
          });
          this.backgroundClosing$ = this.bgClosing.asObservable();
        }
        /**
         * For internal use only.
         *
         * @docs-private
         */


        _createClass2(NgxUiLoaderService, [{
          key: "bindLoaderData",
          value: function bindLoaderData(loaderId) {
            var isMaster = loaderId === this.defaultConfig.masterLoaderId;

            if (this.loaders[loaderId]) {
              if (this.loaders[loaderId].isBound) {
                throw new Error("[ngx-ui-loader] - loaderId \"".concat(loaderId, "\" is duplicated."));
              }

              this.loaders[loaderId].isBound = true;
              this.loaders[loaderId].isMaster = isMaster; // emit showEvent after data loader is bound

              if (this.hasRunningTask(FOREGROUND, loaderId)) {
                this.showForeground.next({
                  loaderId: loaderId,
                  isShow: true
                });
              } else {
                if (this.hasRunningTask(BACKGROUND, loaderId)) {
                  this.showBackground.next({
                    loaderId: loaderId,
                    isShow: true
                  });
                }
              }
            } else {
              this.createLoaderData(loaderId, isMaster, true);
            }
          }
          /**
           * For internal use only.
           *
           * @docs-private
           */

        }, {
          key: "destroyLoaderData",
          value: function destroyLoaderData(loaderId) {
            this.stopAllLoader(loaderId);
            delete this.loaders[loaderId];
          }
          /**
           * Get default loader configuration
           *
           * @returns default configuration object
           */

        }, {
          key: "getDefaultConfig",
          value: function getDefaultConfig() {
            return Object.assign({}, this.defaultConfig);
          }
          /**
           * Get all the loaders
           */

        }, {
          key: "getLoaders",
          value: function getLoaders() {
            return JSON.parse(JSON.stringify(this.loaders));
          }
          /**
           * Get data of a specified loader. If loaderId is not provided, it will return data of
           * master loader(if existed). Otherwise null is returned.
           */

        }, {
          key: "getLoader",
          value: function getLoader(loaderId) {
            loaderId = loaderId ? loaderId : this.defaultConfig.masterLoaderId;

            if (this.loaders[loaderId]) {
              return JSON.parse(JSON.stringify(this.loaders[loaderId]));
            }

            return null;
          }
          /**
           * Start the foreground loading of loader having `loaderId` with a specified `taskId`.
           * The loading is only closed off when all taskIds of that loader are called with stopLoader() method.
           *
           * @param loaderId the loader Id
           * @param taskId the optional task Id of the loading. taskId is set to 'fd-default' by default.
           */

        }, {
          key: "startLoader",
          value: function startLoader(loaderId) {
            var taskId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_FG_TASK_ID;
            var time = arguments.length > 2 ? arguments[2] : undefined;

            if (!this.readyToStart(loaderId, taskId, true, time)) {
              return;
            }

            if (!this.loaders[loaderId].tasks[taskId].isOtherRunning) {
              // no other foreground task running
              if (this.hasRunningTask(BACKGROUND, loaderId)) {
                this.backgroundCloseout(loaderId);
                this.showBackground.next({
                  loaderId: loaderId,
                  isShow: false
                });
              }

              this.showForeground.next({
                loaderId: loaderId,
                isShow: true
              });
            }
          }
          /**
           * Start the foreground loading of master loader with a specified `taskId`.
           * The loading is only closed off when all taskIds of that loader are called with stop() method.
           * NOTE: Really this function just wraps startLoader() function
           *
           * @param taskId the optional task Id of the loading. taskId is set to 'fd-default' by default.
           */

        }, {
          key: "start",
          value: function start() {
            var taskId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_FG_TASK_ID;
            var time = arguments.length > 1 ? arguments[1] : undefined;
            this.startLoader(this.defaultConfig.masterLoaderId, taskId, time);
          }
          /**
           * Start the background loading of loader having `loaderId` with a specified `taskId`.
           * The loading is only closed off when all taskIds of that loader are called with stopLoaderBackground() method.
           *
           * @param loaderId the loader Id
           * @param taskId the optional task Id of the loading. taskId is set to 'bg-default' by default.
           */

        }, {
          key: "startBackgroundLoader",
          value: function startBackgroundLoader(loaderId) {
            var taskId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_BG_TASK_ID;
            var time = arguments.length > 2 ? arguments[2] : undefined;

            if (!this.readyToStart(loaderId, taskId, false, time)) {
              return;
            }

            if (!this.hasRunningTask(FOREGROUND, loaderId) && !this.loaders[loaderId].tasks[taskId].isOtherRunning) {
              this.showBackground.next({
                loaderId: loaderId,
                isShow: true
              });
            }
          }
          /**
           * Start the background loading of master loader with a specified `taskId`.
           * The loading is only closed off when all taskIds of that loader are called with stopBackground() method.
           * NOTE: Really this function just wraps startBackgroundLoader() function
           *
           * @param taskId the optional task Id of the loading. taskId is set to 'bg-default' by default.
           */

        }, {
          key: "startBackground",
          value: function startBackground() {
            var taskId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_BG_TASK_ID;
            var time = arguments.length > 1 ? arguments[1] : undefined;
            this.startBackgroundLoader(this.defaultConfig.masterLoaderId, taskId, time);
          }
          /**
           * Stop a foreground loading of loader having `loaderId` with specific `taskId`
           *
           * @param loaderId the loader Id
           * @param taskId the optional task Id to stop. If not provided, 'fg-default' is used.
           * @returns Object
           */

        }, {
          key: "stopLoader",
          value: function stopLoader(loaderId) {
            var _this747 = this;

            var taskId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_FG_TASK_ID;

            if (!this.readyToStop(loaderId, taskId)) {
              return;
            }

            if (!this.hasRunningTask(FOREGROUND, loaderId)) {
              this.foregroundCloseout(loaderId);
              this.showForeground.next({
                loaderId: loaderId,
                isShow: false
              });

              if (this.hasRunningTask(BACKGROUND, loaderId)) {
                setTimeout(function () {
                  if (_this747.hasRunningTask(BACKGROUND, loaderId)) {
                    // still have background tasks
                    _this747.showBackground.next({
                      loaderId: loaderId,
                      isShow: true
                    });
                  }
                }, this.defaultConfig.fastFadeOut ? FAST_OVERLAY_DISAPPEAR_TIME : OVERLAY_DISAPPEAR_TIME);
              }
            }
          }
          /**
           * Stop a foreground loading of master loader with specific `taskId`
           *
           * @param taskId the optional task Id to stop. If not provided, 'fg-default' is used.
           * @returns Object
           */

        }, {
          key: "stop",
          value: function stop() {
            var taskId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_FG_TASK_ID;
            this.stopLoader(this.defaultConfig.masterLoaderId, taskId);
          }
          /**
           * Stop a background loading of loader having `loaderId` with specific `taskId`
           *
           * @param loaderId the loader Id
           * @param taskId the optional task Id to stop. If not provided, 'bg-default' is used.
           * @returns Object
           */

        }, {
          key: "stopBackgroundLoader",
          value: function stopBackgroundLoader(loaderId) {
            var taskId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_BG_TASK_ID;

            if (!this.readyToStop(loaderId, taskId)) {
              return;
            }

            if (!this.hasRunningTask(FOREGROUND, loaderId) && !this.hasRunningTask(BACKGROUND, loaderId)) {
              this.backgroundCloseout(loaderId);
              this.showBackground.next({
                loaderId: loaderId,
                isShow: false
              });
            }
          }
          /**
           * Stop a background loading of master loader with specific taskId
           *
           * @param taskId the optional task Id to stop. If not provided, 'bg-default' is used.
           * @returns Object
           */

        }, {
          key: "stopBackground",
          value: function stopBackground() {
            var taskId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_BG_TASK_ID;
            this.stopBackgroundLoader(this.defaultConfig.masterLoaderId, taskId);
          }
          /**
           * Stop all the background and foreground loadings of loader having `loaderId`
           *
           * @param loaderId the loader Id
           */

        }, {
          key: "stopAllLoader",
          value: function stopAllLoader(loaderId) {
            if (!this.loaders[loaderId]) {
              console.warn("[ngx-ui-loader] - loaderId \"".concat(loaderId, "\" does not exist."));
              return;
            }

            if (this.hasRunningTask(FOREGROUND, loaderId)) {
              this.foregroundCloseout(loaderId);
              this.showForeground.next({
                loaderId: loaderId,
                isShow: false
              });
            } else if (this.hasRunningTask(BACKGROUND, loaderId)) {
              this.backgroundCloseout(loaderId);
              this.showBackground.next({
                loaderId: loaderId,
                isShow: false
              });
            }

            this.clearAllTimers(this.loaders[loaderId].tasks);
            this.loaders[loaderId].tasks = {};
          }
          /**
           * Stop all the background and foreground loadings of master loader
           */

        }, {
          key: "stopAll",
          value: function stopAll() {
            this.stopAllLoader(this.defaultConfig.masterLoaderId);
          }
          /**
           * Check whether the specified loader has a running task with the given `taskId`.
           * If no `taskId` specified, it will check whether the loader has any running tasks.
           * For internal use only.
           *
           * @docs-private
           * @param isForeground foreground task or background task
           * @param loaderId the loader Id
           * @param taskId the optional task Id
           * @returns boolean
           */

        }, {
          key: "hasRunningTask",
          value: function hasRunningTask(isForeground, loaderId, taskId) {
            if (this.loaders[loaderId]) {
              var tasks = this.loaders[loaderId].tasks;

              if (taskId) {
                return tasks[taskId] ? tasks[taskId].startAt ? true : false : false;
              }

              return Object.keys(tasks).some(function (id) {
                return !!tasks[id].startAt && tasks[id].isForeground === isForeground;
              });
            }

            return false;
          }
          /**
           * Create loader data if it does not exist
           *
           * @docs-private
           */

        }, {
          key: "createLoaderData",
          value: function createLoaderData(loaderId, isMaster, isBound) {
            if (!this.loaders[loaderId]) {
              this.loaders[loaderId] = {
                loaderId: loaderId,
                tasks: {},
                isMaster: isMaster,
                isBound: isBound
              };
            }
          }
          /**
           * Manage to close foreground loading
           *
           * @docs-private
           * @param loaderId the loader id
           */

        }, {
          key: "foregroundCloseout",
          value: function foregroundCloseout(loaderId) {
            var _this748 = this;

            this.fgClosing.next({
              loaderId: loaderId,
              isShow: true
            });
            setTimeout(function () {
              _this748.fgClosing.next({
                loaderId: loaderId,
                isShow: false
              });
            }, this.defaultConfig.fastFadeOut ? FAST_CLOSING_TIME : CLOSING_TIME);
          }
          /**
           * Manage to close background loading
           *
           * @docs-private
           * @param loaderId the loader id
           */

        }, {
          key: "backgroundCloseout",
          value: function backgroundCloseout(loaderId) {
            var _this749 = this;

            this.bgClosing.next({
              loaderId: loaderId,
              isShow: true
            });
            setTimeout(function () {
              _this749.bgClosing.next({
                loaderId: loaderId,
                isShow: false
              });
            }, this.defaultConfig.fastFadeOut ? FAST_CLOSING_TIME : CLOSING_TIME);
          }
          /**
           * Clear all timers of the given task
           *
           * @docs-private
           */

        }, {
          key: "clearTimers",
          value: function clearTimers(task) {
            clearTimeout(task.delayTimer);
            clearTimeout(task.maxTimer);
            clearTimeout(task.minTimer);
          }
          /**
           * Clear all timers of the given tasks
           *
           * @docs-private
           */

        }, {
          key: "clearAllTimers",
          value: function clearAllTimers(tasks) {
            var _this750 = this;

            Object.keys(tasks).map(function (id) {
              _this750.clearTimers(tasks[id]);
            });
          }
          /**
           * @docs-private
           */

        }, {
          key: "readyToStart",
          value: function readyToStart(loaderId, taskId, isForeground) {
            var time = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULT_TIME;
            this.createLoaderData(loaderId, undefined, false);
            var isOtherRunning = this.hasRunningTask(isForeground, loaderId);

            if (!this.loaders[loaderId].tasks[taskId]) {
              this.loaders[loaderId].tasks[taskId] = {
                taskId: taskId,
                isForeground: isForeground,
                minTime: time.minTime >= MIN_TIME ? time.minTime : this.defaultConfig.minTime,
                maxTime: time.maxTime ? time.maxTime : this.defaultConfig.maxTime,
                delay: time.delay >= MIN_DELAY ? time.delay : this.defaultConfig.delay
              };
            } else {
              if (this.loaders[loaderId].tasks[taskId].isForeground !== isForeground) {
                throw new Error("[ngx-ui-loader] - taskId \"".concat(taskId, "\" is duplicated."));
              }
            }

            if (this.setDelayTimer(this.loaders[loaderId].tasks[taskId], loaderId)) {
              return false;
            }

            this.loaders[loaderId].tasks[taskId] = Object.assign(Object.assign({}, this.loaders[loaderId].tasks[taskId]), {
              isOtherRunning: isOtherRunning,
              startAt: Date.now()
            });
            this.setMaxTimer(this.loaders[loaderId].tasks[taskId], loaderId);

            if (!this.loaders[loaderId].isBound) {
              return false;
            }

            return true;
          }
          /**
           * @docs-private
           */

        }, {
          key: "readyToStop",
          value: function readyToStop(loaderId, taskId) {
            if (!this.loaders[loaderId]) {
              console.warn("[ngx-ui-loader] - loaderId \"".concat(loaderId, "\" does not exist."));
              return false;
            }

            var task = this.loaders[loaderId].tasks[taskId];

            if (!task) {
              return false;
            }

            if (task.isDelayed) {
              this.clearTimers(task);
              delete this.loaders[loaderId].tasks[taskId];
              return false;
            }

            if (this.setMinTimer(task, loaderId)) {
              return false;
            }

            this.clearTimers(task);
            delete this.loaders[loaderId].tasks[taskId];
            return true;
          }
          /**
           * Set delay timer, if `delay` > 0
           *
           * @docs-private
           * @returns boolean
           */

        }, {
          key: "setDelayTimer",
          value: function setDelayTimer(task, loaderId) {
            var _this751 = this;

            if (task.delay > MIN_DELAY) {
              if (task.isDelayed) {
                return true;
              }

              if (!task.delayTimer) {
                task.isDelayed = true;
                task.delayTimer = setTimeout(function () {
                  task.isDelayed = false;

                  if (task.isForeground) {
                    _this751.startLoader(loaderId, task.taskId);
                  } else {
                    _this751.startBackgroundLoader(loaderId, task.taskId);
                  }
                }, task.delay);
                return true;
              }
            }

            return false;
          }
          /**
           * Set maxTimer if `maxTime` > `minTime`
           *
           * @docs-private
           * @returns boolean
           */

        }, {
          key: "setMaxTimer",
          value: function setMaxTimer(task, loaderId) {
            var _this752 = this;

            if (task.maxTime > task.minTime) {
              // restart the task, reset maxTimer
              clearTimeout(task.maxTimer);
              task.maxTimer = setTimeout(function () {
                if (task.isForeground) {
                  _this752.stopLoader(loaderId, task.taskId);
                } else {
                  _this752.stopBackgroundLoader(loaderId, task.taskId);
                }
              }, task.maxTime);
            }
          }
          /**
           * Set minTimer if `startAt` + `minTime` > `Date.now()`
           *
           * @docs-private
           * @returns boolean
           */

        }, {
          key: "setMinTimer",
          value: function setMinTimer(task, loaderId) {
            var _this753 = this;

            var now = Date.now();

            if (task.startAt) {
              if (task.startAt + task.minTime > now) {
                task.minTimer = setTimeout(function () {
                  if (task.isForeground) {
                    _this753.stopLoader(loaderId, task.taskId);
                  } else {
                    _this753.stopBackgroundLoader(loaderId, task.taskId);
                  }
                }, task.startAt + task.minTime - now);
                return true;
              }
            }

            return false;
          }
        }]);

        return NgxUiLoaderService;
      }();

      NgxUiLoaderService.ɵfac = function NgxUiLoaderService_Factory(t) {
        return new (t || NgxUiLoaderService)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NGX_UI_LOADER_CONFIG_TOKEN, 8));
      };

      NgxUiLoaderService.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({
        factory: function NgxUiLoaderService_Factory() {
          return new NgxUiLoaderService(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(NGX_UI_LOADER_CONFIG_TOKEN, 8));
        },
        token: NgxUiLoaderService,
        providedIn: "root"
      });

      NgxUiLoaderService.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NGX_UI_LOADER_CONFIG_TOKEN]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgxUiLoaderService, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NGX_UI_LOADER_CONFIG_TOKEN]
            }]
          }];
        }, null);
      })();
      /* eslint-disable @angular-eslint/component-selector */


      var NgxUiLoaderComponent = /*#__PURE__*/function () {
        /**
         * Constructor
         */
        function NgxUiLoaderComponent(domSanitizer, changeDetectorRef, ngxService) {
          _classCallCheck2(this, NgxUiLoaderComponent);

          this.domSanitizer = domSanitizer;
          this.changeDetectorRef = changeDetectorRef;
          this.ngxService = ngxService;
          this.initialized = false;
          this.defaultConfig = this.ngxService.getDefaultConfig();
          this.bgsColor = this.defaultConfig.bgsColor;
          this.bgsOpacity = this.defaultConfig.bgsOpacity;
          this.bgsPosition = this.defaultConfig.bgsPosition;
          this.bgsSize = this.defaultConfig.bgsSize;
          this.bgsType = this.defaultConfig.bgsType;
          this.fastFadeOut = this.defaultConfig.fastFadeOut;
          this.fgsColor = this.defaultConfig.fgsColor;
          this.fgsPosition = this.defaultConfig.fgsPosition;
          this.fgsSize = this.defaultConfig.fgsSize;
          this.fgsType = this.defaultConfig.fgsType;
          this.gap = this.defaultConfig.gap;
          this.loaderId = this.defaultConfig.masterLoaderId;
          this.logoPosition = this.defaultConfig.logoPosition;
          this.logoSize = this.defaultConfig.logoSize;
          this.logoUrl = this.defaultConfig.logoUrl;
          this.overlayBorderRadius = this.defaultConfig.overlayBorderRadius;
          this.overlayColor = this.defaultConfig.overlayColor;
          this.pbColor = this.defaultConfig.pbColor;
          this.pbDirection = this.defaultConfig.pbDirection;
          this.pbThickness = this.defaultConfig.pbThickness;
          this.hasProgressBar = this.defaultConfig.hasProgressBar;
          this.text = this.defaultConfig.text;
          this.textColor = this.defaultConfig.textColor;
          this.textPosition = this.defaultConfig.textPosition;
        }
        /**
         * On init event
         */


        _createClass2(NgxUiLoaderComponent, [{
          key: "ngOnInit",
          value: function ngOnInit() {
            var _this754 = this;

            this.initializeSpinners();
            this.ngxService.bindLoaderData(this.loaderId);
            this.determinePositions();
            this.trustedLogoUrl = this.domSanitizer.bypassSecurityTrustResourceUrl(this.logoUrl);
            this.showForegroundWatcher = this.ngxService.showForeground$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["filter"])(function (showEvent) {
              return _this754.loaderId === showEvent.loaderId;
            })).subscribe(function (data) {
              _this754.showForeground = data.isShow;

              _this754.changeDetectorRef.markForCheck();
            });
            this.showBackgroundWatcher = this.ngxService.showBackground$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["filter"])(function (showEvent) {
              return _this754.loaderId === showEvent.loaderId;
            })).subscribe(function (data) {
              _this754.showBackground = data.isShow;

              _this754.changeDetectorRef.markForCheck();
            });
            this.foregroundClosingWatcher = this.ngxService.foregroundClosing$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["filter"])(function (showEvent) {
              return _this754.loaderId === showEvent.loaderId;
            })).subscribe(function (data) {
              _this754.foregroundClosing = data.isShow;

              _this754.changeDetectorRef.markForCheck();
            });
            this.backgroundClosingWatcher = this.ngxService.backgroundClosing$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["filter"])(function (showEvent) {
              return _this754.loaderId === showEvent.loaderId;
            })).subscribe(function (data) {
              _this754.backgroundClosing = data.isShow;

              _this754.changeDetectorRef.markForCheck();
            });
            this.initialized = true;
          }
          /**
           * On changes event
           */

        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            if (!this.initialized) {
              return;
            }

            var bgsTypeChange = changes.bgsType;
            var fgsTypeChange = changes.fgsType;
            var logoUrlChange = changes.logoUrl;

            if (fgsTypeChange || bgsTypeChange) {
              this.initializeSpinners();
            }

            this.determinePositions();

            if (logoUrlChange) {
              this.trustedLogoUrl = this.domSanitizer.bypassSecurityTrustResourceUrl(this.logoUrl);
            }
          }
          /**
           * On destroy event
           */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.ngxService.destroyLoaderData(this.loaderId);

            if (this.showForegroundWatcher) {
              this.showForegroundWatcher.unsubscribe();
            }

            if (this.showBackgroundWatcher) {
              this.showBackgroundWatcher.unsubscribe();
            }

            if (this.foregroundClosingWatcher) {
              this.foregroundClosingWatcher.unsubscribe();
            }

            if (this.backgroundClosingWatcher) {
              this.backgroundClosingWatcher.unsubscribe();
            }
          }
          /**
           * Initialize spinners
           */

        }, {
          key: "initializeSpinners",
          value: function initializeSpinners() {
            this.fgDivs = Array(SPINNER_CONFIG[this.fgsType].divs).fill(1);
            this.fgSpinnerClass = SPINNER_CONFIG[this.fgsType]["class"];
            this.bgDivs = Array(SPINNER_CONFIG[this.bgsType].divs).fill(1);
            this.bgSpinnerClass = SPINNER_CONFIG[this.bgsType]["class"];
          }
          /**
           * Determine the positions of spinner, logo and text
           */

        }, {
          key: "determinePositions",
          value: function determinePositions() {
            this.logoTop = 'initial';
            this.spinnerTop = 'initial';
            this.textTop = 'initial';
            var textSize = 24;

            if (this.logoPosition.startsWith('center')) {
              this.logoTop = '50%';
            } else if (this.logoPosition.startsWith('top')) {
              this.logoTop = '30px';
            }

            if (this.fgsPosition.startsWith('center')) {
              this.spinnerTop = '50%';
            } else if (this.fgsPosition.startsWith('top')) {
              this.spinnerTop = '30px';
            }

            if (this.textPosition.startsWith('center')) {
              this.textTop = '50%';
            } else if (this.textPosition.startsWith('top')) {
              this.textTop = '30px';
            }

            if (this.fgsPosition === POSITION.centerCenter) {
              if (this.logoUrl && this.logoPosition === POSITION.centerCenter) {
                if (this.text && this.textPosition === POSITION.centerCenter) {
                  // logo, spinner and text
                  this.logoTop = this.domSanitizer.bypassSecurityTrustStyle("calc(50% - ".concat(this.fgsSize / 2, "px - ").concat(textSize / 2, "px - ").concat(this.gap, "px)"));
                  this.spinnerTop = this.domSanitizer.bypassSecurityTrustStyle("calc(50% + ".concat(this.logoSize / 2, "px - ").concat(textSize / 2, "px)"));
                  this.textTop = this.domSanitizer.bypassSecurityTrustStyle("calc(50% + ".concat(this.logoSize / 2, "px + ").concat(this.gap, "px + ").concat(this.fgsSize / 2, "px)"));
                } else {
                  // logo and spinner
                  this.logoTop = this.domSanitizer.bypassSecurityTrustStyle("calc(50% - ".concat(this.fgsSize / 2, "px - ").concat(this.gap / 2, "px)"));
                  this.spinnerTop = this.domSanitizer.bypassSecurityTrustStyle("calc(50% + ".concat(this.logoSize / 2, "px + ").concat(this.gap / 2, "px)"));
                }
              } else {
                if (this.text && this.textPosition === POSITION.centerCenter) {
                  // spinner and text
                  this.spinnerTop = this.domSanitizer.bypassSecurityTrustStyle("calc(50% - ".concat(textSize / 2, "px - ").concat(this.gap / 2, "px)"));
                  this.textTop = this.domSanitizer.bypassSecurityTrustStyle("calc(50% + ".concat(this.fgsSize / 2, "px + ").concat(this.gap / 2, "px)"));
                }
              }
            } else {
              if (this.logoUrl && this.logoPosition === POSITION.centerCenter && this.text && this.textPosition === POSITION.centerCenter) {
                // logo and text
                this.logoTop = this.domSanitizer.bypassSecurityTrustStyle("calc(50% - ".concat(textSize / 2, "px - ").concat(this.gap / 2, "px)"));
                this.textTop = this.domSanitizer.bypassSecurityTrustStyle("calc(50% + ".concat(this.logoSize / 2, "px + ").concat(this.gap / 2, "px)"));
              }
            }
          }
        }]);

        return NgxUiLoaderComponent;
      }();

      NgxUiLoaderComponent.ɵfac = function NgxUiLoaderComponent_Factory(t) {
        return new (t || NgxUiLoaderComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_platform_browser__WEBPACK_IMPORTED_MODULE_3__["DomSanitizer"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgxUiLoaderService));
      };

      NgxUiLoaderComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: NgxUiLoaderComponent,
        selectors: [["ngx-ui-loader"]],
        inputs: {
          bgsColor: "bgsColor",
          bgsOpacity: "bgsOpacity",
          bgsPosition: "bgsPosition",
          bgsSize: "bgsSize",
          bgsType: "bgsType",
          fgsColor: "fgsColor",
          fgsPosition: "fgsPosition",
          fgsSize: "fgsSize",
          fgsType: "fgsType",
          gap: "gap",
          loaderId: "loaderId",
          logoPosition: "logoPosition",
          logoSize: "logoSize",
          logoUrl: "logoUrl",
          overlayBorderRadius: "overlayBorderRadius",
          overlayColor: "overlayColor",
          pbColor: "pbColor",
          pbDirection: "pbDirection",
          pbThickness: "pbThickness",
          hasProgressBar: "hasProgressBar",
          text: "text",
          textColor: "textColor",
          textPosition: "textPosition",
          bgsTemplate: "bgsTemplate",
          fgsTemplate: "fgsTemplate"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]],
        decls: 13,
        vars: 50,
        consts: [["class", "ngx-progress-bar", 3, "ngx-position-absolute", "ngClass", "height", "color", "loading-foreground", "foreground-closing", "fast-closing", 4, "ngIf"], [1, "ngx-overlay"], ["class", "ngx-loading-logo", 3, "ngClass", "src", "width", "height", "top", 4, "ngIf"], [1, "ngx-foreground-spinner", 3, "ngClass"], [3, "class", 4, "ngIf", "ngIfElse"], ["foregroundTemplate", ""], [1, "ngx-loading-text", 3, "ngClass"], [1, "ngx-background-spinner", 3, "ngClass"], ["backgroundTemplate", ""], [1, "ngx-progress-bar", 3, "ngClass"], [1, "ngx-loading-logo", 3, "ngClass", "src"], [4, "ngFor", "ngForOf"], [4, "ngTemplateOutlet"]],
        template: function NgxUiLoaderComponent_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, NgxUiLoaderComponent_div_0_Template, 1, 13, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "div", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, NgxUiLoaderComponent_img_2_Template, 1, 8, "img", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "div", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](4, NgxUiLoaderComponent_div_4_Template, 2, 3, "div", 4);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](5, NgxUiLoaderComponent_ng_template_5_Template, 1, 1, "ng-template", null, 5, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](7, "div", 6);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](8);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](9, "div", 7);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](10, NgxUiLoaderComponent_div_10_Template, 2, 3, "div", 4);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](11, NgxUiLoaderComponent_ng_template_11_Template, 1, 1, "ng-template", null, 8, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            var _r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](6);

            var _r6 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](12);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.hasProgressBar);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("background-color", ctx.overlayColor)("border-radius", ctx.overlayBorderRadius);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("ngx-position-absolute", ctx.loaderId !== ctx.defaultConfig.masterLoaderId)("loading-foreground", ctx.showForeground)("foreground-closing", ctx.foregroundClosing)("fast-closing", ctx.foregroundClosing && ctx.fastFadeOut);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.logoUrl);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("color", ctx.fgsColor)("width", ctx.fgsSize, "px")("height", ctx.fgsSize, "px")("top", ctx.spinnerTop);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngClass", ctx.fgsPosition);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx.fgsTemplate)("ngIfElse", _r3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("top", ctx.textTop)("color", ctx.textColor);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngClass", ctx.textPosition);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx.text);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("width", ctx.bgsSize, "px")("height", ctx.bgsSize, "px")("color", ctx.bgsColor)("opacity", ctx.bgsOpacity);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("ngx-position-absolute", ctx.loaderId !== ctx.defaultConfig.masterLoaderId)("loading-background", ctx.showBackground)("background-closing", ctx.backgroundClosing)("fast-closing", ctx.backgroundClosing && ctx.fastFadeOut);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngClass", ctx.bgsPosition);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx.bgsTemplate)("ngIfElse", _r6);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_2__["NgClass"], _angular_common__WEBPACK_IMPORTED_MODULE_2__["NgForOf"], _angular_common__WEBPACK_IMPORTED_MODULE_2__["NgTemplateOutlet"]],
        styles: [".ngx-progress-bar[_ngcontent-%COMP%]{position:fixed;top:0;left:0;width:100%;height:3px;z-index:99999!important;display:none;color:#00acc1;overflow:hidden}.ngx-progress-bar.foreground-closing[_ngcontent-%COMP%], .ngx-progress-bar.loading-foreground[_ngcontent-%COMP%]{display:block}.ngx-progress-bar.foreground-closing[_ngcontent-%COMP%]{opacity:0!important;transition:opacity .5s ease-out .5s}.ngx-progress-bar.fast-closing[_ngcontent-%COMP%]{transition:opacity .3s ease-out .3s!important}.ngx-progress-bar[_ngcontent-%COMP%]:after, .ngx-progress-bar[_ngcontent-%COMP%]:before{background-color:currentColor;content:\"\";display:block;width:100%;height:100%;position:absolute;top:0}.ngx-progress-bar-ltr[_ngcontent-%COMP%]:before{transform:translate3d(-100%,0,0)}.ngx-progress-bar-ltr[_ngcontent-%COMP%]:after{animation:progressBar-slide-ltr 12s ease-out 0s 1 normal;transform:translate3d(-5%,0,0)}.ngx-progress-bar-rtl[_ngcontent-%COMP%]:before{transform:translate3d(100%,0,0)}.ngx-progress-bar-rtl[_ngcontent-%COMP%]:after{animation:progressBar-slide-rtl 12s ease-out 0s 1 normal;transform:translate3d(5%,0,0)}.foreground-closing.ngx-progress-bar-ltr[_ngcontent-%COMP%]:before{animation:progressBar-slide-complete-ltr 1s ease-out 0s 1;transform:translateZ(0)}.fast-closing.ngx-progress-bar-ltr[_ngcontent-%COMP%]:before{animation:progressBar-slide-complete-ltr .6s ease-out 0s 1!important}.foreground-closing.ngx-progress-bar-rtl[_ngcontent-%COMP%]:before{animation:progressBar-slide-complete-rtl 1s ease-out 0s 1;transform:translateZ(0)}.fast-closing.ngx-progress-bar-rtl[_ngcontent-%COMP%]:before{animation:progressBar-slide-complete-rtl .6s ease-out 0s 1!important}@keyframes progressBar-slide-ltr{0%{transform:translate3d(-100%,0,0)}to{transform:translate3d(-5%,0,0)}}@keyframes progressBar-slide-rtl{0%{transform:translate3d(100%,0,0)}to{transform:translate3d(5%,0,0)}}@keyframes progressBar-slide-complete-ltr{0%{transform:translate3d(-75%,0,0)}50%{transform:translateZ(0)}}@keyframes progressBar-slide-complete-rtl{0%{transform:translate3d(75%,0,0)}50%{transform:translateZ(0)}}.ngx-overlay[_ngcontent-%COMP%]{position:fixed;top:0;left:0;width:100%;height:100%;z-index:99998!important;background-color:rgba(40,40,40,.8);cursor:progress;display:none}.ngx-overlay.foreground-closing[_ngcontent-%COMP%], .ngx-overlay.loading-foreground[_ngcontent-%COMP%]{display:block}.ngx-overlay.foreground-closing[_ngcontent-%COMP%]{opacity:0!important;transition:opacity .5s ease-out .5s}.ngx-overlay.fast-closing[_ngcontent-%COMP%]{transition:opacity .3s ease-out .3s!important}.ngx-overlay[_ngcontent-%COMP%] > .ngx-foreground-spinner[_ngcontent-%COMP%]{position:fixed;width:60px;height:60px;margin:0;color:#00acc1}.ngx-overlay[_ngcontent-%COMP%] > .ngx-loading-logo[_ngcontent-%COMP%]{position:fixed;margin:0;width:120px;height:120px}.ngx-overlay[_ngcontent-%COMP%] > .ngx-loading-text[_ngcontent-%COMP%]{position:fixed;margin:0;font-family:sans-serif;font-weight:400;font-size:1.2em;color:#fff}.ngx-background-spinner[_ngcontent-%COMP%]{position:fixed;z-index:99997!important;width:60px;height:60px;margin:0;color:#00acc1;opacity:.6;display:none}.ngx-background-spinner.background-closing[_ngcontent-%COMP%], .ngx-background-spinner.loading-background[_ngcontent-%COMP%]{display:block}.ngx-background-spinner.background-closing[_ngcontent-%COMP%]{opacity:0!important;transition:opacity .7s ease-out}.ngx-background-spinner.fast-closing[_ngcontent-%COMP%]{transition:opacity .4s ease-out!important}.ngx-position-absolute[_ngcontent-%COMP%], .ngx-position-absolute[_ngcontent-%COMP%] > .ngx-foreground-spinner[_ngcontent-%COMP%], .ngx-position-absolute[_ngcontent-%COMP%] > .ngx-loading-logo[_ngcontent-%COMP%], .ngx-position-absolute[_ngcontent-%COMP%] > .ngx-loading-text[_ngcontent-%COMP%]{position:absolute!important}.ngx-position-absolute.ngx-progress-bar[_ngcontent-%COMP%]{z-index:99996!important}.ngx-position-absolute.ngx-overlay[_ngcontent-%COMP%]{z-index:99995!important}.ngx-position-absolute.ngx-background-spinner[_ngcontent-%COMP%], .ngx-position-absolute[_ngcontent-%COMP%]   .sk-square-jelly-box[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{z-index:99994!important}.top-left[_ngcontent-%COMP%]{top:30px;left:30px}.top-center[_ngcontent-%COMP%]{top:30px;left:50%;transform:translateX(-50%)}.top-right[_ngcontent-%COMP%]{top:30px;right:30px}.center-left[_ngcontent-%COMP%]{top:50%;left:30px;transform:translateY(-50%)}.center-center[_ngcontent-%COMP%]{top:50%;left:50%;transform:translate(-50%,-50%)}.center-right[_ngcontent-%COMP%]{top:50%;right:30px;transform:translateY(-50%)}.bottom-left[_ngcontent-%COMP%]{bottom:30px;left:30px}.bottom-center[_ngcontent-%COMP%]{bottom:30px;left:50%;transform:translateX(-50%)}.bottom-right[_ngcontent-%COMP%]{bottom:30px;right:30px}.sk-ball-scale-multiple[_ngcontent-%COMP%], .sk-ball-scale-multiple[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{position:relative;box-sizing:border-box}.sk-ball-scale-multiple[_ngcontent-%COMP%]{width:100%;height:100%;font-size:0}.sk-ball-scale-multiple[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:inline-block;float:none;background-color:currentColor;border:0 solid;position:absolute;top:0;left:0;width:100%;height:100%;border-radius:100%;opacity:0;animation:ball-scale-multiple 1s linear 0s infinite}.sk-ball-scale-multiple[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){animation-delay:.2s}.sk-ball-scale-multiple[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){animation-delay:.4s}@keyframes ball-scale-multiple{0%{opacity:0;transform:scale(0)}5%{opacity:.75}to{opacity:0;transform:scale(1)}}.sk-ball-spin[_ngcontent-%COMP%], .sk-ball-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{position:relative;box-sizing:border-box}.sk-ball-spin[_ngcontent-%COMP%]{width:100%;height:100%;font-size:0}.sk-ball-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:inline-block;float:none;background-color:currentColor;border:0 solid;position:absolute;top:50%;left:50%;width:25%;height:25%;margin-top:-12.5%;margin-left:-12.5%;border-radius:100%;animation:ball-spin-clockwise 1s ease-in-out infinite}.sk-ball-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{top:5%;left:50%;animation-delay:-1.125s}.sk-ball-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){top:18.1801948466%;left:81.8198051534%;animation-delay:-1.25s}.sk-ball-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){top:50%;left:95%;animation-delay:-1.375s}.sk-ball-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){top:81.8198051534%;left:81.8198051534%;animation-delay:-1.5s}.sk-ball-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){top:94.9999999966%;left:50.0000000005%;animation-delay:-1.625s}.sk-ball-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){top:81.8198046966%;left:18.1801949248%;animation-delay:-1.75s}.sk-ball-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){top:49.9999750815%;left:5.0000051215%;animation-delay:-1.875s}.sk-ball-spin[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){top:18.179464974%;left:18.1803700518%;animation-delay:-2s}@keyframes ball-spin{0%,to{opacity:1;transform:scale(1)}20%{opacity:1}80%{opacity:0;transform:scale(0)}}.sk-ball-spin-clockwise[_ngcontent-%COMP%], .sk-ball-spin-clockwise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{position:relative;box-sizing:border-box}.sk-ball-spin-clockwise[_ngcontent-%COMP%]{width:100%;height:100%;font-size:0}.sk-ball-spin-clockwise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:inline-block;float:none;background-color:currentColor;border:0 solid;position:absolute;top:50%;left:50%;width:25%;height:25%;margin-top:-12.5%;margin-left:-12.5%;border-radius:100%;animation:ball-spin-clockwise 1s ease-in-out infinite}.sk-ball-spin-clockwise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{top:5%;left:50%;animation-delay:-.875s}.sk-ball-spin-clockwise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){top:18.1801948466%;left:81.8198051534%;animation-delay:-.75s}.sk-ball-spin-clockwise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){top:50%;left:95%;animation-delay:-.625s}.sk-ball-spin-clockwise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){top:81.8198051534%;left:81.8198051534%;animation-delay:-.5s}.sk-ball-spin-clockwise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){top:94.9999999966%;left:50.0000000005%;animation-delay:-.375s}.sk-ball-spin-clockwise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){top:81.8198046966%;left:18.1801949248%;animation-delay:-.25s}.sk-ball-spin-clockwise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){top:49.9999750815%;left:5.0000051215%;animation-delay:-.125s}.sk-ball-spin-clockwise[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){top:18.179464974%;left:18.1803700518%;animation-delay:0s}@keyframes ball-spin-clockwise{0%,to{opacity:1;transform:scale(1)}20%{opacity:1}80%{opacity:0;transform:scale(0)}}.sk-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%], .sk-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{position:relative;box-sizing:border-box}.sk-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%]{font-size:0;width:100%;height:100%;animation:ball-spin-clockwise-fade-rotating-rotate 6s linear infinite}.sk-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:inline-block;float:none;background-color:currentColor;border:0 solid;position:absolute;top:50%;left:50%;width:25%;height:25%;margin-top:-12.5%;margin-left:-12.5%;border-radius:100%;animation:ball-spin-clockwise-fade-rotating 1s linear infinite}.sk-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{top:5%;left:50%;animation-delay:-.875s}.sk-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){top:18.1801948466%;left:81.8198051534%;animation-delay:-.75s}.sk-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){top:50%;left:95%;animation-delay:-.625s}.sk-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){top:81.8198051534%;left:81.8198051534%;animation-delay:-.5s}.sk-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){top:94.9999999966%;left:50.0000000005%;animation-delay:-.375s}.sk-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){top:81.8198046966%;left:18.1801949248%;animation-delay:-.25s}.sk-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){top:49.9999750815%;left:5.0000051215%;animation-delay:-.125s}.sk-ball-spin-clockwise-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){top:18.179464974%;left:18.1803700518%;animation-delay:0s}@keyframes ball-spin-clockwise-fade-rotating-rotate{to{transform:rotate(-1turn)}}@keyframes ball-spin-clockwise-fade-rotating{50%{opacity:.25;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.sk-ball-spin-fade-rotating[_ngcontent-%COMP%], .sk-ball-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{position:relative;box-sizing:border-box}.sk-ball-spin-fade-rotating[_ngcontent-%COMP%]{width:100%;height:100%;font-size:0;animation:ball-spin-fade-rotate 6s linear infinite}.sk-ball-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:inline-block;float:none;background-color:currentColor;border:0 solid;position:absolute;top:50%;left:50%;width:25%;height:25%;margin-top:-12.5%;margin-left:-12.5%;border-radius:100%;animation:ball-spin-fade 1s linear infinite}.sk-ball-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{top:5%;left:50%;animation-delay:-1.125s}.sk-ball-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){top:18.1801948466%;left:81.8198051534%;animation-delay:-1.25s}.sk-ball-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){top:50%;left:95%;animation-delay:-1.375s}.sk-ball-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){top:81.8198051534%;left:81.8198051534%;animation-delay:-1.5s}.sk-ball-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){top:94.9999999966%;left:50.0000000005%;animation-delay:-1.625s}.sk-ball-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){top:81.8198046966%;left:18.1801949248%;animation-delay:-1.75s}.sk-ball-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){top:49.9999750815%;left:5.0000051215%;animation-delay:-1.875s}.sk-ball-spin-fade-rotating[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){top:18.179464974%;left:18.1803700518%;animation-delay:-2s}@keyframes ball-spin-fade-rotate{to{transform:rotate(1turn)}}@keyframes ball-spin-fade{0%,to{opacity:1;transform:scale(1)}50%{opacity:.25;transform:scale(.5)}}.sk-chasing-dots[_ngcontent-%COMP%]{margin:auto;width:100%;height:100%;position:absolute;text-align:center;animation:sk-chasingDots-rotate 2s linear infinite}.sk-chasing-dots[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{width:60%;height:60%;display:inline-block;position:absolute;top:0;background-color:currentColor;border-radius:100%;animation:sk-chasingDots-bounce 2s ease-in-out infinite}.sk-chasing-dots[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){top:auto;bottom:0;animation-delay:-1s}@keyframes sk-chasingDots-rotate{to{transform:rotate(1turn)}}@keyframes sk-chasingDots-bounce{0%,to{transform:scale(0)}50%{transform:scale(1)}}.sk-circle[_ngcontent-%COMP%]{margin:auto;width:100%;height:100%;position:relative}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{width:100%;height:100%;position:absolute;left:0;top:0}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:before{content:\"\";display:block;margin:0 auto;width:15%;height:15%;background-color:currentColor;border-radius:100%;animation:sk-circle-bounceDelay 1.2s ease-in-out infinite both}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){transform:rotate(30deg)}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){transform:rotate(60deg)}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){transform:rotate(90deg)}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){transform:rotate(120deg)}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){transform:rotate(150deg)}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){transform:rotate(180deg)}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){transform:rotate(210deg)}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(9){transform:rotate(240deg)}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(10){transform:rotate(270deg)}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(11){transform:rotate(300deg)}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(12){transform:rotate(330deg)}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2):before{animation-delay:-1.1s}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3):before{animation-delay:-1s}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4):before{animation-delay:-.9s}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5):before{animation-delay:-.8s}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6):before{animation-delay:-.7s}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7):before{animation-delay:-.6s}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8):before{animation-delay:-.5s}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(9):before{animation-delay:-.4s}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(10):before{animation-delay:-.3s}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(11):before{animation-delay:-.2s}.sk-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(12):before{animation-delay:-.1s}@keyframes sk-circle-bounceDelay{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}.sk-cube-grid[_ngcontent-%COMP%]{width:100%;height:100%;margin:auto}.sk-cube-grid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{width:33%;height:33%;background-color:currentColor;float:left;animation:sk-cubeGrid-scaleDelay 1.3s ease-in-out infinite}.sk-cube-grid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{animation-delay:.2s}.sk-cube-grid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){animation-delay:.3s}.sk-cube-grid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){animation-delay:.4s}.sk-cube-grid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){animation-delay:.1s}.sk-cube-grid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){animation-delay:.2s}.sk-cube-grid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){animation-delay:.3s}.sk-cube-grid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){animation-delay:0s}.sk-cube-grid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){animation-delay:.1s}.sk-cube-grid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(9){animation-delay:.2s}@keyframes sk-cubeGrid-scaleDelay{0%,70%,to{transform:scaleX(1)}35%{transform:scale3D(0,0,1)}}.sk-double-bounce[_ngcontent-%COMP%]{width:100%;height:100%;position:relative;margin:auto}.sk-double-bounce[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{width:100%;height:100%;border-radius:50%;background-color:currentColor;opacity:.6;position:absolute;top:0;left:0;animation:sk-doubleBounce-bounce 2s ease-in-out infinite}.sk-double-bounce[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){animation-delay:-1s}@keyframes sk-doubleBounce-bounce{0%,to{transform:scale(0)}50%{transform:scale(1)}}.sk-fading-circle[_ngcontent-%COMP%]{margin:auto;width:100%;height:100%;position:relative}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{width:100%;height:100%;position:absolute;left:0;top:0}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:before{content:\"\";display:block;margin:0 auto;width:15%;height:15%;background-color:currentColor;border-radius:100%;animation:sk-fadingCircle-FadeDelay 1.2s ease-in-out infinite both}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){transform:rotate(30deg)}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){transform:rotate(60deg)}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){transform:rotate(90deg)}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){transform:rotate(120deg)}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6){transform:rotate(150deg)}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7){transform:rotate(180deg)}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8){transform:rotate(210deg)}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(9){transform:rotate(240deg)}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(10){transform:rotate(270deg)}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(11){transform:rotate(300deg)}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(12){transform:rotate(330deg)}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2):before{animation-delay:-1.1s}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3):before{animation-delay:-1s}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4):before{animation-delay:-.9s}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5):before{animation-delay:-.8s}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(6):before{animation-delay:-.7s}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(7):before{animation-delay:-.6s}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(8):before{animation-delay:-.5s}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(9):before{animation-delay:-.4s}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(10):before{animation-delay:-.3s}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(11):before{animation-delay:-.2s}.sk-fading-circle[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(12):before{animation-delay:-.1s}@keyframes sk-fadingCircle-FadeDelay{0%,39%,to{opacity:0}40%{opacity:1}}.sk-folding-cube[_ngcontent-%COMP%]{margin:auto;width:100%;height:100%;position:relative;transform:rotate(45deg)}.sk-folding-cube[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{float:left;width:50%;height:50%;position:relative;transform:scale(1.1)}.sk-folding-cube[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:before{content:\"\";position:absolute;top:0;left:0;width:100%;height:100%;background-color:currentColor;animation:sk-foldingCube-angle 2.4s linear infinite both;transform-origin:100% 100%}.sk-folding-cube[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){transform:scale(1.1) rotate(90deg)}.sk-folding-cube[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){transform:scale(1.1) rotate(270deg)}.sk-folding-cube[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){transform:scale(1.1) rotate(180deg)}.sk-folding-cube[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2):before{animation-delay:.3s}.sk-folding-cube[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3):before{animation-delay:.9s}.sk-folding-cube[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4):before{animation-delay:.6s}@keyframes sk-foldingCube-angle{0%,10%{transform:perspective(140px) rotateX(-180deg);opacity:0}25%,75%{transform:perspective(140px) rotateX(0deg);opacity:1}90%,to{transform:perspective(140px) rotateY(180deg);opacity:0}}.sk-pulse[_ngcontent-%COMP%]{width:100%;height:100%;margin:auto}.sk-pulse[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{width:100%;height:100%;background-color:currentColor;border-radius:100%;animation:sk-pulse-scaleOut 1s ease-in-out infinite}@keyframes sk-pulse-scaleOut{0%{transform:scale(0)}to{transform:scale(1);opacity:0}}.sk-rectangle-bounce[_ngcontent-%COMP%]{margin:auto;width:100%;height:100%;text-align:center;font-size:0}.sk-rectangle-bounce[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;height:100%;width:10%;margin:0 5%;display:inline-block;animation:sk-rectangleBounce-stretchDelay 1.2s ease-in-out infinite}.sk-rectangle-bounce[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){animation-delay:-1.1s}.sk-rectangle-bounce[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){animation-delay:-1s}.sk-rectangle-bounce[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){animation-delay:-.9s}.sk-rectangle-bounce[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){animation-delay:-.8s}@keyframes sk-rectangleBounce-stretchDelay{0%,40%,to{transform:scaleY(.4)}20%{transform:scaleY(1)}}.sk-rectangle-bounce-party[_ngcontent-%COMP%], .sk-rectangle-bounce-party[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{position:relative;box-sizing:border-box}.sk-rectangle-bounce-party[_ngcontent-%COMP%]{margin:auto;width:100%;height:100%;text-align:center;font-size:0}.sk-rectangle-bounce-party[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:inline-block;float:none;background-color:currentColor;border:0 solid;width:10%;height:100%;margin:0 5%;border-radius:0;animation-name:rectangle-bounce-party;animation-iteration-count:infinite}.sk-rectangle-bounce-party[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{animation-duration:.43s;animation-delay:-.23s}.sk-rectangle-bounce-party[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){animation-duration:.62s;animation-delay:-.32s}.sk-rectangle-bounce-party[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){animation-duration:.43s;animation-delay:-.44s}.sk-rectangle-bounce-party[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){animation-duration:.8s;animation-delay:-.31s}.sk-rectangle-bounce-party[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){animation-duration:.74s;animation-delay:-.24s}@keyframes rectangle-bounce-party{0%{transform:scaleY(1)}50%{transform:scaleY(.4)}to{transform:scaleY(1)}}.sk-rectangle-bounce-pulse-out[_ngcontent-%COMP%], .sk-rectangle-bounce-pulse-out[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{position:relative;box-sizing:border-box}.sk-rectangle-bounce-pulse-out[_ngcontent-%COMP%]{margin:auto;width:100%;height:100%;text-align:center;font-size:0}.sk-rectangle-bounce-pulse-out[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:inline-block;float:none;background-color:currentColor;border:0 solid;width:10%;height:100%;margin:0 5%;border-radius:0;animation:rectangle-bounce-pulse-out .9s cubic-bezier(.85,.25,.37,.85) infinite}.sk-rectangle-bounce-pulse-out[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){animation-delay:-.9s}.sk-rectangle-bounce-pulse-out[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2), .sk-rectangle-bounce-pulse-out[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){animation-delay:-.7s}.sk-rectangle-bounce-pulse-out[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child, .sk-rectangle-bounce-pulse-out[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){animation-delay:-.5s}@keyframes rectangle-bounce-pulse-out{0%{transform:scaley(1)}50%{transform:scaley(.4)}to{transform:scaley(1)}}.sk-rectangle-bounce-pulse-out-rapid[_ngcontent-%COMP%], .sk-rectangle-bounce-pulse-out-rapid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{position:relative;box-sizing:border-box}.sk-rectangle-bounce-pulse-out-rapid[_ngcontent-%COMP%]{margin:auto;width:100%;height:100%;text-align:center;font-size:0}.sk-rectangle-bounce-pulse-out-rapid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:inline-block;float:none;background-color:currentColor;border:0 solid;width:10%;height:100%;margin:0 5%;border-radius:0;animation:rectangle-bounce-pulse-out-rapid .9s cubic-bezier(.11,.49,.38,.78) infinite}.sk-rectangle-bounce-pulse-out-rapid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){animation-delay:-.9s}.sk-rectangle-bounce-pulse-out-rapid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2), .sk-rectangle-bounce-pulse-out-rapid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(4){animation-delay:-.65s}.sk-rectangle-bounce-pulse-out-rapid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child, .sk-rectangle-bounce-pulse-out-rapid[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(5){animation-delay:-.4s}@keyframes rectangle-bounce-pulse-out-rapid{0%{transform:scaley(1)}80%{transform:scaley(.4)}90%{transform:scaley(1)}}.sk-rotating-plane[_ngcontent-%COMP%]{width:100%;height:100%;text-align:center;margin:auto}.sk-rotating-plane[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{width:100%;height:100%;background-color:currentColor;animation:sk-rotatePlane 1.2s ease-in-out infinite}@keyframes sk-rotatePlane{0%{transform:perspective(120px) rotateX(0deg) rotateY(0deg)}50%{transform:perspective(120px) rotateX(-180.1deg) rotateY(0deg)}to{transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg)}}.sk-square-jelly-box[_ngcontent-%COMP%], .sk-square-jelly-box[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{position:relative;box-sizing:border-box}.sk-square-jelly-box[_ngcontent-%COMP%]{width:100%;height:100%;font-size:0}.sk-square-jelly-box[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:inline-block;float:none;background-color:currentColor;border:0 solid}.sk-square-jelly-box[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child, .sk-square-jelly-box[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){position:absolute;left:0;width:100%}.sk-square-jelly-box[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{top:-25%;z-index:99997;height:100%;border-radius:10%;animation:square-jelly-box-animate .6s linear -.1s infinite}.sk-square-jelly-box[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){bottom:-9%;height:10%;background:#000;border-radius:50%;opacity:.2;animation:square-jelly-box-shadow .6s linear -.1s infinite}@keyframes square-jelly-box-animate{17%{border-bottom-right-radius:10%}25%{transform:translateY(25%) rotate(22.5deg)}50%{border-bottom-right-radius:100%;transform:translateY(50%) scaleY(.9) rotate(45deg)}75%{transform:translateY(25%) rotate(67.5deg)}to{transform:translateY(0) rotate(90deg)}}@keyframes square-jelly-box-shadow{50%{transform:scaleX(1.25)}}.sk-square-loader[_ngcontent-%COMP%], .sk-square-loader[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{position:relative;box-sizing:border-box}.sk-square-loader[_ngcontent-%COMP%]{font-size:0;width:100%;height:100%}.sk-square-loader[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:inline-block;float:none;background-color:currentColor;border:0 solid;width:100%;height:100%;background:transparent;border-width:3px;border-radius:0;animation:square-loader 2s ease infinite}.sk-square-loader[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:after{display:inline-block;width:100%;vertical-align:top;content:\"\";background-color:currentColor;animation:square-loader-inner 2s ease-in infinite}@keyframes square-loader{0%{transform:rotate(0deg)}25%{transform:rotate(180deg)}50%{transform:rotate(180deg)}75%{transform:rotate(1turn)}to{transform:rotate(1turn)}}@keyframes square-loader-inner{0%{height:0}25%{height:0}50%{height:100%}75%{height:100%}to{height:0}}.sk-three-bounce[_ngcontent-%COMP%]{margin:auto;width:100%;height:100%;text-align:center}.sk-three-bounce[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{margin-top:35%;width:30%;height:30%;background-color:currentColor;border-radius:100%;display:inline-block;animation:sk-threeBounce-bounceDelay 1.4s ease-in-out infinite both}.bottom-center[_ngcontent-%COMP%] > .sk-three-bounce[_ngcontent-%COMP%] > div[_ngcontent-%COMP%], .bottom-left[_ngcontent-%COMP%] > .sk-three-bounce[_ngcontent-%COMP%] > div[_ngcontent-%COMP%], .bottom-right[_ngcontent-%COMP%] > .sk-three-bounce[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{margin-top:70%!important}.top-center[_ngcontent-%COMP%] > .sk-three-bounce[_ngcontent-%COMP%] > div[_ngcontent-%COMP%], .top-left[_ngcontent-%COMP%] > .sk-three-bounce[_ngcontent-%COMP%] > div[_ngcontent-%COMP%], .top-right[_ngcontent-%COMP%] > .sk-three-bounce[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{margin-top:0!important}.sk-three-bounce[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{animation-delay:-.32s}.sk-three-bounce[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){animation-delay:-.16s}@keyframes sk-threeBounce-bounceDelay{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}.sk-three-strings[_ngcontent-%COMP%], .sk-three-strings[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{width:100%;height:100%}.sk-three-strings[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{position:absolute;box-sizing:border-box;border-radius:50%}.sk-three-strings[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:first-child{left:0;top:0;animation:sk-threeStrings-rotateOne 1s linear infinite;border-bottom:3px solid}.sk-three-strings[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){right:0;top:0;animation:sk-threeStrings-rotateTwo 1s linear infinite;border-right:3px solid}.sk-three-strings[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(3){right:0;bottom:0;animation:sk-threeStrings-rotateThree 1s linear infinite;border-top:3px solid}@keyframes sk-threeStrings-rotateOne{0%{transform:rotateX(35deg) rotateY(-45deg) rotate(0deg)}to{transform:rotateX(35deg) rotateY(-45deg) rotate(1turn)}}@keyframes sk-threeStrings-rotateTwo{0%{transform:rotateX(50deg) rotateY(10deg) rotate(0deg)}to{transform:rotateX(50deg) rotateY(10deg) rotate(1turn)}}@keyframes sk-threeStrings-rotateThree{0%{transform:rotateX(35deg) rotateY(55deg) rotate(0deg)}to{transform:rotateX(35deg) rotateY(55deg) rotate(1turn)}}.sk-wandering-cubes[_ngcontent-%COMP%]{margin:auto;width:100%;height:100%;position:relative;text-align:center}.sk-wandering-cubes[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{background-color:currentColor;width:25%;height:25%;position:absolute;top:0;left:0;animation:sk-wanderingCubes-cubeMove 1.8s ease-in-out infinite}.sk-wandering-cubes[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]:nth-child(2){animation-delay:-.9s}@keyframes sk-wanderingCubes-cubeMove{25%{transform:translateX(290%) rotate(-90deg) scale(.5)}50%{transform:translateX(290%) translateY(290%) rotate(-179deg)}50.1%{transform:translateX(290%) translateY(290%) rotate(-180deg)}75%{transform:translateX(0) translateY(290%) rotate(-270deg) scale(.5)}to{transform:rotate(-1turn)}}"],
        changeDetection: 0
      });

      NgxUiLoaderComponent.ctorParameters = function () {
        return [{
          type: _angular_platform_browser__WEBPACK_IMPORTED_MODULE_3__["DomSanitizer"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }, {
          type: NgxUiLoaderService
        }];
      };

      NgxUiLoaderComponent.propDecorators = {
        bgsColor: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        bgsOpacity: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        bgsPosition: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        bgsSize: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        bgsTemplate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        bgsType: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        fgsColor: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        fgsPosition: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        fgsSize: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        fgsTemplate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        fgsType: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        gap: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        loaderId: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        logoPosition: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        logoSize: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        logoUrl: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        overlayBorderRadius: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        overlayColor: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        pbColor: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        pbDirection: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        pbThickness: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        hasProgressBar: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        text: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        textColor: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        textPosition: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgxUiLoaderComponent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'ngx-ui-loader',
            template: "<!-- Progress bar {{{ -->\n<div\n  *ngIf=\"hasProgressBar\"\n  class=\"ngx-progress-bar\"\n  [class.ngx-position-absolute]=\"loaderId !== defaultConfig.masterLoaderId\"\n  [ngClass]=\"'ngx-progress-bar-' + pbDirection\"\n  [style.height.px]=\"pbThickness\"\n  [style.color]=\"pbColor\"\n  [class.loading-foreground]=\"showForeground\"\n  [class.foreground-closing]=\"foregroundClosing\"\n  [class.fast-closing]=\"foregroundClosing && fastFadeOut\"\n></div>\n<!-- Progress bar }}} -->\n\n<!-- Foreground container {{{ -->\n<div\n  class=\"ngx-overlay\"\n  [class.ngx-position-absolute]=\"loaderId !== defaultConfig.masterLoaderId\"\n  [style.background-color]=\"overlayColor\"\n  [style.border-radius]=\"overlayBorderRadius\"\n  [class.loading-foreground]=\"showForeground\"\n  [class.foreground-closing]=\"foregroundClosing\"\n  [class.fast-closing]=\"foregroundClosing && fastFadeOut\"\n>\n  <!-- Logo {{{ -->\n  <img\n    *ngIf=\"logoUrl\"\n    class=\"ngx-loading-logo\"\n    [ngClass]=\"logoPosition\"\n    [src]=\"trustedLogoUrl\"\n    [style.width.px]=\"logoSize\"\n    [style.height.px]=\"logoSize\"\n    [style.top]=\"logoTop\"\n  />\n  <!-- Logo }}} -->\n\n  <!-- Foreground spinner {{{ -->\n  <div\n    class=\"ngx-foreground-spinner\"\n    [ngClass]=\"fgsPosition\"\n    [style.color]=\"fgsColor\"\n    [style.width.px]=\"fgsSize\"\n    [style.height.px]=\"fgsSize\"\n    [style.top]=\"spinnerTop\"\n  >\n    <div *ngIf=\"!fgsTemplate; else foregroundTemplate\" [class]=\"fgSpinnerClass\">\n      <div *ngFor=\"let div of fgDivs\"></div>\n    </div>\n    <ng-template #foregroundTemplate>\n      <ng-container *ngTemplateOutlet=\"fgsTemplate\"></ng-container>\n    </ng-template>\n  </div>\n  <!-- Foreground spinner }}} -->\n\n  <!-- Loading text {{{ -->\n  <div class=\"ngx-loading-text\" [ngClass]=\"textPosition\" [style.top]=\"textTop\" [style.color]=\"textColor\">{{ text }}</div>\n  <!-- Loading text }}} -->\n</div>\n<!-- Foreground container }}} -->\n\n<!-- Background spinner {{{ -->\n<div\n  class=\"ngx-background-spinner\"\n  [class.ngx-position-absolute]=\"loaderId !== defaultConfig.masterLoaderId\"\n  [ngClass]=\"bgsPosition\"\n  [class.loading-background]=\"showBackground\"\n  [class.background-closing]=\"backgroundClosing\"\n  [class.fast-closing]=\"backgroundClosing && fastFadeOut\"\n  [style.width.px]=\"bgsSize\"\n  [style.height.px]=\"bgsSize\"\n  [style.color]=\"bgsColor\"\n  [style.opacity]=\"bgsOpacity\"\n>\n  <div *ngIf=\"!bgsTemplate; else backgroundTemplate\" [class]=\"bgSpinnerClass\">\n    <div *ngFor=\"let div of bgDivs\"></div>\n  </div>\n  <ng-template #backgroundTemplate>\n    <ng-container *ngTemplateOutlet=\"bgsTemplate\"></ng-container>\n  </ng-template>\n</div>\n<!-- Background spinner }}} -->\n",
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            styles: [".ngx-progress-bar{position:fixed;top:0;left:0;width:100%;height:3px;z-index:99999!important;display:none;color:#00acc1;overflow:hidden}.ngx-progress-bar.foreground-closing,.ngx-progress-bar.loading-foreground{display:block}.ngx-progress-bar.foreground-closing{opacity:0!important;transition:opacity .5s ease-out .5s}.ngx-progress-bar.fast-closing{transition:opacity .3s ease-out .3s!important}.ngx-progress-bar:after,.ngx-progress-bar:before{background-color:currentColor;content:\"\";display:block;width:100%;height:100%;position:absolute;top:0}.ngx-progress-bar-ltr:before{transform:translate3d(-100%,0,0)}.ngx-progress-bar-ltr:after{animation:progressBar-slide-ltr 12s ease-out 0s 1 normal;transform:translate3d(-5%,0,0)}.ngx-progress-bar-rtl:before{transform:translate3d(100%,0,0)}.ngx-progress-bar-rtl:after{animation:progressBar-slide-rtl 12s ease-out 0s 1 normal;transform:translate3d(5%,0,0)}.foreground-closing.ngx-progress-bar-ltr:before{animation:progressBar-slide-complete-ltr 1s ease-out 0s 1;transform:translateZ(0)}.fast-closing.ngx-progress-bar-ltr:before{animation:progressBar-slide-complete-ltr .6s ease-out 0s 1!important}.foreground-closing.ngx-progress-bar-rtl:before{animation:progressBar-slide-complete-rtl 1s ease-out 0s 1;transform:translateZ(0)}.fast-closing.ngx-progress-bar-rtl:before{animation:progressBar-slide-complete-rtl .6s ease-out 0s 1!important}@keyframes progressBar-slide-ltr{0%{transform:translate3d(-100%,0,0)}to{transform:translate3d(-5%,0,0)}}@keyframes progressBar-slide-rtl{0%{transform:translate3d(100%,0,0)}to{transform:translate3d(5%,0,0)}}@keyframes progressBar-slide-complete-ltr{0%{transform:translate3d(-75%,0,0)}50%{transform:translateZ(0)}}@keyframes progressBar-slide-complete-rtl{0%{transform:translate3d(75%,0,0)}50%{transform:translateZ(0)}}.ngx-overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:99998!important;background-color:rgba(40,40,40,.8);cursor:progress;display:none}.ngx-overlay.foreground-closing,.ngx-overlay.loading-foreground{display:block}.ngx-overlay.foreground-closing{opacity:0!important;transition:opacity .5s ease-out .5s}.ngx-overlay.fast-closing{transition:opacity .3s ease-out .3s!important}.ngx-overlay>.ngx-foreground-spinner{position:fixed;width:60px;height:60px;margin:0;color:#00acc1}.ngx-overlay>.ngx-loading-logo{position:fixed;margin:0;width:120px;height:120px}.ngx-overlay>.ngx-loading-text{position:fixed;margin:0;font-family:sans-serif;font-weight:400;font-size:1.2em;color:#fff}.ngx-background-spinner{position:fixed;z-index:99997!important;width:60px;height:60px;margin:0;color:#00acc1;opacity:.6;display:none}.ngx-background-spinner.background-closing,.ngx-background-spinner.loading-background{display:block}.ngx-background-spinner.background-closing{opacity:0!important;transition:opacity .7s ease-out}.ngx-background-spinner.fast-closing{transition:opacity .4s ease-out!important}.ngx-position-absolute,.ngx-position-absolute>.ngx-foreground-spinner,.ngx-position-absolute>.ngx-loading-logo,.ngx-position-absolute>.ngx-loading-text{position:absolute!important}.ngx-position-absolute.ngx-progress-bar{z-index:99996!important}.ngx-position-absolute.ngx-overlay{z-index:99995!important}.ngx-position-absolute.ngx-background-spinner,.ngx-position-absolute .sk-square-jelly-box>div:first-child{z-index:99994!important}.top-left{top:30px;left:30px}.top-center{top:30px;left:50%;transform:translateX(-50%)}.top-right{top:30px;right:30px}.center-left{top:50%;left:30px;transform:translateY(-50%)}.center-center{top:50%;left:50%;transform:translate(-50%,-50%)}.center-right{top:50%;right:30px;transform:translateY(-50%)}.bottom-left{bottom:30px;left:30px}.bottom-center{bottom:30px;left:50%;transform:translateX(-50%)}.bottom-right{bottom:30px;right:30px}.sk-ball-scale-multiple,.sk-ball-scale-multiple>div{position:relative;box-sizing:border-box}.sk-ball-scale-multiple{width:100%;height:100%;font-size:0}.sk-ball-scale-multiple>div{display:inline-block;float:none;background-color:currentColor;border:0 solid;position:absolute;top:0;left:0;width:100%;height:100%;border-radius:100%;opacity:0;animation:ball-scale-multiple 1s linear 0s infinite}.sk-ball-scale-multiple>div:nth-child(2){animation-delay:.2s}.sk-ball-scale-multiple>div:nth-child(3){animation-delay:.4s}@keyframes ball-scale-multiple{0%{opacity:0;transform:scale(0)}5%{opacity:.75}to{opacity:0;transform:scale(1)}}.sk-ball-spin,.sk-ball-spin>div{position:relative;box-sizing:border-box}.sk-ball-spin{width:100%;height:100%;font-size:0}.sk-ball-spin>div{display:inline-block;float:none;background-color:currentColor;border:0 solid;position:absolute;top:50%;left:50%;width:25%;height:25%;margin-top:-12.5%;margin-left:-12.5%;border-radius:100%;animation:ball-spin-clockwise 1s ease-in-out infinite}.sk-ball-spin>div:first-child{top:5%;left:50%;animation-delay:-1.125s}.sk-ball-spin>div:nth-child(2){top:18.1801948466%;left:81.8198051534%;animation-delay:-1.25s}.sk-ball-spin>div:nth-child(3){top:50%;left:95%;animation-delay:-1.375s}.sk-ball-spin>div:nth-child(4){top:81.8198051534%;left:81.8198051534%;animation-delay:-1.5s}.sk-ball-spin>div:nth-child(5){top:94.9999999966%;left:50.0000000005%;animation-delay:-1.625s}.sk-ball-spin>div:nth-child(6){top:81.8198046966%;left:18.1801949248%;animation-delay:-1.75s}.sk-ball-spin>div:nth-child(7){top:49.9999750815%;left:5.0000051215%;animation-delay:-1.875s}.sk-ball-spin>div:nth-child(8){top:18.179464974%;left:18.1803700518%;animation-delay:-2s}@keyframes ball-spin{0%,to{opacity:1;transform:scale(1)}20%{opacity:1}80%{opacity:0;transform:scale(0)}}.sk-ball-spin-clockwise,.sk-ball-spin-clockwise>div{position:relative;box-sizing:border-box}.sk-ball-spin-clockwise{width:100%;height:100%;font-size:0}.sk-ball-spin-clockwise>div{display:inline-block;float:none;background-color:currentColor;border:0 solid;position:absolute;top:50%;left:50%;width:25%;height:25%;margin-top:-12.5%;margin-left:-12.5%;border-radius:100%;animation:ball-spin-clockwise 1s ease-in-out infinite}.sk-ball-spin-clockwise>div:first-child{top:5%;left:50%;animation-delay:-.875s}.sk-ball-spin-clockwise>div:nth-child(2){top:18.1801948466%;left:81.8198051534%;animation-delay:-.75s}.sk-ball-spin-clockwise>div:nth-child(3){top:50%;left:95%;animation-delay:-.625s}.sk-ball-spin-clockwise>div:nth-child(4){top:81.8198051534%;left:81.8198051534%;animation-delay:-.5s}.sk-ball-spin-clockwise>div:nth-child(5){top:94.9999999966%;left:50.0000000005%;animation-delay:-.375s}.sk-ball-spin-clockwise>div:nth-child(6){top:81.8198046966%;left:18.1801949248%;animation-delay:-.25s}.sk-ball-spin-clockwise>div:nth-child(7){top:49.9999750815%;left:5.0000051215%;animation-delay:-.125s}.sk-ball-spin-clockwise>div:nth-child(8){top:18.179464974%;left:18.1803700518%;animation-delay:0s}@keyframes ball-spin-clockwise{0%,to{opacity:1;transform:scale(1)}20%{opacity:1}80%{opacity:0;transform:scale(0)}}.sk-ball-spin-clockwise-fade-rotating,.sk-ball-spin-clockwise-fade-rotating>div{position:relative;box-sizing:border-box}.sk-ball-spin-clockwise-fade-rotating{font-size:0;width:100%;height:100%;animation:ball-spin-clockwise-fade-rotating-rotate 6s linear infinite}.sk-ball-spin-clockwise-fade-rotating>div{display:inline-block;float:none;background-color:currentColor;border:0 solid;position:absolute;top:50%;left:50%;width:25%;height:25%;margin-top:-12.5%;margin-left:-12.5%;border-radius:100%;animation:ball-spin-clockwise-fade-rotating 1s linear infinite}.sk-ball-spin-clockwise-fade-rotating>div:first-child{top:5%;left:50%;animation-delay:-.875s}.sk-ball-spin-clockwise-fade-rotating>div:nth-child(2){top:18.1801948466%;left:81.8198051534%;animation-delay:-.75s}.sk-ball-spin-clockwise-fade-rotating>div:nth-child(3){top:50%;left:95%;animation-delay:-.625s}.sk-ball-spin-clockwise-fade-rotating>div:nth-child(4){top:81.8198051534%;left:81.8198051534%;animation-delay:-.5s}.sk-ball-spin-clockwise-fade-rotating>div:nth-child(5){top:94.9999999966%;left:50.0000000005%;animation-delay:-.375s}.sk-ball-spin-clockwise-fade-rotating>div:nth-child(6){top:81.8198046966%;left:18.1801949248%;animation-delay:-.25s}.sk-ball-spin-clockwise-fade-rotating>div:nth-child(7){top:49.9999750815%;left:5.0000051215%;animation-delay:-.125s}.sk-ball-spin-clockwise-fade-rotating>div:nth-child(8){top:18.179464974%;left:18.1803700518%;animation-delay:0s}@keyframes ball-spin-clockwise-fade-rotating-rotate{to{transform:rotate(-1turn)}}@keyframes ball-spin-clockwise-fade-rotating{50%{opacity:.25;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.sk-ball-spin-fade-rotating,.sk-ball-spin-fade-rotating>div{position:relative;box-sizing:border-box}.sk-ball-spin-fade-rotating{width:100%;height:100%;font-size:0;animation:ball-spin-fade-rotate 6s linear infinite}.sk-ball-spin-fade-rotating>div{display:inline-block;float:none;background-color:currentColor;border:0 solid;position:absolute;top:50%;left:50%;width:25%;height:25%;margin-top:-12.5%;margin-left:-12.5%;border-radius:100%;animation:ball-spin-fade 1s linear infinite}.sk-ball-spin-fade-rotating>div:first-child{top:5%;left:50%;animation-delay:-1.125s}.sk-ball-spin-fade-rotating>div:nth-child(2){top:18.1801948466%;left:81.8198051534%;animation-delay:-1.25s}.sk-ball-spin-fade-rotating>div:nth-child(3){top:50%;left:95%;animation-delay:-1.375s}.sk-ball-spin-fade-rotating>div:nth-child(4){top:81.8198051534%;left:81.8198051534%;animation-delay:-1.5s}.sk-ball-spin-fade-rotating>div:nth-child(5){top:94.9999999966%;left:50.0000000005%;animation-delay:-1.625s}.sk-ball-spin-fade-rotating>div:nth-child(6){top:81.8198046966%;left:18.1801949248%;animation-delay:-1.75s}.sk-ball-spin-fade-rotating>div:nth-child(7){top:49.9999750815%;left:5.0000051215%;animation-delay:-1.875s}.sk-ball-spin-fade-rotating>div:nth-child(8){top:18.179464974%;left:18.1803700518%;animation-delay:-2s}@keyframes ball-spin-fade-rotate{to{transform:rotate(1turn)}}@keyframes ball-spin-fade{0%,to{opacity:1;transform:scale(1)}50%{opacity:.25;transform:scale(.5)}}.sk-chasing-dots{margin:auto;width:100%;height:100%;position:absolute;text-align:center;animation:sk-chasingDots-rotate 2s linear infinite}.sk-chasing-dots>div{width:60%;height:60%;display:inline-block;position:absolute;top:0;background-color:currentColor;border-radius:100%;animation:sk-chasingDots-bounce 2s ease-in-out infinite}.sk-chasing-dots>div:nth-child(2){top:auto;bottom:0;animation-delay:-1s}@keyframes sk-chasingDots-rotate{to{transform:rotate(1turn)}}@keyframes sk-chasingDots-bounce{0%,to{transform:scale(0)}50%{transform:scale(1)}}.sk-circle{margin:auto;width:100%;height:100%;position:relative}.sk-circle>div{width:100%;height:100%;position:absolute;left:0;top:0}.sk-circle>div:before{content:\"\";display:block;margin:0 auto;width:15%;height:15%;background-color:currentColor;border-radius:100%;animation:sk-circle-bounceDelay 1.2s ease-in-out infinite both}.sk-circle>div:nth-child(2){transform:rotate(30deg)}.sk-circle>div:nth-child(3){transform:rotate(60deg)}.sk-circle>div:nth-child(4){transform:rotate(90deg)}.sk-circle>div:nth-child(5){transform:rotate(120deg)}.sk-circle>div:nth-child(6){transform:rotate(150deg)}.sk-circle>div:nth-child(7){transform:rotate(180deg)}.sk-circle>div:nth-child(8){transform:rotate(210deg)}.sk-circle>div:nth-child(9){transform:rotate(240deg)}.sk-circle>div:nth-child(10){transform:rotate(270deg)}.sk-circle>div:nth-child(11){transform:rotate(300deg)}.sk-circle>div:nth-child(12){transform:rotate(330deg)}.sk-circle>div:nth-child(2):before{animation-delay:-1.1s}.sk-circle>div:nth-child(3):before{animation-delay:-1s}.sk-circle>div:nth-child(4):before{animation-delay:-.9s}.sk-circle>div:nth-child(5):before{animation-delay:-.8s}.sk-circle>div:nth-child(6):before{animation-delay:-.7s}.sk-circle>div:nth-child(7):before{animation-delay:-.6s}.sk-circle>div:nth-child(8):before{animation-delay:-.5s}.sk-circle>div:nth-child(9):before{animation-delay:-.4s}.sk-circle>div:nth-child(10):before{animation-delay:-.3s}.sk-circle>div:nth-child(11):before{animation-delay:-.2s}.sk-circle>div:nth-child(12):before{animation-delay:-.1s}@keyframes sk-circle-bounceDelay{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}.sk-cube-grid{width:100%;height:100%;margin:auto}.sk-cube-grid>div{width:33%;height:33%;background-color:currentColor;float:left;animation:sk-cubeGrid-scaleDelay 1.3s ease-in-out infinite}.sk-cube-grid>div:first-child{animation-delay:.2s}.sk-cube-grid>div:nth-child(2){animation-delay:.3s}.sk-cube-grid>div:nth-child(3){animation-delay:.4s}.sk-cube-grid>div:nth-child(4){animation-delay:.1s}.sk-cube-grid>div:nth-child(5){animation-delay:.2s}.sk-cube-grid>div:nth-child(6){animation-delay:.3s}.sk-cube-grid>div:nth-child(7){animation-delay:0s}.sk-cube-grid>div:nth-child(8){animation-delay:.1s}.sk-cube-grid>div:nth-child(9){animation-delay:.2s}@keyframes sk-cubeGrid-scaleDelay{0%,70%,to{transform:scaleX(1)}35%{transform:scale3D(0,0,1)}}.sk-double-bounce{width:100%;height:100%;position:relative;margin:auto}.sk-double-bounce>div{width:100%;height:100%;border-radius:50%;background-color:currentColor;opacity:.6;position:absolute;top:0;left:0;animation:sk-doubleBounce-bounce 2s ease-in-out infinite}.sk-double-bounce>div:nth-child(2){animation-delay:-1s}@keyframes sk-doubleBounce-bounce{0%,to{transform:scale(0)}50%{transform:scale(1)}}.sk-fading-circle{margin:auto;width:100%;height:100%;position:relative}.sk-fading-circle>div{width:100%;height:100%;position:absolute;left:0;top:0}.sk-fading-circle>div:before{content:\"\";display:block;margin:0 auto;width:15%;height:15%;background-color:currentColor;border-radius:100%;animation:sk-fadingCircle-FadeDelay 1.2s ease-in-out infinite both}.sk-fading-circle>div:nth-child(2){transform:rotate(30deg)}.sk-fading-circle>div:nth-child(3){transform:rotate(60deg)}.sk-fading-circle>div:nth-child(4){transform:rotate(90deg)}.sk-fading-circle>div:nth-child(5){transform:rotate(120deg)}.sk-fading-circle>div:nth-child(6){transform:rotate(150deg)}.sk-fading-circle>div:nth-child(7){transform:rotate(180deg)}.sk-fading-circle>div:nth-child(8){transform:rotate(210deg)}.sk-fading-circle>div:nth-child(9){transform:rotate(240deg)}.sk-fading-circle>div:nth-child(10){transform:rotate(270deg)}.sk-fading-circle>div:nth-child(11){transform:rotate(300deg)}.sk-fading-circle>div:nth-child(12){transform:rotate(330deg)}.sk-fading-circle>div:nth-child(2):before{animation-delay:-1.1s}.sk-fading-circle>div:nth-child(3):before{animation-delay:-1s}.sk-fading-circle>div:nth-child(4):before{animation-delay:-.9s}.sk-fading-circle>div:nth-child(5):before{animation-delay:-.8s}.sk-fading-circle>div:nth-child(6):before{animation-delay:-.7s}.sk-fading-circle>div:nth-child(7):before{animation-delay:-.6s}.sk-fading-circle>div:nth-child(8):before{animation-delay:-.5s}.sk-fading-circle>div:nth-child(9):before{animation-delay:-.4s}.sk-fading-circle>div:nth-child(10):before{animation-delay:-.3s}.sk-fading-circle>div:nth-child(11):before{animation-delay:-.2s}.sk-fading-circle>div:nth-child(12):before{animation-delay:-.1s}@keyframes sk-fadingCircle-FadeDelay{0%,39%,to{opacity:0}40%{opacity:1}}.sk-folding-cube{margin:auto;width:100%;height:100%;position:relative;transform:rotate(45deg)}.sk-folding-cube>div{float:left;width:50%;height:50%;position:relative;transform:scale(1.1)}.sk-folding-cube>div:before{content:\"\";position:absolute;top:0;left:0;width:100%;height:100%;background-color:currentColor;animation:sk-foldingCube-angle 2.4s linear infinite both;transform-origin:100% 100%}.sk-folding-cube>div:nth-child(2){transform:scale(1.1) rotate(90deg)}.sk-folding-cube>div:nth-child(3){transform:scale(1.1) rotate(270deg)}.sk-folding-cube>div:nth-child(4){transform:scale(1.1) rotate(180deg)}.sk-folding-cube>div:nth-child(2):before{animation-delay:.3s}.sk-folding-cube>div:nth-child(3):before{animation-delay:.9s}.sk-folding-cube>div:nth-child(4):before{animation-delay:.6s}@keyframes sk-foldingCube-angle{0%,10%{transform:perspective(140px) rotateX(-180deg);opacity:0}25%,75%{transform:perspective(140px) rotateX(0deg);opacity:1}90%,to{transform:perspective(140px) rotateY(180deg);opacity:0}}.sk-pulse{width:100%;height:100%;margin:auto}.sk-pulse>div{width:100%;height:100%;background-color:currentColor;border-radius:100%;animation:sk-pulse-scaleOut 1s ease-in-out infinite}@keyframes sk-pulse-scaleOut{0%{transform:scale(0)}to{transform:scale(1);opacity:0}}.sk-rectangle-bounce{margin:auto;width:100%;height:100%;text-align:center;font-size:0}.sk-rectangle-bounce>div{background-color:currentColor;height:100%;width:10%;margin:0 5%;display:inline-block;animation:sk-rectangleBounce-stretchDelay 1.2s ease-in-out infinite}.sk-rectangle-bounce>div:nth-child(2){animation-delay:-1.1s}.sk-rectangle-bounce>div:nth-child(3){animation-delay:-1s}.sk-rectangle-bounce>div:nth-child(4){animation-delay:-.9s}.sk-rectangle-bounce>div:nth-child(5){animation-delay:-.8s}@keyframes sk-rectangleBounce-stretchDelay{0%,40%,to{transform:scaleY(.4)}20%{transform:scaleY(1)}}.sk-rectangle-bounce-party,.sk-rectangle-bounce-party>div{position:relative;box-sizing:border-box}.sk-rectangle-bounce-party{margin:auto;width:100%;height:100%;text-align:center;font-size:0}.sk-rectangle-bounce-party>div{display:inline-block;float:none;background-color:currentColor;border:0 solid;width:10%;height:100%;margin:0 5%;border-radius:0;animation-name:rectangle-bounce-party;animation-iteration-count:infinite}.sk-rectangle-bounce-party>div:first-child{animation-duration:.43s;animation-delay:-.23s}.sk-rectangle-bounce-party>div:nth-child(2){animation-duration:.62s;animation-delay:-.32s}.sk-rectangle-bounce-party>div:nth-child(3){animation-duration:.43s;animation-delay:-.44s}.sk-rectangle-bounce-party>div:nth-child(4){animation-duration:.8s;animation-delay:-.31s}.sk-rectangle-bounce-party>div:nth-child(5){animation-duration:.74s;animation-delay:-.24s}@keyframes rectangle-bounce-party{0%{transform:scaleY(1)}50%{transform:scaleY(.4)}to{transform:scaleY(1)}}.sk-rectangle-bounce-pulse-out,.sk-rectangle-bounce-pulse-out>div{position:relative;box-sizing:border-box}.sk-rectangle-bounce-pulse-out{margin:auto;width:100%;height:100%;text-align:center;font-size:0}.sk-rectangle-bounce-pulse-out>div{display:inline-block;float:none;background-color:currentColor;border:0 solid;width:10%;height:100%;margin:0 5%;border-radius:0;animation:rectangle-bounce-pulse-out .9s cubic-bezier(.85,.25,.37,.85) infinite}.sk-rectangle-bounce-pulse-out>div:nth-child(3){animation-delay:-.9s}.sk-rectangle-bounce-pulse-out>div:nth-child(2),.sk-rectangle-bounce-pulse-out>div:nth-child(4){animation-delay:-.7s}.sk-rectangle-bounce-pulse-out>div:first-child,.sk-rectangle-bounce-pulse-out>div:nth-child(5){animation-delay:-.5s}@keyframes rectangle-bounce-pulse-out{0%{transform:scaley(1)}50%{transform:scaley(.4)}to{transform:scaley(1)}}.sk-rectangle-bounce-pulse-out-rapid,.sk-rectangle-bounce-pulse-out-rapid>div{position:relative;box-sizing:border-box}.sk-rectangle-bounce-pulse-out-rapid{margin:auto;width:100%;height:100%;text-align:center;font-size:0}.sk-rectangle-bounce-pulse-out-rapid>div{display:inline-block;float:none;background-color:currentColor;border:0 solid;width:10%;height:100%;margin:0 5%;border-radius:0;animation:rectangle-bounce-pulse-out-rapid .9s cubic-bezier(.11,.49,.38,.78) infinite}.sk-rectangle-bounce-pulse-out-rapid>div:nth-child(3){animation-delay:-.9s}.sk-rectangle-bounce-pulse-out-rapid>div:nth-child(2),.sk-rectangle-bounce-pulse-out-rapid>div:nth-child(4){animation-delay:-.65s}.sk-rectangle-bounce-pulse-out-rapid>div:first-child,.sk-rectangle-bounce-pulse-out-rapid>div:nth-child(5){animation-delay:-.4s}@keyframes rectangle-bounce-pulse-out-rapid{0%{transform:scaley(1)}80%{transform:scaley(.4)}90%{transform:scaley(1)}}.sk-rotating-plane{width:100%;height:100%;text-align:center;margin:auto}.sk-rotating-plane>div{width:100%;height:100%;background-color:currentColor;animation:sk-rotatePlane 1.2s ease-in-out infinite}@keyframes sk-rotatePlane{0%{transform:perspective(120px) rotateX(0deg) rotateY(0deg)}50%{transform:perspective(120px) rotateX(-180.1deg) rotateY(0deg)}to{transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg)}}.sk-square-jelly-box,.sk-square-jelly-box>div{position:relative;box-sizing:border-box}.sk-square-jelly-box{width:100%;height:100%;font-size:0}.sk-square-jelly-box>div{display:inline-block;float:none;background-color:currentColor;border:0 solid}.sk-square-jelly-box>div:first-child,.sk-square-jelly-box>div:nth-child(2){position:absolute;left:0;width:100%}.sk-square-jelly-box>div:first-child{top:-25%;z-index:99997;height:100%;border-radius:10%;animation:square-jelly-box-animate .6s linear -.1s infinite}.sk-square-jelly-box>div:nth-child(2){bottom:-9%;height:10%;background:#000;border-radius:50%;opacity:.2;animation:square-jelly-box-shadow .6s linear -.1s infinite}@keyframes square-jelly-box-animate{17%{border-bottom-right-radius:10%}25%{transform:translateY(25%) rotate(22.5deg)}50%{border-bottom-right-radius:100%;transform:translateY(50%) scaleY(.9) rotate(45deg)}75%{transform:translateY(25%) rotate(67.5deg)}to{transform:translateY(0) rotate(90deg)}}@keyframes square-jelly-box-shadow{50%{transform:scaleX(1.25)}}.sk-square-loader,.sk-square-loader>div{position:relative;box-sizing:border-box}.sk-square-loader{font-size:0;width:100%;height:100%}.sk-square-loader>div{display:inline-block;float:none;background-color:currentColor;border:0 solid;width:100%;height:100%;background:transparent;border-width:3px;border-radius:0;animation:square-loader 2s ease infinite}.sk-square-loader>div:after{display:inline-block;width:100%;vertical-align:top;content:\"\";background-color:currentColor;animation:square-loader-inner 2s ease-in infinite}@keyframes square-loader{0%{transform:rotate(0deg)}25%{transform:rotate(180deg)}50%{transform:rotate(180deg)}75%{transform:rotate(1turn)}to{transform:rotate(1turn)}}@keyframes square-loader-inner{0%{height:0}25%{height:0}50%{height:100%}75%{height:100%}to{height:0}}.sk-three-bounce{margin:auto;width:100%;height:100%;text-align:center}.sk-three-bounce>div{margin-top:35%;width:30%;height:30%;background-color:currentColor;border-radius:100%;display:inline-block;animation:sk-threeBounce-bounceDelay 1.4s ease-in-out infinite both}.bottom-center>.sk-three-bounce>div,.bottom-left>.sk-three-bounce>div,.bottom-right>.sk-three-bounce>div{margin-top:70%!important}.top-center>.sk-three-bounce>div,.top-left>.sk-three-bounce>div,.top-right>.sk-three-bounce>div{margin-top:0!important}.sk-three-bounce>div:first-child{animation-delay:-.32s}.sk-three-bounce>div:nth-child(2){animation-delay:-.16s}@keyframes sk-threeBounce-bounceDelay{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}.sk-three-strings,.sk-three-strings>div{width:100%;height:100%}.sk-three-strings>div{position:absolute;box-sizing:border-box;border-radius:50%}.sk-three-strings>div:first-child{left:0;top:0;animation:sk-threeStrings-rotateOne 1s linear infinite;border-bottom:3px solid}.sk-three-strings>div:nth-child(2){right:0;top:0;animation:sk-threeStrings-rotateTwo 1s linear infinite;border-right:3px solid}.sk-three-strings>div:nth-child(3){right:0;bottom:0;animation:sk-threeStrings-rotateThree 1s linear infinite;border-top:3px solid}@keyframes sk-threeStrings-rotateOne{0%{transform:rotateX(35deg) rotateY(-45deg) rotate(0deg)}to{transform:rotateX(35deg) rotateY(-45deg) rotate(1turn)}}@keyframes sk-threeStrings-rotateTwo{0%{transform:rotateX(50deg) rotateY(10deg) rotate(0deg)}to{transform:rotateX(50deg) rotateY(10deg) rotate(1turn)}}@keyframes sk-threeStrings-rotateThree{0%{transform:rotateX(35deg) rotateY(55deg) rotate(0deg)}to{transform:rotateX(35deg) rotateY(55deg) rotate(1turn)}}.sk-wandering-cubes{margin:auto;width:100%;height:100%;position:relative;text-align:center}.sk-wandering-cubes>div{background-color:currentColor;width:25%;height:25%;position:absolute;top:0;left:0;animation:sk-wanderingCubes-cubeMove 1.8s ease-in-out infinite}.sk-wandering-cubes>div:nth-child(2){animation-delay:-.9s}@keyframes sk-wanderingCubes-cubeMove{25%{transform:translateX(290%) rotate(-90deg) scale(.5)}50%{transform:translateX(290%) translateY(290%) rotate(-179deg)}50.1%{transform:translateX(290%) translateY(290%) rotate(-180deg)}75%{transform:translateX(0) translateY(290%) rotate(-270deg) scale(.5)}to{transform:rotate(-1turn)}}"]
          }]
        }], function () {
          return [{
            type: _angular_platform_browser__WEBPACK_IMPORTED_MODULE_3__["DomSanitizer"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }, {
            type: NgxUiLoaderService
          }];
        }, {
          bgsColor: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          bgsOpacity: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          bgsPosition: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          bgsSize: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          bgsType: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          fgsColor: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          fgsPosition: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          fgsSize: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          fgsType: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          gap: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          loaderId: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          logoPosition: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          logoSize: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          logoUrl: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          overlayBorderRadius: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          overlayColor: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          pbColor: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          pbDirection: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          pbThickness: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          hasProgressBar: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          text: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          textColor: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          textPosition: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          bgsTemplate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          fgsTemplate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /* eslint-disable @angular-eslint/directive-selector */


      var NgxUiLoaderBlurredDirective = /*#__PURE__*/function () {
        function NgxUiLoaderBlurredDirective(elementRef, renderer, loader) {
          _classCallCheck2(this, NgxUiLoaderBlurredDirective);

          this.elementRef = elementRef;
          this.renderer = renderer;
          this.loader = loader;
          this.blur = this.loader.getDefaultConfig().blur;
          this.loaderId = this.loader.getDefaultConfig().masterLoaderId;
          this.fastFadeOut = this.loader.getDefaultConfig().fastFadeOut;
        }
        /**
         * On Init event
         */


        _createClass2(NgxUiLoaderBlurredDirective, [{
          key: "ngOnInit",
          value: function ngOnInit() {
            var _this755 = this;

            this.showForegroundWatcher = this.loader.showForeground$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["filter"])(function (showEvent) {
              return _this755.loaderId === showEvent.loaderId;
            })).subscribe(function (data) {
              if (data.isShow) {
                var filterValue = "blur(".concat(_this755.blur, "px)");

                _this755.renderer.setStyle(_this755.elementRef.nativeElement, '-webkit-filter', filterValue);

                _this755.renderer.setStyle(_this755.elementRef.nativeElement, 'filter', filterValue);
              } else {
                setTimeout(function () {
                  if (!_this755.loader.hasRunningTask(FOREGROUND, data.loaderId)) {
                    _this755.renderer.setStyle(_this755.elementRef.nativeElement, '-webkit-filter', 'none');

                    _this755.renderer.setStyle(_this755.elementRef.nativeElement, 'filter', 'none');
                  }
                }, _this755.fastFadeOut ? FAST_OVERLAY_DISAPPEAR_TIME : OVERLAY_DISAPPEAR_TIME);
              }
            });
          }
          /**
           * On destroy event
           */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            if (this.showForegroundWatcher) {
              this.showForegroundWatcher.unsubscribe();
            }
          }
        }]);

        return NgxUiLoaderBlurredDirective;
      }();

      NgxUiLoaderBlurredDirective.ɵfac = function NgxUiLoaderBlurredDirective_Factory(t) {
        return new (t || NgxUiLoaderBlurredDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgxUiLoaderService));
      };

      NgxUiLoaderBlurredDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgxUiLoaderBlurredDirective,
        selectors: [["", "ngxUiLoaderBlurred", ""]],
        inputs: {
          blur: "blur",
          loaderId: "loaderId"
        }
      });

      NgxUiLoaderBlurredDirective.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }, {
          type: NgxUiLoaderService
        }];
      };

      NgxUiLoaderBlurredDirective.propDecorators = {
        blur: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        loaderId: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgxUiLoaderBlurredDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngxUiLoaderBlurred]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }, {
            type: NgxUiLoaderService
          }];
        }, {
          blur: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          loaderId: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var NgxUiLoaderModule = /*#__PURE__*/function () {
        function NgxUiLoaderModule() {
          _classCallCheck2(this, NgxUiLoaderModule);
        }

        _createClass2(NgxUiLoaderModule, null, [{
          key: "forRoot",
          value:
          /**
           * forRoot
           *
           * @returns A module with its provider dependencies
           */
          function forRoot(ngxUiLoaderConfig) {
            return {
              ngModule: NgxUiLoaderModule,
              providers: [{
                provide: NGX_UI_LOADER_CONFIG_TOKEN,
                useValue: ngxUiLoaderConfig
              }]
            };
          }
        }]);

        return NgxUiLoaderModule;
      }();

      NgxUiLoaderModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NgxUiLoaderModule
      });
      NgxUiLoaderModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NgxUiLoaderModule_Factory(t) {
          return new (t || NgxUiLoaderModule)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgxUiLoaderModule, {
          declarations: function declarations() {
            return [NgxUiLoaderComponent, NgxUiLoaderBlurredDirective];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"]];
          },
          exports: function exports() {
            return [NgxUiLoaderComponent, NgxUiLoaderBlurredDirective];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgxUiLoaderModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"]],
            declarations: [NgxUiLoaderComponent, NgxUiLoaderBlurredDirective],
            exports: [NgxUiLoaderComponent, NgxUiLoaderBlurredDirective]
          }]
        }], null, null);
      })();
      /**
       * Injection token for ngx-ui-loader-router configuration
       */


      var NGX_UI_LOADER_ROUTER_CONFIG_TOKEN = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('ngxUiLoaderRouterCustom.config');

      function getExcludeObj(config) {
        var strs;
        var regExps;

        if (config) {
          if (config.exclude) {
            strs = config.exclude.map(function (url) {
              return url.toLowerCase();
            });
          }

          if (config.excludeRegexp) {
            regExps = config.excludeRegexp.map(function (regexp) {
              return new RegExp(regexp, 'i');
            });
          }
        }

        return {
          strs: strs,
          regExps: regExps
        };
      }

      function isIgnored(url, excludeStrings, excludeRegexps) {
        if (excludeStrings) {
          // do not show the loader for urls in the `exclude` list
          if (excludeStrings.findIndex(function (str) {
            return url.toLowerCase().startsWith(str);
          }) !== -1) {
            return true;
          }
        }

        if (excludeRegexps) {
          // do not show the loader for urls which matches regexps in the `excludeRegexp` list
          if (excludeRegexps.findIndex(function (regexp) {
            return regexp.test(url);
          }) !== -1) {
            return true;
          }
        }

        return false;
      }

      var NgxUiLoaderRouterModule = /*#__PURE__*/function () {
        /**
         * Constructor
         */
        function NgxUiLoaderRouterModule(parentModule, customConfig, router, loader) {
          var _this756 = this;

          _classCallCheck2(this, NgxUiLoaderRouterModule);

          if (parentModule) {
            throw new Error('[ngx-ui-loader] - NgxUiLoaderRouterModule is already loaded. It should be imported in the root `AppModule` only!');
          }

          var config = {
            loaderId: loader.getDefaultConfig().masterLoaderId,
            showForeground: true
          };
          this.exclude = getExcludeObj(customConfig);

          if (customConfig) {
            config = Object.assign(Object.assign({}, config), customConfig);
          }

          router.events.subscribe(function (event) {
            if (event instanceof _angular_router__WEBPACK_IMPORTED_MODULE_5__["NavigationStart"]) {
              if (!isIgnored(event.url, _this756.exclude.strs, _this756.exclude.regExps)) {
                if (config.showForeground) {
                  loader.startLoader(config.loaderId, ROUTER_LOADER_TASK_ID);
                } else {
                  loader.startBackgroundLoader(config.loaderId, ROUTER_LOADER_TASK_ID);
                }
              }
            }

            if (event instanceof _angular_router__WEBPACK_IMPORTED_MODULE_5__["NavigationEnd"] || event instanceof _angular_router__WEBPACK_IMPORTED_MODULE_5__["NavigationCancel"] || event instanceof _angular_router__WEBPACK_IMPORTED_MODULE_5__["NavigationError"]) {
              if (!isIgnored(event.url, _this756.exclude.strs, _this756.exclude.regExps)) {
                if (config.showForeground) {
                  loader.stopLoader(config.loaderId, ROUTER_LOADER_TASK_ID);
                } else {
                  loader.stopBackgroundLoader(config.loaderId, ROUTER_LOADER_TASK_ID);
                }
              }
            }
          });
        }
        /**
         * forRoot
         *
         * @returns A module with its provider dependencies
         */


        _createClass2(NgxUiLoaderRouterModule, null, [{
          key: "forRoot",
          value: function forRoot(routerConfig) {
            return {
              ngModule: NgxUiLoaderRouterModule,
              providers: [{
                provide: NGX_UI_LOADER_ROUTER_CONFIG_TOKEN,
                useValue: routerConfig
              }]
            };
          }
        }]);

        return NgxUiLoaderRouterModule;
      }();

      NgxUiLoaderRouterModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NgxUiLoaderRouterModule
      });
      NgxUiLoaderRouterModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NgxUiLoaderRouterModule_Factory(t) {
          return new (t || NgxUiLoaderRouterModule)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgxUiLoaderRouterModule, 12), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NGX_UI_LOADER_ROUTER_CONFIG_TOKEN, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_router__WEBPACK_IMPORTED_MODULE_5__["Router"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgxUiLoaderService));
        }
      });

      NgxUiLoaderRouterModule.ctorParameters = function () {
        return [{
          type: NgxUiLoaderRouterModule,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NGX_UI_LOADER_ROUTER_CONFIG_TOKEN]
          }]
        }, {
          type: _angular_router__WEBPACK_IMPORTED_MODULE_5__["Router"]
        }, {
          type: NgxUiLoaderService
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgxUiLoaderRouterModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{}]
        }], function () {
          return [{
            type: NgxUiLoaderRouterModule,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NGX_UI_LOADER_ROUTER_CONFIG_TOKEN]
            }]
          }, {
            type: _angular_router__WEBPACK_IMPORTED_MODULE_5__["Router"]
          }, {
            type: NgxUiLoaderService
          }];
        }, null);
      })();
      /**
       * Injection token for ngx-ui-loader-http configuration
       */


      var NGX_UI_LOADER_HTTP_CONFIG_TOKEN = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('ngxUiLoaderHttpCustom.config');

      var NgxUiLoaderHttpInterceptor = /*#__PURE__*/function () {
        /**
         * Constructor
         */
        function NgxUiLoaderHttpInterceptor(customConfig, loader) {
          _classCallCheck2(this, NgxUiLoaderHttpInterceptor);

          this.loader = loader;
          this.count = 0;
          this.config = {
            loaderId: this.loader.getDefaultConfig().masterLoaderId,
            showForeground: false
          };
          this.exclude = getExcludeObj(customConfig);

          if (customConfig) {
            this.config = Object.assign(Object.assign({}, this.config), customConfig);
          }
        }

        _createClass2(NgxUiLoaderHttpInterceptor, [{
          key: "intercept",
          value: function intercept(req, next) {
            var _this757 = this;

            if (isIgnored(req.url, this.exclude.strs, this.exclude.regExps)) {
              return next.handle(req);
            }

            this.count++;

            if (this.config.showForeground) {
              this.loader.startLoader(this.config.loaderId, HTTP_LOADER_TASK_ID, this.config);
            } else {
              this.loader.startBackgroundLoader(this.config.loaderId, HTTP_LOADER_TASK_ID, this.config);
            }

            return next.handle(req).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["finalize"])(function () {
              _this757.count--;

              if (_this757.count === 0) {
                if (_this757.config.showForeground) {
                  _this757.loader.stopLoader(_this757.config.loaderId, HTTP_LOADER_TASK_ID);
                } else {
                  _this757.loader.stopBackgroundLoader(_this757.config.loaderId, HTTP_LOADER_TASK_ID);
                }
              }
            }));
          }
        }]);

        return NgxUiLoaderHttpInterceptor;
      }();

      NgxUiLoaderHttpInterceptor.ɵfac = function NgxUiLoaderHttpInterceptor_Factory(t) {
        return new (t || NgxUiLoaderHttpInterceptor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NGX_UI_LOADER_HTTP_CONFIG_TOKEN, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgxUiLoaderService));
      };

      NgxUiLoaderHttpInterceptor.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: NgxUiLoaderHttpInterceptor,
        factory: NgxUiLoaderHttpInterceptor.ɵfac
      });

      NgxUiLoaderHttpInterceptor.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [NGX_UI_LOADER_HTTP_CONFIG_TOKEN]
          }]
        }, {
          type: NgxUiLoaderService
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgxUiLoaderHttpInterceptor, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [NGX_UI_LOADER_HTTP_CONFIG_TOKEN]
            }]
          }, {
            type: NgxUiLoaderService
          }];
        }, null);
      })();

      var NgxUiLoaderHttpModule = /*#__PURE__*/function () {
        /**
         * Constructor
         */
        function NgxUiLoaderHttpModule(parentModule) {
          _classCallCheck2(this, NgxUiLoaderHttpModule);

          if (parentModule) {
            throw new Error('[ngx-ui-loader] - NgxUiLoaderHttpModule is already loaded. It should be imported in the root `AppModule` only!');
          }
        }
        /**
         * forRoot
         *
         * @returns A module with its provider dependencies
         */


        _createClass2(NgxUiLoaderHttpModule, null, [{
          key: "forRoot",
          value: function forRoot(httpConfig) {
            return {
              ngModule: NgxUiLoaderHttpModule,
              providers: [{
                provide: NGX_UI_LOADER_HTTP_CONFIG_TOKEN,
                useValue: httpConfig
              }]
            };
          }
        }]);

        return NgxUiLoaderHttpModule;
      }();

      NgxUiLoaderHttpModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NgxUiLoaderHttpModule
      });
      NgxUiLoaderHttpModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NgxUiLoaderHttpModule_Factory(t) {
          return new (t || NgxUiLoaderHttpModule)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](NgxUiLoaderHttpModule, 12));
        },
        providers: [{
          provide: _angular_common_http__WEBPACK_IMPORTED_MODULE_6__["HTTP_INTERCEPTORS"],
          useClass: NgxUiLoaderHttpInterceptor,
          multi: true
        }]
      });

      NgxUiLoaderHttpModule.ctorParameters = function () {
        return [{
          type: NgxUiLoaderHttpModule,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgxUiLoaderHttpModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            providers: [{
              provide: _angular_common_http__WEBPACK_IMPORTED_MODULE_6__["HTTP_INTERCEPTORS"],
              useClass: NgxUiLoaderHttpInterceptor,
              multi: true
            }]
          }]
        }], function () {
          return [{
            type: NgxUiLoaderHttpModule,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
            }]
          }];
        }, null);
      })();
      /*
       * Public API Surface of ngx-ui-loader
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=ngx-ui-loader.js.map

      /***/

    },

    /***/
    "h/dY":
    /*!*********************************************!*\
      !*** ./node_modules/aws-sdk/lib/request.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function hDY(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ./core */
      "QsWE");

      var AcceptorStateMachine = __webpack_require__(
      /*! ./state_machine */
      "81Wt");

      var inherit = AWS.util.inherit;
      var domain = AWS.util.domain;

      var jmespath = __webpack_require__(
      /*! jmespath */
      "CNpV");
      /**
       * @api private
       */


      var hardErrorStates = {
        success: 1,
        error: 1,
        complete: 1
      };

      function isTerminalState(machine) {
        return Object.prototype.hasOwnProperty.call(hardErrorStates, machine._asm.currentState);
      }

      var fsm = new AcceptorStateMachine();

      fsm.setupStates = function () {
        var transition = function transition(_, done) {
          var self = this;
          self._haltHandlersOnError = false;
          self.emit(self._asm.currentState, function (err) {
            if (err) {
              if (isTerminalState(self)) {
                if (domain && self.domain instanceof domain.Domain) {
                  err.domainEmitter = self;
                  err.domain = self.domain;
                  err.domainThrown = false;
                  self.domain.emit('error', err);
                } else {
                  throw err;
                }
              } else {
                self.response.error = err;
                done(err);
              }
            } else {
              done(self.response.error);
            }
          });
        };

        this.addState('validate', 'build', 'error', transition);
        this.addState('build', 'afterBuild', 'restart', transition);
        this.addState('afterBuild', 'sign', 'restart', transition);
        this.addState('sign', 'send', 'retry', transition);
        this.addState('retry', 'afterRetry', 'afterRetry', transition);
        this.addState('afterRetry', 'sign', 'error', transition);
        this.addState('send', 'validateResponse', 'retry', transition);
        this.addState('validateResponse', 'extractData', 'extractError', transition);
        this.addState('extractError', 'extractData', 'retry', transition);
        this.addState('extractData', 'success', 'retry', transition);
        this.addState('restart', 'build', 'error', transition);
        this.addState('success', 'complete', 'complete', transition);
        this.addState('error', 'complete', 'complete', transition);
        this.addState('complete', null, null, transition);
      };

      fsm.setupStates();
      /**
       * ## Asynchronous Requests
       *
       * All requests made through the SDK are asynchronous and use a
       * callback interface. Each service method that kicks off a request
       * returns an `AWS.Request` object that you can use to register
       * callbacks.
       *
       * For example, the following service method returns the request
       * object as "request", which can be used to register callbacks:
       *
       * ```javascript
       * // request is an AWS.Request object
       * var request = ec2.describeInstances();
       *
       * // register callbacks on request to retrieve response data
       * request.on('success', function(response) {
       *   console.log(response.data);
       * });
       * ```
       *
       * When a request is ready to be sent, the {send} method should
       * be called:
       *
       * ```javascript
       * request.send();
       * ```
       *
       * Since registered callbacks may or may not be idempotent, requests should only
       * be sent once. To perform the same operation multiple times, you will need to
       * create multiple request objects, each with its own registered callbacks.
       *
       * ## Removing Default Listeners for Events
       *
       * Request objects are built with default listeners for the various events,
       * depending on the service type. In some cases, you may want to remove
       * some built-in listeners to customize behaviour. Doing this requires
       * access to the built-in listener functions, which are exposed through
       * the {AWS.EventListeners.Core} namespace. For instance, you may
       * want to customize the HTTP handler used when sending a request. In this
       * case, you can remove the built-in listener associated with the 'send'
       * event, the {AWS.EventListeners.Core.SEND} listener and add your own.
       *
       * ## Multiple Callbacks and Chaining
       *
       * You can register multiple callbacks on any request object. The
       * callbacks can be registered for different events, or all for the
       * same event. In addition, you can chain callback registration, for
       * example:
       *
       * ```javascript
       * request.
       *   on('success', function(response) {
       *     console.log("Success!");
       *   }).
       *   on('error', function(error, response) {
       *     console.log("Error!");
       *   }).
       *   on('complete', function(response) {
       *     console.log("Always!");
       *   }).
       *   send();
       * ```
       *
       * The above example will print either "Success! Always!", or "Error! Always!",
       * depending on whether the request succeeded or not.
       *
       * @!attribute httpRequest
       *   @readonly
       *   @!group HTTP Properties
       *   @return [AWS.HttpRequest] the raw HTTP request object
       *     containing request headers and body information
       *     sent by the service.
       *
       * @!attribute startTime
       *   @readonly
       *   @!group Operation Properties
       *   @return [Date] the time that the request started
       *
       * @!group Request Building Events
       *
       * @!event validate(request)
       *   Triggered when a request is being validated. Listeners
       *   should throw an error if the request should not be sent.
       *   @param request [Request] the request object being sent
       *   @see AWS.EventListeners.Core.VALIDATE_CREDENTIALS
       *   @see AWS.EventListeners.Core.VALIDATE_REGION
       *   @example Ensuring that a certain parameter is set before sending a request
       *     var req = s3.putObject(params);
       *     req.on('validate', function() {
       *       if (!req.params.Body.match(/^Hello\s/)) {
       *         throw new Error('Body must start with "Hello "');
       *       }
       *     });
       *     req.send(function(err, data) { ... });
       *
       * @!event build(request)
       *   Triggered when the request payload is being built. Listeners
       *   should fill the necessary information to send the request
       *   over HTTP.
       *   @param (see AWS.Request~validate)
       *   @example Add a custom HTTP header to a request
       *     var req = s3.putObject(params);
       *     req.on('build', function() {
       *       req.httpRequest.headers['Custom-Header'] = 'value';
       *     });
       *     req.send(function(err, data) { ... });
       *
       * @!event sign(request)
       *   Triggered when the request is being signed. Listeners should
       *   add the correct authentication headers and/or adjust the body,
       *   depending on the authentication mechanism being used.
       *   @param (see AWS.Request~validate)
       *
       * @!group Request Sending Events
       *
       * @!event send(response)
       *   Triggered when the request is ready to be sent. Listeners
       *   should call the underlying transport layer to initiate
       *   the sending of the request.
       *   @param response [Response] the response object
       *   @context [Request] the request object that was sent
       *   @see AWS.EventListeners.Core.SEND
       *
       * @!event retry(response)
       *   Triggered when a request failed and might need to be retried or redirected.
       *   If the response is retryable, the listener should set the
       *   `response.error.retryable` property to `true`, and optionally set
       *   `response.error.retryDelay` to the millisecond delay for the next attempt.
       *   In the case of a redirect, `response.error.redirect` should be set to
       *   `true` with `retryDelay` set to an optional delay on the next request.
       *
       *   If a listener decides that a request should not be retried,
       *   it should set both `retryable` and `redirect` to false.
       *
       *   Note that a retryable error will be retried at most
       *   {AWS.Config.maxRetries} times (based on the service object's config).
       *   Similarly, a request that is redirected will only redirect at most
       *   {AWS.Config.maxRedirects} times.
       *
       *   @param (see AWS.Request~send)
       *   @context (see AWS.Request~send)
       *   @example Adding a custom retry for a 404 response
       *     request.on('retry', function(response) {
       *       // this resource is not yet available, wait 10 seconds to get it again
       *       if (response.httpResponse.statusCode === 404 && response.error) {
       *         response.error.retryable = true;   // retry this error
       *         response.error.retryDelay = 10000; // wait 10 seconds
       *       }
       *     });
       *
       * @!group Data Parsing Events
       *
       * @!event extractError(response)
       *   Triggered on all non-2xx requests so that listeners can extract
       *   error details from the response body. Listeners to this event
       *   should set the `response.error` property.
       *   @param (see AWS.Request~send)
       *   @context (see AWS.Request~send)
       *
       * @!event extractData(response)
       *   Triggered in successful requests to allow listeners to
       *   de-serialize the response body into `response.data`.
       *   @param (see AWS.Request~send)
       *   @context (see AWS.Request~send)
       *
       * @!group Completion Events
       *
       * @!event success(response)
       *   Triggered when the request completed successfully.
       *   `response.data` will contain the response data and
       *   `response.error` will be null.
       *   @param (see AWS.Request~send)
       *   @context (see AWS.Request~send)
       *
       * @!event error(error, response)
       *   Triggered when an error occurs at any point during the
       *   request. `response.error` will contain details about the error
       *   that occurred. `response.data` will be null.
       *   @param error [Error] the error object containing details about
       *     the error that occurred.
       *   @param (see AWS.Request~send)
       *   @context (see AWS.Request~send)
       *
       * @!event complete(response)
       *   Triggered whenever a request cycle completes. `response.error`
       *   should be checked, since the request may have failed.
       *   @param (see AWS.Request~send)
       *   @context (see AWS.Request~send)
       *
       * @!group HTTP Events
       *
       * @!event httpHeaders(statusCode, headers, response, statusMessage)
       *   Triggered when headers are sent by the remote server
       *   @param statusCode [Integer] the HTTP response code
       *   @param headers [map<String,String>] the response headers
       *   @param (see AWS.Request~send)
       *   @param statusMessage [String] A status message corresponding to the HTTP
       *                                 response code
       *   @context (see AWS.Request~send)
       *
       * @!event httpData(chunk, response)
       *   Triggered when data is sent by the remote server
       *   @param chunk [Buffer] the buffer data containing the next data chunk
       *     from the server
       *   @param (see AWS.Request~send)
       *   @context (see AWS.Request~send)
       *   @see AWS.EventListeners.Core.HTTP_DATA
       *
       * @!event httpUploadProgress(progress, response)
       *   Triggered when the HTTP request has uploaded more data
       *   @param progress [map] An object containing the `loaded` and `total` bytes
       *     of the request.
       *   @param (see AWS.Request~send)
       *   @context (see AWS.Request~send)
       *   @note This event will not be emitted in Node.js 0.8.x.
       *
       * @!event httpDownloadProgress(progress, response)
       *   Triggered when the HTTP request has downloaded more data
       *   @param progress [map] An object containing the `loaded` and `total` bytes
       *     of the request.
       *   @param (see AWS.Request~send)
       *   @context (see AWS.Request~send)
       *   @note This event will not be emitted in Node.js 0.8.x.
       *
       * @!event httpError(error, response)
       *   Triggered when the HTTP request failed
       *   @param error [Error] the error object that was thrown
       *   @param (see AWS.Request~send)
       *   @context (see AWS.Request~send)
       *
       * @!event httpDone(response)
       *   Triggered when the server is finished sending data
       *   @param (see AWS.Request~send)
       *   @context (see AWS.Request~send)
       *
       * @see AWS.Response
       */

      AWS.Request = inherit({
        /**
         * Creates a request for an operation on a given service with
         * a set of input parameters.
         *
         * @param service [AWS.Service] the service to perform the operation on
         * @param operation [String] the operation to perform on the service
         * @param params [Object] parameters to send to the operation.
         *   See the operation's documentation for the format of the
         *   parameters.
         */
        constructor: function Request(service, operation, params) {
          var endpoint = service.endpoint;
          var region = service.config.region;
          var customUserAgent = service.config.customUserAgent;

          if (service.isGlobalEndpoint) {
            if (service.signingRegion) {
              region = service.signingRegion;
            } else {
              region = 'us-east-1';
            }
          }

          this.domain = domain && domain.active;
          this.service = service;
          this.operation = operation;
          this.params = params || {};
          this.httpRequest = new AWS.HttpRequest(endpoint, region);
          this.httpRequest.appendToUserAgent(customUserAgent);
          this.startTime = service.getSkewCorrectedDate();
          this.response = new AWS.Response(this);
          this._asm = new AcceptorStateMachine(fsm.states, 'validate');
          this._haltHandlersOnError = false;
          AWS.SequentialExecutor.call(this);
          this.emit = this.emitEvent;
        },

        /**
         * @!group Sending a Request
         */

        /**
         * @overload send(callback = null)
         *   Sends the request object.
         *
         *   @callback callback function(err, data)
         *     If a callback is supplied, it is called when a response is returned
         *     from the service.
         *     @context [AWS.Request] the request object being sent.
         *     @param err [Error] the error object returned from the request.
         *       Set to `null` if the request is successful.
         *     @param data [Object] the de-serialized data returned from
         *       the request. Set to `null` if a request error occurs.
         *   @example Sending a request with a callback
         *     request = s3.putObject({Bucket: 'bucket', Key: 'key'});
         *     request.send(function(err, data) { console.log(err, data); });
         *   @example Sending a request with no callback (using event handlers)
         *     request = s3.putObject({Bucket: 'bucket', Key: 'key'});
         *     request.on('complete', function(response) { ... }); // register a callback
         *     request.send();
         */
        send: function send(callback) {
          if (callback) {
            // append to user agent
            this.httpRequest.appendToUserAgent('callback');
            this.on('complete', function (resp) {
              callback.call(resp, resp.error, resp.data);
            });
          }

          this.runTo();
          return this.response;
        },

        /**
         * @!method  promise()
         *   Sends the request and returns a 'thenable' promise.
         *
         *   Two callbacks can be provided to the `then` method on the returned promise.
         *   The first callback will be called if the promise is fulfilled, and the second
         *   callback will be called if the promise is rejected.
         *   @callback fulfilledCallback function(data)
         *     Called if the promise is fulfilled.
         *     @param data [Object] the de-serialized data returned from the request.
         *   @callback rejectedCallback function(error)
         *     Called if the promise is rejected.
         *     @param error [Error] the error object returned from the request.
         *   @return [Promise] A promise that represents the state of the request.
         *   @example Sending a request using promises.
         *     var request = s3.putObject({Bucket: 'bucket', Key: 'key'});
         *     var result = request.promise();
         *     result.then(function(data) { ... }, function(error) { ... });
         */

        /**
         * @api private
         */
        build: function build(callback) {
          return this.runTo('send', callback);
        },

        /**
         * @api private
         */
        runTo: function runTo(state, done) {
          this._asm.runTo(state, done, this);

          return this;
        },

        /**
         * Aborts a request, emitting the error and complete events.
         *
         * @!macro nobrowser
         * @example Aborting a request after sending
         *   var params = {
         *     Bucket: 'bucket', Key: 'key',
         *     Body: Buffer.alloc(1024 * 1024 * 5) // 5MB payload
         *   };
         *   var request = s3.putObject(params);
         *   request.send(function (err, data) {
         *     if (err) console.log("Error:", err.code, err.message);
         *     else console.log(data);
         *   });
         *
         *   // abort request in 1 second
         *   setTimeout(request.abort.bind(request), 1000);
         *
         *   // prints "Error: RequestAbortedError Request aborted by user"
         * @return [AWS.Request] the same request object, for chaining.
         * @since v1.4.0
         */
        abort: function abort() {
          this.removeAllListeners('validateResponse');
          this.removeAllListeners('extractError');
          this.on('validateResponse', function addAbortedError(resp) {
            resp.error = AWS.util.error(new Error('Request aborted by user'), {
              code: 'RequestAbortedError',
              retryable: false
            });
          });

          if (this.httpRequest.stream && !this.httpRequest.stream.didCallback) {
            // abort HTTP stream
            this.httpRequest.stream.abort();

            if (this.httpRequest._abortCallback) {
              this.httpRequest._abortCallback();
            } else {
              this.removeAllListeners('send'); // haven't sent yet, so let's not
            }
          }

          return this;
        },

        /**
         * Iterates over each page of results given a pageable request, calling
         * the provided callback with each page of data. After all pages have been
         * retrieved, the callback is called with `null` data.
         *
         * @note This operation can generate multiple requests to a service.
         * @example Iterating over multiple pages of objects in an S3 bucket
         *   var pages = 1;
         *   s3.listObjects().eachPage(function(err, data) {
         *     if (err) return;
         *     console.log("Page", pages++);
         *     console.log(data);
         *   });
         * @example Iterating over multiple pages with an asynchronous callback
         *   s3.listObjects(params).eachPage(function(err, data, done) {
         *     doSomethingAsyncAndOrExpensive(function() {
         *       // The next page of results isn't fetched until done is called
         *       done();
         *     });
         *   });
         * @callback callback function(err, data, [doneCallback])
         *   Called with each page of resulting data from the request. If the
         *   optional `doneCallback` is provided in the function, it must be called
         *   when the callback is complete.
         *
         *   @param err [Error] an error object, if an error occurred.
         *   @param data [Object] a single page of response data. If there is no
         *     more data, this object will be `null`.
         *   @param doneCallback [Function] an optional done callback. If this
         *     argument is defined in the function declaration, it should be called
         *     when the next page is ready to be retrieved. This is useful for
         *     controlling serial pagination across asynchronous operations.
         *   @return [Boolean] if the callback returns `false`, pagination will
         *     stop.
         *
         * @see AWS.Request.eachItem
         * @see AWS.Response.nextPage
         * @since v1.4.0
         */
        eachPage: function eachPage(callback) {
          // Make all callbacks async-ish
          callback = AWS.util.fn.makeAsync(callback, 3);

          function wrappedCallback(response) {
            callback.call(response, response.error, response.data, function (result) {
              if (result === false) return;

              if (response.hasNextPage()) {
                response.nextPage().on('complete', wrappedCallback).send();
              } else {
                callback.call(response, null, null, AWS.util.fn.noop);
              }
            });
          }

          this.on('complete', wrappedCallback).send();
        },

        /**
         * Enumerates over individual items of a request, paging the responses if
         * necessary.
         *
         * @api experimental
         * @since v1.4.0
         */
        eachItem: function eachItem(callback) {
          var self = this;

          function wrappedCallback(err, data) {
            if (err) return callback(err, null);
            if (data === null) return callback(null, null);
            var config = self.service.paginationConfig(self.operation);
            var resultKey = config.resultKey;
            if (Array.isArray(resultKey)) resultKey = resultKey[0];
            var items = jmespath.search(data, resultKey);
            var continueIteration = true;
            AWS.util.arrayEach(items, function (item) {
              continueIteration = callback(null, item);

              if (continueIteration === false) {
                return AWS.util.abort;
              }
            });
            return continueIteration;
          }

          this.eachPage(wrappedCallback);
        },

        /**
         * @return [Boolean] whether the operation can return multiple pages of
         *   response data.
         * @see AWS.Response.eachPage
         * @since v1.4.0
         */
        isPageable: function isPageable() {
          return this.service.paginationConfig(this.operation) ? true : false;
        },

        /**
         * Sends the request and converts the request object into a readable stream
         * that can be read from or piped into a writable stream.
         *
         * @note The data read from a readable stream contains only
         *   the raw HTTP body contents.
         * @example Manually reading from a stream
         *   request.createReadStream().on('data', function(data) {
         *     console.log("Got data:", data.toString());
         *   });
         * @example Piping a request body into a file
         *   var out = fs.createWriteStream('/path/to/outfile.jpg');
         *   s3.service.getObject(params).createReadStream().pipe(out);
         * @return [Stream] the readable stream object that can be piped
         *   or read from (by registering 'data' event listeners).
         * @!macro nobrowser
         */
        createReadStream: function createReadStream() {
          var streams = AWS.util.stream;
          var req = this;
          var stream = null;

          if (AWS.HttpClient.streamsApiVersion === 2) {
            stream = new streams.PassThrough();
            process.nextTick(function () {
              req.send();
            });
          } else {
            stream = new streams.Stream();
            stream.readable = true;
            stream.sent = false;
            stream.on('newListener', function (event) {
              if (!stream.sent && event === 'data') {
                stream.sent = true;
                process.nextTick(function () {
                  req.send();
                });
              }
            });
          }

          this.on('error', function (err) {
            stream.emit('error', err);
          });
          this.on('httpHeaders', function streamHeaders(statusCode, headers, resp) {
            if (statusCode < 300) {
              req.removeListener('httpData', AWS.EventListeners.Core.HTTP_DATA);
              req.removeListener('httpError', AWS.EventListeners.Core.HTTP_ERROR);
              req.on('httpError', function streamHttpError(error) {
                resp.error = error;
                resp.error.retryable = false;
              });
              var shouldCheckContentLength = false;
              var expectedLen;

              if (req.httpRequest.method !== 'HEAD') {
                expectedLen = parseInt(headers['content-length'], 10);
              }

              if (expectedLen !== undefined && !isNaN(expectedLen) && expectedLen >= 0) {
                shouldCheckContentLength = true;
                var receivedLen = 0;
              }

              var checkContentLengthAndEmit = function checkContentLengthAndEmit() {
                if (shouldCheckContentLength && receivedLen !== expectedLen) {
                  stream.emit('error', AWS.util.error(new Error('Stream content length mismatch. Received ' + receivedLen + ' of ' + expectedLen + ' bytes.'), {
                    code: 'StreamContentLengthMismatch'
                  }));
                } else if (AWS.HttpClient.streamsApiVersion === 2) {
                  stream.end();
                } else {
                  stream.emit('end');
                }
              };

              var httpStream = resp.httpResponse.createUnbufferedStream();

              if (AWS.HttpClient.streamsApiVersion === 2) {
                if (shouldCheckContentLength) {
                  var lengthAccumulator = new streams.PassThrough();

                  lengthAccumulator._write = function (chunk) {
                    if (chunk && chunk.length) {
                      receivedLen += chunk.length;
                    }

                    return streams.PassThrough.prototype._write.apply(this, arguments);
                  };

                  lengthAccumulator.on('end', checkContentLengthAndEmit);
                  stream.on('error', function (err) {
                    shouldCheckContentLength = false;
                    httpStream.unpipe(lengthAccumulator);
                    lengthAccumulator.emit('end');
                    lengthAccumulator.end();
                  });
                  httpStream.pipe(lengthAccumulator).pipe(stream, {
                    end: false
                  });
                } else {
                  httpStream.pipe(stream);
                }
              } else {
                if (shouldCheckContentLength) {
                  httpStream.on('data', function (arg) {
                    if (arg && arg.length) {
                      receivedLen += arg.length;
                    }
                  });
                }

                httpStream.on('data', function (arg) {
                  stream.emit('data', arg);
                });
                httpStream.on('end', checkContentLengthAndEmit);
              }

              httpStream.on('error', function (err) {
                shouldCheckContentLength = false;
                stream.emit('error', err);
              });
            }
          });
          return stream;
        },

        /**
         * @param [Array,Response] args This should be the response object,
         *   or an array of args to send to the event.
         * @api private
         */
        emitEvent: function emit(eventName, args, done) {
          if (typeof args === 'function') {
            done = args;
            args = null;
          }

          if (!done) done = function done() {};
          if (!args) args = this.eventParameters(eventName, this.response);
          var origEmit = AWS.SequentialExecutor.prototype.emit;
          origEmit.call(this, eventName, args, function (err) {
            if (err) this.response.error = err;
            done.call(this, err);
          });
        },

        /**
         * @api private
         */
        eventParameters: function eventParameters(eventName) {
          switch (eventName) {
            case 'restart':
            case 'validate':
            case 'sign':
            case 'build':
            case 'afterValidate':
            case 'afterBuild':
              return [this];

            case 'error':
              return [this.response.error, this.response];

            default:
              return [this.response];
          }
        },

        /**
         * @api private
         */
        presign: function presign(expires, callback) {
          if (!callback && typeof expires === 'function') {
            callback = expires;
            expires = null;
          }

          return new AWS.Signers.Presign().sign(this.toGet(), expires, callback);
        },

        /**
         * @api private
         */
        isPresigned: function isPresigned() {
          return Object.prototype.hasOwnProperty.call(this.httpRequest.headers, 'presigned-expires');
        },

        /**
         * @api private
         */
        toUnauthenticated: function toUnauthenticated() {
          this._unAuthenticated = true;
          this.removeListener('validate', AWS.EventListeners.Core.VALIDATE_CREDENTIALS);
          this.removeListener('sign', AWS.EventListeners.Core.SIGN);
          return this;
        },

        /**
         * @api private
         */
        toGet: function toGet() {
          if (this.service.api.protocol === 'query' || this.service.api.protocol === 'ec2') {
            this.removeListener('build', this.buildAsGet);
            this.addListener('build', this.buildAsGet);
          }

          return this;
        },

        /**
         * @api private
         */
        buildAsGet: function buildAsGet(request) {
          request.httpRequest.method = 'GET';
          request.httpRequest.path = request.service.endpoint.path + '?' + request.httpRequest.body;
          request.httpRequest.body = ''; // don't need these headers on a GET request

          delete request.httpRequest.headers['Content-Length'];
          delete request.httpRequest.headers['Content-Type'];
        },

        /**
         * @api private
         */
        haltHandlersOnError: function haltHandlersOnError() {
          this._haltHandlersOnError = true;
        }
      });
      /**
       * @api private
       */

      AWS.Request.addPromisesToClass = function addPromisesToClass(PromiseDependency) {
        this.prototype.promise = function promise() {
          var self = this; // append to user agent

          this.httpRequest.appendToUserAgent('promise');
          return new PromiseDependency(function (resolve, reject) {
            self.on('complete', function (resp) {
              if (resp.error) {
                reject(resp.error);
              } else {
                // define $response property so that it is not enumerable
                // this prevents circular reference errors when stringifying the JSON object
                resolve(Object.defineProperty(resp.data || {}, '$response', {
                  value: resp
                }));
              }
            });
            self.runTo();
          });
        };
      };
      /**
       * @api private
       */


      AWS.Request.deletePromisesFromClass = function deletePromisesFromClass() {
        delete this.prototype.promise;
      };

      AWS.util.addPromises(AWS.Request);
      AWS.util.mixin(AWS.Request, AWS.SequentialExecutor);
      /***/
    },

    /***/
    "hEW/":
    /*!*****************************************************************!*\
      !*** ./node_modules/aws-sdk/vendor/endpoint-cache/utils/LRU.js ***!
      \*****************************************************************/

    /*! no static exports found */

    /***/
    function hEW(module, exports, __webpack_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });

      var LinkedListNode =
      /** @class */
      function () {
        function LinkedListNode(key, value) {
          this.key = key;
          this.value = value;
        }

        return LinkedListNode;
      }();

      var LRUCache =
      /** @class */
      function () {
        function LRUCache(size) {
          this.nodeMap = {};
          this.size = 0;

          if (typeof size !== 'number' || size < 1) {
            throw new Error('Cache size can only be positive number');
          }

          this.sizeLimit = size;
        }

        Object.defineProperty(LRUCache.prototype, "length", {
          get: function get() {
            return this.size;
          },
          enumerable: true,
          configurable: true
        });

        LRUCache.prototype.prependToList = function (node) {
          if (!this.headerNode) {
            this.tailNode = node;
          } else {
            this.headerNode.prev = node;
            node.next = this.headerNode;
          }

          this.headerNode = node;
          this.size++;
        };

        LRUCache.prototype.removeFromTail = function () {
          if (!this.tailNode) {
            return undefined;
          }

          var node = this.tailNode;
          var prevNode = node.prev;

          if (prevNode) {
            prevNode.next = undefined;
          }

          node.prev = undefined;
          this.tailNode = prevNode;
          this.size--;
          return node;
        };

        LRUCache.prototype.detachFromList = function (node) {
          if (this.headerNode === node) {
            this.headerNode = node.next;
          }

          if (this.tailNode === node) {
            this.tailNode = node.prev;
          }

          if (node.prev) {
            node.prev.next = node.next;
          }

          if (node.next) {
            node.next.prev = node.prev;
          }

          node.next = undefined;
          node.prev = undefined;
          this.size--;
        };

        LRUCache.prototype.get = function (key) {
          if (this.nodeMap[key]) {
            var node = this.nodeMap[key];
            this.detachFromList(node);
            this.prependToList(node);
            return node.value;
          }
        };

        LRUCache.prototype.remove = function (key) {
          if (this.nodeMap[key]) {
            var node = this.nodeMap[key];
            this.detachFromList(node);
            delete this.nodeMap[key];
          }
        };

        LRUCache.prototype.put = function (key, value) {
          if (this.nodeMap[key]) {
            this.remove(key);
          } else if (this.size === this.sizeLimit) {
            var tailNode = this.removeFromTail();
            var key_1 = tailNode.key;
            delete this.nodeMap[key_1];
          }

          var newNode = new LinkedListNode(key, value);
          this.nodeMap[key] = newNode;
          this.prependToList(newNode);
        };

        LRUCache.prototype.empty = function () {
          var keys = Object.keys(this.nodeMap);

          for (var i = 0; i < keys.length; i++) {
            var key = keys[i];
            var node = this.nodeMap[key];
            this.detachFromList(node);
            delete this.nodeMap[key];
          }
        };

        return LRUCache;
      }();

      exports.LRUCache = LRUCache;
      /***/
    },

    /***/
    "hKrs":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/bg.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function hKrs(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Bulgarian [bg]
      //! author : Krasen Borisov : https://github.com/kraz
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var bg = moment.defineLocale('bg', {
          months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),
          monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),
          weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),
          weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'),
          weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
          longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'D.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY H:mm',
            LLLL: 'dddd, D MMMM YYYY H:mm'
          },
          calendar: {
            sameDay: '[Днес в] LT',
            nextDay: '[Утре в] LT',
            nextWeek: 'dddd [в] LT',
            lastDay: '[Вчера в] LT',
            lastWeek: function lastWeek() {
              switch (this.day()) {
                case 0:
                case 3:
                case 6:
                  return '[Миналата] dddd [в] LT';

                case 1:
                case 2:
                case 4:
                case 5:
                  return '[Миналия] dddd [в] LT';
              }
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: 'след %s',
            past: 'преди %s',
            s: 'няколко секунди',
            ss: '%d секунди',
            m: 'минута',
            mm: '%d минути',
            h: 'час',
            hh: '%d часа',
            d: 'ден',
            dd: '%d дена',
            w: 'седмица',
            ww: '%d седмици',
            M: 'месец',
            MM: '%d месеца',
            y: 'година',
            yy: '%d години'
          },
          dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
          ordinal: function ordinal(number) {
            var lastDigit = number % 10,
                last2Digits = number % 100;

            if (number === 0) {
              return number + '-ев';
            } else if (last2Digits === 0) {
              return number + '-ен';
            } else if (last2Digits > 10 && last2Digits < 20) {
              return number + '-ти';
            } else if (lastDigit === 1) {
              return number + '-ви';
            } else if (lastDigit === 2) {
              return number + '-ри';
            } else if (lastDigit === 7 || lastDigit === 8) {
              return number + '-ми';
            } else {
              return number + '-ти';
            }
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return bg;
      });
      /***/

    },

    /***/
    "hKy8":
    /*!*****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/pairs.js ***!
      \*****************************************************************/

    /*! exports provided: pairs, dispatch */

    /***/
    function hKy8(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "pairs", function () {
        return pairs;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "dispatch", function () {
        return dispatch;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../Subscription */
      "quSY");

      function pairs(obj, scheduler) {
        if (!scheduler) {
          return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
            var keys = Object.keys(obj);

            for (var i = 0; i < keys.length && !subscriber.closed; i++) {
              var key = keys[i];

              if (obj.hasOwnProperty(key)) {
                subscriber.next([key, obj[key]]);
              }
            }

            subscriber.complete();
          });
        } else {
          return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
            var keys = Object.keys(obj);
            var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
            subscription.add(scheduler.schedule(dispatch, 0, {
              keys: keys,
              index: 0,
              subscriber: subscriber,
              subscription: subscription,
              obj: obj
            }));
            return subscription;
          });
        }
      }

      function dispatch(state) {
        var keys = state.keys,
            index = state.index,
            subscriber = state.subscriber,
            subscription = state.subscription,
            obj = state.obj;

        if (!subscriber.closed) {
          if (index < keys.length) {
            var key = keys[index];
            subscriber.next([key, obj[key]]);
            subscription.add(this.schedule({
              keys: keys,
              index: index + 1,
              subscriber: subscriber,
              subscription: subscription,
              obj: obj
            }));
          } else {
            subscriber.complete();
          }
        }
      } //# sourceMappingURL=pairs.js.map

      /***/

    },

    /***/
    "hROZ":
    /*!**********************************************************!*\
      !*** ./node_modules/aws-sdk/lib/region_config_data.json ***!
      \**********************************************************/

    /*! exports provided: rules, patterns, default */

    /***/
    function hROZ(module) {
      module.exports = JSON.parse("{\"rules\":{\"*/*\":{\"endpoint\":\"{service}.{region}.amazonaws.com\"},\"cn-*/*\":{\"endpoint\":\"{service}.{region}.amazonaws.com.cn\"},\"us-iso-*/*\":{\"endpoint\":\"{service}.{region}.c2s.ic.gov\"},\"us-isob-*/*\":{\"endpoint\":\"{service}.{region}.sc2s.sgov.gov\"},\"*/budgets\":\"globalSSL\",\"*/cloudfront\":\"globalSSL\",\"*/sts\":\"globalSSL\",\"*/importexport\":{\"endpoint\":\"{service}.amazonaws.com\",\"signatureVersion\":\"v2\",\"globalEndpoint\":true},\"*/route53\":\"globalSSL\",\"cn-*/route53\":{\"endpoint\":\"{service}.amazonaws.com.cn\",\"globalEndpoint\":true,\"signingRegion\":\"cn-northwest-1\"},\"us-gov-*/route53\":\"globalGovCloud\",\"*/waf\":\"globalSSL\",\"*/iam\":\"globalSSL\",\"cn-*/iam\":{\"endpoint\":\"{service}.cn-north-1.amazonaws.com.cn\",\"globalEndpoint\":true,\"signingRegion\":\"cn-north-1\"},\"us-gov-*/iam\":\"globalGovCloud\",\"us-gov-*/sts\":{\"endpoint\":\"{service}.{region}.amazonaws.com\"},\"us-gov-west-1/s3\":\"s3signature\",\"us-west-1/s3\":\"s3signature\",\"us-west-2/s3\":\"s3signature\",\"eu-west-1/s3\":\"s3signature\",\"ap-southeast-1/s3\":\"s3signature\",\"ap-southeast-2/s3\":\"s3signature\",\"ap-northeast-1/s3\":\"s3signature\",\"sa-east-1/s3\":\"s3signature\",\"us-east-1/s3\":{\"endpoint\":\"{service}.amazonaws.com\",\"signatureVersion\":\"s3\"},\"us-east-1/sdb\":{\"endpoint\":\"{service}.amazonaws.com\",\"signatureVersion\":\"v2\"},\"*/sdb\":{\"endpoint\":\"{service}.{region}.amazonaws.com\",\"signatureVersion\":\"v2\"}},\"patterns\":{\"globalSSL\":{\"endpoint\":\"https://{service}.amazonaws.com\",\"globalEndpoint\":true,\"signingRegion\":\"us-east-1\"},\"globalGovCloud\":{\"endpoint\":\"{service}.us-gov.amazonaws.com\",\"globalEndpoint\":true,\"signingRegion\":\"us-gov-west-1\"},\"s3signature\":{\"endpoint\":\"{service}.{region}.amazonaws.com\",\"signatureVersion\":\"s3\"}}}");
      /***/
    },

    /***/
    "henJ":
    /*!*************************************************!*\
      !*** ./node_modules/aws-sdk/lib/json/parser.js ***!
      \*************************************************/

    /*! no static exports found */

    /***/
    function henJ(module, exports, __webpack_require__) {
      var util = __webpack_require__(
      /*! ../util */
      "BaN1");

      function JsonParser() {}

      JsonParser.prototype.parse = function (value, shape) {
        return translate(JSON.parse(value), shape);
      };

      function translate(value, shape) {
        if (!shape || value === undefined) return undefined;

        switch (shape.type) {
          case 'structure':
            return translateStructure(value, shape);

          case 'map':
            return translateMap(value, shape);

          case 'list':
            return translateList(value, shape);

          default:
            return translateScalar(value, shape);
        }
      }

      function translateStructure(structure, shape) {
        if (structure == null) return undefined;
        var struct = {};
        var shapeMembers = shape.members;
        util.each(shapeMembers, function (name, memberShape) {
          var locationName = memberShape.isLocationName ? memberShape.name : name;

          if (Object.prototype.hasOwnProperty.call(structure, locationName)) {
            var value = structure[locationName];
            var result = translate(value, memberShape);
            if (result !== undefined) struct[name] = result;
          }
        });
        return struct;
      }

      function translateList(list, shape) {
        if (list == null) return undefined;
        var out = [];
        util.arrayEach(list, function (value) {
          var result = translate(value, shape.member);
          if (result === undefined) out.push(null);else out.push(result);
        });
        return out;
      }

      function translateMap(map, shape) {
        if (map == null) return undefined;
        var out = {};
        util.each(map, function (key, value) {
          var result = translate(value, shape.value);
          if (result === undefined) out[key] = null;else out[key] = result;
        });
        return out;
      }

      function translateScalar(value, shape) {
        return shape.toType(value);
      }
      /**
       * @api private
       */


      module.exports = JsonParser;
      /***/
    },

    /***/
    "honF":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/my.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function honF(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Burmese [my]
      //! author : Squar team, mysquar.com
      //! author : David Rossellat : https://github.com/gholadr
      //! author : Tin Aung Lin : https://github.com/thanyawzinmin
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var symbolMap = {
          1: '၁',
          2: '၂',
          3: '၃',
          4: '၄',
          5: '၅',
          6: '၆',
          7: '၇',
          8: '၈',
          9: '၉',
          0: '၀'
        },
            numberMap = {
          '၁': '1',
          '၂': '2',
          '၃': '3',
          '၄': '4',
          '၅': '5',
          '၆': '6',
          '၇': '7',
          '၈': '8',
          '၉': '9',
          '၀': '0'
        };
        var my = moment.defineLocale('my', {
          months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),
          monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),
          weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),
          weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
          weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[ယနေ.] LT [မှာ]',
            nextDay: '[မနက်ဖြန်] LT [မှာ]',
            nextWeek: 'dddd LT [မှာ]',
            lastDay: '[မနေ.က] LT [မှာ]',
            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'လာမည့် %s မှာ',
            past: 'လွန်ခဲ့သော %s က',
            s: 'စက္ကန်.အနည်းငယ်',
            ss: '%d စက္ကန့်',
            m: 'တစ်မိနစ်',
            mm: '%d မိနစ်',
            h: 'တစ်နာရီ',
            hh: '%d နာရီ',
            d: 'တစ်ရက်',
            dd: '%d ရက်',
            M: 'တစ်လ',
            MM: '%d လ',
            y: 'တစ်နှစ်',
            yy: '%d နှစ်'
          },
          preparse: function preparse(string) {
            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {
              return numberMap[match];
            });
          },
          postformat: function postformat(string) {
            return string.replace(/\d/g, function (match) {
              return symbolMap[match];
            });
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return my;
      });
      /***/

    },

    /***/
    "iEDd":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/gl.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function iEDd(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Galician [gl]
      //! author : Juan G. Hurtado : https://github.com/juanghurtado
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var gl = moment.defineLocale('gl', {
          months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),
          monthsShort: 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),
          monthsParseExact: true,
          weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),
          weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),
          weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY H:mm',
            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm'
          },
          calendar: {
            sameDay: function sameDay() {
              return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';
            },
            nextDay: function nextDay() {
              return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';
            },
            nextWeek: function nextWeek() {
              return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT';
            },
            lastDay: function lastDay() {
              return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT';
            },
            lastWeek: function lastWeek() {
              return '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT';
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: function future(str) {
              if (str.indexOf('un') === 0) {
                return 'n' + str;
              }

              return 'en ' + str;
            },
            past: 'hai %s',
            s: 'uns segundos',
            ss: '%d segundos',
            m: 'un minuto',
            mm: '%d minutos',
            h: 'unha hora',
            hh: '%d horas',
            d: 'un día',
            dd: '%d días',
            M: 'un mes',
            MM: '%d meses',
            y: 'un ano',
            yy: '%d anos'
          },
          dayOfMonthOrdinalParse: /\d{1,2}º/,
          ordinal: '%dº',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return gl;
      });
      /***/

    },

    /***/
    "iKkX":
    /*!*******************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/scheduler/VirtualTimeScheduler.js ***!
      \*******************************************************************************/

    /*! exports provided: VirtualTimeScheduler, VirtualAction */

    /***/
    function iKkX(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "VirtualTimeScheduler", function () {
        return VirtualTimeScheduler;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "VirtualAction", function () {
        return VirtualAction;
      });
      /* harmony import */


      var _AsyncAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./AsyncAction */
      "3N8a");
      /* harmony import */


      var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./AsyncScheduler */
      "IjjT");

      var VirtualTimeScheduler = /*#__PURE__*/function (_AsyncScheduler__WEBP3) {
        _inherits2(VirtualTimeScheduler, _AsyncScheduler__WEBP3);

        var _super327 = _createSuper(VirtualTimeScheduler);

        function VirtualTimeScheduler() {
          var _this758;

          var SchedulerAction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : VirtualAction;
          var maxFrames = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.POSITIVE_INFINITY;

          _classCallCheck2(this, VirtualTimeScheduler);

          _this758 = _super327.call(this, SchedulerAction, function () {
            return _this758.frame;
          });
          _this758.maxFrames = maxFrames;
          _this758.frame = 0;
          _this758.index = -1;
          return _this758;
        }

        _createClass2(VirtualTimeScheduler, [{
          key: "flush",
          value: function flush() {
            var actions = this.actions,
                maxFrames = this.maxFrames;
            var error, action;

            while ((action = actions[0]) && action.delay <= maxFrames) {
              actions.shift();
              this.frame = action.delay;

              if (error = action.execute(action.state, action.delay)) {
                break;
              }
            }

            if (error) {
              while (action = actions.shift()) {
                action.unsubscribe();
              }

              throw error;
            }
          }
        }]);

        return VirtualTimeScheduler;
      }(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__["AsyncScheduler"]);

      VirtualTimeScheduler.frameTimeFactor = 10;

      var VirtualAction = /*#__PURE__*/function (_AsyncAction__WEBPACK4) {
        _inherits2(VirtualAction, _AsyncAction__WEBPACK4);

        var _super328 = _createSuper(VirtualAction);

        function VirtualAction(scheduler, work) {
          var _this759;

          var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : scheduler.index += 1;

          _classCallCheck2(this, VirtualAction);

          _this759 = _super328.call(this, scheduler, work);
          _this759.scheduler = scheduler;
          _this759.work = work;
          _this759.index = index;
          _this759.active = true;
          _this759.index = scheduler.index = index;
          return _this759;
        }

        _createClass2(VirtualAction, [{
          key: "schedule",
          value: function schedule(state) {
            var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;

            if (!this.id) {
              return _get2(_getPrototypeOf2(VirtualAction.prototype), "schedule", this).call(this, state, delay);
            }

            this.active = false;
            var action = new VirtualAction(this.scheduler, this.work);
            this.add(action);
            return action.schedule(state, delay);
          }
        }, {
          key: "requestAsyncId",
          value: function requestAsyncId(scheduler, id) {
            var delay = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
            this.delay = scheduler.frame + delay;
            var actions = scheduler.actions;
            actions.push(this);
            actions.sort(VirtualAction.sortActions);
            return true;
          }
        }, {
          key: "recycleAsyncId",
          value: function recycleAsyncId(scheduler, id) {
            var delay = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
            return undefined;
          }
        }, {
          key: "_execute",
          value: function _execute(state, delay) {
            if (this.active === true) {
              return _get2(_getPrototypeOf2(VirtualAction.prototype), "_execute", this).call(this, state, delay);
            }
          }
        }], [{
          key: "sortActions",
          value: function sortActions(a, b) {
            if (a.delay === b.delay) {
              if (a.index === b.index) {
                return 0;
              } else if (a.index > b.index) {
                return 1;
              } else {
                return -1;
              }
            } else if (a.delay > b.delay) {
              return 1;
            } else {
              return -1;
            }
          }
        }]);

        return VirtualAction;
      }(_AsyncAction__WEBPACK_IMPORTED_MODULE_0__["AsyncAction"]); //# sourceMappingURL=VirtualTimeScheduler.js.map

      /***/

    },

    /***/
    "iYq/":
    /*!******************************************************************************!*\
      !*** ./node_modules/aws-sdk/lib/credentials/cognito_identity_credentials.js ***!
      \******************************************************************************/

    /*! no static exports found */

    /***/
    function iYq(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ../core */
      "QsWE");

      var CognitoIdentity = __webpack_require__(
      /*! ../../clients/cognitoidentity */
      "lKDQ");

      var STS = __webpack_require__(
      /*! ../../clients/sts */
      "6Yqx");
      /**
       * Represents credentials retrieved from STS Web Identity Federation using
       * the Amazon Cognito Identity service.
       *
       * By default this provider gets credentials using the
       * {AWS.CognitoIdentity.getCredentialsForIdentity} service operation, which
       * requires either an `IdentityId` or an `IdentityPoolId` (Amazon Cognito
       * Identity Pool ID), which is used to call {AWS.CognitoIdentity.getId} to
       * obtain an `IdentityId`. If the identity or identity pool is not configured in
       * the Amazon Cognito Console to use IAM roles with the appropriate permissions,
       * then additionally a `RoleArn` is required containing the ARN of the IAM trust
       * policy for the Amazon Cognito role that the user will log into. If a `RoleArn`
       * is provided, then this provider gets credentials using the
       * {AWS.STS.assumeRoleWithWebIdentity} service operation, after first getting an
       * Open ID token from {AWS.CognitoIdentity.getOpenIdToken}.
       *
       * In addition, if this credential provider is used to provide authenticated
       * login, the `Logins` map may be set to the tokens provided by the respective
       * identity providers. See {constructor} for an example on creating a credentials
       * object with proper property values.
       *
       * ## Refreshing Credentials from Identity Service
       *
       * In addition to AWS credentials expiring after a given amount of time, the
       * login token from the identity provider will also expire. Once this token
       * expires, it will not be usable to refresh AWS credentials, and another
       * token will be needed. The SDK does not manage refreshing of the token value,
       * but this can be done through a "refresh token" supported by most identity
       * providers. Consult the documentation for the identity provider for refreshing
       * tokens. Once the refreshed token is acquired, you should make sure to update
       * this new token in the credentials object's {params} property. The following
       * code will update the WebIdentityToken, assuming you have retrieved an updated
       * token from the identity provider:
       *
       * ```javascript
       * AWS.config.credentials.params.Logins['graph.facebook.com'] = updatedToken;
       * ```
       *
       * Future calls to `credentials.refresh()` will now use the new token.
       *
       * @!attribute params
       *   @return [map] the map of params passed to
       *     {AWS.CognitoIdentity.getId},
       *     {AWS.CognitoIdentity.getOpenIdToken}, and
       *     {AWS.STS.assumeRoleWithWebIdentity}. To update the token, set the
       *     `params.WebIdentityToken` property.
       * @!attribute data
       *   @return [map] the raw data response from the call to
       *     {AWS.CognitoIdentity.getCredentialsForIdentity}, or
       *     {AWS.STS.assumeRoleWithWebIdentity}. Use this if you want to get
       *     access to other properties from the response.
       * @!attribute identityId
       *   @return [String] the Cognito ID returned by the last call to
       *     {AWS.CognitoIdentity.getOpenIdToken}. This ID represents the actual
       *     final resolved identity ID from Amazon Cognito.
       */


      AWS.CognitoIdentityCredentials = AWS.util.inherit(AWS.Credentials, {
        /**
         * @api private
         */
        localStorageKey: {
          id: 'aws.cognito.identity-id.',
          providers: 'aws.cognito.identity-providers.'
        },

        /**
         * Creates a new credentials object.
         * @example Creating a new credentials object
         *   AWS.config.credentials = new AWS.CognitoIdentityCredentials({
         *
         *     // either IdentityPoolId or IdentityId is required
         *     // See the IdentityPoolId param for AWS.CognitoIdentity.getID (linked below)
         *     // See the IdentityId param for AWS.CognitoIdentity.getCredentialsForIdentity
         *     // or AWS.CognitoIdentity.getOpenIdToken (linked below)
         *     IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030',
         *     IdentityId: 'us-east-1:128d0a74-c82f-4553-916d-90053e4a8b0f'
         *
         *     // optional, only necessary when the identity pool is not configured
         *     // to use IAM roles in the Amazon Cognito Console
         *     // See the RoleArn param for AWS.STS.assumeRoleWithWebIdentity (linked below)
         *     RoleArn: 'arn:aws:iam::1234567890:role/MYAPP-CognitoIdentity',
         *
         *     // optional tokens, used for authenticated login
         *     // See the Logins param for AWS.CognitoIdentity.getID (linked below)
         *     Logins: {
         *       'graph.facebook.com': 'FBTOKEN',
         *       'www.amazon.com': 'AMAZONTOKEN',
         *       'accounts.google.com': 'GOOGLETOKEN',
         *       'api.twitter.com': 'TWITTERTOKEN',
         *       'www.digits.com': 'DIGITSTOKEN'
         *     },
         *
         *     // optional name, defaults to web-identity
         *     // See the RoleSessionName param for AWS.STS.assumeRoleWithWebIdentity (linked below)
         *     RoleSessionName: 'web',
         *
         *     // optional, only necessary when application runs in a browser
         *     // and multiple users are signed in at once, used for caching
         *     LoginId: 'example@gmail.com'
         *
         *   }, {
         *      // optionally provide configuration to apply to the underlying service clients
         *      // if configuration is not provided, then configuration will be pulled from AWS.config
         *
         *      // region should match the region your identity pool is located in
         *      region: 'us-east-1',
         *
         *      // specify timeout options
         *      httpOptions: {
         *        timeout: 100
         *      }
         *   });
         * @see AWS.CognitoIdentity.getId
         * @see AWS.CognitoIdentity.getCredentialsForIdentity
         * @see AWS.STS.assumeRoleWithWebIdentity
         * @see AWS.CognitoIdentity.getOpenIdToken
         * @see AWS.Config
         * @note If a region is not provided in the global AWS.config, or
         *   specified in the `clientConfig` to the CognitoIdentityCredentials
         *   constructor, you may encounter a 'Missing credentials in config' error
         *   when calling making a service call.
         */
        constructor: function CognitoIdentityCredentials(params, clientConfig) {
          AWS.Credentials.call(this);
          this.expired = true;
          this.params = params;
          this.data = null;
          this._identityId = null;
          this._clientConfig = AWS.util.copy(clientConfig || {});
          this.loadCachedId();
          var self = this;
          Object.defineProperty(this, 'identityId', {
            get: function get() {
              self.loadCachedId();
              return self._identityId || self.params.IdentityId;
            },
            set: function set(identityId) {
              self._identityId = identityId;
            }
          });
        },

        /**
         * Refreshes credentials using {AWS.CognitoIdentity.getCredentialsForIdentity},
         * or {AWS.STS.assumeRoleWithWebIdentity}.
         *
         * @callback callback function(err)
         *   Called when the STS service responds (or fails). When
         *   this callback is called with no error, it means that the credentials
         *   information has been loaded into the object (as the `accessKeyId`,
         *   `secretAccessKey`, and `sessionToken` properties).
         *   @param err [Error] if an error occurred, this value will be filled
         * @see AWS.Credentials.get
         */
        refresh: function refresh(callback) {
          this.coalesceRefresh(callback || AWS.util.fn.callback);
        },

        /**
         * @api private
         * @param callback
         */
        load: function load(callback) {
          var self = this;
          self.createClients();
          self.data = null;
          self._identityId = null;
          self.getId(function (err) {
            if (!err) {
              if (!self.params.RoleArn) {
                self.getCredentialsForIdentity(callback);
              } else {
                self.getCredentialsFromSTS(callback);
              }
            } else {
              self.clearIdOnNotAuthorized(err);
              callback(err);
            }
          });
        },

        /**
         * Clears the cached Cognito ID associated with the currently configured
         * identity pool ID. Use this to manually invalidate your cache if
         * the identity pool ID was deleted.
         */
        clearCachedId: function clearCache() {
          this._identityId = null;
          delete this.params.IdentityId;
          var poolId = this.params.IdentityPoolId;
          var loginId = this.params.LoginId || '';
          delete this.storage[this.localStorageKey.id + poolId + loginId];
          delete this.storage[this.localStorageKey.providers + poolId + loginId];
        },

        /**
         * @api private
         */
        clearIdOnNotAuthorized: function clearIdOnNotAuthorized(err) {
          var self = this;

          if (err.code == 'NotAuthorizedException') {
            self.clearCachedId();
          }
        },

        /**
         * Retrieves a Cognito ID, loading from cache if it was already retrieved
         * on this device.
         *
         * @callback callback function(err, identityId)
         *   @param err [Error, null] an error object if the call failed or null if
         *     it succeeded.
         *   @param identityId [String, null] if successful, the callback will return
         *     the Cognito ID.
         * @note If not loaded explicitly, the Cognito ID is loaded and stored in
         *   localStorage in the browser environment of a device.
         * @api private
         */
        getId: function getId(callback) {
          var self = this;

          if (typeof self.params.IdentityId === 'string') {
            return callback(null, self.params.IdentityId);
          }

          self.cognito.getId(function (err, data) {
            if (!err && data.IdentityId) {
              self.params.IdentityId = data.IdentityId;
              callback(null, data.IdentityId);
            } else {
              callback(err);
            }
          });
        },

        /**
         * @api private
         */
        loadCredentials: function loadCredentials(data, credentials) {
          if (!data || !credentials) return;
          credentials.expired = false;
          credentials.accessKeyId = data.Credentials.AccessKeyId;
          credentials.secretAccessKey = data.Credentials.SecretKey;
          credentials.sessionToken = data.Credentials.SessionToken;
          credentials.expireTime = data.Credentials.Expiration;
        },

        /**
         * @api private
         */
        getCredentialsForIdentity: function getCredentialsForIdentity(callback) {
          var self = this;
          self.cognito.getCredentialsForIdentity(function (err, data) {
            if (!err) {
              self.cacheId(data);
              self.data = data;
              self.loadCredentials(self.data, self);
            } else {
              self.clearIdOnNotAuthorized(err);
            }

            callback(err);
          });
        },

        /**
         * @api private
         */
        getCredentialsFromSTS: function getCredentialsFromSTS(callback) {
          var self = this;
          self.cognito.getOpenIdToken(function (err, data) {
            if (!err) {
              self.cacheId(data);
              self.params.WebIdentityToken = data.Token;
              self.webIdentityCredentials.refresh(function (webErr) {
                if (!webErr) {
                  self.data = self.webIdentityCredentials.data;
                  self.sts.credentialsFrom(self.data, self);
                }

                callback(webErr);
              });
            } else {
              self.clearIdOnNotAuthorized(err);
              callback(err);
            }
          });
        },

        /**
         * @api private
         */
        loadCachedId: function loadCachedId() {
          var self = this; // in the browser we source default IdentityId from localStorage

          if (AWS.util.isBrowser() && !self.params.IdentityId) {
            var id = self.getStorage('id');

            if (id && self.params.Logins) {
              var actualProviders = Object.keys(self.params.Logins);
              var cachedProviders = (self.getStorage('providers') || '').split(','); // only load ID if at least one provider used this ID before

              var intersect = cachedProviders.filter(function (n) {
                return actualProviders.indexOf(n) !== -1;
              });

              if (intersect.length !== 0) {
                self.params.IdentityId = id;
              }
            } else if (id) {
              self.params.IdentityId = id;
            }
          }
        },

        /**
         * @api private
         */
        createClients: function createClients() {
          var clientConfig = this._clientConfig;
          this.webIdentityCredentials = this.webIdentityCredentials || new AWS.WebIdentityCredentials(this.params, clientConfig);

          if (!this.cognito) {
            var cognitoConfig = AWS.util.merge({}, clientConfig);
            cognitoConfig.params = this.params;
            this.cognito = new CognitoIdentity(cognitoConfig);
          }

          this.sts = this.sts || new STS(clientConfig);
        },

        /**
         * @api private
         */
        cacheId: function cacheId(data) {
          this._identityId = data.IdentityId;
          this.params.IdentityId = this._identityId; // cache this IdentityId in browser localStorage if possible

          if (AWS.util.isBrowser()) {
            this.setStorage('id', data.IdentityId);

            if (this.params.Logins) {
              this.setStorage('providers', Object.keys(this.params.Logins).join(','));
            }
          }
        },

        /**
         * @api private
         */
        getStorage: function getStorage(key) {
          return this.storage[this.localStorageKey[key] + this.params.IdentityPoolId + (this.params.LoginId || '')];
        },

        /**
         * @api private
         */
        setStorage: function setStorage(key, val) {
          try {
            this.storage[this.localStorageKey[key] + this.params.IdentityPoolId + (this.params.LoginId || '')] = val;
          } catch (_) {}
        },

        /**
         * @api private
         */
        storage: function () {
          try {
            var storage = AWS.util.isBrowser() && window.localStorage !== null && typeof window.localStorage === 'object' ? window.localStorage : {}; // Test set/remove which would throw an error in Safari's private browsing

            storage['aws.test-storage'] = 'foobar';
            delete storage['aws.test-storage'];
            return storage;
          } catch (_) {
            return {};
          }
        }()
      });
      /***/
    },

    /***/
    "iYuL":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/es.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function iYuL(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Spanish [es]
      //! author : Julio Napurí : https://github.com/julionc
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),
            _monthsShort3 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
            monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i],
            monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

        var es = moment.defineLocale('es', {
          months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
          monthsShort: function monthsShort(m, format) {
            if (!m) {
              return monthsShortDot;
            } else if (/-MMM-/.test(format)) {
              return _monthsShort3[m.month()];
            } else {
              return monthsShortDot[m.month()];
            }
          },
          monthsRegex: monthsRegex,
          monthsShortRegex: monthsRegex,
          monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
          monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
          monthsParse: monthsParse,
          longMonthsParse: monthsParse,
          shortMonthsParse: monthsParse,
          weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
          weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
          weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY H:mm',
            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm'
          },
          calendar: {
            sameDay: function sameDay() {
              return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextDay: function nextDay() {
              return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextWeek: function nextWeek() {
              return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastDay: function lastDay() {
              return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastWeek: function lastWeek() {
              return '[el] dddd [pasado a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: 'en %s',
            past: 'hace %s',
            s: 'unos segundos',
            ss: '%d segundos',
            m: 'un minuto',
            mm: '%d minutos',
            h: 'una hora',
            hh: '%d horas',
            d: 'un día',
            dd: '%d días',
            w: 'una semana',
            ww: '%d semanas',
            M: 'un mes',
            MM: '%d meses',
            y: 'un año',
            yy: '%d años'
          },
          dayOfMonthOrdinalParse: /\d{1,2}º/,
          ordinal: '%dº',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          },
          invalidDate: 'Fecha inválida'
        });
        return es;
      });
      /***/

    },

    /***/
    "ihCf":
    /*!***********************************************************************!*\
      !*** ./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/text-field.js ***!
      \***********************************************************************/

    /*! exports provided: AutofillMonitor, CdkAutofill, CdkTextareaAutosize, TextFieldModule */

    /***/
    function ihCf(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AutofillMonitor", function () {
        return AutofillMonitor;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkAutofill", function () {
        return CdkAutofill;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkTextareaAutosize", function () {
        return CdkTextareaAutosize;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TextFieldModule", function () {
        return TextFieldModule;
      });
      /* harmony import */


      var _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/cdk/platform */
      "nLfN");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Options to pass to the animationstart listener. */


      var listenerOptions = Object(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_0__["normalizePassiveListenerOptions"])({
        passive: true
      });
      /**
       * An injectable service that can be used to monitor the autofill state of an input.
       * Based on the following blog post:
       * https://medium.com/@brunn/detecting-autofilled-fields-in-javascript-aed598d25da7
       */

      var AutofillMonitor = /*#__PURE__*/function () {
        function AutofillMonitor(_platform, _ngZone) {
          _classCallCheck2(this, AutofillMonitor);

          this._platform = _platform;
          this._ngZone = _ngZone;
          this._monitoredElements = new Map();
        }

        _createClass2(AutofillMonitor, [{
          key: "monitor",
          value: function monitor(elementOrRef) {
            var _this760 = this;

            if (!this._platform.isBrowser) {
              return rxjs__WEBPACK_IMPORTED_MODULE_3__["EMPTY"];
            }

            var element = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceElement"])(elementOrRef);

            var info = this._monitoredElements.get(element);

            if (info) {
              return info.subject;
            }

            var result = new rxjs__WEBPACK_IMPORTED_MODULE_3__["Subject"]();
            var cssClass = 'cdk-text-field-autofilled';

            var listener = function listener(event) {
              // Animation events fire on initial element render, we check for the presence of the autofill
              // CSS class to make sure this is a real change in state, not just the initial render before
              // we fire off events.
              if (event.animationName === 'cdk-text-field-autofill-start' && !element.classList.contains(cssClass)) {
                element.classList.add(cssClass);

                _this760._ngZone.run(function () {
                  return result.next({
                    target: event.target,
                    isAutofilled: true
                  });
                });
              } else if (event.animationName === 'cdk-text-field-autofill-end' && element.classList.contains(cssClass)) {
                element.classList.remove(cssClass);

                _this760._ngZone.run(function () {
                  return result.next({
                    target: event.target,
                    isAutofilled: false
                  });
                });
              }
            };

            this._ngZone.runOutsideAngular(function () {
              element.addEventListener('animationstart', listener, listenerOptions);
              element.classList.add('cdk-text-field-autofill-monitored');
            });

            this._monitoredElements.set(element, {
              subject: result,
              unlisten: function unlisten() {
                element.removeEventListener('animationstart', listener, listenerOptions);
              }
            });

            return result;
          }
        }, {
          key: "stopMonitoring",
          value: function stopMonitoring(elementOrRef) {
            var element = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceElement"])(elementOrRef);

            var info = this._monitoredElements.get(element);

            if (info) {
              info.unlisten();
              info.subject.complete();
              element.classList.remove('cdk-text-field-autofill-monitored');
              element.classList.remove('cdk-text-field-autofilled');

              this._monitoredElements["delete"](element);
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            var _this761 = this;

            this._monitoredElements.forEach(function (_info, element) {
              return _this761.stopMonitoring(element);
            });
          }
        }]);

        return AutofillMonitor;
      }();

      AutofillMonitor.ɵfac = function AutofillMonitor_Factory(t) {
        return new (t || AutofillMonitor)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_0__["Platform"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]));
      };

      AutofillMonitor.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function AutofillMonitor_Factory() {
          return new AutofillMonitor(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_0__["Platform"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]));
        },
        token: AutofillMonitor,
        providedIn: "root"
      });

      AutofillMonitor.ctorParameters = function () {
        return [{
          type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_0__["Platform"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](AutofillMonitor, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_0__["Platform"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
          }];
        }, null);
      })();
      /** A directive that can be used to monitor the autofill state of an input. */


      var CdkAutofill = /*#__PURE__*/function () {
        function CdkAutofill(_elementRef, _autofillMonitor) {
          _classCallCheck2(this, CdkAutofill);

          this._elementRef = _elementRef;
          this._autofillMonitor = _autofillMonitor;
          /** Emits when the autofill state of the element changes. */

          this.cdkAutofill = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["EventEmitter"]();
        }

        _createClass2(CdkAutofill, [{
          key: "ngOnInit",
          value: function ngOnInit() {
            var _this762 = this;

            this._autofillMonitor.monitor(this._elementRef).subscribe(function (event) {
              return _this762.cdkAutofill.emit(event);
            });
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._autofillMonitor.stopMonitoring(this._elementRef);
          }
        }]);

        return CdkAutofill;
      }();

      CdkAutofill.ɵfac = function CdkAutofill_Factory(t) {
        return new (t || CdkAutofill)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](AutofillMonitor));
      };

      CdkAutofill.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({
        type: CdkAutofill,
        selectors: [["", "cdkAutofill", ""]],
        outputs: {
          cdkAutofill: "cdkAutofill"
        }
      });

      CdkAutofill.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
        }, {
          type: AutofillMonitor
        }];
      };

      CdkAutofill.propDecorators = {
        cdkAutofill: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkAutofill, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
          args: [{
            selector: '[cdkAutofill]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
          }, {
            type: AutofillMonitor
          }];
        }, {
          cdkAutofill: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Directive to automatically resize a textarea to fit its content. */


      var CdkTextareaAutosize = /*#__PURE__*/function () {
        function CdkTextareaAutosize(_elementRef, _platform, _ngZone,
        /** @breaking-change 11.0.0 make document required */
        document) {
          _classCallCheck2(this, CdkTextareaAutosize);

          this._elementRef = _elementRef;
          this._platform = _platform;
          this._ngZone = _ngZone;
          this._destroyed = new rxjs__WEBPACK_IMPORTED_MODULE_3__["Subject"]();
          this._enabled = true;
          /**
           * Value of minRows as of last resize. If the minRows has decreased, the
           * height of the textarea needs to be recomputed to reflect the new minimum. The maxHeight
           * does not have the same problem because it does not affect the textarea's scrollHeight.
           */

          this._previousMinRows = -1;
          this._document = document;
          this._textareaElement = this._elementRef.nativeElement;
          this._measuringClass = _platform.FIREFOX ? 'cdk-textarea-autosize-measuring-firefox' : 'cdk-textarea-autosize-measuring';
        }
        /** Minimum amount of rows in the textarea. */


        _createClass2(CdkTextareaAutosize, [{
          key: "minRows",
          get: function get() {
            return this._minRows;
          },
          set: function set(value) {
            this._minRows = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceNumberProperty"])(value);

            this._setMinHeight();
          }
          /** Maximum amount of rows in the textarea. */

        }, {
          key: "maxRows",
          get: function get() {
            return this._maxRows;
          },
          set: function set(value) {
            this._maxRows = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceNumberProperty"])(value);

            this._setMaxHeight();
          }
          /** Whether autosizing is enabled or not */

        }, {
          key: "enabled",
          get: function get() {
            return this._enabled;
          },
          set: function set(value) {
            value = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceBooleanProperty"])(value); // Only act if the actual value changed. This specifically helps to not run
            // resizeToFitContent too early (i.e. before ngAfterViewInit)

            if (this._enabled !== value) {
              (this._enabled = value) ? this.resizeToFitContent(true) : this.reset();
            }
          }
          /** Sets the minimum height of the textarea as determined by minRows. */

        }, {
          key: "_setMinHeight",
          value: function _setMinHeight() {
            var minHeight = this.minRows && this._cachedLineHeight ? "".concat(this.minRows * this._cachedLineHeight, "px") : null;

            if (minHeight) {
              this._textareaElement.style.minHeight = minHeight;
            }
          }
          /** Sets the maximum height of the textarea as determined by maxRows. */

        }, {
          key: "_setMaxHeight",
          value: function _setMaxHeight() {
            var maxHeight = this.maxRows && this._cachedLineHeight ? "".concat(this.maxRows * this._cachedLineHeight, "px") : null;

            if (maxHeight) {
              this._textareaElement.style.maxHeight = maxHeight;
            }
          }
        }, {
          key: "ngAfterViewInit",
          value: function ngAfterViewInit() {
            var _this763 = this;

            if (this._platform.isBrowser) {
              // Remember the height which we started with in case autosizing is disabled
              this._initialHeight = this._textareaElement.style.height;
              this.resizeToFitContent();

              this._ngZone.runOutsideAngular(function () {
                var window = _this763._getWindow();

                Object(rxjs__WEBPACK_IMPORTED_MODULE_3__["fromEvent"])(window, 'resize').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["auditTime"])(16), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["takeUntil"])(_this763._destroyed)).subscribe(function () {
                  return _this763.resizeToFitContent(true);
                });
              });
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._destroyed.next();

            this._destroyed.complete();
          }
          /**
           * Cache the height of a single-row textarea if it has not already been cached.
           *
           * We need to know how large a single "row" of a textarea is in order to apply minRows and
           * maxRows. For the initial version, we will assume that the height of a single line in the
           * textarea does not ever change.
           */

        }, {
          key: "_cacheTextareaLineHeight",
          value: function _cacheTextareaLineHeight() {
            if (this._cachedLineHeight) {
              return;
            } // Use a clone element because we have to override some styles.


            var textareaClone = this._textareaElement.cloneNode(false);

            textareaClone.rows = 1; // Use `position: absolute` so that this doesn't cause a browser layout and use
            // `visibility: hidden` so that nothing is rendered. Clear any other styles that
            // would affect the height.

            textareaClone.style.position = 'absolute';
            textareaClone.style.visibility = 'hidden';
            textareaClone.style.border = 'none';
            textareaClone.style.padding = '0';
            textareaClone.style.height = '';
            textareaClone.style.minHeight = '';
            textareaClone.style.maxHeight = ''; // In Firefox it happens that textarea elements are always bigger than the specified amount
            // of rows. This is because Firefox tries to add extra space for the horizontal scrollbar.
            // As a workaround that removes the extra space for the scrollbar, we can just set overflow
            // to hidden. This ensures that there is no invalid calculation of the line height.
            // See Firefox bug report: https://bugzilla.mozilla.org/show_bug.cgi?id=33654

            textareaClone.style.overflow = 'hidden';

            this._textareaElement.parentNode.appendChild(textareaClone);

            this._cachedLineHeight = textareaClone.clientHeight;

            this._textareaElement.parentNode.removeChild(textareaClone); // Min and max heights have to be re-calculated if the cached line height changes


            this._setMinHeight();

            this._setMaxHeight();
          }
        }, {
          key: "ngDoCheck",
          value: function ngDoCheck() {
            if (this._platform.isBrowser) {
              this.resizeToFitContent();
            }
          }
          /**
           * Resize the textarea to fit its content.
           * @param force Whether to force a height recalculation. By default the height will be
           *    recalculated only if the value changed since the last call.
           */

        }, {
          key: "resizeToFitContent",
          value: function resizeToFitContent() {
            var _this764 = this;

            var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;

            // If autosizing is disabled, just skip everything else
            if (!this._enabled) {
              return;
            }

            this._cacheTextareaLineHeight(); // If we haven't determined the line-height yet, we know we're still hidden and there's no point
            // in checking the height of the textarea.


            if (!this._cachedLineHeight) {
              return;
            }

            var textarea = this._elementRef.nativeElement;
            var value = textarea.value; // Only resize if the value or minRows have changed since these calculations can be expensive.

            if (!force && this._minRows === this._previousMinRows && value === this._previousValue) {
              return;
            }

            var placeholderText = textarea.placeholder; // Reset the textarea height to auto in order to shrink back to its default size.
            // Also temporarily force overflow:hidden, so scroll bars do not interfere with calculations.
            // Long placeholders that are wider than the textarea width may lead to a bigger scrollHeight
            // value. To ensure that the scrollHeight is not bigger than the content, the placeholders
            // need to be removed temporarily.

            textarea.classList.add(this._measuringClass);
            textarea.placeholder = ''; // The measuring class includes a 2px padding to workaround an issue with Chrome,
            // so we account for that extra space here by subtracting 4 (2px top + 2px bottom).

            var height = textarea.scrollHeight - 4; // Use the scrollHeight to know how large the textarea *would* be if fit its entire value.

            textarea.style.height = "".concat(height, "px");
            textarea.classList.remove(this._measuringClass);
            textarea.placeholder = placeholderText;

            this._ngZone.runOutsideAngular(function () {
              if (typeof requestAnimationFrame !== 'undefined') {
                requestAnimationFrame(function () {
                  return _this764._scrollToCaretPosition(textarea);
                });
              } else {
                setTimeout(function () {
                  return _this764._scrollToCaretPosition(textarea);
                });
              }
            });

            this._previousValue = value;
            this._previousMinRows = this._minRows;
          }
          /**
           * Resets the textarea to its original size
           */

        }, {
          key: "reset",
          value: function reset() {
            // Do not try to change the textarea, if the initialHeight has not been determined yet
            // This might potentially remove styles when reset() is called before ngAfterViewInit
            if (this._initialHeight !== undefined) {
              this._textareaElement.style.height = this._initialHeight;
            }
          } // In Ivy the `host` metadata will be merged, whereas in ViewEngine it is overridden. In order
          // to avoid double event listeners, we need to use `HostListener`. Once Ivy is the default, we
          // can move this back into `host`.
          // tslint:disable:no-host-decorator-in-concrete

        }, {
          key: "_noopInputHandler",
          value: function _noopInputHandler() {// no-op handler that ensures we're running change detection on input events.
          }
          /** Access injected document if available or fallback to global document reference */

        }, {
          key: "_getDocument",
          value: function _getDocument() {
            return this._document || document;
          }
          /** Use defaultView of injected document if available or fallback to global window reference */

        }, {
          key: "_getWindow",
          value: function _getWindow() {
            var doc = this._getDocument();

            return doc.defaultView || window;
          }
          /**
           * Scrolls a textarea to the caret position. On Firefox resizing the textarea will
           * prevent it from scrolling to the caret position. We need to re-set the selection
           * in order for it to scroll to the proper position.
           */

        }, {
          key: "_scrollToCaretPosition",
          value: function _scrollToCaretPosition(textarea) {
            var selectionStart = textarea.selectionStart,
                selectionEnd = textarea.selectionEnd;

            var document = this._getDocument(); // IE will throw an "Unspecified error" if we try to set the selection range after the
            // element has been removed from the DOM. Assert that the directive hasn't been destroyed
            // between the time we requested the animation frame and when it was executed.
            // Also note that we have to assert that the textarea is focused before we set the
            // selection range. Setting the selection range on a non-focused textarea will cause
            // it to receive focus on IE and Edge.


            if (!this._destroyed.isStopped && document.activeElement === textarea) {
              textarea.setSelectionRange(selectionStart, selectionEnd);
            }
          }
        }]);

        return CdkTextareaAutosize;
      }();

      CdkTextareaAutosize.ɵfac = function CdkTextareaAutosize_Factory(t) {
        return new (t || CdkTextareaAutosize)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_0__["Platform"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_5__["DOCUMENT"], 8));
      };

      CdkTextareaAutosize.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({
        type: CdkTextareaAutosize,
        selectors: [["textarea", "cdkTextareaAutosize", ""]],
        hostAttrs: ["rows", "1", 1, "cdk-textarea-autosize"],
        hostBindings: function CdkTextareaAutosize_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("input", function CdkTextareaAutosize_input_HostBindingHandler() {
              return ctx._noopInputHandler();
            });
          }
        },
        inputs: {
          minRows: ["cdkAutosizeMinRows", "minRows"],
          maxRows: ["cdkAutosizeMaxRows", "maxRows"],
          enabled: ["cdkTextareaAutosize", "enabled"]
        },
        exportAs: ["cdkTextareaAutosize"]
      });

      CdkTextareaAutosize.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
        }, {
          type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_0__["Platform"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_5__["DOCUMENT"]]
          }]
        }];
      };

      CdkTextareaAutosize.propDecorators = {
        minRows: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkAutosizeMinRows']
        }],
        maxRows: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkAutosizeMaxRows']
        }],
        enabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkTextareaAutosize']
        }],
        _noopInputHandler: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"],
          args: ['input']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkTextareaAutosize, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
          args: [{
            selector: 'textarea[cdkTextareaAutosize]',
            exportAs: 'cdkTextareaAutosize',
            host: {
              'class': 'cdk-textarea-autosize',
              // Textarea elements that have the directive applied should have a single row by default.
              // Browsers normally show two rows by default and therefore this limits the minRows binding.
              'rows': '1'
            }
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
          }, {
            type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_0__["Platform"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_5__["DOCUMENT"]]
            }]
          }];
        }, {
          minRows: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkAutosizeMinRows']
          }],
          maxRows: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkAutosizeMaxRows']
          }],
          enabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkTextareaAutosize']
          }],
          // In Ivy the `host` metadata will be merged, whereas in ViewEngine it is overridden. In order
          // to avoid double event listeners, we need to use `HostListener`. Once Ivy is the default, we
          // can move this back into `host`.
          // tslint:disable:no-host-decorator-in-concrete
          _noopInputHandler: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"],
            args: ['input']
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var TextFieldModule = function TextFieldModule() {
        _classCallCheck2(this, TextFieldModule);
      };

      TextFieldModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({
        type: TextFieldModule
      });
      TextFieldModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({
        factory: function TextFieldModule_Factory(t) {
          return new (t || TextFieldModule)();
        },
        imports: [[_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_0__["PlatformModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](TextFieldModule, {
          declarations: function declarations() {
            return [CdkAutofill, CdkTextareaAutosize];
          },
          imports: function imports() {
            return [_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_0__["PlatformModule"]];
          },
          exports: function exports() {
            return [CdkAutofill, CdkTextareaAutosize];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](TextFieldModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
          args: [{
            declarations: [CdkAutofill, CdkTextareaAutosize],
            imports: [_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_0__["PlatformModule"]],
            exports: [CdkAutofill, CdkTextareaAutosize]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=text-field.js.map

      /***/

    },

    /***/
    "itXk":
    /*!*************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/combineLatest.js ***!
      \*************************************************************************/

    /*! exports provided: combineLatest, CombineLatestOperator, CombineLatestSubscriber */

    /***/
    function itXk(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "combineLatest", function () {
        return combineLatest;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CombineLatestOperator", function () {
        return CombineLatestOperator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CombineLatestSubscriber", function () {
        return CombineLatestSubscriber;
      });
      /* harmony import */


      var _util_isScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../util/isScheduler */
      "z+Ro");
      /* harmony import */


      var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/isArray */
      "DH7j");
      /* harmony import */


      var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../OuterSubscriber */
      "l7GE");
      /* harmony import */


      var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ../util/subscribeToResult */
      "ZUHj");
      /* harmony import */


      var _fromArray__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ./fromArray */
      "yCtX");

      var NONE = {};

      function combineLatest() {
        for (var _len55 = arguments.length, observables = new Array(_len55), _key57 = 0; _key57 < _len55; _key57++) {
          observables[_key57] = arguments[_key57];
        }

        var resultSelector = undefined;
        var scheduler = undefined;

        if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_0__["isScheduler"])(observables[observables.length - 1])) {
          scheduler = observables.pop();
        }

        if (typeof observables[observables.length - 1] === 'function') {
          resultSelector = observables.pop();
        }

        if (observables.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(observables[0])) {
          observables = observables[0];
        }

        return Object(_fromArray__WEBPACK_IMPORTED_MODULE_4__["fromArray"])(observables, scheduler).lift(new CombineLatestOperator(resultSelector));
      }

      var CombineLatestOperator = /*#__PURE__*/function () {
        function CombineLatestOperator(resultSelector) {
          _classCallCheck2(this, CombineLatestOperator);

          this.resultSelector = resultSelector;
        }

        _createClass2(CombineLatestOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new CombineLatestSubscriber(subscriber, this.resultSelector));
          }
        }]);

        return CombineLatestOperator;
      }();

      var CombineLatestSubscriber = /*#__PURE__*/function (_OuterSubscriber__WEB4) {
        _inherits2(CombineLatestSubscriber, _OuterSubscriber__WEB4);

        var _super329 = _createSuper(CombineLatestSubscriber);

        function CombineLatestSubscriber(destination, resultSelector) {
          var _this765;

          _classCallCheck2(this, CombineLatestSubscriber);

          _this765 = _super329.call(this, destination);
          _this765.resultSelector = resultSelector;
          _this765.active = 0;
          _this765.values = [];
          _this765.observables = [];
          return _this765;
        }

        _createClass2(CombineLatestSubscriber, [{
          key: "_next",
          value: function _next(observable) {
            this.values.push(NONE);
            this.observables.push(observable);
          }
        }, {
          key: "_complete",
          value: function _complete() {
            var observables = this.observables;
            var len = observables.length;

            if (len === 0) {
              this.destination.complete();
            } else {
              this.active = len;
              this.toRespond = len;

              for (var i = 0; i < len; i++) {
                var observable = observables[i];
                this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, observable, undefined, i));
              }
            }
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete(unused) {
            if ((this.active -= 1) === 0) {
              this.destination.complete();
            }
          }
        }, {
          key: "notifyNext",
          value: function notifyNext(_outerValue, innerValue, outerIndex) {
            var values = this.values;
            var oldVal = values[outerIndex];
            var toRespond = !this.toRespond ? 0 : oldVal === NONE ? --this.toRespond : this.toRespond;
            values[outerIndex] = innerValue;

            if (toRespond === 0) {
              if (this.resultSelector) {
                this._tryResultSelector(values);
              } else {
                this.destination.next(values.slice());
              }
            }
          }
        }, {
          key: "_tryResultSelector",
          value: function _tryResultSelector(values) {
            var result;

            try {
              result = this.resultSelector.apply(this, values);
            } catch (err) {
              this.destination.error(err);
              return;
            }

            this.destination.next(result);
          }
        }]);

        return CombineLatestSubscriber;
      }(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]); //# sourceMappingURL=combineLatest.js.map

      /***/

    },

    /***/
    "j/x2":
    /*!*****************************************************************!*\
      !*** ./node_modules/aws-sdk/apis/s3-2006-03-01.paginators.json ***!
      \*****************************************************************/

    /*! exports provided: pagination, default */

    /***/
    function jX2(module) {
      module.exports = JSON.parse("{\"pagination\":{\"ListBuckets\":{\"result_key\":\"Buckets\"},\"ListMultipartUploads\":{\"input_token\":[\"KeyMarker\",\"UploadIdMarker\"],\"limit_key\":\"MaxUploads\",\"more_results\":\"IsTruncated\",\"output_token\":[\"NextKeyMarker\",\"NextUploadIdMarker\"],\"result_key\":[\"Uploads\",\"CommonPrefixes\"]},\"ListObjectVersions\":{\"input_token\":[\"KeyMarker\",\"VersionIdMarker\"],\"limit_key\":\"MaxKeys\",\"more_results\":\"IsTruncated\",\"output_token\":[\"NextKeyMarker\",\"NextVersionIdMarker\"],\"result_key\":[\"Versions\",\"DeleteMarkers\",\"CommonPrefixes\"]},\"ListObjects\":{\"input_token\":\"Marker\",\"limit_key\":\"MaxKeys\",\"more_results\":\"IsTruncated\",\"output_token\":\"NextMarker || Contents[-1].Key\",\"result_key\":[\"Contents\",\"CommonPrefixes\"]},\"ListObjectsV2\":{\"input_token\":\"ContinuationToken\",\"limit_key\":\"MaxKeys\",\"output_token\":\"NextContinuationToken\",\"result_key\":[\"Contents\",\"CommonPrefixes\"]},\"ListParts\":{\"input_token\":\"PartNumberMarker\",\"limit_key\":\"MaxParts\",\"more_results\":\"IsTruncated\",\"output_token\":\"NextPartNumberMarker\",\"result_key\":\"Parts\"}}}");
      /***/
    },

    /***/
    "jNZN":
    /*!*********************************************!*\
      !*** ./node_modules/aws-sdk/lib/service.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function jNZN(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ./core */
      "QsWE");

      var Api = __webpack_require__(
      /*! ./model/api */
      "5wOx");

      var regionConfig = __webpack_require__(
      /*! ./region_config */
      "3uhI");

      var inherit = AWS.util.inherit;
      var clientCount = 0;
      /**
       * The service class representing an AWS service.
       *
       * @class_abstract This class is an abstract class.
       *
       * @!attribute apiVersions
       *   @return [Array<String>] the list of API versions supported by this service.
       *   @readonly
       */

      AWS.Service = inherit({
        /**
         * Create a new service object with a configuration object
         *
         * @param config [map] a map of configuration options
         */
        constructor: function Service(config) {
          if (!this.loadServiceClass) {
            throw AWS.util.error(new Error(), 'Service must be constructed with `new\' operator');
          }

          var ServiceClass = this.loadServiceClass(config || {});

          if (ServiceClass) {
            var originalConfig = AWS.util.copy(config);
            var svc = new ServiceClass(config);
            Object.defineProperty(svc, '_originalConfig', {
              get: function get() {
                return originalConfig;
              },
              enumerable: false,
              configurable: true
            });
            svc._clientId = ++clientCount;
            return svc;
          }

          this.initialize(config);
        },

        /**
         * @api private
         */
        initialize: function initialize(config) {
          var svcConfig = AWS.config[this.serviceIdentifier];
          this.config = new AWS.Config(AWS.config);
          if (svcConfig) this.config.update(svcConfig, true);
          if (config) this.config.update(config, true);
          this.validateService();
          if (!this.config.endpoint) regionConfig.configureEndpoint(this);
          this.config.endpoint = this.endpointFromTemplate(this.config.endpoint);
          this.setEndpoint(this.config.endpoint); //enable attaching listeners to service client

          AWS.SequentialExecutor.call(this);
          AWS.Service.addDefaultMonitoringListeners(this);

          if ((this.config.clientSideMonitoring || AWS.Service._clientSideMonitoring) && this.publisher) {
            var publisher = this.publisher;
            this.addNamedListener('PUBLISH_API_CALL', 'apiCall', function PUBLISH_API_CALL(event) {
              process.nextTick(function () {
                publisher.eventHandler(event);
              });
            });
            this.addNamedListener('PUBLISH_API_ATTEMPT', 'apiCallAttempt', function PUBLISH_API_ATTEMPT(event) {
              process.nextTick(function () {
                publisher.eventHandler(event);
              });
            });
          }
        },

        /**
         * @api private
         */
        validateService: function validateService() {},

        /**
         * @api private
         */
        loadServiceClass: function loadServiceClass(serviceConfig) {
          var config = serviceConfig;

          if (!AWS.util.isEmpty(this.api)) {
            return null;
          } else if (config.apiConfig) {
            return AWS.Service.defineServiceApi(this.constructor, config.apiConfig);
          } else if (!this.constructor.services) {
            return null;
          } else {
            config = new AWS.Config(AWS.config);
            config.update(serviceConfig, true);
            var version = config.apiVersions[this.constructor.serviceIdentifier];
            version = version || config.apiVersion;
            return this.getLatestServiceClass(version);
          }
        },

        /**
         * @api private
         */
        getLatestServiceClass: function getLatestServiceClass(version) {
          version = this.getLatestServiceVersion(version);

          if (this.constructor.services[version] === null) {
            AWS.Service.defineServiceApi(this.constructor, version);
          }

          return this.constructor.services[version];
        },

        /**
         * @api private
         */
        getLatestServiceVersion: function getLatestServiceVersion(version) {
          if (!this.constructor.services || this.constructor.services.length === 0) {
            throw new Error('No services defined on ' + this.constructor.serviceIdentifier);
          }

          if (!version) {
            version = 'latest';
          } else if (AWS.util.isType(version, Date)) {
            version = AWS.util.date.iso8601(version).split('T')[0];
          }

          if (Object.hasOwnProperty(this.constructor.services, version)) {
            return version;
          }

          var keys = Object.keys(this.constructor.services).sort();
          var selectedVersion = null;

          for (var i = keys.length - 1; i >= 0; i--) {
            // versions that end in "*" are not available on disk and can be
            // skipped, so do not choose these as selectedVersions
            if (keys[i][keys[i].length - 1] !== '*') {
              selectedVersion = keys[i];
            }

            if (keys[i].substr(0, 10) <= version) {
              return selectedVersion;
            }
          }

          throw new Error('Could not find ' + this.constructor.serviceIdentifier + ' API to satisfy version constraint `' + version + '\'');
        },

        /**
         * @api private
         */
        api: {},

        /**
         * @api private
         */
        defaultRetryCount: 3,

        /**
         * @api private
         */
        customizeRequests: function customizeRequests(callback) {
          if (!callback) {
            this.customRequestHandler = null;
          } else if (typeof callback === 'function') {
            this.customRequestHandler = callback;
          } else {
            throw new Error('Invalid callback type \'' + typeof callback + '\' provided in customizeRequests');
          }
        },

        /**
         * Calls an operation on a service with the given input parameters.
         *
         * @param operation [String] the name of the operation to call on the service.
         * @param params [map] a map of input options for the operation
         * @callback callback function(err, data)
         *   If a callback is supplied, it is called when a response is returned
         *   from the service.
         *   @param err [Error] the error object returned from the request.
         *     Set to `null` if the request is successful.
         *   @param data [Object] the de-serialized data returned from
         *     the request. Set to `null` if a request error occurs.
         */
        makeRequest: function makeRequest(operation, params, callback) {
          if (typeof params === 'function') {
            callback = params;
            params = null;
          }

          params = params || {};

          if (this.config.params) {
            // copy only toplevel bound params
            var rules = this.api.operations[operation];

            if (rules) {
              params = AWS.util.copy(params);
              AWS.util.each(this.config.params, function (key, value) {
                if (rules.input.members[key]) {
                  if (params[key] === undefined || params[key] === null) {
                    params[key] = value;
                  }
                }
              });
            }
          }

          var request = new AWS.Request(this, operation, params);
          this.addAllRequestListeners(request);
          this.attachMonitoringEmitter(request);
          if (callback) request.send(callback);
          return request;
        },

        /**
         * Calls an operation on a service with the given input parameters, without
         * any authentication data. This method is useful for "public" API operations.
         *
         * @param operation [String] the name of the operation to call on the service.
         * @param params [map] a map of input options for the operation
         * @callback callback function(err, data)
         *   If a callback is supplied, it is called when a response is returned
         *   from the service.
         *   @param err [Error] the error object returned from the request.
         *     Set to `null` if the request is successful.
         *   @param data [Object] the de-serialized data returned from
         *     the request. Set to `null` if a request error occurs.
         */
        makeUnauthenticatedRequest: function makeUnauthenticatedRequest(operation, params, callback) {
          if (typeof params === 'function') {
            callback = params;
            params = {};
          }

          var request = this.makeRequest(operation, params).toUnauthenticated();
          return callback ? request.send(callback) : request;
        },

        /**
         * Waits for a given state
         *
         * @param state [String] the state on the service to wait for
         * @param params [map] a map of parameters to pass with each request
         * @option params $waiter [map] a map of configuration options for the waiter
         * @option params $waiter.delay [Number] The number of seconds to wait between
         *                                       requests
         * @option params $waiter.maxAttempts [Number] The maximum number of requests
         *                                             to send while waiting
         * @callback callback function(err, data)
         *   If a callback is supplied, it is called when a response is returned
         *   from the service.
         *   @param err [Error] the error object returned from the request.
         *     Set to `null` if the request is successful.
         *   @param data [Object] the de-serialized data returned from
         *     the request. Set to `null` if a request error occurs.
         */
        waitFor: function waitFor(state, params, callback) {
          var waiter = new AWS.ResourceWaiter(this, state);
          return waiter.wait(params, callback);
        },

        /**
         * @api private
         */
        addAllRequestListeners: function addAllRequestListeners(request) {
          var list = [AWS.events, AWS.EventListeners.Core, this.serviceInterface(), AWS.EventListeners.CorePost];

          for (var i = 0; i < list.length; i++) {
            if (list[i]) request.addListeners(list[i]);
          } // disable parameter validation


          if (!this.config.paramValidation) {
            request.removeListener('validate', AWS.EventListeners.Core.VALIDATE_PARAMETERS);
          }

          if (this.config.logger) {
            // add logging events
            request.addListeners(AWS.EventListeners.Logger);
          }

          this.setupRequestListeners(request); // call prototype's customRequestHandler

          if (typeof this.constructor.prototype.customRequestHandler === 'function') {
            this.constructor.prototype.customRequestHandler(request);
          } // call instance's customRequestHandler


          if (Object.prototype.hasOwnProperty.call(this, 'customRequestHandler') && typeof this.customRequestHandler === 'function') {
            this.customRequestHandler(request);
          }
        },

        /**
         * Event recording metrics for a whole API call.
         * @returns {object} a subset of api call metrics
         * @api private
         */
        apiCallEvent: function apiCallEvent(request) {
          var api = request.service.api.operations[request.operation];
          var monitoringEvent = {
            Type: 'ApiCall',
            Api: api ? api.name : request.operation,
            Version: 1,
            Service: request.service.api.serviceId || request.service.api.endpointPrefix,
            Region: request.httpRequest.region,
            MaxRetriesExceeded: 0,
            UserAgent: request.httpRequest.getUserAgent()
          };
          var response = request.response;

          if (response.httpResponse.statusCode) {
            monitoringEvent.FinalHttpStatusCode = response.httpResponse.statusCode;
          }

          if (response.error) {
            var error = response.error;
            var statusCode = response.httpResponse.statusCode;

            if (statusCode > 299) {
              if (error.code) monitoringEvent.FinalAwsException = error.code;
              if (error.message) monitoringEvent.FinalAwsExceptionMessage = error.message;
            } else {
              if (error.code || error.name) monitoringEvent.FinalSdkException = error.code || error.name;
              if (error.message) monitoringEvent.FinalSdkExceptionMessage = error.message;
            }
          }

          return monitoringEvent;
        },

        /**
         * Event recording metrics for an API call attempt.
         * @returns {object} a subset of api call attempt metrics
         * @api private
         */
        apiAttemptEvent: function apiAttemptEvent(request) {
          var api = request.service.api.operations[request.operation];
          var monitoringEvent = {
            Type: 'ApiCallAttempt',
            Api: api ? api.name : request.operation,
            Version: 1,
            Service: request.service.api.serviceId || request.service.api.endpointPrefix,
            Fqdn: request.httpRequest.endpoint.hostname,
            UserAgent: request.httpRequest.getUserAgent()
          };
          var response = request.response;

          if (response.httpResponse.statusCode) {
            monitoringEvent.HttpStatusCode = response.httpResponse.statusCode;
          }

          if (!request._unAuthenticated && request.service.config.credentials && request.service.config.credentials.accessKeyId) {
            monitoringEvent.AccessKey = request.service.config.credentials.accessKeyId;
          }

          if (!response.httpResponse.headers) return monitoringEvent;

          if (request.httpRequest.headers['x-amz-security-token']) {
            monitoringEvent.SessionToken = request.httpRequest.headers['x-amz-security-token'];
          }

          if (response.httpResponse.headers['x-amzn-requestid']) {
            monitoringEvent.XAmznRequestId = response.httpResponse.headers['x-amzn-requestid'];
          }

          if (response.httpResponse.headers['x-amz-request-id']) {
            monitoringEvent.XAmzRequestId = response.httpResponse.headers['x-amz-request-id'];
          }

          if (response.httpResponse.headers['x-amz-id-2']) {
            monitoringEvent.XAmzId2 = response.httpResponse.headers['x-amz-id-2'];
          }

          return monitoringEvent;
        },

        /**
         * Add metrics of failed request.
         * @api private
         */
        attemptFailEvent: function attemptFailEvent(request) {
          var monitoringEvent = this.apiAttemptEvent(request);
          var response = request.response;
          var error = response.error;

          if (response.httpResponse.statusCode > 299) {
            if (error.code) monitoringEvent.AwsException = error.code;
            if (error.message) monitoringEvent.AwsExceptionMessage = error.message;
          } else {
            if (error.code || error.name) monitoringEvent.SdkException = error.code || error.name;
            if (error.message) monitoringEvent.SdkExceptionMessage = error.message;
          }

          return monitoringEvent;
        },

        /**
         * Attach listeners to request object to fetch metrics of each request
         * and emit data object through \'ApiCall\' and \'ApiCallAttempt\' events.
         * @api private
         */
        attachMonitoringEmitter: function attachMonitoringEmitter(request) {
          var attemptTimestamp; //timestamp marking the beginning of a request attempt

          var attemptStartRealTime; //Start time of request attempt. Used to calculating attemptLatency

          var attemptLatency; //latency from request sent out to http response reaching SDK

          var callStartRealTime; //Start time of API call. Used to calculating API call latency

          var attemptCount = 0; //request.retryCount is not reliable here

          var region; //region cache region for each attempt since it can be updated in plase (e.g. s3)

          var callTimestamp; //timestamp when the request is created

          var self = this;
          var addToHead = true;
          request.on('validate', function () {
            callStartRealTime = AWS.util.realClock.now();
            callTimestamp = Date.now();
          }, addToHead);
          request.on('sign', function () {
            attemptStartRealTime = AWS.util.realClock.now();
            attemptTimestamp = Date.now();
            region = request.httpRequest.region;
            attemptCount++;
          }, addToHead);
          request.on('validateResponse', function () {
            attemptLatency = Math.round(AWS.util.realClock.now() - attemptStartRealTime);
          });
          request.addNamedListener('API_CALL_ATTEMPT', 'success', function API_CALL_ATTEMPT() {
            var apiAttemptEvent = self.apiAttemptEvent(request);
            apiAttemptEvent.Timestamp = attemptTimestamp;
            apiAttemptEvent.AttemptLatency = attemptLatency >= 0 ? attemptLatency : 0;
            apiAttemptEvent.Region = region;
            self.emit('apiCallAttempt', [apiAttemptEvent]);
          });
          request.addNamedListener('API_CALL_ATTEMPT_RETRY', 'retry', function API_CALL_ATTEMPT_RETRY() {
            var apiAttemptEvent = self.attemptFailEvent(request);
            apiAttemptEvent.Timestamp = attemptTimestamp; //attemptLatency may not be available if fail before response

            attemptLatency = attemptLatency || Math.round(AWS.util.realClock.now() - attemptStartRealTime);
            apiAttemptEvent.AttemptLatency = attemptLatency >= 0 ? attemptLatency : 0;
            apiAttemptEvent.Region = region;
            self.emit('apiCallAttempt', [apiAttemptEvent]);
          });
          request.addNamedListener('API_CALL', 'complete', function API_CALL() {
            var apiCallEvent = self.apiCallEvent(request);
            apiCallEvent.AttemptCount = attemptCount;
            if (apiCallEvent.AttemptCount <= 0) return;
            apiCallEvent.Timestamp = callTimestamp;
            var latency = Math.round(AWS.util.realClock.now() - callStartRealTime);
            apiCallEvent.Latency = latency >= 0 ? latency : 0;
            var response = request.response;

            if (response.error && response.error.retryable && typeof response.retryCount === 'number' && typeof response.maxRetries === 'number' && response.retryCount >= response.maxRetries) {
              apiCallEvent.MaxRetriesExceeded = 1;
            }

            self.emit('apiCall', [apiCallEvent]);
          });
        },

        /**
         * Override this method to setup any custom request listeners for each
         * new request to the service.
         *
         * @method_abstract This is an abstract method.
         */
        setupRequestListeners: function setupRequestListeners(request) {},

        /**
         * Gets the signing name for a given request
         * @api private
         */
        getSigningName: function getSigningName() {
          return this.api.signingName || this.api.endpointPrefix;
        },

        /**
         * Gets the signer class for a given request
         * @api private
         */
        getSignerClass: function getSignerClass(request) {
          var version; // get operation authtype if present

          var operation = null;
          var authtype = '';

          if (request) {
            var operations = request.service.api.operations || {};
            operation = operations[request.operation] || null;
            authtype = operation ? operation.authtype : '';
          }

          if (this.config.signatureVersion) {
            version = this.config.signatureVersion;
          } else if (authtype === 'v4' || authtype === 'v4-unsigned-body') {
            version = 'v4';
          } else {
            version = this.api.signatureVersion;
          }

          return AWS.Signers.RequestSigner.getVersion(version);
        },

        /**
         * @api private
         */
        serviceInterface: function serviceInterface() {
          switch (this.api.protocol) {
            case 'ec2':
              return AWS.EventListeners.Query;

            case 'query':
              return AWS.EventListeners.Query;

            case 'json':
              return AWS.EventListeners.Json;

            case 'rest-json':
              return AWS.EventListeners.RestJson;

            case 'rest-xml':
              return AWS.EventListeners.RestXml;
          }

          if (this.api.protocol) {
            throw new Error('Invalid service `protocol\' ' + this.api.protocol + ' in API config');
          }
        },

        /**
         * @api private
         */
        successfulResponse: function successfulResponse(resp) {
          return resp.httpResponse.statusCode < 300;
        },

        /**
         * How many times a failed request should be retried before giving up.
         * the defaultRetryCount can be overriden by service classes.
         *
         * @api private
         */
        numRetries: function numRetries() {
          if (this.config.maxRetries !== undefined) {
            return this.config.maxRetries;
          } else {
            return this.defaultRetryCount;
          }
        },

        /**
         * @api private
         */
        retryDelays: function retryDelays(retryCount, err) {
          return AWS.util.calculateRetryDelay(retryCount, this.config.retryDelayOptions, err);
        },

        /**
         * @api private
         */
        retryableError: function retryableError(error) {
          if (this.timeoutError(error)) return true;
          if (this.networkingError(error)) return true;
          if (this.expiredCredentialsError(error)) return true;
          if (this.throttledError(error)) return true;
          if (error.statusCode >= 500) return true;
          return false;
        },

        /**
         * @api private
         */
        networkingError: function networkingError(error) {
          return error.code === 'NetworkingError';
        },

        /**
         * @api private
         */
        timeoutError: function timeoutError(error) {
          return error.code === 'TimeoutError';
        },

        /**
         * @api private
         */
        expiredCredentialsError: function expiredCredentialsError(error) {
          // TODO : this only handles *one* of the expired credential codes
          return error.code === 'ExpiredTokenException';
        },

        /**
         * @api private
         */
        clockSkewError: function clockSkewError(error) {
          switch (error.code) {
            case 'RequestTimeTooSkewed':
            case 'RequestExpired':
            case 'InvalidSignatureException':
            case 'SignatureDoesNotMatch':
            case 'AuthFailure':
            case 'RequestInTheFuture':
              return true;

            default:
              return false;
          }
        },

        /**
         * @api private
         */
        getSkewCorrectedDate: function getSkewCorrectedDate() {
          return new Date(Date.now() + this.config.systemClockOffset);
        },

        /**
         * @api private
         */
        applyClockOffset: function applyClockOffset(newServerTime) {
          if (newServerTime) {
            this.config.systemClockOffset = newServerTime - Date.now();
          }
        },

        /**
         * @api private
         */
        isClockSkewed: function isClockSkewed(newServerTime) {
          if (newServerTime) {
            return Math.abs(this.getSkewCorrectedDate().getTime() - newServerTime) >= 300000;
          }
        },

        /**
         * @api private
         */
        throttledError: function throttledError(error) {
          // this logic varies between services
          if (error.statusCode === 429) return true;

          switch (error.code) {
            case 'ProvisionedThroughputExceededException':
            case 'Throttling':
            case 'ThrottlingException':
            case 'RequestLimitExceeded':
            case 'RequestThrottled':
            case 'RequestThrottledException':
            case 'TooManyRequestsException':
            case 'TransactionInProgressException': //dynamodb

            case 'EC2ThrottledException':
              return true;

            default:
              return false;
          }
        },

        /**
         * @api private
         */
        endpointFromTemplate: function endpointFromTemplate(endpoint) {
          if (typeof endpoint !== 'string') return endpoint;
          var e = endpoint;
          e = e.replace(/\{service\}/g, this.api.endpointPrefix);
          e = e.replace(/\{region\}/g, this.config.region);
          e = e.replace(/\{scheme\}/g, this.config.sslEnabled ? 'https' : 'http');
          return e;
        },

        /**
         * @api private
         */
        setEndpoint: function setEndpoint(endpoint) {
          this.endpoint = new AWS.Endpoint(endpoint, this.config);
        },

        /**
         * @api private
         */
        paginationConfig: function paginationConfig(operation, throwException) {
          var paginator = this.api.operations[operation].paginator;

          if (!paginator) {
            if (throwException) {
              var e = new Error();
              throw AWS.util.error(e, 'No pagination configuration for ' + operation);
            }

            return null;
          }

          return paginator;
        }
      });
      AWS.util.update(AWS.Service, {
        /**
         * Adds one method for each operation described in the api configuration
         *
         * @api private
         */
        defineMethods: function defineMethods(svc) {
          AWS.util.each(svc.prototype.api.operations, function iterator(method) {
            if (svc.prototype[method]) return;
            var operation = svc.prototype.api.operations[method];

            if (operation.authtype === 'none') {
              svc.prototype[method] = function (params, callback) {
                return this.makeUnauthenticatedRequest(method, params, callback);
              };
            } else {
              svc.prototype[method] = function (params, callback) {
                return this.makeRequest(method, params, callback);
              };
            }
          });
        },

        /**
         * Defines a new Service class using a service identifier and list of versions
         * including an optional set of features (functions) to apply to the class
         * prototype.
         *
         * @param serviceIdentifier [String] the identifier for the service
         * @param versions [Array<String>] a list of versions that work with this
         *   service
         * @param features [Object] an object to attach to the prototype
         * @return [Class<Service>] the service class defined by this function.
         */
        defineService: function defineService(serviceIdentifier, versions, features) {
          AWS.Service._serviceMap[serviceIdentifier] = true;

          if (!Array.isArray(versions)) {
            features = versions;
            versions = [];
          }

          var svc = inherit(AWS.Service, features || {});

          if (typeof serviceIdentifier === 'string') {
            AWS.Service.addVersions(svc, versions);
            var identifier = svc.serviceIdentifier || serviceIdentifier;
            svc.serviceIdentifier = identifier;
          } else {
            // defineService called with an API
            svc.prototype.api = serviceIdentifier;
            AWS.Service.defineMethods(svc);
          }

          AWS.SequentialExecutor.call(this.prototype); //util.clientSideMonitoring is only available in node

          if (!this.prototype.publisher && AWS.util.clientSideMonitoring) {
            var Publisher = AWS.util.clientSideMonitoring.Publisher;
            var configProvider = AWS.util.clientSideMonitoring.configProvider;
            var publisherConfig = configProvider();
            this.prototype.publisher = new Publisher(publisherConfig);

            if (publisherConfig.enabled) {
              //if csm is enabled in environment, SDK should send all metrics
              AWS.Service._clientSideMonitoring = true;
            }
          }

          AWS.SequentialExecutor.call(svc.prototype);
          AWS.Service.addDefaultMonitoringListeners(svc.prototype);
          return svc;
        },

        /**
         * @api private
         */
        addVersions: function addVersions(svc, versions) {
          if (!Array.isArray(versions)) versions = [versions];
          svc.services = svc.services || {};

          for (var i = 0; i < versions.length; i++) {
            if (svc.services[versions[i]] === undefined) {
              svc.services[versions[i]] = null;
            }
          }

          svc.apiVersions = Object.keys(svc.services).sort();
        },

        /**
         * @api private
         */
        defineServiceApi: function defineServiceApi(superclass, version, apiConfig) {
          var svc = inherit(superclass, {
            serviceIdentifier: superclass.serviceIdentifier
          });

          function setApi(api) {
            if (api.isApi) {
              svc.prototype.api = api;
            } else {
              svc.prototype.api = new Api(api, {
                serviceIdentifier: superclass.serviceIdentifier
              });
            }
          }

          if (typeof version === 'string') {
            if (apiConfig) {
              setApi(apiConfig);
            } else {
              try {
                setApi(AWS.apiLoader(superclass.serviceIdentifier, version));
              } catch (err) {
                throw AWS.util.error(err, {
                  message: 'Could not find API configuration ' + superclass.serviceIdentifier + '-' + version
                });
              }
            }

            if (!Object.prototype.hasOwnProperty.call(superclass.services, version)) {
              superclass.apiVersions = superclass.apiVersions.concat(version).sort();
            }

            superclass.services[version] = svc;
          } else {
            setApi(version);
          }

          AWS.Service.defineMethods(svc);
          return svc;
        },

        /**
         * @api private
         */
        hasService: function hasService(identifier) {
          return Object.prototype.hasOwnProperty.call(AWS.Service._serviceMap, identifier);
        },

        /**
         * @param attachOn attach default monitoring listeners to object
         *
         * Each monitoring event should be emitted from service client to service constructor prototype and then
         * to global service prototype like bubbling up. These default monitoring events listener will transfer
         * the monitoring events to the upper layer.
         * @api private
         */
        addDefaultMonitoringListeners: function addDefaultMonitoringListeners(attachOn) {
          attachOn.addNamedListener('MONITOR_EVENTS_BUBBLE', 'apiCallAttempt', function EVENTS_BUBBLE(event) {
            var baseClass = Object.getPrototypeOf(attachOn);
            if (baseClass._events) baseClass.emit('apiCallAttempt', [event]);
          });
          attachOn.addNamedListener('CALL_EVENTS_BUBBLE', 'apiCall', function CALL_EVENTS_BUBBLE(event) {
            var baseClass = Object.getPrototypeOf(attachOn);
            if (baseClass._events) baseClass.emit('apiCall', [event]);
          });
        },

        /**
         * @api private
         */
        _serviceMap: {}
      });
      AWS.util.mixin(AWS.Service, AWS.SequentialExecutor);
      /**
       * @api private
       */

      module.exports = AWS.Service;
      /***/
    },

    /***/
    "jUeY":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/el.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function jUeY(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Greek [el]
      //! author : Aggelos Karalias : https://github.com/mehiel
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        function isFunction(input) {
          return typeof Function !== 'undefined' && input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';
        }

        var el = moment.defineLocale('el', {
          monthsNominativeEl: 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),
          monthsGenitiveEl: 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),
          months: function months(momentToFormat, format) {
            if (!momentToFormat) {
              return this._monthsNominativeEl;
            } else if (typeof format === 'string' && /D/.test(format.substring(0, format.indexOf('MMMM')))) {
              // if there is a day number before 'MMMM'
              return this._monthsGenitiveEl[momentToFormat.month()];
            } else {
              return this._monthsNominativeEl[momentToFormat.month()];
            }
          },
          monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),
          weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),
          weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),
          weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),
          meridiem: function meridiem(hours, minutes, isLower) {
            if (hours > 11) {
              return isLower ? 'μμ' : 'ΜΜ';
            } else {
              return isLower ? 'πμ' : 'ΠΜ';
            }
          },
          isPM: function isPM(input) {
            return (input + '').toLowerCase()[0] === 'μ';
          },
          meridiemParse: /[ΠΜ]\.?Μ?\.?/i,
          longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A'
          },
          calendarEl: {
            sameDay: '[Σήμερα {}] LT',
            nextDay: '[Αύριο {}] LT',
            nextWeek: 'dddd [{}] LT',
            lastDay: '[Χθες {}] LT',
            lastWeek: function lastWeek() {
              switch (this.day()) {
                case 6:
                  return '[το προηγούμενο] dddd [{}] LT';

                default:
                  return '[την προηγούμενη] dddd [{}] LT';
              }
            },
            sameElse: 'L'
          },
          calendar: function calendar(key, mom) {
            var output = this._calendarEl[key],
                hours = mom && mom.hours();

            if (isFunction(output)) {
              output = output.apply(mom);
            }

            return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις');
          },
          relativeTime: {
            future: 'σε %s',
            past: '%s πριν',
            s: 'λίγα δευτερόλεπτα',
            ss: '%d δευτερόλεπτα',
            m: 'ένα λεπτό',
            mm: '%d λεπτά',
            h: 'μία ώρα',
            hh: '%d ώρες',
            d: 'μία μέρα',
            dd: '%d μέρες',
            M: 'ένας μήνας',
            MM: '%d μήνες',
            y: 'ένας χρόνος',
            yy: '%d χρόνια'
          },
          dayOfMonthOrdinalParse: /\d{1,2}η/,
          ordinal: '%dη',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4st is the first week of the year.

          }
        });
        return el;
      });
      /***/

    },

    /***/
    "jVEe":
    /*!*****************************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/calendar-body.component.js ***!
      \*****************************************************************************************/

    /*! exports provided: CalendarCell, OwlCalendarBodyComponent */

    /***/
    function jVEe(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CalendarCell", function () {
        return CalendarCell;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OwlCalendarBodyComponent", function () {
        return OwlCalendarBodyComponent;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");

      var _c0 = ["owl-date-time-calendar-body", ""];

      var _c1 = function _c1(a0, a1, a2) {
        return {
          "owl-dt-calendar-cell-out": a0,
          "owl-dt-calendar-cell-today": a1,
          "owl-dt-calendar-cell-selected": a2
        };
      };

      function OwlCalendarBodyComponent_tr_0_td_1_Template(rf, ctx) {
        if (rf & 1) {
          var _r7 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "td", 3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function OwlCalendarBodyComponent_tr_0_td_1_Template_td_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r7);

            var item_r4 = ctx.$implicit;

            var ctx_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r6.selectCell(item_r4);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "span", 4);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var item_r4 = ctx.$implicit;
          var colIndex_r5 = ctx.index;

          var rowIndex_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().index;

          var ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMapInterpolate1"]("owl-dt-calendar-cell ", item_r4.cellClass, "");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("width", 100 / ctx_r3.numCols, "%")("padding-top", 50 * ctx_r3.cellRatio / ctx_r3.numCols, "%")("padding-bottom", 50 * ctx_r3.cellRatio / ctx_r3.numCols, "%");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("owl-dt-calendar-cell-active", ctx_r3.isActiveCell(rowIndex_r2, colIndex_r5))("owl-dt-calendar-cell-disabled", !item_r4.enabled)("owl-dt-calendar-cell-in-range", ctx_r3.isInRange(item_r4.value))("owl-dt-calendar-cell-range-from", ctx_r3.isRangeFrom(item_r4.value))("owl-dt-calendar-cell-range-to", ctx_r3.isRangeTo(item_r4.value));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("tabindex", ctx_r3.isActiveCell(rowIndex_r2, colIndex_r5) ? 0 : -1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-label", item_r4.ariaLabel)("aria-disabled", !item_r4.enabled || null);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction3"](24, _c1, item_r4.out, item_r4.value === ctx_r3.todayValue, ctx_r3.isSelected(item_r4.value)));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](item_r4.displayValue);
        }
      }

      function OwlCalendarBodyComponent_tr_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "tr", 1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, OwlCalendarBodyComponent_tr_0_td_1_Template, 3, 28, "td", 2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var row_r1 = ctx.$implicit;

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", row_r1);
        }
      }

      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var __metadata = undefined && undefined.__metadata || function (k, v) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
      };

      var CalendarCell = function () {
        function CalendarCell(value, displayValue, ariaLabel, enabled, out, cellClass) {
          if (out === void 0) {
            out = false;
          }

          if (cellClass === void 0) {
            cellClass = '';
          }

          this.value = value;
          this.displayValue = displayValue;
          this.ariaLabel = ariaLabel;
          this.enabled = enabled;
          this.out = out;
          this.cellClass = cellClass;
        }

        return CalendarCell;
      }();

      var OwlCalendarBodyComponent = function () {
        function OwlCalendarBodyComponent(elmRef, ngZone) {
          this.elmRef = elmRef;
          this.ngZone = ngZone;
          this.activeCell = 0;
          this.numCols = 7;
          this.cellRatio = 1;
          this.select = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        }

        Object.defineProperty(OwlCalendarBodyComponent.prototype, "owlDTCalendarBodyClass", {
          get: function get() {
            return true;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlCalendarBodyComponent.prototype, "isInSingleMode", {
          get: function get() {
            return this.selectMode === 'single';
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlCalendarBodyComponent.prototype, "isInRangeMode", {
          get: function get() {
            return this.selectMode === 'range' || this.selectMode === 'rangeFrom' || this.selectMode === 'rangeTo';
          },
          enumerable: true,
          configurable: true
        });

        OwlCalendarBodyComponent.prototype.ngOnInit = function () {};

        OwlCalendarBodyComponent.prototype.selectCell = function (cell) {
          this.select.emit(cell);
        };

        OwlCalendarBodyComponent.prototype.isActiveCell = function (rowIndex, colIndex) {
          var cellNumber = rowIndex * this.numCols + colIndex;
          return cellNumber === this.activeCell;
        };

        OwlCalendarBodyComponent.prototype.isSelected = function (value) {
          if (!this.selectedValues || this.selectedValues.length === 0) {
            return false;
          }

          if (this.isInSingleMode) {
            return value === this.selectedValues[0];
          }

          if (this.isInRangeMode) {
            var fromValue = this.selectedValues[0];
            var toValue = this.selectedValues[1];
            return value === fromValue || value === toValue;
          }
        };

        OwlCalendarBodyComponent.prototype.isInRange = function (value) {
          if (this.isInRangeMode) {
            var fromValue = this.selectedValues[0];
            var toValue = this.selectedValues[1];

            if (fromValue !== null && toValue !== null) {
              return value >= fromValue && value <= toValue;
            } else {
              return value === fromValue || value === toValue;
            }
          }
        };

        OwlCalendarBodyComponent.prototype.isRangeFrom = function (value) {
          if (this.isInRangeMode) {
            var fromValue = this.selectedValues[0];
            return fromValue !== null && value === fromValue;
          }
        };

        OwlCalendarBodyComponent.prototype.isRangeTo = function (value) {
          if (this.isInRangeMode) {
            var toValue = this.selectedValues[1];
            return toValue !== null && value === toValue;
          }
        };

        OwlCalendarBodyComponent.prototype.focusActiveCell = function () {
          var _this = this;

          this.ngZone.runOutsideAngular(function () {
            _this.ngZone.onStable.asObservable().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["take"])(1)).subscribe(function () {
              _this.elmRef.nativeElement.querySelector('.owl-dt-calendar-cell-active').focus();
            });
          });
        };

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object)], OwlCalendarBodyComponent.prototype, "activeCell", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Array)], OwlCalendarBodyComponent.prototype, "rows", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object)], OwlCalendarBodyComponent.prototype, "numCols", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object)], OwlCalendarBodyComponent.prototype, "cellRatio", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Number)], OwlCalendarBodyComponent.prototype, "todayValue", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Array)], OwlCalendarBodyComponent.prototype, "selectedValues", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", String)], OwlCalendarBodyComponent.prototype, "selectMode", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", Object)], OwlCalendarBodyComponent.prototype, "select", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('class.owl-dt-calendar-body'), __metadata("design:type", Boolean), __metadata("design:paramtypes", [])], OwlCalendarBodyComponent.prototype, "owlDTCalendarBodyClass", null);

        OwlCalendarBodyComponent = __decorate([__metadata("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]])], OwlCalendarBodyComponent);

        OwlCalendarBodyComponent.ɵfac = function OwlCalendarBodyComponent_Factory(t) {
          return new (t || OwlCalendarBodyComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]));
        };

        OwlCalendarBodyComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
          type: OwlCalendarBodyComponent,
          selectors: [["", "owl-date-time-calendar-body", ""]],
          hostVars: 2,
          hostBindings: function OwlCalendarBodyComponent_HostBindings(rf, ctx) {
            if (rf & 2) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("owl-dt-calendar-body", ctx.owlDTCalendarBodyClass);
            }
          },
          inputs: {
            activeCell: "activeCell",
            numCols: "numCols",
            cellRatio: "cellRatio",
            rows: "rows",
            todayValue: "todayValue",
            selectedValues: "selectedValues",
            selectMode: "selectMode"
          },
          outputs: {
            select: "select"
          },
          exportAs: ["owlDateTimeCalendarBody"],
          attrs: _c0,
          decls: 1,
          vars: 1,
          consts: [["role", "row", 4, "ngFor", "ngForOf"], ["role", "row"], [3, "class", "tabindex", "owl-dt-calendar-cell-active", "owl-dt-calendar-cell-disabled", "owl-dt-calendar-cell-in-range", "owl-dt-calendar-cell-range-from", "owl-dt-calendar-cell-range-to", "width", "paddingTop", "paddingBottom", "click", 4, "ngFor", "ngForOf"], [3, "tabindex", "click"], [1, "owl-dt-calendar-cell-content", 3, "ngClass"]],
          template: function OwlCalendarBodyComponent_Template(rf, ctx) {
            if (rf & 1) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, OwlCalendarBodyComponent_tr_0_Template, 2, 1, "tr", 0);
            }

            if (rf & 2) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.rows);
            }
          },
          directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgClass"]],
          styles: [""],
          changeDetection: 0
        });

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](OwlCalendarBodyComponent, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
            args: [{
              selector: '[owl-date-time-calendar-body]',
              exportAs: 'owlDateTimeCalendarBody',
              template: "<tr *ngFor=\"let row of rows; let rowIndex = index\" role=\"row\"><td *ngFor=\"let item of row; let colIndex = index\" class=\"owl-dt-calendar-cell {{item.cellClass}}\" [tabindex]=\"isActiveCell(rowIndex, colIndex) ? 0 : -1\" [class.owl-dt-calendar-cell-active]=\"isActiveCell(rowIndex, colIndex)\" [class.owl-dt-calendar-cell-disabled]=\"!item.enabled\" [class.owl-dt-calendar-cell-in-range]=\"isInRange(item.value)\" [class.owl-dt-calendar-cell-range-from]=\"isRangeFrom(item.value)\" [class.owl-dt-calendar-cell-range-to]=\"isRangeTo(item.value)\" [attr.aria-label]=\"item.ariaLabel\" [attr.aria-disabled]=\"!item.enabled || null\" [style.width.%]=\"100 / numCols\" [style.paddingTop.%]=\"50 * cellRatio / numCols\" [style.paddingBottom.%]=\"50 * cellRatio / numCols\" (click)=\"selectCell(item)\"><span class=\"owl-dt-calendar-cell-content\" [ngClass]=\"{\n                'owl-dt-calendar-cell-out': item.out,\n                'owl-dt-calendar-cell-today': item.value === todayValue,\n                'owl-dt-calendar-cell-selected': isSelected(item.value)\n              }\">{{item.displayValue}}</span></td></tr>",
              styles: [""],
              preserveWhitespaces: false,
              changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush
            }]
          }], function () {
            return [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
            }];
          }, {
            activeCell: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            numCols: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            cellRatio: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            select: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            owlDTCalendarBodyClass: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['class.owl-dt-calendar-body']
            }],
            rows: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            todayValue: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            selectedValues: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            selectMode: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }]
          });
        })();

        return OwlCalendarBodyComponent;
      }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64, 

      /***/

    },

    /***/
    "jVdC":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/pl.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function jVdC(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Polish [pl]
      //! author : Rafal Hirsz : https://github.com/evoL
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),
            monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_'),
            monthsParse = [/^sty/i, /^lut/i, /^mar/i, /^kwi/i, /^maj/i, /^cze/i, /^lip/i, /^sie/i, /^wrz/i, /^paź/i, /^lis/i, /^gru/i];

        function plural(n) {
          return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;
        }

        function translate(number, withoutSuffix, key) {
          var result = number + ' ';

          switch (key) {
            case 'ss':
              return result + (plural(number) ? 'sekundy' : 'sekund');

            case 'm':
              return withoutSuffix ? 'minuta' : 'minutę';

            case 'mm':
              return result + (plural(number) ? 'minuty' : 'minut');

            case 'h':
              return withoutSuffix ? 'godzina' : 'godzinę';

            case 'hh':
              return result + (plural(number) ? 'godziny' : 'godzin');

            case 'ww':
              return result + (plural(number) ? 'tygodnie' : 'tygodni');

            case 'MM':
              return result + (plural(number) ? 'miesiące' : 'miesięcy');

            case 'yy':
              return result + (plural(number) ? 'lata' : 'lat');
          }
        }

        var pl = moment.defineLocale('pl', {
          months: function months(momentToFormat, format) {
            if (!momentToFormat) {
              return monthsNominative;
            } else if (/D MMMM/.test(format)) {
              return monthsSubjective[momentToFormat.month()];
            } else {
              return monthsNominative[momentToFormat.month()];
            }
          },
          monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),
          monthsParse: monthsParse,
          longMonthsParse: monthsParse,
          shortMonthsParse: monthsParse,
          weekdays: 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),
          weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),
          weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[Dziś o] LT',
            nextDay: '[Jutro o] LT',
            nextWeek: function nextWeek() {
              switch (this.day()) {
                case 0:
                  return '[W niedzielę o] LT';

                case 2:
                  return '[We wtorek o] LT';

                case 3:
                  return '[W środę o] LT';

                case 6:
                  return '[W sobotę o] LT';

                default:
                  return '[W] dddd [o] LT';
              }
            },
            lastDay: '[Wczoraj o] LT',
            lastWeek: function lastWeek() {
              switch (this.day()) {
                case 0:
                  return '[W zeszłą niedzielę o] LT';

                case 3:
                  return '[W zeszłą środę o] LT';

                case 6:
                  return '[W zeszłą sobotę o] LT';

                default:
                  return '[W zeszły] dddd [o] LT';
              }
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: 'za %s',
            past: '%s temu',
            s: 'kilka sekund',
            ss: translate,
            m: translate,
            mm: translate,
            h: translate,
            hh: translate,
            d: '1 dzień',
            dd: '%d dni',
            w: 'tydzień',
            ww: translate,
            M: 'miesiąc',
            MM: translate,
            y: 'rok',
            yy: translate
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return pl;
      });
      /***/

    },

    /***/
    "jZKg":
    /*!************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/scheduled/scheduleArray.js ***!
      \************************************************************************/

    /*! exports provided: scheduleArray */

    /***/
    function jZKg(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "scheduleArray", function () {
        return scheduleArray;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../Subscription */
      "quSY");

      function scheduleArray(input, scheduler) {
        return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
          var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
          var i = 0;
          sub.add(scheduler.schedule(function () {
            if (i === input.length) {
              subscriber.complete();
              return;
            }

            subscriber.next(input[i++]);

            if (!subscriber.closed) {
              sub.add(this.schedule());
            }
          }));
          return sub;
        });
      } //# sourceMappingURL=scheduleArray.js.map

      /***/

    },

    /***/
    "jfSC":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/fa.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function jfSC(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Persian [fa]
      //! author : Ebrahim Byagowi : https://github.com/ebraminio
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var symbolMap = {
          1: '۱',
          2: '۲',
          3: '۳',
          4: '۴',
          5: '۵',
          6: '۶',
          7: '۷',
          8: '۸',
          9: '۹',
          0: '۰'
        },
            numberMap = {
          '۱': '1',
          '۲': '2',
          '۳': '3',
          '۴': '4',
          '۵': '5',
          '۶': '6',
          '۷': '7',
          '۸': '8',
          '۹': '9',
          '۰': '0'
        };
        var fa = moment.defineLocale('fa', {
          months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
          monthsShort: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
          weekdays: "\u06CC\u06A9\u200C\u0634\u0646\u0628\u0647_\u062F\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200C\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067E\u0646\u062C\u200C\u0634\u0646\u0628\u0647_\u062C\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split('_'),
          weekdaysShort: "\u06CC\u06A9\u200C\u0634\u0646\u0628\u0647_\u062F\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200C\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067E\u0646\u062C\u200C\u0634\u0646\u0628\u0647_\u062C\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split('_'),
          weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          meridiemParse: /قبل از ظهر|بعد از ظهر/,
          isPM: function isPM(input) {
            return /بعد از ظهر/.test(input);
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 12) {
              return 'قبل از ظهر';
            } else {
              return 'بعد از ظهر';
            }
          },
          calendar: {
            sameDay: '[امروز ساعت] LT',
            nextDay: '[فردا ساعت] LT',
            nextWeek: 'dddd [ساعت] LT',
            lastDay: '[دیروز ساعت] LT',
            lastWeek: 'dddd [پیش] [ساعت] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'در %s',
            past: '%s پیش',
            s: 'چند ثانیه',
            ss: '%d ثانیه',
            m: 'یک دقیقه',
            mm: '%d دقیقه',
            h: 'یک ساعت',
            hh: '%d ساعت',
            d: 'یک روز',
            dd: '%d روز',
            M: 'یک ماه',
            MM: '%d ماه',
            y: 'یک سال',
            yy: '%d سال'
          },
          preparse: function preparse(string) {
            return string.replace(/[۰-۹]/g, function (match) {
              return numberMap[match];
            }).replace(/،/g, ',');
          },
          postformat: function postformat(string) {
            return string.replace(/\d/g, function (match) {
              return symbolMap[match];
            }).replace(/,/g, '،');
          },
          dayOfMonthOrdinalParse: /\d{1,2}م/,
          ordinal: '%dم',
          week: {
            dow: 6,
            // Saturday is the first day of the week.
            doy: 12 // The week that contains Jan 12th is the first week of the year.

          }
        });
        return fa;
      });
      /***/

    },

    /***/
    "jhN1":
    /*!******************************************************************************************!*\
      !*** ./node_modules/@angular/platform-browser/__ivy_ngcc__/fesm2015/platform-browser.js ***!
      \******************************************************************************************/

    /*! exports provided: ɵgetDOM, BrowserModule, BrowserTransferStateModule, By, DomSanitizer, EVENT_MANAGER_PLUGINS, EventManager, HAMMER_GESTURE_CONFIG, HAMMER_LOADER, HammerGestureConfig, HammerModule, Meta, Title, TransferState, VERSION, disableDebugTools, enableDebugTools, makeStateKey, platformBrowser, ɵBROWSER_SANITIZATION_PROVIDERS, ɵBROWSER_SANITIZATION_PROVIDERS__POST_R3__, ɵBrowserDomAdapter, ɵBrowserGetTestability, ɵDomEventsPlugin, ɵDomRendererFactory2, ɵDomSanitizerImpl, ɵDomSharedStylesHost, ɵELEMENT_PROBE_PROVIDERS, ɵELEMENT_PROBE_PROVIDERS__POST_R3__, ɵHAMMER_PROVIDERS__POST_R3__, ɵHammerGesturesPlugin, ɵINTERNAL_BROWSER_PLATFORM_PROVIDERS, ɵKeyEventsPlugin, ɵNAMESPACE_URIS, ɵSharedStylesHost, ɵTRANSITION_ID, ɵangular_packages_platform_browser_platform_browser_a, ɵangular_packages_platform_browser_platform_browser_b, ɵangular_packages_platform_browser_platform_browser_c, ɵangular_packages_platform_browser_platform_browser_d, ɵangular_packages_platform_browser_platform_browser_e, ɵangular_packages_platform_browser_platform_browser_f, ɵangular_packages_platform_browser_platform_browser_g, ɵangular_packages_platform_browser_platform_browser_h, ɵangular_packages_platform_browser_platform_browser_i, ɵangular_packages_platform_browser_platform_browser_j, ɵangular_packages_platform_browser_platform_browser_k, ɵangular_packages_platform_browser_platform_browser_l, ɵangular_packages_platform_browser_platform_browser_m, ɵangular_packages_platform_browser_platform_browser_n, ɵangular_packages_platform_browser_platform_browser_o, ɵescapeHtml, ɵflattenStyles, ɵinitDomAdapter, ɵshimContentAttribute, ɵshimHostAttribute */

    /***/
    function jhN1(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BrowserModule", function () {
        return BrowserModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BrowserTransferStateModule", function () {
        return BrowserTransferStateModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "By", function () {
        return By;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DomSanitizer", function () {
        return DomSanitizer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "EVENT_MANAGER_PLUGINS", function () {
        return EVENT_MANAGER_PLUGINS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "EventManager", function () {
        return EventManager;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HAMMER_GESTURE_CONFIG", function () {
        return HAMMER_GESTURE_CONFIG;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HAMMER_LOADER", function () {
        return HAMMER_LOADER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HammerGestureConfig", function () {
        return HammerGestureConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HammerModule", function () {
        return HammerModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Meta", function () {
        return Meta;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Title", function () {
        return Title;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TransferState", function () {
        return TransferState;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "VERSION", function () {
        return VERSION;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "disableDebugTools", function () {
        return disableDebugTools;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "enableDebugTools", function () {
        return enableDebugTools;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "makeStateKey", function () {
        return makeStateKey;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "platformBrowser", function () {
        return platformBrowser;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵBROWSER_SANITIZATION_PROVIDERS", function () {
        return BROWSER_SANITIZATION_PROVIDERS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵBROWSER_SANITIZATION_PROVIDERS__POST_R3__", function () {
        return BROWSER_SANITIZATION_PROVIDERS__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵBrowserDomAdapter", function () {
        return BrowserDomAdapter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵBrowserGetTestability", function () {
        return BrowserGetTestability;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵDomEventsPlugin", function () {
        return DomEventsPlugin;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵDomRendererFactory2", function () {
        return DomRendererFactory2;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵDomSanitizerImpl", function () {
        return DomSanitizerImpl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵDomSharedStylesHost", function () {
        return DomSharedStylesHost;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵELEMENT_PROBE_PROVIDERS", function () {
        return ELEMENT_PROBE_PROVIDERS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵELEMENT_PROBE_PROVIDERS__POST_R3__", function () {
        return ELEMENT_PROBE_PROVIDERS__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵHAMMER_PROVIDERS__POST_R3__", function () {
        return HAMMER_PROVIDERS__POST_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵHammerGesturesPlugin", function () {
        return HammerGesturesPlugin;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵINTERNAL_BROWSER_PLATFORM_PROVIDERS", function () {
        return INTERNAL_BROWSER_PLATFORM_PROVIDERS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵKeyEventsPlugin", function () {
        return KeyEventsPlugin;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵNAMESPACE_URIS", function () {
        return NAMESPACE_URIS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵSharedStylesHost", function () {
        return SharedStylesHost;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵTRANSITION_ID", function () {
        return TRANSITION_ID;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_a", function () {
        return errorHandler;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_b", function () {
        return _document;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_c", function () {
        return BROWSER_MODULE_PROVIDERS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_d", function () {
        return createMeta;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_e", function () {
        return createTitle;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_f", function () {
        return initTransferState;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_g", function () {
        return EventManagerPlugin;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_h", function () {
        return HAMMER_PROVIDERS__PRE_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_i", function () {
        return HAMMER_PROVIDERS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_j", function () {
        return domSanitizerImplFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_k", function () {
        return appInitializerFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_l", function () {
        return SERVER_TRANSITION_PROVIDERS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_m", function () {
        return _createNgProbeR2;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_n", function () {
        return ELEMENT_PROBE_PROVIDERS__PRE_R3__;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_platform_browser_platform_browser_o", function () {
        return GenericBrowserDomAdapter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵescapeHtml", function () {
        return escapeHtml;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵflattenStyles", function () {
        return flattenStyles;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵinitDomAdapter", function () {
        return initDomAdapter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵshimContentAttribute", function () {
        return shimContentAttribute;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵshimHostAttribute", function () {
        return shimHostAttribute;
      });
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "ɵgetDOM", function () {
        return _angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"];
      });
      /**
       * @license Angular v12.0.0-next.1
       * (c) 2010-2020 Google LLC. https://angular.io/
       * License: MIT
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Provides DOM operations in any browser environment.
       *
       * @security Tread carefully! Interacting with the DOM directly is dangerous and
       * can introduce XSS risks.
       */


      var GenericBrowserDomAdapter = /*#__PURE__*/function (_angular_common__WEBP) {
        _inherits2(GenericBrowserDomAdapter, _angular_common__WEBP);

        var _super330 = _createSuper(GenericBrowserDomAdapter);

        function GenericBrowserDomAdapter() {
          _classCallCheck2(this, GenericBrowserDomAdapter);

          return _super330.call(this);
        }

        _createClass2(GenericBrowserDomAdapter, [{
          key: "supportsDOMEvents",
          value: function supportsDOMEvents() {
            return true;
          }
        }]);

        return GenericBrowserDomAdapter;
      }(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵDomAdapter"]);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ɵ0 = function ɵ0() {
        if (_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵglobal"]['Node']) {
          return _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵglobal"]['Node'].prototype.contains || function (node) {
            return !!(this.compareDocumentPosition(node) & 16);
          };
        }

        return undefined;
      };

      var nodeContains = ɵ0();
      /**
       * A `DomAdapter` powered by full browser DOM APIs.
       *
       * @security Tread carefully! Interacting with the DOM directly is dangerous and
       * can introduce XSS risks.
       */

      /* tslint:disable:requireParameterType no-console */

      var BrowserDomAdapter = /*#__PURE__*/function (_GenericBrowserDomAda) {
        _inherits2(BrowserDomAdapter, _GenericBrowserDomAda);

        var _super331 = _createSuper(BrowserDomAdapter);

        function BrowserDomAdapter() {
          _classCallCheck2(this, BrowserDomAdapter);

          return _super331.apply(this, arguments);
        }

        _createClass2(BrowserDomAdapter, [{
          key: "getProperty",
          value: function getProperty(el, name) {
            return el[name];
          }
        }, {
          key: "log",
          value: function log(error) {
            if (window.console) {
              window.console.log && window.console.log(error);
            }
          }
        }, {
          key: "logGroup",
          value: function logGroup(error) {
            if (window.console) {
              window.console.group && window.console.group(error);
            }
          }
        }, {
          key: "logGroupEnd",
          value: function logGroupEnd() {
            if (window.console) {
              window.console.groupEnd && window.console.groupEnd();
            }
          }
        }, {
          key: "onAndCancel",
          value: function onAndCancel(el, evt, listener) {
            el.addEventListener(evt, listener, false); // Needed to follow Dart's subscription semantic, until fix of
            // https://code.google.com/p/dart/issues/detail?id=17406

            return function () {
              el.removeEventListener(evt, listener, false);
            };
          }
        }, {
          key: "dispatchEvent",
          value: function dispatchEvent(el, evt) {
            el.dispatchEvent(evt);
          }
        }, {
          key: "remove",
          value: function remove(node) {
            if (node.parentNode) {
              node.parentNode.removeChild(node);
            }

            return node;
          }
        }, {
          key: "getValue",
          value: function getValue(el) {
            return el.value;
          }
        }, {
          key: "createElement",
          value: function createElement(tagName, doc) {
            doc = doc || this.getDefaultDocument();
            return doc.createElement(tagName);
          }
        }, {
          key: "createHtmlDocument",
          value: function createHtmlDocument() {
            return document.implementation.createHTMLDocument('fakeTitle');
          }
        }, {
          key: "getDefaultDocument",
          value: function getDefaultDocument() {
            return document;
          }
        }, {
          key: "isElementNode",
          value: function isElementNode(node) {
            return node.nodeType === Node.ELEMENT_NODE;
          }
        }, {
          key: "isShadowRoot",
          value: function isShadowRoot(node) {
            return node instanceof DocumentFragment;
          }
        }, {
          key: "getGlobalEventTarget",
          value: function getGlobalEventTarget(doc, target) {
            if (target === 'window') {
              return window;
            }

            if (target === 'document') {
              return doc;
            }

            if (target === 'body') {
              return doc.body;
            }

            return null;
          }
        }, {
          key: "getHistory",
          value: function getHistory() {
            return window.history;
          }
        }, {
          key: "getLocation",
          value: function getLocation() {
            return window.location;
          }
        }, {
          key: "getBaseHref",
          value: function getBaseHref(doc) {
            var href = getBaseElementHref();
            return href == null ? null : relativePath(href);
          }
        }, {
          key: "resetBaseElement",
          value: function resetBaseElement() {
            baseElement = null;
          }
        }, {
          key: "getUserAgent",
          value: function getUserAgent() {
            return window.navigator.userAgent;
          }
        }, {
          key: "performanceNow",
          value: function performanceNow() {
            // performance.now() is not available in all browsers, see
            // https://caniuse.com/high-resolution-time
            return window.performance && window.performance.now ? window.performance.now() : new Date().getTime();
          }
        }, {
          key: "supportsCookies",
          value: function supportsCookies() {
            return true;
          }
        }, {
          key: "getCookie",
          value: function getCookie(name) {
            return Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵparseCookieValue"])(document.cookie, name);
          }
        }], [{
          key: "makeCurrent",
          value: function makeCurrent() {
            Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵsetRootDomAdapter"])(new BrowserDomAdapter());
          }
        }]);

        return BrowserDomAdapter;
      }(GenericBrowserDomAdapter);

      var baseElement = null;

      function getBaseElementHref() {
        if (!baseElement) {
          baseElement = document.querySelector('base');

          if (!baseElement) {
            return null;
          }
        }

        return baseElement.getAttribute('href');
      } // based on urlUtils.js in AngularJS 1


      var urlParsingNode;

      function relativePath(url) {
        if (!urlParsingNode) {
          urlParsingNode = document.createElement('a');
        }

        urlParsingNode.setAttribute('href', url);
        return urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * An id that identifies a particular application being bootstrapped, that should
       * match across the client/server boundary.
       */


      var TRANSITION_ID = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('TRANSITION_ID');

      function appInitializerFactory(transitionId, document, injector) {
        return function () {
          // Wait for all application initializers to be completed before removing the styles set by
          // the server.
          injector.get(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationInitStatus"]).donePromise.then(function () {
            var dom = Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"])();
            var styles = Array.prototype.slice.apply(document.querySelectorAll("style[ng-transition]"));
            styles.filter(function (el) {
              return el.getAttribute('ng-transition') === transitionId;
            }).forEach(function (el) {
              return dom.remove(el);
            });
          });
        };
      }

      var SERVER_TRANSITION_PROVIDERS = [{
        provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_INITIALIZER"],
        useFactory: appInitializerFactory,
        deps: [TRANSITION_ID, _angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]],
        multi: true
      }];
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var BrowserGetTestability = /*#__PURE__*/function () {
        function BrowserGetTestability() {
          _classCallCheck2(this, BrowserGetTestability);
        }

        _createClass2(BrowserGetTestability, [{
          key: "addToWindow",
          value: function addToWindow(registry) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵglobal"]['getAngularTestability'] = function (elem) {
              var findInAncestors = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
              var testability = registry.findTestabilityInTree(elem, findInAncestors);

              if (testability == null) {
                throw new Error('Could not find testability for element.');
              }

              return testability;
            };

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵglobal"]['getAllAngularTestabilities'] = function () {
              return registry.getAllTestabilities();
            };

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵglobal"]['getAllAngularRootElements'] = function () {
              return registry.getAllRootElements();
            };

            var whenAllStable = function whenAllStable(callback
            /** TODO #9100 */
            ) {
              var testabilities = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵglobal"]['getAllAngularTestabilities']();

              var count = testabilities.length;
              var didWork = false;

              var decrement = function decrement(didWork_
              /** TODO #9100 */
              ) {
                didWork = didWork || didWork_;
                count--;

                if (count == 0) {
                  callback(didWork);
                }
              };

              testabilities.forEach(function (testability
              /** TODO #9100 */
              ) {
                testability.whenStable(decrement);
              });
            };

            if (!_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵglobal"]['frameworkStabilizers']) {
              _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵglobal"]['frameworkStabilizers'] = [];
            }

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵglobal"]['frameworkStabilizers'].push(whenAllStable);
          }
        }, {
          key: "findTestabilityInTree",
          value: function findTestabilityInTree(registry, elem, findInAncestors) {
            if (elem == null) {
              return null;
            }

            var t = registry.getTestability(elem);

            if (t != null) {
              return t;
            } else if (!findInAncestors) {
              return null;
            }

            if (Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"])().isShadowRoot(elem)) {
              return this.findTestabilityInTree(registry, elem.host, true);
            }

            return this.findTestabilityInTree(registry, elem.parentElement, true);
          }
        }], [{
          key: "init",
          value: function init() {
            Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["setTestabilityGetter"])(new BrowserGetTestability());
          }
        }]);

        return BrowserGetTestability;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var CAMEL_CASE_REGEXP = /([A-Z])/g;
      var DASH_CASE_REGEXP = /-([a-z])/g;

      function camelCaseToDashCase(input) {
        return input.replace(CAMEL_CASE_REGEXP, function () {
          for (var _len56 = arguments.length, m = new Array(_len56), _key58 = 0; _key58 < _len56; _key58++) {
            m[_key58] = arguments[_key58];
          }

          return '-' + m[1].toLowerCase();
        });
      }

      function dashCaseToCamelCase(input) {
        return input.replace(DASH_CASE_REGEXP, function () {
          for (var _len57 = arguments.length, m = new Array(_len57), _key59 = 0; _key59 < _len57; _key59++) {
            m[_key59] = arguments[_key59];
          }

          return m[1].toUpperCase();
        });
      }
      /**
       * Exports the value under a given `name` in the global property `ng`. For example `ng.probe` if
       * `name` is `'probe'`.
       * @param name Name under which it will be exported. Keep in mind this will be a property of the
       * global `ng` object.
       * @param value The value to export.
       */


      function exportNgVar(name, value) {
        if (typeof COMPILED === 'undefined' || !COMPILED) {
          // Note: we can't export `ng` when using closure enhanced optimization as:
          // - closure declares globals itself for minified names, which sometimes clobber our `ng` global
          // - we can't declare a closure extern as the namespace `ng` is already used within Google
          //   for typings for angularJS (via `goog.provide('ng....')`).
          var ng = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵglobal"]['ng'] = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵglobal"]['ng'] || {};
          ng[name] = value;
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ɵ0$1 = function ɵ0$1() {
        return {
          'ApplicationRef': _angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationRef"],
          'NgZone': _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        };
      };

      var CORE_TOKENS = ɵ0$1();
      var INSPECT_GLOBAL_NAME = 'probe';
      var CORE_TOKENS_GLOBAL_NAME = 'coreTokens';
      /**
       * Returns a {@link DebugElement} for the given native DOM element, or
       * null if the given native element does not have an Angular view associated
       * with it.
       */

      function inspectNativeElementR2(element) {
        return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵgetDebugNodeR2"])(element);
      }

      function _createNgProbeR2(coreTokens) {
        exportNgVar(INSPECT_GLOBAL_NAME, inspectNativeElementR2);
        exportNgVar(CORE_TOKENS_GLOBAL_NAME, Object.assign(Object.assign({}, CORE_TOKENS), _ngProbeTokensToMap(coreTokens || [])));
        return function () {
          return inspectNativeElementR2;
        };
      }

      function _ngProbeTokensToMap(tokens) {
        return tokens.reduce(function (prev, t) {
          return prev[t.name] = t.token, prev;
        }, {});
      }
      /**
       * In Ivy, we don't support NgProbe because we have our own set of testing utilities
       * with more robust functionality.
       *
       * We shouldn't bring in NgProbe because it prevents DebugNode and friends from
       * tree-shaking properly.
       */


      var ELEMENT_PROBE_PROVIDERS__POST_R3__ = [];
      /**
       * Providers which support debugging Angular applications (e.g. via `ng.probe`).
       */

      var ELEMENT_PROBE_PROVIDERS__PRE_R3__ = [{
        provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_INITIALIZER"],
        useFactory: _createNgProbeR2,
        deps: [[_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgProbeToken"], new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]()]],
        multi: true
      }];
      var ELEMENT_PROBE_PROVIDERS = ELEMENT_PROBE_PROVIDERS__POST_R3__;
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * The injection token for the event-manager plug-in service.
       *
       * @publicApi
       */

      var EVENT_MANAGER_PLUGINS = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('EventManagerPlugins');
      /**
       * An injectable service that provides event management for Angular
       * through a browser plug-in.
       *
       * @publicApi
       */

      var EventManager = /*#__PURE__*/function () {
        /**
         * Initializes an instance of the event-manager service.
         */
        function EventManager(plugins, _zone) {
          var _this766 = this;

          _classCallCheck2(this, EventManager);

          this._zone = _zone;
          this._eventNameToPlugin = new Map();
          plugins.forEach(function (p) {
            return p.manager = _this766;
          });
          this._plugins = plugins.slice().reverse();
        }
        /**
         * Registers a handler for a specific element and event.
         *
         * @param element The HTML element to receive event notifications.
         * @param eventName The name of the event to listen for.
         * @param handler A function to call when the notification occurs. Receives the
         * event object as an argument.
         * @returns  A callback function that can be used to remove the handler.
         */


        _createClass2(EventManager, [{
          key: "addEventListener",
          value: function addEventListener(element, eventName, handler) {
            var plugin = this._findPluginFor(eventName);

            return plugin.addEventListener(element, eventName, handler);
          }
          /**
           * Registers a global handler for an event in a target view.
           *
           * @param target A target for global event notifications. One of "window", "document", or "body".
           * @param eventName The name of the event to listen for.
           * @param handler A function to call when the notification occurs. Receives the
           * event object as an argument.
           * @returns A callback function that can be used to remove the handler.
           */

        }, {
          key: "addGlobalEventListener",
          value: function addGlobalEventListener(target, eventName, handler) {
            var plugin = this._findPluginFor(eventName);

            return plugin.addGlobalEventListener(target, eventName, handler);
          }
          /**
           * Retrieves the compilation zone in which event listeners are registered.
           */

        }, {
          key: "getZone",
          value: function getZone() {
            return this._zone;
          }
          /** @internal */

        }, {
          key: "_findPluginFor",
          value: function _findPluginFor(eventName) {
            var plugin = this._eventNameToPlugin.get(eventName);

            if (plugin) {
              return plugin;
            }

            var plugins = this._plugins;

            for (var i = 0; i < plugins.length; i++) {
              var _plugin = plugins[i];

              if (_plugin.supports(eventName)) {
                this._eventNameToPlugin.set(eventName, _plugin);

                return _plugin;
              }
            }

            throw new Error("No event manager plugin found for event ".concat(eventName));
          }
        }]);

        return EventManager;
      }();

      EventManager.ɵfac = function EventManager_Factory(t) {
        return new (t || EventManager)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](EVENT_MANAGER_PLUGINS), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]));
      };

      EventManager.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({
        token: EventManager,
        factory: EventManager.ɵfac
      });

      EventManager.ctorParameters = function () {
        return [{
          type: Array,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [EVENT_MANAGER_PLUGINS]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](EventManager, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
        }], function () {
          return [{
            type: Array,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [EVENT_MANAGER_PLUGINS]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
          }];
        }, null);
      })();

      var EventManagerPlugin = /*#__PURE__*/function () {
        function EventManagerPlugin(_doc) {
          _classCallCheck2(this, EventManagerPlugin);

          this._doc = _doc;
        }

        _createClass2(EventManagerPlugin, [{
          key: "addGlobalEventListener",
          value: function addGlobalEventListener(element, eventName, handler) {
            var target = Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"])().getGlobalEventTarget(this._doc, element);

            if (!target) {
              throw new Error("Unsupported event target ".concat(target, " for event ").concat(eventName));
            }

            return this.addEventListener(target, eventName, handler);
          }
        }]);

        return EventManagerPlugin;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var SharedStylesHost = /*#__PURE__*/function () {
        function SharedStylesHost() {
          _classCallCheck2(this, SharedStylesHost);

          /** @internal */
          this._stylesSet = new Set();
        }

        _createClass2(SharedStylesHost, [{
          key: "addStyles",
          value: function addStyles(styles) {
            var _this767 = this;

            var additions = new Set();
            styles.forEach(function (style) {
              if (!_this767._stylesSet.has(style)) {
                _this767._stylesSet.add(style);

                additions.add(style);
              }
            });
            this.onStylesAdded(additions);
          }
        }, {
          key: "onStylesAdded",
          value: function onStylesAdded(additions) {}
        }, {
          key: "getAllStyles",
          value: function getAllStyles() {
            return Array.from(this._stylesSet);
          }
        }]);

        return SharedStylesHost;
      }();

      SharedStylesHost.ɵfac = function SharedStylesHost_Factory(t) {
        return new (t || SharedStylesHost)();
      };

      SharedStylesHost.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({
        token: SharedStylesHost,
        factory: SharedStylesHost.ɵfac
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](SharedStylesHost, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
        }], function () {
          return [];
        }, null);
      })();

      var DomSharedStylesHost = /*#__PURE__*/function (_SharedStylesHost) {
        _inherits2(DomSharedStylesHost, _SharedStylesHost);

        var _super332 = _createSuper(DomSharedStylesHost);

        function DomSharedStylesHost(_doc) {
          var _this768;

          _classCallCheck2(this, DomSharedStylesHost);

          _this768 = _super332.call(this);
          _this768._doc = _doc;
          _this768._hostNodes = new Set();
          _this768._styleNodes = new Set();

          _this768._hostNodes.add(_doc.head);

          return _this768;
        }

        _createClass2(DomSharedStylesHost, [{
          key: "_addStylesToHost",
          value: function _addStylesToHost(styles, host) {
            var _this769 = this;

            styles.forEach(function (style) {
              var styleEl = _this769._doc.createElement('style');

              styleEl.textContent = style;

              _this769._styleNodes.add(host.appendChild(styleEl));
            });
          }
        }, {
          key: "addHost",
          value: function addHost(hostNode) {
            this._addStylesToHost(this._stylesSet, hostNode);

            this._hostNodes.add(hostNode);
          }
        }, {
          key: "removeHost",
          value: function removeHost(hostNode) {
            this._hostNodes["delete"](hostNode);
          }
        }, {
          key: "onStylesAdded",
          value: function onStylesAdded(additions) {
            var _this770 = this;

            this._hostNodes.forEach(function (hostNode) {
              return _this770._addStylesToHost(additions, hostNode);
            });
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._styleNodes.forEach(function (styleNode) {
              return Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"])().remove(styleNode);
            });
          }
        }]);

        return DomSharedStylesHost;
      }(SharedStylesHost);

      DomSharedStylesHost.ɵfac = function DomSharedStylesHost_Factory(t) {
        return new (t || DomSharedStylesHost)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]));
      };

      DomSharedStylesHost.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({
        token: DomSharedStylesHost,
        factory: DomSharedStylesHost.ɵfac
      });

      DomSharedStylesHost.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](DomSharedStylesHost, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var NAMESPACE_URIS = {
        'svg': 'http://www.w3.org/2000/svg',
        'xhtml': 'http://www.w3.org/1999/xhtml',
        'xlink': 'http://www.w3.org/1999/xlink',
        'xml': 'http://www.w3.org/XML/1998/namespace',
        'xmlns': 'http://www.w3.org/2000/xmlns/'
      };
      var COMPONENT_REGEX = /%COMP%/g;
      var NG_DEV_MODE = typeof ngDevMode === 'undefined' || !!ngDevMode;
      var COMPONENT_VARIABLE = '%COMP%';
      var HOST_ATTR = "_nghost-".concat(COMPONENT_VARIABLE);
      var CONTENT_ATTR = "_ngcontent-".concat(COMPONENT_VARIABLE);

      function shimContentAttribute(componentShortId) {
        return CONTENT_ATTR.replace(COMPONENT_REGEX, componentShortId);
      }

      function shimHostAttribute(componentShortId) {
        return HOST_ATTR.replace(COMPONENT_REGEX, componentShortId);
      }

      function flattenStyles(compId, styles, target) {
        for (var i = 0; i < styles.length; i++) {
          var style = styles[i];

          if (Array.isArray(style)) {
            flattenStyles(compId, style, target);
          } else {
            style = style.replace(COMPONENT_REGEX, compId);
            target.push(style);
          }
        }

        return target;
      }

      function decoratePreventDefault(eventHandler) {
        // `DebugNode.triggerEventHandler` needs to know if the listener was created with
        // decoratePreventDefault or is a listener added outside the Angular context so it can handle the
        // two differently. In the first case, the special '__ngUnwrap__' token is passed to the unwrap
        // the listener (see below).
        return function (event) {
          // Ivy uses '__ngUnwrap__' as a special token that allows us to unwrap the function
          // so that it can be invoked programmatically by `DebugNode.triggerEventHandler`. The debug_node
          // can inspect the listener toString contents for the existence of this special token. Because
          // the token is a string literal, it is ensured to not be modified by compiled code.
          if (event === '__ngUnwrap__') {
            return eventHandler;
          }

          var allowDefaultBehavior = eventHandler(event);

          if (allowDefaultBehavior === false) {
            // TODO(tbosch): move preventDefault into event plugins...
            event.preventDefault();
            event.returnValue = false;
          }

          return undefined;
        };
      }

      var hasLoggedNativeEncapsulationWarning = false;

      var DomRendererFactory2 = /*#__PURE__*/function () {
        function DomRendererFactory2(eventManager, sharedStylesHost, appId) {
          _classCallCheck2(this, DomRendererFactory2);

          this.eventManager = eventManager;
          this.sharedStylesHost = sharedStylesHost;
          this.appId = appId;
          this.rendererByCompId = new Map();
          this.defaultRenderer = new DefaultDomRenderer2(eventManager);
        }

        _createClass2(DomRendererFactory2, [{
          key: "createRenderer",
          value: function createRenderer(element, type) {
            if (!element || !type) {
              return this.defaultRenderer;
            }

            switch (type.encapsulation) {
              case _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewEncapsulation"].Emulated:
                {
                  var renderer = this.rendererByCompId.get(type.id);

                  if (!renderer) {
                    renderer = new EmulatedEncapsulationDomRenderer2(this.eventManager, this.sharedStylesHost, type, this.appId);
                    this.rendererByCompId.set(type.id, renderer);
                  }

                  renderer.applyToHost(element);
                  return renderer;
                }

              case 1:
              case _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewEncapsulation"].ShadowDom:
                // TODO(FW-2290): remove the `case 1:` fallback logic and the warning in v12.
                if ((typeof ngDevMode === 'undefined' || ngDevMode) && !hasLoggedNativeEncapsulationWarning && type.encapsulation === 1) {
                  hasLoggedNativeEncapsulationWarning = true;
                  console.warn('ViewEncapsulation.Native is no longer supported. Falling back to ViewEncapsulation.ShadowDom. The fallback will be removed in v12.');
                }

                return new ShadowDomRenderer(this.eventManager, this.sharedStylesHost, element, type);

              default:
                {
                  if (!this.rendererByCompId.has(type.id)) {
                    var styles = flattenStyles(type.id, type.styles, []);
                    this.sharedStylesHost.addStyles(styles);
                    this.rendererByCompId.set(type.id, this.defaultRenderer);
                  }

                  return this.defaultRenderer;
                }
            }
          }
        }, {
          key: "begin",
          value: function begin() {}
        }, {
          key: "end",
          value: function end() {}
        }]);

        return DomRendererFactory2;
      }();

      DomRendererFactory2.ɵfac = function DomRendererFactory2_Factory(t) {
        return new (t || DomRendererFactory2)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](EventManager), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](DomSharedStylesHost), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_ID"]));
      };

      DomRendererFactory2.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({
        token: DomRendererFactory2,
        factory: DomRendererFactory2.ɵfac
      });

      DomRendererFactory2.ctorParameters = function () {
        return [{
          type: EventManager
        }, {
          type: DomSharedStylesHost
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_ID"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](DomRendererFactory2, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
        }], function () {
          return [{
            type: EventManager
          }, {
            type: DomSharedStylesHost
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_ID"]]
            }]
          }];
        }, null);
      })();

      var DefaultDomRenderer2 = /*#__PURE__*/function () {
        function DefaultDomRenderer2(eventManager) {
          _classCallCheck2(this, DefaultDomRenderer2);

          this.eventManager = eventManager;
          this.data = Object.create(null);
        }

        _createClass2(DefaultDomRenderer2, [{
          key: "destroy",
          value: function destroy() {}
        }, {
          key: "createElement",
          value: function createElement(name, namespace) {
            if (namespace) {
              // In cases where Ivy (not ViewEngine) is giving us the actual namespace, the look up by key
              // will result in undefined, so we just return the namespace here.
              return document.createElementNS(NAMESPACE_URIS[namespace] || namespace, name);
            }

            return document.createElement(name);
          }
        }, {
          key: "createComment",
          value: function createComment(value) {
            return document.createComment(value);
          }
        }, {
          key: "createText",
          value: function createText(value) {
            return document.createTextNode(value);
          }
        }, {
          key: "appendChild",
          value: function appendChild(parent, newChild) {
            parent.appendChild(newChild);
          }
        }, {
          key: "insertBefore",
          value: function insertBefore(parent, newChild, refChild) {
            if (parent) {
              parent.insertBefore(newChild, refChild);
            }
          }
        }, {
          key: "removeChild",
          value: function removeChild(parent, oldChild) {
            if (parent) {
              parent.removeChild(oldChild);
            }
          }
        }, {
          key: "selectRootElement",
          value: function selectRootElement(selectorOrNode, preserveContent) {
            var el = typeof selectorOrNode === 'string' ? document.querySelector(selectorOrNode) : selectorOrNode;

            if (!el) {
              throw new Error("The selector \"".concat(selectorOrNode, "\" did not match any elements"));
            }

            if (!preserveContent) {
              el.textContent = '';
            }

            return el;
          }
        }, {
          key: "parentNode",
          value: function parentNode(node) {
            return node.parentNode;
          }
        }, {
          key: "nextSibling",
          value: function nextSibling(node) {
            return node.nextSibling;
          }
        }, {
          key: "setAttribute",
          value: function setAttribute(el, name, value, namespace) {
            if (namespace) {
              name = namespace + ':' + name; // TODO(FW-811): Ivy may cause issues here because it's passing around
              // full URIs for namespaces, therefore this lookup will fail.

              var namespaceUri = NAMESPACE_URIS[namespace];

              if (namespaceUri) {
                el.setAttributeNS(namespaceUri, name, value);
              } else {
                el.setAttribute(name, value);
              }
            } else {
              el.setAttribute(name, value);
            }
          }
        }, {
          key: "removeAttribute",
          value: function removeAttribute(el, name, namespace) {
            if (namespace) {
              // TODO(FW-811): Ivy may cause issues here because it's passing around
              // full URIs for namespaces, therefore this lookup will fail.
              var namespaceUri = NAMESPACE_URIS[namespace];

              if (namespaceUri) {
                el.removeAttributeNS(namespaceUri, name);
              } else {
                // TODO(FW-811): Since ivy is passing around full URIs for namespaces
                // this could result in properties like `http://www.w3.org/2000/svg:cx="123"`,
                // which is wrong.
                el.removeAttribute("".concat(namespace, ":").concat(name));
              }
            } else {
              el.removeAttribute(name);
            }
          }
        }, {
          key: "addClass",
          value: function addClass(el, name) {
            el.classList.add(name);
          }
        }, {
          key: "removeClass",
          value: function removeClass(el, name) {
            el.classList.remove(name);
          }
        }, {
          key: "setStyle",
          value: function setStyle(el, style, value, flags) {
            if (flags & (_angular_core__WEBPACK_IMPORTED_MODULE_1__["RendererStyleFlags2"].DashCase | _angular_core__WEBPACK_IMPORTED_MODULE_1__["RendererStyleFlags2"].Important)) {
              el.style.setProperty(style, value, flags & _angular_core__WEBPACK_IMPORTED_MODULE_1__["RendererStyleFlags2"].Important ? 'important' : '');
            } else {
              el.style[style] = value;
            }
          }
        }, {
          key: "removeStyle",
          value: function removeStyle(el, style, flags) {
            if (flags & _angular_core__WEBPACK_IMPORTED_MODULE_1__["RendererStyleFlags2"].DashCase) {
              el.style.removeProperty(style);
            } else {
              // IE requires '' instead of null
              // see https://github.com/angular/angular/issues/7916
              el.style[style] = '';
            }
          }
        }, {
          key: "setProperty",
          value: function setProperty(el, name, value) {
            NG_DEV_MODE && checkNoSyntheticProp(name, 'property');
            el[name] = value;
          }
        }, {
          key: "setValue",
          value: function setValue(node, value) {
            node.nodeValue = value;
          }
        }, {
          key: "listen",
          value: function listen(target, event, callback) {
            NG_DEV_MODE && checkNoSyntheticProp(event, 'listener');

            if (typeof target === 'string') {
              return this.eventManager.addGlobalEventListener(target, event, decoratePreventDefault(callback));
            }

            return this.eventManager.addEventListener(target, event, decoratePreventDefault(callback));
          }
        }]);

        return DefaultDomRenderer2;
      }();

      var ɵ0$2 = function ɵ0$2() {
        return '@'.charCodeAt(0);
      };

      var AT_CHARCODE = ɵ0$2();

      function checkNoSyntheticProp(name, nameKind) {
        if (name.charCodeAt(0) === AT_CHARCODE) {
          throw new Error("Found the synthetic ".concat(nameKind, " ").concat(name, ". Please include either \"BrowserAnimationsModule\" or \"NoopAnimationsModule\" in your application."));
        }
      }

      var EmulatedEncapsulationDomRenderer2 = /*#__PURE__*/function (_DefaultDomRenderer) {
        _inherits2(EmulatedEncapsulationDomRenderer2, _DefaultDomRenderer);

        var _super333 = _createSuper(EmulatedEncapsulationDomRenderer2);

        function EmulatedEncapsulationDomRenderer2(eventManager, sharedStylesHost, component, appId) {
          var _this771;

          _classCallCheck2(this, EmulatedEncapsulationDomRenderer2);

          _this771 = _super333.call(this, eventManager);
          _this771.component = component;
          var styles = flattenStyles(appId + '-' + component.id, component.styles, []);
          sharedStylesHost.addStyles(styles);
          _this771.contentAttr = shimContentAttribute(appId + '-' + component.id);
          _this771.hostAttr = shimHostAttribute(appId + '-' + component.id);
          return _this771;
        }

        _createClass2(EmulatedEncapsulationDomRenderer2, [{
          key: "applyToHost",
          value: function applyToHost(element) {
            _get2(_getPrototypeOf2(EmulatedEncapsulationDomRenderer2.prototype), "setAttribute", this).call(this, element, this.hostAttr, '');
          }
        }, {
          key: "createElement",
          value: function createElement(parent, name) {
            var el = _get2(_getPrototypeOf2(EmulatedEncapsulationDomRenderer2.prototype), "createElement", this).call(this, parent, name);

            _get2(_getPrototypeOf2(EmulatedEncapsulationDomRenderer2.prototype), "setAttribute", this).call(this, el, this.contentAttr, '');

            return el;
          }
        }]);

        return EmulatedEncapsulationDomRenderer2;
      }(DefaultDomRenderer2);

      var ShadowDomRenderer = /*#__PURE__*/function (_DefaultDomRenderer2) {
        _inherits2(ShadowDomRenderer, _DefaultDomRenderer2);

        var _super334 = _createSuper(ShadowDomRenderer);

        function ShadowDomRenderer(eventManager, sharedStylesHost, hostEl, component) {
          var _this772;

          _classCallCheck2(this, ShadowDomRenderer);

          _this772 = _super334.call(this, eventManager);
          _this772.sharedStylesHost = sharedStylesHost;
          _this772.hostEl = hostEl;
          _this772.shadowRoot = hostEl.attachShadow({
            mode: 'open'
          });

          _this772.sharedStylesHost.addHost(_this772.shadowRoot);

          var styles = flattenStyles(component.id, component.styles, []);

          for (var i = 0; i < styles.length; i++) {
            var styleEl = document.createElement('style');
            styleEl.textContent = styles[i];

            _this772.shadowRoot.appendChild(styleEl);
          }

          return _this772;
        }

        _createClass2(ShadowDomRenderer, [{
          key: "nodeOrShadowRoot",
          value: function nodeOrShadowRoot(node) {
            return node === this.hostEl ? this.shadowRoot : node;
          }
        }, {
          key: "destroy",
          value: function destroy() {
            this.sharedStylesHost.removeHost(this.shadowRoot);
          }
        }, {
          key: "appendChild",
          value: function appendChild(parent, newChild) {
            return _get2(_getPrototypeOf2(ShadowDomRenderer.prototype), "appendChild", this).call(this, this.nodeOrShadowRoot(parent), newChild);
          }
        }, {
          key: "insertBefore",
          value: function insertBefore(parent, newChild, refChild) {
            return _get2(_getPrototypeOf2(ShadowDomRenderer.prototype), "insertBefore", this).call(this, this.nodeOrShadowRoot(parent), newChild, refChild);
          }
        }, {
          key: "removeChild",
          value: function removeChild(parent, oldChild) {
            return _get2(_getPrototypeOf2(ShadowDomRenderer.prototype), "removeChild", this).call(this, this.nodeOrShadowRoot(parent), oldChild);
          }
        }, {
          key: "parentNode",
          value: function parentNode(node) {
            return this.nodeOrShadowRoot(_get2(_getPrototypeOf2(ShadowDomRenderer.prototype), "parentNode", this).call(this, this.nodeOrShadowRoot(node)));
          }
        }]);

        return ShadowDomRenderer;
      }(DefaultDomRenderer2);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var DomEventsPlugin = /*#__PURE__*/function (_EventManagerPlugin) {
        _inherits2(DomEventsPlugin, _EventManagerPlugin);

        var _super335 = _createSuper(DomEventsPlugin);

        function DomEventsPlugin(doc) {
          _classCallCheck2(this, DomEventsPlugin);

          return _super335.call(this, doc);
        } // This plugin should come last in the list of plugins, because it accepts all
        // events.


        _createClass2(DomEventsPlugin, [{
          key: "supports",
          value: function supports(eventName) {
            return true;
          }
        }, {
          key: "addEventListener",
          value: function addEventListener(element, eventName, handler) {
            var _this773 = this;

            element.addEventListener(eventName, handler, false);
            return function () {
              return _this773.removeEventListener(element, eventName, handler);
            };
          }
        }, {
          key: "removeEventListener",
          value: function removeEventListener(target, eventName, callback) {
            return target.removeEventListener(eventName, callback);
          }
        }]);

        return DomEventsPlugin;
      }(EventManagerPlugin);

      DomEventsPlugin.ɵfac = function DomEventsPlugin_Factory(t) {
        return new (t || DomEventsPlugin)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]));
      };

      DomEventsPlugin.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({
        token: DomEventsPlugin,
        factory: DomEventsPlugin.ɵfac
      });

      DomEventsPlugin.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](DomEventsPlugin, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Supported HammerJS recognizer event names.
       */


      var EVENT_NAMES = {
        // pan
        'pan': true,
        'panstart': true,
        'panmove': true,
        'panend': true,
        'pancancel': true,
        'panleft': true,
        'panright': true,
        'panup': true,
        'pandown': true,
        // pinch
        'pinch': true,
        'pinchstart': true,
        'pinchmove': true,
        'pinchend': true,
        'pinchcancel': true,
        'pinchin': true,
        'pinchout': true,
        // press
        'press': true,
        'pressup': true,
        // rotate
        'rotate': true,
        'rotatestart': true,
        'rotatemove': true,
        'rotateend': true,
        'rotatecancel': true,
        // swipe
        'swipe': true,
        'swipeleft': true,
        'swiperight': true,
        'swipeup': true,
        'swipedown': true,
        // tap
        'tap': true,
        'doubletap': true
      };
      /**
       * DI token for providing [HammerJS](https://hammerjs.github.io/) support to Angular.
       * @see `HammerGestureConfig`
       *
       * @ngModule HammerModule
       * @publicApi
       */

      var HAMMER_GESTURE_CONFIG = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('HammerGestureConfig');
      /**
       * Injection token used to provide a {@link HammerLoader} to Angular.
       *
       * @publicApi
       */

      var HAMMER_LOADER = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('HammerLoader');
      /**
       * An injectable [HammerJS Manager](https://hammerjs.github.io/api/#hammermanager)
       * for gesture recognition. Configures specific event recognition.
       * @publicApi
       */

      var HammerGestureConfig = /*#__PURE__*/function () {
        function HammerGestureConfig() {
          _classCallCheck2(this, HammerGestureConfig);

          /**
           * A set of supported event names for gestures to be used in Angular.
           * Angular supports all built-in recognizers, as listed in
           * [HammerJS documentation](https://hammerjs.github.io/).
           */
          this.events = [];
          /**
           * Maps gesture event names to a set of configuration options
           * that specify overrides to the default values for specific properties.
           *
           * The key is a supported event name to be configured,
           * and the options object contains a set of properties, with override values
           * to be applied to the named recognizer event.
           * For example, to disable recognition of the rotate event, specify
           *  `{"rotate": {"enable": false}}`.
           *
           * Properties that are not present take the HammerJS default values.
           * For information about which properties are supported for which events,
           * and their allowed and default values, see
           * [HammerJS documentation](https://hammerjs.github.io/).
           *
           */

          this.overrides = {};
        }
        /**
         * Creates a [HammerJS Manager](https://hammerjs.github.io/api/#hammermanager)
         * and attaches it to a given HTML element.
         * @param element The element that will recognize gestures.
         * @returns A HammerJS event-manager object.
         */


        _createClass2(HammerGestureConfig, [{
          key: "buildHammer",
          value: function buildHammer(element) {
            var mc = new Hammer(element, this.options);
            mc.get('pinch').set({
              enable: true
            });
            mc.get('rotate').set({
              enable: true
            });

            for (var eventName in this.overrides) {
              mc.get(eventName).set(this.overrides[eventName]);
            }

            return mc;
          }
        }]);

        return HammerGestureConfig;
      }();

      HammerGestureConfig.ɵfac = function HammerGestureConfig_Factory(t) {
        return new (t || HammerGestureConfig)();
      };

      HammerGestureConfig.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({
        token: HammerGestureConfig,
        factory: HammerGestureConfig.ɵfac
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](HammerGestureConfig, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
        }], function () {
          return [];
        }, null);
      })();
      /**
       * Event plugin that adds Hammer support to an application.
       *
       * @ngModule HammerModule
       */


      var HammerGesturesPlugin = /*#__PURE__*/function (_EventManagerPlugin2) {
        _inherits2(HammerGesturesPlugin, _EventManagerPlugin2);

        var _super336 = _createSuper(HammerGesturesPlugin);

        function HammerGesturesPlugin(doc, _config, console, loader) {
          var _this774;

          _classCallCheck2(this, HammerGesturesPlugin);

          _this774 = _super336.call(this, doc);
          _this774._config = _config;
          _this774.console = console;
          _this774.loader = loader;
          return _this774;
        }

        _createClass2(HammerGesturesPlugin, [{
          key: "supports",
          value: function supports(eventName) {
            if (!EVENT_NAMES.hasOwnProperty(eventName.toLowerCase()) && !this.isCustomEvent(eventName)) {
              return false;
            }

            if (!window.Hammer && !this.loader) {
              this.console.warn("The \"".concat(eventName, "\" event cannot be bound because Hammer.JS is not ") + "loaded and no custom loader has been specified.");
              return false;
            }

            return true;
          }
        }, {
          key: "addEventListener",
          value: function addEventListener(element, eventName, handler) {
            var _this775 = this;

            var zone = this.manager.getZone();
            eventName = eventName.toLowerCase(); // If Hammer is not present but a loader is specified, we defer adding the event listener
            // until Hammer is loaded.

            if (!window.Hammer && this.loader) {
              // This `addEventListener` method returns a function to remove the added listener.
              // Until Hammer is loaded, the returned function needs to *cancel* the registration rather
              // than remove anything.
              var cancelRegistration = false;

              var deregister = function deregister() {
                cancelRegistration = true;
              };

              this.loader().then(function () {
                // If Hammer isn't actually loaded when the custom loader resolves, give up.
                if (!window.Hammer) {
                  _this775.console.warn("The custom HAMMER_LOADER completed, but Hammer.JS is not present.");

                  deregister = function deregister() {};

                  return;
                }

                if (!cancelRegistration) {
                  // Now that Hammer is loaded and the listener is being loaded for real,
                  // the deregistration function changes from canceling registration to removal.
                  deregister = _this775.addEventListener(element, eventName, handler);
                }
              })["catch"](function () {
                _this775.console.warn("The \"".concat(eventName, "\" event cannot be bound because the custom ") + "Hammer.JS loader failed.");

                deregister = function deregister() {};
              }); // Return a function that *executes* `deregister` (and not `deregister` itself) so that we
              // can change the behavior of `deregister` once the listener is added. Using a closure in
              // this way allows us to avoid any additional data structures to track listener removal.

              return function () {
                deregister();
              };
            }

            return zone.runOutsideAngular(function () {
              // Creating the manager bind events, must be done outside of angular
              var mc = _this775._config.buildHammer(element);

              var callback = function callback(eventObj) {
                zone.runGuarded(function () {
                  handler(eventObj);
                });
              };

              mc.on(eventName, callback);
              return function () {
                mc.off(eventName, callback); // destroy mc to prevent memory leak

                if (typeof mc.destroy === 'function') {
                  mc.destroy();
                }
              };
            });
          }
        }, {
          key: "isCustomEvent",
          value: function isCustomEvent(eventName) {
            return this._config.events.indexOf(eventName) > -1;
          }
        }]);

        return HammerGesturesPlugin;
      }(EventManagerPlugin);

      HammerGesturesPlugin.ɵfac = function HammerGesturesPlugin_Factory(t) {
        return new (t || HammerGesturesPlugin)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](HAMMER_GESTURE_CONFIG), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵConsole"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](HAMMER_LOADER, 8));
      };

      HammerGesturesPlugin.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({
        token: HammerGesturesPlugin,
        factory: HammerGesturesPlugin.ɵfac
      });

      HammerGesturesPlugin.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
          }]
        }, {
          type: HammerGestureConfig,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [HAMMER_GESTURE_CONFIG]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵConsole"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [HAMMER_LOADER]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](HammerGesturesPlugin, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
            }]
          }, {
            type: HammerGestureConfig,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [HAMMER_GESTURE_CONFIG]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵConsole"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [HAMMER_LOADER]
            }]
          }];
        }, null);
      })();
      /**
       * In Ivy, support for Hammer gestures is optional, so applications must
       * import the `HammerModule` at root to turn on support. This means that
       * Hammer-specific code can be tree-shaken away if not needed.
       */


      var HAMMER_PROVIDERS__POST_R3__ = [];
      /**
       * In View Engine, support for Hammer gestures is built-in by default.
       */

      var HAMMER_PROVIDERS__PRE_R3__ = [{
        provide: EVENT_MANAGER_PLUGINS,
        useClass: HammerGesturesPlugin,
        multi: true,
        deps: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"], HAMMER_GESTURE_CONFIG, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵConsole"], [new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"](), HAMMER_LOADER]]
      }, {
        provide: HAMMER_GESTURE_CONFIG,
        useClass: HammerGestureConfig,
        deps: []
      }];
      var HAMMER_PROVIDERS = HAMMER_PROVIDERS__POST_R3__;
      /**
       * Adds support for HammerJS.
       *
       * Import this module at the root of your application so that Angular can work with
       * HammerJS to detect gesture events.
       *
       * Note that applications still need to include the HammerJS script itself. This module
       * simply sets up the coordination layer between HammerJS and Angular's EventManager.
       *
       * @publicApi
       */

      var HammerModule = function HammerModule() {
        _classCallCheck2(this, HammerModule);
      };

      HammerModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({
        type: HammerModule
      });
      HammerModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({
        factory: function HammerModule_Factory(t) {
          return new (t || HammerModule)();
        },
        providers: HAMMER_PROVIDERS__PRE_R3__
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](HammerModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
          args: [{
            providers: HAMMER_PROVIDERS__PRE_R3__
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Defines supported modifiers for key events.
       */


      var MODIFIER_KEYS = ['alt', 'control', 'meta', 'shift'];
      var DOM_KEY_LOCATION_NUMPAD = 3; // Map to convert some key or keyIdentifier values to what will be returned by getEventKey

      var _keyMap = {
        // The following values are here for cross-browser compatibility and to match the W3C standard
        // cf https://www.w3.org/TR/DOM-Level-3-Events-key/
        '\b': 'Backspace',
        '\t': 'Tab',
        '\x7F': 'Delete',
        '\x1B': 'Escape',
        'Del': 'Delete',
        'Esc': 'Escape',
        'Left': 'ArrowLeft',
        'Right': 'ArrowRight',
        'Up': 'ArrowUp',
        'Down': 'ArrowDown',
        'Menu': 'ContextMenu',
        'Scroll': 'ScrollLock',
        'Win': 'OS'
      }; // There is a bug in Chrome for numeric keypad keys:
      // https://code.google.com/p/chromium/issues/detail?id=155654
      // 1, 2, 3 ... are reported as A, B, C ...

      var _chromeNumKeyPadMap = {
        'A': '1',
        'B': '2',
        'C': '3',
        'D': '4',
        'E': '5',
        'F': '6',
        'G': '7',
        'H': '8',
        'I': '9',
        'J': '*',
        'K': '+',
        'M': '-',
        'N': '.',
        'O': '/',
        '\x60': '0',
        '\x90': 'NumLock'
      };

      var ɵ0$3 = function ɵ0$3(event) {
        return event.altKey;
      },
          ɵ1 = function ɵ1(event) {
        return event.ctrlKey;
      },
          ɵ2 = function ɵ2(event) {
        return event.metaKey;
      },
          ɵ3 = function ɵ3(event) {
        return event.shiftKey;
      };
      /**
       * Retrieves modifiers from key-event objects.
       */


      var MODIFIER_KEY_GETTERS = {
        'alt': ɵ0$3,
        'control': ɵ1,
        'meta': ɵ2,
        'shift': ɵ3
      };
      /**
       * @publicApi
       * A browser plug-in that provides support for handling of key events in Angular.
       */

      var KeyEventsPlugin = /*#__PURE__*/function (_EventManagerPlugin3) {
        _inherits2(KeyEventsPlugin, _EventManagerPlugin3);

        var _super337 = _createSuper(KeyEventsPlugin);

        /**
         * Initializes an instance of the browser plug-in.
         * @param doc The document in which key events will be detected.
         */
        function KeyEventsPlugin(doc) {
          _classCallCheck2(this, KeyEventsPlugin);

          return _super337.call(this, doc);
        }
        /**
         * Reports whether a named key event is supported.
         * @param eventName The event name to query.
         * @return True if the named key event is supported.
         */


        _createClass2(KeyEventsPlugin, [{
          key: "supports",
          value: function supports(eventName) {
            return KeyEventsPlugin.parseEventName(eventName) != null;
          }
          /**
           * Registers a handler for a specific element and key event.
           * @param element The HTML element to receive event notifications.
           * @param eventName The name of the key event to listen for.
           * @param handler A function to call when the notification occurs. Receives the
           * event object as an argument.
           * @returns The key event that was registered.
           */

        }, {
          key: "addEventListener",
          value: function addEventListener(element, eventName, handler) {
            var parsedEvent = KeyEventsPlugin.parseEventName(eventName);
            var outsideHandler = KeyEventsPlugin.eventCallback(parsedEvent['fullKey'], handler, this.manager.getZone());
            return this.manager.getZone().runOutsideAngular(function () {
              return Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"])().onAndCancel(element, parsedEvent['domEventName'], outsideHandler);
            });
          }
        }], [{
          key: "parseEventName",
          value: function parseEventName(eventName) {
            var parts = eventName.toLowerCase().split('.');
            var domEventName = parts.shift();

            if (parts.length === 0 || !(domEventName === 'keydown' || domEventName === 'keyup')) {
              return null;
            }

            var key = KeyEventsPlugin._normalizeKey(parts.pop());

            var fullKey = '';
            MODIFIER_KEYS.forEach(function (modifierName) {
              var index = parts.indexOf(modifierName);

              if (index > -1) {
                parts.splice(index, 1);
                fullKey += modifierName + '.';
              }
            });
            fullKey += key;

            if (parts.length != 0 || key.length === 0) {
              // returning null instead of throwing to let another plugin process the event
              return null;
            } // NOTE: Please don't rewrite this as so, as it will break JSCompiler property renaming.
            //       The code must remain in the `result['domEventName']` form.
            // return {domEventName, fullKey};


            var result = {};
            result['domEventName'] = domEventName;
            result['fullKey'] = fullKey;
            return result;
          }
        }, {
          key: "getEventFullKey",
          value: function getEventFullKey(event) {
            var fullKey = '';
            var key = getEventKey(event);
            key = key.toLowerCase();

            if (key === ' ') {
              key = 'space'; // for readability
            } else if (key === '.') {
              key = 'dot'; // because '.' is used as a separator in event names
            }

            MODIFIER_KEYS.forEach(function (modifierName) {
              if (modifierName != key) {
                var modifierGetter = MODIFIER_KEY_GETTERS[modifierName];

                if (modifierGetter(event)) {
                  fullKey += modifierName + '.';
                }
              }
            });
            fullKey += key;
            return fullKey;
          }
          /**
           * Configures a handler callback for a key event.
           * @param fullKey The event name that combines all simultaneous keystrokes.
           * @param handler The function that responds to the key event.
           * @param zone The zone in which the event occurred.
           * @returns A callback function.
           */

        }, {
          key: "eventCallback",
          value: function eventCallback(fullKey, handler, zone) {
            return function (event
            /** TODO #9100 */
            ) {
              if (KeyEventsPlugin.getEventFullKey(event) === fullKey) {
                zone.runGuarded(function () {
                  return handler(event);
                });
              }
            };
          }
          /** @internal */

        }, {
          key: "_normalizeKey",
          value: function _normalizeKey(keyName) {
            // TODO: switch to a Map if the mapping grows too much
            switch (keyName) {
              case 'esc':
                return 'escape';

              default:
                return keyName;
            }
          }
        }]);

        return KeyEventsPlugin;
      }(EventManagerPlugin);

      KeyEventsPlugin.ɵfac = function KeyEventsPlugin_Factory(t) {
        return new (t || KeyEventsPlugin)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]));
      };

      KeyEventsPlugin.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({
        token: KeyEventsPlugin,
        factory: KeyEventsPlugin.ɵfac
      });

      KeyEventsPlugin.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](KeyEventsPlugin, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
            }]
          }];
        }, null);
      })();

      function getEventKey(event) {
        var key = event.key;

        if (key == null) {
          key = event.keyIdentifier; // keyIdentifier is defined in the old draft of DOM Level 3 Events implemented by Chrome and
          // Safari cf
          // https://www.w3.org/TR/2007/WD-DOM-Level-3-Events-20071221/events.html#Events-KeyboardEvents-Interfaces

          if (key == null) {
            return 'Unidentified';
          }

          if (key.startsWith('U+')) {
            key = String.fromCharCode(parseInt(key.substring(2), 16));

            if (event.location === DOM_KEY_LOCATION_NUMPAD && _chromeNumKeyPadMap.hasOwnProperty(key)) {
              // There is a bug in Chrome for numeric keypad keys:
              // https://code.google.com/p/chromium/issues/detail?id=155654
              // 1, 2, 3 ... are reported as A, B, C ...
              key = _chromeNumKeyPadMap[key];
            }
          }
        }

        return _keyMap[key] || key;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * DomSanitizer helps preventing Cross Site Scripting Security bugs (XSS) by sanitizing
       * values to be safe to use in the different DOM contexts.
       *
       * For example, when binding a URL in an `<a [href]="someValue">` hyperlink, `someValue` will be
       * sanitized so that an attacker cannot inject e.g. a `javascript:` URL that would execute code on
       * the website.
       *
       * In specific situations, it might be necessary to disable sanitization, for example if the
       * application genuinely needs to produce a `javascript:` style link with a dynamic value in it.
       * Users can bypass security by constructing a value with one of the `bypassSecurityTrust...`
       * methods, and then binding to that value from the template.
       *
       * These situations should be very rare, and extraordinary care must be taken to avoid creating a
       * Cross Site Scripting (XSS) security bug!
       *
       * When using `bypassSecurityTrust...`, make sure to call the method as early as possible and as
       * close as possible to the source of the value, to make it easy to verify no security bug is
       * created by its use.
       *
       * It is not required (and not recommended) to bypass security if the value is safe, e.g. a URL that
       * does not start with a suspicious protocol, or an HTML snippet that does not contain dangerous
       * code. The sanitizer leaves safe values intact.
       *
       * @security Calling any of the `bypassSecurityTrust...` APIs disables Angular's built-in
       * sanitization for the value passed in. Carefully check and audit all values and code paths going
       * into this call. Make sure any user data is appropriately escaped for this security context.
       * For more detail, see the [Security Guide](https://g.co/ng/security).
       *
       * @publicApi
       */


      var DomSanitizer = function DomSanitizer() {
        _classCallCheck2(this, DomSanitizer);
      };

      DomSanitizer.ɵfac = function DomSanitizer_Factory(t) {
        return new (t || DomSanitizer)();
      };

      DomSanitizer.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function DomSanitizer_Factory() {
          return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(DomSanitizerImpl);
        },
        token: DomSanitizer,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](DomSanitizer, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root',
            useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["forwardRef"])(function () {
              return DomSanitizerImpl;
            })
          }]
        }], null, null);
      })();

      function domSanitizerImplFactory(injector) {
        return new DomSanitizerImpl(injector.get(_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]));
      }

      var DomSanitizerImpl = /*#__PURE__*/function (_DomSanitizer) {
        _inherits2(DomSanitizerImpl, _DomSanitizer);

        var _super338 = _createSuper(DomSanitizerImpl);

        function DomSanitizerImpl(_doc) {
          var _this776;

          _classCallCheck2(this, DomSanitizerImpl);

          _this776 = _super338.call(this);
          _this776._doc = _doc;
          return _this776;
        }

        _createClass2(DomSanitizerImpl, [{
          key: "sanitize",
          value: function sanitize(ctx, value) {
            if (value == null) return null;

            switch (ctx) {
              case _angular_core__WEBPACK_IMPORTED_MODULE_1__["SecurityContext"].NONE:
                return value;

              case _angular_core__WEBPACK_IMPORTED_MODULE_1__["SecurityContext"].HTML:
                if (Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵallowSanitizationBypassAndThrow"])(value, "HTML"
                /* Html */
                )) {
                  return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵunwrapSafeValue"])(value);
                }

                return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵ_sanitizeHtml"])(this._doc, String(value)).toString();

              case _angular_core__WEBPACK_IMPORTED_MODULE_1__["SecurityContext"].STYLE:
                if (Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵallowSanitizationBypassAndThrow"])(value, "Style"
                /* Style */
                )) {
                  return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵunwrapSafeValue"])(value);
                }

                return value;

              case _angular_core__WEBPACK_IMPORTED_MODULE_1__["SecurityContext"].SCRIPT:
                if (Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵallowSanitizationBypassAndThrow"])(value, "Script"
                /* Script */
                )) {
                  return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵunwrapSafeValue"])(value);
                }

                throw new Error('unsafe value used in a script context');

              case _angular_core__WEBPACK_IMPORTED_MODULE_1__["SecurityContext"].URL:
                var type = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵgetSanitizationBypassType"])(value);

                if (Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵallowSanitizationBypassAndThrow"])(value, "URL"
                /* Url */
                )) {
                  return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵunwrapSafeValue"])(value);
                }

                return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵ_sanitizeUrl"])(String(value));

              case _angular_core__WEBPACK_IMPORTED_MODULE_1__["SecurityContext"].RESOURCE_URL:
                if (Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵallowSanitizationBypassAndThrow"])(value, "ResourceURL"
                /* ResourceUrl */
                )) {
                  return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵunwrapSafeValue"])(value);
                }

                throw new Error('unsafe value used in a resource URL context (see https://g.co/ng/security#xss)');

              default:
                throw new Error("Unexpected SecurityContext ".concat(ctx, " (see https://g.co/ng/security#xss)"));
            }
          }
        }, {
          key: "bypassSecurityTrustHtml",
          value: function bypassSecurityTrustHtml(value) {
            return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵbypassSanitizationTrustHtml"])(value);
          }
        }, {
          key: "bypassSecurityTrustStyle",
          value: function bypassSecurityTrustStyle(value) {
            return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵbypassSanitizationTrustStyle"])(value);
          }
        }, {
          key: "bypassSecurityTrustScript",
          value: function bypassSecurityTrustScript(value) {
            return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵbypassSanitizationTrustScript"])(value);
          }
        }, {
          key: "bypassSecurityTrustUrl",
          value: function bypassSecurityTrustUrl(value) {
            return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵbypassSanitizationTrustUrl"])(value);
          }
        }, {
          key: "bypassSecurityTrustResourceUrl",
          value: function bypassSecurityTrustResourceUrl(value) {
            return Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵbypassSanitizationTrustResourceUrl"])(value);
          }
        }]);

        return DomSanitizerImpl;
      }(DomSanitizer);

      DomSanitizerImpl.ɵfac = function DomSanitizerImpl_Factory(t) {
        return new (t || DomSanitizerImpl)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]));
      };

      DomSanitizerImpl.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function DomSanitizerImpl_Factory() {
          return domSanitizerImplFactory(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_1__["INJECTOR"]));
        },
        token: DomSanitizerImpl,
        providedIn: "root"
      });

      DomSanitizerImpl.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](DomSanitizerImpl, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root',
            useFactory: domSanitizerImplFactory,
            deps: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]]
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function initDomAdapter() {
        BrowserDomAdapter.makeCurrent();
        BrowserGetTestability.init();
      }

      function errorHandler() {
        return new _angular_core__WEBPACK_IMPORTED_MODULE_1__["ErrorHandler"]();
      }

      function _document() {
        // Tell ivy about the global document
        Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetDocument"])(document);
        return document;
      }

      var ɵ0$4 = _angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵPLATFORM_BROWSER_ID"];
      var INTERNAL_BROWSER_PLATFORM_PROVIDERS = [{
        provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["PLATFORM_ID"],
        useValue: ɵ0$4
      }, {
        provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["PLATFORM_INITIALIZER"],
        useValue: initDomAdapter,
        multi: true
      }, {
        provide: _angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"],
        useFactory: _document,
        deps: []
      }];
      var BROWSER_SANITIZATION_PROVIDERS__PRE_R3__ = [{
        provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Sanitizer"],
        useExisting: DomSanitizer
      }, {
        provide: DomSanitizer,
        useClass: DomSanitizerImpl,
        deps: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
      }];
      var BROWSER_SANITIZATION_PROVIDERS__POST_R3__ = [];
      /**
       * @security Replacing built-in sanitization providers exposes the application to XSS risks.
       * Attacker-controlled data introduced by an unsanitized provider could expose your
       * application to XSS risks. For more detail, see the [Security Guide](https://g.co/ng/security).
       * @publicApi
       */

      var BROWSER_SANITIZATION_PROVIDERS = BROWSER_SANITIZATION_PROVIDERS__POST_R3__;
      /**
       * A factory function that returns a `PlatformRef` instance associated with browser service
       * providers.
       *
       * @publicApi
       */

      var platformBrowser = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["createPlatformFactory"])(_angular_core__WEBPACK_IMPORTED_MODULE_1__["platformCore"], 'browser', INTERNAL_BROWSER_PLATFORM_PROVIDERS);
      var BROWSER_MODULE_PROVIDERS = [BROWSER_SANITIZATION_PROVIDERS, {
        provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵINJECTOR_SCOPE"],
        useValue: 'root'
      }, {
        provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ErrorHandler"],
        useFactory: errorHandler,
        deps: []
      }, {
        provide: EVENT_MANAGER_PLUGINS,
        useClass: DomEventsPlugin,
        multi: true,
        deps: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["PLATFORM_ID"]]
      }, {
        provide: EVENT_MANAGER_PLUGINS,
        useClass: KeyEventsPlugin,
        multi: true,
        deps: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
      }, HAMMER_PROVIDERS, {
        provide: DomRendererFactory2,
        useClass: DomRendererFactory2,
        deps: [EventManager, DomSharedStylesHost, _angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_ID"]]
      }, {
        provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["RendererFactory2"],
        useExisting: DomRendererFactory2
      }, {
        provide: SharedStylesHost,
        useExisting: DomSharedStylesHost
      }, {
        provide: DomSharedStylesHost,
        useClass: DomSharedStylesHost,
        deps: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
      }, {
        provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Testability"],
        useClass: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Testability"],
        deps: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]]
      }, {
        provide: EventManager,
        useClass: EventManager,
        deps: [EVENT_MANAGER_PLUGINS, _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]]
      }, ELEMENT_PROBE_PROVIDERS];
      /**
       * Exports required infrastructure for all Angular apps.
       * Included by default in all Angular apps created with the CLI
       * `new` command.
       * Re-exports `CommonModule` and `ApplicationModule`, making their
       * exports and providers available to all apps.
       *
       * @publicApi
       */

      var BrowserModule = /*#__PURE__*/function () {
        function BrowserModule(parentModule) {
          _classCallCheck2(this, BrowserModule);

          if (parentModule) {
            throw new Error("BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead.");
          }
        }
        /**
         * Configures a browser-based app to transition from a server-rendered app, if
         * one is present on the page.
         *
         * @param params An object containing an identifier for the app to transition.
         * The ID must match between the client and server versions of the app.
         * @returns The reconfigured `BrowserModule` to import into the app's root `AppModule`.
         */


        _createClass2(BrowserModule, null, [{
          key: "withServerTransition",
          value: function withServerTransition(params) {
            return {
              ngModule: BrowserModule,
              providers: [{
                provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_ID"],
                useValue: params.appId
              }, {
                provide: TRANSITION_ID,
                useExisting: _angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_ID"]
              }, SERVER_TRANSITION_PROVIDERS]
            };
          }
        }]);

        return BrowserModule;
      }();

      BrowserModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({
        type: BrowserModule
      });
      BrowserModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({
        factory: function BrowserModule_Factory(t) {
          return new (t || BrowserModule)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](BrowserModule, 12));
        },
        providers: BROWSER_MODULE_PROVIDERS,
        imports: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["CommonModule"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationModule"]]
      });

      BrowserModule.ctorParameters = function () {
        return [{
          type: BrowserModule,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["SkipSelf"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [BrowserModule]
          }]
        }];
      };

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](BrowserModule, {
          exports: function exports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_0__["CommonModule"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationModule"]];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](BrowserModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
          args: [{
            providers: BROWSER_MODULE_PROVIDERS,
            exports: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["CommonModule"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationModule"]]
          }]
        }], function () {
          return [{
            type: BrowserModule,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["SkipSelf"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [BrowserModule]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Factory to create a `Meta` service instance for the current DOM document.
       */


      function createMeta() {
        return new Meta(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]));
      }
      /**
       * A service for managing HTML `<meta>` tags.
       *
       * Properties of the `MetaDefinition` object match the attributes of the
       * HTML `<meta>` tag. These tags define document metadata that is important for
       * things like configuring a Content Security Policy, defining browser compatibility
       * and security settings, setting HTTP Headers, defining rich content for social sharing,
       * and Search Engine Optimization (SEO).
       *
       * To identify specific `<meta>` tags in a document, use an attribute selection
       * string in the format `"tag_attribute='value string'"`.
       * For example, an `attrSelector` value of `"name='description'"` matches a tag
       * whose `name` attribute has the value `"description"`.
       * Selectors are used with the `querySelector()` Document method,
       * in the format `meta[{attrSelector}]`.
       *
       * @see [HTML meta tag](https://developer.mozilla.org/docs/Web/HTML/Element/meta)
       * @see [Document.querySelector()](https://developer.mozilla.org/docs/Web/API/Document/querySelector)
       *
       *
       * @publicApi
       */


      var Meta = /*#__PURE__*/function () {
        function Meta(_doc) {
          _classCallCheck2(this, Meta);

          this._doc = _doc;
          this._dom = Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"])();
        }
        /**
         * Retrieves or creates a specific `<meta>` tag element in the current HTML document.
         * In searching for an existing tag, Angular attempts to match the `name` or `property` attribute
         * values in the provided tag definition, and verifies that all other attribute values are equal.
         * If an existing element is found, it is returned and is not modified in any way.
         * @param tag The definition of a `<meta>` element to match or create.
         * @param forceCreation True to create a new element without checking whether one already exists.
         * @returns The existing element with the same attributes and values if found,
         * the new element if no match is found, or `null` if the tag parameter is not defined.
         */


        _createClass2(Meta, [{
          key: "addTag",
          value: function addTag(tag) {
            var forceCreation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
            if (!tag) return null;
            return this._getOrCreateElement(tag, forceCreation);
          }
          /**
           * Retrieves or creates a set of `<meta>` tag elements in the current HTML document.
           * In searching for an existing tag, Angular attempts to match the `name` or `property` attribute
           * values in the provided tag definition, and verifies that all other attribute values are equal.
           * @param tags An array of tag definitions to match or create.
           * @param forceCreation True to create new elements without checking whether they already exist.
           * @returns The matching elements if found, or the new elements.
           */

        }, {
          key: "addTags",
          value: function addTags(tags) {
            var _this777 = this;

            var forceCreation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
            if (!tags) return [];
            return tags.reduce(function (result, tag) {
              if (tag) {
                result.push(_this777._getOrCreateElement(tag, forceCreation));
              }

              return result;
            }, []);
          }
          /**
           * Retrieves a `<meta>` tag element in the current HTML document.
           * @param attrSelector The tag attribute and value to match against, in the format
           * `"tag_attribute='value string'"`.
           * @returns The matching element, if any.
           */

        }, {
          key: "getTag",
          value: function getTag(attrSelector) {
            if (!attrSelector) return null;
            return this._doc.querySelector("meta[".concat(attrSelector, "]")) || null;
          }
          /**
           * Retrieves a set of `<meta>` tag elements in the current HTML document.
           * @param attrSelector The tag attribute and value to match against, in the format
           * `"tag_attribute='value string'"`.
           * @returns The matching elements, if any.
           */

        }, {
          key: "getTags",
          value: function getTags(attrSelector) {
            if (!attrSelector) return [];

            var list
            /*NodeList*/
            = this._doc.querySelectorAll("meta[".concat(attrSelector, "]"));

            return list ? [].slice.call(list) : [];
          }
          /**
           * Modifies an existing `<meta>` tag element in the current HTML document.
           * @param tag The tag description with which to replace the existing tag content.
           * @param selector A tag attribute and value to match against, to identify
           * an existing tag. A string in the format `"tag_attribute=`value string`"`.
           * If not supplied, matches a tag with the same `name` or `property` attribute value as the
           * replacement tag.
           * @return The modified element.
           */

        }, {
          key: "updateTag",
          value: function updateTag(tag, selector) {
            if (!tag) return null;
            selector = selector || this._parseSelector(tag);
            var meta = this.getTag(selector);

            if (meta) {
              return this._setMetaElementAttributes(tag, meta);
            }

            return this._getOrCreateElement(tag, true);
          }
          /**
           * Removes an existing `<meta>` tag element from the current HTML document.
           * @param attrSelector A tag attribute and value to match against, to identify
           * an existing tag. A string in the format `"tag_attribute=`value string`"`.
           */

        }, {
          key: "removeTag",
          value: function removeTag(attrSelector) {
            this.removeTagElement(this.getTag(attrSelector));
          }
          /**
           * Removes an existing `<meta>` tag element from the current HTML document.
           * @param meta The tag definition to match against to identify an existing tag.
           */

        }, {
          key: "removeTagElement",
          value: function removeTagElement(meta) {
            if (meta) {
              this._dom.remove(meta);
            }
          }
        }, {
          key: "_getOrCreateElement",
          value: function _getOrCreateElement(meta) {
            var forceCreation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;

            if (!forceCreation) {
              var selector = this._parseSelector(meta);

              var elem = this.getTag(selector); // It's allowed to have multiple elements with the same name so it's not enough to
              // just check that element with the same name already present on the page. We also need to
              // check if element has tag attributes

              if (elem && this._containsAttributes(meta, elem)) return elem;
            }

            var element = this._dom.createElement('meta');

            this._setMetaElementAttributes(meta, element);

            var head = this._doc.getElementsByTagName('head')[0];

            head.appendChild(element);
            return element;
          }
        }, {
          key: "_setMetaElementAttributes",
          value: function _setMetaElementAttributes(tag, el) {
            var _this778 = this;

            Object.keys(tag).forEach(function (prop) {
              return el.setAttribute(_this778._getMetaKeyMap(prop), tag[prop]);
            });
            return el;
          }
        }, {
          key: "_parseSelector",
          value: function _parseSelector(tag) {
            var attr = tag.name ? 'name' : 'property';
            return "".concat(attr, "=\"").concat(tag[attr], "\"");
          }
        }, {
          key: "_containsAttributes",
          value: function _containsAttributes(tag, elem) {
            var _this779 = this;

            return Object.keys(tag).every(function (key) {
              return elem.getAttribute(_this779._getMetaKeyMap(key)) === tag[key];
            });
          }
        }, {
          key: "_getMetaKeyMap",
          value: function _getMetaKeyMap(prop) {
            return META_KEYS_MAP[prop] || prop;
          }
        }]);

        return Meta;
      }();

      Meta.ɵfac = function Meta_Factory(t) {
        return new (t || Meta)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]));
      };

      Meta.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: createMeta,
        token: Meta,
        providedIn: "root"
      });

      Meta.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](Meta, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root',
            useFactory: createMeta,
            deps: []
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
            }]
          }];
        }, null);
      })();
      /**
       * Mapping for MetaDefinition properties with their correct meta attribute names
       */


      var META_KEYS_MAP = {
        httpEquiv: 'http-equiv'
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Factory to create Title service.
       */

      function createTitle() {
        return new Title(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]));
      }
      /**
       * A service that can be used to get and set the title of a current HTML document.
       *
       * Since an Angular application can't be bootstrapped on the entire HTML document (`<html>` tag)
       * it is not possible to bind to the `text` property of the `HTMLTitleElement` elements
       * (representing the `<title>` tag). Instead, this service can be used to set and get the current
       * title value.
       *
       * @publicApi
       */


      var Title = /*#__PURE__*/function () {
        function Title(_doc) {
          _classCallCheck2(this, Title);

          this._doc = _doc;
        }
        /**
         * Get the title of the current HTML document.
         */


        _createClass2(Title, [{
          key: "getTitle",
          value: function getTitle() {
            return this._doc.title;
          }
          /**
           * Set the title of the current HTML document.
           * @param newTitle
           */

        }, {
          key: "setTitle",
          value: function setTitle(newTitle) {
            this._doc.title = newTitle || '';
          }
        }]);

        return Title;
      }();

      Title.ɵfac = function Title_Factory(t) {
        return new (t || Title)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]));
      };

      Title.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: createTitle,
        token: Title,
        providedIn: "root"
      });

      Title.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](Title, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root',
            useFactory: createTitle,
            deps: []
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var win = typeof window !== 'undefined' && window || {};
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var ChangeDetectionPerfRecord = function ChangeDetectionPerfRecord(msPerTick, numTicks) {
        _classCallCheck2(this, ChangeDetectionPerfRecord);

        this.msPerTick = msPerTick;
        this.numTicks = numTicks;
      };
      /**
       * Entry point for all Angular profiling-related debug tools. This object
       * corresponds to the `ng.profiler` in the dev console.
       */


      var AngularProfiler = /*#__PURE__*/function () {
        function AngularProfiler(ref) {
          _classCallCheck2(this, AngularProfiler);

          this.appRef = ref.injector.get(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationRef"]);
        } // tslint:disable:no-console

        /**
         * Exercises change detection in a loop and then prints the average amount of
         * time in milliseconds how long a single round of change detection takes for
         * the current state of the UI. It runs a minimum of 5 rounds for a minimum
         * of 500 milliseconds.
         *
         * Optionally, a user may pass a `config` parameter containing a map of
         * options. Supported options are:
         *
         * `record` (boolean) - causes the profiler to record a CPU profile while
         * it exercises the change detector. Example:
         *
         * ```
         * ng.profiler.timeChangeDetection({record: true})
         * ```
         */


        _createClass2(AngularProfiler, [{
          key: "timeChangeDetection",
          value: function timeChangeDetection(config) {
            var record = config && config['record'];
            var profileName = 'Change Detection'; // Profiler is not available in Android browsers without dev tools opened

            var isProfilerAvailable = win.console.profile != null;

            if (record && isProfilerAvailable) {
              win.console.profile(profileName);
            }

            var start = Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"])().performanceNow();
            var numTicks = 0;

            while (numTicks < 5 || Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"])().performanceNow() - start < 500) {
              this.appRef.tick();
              numTicks++;
            }

            var end = Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"])().performanceNow();

            if (record && isProfilerAvailable) {
              win.console.profileEnd(profileName);
            }

            var msPerTick = (end - start) / numTicks;
            win.console.log("ran ".concat(numTicks, " change detection cycles"));
            win.console.log("".concat(msPerTick.toFixed(2), " ms per check"));
            return new ChangeDetectionPerfRecord(msPerTick, numTicks);
          }
        }]);

        return AngularProfiler;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var PROFILER_GLOBAL_NAME = 'profiler';
      /**
       * Enabled Angular debug tools that are accessible via your browser's
       * developer console.
       *
       * Usage:
       *
       * 1. Open developer console (e.g. in Chrome Ctrl + Shift + j)
       * 1. Type `ng.` (usually the console will show auto-complete suggestion)
       * 1. Try the change detection profiler `ng.profiler.timeChangeDetection()`
       *    then hit Enter.
       *
       * @publicApi
       */

      function enableDebugTools(ref) {
        exportNgVar(PROFILER_GLOBAL_NAME, new AngularProfiler(ref));
        return ref;
      }
      /**
       * Disables Angular tools.
       *
       * @publicApi
       */


      function disableDebugTools() {
        exportNgVar(PROFILER_GLOBAL_NAME, null);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function escapeHtml(text) {
        var escapedText = {
          '&': '&a;',
          '"': '&q;',
          '\'': '&s;',
          '<': '&l;',
          '>': '&g;'
        };
        return text.replace(/[&"'<>]/g, function (s) {
          return escapedText[s];
        });
      }

      function unescapeHtml(text) {
        var unescapedText = {
          '&a;': '&',
          '&q;': '"',
          '&s;': '\'',
          '&l;': '<',
          '&g;': '>'
        };
        return text.replace(/&[^;]+;/g, function (s) {
          return unescapedText[s];
        });
      }
      /**
       * Create a `StateKey<T>` that can be used to store value of type T with `TransferState`.
       *
       * Example:
       *
       * ```
       * const COUNTER_KEY = makeStateKey<number>('counter');
       * let value = 10;
       *
       * transferState.set(COUNTER_KEY, value);
       * ```
       *
       * @publicApi
       */


      function makeStateKey(key) {
        return key;
      }
      /**
       * A key value store that is transferred from the application on the server side to the application
       * on the client side.
       *
       * `TransferState` will be available as an injectable token. To use it import
       * `ServerTransferStateModule` on the server and `BrowserTransferStateModule` on the client.
       *
       * The values in the store are serialized/deserialized using JSON.stringify/JSON.parse. So only
       * boolean, number, string, null and non-class objects will be serialized and deserialized in a
       * non-lossy manner.
       *
       * @publicApi
       */


      var TransferState = /*#__PURE__*/function () {
        function TransferState() {
          _classCallCheck2(this, TransferState);

          this.store = {};
          this.onSerializeCallbacks = {};
        }
        /** @internal */


        _createClass2(TransferState, [{
          key: "get",
          value:
          /**
           * Get the value corresponding to a key. Return `defaultValue` if key is not found.
           */
          function get(key, defaultValue) {
            return this.store[key] !== undefined ? this.store[key] : defaultValue;
          }
          /**
           * Set the value corresponding to a key.
           */

        }, {
          key: "set",
          value: function set(key, value) {
            this.store[key] = value;
          }
          /**
           * Remove a key from the store.
           */

        }, {
          key: "remove",
          value: function remove(key) {
            delete this.store[key];
          }
          /**
           * Test whether a key exists in the store.
           */

        }, {
          key: "hasKey",
          value: function hasKey(key) {
            return this.store.hasOwnProperty(key);
          }
          /**
           * Register a callback to provide the value for a key when `toJson` is called.
           */

        }, {
          key: "onSerialize",
          value: function onSerialize(key, callback) {
            this.onSerializeCallbacks[key] = callback;
          }
          /**
           * Serialize the current state of the store to JSON.
           */

        }, {
          key: "toJson",
          value: function toJson() {
            // Call the onSerialize callbacks and put those values into the store.
            for (var key in this.onSerializeCallbacks) {
              if (this.onSerializeCallbacks.hasOwnProperty(key)) {
                try {
                  this.store[key] = this.onSerializeCallbacks[key]();
                } catch (e) {
                  console.warn('Exception in onSerialize callback: ', e);
                }
              }
            }

            return JSON.stringify(this.store);
          }
        }], [{
          key: "init",
          value: function init(initState) {
            var transferState = new TransferState();
            transferState.store = initState;
            return transferState;
          }
        }]);

        return TransferState;
      }();

      TransferState.ɵfac = function TransferState_Factory(t) {
        return new (t || TransferState)();
      };

      TransferState.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({
        token: TransferState,
        factory: TransferState.ɵfac
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](TransferState, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
        }], function () {
          return [];
        }, null);
      })();

      function initTransferState(doc, appId) {
        // Locate the script tag with the JSON data transferred from the server.
        // The id of the script tag is set to the Angular appId + 'state'.
        var script = doc.getElementById(appId + '-state');
        var initialState = {};

        if (script && script.textContent) {
          try {
            initialState = JSON.parse(unescapeHtml(script.textContent));
          } catch (e) {
            console.warn('Exception while restoring TransferState for app ' + appId, e);
          }
        }

        return TransferState.init(initialState);
      }
      /**
       * NgModule to install on the client side while using the `TransferState` to transfer state from
       * server to client.
       *
       * @publicApi
       */


      var BrowserTransferStateModule = function BrowserTransferStateModule() {
        _classCallCheck2(this, BrowserTransferStateModule);
      };

      BrowserTransferStateModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({
        type: BrowserTransferStateModule
      });
      BrowserTransferStateModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({
        factory: function BrowserTransferStateModule_Factory(t) {
          return new (t || BrowserTransferStateModule)();
        },
        providers: [{
          provide: TransferState,
          useFactory: initTransferState,
          deps: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_ID"]]
        }]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](BrowserTransferStateModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
          args: [{
            providers: [{
              provide: TransferState,
              useFactory: initTransferState,
              deps: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_ID"]]
            }]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Predicates for use with {@link DebugElement}'s query functions.
       *
       * @publicApi
       */


      var By = /*#__PURE__*/function () {
        function By() {
          _classCallCheck2(this, By);
        }

        _createClass2(By, null, [{
          key: "all",
          value:
          /**
           * Match all nodes.
           *
           * @usageNotes
           * ### Example
           *
           * {@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}
           */
          function all() {
            return function () {
              return true;
            };
          }
          /**
           * Match elements by the given CSS selector.
           *
           * @usageNotes
           * ### Example
           *
           * {@example platform-browser/dom/debug/ts/by/by.ts region='by_css'}
           */

        }, {
          key: "css",
          value: function css(selector) {
            return function (debugElement) {
              return debugElement.nativeElement != null ? elementMatches(debugElement.nativeElement, selector) : false;
            };
          }
          /**
           * Match nodes that have the given directive present.
           *
           * @usageNotes
           * ### Example
           *
           * {@example platform-browser/dom/debug/ts/by/by.ts region='by_directive'}
           */

        }, {
          key: "directive",
          value: function directive(type) {
            return function (debugNode) {
              return debugNode.providerTokens.indexOf(type) !== -1;
            };
          }
        }]);

        return By;
      }();

      function elementMatches(n, selector) {
        if (Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"])().isElementNode(n)) {
          return n.matches && n.matches(selector) || n.msMatchesSelector && n.msMatchesSelector(selector) || n.webkitMatchesSelector && n.webkitMatchesSelector(selector);
        }

        return false;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @publicApi
       */


      var VERSION = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Version"]('12.0.0-next.1');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // This file only reexports content of the `src` folder. Keep it that way.

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=platform-browser.js.map

      /***/
    },

    /***/
    "jnO4":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/ar.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function jnO4(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Arabic [ar]
      //! author : Abdel Said: https://github.com/abdelsaid
      //! author : Ahmed Elkhatib
      //! author : forabi https://github.com/forabi
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var symbolMap = {
          1: '١',
          2: '٢',
          3: '٣',
          4: '٤',
          5: '٥',
          6: '٦',
          7: '٧',
          8: '٨',
          9: '٩',
          0: '٠'
        },
            numberMap = {
          '١': '1',
          '٢': '2',
          '٣': '3',
          '٤': '4',
          '٥': '5',
          '٦': '6',
          '٧': '7',
          '٨': '8',
          '٩': '9',
          '٠': '0'
        },
            pluralForm = function pluralForm(n) {
          return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
        },
            plurals = {
          s: ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
          m: ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
          h: ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
          d: ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
          M: ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
          y: ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
        },
            pluralize = function pluralize(u) {
          return function (number, withoutSuffix, string, isFuture) {
            var f = pluralForm(number),
                str = plurals[u][pluralForm(number)];

            if (f === 2) {
              str = str[withoutSuffix ? 0 : 1];
            }

            return str.replace(/%d/i, number);
          };
        },
            months = ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'];

        var ar = moment.defineLocale('ar', {
          months: months,
          monthsShort: months,
          weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
          weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
          weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: "D/\u200FM/\u200FYYYY",
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm'
          },
          meridiemParse: /ص|م/,
          isPM: function isPM(input) {
            return 'م' === input;
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 12) {
              return 'ص';
            } else {
              return 'م';
            }
          },
          calendar: {
            sameDay: '[اليوم عند الساعة] LT',
            nextDay: '[غدًا عند الساعة] LT',
            nextWeek: 'dddd [عند الساعة] LT',
            lastDay: '[أمس عند الساعة] LT',
            lastWeek: 'dddd [عند الساعة] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'بعد %s',
            past: 'منذ %s',
            s: pluralize('s'),
            ss: pluralize('s'),
            m: pluralize('m'),
            mm: pluralize('m'),
            h: pluralize('h'),
            hh: pluralize('h'),
            d: pluralize('d'),
            dd: pluralize('d'),
            M: pluralize('M'),
            MM: pluralize('M'),
            y: pluralize('y'),
            yy: pluralize('y')
          },
          preparse: function preparse(string) {
            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
              return numberMap[match];
            }).replace(/،/g, ',');
          },
          postformat: function postformat(string) {
            return string.replace(/\d/g, function (match) {
              return symbolMap[match];
            }).replace(/,/g, '،');
          },
          week: {
            dow: 6,
            // Saturday is the first day of the week.
            doy: 12 // The week that contains Jan 12th is the first week of the year.

          }
        });
        return ar;
      });
      /***/

    },

    /***/
    "jtHE":
    /*!**************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/ReplaySubject.js ***!
      \**************************************************************/

    /*! exports provided: ReplaySubject */

    /***/
    function jtHE(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ReplaySubject", function () {
        return ReplaySubject;
      });
      /* harmony import */


      var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./Subject */
      "XNiG");
      /* harmony import */


      var _scheduler_queue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./scheduler/queue */
      "qgXg");
      /* harmony import */


      var _Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./Subscription */
      "quSY");
      /* harmony import */


      var _operators_observeOn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./operators/observeOn */
      "pxpQ");
      /* harmony import */


      var _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ./util/ObjectUnsubscribedError */
      "9ppp");
      /* harmony import */


      var _SubjectSubscription__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! ./SubjectSubscription */
      "Ylt2");

      var ReplaySubject = /*#__PURE__*/function (_Subject__WEBPACK_IMP5) {
        _inherits2(ReplaySubject, _Subject__WEBPACK_IMP5);

        var _super339 = _createSuper(ReplaySubject);

        function ReplaySubject() {
          var _this780;

          var bufferSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number.POSITIVE_INFINITY;
          var windowTime = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.POSITIVE_INFINITY;
          var scheduler = arguments.length > 2 ? arguments[2] : undefined;

          _classCallCheck2(this, ReplaySubject);

          _this780 = _super339.call(this);
          _this780.scheduler = scheduler;
          _this780._events = [];
          _this780._infiniteTimeWindow = false;
          _this780._bufferSize = bufferSize < 1 ? 1 : bufferSize;
          _this780._windowTime = windowTime < 1 ? 1 : windowTime;

          if (windowTime === Number.POSITIVE_INFINITY) {
            _this780._infiniteTimeWindow = true;
            _this780.next = _this780.nextInfiniteTimeWindow;
          } else {
            _this780.next = _this780.nextTimeWindow;
          }

          return _this780;
        }

        _createClass2(ReplaySubject, [{
          key: "nextInfiniteTimeWindow",
          value: function nextInfiniteTimeWindow(value) {
            if (!this.isStopped) {
              var _events = this._events;

              _events.push(value);

              if (_events.length > this._bufferSize) {
                _events.shift();
              }
            }

            _get2(_getPrototypeOf2(ReplaySubject.prototype), "next", this).call(this, value);
          }
        }, {
          key: "nextTimeWindow",
          value: function nextTimeWindow(value) {
            if (!this.isStopped) {
              this._events.push(new ReplayEvent(this._getNow(), value));

              this._trimBufferThenGetEvents();
            }

            _get2(_getPrototypeOf2(ReplaySubject.prototype), "next", this).call(this, value);
          }
        }, {
          key: "_subscribe",
          value: function _subscribe(subscriber) {
            var _infiniteTimeWindow = this._infiniteTimeWindow;

            var _events = _infiniteTimeWindow ? this._events : this._trimBufferThenGetEvents();

            var scheduler = this.scheduler;
            var len = _events.length;
            var subscription;

            if (this.closed) {
              throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__["ObjectUnsubscribedError"]();
            } else if (this.isStopped || this.hasError) {
              subscription = _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"].EMPTY;
            } else {
              this.observers.push(subscriber);
              subscription = new _SubjectSubscription__WEBPACK_IMPORTED_MODULE_5__["SubjectSubscription"](this, subscriber);
            }

            if (scheduler) {
              subscriber.add(subscriber = new _operators_observeOn__WEBPACK_IMPORTED_MODULE_3__["ObserveOnSubscriber"](subscriber, scheduler));
            }

            if (_infiniteTimeWindow) {
              for (var i = 0; i < len && !subscriber.closed; i++) {
                subscriber.next(_events[i]);
              }
            } else {
              for (var _i44 = 0; _i44 < len && !subscriber.closed; _i44++) {
                subscriber.next(_events[_i44].value);
              }
            }

            if (this.hasError) {
              subscriber.error(this.thrownError);
            } else if (this.isStopped) {
              subscriber.complete();
            }

            return subscription;
          }
        }, {
          key: "_getNow",
          value: function _getNow() {
            return (this.scheduler || _scheduler_queue__WEBPACK_IMPORTED_MODULE_1__["queue"]).now();
          }
        }, {
          key: "_trimBufferThenGetEvents",
          value: function _trimBufferThenGetEvents() {
            var now = this._getNow();

            var _bufferSize = this._bufferSize;
            var _windowTime = this._windowTime;
            var _events = this._events;
            var eventsCount = _events.length;
            var spliceCount = 0;

            while (spliceCount < eventsCount) {
              if (now - _events[spliceCount].time < _windowTime) {
                break;
              }

              spliceCount++;
            }

            if (eventsCount > _bufferSize) {
              spliceCount = Math.max(spliceCount, eventsCount - _bufferSize);
            }

            if (spliceCount > 0) {
              _events.splice(0, spliceCount);
            }

            return _events;
          }
        }]);

        return ReplaySubject;
      }(_Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"]);

      var ReplayEvent = function ReplayEvent(time, value) {
        _classCallCheck2(this, ReplayEvent);

        this.time = time;
        this.value = value;
      }; //# sourceMappingURL=ReplaySubject.js.map

      /***/

    },

    /***/
    "kEOa":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/bn.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function kEOa(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Bengali [bn]
      //! author : Kaushik Gandhi : https://github.com/kaushikgandhi
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var symbolMap = {
          1: '১',
          2: '২',
          3: '৩',
          4: '৪',
          5: '৫',
          6: '৬',
          7: '৭',
          8: '৮',
          9: '৯',
          0: '০'
        },
            numberMap = {
          '১': '1',
          '২': '2',
          '৩': '3',
          '৪': '4',
          '৫': '5',
          '৬': '6',
          '৭': '7',
          '৮': '8',
          '৯': '9',
          '০': '0'
        };
        var bn = moment.defineLocale('bn', {
          months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),
          monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),
          weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),
          weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
          weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),
          longDateFormat: {
            LT: 'A h:mm সময়',
            LTS: 'A h:mm:ss সময়',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm সময়',
            LLLL: 'dddd, D MMMM YYYY, A h:mm সময়'
          },
          calendar: {
            sameDay: '[আজ] LT',
            nextDay: '[আগামীকাল] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[গতকাল] LT',
            lastWeek: '[গত] dddd, LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s পরে',
            past: '%s আগে',
            s: 'কয়েক সেকেন্ড',
            ss: '%d সেকেন্ড',
            m: 'এক মিনিট',
            mm: '%d মিনিট',
            h: 'এক ঘন্টা',
            hh: '%d ঘন্টা',
            d: 'এক দিন',
            dd: '%d দিন',
            M: 'এক মাস',
            MM: '%d মাস',
            y: 'এক বছর',
            yy: '%d বছর'
          },
          preparse: function preparse(string) {
            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
              return numberMap[match];
            });
          },
          postformat: function postformat(string) {
            return string.replace(/\d/g, function (match) {
              return symbolMap[match];
            });
          },
          meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === 'রাত' && hour >= 4 || meridiem === 'দুপুর' && hour < 5 || meridiem === 'বিকাল') {
              return hour + 12;
            } else {
              return hour;
            }
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 4) {
              return 'রাত';
            } else if (hour < 10) {
              return 'সকাল';
            } else if (hour < 17) {
              return 'দুপুর';
            } else if (hour < 20) {
              return 'বিকাল';
            } else {
              return 'রাত';
            }
          },
          week: {
            dow: 0,
            // Sunday is the first day of the week.
            doy: 6 // The week that contains Jan 6th is the first week of the year.

          }
        });
        return bn;
      });
      /***/

    },

    /***/
    "kJWO":
    /*!******************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/symbol/observable.js ***!
      \******************************************************************/

    /*! exports provided: observable */

    /***/
    function kJWO(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "observable", function () {
        return observable;
      });

      var observable = function () {
        return typeof Symbol === 'function' && Symbol.observable || '@@observable';
      }(); //# sourceMappingURL=observable.js.map

      /***/

    },

    /***/
    "kOpN":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/zh-tw.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function kOpN(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Chinese (Taiwan) [zh-tw]
      //! author : Ben : https://github.com/ben-lin
      //! author : Chris Lam : https://github.com/hehachris
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var zhTw = moment.defineLocale('zh-tw', {
          months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
          monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
          weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
          weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),
          weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY/MM/DD',
            LL: 'YYYY年M月D日',
            LLL: 'YYYY年M月D日 HH:mm',
            LLLL: 'YYYY年M月D日dddd HH:mm',
            l: 'YYYY/M/D',
            ll: 'YYYY年M月D日',
            lll: 'YYYY年M月D日 HH:mm',
            llll: 'YYYY年M月D日dddd HH:mm'
          },
          meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
              return hour;
            } else if (meridiem === '中午') {
              return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === '下午' || meridiem === '晚上') {
              return hour + 12;
            }
          },
          meridiem: function meridiem(hour, minute, isLower) {
            var hm = hour * 100 + minute;

            if (hm < 600) {
              return '凌晨';
            } else if (hm < 900) {
              return '早上';
            } else if (hm < 1130) {
              return '上午';
            } else if (hm < 1230) {
              return '中午';
            } else if (hm < 1800) {
              return '下午';
            } else {
              return '晚上';
            }
          },
          calendar: {
            sameDay: '[今天] LT',
            nextDay: '[明天] LT',
            nextWeek: '[下]dddd LT',
            lastDay: '[昨天] LT',
            lastWeek: '[上]dddd LT',
            sameElse: 'L'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
          ordinal: function ordinal(number, period) {
            switch (period) {
              case 'd':
              case 'D':
              case 'DDD':
                return number + '日';

              case 'M':
                return number + '月';

              case 'w':
              case 'W':
                return number + '週';

              default:
                return number;
            }
          },
          relativeTime: {
            future: '%s後',
            past: '%s前',
            s: '幾秒',
            ss: '%d 秒',
            m: '1 分鐘',
            mm: '%d 分鐘',
            h: '1 小時',
            hh: '%d 小時',
            d: '1 天',
            dd: '%d 天',
            M: '1 個月',
            MM: '%d 個月',
            y: '1 年',
            yy: '%d 年'
          }
        });
        return zhTw;
      });
      /***/

    },

    /***/
    "kU1M":
    /*!*******************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/operators/index.js ***!
      \*******************************************************/

    /*! exports provided: audit, auditTime, buffer, bufferCount, bufferTime, bufferToggle, bufferWhen, catchError, combineAll, combineLatest, concat, concatAll, concatMap, concatMapTo, count, debounce, debounceTime, defaultIfEmpty, delay, delayWhen, dematerialize, distinct, distinctUntilChanged, distinctUntilKeyChanged, elementAt, endWith, every, exhaust, exhaustMap, expand, filter, finalize, find, findIndex, first, groupBy, ignoreElements, isEmpty, last, map, mapTo, materialize, max, merge, mergeAll, mergeMap, flatMap, mergeMapTo, mergeScan, min, multicast, observeOn, onErrorResumeNext, pairwise, partition, pluck, publish, publishBehavior, publishLast, publishReplay, race, reduce, repeat, repeatWhen, retry, retryWhen, refCount, sample, sampleTime, scan, sequenceEqual, share, shareReplay, single, skip, skipLast, skipUntil, skipWhile, startWith, subscribeOn, switchAll, switchMap, switchMapTo, take, takeLast, takeUntil, takeWhile, tap, throttle, throttleTime, throwIfEmpty, timeInterval, timeout, timeoutWith, timestamp, toArray, window, windowCount, windowTime, windowToggle, windowWhen, withLatestFrom, zip, zipAll */

    /***/
    function kU1M(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony import */


      var _internal_operators_audit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../internal/operators/audit */
      "tnsW");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "audit", function () {
        return _internal_operators_audit__WEBPACK_IMPORTED_MODULE_0__["audit"];
      });
      /* harmony import */


      var _internal_operators_auditTime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../internal/operators/auditTime */
      "3UWI");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "auditTime", function () {
        return _internal_operators_auditTime__WEBPACK_IMPORTED_MODULE_1__["auditTime"];
      });
      /* harmony import */


      var _internal_operators_buffer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../internal/operators/buffer */
      "p9/F");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "buffer", function () {
        return _internal_operators_buffer__WEBPACK_IMPORTED_MODULE_2__["buffer"];
      });
      /* harmony import */


      var _internal_operators_bufferCount__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ../internal/operators/bufferCount */
      "9M8c");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "bufferCount", function () {
        return _internal_operators_bufferCount__WEBPACK_IMPORTED_MODULE_3__["bufferCount"];
      });
      /* harmony import */


      var _internal_operators_bufferTime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ../internal/operators/bufferTime */
      "OsX3");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "bufferTime", function () {
        return _internal_operators_bufferTime__WEBPACK_IMPORTED_MODULE_4__["bufferTime"];
      });
      /* harmony import */


      var _internal_operators_bufferToggle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! ../internal/operators/bufferToggle */
      "FD9M");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "bufferToggle", function () {
        return _internal_operators_bufferToggle__WEBPACK_IMPORTED_MODULE_5__["bufferToggle"];
      });
      /* harmony import */


      var _internal_operators_bufferWhen__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! ../internal/operators/bufferWhen */
      "PfrF");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "bufferWhen", function () {
        return _internal_operators_bufferWhen__WEBPACK_IMPORTED_MODULE_6__["bufferWhen"];
      });
      /* harmony import */


      var _internal_operators_catchError__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! ../internal/operators/catchError */
      "JIr8");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "catchError", function () {
        return _internal_operators_catchError__WEBPACK_IMPORTED_MODULE_7__["catchError"];
      });
      /* harmony import */


      var _internal_operators_combineAll__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(
      /*! ../internal/operators/combineAll */
      "7wxJ");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "combineAll", function () {
        return _internal_operators_combineAll__WEBPACK_IMPORTED_MODULE_8__["combineAll"];
      });
      /* harmony import */


      var _internal_operators_combineLatest__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(
      /*! ../internal/operators/combineLatest */
      "fFD9");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "combineLatest", function () {
        return _internal_operators_combineLatest__WEBPACK_IMPORTED_MODULE_9__["combineLatest"];
      });
      /* harmony import */


      var _internal_operators_concat__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(
      /*! ../internal/operators/concat */
      "f29J");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "concat", function () {
        return _internal_operators_concat__WEBPACK_IMPORTED_MODULE_10__["concat"];
      });
      /* harmony import */


      var _internal_operators_concatAll__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(
      /*! ../internal/operators/concatAll */
      "0EUg");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "concatAll", function () {
        return _internal_operators_concatAll__WEBPACK_IMPORTED_MODULE_11__["concatAll"];
      });
      /* harmony import */


      var _internal_operators_concatMap__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(
      /*! ../internal/operators/concatMap */
      "bOdf");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "concatMap", function () {
        return _internal_operators_concatMap__WEBPACK_IMPORTED_MODULE_12__["concatMap"];
      });
      /* harmony import */


      var _internal_operators_concatMapTo__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(
      /*! ../internal/operators/concatMapTo */
      "q7zd");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "concatMapTo", function () {
        return _internal_operators_concatMapTo__WEBPACK_IMPORTED_MODULE_13__["concatMapTo"];
      });
      /* harmony import */


      var _internal_operators_count__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(
      /*! ../internal/operators/count */
      "HrJb");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "count", function () {
        return _internal_operators_count__WEBPACK_IMPORTED_MODULE_14__["count"];
      });
      /* harmony import */


      var _internal_operators_debounce__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(
      /*! ../internal/operators/debounce */
      "6eBy");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "debounce", function () {
        return _internal_operators_debounce__WEBPACK_IMPORTED_MODULE_15__["debounce"];
      });
      /* harmony import */


      var _internal_operators_debounceTime__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(
      /*! ../internal/operators/debounceTime */
      "Kj3r");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "debounceTime", function () {
        return _internal_operators_debounceTime__WEBPACK_IMPORTED_MODULE_16__["debounceTime"];
      });
      /* harmony import */


      var _internal_operators_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(
      /*! ../internal/operators/defaultIfEmpty */
      "xbPD");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "defaultIfEmpty", function () {
        return _internal_operators_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_17__["defaultIfEmpty"];
      });
      /* harmony import */


      var _internal_operators_delay__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(
      /*! ../internal/operators/delay */
      "3E0/");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "delay", function () {
        return _internal_operators_delay__WEBPACK_IMPORTED_MODULE_18__["delay"];
      });
      /* harmony import */


      var _internal_operators_delayWhen__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(
      /*! ../internal/operators/delayWhen */
      "coGc");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "delayWhen", function () {
        return _internal_operators_delayWhen__WEBPACK_IMPORTED_MODULE_19__["delayWhen"];
      });
      /* harmony import */


      var _internal_operators_dematerialize__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(
      /*! ../internal/operators/dematerialize */
      "kgNN");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "dematerialize", function () {
        return _internal_operators_dematerialize__WEBPACK_IMPORTED_MODULE_20__["dematerialize"];
      });
      /* harmony import */


      var _internal_operators_distinct__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(
      /*! ../internal/operators/distinct */
      "02Lk");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "distinct", function () {
        return _internal_operators_distinct__WEBPACK_IMPORTED_MODULE_21__["distinct"];
      });
      /* harmony import */


      var _internal_operators_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(
      /*! ../internal/operators/distinctUntilChanged */
      "/uUt");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "distinctUntilChanged", function () {
        return _internal_operators_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_22__["distinctUntilChanged"];
      });
      /* harmony import */


      var _internal_operators_distinctUntilKeyChanged__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(
      /*! ../internal/operators/distinctUntilKeyChanged */
      "PZkE");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "distinctUntilKeyChanged", function () {
        return _internal_operators_distinctUntilKeyChanged__WEBPACK_IMPORTED_MODULE_23__["distinctUntilKeyChanged"];
      });
      /* harmony import */


      var _internal_operators_elementAt__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(
      /*! ../internal/operators/elementAt */
      "9ihq");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "elementAt", function () {
        return _internal_operators_elementAt__WEBPACK_IMPORTED_MODULE_24__["elementAt"];
      });
      /* harmony import */


      var _internal_operators_endWith__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(
      /*! ../internal/operators/endWith */
      "0Pi8");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "endWith", function () {
        return _internal_operators_endWith__WEBPACK_IMPORTED_MODULE_25__["endWith"];
      });
      /* harmony import */


      var _internal_operators_every__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(
      /*! ../internal/operators/every */
      "Gi4w");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "every", function () {
        return _internal_operators_every__WEBPACK_IMPORTED_MODULE_26__["every"];
      });
      /* harmony import */


      var _internal_operators_exhaust__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(
      /*! ../internal/operators/exhaust */
      "zt7V");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "exhaust", function () {
        return _internal_operators_exhaust__WEBPACK_IMPORTED_MODULE_27__["exhaust"];
      });
      /* harmony import */


      var _internal_operators_exhaustMap__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(
      /*! ../internal/operators/exhaustMap */
      "XqQ8");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "exhaustMap", function () {
        return _internal_operators_exhaustMap__WEBPACK_IMPORTED_MODULE_28__["exhaustMap"];
      });
      /* harmony import */


      var _internal_operators_expand__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(
      /*! ../internal/operators/expand */
      "FQpF");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "expand", function () {
        return _internal_operators_expand__WEBPACK_IMPORTED_MODULE_29__["expand"];
      });
      /* harmony import */


      var _internal_operators_filter__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(
      /*! ../internal/operators/filter */
      "pLZG");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "filter", function () {
        return _internal_operators_filter__WEBPACK_IMPORTED_MODULE_30__["filter"];
      });
      /* harmony import */


      var _internal_operators_finalize__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(
      /*! ../internal/operators/finalize */
      "nYR2");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "finalize", function () {
        return _internal_operators_finalize__WEBPACK_IMPORTED_MODULE_31__["finalize"];
      });
      /* harmony import */


      var _internal_operators_find__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(
      /*! ../internal/operators/find */
      "cBqT");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "find", function () {
        return _internal_operators_find__WEBPACK_IMPORTED_MODULE_32__["find"];
      });
      /* harmony import */


      var _internal_operators_findIndex__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(
      /*! ../internal/operators/findIndex */
      "K7De");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "findIndex", function () {
        return _internal_operators_findIndex__WEBPACK_IMPORTED_MODULE_33__["findIndex"];
      });
      /* harmony import */


      var _internal_operators_first__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(
      /*! ../internal/operators/first */
      "SxV6");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "first", function () {
        return _internal_operators_first__WEBPACK_IMPORTED_MODULE_34__["first"];
      });
      /* harmony import */


      var _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(
      /*! ../internal/operators/groupBy */
      "OQgR");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "groupBy", function () {
        return _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_35__["groupBy"];
      });
      /* harmony import */


      var _internal_operators_ignoreElements__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(
      /*! ../internal/operators/ignoreElements */
      "4A3s");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "ignoreElements", function () {
        return _internal_operators_ignoreElements__WEBPACK_IMPORTED_MODULE_36__["ignoreElements"];
      });
      /* harmony import */


      var _internal_operators_isEmpty__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(
      /*! ../internal/operators/isEmpty */
      "m2j4");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "isEmpty", function () {
        return _internal_operators_isEmpty__WEBPACK_IMPORTED_MODULE_37__["isEmpty"];
      });
      /* harmony import */


      var _internal_operators_last__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(
      /*! ../internal/operators/last */
      "NJ9Y");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "last", function () {
        return _internal_operators_last__WEBPACK_IMPORTED_MODULE_38__["last"];
      });
      /* harmony import */


      var _internal_operators_map__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(
      /*! ../internal/operators/map */
      "lJxs");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "map", function () {
        return _internal_operators_map__WEBPACK_IMPORTED_MODULE_39__["map"];
      });
      /* harmony import */


      var _internal_operators_mapTo__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(
      /*! ../internal/operators/mapTo */
      "CqXF");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "mapTo", function () {
        return _internal_operators_mapTo__WEBPACK_IMPORTED_MODULE_40__["mapTo"];
      });
      /* harmony import */


      var _internal_operators_materialize__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(
      /*! ../internal/operators/materialize */
      "dkDA");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "materialize", function () {
        return _internal_operators_materialize__WEBPACK_IMPORTED_MODULE_41__["materialize"];
      });
      /* harmony import */


      var _internal_operators_max__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(
      /*! ../internal/operators/max */
      "yI9Y");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "max", function () {
        return _internal_operators_max__WEBPACK_IMPORTED_MODULE_42__["max"];
      });
      /* harmony import */


      var _internal_operators_merge__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(
      /*! ../internal/operators/merge */
      "q92s");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "merge", function () {
        return _internal_operators_merge__WEBPACK_IMPORTED_MODULE_43__["merge"];
      });
      /* harmony import */


      var _internal_operators_mergeAll__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(
      /*! ../internal/operators/mergeAll */
      "bHdf");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "mergeAll", function () {
        return _internal_operators_mergeAll__WEBPACK_IMPORTED_MODULE_44__["mergeAll"];
      });
      /* harmony import */


      var _internal_operators_mergeMap__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(
      /*! ../internal/operators/mergeMap */
      "5+tZ");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "mergeMap", function () {
        return _internal_operators_mergeMap__WEBPACK_IMPORTED_MODULE_45__["mergeMap"];
      });
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "flatMap", function () {
        return _internal_operators_mergeMap__WEBPACK_IMPORTED_MODULE_45__["flatMap"];
      });
      /* harmony import */


      var _internal_operators_mergeMapTo__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(
      /*! ../internal/operators/mergeMapTo */
      "UXbc");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "mergeMapTo", function () {
        return _internal_operators_mergeMapTo__WEBPACK_IMPORTED_MODULE_46__["mergeMapTo"];
      });
      /* harmony import */


      var _internal_operators_mergeScan__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(
      /*! ../internal/operators/mergeScan */
      "51Bx");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "mergeScan", function () {
        return _internal_operators_mergeScan__WEBPACK_IMPORTED_MODULE_47__["mergeScan"];
      });
      /* harmony import */


      var _internal_operators_min__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(
      /*! ../internal/operators/min */
      "FZB8");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "min", function () {
        return _internal_operators_min__WEBPACK_IMPORTED_MODULE_48__["min"];
      });
      /* harmony import */


      var _internal_operators_multicast__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(
      /*! ../internal/operators/multicast */
      "oB13");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "multicast", function () {
        return _internal_operators_multicast__WEBPACK_IMPORTED_MODULE_49__["multicast"];
      });
      /* harmony import */


      var _internal_operators_observeOn__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(
      /*! ../internal/operators/observeOn */
      "pxpQ");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "observeOn", function () {
        return _internal_operators_observeOn__WEBPACK_IMPORTED_MODULE_50__["observeOn"];
      });
      /* harmony import */


      var _internal_operators_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(
      /*! ../internal/operators/onErrorResumeNext */
      "uTdr");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "onErrorResumeNext", function () {
        return _internal_operators_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_51__["onErrorResumeNext"];
      });
      /* harmony import */


      var _internal_operators_pairwise__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(
      /*! ../internal/operators/pairwise */
      "Zy1z");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "pairwise", function () {
        return _internal_operators_pairwise__WEBPACK_IMPORTED_MODULE_52__["pairwise"];
      });
      /* harmony import */


      var _internal_operators_partition__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(
      /*! ../internal/operators/partition */
      "A3iJ");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "partition", function () {
        return _internal_operators_partition__WEBPACK_IMPORTED_MODULE_53__["partition"];
      });
      /* harmony import */


      var _internal_operators_pluck__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(
      /*! ../internal/operators/pluck */
      "wO+i");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "pluck", function () {
        return _internal_operators_pluck__WEBPACK_IMPORTED_MODULE_54__["pluck"];
      });
      /* harmony import */


      var _internal_operators_publish__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(
      /*! ../internal/operators/publish */
      "NfdI");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "publish", function () {
        return _internal_operators_publish__WEBPACK_IMPORTED_MODULE_55__["publish"];
      });
      /* harmony import */


      var _internal_operators_publishBehavior__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(
      /*! ../internal/operators/publishBehavior */
      "UGaM");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "publishBehavior", function () {
        return _internal_operators_publishBehavior__WEBPACK_IMPORTED_MODULE_56__["publishBehavior"];
      });
      /* harmony import */


      var _internal_operators_publishLast__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(
      /*! ../internal/operators/publishLast */
      "qZ0a");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "publishLast", function () {
        return _internal_operators_publishLast__WEBPACK_IMPORTED_MODULE_57__["publishLast"];
      });
      /* harmony import */


      var _internal_operators_publishReplay__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(
      /*! ../internal/operators/publishReplay */
      "05l1");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "publishReplay", function () {
        return _internal_operators_publishReplay__WEBPACK_IMPORTED_MODULE_58__["publishReplay"];
      });
      /* harmony import */


      var _internal_operators_race__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(
      /*! ../internal/operators/race */
      "4f8F");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "race", function () {
        return _internal_operators_race__WEBPACK_IMPORTED_MODULE_59__["race"];
      });
      /* harmony import */


      var _internal_operators_reduce__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(
      /*! ../internal/operators/reduce */
      "128B");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "reduce", function () {
        return _internal_operators_reduce__WEBPACK_IMPORTED_MODULE_60__["reduce"];
      });
      /* harmony import */


      var _internal_operators_repeat__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(
      /*! ../internal/operators/repeat */
      "/d8p");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "repeat", function () {
        return _internal_operators_repeat__WEBPACK_IMPORTED_MODULE_61__["repeat"];
      });
      /* harmony import */


      var _internal_operators_repeatWhen__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(
      /*! ../internal/operators/repeatWhen */
      "Gqsl");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "repeatWhen", function () {
        return _internal_operators_repeatWhen__WEBPACK_IMPORTED_MODULE_62__["repeatWhen"];
      });
      /* harmony import */


      var _internal_operators_retry__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(
      /*! ../internal/operators/retry */
      "un/a");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "retry", function () {
        return _internal_operators_retry__WEBPACK_IMPORTED_MODULE_63__["retry"];
      });
      /* harmony import */


      var _internal_operators_retryWhen__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(
      /*! ../internal/operators/retryWhen */
      "MtjB");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "retryWhen", function () {
        return _internal_operators_retryWhen__WEBPACK_IMPORTED_MODULE_64__["retryWhen"];
      });
      /* harmony import */


      var _internal_operators_refCount__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(
      /*! ../internal/operators/refCount */
      "x+ZX");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "refCount", function () {
        return _internal_operators_refCount__WEBPACK_IMPORTED_MODULE_65__["refCount"];
      });
      /* harmony import */


      var _internal_operators_sample__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(
      /*! ../internal/operators/sample */
      "c6ID");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "sample", function () {
        return _internal_operators_sample__WEBPACK_IMPORTED_MODULE_66__["sample"];
      });
      /* harmony import */


      var _internal_operators_sampleTime__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(
      /*! ../internal/operators/sampleTime */
      "1Ykd");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "sampleTime", function () {
        return _internal_operators_sampleTime__WEBPACK_IMPORTED_MODULE_67__["sampleTime"];
      });
      /* harmony import */


      var _internal_operators_scan__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(
      /*! ../internal/operators/scan */
      "Kqap");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "scan", function () {
        return _internal_operators_scan__WEBPACK_IMPORTED_MODULE_68__["scan"];
      });
      /* harmony import */


      var _internal_operators_sequenceEqual__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(
      /*! ../internal/operators/sequenceEqual */
      "Zyez");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "sequenceEqual", function () {
        return _internal_operators_sequenceEqual__WEBPACK_IMPORTED_MODULE_69__["sequenceEqual"];
      });
      /* harmony import */


      var _internal_operators_share__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(
      /*! ../internal/operators/share */
      "w1tV");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "share", function () {
        return _internal_operators_share__WEBPACK_IMPORTED_MODULE_70__["share"];
      });
      /* harmony import */


      var _internal_operators_shareReplay__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(
      /*! ../internal/operators/shareReplay */
      "UXun");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "shareReplay", function () {
        return _internal_operators_shareReplay__WEBPACK_IMPORTED_MODULE_71__["shareReplay"];
      });
      /* harmony import */


      var _internal_operators_single__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(
      /*! ../internal/operators/single */
      "cx9U");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "single", function () {
        return _internal_operators_single__WEBPACK_IMPORTED_MODULE_72__["single"];
      });
      /* harmony import */


      var _internal_operators_skip__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(
      /*! ../internal/operators/skip */
      "zP0r");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "skip", function () {
        return _internal_operators_skip__WEBPACK_IMPORTED_MODULE_73__["skip"];
      });
      /* harmony import */


      var _internal_operators_skipLast__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(
      /*! ../internal/operators/skipLast */
      "kagm");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "skipLast", function () {
        return _internal_operators_skipLast__WEBPACK_IMPORTED_MODULE_74__["skipLast"];
      });
      /* harmony import */


      var _internal_operators_skipUntil__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(
      /*! ../internal/operators/skipUntil */
      "vqkR");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "skipUntil", function () {
        return _internal_operators_skipUntil__WEBPACK_IMPORTED_MODULE_75__["skipUntil"];
      });
      /* harmony import */


      var _internal_operators_skipWhile__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(
      /*! ../internal/operators/skipWhile */
      "32Ea");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "skipWhile", function () {
        return _internal_operators_skipWhile__WEBPACK_IMPORTED_MODULE_76__["skipWhile"];
      });
      /* harmony import */


      var _internal_operators_startWith__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(
      /*! ../internal/operators/startWith */
      "JX91");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "startWith", function () {
        return _internal_operators_startWith__WEBPACK_IMPORTED_MODULE_77__["startWith"];
      });
      /* harmony import */


      var _internal_operators_subscribeOn__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(
      /*! ../internal/operators/subscribeOn */
      "tf+s");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "subscribeOn", function () {
        return _internal_operators_subscribeOn__WEBPACK_IMPORTED_MODULE_78__["subscribeOn"];
      });
      /* harmony import */


      var _internal_operators_switchAll__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(
      /*! ../internal/operators/switchAll */
      "Y6wi");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "switchAll", function () {
        return _internal_operators_switchAll__WEBPACK_IMPORTED_MODULE_79__["switchAll"];
      });
      /* harmony import */


      var _internal_operators_switchMap__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(
      /*! ../internal/operators/switchMap */
      "eIep");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "switchMap", function () {
        return _internal_operators_switchMap__WEBPACK_IMPORTED_MODULE_80__["switchMap"];
      });
      /* harmony import */


      var _internal_operators_switchMapTo__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(
      /*! ../internal/operators/switchMapTo */
      "aGrj");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "switchMapTo", function () {
        return _internal_operators_switchMapTo__WEBPACK_IMPORTED_MODULE_81__["switchMapTo"];
      });
      /* harmony import */


      var _internal_operators_take__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(
      /*! ../internal/operators/take */
      "IzEk");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "take", function () {
        return _internal_operators_take__WEBPACK_IMPORTED_MODULE_82__["take"];
      });
      /* harmony import */


      var _internal_operators_takeLast__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(
      /*! ../internal/operators/takeLast */
      "BFxc");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "takeLast", function () {
        return _internal_operators_takeLast__WEBPACK_IMPORTED_MODULE_83__["takeLast"];
      });
      /* harmony import */


      var _internal_operators_takeUntil__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(
      /*! ../internal/operators/takeUntil */
      "1G5W");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "takeUntil", function () {
        return _internal_operators_takeUntil__WEBPACK_IMPORTED_MODULE_84__["takeUntil"];
      });
      /* harmony import */


      var _internal_operators_takeWhile__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(
      /*! ../internal/operators/takeWhile */
      "GJmQ");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "takeWhile", function () {
        return _internal_operators_takeWhile__WEBPACK_IMPORTED_MODULE_85__["takeWhile"];
      });
      /* harmony import */


      var _internal_operators_tap__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(
      /*! ../internal/operators/tap */
      "vkgz");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "tap", function () {
        return _internal_operators_tap__WEBPACK_IMPORTED_MODULE_86__["tap"];
      });
      /* harmony import */


      var _internal_operators_throttle__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(
      /*! ../internal/operators/throttle */
      "yuhW");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "throttle", function () {
        return _internal_operators_throttle__WEBPACK_IMPORTED_MODULE_87__["throttle"];
      });
      /* harmony import */


      var _internal_operators_throttleTime__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(
      /*! ../internal/operators/throttleTime */
      "gcYM");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "throttleTime", function () {
        return _internal_operators_throttleTime__WEBPACK_IMPORTED_MODULE_88__["throttleTime"];
      });
      /* harmony import */


      var _internal_operators_throwIfEmpty__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(
      /*! ../internal/operators/throwIfEmpty */
      "XDbj");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "throwIfEmpty", function () {
        return _internal_operators_throwIfEmpty__WEBPACK_IMPORTED_MODULE_89__["throwIfEmpty"];
      });
      /* harmony import */


      var _internal_operators_timeInterval__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(
      /*! ../internal/operators/timeInterval */
      "4hIw");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "timeInterval", function () {
        return _internal_operators_timeInterval__WEBPACK_IMPORTED_MODULE_90__["timeInterval"];
      });
      /* harmony import */


      var _internal_operators_timeout__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(
      /*! ../internal/operators/timeout */
      "tS1D");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "timeout", function () {
        return _internal_operators_timeout__WEBPACK_IMPORTED_MODULE_91__["timeout"];
      });
      /* harmony import */


      var _internal_operators_timeoutWith__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(
      /*! ../internal/operators/timeoutWith */
      "syX2");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "timeoutWith", function () {
        return _internal_operators_timeoutWith__WEBPACK_IMPORTED_MODULE_92__["timeoutWith"];
      });
      /* harmony import */


      var _internal_operators_timestamp__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(
      /*! ../internal/operators/timestamp */
      "r0WS");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "timestamp", function () {
        return _internal_operators_timestamp__WEBPACK_IMPORTED_MODULE_93__["timestamp"];
      });
      /* harmony import */


      var _internal_operators_toArray__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(
      /*! ../internal/operators/toArray */
      "IAdc");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "toArray", function () {
        return _internal_operators_toArray__WEBPACK_IMPORTED_MODULE_94__["toArray"];
      });
      /* harmony import */


      var _internal_operators_window__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(
      /*! ../internal/operators/window */
      "mk5/");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "window", function () {
        return _internal_operators_window__WEBPACK_IMPORTED_MODULE_95__["window"];
      });
      /* harmony import */


      var _internal_operators_windowCount__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(
      /*! ../internal/operators/windowCount */
      "lpKW");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "windowCount", function () {
        return _internal_operators_windowCount__WEBPACK_IMPORTED_MODULE_96__["windowCount"];
      });
      /* harmony import */


      var _internal_operators_windowTime__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(
      /*! ../internal/operators/windowTime */
      "UHp3");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "windowTime", function () {
        return _internal_operators_windowTime__WEBPACK_IMPORTED_MODULE_97__["windowTime"];
      });
      /* harmony import */


      var _internal_operators_windowToggle__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(
      /*! ../internal/operators/windowToggle */
      "sTY7");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "windowToggle", function () {
        return _internal_operators_windowToggle__WEBPACK_IMPORTED_MODULE_98__["windowToggle"];
      });
      /* harmony import */


      var _internal_operators_windowWhen__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(
      /*! ../internal/operators/windowWhen */
      "pXlZ");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "windowWhen", function () {
        return _internal_operators_windowWhen__WEBPACK_IMPORTED_MODULE_99__["windowWhen"];
      });
      /* harmony import */


      var _internal_operators_withLatestFrom__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(
      /*! ../internal/operators/withLatestFrom */
      "zp1y");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "withLatestFrom", function () {
        return _internal_operators_withLatestFrom__WEBPACK_IMPORTED_MODULE_100__["withLatestFrom"];
      });
      /* harmony import */


      var _internal_operators_zip__WEBPACK_IMPORTED_MODULE_101__ = __webpack_require__(
      /*! ../internal/operators/zip */
      "GjHo");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "zip", function () {
        return _internal_operators_zip__WEBPACK_IMPORTED_MODULE_101__["zip"];
      });
      /* harmony import */


      var _internal_operators_zipAll__WEBPACK_IMPORTED_MODULE_102__ = __webpack_require__(
      /*! ../internal/operators/zipAll */
      "JmF6");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "zipAll", function () {
        return _internal_operators_zipAll__WEBPACK_IMPORTED_MODULE_102__["zipAll"];
      }); //# sourceMappingURL=index.js.map

      /***/

    },

    /***/
    "kVK+":
    /*!***************************************!*\
      !*** ./node_modules/ieee754/index.js ***!
      \***************************************/

    /*! no static exports found */

    /***/
    function kVK(module, exports) {
      exports.read = function (buffer, offset, isLE, mLen, nBytes) {
        var e, m;
        var eLen = nBytes * 8 - mLen - 1;
        var eMax = (1 << eLen) - 1;
        var eBias = eMax >> 1;
        var nBits = -7;
        var i = isLE ? nBytes - 1 : 0;
        var d = isLE ? -1 : 1;
        var s = buffer[offset + i];
        i += d;
        e = s & (1 << -nBits) - 1;
        s >>= -nBits;
        nBits += eLen;

        for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}

        m = e & (1 << -nBits) - 1;
        e >>= -nBits;
        nBits += mLen;

        for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}

        if (e === 0) {
          e = 1 - eBias;
        } else if (e === eMax) {
          return m ? NaN : (s ? -1 : 1) * Infinity;
        } else {
          m = m + Math.pow(2, mLen);
          e = e - eBias;
        }

        return (s ? -1 : 1) * m * Math.pow(2, e - mLen);
      };

      exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
        var e, m, c;
        var eLen = nBytes * 8 - mLen - 1;
        var eMax = (1 << eLen) - 1;
        var eBias = eMax >> 1;
        var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;
        var i = isLE ? 0 : nBytes - 1;
        var d = isLE ? 1 : -1;
        var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;
        value = Math.abs(value);

        if (isNaN(value) || value === Infinity) {
          m = isNaN(value) ? 1 : 0;
          e = eMax;
        } else {
          e = Math.floor(Math.log(value) / Math.LN2);

          if (value * (c = Math.pow(2, -e)) < 1) {
            e--;
            c *= 2;
          }

          if (e + eBias >= 1) {
            value += rt / c;
          } else {
            value += rt * Math.pow(2, 1 - eBias);
          }

          if (value * c >= 2) {
            e++;
            c /= 2;
          }

          if (e + eBias >= eMax) {
            m = 0;
            e = eMax;
          } else if (e + eBias >= 1) {
            m = (value * c - 1) * Math.pow(2, mLen);
            e = e + eBias;
          } else {
            m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
            e = 0;
          }
        }

        for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}

        e = e << mLen | m;
        eLen += mLen;

        for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}

        buffer[offset + i - d] |= s * 128;
      };
      /***/

    },

    /***/
    "kagm":
    /*!*******************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/skipLast.js ***!
      \*******************************************************************/

    /*! exports provided: skipLast */

    /***/
    function kagm(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "skipLast", function () {
        return skipLast;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");
      /* harmony import */


      var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/ArgumentOutOfRangeError */
      "4I5i");

      function skipLast(count) {
        return function (source) {
          return source.lift(new SkipLastOperator(count));
        };
      }

      var SkipLastOperator = /*#__PURE__*/function () {
        function SkipLastOperator(_skipCount) {
          _classCallCheck2(this, SkipLastOperator);

          this._skipCount = _skipCount;

          if (this._skipCount < 0) {
            throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_1__["ArgumentOutOfRangeError"]();
          }
        }

        _createClass2(SkipLastOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            if (this._skipCount === 0) {
              return source.subscribe(new _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"](subscriber));
            } else {
              return source.subscribe(new SkipLastSubscriber(subscriber, this._skipCount));
            }
          }
        }]);

        return SkipLastOperator;
      }();

      var SkipLastSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_34) {
        _inherits2(SkipLastSubscriber, _Subscriber__WEBPACK_34);

        var _super340 = _createSuper(SkipLastSubscriber);

        function SkipLastSubscriber(destination, _skipCount) {
          var _this781;

          _classCallCheck2(this, SkipLastSubscriber);

          _this781 = _super340.call(this, destination);
          _this781._skipCount = _skipCount;
          _this781._count = 0;
          _this781._ring = new Array(_skipCount);
          return _this781;
        }

        _createClass2(SkipLastSubscriber, [{
          key: "_next",
          value: function _next(value) {
            var skipCount = this._skipCount;
            var count = this._count++;

            if (count < skipCount) {
              this._ring[count] = value;
            } else {
              var currentIndex = count % skipCount;
              var ring = this._ring;
              var oldValue = ring[currentIndex];
              ring[currentIndex] = value;
              this.destination.next(oldValue);
            }
          }
        }]);

        return SkipLastSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=skipLast.js.map

      /***/

    },

    /***/
    "kgNN":
    /*!************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/dematerialize.js ***!
      \************************************************************************/

    /*! exports provided: dematerialize */

    /***/
    function kgNN(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "dematerialize", function () {
        return dematerialize;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");

      function dematerialize() {
        return function dematerializeOperatorFunction(source) {
          return source.lift(new DeMaterializeOperator());
        };
      }

      var DeMaterializeOperator = /*#__PURE__*/function () {
        function DeMaterializeOperator() {
          _classCallCheck2(this, DeMaterializeOperator);
        }

        _createClass2(DeMaterializeOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new DeMaterializeSubscriber(subscriber));
          }
        }]);

        return DeMaterializeOperator;
      }();

      var DeMaterializeSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_35) {
        _inherits2(DeMaterializeSubscriber, _Subscriber__WEBPACK_35);

        var _super341 = _createSuper(DeMaterializeSubscriber);

        function DeMaterializeSubscriber(destination) {
          _classCallCheck2(this, DeMaterializeSubscriber);

          return _super341.call(this, destination);
        }

        _createClass2(DeMaterializeSubscriber, [{
          key: "_next",
          value: function _next(value) {
            value.observe(this.destination);
          }
        }]);

        return DeMaterializeSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=dematerialize.js.map

      /***/

    },

    /***/
    "kizl":
    /*!************************************************************************!*\
      !*** ./node_modules/ng2-scroll-to-el/__ivy_ngcc__/scrollTo.service.js ***!
      \************************************************************************/

    /*! exports provided: ScrollToService */

    /***/
    function kizl(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ScrollToService", function () {
        return ScrollToService;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var rxjs_Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! rxjs/Subject */
      "8yf6");
      /* harmony import */


      var rxjs_Subject__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(rxjs_Subject__WEBPACK_IMPORTED_MODULE_1__);

      var ScrollToService = function () {
        function ScrollToService() {}

        ScrollToService.prototype.scrollTo = function (element, duration, offset) {
          if (duration === void 0) {
            duration = 500;
          }

          if (offset === void 0) {
            offset = 0;
          }

          var subject = new rxjs_Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]();

          if (typeof element === 'string') {
            var el = document.querySelector(element);
            this.scrollToElement(el, duration, offset, subject);
          } else if (element instanceof HTMLElement) {
            this.scrollToElement(element, duration, offset, subject);
          } else {
            subject.error('I don\'t find element');
          }

          return subject;
        };

        ScrollToService.prototype.scrollToElement = function (el, duration, offset, subject) {
          if (el) {
            var viewportOffset = el.getBoundingClientRect();
            var offsetTop = viewportOffset.top + window.pageYOffset;
            this.doScrolling(offsetTop + offset, duration, subject);
          } else {
            subject.error('I don\'t find element');
          }

          return subject;
        };

        ScrollToService.prototype.doScrolling = function (elementY, duration, subject) {
          var startingY = window.pageYOffset;
          var diff = elementY - startingY;
          var start;
          window.requestAnimationFrame(function step(timestamp) {
            start = !start ? timestamp : start;
            var time = timestamp - start;
            var percent = Math.min(time / duration, 1);
            window.scrollTo(0, startingY + diff * percent);

            if (time < duration) {
              window.requestAnimationFrame(step);
              subject.next({});
            } else {
              subject.complete();
            }
          });
        };

        ScrollToService.ɵfac = function ScrollToService_Factory(t) {
          return new (t || ScrollToService)();
        };

        ScrollToService.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
          token: ScrollToService,
          factory: function factory(t) {
            return ScrollToService.ɵfac(t);
          }
        });

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ScrollToService, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
          }], function () {
            return [];
          }, null);
        })();

        return ScrollToService;
      }();
      /** @nocollapse */


      ScrollToService.ctorParameters = function () {
        return [];
      }; //# sourceMappingURL=scrollTo.service.js.map

      /***/

    },

    /***/
    "kmnG":
    /*!****************************************************************************!*\
      !*** ./node_modules/@angular/material/__ivy_ngcc__/fesm2015/form-field.js ***!
      \****************************************************************************/

    /*! exports provided: MAT_ERROR, MAT_FORM_FIELD, MAT_FORM_FIELD_DEFAULT_OPTIONS, MAT_PREFIX, MAT_SUFFIX, MatError, MatFormField, MatFormFieldControl, MatFormFieldModule, MatHint, MatLabel, MatPlaceholder, MatPrefix, MatSuffix, _MAT_HINT, getMatFormFieldDuplicatedHintError, getMatFormFieldMissingControlError, getMatFormFieldPlaceholderConflictError, matFormFieldAnimations */

    /***/
    function kmnG(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_ERROR", function () {
        return MAT_ERROR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_FORM_FIELD", function () {
        return MAT_FORM_FIELD;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_FORM_FIELD_DEFAULT_OPTIONS", function () {
        return MAT_FORM_FIELD_DEFAULT_OPTIONS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_PREFIX", function () {
        return MAT_PREFIX;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_SUFFIX", function () {
        return MAT_SUFFIX;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatError", function () {
        return MatError;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatFormField", function () {
        return MatFormField;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatFormFieldControl", function () {
        return MatFormFieldControl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatFormFieldModule", function () {
        return MatFormFieldModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatHint", function () {
        return MatHint;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatLabel", function () {
        return MatLabel;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatPlaceholder", function () {
        return MatPlaceholder;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatPrefix", function () {
        return MatPrefix;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatSuffix", function () {
        return MatSuffix;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "_MAT_HINT", function () {
        return _MAT_HINT;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getMatFormFieldDuplicatedHintError", function () {
        return getMatFormFieldDuplicatedHintError;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getMatFormFieldMissingControlError", function () {
        return getMatFormFieldMissingControlError;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getMatFormFieldPlaceholderConflictError", function () {
        return getMatFormFieldPlaceholderConflictError;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "matFormFieldAnimations", function () {
        return matFormFieldAnimations;
      });
      /* harmony import */


      var _angular_cdk_observers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/cdk/observers */
      "GU7r");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_material_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/material/core */
      "FKr1");
      /* harmony import */


      var _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/cdk/bidi */
      "cH1L");
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var _angular_animations__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(
      /*! @angular/animations */
      "R0Ic");
      /* harmony import */


      var _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(
      /*! @angular/cdk/platform */
      "nLfN");
      /* harmony import */


      var _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(
      /*! @angular/platform-browser/animations */
      "R1ws");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var _c0 = ["underline"];
      var _c1 = ["connectionContainer"];
      var _c2 = ["inputContainer"];
      var _c3 = ["label"];

      function MatFormField_ng_container_3_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "div", 14);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](2, "div", 15);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](3, "div", 16);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](4, "div", 17);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](5, "div", 18);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](6, "div", 15);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](7, "div", 16);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](8, "div", 17);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerEnd"]();
        }
      }

      function MatFormField_div_4_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 19);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵprojection"](1, 1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }
      }

      function MatFormField_label_9_ng_container_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵprojection"](1, 2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](2, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerEnd"]();
        }

        if (rf & 2) {
          var ctx_r10 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](3);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](ctx_r10._control.placeholder);
        }
      }

      function MatFormField_label_9_ng_content_3_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵprojection"](0, 3, ["*ngSwitchCase", "true"]);
        }
      }

      function MatFormField_label_9_span_4_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "span", 23);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1, " *");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }
      }

      function MatFormField_label_9_Template(rf, ctx) {
        if (rf & 1) {
          var _r14 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "label", 20, 21);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("cdkObserveContent", function MatFormField_label_9_Template_label_cdkObserveContent_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r14);

            var ctx_r13 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]();

            return ctx_r13.updateOutlineGap();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](2, MatFormField_label_9_ng_container_2_Template, 4, 1, "ng-container", 12);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](3, MatFormField_label_9_ng_content_3_Template, 1, 0, "ng-content", 12);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](4, MatFormField_label_9_span_4_Template, 2, 0, "span", 22);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵclassProp"]("mat-empty", ctx_r4._control.empty && !ctx_r4._shouldAlwaysFloat())("mat-form-field-empty", ctx_r4._control.empty && !ctx_r4._shouldAlwaysFloat())("mat-accent", ctx_r4.color == "accent")("mat-warn", ctx_r4.color == "warn");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("cdkObserveContentDisabled", ctx_r4.appearance != "outline")("id", ctx_r4._labelId)("ngSwitch", ctx_r4._hasLabel());

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵattribute"]("for", ctx_r4._control.id)("aria-owns", ctx_r4._control.id);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngSwitchCase", false);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngSwitchCase", true);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", !ctx_r4.hideRequiredMarker && ctx_r4._control.required && !ctx_r4._control.disabled);
        }
      }

      function MatFormField_div_10_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 24);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵprojection"](1, 4);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }
      }

      function MatFormField_div_11_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 25, 26);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](2, "span", 27);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵclassProp"]("mat-accent", ctx_r6.color == "accent")("mat-warn", ctx_r6.color == "warn");
        }
      }

      function MatFormField_div_13_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div");

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵprojection"](1, 5);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("@transitionMessages", ctx_r7._subscriptAnimationState);
        }
      }

      function MatFormField_div_14_div_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 31);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r16 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("id", ctx_r16._hintLabelId);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](ctx_r16.hintLabel);
        }
      }

      function MatFormField_div_14_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 28);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](1, MatFormField_div_14_div_1_Template, 2, 2, "div", 29);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵprojection"](2, 6);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](3, "div", 30);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵprojection"](4, 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r8 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("@transitionMessages", ctx_r8._subscriptAnimationState);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r8.hintLabel);
        }
      }

      var _c4 = ["*", [["", "matPrefix", ""]], [["mat-placeholder"]], [["mat-label"]], [["", "matSuffix", ""]], [["mat-error"]], [["mat-hint", 3, "align", "end"]], [["mat-hint", "align", "end"]]];
      var _c5 = ["*", "[matPrefix]", "mat-placeholder", "mat-label", "[matSuffix]", "mat-error", "mat-hint:not([align='end'])", "mat-hint[align='end']"];
      var nextUniqueId = 0;
      /**
       * Injection token that can be used to reference instances of `MatError`. It serves as
       * alternative token to the actual `MatError` class which could cause unnecessary
       * retention of the class and its directive metadata.
       */

      var MAT_ERROR = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["InjectionToken"]('MatError');
      /** Single error message to be shown underneath the form field. */

      var MatError = function MatError() {
        _classCallCheck2(this, MatError);

        this.id = "mat-error-".concat(nextUniqueId++);
      };

      MatError.ɵfac = function MatError_Factory(t) {
        return new (t || MatError)();
      };

      MatError.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineDirective"]({
        type: MatError,
        selectors: [["mat-error"]],
        hostAttrs: ["role", "alert", 1, "mat-error"],
        hostVars: 1,
        hostBindings: function MatError_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵattribute"]("id", ctx.id);
          }
        },
        inputs: {
          id: "id"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵProvidersFeature"]([{
          provide: MAT_ERROR,
          useExisting: MatError
        }])]
      });
      MatError.propDecorators = {
        id: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](MatError, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Directive"],
          args: [{
            selector: 'mat-error',
            host: {
              'class': 'mat-error',
              'role': 'alert',
              '[attr.id]': 'id'
            },
            providers: [{
              provide: MAT_ERROR,
              useExisting: MatError
            }]
          }]
        }], function () {
          return [];
        }, {
          id: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Animations used by the MatFormField.
       * @docs-private
       */


      var matFormFieldAnimations = {
        /** Animation that transitions the form field's error and hint messages. */
        transitionMessages: Object(_angular_animations__WEBPACK_IMPORTED_MODULE_8__["trigger"])('transitionMessages', [// TODO(mmalerba): Use angular animations for label animation as well.
        Object(_angular_animations__WEBPACK_IMPORTED_MODULE_8__["state"])('enter', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_8__["style"])({
          opacity: 1,
          transform: 'translateY(0%)'
        })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_8__["transition"])('void => enter', [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_8__["style"])({
          opacity: 0,
          transform: 'translateY(-5px)'
        }), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_8__["animate"])('300ms cubic-bezier(0.55, 0, 0.55, 0.2)')])])
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** An interface which allows a control to work inside of a `MatFormField`. */

      var MatFormFieldControl = function MatFormFieldControl() {
        _classCallCheck2(this, MatFormFieldControl);
      };

      MatFormFieldControl.ɵfac = function MatFormFieldControl_Factory(t) {
        return new (t || MatFormFieldControl)();
      };

      MatFormFieldControl.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineDirective"]({
        type: MatFormFieldControl
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](MatFormFieldControl, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Directive"]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** @docs-private */


      function getMatFormFieldPlaceholderConflictError() {
        return Error('Placeholder attribute and child element were both specified.');
      }
      /** @docs-private */


      function getMatFormFieldDuplicatedHintError(align) {
        return Error("A hint was already declared for 'align=\"".concat(align, "\"'."));
      }
      /** @docs-private */


      function getMatFormFieldMissingControlError() {
        return Error('mat-form-field must contain a MatFormFieldControl.');
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var nextUniqueId$1 = 0;
      /**
       * Injection token that can be used to reference instances of `MatHint`. It serves as
       * alternative token to the actual `MatHint` class which could cause unnecessary
       * retention of the class and its directive metadata.
       *
       * *Note*: This is not part of the public API as the MDC-based form-field will not
       * need a lightweight token for `MatHint` and we want to reduce breaking changes.
       */

      var _MAT_HINT = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["InjectionToken"]('MatHint');
      /** Hint text to be shown underneath the form field control. */


      var MatHint = function MatHint() {
        _classCallCheck2(this, MatHint);

        /** Whether to align the hint label at the start or end of the line. */
        this.align = 'start';
        /** Unique ID for the hint. Used for the aria-describedby on the form field control. */

        this.id = "mat-hint-".concat(nextUniqueId$1++);
      };

      MatHint.ɵfac = function MatHint_Factory(t) {
        return new (t || MatHint)();
      };

      MatHint.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineDirective"]({
        type: MatHint,
        selectors: [["mat-hint"]],
        hostAttrs: [1, "mat-hint"],
        hostVars: 4,
        hostBindings: function MatHint_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵattribute"]("id", ctx.id)("align", null);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵclassProp"]("mat-form-field-hint-end", ctx.align === "end");
          }
        },
        inputs: {
          align: "align",
          id: "id"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵProvidersFeature"]([{
          provide: _MAT_HINT,
          useExisting: MatHint
        }])]
      });
      MatHint.propDecorators = {
        align: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
        }],
        id: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](MatHint, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Directive"],
          args: [{
            selector: 'mat-hint',
            host: {
              'class': 'mat-hint',
              '[class.mat-form-field-hint-end]': 'align === "end"',
              '[attr.id]': 'id',
              // Remove align attribute to prevent it from interfering with layout.
              '[attr.align]': 'null'
            },
            providers: [{
              provide: _MAT_HINT,
              useExisting: MatHint
            }]
          }]
        }], function () {
          return [];
        }, {
          align: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          id: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** The floating label for a `mat-form-field`. */


      var MatLabel = function MatLabel() {
        _classCallCheck2(this, MatLabel);
      };

      MatLabel.ɵfac = function MatLabel_Factory(t) {
        return new (t || MatLabel)();
      };

      MatLabel.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineDirective"]({
        type: MatLabel,
        selectors: [["mat-label"]]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](MatLabel, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Directive"],
          args: [{
            selector: 'mat-label'
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * The placeholder text for an `MatFormField`.
       * @deprecated Use `<mat-label>` to specify the label and the `placeholder` attribute to specify the
       *     placeholder.
       * @breaking-change 8.0.0
       */


      var MatPlaceholder = function MatPlaceholder() {
        _classCallCheck2(this, MatPlaceholder);
      };

      MatPlaceholder.ɵfac = function MatPlaceholder_Factory(t) {
        return new (t || MatPlaceholder)();
      };

      MatPlaceholder.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineDirective"]({
        type: MatPlaceholder,
        selectors: [["mat-placeholder"]]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](MatPlaceholder, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Directive"],
          args: [{
            selector: 'mat-placeholder'
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Injection token that can be used to reference instances of `MatPrefix`. It serves as
       * alternative token to the actual `MatPrefix` class which could cause unnecessary
       * retention of the class and its directive metadata.
       */


      var MAT_PREFIX = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["InjectionToken"]('MatPrefix');
      /** Prefix to be placed in front of the form field. */

      var MatPrefix = function MatPrefix() {
        _classCallCheck2(this, MatPrefix);
      };

      MatPrefix.ɵfac = function MatPrefix_Factory(t) {
        return new (t || MatPrefix)();
      };

      MatPrefix.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineDirective"]({
        type: MatPrefix,
        selectors: [["", "matPrefix", ""]],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵProvidersFeature"]([{
          provide: MAT_PREFIX,
          useExisting: MatPrefix
        }])]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](MatPrefix, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Directive"],
          args: [{
            selector: '[matPrefix]',
            providers: [{
              provide: MAT_PREFIX,
              useExisting: MatPrefix
            }]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Injection token that can be used to reference instances of `MatSuffix`. It serves as
       * alternative token to the actual `MatSuffix` class which could cause unnecessary
       * retention of the class and its directive metadata.
       */


      var MAT_SUFFIX = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["InjectionToken"]('MatSuffix');
      /** Suffix to be placed at the end of the form field. */

      var MatSuffix = function MatSuffix() {
        _classCallCheck2(this, MatSuffix);
      };

      MatSuffix.ɵfac = function MatSuffix_Factory(t) {
        return new (t || MatSuffix)();
      };

      MatSuffix.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineDirective"]({
        type: MatSuffix,
        selectors: [["", "matSuffix", ""]],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵProvidersFeature"]([{
          provide: MAT_SUFFIX,
          useExisting: MatSuffix
        }])]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](MatSuffix, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Directive"],
          args: [{
            selector: '[matSuffix]',
            providers: [{
              provide: MAT_SUFFIX,
              useExisting: MatSuffix
            }]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var nextUniqueId$2 = 0;
      var floatingLabelScale = 0.75;
      var outlineGapPadding = 5;
      /**
       * Boilerplate for applying mixins to MatFormField.
       * @docs-private
       */

      var MatFormFieldBase = function MatFormFieldBase(_elementRef) {
        _classCallCheck2(this, MatFormFieldBase);

        this._elementRef = _elementRef;
      };
      /**
       * Base class to which we're applying the form field mixins.
       * @docs-private
       */


      var _MatFormFieldMixinBase = Object(_angular_material_core__WEBPACK_IMPORTED_MODULE_3__["mixinColor"])(MatFormFieldBase, 'primary');
      /**
       * Injection token that can be used to configure the
       * default options for all form field within an app.
       */


      var MAT_FORM_FIELD_DEFAULT_OPTIONS = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["InjectionToken"]('MAT_FORM_FIELD_DEFAULT_OPTIONS');
      /**
       * Injection token that can be used to inject an instances of `MatFormField`. It serves
       * as alternative token to the actual `MatFormField` class which would cause unnecessary
       * retention of the `MatFormField` class and its component metadata.
       */

      var MAT_FORM_FIELD = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["InjectionToken"]('MatFormField');
      /** Container for form controls that applies Material Design styling and behavior. */

      var MatFormField = /*#__PURE__*/function (_MatFormFieldMixinBas) {
        _inherits2(MatFormField, _MatFormFieldMixinBas);

        var _super342 = _createSuper(MatFormField);

        function MatFormField(_elementRef, _changeDetectorRef,
        /**
         * @deprecated `_labelOptions` parameter no longer being used. To be removed.
         * @breaking-change 12.0.0
         */
        // Use `ElementRef` here so Angular has something to inject.
        _labelOptions, _dir, _defaults, _platform, _ngZone, _animationMode) {
          var _this782;

          _classCallCheck2(this, MatFormField);

          _this782 = _super342.call(this, _elementRef);
          _this782._elementRef = _elementRef;
          _this782._changeDetectorRef = _changeDetectorRef;
          _this782._dir = _dir;
          _this782._defaults = _defaults;
          _this782._platform = _platform;
          _this782._ngZone = _ngZone;
          /**
           * Whether the outline gap needs to be calculated
           * immediately on the next change detection run.
           */

          _this782._outlineGapCalculationNeededImmediately = false;
          /** Whether the outline gap needs to be calculated next time the zone has stabilized. */

          _this782._outlineGapCalculationNeededOnStable = false;
          _this782._destroyed = new rxjs__WEBPACK_IMPORTED_MODULE_6__["Subject"]();
          /** Override for the logic that disables the label animation in certain cases. */

          _this782._showAlwaysAnimate = false;
          /** State of the mat-hint and mat-error animations. */

          _this782._subscriptAnimationState = '';
          _this782._hintLabel = ''; // Unique id for the hint label.

          _this782._hintLabelId = "mat-hint-".concat(nextUniqueId$2++); // Unique id for the label element.

          _this782._labelId = "mat-form-field-label-".concat(nextUniqueId$2++);
          _this782.floatLabel = _this782._getDefaultFloatLabelState();
          _this782._animationsEnabled = _animationMode !== 'NoopAnimations'; // Set the default through here so we invoke the setter on the first run.

          _this782.appearance = _defaults && _defaults.appearance ? _defaults.appearance : 'legacy';
          _this782._hideRequiredMarker = _defaults && _defaults.hideRequiredMarker != null ? _defaults.hideRequiredMarker : false;
          return _this782;
        }
        /** The form-field appearance style. */


        _createClass2(MatFormField, [{
          key: "appearance",
          get: function get() {
            return this._appearance;
          },
          set: function set(value) {
            var oldValue = this._appearance;
            this._appearance = value || this._defaults && this._defaults.appearance || 'legacy';

            if (this._appearance === 'outline' && oldValue !== value) {
              this._outlineGapCalculationNeededOnStable = true;
            }
          }
          /** Whether the required marker should be hidden. */

        }, {
          key: "hideRequiredMarker",
          get: function get() {
            return this._hideRequiredMarker;
          },
          set: function set(value) {
            this._hideRequiredMarker = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceBooleanProperty"])(value);
          }
          /** Whether the floating label should always float or not. */

        }, {
          key: "_shouldAlwaysFloat",
          value: function _shouldAlwaysFloat() {
            return this.floatLabel === 'always' && !this._showAlwaysAnimate;
          }
          /** Whether the label can float or not. */

        }, {
          key: "_canLabelFloat",
          value: function _canLabelFloat() {
            return this.floatLabel !== 'never';
          }
          /** Text for the form field hint. */

        }, {
          key: "hintLabel",
          get: function get() {
            return this._hintLabel;
          },
          set: function set(value) {
            this._hintLabel = value;

            this._processHints();
          }
          /**
           * Whether the label should always float, never float or float as the user types.
           *
           * Note: only the legacy appearance supports the `never` option. `never` was originally added as a
           * way to make the floating label emulate the behavior of a standard input placeholder. However
           * the form field now supports both floating labels and placeholders. Therefore in the non-legacy
           * appearances the `never` option has been disabled in favor of just using the placeholder.
           */

        }, {
          key: "floatLabel",
          get: function get() {
            return this.appearance !== 'legacy' && this._floatLabel === 'never' ? 'auto' : this._floatLabel;
          },
          set: function set(value) {
            if (value !== this._floatLabel) {
              this._floatLabel = value || this._getDefaultFloatLabelState();

              this._changeDetectorRef.markForCheck();
            }
          }
        }, {
          key: "_control",
          get: function get() {
            // TODO(crisbeto): we need this workaround in order to support both Ivy and ViewEngine.
            //  We should clean this up once Ivy is the default renderer.
            return this._explicitFormFieldControl || this._controlNonStatic || this._controlStatic;
          },
          set: function set(value) {
            this._explicitFormFieldControl = value;
          }
          /**
           * Gets the id of the label element. If no label is present, returns `null`.
           */

        }, {
          key: "getLabelId",
          value: function getLabelId() {
            return this._hasFloatingLabel() ? this._labelId : null;
          }
          /**
           * Gets an ElementRef for the element that a overlay attached to the form-field should be
           * positioned relative to.
           */

        }, {
          key: "getConnectedOverlayOrigin",
          value: function getConnectedOverlayOrigin() {
            return this._connectionContainerRef || this._elementRef;
          }
        }, {
          key: "ngAfterContentInit",
          value: function ngAfterContentInit() {
            var _this783 = this;

            this._validateControlChild();

            var control = this._control;

            if (control.controlType) {
              this._elementRef.nativeElement.classList.add("mat-form-field-type-".concat(control.controlType));
            } // Subscribe to changes in the child control state in order to update the form field UI.


            control.stateChanges.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_7__["startWith"])(null)).subscribe(function () {
              _this783._validatePlaceholders();

              _this783._syncDescribedByIds();

              _this783._changeDetectorRef.markForCheck();
            }); // Run change detection if the value changes.

            if (control.ngControl && control.ngControl.valueChanges) {
              control.ngControl.valueChanges.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_7__["takeUntil"])(this._destroyed)).subscribe(function () {
                return _this783._changeDetectorRef.markForCheck();
              });
            } // Note that we have to run outside of the `NgZone` explicitly,
            // in order to avoid throwing users into an infinite loop
            // if `zone-patch-rxjs` is included.


            this._ngZone.runOutsideAngular(function () {
              _this783._ngZone.onStable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_7__["takeUntil"])(_this783._destroyed)).subscribe(function () {
                if (_this783._outlineGapCalculationNeededOnStable) {
                  _this783.updateOutlineGap();
                }
              });
            }); // Run change detection and update the outline if the suffix or prefix changes.


            Object(rxjs__WEBPACK_IMPORTED_MODULE_6__["merge"])(this._prefixChildren.changes, this._suffixChildren.changes).subscribe(function () {
              _this783._outlineGapCalculationNeededOnStable = true;

              _this783._changeDetectorRef.markForCheck();
            }); // Re-validate when the number of hints changes.

            this._hintChildren.changes.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_7__["startWith"])(null)).subscribe(function () {
              _this783._processHints();

              _this783._changeDetectorRef.markForCheck();
            }); // Update the aria-described by when the number of errors changes.


            this._errorChildren.changes.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_7__["startWith"])(null)).subscribe(function () {
              _this783._syncDescribedByIds();

              _this783._changeDetectorRef.markForCheck();
            });

            if (this._dir) {
              this._dir.change.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_7__["takeUntil"])(this._destroyed)).subscribe(function () {
                if (typeof requestAnimationFrame === 'function') {
                  _this783._ngZone.runOutsideAngular(function () {
                    requestAnimationFrame(function () {
                      return _this783.updateOutlineGap();
                    });
                  });
                } else {
                  _this783.updateOutlineGap();
                }
              });
            }
          }
        }, {
          key: "ngAfterContentChecked",
          value: function ngAfterContentChecked() {
            this._validateControlChild();

            if (this._outlineGapCalculationNeededImmediately) {
              this.updateOutlineGap();
            }
          }
        }, {
          key: "ngAfterViewInit",
          value: function ngAfterViewInit() {
            // Avoid animations on load.
            this._subscriptAnimationState = 'enter';

            this._changeDetectorRef.detectChanges();
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._destroyed.next();

            this._destroyed.complete();
          }
          /** Determines whether a class from the NgControl should be forwarded to the host element. */

        }, {
          key: "_shouldForward",
          value: function _shouldForward(prop) {
            var ngControl = this._control ? this._control.ngControl : null;
            return ngControl && ngControl[prop];
          }
        }, {
          key: "_hasPlaceholder",
          value: function _hasPlaceholder() {
            return !!(this._control && this._control.placeholder || this._placeholderChild);
          }
        }, {
          key: "_hasLabel",
          value: function _hasLabel() {
            return !!(this._labelChildNonStatic || this._labelChildStatic);
          }
        }, {
          key: "_shouldLabelFloat",
          value: function _shouldLabelFloat() {
            return this._canLabelFloat() && (this._control && this._control.shouldLabelFloat || this._shouldAlwaysFloat());
          }
        }, {
          key: "_hideControlPlaceholder",
          value: function _hideControlPlaceholder() {
            // In the legacy appearance the placeholder is promoted to a label if no label is given.
            return this.appearance === 'legacy' && !this._hasLabel() || this._hasLabel() && !this._shouldLabelFloat();
          }
        }, {
          key: "_hasFloatingLabel",
          value: function _hasFloatingLabel() {
            // In the legacy appearance the placeholder is promoted to a label if no label is given.
            return this._hasLabel() || this.appearance === 'legacy' && this._hasPlaceholder();
          }
          /** Determines whether to display hints or errors. */

        }, {
          key: "_getDisplayedMessages",
          value: function _getDisplayedMessages() {
            return this._errorChildren && this._errorChildren.length > 0 && this._control.errorState ? 'error' : 'hint';
          }
          /** Animates the placeholder up and locks it in position. */

        }, {
          key: "_animateAndLockLabel",
          value: function _animateAndLockLabel() {
            var _this784 = this;

            if (this._hasFloatingLabel() && this._canLabelFloat()) {
              // If animations are disabled, we shouldn't go in here,
              // because the `transitionend` will never fire.
              if (this._animationsEnabled && this._label) {
                this._showAlwaysAnimate = true;
                Object(rxjs__WEBPACK_IMPORTED_MODULE_6__["fromEvent"])(this._label.nativeElement, 'transitionend').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_7__["take"])(1)).subscribe(function () {
                  _this784._showAlwaysAnimate = false;
                });
              }

              this.floatLabel = 'always';

              this._changeDetectorRef.markForCheck();
            }
          }
          /**
           * Ensure that there is only one placeholder (either `placeholder` attribute on the child control
           * or child element with the `mat-placeholder` directive).
           */

        }, {
          key: "_validatePlaceholders",
          value: function _validatePlaceholders() {
            if (this._control.placeholder && this._placeholderChild && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw getMatFormFieldPlaceholderConflictError();
            }
          }
          /** Does any extra processing that is required when handling the hints. */

        }, {
          key: "_processHints",
          value: function _processHints() {
            this._validateHints();

            this._syncDescribedByIds();
          }
          /**
           * Ensure that there is a maximum of one of each `<mat-hint>` alignment specified, with the
           * attribute being considered as `align="start"`.
           */

        }, {
          key: "_validateHints",
          value: function _validateHints() {
            var _this785 = this;

            if (this._hintChildren && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              var startHint;
              var endHint;

              this._hintChildren.forEach(function (hint) {
                if (hint.align === 'start') {
                  if (startHint || _this785.hintLabel) {
                    throw getMatFormFieldDuplicatedHintError('start');
                  }

                  startHint = hint;
                } else if (hint.align === 'end') {
                  if (endHint) {
                    throw getMatFormFieldDuplicatedHintError('end');
                  }

                  endHint = hint;
                }
              });
            }
          }
          /** Gets the default float label state. */

        }, {
          key: "_getDefaultFloatLabelState",
          value: function _getDefaultFloatLabelState() {
            return this._defaults && this._defaults.floatLabel || 'auto';
          }
          /**
           * Sets the list of element IDs that describe the child control. This allows the control to update
           * its `aria-describedby` attribute accordingly.
           */

        }, {
          key: "_syncDescribedByIds",
          value: function _syncDescribedByIds() {
            if (this._control) {
              var ids = []; // TODO(wagnermaciel): Remove the type check when we find the root cause of this bug.

              if (this._control.userAriaDescribedBy && typeof this._control.userAriaDescribedBy === 'string') {
                ids.push.apply(ids, _toConsumableArray(this._control.userAriaDescribedBy.split(' ')));
              }

              if (this._getDisplayedMessages() === 'hint') {
                var startHint = this._hintChildren ? this._hintChildren.find(function (hint) {
                  return hint.align === 'start';
                }) : null;
                var endHint = this._hintChildren ? this._hintChildren.find(function (hint) {
                  return hint.align === 'end';
                }) : null;

                if (startHint) {
                  ids.push(startHint.id);
                } else if (this._hintLabel) {
                  ids.push(this._hintLabelId);
                }

                if (endHint) {
                  ids.push(endHint.id);
                }
              } else if (this._errorChildren) {
                ids.push.apply(ids, _toConsumableArray(this._errorChildren.map(function (error) {
                  return error.id;
                })));
              }

              this._control.setDescribedByIds(ids);
            }
          }
          /** Throws an error if the form field's control is missing. */

        }, {
          key: "_validateControlChild",
          value: function _validateControlChild() {
            if (!this._control && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw getMatFormFieldMissingControlError();
            }
          }
          /**
           * Updates the width and position of the gap in the outline. Only relevant for the outline
           * appearance.
           */

        }, {
          key: "updateOutlineGap",
          value: function updateOutlineGap() {
            var labelEl = this._label ? this._label.nativeElement : null;

            if (this.appearance !== 'outline' || !labelEl || !labelEl.children.length || !labelEl.textContent.trim()) {
              return;
            }

            if (!this._platform.isBrowser) {
              // getBoundingClientRect isn't available on the server.
              return;
            } // If the element is not present in the DOM, the outline gap will need to be calculated
            // the next time it is checked and in the DOM.


            if (!this._isAttachedToDOM()) {
              this._outlineGapCalculationNeededImmediately = true;
              return;
            }

            var startWidth = 0;
            var gapWidth = 0;
            var container = this._connectionContainerRef.nativeElement;
            var startEls = container.querySelectorAll('.mat-form-field-outline-start');
            var gapEls = container.querySelectorAll('.mat-form-field-outline-gap');

            if (this._label && this._label.nativeElement.children.length) {
              var containerRect = container.getBoundingClientRect(); // If the container's width and height are zero, it means that the element is
              // invisible and we can't calculate the outline gap. Mark the element as needing
              // to be checked the next time the zone stabilizes. We can't do this immediately
              // on the next change detection, because even if the element becomes visible,
              // the `ClientRect` won't be reclaculated immediately. We reset the
              // `_outlineGapCalculationNeededImmediately` flag some we don't run the checks twice.

              if (containerRect.width === 0 && containerRect.height === 0) {
                this._outlineGapCalculationNeededOnStable = true;
                this._outlineGapCalculationNeededImmediately = false;
                return;
              }

              var containerStart = this._getStartEnd(containerRect);

              var labelChildren = labelEl.children;

              var labelStart = this._getStartEnd(labelChildren[0].getBoundingClientRect());

              var labelWidth = 0;

              for (var i = 0; i < labelChildren.length; i++) {
                labelWidth += labelChildren[i].offsetWidth;
              }

              startWidth = Math.abs(labelStart - containerStart) - outlineGapPadding;
              gapWidth = labelWidth > 0 ? labelWidth * floatingLabelScale + outlineGapPadding * 2 : 0;
            }

            for (var _i45 = 0; _i45 < startEls.length; _i45++) {
              startEls[_i45].style.width = "".concat(startWidth, "px");
            }

            for (var _i46 = 0; _i46 < gapEls.length; _i46++) {
              gapEls[_i46].style.width = "".concat(gapWidth, "px");
            }

            this._outlineGapCalculationNeededOnStable = this._outlineGapCalculationNeededImmediately = false;
          }
          /** Gets the start end of the rect considering the current directionality. */

        }, {
          key: "_getStartEnd",
          value: function _getStartEnd(rect) {
            return this._dir && this._dir.value === 'rtl' ? rect.right : rect.left;
          }
          /** Checks whether the form field is attached to the DOM. */

        }, {
          key: "_isAttachedToDOM",
          value: function _isAttachedToDOM() {
            var element = this._elementRef.nativeElement;

            if (element.getRootNode) {
              var rootNode = element.getRootNode(); // If the element is inside the DOM the root node will be either the document
              // or the closest shadow root, otherwise it'll be the element itself.

              return rootNode && rootNode !== element;
            } // Otherwise fall back to checking if it's in the document. This doesn't account for
            // shadow DOM, however browser that support shadow DOM should support `getRootNode` as well.


            return document.documentElement.contains(element);
          }
        }]);

        return MatFormField;
      }(_MatFormFieldMixinBase);

      MatFormField.ɵfac = function MatFormField_Factory(t) {
        return new (t || MatFormField)(_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_2__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_2__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_2__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_4__["Directionality"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](MAT_FORM_FIELD_DEFAULT_OPTIONS, 8), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__["Platform"]), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_2__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_10__["ANIMATION_MODULE_TYPE"], 8));
      };

      MatFormField.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineComponent"]({
        type: MatFormField,
        selectors: [["mat-form-field"]],
        contentQueries: function MatFormField_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵcontentQuery"](dirIndex, MatFormFieldControl, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵcontentQuery"](dirIndex, MatFormFieldControl, 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵcontentQuery"](dirIndex, MatLabel, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵcontentQuery"](dirIndex, MatLabel, 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵcontentQuery"](dirIndex, MatPlaceholder, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵcontentQuery"](dirIndex, MAT_ERROR, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵcontentQuery"](dirIndex, _MAT_HINT, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵcontentQuery"](dirIndex, MAT_PREFIX, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵcontentQuery"](dirIndex, MAT_SUFFIX, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵloadQuery"]()) && (ctx._controlNonStatic = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵloadQuery"]()) && (ctx._controlStatic = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵloadQuery"]()) && (ctx._labelChildNonStatic = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵloadQuery"]()) && (ctx._labelChildStatic = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵloadQuery"]()) && (ctx._placeholderChild = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵloadQuery"]()) && (ctx._errorChildren = _t);
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵloadQuery"]()) && (ctx._hintChildren = _t);
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵloadQuery"]()) && (ctx._prefixChildren = _t);
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵloadQuery"]()) && (ctx._suffixChildren = _t);
          }
        },
        viewQuery: function MatFormField_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵviewQuery"](_c0, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵviewQuery"](_c1, 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵviewQuery"](_c2, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵviewQuery"](_c3, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵloadQuery"]()) && (ctx.underlineRef = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵloadQuery"]()) && (ctx._connectionContainerRef = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵloadQuery"]()) && (ctx._inputContainerRef = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵloadQuery"]()) && (ctx._label = _t.first);
          }
        },
        hostAttrs: [1, "mat-form-field"],
        hostVars: 44,
        hostBindings: function MatFormField_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵclassProp"]("mat-form-field-appearance-standard", ctx.appearance == "standard")("mat-form-field-appearance-fill", ctx.appearance == "fill")("mat-form-field-appearance-outline", ctx.appearance == "outline")("mat-form-field-appearance-legacy", ctx.appearance == "legacy")("mat-form-field-invalid", ctx._control.errorState)("mat-form-field-can-float", ctx._canLabelFloat())("mat-form-field-should-float", ctx._shouldLabelFloat())("mat-form-field-has-label", ctx._hasFloatingLabel())("mat-form-field-hide-placeholder", ctx._hideControlPlaceholder())("mat-form-field-disabled", ctx._control.disabled)("mat-form-field-autofilled", ctx._control.autofilled)("mat-focused", ctx._control.focused)("mat-accent", ctx.color == "accent")("mat-warn", ctx.color == "warn")("ng-untouched", ctx._shouldForward("untouched"))("ng-touched", ctx._shouldForward("touched"))("ng-pristine", ctx._shouldForward("pristine"))("ng-dirty", ctx._shouldForward("dirty"))("ng-valid", ctx._shouldForward("valid"))("ng-invalid", ctx._shouldForward("invalid"))("ng-pending", ctx._shouldForward("pending"))("_mat-animation-noopable", !ctx._animationsEnabled);
          }
        },
        inputs: {
          color: "color",
          floatLabel: "floatLabel",
          appearance: "appearance",
          hideRequiredMarker: "hideRequiredMarker",
          hintLabel: "hintLabel"
        },
        exportAs: ["matFormField"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵProvidersFeature"]([{
          provide: MAT_FORM_FIELD,
          useExisting: MatFormField
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵInheritDefinitionFeature"]],
        ngContentSelectors: _c5,
        decls: 15,
        vars: 8,
        consts: [[1, "mat-form-field-wrapper"], [1, "mat-form-field-flex", 3, "click"], ["connectionContainer", ""], [4, "ngIf"], ["class", "mat-form-field-prefix", 4, "ngIf"], [1, "mat-form-field-infix"], ["inputContainer", ""], [1, "mat-form-field-label-wrapper"], ["class", "mat-form-field-label", 3, "cdkObserveContentDisabled", "id", "mat-empty", "mat-form-field-empty", "mat-accent", "mat-warn", "ngSwitch", "cdkObserveContent", 4, "ngIf"], ["class", "mat-form-field-suffix", 4, "ngIf"], ["class", "mat-form-field-underline", 4, "ngIf"], [1, "mat-form-field-subscript-wrapper", 3, "ngSwitch"], [4, "ngSwitchCase"], ["class", "mat-form-field-hint-wrapper", 4, "ngSwitchCase"], [1, "mat-form-field-outline"], [1, "mat-form-field-outline-start"], [1, "mat-form-field-outline-gap"], [1, "mat-form-field-outline-end"], [1, "mat-form-field-outline", "mat-form-field-outline-thick"], [1, "mat-form-field-prefix"], [1, "mat-form-field-label", 3, "cdkObserveContentDisabled", "id", "ngSwitch", "cdkObserveContent"], ["label", ""], ["class", "mat-placeholder-required mat-form-field-required-marker", "aria-hidden", "true", 4, "ngIf"], ["aria-hidden", "true", 1, "mat-placeholder-required", "mat-form-field-required-marker"], [1, "mat-form-field-suffix"], [1, "mat-form-field-underline"], ["underline", ""], [1, "mat-form-field-ripple"], [1, "mat-form-field-hint-wrapper"], ["class", "mat-hint", 3, "id", 4, "ngIf"], [1, "mat-form-field-hint-spacer"], [1, "mat-hint", 3, "id"]],
        template: function MatFormField_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵprojectionDef"](_c4);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "div", 1, 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("click", function MatFormField_Template_div_click_1_listener($event) {
              return ctx._control.onContainerClick && ctx._control.onContainerClick($event);
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](3, MatFormField_ng_container_3_Template, 9, 0, "ng-container", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](4, MatFormField_div_4_Template, 2, 0, "div", 4);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](5, "div", 5, 6);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵprojection"](7);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](8, "span", 7);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](9, MatFormField_label_9_Template, 5, 16, "label", 8);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](10, MatFormField_div_10_Template, 2, 0, "div", 9);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](11, MatFormField_div_11_Template, 3, 4, "div", 10);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](12, "div", 11);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](13, MatFormField_div_13_Template, 2, 1, "div", 12);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](14, MatFormField_div_14_Template, 5, 2, "div", 13);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](3);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx.appearance == "outline");

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx._prefixChildren.length);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](5);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx._hasFloatingLabel());

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx._suffixChildren.length);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx.appearance != "outline");

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngSwitch", ctx._getDisplayedMessages());

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngSwitchCase", "error");

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngSwitchCase", "hint");
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgSwitch"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgSwitchCase"], _angular_cdk_observers__WEBPACK_IMPORTED_MODULE_0__["CdkObserveContent"]],
        styles: [".mat-form-field{display:inline-block;position:relative;text-align:left}[dir=rtl] .mat-form-field{text-align:right}.mat-form-field-wrapper{position:relative}.mat-form-field-flex{display:inline-flex;align-items:baseline;box-sizing:border-box;width:100%}.mat-form-field-prefix,.mat-form-field-suffix{white-space:nowrap;flex:none;position:relative}.mat-form-field-infix{display:block;position:relative;flex:auto;min-width:0;width:180px}.cdk-high-contrast-active .mat-form-field-infix{border-image:linear-gradient(transparent, transparent)}.mat-form-field-label-wrapper{position:absolute;left:0;box-sizing:content-box;width:100%;height:100%;overflow:hidden;pointer-events:none}[dir=rtl] .mat-form-field-label-wrapper{left:auto;right:0}.mat-form-field-label{position:absolute;left:0;font:inherit;pointer-events:none;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;transform-origin:0 0;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),color 400ms cubic-bezier(0.25, 0.8, 0.25, 1),width 400ms cubic-bezier(0.25, 0.8, 0.25, 1);display:none}[dir=rtl] .mat-form-field-label{transform-origin:100% 0;left:auto;right:0}.mat-form-field-empty.mat-form-field-label,.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{display:block}.mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{display:none}.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{display:block;transition:none}.mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-input-server[placeholder]:not(:placeholder-shown)+.mat-form-field-label-wrapper .mat-form-field-label{display:none}.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-can-float .mat-input-server[placeholder]:not(:placeholder-shown)+.mat-form-field-label-wrapper .mat-form-field-label{display:block}.mat-form-field-label:not(.mat-form-field-empty){transition:none}.mat-form-field-underline{position:absolute;width:100%;pointer-events:none;transform:scale3d(1, 1.0001, 1)}.mat-form-field-ripple{position:absolute;left:0;width:100%;transform-origin:50%;transform:scaleX(0.5);opacity:0;transition:background-color 300ms cubic-bezier(0.55, 0, 0.55, 0.2)}.mat-form-field.mat-focused .mat-form-field-ripple,.mat-form-field.mat-form-field-invalid .mat-form-field-ripple{opacity:1;transform:none;transition:transform 300ms cubic-bezier(0.25, 0.8, 0.25, 1),opacity 100ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 300ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-subscript-wrapper{position:absolute;box-sizing:border-box;width:100%;overflow:hidden}.mat-form-field-subscript-wrapper .mat-icon,.mat-form-field-label-wrapper .mat-icon{width:1em;height:1em;font-size:inherit;vertical-align:baseline}.mat-form-field-hint-wrapper{display:flex}.mat-form-field-hint-spacer{flex:1 0 1em}.mat-error{display:block}.mat-form-field-control-wrapper{position:relative}.mat-form-field-hint-end{order:1}.mat-form-field._mat-animation-noopable .mat-form-field-label,.mat-form-field._mat-animation-noopable .mat-form-field-ripple{transition:none}\n", ".mat-form-field-appearance-fill .mat-form-field-flex{border-radius:4px 4px 0 0;padding:.75em .75em 0 .75em}.cdk-high-contrast-active .mat-form-field-appearance-fill .mat-form-field-flex{outline:solid 1px}.mat-form-field-appearance-fill .mat-form-field-underline::before{content:\"\";display:block;position:absolute;bottom:0;height:1px;width:100%}.mat-form-field-appearance-fill .mat-form-field-ripple{bottom:0;height:2px}.cdk-high-contrast-active .mat-form-field-appearance-fill .mat-form-field-ripple{height:0;border-top:solid 2px}.mat-form-field-appearance-fill:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{opacity:1;transform:none;transition:opacity 600ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-appearance-fill._mat-animation-noopable:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{transition:none}.mat-form-field-appearance-fill .mat-form-field-subscript-wrapper{padding:0 1em}\n", ".mat-input-element{font:inherit;background:transparent;color:currentColor;border:none;outline:none;padding:0;margin:0;width:100%;max-width:100%;vertical-align:bottom;text-align:inherit;box-sizing:content-box}.mat-input-element:-moz-ui-invalid{box-shadow:none}.mat-input-element::-ms-clear,.mat-input-element::-ms-reveal{display:none}.mat-input-element,.mat-input-element::-webkit-search-cancel-button,.mat-input-element::-webkit-search-decoration,.mat-input-element::-webkit-search-results-button,.mat-input-element::-webkit-search-results-decoration{-webkit-appearance:none}.mat-input-element::-webkit-contacts-auto-fill-button,.mat-input-element::-webkit-caps-lock-indicator,.mat-input-element::-webkit-credentials-auto-fill-button{visibility:hidden}.mat-input-element[type=date],.mat-input-element[type=datetime],.mat-input-element[type=datetime-local],.mat-input-element[type=month],.mat-input-element[type=week],.mat-input-element[type=time]{line-height:1}.mat-input-element[type=date]::after,.mat-input-element[type=datetime]::after,.mat-input-element[type=datetime-local]::after,.mat-input-element[type=month]::after,.mat-input-element[type=week]::after,.mat-input-element[type=time]::after{content:\" \";white-space:pre;width:1px}.mat-input-element::-webkit-inner-spin-button,.mat-input-element::-webkit-calendar-picker-indicator,.mat-input-element::-webkit-clear-button{font-size:.75em}.mat-input-element::placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-input-element::placeholder:-ms-input-placeholder{-ms-user-select:text}.mat-input-element::-moz-placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-input-element::-moz-placeholder:-ms-input-placeholder{-ms-user-select:text}.mat-input-element::-webkit-input-placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-input-element::-webkit-input-placeholder:-ms-input-placeholder{-ms-user-select:text}.mat-input-element:-ms-input-placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-input-element:-ms-input-placeholder:-ms-input-placeholder{-ms-user-select:text}.mat-form-field-hide-placeholder .mat-input-element::placeholder{color:transparent !important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-input-element::-moz-placeholder{color:transparent !important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-input-element::-webkit-input-placeholder{color:transparent !important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-input-element:-ms-input-placeholder{color:transparent !important;-webkit-text-fill-color:transparent;transition:none}textarea.mat-input-element{resize:vertical;overflow:auto}textarea.mat-input-element.cdk-textarea-autosize{resize:none}textarea.mat-input-element{padding:2px 0;margin:-2px 0}select.mat-input-element{-moz-appearance:none;-webkit-appearance:none;position:relative;background-color:transparent;display:inline-flex;box-sizing:border-box;padding-top:1em;top:-1em;margin-bottom:-1em}select.mat-input-element::-ms-expand{display:none}select.mat-input-element::-moz-focus-inner{border:0}select.mat-input-element:not(:disabled){cursor:pointer}select.mat-input-element::-ms-value{color:inherit;background:none}.mat-focused .cdk-high-contrast-active select.mat-input-element::-ms-value{color:inherit}.mat-form-field-type-mat-native-select .mat-form-field-infix::after{content:\"\";width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid;position:absolute;top:50%;right:0;margin-top:-2.5px;pointer-events:none}[dir=rtl] .mat-form-field-type-mat-native-select .mat-form-field-infix::after{right:auto;left:0}.mat-form-field-type-mat-native-select .mat-input-element{padding-right:15px}[dir=rtl] .mat-form-field-type-mat-native-select .mat-input-element{padding-right:0;padding-left:15px}.mat-form-field-type-mat-native-select .mat-form-field-label-wrapper{max-width:calc(100% - 10px)}.mat-form-field-type-mat-native-select.mat-form-field-appearance-outline .mat-form-field-infix::after{margin-top:-5px}.mat-form-field-type-mat-native-select.mat-form-field-appearance-fill .mat-form-field-infix::after{margin-top:-10px}\n", ".mat-form-field-appearance-legacy .mat-form-field-label{transform:perspective(100px);-ms-transform:none}.mat-form-field-appearance-legacy .mat-form-field-prefix .mat-icon,.mat-form-field-appearance-legacy .mat-form-field-suffix .mat-icon{width:1em}.mat-form-field-appearance-legacy .mat-form-field-prefix .mat-icon-button,.mat-form-field-appearance-legacy .mat-form-field-suffix .mat-icon-button{font:inherit;vertical-align:baseline}.mat-form-field-appearance-legacy .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-appearance-legacy .mat-form-field-suffix .mat-icon-button .mat-icon{font-size:inherit}.mat-form-field-appearance-legacy .mat-form-field-underline{height:1px}.cdk-high-contrast-active .mat-form-field-appearance-legacy .mat-form-field-underline{height:0;border-top:solid 1px}.mat-form-field-appearance-legacy .mat-form-field-ripple{top:0;height:2px;overflow:hidden}.cdk-high-contrast-active .mat-form-field-appearance-legacy .mat-form-field-ripple{height:0;border-top:solid 2px}.mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{background-position:0;background-color:transparent}.cdk-high-contrast-active .mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{border-top-style:dotted;border-top-width:2px}.mat-form-field-appearance-legacy.mat-form-field-invalid:not(.mat-focused) .mat-form-field-ripple{height:1px}\n", ".mat-form-field-appearance-outline .mat-form-field-wrapper{margin:.25em 0}.mat-form-field-appearance-outline .mat-form-field-flex{padding:0 .75em 0 .75em;margin-top:-0.25em;position:relative}.mat-form-field-appearance-outline .mat-form-field-prefix,.mat-form-field-appearance-outline .mat-form-field-suffix{top:.25em}.mat-form-field-appearance-outline .mat-form-field-outline{display:flex;position:absolute;top:.25em;left:0;right:0;bottom:0;pointer-events:none}.mat-form-field-appearance-outline .mat-form-field-outline-start,.mat-form-field-appearance-outline .mat-form-field-outline-end{border:1px solid currentColor;min-width:5px}.mat-form-field-appearance-outline .mat-form-field-outline-start{border-radius:5px 0 0 5px;border-right-style:none}[dir=rtl] .mat-form-field-appearance-outline .mat-form-field-outline-start{border-right-style:solid;border-left-style:none;border-radius:0 5px 5px 0}.mat-form-field-appearance-outline .mat-form-field-outline-end{border-radius:0 5px 5px 0;border-left-style:none;flex-grow:1}[dir=rtl] .mat-form-field-appearance-outline .mat-form-field-outline-end{border-left-style:solid;border-right-style:none;border-radius:5px 0 0 5px}.mat-form-field-appearance-outline .mat-form-field-outline-gap{border-radius:.000001px;border:1px solid currentColor;border-left-style:none;border-right-style:none}.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-outline-gap{border-top-color:transparent}.mat-form-field-appearance-outline .mat-form-field-outline-thick{opacity:0}.mat-form-field-appearance-outline .mat-form-field-outline-thick .mat-form-field-outline-start,.mat-form-field-appearance-outline .mat-form-field-outline-thick .mat-form-field-outline-end,.mat-form-field-appearance-outline .mat-form-field-outline-thick .mat-form-field-outline-gap{border-width:2px}.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline,.mat-form-field-appearance-outline.mat-form-field-invalid .mat-form-field-outline{opacity:0;transition:opacity 100ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick,.mat-form-field-appearance-outline.mat-form-field-invalid .mat-form-field-outline-thick{opacity:1}.mat-form-field-appearance-outline:not(.mat-form-field-disabled) .mat-form-field-flex:hover .mat-form-field-outline{opacity:0;transition:opacity 600ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-appearance-outline:not(.mat-form-field-disabled) .mat-form-field-flex:hover .mat-form-field-outline-thick{opacity:1}.mat-form-field-appearance-outline .mat-form-field-subscript-wrapper{padding:0 1em}.mat-form-field-appearance-outline._mat-animation-noopable:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-outline,.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline,.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline-start,.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline-end,.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline-gap{transition:none}\n", ".mat-form-field-appearance-standard .mat-form-field-flex{padding-top:.75em}.mat-form-field-appearance-standard .mat-form-field-underline{height:1px}.cdk-high-contrast-active .mat-form-field-appearance-standard .mat-form-field-underline{height:0;border-top:solid 1px}.mat-form-field-appearance-standard .mat-form-field-ripple{bottom:0;height:2px}.cdk-high-contrast-active .mat-form-field-appearance-standard .mat-form-field-ripple{height:0;border-top:solid 2px}.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{background-position:0;background-color:transparent}.cdk-high-contrast-active .mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{border-top-style:dotted;border-top-width:2px}.mat-form-field-appearance-standard:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{opacity:1;transform:none;transition:opacity 600ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-appearance-standard._mat-animation-noopable:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{transition:none}\n"],
        encapsulation: 2,
        data: {
          animation: [matFormFieldAnimations.transitionMessages]
        },
        changeDetection: 0
      });

      MatFormField.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ChangeDetectorRef"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Inject"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_2__["ElementRef"]]
          }]
        }, {
          type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_4__["Directionality"],
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Optional"]
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Inject"],
            args: [MAT_FORM_FIELD_DEFAULT_OPTIONS]
          }]
        }, {
          type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__["Platform"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["NgZone"]
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Inject"],
            args: [_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_10__["ANIMATION_MODULE_TYPE"]]
          }]
        }];
      };

      MatFormField.propDecorators = {
        appearance: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
        }],
        hideRequiredMarker: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
        }],
        hintLabel: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
        }],
        floatLabel: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
        }],
        underlineRef: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ViewChild"],
          args: ['underline']
        }],
        _connectionContainerRef: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ViewChild"],
          args: ['connectionContainer', {
            "static": true
          }]
        }],
        _inputContainerRef: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ViewChild"],
          args: ['inputContainer']
        }],
        _label: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ViewChild"],
          args: ['label']
        }],
        _controlNonStatic: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChild"],
          args: [MatFormFieldControl]
        }],
        _controlStatic: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChild"],
          args: [MatFormFieldControl, {
            "static": true
          }]
        }],
        _labelChildNonStatic: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChild"],
          args: [MatLabel]
        }],
        _labelChildStatic: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChild"],
          args: [MatLabel, {
            "static": true
          }]
        }],
        _placeholderChild: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChild"],
          args: [MatPlaceholder]
        }],
        _errorChildren: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChildren"],
          args: [MAT_ERROR, {
            descendants: true
          }]
        }],
        _hintChildren: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChildren"],
          args: [_MAT_HINT, {
            descendants: true
          }]
        }],
        _prefixChildren: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChildren"],
          args: [MAT_PREFIX, {
            descendants: true
          }]
        }],
        _suffixChildren: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChildren"],
          args: [MAT_SUFFIX, {
            descendants: true
          }]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](MatFormField, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Component"],
          args: [{
            selector: 'mat-form-field',
            exportAs: 'matFormField',
            template: "<div class=\"mat-form-field-wrapper\">\n  <div class=\"mat-form-field-flex\" #connectionContainer\n       (click)=\"_control.onContainerClick && _control.onContainerClick($event)\">\n\n    <!-- Outline used for outline appearance. -->\n    <ng-container *ngIf=\"appearance == 'outline'\">\n      <div class=\"mat-form-field-outline\">\n        <div class=\"mat-form-field-outline-start\"></div>\n        <div class=\"mat-form-field-outline-gap\"></div>\n        <div class=\"mat-form-field-outline-end\"></div>\n      </div>\n      <div class=\"mat-form-field-outline mat-form-field-outline-thick\">\n        <div class=\"mat-form-field-outline-start\"></div>\n        <div class=\"mat-form-field-outline-gap\"></div>\n        <div class=\"mat-form-field-outline-end\"></div>\n      </div>\n    </ng-container>\n\n    <div class=\"mat-form-field-prefix\" *ngIf=\"_prefixChildren.length\">\n      <ng-content select=\"[matPrefix]\"></ng-content>\n    </div>\n\n    <div class=\"mat-form-field-infix\" #inputContainer>\n      <ng-content></ng-content>\n\n      <span class=\"mat-form-field-label-wrapper\">\n        <!-- We add aria-owns as a workaround for an issue in JAWS & NVDA where the label isn't\n             read if it comes before the control in the DOM. -->\n        <label class=\"mat-form-field-label\"\n               (cdkObserveContent)=\"updateOutlineGap()\"\n               [cdkObserveContentDisabled]=\"appearance != 'outline'\"\n               [id]=\"_labelId\"\n               [attr.for]=\"_control.id\"\n               [attr.aria-owns]=\"_control.id\"\n               [class.mat-empty]=\"_control.empty && !_shouldAlwaysFloat()\"\n               [class.mat-form-field-empty]=\"_control.empty && !_shouldAlwaysFloat()\"\n               [class.mat-accent]=\"color == 'accent'\"\n               [class.mat-warn]=\"color == 'warn'\"\n               #label\n               *ngIf=\"_hasFloatingLabel()\"\n               [ngSwitch]=\"_hasLabel()\">\n\n          <!-- @breaking-change 8.0.0 remove in favor of mat-label element an placeholder attr. -->\n          <ng-container *ngSwitchCase=\"false\">\n            <ng-content select=\"mat-placeholder\"></ng-content>\n            <span>{{_control.placeholder}}</span>\n          </ng-container>\n\n          <ng-content select=\"mat-label\" *ngSwitchCase=\"true\"></ng-content>\n\n          <!-- @breaking-change 8.0.0 remove `mat-placeholder-required` class -->\n          <span\n            class=\"mat-placeholder-required mat-form-field-required-marker\"\n            aria-hidden=\"true\"\n            *ngIf=\"!hideRequiredMarker && _control.required && !_control.disabled\">&#32;*</span>\n        </label>\n      </span>\n    </div>\n\n    <div class=\"mat-form-field-suffix\" *ngIf=\"_suffixChildren.length\">\n      <ng-content select=\"[matSuffix]\"></ng-content>\n    </div>\n  </div>\n\n  <!-- Underline used for legacy, standard, and box appearances. -->\n  <div class=\"mat-form-field-underline\" #underline\n       *ngIf=\"appearance != 'outline'\">\n    <span class=\"mat-form-field-ripple\"\n          [class.mat-accent]=\"color == 'accent'\"\n          [class.mat-warn]=\"color == 'warn'\"></span>\n  </div>\n\n  <div class=\"mat-form-field-subscript-wrapper\"\n       [ngSwitch]=\"_getDisplayedMessages()\">\n    <div *ngSwitchCase=\"'error'\" [@transitionMessages]=\"_subscriptAnimationState\">\n      <ng-content select=\"mat-error\"></ng-content>\n    </div>\n\n    <div class=\"mat-form-field-hint-wrapper\" *ngSwitchCase=\"'hint'\"\n      [@transitionMessages]=\"_subscriptAnimationState\">\n      <!-- TODO(mmalerba): use an actual <mat-hint> once all selectors are switched to mat-* -->\n      <div *ngIf=\"hintLabel\" [id]=\"_hintLabelId\" class=\"mat-hint\">{{hintLabel}}</div>\n      <ng-content select=\"mat-hint:not([align='end'])\"></ng-content>\n      <div class=\"mat-form-field-hint-spacer\"></div>\n      <ng-content select=\"mat-hint[align='end']\"></ng-content>\n    </div>\n  </div>\n</div>\n",
            animations: [matFormFieldAnimations.transitionMessages],
            host: {
              'class': 'mat-form-field',
              '[class.mat-form-field-appearance-standard]': 'appearance == "standard"',
              '[class.mat-form-field-appearance-fill]': 'appearance == "fill"',
              '[class.mat-form-field-appearance-outline]': 'appearance == "outline"',
              '[class.mat-form-field-appearance-legacy]': 'appearance == "legacy"',
              '[class.mat-form-field-invalid]': '_control.errorState',
              '[class.mat-form-field-can-float]': '_canLabelFloat()',
              '[class.mat-form-field-should-float]': '_shouldLabelFloat()',
              '[class.mat-form-field-has-label]': '_hasFloatingLabel()',
              '[class.mat-form-field-hide-placeholder]': '_hideControlPlaceholder()',
              '[class.mat-form-field-disabled]': '_control.disabled',
              '[class.mat-form-field-autofilled]': '_control.autofilled',
              '[class.mat-focused]': '_control.focused',
              '[class.mat-accent]': 'color == "accent"',
              '[class.mat-warn]': 'color == "warn"',
              '[class.ng-untouched]': '_shouldForward("untouched")',
              '[class.ng-touched]': '_shouldForward("touched")',
              '[class.ng-pristine]': '_shouldForward("pristine")',
              '[class.ng-dirty]': '_shouldForward("dirty")',
              '[class.ng-valid]': '_shouldForward("valid")',
              '[class.ng-invalid]': '_shouldForward("invalid")',
              '[class.ng-pending]': '_shouldForward("pending")',
              '[class._mat-animation-noopable]': '!_animationsEnabled'
            },
            inputs: ['color'],
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ViewEncapsulation"].None,
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ChangeDetectionStrategy"].OnPush,
            providers: [{
              provide: MAT_FORM_FIELD,
              useExisting: MatFormField
            }],
            styles: [".mat-form-field{display:inline-block;position:relative;text-align:left}[dir=rtl] .mat-form-field{text-align:right}.mat-form-field-wrapper{position:relative}.mat-form-field-flex{display:inline-flex;align-items:baseline;box-sizing:border-box;width:100%}.mat-form-field-prefix,.mat-form-field-suffix{white-space:nowrap;flex:none;position:relative}.mat-form-field-infix{display:block;position:relative;flex:auto;min-width:0;width:180px}.cdk-high-contrast-active .mat-form-field-infix{border-image:linear-gradient(transparent, transparent)}.mat-form-field-label-wrapper{position:absolute;left:0;box-sizing:content-box;width:100%;height:100%;overflow:hidden;pointer-events:none}[dir=rtl] .mat-form-field-label-wrapper{left:auto;right:0}.mat-form-field-label{position:absolute;left:0;font:inherit;pointer-events:none;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;transform-origin:0 0;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),color 400ms cubic-bezier(0.25, 0.8, 0.25, 1),width 400ms cubic-bezier(0.25, 0.8, 0.25, 1);display:none}[dir=rtl] .mat-form-field-label{transform-origin:100% 0;left:auto;right:0}.mat-form-field-empty.mat-form-field-label,.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{display:block}.mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{display:none}.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{display:block;transition:none}.mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-input-server[placeholder]:not(:placeholder-shown)+.mat-form-field-label-wrapper .mat-form-field-label{display:none}.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-can-float .mat-input-server[placeholder]:not(:placeholder-shown)+.mat-form-field-label-wrapper .mat-form-field-label{display:block}.mat-form-field-label:not(.mat-form-field-empty){transition:none}.mat-form-field-underline{position:absolute;width:100%;pointer-events:none;transform:scale3d(1, 1.0001, 1)}.mat-form-field-ripple{position:absolute;left:0;width:100%;transform-origin:50%;transform:scaleX(0.5);opacity:0;transition:background-color 300ms cubic-bezier(0.55, 0, 0.55, 0.2)}.mat-form-field.mat-focused .mat-form-field-ripple,.mat-form-field.mat-form-field-invalid .mat-form-field-ripple{opacity:1;transform:none;transition:transform 300ms cubic-bezier(0.25, 0.8, 0.25, 1),opacity 100ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 300ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-subscript-wrapper{position:absolute;box-sizing:border-box;width:100%;overflow:hidden}.mat-form-field-subscript-wrapper .mat-icon,.mat-form-field-label-wrapper .mat-icon{width:1em;height:1em;font-size:inherit;vertical-align:baseline}.mat-form-field-hint-wrapper{display:flex}.mat-form-field-hint-spacer{flex:1 0 1em}.mat-error{display:block}.mat-form-field-control-wrapper{position:relative}.mat-form-field-hint-end{order:1}.mat-form-field._mat-animation-noopable .mat-form-field-label,.mat-form-field._mat-animation-noopable .mat-form-field-ripple{transition:none}\n", ".mat-form-field-appearance-fill .mat-form-field-flex{border-radius:4px 4px 0 0;padding:.75em .75em 0 .75em}.cdk-high-contrast-active .mat-form-field-appearance-fill .mat-form-field-flex{outline:solid 1px}.mat-form-field-appearance-fill .mat-form-field-underline::before{content:\"\";display:block;position:absolute;bottom:0;height:1px;width:100%}.mat-form-field-appearance-fill .mat-form-field-ripple{bottom:0;height:2px}.cdk-high-contrast-active .mat-form-field-appearance-fill .mat-form-field-ripple{height:0;border-top:solid 2px}.mat-form-field-appearance-fill:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{opacity:1;transform:none;transition:opacity 600ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-appearance-fill._mat-animation-noopable:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{transition:none}.mat-form-field-appearance-fill .mat-form-field-subscript-wrapper{padding:0 1em}\n", ".mat-input-element{font:inherit;background:transparent;color:currentColor;border:none;outline:none;padding:0;margin:0;width:100%;max-width:100%;vertical-align:bottom;text-align:inherit;box-sizing:content-box}.mat-input-element:-moz-ui-invalid{box-shadow:none}.mat-input-element::-ms-clear,.mat-input-element::-ms-reveal{display:none}.mat-input-element,.mat-input-element::-webkit-search-cancel-button,.mat-input-element::-webkit-search-decoration,.mat-input-element::-webkit-search-results-button,.mat-input-element::-webkit-search-results-decoration{-webkit-appearance:none}.mat-input-element::-webkit-contacts-auto-fill-button,.mat-input-element::-webkit-caps-lock-indicator,.mat-input-element::-webkit-credentials-auto-fill-button{visibility:hidden}.mat-input-element[type=date],.mat-input-element[type=datetime],.mat-input-element[type=datetime-local],.mat-input-element[type=month],.mat-input-element[type=week],.mat-input-element[type=time]{line-height:1}.mat-input-element[type=date]::after,.mat-input-element[type=datetime]::after,.mat-input-element[type=datetime-local]::after,.mat-input-element[type=month]::after,.mat-input-element[type=week]::after,.mat-input-element[type=time]::after{content:\" \";white-space:pre;width:1px}.mat-input-element::-webkit-inner-spin-button,.mat-input-element::-webkit-calendar-picker-indicator,.mat-input-element::-webkit-clear-button{font-size:.75em}.mat-input-element::placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-input-element::placeholder:-ms-input-placeholder{-ms-user-select:text}.mat-input-element::-moz-placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-input-element::-moz-placeholder:-ms-input-placeholder{-ms-user-select:text}.mat-input-element::-webkit-input-placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-input-element::-webkit-input-placeholder:-ms-input-placeholder{-ms-user-select:text}.mat-input-element:-ms-input-placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-input-element:-ms-input-placeholder:-ms-input-placeholder{-ms-user-select:text}.mat-form-field-hide-placeholder .mat-input-element::placeholder{color:transparent !important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-input-element::-moz-placeholder{color:transparent !important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-input-element::-webkit-input-placeholder{color:transparent !important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-input-element:-ms-input-placeholder{color:transparent !important;-webkit-text-fill-color:transparent;transition:none}textarea.mat-input-element{resize:vertical;overflow:auto}textarea.mat-input-element.cdk-textarea-autosize{resize:none}textarea.mat-input-element{padding:2px 0;margin:-2px 0}select.mat-input-element{-moz-appearance:none;-webkit-appearance:none;position:relative;background-color:transparent;display:inline-flex;box-sizing:border-box;padding-top:1em;top:-1em;margin-bottom:-1em}select.mat-input-element::-ms-expand{display:none}select.mat-input-element::-moz-focus-inner{border:0}select.mat-input-element:not(:disabled){cursor:pointer}select.mat-input-element::-ms-value{color:inherit;background:none}.mat-focused .cdk-high-contrast-active select.mat-input-element::-ms-value{color:inherit}.mat-form-field-type-mat-native-select .mat-form-field-infix::after{content:\"\";width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid;position:absolute;top:50%;right:0;margin-top:-2.5px;pointer-events:none}[dir=rtl] .mat-form-field-type-mat-native-select .mat-form-field-infix::after{right:auto;left:0}.mat-form-field-type-mat-native-select .mat-input-element{padding-right:15px}[dir=rtl] .mat-form-field-type-mat-native-select .mat-input-element{padding-right:0;padding-left:15px}.mat-form-field-type-mat-native-select .mat-form-field-label-wrapper{max-width:calc(100% - 10px)}.mat-form-field-type-mat-native-select.mat-form-field-appearance-outline .mat-form-field-infix::after{margin-top:-5px}.mat-form-field-type-mat-native-select.mat-form-field-appearance-fill .mat-form-field-infix::after{margin-top:-10px}\n", ".mat-form-field-appearance-legacy .mat-form-field-label{transform:perspective(100px);-ms-transform:none}.mat-form-field-appearance-legacy .mat-form-field-prefix .mat-icon,.mat-form-field-appearance-legacy .mat-form-field-suffix .mat-icon{width:1em}.mat-form-field-appearance-legacy .mat-form-field-prefix .mat-icon-button,.mat-form-field-appearance-legacy .mat-form-field-suffix .mat-icon-button{font:inherit;vertical-align:baseline}.mat-form-field-appearance-legacy .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-appearance-legacy .mat-form-field-suffix .mat-icon-button .mat-icon{font-size:inherit}.mat-form-field-appearance-legacy .mat-form-field-underline{height:1px}.cdk-high-contrast-active .mat-form-field-appearance-legacy .mat-form-field-underline{height:0;border-top:solid 1px}.mat-form-field-appearance-legacy .mat-form-field-ripple{top:0;height:2px;overflow:hidden}.cdk-high-contrast-active .mat-form-field-appearance-legacy .mat-form-field-ripple{height:0;border-top:solid 2px}.mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{background-position:0;background-color:transparent}.cdk-high-contrast-active .mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{border-top-style:dotted;border-top-width:2px}.mat-form-field-appearance-legacy.mat-form-field-invalid:not(.mat-focused) .mat-form-field-ripple{height:1px}\n", ".mat-form-field-appearance-outline .mat-form-field-wrapper{margin:.25em 0}.mat-form-field-appearance-outline .mat-form-field-flex{padding:0 .75em 0 .75em;margin-top:-0.25em;position:relative}.mat-form-field-appearance-outline .mat-form-field-prefix,.mat-form-field-appearance-outline .mat-form-field-suffix{top:.25em}.mat-form-field-appearance-outline .mat-form-field-outline{display:flex;position:absolute;top:.25em;left:0;right:0;bottom:0;pointer-events:none}.mat-form-field-appearance-outline .mat-form-field-outline-start,.mat-form-field-appearance-outline .mat-form-field-outline-end{border:1px solid currentColor;min-width:5px}.mat-form-field-appearance-outline .mat-form-field-outline-start{border-radius:5px 0 0 5px;border-right-style:none}[dir=rtl] .mat-form-field-appearance-outline .mat-form-field-outline-start{border-right-style:solid;border-left-style:none;border-radius:0 5px 5px 0}.mat-form-field-appearance-outline .mat-form-field-outline-end{border-radius:0 5px 5px 0;border-left-style:none;flex-grow:1}[dir=rtl] .mat-form-field-appearance-outline .mat-form-field-outline-end{border-left-style:solid;border-right-style:none;border-radius:5px 0 0 5px}.mat-form-field-appearance-outline .mat-form-field-outline-gap{border-radius:.000001px;border:1px solid currentColor;border-left-style:none;border-right-style:none}.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-outline-gap{border-top-color:transparent}.mat-form-field-appearance-outline .mat-form-field-outline-thick{opacity:0}.mat-form-field-appearance-outline .mat-form-field-outline-thick .mat-form-field-outline-start,.mat-form-field-appearance-outline .mat-form-field-outline-thick .mat-form-field-outline-end,.mat-form-field-appearance-outline .mat-form-field-outline-thick .mat-form-field-outline-gap{border-width:2px}.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline,.mat-form-field-appearance-outline.mat-form-field-invalid .mat-form-field-outline{opacity:0;transition:opacity 100ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick,.mat-form-field-appearance-outline.mat-form-field-invalid .mat-form-field-outline-thick{opacity:1}.mat-form-field-appearance-outline:not(.mat-form-field-disabled) .mat-form-field-flex:hover .mat-form-field-outline{opacity:0;transition:opacity 600ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-appearance-outline:not(.mat-form-field-disabled) .mat-form-field-flex:hover .mat-form-field-outline-thick{opacity:1}.mat-form-field-appearance-outline .mat-form-field-subscript-wrapper{padding:0 1em}.mat-form-field-appearance-outline._mat-animation-noopable:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-outline,.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline,.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline-start,.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline-end,.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline-gap{transition:none}\n", ".mat-form-field-appearance-standard .mat-form-field-flex{padding-top:.75em}.mat-form-field-appearance-standard .mat-form-field-underline{height:1px}.cdk-high-contrast-active .mat-form-field-appearance-standard .mat-form-field-underline{height:0;border-top:solid 1px}.mat-form-field-appearance-standard .mat-form-field-ripple{bottom:0;height:2px}.cdk-high-contrast-active .mat-form-field-appearance-standard .mat-form-field-ripple{height:0;border-top:solid 2px}.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{background-position:0;background-color:transparent}.cdk-high-contrast-active .mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{border-top-style:dotted;border-top-width:2px}.mat-form-field-appearance-standard:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{opacity:1;transform:none;transition:opacity 600ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-appearance-standard._mat-animation-noopable:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{transition:none}\n"]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ChangeDetectorRef"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Inject"],
              args: [_angular_core__WEBPACK_IMPORTED_MODULE_2__["ElementRef"]]
            }]
          }, {
            type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_4__["Directionality"],
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Optional"]
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Inject"],
              args: [MAT_FORM_FIELD_DEFAULT_OPTIONS]
            }]
          }, {
            type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_9__["Platform"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["NgZone"]
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Inject"],
              args: [_angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_10__["ANIMATION_MODULE_TYPE"]]
            }]
          }];
        }, {
          floatLabel: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          appearance: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          hideRequiredMarker: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          hintLabel: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Input"]
          }],
          underlineRef: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ViewChild"],
            args: ['underline']
          }],
          _connectionContainerRef: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ViewChild"],
            args: ['connectionContainer', {
              "static": true
            }]
          }],
          _inputContainerRef: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ViewChild"],
            args: ['inputContainer']
          }],
          _label: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ViewChild"],
            args: ['label']
          }],
          _controlNonStatic: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChild"],
            args: [MatFormFieldControl]
          }],
          _controlStatic: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChild"],
            args: [MatFormFieldControl, {
              "static": true
            }]
          }],
          _labelChildNonStatic: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChild"],
            args: [MatLabel]
          }],
          _labelChildStatic: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChild"],
            args: [MatLabel, {
              "static": true
            }]
          }],
          _placeholderChild: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChild"],
            args: [MatPlaceholder]
          }],
          _errorChildren: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChildren"],
            args: [MAT_ERROR, {
              descendants: true
            }]
          }],
          _hintChildren: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChildren"],
            args: [_MAT_HINT, {
              descendants: true
            }]
          }],
          _prefixChildren: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChildren"],
            args: [MAT_PREFIX, {
              descendants: true
            }]
          }],
          _suffixChildren: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["ContentChildren"],
            args: [MAT_SUFFIX, {
              descendants: true
            }]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var MatFormFieldModule = function MatFormFieldModule() {
        _classCallCheck2(this, MatFormFieldModule);
      };

      MatFormFieldModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineNgModule"]({
        type: MatFormFieldModule
      });
      MatFormFieldModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineInjector"]({
        factory: function MatFormFieldModule_Factory(t) {
          return new (t || MatFormFieldModule)();
        },
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatCommonModule"], _angular_cdk_observers__WEBPACK_IMPORTED_MODULE_0__["ObserversModule"]], _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatCommonModule"]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵsetNgModuleScope"](MatFormFieldModule, {
          declarations: function declarations() {
            return [MatError, MatFormField, MatHint, MatLabel, MatPlaceholder, MatPrefix, MatSuffix];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatCommonModule"], _angular_cdk_observers__WEBPACK_IMPORTED_MODULE_0__["ObserversModule"]];
          },
          exports: function exports() {
            return [_angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatCommonModule"], MatError, MatFormField, MatHint, MatLabel, MatPlaceholder, MatPrefix, MatSuffix];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](MatFormFieldModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["NgModule"],
          args: [{
            declarations: [MatError, MatFormField, MatHint, MatLabel, MatPlaceholder, MatPrefix, MatSuffix],
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatCommonModule"], _angular_cdk_observers__WEBPACK_IMPORTED_MODULE_0__["ObserversModule"]],
            exports: [_angular_material_core__WEBPACK_IMPORTED_MODULE_3__["MatCommonModule"], MatError, MatFormField, MatHint, MatLabel, MatPlaceholder, MatPrefix, MatSuffix]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=form-field.js.map

      /***/

    },

    /***/
    "l5ep":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/cy.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function l5ep(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Welsh [cy]
      //! author : Robert Allen : https://github.com/robgallen
      //! author : https://github.com/ryangreaves
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var cy = moment.defineLocale('cy', {
          months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),
          monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),
          weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),
          weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
          weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
          weekdaysParseExact: true,
          // time formats are the same as en-gb
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[Heddiw am] LT',
            nextDay: '[Yfory am] LT',
            nextWeek: 'dddd [am] LT',
            lastDay: '[Ddoe am] LT',
            lastWeek: 'dddd [diwethaf am] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'mewn %s',
            past: '%s yn ôl',
            s: 'ychydig eiliadau',
            ss: '%d eiliad',
            m: 'munud',
            mm: '%d munud',
            h: 'awr',
            hh: '%d awr',
            d: 'diwrnod',
            dd: '%d diwrnod',
            M: 'mis',
            MM: '%d mis',
            y: 'blwyddyn',
            yy: '%d flynedd'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,
          // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
          ordinal: function ordinal(number) {
            var b = number,
                output = '',
                lookup = ['', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed
            'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed
            ];

            if (b > 20) {
              if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
                output = 'fed'; // not 30ain, 70ain or 90ain
              } else {
                output = 'ain';
              }
            } else if (b > 0) {
              output = lookup[b];
            }

            return number + output;
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return cy;
      });
      /***/

    },

    /***/
    "l5mm":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/interval.js ***!
      \********************************************************************/

    /*! exports provided: interval */

    /***/
    function l5mm(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "interval", function () {
        return interval;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../scheduler/async */
      "D0XW");
      /* harmony import */


      var _util_isNumeric__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../util/isNumeric */
      "Y7HM");

      function interval() {
        var period = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
        var scheduler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];

        if (!Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_2__["isNumeric"])(period) || period < 0) {
          period = 0;
        }

        if (!scheduler || typeof scheduler.schedule !== 'function') {
          scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
        }

        return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
          subscriber.add(scheduler.schedule(dispatch, period, {
            subscriber: subscriber,
            counter: 0,
            period: period
          }));
          return subscriber;
        });
      }

      function dispatch(state) {
        var subscriber = state.subscriber,
            counter = state.counter,
            period = state.period;
        subscriber.next(counter);
        this.schedule({
          subscriber: subscriber,
          counter: counter + 1,
          period: period
        }, period);
      } //# sourceMappingURL=interval.js.map

      /***/

    },

    /***/
    "l6fG":
    /*!*************************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/numberedFixLen.pipe.js ***!
      \*************************************************************************************/

    /*! exports provided: NumberFixedLenPipe */

    /***/
    function l6fG(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NumberFixedLenPipe", function () {
        return NumberFixedLenPipe;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");

      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var NumberFixedLenPipe = function () {
        function NumberFixedLenPipe() {}

        NumberFixedLenPipe.prototype.transform = function (num, len) {
          var number = Math.floor(num);
          var length = Math.floor(len);

          if (num === null || isNaN(number) || isNaN(length)) {
            return num;
          }

          var numString = number.toString();

          while (numString.length < length) {
            numString = '0' + numString;
          }

          return numString;
        };

        NumberFixedLenPipe.ɵfac = function NumberFixedLenPipe_Factory(t) {
          return new (t || NumberFixedLenPipe)();
        };

        NumberFixedLenPipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({
          name: "numberFixedLen",
          type: NumberFixedLenPipe,
          pure: true
        });

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NumberFixedLenPipe, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
            args: [{
              name: 'numberFixedLen'
            }]
          }], function () {
            return [];
          }, null);
        })();

        return NumberFixedLenPipe;
      }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyZWRGaXhMZW4ucGlwZS5qcyIsInNvdXJjZXMiOlsibnVtYmVyZWRGaXhMZW4ucGlwZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQXFCTTs7Ozs7Ozs7Z0RBS3FCIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuaW1wb3J0IHsgUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xudmFyIE51bWJlckZpeGVkTGVuUGlwZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTnVtYmVyRml4ZWRMZW5QaXBlKCkge1xuICAgIH1cbiAgICBOdW1iZXJGaXhlZExlblBpcGUucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIChudW0sIGxlbikge1xuICAgICAgICB2YXIgbnVtYmVyID0gTWF0aC5mbG9vcihudW0pO1xuICAgICAgICB2YXIgbGVuZ3RoID0gTWF0aC5mbG9vcihsZW4pO1xuICAgICAgICBpZiAobnVtID09PSBudWxsIHx8IGlzTmFOKG51bWJlcikgfHwgaXNOYU4obGVuZ3RoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbnVtU3RyaW5nID0gbnVtYmVyLnRvU3RyaW5nKCk7XG4gICAgICAgIHdoaWxlIChudW1TdHJpbmcubGVuZ3RoIDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBudW1TdHJpbmcgPSAnMCcgKyBudW1TdHJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bVN0cmluZztcbiAgICB9O1xuICAgIE51bWJlckZpeGVkTGVuUGlwZSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICBQaXBlKHtcbiAgICAgICAgICAgIG5hbWU6ICdudW1iZXJGaXhlZExlbidcbiAgICAgICAgfSlcbiAgICBdLCBOdW1iZXJGaXhlZExlblBpcGUpO1xuICAgIHJldHVybiBOdW1iZXJGaXhlZExlblBpcGU7XG59KCkpO1xuZXhwb3J0IHsgTnVtYmVyRml4ZWRMZW5QaXBlIH07XG4iXX0=

      /***/

    },

    /***/
    "l7GE":
    /*!****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/OuterSubscriber.js ***!
      \****************************************************************/

    /*! exports provided: OuterSubscriber */

    /***/
    function l7GE(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OuterSubscriber", function () {
        return OuterSubscriber;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./Subscriber */
      "7o/Q");

      var OuterSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_36) {
        _inherits2(OuterSubscriber, _Subscriber__WEBPACK_36);

        var _super343 = _createSuper(OuterSubscriber);

        function OuterSubscriber() {
          _classCallCheck2(this, OuterSubscriber);

          return _super343.apply(this, arguments);
        }

        _createClass2(OuterSubscriber, [{
          key: "notifyNext",
          value: function notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
            this.destination.next(innerValue);
          }
        }, {
          key: "notifyError",
          value: function notifyError(error, innerSub) {
            this.destination.error(error);
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete(innerSub) {
            this.destination.complete();
          }
        }]);

        return OuterSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=OuterSubscriber.js.map

      /***/

    },

    /***/
    "lDzL":
    /*!**********************************************************************************************!*\
      !*** ./node_modules/@swimlane/ngx-datatable/__ivy_ngcc__/fesm2015/swimlane-ngx-datatable.js ***!
      \**********************************************************************************************/

    /*! exports provided: ClickType, ColumnChangesService, ColumnMode, ContextmenuType, DataTableBodyCellComponent, DataTableBodyComponent, DataTableBodyRowComponent, DataTableColumnCellDirective, DataTableColumnCellTreeToggle, DataTableColumnDirective, DataTableColumnHeaderDirective, DataTableFooterComponent, DataTableFooterTemplateDirective, DataTableHeaderCellComponent, DataTableHeaderComponent, DataTablePagerComponent, DataTableRowWrapperComponent, DataTableSelectionComponent, DataTableSummaryRowComponent, DatatableComponent, DatatableFooterDirective, DatatableGroupHeaderDirective, DatatableGroupHeaderTemplateDirective, DatatableRowDetailDirective, DatatableRowDetailTemplateDirective, DimensionsHelper, DraggableDirective, Keys, LongPressDirective, NgxDatatableModule, OrderableDirective, ProgressBarComponent, ResizeableDirective, RowHeightCache, ScrollbarHelper, ScrollerComponent, SelectionType, SortDirection, SortType, VisibilityDirective, adjustColumnWidths, camelCase, columnGroupWidths, columnTotalWidth, columnsByPin, columnsByPinArr, columnsTotalWidth, deCamelCase, deepValueGetter, elementsFromPoint, emptyStringGetter, forceFillColumnWidths, getTotalFlexGrow, getVendorPrefixedName, getterForProp, groupRowsByParents, id, isNullOrUndefined, nextSortDir, numericIndexGetter, optionalGetterForProp, orderByComparator, selectRows, selectRowsBetween, setColumnDefaults, shallowValueGetter, sortRows, throttle, throttleable, translateTemplates, translateXY, ɵ0 */

    /***/
    function lDzL(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ClickType", function () {
        return ClickType;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ColumnChangesService", function () {
        return ColumnChangesService;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ColumnMode", function () {
        return ColumnMode;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ContextmenuType", function () {
        return ContextmenuType;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DataTableBodyCellComponent", function () {
        return DataTableBodyCellComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DataTableBodyComponent", function () {
        return DataTableBodyComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DataTableBodyRowComponent", function () {
        return DataTableBodyRowComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DataTableColumnCellDirective", function () {
        return DataTableColumnCellDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DataTableColumnCellTreeToggle", function () {
        return DataTableColumnCellTreeToggle;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DataTableColumnDirective", function () {
        return DataTableColumnDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DataTableColumnHeaderDirective", function () {
        return DataTableColumnHeaderDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DataTableFooterComponent", function () {
        return DataTableFooterComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DataTableFooterTemplateDirective", function () {
        return DataTableFooterTemplateDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DataTableHeaderCellComponent", function () {
        return DataTableHeaderCellComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DataTableHeaderComponent", function () {
        return DataTableHeaderComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DataTablePagerComponent", function () {
        return DataTablePagerComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DataTableRowWrapperComponent", function () {
        return DataTableRowWrapperComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DataTableSelectionComponent", function () {
        return DataTableSelectionComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DataTableSummaryRowComponent", function () {
        return DataTableSummaryRowComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DatatableComponent", function () {
        return DatatableComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DatatableFooterDirective", function () {
        return DatatableFooterDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DatatableGroupHeaderDirective", function () {
        return DatatableGroupHeaderDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DatatableGroupHeaderTemplateDirective", function () {
        return DatatableGroupHeaderTemplateDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DatatableRowDetailDirective", function () {
        return DatatableRowDetailDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DatatableRowDetailTemplateDirective", function () {
        return DatatableRowDetailTemplateDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DimensionsHelper", function () {
        return DimensionsHelper;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DraggableDirective", function () {
        return DraggableDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Keys", function () {
        return Keys;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LongPressDirective", function () {
        return LongPressDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgxDatatableModule", function () {
        return NgxDatatableModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OrderableDirective", function () {
        return OrderableDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ProgressBarComponent", function () {
        return ProgressBarComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ResizeableDirective", function () {
        return ResizeableDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RowHeightCache", function () {
        return RowHeightCache;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ScrollbarHelper", function () {
        return ScrollbarHelper;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ScrollerComponent", function () {
        return ScrollerComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SelectionType", function () {
        return SelectionType;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SortDirection", function () {
        return SortDirection;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SortType", function () {
        return SortType;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "VisibilityDirective", function () {
        return VisibilityDirective;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "adjustColumnWidths", function () {
        return adjustColumnWidths;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "camelCase", function () {
        return camelCase;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "columnGroupWidths", function () {
        return columnGroupWidths;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "columnTotalWidth", function () {
        return columnTotalWidth;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "columnsByPin", function () {
        return columnsByPin;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "columnsByPinArr", function () {
        return columnsByPinArr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "columnsTotalWidth", function () {
        return columnsTotalWidth;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "deCamelCase", function () {
        return deCamelCase;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "deepValueGetter", function () {
        return deepValueGetter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "elementsFromPoint", function () {
        return elementsFromPoint;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "emptyStringGetter", function () {
        return emptyStringGetter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "forceFillColumnWidths", function () {
        return forceFillColumnWidths;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getTotalFlexGrow", function () {
        return getTotalFlexGrow;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getVendorPrefixedName", function () {
        return getVendorPrefixedName;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getterForProp", function () {
        return getterForProp;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "groupRowsByParents", function () {
        return groupRowsByParents;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "id", function () {
        return id;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isNullOrUndefined", function () {
        return isNullOrUndefined;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "nextSortDir", function () {
        return nextSortDir;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "numericIndexGetter", function () {
        return numericIndexGetter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "optionalGetterForProp", function () {
        return optionalGetterForProp;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "orderByComparator", function () {
        return orderByComparator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "selectRows", function () {
        return selectRows;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "selectRowsBetween", function () {
        return selectRowsBetween;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "setColumnDefaults", function () {
        return setColumnDefaults;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "shallowValueGetter", function () {
        return shallowValueGetter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "sortRows", function () {
        return sortRows;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "throttle", function () {
        return throttle;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "throttleable", function () {
        return throttleable;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "translateTemplates", function () {
        return translateTemplates;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "translateXY", function () {
        return translateXY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵ0", function () {
        return ɵ0;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var tslib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! tslib */
      "Tr+X");
      /**
       * Gets the width of the scrollbar.  Nesc for windows
       * http://stackoverflow.com/a/13382873/888165
       */


      var _c0 = ["*"];

      function DataTableBodyComponent_datatable_progress_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "datatable-progress");
        }
      }

      function DataTableBodyComponent_datatable_scroller_3_datatable_summary_row_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "datatable-summary-row", 9);
        }

        if (rf & 2) {
          var ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("rowHeight", ctx_r4.summaryHeight)("offsetX", ctx_r4.offsetX)("innerWidth", ctx_r4.innerWidth)("rows", ctx_r4.rows)("columns", ctx_r4.columns);
        }
      }

      function DataTableBodyComponent_datatable_scroller_3_datatable_row_wrapper_2_datatable_body_row_1_Template(rf, ctx) {
        if (rf & 1) {
          var _r14 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "datatable-body-row", 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("treeAction", function DataTableBodyComponent_datatable_scroller_3_datatable_row_wrapper_2_datatable_body_row_1_Template_datatable_body_row_treeAction_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r14);

            var group_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

            var ctx_r12 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r12.onTreeAction(group_r7);
          })("activate", function DataTableBodyComponent_datatable_scroller_3_datatable_row_wrapper_2_datatable_body_row_1_Template_datatable_body_row_activate_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r14);

            var i_r8 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().index;

            var ctx_r15 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            var _r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](2);

            return _r1.onActivate($event, ctx_r15.indexes.first + i_r8);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var group_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          var _r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("isSelected", _r1.getRowSelected(group_r7))("innerWidth", ctx_r9.innerWidth)("offsetX", ctx_r9.offsetX)("columns", ctx_r9.columns)("rowHeight", ctx_r9.getRowHeight(group_r7))("row", group_r7)("rowIndex", ctx_r9.getRowIndex(group_r7))("expanded", ctx_r9.getRowExpanded(group_r7))("rowClass", ctx_r9.rowClass)("displayCheck", ctx_r9.displayCheck)("treeStatus", group_r7 && group_r7.treeStatus);
        }
      }

      function DataTableBodyComponent_datatable_scroller_3_datatable_row_wrapper_2_ng_template_2_datatable_body_row_0_Template(rf, ctx) {
        if (rf & 1) {
          var _r22 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "datatable-body-row", 15);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("activate", function DataTableBodyComponent_datatable_scroller_3_datatable_row_wrapper_2_ng_template_2_datatable_body_row_0_Template_datatable_body_row_activate_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r22);

            var i_r20 = ctx.index;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](4);

            var _r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](2);

            return _r1.onActivate($event, i_r20);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var row_r19 = ctx.$implicit;

          var group_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2).$implicit;

          var ctx_r18 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          var _r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("isSelected", _r1.getRowSelected(row_r19))("innerWidth", ctx_r18.innerWidth)("offsetX", ctx_r18.offsetX)("columns", ctx_r18.columns)("rowHeight", ctx_r18.getRowHeight(row_r19))("row", row_r19)("group", group_r7.value)("rowIndex", ctx_r18.getRowIndex(row_r19))("expanded", ctx_r18.getRowExpanded(row_r19))("rowClass", ctx_r18.rowClass);
        }
      }

      function DataTableBodyComponent_datatable_scroller_3_datatable_row_wrapper_2_ng_template_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, DataTableBodyComponent_datatable_scroller_3_datatable_row_wrapper_2_ng_template_2_datatable_body_row_0_Template, 1, 10, "datatable-body-row", 14);
        }

        if (rf & 2) {
          var group_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]().$implicit;

          var ctx_r11 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", group_r7.value)("ngForTrackBy", ctx_r11.rowTrackingFn);
        }
      }

      function DataTableBodyComponent_datatable_scroller_3_datatable_row_wrapper_2_Template(rf, ctx) {
        if (rf & 1) {
          var _r26 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "datatable-row-wrapper", 10);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("rowContextmenu", function DataTableBodyComponent_datatable_scroller_3_datatable_row_wrapper_2_Template_datatable_row_wrapper_rowContextmenu_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r26);

            var ctx_r25 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r25.rowContextmenu.emit($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, DataTableBodyComponent_datatable_scroller_3_datatable_row_wrapper_2_datatable_body_row_1_Template, 1, 11, "datatable-body-row", 11);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, DataTableBodyComponent_datatable_scroller_3_datatable_row_wrapper_2_ng_template_2_Template, 1, 2, "ng-template", null, 12, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var group_r7 = ctx.$implicit;
          var i_r8 = ctx.index;

          var _r10 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](3);

          var ctx_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("groupedRows", ctx_r5.groupedRows)("innerWidth", ctx_r5.innerWidth)("ngStyle", ctx_r5.getRowsStyles(group_r7))("rowDetail", ctx_r5.rowDetail)("groupHeader", ctx_r5.groupHeader)("offsetX", ctx_r5.offsetX)("detailRowHeight", ctx_r5.getDetailRowHeight(group_r7 && group_r7[i_r8], i_r8))("row", group_r7)("expanded", ctx_r5.getRowExpanded(group_r7))("rowIndex", ctx_r5.getRowIndex(group_r7 && group_r7[i_r8]));

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx_r5.groupedRows)("ngIfElse", _r10);
        }
      }

      function DataTableBodyComponent_datatable_scroller_3_datatable_summary_row_3_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "datatable-summary-row", 16);
        }

        if (rf & 2) {
          var ctx_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngStyle", ctx_r6.getBottomSummaryRowStyles())("rowHeight", ctx_r6.summaryHeight)("offsetX", ctx_r6.offsetX)("innerWidth", ctx_r6.innerWidth)("rows", ctx_r6.rows)("columns", ctx_r6.columns);
        }
      }

      function DataTableBodyComponent_datatable_scroller_3_Template(rf, ctx) {
        if (rf & 1) {
          var _r28 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "datatable-scroller", 5);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("scroll", function DataTableBodyComponent_datatable_scroller_3_Template_datatable_scroller_scroll_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r28);

            var ctx_r27 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r27.onBodyScroll($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, DataTableBodyComponent_datatable_scroller_3_datatable_summary_row_1_Template, 1, 5, "datatable-summary-row", 6);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, DataTableBodyComponent_datatable_scroller_3_datatable_row_wrapper_2_Template, 4, 12, "datatable-row-wrapper", 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, DataTableBodyComponent_datatable_scroller_3_datatable_summary_row_3_Template, 1, 6, "datatable-summary-row", 8);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("scrollbarV", ctx_r2.scrollbarV)("scrollbarH", ctx_r2.scrollbarH)("scrollHeight", ctx_r2.scrollHeight)("scrollWidth", ctx_r2.columnGroupWidths == null ? null : ctx_r2.columnGroupWidths.total);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r2.summaryRow && ctx_r2.summaryPosition === "top");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx_r2.temp)("ngForTrackBy", ctx_r2.rowTrackingFn);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r2.summaryRow && ctx_r2.summaryPosition === "bottom");
        }
      }

      function DataTableBodyComponent_div_4_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div", 17);
        }

        if (rf & 2) {
          var ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("innerHTML", ctx_r3.emptyMessage, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsanitizeHtml"]);
        }
      }

      function DataTableHeaderComponent_div_1_datatable_header_cell_1_Template(rf, ctx) {
        if (rf & 1) {
          var _r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "datatable-header-cell", 4);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("resize", function DataTableHeaderComponent_div_1_datatable_header_cell_1_Template_datatable_header_cell_resize_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r5);

            var column_r3 = ctx.$implicit;

            var ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r4.onColumnResized($event, column_r3);
          })("longPressStart", function DataTableHeaderComponent_div_1_datatable_header_cell_1_Template_datatable_header_cell_longPressStart_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r5);

            var ctx_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r6.onLongPressStart($event);
          })("longPressEnd", function DataTableHeaderComponent_div_1_datatable_header_cell_1_Template_datatable_header_cell_longPressEnd_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r5);

            var ctx_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r7.onLongPressEnd($event);
          })("sort", function DataTableHeaderComponent_div_1_datatable_header_cell_1_Template_datatable_header_cell_sort_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r5);

            var ctx_r8 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r8.onSort($event);
          })("select", function DataTableHeaderComponent_div_1_datatable_header_cell_1_Template_datatable_header_cell_select_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r5);

            var ctx_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r9.select.emit($event);
          })("columnContextmenu", function DataTableHeaderComponent_div_1_datatable_header_cell_1_Template_datatable_header_cell_columnContextmenu_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r5);

            var ctx_r10 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r10.columnContextmenu.emit($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var column_r3 = ctx.$implicit;

          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("resizeEnabled", column_r3.resizeable)("pressModel", column_r3)("pressEnabled", ctx_r2.reorderable && column_r3.draggable)("dragX", ctx_r2.reorderable && column_r3.draggable && column_r3.dragging)("dragY", false)("dragModel", column_r3)("dragEventTarget", ctx_r2.dragEventTarget)("headerHeight", ctx_r2.headerHeight)("isTarget", column_r3.isTarget)("targetMarkerTemplate", ctx_r2.targetMarkerTemplate)("targetMarkerContext", column_r3.targetMarkerContext)("column", column_r3)("sortType", ctx_r2.sortType)("sorts", ctx_r2.sorts)("selectionType", ctx_r2.selectionType)("sortAscendingIcon", ctx_r2.sortAscendingIcon)("sortDescendingIcon", ctx_r2.sortDescendingIcon)("sortUnsetIcon", ctx_r2.sortUnsetIcon)("allRowsSelected", ctx_r2.allRowsSelected);
        }
      }

      function DataTableHeaderComponent_div_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, DataTableHeaderComponent_div_1_datatable_header_cell_1_Template, 1, 19, "datatable-header-cell", 3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var colGroup_r1 = ctx.$implicit;

          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"]("datatable-row-" + colGroup_r1.type);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngStyle", ctx_r0._styleByGroup[colGroup_r1.type]);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", colGroup_r1.columns)("ngForTrackBy", ctx_r0.columnTrackingFn);
        }
      }

      function DatatableComponent_datatable_header_1_Template(rf, ctx) {
        if (rf & 1) {
          var _r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "datatable-header", 4);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("sort", function DatatableComponent_datatable_header_1_Template_datatable_header_sort_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r3);

            var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r2.onColumnSort($event);
          })("resize", function DatatableComponent_datatable_header_1_Template_datatable_header_resize_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r3);

            var ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r4.onColumnResize($event);
          })("reorder", function DatatableComponent_datatable_header_1_Template_datatable_header_reorder_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r3);

            var ctx_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r5.onColumnReorder($event);
          })("select", function DatatableComponent_datatable_header_1_Template_datatable_header_select_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r3);

            var ctx_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r6.onHeaderSelect($event);
          })("columnContextmenu", function DatatableComponent_datatable_header_1_Template_datatable_header_columnContextmenu_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r3);

            var ctx_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r7.onColumnContextmenu($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpipe"](1, "async");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("sorts", ctx_r0.sorts)("sortType", ctx_r0.sortType)("scrollbarH", ctx_r0.scrollbarH)("innerWidth", ctx_r0._innerWidth)("offsetX", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpipeBind1"](1, 15, ctx_r0._offsetX))("dealsWithGroup", ctx_r0.groupedRows !== undefined)("columns", ctx_r0._internalColumns)("headerHeight", ctx_r0.headerHeight)("reorderable", ctx_r0.reorderable)("targetMarkerTemplate", ctx_r0.targetMarkerTemplate)("sortAscendingIcon", ctx_r0.cssClasses.sortAscending)("sortDescendingIcon", ctx_r0.cssClasses.sortDescending)("sortUnsetIcon", ctx_r0.cssClasses.sortUnset)("allRowsSelected", ctx_r0.allRowsSelected)("selectionType", ctx_r0.selectionType);
        }
      }

      function DatatableComponent_datatable_footer_4_Template(rf, ctx) {
        if (rf & 1) {
          var _r9 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "datatable-footer", 5);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("page", function DatatableComponent_datatable_footer_4_Template_datatable_footer_page_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r9);

            var ctx_r8 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r8.onFooterPage($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("rowCount", ctx_r1.rowCount)("pageSize", ctx_r1.pageSize)("offset", ctx_r1.offset)("footerHeight", ctx_r1.footerHeight)("footerTemplate", ctx_r1.footer)("totalMessage", ctx_r1.messages.totalMessage)("pagerLeftArrowIcon", ctx_r1.cssClasses.pagerLeftArrow)("pagerRightArrowIcon", ctx_r1.cssClasses.pagerRightArrow)("pagerPreviousIcon", ctx_r1.cssClasses.pagerPrevious)("selectedCount", ctx_r1.selected.length)("selectedMessage", !!ctx_r1.selectionType && ctx_r1.messages.selectedMessage)("pagerNextIcon", ctx_r1.cssClasses.pagerNext);
        }
      }

      function DataTableHeaderCellComponent_1_ng_template_0_Template(rf, ctx) {}

      function DataTableHeaderCellComponent_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, DataTableHeaderCellComponent_1_ng_template_0_Template, 0, 0, "ng-template", 5);
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r0.targetMarkerTemplate)("ngTemplateOutletContext", ctx_r0.targetMarkerContext);
        }
      }

      function DataTableHeaderCellComponent_label_2_Template(rf, ctx) {
        if (rf & 1) {
          var _r6 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "label", 6);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "input", 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function DataTableHeaderCellComponent_label_2_Template_input_change_1_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r6);

            var ctx_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r5.select.emit(!ctx_r5.allRowsSelected);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("checked", ctx_r1.allRowsSelected);
        }
      }

      function DataTableHeaderCellComponent_span_3_Template(rf, ctx) {
        if (rf & 1) {
          var _r8 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span", 8);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "span", 9);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function DataTableHeaderCellComponent_span_3_Template_span_click_1_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r8);

            var ctx_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r7.onSort();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("innerHTML", ctx_r2.name, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsanitizeHtml"]);
        }
      }

      function DataTableHeaderCellComponent_4_ng_template_0_Template(rf, ctx) {}

      function DataTableHeaderCellComponent_4_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, DataTableHeaderCellComponent_4_ng_template_0_Template, 0, 0, "ng-template", 5);
        }

        if (rf & 2) {
          var ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r3.column.headerTemplate)("ngTemplateOutletContext", ctx_r3.cellContext);
        }
      }

      function DataTableFooterComponent_1_ng_template_0_Template(rf, ctx) {}

      var _c1 = function _c1(a0, a1, a2, a3, a4) {
        return {
          rowCount: a0,
          pageSize: a1,
          selectedCount: a2,
          curPage: a3,
          offset: a4
        };
      };

      function DataTableFooterComponent_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, DataTableFooterComponent_1_ng_template_0_Template, 0, 0, "ng-template", 4);
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r0.footerTemplate.template)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction5"](2, _c1, ctx_r0.rowCount, ctx_r0.pageSize, ctx_r0.selectedCount, ctx_r0.curPage, ctx_r0.offset));
        }
      }

      function DataTableFooterComponent_div_2_span_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate2"](" ", ctx_r4.selectedCount == null ? null : ctx_r4.selectedCount.toLocaleString(), " ", ctx_r4.selectedMessage, " / ");
        }
      }

      function DataTableFooterComponent_div_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 5);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, DataTableFooterComponent_div_2_span_1_Template, 2, 2, "span", 1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r1.selectedMessage);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate2"](" ", ctx_r1.rowCount == null ? null : ctx_r1.rowCount.toLocaleString(), " ", ctx_r1.totalMessage, " ");
        }
      }

      function DataTableFooterComponent_datatable_pager_3_Template(rf, ctx) {
        if (rf & 1) {
          var _r6 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "datatable-pager", 6);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("change", function DataTableFooterComponent_datatable_pager_3_Template_datatable_pager_change_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r6);

            var ctx_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r5.page.emit($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("pagerLeftArrowIcon", ctx_r2.pagerLeftArrowIcon)("pagerRightArrowIcon", ctx_r2.pagerRightArrowIcon)("pagerPreviousIcon", ctx_r2.pagerPreviousIcon)("pagerNextIcon", ctx_r2.pagerNextIcon)("page", ctx_r2.curPage)("size", ctx_r2.pageSize)("count", ctx_r2.rowCount)("hidden", !ctx_r2.isVisible);
        }
      }

      var _c2 = function _c2(a0) {
        return {
          "selected-count": a0
        };
      };

      function DataTablePagerComponent_li_7_Template(rf, ctx) {
        if (rf & 1) {
          var _r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li", 6);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "a", 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function DataTablePagerComponent_li_7_Template_a_click_1_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r3);

            var pg_r1 = ctx.$implicit;

            var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r2.selectPage(pg_r1.number);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var pg_r1 = ctx.$implicit;

          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("active", pg_r1.number === ctx_r0.page);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-label", "page " + pg_r1.number);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"](" ", pg_r1.text, " ");
        }
      }

      function DataTableBodyRowComponent_div_0_datatable_body_cell_1_Template(rf, ctx) {
        if (rf & 1) {
          var _r7 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "datatable-body-cell", 3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("activate", function DataTableBodyRowComponent_div_0_datatable_body_cell_1_Template_datatable_body_cell_activate_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r7);

            var ii_r5 = ctx.index;

            var ctx_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r6.onActivate($event, ii_r5);
          })("treeAction", function DataTableBodyRowComponent_div_0_datatable_body_cell_1_Template_datatable_body_cell_treeAction_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r7);

            var ctx_r8 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r8.onTreeAction();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var column_r4 = ctx.$implicit;

          var ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("row", ctx_r3.row)("group", ctx_r3.group)("expanded", ctx_r3.expanded)("isSelected", ctx_r3.isSelected)("rowIndex", ctx_r3.rowIndex)("column", column_r4)("rowHeight", ctx_r3.rowHeight)("displayCheck", ctx_r3.displayCheck)("treeStatus", ctx_r3.treeStatus);
        }
      }

      function DataTableBodyRowComponent_div_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, DataTableBodyRowComponent_div_0_datatable_body_cell_1_Template, 1, 9, "datatable-body-cell", 2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var colGroup_r1 = ctx.$implicit;

          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMapInterpolate1"]("datatable-row-", colGroup_r1.type, " datatable-row-group");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngStyle", ctx_r0._groupStyles[colGroup_r1.type]);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", colGroup_r1.columns)("ngForTrackBy", ctx_r0.columnTrackingFn);
        }
      }

      function DataTableRowWrapperComponent_div_0_1_ng_template_0_Template(rf, ctx) {}

      function DataTableRowWrapperComponent_div_0_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, DataTableRowWrapperComponent_div_0_1_ng_template_0_Template, 0, 0, "ng-template", 4);
        }

        if (rf & 2) {
          var ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r3.groupHeader.template)("ngTemplateOutletContext", ctx_r3.groupContext);
        }
      }

      function DataTableRowWrapperComponent_div_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 3);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, DataTableRowWrapperComponent_div_0_1_Template, 1, 2, undefined, 1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngStyle", ctx_r0.getGroupHeaderStyle());

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r0.groupHeader && ctx_r0.groupHeader.template);
        }
      }

      function DataTableRowWrapperComponent_ng_content_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](0, 0, ["*ngIf", "(groupHeader && groupHeader.template && expanded) || !groupHeader || !groupHeader.template"]);
        }
      }

      function DataTableRowWrapperComponent_div_2_1_ng_template_0_Template(rf, ctx) {}

      function DataTableRowWrapperComponent_div_2_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, DataTableRowWrapperComponent_div_2_1_ng_template_0_Template, 0, 0, "ng-template", 4);
        }

        if (rf & 2) {
          var ctx_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r5.rowDetail.template)("ngTemplateOutletContext", ctx_r5.rowContext);
        }
      }

      function DataTableRowWrapperComponent_div_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 5);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, DataTableRowWrapperComponent_div_2_1_Template, 1, 2, undefined, 1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("height", ctx_r2.detailRowHeight, "px");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r2.rowDetail && ctx_r2.rowDetail.template);
        }
      }

      var _c3 = ["cellTemplate"];

      function DataTableBodyCellComponent_label_1_Template(rf, ctx) {
        if (rf & 1) {
          var _r5 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "label", 4);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "input", 5);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function DataTableBodyCellComponent_label_1_Template_input_click_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r5);

            var ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

            return ctx_r4.onCheckboxChange($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("checked", ctx_r0.isSelected);
        }
      }

      function DataTableBodyCellComponent_ng_container_2_button_1_i_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "i", 11);
        }
      }

      function DataTableBodyCellComponent_ng_container_2_button_1_i_3_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "i", 12);
        }
      }

      function DataTableBodyCellComponent_ng_container_2_button_1_i_4_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "i", 13);
        }
      }

      function DataTableBodyCellComponent_ng_container_2_button_1_Template(rf, ctx) {
        if (rf & 1) {
          var _r12 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "button", 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function DataTableBodyCellComponent_ng_container_2_button_1_Template_button_click_0_listener() {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r12);

            var ctx_r11 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

            return ctx_r11.onTreeAction();
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, DataTableBodyCellComponent_ng_container_2_button_1_i_2_Template, 1, 0, "i", 8);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, DataTableBodyCellComponent_ng_container_2_button_1_i_3_Template, 1, 0, "i", 9);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](4, DataTableBodyCellComponent_ng_container_2_button_1_i_4_Template, 1, 0, "i", 10);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", ctx_r6.treeStatus === "disabled");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r6.treeStatus === "loading");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r6.treeStatus === "collapsed");

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r6.treeStatus === "expanded" || ctx_r6.treeStatus === "disabled");
        }
      }

      function DataTableBodyCellComponent_ng_container_2_2_ng_template_0_Template(rf, ctx) {}

      var _c4 = function _c4(a0) {
        return {
          cellContext: a0
        };
      };

      function DataTableBodyCellComponent_ng_container_2_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, DataTableBodyCellComponent_ng_container_2_2_ng_template_0_Template, 0, 0, "ng-template", 14);
        }

        if (rf & 2) {
          var ctx_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r7.column.treeToggleTemplate)("ngTemplateOutletContext", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](2, _c4, ctx_r7.cellContext));
        }
      }

      function DataTableBodyCellComponent_ng_container_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, DataTableBodyCellComponent_ng_container_2_button_1_Template, 5, 4, "button", 6);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, DataTableBodyCellComponent_ng_container_2_2_Template, 1, 4, undefined, 2);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerEnd"]();
        }

        if (rf & 2) {
          var ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx_r1.column.treeToggleTemplate);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx_r1.column.treeToggleTemplate);
        }
      }

      function DataTableBodyCellComponent_span_3_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "span", 15);
        }

        if (rf & 2) {
          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("title", ctx_r2.sanitizedValue)("innerHTML", ctx_r2.value, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsanitizeHtml"]);
        }
      }

      function DataTableBodyCellComponent_4_ng_template_0_Template(rf, ctx) {}

      function DataTableBodyCellComponent_4_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, DataTableBodyCellComponent_4_ng_template_0_Template, 0, 0, "ng-template", 14, 16, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplateRefExtractor"]);
        }

        if (rf & 2) {
          var ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngTemplateOutlet", ctx_r3.column.cellTemplate)("ngTemplateOutletContext", ctx_r3.cellContext);
        }
      }

      function DataTableSummaryRowComponent_datatable_body_row_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "datatable-body-row", 1);
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("innerWidth", ctx_r0.innerWidth)("offsetX", ctx_r0.offsetX)("columns", ctx_r0._internalColumns)("rowHeight", ctx_r0.rowHeight)("row", ctx_r0.summaryRow)("rowIndex", -1);
        }
      }

      var ScrollbarHelper = /*#__PURE__*/function () {
        function ScrollbarHelper(document) {
          _classCallCheck2(this, ScrollbarHelper);

          this.document = document;
          this.width = this.getWidth();
        }

        _createClass2(ScrollbarHelper, [{
          key: "getWidth",
          value: function getWidth() {
            var outer = this.document.createElement('div');
            outer.style.visibility = 'hidden';
            outer.style.width = '100px';
            outer.style.msOverflowStyle = 'scrollbar';
            this.document.body.appendChild(outer);
            var widthNoScroll = outer.offsetWidth;
            outer.style.overflow = 'scroll';
            var inner = this.document.createElement('div');
            inner.style.width = '100%';
            outer.appendChild(inner);
            var widthWithScroll = inner.offsetWidth;
            outer.parentNode.removeChild(outer);
            return widthNoScroll - widthWithScroll;
          }
        }]);

        return ScrollbarHelper;
      }();

      ScrollbarHelper.ɵfac = function ScrollbarHelper_Factory(t) {
        return new (t || ScrollbarHelper)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]));
      };

      ScrollbarHelper.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: ScrollbarHelper,
        factory: ScrollbarHelper.ɵfac
      });

      ScrollbarHelper.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
          }]
        }];
      };
      /**
       * Gets the width of the scrollbar.  Nesc for windows
       * http://stackoverflow.com/a/13382873/888165
       */


      var DimensionsHelper = /*#__PURE__*/function () {
        function DimensionsHelper() {
          _classCallCheck2(this, DimensionsHelper);
        }

        _createClass2(DimensionsHelper, [{
          key: "getDimensions",
          value: function getDimensions(element) {
            return element.getBoundingClientRect();
          }
        }]);

        return DimensionsHelper;
      }();

      DimensionsHelper.ɵfac = function DimensionsHelper_Factory(t) {
        return new (t || DimensionsHelper)();
      };

      DimensionsHelper.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: DimensionsHelper,
        factory: DimensionsHelper.ɵfac
      });
      /**
       * service to make DatatableComponent aware of changes to
       * input bindings of DataTableColumnDirective
       */

      var ColumnChangesService = /*#__PURE__*/function () {
        function ColumnChangesService() {
          _classCallCheck2(this, ColumnChangesService);

          this.columnInputChanges = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
        }

        _createClass2(ColumnChangesService, [{
          key: "columnInputChanges$",
          get: function get() {
            return this.columnInputChanges.asObservable();
          }
        }, {
          key: "onInputChange",
          value: function onInputChange() {
            this.columnInputChanges.next();
          }
        }]);

        return ColumnChangesService;
      }();

      ColumnChangesService.ɵfac = function ColumnChangesService_Factory(t) {
        return new (t || ColumnChangesService)();
      };

      ColumnChangesService.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: ColumnChangesService,
        factory: ColumnChangesService.ɵfac
      });

      var DataTableFooterTemplateDirective = function DataTableFooterTemplateDirective(template) {
        _classCallCheck2(this, DataTableFooterTemplateDirective);

        this.template = template;
      };

      DataTableFooterTemplateDirective.ɵfac = function DataTableFooterTemplateDirective_Factory(t) {
        return new (t || DataTableFooterTemplateDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]));
      };

      DataTableFooterTemplateDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: DataTableFooterTemplateDirective,
        selectors: [["", "ngx-datatable-footer-template", ""]]
      });

      DataTableFooterTemplateDirective.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }];
      };
      /**
       * Visibility Observer Directive
       *
       * Usage:
       *
       * 		<div
       * 			visibilityObserver
       * 			(visible)="onVisible($event)">
       * 		</div>
       *
       */


      var VisibilityDirective = /*#__PURE__*/function () {
        function VisibilityDirective(element, zone) {
          _classCallCheck2(this, VisibilityDirective);

          this.element = element;
          this.zone = zone;
          this.isVisible = false;
          this.visible = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        }

        _createClass2(VisibilityDirective, [{
          key: "ngOnInit",
          value: function ngOnInit() {
            this.runCheck();
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            clearTimeout(this.timeout);
          }
        }, {
          key: "onVisibilityChange",
          value: function onVisibilityChange() {
            var _this786 = this;

            // trigger zone recalc for columns
            this.zone.run(function () {
              _this786.isVisible = true;

              _this786.visible.emit(true);
            });
          }
        }, {
          key: "runCheck",
          value: function runCheck() {
            var _this787 = this;

            var check = function check() {
              // https://davidwalsh.name/offsetheight-visibility
              var _this787$element$nati = _this787.element.nativeElement,
                  offsetHeight = _this787$element$nati.offsetHeight,
                  offsetWidth = _this787$element$nati.offsetWidth;

              if (offsetHeight && offsetWidth) {
                clearTimeout(_this787.timeout);

                _this787.onVisibilityChange();
              } else {
                clearTimeout(_this787.timeout);

                _this787.zone.runOutsideAngular(function () {
                  _this787.timeout = setTimeout(function () {
                    return check();
                  }, 50);
                });
              }
            };

            this.timeout = setTimeout(function () {
              return check();
            });
          }
        }]);

        return VisibilityDirective;
      }();

      VisibilityDirective.ɵfac = function VisibilityDirective_Factory(t) {
        return new (t || VisibilityDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]));
      };

      VisibilityDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: VisibilityDirective,
        selectors: [["", "visibilityObserver", ""]],
        hostVars: 2,
        hostBindings: function VisibilityDirective_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("visible", ctx.isVisible);
          }
        },
        outputs: {
          visible: "visible"
        }
      });

      VisibilityDirective.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }];
      };

      VisibilityDirective.propDecorators = {
        isVisible: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['class.visible']
        }],
        visible: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };
      /**
       * Draggable Directive for Angular2
       *
       * Inspiration:
       *   https://github.com/AngularClass/angular2-examples/blob/master/rx-draggable/directives/draggable.ts
       *   http://stackoverflow.com/questions/35662530/how-to-implement-drag-and-drop-in-angular2
       *
       */

      var DraggableDirective = /*#__PURE__*/function () {
        function DraggableDirective(element) {
          _classCallCheck2(this, DraggableDirective);

          this.dragX = true;
          this.dragY = true;
          this.dragStart = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.dragging = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.dragEnd = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.isDragging = false;
          this.element = element.nativeElement;
        }

        _createClass2(DraggableDirective, [{
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            if (changes['dragEventTarget'] && changes['dragEventTarget'].currentValue && this.dragModel.dragging) {
              this.onMousedown(changes['dragEventTarget'].currentValue);
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._destroySubscription();
          }
        }, {
          key: "onMouseup",
          value: function onMouseup(event) {
            if (!this.isDragging) return;
            this.isDragging = false;
            this.element.classList.remove('dragging');

            if (this.subscription) {
              this._destroySubscription();

              this.dragEnd.emit({
                event: event,
                element: this.element,
                model: this.dragModel
              });
            }
          }
        }, {
          key: "onMousedown",
          value: function onMousedown(event) {
            var _this788 = this;

            // we only want to drag the inner header text
            var isDragElm = event.target.classList.contains('draggable');

            if (isDragElm && (this.dragX || this.dragY)) {
              event.preventDefault();
              this.isDragging = true;
              var mouseDownPos = {
                x: event.clientX,
                y: event.clientY
              };
              var mouseup = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(document, 'mouseup');
              this.subscription = mouseup.subscribe(function (ev) {
                return _this788.onMouseup(ev);
              });
              var mouseMoveSub = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(document, 'mousemove').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(mouseup)).subscribe(function (ev) {
                return _this788.move(ev, mouseDownPos);
              });
              this.subscription.add(mouseMoveSub);
              this.dragStart.emit({
                event: event,
                element: this.element,
                model: this.dragModel
              });
            }
          }
        }, {
          key: "move",
          value: function move(event, mouseDownPos) {
            if (!this.isDragging) return;
            var x = event.clientX - mouseDownPos.x;
            var y = event.clientY - mouseDownPos.y;
            if (this.dragX) this.element.style.left = "".concat(x, "px");
            if (this.dragY) this.element.style.top = "".concat(y, "px");
            this.element.classList.add('dragging');
            this.dragging.emit({
              event: event,
              element: this.element,
              model: this.dragModel
            });
          }
        }, {
          key: "_destroySubscription",
          value: function _destroySubscription() {
            if (this.subscription) {
              this.subscription.unsubscribe();
              this.subscription = undefined;
            }
          }
        }]);

        return DraggableDirective;
      }();

      DraggableDirective.ɵfac = function DraggableDirective_Factory(t) {
        return new (t || DraggableDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]));
      };

      DraggableDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: DraggableDirective,
        selectors: [["", "draggable", ""]],
        inputs: {
          dragX: "dragX",
          dragY: "dragY",
          dragEventTarget: "dragEventTarget",
          dragModel: "dragModel"
        },
        outputs: {
          dragStart: "dragStart",
          dragging: "dragging",
          dragEnd: "dragEnd"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
      });

      DraggableDirective.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }];
      };

      DraggableDirective.propDecorators = {
        dragEventTarget: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        dragModel: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        dragX: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        dragY: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        dragStart: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        dragging: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        dragEnd: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      var ResizeableDirective = /*#__PURE__*/function () {
        function ResizeableDirective(element, renderer) {
          _classCallCheck2(this, ResizeableDirective);

          this.renderer = renderer;
          this.resizeEnabled = true;
          this.resize = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.resizing = false;
          this.element = element.nativeElement;
        }

        _createClass2(ResizeableDirective, [{
          key: "ngAfterViewInit",
          value: function ngAfterViewInit() {
            var renderer2 = this.renderer;
            this.resizeHandle = renderer2.createElement('span');

            if (this.resizeEnabled) {
              renderer2.addClass(this.resizeHandle, 'resize-handle');
            } else {
              renderer2.addClass(this.resizeHandle, 'resize-handle--not-resizable');
            }

            renderer2.appendChild(this.element, this.resizeHandle);
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._destroySubscription();

            if (this.renderer.destroyNode) {
              this.renderer.destroyNode(this.resizeHandle);
            } else if (this.resizeHandle) {
              this.renderer.removeChild(this.renderer.parentNode(this.resizeHandle), this.resizeHandle);
            }
          }
        }, {
          key: "onMouseup",
          value: function onMouseup() {
            this.resizing = false;

            if (this.subscription && !this.subscription.closed) {
              this._destroySubscription();

              this.resize.emit(this.element.clientWidth);
            }
          }
        }, {
          key: "onMousedown",
          value: function onMousedown(event) {
            var _this789 = this;

            var isHandle = event.target.classList.contains('resize-handle');
            var initialWidth = this.element.clientWidth;
            var mouseDownScreenX = event.screenX;

            if (isHandle) {
              event.stopPropagation();
              this.resizing = true;
              var mouseup = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(document, 'mouseup');
              this.subscription = mouseup.subscribe(function (ev) {
                return _this789.onMouseup();
              });
              var mouseMoveSub = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(document, 'mousemove').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(mouseup)).subscribe(function (e) {
                return _this789.move(e, initialWidth, mouseDownScreenX);
              });
              this.subscription.add(mouseMoveSub);
            }
          }
        }, {
          key: "move",
          value: function move(event, initialWidth, mouseDownScreenX) {
            var movementX = event.screenX - mouseDownScreenX;
            var newWidth = initialWidth + movementX;
            var overMinWidth = !this.minWidth || newWidth >= this.minWidth;
            var underMaxWidth = !this.maxWidth || newWidth <= this.maxWidth;

            if (overMinWidth && underMaxWidth) {
              this.element.style.width = "".concat(newWidth, "px");
            }
          }
        }, {
          key: "_destroySubscription",
          value: function _destroySubscription() {
            if (this.subscription) {
              this.subscription.unsubscribe();
              this.subscription = undefined;
            }
          }
        }]);

        return ResizeableDirective;
      }();

      ResizeableDirective.ɵfac = function ResizeableDirective_Factory(t) {
        return new (t || ResizeableDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]));
      };

      ResizeableDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: ResizeableDirective,
        selectors: [["", "resizeable", ""]],
        hostVars: 2,
        hostBindings: function ResizeableDirective_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("mousedown", function ResizeableDirective_mousedown_HostBindingHandler($event) {
              return ctx.onMousedown($event);
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("resizeable", ctx.resizeEnabled);
          }
        },
        inputs: {
          resizeEnabled: "resizeEnabled",
          minWidth: "minWidth",
          maxWidth: "maxWidth"
        },
        outputs: {
          resize: "resize"
        }
      });

      ResizeableDirective.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }];
      };

      ResizeableDirective.propDecorators = {
        resizeEnabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        minWidth: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        maxWidth: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        resize: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onMousedown: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
          args: ['mousedown', ['$event']]
        }]
      };

      var OrderableDirective = /*#__PURE__*/function () {
        function OrderableDirective(differs, document) {
          _classCallCheck2(this, OrderableDirective);

          this.document = document;
          this.reorder = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.targetChanged = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.differ = differs.find({}).create();
        }

        _createClass2(OrderableDirective, [{
          key: "ngAfterContentInit",
          value: function ngAfterContentInit() {
            // HACK: Investigate Better Way
            this.updateSubscriptions();
            this.draggables.changes.subscribe(this.updateSubscriptions.bind(this));
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.draggables.forEach(function (d) {
              d.dragStart.unsubscribe();
              d.dragging.unsubscribe();
              d.dragEnd.unsubscribe();
            });
          }
        }, {
          key: "updateSubscriptions",
          value: function updateSubscriptions() {
            var _this790 = this;

            var diffs = this.differ.diff(this.createMapDiffs());

            if (diffs) {
              var subscribe = function subscribe(_ref119) {
                var currentValue = _ref119.currentValue,
                    previousValue = _ref119.previousValue;
                unsubscribe({
                  previousValue: previousValue
                });

                if (currentValue) {
                  currentValue.dragStart.subscribe(_this790.onDragStart.bind(_this790));
                  currentValue.dragging.subscribe(_this790.onDragging.bind(_this790));
                  currentValue.dragEnd.subscribe(_this790.onDragEnd.bind(_this790));
                }
              };

              var unsubscribe = function unsubscribe(_ref120) {
                var previousValue = _ref120.previousValue;

                if (previousValue) {
                  previousValue.dragStart.unsubscribe();
                  previousValue.dragging.unsubscribe();
                  previousValue.dragEnd.unsubscribe();
                }
              };

              diffs.forEachAddedItem(subscribe); // diffs.forEachChangedItem(subscribe.bind(this));

              diffs.forEachRemovedItem(unsubscribe);
            }
          }
        }, {
          key: "onDragStart",
          value: function onDragStart() {
            this.positions = {};
            var i = 0;

            var _iterator81 = _createForOfIteratorHelper(this.draggables.toArray()),
                _step80;

            try {
              for (_iterator81.s(); !(_step80 = _iterator81.n()).done;) {
                var dragger = _step80.value;
                var elm = dragger.element;
                var left = parseInt(elm.offsetLeft.toString(), 0);
                this.positions[dragger.dragModel.prop] = {
                  left: left,
                  right: left + parseInt(elm.offsetWidth.toString(), 0),
                  index: i++,
                  element: elm
                };
              }
            } catch (err) {
              _iterator81.e(err);
            } finally {
              _iterator81.f();
            }
          }
        }, {
          key: "onDragging",
          value: function onDragging(_ref121) {
            var element = _ref121.element,
                model = _ref121.model,
                event = _ref121.event;
            var prevPos = this.positions[model.prop];
            var target = this.isTarget(model, event);

            if (target) {
              if (this.lastDraggingIndex !== target.i) {
                this.targetChanged.emit({
                  prevIndex: this.lastDraggingIndex,
                  newIndex: target.i,
                  initialIndex: prevPos.index
                });
                this.lastDraggingIndex = target.i;
              }
            } else if (this.lastDraggingIndex !== prevPos.index) {
              this.targetChanged.emit({
                prevIndex: this.lastDraggingIndex,
                initialIndex: prevPos.index
              });
              this.lastDraggingIndex = prevPos.index;
            }
          }
        }, {
          key: "onDragEnd",
          value: function onDragEnd(_ref122) {
            var element = _ref122.element,
                model = _ref122.model,
                event = _ref122.event;
            var prevPos = this.positions[model.prop];
            var target = this.isTarget(model, event);

            if (target) {
              this.reorder.emit({
                prevIndex: prevPos.index,
                newIndex: target.i,
                model: model
              });
            }

            this.lastDraggingIndex = undefined;
            element.style.left = 'auto';
          }
        }, {
          key: "isTarget",
          value: function isTarget(model, event) {
            var _this791 = this;

            var i = 0;
            var x = event.x || event.clientX;
            var y = event.y || event.clientY;
            var targets = this.document.elementsFromPoint(x, y);

            var _loop12 = function _loop12(prop) {
              // current column position which throws event.
              var pos = _this791.positions[prop]; // since we drag the inner span, we need to find it in the elements at the cursor

              if (model.prop !== prop && targets.find(function (el) {
                return el === pos.element;
              })) {
                return {
                  v: {
                    pos: pos,
                    i: i
                  }
                };
              }

              i++;
            };

            for (var prop in this.positions) {
              var _ret = _loop12(prop);

              if (typeof _ret === "object") return _ret.v;
            }
          }
        }, {
          key: "createMapDiffs",
          value: function createMapDiffs() {
            return this.draggables.toArray().reduce(function (acc, curr) {
              acc[curr.dragModel.$$id] = curr;
              return acc;
            }, {});
          }
        }]);

        return OrderableDirective;
      }();

      OrderableDirective.ɵfac = function OrderableDirective_Factory(t) {
        return new (t || OrderableDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]));
      };

      OrderableDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: OrderableDirective,
        selectors: [["", "orderable", ""]],
        contentQueries: function OrderableDirective_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, DraggableDirective, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.draggables = _t);
          }
        },
        outputs: {
          reorder: "reorder",
          targetChanged: "targetChanged"
        }
      });

      OrderableDirective.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
          }]
        }];
      };

      OrderableDirective.propDecorators = {
        reorder: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        targetChanged: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        draggables: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
          args: [DraggableDirective, {
            descendants: true
          }]
        }]
      };

      var LongPressDirective = /*#__PURE__*/function () {
        function LongPressDirective() {
          _classCallCheck2(this, LongPressDirective);

          this.pressEnabled = true;
          this.duration = 500;
          this.longPressStart = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.longPressing = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.longPressEnd = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.mouseX = 0;
          this.mouseY = 0;
        }

        _createClass2(LongPressDirective, [{
          key: "press",
          get: function get() {
            return this.pressing;
          }
        }, {
          key: "isLongPress",
          get: function get() {
            return this.isLongPressing;
          }
        }, {
          key: "onMouseDown",
          value: function onMouseDown(event) {
            var _this792 = this;

            // don't do right/middle clicks
            if (event.which !== 1 || !this.pressEnabled) return; // don't start drag if its on resize handle

            var target = event.target;
            if (target.classList.contains('resize-handle')) return;
            this.mouseX = event.clientX;
            this.mouseY = event.clientY;
            this.pressing = true;
            this.isLongPressing = false;
            var mouseup = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(document, 'mouseup');
            this.subscription = mouseup.subscribe(function (ev) {
              return _this792.onMouseup();
            });
            this.timeout = setTimeout(function () {
              _this792.isLongPressing = true;

              _this792.longPressStart.emit({
                event: event,
                model: _this792.pressModel
              });

              _this792.subscription.add(Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(document, 'mousemove').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(mouseup)).subscribe(function (mouseEvent) {
                return _this792.onMouseMove(mouseEvent);
              }));

              _this792.loop(event);
            }, this.duration);
            this.loop(event);
          }
        }, {
          key: "onMouseMove",
          value: function onMouseMove(event) {
            if (this.pressing && !this.isLongPressing) {
              var xThres = Math.abs(event.clientX - this.mouseX) > 10;
              var yThres = Math.abs(event.clientY - this.mouseY) > 10;

              if (xThres || yThres) {
                this.endPress();
              }
            }
          }
        }, {
          key: "loop",
          value: function loop(event) {
            var _this793 = this;

            if (this.isLongPressing) {
              this.timeout = setTimeout(function () {
                _this793.longPressing.emit({
                  event: event,
                  model: _this793.pressModel
                });

                _this793.loop(event);
              }, 50);
            }
          }
        }, {
          key: "endPress",
          value: function endPress() {
            clearTimeout(this.timeout);
            this.isLongPressing = false;
            this.pressing = false;

            this._destroySubscription();

            this.longPressEnd.emit({
              model: this.pressModel
            });
          }
        }, {
          key: "onMouseup",
          value: function onMouseup() {
            this.endPress();
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._destroySubscription();
          }
        }, {
          key: "_destroySubscription",
          value: function _destroySubscription() {
            if (this.subscription) {
              this.subscription.unsubscribe();
              this.subscription = undefined;
            }
          }
        }]);

        return LongPressDirective;
      }();

      LongPressDirective.ɵfac = function LongPressDirective_Factory(t) {
        return new (t || LongPressDirective)();
      };

      LongPressDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: LongPressDirective,
        selectors: [["", "long-press", ""]],
        hostVars: 4,
        hostBindings: function LongPressDirective_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("mousedown", function LongPressDirective_mousedown_HostBindingHandler($event) {
              return ctx.onMouseDown($event);
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("press", ctx.press)("longpress", ctx.isLongPress);
          }
        },
        inputs: {
          pressEnabled: "pressEnabled",
          duration: "duration",
          pressModel: "pressModel"
        },
        outputs: {
          longPressStart: "longPressStart",
          longPressing: "longPressing",
          longPressEnd: "longPressEnd"
        }
      });
      LongPressDirective.propDecorators = {
        pressEnabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        pressModel: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        duration: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        longPressStart: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        longPressing: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        longPressEnd: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        press: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['class.press']
        }],
        isLongPress: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['class.longpress']
        }],
        onMouseDown: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
          args: ['mousedown', ['$event']]
        }]
      };

      var ScrollerComponent = /*#__PURE__*/function () {
        function ScrollerComponent(ngZone, element, renderer) {
          _classCallCheck2(this, ScrollerComponent);

          this.ngZone = ngZone;
          this.renderer = renderer;
          this.scrollbarV = false;
          this.scrollbarH = false;
          this.scroll = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.scrollYPos = 0;
          this.scrollXPos = 0;
          this.prevScrollYPos = 0;
          this.prevScrollXPos = 0;
          this._scrollEventListener = null;
          this.element = element.nativeElement;
        }

        _createClass2(ScrollerComponent, [{
          key: "ngOnInit",
          value: function ngOnInit() {
            // manual bind so we don't always listen
            if (this.scrollbarV || this.scrollbarH) {
              var renderer = this.renderer;
              this.parentElement = renderer.parentNode(renderer.parentNode(this.element));
              this._scrollEventListener = this.onScrolled.bind(this);
              this.parentElement.addEventListener('scroll', this._scrollEventListener);
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            if (this._scrollEventListener) {
              this.parentElement.removeEventListener('scroll', this._scrollEventListener);
              this._scrollEventListener = null;
            }
          }
        }, {
          key: "setOffset",
          value: function setOffset(offsetY) {
            if (this.parentElement) {
              this.parentElement.scrollTop = offsetY;
            }
          }
        }, {
          key: "onScrolled",
          value: function onScrolled(event) {
            var _this794 = this;

            var dom = event.currentTarget;
            requestAnimationFrame(function () {
              _this794.scrollYPos = dom.scrollTop;
              _this794.scrollXPos = dom.scrollLeft;

              _this794.updateOffset();
            });
          }
        }, {
          key: "updateOffset",
          value: function updateOffset() {
            var direction;

            if (this.scrollYPos < this.prevScrollYPos) {
              direction = 'down';
            } else if (this.scrollYPos > this.prevScrollYPos) {
              direction = 'up';
            }

            this.scroll.emit({
              direction: direction,
              scrollYPos: this.scrollYPos,
              scrollXPos: this.scrollXPos
            });
            this.prevScrollYPos = this.scrollYPos;
            this.prevScrollXPos = this.scrollXPos;
          }
        }]);

        return ScrollerComponent;
      }();

      ScrollerComponent.ɵfac = function ScrollerComponent_Factory(t) {
        return new (t || ScrollerComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]));
      };

      ScrollerComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: ScrollerComponent,
        selectors: [["datatable-scroller"]],
        hostAttrs: [1, "datatable-scroll"],
        hostVars: 4,
        hostBindings: function ScrollerComponent_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("height", ctx.scrollHeight, "px")("width", ctx.scrollWidth, "px");
          }
        },
        inputs: {
          scrollbarV: "scrollbarV",
          scrollbarH: "scrollbarH",
          scrollHeight: "scrollHeight",
          scrollWidth: "scrollWidth"
        },
        outputs: {
          scroll: "scroll"
        },
        ngContentSelectors: _c0,
        decls: 1,
        vars: 0,
        template: function ScrollerComponent_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](0);
          }
        },
        encapsulation: 2,
        changeDetection: 0
      });

      ScrollerComponent.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }];
      };

      ScrollerComponent.propDecorators = {
        scrollbarV: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        scrollbarH: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        scrollHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['style.height.px']
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        scrollWidth: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['style.width.px']
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        scroll: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      var DatatableGroupHeaderTemplateDirective = function DatatableGroupHeaderTemplateDirective(template) {
        _classCallCheck2(this, DatatableGroupHeaderTemplateDirective);

        this.template = template;
      };

      DatatableGroupHeaderTemplateDirective.ɵfac = function DatatableGroupHeaderTemplateDirective_Factory(t) {
        return new (t || DatatableGroupHeaderTemplateDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]));
      };

      DatatableGroupHeaderTemplateDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: DatatableGroupHeaderTemplateDirective,
        selectors: [["", "ngx-datatable-group-header-template", ""]]
      });

      DatatableGroupHeaderTemplateDirective.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }];
      };

      var DatatableGroupHeaderDirective = /*#__PURE__*/function () {
        function DatatableGroupHeaderDirective() {
          _classCallCheck2(this, DatatableGroupHeaderDirective);

          /**
           * Row height is required when virtual scroll is enabled.
           */
          this.rowHeight = 0;
          /**
           * Track toggling of group visibility
           */

          this.toggle = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        }

        _createClass2(DatatableGroupHeaderDirective, [{
          key: "template",
          get: function get() {
            return this._templateInput || this._templateQuery;
          }
          /**
           * Toggle the expansion of a group
           */

        }, {
          key: "toggleExpandGroup",
          value: function toggleExpandGroup(group) {
            this.toggle.emit({
              type: 'group',
              value: group
            });
          }
          /**
           * Expand all groups
           */

        }, {
          key: "expandAllGroups",
          value: function expandAllGroups() {
            this.toggle.emit({
              type: 'all',
              value: true
            });
          }
          /**
           * Collapse all groups
           */

        }, {
          key: "collapseAllGroups",
          value: function collapseAllGroups() {
            this.toggle.emit({
              type: 'all',
              value: false
            });
          }
        }]);

        return DatatableGroupHeaderDirective;
      }();

      DatatableGroupHeaderDirective.ɵfac = function DatatableGroupHeaderDirective_Factory(t) {
        return new (t || DatatableGroupHeaderDirective)();
      };

      DatatableGroupHeaderDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: DatatableGroupHeaderDirective,
        selectors: [["ngx-datatable-group-header"]],
        contentQueries: function DatatableGroupHeaderDirective_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, DatatableGroupHeaderTemplateDirective, 3, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx._templateQuery = _t.first);
          }
        },
        inputs: {
          rowHeight: "rowHeight",
          _templateInput: ["template", "_templateInput"]
        },
        outputs: {
          toggle: "toggle"
        }
      });
      DatatableGroupHeaderDirective.propDecorators = {
        rowHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        _templateInput: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['template']
        }],
        _templateQuery: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [DatatableGroupHeaderTemplateDirective, {
            read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"],
            "static": true
          }]
        }],
        toggle: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };
      /**
       * Always returns the empty string ''
       */

      function emptyStringGetter() {
        return '';
      }
      /**
       * Returns the appropriate getter function for this kind of prop.
       * If prop == null, returns the emptyStringGetter.
       */


      function getterForProp(prop) {
        if (prop == null) {
          return emptyStringGetter;
        }

        if (typeof prop === 'number') {
          return numericIndexGetter;
        } else {
          // deep or simple
          if (prop.indexOf('.') !== -1) {
            return deepValueGetter;
          } else {
            return shallowValueGetter;
          }
        }
      }
      /**
       * Returns the value at this numeric index.
       * @param row array of values
       * @param index numeric index
       * @returns any or '' if invalid index
       */


      function numericIndexGetter(row, index) {
        if (row == null) {
          return '';
        } // mimic behavior of deepValueGetter


        if (!row || index == null) {
          return row;
        }

        var value = row[index];

        if (value == null) {
          return '';
        }

        return value;
      }
      /**
       * Returns the value of a field.
       * (more efficient than deepValueGetter)
       * @param obj object containing the field
       * @param fieldName field name string
       */


      function shallowValueGetter(obj, fieldName) {
        if (obj == null) {
          return '';
        }

        if (!obj || !fieldName) {
          return obj;
        }

        var value = obj[fieldName];

        if (value == null) {
          return '';
        }

        return value;
      }
      /**
       * Returns a deep object given a string. zoo['animal.type']
       */


      function deepValueGetter(obj, path) {
        if (obj == null) {
          return '';
        }

        if (!obj || !path) {
          return obj;
        } // check if path matches a root-level field
        // { "a.b.c": 123 }


        var current = obj[path];

        if (current !== undefined) {
          return current;
        }

        current = obj;
        var split = path.split('.');

        if (split.length) {
          for (var i = 0; i < split.length; i++) {
            current = current[split[i]]; // if found undefined, return empty string

            if (current === undefined || current === null) {
              return '';
            }
          }
        }

        return current;
      }

      function optionalGetterForProp(prop) {
        return prop && function (row) {
          return getterForProp(prop)(row, prop);
        };
      }
      /**
       * This functions rearrange items by their parents
       * Also sets the level value to each of the items
       *
       * Note: Expecting each item has a property called parentId
       * Note: This algorithm will fail if a list has two or more items with same ID
       * NOTE: This algorithm will fail if there is a deadlock of relationship
       *
       * For example,
       *
       * Input
       *
       * id -> parent
       * 1  -> 0
       * 2  -> 0
       * 3  -> 1
       * 4  -> 1
       * 5  -> 2
       * 7  -> 8
       * 6  -> 3
       *
       *
       * Output
       * id -> level
       * 1      -> 0
       * --3    -> 1
       * ----6  -> 2
       * --4    -> 1
       * 2      -> 0
       * --5    -> 1
       * 7     -> 8
       *
       *
       * @param rows
       *
       */


      function groupRowsByParents(rows, from, to) {
        if (from && to) {
          var nodeById = {};
          var l = rows.length;
          var node = null;
          nodeById[0] = new TreeNode(); // that's the root node

          var uniqIDs = rows.reduce(function (arr, item) {
            var toValue = to(item);

            if (arr.indexOf(toValue) === -1) {
              arr.push(toValue);
            }

            return arr;
          }, []);

          for (var i = 0; i < l; i++) {
            // make TreeNode objects for each item
            nodeById[to(rows[i])] = new TreeNode(rows[i]);
          }

          for (var _i47 = 0; _i47 < l; _i47++) {
            // link all TreeNode objects
            node = nodeById[to(rows[_i47])];
            var parent = 0;
            var fromValue = from(node.row);

            if (!!fromValue && uniqIDs.indexOf(fromValue) > -1) {
              parent = fromValue;
            }

            node.parent = nodeById[parent];
            node.row['level'] = node.parent.row['level'] + 1;
            node.parent.children.push(node);
          }

          var resolvedRows = [];
          nodeById[0].flatten(function () {
            resolvedRows = [].concat(_toConsumableArray(resolvedRows), [this.row]);
          }, true);
          return resolvedRows;
        } else {
          return rows;
        }
      }

      var TreeNode = /*#__PURE__*/function () {
        function TreeNode() {
          var row = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;

          _classCallCheck2(this, TreeNode);

          if (!row) {
            row = {
              level: -1,
              treeStatus: 'expanded'
            };
          }

          this.row = row;
          this.parent = null;
          this.children = [];
        }

        _createClass2(TreeNode, [{
          key: "flatten",
          value: function flatten(f, recursive) {
            if (this.row['treeStatus'] === 'expanded') {
              for (var i = 0, l = this.children.length; i < l; i++) {
                var child = this.children[i];
                f.apply(child, Array.prototype.slice.call(arguments, 2));
                if (recursive) child.flatten.apply(child, arguments);
              }
            }
          }
        }]);

        return TreeNode;
      }();
      /**
       * Converts strings from something to camel case
       * http://stackoverflow.com/questions/10425287/convert-dash-separated-string-to-camelcase
       */


      function camelCase(str) {
        // Replace special characters with a space
        str = str.replace(/[^a-zA-Z0-9 ]/g, ' '); // put a space before an uppercase letter

        str = str.replace(/([a-z](?=[A-Z]))/g, '$1 '); // Lower case first character and some other stuff

        str = str.replace(/([^a-zA-Z0-9 ])|^[0-9]+/g, '').trim().toLowerCase(); // uppercase characters preceded by a space or number

        str = str.replace(/([ 0-9]+)([a-zA-Z])/g, function (a, b, c) {
          return b.trim() + c.toUpperCase();
        });
        return str;
      }
      /**
       * Converts strings from camel case to words
       * http://stackoverflow.com/questions/7225407/convert-camelcasetext-to-camel-case-text
       */


      function deCamelCase(str) {
        return str.replace(/([A-Z])/g, function (match) {
          return " ".concat(match);
        }).replace(/^./, function (match) {
          return match.toUpperCase();
        });
      }
      /**
       * Creates a unique object id.
       * http://stackoverflow.com/questions/6248666/how-to-generate-short-uid-like-ax4j9z-in-js
       */


      function id() {
        return ('0000' + (Math.random() * Math.pow(36, 4) << 0).toString(36)).slice(-4);
      }
      /**
       * Sets the column defaults
       */


      function setColumnDefaults(columns) {
        if (!columns) return; // Only one column should hold the tree view
        // Thus if multiple columns are provided with
        // isTreeColumn as true we take only the first one

        var treeColumnFound = false;

        var _iterator82 = _createForOfIteratorHelper(columns),
            _step81;

        try {
          for (_iterator82.s(); !(_step81 = _iterator82.n()).done;) {
            var column = _step81.value;

            if (!column.$$id) {
              column.$$id = id();
            } // prop can be numeric; zero is valid not a missing prop
            // translate name => prop


            if (isNullOrUndefined(column.prop) && column.name) {
              column.prop = camelCase(column.name);
            }

            if (!column.$$valueGetter) {
              column.$$valueGetter = getterForProp(column.prop);
            } // format props if no name passed


            if (!isNullOrUndefined(column.prop) && isNullOrUndefined(column.name)) {
              column.name = deCamelCase(String(column.prop));
            }

            if (isNullOrUndefined(column.prop) && isNullOrUndefined(column.name)) {
              column.name = ''; // Fixes IE and Edge displaying `null`
            }

            if (!column.hasOwnProperty('resizeable')) {
              column.resizeable = true;
            }

            if (!column.hasOwnProperty('sortable')) {
              column.sortable = true;
            }

            if (!column.hasOwnProperty('draggable')) {
              column.draggable = true;
            }

            if (!column.hasOwnProperty('canAutoResize')) {
              column.canAutoResize = true;
            }

            if (!column.hasOwnProperty('width')) {
              column.width = 150;
            }

            if (!column.hasOwnProperty('isTreeColumn')) {
              column.isTreeColumn = false;
            } else {
              if (column.isTreeColumn && !treeColumnFound) {
                // If the first column with isTreeColumn is true found
                // we mark that treeCoulmn is found
                treeColumnFound = true;
              } else {
                // After that isTreeColumn property for any other column
                // will be set as false
                column.isTreeColumn = false;
              }
            }
          }
        } catch (err) {
          _iterator82.e(err);
        } finally {
          _iterator82.f();
        }
      }

      function isNullOrUndefined(value) {
        return value === null || value === undefined;
      }
      /**
       * Translates templates definitions to objects
       */


      function translateTemplates(templates) {
        var result = [];

        var _iterator83 = _createForOfIteratorHelper(templates),
            _step82;

        try {
          for (_iterator83.s(); !(_step82 = _iterator83.n()).done;) {
            var temp = _step82.value;
            var col = {};
            var props = Object.getOwnPropertyNames(temp);

            var _iterator84 = _createForOfIteratorHelper(props),
                _step83;

            try {
              for (_iterator84.s(); !(_step83 = _iterator84.n()).done;) {
                var prop = _step83.value;
                col[prop] = temp[prop];
              }
            } catch (err) {
              _iterator84.e(err);
            } finally {
              _iterator84.f();
            }

            if (temp.headerTemplate) {
              col.headerTemplate = temp.headerTemplate;
            }

            if (temp.cellTemplate) {
              col.cellTemplate = temp.cellTemplate;
            }

            if (temp.summaryFunc) {
              col.summaryFunc = temp.summaryFunc;
            }

            if (temp.summaryTemplate) {
              col.summaryTemplate = temp.summaryTemplate;
            }

            result.push(col);
          }
        } catch (err) {
          _iterator83.e(err);
        } finally {
          _iterator83.f();
        }

        return result;
      }

      var ColumnMode;

      (function (ColumnMode) {
        ColumnMode["standard"] = "standard";
        ColumnMode["flex"] = "flex";
        ColumnMode["force"] = "force";
      })(ColumnMode || (ColumnMode = {}));

      var SelectionType;

      (function (SelectionType) {
        SelectionType["single"] = "single";
        SelectionType["multi"] = "multi";
        SelectionType["multiClick"] = "multiClick";
        SelectionType["cell"] = "cell";
        SelectionType["checkbox"] = "checkbox";
      })(SelectionType || (SelectionType = {}));

      var SortType;

      (function (SortType) {
        SortType["single"] = "single";
        SortType["multi"] = "multi";
      })(SortType || (SortType = {}));

      var ContextmenuType;

      (function (ContextmenuType) {
        ContextmenuType["header"] = "header";
        ContextmenuType["body"] = "body";
      })(ContextmenuType || (ContextmenuType = {}));

      var DataTableColumnHeaderDirective = function DataTableColumnHeaderDirective(template) {
        _classCallCheck2(this, DataTableColumnHeaderDirective);

        this.template = template;
      };

      DataTableColumnHeaderDirective.ɵfac = function DataTableColumnHeaderDirective_Factory(t) {
        return new (t || DataTableColumnHeaderDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]));
      };

      DataTableColumnHeaderDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: DataTableColumnHeaderDirective,
        selectors: [["", "ngx-datatable-header-template", ""]]
      });

      DataTableColumnHeaderDirective.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }];
      };

      var DataTableColumnCellDirective = function DataTableColumnCellDirective(template) {
        _classCallCheck2(this, DataTableColumnCellDirective);

        this.template = template;
      };

      DataTableColumnCellDirective.ɵfac = function DataTableColumnCellDirective_Factory(t) {
        return new (t || DataTableColumnCellDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]));
      };

      DataTableColumnCellDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: DataTableColumnCellDirective,
        selectors: [["", "ngx-datatable-cell-template", ""]]
      });

      DataTableColumnCellDirective.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }];
      };

      var DataTableColumnCellTreeToggle = function DataTableColumnCellTreeToggle(template) {
        _classCallCheck2(this, DataTableColumnCellTreeToggle);

        this.template = template;
      };

      DataTableColumnCellTreeToggle.ɵfac = function DataTableColumnCellTreeToggle_Factory(t) {
        return new (t || DataTableColumnCellTreeToggle)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]));
      };

      DataTableColumnCellTreeToggle.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: DataTableColumnCellTreeToggle,
        selectors: [["", "ngx-datatable-tree-toggle", ""]]
      });

      DataTableColumnCellTreeToggle.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }];
      };

      var DataTableColumnDirective = /*#__PURE__*/function () {
        function DataTableColumnDirective(columnChangesService) {
          _classCallCheck2(this, DataTableColumnDirective);

          this.columnChangesService = columnChangesService;
          this.isFirstChange = true;
        }

        _createClass2(DataTableColumnDirective, [{
          key: "cellTemplate",
          get: function get() {
            return this._cellTemplateInput || this._cellTemplateQuery;
          }
        }, {
          key: "headerTemplate",
          get: function get() {
            return this._headerTemplateInput || this._headerTemplateQuery;
          }
        }, {
          key: "treeToggleTemplate",
          get: function get() {
            return this._treeToggleTemplateInput || this._treeToggleTemplateQuery;
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges() {
            if (this.isFirstChange) {
              this.isFirstChange = false;
            } else {
              this.columnChangesService.onInputChange();
            }
          }
        }]);

        return DataTableColumnDirective;
      }();

      DataTableColumnDirective.ɵfac = function DataTableColumnDirective_Factory(t) {
        return new (t || DataTableColumnDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](ColumnChangesService));
      };

      DataTableColumnDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: DataTableColumnDirective,
        selectors: [["ngx-datatable-column"]],
        contentQueries: function DataTableColumnDirective_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, DataTableColumnCellDirective, 3, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, DataTableColumnHeaderDirective, 3, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, DataTableColumnCellTreeToggle, 3, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx._cellTemplateQuery = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx._headerTemplateQuery = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx._treeToggleTemplateQuery = _t.first);
          }
        },
        inputs: {
          name: "name",
          prop: "prop",
          frozenLeft: "frozenLeft",
          frozenRight: "frozenRight",
          flexGrow: "flexGrow",
          resizeable: "resizeable",
          comparator: "comparator",
          pipe: "pipe",
          sortable: "sortable",
          draggable: "draggable",
          canAutoResize: "canAutoResize",
          minWidth: "minWidth",
          width: "width",
          maxWidth: "maxWidth",
          checkboxable: "checkboxable",
          headerCheckboxable: "headerCheckboxable",
          headerClass: "headerClass",
          cellClass: "cellClass",
          isTreeColumn: "isTreeColumn",
          treeLevelIndent: "treeLevelIndent",
          summaryFunc: "summaryFunc",
          summaryTemplate: "summaryTemplate",
          _cellTemplateInput: ["cellTemplate", "_cellTemplateInput"],
          _headerTemplateInput: ["headerTemplate", "_headerTemplateInput"],
          _treeToggleTemplateInput: ["treeToggleTemplate", "_treeToggleTemplateInput"]
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
      });

      DataTableColumnDirective.ctorParameters = function () {
        return [{
          type: ColumnChangesService
        }];
      };

      DataTableColumnDirective.propDecorators = {
        name: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        prop: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        frozenLeft: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        frozenRight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        flexGrow: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        resizeable: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        comparator: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        pipe: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        sortable: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        draggable: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        canAutoResize: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        minWidth: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        width: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        maxWidth: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        checkboxable: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        headerCheckboxable: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        headerClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        cellClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        isTreeColumn: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        treeLevelIndent: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        summaryFunc: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        summaryTemplate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        _cellTemplateInput: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['cellTemplate']
        }],
        _cellTemplateQuery: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [DataTableColumnCellDirective, {
            read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"],
            "static": true
          }]
        }],
        _headerTemplateInput: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['headerTemplate']
        }],
        _headerTemplateQuery: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [DataTableColumnHeaderDirective, {
            read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"],
            "static": true
          }]
        }],
        _treeToggleTemplateInput: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['treeToggleTemplate']
        }],
        _treeToggleTemplateQuery: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [DataTableColumnCellTreeToggle, {
            read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"],
            "static": true
          }]
        }]
      };

      var DatatableRowDetailTemplateDirective = function DatatableRowDetailTemplateDirective(template) {
        _classCallCheck2(this, DatatableRowDetailTemplateDirective);

        this.template = template;
      };

      DatatableRowDetailTemplateDirective.ɵfac = function DatatableRowDetailTemplateDirective_Factory(t) {
        return new (t || DatatableRowDetailTemplateDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]));
      };

      DatatableRowDetailTemplateDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: DatatableRowDetailTemplateDirective,
        selectors: [["", "ngx-datatable-row-detail-template", ""]]
      });

      DatatableRowDetailTemplateDirective.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }];
      };

      var DatatableRowDetailDirective = /*#__PURE__*/function () {
        function DatatableRowDetailDirective() {
          _classCallCheck2(this, DatatableRowDetailDirective);

          /**
           * The detail row height is required especially
           * when virtual scroll is enabled.
           */
          this.rowHeight = 0;
          /**
           * Row detail row visbility was toggled.
           */

          this.toggle = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        }

        _createClass2(DatatableRowDetailDirective, [{
          key: "template",
          get: function get() {
            return this._templateInput || this._templateQuery;
          }
          /**
           * Toggle the expansion of the row
           */

        }, {
          key: "toggleExpandRow",
          value: function toggleExpandRow(row) {
            this.toggle.emit({
              type: 'row',
              value: row
            });
          }
          /**
           * API method to expand all the rows.
           */

        }, {
          key: "expandAllRows",
          value: function expandAllRows() {
            this.toggle.emit({
              type: 'all',
              value: true
            });
          }
          /**
           * API method to collapse all the rows.
           */

        }, {
          key: "collapseAllRows",
          value: function collapseAllRows() {
            this.toggle.emit({
              type: 'all',
              value: false
            });
          }
        }]);

        return DatatableRowDetailDirective;
      }();

      DatatableRowDetailDirective.ɵfac = function DatatableRowDetailDirective_Factory(t) {
        return new (t || DatatableRowDetailDirective)();
      };

      DatatableRowDetailDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: DatatableRowDetailDirective,
        selectors: [["ngx-datatable-row-detail"]],
        contentQueries: function DatatableRowDetailDirective_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, DatatableRowDetailTemplateDirective, 3, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx._templateQuery = _t.first);
          }
        },
        inputs: {
          rowHeight: "rowHeight",
          _templateInput: ["template", "_templateInput"]
        },
        outputs: {
          toggle: "toggle"
        }
      });
      DatatableRowDetailDirective.propDecorators = {
        rowHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        _templateInput: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['template']
        }],
        _templateQuery: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [DatatableRowDetailTemplateDirective, {
            read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"],
            "static": true
          }]
        }],
        toggle: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      var DatatableFooterDirective = /*#__PURE__*/function () {
        function DatatableFooterDirective() {
          _classCallCheck2(this, DatatableFooterDirective);
        }

        _createClass2(DatatableFooterDirective, [{
          key: "template",
          get: function get() {
            return this._templateInput || this._templateQuery;
          }
        }]);

        return DatatableFooterDirective;
      }();

      DatatableFooterDirective.ɵfac = function DatatableFooterDirective_Factory(t) {
        return new (t || DatatableFooterDirective)();
      };

      DatatableFooterDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: DatatableFooterDirective,
        selectors: [["ngx-datatable-footer"]],
        contentQueries: function DatatableFooterDirective_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, DataTableFooterTemplateDirective, 1, _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx._templateQuery = _t.first);
          }
        },
        inputs: {
          footerHeight: "footerHeight",
          totalMessage: "totalMessage",
          selectedMessage: "selectedMessage",
          pagerLeftArrowIcon: "pagerLeftArrowIcon",
          pagerRightArrowIcon: "pagerRightArrowIcon",
          pagerPreviousIcon: "pagerPreviousIcon",
          pagerNextIcon: "pagerNextIcon",
          _templateInput: ["template", "_templateInput"]
        }
      });
      DatatableFooterDirective.propDecorators = {
        footerHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        totalMessage: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        selectedMessage: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        pagerLeftArrowIcon: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        pagerRightArrowIcon: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        pagerPreviousIcon: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        pagerNextIcon: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        _templateInput: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['template']
        }],
        _templateQuery: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [DataTableFooterTemplateDirective, {
            read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }]
        }]
      };
      /**
       * Returns the columns by pin.
       */

      function columnsByPin(cols) {
        var ret = {
          left: [],
          center: [],
          right: []
        };

        if (cols) {
          var _iterator85 = _createForOfIteratorHelper(cols),
              _step84;

          try {
            for (_iterator85.s(); !(_step84 = _iterator85.n()).done;) {
              var col = _step84.value;

              if (col.frozenLeft) {
                ret.left.push(col);
              } else if (col.frozenRight) {
                ret.right.push(col);
              } else {
                ret.center.push(col);
              }
            }
          } catch (err) {
            _iterator85.e(err);
          } finally {
            _iterator85.f();
          }
        }

        return ret;
      }
      /**
       * Returns the widths of all group sets of a column
       */


      function columnGroupWidths(groups, all) {
        return {
          left: columnTotalWidth(groups.left),
          center: columnTotalWidth(groups.center),
          right: columnTotalWidth(groups.right),
          total: Math.floor(columnTotalWidth(all))
        };
      }
      /**
       * Calculates the total width of all columns and their groups
       */


      function columnTotalWidth(columns, prop) {
        var totalWidth = 0;

        if (columns) {
          var _iterator86 = _createForOfIteratorHelper(columns),
              _step85;

          try {
            for (_iterator86.s(); !(_step85 = _iterator86.n()).done;) {
              var c = _step85.value;
              var has = prop && c[prop];
              var width = has ? c[prop] : c.width;
              totalWidth = totalWidth + parseFloat(width);
            }
          } catch (err) {
            _iterator86.e(err);
          } finally {
            _iterator86.f();
          }
        }

        return totalWidth;
      }
      /**
       * Calculates the total width of all columns and their groups
       */


      function columnsTotalWidth(columns, prop) {
        var totalWidth = 0;

        var _iterator87 = _createForOfIteratorHelper(columns),
            _step86;

        try {
          for (_iterator87.s(); !(_step86 = _iterator87.n()).done;) {
            var column = _step86.value;
            var has = prop && column[prop];
            totalWidth = totalWidth + (has ? column[prop] : column.width);
          }
        } catch (err) {
          _iterator87.e(err);
        } finally {
          _iterator87.f();
        }

        return totalWidth;
      }

      function columnsByPinArr(val) {
        var colsByPinArr = [];
        var colsByPin = columnsByPin(val);
        colsByPinArr.push({
          type: 'left',
          columns: colsByPin['left']
        });
        colsByPinArr.push({
          type: 'center',
          columns: colsByPin['center']
        });
        colsByPinArr.push({
          type: 'right',
          columns: colsByPin['right']
        });
        return colsByPinArr;
      }
      /**
       * This object contains the cache of the various row heights that are present inside
       * the data table.   Its based on Fenwick tree data structure that helps with
       * querying sums that have time complexity of log n.
       *
       * Fenwick Tree Credits: http://petr-mitrichev.blogspot.com/2013/05/fenwick-tree-range-updates.html
       * https://github.com/mikolalysenko/fenwick-tree
       *
       */


      var RowHeightCache = /*#__PURE__*/function () {
        function RowHeightCache() {
          _classCallCheck2(this, RowHeightCache);

          /**
           * Tree Array stores the cumulative information of the row heights to perform efficient
           * range queries and updates.  Currently the tree is initialized to the base row
           * height instead of the detail row height.
           */
          this.treeArray = [];
        }
        /**
         * Clear the Tree array.
         */


        _createClass2(RowHeightCache, [{
          key: "clearCache",
          value: function clearCache() {
            this.treeArray = [];
          }
          /**
           * Initialize the Fenwick tree with row Heights.
           *
           * @param rows The array of rows which contain the expanded status.
           * @param rowHeight The row height.
           * @param detailRowHeight The detail row height.
           */

        }, {
          key: "initCache",
          value: function initCache(details) {
            var rows = details.rows,
                rowHeight = details.rowHeight,
                detailRowHeight = details.detailRowHeight,
                externalVirtual = details.externalVirtual,
                rowCount = details.rowCount,
                rowIndexes = details.rowIndexes,
                rowExpansions = details.rowExpansions;
            var isFn = typeof rowHeight === 'function';
            var isDetailFn = typeof detailRowHeight === 'function';

            if (!isFn && isNaN(rowHeight)) {
              throw new Error("Row Height cache initialization failed. Please ensure that 'rowHeight' is a\n        valid number or function value: (".concat(rowHeight, ") when 'scrollbarV' is enabled."));
            } // Add this additional guard in case detailRowHeight is set to 'auto' as it wont work.


            if (!isDetailFn && isNaN(detailRowHeight)) {
              throw new Error("Row Height cache initialization failed. Please ensure that 'detailRowHeight' is a\n        valid number or function value: (".concat(detailRowHeight, ") when 'scrollbarV' is enabled."));
            }

            var n = externalVirtual ? rowCount : rows.length;
            this.treeArray = new Array(n);

            for (var i = 0; i < n; ++i) {
              this.treeArray[i] = 0;
            }

            for (var _i48 = 0; _i48 < n; ++_i48) {
              var row = rows[_i48];
              var currentRowHeight = rowHeight;

              if (isFn) {
                currentRowHeight = rowHeight(row);
              } // Add the detail row height to the already expanded rows.
              // This is useful for the table that goes through a filter or sort.


              var expanded = rowExpansions.has(row);

              if (row && expanded) {
                if (isDetailFn) {
                  var index = rowIndexes.get(row);
                  currentRowHeight += detailRowHeight(row, index);
                } else {
                  currentRowHeight += detailRowHeight;
                }
              }

              this.update(_i48, currentRowHeight);
            }
          }
          /**
           * Given the ScrollY position i.e. sum, provide the rowIndex
           * that is present in the current view port.  Below handles edge cases.
           */

        }, {
          key: "getRowIndex",
          value: function getRowIndex(scrollY) {
            if (scrollY === 0) return 0;
            return this.calcRowIndex(scrollY);
          }
          /**
           * When a row is expanded or rowHeight is changed, update the height.  This can
           * be utilized in future when Angular Data table supports dynamic row heights.
           */

        }, {
          key: "update",
          value: function update(atRowIndex, byRowHeight) {
            if (!this.treeArray.length) {
              throw new Error("Update at index ".concat(atRowIndex, " with value ").concat(byRowHeight, " failed:\n        Row Height cache not initialized."));
            }

            var n = this.treeArray.length;
            atRowIndex |= 0;

            while (atRowIndex < n) {
              this.treeArray[atRowIndex] += byRowHeight;
              atRowIndex |= atRowIndex + 1;
            }
          }
          /**
           * Range Sum query from 1 to the rowIndex
           */

        }, {
          key: "query",
          value: function query(atIndex) {
            if (!this.treeArray.length) {
              throw new Error("query at index ".concat(atIndex, " failed: Fenwick tree array not initialized."));
            }

            var sum = 0;
            atIndex |= 0;

            while (atIndex >= 0) {
              sum += this.treeArray[atIndex];
              atIndex = (atIndex & atIndex + 1) - 1;
            }

            return sum;
          }
          /**
           * Find the total height between 2 row indexes
           */

        }, {
          key: "queryBetween",
          value: function queryBetween(atIndexA, atIndexB) {
            return this.query(atIndexB) - this.query(atIndexA - 1);
          }
          /**
           * Given the ScrollY position i.e. sum, provide the rowIndex
           * that is present in the current view port.
           */

        }, {
          key: "calcRowIndex",
          value: function calcRowIndex(sum) {
            if (!this.treeArray.length) return 0;
            var pos = -1;
            var dataLength = this.treeArray.length; // Get the highest bit for the block size.

            var highestBit = Math.pow(2, dataLength.toString(2).length - 1);

            for (var blockSize = highestBit; blockSize !== 0; blockSize >>= 1) {
              var nextPos = pos + blockSize;

              if (nextPos < dataLength && sum >= this.treeArray[nextPos]) {
                sum -= this.treeArray[nextPos];
                pos = nextPos;
              }
            }

            return pos + 1;
          }
        }]);

        return RowHeightCache;
      }();

      var cache = {};
      var testStyle = typeof document !== 'undefined' ? document.createElement('div').style : undefined;

      var ɵ0 = function ɵ0() {
        var styles = typeof window !== 'undefined' ? window.getComputedStyle(document.documentElement, '') : undefined;
        var match = typeof styles !== 'undefined' ? Array.prototype.slice.call(styles).join('').match(/-(moz|webkit|ms)-/) : null;
        var pre = match !== null ? match[1] : undefined; // tslint:disable-next-line: tsr-detect-non-literal-regexp

        var dom = typeof pre !== 'undefined' ? 'WebKit|Moz|MS|O'.match(new RegExp('(' + pre + ')', 'i'))[1] : undefined;
        return dom ? {
          dom: dom,
          lowercase: pre,
          css: "-".concat(pre, "-"),
          js: pre[0].toUpperCase() + pre.substr(1)
        } : undefined;
      }; // Get Prefix
      // http://davidwalsh.name/vendor-prefix


      var prefix = ɵ0();

      function getVendorPrefixedName(property) {
        var name = camelCase(property);

        if (!cache[name]) {
          if (prefix !== undefined && testStyle[prefix.css + property] !== undefined) {
            cache[name] = prefix.css + property;
          } else if (testStyle[property] !== undefined) {
            cache[name] = property;
          }
        }

        return cache[name];
      } // browser detection and prefixing tools


      var transform = typeof window !== 'undefined' ? getVendorPrefixedName('transform') : undefined;
      var backfaceVisibility = typeof window !== 'undefined' ? getVendorPrefixedName('backfaceVisibility') : undefined;
      var hasCSSTransforms = typeof window !== 'undefined' ? !!getVendorPrefixedName('transform') : undefined;
      var hasCSS3DTransforms = typeof window !== 'undefined' ? !!getVendorPrefixedName('perspective') : undefined;
      var ua = typeof window !== 'undefined' ? window.navigator.userAgent : 'Chrome';
      var isSafari = /Safari\//.test(ua) && !/Chrome\//.test(ua);

      function translateXY(styles, x, y) {
        if (typeof transform !== 'undefined' && hasCSSTransforms) {
          if (!isSafari && hasCSS3DTransforms) {
            styles[transform] = "translate3d(".concat(x, "px, ").concat(y, "px, 0)");
            styles[backfaceVisibility] = 'hidden';
          } else {
            styles[camelCase(transform)] = "translate(".concat(x, "px, ").concat(y, "px)");
          }
        } else {
          styles.top = "".concat(y, "px");
          styles.left = "".concat(x, "px");
        }
      }

      var DataTableBodyComponent = /*#__PURE__*/function () {
        /**
         * Creates an instance of DataTableBodyComponent.
         */
        function DataTableBodyComponent(cd) {
          var _this795 = this;

          _classCallCheck2(this, DataTableBodyComponent);

          this.cd = cd;
          this.selected = [];
          this.scroll = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.page = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.activate = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.select = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.detailToggle = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.rowContextmenu = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"](false);
          this.treeAction = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.rowHeightsCache = new RowHeightCache();
          this.temp = [];
          this.offsetY = 0;
          this.indexes = {};
          this.rowIndexes = new WeakMap();
          this.rowExpansions = [];
          /**
           * Get the height of the detail row.
           */

          this.getDetailRowHeight = function (row, index) {
            if (!_this795.rowDetail) {
              return 0;
            }

            var rowHeight = _this795.rowDetail.rowHeight;
            return typeof rowHeight === 'function' ? rowHeight(row, index) : rowHeight;
          }; // declare fn here so we can get access to the `this` property


          this.rowTrackingFn = function (index, row) {
            var idx = _this795.getRowIndex(row);

            if (_this795.trackByProp) {
              return row[_this795.trackByProp];
            } else {
              return idx;
            }
          };
        }

        _createClass2(DataTableBodyComponent, [{
          key: "pageSize",
          get: function get() {
            return this._pageSize;
          },
          set: function set(val) {
            this._pageSize = val;
            this.recalcLayout();
          }
        }, {
          key: "rows",
          get: function get() {
            return this._rows;
          },
          set: function set(val) {
            this._rows = val;
            this.recalcLayout();
          }
        }, {
          key: "columns",
          get: function get() {
            return this._columns;
          },
          set: function set(val) {
            this._columns = val;
            var colsByPin = columnsByPin(val);
            this.columnGroupWidths = columnGroupWidths(colsByPin, val);
          }
        }, {
          key: "offset",
          get: function get() {
            return this._offset;
          },
          set: function set(val) {
            this._offset = val;
            if (!this.scrollbarV || this.scrollbarV && !this.virtualization) this.recalcLayout();
          }
        }, {
          key: "rowCount",
          get: function get() {
            return this._rowCount;
          },
          set: function set(val) {
            this._rowCount = val;
            this.recalcLayout();
          }
        }, {
          key: "bodyWidth",
          get: function get() {
            if (this.scrollbarH) {
              return this.innerWidth + 'px';
            } else {
              return '100%';
            }
          }
        }, {
          key: "bodyHeight",
          get: function get() {
            return this._bodyHeight;
          }
          /**
           * Returns if selection is enabled.
           */
          ,
          set: function set(val) {
            if (this.scrollbarV) {
              this._bodyHeight = val + 'px';
            } else {
              this._bodyHeight = 'auto';
            }

            this.recalcLayout();
          }
        }, {
          key: "selectEnabled",
          get: function get() {
            return !!this.selectionType;
          }
          /**
           * Property that would calculate the height of scroll bar
           * based on the row heights cache for virtual scroll and virtualization. Other scenarios
           * calculate scroll height automatically (as height will be undefined).
           */

        }, {
          key: "scrollHeight",
          get: function get() {
            if (this.scrollbarV && this.virtualization && this.rowCount) {
              return this.rowHeightsCache.query(this.rowCount - 1);
            } // avoid TS7030: Not all code paths return a value.


            return undefined;
          }
          /**
           * Called after the constructor, initializing input properties
           */

        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            var _this796 = this;

            if (this.rowDetail) {
              this.listener = this.rowDetail.toggle.subscribe(function (_ref123) {
                var type = _ref123.type,
                    value = _ref123.value;

                if (type === 'row') {
                  _this796.toggleRowExpansion(value);
                }

                if (type === 'all') {
                  _this796.toggleAllRows(value);
                } // Refresh rows after toggle
                // Fixes #883


                _this796.updateIndexes();

                _this796.updateRows();

                _this796.cd.markForCheck();
              });
            }

            if (this.groupHeader) {
              this.listener = this.groupHeader.toggle.subscribe(function (_ref124) {
                var type = _ref124.type,
                    value = _ref124.value;

                if (type === 'group') {
                  _this796.toggleRowExpansion(value);
                }

                if (type === 'all') {
                  _this796.toggleAllRows(value);
                } // Refresh rows after toggle
                // Fixes #883


                _this796.updateIndexes();

                _this796.updateRows();

                _this796.cd.markForCheck();
              });
            }
          }
          /**
           * Called once, before the instance is destroyed.
           */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            if (this.rowDetail || this.groupHeader) {
              this.listener.unsubscribe();
            }
          }
          /**
           * Updates the Y offset given a new offset.
           */

        }, {
          key: "updateOffsetY",
          value: function updateOffsetY(offset) {
            // scroller is missing on empty table
            if (!this.scroller) {
              return;
            }

            if (this.scrollbarV && this.virtualization && offset) {
              // First get the row Index that we need to move to.
              var rowIndex = this.pageSize * offset;
              offset = this.rowHeightsCache.query(rowIndex - 1);
            } else if (this.scrollbarV && !this.virtualization) {
              offset = 0;
            }

            this.scroller.setOffset(offset || 0);
          }
          /**
           * Body was scrolled, this is mainly useful for
           * when a user is server-side pagination via virtual scroll.
           */

        }, {
          key: "onBodyScroll",
          value: function onBodyScroll(event) {
            var scrollYPos = event.scrollYPos;
            var scrollXPos = event.scrollXPos; // if scroll change, trigger update
            // this is mainly used for header cell positions

            if (this.offsetY !== scrollYPos || this.offsetX !== scrollXPos) {
              this.scroll.emit({
                offsetY: scrollYPos,
                offsetX: scrollXPos
              });
            }

            this.offsetY = scrollYPos;
            this.offsetX = scrollXPos;
            this.updateIndexes();
            this.updatePage(event.direction);
            this.updateRows();
          }
          /**
           * Updates the page given a direction.
           */

        }, {
          key: "updatePage",
          value: function updatePage(direction) {
            var offset = this.indexes.first / this.pageSize;

            if (direction === 'up') {
              offset = Math.ceil(offset);
            } else if (direction === 'down') {
              offset = Math.floor(offset);
            }

            if (direction !== undefined && !isNaN(offset)) {
              this.page.emit({
                offset: offset
              });
            }
          }
          /**
           * Updates the rows in the view port
           */

        }, {
          key: "updateRows",
          value: function updateRows() {
            var _this797 = this;

            var _this$indexes = this.indexes,
                first = _this$indexes.first,
                last = _this$indexes.last;
            var rowIndex = first;
            var idx = 0;
            var temp = []; // if grouprowsby has been specified treat row paging
            // parameters as group paging parameters ie if limit 10 has been
            // specified treat it as 10 groups rather than 10 rows

            if (this.groupedRows) {
              var maxRowsPerGroup = 3; // if there is only one group set the maximum number of
              // rows per group the same as the total number of rows

              if (this.groupedRows.length === 1) {
                maxRowsPerGroup = this.groupedRows[0].value.length;
              }

              while (rowIndex < last && rowIndex < this.groupedRows.length) {
                // Add the groups into this page
                var group = this.groupedRows[rowIndex];
                this.rowIndexes.set(group, rowIndex);

                if (group.value) {
                  // add indexes for each group item
                  group.value.forEach(function (g, i) {
                    var _idx = "".concat(rowIndex, "-").concat(i);

                    _this797.rowIndexes.set(g, _idx);
                  });
                }

                temp[idx] = group;
                idx++; // Group index in this context

                rowIndex++;
              }
            } else {
              while (rowIndex < last && rowIndex < this.rowCount) {
                var row = this.rows[rowIndex];

                if (row) {
                  // add indexes for each row
                  this.rowIndexes.set(row, rowIndex);
                  temp[idx] = row;
                }

                idx++;
                rowIndex++;
              }
            }

            this.temp = temp;
          }
          /**
           * Get the row height
           */

        }, {
          key: "getRowHeight",
          value: function getRowHeight(row) {
            // if its a function return it
            if (typeof this.rowHeight === 'function') {
              return this.rowHeight(row);
            }

            return this.rowHeight;
          }
          /**
           * @param group the group with all rows
           */

        }, {
          key: "getGroupHeight",
          value: function getGroupHeight(group) {
            var rowHeight = 0;

            if (group.value) {
              for (var index = 0; index < group.value.length; index++) {
                rowHeight += this.getRowAndDetailHeight(group.value[index]);
              }
            }

            return rowHeight;
          }
          /**
           * Calculate row height based on the expanded state of the row.
           */

        }, {
          key: "getRowAndDetailHeight",
          value: function getRowAndDetailHeight(row) {
            var rowHeight = this.getRowHeight(row);
            var expanded = this.getRowExpanded(row); // Adding detail row height if its expanded.

            if (expanded) {
              rowHeight += this.getDetailRowHeight(row);
            }

            return rowHeight;
          }
          /**
           * Calculates the styles for the row so that the rows can be moved in 2D space
           * during virtual scroll inside the DOM.   In the below case the Y position is
           * manipulated.   As an example, if the height of row 0 is 30 px and row 1 is
           * 100 px then following styles are generated:
           *
           * transform: translate3d(0px, 0px, 0px);    ->  row0
           * transform: translate3d(0px, 30px, 0px);   ->  row1
           * transform: translate3d(0px, 130px, 0px);  ->  row2
           *
           * Row heights have to be calculated based on the row heights cache as we wont
           * be able to determine which row is of what height before hand.  In the above
           * case the positionY of the translate3d for row2 would be the sum of all the
           * heights of the rows before it (i.e. row0 and row1).
           *
           * @param rows the row that needs to be placed in the 2D space.
           * @returns the CSS3 style to be applied
           *
           * @memberOf DataTableBodyComponent
           */

        }, {
          key: "getRowsStyles",
          value: function getRowsStyles(rows) {
            var styles = {}; // only add styles for the group if there is a group

            if (this.groupedRows) {
              styles.width = this.columnGroupWidths.total;
            }

            if (this.scrollbarV && this.virtualization) {
              var idx = 0;

              if (this.groupedRows) {
                // Get the latest row rowindex in a group
                var row = rows[rows.length - 1];
                idx = row ? this.getRowIndex(row) : 0;
              } else {
                idx = this.getRowIndex(rows);
              } // const pos = idx * rowHeight;
              // The position of this row would be the sum of all row heights
              // until the previous row position.


              var pos = this.rowHeightsCache.query(idx - 1);
              translateXY(styles, 0, pos);
            }

            return styles;
          }
          /**
           * Calculate bottom summary row offset for scrollbar mode.
           * For more information about cache and offset calculation
           * see description for `getRowsStyles` method
           *
           * @returns the CSS3 style to be applied
           *
           * @memberOf DataTableBodyComponent
           */

        }, {
          key: "getBottomSummaryRowStyles",
          value: function getBottomSummaryRowStyles() {
            if (!this.scrollbarV || !this.rows || !this.rows.length) {
              return null;
            }

            var styles = {
              position: 'absolute'
            };
            var pos = this.rowHeightsCache.query(this.rows.length - 1);
            translateXY(styles, 0, pos);
            return styles;
          }
          /**
           * Hides the loading indicator
           */

        }, {
          key: "hideIndicator",
          value: function hideIndicator() {
            var _this798 = this;

            setTimeout(function () {
              return _this798.loadingIndicator = false;
            }, 500);
          }
          /**
           * Updates the index of the rows in the viewport
           */

        }, {
          key: "updateIndexes",
          value: function updateIndexes() {
            var first = 0;
            var last = 0;

            if (this.scrollbarV) {
              if (this.virtualization) {
                // Calculation of the first and last indexes will be based on where the
                // scrollY position would be at.  The last index would be the one
                // that shows up inside the view port the last.
                var height = parseInt(this.bodyHeight, 0);
                first = this.rowHeightsCache.getRowIndex(this.offsetY);
                last = this.rowHeightsCache.getRowIndex(height + this.offsetY) + 1;
              } else {
                // If virtual rows are not needed
                // We render all in one go
                first = 0;
                last = this.rowCount;
              }
            } else {
              // The server is handling paging and will pass an array that begins with the
              // element at a specified offset.  first should always be 0 with external paging.
              if (!this.externalPaging) {
                first = Math.max(this.offset * this.pageSize, 0);
              }

              last = Math.min(first + this.pageSize, this.rowCount);
            }

            this.indexes = {
              first: first,
              last: last
            };
          }
          /**
           * Refreshes the full Row Height cache.  Should be used
           * when the entire row array state has changed.
           */

        }, {
          key: "refreshRowHeightCache",
          value: function refreshRowHeightCache() {
            if (!this.scrollbarV || this.scrollbarV && !this.virtualization) {
              return;
            } // clear the previous row height cache if already present.
            // this is useful during sorts, filters where the state of the
            // rows array is changed.


            this.rowHeightsCache.clearCache(); // Initialize the tree only if there are rows inside the tree.

            if (this.rows && this.rows.length) {
              var rowExpansions = new Set();

              var _iterator88 = _createForOfIteratorHelper(this.rows),
                  _step87;

              try {
                for (_iterator88.s(); !(_step87 = _iterator88.n()).done;) {
                  var row = _step87.value;

                  if (this.getRowExpanded(row)) {
                    rowExpansions.add(row);
                  }
                }
              } catch (err) {
                _iterator88.e(err);
              } finally {
                _iterator88.f();
              }

              this.rowHeightsCache.initCache({
                rows: this.rows,
                rowHeight: this.rowHeight,
                detailRowHeight: this.getDetailRowHeight,
                externalVirtual: this.scrollbarV && this.externalPaging,
                rowCount: this.rowCount,
                rowIndexes: this.rowIndexes,
                rowExpansions: rowExpansions
              });
            }
          }
          /**
           * Gets the index for the view port
           */

        }, {
          key: "getAdjustedViewPortIndex",
          value: function getAdjustedViewPortIndex() {
            // Capture the row index of the first row that is visible on the viewport.
            // If the scroll bar is just below the row which is highlighted then make that as the
            // first index.
            var viewPortFirstRowIndex = this.indexes.first;

            if (this.scrollbarV && this.virtualization) {
              var offsetScroll = this.rowHeightsCache.query(viewPortFirstRowIndex - 1);
              return offsetScroll <= this.offsetY ? viewPortFirstRowIndex - 1 : viewPortFirstRowIndex;
            }

            return viewPortFirstRowIndex;
          }
          /**
           * Toggle the Expansion of the row i.e. if the row is expanded then it will
           * collapse and vice versa.   Note that the expanded status is stored as
           * a part of the row object itself as we have to preserve the expanded row
           * status in case of sorting and filtering of the row set.
           */

        }, {
          key: "toggleRowExpansion",
          value: function toggleRowExpansion(row) {
            // Capture the row index of the first row that is visible on the viewport.
            var viewPortFirstRowIndex = this.getAdjustedViewPortIndex();
            var rowExpandedIdx = this.getRowExpandedIdx(row, this.rowExpansions);
            var expanded = rowExpandedIdx > -1; // If the detailRowHeight is auto --> only in case of non-virtualized scroll

            if (this.scrollbarV && this.virtualization) {
              var detailRowHeight = this.getDetailRowHeight(row) * (expanded ? -1 : 1); // const idx = this.rowIndexes.get(row) || 0;

              var idx = this.getRowIndex(row);
              this.rowHeightsCache.update(idx, detailRowHeight);
            } // Update the toggled row and update thive nevere heights in the cache.


            if (expanded) {
              this.rowExpansions.splice(rowExpandedIdx, 1);
            } else {
              this.rowExpansions.push(row);
            }

            this.detailToggle.emit({
              rows: [row],
              currentIndex: viewPortFirstRowIndex
            });
          }
          /**
           * Expand/Collapse all the rows no matter what their state is.
           */

        }, {
          key: "toggleAllRows",
          value: function toggleAllRows(expanded) {
            // clear prev expansions
            this.rowExpansions = []; // Capture the row index of the first row that is visible on the viewport.

            var viewPortFirstRowIndex = this.getAdjustedViewPortIndex();

            if (expanded) {
              var _iterator89 = _createForOfIteratorHelper(this.rows),
                  _step88;

              try {
                for (_iterator89.s(); !(_step88 = _iterator89.n()).done;) {
                  var row = _step88.value;
                  this.rowExpansions.push(row);
                }
              } catch (err) {
                _iterator89.e(err);
              } finally {
                _iterator89.f();
              }
            }

            if (this.scrollbarV) {
              // Refresh the full row heights cache since every row was affected.
              this.recalcLayout();
            } // Emit all rows that have been expanded.


            this.detailToggle.emit({
              rows: this.rows,
              currentIndex: viewPortFirstRowIndex
            });
          }
          /**
           * Recalculates the table
           */

        }, {
          key: "recalcLayout",
          value: function recalcLayout() {
            this.refreshRowHeightCache();
            this.updateIndexes();
            this.updateRows();
          }
          /**
           * Tracks the column
           */

        }, {
          key: "columnTrackingFn",
          value: function columnTrackingFn(index, column) {
            return column.$$id;
          }
          /**
           * Gets the row pinning group styles
           */

        }, {
          key: "stylesByGroup",
          value: function stylesByGroup(group) {
            var widths = this.columnGroupWidths;
            var offsetX = this.offsetX;
            var styles = {
              width: "".concat(widths[group], "px")
            };

            if (group === 'left') {
              translateXY(styles, offsetX, 0);
            } else if (group === 'right') {
              var bodyWidth = parseInt(this.innerWidth + '', 0);
              var totalDiff = widths.total - bodyWidth;
              var offsetDiff = totalDiff - offsetX;
              var offset = offsetDiff * -1;
              translateXY(styles, offset, 0);
            }

            return styles;
          }
          /**
           * Returns if the row was expanded and set default row expansion when row expansion is empty
           */

        }, {
          key: "getRowExpanded",
          value: function getRowExpanded(row) {
            if (this.rowExpansions.length === 0 && this.groupExpansionDefault) {
              var _iterator90 = _createForOfIteratorHelper(this.groupedRows),
                  _step89;

              try {
                for (_iterator90.s(); !(_step89 = _iterator90.n()).done;) {
                  var group = _step89.value;
                  this.rowExpansions.push(group);
                }
              } catch (err) {
                _iterator90.e(err);
              } finally {
                _iterator90.f();
              }
            }

            return this.getRowExpandedIdx(row, this.rowExpansions) > -1;
          }
        }, {
          key: "getRowExpandedIdx",
          value: function getRowExpandedIdx(row, expanded) {
            var _this799 = this;

            if (!expanded || !expanded.length) return -1;
            var rowId = this.rowIdentity(row);
            return expanded.findIndex(function (r) {
              var id = _this799.rowIdentity(r);

              return id === rowId;
            });
          }
          /**
           * Gets the row index given a row
           */

        }, {
          key: "getRowIndex",
          value: function getRowIndex(row) {
            return this.rowIndexes.get(row) || 0;
          }
        }, {
          key: "onTreeAction",
          value: function onTreeAction(row) {
            this.treeAction.emit({
              row: row
            });
          }
        }]);

        return DataTableBodyComponent;
      }();

      DataTableBodyComponent.ɵfac = function DataTableBodyComponent_Factory(t) {
        return new (t || DataTableBodyComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]));
      };

      DataTableBodyComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: DataTableBodyComponent,
        selectors: [["datatable-body"]],
        viewQuery: function DataTableBodyComponent_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](ScrollerComponent, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.scroller = _t.first);
          }
        },
        hostAttrs: [1, "datatable-body"],
        hostVars: 4,
        hostBindings: function DataTableBodyComponent_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("width", ctx.bodyWidth)("height", ctx.bodyHeight);
          }
        },
        inputs: {
          selected: "selected",
          pageSize: "pageSize",
          rows: "rows",
          columns: "columns",
          offset: "offset",
          rowCount: "rowCount",
          bodyHeight: "bodyHeight",
          offsetX: "offsetX",
          loadingIndicator: "loadingIndicator",
          scrollbarV: "scrollbarV",
          scrollbarH: "scrollbarH",
          externalPaging: "externalPaging",
          rowHeight: "rowHeight",
          emptyMessage: "emptyMessage",
          selectionType: "selectionType",
          rowIdentity: "rowIdentity",
          rowDetail: "rowDetail",
          groupHeader: "groupHeader",
          selectCheck: "selectCheck",
          displayCheck: "displayCheck",
          trackByProp: "trackByProp",
          rowClass: "rowClass",
          groupedRows: "groupedRows",
          groupExpansionDefault: "groupExpansionDefault",
          innerWidth: "innerWidth",
          groupRowsBy: "groupRowsBy",
          virtualization: "virtualization",
          summaryRow: "summaryRow",
          summaryPosition: "summaryPosition",
          summaryHeight: "summaryHeight"
        },
        outputs: {
          scroll: "scroll",
          page: "page",
          activate: "activate",
          select: "select",
          detailToggle: "detailToggle",
          rowContextmenu: "rowContextmenu",
          treeAction: "treeAction"
        },
        decls: 5,
        vars: 9,
        consts: [[4, "ngIf"], [3, "selected", "rows", "selectCheck", "selectEnabled", "selectionType", "rowIdentity", "select", "activate"], ["selector", ""], [3, "scrollbarV", "scrollbarH", "scrollHeight", "scrollWidth", "scroll", 4, "ngIf"], ["class", "empty-row", 3, "innerHTML", 4, "ngIf"], [3, "scrollbarV", "scrollbarH", "scrollHeight", "scrollWidth", "scroll"], [3, "rowHeight", "offsetX", "innerWidth", "rows", "columns", 4, "ngIf"], [3, "groupedRows", "innerWidth", "ngStyle", "rowDetail", "groupHeader", "offsetX", "detailRowHeight", "row", "expanded", "rowIndex", "rowContextmenu", 4, "ngFor", "ngForOf", "ngForTrackBy"], [3, "ngStyle", "rowHeight", "offsetX", "innerWidth", "rows", "columns", 4, "ngIf"], [3, "rowHeight", "offsetX", "innerWidth", "rows", "columns"], [3, "groupedRows", "innerWidth", "ngStyle", "rowDetail", "groupHeader", "offsetX", "detailRowHeight", "row", "expanded", "rowIndex", "rowContextmenu"], ["tabindex", "-1", 3, "isSelected", "innerWidth", "offsetX", "columns", "rowHeight", "row", "rowIndex", "expanded", "rowClass", "displayCheck", "treeStatus", "treeAction", "activate", 4, "ngIf", "ngIfElse"], ["groupedRowsTemplate", ""], ["tabindex", "-1", 3, "isSelected", "innerWidth", "offsetX", "columns", "rowHeight", "row", "rowIndex", "expanded", "rowClass", "displayCheck", "treeStatus", "treeAction", "activate"], ["tabindex", "-1", 3, "isSelected", "innerWidth", "offsetX", "columns", "rowHeight", "row", "group", "rowIndex", "expanded", "rowClass", "activate", 4, "ngFor", "ngForOf", "ngForTrackBy"], ["tabindex", "-1", 3, "isSelected", "innerWidth", "offsetX", "columns", "rowHeight", "row", "group", "rowIndex", "expanded", "rowClass", "activate"], [3, "ngStyle", "rowHeight", "offsetX", "innerWidth", "rows", "columns"], [1, "empty-row", 3, "innerHTML"]],
        template: function DataTableBodyComponent_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, DataTableBodyComponent_datatable_progress_0_Template, 1, 0, "datatable-progress", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "datatable-selection", 1, 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("select", function DataTableBodyComponent_Template_datatable_selection_select_1_listener($event) {
              return ctx.select.emit($event);
            })("activate", function DataTableBodyComponent_Template_datatable_selection_activate_1_listener($event) {
              return ctx.activate.emit($event);
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, DataTableBodyComponent_datatable_scroller_3_Template, 4, 8, "datatable-scroller", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](4, DataTableBodyComponent_div_4_Template, 1, 1, "div", 4);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.loadingIndicator);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("selected", ctx.selected)("rows", ctx.rows)("selectCheck", ctx.selectCheck)("selectEnabled", ctx.selectEnabled)("selectionType", ctx.selectionType)("rowIdentity", ctx.rowIdentity);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.rows == null ? null : ctx.rows.length);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !(ctx.rows == null ? null : ctx.rows.length) && !ctx.loadingIndicator);
          }
        },
        directives: function directives() {
          return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], DataTableSelectionComponent, ProgressBarComponent, ScrollerComponent, _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], DataTableSummaryRowComponent, DataTableRowWrapperComponent, _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgStyle"], DataTableBodyRowComponent];
        },
        encapsulation: 2,
        changeDetection: 0
      });

      DataTableBodyComponent.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }];
      };

      DataTableBodyComponent.propDecorators = {
        scrollbarV: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        scrollbarH: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        loadingIndicator: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        externalPaging: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        rowHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        offsetX: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        emptyMessage: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        selectionType: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        selected: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        rowIdentity: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        rowDetail: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        groupHeader: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        selectCheck: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        displayCheck: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        trackByProp: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        rowClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        groupedRows: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        groupExpansionDefault: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        innerWidth: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        groupRowsBy: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        virtualization: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        summaryRow: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        summaryPosition: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        summaryHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        pageSize: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        rows: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        columns: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        offset: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        rowCount: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        bodyWidth: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['style.width']
        }],
        bodyHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['style.height']
        }],
        scroll: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        page: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        activate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        select: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        detailToggle: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        rowContextmenu: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        treeAction: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        scroller: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
          args: [ScrollerComponent]
        }]
      };

      var DataTableHeaderComponent = /*#__PURE__*/function () {
        function DataTableHeaderComponent(cd) {
          _classCallCheck2(this, DataTableHeaderComponent);

          this.cd = cd;
          this.sort = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.reorder = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.resize = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.select = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.columnContextmenu = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"](false);
          this._columnGroupWidths = {
            total: 100
          };
          this._styleByGroup = {
            left: {},
            center: {},
            right: {}
          };
          this.destroyed = false;
        }

        _createClass2(DataTableHeaderComponent, [{
          key: "innerWidth",
          get: function get() {
            return this._innerWidth;
          },
          set: function set(val) {
            var _this800 = this;

            this._innerWidth = val;
            setTimeout(function () {
              if (_this800._columns) {
                var colByPin = columnsByPin(_this800._columns);
                _this800._columnGroupWidths = columnGroupWidths(colByPin, _this800._columns);

                _this800.setStylesByGroup();
              }
            });
          }
        }, {
          key: "headerHeight",
          get: function get() {
            return this._headerHeight;
          },
          set: function set(val) {
            if (val !== 'auto') {
              this._headerHeight = "".concat(val, "px");
            } else {
              this._headerHeight = val;
            }
          }
        }, {
          key: "columns",
          get: function get() {
            return this._columns;
          },
          set: function set(val) {
            var _this801 = this;

            this._columns = val;
            var colsByPin = columnsByPin(val);
            this._columnsByPin = columnsByPinArr(val);
            setTimeout(function () {
              _this801._columnGroupWidths = columnGroupWidths(colsByPin, val);

              _this801.setStylesByGroup();
            });
          }
        }, {
          key: "offsetX",
          get: function get() {
            return this._offsetX;
          },
          set: function set(val) {
            this._offsetX = val;
            this.setStylesByGroup();
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.destroyed = true;
          }
        }, {
          key: "onLongPressStart",
          value: function onLongPressStart(_ref125) {
            var event = _ref125.event,
                model = _ref125.model;
            model.dragging = true;
            this.dragEventTarget = event;
          }
        }, {
          key: "onLongPressEnd",
          value: function onLongPressEnd(_ref126) {
            var _this802 = this;

            var event = _ref126.event,
                model = _ref126.model;
            this.dragEventTarget = event; // delay resetting so sort can be
            // prevented if we were dragging

            setTimeout(function () {
              // datatable component creates copies from columns on reorder
              // set dragging to false on new objects
              var column = _this802._columns.find(function (c) {
                return c.$$id === model.$$id;
              });

              if (column) {
                column.dragging = false;
              }
            }, 5);
          }
        }, {
          key: "headerWidth",
          get: function get() {
            if (this.scrollbarH) {
              return this.innerWidth + 'px';
            }

            return '100%';
          }
        }, {
          key: "trackByGroups",
          value: function trackByGroups(index, colGroup) {
            return colGroup.type;
          }
        }, {
          key: "columnTrackingFn",
          value: function columnTrackingFn(index, column) {
            return column.$$id;
          }
        }, {
          key: "onColumnResized",
          value: function onColumnResized(width, column) {
            if (width <= column.minWidth) {
              width = column.minWidth;
            } else if (width >= column.maxWidth) {
              width = column.maxWidth;
            }

            this.resize.emit({
              column: column,
              prevValue: column.width,
              newValue: width
            });
          }
        }, {
          key: "onColumnReordered",
          value: function onColumnReordered(_ref127) {
            var prevIndex = _ref127.prevIndex,
                newIndex = _ref127.newIndex,
                model = _ref127.model;
            var column = this.getColumn(newIndex);
            column.isTarget = false;
            column.targetMarkerContext = undefined;
            this.reorder.emit({
              column: model,
              prevValue: prevIndex,
              newValue: newIndex
            });
          }
        }, {
          key: "onTargetChanged",
          value: function onTargetChanged(_ref128) {
            var prevIndex = _ref128.prevIndex,
                newIndex = _ref128.newIndex,
                initialIndex = _ref128.initialIndex;

            if (prevIndex || prevIndex === 0) {
              var oldColumn = this.getColumn(prevIndex);
              oldColumn.isTarget = false;
              oldColumn.targetMarkerContext = undefined;
            }

            if (newIndex || newIndex === 0) {
              var newColumn = this.getColumn(newIndex);
              newColumn.isTarget = true;

              if (initialIndex !== newIndex) {
                newColumn.targetMarkerContext = {
                  "class": 'targetMarker '.concat(initialIndex > newIndex ? 'dragFromRight' : 'dragFromLeft')
                };
              }
            }
          }
        }, {
          key: "getColumn",
          value: function getColumn(index) {
            var leftColumnCount = this._columnsByPin[0].columns.length;

            if (index < leftColumnCount) {
              return this._columnsByPin[0].columns[index];
            }

            var centerColumnCount = this._columnsByPin[1].columns.length;

            if (index < leftColumnCount + centerColumnCount) {
              return this._columnsByPin[1].columns[index - leftColumnCount];
            }

            return this._columnsByPin[2].columns[index - leftColumnCount - centerColumnCount];
          }
        }, {
          key: "onSort",
          value: function onSort(_ref129) {
            var column = _ref129.column,
                prevValue = _ref129.prevValue,
                newValue = _ref129.newValue;

            // if we are dragging don't sort!
            if (column.dragging) {
              return;
            }

            var sorts = this.calcNewSorts(column, prevValue, newValue);
            this.sort.emit({
              sorts: sorts,
              column: column,
              prevValue: prevValue,
              newValue: newValue
            });
          }
        }, {
          key: "calcNewSorts",
          value: function calcNewSorts(column, prevValue, newValue) {
            var idx = 0;

            if (!this.sorts) {
              this.sorts = [];
            }

            var sorts = this.sorts.map(function (s, i) {
              s = Object.assign({}, s);

              if (s.prop === column.prop) {
                idx = i;
              }

              return s;
            });

            if (newValue === undefined) {
              sorts.splice(idx, 1);
            } else if (prevValue) {
              sorts[idx].dir = newValue;
            } else {
              if (this.sortType === SortType.single) {
                sorts.splice(0, this.sorts.length);
              }

              sorts.push({
                dir: newValue,
                prop: column.prop
              });
            }

            return sorts;
          }
        }, {
          key: "setStylesByGroup",
          value: function setStylesByGroup() {
            this._styleByGroup.left = this.calcStylesByGroup('left');
            this._styleByGroup.center = this.calcStylesByGroup('center');
            this._styleByGroup.right = this.calcStylesByGroup('right');

            if (!this.destroyed) {
              this.cd.detectChanges();
            }
          }
        }, {
          key: "calcStylesByGroup",
          value: function calcStylesByGroup(group) {
            var widths = this._columnGroupWidths;
            var offsetX = this.offsetX;
            var styles = {
              width: "".concat(widths[group], "px")
            };

            if (group === 'center') {
              translateXY(styles, offsetX * -1, 0);
            } else if (group === 'right') {
              var totalDiff = widths.total - this.innerWidth;
              var offset = totalDiff * -1;
              translateXY(styles, offset, 0);
            }

            return styles;
          }
        }]);

        return DataTableHeaderComponent;
      }();

      DataTableHeaderComponent.ɵfac = function DataTableHeaderComponent_Factory(t) {
        return new (t || DataTableHeaderComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]));
      };

      DataTableHeaderComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: DataTableHeaderComponent,
        selectors: [["datatable-header"]],
        hostAttrs: [1, "datatable-header"],
        hostVars: 4,
        hostBindings: function DataTableHeaderComponent_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("height", ctx.headerHeight)("width", ctx.headerWidth);
          }
        },
        inputs: {
          innerWidth: "innerWidth",
          headerHeight: "headerHeight",
          columns: "columns",
          offsetX: "offsetX",
          sorts: "sorts",
          sortAscendingIcon: "sortAscendingIcon",
          sortDescendingIcon: "sortDescendingIcon",
          sortUnsetIcon: "sortUnsetIcon",
          scrollbarH: "scrollbarH",
          dealsWithGroup: "dealsWithGroup",
          targetMarkerTemplate: "targetMarkerTemplate",
          sortType: "sortType",
          allRowsSelected: "allRowsSelected",
          selectionType: "selectionType",
          reorderable: "reorderable"
        },
        outputs: {
          sort: "sort",
          reorder: "reorder",
          resize: "resize",
          select: "select",
          columnContextmenu: "columnContextmenu"
        },
        decls: 2,
        vars: 4,
        consts: [["orderable", "", 1, "datatable-header-inner", 3, "reorder", "targetChanged"], [3, "class", "ngStyle", 4, "ngFor", "ngForOf", "ngForTrackBy"], [3, "ngStyle"], ["resizeable", "", "long-press", "", "draggable", "", 3, "resizeEnabled", "pressModel", "pressEnabled", "dragX", "dragY", "dragModel", "dragEventTarget", "headerHeight", "isTarget", "targetMarkerTemplate", "targetMarkerContext", "column", "sortType", "sorts", "selectionType", "sortAscendingIcon", "sortDescendingIcon", "sortUnsetIcon", "allRowsSelected", "resize", "longPressStart", "longPressEnd", "sort", "select", "columnContextmenu", 4, "ngFor", "ngForOf", "ngForTrackBy"], ["resizeable", "", "long-press", "", "draggable", "", 3, "resizeEnabled", "pressModel", "pressEnabled", "dragX", "dragY", "dragModel", "dragEventTarget", "headerHeight", "isTarget", "targetMarkerTemplate", "targetMarkerContext", "column", "sortType", "sorts", "selectionType", "sortAscendingIcon", "sortDescendingIcon", "sortUnsetIcon", "allRowsSelected", "resize", "longPressStart", "longPressEnd", "sort", "select", "columnContextmenu"]],
        template: function DataTableHeaderComponent_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("reorder", function DataTableHeaderComponent_Template_div_reorder_0_listener($event) {
              return ctx.onColumnReordered($event);
            })("targetChanged", function DataTableHeaderComponent_Template_div_targetChanged_0_listener($event) {
              return ctx.onTargetChanged($event);
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, DataTableHeaderComponent_div_1_Template, 2, 5, "div", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("width", ctx._columnGroupWidths.total, "px");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx._columnsByPin)("ngForTrackBy", ctx.trackByGroups);
          }
        },
        directives: function directives() {
          return [OrderableDirective, _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgStyle"], DataTableHeaderCellComponent, ResizeableDirective, LongPressDirective, DraggableDirective];
        },
        encapsulation: 2,
        changeDetection: 0
      });

      DataTableHeaderComponent.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }];
      };

      DataTableHeaderComponent.propDecorators = {
        sortAscendingIcon: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        sortDescendingIcon: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        sortUnsetIcon: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        scrollbarH: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        dealsWithGroup: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        targetMarkerTemplate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        innerWidth: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        sorts: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        sortType: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        allRowsSelected: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        selectionType: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        reorderable: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        headerHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['style.height']
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        columns: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        offsetX: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        sort: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        reorder: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        resize: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        select: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        columnContextmenu: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        headerWidth: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['style.width']
        }]
      };
      /**
       * Throttle a function
       */

      function throttle(func, wait, options) {
        options = options || {};
        var context;
        var args;
        var result;
        var timeout = null;
        var previous = 0;

        function later() {
          previous = options.leading === false ? 0 : +new Date();
          timeout = null;
          result = func.apply(context, args);
        }

        return function () {
          var now = +new Date();

          if (!previous && options.leading === false) {
            previous = now;
          }

          var remaining = wait - (now - previous);
          context = this;
          args = arguments;

          if (remaining <= 0) {
            clearTimeout(timeout);
            timeout = null;
            previous = now;
            result = func.apply(context, args);
          } else if (!timeout && options.trailing !== false) {
            timeout = setTimeout(later, remaining);
          }

          return result;
        };
      }
      /**
       * Throttle decorator
       *
       *  class MyClass {
       *    throttleable(10)
       *    myFn() { ... }
       *  }
       */


      function throttleable(duration, options) {
        return function innerDecorator(target, key, descriptor) {
          return {
            configurable: true,
            enumerable: descriptor.enumerable,
            get: function getter() {
              Object.defineProperty(this, key, {
                configurable: true,
                enumerable: descriptor.enumerable,
                value: throttle(descriptor.value, duration, options)
              });
              return this[key];
            }
          };
        };
      }
      /**
       * Calculates the Total Flex Grow
       */


      function getTotalFlexGrow(columns) {
        var totalFlexGrow = 0;

        var _iterator91 = _createForOfIteratorHelper(columns),
            _step90;

        try {
          for (_iterator91.s(); !(_step90 = _iterator91.n()).done;) {
            var c = _step90.value;
            totalFlexGrow += c.flexGrow || 0;
          }
        } catch (err) {
          _iterator91.e(err);
        } finally {
          _iterator91.f();
        }

        return totalFlexGrow;
      }
      /**
       * Adjusts the column widths.
       * Inspired by: https://github.com/facebook/fixed-data-table/blob/master/src/FixedDataTableWidthHelper.js
       */


      function adjustColumnWidths(allColumns, expectedWidth) {
        var columnsWidth = columnsTotalWidth(allColumns);
        var totalFlexGrow = getTotalFlexGrow(allColumns);
        var colsByGroup = columnsByPin(allColumns);

        if (columnsWidth !== expectedWidth) {
          scaleColumns(colsByGroup, expectedWidth, totalFlexGrow);
        }
      }
      /**
       * Resizes columns based on the flexGrow property, while respecting manually set widths
       */


      function scaleColumns(colsByGroup, maxWidth, totalFlexGrow) {
        // calculate total width and flexgrow points for coulumns that can be resized
        for (var attr in colsByGroup) {
          var _iterator92 = _createForOfIteratorHelper(colsByGroup[attr]),
              _step91;

          try {
            for (_iterator92.s(); !(_step91 = _iterator92.n()).done;) {
              var column = _step91.value;

              if (!column.canAutoResize) {
                maxWidth -= column.width;
                totalFlexGrow -= column.flexGrow ? column.flexGrow : 0;
              } else {
                column.width = 0;
              }
            }
          } catch (err) {
            _iterator92.e(err);
          } finally {
            _iterator92.f();
          }
        }

        var hasMinWidth = {};
        var remainingWidth = maxWidth; // resize columns until no width is left to be distributed

        do {
          var widthPerFlexPoint = remainingWidth / totalFlexGrow;
          remainingWidth = 0;

          for (var _attr2 in colsByGroup) {
            var _iterator93 = _createForOfIteratorHelper(colsByGroup[_attr2]),
                _step92;

            try {
              for (_iterator93.s(); !(_step92 = _iterator93.n()).done;) {
                var _column = _step92.value;

                // if the column can be resize and it hasn't reached its minimum width yet
                if (_column.canAutoResize && !hasMinWidth[_column.prop]) {
                  var newWidth = _column.width + _column.flexGrow * widthPerFlexPoint;

                  if (_column.minWidth !== undefined && newWidth < _column.minWidth) {
                    remainingWidth += newWidth - _column.minWidth;
                    _column.width = _column.minWidth;
                    hasMinWidth[_column.prop] = true;
                  } else {
                    _column.width = newWidth;
                  }
                }
              }
            } catch (err) {
              _iterator93.e(err);
            } finally {
              _iterator93.f();
            }
          }
        } while (remainingWidth !== 0);
      }
      /**
       * Forces the width of the columns to
       * distribute equally but overflowing when necessary
       *
       * Rules:
       *
       *  - If combined withs are less than the total width of the grid,
       *    proportion the widths given the min / max / normal widths to fill the width.
       *
       *  - If the combined widths, exceed the total width of the grid,
       *    use the standard widths.
       *
       *  - If a column is resized, it should always use that width
       *
       *  - The proportional widths should never fall below min size if specified.
       *
       *  - If the grid starts off small but then becomes greater than the size ( + / - )
       *    the width should use the original width; not the newly proportioned widths.
       */


      function forceFillColumnWidths(allColumns, expectedWidth, startIdx, allowBleed) {
        var defaultColWidth = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 300;
        var columnsToResize = allColumns.slice(startIdx + 1, allColumns.length).filter(function (c) {
          return c.canAutoResize !== false;
        });

        var _iterator94 = _createForOfIteratorHelper(columnsToResize),
            _step93;

        try {
          for (_iterator94.s(); !(_step93 = _iterator94.n()).done;) {
            var _column2 = _step93.value;

            if (!_column2.$$oldWidth) {
              _column2.$$oldWidth = _column2.width;
            }
          }
        } catch (err) {
          _iterator94.e(err);
        } finally {
          _iterator94.f();
        }

        var additionWidthPerColumn = 0;
        var exceedsWindow = false;
        var contentWidth = getContentWidth(allColumns, defaultColWidth);
        var remainingWidth = expectedWidth - contentWidth;
        var columnsProcessed = [];
        var remainingWidthLimit = 1; // when to stop
        // This loop takes care of the

        do {
          additionWidthPerColumn = remainingWidth / columnsToResize.length;
          exceedsWindow = contentWidth >= expectedWidth;

          var _iterator95 = _createForOfIteratorHelper(columnsToResize),
              _step94;

          try {
            for (_iterator95.s(); !(_step94 = _iterator95.n()).done;) {
              var column = _step94.value;

              if (exceedsWindow && allowBleed) {
                column.width = column.$$oldWidth || column.width || defaultColWidth;
              } else {
                var newSize = (column.width || defaultColWidth) + additionWidthPerColumn;

                if (column.minWidth && newSize < column.minWidth) {
                  column.width = column.minWidth;
                  columnsProcessed.push(column);
                } else if (column.maxWidth && newSize > column.maxWidth) {
                  column.width = column.maxWidth;
                  columnsProcessed.push(column);
                } else {
                  column.width = newSize;
                }
              }

              column.width = Math.max(0, column.width);
            }
          } catch (err) {
            _iterator95.e(err);
          } finally {
            _iterator95.f();
          }

          contentWidth = getContentWidth(allColumns);
          remainingWidth = expectedWidth - contentWidth;
          removeProcessedColumns(columnsToResize, columnsProcessed);
        } while (remainingWidth > remainingWidthLimit && columnsToResize.length !== 0);
      }
      /**
       * Remove the processed columns from the current active columns.
       */


      function removeProcessedColumns(columnsToResize, columnsProcessed) {
        var _iterator96 = _createForOfIteratorHelper(columnsProcessed),
            _step95;

        try {
          for (_iterator96.s(); !(_step95 = _iterator96.n()).done;) {
            var column = _step95.value;
            var index = columnsToResize.indexOf(column);
            columnsToResize.splice(index, 1);
          }
        } catch (err) {
          _iterator96.e(err);
        } finally {
          _iterator96.f();
        }
      }
      /**
       * Gets the width of the columns
       */


      function getContentWidth(allColumns) {
        var defaultColWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 300;
        var contentWidth = 0;

        var _iterator97 = _createForOfIteratorHelper(allColumns),
            _step96;

        try {
          for (_iterator97.s(); !(_step96 = _iterator97.n()).done;) {
            var column = _step96.value;
            contentWidth += column.width || defaultColWidth;
          }
        } catch (err) {
          _iterator97.e(err);
        } finally {
          _iterator97.f();
        }

        return contentWidth;
      }

      var SortDirection;

      (function (SortDirection) {
        SortDirection["asc"] = "asc";
        SortDirection["desc"] = "desc";
      })(SortDirection || (SortDirection = {}));
      /**
       * Gets the next sort direction
       */


      function nextSortDir(sortType, current) {
        if (sortType === SortType.single) {
          if (current === SortDirection.asc) {
            return SortDirection.desc;
          } else {
            return SortDirection.asc;
          }
        } else {
          if (!current) {
            return SortDirection.asc;
          } else if (current === SortDirection.asc) {
            return SortDirection.desc;
          } else if (current === SortDirection.desc) {
            return undefined;
          } // avoid TS7030: Not all code paths return a value.


          return undefined;
        }
      }
      /**
       * Adapted from fueld-ui on 6/216
       * https://github.com/FuelInteractive/fuel-ui/tree/master/src/pipes/OrderBy
       */


      function orderByComparator(a, b) {
        if (a === null || typeof a === 'undefined') a = 0;
        if (b === null || typeof b === 'undefined') b = 0;

        if (a instanceof Date && b instanceof Date) {
          if (a < b) return -1;
          if (a > b) return 1;
        } else if (isNaN(parseFloat(a)) || !isFinite(a) || isNaN(parseFloat(b)) || !isFinite(b)) {
          // Convert to string in case of a=0 or b=0
          a = String(a);
          b = String(b); // Isn't a number so lowercase the string to properly compare

          if (a.toLowerCase() < b.toLowerCase()) return -1;
          if (a.toLowerCase() > b.toLowerCase()) return 1;
        } else {
          // Parse strings as numbers to compare properly
          if (parseFloat(a) < parseFloat(b)) return -1;
          if (parseFloat(a) > parseFloat(b)) return 1;
        } // equal each other


        return 0;
      }
      /**
       * creates a shallow copy of the `rows` input and returns the sorted copy. this function
       * does not sort the `rows` argument in place
       */


      function sortRows(rows, columns, dirs) {
        if (!rows) return [];
        if (!dirs || !dirs.length || !columns) return _toConsumableArray(rows);
        /**
         * record the row ordering of results from prior sort operations (if applicable)
         * this is necessary to guarantee stable sorting behavior
         */

        var rowToIndexMap = new Map();
        rows.forEach(function (row, index) {
          return rowToIndexMap.set(row, index);
        });

        var temp = _toConsumableArray(rows);

        var cols = columns.reduce(function (obj, col) {
          if (col.comparator && typeof col.comparator === 'function') {
            obj[col.prop] = col.comparator;
          }

          return obj;
        }, {}); // cache valueGetter and compareFn so that they
        // do not need to be looked-up in the sort function body

        var cachedDirs = dirs.map(function (dir) {
          var prop = dir.prop;
          return {
            prop: prop,
            dir: dir.dir,
            valueGetter: getterForProp(prop),
            compareFn: cols[prop] || orderByComparator
          };
        });
        return temp.sort(function (rowA, rowB) {
          var _iterator98 = _createForOfIteratorHelper(cachedDirs),
              _step97;

          try {
            for (_iterator98.s(); !(_step97 = _iterator98.n()).done;) {
              var cachedDir = _step97.value;
              // Get property and valuegetters for column to be sorted
              var prop = cachedDir.prop,
                  valueGetter = cachedDir.valueGetter; // Get A and B cell values from rows based on properties of the columns

              var propA = valueGetter(rowA, prop);
              var propB = valueGetter(rowB, prop); // Compare function gets five parameters:
              // Two cell values to be compared as propA and propB
              // Two rows corresponding to the cells as rowA and rowB
              // Direction of the sort for this column as SortDirection
              // Compare can be a standard JS comparison function (a,b) => -1|0|1
              // as additional parameters are silently ignored. The whole row and sort
              // direction enable more complex sort logic.

              var comparison = cachedDir.dir !== SortDirection.desc ? cachedDir.compareFn(propA, propB, rowA, rowB, cachedDir.dir) : -cachedDir.compareFn(propA, propB, rowA, rowB, cachedDir.dir); // Don't return 0 yet in case of needing to sort by next property

              if (comparison !== 0) return comparison;
            }
          } catch (err) {
            _iterator98.e(err);
          } finally {
            _iterator98.f();
          }

          if (!(rowToIndexMap.has(rowA) && rowToIndexMap.has(rowB))) return 0;
          /**
           * all else being equal, preserve original order of the rows (stable sort)
           */

          return rowToIndexMap.get(rowA) < rowToIndexMap.get(rowB) ? -1 : 1;
        });
      }

      var DatatableComponent = /*#__PURE__*/function () {
        function DatatableComponent(scrollbarHelper, dimensionsHelper, cd, element, differs, columnChangesService, configuration) {
          var _this803 = this;

          _classCallCheck2(this, DatatableComponent);

          this.scrollbarHelper = scrollbarHelper;
          this.dimensionsHelper = dimensionsHelper;
          this.cd = cd;
          this.columnChangesService = columnChangesService;
          this.configuration = configuration;
          /**
           * List of row objects that should be
           * represented as selected in the grid.
           * Default value: `[]`
           */

          this.selected = [];
          /**
           * Enable vertical scrollbars
           */

          this.scrollbarV = false;
          /**
           * Enable horz scrollbars
           */

          this.scrollbarH = false;
          /**
           * The row height; which is necessary
           * to calculate the height for the lazy rendering.
           */

          this.rowHeight = 30;
          /**
           * Type of column width distribution formula.
           * Example: flex, force, standard
           */

          this.columnMode = ColumnMode.standard;
          /**
           * The minimum header height in pixels.
           * Pass a falsey for no header
           */

          this.headerHeight = 30;
          /**
           * The minimum footer height in pixels.
           * Pass falsey for no footer
           */

          this.footerHeight = 0;
          /**
           * If the table should use external paging
           * otherwise its assumed that all data is preloaded.
           */

          this.externalPaging = false;
          /**
           * If the table should use external sorting or
           * the built-in basic sorting.
           */

          this.externalSorting = false;
          /**
           * Show the linear loading bar.
           * Default value: `false`
           */

          this.loadingIndicator = false;
          /**
           * Enable/Disable ability to re-order columns
           * by dragging them.
           */

          this.reorderable = true;
          /**
           * Swap columns on re-order columns or
           * move them.
           */

          this.swapColumns = true;
          /**
           * The type of sorting
           */

          this.sortType = SortType.single;
          /**
           * Array of sorted columns by property and type.
           * Default value: `[]`
           */

          this.sorts = [];
          /**
           * Css class overrides
           */

          this.cssClasses = {
            sortAscending: 'datatable-icon-up',
            sortDescending: 'datatable-icon-down',
            sortUnset: 'datatable-icon-sort-unset',
            pagerLeftArrow: 'datatable-icon-left',
            pagerRightArrow: 'datatable-icon-right',
            pagerPrevious: 'datatable-icon-prev',
            pagerNext: 'datatable-icon-skip'
          };
          /**
           * Message overrides for localization
           *
           * emptyMessage     [default] = 'No data to display'
           * totalMessage     [default] = 'total'
           * selectedMessage  [default] = 'selected'
           */

          this.messages = {
            // Message to show when array is presented
            // but contains no values
            emptyMessage: 'No data to display',
            // Footer total message
            totalMessage: 'total',
            // Footer selected message
            selectedMessage: 'selected'
          };
          /**
           * A boolean you can use to set the detault behaviour of rows and groups
           * whether they will start expanded or not. If ommited the default is NOT expanded.
           *
           */

          this.groupExpansionDefault = false;
          /**
           * Property to which you can use for determining select all
           * rows on current page or not.
           *
           * @memberOf DatatableComponent
           */

          this.selectAllRowsOnPage = false;
          /**
           * A flag for row virtualization on / off
           */

          this.virtualization = true;
          /**
           * A flag for switching summary row on / off
           */

          this.summaryRow = false;
          /**
           * A height of summary row
           */

          this.summaryHeight = 30;
          /**
           * A property holds a summary row position: top/bottom
           */

          this.summaryPosition = 'top';
          /**
           * Body was scrolled typically in a `scrollbarV:true` scenario.
           */

          this.scroll = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * A cell or row was focused via keyboard or mouse click.
           */

          this.activate = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * A cell or row was selected.
           */

          this.select = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * Column sort was invoked.
           */

          this.sort = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * The table was paged either triggered by the pager or the body scroll.
           */

          this.page = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * Columns were re-ordered.
           */

          this.reorder = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * Column was resized.
           */

          this.resize = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /**
           * The context menu was invoked on the table.
           * type indicates whether the header or the body was clicked.
           * content contains either the column or the row that was clicked.
           */

          this.tableContextmenu = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"](false);
          /**
           * A row was expanded ot collapsed for tree
           */

          this.treeAction = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.rowCount = 0;
          this._offsetX = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](0);
          this._count = 0;
          this._offset = 0;
          this._subscriptions = [];
          /**
           * This will be used when displaying or selecting rows.
           * when tracking/comparing them, we'll use the value of this fn,
           *
           * (`fn(x) === fn(y)` instead of `x === y`)
           */

          this.rowIdentity = function (x) {
            if (_this803._groupRowsBy) {
              // each group in groupedRows are stored as {key, value: [rows]},
              // where key is the groupRowsBy index
              return x.key;
            } else {
              return x;
            }
          }; // get ref to elm for measuring


          this.element = element.nativeElement;
          this.rowDiffer = differs.find({}).create(); // apply global settings from Module.forRoot

          if (this.configuration && this.configuration.messages) {
            this.messages = Object.assign({}, this.configuration.messages);
          }
        }
        /**
         * Rows that are displayed in the table.
         */


        _createClass2(DatatableComponent, [{
          key: "rows",
          get:
          /**
           * Gets the rows.
           */
          function get() {
            return this._rows;
          }
          /**
           * This attribute allows the user to set the name of the column to group the data with
           */
          ,
          set: function set(val) {
            this._rows = val;

            if (val) {
              this._internalRows = _toConsumableArray(val);
            } // auto sort on new updates


            if (!this.externalSorting) {
              this.sortInternalRows();
            } // auto group by parent on new update


            this._internalRows = groupRowsByParents(this._internalRows, optionalGetterForProp(this.treeFromRelation), optionalGetterForProp(this.treeToRelation)); // recalculate sizes/etc

            this.recalculate();

            if (this._rows && this._groupRowsBy) {
              // If a column has been specified in _groupRowsBy created a new array with the data grouped by that row
              this.groupedRows = this.groupArrayBy(this._rows, this._groupRowsBy);
            }

            this.cd.markForCheck();
          }
        }, {
          key: "groupRowsBy",
          get: function get() {
            return this._groupRowsBy;
          }
          /**
           * Columns to be displayed.
           */
          ,
          set: function set(val) {
            if (val) {
              this._groupRowsBy = val;

              if (this._rows && this._groupRowsBy) {
                // cretes a new array with the data grouped
                this.groupedRows = this.groupArrayBy(this._rows, this._groupRowsBy);
              }
            }
          }
        }, {
          key: "columns",
          get:
          /**
           * Get the columns.
           */
          function get() {
            return this._columns;
          }
          /**
           * The page size to be shown.
           * Default value: `undefined`
           */
          ,
          set: function set(val) {
            if (val) {
              this._internalColumns = _toConsumableArray(val);
              setColumnDefaults(this._internalColumns);
              this.recalculateColumns();
            }

            this._columns = val;
          }
        }, {
          key: "limit",
          get:
          /**
           * Gets the limit.
           */
          function get() {
            return this._limit;
          }
          /**
           * The total count of all rows.
           * Default value: `0`
           */
          ,
          set: function set(val) {
            this._limit = val; // recalculate sizes/etc

            this.recalculate();
          }
        }, {
          key: "count",
          get:
          /**
           * Gets the count.
           */
          function get() {
            return this._count;
          }
          /**
           * The current offset ( page - 1 ) shown.
           * Default value: `0`
           */
          ,
          set: function set(val) {
            this._count = val; // recalculate sizes/etc

            this.recalculate();
          }
        }, {
          key: "offset",
          get: function get() {
            return Math.max(Math.min(this._offset, Math.ceil(this.rowCount / this.pageSize) - 1), 0);
          }
          /**
           * CSS class applied if the header height if fixed height.
           */
          ,
          set: function set(val) {
            this._offset = val;
          }
        }, {
          key: "isFixedHeader",
          get: function get() {
            var headerHeight = this.headerHeight;
            return typeof headerHeight === 'string' ? headerHeight !== 'auto' : true;
          }
          /**
           * CSS class applied to the root element if
           * the row heights are fixed heights.
           */

        }, {
          key: "isFixedRow",
          get: function get() {
            return this.rowHeight !== 'auto';
          }
          /**
           * CSS class applied to root element if
           * vertical scrolling is enabled.
           */

        }, {
          key: "isVertScroll",
          get: function get() {
            return this.scrollbarV;
          }
          /**
           * CSS class applied to root element if
           * virtualization is enabled.
           */

        }, {
          key: "isVirtualized",
          get: function get() {
            return this.virtualization;
          }
          /**
           * CSS class applied to the root element
           * if the horziontal scrolling is enabled.
           */

        }, {
          key: "isHorScroll",
          get: function get() {
            return this.scrollbarH;
          }
          /**
           * CSS class applied to root element is selectable.
           */

        }, {
          key: "isSelectable",
          get: function get() {
            return this.selectionType !== undefined;
          }
          /**
           * CSS class applied to root is checkbox selection.
           */

        }, {
          key: "isCheckboxSelection",
          get: function get() {
            return this.selectionType === SelectionType.checkbox;
          }
          /**
           * CSS class applied to root if cell selection.
           */

        }, {
          key: "isCellSelection",
          get: function get() {
            return this.selectionType === SelectionType.cell;
          }
          /**
           * CSS class applied to root if single select.
           */

        }, {
          key: "isSingleSelection",
          get: function get() {
            return this.selectionType === SelectionType.single;
          }
          /**
           * CSS class added to root element if mulit select
           */

        }, {
          key: "isMultiSelection",
          get: function get() {
            return this.selectionType === SelectionType.multi;
          }
          /**
           * CSS class added to root element if mulit click select
           */

        }, {
          key: "isMultiClickSelection",
          get: function get() {
            return this.selectionType === SelectionType.multiClick;
          }
          /**
           * Column templates gathered from `ContentChildren`
           * if described in your markup.
           */

        }, {
          key: "columnTemplates",
          get:
          /**
           * Returns the column templates.
           */
          function get() {
            return this._columnTemplates;
          }
          /**
           * Returns if all rows are selected.
           */
          ,
          set: function set(val) {
            this._columnTemplates = val;
            this.translateColumns(val);
          }
        }, {
          key: "allRowsSelected",
          get: function get() {
            var allRowsSelected = this.rows && this.selected && this.selected.length === this.rows.length;

            if (this.bodyComponent && this.selectAllRowsOnPage) {
              var indexes = this.bodyComponent.indexes;
              var rowsOnPage = indexes.last - indexes.first;
              allRowsSelected = this.selected.length === rowsOnPage;
            }

            return this.selected && this.rows && this.rows.length !== 0 && allRowsSelected;
          }
          /**
           * Lifecycle hook that is called after data-bound
           * properties of a directive are initialized.
           */

        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            // need to call this immediatly to size
            // if the table is hidden the visibility
            // listener will invoke this itself upon show
            this.recalculate();
          }
          /**
           * Lifecycle hook that is called after a component's
           * view has been fully initialized.
           */

        }, {
          key: "ngAfterViewInit",
          value: function ngAfterViewInit() {
            var _this804 = this;

            if (!this.externalSorting) {
              this.sortInternalRows();
            } // this has to be done to prevent the change detection
            // tree from freaking out because we are readjusting


            if (typeof requestAnimationFrame === 'undefined') {
              return;
            }

            requestAnimationFrame(function () {
              _this804.recalculate(); // emit page for virtual server-side kickoff


              if (_this804.externalPaging && _this804.scrollbarV) {
                _this804.page.emit({
                  count: _this804.count,
                  pageSize: _this804.pageSize,
                  limit: _this804.limit,
                  offset: 0
                });
              }
            });
          }
          /**
           * Lifecycle hook that is called after a component's
           * content has been fully initialized.
           */

        }, {
          key: "ngAfterContentInit",
          value: function ngAfterContentInit() {
            var _this805 = this;

            this.columnTemplates.changes.subscribe(function (v) {
              return _this805.translateColumns(v);
            });
            this.listenForColumnInputChanges();
          }
          /**
           * Translates the templates to the column objects
           */

        }, {
          key: "translateColumns",
          value: function translateColumns(val) {
            if (val) {
              var arr = val.toArray();

              if (arr.length) {
                this._internalColumns = translateTemplates(arr);
                setColumnDefaults(this._internalColumns);
                this.recalculateColumns();
                this.sortInternalRows();
                this.cd.markForCheck();
              }
            }
          }
          /**
           * Creates a map with the data grouped by the user choice of grouping index
           *
           * @param originalArray the original array passed via parameter
           * @param groupByIndex  the index of the column to group the data by
           */

        }, {
          key: "groupArrayBy",
          value: function groupArrayBy(originalArray, groupBy) {
            // create a map to hold groups with their corresponding results
            var map = new Map();
            var i = 0;
            originalArray.forEach(function (item) {
              var key = item[groupBy];

              if (!map.has(key)) {
                map.set(key, [item]);
              } else {
                map.get(key).push(item);
              }

              i++;
            });

            var addGroup = function addGroup(key, value) {
              return {
                key: key,
                value: value
              };
            }; // convert map back to a simple array of objects


            return Array.from(map, function (x) {
              return addGroup(x[0], x[1]);
            });
          }
          /*
           * Lifecycle hook that is called when Angular dirty checks a directive.
           */

        }, {
          key: "ngDoCheck",
          value: function ngDoCheck() {
            if (this.rowDiffer.diff(this.rows)) {
              if (!this.externalSorting) {
                this.sortInternalRows();
              } else {
                this._internalRows = _toConsumableArray(this.rows);
              } // auto group by parent on new update


              this._internalRows = groupRowsByParents(this._internalRows, optionalGetterForProp(this.treeFromRelation), optionalGetterForProp(this.treeToRelation));
              this.recalculatePages();
              this.cd.markForCheck();
            }
          }
          /**
           * Recalc's the sizes of the grid.
           *
           * Updated automatically on changes to:
           *
           *  - Columns
           *  - Rows
           *  - Paging related
           *
           * Also can be manually invoked or upon window resize.
           */

        }, {
          key: "recalculate",
          value: function recalculate() {
            this.recalculateDims();
            this.recalculateColumns();
            this.cd.markForCheck();
          }
          /**
           * Window resize handler to update sizes.
           */

        }, {
          key: "onWindowResize",
          value: function onWindowResize() {
            this.recalculate();
          }
          /**
           * Recalulcates the column widths based on column width
           * distribution mode and scrollbar offsets.
           */

        }, {
          key: "recalculateColumns",
          value: function recalculateColumns() {
            var columns = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._internalColumns;
            var forceIdx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;
            var allowBleed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.scrollbarH;
            if (!columns) return undefined;
            var width = this._innerWidth;

            if (this.scrollbarV) {
              width = width - this.scrollbarHelper.width;
            }

            if (this.columnMode === ColumnMode.force) {
              forceFillColumnWidths(columns, width, forceIdx, allowBleed);
            } else if (this.columnMode === ColumnMode.flex) {
              adjustColumnWidths(columns, width);
            }

            return columns;
          }
          /**
           * Recalculates the dimensions of the table size.
           * Internally calls the page size and row count calcs too.
           *
           */

        }, {
          key: "recalculateDims",
          value: function recalculateDims() {
            var dims = this.dimensionsHelper.getDimensions(this.element);
            this._innerWidth = Math.floor(dims.width);

            if (this.scrollbarV) {
              var height = dims.height;
              if (this.headerHeight) height = height - this.headerHeight;
              if (this.footerHeight) height = height - this.footerHeight;
              this.bodyHeight = height;
            }

            this.recalculatePages();
          }
          /**
           * Recalculates the pages after a update.
           */

        }, {
          key: "recalculatePages",
          value: function recalculatePages() {
            this.pageSize = this.calcPageSize();
            this.rowCount = this.calcRowCount();
          }
          /**
           * Body triggered a page event.
           */

        }, {
          key: "onBodyPage",
          value: function onBodyPage(_ref130) {
            var offset = _ref130.offset;

            // Avoid pagination caming from body events like scroll when the table
            // has no virtualization and the external paging is enable.
            // This means, let's the developer handle pagination by my him(her) self
            if (this.externalPaging && !this.virtualization) {
              return;
            }

            this.offset = offset;
            this.page.emit({
              count: this.count,
              pageSize: this.pageSize,
              limit: this.limit,
              offset: this.offset
            });
          }
          /**
           * The body triggered a scroll event.
           */

        }, {
          key: "onBodyScroll",
          value: function onBodyScroll(event) {
            this._offsetX.next(event.offsetX);

            this.scroll.emit(event);
            this.cd.detectChanges();
          }
          /**
           * The footer triggered a page event.
           */

        }, {
          key: "onFooterPage",
          value: function onFooterPage(event) {
            this.offset = event.page - 1;
            this.bodyComponent.updateOffsetY(this.offset);
            this.page.emit({
              count: this.count,
              pageSize: this.pageSize,
              limit: this.limit,
              offset: this.offset
            });

            if (this.selectAllRowsOnPage) {
              this.selected = [];
              this.select.emit({
                selected: this.selected
              });
            }
          }
          /**
           * Recalculates the sizes of the page
           */

        }, {
          key: "calcPageSize",
          value: function calcPageSize() {
            var val = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.rows;

            // Keep the page size constant even if the row has been expanded.
            // This is because an expanded row is still considered to be a child of
            // the original row.  Hence calculation would use rowHeight only.
            if (this.scrollbarV && this.virtualization) {
              var size = Math.ceil(this.bodyHeight / this.rowHeight);
              return Math.max(size, 0);
            } // if limit is passed, we are paging


            if (this.limit !== undefined) {
              return this.limit;
            } // otherwise use row length


            if (val) {
              return val.length;
            } // other empty :(


            return 0;
          }
          /**
           * Calculates the row count.
           */

        }, {
          key: "calcRowCount",
          value: function calcRowCount() {
            var val = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.rows;

            if (!this.externalPaging) {
              if (!val) return 0;

              if (this.groupedRows) {
                return this.groupedRows.length;
              } else if (this.treeFromRelation != null && this.treeToRelation != null) {
                return this._internalRows.length;
              } else {
                return val.length;
              }
            }

            return this.count;
          }
          /**
           * The header triggered a contextmenu event.
           */

        }, {
          key: "onColumnContextmenu",
          value: function onColumnContextmenu(_ref131) {
            var event = _ref131.event,
                column = _ref131.column;
            this.tableContextmenu.emit({
              event: event,
              type: ContextmenuType.header,
              content: column
            });
          }
          /**
           * The body triggered a contextmenu event.
           */

        }, {
          key: "onRowContextmenu",
          value: function onRowContextmenu(_ref132) {
            var event = _ref132.event,
                row = _ref132.row;
            this.tableContextmenu.emit({
              event: event,
              type: ContextmenuType.body,
              content: row
            });
          }
          /**
           * The header triggered a column resize event.
           */

        }, {
          key: "onColumnResize",
          value: function onColumnResize(_ref133) {
            var column = _ref133.column,
                newValue = _ref133.newValue;

            /* Safari/iOS 10.2 workaround */
            if (column === undefined) {
              return;
            }

            var idx;

            var cols = this._internalColumns.map(function (c, i) {
              c = Object.assign({}, c);

              if (c.$$id === column.$$id) {
                idx = i;
                c.width = newValue; // set this so we can force the column
                // width distribution to be to this value

                c.$$oldWidth = newValue;
              }

              return c;
            });

            this.recalculateColumns(cols, idx);
            this._internalColumns = cols;
            this.resize.emit({
              column: column,
              newValue: newValue
            });
          }
          /**
           * The header triggered a column re-order event.
           */

        }, {
          key: "onColumnReorder",
          value: function onColumnReorder(_ref134) {
            var column = _ref134.column,
                newValue = _ref134.newValue,
                prevValue = _ref134.prevValue;

            var cols = this._internalColumns.map(function (c) {
              return Object.assign({}, c);
            });

            if (this.swapColumns) {
              var prevCol = cols[newValue];
              cols[newValue] = column;
              cols[prevValue] = prevCol;
            } else {
              if (newValue > prevValue) {
                var movedCol = cols[prevValue];

                for (var i = prevValue; i < newValue; i++) {
                  cols[i] = cols[i + 1];
                }

                cols[newValue] = movedCol;
              } else {
                var _movedCol = cols[prevValue];

                for (var _i49 = prevValue; _i49 > newValue; _i49--) {
                  cols[_i49] = cols[_i49 - 1];
                }

                cols[newValue] = _movedCol;
              }
            }

            this._internalColumns = cols;
            this.reorder.emit({
              column: column,
              newValue: newValue,
              prevValue: prevValue
            });
          }
          /**
           * The header triggered a column sort event.
           */

        }, {
          key: "onColumnSort",
          value: function onColumnSort(event) {
            // clean selected rows
            if (this.selectAllRowsOnPage) {
              this.selected = [];
              this.select.emit({
                selected: this.selected
              });
            }

            this.sorts = event.sorts; // this could be optimized better since it will resort
            // the rows again on the 'push' detection...

            if (this.externalSorting === false) {
              // don't use normal setter so we don't resort
              this.sortInternalRows();
            } // auto group by parent on new update


            this._internalRows = groupRowsByParents(this._internalRows, optionalGetterForProp(this.treeFromRelation), optionalGetterForProp(this.treeToRelation)); // Always go to first page when sorting to see the newly sorted data

            this.offset = 0;
            this.bodyComponent.updateOffsetY(this.offset);
            this.sort.emit(event);
          }
          /**
           * Toggle all row selection
           */

        }, {
          key: "onHeaderSelect",
          value: function onHeaderSelect(event) {
            if (this.bodyComponent && this.selectAllRowsOnPage) {
              // before we splice, chk if we currently have all selected
              var first = this.bodyComponent.indexes.first;
              var last = this.bodyComponent.indexes.last;
              var allSelected = this.selected.length === last - first; // remove all existing either way

              this.selected = []; // do the opposite here

              if (!allSelected) {
                var _this$selected;

                (_this$selected = this.selected).push.apply(_this$selected, _toConsumableArray(this._internalRows.slice(first, last)));
              }
            } else {
              // before we splice, chk if we currently have all selected
              var _allSelected = this.selected.length === this.rows.length; // remove all existing either way


              this.selected = []; // do the opposite here

              if (!_allSelected) {
                var _this$selected2;

                (_this$selected2 = this.selected).push.apply(_this$selected2, _toConsumableArray(this.rows));
              }
            }

            this.select.emit({
              selected: this.selected
            });
          }
          /**
           * A row was selected from body
           */

        }, {
          key: "onBodySelect",
          value: function onBodySelect(event) {
            this.select.emit(event);
          }
          /**
           * A row was expanded or collapsed for tree
           */

        }, {
          key: "onTreeAction",
          value: function onTreeAction(event) {
            var _this806 = this;

            var row = event.row; // TODO: For duplicated items this will not work

            var rowIndex = this._rows.findIndex(function (r) {
              return r[_this806.treeToRelation] === event.row[_this806.treeToRelation];
            });

            this.treeAction.emit({
              row: row,
              rowIndex: rowIndex
            });
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._subscriptions.forEach(function (subscription) {
              return subscription.unsubscribe();
            });
          }
          /**
           * listen for changes to input bindings of all DataTableColumnDirective and
           * trigger the columnTemplates.changes observable to emit
           */

        }, {
          key: "listenForColumnInputChanges",
          value: function listenForColumnInputChanges() {
            var _this807 = this;

            this._subscriptions.push(this.columnChangesService.columnInputChanges$.subscribe(function () {
              if (_this807.columnTemplates) {
                _this807.columnTemplates.notifyOnChanges();
              }
            }));
          }
        }, {
          key: "sortInternalRows",
          value: function sortInternalRows() {
            this._internalRows = sortRows(this._internalRows, this._internalColumns, this.sorts);
          }
        }]);

        return DatatableComponent;
      }();

      DatatableComponent.ɵfac = function DatatableComponent_Factory(t) {
        return new (t || DatatableComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](ScrollbarHelper, 4), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](DimensionsHelper, 4), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](ColumnChangesService), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"]('configuration', 8));
      };

      DatatableComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: DatatableComponent,
        selectors: [["ngx-datatable"]],
        contentQueries: function DatatableComponent_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, DatatableRowDetailDirective, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, DatatableGroupHeaderDirective, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, DatatableFooterDirective, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵcontentQuery"](dirIndex, DataTableColumnDirective, 0);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.rowDetail = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.groupHeader = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.footer = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.columnTemplates = _t);
          }
        },
        viewQuery: function DatatableComponent_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](DataTableBodyComponent, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](DataTableHeaderComponent, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.bodyComponent = _t.first);
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.headerComponent = _t.first);
          }
        },
        hostAttrs: [1, "ngx-datatable"],
        hostVars: 22,
        hostBindings: function DatatableComponent_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("resize", function DatatableComponent_resize_HostBindingHandler() {
              return ctx.onWindowResize();
            }, false, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵresolveWindow"]);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("fixed-header", ctx.isFixedHeader)("fixed-row", ctx.isFixedRow)("scroll-vertical", ctx.isVertScroll)("virtualized", ctx.isVirtualized)("scroll-horz", ctx.isHorScroll)("selectable", ctx.isSelectable)("checkbox-selection", ctx.isCheckboxSelection)("cell-selection", ctx.isCellSelection)("single-selection", ctx.isSingleSelection)("multi-selection", ctx.isMultiSelection)("multi-click-selection", ctx.isMultiClickSelection);
          }
        },
        inputs: {
          selected: "selected",
          scrollbarV: "scrollbarV",
          scrollbarH: "scrollbarH",
          rowHeight: "rowHeight",
          columnMode: "columnMode",
          headerHeight: "headerHeight",
          footerHeight: "footerHeight",
          externalPaging: "externalPaging",
          externalSorting: "externalSorting",
          loadingIndicator: "loadingIndicator",
          reorderable: "reorderable",
          swapColumns: "swapColumns",
          sortType: "sortType",
          sorts: "sorts",
          cssClasses: "cssClasses",
          messages: "messages",
          groupExpansionDefault: "groupExpansionDefault",
          selectAllRowsOnPage: "selectAllRowsOnPage",
          virtualization: "virtualization",
          summaryRow: "summaryRow",
          summaryHeight: "summaryHeight",
          summaryPosition: "summaryPosition",
          rowIdentity: "rowIdentity",
          rows: "rows",
          groupedRows: "groupedRows",
          groupRowsBy: "groupRowsBy",
          columns: "columns",
          limit: "limit",
          count: "count",
          offset: "offset",
          targetMarkerTemplate: "targetMarkerTemplate",
          selectionType: "selectionType",
          rowClass: "rowClass",
          selectCheck: "selectCheck",
          displayCheck: "displayCheck",
          trackByProp: "trackByProp",
          treeFromRelation: "treeFromRelation",
          treeToRelation: "treeToRelation"
        },
        outputs: {
          scroll: "scroll",
          activate: "activate",
          select: "select",
          sort: "sort",
          page: "page",
          reorder: "reorder",
          resize: "resize",
          tableContextmenu: "tableContextmenu",
          treeAction: "treeAction"
        },
        decls: 5,
        vars: 34,
        consts: [["visibilityObserver", "", 3, "visible"], [3, "sorts", "sortType", "scrollbarH", "innerWidth", "offsetX", "dealsWithGroup", "columns", "headerHeight", "reorderable", "targetMarkerTemplate", "sortAscendingIcon", "sortDescendingIcon", "sortUnsetIcon", "allRowsSelected", "selectionType", "sort", "resize", "reorder", "select", "columnContextmenu", 4, "ngIf"], [3, "groupRowsBy", "groupedRows", "rows", "groupExpansionDefault", "scrollbarV", "scrollbarH", "virtualization", "loadingIndicator", "externalPaging", "rowHeight", "rowCount", "offset", "trackByProp", "columns", "pageSize", "offsetX", "rowDetail", "groupHeader", "selected", "innerWidth", "bodyHeight", "selectionType", "emptyMessage", "rowIdentity", "rowClass", "selectCheck", "displayCheck", "summaryRow", "summaryHeight", "summaryPosition", "page", "activate", "rowContextmenu", "select", "scroll", "treeAction"], [3, "rowCount", "pageSize", "offset", "footerHeight", "footerTemplate", "totalMessage", "pagerLeftArrowIcon", "pagerRightArrowIcon", "pagerPreviousIcon", "selectedCount", "selectedMessage", "pagerNextIcon", "page", 4, "ngIf"], [3, "sorts", "sortType", "scrollbarH", "innerWidth", "offsetX", "dealsWithGroup", "columns", "headerHeight", "reorderable", "targetMarkerTemplate", "sortAscendingIcon", "sortDescendingIcon", "sortUnsetIcon", "allRowsSelected", "selectionType", "sort", "resize", "reorder", "select", "columnContextmenu"], [3, "rowCount", "pageSize", "offset", "footerHeight", "footerTemplate", "totalMessage", "pagerLeftArrowIcon", "pagerRightArrowIcon", "pagerPreviousIcon", "selectedCount", "selectedMessage", "pagerNextIcon", "page"]],
        template: function DatatableComponent_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("visible", function DatatableComponent_Template_div_visible_0_listener() {
              return ctx.recalculate();
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, DatatableComponent_datatable_header_1_Template, 2, 17, "datatable-header", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "datatable-body", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("page", function DatatableComponent_Template_datatable_body_page_2_listener($event) {
              return ctx.onBodyPage($event);
            })("activate", function DatatableComponent_Template_datatable_body_activate_2_listener($event) {
              return ctx.activate.emit($event);
            })("rowContextmenu", function DatatableComponent_Template_datatable_body_rowContextmenu_2_listener($event) {
              return ctx.onRowContextmenu($event);
            })("select", function DatatableComponent_Template_datatable_body_select_2_listener($event) {
              return ctx.onBodySelect($event);
            })("scroll", function DatatableComponent_Template_datatable_body_scroll_2_listener($event) {
              return ctx.onBodyScroll($event);
            })("treeAction", function DatatableComponent_Template_datatable_body_treeAction_2_listener($event) {
              return ctx.onTreeAction($event);
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpipe"](3, "async");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](4, DatatableComponent_datatable_footer_4_Template, 1, 12, "datatable-footer", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.headerHeight);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("groupRowsBy", ctx.groupRowsBy)("groupedRows", ctx.groupedRows)("rows", ctx._internalRows)("groupExpansionDefault", ctx.groupExpansionDefault)("scrollbarV", ctx.scrollbarV)("scrollbarH", ctx.scrollbarH)("virtualization", ctx.virtualization)("loadingIndicator", ctx.loadingIndicator)("externalPaging", ctx.externalPaging)("rowHeight", ctx.rowHeight)("rowCount", ctx.rowCount)("offset", ctx.offset)("trackByProp", ctx.trackByProp)("columns", ctx._internalColumns)("pageSize", ctx.pageSize)("offsetX", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpipeBind1"](3, 32, ctx._offsetX))("rowDetail", ctx.rowDetail)("groupHeader", ctx.groupHeader)("selected", ctx.selected)("innerWidth", ctx._innerWidth)("bodyHeight", ctx.bodyHeight)("selectionType", ctx.selectionType)("emptyMessage", ctx.messages.emptyMessage)("rowIdentity", ctx.rowIdentity)("rowClass", ctx.rowClass)("selectCheck", ctx.selectCheck)("displayCheck", ctx.displayCheck)("summaryRow", ctx.summaryRow)("summaryHeight", ctx.summaryHeight)("summaryPosition", ctx.summaryPosition);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.footerHeight);
          }
        },
        directives: function directives() {
          return [VisibilityDirective, _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], DataTableBodyComponent, DataTableHeaderComponent, DataTableFooterComponent];
        },
        pipes: function pipes() {
          return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["AsyncPipe"]];
        },
        styles: [".ngx-datatable{display:block;justify-content:center;overflow:hidden;position:relative;transform:translateZ(0)}.ngx-datatable [hidden]{display:none!important}.ngx-datatable *,.ngx-datatable :after,.ngx-datatable :before{box-sizing:border-box}.ngx-datatable.scroll-vertical .datatable-body{overflow-y:auto}.ngx-datatable.scroll-vertical.virtualized .datatable-body .datatable-row-wrapper{position:absolute}.ngx-datatable.scroll-horz .datatable-body{-webkit-overflow-scrolling:touch;overflow-x:auto}.ngx-datatable.fixed-header .datatable-header .datatable-header-inner{white-space:nowrap}.ngx-datatable.fixed-header .datatable-header .datatable-header-inner .datatable-header-cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ngx-datatable.fixed-row .datatable-scroll,.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row{white-space:nowrap}.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row .datatable-body-cell,.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row .datatable-body-group-cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ngx-datatable .datatable-body-row,.ngx-datatable .datatable-header-inner,.ngx-datatable .datatable-row-center{-o-flex-flow:row;display:flex;flex-direction:row;flex-flow:row}.ngx-datatable .datatable-body-cell,.ngx-datatable .datatable-header-cell{display:inline-block;line-height:1.625;overflow-x:hidden;vertical-align:top}.ngx-datatable .datatable-body-cell:focus,.ngx-datatable .datatable-header-cell:focus{outline:none}.ngx-datatable .datatable-row-left,.ngx-datatable .datatable-row-right{z-index:9}.ngx-datatable .datatable-row-center,.ngx-datatable .datatable-row-group,.ngx-datatable .datatable-row-left,.ngx-datatable .datatable-row-right{position:relative}.ngx-datatable .datatable-header{display:block;overflow:hidden}.ngx-datatable .datatable-header .datatable-header-inner{-webkit-align-items:stretch;align-items:stretch}.ngx-datatable .datatable-header .datatable-header-cell{display:inline-block;position:relative}.ngx-datatable .datatable-header .datatable-header-cell.sortable .datatable-header-cell-wrapper{cursor:pointer}.ngx-datatable .datatable-header .datatable-header-cell.longpress .datatable-header-cell-wrapper{cursor:move}.ngx-datatable .datatable-header .datatable-header-cell .sort-btn{cursor:pointer;display:inline-block;line-height:100%;vertical-align:middle}.ngx-datatable .datatable-header .datatable-header-cell .resize-handle,.ngx-datatable .datatable-header .datatable-header-cell .resize-handle--not-resizable{bottom:0;display:inline-block;padding:0 4px;position:absolute;right:0;top:0;visibility:hidden;width:5px}.ngx-datatable .datatable-header .datatable-header-cell .resize-handle{cursor:ew-resize}.ngx-datatable .datatable-header .datatable-header-cell.resizeable:hover .resize-handle,.ngx-datatable .datatable-header .datatable-header-cell:hover .resize-handle--not-resizable{visibility:visible}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker{bottom:0;position:absolute;top:0}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker.dragFromLeft{right:0}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker.dragFromRight{left:0}.ngx-datatable .datatable-header .datatable-header-cell .datatable-header-cell-template-wrap{height:inherit}.ngx-datatable .datatable-body{display:block;position:relative;z-index:10}.ngx-datatable .datatable-body .datatable-scroll{display:inline-block}.ngx-datatable .datatable-body .datatable-row-detail{overflow-y:hidden}.ngx-datatable .datatable-body .datatable-row-wrapper{display:flex;flex-direction:column}.ngx-datatable .datatable-body .datatable-body-row{outline:none}.ngx-datatable .datatable-body .datatable-body-row>div{display:flex}.ngx-datatable .datatable-footer{display:block;overflow:auto;width:100%}.ngx-datatable .datatable-footer .datatable-footer-inner{align-items:center;display:flex;width:100%}.ngx-datatable .datatable-footer .selected-count .page-count{flex:1 1 40%}.ngx-datatable .datatable-footer .selected-count .datatable-pager{flex:1 1 60%}.ngx-datatable .datatable-footer .page-count{flex:1 1 20%}.ngx-datatable .datatable-footer .datatable-pager{flex:1 1 80%;text-align:right}.ngx-datatable .datatable-footer .datatable-pager .pager,.ngx-datatable .datatable-footer .datatable-pager .pager li{display:inline-block;list-style:none;margin:0;padding:0}.ngx-datatable .datatable-footer .datatable-pager .pager li,.ngx-datatable .datatable-footer .datatable-pager .pager li a{outline:none}.ngx-datatable .datatable-footer .datatable-pager .pager li a{cursor:pointer;display:inline-block}.ngx-datatable .datatable-footer .datatable-pager .pager li.disabled a{cursor:not-allowed}"],
        encapsulation: 2,
        changeDetection: 0
      });

      DatatableComponent.ctorParameters = function () {
        return [{
          type: ScrollbarHelper,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
          }]
        }, {
          type: DimensionsHelper,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]
        }, {
          type: ColumnChangesService
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: ['configuration']
          }]
        }];
      };

      DatatableComponent.propDecorators = {
        targetMarkerTemplate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        rows: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        groupRowsBy: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        groupedRows: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        columns: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        selected: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        scrollbarV: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        scrollbarH: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        rowHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        columnMode: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        headerHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        footerHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        externalPaging: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        externalSorting: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        limit: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        count: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        offset: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        loadingIndicator: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        selectionType: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        reorderable: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        swapColumns: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        sortType: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        sorts: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        cssClasses: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        messages: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        rowClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        selectCheck: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        displayCheck: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        groupExpansionDefault: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        trackByProp: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        selectAllRowsOnPage: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        virtualization: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        treeFromRelation: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        treeToRelation: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        summaryRow: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        summaryHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        summaryPosition: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        scroll: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        activate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        select: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        sort: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        page: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        reorder: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        resize: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        tableContextmenu: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        treeAction: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        isFixedHeader: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['class.fixed-header']
        }],
        isFixedRow: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['class.fixed-row']
        }],
        isVertScroll: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['class.scroll-vertical']
        }],
        isVirtualized: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['class.virtualized']
        }],
        isHorScroll: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['class.scroll-horz']
        }],
        isSelectable: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['class.selectable']
        }],
        isCheckboxSelection: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['class.checkbox-selection']
        }],
        isCellSelection: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['class.cell-selection']
        }],
        isSingleSelection: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['class.single-selection']
        }],
        isMultiSelection: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['class.multi-selection']
        }],
        isMultiClickSelection: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['class.multi-click-selection']
        }],
        columnTemplates: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
          args: [DataTableColumnDirective]
        }],
        rowDetail: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [DatatableRowDetailDirective]
        }],
        groupHeader: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [DatatableGroupHeaderDirective]
        }],
        footer: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
          args: [DatatableFooterDirective]
        }],
        bodyComponent: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
          args: [DataTableBodyComponent]
        }],
        headerComponent: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
          args: [DataTableHeaderComponent]
        }],
        rowIdentity: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        onWindowResize: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
          args: ['window:resize']
        }]
      };
      Object(tslib__WEBPACK_IMPORTED_MODULE_4__["__decorate"])([throttleable(5)], DatatableComponent.prototype, "onWindowResize", null);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ScrollbarHelper, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
            }]
          }];
        }, null);
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DimensionsHelper, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], null, null);
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ColumnChangesService, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [];
        }, null);
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DataTableFooterTemplateDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngx-datatable-footer-template]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }];
        }, null);
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](VisibilityDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[visibilityObserver]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }];
        }, {
          isVisible: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['class.visible']
          }],
          visible: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DraggableDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[draggable]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }];
        }, {
          dragX: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          dragY: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          dragStart: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          dragging: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          dragEnd: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          dragEventTarget: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          dragModel: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ResizeableDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[resizeable]',
            host: {
              '[class.resizeable]': 'resizeEnabled'
            }
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }];
        }, {
          resizeEnabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          resize: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          onMousedown: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
            args: ['mousedown', ['$event']]
          }],
          minWidth: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          maxWidth: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](OrderableDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[orderable]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["DOCUMENT"]]
            }]
          }];
        }, {
          reorder: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          targetChanged: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          draggables: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
            args: [DraggableDirective, {
              descendants: true
            }]
          }]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](LongPressDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[long-press]'
          }]
        }], function () {
          return [];
        }, {
          pressEnabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          duration: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          longPressStart: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          longPressing: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          longPressEnd: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          press: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['class.press']
          }],
          isLongPress: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['class.longpress']
          }],
          onMouseDown: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
            args: ['mousedown', ['$event']]
          }],
          pressModel: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ScrollerComponent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'datatable-scroller',
            template: " <ng-content></ng-content> ",
            host: {
              "class": 'datatable-scroll'
            },
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }];
        }, {
          scrollbarV: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          scrollbarH: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          scroll: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          scrollHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['style.height.px']
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          scrollWidth: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['style.width.px']
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DatatableGroupHeaderTemplateDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngx-datatable-group-header-template]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }];
        }, null);
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DatatableGroupHeaderDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'ngx-datatable-group-header'
          }]
        }], function () {
          return [];
        }, {
          rowHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          toggle: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          _templateInput: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['template']
          }],
          _templateQuery: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [DatatableGroupHeaderTemplateDirective, {
              read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"],
              "static": true
            }]
          }]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DataTableColumnHeaderDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngx-datatable-header-template]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }];
        }, null);
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DataTableColumnCellDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngx-datatable-cell-template]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }];
        }, null);
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DataTableColumnCellTreeToggle, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngx-datatable-tree-toggle]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }];
        }, null);
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DataTableColumnDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'ngx-datatable-column'
          }]
        }], function () {
          return [{
            type: ColumnChangesService
          }];
        }, {
          name: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          prop: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          frozenLeft: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          frozenRight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          flexGrow: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          resizeable: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          comparator: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          pipe: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          sortable: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          draggable: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          canAutoResize: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          minWidth: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          width: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          maxWidth: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          checkboxable: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          headerCheckboxable: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          headerClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          cellClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          isTreeColumn: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          treeLevelIndent: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          summaryFunc: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          summaryTemplate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          _cellTemplateInput: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['cellTemplate']
          }],
          _cellTemplateQuery: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [DataTableColumnCellDirective, {
              read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"],
              "static": true
            }]
          }],
          _headerTemplateInput: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['headerTemplate']
          }],
          _headerTemplateQuery: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [DataTableColumnHeaderDirective, {
              read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"],
              "static": true
            }]
          }],
          _treeToggleTemplateInput: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['treeToggleTemplate']
          }],
          _treeToggleTemplateQuery: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [DataTableColumnCellTreeToggle, {
              read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"],
              "static": true
            }]
          }]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DatatableRowDetailTemplateDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngx-datatable-row-detail-template]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }];
        }, null);
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DatatableRowDetailDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'ngx-datatable-row-detail'
          }]
        }], function () {
          return [];
        }, {
          rowHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          toggle: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          _templateInput: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['template']
          }],
          _templateQuery: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [DatatableRowDetailTemplateDirective, {
              read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"],
              "static": true
            }]
          }]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DatatableFooterDirective, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: 'ngx-datatable-footer'
          }]
        }], null, {
          footerHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          totalMessage: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          selectedMessage: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          pagerLeftArrowIcon: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          pagerRightArrowIcon: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          pagerPreviousIcon: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          pagerNextIcon: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          _templateInput: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['template']
          }],
          _templateQuery: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [DataTableFooterTemplateDirective, {
              read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
            }]
          }]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DataTableBodyComponent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'datatable-body',
            template: "\n    <datatable-progress *ngIf=\"loadingIndicator\"> </datatable-progress>\n    <datatable-selection\n      #selector\n      [selected]=\"selected\"\n      [rows]=\"rows\"\n      [selectCheck]=\"selectCheck\"\n      [selectEnabled]=\"selectEnabled\"\n      [selectionType]=\"selectionType\"\n      [rowIdentity]=\"rowIdentity\"\n      (select)=\"select.emit($event)\"\n      (activate)=\"activate.emit($event)\"\n    >\n      <datatable-scroller\n        *ngIf=\"rows?.length\"\n        [scrollbarV]=\"scrollbarV\"\n        [scrollbarH]=\"scrollbarH\"\n        [scrollHeight]=\"scrollHeight\"\n        [scrollWidth]=\"columnGroupWidths?.total\"\n        (scroll)=\"onBodyScroll($event)\"\n      >\n        <datatable-summary-row\n          *ngIf=\"summaryRow && summaryPosition === 'top'\"\n          [rowHeight]=\"summaryHeight\"\n          [offsetX]=\"offsetX\"\n          [innerWidth]=\"innerWidth\"\n          [rows]=\"rows\"\n          [columns]=\"columns\"\n        >\n        </datatable-summary-row>\n        <datatable-row-wrapper\n          [groupedRows]=\"groupedRows\"\n          *ngFor=\"let group of temp; let i = index; trackBy: rowTrackingFn\"\n          [innerWidth]=\"innerWidth\"\n          [ngStyle]=\"getRowsStyles(group)\"\n          [rowDetail]=\"rowDetail\"\n          [groupHeader]=\"groupHeader\"\n          [offsetX]=\"offsetX\"\n          [detailRowHeight]=\"getDetailRowHeight(group && group[i], i)\"\n          [row]=\"group\"\n          [expanded]=\"getRowExpanded(group)\"\n          [rowIndex]=\"getRowIndex(group && group[i])\"\n          (rowContextmenu)=\"rowContextmenu.emit($event)\"\n        >\n          <datatable-body-row\n            *ngIf=\"!groupedRows; else groupedRowsTemplate\"\n            tabindex=\"-1\"\n            [isSelected]=\"selector.getRowSelected(group)\"\n            [innerWidth]=\"innerWidth\"\n            [offsetX]=\"offsetX\"\n            [columns]=\"columns\"\n            [rowHeight]=\"getRowHeight(group)\"\n            [row]=\"group\"\n            [rowIndex]=\"getRowIndex(group)\"\n            [expanded]=\"getRowExpanded(group)\"\n            [rowClass]=\"rowClass\"\n            [displayCheck]=\"displayCheck\"\n            [treeStatus]=\"group && group.treeStatus\"\n            (treeAction)=\"onTreeAction(group)\"\n            (activate)=\"selector.onActivate($event, indexes.first + i)\"\n          >\n          </datatable-body-row>\n          <ng-template #groupedRowsTemplate>\n            <datatable-body-row\n              *ngFor=\"let row of group.value; let i = index; trackBy: rowTrackingFn\"\n              tabindex=\"-1\"\n              [isSelected]=\"selector.getRowSelected(row)\"\n              [innerWidth]=\"innerWidth\"\n              [offsetX]=\"offsetX\"\n              [columns]=\"columns\"\n              [rowHeight]=\"getRowHeight(row)\"\n              [row]=\"row\"\n              [group]=\"group.value\"\n              [rowIndex]=\"getRowIndex(row)\"\n              [expanded]=\"getRowExpanded(row)\"\n              [rowClass]=\"rowClass\"\n              (activate)=\"selector.onActivate($event, i)\"\n            >\n            </datatable-body-row>\n          </ng-template>\n        </datatable-row-wrapper>\n        <datatable-summary-row\n          *ngIf=\"summaryRow && summaryPosition === 'bottom'\"\n          [ngStyle]=\"getBottomSummaryRowStyles()\"\n          [rowHeight]=\"summaryHeight\"\n          [offsetX]=\"offsetX\"\n          [innerWidth]=\"innerWidth\"\n          [rows]=\"rows\"\n          [columns]=\"columns\"\n        >\n        </datatable-summary-row>\n      </datatable-scroller>\n      <div class=\"empty-row\" *ngIf=\"!rows?.length && !loadingIndicator\" [innerHTML]=\"emptyMessage\"></div>\n    </datatable-selection>\n  ",
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            host: {
              "class": 'datatable-body'
            }
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }];
        }, {
          selected: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          scroll: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          page: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          activate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          select: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          detailToggle: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          rowContextmenu: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          treeAction: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          pageSize: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          rows: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          columns: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          offset: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          rowCount: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          bodyWidth: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['style.width']
          }],
          bodyHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['style.height']
          }],
          offsetX: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          loadingIndicator: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          scrollbarV: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          scrollbarH: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          externalPaging: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          rowHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          emptyMessage: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          selectionType: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          rowIdentity: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          rowDetail: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          groupHeader: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          selectCheck: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          displayCheck: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          trackByProp: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          rowClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          groupedRows: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          groupExpansionDefault: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          innerWidth: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          groupRowsBy: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          virtualization: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          summaryRow: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          summaryPosition: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          summaryHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          scroller: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
            args: [ScrollerComponent]
          }]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DataTableHeaderComponent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'datatable-header',
            template: "\n    <div\n      orderable\n      (reorder)=\"onColumnReordered($event)\"\n      (targetChanged)=\"onTargetChanged($event)\"\n      [style.width.px]=\"_columnGroupWidths.total\"\n      class=\"datatable-header-inner\"\n    >\n      <div\n        *ngFor=\"let colGroup of _columnsByPin; trackBy: trackByGroups\"\n        [class]=\"'datatable-row-' + colGroup.type\"\n        [ngStyle]=\"_styleByGroup[colGroup.type]\"\n      >\n        <datatable-header-cell\n          *ngFor=\"let column of colGroup.columns; trackBy: columnTrackingFn\"\n          resizeable\n          [resizeEnabled]=\"column.resizeable\"\n          (resize)=\"onColumnResized($event, column)\"\n          long-press\n          [pressModel]=\"column\"\n          [pressEnabled]=\"reorderable && column.draggable\"\n          (longPressStart)=\"onLongPressStart($event)\"\n          (longPressEnd)=\"onLongPressEnd($event)\"\n          draggable\n          [dragX]=\"reorderable && column.draggable && column.dragging\"\n          [dragY]=\"false\"\n          [dragModel]=\"column\"\n          [dragEventTarget]=\"dragEventTarget\"\n          [headerHeight]=\"headerHeight\"\n          [isTarget]=\"column.isTarget\"\n          [targetMarkerTemplate]=\"targetMarkerTemplate\"\n          [targetMarkerContext]=\"column.targetMarkerContext\"\n          [column]=\"column\"\n          [sortType]=\"sortType\"\n          [sorts]=\"sorts\"\n          [selectionType]=\"selectionType\"\n          [sortAscendingIcon]=\"sortAscendingIcon\"\n          [sortDescendingIcon]=\"sortDescendingIcon\"\n          [sortUnsetIcon]=\"sortUnsetIcon\"\n          [allRowsSelected]=\"allRowsSelected\"\n          (sort)=\"onSort($event)\"\n          (select)=\"select.emit($event)\"\n          (columnContextmenu)=\"columnContextmenu.emit($event)\"\n        >\n        </datatable-header-cell>\n      </div>\n    </div>\n  ",
            host: {
              "class": 'datatable-header'
            },
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }];
        }, {
          sort: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          reorder: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          resize: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          select: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          columnContextmenu: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          innerWidth: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          headerHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['style.height']
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          columns: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          offsetX: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          headerWidth: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['style.width']
          }],
          sorts: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          sortAscendingIcon: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          sortDescendingIcon: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          sortUnsetIcon: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          scrollbarH: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          dealsWithGroup: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          targetMarkerTemplate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          sortType: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          allRowsSelected: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          selectionType: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          reorderable: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DatatableComponent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'ngx-datatable',
            template: "<div visibilityObserver (visible)=\"recalculate()\">\n  <datatable-header\n    *ngIf=\"headerHeight\"\n    [sorts]=\"sorts\"\n    [sortType]=\"sortType\"\n    [scrollbarH]=\"scrollbarH\"\n    [innerWidth]=\"_innerWidth\"\n    [offsetX]=\"_offsetX | async\"\n    [dealsWithGroup]=\"groupedRows !== undefined\"\n    [columns]=\"_internalColumns\"\n    [headerHeight]=\"headerHeight\"\n    [reorderable]=\"reorderable\"\n    [targetMarkerTemplate]=\"targetMarkerTemplate\"\n    [sortAscendingIcon]=\"cssClasses.sortAscending\"\n    [sortDescendingIcon]=\"cssClasses.sortDescending\"\n    [sortUnsetIcon]=\"cssClasses.sortUnset\"\n    [allRowsSelected]=\"allRowsSelected\"\n    [selectionType]=\"selectionType\"\n    (sort)=\"onColumnSort($event)\"\n    (resize)=\"onColumnResize($event)\"\n    (reorder)=\"onColumnReorder($event)\"\n    (select)=\"onHeaderSelect($event)\"\n    (columnContextmenu)=\"onColumnContextmenu($event)\"\n  >\n  </datatable-header>\n  <datatable-body\n    [groupRowsBy]=\"groupRowsBy\"\n    [groupedRows]=\"groupedRows\"\n    [rows]=\"_internalRows\"\n    [groupExpansionDefault]=\"groupExpansionDefault\"\n    [scrollbarV]=\"scrollbarV\"\n    [scrollbarH]=\"scrollbarH\"\n    [virtualization]=\"virtualization\"\n    [loadingIndicator]=\"loadingIndicator\"\n    [externalPaging]=\"externalPaging\"\n    [rowHeight]=\"rowHeight\"\n    [rowCount]=\"rowCount\"\n    [offset]=\"offset\"\n    [trackByProp]=\"trackByProp\"\n    [columns]=\"_internalColumns\"\n    [pageSize]=\"pageSize\"\n    [offsetX]=\"_offsetX | async\"\n    [rowDetail]=\"rowDetail\"\n    [groupHeader]=\"groupHeader\"\n    [selected]=\"selected\"\n    [innerWidth]=\"_innerWidth\"\n    [bodyHeight]=\"bodyHeight\"\n    [selectionType]=\"selectionType\"\n    [emptyMessage]=\"messages.emptyMessage\"\n    [rowIdentity]=\"rowIdentity\"\n    [rowClass]=\"rowClass\"\n    [selectCheck]=\"selectCheck\"\n    [displayCheck]=\"displayCheck\"\n    [summaryRow]=\"summaryRow\"\n    [summaryHeight]=\"summaryHeight\"\n    [summaryPosition]=\"summaryPosition\"\n    (page)=\"onBodyPage($event)\"\n    (activate)=\"activate.emit($event)\"\n    (rowContextmenu)=\"onRowContextmenu($event)\"\n    (select)=\"onBodySelect($event)\"\n    (scroll)=\"onBodyScroll($event)\"\n    (treeAction)=\"onTreeAction($event)\"\n  >\n  </datatable-body>\n  <datatable-footer\n    *ngIf=\"footerHeight\"\n    [rowCount]=\"rowCount\"\n    [pageSize]=\"pageSize\"\n    [offset]=\"offset\"\n    [footerHeight]=\"footerHeight\"\n    [footerTemplate]=\"footer\"\n    [totalMessage]=\"messages.totalMessage\"\n    [pagerLeftArrowIcon]=\"cssClasses.pagerLeftArrow\"\n    [pagerRightArrowIcon]=\"cssClasses.pagerRightArrow\"\n    [pagerPreviousIcon]=\"cssClasses.pagerPrevious\"\n    [selectedCount]=\"selected.length\"\n    [selectedMessage]=\"!!selectionType && messages.selectedMessage\"\n    [pagerNextIcon]=\"cssClasses.pagerNext\"\n    (page)=\"onFooterPage($event)\"\n  >\n  </datatable-footer>\n</div>\n",
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewEncapsulation"].None,
            host: {
              "class": 'ngx-datatable'
            },
            styles: [".ngx-datatable{display:block;justify-content:center;overflow:hidden;position:relative;transform:translateZ(0)}.ngx-datatable [hidden]{display:none!important}.ngx-datatable *,.ngx-datatable :after,.ngx-datatable :before{box-sizing:border-box}.ngx-datatable.scroll-vertical .datatable-body{overflow-y:auto}.ngx-datatable.scroll-vertical.virtualized .datatable-body .datatable-row-wrapper{position:absolute}.ngx-datatable.scroll-horz .datatable-body{-webkit-overflow-scrolling:touch;overflow-x:auto}.ngx-datatable.fixed-header .datatable-header .datatable-header-inner{white-space:nowrap}.ngx-datatable.fixed-header .datatable-header .datatable-header-inner .datatable-header-cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ngx-datatable.fixed-row .datatable-scroll,.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row{white-space:nowrap}.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row .datatable-body-cell,.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row .datatable-body-group-cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ngx-datatable .datatable-body-row,.ngx-datatable .datatable-header-inner,.ngx-datatable .datatable-row-center{-o-flex-flow:row;display:flex;flex-direction:row;flex-flow:row}.ngx-datatable .datatable-body-cell,.ngx-datatable .datatable-header-cell{display:inline-block;line-height:1.625;overflow-x:hidden;vertical-align:top}.ngx-datatable .datatable-body-cell:focus,.ngx-datatable .datatable-header-cell:focus{outline:none}.ngx-datatable .datatable-row-left,.ngx-datatable .datatable-row-right{z-index:9}.ngx-datatable .datatable-row-center,.ngx-datatable .datatable-row-group,.ngx-datatable .datatable-row-left,.ngx-datatable .datatable-row-right{position:relative}.ngx-datatable .datatable-header{display:block;overflow:hidden}.ngx-datatable .datatable-header .datatable-header-inner{-webkit-align-items:stretch;align-items:stretch}.ngx-datatable .datatable-header .datatable-header-cell{display:inline-block;position:relative}.ngx-datatable .datatable-header .datatable-header-cell.sortable .datatable-header-cell-wrapper{cursor:pointer}.ngx-datatable .datatable-header .datatable-header-cell.longpress .datatable-header-cell-wrapper{cursor:move}.ngx-datatable .datatable-header .datatable-header-cell .sort-btn{cursor:pointer;display:inline-block;line-height:100%;vertical-align:middle}.ngx-datatable .datatable-header .datatable-header-cell .resize-handle,.ngx-datatable .datatable-header .datatable-header-cell .resize-handle--not-resizable{bottom:0;display:inline-block;padding:0 4px;position:absolute;right:0;top:0;visibility:hidden;width:5px}.ngx-datatable .datatable-header .datatable-header-cell .resize-handle{cursor:ew-resize}.ngx-datatable .datatable-header .datatable-header-cell.resizeable:hover .resize-handle,.ngx-datatable .datatable-header .datatable-header-cell:hover .resize-handle--not-resizable{visibility:visible}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker{bottom:0;position:absolute;top:0}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker.dragFromLeft{right:0}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker.dragFromRight{left:0}.ngx-datatable .datatable-header .datatable-header-cell .datatable-header-cell-template-wrap{height:inherit}.ngx-datatable .datatable-body{display:block;position:relative;z-index:10}.ngx-datatable .datatable-body .datatable-scroll{display:inline-block}.ngx-datatable .datatable-body .datatable-row-detail{overflow-y:hidden}.ngx-datatable .datatable-body .datatable-row-wrapper{display:flex;flex-direction:column}.ngx-datatable .datatable-body .datatable-body-row{outline:none}.ngx-datatable .datatable-body .datatable-body-row>div{display:flex}.ngx-datatable .datatable-footer{display:block;overflow:auto;width:100%}.ngx-datatable .datatable-footer .datatable-footer-inner{align-items:center;display:flex;width:100%}.ngx-datatable .datatable-footer .selected-count .page-count{flex:1 1 40%}.ngx-datatable .datatable-footer .selected-count .datatable-pager{flex:1 1 60%}.ngx-datatable .datatable-footer .page-count{flex:1 1 20%}.ngx-datatable .datatable-footer .datatable-pager{flex:1 1 80%;text-align:right}.ngx-datatable .datatable-footer .datatable-pager .pager,.ngx-datatable .datatable-footer .datatable-pager .pager li{display:inline-block;list-style:none;margin:0;padding:0}.ngx-datatable .datatable-footer .datatable-pager .pager li,.ngx-datatable .datatable-footer .datatable-pager .pager li a{outline:none}.ngx-datatable .datatable-footer .datatable-pager .pager li a{cursor:pointer;display:inline-block}.ngx-datatable .datatable-footer .datatable-pager .pager li.disabled a{cursor:not-allowed}"]
          }]
        }], function () {
          return [{
            type: ScrollbarHelper,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
            }]
          }, {
            type: DimensionsHelper,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]
          }, {
            type: ColumnChangesService
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: ['configuration']
            }]
          }];
        }, {
          selected: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          scrollbarV: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          scrollbarH: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          rowHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          columnMode: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          headerHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          footerHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          externalPaging: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          externalSorting: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          loadingIndicator: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          reorderable: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          swapColumns: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          sortType: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          sorts: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          cssClasses: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          messages: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          groupExpansionDefault: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          selectAllRowsOnPage: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          virtualization: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          summaryRow: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          summaryHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          summaryPosition: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          scroll: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          activate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          select: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          sort: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          page: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          reorder: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          resize: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          tableContextmenu: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          treeAction: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          rowIdentity: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          rows: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          groupedRows: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          groupRowsBy: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          columns: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          limit: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          count: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          offset: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          isFixedHeader: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['class.fixed-header']
          }],
          isFixedRow: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['class.fixed-row']
          }],
          isVertScroll: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['class.scroll-vertical']
          }],
          isVirtualized: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['class.virtualized']
          }],
          isHorScroll: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['class.scroll-horz']
          }],
          isSelectable: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['class.selectable']
          }],
          isCheckboxSelection: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['class.checkbox-selection']
          }],
          isCellSelection: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['class.cell-selection']
          }],
          isSingleSelection: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['class.single-selection']
          }],
          isMultiSelection: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['class.multi-selection']
          }],
          isMultiClickSelection: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['class.multi-click-selection']
          }],
          columnTemplates: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChildren"],
            args: [DataTableColumnDirective]
          }],

          /**
           * Window resize handler to update sizes.
           */
          onWindowResize: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
            args: ['window:resize']
          }],
          targetMarkerTemplate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          selectionType: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          rowClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          selectCheck: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          displayCheck: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          trackByProp: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          treeFromRelation: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          treeToRelation: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          rowDetail: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [DatatableRowDetailDirective]
          }],
          groupHeader: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [DatatableGroupHeaderDirective]
          }],
          footer: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ContentChild"],
            args: [DatatableFooterDirective]
          }],
          bodyComponent: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
            args: [DataTableBodyComponent]
          }],
          headerComponent: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
            args: [DataTableHeaderComponent]
          }]
        });
      })();

      var DataTableHeaderCellComponent = /*#__PURE__*/function () {
        function DataTableHeaderCellComponent(cd) {
          _classCallCheck2(this, DataTableHeaderCellComponent);

          this.cd = cd;
          this.sort = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.select = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.columnContextmenu = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"](false);
          this.sortFn = this.onSort.bind(this);
          this.selectFn = this.select.emit.bind(this.select);
          this.cellContext = {
            column: this.column,
            sortDir: this.sortDir,
            sortFn: this.sortFn,
            allRowsSelected: this.allRowsSelected,
            selectFn: this.selectFn
          };
        }

        _createClass2(DataTableHeaderCellComponent, [{
          key: "allRowsSelected",
          get: function get() {
            return this._allRowsSelected;
          },
          set: function set(value) {
            this._allRowsSelected = value;
            this.cellContext.allRowsSelected = value;
          }
        }, {
          key: "column",
          get: function get() {
            return this._column;
          },
          set: function set(column) {
            this._column = column;
            this.cellContext.column = column;
            this.cd.markForCheck();
          }
        }, {
          key: "sorts",
          get: function get() {
            return this._sorts;
          },
          set: function set(val) {
            this._sorts = val;
            this.sortDir = this.calcSortDir(val);
            this.cellContext.sortDir = this.sortDir;
            this.sortClass = this.calcSortClass(this.sortDir);
            this.cd.markForCheck();
          }
        }, {
          key: "columnCssClasses",
          get: function get() {
            var cls = 'datatable-header-cell';
            if (this.column.sortable) cls += ' sortable';
            if (this.column.resizeable) cls += ' resizeable';

            if (this.column.headerClass) {
              if (typeof this.column.headerClass === 'string') {
                cls += ' ' + this.column.headerClass;
              } else if (typeof this.column.headerClass === 'function') {
                var res = this.column.headerClass({
                  column: this.column
                });

                if (typeof res === 'string') {
                  cls += res;
                } else if (typeof res === 'object') {
                  var keys = Object.keys(res);

                  for (var _i50 = 0, _keys = keys; _i50 < _keys.length; _i50++) {
                    var k = _keys[_i50];
                    if (res[k] === true) cls += " ".concat(k);
                  }
                }
              }
            }

            var sortDir = this.sortDir;

            if (sortDir) {
              cls += " sort-active sort-".concat(sortDir);
            }

            return cls;
          }
        }, {
          key: "name",
          get: function get() {
            // guaranteed to have a value by setColumnDefaults() in column-helper.ts
            return this.column.headerTemplate === undefined ? this.column.name : undefined;
          }
        }, {
          key: "minWidth",
          get: function get() {
            return this.column.minWidth;
          }
        }, {
          key: "maxWidth",
          get: function get() {
            return this.column.maxWidth;
          }
        }, {
          key: "width",
          get: function get() {
            return this.column.width;
          }
        }, {
          key: "isCheckboxable",
          get: function get() {
            return this.column.checkboxable && this.column.headerCheckboxable && this.selectionType === SelectionType.checkbox;
          }
        }, {
          key: "onContextmenu",
          value: function onContextmenu($event) {
            this.columnContextmenu.emit({
              event: $event,
              column: this.column
            });
          }
        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            this.sortClass = this.calcSortClass(this.sortDir);
          }
        }, {
          key: "calcSortDir",
          value: function calcSortDir(sorts) {
            var _this808 = this;

            if (sorts && this.column) {
              var sort = sorts.find(function (s) {
                return s.prop === _this808.column.prop;
              });
              if (sort) return sort.dir;
            }
          }
        }, {
          key: "onSort",
          value: function onSort() {
            if (!this.column.sortable) return;
            var newValue = nextSortDir(this.sortType, this.sortDir);
            this.sort.emit({
              column: this.column,
              prevValue: this.sortDir,
              newValue: newValue
            });
          }
        }, {
          key: "calcSortClass",
          value: function calcSortClass(sortDir) {
            if (!this.cellContext.column.sortable) return;

            if (sortDir === SortDirection.asc) {
              return "sort-btn sort-asc ".concat(this.sortAscendingIcon);
            } else if (sortDir === SortDirection.desc) {
              return "sort-btn sort-desc ".concat(this.sortDescendingIcon);
            } else {
              return "sort-btn ".concat(this.sortUnsetIcon);
            }
          }
        }]);

        return DataTableHeaderCellComponent;
      }();

      DataTableHeaderCellComponent.ɵfac = function DataTableHeaderCellComponent_Factory(t) {
        return new (t || DataTableHeaderCellComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]));
      };

      DataTableHeaderCellComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: DataTableHeaderCellComponent,
        selectors: [["datatable-header-cell"]],
        hostAttrs: [1, "datatable-header-cell"],
        hostVars: 11,
        hostBindings: function DataTableHeaderCellComponent_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("contextmenu", function DataTableHeaderCellComponent_contextmenu_HostBindingHandler($event) {
              return ctx.onContextmenu($event);
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("title", ctx.name);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"](ctx.columnCssClasses);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("min-width", ctx.minWidth, "px")("max-width", ctx.maxWidth, "px")("width", ctx.width, "px")("height", ctx.headerHeight, "px");
          }
        },
        inputs: {
          allRowsSelected: "allRowsSelected",
          column: "column",
          sorts: "sorts",
          sortType: "sortType",
          sortAscendingIcon: "sortAscendingIcon",
          sortDescendingIcon: "sortDescendingIcon",
          sortUnsetIcon: "sortUnsetIcon",
          isTarget: "isTarget",
          targetMarkerTemplate: "targetMarkerTemplate",
          targetMarkerContext: "targetMarkerContext",
          selectionType: "selectionType",
          headerHeight: "headerHeight"
        },
        outputs: {
          sort: "sort",
          select: "select",
          columnContextmenu: "columnContextmenu"
        },
        decls: 6,
        vars: 6,
        consts: [[1, "datatable-header-cell-template-wrap"], [4, "ngIf"], ["class", "datatable-checkbox", 4, "ngIf"], ["class", "datatable-header-cell-wrapper", 4, "ngIf"], [3, "click"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "datatable-checkbox"], ["type", "checkbox", 3, "checked", "change"], [1, "datatable-header-cell-wrapper"], [1, "datatable-header-cell-label", "draggable", 3, "innerHTML", "click"]],
        template: function DataTableHeaderCellComponent_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, DataTableHeaderCellComponent_1_Template, 1, 2, undefined, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, DataTableHeaderCellComponent_label_2_Template, 2, 1, "label", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, DataTableHeaderCellComponent_span_3_Template, 2, 1, "span", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](4, DataTableHeaderCellComponent_4_Template, 1, 2, undefined, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "span", 4);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function DataTableHeaderCellComponent_Template_span_click_5_listener() {
              return ctx.onSort();
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.isTarget);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.isCheckboxable);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx.column.headerTemplate);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.column.headerTemplate);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"](ctx.sortClass);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"]],
        encapsulation: 2,
        changeDetection: 0
      });

      DataTableHeaderCellComponent.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }];
      };

      DataTableHeaderCellComponent.propDecorators = {
        sortType: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        sortAscendingIcon: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        sortDescendingIcon: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        sortUnsetIcon: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        isTarget: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        targetMarkerTemplate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        targetMarkerContext: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        allRowsSelected: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        selectionType: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        column: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        headerHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['style.height.px']
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        sorts: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        sort: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        select: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        columnContextmenu: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        columnCssClasses: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['class']
        }],
        name: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['attr.title']
        }],
        minWidth: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['style.minWidth.px']
        }],
        maxWidth: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['style.maxWidth.px']
        }],
        width: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['style.width.px']
        }],
        onContextmenu: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
          args: ['contextmenu', ['$event']]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DataTableHeaderCellComponent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'datatable-header-cell',
            template: "\n    <div class=\"datatable-header-cell-template-wrap\">\n      <ng-template\n        *ngIf=\"isTarget\"\n        [ngTemplateOutlet]=\"targetMarkerTemplate\"\n        [ngTemplateOutletContext]=\"targetMarkerContext\"\n      >\n      </ng-template>\n      <label *ngIf=\"isCheckboxable\" class=\"datatable-checkbox\">\n        <input type=\"checkbox\" [checked]=\"allRowsSelected\" (change)=\"select.emit(!allRowsSelected)\" />\n      </label>\n      <span *ngIf=\"!column.headerTemplate\" class=\"datatable-header-cell-wrapper\">\n        <span class=\"datatable-header-cell-label draggable\" (click)=\"onSort()\" [innerHTML]=\"name\"> </span>\n      </span>\n      <ng-template\n        *ngIf=\"column.headerTemplate\"\n        [ngTemplateOutlet]=\"column.headerTemplate\"\n        [ngTemplateOutletContext]=\"cellContext\"\n      >\n      </ng-template>\n      <span (click)=\"onSort()\" [class]=\"sortClass\"> </span>\n    </div>\n  ",
            host: {
              "class": 'datatable-header-cell'
            },
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }];
        }, {
          sort: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          select: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          columnContextmenu: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          allRowsSelected: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          column: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          sorts: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          columnCssClasses: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['class']
          }],
          name: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['attr.title']
          }],
          minWidth: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['style.minWidth.px']
          }],
          maxWidth: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['style.maxWidth.px']
          }],
          width: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['style.width.px']
          }],
          onContextmenu: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
            args: ['contextmenu', ['$event']]
          }],
          sortType: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          sortAscendingIcon: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          sortDescendingIcon: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          sortUnsetIcon: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          isTarget: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          targetMarkerTemplate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          targetMarkerContext: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          selectionType: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          headerHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['style.height.px']
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var DataTableFooterComponent = /*#__PURE__*/function () {
        function DataTableFooterComponent() {
          _classCallCheck2(this, DataTableFooterComponent);

          this.selectedCount = 0;
          this.page = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        }

        _createClass2(DataTableFooterComponent, [{
          key: "isVisible",
          get: function get() {
            return this.rowCount / this.pageSize > 1;
          }
        }, {
          key: "curPage",
          get: function get() {
            return this.offset + 1;
          }
        }]);

        return DataTableFooterComponent;
      }();

      DataTableFooterComponent.ɵfac = function DataTableFooterComponent_Factory(t) {
        return new (t || DataTableFooterComponent)();
      };

      DataTableFooterComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: DataTableFooterComponent,
        selectors: [["datatable-footer"]],
        hostAttrs: [1, "datatable-footer"],
        inputs: {
          selectedCount: "selectedCount",
          footerHeight: "footerHeight",
          rowCount: "rowCount",
          pageSize: "pageSize",
          offset: "offset",
          pagerLeftArrowIcon: "pagerLeftArrowIcon",
          pagerRightArrowIcon: "pagerRightArrowIcon",
          pagerPreviousIcon: "pagerPreviousIcon",
          pagerNextIcon: "pagerNextIcon",
          totalMessage: "totalMessage",
          footerTemplate: "footerTemplate",
          selectedMessage: "selectedMessage"
        },
        outputs: {
          page: "page"
        },
        decls: 4,
        vars: 8,
        consts: [[1, "datatable-footer-inner", 3, "ngClass"], [4, "ngIf"], ["class", "page-count", 4, "ngIf"], [3, "pagerLeftArrowIcon", "pagerRightArrowIcon", "pagerPreviousIcon", "pagerNextIcon", "page", "size", "count", "hidden", "change", 4, "ngIf"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "page-count"], [3, "pagerLeftArrowIcon", "pagerRightArrowIcon", "pagerPreviousIcon", "pagerNextIcon", "page", "size", "count", "hidden", "change"]],
        template: function DataTableFooterComponent_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, DataTableFooterComponent_1_Template, 1, 8, undefined, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, DataTableFooterComponent_div_2_Template, 3, 3, "div", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, DataTableFooterComponent_datatable_pager_3_Template, 1, 8, "datatable-pager", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("height", ctx.footerHeight, "px");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpureFunction1"](6, _c2, ctx.selectedMessage));

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.footerTemplate);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx.footerTemplate);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx.footerTemplate);
          }
        },
        directives: function directives() {
          return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgClass"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"], DataTablePagerComponent];
        },
        encapsulation: 2,
        changeDetection: 0
      });
      DataTableFooterComponent.propDecorators = {
        footerHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        rowCount: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        pageSize: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        offset: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        pagerLeftArrowIcon: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        pagerRightArrowIcon: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        pagerPreviousIcon: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        pagerNextIcon: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        totalMessage: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        footerTemplate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        selectedCount: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        selectedMessage: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        page: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DataTableFooterComponent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'datatable-footer',
            template: "\n    <div\n      class=\"datatable-footer-inner\"\n      [ngClass]=\"{ 'selected-count': selectedMessage }\"\n      [style.height.px]=\"footerHeight\"\n    >\n      <ng-template\n        *ngIf=\"footerTemplate\"\n        [ngTemplateOutlet]=\"footerTemplate.template\"\n        [ngTemplateOutletContext]=\"{\n          rowCount: rowCount,\n          pageSize: pageSize,\n          selectedCount: selectedCount,\n          curPage: curPage,\n          offset: offset\n        }\"\n      >\n      </ng-template>\n      <div class=\"page-count\" *ngIf=\"!footerTemplate\">\n        <span *ngIf=\"selectedMessage\"> {{ selectedCount?.toLocaleString() }} {{ selectedMessage }} / </span>\n        {{ rowCount?.toLocaleString() }} {{ totalMessage }}\n      </div>\n      <datatable-pager\n        *ngIf=\"!footerTemplate\"\n        [pagerLeftArrowIcon]=\"pagerLeftArrowIcon\"\n        [pagerRightArrowIcon]=\"pagerRightArrowIcon\"\n        [pagerPreviousIcon]=\"pagerPreviousIcon\"\n        [pagerNextIcon]=\"pagerNextIcon\"\n        [page]=\"curPage\"\n        [size]=\"pageSize\"\n        [count]=\"rowCount\"\n        [hidden]=\"!isVisible\"\n        (change)=\"page.emit($event)\"\n      >\n      </datatable-pager>\n    </div>\n  ",
            host: {
              "class": 'datatable-footer'
            },
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush
          }]
        }], function () {
          return [];
        }, {
          selectedCount: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          page: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          footerHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          rowCount: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          pageSize: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          offset: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          pagerLeftArrowIcon: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          pagerRightArrowIcon: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          pagerPreviousIcon: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          pagerNextIcon: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          totalMessage: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          footerTemplate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          selectedMessage: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var DataTablePagerComponent = /*#__PURE__*/function () {
        function DataTablePagerComponent() {
          _classCallCheck2(this, DataTablePagerComponent);

          this.change = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this._count = 0;
          this._page = 1;
          this._size = 0;
        }

        _createClass2(DataTablePagerComponent, [{
          key: "size",
          get: function get() {
            return this._size;
          },
          set: function set(val) {
            this._size = val;
            this.pages = this.calcPages();
          }
        }, {
          key: "count",
          get: function get() {
            return this._count;
          },
          set: function set(val) {
            this._count = val;
            this.pages = this.calcPages();
          }
        }, {
          key: "page",
          get: function get() {
            return this._page;
          },
          set: function set(val) {
            this._page = val;
            this.pages = this.calcPages();
          }
        }, {
          key: "totalPages",
          get: function get() {
            var count = this.size < 1 ? 1 : Math.ceil(this.count / this.size);
            return Math.max(count || 0, 1);
          }
        }, {
          key: "canPrevious",
          value: function canPrevious() {
            return this.page > 1;
          }
        }, {
          key: "canNext",
          value: function canNext() {
            return this.page < this.totalPages;
          }
        }, {
          key: "prevPage",
          value: function prevPage() {
            this.selectPage(this.page - 1);
          }
        }, {
          key: "nextPage",
          value: function nextPage() {
            this.selectPage(this.page + 1);
          }
        }, {
          key: "selectPage",
          value: function selectPage(page) {
            if (page > 0 && page <= this.totalPages && page !== this.page) {
              this.page = page;
              this.change.emit({
                page: page
              });
            }
          }
        }, {
          key: "calcPages",
          value: function calcPages(page) {
            var pages = [];
            var startPage = 1;
            var endPage = this.totalPages;
            var maxSize = 5;
            var isMaxSized = maxSize < this.totalPages;
            page = page || this.page;

            if (isMaxSized) {
              startPage = page - Math.floor(maxSize / 2);
              endPage = page + Math.floor(maxSize / 2);

              if (startPage < 1) {
                startPage = 1;
                endPage = Math.min(startPage + maxSize - 1, this.totalPages);
              } else if (endPage > this.totalPages) {
                startPage = Math.max(this.totalPages - maxSize + 1, 1);
                endPage = this.totalPages;
              }
            }

            for (var num = startPage; num <= endPage; num++) {
              pages.push({
                number: num,
                text: num
              });
            }

            return pages;
          }
        }]);

        return DataTablePagerComponent;
      }();

      DataTablePagerComponent.ɵfac = function DataTablePagerComponent_Factory(t) {
        return new (t || DataTablePagerComponent)();
      };

      DataTablePagerComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: DataTablePagerComponent,
        selectors: [["datatable-pager"]],
        hostAttrs: [1, "datatable-pager"],
        inputs: {
          size: "size",
          count: "count",
          page: "page",
          pagerLeftArrowIcon: "pagerLeftArrowIcon",
          pagerRightArrowIcon: "pagerRightArrowIcon",
          pagerPreviousIcon: "pagerPreviousIcon",
          pagerNextIcon: "pagerNextIcon"
        },
        outputs: {
          change: "change"
        },
        decls: 14,
        vars: 21,
        consts: [[1, "pager"], ["role", "button", "aria-label", "go to first page", "href", "javascript:void(0)", 3, "click"], ["role", "button", "aria-label", "go to previous page", "href", "javascript:void(0)", 3, "click"], ["role", "button", "class", "pages", 3, "active", 4, "ngFor", "ngForOf"], ["role", "button", "aria-label", "go to next page", "href", "javascript:void(0)", 3, "click"], ["role", "button", "aria-label", "go to last page", "href", "javascript:void(0)", 3, "click"], ["role", "button", 1, "pages"], ["href", "javascript:void(0)", 3, "click"]],
        template: function DataTablePagerComponent_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "ul", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "li");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "a", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function DataTablePagerComponent_Template_a_click_2_listener() {
              return ctx.selectPage(1);
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](3, "i");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](4, "li");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "a", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function DataTablePagerComponent_Template_a_click_5_listener() {
              return ctx.prevPage();
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](6, "i");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](7, DataTablePagerComponent_li_7_Template, 3, 4, "li", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](8, "li");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](9, "a", 4);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function DataTablePagerComponent_Template_a_click_9_listener() {
              return ctx.nextPage();
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](10, "i");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](11, "li");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](12, "a", 5);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function DataTablePagerComponent_Template_a_click_12_listener() {
              return ctx.selectPage(ctx.totalPages);
            });

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](13, "i");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("disabled", !ctx.canPrevious());

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"](ctx.pagerPreviousIcon);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("disabled", !ctx.canPrevious());

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"](ctx.pagerLeftArrowIcon);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.pages);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("disabled", !ctx.canNext());

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"](ctx.pagerRightArrowIcon);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("disabled", !ctx.canNext());

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"](ctx.pagerNextIcon);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"]],
        encapsulation: 2,
        changeDetection: 0
      });
      DataTablePagerComponent.propDecorators = {
        pagerLeftArrowIcon: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        pagerRightArrowIcon: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        pagerPreviousIcon: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        pagerNextIcon: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        size: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        count: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        page: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        change: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DataTablePagerComponent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'datatable-pager',
            template: "\n    <ul class=\"pager\">\n      <li [class.disabled]=\"!canPrevious()\">\n        <a role=\"button\" aria-label=\"go to first page\" href=\"javascript:void(0)\" (click)=\"selectPage(1)\">\n          <i class=\"{{ pagerPreviousIcon }}\"></i>\n        </a>\n      </li>\n      <li [class.disabled]=\"!canPrevious()\">\n        <a role=\"button\" aria-label=\"go to previous page\" href=\"javascript:void(0)\" (click)=\"prevPage()\">\n          <i class=\"{{ pagerLeftArrowIcon }}\"></i>\n        </a>\n      </li>\n      <li\n        role=\"button\"\n        [attr.aria-label]=\"'page ' + pg.number\"\n        class=\"pages\"\n        *ngFor=\"let pg of pages\"\n        [class.active]=\"pg.number === page\"\n      >\n        <a href=\"javascript:void(0)\" (click)=\"selectPage(pg.number)\">\n          {{ pg.text }}\n        </a>\n      </li>\n      <li [class.disabled]=\"!canNext()\">\n        <a role=\"button\" aria-label=\"go to next page\" href=\"javascript:void(0)\" (click)=\"nextPage()\">\n          <i class=\"{{ pagerRightArrowIcon }}\"></i>\n        </a>\n      </li>\n      <li [class.disabled]=\"!canNext()\">\n        <a role=\"button\" aria-label=\"go to last page\" href=\"javascript:void(0)\" (click)=\"selectPage(totalPages)\">\n          <i class=\"{{ pagerNextIcon }}\"></i>\n        </a>\n      </li>\n    </ul>\n  ",
            host: {
              "class": 'datatable-pager'
            },
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush
          }]
        }], function () {
          return [];
        }, {
          change: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          size: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          count: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          page: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          pagerLeftArrowIcon: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          pagerRightArrowIcon: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          pagerPreviousIcon: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          pagerNextIcon: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var ProgressBarComponent = function ProgressBarComponent() {
        _classCallCheck2(this, ProgressBarComponent);
      };

      ProgressBarComponent.ɵfac = function ProgressBarComponent_Factory(t) {
        return new (t || ProgressBarComponent)();
      };

      ProgressBarComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: ProgressBarComponent,
        selectors: [["datatable-progress"]],
        decls: 3,
        vars: 0,
        consts: [["role", "progressbar", 1, "progress-linear"], [1, "container"], [1, "bar"]],
        template: function ProgressBarComponent_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "div", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](2, "div", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
          }
        },
        encapsulation: 2,
        changeDetection: 0
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ProgressBarComponent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'datatable-progress',
            template: "\n    <div class=\"progress-linear\" role=\"progressbar\">\n      <div class=\"container\">\n        <div class=\"bar\"></div>\n      </div>\n    </div>\n  ",
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush
          }]
        }], null, null);
      })();

      var Keys;

      (function (Keys) {
        Keys[Keys["up"] = 38] = "up";
        Keys[Keys["down"] = 40] = "down";
        Keys[Keys["return"] = 13] = "return";
        Keys[Keys["escape"] = 27] = "escape";
        Keys[Keys["left"] = 37] = "left";
        Keys[Keys["right"] = 39] = "right";
      })(Keys || (Keys = {}));

      var DataTableBodyRowComponent = /*#__PURE__*/function () {
        function DataTableBodyRowComponent(differs, scrollbarHelper, cd, element) {
          _classCallCheck2(this, DataTableBodyRowComponent);

          this.differs = differs;
          this.scrollbarHelper = scrollbarHelper;
          this.cd = cd;
          this.treeStatus = 'collapsed';
          this.activate = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.treeAction = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this._groupStyles = {
            left: {},
            center: {},
            right: {}
          };
          this._element = element.nativeElement;
          this._rowDiffer = differs.find({}).create();
        }

        _createClass2(DataTableBodyRowComponent, [{
          key: "columns",
          get: function get() {
            return this._columns;
          },
          set: function set(val) {
            this._columns = val;
            this.recalculateColumns(val);
            this.buildStylesByGroup();
          }
        }, {
          key: "innerWidth",
          get: function get() {
            return this._innerWidth;
          },
          set: function set(val) {
            if (this._columns) {
              var colByPin = columnsByPin(this._columns);
              this._columnGroupWidths = columnGroupWidths(colByPin, this._columns);
            }

            this._innerWidth = val;
            this.recalculateColumns();
            this.buildStylesByGroup();
          }
        }, {
          key: "offsetX",
          get: function get() {
            return this._offsetX;
          },
          set: function set(val) {
            this._offsetX = val;
            this.buildStylesByGroup();
          }
        }, {
          key: "cssClass",
          get: function get() {
            var cls = 'datatable-body-row';

            if (this.isSelected) {
              cls += ' active';
            }

            if (this.rowIndex % 2 !== 0) {
              cls += ' datatable-row-odd';
            }

            if (this.rowIndex % 2 === 0) {
              cls += ' datatable-row-even';
            }

            if (this.rowClass) {
              var res = this.rowClass(this.row);

              if (typeof res === 'string') {
                cls += " ".concat(res);
              } else if (typeof res === 'object') {
                var keys = Object.keys(res);

                for (var _i51 = 0, _keys2 = keys; _i51 < _keys2.length; _i51++) {
                  var k = _keys2[_i51];

                  if (res[k] === true) {
                    cls += " ".concat(k);
                  }
                }
              }
            }

            return cls;
          }
        }, {
          key: "columnsTotalWidths",
          get: function get() {
            return this._columnGroupWidths.total;
          }
        }, {
          key: "ngDoCheck",
          value: function ngDoCheck() {
            if (this._rowDiffer.diff(this.row)) {
              this.cd.markForCheck();
            }
          }
        }, {
          key: "trackByGroups",
          value: function trackByGroups(index, colGroup) {
            return colGroup.type;
          }
        }, {
          key: "columnTrackingFn",
          value: function columnTrackingFn(index, column) {
            return column.$$id;
          }
        }, {
          key: "buildStylesByGroup",
          value: function buildStylesByGroup() {
            this._groupStyles.left = this.calcStylesByGroup('left');
            this._groupStyles.center = this.calcStylesByGroup('center');
            this._groupStyles.right = this.calcStylesByGroup('right');
            this.cd.markForCheck();
          }
        }, {
          key: "calcStylesByGroup",
          value: function calcStylesByGroup(group) {
            var widths = this._columnGroupWidths;
            var offsetX = this.offsetX;
            var styles = {
              width: "".concat(widths[group], "px")
            };

            if (group === 'left') {
              translateXY(styles, offsetX, 0);
            } else if (group === 'right') {
              var bodyWidth = parseInt(this.innerWidth + '', 0);
              var totalDiff = widths.total - bodyWidth;
              var offsetDiff = totalDiff - offsetX;
              var offset = (offsetDiff + this.scrollbarHelper.width) * -1;
              translateXY(styles, offset, 0);
            }

            return styles;
          }
        }, {
          key: "onActivate",
          value: function onActivate(event, index) {
            event.cellIndex = index;
            event.rowElement = this._element;
            this.activate.emit(event);
          }
        }, {
          key: "onKeyDown",
          value: function onKeyDown(event) {
            var keyCode = event.keyCode;
            var isTargetRow = event.target === this._element;
            var isAction = keyCode === Keys["return"] || keyCode === Keys.down || keyCode === Keys.up || keyCode === Keys.left || keyCode === Keys.right;

            if (isAction && isTargetRow) {
              event.preventDefault();
              event.stopPropagation();
              this.activate.emit({
                type: 'keydown',
                event: event,
                row: this.row,
                rowElement: this._element
              });
            }
          }
        }, {
          key: "onMouseenter",
          value: function onMouseenter(event) {
            this.activate.emit({
              type: 'mouseenter',
              event: event,
              row: this.row,
              rowElement: this._element
            });
          }
        }, {
          key: "recalculateColumns",
          value: function recalculateColumns() {
            var val = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.columns;
            this._columns = val;
            var colsByPin = columnsByPin(this._columns);
            this._columnsByPin = columnsByPinArr(this._columns);
            this._columnGroupWidths = columnGroupWidths(colsByPin, this._columns);
          }
        }, {
          key: "onTreeAction",
          value: function onTreeAction() {
            this.treeAction.emit();
          }
        }]);

        return DataTableBodyRowComponent;
      }();

      DataTableBodyRowComponent.ɵfac = function DataTableBodyRowComponent_Factory(t) {
        return new (t || DataTableBodyRowComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](ScrollbarHelper, 4), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]));
      };

      DataTableBodyRowComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: DataTableBodyRowComponent,
        selectors: [["datatable-body-row"]],
        hostVars: 6,
        hostBindings: function DataTableBodyRowComponent_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("keydown", function DataTableBodyRowComponent_keydown_HostBindingHandler($event) {
              return ctx.onKeyDown($event);
            })("mouseenter", function DataTableBodyRowComponent_mouseenter_HostBindingHandler($event) {
              return ctx.onMouseenter($event);
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"](ctx.cssClass);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("width", ctx.columnsTotalWidths, "px")("height", ctx.rowHeight, "px");
          }
        },
        inputs: {
          treeStatus: "treeStatus",
          columns: "columns",
          innerWidth: "innerWidth",
          offsetX: "offsetX",
          expanded: "expanded",
          rowClass: "rowClass",
          row: "row",
          group: "group",
          isSelected: "isSelected",
          rowIndex: "rowIndex",
          displayCheck: "displayCheck",
          rowHeight: "rowHeight"
        },
        outputs: {
          activate: "activate",
          treeAction: "treeAction"
        },
        decls: 1,
        vars: 2,
        consts: [[3, "class", "ngStyle", 4, "ngFor", "ngForOf", "ngForTrackBy"], [3, "ngStyle"], ["tabindex", "-1", 3, "row", "group", "expanded", "isSelected", "rowIndex", "column", "rowHeight", "displayCheck", "treeStatus", "activate", "treeAction", 4, "ngFor", "ngForOf", "ngForTrackBy"], ["tabindex", "-1", 3, "row", "group", "expanded", "isSelected", "rowIndex", "column", "rowHeight", "displayCheck", "treeStatus", "activate", "treeAction"]],
        template: function DataTableBodyRowComponent_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, DataTableBodyRowComponent_div_0_Template, 2, 6, "div", 0);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx._columnsByPin)("ngForTrackBy", ctx.trackByGroups);
          }
        },
        directives: function directives() {
          return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgForOf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgStyle"], DataTableBodyCellComponent];
        },
        encapsulation: 2,
        changeDetection: 0
      });

      DataTableBodyRowComponent.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]
        }, {
          type: ScrollbarHelper,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }];
      };

      DataTableBodyRowComponent.propDecorators = {
        columns: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        innerWidth: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        expanded: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        rowClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        row: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        group: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        isSelected: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        rowIndex: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        displayCheck: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        treeStatus: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        offsetX: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        cssClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['class']
        }],
        rowHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['style.height.px']
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        columnsTotalWidths: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['style.width.px']
        }],
        activate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        treeAction: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        onKeyDown: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
          args: ['keydown', ['$event']]
        }],
        onMouseenter: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
          args: ['mouseenter', ['$event']]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DataTableBodyRowComponent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'datatable-body-row',
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            template: "\n    <div\n      *ngFor=\"let colGroup of _columnsByPin; let i = index; trackBy: trackByGroups\"\n      class=\"datatable-row-{{ colGroup.type }} datatable-row-group\"\n      [ngStyle]=\"_groupStyles[colGroup.type]\"\n    >\n      <datatable-body-cell\n        *ngFor=\"let column of colGroup.columns; let ii = index; trackBy: columnTrackingFn\"\n        tabindex=\"-1\"\n        [row]=\"row\"\n        [group]=\"group\"\n        [expanded]=\"expanded\"\n        [isSelected]=\"isSelected\"\n        [rowIndex]=\"rowIndex\"\n        [column]=\"column\"\n        [rowHeight]=\"rowHeight\"\n        [displayCheck]=\"displayCheck\"\n        [treeStatus]=\"treeStatus\"\n        (activate)=\"onActivate($event, ii)\"\n        (treeAction)=\"onTreeAction()\"\n      >\n      </datatable-body-cell>\n    </div>\n  "
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]
          }, {
            type: ScrollbarHelper,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["SkipSelf"]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }];
        }, {
          treeStatus: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          activate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          treeAction: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          columns: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          innerWidth: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          offsetX: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          cssClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['class']
          }],
          columnsTotalWidths: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['style.width.px']
          }],
          onKeyDown: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
            args: ['keydown', ['$event']]
          }],
          onMouseenter: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
            args: ['mouseenter', ['$event']]
          }],
          expanded: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          rowClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          row: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          group: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          isSelected: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          rowIndex: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          displayCheck: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          rowHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['style.height.px']
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var DataTableRowWrapperComponent = /*#__PURE__*/function () {
        function DataTableRowWrapperComponent(cd, differs) {
          _classCallCheck2(this, DataTableRowWrapperComponent);

          this.cd = cd;
          this.differs = differs;
          this.rowContextmenu = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"](false);
          this._expanded = false;
          this.groupContext = {
            group: this.row,
            expanded: this.expanded,
            rowIndex: this.rowIndex
          };
          this.rowContext = {
            row: this.row,
            expanded: this.expanded,
            rowIndex: this.rowIndex
          };
          this.rowDiffer = differs.find({}).create();
        }

        _createClass2(DataTableRowWrapperComponent, [{
          key: "rowIndex",
          get: function get() {
            return this._rowIndex;
          },
          set: function set(val) {
            this._rowIndex = val;
            this.rowContext.rowIndex = val;
            this.groupContext.rowIndex = val;
            this.cd.markForCheck();
          }
        }, {
          key: "expanded",
          get: function get() {
            return this._expanded;
          },
          set: function set(val) {
            this._expanded = val;
            this.groupContext.expanded = val;
            this.rowContext.expanded = val;
            this.cd.markForCheck();
          }
        }, {
          key: "ngDoCheck",
          value: function ngDoCheck() {
            if (this.rowDiffer.diff(this.row)) {
              this.rowContext.row = this.row;
              this.groupContext.group = this.row;
              this.cd.markForCheck();
            }
          }
        }, {
          key: "onContextmenu",
          value: function onContextmenu($event) {
            this.rowContextmenu.emit({
              event: $event,
              row: this.row
            });
          }
        }, {
          key: "getGroupHeaderStyle",
          value: function getGroupHeaderStyle() {
            var styles = {};
            styles['transform'] = 'translate3d(' + this.offsetX + 'px, 0px, 0px)';
            styles['backface-visibility'] = 'hidden';
            styles['width'] = this.innerWidth;
            return styles;
          }
        }]);

        return DataTableRowWrapperComponent;
      }();

      DataTableRowWrapperComponent.ɵfac = function DataTableRowWrapperComponent_Factory(t) {
        return new (t || DataTableRowWrapperComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]));
      };

      DataTableRowWrapperComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: DataTableRowWrapperComponent,
        selectors: [["datatable-row-wrapper"]],
        hostAttrs: [1, "datatable-row-wrapper"],
        hostBindings: function DataTableRowWrapperComponent_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("contextmenu", function DataTableRowWrapperComponent_contextmenu_HostBindingHandler($event) {
              return ctx.onContextmenu($event);
            });
          }
        },
        inputs: {
          rowIndex: "rowIndex",
          expanded: "expanded",
          innerWidth: "innerWidth",
          rowDetail: "rowDetail",
          groupHeader: "groupHeader",
          offsetX: "offsetX",
          detailRowHeight: "detailRowHeight",
          row: "row",
          groupedRows: "groupedRows"
        },
        outputs: {
          rowContextmenu: "rowContextmenu"
        },
        ngContentSelectors: _c0,
        decls: 3,
        vars: 3,
        consts: [["class", "datatable-group-header", 3, "ngStyle", 4, "ngIf"], [4, "ngIf"], ["class", "datatable-row-detail", 3, "height", 4, "ngIf"], [1, "datatable-group-header", 3, "ngStyle"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "datatable-row-detail"]],
        template: function DataTableRowWrapperComponent_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, DataTableRowWrapperComponent_div_0_Template, 2, 2, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, DataTableRowWrapperComponent_ng_content_1_Template, 1, 0, "ng-content", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, DataTableRowWrapperComponent_div_2_Template, 2, 3, "div", 2);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.groupHeader && ctx.groupHeader.template);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.groupHeader && ctx.groupHeader.template && ctx.expanded || !ctx.groupHeader || !ctx.groupHeader.template);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.rowDetail && ctx.rowDetail.template && ctx.expanded);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgStyle"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"]],
        encapsulation: 2,
        changeDetection: 0
      });

      DataTableRowWrapperComponent.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]
        }];
      };

      DataTableRowWrapperComponent.propDecorators = {
        innerWidth: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        rowDetail: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        groupHeader: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        offsetX: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        detailRowHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        row: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        groupedRows: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        rowContextmenu: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        rowIndex: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        expanded: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        onContextmenu: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
          args: ['contextmenu', ['$event']]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DataTableRowWrapperComponent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'datatable-row-wrapper',
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            template: "\n    <div *ngIf=\"groupHeader && groupHeader.template\" class=\"datatable-group-header\" [ngStyle]=\"getGroupHeaderStyle()\">\n      <ng-template\n        *ngIf=\"groupHeader && groupHeader.template\"\n        [ngTemplateOutlet]=\"groupHeader.template\"\n        [ngTemplateOutletContext]=\"groupContext\"\n      >\n      </ng-template>\n    </div>\n    <ng-content *ngIf=\"(groupHeader && groupHeader.template && expanded) || !groupHeader || !groupHeader.template\">\n    </ng-content>\n    <div\n      *ngIf=\"rowDetail && rowDetail.template && expanded\"\n      [style.height.px]=\"detailRowHeight\"\n      class=\"datatable-row-detail\"\n    >\n      <ng-template\n        *ngIf=\"rowDetail && rowDetail.template\"\n        [ngTemplateOutlet]=\"rowDetail.template\"\n        [ngTemplateOutletContext]=\"rowContext\"\n      >\n      </ng-template>\n    </div>\n  ",
            host: {
              "class": 'datatable-row-wrapper'
            }
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]
          }];
        }, {
          rowContextmenu: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          rowIndex: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          expanded: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          onContextmenu: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
            args: ['contextmenu', ['$event']]
          }],
          innerWidth: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          rowDetail: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          groupHeader: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          offsetX: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          detailRowHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          row: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          groupedRows: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var DataTableBodyCellComponent = /*#__PURE__*/function () {
        function DataTableBodyCellComponent(element, cd) {
          _classCallCheck2(this, DataTableBodyCellComponent);

          this.cd = cd;
          this.activate = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.treeAction = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.isFocused = false;
          this.onCheckboxChangeFn = this.onCheckboxChange.bind(this);
          this.activateFn = this.activate.emit.bind(this.activate);
          this.cellContext = {
            onCheckboxChangeFn: this.onCheckboxChangeFn,
            activateFn: this.activateFn,
            row: this.row,
            group: this.group,
            value: this.value,
            column: this.column,
            rowHeight: this.rowHeight,
            isSelected: this.isSelected,
            rowIndex: this.rowIndex,
            treeStatus: this.treeStatus,
            onTreeAction: this.onTreeAction.bind(this)
          };
          this._element = element.nativeElement;
        }

        _createClass2(DataTableBodyCellComponent, [{
          key: "group",
          get: function get() {
            return this._group;
          },
          set: function set(group) {
            this._group = group;
            this.cellContext.group = group;
            this.checkValueUpdates();
            this.cd.markForCheck();
          }
        }, {
          key: "rowHeight",
          get: function get() {
            return this._rowHeight;
          },
          set: function set(val) {
            this._rowHeight = val;
            this.cellContext.rowHeight = val;
            this.checkValueUpdates();
            this.cd.markForCheck();
          }
        }, {
          key: "isSelected",
          get: function get() {
            return this._isSelected;
          },
          set: function set(val) {
            this._isSelected = val;
            this.cellContext.isSelected = val;
            this.cd.markForCheck();
          }
        }, {
          key: "expanded",
          get: function get() {
            return this._expanded;
          },
          set: function set(val) {
            this._expanded = val;
            this.cellContext.expanded = val;
            this.cd.markForCheck();
          }
        }, {
          key: "rowIndex",
          get: function get() {
            return this._rowIndex;
          },
          set: function set(val) {
            this._rowIndex = val;
            this.cellContext.rowIndex = val;
            this.checkValueUpdates();
            this.cd.markForCheck();
          }
        }, {
          key: "column",
          get: function get() {
            return this._column;
          },
          set: function set(column) {
            this._column = column;
            this.cellContext.column = column;
            this.checkValueUpdates();
            this.cd.markForCheck();
          }
        }, {
          key: "row",
          get: function get() {
            return this._row;
          },
          set: function set(row) {
            this._row = row;
            this.cellContext.row = row;
            this.checkValueUpdates();
            this.cd.markForCheck();
          }
        }, {
          key: "sorts",
          get: function get() {
            return this._sorts;
          },
          set: function set(val) {
            this._sorts = val;
            this.calcSortDir = this.calcSortDir(val);
          }
        }, {
          key: "treeStatus",
          get: function get() {
            return this._treeStatus;
          },
          set: function set(status) {
            if (status !== 'collapsed' && status !== 'expanded' && status !== 'loading' && status !== 'disabled') {
              this._treeStatus = 'collapsed';
            } else {
              this._treeStatus = status;
            }

            this.cellContext.treeStatus = this._treeStatus;
            this.checkValueUpdates();
            this.cd.markForCheck();
          }
        }, {
          key: "columnCssClasses",
          get: function get() {
            var cls = 'datatable-body-cell';

            if (this.column.cellClass) {
              if (typeof this.column.cellClass === 'string') {
                cls += ' ' + this.column.cellClass;
              } else if (typeof this.column.cellClass === 'function') {
                var res = this.column.cellClass({
                  row: this.row,
                  group: this.group,
                  column: this.column,
                  value: this.value,
                  rowHeight: this.rowHeight
                });

                if (typeof res === 'string') {
                  cls += ' ' + res;
                } else if (typeof res === 'object') {
                  var keys = Object.keys(res);

                  for (var _i52 = 0, _keys3 = keys; _i52 < _keys3.length; _i52++) {
                    var k = _keys3[_i52];

                    if (res[k] === true) {
                      cls += " ".concat(k);
                    }
                  }
                }
              }
            }

            if (!this.sortDir) {
              cls += ' sort-active';
            }

            if (this.isFocused) {
              cls += ' active';
            }

            if (this.sortDir === SortDirection.asc) {
              cls += ' sort-asc';
            }

            if (this.sortDir === SortDirection.desc) {
              cls += ' sort-desc';
            }

            return cls;
          }
        }, {
          key: "width",
          get: function get() {
            return this.column.width;
          }
        }, {
          key: "minWidth",
          get: function get() {
            return this.column.minWidth;
          }
        }, {
          key: "maxWidth",
          get: function get() {
            return this.column.maxWidth;
          }
        }, {
          key: "height",
          get: function get() {
            var height = this.rowHeight;

            if (isNaN(height)) {
              return height;
            }

            return height + 'px';
          }
        }, {
          key: "ngDoCheck",
          value: function ngDoCheck() {
            this.checkValueUpdates();
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            if (this.cellTemplate) {
              this.cellTemplate.clear();
            }
          }
        }, {
          key: "checkValueUpdates",
          value: function checkValueUpdates() {
            var value = '';

            if (!this.row || !this.column) {
              value = '';
            } else {
              var val = this.column.$$valueGetter(this.row, this.column.prop);
              var userPipe = this.column.pipe;

              if (userPipe) {
                value = userPipe.transform(val);
              } else if (value !== undefined) {
                value = val;
              }
            }

            if (this.value !== value) {
              this.value = value;
              this.cellContext.value = value;
              this.sanitizedValue = value !== null && value !== undefined ? this.stripHtml(value) : value;
              this.cd.markForCheck();
            }
          }
        }, {
          key: "onFocus",
          value: function onFocus() {
            this.isFocused = true;
          }
        }, {
          key: "onBlur",
          value: function onBlur() {
            this.isFocused = false;
          }
        }, {
          key: "onClick",
          value: function onClick(event) {
            this.activate.emit({
              type: 'click',
              event: event,
              row: this.row,
              group: this.group,
              rowHeight: this.rowHeight,
              column: this.column,
              value: this.value,
              cellElement: this._element
            });
          }
        }, {
          key: "onDblClick",
          value: function onDblClick(event) {
            this.activate.emit({
              type: 'dblclick',
              event: event,
              row: this.row,
              group: this.group,
              rowHeight: this.rowHeight,
              column: this.column,
              value: this.value,
              cellElement: this._element
            });
          }
        }, {
          key: "onKeyDown",
          value: function onKeyDown(event) {
            var keyCode = event.keyCode;
            var isTargetCell = event.target === this._element;
            var isAction = keyCode === Keys["return"] || keyCode === Keys.down || keyCode === Keys.up || keyCode === Keys.left || keyCode === Keys.right;

            if (isAction && isTargetCell) {
              event.preventDefault();
              event.stopPropagation();
              this.activate.emit({
                type: 'keydown',
                event: event,
                row: this.row,
                group: this.group,
                rowHeight: this.rowHeight,
                column: this.column,
                value: this.value,
                cellElement: this._element
              });
            }
          }
        }, {
          key: "onCheckboxChange",
          value: function onCheckboxChange(event) {
            this.activate.emit({
              type: 'checkbox',
              event: event,
              row: this.row,
              group: this.group,
              rowHeight: this.rowHeight,
              column: this.column,
              value: this.value,
              cellElement: this._element,
              treeStatus: 'collapsed'
            });
          }
        }, {
          key: "calcSortDir",
          value: function calcSortDir(sorts) {
            var _this809 = this;

            if (!sorts) {
              return;
            }

            var sort = sorts.find(function (s) {
              return s.prop === _this809.column.prop;
            });

            if (sort) {
              return sort.dir;
            }
          }
        }, {
          key: "stripHtml",
          value: function stripHtml(html) {
            if (!html.replace) {
              return html;
            }

            return html.replace(/<\/?[^>]+(>|$)/g, '');
          }
        }, {
          key: "onTreeAction",
          value: function onTreeAction() {
            this.treeAction.emit(this.row);
          }
        }, {
          key: "calcLeftMargin",
          value: function calcLeftMargin(column, row) {
            var levelIndent = column.treeLevelIndent != null ? column.treeLevelIndent : 50;
            return column.isTreeColumn ? row.level * levelIndent : 0;
          }
        }]);

        return DataTableBodyCellComponent;
      }();

      DataTableBodyCellComponent.ɵfac = function DataTableBodyCellComponent_Factory(t) {
        return new (t || DataTableBodyCellComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]));
      };

      DataTableBodyCellComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: DataTableBodyCellComponent,
        selectors: [["datatable-body-cell"]],
        viewQuery: function DataTableBodyCellComponent_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](_c3, 3, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.cellTemplate = _t.first);
          }
        },
        hostVars: 10,
        hostBindings: function DataTableBodyCellComponent_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("focus", function DataTableBodyCellComponent_focus_HostBindingHandler() {
              return ctx.onFocus();
            })("blur", function DataTableBodyCellComponent_blur_HostBindingHandler() {
              return ctx.onBlur();
            })("click", function DataTableBodyCellComponent_click_HostBindingHandler($event) {
              return ctx.onClick($event);
            })("dblclick", function DataTableBodyCellComponent_dblclick_HostBindingHandler($event) {
              return ctx.onDblClick($event);
            })("keydown", function DataTableBodyCellComponent_keydown_HostBindingHandler($event) {
              return ctx.onKeyDown($event);
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassMap"](ctx.columnCssClasses);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("width", ctx.width, "px")("min-width", ctx.minWidth, "px")("max-width", ctx.maxWidth, "px")("height", ctx.height);
          }
        },
        inputs: {
          group: "group",
          rowHeight: "rowHeight",
          isSelected: "isSelected",
          expanded: "expanded",
          rowIndex: "rowIndex",
          column: "column",
          row: "row",
          sorts: "sorts",
          treeStatus: "treeStatus",
          displayCheck: "displayCheck"
        },
        outputs: {
          activate: "activate",
          treeAction: "treeAction"
        },
        decls: 5,
        vars: 6,
        consts: [[1, "datatable-body-cell-label"], ["class", "datatable-checkbox", 4, "ngIf"], [4, "ngIf"], [3, "title", "innerHTML", 4, "ngIf"], [1, "datatable-checkbox"], ["type", "checkbox", 3, "checked", "click"], ["class", "datatable-tree-button", 3, "disabled", "click", 4, "ngIf"], [1, "datatable-tree-button", 3, "disabled", "click"], ["class", "icon datatable-icon-collapse", 4, "ngIf"], ["class", "icon datatable-icon-up", 4, "ngIf"], ["class", "icon datatable-icon-down", 4, "ngIf"], [1, "icon", "datatable-icon-collapse"], [1, "icon", "datatable-icon-up"], [1, "icon", "datatable-icon-down"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], [3, "title", "innerHTML"], ["cellTemplate", ""]],
        template: function DataTableBodyCellComponent_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, DataTableBodyCellComponent_label_1_Template, 2, 1, "label", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](2, DataTableBodyCellComponent_ng_container_2_Template, 3, 2, "ng-container", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](3, DataTableBodyCellComponent_span_3_Template, 1, 2, "span", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](4, DataTableBodyCellComponent_4_Template, 2, 2, undefined, 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵstyleProp"]("margin-left", ctx.calcLeftMargin(ctx.column, ctx.row), "px");

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.column.checkboxable && (!ctx.displayCheck || ctx.displayCheck(ctx.row, ctx.column, ctx.value)));

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.column.isTreeColumn);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx.column.cellTemplate);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.column.cellTemplate);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_1__["NgTemplateOutlet"]],
        encapsulation: 2,
        changeDetection: 0
      });

      DataTableBodyCellComponent.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }];
      };

      DataTableBodyCellComponent.propDecorators = {
        displayCheck: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        group: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        rowHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        isSelected: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        expanded: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        rowIndex: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        column: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        row: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        sorts: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        treeStatus: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        activate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        treeAction: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        cellTemplate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
          args: ['cellTemplate', {
            read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"],
            "static": true
          }]
        }],
        columnCssClasses: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['class']
        }],
        width: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['style.width.px']
        }],
        minWidth: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['style.minWidth.px']
        }],
        maxWidth: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['style.maxWidth.px']
        }],
        height: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
          args: ['style.height']
        }],
        onFocus: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
          args: ['focus']
        }],
        onBlur: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
          args: ['blur']
        }],
        onClick: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
          args: ['click', ['$event']]
        }],
        onDblClick: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
          args: ['dblclick', ['$event']]
        }],
        onKeyDown: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
          args: ['keydown', ['$event']]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DataTableBodyCellComponent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'datatable-body-cell',
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush,
            template: "\n    <div class=\"datatable-body-cell-label\" [style.margin-left.px]=\"calcLeftMargin(column, row)\">\n      <label\n        *ngIf=\"column.checkboxable && (!displayCheck || displayCheck(row, column, value))\"\n        class=\"datatable-checkbox\"\n      >\n        <input type=\"checkbox\" [checked]=\"isSelected\" (click)=\"onCheckboxChange($event)\" />\n      </label>\n      <ng-container *ngIf=\"column.isTreeColumn\">\n        <button\n          *ngIf=\"!column.treeToggleTemplate\"\n          class=\"datatable-tree-button\"\n          [disabled]=\"treeStatus === 'disabled'\"\n          (click)=\"onTreeAction()\"\n        >\n          <span>\n            <i *ngIf=\"treeStatus === 'loading'\" class=\"icon datatable-icon-collapse\"></i>\n            <i *ngIf=\"treeStatus === 'collapsed'\" class=\"icon datatable-icon-up\"></i>\n            <i *ngIf=\"treeStatus === 'expanded' || treeStatus === 'disabled'\" class=\"icon datatable-icon-down\"></i>\n          </span>\n        </button>\n        <ng-template\n          *ngIf=\"column.treeToggleTemplate\"\n          [ngTemplateOutlet]=\"column.treeToggleTemplate\"\n          [ngTemplateOutletContext]=\"{ cellContext: cellContext }\"\n        >\n        </ng-template>\n      </ng-container>\n\n      <span *ngIf=\"!column.cellTemplate\" [title]=\"sanitizedValue\" [innerHTML]=\"value\"> </span>\n      <ng-template\n        #cellTemplate\n        *ngIf=\"column.cellTemplate\"\n        [ngTemplateOutlet]=\"column.cellTemplate\"\n        [ngTemplateOutletContext]=\"cellContext\"\n      >\n      </ng-template>\n    </div>\n  "
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }];
        }, {
          activate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          treeAction: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          group: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          rowHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          isSelected: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          expanded: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          rowIndex: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          column: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          row: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          sorts: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          treeStatus: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          columnCssClasses: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['class']
          }],
          width: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['style.width.px']
          }],
          minWidth: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['style.minWidth.px']
          }],
          maxWidth: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['style.maxWidth.px']
          }],
          height: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
            args: ['style.height']
          }],
          onFocus: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
            args: ['focus']
          }],
          onBlur: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
            args: ['blur']
          }],
          onClick: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
            args: ['click', ['$event']]
          }],
          onDblClick: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
            args: ['dblclick', ['$event']]
          }],
          onKeyDown: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
            args: ['keydown', ['$event']]
          }],
          displayCheck: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          cellTemplate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
            args: ['cellTemplate', {
              read: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"],
              "static": true
            }]
          }]
        });
      })();

      function selectRows(selected, row, comparefn) {
        var selectedIndex = comparefn(row, selected);

        if (selectedIndex > -1) {
          selected.splice(selectedIndex, 1);
        } else {
          selected.push(row);
        }

        return selected;
      }

      function selectRowsBetween(selected, rows, index, prevIndex, comparefn) {
        var reverse = index < prevIndex;

        for (var i = 0; i < rows.length; i++) {
          var row = rows[i];
          var greater = i >= prevIndex && i <= index;
          var lesser = i <= prevIndex && i >= index;
          var range = {
            start: 0,
            end: 0
          };

          if (reverse) {
            range = {
              start: index,
              end: prevIndex
            };
          } else {
            range = {
              start: prevIndex,
              end: index + 1
            };
          }

          if (reverse && lesser || !reverse && greater) {
            // if in the positive range to be added to `selected`, and
            // not already in the selected array, add it
            if (i >= range.start && i <= range.end) {
              selected.push(row);
            }
          }
        }

        return selected;
      }

      var DataTableSelectionComponent = /*#__PURE__*/function () {
        function DataTableSelectionComponent() {
          _classCallCheck2(this, DataTableSelectionComponent);

          this.activate = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.select = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
        }

        _createClass2(DataTableSelectionComponent, [{
          key: "selectRow",
          value: function selectRow(event, index, row) {
            var _this$selected3;

            if (!this.selectEnabled) return;
            var chkbox = this.selectionType === SelectionType.checkbox;
            var multi = this.selectionType === SelectionType.multi;
            var multiClick = this.selectionType === SelectionType.multiClick;
            var selected = [];

            if (multi || chkbox || multiClick) {
              if (event.shiftKey) {
                selected = selectRowsBetween([], this.rows, index, this.prevIndex, this.getRowSelectedIdx.bind(this));
              } else if (event.ctrlKey || event.metaKey || multiClick || chkbox) {
                selected = selectRows(_toConsumableArray(this.selected), row, this.getRowSelectedIdx.bind(this));
              } else {
                selected = selectRows([], row, this.getRowSelectedIdx.bind(this));
              }
            } else {
              selected = selectRows([], row, this.getRowSelectedIdx.bind(this));
            }

            if (typeof this.selectCheck === 'function') {
              selected = selected.filter(this.selectCheck.bind(this));
            }

            this.selected.splice(0, this.selected.length);

            (_this$selected3 = this.selected).push.apply(_this$selected3, _toConsumableArray(selected));

            this.prevIndex = index;
            this.select.emit({
              selected: selected
            });
          }
        }, {
          key: "onActivate",
          value: function onActivate(model, index) {
            var type = model.type,
                event = model.event,
                row = model.row;
            var chkbox = this.selectionType === SelectionType.checkbox;
            var select = !chkbox && (type === 'click' || type === 'dblclick') || chkbox && type === 'checkbox';

            if (select) {
              this.selectRow(event, index, row);
            } else if (type === 'keydown') {
              if (event.keyCode === Keys["return"]) {
                this.selectRow(event, index, row);
              } else {
                this.onKeyboardFocus(model);
              }
            }

            this.activate.emit(model);
          }
        }, {
          key: "onKeyboardFocus",
          value: function onKeyboardFocus(model) {
            var keyCode = model.event.keyCode;
            var shouldFocus = keyCode === Keys.up || keyCode === Keys.down || keyCode === Keys.right || keyCode === Keys.left;

            if (shouldFocus) {
              var isCellSelection = this.selectionType === SelectionType.cell;

              if (!model.cellElement || !isCellSelection) {
                this.focusRow(model.rowElement, keyCode);
              } else if (isCellSelection) {
                this.focusCell(model.cellElement, model.rowElement, keyCode, model.cellIndex);
              }
            }
          }
        }, {
          key: "focusRow",
          value: function focusRow(rowElement, keyCode) {
            var nextRowElement = this.getPrevNextRow(rowElement, keyCode);
            if (nextRowElement) nextRowElement.focus();
          }
        }, {
          key: "getPrevNextRow",
          value: function getPrevNextRow(rowElement, keyCode) {
            var parentElement = rowElement.parentElement;

            if (parentElement) {
              var focusElement;

              if (keyCode === Keys.up) {
                focusElement = parentElement.previousElementSibling;
              } else if (keyCode === Keys.down) {
                focusElement = parentElement.nextElementSibling;
              }

              if (focusElement && focusElement.children.length) {
                return focusElement.children[0];
              }
            }
          }
        }, {
          key: "focusCell",
          value: function focusCell(cellElement, rowElement, keyCode, cellIndex) {
            var nextCellElement;

            if (keyCode === Keys.left) {
              nextCellElement = cellElement.previousElementSibling;
            } else if (keyCode === Keys.right) {
              nextCellElement = cellElement.nextElementSibling;
            } else if (keyCode === Keys.up || keyCode === Keys.down) {
              var nextRowElement = this.getPrevNextRow(rowElement, keyCode);

              if (nextRowElement) {
                var children = nextRowElement.getElementsByClassName('datatable-body-cell');
                if (children.length) nextCellElement = children[cellIndex];
              }
            }

            if (nextCellElement) nextCellElement.focus();
          }
        }, {
          key: "getRowSelected",
          value: function getRowSelected(row) {
            return this.getRowSelectedIdx(row, this.selected) > -1;
          }
        }, {
          key: "getRowSelectedIdx",
          value: function getRowSelectedIdx(row, selected) {
            var _this810 = this;

            if (!selected || !selected.length) return -1;
            var rowId = this.rowIdentity(row);
            return selected.findIndex(function (r) {
              var id = _this810.rowIdentity(r);

              return id === rowId;
            });
          }
        }]);

        return DataTableSelectionComponent;
      }();

      DataTableSelectionComponent.ɵfac = function DataTableSelectionComponent_Factory(t) {
        return new (t || DataTableSelectionComponent)();
      };

      DataTableSelectionComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: DataTableSelectionComponent,
        selectors: [["datatable-selection"]],
        inputs: {
          rows: "rows",
          selected: "selected",
          selectEnabled: "selectEnabled",
          selectionType: "selectionType",
          rowIdentity: "rowIdentity",
          selectCheck: "selectCheck"
        },
        outputs: {
          activate: "activate",
          select: "select"
        },
        ngContentSelectors: _c0,
        decls: 1,
        vars: 0,
        template: function DataTableSelectionComponent_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojectionDef"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵprojection"](0);
          }
        },
        encapsulation: 2,
        changeDetection: 0
      });
      DataTableSelectionComponent.propDecorators = {
        rows: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        selected: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        selectEnabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        selectionType: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        rowIdentity: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        selectCheck: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        activate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }],
        select: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DataTableSelectionComponent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'datatable-selection',
            template: " <ng-content></ng-content> ",
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectionStrategy"].OnPush
          }]
        }], function () {
          return [];
        }, {
          activate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          select: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
          }],
          rows: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          selected: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          selectEnabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          selectionType: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          rowIdentity: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          selectCheck: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      function defaultSumFunc(cells) {
        var cellsWithValues = cells.filter(function (cell) {
          return !!cell;
        });

        if (!cellsWithValues.length) {
          return null;
        }

        if (cellsWithValues.some(function (cell) {
          return typeof cell !== 'number';
        })) {
          return null;
        }

        return cellsWithValues.reduce(function (res, cell) {
          return res + cell;
        });
      }

      function noopSumFunc(cells) {
        return null;
      }

      var DataTableSummaryRowComponent = /*#__PURE__*/function () {
        function DataTableSummaryRowComponent() {
          _classCallCheck2(this, DataTableSummaryRowComponent);

          this.summaryRow = {};
        }

        _createClass2(DataTableSummaryRowComponent, [{
          key: "ngOnChanges",
          value: function ngOnChanges() {
            if (!this.columns || !this.rows) {
              return;
            }

            this.updateInternalColumns();
            this.updateValues();
          }
        }, {
          key: "updateInternalColumns",
          value: function updateInternalColumns() {
            this._internalColumns = this.columns.map(function (col) {
              return Object.assign(Object.assign({}, col), {
                cellTemplate: col.summaryTemplate
              });
            });
          }
        }, {
          key: "updateValues",
          value: function updateValues() {
            var _this811 = this;

            this.summaryRow = {};
            this.columns.filter(function (col) {
              return !col.summaryTemplate;
            }).forEach(function (col) {
              var cellsFromSingleColumn = _this811.rows.map(function (row) {
                return row[col.prop];
              });

              var sumFunc = _this811.getSummaryFunction(col);

              _this811.summaryRow[col.prop] = col.pipe ? col.pipe.transform(sumFunc(cellsFromSingleColumn)) : sumFunc(cellsFromSingleColumn);
            });
          }
        }, {
          key: "getSummaryFunction",
          value: function getSummaryFunction(column) {
            if (column.summaryFunc === undefined) {
              return defaultSumFunc;
            } else if (column.summaryFunc === null) {
              return noopSumFunc;
            } else {
              return column.summaryFunc;
            }
          }
        }]);

        return DataTableSummaryRowComponent;
      }();

      DataTableSummaryRowComponent.ɵfac = function DataTableSummaryRowComponent_Factory(t) {
        return new (t || DataTableSummaryRowComponent)();
      };

      DataTableSummaryRowComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
        type: DataTableSummaryRowComponent,
        selectors: [["datatable-summary-row"]],
        hostAttrs: [1, "datatable-summary-row"],
        inputs: {
          rows: "rows",
          columns: "columns",
          rowHeight: "rowHeight",
          offsetX: "offsetX",
          innerWidth: "innerWidth"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]],
        decls: 1,
        vars: 1,
        consts: [["tabindex", "-1", 3, "innerWidth", "offsetX", "columns", "rowHeight", "row", "rowIndex", 4, "ngIf"], ["tabindex", "-1", 3, "innerWidth", "offsetX", "columns", "rowHeight", "row", "rowIndex"]],
        template: function DataTableSummaryRowComponent_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, DataTableSummaryRowComponent_datatable_body_row_0_Template, 1, 6, "datatable-body-row", 0);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.summaryRow && ctx._internalColumns);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["NgIf"], DataTableBodyRowComponent],
        encapsulation: 2
      });
      DataTableSummaryRowComponent.propDecorators = {
        rows: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        columns: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        rowHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        offsetX: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        innerWidth: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DataTableSummaryRowComponent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
          args: [{
            selector: 'datatable-summary-row',
            template: "\n    <datatable-body-row\n      *ngIf=\"summaryRow && _internalColumns\"\n      tabindex=\"-1\"\n      [innerWidth]=\"innerWidth\"\n      [offsetX]=\"offsetX\"\n      [columns]=\"_internalColumns\"\n      [rowHeight]=\"rowHeight\"\n      [row]=\"summaryRow\"\n      [rowIndex]=\"-1\"\n    >\n    </datatable-body-row>\n  ",
            host: {
              "class": 'datatable-summary-row'
            }
          }]
        }], function () {
          return [];
        }, {
          rows: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          columns: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          rowHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          offsetX: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          innerWidth: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var NgxDatatableModule = /*#__PURE__*/function () {
        function NgxDatatableModule() {
          _classCallCheck2(this, NgxDatatableModule);
        }

        _createClass2(NgxDatatableModule, null, [{
          key: "forRoot",
          value:
          /**
           * Configure global configuration via INgxDatatableConfig
           * @param configuration
           */
          function forRoot(configuration) {
            return {
              ngModule: NgxDatatableModule,
              providers: [{
                provide: 'configuration',
                useValue: configuration
              }]
            };
          }
        }]);

        return NgxDatatableModule;
      }();

      NgxDatatableModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: NgxDatatableModule
      });
      NgxDatatableModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function NgxDatatableModule_Factory(t) {
          return new (t || NgxDatatableModule)();
        },
        providers: [ScrollbarHelper, DimensionsHelper, ColumnChangesService],
        imports: [[_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NgxDatatableModule, {
          declarations: function declarations() {
            return [DataTableFooterTemplateDirective, VisibilityDirective, DraggableDirective, ResizeableDirective, OrderableDirective, LongPressDirective, ScrollerComponent, DatatableComponent, DataTableColumnDirective, DataTableHeaderComponent, DataTableHeaderCellComponent, DataTableBodyComponent, DataTableFooterComponent, DataTablePagerComponent, ProgressBarComponent, DataTableBodyRowComponent, DataTableRowWrapperComponent, DatatableRowDetailDirective, DatatableGroupHeaderDirective, DatatableRowDetailTemplateDirective, DataTableBodyCellComponent, DataTableSelectionComponent, DataTableColumnHeaderDirective, DataTableColumnCellDirective, DataTableColumnCellTreeToggle, DatatableFooterDirective, DatatableGroupHeaderTemplateDirective, DataTableSummaryRowComponent];
          },
          imports: function imports() {
            return [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]];
          },
          exports: function exports() {
            return [DatatableComponent, DatatableRowDetailDirective, DatatableGroupHeaderDirective, DatatableRowDetailTemplateDirective, DataTableColumnDirective, DataTableColumnHeaderDirective, DataTableColumnCellDirective, DataTableColumnCellTreeToggle, DataTableFooterTemplateDirective, DatatableFooterDirective, DataTablePagerComponent, DatatableGroupHeaderTemplateDirective];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgxDatatableModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            imports: [_angular_common__WEBPACK_IMPORTED_MODULE_1__["CommonModule"]],
            providers: [ScrollbarHelper, DimensionsHelper, ColumnChangesService],
            declarations: [DataTableFooterTemplateDirective, VisibilityDirective, DraggableDirective, ResizeableDirective, OrderableDirective, LongPressDirective, ScrollerComponent, DatatableComponent, DataTableColumnDirective, DataTableHeaderComponent, DataTableHeaderCellComponent, DataTableBodyComponent, DataTableFooterComponent, DataTablePagerComponent, ProgressBarComponent, DataTableBodyRowComponent, DataTableRowWrapperComponent, DatatableRowDetailDirective, DatatableGroupHeaderDirective, DatatableRowDetailTemplateDirective, DataTableBodyCellComponent, DataTableSelectionComponent, DataTableColumnHeaderDirective, DataTableColumnCellDirective, DataTableColumnCellTreeToggle, DatatableFooterDirective, DatatableGroupHeaderTemplateDirective, DataTableSummaryRowComponent],
            exports: [DatatableComponent, DatatableRowDetailDirective, DatatableGroupHeaderDirective, DatatableRowDetailTemplateDirective, DataTableColumnDirective, DataTableColumnHeaderDirective, DataTableColumnCellDirective, DataTableColumnCellTreeToggle, DataTableFooterTemplateDirective, DatatableFooterDirective, DataTablePagerComponent, DatatableGroupHeaderTemplateDirective]
          }]
        }], null, null);
      })();

      var ClickType;

      (function (ClickType) {
        ClickType["single"] = "single";
        ClickType["double"] = "double";
      })(ClickType || (ClickType = {}));

      if (typeof document !== 'undefined' && !document.elementsFromPoint) {
        document.elementsFromPoint = elementsFromPoint;
      }
      /*tslint:disable*/

      /**
       * Polyfill for `elementsFromPoint`
       *
       * https://developer.mozilla.org/en-US/docs/Web/API/Document/elementsFromPoint
       * https://gist.github.com/iddan/54d5d9e58311b0495a91bf06de661380
       * https://gist.github.com/oslego/7265412
       */


      function elementsFromPoint(x, y) {
        var elements = [];
        var previousPointerEvents = [];
        var current; // TODO: window.getComputedStyle should be used with inferred type (Element)

        var i;
        var d; //if (document === undefined) return elements;
        // get all elements via elementFromPoint, and remove them from hit-testing in order

        while ((current = document.elementFromPoint(x, y)) && elements.indexOf(current) === -1 && current != null) {
          // push the element and its current style
          elements.push(current);
          previousPointerEvents.push({
            value: current.style.getPropertyValue('pointer-events'),
            priority: current.style.getPropertyPriority('pointer-events')
          }); // add "pointer-events: none", to get to the underlying element

          current.style.setProperty('pointer-events', 'none', 'important');
        } // restore the previous pointer-events values


        for (i = previousPointerEvents.length; d = previousPointerEvents[--i];) {
          elements[i].style.setProperty('pointer-events', d.value ? d.value : '', d.priority);
        } // return our results


        return elements;
      }
      /*tslint:enable*/

      /*
       * Public API Surface of ngx-datatable
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=swimlane-ngx-datatable.js.map

      /***/

    },

    /***/
    "lJxs":
    /*!**************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/map.js ***!
      \**************************************************************/

    /*! exports provided: map, MapOperator */

    /***/
    function lJxs(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "map", function () {
        return map;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MapOperator", function () {
        return MapOperator;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");

      function map(project, thisArg) {
        return function mapOperation(source) {
          if (typeof project !== 'function') {
            throw new TypeError('argument is not a function. Are you looking for `mapTo()`?');
          }

          return source.lift(new MapOperator(project, thisArg));
        };
      }

      var MapOperator = /*#__PURE__*/function () {
        function MapOperator(project, thisArg) {
          _classCallCheck2(this, MapOperator);

          this.project = project;
          this.thisArg = thisArg;
        }

        _createClass2(MapOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new MapSubscriber(subscriber, this.project, this.thisArg));
          }
        }]);

        return MapOperator;
      }();

      var MapSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_37) {
        _inherits2(MapSubscriber, _Subscriber__WEBPACK_37);

        var _super344 = _createSuper(MapSubscriber);

        function MapSubscriber(destination, project, thisArg) {
          var _this812;

          _classCallCheck2(this, MapSubscriber);

          _this812 = _super344.call(this, destination);
          _this812.project = project;
          _this812.count = 0;
          _this812.thisArg = thisArg || _assertThisInitialized2(_this812);
          return _this812;
        }

        _createClass2(MapSubscriber, [{
          key: "_next",
          value: function _next(value) {
            var result;

            try {
              result = this.project.call(this.thisArg, value, this.count++);
            } catch (err) {
              this.destination.error(err);
              return;
            }

            this.destination.next(result);
          }
        }]);

        return MapSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=map.js.map

      /***/

    },

    /***/
    "lKDQ":
    /*!*********************************************************!*\
      !*** ./node_modules/aws-sdk/clients/cognitoidentity.js ***!
      \*********************************************************/

    /*! no static exports found */

    /***/
    function lKDQ(module, exports, __webpack_require__) {
      __webpack_require__(
      /*! ../lib/node_loader */
      "md97");

      var AWS = __webpack_require__(
      /*! ../lib/core */
      "QsWE");

      var Service = AWS.Service;
      var apiLoader = AWS.apiLoader;
      apiLoader.services['cognitoidentity'] = {};
      AWS.CognitoIdentity = Service.defineService('cognitoidentity', ['2014-06-30']);
      Object.defineProperty(apiLoader.services['cognitoidentity'], '2014-06-30', {
        get: function get() {
          var model = __webpack_require__(
          /*! ../apis/cognito-identity-2014-06-30.min.json */
          "0JXb");

          model.paginators = __webpack_require__(
          /*! ../apis/cognito-identity-2014-06-30.paginators.json */
          "Ppu6").pagination;
          return model;
        },
        enumerable: true,
        configurable: true
      });
      module.exports = AWS.CognitoIdentity;
      /***/
    },

    /***/
    "lSFX":
    /*!******************************************************!*\
      !*** ./node_modules/aws-sdk/lib/protocol/helpers.js ***!
      \******************************************************/

    /*! no static exports found */

    /***/
    function lSFX(module, exports, __webpack_require__) {
      var util = __webpack_require__(
      /*! ../util */
      "BaN1");

      var AWS = __webpack_require__(
      /*! ../core */
      "QsWE");
      /**
       * Prepend prefix defined by API model to endpoint that's already
       * constructed. This feature does not apply to operations using
       * endpoint discovery and can be disabled.
       * @api private
       */


      function populateHostPrefix(request) {
        var enabled = request.service.config.hostPrefixEnabled;
        if (!enabled) return request;
        var operationModel = request.service.api.operations[request.operation]; //don't marshal host prefix when operation has endpoint discovery traits

        if (hasEndpointDiscover(request)) return request;

        if (operationModel.endpoint && operationModel.endpoint.hostPrefix) {
          var hostPrefixNotation = operationModel.endpoint.hostPrefix;
          var hostPrefix = expandHostPrefix(hostPrefixNotation, request.params, operationModel.input);
          prependEndpointPrefix(request.httpRequest.endpoint, hostPrefix);
          validateHostname(request.httpRequest.endpoint.hostname);
        }

        return request;
      }
      /**
       * @api private
       */


      function hasEndpointDiscover(request) {
        var api = request.service.api;
        var operationModel = api.operations[request.operation];
        var isEndpointOperation = api.endpointOperation && api.endpointOperation === util.string.lowerFirst(operationModel.name);
        return operationModel.endpointDiscoveryRequired !== 'NULL' || isEndpointOperation === true;
      }
      /**
       * @api private
       */


      function expandHostPrefix(hostPrefixNotation, params, shape) {
        util.each(shape.members, function (name, member) {
          if (member.hostLabel === true) {
            if (typeof params[name] !== 'string' || params[name] === '') {
              throw util.error(new Error(), {
                message: 'Parameter ' + name + ' should be a non-empty string.',
                code: 'InvalidParameter'
              });
            }

            var regex = new RegExp('\\{' + name + '\\}', 'g');
            hostPrefixNotation = hostPrefixNotation.replace(regex, params[name]);
          }
        });
        return hostPrefixNotation;
      }
      /**
       * @api private
       */


      function prependEndpointPrefix(endpoint, prefix) {
        if (endpoint.host) {
          endpoint.host = prefix + endpoint.host;
        }

        if (endpoint.hostname) {
          endpoint.hostname = prefix + endpoint.hostname;
        }
      }
      /**
       * @api private
       */


      function validateHostname(hostname) {
        var labels = hostname.split('.'); //Reference: https://tools.ietf.org/html/rfc1123#section-2

        var hostPattern = /^[a-zA-Z0-9]{1}$|^[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9]$/;
        util.arrayEach(labels, function (label) {
          if (!label.length || label.length < 1 || label.length > 63) {
            throw util.error(new Error(), {
              code: 'ValidationError',
              message: 'Hostname label length should be between 1 to 63 characters, inclusive.'
            });
          }

          if (!hostPattern.test(label)) {
            throw AWS.util.error(new Error(), {
              code: 'ValidationError',
              message: label + ' is not hostname compatible.'
            });
          }
        });
      }

      module.exports = {
        populateHostPrefix: populateHostPrefix
      };
      /***/
    },

    /***/
    "lUod":
    /*!***************************************************************************************!*\
      !*** ./node_modules/ngx-bootstrap/__ivy_ngcc__/utils/fesm2015/ngx-bootstrap-utils.js ***!
      \***************************************************************************************/

    /*! exports provided: LinkedList, OnChange, Trigger, Utils, document, isBs3, listenToTriggers, listenToTriggersV2, parseTriggers, registerEscClick, registerOutsideClick, setTheme, warnOnce, window */

    /***/
    function lUod(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LinkedList", function () {
        return LinkedList;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OnChange", function () {
        return OnChange;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Trigger", function () {
        return Trigger;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Utils", function () {
        return Utils;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "document", function () {
        return document$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isBs3", function () {
        return isBs3;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "listenToTriggers", function () {
        return listenToTriggers;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "listenToTriggersV2", function () {
        return listenToTriggersV2;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "parseTriggers", function () {
        return parseTriggers;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "registerEscClick", function () {
        return registerEscClick;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "registerOutsideClick", function () {
        return registerOutsideClick;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "setTheme", function () {
        return setTheme;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "warnOnce", function () {
        return warnOnce;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "window", function () {
        return win;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @copyright Valor Software
       * @copyright Angular ng-bootstrap team
       */


      var Trigger = /*#__PURE__*/function () {
        /**
         * @param {?} open
         * @param {?=} close
         */
        function Trigger(open, close) {
          _classCallCheck2(this, Trigger);

          this.open = open;
          this.close = close || open;
        }
        /**
         * @return {?}
         */


        _createClass2(Trigger, [{
          key: "isManual",
          value: function isManual() {
            return this.open === 'manual' || this.close === 'manual';
          }
        }]);

        return Trigger;
      }();

      if (false) {}
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @record
       */


      function ListenOptions() {}

      if (false) {}
      /** @type {?} */


      var DEFAULT_ALIASES = {
        hover: ['mouseover', 'mouseout'],
        focus: ['focusin', 'focusout']
      };
      /* tslint:disable-next-line: no-any */

      /**
       * @param {?} triggers
       * @param {?=} aliases
       * @return {?}
       */

      function parseTriggers(triggers) {
        var aliases = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_ALIASES;

        /** @type {?} */
        var trimmedTriggers = (triggers || '').trim();

        if (trimmedTriggers.length === 0) {
          return [];
        }
        /** @type {?} */


        var parsedTriggers = trimmedTriggers.split(/\s+/).map(
        /**
        * @param {?} trigger
        * @return {?}
        */
        function (trigger) {
          return trigger.split(':');
        }).map(
        /**
        * @param {?} triggerPair
        * @return {?}
        */
        function (triggerPair) {
          /** @type {?} */
          var alias = aliases[triggerPair[0]] || triggerPair;
          return new Trigger(alias[0], alias[1]);
        });
        /** @type {?} */

        var manualTriggers = parsedTriggers.filter(
        /**
        * @param {?} triggerPair
        * @return {?}
        */
        function (triggerPair) {
          return triggerPair.isManual();
        });

        if (manualTriggers.length > 1) {
          throw new Error('Triggers parse error: only one manual trigger is allowed');
        }

        if (manualTriggers.length === 1 && parsedTriggers.length > 1) {
          throw new Error('Triggers parse error: manual trigger can\'t be mixed with other triggers');
        }

        return parsedTriggers;
      }
      /**
       * @param {?} renderer
       * @param {?} target
       * @param {?} triggers
       * @param {?} showFn
       * @param {?} hideFn
       * @param {?} toggleFn
       * @return {?}
       */


      function listenToTriggers(renderer,
      /* tslint:disable-next-line: no-any */
      target, triggers, showFn, hideFn, toggleFn) {
        /** @type {?} */
        var parsedTriggers = parseTriggers(triggers);
        /* tslint:disable-next-line: no-any */

        /** @type {?} */

        var listeners = [];

        if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) {
          return Function.prototype;
        }

        parsedTriggers.forEach(
        /**
        * @param {?} trigger
        * @return {?}
        */
        function (trigger) {
          if (trigger.open === trigger.close) {
            listeners.push(renderer.listen(target, trigger.open, toggleFn));
            return;
          }

          listeners.push(renderer.listen(target, trigger.open, showFn), renderer.listen(target, trigger.close, hideFn));
        });
        return (
          /**
          * @return {?}
          */
          function () {
            listeners.forEach(
            /**
            * @param {?} unsubscribeFn
            * @return {?}
            */
            function (unsubscribeFn) {
              return unsubscribeFn();
            });
          }
        );
      }
      /**
       * @param {?} renderer
       * @param {?} options
       * @return {?}
       */


      function listenToTriggersV2(renderer, options) {
        /** @type {?} */
        var parsedTriggers = parseTriggers(options.triggers);
        /** @type {?} */

        var target = options.target; // do nothing

        if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) {
          return Function.prototype;
        } // all listeners

        /* tslint:disable-next-line: no-any */

        /** @type {?} */


        var listeners = []; // lazy listeners registration

        /** @type {?} */

        var _registerHide = [];
        /** @type {?} */

        var registerHide =
        /**
        * @return {?}
        */
        function registerHide() {
          // add hide listeners to unregister array
          _registerHide.forEach(
          /**
          * @param {?} fn
          * @return {?}
          */
          function (fn) {
            return listeners.push(fn());
          }); // register hide events only once


          _registerHide.length = 0;
        }; // register open\close\toggle listeners


        parsedTriggers.forEach(
        /**
        * @param {?} trigger
        * @return {?}
        */
        function (trigger) {
          /** @type {?} */
          var useToggle = trigger.open === trigger.close;
          /** @type {?} */

          var showFn = useToggle ? options.toggle : options.show;

          if (!useToggle) {
            _registerHide.push(
            /**
            * @return {?}
            */
            function () {
              return renderer.listen(target, trigger.close, options.hide);
            });
          }

          listeners.push(renderer.listen(target, trigger.open,
          /**
          * @return {?}
          */
          function () {
            return showFn(registerHide);
          }));
        });
        return (
          /**
          * @return {?}
          */
          function () {
            listeners.forEach(
            /**
            * @param {?} unsubscribeFn
            * @return {?}
            */
            function (unsubscribeFn) {
              return unsubscribeFn();
            });
          }
        );
      }
      /**
       * @param {?} renderer
       * @param {?} options
       * @return {?}
       */


      function registerOutsideClick(renderer, options) {
        if (!options.outsideClick) {
          return Function.prototype;
        }
        /* tslint:disable-next-line: no-any */


        return renderer.listen('document', 'click',
        /**
        * @param {?} event
        * @return {?}
        */
        function (event) {
          if (options.target && options.target.contains(event.target)) {
            return undefined;
          }

          if (options.targets && options.targets.some(
          /**
          * @param {?} target
          * @return {?}
          */
          function (target) {
            return target.contains(event.target);
          })) {
            return undefined;
          }

          options.hide();
        });
      }
      /**
       * @param {?} renderer
       * @param {?} options
       * @return {?}
       */


      function registerEscClick(renderer, options) {
        if (!options.outsideEsc) {
          return Function.prototype;
        }

        return renderer.listen('document', 'keyup.esc',
        /**
        * @param {?} event
        * @return {?}
        */
        function (event) {
          if (options.target && options.target.contains(event.target)) {
            return undefined;
          }

          if (options.targets && options.targets.some(
          /**
          * @param {?} target
          * @return {?}
          */
          function (target) {
            return target.contains(event.target);
          })) {
            return undefined;
          }

          options.hide();
        });
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @license
       * Copyright Google Inc. All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * JS version of browser APIs. This library can only run in the browser.
       * @type {?}
       */


      var win = typeof window !== 'undefined' && window ||
      /** @type {?} */
      {};
      /** @type {?} */

      var document$1 = win.document;
      /** @type {?} */

      var location = win.location;
      /** @type {?} */

      var gc = win.gc ?
      /**
      * @return {?}
      */
      function () {
        return win.gc();
      } :
      /**
      * @return {?}
      */
      function () {
        return null;
      };
      /** @type {?} */

      var performance = win.performance ? win.performance : null;
      /** @type {?} */

      var Event = win.Event;
      /** @type {?} */

      var MouseEvent = win.MouseEvent;
      /** @type {?} */

      var KeyboardEvent = win.KeyboardEvent;
      /** @type {?} */

      var EventTarget = win.EventTarget;
      /** @type {?} */

      var History = win.History;
      /** @type {?} */

      var Location = win.Location;
      /** @type {?} */

      var EventListener = win.EventListener;
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /** @type {?} */

      var guessedVersion;
      /**
       * @return {?}
       */

      function _guessBsVersion() {
        if (typeof document === 'undefined') {
          return null;
        }
        /** @type {?} */


        var spanEl = document.createElement('span');
        spanEl.innerText = 'test bs version';
        document.body.appendChild(spanEl);
        spanEl.classList.add('d-none');
        /** @type {?} */

        var rect = spanEl.getBoundingClientRect();
        document.body.removeChild(spanEl);

        if (!rect) {
          return 'bs3';
        }

        return rect.top === 0 ? 'bs4' : 'bs3';
      }
      /**
       * @param {?} theme
       * @return {?}
       */


      function setTheme(theme) {
        guessedVersion = theme;
      } // todo: in ngx-bootstrap, bs4 will became a default one

      /**
       * @return {?}
       */


      function isBs3() {
        if (typeof win === 'undefined') {
          return true;
        }

        if (typeof win.__theme === 'undefined') {
          if (guessedVersion) {
            return guessedVersion === 'bs3';
          }

          guessedVersion = _guessBsVersion();
          return guessedVersion === 'bs3';
        }

        return win.__theme !== 'bs4';
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @template T
       */


      var LinkedList = /*#__PURE__*/function () {
        function LinkedList() {
          _classCallCheck2(this, LinkedList);

          this.length = 0;
          this.asArray = []; // Array methods overriding END
        }
        /**
         * @param {?} position
         * @return {?}
         */


        _createClass2(LinkedList, [{
          key: "get",
          value: function get(position) {
            if (this.length === 0 || position < 0 || position >= this.length) {
              return void 0;
            }
            /** @type {?} */


            var current = this.head;

            for (var index = 0; index < position; index++) {
              current = current.next;
            }

            return current.value;
          }
          /**
           * @param {?} value
           * @param {?=} position
           * @return {?}
           */

        }, {
          key: "add",
          value: function add(value) {
            var position = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.length;

            if (position < 0 || position > this.length) {
              throw new Error('Position is out of the list');
            }
            /* tslint:disable-next-line: no-any*/

            /** @type {?} */


            var node = {
              value: value,
              next: undefined,
              previous: undefined
            };

            if (this.length === 0) {
              this.head = node;
              this.tail = node;
              this.current = node;
            } else {
              if (position === 0) {
                // first node
                node.next = this.head;
                this.head.previous = node;
                this.head = node;
              } else if (position === this.length) {
                // last node
                this.tail.next = node;
                node.previous = this.tail;
                this.tail = node;
              } else {
                // node in middle

                /** @type {?} */
                var currentPreviousNode = this.getNode(position - 1);
                /** @type {?} */

                var currentNextNode = currentPreviousNode.next;
                currentPreviousNode.next = node;
                currentNextNode.previous = node;
                node.previous = currentPreviousNode;
                node.next = currentNextNode;
              }
            }

            this.length++;
            this.createInternalArrayRepresentation();
          }
          /**
           * @param {?=} position
           * @return {?}
           */

        }, {
          key: "remove",
          value: function remove() {
            var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;

            if (this.length === 0 || position < 0 || position >= this.length) {
              throw new Error('Position is out of the list');
            }

            if (position === 0) {
              // first node
              this.head = this.head.next;

              if (this.head) {
                // there is no second node
                this.head.previous = undefined;
              } else {
                // there is no second node
                this.tail = undefined;
              }
            } else if (position === this.length - 1) {
              // last node
              this.tail = this.tail.previous;
              this.tail.next = undefined;
            } else {
              // middle node

              /** @type {?} */
              var removedNode = this.getNode(position);
              removedNode.next.previous = removedNode.previous;
              removedNode.previous.next = removedNode.next;
            }

            this.length--;
            this.createInternalArrayRepresentation();
          }
          /**
           * @param {?} position
           * @param {?} value
           * @return {?}
           */

        }, {
          key: "set",
          value: function set(position, value) {
            if (this.length === 0 || position < 0 || position >= this.length) {
              throw new Error('Position is out of the list');
            }
            /** @type {?} */


            var node = this.getNode(position);
            node.value = value;
            this.createInternalArrayRepresentation();
          }
          /**
           * @return {?}
           */

        }, {
          key: "toArray",
          value: function toArray() {
            return this.asArray;
          }
          /* tslint:disable-next-line: no-any*/

          /**
           * @param {?} fn
           * @return {?}
           */

        }, {
          key: "findAll",
          value: function findAll(fn) {
            /** @type {?} */
            var current = this.head;
            /* tslint:disable-next-line: no-any*/

            /** @type {?} */

            var result = [];

            for (var index = 0; index < this.length; index++) {
              if (fn(current.value, index)) {
                result.push({
                  index: index,
                  value: current.value
                });
              }

              current = current.next;
            }

            return result;
          } // Array methods overriding start

          /**
           * @param {...?} args
           * @return {?}
           */

        }, {
          key: "push",
          value: function push() {
            var _this813 = this;

            for (var _len58 = arguments.length, args = new Array(_len58), _key60 = 0; _key60 < _len58; _key60++) {
              args[_key60] = arguments[_key60];
            }

            /* tslint:disable-next-line: no-any*/
            args.forEach(
            /**
            * @param {?} arg
            * @return {?}
            */
            function (arg) {
              _this813.add(arg);
            });
            return this.length;
          }
          /**
           * @return {?}
           */

        }, {
          key: "pop",
          value: function pop() {
            if (this.length === 0) {
              return undefined;
            }
            /** @type {?} */


            var last = this.tail;
            this.remove(this.length - 1);
            return last.value;
          }
          /**
           * @param {...?} args
           * @return {?}
           */

        }, {
          key: "unshift",
          value: function unshift() {
            var _this814 = this;

            for (var _len59 = arguments.length, args = new Array(_len59), _key61 = 0; _key61 < _len59; _key61++) {
              args[_key61] = arguments[_key61];
            }

            args.reverse();
            /* tslint:disable-next-line: no-any*/

            args.forEach(
            /**
            * @param {?} arg
            * @return {?}
            */
            function (arg) {
              _this814.add(arg, 0);
            });
            return this.length;
          }
          /**
           * @return {?}
           */

        }, {
          key: "shift",
          value: function shift() {
            if (this.length === 0) {
              return undefined;
            }
            /** @type {?} */


            var lastItem = this.head.value;
            this.remove();
            return lastItem;
          }
          /* tslint:disable-next-line: no-any*/

          /**
           * @param {?} fn
           * @return {?}
           */

        }, {
          key: "forEach",
          value: function forEach(fn) {
            /** @type {?} */
            var current = this.head;

            for (var index = 0; index < this.length; index++) {
              fn(current.value, index);
              current = current.next;
            }
          }
          /**
           * @param {?} value
           * @return {?}
           */

        }, {
          key: "indexOf",
          value: function indexOf(value) {
            /** @type {?} */
            var current = this.head;
            /** @type {?} */

            var position = 0;

            for (var index = 0; index < this.length; index++) {
              if (current.value === value) {
                position = index;
                break;
              }

              current = current.next;
            }

            return position;
          }
          /* tslint:disable-next-line: no-any*/

          /**
           * @param {?} fn
           * @return {?}
           */

        }, {
          key: "some",
          value: function some(fn) {
            /** @type {?} */
            var current = this.head;
            /** @type {?} */

            var result = false;

            while (current && !result) {
              if (fn(current.value)) {
                result = true;
                break;
              }

              current = current.next;
            }

            return result;
          }
          /* tslint:disable-next-line: no-any*/

          /**
           * @param {?} fn
           * @return {?}
           */

        }, {
          key: "every",
          value: function every(fn) {
            /** @type {?} */
            var current = this.head;
            /** @type {?} */

            var result = true;

            while (current && result) {
              if (!fn(current.value)) {
                result = false;
              }

              current = current.next;
            }

            return result;
          }
          /**
           * @return {?}
           */

        }, {
          key: "toString",
          value: function toString() {
            return '[Linked List]';
          }
          /* tslint:disable-next-line: no-any*/

          /**
           * @param {?} fn
           * @return {?}
           */

        }, {
          key: "find",
          value: function find(fn) {
            /** @type {?} */
            var current = this.head;
            /** @type {?} */

            var result;

            for (var index = 0; index < this.length; index++) {
              if (fn(current.value, index)) {
                result = current.value;
                break;
              }

              current = current.next;
            }

            return result;
          }
          /* tslint:disable-next-line: no-any*/

          /**
           * @param {?} fn
           * @return {?}
           */

        }, {
          key: "findIndex",
          value: function findIndex(fn) {
            /** @type {?} */
            var current = this.head;
            /** @type {?} */

            var result;

            for (var index = 0; index < this.length; index++) {
              if (fn(current.value, index)) {
                result = index;
                break;
              }

              current = current.next;
            }

            return result;
          }
          /* tslint:disable-next-line: no-any*/

          /**
           * @protected
           * @param {?} position
           * @return {?}
           */

        }, {
          key: "getNode",
          value: function getNode(position) {
            if (this.length === 0 || position < 0 || position >= this.length) {
              throw new Error('Position is out of the list');
            }
            /** @type {?} */


            var current = this.head;

            for (var index = 0; index < position; index++) {
              current = current.next;
            }

            return current;
          }
          /**
           * @protected
           * @return {?}
           */

        }, {
          key: "createInternalArrayRepresentation",
          value: function createInternalArrayRepresentation() {
            /* tslint:disable-next-line: no-any*/

            /** @type {?} */
            var outArray = [];
            /** @type {?} */

            var current = this.head;

            while (current) {
              outArray.push(current.value);
              current = current.next;
            }

            this.asArray = outArray;
          }
        }]);

        return LinkedList;
      }();

      if (false) {}
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /*tslint:disable:no-invalid-this */

      /* tslint:disable-next-line: no-any */

      /**
       * @param {?=} defaultValue
       * @return {?}
       */


      function OnChange(defaultValue) {
        /** @type {?} */
        var sufix = 'Change';
        /* tslint:disable-next-line: no-any */

        return (
          /**
          * @param {?} target
          * @param {?} propertyKey
          * @return {?}
          */
          function OnChangeHandler(target, propertyKey) {
            /** @type {?} */
            var _key = " __".concat(propertyKey, "Value");

            Object.defineProperty(target, propertyKey, {
              /* tslint:disable-next-line: no-any */

              /**
               * @return {?}
               */
              get: function get() {
                return this[_key];
              },

              /* tslint:disable-next-line: no-any */

              /**
               * @param {?} value
               * @return {?}
               */
              set: function set(value) {
                /** @type {?} */
                var prevValue = this[_key];
                this[_key] = value;

                if (prevValue !== value && this[propertyKey + sufix]) {
                  this[propertyKey + sufix].emit(value);
                }
              }
            });
          }
        );
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var Utils = /*#__PURE__*/function () {
        function Utils() {
          _classCallCheck2(this, Utils);
        }

        _createClass2(Utils, null, [{
          key: "reflow",
          value:
          /* tslint:disable-next-line: no-any */

          /**
           * @param {?} element
           * @return {?}
           */
          function reflow(element) {
            /* tslint:disable-next-line: no-any */
            (
            /**
            * @param {?} bs
            * @return {?}
            */
            function (bs) {
              return bs;
            })(element.offsetHeight);
          } // source: https://github.com/jquery/jquery/blob/master/src/css/var/getStyles.js

          /* tslint:disable-next-line: no-any */

          /**
           * @param {?} elem
           * @return {?}
           */

        }, {
          key: "getStyles",
          value: function getStyles(elem) {
            // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
            // IE throws on elements created in popups
            // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"

            /** @type {?} */
            var view = elem.ownerDocument.defaultView;

            if (!view || !view.opener) {
              view = win;
            }

            return view.getComputedStyle(elem);
          }
        }]);

        return Utils;
      }();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /** @type {?} */


      var _messagesHash = {};
      /** @type {?} */

      var _hideMsg = typeof console === 'undefined' || !('warn' in console);
      /**
       * @param {?} msg
       * @return {?}
       */


      function warnOnce(msg) {
        if (!Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["isDevMode"])() || _hideMsg || msg in _messagesHash) {
          return;
        }

        _messagesHash[msg] = true;
        /*tslint:disable-next-line*/

        console.warn(msg);
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */
      //# sourceMappingURL=ngx-bootstrap-utils.js.map

      /***/

    },

    /***/
    "lXzo":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/ru.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function lXzo(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Russian [ru]
      //! author : Viktorminator : https://github.com/Viktorminator
      //! author : Menelion Elensúle : https://github.com/Oire
      //! author : Коренберг Марк : https://github.com/socketpair
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        function plural(word, num) {
          var forms = word.split('_');
          return num % 10 === 1 && num % 100 !== 11 ? forms[0] : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2];
        }

        function relativeTimeWithPlural(number, withoutSuffix, key) {
          var format = {
            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',
            mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',
            hh: 'час_часа_часов',
            dd: 'день_дня_дней',
            ww: 'неделя_недели_недель',
            MM: 'месяц_месяца_месяцев',
            yy: 'год_года_лет'
          };

          if (key === 'm') {
            return withoutSuffix ? 'минута' : 'минуту';
          } else {
            return number + ' ' + plural(format[key], +number);
          }
        }

        var monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i]; // http://new.gramota.ru/spravka/rules/139-prop : § 103
        // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637
        // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753

        var ru = moment.defineLocale('ru', {
          months: {
            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),
            standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')
          },
          monthsShort: {
            // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку?
            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),
            standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')
          },
          weekdays: {
            standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),
            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),
            isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/
          },
          weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
          weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
          monthsParse: monthsParse,
          longMonthsParse: monthsParse,
          shortMonthsParse: monthsParse,
          // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки
          monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
          // копия предыдущего
          monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
          // полные названия с падежами
          monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,
          // Выражение, которое соответствует только сокращённым формам
          monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,
          longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY г.',
            LLL: 'D MMMM YYYY г., H:mm',
            LLLL: 'dddd, D MMMM YYYY г., H:mm'
          },
          calendar: {
            sameDay: '[Сегодня, в] LT',
            nextDay: '[Завтра, в] LT',
            lastDay: '[Вчера, в] LT',
            nextWeek: function nextWeek(now) {
              if (now.week() !== this.week()) {
                switch (this.day()) {
                  case 0:
                    return '[В следующее] dddd, [в] LT';

                  case 1:
                  case 2:
                  case 4:
                    return '[В следующий] dddd, [в] LT';

                  case 3:
                  case 5:
                  case 6:
                    return '[В следующую] dddd, [в] LT';
                }
              } else {
                if (this.day() === 2) {
                  return '[Во] dddd, [в] LT';
                } else {
                  return '[В] dddd, [в] LT';
                }
              }
            },
            lastWeek: function lastWeek(now) {
              if (now.week() !== this.week()) {
                switch (this.day()) {
                  case 0:
                    return '[В прошлое] dddd, [в] LT';

                  case 1:
                  case 2:
                  case 4:
                    return '[В прошлый] dddd, [в] LT';

                  case 3:
                  case 5:
                  case 6:
                    return '[В прошлую] dddd, [в] LT';
                }
              } else {
                if (this.day() === 2) {
                  return '[Во] dddd, [в] LT';
                } else {
                  return '[В] dddd, [в] LT';
                }
              }
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: 'через %s',
            past: '%s назад',
            s: 'несколько секунд',
            ss: relativeTimeWithPlural,
            m: relativeTimeWithPlural,
            mm: relativeTimeWithPlural,
            h: 'час',
            hh: relativeTimeWithPlural,
            d: 'день',
            dd: relativeTimeWithPlural,
            w: 'неделя',
            ww: relativeTimeWithPlural,
            M: 'месяц',
            MM: relativeTimeWithPlural,
            y: 'год',
            yy: relativeTimeWithPlural
          },
          meridiemParse: /ночи|утра|дня|вечера/i,
          isPM: function isPM(input) {
            return /^(дня|вечера)$/.test(input);
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 4) {
              return 'ночи';
            } else if (hour < 12) {
              return 'утра';
            } else if (hour < 17) {
              return 'дня';
            } else {
              return 'вечера';
            }
          },
          dayOfMonthOrdinalParse: /\d{1,2}-(й|го|я)/,
          ordinal: function ordinal(number, period) {
            switch (period) {
              case 'M':
              case 'd':
              case 'DDD':
                return number + '-й';

              case 'D':
                return number + '-го';

              case 'w':
              case 'W':
                return number + '-я';

              default:
                return number;
            }
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return ru;
      });
      /***/

    },

    /***/
    "lYtQ":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/mn.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function lYtQ(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Mongolian [mn]
      //! author : Javkhlantugs Nyamdorj : https://github.com/javkhaanj7
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        function translate(number, withoutSuffix, key, isFuture) {
          switch (key) {
            case 's':
              return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';

            case 'ss':
              return number + (withoutSuffix ? ' секунд' : ' секундын');

            case 'm':
            case 'mm':
              return number + (withoutSuffix ? ' минут' : ' минутын');

            case 'h':
            case 'hh':
              return number + (withoutSuffix ? ' цаг' : ' цагийн');

            case 'd':
            case 'dd':
              return number + (withoutSuffix ? ' өдөр' : ' өдрийн');

            case 'M':
            case 'MM':
              return number + (withoutSuffix ? ' сар' : ' сарын');

            case 'y':
            case 'yy':
              return number + (withoutSuffix ? ' жил' : ' жилийн');

            default:
              return number;
          }
        }

        var mn = moment.defineLocale('mn', {
          months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split('_'),
          monthsShort: '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split('_'),
          monthsParseExact: true,
          weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),
          weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),
          weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'YYYY оны MMMMын D',
            LLL: 'YYYY оны MMMMын D HH:mm',
            LLLL: 'dddd, YYYY оны MMMMын D HH:mm'
          },
          meridiemParse: /ҮӨ|ҮХ/i,
          isPM: function isPM(input) {
            return input === 'ҮХ';
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 12) {
              return 'ҮӨ';
            } else {
              return 'ҮХ';
            }
          },
          calendar: {
            sameDay: '[Өнөөдөр] LT',
            nextDay: '[Маргааш] LT',
            nextWeek: '[Ирэх] dddd LT',
            lastDay: '[Өчигдөр] LT',
            lastWeek: '[Өнгөрсөн] dddd LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s дараа',
            past: '%s өмнө',
            s: translate,
            ss: translate,
            m: translate,
            mm: translate,
            h: translate,
            hh: translate,
            d: translate,
            dd: translate,
            M: translate,
            MM: translate,
            y: translate,
            yy: translate
          },
          dayOfMonthOrdinalParse: /\d{1,2} өдөр/,
          ordinal: function ordinal(number, period) {
            switch (period) {
              case 'd':
              case 'D':
              case 'DDD':
                return number + ' өдөр';

              default:
                return number;
            }
          }
        });
        return mn;
      });
      /***/

    },

    /***/
    "lgnt":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/ky.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function lgnt(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Kyrgyz [ky]
      //! author : Chyngyz Arystan uulu : https://github.com/chyngyz
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var suffixes = {
          0: '-чү',
          1: '-чи',
          2: '-чи',
          3: '-чү',
          4: '-чү',
          5: '-чи',
          6: '-чы',
          7: '-чи',
          8: '-чи',
          9: '-чу',
          10: '-чу',
          20: '-чы',
          30: '-чу',
          40: '-чы',
          50: '-чү',
          60: '-чы',
          70: '-чи',
          80: '-чи',
          90: '-чу',
          100: '-чү'
        };
        var ky = moment.defineLocale('ky', {
          months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),
          monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),
          weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),
          weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),
          weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[Бүгүн саат] LT',
            nextDay: '[Эртең саат] LT',
            nextWeek: 'dddd [саат] LT',
            lastDay: '[Кечээ саат] LT',
            lastWeek: '[Өткөн аптанын] dddd [күнү] [саат] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s ичинде',
            past: '%s мурун',
            s: 'бирнече секунд',
            ss: '%d секунд',
            m: 'бир мүнөт',
            mm: '%d мүнөт',
            h: 'бир саат',
            hh: '%d саат',
            d: 'бир күн',
            dd: '%d күн',
            M: 'бир ай',
            MM: '%d ай',
            y: 'бир жыл',
            yy: '%d жыл'
          },
          dayOfMonthOrdinalParse: /\d{1,2}-(чи|чы|чү|чу)/,
          ordinal: function ordinal(number) {
            var a = number % 10,
                b = number >= 100 ? 100 : null;
            return number + (suffixes[number] || suffixes[a] || suffixes[b]);
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return ky;
      });
      /***/

    },

    /***/
    "loYQ":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/bn-bd.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function loYQ(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Bengali (Bangladesh) [bn-bd]
      //! author : Asraf Hossain Patoary : https://github.com/ashwoolford
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var symbolMap = {
          1: '১',
          2: '২',
          3: '৩',
          4: '৪',
          5: '৫',
          6: '৬',
          7: '৭',
          8: '৮',
          9: '৯',
          0: '০'
        },
            numberMap = {
          '১': '1',
          '২': '2',
          '৩': '3',
          '৪': '4',
          '৫': '5',
          '৬': '6',
          '৭': '7',
          '৮': '8',
          '৯': '9',
          '০': '0'
        };
        var bnBd = moment.defineLocale('bn-bd', {
          months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),
          monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),
          weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),
          weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
          weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),
          longDateFormat: {
            LT: 'A h:mm সময়',
            LTS: 'A h:mm:ss সময়',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm সময়',
            LLLL: 'dddd, D MMMM YYYY, A h:mm সময়'
          },
          calendar: {
            sameDay: '[আজ] LT',
            nextDay: '[আগামীকাল] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[গতকাল] LT',
            lastWeek: '[গত] dddd, LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s পরে',
            past: '%s আগে',
            s: 'কয়েক সেকেন্ড',
            ss: '%d সেকেন্ড',
            m: 'এক মিনিট',
            mm: '%d মিনিট',
            h: 'এক ঘন্টা',
            hh: '%d ঘন্টা',
            d: 'এক দিন',
            dd: '%d দিন',
            M: 'এক মাস',
            MM: '%d মাস',
            y: 'এক বছর',
            yy: '%d বছর'
          },
          preparse: function preparse(string) {
            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
              return numberMap[match];
            });
          },
          postformat: function postformat(string) {
            return string.replace(/\d/g, function (match) {
              return symbolMap[match];
            });
          },
          meridiemParse: /রাত|ভোর|সকাল|দুপুর|বিকাল|সন্ধ্যা|রাত/,
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === 'রাত') {
              return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'ভোর') {
              return hour;
            } else if (meridiem === 'সকাল') {
              return hour;
            } else if (meridiem === 'দুপুর') {
              return hour >= 3 ? hour : hour + 12;
            } else if (meridiem === 'বিকাল') {
              return hour + 12;
            } else if (meridiem === 'সন্ধ্যা') {
              return hour + 12;
            }
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 4) {
              return 'রাত';
            } else if (hour < 6) {
              return 'ভোর';
            } else if (hour < 12) {
              return 'সকাল';
            } else if (hour < 15) {
              return 'দুপুর';
            } else if (hour < 18) {
              return 'বিকাল';
            } else if (hour < 20) {
              return 'সন্ধ্যা';
            } else {
              return 'রাত';
            }
          },
          week: {
            dow: 0,
            // Sunday is the first day of the week.
            doy: 6 // The week that contains Jan 6th is the first week of the year.

          }
        });
        return bnBd;
      });
      /***/

    },

    /***/
    "lpKW":
    /*!**********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/windowCount.js ***!
      \**********************************************************************/

    /*! exports provided: windowCount */

    /***/
    function lpKW(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "windowCount", function () {
        return windowCount;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");
      /* harmony import */


      var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../Subject */
      "XNiG");

      function windowCount(windowSize) {
        var startWindowEvery = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
        return function windowCountOperatorFunction(source) {
          return source.lift(new WindowCountOperator(windowSize, startWindowEvery));
        };
      }

      var WindowCountOperator = /*#__PURE__*/function () {
        function WindowCountOperator(windowSize, startWindowEvery) {
          _classCallCheck2(this, WindowCountOperator);

          this.windowSize = windowSize;
          this.startWindowEvery = startWindowEvery;
        }

        _createClass2(WindowCountOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new WindowCountSubscriber(subscriber, this.windowSize, this.startWindowEvery));
          }
        }]);

        return WindowCountOperator;
      }();

      var WindowCountSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_38) {
        _inherits2(WindowCountSubscriber, _Subscriber__WEBPACK_38);

        var _super345 = _createSuper(WindowCountSubscriber);

        function WindowCountSubscriber(destination, windowSize, startWindowEvery) {
          var _this815;

          _classCallCheck2(this, WindowCountSubscriber);

          _this815 = _super345.call(this, destination);
          _this815.destination = destination;
          _this815.windowSize = windowSize;
          _this815.startWindowEvery = startWindowEvery;
          _this815.windows = [new _Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]()];
          _this815.count = 0;
          destination.next(_this815.windows[0]);
          return _this815;
        }

        _createClass2(WindowCountSubscriber, [{
          key: "_next",
          value: function _next(value) {
            var startWindowEvery = this.startWindowEvery > 0 ? this.startWindowEvery : this.windowSize;
            var destination = this.destination;
            var windowSize = this.windowSize;
            var windows = this.windows;
            var len = windows.length;

            for (var i = 0; i < len && !this.closed; i++) {
              windows[i].next(value);
            }

            var c = this.count - windowSize + 1;

            if (c >= 0 && c % startWindowEvery === 0 && !this.closed) {
              windows.shift().complete();
            }

            if (++this.count % startWindowEvery === 0 && !this.closed) {
              var _window3 = new _Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]();

              windows.push(_window3);
              destination.next(_window3);
            }
          }
        }, {
          key: "_error",
          value: function _error(err) {
            var windows = this.windows;

            if (windows) {
              while (windows.length > 0 && !this.closed) {
                windows.shift().error(err);
              }
            }

            this.destination.error(err);
          }
        }, {
          key: "_complete",
          value: function _complete() {
            var windows = this.windows;

            if (windows) {
              while (windows.length > 0 && !this.closed) {
                windows.shift().complete();
              }
            }

            this.destination.complete();
          }
        }, {
          key: "_unsubscribe",
          value: function _unsubscribe() {
            this.count = 0;
            this.windows = null;
          }
        }]);

        return WindowCountSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=windowCount.js.map

      /***/

    },

    /***/
    "lyxo":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/ro.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function lyxo(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Romanian [ro]
      //! author : Vlad Gurdiga : https://github.com/gurdiga
      //! author : Valentin Agachi : https://github.com/avaly
      //! author : Emanuel Cepoi : https://github.com/cepem
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        function relativeTimeWithPlural(number, withoutSuffix, key) {
          var format = {
            ss: 'secunde',
            mm: 'minute',
            hh: 'ore',
            dd: 'zile',
            ww: 'săptămâni',
            MM: 'luni',
            yy: 'ani'
          },
              separator = ' ';

          if (number % 100 >= 20 || number >= 100 && number % 100 === 0) {
            separator = ' de ';
          }

          return number + separator + format[key];
        }

        var ro = moment.defineLocale('ro', {
          months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),
          monthsShort: 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),
          monthsParseExact: true,
          weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),
          weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),
          weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),
          longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY H:mm',
            LLLL: 'dddd, D MMMM YYYY H:mm'
          },
          calendar: {
            sameDay: '[azi la] LT',
            nextDay: '[mâine la] LT',
            nextWeek: 'dddd [la] LT',
            lastDay: '[ieri la] LT',
            lastWeek: '[fosta] dddd [la] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'peste %s',
            past: '%s în urmă',
            s: 'câteva secunde',
            ss: relativeTimeWithPlural,
            m: 'un minut',
            mm: relativeTimeWithPlural,
            h: 'o oră',
            hh: relativeTimeWithPlural,
            d: 'o zi',
            dd: relativeTimeWithPlural,
            w: 'o săptămână',
            ww: relativeTimeWithPlural,
            M: 'o lună',
            MM: relativeTimeWithPlural,
            y: 'un an',
            yy: relativeTimeWithPlural
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return ro;
      });
      /***/

    },

    /***/
    "m1pj":
    /*!*****************************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/dialog/dialog-container.component.js ***!
      \*****************************************************************************************/

    /*! exports provided: OwlDialogContainerComponent */

    /***/
    function m1pj(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OwlDialogContainerComponent", function () {
        return OwlDialogContainerComponent;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/cdk/a11y */
      "u47x");
      /* harmony import */


      var _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/cdk/portal */
      "+rOU");
      /* harmony import */


      var _angular_animations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/animations */
      "R0Ic");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");

      function OwlDialogContainerComponent_ng_template_0_Template(rf, ctx) {}

      var __extends = undefined && undefined.__extends || function () {
        var _extendStatics6 = function extendStatics(d, b) {
          _extendStatics6 = Object.setPrototypeOf || {
            __proto__: []
          } instanceof Array && function (d, b) {
            d.__proto__ = b;
          } || function (d, b) {
            for (var p in b) {
              if (b.hasOwnProperty(p)) d[p] = b[p];
            }
          };

          return _extendStatics6(d, b);
        };

        return function (d, b) {
          _extendStatics6(d, b);

          function __() {
            this.constructor = d;
          }

          d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
        };
      }();

      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var __metadata = undefined && undefined.__metadata || function (k, v) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
      };

      var __param = undefined && undefined.__param || function (paramIndex, decorator) {
        return function (target, key) {
          decorator(target, key, paramIndex);
        };
      };

      var zoomFadeIn = {
        opacity: 0,
        transform: 'translateX({{ x }}) translateY({{ y }}) scale({{scale}})'
      };
      var zoomFadeInFrom = {
        opacity: 0,
        transform: 'translateX({{ x }}) translateY({{ y }}) scale({{scale}})',
        transformOrigin: '{{ ox }} {{ oy }}'
      };

      var OwlDialogContainerComponent = function (_super) {
        __extends(OwlDialogContainerComponent, _super);

        function OwlDialogContainerComponent(changeDetector, elementRef, focusTrapFactory, document) {
          var _this = _super.call(this) || this;

          _this.changeDetector = changeDetector;
          _this.elementRef = elementRef;
          _this.focusTrapFactory = focusTrapFactory;
          _this.document = document;
          _this.ariaLabelledBy = null;
          _this.animationStateChanged = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          _this.isAnimating = false;
          _this.state = 'enter';
          _this.params = {
            x: '0px',
            y: '0px',
            ox: '50%',
            oy: '50%',
            scale: 0
          };
          _this.elementFocusedBeforeDialogWasOpened = null;
          return _this;
        }

        Object.defineProperty(OwlDialogContainerComponent.prototype, "config", {
          get: function get() {
            return this._config;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDialogContainerComponent.prototype, "owlDialogContainerClass", {
          get: function get() {
            return true;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDialogContainerComponent.prototype, "owlDialogContainerTabIndex", {
          get: function get() {
            return -1;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDialogContainerComponent.prototype, "owlDialogContainerId", {
          get: function get() {
            return this._config.id;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDialogContainerComponent.prototype, "owlDialogContainerRole", {
          get: function get() {
            return this._config.role || null;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDialogContainerComponent.prototype, "owlDialogContainerAriaLabelledby", {
          get: function get() {
            return this.ariaLabelledBy;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDialogContainerComponent.prototype, "owlDialogContainerAriaDescribedby", {
          get: function get() {
            return this._config.ariaDescribedBy || null;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDialogContainerComponent.prototype, "owlDialogContainerAnimation", {
          get: function get() {
            return {
              value: this.state,
              params: this.params
            };
          },
          enumerable: true,
          configurable: true
        });

        OwlDialogContainerComponent.prototype.ngOnInit = function () {};

        OwlDialogContainerComponent.prototype.attachComponentPortal = function (portal) {
          if (this.portalOutlet.hasAttached()) {
            throw Error('Attempting to attach dialog content after content is already attached');
          }

          this.savePreviouslyFocusedElement();
          return this.portalOutlet.attachComponentPortal(portal);
        };

        OwlDialogContainerComponent.prototype.attachTemplatePortal = function (portal) {
          throw new Error('Method not implemented.');
        };

        OwlDialogContainerComponent.prototype.setConfig = function (config) {
          this._config = config;

          if (config.event) {
            this.calculateZoomOrigin(event);
          }
        };

        OwlDialogContainerComponent.prototype.onAnimationStart = function (event) {
          this.isAnimating = true;
          this.animationStateChanged.emit(event);
        };

        OwlDialogContainerComponent.prototype.onAnimationDone = function (event) {
          if (event.toState === 'enter') {
            this.trapFocus();
          } else if (event.toState === 'exit') {
            this.restoreFocus();
          }

          this.animationStateChanged.emit(event);
          this.isAnimating = false;
        };

        OwlDialogContainerComponent.prototype.startExitAnimation = function () {
          this.state = 'exit';
          this.changeDetector.markForCheck();
        };

        OwlDialogContainerComponent.prototype.calculateZoomOrigin = function (event) {
          if (!event) {
            return;
          }

          var clientX = event.clientX;
          var clientY = event.clientY;
          var wh = window.innerWidth / 2;
          var hh = window.innerHeight / 2;
          var x = clientX - wh;
          var y = clientY - hh;
          var ox = clientX / window.innerWidth;
          var oy = clientY / window.innerHeight;
          this.params.x = x + "px";
          this.params.y = y + "px";
          this.params.ox = ox * 100 + "%";
          this.params.oy = oy * 100 + "%";
          this.params.scale = 0;
          return;
        };

        OwlDialogContainerComponent.prototype.savePreviouslyFocusedElement = function () {
          var _this = this;

          if (this.document) {
            this.elementFocusedBeforeDialogWasOpened = this.document.activeElement;
            Promise.resolve().then(function () {
              return _this.elementRef.nativeElement.focus();
            });
          }
        };

        OwlDialogContainerComponent.prototype.trapFocus = function () {
          if (!this.focusTrap) {
            this.focusTrap = this.focusTrapFactory.create(this.elementRef.nativeElement);
          }

          if (this._config.autoFocus) {
            this.focusTrap.focusInitialElementWhenReady();
          }
        };

        OwlDialogContainerComponent.prototype.restoreFocus = function () {
          var toFocus = this.elementFocusedBeforeDialogWasOpened;

          if (toFocus && typeof toFocus.focus === 'function') {
            toFocus.focus();
          }

          if (this.focusTrap) {
            this.focusTrap.destroy();
          }
        };

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"])(_angular_cdk_portal__WEBPACK_IMPORTED_MODULE_2__["CdkPortalOutlet"]), __metadata("design:type", _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_2__["CdkPortalOutlet"])], OwlDialogContainerComponent.prototype, "portalOutlet", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('class.owl-dialog-container'), __metadata("design:type", Boolean), __metadata("design:paramtypes", [])], OwlDialogContainerComponent.prototype, "owlDialogContainerClass", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('attr.tabindex'), __metadata("design:type", Number), __metadata("design:paramtypes", [])], OwlDialogContainerComponent.prototype, "owlDialogContainerTabIndex", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('attr.id'), __metadata("design:type", String), __metadata("design:paramtypes", [])], OwlDialogContainerComponent.prototype, "owlDialogContainerId", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('attr.role'), __metadata("design:type", String), __metadata("design:paramtypes", [])], OwlDialogContainerComponent.prototype, "owlDialogContainerRole", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('attr.aria-labelledby'), __metadata("design:type", String), __metadata("design:paramtypes", [])], OwlDialogContainerComponent.prototype, "owlDialogContainerAriaLabelledby", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('attr.aria-describedby'), __metadata("design:type", String), __metadata("design:paramtypes", [])], OwlDialogContainerComponent.prototype, "owlDialogContainerAriaDescribedby", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('@slideModal'), __metadata("design:type", Object), __metadata("design:paramtypes", [])], OwlDialogContainerComponent.prototype, "owlDialogContainerAnimation", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"])('@slideModal.start', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", void 0)], OwlDialogContainerComponent.prototype, "onAnimationStart", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"])('@slideModal.done', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", void 0)], OwlDialogContainerComponent.prototype, "onAnimationDone", null);

        OwlDialogContainerComponent = __decorate([__param(3, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __param(3, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"])(_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"])), __metadata("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_1__["FocusTrapFactory"], Object])], OwlDialogContainerComponent);

        OwlDialogContainerComponent.ɵfac = function OwlDialogContainerComponent_Factory(t) {
          return new (t || OwlDialogContainerComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_1__["FocusTrapFactory"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"], 8));
        };

        OwlDialogContainerComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({
          type: OwlDialogContainerComponent,
          selectors: [["owl-dialog-container"]],
          viewQuery: function OwlDialogContainerComponent_Query(rf, ctx) {
            if (rf & 1) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](_angular_cdk_portal__WEBPACK_IMPORTED_MODULE_2__["CdkPortalOutlet"], 1);
            }

            if (rf & 2) {
              var _t;

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.portalOutlet = _t.first);
            }
          },
          hostVars: 8,
          hostBindings: function OwlDialogContainerComponent_HostBindings(rf, ctx) {
            if (rf & 1) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsyntheticHostListener"]("@slideModal.start", function OwlDialogContainerComponent_animation_slideModal_start_HostBindingHandler($event) {
                return ctx.onAnimationStart($event);
              })("@slideModal.done", function OwlDialogContainerComponent_animation_slideModal_done_HostBindingHandler($event) {
                return ctx.onAnimationDone($event);
              });
            }

            if (rf & 2) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("tabindex", ctx.owlDialogContainerTabIndex)("id", ctx.owlDialogContainerId)("role", ctx.owlDialogContainerRole)("aria-labelledby", ctx.owlDialogContainerAriaLabelledby)("aria-describedby", ctx.owlDialogContainerAriaDescribedby);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsyntheticHostProperty"]("@slideModal", ctx.owlDialogContainerAnimation);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("owl-dialog-container", ctx.owlDialogContainerClass);
            }
          },
          features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵInheritDefinitionFeature"]],
          decls: 1,
          vars: 0,
          consts: [["cdkPortalOutlet", ""]],
          template: function OwlDialogContainerComponent_Template(rf, ctx) {
            if (rf & 1) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, OwlDialogContainerComponent_ng_template_0_Template, 0, 0, "ng-template", 0);
            }
          },
          directives: [_angular_cdk_portal__WEBPACK_IMPORTED_MODULE_2__["CdkPortalOutlet"]],
          encapsulation: 2,
          data: {
            animation: [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["trigger"])('slideModal', [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["transition"])('void => enter', [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["style"])(zoomFadeInFrom), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["animate"])('300ms cubic-bezier(0.35, 0, 0.25, 1)', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["style"])('*')), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["animate"])('150ms', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["keyframes"])([Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["style"])({
              transform: 'scale(1)',
              offset: 0
            }), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["style"])({
              transform: 'scale(1.05)',
              offset: 0.3
            }), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["style"])({
              transform: 'scale(.95)',
              offset: 0.8
            }), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["style"])({
              transform: 'scale(1)',
              offset: 1.0
            })])), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["animateChild"])()], {
              params: {
                x: '0px',
                y: '0px',
                ox: '50%',
                oy: '50%',
                scale: 1
              }
            }), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["transition"])('enter => exit', [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["animateChild"])(), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["animate"])(200, Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["style"])(zoomFadeIn))], {
              params: {
                x: '0px',
                y: '0px',
                ox: '50%',
                oy: '50%'
              }
            })])]
          }
        });

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](OwlDialogContainerComponent, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"],
            args: [{
              selector: 'owl-dialog-container',
              template: "<ng-template cdkPortalOutlet></ng-template>",
              animations: [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["trigger"])('slideModal', [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["transition"])('void => enter', [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["style"])(zoomFadeInFrom), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["animate"])('300ms cubic-bezier(0.35, 0, 0.25, 1)', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["style"])('*')), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["animate"])('150ms', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["keyframes"])([Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["style"])({
                transform: 'scale(1)',
                offset: 0
              }), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["style"])({
                transform: 'scale(1.05)',
                offset: 0.3
              }), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["style"])({
                transform: 'scale(.95)',
                offset: 0.8
              }), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["style"])({
                transform: 'scale(1)',
                offset: 1.0
              })])), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["animateChild"])()], {
                params: {
                  x: '0px',
                  y: '0px',
                  ox: '50%',
                  oy: '50%',
                  scale: 1
                }
              }), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["transition"])('enter => exit', [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["animateChild"])(), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["animate"])(200, Object(_angular_animations__WEBPACK_IMPORTED_MODULE_3__["style"])(zoomFadeIn))], {
                params: {
                  x: '0px',
                  y: '0px',
                  ox: '50%',
                  oy: '50%'
                }
              })])]
            }]
          }], function () {
            return [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
            }, {
              type: _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_1__["FocusTrapFactory"]
            }, {
              type: Object,
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
              }, {
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
                args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
              }]
            }];
          }, {
            owlDialogContainerClass: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['class.owl-dialog-container']
            }],
            owlDialogContainerTabIndex: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['attr.tabindex']
            }],
            owlDialogContainerId: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['attr.id']
            }],
            owlDialogContainerRole: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['attr.role']
            }],
            owlDialogContainerAriaLabelledby: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['attr.aria-labelledby']
            }],
            owlDialogContainerAriaDescribedby: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['attr.aria-describedby']
            }],
            owlDialogContainerAnimation: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['@slideModal']
            }],
            onAnimationStart: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
              args: ['@slideModal.start', ['$event']]
            }],
            onAnimationDone: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
              args: ['@slideModal.done', ['$event']]
            }],
            portalOutlet: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"],
              args: [_angular_cdk_portal__WEBPACK_IMPORTED_MODULE_2__["CdkPortalOutlet"]]
            }]
          });
        })();

        return OwlDialogContainerComponent;
      }(_angular_cdk_portal__WEBPACK_IMPORTED_MODULE_2__["BasePortalOutlet"]); //# sourceMappingURL=data:application/json;charset=utf-8;base64, 

      /***/

    },

    /***/
    "m2j4":
    /*!******************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/isEmpty.js ***!
      \******************************************************************/

    /*! exports provided: isEmpty */

    /***/
    function m2j4(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isEmpty", function () {
        return isEmpty;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");

      function isEmpty() {
        return function (source) {
          return source.lift(new IsEmptyOperator());
        };
      }

      var IsEmptyOperator = /*#__PURE__*/function () {
        function IsEmptyOperator() {
          _classCallCheck2(this, IsEmptyOperator);
        }

        _createClass2(IsEmptyOperator, [{
          key: "call",
          value: function call(observer, source) {
            return source.subscribe(new IsEmptySubscriber(observer));
          }
        }]);

        return IsEmptyOperator;
      }();

      var IsEmptySubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_39) {
        _inherits2(IsEmptySubscriber, _Subscriber__WEBPACK_39);

        var _super346 = _createSuper(IsEmptySubscriber);

        function IsEmptySubscriber(destination) {
          _classCallCheck2(this, IsEmptySubscriber);

          return _super346.call(this, destination);
        }

        _createClass2(IsEmptySubscriber, [{
          key: "notifyComplete",
          value: function notifyComplete(isEmpty) {
            var destination = this.destination;
            destination.next(isEmpty);
            destination.complete();
          }
        }, {
          key: "_next",
          value: function _next(value) {
            this.notifyComplete(false);
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.notifyComplete(true);
          }
        }]);

        return IsEmptySubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=isEmpty.js.map

      /***/

    },

    /***/
    "m2wi":
    /*!****************************************************************!*\
      !*** ./node_modules/aws-sdk/lib/event-stream/split-message.js ***!
      \****************************************************************/

    /*! no static exports found */

    /***/
    function m2wi(module, exports, __webpack_require__) {
      var util = __webpack_require__(
      /*! ../core */
      "QsWE").util;

      var toBuffer = util.buffer.toBuffer; // All prelude components are unsigned, 32-bit integers

      var PRELUDE_MEMBER_LENGTH = 4; // The prelude consists of two components

      var PRELUDE_LENGTH = PRELUDE_MEMBER_LENGTH * 2; // Checksums are always CRC32 hashes.

      var CHECKSUM_LENGTH = 4; // Messages must include a full prelude, a prelude checksum, and a message checksum

      var MINIMUM_MESSAGE_LENGTH = PRELUDE_LENGTH + CHECKSUM_LENGTH * 2;
      /**
       * @api private
       *
       * @param {Buffer} message
       */

      function splitMessage(message) {
        if (!util.Buffer.isBuffer(message)) message = toBuffer(message);

        if (message.length < MINIMUM_MESSAGE_LENGTH) {
          throw new Error('Provided message too short to accommodate event stream message overhead');
        }

        if (message.length !== message.readUInt32BE(0)) {
          throw new Error('Reported message length does not match received message length');
        }

        var expectedPreludeChecksum = message.readUInt32BE(PRELUDE_LENGTH);

        if (expectedPreludeChecksum !== util.crypto.crc32(message.slice(0, PRELUDE_LENGTH))) {
          throw new Error('The prelude checksum specified in the message (' + expectedPreludeChecksum + ') does not match the calculated CRC32 checksum.');
        }

        var expectedMessageChecksum = message.readUInt32BE(message.length - CHECKSUM_LENGTH);

        if (expectedMessageChecksum !== util.crypto.crc32(message.slice(0, message.length - CHECKSUM_LENGTH))) {
          throw new Error('The message checksum did not match the expected value of ' + expectedMessageChecksum);
        }

        var headersStart = PRELUDE_LENGTH + CHECKSUM_LENGTH;
        var headersEnd = headersStart + message.readUInt32BE(PRELUDE_MEMBER_LENGTH);
        return {
          headers: message.slice(headersStart, headersEnd),
          body: message.slice(headersEnd, message.length - CHECKSUM_LENGTH)
        };
      }
      /**
       * @api private
       */


      module.exports = {
        splitMessage: splitMessage
      };
      /***/
    },

    /***/
    "m5lJ":
    /*!**********************************************************!*\
      !*** ./node_modules/aws-sdk/lib/xml/escape-attribute.js ***!
      \**********************************************************/

    /*! no static exports found */

    /***/
    function m5lJ(module, exports) {
      /**
       * Escapes characters that can not be in an XML attribute.
       */
      function escapeAttribute(value) {
        return value.replace(/&/g, '&amp;').replace(/'/g, '&apos;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
      }
      /**
       * @api private
       */


      module.exports = {
        escapeAttribute: escapeAttribute
      };
      /***/
    },

    /***/
    "mCNh":
    /*!**********************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/pipe.js ***!
      \**********************************************************/

    /*! exports provided: pipe, pipeFromArray */

    /***/
    function mCNh(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "pipe", function () {
        return pipe;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "pipeFromArray", function () {
        return pipeFromArray;
      });
      /* harmony import */


      var _identity__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./identity */
      "SpAZ");

      function pipe() {
        for (var _len60 = arguments.length, fns = new Array(_len60), _key62 = 0; _key62 < _len60; _key62++) {
          fns[_key62] = arguments[_key62];
        }

        return pipeFromArray(fns);
      }

      function pipeFromArray(fns) {
        if (fns.length === 0) {
          return _identity__WEBPACK_IMPORTED_MODULE_0__["identity"];
        }

        if (fns.length === 1) {
          return fns[0];
        }

        return function piped(input) {
          return fns.reduce(function (prev, fn) {
            return fn(prev);
          }, input);
        };
      } //# sourceMappingURL=pipe.js.map

      /***/

    },

    /***/
    "md97":
    /*!****************************************************!*\
      !*** ./node_modules/aws-sdk/lib/browser_loader.js ***!
      \****************************************************/

    /*! no static exports found */

    /***/
    function md97(module, exports, __webpack_require__) {
      var util = __webpack_require__(
      /*! ./util */
      "BaN1"); // browser specific modules


      util.crypto.lib = __webpack_require__(
      /*! ./browserCryptoLib */
      "4woR");
      util.Buffer = __webpack_require__(
      /*! buffer/ */
      "tjlA").Buffer;
      util.url = __webpack_require__(
      /*! url/ */
      "CxY0");
      util.querystring = __webpack_require__(
      /*! querystring/ */
      "r8II");
      util.realClock = __webpack_require__(
      /*! ./realclock/browserClock */
      "3FsZ");
      util.environment = 'js';
      util.createEventStream = __webpack_require__(
      /*! ./event-stream/buffered-create-event-stream */
      "NVWg").createEventStream;

      util.isBrowser = function () {
        return true;
      };

      util.isNode = function () {
        return false;
      };

      var AWS = __webpack_require__(
      /*! ./core */
      "QsWE");
      /**
       * @api private
       */


      module.exports = AWS;

      __webpack_require__(
      /*! ./credentials */
      "8loY");

      __webpack_require__(
      /*! ./credentials/credential_provider_chain */
      "u8bp");

      __webpack_require__(
      /*! ./credentials/temporary_credentials */
      "S6rO");

      __webpack_require__(
      /*! ./credentials/chainable_temporary_credentials */
      "tVRC");

      __webpack_require__(
      /*! ./credentials/web_identity_credentials */
      "Vz+1");

      __webpack_require__(
      /*! ./credentials/cognito_identity_credentials */
      "iYq/");

      __webpack_require__(
      /*! ./credentials/saml_credentials */
      "vFq9"); // Load the DOMParser XML parser


      AWS.XML.Parser = __webpack_require__(
      /*! ./xml/browser_parser */
      "CFft"); // Load the XHR HttpClient

      __webpack_require__(
      /*! ./http/xhr */
      "Lh65");

      if (typeof process === 'undefined') {
        var process = {
          browser: true
        };
      }
      /***/

    },

    /***/
    "mk5/":
    /*!*****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/window.js ***!
      \*****************************************************************/

    /*! exports provided: window */

    /***/
    function mk5(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "window", function () {
        return window;
      });
      /* harmony import */


      var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subject */
      "XNiG");
      /* harmony import */


      var _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../innerSubscribe */
      "zx2A");

      function window(windowBoundaries) {
        return function windowOperatorFunction(source) {
          return source.lift(new WindowOperator(windowBoundaries));
        };
      }

      var WindowOperator = /*#__PURE__*/function () {
        function WindowOperator(windowBoundaries) {
          _classCallCheck2(this, WindowOperator);

          this.windowBoundaries = windowBoundaries;
        }

        _createClass2(WindowOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            var windowSubscriber = new WindowSubscriber(subscriber);
            var sourceSubscription = source.subscribe(windowSubscriber);

            if (!sourceSubscription.closed) {
              windowSubscriber.add(Object(_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__["innerSubscribe"])(this.windowBoundaries, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__["SimpleInnerSubscriber"](windowSubscriber)));
            }

            return sourceSubscription;
          }
        }]);

        return WindowOperator;
      }();

      var WindowSubscriber = /*#__PURE__*/function (_innerSubscribe__WEBP15) {
        _inherits2(WindowSubscriber, _innerSubscribe__WEBP15);

        var _super347 = _createSuper(WindowSubscriber);

        function WindowSubscriber(destination) {
          var _this816;

          _classCallCheck2(this, WindowSubscriber);

          _this816 = _super347.call(this, destination);
          _this816.window = new _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"]();
          destination.next(_this816.window);
          return _this816;
        }

        _createClass2(WindowSubscriber, [{
          key: "notifyNext",
          value: function notifyNext() {
            this.openWindow();
          }
        }, {
          key: "notifyError",
          value: function notifyError(error) {
            this._error(error);
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete() {
            this._complete();
          }
        }, {
          key: "_next",
          value: function _next(value) {
            this.window.next(value);
          }
        }, {
          key: "_error",
          value: function _error(err) {
            this.window.error(err);
            this.destination.error(err);
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.window.complete();
            this.destination.complete();
          }
        }, {
          key: "_unsubscribe",
          value: function _unsubscribe() {
            this.window = null;
          }
        }, {
          key: "openWindow",
          value: function openWindow() {
            var prevWindow = this.window;

            if (prevWindow) {
              prevWindow.complete();
            }

            var destination = this.destination;
            var newWindow = this.window = new _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"]();
            destination.next(newWindow);
          }
        }]);

        return WindowSubscriber;
      }(_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__["SimpleOuterSubscriber"]); //# sourceMappingURL=window.js.map

      /***/

    },

    /***/
    "mlxB":
    /*!************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/isDate.js ***!
      \************************************************************/

    /*! exports provided: isDate */

    /***/
    function mlxB(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isDate", function () {
        return isDate;
      });

      function isDate(value) {
        return value instanceof Date && !isNaN(+value);
      } //# sourceMappingURL=isDate.js.map

      /***/

    },

    /***/
    "modA":
    /*!***********************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/index.js ***!
      \***********************************************************************/

    /*! exports provided: OwlDateTimeModule, OwlDateTimeIntl, OwlNativeDateTimeModule, OWL_DATE_TIME_LOCALE_PROVIDER, OWL_DATE_TIME_LOCALE, DateTimeAdapter, OWL_DATE_TIME_FORMATS, OwlDateTimeInlineComponent, OwlDateTimeComponent */

    /***/
    function modA(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony import */


      var _date_time_module__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./date-time.module */
      "Tg5H");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OwlDateTimeModule", function () {
        return _date_time_module__WEBPACK_IMPORTED_MODULE_0__["OwlDateTimeModule"];
      });
      /* harmony import */


      var _date_time_picker_intl_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./date-time-picker-intl.service */
      "MN5+");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OwlDateTimeIntl", function () {
        return _date_time_picker_intl_service__WEBPACK_IMPORTED_MODULE_1__["OwlDateTimeIntl"];
      });
      /* harmony import */


      var _adapter_native_date_time_module__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./adapter/native-date-time.module */
      "siIQ");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OwlNativeDateTimeModule", function () {
        return _adapter_native_date_time_module__WEBPACK_IMPORTED_MODULE_2__["OwlNativeDateTimeModule"];
      });
      /* harmony import */


      var _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./adapter/date-time-adapter.class */
      "1rjb");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OWL_DATE_TIME_LOCALE_PROVIDER", function () {
        return _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_3__["OWL_DATE_TIME_LOCALE_PROVIDER"];
      });
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OWL_DATE_TIME_LOCALE", function () {
        return _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_3__["OWL_DATE_TIME_LOCALE"];
      });
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "DateTimeAdapter", function () {
        return _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_3__["DateTimeAdapter"];
      });
      /* harmony import */


      var _adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ./adapter/date-time-format.class */
      "1FPZ");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OWL_DATE_TIME_FORMATS", function () {
        return _adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_4__["OWL_DATE_TIME_FORMATS"];
      });
      /* harmony import */


      var _date_time_inline_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! ./date-time-inline.component */
      "6Yr3");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OwlDateTimeInlineComponent", function () {
        return _date_time_inline_component__WEBPACK_IMPORTED_MODULE_5__["OwlDateTimeInlineComponent"];
      });
      /* harmony import */


      var _date_time_picker_component__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! ./date-time-picker.component */
      "7hDX");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OwlDateTimeComponent", function () {
        return _date_time_picker_component__WEBPACK_IMPORTED_MODULE_6__["OwlDateTimeComponent"];
      });
      /***/

    },

    /***/
    "mrSG":
    /*!*****************************************!*\
      !*** ./node_modules/tslib/tslib.es6.js ***!
      \*****************************************/

    /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __createBinding, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault, __classPrivateFieldGet, __classPrivateFieldSet */

    /***/
    function mrSG(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__extends", function () {
        return __extends;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__assign", function () {
        return _assign2;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__rest", function () {
        return __rest;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__decorate", function () {
        return __decorate;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__param", function () {
        return __param;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__metadata", function () {
        return __metadata;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__awaiter", function () {
        return __awaiter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__generator", function () {
        return __generator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__createBinding", function () {
        return __createBinding;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__exportStar", function () {
        return __exportStar;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__values", function () {
        return __values;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__read", function () {
        return __read;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__spread", function () {
        return __spread;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__spreadArrays", function () {
        return __spreadArrays;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__await", function () {
        return __await;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__asyncGenerator", function () {
        return __asyncGenerator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__asyncDelegator", function () {
        return __asyncDelegator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__asyncValues", function () {
        return __asyncValues;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__makeTemplateObject", function () {
        return __makeTemplateObject;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__importStar", function () {
        return __importStar;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__importDefault", function () {
        return __importDefault;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__classPrivateFieldGet", function () {
        return __classPrivateFieldGet;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__classPrivateFieldSet", function () {
        return __classPrivateFieldSet;
      });
      /*! *****************************************************************************
      Copyright (c) Microsoft Corporation.
      
      Permission to use, copy, modify, and/or distribute this software for any
      purpose with or without fee is hereby granted.
      
      THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
      REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
      AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
      INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
      LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
      OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
      PERFORMANCE OF THIS SOFTWARE.
      ***************************************************************************** */

      /* global Reflect, Promise */


      var _extendStatics7 = function extendStatics(d, b) {
        _extendStatics7 = Object.setPrototypeOf || {
          __proto__: []
        } instanceof Array && function (d, b) {
          d.__proto__ = b;
        } || function (d, b) {
          for (var p in b) {
            if (b.hasOwnProperty(p)) d[p] = b[p];
          }
        };

        return _extendStatics7(d, b);
      };

      function __extends(d, b) {
        _extendStatics7(d, b);

        function __() {
          this.constructor = d;
        }

        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
      }

      var _assign2 = function __assign() {
        _assign2 = Object.assign || function __assign(t) {
          for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];

            for (var p in s) {
              if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
            }
          }

          return t;
        };

        return _assign2.apply(this, arguments);
      };

      function __rest(s, e) {
        var t = {};

        for (var p in s) {
          if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
        }

        if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
        }
        return t;
      }

      function __decorate(decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      }

      function __param(paramIndex, decorator) {
        return function (target, key) {
          decorator(target, key, paramIndex);
        };
      }

      function __metadata(metadataKey, metadataValue) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
      }

      function __awaiter(thisArg, _arguments, P, generator) {
        function adopt(value) {
          return value instanceof P ? value : new P(function (resolve) {
            resolve(value);
          });
        }

        return new (P || (P = Promise))(function (resolve, reject) {
          function fulfilled(value) {
            try {
              step(generator.next(value));
            } catch (e) {
              reject(e);
            }
          }

          function rejected(value) {
            try {
              step(generator["throw"](value));
            } catch (e) {
              reject(e);
            }
          }

          function step(result) {
            result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
          }

          step((generator = generator.apply(thisArg, _arguments || [])).next());
        });
      }

      function __generator(thisArg, body) {
        var _ = {
          label: 0,
          sent: function sent() {
            if (t[0] & 1) throw t[1];
            return t[1];
          },
          trys: [],
          ops: []
        },
            f,
            y,
            t,
            g;
        return g = {
          next: verb(0),
          "throw": verb(1),
          "return": verb(2)
        }, typeof Symbol === "function" && (g[Symbol.iterator] = function () {
          return this;
        }), g;

        function verb(n) {
          return function (v) {
            return step([n, v]);
          };
        }

        function step(op) {
          if (f) throw new TypeError("Generator is already executing.");

          while (_) {
            try {
              if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
              if (y = 0, t) op = [op[0] & 2, t.value];

              switch (op[0]) {
                case 0:
                case 1:
                  t = op;
                  break;

                case 4:
                  _.label++;
                  return {
                    value: op[1],
                    done: false
                  };

                case 5:
                  _.label++;
                  y = op[1];
                  op = [0];
                  continue;

                case 7:
                  op = _.ops.pop();

                  _.trys.pop();

                  continue;

                default:
                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
                    _ = 0;
                    continue;
                  }

                  if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
                    _.label = op[1];
                    break;
                  }

                  if (op[0] === 6 && _.label < t[1]) {
                    _.label = t[1];
                    t = op;
                    break;
                  }

                  if (t && _.label < t[2]) {
                    _.label = t[2];

                    _.ops.push(op);

                    break;
                  }

                  if (t[2]) _.ops.pop();

                  _.trys.pop();

                  continue;
              }

              op = body.call(thisArg, _);
            } catch (e) {
              op = [6, e];
              y = 0;
            } finally {
              f = t = 0;
            }
          }

          if (op[0] & 5) throw op[1];
          return {
            value: op[0] ? op[1] : void 0,
            done: true
          };
        }
      }

      function __createBinding(o, m, k, k2) {
        if (k2 === undefined) k2 = k;
        o[k2] = m[k];
      }

      function __exportStar(m, exports) {
        for (var p in m) {
          if (p !== "default" && !exports.hasOwnProperty(p)) exports[p] = m[p];
        }
      }

      function __values(o) {
        var s = typeof Symbol === "function" && Symbol.iterator,
            m = s && o[s],
            i = 0;
        if (m) return m.call(o);
        if (o && typeof o.length === "number") return {
          next: function next() {
            if (o && i >= o.length) o = void 0;
            return {
              value: o && o[i++],
              done: !o
            };
          }
        };
        throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
      }

      function __read(o, n) {
        var m = typeof Symbol === "function" && o[Symbol.iterator];
        if (!m) return o;
        var i = m.call(o),
            r,
            ar = [],
            e;

        try {
          while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
            ar.push(r.value);
          }
        } catch (error) {
          e = {
            error: error
          };
        } finally {
          try {
            if (r && !r.done && (m = i["return"])) m.call(i);
          } finally {
            if (e) throw e.error;
          }
        }

        return ar;
      }

      function __spread() {
        for (var ar = [], i = 0; i < arguments.length; i++) {
          ar = ar.concat(__read(arguments[i]));
        }

        return ar;
      }

      function __spreadArrays() {
        for (var s = 0, i = 0, il = arguments.length; i < il; i++) {
          s += arguments[i].length;
        }

        for (var r = Array(s), k = 0, i = 0; i < il; i++) {
          for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {
            r[k] = a[j];
          }
        }

        return r;
      }

      ;

      function __await(v) {
        return this instanceof __await ? (this.v = v, this) : new __await(v);
      }

      function __asyncGenerator(thisArg, _arguments, generator) {
        if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
        var g = generator.apply(thisArg, _arguments || []),
            i,
            q = [];
        return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {
          return this;
        }, i;

        function verb(n) {
          if (g[n]) i[n] = function (v) {
            return new Promise(function (a, b) {
              q.push([n, v, a, b]) > 1 || resume(n, v);
            });
          };
        }

        function resume(n, v) {
          try {
            step(g[n](v));
          } catch (e) {
            settle(q[0][3], e);
          }
        }

        function step(r) {
          r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
        }

        function fulfill(value) {
          resume("next", value);
        }

        function reject(value) {
          resume("throw", value);
        }

        function settle(f, v) {
          if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);
        }
      }

      function __asyncDelegator(o) {
        var i, p;
        return i = {}, verb("next"), verb("throw", function (e) {
          throw e;
        }), verb("return"), i[Symbol.iterator] = function () {
          return this;
        }, i;

        function verb(n, f) {
          i[n] = o[n] ? function (v) {
            return (p = !p) ? {
              value: __await(o[n](v)),
              done: n === "return"
            } : f ? f(v) : v;
          } : f;
        }
      }

      function __asyncValues(o) {
        if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
        var m = o[Symbol.asyncIterator],
            i;
        return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {
          return this;
        }, i);

        function verb(n) {
          i[n] = o[n] && function (v) {
            return new Promise(function (resolve, reject) {
              v = o[n](v), settle(resolve, reject, v.done, v.value);
            });
          };
        }

        function settle(resolve, reject, d, v) {
          Promise.resolve(v).then(function (v) {
            resolve({
              value: v,
              done: d
            });
          }, reject);
        }
      }

      function __makeTemplateObject(cooked, raw) {
        if (Object.defineProperty) {
          Object.defineProperty(cooked, "raw", {
            value: raw
          });
        } else {
          cooked.raw = raw;
        }

        return cooked;
      }

      ;

      function __importStar(mod) {
        if (mod && mod.__esModule) return mod;
        var result = {};
        if (mod != null) for (var k in mod) {
          if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
        }
        result["default"] = mod;
        return result;
      }

      function __importDefault(mod) {
        return mod && mod.__esModule ? mod : {
          "default": mod
        };
      }

      function __classPrivateFieldGet(receiver, privateMap) {
        if (!privateMap.has(receiver)) {
          throw new TypeError("attempted to get private field on non-instance");
        }

        return privateMap.get(receiver);
      }

      function __classPrivateFieldSet(receiver, privateMap, value) {
        if (!privateMap.has(receiver)) {
          throw new TypeError("attempted to set private field on non-instance");
        }

        privateMap.set(receiver, value);
        return value;
      }
      /***/

    },

    /***/
    "n4Yq":
    /*!********************************************************!*\
      !*** ./node_modules/aws-sdk/lib/event-stream/int64.js ***!
      \********************************************************/

    /*! no static exports found */

    /***/
    function n4Yq(module, exports, __webpack_require__) {
      var util = __webpack_require__(
      /*! ../core */
      "QsWE").util;

      var toBuffer = util.buffer.toBuffer;
      /**
       * A lossless representation of a signed, 64-bit integer. Instances of this
       * class may be used in arithmetic expressions as if they were numeric
       * primitives, but the binary representation will be preserved unchanged as the
       * `bytes` property of the object. The bytes should be encoded as big-endian,
       * two's complement integers.
       * @param {Buffer} bytes
       *
       * @api private
       */

      function Int64(bytes) {
        if (bytes.length !== 8) {
          throw new Error('Int64 buffers must be exactly 8 bytes');
        }

        if (!util.Buffer.isBuffer(bytes)) bytes = toBuffer(bytes);
        this.bytes = bytes;
      }
      /**
       * @param {number} number
       * @returns {Int64}
       *
       * @api private
       */


      Int64.fromNumber = function (number) {
        if (number > 9223372036854775807 || number < -9223372036854775808) {
          throw new Error(number + ' is too large (or, if negative, too small) to represent as an Int64');
        }

        var bytes = new Uint8Array(8);

        for (var i = 7, remaining = Math.abs(Math.round(number)); i > -1 && remaining > 0; i--, remaining /= 256) {
          bytes[i] = remaining;
        }

        if (number < 0) {
          negate(bytes);
        }

        return new Int64(bytes);
      };
      /**
       * @returns {number}
       *
       * @api private
       */


      Int64.prototype.valueOf = function () {
        var bytes = this.bytes.slice(0);
        var negative = bytes[0] & 128;

        if (negative) {
          negate(bytes);
        }

        return parseInt(bytes.toString('hex'), 16) * (negative ? -1 : 1);
      };

      Int64.prototype.toString = function () {
        return String(this.valueOf());
      };
      /**
       * @param {Buffer} bytes
       *
       * @api private
       */


      function negate(bytes) {
        for (var i = 0; i < 8; i++) {
          bytes[i] ^= 0xFF;
        }

        for (var i = 7; i > -1; i--) {
          bytes[i]++;

          if (bytes[i] !== 0) {
            break;
          }
        }
      }
      /**
       * @api private
       */


      module.exports = {
        Int64: Int64
      };
      /***/
    },

    /***/
    "n6bG":
    /*!****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/isFunction.js ***!
      \****************************************************************/

    /*! exports provided: isFunction */

    /***/
    function n6bG(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isFunction", function () {
        return isFunction;
      });

      function isFunction(x) {
        return typeof x === 'function';
      } //# sourceMappingURL=isFunction.js.map

      /***/

    },

    /***/
    "nDsj":
    /*!**********************************************!*\
      !*** ./node_modules/rxjs/BehaviorSubject.js ***!
      \**********************************************/

    /*! no static exports found */

    /***/
    function nDsj(module, exports, __webpack_require__) {
      "use strict";

      function __export(m) {
        for (var p in m) {
          if (!exports.hasOwnProperty(p)) exports[p] = m[p];
        }
      }

      Object.defineProperty(exports, "__esModule", {
        value: true
      });

      __export(__webpack_require__(
      /*! rxjs-compat/BehaviorSubject */
      "Hm89")); //# sourceMappingURL=BehaviorSubject.js.map

      /***/

    },

    /***/
    "nLfN":
    /*!*********************************************************************!*\
      !*** ./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/platform.js ***!
      \*********************************************************************/

    /*! exports provided: Platform, PlatformModule, _getShadowRoot, _supportsShadowDom, getRtlScrollAxisType, getSupportedInputTypes, normalizePassiveListenerOptions, supportsPassiveEventListeners, supportsScrollBehavior */

    /***/
    function nLfN(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Platform", function () {
        return Platform;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PlatformModule", function () {
        return PlatformModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "_getShadowRoot", function () {
        return _getShadowRoot;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "_supportsShadowDom", function () {
        return _supportsShadowDom;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getRtlScrollAxisType", function () {
        return getRtlScrollAxisType;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getSupportedInputTypes", function () {
        return getSupportedInputTypes;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "normalizePassiveListenerOptions", function () {
        return normalizePassiveListenerOptions;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "supportsPassiveEventListeners", function () {
        return supportsPassiveEventListeners;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "supportsScrollBehavior", function () {
        return supportsScrollBehavior;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // Whether the current platform supports the V8 Break Iterator. The V8 check
      // is necessary to detect all Blink based browsers.


      var hasV8BreakIterator; // We need a try/catch around the reference to `Intl`, because accessing it in some cases can
      // cause IE to throw. These cases are tied to particular versions of Windows and can happen if
      // the consumer is providing a polyfilled `Map`. See:
      // https://github.com/Microsoft/ChakraCore/issues/3189
      // https://github.com/angular/components/issues/15687

      try {
        hasV8BreakIterator = typeof Intl !== 'undefined' && Intl.v8BreakIterator;
      } catch (_a) {
        hasV8BreakIterator = false;
      }
      /**
       * Service to detect the current platform by comparing the userAgent strings and
       * checking browser-specific global properties.
       */


      var Platform = function Platform(_platformId) {
        _classCallCheck2(this, Platform);

        this._platformId = _platformId; // We want to use the Angular platform check because if the Document is shimmed
        // without the navigator, the following checks will fail. This is preferred because
        // sometimes the Document may be shimmed without the user's knowledge or intention

        /** Whether the Angular application is being rendered in the browser. */

        this.isBrowser = this._platformId ? Object(_angular_common__WEBPACK_IMPORTED_MODULE_1__["isPlatformBrowser"])(this._platformId) : typeof document === 'object' && !!document;
        /** Whether the current browser is Microsoft Edge. */

        this.EDGE = this.isBrowser && /(edge)/i.test(navigator.userAgent);
        /** Whether the current rendering engine is Microsoft Trident. */

        this.TRIDENT = this.isBrowser && /(msie|trident)/i.test(navigator.userAgent); // EdgeHTML and Trident mock Blink specific things and need to be excluded from this check.

        /** Whether the current rendering engine is Blink. */

        this.BLINK = this.isBrowser && !!(window.chrome || hasV8BreakIterator) && typeof CSS !== 'undefined' && !this.EDGE && !this.TRIDENT; // Webkit is part of the userAgent in EdgeHTML, Blink and Trident. Therefore we need to
        // ensure that Webkit runs standalone and is not used as another engine's base.

        /** Whether the current rendering engine is WebKit. */

        this.WEBKIT = this.isBrowser && /AppleWebKit/i.test(navigator.userAgent) && !this.BLINK && !this.EDGE && !this.TRIDENT;
        /** Whether the current platform is Apple iOS. */

        this.IOS = this.isBrowser && /iPad|iPhone|iPod/.test(navigator.userAgent) && !('MSStream' in window); // It's difficult to detect the plain Gecko engine, because most of the browsers identify
        // them self as Gecko-like browsers and modify the userAgent's according to that.
        // Since we only cover one explicit Firefox case, we can simply check for Firefox
        // instead of having an unstable check for Gecko.

        /** Whether the current browser is Firefox. */

        this.FIREFOX = this.isBrowser && /(firefox|minefield)/i.test(navigator.userAgent);
        /** Whether the current platform is Android. */
        // Trident on mobile adds the android platform to the userAgent to trick detections.

        this.ANDROID = this.isBrowser && /android/i.test(navigator.userAgent) && !this.TRIDENT; // Safari browsers will include the Safari keyword in their userAgent. Some browsers may fake
        // this and just place the Safari keyword in the userAgent. To be more safe about Safari every
        // Safari browser should also use Webkit as its layout engine.

        /** Whether the current browser is Safari. */

        this.SAFARI = this.isBrowser && /safari/i.test(navigator.userAgent) && this.WEBKIT;
      };

      Platform.ɵfac = function Platform_Factory(t) {
        return new (t || Platform)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]));
      };

      Platform.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({
        factory: function Platform_Factory() {
          return new Platform(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]));
        },
        token: Platform,
        providedIn: "root"
      });

      Platform.ctorParameters = function () {
        return [{
          type: Object,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](Platform, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: Object,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var PlatformModule = function PlatformModule() {
        _classCallCheck2(this, PlatformModule);
      };

      PlatformModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: PlatformModule
      });
      PlatformModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function PlatformModule_Factory(t) {
          return new (t || PlatformModule)();
        }
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](PlatformModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{}]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Cached result Set of input types support by the current browser. */


      var supportedInputTypes;
      /** Types of `<input>` that *might* be supported. */

      var candidateInputTypes = [// `color` must come first. Chrome 56 shows a warning if we change the type to `color` after
      // first changing it to something else:
      // The specified value "" does not conform to the required format.
      // The format is "#rrggbb" where rr, gg, bb are two-digit hexadecimal numbers.
      'color', 'button', 'checkbox', 'date', 'datetime-local', 'email', 'file', 'hidden', 'image', 'month', 'number', 'password', 'radio', 'range', 'reset', 'search', 'submit', 'tel', 'text', 'time', 'url', 'week'];
      /** @returns The input types supported by this browser. */

      function getSupportedInputTypes() {
        // Result is cached.
        if (supportedInputTypes) {
          return supportedInputTypes;
        } // We can't check if an input type is not supported until we're on the browser, so say that
        // everything is supported when not on the browser. We don't use `Platform` here since it's
        // just a helper function and can't inject it.


        if (typeof document !== 'object' || !document) {
          supportedInputTypes = new Set(candidateInputTypes);
          return supportedInputTypes;
        }

        var featureTestInput = document.createElement('input');
        supportedInputTypes = new Set(candidateInputTypes.filter(function (value) {
          featureTestInput.setAttribute('type', value);
          return featureTestInput.type === value;
        }));
        return supportedInputTypes;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Cached result of whether the user's browser supports passive event listeners. */


      var supportsPassiveEvents;
      /**
       * Checks whether the user's browser supports passive event listeners.
       * See: https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md
       */

      function supportsPassiveEventListeners() {
        if (supportsPassiveEvents == null && typeof window !== 'undefined') {
          try {
            window.addEventListener('test', null, Object.defineProperty({}, 'passive', {
              get: function get() {
                return supportsPassiveEvents = true;
              }
            }));
          } finally {
            supportsPassiveEvents = supportsPassiveEvents || false;
          }
        }

        return supportsPassiveEvents;
      }
      /**
       * Normalizes an `AddEventListener` object to something that can be passed
       * to `addEventListener` on any browser, no matter whether it supports the
       * `options` parameter.
       * @param options Object to be normalized.
       */


      function normalizePassiveListenerOptions(options) {
        return supportsPassiveEventListeners() ? options : !!options.capture;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Cached result of the way the browser handles the horizontal scroll axis in RTL mode. */


      var rtlScrollAxisType;
      /** Cached result of the check that indicates whether the browser supports scroll behaviors. */

      var scrollBehaviorSupported;
      /** Check whether the browser supports scroll behaviors. */

      function supportsScrollBehavior() {
        if (scrollBehaviorSupported == null) {
          // If we're not in the browser, it can't be supported.
          if (typeof document !== 'object' || !document) {
            scrollBehaviorSupported = false;
            return scrollBehaviorSupported;
          } // If the element can have a `scrollBehavior` style, we can be sure that it's supported.


          if ('scrollBehavior' in document.documentElement.style) {
            scrollBehaviorSupported = true;
          } else {
            // At this point we have 3 possibilities: `scrollTo` isn't supported at all, it's
            // supported but it doesn't handle scroll behavior, or it has been polyfilled.
            var scrollToFunction = Element.prototype.scrollTo;

            if (scrollToFunction) {
              // We can detect if the function has been polyfilled by calling `toString` on it. Native
              // functions are obfuscated using `[native code]`, whereas if it was overwritten we'd get
              // the actual function source. Via https://davidwalsh.name/detect-native-function. Consider
              // polyfilled functions as supporting scroll behavior.
              scrollBehaviorSupported = !/\{\s*\[native code\]\s*\}/.test(scrollToFunction.toString());
            } else {
              scrollBehaviorSupported = false;
            }
          }
        }

        return scrollBehaviorSupported;
      }
      /**
       * Checks the type of RTL scroll axis used by this browser. As of time of writing, Chrome is NORMAL,
       * Firefox & Safari are NEGATED, and IE & Edge are INVERTED.
       */


      function getRtlScrollAxisType() {
        // We can't check unless we're on the browser. Just assume 'normal' if we're not.
        if (typeof document !== 'object' || !document) {
          return 0
          /* NORMAL */
          ;
        }

        if (rtlScrollAxisType == null) {
          // Create a 1px wide scrolling container and a 2px wide content element.
          var scrollContainer = document.createElement('div');
          var containerStyle = scrollContainer.style;
          scrollContainer.dir = 'rtl';
          containerStyle.width = '1px';
          containerStyle.overflow = 'auto';
          containerStyle.visibility = 'hidden';
          containerStyle.pointerEvents = 'none';
          containerStyle.position = 'absolute';
          var content = document.createElement('div');
          var contentStyle = content.style;
          contentStyle.width = '2px';
          contentStyle.height = '1px';
          scrollContainer.appendChild(content);
          document.body.appendChild(scrollContainer);
          rtlScrollAxisType = 0
          /* NORMAL */
          ; // The viewport starts scrolled all the way to the right in RTL mode. If we are in a NORMAL
          // browser this would mean that the scrollLeft should be 1. If it's zero instead we know we're
          // dealing with one of the other two types of browsers.

          if (scrollContainer.scrollLeft === 0) {
            // In a NEGATED browser the scrollLeft is always somewhere in [-maxScrollAmount, 0]. For an
            // INVERTED browser it is always somewhere in [0, maxScrollAmount]. We can determine which by
            // setting to the scrollLeft to 1. This is past the max for a NEGATED browser, so it will
            // return 0 when we read it again.
            scrollContainer.scrollLeft = 1;
            rtlScrollAxisType = scrollContainer.scrollLeft === 0 ? 1
            /* NEGATED */
            : 2
            /* INVERTED */
            ;
          }

          scrollContainer.parentNode.removeChild(scrollContainer);
        }

        return rtlScrollAxisType;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var shadowDomIsSupported;
      /** Checks whether the user's browser support Shadow DOM. */

      function _supportsShadowDom() {
        if (shadowDomIsSupported == null) {
          var head = typeof document !== 'undefined' ? document.head : null;
          shadowDomIsSupported = !!(head && (head.createShadowRoot || head.attachShadow));
        }

        return shadowDomIsSupported;
      }
      /** Gets the shadow root of an element, if supported and the element is inside the Shadow DOM. */


      function _getShadowRoot(element) {
        if (_supportsShadowDom()) {
          var rootNode = element.getRootNode ? element.getRootNode() : null; // Note that this should be caught by `_supportsShadowDom`, but some
          // teams have been able to hit this code path on unsupported browsers.

          if (typeof ShadowRoot !== 'undefined' && ShadowRoot && rootNode instanceof ShadowRoot) {
            return rootNode;
          }
        }

        return null;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=platform.js.map

      /***/

    },

    /***/
    "nXTE":
    /*!*********************************************************!*\
      !*** ./node_modules/aws-sdk/node_modules/uuid/index.js ***!
      \*********************************************************/

    /*! no static exports found */

    /***/
    function nXTE(module, exports, __webpack_require__) {
      var v1 = __webpack_require__(
      /*! ./v1 */
      "NODT");

      var v4 = __webpack_require__(
      /*! ./v4 */
      "sImd");

      var uuid = v4;
      uuid.v1 = v1;
      uuid.v4 = v4;
      module.exports = uuid;
      /***/
    },

    /***/
    "nYR2":
    /*!*******************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/finalize.js ***!
      \*******************************************************************/

    /*! exports provided: finalize */

    /***/
    function nYR2(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "finalize", function () {
        return finalize;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");
      /* harmony import */


      var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../Subscription */
      "quSY");

      function finalize(callback) {
        return function (source) {
          return source.lift(new FinallyOperator(callback));
        };
      }

      var FinallyOperator = /*#__PURE__*/function () {
        function FinallyOperator(callback) {
          _classCallCheck2(this, FinallyOperator);

          this.callback = callback;
        }

        _createClass2(FinallyOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new FinallySubscriber(subscriber, this.callback));
          }
        }]);

        return FinallyOperator;
      }();

      var FinallySubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_40) {
        _inherits2(FinallySubscriber, _Subscriber__WEBPACK_40);

        var _super348 = _createSuper(FinallySubscriber);

        function FinallySubscriber(destination, callback) {
          var _this817;

          _classCallCheck2(this, FinallySubscriber);

          _this817 = _super348.call(this, destination);

          _this817.add(new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"](callback));

          return _this817;
        }

        return FinallySubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=finalize.js.map

      /***/

    },

    /***/
    "ngJS":
    /*!**********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/subscribeToArray.js ***!
      \**********************************************************************/

    /*! exports provided: subscribeToArray */

    /***/
    function ngJS(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "subscribeToArray", function () {
        return subscribeToArray;
      });

      var subscribeToArray = function subscribeToArray(array) {
        return function (subscriber) {
          for (var i = 0, len = array.length; i < len && !subscriber.closed; i++) {
            subscriber.next(array[i]);
          }

          subscriber.complete();
        };
      }; //# sourceMappingURL=subscribeToArray.js.map

      /***/

    },

    /***/
    "njyG":
    /*!***************************************************************!*\
      !*** ./node_modules/angular-datatables/__ivy_ngcc__/index.js ***!
      \***************************************************************/

    /*! exports provided: DataTableDirective, DataTablesModule */

    /***/
    function njyG(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony import */


      var _src_angular_datatables_directive__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./src/angular-datatables.directive */
      "/iSe");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "DataTableDirective", function () {
        return _src_angular_datatables_directive__WEBPACK_IMPORTED_MODULE_0__["DataTableDirective"];
      });
      /* harmony import */


      var _src_angular_datatables_module__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./src/angular-datatables.module */
      "HO/X");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "DataTablesModule", function () {
        return _src_angular_datatables_module__WEBPACK_IMPORTED_MODULE_1__["DataTablesModule"];
      });
      /**
       * @license
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://raw.githubusercontent.com/l-lin/angular-datatables/master/LICENSE
       */

      /**
       * @module
       * @description
       * Entry point from which you should import all public library APIs.
       */
      //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sLWxpbi9hbmd1bGFyLWRhdGF0YWJsZXMvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuLyoqXG4gKiBAbW9kdWxlXG4gKiBAZGVzY3JpcHRpb25cbiAqIEVudHJ5IHBvaW50IGZyb20gd2hpY2ggeW91IHNob3VsZCBpbXBvcnQgYWxsIHB1YmxpYyBsaWJyYXJ5IEFQSXMuXG4gKi9cbmV4cG9ydCB7IERhdGFUYWJsZURpcmVjdGl2ZSB9IGZyb20gJy4vc3JjL2FuZ3VsYXItZGF0YXRhYmxlcy5kaXJlY3RpdmUnO1xuZXhwb3J0IHsgRGF0YVRhYmxlc01vZHVsZSB9IGZyb20gJy4vc3JjL2FuZ3VsYXItZGF0YXRhYmxlcy5tb2R1bGUnO1xuIl19

      /***/

    },

    /***/
    "nyFZ":
    /*!*************************************************!*\
      !*** ./node_modules/aws-sdk/lib/model/shape.js ***!
      \*************************************************/

    /*! no static exports found */

    /***/
    function nyFZ(module, exports, __webpack_require__) {
      var Collection = __webpack_require__(
      /*! ./collection */
      "T0AB");

      var util = __webpack_require__(
      /*! ../util */
      "BaN1");

      function property(obj, name, value) {
        if (value !== null && value !== undefined) {
          util.property.apply(this, arguments);
        }
      }

      function memoizedProperty(obj, name) {
        if (!obj.constructor.prototype[name]) {
          util.memoizedProperty.apply(this, arguments);
        }
      }

      function Shape(shape, options, memberName) {
        options = options || {};
        property(this, 'shape', shape.shape);
        property(this, 'api', options.api, false);
        property(this, 'type', shape.type);
        property(this, 'enum', shape["enum"]);
        property(this, 'min', shape.min);
        property(this, 'max', shape.max);
        property(this, 'pattern', shape.pattern);
        property(this, 'location', shape.location || this.location || 'body');
        property(this, 'name', this.name || shape.xmlName || shape.queryName || shape.locationName || memberName);
        property(this, 'isStreaming', shape.streaming || this.isStreaming || false);
        property(this, 'requiresLength', shape.requiresLength, false);
        property(this, 'isComposite', shape.isComposite || false);
        property(this, 'isShape', true, false);
        property(this, 'isQueryName', Boolean(shape.queryName), false);
        property(this, 'isLocationName', Boolean(shape.locationName), false);
        property(this, 'isIdempotent', shape.idempotencyToken === true);
        property(this, 'isJsonValue', shape.jsonvalue === true);
        property(this, 'isSensitive', shape.sensitive === true || shape.prototype && shape.prototype.sensitive === true);
        property(this, 'isEventStream', Boolean(shape.eventstream), false);
        property(this, 'isEvent', Boolean(shape.event), false);
        property(this, 'isEventPayload', Boolean(shape.eventpayload), false);
        property(this, 'isEventHeader', Boolean(shape.eventheader), false);
        property(this, 'isTimestampFormatSet', Boolean(shape.timestampFormat) || shape.prototype && shape.prototype.isTimestampFormatSet === true, false);
        property(this, 'endpointDiscoveryId', Boolean(shape.endpointdiscoveryid), false);
        property(this, 'hostLabel', Boolean(shape.hostLabel), false);

        if (options.documentation) {
          property(this, 'documentation', shape.documentation);
          property(this, 'documentationUrl', shape.documentationUrl);
        }

        if (shape.xmlAttribute) {
          property(this, 'isXmlAttribute', shape.xmlAttribute || false);
        } // type conversion and parsing


        property(this, 'defaultValue', null);

        this.toWireFormat = function (value) {
          if (value === null || value === undefined) return '';
          return value;
        };

        this.toType = function (value) {
          return value;
        };
      }
      /**
       * @api private
       */


      Shape.normalizedTypes = {
        character: 'string',
        "double": 'float',
        "long": 'integer',
        "short": 'integer',
        biginteger: 'integer',
        bigdecimal: 'float',
        blob: 'binary'
      };
      /**
       * @api private
       */

      Shape.types = {
        'structure': StructureShape,
        'list': ListShape,
        'map': MapShape,
        'boolean': BooleanShape,
        'timestamp': TimestampShape,
        'float': FloatShape,
        'integer': IntegerShape,
        'string': StringShape,
        'base64': Base64Shape,
        'binary': BinaryShape
      };

      Shape.resolve = function resolve(shape, options) {
        if (shape.shape) {
          var refShape = options.api.shapes[shape.shape];

          if (!refShape) {
            throw new Error('Cannot find shape reference: ' + shape.shape);
          }

          return refShape;
        } else {
          return null;
        }
      };

      Shape.create = function create(shape, options, memberName) {
        if (shape.isShape) return shape;
        var refShape = Shape.resolve(shape, options);

        if (refShape) {
          var filteredKeys = Object.keys(shape);

          if (!options.documentation) {
            filteredKeys = filteredKeys.filter(function (name) {
              return !name.match(/documentation/);
            });
          } // create an inline shape with extra members


          var InlineShape = function InlineShape() {
            refShape.constructor.call(this, shape, options, memberName);
          };

          InlineShape.prototype = refShape;
          return new InlineShape();
        } else {
          // set type if not set
          if (!shape.type) {
            if (shape.members) shape.type = 'structure';else if (shape.member) shape.type = 'list';else if (shape.key) shape.type = 'map';else shape.type = 'string';
          } // normalize types


          var origType = shape.type;

          if (Shape.normalizedTypes[shape.type]) {
            shape.type = Shape.normalizedTypes[shape.type];
          }

          if (Shape.types[shape.type]) {
            return new Shape.types[shape.type](shape, options, memberName);
          } else {
            throw new Error('Unrecognized shape type: ' + origType);
          }
        }
      };

      function CompositeShape(shape) {
        Shape.apply(this, arguments);
        property(this, 'isComposite', true);

        if (shape.flattened) {
          property(this, 'flattened', shape.flattened || false);
        }
      }

      function StructureShape(shape, options) {
        var self = this;
        var requiredMap = null,
            firstInit = !this.isShape;
        CompositeShape.apply(this, arguments);

        if (firstInit) {
          property(this, 'defaultValue', function () {
            return {};
          });
          property(this, 'members', {});
          property(this, 'memberNames', []);
          property(this, 'required', []);
          property(this, 'isRequired', function () {
            return false;
          });
        }

        if (shape.members) {
          property(this, 'members', new Collection(shape.members, options, function (name, member) {
            return Shape.create(member, options, name);
          }));
          memoizedProperty(this, 'memberNames', function () {
            return shape.xmlOrder || Object.keys(shape.members);
          });

          if (shape.event) {
            memoizedProperty(this, 'eventPayloadMemberName', function () {
              var members = self.members;
              var memberNames = self.memberNames; // iterate over members to find ones that are event payloads

              for (var i = 0, iLen = memberNames.length; i < iLen; i++) {
                if (members[memberNames[i]].isEventPayload) {
                  return memberNames[i];
                }
              }
            });
            memoizedProperty(this, 'eventHeaderMemberNames', function () {
              var members = self.members;
              var memberNames = self.memberNames;
              var eventHeaderMemberNames = []; // iterate over members to find ones that are event headers

              for (var i = 0, iLen = memberNames.length; i < iLen; i++) {
                if (members[memberNames[i]].isEventHeader) {
                  eventHeaderMemberNames.push(memberNames[i]);
                }
              }

              return eventHeaderMemberNames;
            });
          }
        }

        if (shape.required) {
          property(this, 'required', shape.required);
          property(this, 'isRequired', function (name) {
            if (!requiredMap) {
              requiredMap = {};

              for (var i = 0; i < shape.required.length; i++) {
                requiredMap[shape.required[i]] = true;
              }
            }

            return requiredMap[name];
          }, false, true);
        }

        property(this, 'resultWrapper', shape.resultWrapper || null);

        if (shape.payload) {
          property(this, 'payload', shape.payload);
        }

        if (typeof shape.xmlNamespace === 'string') {
          property(this, 'xmlNamespaceUri', shape.xmlNamespace);
        } else if (typeof shape.xmlNamespace === 'object') {
          property(this, 'xmlNamespacePrefix', shape.xmlNamespace.prefix);
          property(this, 'xmlNamespaceUri', shape.xmlNamespace.uri);
        }
      }

      function ListShape(shape, options) {
        var self = this,
            firstInit = !this.isShape;
        CompositeShape.apply(this, arguments);

        if (firstInit) {
          property(this, 'defaultValue', function () {
            return [];
          });
        }

        if (shape.member) {
          memoizedProperty(this, 'member', function () {
            return Shape.create(shape.member, options);
          });
        }

        if (this.flattened) {
          var oldName = this.name;
          memoizedProperty(this, 'name', function () {
            return self.member.name || oldName;
          });
        }
      }

      function MapShape(shape, options) {
        var firstInit = !this.isShape;
        CompositeShape.apply(this, arguments);

        if (firstInit) {
          property(this, 'defaultValue', function () {
            return {};
          });
          property(this, 'key', Shape.create({
            type: 'string'
          }, options));
          property(this, 'value', Shape.create({
            type: 'string'
          }, options));
        }

        if (shape.key) {
          memoizedProperty(this, 'key', function () {
            return Shape.create(shape.key, options);
          });
        }

        if (shape.value) {
          memoizedProperty(this, 'value', function () {
            return Shape.create(shape.value, options);
          });
        }
      }

      function TimestampShape(shape) {
        var self = this;
        Shape.apply(this, arguments);

        if (shape.timestampFormat) {
          property(this, 'timestampFormat', shape.timestampFormat);
        } else if (self.isTimestampFormatSet && this.timestampFormat) {
          property(this, 'timestampFormat', this.timestampFormat);
        } else if (this.location === 'header') {
          property(this, 'timestampFormat', 'rfc822');
        } else if (this.location === 'querystring') {
          property(this, 'timestampFormat', 'iso8601');
        } else if (this.api) {
          switch (this.api.protocol) {
            case 'json':
            case 'rest-json':
              property(this, 'timestampFormat', 'unixTimestamp');
              break;

            case 'rest-xml':
            case 'query':
            case 'ec2':
              property(this, 'timestampFormat', 'iso8601');
              break;
          }
        }

        this.toType = function (value) {
          if (value === null || value === undefined) return null;
          if (typeof value.toUTCString === 'function') return value;
          return typeof value === 'string' || typeof value === 'number' ? util.date.parseTimestamp(value) : null;
        };

        this.toWireFormat = function (value) {
          return util.date.format(value, self.timestampFormat);
        };
      }

      function StringShape() {
        Shape.apply(this, arguments);
        var nullLessProtocols = ['rest-xml', 'query', 'ec2'];

        this.toType = function (value) {
          value = this.api && nullLessProtocols.indexOf(this.api.protocol) > -1 ? value || '' : value;

          if (this.isJsonValue) {
            return JSON.parse(value);
          }

          return value && typeof value.toString === 'function' ? value.toString() : value;
        };

        this.toWireFormat = function (value) {
          return this.isJsonValue ? JSON.stringify(value) : value;
        };
      }

      function FloatShape() {
        Shape.apply(this, arguments);

        this.toType = function (value) {
          if (value === null || value === undefined) return null;
          return parseFloat(value);
        };

        this.toWireFormat = this.toType;
      }

      function IntegerShape() {
        Shape.apply(this, arguments);

        this.toType = function (value) {
          if (value === null || value === undefined) return null;
          return parseInt(value, 10);
        };

        this.toWireFormat = this.toType;
      }

      function BinaryShape() {
        Shape.apply(this, arguments);

        this.toType = function (value) {
          var buf = util.base64.decode(value);

          if (this.isSensitive && util.isNode() && typeof util.Buffer.alloc === 'function') {
            /* Node.js can create a Buffer that is not isolated.
             * i.e. buf.byteLength !== buf.buffer.byteLength
             * This means that the sensitive data is accessible to anyone with access to buf.buffer.
             * If this is the node shared Buffer, then other code within this process _could_ find this secret.
             * Copy sensitive data to an isolated Buffer and zero the sensitive data.
             * While this is safe to do here, copying this code somewhere else may produce unexpected results.
             */
            var secureBuf = util.Buffer.alloc(buf.length, buf);
            buf.fill(0);
            buf = secureBuf;
          }

          return buf;
        };

        this.toWireFormat = util.base64.encode;
      }

      function Base64Shape() {
        BinaryShape.apply(this, arguments);
      }

      function BooleanShape() {
        Shape.apply(this, arguments);

        this.toType = function (value) {
          if (typeof value === 'boolean') return value;
          if (value === null || value === undefined) return null;
          return value === 'true';
        };
      }
      /**
       * @api private
       */


      Shape.shapes = {
        StructureShape: StructureShape,
        ListShape: ListShape,
        MapShape: MapShape,
        StringShape: StringShape,
        BooleanShape: BooleanShape,
        Base64Shape: Base64Shape
      };
      /**
       * @api private
       */

      module.exports = Shape;
      /***/
    },

    /***/
    "nyYc":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/fr.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function nyYc(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : French [fr]
      //! author : John Fischer : https://github.com/jfroffice
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var monthsStrictRegex = /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,
            monthsShortStrictRegex = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?)/i,
            monthsRegex = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,
            monthsParse = [/^janv/i, /^févr/i, /^mars/i, /^avr/i, /^mai/i, /^juin/i, /^juil/i, /^août/i, /^sept/i, /^oct/i, /^nov/i, /^déc/i];
        var fr = moment.defineLocale('fr', {
          months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
          monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
          monthsRegex: monthsRegex,
          monthsShortRegex: monthsRegex,
          monthsStrictRegex: monthsStrictRegex,
          monthsShortStrictRegex: monthsShortStrictRegex,
          monthsParse: monthsParse,
          longMonthsParse: monthsParse,
          shortMonthsParse: monthsParse,
          weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
          weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
          weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[Aujourd’hui à] LT',
            nextDay: '[Demain à] LT',
            nextWeek: 'dddd [à] LT',
            lastDay: '[Hier à] LT',
            lastWeek: 'dddd [dernier à] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'dans %s',
            past: 'il y a %s',
            s: 'quelques secondes',
            ss: '%d secondes',
            m: 'une minute',
            mm: '%d minutes',
            h: 'une heure',
            hh: '%d heures',
            d: 'un jour',
            dd: '%d jours',
            w: 'une semaine',
            ww: '%d semaines',
            M: 'un mois',
            MM: '%d mois',
            y: 'un an',
            yy: '%d ans'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(er|)/,
          ordinal: function ordinal(number, period) {
            switch (period) {
              // TODO: Return 'e' when day of month > 1. Move this case inside
              // block for masculine words below.
              // See https://github.com/moment/moment/issues/3375
              case 'D':
                return number + (number === 1 ? 'er' : '');
              // Words with masculine grammatical gender: mois, trimestre, jour

              default:
              case 'M':
              case 'Q':
              case 'DDD':
              case 'd':
                return number + (number === 1 ? 'er' : 'e');
              // Words with feminine grammatical gender: semaine

              case 'w':
              case 'W':
                return number + (number === 1 ? 're' : 'e');
            }
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return fr;
      });
      /***/

    },

    /***/
    "o1bE":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/ar-dz.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function o1bE(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Arabic (Algeria) [ar-dz]
      //! author : Amine Roukh: https://github.com/Amine27
      //! author : Abdel Said: https://github.com/abdelsaid
      //! author : Ahmed Elkhatib
      //! author : forabi https://github.com/forabi
      //! author : Noureddine LOUAHEDJ : https://github.com/noureddinem
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var pluralForm = function pluralForm(n) {
          return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
        },
            plurals = {
          s: ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
          m: ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
          h: ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
          d: ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
          M: ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
          y: ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
        },
            pluralize = function pluralize(u) {
          return function (number, withoutSuffix, string, isFuture) {
            var f = pluralForm(number),
                str = plurals[u][pluralForm(number)];

            if (f === 2) {
              str = str[withoutSuffix ? 0 : 1];
            }

            return str.replace(/%d/i, number);
          };
        },
            months = ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان', 'جويلية', 'أوت', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'];

        var arDz = moment.defineLocale('ar-dz', {
          months: months,
          monthsShort: months,
          weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
          weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
          weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: "D/\u200FM/\u200FYYYY",
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm'
          },
          meridiemParse: /ص|م/,
          isPM: function isPM(input) {
            return 'م' === input;
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 12) {
              return 'ص';
            } else {
              return 'م';
            }
          },
          calendar: {
            sameDay: '[اليوم عند الساعة] LT',
            nextDay: '[غدًا عند الساعة] LT',
            nextWeek: 'dddd [عند الساعة] LT',
            lastDay: '[أمس عند الساعة] LT',
            lastWeek: 'dddd [عند الساعة] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'بعد %s',
            past: 'منذ %s',
            s: pluralize('s'),
            ss: pluralize('s'),
            m: pluralize('m'),
            mm: pluralize('m'),
            h: pluralize('h'),
            hh: pluralize('h'),
            d: pluralize('d'),
            dd: pluralize('d'),
            M: pluralize('M'),
            MM: pluralize('M'),
            y: pluralize('y'),
            yy: pluralize('y')
          },
          postformat: function postformat(string) {
            return string.replace(/,/g, '،');
          },
          week: {
            dow: 0,
            // Sunday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return arDz;
      });
      /***/

    },

    /***/
    "oB13":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/multicast.js ***!
      \********************************************************************/

    /*! exports provided: multicast, MulticastOperator */

    /***/
    function oB13(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "multicast", function () {
        return multicast;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MulticastOperator", function () {
        return MulticastOperator;
      });
      /* harmony import */


      var _observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../observable/ConnectableObservable */
      "EQ5u");

      function multicast(subjectOrSubjectFactory, selector) {
        return function multicastOperatorFunction(source) {
          var subjectFactory;

          if (typeof subjectOrSubjectFactory === 'function') {
            subjectFactory = subjectOrSubjectFactory;
          } else {
            subjectFactory = function subjectFactory() {
              return subjectOrSubjectFactory;
            };
          }

          if (typeof selector === 'function') {
            return source.lift(new MulticastOperator(subjectFactory, selector));
          }

          var connectable = Object.create(source, _observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_0__["connectableObservableDescriptor"]);
          connectable.source = source;
          connectable.subjectFactory = subjectFactory;
          return connectable;
        };
      }

      var MulticastOperator = /*#__PURE__*/function () {
        function MulticastOperator(subjectFactory, selector) {
          _classCallCheck2(this, MulticastOperator);

          this.subjectFactory = subjectFactory;
          this.selector = selector;
        }

        _createClass2(MulticastOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            var selector = this.selector;
            var subject = this.subjectFactory();
            var subscription = selector(subject).subscribe(subscriber);
            subscription.add(source.subscribe(subject));
            return subscription;
          }
        }]);

        return MulticastOperator;
      }(); //# sourceMappingURL=multicast.js.map

      /***/

    },

    /***/
    "oGmC":
    /*!******************************************************!*\
      !*** ./node_modules/aws-sdk/lib/browserHashUtils.js ***!
      \******************************************************/

    /*! no static exports found */

    /***/
    function oGmC(module, exports, __webpack_require__) {
      var Buffer = __webpack_require__(
      /*! buffer/ */
      "tjlA").Buffer;
      /**
       * This is a polyfill for the static method `isView` of `ArrayBuffer`, which is
       * e.g. missing in IE 10.
       *
       * @api private
       */


      if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'undefined') {
        ArrayBuffer.isView = function (arg) {
          return viewStrings.indexOf(Object.prototype.toString.call(arg)) > -1;
        };
      }
      /**
       * @api private
       */


      var viewStrings = ['[object Int8Array]', '[object Uint8Array]', '[object Uint8ClampedArray]', '[object Int16Array]', '[object Uint16Array]', '[object Int32Array]', '[object Uint32Array]', '[object Float32Array]', '[object Float64Array]', '[object DataView]'];
      /**
       * @api private
       */

      function isEmptyData(data) {
        if (typeof data === 'string') {
          return data.length === 0;
        }

        return data.byteLength === 0;
      }
      /**
       * @api private
       */


      function convertToBuffer(data) {
        if (typeof data === 'string') {
          data = new Buffer(data, 'utf8');
        }

        if (ArrayBuffer.isView(data)) {
          return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);
        }

        return new Uint8Array(data);
      }
      /**
       * @api private
       */


      module.exports = exports = {
        isEmptyData: isEmptyData,
        convertToBuffer: convertToBuffer
      };
      /***/
    },

    /***/
    "oJLU":
    /*!*******************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/dialog/dialog-ref.class.js ***!
      \*******************************************************************************/

    /*! exports provided: OwlDialogRef */

    /***/
    function oJLU(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OwlDialogRef", function () {
        return OwlDialogRef;
      });
      /* harmony import */


      var _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/cdk/keycodes */
      "FtGj");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");

      var OwlDialogRef = function () {
        function OwlDialogRef(overlayRef, container, id, location) {
          var _this = this;

          this.overlayRef = overlayRef;
          this.container = container;
          this.id = id;
          this._beforeClose$ = new rxjs__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
          this._afterOpen$ = new rxjs__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
          this._afterClosed$ = new rxjs__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
          this.locationChanged = rxjs__WEBPACK_IMPORTED_MODULE_1__["Subscription"].EMPTY;
          this.disableClose = this.container.config.disableClose;
          this.container.animationStateChanged.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(function (event) {
            return event.phaseName === 'done' && event.toState === 'enter';
          }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["take"])(1)).subscribe(function () {
            _this._afterOpen$.next();

            _this._afterOpen$.complete();
          });
          this.container.animationStateChanged.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(function (event) {
            return event.phaseName === 'done' && event.toState === 'exit';
          }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["take"])(1)).subscribe(function () {
            _this.overlayRef.dispose();

            _this.locationChanged.unsubscribe();

            _this._afterClosed$.next(_this.result);

            _this._afterClosed$.complete();

            _this.componentInstance = null;
          });
          this.overlayRef.keydownEvents().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(function (event) {
            return event.keyCode === _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_0__["ESCAPE"] && !_this.disableClose;
          })).subscribe(function () {
            return _this.close();
          });

          if (location) {
            this.locationChanged = location.subscribe(function () {
              if (_this.container.config.closeOnNavigation) {
                _this.close();
              }
            });
          }
        }

        OwlDialogRef.prototype.close = function (dialogResult) {
          var _this = this;

          this.result = dialogResult;
          this.container.animationStateChanged.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(function (event) {
            return event.phaseName === 'start';
          }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["take"])(1)).subscribe(function () {
            _this._beforeClose$.next(dialogResult);

            _this._beforeClose$.complete();

            _this.overlayRef.detachBackdrop();
          });
          this.container.startExitAnimation();
        };

        OwlDialogRef.prototype.backdropClick = function () {
          return this.overlayRef.backdropClick();
        };

        OwlDialogRef.prototype.keydownEvents = function () {
          return this.overlayRef.keydownEvents();
        };

        OwlDialogRef.prototype.updatePosition = function (position) {
          var strategy = this.getPositionStrategy();

          if (position && (position.left || position.right)) {
            position.left ? strategy.left(position.left) : strategy.right(position.right);
          } else {
            strategy.centerHorizontally();
          }

          if (position && (position.top || position.bottom)) {
            position.top ? strategy.top(position.top) : strategy.bottom(position.bottom);
          } else {
            strategy.centerVertically();
          }

          this.overlayRef.updatePosition();
          return this;
        };

        OwlDialogRef.prototype.updateSize = function (width, height) {
          if (width === void 0) {
            width = 'auto';
          }

          if (height === void 0) {
            height = 'auto';
          }

          this.getPositionStrategy().width(width).height(height);
          this.overlayRef.updatePosition();
          return this;
        };

        OwlDialogRef.prototype.isAnimating = function () {
          return this.container.isAnimating;
        };

        OwlDialogRef.prototype.afterOpen = function () {
          return this._afterOpen$.asObservable();
        };

        OwlDialogRef.prototype.beforeClose = function () {
          return this._beforeClose$.asObservable();
        };

        OwlDialogRef.prototype.afterClosed = function () {
          return this._afterClosed$.asObservable();
        };

        OwlDialogRef.prototype.getPositionStrategy = function () {
          return this.overlayRef.getConfig().positionStrategy;
        };

        return OwlDialogRef;
      }();
      /***/

    },

    /***/
    "oKox":
    /*!***************************************************************************************!*\
      !*** ./node_modules/@ngx-formly/core/__ivy_ngcc__/fesm2015/ngx-formly-core-select.js ***!
      \***************************************************************************************/

    /*! exports provided: FormlySelectModule, ɵa */

    /***/
    function oKox(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormlySelectModule", function () {
        return FormlySelectModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵa", function () {
        return FormlySelectOptionsPipe;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var FormlySelectOptionsPipe = /*#__PURE__*/function () {
        function FormlySelectOptionsPipe() {
          _classCallCheck2(this, FormlySelectOptionsPipe);
        }

        _createClass2(FormlySelectOptionsPipe, [{
          key: "transform",
          value:
          /**
           * @param {?} options
           * @param {?=} field
           * @return {?}
           */
          function transform(options, field) {
            var _this818 = this;

            if (!(options instanceof rxjs__WEBPACK_IMPORTED_MODULE_1__["Observable"])) {
              options = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["of"])(options);
            }

            return (
              /** @type {?} */
              options.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(
              /**
              * @param {?} value
              * @return {?}
              */
              function (value) {
                return _this818.toOptions(value, field || {});
              }))
            );
          }
          /**
           * @private
           * @param {?} options
           * @param {?} field
           * @return {?}
           */

        }, {
          key: "toOptions",
          value: function toOptions(options, field) {
            var _this819 = this;

            /** @type {?} */
            var gOptions = [];
            /** @type {?} */

            var groups = {};
            /** @type {?} */

            var to = field.templateOptions || {};
            to._flatOptions = true;
            options.map(
            /**
            * @param {?} option
            * @return {?}
            */
            function (option) {
              if (!_this819.getGroupProp(option, to)) {
                gOptions.push(_this819.toOption(option, to));
              } else {
                to._flatOptions = false;

                if (!groups[_this819.getGroupProp(option, to)]) {
                  groups[_this819.getGroupProp(option, to)] = [];
                  gOptions.push({
                    label: _this819.getGroupProp(option, to),
                    group: groups[_this819.getGroupProp(option, to)]
                  });
                }

                groups[_this819.getGroupProp(option, to)].push(_this819.toOption(option, to));
              }
            });
            return gOptions;
          }
          /**
           * @private
           * @param {?} item
           * @param {?} to
           * @return {?}
           */

        }, {
          key: "toOption",
          value: function toOption(item, to) {
            return {
              label: this.getLabelProp(item, to),
              value: this.getValueProp(item, to),
              disabled: this.getDisabledProp(item, to) || false
            };
          }
          /**
           * @private
           * @param {?} item
           * @param {?} to
           * @return {?}
           */

        }, {
          key: "getLabelProp",
          value: function getLabelProp(item, to) {
            if (typeof to.labelProp === 'function') {
              return to.labelProp(item);
            }

            if (this.shouldUseLegacyOption(item, to)) {
              console.warn("NgxFormly: legacy select option '{key, value}' is deprecated since v5.5, use '{value, label}' instead.");
              return item.value;
            }

            return item[to.labelProp || 'label'];
          }
          /**
           * @private
           * @param {?} item
           * @param {?} to
           * @return {?}
           */

        }, {
          key: "getValueProp",
          value: function getValueProp(item, to) {
            if (typeof to.valueProp === 'function') {
              return to.valueProp(item);
            }

            if (this.shouldUseLegacyOption(item, to)) {
              return item.key;
            }

            return item[to.valueProp || 'value'];
          }
          /**
           * @private
           * @param {?} item
           * @param {?} to
           * @return {?}
           */

        }, {
          key: "getDisabledProp",
          value: function getDisabledProp(item, to) {
            if (typeof to.disabledProp === 'function') {
              return to.disabledProp(item);
            }

            return item[to.disabledProp || 'disabled'];
          }
          /**
           * @private
           * @param {?} item
           * @param {?} to
           * @return {?}
           */

        }, {
          key: "getGroupProp",
          value: function getGroupProp(item, to) {
            if (typeof to.groupProp === 'function') {
              return to.groupProp(item);
            }

            return item[to.groupProp || 'group'];
          }
          /**
           * @private
           * @param {?} item
           * @param {?} to
           * @return {?}
           */

        }, {
          key: "shouldUseLegacyOption",
          value: function shouldUseLegacyOption(item, to) {
            return !to.valueProp && !to.labelProp && item != null && typeof item === 'object' && 'key' in item && 'value' in item;
          }
        }]);

        return FormlySelectOptionsPipe;
      }();

      FormlySelectOptionsPipe.ɵfac = function FormlySelectOptionsPipe_Factory(t) {
        return new (t || FormlySelectOptionsPipe)();
      };

      FormlySelectOptionsPipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({
        name: "formlySelectOptions",
        type: FormlySelectOptionsPipe,
        pure: true
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FormlySelectOptionsPipe, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
          args: [{
            name: 'formlySelectOptions'
          }]
        }], null, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */


      var FormlySelectModule = function FormlySelectModule() {
        _classCallCheck2(this, FormlySelectModule);
      };

      FormlySelectModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: FormlySelectModule
      });
      FormlySelectModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function FormlySelectModule_Factory(t) {
          return new (t || FormlySelectModule)();
        }
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](FormlySelectModule, {
          declarations: [FormlySelectOptionsPipe],
          exports: [FormlySelectOptionsPipe]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FormlySelectModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            declarations: [FormlySelectOptionsPipe],
            exports: [FormlySelectOptionsPipe]
          }]
        }], null, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */
      //# sourceMappingURL=ngx-formly-core-select.js.map

      /***/

    },

    /***/
    "ofXK":
    /*!**********************************************************************!*\
      !*** ./node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js ***!
      \**********************************************************************/

    /*! exports provided: APP_BASE_HREF, AsyncPipe, CommonModule, CurrencyPipe, DOCUMENT, DatePipe, DecimalPipe, FormStyle, FormatWidth, HashLocationStrategy, I18nPluralPipe, I18nSelectPipe, JsonPipe, KeyValuePipe, LOCATION_INITIALIZED, Location, LocationStrategy, LowerCasePipe, NgClass, NgComponentOutlet, NgForOf, NgForOfContext, NgIf, NgIfContext, NgLocaleLocalization, NgLocalization, NgPlural, NgPluralCase, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgTemplateOutlet, NumberFormatStyle, NumberSymbol, PathLocationStrategy, PercentPipe, PlatformLocation, Plural, SlicePipe, TitleCasePipe, TranslationWidth, UpperCasePipe, VERSION, ViewportScroller, WeekDay, formatCurrency, formatDate, formatNumber, formatPercent, getCurrencySymbol, getLocaleCurrencyCode, getLocaleCurrencyName, getLocaleCurrencySymbol, getLocaleDateFormat, getLocaleDateTimeFormat, getLocaleDayNames, getLocaleDayPeriods, getLocaleDirection, getLocaleEraNames, getLocaleExtraDayPeriodRules, getLocaleExtraDayPeriods, getLocaleFirstDayOfWeek, getLocaleId, getLocaleMonthNames, getLocaleNumberFormat, getLocaleNumberSymbol, getLocalePluralCase, getLocaleTimeFormat, getLocaleWeekEndRange, getNumberOfCurrencyDigits, isPlatformBrowser, isPlatformServer, isPlatformWorkerApp, isPlatformWorkerUi, registerLocaleData, ɵBrowserPlatformLocation, ɵDomAdapter, ɵNullViewportScroller, ɵPLATFORM_BROWSER_ID, ɵPLATFORM_SERVER_ID, ɵPLATFORM_WORKER_APP_ID, ɵPLATFORM_WORKER_UI_ID, ɵangular_packages_common_common_a, ɵangular_packages_common_common_b, ɵangular_packages_common_common_c, ɵangular_packages_common_common_d, ɵangular_packages_common_common_e, ɵangular_packages_common_common_f, ɵgetDOM, ɵparseCookieValue, ɵsetRootDomAdapter */

    /***/
    function ofXK(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "APP_BASE_HREF", function () {
        return APP_BASE_HREF;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AsyncPipe", function () {
        return AsyncPipe;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CommonModule", function () {
        return CommonModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CurrencyPipe", function () {
        return CurrencyPipe;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DOCUMENT", function () {
        return DOCUMENT;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DatePipe", function () {
        return DatePipe;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DecimalPipe", function () {
        return DecimalPipe;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormStyle", function () {
        return FormStyle;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FormatWidth", function () {
        return FormatWidth;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HashLocationStrategy", function () {
        return HashLocationStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "I18nPluralPipe", function () {
        return I18nPluralPipe;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "I18nSelectPipe", function () {
        return I18nSelectPipe;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "JsonPipe", function () {
        return JsonPipe;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "KeyValuePipe", function () {
        return KeyValuePipe;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LOCATION_INITIALIZED", function () {
        return LOCATION_INITIALIZED;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Location", function () {
        return Location;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LocationStrategy", function () {
        return LocationStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LowerCasePipe", function () {
        return LowerCasePipe;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgClass", function () {
        return NgClass;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgComponentOutlet", function () {
        return NgComponentOutlet;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgForOf", function () {
        return NgForOf;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgForOfContext", function () {
        return NgForOfContext;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgIf", function () {
        return NgIf;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgIfContext", function () {
        return NgIfContext;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgLocaleLocalization", function () {
        return NgLocaleLocalization;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgLocalization", function () {
        return NgLocalization;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgPlural", function () {
        return NgPlural;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgPluralCase", function () {
        return NgPluralCase;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgStyle", function () {
        return NgStyle;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgSwitch", function () {
        return NgSwitch;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgSwitchCase", function () {
        return NgSwitchCase;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgSwitchDefault", function () {
        return NgSwitchDefault;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NgTemplateOutlet", function () {
        return NgTemplateOutlet;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NumberFormatStyle", function () {
        return NumberFormatStyle;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NumberSymbol", function () {
        return NumberSymbol;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PathLocationStrategy", function () {
        return PathLocationStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PercentPipe", function () {
        return PercentPipe;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PlatformLocation", function () {
        return PlatformLocation;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Plural", function () {
        return Plural;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SlicePipe", function () {
        return SlicePipe;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TitleCasePipe", function () {
        return TitleCasePipe;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TranslationWidth", function () {
        return TranslationWidth;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "UpperCasePipe", function () {
        return UpperCasePipe;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "VERSION", function () {
        return VERSION;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ViewportScroller", function () {
        return ViewportScroller;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "WeekDay", function () {
        return WeekDay;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "formatCurrency", function () {
        return formatCurrency;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "formatDate", function () {
        return formatDate;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "formatNumber", function () {
        return formatNumber;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "formatPercent", function () {
        return formatPercent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getCurrencySymbol", function () {
        return getCurrencySymbol;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getLocaleCurrencyCode", function () {
        return getLocaleCurrencyCode;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getLocaleCurrencyName", function () {
        return getLocaleCurrencyName;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getLocaleCurrencySymbol", function () {
        return getLocaleCurrencySymbol;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getLocaleDateFormat", function () {
        return getLocaleDateFormat;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getLocaleDateTimeFormat", function () {
        return getLocaleDateTimeFormat;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getLocaleDayNames", function () {
        return getLocaleDayNames;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getLocaleDayPeriods", function () {
        return getLocaleDayPeriods;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getLocaleDirection", function () {
        return getLocaleDirection;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getLocaleEraNames", function () {
        return getLocaleEraNames;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getLocaleExtraDayPeriodRules", function () {
        return getLocaleExtraDayPeriodRules;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getLocaleExtraDayPeriods", function () {
        return getLocaleExtraDayPeriods;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getLocaleFirstDayOfWeek", function () {
        return getLocaleFirstDayOfWeek;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getLocaleId", function () {
        return getLocaleId;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getLocaleMonthNames", function () {
        return getLocaleMonthNames;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getLocaleNumberFormat", function () {
        return getLocaleNumberFormat;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getLocaleNumberSymbol", function () {
        return getLocaleNumberSymbol;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getLocalePluralCase", function () {
        return getLocalePluralCase;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getLocaleTimeFormat", function () {
        return getLocaleTimeFormat;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getLocaleWeekEndRange", function () {
        return getLocaleWeekEndRange;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getNumberOfCurrencyDigits", function () {
        return getNumberOfCurrencyDigits;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isPlatformBrowser", function () {
        return isPlatformBrowser;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isPlatformServer", function () {
        return isPlatformServer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isPlatformWorkerApp", function () {
        return isPlatformWorkerApp;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isPlatformWorkerUi", function () {
        return isPlatformWorkerUi;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "registerLocaleData", function () {
        return registerLocaleData;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵBrowserPlatformLocation", function () {
        return BrowserPlatformLocation;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵDomAdapter", function () {
        return DomAdapter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵNullViewportScroller", function () {
        return NullViewportScroller;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵPLATFORM_BROWSER_ID", function () {
        return PLATFORM_BROWSER_ID;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵPLATFORM_SERVER_ID", function () {
        return PLATFORM_SERVER_ID;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵPLATFORM_WORKER_APP_ID", function () {
        return PLATFORM_WORKER_APP_ID;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵPLATFORM_WORKER_UI_ID", function () {
        return PLATFORM_WORKER_UI_ID;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_common_a", function () {
        return useBrowserPlatformLocation;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_common_b", function () {
        return createBrowserPlatformLocation;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_common_c", function () {
        return createLocation;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_common_d", function () {
        return provideLocationStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_common_e", function () {
        return COMMON_DIRECTIVES;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_common_f", function () {
        return COMMON_PIPES;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵgetDOM", function () {
        return getDOM;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵparseCookieValue", function () {
        return parseCookieValue;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵsetRootDomAdapter", function () {
        return setRootDomAdapter;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /**
       * @license Angular v12.0.0-next.1
       * (c) 2010-2020 Google LLC. https://angular.io/
       * License: MIT
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var _DOM = null;

      function getDOM() {
        return _DOM;
      }

      function setDOM(adapter) {
        _DOM = adapter;
      }

      function setRootDomAdapter(adapter) {
        if (!_DOM) {
          _DOM = adapter;
        }
      }
      /* tslint:disable:requireParameterType */

      /**
       * Provides DOM operations in an environment-agnostic way.
       *
       * @security Tread carefully! Interacting with the DOM directly is dangerous and
       * can introduce XSS risks.
       */


      var DomAdapter = function DomAdapter() {
        _classCallCheck2(this, DomAdapter);
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A DI Token representing the main rendering context. In a browser this is the DOM Document.
       *
       * Note: Document might not be available in the Application Context when Application and Rendering
       * Contexts are not the same (e.g. when running the application in a Web Worker).
       *
       * @publicApi
       */


      var DOCUMENT = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('DocumentToken');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * This class should not be used directly by an application developer. Instead, use
       * {@link Location}.
       *
       * `PlatformLocation` encapsulates all calls to DOM APIs, which allows the Router to be
       * platform-agnostic.
       * This means that we can have different implementation of `PlatformLocation` for the different
       * platforms that Angular supports. For example, `@angular/platform-browser` provides an
       * implementation specific to the browser environment, while `@angular/platform-server` provides
       * one suitable for use with server-side rendering.
       *
       * The `PlatformLocation` class is used directly by all implementations of {@link LocationStrategy}
       * when they need to interact with the DOM APIs like pushState, popState, etc.
       *
       * {@link LocationStrategy} in turn is used by the {@link Location} service which is used directly
       * by the {@link Router} in order to navigate between routes. Since all interactions between {@link
       * Router} /
       * {@link Location} / {@link LocationStrategy} and DOM APIs flow through the `PlatformLocation`
       * class, they are all platform-agnostic.
       *
       * @publicApi
       */

      var PlatformLocation = function PlatformLocation() {
        _classCallCheck2(this, PlatformLocation);
      };

      PlatformLocation.ɵfac = function PlatformLocation_Factory(t) {
        return new (t || PlatformLocation)();
      };

      PlatformLocation.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({
        factory: useBrowserPlatformLocation,
        token: PlatformLocation,
        providedIn: "platform"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](PlatformLocation, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'platform',
            // See #23917
            useFactory: useBrowserPlatformLocation
          }]
        }], null, null);
      })();

      function useBrowserPlatformLocation() {
        return Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(BrowserPlatformLocation);
      }
      /**
       * @description
       * Indicates when a location is initialized.
       *
       * @publicApi
       */


      var LOCATION_INITIALIZED = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('Location Initialized');
      /**
       * `PlatformLocation` encapsulates all of the direct calls to platform APIs.
       * This class should not be used directly by an application developer. Instead, use
       * {@link Location}.
       */

      var BrowserPlatformLocation = /*#__PURE__*/function (_PlatformLocation) {
        _inherits2(BrowserPlatformLocation, _PlatformLocation);

        var _super349 = _createSuper(BrowserPlatformLocation);

        function BrowserPlatformLocation(_doc) {
          var _this820;

          _classCallCheck2(this, BrowserPlatformLocation);

          _this820 = _super349.call(this);
          _this820._doc = _doc;

          _this820._init();

          return _this820;
        } // This is moved to its own method so that `MockPlatformLocationStrategy` can overwrite it

        /** @internal */


        _createClass2(BrowserPlatformLocation, [{
          key: "_init",
          value: function _init() {
            this.location = getDOM().getLocation();
            this._history = getDOM().getHistory();
          }
        }, {
          key: "getBaseHrefFromDOM",
          value: function getBaseHrefFromDOM() {
            return getDOM().getBaseHref(this._doc);
          }
        }, {
          key: "onPopState",
          value: function onPopState(fn) {
            getDOM().getGlobalEventTarget(this._doc, 'window').addEventListener('popstate', fn, false);
          }
        }, {
          key: "onHashChange",
          value: function onHashChange(fn) {
            getDOM().getGlobalEventTarget(this._doc, 'window').addEventListener('hashchange', fn, false);
          }
        }, {
          key: "href",
          get: function get() {
            return this.location.href;
          }
        }, {
          key: "protocol",
          get: function get() {
            return this.location.protocol;
          }
        }, {
          key: "hostname",
          get: function get() {
            return this.location.hostname;
          }
        }, {
          key: "port",
          get: function get() {
            return this.location.port;
          }
        }, {
          key: "pathname",
          get: function get() {
            return this.location.pathname;
          },
          set: function set(newPath) {
            this.location.pathname = newPath;
          }
        }, {
          key: "search",
          get: function get() {
            return this.location.search;
          }
        }, {
          key: "hash",
          get: function get() {
            return this.location.hash;
          }
        }, {
          key: "pushState",
          value: function pushState(state, title, url) {
            if (supportsState()) {
              this._history.pushState(state, title, url);
            } else {
              this.location.hash = url;
            }
          }
        }, {
          key: "replaceState",
          value: function replaceState(state, title, url) {
            if (supportsState()) {
              this._history.replaceState(state, title, url);
            } else {
              this.location.hash = url;
            }
          }
        }, {
          key: "forward",
          value: function forward() {
            this._history.forward();
          }
        }, {
          key: "back",
          value: function back() {
            this._history.back();
          }
        }, {
          key: "getState",
          value: function getState() {
            return this._history.state;
          }
        }]);

        return BrowserPlatformLocation;
      }(PlatformLocation);

      BrowserPlatformLocation.ɵfac = function BrowserPlatformLocation_Factory(t) {
        return new (t || BrowserPlatformLocation)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](DOCUMENT));
      };

      BrowserPlatformLocation.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({
        factory: createBrowserPlatformLocation,
        token: BrowserPlatformLocation,
        providedIn: "platform"
      });

      BrowserPlatformLocation.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [DOCUMENT]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BrowserPlatformLocation, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'platform',
            // See #23917
            useFactory: createBrowserPlatformLocation
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [DOCUMENT]
            }]
          }];
        }, null);
      })();

      function supportsState() {
        return !!window.history.pushState;
      }

      function createBrowserPlatformLocation() {
        return new BrowserPlatformLocation(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(DOCUMENT));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Joins two parts of a URL with a slash if needed.
       *
       * @param start  URL string
       * @param end    URL string
       *
       *
       * @returns The joined URL string.
       */


      function joinWithSlash(start, end) {
        if (start.length == 0) {
          return end;
        }

        if (end.length == 0) {
          return start;
        }

        var slashes = 0;

        if (start.endsWith('/')) {
          slashes++;
        }

        if (end.startsWith('/')) {
          slashes++;
        }

        if (slashes == 2) {
          return start + end.substring(1);
        }

        if (slashes == 1) {
          return start + end;
        }

        return start + '/' + end;
      }
      /**
       * Removes a trailing slash from a URL string if needed.
       * Looks for the first occurrence of either `#`, `?`, or the end of the
       * line as `/` characters and removes the trailing slash if one exists.
       *
       * @param url URL string.
       *
       * @returns The URL string, modified if needed.
       */


      function stripTrailingSlash(url) {
        var match = url.match(/#|\?|$/);
        var pathEndIdx = match && match.index || url.length;
        var droppedSlashIdx = pathEndIdx - (url[pathEndIdx - 1] === '/' ? 1 : 0);
        return url.slice(0, droppedSlashIdx) + url.slice(pathEndIdx);
      }
      /**
       * Normalizes URL parameters by prepending with `?` if needed.
       *
       * @param  params String of URL parameters.
       *
       * @returns The normalized URL parameters string.
       */


      function normalizeQueryParams(params) {
        return params && params[0] !== '?' ? '?' + params : params;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Enables the `Location` service to read route state from the browser's URL.
       * Angular provides two strategies:
       * `HashLocationStrategy` and `PathLocationStrategy`.
       *
       * Applications should use the `Router` or `Location` services to
       * interact with application route state.
       *
       * For instance, `HashLocationStrategy` produces URLs like
       * <code class="no-auto-link">http://example.com#/foo</code>,
       * and `PathLocationStrategy` produces
       * <code class="no-auto-link">http://example.com/foo</code> as an equivalent URL.
       *
       * See these two classes for more.
       *
       * @publicApi
       */


      var LocationStrategy = function LocationStrategy() {
        _classCallCheck2(this, LocationStrategy);
      };

      LocationStrategy.ɵfac = function LocationStrategy_Factory(t) {
        return new (t || LocationStrategy)();
      };

      LocationStrategy.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({
        factory: provideLocationStrategy,
        token: LocationStrategy,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](LocationStrategy, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root',
            useFactory: provideLocationStrategy
          }]
        }], null, null);
      })();

      function provideLocationStrategy(platformLocation) {
        // See #23917
        var location = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(DOCUMENT).location;
        return new PathLocationStrategy(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(PlatformLocation), location && location.origin || '');
      }
      /**
       * A predefined [DI token](guide/glossary#di-token) for the base href
       * to be used with the `PathLocationStrategy`.
       * The base href is the URL prefix that should be preserved when generating
       * and recognizing URLs.
       *
       * @usageNotes
       *
       * The following example shows how to use this token to configure the root app injector
       * with a base href value, so that the DI framework can supply the dependency anywhere in the app.
       *
       * ```typescript
       * import {Component, NgModule} from '@angular/core';
       * import {APP_BASE_HREF} from '@angular/common';
       *
       * @NgModule({
       *   providers: [{provide: APP_BASE_HREF, useValue: '/my/app'}]
       * })
       * class AppModule {}
       * ```
       *
       * @publicApi
       */


      var APP_BASE_HREF = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('appBaseHref');
      /**
       * @description
       * A {@link LocationStrategy} used to configure the {@link Location} service to
       * represent its state in the
       * [path](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax) of the
       * browser's URL.
       *
       * If you're using `PathLocationStrategy`, you must provide a {@link APP_BASE_HREF}
       * or add a `<base href>` element to the document.
       *
       * For instance, if you provide an `APP_BASE_HREF` of `'/my/app/'` and call
       * `location.go('/foo')`, the browser's URL will become
       * `example.com/my/app/foo`. To ensure all relative URIs resolve correctly,
       * the `<base href>` and/or `APP_BASE_HREF` should end with a `/`.
       *
       * Similarly, if you add `<base href='/my/app/'/>` to the document and call
       * `location.go('/foo')`, the browser's URL will become
       * `example.com/my/app/foo`.
       *
       * Note that when using `PathLocationStrategy`, neither the query nor
       * the fragment in the `<base href>` will be preserved, as outlined
       * by the [RFC](https://tools.ietf.org/html/rfc3986#section-5.2.2).
       *
       * @usageNotes
       *
       * ### Example
       *
       * {@example common/location/ts/path_location_component.ts region='LocationComponent'}
       *
       * @publicApi
       */

      var PathLocationStrategy = /*#__PURE__*/function (_LocationStrategy) {
        _inherits2(PathLocationStrategy, _LocationStrategy);

        var _super350 = _createSuper(PathLocationStrategy);

        function PathLocationStrategy(_platformLocation, href) {
          var _this821;

          _classCallCheck2(this, PathLocationStrategy);

          _this821 = _super350.call(this);
          _this821._platformLocation = _platformLocation;

          if (href == null) {
            href = _this821._platformLocation.getBaseHrefFromDOM();
          }

          if (href == null) {
            throw new Error("No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.");
          }

          _this821._baseHref = href;
          return _this821;
        }

        _createClass2(PathLocationStrategy, [{
          key: "onPopState",
          value: function onPopState(fn) {
            this._platformLocation.onPopState(fn);

            this._platformLocation.onHashChange(fn);
          }
        }, {
          key: "getBaseHref",
          value: function getBaseHref() {
            return this._baseHref;
          }
        }, {
          key: "prepareExternalUrl",
          value: function prepareExternalUrl(internal) {
            return joinWithSlash(this._baseHref, internal);
          }
        }, {
          key: "path",
          value: function path() {
            var includeHash = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
            var pathname = this._platformLocation.pathname + normalizeQueryParams(this._platformLocation.search);
            var hash = this._platformLocation.hash;
            return hash && includeHash ? "".concat(pathname).concat(hash) : pathname;
          }
        }, {
          key: "pushState",
          value: function pushState(state, title, url, queryParams) {
            var externalUrl = this.prepareExternalUrl(url + normalizeQueryParams(queryParams));

            this._platformLocation.pushState(state, title, externalUrl);
          }
        }, {
          key: "replaceState",
          value: function replaceState(state, title, url, queryParams) {
            var externalUrl = this.prepareExternalUrl(url + normalizeQueryParams(queryParams));

            this._platformLocation.replaceState(state, title, externalUrl);
          }
        }, {
          key: "forward",
          value: function forward() {
            this._platformLocation.forward();
          }
        }, {
          key: "back",
          value: function back() {
            this._platformLocation.back();
          }
        }]);

        return PathLocationStrategy;
      }(LocationStrategy);

      PathLocationStrategy.ɵfac = function PathLocationStrategy_Factory(t) {
        return new (t || PathLocationStrategy)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](PlatformLocation), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](APP_BASE_HREF, 8));
      };

      PathLocationStrategy.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: PathLocationStrategy,
        factory: PathLocationStrategy.ɵfac
      });

      PathLocationStrategy.ctorParameters = function () {
        return [{
          type: PlatformLocation
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [APP_BASE_HREF]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](PathLocationStrategy, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: PlatformLocation
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [APP_BASE_HREF]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @description
       * A {@link LocationStrategy} used to configure the {@link Location} service to
       * represent its state in the
       * [hash fragment](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax)
       * of the browser's URL.
       *
       * For instance, if you call `location.go('/foo')`, the browser's URL will become
       * `example.com#/foo`.
       *
       * @usageNotes
       *
       * ### Example
       *
       * {@example common/location/ts/hash_location_component.ts region='LocationComponent'}
       *
       * @publicApi
       */


      var HashLocationStrategy = /*#__PURE__*/function (_LocationStrategy2) {
        _inherits2(HashLocationStrategy, _LocationStrategy2);

        var _super351 = _createSuper(HashLocationStrategy);

        function HashLocationStrategy(_platformLocation, _baseHref) {
          var _this822;

          _classCallCheck2(this, HashLocationStrategy);

          _this822 = _super351.call(this);
          _this822._platformLocation = _platformLocation;
          _this822._baseHref = '';

          if (_baseHref != null) {
            _this822._baseHref = _baseHref;
          }

          return _this822;
        }

        _createClass2(HashLocationStrategy, [{
          key: "onPopState",
          value: function onPopState(fn) {
            this._platformLocation.onPopState(fn);

            this._platformLocation.onHashChange(fn);
          }
        }, {
          key: "getBaseHref",
          value: function getBaseHref() {
            return this._baseHref;
          }
        }, {
          key: "path",
          value: function path() {
            var includeHash = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
            // the hash value is always prefixed with a `#`
            // and if it is empty then it will stay empty
            var path = this._platformLocation.hash;
            if (path == null) path = '#';
            return path.length > 0 ? path.substring(1) : path;
          }
        }, {
          key: "prepareExternalUrl",
          value: function prepareExternalUrl(internal) {
            var url = joinWithSlash(this._baseHref, internal);
            return url.length > 0 ? '#' + url : url;
          }
        }, {
          key: "pushState",
          value: function pushState(state, title, path, queryParams) {
            var url = this.prepareExternalUrl(path + normalizeQueryParams(queryParams));

            if (url.length == 0) {
              url = this._platformLocation.pathname;
            }

            this._platformLocation.pushState(state, title, url);
          }
        }, {
          key: "replaceState",
          value: function replaceState(state, title, path, queryParams) {
            var url = this.prepareExternalUrl(path + normalizeQueryParams(queryParams));

            if (url.length == 0) {
              url = this._platformLocation.pathname;
            }

            this._platformLocation.replaceState(state, title, url);
          }
        }, {
          key: "forward",
          value: function forward() {
            this._platformLocation.forward();
          }
        }, {
          key: "back",
          value: function back() {
            this._platformLocation.back();
          }
        }]);

        return HashLocationStrategy;
      }(LocationStrategy);

      HashLocationStrategy.ɵfac = function HashLocationStrategy_Factory(t) {
        return new (t || HashLocationStrategy)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](PlatformLocation), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](APP_BASE_HREF, 8));
      };

      HashLocationStrategy.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: HashLocationStrategy,
        factory: HashLocationStrategy.ɵfac
      });

      HashLocationStrategy.ctorParameters = function () {
        return [{
          type: PlatformLocation
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [APP_BASE_HREF]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HashLocationStrategy, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: PlatformLocation
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [APP_BASE_HREF]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @description
       *
       * A service that applications can use to interact with a browser's URL.
       *
       * Depending on the `LocationStrategy` used, `Location` persists
       * to the URL's path or the URL's hash segment.
       *
       * @usageNotes
       *
       * It's better to use the `Router#navigate` service to trigger route changes. Use
       * `Location` only if you need to interact with or create normalized URLs outside of
       * routing.
       *
       * `Location` is responsible for normalizing the URL against the application's base href.
       * A normalized URL is absolute from the URL host, includes the application's base href, and has no
       * trailing slash:
       * - `/my/app/user/123` is normalized
       * - `my/app/user/123` **is not** normalized
       * - `/my/app/user/123/` **is not** normalized
       *
       * ### Example
       *
       * <code-example path='common/location/ts/path_location_component.ts'
       * region='LocationComponent'></code-example>
       *
       * @publicApi
       */


      var Location = /*#__PURE__*/function () {
        function Location(platformStrategy, platformLocation) {
          var _this823 = this;

          _classCallCheck2(this, Location);

          /** @internal */
          this._subject = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          /** @internal */

          this._urlChangeListeners = [];
          this._platformStrategy = platformStrategy;

          var browserBaseHref = this._platformStrategy.getBaseHref();

          this._platformLocation = platformLocation;
          this._baseHref = stripTrailingSlash(_stripIndexHtml(browserBaseHref));

          this._platformStrategy.onPopState(function (ev) {
            _this823._subject.emit({
              'url': _this823.path(true),
              'pop': true,
              'state': ev.state,
              'type': ev.type
            });
          });
        }
        /**
         * Normalizes the URL path for this location.
         *
         * @param includeHash True to include an anchor fragment in the path.
         *
         * @returns The normalized URL path.
         */
        // TODO: vsavkin. Remove the boolean flag and always include hash once the deprecated router is
        // removed.


        _createClass2(Location, [{
          key: "path",
          value: function path() {
            var includeHash = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
            return this.normalize(this._platformStrategy.path(includeHash));
          }
          /**
           * Reports the current state of the location history.
           * @returns The current value of the `history.state` object.
           */

        }, {
          key: "getState",
          value: function getState() {
            return this._platformLocation.getState();
          }
          /**
           * Normalizes the given path and compares to the current normalized path.
           *
           * @param path The given URL path.
           * @param query Query parameters.
           *
           * @returns True if the given URL path is equal to the current normalized path, false
           * otherwise.
           */

        }, {
          key: "isCurrentPathEqualTo",
          value: function isCurrentPathEqualTo(path) {
            var query = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
            return this.path() == this.normalize(path + normalizeQueryParams(query));
          }
          /**
           * Normalizes a URL path by stripping any trailing slashes.
           *
           * @param url String representing a URL.
           *
           * @returns The normalized URL string.
           */

        }, {
          key: "normalize",
          value: function normalize(url) {
            return Location.stripTrailingSlash(_stripBaseHref(this._baseHref, _stripIndexHtml(url)));
          }
          /**
           * Normalizes an external URL path.
           * If the given URL doesn't begin with a leading slash (`'/'`), adds one
           * before normalizing. Adds a hash if `HashLocationStrategy` is
           * in use, or the `APP_BASE_HREF` if the `PathLocationStrategy` is in use.
           *
           * @param url String representing a URL.
           *
           * @returns  A normalized platform-specific URL.
           */

        }, {
          key: "prepareExternalUrl",
          value: function prepareExternalUrl(url) {
            if (url && url[0] !== '/') {
              url = '/' + url;
            }

            return this._platformStrategy.prepareExternalUrl(url);
          } // TODO: rename this method to pushState

          /**
           * Changes the browser's URL to a normalized version of a given URL, and pushes a
           * new item onto the platform's history.
           *
           * @param path  URL path to normalize.
           * @param query Query parameters.
           * @param state Location history state.
           *
           */

        }, {
          key: "go",
          value: function go(path) {
            var query = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
            var state = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;

            this._platformStrategy.pushState(state, '', path, query);

            this._notifyUrlChangeListeners(this.prepareExternalUrl(path + normalizeQueryParams(query)), state);
          }
          /**
           * Changes the browser's URL to a normalized version of the given URL, and replaces
           * the top item on the platform's history stack.
           *
           * @param path  URL path to normalize.
           * @param query Query parameters.
           * @param state Location history state.
           */

        }, {
          key: "replaceState",
          value: function replaceState(path) {
            var query = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
            var state = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;

            this._platformStrategy.replaceState(state, '', path, query);

            this._notifyUrlChangeListeners(this.prepareExternalUrl(path + normalizeQueryParams(query)), state);
          }
          /**
           * Navigates forward in the platform's history.
           */

        }, {
          key: "forward",
          value: function forward() {
            this._platformStrategy.forward();
          }
          /**
           * Navigates back in the platform's history.
           */

        }, {
          key: "back",
          value: function back() {
            this._platformStrategy.back();
          }
          /**
           * Registers a URL change listener. Use to catch updates performed by the Angular
           * framework that are not detectible through "popstate" or "hashchange" events.
           *
           * @param fn The change handler function, which take a URL and a location history state.
           */

        }, {
          key: "onUrlChange",
          value: function onUrlChange(fn) {
            var _this824 = this;

            this._urlChangeListeners.push(fn);

            if (!this._urlChangeSubscription) {
              this._urlChangeSubscription = this.subscribe(function (v) {
                _this824._notifyUrlChangeListeners(v.url, v.state);
              });
            }
          }
          /** @internal */

        }, {
          key: "_notifyUrlChangeListeners",
          value: function _notifyUrlChangeListeners() {
            var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
            var state = arguments.length > 1 ? arguments[1] : undefined;

            this._urlChangeListeners.forEach(function (fn) {
              return fn(url, state);
            });
          }
          /**
           * Subscribes to the platform's `popState` events.
           *
           * @param value Event that is triggered when the state history changes.
           * @param exception The exception to throw.
           *
           * @returns Subscribed events.
           */

        }, {
          key: "subscribe",
          value: function subscribe(onNext, onThrow, onReturn) {
            return this._subject.subscribe({
              next: onNext,
              error: onThrow,
              complete: onReturn
            });
          }
        }]);

        return Location;
      }();

      Location.ɵfac = function Location_Factory(t) {
        return new (t || Location)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](LocationStrategy), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](PlatformLocation));
      };
      /**
       * Normalizes URL parameters by prepending with `?` if needed.
       *
       * @param  params String of URL parameters.
       *
       * @returns The normalized URL parameters string.
       */


      Location.normalizeQueryParams = normalizeQueryParams;
      /**
       * Joins two parts of a URL with a slash if needed.
       *
       * @param start  URL string
       * @param end    URL string
       *
       *
       * @returns The joined URL string.
       */

      Location.joinWithSlash = joinWithSlash;
      /**
       * Removes a trailing slash from a URL string if needed.
       * Looks for the first occurrence of either `#`, `?`, or the end of the
       * line as `/` characters and removes the trailing slash if one exists.
       *
       * @param url URL string.
       *
       * @returns The URL string, modified if needed.
       */

      Location.stripTrailingSlash = stripTrailingSlash;
      Location.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({
        factory: createLocation,
        token: Location,
        providedIn: "root"
      });

      Location.ctorParameters = function () {
        return [{
          type: LocationStrategy
        }, {
          type: PlatformLocation
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](Location, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'root',
            // See #23917
            useFactory: createLocation
          }]
        }], function () {
          return [{
            type: LocationStrategy
          }, {
            type: PlatformLocation
          }];
        }, null);
      })();

      function createLocation() {
        return new Location(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(LocationStrategy), Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(PlatformLocation));
      }

      function _stripBaseHref(baseHref, url) {
        return baseHref && url.startsWith(baseHref) ? url.substring(baseHref.length) : url;
      }

      function _stripIndexHtml(url) {
        return url.replace(/\/index.html$/, '');
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** @internal */


      var CURRENCIES_EN = {
        'ADP': [undefined, undefined, 0],
        'AFN': [undefined, undefined, 0],
        'ALL': [undefined, undefined, 0],
        'AMD': [undefined, undefined, 2],
        'AOA': [undefined, 'Kz'],
        'ARS': [undefined, '$'],
        'AUD': ['A$', '$'],
        'BAM': [undefined, 'KM'],
        'BBD': [undefined, '$'],
        'BDT': [undefined, '৳'],
        'BHD': [undefined, undefined, 3],
        'BIF': [undefined, undefined, 0],
        'BMD': [undefined, '$'],
        'BND': [undefined, '$'],
        'BOB': [undefined, 'Bs'],
        'BRL': ['R$'],
        'BSD': [undefined, '$'],
        'BWP': [undefined, 'P'],
        'BYN': [undefined, 'р.', 2],
        'BYR': [undefined, undefined, 0],
        'BZD': [undefined, '$'],
        'CAD': ['CA$', '$', 2],
        'CHF': [undefined, undefined, 2],
        'CLF': [undefined, undefined, 4],
        'CLP': [undefined, '$', 0],
        'CNY': ['CN¥', '¥'],
        'COP': [undefined, '$', 2],
        'CRC': [undefined, '₡', 2],
        'CUC': [undefined, '$'],
        'CUP': [undefined, '$'],
        'CZK': [undefined, 'Kč', 2],
        'DJF': [undefined, undefined, 0],
        'DKK': [undefined, 'kr', 2],
        'DOP': [undefined, '$'],
        'EGP': [undefined, 'E£'],
        'ESP': [undefined, '₧', 0],
        'EUR': ['€'],
        'FJD': [undefined, '$'],
        'FKP': [undefined, '£'],
        'GBP': ['£'],
        'GEL': [undefined, '₾'],
        'GIP': [undefined, '£'],
        'GNF': [undefined, 'FG', 0],
        'GTQ': [undefined, 'Q'],
        'GYD': [undefined, '$', 2],
        'HKD': ['HK$', '$'],
        'HNL': [undefined, 'L'],
        'HRK': [undefined, 'kn'],
        'HUF': [undefined, 'Ft', 2],
        'IDR': [undefined, 'Rp', 2],
        'ILS': ['₪'],
        'INR': ['₹'],
        'IQD': [undefined, undefined, 0],
        'IRR': [undefined, undefined, 0],
        'ISK': [undefined, 'kr', 0],
        'ITL': [undefined, undefined, 0],
        'JMD': [undefined, '$'],
        'JOD': [undefined, undefined, 3],
        'JPY': ['¥', undefined, 0],
        'KHR': [undefined, '៛'],
        'KMF': [undefined, 'CF', 0],
        'KPW': [undefined, '₩', 0],
        'KRW': ['₩', undefined, 0],
        'KWD': [undefined, undefined, 3],
        'KYD': [undefined, '$'],
        'KZT': [undefined, '₸'],
        'LAK': [undefined, '₭', 0],
        'LBP': [undefined, 'L£', 0],
        'LKR': [undefined, 'Rs'],
        'LRD': [undefined, '$'],
        'LTL': [undefined, 'Lt'],
        'LUF': [undefined, undefined, 0],
        'LVL': [undefined, 'Ls'],
        'LYD': [undefined, undefined, 3],
        'MGA': [undefined, 'Ar', 0],
        'MGF': [undefined, undefined, 0],
        'MMK': [undefined, 'K', 0],
        'MNT': [undefined, '₮', 2],
        'MRO': [undefined, undefined, 0],
        'MUR': [undefined, 'Rs', 2],
        'MXN': ['MX$', '$'],
        'MYR': [undefined, 'RM'],
        'NAD': [undefined, '$'],
        'NGN': [undefined, '₦'],
        'NIO': [undefined, 'C$'],
        'NOK': [undefined, 'kr', 2],
        'NPR': [undefined, 'Rs'],
        'NZD': ['NZ$', '$'],
        'OMR': [undefined, undefined, 3],
        'PHP': [undefined, '₱'],
        'PKR': [undefined, 'Rs', 2],
        'PLN': [undefined, 'zł'],
        'PYG': [undefined, '₲', 0],
        'RON': [undefined, 'lei'],
        'RSD': [undefined, undefined, 0],
        'RUB': [undefined, '₽'],
        'RUR': [undefined, 'р.'],
        'RWF': [undefined, 'RF', 0],
        'SBD': [undefined, '$'],
        'SEK': [undefined, 'kr', 2],
        'SGD': [undefined, '$'],
        'SHP': [undefined, '£'],
        'SLL': [undefined, undefined, 0],
        'SOS': [undefined, undefined, 0],
        'SRD': [undefined, '$'],
        'SSP': [undefined, '£'],
        'STD': [undefined, undefined, 0],
        'STN': [undefined, 'Db'],
        'SYP': [undefined, '£', 0],
        'THB': [undefined, '฿'],
        'TMM': [undefined, undefined, 0],
        'TND': [undefined, undefined, 3],
        'TOP': [undefined, 'T$'],
        'TRL': [undefined, undefined, 0],
        'TRY': [undefined, '₺'],
        'TTD': [undefined, '$'],
        'TWD': ['NT$', '$', 2],
        'TZS': [undefined, undefined, 2],
        'UAH': [undefined, '₴'],
        'UGX': [undefined, undefined, 0],
        'USD': ['$'],
        'UYI': [undefined, undefined, 0],
        'UYU': [undefined, '$'],
        'UYW': [undefined, undefined, 4],
        'UZS': [undefined, undefined, 2],
        'VEF': [undefined, 'Bs', 2],
        'VND': ['₫', undefined, 0],
        'VUV': [undefined, undefined, 0],
        'XAF': ['FCFA', undefined, 0],
        'XCD': ['EC$', '$'],
        'XOF': ['CFA', undefined, 0],
        'XPF': ['CFPF', undefined, 0],
        'XXX': ['¤'],
        'YER': [undefined, undefined, 0],
        'ZAR': [undefined, 'R'],
        'ZMK': [undefined, undefined, 0],
        'ZMW': [undefined, 'ZK'],
        'ZWD': [undefined, undefined, 0]
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Format styles that can be used to represent numbers.
       * @see `getLocaleNumberFormat()`.
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */

      var NumberFormatStyle;

      (function (NumberFormatStyle) {
        NumberFormatStyle[NumberFormatStyle["Decimal"] = 0] = "Decimal";
        NumberFormatStyle[NumberFormatStyle["Percent"] = 1] = "Percent";
        NumberFormatStyle[NumberFormatStyle["Currency"] = 2] = "Currency";
        NumberFormatStyle[NumberFormatStyle["Scientific"] = 3] = "Scientific";
      })(NumberFormatStyle || (NumberFormatStyle = {}));
      /**
       * Plurality cases used for translating plurals to different languages.
       *
       * @see `NgPlural`
       * @see `NgPluralCase`
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */


      var Plural;

      (function (Plural) {
        Plural[Plural["Zero"] = 0] = "Zero";
        Plural[Plural["One"] = 1] = "One";
        Plural[Plural["Two"] = 2] = "Two";
        Plural[Plural["Few"] = 3] = "Few";
        Plural[Plural["Many"] = 4] = "Many";
        Plural[Plural["Other"] = 5] = "Other";
      })(Plural || (Plural = {}));
      /**
       * Context-dependant translation forms for strings.
       * Typically the standalone version is for the nominative form of the word,
       * and the format version is used for the genitive case.
       * @see [CLDR website](http://cldr.unicode.org/translation/date-time-1/date-time#TOC-Standalone-vs.-Format-Styles)
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */


      var FormStyle;

      (function (FormStyle) {
        FormStyle[FormStyle["Format"] = 0] = "Format";
        FormStyle[FormStyle["Standalone"] = 1] = "Standalone";
      })(FormStyle || (FormStyle = {}));
      /**
       * String widths available for translations.
       * The specific character widths are locale-specific.
       * Examples are given for the word "Sunday" in English.
       *
       * @publicApi
       */


      var TranslationWidth;

      (function (TranslationWidth) {
        /** 1 character for `en-US`. For example: 'S' */
        TranslationWidth[TranslationWidth["Narrow"] = 0] = "Narrow";
        /** 3 characters for `en-US`. For example: 'Sun' */

        TranslationWidth[TranslationWidth["Abbreviated"] = 1] = "Abbreviated";
        /** Full length for `en-US`. For example: "Sunday" */

        TranslationWidth[TranslationWidth["Wide"] = 2] = "Wide";
        /** 2 characters for `en-US`, For example: "Su" */

        TranslationWidth[TranslationWidth["Short"] = 3] = "Short";
      })(TranslationWidth || (TranslationWidth = {}));
      /**
       * String widths available for date-time formats.
       * The specific character widths are locale-specific.
       * Examples are given for `en-US`.
       *
       * @see `getLocaleDateFormat()`
       * @see `getLocaleTimeFormat()``
       * @see `getLocaleDateTimeFormat()`
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       * @publicApi
       */


      var FormatWidth;

      (function (FormatWidth) {
        /**
         * For `en-US`, 'M/d/yy, h:mm a'`
         * (Example: `6/15/15, 9:03 AM`)
         */
        FormatWidth[FormatWidth["Short"] = 0] = "Short";
        /**
         * For `en-US`, `'MMM d, y, h:mm:ss a'`
         * (Example: `Jun 15, 2015, 9:03:01 AM`)
         */

        FormatWidth[FormatWidth["Medium"] = 1] = "Medium";
        /**
         * For `en-US`, `'MMMM d, y, h:mm:ss a z'`
         * (Example: `June 15, 2015 at 9:03:01 AM GMT+1`)
         */

        FormatWidth[FormatWidth["Long"] = 2] = "Long";
        /**
         * For `en-US`, `'EEEE, MMMM d, y, h:mm:ss a zzzz'`
         * (Example: `Monday, June 15, 2015 at 9:03:01 AM GMT+01:00`)
         */

        FormatWidth[FormatWidth["Full"] = 3] = "Full";
      })(FormatWidth || (FormatWidth = {}));
      /**
       * Symbols that can be used to replace placeholders in number patterns.
       * Examples are based on `en-US` values.
       *
       * @see `getLocaleNumberSymbol()`
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */


      var NumberSymbol;

      (function (NumberSymbol) {
        /**
         * Decimal separator.
         * For `en-US`, the dot character.
         * Example : 2,345`.`67
         */
        NumberSymbol[NumberSymbol["Decimal"] = 0] = "Decimal";
        /**
         * Grouping separator, typically for thousands.
         * For `en-US`, the comma character.
         * Example: 2`,`345.67
         */

        NumberSymbol[NumberSymbol["Group"] = 1] = "Group";
        /**
         * List-item separator.
         * Example: "one, two, and three"
         */

        NumberSymbol[NumberSymbol["List"] = 2] = "List";
        /**
         * Sign for percentage (out of 100).
         * Example: 23.4%
         */

        NumberSymbol[NumberSymbol["PercentSign"] = 3] = "PercentSign";
        /**
         * Sign for positive numbers.
         * Example: +23
         */

        NumberSymbol[NumberSymbol["PlusSign"] = 4] = "PlusSign";
        /**
         * Sign for negative numbers.
         * Example: -23
         */

        NumberSymbol[NumberSymbol["MinusSign"] = 5] = "MinusSign";
        /**
         * Computer notation for exponential value (n times a power of 10).
         * Example: 1.2E3
         */

        NumberSymbol[NumberSymbol["Exponential"] = 6] = "Exponential";
        /**
         * Human-readable format of exponential.
         * Example: 1.2x103
         */

        NumberSymbol[NumberSymbol["SuperscriptingExponent"] = 7] = "SuperscriptingExponent";
        /**
         * Sign for permille (out of 1000).
         * Example: 23.4‰
         */

        NumberSymbol[NumberSymbol["PerMille"] = 8] = "PerMille";
        /**
         * Infinity, can be used with plus and minus.
         * Example: ∞, +∞, -∞
         */

        NumberSymbol[NumberSymbol["Infinity"] = 9] = "Infinity";
        /**
         * Not a number.
         * Example: NaN
         */

        NumberSymbol[NumberSymbol["NaN"] = 10] = "NaN";
        /**
         * Symbol used between time units.
         * Example: 10:52
         */

        NumberSymbol[NumberSymbol["TimeSeparator"] = 11] = "TimeSeparator";
        /**
         * Decimal separator for currency values (fallback to `Decimal`).
         * Example: $2,345.67
         */

        NumberSymbol[NumberSymbol["CurrencyDecimal"] = 12] = "CurrencyDecimal";
        /**
         * Group separator for currency values (fallback to `Group`).
         * Example: $2,345.67
         */

        NumberSymbol[NumberSymbol["CurrencyGroup"] = 13] = "CurrencyGroup";
      })(NumberSymbol || (NumberSymbol = {}));
      /**
       * The value for each day of the week, based on the `en-US` locale
       *
       * @publicApi
       */


      var WeekDay;

      (function (WeekDay) {
        WeekDay[WeekDay["Sunday"] = 0] = "Sunday";
        WeekDay[WeekDay["Monday"] = 1] = "Monday";
        WeekDay[WeekDay["Tuesday"] = 2] = "Tuesday";
        WeekDay[WeekDay["Wednesday"] = 3] = "Wednesday";
        WeekDay[WeekDay["Thursday"] = 4] = "Thursday";
        WeekDay[WeekDay["Friday"] = 5] = "Friday";
        WeekDay[WeekDay["Saturday"] = 6] = "Saturday";
      })(WeekDay || (WeekDay = {}));
      /**
       * Retrieves the locale ID from the currently loaded locale.
       * The loaded locale could be, for example, a global one rather than a regional one.
       * @param locale A locale code, such as `fr-FR`.
       * @returns The locale code. For example, `fr`.
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */


      function getLocaleId(locale) {
        return Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale)[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].LocaleId];
      }
      /**
       * Retrieves day period strings for the given locale.
       *
       * @param locale A locale code for the locale format rules to use.
       * @param formStyle The required grammatical form.
       * @param width The required character width.
       * @returns An array of localized period strings. For example, `[AM, PM]` for `en-US`.
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */


      function getLocaleDayPeriods(locale, formStyle, width) {
        var data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
        var amPmData = [data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].DayPeriodsFormat], data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].DayPeriodsStandalone]];
        var amPm = getLastDefinedValue(amPmData, formStyle);
        return getLastDefinedValue(amPm, width);
      }
      /**
       * Retrieves days of the week for the given locale, using the Gregorian calendar.
       *
       * @param locale A locale code for the locale format rules to use.
       * @param formStyle The required grammatical form.
       * @param width The required character width.
       * @returns An array of localized name strings.
       * For example,`[Sunday, Monday, ... Saturday]` for `en-US`.
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */


      function getLocaleDayNames(locale, formStyle, width) {
        var data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
        var daysData = [data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].DaysFormat], data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].DaysStandalone]];
        var days = getLastDefinedValue(daysData, formStyle);
        return getLastDefinedValue(days, width);
      }
      /**
       * Retrieves months of the year for the given locale, using the Gregorian calendar.
       *
       * @param locale A locale code for the locale format rules to use.
       * @param formStyle The required grammatical form.
       * @param width The required character width.
       * @returns An array of localized name strings.
       * For example,  `[January, February, ...]` for `en-US`.
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */


      function getLocaleMonthNames(locale, formStyle, width) {
        var data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
        var monthsData = [data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].MonthsFormat], data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].MonthsStandalone]];
        var months = getLastDefinedValue(monthsData, formStyle);
        return getLastDefinedValue(months, width);
      }
      /**
       * Retrieves Gregorian-calendar eras for the given locale.
       * @param locale A locale code for the locale format rules to use.
       * @param width The required character width.
      
       * @returns An array of localized era strings.
       * For example, `[AD, BC]` for `en-US`.
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */


      function getLocaleEraNames(locale, width) {
        var data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
        var erasData = data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].Eras];
        return getLastDefinedValue(erasData, width);
      }
      /**
       * Retrieves the first day of the week for the given locale.
       *
       * @param locale A locale code for the locale format rules to use.
       * @returns A day index number, using the 0-based week-day index for `en-US`
       * (Sunday = 0, Monday = 1, ...).
       * For example, for `fr-FR`, returns 1 to indicate that the first day is Monday.
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */


      function getLocaleFirstDayOfWeek(locale) {
        var data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
        return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].FirstDayOfWeek];
      }
      /**
       * Range of week days that are considered the week-end for the given locale.
       *
       * @param locale A locale code for the locale format rules to use.
       * @returns The range of day values, `[startDay, endDay]`.
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */


      function getLocaleWeekEndRange(locale) {
        var data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
        return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].WeekendRange];
      }
      /**
       * Retrieves a localized date-value formating string.
       *
       * @param locale A locale code for the locale format rules to use.
       * @param width The format type.
       * @returns The localized formating string.
       * @see `FormatWidth`
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */


      function getLocaleDateFormat(locale, width) {
        var data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
        return getLastDefinedValue(data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].DateFormat], width);
      }
      /**
       * Retrieves a localized time-value formatting string.
       *
       * @param locale A locale code for the locale format rules to use.
       * @param width The format type.
       * @returns The localized formatting string.
       * @see `FormatWidth`
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
      
       * @publicApi
       */


      function getLocaleTimeFormat(locale, width) {
        var data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
        return getLastDefinedValue(data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].TimeFormat], width);
      }
      /**
       * Retrieves a localized date-time formatting string.
       *
       * @param locale A locale code for the locale format rules to use.
       * @param width The format type.
       * @returns The localized formatting string.
       * @see `FormatWidth`
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */


      function getLocaleDateTimeFormat(locale, width) {
        var data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
        var dateTimeFormatData = data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].DateTimeFormat];
        return getLastDefinedValue(dateTimeFormatData, width);
      }
      /**
       * Retrieves a localized number symbol that can be used to replace placeholders in number formats.
       * @param locale The locale code.
       * @param symbol The symbol to localize.
       * @returns The character for the localized symbol.
       * @see `NumberSymbol`
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */


      function getLocaleNumberSymbol(locale, symbol) {
        var data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
        var res = data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].NumberSymbols][symbol];

        if (typeof res === 'undefined') {
          if (symbol === NumberSymbol.CurrencyDecimal) {
            return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].NumberSymbols][NumberSymbol.Decimal];
          } else if (symbol === NumberSymbol.CurrencyGroup) {
            return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].NumberSymbols][NumberSymbol.Group];
          }
        }

        return res;
      }
      /**
       * Retrieves a number format for a given locale.
       *
       * Numbers are formatted using patterns, like `#,###.00`. For example, the pattern `#,###.00`
       * when used to format the number 12345.678 could result in "12'345,678". That would happen if the
       * grouping separator for your language is an apostrophe, and the decimal separator is a comma.
       *
       * <b>Important:</b> The characters `.` `,` `0` `#` (and others below) are special placeholders
       * that stand for the decimal separator, and so on, and are NOT real characters.
       * You must NOT "translate" the placeholders. For example, don't change `.` to `,` even though in
       * your language the decimal point is written with a comma. The symbols should be replaced by the
       * local equivalents, using the appropriate `NumberSymbol` for your language.
       *
       * Here are the special characters used in number patterns:
       *
       * | Symbol | Meaning |
       * |--------|---------|
       * | . | Replaced automatically by the character used for the decimal point. |
       * | , | Replaced by the "grouping" (thousands) separator. |
       * | 0 | Replaced by a digit (or zero if there aren't enough digits). |
       * | # | Replaced by a digit (or nothing if there aren't enough). |
       * | ¤ | Replaced by a currency symbol, such as $ or USD. |
       * | % | Marks a percent format. The % symbol may change position, but must be retained. |
       * | E | Marks a scientific format. The E symbol may change position, but must be retained. |
       * | ' | Special characters used as literal characters are quoted with ASCII single quotes. |
       *
       * @param locale A locale code for the locale format rules to use.
       * @param type The type of numeric value to be formatted (such as `Decimal` or `Currency`.)
       * @returns The localized format string.
       * @see `NumberFormatStyle`
       * @see [CLDR website](http://cldr.unicode.org/translation/number-patterns)
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */


      function getLocaleNumberFormat(locale, type) {
        var data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
        return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].NumberFormats][type];
      }
      /**
       * Retrieves the symbol used to represent the currency for the main country
       * corresponding to a given locale. For example, '$' for `en-US`.
       *
       * @param locale A locale code for the locale format rules to use.
       * @returns The localized symbol character,
       * or `null` if the main country cannot be determined.
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */


      function getLocaleCurrencySymbol(locale) {
        var data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
        return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].CurrencySymbol] || null;
      }
      /**
       * Retrieves the name of the currency for the main country corresponding
       * to a given locale. For example, 'US Dollar' for `en-US`.
       * @param locale A locale code for the locale format rules to use.
       * @returns The currency name,
       * or `null` if the main country cannot be determined.
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */


      function getLocaleCurrencyName(locale) {
        var data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
        return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].CurrencyName] || null;
      }
      /**
       * Retrieves the default currency code for the given locale.
       *
       * The default is defined as the first currency which is still in use.
       *
       * @param locale The code of the locale whose currency code we want.
       * @returns The code of the default currency for the given locale.
       *
       * @publicApi
       */


      function getLocaleCurrencyCode(locale) {
        return Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵgetLocaleCurrencyCode"])(locale);
      }
      /**
       * Retrieves the currency values for a given locale.
       * @param locale A locale code for the locale format rules to use.
       * @returns The currency values.
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       */


      function getLocaleCurrencies(locale) {
        var data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
        return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].Currencies];
      }
      /**
       * @alias core/ɵgetLocalePluralCase
       * @publicApi
       */


      var getLocalePluralCase = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵgetLocalePluralCase"];

      function checkFullData(data) {
        if (!data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].ExtraData]) {
          throw new Error("Missing extra locale data for the locale \"".concat(data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].LocaleId], "\". Use \"registerLocaleData\" to load new data. See the \"I18n guide\" on angular.io to know more."));
        }
      }
      /**
       * Retrieves locale-specific rules used to determine which day period to use
       * when more than one period is defined for a locale.
       *
       * There is a rule for each defined day period. The
       * first rule is applied to the first day period and so on.
       * Fall back to AM/PM when no rules are available.
       *
       * A rule can specify a period as time range, or as a single time value.
       *
       * This functionality is only available when you have loaded the full locale data.
       * See the ["I18n guide"](guide/i18n#i18n-pipes).
       *
       * @param locale A locale code for the locale format rules to use.
       * @returns The rules for the locale, a single time value or array of *from-time, to-time*,
       * or null if no periods are available.
       *
       * @see `getLocaleExtraDayPeriods()`
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */


      function getLocaleExtraDayPeriodRules(locale) {
        var data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
        checkFullData(data);
        var rules = data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].ExtraData][2
        /* ExtraDayPeriodsRules */
        ] || [];
        return rules.map(function (rule) {
          if (typeof rule === 'string') {
            return extractTime(rule);
          }

          return [extractTime(rule[0]), extractTime(rule[1])];
        });
      }
      /**
       * Retrieves locale-specific day periods, which indicate roughly how a day is broken up
       * in different languages.
       * For example, for `en-US`, periods are morning, noon, afternoon, evening, and midnight.
       *
       * This functionality is only available when you have loaded the full locale data.
       * See the ["I18n guide"](guide/i18n#i18n-pipes).
       *
       * @param locale A locale code for the locale format rules to use.
       * @param formStyle The required grammatical form.
       * @param width The required character width.
       * @returns The translated day-period strings.
       * @see `getLocaleExtraDayPeriodRules()`
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */


      function getLocaleExtraDayPeriods(locale, formStyle, width) {
        var data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
        checkFullData(data);
        var dayPeriodsData = [data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].ExtraData][0
        /* ExtraDayPeriodFormats */
        ], data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].ExtraData][1
        /* ExtraDayPeriodStandalone */
        ]];
        var dayPeriods = getLastDefinedValue(dayPeriodsData, formStyle) || [];
        return getLastDefinedValue(dayPeriods, width) || [];
      }
      /**
       * Retrieves the writing direction of a specified locale
       * @param locale A locale code for the locale format rules to use.
       * @publicApi
       * @returns 'rtl' or 'ltr'
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       */


      function getLocaleDirection(locale) {
        var data = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵfindLocaleData"])(locale);
        return data[_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵLocaleDataIndex"].Directionality];
      }
      /**
       * Retrieves the first value that is defined in an array, going backwards from an index position.
       *
       * To avoid repeating the same data (as when the "format" and "standalone" forms are the same)
       * add the first value to the locale data arrays, and add other values only if they are different.
       *
       * @param data The data array to retrieve from.
       * @param index A 0-based index into the array to start from.
       * @returns The value immediately before the given index position.
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */


      function getLastDefinedValue(data, index) {
        for (var i = index; i > -1; i--) {
          if (typeof data[i] !== 'undefined') {
            return data[i];
          }
        }

        throw new Error('Locale data API: locale data undefined');
      }
      /**
       * Extracts the hours and minutes from a string like "15:45"
       */


      function extractTime(time) {
        var _time$split = time.split(':'),
            _time$split2 = _slicedToArray(_time$split, 2),
            h = _time$split2[0],
            m = _time$split2[1];

        return {
          hours: +h,
          minutes: +m
        };
      }
      /**
       * Retrieves the currency symbol for a given currency code.
       *
       * For example, for the default `en-US` locale, the code `USD` can
       * be represented by the narrow symbol `$` or the wide symbol `US$`.
       *
       * @param code The currency code.
       * @param format The format, `wide` or `narrow`.
       * @param locale A locale code for the locale format rules to use.
       *
       * @returns The symbol, or the currency code if no symbol is available.
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */


      function getCurrencySymbol(code, format) {
        var locale = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'en';
        var currency = getLocaleCurrencies(locale)[code] || CURRENCIES_EN[code] || [];
        var symbolNarrow = currency[1
        /* SymbolNarrow */
        ];

        if (format === 'narrow' && typeof symbolNarrow === 'string') {
          return symbolNarrow;
        }

        return currency[0
        /* Symbol */
        ] || code;
      } // Most currencies have cents, that's why the default is 2


      var DEFAULT_NB_OF_CURRENCY_DIGITS = 2;
      /**
       * Reports the number of decimal digits for a given currency.
       * The value depends upon the presence of cents in that particular currency.
       *
       * @param code The currency code.
       * @returns The number of decimal digits, typically 0 or 2.
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */

      function getNumberOfCurrencyDigits(code) {
        var digits;
        var currency = CURRENCIES_EN[code];

        if (currency) {
          digits = currency[2
          /* NbOfDigits */
          ];
        }

        return typeof digits === 'number' ? digits : DEFAULT_NB_OF_CURRENCY_DIGITS;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ISO8601_DATE_REGEX = /^(\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

      var NAMED_FORMATS = {};
      var DATE_FORMATS_SPLIT = /((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/;
      var ZoneWidth;

      (function (ZoneWidth) {
        ZoneWidth[ZoneWidth["Short"] = 0] = "Short";
        ZoneWidth[ZoneWidth["ShortGMT"] = 1] = "ShortGMT";
        ZoneWidth[ZoneWidth["Long"] = 2] = "Long";
        ZoneWidth[ZoneWidth["Extended"] = 3] = "Extended";
      })(ZoneWidth || (ZoneWidth = {}));

      var DateType;

      (function (DateType) {
        DateType[DateType["FullYear"] = 0] = "FullYear";
        DateType[DateType["Month"] = 1] = "Month";
        DateType[DateType["Date"] = 2] = "Date";
        DateType[DateType["Hours"] = 3] = "Hours";
        DateType[DateType["Minutes"] = 4] = "Minutes";
        DateType[DateType["Seconds"] = 5] = "Seconds";
        DateType[DateType["FractionalSeconds"] = 6] = "FractionalSeconds";
        DateType[DateType["Day"] = 7] = "Day";
      })(DateType || (DateType = {}));

      var TranslationType;

      (function (TranslationType) {
        TranslationType[TranslationType["DayPeriods"] = 0] = "DayPeriods";
        TranslationType[TranslationType["Days"] = 1] = "Days";
        TranslationType[TranslationType["Months"] = 2] = "Months";
        TranslationType[TranslationType["Eras"] = 3] = "Eras";
      })(TranslationType || (TranslationType = {}));
      /**
       * @ngModule CommonModule
       * @description
       *
       * Formats a date according to locale rules.
       *
       * @param value The date to format, as a Date, or a number (milliseconds since UTC epoch)
       * or an [ISO date-time string](https://www.w3.org/TR/NOTE-datetime).
       * @param format The date-time components to include. See `DatePipe` for details.
       * @param locale A locale code for the locale format rules to use.
       * @param timezone The time zone. A time zone offset from GMT (such as `'+0430'`),
       * or a standard UTC/GMT or continental US time zone abbreviation.
       * If not specified, uses host system settings.
       *
       * @returns The formatted date string.
       *
       * @see `DatePipe`
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */


      function formatDate(value, format, locale, timezone) {
        var date = toDate(value);
        var namedFormat = getNamedFormat(locale, format);
        format = namedFormat || format;
        var parts = [];
        var match;

        while (format) {
          match = DATE_FORMATS_SPLIT.exec(format);

          if (match) {
            parts = parts.concat(match.slice(1));
            var part = parts.pop();

            if (!part) {
              break;
            }

            format = part;
          } else {
            parts.push(format);
            break;
          }
        }

        var dateTimezoneOffset = date.getTimezoneOffset();

        if (timezone) {
          dateTimezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);
          date = convertTimezoneToLocal(date, timezone, true);
        }

        var text = '';
        parts.forEach(function (value) {
          var dateFormatter = getDateFormatter(value);
          text += dateFormatter ? dateFormatter(date, locale, dateTimezoneOffset) : value === '\'\'' ? '\'' : value.replace(/(^'|'$)/g, '').replace(/''/g, '\'');
        });
        return text;
      }
      /**
       * Create a new Date object with the given date value, and the time set to midnight.
       *
       * We cannot use `new Date(year, month, date)` because it maps years between 0 and 99 to 1900-1999.
       * See: https://github.com/angular/angular/issues/40377
       *
       * Note that this function returns a Date object whose time is midnight in the current locale's
       * timezone. In the future we might want to change this to be midnight in UTC, but this would be a
       * considerable breaking change.
       */


      function createDate(year, month, date) {
        // The `newDate` is set to midnight (UTC) on January 1st 1970.
        // - In PST this will be December 31st 1969 at 4pm.
        // - In GMT this will be January 1st 1970 at 1am.
        // Note that they even have different years, dates and months!
        var newDate = new Date(0); // `setFullYear()` allows years like 0001 to be set correctly. This function does not
        // change the internal time of the date.
        // Consider calling `setFullYear(2019, 8, 20)` (September 20, 2019).
        // - In PST this will now be September 20, 2019 at 4pm
        // - In GMT this will now be September 20, 2019 at 1am

        newDate.setFullYear(year, month, date); // We want the final date to be at local midnight, so we reset the time.
        // - In PST this will now be September 20, 2019 at 12am
        // - In GMT this will now be September 20, 2019 at 12am

        newDate.setHours(0, 0, 0);
        return newDate;
      }

      function getNamedFormat(locale, format) {
        var localeId = getLocaleId(locale);
        NAMED_FORMATS[localeId] = NAMED_FORMATS[localeId] || {};

        if (NAMED_FORMATS[localeId][format]) {
          return NAMED_FORMATS[localeId][format];
        }

        var formatValue = '';

        switch (format) {
          case 'shortDate':
            formatValue = getLocaleDateFormat(locale, FormatWidth.Short);
            break;

          case 'mediumDate':
            formatValue = getLocaleDateFormat(locale, FormatWidth.Medium);
            break;

          case 'longDate':
            formatValue = getLocaleDateFormat(locale, FormatWidth.Long);
            break;

          case 'fullDate':
            formatValue = getLocaleDateFormat(locale, FormatWidth.Full);
            break;

          case 'shortTime':
            formatValue = getLocaleTimeFormat(locale, FormatWidth.Short);
            break;

          case 'mediumTime':
            formatValue = getLocaleTimeFormat(locale, FormatWidth.Medium);
            break;

          case 'longTime':
            formatValue = getLocaleTimeFormat(locale, FormatWidth.Long);
            break;

          case 'fullTime':
            formatValue = getLocaleTimeFormat(locale, FormatWidth.Full);
            break;

          case 'short':
            var shortTime = getNamedFormat(locale, 'shortTime');
            var shortDate = getNamedFormat(locale, 'shortDate');
            formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Short), [shortTime, shortDate]);
            break;

          case 'medium':
            var mediumTime = getNamedFormat(locale, 'mediumTime');
            var mediumDate = getNamedFormat(locale, 'mediumDate');
            formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Medium), [mediumTime, mediumDate]);
            break;

          case 'long':
            var longTime = getNamedFormat(locale, 'longTime');
            var longDate = getNamedFormat(locale, 'longDate');
            formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Long), [longTime, longDate]);
            break;

          case 'full':
            var fullTime = getNamedFormat(locale, 'fullTime');
            var fullDate = getNamedFormat(locale, 'fullDate');
            formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Full), [fullTime, fullDate]);
            break;
        }

        if (formatValue) {
          NAMED_FORMATS[localeId][format] = formatValue;
        }

        return formatValue;
      }

      function formatDateTime(str, opt_values) {
        if (opt_values) {
          str = str.replace(/\{([^}]+)}/g, function (match, key) {
            return opt_values != null && key in opt_values ? opt_values[key] : match;
          });
        }

        return str;
      }

      function padNumber(num, digits) {
        var minusSign = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '-';
        var trim = arguments.length > 3 ? arguments[3] : undefined;
        var negWrap = arguments.length > 4 ? arguments[4] : undefined;
        var neg = '';

        if (num < 0 || negWrap && num <= 0) {
          if (negWrap) {
            num = -num + 1;
          } else {
            num = -num;
            neg = minusSign;
          }
        }

        var strNum = String(num);

        while (strNum.length < digits) {
          strNum = '0' + strNum;
        }

        if (trim) {
          strNum = strNum.substr(strNum.length - digits);
        }

        return neg + strNum;
      }

      function formatFractionalSeconds(milliseconds, digits) {
        var strMs = padNumber(milliseconds, 3);
        return strMs.substr(0, digits);
      }
      /**
       * Returns a date formatter that transforms a date into its locale digit representation
       */


      function dateGetter(name, size) {
        var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
        var trim = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
        var negWrap = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
        return function (date, locale) {
          var part = getDatePart(name, date);

          if (offset > 0 || part > -offset) {
            part += offset;
          }

          if (name === DateType.Hours) {
            if (part === 0 && offset === -12) {
              part = 12;
            }
          } else if (name === DateType.FractionalSeconds) {
            return formatFractionalSeconds(part, size);
          }

          var localeMinus = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign);
          return padNumber(part, size, localeMinus, trim, negWrap);
        };
      }

      function getDatePart(part, date) {
        switch (part) {
          case DateType.FullYear:
            return date.getFullYear();

          case DateType.Month:
            return date.getMonth();

          case DateType.Date:
            return date.getDate();

          case DateType.Hours:
            return date.getHours();

          case DateType.Minutes:
            return date.getMinutes();

          case DateType.Seconds:
            return date.getSeconds();

          case DateType.FractionalSeconds:
            return date.getMilliseconds();

          case DateType.Day:
            return date.getDay();

          default:
            throw new Error("Unknown DateType value \"".concat(part, "\"."));
        }
      }
      /**
       * Returns a date formatter that transforms a date into its locale string representation
       */


      function dateStrGetter(name, width) {
        var form = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : FormStyle.Format;
        var extended = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
        return function (date, locale) {
          return getDateTranslation(date, locale, name, width, form, extended);
        };
      }
      /**
       * Returns the locale translation of a date for a given form, type and width
       */


      function getDateTranslation(date, locale, name, width, form, extended) {
        switch (name) {
          case TranslationType.Months:
            return getLocaleMonthNames(locale, form, width)[date.getMonth()];

          case TranslationType.Days:
            return getLocaleDayNames(locale, form, width)[date.getDay()];

          case TranslationType.DayPeriods:
            var currentHours = date.getHours();
            var currentMinutes = date.getMinutes();

            if (extended) {
              var rules = getLocaleExtraDayPeriodRules(locale);
              var dayPeriods = getLocaleExtraDayPeriods(locale, form, width);
              var index = rules.findIndex(function (rule) {
                if (Array.isArray(rule)) {
                  // morning, afternoon, evening, night
                  var _rule = _slicedToArray(rule, 2),
                      from = _rule[0],
                      to = _rule[1];

                  var afterFrom = currentHours >= from.hours && currentMinutes >= from.minutes;
                  var beforeTo = currentHours < to.hours || currentHours === to.hours && currentMinutes < to.minutes; // We must account for normal rules that span a period during the day (e.g. 6am-9am)
                  // where `from` is less (earlier) than `to`. But also rules that span midnight (e.g.
                  // 10pm - 5am) where `from` is greater (later!) than `to`.
                  //
                  // In the first case the current time must be BOTH after `from` AND before `to`
                  // (e.g. 8am is after 6am AND before 10am).
                  //
                  // In the second case the current time must be EITHER after `from` OR before `to`
                  // (e.g. 4am is before 5am but not after 10pm; and 11pm is not before 5am but it is
                  // after 10pm).

                  if (from.hours < to.hours) {
                    if (afterFrom && beforeTo) {
                      return true;
                    }
                  } else if (afterFrom || beforeTo) {
                    return true;
                  }
                } else {
                  // noon or midnight
                  if (rule.hours === currentHours && rule.minutes === currentMinutes) {
                    return true;
                  }
                }

                return false;
              });

              if (index !== -1) {
                return dayPeriods[index];
              }
            } // if no rules for the day periods, we use am/pm by default


            return getLocaleDayPeriods(locale, form, width)[currentHours < 12 ? 0 : 1];

          case TranslationType.Eras:
            return getLocaleEraNames(locale, width)[date.getFullYear() <= 0 ? 0 : 1];

          default:
            // This default case is not needed by TypeScript compiler, as the switch is exhaustive.
            // However Closure Compiler does not understand that and reports an error in typed mode.
            // The `throw new Error` below works around the problem, and the unexpected: never variable
            // makes sure tsc still checks this code is unreachable.
            var unexpected = name;
            throw new Error("unexpected translation type ".concat(unexpected));
        }
      }
      /**
       * Returns a date formatter that transforms a date and an offset into a timezone with ISO8601 or
       * GMT format depending on the width (eg: short = +0430, short:GMT = GMT+4, long = GMT+04:30,
       * extended = +04:30)
       */


      function timeZoneGetter(width) {
        return function (date, locale, offset) {
          var zone = -1 * offset;
          var minusSign = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign);
          var hours = zone > 0 ? Math.floor(zone / 60) : Math.ceil(zone / 60);

          switch (width) {
            case ZoneWidth.Short:
              return (zone >= 0 ? '+' : '') + padNumber(hours, 2, minusSign) + padNumber(Math.abs(zone % 60), 2, minusSign);

            case ZoneWidth.ShortGMT:
              return 'GMT' + (zone >= 0 ? '+' : '') + padNumber(hours, 1, minusSign);

            case ZoneWidth.Long:
              return 'GMT' + (zone >= 0 ? '+' : '') + padNumber(hours, 2, minusSign) + ':' + padNumber(Math.abs(zone % 60), 2, minusSign);

            case ZoneWidth.Extended:
              if (offset === 0) {
                return 'Z';
              } else {
                return (zone >= 0 ? '+' : '') + padNumber(hours, 2, minusSign) + ':' + padNumber(Math.abs(zone % 60), 2, minusSign);
              }

            default:
              throw new Error("Unknown zone width \"".concat(width, "\""));
          }
        };
      }

      var JANUARY = 0;
      var THURSDAY = 4;

      function getFirstThursdayOfYear(year) {
        var firstDayOfYear = createDate(year, JANUARY, 1).getDay();
        return createDate(year, 0, 1 + (firstDayOfYear <= THURSDAY ? THURSDAY : THURSDAY + 7) - firstDayOfYear);
      }

      function getThursdayThisWeek(datetime) {
        return createDate(datetime.getFullYear(), datetime.getMonth(), datetime.getDate() + (THURSDAY - datetime.getDay()));
      }

      function weekGetter(size) {
        var monthBased = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
        return function (date, locale) {
          var result;

          if (monthBased) {
            var nbDaysBefore1stDayOfMonth = new Date(date.getFullYear(), date.getMonth(), 1).getDay() - 1;
            var today = date.getDate();
            result = 1 + Math.floor((today + nbDaysBefore1stDayOfMonth) / 7);
          } else {
            var thisThurs = getThursdayThisWeek(date); // Some days of a year are part of next year according to ISO 8601.
            // Compute the firstThurs from the year of this week's Thursday

            var firstThurs = getFirstThursdayOfYear(thisThurs.getFullYear());
            var diff = thisThurs.getTime() - firstThurs.getTime();
            result = 1 + Math.round(diff / 6.048e8); // 6.048e8 ms per week
          }

          return padNumber(result, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));
        };
      }
      /**
       * Returns a date formatter that provides the week-numbering year for the input date.
       */


      function weekNumberingYearGetter(size) {
        var trim = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
        return function (date, locale) {
          var thisThurs = getThursdayThisWeek(date);
          var weekNumberingYear = thisThurs.getFullYear();
          return padNumber(weekNumberingYear, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign), trim);
        };
      }

      var DATE_FORMATS = {}; // Based on CLDR formats:
      // See complete list: http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
      // See also explanations: http://cldr.unicode.org/translation/date-time
      // TODO(ocombe): support all missing cldr formats: U, Q, D, F, e, j, J, C, A, v, V, X, x

      function getDateFormatter(format) {
        if (DATE_FORMATS[format]) {
          return DATE_FORMATS[format];
        }

        var formatter;

        switch (format) {
          // Era name (AD/BC)
          case 'G':
          case 'GG':
          case 'GGG':
            formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Abbreviated);
            break;

          case 'GGGG':
            formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Wide);
            break;

          case 'GGGGG':
            formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Narrow);
            break;
          // 1 digit representation of the year, e.g. (AD 1 => 1, AD 199 => 199)

          case 'y':
            formatter = dateGetter(DateType.FullYear, 1, 0, false, true);
            break;
          // 2 digit representation of the year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)

          case 'yy':
            formatter = dateGetter(DateType.FullYear, 2, 0, true, true);
            break;
          // 3 digit representation of the year, padded (000-999). (e.g. AD 2001 => 01, AD 2010 => 10)

          case 'yyy':
            formatter = dateGetter(DateType.FullYear, 3, 0, false, true);
            break;
          // 4 digit representation of the year (e.g. AD 1 => 0001, AD 2010 => 2010)

          case 'yyyy':
            formatter = dateGetter(DateType.FullYear, 4, 0, false, true);
            break;
          // 1 digit representation of the week-numbering year, e.g. (AD 1 => 1, AD 199 => 199)

          case 'Y':
            formatter = weekNumberingYearGetter(1);
            break;
          // 2 digit representation of the week-numbering year, padded (00-99). (e.g. AD 2001 => 01, AD
          // 2010 => 10)

          case 'YY':
            formatter = weekNumberingYearGetter(2, true);
            break;
          // 3 digit representation of the week-numbering year, padded (000-999). (e.g. AD 1 => 001, AD
          // 2010 => 2010)

          case 'YYY':
            formatter = weekNumberingYearGetter(3);
            break;
          // 4 digit representation of the week-numbering year (e.g. AD 1 => 0001, AD 2010 => 2010)

          case 'YYYY':
            formatter = weekNumberingYearGetter(4);
            break;
          // Month of the year (1-12), numeric

          case 'M':
          case 'L':
            formatter = dateGetter(DateType.Month, 1, 1);
            break;

          case 'MM':
          case 'LL':
            formatter = dateGetter(DateType.Month, 2, 1);
            break;
          // Month of the year (January, ...), string, format

          case 'MMM':
            formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Abbreviated);
            break;

          case 'MMMM':
            formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Wide);
            break;

          case 'MMMMM':
            formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Narrow);
            break;
          // Month of the year (January, ...), string, standalone

          case 'LLL':
            formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Abbreviated, FormStyle.Standalone);
            break;

          case 'LLLL':
            formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Wide, FormStyle.Standalone);
            break;

          case 'LLLLL':
            formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Narrow, FormStyle.Standalone);
            break;
          // Week of the year (1, ... 52)

          case 'w':
            formatter = weekGetter(1);
            break;

          case 'ww':
            formatter = weekGetter(2);
            break;
          // Week of the month (1, ...)

          case 'W':
            formatter = weekGetter(1, true);
            break;
          // Day of the month (1-31)

          case 'd':
            formatter = dateGetter(DateType.Date, 1);
            break;

          case 'dd':
            formatter = dateGetter(DateType.Date, 2);
            break;
          // Day of the Week StandAlone (1, 1, Mon, Monday, M, Mo)

          case 'c':
          case 'cc':
            formatter = dateGetter(DateType.Day, 1);
            break;

          case 'ccc':
            formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Abbreviated, FormStyle.Standalone);
            break;

          case 'cccc':
            formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Wide, FormStyle.Standalone);
            break;

          case 'ccccc':
            formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Narrow, FormStyle.Standalone);
            break;

          case 'cccccc':
            formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Short, FormStyle.Standalone);
            break;
          // Day of the Week

          case 'E':
          case 'EE':
          case 'EEE':
            formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Abbreviated);
            break;

          case 'EEEE':
            formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Wide);
            break;

          case 'EEEEE':
            formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Narrow);
            break;

          case 'EEEEEE':
            formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Short);
            break;
          // Generic period of the day (am-pm)

          case 'a':
          case 'aa':
          case 'aaa':
            formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated);
            break;

          case 'aaaa':
            formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide);
            break;

          case 'aaaaa':
            formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow);
            break;
          // Extended period of the day (midnight, at night, ...), standalone

          case 'b':
          case 'bb':
          case 'bbb':
            formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated, FormStyle.Standalone, true);
            break;

          case 'bbbb':
            formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide, FormStyle.Standalone, true);
            break;

          case 'bbbbb':
            formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow, FormStyle.Standalone, true);
            break;
          // Extended period of the day (midnight, night, ...), standalone

          case 'B':
          case 'BB':
          case 'BBB':
            formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated, FormStyle.Format, true);
            break;

          case 'BBBB':
            formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide, FormStyle.Format, true);
            break;

          case 'BBBBB':
            formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow, FormStyle.Format, true);
            break;
          // Hour in AM/PM, (1-12)

          case 'h':
            formatter = dateGetter(DateType.Hours, 1, -12);
            break;

          case 'hh':
            formatter = dateGetter(DateType.Hours, 2, -12);
            break;
          // Hour of the day (0-23)

          case 'H':
            formatter = dateGetter(DateType.Hours, 1);
            break;
          // Hour in day, padded (00-23)

          case 'HH':
            formatter = dateGetter(DateType.Hours, 2);
            break;
          // Minute of the hour (0-59)

          case 'm':
            formatter = dateGetter(DateType.Minutes, 1);
            break;

          case 'mm':
            formatter = dateGetter(DateType.Minutes, 2);
            break;
          // Second of the minute (0-59)

          case 's':
            formatter = dateGetter(DateType.Seconds, 1);
            break;

          case 'ss':
            formatter = dateGetter(DateType.Seconds, 2);
            break;
          // Fractional second

          case 'S':
            formatter = dateGetter(DateType.FractionalSeconds, 1);
            break;

          case 'SS':
            formatter = dateGetter(DateType.FractionalSeconds, 2);
            break;

          case 'SSS':
            formatter = dateGetter(DateType.FractionalSeconds, 3);
            break;
          // Timezone ISO8601 short format (-0430)

          case 'Z':
          case 'ZZ':
          case 'ZZZ':
            formatter = timeZoneGetter(ZoneWidth.Short);
            break;
          // Timezone ISO8601 extended format (-04:30)

          case 'ZZZZZ':
            formatter = timeZoneGetter(ZoneWidth.Extended);
            break;
          // Timezone GMT short format (GMT+4)

          case 'O':
          case 'OO':
          case 'OOO': // Should be location, but fallback to format O instead because we don't have the data yet

          case 'z':
          case 'zz':
          case 'zzz':
            formatter = timeZoneGetter(ZoneWidth.ShortGMT);
            break;
          // Timezone GMT long format (GMT+0430)

          case 'OOOO':
          case 'ZZZZ': // Should be location, but fallback to format O instead because we don't have the data yet

          case 'zzzz':
            formatter = timeZoneGetter(ZoneWidth.Long);
            break;

          default:
            return null;
        }

        DATE_FORMATS[format] = formatter;
        return formatter;
      }

      function timezoneToOffset(timezone, fallback) {
        // Support: IE 11 only, Edge 13-15+
        // IE/Edge do not "understand" colon (`:`) in timezone
        timezone = timezone.replace(/:/g, '');
        var requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;
        return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;
      }

      function addDateMinutes(date, minutes) {
        date = new Date(date.getTime());
        date.setMinutes(date.getMinutes() + minutes);
        return date;
      }

      function convertTimezoneToLocal(date, timezone, reverse) {
        var reverseValue = reverse ? -1 : 1;
        var dateTimezoneOffset = date.getTimezoneOffset();
        var timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);
        return addDateMinutes(date, reverseValue * (timezoneOffset - dateTimezoneOffset));
      }
      /**
       * Converts a value to date.
       *
       * Supported input formats:
       * - `Date`
       * - number: timestamp
       * - string: numeric (e.g. "1234"), ISO and date strings in a format supported by
       *   [Date.parse()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).
       *   Note: ISO strings without time return a date without timeoffset.
       *
       * Throws if unable to convert to a date.
       */


      function toDate(value) {
        if (isDate(value)) {
          return value;
        }

        if (typeof value === 'number' && !isNaN(value)) {
          return new Date(value);
        }

        if (typeof value === 'string') {
          value = value.trim();

          if (/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(value)) {
            /* For ISO Strings without time the day, month and year must be extracted from the ISO String
            before Date creation to avoid time offset and errors in the new Date.
            If we only replace '-' with ',' in the ISO String ("2015,01,01"), and try to create a new
            date, some browsers (e.g. IE 9) will throw an invalid Date error.
            If we leave the '-' ("2015-01-01") and try to create a new Date("2015-01-01") the timeoffset
            is applied.
            Note: ISO months are 0 for January, 1 for February, ... */
            var _value$split$map3 = value.split('-').map(function (val) {
              return +val;
            }),
                _value$split$map4 = _slicedToArray(_value$split$map3, 3),
                y = _value$split$map4[0],
                _value$split$map4$ = _value$split$map4[1],
                m = _value$split$map4$ === void 0 ? 1 : _value$split$map4$,
                _value$split$map4$2 = _value$split$map4[2],
                d = _value$split$map4$2 === void 0 ? 1 : _value$split$map4$2;

            return createDate(y, m - 1, d);
          }

          var parsedNb = parseFloat(value); // any string that only contains numbers, like "1234" but not like "1234hello"

          if (!isNaN(value - parsedNb)) {
            return new Date(parsedNb);
          }

          var match;

          if (match = value.match(ISO8601_DATE_REGEX)) {
            return isoStringToDate(match);
          }
        }

        var date = new Date(value);

        if (!isDate(date)) {
          throw new Error("Unable to convert \"".concat(value, "\" into a date"));
        }

        return date;
      }
      /**
       * Converts a date in ISO8601 to a Date.
       * Used instead of `Date.parse` because of browser discrepancies.
       */


      function isoStringToDate(match) {
        var date = new Date(0);
        var tzHour = 0;
        var tzMin = 0; // match[8] means that the string contains "Z" (UTC) or a timezone like "+01:00" or "+0100"

        var dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear;
        var timeSetter = match[8] ? date.setUTCHours : date.setHours; // if there is a timezone defined like "+01:00" or "+0100"

        if (match[9]) {
          tzHour = Number(match[9] + match[10]);
          tzMin = Number(match[9] + match[11]);
        }

        dateSetter.call(date, Number(match[1]), Number(match[2]) - 1, Number(match[3]));
        var h = Number(match[4] || 0) - tzHour;
        var m = Number(match[5] || 0) - tzMin;
        var s = Number(match[6] || 0); // The ECMAScript specification (https://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.11)
        // defines that `DateTime` milliseconds should always be rounded down, so that `999.9ms`
        // becomes `999ms`.

        var ms = Math.floor(parseFloat('0.' + (match[7] || 0)) * 1000);
        timeSetter.call(date, h, m, s, ms);
        return date;
      }

      function isDate(value) {
        return value instanceof Date && !isNaN(value.valueOf());
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var NUMBER_FORMAT_REGEXP = /^(\d+)?\.((\d+)(-(\d+))?)?$/;
      var MAX_DIGITS = 22;
      var DECIMAL_SEP = '.';
      var ZERO_CHAR = '0';
      var PATTERN_SEP = ';';
      var GROUP_SEP = ',';
      var DIGIT_CHAR = '#';
      var CURRENCY_CHAR = '¤';
      var PERCENT_CHAR = '%';
      /**
       * Transforms a number to a locale string based on a style and a format.
       */

      function formatNumberToLocaleString(value, pattern, locale, groupSymbol, decimalSymbol, digitsInfo) {
        var isPercent = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false;
        var formattedText = '';
        var isZero = false;

        if (!isFinite(value)) {
          formattedText = getLocaleNumberSymbol(locale, NumberSymbol.Infinity);
        } else {
          var parsedNumber = parseNumber(value);

          if (isPercent) {
            parsedNumber = toPercent(parsedNumber);
          }

          var minInt = pattern.minInt;
          var minFraction = pattern.minFrac;
          var maxFraction = pattern.maxFrac;

          if (digitsInfo) {
            var parts = digitsInfo.match(NUMBER_FORMAT_REGEXP);

            if (parts === null) {
              throw new Error("".concat(digitsInfo, " is not a valid digit info"));
            }

            var minIntPart = parts[1];
            var minFractionPart = parts[3];
            var maxFractionPart = parts[5];

            if (minIntPart != null) {
              minInt = parseIntAutoRadix(minIntPart);
            }

            if (minFractionPart != null) {
              minFraction = parseIntAutoRadix(minFractionPart);
            }

            if (maxFractionPart != null) {
              maxFraction = parseIntAutoRadix(maxFractionPart);
            } else if (minFractionPart != null && minFraction > maxFraction) {
              maxFraction = minFraction;
            }
          }

          roundNumber(parsedNumber, minFraction, maxFraction);
          var digits = parsedNumber.digits;
          var integerLen = parsedNumber.integerLen;
          var exponent = parsedNumber.exponent;
          var decimals = [];
          isZero = digits.every(function (d) {
            return !d;
          }); // pad zeros for small numbers

          for (; integerLen < minInt; integerLen++) {
            digits.unshift(0);
          } // pad zeros for small numbers


          for (; integerLen < 0; integerLen++) {
            digits.unshift(0);
          } // 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(getLocaleNumberSymbol(locale, groupSymbol)); // append the decimal digits

          if (decimals.length) {
            formattedText += getLocaleNumberSymbol(locale, decimalSymbol) + decimals.join('');
          }

          if (exponent) {
            formattedText += getLocaleNumberSymbol(locale, NumberSymbol.Exponential) + '+' + exponent;
          }
        }

        if (value < 0 && !isZero) {
          formattedText = pattern.negPre + formattedText + pattern.negSuf;
        } else {
          formattedText = pattern.posPre + formattedText + pattern.posSuf;
        }

        return formattedText;
      }
      /**
       * @ngModule CommonModule
       * @description
       *
       * Formats a number as currency using locale rules.
       *
       * @param value The number to format.
       * @param locale A locale code for the locale format rules to use.
       * @param currency A string containing the currency symbol or its name,
       * such as "$" or "Canadian Dollar". Used in output string, but does not affect the operation
       * of the function.
       * @param currencyCode The [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217)
       * currency code, such as `USD` for the US dollar and `EUR` for the euro.
       * Used to determine the number of digits in the decimal part.
       * @param digitsInfo Decimal representation options, specified by a string in the following format:
       * `{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}`. See `DecimalPipe` for more details.
       *
       * @returns The formatted currency value.
       *
       * @see `formatNumber()`
       * @see `DecimalPipe`
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */


      function formatCurrency(value, locale, currency, currencyCode, digitsInfo) {
        var format = getLocaleNumberFormat(locale, NumberFormatStyle.Currency);
        var pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));
        pattern.minFrac = getNumberOfCurrencyDigits(currencyCode);
        pattern.maxFrac = pattern.minFrac;
        var res = formatNumberToLocaleString(value, pattern, locale, NumberSymbol.CurrencyGroup, NumberSymbol.CurrencyDecimal, digitsInfo);
        return res.replace(CURRENCY_CHAR, currency) // if we have 2 time the currency character, the second one is ignored
        .replace(CURRENCY_CHAR, '') // If there is a spacing between currency character and the value and
        // the currency character is supressed by passing an empty string, the
        // spacing character would remain as part of the string. Then we
        // should remove it.
        .trim();
      }
      /**
       * @ngModule CommonModule
       * @description
       *
       * Formats a number as a percentage according to locale rules.
       *
       * @param value The number to format.
       * @param locale A locale code for the locale format rules to use.
       * @param digitsInfo Decimal representation options, specified by a string in the following format:
       * `{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}`. See `DecimalPipe` for more details.
       *
       * @returns The formatted percentage value.
       *
       * @see `formatNumber()`
       * @see `DecimalPipe`
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       * @publicApi
       *
       */


      function formatPercent(value, locale, digitsInfo) {
        var format = getLocaleNumberFormat(locale, NumberFormatStyle.Percent);
        var pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));
        var res = formatNumberToLocaleString(value, pattern, locale, NumberSymbol.Group, NumberSymbol.Decimal, digitsInfo, true);
        return res.replace(new RegExp(PERCENT_CHAR, 'g'), getLocaleNumberSymbol(locale, NumberSymbol.PercentSign));
      }
      /**
       * @ngModule CommonModule
       * @description
       *
       * Formats a number as text, with group sizing, separator, and other
       * parameters based on the locale.
       *
       * @param value The number to format.
       * @param locale A locale code for the locale format rules to use.
       * @param digitsInfo Decimal representation options, specified by a string in the following format:
       * `{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}`. See `DecimalPipe` for more details.
       *
       * @returns The formatted text string.
       * @see [Internationalization (i18n) Guide](https://angular.io/guide/i18n)
       *
       * @publicApi
       */


      function formatNumber(value, locale, digitsInfo) {
        var format = getLocaleNumberFormat(locale, NumberFormatStyle.Decimal);
        var pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));
        return formatNumberToLocaleString(value, pattern, locale, NumberSymbol.Group, NumberSymbol.Decimal, digitsInfo);
      }

      function parseNumberFormat(format) {
        var minusSign = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '-';
        var p = {
          minInt: 1,
          minFrac: 0,
          maxFrac: 0,
          posPre: '',
          posSuf: '',
          negPre: '',
          negSuf: '',
          gSize: 0,
          lgSize: 0
        };
        var patternParts = format.split(PATTERN_SEP);
        var positive = patternParts[0];
        var negative = patternParts[1];
        var positiveParts = positive.indexOf(DECIMAL_SEP) !== -1 ? positive.split(DECIMAL_SEP) : [positive.substring(0, positive.lastIndexOf(ZERO_CHAR) + 1), positive.substring(positive.lastIndexOf(ZERO_CHAR) + 1)],
            integer = positiveParts[0],
            fraction = positiveParts[1] || '';
        p.posPre = integer.substr(0, integer.indexOf(DIGIT_CHAR));

        for (var i = 0; i < fraction.length; i++) {
          var ch = fraction.charAt(i);

          if (ch === ZERO_CHAR) {
            p.minFrac = p.maxFrac = i + 1;
          } else if (ch === DIGIT_CHAR) {
            p.maxFrac = i + 1;
          } else {
            p.posSuf += ch;
          }
        }

        var groups = integer.split(GROUP_SEP);
        p.gSize = groups[1] ? groups[1].length : 0;
        p.lgSize = groups[2] || groups[1] ? (groups[2] || groups[1]).length : 0;

        if (negative) {
          var trunkLen = positive.length - p.posPre.length - p.posSuf.length,
              pos = negative.indexOf(DIGIT_CHAR);
          p.negPre = negative.substr(0, pos).replace(/'/g, '');
          p.negSuf = negative.substr(pos + trunkLen).replace(/'/g, '');
        } else {
          p.negPre = minusSign + p.posPre;
          p.negSuf = p.posSuf;
        }

        return p;
      } // Transforms a parsed number into a percentage by multiplying it by 100


      function toPercent(parsedNumber) {
        // if the number is 0, don't do anything
        if (parsedNumber.digits[0] === 0) {
          return parsedNumber;
        } // Getting the current number of decimals


        var fractionLen = parsedNumber.digits.length - parsedNumber.integerLen;

        if (parsedNumber.exponent) {
          parsedNumber.exponent += 2;
        } else {
          if (fractionLen === 0) {
            parsedNumber.digits.push(0, 0);
          } else if (fractionLen === 1) {
            parsedNumber.digits.push(0);
          }

          parsedNumber.integerLen += 2;
        }

        return parsedNumber;
      }
      /**
       * Parses a number.
       * Significant bits of this parse algorithm came from https://github.com/MikeMcl/big.js/
       */


      function parseNumber(num) {
        var numStr = Math.abs(num) + '';
        var exponent = 0,
            digits,
            integerLen;
        var i, j, zeros; // Decimal point?

        if ((integerLen = numStr.indexOf(DECIMAL_SEP)) > -1) {
          numStr = numStr.replace(DECIMAL_SEP, '');
        } // Exponential form?


        if ((i = numStr.search(/e/i)) > 0) {
          // Work out the exponent.
          if (integerLen < 0) integerLen = i;
          integerLen += +numStr.slice(i + 1);
          numStr = numStr.substring(0, i);
        } else if (integerLen < 0) {
          // There was no decimal point or exponent so it is an integer.
          integerLen = 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];
          integerLen = 1;
        } else {
          // Count the number of trailing zeros
          zeros--;

          while (numStr.charAt(zeros) === ZERO_CHAR) {
            zeros--;
          } // Trailing zeros are insignificant so ignore them


          integerLen -= i;
          digits = []; // Convert string to array of digits without leading/trailing zeros.

          for (j = 0; i <= zeros; i++, j++) {
            digits[j] = Number(numStr.charAt(i));
          }
        } // If the number overflows the maximum allowed digits then use an exponent.


        if (integerLen > MAX_DIGITS) {
          digits = digits.splice(0, MAX_DIGITS - 1);
          exponent = integerLen - 1;
          integerLen = 1;
        }

        return {
          digits: digits,
          exponent: exponent,
          integerLen: integerLen
        };
      }
      /**
       * Round the parsed number to the specified number of decimal places
       * This function changes the parsedNumber in-place
       */


      function roundNumber(parsedNumber, minFrac, maxFrac) {
        if (minFrac > maxFrac) {
          throw new Error("The minimum number of digits after fraction (".concat(minFrac, ") is higher than the maximum (").concat(maxFrac, ")."));
        }

        var digits = parsedNumber.digits;
        var fractionLen = digits.length - parsedNumber.integerLen;
        var fractionSize = Math.min(Math.max(minFrac, fractionLen), maxFrac); // The index of the digit to where rounding is to occur

        var roundAt = fractionSize + parsedNumber.integerLen;
        var digit = digits[roundAt];

        if (roundAt > 0) {
          // Drop fractional digits beyond `roundAt`
          digits.splice(Math.max(parsedNumber.integerLen, 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.integerLen = 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.integerLen++;
            }

            digits.unshift(1);
            parsedNumber.integerLen++;
          } else {
            digits[roundAt - 1]++;
          }
        } // Pad out with zeros to get the required fraction length


        for (; fractionLen < Math.max(0, fractionSize); fractionLen++) {
          digits.push(0);
        }

        var dropTrailingZeros = fractionSize !== 0; // Minimal length = nb of decimals required + current nb of integers
        // Any number besides that is optional and can be removed if it's a trailing 0

        var minLen = minFrac + parsedNumber.integerLen; // 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 ? d : d - 10; // d % 10

          if (dropTrailingZeros) {
            // Do not keep meaningless fractional trailing zeros (e.g. 15.52000 --> 15.52)
            if (digits[i] === 0 && i >= minLen) {
              digits.pop();
            } else {
              dropTrailingZeros = false;
            }
          }

          return d >= 10 ? 1 : 0; // Math.floor(d / 10);
        }, 0);

        if (carry) {
          digits.unshift(carry);
          parsedNumber.integerLen++;
        }
      }

      function parseIntAutoRadix(text) {
        var result = parseInt(text);

        if (isNaN(result)) {
          throw new Error('Invalid integer literal when parsing ' + text);
        }

        return result;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @publicApi
       */


      var NgLocalization = function NgLocalization() {
        _classCallCheck2(this, NgLocalization);
      };
      /**
       * Returns the plural category for a given value.
       * - "=value" when the case exists,
       * - the plural category otherwise
       */


      function getPluralCategory(value, cases, ngLocalization, locale) {
        var key = "=".concat(value);

        if (cases.indexOf(key) > -1) {
          return key;
        }

        key = ngLocalization.getPluralCategory(value, locale);

        if (cases.indexOf(key) > -1) {
          return key;
        }

        if (cases.indexOf('other') > -1) {
          return 'other';
        }

        throw new Error("No plural message found for value \"".concat(value, "\""));
      }
      /**
       * Returns the plural case based on the locale
       *
       * @publicApi
       */


      var NgLocaleLocalization = /*#__PURE__*/function (_NgLocalization) {
        _inherits2(NgLocaleLocalization, _NgLocalization);

        var _super352 = _createSuper(NgLocaleLocalization);

        function NgLocaleLocalization(locale) {
          var _this825;

          _classCallCheck2(this, NgLocaleLocalization);

          _this825 = _super352.call(this);
          _this825.locale = locale;
          return _this825;
        }

        _createClass2(NgLocaleLocalization, [{
          key: "getPluralCategory",
          value: function getPluralCategory(value, locale) {
            var plural = getLocalePluralCase(locale || this.locale)(value);

            switch (plural) {
              case Plural.Zero:
                return 'zero';

              case Plural.One:
                return 'one';

              case Plural.Two:
                return 'two';

              case Plural.Few:
                return 'few';

              case Plural.Many:
                return 'many';

              default:
                return 'other';
            }
          }
        }]);

        return NgLocaleLocalization;
      }(NgLocalization);

      NgLocaleLocalization.ɵfac = function NgLocaleLocalization_Factory(t) {
        return new (t || NgLocaleLocalization)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]));
      };

      NgLocaleLocalization.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: NgLocaleLocalization,
        factory: NgLocaleLocalization.ɵfac
      });

      NgLocaleLocalization.ctorParameters = function () {
        return [{
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgLocaleLocalization, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Register global data to be used internally by Angular. See the
       * ["I18n guide"](guide/i18n#i18n-pipes) to know how to import additional locale data.
       *
       * The signature registerLocaleData(data: any, extraData?: any) is deprecated since v5.1
       *
       * @publicApi
       */


      function registerLocaleData(data, localeId, extraData) {
        return Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵregisterLocaleData"])(data, localeId, extraData);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function parseCookieValue(cookieStr, name) {
        name = encodeURIComponent(name);

        var _iterator99 = _createForOfIteratorHelper(cookieStr.split(';')),
            _step98;

        try {
          for (_iterator99.s(); !(_step98 = _iterator99.n()).done;) {
            var cookie = _step98.value;
            var eqIndex = cookie.indexOf('=');

            var _ref135 = eqIndex == -1 ? [cookie, ''] : [cookie.slice(0, eqIndex), cookie.slice(eqIndex + 1)],
                _ref136 = _slicedToArray(_ref135, 2),
                cookieName = _ref136[0],
                cookieValue = _ref136[1];

            if (cookieName.trim() === name) {
              return decodeURIComponent(cookieValue);
            }
          }
        } catch (err) {
          _iterator99.e(err);
        } finally {
          _iterator99.f();
        }

        return null;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @ngModule CommonModule
       *
       * @usageNotes
       * ```
       *     <some-element [ngClass]="'first second'">...</some-element>
       *
       *     <some-element [ngClass]="['first', 'second']">...</some-element>
       *
       *     <some-element [ngClass]="{'first': true, 'second': true, 'third': false}">...</some-element>
       *
       *     <some-element [ngClass]="stringExp|arrayExp|objExp">...</some-element>
       *
       *     <some-element [ngClass]="{'class1 class2 class3' : true}">...</some-element>
       * ```
       *
       * @description
       *
       * Adds and removes CSS classes on an HTML element.
       *
       * The CSS classes are updated as follows, depending on the type of the expression evaluation:
       * - `string` - the CSS classes listed in the string (space delimited) are added,
       * - `Array` - the CSS classes declared as Array elements are added,
       * - `Object` - keys are CSS classes that get added when the expression given in the value
       *              evaluates to a truthy value, otherwise they are removed.
       *
       * @publicApi
       */


      var NgClass = /*#__PURE__*/function () {
        function NgClass(_iterableDiffers, _keyValueDiffers, _ngEl, _renderer) {
          _classCallCheck2(this, NgClass);

          this._iterableDiffers = _iterableDiffers;
          this._keyValueDiffers = _keyValueDiffers;
          this._ngEl = _ngEl;
          this._renderer = _renderer;
          this._iterableDiffer = null;
          this._keyValueDiffer = null;
          this._initialClasses = [];
          this._rawClass = null;
        }

        _createClass2(NgClass, [{
          key: "klass",
          set: function set(value) {
            this._removeClasses(this._initialClasses);

            this._initialClasses = typeof value === 'string' ? value.split(/\s+/) : [];

            this._applyClasses(this._initialClasses);

            this._applyClasses(this._rawClass);
          }
        }, {
          key: "ngClass",
          set: function set(value) {
            this._removeClasses(this._rawClass);

            this._applyClasses(this._initialClasses);

            this._iterableDiffer = null;
            this._keyValueDiffer = null;
            this._rawClass = typeof value === 'string' ? value.split(/\s+/) : value;

            if (this._rawClass) {
              if (Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵisListLikeIterable"])(this._rawClass)) {
                this._iterableDiffer = this._iterableDiffers.find(this._rawClass).create();
              } else {
                this._keyValueDiffer = this._keyValueDiffers.find(this._rawClass).create();
              }
            }
          }
        }, {
          key: "ngDoCheck",
          value: function ngDoCheck() {
            if (this._iterableDiffer) {
              var iterableChanges = this._iterableDiffer.diff(this._rawClass);

              if (iterableChanges) {
                this._applyIterableChanges(iterableChanges);
              }
            } else if (this._keyValueDiffer) {
              var keyValueChanges = this._keyValueDiffer.diff(this._rawClass);

              if (keyValueChanges) {
                this._applyKeyValueChanges(keyValueChanges);
              }
            }
          }
        }, {
          key: "_applyKeyValueChanges",
          value: function _applyKeyValueChanges(changes) {
            var _this826 = this;

            changes.forEachAddedItem(function (record) {
              return _this826._toggleClass(record.key, record.currentValue);
            });
            changes.forEachChangedItem(function (record) {
              return _this826._toggleClass(record.key, record.currentValue);
            });
            changes.forEachRemovedItem(function (record) {
              if (record.previousValue) {
                _this826._toggleClass(record.key, false);
              }
            });
          }
        }, {
          key: "_applyIterableChanges",
          value: function _applyIterableChanges(changes) {
            var _this827 = this;

            changes.forEachAddedItem(function (record) {
              if (typeof record.item === 'string') {
                _this827._toggleClass(record.item, true);
              } else {
                throw new Error("NgClass can only toggle CSS classes expressed as strings, got ".concat(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵstringify"])(record.item)));
              }
            });
            changes.forEachRemovedItem(function (record) {
              return _this827._toggleClass(record.item, false);
            });
          }
          /**
           * Applies a collection of CSS classes to the DOM element.
           *
           * For argument of type Set and Array CSS class names contained in those collections are always
           * added.
           * For argument of type Map CSS class name in the map's key is toggled based on the value (added
           * for truthy and removed for falsy).
           */

        }, {
          key: "_applyClasses",
          value: function _applyClasses(rawClassVal) {
            var _this828 = this;

            if (rawClassVal) {
              if (Array.isArray(rawClassVal) || rawClassVal instanceof Set) {
                rawClassVal.forEach(function (klass) {
                  return _this828._toggleClass(klass, true);
                });
              } else {
                Object.keys(rawClassVal).forEach(function (klass) {
                  return _this828._toggleClass(klass, !!rawClassVal[klass]);
                });
              }
            }
          }
          /**
           * Removes a collection of CSS classes from the DOM element. This is mostly useful for cleanup
           * purposes.
           */

        }, {
          key: "_removeClasses",
          value: function _removeClasses(rawClassVal) {
            var _this829 = this;

            if (rawClassVal) {
              if (Array.isArray(rawClassVal) || rawClassVal instanceof Set) {
                rawClassVal.forEach(function (klass) {
                  return _this829._toggleClass(klass, false);
                });
              } else {
                Object.keys(rawClassVal).forEach(function (klass) {
                  return _this829._toggleClass(klass, false);
                });
              }
            }
          }
        }, {
          key: "_toggleClass",
          value: function _toggleClass(klass, enabled) {
            var _this830 = this;

            klass = klass.trim();

            if (klass) {
              klass.split(/\s+/g).forEach(function (klass) {
                if (enabled) {
                  _this830._renderer.addClass(_this830._ngEl.nativeElement, klass);
                } else {
                  _this830._renderer.removeClass(_this830._ngEl.nativeElement, klass);
                }
              });
            }
          }
        }]);

        return NgClass;
      }();

      NgClass.ɵfac = function NgClass_Factory(t) {
        return new (t || NgClass)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["IterableDiffers"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]));
      };

      NgClass.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgClass,
        selectors: [["", "ngClass", ""]],
        inputs: {
          klass: ["class", "klass"],
          ngClass: "ngClass"
        }
      });

      NgClass.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["IterableDiffers"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }];
      };

      NgClass.propDecorators = {
        klass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['class']
        }],
        ngClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['ngClass']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgClass, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngClass]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["IterableDiffers"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }];
        }, {
          klass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['class']
          }],
          ngClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['ngClass']
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Instantiates a single {@link Component} type and inserts its Host View into current View.
       * `NgComponentOutlet` provides a declarative approach for dynamic component creation.
       *
       * `NgComponentOutlet` requires a component type, if a falsy value is set the view will clear and
       * any existing component will get destroyed.
       *
       * @usageNotes
       *
       * ### Fine tune control
       *
       * You can control the component creation process by using the following optional attributes:
       *
       * * `ngComponentOutletInjector`: Optional custom {@link Injector} that will be used as parent for
       * the Component. Defaults to the injector of the current view container.
       *
       * * `ngComponentOutletContent`: Optional list of projectable nodes to insert into the content
       * section of the component, if exists.
       *
       * * `ngComponentOutletNgModuleFactory`: Optional module factory to allow dynamically loading other
       * module, then load a component from that module.
       *
       * ### Syntax
       *
       * Simple
       * ```
       * <ng-container *ngComponentOutlet="componentTypeExpression"></ng-container>
       * ```
       *
       * Customized injector/content
       * ```
       * <ng-container *ngComponentOutlet="componentTypeExpression;
       *                                   injector: injectorExpression;
       *                                   content: contentNodesExpression;">
       * </ng-container>
       * ```
       *
       * Customized ngModuleFactory
       * ```
       * <ng-container *ngComponentOutlet="componentTypeExpression;
       *                                   ngModuleFactory: moduleFactory;">
       * </ng-container>
       * ```
       *
       * ### A simple example
       *
       * {@example common/ngComponentOutlet/ts/module.ts region='SimpleExample'}
       *
       * A more complete example with additional options:
       *
       * {@example common/ngComponentOutlet/ts/module.ts region='CompleteExample'}
       *
       * @publicApi
       * @ngModule CommonModule
       */


      var NgComponentOutlet = /*#__PURE__*/function () {
        function NgComponentOutlet(_viewContainerRef) {
          _classCallCheck2(this, NgComponentOutlet);

          this._viewContainerRef = _viewContainerRef;
          this._componentRef = null;
          this._moduleRef = null;
        }

        _createClass2(NgComponentOutlet, [{
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            this._viewContainerRef.clear();

            this._componentRef = null;

            if (this.ngComponentOutlet) {
              var elInjector = this.ngComponentOutletInjector || this._viewContainerRef.parentInjector;

              if (changes['ngComponentOutletNgModuleFactory']) {
                if (this._moduleRef) this._moduleRef.destroy();

                if (this.ngComponentOutletNgModuleFactory) {
                  var parentModule = elInjector.get(_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModuleRef"]);
                  this._moduleRef = this.ngComponentOutletNgModuleFactory.create(parentModule.injector);
                } else {
                  this._moduleRef = null;
                }
              }

              var componentFactoryResolver = this._moduleRef ? this._moduleRef.componentFactoryResolver : elInjector.get(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"]);
              var componentFactory = componentFactoryResolver.resolveComponentFactory(this.ngComponentOutlet);
              this._componentRef = this._viewContainerRef.createComponent(componentFactory, this._viewContainerRef.length, elInjector, this.ngComponentOutletContent);
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            if (this._moduleRef) this._moduleRef.destroy();
          }
        }]);

        return NgComponentOutlet;
      }();

      NgComponentOutlet.ɵfac = function NgComponentOutlet_Factory(t) {
        return new (t || NgComponentOutlet)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]));
      };

      NgComponentOutlet.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgComponentOutlet,
        selectors: [["", "ngComponentOutlet", ""]],
        inputs: {
          ngComponentOutlet: "ngComponentOutlet",
          ngComponentOutletInjector: "ngComponentOutletInjector",
          ngComponentOutletContent: "ngComponentOutletContent",
          ngComponentOutletNgModuleFactory: "ngComponentOutletNgModuleFactory"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
      });

      NgComponentOutlet.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
        }];
      };

      NgComponentOutlet.propDecorators = {
        ngComponentOutlet: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        ngComponentOutletInjector: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        ngComponentOutletContent: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        ngComponentOutletNgModuleFactory: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgComponentOutlet, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngComponentOutlet]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
          }];
        }, {
          ngComponentOutlet: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          ngComponentOutletInjector: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          ngComponentOutletContent: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          ngComponentOutletNgModuleFactory: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @publicApi
       */


      var NgForOfContext = /*#__PURE__*/function () {
        function NgForOfContext($implicit, ngForOf, index, count) {
          _classCallCheck2(this, NgForOfContext);

          this.$implicit = $implicit;
          this.ngForOf = ngForOf;
          this.index = index;
          this.count = count;
        }

        _createClass2(NgForOfContext, [{
          key: "first",
          get: function get() {
            return this.index === 0;
          }
        }, {
          key: "last",
          get: function get() {
            return this.index === this.count - 1;
          }
        }, {
          key: "even",
          get: function get() {
            return this.index % 2 === 0;
          }
        }, {
          key: "odd",
          get: function get() {
            return !this.even;
          }
        }]);

        return NgForOfContext;
      }();
      /**
       * A [structural directive](guide/structural-directives) that renders
       * a template for each item in a collection.
       * The directive is placed on an element, which becomes the parent
       * of the cloned templates.
       *
       * The `ngForOf` directive is generally used in the
       * [shorthand form](guide/structural-directives#the-asterisk--prefix) `*ngFor`.
       * In this form, the template to be rendered for each iteration is the content
       * of an anchor element containing the directive.
       *
       * The following example shows the shorthand syntax with some options,
       * contained in an `<li>` element.
       *
       * ```
       * <li *ngFor="let item of items; index as i; trackBy: trackByFn">...</li>
       * ```
       *
       * The shorthand form expands into a long form that uses the `ngForOf` selector
       * on an `<ng-template>` element.
       * The content of the `<ng-template>` element is the `<li>` element that held the
       * short-form directive.
       *
       * Here is the expanded version of the short-form example.
       *
       * ```
       * <ng-template ngFor let-item [ngForOf]="items" let-i="index" [ngForTrackBy]="trackByFn">
       *   <li>...</li>
       * </ng-template>
       * ```
       *
       * Angular automatically expands the shorthand syntax as it compiles the template.
       * The context for each embedded view is logically merged to the current component
       * context according to its lexical position.
       *
       * When using the shorthand syntax, Angular allows only [one structural directive
       * on an element](guide/structural-directives#one-structural-directive-per-host-element).
       * If you want to iterate conditionally, for example,
       * put the `*ngIf` on a container element that wraps the `*ngFor` element.
       * For futher discussion, see
       * [Structural Directives](guide/structural-directives#one-per-element).
       *
       * @usageNotes
       *
       * ### Local variables
       *
       * `NgForOf` provides exported values that can be aliased to local variables.
       * For example:
       *
       *  ```
       * <li *ngFor="let user of users; index as i; first as isFirst">
       *    {{i}}/{{users.length}}. {{user}} <span *ngIf="isFirst">default</span>
       * </li>
       * ```
       *
       * The following exported values can be aliased to local variables:
       *
       * - `$implicit: T`: The value of the individual items in the iterable (`ngForOf`).
       * - `ngForOf: NgIterable<T>`: The value of the iterable expression. Useful when the expression is
       * more complex then a property access, for example when using the async pipe (`userStreams |
       * async`).
       * - `index: number`: The index of the current item in the iterable.
       * - `count: number`: The length of the iterable.
       * - `first: boolean`: True when the item is the first item in the iterable.
       * - `last: boolean`: True when the item is the last item in the iterable.
       * - `even: boolean`: True when the item has an even index in the iterable.
       * - `odd: boolean`: True when the item has an odd index in the iterable.
       *
       * ### Change propagation
       *
       * When the contents of the iterator changes, `NgForOf` makes the corresponding changes to the DOM:
       *
       * * When an item is added, a new instance of the template is added to the DOM.
       * * When an item is removed, its template instance is removed from the DOM.
       * * When items are reordered, their respective templates are reordered in the DOM.
       *
       * Angular uses object identity to track insertions and deletions within the iterator and reproduce
       * those changes in the DOM. This has important implications for animations and any stateful
       * controls that are present, such as `<input>` elements that accept user input. Inserted rows can
       * be animated in, deleted rows can be animated out, and unchanged rows retain any unsaved state
       * such as user input.
       * For more on animations, see [Transitions and Triggers](guide/transition-and-triggers).
       *
       * The identities of elements in the iterator can change while the data does not.
       * This can happen, for example, if the iterator is produced from an RPC to the server, and that
       * RPC is re-run. Even if the data hasn't changed, the second response produces objects with
       * different identities, and Angular must tear down the entire DOM and rebuild it (as if all old
       * elements were deleted and all new elements inserted).
       *
       * To avoid this expensive operation, you can customize the default tracking algorithm.
       * by supplying the `trackBy` option to `NgForOf`.
       * `trackBy` takes a function that has two arguments: `index` and `item`.
       * If `trackBy` is given, Angular tracks changes by the return value of the function.
       *
       * @see [Structural Directives](guide/structural-directives)
       * @ngModule CommonModule
       * @publicApi
       */


      var NgForOf = /*#__PURE__*/function () {
        function NgForOf(_viewContainer, _template, _differs) {
          _classCallCheck2(this, NgForOf);

          this._viewContainer = _viewContainer;
          this._template = _template;
          this._differs = _differs;
          this._ngForOf = null;
          this._ngForOfDirty = true;
          this._differ = null;
        }
        /**
         * The value of the iterable expression, which can be used as a
         * [template input variable](guide/structural-directives#template-input-variable).
         */


        _createClass2(NgForOf, [{
          key: "ngForOf",
          set: function set(ngForOf) {
            this._ngForOf = ngForOf;
            this._ngForOfDirty = true;
          }
          /**
           * A function that defines how to track changes for items in the iterable.
           *
           * When items are added, moved, or removed in the iterable,
           * the directive must re-render the appropriate DOM nodes.
           * To minimize churn in the DOM, only nodes that have changed
           * are re-rendered.
           *
           * By default, the change detector assumes that
           * the object instance identifies the node in the iterable.
           * When this function is supplied, the directive uses
           * the result of calling this function to identify the item node,
           * rather than the identity of the object itself.
           *
           * The function receives two inputs,
           * the iteration index and the associated node data.
           */

        }, {
          key: "ngForTrackBy",
          get: function get() {
            return this._trackByFn;
          }
          /**
           * A reference to the template that is stamped out for each item in the iterable.
           * @see [template reference variable](guide/template-reference-variables)
           */
          ,
          set: function set(fn) {
            if ((typeof ngDevMode === 'undefined' || ngDevMode) && fn != null && typeof fn !== 'function') {
              // TODO(vicb): use a log service once there is a public one available
              if (console && console.warn) {
                console.warn("trackBy must be a function, but received ".concat(JSON.stringify(fn), ". ") + "See https://angular.io/api/common/NgForOf#change-propagation for more information.");
              }
            }

            this._trackByFn = fn;
          }
        }, {
          key: "ngForTemplate",
          set: function set(value) {
            // TODO(TS2.1): make TemplateRef<Partial<NgForRowOf<T>>> once we move to TS v2.1
            // The current type is too restrictive; a template that just uses index, for example,
            // should be acceptable.
            if (value) {
              this._template = value;
            }
          }
          /**
           * Applies the changes when needed.
           */

        }, {
          key: "ngDoCheck",
          value: function ngDoCheck() {
            if (this._ngForOfDirty) {
              this._ngForOfDirty = false; // React on ngForOf changes only once all inputs have been initialized

              var value = this._ngForOf;

              if (!this._differ && value) {
                try {
                  this._differ = this._differs.find(value).create(this.ngForTrackBy);
                } catch (_a) {
                  throw new Error("Cannot find a differ supporting object '".concat(value, "' of type '").concat(getTypeName(value), "'. NgFor only supports binding to Iterables such as Arrays."));
                }
              }
            }

            if (this._differ) {
              var changes = this._differ.diff(this._ngForOf);

              if (changes) this._applyChanges(changes);
            }
          }
        }, {
          key: "_applyChanges",
          value: function _applyChanges(changes) {
            var _this831 = this;

            var insertTuples = [];
            changes.forEachOperation(function (item, adjustedPreviousIndex, currentIndex) {
              if (item.previousIndex == null) {
                // NgForOf is never "null" or "undefined" here because the differ detected
                // that a new item needs to be inserted from the iterable. This implies that
                // there is an iterable value for "_ngForOf".
                var view = _this831._viewContainer.createEmbeddedView(_this831._template, new NgForOfContext(null, _this831._ngForOf, -1, -1), currentIndex === null ? undefined : currentIndex);

                var tuple = new RecordViewTuple(item, view);
                insertTuples.push(tuple);
              } else if (currentIndex == null) {
                _this831._viewContainer.remove(adjustedPreviousIndex === null ? undefined : adjustedPreviousIndex);
              } else if (adjustedPreviousIndex !== null) {
                var _view3 = _this831._viewContainer.get(adjustedPreviousIndex);

                _this831._viewContainer.move(_view3, currentIndex);

                var _tuple2 = new RecordViewTuple(item, _view3);

                insertTuples.push(_tuple2);
              }
            });

            for (var i = 0; i < insertTuples.length; i++) {
              this._perViewChange(insertTuples[i].view, insertTuples[i].record);
            }

            for (var _i53 = 0, ilen = this._viewContainer.length; _i53 < ilen; _i53++) {
              var viewRef = this._viewContainer.get(_i53);

              viewRef.context.index = _i53;
              viewRef.context.count = ilen;
              viewRef.context.ngForOf = this._ngForOf;
            }

            changes.forEachIdentityChange(function (record) {
              var viewRef = _this831._viewContainer.get(record.currentIndex);

              viewRef.context.$implicit = record.item;
            });
          }
        }, {
          key: "_perViewChange",
          value: function _perViewChange(view, record) {
            view.context.$implicit = record.item;
          }
          /**
           * Asserts the correct type of the context for the template that `NgForOf` will render.
           *
           * The presence of this method is a signal to the Ivy template type-check compiler that the
           * `NgForOf` structural directive renders its template with a specific context type.
           */

        }], [{
          key: "ngTemplateContextGuard",
          value: function ngTemplateContextGuard(dir, ctx) {
            return true;
          }
        }]);

        return NgForOf;
      }();

      NgForOf.ɵfac = function NgForOf_Factory(t) {
        return new (t || NgForOf)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["IterableDiffers"]));
      };

      NgForOf.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgForOf,
        selectors: [["", "ngFor", "", "ngForOf", ""]],
        inputs: {
          ngForOf: "ngForOf",
          ngForTrackBy: "ngForTrackBy",
          ngForTemplate: "ngForTemplate"
        }
      });

      NgForOf.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["IterableDiffers"]
        }];
      };

      NgForOf.propDecorators = {
        ngForOf: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        ngForTrackBy: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        ngForTemplate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgForOf, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngFor][ngForOf]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["IterableDiffers"]
          }];
        }, {
          ngForOf: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          ngForTrackBy: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          ngForTemplate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();

      var RecordViewTuple = function RecordViewTuple(record, view) {
        _classCallCheck2(this, RecordViewTuple);

        this.record = record;
        this.view = view;
      };

      function getTypeName(type) {
        return type['name'] || typeof type;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A structural directive that conditionally includes a template based on the value of
       * an expression coerced to Boolean.
       * When the expression evaluates to true, Angular renders the template
       * provided in a `then` clause, and when  false or null,
       * Angular renders the template provided in an optional `else` clause. The default
       * template for the `else` clause is blank.
       *
       * A [shorthand form](guide/structural-directives#the-asterisk--prefix) of the directive,
       * `*ngIf="condition"`, is generally used, provided
       * as an attribute of the anchor element for the inserted template.
       * Angular expands this into a more explicit version, in which the anchor element
       * is contained in an `<ng-template>` element.
       *
       * Simple form with shorthand syntax:
       *
       * ```
       * <div *ngIf="condition">Content to render when condition is true.</div>
       * ```
       *
       * Simple form with expanded syntax:
       *
       * ```
       * <ng-template [ngIf]="condition"><div>Content to render when condition is
       * true.</div></ng-template>
       * ```
       *
       * Form with an "else" block:
       *
       * ```
       * <div *ngIf="condition; else elseBlock">Content to render when condition is true.</div>
       * <ng-template #elseBlock>Content to render when condition is false.</ng-template>
       * ```
       *
       * Shorthand form with "then" and "else" blocks:
       *
       * ```
       * <div *ngIf="condition; then thenBlock else elseBlock"></div>
       * <ng-template #thenBlock>Content to render when condition is true.</ng-template>
       * <ng-template #elseBlock>Content to render when condition is false.</ng-template>
       * ```
       *
       * Form with storing the value locally:
       *
       * ```
       * <div *ngIf="condition as value; else elseBlock">{{value}}</div>
       * <ng-template #elseBlock>Content to render when value is null.</ng-template>
       * ```
       *
       * @usageNotes
       *
       * The `*ngIf` directive is most commonly used to conditionally show an inline template,
       * as seen in the following  example.
       * The default `else` template is blank.
       *
       * {@example common/ngIf/ts/module.ts region='NgIfSimple'}
       *
       * ### Showing an alternative template using `else`
       *
       * To display a template when `expression` evaluates to false, use an `else` template
       * binding as shown in the following example.
       * The `else` binding points to an `<ng-template>`  element labeled `#elseBlock`.
       * The template can be defined anywhere in the component view, but is typically placed right after
       * `ngIf` for readability.
       *
       * {@example common/ngIf/ts/module.ts region='NgIfElse'}
       *
       * ### Using an external `then` template
       *
       * In the previous example, the then-clause template is specified inline, as the content of the
       * tag that contains the `ngIf` directive. You can also specify a template that is defined
       * externally, by referencing a labeled `<ng-template>` element. When you do this, you can
       * change which template to use at runtime, as shown in the following example.
       *
       * {@example common/ngIf/ts/module.ts region='NgIfThenElse'}
       *
       * ### Storing a conditional result in a variable
       *
       * You might want to show a set of properties from the same object. If you are waiting
       * for asynchronous data, the object can be undefined.
       * In this case, you can use `ngIf` and store the result of the condition in a local
       * variable as shown in the following example.
       *
       * {@example common/ngIf/ts/module.ts region='NgIfAs'}
       *
       * This code uses only one `AsyncPipe`, so only one subscription is created.
       * The conditional statement stores the result of `userStream|async` in the local variable `user`.
       * You can then bind the local `user` repeatedly.
       *
       * The conditional displays the data only if `userStream` returns a value,
       * so you don't need to use the
       * safe-navigation-operator (`?.`)
       * to guard against null values when accessing properties.
       * You can display an alternative template while waiting for the data.
       *
       * ### Shorthand syntax
       *
       * The shorthand syntax `*ngIf` expands into two separate template specifications
       * for the "then" and "else" clauses. For example, consider the following shorthand statement,
       * that is meant to show a loading page while waiting for data to be loaded.
       *
       * ```
       * <div class="hero-list" *ngIf="heroes else loading">
       *  ...
       * </div>
       *
       * <ng-template #loading>
       *  <div>Loading...</div>
       * </ng-template>
       * ```
       *
       * You can see that the "else" clause references the `<ng-template>`
       * with the `#loading` label, and the template for the "then" clause
       * is provided as the content of the anchor element.
       *
       * However, when Angular expands the shorthand syntax, it creates
       * another `<ng-template>` tag, with `ngIf` and `ngIfElse` directives.
       * The anchor element containing the template for the "then" clause becomes
       * the content of this unlabeled `<ng-template>` tag.
       *
       * ```
       * <ng-template [ngIf]="heroes" [ngIfElse]="loading">
       *  <div class="hero-list">
       *   ...
       *  </div>
       * </ng-template>
       *
       * <ng-template #loading>
       *  <div>Loading...</div>
       * </ng-template>
       * ```
       *
       * The presence of the implicit template object has implications for the nesting of
       * structural directives. For more on this subject, see
       * [Structural Directives](https://angular.io/guide/structural-directives#one-per-element).
       *
       * @ngModule CommonModule
       * @publicApi
       */


      var NgIf = /*#__PURE__*/function () {
        function NgIf(_viewContainer, templateRef) {
          _classCallCheck2(this, NgIf);

          this._viewContainer = _viewContainer;
          this._context = new NgIfContext();
          this._thenTemplateRef = null;
          this._elseTemplateRef = null;
          this._thenViewRef = null;
          this._elseViewRef = null;
          this._thenTemplateRef = templateRef;
        }
        /**
         * The Boolean expression to evaluate as the condition for showing a template.
         */


        _createClass2(NgIf, [{
          key: "ngIf",
          set: function set(condition) {
            this._context.$implicit = this._context.ngIf = condition;

            this._updateView();
          }
          /**
           * A template to show if the condition expression evaluates to true.
           */

        }, {
          key: "ngIfThen",
          set: function set(templateRef) {
            assertTemplate('ngIfThen', templateRef);
            this._thenTemplateRef = templateRef;
            this._thenViewRef = null; // clear previous view if any.

            this._updateView();
          }
          /**
           * A template to show if the condition expression evaluates to false.
           */

        }, {
          key: "ngIfElse",
          set: function set(templateRef) {
            assertTemplate('ngIfElse', templateRef);
            this._elseTemplateRef = templateRef;
            this._elseViewRef = null; // clear previous view if any.

            this._updateView();
          }
        }, {
          key: "_updateView",
          value: function _updateView() {
            if (this._context.$implicit) {
              if (!this._thenViewRef) {
                this._viewContainer.clear();

                this._elseViewRef = null;

                if (this._thenTemplateRef) {
                  this._thenViewRef = this._viewContainer.createEmbeddedView(this._thenTemplateRef, this._context);
                }
              }
            } else {
              if (!this._elseViewRef) {
                this._viewContainer.clear();

                this._thenViewRef = null;

                if (this._elseTemplateRef) {
                  this._elseViewRef = this._viewContainer.createEmbeddedView(this._elseTemplateRef, this._context);
                }
              }
            }
          }
          /**
           * Asserts the correct type of the context for the template that `NgIf` will render.
           *
           * The presence of this method is a signal to the Ivy template type-check compiler that the
           * `NgIf` structural directive renders its template with a specific context type.
           */

        }], [{
          key: "ngTemplateContextGuard",
          value: function ngTemplateContextGuard(dir, ctx) {
            return true;
          }
        }]);

        return NgIf;
      }();

      NgIf.ɵfac = function NgIf_Factory(t) {
        return new (t || NgIf)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]));
      };

      NgIf.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgIf,
        selectors: [["", "ngIf", ""]],
        inputs: {
          ngIf: "ngIf",
          ngIfThen: "ngIfThen",
          ngIfElse: "ngIfElse"
        }
      });

      NgIf.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }];
      };

      NgIf.propDecorators = {
        ngIf: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        ngIfThen: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        ngIfElse: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgIf, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngIf]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }];
        }, {
          ngIf: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          ngIfThen: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          ngIfElse: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * @publicApi
       */


      var NgIfContext = function NgIfContext() {
        _classCallCheck2(this, NgIfContext);

        this.$implicit = null;
        this.ngIf = null;
      };

      function assertTemplate(property, templateRef) {
        var isTemplateRefOrNull = !!(!templateRef || templateRef.createEmbeddedView);

        if (!isTemplateRefOrNull) {
          throw new Error("".concat(property, " must be a TemplateRef, but received '").concat(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵstringify"])(templateRef), "'."));
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var SwitchView = /*#__PURE__*/function () {
        function SwitchView(_viewContainerRef, _templateRef) {
          _classCallCheck2(this, SwitchView);

          this._viewContainerRef = _viewContainerRef;
          this._templateRef = _templateRef;
          this._created = false;
        }

        _createClass2(SwitchView, [{
          key: "create",
          value: function create() {
            this._created = true;

            this._viewContainerRef.createEmbeddedView(this._templateRef);
          }
        }, {
          key: "destroy",
          value: function destroy() {
            this._created = false;

            this._viewContainerRef.clear();
          }
        }, {
          key: "enforceState",
          value: function enforceState(created) {
            if (created && !this._created) {
              this.create();
            } else if (!created && this._created) {
              this.destroy();
            }
          }
        }]);

        return SwitchView;
      }();
      /**
       * @ngModule CommonModule
       *
       * @description
       * The `[ngSwitch]` directive on a container specifies an expression to match against.
       * The expressions to match are provided by `ngSwitchCase` directives on views within the container.
       * - Every view that matches is rendered.
       * - If there are no matches, a view with the `ngSwitchDefault` directive is rendered.
       * - Elements within the `[NgSwitch]` statement but outside of any `NgSwitchCase`
       * or `ngSwitchDefault` directive are preserved at the location.
       *
       * @usageNotes
       * Define a container element for the directive, and specify the switch expression
       * to match against as an attribute:
       *
       * ```
       * <container-element [ngSwitch]="switch_expression">
       * ```
       *
       * Within the container, `*ngSwitchCase` statements specify the match expressions
       * as attributes. Include `*ngSwitchDefault` as the final case.
       *
       * ```
       * <container-element [ngSwitch]="switch_expression">
       *    <some-element *ngSwitchCase="match_expression_1">...</some-element>
       * ...
       *    <some-element *ngSwitchDefault>...</some-element>
       * </container-element>
       * ```
       *
       * ### Usage Examples
       *
       * The following example shows how to use more than one case to display the same view:
       *
       * ```
       * <container-element [ngSwitch]="switch_expression">
       *   <!-- the same view can be shown in more than one case -->
       *   <some-element *ngSwitchCase="match_expression_1">...</some-element>
       *   <some-element *ngSwitchCase="match_expression_2">...</some-element>
       *   <some-other-element *ngSwitchCase="match_expression_3">...</some-other-element>
       *   <!--default case when there are no matches -->
       *   <some-element *ngSwitchDefault>...</some-element>
       * </container-element>
       * ```
       *
       * The following example shows how cases can be nested:
       * ```
       * <container-element [ngSwitch]="switch_expression">
       *       <some-element *ngSwitchCase="match_expression_1">...</some-element>
       *       <some-element *ngSwitchCase="match_expression_2">...</some-element>
       *       <some-other-element *ngSwitchCase="match_expression_3">...</some-other-element>
       *       <ng-container *ngSwitchCase="match_expression_3">
       *         <!-- use a ng-container to group multiple root nodes -->
       *         <inner-element></inner-element>
       *         <inner-other-element></inner-other-element>
       *       </ng-container>
       *       <some-element *ngSwitchDefault>...</some-element>
       *     </container-element>
       * ```
       *
       * @publicApi
       * @see `NgSwitchCase`
       * @see `NgSwitchDefault`
       * @see [Structural Directives](guide/structural-directives)
       *
       */


      var NgSwitch = /*#__PURE__*/function () {
        function NgSwitch() {
          _classCallCheck2(this, NgSwitch);

          this._defaultUsed = false;
          this._caseCount = 0;
          this._lastCaseCheckIndex = 0;
          this._lastCasesMatched = false;
        }

        _createClass2(NgSwitch, [{
          key: "ngSwitch",
          set: function set(newValue) {
            this._ngSwitch = newValue;

            if (this._caseCount === 0) {
              this._updateDefaultCases(true);
            }
          }
          /** @internal */

        }, {
          key: "_addCase",
          value: function _addCase() {
            return this._caseCount++;
          }
          /** @internal */

        }, {
          key: "_addDefault",
          value: function _addDefault(view) {
            if (!this._defaultViews) {
              this._defaultViews = [];
            }

            this._defaultViews.push(view);
          }
          /** @internal */

        }, {
          key: "_matchCase",
          value: function _matchCase(value) {
            var matched = value == this._ngSwitch;
            this._lastCasesMatched = this._lastCasesMatched || matched;
            this._lastCaseCheckIndex++;

            if (this._lastCaseCheckIndex === this._caseCount) {
              this._updateDefaultCases(!this._lastCasesMatched);

              this._lastCaseCheckIndex = 0;
              this._lastCasesMatched = false;
            }

            return matched;
          }
        }, {
          key: "_updateDefaultCases",
          value: function _updateDefaultCases(useDefault) {
            if (this._defaultViews && useDefault !== this._defaultUsed) {
              this._defaultUsed = useDefault;

              for (var i = 0; i < this._defaultViews.length; i++) {
                var defaultView = this._defaultViews[i];
                defaultView.enforceState(useDefault);
              }
            }
          }
        }]);

        return NgSwitch;
      }();

      NgSwitch.ɵfac = function NgSwitch_Factory(t) {
        return new (t || NgSwitch)();
      };

      NgSwitch.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgSwitch,
        selectors: [["", "ngSwitch", ""]],
        inputs: {
          ngSwitch: "ngSwitch"
        }
      });
      NgSwitch.propDecorators = {
        ngSwitch: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgSwitch, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngSwitch]'
          }]
        }], function () {
          return [];
        }, {
          ngSwitch: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * @ngModule CommonModule
       *
       * @description
       * Provides a switch case expression to match against an enclosing `ngSwitch` expression.
       * When the expressions match, the given `NgSwitchCase` template is rendered.
       * If multiple match expressions match the switch expression value, all of them are displayed.
       *
       * @usageNotes
       *
       * Within a switch container, `*ngSwitchCase` statements specify the match expressions
       * as attributes. Include `*ngSwitchDefault` as the final case.
       *
       * ```
       * <container-element [ngSwitch]="switch_expression">
       *   <some-element *ngSwitchCase="match_expression_1">...</some-element>
       *   ...
       *   <some-element *ngSwitchDefault>...</some-element>
       * </container-element>
       * ```
       *
       * Each switch-case statement contains an in-line HTML template or template reference
       * that defines the subtree to be selected if the value of the match expression
       * matches the value of the switch expression.
       *
       * Unlike JavaScript, which uses strict equality, Angular uses loose equality.
       * This means that the empty string, `""` matches 0.
       *
       * @publicApi
       * @see `NgSwitch`
       * @see `NgSwitchDefault`
       *
       */


      var NgSwitchCase = /*#__PURE__*/function () {
        function NgSwitchCase(viewContainer, templateRef, ngSwitch) {
          _classCallCheck2(this, NgSwitchCase);

          this.ngSwitch = ngSwitch;

          ngSwitch._addCase();

          this._view = new SwitchView(viewContainer, templateRef);
        }
        /**
         * Performs case matching. For internal use only.
         */


        _createClass2(NgSwitchCase, [{
          key: "ngDoCheck",
          value: function ngDoCheck() {
            this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase));
          }
        }]);

        return NgSwitchCase;
      }();

      NgSwitchCase.ɵfac = function NgSwitchCase_Factory(t) {
        return new (t || NgSwitchCase)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgSwitch, 1));
      };

      NgSwitchCase.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgSwitchCase,
        selectors: [["", "ngSwitchCase", ""]],
        inputs: {
          ngSwitchCase: "ngSwitchCase"
        }
      });

      NgSwitchCase.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }, {
          type: NgSwitch,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
          }]
        }];
      };

      NgSwitchCase.propDecorators = {
        ngSwitchCase: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgSwitchCase, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngSwitchCase]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }, {
            type: NgSwitch,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
            }]
          }];
        }, {
          ngSwitchCase: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * @ngModule CommonModule
       *
       * @description
       *
       * Creates a view that is rendered when no `NgSwitchCase` expressions
       * match the `NgSwitch` expression.
       * This statement should be the final case in an `NgSwitch`.
       *
       * @publicApi
       * @see `NgSwitch`
       * @see `NgSwitchCase`
       *
       */


      var NgSwitchDefault = function NgSwitchDefault(viewContainer, templateRef, ngSwitch) {
        _classCallCheck2(this, NgSwitchDefault);

        ngSwitch._addDefault(new SwitchView(viewContainer, templateRef));
      };

      NgSwitchDefault.ɵfac = function NgSwitchDefault_Factory(t) {
        return new (t || NgSwitchDefault)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgSwitch, 1));
      };

      NgSwitchDefault.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgSwitchDefault,
        selectors: [["", "ngSwitchDefault", ""]]
      });

      NgSwitchDefault.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }, {
          type: NgSwitch,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgSwitchDefault, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngSwitchDefault]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }, {
            type: NgSwitch,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @ngModule CommonModule
       *
       * @usageNotes
       * ```
       * <some-element [ngPlural]="value">
       *   <ng-template ngPluralCase="=0">there is nothing</ng-template>
       *   <ng-template ngPluralCase="=1">there is one</ng-template>
       *   <ng-template ngPluralCase="few">there are a few</ng-template>
       * </some-element>
       * ```
       *
       * @description
       *
       * Adds / removes DOM sub-trees based on a numeric value. Tailored for pluralization.
       *
       * Displays DOM sub-trees that match the switch expression value, or failing that, DOM sub-trees
       * that match the switch expression's pluralization category.
       *
       * To use this directive you must provide a container element that sets the `[ngPlural]` attribute
       * to a switch expression. Inner elements with a `[ngPluralCase]` will display based on their
       * expression:
       * - if `[ngPluralCase]` is set to a value starting with `=`, it will only display if the value
       *   matches the switch expression exactly,
       * - otherwise, the view will be treated as a "category match", and will only display if exact
       *   value matches aren't found and the value maps to its category for the defined locale.
       *
       * See http://cldr.unicode.org/index/cldr-spec/plural-rules
       *
       * @publicApi
       */


      var NgPlural = /*#__PURE__*/function () {
        function NgPlural(_localization) {
          _classCallCheck2(this, NgPlural);

          this._localization = _localization;
          this._caseViews = {};
        }

        _createClass2(NgPlural, [{
          key: "ngPlural",
          set: function set(value) {
            this._switchValue = value;

            this._updateView();
          }
        }, {
          key: "addCase",
          value: function addCase(value, switchView) {
            this._caseViews[value] = switchView;
          }
        }, {
          key: "_updateView",
          value: function _updateView() {
            this._clearViews();

            var cases = Object.keys(this._caseViews);
            var key = getPluralCategory(this._switchValue, cases, this._localization);

            this._activateView(this._caseViews[key]);
          }
        }, {
          key: "_clearViews",
          value: function _clearViews() {
            if (this._activeView) this._activeView.destroy();
          }
        }, {
          key: "_activateView",
          value: function _activateView(view) {
            if (view) {
              this._activeView = view;

              this._activeView.create();
            }
          }
        }]);

        return NgPlural;
      }();

      NgPlural.ɵfac = function NgPlural_Factory(t) {
        return new (t || NgPlural)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgLocalization));
      };

      NgPlural.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgPlural,
        selectors: [["", "ngPlural", ""]],
        inputs: {
          ngPlural: "ngPlural"
        }
      });

      NgPlural.ctorParameters = function () {
        return [{
          type: NgLocalization
        }];
      };

      NgPlural.propDecorators = {
        ngPlural: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgPlural, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngPlural]'
          }]
        }], function () {
          return [{
            type: NgLocalization
          }];
        }, {
          ngPlural: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * @ngModule CommonModule
       *
       * @description
       *
       * Creates a view that will be added/removed from the parent {@link NgPlural} when the
       * given expression matches the plural expression according to CLDR rules.
       *
       * @usageNotes
       * ```
       * <some-element [ngPlural]="value">
       *   <ng-template ngPluralCase="=0">...</ng-template>
       *   <ng-template ngPluralCase="other">...</ng-template>
       * </some-element>
       *```
       *
       * See {@link NgPlural} for more details and example.
       *
       * @publicApi
       */


      var NgPluralCase = function NgPluralCase(value, template, viewContainer, ngPlural) {
        _classCallCheck2(this, NgPluralCase);

        this.value = value;
        var isANumber = !isNaN(Number(value));
        ngPlural.addCase(isANumber ? "=".concat(value) : value, new SwitchView(viewContainer, template));
      };

      NgPluralCase.ɵfac = function NgPluralCase_Factory(t) {
        return new (t || NgPluralCase)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinjectAttribute"]('ngPluralCase'), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgPlural, 1));
      };

      NgPluralCase.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgPluralCase,
        selectors: [["", "ngPluralCase", ""]]
      });

      NgPluralCase.ctorParameters = function () {
        return [{
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Attribute"],
            args: ['ngPluralCase']
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
        }, {
          type: NgPlural,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgPluralCase, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngPluralCase]'
          }]
        }], function () {
          return [{
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Attribute"],
              args: ['ngPluralCase']
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["TemplateRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
          }, {
            type: NgPlural,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Host"]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @ngModule CommonModule
       *
       * @usageNotes
       *
       * Set the font of the containing element to the result of an expression.
       *
       * ```
       * <some-element [ngStyle]="{'font-style': styleExp}">...</some-element>
       * ```
       *
       * Set the width of the containing element to a pixel value returned by an expression.
       *
       * ```
       * <some-element [ngStyle]="{'max-width.px': widthExp}">...</some-element>
       * ```
       *
       * Set a collection of style values using an expression that returns key-value pairs.
       *
       * ```
       * <some-element [ngStyle]="objExp">...</some-element>
       * ```
       *
       * @description
       *
       * An attribute directive that updates styles for the containing HTML element.
       * Sets one or more style properties, specified as colon-separated key-value pairs.
       * The key is a style name, with an optional `.<unit>` suffix
       * (such as 'top.px', 'font-style.em').
       * The value is an expression to be evaluated.
       * The resulting non-null value, expressed in the given unit,
       * is assigned to the given style property.
       * If the result of evaluation is null, the corresponding style is removed.
       *
       * @publicApi
       */


      var NgStyle = /*#__PURE__*/function () {
        function NgStyle(_ngEl, _differs, _renderer) {
          _classCallCheck2(this, NgStyle);

          this._ngEl = _ngEl;
          this._differs = _differs;
          this._renderer = _renderer;
          this._ngStyle = null;
          this._differ = null;
        }

        _createClass2(NgStyle, [{
          key: "ngStyle",
          set: function set(values) {
            this._ngStyle = values;

            if (!this._differ && values) {
              this._differ = this._differs.find(values).create();
            }
          }
        }, {
          key: "ngDoCheck",
          value: function ngDoCheck() {
            if (this._differ) {
              var changes = this._differ.diff(this._ngStyle);

              if (changes) {
                this._applyChanges(changes);
              }
            }
          }
        }, {
          key: "_setStyle",
          value: function _setStyle(nameAndUnit, value) {
            var _nameAndUnit$split = nameAndUnit.split('.'),
                _nameAndUnit$split2 = _slicedToArray(_nameAndUnit$split, 2),
                name = _nameAndUnit$split2[0],
                unit = _nameAndUnit$split2[1];

            value = value != null && unit ? "".concat(value).concat(unit) : value;

            if (value != null) {
              this._renderer.setStyle(this._ngEl.nativeElement, name, value);
            } else {
              this._renderer.removeStyle(this._ngEl.nativeElement, name);
            }
          }
        }, {
          key: "_applyChanges",
          value: function _applyChanges(changes) {
            var _this832 = this;

            changes.forEachRemovedItem(function (record) {
              return _this832._setStyle(record.key, null);
            });
            changes.forEachAddedItem(function (record) {
              return _this832._setStyle(record.key, record.currentValue);
            });
            changes.forEachChangedItem(function (record) {
              return _this832._setStyle(record.key, record.currentValue);
            });
          }
        }]);

        return NgStyle;
      }();

      NgStyle.ɵfac = function NgStyle_Factory(t) {
        return new (t || NgStyle)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]));
      };

      NgStyle.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgStyle,
        selectors: [["", "ngStyle", ""]],
        inputs: {
          ngStyle: "ngStyle"
        }
      });

      NgStyle.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
        }];
      };

      NgStyle.propDecorators = {
        ngStyle: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
          args: ['ngStyle']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgStyle, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngStyle]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
          }];
        }, {
          ngStyle: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"],
            args: ['ngStyle']
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @ngModule CommonModule
       *
       * @description
       *
       * Inserts an embedded view from a prepared `TemplateRef`.
       *
       * You can attach a context object to the `EmbeddedViewRef` by setting `[ngTemplateOutletContext]`.
       * `[ngTemplateOutletContext]` should be an object, the object's keys will be available for binding
       * by the local template `let` declarations.
       *
       * @usageNotes
       * ```
       * <ng-container *ngTemplateOutlet="templateRefExp; context: contextExp"></ng-container>
       * ```
       *
       * Using the key `$implicit` in the context object will set its value as default.
       *
       * ### Example
       *
       * {@example common/ngTemplateOutlet/ts/module.ts region='NgTemplateOutlet'}
       *
       * @publicApi
       */


      var NgTemplateOutlet = /*#__PURE__*/function () {
        function NgTemplateOutlet(_viewContainerRef) {
          _classCallCheck2(this, NgTemplateOutlet);

          this._viewContainerRef = _viewContainerRef;
          this._viewRef = null;
          /**
           * A context object to attach to the {@link EmbeddedViewRef}. This should be an
           * object, the object's keys will be available for binding by the local template `let`
           * declarations.
           * Using the key `$implicit` in the context object will set its value as default.
           */

          this.ngTemplateOutletContext = null;
          /**
           * A string defining the template reference and optionally the context object for the template.
           */

          this.ngTemplateOutlet = null;
        }

        _createClass2(NgTemplateOutlet, [{
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            var recreateView = this._shouldRecreateView(changes);

            if (recreateView) {
              var viewContainerRef = this._viewContainerRef;

              if (this._viewRef) {
                viewContainerRef.remove(viewContainerRef.indexOf(this._viewRef));
              }

              this._viewRef = this.ngTemplateOutlet ? viewContainerRef.createEmbeddedView(this.ngTemplateOutlet, this.ngTemplateOutletContext) : null;
            } else if (this._viewRef && this.ngTemplateOutletContext) {
              this._updateExistingContext(this.ngTemplateOutletContext);
            }
          }
          /**
           * We need to re-create existing embedded view if:
           * - templateRef has changed
           * - context has changes
           *
           * We mark context object as changed when the corresponding object
           * shape changes (new properties are added or existing properties are removed).
           * In other words we consider context with the same properties as "the same" even
           * if object reference changes (see https://github.com/angular/angular/issues/13407).
           */

        }, {
          key: "_shouldRecreateView",
          value: function _shouldRecreateView(changes) {
            var ctxChange = changes['ngTemplateOutletContext'];
            return !!changes['ngTemplateOutlet'] || ctxChange && this._hasContextShapeChanged(ctxChange);
          }
        }, {
          key: "_hasContextShapeChanged",
          value: function _hasContextShapeChanged(ctxChange) {
            var prevCtxKeys = Object.keys(ctxChange.previousValue || {});
            var currCtxKeys = Object.keys(ctxChange.currentValue || {});

            if (prevCtxKeys.length === currCtxKeys.length) {
              var _iterator100 = _createForOfIteratorHelper(currCtxKeys),
                  _step99;

              try {
                for (_iterator100.s(); !(_step99 = _iterator100.n()).done;) {
                  var propName = _step99.value;

                  if (prevCtxKeys.indexOf(propName) === -1) {
                    return true;
                  }
                }
              } catch (err) {
                _iterator100.e(err);
              } finally {
                _iterator100.f();
              }

              return false;
            }

            return true;
          }
        }, {
          key: "_updateExistingContext",
          value: function _updateExistingContext(ctx) {
            for (var _i54 = 0, _Object$keys7 = Object.keys(ctx); _i54 < _Object$keys7.length; _i54++) {
              var propName = _Object$keys7[_i54];
              this._viewRef.context[propName] = this.ngTemplateOutletContext[propName];
            }
          }
        }]);

        return NgTemplateOutlet;
      }();

      NgTemplateOutlet.ɵfac = function NgTemplateOutlet_Factory(t) {
        return new (t || NgTemplateOutlet)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]));
      };

      NgTemplateOutlet.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
        type: NgTemplateOutlet,
        selectors: [["", "ngTemplateOutlet", ""]],
        inputs: {
          ngTemplateOutletContext: "ngTemplateOutletContext",
          ngTemplateOutlet: "ngTemplateOutlet"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵNgOnChangesFeature"]]
      });

      NgTemplateOutlet.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
        }];
      };

      NgTemplateOutlet.propDecorators = {
        ngTemplateOutletContext: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }],
        ngTemplateOutlet: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NgTemplateOutlet, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
          args: [{
            selector: '[ngTemplateOutlet]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]
          }];
        }, {
          ngTemplateOutletContext: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }],
          ngTemplateOutlet: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A collection of Angular directives that are likely to be used in each and every Angular
       * application.
       */


      var COMMON_DIRECTIVES = [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase];
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      function invalidPipeArgumentError(type, value) {
        return Error("InvalidPipeArgument: '".concat(value, "' for pipe '").concat(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵstringify"])(type), "'"));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var SubscribableStrategy = /*#__PURE__*/function () {
        function SubscribableStrategy() {
          _classCallCheck2(this, SubscribableStrategy);
        }

        _createClass2(SubscribableStrategy, [{
          key: "createSubscription",
          value: function createSubscription(async, updateLatestValue) {
            return async.subscribe({
              next: updateLatestValue,
              error: function error(e) {
                throw e;
              }
            });
          }
        }, {
          key: "dispose",
          value: function dispose(subscription) {
            subscription.unsubscribe();
          }
        }, {
          key: "onDestroy",
          value: function onDestroy(subscription) {
            subscription.unsubscribe();
          }
        }]);

        return SubscribableStrategy;
      }();

      var PromiseStrategy = /*#__PURE__*/function () {
        function PromiseStrategy() {
          _classCallCheck2(this, PromiseStrategy);
        }

        _createClass2(PromiseStrategy, [{
          key: "createSubscription",
          value: function createSubscription(async, updateLatestValue) {
            return async.then(updateLatestValue, function (e) {
              throw e;
            });
          }
        }, {
          key: "dispose",
          value: function dispose(subscription) {}
        }, {
          key: "onDestroy",
          value: function onDestroy(subscription) {}
        }]);

        return PromiseStrategy;
      }();

      var _promiseStrategy = new PromiseStrategy();

      var _subscribableStrategy = new SubscribableStrategy();
      /**
       * @ngModule CommonModule
       * @description
       *
       * Unwraps a value from an asynchronous primitive.
       *
       * The `async` pipe subscribes to an `Observable` or `Promise` and returns the latest value it has
       * emitted. When a new value is emitted, the `async` pipe marks the component to be checked for
       * changes. When the component gets destroyed, the `async` pipe unsubscribes automatically to avoid
       * potential memory leaks.
       *
       * @usageNotes
       *
       * ### Examples
       *
       * This example binds a `Promise` to the view. Clicking the `Resolve` button resolves the
       * promise.
       *
       * {@example common/pipes/ts/async_pipe.ts region='AsyncPipePromise'}
       *
       * It's also possible to use `async` with Observables. The example below binds the `time` Observable
       * to the view. The Observable continuously updates the view with the current time.
       *
       * {@example common/pipes/ts/async_pipe.ts region='AsyncPipeObservable'}
       *
       * @publicApi
       */


      var AsyncPipe = /*#__PURE__*/function () {
        function AsyncPipe(_ref) {
          _classCallCheck2(this, AsyncPipe);

          this._ref = _ref;
          this._latestValue = null;
          this._subscription = null;
          this._obj = null;
          this._strategy = null;
        }

        _createClass2(AsyncPipe, [{
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            if (this._subscription) {
              this._dispose();
            }
          }
        }, {
          key: "transform",
          value: function transform(obj) {
            if (!this._obj) {
              if (obj) {
                this._subscribe(obj);
              }

              return this._latestValue;
            }

            if (obj !== this._obj) {
              this._dispose();

              return this.transform(obj);
            }

            return this._latestValue;
          }
        }, {
          key: "_subscribe",
          value: function _subscribe(obj) {
            var _this833 = this;

            this._obj = obj;
            this._strategy = this._selectStrategy(obj);
            this._subscription = this._strategy.createSubscription(obj, function (value) {
              return _this833._updateLatestValue(obj, value);
            });
          }
        }, {
          key: "_selectStrategy",
          value: function _selectStrategy(obj) {
            if (Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵisPromise"])(obj)) {
              return _promiseStrategy;
            }

            if (Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵisSubscribable"])(obj)) {
              return _subscribableStrategy;
            }

            throw invalidPipeArgumentError(AsyncPipe, obj);
          }
        }, {
          key: "_dispose",
          value: function _dispose() {
            this._strategy.dispose(this._subscription);

            this._latestValue = null;
            this._subscription = null;
            this._obj = null;
          }
        }, {
          key: "_updateLatestValue",
          value: function _updateLatestValue(async, value) {
            if (async === this._obj) {
              this._latestValue = value;

              this._ref.markForCheck();
            }
          }
        }]);

        return AsyncPipe;
      }();

      AsyncPipe.ɵfac = function AsyncPipe_Factory(t) {
        return new (t || AsyncPipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinjectPipeChangeDetectorRef"]());
      };

      AsyncPipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({
        name: "async",
        type: AsyncPipe,
        pure: false
      });

      AsyncPipe.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](AsyncPipe, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
          args: [{
            name: 'async',
            pure: false
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Transforms text to all lower case.
       *
       * @see `UpperCasePipe`
       * @see `TitleCasePipe`
       * @usageNotes
       *
       * The following example defines a view that allows the user to enter
       * text, and then uses the pipe to convert the input text to all lower case.
       *
       * <code-example path="common/pipes/ts/lowerupper_pipe.ts" region='LowerUpperPipe'></code-example>
       *
       * @ngModule CommonModule
       * @publicApi
       */


      var LowerCasePipe = /*#__PURE__*/function () {
        function LowerCasePipe() {
          _classCallCheck2(this, LowerCasePipe);
        }

        _createClass2(LowerCasePipe, [{
          key: "transform",
          value: function transform(value) {
            if (value == null) return null;

            if (typeof value !== 'string') {
              throw invalidPipeArgumentError(LowerCasePipe, value);
            }

            return value.toLowerCase();
          }
        }]);

        return LowerCasePipe;
      }();

      LowerCasePipe.ɵfac = function LowerCasePipe_Factory(t) {
        return new (t || LowerCasePipe)();
      };

      LowerCasePipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({
        name: "lowercase",
        type: LowerCasePipe,
        pure: true
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](LowerCasePipe, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
          args: [{
            name: 'lowercase'
          }]
        }], null, null);
      })(); //
      // Regex below matches any Unicode word and compatible with ES5. In ES2018 the same result
      // can be achieved by using /\p{L}\S*/gu and also known as Unicode Property Escapes
      // (https://2ality.com/2017/07/regexp-unicode-property-escapes.html). Since there is no
      // transpilation of this functionality down to ES5 without external tool, the only solution is
      // to use already transpiled form. Example can be found here -
      // https://mothereff.in/regexpu#input=var+regex+%3D+/%5Cp%7BL%7D/u%3B&unicodePropertyEscape=1
      //


      var unicodeWordMatch = /(?:[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D])\S*/g;
      /**
       * Transforms text to title case.
       * Capitalizes the first letter of each word and transforms the
       * rest of the word to lower case.
       * Words are delimited by any whitespace character, such as a space, tab, or line-feed character.
       *
       * @see `LowerCasePipe`
       * @see `UpperCasePipe`
       *
       * @usageNotes
       * The following example shows the result of transforming various strings into title case.
       *
       * <code-example path="common/pipes/ts/titlecase_pipe.ts" region='TitleCasePipe'></code-example>
       *
       * @ngModule CommonModule
       * @publicApi
       */

      var TitleCasePipe = /*#__PURE__*/function () {
        function TitleCasePipe() {
          _classCallCheck2(this, TitleCasePipe);
        }

        _createClass2(TitleCasePipe, [{
          key: "transform",
          value: function transform(value) {
            if (value == null) return null;

            if (typeof value !== 'string') {
              throw invalidPipeArgumentError(TitleCasePipe, value);
            }

            return value.replace(unicodeWordMatch, function (txt) {
              return txt[0].toUpperCase() + txt.substr(1).toLowerCase();
            });
          }
        }]);

        return TitleCasePipe;
      }();

      TitleCasePipe.ɵfac = function TitleCasePipe_Factory(t) {
        return new (t || TitleCasePipe)();
      };

      TitleCasePipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({
        name: "titlecase",
        type: TitleCasePipe,
        pure: true
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](TitleCasePipe, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
          args: [{
            name: 'titlecase'
          }]
        }], null, null);
      })();
      /**
       * Transforms text to all upper case.
       * @see `LowerCasePipe`
       * @see `TitleCasePipe`
       *
       * @ngModule CommonModule
       * @publicApi
       */


      var UpperCasePipe = /*#__PURE__*/function () {
        function UpperCasePipe() {
          _classCallCheck2(this, UpperCasePipe);
        }

        _createClass2(UpperCasePipe, [{
          key: "transform",
          value: function transform(value) {
            if (value == null) return null;

            if (typeof value !== 'string') {
              throw invalidPipeArgumentError(UpperCasePipe, value);
            }

            return value.toUpperCase();
          }
        }]);

        return UpperCasePipe;
      }();

      UpperCasePipe.ɵfac = function UpperCasePipe_Factory(t) {
        return new (t || UpperCasePipe)();
      };

      UpperCasePipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({
        name: "uppercase",
        type: UpperCasePipe,
        pure: true
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](UpperCasePipe, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
          args: [{
            name: 'uppercase'
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // clang-format off

      /**
       * @ngModule CommonModule
       * @description
       *
       * Formats a date value according to locale rules.
       *
       * Only the `en-US` locale data comes with Angular. To localize dates
       * in another language, you must import the corresponding locale data.
       * See the [I18n guide](guide/i18n#i18n-pipes) for more information.
       *
       * @see `formatDate()`
       *
       *
       * @usageNotes
       *
       * The result of this pipe is not reevaluated when the input is mutated. To avoid the need to
       * reformat the date on every change-detection cycle, treat the date as an immutable object
       * and change the reference when the pipe needs to run again.
       *
       * ### Pre-defined format options
       *
       * | Option        | Equivalent to                       | Examples (given in `en-US` locale)              |
       * |---------------|-------------------------------------|-------------------------------------------------|
       * | `'short'`     | `'M/d/yy, h:mm a'`                  | `6/15/15, 9:03 AM`                              |
       * | `'medium'`    | `'MMM d, y, h:mm:ss a'`             | `Jun 15, 2015, 9:03:01 AM`                      |
       * | `'long'`      | `'MMMM d, y, h:mm:ss a z'`          | `June 15, 2015 at 9:03:01 AM GMT+1`             |
       * | `'full'`      | `'EEEE, MMMM d, y, h:mm:ss a zzzz'` | `Monday, June 15, 2015 at 9:03:01 AM GMT+01:00` |
       * | `'shortDate'` | `'M/d/yy'`                          | `6/15/15`                                       |
       * | `'mediumDate'`| `'MMM d, y'`                        | `Jun 15, 2015`                                  |
       * | `'longDate'`  | `'MMMM d, y'`                       | `June 15, 2015`                                 |
       * | `'fullDate'`  | `'EEEE, MMMM d, y'`                 | `Monday, June 15, 2015`                         |
       * | `'shortTime'` | `'h:mm a'`                          | `9:03 AM`                                       |
       * | `'mediumTime'`| `'h:mm:ss a'`                       | `9:03:01 AM`                                    |
       * | `'longTime'`  | `'h:mm:ss a z'`                     | `9:03:01 AM GMT+1`                              |
       * | `'fullTime'`  | `'h:mm:ss a zzzz'`                  | `9:03:01 AM GMT+01:00`                          |
       *
       * ### Custom format options
       *
       * You can construct a format string using symbols to specify the components
       * of a date-time value, as described in the following table.
       * Format details depend on the locale.
       * Fields marked with (*) are only available in the extra data set for the given locale.
       *
       *  | Field type          | Format      | Description                                                   | Example Value                                              |
       *  |-------------------- |-------------|---------------------------------------------------------------|------------------------------------------------------------|
       *  | Era                 | G, GG & GGG | Abbreviated                                                   | AD                                                         |
       *  |                     | GGGG        | Wide                                                          | Anno Domini                                                |
       *  |                     | GGGGG       | Narrow                                                        | A                                                          |
       *  | Year                | y           | Numeric: minimum digits                                       | 2, 20, 201, 2017, 20173                                    |
       *  |                     | yy          | Numeric: 2 digits + zero padded                               | 02, 20, 01, 17, 73                                         |
       *  |                     | yyy         | Numeric: 3 digits + zero padded                               | 002, 020, 201, 2017, 20173                                 |
       *  |                     | yyyy        | Numeric: 4 digits or more + zero padded                       | 0002, 0020, 0201, 2017, 20173                              |
       *  | Week-numbering year | Y           | Numeric: minimum digits                                       | 2, 20, 201, 2017, 20173                                    |
       *  |                     | YY          | Numeric: 2 digits + zero padded                               | 02, 20, 01, 17, 73                                         |
       *  |                     | YYY         | Numeric: 3 digits + zero padded                               | 002, 020, 201, 2017, 20173                                 |
       *  |                     | YYYY        | Numeric: 4 digits or more + zero padded                       | 0002, 0020, 0201, 2017, 20173                              |
       *  | Month               | M           | Numeric: 1 digit                                              | 9, 12                                                      |
       *  |                     | MM          | Numeric: 2 digits + zero padded                               | 09, 12                                                     |
       *  |                     | MMM         | Abbreviated                                                   | Sep                                                        |
       *  |                     | MMMM        | Wide                                                          | September                                                  |
       *  |                     | MMMMM       | Narrow                                                        | S                                                          |
       *  | Month standalone    | L           | Numeric: 1 digit                                              | 9, 12                                                      |
       *  |                     | LL          | Numeric: 2 digits + zero padded                               | 09, 12                                                     |
       *  |                     | LLL         | Abbreviated                                                   | Sep                                                        |
       *  |                     | LLLL        | Wide                                                          | September                                                  |
       *  |                     | LLLLL       | Narrow                                                        | S                                                          |
       *  | Week of year        | w           | Numeric: minimum digits                                       | 1... 53                                                    |
       *  |                     | ww          | Numeric: 2 digits + zero padded                               | 01... 53                                                   |
       *  | Week of month       | W           | Numeric: 1 digit                                              | 1... 5                                                     |
       *  | Day of month        | d           | Numeric: minimum digits                                       | 1                                                          |
       *  |                     | dd          | Numeric: 2 digits + zero padded                               | 01                                                         |
       *  | Week day            | E, EE & EEE | Abbreviated                                                   | Tue                                                        |
       *  |                     | EEEE        | Wide                                                          | Tuesday                                                    |
       *  |                     | EEEEE       | Narrow                                                        | T                                                          |
       *  |                     | EEEEEE      | Short                                                         | Tu                                                         |
       *  | Week day standalone | c, cc       | Numeric: 1 digit                                              | 2                                                          |
       *  |                     | ccc         | Abbreviated                                                   | Tue                                                        |
       *  |                     | cccc        | Wide                                                          | Tuesday                                                    |
       *  |                     | ccccc       | Narrow                                                        | T                                                          |
       *  |                     | cccccc      | Short                                                         | Tu                                                         |
       *  | Period              | a, aa & aaa | Abbreviated                                                   | am/pm or AM/PM                                             |
       *  |                     | aaaa        | Wide (fallback to `a` when missing)                           | ante meridiem/post meridiem                                |
       *  |                     | aaaaa       | Narrow                                                        | a/p                                                        |
       *  | Period*             | B, BB & BBB | Abbreviated                                                   | mid.                                                       |
       *  |                     | BBBB        | Wide                                                          | am, pm, midnight, noon, morning, afternoon, evening, night |
       *  |                     | BBBBB       | Narrow                                                        | md                                                         |
       *  | Period standalone*  | b, bb & bbb | Abbreviated                                                   | mid.                                                       |
       *  |                     | bbbb        | Wide                                                          | am, pm, midnight, noon, morning, afternoon, evening, night |
       *  |                     | bbbbb       | Narrow                                                        | md                                                         |
       *  | Hour 1-12           | h           | Numeric: minimum digits                                       | 1, 12                                                      |
       *  |                     | hh          | Numeric: 2 digits + zero padded                               | 01, 12                                                     |
       *  | Hour 0-23           | H           | Numeric: minimum digits                                       | 0, 23                                                      |
       *  |                     | HH          | Numeric: 2 digits + zero padded                               | 00, 23                                                     |
       *  | Minute              | m           | Numeric: minimum digits                                       | 8, 59                                                      |
       *  |                     | mm          | Numeric: 2 digits + zero padded                               | 08, 59                                                     |
       *  | Second              | s           | Numeric: minimum digits                                       | 0... 59                                                    |
       *  |                     | ss          | Numeric: 2 digits + zero padded                               | 00... 59                                                   |
       *  | Fractional seconds  | S           | Numeric: 1 digit                                              | 0... 9                                                     |
       *  |                     | SS          | Numeric: 2 digits + zero padded                               | 00... 99                                                   |
       *  |                     | SSS         | Numeric: 3 digits + zero padded (= milliseconds)              | 000... 999                                                 |
       *  | Zone                | z, zz & zzz | Short specific non location format (fallback to O)            | GMT-8                                                      |
       *  |                     | zzzz        | Long specific non location format (fallback to OOOO)          | GMT-08:00                                                  |
       *  |                     | Z, ZZ & ZZZ | ISO8601 basic format                                          | -0800                                                      |
       *  |                     | ZZZZ        | Long localized GMT format                                     | GMT-8:00                                                   |
       *  |                     | ZZZZZ       | ISO8601 extended format + Z indicator for offset 0 (= XXXXX)  | -08:00                                                     |
       *  |                     | O, OO & OOO | Short localized GMT format                                    | GMT-8                                                      |
       *  |                     | OOOO        | Long localized GMT format                                     | GMT-08:00                                                  |
       *
       *
       * ### Format examples
       *
       * These examples transform a date into various formats,
       * assuming that `dateObj` is a JavaScript `Date` object for
       * year: 2015, month: 6, day: 15, hour: 21, minute: 43, second: 11,
       * given in the local time for the `en-US` locale.
       *
       * ```
       * {{ dateObj | date }}               // output is 'Jun 15, 2015'
       * {{ dateObj | date:'medium' }}      // output is 'Jun 15, 2015, 9:43:11 PM'
       * {{ dateObj | date:'shortTime' }}   // output is '9:43 PM'
       * {{ dateObj | date:'mm:ss' }}       // output is '43:11'
       * ```
       *
       * ### Usage example
       *
       * The following component uses a date pipe to display the current date in different formats.
       *
       * ```
       * @Component({
       *  selector: 'date-pipe',
       *  template: `<div>
       *    <p>Today is {{today | date}}</p>
       *    <p>Or if you prefer, {{today | date:'fullDate'}}</p>
       *    <p>The time is {{today | date:'h:mm a z'}}</p>
       *  </div>`
       * })
       * // Get the current date and time as a date-time value.
       * export class DatePipeComponent {
       *   today: number = Date.now();
       * }
       * ```
       *
       * @publicApi
       */
      // clang-format on


      var DatePipe = /*#__PURE__*/function () {
        function DatePipe(locale) {
          _classCallCheck2(this, DatePipe);

          this.locale = locale;
        }

        _createClass2(DatePipe, [{
          key: "transform",
          value: function transform(value) {
            var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'mediumDate';
            var timezone = arguments.length > 2 ? arguments[2] : undefined;
            var locale = arguments.length > 3 ? arguments[3] : undefined;
            if (value == null || value === '' || value !== value) return null;

            try {
              return formatDate(value, format, locale || this.locale, timezone);
            } catch (error) {
              throw invalidPipeArgumentError(DatePipe, error.message);
            }
          }
        }]);

        return DatePipe;
      }();

      DatePipe.ɵfac = function DatePipe_Factory(t) {
        return new (t || DatePipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]));
      };

      DatePipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({
        name: "date",
        type: DatePipe,
        pure: true
      });

      DatePipe.ctorParameters = function () {
        return [{
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DatePipe, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
          args: [{
            name: 'date',
            pure: true
          }]
        }], function () {
          return [{
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var _INTERPOLATION_REGEXP = /#/g;
      /**
       * @ngModule CommonModule
       * @description
       *
       * Maps a value to a string that pluralizes the value according to locale rules.
       *
       * @usageNotes
       *
       * ### Example
       *
       * {@example common/pipes/ts/i18n_pipe.ts region='I18nPluralPipeComponent'}
       *
       * @publicApi
       */

      var I18nPluralPipe = /*#__PURE__*/function () {
        function I18nPluralPipe(_localization) {
          _classCallCheck2(this, I18nPluralPipe);

          this._localization = _localization;
        }
        /**
         * @param value the number to be formatted
         * @param pluralMap an object that mimics the ICU format, see
         * http://userguide.icu-project.org/formatparse/messages.
         * @param locale a `string` defining the locale to use (uses the current {@link LOCALE_ID} by
         * default).
         */


        _createClass2(I18nPluralPipe, [{
          key: "transform",
          value: function transform(value, pluralMap, locale) {
            if (value == null) return '';

            if (typeof pluralMap !== 'object' || pluralMap === null) {
              throw invalidPipeArgumentError(I18nPluralPipe, pluralMap);
            }

            var key = getPluralCategory(value, Object.keys(pluralMap), this._localization, locale);
            return pluralMap[key].replace(_INTERPOLATION_REGEXP, value.toString());
          }
        }]);

        return I18nPluralPipe;
      }();

      I18nPluralPipe.ɵfac = function I18nPluralPipe_Factory(t) {
        return new (t || I18nPluralPipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](NgLocalization));
      };

      I18nPluralPipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({
        name: "i18nPlural",
        type: I18nPluralPipe,
        pure: true
      });

      I18nPluralPipe.ctorParameters = function () {
        return [{
          type: NgLocalization
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](I18nPluralPipe, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
          args: [{
            name: 'i18nPlural',
            pure: true
          }]
        }], function () {
          return [{
            type: NgLocalization
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @ngModule CommonModule
       * @description
       *
       * Generic selector that displays the string that matches the current value.
       *
       * If none of the keys of the `mapping` match the `value`, then the content
       * of the `other` key is returned when present, otherwise an empty string is returned.
       *
       * @usageNotes
       *
       * ### Example
       *
       * {@example common/pipes/ts/i18n_pipe.ts region='I18nSelectPipeComponent'}
       *
       * @publicApi
       */


      var I18nSelectPipe = /*#__PURE__*/function () {
        function I18nSelectPipe() {
          _classCallCheck2(this, I18nSelectPipe);
        }

        _createClass2(I18nSelectPipe, [{
          key: "transform",
          value:
          /**
           * @param value a string to be internationalized.
           * @param mapping an object that indicates the text that should be displayed
           * for different values of the provided `value`.
           */
          function transform(value, mapping) {
            if (value == null) return '';

            if (typeof mapping !== 'object' || typeof value !== 'string') {
              throw invalidPipeArgumentError(I18nSelectPipe, mapping);
            }

            if (mapping.hasOwnProperty(value)) {
              return mapping[value];
            }

            if (mapping.hasOwnProperty('other')) {
              return mapping['other'];
            }

            return '';
          }
        }]);

        return I18nSelectPipe;
      }();

      I18nSelectPipe.ɵfac = function I18nSelectPipe_Factory(t) {
        return new (t || I18nSelectPipe)();
      };

      I18nSelectPipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({
        name: "i18nSelect",
        type: I18nSelectPipe,
        pure: true
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](I18nSelectPipe, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
          args: [{
            name: 'i18nSelect',
            pure: true
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @ngModule CommonModule
       * @description
       *
       * Converts a value into its JSON-format representation.  Useful for debugging.
       *
       * @usageNotes
       *
       * The following component uses a JSON pipe to convert an object
       * to JSON format, and displays the string in both formats for comparison.
       *
       * {@example common/pipes/ts/json_pipe.ts region='JsonPipe'}
       *
       * @publicApi
       */


      var JsonPipe = /*#__PURE__*/function () {
        function JsonPipe() {
          _classCallCheck2(this, JsonPipe);
        }

        _createClass2(JsonPipe, [{
          key: "transform",
          value:
          /**
           * @param value A value of any type to convert into a JSON-format string.
           */
          function transform(value) {
            return JSON.stringify(value, null, 2);
          }
        }]);

        return JsonPipe;
      }();

      JsonPipe.ɵfac = function JsonPipe_Factory(t) {
        return new (t || JsonPipe)();
      };

      JsonPipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({
        name: "json",
        type: JsonPipe,
        pure: false
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](JsonPipe, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
          args: [{
            name: 'json',
            pure: false
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function makeKeyValuePair(key, value) {
        return {
          key: key,
          value: value
        };
      }
      /**
       * @ngModule CommonModule
       * @description
       *
       * Transforms Object or Map into an array of key value pairs.
       *
       * The output array will be ordered by keys.
       * By default the comparator will be by Unicode point value.
       * You can optionally pass a compareFn if your keys are complex types.
       *
       * @usageNotes
       * ### Examples
       *
       * This examples show how an Object or a Map can be iterated by ngFor with the use of this
       * keyvalue pipe.
       *
       * {@example common/pipes/ts/keyvalue_pipe.ts region='KeyValuePipe'}
       *
       * @publicApi
       */


      var KeyValuePipe = /*#__PURE__*/function () {
        function KeyValuePipe(differs) {
          _classCallCheck2(this, KeyValuePipe);

          this.differs = differs;
          this.keyValues = [];
        }

        _createClass2(KeyValuePipe, [{
          key: "transform",
          value: function transform(input) {
            var _this834 = this;

            var compareFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultComparator;

            if (!input || !(input instanceof Map) && typeof input !== 'object') {
              return null;
            }

            if (!this.differ) {
              // make a differ for whatever type we've been passed in
              this.differ = this.differs.find(input).create();
            }

            var differChanges = this.differ.diff(input);

            if (differChanges) {
              this.keyValues = [];
              differChanges.forEachItem(function (r) {
                _this834.keyValues.push(makeKeyValuePair(r.key, r.currentValue));
              });
              this.keyValues.sort(compareFn);
            }

            return this.keyValues;
          }
        }]);

        return KeyValuePipe;
      }();

      KeyValuePipe.ɵfac = function KeyValuePipe_Factory(t) {
        return new (t || KeyValuePipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]));
      };

      KeyValuePipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({
        name: "keyvalue",
        type: KeyValuePipe,
        pure: false
      });

      KeyValuePipe.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](KeyValuePipe, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
          args: [{
            name: 'keyvalue',
            pure: false
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["KeyValueDiffers"]
          }];
        }, null);
      })();

      function defaultComparator(keyValueA, keyValueB) {
        var a = keyValueA.key;
        var b = keyValueB.key; // if same exit with 0;

        if (a === b) return 0; // make sure that undefined are at the end of the sort.

        if (a === undefined) return 1;
        if (b === undefined) return -1; // make sure that nulls are at the end of the sort.

        if (a === null) return 1;
        if (b === null) return -1;

        if (typeof a == 'string' && typeof b == 'string') {
          return a < b ? -1 : 1;
        }

        if (typeof a == 'number' && typeof b == 'number') {
          return a - b;
        }

        if (typeof a == 'boolean' && typeof b == 'boolean') {
          return a < b ? -1 : 1;
        } // `a` and `b` are of different types. Compare their string values.


        var aString = String(a);
        var bString = String(b);
        return aString == bString ? 0 : aString < bString ? -1 : 1;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @ngModule CommonModule
       * @description
       *
       * Transforms a number into a string,
       * formatted according to locale rules that determine group sizing and
       * separator, decimal-point character, and other locale-specific
       * configurations.
       *
       * If no parameters are specified, the function rounds off to the nearest value using this
       * [rounding method](https://en.wikibooks.org/wiki/Arithmetic/Rounding).
       * The behavior differs from that of the JavaScript ```Math.round()``` function.
       * In the following case for example, the pipe rounds down where
       * ```Math.round()``` rounds up:
       *
       * ```html
       * -2.5 | number:'1.0-0'
       * > -3
       * Math.round(-2.5)
       * > -2
       * ```
       *
       * @see `formatNumber()`
       *
       * @usageNotes
       * The following code shows how the pipe transforms numbers
       * into text strings, according to various format specifications,
       * where the caller's default locale is `en-US`.
       *
       * ### Example
       *
       * <code-example path="common/pipes/ts/number_pipe.ts" region='NumberPipe'></code-example>
       *
       * @publicApi
       */


      var DecimalPipe = /*#__PURE__*/function () {
        function DecimalPipe(_locale) {
          _classCallCheck2(this, DecimalPipe);

          this._locale = _locale;
        }

        _createClass2(DecimalPipe, [{
          key: "transform",
          value: function transform(value, digitsInfo, locale) {
            if (!isValue(value)) return null;
            locale = locale || this._locale;

            try {
              var num = strToNumber(value);
              return formatNumber(num, locale, digitsInfo);
            } catch (error) {
              throw invalidPipeArgumentError(DecimalPipe, error.message);
            }
          }
        }]);

        return DecimalPipe;
      }();

      DecimalPipe.ɵfac = function DecimalPipe_Factory(t) {
        return new (t || DecimalPipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]));
      };

      DecimalPipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({
        name: "number",
        type: DecimalPipe,
        pure: true
      });

      DecimalPipe.ctorParameters = function () {
        return [{
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](DecimalPipe, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
          args: [{
            name: 'number'
          }]
        }], function () {
          return [{
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]]
            }]
          }];
        }, null);
      })();
      /**
       * @ngModule CommonModule
       * @description
       *
       * Transforms a number to a percentage
       * string, formatted according to locale rules that determine group sizing and
       * separator, decimal-point character, and other locale-specific
       * configurations.
       *
       * @see `formatPercent()`
       *
       * @usageNotes
       * The following code shows how the pipe transforms numbers
       * into text strings, according to various format specifications,
       * where the caller's default locale is `en-US`.
       *
       * <code-example path="common/pipes/ts/percent_pipe.ts" region='PercentPipe'></code-example>
       *
       * @publicApi
       */


      var PercentPipe = /*#__PURE__*/function () {
        function PercentPipe(_locale) {
          _classCallCheck2(this, PercentPipe);

          this._locale = _locale;
        }

        _createClass2(PercentPipe, [{
          key: "transform",
          value: function transform(value, digitsInfo, locale) {
            if (!isValue(value)) return null;
            locale = locale || this._locale;

            try {
              var num = strToNumber(value);
              return formatPercent(num, locale, digitsInfo);
            } catch (error) {
              throw invalidPipeArgumentError(PercentPipe, error.message);
            }
          }
        }]);

        return PercentPipe;
      }();

      PercentPipe.ɵfac = function PercentPipe_Factory(t) {
        return new (t || PercentPipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]));
      };

      PercentPipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({
        name: "percent",
        type: PercentPipe,
        pure: true
      });

      PercentPipe.ctorParameters = function () {
        return [{
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](PercentPipe, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
          args: [{
            name: 'percent'
          }]
        }], function () {
          return [{
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]]
            }]
          }];
        }, null);
      })();
      /**
       * @ngModule CommonModule
       * @description
       *
       * Transforms a number to a currency string, formatted according to locale rules
       * that determine group sizing and separator, decimal-point character,
       * and other locale-specific configurations.
       *
       * {@a currency-code-deprecation}
       * <div class="alert is-helpful">
       *
       * **Deprecation notice:**
       *
       * The default currency code is currently always `USD` but this is deprecated from v9.
       *
       * **In v11 the default currency code will be taken from the current locale identified by
       * the `LOCAL_ID` token. See the [i18n guide](guide/i18n#setting-up-the-locale-of-your-app) for
       * more information.**
       *
       * If you need the previous behavior then set it by creating a `DEFAULT_CURRENCY_CODE` provider in
       * your application `NgModule`:
       *
       * ```ts
       * {provide: DEFAULT_CURRENCY_CODE, useValue: 'USD'}
       * ```
       *
       * </div>
       *
       * @see `getCurrencySymbol()`
       * @see `formatCurrency()`
       *
       * @usageNotes
       * The following code shows how the pipe transforms numbers
       * into text strings, according to various format specifications,
       * where the caller's default locale is `en-US`.
       *
       * <code-example path="common/pipes/ts/currency_pipe.ts" region='CurrencyPipe'></code-example>
       *
       * @publicApi
       */


      var CurrencyPipe = /*#__PURE__*/function () {
        function CurrencyPipe(_locale) {
          var _defaultCurrencyCode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'USD';

          _classCallCheck2(this, CurrencyPipe);

          this._locale = _locale;
          this._defaultCurrencyCode = _defaultCurrencyCode;
        }

        _createClass2(CurrencyPipe, [{
          key: "transform",
          value: function transform(value, currencyCode) {
            var display = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'symbol';
            var digitsInfo = arguments.length > 3 ? arguments[3] : undefined;
            var locale = arguments.length > 4 ? arguments[4] : undefined;
            if (!isValue(value)) return null;
            locale = locale || this._locale;

            if (typeof display === 'boolean') {
              if ((typeof ngDevMode === 'undefined' || ngDevMode) && console && console.warn) {
                console.warn("Warning: the currency pipe has been changed in Angular v5. The symbolDisplay option (third parameter) is now a string instead of a boolean. The accepted values are \"code\", \"symbol\" or \"symbol-narrow\".");
              }

              display = display ? 'symbol' : 'code';
            }

            var currency = currencyCode || this._defaultCurrencyCode;

            if (display !== 'code') {
              if (display === 'symbol' || display === 'symbol-narrow') {
                currency = getCurrencySymbol(currency, display === 'symbol' ? 'wide' : 'narrow', locale);
              } else {
                currency = display;
              }
            }

            try {
              var num = strToNumber(value);
              return formatCurrency(num, locale, currency, currencyCode, digitsInfo);
            } catch (error) {
              throw invalidPipeArgumentError(CurrencyPipe, error.message);
            }
          }
        }]);

        return CurrencyPipe;
      }();

      CurrencyPipe.ɵfac = function CurrencyPipe_Factory(t) {
        return new (t || CurrencyPipe)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["DEFAULT_CURRENCY_CODE"]));
      };

      CurrencyPipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({
        name: "currency",
        type: CurrencyPipe,
        pure: true
      });

      CurrencyPipe.ctorParameters = function () {
        return [{
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]]
          }]
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["DEFAULT_CURRENCY_CODE"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CurrencyPipe, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
          args: [{
            name: 'currency'
          }]
        }], function () {
          return [{
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["LOCALE_ID"]]
            }]
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["DEFAULT_CURRENCY_CODE"]]
            }]
          }];
        }, null);
      })();

      function isValue(value) {
        return !(value == null || value === '' || value !== value);
      }
      /**
       * Transforms a string into a number (if needed).
       */


      function strToNumber(value) {
        // Convert strings to numbers
        if (typeof value === 'string' && !isNaN(Number(value) - parseFloat(value))) {
          return Number(value);
        }

        if (typeof value !== 'number') {
          throw new Error("".concat(value, " is not a number"));
        }

        return value;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @ngModule CommonModule
       * @description
       *
       * Creates a new `Array` or `String` containing a subset (slice) of the elements.
       *
       * @usageNotes
       *
       * All behavior is based on the expected behavior of the JavaScript API `Array.prototype.slice()`
       * and `String.prototype.slice()`.
       *
       * When operating on an `Array`, the returned `Array` is always a copy even when all
       * the elements are being returned.
       *
       * When operating on a blank value, the pipe returns the blank value.
       *
       * ### List Example
       *
       * This `ngFor` example:
       *
       * {@example common/pipes/ts/slice_pipe.ts region='SlicePipe_list'}
       *
       * produces the following:
       *
       * ```html
       * <li>b</li>
       * <li>c</li>
       * ```
       *
       * ### String Examples
       *
       * {@example common/pipes/ts/slice_pipe.ts region='SlicePipe_string'}
       *
       * @publicApi
       */


      var SlicePipe = /*#__PURE__*/function () {
        function SlicePipe() {
          _classCallCheck2(this, SlicePipe);
        }

        _createClass2(SlicePipe, [{
          key: "transform",
          value: function transform(value, start, end) {
            if (value == null) return null;

            if (!this.supports(value)) {
              throw invalidPipeArgumentError(SlicePipe, value);
            }

            return value.slice(start, end);
          }
        }, {
          key: "supports",
          value: function supports(obj) {
            return typeof obj === 'string' || Array.isArray(obj);
          }
        }]);

        return SlicePipe;
      }();

      SlicePipe.ɵfac = function SlicePipe_Factory(t) {
        return new (t || SlicePipe)();
      };

      SlicePipe.ɵpipe = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefinePipe"]({
        name: "slice",
        type: SlicePipe,
        pure: false
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](SlicePipe, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"],
          args: [{
            name: 'slice',
            pure: false
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A collection of Angular pipes that are likely to be used in each and every application.
       */


      var COMMON_PIPES = [AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe];
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // Note: This does not contain the location providers,
      // as they need some platform specific implementations to work.

      /**
       * Exports all the basic Angular directives and pipes,
       * such as `NgIf`, `NgForOf`, `DecimalPipe`, and so on.
       * Re-exported by `BrowserModule`, which is included automatically in the root
       * `AppModule` when you create a new app with the CLI `new` command.
       *
       * * The `providers` options configure the NgModule's injector to provide
       * localization dependencies to members.
       * * The `exports` options make the declared directives and pipes available for import
       * by other NgModules.
       *
       * @publicApi
       */

      var CommonModule = function CommonModule() {
        _classCallCheck2(this, CommonModule);
      };

      CommonModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: CommonModule
      });
      CommonModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function CommonModule_Factory(t) {
          return new (t || CommonModule)();
        },
        providers: [{
          provide: NgLocalization,
          useClass: NgLocaleLocalization
        }]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](CommonModule, {
          declarations: [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase, AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe],
          exports: [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase, AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](CommonModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            declarations: [COMMON_DIRECTIVES, COMMON_PIPES],
            exports: [COMMON_DIRECTIVES, COMMON_PIPES],
            providers: [{
              provide: NgLocalization,
              useClass: NgLocaleLocalization
            }]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var PLATFORM_BROWSER_ID = 'browser';
      var PLATFORM_SERVER_ID = 'server';
      var PLATFORM_WORKER_APP_ID = 'browserWorkerApp';
      var PLATFORM_WORKER_UI_ID = 'browserWorkerUi';
      /**
       * Returns whether a platform id represents a browser platform.
       * @publicApi
       */

      function isPlatformBrowser(platformId) {
        return platformId === PLATFORM_BROWSER_ID;
      }
      /**
       * Returns whether a platform id represents a server platform.
       * @publicApi
       */


      function isPlatformServer(platformId) {
        return platformId === PLATFORM_SERVER_ID;
      }
      /**
       * Returns whether a platform id represents a web worker app platform.
       * @publicApi
       */


      function isPlatformWorkerApp(platformId) {
        return platformId === PLATFORM_WORKER_APP_ID;
      }
      /**
       * Returns whether a platform id represents a web worker UI platform.
       * @publicApi
       */


      function isPlatformWorkerUi(platformId) {
        return platformId === PLATFORM_WORKER_UI_ID;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @publicApi
       */


      var VERSION = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["Version"]('12.0.0-next.1');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Defines a scroll position manager. Implemented by `BrowserViewportScroller`.
       *
       * @publicApi
       */

      var ViewportScroller = function ViewportScroller() {
        _classCallCheck2(this, ViewportScroller);
      }; // De-sugared tree-shakable injection
      // See #23917

      /** @nocollapse */


      ViewportScroller.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"])({
        token: ViewportScroller,
        providedIn: 'root',
        factory: function factory() {
          return new BrowserViewportScroller(Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"])(DOCUMENT), window);
        }
      });
      /**
       * Manages the scroll position for a browser window.
       */

      var BrowserViewportScroller = /*#__PURE__*/function () {
        function BrowserViewportScroller(document, window) {
          _classCallCheck2(this, BrowserViewportScroller);

          this.document = document;
          this.window = window;

          this.offset = function () {
            return [0, 0];
          };
        }
        /**
         * Configures the top offset used when scrolling to an anchor.
         * @param offset A position in screen coordinates (a tuple with x and y values)
         * or a function that returns the top offset position.
         *
         */


        _createClass2(BrowserViewportScroller, [{
          key: "setOffset",
          value: function setOffset(offset) {
            if (Array.isArray(offset)) {
              this.offset = function () {
                return offset;
              };
            } else {
              this.offset = offset;
            }
          }
          /**
           * Retrieves the current scroll position.
           * @returns The position in screen coordinates.
           */

        }, {
          key: "getScrollPosition",
          value: function getScrollPosition() {
            if (this.supportsScrolling()) {
              return [this.window.pageXOffset, this.window.pageYOffset];
            } else {
              return [0, 0];
            }
          }
          /**
           * Sets the scroll position.
           * @param position The new position in screen coordinates.
           */

        }, {
          key: "scrollToPosition",
          value: function scrollToPosition(position) {
            if (this.supportsScrolling()) {
              this.window.scrollTo(position[0], position[1]);
            }
          }
          /**
           * Scrolls to an element and attempts to focus the element.
           *
           * Note that the function name here is misleading in that the target string may be an ID for a
           * non-anchor element.
           *
           * @param target The ID of an element or name of the anchor.
           *
           * @see https://html.spec.whatwg.org/#the-indicated-part-of-the-document
           * @see https://html.spec.whatwg.org/#scroll-to-fragid
           */

        }, {
          key: "scrollToAnchor",
          value: function scrollToAnchor(target) {
            var _a;

            if (!this.supportsScrolling()) {
              return;
            } // TODO(atscott): The correct behavior for `getElementsByName` would be to also verify that the
            // element is an anchor. However, this could be considered a breaking change and should be
            // done in a major version.


            var elSelected = (_a = this.document.getElementById(target)) !== null && _a !== void 0 ? _a : this.document.getElementsByName(target)[0];

            if (elSelected === undefined) {
              return;
            }

            this.scrollToElement(elSelected); // After scrolling to the element, the spec dictates that we follow the focus steps for the
            // target. Rather than following the robust steps, simply attempt focus.

            this.attemptFocus(elSelected);
          }
          /**
           * Disables automatic scroll restoration provided by the browser.
           */

        }, {
          key: "setHistoryScrollRestoration",
          value: function setHistoryScrollRestoration(scrollRestoration) {
            if (this.supportScrollRestoration()) {
              var history = this.window.history;

              if (history && history.scrollRestoration) {
                history.scrollRestoration = scrollRestoration;
              }
            }
          }
          /**
           * Scrolls to an element using the native offset and the specified offset set on this scroller.
           *
           * The offset can be used when we know that there is a floating header and scrolling naively to an
           * element (ex: `scrollIntoView`) leaves the element hidden behind the floating header.
           */

        }, {
          key: "scrollToElement",
          value: function scrollToElement(el) {
            var rect = el.getBoundingClientRect();
            var left = rect.left + this.window.pageXOffset;
            var top = rect.top + this.window.pageYOffset;
            var offset = this.offset();
            this.window.scrollTo(left - offset[0], top - offset[1]);
          }
          /**
           * Calls `focus` on the `focusTarget` and returns `true` if the element was focused successfully.
           *
           * If `false`, further steps may be necessary to determine a valid substitute to be focused
           * instead.
           *
           * @see https://html.spec.whatwg.org/#get-the-focusable-area
           * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLOrForeignElement/focus
           * @see https://html.spec.whatwg.org/#focusable-area
           */

        }, {
          key: "attemptFocus",
          value: function attemptFocus(focusTarget) {
            focusTarget.focus();
            return this.document.activeElement === focusTarget;
          }
          /**
           * We only support scroll restoration when we can get a hold of window.
           * This means that we do not support this behavior when running in a web worker.
           *
           * Lifting this restriction right now would require more changes in the dom adapter.
           * Since webworkers aren't widely used, we will lift it once RouterScroller is
           * battle-tested.
           */

        }, {
          key: "supportScrollRestoration",
          value: function supportScrollRestoration() {
            try {
              if (!this.supportsScrolling()) {
                return false;
              } // The `scrollRestoration` property could be on the `history` instance or its prototype.


              var scrollRestorationDescriptor = getScrollRestorationProperty(this.window.history) || getScrollRestorationProperty(Object.getPrototypeOf(this.window.history)); // We can write to the `scrollRestoration` property if it is a writable data field or it has a
              // setter function.

              return !!scrollRestorationDescriptor && !!(scrollRestorationDescriptor.writable || scrollRestorationDescriptor.set);
            } catch (_a) {
              return false;
            }
          }
        }, {
          key: "supportsScrolling",
          value: function supportsScrolling() {
            try {
              return !!this.window && !!this.window.scrollTo && 'pageXOffset' in this.window;
            } catch (_a) {
              return false;
            }
          }
        }]);

        return BrowserViewportScroller;
      }();

      function getScrollRestorationProperty(obj) {
        return Object.getOwnPropertyDescriptor(obj, 'scrollRestoration');
      }
      /**
       * Provides an empty implementation of the viewport scroller.
       */


      var NullViewportScroller = /*#__PURE__*/function () {
        function NullViewportScroller() {
          _classCallCheck2(this, NullViewportScroller);
        }

        _createClass2(NullViewportScroller, [{
          key: "setOffset",
          value:
          /**
           * Empty implementation
           */
          function setOffset(offset) {}
          /**
           * Empty implementation
           */

        }, {
          key: "getScrollPosition",
          value: function getScrollPosition() {
            return [0, 0];
          }
          /**
           * Empty implementation
           */

        }, {
          key: "scrollToPosition",
          value: function scrollToPosition(position) {}
          /**
           * Empty implementation
           */

        }, {
          key: "scrollToAnchor",
          value: function scrollToAnchor(anchor) {}
          /**
           * Empty implementation
           */

        }, {
          key: "setHistoryScrollRestoration",
          value: function setHistoryScrollRestoration(scrollRestoration) {}
        }]);

        return NullViewportScroller;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // This file only reexports content of the `src` folder. Keep it that way.

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=common.js.map

      /***/

    },

    /***/
    "p/rL":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/bm.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function pRL(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Bambara [bm]
      //! author : Estelle Comment : https://github.com/estellecomment
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var bm = moment.defineLocale('bm', {
          months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split('_'),
          monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),
          weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),
          weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),
          weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'MMMM [tile] D [san] YYYY',
            LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',
            LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm'
          },
          calendar: {
            sameDay: '[Bi lɛrɛ] LT',
            nextDay: '[Sini lɛrɛ] LT',
            nextWeek: 'dddd [don lɛrɛ] LT',
            lastDay: '[Kunu lɛrɛ] LT',
            lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s kɔnɔ',
            past: 'a bɛ %s bɔ',
            s: 'sanga dama dama',
            ss: 'sekondi %d',
            m: 'miniti kelen',
            mm: 'miniti %d',
            h: 'lɛrɛ kelen',
            hh: 'lɛrɛ %d',
            d: 'tile kelen',
            dd: 'tile %d',
            M: 'kalo kelen',
            MM: 'kalo %d',
            y: 'san kelen',
            yy: 'san %d'
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return bm;
      });
      /***/

    },

    /***/
    "p9/F":
    /*!*****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/buffer.js ***!
      \*****************************************************************/

    /*! exports provided: buffer */

    /***/
    function p9F(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "buffer", function () {
        return buffer;
      });
      /* harmony import */


      var _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../innerSubscribe */
      "zx2A");

      function buffer(closingNotifier) {
        return function bufferOperatorFunction(source) {
          return source.lift(new BufferOperator(closingNotifier));
        };
      }

      var BufferOperator = /*#__PURE__*/function () {
        function BufferOperator(closingNotifier) {
          _classCallCheck2(this, BufferOperator);

          this.closingNotifier = closingNotifier;
        }

        _createClass2(BufferOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new BufferSubscriber(subscriber, this.closingNotifier));
          }
        }]);

        return BufferOperator;
      }();

      var BufferSubscriber = /*#__PURE__*/function (_innerSubscribe__WEBP16) {
        _inherits2(BufferSubscriber, _innerSubscribe__WEBP16);

        var _super353 = _createSuper(BufferSubscriber);

        function BufferSubscriber(destination, closingNotifier) {
          var _this835;

          _classCallCheck2(this, BufferSubscriber);

          _this835 = _super353.call(this, destination);
          _this835.buffer = [];

          _this835.add(Object(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["innerSubscribe"])(closingNotifier, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleInnerSubscriber"](_assertThisInitialized2(_this835))));

          return _this835;
        }

        _createClass2(BufferSubscriber, [{
          key: "_next",
          value: function _next(value) {
            this.buffer.push(value);
          }
        }, {
          key: "notifyNext",
          value: function notifyNext() {
            var buffer = this.buffer;
            this.buffer = [];
            this.destination.next(buffer);
          }
        }]);

        return BufferSubscriber;
      }(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleOuterSubscriber"]); //# sourceMappingURL=buffer.js.map

      /***/

    },

    /***/
    "pLZG":
    /*!*****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/filter.js ***!
      \*****************************************************************/

    /*! exports provided: filter */

    /***/
    function pLZG(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "filter", function () {
        return filter;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");

      function filter(predicate, thisArg) {
        return function filterOperatorFunction(source) {
          return source.lift(new FilterOperator(predicate, thisArg));
        };
      }

      var FilterOperator = /*#__PURE__*/function () {
        function FilterOperator(predicate, thisArg) {
          _classCallCheck2(this, FilterOperator);

          this.predicate = predicate;
          this.thisArg = thisArg;
        }

        _createClass2(FilterOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new FilterSubscriber(subscriber, this.predicate, this.thisArg));
          }
        }]);

        return FilterOperator;
      }();

      var FilterSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_41) {
        _inherits2(FilterSubscriber, _Subscriber__WEBPACK_41);

        var _super354 = _createSuper(FilterSubscriber);

        function FilterSubscriber(destination, predicate, thisArg) {
          var _this836;

          _classCallCheck2(this, FilterSubscriber);

          _this836 = _super354.call(this, destination);
          _this836.predicate = predicate;
          _this836.thisArg = thisArg;
          _this836.count = 0;
          return _this836;
        }

        _createClass2(FilterSubscriber, [{
          key: "_next",
          value: function _next(value) {
            var result;

            try {
              result = this.predicate.call(this.thisArg, value, this.count++);
            } catch (err) {
              this.destination.error(err);
              return;
            }

            if (result) {
              this.destination.next(value);
            }
          }
        }]);

        return FilterSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=filter.js.map

      /***/

    },

    /***/
    "pLzU":
    /*!*************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/subscribeToIterable.js ***!
      \*************************************************************************/

    /*! exports provided: subscribeToIterable */

    /***/
    function pLzU(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "subscribeToIterable", function () {
        return subscribeToIterable;
      });
      /* harmony import */


      var _symbol_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../symbol/iterator */
      "Lhse");

      var subscribeToIterable = function subscribeToIterable(iterable) {
        return function (subscriber) {
          var iterator = iterable[_symbol_iterator__WEBPACK_IMPORTED_MODULE_0__["iterator"]]();

          do {
            var item = void 0;

            try {
              item = iterator.next();
            } catch (err) {
              subscriber.error(err);
              return subscriber;
            }

            if (item.done) {
              subscriber.complete();
              break;
            }

            subscriber.next(item.value);

            if (subscriber.closed) {
              break;
            }
          } while (true);

          if (typeof iterator["return"] === 'function') {
            subscriber.add(function () {
              if (iterator["return"]) {
                iterator["return"]();
              }
            });
          }

          return subscriber;
        };
      }; //# sourceMappingURL=subscribeToIterable.js.map

      /***/

    },

    /***/
    "pXlZ":
    /*!*********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/windowWhen.js ***!
      \*********************************************************************/

    /*! exports provided: windowWhen */

    /***/
    function pXlZ(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "windowWhen", function () {
        return windowWhen;
      });
      /* harmony import */


      var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subject */
      "XNiG");
      /* harmony import */


      var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../OuterSubscriber */
      "l7GE");
      /* harmony import */


      var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../util/subscribeToResult */
      "ZUHj");

      function windowWhen(closingSelector) {
        return function windowWhenOperatorFunction(source) {
          return source.lift(new WindowOperator(closingSelector));
        };
      }

      var WindowOperator = /*#__PURE__*/function () {
        function WindowOperator(closingSelector) {
          _classCallCheck2(this, WindowOperator);

          this.closingSelector = closingSelector;
        }

        _createClass2(WindowOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new WindowSubscriber(subscriber, this.closingSelector));
          }
        }]);

        return WindowOperator;
      }();

      var WindowSubscriber = /*#__PURE__*/function (_OuterSubscriber__WEB5) {
        _inherits2(WindowSubscriber, _OuterSubscriber__WEB5);

        var _super355 = _createSuper(WindowSubscriber);

        function WindowSubscriber(destination, closingSelector) {
          var _this837;

          _classCallCheck2(this, WindowSubscriber);

          _this837 = _super355.call(this, destination);
          _this837.destination = destination;
          _this837.closingSelector = closingSelector;

          _this837.openWindow();

          return _this837;
        }

        _createClass2(WindowSubscriber, [{
          key: "notifyNext",
          value: function notifyNext(_outerValue, _innerValue, _outerIndex, _innerIndex, innerSub) {
            this.openWindow(innerSub);
          }
        }, {
          key: "notifyError",
          value: function notifyError(error) {
            this._error(error);
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete(innerSub) {
            this.openWindow(innerSub);
          }
        }, {
          key: "_next",
          value: function _next(value) {
            this.window.next(value);
          }
        }, {
          key: "_error",
          value: function _error(err) {
            this.window.error(err);
            this.destination.error(err);
            this.unsubscribeClosingNotification();
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.window.complete();
            this.destination.complete();
            this.unsubscribeClosingNotification();
          }
        }, {
          key: "unsubscribeClosingNotification",
          value: function unsubscribeClosingNotification() {
            if (this.closingNotification) {
              this.closingNotification.unsubscribe();
            }
          }
        }, {
          key: "openWindow",
          value: function openWindow() {
            var innerSub = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;

            if (innerSub) {
              this.remove(innerSub);
              innerSub.unsubscribe();
            }

            var prevWindow = this.window;

            if (prevWindow) {
              prevWindow.complete();
            }

            var window = this.window = new _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"]();
            this.destination.next(window);
            var closingNotifier;

            try {
              var closingSelector = this.closingSelector;
              closingNotifier = closingSelector();
            } catch (e) {
              this.destination.error(e);
              this.window.error(e);
              return;
            }

            this.add(this.closingNotification = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, closingNotifier));
          }
        }]);

        return WindowSubscriber;
      }(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]); //# sourceMappingURL=windowWhen.js.map

      /***/

    },

    /***/
    "pjAE":
    /*!*************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/UnsubscriptionError.js ***!
      \*************************************************************************/

    /*! exports provided: UnsubscriptionError */

    /***/
    function pjAE(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "UnsubscriptionError", function () {
        return UnsubscriptionError;
      });

      var UnsubscriptionErrorImpl = function () {
        function UnsubscriptionErrorImpl(errors) {
          Error.call(this);
          this.message = errors ? "".concat(errors.length, " errors occurred during unsubscription:\n").concat(errors.map(function (err, i) {
            return "".concat(i + 1, ") ").concat(err.toString());
          }).join('\n  ')) : '';
          this.name = 'UnsubscriptionError';
          this.errors = errors;
          return this;
        }

        UnsubscriptionErrorImpl.prototype = Object.create(Error.prototype);
        return UnsubscriptionErrorImpl;
      }();

      var UnsubscriptionError = UnsubscriptionErrorImpl; //# sourceMappingURL=UnsubscriptionError.js.map

      /***/
    },

    /***/
    "pxpQ":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/observeOn.js ***!
      \********************************************************************/

    /*! exports provided: observeOn, ObserveOnOperator, ObserveOnSubscriber, ObserveOnMessage */

    /***/
    function pxpQ(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "observeOn", function () {
        return observeOn;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ObserveOnOperator", function () {
        return ObserveOnOperator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ObserveOnSubscriber", function () {
        return ObserveOnSubscriber;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ObserveOnMessage", function () {
        return ObserveOnMessage;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");
      /* harmony import */


      var _Notification__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../Notification */
      "WMd4");

      function observeOn(scheduler) {
        var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
        return function observeOnOperatorFunction(source) {
          return source.lift(new ObserveOnOperator(scheduler, delay));
        };
      }

      var ObserveOnOperator = /*#__PURE__*/function () {
        function ObserveOnOperator(scheduler) {
          var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;

          _classCallCheck2(this, ObserveOnOperator);

          this.scheduler = scheduler;
          this.delay = delay;
        }

        _createClass2(ObserveOnOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new ObserveOnSubscriber(subscriber, this.scheduler, this.delay));
          }
        }]);

        return ObserveOnOperator;
      }();

      var ObserveOnSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_42) {
        _inherits2(ObserveOnSubscriber, _Subscriber__WEBPACK_42);

        var _super356 = _createSuper(ObserveOnSubscriber);

        function ObserveOnSubscriber(destination, scheduler) {
          var _this838;

          var delay = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;

          _classCallCheck2(this, ObserveOnSubscriber);

          _this838 = _super356.call(this, destination);
          _this838.scheduler = scheduler;
          _this838.delay = delay;
          return _this838;
        }

        _createClass2(ObserveOnSubscriber, [{
          key: "scheduleMessage",
          value: function scheduleMessage(notification) {
            var destination = this.destination;
            destination.add(this.scheduler.schedule(ObserveOnSubscriber.dispatch, this.delay, new ObserveOnMessage(notification, this.destination)));
          }
        }, {
          key: "_next",
          value: function _next(value) {
            this.scheduleMessage(_Notification__WEBPACK_IMPORTED_MODULE_1__["Notification"].createNext(value));
          }
        }, {
          key: "_error",
          value: function _error(err) {
            this.scheduleMessage(_Notification__WEBPACK_IMPORTED_MODULE_1__["Notification"].createError(err));
            this.unsubscribe();
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.scheduleMessage(_Notification__WEBPACK_IMPORTED_MODULE_1__["Notification"].createComplete());
            this.unsubscribe();
          }
        }], [{
          key: "dispatch",
          value: function dispatch(arg) {
            var notification = arg.notification,
                destination = arg.destination;
            notification.observe(destination);
            this.unsubscribe();
          }
        }]);

        return ObserveOnSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]);

      var ObserveOnMessage = function ObserveOnMessage(notification, destination) {
        _classCallCheck2(this, ObserveOnMessage);

        this.notification = notification;
        this.destination = destination;
      }; //# sourceMappingURL=observeOn.js.map

      /***/

    },

    /***/
    "q/0M":
    /*!*********************************************************!*\
      !*** ./node_modules/@firebase/logger/dist/index.esm.js ***!
      \*********************************************************/

    /*! exports provided: LogLevel, Logger, setLogLevel, setUserLogHandler */

    /***/
    function q0M(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LogLevel", function () {
        return LogLevel;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Logger", function () {
        return Logger;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "setLogLevel", function () {
        return setLogLevel;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "setUserLogHandler", function () {
        return setUserLogHandler;
      });
      /*! *****************************************************************************
      Copyright (c) Microsoft Corporation. All rights reserved.
      Licensed under the Apache License, Version 2.0 (the "License"); you may not use
      this file except in compliance with the License. You may obtain a copy of the
      License at http://www.apache.org/licenses/LICENSE-2.0
      
      THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
      KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
      WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
      MERCHANTABLITY OR NON-INFRINGEMENT.
      
      See the Apache Version 2.0 License for specific language governing permissions
      and limitations under the License.
      ***************************************************************************** */


      function __spreadArrays() {
        for (var s = 0, i = 0, il = arguments.length; i < il; i++) {
          s += arguments[i].length;
        }

        for (var r = Array(s), k = 0, i = 0; i < il; i++) {
          for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {
            r[k] = a[j];
          }
        }

        return r;
      }
      /**
       * @license
       * Copyright 2017 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */


      var _a;
      /**
       * A container for all of the Logger instances
       */


      var instances = [];
      /**
       * The JS SDK supports 5 log levels and also allows a user the ability to
       * silence the logs altogether.
       *
       * The order is a follows:
       * DEBUG < VERBOSE < INFO < WARN < ERROR
       *
       * All of the log types above the current log level will be captured (i.e. if
       * you set the log level to `INFO`, errors will still be logged, but `DEBUG` and
       * `VERBOSE` logs will not)
       */

      var LogLevel;

      (function (LogLevel) {
        LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
        LogLevel[LogLevel["VERBOSE"] = 1] = "VERBOSE";
        LogLevel[LogLevel["INFO"] = 2] = "INFO";
        LogLevel[LogLevel["WARN"] = 3] = "WARN";
        LogLevel[LogLevel["ERROR"] = 4] = "ERROR";
        LogLevel[LogLevel["SILENT"] = 5] = "SILENT";
      })(LogLevel || (LogLevel = {}));

      var levelStringToEnum = {
        'debug': LogLevel.DEBUG,
        'verbose': LogLevel.VERBOSE,
        'info': LogLevel.INFO,
        'warn': LogLevel.WARN,
        'error': LogLevel.ERROR,
        'silent': LogLevel.SILENT
      };
      /**
       * The default log level
       */

      var defaultLogLevel = LogLevel.INFO;
      /**
       * By default, `console.debug` is not displayed in the developer console (in
       * chrome). To avoid forcing users to have to opt-in to these logs twice
       * (i.e. once for firebase, and once in the console), we are sending `DEBUG`
       * logs to the `console.log` function.
       */

      var ConsoleMethod = (_a = {}, _a[LogLevel.DEBUG] = 'log', _a[LogLevel.VERBOSE] = 'log', _a[LogLevel.INFO] = 'info', _a[LogLevel.WARN] = 'warn', _a[LogLevel.ERROR] = 'error', _a);
      /**
       * The default log handler will forward DEBUG, VERBOSE, INFO, WARN, and ERROR
       * messages on to their corresponding console counterparts (if the log method
       * is supported by the current log level)
       */

      var defaultLogHandler = function defaultLogHandler(instance, logType) {
        var args = [];

        for (var _i = 2; _i < arguments.length; _i++) {
          args[_i - 2] = arguments[_i];
        }

        if (logType < instance.logLevel) {
          return;
        }

        var now = new Date().toISOString();
        var method = ConsoleMethod[logType];

        if (method) {
          console[method].apply(console, __spreadArrays(["[" + now + "]  " + instance.name + ":"], args));
        } else {
          throw new Error("Attempted to log a message with an invalid logType (value: " + logType + ")");
        }
      };

      var Logger =
      /** @class */
      function () {
        /**
         * Gives you an instance of a Logger to capture messages according to
         * Firebase's logging scheme.
         *
         * @param name The name that the logs will be associated with
         */
        function Logger(name) {
          this.name = name;
          /**
           * The log level of the given Logger instance.
           */

          this._logLevel = defaultLogLevel;
          /**
           * The main (internal) log handler for the Logger instance.
           * Can be set to a new function in internal package code but not by user.
           */

          this._logHandler = defaultLogHandler;
          /**
           * The optional, additional, user-defined log handler for the Logger instance.
           */

          this._userLogHandler = null;
          /**
           * Capture the current instance for later use
           */

          instances.push(this);
        }

        Object.defineProperty(Logger.prototype, "logLevel", {
          get: function get() {
            return this._logLevel;
          },
          set: function set(val) {
            if (!(val in LogLevel)) {
              throw new TypeError("Invalid value \"" + val + "\" assigned to `logLevel`");
            }

            this._logLevel = val;
          },
          enumerable: false,
          configurable: true
        }); // Workaround for setter/getter having to be the same type.

        Logger.prototype.setLogLevel = function (val) {
          this._logLevel = typeof val === 'string' ? levelStringToEnum[val] : val;
        };

        Object.defineProperty(Logger.prototype, "logHandler", {
          get: function get() {
            return this._logHandler;
          },
          set: function set(val) {
            if (typeof val !== 'function') {
              throw new TypeError('Value assigned to `logHandler` must be a function');
            }

            this._logHandler = val;
          },
          enumerable: false,
          configurable: true
        });
        Object.defineProperty(Logger.prototype, "userLogHandler", {
          get: function get() {
            return this._userLogHandler;
          },
          set: function set(val) {
            this._userLogHandler = val;
          },
          enumerable: false,
          configurable: true
        });
        /**
         * The functions below are all based on the `console` interface
         */

        Logger.prototype.debug = function () {
          var args = [];

          for (var _i = 0; _i < arguments.length; _i++) {
            args[_i] = arguments[_i];
          }

          this._userLogHandler && this._userLogHandler.apply(this, __spreadArrays([this, LogLevel.DEBUG], args));

          this._logHandler.apply(this, __spreadArrays([this, LogLevel.DEBUG], args));
        };

        Logger.prototype.log = function () {
          var args = [];

          for (var _i = 0; _i < arguments.length; _i++) {
            args[_i] = arguments[_i];
          }

          this._userLogHandler && this._userLogHandler.apply(this, __spreadArrays([this, LogLevel.VERBOSE], args));

          this._logHandler.apply(this, __spreadArrays([this, LogLevel.VERBOSE], args));
        };

        Logger.prototype.info = function () {
          var args = [];

          for (var _i = 0; _i < arguments.length; _i++) {
            args[_i] = arguments[_i];
          }

          this._userLogHandler && this._userLogHandler.apply(this, __spreadArrays([this, LogLevel.INFO], args));

          this._logHandler.apply(this, __spreadArrays([this, LogLevel.INFO], args));
        };

        Logger.prototype.warn = function () {
          var args = [];

          for (var _i = 0; _i < arguments.length; _i++) {
            args[_i] = arguments[_i];
          }

          this._userLogHandler && this._userLogHandler.apply(this, __spreadArrays([this, LogLevel.WARN], args));

          this._logHandler.apply(this, __spreadArrays([this, LogLevel.WARN], args));
        };

        Logger.prototype.error = function () {
          var args = [];

          for (var _i = 0; _i < arguments.length; _i++) {
            args[_i] = arguments[_i];
          }

          this._userLogHandler && this._userLogHandler.apply(this, __spreadArrays([this, LogLevel.ERROR], args));

          this._logHandler.apply(this, __spreadArrays([this, LogLevel.ERROR], args));
        };

        return Logger;
      }();

      function setLogLevel(level) {
        instances.forEach(function (inst) {
          inst.setLogLevel(level);
        });
      }

      function setUserLogHandler(logCallback, options) {
        var _loop_1 = function _loop_1(instance) {
          var customLogLevel = null;

          if (options && options.level) {
            customLogLevel = levelStringToEnum[options.level];
          }

          if (logCallback === null) {
            instance.userLogHandler = null;
          } else {
            instance.userLogHandler = function (instance, level) {
              var args = [];

              for (var _i = 2; _i < arguments.length; _i++) {
                args[_i - 2] = arguments[_i];
              }

              var message = args.map(function (arg) {
                if (arg == null) {
                  return null;
                } else if (typeof arg === 'string') {
                  return arg;
                } else if (typeof arg === 'number' || typeof arg === 'boolean') {
                  return arg.toString();
                } else if (arg instanceof Error) {
                  return arg.message;
                } else {
                  try {
                    return JSON.stringify(arg);
                  } catch (ignored) {
                    return null;
                  }
                }
              }).filter(function (arg) {
                return arg;
              }).join(' ');

              if (level >= (customLogLevel !== null && customLogLevel !== void 0 ? customLogLevel : instance.logLevel)) {
                logCallback({
                  level: LogLevel[level].toLowerCase(),
                  message: message,
                  args: args,
                  type: instance.name
                });
              }
            };
          }
        };

        for (var _i = 0, instances_1 = instances; _i < instances_1.length; _i++) {
          var instance = instances_1[_i];

          _loop_1(instance);
        }
      } //# sourceMappingURL=index.esm.js.map

      /***/

    },

    /***/
    "q7zd":
    /*!**********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/concatMapTo.js ***!
      \**********************************************************************/

    /*! exports provided: concatMapTo */

    /***/
    function q7zd(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "concatMapTo", function () {
        return concatMapTo;
      });
      /* harmony import */


      var _concatMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./concatMap */
      "bOdf");

      function concatMapTo(innerObservable, resultSelector) {
        return Object(_concatMap__WEBPACK_IMPORTED_MODULE_0__["concatMap"])(function () {
          return innerObservable;
        }, resultSelector);
      } //# sourceMappingURL=concatMapTo.js.map

      /***/

    },

    /***/
    "q92s":
    /*!****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/merge.js ***!
      \****************************************************************/

    /*! exports provided: merge */

    /***/
    function q92s(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "merge", function () {
        return merge;
      });
      /* harmony import */


      var _observable_merge__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../observable/merge */
      "VRyK");

      function merge() {
        for (var _len61 = arguments.length, observables = new Array(_len61), _key63 = 0; _key63 < _len61; _key63++) {
          observables[_key63] = arguments[_key63];
        }

        return function (source) {
          return source.lift.call(Object(_observable_merge__WEBPACK_IMPORTED_MODULE_0__["merge"]).apply(void 0, [source].concat(observables)));
        };
      } //# sourceMappingURL=merge.js.map

      /***/

    },

    /***/
    "qCKp":
    /*!*********************************************!*\
      !*** ./node_modules/rxjs/_esm2015/index.js ***!
      \*********************************************/

    /*! exports provided: Observable, ConnectableObservable, GroupedObservable, observable, Subject, BehaviorSubject, ReplaySubject, AsyncSubject, asap, asapScheduler, async, asyncScheduler, queue, queueScheduler, animationFrame, animationFrameScheduler, VirtualTimeScheduler, VirtualAction, Scheduler, Subscription, Subscriber, Notification, NotificationKind, pipe, noop, identity, isObservable, ArgumentOutOfRangeError, EmptyError, ObjectUnsubscribedError, UnsubscriptionError, TimeoutError, bindCallback, bindNodeCallback, combineLatest, concat, defer, empty, forkJoin, from, fromEvent, fromEventPattern, generate, iif, interval, merge, never, of, onErrorResumeNext, pairs, partition, race, range, throwError, timer, using, zip, scheduled, EMPTY, NEVER, config */

    /***/
    function qCKp(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony import */


      var _internal_Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./internal/Observable */
      "HDdC");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "Observable", function () {
        return _internal_Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"];
      });
      /* harmony import */


      var _internal_observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./internal/observable/ConnectableObservable */
      "EQ5u");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "ConnectableObservable", function () {
        return _internal_observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_1__["ConnectableObservable"];
      });
      /* harmony import */


      var _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./internal/operators/groupBy */
      "OQgR");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "GroupedObservable", function () {
        return _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_2__["GroupedObservable"];
      });
      /* harmony import */


      var _internal_symbol_observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./internal/symbol/observable */
      "kJWO");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "observable", function () {
        return _internal_symbol_observable__WEBPACK_IMPORTED_MODULE_3__["observable"];
      });
      /* harmony import */


      var _internal_Subject__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ./internal/Subject */
      "XNiG");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "Subject", function () {
        return _internal_Subject__WEBPACK_IMPORTED_MODULE_4__["Subject"];
      });
      /* harmony import */


      var _internal_BehaviorSubject__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! ./internal/BehaviorSubject */
      "2Vo4");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "BehaviorSubject", function () {
        return _internal_BehaviorSubject__WEBPACK_IMPORTED_MODULE_5__["BehaviorSubject"];
      });
      /* harmony import */


      var _internal_ReplaySubject__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! ./internal/ReplaySubject */
      "jtHE");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "ReplaySubject", function () {
        return _internal_ReplaySubject__WEBPACK_IMPORTED_MODULE_6__["ReplaySubject"];
      });
      /* harmony import */


      var _internal_AsyncSubject__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! ./internal/AsyncSubject */
      "NHP+");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "AsyncSubject", function () {
        return _internal_AsyncSubject__WEBPACK_IMPORTED_MODULE_7__["AsyncSubject"];
      });
      /* harmony import */


      var _internal_scheduler_asap__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(
      /*! ./internal/scheduler/asap */
      "7Hc7");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "asap", function () {
        return _internal_scheduler_asap__WEBPACK_IMPORTED_MODULE_8__["asap"];
      });
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "asapScheduler", function () {
        return _internal_scheduler_asap__WEBPACK_IMPORTED_MODULE_8__["asapScheduler"];
      });
      /* harmony import */


      var _internal_scheduler_async__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(
      /*! ./internal/scheduler/async */
      "D0XW");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "async", function () {
        return _internal_scheduler_async__WEBPACK_IMPORTED_MODULE_9__["async"];
      });
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "asyncScheduler", function () {
        return _internal_scheduler_async__WEBPACK_IMPORTED_MODULE_9__["asyncScheduler"];
      });
      /* harmony import */


      var _internal_scheduler_queue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(
      /*! ./internal/scheduler/queue */
      "qgXg");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "queue", function () {
        return _internal_scheduler_queue__WEBPACK_IMPORTED_MODULE_10__["queue"];
      });
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "queueScheduler", function () {
        return _internal_scheduler_queue__WEBPACK_IMPORTED_MODULE_10__["queueScheduler"];
      });
      /* harmony import */


      var _internal_scheduler_animationFrame__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(
      /*! ./internal/scheduler/animationFrame */
      "eNwd");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "animationFrame", function () {
        return _internal_scheduler_animationFrame__WEBPACK_IMPORTED_MODULE_11__["animationFrame"];
      });
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "animationFrameScheduler", function () {
        return _internal_scheduler_animationFrame__WEBPACK_IMPORTED_MODULE_11__["animationFrameScheduler"];
      });
      /* harmony import */


      var _internal_scheduler_VirtualTimeScheduler__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(
      /*! ./internal/scheduler/VirtualTimeScheduler */
      "iKkX");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "VirtualTimeScheduler", function () {
        return _internal_scheduler_VirtualTimeScheduler__WEBPACK_IMPORTED_MODULE_12__["VirtualTimeScheduler"];
      });
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "VirtualAction", function () {
        return _internal_scheduler_VirtualTimeScheduler__WEBPACK_IMPORTED_MODULE_12__["VirtualAction"];
      });
      /* harmony import */


      var _internal_Scheduler__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(
      /*! ./internal/Scheduler */
      "Y/cZ");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "Scheduler", function () {
        return _internal_Scheduler__WEBPACK_IMPORTED_MODULE_13__["Scheduler"];
      });
      /* harmony import */


      var _internal_Subscription__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(
      /*! ./internal/Subscription */
      "quSY");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "Subscription", function () {
        return _internal_Subscription__WEBPACK_IMPORTED_MODULE_14__["Subscription"];
      });
      /* harmony import */


      var _internal_Subscriber__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(
      /*! ./internal/Subscriber */
      "7o/Q");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "Subscriber", function () {
        return _internal_Subscriber__WEBPACK_IMPORTED_MODULE_15__["Subscriber"];
      });
      /* harmony import */


      var _internal_Notification__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(
      /*! ./internal/Notification */
      "WMd4");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "Notification", function () {
        return _internal_Notification__WEBPACK_IMPORTED_MODULE_16__["Notification"];
      });
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "NotificationKind", function () {
        return _internal_Notification__WEBPACK_IMPORTED_MODULE_16__["NotificationKind"];
      });
      /* harmony import */


      var _internal_util_pipe__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(
      /*! ./internal/util/pipe */
      "mCNh");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "pipe", function () {
        return _internal_util_pipe__WEBPACK_IMPORTED_MODULE_17__["pipe"];
      });
      /* harmony import */


      var _internal_util_noop__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(
      /*! ./internal/util/noop */
      "KqfI");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "noop", function () {
        return _internal_util_noop__WEBPACK_IMPORTED_MODULE_18__["noop"];
      });
      /* harmony import */


      var _internal_util_identity__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(
      /*! ./internal/util/identity */
      "SpAZ");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "identity", function () {
        return _internal_util_identity__WEBPACK_IMPORTED_MODULE_19__["identity"];
      });
      /* harmony import */


      var _internal_util_isObservable__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(
      /*! ./internal/util/isObservable */
      "7+OI");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "isObservable", function () {
        return _internal_util_isObservable__WEBPACK_IMPORTED_MODULE_20__["isObservable"];
      });
      /* harmony import */


      var _internal_util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(
      /*! ./internal/util/ArgumentOutOfRangeError */
      "4I5i");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "ArgumentOutOfRangeError", function () {
        return _internal_util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_21__["ArgumentOutOfRangeError"];
      });
      /* harmony import */


      var _internal_util_EmptyError__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(
      /*! ./internal/util/EmptyError */
      "sVev");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "EmptyError", function () {
        return _internal_util_EmptyError__WEBPACK_IMPORTED_MODULE_22__["EmptyError"];
      });
      /* harmony import */


      var _internal_util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(
      /*! ./internal/util/ObjectUnsubscribedError */
      "9ppp");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "ObjectUnsubscribedError", function () {
        return _internal_util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_23__["ObjectUnsubscribedError"];
      });
      /* harmony import */


      var _internal_util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(
      /*! ./internal/util/UnsubscriptionError */
      "pjAE");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "UnsubscriptionError", function () {
        return _internal_util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_24__["UnsubscriptionError"];
      });
      /* harmony import */


      var _internal_util_TimeoutError__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(
      /*! ./internal/util/TimeoutError */
      "Y6u4");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "TimeoutError", function () {
        return _internal_util_TimeoutError__WEBPACK_IMPORTED_MODULE_25__["TimeoutError"];
      });
      /* harmony import */


      var _internal_observable_bindCallback__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(
      /*! ./internal/observable/bindCallback */
      "QqCr");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "bindCallback", function () {
        return _internal_observable_bindCallback__WEBPACK_IMPORTED_MODULE_26__["bindCallback"];
      });
      /* harmony import */


      var _internal_observable_bindNodeCallback__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(
      /*! ./internal/observable/bindNodeCallback */
      "4O5X");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "bindNodeCallback", function () {
        return _internal_observable_bindNodeCallback__WEBPACK_IMPORTED_MODULE_27__["bindNodeCallback"];
      });
      /* harmony import */


      var _internal_observable_combineLatest__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(
      /*! ./internal/observable/combineLatest */
      "itXk");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "combineLatest", function () {
        return _internal_observable_combineLatest__WEBPACK_IMPORTED_MODULE_28__["combineLatest"];
      });
      /* harmony import */


      var _internal_observable_concat__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(
      /*! ./internal/observable/concat */
      "GyhO");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "concat", function () {
        return _internal_observable_concat__WEBPACK_IMPORTED_MODULE_29__["concat"];
      });
      /* harmony import */


      var _internal_observable_defer__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(
      /*! ./internal/observable/defer */
      "NXyV");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "defer", function () {
        return _internal_observable_defer__WEBPACK_IMPORTED_MODULE_30__["defer"];
      });
      /* harmony import */


      var _internal_observable_empty__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(
      /*! ./internal/observable/empty */
      "EY2u");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "empty", function () {
        return _internal_observable_empty__WEBPACK_IMPORTED_MODULE_31__["empty"];
      });
      /* harmony import */


      var _internal_observable_forkJoin__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(
      /*! ./internal/observable/forkJoin */
      "cp0P");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "forkJoin", function () {
        return _internal_observable_forkJoin__WEBPACK_IMPORTED_MODULE_32__["forkJoin"];
      });
      /* harmony import */


      var _internal_observable_from__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(
      /*! ./internal/observable/from */
      "Cfvw");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "from", function () {
        return _internal_observable_from__WEBPACK_IMPORTED_MODULE_33__["from"];
      });
      /* harmony import */


      var _internal_observable_fromEvent__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(
      /*! ./internal/observable/fromEvent */
      "xgIS");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "fromEvent", function () {
        return _internal_observable_fromEvent__WEBPACK_IMPORTED_MODULE_34__["fromEvent"];
      });
      /* harmony import */


      var _internal_observable_fromEventPattern__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(
      /*! ./internal/observable/fromEventPattern */
      "04ZW");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "fromEventPattern", function () {
        return _internal_observable_fromEventPattern__WEBPACK_IMPORTED_MODULE_35__["fromEventPattern"];
      });
      /* harmony import */


      var _internal_observable_generate__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(
      /*! ./internal/observable/generate */
      "WPMC");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "generate", function () {
        return _internal_observable_generate__WEBPACK_IMPORTED_MODULE_36__["generate"];
      });
      /* harmony import */


      var _internal_observable_iif__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(
      /*! ./internal/observable/iif */
      "r0o6");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "iif", function () {
        return _internal_observable_iif__WEBPACK_IMPORTED_MODULE_37__["iif"];
      });
      /* harmony import */


      var _internal_observable_interval__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(
      /*! ./internal/observable/interval */
      "l5mm");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "interval", function () {
        return _internal_observable_interval__WEBPACK_IMPORTED_MODULE_38__["interval"];
      });
      /* harmony import */


      var _internal_observable_merge__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(
      /*! ./internal/observable/merge */
      "VRyK");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "merge", function () {
        return _internal_observable_merge__WEBPACK_IMPORTED_MODULE_39__["merge"];
      });
      /* harmony import */


      var _internal_observable_never__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(
      /*! ./internal/observable/never */
      "5yfJ");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "never", function () {
        return _internal_observable_never__WEBPACK_IMPORTED_MODULE_40__["never"];
      });
      /* harmony import */


      var _internal_observable_of__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(
      /*! ./internal/observable/of */
      "LRne");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "of", function () {
        return _internal_observable_of__WEBPACK_IMPORTED_MODULE_41__["of"];
      });
      /* harmony import */


      var _internal_observable_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(
      /*! ./internal/observable/onErrorResumeNext */
      "Hkhx");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "onErrorResumeNext", function () {
        return _internal_observable_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_42__["onErrorResumeNext"];
      });
      /* harmony import */


      var _internal_observable_pairs__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(
      /*! ./internal/observable/pairs */
      "hKy8");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "pairs", function () {
        return _internal_observable_pairs__WEBPACK_IMPORTED_MODULE_43__["pairs"];
      });
      /* harmony import */


      var _internal_observable_partition__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(
      /*! ./internal/observable/partition */
      "2QGa");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "partition", function () {
        return _internal_observable_partition__WEBPACK_IMPORTED_MODULE_44__["partition"];
      });
      /* harmony import */


      var _internal_observable_race__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(
      /*! ./internal/observable/race */
      "Nv8m");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "race", function () {
        return _internal_observable_race__WEBPACK_IMPORTED_MODULE_45__["race"];
      });
      /* harmony import */


      var _internal_observable_range__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(
      /*! ./internal/observable/range */
      "NNCq");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "range", function () {
        return _internal_observable_range__WEBPACK_IMPORTED_MODULE_46__["range"];
      });
      /* harmony import */


      var _internal_observable_throwError__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(
      /*! ./internal/observable/throwError */
      "z6cu");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "throwError", function () {
        return _internal_observable_throwError__WEBPACK_IMPORTED_MODULE_47__["throwError"];
      });
      /* harmony import */


      var _internal_observable_timer__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(
      /*! ./internal/observable/timer */
      "PqYM");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "timer", function () {
        return _internal_observable_timer__WEBPACK_IMPORTED_MODULE_48__["timer"];
      });
      /* harmony import */


      var _internal_observable_using__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(
      /*! ./internal/observable/using */
      "Qn8I");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "using", function () {
        return _internal_observable_using__WEBPACK_IMPORTED_MODULE_49__["using"];
      });
      /* harmony import */


      var _internal_observable_zip__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(
      /*! ./internal/observable/zip */
      "1uah");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "zip", function () {
        return _internal_observable_zip__WEBPACK_IMPORTED_MODULE_50__["zip"];
      });
      /* harmony import */


      var _internal_scheduled_scheduled__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(
      /*! ./internal/scheduled/scheduled */
      "7HRe");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "scheduled", function () {
        return _internal_scheduled_scheduled__WEBPACK_IMPORTED_MODULE_51__["scheduled"];
      });
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "EMPTY", function () {
        return _internal_observable_empty__WEBPACK_IMPORTED_MODULE_31__["EMPTY"];
      });
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "NEVER", function () {
        return _internal_observable_never__WEBPACK_IMPORTED_MODULE_40__["NEVER"];
      });
      /* harmony import */


      var _internal_config__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(
      /*! ./internal/config */
      "2fFW");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "config", function () {
        return _internal_config__WEBPACK_IMPORTED_MODULE_52__["config"];
      }); //# sourceMappingURL=index.js.map

      /***/

    },

    /***/
    "qFsG":
    /*!***********************************************************************!*\
      !*** ./node_modules/@angular/material/__ivy_ngcc__/fesm2015/input.js ***!
      \***********************************************************************/

    /*! exports provided: MAT_INPUT_VALUE_ACCESSOR, MatInput, MatInputModule, MatTextareaAutosize, getMatInputUnsupportedTypeError */

    /***/
    function qFsG(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_INPUT_VALUE_ACCESSOR", function () {
        return MAT_INPUT_VALUE_ACCESSOR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatInput", function () {
        return MatInput;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatInputModule", function () {
        return MatInputModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatTextareaAutosize", function () {
        return MatTextareaAutosize;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getMatInputUnsupportedTypeError", function () {
        return getMatInputUnsupportedTypeError;
      });
      /* harmony import */


      var _angular_cdk_text_field__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/cdk/text-field */
      "ihCf");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");
      /* harmony import */


      var _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/cdk/platform */
      "nLfN");
      /* harmony import */


      var _angular_forms__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/forms */
      "3Pt+");
      /* harmony import */


      var _angular_material_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @angular/material/core */
      "FKr1");
      /* harmony import */


      var _angular_material_form_field__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! @angular/material/form-field */
      "kmnG");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Directive to automatically resize a textarea to fit its content.
       * @deprecated Use `cdkTextareaAutosize` from `@angular/cdk/text-field` instead.
       * @breaking-change 8.0.0
       */


      var MatTextareaAutosize = /*#__PURE__*/function (_angular_cdk_text_fie) {
        _inherits2(MatTextareaAutosize, _angular_cdk_text_fie);

        var _super357 = _createSuper(MatTextareaAutosize);

        function MatTextareaAutosize() {
          _classCallCheck2(this, MatTextareaAutosize);

          return _super357.apply(this, arguments);
        }

        _createClass2(MatTextareaAutosize, [{
          key: "matAutosizeMinRows",
          get: function get() {
            return this.minRows;
          },
          set: function set(value) {
            this.minRows = value;
          }
        }, {
          key: "matAutosizeMaxRows",
          get: function get() {
            return this.maxRows;
          },
          set: function set(value) {
            this.maxRows = value;
          }
        }, {
          key: "matAutosize",
          get: function get() {
            return this.enabled;
          },
          set: function set(value) {
            this.enabled = value;
          }
        }, {
          key: "matTextareaAutosize",
          get: function get() {
            return this.enabled;
          },
          set: function set(value) {
            this.enabled = value;
          }
        }]);

        return MatTextareaAutosize;
      }(_angular_cdk_text_field__WEBPACK_IMPORTED_MODULE_0__["CdkTextareaAutosize"]);

      MatTextareaAutosize.ɵfac = function MatTextareaAutosize_Factory(t) {
        return ɵMatTextareaAutosize_BaseFactory(t || MatTextareaAutosize);
      };

      MatTextareaAutosize.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({
        type: MatTextareaAutosize,
        selectors: [["textarea", "mat-autosize", ""], ["textarea", "matTextareaAutosize", ""]],
        hostAttrs: ["rows", "1", 1, "cdk-textarea-autosize", "mat-autosize"],
        inputs: {
          cdkAutosizeMinRows: "cdkAutosizeMinRows",
          cdkAutosizeMaxRows: "cdkAutosizeMaxRows",
          matAutosizeMinRows: "matAutosizeMinRows",
          matAutosizeMaxRows: "matAutosizeMaxRows",
          matAutosize: ["mat-autosize", "matAutosize"],
          matTextareaAutosize: "matTextareaAutosize"
        },
        exportAs: ["matTextareaAutosize"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"]]
      });
      MatTextareaAutosize.propDecorators = {
        matAutosizeMinRows: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        matAutosizeMaxRows: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        matAutosize: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['mat-autosize']
        }],
        matTextareaAutosize: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }]
      };

      var ɵMatTextareaAutosize_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetInheritedFactory"](MatTextareaAutosize);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](MatTextareaAutosize, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
          args: [{
            selector: 'textarea[mat-autosize], textarea[matTextareaAutosize]',
            exportAs: 'matTextareaAutosize',
            inputs: ['cdkAutosizeMinRows', 'cdkAutosizeMaxRows'],
            host: {
              'class': 'cdk-textarea-autosize mat-autosize',
              // Textarea elements that have the directive applied should have a single row by default.
              // Browsers normally show two rows by default and therefore this limits the minRows binding.
              'rows': '1'
            }
          }]
        }], null, {
          matAutosizeMinRows: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          matAutosizeMaxRows: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          matAutosize: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['mat-autosize']
          }],
          matTextareaAutosize: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** @docs-private */


      function getMatInputUnsupportedTypeError(type) {
        return Error("Input type \"".concat(type, "\" isn't supported by matInput."));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * This token is used to inject the object whose value should be set into `MatInput`. If none is
       * provided, the native `HTMLInputElement` is used. Directives like `MatDatepickerInput` can provide
       * themselves for this token, in order to make `MatInput` delegate the getting and setting of the
       * value to them.
       */


      var MAT_INPUT_VALUE_ACCESSOR = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('MAT_INPUT_VALUE_ACCESSOR');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // Invalid input type. Using one of these will throw an MatInputUnsupportedTypeError.

      var MAT_INPUT_INVALID_TYPES = ['button', 'checkbox', 'file', 'hidden', 'image', 'radio', 'range', 'reset', 'submit'];
      var nextUniqueId = 0; // Boilerplate for applying mixins to MatInput.

      /** @docs-private */

      var MatInputBase = function MatInputBase(_defaultErrorStateMatcher, _parentForm, _parentFormGroup,
      /** @docs-private */
      ngControl) {
        _classCallCheck2(this, MatInputBase);

        this._defaultErrorStateMatcher = _defaultErrorStateMatcher;
        this._parentForm = _parentForm;
        this._parentFormGroup = _parentFormGroup;
        this.ngControl = ngControl;
      };

      var _MatInputMixinBase = Object(_angular_material_core__WEBPACK_IMPORTED_MODULE_5__["mixinErrorState"])(MatInputBase);
      /** Directive that allows a native input to work inside a `MatFormField`. */


      var MatInput = /*#__PURE__*/function (_MatInputMixinBase2) {
        _inherits2(MatInput, _MatInputMixinBase2);

        var _super358 = _createSuper(MatInput);

        function MatInput(_elementRef, _platform,
        /** @docs-private */
        ngControl, _parentForm, _parentFormGroup, _defaultErrorStateMatcher, inputValueAccessor, _autofillMonitor, ngZone, // TODO: Remove this once the legacy appearance has been removed. We only need
        // to inject the form-field for determining whether the placeholder has been promoted.
        _formField) {
          var _this839;

          _classCallCheck2(this, MatInput);

          _this839 = _super358.call(this, _defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);
          _this839._elementRef = _elementRef;
          _this839._platform = _platform;
          _this839.ngControl = ngControl;
          _this839._autofillMonitor = _autofillMonitor;
          _this839._formField = _formField;
          _this839._uid = "mat-input-".concat(nextUniqueId++);
          /**
           * Implemented as part of MatFormFieldControl.
           * @docs-private
           */

          _this839.focused = false;
          /**
           * Implemented as part of MatFormFieldControl.
           * @docs-private
           */

          _this839.stateChanges = new rxjs__WEBPACK_IMPORTED_MODULE_7__["Subject"]();
          /**
           * Implemented as part of MatFormFieldControl.
           * @docs-private
           */

          _this839.controlType = 'mat-input';
          /**
           * Implemented as part of MatFormFieldControl.
           * @docs-private
           */

          _this839.autofilled = false;
          _this839._disabled = false;
          _this839._required = false;
          _this839._type = 'text';
          _this839._readonly = false;
          _this839._neverEmptyInputTypes = ['date', 'datetime', 'datetime-local', 'month', 'time', 'week'].filter(function (t) {
            return Object(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_3__["getSupportedInputTypes"])().has(t);
          });
          var element = _this839._elementRef.nativeElement;
          var nodeName = element.nodeName.toLowerCase(); // If no input value accessor was explicitly specified, use the element as the input value
          // accessor.

          _this839._inputValueAccessor = inputValueAccessor || element;
          _this839._previousNativeValue = _this839.value; // Force setter to be called in case id was not specified.

          _this839.id = _this839.id; // On some versions of iOS the caret gets stuck in the wrong place when holding down the delete
          // key. In order to get around this we need to "jiggle" the caret loose. Since this bug only
          // exists on iOS, we only bother to install the listener on iOS.

          if (_platform.IOS) {
            ngZone.runOutsideAngular(function () {
              _elementRef.nativeElement.addEventListener('keyup', function (event) {
                var el = event.target;

                if (!el.value && !el.selectionStart && !el.selectionEnd) {
                  // Note: Just setting `0, 0` doesn't fix the issue. Setting
                  // `1, 1` fixes it for the first time that you type text and
                  // then hold delete. Toggling to `1, 1` and then back to
                  // `0, 0` seems to completely fix it.
                  el.setSelectionRange(1, 1);
                  el.setSelectionRange(0, 0);
                }
              });
            });
          }

          _this839._isServer = !_this839._platform.isBrowser;
          _this839._isNativeSelect = nodeName === 'select';
          _this839._isTextarea = nodeName === 'textarea';

          if (_this839._isNativeSelect) {
            _this839.controlType = element.multiple ? 'mat-native-select-multiple' : 'mat-native-select';
          }

          return _this839;
        }
        /**
         * Implemented as part of MatFormFieldControl.
         * @docs-private
         */


        _createClass2(MatInput, [{
          key: "disabled",
          get: function get() {
            if (this.ngControl && this.ngControl.disabled !== null) {
              return this.ngControl.disabled;
            }

            return this._disabled;
          },
          set: function set(value) {
            this._disabled = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceBooleanProperty"])(value); // Browsers may not fire the blur event if the input is disabled too quickly.
            // Reset from here to ensure that the element doesn't become stuck.

            if (this.focused) {
              this.focused = false;
              this.stateChanges.next();
            }
          }
          /**
           * Implemented as part of MatFormFieldControl.
           * @docs-private
           */

        }, {
          key: "id",
          get: function get() {
            return this._id;
          },
          set: function set(value) {
            this._id = value || this._uid;
          }
          /**
           * Implemented as part of MatFormFieldControl.
           * @docs-private
           */

        }, {
          key: "required",
          get: function get() {
            return this._required;
          },
          set: function set(value) {
            this._required = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceBooleanProperty"])(value);
          }
          /** Input type of the element. */

        }, {
          key: "type",
          get: function get() {
            return this._type;
          },
          set: function set(value) {
            this._type = value || 'text';

            this._validateType(); // When using Angular inputs, developers are no longer able to set the properties on the native
            // input element. To ensure that bindings for `type` work, we need to sync the setter
            // with the native property. Textarea elements don't support the type property or attribute.


            if (!this._isTextarea && Object(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_3__["getSupportedInputTypes"])().has(this._type)) {
              this._elementRef.nativeElement.type = this._type;
            }
          }
          /**
           * Implemented as part of MatFormFieldControl.
           * @docs-private
           */

        }, {
          key: "value",
          get: function get() {
            return this._inputValueAccessor.value;
          },
          set: function set(value) {
            if (value !== this.value) {
              this._inputValueAccessor.value = value;
              this.stateChanges.next();
            }
          }
          /** Whether the element is readonly. */

        }, {
          key: "readonly",
          get: function get() {
            return this._readonly;
          },
          set: function set(value) {
            this._readonly = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_2__["coerceBooleanProperty"])(value);
          }
        }, {
          key: "ngAfterViewInit",
          value: function ngAfterViewInit() {
            var _this840 = this;

            if (this._platform.isBrowser) {
              this._autofillMonitor.monitor(this._elementRef.nativeElement).subscribe(function (event) {
                _this840.autofilled = event.isAutofilled;

                _this840.stateChanges.next();
              });
            }
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges() {
            this.stateChanges.next();
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.stateChanges.complete();

            if (this._platform.isBrowser) {
              this._autofillMonitor.stopMonitoring(this._elementRef.nativeElement);
            }
          }
        }, {
          key: "ngDoCheck",
          value: function ngDoCheck() {
            if (this.ngControl) {
              // We need to re-evaluate this on every change detection cycle, because there are some
              // error triggers that we can't subscribe to (e.g. parent form submissions). This means
              // that whatever logic is in here has to be super lean or we risk destroying the performance.
              this.updateErrorState();
            } // We need to dirty-check the native element's value, because there are some cases where
            // we won't be notified when it changes (e.g. the consumer isn't using forms or they're
            // updating the value using `emitEvent: false`).


            this._dirtyCheckNativeValue(); // We need to dirty-check and set the placeholder attribute ourselves, because whether it's
            // present or not depends on a query which is prone to "changed after checked" errors.


            this._dirtyCheckPlaceholder();
          }
          /** Focuses the input. */

        }, {
          key: "focus",
          value: function focus(options) {
            this._elementRef.nativeElement.focus(options);
          } // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.
          // In Ivy the `host` bindings will be merged when this class is extended, whereas in
          // ViewEngine they're overwritten.
          // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.

          /** Callback for the cases where the focused state of the input changes. */
          // tslint:disable:no-host-decorator-in-concrete
          // tslint:enable:no-host-decorator-in-concrete

        }, {
          key: "_focusChanged",
          value: function _focusChanged(isFocused) {
            if (isFocused !== this.focused && (!this.readonly || !isFocused)) {
              this.focused = isFocused;
              this.stateChanges.next();
            }
          } // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.
          // In Ivy the `host` bindings will be merged when this class is extended, whereas in
          // ViewEngine they're overwritten.
          // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.
          // tslint:disable-next-line:no-host-decorator-in-concrete

        }, {
          key: "_onInput",
          value: function _onInput() {// This is a noop function and is used to let Angular know whenever the value changes.
            // Angular will run a new change detection each time the `input` event has been dispatched.
            // It's necessary that Angular recognizes the value change, because when floatingLabel
            // is set to false and Angular forms aren't used, the placeholder won't recognize the
            // value changes and will not disappear.
            // Listening to the input event wouldn't be necessary when the input is using the
            // FormsModule or ReactiveFormsModule, because Angular forms also listens to input events.
          }
          /** Does some manual dirty checking on the native input `placeholder` attribute. */

        }, {
          key: "_dirtyCheckPlaceholder",
          value: function _dirtyCheckPlaceholder() {
            var _a, _b; // If we're hiding the native placeholder, it should also be cleared from the DOM, otherwise
            // screen readers will read it out twice: once from the label and once from the attribute.
            // TODO: can be removed once we get rid of the `legacy` style for the form field, because it's
            // the only one that supports promoting the placeholder to a label.


            var placeholder = ((_b = (_a = this._formField) === null || _a === void 0 ? void 0 : _a._hideControlPlaceholder) === null || _b === void 0 ? void 0 : _b.call(_a)) ? null : this.placeholder;

            if (placeholder !== this._previousPlaceholder) {
              var element = this._elementRef.nativeElement;
              this._previousPlaceholder = placeholder;
              placeholder ? element.setAttribute('placeholder', placeholder) : element.removeAttribute('placeholder');
            }
          }
          /** Does some manual dirty checking on the native input `value` property. */

        }, {
          key: "_dirtyCheckNativeValue",
          value: function _dirtyCheckNativeValue() {
            var newValue = this._elementRef.nativeElement.value;

            if (this._previousNativeValue !== newValue) {
              this._previousNativeValue = newValue;
              this.stateChanges.next();
            }
          }
          /** Make sure the input is a supported type. */

        }, {
          key: "_validateType",
          value: function _validateType() {
            if (MAT_INPUT_INVALID_TYPES.indexOf(this._type) > -1 && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw getMatInputUnsupportedTypeError(this._type);
            }
          }
          /** Checks whether the input type is one of the types that are never empty. */

        }, {
          key: "_isNeverEmpty",
          value: function _isNeverEmpty() {
            return this._neverEmptyInputTypes.indexOf(this._type) > -1;
          }
          /** Checks whether the input is invalid based on the native validation. */

        }, {
          key: "_isBadInput",
          value: function _isBadInput() {
            // The `validity` property won't be present on platform-server.
            var validity = this._elementRef.nativeElement.validity;
            return validity && validity.badInput;
          }
          /**
           * Implemented as part of MatFormFieldControl.
           * @docs-private
           */

        }, {
          key: "empty",
          get: function get() {
            return !this._isNeverEmpty() && !this._elementRef.nativeElement.value && !this._isBadInput() && !this.autofilled;
          }
          /**
           * Implemented as part of MatFormFieldControl.
           * @docs-private
           */

        }, {
          key: "shouldLabelFloat",
          get: function get() {
            if (this._isNativeSelect) {
              // For a single-selection `<select>`, the label should float when the selected option has
              // a non-empty display value. For a `<select multiple>`, the label *always* floats to avoid
              // overlapping the label with the options.
              var selectElement = this._elementRef.nativeElement;
              var firstOption = selectElement.options[0]; // On most browsers the `selectedIndex` will always be 0, however on IE and Edge it'll be
              // -1 if the `value` is set to something, that isn't in the list of options, at a later point.

              return this.focused || selectElement.multiple || !this.empty || !!(selectElement.selectedIndex > -1 && firstOption && firstOption.label);
            } else {
              return this.focused || !this.empty;
            }
          }
          /**
           * Implemented as part of MatFormFieldControl.
           * @docs-private
           */

        }, {
          key: "setDescribedByIds",
          value: function setDescribedByIds(ids) {
            if (ids.length) {
              this._elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));
            } else {
              this._elementRef.nativeElement.removeAttribute('aria-describedby');
            }
          }
          /**
           * Implemented as part of MatFormFieldControl.
           * @docs-private
           */

        }, {
          key: "onContainerClick",
          value: function onContainerClick() {
            // Do not re-focus the input element if the element is already focused. Otherwise it can happen
            // that someone clicks on a time input and the cursor resets to the "hours" field while the
            // "minutes" field was actually clicked. See: https://github.com/angular/components/issues/12849
            if (!this.focused) {
              this.focus();
            }
          }
        }]);

        return MatInput;
      }(_MatInputMixinBase);

      MatInput.ɵfac = function MatInput_Factory(t) {
        return new (t || MatInput)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_3__["Platform"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_forms__WEBPACK_IMPORTED_MODULE_4__["NgControl"], 10), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_forms__WEBPACK_IMPORTED_MODULE_4__["NgForm"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_forms__WEBPACK_IMPORTED_MODULE_4__["FormGroupDirective"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_material_core__WEBPACK_IMPORTED_MODULE_5__["ErrorStateMatcher"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](MAT_INPUT_VALUE_ACCESSOR, 10), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_cdk_text_field__WEBPACK_IMPORTED_MODULE_0__["AutofillMonitor"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_material_form_field__WEBPACK_IMPORTED_MODULE_6__["MAT_FORM_FIELD"], 8));
      };

      MatInput.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({
        type: MatInput,
        selectors: [["input", "matInput", ""], ["textarea", "matInput", ""], ["select", "matNativeControl", ""], ["input", "matNativeControl", ""], ["textarea", "matNativeControl", ""]],
        hostAttrs: [1, "mat-input-element", "mat-form-field-autofill-control"],
        hostVars: 9,
        hostBindings: function MatInput_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("focus", function MatInput_focus_HostBindingHandler() {
              return ctx._focusChanged(true);
            })("blur", function MatInput_blur_HostBindingHandler() {
              return ctx._focusChanged(false);
            })("input", function MatInput_input_HostBindingHandler() {
              return ctx._onInput();
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵhostProperty"]("disabled", ctx.disabled)("required", ctx.required);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵattribute"]("id", ctx.id)("data-placeholder", ctx.placeholder)("readonly", ctx.readonly && !ctx._isNativeSelect || null)("aria-invalid", ctx.errorState && !ctx.empty)("aria-required", ctx.required);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassProp"]("mat-input-server", ctx._isServer);
          }
        },
        inputs: {
          id: "id",
          disabled: "disabled",
          required: "required",
          type: "type",
          value: "value",
          readonly: "readonly",
          placeholder: "placeholder",
          errorStateMatcher: "errorStateMatcher",
          userAriaDescribedBy: ["aria-describedby", "userAriaDescribedBy"]
        },
        exportAs: ["matInput"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵProvidersFeature"]([{
          provide: _angular_material_form_field__WEBPACK_IMPORTED_MODULE_6__["MatFormFieldControl"],
          useExisting: MatInput
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵNgOnChangesFeature"]]
      });

      MatInput.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
        }, {
          type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_3__["Platform"]
        }, {
          type: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NgControl"],
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Self"]
          }]
        }, {
          type: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NgForm"],
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }]
        }, {
          type: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["FormGroupDirective"],
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }]
        }, {
          type: _angular_material_core__WEBPACK_IMPORTED_MODULE_5__["ErrorStateMatcher"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Self"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [MAT_INPUT_VALUE_ACCESSOR]
          }]
        }, {
          type: _angular_cdk_text_field__WEBPACK_IMPORTED_MODULE_0__["AutofillMonitor"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        }, {
          type: _angular_material_form_field__WEBPACK_IMPORTED_MODULE_6__["MatFormField"],
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_material_form_field__WEBPACK_IMPORTED_MODULE_6__["MAT_FORM_FIELD"]]
          }]
        }];
      };

      MatInput.propDecorators = {
        disabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        id: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        placeholder: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        required: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        type: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        errorStateMatcher: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        userAriaDescribedBy: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['aria-describedby']
        }],
        value: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        readonly: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        _focusChanged: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"],
          args: ['focus', ['true']]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"],
          args: ['blur', ['false']]
        }],
        _onInput: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"],
          args: ['input']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](MatInput, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
          args: [{
            selector: "input[matInput], textarea[matInput], select[matNativeControl],\n      input[matNativeControl], textarea[matNativeControl]",
            exportAs: 'matInput',
            host: {
              /**
               * @breaking-change 8.0.0 remove .mat-form-field-autofill-control in favor of AutofillMonitor.
               */
              'class': 'mat-input-element mat-form-field-autofill-control',
              '[class.mat-input-server]': '_isServer',
              // Native input properties that are overwritten by Angular inputs need to be synced with
              // the native input element. Otherwise property bindings for those don't work.
              '[attr.id]': 'id',
              // At the time of writing, we have a lot of customer tests that look up the input based on its
              // placeholder. Since we sometimes omit the placeholder attribute from the DOM to prevent screen
              // readers from reading it twice, we have to keep it somewhere in the DOM for the lookup.
              '[attr.data-placeholder]': 'placeholder',
              '[disabled]': 'disabled',
              '[required]': 'required',
              '[attr.readonly]': 'readonly && !_isNativeSelect || null',
              // Only mark the input as invalid for assistive technology if it has a value since the
              // state usually overlaps with `aria-required` when the input is empty and can be redundant.
              '[attr.aria-invalid]': 'errorState && !empty',
              '[attr.aria-required]': 'required'
            },
            providers: [{
              provide: _angular_material_form_field__WEBPACK_IMPORTED_MODULE_6__["MatFormFieldControl"],
              useExisting: MatInput
            }]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
          }, {
            type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_3__["Platform"]
          }, {
            type: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NgControl"],
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Self"]
            }]
          }, {
            type: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["NgForm"],
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }]
          }, {
            type: _angular_forms__WEBPACK_IMPORTED_MODULE_4__["FormGroupDirective"],
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }]
          }, {
            type: _angular_material_core__WEBPACK_IMPORTED_MODULE_5__["ErrorStateMatcher"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Self"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [MAT_INPUT_VALUE_ACCESSOR]
            }]
          }, {
            type: _angular_cdk_text_field__WEBPACK_IMPORTED_MODULE_0__["AutofillMonitor"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
          }, {
            type: _angular_material_form_field__WEBPACK_IMPORTED_MODULE_6__["MatFormField"],
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_material_form_field__WEBPACK_IMPORTED_MODULE_6__["MAT_FORM_FIELD"]]
            }]
          }];
        }, {
          id: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          disabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          required: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          type: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          value: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          readonly: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.
          // In Ivy the `host` bindings will be merged when this class is extended, whereas in
          // ViewEngine they're overwritten.
          // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.

          /** Callback for the cases where the focused state of the input changes. */
          // tslint:disable:no-host-decorator-in-concrete
          // tslint:enable:no-host-decorator-in-concrete
          _focusChanged: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"],
            args: ['focus', ['true']]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"],
            args: ['blur', ['false']]
          }],
          // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.
          // In Ivy the `host` bindings will be merged when this class is extended, whereas in
          // ViewEngine they're overwritten.
          // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.
          // tslint:disable-next-line:no-host-decorator-in-concrete
          _onInput: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"],
            args: ['input']
          }],
          placeholder: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          errorStateMatcher: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          userAriaDescribedBy: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['aria-describedby']
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var MatInputModule = function MatInputModule() {
        _classCallCheck2(this, MatInputModule);
      };

      MatInputModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({
        type: MatInputModule
      });
      MatInputModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({
        factory: function MatInputModule_Factory(t) {
          return new (t || MatInputModule)();
        },
        providers: [_angular_material_core__WEBPACK_IMPORTED_MODULE_5__["ErrorStateMatcher"]],
        imports: [[_angular_cdk_text_field__WEBPACK_IMPORTED_MODULE_0__["TextFieldModule"], _angular_material_form_field__WEBPACK_IMPORTED_MODULE_6__["MatFormFieldModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_5__["MatCommonModule"]], _angular_cdk_text_field__WEBPACK_IMPORTED_MODULE_0__["TextFieldModule"], // We re-export the `MatFormFieldModule` since `MatInput` will almost always
        // be used together with `MatFormField`.
        _angular_material_form_field__WEBPACK_IMPORTED_MODULE_6__["MatFormFieldModule"]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](MatInputModule, {
          declarations: function declarations() {
            return [MatInput, MatTextareaAutosize];
          },
          imports: function imports() {
            return [_angular_cdk_text_field__WEBPACK_IMPORTED_MODULE_0__["TextFieldModule"], _angular_material_form_field__WEBPACK_IMPORTED_MODULE_6__["MatFormFieldModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_5__["MatCommonModule"]];
          },
          exports: function exports() {
            return [_angular_cdk_text_field__WEBPACK_IMPORTED_MODULE_0__["TextFieldModule"], // We re-export the `MatFormFieldModule` since `MatInput` will almost always
            // be used together with `MatFormField`.
            _angular_material_form_field__WEBPACK_IMPORTED_MODULE_6__["MatFormFieldModule"], MatInput, MatTextareaAutosize];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](MatInputModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
          args: [{
            declarations: [MatInput, MatTextareaAutosize],
            imports: [_angular_cdk_text_field__WEBPACK_IMPORTED_MODULE_0__["TextFieldModule"], _angular_material_form_field__WEBPACK_IMPORTED_MODULE_6__["MatFormFieldModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_5__["MatCommonModule"]],
            exports: [_angular_cdk_text_field__WEBPACK_IMPORTED_MODULE_0__["TextFieldModule"], // We re-export the `MatFormFieldModule` since `MatInput` will almost always
            // be used together with `MatFormField`.
            _angular_material_form_field__WEBPACK_IMPORTED_MODULE_6__["MatFormFieldModule"], MatInput, MatTextareaAutosize],
            providers: [_angular_material_core__WEBPACK_IMPORTED_MODULE_5__["ErrorStateMatcher"]]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=input.js.map

      /***/

    },

    /***/
    "qOnz":
    /*!*******************************************************!*\
      !*** ./node_modules/@firebase/util/dist/index.esm.js ***!
      \*******************************************************/

    /*! exports provided: CONSTANTS, Deferred, ErrorFactory, FirebaseError, MAX_VALUE_MILLIS, RANDOM_FACTOR, Sha1, areCookiesEnabled, assert, assertionError, async, base64, base64Decode, base64Encode, calculateBackoffMillis, contains, createMockUserToken, createSubscribe, decode, deepCopy, deepExtend, errorPrefix, extractQuerystring, getGlobal, getModularInstance, getUA, isAdmin, isBrowser, isBrowserExtension, isElectron, isEmpty, isIE, isIndexedDBAvailable, isMobileCordova, isNode, isNodeSdk, isReactNative, isSafari, isUWP, isValidFormat, isValidTimestamp, issuedAtTime, jsonEval, map, ordinal, querystring, querystringDecode, safeGet, stringLength, stringToByteArray, stringify, validateArgCount, validateCallback, validateContextObject, validateIndexedDBOpenable, validateNamespace */

    /***/
    function qOnz(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CONSTANTS", function () {
        return CONSTANTS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Deferred", function () {
        return Deferred;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ErrorFactory", function () {
        return ErrorFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FirebaseError", function () {
        return FirebaseError;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAX_VALUE_MILLIS", function () {
        return MAX_VALUE_MILLIS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RANDOM_FACTOR", function () {
        return RANDOM_FACTOR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Sha1", function () {
        return Sha1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "areCookiesEnabled", function () {
        return areCookiesEnabled;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "assert", function () {
        return assert;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "assertionError", function () {
        return assertionError;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "async", function () {
        return async;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "base64", function () {
        return base64;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "base64Decode", function () {
        return base64Decode;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "base64Encode", function () {
        return base64Encode;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "calculateBackoffMillis", function () {
        return calculateBackoffMillis;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "contains", function () {
        return contains;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "createMockUserToken", function () {
        return createMockUserToken;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "createSubscribe", function () {
        return createSubscribe;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "decode", function () {
        return decode;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "deepCopy", function () {
        return deepCopy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "deepExtend", function () {
        return deepExtend;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "errorPrefix", function () {
        return errorPrefix;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "extractQuerystring", function () {
        return extractQuerystring;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getGlobal", function () {
        return getGlobal;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getModularInstance", function () {
        return getModularInstance;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "getUA", function () {
        return getUA;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isAdmin", function () {
        return isAdmin;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isBrowser", function () {
        return isBrowser;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isBrowserExtension", function () {
        return isBrowserExtension;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isElectron", function () {
        return isElectron;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isEmpty", function () {
        return isEmpty;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isIE", function () {
        return isIE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isIndexedDBAvailable", function () {
        return isIndexedDBAvailable;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isMobileCordova", function () {
        return isMobileCordova;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isNode", function () {
        return isNode;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isNodeSdk", function () {
        return isNodeSdk;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isReactNative", function () {
        return isReactNative;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isSafari", function () {
        return isSafari;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isUWP", function () {
        return isUWP;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isValidFormat", function () {
        return isValidFormat;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isValidTimestamp", function () {
        return isValidTimestamp;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "issuedAtTime", function () {
        return issuedAtTime;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "jsonEval", function () {
        return jsonEval;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "map", function () {
        return map;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ordinal", function () {
        return ordinal;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "querystring", function () {
        return querystring;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "querystringDecode", function () {
        return querystringDecode;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "safeGet", function () {
        return safeGet;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "stringLength", function () {
        return stringLength;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "stringToByteArray", function () {
        return stringToByteArray$1;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "stringify", function () {
        return stringify;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "validateArgCount", function () {
        return validateArgCount;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "validateCallback", function () {
        return validateCallback;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "validateContextObject", function () {
        return validateContextObject;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "validateIndexedDBOpenable", function () {
        return validateIndexedDBOpenable;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "validateNamespace", function () {
        return validateNamespace;
      });
      /* harmony import */


      var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! tslib */
      "Tr+X");
      /**
       * @license
       * Copyright 2017 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */

      /**
       * @fileoverview Firebase constants.  Some of these (@defines) can be overridden at compile-time.
       */


      var CONSTANTS = {
        /**
         * @define {boolean} Whether this is the client Node.js SDK.
         */
        NODE_CLIENT: false,

        /**
         * @define {boolean} Whether this is the Admin Node.js SDK.
         */
        NODE_ADMIN: false,

        /**
         * Firebase SDK Version
         */
        SDK_VERSION: '${JSCORE_VERSION}'
      };
      /**
       * @license
       * Copyright 2017 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */

      /**
       * Throws an error if the provided assertion is falsy
       */

      var assert = function assert(assertion, message) {
        if (!assertion) {
          throw assertionError(message);
        }
      };
      /**
       * Returns an Error object suitable for throwing.
       */


      var assertionError = function assertionError(message) {
        return new Error('Firebase Database (' + CONSTANTS.SDK_VERSION + ') INTERNAL ASSERT FAILED: ' + message);
      };
      /**
       * @license
       * Copyright 2017 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */


      var stringToByteArray = function stringToByteArray(str) {
        // TODO(user): Use native implementations if/when available
        var out = [];
        var p = 0;

        for (var i = 0; i < str.length; i++) {
          var c = str.charCodeAt(i);

          if (c < 128) {
            out[p++] = c;
          } else if (c < 2048) {
            out[p++] = c >> 6 | 192;
            out[p++] = c & 63 | 128;
          } else if ((c & 0xfc00) === 0xd800 && i + 1 < str.length && (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {
            // Surrogate Pair
            c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);
            out[p++] = c >> 18 | 240;
            out[p++] = c >> 12 & 63 | 128;
            out[p++] = c >> 6 & 63 | 128;
            out[p++] = c & 63 | 128;
          } else {
            out[p++] = c >> 12 | 224;
            out[p++] = c >> 6 & 63 | 128;
            out[p++] = c & 63 | 128;
          }
        }

        return out;
      };
      /**
       * Turns an array of numbers into the string given by the concatenation of the
       * characters to which the numbers correspond.
       * @param bytes Array of numbers representing characters.
       * @return Stringification of the array.
       */


      var byteArrayToString = function byteArrayToString(bytes) {
        // TODO(user): Use native implementations if/when available
        var out = [];
        var pos = 0,
            c = 0;

        while (pos < bytes.length) {
          var c1 = bytes[pos++];

          if (c1 < 128) {
            out[c++] = String.fromCharCode(c1);
          } else if (c1 > 191 && c1 < 224) {
            var c2 = bytes[pos++];
            out[c++] = String.fromCharCode((c1 & 31) << 6 | c2 & 63);
          } else if (c1 > 239 && c1 < 365) {
            // Surrogate Pair
            var c2 = bytes[pos++];
            var c3 = bytes[pos++];
            var c4 = bytes[pos++];
            var u = ((c1 & 7) << 18 | (c2 & 63) << 12 | (c3 & 63) << 6 | c4 & 63) - 0x10000;
            out[c++] = String.fromCharCode(0xd800 + (u >> 10));
            out[c++] = String.fromCharCode(0xdc00 + (u & 1023));
          } else {
            var c2 = bytes[pos++];
            var c3 = bytes[pos++];
            out[c++] = String.fromCharCode((c1 & 15) << 12 | (c2 & 63) << 6 | c3 & 63);
          }
        }

        return out.join('');
      }; // We define it as an object literal instead of a class because a class compiled down to es5 can't
      // be treeshaked. https://github.com/rollup/rollup/issues/1691
      // Static lookup maps, lazily populated by init_()


      var base64 = {
        /**
         * Maps bytes to characters.
         */
        byteToCharMap_: null,

        /**
         * Maps characters to bytes.
         */
        charToByteMap_: null,

        /**
         * Maps bytes to websafe characters.
         * @private
         */
        byteToCharMapWebSafe_: null,

        /**
         * Maps websafe characters to bytes.
         * @private
         */
        charToByteMapWebSafe_: null,

        /**
         * Our default alphabet, shared between
         * ENCODED_VALS and ENCODED_VALS_WEBSAFE
         */
        ENCODED_VALS_BASE: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 'abcdefghijklmnopqrstuvwxyz' + '0123456789',

        /**
         * Our default alphabet. Value 64 (=) is special; it means "nothing."
         */
        get ENCODED_VALS() {
          return this.ENCODED_VALS_BASE + '+/=';
        },

        /**
         * Our websafe alphabet.
         */
        get ENCODED_VALS_WEBSAFE() {
          return this.ENCODED_VALS_BASE + '-_.';
        },

        /**
         * Whether this browser supports the atob and btoa functions. This extension
         * started at Mozilla but is now implemented by many browsers. We use the
         * ASSUME_* variables to avoid pulling in the full useragent detection library
         * but still allowing the standard per-browser compilations.
         *
         */
        HAS_NATIVE_SUPPORT: typeof atob === 'function',

        /**
         * Base64-encode an array of bytes.
         *
         * @param input An array of bytes (numbers with
         *     value in [0, 255]) to encode.
         * @param webSafe Boolean indicating we should use the
         *     alternative alphabet.
         * @return The base64 encoded string.
         */
        encodeByteArray: function encodeByteArray(input, webSafe) {
          if (!Array.isArray(input)) {
            throw Error('encodeByteArray takes an array as a parameter');
          }

          this.init_();
          var byteToCharMap = webSafe ? this.byteToCharMapWebSafe_ : this.byteToCharMap_;
          var output = [];

          for (var i = 0; i < input.length; i += 3) {
            var byte1 = input[i];
            var haveByte2 = i + 1 < input.length;
            var byte2 = haveByte2 ? input[i + 1] : 0;
            var haveByte3 = i + 2 < input.length;
            var byte3 = haveByte3 ? input[i + 2] : 0;
            var outByte1 = byte1 >> 2;
            var outByte2 = (byte1 & 0x03) << 4 | byte2 >> 4;
            var outByte3 = (byte2 & 0x0f) << 2 | byte3 >> 6;
            var outByte4 = byte3 & 0x3f;

            if (!haveByte3) {
              outByte4 = 64;

              if (!haveByte2) {
                outByte3 = 64;
              }
            }

            output.push(byteToCharMap[outByte1], byteToCharMap[outByte2], byteToCharMap[outByte3], byteToCharMap[outByte4]);
          }

          return output.join('');
        },

        /**
         * Base64-encode a string.
         *
         * @param input A string to encode.
         * @param webSafe If true, we should use the
         *     alternative alphabet.
         * @return The base64 encoded string.
         */
        encodeString: function encodeString(input, webSafe) {
          // Shortcut for Mozilla browsers that implement
          // a native base64 encoder in the form of "btoa/atob"
          if (this.HAS_NATIVE_SUPPORT && !webSafe) {
            return btoa(input);
          }

          return this.encodeByteArray(stringToByteArray(input), webSafe);
        },

        /**
         * Base64-decode a string.
         *
         * @param input to decode.
         * @param webSafe True if we should use the
         *     alternative alphabet.
         * @return string representing the decoded value.
         */
        decodeString: function decodeString(input, webSafe) {
          // Shortcut for Mozilla browsers that implement
          // a native base64 encoder in the form of "btoa/atob"
          if (this.HAS_NATIVE_SUPPORT && !webSafe) {
            return atob(input);
          }

          return byteArrayToString(this.decodeStringToByteArray(input, webSafe));
        },

        /**
         * Base64-decode a string.
         *
         * In base-64 decoding, groups of four characters are converted into three
         * bytes.  If the encoder did not apply padding, the input length may not
         * be a multiple of 4.
         *
         * In this case, the last group will have fewer than 4 characters, and
         * padding will be inferred.  If the group has one or two characters, it decodes
         * to one byte.  If the group has three characters, it decodes to two bytes.
         *
         * @param input Input to decode.
         * @param webSafe True if we should use the web-safe alphabet.
         * @return bytes representing the decoded value.
         */
        decodeStringToByteArray: function decodeStringToByteArray(input, webSafe) {
          this.init_();
          var charToByteMap = webSafe ? this.charToByteMapWebSafe_ : this.charToByteMap_;
          var output = [];

          for (var i = 0; i < input.length;) {
            var byte1 = charToByteMap[input.charAt(i++)];
            var haveByte2 = i < input.length;
            var byte2 = haveByte2 ? charToByteMap[input.charAt(i)] : 0;
            ++i;
            var haveByte3 = i < input.length;
            var byte3 = haveByte3 ? charToByteMap[input.charAt(i)] : 64;
            ++i;
            var haveByte4 = i < input.length;
            var byte4 = haveByte4 ? charToByteMap[input.charAt(i)] : 64;
            ++i;

            if (byte1 == null || byte2 == null || byte3 == null || byte4 == null) {
              throw Error();
            }

            var outByte1 = byte1 << 2 | byte2 >> 4;
            output.push(outByte1);

            if (byte3 !== 64) {
              var outByte2 = byte2 << 4 & 0xf0 | byte3 >> 2;
              output.push(outByte2);

              if (byte4 !== 64) {
                var outByte3 = byte3 << 6 & 0xc0 | byte4;
                output.push(outByte3);
              }
            }
          }

          return output;
        },

        /**
         * Lazy static initialization function. Called before
         * accessing any of the static map variables.
         * @private
         */
        init_: function init_() {
          if (!this.byteToCharMap_) {
            this.byteToCharMap_ = {};
            this.charToByteMap_ = {};
            this.byteToCharMapWebSafe_ = {};
            this.charToByteMapWebSafe_ = {}; // We want quick mappings back and forth, so we precompute two maps.

            for (var i = 0; i < this.ENCODED_VALS.length; i++) {
              this.byteToCharMap_[i] = this.ENCODED_VALS.charAt(i);
              this.charToByteMap_[this.byteToCharMap_[i]] = i;
              this.byteToCharMapWebSafe_[i] = this.ENCODED_VALS_WEBSAFE.charAt(i);
              this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[i]] = i; // Be forgiving when decoding and correctly decode both encodings.

              if (i >= this.ENCODED_VALS_BASE.length) {
                this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(i)] = i;
                this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(i)] = i;
              }
            }
          }
        }
      };
      /**
       * URL-safe base64 encoding
       */

      var base64Encode = function base64Encode(str) {
        var utf8Bytes = stringToByteArray(str);
        return base64.encodeByteArray(utf8Bytes, true);
      };
      /**
       * URL-safe base64 decoding
       *
       * NOTE: DO NOT use the global atob() function - it does NOT support the
       * base64Url variant encoding.
       *
       * @param str To be decoded
       * @return Decoded result, if possible
       */


      var base64Decode = function base64Decode(str) {
        try {
          return base64.decodeString(str, true);
        } catch (e) {
          console.error('base64Decode failed: ', e);
        }

        return null;
      };
      /**
       * @license
       * Copyright 2017 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */

      /**
       * Do a deep-copy of basic JavaScript Objects or Arrays.
       */


      function deepCopy(value) {
        return deepExtend(undefined, value);
      }
      /**
       * Copy properties from source to target (recursively allows extension
       * of Objects and Arrays).  Scalar values in the target are over-written.
       * If target is undefined, an object of the appropriate type will be created
       * (and returned).
       *
       * We recursively copy all child properties of plain Objects in the source- so
       * that namespace- like dictionaries are merged.
       *
       * Note that the target can be a function, in which case the properties in
       * the source Object are copied onto it as static properties of the Function.
       *
       * Note: we don't merge __proto__ to prevent prototype pollution
       */


      function deepExtend(target, source) {
        if (!(source instanceof Object)) {
          return source;
        }

        switch (source.constructor) {
          case Date:
            // Treat Dates like scalars; if the target date object had any child
            // properties - they will be lost!
            var dateValue = source;
            return new Date(dateValue.getTime());

          case Object:
            if (target === undefined) {
              target = {};
            }

            break;

          case Array:
            // Always copy the array source and overwrite the target.
            target = [];
            break;

          default:
            // Not a plain Object - treat it as a scalar.
            return source;
        }

        for (var prop in source) {
          // use isValidKey to guard against prototype pollution. See https://snyk.io/vuln/SNYK-JS-LODASH-450202
          if (!source.hasOwnProperty(prop) || !isValidKey(prop)) {
            continue;
          }

          target[prop] = deepExtend(target[prop], source[prop]);
        }

        return target;
      }

      function isValidKey(key) {
        return key !== '__proto__';
      }
      /**
       * @license
       * Copyright 2017 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */


      var Deferred =
      /** @class */
      function () {
        function Deferred() {
          var _this = this;

          this.reject = function () {};

          this.resolve = function () {};

          this.promise = new Promise(function (resolve, reject) {
            _this.resolve = resolve;
            _this.reject = reject;
          });
        }
        /**
         * Our API internals are not promiseified and cannot because our callback APIs have subtle expectations around
         * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback
         * and returns a node-style callback which will resolve or reject the Deferred's promise.
         */


        Deferred.prototype.wrapCallback = function (callback) {
          var _this = this;

          return function (error, value) {
            if (error) {
              _this.reject(error);
            } else {
              _this.resolve(value);
            }

            if (typeof callback === 'function') {
              // Attaching noop handler just in case developer wasn't expecting
              // promises
              _this.promise["catch"](function () {}); // Some of our callbacks don't expect a value and our own tests
              // assert that the parameter length is 1


              if (callback.length === 1) {
                callback(error);
              } else {
                callback(error, value);
              }
            }
          };
        };

        return Deferred;
      }();
      /**
       * @license
       * Copyright 2021 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */


      function createMockUserToken(token, projectId) {
        if (token.uid) {
          throw new Error('The "uid" field is no longer supported by mockUserToken. Please use "sub" instead for Firebase Auth User ID.');
        } // Unsecured JWTs use "none" as the algorithm.


        var header = {
          alg: 'none',
          type: 'JWT'
        };
        var project = projectId || 'demo-project';
        var iat = token.iat || 0;
        var sub = token.sub || token.user_id;

        if (!sub) {
          throw new Error("mockUserToken must contain 'sub' or 'user_id' field!");
        }

        var payload = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({
          // Set all required fields to decent defaults
          iss: "https://securetoken.google.com/" + project,
          aud: project,
          iat: iat,
          exp: iat + 3600,
          auth_time: iat,
          sub: sub,
          user_id: sub,
          firebase: {
            sign_in_provider: 'custom',
            identities: {}
          }
        }, token); // Unsecured JWTs use the empty string as a signature.

        var signature = '';
        return [base64.encodeString(JSON.stringify(header),
        /*webSafe=*/
        false), base64.encodeString(JSON.stringify(payload),
        /*webSafe=*/
        false), signature].join('.');
      }
      /**
       * @license
       * Copyright 2017 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */

      /**
       * Returns navigator.userAgent string or '' if it's not defined.
       * @return user agent string
       */


      function getUA() {
        if (typeof navigator !== 'undefined' && typeof navigator['userAgent'] === 'string') {
          return navigator['userAgent'];
        } else {
          return '';
        }
      }
      /**
       * Detect Cordova / PhoneGap / Ionic frameworks on a mobile device.
       *
       * Deliberately does not rely on checking `file://` URLs (as this fails PhoneGap
       * in the Ripple emulator) nor Cordova `onDeviceReady`, which would normally
       * wait for a callback.
       */


      function isMobileCordova() {
        return typeof window !== 'undefined' && // @ts-ignore Setting up an broadly applicable index signature for Window
        // just to deal with this case would probably be a bad idea.
        !!(window['cordova'] || window['phonegap'] || window['PhoneGap']) && /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(getUA());
      }
      /**
       * Detect Node.js.
       *
       * @return true if Node.js environment is detected.
       */
      // Node detection logic from: https://github.com/iliakan/detect-node/


      function isNode() {
        try {
          return Object.prototype.toString.call(global.process) === '[object process]';
        } catch (e) {
          return false;
        }
      }
      /**
       * Detect Browser Environment
       */


      function isBrowser() {
        return typeof self === 'object' && self.self === self;
      }

      function isBrowserExtension() {
        var runtime = typeof chrome === 'object' ? chrome.runtime : typeof browser === 'object' ? browser.runtime : undefined;
        return typeof runtime === 'object' && runtime.id !== undefined;
      }
      /**
       * Detect React Native.
       *
       * @return true if ReactNative environment is detected.
       */


      function isReactNative() {
        return typeof navigator === 'object' && navigator['product'] === 'ReactNative';
      }
      /** Detects Electron apps. */


      function isElectron() {
        return getUA().indexOf('Electron/') >= 0;
      }
      /** Detects Internet Explorer. */


      function isIE() {
        var ua = getUA();
        return ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;
      }
      /** Detects Universal Windows Platform apps. */


      function isUWP() {
        return getUA().indexOf('MSAppHost/') >= 0;
      }
      /**
       * Detect whether the current SDK build is the Node version.
       *
       * @return true if it's the Node SDK build.
       */


      function isNodeSdk() {
        return CONSTANTS.NODE_CLIENT === true || CONSTANTS.NODE_ADMIN === true;
      }
      /** Returns true if we are running in Safari. */


      function isSafari() {
        return !isNode() && navigator.userAgent.includes('Safari') && !navigator.userAgent.includes('Chrome');
      }
      /**
       * This method checks if indexedDB is supported by current browser/service worker context
       * @return true if indexedDB is supported by current browser/service worker context
       */


      function isIndexedDBAvailable() {
        return 'indexedDB' in self && indexedDB != null;
      }
      /**
       * This method validates browser/sw context for indexedDB by opening a dummy indexedDB database and reject
       * if errors occur during the database open operation.
       *
       * @throws exception if current browser/sw context can't run idb.open (ex: Safari iframe, Firefox
       * private browsing)
       */


      function validateIndexedDBOpenable() {
        return new Promise(function (resolve, reject) {
          try {
            var preExist_1 = true;
            var DB_CHECK_NAME_1 = 'validate-browser-context-for-indexeddb-analytics-module';
            var request_1 = self.indexedDB.open(DB_CHECK_NAME_1);

            request_1.onsuccess = function () {
              request_1.result.close(); // delete database only when it doesn't pre-exist

              if (!preExist_1) {
                self.indexedDB.deleteDatabase(DB_CHECK_NAME_1);
              }

              resolve(true);
            };

            request_1.onupgradeneeded = function () {
              preExist_1 = false;
            };

            request_1.onerror = function () {
              var _a;

              reject(((_a = request_1.error) === null || _a === void 0 ? void 0 : _a.message) || '');
            };
          } catch (error) {
            reject(error);
          }
        });
      }
      /**
       *
       * This method checks whether cookie is enabled within current browser
       * @return true if cookie is enabled within current browser
       */


      function areCookiesEnabled() {
        if (!navigator || !navigator.cookieEnabled) {
          return false;
        }

        return true;
      }
      /**
       * Polyfill for `globalThis` object.
       * @returns the `globalThis` object for the given environment.
       */


      function getGlobal() {
        if (typeof self !== 'undefined') {
          return self;
        }

        if (typeof window !== 'undefined') {
          return window;
        }

        if (typeof global !== 'undefined') {
          return global;
        }

        throw new Error('Unable to locate global object.');
      }
      /**
       * @license
       * Copyright 2017 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */


      var ERROR_NAME = 'FirebaseError'; // Based on code from:
      // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Custom_Error_Types

      var FirebaseError =
      /** @class */
      function (_super) {
        Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(FirebaseError, _super);

        function FirebaseError(code, message, customData) {
          var _this = _super.call(this, message) || this;

          _this.code = code;
          _this.customData = customData;
          _this.name = ERROR_NAME; // Fix For ES5
          // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work

          Object.setPrototypeOf(_this, FirebaseError.prototype); // Maintains proper stack trace for where our error was thrown.
          // Only available on V8.

          if (Error.captureStackTrace) {
            Error.captureStackTrace(_this, ErrorFactory.prototype.create);
          }

          return _this;
        }

        return FirebaseError;
      }(Error);

      var ErrorFactory =
      /** @class */
      function () {
        function ErrorFactory(service, serviceName, errors) {
          this.service = service;
          this.serviceName = serviceName;
          this.errors = errors;
        }

        ErrorFactory.prototype.create = function (code) {
          var data = [];

          for (var _i = 1; _i < arguments.length; _i++) {
            data[_i - 1] = arguments[_i];
          }

          var customData = data[0] || {};
          var fullCode = this.service + "/" + code;
          var template = this.errors[code];
          var message = template ? replaceTemplate(template, customData) : 'Error'; // Service Name: Error message (service/code).

          var fullMessage = this.serviceName + ": " + message + " (" + fullCode + ").";
          var error = new FirebaseError(fullCode, fullMessage, customData);
          return error;
        };

        return ErrorFactory;
      }();

      function replaceTemplate(template, data) {
        return template.replace(PATTERN, function (_, key) {
          var value = data[key];
          return value != null ? String(value) : "<" + key + "?>";
        });
      }

      var PATTERN = /\{\$([^}]+)}/g;
      /**
       * @license
       * Copyright 2017 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */

      /**
       * Evaluates a JSON string into a javascript object.
       *
       * @param {string} str A string containing JSON.
       * @return {*} The javascript object representing the specified JSON.
       */

      function jsonEval(str) {
        return JSON.parse(str);
      }
      /**
       * Returns JSON representing a javascript object.
       * @param {*} data Javascript object to be stringified.
       * @return {string} The JSON contents of the object.
       */


      function stringify(data) {
        return JSON.stringify(data);
      }
      /**
       * @license
       * Copyright 2017 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */

      /**
       * Decodes a Firebase auth. token into constituent parts.
       *
       * Notes:
       * - May return with invalid / incomplete claims if there's no native base64 decoding support.
       * - Doesn't check if the token is actually valid.
       */


      var decode = function decode(token) {
        var header = {},
            claims = {},
            data = {},
            signature = '';

        try {
          var parts = token.split('.');
          header = jsonEval(base64Decode(parts[0]) || '');
          claims = jsonEval(base64Decode(parts[1]) || '');
          signature = parts[2];
          data = claims['d'] || {};
          delete claims['d'];
        } catch (e) {}

        return {
          header: header,
          claims: claims,
          data: data,
          signature: signature
        };
      };
      /**
       * Decodes a Firebase auth. token and checks the validity of its time-based claims. Will return true if the
       * token is within the time window authorized by the 'nbf' (not-before) and 'iat' (issued-at) claims.
       *
       * Notes:
       * - May return a false negative if there's no native base64 decoding support.
       * - Doesn't check if the token is actually valid.
       */


      var isValidTimestamp = function isValidTimestamp(token) {
        var claims = decode(token).claims;
        var now = Math.floor(new Date().getTime() / 1000);
        var validSince = 0,
            validUntil = 0;

        if (typeof claims === 'object') {
          if (claims.hasOwnProperty('nbf')) {
            validSince = claims['nbf'];
          } else if (claims.hasOwnProperty('iat')) {
            validSince = claims['iat'];
          }

          if (claims.hasOwnProperty('exp')) {
            validUntil = claims['exp'];
          } else {
            // token will expire after 24h by default
            validUntil = validSince + 86400;
          }
        }

        return !!now && !!validSince && !!validUntil && now >= validSince && now <= validUntil;
      };
      /**
       * Decodes a Firebase auth. token and returns its issued at time if valid, null otherwise.
       *
       * Notes:
       * - May return null if there's no native base64 decoding support.
       * - Doesn't check if the token is actually valid.
       */


      var issuedAtTime = function issuedAtTime(token) {
        var claims = decode(token).claims;

        if (typeof claims === 'object' && claims.hasOwnProperty('iat')) {
          return claims['iat'];
        }

        return null;
      };
      /**
       * Decodes a Firebase auth. token and checks the validity of its format. Expects a valid issued-at time.
       *
       * Notes:
       * - May return a false negative if there's no native base64 decoding support.
       * - Doesn't check if the token is actually valid.
       */


      var isValidFormat = function isValidFormat(token) {
        var decoded = decode(token),
            claims = decoded.claims;
        return !!claims && typeof claims === 'object' && claims.hasOwnProperty('iat');
      };
      /**
       * Attempts to peer into an auth token and determine if it's an admin auth token by looking at the claims portion.
       *
       * Notes:
       * - May return a false negative if there's no native base64 decoding support.
       * - Doesn't check if the token is actually valid.
       */


      var isAdmin = function isAdmin(token) {
        var claims = decode(token).claims;
        return typeof claims === 'object' && claims['admin'] === true;
      };
      /**
       * @license
       * Copyright 2017 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */


      function contains(obj, key) {
        return Object.prototype.hasOwnProperty.call(obj, key);
      }

      function safeGet(obj, key) {
        if (Object.prototype.hasOwnProperty.call(obj, key)) {
          return obj[key];
        } else {
          return undefined;
        }
      }

      function isEmpty(obj) {
        for (var key in obj) {
          if (Object.prototype.hasOwnProperty.call(obj, key)) {
            return false;
          }
        }

        return true;
      }

      function map(obj, fn, contextObj) {
        var res = {};

        for (var key in obj) {
          if (Object.prototype.hasOwnProperty.call(obj, key)) {
            res[key] = fn.call(contextObj, obj[key], key, obj);
          }
        }

        return res;
      }
      /**
       * @license
       * Copyright 2017 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */

      /**
       * Returns a querystring-formatted string (e.g. &arg=val&arg2=val2) from a
       * params object (e.g. {arg: 'val', arg2: 'val2'})
       * Note: You must prepend it with ? when adding it to a URL.
       */


      function querystring(querystringParams) {
        var params = [];

        var _loop_1 = function _loop_1(key, value) {
          if (Array.isArray(value)) {
            value.forEach(function (arrayVal) {
              params.push(encodeURIComponent(key) + '=' + encodeURIComponent(arrayVal));
            });
          } else {
            params.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
          }
        };

        for (var _i = 0, _a = Object.entries(querystringParams); _i < _a.length; _i++) {
          var _b = _a[_i],
              key = _b[0],
              value = _b[1];

          _loop_1(key, value);
        }

        return params.length ? '&' + params.join('&') : '';
      }
      /**
       * Decodes a querystring (e.g. ?arg=val&arg2=val2) into a params object
       * (e.g. {arg: 'val', arg2: 'val2'})
       */


      function querystringDecode(querystring) {
        var obj = {};
        var tokens = querystring.replace(/^\?/, '').split('&');
        tokens.forEach(function (token) {
          if (token) {
            var _a = token.split('='),
                key = _a[0],
                value = _a[1];

            obj[decodeURIComponent(key)] = decodeURIComponent(value);
          }
        });
        return obj;
      }
      /**
       * Extract the query string part of a URL, including the leading question mark (if present).
       */


      function extractQuerystring(url) {
        var queryStart = url.indexOf('?');

        if (!queryStart) {
          return '';
        }

        var fragmentStart = url.indexOf('#', queryStart);
        return url.substring(queryStart, fragmentStart > 0 ? fragmentStart : undefined);
      }
      /**
       * @license
       * Copyright 2017 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */

      /**
       * @fileoverview SHA-1 cryptographic hash.
       * Variable names follow the notation in FIPS PUB 180-3:
       * http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf.
       *
       * Usage:
       *   var sha1 = new sha1();
       *   sha1.update(bytes);
       *   var hash = sha1.digest();
       *
       * Performance:
       *   Chrome 23:   ~400 Mbit/s
       *   Firefox 16:  ~250 Mbit/s
       *
       */

      /**
       * SHA-1 cryptographic hash constructor.
       *
       * The properties declared here are discussed in the above algorithm document.
       * @constructor
       * @final
       * @struct
       */


      var Sha1 =
      /** @class */
      function () {
        function Sha1() {
          /**
           * Holds the previous values of accumulated variables a-e in the compress_
           * function.
           * @private
           */
          this.chain_ = [];
          /**
           * A buffer holding the partially computed hash result.
           * @private
           */

          this.buf_ = [];
          /**
           * An array of 80 bytes, each a part of the message to be hashed.  Referred to
           * as the message schedule in the docs.
           * @private
           */

          this.W_ = [];
          /**
           * Contains data needed to pad messages less than 64 bytes.
           * @private
           */

          this.pad_ = [];
          /**
           * @private {number}
           */

          this.inbuf_ = 0;
          /**
           * @private {number}
           */

          this.total_ = 0;
          this.blockSize = 512 / 8;
          this.pad_[0] = 128;

          for (var i = 1; i < this.blockSize; ++i) {
            this.pad_[i] = 0;
          }

          this.reset();
        }

        Sha1.prototype.reset = function () {
          this.chain_[0] = 0x67452301;
          this.chain_[1] = 0xefcdab89;
          this.chain_[2] = 0x98badcfe;
          this.chain_[3] = 0x10325476;
          this.chain_[4] = 0xc3d2e1f0;
          this.inbuf_ = 0;
          this.total_ = 0;
        };
        /**
         * Internal compress helper function.
         * @param buf Block to compress.
         * @param offset Offset of the block in the buffer.
         * @private
         */


        Sha1.prototype.compress_ = function (buf, offset) {
          if (!offset) {
            offset = 0;
          }

          var W = this.W_; // get 16 big endian words

          if (typeof buf === 'string') {
            for (var i = 0; i < 16; i++) {
              // TODO(user): [bug 8140122] Recent versions of Safari for Mac OS and iOS
              // have a bug that turns the post-increment ++ operator into pre-increment
              // during JIT compilation.  We have code that depends heavily on SHA-1 for
              // correctness and which is affected by this bug, so I've removed all uses
              // of post-increment ++ in which the result value is used.  We can revert
              // this change once the Safari bug
              // (https://bugs.webkit.org/show_bug.cgi?id=109036) has been fixed and
              // most clients have been updated.
              W[i] = buf.charCodeAt(offset) << 24 | buf.charCodeAt(offset + 1) << 16 | buf.charCodeAt(offset + 2) << 8 | buf.charCodeAt(offset + 3);
              offset += 4;
            }
          } else {
            for (var i = 0; i < 16; i++) {
              W[i] = buf[offset] << 24 | buf[offset + 1] << 16 | buf[offset + 2] << 8 | buf[offset + 3];
              offset += 4;
            }
          } // expand to 80 words


          for (var i = 16; i < 80; i++) {
            var t = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];
            W[i] = (t << 1 | t >>> 31) & 0xffffffff;
          }

          var a = this.chain_[0];
          var b = this.chain_[1];
          var c = this.chain_[2];
          var d = this.chain_[3];
          var e = this.chain_[4];
          var f, k; // TODO(user): Try to unroll this loop to speed up the computation.

          for (var i = 0; i < 80; i++) {
            if (i < 40) {
              if (i < 20) {
                f = d ^ b & (c ^ d);
                k = 0x5a827999;
              } else {
                f = b ^ c ^ d;
                k = 0x6ed9eba1;
              }
            } else {
              if (i < 60) {
                f = b & c | d & (b | c);
                k = 0x8f1bbcdc;
              } else {
                f = b ^ c ^ d;
                k = 0xca62c1d6;
              }
            }

            var t = (a << 5 | a >>> 27) + f + e + k + W[i] & 0xffffffff;
            e = d;
            d = c;
            c = (b << 30 | b >>> 2) & 0xffffffff;
            b = a;
            a = t;
          }

          this.chain_[0] = this.chain_[0] + a & 0xffffffff;
          this.chain_[1] = this.chain_[1] + b & 0xffffffff;
          this.chain_[2] = this.chain_[2] + c & 0xffffffff;
          this.chain_[3] = this.chain_[3] + d & 0xffffffff;
          this.chain_[4] = this.chain_[4] + e & 0xffffffff;
        };

        Sha1.prototype.update = function (bytes, length) {
          // TODO(johnlenz): tighten the function signature and remove this check
          if (bytes == null) {
            return;
          }

          if (length === undefined) {
            length = bytes.length;
          }

          var lengthMinusBlock = length - this.blockSize;
          var n = 0; // Using local instead of member variables gives ~5% speedup on Firefox 16.

          var buf = this.buf_;
          var inbuf = this.inbuf_; // The outer while loop should execute at most twice.

          while (n < length) {
            // When we have no data in the block to top up, we can directly process the
            // input buffer (assuming it contains sufficient data). This gives ~25%
            // speedup on Chrome 23 and ~15% speedup on Firefox 16, but requires that
            // the data is provided in large chunks (or in multiples of 64 bytes).
            if (inbuf === 0) {
              while (n <= lengthMinusBlock) {
                this.compress_(bytes, n);
                n += this.blockSize;
              }
            }

            if (typeof bytes === 'string') {
              while (n < length) {
                buf[inbuf] = bytes.charCodeAt(n);
                ++inbuf;
                ++n;

                if (inbuf === this.blockSize) {
                  this.compress_(buf);
                  inbuf = 0; // Jump to the outer loop so we use the full-block optimization.

                  break;
                }
              }
            } else {
              while (n < length) {
                buf[inbuf] = bytes[n];
                ++inbuf;
                ++n;

                if (inbuf === this.blockSize) {
                  this.compress_(buf);
                  inbuf = 0; // Jump to the outer loop so we use the full-block optimization.

                  break;
                }
              }
            }
          }

          this.inbuf_ = inbuf;
          this.total_ += length;
        };
        /** @override */


        Sha1.prototype.digest = function () {
          var digest = [];
          var totalBits = this.total_ * 8; // Add pad 0x80 0x00*.

          if (this.inbuf_ < 56) {
            this.update(this.pad_, 56 - this.inbuf_);
          } else {
            this.update(this.pad_, this.blockSize - (this.inbuf_ - 56));
          } // Add # bits.


          for (var i = this.blockSize - 1; i >= 56; i--) {
            this.buf_[i] = totalBits & 255;
            totalBits /= 256; // Don't use bit-shifting here!
          }

          this.compress_(this.buf_);
          var n = 0;

          for (var i = 0; i < 5; i++) {
            for (var j = 24; j >= 0; j -= 8) {
              digest[n] = this.chain_[i] >> j & 255;
              ++n;
            }
          }

          return digest;
        };

        return Sha1;
      }();
      /**
       * Helper to make a Subscribe function (just like Promise helps make a
       * Thenable).
       *
       * @param executor Function which can make calls to a single Observer
       *     as a proxy.
       * @param onNoObservers Callback when count of Observers goes to zero.
       */


      function createSubscribe(executor, onNoObservers) {
        var proxy = new ObserverProxy(executor, onNoObservers);
        return proxy.subscribe.bind(proxy);
      }
      /**
       * Implement fan-out for any number of Observers attached via a subscribe
       * function.
       */


      var ObserverProxy =
      /** @class */
      function () {
        /**
         * @param executor Function which can make calls to a single Observer
         *     as a proxy.
         * @param onNoObservers Callback when count of Observers goes to zero.
         */
        function ObserverProxy(executor, onNoObservers) {
          var _this = this;

          this.observers = [];
          this.unsubscribes = [];
          this.observerCount = 0; // Micro-task scheduling by calling task.then().

          this.task = Promise.resolve();
          this.finalized = false;
          this.onNoObservers = onNoObservers; // Call the executor asynchronously so subscribers that are called
          // synchronously after the creation of the subscribe function
          // can still receive the very first value generated in the executor.

          this.task.then(function () {
            executor(_this);
          })["catch"](function (e) {
            _this.error(e);
          });
        }

        ObserverProxy.prototype.next = function (value) {
          this.forEachObserver(function (observer) {
            observer.next(value);
          });
        };

        ObserverProxy.prototype.error = function (error) {
          this.forEachObserver(function (observer) {
            observer.error(error);
          });
          this.close(error);
        };

        ObserverProxy.prototype.complete = function () {
          this.forEachObserver(function (observer) {
            observer.complete();
          });
          this.close();
        };
        /**
         * Subscribe function that can be used to add an Observer to the fan-out list.
         *
         * - We require that no event is sent to a subscriber sychronously to their
         *   call to subscribe().
         */


        ObserverProxy.prototype.subscribe = function (nextOrObserver, error, complete) {
          var _this = this;

          var observer;

          if (nextOrObserver === undefined && error === undefined && complete === undefined) {
            throw new Error('Missing Observer.');
          } // Assemble an Observer object when passed as callback functions.


          if (implementsAnyMethods(nextOrObserver, ['next', 'error', 'complete'])) {
            observer = nextOrObserver;
          } else {
            observer = {
              next: nextOrObserver,
              error: error,
              complete: complete
            };
          }

          if (observer.next === undefined) {
            observer.next = noop;
          }

          if (observer.error === undefined) {
            observer.error = noop;
          }

          if (observer.complete === undefined) {
            observer.complete = noop;
          }

          var unsub = this.unsubscribeOne.bind(this, this.observers.length); // Attempt to subscribe to a terminated Observable - we
          // just respond to the Observer with the final error or complete
          // event.

          if (this.finalized) {
            // eslint-disable-next-line @typescript-eslint/no-floating-promises
            this.task.then(function () {
              try {
                if (_this.finalError) {
                  observer.error(_this.finalError);
                } else {
                  observer.complete();
                }
              } catch (e) {// nothing
              }

              return;
            });
          }

          this.observers.push(observer);
          return unsub;
        }; // Unsubscribe is synchronous - we guarantee that no events are sent to
        // any unsubscribed Observer.


        ObserverProxy.prototype.unsubscribeOne = function (i) {
          if (this.observers === undefined || this.observers[i] === undefined) {
            return;
          }

          delete this.observers[i];
          this.observerCount -= 1;

          if (this.observerCount === 0 && this.onNoObservers !== undefined) {
            this.onNoObservers(this);
          }
        };

        ObserverProxy.prototype.forEachObserver = function (fn) {
          if (this.finalized) {
            // Already closed by previous event....just eat the additional values.
            return;
          } // Since sendOne calls asynchronously - there is no chance that
          // this.observers will become undefined.


          for (var i = 0; i < this.observers.length; i++) {
            this.sendOne(i, fn);
          }
        }; // Call the Observer via one of it's callback function. We are careful to
        // confirm that the observe has not been unsubscribed since this asynchronous
        // function had been queued.


        ObserverProxy.prototype.sendOne = function (i, fn) {
          var _this = this; // Execute the callback asynchronously
          // eslint-disable-next-line @typescript-eslint/no-floating-promises


          this.task.then(function () {
            if (_this.observers !== undefined && _this.observers[i] !== undefined) {
              try {
                fn(_this.observers[i]);
              } catch (e) {
                // Ignore exceptions raised in Observers or missing methods of an
                // Observer.
                // Log error to console. b/31404806
                if (typeof console !== 'undefined' && console.error) {
                  console.error(e);
                }
              }
            }
          });
        };

        ObserverProxy.prototype.close = function (err) {
          var _this = this;

          if (this.finalized) {
            return;
          }

          this.finalized = true;

          if (err !== undefined) {
            this.finalError = err;
          } // Proxy is no longer needed - garbage collect references
          // eslint-disable-next-line @typescript-eslint/no-floating-promises


          this.task.then(function () {
            _this.observers = undefined;
            _this.onNoObservers = undefined;
          });
        };

        return ObserverProxy;
      }();
      /** Turn synchronous function into one called asynchronously. */
      // eslint-disable-next-line @typescript-eslint/ban-types


      function async(fn, onError) {
        return function () {
          var args = [];

          for (var _i = 0; _i < arguments.length; _i++) {
            args[_i] = arguments[_i];
          }

          Promise.resolve(true).then(function () {
            fn.apply(void 0, args);
          })["catch"](function (error) {
            if (onError) {
              onError(error);
            }
          });
        };
      }
      /**
       * Return true if the object passed in implements any of the named methods.
       */


      function implementsAnyMethods(obj, methods) {
        if (typeof obj !== 'object' || obj === null) {
          return false;
        }

        for (var _i = 0, methods_1 = methods; _i < methods_1.length; _i++) {
          var method = methods_1[_i];

          if (method in obj && typeof obj[method] === 'function') {
            return true;
          }
        }

        return false;
      }

      function noop() {// do nothing
      }
      /**
       * @license
       * Copyright 2017 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */

      /**
       * Check to make sure the appropriate number of arguments are provided for a public function.
       * Throws an error if it fails.
       *
       * @param fnName The function name
       * @param minCount The minimum number of arguments to allow for the function call
       * @param maxCount The maximum number of argument to allow for the function call
       * @param argCount The actual number of arguments provided.
       */


      var validateArgCount = function validateArgCount(fnName, minCount, maxCount, argCount) {
        var argError;

        if (argCount < minCount) {
          argError = 'at least ' + minCount;
        } else if (argCount > maxCount) {
          argError = maxCount === 0 ? 'none' : 'no more than ' + maxCount;
        }

        if (argError) {
          var error = fnName + ' failed: Was called with ' + argCount + (argCount === 1 ? ' argument.' : ' arguments.') + ' Expects ' + argError + '.';
          throw new Error(error);
        }
      };
      /**
       * Generates a string to prefix an error message about failed argument validation
       *
       * @param fnName The function name
       * @param argName The name of the argument
       * @return The prefix to add to the error thrown for validation.
       */


      function errorPrefix(fnName, argName) {
        return fnName + " failed: " + argName + " argument ";
      }
      /**
       * @param fnName
       * @param argumentNumber
       * @param namespace
       * @param optional
       */


      function validateNamespace(fnName, namespace, optional) {
        if (optional && !namespace) {
          return;
        }

        if (typeof namespace !== 'string') {
          //TODO: I should do more validation here. We only allow certain chars in namespaces.
          throw new Error(errorPrefix(fnName, 'namespace') + 'must be a valid firebase namespace.');
        }
      }

      function validateCallback(fnName, argumentName, // eslint-disable-next-line @typescript-eslint/ban-types
      callback, optional) {
        if (optional && !callback) {
          return;
        }

        if (typeof callback !== 'function') {
          throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid function.');
        }
      }

      function validateContextObject(fnName, argumentName, context, optional) {
        if (optional && !context) {
          return;
        }

        if (typeof context !== 'object' || context === null) {
          throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid context object.');
        }
      }
      /**
       * @license
       * Copyright 2017 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */
      // Code originally came from goog.crypt.stringToUtf8ByteArray, but for some reason they
      // automatically replaced '\r\n' with '\n', and they didn't handle surrogate pairs,
      // so it's been modified.
      // Note that not all Unicode characters appear as single characters in JavaScript strings.
      // fromCharCode returns the UTF-16 encoding of a character - so some Unicode characters
      // use 2 characters in Javascript.  All 4-byte UTF-8 characters begin with a first
      // character in the range 0xD800 - 0xDBFF (the first character of a so-called surrogate
      // pair).
      // See http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3

      /**
       * @param {string} str
       * @return {Array}
       */


      var stringToByteArray$1 = function stringToByteArray$1(str) {
        var out = [];
        var p = 0;

        for (var i = 0; i < str.length; i++) {
          var c = str.charCodeAt(i); // Is this the lead surrogate in a surrogate pair?

          if (c >= 0xd800 && c <= 0xdbff) {
            var high = c - 0xd800; // the high 10 bits.

            i++;
            assert(i < str.length, 'Surrogate pair missing trail surrogate.');
            var low = str.charCodeAt(i) - 0xdc00; // the low 10 bits.

            c = 0x10000 + (high << 10) + low;
          }

          if (c < 128) {
            out[p++] = c;
          } else if (c < 2048) {
            out[p++] = c >> 6 | 192;
            out[p++] = c & 63 | 128;
          } else if (c < 65536) {
            out[p++] = c >> 12 | 224;
            out[p++] = c >> 6 & 63 | 128;
            out[p++] = c & 63 | 128;
          } else {
            out[p++] = c >> 18 | 240;
            out[p++] = c >> 12 & 63 | 128;
            out[p++] = c >> 6 & 63 | 128;
            out[p++] = c & 63 | 128;
          }
        }

        return out;
      };
      /**
       * Calculate length without actually converting; useful for doing cheaper validation.
       * @param {string} str
       * @return {number}
       */


      var stringLength = function stringLength(str) {
        var p = 0;

        for (var i = 0; i < str.length; i++) {
          var c = str.charCodeAt(i);

          if (c < 128) {
            p++;
          } else if (c < 2048) {
            p += 2;
          } else if (c >= 0xd800 && c <= 0xdbff) {
            // Lead surrogate of a surrogate pair.  The pair together will take 4 bytes to represent.
            p += 4;
            i++; // skip trail surrogate.
          } else {
            p += 3;
          }
        }

        return p;
      };
      /**
       * @license
       * Copyright 2019 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */

      /**
       * The amount of milliseconds to exponentially increase.
       */


      var DEFAULT_INTERVAL_MILLIS = 1000;
      /**
       * The factor to backoff by.
       * Should be a number greater than 1.
       */

      var DEFAULT_BACKOFF_FACTOR = 2;
      /**
       * The maximum milliseconds to increase to.
       *
       * <p>Visible for testing
       */

      var MAX_VALUE_MILLIS = 4 * 60 * 60 * 1000; // Four hours, like iOS and Android.

      /**
       * The percentage of backoff time to randomize by.
       * See
       * http://go/safe-client-behavior#step-1-determine-the-appropriate-retry-interval-to-handle-spike-traffic
       * for context.
       *
       * <p>Visible for testing
       */

      var RANDOM_FACTOR = 0.5;
      /**
       * Based on the backoff method from
       * https://github.com/google/closure-library/blob/master/closure/goog/math/exponentialbackoff.js.
       * Extracted here so we don't need to pass metadata and a stateful ExponentialBackoff object around.
       */

      function calculateBackoffMillis(backoffCount, intervalMillis, backoffFactor) {
        if (intervalMillis === void 0) {
          intervalMillis = DEFAULT_INTERVAL_MILLIS;
        }

        if (backoffFactor === void 0) {
          backoffFactor = DEFAULT_BACKOFF_FACTOR;
        } // Calculates an exponentially increasing value.
        // Deviation: calculates value from count and a constant interval, so we only need to save value
        // and count to restore state.


        var currBaseValue = intervalMillis * Math.pow(backoffFactor, backoffCount); // A random "fuzz" to avoid waves of retries.
        // Deviation: randomFactor is required.

        var randomWait = Math.round( // A fraction of the backoff value to add/subtract.
        // Deviation: changes multiplication order to improve readability.
        RANDOM_FACTOR * currBaseValue * ( // A random float (rounded to int by Math.round above) in the range [-1, 1]. Determines
        // if we add or subtract.
        Math.random() - 0.5) * 2); // Limits backoff to max to avoid effectively permanent backoff.

        return Math.min(MAX_VALUE_MILLIS, currBaseValue + randomWait);
      }
      /**
       * @license
       * Copyright 2020 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */

      /**
       * Provide English ordinal letters after a number
       */


      function ordinal(i) {
        if (!Number.isFinite(i)) {
          return "" + i;
        }

        return i + indicator(i);
      }

      function indicator(i) {
        i = Math.abs(i);
        var cent = i % 100;

        if (cent >= 10 && cent <= 20) {
          return 'th';
        }

        var dec = i % 10;

        if (dec === 1) {
          return 'st';
        }

        if (dec === 2) {
          return 'nd';
        }

        if (dec === 3) {
          return 'rd';
        }

        return 'th';
      }
      /**
       * @license
       * Copyright 2021 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */


      function getModularInstance(service) {
        if (service && service._delegate) {
          return service._delegate;
        } else {
          return service;
        }
      } //# sourceMappingURL=index.esm.js.map

      /***/

    },

    /***/
    "qZ0a":
    /*!**********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/publishLast.js ***!
      \**********************************************************************/

    /*! exports provided: publishLast */

    /***/
    function qZ0a(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "publishLast", function () {
        return publishLast;
      });
      /* harmony import */


      var _AsyncSubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../AsyncSubject */
      "NHP+");
      /* harmony import */


      var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./multicast */
      "oB13");

      function publishLast() {
        return function (source) {
          return Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(new _AsyncSubject__WEBPACK_IMPORTED_MODULE_0__["AsyncSubject"]())(source);
        };
      } //# sourceMappingURL=publishLast.js.map

      /***/

    },

    /***/
    "qbD1":
    /*!**************************************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/date-time-picker-input.directive.js ***!
      \**************************************************************************************************/

    /*! exports provided: OWL_DATETIME_VALUE_ACCESSOR, OWL_DATETIME_VALIDATORS, OwlDateTimeInputDirective */

    /***/
    function qbD1(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OWL_DATETIME_VALUE_ACCESSOR", function () {
        return OWL_DATETIME_VALUE_ACCESSOR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OWL_DATETIME_VALIDATORS", function () {
        return OWL_DATETIME_VALIDATORS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OwlDateTimeInputDirective", function () {
        return OwlDateTimeInputDirective;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./adapter/date-time-adapter.class */
      "1rjb");
      /* harmony import */


      var _angular_forms__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/forms */
      "3Pt+");
      /* harmony import */


      var _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/cdk/keycodes */
      "FtGj");
      /* harmony import */


      var _date_time_picker_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ./date-time-picker.component */
      "7hDX");
      /* harmony import */


      var _adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! ./adapter/date-time-format.class */
      "1FPZ");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");

      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var __metadata = undefined && undefined.__metadata || function (k, v) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
      };

      var __param = undefined && undefined.__param || function (paramIndex, decorator) {
        return function (target, key) {
          decorator(target, key, paramIndex);
        };
      };

      var OWL_DATETIME_VALUE_ACCESSOR = {
        provide: _angular_forms__WEBPACK_IMPORTED_MODULE_2__["NG_VALUE_ACCESSOR"],
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return OwlDateTimeInputDirective;
        }),
        multi: true
      };
      var OWL_DATETIME_VALIDATORS = {
        provide: _angular_forms__WEBPACK_IMPORTED_MODULE_2__["NG_VALIDATORS"],
        useExisting: Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["forwardRef"])(function () {
          return OwlDateTimeInputDirective;
        }),
        multi: true
      };

      var OwlDateTimeInputDirective = function () {
        function OwlDateTimeInputDirective(elmRef, renderer, dateTimeAdapter, dateTimeFormats) {
          var _this = this;

          this.elmRef = elmRef;
          this.renderer = renderer;
          this.dateTimeAdapter = dateTimeAdapter;
          this.dateTimeFormats = dateTimeFormats;
          this._selectMode = 'single';
          this.rangeSeparator = '~';
          this._values = [];
          this.dateTimeChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.dateTimeInput = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.dtPickerSub = rxjs__WEBPACK_IMPORTED_MODULE_6__["Subscription"].EMPTY;
          this.localeSub = rxjs__WEBPACK_IMPORTED_MODULE_6__["Subscription"].EMPTY;
          this.lastValueValid = true;

          this.onModelChange = function () {};

          this.onModelTouched = function () {};

          this.validatorOnChange = function () {};

          this.parseValidator = function () {
            return _this.lastValueValid ? null : {
              'owlDateTimeParse': {
                'text': _this.elmRef.nativeElement.value
              }
            };
          };

          this.minValidator = function (control) {
            if (_this.isInSingleMode) {
              var controlValue = _this.getValidDate(_this.dateTimeAdapter.deserialize(control.value));

              return !_this.min || !controlValue || _this.dateTimeAdapter.compare(_this.min, controlValue) <= 0 ? null : {
                'owlDateTimeMin': {
                  'min': _this.min,
                  'actual': controlValue
                }
              };
            } else if (_this.isInRangeMode && control.value) {
              var controlValueFrom = _this.getValidDate(_this.dateTimeAdapter.deserialize(control.value[0]));

              var controlValueTo = _this.getValidDate(_this.dateTimeAdapter.deserialize(control.value[1]));

              return !_this.min || !controlValueFrom || !controlValueTo || _this.dateTimeAdapter.compare(_this.min, controlValueFrom) <= 0 ? null : {
                'owlDateTimeMin': {
                  'min': _this.min,
                  'actual': [controlValueFrom, controlValueTo]
                }
              };
            }
          };

          this.maxValidator = function (control) {
            if (_this.isInSingleMode) {
              var controlValue = _this.getValidDate(_this.dateTimeAdapter.deserialize(control.value));

              return !_this.max || !controlValue || _this.dateTimeAdapter.compare(_this.max, controlValue) >= 0 ? null : {
                'owlDateTimeMax': {
                  'max': _this.max,
                  'actual': controlValue
                }
              };
            } else if (_this.isInRangeMode && control.value) {
              var controlValueFrom = _this.getValidDate(_this.dateTimeAdapter.deserialize(control.value[0]));

              var controlValueTo = _this.getValidDate(_this.dateTimeAdapter.deserialize(control.value[1]));

              return !_this.max || !controlValueFrom || !controlValueTo || _this.dateTimeAdapter.compare(_this.max, controlValueTo) >= 0 ? null : {
                'owlDateTimeMax': {
                  'max': _this.max,
                  'actual': [controlValueFrom, controlValueTo]
                }
              };
            }
          };

          this.filterValidator = function (control) {
            var controlValue = _this.getValidDate(_this.dateTimeAdapter.deserialize(control.value));

            return !_this._dateTimeFilter || !controlValue || _this._dateTimeFilter(controlValue) ? null : {
              'owlDateTimeFilter': true
            };
          };

          this.rangeValidator = function (control) {
            if (_this.isInSingleMode || !control.value) {
              return null;
            }

            var controlValueFrom = _this.getValidDate(_this.dateTimeAdapter.deserialize(control.value[0]));

            var controlValueTo = _this.getValidDate(_this.dateTimeAdapter.deserialize(control.value[1]));

            return !controlValueFrom || !controlValueTo || _this.dateTimeAdapter.compare(controlValueFrom, controlValueTo) <= 0 ? null : {
              'owlDateTimeRange': true
            };
          };

          this.validator = _angular_forms__WEBPACK_IMPORTED_MODULE_2__["Validators"].compose([this.parseValidator, this.minValidator, this.maxValidator, this.filterValidator, this.rangeValidator]);
          this.valueChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();
          this.disabledChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();

          if (!this.dateTimeAdapter) {
            throw Error("OwlDateTimePicker: No provider found for DateTimePicker. You must import one of the following " + "modules at your application root: OwlNativeDateTimeModule, OwlMomentDateTimeModule, or provide a " + "custom implementation.");
          }

          if (!this.dateTimeFormats) {
            throw Error("OwlDateTimePicker: No provider found for OWL_DATE_TIME_FORMATS. You must import one of the following " + "modules at your application root: OwlNativeDateTimeModule, OwlMomentDateTimeModule, or provide a " + "custom implementation.");
          }

          this.localeSub = this.dateTimeAdapter.localeChanges.subscribe(function () {
            _this.value = _this.value;
          });
        }

        Object.defineProperty(OwlDateTimeInputDirective.prototype, "owlDateTime", {
          set: function set(value) {
            this.registerDateTimePicker(value);
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInputDirective.prototype, "owlDateTimeFilter", {
          set: function set(filter) {
            this._dateTimeFilter = filter;
            this.validatorOnChange();
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInputDirective.prototype, "dateTimeFilter", {
          get: function get() {
            return this._dateTimeFilter;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInputDirective.prototype, "disabled", {
          get: function get() {
            return !!this._disabled;
          },
          set: function set(value) {
            var newValue = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_7__["coerceBooleanProperty"])(value);
            var element = this.elmRef.nativeElement;

            if (this._disabled !== newValue) {
              this._disabled = newValue;
              this.disabledChange.emit(newValue);
            }

            if (newValue && element.blur) {
              element.blur();
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInputDirective.prototype, "min", {
          get: function get() {
            return this._min;
          },
          set: function set(value) {
            this._min = this.getValidDate(this.dateTimeAdapter.deserialize(value));
            this.validatorOnChange();
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInputDirective.prototype, "max", {
          get: function get() {
            return this._max;
          },
          set: function set(value) {
            this._max = this.getValidDate(this.dateTimeAdapter.deserialize(value));
            this.validatorOnChange();
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInputDirective.prototype, "selectMode", {
          get: function get() {
            return this._selectMode;
          },
          set: function set(mode) {
            if (mode !== 'single' && mode !== 'range' && mode !== 'rangeFrom' && mode !== 'rangeTo') {
              throw Error('OwlDateTime Error: invalid selectMode value!');
            }

            this._selectMode = mode;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInputDirective.prototype, "value", {
          get: function get() {
            return this._value;
          },
          set: function set(value) {
            value = this.dateTimeAdapter.deserialize(value);
            this.lastValueValid = !value || this.dateTimeAdapter.isValid(value);
            value = this.getValidDate(value);
            var oldDate = this._value;
            this._value = value;
            this.formatNativeInputValue();

            if (!this.dateTimeAdapter.isEqual(oldDate, value)) {
              this.valueChange.emit(value);
            }
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInputDirective.prototype, "values", {
          get: function get() {
            return this._values;
          },
          set: function set(values) {
            var _this = this;

            if (values && values.length > 0) {
              this._values = values.map(function (v) {
                v = _this.dateTimeAdapter.deserialize(v);
                return _this.getValidDate(v);
              });
              this.lastValueValid = (!this._values[0] || this.dateTimeAdapter.isValid(this._values[0])) && (!this._values[1] || this.dateTimeAdapter.isValid(this._values[1]));
            } else {
              this._values = [];
              this.lastValueValid = true;
            }

            this.formatNativeInputValue();
            this.valueChange.emit(this._values);
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInputDirective.prototype, "elementRef", {
          get: function get() {
            return this.elmRef;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInputDirective.prototype, "isInSingleMode", {
          get: function get() {
            return this._selectMode === 'single';
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInputDirective.prototype, "isInRangeMode", {
          get: function get() {
            return this._selectMode === 'range' || this._selectMode === 'rangeFrom' || this._selectMode === 'rangeTo';
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInputDirective.prototype, "owlDateTimeInputAriaHaspopup", {
          get: function get() {
            return true;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInputDirective.prototype, "owlDateTimeInputAriaOwns", {
          get: function get() {
            return this.dtPicker.opened && this.dtPicker.id || null;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInputDirective.prototype, "minIso8601", {
          get: function get() {
            return this.min ? this.dateTimeAdapter.toIso8601(this.min) : null;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInputDirective.prototype, "maxIso8601", {
          get: function get() {
            return this.max ? this.dateTimeAdapter.toIso8601(this.max) : null;
          },
          enumerable: true,
          configurable: true
        });
        Object.defineProperty(OwlDateTimeInputDirective.prototype, "owlDateTimeInputDisabled", {
          get: function get() {
            return this.disabled;
          },
          enumerable: true,
          configurable: true
        });

        OwlDateTimeInputDirective.prototype.ngOnInit = function () {
          if (!this.dtPicker) {
            throw Error("OwlDateTimePicker: the picker input doesn't have any associated owl-date-time component");
          }
        };

        OwlDateTimeInputDirective.prototype.ngAfterContentInit = function () {
          var _this = this;

          this.dtPickerSub = this.dtPicker.confirmSelectedChange.subscribe(function (selecteds) {
            if (Array.isArray(selecteds)) {
              _this.values = selecteds;
            } else {
              _this.value = selecteds;
            }

            _this.onModelChange(selecteds);

            _this.onModelTouched();

            _this.dateTimeChange.emit({
              source: _this,
              value: selecteds,
              input: _this.elmRef.nativeElement
            });

            _this.dateTimeInput.emit({
              source: _this,
              value: selecteds,
              input: _this.elmRef.nativeElement
            });
          });
        };

        OwlDateTimeInputDirective.prototype.ngOnDestroy = function () {
          this.dtPickerSub.unsubscribe();
          this.localeSub.unsubscribe();
          this.valueChange.complete();
          this.disabledChange.complete();
        };

        OwlDateTimeInputDirective.prototype.writeValue = function (value) {
          if (this.isInSingleMode) {
            this.value = value;
          } else {
            this.values = value;
          }
        };

        OwlDateTimeInputDirective.prototype.registerOnChange = function (fn) {
          this.onModelChange = fn;
        };

        OwlDateTimeInputDirective.prototype.registerOnTouched = function (fn) {
          this.onModelTouched = fn;
        };

        OwlDateTimeInputDirective.prototype.setDisabledState = function (isDisabled) {
          this.disabled = isDisabled;
        };

        OwlDateTimeInputDirective.prototype.validate = function (c) {
          return this.validator ? this.validator(c) : null;
        };

        OwlDateTimeInputDirective.prototype.registerOnValidatorChange = function (fn) {
          this.validatorOnChange = fn;
        };

        OwlDateTimeInputDirective.prototype.handleKeydownOnHost = function (event) {
          if (event.altKey && event.keyCode === _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["DOWN_ARROW"]) {
            this.dtPicker.open();
            event.preventDefault();
          }
        };

        OwlDateTimeInputDirective.prototype.handleBlurOnHost = function (event) {
          this.onModelTouched();
        };

        OwlDateTimeInputDirective.prototype.handleInputOnHost = function (event) {
          var value = event.target.value;

          if (this._selectMode === 'single') {
            this.changeInputInSingleMode(value);
          } else if (this._selectMode === 'range') {
            this.changeInputInRangeMode(value);
          } else {
            this.changeInputInRangeFromToMode(value);
          }
        };

        OwlDateTimeInputDirective.prototype.handleChangeOnHost = function (event) {
          var v;

          if (this.isInSingleMode) {
            v = this.value;
          } else if (this.isInRangeMode) {
            v = this.values;
          }

          this.dateTimeChange.emit({
            source: this,
            value: v,
            input: this.elmRef.nativeElement
          });
        };

        OwlDateTimeInputDirective.prototype.formatNativeInputValue = function () {
          if (this.isInSingleMode) {
            this.renderer.setProperty(this.elmRef.nativeElement, 'value', this._value ? this.dateTimeAdapter.format(this._value, this.dtPicker.formatString) : '');
          } else if (this.isInRangeMode) {
            if (this._values && this.values.length > 0) {
              var from = this._values[0];
              var to = this._values[1];
              var fromFormatted = from ? this.dateTimeAdapter.format(from, this.dtPicker.formatString) : '';
              var toFormatted = to ? this.dateTimeAdapter.format(to, this.dtPicker.formatString) : '';

              if (!fromFormatted && !toFormatted) {
                this.renderer.setProperty(this.elmRef.nativeElement, 'value', null);
              } else {
                if (this._selectMode === 'range') {
                  this.renderer.setProperty(this.elmRef.nativeElement, 'value', fromFormatted + ' ' + this.rangeSeparator + ' ' + toFormatted);
                } else if (this._selectMode === 'rangeFrom') {
                  this.renderer.setProperty(this.elmRef.nativeElement, 'value', fromFormatted);
                } else if (this._selectMode === 'rangeTo') {
                  this.renderer.setProperty(this.elmRef.nativeElement, 'value', toFormatted);
                }
              }
            } else {
              this.renderer.setProperty(this.elmRef.nativeElement, 'value', '');
            }
          }

          return;
        };

        OwlDateTimeInputDirective.prototype.registerDateTimePicker = function (picker) {
          if (picker) {
            this.dtPicker = picker;
            this.dtPicker.registerInput(this);
          }
        };

        OwlDateTimeInputDirective.prototype.getValidDate = function (obj) {
          return this.dateTimeAdapter.isDateInstance(obj) && this.dateTimeAdapter.isValid(obj) ? obj : null;
        };

        OwlDateTimeInputDirective.prototype.convertTimeStringToDateTimeString = function (timeString, dateTime) {
          if (timeString) {
            var v = dateTime || this.dateTimeAdapter.now();
            var dateString = this.dateTimeAdapter.format(v, this.dateTimeFormats.datePickerInput);
            return dateString + ' ' + timeString;
          } else {
            return null;
          }
        };

        OwlDateTimeInputDirective.prototype.changeInputInSingleMode = function (inputValue) {
          var value = inputValue;

          if (this.dtPicker.pickerType === 'timer') {
            value = this.convertTimeStringToDateTimeString(value, this.value);
          }

          var result = this.dateTimeAdapter.parse(value, this.dateTimeFormats.parseInput);
          this.lastValueValid = !result || this.dateTimeAdapter.isValid(result);
          result = this.getValidDate(result);

          if (!this.isSameValue(result, this._value) || result === null) {
            this._value = result;
            this.valueChange.emit(result);
            this.onModelChange(result);
            this.dateTimeInput.emit({
              source: this,
              value: result,
              input: this.elmRef.nativeElement
            });
          }
        };

        OwlDateTimeInputDirective.prototype.changeInputInRangeFromToMode = function (inputValue) {
          var originalValue = this._selectMode === 'rangeFrom' ? this._values[0] : this._values[1];

          if (this.dtPicker.pickerType === 'timer') {
            inputValue = this.convertTimeStringToDateTimeString(inputValue, originalValue);
          }

          var result = this.dateTimeAdapter.parse(inputValue, this.dateTimeFormats.parseInput);
          this.lastValueValid = !result || this.dateTimeAdapter.isValid(result);
          result = this.getValidDate(result);

          if (this._selectMode === 'rangeFrom' && this.isSameValue(result, this._values[0]) && result || this._selectMode === 'rangeTo' && this.isSameValue(result, this._values[1]) && result) {
            return;
          }

          this._values = this._selectMode === 'rangeFrom' ? [result, this._values[1]] : [this._values[0], result];
          this.valueChange.emit(this._values);
          this.onModelChange(this._values);
          this.dateTimeInput.emit({
            source: this,
            value: this._values,
            input: this.elmRef.nativeElement
          });
        };

        OwlDateTimeInputDirective.prototype.changeInputInRangeMode = function (inputValue) {
          var selecteds = inputValue.split(this.rangeSeparator);
          var fromString = selecteds[0];
          var toString = selecteds[1];

          if (this.dtPicker.pickerType === 'timer') {
            fromString = this.convertTimeStringToDateTimeString(fromString, this.values[0]);
            toString = this.convertTimeStringToDateTimeString(toString, this.values[1]);
          }

          var from = this.dateTimeAdapter.parse(fromString, this.dateTimeFormats.parseInput);
          var to = this.dateTimeAdapter.parse(toString, this.dateTimeFormats.parseInput);
          this.lastValueValid = (!from || this.dateTimeAdapter.isValid(from)) && (!to || this.dateTimeAdapter.isValid(to));
          from = this.getValidDate(from);
          to = this.getValidDate(to);

          if (!this.isSameValue(from, this._values[0]) || !this.isSameValue(to, this._values[1]) || from === null && to === null) {
            this._values = [from, to];
            this.valueChange.emit(this._values);
            this.onModelChange(this._values);
            this.dateTimeInput.emit({
              source: this,
              value: this._values,
              input: this.elmRef.nativeElement
            });
          }
        };

        OwlDateTimeInputDirective.prototype.isSameValue = function (first, second) {
          if (first && second) {
            return this.dateTimeAdapter.compare(first, second) === 0;
          }

          return first == second;
        };

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", _date_time_picker_component__WEBPACK_IMPORTED_MODULE_4__["OwlDateTimeComponent"]), __metadata("design:paramtypes", [_date_time_picker_component__WEBPACK_IMPORTED_MODULE_4__["OwlDateTimeComponent"]])], OwlDateTimeInputDirective.prototype, "owlDateTime", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Function), __metadata("design:paramtypes", [Function])], OwlDateTimeInputDirective.prototype, "owlDateTimeFilter", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Boolean)], OwlDateTimeInputDirective.prototype, "_disabled", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlDateTimeInputDirective.prototype, "min", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlDateTimeInputDirective.prototype, "max", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", String), __metadata("design:paramtypes", [String])], OwlDateTimeInputDirective.prototype, "selectMode", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object)], OwlDateTimeInputDirective.prototype, "rangeSeparator", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], OwlDateTimeInputDirective.prototype, "value", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), __metadata("design:type", Array), __metadata("design:paramtypes", [Array])], OwlDateTimeInputDirective.prototype, "values", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", Object)], OwlDateTimeInputDirective.prototype, "dateTimeChange", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), __metadata("design:type", Object)], OwlDateTimeInputDirective.prototype, "dateTimeInput", void 0);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('attr.aria-haspopup'), __metadata("design:type", Boolean), __metadata("design:paramtypes", [])], OwlDateTimeInputDirective.prototype, "owlDateTimeInputAriaHaspopup", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('attr.aria-owns'), __metadata("design:type", String), __metadata("design:paramtypes", [])], OwlDateTimeInputDirective.prototype, "owlDateTimeInputAriaOwns", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('attr.min'), __metadata("design:type", String), __metadata("design:paramtypes", [])], OwlDateTimeInputDirective.prototype, "minIso8601", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('attr.max'), __metadata("design:type", String), __metadata("design:paramtypes", [])], OwlDateTimeInputDirective.prototype, "maxIso8601", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('disabled'), __metadata("design:type", Boolean), __metadata("design:paramtypes", [])], OwlDateTimeInputDirective.prototype, "owlDateTimeInputDisabled", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"])('keydown', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [KeyboardEvent]), __metadata("design:returntype", void 0)], OwlDateTimeInputDirective.prototype, "handleKeydownOnHost", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"])('blur', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [Event]), __metadata("design:returntype", void 0)], OwlDateTimeInputDirective.prototype, "handleBlurOnHost", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"])('input', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", void 0)], OwlDateTimeInputDirective.prototype, "handleInputOnHost", null);

        __decorate([Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"])('change', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", void 0)], OwlDateTimeInputDirective.prototype, "handleChangeOnHost", null);

        OwlDateTimeInputDirective = __decorate([__param(2, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __param(3, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"])()), __param(3, Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"])(_adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_5__["OWL_DATE_TIME_FORMATS"])), __metadata("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"], _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__["DateTimeAdapter"], Object])], OwlDateTimeInputDirective);

        OwlDateTimeInputDirective.ɵfac = function OwlDateTimeInputDirective_Factory(t) {
          return new (t || OwlDateTimeInputDirective)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__["DateTimeAdapter"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_5__["OWL_DATE_TIME_FORMATS"], 8));
        };

        OwlDateTimeInputDirective.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineDirective"]({
          type: OwlDateTimeInputDirective,
          selectors: [["input", "owlDateTime", ""]],
          hostVars: 5,
          hostBindings: function OwlDateTimeInputDirective_HostBindings(rf, ctx) {
            if (rf & 1) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("keydown", function OwlDateTimeInputDirective_keydown_HostBindingHandler($event) {
                return ctx.handleKeydownOnHost($event);
              })("blur", function OwlDateTimeInputDirective_blur_HostBindingHandler($event) {
                return ctx.handleBlurOnHost($event);
              })("input", function OwlDateTimeInputDirective_input_HostBindingHandler($event) {
                return ctx.handleInputOnHost($event);
              })("change", function OwlDateTimeInputDirective_change_HostBindingHandler($event) {
                return ctx.handleChangeOnHost($event);
              });
            }

            if (rf & 2) {
              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵhostProperty"]("disabled", ctx.owlDateTimeInputDisabled);

              _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵattribute"]("aria-haspopup", ctx.owlDateTimeInputAriaHaspopup)("aria-owns", ctx.owlDateTimeInputAriaOwns)("min", ctx.minIso8601)("max", ctx.maxIso8601);
            }
          },
          inputs: {
            rangeSeparator: "rangeSeparator",
            owlDateTime: "owlDateTime",
            owlDateTimeFilter: "owlDateTimeFilter",
            min: "min",
            max: "max",
            selectMode: "selectMode",
            value: "value",
            values: "values",
            _disabled: "_disabled"
          },
          outputs: {
            dateTimeChange: "dateTimeChange",
            dateTimeInput: "dateTimeInput"
          },
          exportAs: ["owlDateTimeInput"],
          features: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵProvidersFeature"]([OWL_DATETIME_VALUE_ACCESSOR, OWL_DATETIME_VALIDATORS])]
        });

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](OwlDateTimeInputDirective, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"],
            args: [{
              selector: 'input[owlDateTime]',
              exportAs: 'owlDateTimeInput',
              providers: [OWL_DATETIME_VALUE_ACCESSOR, OWL_DATETIME_VALIDATORS]
            }]
          }], function () {
            return [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"]
            }, {
              type: _adapter_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_1__["DateTimeAdapter"],
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
              }]
            }, {
              type: Object,
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
              }, {
                type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
                args: [_adapter_date_time_format_class__WEBPACK_IMPORTED_MODULE_5__["OWL_DATE_TIME_FORMATS"]]
              }]
            }];
          }, {
            rangeSeparator: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            dateTimeChange: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            dateTimeInput: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"]
            }],
            owlDateTime: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            owlDateTimeFilter: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            min: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            max: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            selectMode: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            value: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            values: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }],
            owlDateTimeInputAriaHaspopup: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['attr.aria-haspopup']
            }],
            owlDateTimeInputAriaOwns: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['attr.aria-owns']
            }],
            minIso8601: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['attr.min']
            }],
            maxIso8601: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['attr.max']
            }],
            owlDateTimeInputDisabled: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"],
              args: ['disabled']
            }],
            handleKeydownOnHost: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
              args: ['keydown', ['$event']]
            }],
            handleBlurOnHost: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
              args: ['blur', ['$event']]
            }],
            handleInputOnHost: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
              args: ['input', ['$event']]
            }],
            handleChangeOnHost: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"],
              args: ['change', ['$event']]
            }],
            _disabled: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"]
            }]
          });
        })();

        return OwlDateTimeInputDirective;
      }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64, 

      /***/

    },

    /***/
    "qgXg":
    /*!****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/scheduler/queue.js ***!
      \****************************************************************/

    /*! exports provided: queueScheduler, queue */

    /***/
    function qgXg(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "queueScheduler", function () {
        return queueScheduler;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "queue", function () {
        return queue;
      });
      /* harmony import */


      var _QueueAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./QueueAction */
      "YuR2");
      /* harmony import */


      var _QueueScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./QueueScheduler */
      "Hh5Z");

      var queueScheduler = new _QueueScheduler__WEBPACK_IMPORTED_MODULE_1__["QueueScheduler"](_QueueAction__WEBPACK_IMPORTED_MODULE_0__["QueueAction"]);
      var queue = queueScheduler; //# sourceMappingURL=queue.js.map

      /***/
    },

    /***/
    "qlzE":
    /*!******************************************************************!*\
      !*** ./node_modules/@angular/http/__ivy_ngcc__/fesm2015/http.js ***!
      \******************************************************************/

    /*! exports provided: ɵangular_packages_http_http_e, ɵangular_packages_http_http_f, ɵangular_packages_http_http_a, ɵangular_packages_http_http_b, ɵangular_packages_http_http_c, BrowserXhr, JSONPBackend, JSONPConnection, CookieXSRFStrategy, XHRBackend, XHRConnection, BaseRequestOptions, RequestOptions, BaseResponseOptions, ResponseOptions, ReadyState, RequestMethod, ResponseContentType, ResponseType, Headers, Http, Jsonp, HttpModule, JsonpModule, Connection, ConnectionBackend, XSRFStrategy, Request, Response, QueryEncoder, URLSearchParams, VERSION */

    /***/
    function qlzE(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_http_http_e", function () {
        return BrowserJsonp;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_http_http_f", function () {
        return Body;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_http_http_a", function () {
        return _createDefaultCookieXSRFStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_http_http_b", function () {
        return httpFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_http_http_c", function () {
        return jsonpFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BrowserXhr", function () {
        return BrowserXhr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "JSONPBackend", function () {
        return JSONPBackend;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "JSONPConnection", function () {
        return JSONPConnection;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CookieXSRFStrategy", function () {
        return CookieXSRFStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "XHRBackend", function () {
        return XHRBackend;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "XHRConnection", function () {
        return XHRConnection;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BaseRequestOptions", function () {
        return BaseRequestOptions;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RequestOptions", function () {
        return RequestOptions;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BaseResponseOptions", function () {
        return BaseResponseOptions;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ResponseOptions", function () {
        return ResponseOptions;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ReadyState", function () {
        return ReadyState;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RequestMethod", function () {
        return RequestMethod;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ResponseContentType", function () {
        return ResponseContentType;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ResponseType", function () {
        return ResponseType;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Headers", function () {
        return Headers;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Http", function () {
        return Http;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Jsonp", function () {
        return Jsonp;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HttpModule", function () {
        return HttpModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "JsonpModule", function () {
        return JsonpModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Connection", function () {
        return Connection;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ConnectionBackend", function () {
        return ConnectionBackend;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "XSRFStrategy", function () {
        return XSRFStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Request", function () {
        return Request;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Response", function () {
        return Response;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "QueryEncoder", function () {
        return QueryEncoder;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "URLSearchParams", function () {
        return URLSearchParams;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "VERSION", function () {
        return VERSION;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/platform-browser */
      "jhN1");
      /**
       * @license Angular v7.2.16
       * (c) 2010-2019 Google LLC. https://angular.io/
       * License: MIT
       */

      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * A backend for http that uses the `XMLHttpRequest` browser API.
       *
       * Take care not to evaluate this in non-browser contexts.
       *
       * @deprecated see https://angular.io/guide/http
       * \@publicApi
       */


      var BrowserXhr = /*#__PURE__*/function () {
        function BrowserXhr() {
          _classCallCheck2(this, BrowserXhr);
        }
        /**
         * @return {?}
         */


        _createClass2(BrowserXhr, [{
          key: "build",
          value: function build() {
            return (
              /** @type {?} */
              new XMLHttpRequest()
            );
          }
        }]);

        return BrowserXhr;
      }();

      BrowserXhr.ɵfac = function BrowserXhr_Factory(t) {
        return new (t || BrowserXhr)();
      };

      BrowserXhr.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: BrowserXhr,
        factory: BrowserXhr.ɵfac
      });
      /** @nocollapse */

      BrowserXhr.ctorParameters = function () {
        return [];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BrowserXhr, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [];
        }, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @license
       * Copyright Google Inc. All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** @enum {number} */


      var RequestMethod = {
        Get: 0,
        Post: 1,
        Put: 2,
        Delete: 3,
        Options: 4,
        Head: 5,
        Patch: 6
      };
      RequestMethod[RequestMethod.Get] = 'Get';
      RequestMethod[RequestMethod.Post] = 'Post';
      RequestMethod[RequestMethod.Put] = 'Put';
      RequestMethod[RequestMethod.Delete] = 'Delete';
      RequestMethod[RequestMethod.Options] = 'Options';
      RequestMethod[RequestMethod.Head] = 'Head';
      RequestMethod[RequestMethod.Patch] = 'Patch';
      /** @enum {number} */

      var ReadyState = {
        Unsent: 0,
        Open: 1,
        HeadersReceived: 2,
        Loading: 3,
        Done: 4,
        Cancelled: 5
      };
      ReadyState[ReadyState.Unsent] = 'Unsent';
      ReadyState[ReadyState.Open] = 'Open';
      ReadyState[ReadyState.HeadersReceived] = 'HeadersReceived';
      ReadyState[ReadyState.Loading] = 'Loading';
      ReadyState[ReadyState.Done] = 'Done';
      ReadyState[ReadyState.Cancelled] = 'Cancelled';
      /** @enum {number} */

      var ResponseType = {
        Basic: 0,
        Cors: 1,
        Default: 2,
        Error: 3,
        Opaque: 4
      };
      ResponseType[ResponseType.Basic] = 'Basic';
      ResponseType[ResponseType.Cors] = 'Cors';
      ResponseType[ResponseType.Default] = 'Default';
      ResponseType[ResponseType.Error] = 'Error';
      ResponseType[ResponseType.Opaque] = 'Opaque';
      /** @enum {number} */

      var ContentType = {
        NONE: 0,
        JSON: 1,
        FORM: 2,
        FORM_DATA: 3,
        TEXT: 4,
        BLOB: 5,
        ARRAY_BUFFER: 6
      };
      ContentType[ContentType.NONE] = 'NONE';
      ContentType[ContentType.JSON] = 'JSON';
      ContentType[ContentType.FORM] = 'FORM';
      ContentType[ContentType.FORM_DATA] = 'FORM_DATA';
      ContentType[ContentType.TEXT] = 'TEXT';
      ContentType[ContentType.BLOB] = 'BLOB';
      ContentType[ContentType.ARRAY_BUFFER] = 'ARRAY_BUFFER';
      /** @enum {number} */

      var ResponseContentType = {
        Text: 0,
        Json: 1,
        ArrayBuffer: 2,
        Blob: 3
      };
      ResponseContentType[ResponseContentType.Text] = 'Text';
      ResponseContentType[ResponseContentType.Json] = 'Json';
      ResponseContentType[ResponseContentType.ArrayBuffer] = 'ArrayBuffer';
      ResponseContentType[ResponseContentType.Blob] = 'Blob';
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @license
       * Copyright Google Inc. All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Polyfill for [Headers](https://developer.mozilla.org/en-US/docs/Web/API/Headers/Headers), as
       * specified in the [Fetch Spec](https://fetch.spec.whatwg.org/#headers-class).
       *
       * The only known difference between this `Headers` implementation and the spec is the
       * lack of an `entries` method.
       *
       * \@usageNotes
       * ### Example
       *
       * ```
       * import {Headers} from '\@angular/http';
       *
       * var firstHeaders = new Headers();
       * firstHeaders.append('Content-Type', 'image/jpeg');
       * console.log(firstHeaders.get('Content-Type')) //'image/jpeg'
       *
       * // Create headers from Plain Old JavaScript Object
       * var secondHeaders = new Headers({
       *   'X-My-Custom-Header': 'Angular'
       * });
       * console.log(secondHeaders.get('X-My-Custom-Header')); //'Angular'
       *
       * var thirdHeaders = new Headers(secondHeaders);
       * console.log(thirdHeaders.get('X-My-Custom-Header')); //'Angular'
       * ```
       *
       * @deprecated see https://angular.io/guide/http
       * \@publicApi
       */

      var Headers = /*#__PURE__*/function () {
        // TODO(vicb): any -> string|string[]

        /**
         * @param {?=} headers
         */
        function Headers(headers) {
          var _this841 = this;

          _classCallCheck2(this, Headers);

          /**
           * \@internal header names are lower case
           */
          this._headers = new Map();
          /**
           * \@internal map lower case names to actual names
           */

          this._normalizedNames = new Map();

          if (!headers) {
            return;
          }

          if (headers instanceof Headers) {
            headers.forEach(function (values, name) {
              values.forEach(function (value) {
                return _this841.append(name, value);
              });
            });
            return;
          }

          Object.keys(headers).forEach(function (name) {
            /** @type {?} */
            var values = Array.isArray(headers[name]) ? headers[name] : [headers[name]];

            _this841["delete"](name);

            values.forEach(function (value) {
              return _this841.append(name, value);
            });
          });
        }
        /**
         * Returns a new Headers instance from the given DOMString of Response Headers
         * @param {?} headersString
         * @return {?}
         */


        _createClass2(Headers, [{
          key: "append",
          value:
          /**
           * Appends a header to existing list of header values for a given header name.
           * @param {?} name
           * @param {?} value
           * @return {?}
           */
          function append(name, value) {
            /** @type {?} */
            var values = this.getAll(name);

            if (values === null) {
              this.set(name, value);
            } else {
              values.push(value);
            }
          }
          /**
           * Deletes all header values for the given name.
           * @param {?} name
           * @return {?}
           */

        }, {
          key: "delete",
          value: function _delete(name) {
            /** @type {?} */
            var lcName = name.toLowerCase();

            this._normalizedNames["delete"](lcName);

            this._headers["delete"](lcName);
          }
          /**
           * @param {?} fn
           * @return {?}
           */

        }, {
          key: "forEach",
          value: function forEach(fn) {
            var _this842 = this;

            this._headers.forEach(function (values, lcName) {
              return fn(values, _this842._normalizedNames.get(lcName), _this842._headers);
            });
          }
          /**
           * Returns first header that matches given name.
           * @param {?} name
           * @return {?}
           */

        }, {
          key: "get",
          value: function get(name) {
            /** @type {?} */
            var values = this.getAll(name);

            if (values === null) {
              return null;
            }

            return values.length > 0 ? values[0] : null;
          }
          /**
           * Checks for existence of header by given name.
           * @param {?} name
           * @return {?}
           */

        }, {
          key: "has",
          value: function has(name) {
            return this._headers.has(name.toLowerCase());
          }
          /**
           * Returns the names of the headers
           * @return {?}
           */

        }, {
          key: "keys",
          value: function keys() {
            return Array.from(this._normalizedNames.values());
          }
          /**
           * Sets or overrides header value for given name.
           * @param {?} name
           * @param {?} value
           * @return {?}
           */

        }, {
          key: "set",
          value: function set(name, value) {
            if (Array.isArray(value)) {
              if (value.length) {
                this._headers.set(name.toLowerCase(), [value.join(',')]);
              }
            } else {
              this._headers.set(name.toLowerCase(), [value]);
            }

            this.mayBeSetNormalizedName(name);
          }
          /**
           * Returns values of all headers.
           * @return {?}
           */

        }, {
          key: "values",
          value: function values() {
            return Array.from(this._headers.values());
          }
          /**
           * Returns string of all headers.
           * @return {?}
           */
          // TODO(vicb): returns {[name: string]: string[]}

        }, {
          key: "toJSON",
          value: function toJSON() {
            var _this843 = this;

            /** @type {?} */
            var serialized = {};

            this._headers.forEach(function (values, name) {
              /** @type {?} */
              var split = [];
              values.forEach(function (v) {
                return split.push.apply(split, _toConsumableArray(v.split(',')));
              });
              serialized[
              /** @type {?} */
              _this843._normalizedNames.get(name)] = split;
            });

            return serialized;
          }
          /**
           * Returns list of header values for a given name.
           * @param {?} name
           * @return {?}
           */

        }, {
          key: "getAll",
          value: function getAll(name) {
            return this.has(name) ? this._headers.get(name.toLowerCase()) || null : null;
          }
          /**
           * This method is not implemented.
           * @return {?}
           */

        }, {
          key: "entries",
          value: function entries() {
            throw new Error('"entries" method is not implemented on Headers class');
          }
          /**
           * @private
           * @param {?} name
           * @return {?}
           */

        }, {
          key: "mayBeSetNormalizedName",
          value: function mayBeSetNormalizedName(name) {
            /** @type {?} */
            var lcName = name.toLowerCase();

            if (!this._normalizedNames.has(lcName)) {
              this._normalizedNames.set(lcName, name);
            }
          }
        }], [{
          key: "fromResponseHeaderString",
          value: function fromResponseHeaderString(headersString) {
            /** @type {?} */
            var headers = new Headers();
            headersString.split('\n').forEach(function (line) {
              /** @type {?} */
              var index = line.indexOf(':');

              if (index > 0) {
                /** @type {?} */
                var name = line.slice(0, index);
                /** @type {?} */

                var value = line.slice(index + 1).trim();
                headers.set(name, value);
              }
            });
            return headers;
          }
        }]);

        return Headers;
      }();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * Creates a response options object to be optionally provided when instantiating a
       * {\@link Response}.
       *
       * This class is based on the `ResponseInit` description in the [Fetch
       * Spec](https://fetch.spec.whatwg.org/#responseinit).
       *
       * All values are null by default. Typical defaults can be found in the
       * {\@link BaseResponseOptions} class, which sub-classes `ResponseOptions`.
       *
       * This class may be used in tests to build {\@link Response Responses} for
       * mock responses (see {\@link MockBackend}).
       *
       * \@usageNotes
       * ### Example
       *
       * ```typescript
       * import {ResponseOptions, Response} from '\@angular/http';
       *
       * var options = new ResponseOptions({
       *   body: '{"name":"Jeff"}'
       * });
       * var res = new Response(options);
       *
       * console.log('res.json():', res.json()); // Object {name: "Jeff"}
       * ```
       *
       * @deprecated see https://angular.io/guide/http
       * \@publicApi
       */


      var ResponseOptions = /*#__PURE__*/function () {
        /**
         * @param {?=} opts
         */
        function ResponseOptions() {
          var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

          _classCallCheck2(this, ResponseOptions);

          var body = opts.body,
              status = opts.status,
              headers = opts.headers,
              statusText = opts.statusText,
              type = opts.type,
              url = opts.url;
          this.body = body != null ? body : null;
          this.status = status != null ? status : null;
          this.headers = headers != null ? headers : null;
          this.statusText = statusText != null ? statusText : null;
          this.type = type != null ? type : null;
          this.url = url != null ? url : null;
        }
        /**
         * Creates a copy of the `ResponseOptions` instance, using the optional input as values to
         * override
         * existing values. This method will not change the values of the instance on which it is being
         * called.
         *
         * This may be useful when sharing a base `ResponseOptions` object inside tests,
         * where certain properties may change from test to test.
         *
         * \@usageNotes
         * ### Example
         *
         * ```typescript
         * import {ResponseOptions, Response} from '\@angular/http';
         *
         * var options = new ResponseOptions({
         *   body: {name: 'Jeff'}
         * });
         * var res = new Response(options.merge({
         *   url: 'https://google.com'
         * }));
         * console.log('options.url:', options.url); // null
         * console.log('res.json():', res.json()); // Object {name: "Jeff"}
         * console.log('res.url:', res.url); // https://google.com
         * ```
         * @param {?=} options
         * @return {?}
         */


        _createClass2(ResponseOptions, [{
          key: "merge",
          value: function merge(options) {
            return new ResponseOptions({
              body: options && options.body != null ? options.body : this.body,
              status: options && options.status != null ? options.status : this.status,
              headers: options && options.headers != null ? options.headers : this.headers,
              statusText: options && options.statusText != null ? options.statusText : this.statusText,
              type: options && options.type != null ? options.type : this.type,
              url: options && options.url != null ? options.url : this.url
            });
          }
        }]);

        return ResponseOptions;
      }();
      /**
       * Subclass of {\@link ResponseOptions}, with default values.
       *
       * Default values:
       *  * status: 200
       *  * headers: empty {\@link Headers} object
       *
       * This class could be extended and bound to the {\@link ResponseOptions} class
       * when configuring an {\@link Injector}, in order to override the default options
       * used by {\@link Http} to create {\@link Response Responses}.
       *
       * \@usageNotes
       * ### Example
       *
       * ```typescript
       * import {provide} from '\@angular/core';
       * import {bootstrap} from '\@angular/platform-browser/browser';
       * import {HTTP_PROVIDERS, Headers, Http, BaseResponseOptions, ResponseOptions} from
       * '\@angular/http';
       * import {App} from './myapp';
       *
       * class MyOptions extends BaseResponseOptions {
       *   headers:Headers = new Headers({network: 'github'});
       * }
       *
       * bootstrap(App, [HTTP_PROVIDERS, {provide: ResponseOptions, useClass: MyOptions}]);
       * ```
       *
       * The options could also be extended when manually creating a {\@link Response}
       * object.
       *
       * ### Example
       *
       * ```
       * import {BaseResponseOptions, Response} from '\@angular/http';
       *
       * var options = new BaseResponseOptions();
       * var res = new Response(options.merge({
       *   body: 'Angular',
       *   headers: new Headers({framework: 'angular'})
       * }));
       * console.log('res.headers.get("framework"):', res.headers.get('framework')); // angular
       * console.log('res.text():', res.text()); // Angular;
       * ```
       *
       * @deprecated see https://angular.io/guide/http
       * \@publicApi
       */


      var BaseResponseOptions = /*#__PURE__*/function (_ResponseOptions) {
        _inherits2(BaseResponseOptions, _ResponseOptions);

        var _super359 = _createSuper(BaseResponseOptions);

        function BaseResponseOptions() {
          _classCallCheck2(this, BaseResponseOptions);

          return _super359.call(this, {
            status: 200,
            statusText: 'Ok',
            type: ResponseType.Default,
            headers: new Headers()
          });
        }

        return BaseResponseOptions;
      }(ResponseOptions);

      BaseResponseOptions.ɵfac = function BaseResponseOptions_Factory(t) {
        return new (t || BaseResponseOptions)();
      };

      BaseResponseOptions.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: BaseResponseOptions,
        factory: BaseResponseOptions.ɵfac
      });
      /** @nocollapse */

      BaseResponseOptions.ctorParameters = function () {
        return [];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BaseResponseOptions, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [];
        }, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @license
       * Copyright Google Inc. All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Abstract class from which real backends are derived.
       *
       * The primary purpose of a `ConnectionBackend` is to create new connections to fulfill a given
       * {\@link Request}.
       *
       * @deprecated see https://angular.io/guide/http
       * \@publicApi
       * @abstract
       */


      var ConnectionBackend = function ConnectionBackend() {
        _classCallCheck2(this, ConnectionBackend);
      };
      /**
       * Abstract class from which real connections are derived.
       *
       * @deprecated see https://angular.io/guide/http
       * \@publicApi
       * @abstract
       */


      var Connection = function Connection() {
        _classCallCheck2(this, Connection);
      };
      /**
       * An XSRFStrategy configures XSRF protection (e.g. via headers) on an HTTP request.
       *
       * @deprecated see https://angular.io/guide/http
       * \@publicApi
       * @abstract
       */


      var XSRFStrategy = function XSRFStrategy() {
        _classCallCheck2(this, XSRFStrategy);
      };
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} method
       * @return {?}
       */


      function normalizeMethodName(method) {
        if (typeof method !== 'string') return method;

        switch (method.toUpperCase()) {
          case 'GET':
            return RequestMethod.Get;

          case 'POST':
            return RequestMethod.Post;

          case 'PUT':
            return RequestMethod.Put;

          case 'DELETE':
            return RequestMethod.Delete;

          case 'OPTIONS':
            return RequestMethod.Options;

          case 'HEAD':
            return RequestMethod.Head;

          case 'PATCH':
            return RequestMethod.Patch;
        }

        throw new Error("Invalid request method. The method \"".concat(method, "\" is not supported."));
      }
      /** @type {?} */


      var isSuccess = function isSuccess(status) {
        return status >= 200 && status < 300;
      };
      /**
       * @param {?} xhr
       * @return {?}
       */


      function getResponseURL(xhr) {
        if ('responseURL' in xhr) {
          return xhr.responseURL;
        }

        if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {
          return xhr.getResponseHeader('X-Request-URL');
        }

        return null;
      }
      /**
       * @param {?} input
       * @return {?}
       */


      function stringToArrayBuffer(input) {
        /** @type {?} */
        var view = new Uint16Array(input.length);

        for (var i = 0, strLen = input.length; i < strLen; i++) {
          view[i] = input.charCodeAt(i);
        }

        return view.buffer;
      }
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @license
       * Copyright Google Inc. All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @param {?=} rawParams
       * @return {?}
       */


      function paramParser() {
        var rawParams = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';

        /** @type {?} */
        var map = new Map();

        if (rawParams.length > 0) {
          /** @type {?} */
          var params = rawParams.split('&');
          params.forEach(function (param) {
            /** @type {?} */
            var eqIdx = param.indexOf('=');

            var _ref137 = eqIdx == -1 ? [param, ''] : [param.slice(0, eqIdx), param.slice(eqIdx + 1)],
                _ref138 = _slicedToArray(_ref137, 2),
                key = _ref138[0],
                val = _ref138[1];
            /** @type {?} */


            var list = map.get(key) || [];
            list.push(val);
            map.set(key, list);
          });
        }

        return map;
      }
      /**
       * @deprecated see https://angular.io/guide/http
       * \@publicApi
       *
       */


      var QueryEncoder = /*#__PURE__*/function () {
        function QueryEncoder() {
          _classCallCheck2(this, QueryEncoder);
        }

        _createClass2(QueryEncoder, [{
          key: "encodeKey",
          value:
          /**
           * @param {?} key
           * @return {?}
           */
          function encodeKey(key) {
            return standardEncoding(key);
          }
          /**
           * @param {?} value
           * @return {?}
           */

        }, {
          key: "encodeValue",
          value: function encodeValue(value) {
            return standardEncoding(value);
          }
        }]);

        return QueryEncoder;
      }();
      /**
       * @param {?} v
       * @return {?}
       */


      function standardEncoding(v) {
        return encodeURIComponent(v).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/gi, '$').replace(/%2C/gi, ',').replace(/%3B/gi, ';').replace(/%2B/gi, '+').replace(/%3D/gi, '=').replace(/%3F/gi, '?').replace(/%2F/gi, '/');
      }
      /**
       * Map-like representation of url search parameters, based on
       * [URLSearchParams](https://url.spec.whatwg.org/#urlsearchparams) in the url living standard,
       * with several extensions for merging URLSearchParams objects:
       *   - setAll()
       *   - appendAll()
       *   - replaceAll()
       *
       * This class accepts an optional second parameter of ${\@link QueryEncoder},
       * which is used to serialize parameters before making a request. By default,
       * `QueryEncoder` encodes keys and values of parameters using `encodeURIComponent`,
       * and then un-encodes certain characters that are allowed to be part of the query
       * according to IETF RFC 3986: https://tools.ietf.org/html/rfc3986.
       *
       * These are the characters that are not encoded: `! $ \' ( ) * + , ; A 9 - . _ ~ ? /`
       *
       * If the set of allowed query characters is not acceptable for a particular backend,
       * `QueryEncoder` can be subclassed and provided as the 2nd argument to URLSearchParams.
       *
       * ```
       * import {URLSearchParams, QueryEncoder} from '\@angular/http';
       * class MyQueryEncoder extends QueryEncoder {
       *   encodeKey(k: string): string {
       *     return myEncodingFunction(k);
       *   }
       *
       *   encodeValue(v: string): string {
       *     return myEncodingFunction(v);
       *   }
       * }
       *
       * let params = new URLSearchParams('', new MyQueryEncoder());
       * ```
       * @deprecated see https://angular.io/guide/http
       * \@publicApi
       */


      var URLSearchParams = /*#__PURE__*/function () {
        /**
         * @param {?=} rawParams
         * @param {?=} queryEncoder
         */
        function URLSearchParams() {
          var rawParams = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
          var queryEncoder = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new QueryEncoder();

          _classCallCheck2(this, URLSearchParams);

          this.rawParams = rawParams;
          this.queryEncoder = queryEncoder;
          this.paramsMap = paramParser(rawParams);
        }
        /**
         * @return {?}
         */


        _createClass2(URLSearchParams, [{
          key: "clone",
          value: function clone() {
            /** @type {?} */
            var clone = new URLSearchParams('', this.queryEncoder);
            clone.appendAll(this);
            return clone;
          }
          /**
           * @param {?} param
           * @return {?}
           */

        }, {
          key: "has",
          value: function has(param) {
            return this.paramsMap.has(param);
          }
          /**
           * @param {?} param
           * @return {?}
           */

        }, {
          key: "get",
          value: function get(param) {
            /** @type {?} */
            var storedParam = this.paramsMap.get(param);
            return Array.isArray(storedParam) ? storedParam[0] : null;
          }
          /**
           * @param {?} param
           * @return {?}
           */

        }, {
          key: "getAll",
          value: function getAll(param) {
            return this.paramsMap.get(param) || [];
          }
          /**
           * @param {?} param
           * @param {?} val
           * @return {?}
           */

        }, {
          key: "set",
          value: function set(param, val) {
            if (val === void 0 || val === null) {
              this["delete"](param);
              return;
            }
            /** @type {?} */


            var list = this.paramsMap.get(param) || [];
            list.length = 0;
            list.push(val);
            this.paramsMap.set(param, list);
          } // A merge operation
          // For each name-values pair in `searchParams`, perform `set(name, values[0])`
          //
          // E.g: "a=[1,2,3], c=[8]" + "a=[4,5,6], b=[7]" = "a=[4], c=[8], b=[7]"
          //
          // TODO(@caitp): document this better

          /**
           * @param {?} searchParams
           * @return {?}
           */

        }, {
          key: "setAll",
          value: function setAll(searchParams) {
            var _this844 = this;

            searchParams.paramsMap.forEach(function (value, param) {
              /** @type {?} */
              var list = _this844.paramsMap.get(param) || [];
              list.length = 0;
              list.push(value[0]);

              _this844.paramsMap.set(param, list);
            });
          }
          /**
           * @param {?} param
           * @param {?} val
           * @return {?}
           */

        }, {
          key: "append",
          value: function append(param, val) {
            if (val === void 0 || val === null) return;
            /** @type {?} */

            var list = this.paramsMap.get(param) || [];
            list.push(val);
            this.paramsMap.set(param, list);
          } // A merge operation
          // For each name-values pair in `searchParams`, perform `append(name, value)`
          // for each value in `values`.
          //
          // E.g: "a=[1,2], c=[8]" + "a=[3,4], b=[7]" = "a=[1,2,3,4], c=[8], b=[7]"
          //
          // TODO(@caitp): document this better

          /**
           * @param {?} searchParams
           * @return {?}
           */

        }, {
          key: "appendAll",
          value: function appendAll(searchParams) {
            var _this845 = this;

            searchParams.paramsMap.forEach(function (value, param) {
              /** @type {?} */
              var list = _this845.paramsMap.get(param) || [];

              for (var i = 0; i < value.length; ++i) {
                list.push(value[i]);
              }

              _this845.paramsMap.set(param, list);
            });
          } // A merge operation
          // For each name-values pair in `searchParams`, perform `delete(name)`,
          // followed by `set(name, values)`
          //
          // E.g: "a=[1,2,3], c=[8]" + "a=[4,5,6], b=[7]" = "a=[4,5,6], c=[8], b=[7]"
          //
          // TODO(@caitp): document this better

          /**
           * @param {?} searchParams
           * @return {?}
           */

        }, {
          key: "replaceAll",
          value: function replaceAll(searchParams) {
            var _this846 = this;

            searchParams.paramsMap.forEach(function (value, param) {
              /** @type {?} */
              var list = _this846.paramsMap.get(param) || [];
              list.length = 0;

              for (var i = 0; i < value.length; ++i) {
                list.push(value[i]);
              }

              _this846.paramsMap.set(param, list);
            });
          }
          /**
           * @return {?}
           */

        }, {
          key: "toString",
          value: function toString() {
            var _this847 = this;

            /** @type {?} */
            var paramsList = [];
            this.paramsMap.forEach(function (values, k) {
              values.forEach(function (v) {
                return paramsList.push(_this847.queryEncoder.encodeKey(k) + '=' + _this847.queryEncoder.encodeValue(v));
              });
            });
            return paramsList.join('&');
          }
          /**
           * @param {?} param
           * @return {?}
           */

        }, {
          key: "delete",
          value: function _delete(param) {
            this.paramsMap["delete"](param);
          }
        }]);

        return URLSearchParams;
      }();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * HTTP request body used by both {\@link Request} and {\@link Response}
       * https://fetch.spec.whatwg.org/#body
       * @abstract
       */


      var Body = /*#__PURE__*/function () {
        function Body() {
          _classCallCheck2(this, Body);
        }

        _createClass2(Body, [{
          key: "json",
          value:
          /**
           * Attempts to return body as parsed `JSON` object, or raises an exception.
           * @return {?}
           */
          function json() {
            if (typeof this._body === 'string') {
              return JSON.parse(
              /** @type {?} */
              this._body);
            }

            if (this._body instanceof ArrayBuffer) {
              return JSON.parse(this.text());
            }

            return this._body;
          }
          /**
           * Returns the body as a string, presuming `toString()` can be called on the response body.
           *
           * When decoding an `ArrayBuffer`, the optional `encodingHint` parameter determines how the
           * bytes in the buffer will be interpreted. Valid values are:
           *
           * - `legacy` - incorrectly interpret the bytes as UTF-16 (technically, UCS-2). Only characters
           *   in the Basic Multilingual Plane are supported, surrogate pairs are not handled correctly.
           *   In addition, the endianness of the 16-bit octet pairs in the `ArrayBuffer` is not taken
           *   into consideration. This is the default behavior to avoid breaking apps, but should be
           *   considered deprecated.
           *
           * - `iso-8859` - interpret the bytes as ISO-8859 (which can be used for ASCII encoded text).
           * @param {?=} encodingHint
           * @return {?}
           */

        }, {
          key: "text",
          value: function text() {
            var encodingHint = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'legacy';

            if (this._body instanceof URLSearchParams) {
              return this._body.toString();
            }

            if (this._body instanceof ArrayBuffer) {
              switch (encodingHint) {
                case 'legacy':
                  return String.fromCharCode.apply(null, new Uint16Array(
                  /** @type {?} */
                  this._body));

                case 'iso-8859':
                  return String.fromCharCode.apply(null, new Uint8Array(
                  /** @type {?} */
                  this._body));

                default:
                  throw new Error("Invalid value for encodingHint: ".concat(encodingHint));
              }
            }

            if (this._body == null) {
              return '';
            }

            if (typeof this._body === 'object') {
              return JSON.stringify(this._body, null, 2);
            }

            return this._body.toString();
          }
          /**
           * Return the body as an ArrayBuffer
           * @return {?}
           */

        }, {
          key: "arrayBuffer",
          value: function arrayBuffer() {
            if (this._body instanceof ArrayBuffer) {
              return (
                /** @type {?} */
                this._body
              );
            }

            return stringToArrayBuffer(this.text());
          }
          /**
           * Returns the request's body as a Blob, assuming that body exists.
           * @return {?}
           */

        }, {
          key: "blob",
          value: function blob() {
            if (this._body instanceof Blob) {
              return (
                /** @type {?} */
                this._body
              );
            }

            if (this._body instanceof ArrayBuffer) {
              return new Blob([this._body]);
            }

            throw new Error('The request body isn\'t either a blob or an array buffer');
          }
        }]);

        return Body;
      }();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * Creates `Response` instances from provided values.
       *
       * Though this object isn't
       * usually instantiated by end-users, it is the primary object interacted with when it comes time to
       * add data to a view.
       *
       * \@usageNotes
       * ### Example
       *
       * ```
       * http.request('my-friends.txt').subscribe(response => this.friends = response.text());
       * ```
       *
       * The Response's interface is inspired by the Response constructor defined in the [Fetch
       * Spec](https://fetch.spec.whatwg.org/#response-class), but is considered a static value whose body
       * can be accessed many times. There are other differences in the implementation, but this is the
       * most significant.
       *
       * @deprecated see https://angular.io/guide/http
       * \@publicApi
       */


      var Response = /*#__PURE__*/function (_Body) {
        _inherits2(Response, _Body);

        var _super360 = _createSuper(Response);

        /**
         * @param {?} responseOptions
         */
        function Response(responseOptions) {
          var _this848;

          _classCallCheck2(this, Response);

          _this848 = _super360.call(this);
          _this848._body = responseOptions.body;
          _this848.status =
          /** @type {?} */
          responseOptions.status;
          _this848.ok = _this848.status >= 200 && _this848.status <= 299;
          _this848.statusText = responseOptions.statusText;
          _this848.headers = responseOptions.headers;
          _this848.type =
          /** @type {?} */
          responseOptions.type;
          _this848.url =
          /** @type {?} */
          responseOptions.url;
          return _this848;
        }
        /**
         * @return {?}
         */


        _createClass2(Response, [{
          key: "toString",
          value: function toString() {
            return "Response with status: ".concat(this.status, " ").concat(this.statusText, " for URL: ").concat(this.url);
          }
        }]);

        return Response;
      }(Body);
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /** @type {?} */


      var _nextRequestId = 0;
      /** @type {?} */

      var JSONP_HOME = '__ng_jsonp__';
      /** @type {?} */

      var _jsonpConnections = null;
      /**
       * @return {?}
       */

      function _getJsonpConnections() {
        /** @type {?} */
        var w = typeof window == 'object' ? window : {};

        if (_jsonpConnections === null) {
          _jsonpConnections = w[JSONP_HOME] = {};
        }

        return _jsonpConnections;
      } // Make sure not to evaluate this in a non-browser environment!


      var BrowserJsonp = /*#__PURE__*/function () {
        function BrowserJsonp() {
          _classCallCheck2(this, BrowserJsonp);
        }

        _createClass2(BrowserJsonp, [{
          key: "build",
          value: // Construct a <script> element with the specified URL

          /**
           * @param {?} url
           * @return {?}
           */
          function build(url) {
            /** @type {?} */
            var node = document.createElement('script');
            node.src = url;
            return node;
          }
          /**
           * @return {?}
           */

        }, {
          key: "nextRequestID",
          value: function nextRequestID() {
            return "__req".concat(_nextRequestId++);
          }
          /**
           * @param {?} id
           * @return {?}
           */

        }, {
          key: "requestCallback",
          value: function requestCallback(id) {
            return "".concat(JSONP_HOME, ".").concat(id, ".finished");
          }
          /**
           * @param {?} id
           * @param {?} connection
           * @return {?}
           */

        }, {
          key: "exposeConnection",
          value: function exposeConnection(id, connection) {
            /** @type {?} */
            var connections = _getJsonpConnections();

            connections[id] = connection;
          }
          /**
           * @param {?} id
           * @return {?}
           */

        }, {
          key: "removeConnection",
          value: function removeConnection(id) {
            /** @type {?} */
            var connections = _getJsonpConnections();

            connections[id] = null;
          } // Attach the <script> element to the DOM

          /**
           * @param {?} node
           * @return {?}
           */

        }, {
          key: "send",
          value: function send(node) {
            document.body.appendChild(
            /** @type {?} */
            node);
          } // Remove <script> element from the DOM

          /**
           * @param {?} node
           * @return {?}
           */

        }, {
          key: "cleanup",
          value: function cleanup(node) {
            if (node.parentNode) {
              node.parentNode.removeChild(
              /** @type {?} */
              node);
            }
          }
        }]);

        return BrowserJsonp;
      }();

      BrowserJsonp.ɵfac = function BrowserJsonp_Factory(t) {
        return new (t || BrowserJsonp)();
      };

      BrowserJsonp.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: BrowserJsonp,
        factory: BrowserJsonp.ɵfac
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BrowserJsonp, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], null, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /** @type {?} */


      var JSONP_ERR_NO_CALLBACK = 'JSONP injected script did not invoke callback.';
      /** @type {?} */

      var JSONP_ERR_WRONG_METHOD = 'JSONP requests must use GET request method.';
      /**
       * Base class for an in-flight JSONP request.
       *
       * @deprecated see https://angular.io/guide/http
       * \@publicApi
       */

      var JSONPConnection = /*#__PURE__*/function () {
        /**
         * \@internal
         * @param {?} req
         * @param {?} _dom
         * @param {?=} baseResponseOptions
         */
        function JSONPConnection(req, _dom, baseResponseOptions) {
          var _this849 = this;

          _classCallCheck2(this, JSONPConnection);

          this._dom = _dom;
          this.baseResponseOptions = baseResponseOptions;
          this._finished = false;

          if (req.method !== RequestMethod.Get) {
            throw new TypeError(JSONP_ERR_WRONG_METHOD);
          }

          this.request = req;
          this.response = new rxjs__WEBPACK_IMPORTED_MODULE_1__["Observable"](function (responseObserver) {
            _this849.readyState = ReadyState.Loading;
            /** @type {?} */

            var id = _this849._id = _dom.nextRequestID();

            _dom.exposeConnection(id, _this849); // Workaround Dart
            // url = url.replace(/=JSONP_CALLBACK(&|$)/, `generated method`);

            /** @type {?} */


            var callback = _dom.requestCallback(_this849._id);
            /** @type {?} */


            var url = req.url;

            if (url.indexOf('=JSONP_CALLBACK&') > -1) {
              url = url.replace('=JSONP_CALLBACK&', "=".concat(callback, "&"));
            } else if (url.lastIndexOf('=JSONP_CALLBACK') === url.length - '=JSONP_CALLBACK'.length) {
              url = url.substring(0, url.length - '=JSONP_CALLBACK'.length) + "=".concat(callback);
            }
            /** @type {?} */


            var script = _this849._script = _dom.build(url);
            /** @type {?} */


            var onLoad = function onLoad(event) {
              if (_this849.readyState === ReadyState.Cancelled) return;
              _this849.readyState = ReadyState.Done;

              _dom.cleanup(script);

              if (!_this849._finished) {
                /** @type {?} */
                var _responseOptions = new ResponseOptions({
                  body: JSONP_ERR_NO_CALLBACK,
                  type: ResponseType.Error,
                  url: url
                });

                if (baseResponseOptions) {
                  _responseOptions = baseResponseOptions.merge(_responseOptions);
                }

                responseObserver.error(new Response(_responseOptions));
                return;
              }
              /** @type {?} */


              var responseOptions = new ResponseOptions({
                body: _this849._responseData,
                url: url
              });

              if (_this849.baseResponseOptions) {
                responseOptions = _this849.baseResponseOptions.merge(responseOptions);
              }

              responseObserver.next(new Response(responseOptions));
              responseObserver.complete();
            };
            /** @type {?} */


            var onError = function onError(error) {
              if (_this849.readyState === ReadyState.Cancelled) return;
              _this849.readyState = ReadyState.Done;

              _dom.cleanup(script);
              /** @type {?} */


              var responseOptions = new ResponseOptions({
                body: error.message,
                type: ResponseType.Error
              });

              if (baseResponseOptions) {
                responseOptions = baseResponseOptions.merge(responseOptions);
              }

              responseObserver.error(new Response(responseOptions));
            };

            script.addEventListener('load', onLoad);
            script.addEventListener('error', onError);

            _dom.send(script);

            return function () {
              _this849.readyState = ReadyState.Cancelled;
              script.removeEventListener('load', onLoad);
              script.removeEventListener('error', onError);

              _this849._dom.cleanup(script);
            };
          });
        }
        /**
         * Callback called when the JSONP request completes, to notify the application
         * of the new data.
         * @param {?=} data
         * @return {?}
         */


        _createClass2(JSONPConnection, [{
          key: "finished",
          value: function finished(data) {
            // Don't leak connections
            this._finished = true;

            this._dom.removeConnection(this._id);

            if (this.readyState === ReadyState.Cancelled) return;
            this._responseData = data;
          }
        }]);

        return JSONPConnection;
      }();
      /**
       * A {\@link ConnectionBackend} that uses the JSONP strategy of making requests.
       *
       * @deprecated see https://angular.io/guide/http
       * \@publicApi
       */


      var JSONPBackend = /*#__PURE__*/function (_ConnectionBackend) {
        _inherits2(JSONPBackend, _ConnectionBackend);

        var _super361 = _createSuper(JSONPBackend);

        /**
         * \@internal
         * @param {?} _browserJSONP
         * @param {?} _baseResponseOptions
         */
        function JSONPBackend(_browserJSONP, _baseResponseOptions) {
          var _this850;

          _classCallCheck2(this, JSONPBackend);

          _this850 = _super361.call(this);
          _this850._browserJSONP = _browserJSONP;
          _this850._baseResponseOptions = _baseResponseOptions;
          return _this850;
        }
        /**
         * @param {?} request
         * @return {?}
         */


        _createClass2(JSONPBackend, [{
          key: "createConnection",
          value: function createConnection(request) {
            return new JSONPConnection(request, this._browserJSONP, this._baseResponseOptions);
          }
        }]);

        return JSONPBackend;
      }(ConnectionBackend);

      JSONPBackend.ɵfac = function JSONPBackend_Factory(t) {
        return new (t || JSONPBackend)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](BrowserJsonp), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](ResponseOptions));
      };

      JSONPBackend.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: JSONPBackend,
        factory: JSONPBackend.ɵfac
      });
      /** @nocollapse */

      JSONPBackend.ctorParameters = function () {
        return [{
          type: BrowserJsonp
        }, {
          type: ResponseOptions
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](JSONPBackend, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: BrowserJsonp
          }, {
            type: ResponseOptions
          }];
        }, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /** @type {?} */


      var XSSI_PREFIX = /^\)\]\}',?\n/;
      /**
       * Creates connections using `XMLHttpRequest`. Given a fully-qualified
       * request, an `XHRConnection` will immediately create an `XMLHttpRequest` object and send the
       * request.
       *
       * This class would typically not be created or interacted with directly inside applications, though
       * the {\@link MockConnection} may be interacted with in tests.
       *
       * @deprecated see https://angular.io/guide/http
       * \@publicApi
       */

      var XHRConnection = /*#__PURE__*/function () {
        /**
         * @param {?} req
         * @param {?} browserXHR
         * @param {?=} baseResponseOptions
         */
        function XHRConnection(req, browserXHR, baseResponseOptions) {
          var _this851 = this;

          _classCallCheck2(this, XHRConnection);

          this.request = req;
          this.response = new rxjs__WEBPACK_IMPORTED_MODULE_1__["Observable"](function (responseObserver) {
            /** @type {?} */
            var _xhr = browserXHR.build();

            _xhr.open(RequestMethod[req.method].toUpperCase(), req.url);

            if (req.withCredentials != null) {
              _xhr.withCredentials = req.withCredentials;
            } // load event handler

            /** @type {?} */


            var onLoad = function onLoad() {
              // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)

              /** @type {?} */
              var status = _xhr.status === 1223 ? 204 : _xhr.status;
              /** @type {?} */

              var body = null; // HTTP 204 means no content

              if (status !== 204) {
                // responseText is the old-school way of retrieving response (supported by IE8 & 9)
                // response/responseType properties were introduced in ResourceLoader Level2 spec
                // (supported by IE10)
                body = typeof _xhr.response === 'undefined' ? _xhr.responseText : _xhr.response; // Implicitly strip a potential XSSI prefix.

                if (typeof body === 'string') {
                  body = body.replace(XSSI_PREFIX, '');
                }
              } // 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 = body ? 200 : 0;
              }
              /** @type {?} */


              var headers = Headers.fromResponseHeaderString(_xhr.getAllResponseHeaders()); // IE 9 does not provide the way to get URL of response

              /** @type {?} */

              var url = getResponseURL(_xhr) || req.url;
              /** @type {?} */

              var statusText = _xhr.statusText || 'OK';
              /** @type {?} */

              var responseOptions = new ResponseOptions({
                body: body,
                status: status,
                headers: headers,
                statusText: statusText,
                url: url
              });

              if (baseResponseOptions != null) {
                responseOptions = baseResponseOptions.merge(responseOptions);
              }
              /** @type {?} */


              var response = new Response(responseOptions);
              response.ok = isSuccess(status);

              if (response.ok) {
                responseObserver.next(response); // TODO(gdi2290): defer complete if array buffer until done

                responseObserver.complete();
                return;
              }

              responseObserver.error(response);
            }; // error event handler

            /** @type {?} */


            var onError = function onError(err) {
              /** @type {?} */
              var responseOptions = new ResponseOptions({
                body: err,
                type: ResponseType.Error,
                status: _xhr.status,
                statusText: _xhr.statusText
              });

              if (baseResponseOptions != null) {
                responseOptions = baseResponseOptions.merge(responseOptions);
              }

              responseObserver.error(new Response(responseOptions));
            };

            _this851.setDetectedContentType(req, _xhr);

            if (req.headers == null) {
              req.headers = new Headers();
            }

            if (!req.headers.has('Accept')) {
              req.headers.append('Accept', 'application/json, text/plain, */*');
            }

            req.headers.forEach(function (values, name) {
              return _xhr.setRequestHeader(
              /** @type {?} */
              name, values.join(','));
            }); // Select the correct buffer type to store the response

            if (req.responseType != null && _xhr.responseType != null) {
              switch (req.responseType) {
                case ResponseContentType.ArrayBuffer:
                  _xhr.responseType = 'arraybuffer';
                  break;

                case ResponseContentType.Json:
                  _xhr.responseType = 'json';
                  break;

                case ResponseContentType.Text:
                  _xhr.responseType = 'text';
                  break;

                case ResponseContentType.Blob:
                  _xhr.responseType = 'blob';
                  break;

                default:
                  throw new Error('The selected responseType is not supported');
              }
            }

            _xhr.addEventListener('load', onLoad);

            _xhr.addEventListener('error', onError);

            _xhr.send(_this851.request.getBody());

            return function () {
              _xhr.removeEventListener('load', onLoad);

              _xhr.removeEventListener('error', onError);

              _xhr.abort();
            };
          });
        }
        /**
         * @param {?} req
         * @param {?} _xhr
         * @return {?}
         */


        _createClass2(XHRConnection, [{
          key: "setDetectedContentType",
          value: function setDetectedContentType(req
          /** TODO Request */
          , _xhr
          /** XMLHttpRequest */
          ) {
            // Skip if a custom Content-Type header is provided
            if (req.headers != null && req.headers.get('Content-Type') != null) {
              return;
            } // Set the detected content type


            switch (req.contentType) {
              case ContentType.NONE:
                break;

              case ContentType.JSON:
                _xhr.setRequestHeader('content-type', 'application/json');

                break;

              case ContentType.FORM:
                _xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');

                break;

              case ContentType.TEXT:
                _xhr.setRequestHeader('content-type', 'text/plain');

                break;

              case ContentType.BLOB:
                /** @type {?} */
                var blob = req.blob();

                if (blob.type) {
                  _xhr.setRequestHeader('content-type', blob.type);
                }

                break;
            }
          }
        }]);

        return XHRConnection;
      }();
      /**
       * `XSRFConfiguration` sets up Cross Site Request Forgery (XSRF) protection for the application
       * using a cookie. See https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)
       * for more information on XSRF.
       *
       * Applications can configure custom cookie and header names by binding an instance of this class
       * with different `cookieName` and `headerName` values. See the main HTTP documentation for more
       * details.
       *
       * @deprecated see https://angular.io/guide/http
       * \@publicApi
       */


      var CookieXSRFStrategy = /*#__PURE__*/function () {
        /**
         * @param {?=} _cookieName
         * @param {?=} _headerName
         */
        function CookieXSRFStrategy() {
          var _cookieName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'XSRF-TOKEN';

          var _headerName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'X-XSRF-TOKEN';

          _classCallCheck2(this, CookieXSRFStrategy);

          this._cookieName = _cookieName;
          this._headerName = _headerName;
        }
        /**
         * @param {?} req
         * @return {?}
         */


        _createClass2(CookieXSRFStrategy, [{
          key: "configureRequest",
          value: function configureRequest(req) {
            /** @type {?} */
            var xsrfToken = Object(_angular_platform_browser__WEBPACK_IMPORTED_MODULE_2__["ɵgetDOM"])().getCookie(this._cookieName);

            if (xsrfToken) {
              req.headers.set(this._headerName, xsrfToken);
            }
          }
        }]);

        return CookieXSRFStrategy;
      }();
      /**
       * Creates {\@link XHRConnection} instances.
       *
       * This class would typically not be used by end users, but could be
       * overridden if a different backend implementation should be used,
       * such as in a node backend.
       *
       * \@usageNotes
       * ### Example
       *
       * ```
       * import {Http, MyNodeBackend, HTTP_PROVIDERS, BaseRequestOptions} from '\@angular/http';
       * \@Component({
       *   viewProviders: [
       *     HTTP_PROVIDERS,
       *     {provide: Http, useFactory: (backend, options) => {
       *       return new Http(backend, options);
       *     }, deps: [MyNodeBackend, BaseRequestOptions]}]
       * })
       * class MyComponent {
       *   constructor(http:Http) {
       *     http.request('people.json').subscribe(res => this.people = res.json());
       *   }
       * }
       * ```
       * @deprecated see https://angular.io/guide/http
       * \@publicApi
       */


      var XHRBackend = /*#__PURE__*/function () {
        /**
         * @param {?} _browserXHR
         * @param {?} _baseResponseOptions
         * @param {?} _xsrfStrategy
         */
        function XHRBackend(_browserXHR, _baseResponseOptions, _xsrfStrategy) {
          _classCallCheck2(this, XHRBackend);

          this._browserXHR = _browserXHR;
          this._baseResponseOptions = _baseResponseOptions;
          this._xsrfStrategy = _xsrfStrategy;
        }
        /**
         * @param {?} request
         * @return {?}
         */


        _createClass2(XHRBackend, [{
          key: "createConnection",
          value: function createConnection(request) {
            this._xsrfStrategy.configureRequest(request);

            return new XHRConnection(request, this._browserXHR, this._baseResponseOptions);
          }
        }]);

        return XHRBackend;
      }();

      XHRBackend.ɵfac = function XHRBackend_Factory(t) {
        return new (t || XHRBackend)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](BrowserXhr), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](ResponseOptions), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](XSRFStrategy));
      };

      XHRBackend.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: XHRBackend,
        factory: XHRBackend.ɵfac
      });
      /** @nocollapse */

      XHRBackend.ctorParameters = function () {
        return [{
          type: BrowserXhr
        }, {
          type: ResponseOptions
        }, {
          type: XSRFStrategy
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](XHRBackend, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: BrowserXhr
          }, {
            type: ResponseOptions
          }, {
            type: XSRFStrategy
          }];
        }, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * Creates a request options object to be optionally provided when instantiating a
       * {\@link Request}.
       *
       * This class is based on the `RequestInit` description in the [Fetch
       * Spec](https://fetch.spec.whatwg.org/#requestinit).
       *
       * All values are null by default. Typical defaults can be found in the {\@link BaseRequestOptions}
       * class, which sub-classes `RequestOptions`.
       *
       * ```typescript
       * import {RequestOptions, Request, RequestMethod} from '\@angular/http';
       *
       * const options = new RequestOptions({
       *   method: RequestMethod.Post,
       *   url: 'https://google.com'
       * });
       * const req = new Request(options);
       * console.log('req.method:', RequestMethod[req.method]); // Post
       * console.log('options.url:', options.url); // https://google.com
       * ```
       *
       * @deprecated see https://angular.io/guide/http
       * \@publicApi
       */


      var RequestOptions = /*#__PURE__*/function () {
        // TODO(Dzmitry): remove search when this.search is removed

        /**
         * @param {?=} opts
         */
        function RequestOptions() {
          var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

          _classCallCheck2(this, RequestOptions);

          var method = opts.method,
              headers = opts.headers,
              body = opts.body,
              url = opts.url,
              search = opts.search,
              params = opts.params,
              withCredentials = opts.withCredentials,
              responseType = opts.responseType;
          this.method = method != null ? normalizeMethodName(method) : null;
          this.headers = headers != null ? headers : null;
          this.body = body != null ? body : null;
          this.url = url != null ? url : null;
          this.params = this._mergeSearchParams(params || search);
          this.withCredentials = withCredentials != null ? withCredentials : null;
          this.responseType = responseType != null ? responseType : null;
        }
        /**
         * Creates a copy of the `RequestOptions` instance, using the optional input as values to override
         * existing values. This method will not change the values of the instance on which it is being
         * called.
         *
         * Note that `headers` and `search` will override existing values completely if present in
         * the `options` object. If these values should be merged, it should be done prior to calling
         * `merge` on the `RequestOptions` instance.
         *
         * ```typescript
         * import {RequestOptions, Request, RequestMethod} from '\@angular/http';
         *
         * const options = new RequestOptions({
         *   method: RequestMethod.Post
         * });
         * const req = new Request(options.merge({
         *   url: 'https://google.com'
         * }));
         * console.log('req.method:', RequestMethod[req.method]); // Post
         * console.log('options.url:', options.url); // null
         * console.log('req.url:', req.url); // https://google.com
         * ```
         * @param {?=} options
         * @return {?}
         */


        _createClass2(RequestOptions, [{
          key: "search",
          get:
          /**
           * @deprecated from 4.0.0. Use params instead.
           * @return {?}
           */
          function get() {
            return this.params;
          }
          /**
           * @deprecated from 4.0.0. Use params instead.
           * @param {?} params
           * @return {?}
           */
          ,
          set: function set(params) {
            this.params = params;
          }
        }, {
          key: "merge",
          value: function merge(options) {
            return new RequestOptions({
              method: options && options.method != null ? options.method : this.method,
              headers: options && options.headers != null ? options.headers : new Headers(this.headers),
              body: options && options.body != null ? options.body : this.body,
              url: options && options.url != null ? options.url : this.url,
              params: options && this._mergeSearchParams(options.params || options.search),
              withCredentials: options && options.withCredentials != null ? options.withCredentials : this.withCredentials,
              responseType: options && options.responseType != null ? options.responseType : this.responseType
            });
          }
          /**
           * @private
           * @param {?=} params
           * @return {?}
           */

        }, {
          key: "_mergeSearchParams",
          value: function _mergeSearchParams(params) {
            if (!params) return this.params;

            if (params instanceof URLSearchParams) {
              return params.clone();
            }

            if (typeof params === 'string') {
              return new URLSearchParams(params);
            }

            return this._parseParams(params);
          }
          /**
           * @private
           * @param {?=} objParams
           * @return {?}
           */

        }, {
          key: "_parseParams",
          value: function _parseParams() {
            var _this852 = this;

            var objParams = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

            /** @type {?} */
            var params = new URLSearchParams();
            Object.keys(objParams).forEach(function (key) {
              /** @type {?} */
              var value = objParams[key];

              if (Array.isArray(value)) {
                value.forEach(function (item) {
                  return _this852._appendParam(key, item, params);
                });
              } else {
                _this852._appendParam(key, value, params);
              }
            });
            return params;
          }
          /**
           * @private
           * @param {?} key
           * @param {?} value
           * @param {?} params
           * @return {?}
           */

        }, {
          key: "_appendParam",
          value: function _appendParam(key, value, params) {
            if (typeof value !== 'string') {
              value = JSON.stringify(value);
            }

            params.append(key, value);
          }
        }]);

        return RequestOptions;
      }();
      /**
       * Subclass of {\@link RequestOptions}, with default values.
       *
       * Default values:
       *  * method: {\@link RequestMethod RequestMethod.Get}
       *  * headers: empty {\@link Headers} object
       *
       * This class could be extended and bound to the {\@link RequestOptions} class
       * when configuring an {\@link Injector}, in order to override the default options
       * used by {\@link Http} to create and send {\@link Request Requests}.
       *
       * ```typescript
       * import {BaseRequestOptions, RequestOptions} from '\@angular/http';
       *
       * class MyOptions extends BaseRequestOptions {
       *   search: string = 'coreTeam=true';
       * }
       *
       * {provide: RequestOptions, useClass: MyOptions};
       * ```
       *
       * The options could also be extended when manually creating a {\@link Request}
       * object.
       *
       * ```
       * import {BaseRequestOptions, Request, RequestMethod} from '\@angular/http';
       *
       * const options = new BaseRequestOptions();
       * const req = new Request(options.merge({
       *   method: RequestMethod.Post,
       *   url: 'https://google.com'
       * }));
       * console.log('req.method:', RequestMethod[req.method]); // Post
       * console.log('options.url:', options.url); // null
       * console.log('req.url:', req.url); // https://google.com
       * ```
       *
       * @deprecated see https://angular.io/guide/http
       * \@publicApi
       */


      var BaseRequestOptions = /*#__PURE__*/function (_RequestOptions) {
        _inherits2(BaseRequestOptions, _RequestOptions);

        var _super362 = _createSuper(BaseRequestOptions);

        function BaseRequestOptions() {
          _classCallCheck2(this, BaseRequestOptions);

          return _super362.call(this, {
            method: RequestMethod.Get,
            headers: new Headers()
          });
        }

        return BaseRequestOptions;
      }(RequestOptions);

      BaseRequestOptions.ɵfac = function BaseRequestOptions_Factory(t) {
        return new (t || BaseRequestOptions)();
      };

      BaseRequestOptions.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: BaseRequestOptions,
        factory: BaseRequestOptions.ɵfac
      });
      /** @nocollapse */

      BaseRequestOptions.ctorParameters = function () {
        return [];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BaseRequestOptions, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [];
        }, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */
      // TODO(jeffbcross): properly implement body accessors

      /**
       * Creates `Request` instances from provided values.
       *
       * The Request's interface is inspired by the Request constructor defined in the [Fetch
       * Spec](https://fetch.spec.whatwg.org/#request-class),
       * but is considered a static value whose body can be accessed many times. There are other
       * differences in the implementation, but this is the most significant.
       *
       * `Request` instances are typically created by higher-level classes, like {\@link Http} and
       * {\@link Jsonp}, but it may occasionally be useful to explicitly create `Request` instances.
       * One such example is when creating services that wrap higher-level services, like {\@link Http},
       * where it may be useful to generate a `Request` with arbitrary headers and search params.
       *
       * ```typescript
       * import {Injectable, Injector} from '\@angular/core';
       * import {HTTP_PROVIDERS, Http, Request, RequestMethod} from '\@angular/http';
       *
       * \@Injectable()
       * class AutoAuthenticator {
       *   constructor(public http:Http) {}
       *   request(url:string) {
       *     return this.http.request(new Request({
       *       method: RequestMethod.Get,
       *       url: url,
       *       search: 'password=123'
       *     }));
       *   }
       * }
       *
       * var injector = Injector.resolveAndCreate([HTTP_PROVIDERS, AutoAuthenticator]);
       * var authenticator = injector.get(AutoAuthenticator);
       * authenticator.request('people.json').subscribe(res => {
       *   //URL should have included '?password=123'
       *   console.log('people', res.json());
       * });
       * ```
       *
       * @deprecated see https://angular.io/guide/http
       * \@publicApi
       */


      var Request = /*#__PURE__*/function (_Body2) {
        _inherits2(Request, _Body2);

        var _super363 = _createSuper(Request);

        /**
         * @param {?} requestOptions
         */
        function Request(requestOptions) {
          var _this853;

          _classCallCheck2(this, Request);

          _this853 = _super363.call(this); // TODO: assert that url is present

          /** @type {?} */

          var url = requestOptions.url;
          _this853.url =
          /** @type {?} */
          requestOptions.url;
          /** @type {?} */

          var paramsArg = requestOptions.params || requestOptions.search;

          if (paramsArg) {
            /** @type {?} */
            var params;

            if (typeof paramsArg === 'object' && !(paramsArg instanceof URLSearchParams)) {
              params = urlEncodeParams(paramsArg).toString();
            } else {
              params = paramsArg.toString();
            }

            if (params.length > 0) {
              /** @type {?} */
              var prefix = '?';

              if (_this853.url.indexOf('?') != -1) {
                prefix = _this853.url[_this853.url.length - 1] == '&' ? '' : '&';
              } // TODO: just delete search-query-looking string in url?


              _this853.url = url + prefix + params;
            }
          }

          _this853._body = requestOptions.body;
          _this853.method = normalizeMethodName(
          /** @type {?} */
          requestOptions.method); // TODO(jeffbcross): implement behavior
          // Defaults to 'omit', consistent with browser

          _this853.headers = new Headers(requestOptions.headers);
          _this853.contentType = _this853.detectContentType();
          _this853.withCredentials =
          /** @type {?} */
          requestOptions.withCredentials;
          _this853.responseType =
          /** @type {?} */
          requestOptions.responseType;
          return _this853;
        }
        /**
         * Returns the content type enum based on header options.
         * @return {?}
         */


        _createClass2(Request, [{
          key: "detectContentType",
          value: function detectContentType() {
            switch (this.headers.get('content-type')) {
              case 'application/json':
                return ContentType.JSON;

              case 'application/x-www-form-urlencoded':
                return ContentType.FORM;

              case 'multipart/form-data':
                return ContentType.FORM_DATA;

              case 'text/plain':
              case 'text/html':
                return ContentType.TEXT;

              case 'application/octet-stream':
                return this._body instanceof ArrayBuffer$1 ? ContentType.ARRAY_BUFFER : ContentType.BLOB;

              default:
                return this.detectContentTypeFromBody();
            }
          }
          /**
           * Returns the content type of request's body based on its type.
           * @return {?}
           */

        }, {
          key: "detectContentTypeFromBody",
          value: function detectContentTypeFromBody() {
            if (this._body == null) {
              return ContentType.NONE;
            } else if (this._body instanceof URLSearchParams) {
              return ContentType.FORM;
            } else if (this._body instanceof FormData) {
              return ContentType.FORM_DATA;
            } else if (this._body instanceof Blob$1) {
              return ContentType.BLOB;
            } else if (this._body instanceof ArrayBuffer$1) {
              return ContentType.ARRAY_BUFFER;
            } else if (this._body && typeof this._body === 'object') {
              return ContentType.JSON;
            } else {
              return ContentType.TEXT;
            }
          }
          /**
           * Returns the request's body according to its type. If body is undefined, return
           * null.
           * @return {?}
           */

        }, {
          key: "getBody",
          value: function getBody() {
            switch (this.contentType) {
              case ContentType.JSON:
                return this.text();

              case ContentType.FORM:
                return this.text();

              case ContentType.FORM_DATA:
                return this._body;

              case ContentType.TEXT:
                return this.text();

              case ContentType.BLOB:
                return this.blob();

              case ContentType.ARRAY_BUFFER:
                return this.arrayBuffer();

              default:
                return null;
            }
          }
        }]);

        return Request;
      }(Body);
      /**
       * @param {?} params
       * @return {?}
       */


      function urlEncodeParams(params) {
        /** @type {?} */
        var searchParams = new URLSearchParams();
        Object.keys(params).forEach(function (key) {
          /** @type {?} */
          var value = params[key];

          if (value && Array.isArray(value)) {
            value.forEach(function (element) {
              return searchParams.append(key, element.toString());
            });
          } else {
            searchParams.append(key, value.toString());
          }
        });
        return searchParams;
      }
      /** @type {?} */


      var noop = function noop() {};
      /** @type {?} */


      var w = typeof window == 'object' ? window : noop;
      /** @type {?} */

      var FormData =
      /** @type {?} */
      w['FormData'] || noop;
      /** @type {?} */

      var Blob$1 =
      /** @type {?} */
      w['Blob'] || noop;
      /** @type {?} */

      var ArrayBuffer$1 =
      /** @type {?} */
      w['ArrayBuffer'] || noop;
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @param {?} backend
       * @param {?} request
       * @return {?}
       */

      function httpRequest(backend, request) {
        return backend.createConnection(request).response;
      }
      /**
       * @param {?} defaultOpts
       * @param {?} providedOpts
       * @param {?} method
       * @param {?} url
       * @return {?}
       */


      function mergeOptions(defaultOpts, providedOpts, method, url) {
        /** @type {?} */
        var newOptions = defaultOpts;

        if (providedOpts) {
          // Hack so Dart can used named parameters
          return (
            /** @type {?} */
            newOptions.merge(new RequestOptions({
              method: providedOpts.method || method,
              url: providedOpts.url || url,
              search: providedOpts.search,
              params: providedOpts.params,
              headers: providedOpts.headers,
              body: providedOpts.body,
              withCredentials: providedOpts.withCredentials,
              responseType: providedOpts.responseType
            }))
          );
        }

        return (
          /** @type {?} */
          newOptions.merge(new RequestOptions({
            method: method,
            url: url
          }))
        );
      }
      /**
       * Performs http requests using `XMLHttpRequest` as the default backend.
       *
       * `Http` is available as an injectable class, with methods to perform http requests. Calling
       * `request` returns an `Observable` which will emit a single {\@link Response} when a
       * response is received.
       *
       * \@usageNotes
       * ### Example
       *
       * ```typescript
       * import {Http, HTTP_PROVIDERS} from '\@angular/http';
       * import {map} from 'rxjs/operators';
       *
       * \@Component({
       *   selector: 'http-app',
       *   viewProviders: [HTTP_PROVIDERS],
       *   templateUrl: 'people.html'
       * })
       * class PeopleComponent {
       *   constructor(http: Http) {
       *     http.get('people.json')
       *       // Call map on the response observable to get the parsed people object
       *       .pipe(map(res => res.json()))
       *       // Subscribe to the observable to get the parsed people object and attach it to the
       *       // component
       *       .subscribe(people => this.people = people);
       *   }
       * }
       * ```
       *
       *
       * ### Example
       *
       * ```
       * http.get('people.json').subscribe((res:Response) => this.people = res.json());
       * ```
       *
       * The default construct used to perform requests, `XMLHttpRequest`, is abstracted as a "Backend" (
       * {\@link XHRBackend} in this case), which could be mocked with dependency injection by replacing
       * the {\@link XHRBackend} provider, as in the following example:
       *
       * ### Example
       *
       * ```typescript
       * import {BaseRequestOptions, Http} from '\@angular/http';
       * import {MockBackend} from '\@angular/http/testing';
       * var injector = Injector.resolveAndCreate([
       *   BaseRequestOptions,
       *   MockBackend,
       *   {provide: Http, useFactory:
       *       function(backend, defaultOptions) {
       *         return new Http(backend, defaultOptions);
       *       },
       *       deps: [MockBackend, BaseRequestOptions]}
       * ]);
       * var http = injector.get(Http);
       * http.get('request-from-mock-backend.json').subscribe((res:Response) => doSomething(res));
       * ```
       *
       * @deprecated see https://angular.io/guide/http
       * \@publicApi
       */


      var Http = /*#__PURE__*/function () {
        /**
         * @param {?} _backend
         * @param {?} _defaultOptions
         */
        function Http(_backend, _defaultOptions) {
          _classCallCheck2(this, Http);

          this._backend = _backend;
          this._defaultOptions = _defaultOptions;
        }
        /**
         * Performs any type of http request. First argument is required, and can either be a url or
         * a {\@link Request} instance. If the first argument is a url, an optional {\@link RequestOptions}
         * object can be provided as the 2nd argument. The options object will be merged with the values
         * of {\@link BaseRequestOptions} before performing the request.
         * @param {?} url
         * @param {?=} options
         * @return {?}
         */


        _createClass2(Http, [{
          key: "request",
          value: function request(url, options) {
            /** @type {?} */
            var responseObservable;

            if (typeof url === 'string') {
              responseObservable = httpRequest(this._backend, new Request(mergeOptions(this._defaultOptions, options, RequestMethod.Get,
              /** @type {?} */
              url)));
            } else if (url instanceof Request) {
              responseObservable = httpRequest(this._backend, url);
            } else {
              throw new Error('First argument must be a url string or Request instance.');
            }

            return responseObservable;
          }
          /**
           * Performs a request with `get` http method.
           * @param {?} url
           * @param {?=} options
           * @return {?}
           */

        }, {
          key: "get",
          value: function get(url, options) {
            return this.request(new Request(mergeOptions(this._defaultOptions, options, RequestMethod.Get, url)));
          }
          /**
           * Performs a request with `post` http method.
           * @param {?} url
           * @param {?} body
           * @param {?=} options
           * @return {?}
           */

        }, {
          key: "post",
          value: function post(url, body, options) {
            return this.request(new Request(mergeOptions(this._defaultOptions.merge(new RequestOptions({
              body: body
            })), options, RequestMethod.Post, url)));
          }
          /**
           * Performs a request with `put` http method.
           * @param {?} url
           * @param {?} body
           * @param {?=} options
           * @return {?}
           */

        }, {
          key: "put",
          value: function put(url, body, options) {
            return this.request(new Request(mergeOptions(this._defaultOptions.merge(new RequestOptions({
              body: body
            })), options, RequestMethod.Put, url)));
          }
          /**
           * Performs a request with `delete` http method.
           * @param {?} url
           * @param {?=} options
           * @return {?}
           */

        }, {
          key: "delete",
          value: function _delete(url, options) {
            return this.request(new Request(mergeOptions(this._defaultOptions, options, RequestMethod.Delete, url)));
          }
          /**
           * Performs a request with `patch` http method.
           * @param {?} url
           * @param {?} body
           * @param {?=} options
           * @return {?}
           */

        }, {
          key: "patch",
          value: function patch(url, body, options) {
            return this.request(new Request(mergeOptions(this._defaultOptions.merge(new RequestOptions({
              body: body
            })), options, RequestMethod.Patch, url)));
          }
          /**
           * Performs a request with `head` http method.
           * @param {?} url
           * @param {?=} options
           * @return {?}
           */

        }, {
          key: "head",
          value: function head(url, options) {
            return this.request(new Request(mergeOptions(this._defaultOptions, options, RequestMethod.Head, url)));
          }
          /**
           * Performs a request with `options` http method.
           * @param {?} url
           * @param {?=} options
           * @return {?}
           */

        }, {
          key: "options",
          value: function options(url, _options3) {
            return this.request(new Request(mergeOptions(this._defaultOptions, _options3, RequestMethod.Options, url)));
          }
        }]);

        return Http;
      }();

      Http.ɵfac = function Http_Factory(t) {
        return new (t || Http)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](ConnectionBackend), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](RequestOptions));
      };

      Http.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: Http,
        factory: Http.ɵfac
      });
      /** @nocollapse */

      Http.ctorParameters = function () {
        return [{
          type: ConnectionBackend
        }, {
          type: RequestOptions
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](Http, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: ConnectionBackend
          }, {
            type: RequestOptions
          }];
        }, null);
      })();
      /**
       * @deprecated see https://angular.io/guide/http
       * \@publicApi
       */


      var Jsonp = /*#__PURE__*/function (_Http) {
        _inherits2(Jsonp, _Http);

        var _super364 = _createSuper(Jsonp);

        /**
         * @param {?} backend
         * @param {?} defaultOptions
         */
        function Jsonp(backend, defaultOptions) {
          _classCallCheck2(this, Jsonp);

          return _super364.call(this, backend, defaultOptions);
        }
        /**
         * Performs any type of http request. First argument is required, and can either be a url or
         * a {\@link Request} instance. If the first argument is a url, an optional {\@link RequestOptions}
         * object can be provided as the 2nd argument. The options object will be merged with the values
         * of {\@link BaseRequestOptions} before performing the request.
         *
         * \@security Regular XHR is the safest alternative to JSONP for most applications, and is
         * supported by all current browsers. Because JSONP creates a `<script>` element with
         * contents retrieved from a remote source, attacker-controlled data introduced by an untrusted
         * source could expose your application to XSS risks. Data exposed by JSONP may also be
         * readable by malicious third-party websites. In addition, JSONP introduces potential risk for
         * future security issues (e.g. content sniffing).  For more detail, see the
         * [Security Guide](http://g.co/ng/security).
         * @param {?} url
         * @param {?=} options
         * @return {?}
         */


        _createClass2(Jsonp, [{
          key: "request",
          value: function request(url, options) {
            /** @type {?} */
            var responseObservable;

            if (typeof url === 'string') {
              url = new Request(mergeOptions(this._defaultOptions, options, RequestMethod.Get,
              /** @type {?} */
              url));
            }

            if (url instanceof Request) {
              if (url.method !== RequestMethod.Get) {
                throw new Error('JSONP requests must use GET request method.');
              }

              responseObservable = httpRequest(this._backend, url);
            } else {
              throw new Error('First argument must be a url string or Request instance.');
            }

            return responseObservable;
          }
        }]);

        return Jsonp;
      }(Http);

      Jsonp.ɵfac = function Jsonp_Factory(t) {
        return new (t || Jsonp)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](ConnectionBackend), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](RequestOptions));
      };

      Jsonp.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: Jsonp,
        factory: Jsonp.ɵfac
      });
      /** @nocollapse */

      Jsonp.ctorParameters = function () {
        return [{
          type: ConnectionBackend
        }, {
          type: RequestOptions
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](Jsonp, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: ConnectionBackend
          }, {
            type: RequestOptions
          }];
        }, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @return {?}
       */


      function _createDefaultCookieXSRFStrategy() {
        return new CookieXSRFStrategy();
      }
      /**
       * @param {?} xhrBackend
       * @param {?} requestOptions
       * @return {?}
       */


      function httpFactory(xhrBackend, requestOptions) {
        return new Http(xhrBackend, requestOptions);
      }
      /**
       * @param {?} jsonpBackend
       * @param {?} requestOptions
       * @return {?}
       */


      function jsonpFactory(jsonpBackend, requestOptions) {
        return new Jsonp(jsonpBackend, requestOptions);
      }
      /**
       * The module that includes http's providers
       *
       * @deprecated see https://angular.io/guide/http
       * \@publicApi
       */


      var HttpModule = function HttpModule() {
        _classCallCheck2(this, HttpModule);
      };

      HttpModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: HttpModule
      });
      HttpModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function HttpModule_Factory(t) {
          return new (t || HttpModule)();
        },
        providers: [// TODO(pascal): use factory type annotations once supported in DI
        // issue: https://github.com/angular/angular/issues/3183
        {
          provide: Http,
          useFactory: httpFactory,
          deps: [XHRBackend, RequestOptions]
        }, BrowserXhr, {
          provide: RequestOptions,
          useClass: BaseRequestOptions
        }, {
          provide: ResponseOptions,
          useClass: BaseResponseOptions
        }, XHRBackend, {
          provide: XSRFStrategy,
          useFactory: _createDefaultCookieXSRFStrategy
        }]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HttpModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            providers: [// TODO(pascal): use factory type annotations once supported in DI
            // issue: https://github.com/angular/angular/issues/3183
            {
              provide: Http,
              useFactory: httpFactory,
              deps: [XHRBackend, RequestOptions]
            }, BrowserXhr, {
              provide: RequestOptions,
              useClass: BaseRequestOptions
            }, {
              provide: ResponseOptions,
              useClass: BaseResponseOptions
            }, XHRBackend, {
              provide: XSRFStrategy,
              useFactory: _createDefaultCookieXSRFStrategy
            }]
          }]
        }], null, null);
      })();
      /**
       * The module that includes jsonp's providers
       *
       * @deprecated see https://angular.io/api/common/http/HttpClient#jsonp
       * \@publicApi
       */


      var JsonpModule = function JsonpModule() {
        _classCallCheck2(this, JsonpModule);
      };

      JsonpModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: JsonpModule
      });
      JsonpModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function JsonpModule_Factory(t) {
          return new (t || JsonpModule)();
        },
        providers: [// TODO(pascal): use factory type annotations once supported in DI
        // issue: https://github.com/angular/angular/issues/3183
        {
          provide: Jsonp,
          useFactory: jsonpFactory,
          deps: [JSONPBackend, RequestOptions]
        }, BrowserJsonp, {
          provide: RequestOptions,
          useClass: BaseRequestOptions
        }, {
          provide: ResponseOptions,
          useClass: BaseResponseOptions
        }, JSONPBackend]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](JsonpModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            providers: [// TODO(pascal): use factory type annotations once supported in DI
            // issue: https://github.com/angular/angular/issues/3183
            {
              provide: Jsonp,
              useFactory: jsonpFactory,
              deps: [JSONPBackend, RequestOptions]
            }, BrowserJsonp, {
              provide: RequestOptions,
              useClass: BaseRequestOptions
            }, {
              provide: ResponseOptions,
              useClass: BaseResponseOptions
            }, JSONPBackend]
          }]
        }], null, null);
      })();
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @deprecated see https://angular.io/guide/http
       * \@publicApi
       * @type {?}
       */


      var VERSION = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["Version"]('7.2.16');
      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * @fileoverview added by tsickle
       * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=http.js.map

      /***/
    },

    /***/
    "quSY":
    /*!*************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/Subscription.js ***!
      \*************************************************************/

    /*! exports provided: Subscription */

    /***/
    function quSY(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Subscription", function () {
        return Subscription;
      });
      /* harmony import */


      var _util_isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./util/isArray */
      "DH7j");
      /* harmony import */


      var _util_isObject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./util/isObject */
      "XoHu");
      /* harmony import */


      var _util_isFunction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./util/isFunction */
      "n6bG");
      /* harmony import */


      var _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./util/UnsubscriptionError */
      "pjAE");

      var Subscription = /*#__PURE__*/function () {
        function Subscription(unsubscribe) {
          _classCallCheck2(this, Subscription);

          this.closed = false;
          this._parentOrParents = null;
          this._subscriptions = null;

          if (unsubscribe) {
            this._ctorUnsubscribe = true;
            this._unsubscribe = unsubscribe;
          }
        }

        _createClass2(Subscription, [{
          key: "unsubscribe",
          value: function unsubscribe() {
            var errors;

            if (this.closed) {
              return;
            }

            var _parentOrParents = this._parentOrParents,
                _ctorUnsubscribe = this._ctorUnsubscribe,
                _unsubscribe = this._unsubscribe,
                _subscriptions = this._subscriptions;
            this.closed = true;
            this._parentOrParents = null;
            this._subscriptions = null;

            if (_parentOrParents instanceof Subscription) {
              _parentOrParents.remove(this);
            } else if (_parentOrParents !== null) {
              for (var index = 0; index < _parentOrParents.length; ++index) {
                var parent = _parentOrParents[index];
                parent.remove(this);
              }
            }

            if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_2__["isFunction"])(_unsubscribe)) {
              if (_ctorUnsubscribe) {
                this._unsubscribe = undefined;
              }

              try {
                _unsubscribe.call(this);
              } catch (e) {
                errors = e instanceof _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__["UnsubscriptionError"] ? flattenUnsubscriptionErrors(e.errors) : [e];
              }
            }

            if (Object(_util_isArray__WEBPACK_IMPORTED_MODULE_0__["isArray"])(_subscriptions)) {
              var _index5 = -1;

              var len = _subscriptions.length;

              while (++_index5 < len) {
                var sub = _subscriptions[_index5];

                if (Object(_util_isObject__WEBPACK_IMPORTED_MODULE_1__["isObject"])(sub)) {
                  try {
                    sub.unsubscribe();
                  } catch (e) {
                    errors = errors || [];

                    if (e instanceof _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__["UnsubscriptionError"]) {
                      errors = errors.concat(flattenUnsubscriptionErrors(e.errors));
                    } else {
                      errors.push(e);
                    }
                  }
                }
              }
            }

            if (errors) {
              throw new _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__["UnsubscriptionError"](errors);
            }
          }
        }, {
          key: "add",
          value: function add(teardown) {
            var subscription = teardown;

            if (!teardown) {
              return Subscription.EMPTY;
            }

            switch (typeof teardown) {
              case 'function':
                subscription = new Subscription(teardown);

              case 'object':
                if (subscription === this || subscription.closed || typeof subscription.unsubscribe !== 'function') {
                  return subscription;
                } else if (this.closed) {
                  subscription.unsubscribe();
                  return subscription;
                } else if (!(subscription instanceof Subscription)) {
                  var tmp = subscription;
                  subscription = new Subscription();
                  subscription._subscriptions = [tmp];
                }

                break;

              default:
                {
                  throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.');
                }
            }

            var _subscription2 = subscription,
                _parentOrParents = _subscription2._parentOrParents;

            if (_parentOrParents === null) {
              subscription._parentOrParents = this;
            } else if (_parentOrParents instanceof Subscription) {
              if (_parentOrParents === this) {
                return subscription;
              }

              subscription._parentOrParents = [_parentOrParents, this];
            } else if (_parentOrParents.indexOf(this) === -1) {
              _parentOrParents.push(this);
            } else {
              return subscription;
            }

            var subscriptions = this._subscriptions;

            if (subscriptions === null) {
              this._subscriptions = [subscription];
            } else {
              subscriptions.push(subscription);
            }

            return subscription;
          }
        }, {
          key: "remove",
          value: function remove(subscription) {
            var subscriptions = this._subscriptions;

            if (subscriptions) {
              var subscriptionIndex = subscriptions.indexOf(subscription);

              if (subscriptionIndex !== -1) {
                subscriptions.splice(subscriptionIndex, 1);
              }
            }
          }
        }]);

        return Subscription;
      }();

      Subscription.EMPTY = function (empty) {
        empty.closed = true;
        return empty;
      }(new Subscription());

      function flattenUnsubscriptionErrors(errors) {
        return errors.reduce(function (errs, err) {
          return errs.concat(err instanceof _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__["UnsubscriptionError"] ? err.errors : err);
        }, []);
      } //# sourceMappingURL=Subscription.js.map

      /***/

    },

    /***/
    "qvJo":
    /*!************************************************!*\
      !*** ./node_modules/moment/locale/gom-deva.js ***!
      \************************************************/

    /*! no static exports found */

    /***/
    function qvJo(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Konkani Devanagari script [gom-deva]
      //! author : The Discoverer : https://github.com/WikiDiscoverer
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        function processRelativeTime(number, withoutSuffix, key, isFuture) {
          var format = {
            s: ['थोडया सॅकंडांनी', 'थोडे सॅकंड'],
            ss: [number + ' सॅकंडांनी', number + ' सॅकंड'],
            m: ['एका मिणटान', 'एक मिनूट'],
            mm: [number + ' मिणटांनी', number + ' मिणटां'],
            h: ['एका वरान', 'एक वर'],
            hh: [number + ' वरांनी', number + ' वरां'],
            d: ['एका दिसान', 'एक दीस'],
            dd: [number + ' दिसांनी', number + ' दीस'],
            M: ['एका म्हयन्यान', 'एक म्हयनो'],
            MM: [number + ' म्हयन्यानी', number + ' म्हयने'],
            y: ['एका वर्सान', 'एक वर्स'],
            yy: [number + ' वर्सांनी', number + ' वर्सां']
          };
          return isFuture ? format[key][0] : format[key][1];
        }

        var gomDeva = moment.defineLocale('gom-deva', {
          months: {
            standalone: 'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),
            format: 'जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या'.split('_'),
            isFormat: /MMMM(\s)+D[oD]?/
          },
          monthsShort: 'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),
          monthsParseExact: true,
          weekdays: 'आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार'.split('_'),
          weekdaysShort: 'आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.'.split('_'),
          weekdaysMin: 'आ_सो_मं_बु_ब्रे_सु_शे'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'A h:mm [वाजतां]',
            LTS: 'A h:mm:ss [वाजतां]',
            L: 'DD-MM-YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY A h:mm [वाजतां]',
            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [वाजतां]',
            llll: 'ddd, D MMM YYYY, A h:mm [वाजतां]'
          },
          calendar: {
            sameDay: '[आयज] LT',
            nextDay: '[फाल्यां] LT',
            nextWeek: '[फुडलो] dddd[,] LT',
            lastDay: '[काल] LT',
            lastWeek: '[फाटलो] dddd[,] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: '%s',
            past: '%s आदीं',
            s: processRelativeTime,
            ss: processRelativeTime,
            m: processRelativeTime,
            mm: processRelativeTime,
            h: processRelativeTime,
            hh: processRelativeTime,
            d: processRelativeTime,
            dd: processRelativeTime,
            M: processRelativeTime,
            MM: processRelativeTime,
            y: processRelativeTime,
            yy: processRelativeTime
          },
          dayOfMonthOrdinalParse: /\d{1,2}(वेर)/,
          ordinal: function ordinal(number, period) {
            switch (period) {
              // the ordinal 'वेर' only applies to day of the month
              case 'D':
                return number + 'वेर';

              default:
              case 'M':
              case 'Q':
              case 'DDD':
              case 'd':
              case 'w':
              case 'W':
                return number;
            }
          },
          week: {
            dow: 0,
            // Sunday is the first day of the week
            doy: 3 // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)

          },
          meridiemParse: /राती|सकाळीं|दनपारां|सांजे/,
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === 'राती') {
              return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'सकाळीं') {
              return hour;
            } else if (meridiem === 'दनपारां') {
              return hour > 12 ? hour : hour + 12;
            } else if (meridiem === 'सांजे') {
              return hour + 12;
            }
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 4) {
              return 'राती';
            } else if (hour < 12) {
              return 'सकाळीं';
            } else if (hour < 16) {
              return 'दनपारां';
            } else if (hour < 20) {
              return 'सांजे';
            } else {
              return 'राती';
            }
          }
        });
        return gomDeva;
      });
      /***/

    },

    /***/
    "r0WS":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/timestamp.js ***!
      \********************************************************************/

    /*! exports provided: timestamp, Timestamp */

    /***/
    function r0WS(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "timestamp", function () {
        return timestamp;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Timestamp", function () {
        return Timestamp;
      });
      /* harmony import */


      var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../scheduler/async */
      "D0XW");
      /* harmony import */


      var _map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./map */
      "lJxs");

      function timestamp() {
        var scheduler = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"];
        return Object(_map__WEBPACK_IMPORTED_MODULE_1__["map"])(function (value) {
          return new Timestamp(value, scheduler.now());
        });
      }

      var Timestamp = function Timestamp(value, timestamp) {
        _classCallCheck2(this, Timestamp);

        this.value = value;
        this.timestamp = timestamp;
      }; //# sourceMappingURL=timestamp.js.map

      /***/

    },

    /***/
    "r0o6":
    /*!***************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/iif.js ***!
      \***************************************************************/

    /*! exports provided: iif */

    /***/
    function r0o6(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "iif", function () {
        return iif;
      });
      /* harmony import */


      var _defer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./defer */
      "NXyV");
      /* harmony import */


      var _empty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./empty */
      "EY2u");

      function iif(condition) {
        var trueResult = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _empty__WEBPACK_IMPORTED_MODULE_1__["EMPTY"];
        var falseResult = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _empty__WEBPACK_IMPORTED_MODULE_1__["EMPTY"];
        return Object(_defer__WEBPACK_IMPORTED_MODULE_0__["defer"])(function () {
          return condition() ? trueResult : falseResult;
        });
      } //# sourceMappingURL=iif.js.map

      /***/

    },

    /***/
    "r8II":
    /*!*******************************************!*\
      !*** ./node_modules/querystring/index.js ***!
      \*******************************************/

    /*! no static exports found */

    /***/
    function r8II(module, exports, __webpack_require__) {
      "use strict";

      exports.decode = exports.parse = __webpack_require__(
      /*! ./decode */
      "YcCt");
      exports.encode = exports.stringify = __webpack_require__(
      /*! ./encode */
      "6MUB");
      /***/
    },

    /***/
    "rDax":
    /*!********************************************************************!*\
      !*** ./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/overlay.js ***!
      \********************************************************************/

    /*! exports provided: CdkScrollable, ScrollDispatcher, ViewportRuler, BlockScrollStrategy, CdkConnectedOverlay, CdkOverlayOrigin, CloseScrollStrategy, ConnectedOverlayPositionChange, ConnectedPositionStrategy, ConnectionPositionPair, FlexibleConnectedPositionStrategy, FullscreenOverlayContainer, GlobalPositionStrategy, NoopScrollStrategy, Overlay, OverlayConfig, OverlayContainer, OverlayKeyboardDispatcher, OverlayModule, OverlayOutsideClickDispatcher, OverlayPositionBuilder, OverlayRef, RepositionScrollStrategy, ScrollStrategyOptions, ScrollingVisibility, validateHorizontalPosition, validateVerticalPosition, ɵangular_material_src_cdk_overlay_overlay_a, ɵangular_material_src_cdk_overlay_overlay_b, ɵangular_material_src_cdk_overlay_overlay_c, ɵangular_material_src_cdk_overlay_overlay_d */

    /***/
    function rDax(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BlockScrollStrategy", function () {
        return BlockScrollStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkConnectedOverlay", function () {
        return CdkConnectedOverlay;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkOverlayOrigin", function () {
        return CdkOverlayOrigin;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CloseScrollStrategy", function () {
        return CloseScrollStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ConnectedOverlayPositionChange", function () {
        return ConnectedOverlayPositionChange;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ConnectedPositionStrategy", function () {
        return ConnectedPositionStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ConnectionPositionPair", function () {
        return ConnectionPositionPair;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FlexibleConnectedPositionStrategy", function () {
        return FlexibleConnectedPositionStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FullscreenOverlayContainer", function () {
        return FullscreenOverlayContainer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "GlobalPositionStrategy", function () {
        return GlobalPositionStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NoopScrollStrategy", function () {
        return NoopScrollStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Overlay", function () {
        return Overlay;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OverlayConfig", function () {
        return OverlayConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OverlayContainer", function () {
        return OverlayContainer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OverlayKeyboardDispatcher", function () {
        return OverlayKeyboardDispatcher;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OverlayModule", function () {
        return OverlayModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OverlayOutsideClickDispatcher", function () {
        return OverlayOutsideClickDispatcher;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OverlayPositionBuilder", function () {
        return OverlayPositionBuilder;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OverlayRef", function () {
        return OverlayRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RepositionScrollStrategy", function () {
        return RepositionScrollStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ScrollStrategyOptions", function () {
        return ScrollStrategyOptions;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ScrollingVisibility", function () {
        return ScrollingVisibility;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "validateHorizontalPosition", function () {
        return validateHorizontalPosition;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "validateVerticalPosition", function () {
        return validateVerticalPosition;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_material_src_cdk_overlay_overlay_a", function () {
        return CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_material_src_cdk_overlay_overlay_b", function () {
        return CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_material_src_cdk_overlay_overlay_c", function () {
        return CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_material_src_cdk_overlay_overlay_d", function () {
        return BaseOverlayDispatcher;
      });
      /* harmony import */


      var _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/cdk/scrolling */
      "vxfF");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/cdk/platform */
      "nLfN");
      /* harmony import */


      var _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/cdk/bidi */
      "cH1L");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "CdkScrollable", function () {
        return _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__["CdkScrollable"];
      });
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "ScrollDispatcher", function () {
        return _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__["ScrollDispatcher"];
      });
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "ViewportRuler", function () {
        return _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__["ViewportRuler"];
      });
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");
      /* harmony import */


      var _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! @angular/cdk/portal */
      "+rOU");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(
      /*! @angular/cdk/keycodes */
      "FtGj");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var scrollBehaviorSupported = Object(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_2__["supportsScrollBehavior"])();
      /**
       * Strategy that will prevent the user from scrolling while the overlay is visible.
       */

      var BlockScrollStrategy = /*#__PURE__*/function () {
        function BlockScrollStrategy(_viewportRuler, document) {
          _classCallCheck2(this, BlockScrollStrategy);

          this._viewportRuler = _viewportRuler;
          this._previousHTMLStyles = {
            top: '',
            left: ''
          };
          this._isEnabled = false;
          this._document = document;
        }
        /** Attaches this scroll strategy to an overlay. */


        _createClass2(BlockScrollStrategy, [{
          key: "attach",
          value: function attach() {}
          /** Blocks page-level scroll while the attached overlay is open. */

        }, {
          key: "enable",
          value: function enable() {
            if (this._canBeEnabled()) {
              var root = this._document.documentElement;
              this._previousScrollPosition = this._viewportRuler.getViewportScrollPosition(); // Cache the previous inline styles in case the user had set them.

              this._previousHTMLStyles.left = root.style.left || '';
              this._previousHTMLStyles.top = root.style.top || ''; // Note: we're using the `html` node, instead of the `body`, because the `body` may
              // have the user agent margin, whereas the `html` is guaranteed not to have one.

              root.style.left = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceCssPixelValue"])(-this._previousScrollPosition.left);
              root.style.top = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceCssPixelValue"])(-this._previousScrollPosition.top);
              root.classList.add('cdk-global-scrollblock');
              this._isEnabled = true;
            }
          }
          /** Unblocks page-level scroll while the attached overlay is open. */

        }, {
          key: "disable",
          value: function disable() {
            if (this._isEnabled) {
              var html = this._document.documentElement;
              var body = this._document.body;
              var htmlStyle = html.style;
              var bodyStyle = body.style;
              var previousHtmlScrollBehavior = htmlStyle.scrollBehavior || '';
              var previousBodyScrollBehavior = bodyStyle.scrollBehavior || '';
              this._isEnabled = false;
              htmlStyle.left = this._previousHTMLStyles.left;
              htmlStyle.top = this._previousHTMLStyles.top;
              html.classList.remove('cdk-global-scrollblock'); // Disable user-defined smooth scrolling temporarily while we restore the scroll position.
              // See https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior
              // Note that we don't mutate the property if the browser doesn't support `scroll-behavior`,
              // because it can throw off feature detections in `supportsScrollBehavior` which
              // checks for `'scrollBehavior' in documentElement.style`.

              if (scrollBehaviorSupported) {
                htmlStyle.scrollBehavior = bodyStyle.scrollBehavior = 'auto';
              }

              window.scroll(this._previousScrollPosition.left, this._previousScrollPosition.top);

              if (scrollBehaviorSupported) {
                htmlStyle.scrollBehavior = previousHtmlScrollBehavior;
                bodyStyle.scrollBehavior = previousBodyScrollBehavior;
              }
            }
          }
        }, {
          key: "_canBeEnabled",
          value: function _canBeEnabled() {
            // Since the scroll strategies can't be singletons, we have to use a global CSS class
            // (`cdk-global-scrollblock`) to make sure that we don't try to disable global
            // scrolling multiple times.
            var html = this._document.documentElement;

            if (html.classList.contains('cdk-global-scrollblock') || this._isEnabled) {
              return false;
            }

            var body = this._document.body;

            var viewport = this._viewportRuler.getViewportSize();

            return body.scrollHeight > viewport.height || body.scrollWidth > viewport.width;
          }
        }]);

        return BlockScrollStrategy;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Returns an error to be thrown when attempting to attach an already-attached scroll strategy.
       */


      function getMatScrollStrategyAlreadyAttachedError() {
        return Error("Scroll strategy has already been attached.");
      }
      /**
       * Strategy that will close the overlay as soon as the user starts scrolling.
       */


      var CloseScrollStrategy = /*#__PURE__*/function () {
        function CloseScrollStrategy(_scrollDispatcher, _ngZone, _viewportRuler, _config) {
          var _this854 = this;

          _classCallCheck2(this, CloseScrollStrategy);

          this._scrollDispatcher = _scrollDispatcher;
          this._ngZone = _ngZone;
          this._viewportRuler = _viewportRuler;
          this._config = _config;
          this._scrollSubscription = null;
          /** Detaches the overlay ref and disables the scroll strategy. */

          this._detach = function () {
            _this854.disable();

            if (_this854._overlayRef.hasAttached()) {
              _this854._ngZone.run(function () {
                return _this854._overlayRef.detach();
              });
            }
          };
        }
        /** Attaches this scroll strategy to an overlay. */


        _createClass2(CloseScrollStrategy, [{
          key: "attach",
          value: function attach(overlayRef) {
            if (this._overlayRef && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw getMatScrollStrategyAlreadyAttachedError();
            }

            this._overlayRef = overlayRef;
          }
          /** Enables the closing of the attached overlay on scroll. */

        }, {
          key: "enable",
          value: function enable() {
            var _this855 = this;

            if (this._scrollSubscription) {
              return;
            }

            var stream = this._scrollDispatcher.scrolled(0);

            if (this._config && this._config.threshold && this._config.threshold > 1) {
              this._initialScrollPosition = this._viewportRuler.getViewportScrollPosition().top;
              this._scrollSubscription = stream.subscribe(function () {
                var scrollPosition = _this855._viewportRuler.getViewportScrollPosition().top;

                if (Math.abs(scrollPosition - _this855._initialScrollPosition) > _this855._config.threshold) {
                  _this855._detach();
                } else {
                  _this855._overlayRef.updatePosition();
                }
              });
            } else {
              this._scrollSubscription = stream.subscribe(this._detach);
            }
          }
          /** Disables the closing the attached overlay on scroll. */

        }, {
          key: "disable",
          value: function disable() {
            if (this._scrollSubscription) {
              this._scrollSubscription.unsubscribe();

              this._scrollSubscription = null;
            }
          }
        }, {
          key: "detach",
          value: function detach() {
            this.disable();
            this._overlayRef = null;
          }
        }]);

        return CloseScrollStrategy;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Scroll strategy that doesn't do anything. */


      var NoopScrollStrategy = /*#__PURE__*/function () {
        function NoopScrollStrategy() {
          _classCallCheck2(this, NoopScrollStrategy);
        }

        _createClass2(NoopScrollStrategy, [{
          key: "enable",
          value:
          /** Does nothing, as this scroll strategy is a no-op. */
          function enable() {}
          /** Does nothing, as this scroll strategy is a no-op. */

        }, {
          key: "disable",
          value: function disable() {}
          /** Does nothing, as this scroll strategy is a no-op. */

        }, {
          key: "attach",
          value: function attach() {}
        }]);

        return NoopScrollStrategy;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // TODO(jelbourn): move this to live with the rest of the scrolling code
      // TODO(jelbourn): someday replace this with IntersectionObservers

      /**
       * Gets whether an element is scrolled outside of view by any of its parent scrolling containers.
       * @param element Dimensions of the element (from getBoundingClientRect)
       * @param scrollContainers Dimensions of element's scrolling containers (from getBoundingClientRect)
       * @returns Whether the element is scrolled out of view
       * @docs-private
       */


      function isElementScrolledOutsideView(element, scrollContainers) {
        return scrollContainers.some(function (containerBounds) {
          var outsideAbove = element.bottom < containerBounds.top;
          var outsideBelow = element.top > containerBounds.bottom;
          var outsideLeft = element.right < containerBounds.left;
          var outsideRight = element.left > containerBounds.right;
          return outsideAbove || outsideBelow || outsideLeft || outsideRight;
        });
      }
      /**
       * Gets whether an element is clipped by any of its scrolling containers.
       * @param element Dimensions of the element (from getBoundingClientRect)
       * @param scrollContainers Dimensions of element's scrolling containers (from getBoundingClientRect)
       * @returns Whether the element is clipped
       * @docs-private
       */


      function isElementClippedByScrolling(element, scrollContainers) {
        return scrollContainers.some(function (scrollContainerRect) {
          var clippedAbove = element.top < scrollContainerRect.top;
          var clippedBelow = element.bottom > scrollContainerRect.bottom;
          var clippedLeft = element.left < scrollContainerRect.left;
          var clippedRight = element.right > scrollContainerRect.right;
          return clippedAbove || clippedBelow || clippedLeft || clippedRight;
        });
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Strategy that will update the element position as the user is scrolling.
       */


      var RepositionScrollStrategy = /*#__PURE__*/function () {
        function RepositionScrollStrategy(_scrollDispatcher, _viewportRuler, _ngZone, _config) {
          _classCallCheck2(this, RepositionScrollStrategy);

          this._scrollDispatcher = _scrollDispatcher;
          this._viewportRuler = _viewportRuler;
          this._ngZone = _ngZone;
          this._config = _config;
          this._scrollSubscription = null;
        }
        /** Attaches this scroll strategy to an overlay. */


        _createClass2(RepositionScrollStrategy, [{
          key: "attach",
          value: function attach(overlayRef) {
            if (this._overlayRef && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw getMatScrollStrategyAlreadyAttachedError();
            }

            this._overlayRef = overlayRef;
          }
          /** Enables repositioning of the attached overlay on scroll. */

        }, {
          key: "enable",
          value: function enable() {
            var _this856 = this;

            if (!this._scrollSubscription) {
              var throttle = this._config ? this._config.scrollThrottle : 0;
              this._scrollSubscription = this._scrollDispatcher.scrolled(throttle).subscribe(function () {
                _this856._overlayRef.updatePosition(); // TODO(crisbeto): make `close` on by default once all components can handle it.


                if (_this856._config && _this856._config.autoClose) {
                  var overlayRect = _this856._overlayRef.overlayElement.getBoundingClientRect();

                  var _this856$_viewportRul = _this856._viewportRuler.getViewportSize(),
                      width = _this856$_viewportRul.width,
                      height = _this856$_viewportRul.height; // TODO(crisbeto): include all ancestor scroll containers here once
                  // we have a way of exposing the trigger element to the scroll strategy.


                  var parentRects = [{
                    width: width,
                    height: height,
                    bottom: height,
                    right: width,
                    top: 0,
                    left: 0
                  }];

                  if (isElementScrolledOutsideView(overlayRect, parentRects)) {
                    _this856.disable();

                    _this856._ngZone.run(function () {
                      return _this856._overlayRef.detach();
                    });
                  }
                }
              });
            }
          }
          /** Disables repositioning of the attached overlay on scroll. */

        }, {
          key: "disable",
          value: function disable() {
            if (this._scrollSubscription) {
              this._scrollSubscription.unsubscribe();

              this._scrollSubscription = null;
            }
          }
        }, {
          key: "detach",
          value: function detach() {
            this.disable();
            this._overlayRef = null;
          }
        }]);

        return RepositionScrollStrategy;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Options for how an overlay will handle scrolling.
       *
       * Users can provide a custom value for `ScrollStrategyOptions` to replace the default
       * behaviors. This class primarily acts as a factory for ScrollStrategy instances.
       */


      var ScrollStrategyOptions = function ScrollStrategyOptions(_scrollDispatcher, _viewportRuler, _ngZone, document) {
        var _this857 = this;

        _classCallCheck2(this, ScrollStrategyOptions);

        this._scrollDispatcher = _scrollDispatcher;
        this._viewportRuler = _viewportRuler;
        this._ngZone = _ngZone;
        /** Do nothing on scroll. */

        this.noop = function () {
          return new NoopScrollStrategy();
        };
        /**
         * Close the overlay as soon as the user scrolls.
         * @param config Configuration to be used inside the scroll strategy.
         */


        this.close = function (config) {
          return new CloseScrollStrategy(_this857._scrollDispatcher, _this857._ngZone, _this857._viewportRuler, config);
        };
        /** Block scrolling. */


        this.block = function () {
          return new BlockScrollStrategy(_this857._viewportRuler, _this857._document);
        };
        /**
         * Update the overlay's position on scroll.
         * @param config Configuration to be used inside the scroll strategy.
         * Allows debouncing the reposition calls.
         */


        this.reposition = function (config) {
          return new RepositionScrollStrategy(_this857._scrollDispatcher, _this857._viewportRuler, _this857._ngZone, config);
        };

        this._document = document;
      };

      ScrollStrategyOptions.ɵfac = function ScrollStrategyOptions_Factory(t) {
        return new (t || ScrollStrategyOptions)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__["ScrollDispatcher"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__["ViewportRuler"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]));
      };

      ScrollStrategyOptions.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function ScrollStrategyOptions_Factory() {
          return new ScrollStrategyOptions(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__["ScrollDispatcher"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__["ViewportRuler"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]));
        },
        token: ScrollStrategyOptions,
        providedIn: "root"
      });

      ScrollStrategyOptions.ctorParameters = function () {
        return [{
          type: _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__["ScrollDispatcher"]
        }, {
          type: _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__["ViewportRuler"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](ScrollStrategyOptions, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__["ScrollDispatcher"]
          }, {
            type: _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__["ViewportRuler"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Initial configuration used when creating an overlay. */


      var OverlayConfig = function OverlayConfig(config) {
        _classCallCheck2(this, OverlayConfig);

        /** Strategy to be used when handling scroll events while the overlay is open. */
        this.scrollStrategy = new NoopScrollStrategy();
        /** Custom class to add to the overlay pane. */

        this.panelClass = '';
        /** Whether the overlay has a backdrop. */

        this.hasBackdrop = false;
        /** Custom class to add to the backdrop */

        this.backdropClass = 'cdk-overlay-dark-backdrop';
        /**
         * Whether the overlay should be disposed of when the user goes backwards/forwards in history.
         * Note that this usually doesn't include clicking on links (unless the user is using
         * the `HashLocationStrategy`).
         */

        this.disposeOnNavigation = false;

        if (config) {
          // Use `Iterable` instead of `Array` because TypeScript, as of 3.6.3,
          // loses the array generic type in the `for of`. But we *also* have to use `Array` because
          // typescript won't iterate over an `Iterable` unless you compile with `--downlevelIteration`
          var configKeys = Object.keys(config);

          for (var _i55 = 0, _configKeys = configKeys; _i55 < _configKeys.length; _i55++) {
            var key = _configKeys[_i55];

            if (config[key] !== undefined) {
              // TypeScript, as of version 3.5, sees the left-hand-side of this expression
              // as "I don't know *which* key this is, so the only valid value is the intersection
              // of all the posible values." In this case, that happens to be `undefined`. TypeScript
              // is not smart enough to see that the right-hand-side is actually an access of the same
              // exact type with the same exact key, meaning that the value type must be identical.
              // So we use `any` to work around this.
              this[key] = config[key];
            }
          }
        }
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** The points of the origin element and the overlay element to connect. */


      var ConnectionPositionPair = function ConnectionPositionPair(origin, overlay,
      /** Offset along the X axis. */
      offsetX,
      /** Offset along the Y axis. */
      offsetY,
      /** Class(es) to be applied to the panel while this position is active. */
      panelClass) {
        _classCallCheck2(this, ConnectionPositionPair);

        this.offsetX = offsetX;
        this.offsetY = offsetY;
        this.panelClass = panelClass;
        this.originX = origin.originX;
        this.originY = origin.originY;
        this.overlayX = overlay.overlayX;
        this.overlayY = overlay.overlayY;
      };
      /**
       * Set of properties regarding the position of the origin and overlay relative to the viewport
       * with respect to the containing Scrollable elements.
       *
       * The overlay and origin are clipped if any part of their bounding client rectangle exceeds the
       * bounds of any one of the strategy's Scrollable's bounding client rectangle.
       *
       * The overlay and origin are outside view if there is no overlap between their bounding client
       * rectangle and any one of the strategy's Scrollable's bounding client rectangle.
       *
       *       -----------                    -----------
       *       | outside |                    | clipped |
       *       |  view   |              --------------------------
       *       |         |              |     |         |        |
       *       ----------               |     -----------        |
       *  --------------------------    |                        |
       *  |                        |    |      Scrollable        |
       *  |                        |    |                        |
       *  |                        |     --------------------------
       *  |      Scrollable        |
       *  |                        |
       *  --------------------------
       *
       *  @docs-private
       */


      var ScrollingVisibility = function ScrollingVisibility() {
        _classCallCheck2(this, ScrollingVisibility);
      };
      /** The change event emitted by the strategy when a fallback position is used. */


      var ConnectedOverlayPositionChange = function ConnectedOverlayPositionChange(
      /** The position used as a result of this change. */
      connectionPair,
      /** @docs-private */
      scrollableViewProperties) {
        _classCallCheck2(this, ConnectedOverlayPositionChange);

        this.connectionPair = connectionPair;
        this.scrollableViewProperties = scrollableViewProperties;
      };

      ConnectedOverlayPositionChange.ctorParameters = function () {
        return [{
          type: ConnectionPositionPair
        }, {
          type: ScrollingVisibility,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }]
        }];
      };
      /**
       * Validates whether a vertical position property matches the expected values.
       * @param property Name of the property being validated.
       * @param value Value of the property being validated.
       * @docs-private
       */


      function validateVerticalPosition(property, value) {
        if (value !== 'top' && value !== 'bottom' && value !== 'center') {
          throw Error("ConnectedPosition: Invalid ".concat(property, " \"").concat(value, "\". ") + "Expected \"top\", \"bottom\" or \"center\".");
        }
      }
      /**
       * Validates whether a horizontal position property matches the expected values.
       * @param property Name of the property being validated.
       * @param value Value of the property being validated.
       * @docs-private
       */


      function validateHorizontalPosition(property, value) {
        if (value !== 'start' && value !== 'end' && value !== 'center') {
          throw Error("ConnectedPosition: Invalid ".concat(property, " \"").concat(value, "\". ") + "Expected \"start\", \"end\" or \"center\".");
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Service for dispatching events that land on the body to appropriate overlay ref,
       * if any. It maintains a list of attached overlays to determine best suited overlay based
       * on event target and order of overlay opens.
       */


      var BaseOverlayDispatcher = /*#__PURE__*/function () {
        function BaseOverlayDispatcher(document) {
          _classCallCheck2(this, BaseOverlayDispatcher);

          /** Currently attached overlays in the order they were attached. */
          this._attachedOverlays = [];
          this._document = document;
        }

        _createClass2(BaseOverlayDispatcher, [{
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.detach();
          }
          /** Add a new overlay to the list of attached overlay refs. */

        }, {
          key: "add",
          value: function add(overlayRef) {
            // Ensure that we don't get the same overlay multiple times.
            this.remove(overlayRef);

            this._attachedOverlays.push(overlayRef);
          }
          /** Remove an overlay from the list of attached overlay refs. */

        }, {
          key: "remove",
          value: function remove(overlayRef) {
            var index = this._attachedOverlays.indexOf(overlayRef);

            if (index > -1) {
              this._attachedOverlays.splice(index, 1);
            } // Remove the global listener once there are no more overlays.


            if (this._attachedOverlays.length === 0) {
              this.detach();
            }
          }
        }]);

        return BaseOverlayDispatcher;
      }();

      BaseOverlayDispatcher.ɵfac = function BaseOverlayDispatcher_Factory(t) {
        return new (t || BaseOverlayDispatcher)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]));
      };

      BaseOverlayDispatcher.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function BaseOverlayDispatcher_Factory() {
          return new BaseOverlayDispatcher(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]));
        },
        token: BaseOverlayDispatcher,
        providedIn: "root"
      });

      BaseOverlayDispatcher.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](BaseOverlayDispatcher, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Service for dispatching keyboard events that land on the body to appropriate overlay ref,
       * if any. It maintains a list of attached overlays to determine best suited overlay based
       * on event target and order of overlay opens.
       */


      var OverlayKeyboardDispatcher = /*#__PURE__*/function (_BaseOverlayDispatche) {
        _inherits2(OverlayKeyboardDispatcher, _BaseOverlayDispatche);

        var _super365 = _createSuper(OverlayKeyboardDispatcher);

        function OverlayKeyboardDispatcher(document) {
          var _this858;

          _classCallCheck2(this, OverlayKeyboardDispatcher);

          _this858 = _super365.call(this, document);
          /** Keyboard event listener that will be attached to the body. */

          _this858._keydownListener = function (event) {
            var overlays = _this858._attachedOverlays;

            for (var i = overlays.length - 1; i > -1; i--) {
              // Dispatch the keydown event to the top overlay which has subscribers to its keydown events.
              // We want to target the most recent overlay, rather than trying to match where the event came
              // from, because some components might open an overlay, but keep focus on a trigger element
              // (e.g. for select and autocomplete). We skip overlays without keydown event subscriptions,
              // because we don't want overlays that don't handle keyboard events to block the ones below
              // them that do.
              if (overlays[i]._keydownEvents.observers.length > 0) {
                overlays[i]._keydownEvents.next(event);

                break;
              }
            }
          };

          return _this858;
        }
        /** Add a new overlay to the list of attached overlay refs. */


        _createClass2(OverlayKeyboardDispatcher, [{
          key: "add",
          value: function add(overlayRef) {
            _get2(_getPrototypeOf2(OverlayKeyboardDispatcher.prototype), "add", this).call(this, overlayRef); // Lazily start dispatcher once first overlay is added


            if (!this._isAttached) {
              this._document.body.addEventListener('keydown', this._keydownListener);

              this._isAttached = true;
            }
          }
          /** Detaches the global keyboard event listener. */

        }, {
          key: "detach",
          value: function detach() {
            if (this._isAttached) {
              this._document.body.removeEventListener('keydown', this._keydownListener);

              this._isAttached = false;
            }
          }
        }]);

        return OverlayKeyboardDispatcher;
      }(BaseOverlayDispatcher);

      OverlayKeyboardDispatcher.ɵfac = function OverlayKeyboardDispatcher_Factory(t) {
        return new (t || OverlayKeyboardDispatcher)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]));
      };

      OverlayKeyboardDispatcher.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function OverlayKeyboardDispatcher_Factory() {
          return new OverlayKeyboardDispatcher(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]));
        },
        token: OverlayKeyboardDispatcher,
        providedIn: "root"
      });

      OverlayKeyboardDispatcher.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](OverlayKeyboardDispatcher, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Service for dispatching mouse click events that land on the body to appropriate overlay ref,
       * if any. It maintains a list of attached overlays to determine best suited overlay based
       * on event target and order of overlay opens.
       */


      var OverlayOutsideClickDispatcher = /*#__PURE__*/function (_BaseOverlayDispatche2) {
        _inherits2(OverlayOutsideClickDispatcher, _BaseOverlayDispatche2);

        var _super366 = _createSuper(OverlayOutsideClickDispatcher);

        function OverlayOutsideClickDispatcher(document, _platform) {
          var _this859;

          _classCallCheck2(this, OverlayOutsideClickDispatcher);

          _this859 = _super366.call(this, document);
          _this859._platform = _platform;
          _this859._cursorStyleIsSet = false;
          /** Click event listener that will be attached to the body propagate phase. */

          _this859._clickListener = function (event) {
            // Get the target through the `composedPath` if possible to account for shadow DOM.
            var target = event.composedPath ? event.composedPath()[0] : event.target; // We copy the array because the original may be modified asynchronously if the
            // outsidePointerEvents listener decides to detach overlays resulting in index errors inside
            // the for loop.

            var overlays = _this859._attachedOverlays.slice(); // Dispatch the mouse event to the top overlay which has subscribers to its mouse events.
            // We want to target all overlays for which the click could be considered as outside click.
            // As soon as we reach an overlay for which the click is not outside click we break off
            // the loop.


            for (var i = overlays.length - 1; i > -1; i--) {
              var overlayRef = overlays[i];

              if (overlayRef._outsidePointerEvents.observers.length < 1 || !overlayRef.hasAttached()) {
                continue;
              } // If it's a click inside the overlay, just break - we should do nothing
              // If it's an outside click dispatch the mouse event, and proceed with the next overlay


              if (overlayRef.overlayElement.contains(target)) {
                break;
              }

              overlayRef._outsidePointerEvents.next(event);
            }
          };

          return _this859;
        }
        /** Add a new overlay to the list of attached overlay refs. */


        _createClass2(OverlayOutsideClickDispatcher, [{
          key: "add",
          value: function add(overlayRef) {
            _get2(_getPrototypeOf2(OverlayOutsideClickDispatcher.prototype), "add", this).call(this, overlayRef); // tslint:disable: max-line-length
            // Safari on iOS does not generate click events for non-interactive
            // elements. However, we want to receive a click for any element outside
            // the overlay. We can force a "clickable" state by setting
            // `cursor: pointer` on the document body.
            // See https://developer.mozilla.org/en-US/docs/Web/API/Element/click_event#Safari_Mobile
            // and https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html
            // tslint:enable: max-line-length


            if (!this._isAttached) {
              this._document.body.addEventListener('click', this._clickListener, true);

              this._document.body.addEventListener('contextmenu', this._clickListener, true); // click event is not fired on iOS. To make element "clickable" we are
              // setting the cursor to pointer


              if (this._platform.IOS && !this._cursorStyleIsSet) {
                this._cursorOriginalValue = this._document.body.style.cursor;
                this._document.body.style.cursor = 'pointer';
                this._cursorStyleIsSet = true;
              }

              this._isAttached = true;
            }
          }
          /** Detaches the global keyboard event listener. */

        }, {
          key: "detach",
          value: function detach() {
            if (this._isAttached) {
              this._document.body.removeEventListener('click', this._clickListener, true);

              this._document.body.removeEventListener('contextmenu', this._clickListener, true);

              if (this._platform.IOS && this._cursorStyleIsSet) {
                this._document.body.style.cursor = this._cursorOriginalValue;
                this._cursorStyleIsSet = false;
              }

              this._isAttached = false;
            }
          }
        }]);

        return OverlayOutsideClickDispatcher;
      }(BaseOverlayDispatcher);

      OverlayOutsideClickDispatcher.ɵfac = function OverlayOutsideClickDispatcher_Factory(t) {
        return new (t || OverlayOutsideClickDispatcher)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_2__["Platform"]));
      };

      OverlayOutsideClickDispatcher.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function OverlayOutsideClickDispatcher_Factory() {
          return new OverlayOutsideClickDispatcher(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_2__["Platform"]));
        },
        token: OverlayOutsideClickDispatcher,
        providedIn: "root"
      });

      OverlayOutsideClickDispatcher.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
          }]
        }, {
          type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_2__["Platform"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](OverlayOutsideClickDispatcher, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
            }]
          }, {
            type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_2__["Platform"]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Whether we're in a testing environment.
       * TODO(crisbeto): remove this once we have an overlay testing module.
       */


      var isTestEnvironment = typeof window !== 'undefined' && !!window && !!(window.__karma__ || window.jasmine);
      /** Container inside which all overlays will render. */

      var OverlayContainer = /*#__PURE__*/function () {
        function OverlayContainer(document, _platform) {
          _classCallCheck2(this, OverlayContainer);

          this._platform = _platform;
          this._document = document;
        }

        _createClass2(OverlayContainer, [{
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            var container = this._containerElement;

            if (container && container.parentNode) {
              container.parentNode.removeChild(container);
            }
          }
          /**
           * This method returns the overlay container element. It will lazily
           * create the element the first time  it is called to facilitate using
           * the container in non-browser environments.
           * @returns the container element
           */

        }, {
          key: "getContainerElement",
          value: function getContainerElement() {
            if (!this._containerElement) {
              this._createContainer();
            }

            return this._containerElement;
          }
          /**
           * Create the overlay container element, which is simply a div
           * with the 'cdk-overlay-container' class on the document body.
           */

        }, {
          key: "_createContainer",
          value: function _createContainer() {
            var containerClass = 'cdk-overlay-container';

            if (this._platform.isBrowser || isTestEnvironment) {
              var oppositePlatformContainers = this._document.querySelectorAll(".".concat(containerClass, "[platform=\"server\"], ") + ".".concat(containerClass, "[platform=\"test\"]")); // Remove any old containers from the opposite platform.
              // This can happen when transitioning from the server to the client.


              for (var i = 0; i < oppositePlatformContainers.length; i++) {
                oppositePlatformContainers[i].parentNode.removeChild(oppositePlatformContainers[i]);
              }
            }

            var container = this._document.createElement('div');

            container.classList.add(containerClass); // A long time ago we kept adding new overlay containers whenever a new app was instantiated,
            // but at some point we added logic which clears the duplicate ones in order to avoid leaks.
            // The new logic was a little too aggressive since it was breaking some legitimate use cases.
            // To mitigate the problem we made it so that only containers from a different platform are
            // cleared, but the side-effect was that people started depending on the overly-aggressive
            // logic to clean up their tests for them. Until we can introduce an overlay-specific testing
            // module which does the cleanup, we try to detect that we're in a test environment and we
            // always clear the container. See #17006.
            // TODO(crisbeto): remove the test environment check once we have an overlay testing module.

            if (isTestEnvironment) {
              container.setAttribute('platform', 'test');
            } else if (!this._platform.isBrowser) {
              container.setAttribute('platform', 'server');
            }

            this._document.body.appendChild(container);

            this._containerElement = container;
          }
        }]);

        return OverlayContainer;
      }();

      OverlayContainer.ɵfac = function OverlayContainer_Factory(t) {
        return new (t || OverlayContainer)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_2__["Platform"]));
      };

      OverlayContainer.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function OverlayContainer_Factory() {
          return new OverlayContainer(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_2__["Platform"]));
        },
        token: OverlayContainer,
        providedIn: "root"
      });

      OverlayContainer.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
          }]
        }, {
          type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_2__["Platform"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](OverlayContainer, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
            }]
          }, {
            type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_2__["Platform"]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Reference to an overlay that has been created with the Overlay service.
       * Used to manipulate or dispose of said overlay.
       */


      var OverlayRef = /*#__PURE__*/function () {
        function OverlayRef(_portalOutlet, _host, _pane, _config, _ngZone, _keyboardDispatcher, _document, _location, _outsideClickDispatcher) {
          var _this860 = this;

          _classCallCheck2(this, OverlayRef);

          this._portalOutlet = _portalOutlet;
          this._host = _host;
          this._pane = _pane;
          this._config = _config;
          this._ngZone = _ngZone;
          this._keyboardDispatcher = _keyboardDispatcher;
          this._document = _document;
          this._location = _location;
          this._outsideClickDispatcher = _outsideClickDispatcher;
          this._backdropElement = null;
          this._backdropClick = new rxjs__WEBPACK_IMPORTED_MODULE_7__["Subject"]();
          this._attachments = new rxjs__WEBPACK_IMPORTED_MODULE_7__["Subject"]();
          this._detachments = new rxjs__WEBPACK_IMPORTED_MODULE_7__["Subject"]();
          this._locationChanges = rxjs__WEBPACK_IMPORTED_MODULE_7__["Subscription"].EMPTY;

          this._backdropClickHandler = function (event) {
            return _this860._backdropClick.next(event);
          };
          /** Stream of keydown events dispatched to this overlay. */


          this._keydownEvents = new rxjs__WEBPACK_IMPORTED_MODULE_7__["Subject"]();
          /** Stream of mouse outside events dispatched to this overlay. */

          this._outsidePointerEvents = new rxjs__WEBPACK_IMPORTED_MODULE_7__["Subject"]();

          if (_config.scrollStrategy) {
            this._scrollStrategy = _config.scrollStrategy;

            this._scrollStrategy.attach(this);
          }

          this._positionStrategy = _config.positionStrategy;
        }
        /** The overlay's HTML element */


        _createClass2(OverlayRef, [{
          key: "overlayElement",
          get: function get() {
            return this._pane;
          }
          /** The overlay's backdrop HTML element. */

        }, {
          key: "backdropElement",
          get: function get() {
            return this._backdropElement;
          }
          /**
           * Wrapper around the panel element. Can be used for advanced
           * positioning where a wrapper with specific styling is
           * required around the overlay pane.
           */

        }, {
          key: "hostElement",
          get: function get() {
            return this._host;
          }
          /**
           * Attaches content, given via a Portal, to the overlay.
           * If the overlay is configured to have a backdrop, it will be created.
           *
           * @param portal Portal instance to which to attach the overlay.
           * @returns The portal attachment result.
           */

        }, {
          key: "attach",
          value: function attach(portal) {
            var _this861 = this;

            var attachResult = this._portalOutlet.attach(portal); // Update the pane element with the given configuration.


            if (!this._host.parentElement && this._previousHostParent) {
              this._previousHostParent.appendChild(this._host);
            }

            if (this._positionStrategy) {
              this._positionStrategy.attach(this);
            }

            this._updateStackingOrder();

            this._updateElementSize();

            this._updateElementDirection();

            if (this._scrollStrategy) {
              this._scrollStrategy.enable();
            } // Update the position once the zone is stable so that the overlay will be fully rendered
            // before attempting to position it, as the position may depend on the size of the rendered
            // content.


            this._ngZone.onStable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_8__["take"])(1)).subscribe(function () {
              // The overlay could've been detached before the zone has stabilized.
              if (_this861.hasAttached()) {
                _this861.updatePosition();
              }
            }); // Enable pointer events for the overlay pane element.


            this._togglePointerEvents(true);

            if (this._config.hasBackdrop) {
              this._attachBackdrop();
            }

            if (this._config.panelClass) {
              this._toggleClasses(this._pane, this._config.panelClass, true);
            } // Only emit the `attachments` event once all other setup is done.


            this._attachments.next(); // Track this overlay by the keyboard dispatcher


            this._keyboardDispatcher.add(this);

            if (this._config.disposeOnNavigation) {
              this._locationChanges = this._location.subscribe(function () {
                return _this861.dispose();
              });
            }

            this._outsideClickDispatcher.add(this);

            return attachResult;
          }
          /**
           * Detaches an overlay from a portal.
           * @returns The portal detachment result.
           */

        }, {
          key: "detach",
          value: function detach() {
            if (!this.hasAttached()) {
              return;
            }

            this.detachBackdrop(); // When the overlay is detached, the pane element should disable pointer events.
            // This is necessary because otherwise the pane element will cover the page and disable
            // pointer events therefore. Depends on the position strategy and the applied pane boundaries.

            this._togglePointerEvents(false);

            if (this._positionStrategy && this._positionStrategy.detach) {
              this._positionStrategy.detach();
            }

            if (this._scrollStrategy) {
              this._scrollStrategy.disable();
            }

            var detachmentResult = this._portalOutlet.detach(); // Only emit after everything is detached.


            this._detachments.next(); // Remove this overlay from keyboard dispatcher tracking.


            this._keyboardDispatcher.remove(this); // Keeping the host element in the DOM can cause scroll jank, because it still gets
            // rendered, even though it's transparent and unclickable which is why we remove it.


            this._detachContentWhenStable();

            this._locationChanges.unsubscribe();

            this._outsideClickDispatcher.remove(this);

            return detachmentResult;
          }
          /** Cleans up the overlay from the DOM. */

        }, {
          key: "dispose",
          value: function dispose() {
            var isAttached = this.hasAttached();

            if (this._positionStrategy) {
              this._positionStrategy.dispose();
            }

            this._disposeScrollStrategy();

            this.detachBackdrop();

            this._locationChanges.unsubscribe();

            this._keyboardDispatcher.remove(this);

            this._portalOutlet.dispose();

            this._attachments.complete();

            this._backdropClick.complete();

            this._keydownEvents.complete();

            this._outsidePointerEvents.complete();

            this._outsideClickDispatcher.remove(this);

            if (this._host && this._host.parentNode) {
              this._host.parentNode.removeChild(this._host);

              this._host = null;
            }

            this._previousHostParent = this._pane = null;

            if (isAttached) {
              this._detachments.next();
            }

            this._detachments.complete();
          }
          /** Whether the overlay has attached content. */

        }, {
          key: "hasAttached",
          value: function hasAttached() {
            return this._portalOutlet.hasAttached();
          }
          /** Gets an observable that emits when the backdrop has been clicked. */

        }, {
          key: "backdropClick",
          value: function backdropClick() {
            return this._backdropClick;
          }
          /** Gets an observable that emits when the overlay has been attached. */

        }, {
          key: "attachments",
          value: function attachments() {
            return this._attachments;
          }
          /** Gets an observable that emits when the overlay has been detached. */

        }, {
          key: "detachments",
          value: function detachments() {
            return this._detachments;
          }
          /** Gets an observable of keydown events targeted to this overlay. */

        }, {
          key: "keydownEvents",
          value: function keydownEvents() {
            return this._keydownEvents;
          }
          /** Gets an observable of pointer events targeted outside this overlay. */

        }, {
          key: "outsidePointerEvents",
          value: function outsidePointerEvents() {
            return this._outsidePointerEvents;
          }
          /** Gets the current overlay configuration, which is immutable. */

        }, {
          key: "getConfig",
          value: function getConfig() {
            return this._config;
          }
          /** Updates the position of the overlay based on the position strategy. */

        }, {
          key: "updatePosition",
          value: function updatePosition() {
            if (this._positionStrategy) {
              this._positionStrategy.apply();
            }
          }
          /** Switches to a new position strategy and updates the overlay position. */

        }, {
          key: "updatePositionStrategy",
          value: function updatePositionStrategy(strategy) {
            if (strategy === this._positionStrategy) {
              return;
            }

            if (this._positionStrategy) {
              this._positionStrategy.dispose();
            }

            this._positionStrategy = strategy;

            if (this.hasAttached()) {
              strategy.attach(this);
              this.updatePosition();
            }
          }
          /** Update the size properties of the overlay. */

        }, {
          key: "updateSize",
          value: function updateSize(sizeConfig) {
            this._config = Object.assign(Object.assign({}, this._config), sizeConfig);

            this._updateElementSize();
          }
          /** Sets the LTR/RTL direction for the overlay. */

        }, {
          key: "setDirection",
          value: function setDirection(dir) {
            this._config = Object.assign(Object.assign({}, this._config), {
              direction: dir
            });

            this._updateElementDirection();
          }
          /** Add a CSS class or an array of classes to the overlay pane. */

        }, {
          key: "addPanelClass",
          value: function addPanelClass(classes) {
            if (this._pane) {
              this._toggleClasses(this._pane, classes, true);
            }
          }
          /** Remove a CSS class or an array of classes from the overlay pane. */

        }, {
          key: "removePanelClass",
          value: function removePanelClass(classes) {
            if (this._pane) {
              this._toggleClasses(this._pane, classes, false);
            }
          }
          /**
           * Returns the layout direction of the overlay panel.
           */

        }, {
          key: "getDirection",
          value: function getDirection() {
            var direction = this._config.direction;

            if (!direction) {
              return 'ltr';
            }

            return typeof direction === 'string' ? direction : direction.value;
          }
          /** Switches to a new scroll strategy. */

        }, {
          key: "updateScrollStrategy",
          value: function updateScrollStrategy(strategy) {
            if (strategy === this._scrollStrategy) {
              return;
            }

            this._disposeScrollStrategy();

            this._scrollStrategy = strategy;

            if (this.hasAttached()) {
              strategy.attach(this);
              strategy.enable();
            }
          }
          /** Updates the text direction of the overlay panel. */

        }, {
          key: "_updateElementDirection",
          value: function _updateElementDirection() {
            this._host.setAttribute('dir', this.getDirection());
          }
          /** Updates the size of the overlay element based on the overlay config. */

        }, {
          key: "_updateElementSize",
          value: function _updateElementSize() {
            if (!this._pane) {
              return;
            }

            var style = this._pane.style;
            style.width = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceCssPixelValue"])(this._config.width);
            style.height = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceCssPixelValue"])(this._config.height);
            style.minWidth = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceCssPixelValue"])(this._config.minWidth);
            style.minHeight = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceCssPixelValue"])(this._config.minHeight);
            style.maxWidth = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceCssPixelValue"])(this._config.maxWidth);
            style.maxHeight = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceCssPixelValue"])(this._config.maxHeight);
          }
          /** Toggles the pointer events for the overlay pane element. */

        }, {
          key: "_togglePointerEvents",
          value: function _togglePointerEvents(enablePointer) {
            this._pane.style.pointerEvents = enablePointer ? '' : 'none';
          }
          /** Attaches a backdrop for this overlay. */

        }, {
          key: "_attachBackdrop",
          value: function _attachBackdrop() {
            var _this862 = this;

            var showingClass = 'cdk-overlay-backdrop-showing';
            this._backdropElement = this._document.createElement('div');

            this._backdropElement.classList.add('cdk-overlay-backdrop');

            if (this._config.backdropClass) {
              this._toggleClasses(this._backdropElement, this._config.backdropClass, true);
            } // Insert the backdrop before the pane in the DOM order,
            // in order to handle stacked overlays properly.


            this._host.parentElement.insertBefore(this._backdropElement, this._host); // Forward backdrop clicks such that the consumer of the overlay can perform whatever
            // action desired when such a click occurs (usually closing the overlay).


            this._backdropElement.addEventListener('click', this._backdropClickHandler); // Add class to fade-in the backdrop after one frame.


            if (typeof requestAnimationFrame !== 'undefined') {
              this._ngZone.runOutsideAngular(function () {
                requestAnimationFrame(function () {
                  if (_this862._backdropElement) {
                    _this862._backdropElement.classList.add(showingClass);
                  }
                });
              });
            } else {
              this._backdropElement.classList.add(showingClass);
            }
          }
          /**
           * Updates the stacking order of the element, moving it to the top if necessary.
           * This is required in cases where one overlay was detached, while another one,
           * that should be behind it, was destroyed. The next time both of them are opened,
           * the stacking will be wrong, because the detached element's pane will still be
           * in its original DOM position.
           */

        }, {
          key: "_updateStackingOrder",
          value: function _updateStackingOrder() {
            if (this._host.nextSibling) {
              this._host.parentNode.appendChild(this._host);
            }
          }
          /** Detaches the backdrop (if any) associated with the overlay. */

        }, {
          key: "detachBackdrop",
          value: function detachBackdrop() {
            var _this863 = this;

            var backdropToDetach = this._backdropElement;

            if (!backdropToDetach) {
              return;
            }

            var timeoutId;

            var finishDetach = function finishDetach() {
              // It may not be attached to anything in certain cases (e.g. unit tests).
              if (backdropToDetach) {
                backdropToDetach.removeEventListener('click', _this863._backdropClickHandler);
                backdropToDetach.removeEventListener('transitionend', finishDetach);

                if (backdropToDetach.parentNode) {
                  backdropToDetach.parentNode.removeChild(backdropToDetach);
                }
              } // It is possible that a new portal has been attached to this overlay since we started
              // removing the backdrop. If that is the case, only clear the backdrop reference if it
              // is still the same instance that we started to remove.


              if (_this863._backdropElement == backdropToDetach) {
                _this863._backdropElement = null;
              }

              if (_this863._config.backdropClass) {
                _this863._toggleClasses(backdropToDetach, _this863._config.backdropClass, false);
              }

              clearTimeout(timeoutId);
            };

            backdropToDetach.classList.remove('cdk-overlay-backdrop-showing');

            this._ngZone.runOutsideAngular(function () {
              backdropToDetach.addEventListener('transitionend', finishDetach);
            }); // If the backdrop doesn't have a transition, the `transitionend` event won't fire.
            // In this case we make it unclickable and we try to remove it after a delay.


            backdropToDetach.style.pointerEvents = 'none'; // Run this outside the Angular zone because there's nothing that Angular cares about.
            // If it were to run inside the Angular zone, every test that used Overlay would have to be
            // either async or fakeAsync.

            timeoutId = this._ngZone.runOutsideAngular(function () {
              return setTimeout(finishDetach, 500);
            });
          }
          /** Toggles a single CSS class or an array of classes on an element. */

        }, {
          key: "_toggleClasses",
          value: function _toggleClasses(element, cssClasses, isAdd) {
            var classList = element.classList;
            Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceArray"])(cssClasses).forEach(function (cssClass) {
              // We can't do a spread here, because IE doesn't support setting multiple classes.
              // Also trying to add an empty string to a DOMTokenList will throw.
              if (cssClass) {
                isAdd ? classList.add(cssClass) : classList.remove(cssClass);
              }
            });
          }
          /** Detaches the overlay content next time the zone stabilizes. */

        }, {
          key: "_detachContentWhenStable",
          value: function _detachContentWhenStable() {
            var _this864 = this;

            // Normally we wouldn't have to explicitly run this outside the `NgZone`, however
            // if the consumer is using `zone-patch-rxjs`, the `Subscription.unsubscribe` call will
            // be patched to run inside the zone, which will throw us into an infinite loop.
            this._ngZone.runOutsideAngular(function () {
              // We can't remove the host here immediately, because the overlay pane's content
              // might still be animating. This stream helps us avoid interrupting the animation
              // by waiting for the pane to become empty.
              var subscription = _this864._ngZone.onStable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_8__["takeUntil"])(Object(rxjs__WEBPACK_IMPORTED_MODULE_7__["merge"])(_this864._attachments, _this864._detachments))).subscribe(function () {
                // Needs a couple of checks for the pane and host, because
                // they may have been removed by the time the zone stabilizes.
                if (!_this864._pane || !_this864._host || _this864._pane.children.length === 0) {
                  if (_this864._pane && _this864._config.panelClass) {
                    _this864._toggleClasses(_this864._pane, _this864._config.panelClass, false);
                  }

                  if (_this864._host && _this864._host.parentElement) {
                    _this864._previousHostParent = _this864._host.parentElement;

                    _this864._previousHostParent.removeChild(_this864._host);
                  }

                  subscription.unsubscribe();
                }
              });
            });
          }
          /** Disposes of a scroll strategy. */

        }, {
          key: "_disposeScrollStrategy",
          value: function _disposeScrollStrategy() {
            var scrollStrategy = this._scrollStrategy;

            if (scrollStrategy) {
              scrollStrategy.disable();

              if (scrollStrategy.detach) {
                scrollStrategy.detach();
              }
            }
          }
        }]);

        return OverlayRef;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // TODO: refactor clipping detection into a separate thing (part of scrolling module)
      // TODO: doesn't handle both flexible width and height when it has to scroll along both axis.

      /** Class to be added to the overlay bounding box. */


      var boundingBoxClass = 'cdk-overlay-connected-position-bounding-box';
      /** Regex used to split a string on its CSS units. */

      var cssUnitPattern = /([A-Za-z%]+)$/;
      /**
       * A strategy for positioning overlays. Using this strategy, an overlay is given an
       * implicit position relative some origin element. The relative position is defined in terms of
       * a point on the origin element that is connected to a point on the overlay element. For example,
       * a basic dropdown is connecting the bottom-left corner of the origin to the top-left corner
       * of the overlay.
       */

      var FlexibleConnectedPositionStrategy = /*#__PURE__*/function () {
        function FlexibleConnectedPositionStrategy(connectedTo, _viewportRuler, _document, _platform, _overlayContainer) {
          _classCallCheck2(this, FlexibleConnectedPositionStrategy);

          this._viewportRuler = _viewportRuler;
          this._document = _document;
          this._platform = _platform;
          this._overlayContainer = _overlayContainer;
          /** Last size used for the bounding box. Used to avoid resizing the overlay after open. */

          this._lastBoundingBoxSize = {
            width: 0,
            height: 0
          };
          /** Whether the overlay was pushed in a previous positioning. */

          this._isPushed = false;
          /** Whether the overlay can be pushed on-screen on the initial open. */

          this._canPush = true;
          /** Whether the overlay can grow via flexible width/height after the initial open. */

          this._growAfterOpen = false;
          /** Whether the overlay's width and height can be constrained to fit within the viewport. */

          this._hasFlexibleDimensions = true;
          /** Whether the overlay position is locked. */

          this._positionLocked = false;
          /** Amount of space that must be maintained between the overlay and the edge of the viewport. */

          this._viewportMargin = 0;
          /** The Scrollable containers used to check scrollable view properties on position change. */

          this._scrollables = [];
          /** Ordered list of preferred positions, from most to least desirable. */

          this._preferredPositions = [];
          /** Subject that emits whenever the position changes. */

          this._positionChanges = new rxjs__WEBPACK_IMPORTED_MODULE_7__["Subject"]();
          /** Subscription to viewport size changes. */

          this._resizeSubscription = rxjs__WEBPACK_IMPORTED_MODULE_7__["Subscription"].EMPTY;
          /** Default offset for the overlay along the x axis. */

          this._offsetX = 0;
          /** Default offset for the overlay along the y axis. */

          this._offsetY = 0;
          /** Keeps track of the CSS classes that the position strategy has applied on the overlay panel. */

          this._appliedPanelClasses = [];
          /** Observable sequence of position changes. */

          this.positionChanges = this._positionChanges;
          this.setOrigin(connectedTo);
        }
        /** Ordered list of preferred positions, from most to least desirable. */


        _createClass2(FlexibleConnectedPositionStrategy, [{
          key: "positions",
          get: function get() {
            return this._preferredPositions;
          }
          /** Attaches this position strategy to an overlay. */

        }, {
          key: "attach",
          value: function attach(overlayRef) {
            var _this865 = this;

            if (this._overlayRef && overlayRef !== this._overlayRef && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw Error('This position strategy is already attached to an overlay');
            }

            this._validatePositions();

            overlayRef.hostElement.classList.add(boundingBoxClass);
            this._overlayRef = overlayRef;
            this._boundingBox = overlayRef.hostElement;
            this._pane = overlayRef.overlayElement;
            this._isDisposed = false;
            this._isInitialRender = true;
            this._lastPosition = null;

            this._resizeSubscription.unsubscribe();

            this._resizeSubscription = this._viewportRuler.change().subscribe(function () {
              // When the window is resized, we want to trigger the next reposition as if it
              // was an initial render, in order for the strategy to pick a new optimal position,
              // otherwise position locking will cause it to stay at the old one.
              _this865._isInitialRender = true;

              _this865.apply();
            });
          }
          /**
           * Updates the position of the overlay element, using whichever preferred position relative
           * to the origin best fits on-screen.
           *
           * The selection of a position goes as follows:
           *  - If any positions fit completely within the viewport as-is,
           *      choose the first position that does so.
           *  - If flexible dimensions are enabled and at least one satifies the given minimum width/height,
           *      choose the position with the greatest available size modified by the positions' weight.
           *  - If pushing is enabled, take the position that went off-screen the least and push it
           *      on-screen.
           *  - If none of the previous criteria were met, use the position that goes off-screen the least.
           * @docs-private
           */

        }, {
          key: "apply",
          value: function apply() {
            // We shouldn't do anything if the strategy was disposed or we're on the server.
            if (this._isDisposed || !this._platform.isBrowser) {
              return;
            } // If the position has been applied already (e.g. when the overlay was opened) and the
            // consumer opted into locking in the position, re-use the old position, in order to
            // prevent the overlay from jumping around.


            if (!this._isInitialRender && this._positionLocked && this._lastPosition) {
              this.reapplyLastPosition();
              return;
            }

            this._clearPanelClasses();

            this._resetOverlayElementStyles();

            this._resetBoundingBoxStyles(); // We need the bounding rects for the origin and the overlay to determine how to position
            // the overlay relative to the origin.
            // We use the viewport rect to determine whether a position would go off-screen.


            this._viewportRect = this._getNarrowedViewportRect();
            this._originRect = this._getOriginRect();
            this._overlayRect = this._pane.getBoundingClientRect();
            var originRect = this._originRect;
            var overlayRect = this._overlayRect;
            var viewportRect = this._viewportRect; // Positions where the overlay will fit with flexible dimensions.

            var flexibleFits = []; // Fallback if none of the preferred positions fit within the viewport.

            var fallback; // Go through each of the preferred positions looking for a good fit.
            // If a good fit is found, it will be applied immediately.

            var _iterator101 = _createForOfIteratorHelper(this._preferredPositions),
                _step100;

            try {
              for (_iterator101.s(); !(_step100 = _iterator101.n()).done;) {
                var pos = _step100.value;

                // Get the exact (x, y) coordinate for the point-of-origin on the origin element.
                var originPoint = this._getOriginPoint(originRect, pos); // From that point-of-origin, get the exact (x, y) coordinate for the top-left corner of the
                // overlay in this position. We use the top-left corner for calculations and later translate
                // this into an appropriate (top, left, bottom, right) style.


                var overlayPoint = this._getOverlayPoint(originPoint, overlayRect, pos); // Calculate how well the overlay would fit into the viewport with this point.


                var overlayFit = this._getOverlayFit(overlayPoint, overlayRect, viewportRect, pos); // If the overlay, without any further work, fits into the viewport, use this position.


                if (overlayFit.isCompletelyWithinViewport) {
                  this._isPushed = false;

                  this._applyPosition(pos, originPoint);

                  return;
                } // If the overlay has flexible dimensions, we can use this position
                // so long as there's enough space for the minimum dimensions.


                if (this._canFitWithFlexibleDimensions(overlayFit, overlayPoint, viewportRect)) {
                  // Save positions where the overlay will fit with flexible dimensions. We will use these
                  // if none of the positions fit *without* flexible dimensions.
                  flexibleFits.push({
                    position: pos,
                    origin: originPoint,
                    overlayRect: overlayRect,
                    boundingBoxRect: this._calculateBoundingBoxRect(originPoint, pos)
                  });
                  continue;
                } // If the current preferred position does not fit on the screen, remember the position
                // if it has more visible area on-screen than we've seen and move onto the next preferred
                // position.


                if (!fallback || fallback.overlayFit.visibleArea < overlayFit.visibleArea) {
                  fallback = {
                    overlayFit: overlayFit,
                    overlayPoint: overlayPoint,
                    originPoint: originPoint,
                    position: pos,
                    overlayRect: overlayRect
                  };
                }
              } // If there are any positions where the overlay would fit with flexible dimensions, choose the
              // one that has the greatest area available modified by the position's weight

            } catch (err) {
              _iterator101.e(err);
            } finally {
              _iterator101.f();
            }

            if (flexibleFits.length) {
              var bestFit = null;
              var bestScore = -1;

              var _iterator102 = _createForOfIteratorHelper(flexibleFits),
                  _step101;

              try {
                for (_iterator102.s(); !(_step101 = _iterator102.n()).done;) {
                  var fit = _step101.value;
                  var score = fit.boundingBoxRect.width * fit.boundingBoxRect.height * (fit.position.weight || 1);

                  if (score > bestScore) {
                    bestScore = score;
                    bestFit = fit;
                  }
                }
              } catch (err) {
                _iterator102.e(err);
              } finally {
                _iterator102.f();
              }

              this._isPushed = false;

              this._applyPosition(bestFit.position, bestFit.origin);

              return;
            } // When none of the preferred positions fit within the viewport, take the position
            // that went off-screen the least and attempt to push it on-screen.


            if (this._canPush) {
              // TODO(jelbourn): after pushing, the opening "direction" of the overlay might not make sense.
              this._isPushed = true;

              this._applyPosition(fallback.position, fallback.originPoint);

              return;
            } // All options for getting the overlay within the viewport have been exhausted, so go with the
            // position that went off-screen the least.


            this._applyPosition(fallback.position, fallback.originPoint);
          }
        }, {
          key: "detach",
          value: function detach() {
            this._clearPanelClasses();

            this._lastPosition = null;
            this._previousPushAmount = null;

            this._resizeSubscription.unsubscribe();
          }
          /** Cleanup after the element gets destroyed. */

        }, {
          key: "dispose",
          value: function dispose() {
            if (this._isDisposed) {
              return;
            } // We can't use `_resetBoundingBoxStyles` here, because it resets
            // some properties to zero, rather than removing them.


            if (this._boundingBox) {
              extendStyles(this._boundingBox.style, {
                top: '',
                left: '',
                right: '',
                bottom: '',
                height: '',
                width: '',
                alignItems: '',
                justifyContent: ''
              });
            }

            if (this._pane) {
              this._resetOverlayElementStyles();
            }

            if (this._overlayRef) {
              this._overlayRef.hostElement.classList.remove(boundingBoxClass);
            }

            this.detach();

            this._positionChanges.complete();

            this._overlayRef = this._boundingBox = null;
            this._isDisposed = true;
          }
          /**
           * This re-aligns the overlay element with the trigger in its last calculated position,
           * even if a position higher in the "preferred positions" list would now fit. This
           * allows one to re-align the panel without changing the orientation of the panel.
           */

        }, {
          key: "reapplyLastPosition",
          value: function reapplyLastPosition() {
            if (!this._isDisposed && (!this._platform || this._platform.isBrowser)) {
              this._originRect = this._getOriginRect();
              this._overlayRect = this._pane.getBoundingClientRect();
              this._viewportRect = this._getNarrowedViewportRect();
              var lastPosition = this._lastPosition || this._preferredPositions[0];

              var originPoint = this._getOriginPoint(this._originRect, lastPosition);

              this._applyPosition(lastPosition, originPoint);
            }
          }
          /**
           * Sets the list of Scrollable containers that host the origin element so that
           * on reposition we can evaluate if it or the overlay has been clipped or outside view. Every
           * Scrollable must be an ancestor element of the strategy's origin element.
           */

        }, {
          key: "withScrollableContainers",
          value: function withScrollableContainers(scrollables) {
            this._scrollables = scrollables;
            return this;
          }
          /**
           * Adds new preferred positions.
           * @param positions List of positions options for this overlay.
           */

        }, {
          key: "withPositions",
          value: function withPositions(positions) {
            this._preferredPositions = positions; // If the last calculated position object isn't part of the positions anymore, clear
            // it in order to avoid it being picked up if the consumer tries to re-apply.

            if (positions.indexOf(this._lastPosition) === -1) {
              this._lastPosition = null;
            }

            this._validatePositions();

            return this;
          }
          /**
           * Sets a minimum distance the overlay may be positioned to the edge of the viewport.
           * @param margin Required margin between the overlay and the viewport edge in pixels.
           */

        }, {
          key: "withViewportMargin",
          value: function withViewportMargin(margin) {
            this._viewportMargin = margin;
            return this;
          }
          /** Sets whether the overlay's width and height can be constrained to fit within the viewport. */

        }, {
          key: "withFlexibleDimensions",
          value: function withFlexibleDimensions() {
            var flexibleDimensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
            this._hasFlexibleDimensions = flexibleDimensions;
            return this;
          }
          /** Sets whether the overlay can grow after the initial open via flexible width/height. */

        }, {
          key: "withGrowAfterOpen",
          value: function withGrowAfterOpen() {
            var growAfterOpen = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
            this._growAfterOpen = growAfterOpen;
            return this;
          }
          /** Sets whether the overlay can be pushed on-screen if none of the provided positions fit. */

        }, {
          key: "withPush",
          value: function withPush() {
            var canPush = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
            this._canPush = canPush;
            return this;
          }
          /**
           * Sets whether the overlay's position should be locked in after it is positioned
           * initially. When an overlay is locked in, it won't attempt to reposition itself
           * when the position is re-applied (e.g. when the user scrolls away).
           * @param isLocked Whether the overlay should locked in.
           */

        }, {
          key: "withLockedPosition",
          value: function withLockedPosition() {
            var isLocked = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
            this._positionLocked = isLocked;
            return this;
          }
          /**
           * Sets the origin, relative to which to position the overlay.
           * Using an element origin is useful for building components that need to be positioned
           * relatively to a trigger (e.g. dropdown menus or tooltips), whereas using a point can be
           * used for cases like contextual menus which open relative to the user's pointer.
           * @param origin Reference to the new origin.
           */

        }, {
          key: "setOrigin",
          value: function setOrigin(origin) {
            this._origin = origin;
            return this;
          }
          /**
           * Sets the default offset for the overlay's connection point on the x-axis.
           * @param offset New offset in the X axis.
           */

        }, {
          key: "withDefaultOffsetX",
          value: function withDefaultOffsetX(offset) {
            this._offsetX = offset;
            return this;
          }
          /**
           * Sets the default offset for the overlay's connection point on the y-axis.
           * @param offset New offset in the Y axis.
           */

        }, {
          key: "withDefaultOffsetY",
          value: function withDefaultOffsetY(offset) {
            this._offsetY = offset;
            return this;
          }
          /**
           * Configures that the position strategy should set a `transform-origin` on some elements
           * inside the overlay, depending on the current position that is being applied. This is
           * useful for the cases where the origin of an animation can change depending on the
           * alignment of the overlay.
           * @param selector CSS selector that will be used to find the target
           *    elements onto which to set the transform origin.
           */

        }, {
          key: "withTransformOriginOn",
          value: function withTransformOriginOn(selector) {
            this._transformOriginSelector = selector;
            return this;
          }
          /**
           * Gets the (x, y) coordinate of a connection point on the origin based on a relative position.
           */

        }, {
          key: "_getOriginPoint",
          value: function _getOriginPoint(originRect, pos) {
            var x;

            if (pos.originX == 'center') {
              // Note: when centering we should always use the `left`
              // offset, otherwise the position will be wrong in RTL.
              x = originRect.left + originRect.width / 2;
            } else {
              var startX = this._isRtl() ? originRect.right : originRect.left;
              var endX = this._isRtl() ? originRect.left : originRect.right;
              x = pos.originX == 'start' ? startX : endX;
            }

            var y;

            if (pos.originY == 'center') {
              y = originRect.top + originRect.height / 2;
            } else {
              y = pos.originY == 'top' ? originRect.top : originRect.bottom;
            }

            return {
              x: x,
              y: y
            };
          }
          /**
           * Gets the (x, y) coordinate of the top-left corner of the overlay given a given position and
           * origin point to which the overlay should be connected.
           */

        }, {
          key: "_getOverlayPoint",
          value: function _getOverlayPoint(originPoint, overlayRect, pos) {
            // Calculate the (overlayStartX, overlayStartY), the start of the
            // potential overlay position relative to the origin point.
            var overlayStartX;

            if (pos.overlayX == 'center') {
              overlayStartX = -overlayRect.width / 2;
            } else if (pos.overlayX === 'start') {
              overlayStartX = this._isRtl() ? -overlayRect.width : 0;
            } else {
              overlayStartX = this._isRtl() ? 0 : -overlayRect.width;
            }

            var overlayStartY;

            if (pos.overlayY == 'center') {
              overlayStartY = -overlayRect.height / 2;
            } else {
              overlayStartY = pos.overlayY == 'top' ? 0 : -overlayRect.height;
            } // The (x, y) coordinates of the overlay.


            return {
              x: originPoint.x + overlayStartX,
              y: originPoint.y + overlayStartY
            };
          }
          /** Gets how well an overlay at the given point will fit within the viewport. */

        }, {
          key: "_getOverlayFit",
          value: function _getOverlayFit(point, rawOverlayRect, viewport, position) {
            // Round the overlay rect when comparing against the
            // viewport, because the viewport is always rounded.
            var overlay = getRoundedBoundingClientRect(rawOverlayRect);
            var x = point.x,
                y = point.y;

            var offsetX = this._getOffset(position, 'x');

            var offsetY = this._getOffset(position, 'y'); // Account for the offsets since they could push the overlay out of the viewport.


            if (offsetX) {
              x += offsetX;
            }

            if (offsetY) {
              y += offsetY;
            } // How much the overlay would overflow at this position, on each side.


            var leftOverflow = 0 - x;
            var rightOverflow = x + overlay.width - viewport.width;
            var topOverflow = 0 - y;
            var bottomOverflow = y + overlay.height - viewport.height; // Visible parts of the element on each axis.

            var visibleWidth = this._subtractOverflows(overlay.width, leftOverflow, rightOverflow);

            var visibleHeight = this._subtractOverflows(overlay.height, topOverflow, bottomOverflow);

            var visibleArea = visibleWidth * visibleHeight;
            return {
              visibleArea: visibleArea,
              isCompletelyWithinViewport: overlay.width * overlay.height === visibleArea,
              fitsInViewportVertically: visibleHeight === overlay.height,
              fitsInViewportHorizontally: visibleWidth == overlay.width
            };
          }
          /**
           * Whether the overlay can fit within the viewport when it may resize either its width or height.
           * @param fit How well the overlay fits in the viewport at some position.
           * @param point The (x, y) coordinates of the overlat at some position.
           * @param viewport The geometry of the viewport.
           */

        }, {
          key: "_canFitWithFlexibleDimensions",
          value: function _canFitWithFlexibleDimensions(fit, point, viewport) {
            if (this._hasFlexibleDimensions) {
              var availableHeight = viewport.bottom - point.y;
              var availableWidth = viewport.right - point.x;
              var minHeight = getPixelValue(this._overlayRef.getConfig().minHeight);
              var minWidth = getPixelValue(this._overlayRef.getConfig().minWidth);
              var verticalFit = fit.fitsInViewportVertically || minHeight != null && minHeight <= availableHeight;
              var horizontalFit = fit.fitsInViewportHorizontally || minWidth != null && minWidth <= availableWidth;
              return verticalFit && horizontalFit;
            }

            return false;
          }
          /**
           * Gets the point at which the overlay can be "pushed" on-screen. If the overlay is larger than
           * the viewport, the top-left corner will be pushed on-screen (with overflow occuring on the
           * right and bottom).
           *
           * @param start Starting point from which the overlay is pushed.
           * @param overlay Dimensions of the overlay.
           * @param scrollPosition Current viewport scroll position.
           * @returns The point at which to position the overlay after pushing. This is effectively a new
           *     originPoint.
           */

        }, {
          key: "_pushOverlayOnScreen",
          value: function _pushOverlayOnScreen(start, rawOverlayRect, scrollPosition) {
            // If the position is locked and we've pushed the overlay already, reuse the previous push
            // amount, rather than pushing it again. If we were to continue pushing, the element would
            // remain in the viewport, which goes against the expectations when position locking is enabled.
            if (this._previousPushAmount && this._positionLocked) {
              return {
                x: start.x + this._previousPushAmount.x,
                y: start.y + this._previousPushAmount.y
              };
            } // Round the overlay rect when comparing against the
            // viewport, because the viewport is always rounded.


            var overlay = getRoundedBoundingClientRect(rawOverlayRect);
            var viewport = this._viewportRect; // Determine how much the overlay goes outside the viewport on each
            // side, which we'll use to decide which direction to push it.

            var overflowRight = Math.max(start.x + overlay.width - viewport.width, 0);
            var overflowBottom = Math.max(start.y + overlay.height - viewport.height, 0);
            var overflowTop = Math.max(viewport.top - scrollPosition.top - start.y, 0);
            var overflowLeft = Math.max(viewport.left - scrollPosition.left - start.x, 0); // Amount by which to push the overlay in each axis such that it remains on-screen.

            var pushX = 0;
            var pushY = 0; // If the overlay fits completely within the bounds of the viewport, push it from whichever
            // direction is goes off-screen. Otherwise, push the top-left corner such that its in the
            // viewport and allow for the trailing end of the overlay to go out of bounds.

            if (overlay.width <= viewport.width) {
              pushX = overflowLeft || -overflowRight;
            } else {
              pushX = start.x < this._viewportMargin ? viewport.left - scrollPosition.left - start.x : 0;
            }

            if (overlay.height <= viewport.height) {
              pushY = overflowTop || -overflowBottom;
            } else {
              pushY = start.y < this._viewportMargin ? viewport.top - scrollPosition.top - start.y : 0;
            }

            this._previousPushAmount = {
              x: pushX,
              y: pushY
            };
            return {
              x: start.x + pushX,
              y: start.y + pushY
            };
          }
          /**
           * Applies a computed position to the overlay and emits a position change.
           * @param position The position preference
           * @param originPoint The point on the origin element where the overlay is connected.
           */

        }, {
          key: "_applyPosition",
          value: function _applyPosition(position, originPoint) {
            this._setTransformOrigin(position);

            this._setOverlayElementStyles(originPoint, position);

            this._setBoundingBoxStyles(originPoint, position);

            if (position.panelClass) {
              this._addPanelClasses(position.panelClass);
            } // Save the last connected position in case the position needs to be re-calculated.


            this._lastPosition = position; // Notify that the position has been changed along with its change properties.
            // We only emit if we've got any subscriptions, because the scroll visibility
            // calculcations can be somewhat expensive.

            if (this._positionChanges.observers.length) {
              var scrollableViewProperties = this._getScrollVisibility();

              var changeEvent = new ConnectedOverlayPositionChange(position, scrollableViewProperties);

              this._positionChanges.next(changeEvent);
            }

            this._isInitialRender = false;
          }
          /** Sets the transform origin based on the configured selector and the passed-in position.  */

        }, {
          key: "_setTransformOrigin",
          value: function _setTransformOrigin(position) {
            if (!this._transformOriginSelector) {
              return;
            }

            var elements = this._boundingBox.querySelectorAll(this._transformOriginSelector);

            var xOrigin;
            var yOrigin = position.overlayY;

            if (position.overlayX === 'center') {
              xOrigin = 'center';
            } else if (this._isRtl()) {
              xOrigin = position.overlayX === 'start' ? 'right' : 'left';
            } else {
              xOrigin = position.overlayX === 'start' ? 'left' : 'right';
            }

            for (var i = 0; i < elements.length; i++) {
              elements[i].style.transformOrigin = "".concat(xOrigin, " ").concat(yOrigin);
            }
          }
          /**
           * Gets the position and size of the overlay's sizing container.
           *
           * This method does no measuring and applies no styles so that we can cheaply compute the
           * bounds for all positions and choose the best fit based on these results.
           */

        }, {
          key: "_calculateBoundingBoxRect",
          value: function _calculateBoundingBoxRect(origin, position) {
            var viewport = this._viewportRect;

            var isRtl = this._isRtl();

            var height, top, bottom;

            if (position.overlayY === 'top') {
              // Overlay is opening "downward" and thus is bound by the bottom viewport edge.
              top = origin.y;
              height = viewport.height - top + this._viewportMargin;
            } else if (position.overlayY === 'bottom') {
              // Overlay is opening "upward" and thus is bound by the top viewport edge. We need to add
              // the viewport margin back in, because the viewport rect is narrowed down to remove the
              // margin, whereas the `origin` position is calculated based on its `ClientRect`.
              bottom = viewport.height - origin.y + this._viewportMargin * 2;
              height = viewport.height - bottom + this._viewportMargin;
            } else {
              // If neither top nor bottom, it means that the overlay is vertically centered on the
              // origin point. Note that we want the position relative to the viewport, rather than
              // the page, which is why we don't use something like `viewport.bottom - origin.y` and
              // `origin.y - viewport.top`.
              var smallestDistanceToViewportEdge = Math.min(viewport.bottom - origin.y + viewport.top, origin.y);
              var previousHeight = this._lastBoundingBoxSize.height;
              height = smallestDistanceToViewportEdge * 2;
              top = origin.y - smallestDistanceToViewportEdge;

              if (height > previousHeight && !this._isInitialRender && !this._growAfterOpen) {
                top = origin.y - previousHeight / 2;
              }
            } // The overlay is opening 'right-ward' (the content flows to the right).


            var isBoundedByRightViewportEdge = position.overlayX === 'start' && !isRtl || position.overlayX === 'end' && isRtl; // The overlay is opening 'left-ward' (the content flows to the left).

            var isBoundedByLeftViewportEdge = position.overlayX === 'end' && !isRtl || position.overlayX === 'start' && isRtl;
            var width, left, right;

            if (isBoundedByLeftViewportEdge) {
              right = viewport.width - origin.x + this._viewportMargin;
              width = origin.x - this._viewportMargin;
            } else if (isBoundedByRightViewportEdge) {
              left = origin.x;
              width = viewport.right - origin.x;
            } else {
              // If neither start nor end, it means that the overlay is horizontally centered on the
              // origin point. Note that we want the position relative to the viewport, rather than
              // the page, which is why we don't use something like `viewport.right - origin.x` and
              // `origin.x - viewport.left`.
              var _smallestDistanceToViewportEdge = Math.min(viewport.right - origin.x + viewport.left, origin.x);

              var previousWidth = this._lastBoundingBoxSize.width;
              width = _smallestDistanceToViewportEdge * 2;
              left = origin.x - _smallestDistanceToViewportEdge;

              if (width > previousWidth && !this._isInitialRender && !this._growAfterOpen) {
                left = origin.x - previousWidth / 2;
              }
            }

            return {
              top: top,
              left: left,
              bottom: bottom,
              right: right,
              width: width,
              height: height
            };
          }
          /**
           * Sets the position and size of the overlay's sizing wrapper. The wrapper is positioned on the
           * origin's connection point and stetches to the bounds of the viewport.
           *
           * @param origin The point on the origin element where the overlay is connected.
           * @param position The position preference
           */

        }, {
          key: "_setBoundingBoxStyles",
          value: function _setBoundingBoxStyles(origin, position) {
            var boundingBoxRect = this._calculateBoundingBoxRect(origin, position); // It's weird if the overlay *grows* while scrolling, so we take the last size into account
            // when applying a new size.


            if (!this._isInitialRender && !this._growAfterOpen) {
              boundingBoxRect.height = Math.min(boundingBoxRect.height, this._lastBoundingBoxSize.height);
              boundingBoxRect.width = Math.min(boundingBoxRect.width, this._lastBoundingBoxSize.width);
            }

            var styles = {};

            if (this._hasExactPosition()) {
              styles.top = styles.left = '0';
              styles.bottom = styles.right = styles.maxHeight = styles.maxWidth = '';
              styles.width = styles.height = '100%';
            } else {
              var maxHeight = this._overlayRef.getConfig().maxHeight;

              var maxWidth = this._overlayRef.getConfig().maxWidth;

              styles.height = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceCssPixelValue"])(boundingBoxRect.height);
              styles.top = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceCssPixelValue"])(boundingBoxRect.top);
              styles.bottom = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceCssPixelValue"])(boundingBoxRect.bottom);
              styles.width = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceCssPixelValue"])(boundingBoxRect.width);
              styles.left = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceCssPixelValue"])(boundingBoxRect.left);
              styles.right = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceCssPixelValue"])(boundingBoxRect.right); // Push the pane content towards the proper direction.

              if (position.overlayX === 'center') {
                styles.alignItems = 'center';
              } else {
                styles.alignItems = position.overlayX === 'end' ? 'flex-end' : 'flex-start';
              }

              if (position.overlayY === 'center') {
                styles.justifyContent = 'center';
              } else {
                styles.justifyContent = position.overlayY === 'bottom' ? 'flex-end' : 'flex-start';
              }

              if (maxHeight) {
                styles.maxHeight = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceCssPixelValue"])(maxHeight);
              }

              if (maxWidth) {
                styles.maxWidth = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceCssPixelValue"])(maxWidth);
              }
            }

            this._lastBoundingBoxSize = boundingBoxRect;
            extendStyles(this._boundingBox.style, styles);
          }
          /** Resets the styles for the bounding box so that a new positioning can be computed. */

        }, {
          key: "_resetBoundingBoxStyles",
          value: function _resetBoundingBoxStyles() {
            extendStyles(this._boundingBox.style, {
              top: '0',
              left: '0',
              right: '0',
              bottom: '0',
              height: '',
              width: '',
              alignItems: '',
              justifyContent: ''
            });
          }
          /** Resets the styles for the overlay pane so that a new positioning can be computed. */

        }, {
          key: "_resetOverlayElementStyles",
          value: function _resetOverlayElementStyles() {
            extendStyles(this._pane.style, {
              top: '',
              left: '',
              bottom: '',
              right: '',
              position: '',
              transform: ''
            });
          }
          /** Sets positioning styles to the overlay element. */

        }, {
          key: "_setOverlayElementStyles",
          value: function _setOverlayElementStyles(originPoint, position) {
            var styles = {};

            var hasExactPosition = this._hasExactPosition();

            var hasFlexibleDimensions = this._hasFlexibleDimensions;

            var config = this._overlayRef.getConfig();

            if (hasExactPosition) {
              var scrollPosition = this._viewportRuler.getViewportScrollPosition();

              extendStyles(styles, this._getExactOverlayY(position, originPoint, scrollPosition));
              extendStyles(styles, this._getExactOverlayX(position, originPoint, scrollPosition));
            } else {
              styles.position = 'static';
            } // Use a transform to apply the offsets. We do this because the `center` positions rely on
            // being in the normal flex flow and setting a `top` / `left` at all will completely throw
            // off the position. We also can't use margins, because they won't have an effect in some
            // cases where the element doesn't have anything to "push off of". Finally, this works
            // better both with flexible and non-flexible positioning.


            var transformString = '';

            var offsetX = this._getOffset(position, 'x');

            var offsetY = this._getOffset(position, 'y');

            if (offsetX) {
              transformString += "translateX(".concat(offsetX, "px) ");
            }

            if (offsetY) {
              transformString += "translateY(".concat(offsetY, "px)");
            }

            styles.transform = transformString.trim(); // If a maxWidth or maxHeight is specified on the overlay, we remove them. We do this because
            // we need these values to both be set to "100%" for the automatic flexible sizing to work.
            // The maxHeight and maxWidth are set on the boundingBox in order to enforce the constraint.
            // Note that this doesn't apply when we have an exact position, in which case we do want to
            // apply them because they'll be cleared from the bounding box.

            if (config.maxHeight) {
              if (hasExactPosition) {
                styles.maxHeight = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceCssPixelValue"])(config.maxHeight);
              } else if (hasFlexibleDimensions) {
                styles.maxHeight = '';
              }
            }

            if (config.maxWidth) {
              if (hasExactPosition) {
                styles.maxWidth = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceCssPixelValue"])(config.maxWidth);
              } else if (hasFlexibleDimensions) {
                styles.maxWidth = '';
              }
            }

            extendStyles(this._pane.style, styles);
          }
          /** Gets the exact top/bottom for the overlay when not using flexible sizing or when pushing. */

        }, {
          key: "_getExactOverlayY",
          value: function _getExactOverlayY(position, originPoint, scrollPosition) {
            // Reset any existing styles. This is necessary in case the
            // preferred position has changed since the last `apply`.
            var styles = {
              top: '',
              bottom: ''
            };

            var overlayPoint = this._getOverlayPoint(originPoint, this._overlayRect, position);

            if (this._isPushed) {
              overlayPoint = this._pushOverlayOnScreen(overlayPoint, this._overlayRect, scrollPosition);
            }

            var virtualKeyboardOffset = this._overlayContainer.getContainerElement().getBoundingClientRect().top; // Normally this would be zero, however when the overlay is attached to an input (e.g. in an
            // autocomplete), mobile browsers will shift everything in order to put the input in the middle
            // of the screen and to make space for the virtual keyboard. We need to account for this offset,
            // otherwise our positioning will be thrown off.


            overlayPoint.y -= virtualKeyboardOffset; // We want to set either `top` or `bottom` based on whether the overlay wants to appear
            // above or below the origin and the direction in which the element will expand.

            if (position.overlayY === 'bottom') {
              // When using `bottom`, we adjust the y position such that it is the distance
              // from the bottom of the viewport rather than the top.
              var documentHeight = this._document.documentElement.clientHeight;
              styles.bottom = "".concat(documentHeight - (overlayPoint.y + this._overlayRect.height), "px");
            } else {
              styles.top = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceCssPixelValue"])(overlayPoint.y);
            }

            return styles;
          }
          /** Gets the exact left/right for the overlay when not using flexible sizing or when pushing. */

        }, {
          key: "_getExactOverlayX",
          value: function _getExactOverlayX(position, originPoint, scrollPosition) {
            // Reset any existing styles. This is necessary in case the preferred position has
            // changed since the last `apply`.
            var styles = {
              left: '',
              right: ''
            };

            var overlayPoint = this._getOverlayPoint(originPoint, this._overlayRect, position);

            if (this._isPushed) {
              overlayPoint = this._pushOverlayOnScreen(overlayPoint, this._overlayRect, scrollPosition);
            } // We want to set either `left` or `right` based on whether the overlay wants to appear "before"
            // or "after" the origin, which determines the direction in which the element will expand.
            // For the horizontal axis, the meaning of "before" and "after" change based on whether the
            // page is in RTL or LTR.


            var horizontalStyleProperty;

            if (this._isRtl()) {
              horizontalStyleProperty = position.overlayX === 'end' ? 'left' : 'right';
            } else {
              horizontalStyleProperty = position.overlayX === 'end' ? 'right' : 'left';
            } // When we're setting `right`, we adjust the x position such that it is the distance
            // from the right edge of the viewport rather than the left edge.


            if (horizontalStyleProperty === 'right') {
              var documentWidth = this._document.documentElement.clientWidth;
              styles.right = "".concat(documentWidth - (overlayPoint.x + this._overlayRect.width), "px");
            } else {
              styles.left = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceCssPixelValue"])(overlayPoint.x);
            }

            return styles;
          }
          /**
           * Gets the view properties of the trigger and overlay, including whether they are clipped
           * or completely outside the view of any of the strategy's scrollables.
           */

        }, {
          key: "_getScrollVisibility",
          value: function _getScrollVisibility() {
            // Note: needs fresh rects since the position could've changed.
            var originBounds = this._getOriginRect();

            var overlayBounds = this._pane.getBoundingClientRect(); // TODO(jelbourn): instead of needing all of the client rects for these scrolling containers
            // every time, we should be able to use the scrollTop of the containers if the size of those
            // containers hasn't changed.


            var scrollContainerBounds = this._scrollables.map(function (scrollable) {
              return scrollable.getElementRef().nativeElement.getBoundingClientRect();
            });

            return {
              isOriginClipped: isElementClippedByScrolling(originBounds, scrollContainerBounds),
              isOriginOutsideView: isElementScrolledOutsideView(originBounds, scrollContainerBounds),
              isOverlayClipped: isElementClippedByScrolling(overlayBounds, scrollContainerBounds),
              isOverlayOutsideView: isElementScrolledOutsideView(overlayBounds, scrollContainerBounds)
            };
          }
          /** Subtracts the amount that an element is overflowing on an axis from its length. */

        }, {
          key: "_subtractOverflows",
          value: function _subtractOverflows(length) {
            for (var _len62 = arguments.length, overflows = new Array(_len62 > 1 ? _len62 - 1 : 0), _key64 = 1; _key64 < _len62; _key64++) {
              overflows[_key64 - 1] = arguments[_key64];
            }

            return overflows.reduce(function (currentValue, currentOverflow) {
              return currentValue - Math.max(currentOverflow, 0);
            }, length);
          }
          /** Narrows the given viewport rect by the current _viewportMargin. */

        }, {
          key: "_getNarrowedViewportRect",
          value: function _getNarrowedViewportRect() {
            // We recalculate the viewport rect here ourselves, rather than using the ViewportRuler,
            // because we want to use the `clientWidth` and `clientHeight` as the base. The difference
            // being that the client properties don't include the scrollbar, as opposed to `innerWidth`
            // and `innerHeight` that do. This is necessary, because the overlay container uses
            // 100% `width` and `height` which don't include the scrollbar either.
            var width = this._document.documentElement.clientWidth;
            var height = this._document.documentElement.clientHeight;

            var scrollPosition = this._viewportRuler.getViewportScrollPosition();

            return {
              top: scrollPosition.top + this._viewportMargin,
              left: scrollPosition.left + this._viewportMargin,
              right: scrollPosition.left + width - this._viewportMargin,
              bottom: scrollPosition.top + height - this._viewportMargin,
              width: width - 2 * this._viewportMargin,
              height: height - 2 * this._viewportMargin
            };
          }
          /** Whether the we're dealing with an RTL context */

        }, {
          key: "_isRtl",
          value: function _isRtl() {
            return this._overlayRef.getDirection() === 'rtl';
          }
          /** Determines whether the overlay uses exact or flexible positioning. */

        }, {
          key: "_hasExactPosition",
          value: function _hasExactPosition() {
            return !this._hasFlexibleDimensions || this._isPushed;
          }
          /** Retrieves the offset of a position along the x or y axis. */

        }, {
          key: "_getOffset",
          value: function _getOffset(position, axis) {
            if (axis === 'x') {
              // We don't do something like `position['offset' + axis]` in
              // order to avoid breking minifiers that rename properties.
              return position.offsetX == null ? this._offsetX : position.offsetX;
            }

            return position.offsetY == null ? this._offsetY : position.offsetY;
          }
          /** Validates that the current position match the expected values. */

        }, {
          key: "_validatePositions",
          value: function _validatePositions() {
            if (typeof ngDevMode === 'undefined' || ngDevMode) {
              if (!this._preferredPositions.length) {
                throw Error('FlexibleConnectedPositionStrategy: At least one position is required.');
              } // TODO(crisbeto): remove these once Angular's template type
              // checking is advanced enough to catch these cases.


              this._preferredPositions.forEach(function (pair) {
                validateHorizontalPosition('originX', pair.originX);
                validateVerticalPosition('originY', pair.originY);
                validateHorizontalPosition('overlayX', pair.overlayX);
                validateVerticalPosition('overlayY', pair.overlayY);
              });
            }
          }
          /** Adds a single CSS class or an array of classes on the overlay panel. */

        }, {
          key: "_addPanelClasses",
          value: function _addPanelClasses(cssClasses) {
            var _this866 = this;

            if (this._pane) {
              Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceArray"])(cssClasses).forEach(function (cssClass) {
                if (cssClass !== '' && _this866._appliedPanelClasses.indexOf(cssClass) === -1) {
                  _this866._appliedPanelClasses.push(cssClass);

                  _this866._pane.classList.add(cssClass);
                }
              });
            }
          }
          /** Clears the classes that the position strategy has applied from the overlay panel. */

        }, {
          key: "_clearPanelClasses",
          value: function _clearPanelClasses() {
            var _this867 = this;

            if (this._pane) {
              this._appliedPanelClasses.forEach(function (cssClass) {
                _this867._pane.classList.remove(cssClass);
              });

              this._appliedPanelClasses = [];
            }
          }
          /** Returns the ClientRect of the current origin. */

        }, {
          key: "_getOriginRect",
          value: function _getOriginRect() {
            var origin = this._origin;

            if (origin instanceof _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]) {
              return origin.nativeElement.getBoundingClientRect();
            } // Check for Element so SVG elements are also supported.


            if (origin instanceof Element) {
              return origin.getBoundingClientRect();
            }

            var width = origin.width || 0;
            var height = origin.height || 0; // If the origin is a point, return a client rect as if it was a 0x0 element at the point.

            return {
              top: origin.y,
              bottom: origin.y + height,
              left: origin.x,
              right: origin.x + width,
              height: height,
              width: width
            };
          }
        }]);

        return FlexibleConnectedPositionStrategy;
      }();
      /** Shallow-extends a stylesheet object with another stylesheet object. */


      function extendStyles(destination, source) {
        for (var key in source) {
          if (source.hasOwnProperty(key)) {
            destination[key] = source[key];
          }
        }

        return destination;
      }
      /**
       * Extracts the pixel value as a number from a value, if it's a number
       * or a CSS pixel string (e.g. `1337px`). Otherwise returns null.
       */


      function getPixelValue(input) {
        if (typeof input !== 'number' && input != null) {
          var _input$split = input.split(cssUnitPattern),
              _input$split2 = _slicedToArray(_input$split, 2),
              value = _input$split2[0],
              units = _input$split2[1];

          return !units || units === 'px' ? parseFloat(value) : null;
        }

        return input || null;
      }
      /**
       * Gets a version of an element's bounding `ClientRect` where all the values are rounded down to
       * the nearest pixel. This allows us to account for the cases where there may be sub-pixel
       * deviations in the `ClientRect` returned by the browser (e.g. when zoomed in with a percentage
       * size, see #21350).
       */


      function getRoundedBoundingClientRect(clientRect) {
        return {
          top: Math.floor(clientRect.top),
          right: Math.floor(clientRect.right),
          bottom: Math.floor(clientRect.bottom),
          left: Math.floor(clientRect.left),
          width: Math.floor(clientRect.width),
          height: Math.floor(clientRect.height)
        };
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * A strategy for positioning overlays. Using this strategy, an overlay is given an
       * implicit position relative to some origin element. The relative position is defined in terms of
       * a point on the origin element that is connected to a point on the overlay element. For example,
       * a basic dropdown is connecting the bottom-left corner of the origin to the top-left corner
       * of the overlay.
       * @deprecated Use `FlexibleConnectedPositionStrategy` instead.
       * @breaking-change 8.0.0
       */


      var ConnectedPositionStrategy = /*#__PURE__*/function () {
        function ConnectedPositionStrategy(originPos, overlayPos, connectedTo, viewportRuler, document, platform, overlayContainer) {
          _classCallCheck2(this, ConnectedPositionStrategy);

          /** Ordered list of preferred positions, from most to least desirable. */
          this._preferredPositions = []; // Since the `ConnectedPositionStrategy` is deprecated and we don't want to maintain
          // the extra logic, we create an instance of the positioning strategy that has some
          // defaults that make it behave as the old position strategy and to which we'll
          // proxy all of the API calls.

          this._positionStrategy = new FlexibleConnectedPositionStrategy(connectedTo, viewportRuler, document, platform, overlayContainer).withFlexibleDimensions(false).withPush(false).withViewportMargin(0);
          this.withFallbackPosition(originPos, overlayPos);
          this.onPositionChange = this._positionStrategy.positionChanges;
        }
        /** Ordered list of preferred positions, from most to least desirable. */


        _createClass2(ConnectedPositionStrategy, [{
          key: "positions",
          get: function get() {
            return this._preferredPositions;
          }
          /** Attach this position strategy to an overlay. */

        }, {
          key: "attach",
          value: function attach(overlayRef) {
            this._overlayRef = overlayRef;

            this._positionStrategy.attach(overlayRef);

            if (this._direction) {
              overlayRef.setDirection(this._direction);
              this._direction = null;
            }
          }
          /** Disposes all resources used by the position strategy. */

        }, {
          key: "dispose",
          value: function dispose() {
            this._positionStrategy.dispose();
          }
          /** @docs-private */

        }, {
          key: "detach",
          value: function detach() {
            this._positionStrategy.detach();
          }
          /**
           * Updates the position of the overlay element, using whichever preferred position relative
           * to the origin fits on-screen.
           * @docs-private
           */

        }, {
          key: "apply",
          value: function apply() {
            this._positionStrategy.apply();
          }
          /**
           * Re-positions the overlay element with the trigger in its last calculated position,
           * even if a position higher in the "preferred positions" list would now fit. This
           * allows one to re-align the panel without changing the orientation of the panel.
           */

        }, {
          key: "recalculateLastPosition",
          value: function recalculateLastPosition() {
            this._positionStrategy.reapplyLastPosition();
          }
          /**
           * Sets the list of Scrollable containers that host the origin element so that
           * on reposition we can evaluate if it or the overlay has been clipped or outside view. Every
           * Scrollable must be an ancestor element of the strategy's origin element.
           */

        }, {
          key: "withScrollableContainers",
          value: function withScrollableContainers(scrollables) {
            this._positionStrategy.withScrollableContainers(scrollables);
          }
          /**
           * Adds a new preferred fallback position.
           * @param originPos
           * @param overlayPos
           */

        }, {
          key: "withFallbackPosition",
          value: function withFallbackPosition(originPos, overlayPos, offsetX, offsetY) {
            var position = new ConnectionPositionPair(originPos, overlayPos, offsetX, offsetY);

            this._preferredPositions.push(position);

            this._positionStrategy.withPositions(this._preferredPositions);

            return this;
          }
          /**
           * Sets the layout direction so the overlay's position can be adjusted to match.
           * @param dir New layout direction.
           */

        }, {
          key: "withDirection",
          value: function withDirection(dir) {
            // Since the direction might be declared before the strategy is attached,
            // we save the value in a temporary property and we'll transfer it to the
            // overlay ref on attachment.
            if (this._overlayRef) {
              this._overlayRef.setDirection(dir);
            } else {
              this._direction = dir;
            }

            return this;
          }
          /**
           * Sets an offset for the overlay's connection point on the x-axis
           * @param offset New offset in the X axis.
           */

        }, {
          key: "withOffsetX",
          value: function withOffsetX(offset) {
            this._positionStrategy.withDefaultOffsetX(offset);

            return this;
          }
          /**
           * Sets an offset for the overlay's connection point on the y-axis
           * @param  offset New offset in the Y axis.
           */

        }, {
          key: "withOffsetY",
          value: function withOffsetY(offset) {
            this._positionStrategy.withDefaultOffsetY(offset);

            return this;
          }
          /**
           * Sets whether the overlay's position should be locked in after it is positioned
           * initially. When an overlay is locked in, it won't attempt to reposition itself
           * when the position is re-applied (e.g. when the user scrolls away).
           * @param isLocked Whether the overlay should locked in.
           */

        }, {
          key: "withLockedPosition",
          value: function withLockedPosition(isLocked) {
            this._positionStrategy.withLockedPosition(isLocked);

            return this;
          }
          /**
           * Overwrites the current set of positions with an array of new ones.
           * @param positions Position pairs to be set on the strategy.
           */

        }, {
          key: "withPositions",
          value: function withPositions(positions) {
            this._preferredPositions = positions.slice();

            this._positionStrategy.withPositions(this._preferredPositions);

            return this;
          }
          /**
           * Sets the origin element, relative to which to position the overlay.
           * @param origin Reference to the new origin element.
           */

        }, {
          key: "setOrigin",
          value: function setOrigin(origin) {
            this._positionStrategy.setOrigin(origin);

            return this;
          }
        }]);

        return ConnectedPositionStrategy;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Class to be added to the overlay pane wrapper. */


      var wrapperClass = 'cdk-global-overlay-wrapper';
      /**
       * A strategy for positioning overlays. Using this strategy, an overlay is given an
       * explicit position relative to the browser's viewport. We use flexbox, instead of
       * transforms, in order to avoid issues with subpixel rendering which can cause the
       * element to become blurry.
       */

      var GlobalPositionStrategy = /*#__PURE__*/function () {
        function GlobalPositionStrategy() {
          _classCallCheck2(this, GlobalPositionStrategy);

          this._cssPosition = 'static';
          this._topOffset = '';
          this._bottomOffset = '';
          this._leftOffset = '';
          this._rightOffset = '';
          this._alignItems = '';
          this._justifyContent = '';
          this._width = '';
          this._height = '';
        }

        _createClass2(GlobalPositionStrategy, [{
          key: "attach",
          value: function attach(overlayRef) {
            var config = overlayRef.getConfig();
            this._overlayRef = overlayRef;

            if (this._width && !config.width) {
              overlayRef.updateSize({
                width: this._width
              });
            }

            if (this._height && !config.height) {
              overlayRef.updateSize({
                height: this._height
              });
            }

            overlayRef.hostElement.classList.add(wrapperClass);
            this._isDisposed = false;
          }
          /**
           * Sets the top position of the overlay. Clears any previously set vertical position.
           * @param value New top offset.
           */

        }, {
          key: "top",
          value: function top() {
            var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
            this._bottomOffset = '';
            this._topOffset = value;
            this._alignItems = 'flex-start';
            return this;
          }
          /**
           * Sets the left position of the overlay. Clears any previously set horizontal position.
           * @param value New left offset.
           */

        }, {
          key: "left",
          value: function left() {
            var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
            this._rightOffset = '';
            this._leftOffset = value;
            this._justifyContent = 'flex-start';
            return this;
          }
          /**
           * Sets the bottom position of the overlay. Clears any previously set vertical position.
           * @param value New bottom offset.
           */

        }, {
          key: "bottom",
          value: function bottom() {
            var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
            this._topOffset = '';
            this._bottomOffset = value;
            this._alignItems = 'flex-end';
            return this;
          }
          /**
           * Sets the right position of the overlay. Clears any previously set horizontal position.
           * @param value New right offset.
           */

        }, {
          key: "right",
          value: function right() {
            var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
            this._leftOffset = '';
            this._rightOffset = value;
            this._justifyContent = 'flex-end';
            return this;
          }
          /**
           * Sets the overlay width and clears any previously set width.
           * @param value New width for the overlay
           * @deprecated Pass the `width` through the `OverlayConfig`.
           * @breaking-change 8.0.0
           */

        }, {
          key: "width",
          value: function width() {
            var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';

            if (this._overlayRef) {
              this._overlayRef.updateSize({
                width: value
              });
            } else {
              this._width = value;
            }

            return this;
          }
          /**
           * Sets the overlay height and clears any previously set height.
           * @param value New height for the overlay
           * @deprecated Pass the `height` through the `OverlayConfig`.
           * @breaking-change 8.0.0
           */

        }, {
          key: "height",
          value: function height() {
            var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';

            if (this._overlayRef) {
              this._overlayRef.updateSize({
                height: value
              });
            } else {
              this._height = value;
            }

            return this;
          }
          /**
           * Centers the overlay horizontally with an optional offset.
           * Clears any previously set horizontal position.
           *
           * @param offset Overlay offset from the horizontal center.
           */

        }, {
          key: "centerHorizontally",
          value: function centerHorizontally() {
            var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
            this.left(offset);
            this._justifyContent = 'center';
            return this;
          }
          /**
           * Centers the overlay vertically with an optional offset.
           * Clears any previously set vertical position.
           *
           * @param offset Overlay offset from the vertical center.
           */

        }, {
          key: "centerVertically",
          value: function centerVertically() {
            var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
            this.top(offset);
            this._alignItems = 'center';
            return this;
          }
          /**
           * Apply the position to the element.
           * @docs-private
           */

        }, {
          key: "apply",
          value: function apply() {
            // Since the overlay ref applies the strategy asynchronously, it could
            // have been disposed before it ends up being applied. If that is the
            // case, we shouldn't do anything.
            if (!this._overlayRef || !this._overlayRef.hasAttached()) {
              return;
            }

            var styles = this._overlayRef.overlayElement.style;
            var parentStyles = this._overlayRef.hostElement.style;

            var config = this._overlayRef.getConfig();

            var width = config.width,
                height = config.height,
                maxWidth = config.maxWidth,
                maxHeight = config.maxHeight;
            var shouldBeFlushHorizontally = (width === '100%' || width === '100vw') && (!maxWidth || maxWidth === '100%' || maxWidth === '100vw');
            var shouldBeFlushVertically = (height === '100%' || height === '100vh') && (!maxHeight || maxHeight === '100%' || maxHeight === '100vh');
            styles.position = this._cssPosition;
            styles.marginLeft = shouldBeFlushHorizontally ? '0' : this._leftOffset;
            styles.marginTop = shouldBeFlushVertically ? '0' : this._topOffset;
            styles.marginBottom = this._bottomOffset;
            styles.marginRight = this._rightOffset;

            if (shouldBeFlushHorizontally) {
              parentStyles.justifyContent = 'flex-start';
            } else if (this._justifyContent === 'center') {
              parentStyles.justifyContent = 'center';
            } else if (this._overlayRef.getConfig().direction === 'rtl') {
              // In RTL the browser will invert `flex-start` and `flex-end` automatically, but we
              // don't want that because our positioning is explicitly `left` and `right`, hence
              // why we do another inversion to ensure that the overlay stays in the same position.
              // TODO: reconsider this if we add `start` and `end` methods.
              if (this._justifyContent === 'flex-start') {
                parentStyles.justifyContent = 'flex-end';
              } else if (this._justifyContent === 'flex-end') {
                parentStyles.justifyContent = 'flex-start';
              }
            } else {
              parentStyles.justifyContent = this._justifyContent;
            }

            parentStyles.alignItems = shouldBeFlushVertically ? 'flex-start' : this._alignItems;
          }
          /**
           * Cleans up the DOM changes from the position strategy.
           * @docs-private
           */

        }, {
          key: "dispose",
          value: function dispose() {
            if (this._isDisposed || !this._overlayRef) {
              return;
            }

            var styles = this._overlayRef.overlayElement.style;
            var parent = this._overlayRef.hostElement;
            var parentStyles = parent.style;
            parent.classList.remove(wrapperClass);
            parentStyles.justifyContent = parentStyles.alignItems = styles.marginTop = styles.marginBottom = styles.marginLeft = styles.marginRight = styles.position = '';
            this._overlayRef = null;
            this._isDisposed = true;
          }
        }]);

        return GlobalPositionStrategy;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Builder for overlay position strategy. */


      var OverlayPositionBuilder = /*#__PURE__*/function () {
        function OverlayPositionBuilder(_viewportRuler, _document, _platform, _overlayContainer) {
          _classCallCheck2(this, OverlayPositionBuilder);

          this._viewportRuler = _viewportRuler;
          this._document = _document;
          this._platform = _platform;
          this._overlayContainer = _overlayContainer;
        }
        /**
         * Creates a global position strategy.
         */


        _createClass2(OverlayPositionBuilder, [{
          key: "global",
          value: function global() {
            return new GlobalPositionStrategy();
          }
          /**
           * Creates a relative position strategy.
           * @param elementRef
           * @param originPos
           * @param overlayPos
           * @deprecated Use `flexibleConnectedTo` instead.
           * @breaking-change 8.0.0
           */

        }, {
          key: "connectedTo",
          value: function connectedTo(elementRef, originPos, overlayPos) {
            return new ConnectedPositionStrategy(originPos, overlayPos, elementRef, this._viewportRuler, this._document, this._platform, this._overlayContainer);
          }
          /**
           * Creates a flexible position strategy.
           * @param origin Origin relative to which to position the overlay.
           */

        }, {
          key: "flexibleConnectedTo",
          value: function flexibleConnectedTo(origin) {
            return new FlexibleConnectedPositionStrategy(origin, this._viewportRuler, this._document, this._platform, this._overlayContainer);
          }
        }]);

        return OverlayPositionBuilder;
      }();

      OverlayPositionBuilder.ɵfac = function OverlayPositionBuilder_Factory(t) {
        return new (t || OverlayPositionBuilder)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__["ViewportRuler"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_2__["Platform"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](OverlayContainer));
      };

      OverlayPositionBuilder.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function OverlayPositionBuilder_Factory() {
          return new OverlayPositionBuilder(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__["ViewportRuler"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_2__["Platform"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(OverlayContainer));
        },
        token: OverlayPositionBuilder,
        providedIn: "root"
      });

      OverlayPositionBuilder.ctorParameters = function () {
        return [{
          type: _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__["ViewportRuler"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
          }]
        }, {
          type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_2__["Platform"]
        }, {
          type: OverlayContainer
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](OverlayPositionBuilder, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__["ViewportRuler"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
            }]
          }, {
            type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_2__["Platform"]
          }, {
            type: OverlayContainer
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Next overlay unique ID. */


      var nextUniqueId = 0; // Note that Overlay is *not* scoped to the app root because of the ComponentFactoryResolver
      // which needs to be different depending on where OverlayModule is imported.

      /**
       * Service to create Overlays. Overlays are dynamically added pieces of floating UI, meant to be
       * used as a low-level building block for other components. Dialogs, tooltips, menus,
       * selects, etc. can all be built using overlays. The service should primarily be used by authors
       * of re-usable components rather than developers building end-user applications.
       *
       * An overlay *is* a PortalOutlet, so any kind of Portal can be loaded into one.
       */

      var Overlay = /*#__PURE__*/function () {
        function Overlay(
        /** Scrolling strategies that can be used when creating an overlay. */
        scrollStrategies, _overlayContainer, _componentFactoryResolver, _positionBuilder, _keyboardDispatcher, _injector, _ngZone, _document, _directionality, _location, _outsideClickDispatcher) {
          _classCallCheck2(this, Overlay);

          this.scrollStrategies = scrollStrategies;
          this._overlayContainer = _overlayContainer;
          this._componentFactoryResolver = _componentFactoryResolver;
          this._positionBuilder = _positionBuilder;
          this._keyboardDispatcher = _keyboardDispatcher;
          this._injector = _injector;
          this._ngZone = _ngZone;
          this._document = _document;
          this._directionality = _directionality;
          this._location = _location;
          this._outsideClickDispatcher = _outsideClickDispatcher;
        }
        /**
         * Creates an overlay.
         * @param config Configuration applied to the overlay.
         * @returns Reference to the created overlay.
         */


        _createClass2(Overlay, [{
          key: "create",
          value: function create(config) {
            var host = this._createHostElement();

            var pane = this._createPaneElement(host);

            var portalOutlet = this._createPortalOutlet(pane);

            var overlayConfig = new OverlayConfig(config);
            overlayConfig.direction = overlayConfig.direction || this._directionality.value;
            return new OverlayRef(portalOutlet, host, pane, overlayConfig, this._ngZone, this._keyboardDispatcher, this._document, this._location, this._outsideClickDispatcher);
          }
          /**
           * Gets a position builder that can be used, via fluent API,
           * to construct and configure a position strategy.
           * @returns An overlay position builder.
           */

        }, {
          key: "position",
          value: function position() {
            return this._positionBuilder;
          }
          /**
           * Creates the DOM element for an overlay and appends it to the overlay container.
           * @returns Newly-created pane element
           */

        }, {
          key: "_createPaneElement",
          value: function _createPaneElement(host) {
            var pane = this._document.createElement('div');

            pane.id = "cdk-overlay-".concat(nextUniqueId++);
            pane.classList.add('cdk-overlay-pane');
            host.appendChild(pane);
            return pane;
          }
          /**
           * Creates the host element that wraps around an overlay
           * and can be used for advanced positioning.
           * @returns Newly-create host element.
           */

        }, {
          key: "_createHostElement",
          value: function _createHostElement() {
            var host = this._document.createElement('div');

            this._overlayContainer.getContainerElement().appendChild(host);

            return host;
          }
          /**
           * Create a DomPortalOutlet into which the overlay content can be loaded.
           * @param pane The DOM element to turn into a portal outlet.
           * @returns A portal outlet for the given DOM element.
           */

        }, {
          key: "_createPortalOutlet",
          value: function _createPortalOutlet(pane) {
            // We have to resolve the ApplicationRef later in order to allow people
            // to use overlay-based providers during app initialization.
            if (!this._appRef) {
              this._appRef = this._injector.get(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationRef"]);
            }

            return new _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_6__["DomPortalOutlet"](pane, this._componentFactoryResolver, this._appRef, this._injector, this._document);
          }
        }]);

        return Overlay;
      }();

      Overlay.ɵfac = function Overlay_Factory(t) {
        return new (t || Overlay)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](ScrollStrategyOptions), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](OverlayContainer), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentFactoryResolver"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](OverlayPositionBuilder), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](OverlayKeyboardDispatcher), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_3__["Directionality"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__["Location"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](OverlayOutsideClickDispatcher));
      };

      Overlay.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({
        token: Overlay,
        factory: Overlay.ɵfac
      });

      Overlay.ctorParameters = function () {
        return [{
          type: ScrollStrategyOptions
        }, {
          type: OverlayContainer
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentFactoryResolver"]
        }, {
          type: OverlayPositionBuilder
        }, {
          type: OverlayKeyboardDispatcher
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
          }]
        }, {
          type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_3__["Directionality"]
        }, {
          type: _angular_common__WEBPACK_IMPORTED_MODULE_4__["Location"]
        }, {
          type: OverlayOutsideClickDispatcher
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](Overlay, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
        }], function () {
          return [{
            type: ScrollStrategyOptions
          }, {
            type: OverlayContainer
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentFactoryResolver"]
          }, {
            type: OverlayPositionBuilder
          }, {
            type: OverlayKeyboardDispatcher
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
            }]
          }, {
            type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_3__["Directionality"]
          }, {
            type: _angular_common__WEBPACK_IMPORTED_MODULE_4__["Location"]
          }, {
            type: OverlayOutsideClickDispatcher
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Default set of positions for the overlay. Follows the behavior of a dropdown. */


      var defaultPositionList = [{
        originX: 'start',
        originY: 'bottom',
        overlayX: 'start',
        overlayY: 'top'
      }, {
        originX: 'start',
        originY: 'top',
        overlayX: 'start',
        overlayY: 'bottom'
      }, {
        originX: 'end',
        originY: 'top',
        overlayX: 'end',
        overlayY: 'bottom'
      }, {
        originX: 'end',
        originY: 'bottom',
        overlayX: 'end',
        overlayY: 'top'
      }];
      /** Injection token that determines the scroll handling while the connected overlay is open. */

      var CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('cdk-connected-overlay-scroll-strategy');
      /**
       * Directive applied to an element to make it usable as an origin for an Overlay using a
       * ConnectedPositionStrategy.
       */

      var CdkOverlayOrigin = function CdkOverlayOrigin(
      /** Reference to the element on which the directive is applied. */
      elementRef) {
        _classCallCheck2(this, CdkOverlayOrigin);

        this.elementRef = elementRef;
      };

      CdkOverlayOrigin.ɵfac = function CdkOverlayOrigin_Factory(t) {
        return new (t || CdkOverlayOrigin)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]));
      };

      CdkOverlayOrigin.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({
        type: CdkOverlayOrigin,
        selectors: [["", "cdk-overlay-origin", ""], ["", "overlay-origin", ""], ["", "cdkOverlayOrigin", ""]],
        exportAs: ["cdkOverlayOrigin"]
      });

      CdkOverlayOrigin.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkOverlayOrigin, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
          args: [{
            selector: '[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]',
            exportAs: 'cdkOverlayOrigin'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
          }];
        }, null);
      })();
      /**
       * Directive to facilitate declarative creation of an
       * Overlay using a FlexibleConnectedPositionStrategy.
       */


      var CdkConnectedOverlay = /*#__PURE__*/function () {
        // TODO(jelbourn): inputs for size, scroll behavior, animation, etc.
        function CdkConnectedOverlay(_overlay, templateRef, viewContainerRef, scrollStrategyFactory, _dir) {
          _classCallCheck2(this, CdkConnectedOverlay);

          this._overlay = _overlay;
          this._dir = _dir;
          this._hasBackdrop = false;
          this._lockPosition = false;
          this._growAfterOpen = false;
          this._flexibleDimensions = false;
          this._push = false;
          this._backdropSubscription = rxjs__WEBPACK_IMPORTED_MODULE_7__["Subscription"].EMPTY;
          this._attachSubscription = rxjs__WEBPACK_IMPORTED_MODULE_7__["Subscription"].EMPTY;
          this._detachSubscription = rxjs__WEBPACK_IMPORTED_MODULE_7__["Subscription"].EMPTY;
          this._positionSubscription = rxjs__WEBPACK_IMPORTED_MODULE_7__["Subscription"].EMPTY;
          /** Margin between the overlay and the viewport edges. */

          this.viewportMargin = 0;
          /** Whether the overlay is open. */

          this.open = false;
          /** Whether the overlay can be closed by user interaction. */

          this.disableClose = false;
          /** Event emitted when the backdrop is clicked. */

          this.backdropClick = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["EventEmitter"]();
          /** Event emitted when the position has changed. */

          this.positionChange = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["EventEmitter"]();
          /** Event emitted when the overlay has been attached. */

          this.attach = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["EventEmitter"]();
          /** Event emitted when the overlay has been detached. */

          this.detach = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["EventEmitter"]();
          /** Emits when there are keyboard events that are targeted at the overlay. */

          this.overlayKeydown = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["EventEmitter"]();
          /** Emits when there are mouse outside click events that are targeted at the overlay. */

          this.overlayOutsideClick = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["EventEmitter"]();
          this._templatePortal = new _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_6__["TemplatePortal"](templateRef, viewContainerRef);
          this._scrollStrategyFactory = scrollStrategyFactory;
          this.scrollStrategy = this._scrollStrategyFactory();
        }
        /** The offset in pixels for the overlay connection point on the x-axis */


        _createClass2(CdkConnectedOverlay, [{
          key: "offsetX",
          get: function get() {
            return this._offsetX;
          },
          set: function set(offsetX) {
            this._offsetX = offsetX;

            if (this._position) {
              this._updatePositionStrategy(this._position);
            }
          }
          /** The offset in pixels for the overlay connection point on the y-axis */

        }, {
          key: "offsetY",
          get: function get() {
            return this._offsetY;
          },
          set: function set(offsetY) {
            this._offsetY = offsetY;

            if (this._position) {
              this._updatePositionStrategy(this._position);
            }
          }
          /** Whether or not the overlay should attach a backdrop. */

        }, {
          key: "hasBackdrop",
          get: function get() {
            return this._hasBackdrop;
          },
          set: function set(value) {
            this._hasBackdrop = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceBooleanProperty"])(value);
          }
          /** Whether or not the overlay should be locked when scrolling. */

        }, {
          key: "lockPosition",
          get: function get() {
            return this._lockPosition;
          },
          set: function set(value) {
            this._lockPosition = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceBooleanProperty"])(value);
          }
          /** Whether the overlay's width and height can be constrained to fit within the viewport. */

        }, {
          key: "flexibleDimensions",
          get: function get() {
            return this._flexibleDimensions;
          },
          set: function set(value) {
            this._flexibleDimensions = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceBooleanProperty"])(value);
          }
          /** Whether the overlay can grow after the initial open when flexible positioning is turned on. */

        }, {
          key: "growAfterOpen",
          get: function get() {
            return this._growAfterOpen;
          },
          set: function set(value) {
            this._growAfterOpen = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceBooleanProperty"])(value);
          }
          /** Whether the overlay can be pushed on-screen if none of the provided positions fit. */

        }, {
          key: "push",
          get: function get() {
            return this._push;
          },
          set: function set(value) {
            this._push = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceBooleanProperty"])(value);
          }
          /** The associated overlay reference. */

        }, {
          key: "overlayRef",
          get: function get() {
            return this._overlayRef;
          }
          /** The element's layout direction. */

        }, {
          key: "dir",
          get: function get() {
            return this._dir ? this._dir.value : 'ltr';
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._attachSubscription.unsubscribe();

            this._detachSubscription.unsubscribe();

            this._backdropSubscription.unsubscribe();

            this._positionSubscription.unsubscribe();

            if (this._overlayRef) {
              this._overlayRef.dispose();
            }
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            if (this._position) {
              this._updatePositionStrategy(this._position);

              this._overlayRef.updateSize({
                width: this.width,
                minWidth: this.minWidth,
                height: this.height,
                minHeight: this.minHeight
              });

              if (changes['origin'] && this.open) {
                this._position.apply();
              }
            }

            if (changes['open']) {
              this.open ? this._attachOverlay() : this._detachOverlay();
            }
          }
          /** Creates an overlay */

        }, {
          key: "_createOverlay",
          value: function _createOverlay() {
            var _this868 = this;

            if (!this.positions || !this.positions.length) {
              this.positions = defaultPositionList;
            }

            var overlayRef = this._overlayRef = this._overlay.create(this._buildConfig());

            this._attachSubscription = overlayRef.attachments().subscribe(function () {
              return _this868.attach.emit();
            });
            this._detachSubscription = overlayRef.detachments().subscribe(function () {
              return _this868.detach.emit();
            });
            overlayRef.keydownEvents().subscribe(function (event) {
              _this868.overlayKeydown.next(event);

              if (event.keyCode === _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_9__["ESCAPE"] && !_this868.disableClose && !Object(_angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_9__["hasModifierKey"])(event)) {
                event.preventDefault();

                _this868._detachOverlay();
              }
            });

            this._overlayRef.outsidePointerEvents().subscribe(function (event) {
              _this868.overlayOutsideClick.next(event);
            });
          }
          /** Builds the overlay config based on the directive's inputs */

        }, {
          key: "_buildConfig",
          value: function _buildConfig() {
            var positionStrategy = this._position = this.positionStrategy || this._createPositionStrategy();

            var overlayConfig = new OverlayConfig({
              direction: this._dir,
              positionStrategy: positionStrategy,
              scrollStrategy: this.scrollStrategy,
              hasBackdrop: this.hasBackdrop
            });

            if (this.width || this.width === 0) {
              overlayConfig.width = this.width;
            }

            if (this.height || this.height === 0) {
              overlayConfig.height = this.height;
            }

            if (this.minWidth || this.minWidth === 0) {
              overlayConfig.minWidth = this.minWidth;
            }

            if (this.minHeight || this.minHeight === 0) {
              overlayConfig.minHeight = this.minHeight;
            }

            if (this.backdropClass) {
              overlayConfig.backdropClass = this.backdropClass;
            }

            if (this.panelClass) {
              overlayConfig.panelClass = this.panelClass;
            }

            return overlayConfig;
          }
          /** Updates the state of a position strategy, based on the values of the directive inputs. */

        }, {
          key: "_updatePositionStrategy",
          value: function _updatePositionStrategy(positionStrategy) {
            var _this869 = this;

            var positions = this.positions.map(function (currentPosition) {
              return {
                originX: currentPosition.originX,
                originY: currentPosition.originY,
                overlayX: currentPosition.overlayX,
                overlayY: currentPosition.overlayY,
                offsetX: currentPosition.offsetX || _this869.offsetX,
                offsetY: currentPosition.offsetY || _this869.offsetY,
                panelClass: currentPosition.panelClass || undefined
              };
            });
            return positionStrategy.setOrigin(this.origin.elementRef).withPositions(positions).withFlexibleDimensions(this.flexibleDimensions).withPush(this.push).withGrowAfterOpen(this.growAfterOpen).withViewportMargin(this.viewportMargin).withLockedPosition(this.lockPosition).withTransformOriginOn(this.transformOriginSelector);
          }
          /** Returns the position strategy of the overlay to be set on the overlay config */

        }, {
          key: "_createPositionStrategy",
          value: function _createPositionStrategy() {
            var strategy = this._overlay.position().flexibleConnectedTo(this.origin.elementRef);

            this._updatePositionStrategy(strategy);

            return strategy;
          }
          /** Attaches the overlay and subscribes to backdrop clicks if backdrop exists */

        }, {
          key: "_attachOverlay",
          value: function _attachOverlay() {
            var _this870 = this;

            if (!this._overlayRef) {
              this._createOverlay();
            } else {
              // Update the overlay size, in case the directive's inputs have changed
              this._overlayRef.getConfig().hasBackdrop = this.hasBackdrop;
            }

            if (!this._overlayRef.hasAttached()) {
              this._overlayRef.attach(this._templatePortal);
            }

            if (this.hasBackdrop) {
              this._backdropSubscription = this._overlayRef.backdropClick().subscribe(function (event) {
                _this870.backdropClick.emit(event);
              });
            } else {
              this._backdropSubscription.unsubscribe();
            }

            this._positionSubscription.unsubscribe(); // Only subscribe to `positionChanges` if requested, because putting
            // together all the information for it can be expensive.


            if (this.positionChange.observers.length > 0) {
              this._positionSubscription = this._position.positionChanges.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_8__["takeWhile"])(function () {
                return _this870.positionChange.observers.length > 0;
              })).subscribe(function (position) {
                _this870.positionChange.emit(position);

                if (_this870.positionChange.observers.length === 0) {
                  _this870._positionSubscription.unsubscribe();
                }
              });
            }
          }
          /** Detaches the overlay and unsubscribes to backdrop clicks if backdrop exists */

        }, {
          key: "_detachOverlay",
          value: function _detachOverlay() {
            if (this._overlayRef) {
              this._overlayRef.detach();
            }

            this._backdropSubscription.unsubscribe();

            this._positionSubscription.unsubscribe();
          }
        }]);

        return CdkConnectedOverlay;
      }();

      CdkConnectedOverlay.ɵfac = function CdkConnectedOverlay_Factory(t) {
        return new (t || CdkConnectedOverlay)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](Overlay), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["TemplateRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_3__["Directionality"], 8));
      };

      CdkConnectedOverlay.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({
        type: CdkConnectedOverlay,
        selectors: [["", "cdk-connected-overlay", ""], ["", "connected-overlay", ""], ["", "cdkConnectedOverlay", ""]],
        inputs: {
          viewportMargin: ["cdkConnectedOverlayViewportMargin", "viewportMargin"],
          open: ["cdkConnectedOverlayOpen", "open"],
          disableClose: ["cdkConnectedOverlayDisableClose", "disableClose"],
          scrollStrategy: ["cdkConnectedOverlayScrollStrategy", "scrollStrategy"],
          offsetX: ["cdkConnectedOverlayOffsetX", "offsetX"],
          offsetY: ["cdkConnectedOverlayOffsetY", "offsetY"],
          hasBackdrop: ["cdkConnectedOverlayHasBackdrop", "hasBackdrop"],
          lockPosition: ["cdkConnectedOverlayLockPosition", "lockPosition"],
          flexibleDimensions: ["cdkConnectedOverlayFlexibleDimensions", "flexibleDimensions"],
          growAfterOpen: ["cdkConnectedOverlayGrowAfterOpen", "growAfterOpen"],
          push: ["cdkConnectedOverlayPush", "push"],
          positions: ["cdkConnectedOverlayPositions", "positions"],
          origin: ["cdkConnectedOverlayOrigin", "origin"],
          positionStrategy: ["cdkConnectedOverlayPositionStrategy", "positionStrategy"],
          width: ["cdkConnectedOverlayWidth", "width"],
          height: ["cdkConnectedOverlayHeight", "height"],
          minWidth: ["cdkConnectedOverlayMinWidth", "minWidth"],
          minHeight: ["cdkConnectedOverlayMinHeight", "minHeight"],
          backdropClass: ["cdkConnectedOverlayBackdropClass", "backdropClass"],
          panelClass: ["cdkConnectedOverlayPanelClass", "panelClass"],
          transformOriginSelector: ["cdkConnectedOverlayTransformOriginOn", "transformOriginSelector"]
        },
        outputs: {
          backdropClick: "backdropClick",
          positionChange: "positionChange",
          attach: "attach",
          detach: "detach",
          overlayKeydown: "overlayKeydown",
          overlayOutsideClick: "overlayOutsideClick"
        },
        exportAs: ["cdkConnectedOverlay"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵNgOnChangesFeature"]]
      });

      CdkConnectedOverlay.ctorParameters = function () {
        return [{
          type: Overlay
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["TemplateRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewContainerRef"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY]
          }]
        }, {
          type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_3__["Directionality"],
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }]
        }];
      };

      CdkConnectedOverlay.propDecorators = {
        origin: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkConnectedOverlayOrigin']
        }],
        positions: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkConnectedOverlayPositions']
        }],
        positionStrategy: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkConnectedOverlayPositionStrategy']
        }],
        offsetX: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkConnectedOverlayOffsetX']
        }],
        offsetY: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkConnectedOverlayOffsetY']
        }],
        width: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkConnectedOverlayWidth']
        }],
        height: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkConnectedOverlayHeight']
        }],
        minWidth: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkConnectedOverlayMinWidth']
        }],
        minHeight: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkConnectedOverlayMinHeight']
        }],
        backdropClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkConnectedOverlayBackdropClass']
        }],
        panelClass: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkConnectedOverlayPanelClass']
        }],
        viewportMargin: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkConnectedOverlayViewportMargin']
        }],
        scrollStrategy: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkConnectedOverlayScrollStrategy']
        }],
        open: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkConnectedOverlayOpen']
        }],
        disableClose: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkConnectedOverlayDisableClose']
        }],
        transformOriginSelector: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkConnectedOverlayTransformOriginOn']
        }],
        hasBackdrop: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkConnectedOverlayHasBackdrop']
        }],
        lockPosition: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkConnectedOverlayLockPosition']
        }],
        flexibleDimensions: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkConnectedOverlayFlexibleDimensions']
        }],
        growAfterOpen: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkConnectedOverlayGrowAfterOpen']
        }],
        push: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkConnectedOverlayPush']
        }],
        backdropClick: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
        }],
        positionChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
        }],
        attach: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
        }],
        detach: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
        }],
        overlayKeydown: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
        }],
        overlayOutsideClick: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkConnectedOverlay, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
          args: [{
            selector: '[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]',
            exportAs: 'cdkConnectedOverlay'
          }]
        }], function () {
          return [{
            type: Overlay
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["TemplateRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewContainerRef"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY]
            }]
          }, {
            type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_3__["Directionality"],
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }]
          }];
        }, {
          viewportMargin: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkConnectedOverlayViewportMargin']
          }],
          open: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkConnectedOverlayOpen']
          }],
          disableClose: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkConnectedOverlayDisableClose']
          }],
          backdropClick: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
          }],
          positionChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
          }],
          attach: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
          }],
          detach: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
          }],
          overlayKeydown: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
          }],
          overlayOutsideClick: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
          }],
          scrollStrategy: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkConnectedOverlayScrollStrategy']
          }],
          offsetX: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkConnectedOverlayOffsetX']
          }],
          offsetY: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkConnectedOverlayOffsetY']
          }],
          hasBackdrop: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkConnectedOverlayHasBackdrop']
          }],
          lockPosition: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkConnectedOverlayLockPosition']
          }],
          flexibleDimensions: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkConnectedOverlayFlexibleDimensions']
          }],
          growAfterOpen: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkConnectedOverlayGrowAfterOpen']
          }],
          push: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkConnectedOverlayPush']
          }],
          positions: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkConnectedOverlayPositions']
          }],
          origin: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkConnectedOverlayOrigin']
          }],
          positionStrategy: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkConnectedOverlayPositionStrategy']
          }],
          width: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkConnectedOverlayWidth']
          }],
          height: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkConnectedOverlayHeight']
          }],
          minWidth: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkConnectedOverlayMinWidth']
          }],
          minHeight: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkConnectedOverlayMinHeight']
          }],
          backdropClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkConnectedOverlayBackdropClass']
          }],
          panelClass: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkConnectedOverlayPanelClass']
          }],
          transformOriginSelector: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkConnectedOverlayTransformOriginOn']
          }]
        });
      })();
      /** @docs-private */


      function CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {
        return function () {
          return overlay.scrollStrategies.reposition();
        };
      }
      /** @docs-private */


      var CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER = {
        provide: CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY,
        deps: [Overlay],
        useFactory: CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var OverlayModule = function OverlayModule() {
        _classCallCheck2(this, OverlayModule);
      };

      OverlayModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({
        type: OverlayModule
      });
      OverlayModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({
        factory: function OverlayModule_Factory(t) {
          return new (t || OverlayModule)();
        },
        providers: [Overlay, CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER],
        imports: [[_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_3__["BidiModule"], _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_6__["PortalModule"], _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__["ScrollingModule"]], _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__["ScrollingModule"]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](OverlayModule, {
          declarations: function declarations() {
            return [CdkConnectedOverlay, CdkOverlayOrigin];
          },
          imports: function imports() {
            return [_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_3__["BidiModule"], _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_6__["PortalModule"], _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__["ScrollingModule"]];
          },
          exports: function exports() {
            return [CdkConnectedOverlay, CdkOverlayOrigin, _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__["ScrollingModule"]];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](OverlayModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
          args: [{
            imports: [_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_3__["BidiModule"], _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_6__["PortalModule"], _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__["ScrollingModule"]],
            exports: [CdkConnectedOverlay, CdkOverlayOrigin, _angular_cdk_scrolling__WEBPACK_IMPORTED_MODULE_0__["ScrollingModule"]],
            declarations: [CdkConnectedOverlay, CdkOverlayOrigin],
            providers: [Overlay, CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Alternative to OverlayContainer that supports correct displaying of overlay elements in
       * Fullscreen mode
       * https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen
       *
       * Should be provided in the root component.
       */


      var FullscreenOverlayContainer = /*#__PURE__*/function (_OverlayContainer) {
        _inherits2(FullscreenOverlayContainer, _OverlayContainer);

        var _super367 = _createSuper(FullscreenOverlayContainer);

        function FullscreenOverlayContainer(_document, platform) {
          _classCallCheck2(this, FullscreenOverlayContainer);

          return _super367.call(this, _document, platform);
        }

        _createClass2(FullscreenOverlayContainer, [{
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            _get2(_getPrototypeOf2(FullscreenOverlayContainer.prototype), "ngOnDestroy", this).call(this);

            if (this._fullScreenEventName && this._fullScreenListener) {
              this._document.removeEventListener(this._fullScreenEventName, this._fullScreenListener);
            }
          }
        }, {
          key: "_createContainer",
          value: function _createContainer() {
            var _this871 = this;

            _get2(_getPrototypeOf2(FullscreenOverlayContainer.prototype), "_createContainer", this).call(this);

            this._adjustParentForFullscreenChange();

            this._addFullscreenChangeListener(function () {
              return _this871._adjustParentForFullscreenChange();
            });
          }
        }, {
          key: "_adjustParentForFullscreenChange",
          value: function _adjustParentForFullscreenChange() {
            if (!this._containerElement) {
              return;
            }

            var fullscreenElement = this.getFullscreenElement();
            var parent = fullscreenElement || this._document.body;
            parent.appendChild(this._containerElement);
          }
        }, {
          key: "_addFullscreenChangeListener",
          value: function _addFullscreenChangeListener(fn) {
            var eventName = this._getEventName();

            if (eventName) {
              if (this._fullScreenListener) {
                this._document.removeEventListener(eventName, this._fullScreenListener);
              }

              this._document.addEventListener(eventName, fn);

              this._fullScreenListener = fn;
            }
          }
        }, {
          key: "_getEventName",
          value: function _getEventName() {
            if (!this._fullScreenEventName) {
              var _document = this._document;

              if (_document.fullscreenEnabled) {
                this._fullScreenEventName = 'fullscreenchange';
              } else if (_document.webkitFullscreenEnabled) {
                this._fullScreenEventName = 'webkitfullscreenchange';
              } else if (_document.mozFullScreenEnabled) {
                this._fullScreenEventName = 'mozfullscreenchange';
              } else if (_document.msFullscreenEnabled) {
                this._fullScreenEventName = 'MSFullscreenChange';
              }
            }

            return this._fullScreenEventName;
          }
          /**
           * When the page is put into fullscreen mode, a specific element is specified.
           * Only that element and its children are visible when in fullscreen mode.
           */

        }, {
          key: "getFullscreenElement",
          value: function getFullscreenElement() {
            var _document = this._document;
            return _document.fullscreenElement || _document.webkitFullscreenElement || _document.mozFullScreenElement || _document.msFullscreenElement || null;
          }
        }]);

        return FullscreenOverlayContainer;
      }(OverlayContainer);

      FullscreenOverlayContainer.ɵfac = function FullscreenOverlayContainer_Factory(t) {
        return new (t || FullscreenOverlayContainer)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_2__["Platform"]));
      };

      FullscreenOverlayContainer.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function FullscreenOverlayContainer_Factory() {
          return new FullscreenOverlayContainer(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_2__["Platform"]));
        },
        token: FullscreenOverlayContainer,
        providedIn: "root"
      });

      FullscreenOverlayContainer.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
          }]
        }, {
          type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_2__["Platform"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](FullscreenOverlayContainer, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["DOCUMENT"]]
            }]
          }, {
            type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_2__["Platform"]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=overlay.js.map

      /***/

    },

    /***/
    "rWzI":
    /*!************************************************************!*\
      !*** ./node_modules/url/node_modules/punycode/punycode.js ***!
      \************************************************************/

    /*! no static exports found */

    /***/
    function rWzI(module, exports, __webpack_require__) {
      /* WEBPACK VAR INJECTION */
      (function (module) {
        var __WEBPACK_AMD_DEFINE_RESULT__;
        /*! https://mths.be/punycode v1.3.2 by @mathias */


        ;

        (function (root) {
          /** Detect free variables */
          var freeExports = true && exports && !exports.nodeType && exports;
          var freeModule = true && module && !module.nodeType && module;
          var freeGlobal = typeof global == 'object' && global;

          if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal) {
            root = freeGlobal;
          }
          /**
           * The `punycode` object.
           * @name punycode
           * @type Object
           */


          var punycode,

          /** Highest positive signed 32-bit float value */
          maxInt = 2147483647,
              // aka. 0x7FFFFFFF or 2^31-1

          /** Bootstring parameters */
          base = 36,
              tMin = 1,
              tMax = 26,
              skew = 38,
              damp = 700,
              initialBias = 72,
              initialN = 128,
              // 0x80
          delimiter = '-',
              // '\x2D'

          /** Regular expressions */
          regexPunycode = /^xn--/,
              regexNonASCII = /[^\x20-\x7E]/,
              // unprintable ASCII chars + non-ASCII chars
          regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g,
              // RFC 3490 separators

          /** Error messages */
          errors = {
            'overflow': 'Overflow: input needs wider integers to process',
            'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
            'invalid-input': 'Invalid input'
          },

          /** Convenience shortcuts */
          baseMinusTMin = base - tMin,
              floor = Math.floor,
              stringFromCharCode = String.fromCharCode,

          /** Temporary variable */
          key;
          /*--------------------------------------------------------------------------*/

          /**
           * A generic error utility function.
           * @private
           * @param {String} type The error type.
           * @returns {Error} Throws a `RangeError` with the applicable error message.
           */

          function error(type) {
            throw RangeError(errors[type]);
          }
          /**
           * A generic `Array#map` utility function.
           * @private
           * @param {Array} array The array to iterate over.
           * @param {Function} callback The function that gets called for every array
           * item.
           * @returns {Array} A new array of values returned by the callback function.
           */


          function map(array, fn) {
            var length = array.length;
            var result = [];

            while (length--) {
              result[length] = fn(array[length]);
            }

            return result;
          }
          /**
           * A simple `Array#map`-like wrapper to work with domain name strings or email
           * addresses.
           * @private
           * @param {String} domain The domain name or email address.
           * @param {Function} callback The function that gets called for every
           * character.
           * @returns {Array} A new string of characters returned by the callback
           * function.
           */


          function mapDomain(string, fn) {
            var parts = string.split('@');
            var result = '';

            if (parts.length > 1) {
              // In email addresses, only the domain name should be punycoded. Leave
              // the local part (i.e. everything up to `@`) intact.
              result = parts[0] + '@';
              string = parts[1];
            } // Avoid `split(regex)` for IE8 compatibility. See #17.


            string = string.replace(regexSeparators, '\x2E');
            var labels = string.split('.');
            var encoded = map(labels, fn).join('.');
            return result + encoded;
          }
          /**
           * Creates an array containing the numeric code points of each Unicode
           * character in the string. While JavaScript uses UCS-2 internally,
           * this function will convert a pair of surrogate halves (each of which
           * UCS-2 exposes as separate characters) into a single code point,
           * matching UTF-16.
           * @see `punycode.ucs2.encode`
           * @see <https://mathiasbynens.be/notes/javascript-encoding>
           * @memberOf punycode.ucs2
           * @name decode
           * @param {String} string The Unicode input string (UCS-2).
           * @returns {Array} The new array of code points.
           */


          function ucs2decode(string) {
            var output = [],
                counter = 0,
                length = string.length,
                value,
                extra;

            while (counter < length) {
              value = string.charCodeAt(counter++);

              if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
                // high surrogate, and there is a next character
                extra = string.charCodeAt(counter++);

                if ((extra & 0xFC00) == 0xDC00) {
                  // low surrogate
                  output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
                } else {
                  // unmatched surrogate; only append this code unit, in case the next
                  // code unit is the high surrogate of a surrogate pair
                  output.push(value);
                  counter--;
                }
              } else {
                output.push(value);
              }
            }

            return output;
          }
          /**
           * Creates a string based on an array of numeric code points.
           * @see `punycode.ucs2.decode`
           * @memberOf punycode.ucs2
           * @name encode
           * @param {Array} codePoints The array of numeric code points.
           * @returns {String} The new Unicode string (UCS-2).
           */


          function ucs2encode(array) {
            return map(array, function (value) {
              var output = '';

              if (value > 0xFFFF) {
                value -= 0x10000;
                output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
                value = 0xDC00 | value & 0x3FF;
              }

              output += stringFromCharCode(value);
              return output;
            }).join('');
          }
          /**
           * Converts a basic code point into a digit/integer.
           * @see `digitToBasic()`
           * @private
           * @param {Number} codePoint The basic numeric code point value.
           * @returns {Number} The numeric value of a basic code point (for use in
           * representing integers) in the range `0` to `base - 1`, or `base` if
           * the code point does not represent a value.
           */


          function basicToDigit(codePoint) {
            if (codePoint - 48 < 10) {
              return codePoint - 22;
            }

            if (codePoint - 65 < 26) {
              return codePoint - 65;
            }

            if (codePoint - 97 < 26) {
              return codePoint - 97;
            }

            return base;
          }
          /**
           * Converts a digit/integer into a basic code point.
           * @see `basicToDigit()`
           * @private
           * @param {Number} digit The numeric value of a basic code point.
           * @returns {Number} The basic code point whose value (when used for
           * representing integers) is `digit`, which needs to be in the range
           * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
           * used; else, the lowercase form is used. The behavior is undefined
           * if `flag` is non-zero and `digit` has no uppercase form.
           */


          function digitToBasic(digit, flag) {
            //  0..25 map to ASCII a..z or A..Z
            // 26..35 map to ASCII 0..9
            return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
          }
          /**
           * Bias adaptation function as per section 3.4 of RFC 3492.
           * http://tools.ietf.org/html/rfc3492#section-3.4
           * @private
           */


          function adapt(delta, numPoints, firstTime) {
            var k = 0;
            delta = firstTime ? floor(delta / damp) : delta >> 1;
            delta += floor(delta / numPoints);

            for (;
            /* no initialization */
            delta > baseMinusTMin * tMax >> 1; k += base) {
              delta = floor(delta / baseMinusTMin);
            }

            return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
          }
          /**
           * Converts a Punycode string of ASCII-only symbols to a string of Unicode
           * symbols.
           * @memberOf punycode
           * @param {String} input The Punycode string of ASCII-only symbols.
           * @returns {String} The resulting string of Unicode symbols.
           */


          function decode(input) {
            // Don't use UCS-2
            var output = [],
                inputLength = input.length,
                out,
                i = 0,
                n = initialN,
                bias = initialBias,
                basic,
                j,
                index,
                oldi,
                w,
                k,
                digit,
                t,

            /** Cached calculation results */
            baseMinusT; // Handle the basic code points: let `basic` be the number of input code
            // points before the last delimiter, or `0` if there is none, then copy
            // the first basic code points to the output.

            basic = input.lastIndexOf(delimiter);

            if (basic < 0) {
              basic = 0;
            }

            for (j = 0; j < basic; ++j) {
              // if it's not a basic code point
              if (input.charCodeAt(j) >= 0x80) {
                error('not-basic');
              }

              output.push(input.charCodeAt(j));
            } // Main decoding loop: start just after the last delimiter if any basic code
            // points were copied; start at the beginning otherwise.


            for (index = basic > 0 ? basic + 1 : 0; index < inputLength;)
            /* no final expression */
            {
              // `index` is the index of the next character to be consumed.
              // Decode a generalized variable-length integer into `delta`,
              // which gets added to `i`. The overflow checking is easier
              // if we increase `i` as we go, then subtract off its starting
              // value at the end to obtain `delta`.
              for (oldi = i, w = 1, k = base;;
              /* no condition */
              k += base) {
                if (index >= inputLength) {
                  error('invalid-input');
                }

                digit = basicToDigit(input.charCodeAt(index++));

                if (digit >= base || digit > floor((maxInt - i) / w)) {
                  error('overflow');
                }

                i += digit * w;
                t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;

                if (digit < t) {
                  break;
                }

                baseMinusT = base - t;

                if (w > floor(maxInt / baseMinusT)) {
                  error('overflow');
                }

                w *= baseMinusT;
              }

              out = output.length + 1;
              bias = adapt(i - oldi, out, oldi == 0); // `i` was supposed to wrap around from `out` to `0`,
              // incrementing `n` each time, so we'll fix that now:

              if (floor(i / out) > maxInt - n) {
                error('overflow');
              }

              n += floor(i / out);
              i %= out; // Insert `n` at position `i` of the output

              output.splice(i++, 0, n);
            }

            return ucs2encode(output);
          }
          /**
           * Converts a string of Unicode symbols (e.g. a domain name label) to a
           * Punycode string of ASCII-only symbols.
           * @memberOf punycode
           * @param {String} input The string of Unicode symbols.
           * @returns {String} The resulting Punycode string of ASCII-only symbols.
           */


          function encode(input) {
            var n,
                delta,
                handledCPCount,
                basicLength,
                bias,
                j,
                m,
                q,
                k,
                t,
                currentValue,
                output = [],

            /** `inputLength` will hold the number of code points in `input`. */
            inputLength,

            /** Cached calculation results */
            handledCPCountPlusOne,
                baseMinusT,
                qMinusT; // Convert the input in UCS-2 to Unicode

            input = ucs2decode(input); // Cache the length

            inputLength = input.length; // Initialize the state

            n = initialN;
            delta = 0;
            bias = initialBias; // Handle the basic code points

            for (j = 0; j < inputLength; ++j) {
              currentValue = input[j];

              if (currentValue < 0x80) {
                output.push(stringFromCharCode(currentValue));
              }
            }

            handledCPCount = basicLength = output.length; // `handledCPCount` is the number of code points that have been handled;
            // `basicLength` is the number of basic code points.
            // Finish the basic string - if it is not empty - with a delimiter

            if (basicLength) {
              output.push(delimiter);
            } // Main encoding loop:


            while (handledCPCount < inputLength) {
              // All non-basic code points < n have been handled already. Find the next
              // larger one:
              for (m = maxInt, j = 0; j < inputLength; ++j) {
                currentValue = input[j];

                if (currentValue >= n && currentValue < m) {
                  m = currentValue;
                }
              } // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
              // but guard against overflow


              handledCPCountPlusOne = handledCPCount + 1;

              if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
                error('overflow');
              }

              delta += (m - n) * handledCPCountPlusOne;
              n = m;

              for (j = 0; j < inputLength; ++j) {
                currentValue = input[j];

                if (currentValue < n && ++delta > maxInt) {
                  error('overflow');
                }

                if (currentValue == n) {
                  // Represent delta as a generalized variable-length integer
                  for (q = delta, k = base;;
                  /* no condition */
                  k += base) {
                    t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;

                    if (q < t) {
                      break;
                    }

                    qMinusT = q - t;
                    baseMinusT = base - t;
                    output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)));
                    q = floor(qMinusT / baseMinusT);
                  }

                  output.push(stringFromCharCode(digitToBasic(q, 0)));
                  bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
                  delta = 0;
                  ++handledCPCount;
                }
              }

              ++delta;
              ++n;
            }

            return output.join('');
          }
          /**
           * Converts a Punycode string representing a domain name or an email address
           * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
           * it doesn't matter if you call it on a string that has already been
           * converted to Unicode.
           * @memberOf punycode
           * @param {String} input The Punycoded domain name or email address to
           * convert to Unicode.
           * @returns {String} The Unicode representation of the given Punycode
           * string.
           */


          function toUnicode(input) {
            return mapDomain(input, function (string) {
              return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string;
            });
          }
          /**
           * Converts a Unicode string representing a domain name or an email address to
           * Punycode. Only the non-ASCII parts of the domain name will be converted,
           * i.e. it doesn't matter if you call it with a domain that's already in
           * ASCII.
           * @memberOf punycode
           * @param {String} input The domain name or email address to convert, as a
           * Unicode string.
           * @returns {String} The Punycode representation of the given domain name or
           * email address.
           */


          function toASCII(input) {
            return mapDomain(input, function (string) {
              return regexNonASCII.test(string) ? 'xn--' + encode(string) : string;
            });
          }
          /*--------------------------------------------------------------------------*/

          /** Define the public API */


          punycode = {
            /**
             * A string representing the current Punycode.js version number.
             * @memberOf punycode
             * @type String
             */
            'version': '1.3.2',

            /**
             * An object of methods to convert from JavaScript's internal character
             * representation (UCS-2) to Unicode code points, and back.
             * @see <https://mathiasbynens.be/notes/javascript-encoding>
             * @memberOf punycode
             * @type Object
             */
            'ucs2': {
              'decode': ucs2decode,
              'encode': ucs2encode
            },
            'decode': decode,
            'encode': encode,
            'toASCII': toASCII,
            'toUnicode': toUnicode
          };
          /** Expose `punycode` */
          // Some AMD build optimizers, like r.js, check for specific condition patterns
          // like the following:

          if (true) {
            !(__WEBPACK_AMD_DEFINE_RESULT__ = function () {
              return punycode;
            }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
          } else {}
        })(this);
        /* WEBPACK VAR INJECTION */

      }).call(this, __webpack_require__(
      /*! ./../../../webpack/buildin/module.js */
      "YuTi")(module));
      /***/
    },

    /***/
    "raLr":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/uk.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function raLr(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Ukrainian [uk]
      //! author : zemlanin : https://github.com/zemlanin
      //! Author : Menelion Elensúle : https://github.com/Oire
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        function plural(word, num) {
          var forms = word.split('_');
          return num % 10 === 1 && num % 100 !== 11 ? forms[0] : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2];
        }

        function relativeTimeWithPlural(number, withoutSuffix, key) {
          var format = {
            ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',
            mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',
            hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин',
            dd: 'день_дні_днів',
            MM: 'місяць_місяці_місяців',
            yy: 'рік_роки_років'
          };

          if (key === 'm') {
            return withoutSuffix ? 'хвилина' : 'хвилину';
          } else if (key === 'h') {
            return withoutSuffix ? 'година' : 'годину';
          } else {
            return number + ' ' + plural(format[key], +number);
          }
        }

        function weekdaysCaseReplace(m, format) {
          var weekdays = {
            nominative: 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),
            accusative: 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),
            genitive: 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')
          },
              nounCase;

          if (m === true) {
            return weekdays['nominative'].slice(1, 7).concat(weekdays['nominative'].slice(0, 1));
          }

          if (!m) {
            return weekdays['nominative'];
          }

          nounCase = /(\[[ВвУу]\]) ?dddd/.test(format) ? 'accusative' : /\[?(?:минулої|наступної)? ?\] ?dddd/.test(format) ? 'genitive' : 'nominative';
          return weekdays[nounCase][m.day()];
        }

        function processHoursFunction(str) {
          return function () {
            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';
          };
        }

        var uk = moment.defineLocale('uk', {
          months: {
            format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),
            standalone: 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')
          },
          monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),
          weekdays: weekdaysCaseReplace,
          weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
          weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY р.',
            LLL: 'D MMMM YYYY р., HH:mm',
            LLLL: 'dddd, D MMMM YYYY р., HH:mm'
          },
          calendar: {
            sameDay: processHoursFunction('[Сьогодні '),
            nextDay: processHoursFunction('[Завтра '),
            lastDay: processHoursFunction('[Вчора '),
            nextWeek: processHoursFunction('[У] dddd ['),
            lastWeek: function lastWeek() {
              switch (this.day()) {
                case 0:
                case 3:
                case 5:
                case 6:
                  return processHoursFunction('[Минулої] dddd [').call(this);

                case 1:
                case 2:
                case 4:
                  return processHoursFunction('[Минулого] dddd [').call(this);
              }
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: 'за %s',
            past: '%s тому',
            s: 'декілька секунд',
            ss: relativeTimeWithPlural,
            m: relativeTimeWithPlural,
            mm: relativeTimeWithPlural,
            h: 'годину',
            hh: relativeTimeWithPlural,
            d: 'день',
            dd: relativeTimeWithPlural,
            M: 'місяць',
            MM: relativeTimeWithPlural,
            y: 'рік',
            yy: relativeTimeWithPlural
          },
          // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
          meridiemParse: /ночі|ранку|дня|вечора/,
          isPM: function isPM(input) {
            return /^(дня|вечора)$/.test(input);
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 4) {
              return 'ночі';
            } else if (hour < 12) {
              return 'ранку';
            } else if (hour < 17) {
              return 'дня';
            } else {
              return 'вечора';
            }
          },
          dayOfMonthOrdinalParse: /\d{1,2}-(й|го)/,
          ordinal: function ordinal(number, period) {
            switch (period) {
              case 'M':
              case 'd':
              case 'DDD':
              case 'w':
              case 'W':
                return number + '-й';

              case 'D':
                return number + '-го';

              default:
                return number;
            }
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return uk;
      });
      /***/

    },

    /***/
    "rt19":
    /*!*****************************************************!*\
      !*** ./node_modules/aws-sdk/lib/resource_waiter.js ***!
      \*****************************************************/

    /*! no static exports found */

    /***/
    function rt19(module, exports, __webpack_require__) {
      /**
       * Copyright 2012-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
       *
       * Licensed under the Apache License, Version 2.0 (the "License"). You
       * may not use this file except in compliance with the License. A copy of
       * the License is located at
       *
       *     http://aws.amazon.com/apache2.0/
       *
       * or in the "license" file accompanying this file. This file is
       * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
       * ANY KIND, either express or implied. See the License for the specific
       * language governing permissions and limitations under the License.
       */
      var AWS = __webpack_require__(
      /*! ./core */
      "QsWE");

      var inherit = AWS.util.inherit;

      var jmespath = __webpack_require__(
      /*! jmespath */
      "CNpV");
      /**
       * @api private
       */


      function CHECK_ACCEPTORS(resp) {
        var waiter = resp.request._waiter;
        var acceptors = waiter.config.acceptors;
        var acceptorMatched = false;
        var state = 'retry';
        acceptors.forEach(function (acceptor) {
          if (!acceptorMatched) {
            var matcher = waiter.matchers[acceptor.matcher];

            if (matcher && matcher(resp, acceptor.expected, acceptor.argument)) {
              acceptorMatched = true;
              state = acceptor.state;
            }
          }
        });
        if (!acceptorMatched && resp.error) state = 'failure';

        if (state === 'success') {
          waiter.setSuccess(resp);
        } else {
          waiter.setError(resp, state === 'retry');
        }
      }
      /**
       * @api private
       */


      AWS.ResourceWaiter = inherit({
        /**
         * Waits for a given state on a service object
         * @param service [Service] the service object to wait on
         * @param state [String] the state (defined in waiter configuration) to wait
         *   for.
         * @example Create a waiter for running EC2 instances
         *   var ec2 = new AWS.EC2;
         *   var waiter = new AWS.ResourceWaiter(ec2, 'instanceRunning');
         */
        constructor: function constructor(service, state) {
          this.service = service;
          this.state = state;
          this.loadWaiterConfig(this.state);
        },
        service: null,
        state: null,
        config: null,
        matchers: {
          path: function path(resp, expected, argument) {
            try {
              var result = jmespath.search(resp.data, argument);
            } catch (err) {
              return false;
            }

            return jmespath.strictDeepEqual(result, expected);
          },
          pathAll: function pathAll(resp, expected, argument) {
            try {
              var results = jmespath.search(resp.data, argument);
            } catch (err) {
              return false;
            }

            if (!Array.isArray(results)) results = [results];
            var numResults = results.length;
            if (!numResults) return false;

            for (var ind = 0; ind < numResults; ind++) {
              if (!jmespath.strictDeepEqual(results[ind], expected)) {
                return false;
              }
            }

            return true;
          },
          pathAny: function pathAny(resp, expected, argument) {
            try {
              var results = jmespath.search(resp.data, argument);
            } catch (err) {
              return false;
            }

            if (!Array.isArray(results)) results = [results];
            var numResults = results.length;

            for (var ind = 0; ind < numResults; ind++) {
              if (jmespath.strictDeepEqual(results[ind], expected)) {
                return true;
              }
            }

            return false;
          },
          status: function status(resp, expected) {
            var statusCode = resp.httpResponse.statusCode;
            return typeof statusCode === 'number' && statusCode === expected;
          },
          error: function error(resp, expected) {
            if (typeof expected === 'string' && resp.error) {
              return expected === resp.error.code;
            } // if expected is not string, can be boolean indicating presence of error


            return expected === !!resp.error;
          }
        },
        listeners: new AWS.SequentialExecutor().addNamedListeners(function (add) {
          add('RETRY_CHECK', 'retry', function (resp) {
            var waiter = resp.request._waiter;

            if (resp.error && resp.error.code === 'ResourceNotReady') {
              resp.error.retryDelay = (waiter.config.delay || 0) * 1000;
            }
          });
          add('CHECK_OUTPUT', 'extractData', CHECK_ACCEPTORS);
          add('CHECK_ERROR', 'extractError', CHECK_ACCEPTORS);
        }),

        /**
         * @return [AWS.Request]
         */
        wait: function wait(params, callback) {
          if (typeof params === 'function') {
            callback = params;
            params = undefined;
          }

          if (params && params.$waiter) {
            params = AWS.util.copy(params);

            if (typeof params.$waiter.delay === 'number') {
              this.config.delay = params.$waiter.delay;
            }

            if (typeof params.$waiter.maxAttempts === 'number') {
              this.config.maxAttempts = params.$waiter.maxAttempts;
            }

            delete params.$waiter;
          }

          var request = this.service.makeRequest(this.config.operation, params);
          request._waiter = this;
          request.response.maxRetries = this.config.maxAttempts;
          request.addListeners(this.listeners);
          if (callback) request.send(callback);
          return request;
        },
        setSuccess: function setSuccess(resp) {
          resp.error = null;
          resp.data = resp.data || {};
          resp.request.removeAllListeners('extractData');
        },
        setError: function setError(resp, retryable) {
          resp.data = null;
          resp.error = AWS.util.error(resp.error || new Error(), {
            code: 'ResourceNotReady',
            message: 'Resource is not in the state ' + this.state,
            retryable: retryable
          });
        },

        /**
         * Loads waiter configuration from API configuration
         *
         * @api private
         */
        loadWaiterConfig: function loadWaiterConfig(state) {
          if (!this.service.api.waiters[state]) {
            throw new AWS.util.error(new Error(), {
              code: 'StateNotFoundError',
              message: 'State ' + state + ' not found.'
            });
          }

          this.config = AWS.util.copy(this.service.api.waiters[state]);
        }
      });
      /***/
    },

    /***/
    "s+uk":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/de-at.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function sUk(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : German (Austria) [de-at]
      //! author : lluchs : https://github.com/lluchs
      //! author: Menelion Elensúle: https://github.com/Oire
      //! author : Martin Groller : https://github.com/MadMG
      //! author : Mikolaj Dadela : https://github.com/mik01aj
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        function processRelativeTime(number, withoutSuffix, key, isFuture) {
          var format = {
            m: ['eine Minute', 'einer Minute'],
            h: ['eine Stunde', 'einer Stunde'],
            d: ['ein Tag', 'einem Tag'],
            dd: [number + ' Tage', number + ' Tagen'],
            w: ['eine Woche', 'einer Woche'],
            M: ['ein Monat', 'einem Monat'],
            MM: [number + ' Monate', number + ' Monaten'],
            y: ['ein Jahr', 'einem Jahr'],
            yy: [number + ' Jahre', number + ' Jahren']
          };
          return withoutSuffix ? format[key][0] : format[key][1];
        }

        var deAt = moment.defineLocale('de-at', {
          months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
          monthsShort: 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),
          monthsParseExact: true,
          weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
          weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
          weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY HH:mm',
            LLLL: 'dddd, D. MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[heute um] LT [Uhr]',
            sameElse: 'L',
            nextDay: '[morgen um] LT [Uhr]',
            nextWeek: 'dddd [um] LT [Uhr]',
            lastDay: '[gestern um] LT [Uhr]',
            lastWeek: '[letzten] dddd [um] LT [Uhr]'
          },
          relativeTime: {
            future: 'in %s',
            past: 'vor %s',
            s: 'ein paar Sekunden',
            ss: '%d Sekunden',
            m: processRelativeTime,
            mm: '%d Minuten',
            h: processRelativeTime,
            hh: '%d Stunden',
            d: processRelativeTime,
            dd: processRelativeTime,
            w: processRelativeTime,
            ww: '%d Wochen',
            M: processRelativeTime,
            MM: processRelativeTime,
            y: processRelativeTime,
            yy: processRelativeTime
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return deAt;
      });
      /***/

    },

    /***/
    "sImd":
    /*!******************************************************!*\
      !*** ./node_modules/aws-sdk/node_modules/uuid/v4.js ***!
      \******************************************************/

    /*! no static exports found */

    /***/
    function sImd(module, exports, __webpack_require__) {
      var rng = __webpack_require__(
      /*! ./lib/rng */
      "ZyCK");

      var bytesToUuid = __webpack_require__(
      /*! ./lib/bytesToUuid */
      "V20V");

      function v4(options, buf, offset) {
        var i = buf && offset || 0;

        if (typeof options == 'string') {
          buf = options === 'binary' ? new Array(16) : null;
          options = null;
        }

        options = options || {};
        var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`

        rnds[6] = rnds[6] & 0x0f | 0x40;
        rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided

        if (buf) {
          for (var ii = 0; ii < 16; ++ii) {
            buf[i + ii] = rnds[ii];
          }
        }

        return buf || bytesToUuid(rnds);
      }

      module.exports = v4;
      /***/
    },

    /***/
    "sSZD":
    /*!***********************************************************************************!*\
      !*** ./node_modules/@angular/fire/__ivy_ngcc__/fesm2015/angular-fire-database.js ***!
      \***********************************************************************************/

    /*! exports provided: AngularFireDatabase, AngularFireDatabaseModule, URL, USE_EMULATOR, auditTrail, createListReference, fromRef, listChanges, snapshotChanges, stateChanges */

    /***/
    function sSZD(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AngularFireDatabase", function () {
        return AngularFireDatabase;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AngularFireDatabaseModule", function () {
        return AngularFireDatabaseModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "URL", function () {
        return URL;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "USE_EMULATOR", function () {
        return USE_EMULATOR;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "auditTrail", function () {
        return _auditTrail;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "createListReference", function () {
        return createListReference;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "fromRef", function () {
        return fromRef;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "listChanges", function () {
        return listChanges;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "snapshotChanges", function () {
        return _snapshotChanges;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "stateChanges", function () {
        return _stateChanges;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var _angular_fire__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/fire */
      "spgP");
      /* harmony import */


      var firebase_database__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! firebase/database */
      "Zs65");
      /* harmony import */


      var _angular_fire_auth__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @angular/fire/auth */
      "UbJi");
      /* harmony import */


      var firebase_app__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! firebase/app */
      "Jgta");

      function isString(value) {
        return typeof value === 'string';
      }

      function isFirebaseDataSnapshot(value) {
        return typeof value.exportVal === 'function';
      }

      function isNil(obj) {
        return obj === undefined || obj === null;
      }

      function isFirebaseRef(value) {
        return typeof value.set === 'function';
      }
      /**
       * Returns a database reference given a Firebase App and an
       * absolute or relative path.
       * @param database - Firebase Database
       * @param pathRef - Database path, relative or absolute
       */


      function getRef(database, pathRef) {
        // if a db ref was passed in, just return it
        return isFirebaseRef(pathRef) ? pathRef : database.ref(pathRef);
      }

      function checkOperationCases(item, cases) {
        if (isString(item)) {
          return cases.stringCase();
        } else if (isFirebaseRef(item)) {
          return cases.firebaseCase();
        } else if (isFirebaseDataSnapshot(item)) {
          return cases.snapshotCase();
        }

        throw new Error("Expects a string, snapshot, or reference. Got: ".concat(typeof item));
      }
      /**
       * Create an observable from a Database Reference or Database Query.
       * @param ref Database Reference
       * @param event Listen event type ('value', 'added', 'changed', 'removed', 'moved')
       * @param listenType 'on' or 'once'
       * @param scheduler - Rxjs scheduler
       */


      function fromRef(ref, event) {
        var listenType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'on';
        var scheduler = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : rxjs__WEBPACK_IMPORTED_MODULE_1__["asyncScheduler"];
        return new rxjs__WEBPACK_IMPORTED_MODULE_1__["Observable"](function (subscriber) {
          var fn = null;
          fn = ref[listenType](event, function (snapshot, prevKey) {
            scheduler.schedule(function () {
              subscriber.next({
                snapshot: snapshot,
                prevKey: prevKey
              });
            });

            if (listenType === 'once') {
              scheduler.schedule(function () {
                return subscriber.complete();
              });
            }
          }, function (err) {
            scheduler.schedule(function () {
              return subscriber.error(err);
            });
          });

          if (listenType === 'on') {
            return {
              unsubscribe: function unsubscribe() {
                if (fn != null) {
                  ref.off(event, fn);
                }
              }
            };
          } else {
            return {
              unsubscribe: function unsubscribe() {}
            };
          }
        }).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (payload) {
          var snapshot = payload.snapshot,
              prevKey = payload.prevKey;
          var key = null;

          if (snapshot.exists()) {
            key = snapshot.key;
          }

          return {
            type: event,
            payload: snapshot,
            prevKey: prevKey,
            key: key
          };
        }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["share"])());
      }

      function listChanges(ref, events, scheduler) {
        return fromRef(ref, 'value', 'once', scheduler).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (snapshotAction) {
          var childEvent$ = [Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["of"])(snapshotAction)];
          events.forEach(function (event) {
            return childEvent$.push(fromRef(ref, event, 'on', scheduler));
          });
          return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["merge"]).apply(void 0, childEvent$).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["scan"])(buildView, []));
        }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])());
      }

      function positionFor(changes, key) {
        var len = changes.length;

        for (var i = 0; i < len; i++) {
          if (changes[i].payload.key === key) {
            return i;
          }
        }

        return -1;
      }

      function positionAfter(changes, prevKey) {
        if (isNil(prevKey)) {
          return 0;
        } else {
          var i = positionFor(changes, prevKey);

          if (i === -1) {
            return changes.length;
          } else {
            return i + 1;
          }
        }
      }

      function buildView(current, action) {
        var payload = action.payload,
            prevKey = action.prevKey,
            key = action.key;
        var currentKeyPosition = positionFor(current, key);
        var afterPreviousKeyPosition = positionAfter(current, prevKey);

        switch (action.type) {
          case 'value':
            if (action.payload && action.payload.exists()) {
              var _prevKey = null;
              action.payload.forEach(function (payload) {
                var action = {
                  payload: payload,
                  type: 'value',
                  prevKey: _prevKey,
                  key: payload.key
                };
                _prevKey = payload.key;
                current = [].concat(_toConsumableArray(current), [action]);
                return false;
              });
            }

            return current;

          case 'child_added':
            if (currentKeyPosition > -1) {
              // check that the previouskey is what we expect, else reorder
              var previous = current[currentKeyPosition - 1];

              if ((previous && previous.key || null) !== prevKey) {
                current = current.filter(function (x) {
                  return x.payload.key !== payload.key;
                });
                current.splice(afterPreviousKeyPosition, 0, action);
              }
            } else if (prevKey == null) {
              return [action].concat(_toConsumableArray(current));
            } else {
              current = current.slice();
              current.splice(afterPreviousKeyPosition, 0, action);
            }

            return current;

          case 'child_removed':
            return current.filter(function (x) {
              return x.payload.key !== payload.key;
            });

          case 'child_changed':
            return current.map(function (x) {
              return x.payload.key === key ? action : x;
            });

          case 'child_moved':
            if (currentKeyPosition > -1) {
              var data = current.splice(currentKeyPosition, 1)[0];
              current = current.slice();
              current.splice(afterPreviousKeyPosition, 0, data);
              return current;
            }

            return current;
          // default will also remove null results

          default:
            return current;
        }
      }

      function validateEventsArray(events) {
        if (isNil(events) || events.length === 0) {
          events = ['child_added', 'child_removed', 'child_changed', 'child_moved'];
        }

        return events;
      }

      function _snapshotChanges(query, events, scheduler) {
        events = validateEventsArray(events);
        return listChanges(query, events, scheduler);
      }

      function _stateChanges(query, events, scheduler) {
        events = validateEventsArray(events);
        var childEvent$ = events.map(function (event) {
          return fromRef(query, event, 'on', scheduler);
        });
        return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["merge"]).apply(void 0, _toConsumableArray(childEvent$));
      }

      function _auditTrail(query, events, scheduler) {
        var auditTrail$ = _stateChanges(query, events).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["scan"])(function (current, action) {
          return [].concat(_toConsumableArray(current), [action]);
        }, []));

        return waitForLoaded(query, auditTrail$, scheduler);
      }

      function loadedData(query, scheduler) {
        // Create an observable of loaded values to retrieve the
        // known dataset. This will allow us to know what key to
        // emit the "whole" array at when listening for child events.
        return fromRef(query, 'value', 'on', scheduler).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (data) {
          // Store the last key in the data set
          var lastKeyToLoad; // Loop through loaded dataset to find the last key

          data.payload.forEach(function (child) {
            lastKeyToLoad = child.key;
            return false;
          }); // return data set and the current last key loaded

          return {
            data: data,
            lastKeyToLoad: lastKeyToLoad
          };
        }));
      }

      function waitForLoaded(query, action$, scheduler) {
        var loaded$ = loadedData(query, scheduler);
        return loaded$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["withLatestFrom"])(action$), // Get the latest values from the "loaded" and "child" datasets
        // We can use both datasets to form an array of the latest values.
        Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_ref139) {
          var _ref140 = _slicedToArray(_ref139, 2),
              loaded = _ref140[0],
              actions = _ref140[1];

          // Store the last key in the data set
          var lastKeyToLoad = loaded.lastKeyToLoad; // Store all child keys loaded at this point

          var loadedKeys = actions.map(function (snap) {
            return snap.key;
          });
          return {
            actions: actions,
            lastKeyToLoad: lastKeyToLoad,
            loadedKeys: loadedKeys
          };
        }), // This is the magical part, only emit when the last load key
        // in the dataset has been loaded by a child event. At this point
        // we can assume the dataset is "whole".
        Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["skipWhile"])(function (meta) {
          return meta.loadedKeys.indexOf(meta.lastKeyToLoad) === -1;
        }), // Pluck off the meta data because the user only cares
        // to iterate through the snapshots
        Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (meta) {
          return meta.actions;
        }));
      }

      function createDataOperationMethod(ref, operation) {
        return function dataOperation(item, value) {
          return checkOperationCases(item, {
            stringCase: function stringCase() {
              return ref.child(item)[operation](value);
            },
            firebaseCase: function firebaseCase() {
              return item[operation](value);
            },
            snapshotCase: function snapshotCase() {
              return item.ref[operation](value);
            }
          });
        };
      } // TODO(davideast): Find out why TS thinks this returns firebase.Primise
      // instead of Promise.


      function createRemoveMethod(ref) {
        return function remove(item) {
          if (!item) {
            return ref.remove();
          }

          return checkOperationCases(item, {
            stringCase: function stringCase() {
              return ref.child(item).remove();
            },
            firebaseCase: function firebaseCase() {
              return item.remove();
            },
            snapshotCase: function snapshotCase() {
              return item.ref.remove();
            }
          });
        };
      }

      function createListReference(query, afDatabase) {
        var outsideAngularScheduler = afDatabase.schedulers.outsideAngular;
        var refInZone = afDatabase.schedulers.ngZone.run(function () {
          return query.ref;
        });
        return {
          query: query,
          update: createDataOperationMethod(refInZone, 'update'),
          set: createDataOperationMethod(refInZone, 'set'),
          push: function push(data) {
            return refInZone.push(data);
          },
          remove: createRemoveMethod(refInZone),
          snapshotChanges: function snapshotChanges(events) {
            return _snapshotChanges(query, events, outsideAngularScheduler).pipe(afDatabase.keepUnstableUntilFirst);
          },
          stateChanges: function stateChanges(events) {
            return _stateChanges(query, events, outsideAngularScheduler).pipe(afDatabase.keepUnstableUntilFirst);
          },
          auditTrail: function auditTrail(events) {
            return _auditTrail(query, events, outsideAngularScheduler).pipe(afDatabase.keepUnstableUntilFirst);
          },
          valueChanges: function valueChanges(events, options) {
            var snapshotChanges$ = _snapshotChanges(query, events, outsideAngularScheduler);

            return snapshotChanges$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (actions) {
              return actions.map(function (a) {
                if (options && options.idField) {
                  return Object.assign(Object.assign({}, a.payload.val()), _defineProperty({}, options.idField, a.key));
                } else {
                  return a.payload.val();
                }
              });
            }), afDatabase.keepUnstableUntilFirst);
          }
        };
      }

      function createObjectSnapshotChanges(query, scheduler) {
        return function snapshotChanges() {
          return fromRef(query, 'value', 'on', scheduler);
        };
      }

      function createObjectReference(query, afDatabase) {
        return {
          query: query,
          snapshotChanges: function snapshotChanges() {
            return createObjectSnapshotChanges(query, afDatabase.schedulers.outsideAngular)().pipe(afDatabase.keepUnstableUntilFirst);
          },
          update: function update(data) {
            return query.ref.update(data);
          },
          set: function set(data) {
            return query.ref.set(data);
          },
          remove: function remove() {
            return query.ref.remove();
          },
          valueChanges: function valueChanges() {
            var snapshotChanges$ = createObjectSnapshotChanges(query, afDatabase.schedulers.outsideAngular)();
            return snapshotChanges$.pipe(afDatabase.keepUnstableUntilFirst, Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (action) {
              return action.payload.exists() ? action.payload.val() : null;
            }));
          }
        };
      }

      var URL = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('angularfire2.realtimeDatabaseURL');
      var USE_EMULATOR = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('angularfire2.database.use-emulator');

      var AngularFireDatabase = /*#__PURE__*/function () {
        function AngularFireDatabase(options, nameOrConfig, databaseURL, // tslint:disable-next-line:ban-types
        platformId, zone, _useEmulator, // tuple isn't working here
        useAuthEmulator) {
          _classCallCheck2(this, AngularFireDatabase);

          this.schedulers = new _angular_fire__WEBPACK_IMPORTED_MODULE_3__["ɵAngularFireSchedulers"](zone);
          this.keepUnstableUntilFirst = Object(_angular_fire__WEBPACK_IMPORTED_MODULE_3__["ɵkeepUnstableUntilFirstFactory"])(this.schedulers);
          var useEmulator = _useEmulator;
          var app = Object(_angular_fire__WEBPACK_IMPORTED_MODULE_3__["ɵfirebaseAppFactory"])(options, zone, nameOrConfig);

          if (!firebase_app__WEBPACK_IMPORTED_MODULE_6__["default"].auth && useAuthEmulator) {
            Object(_angular_fire__WEBPACK_IMPORTED_MODULE_3__["ɵlogAuthEmulatorError"])();
          }

          this.database = Object(_angular_fire__WEBPACK_IMPORTED_MODULE_3__["ɵfetchInstance"])("".concat(app.name, ".database.").concat(databaseURL), 'AngularFireDatabase', app, function () {
            var database = zone.runOutsideAngular(function () {
              return app.database(databaseURL || undefined);
            });

            if (useEmulator) {
              database.useEmulator.apply(database, _toConsumableArray(useEmulator));
            }

            return database;
          }, [useEmulator]);
        }

        _createClass2(AngularFireDatabase, [{
          key: "list",
          value: function list(pathOrRef, queryFn) {
            var _this872 = this;

            var ref = this.schedulers.ngZone.runOutsideAngular(function () {
              return getRef(_this872.database, pathOrRef);
            });
            var query = ref;

            if (queryFn) {
              query = queryFn(ref);
            }

            return createListReference(query, this);
          }
        }, {
          key: "object",
          value: function object(pathOrRef) {
            var _this873 = this;

            var ref = this.schedulers.ngZone.runOutsideAngular(function () {
              return getRef(_this873.database, pathOrRef);
            });
            return createObjectReference(ref, this);
          }
        }, {
          key: "createPushId",
          value: function createPushId() {
            var _this874 = this;

            var ref = this.schedulers.ngZone.runOutsideAngular(function () {
              return _this874.database.ref();
            });
            return ref.push().key;
          }
        }]);

        return AngularFireDatabase;
      }();

      AngularFireDatabase.ɵfac = function AngularFireDatabase_Factory(t) {
        return new (t || AngularFireDatabase)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_fire__WEBPACK_IMPORTED_MODULE_3__["FIREBASE_OPTIONS"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_fire__WEBPACK_IMPORTED_MODULE_3__["FIREBASE_APP_NAME"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](URL, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](USE_EMULATOR, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_fire_auth__WEBPACK_IMPORTED_MODULE_5__["USE_EMULATOR"], 8));
      };
      /** @nocollapse */


      AngularFireDatabase.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        factory: function AngularFireDatabase_Factory() {
          return new AngularFireDatabase(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_fire__WEBPACK_IMPORTED_MODULE_3__["FIREBASE_OPTIONS"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_fire__WEBPACK_IMPORTED_MODULE_3__["FIREBASE_APP_NAME"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](URL, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](USE_EMULATOR, 8), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_fire_auth__WEBPACK_IMPORTED_MODULE_5__["USE_EMULATOR"], 8));
        },
        token: AngularFireDatabase,
        providedIn: "any"
      });
      /** @nocollapse */

      AngularFireDatabase.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_fire__WEBPACK_IMPORTED_MODULE_3__["FIREBASE_OPTIONS"]]
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_fire__WEBPACK_IMPORTED_MODULE_3__["FIREBASE_APP_NAME"]]
          }]
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [URL]
          }]
        }, {
          type: Object,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [USE_EMULATOR]
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_fire_auth__WEBPACK_IMPORTED_MODULE_5__["USE_EMULATOR"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](AngularFireDatabase, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"],
          args: [{
            providedIn: 'any'
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_fire__WEBPACK_IMPORTED_MODULE_3__["FIREBASE_OPTIONS"]]
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_fire__WEBPACK_IMPORTED_MODULE_3__["FIREBASE_APP_NAME"]]
            }]
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [URL]
            }]
          }, {
            type: Object,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [USE_EMULATOR]
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_fire_auth__WEBPACK_IMPORTED_MODULE_5__["USE_EMULATOR"]]
            }]
          }];
        }, null);
      })();

      var AngularFireDatabaseModule = function AngularFireDatabaseModule() {
        _classCallCheck2(this, AngularFireDatabaseModule);
      };

      AngularFireDatabaseModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: AngularFireDatabaseModule
      });
      AngularFireDatabaseModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function AngularFireDatabaseModule_Factory(t) {
          return new (t || AngularFireDatabaseModule)();
        },
        providers: [AngularFireDatabase]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](AngularFireDatabaseModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            providers: [AngularFireDatabase]
          }]
        }], null, null);
      })();
      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=angular-fire-database.js.map

      /***/

    },

    /***/
    "sTY7":
    /*!***********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/windowToggle.js ***!
      \***********************************************************************/

    /*! exports provided: windowToggle */

    /***/
    function sTY7(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "windowToggle", function () {
        return windowToggle;
      });
      /* harmony import */


      var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subject */
      "XNiG");
      /* harmony import */


      var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../Subscription */
      "quSY");
      /* harmony import */


      var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../OuterSubscriber */
      "l7GE");
      /* harmony import */


      var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ../util/subscribeToResult */
      "ZUHj");

      function windowToggle(openings, closingSelector) {
        return function (source) {
          return source.lift(new WindowToggleOperator(openings, closingSelector));
        };
      }

      var WindowToggleOperator = /*#__PURE__*/function () {
        function WindowToggleOperator(openings, closingSelector) {
          _classCallCheck2(this, WindowToggleOperator);

          this.openings = openings;
          this.closingSelector = closingSelector;
        }

        _createClass2(WindowToggleOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new WindowToggleSubscriber(subscriber, this.openings, this.closingSelector));
          }
        }]);

        return WindowToggleOperator;
      }();

      var WindowToggleSubscriber = /*#__PURE__*/function (_OuterSubscriber__WEB6) {
        _inherits2(WindowToggleSubscriber, _OuterSubscriber__WEB6);

        var _super368 = _createSuper(WindowToggleSubscriber);

        function WindowToggleSubscriber(destination, openings, closingSelector) {
          var _this875;

          _classCallCheck2(this, WindowToggleSubscriber);

          _this875 = _super368.call(this, destination);
          _this875.openings = openings;
          _this875.closingSelector = closingSelector;
          _this875.contexts = [];

          _this875.add(_this875.openSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(_assertThisInitialized2(_this875), openings, openings));

          return _this875;
        }

        _createClass2(WindowToggleSubscriber, [{
          key: "_next",
          value: function _next(value) {
            var contexts = this.contexts;

            if (contexts) {
              var len = contexts.length;

              for (var i = 0; i < len; i++) {
                contexts[i].window.next(value);
              }
            }
          }
        }, {
          key: "_error",
          value: function _error(err) {
            var contexts = this.contexts;
            this.contexts = null;

            if (contexts) {
              var len = contexts.length;
              var index = -1;

              while (++index < len) {
                var context = contexts[index];
                context.window.error(err);
                context.subscription.unsubscribe();
              }
            }

            _get2(_getPrototypeOf2(WindowToggleSubscriber.prototype), "_error", this).call(this, err);
          }
        }, {
          key: "_complete",
          value: function _complete() {
            var contexts = this.contexts;
            this.contexts = null;

            if (contexts) {
              var len = contexts.length;
              var index = -1;

              while (++index < len) {
                var context = contexts[index];
                context.window.complete();
                context.subscription.unsubscribe();
              }
            }

            _get2(_getPrototypeOf2(WindowToggleSubscriber.prototype), "_complete", this).call(this);
          }
        }, {
          key: "_unsubscribe",
          value: function _unsubscribe() {
            var contexts = this.contexts;
            this.contexts = null;

            if (contexts) {
              var len = contexts.length;
              var index = -1;

              while (++index < len) {
                var context = contexts[index];
                context.window.unsubscribe();
                context.subscription.unsubscribe();
              }
            }
          }
        }, {
          key: "notifyNext",
          value: function notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
            if (outerValue === this.openings) {
              var closingNotifier;

              try {
                var closingSelector = this.closingSelector;
                closingNotifier = closingSelector(innerValue);
              } catch (e) {
                return this.error(e);
              }

              var _window4 = new _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"]();

              var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
              var context = {
                window: _window4,
                subscription: subscription
              };
              this.contexts.push(context);
              var innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, closingNotifier, context);

              if (innerSubscription.closed) {
                this.closeWindow(this.contexts.length - 1);
              } else {
                innerSubscription.context = context;
                subscription.add(innerSubscription);
              }

              this.destination.next(_window4);
            } else {
              this.closeWindow(this.contexts.indexOf(outerValue));
            }
          }
        }, {
          key: "notifyError",
          value: function notifyError(err) {
            this.error(err);
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete(inner) {
            if (inner !== this.openSubscription) {
              this.closeWindow(this.contexts.indexOf(inner.context));
            }
          }
        }, {
          key: "closeWindow",
          value: function closeWindow(index) {
            if (index === -1) {
              return;
            }

            var contexts = this.contexts;
            var context = contexts[index];
            var window = context.window,
                subscription = context.subscription;
            contexts.splice(index, 1);
            window.complete();
            subscription.unsubscribe();
          }
        }]);

        return WindowToggleSubscriber;
      }(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]); //# sourceMappingURL=windowToggle.js.map

      /***/

    },

    /***/
    "sVev":
    /*!****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/EmptyError.js ***!
      \****************************************************************/

    /*! exports provided: EmptyError */

    /***/
    function sVev(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "EmptyError", function () {
        return EmptyError;
      });

      var EmptyErrorImpl = function () {
        function EmptyErrorImpl() {
          Error.call(this);
          this.message = 'no elements in sequence';
          this.name = 'EmptyError';
          return this;
        }

        EmptyErrorImpl.prototype = Object.create(Error.prototype);
        return EmptyErrorImpl;
      }();

      var EmptyError = EmptyErrorImpl; //# sourceMappingURL=EmptyError.js.map

      /***/
    },

    /***/
    "siIQ":
    /*!*************************************************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/adapter/native-date-time.module.js ***!
      \*************************************************************************************************/

    /*! exports provided: NativeDateTimeModule, OwlNativeDateTimeModule, ɵ0 */

    /***/
    function siIQ(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NativeDateTimeModule", function () {
        return NativeDateTimeModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OwlNativeDateTimeModule", function () {
        return OwlNativeDateTimeModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵ0", function () {
        return ɵ0;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/cdk/platform */
      "nLfN");
      /* harmony import */


      var _date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./date-time-adapter.class */
      "1rjb");
      /* harmony import */


      var _native_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./native-date-time-adapter.class */
      "13nz");
      /* harmony import */


      var _date_time_format_class__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ./date-time-format.class */
      "1FPZ");
      /* harmony import */


      var _native_date_time_format_class__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! ./native-date-time-format.class */
      "cP5s");

      var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      };

      var NativeDateTimeModule = function () {
        function NativeDateTimeModule() {}

        NativeDateTimeModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
          type: NativeDateTimeModule
        });
        NativeDateTimeModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
          factory: function NativeDateTimeModule_Factory(t) {
            return new (t || NativeDateTimeModule)();
          },
          providers: [{
            provide: _date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__["DateTimeAdapter"],
            useClass: _native_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_3__["NativeDateTimeAdapter"]
          }],
          imports: [[_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__["PlatformModule"]]]
        });

        (function () {
          (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](NativeDateTimeModule, {
            imports: function imports() {
              return [_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__["PlatformModule"]];
            }
          });
        })();

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NativeDateTimeModule, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
            args: [{
              imports: [_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_1__["PlatformModule"]],
              providers: [{
                provide: _date_time_adapter_class__WEBPACK_IMPORTED_MODULE_2__["DateTimeAdapter"],
                useClass: _native_date_time_adapter_class__WEBPACK_IMPORTED_MODULE_3__["NativeDateTimeAdapter"]
              }]
            }]
          }], function () {
            return [];
          }, null);
        })();

        return NativeDateTimeModule;
      }();

      var ɵ0 = _native_date_time_format_class__WEBPACK_IMPORTED_MODULE_5__["OWL_NATIVE_DATE_TIME_FORMATS"];

      var OwlNativeDateTimeModule = function () {
        function OwlNativeDateTimeModule() {}

        OwlNativeDateTimeModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
          type: OwlNativeDateTimeModule
        });
        OwlNativeDateTimeModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
          factory: function OwlNativeDateTimeModule_Factory(t) {
            return new (t || OwlNativeDateTimeModule)();
          },
          providers: [{
            provide: _date_time_format_class__WEBPACK_IMPORTED_MODULE_4__["OWL_DATE_TIME_FORMATS"],
            useValue: ɵ0
          }],
          imports: [[NativeDateTimeModule]]
        });

        (function () {
          (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](OwlNativeDateTimeModule, {
            imports: [NativeDateTimeModule]
          });
        })();

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](OwlNativeDateTimeModule, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
            args: [{
              imports: [NativeDateTimeModule],
              providers: [{
                provide: _date_time_format_class__WEBPACK_IMPORTED_MODULE_4__["OWL_DATE_TIME_FORMATS"],
                useValue: ɵ0
              }]
            }]
          }], function () {
            return [];
          }, null);
        })();

        return OwlNativeDateTimeModule;
      }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLWRhdGUtdGltZS5tb2R1bGUuanMiLCJzb3VyY2VzIjpbIm5hdGl2ZS1kYXRlLXRpbWUubW9kdWxlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7S0FjSzs7Ozs7Ozs7Ozs7Ozs7Z0RBUXdCOzs7Ozs7O0tBT3hCOzs7Ozs7Ozs7O2dEQU0yQiIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQbGF0Zm9ybU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQgeyBEYXRlVGltZUFkYXB0ZXIgfSBmcm9tICcuL2RhdGUtdGltZS1hZGFwdGVyLmNsYXNzJztcbmltcG9ydCB7IE5hdGl2ZURhdGVUaW1lQWRhcHRlciB9IGZyb20gJy4vbmF0aXZlLWRhdGUtdGltZS1hZGFwdGVyLmNsYXNzJztcbmltcG9ydCB7IE9XTF9EQVRFX1RJTUVfRk9STUFUUyB9IGZyb20gJy4vZGF0ZS10aW1lLWZvcm1hdC5jbGFzcyc7XG5pbXBvcnQgeyBPV0xfTkFUSVZFX0RBVEVfVElNRV9GT1JNQVRTIH0gZnJvbSAnLi9uYXRpdmUtZGF0ZS10aW1lLWZvcm1hdC5jbGFzcyc7XG52YXIgTmF0aXZlRGF0ZVRpbWVNb2R1bGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5hdGl2ZURhdGVUaW1lTW9kdWxlKCkge1xuICAgIH1cbiAgICBOYXRpdmVEYXRlVGltZU1vZHVsZSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICBOZ01vZHVsZSh7XG4gICAgICAgICAgICBpbXBvcnRzOiBbUGxhdGZvcm1Nb2R1bGVdLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBEYXRlVGltZUFkYXB0ZXIsIHVzZUNsYXNzOiBOYXRpdmVEYXRlVGltZUFkYXB0ZXIgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pXG4gICAgXSwgTmF0aXZlRGF0ZVRpbWVNb2R1bGUpO1xuICAgIHJldHVybiBOYXRpdmVEYXRlVGltZU1vZHVsZTtcbn0oKSk7XG5leHBvcnQgeyBOYXRpdmVEYXRlVGltZU1vZHVsZSB9O1xudmFyIMm1MCA9IE9XTF9OQVRJVkVfREFURV9USU1FX0ZPUk1BVFM7XG52YXIgT3dsTmF0aXZlRGF0ZVRpbWVNb2R1bGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE93bE5hdGl2ZURhdGVUaW1lTW9kdWxlKCkge1xuICAgIH1cbiAgICBPd2xOYXRpdmVEYXRlVGltZU1vZHVsZSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICBOZ01vZHVsZSh7XG4gICAgICAgICAgICBpbXBvcnRzOiBbTmF0aXZlRGF0ZVRpbWVNb2R1bGVdLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBPV0xfREFURV9USU1FX0ZPUk1BVFMsIHVzZVZhbHVlOiDJtTAgfV0sXG4gICAgICAgIH0pXG4gICAgXSwgT3dsTmF0aXZlRGF0ZVRpbWVNb2R1bGUpO1xuICAgIHJldHVybiBPd2xOYXRpdmVEYXRlVGltZU1vZHVsZTtcbn0oKSk7XG5leHBvcnQgeyBPd2xOYXRpdmVEYXRlVGltZU1vZHVsZSB9O1xuZXhwb3J0IHsgybUwIH07XG4iXX0=

      /***/

    },

    /***/
    "sp3z":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/lo.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function sp3z(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Lao [lo]
      //! author : Ryan Hart : https://github.com/ryanhart2
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var lo = moment.defineLocale('lo', {
          months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),
          monthsShort: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),
          weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
          weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
          weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'ວັນdddd D MMMM YYYY HH:mm'
          },
          meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,
          isPM: function isPM(input) {
            return input === 'ຕອນແລງ';
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 12) {
              return 'ຕອນເຊົ້າ';
            } else {
              return 'ຕອນແລງ';
            }
          },
          calendar: {
            sameDay: '[ມື້ນີ້ເວລາ] LT',
            nextDay: '[ມື້ອື່ນເວລາ] LT',
            nextWeek: '[ວັນ]dddd[ໜ້າເວລາ] LT',
            lastDay: '[ມື້ວານນີ້ເວລາ] LT',
            lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'ອີກ %s',
            past: '%sຜ່ານມາ',
            s: 'ບໍ່ເທົ່າໃດວິນາທີ',
            ss: '%d ວິນາທີ',
            m: '1 ນາທີ',
            mm: '%d ນາທີ',
            h: '1 ຊົ່ວໂມງ',
            hh: '%d ຊົ່ວໂມງ',
            d: '1 ມື້',
            dd: '%d ມື້',
            M: '1 ເດືອນ',
            MM: '%d ເດືອນ',
            y: '1 ປີ',
            yy: '%d ປີ'
          },
          dayOfMonthOrdinalParse: /(ທີ່)\d{1,2}/,
          ordinal: function ordinal(number) {
            return 'ທີ່' + number;
          }
        });
        return lo;
      });
      /***/

    },

    /***/
    "spgP":
    /*!**************************************************************************!*\
      !*** ./node_modules/@angular/fire/__ivy_ngcc__/fesm2015/angular-fire.js ***!
      \**************************************************************************/

    /*! exports provided: AngularFireModule, FIREBASE_APP_NAME, FIREBASE_OPTIONS, FirebaseApp, VERSION, ɵ0, ɵAngularFireSchedulers, ɵBlockUntilFirstOperator, ɵZoneScheduler, ɵapplyMixins, ɵfetchInstance, ɵfirebaseAppFactory, ɵkeepUnstableUntilFirstFactory, ɵlazySDKProxy, ɵlogAuthEmulatorError */

    /***/
    function spgP(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* WEBPACK VAR INJECTION */


      (function (module) {
        /* harmony export (binding) */
        __webpack_require__.d(__webpack_exports__, "AngularFireModule", function () {
          return AngularFireModule;
        });
        /* harmony export (binding) */


        __webpack_require__.d(__webpack_exports__, "FIREBASE_APP_NAME", function () {
          return FIREBASE_APP_NAME;
        });
        /* harmony export (binding) */


        __webpack_require__.d(__webpack_exports__, "FIREBASE_OPTIONS", function () {
          return FIREBASE_OPTIONS;
        });
        /* harmony export (binding) */


        __webpack_require__.d(__webpack_exports__, "FirebaseApp", function () {
          return FirebaseApp;
        });
        /* harmony export (binding) */


        __webpack_require__.d(__webpack_exports__, "VERSION", function () {
          return VERSION;
        });
        /* harmony export (binding) */


        __webpack_require__.d(__webpack_exports__, "ɵ0", function () {
          return ɵ0;
        });
        /* harmony export (binding) */


        __webpack_require__.d(__webpack_exports__, "ɵAngularFireSchedulers", function () {
          return ɵAngularFireSchedulers;
        });
        /* harmony export (binding) */


        __webpack_require__.d(__webpack_exports__, "ɵBlockUntilFirstOperator", function () {
          return ɵBlockUntilFirstOperator;
        });
        /* harmony export (binding) */


        __webpack_require__.d(__webpack_exports__, "ɵZoneScheduler", function () {
          return ɵZoneScheduler;
        });
        /* harmony export (binding) */


        __webpack_require__.d(__webpack_exports__, "ɵapplyMixins", function () {
          return ɵapplyMixins;
        });
        /* harmony export (binding) */


        __webpack_require__.d(__webpack_exports__, "ɵfetchInstance", function () {
          return ɵfetchInstance;
        });
        /* harmony export (binding) */


        __webpack_require__.d(__webpack_exports__, "ɵfirebaseAppFactory", function () {
          return ɵfirebaseAppFactory;
        });
        /* harmony export (binding) */


        __webpack_require__.d(__webpack_exports__, "ɵkeepUnstableUntilFirstFactory", function () {
          return ɵkeepUnstableUntilFirstFactory;
        });
        /* harmony export (binding) */


        __webpack_require__.d(__webpack_exports__, "ɵlazySDKProxy", function () {
          return ɵlazySDKProxy;
        });
        /* harmony export (binding) */


        __webpack_require__.d(__webpack_exports__, "ɵlogAuthEmulatorError", function () {
          return ɵlogAuthEmulatorError;
        });
        /* harmony import */


        var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
        /*! rxjs */
        "qCKp");
        /* harmony import */


        var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
        /*! rxjs/operators */
        "kU1M");
        /* harmony import */


        var _angular_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
        /*! @angular/core */
        "fXoL");
        /* harmony import */


        var firebase_app__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
        /*! firebase/app */
        "Jgta");

        function noop() {}
        /**
         * Schedules tasks so that they are invoked inside the Zone that is passed in the constructor.
         */
        // tslint:disable-next-line:class-name


        var ɵZoneScheduler = /*#__PURE__*/function () {
          function ɵZoneScheduler(zone) {
            var delegate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : rxjs__WEBPACK_IMPORTED_MODULE_0__["queueScheduler"];

            _classCallCheck2(this, ɵZoneScheduler);

            this.zone = zone;
            this.delegate = delegate;
          }

          _createClass2(ɵZoneScheduler, [{
            key: "now",
            value: function now() {
              return this.delegate.now();
            }
          }, {
            key: "schedule",
            value: function schedule(work, delay, state) {
              var targetZone = this.zone; // Wrap the specified work function to make sure that if nested scheduling takes place the
              // work is executed in the correct zone

              var workInZone = function workInZone(state) {
                var _this876 = this;

                targetZone.runGuarded(function () {
                  work.apply(_this876, [state]);
                });
              }; // Scheduling itself needs to be run in zone to ensure setInterval calls for async scheduling are done
              // inside the correct zone. This scheduler needs to schedule asynchronously always to ensure that
              // firebase emissions are never synchronous. Specifying a delay causes issues with the queueScheduler delegate.


              return this.delegate.schedule(workInZone, delay, state);
            }
          }]);

          return ɵZoneScheduler;
        }(); // tslint:disable-next-line:class-name


        var ɵBlockUntilFirstOperator = /*#__PURE__*/function () {
          function ɵBlockUntilFirstOperator(zone) {
            _classCallCheck2(this, ɵBlockUntilFirstOperator);

            this.zone = zone;
            this.task = null;
          }

          _createClass2(ɵBlockUntilFirstOperator, [{
            key: "call",
            value: function call(subscriber, source) {
              var unscheduleTask = this.unscheduleTask.bind(this);
              this.task = this.zone.run(function () {
                return Zone.current.scheduleMacroTask('firebaseZoneBlock', noop, {}, noop, noop);
              });
              return source.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])({
                next: unscheduleTask,
                complete: unscheduleTask,
                error: unscheduleTask
              })).subscribe(subscriber).add(unscheduleTask);
            }
          }, {
            key: "unscheduleTask",
            value: function unscheduleTask() {
              var _this877 = this;

              // maybe this is a race condition, invoke in a timeout
              // hold for 10ms while I try to figure out what is going on
              setTimeout(function () {
                if (_this877.task != null && _this877.task.state === 'scheduled') {
                  _this877.task.invoke();

                  _this877.task = null;
                }
              }, 10);
            }
          }]);

          return ɵBlockUntilFirstOperator;
        }(); // tslint:disable-next-line:class-name


        var ɵAngularFireSchedulers = function ɵAngularFireSchedulers(ngZone) {
          _classCallCheck2(this, ɵAngularFireSchedulers);

          this.ngZone = ngZone;
          this.outsideAngular = ngZone.runOutsideAngular(function () {
            return new ɵZoneScheduler(Zone.current);
          });
          this.insideAngular = ngZone.run(function () {
            return new ɵZoneScheduler(Zone.current, rxjs__WEBPACK_IMPORTED_MODULE_0__["asyncScheduler"]);
          });
        };
        /**
         * Operator to block the zone until the first value has been emitted or the observable
         * has completed/errored. This is used to make sure that universal waits until the first
         * value from firebase but doesn't block the zone forever since the firebase subscription
         * is still alive.
         */


        function ɵkeepUnstableUntilFirstFactory(schedulers) {
          return function keepUnstableUntilFirst(obs$) {
            obs$ = obs$.lift(new ɵBlockUntilFirstOperator(schedulers.ngZone));
            return obs$.pipe( // Run the subscribe body outside of Angular (e.g. calling Firebase SDK to add a listener to a change event)
            Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["subscribeOn"])(schedulers.outsideAngular), // Run operators inside the angular zone (e.g. side effects via tap())
            Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["observeOn"])(schedulers.insideAngular) // INVESTIGATE https://github.com/angular/angularfire/pull/2315
            // share()
            );
          };
        } // DEBUG quick debugger function for inline logging that typescript doesn't complain about
        //       wrote it for debugging the ɵlazySDKProxy, commenting out for now; should consider exposing a
        //       verbose mode for AngularFire in a future release that uses something like this in multiple places
        //       usage: () => log('something') || returnValue
        // const log = (...args: any[]): false => { console.log(...args); return false }
        // The problem here are things like ngOnDestroy are missing, then triggering the service
        // rather than dig too far; I'm capturing these as I go.


        var noopFunctions = ['ngOnDestroy']; // INVESTIGATE should we make the Proxy revokable and do some cleanup?
        //             right now it's fairly simple but I'm sure this will grow in complexity

        var ɵlazySDKProxy = function ɵlazySDKProxy(klass, observable, zone) {
          var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
          return new Proxy(klass, {
            get: function get(_, name) {
              return zone.runOutsideAngular(function () {
                var _a;

                if (klass[name]) {
                  if ((_a = options === null || options === void 0 ? void 0 : options.spy) === null || _a === void 0 ? void 0 : _a.get) {
                    options.spy.get(name, klass[name]);
                  }

                  return klass[name];
                }

                if (noopFunctions.indexOf(name) > -1) {
                  return function () {};
                }

                var promise = observable.toPromise().then(function (mod) {
                  var ret = mod && mod[name]; // TODO move to proper type guards

                  if (typeof ret === 'function') {
                    return ret.bind(mod);
                  } else if (ret && ret.then) {
                    return ret.then(function (res) {
                      return zone.run(function () {
                        return res;
                      });
                    });
                  } else {
                    return zone.run(function () {
                      return ret;
                    });
                  }
                }); // recurse the proxy

                return new Proxy(function () {}, {
                  get: function get(_, name) {
                    return promise[name];
                  },
                  // TODO handle callbacks as transparently as I can
                  apply: function apply(self, _, args) {
                    return promise.then(function (it) {
                      var _a;

                      var res = it && it.apply(void 0, _toConsumableArray(args));

                      if ((_a = options === null || options === void 0 ? void 0 : options.spy) === null || _a === void 0 ? void 0 : _a.apply) {
                        options.spy.apply(name, args, res);
                      }

                      return res;
                    });
                  }
                });
              });
            }
          });
        };

        var ɵapplyMixins = function ɵapplyMixins(derivedCtor, constructors) {
          constructors.forEach(function (baseCtor) {
            Object.getOwnPropertyNames(baseCtor.prototype || baseCtor).forEach(function (name) {
              Object.defineProperty(derivedCtor.prototype, name, Object.getOwnPropertyDescriptor(baseCtor.prototype || baseCtor, name));
            });
          });
        };

        var FIREBASE_OPTIONS = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["InjectionToken"]('angularfire2.app.options');
        var FIREBASE_APP_NAME = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["InjectionToken"]('angularfire2.app.nameOrConfig'); // Have to implement as we need to return a class from the provider, we should consider exporting
        // this in the firebase/app types as this is our highest risk of breaks

        var FirebaseApp = function FirebaseApp() {
          _classCallCheck2(this, FirebaseApp);
        };

        var VERSION = new _angular_core__WEBPACK_IMPORTED_MODULE_2__["Version"]('6.1.5');

        function ɵfirebaseAppFactory(options, zone, nameOrConfig) {
          var name = typeof nameOrConfig === 'string' && nameOrConfig || '[DEFAULT]';
          var config = typeof nameOrConfig === 'object' && nameOrConfig || {};
          config.name = config.name || name; // Added any due to some inconsistency between @firebase/app and firebase types

          var existingApp = firebase_app__WEBPACK_IMPORTED_MODULE_3__["default"].apps.filter(function (app) {
            return app && app.name === config.name;
          })[0]; // We support FirebaseConfig, initializeApp's public type only accepts string; need to cast as any
          // Could be solved with https://github.com/firebase/firebase-js-sdk/pull/1206

          var app = existingApp || zone.runOutsideAngular(function () {
            return firebase_app__WEBPACK_IMPORTED_MODULE_3__["default"].initializeApp(options, config);
          });

          try {
            if (JSON.stringify(options) !== JSON.stringify(app.options)) {
              var hmr = !!module.hot;
              log('error', "".concat(app.name, " Firebase App already initialized with different options").concat(hmr ? ', you may need to reload as Firebase is not HMR aware.' : '.'));
            }
          } catch (e) {}

          return app;
        }

        var ɵlogAuthEmulatorError = function ɵlogAuthEmulatorError() {
          // TODO sort this out, https://github.com/angular/angularfire/issues/2656
          log('warn', 'You may need to import \'firebase/auth\' manually in your component rather than rely on AngularFireAuth\'s dynamic import, when using the emulator suite https://github.com/angular/angularfire/issues/2656');
        };

        var log = function log(level) {
          if (Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["isDevMode"])() && typeof console !== 'undefined') {
            var _console2;

            for (var _len63 = arguments.length, args = new Array(_len63 > 1 ? _len63 - 1 : 0), _key65 = 1; _key65 < _len63; _key65++) {
              args[_key65 - 1] = arguments[_key65];
            }

            (_console2 = console)[level].apply(_console2, args);
          }
        };

        var ɵ0 = log;
        globalThis.ɵAngularfireInstanceCache || (globalThis.ɵAngularfireInstanceCache = new Map());

        function ɵfetchInstance(cacheKey, moduleName, app, fn, args) {
          var _ref141 = globalThis.ɵAngularfireInstanceCache.get(cacheKey) || [],
              _ref142 = _toArray(_ref141),
              instance = _ref142[0],
              cachedArgs = _ref142.slice(1);

          if (instance) {
            try {
              if (args.some(function (arg, i) {
                var cachedArg = cachedArgs[i];

                if (arg && typeof arg === 'object') {
                  return JSON.stringify(arg) !== JSON.stringify(cachedArg);
                } else {
                  return arg !== cachedArg;
                }
              })) {
                var hmr = !!module.hot;
                log('error', "".concat(moduleName, " was already initialized on the ").concat(app.name, " Firebase App instance with different settings.").concat(hmr ? ' You may need to reload as Firebase is not HMR aware.' : ''));
              }
            } catch (e) {}

            return instance;
          } else {
            var newInstance = fn();
            globalThis.ɵAngularfireInstanceCache.set(cacheKey, [newInstance].concat(_toConsumableArray(args)));
            return newInstance;
          }
        }

        var FIREBASE_APP_PROVIDER = {
          provide: FirebaseApp,
          useFactory: ɵfirebaseAppFactory,
          deps: [FIREBASE_OPTIONS, _angular_core__WEBPACK_IMPORTED_MODULE_2__["NgZone"], [new _angular_core__WEBPACK_IMPORTED_MODULE_2__["Optional"](), FIREBASE_APP_NAME]]
        };

        var AngularFireModule = /*#__PURE__*/function () {
          // tslint:disable-next-line:ban-types
          function AngularFireModule(platformId) {
            _classCallCheck2(this, AngularFireModule);

            firebase_app__WEBPACK_IMPORTED_MODULE_3__["default"].registerVersion('angularfire', VERSION.full, platformId.toString());
            firebase_app__WEBPACK_IMPORTED_MODULE_3__["default"].registerVersion('angular', _angular_core__WEBPACK_IMPORTED_MODULE_2__["VERSION"].full);
          }

          _createClass2(AngularFireModule, null, [{
            key: "initializeApp",
            value: function initializeApp(options, nameOrConfig) {
              return {
                ngModule: AngularFireModule,
                providers: [{
                  provide: FIREBASE_OPTIONS,
                  useValue: options
                }, {
                  provide: FIREBASE_APP_NAME,
                  useValue: nameOrConfig
                }]
              };
            }
          }]);

          return AngularFireModule;
        }();

        AngularFireModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineNgModule"]({
          type: AngularFireModule
        });
        AngularFireModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineInjector"]({
          factory: function AngularFireModule_Factory(t) {
            return new (t || AngularFireModule)(_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_2__["PLATFORM_ID"]));
          },
          providers: [FIREBASE_APP_PROVIDER]
        });
        /** @nocollapse */

        AngularFireModule.ctorParameters = function () {
          return [{
            type: Object,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Inject"],
              args: [_angular_core__WEBPACK_IMPORTED_MODULE_2__["PLATFORM_ID"]]
            }]
          }];
        };

        (function () {
          (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵsetClassMetadata"](AngularFireModule, [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["NgModule"],
            args: [{
              providers: [FIREBASE_APP_PROVIDER]
            }]
          }], function () {
            return [{
              type: Object,
              decorators: [{
                type: _angular_core__WEBPACK_IMPORTED_MODULE_2__["Inject"],
                args: [_angular_core__WEBPACK_IMPORTED_MODULE_2__["PLATFORM_ID"]]
              }]
            }];
          }, null);
        })();
        /**
         * Generated bundle index. Do not edit.
         */
        //# sourceMappingURL=angular-fire.js.map

        /* WEBPACK VAR INJECTION */

      }).call(this, __webpack_require__(
      /*! ./../../../../webpack/buildin/harmony-module.js */
      "3UD+")(module));
      /***/
    },

    /***/
    "sqCk":
    /*!*******************************************************!*\
      !*** ./node_modules/aws-sdk/lib/s3/managed_upload.js ***!
      \*******************************************************/

    /*! no static exports found */

    /***/
    function sqCk(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ../core */
      "QsWE");

      var byteLength = AWS.util.string.byteLength;
      var Buffer = AWS.util.Buffer;
      /**
       * The managed uploader allows for easy and efficient uploading of buffers,
       * blobs, or streams, using a configurable amount of concurrency to perform
       * multipart uploads where possible. This abstraction also enables uploading
       * streams of unknown size due to the use of multipart uploads.
       *
       * To construct a managed upload object, see the {constructor} function.
       *
       * ## Tracking upload progress
       *
       * The managed upload object can also track progress by attaching an
       * 'httpUploadProgress' listener to the upload manager. This event is similar
       * to {AWS.Request~httpUploadProgress} but groups all concurrent upload progress
       * into a single event. See {AWS.S3.ManagedUpload~httpUploadProgress} for more
       * information.
       *
       * ## Handling Multipart Cleanup
       *
       * By default, this class will automatically clean up any multipart uploads
       * when an individual part upload fails. This behavior can be disabled in order
       * to manually handle failures by setting the `leavePartsOnError` configuration
       * option to `true` when initializing the upload object.
       *
       * @!event httpUploadProgress(progress)
       *   Triggered when the uploader has uploaded more data.
       *   @note The `total` property may not be set if the stream being uploaded has
       *     not yet finished chunking. In this case the `total` will be undefined
       *     until the total stream size is known.
       *   @note This event will not be emitted in Node.js 0.8.x.
       *   @param progress [map] An object containing the `loaded` and `total` bytes
       *     of the request and the `key` of the S3 object. Note that `total` may be undefined until the payload
       *     size is known.
       *   @context (see AWS.Request~send)
       */

      AWS.S3.ManagedUpload = AWS.util.inherit({
        /**
         * Creates a managed upload object with a set of configuration options.
         *
         * @note A "Body" parameter is required to be set prior to calling {send}.
         * @note In Node.js, sending "Body" as {https://nodejs.org/dist/latest/docs/api/stream.html#stream_object_mode object-mode stream}
         *   may result in upload hangs. Using buffer stream is preferable.
         * @option options params [map] a map of parameters to pass to the upload
         *   requests. The "Body" parameter is required to be specified either on
         *   the service or in the params option.
         * @note ContentMD5 should not be provided when using the managed upload object.
         *   Instead, setting "computeChecksums" to true will enable automatic ContentMD5 generation
         *   by the managed upload object.
         * @option options queueSize [Number] (4) the size of the concurrent queue
         *   manager to upload parts in parallel. Set to 1 for synchronous uploading
         *   of parts. Note that the uploader will buffer at most queueSize * partSize
         *   bytes into memory at any given time.
         * @option options partSize [Number] (5mb) the size in bytes for each
         *   individual part to be uploaded. Adjust the part size to ensure the number
         *   of parts does not exceed {maxTotalParts}. See {minPartSize} for the
         *   minimum allowed part size.
         * @option options leavePartsOnError [Boolean] (false) whether to abort the
         *   multipart upload if an error occurs. Set to true if you want to handle
         *   failures manually.
         * @option options service [AWS.S3] an optional S3 service object to use for
         *   requests. This object might have bound parameters used by the uploader.
         * @option options tags [Array<map>] The tags to apply to the uploaded object.
         *   Each tag should have a `Key` and `Value` keys.
         * @example Creating a default uploader for a stream object
         *   var upload = new AWS.S3.ManagedUpload({
         *     params: {Bucket: 'bucket', Key: 'key', Body: stream}
         *   });
         * @example Creating an uploader with concurrency of 1 and partSize of 10mb
         *   var upload = new AWS.S3.ManagedUpload({
         *     partSize: 10 * 1024 * 1024, queueSize: 1,
         *     params: {Bucket: 'bucket', Key: 'key', Body: stream}
         *   });
         * @example Creating an uploader with tags
         *   var upload = new AWS.S3.ManagedUpload({
         *     params: {Bucket: 'bucket', Key: 'key', Body: stream},
         *     tags: [{Key: 'tag1', Value: 'value1'}, {Key: 'tag2', Value: 'value2'}]
         *   });
         * @see send
         */
        constructor: function ManagedUpload(options) {
          var self = this;
          AWS.SequentialExecutor.call(self);
          self.body = null;
          self.sliceFn = null;
          self.callback = null;
          self.parts = {};
          self.completeInfo = [];

          self.fillQueue = function () {
            self.callback(new Error('Unsupported body payload ' + typeof self.body));
          };

          self.configure(options);
        },

        /**
         * @api private
         */
        configure: function configure(options) {
          options = options || {};
          this.partSize = this.minPartSize;
          if (options.queueSize) this.queueSize = options.queueSize;
          if (options.partSize) this.partSize = options.partSize;
          if (options.leavePartsOnError) this.leavePartsOnError = true;

          if (options.tags) {
            if (!Array.isArray(options.tags)) {
              throw new Error('Tags must be specified as an array; ' + typeof options.tags + ' provided.');
            }

            this.tags = options.tags;
          }

          if (this.partSize < this.minPartSize) {
            throw new Error('partSize must be greater than ' + this.minPartSize);
          }

          this.service = options.service;
          this.bindServiceObject(options.params);
          this.validateBody();
          this.adjustTotalBytes();
        },

        /**
         * @api private
         */
        leavePartsOnError: false,

        /**
         * @api private
         */
        queueSize: 4,

        /**
         * @api private
         */
        partSize: null,

        /**
         * @readonly
         * @return [Number] the minimum number of bytes for an individual part
         *   upload.
         */
        minPartSize: 1024 * 1024 * 5,

        /**
         * @readonly
         * @return [Number] the maximum allowed number of parts in a multipart upload.
         */
        maxTotalParts: 10000,

        /**
         * Initiates the managed upload for the payload.
         *
         * @callback callback function(err, data)
         *   @param err [Error] an error or null if no error occurred.
         *   @param data [map] The response data from the successful upload:
         *     * `Location` (String) the URL of the uploaded object
         *     * `ETag` (String) the ETag of the uploaded object
         *     * `Bucket` (String) the bucket to which the object was uploaded
         *     * `Key` (String) the key to which the object was uploaded
         * @example Sending a managed upload object
         *   var params = {Bucket: 'bucket', Key: 'key', Body: stream};
         *   var upload = new AWS.S3.ManagedUpload({params: params});
         *   upload.send(function(err, data) {
         *     console.log(err, data);
         *   });
         */
        send: function send(callback) {
          var self = this;
          self.failed = false;

          self.callback = callback || function (err) {
            if (err) throw err;
          };

          var runFill = true;

          if (self.sliceFn) {
            self.fillQueue = self.fillBuffer;
          } else if (AWS.util.isNode()) {
            var Stream = AWS.util.stream.Stream;

            if (self.body instanceof Stream) {
              runFill = false;
              self.fillQueue = self.fillStream;
              self.partBuffers = [];
              self.body.on('error', function (err) {
                self.cleanup(err);
              }).on('readable', function () {
                self.fillQueue();
              }).on('end', function () {
                self.isDoneChunking = true;
                self.numParts = self.totalPartNumbers;
                self.fillQueue.call(self);

                if (self.isDoneChunking && self.totalPartNumbers >= 1 && self.doneParts === self.numParts) {
                  self.finishMultiPart();
                }
              });
            }
          }

          if (runFill) self.fillQueue.call(self);
        },

        /**
         * @!method  promise()
         *   Returns a 'thenable' promise.
         *
         *   Two callbacks can be provided to the `then` method on the returned promise.
         *   The first callback will be called if the promise is fulfilled, and the second
         *   callback will be called if the promise is rejected.
         *   @callback fulfilledCallback function(data)
         *     Called if the promise is fulfilled.
         *     @param data [map] The response data from the successful upload:
         *       `Location` (String) the URL of the uploaded object
         *       `ETag` (String) the ETag of the uploaded object
         *       `Bucket` (String) the bucket to which the object was uploaded
         *       `Key` (String) the key to which the object was uploaded
         *   @callback rejectedCallback function(err)
         *     Called if the promise is rejected.
         *     @param err [Error] an error or null if no error occurred.
         *   @return [Promise] A promise that represents the state of the upload request.
         *   @example Sending an upload request using promises.
         *     var upload = s3.upload({Bucket: 'bucket', Key: 'key', Body: stream});
         *     var promise = upload.promise();
         *     promise.then(function(data) { ... }, function(err) { ... });
         */

        /**
         * Aborts a managed upload, including all concurrent upload requests.
         * @note By default, calling this function will cleanup a multipart upload
         *   if one was created. To leave the multipart upload around after aborting
         *   a request, configure `leavePartsOnError` to `true` in the {constructor}.
         * @note Calling {abort} in the browser environment will not abort any requests
         *   that are already in flight. If a multipart upload was created, any parts
         *   not yet uploaded will not be sent, and the multipart upload will be cleaned up.
         * @example Aborting an upload
         *   var params = {
         *     Bucket: 'bucket', Key: 'key',
         *     Body: Buffer.alloc(1024 * 1024 * 25) // 25MB payload
         *   };
         *   var upload = s3.upload(params);
         *   upload.send(function (err, data) {
         *     if (err) console.log("Error:", err.code, err.message);
         *     else console.log(data);
         *   });
         *
         *   // abort request in 1 second
         *   setTimeout(upload.abort.bind(upload), 1000);
         */
        abort: function abort() {
          var self = this; //abort putObject request

          if (self.isDoneChunking === true && self.totalPartNumbers === 1 && self.singlePart) {
            self.singlePart.abort();
          } else {
            self.cleanup(AWS.util.error(new Error('Request aborted by user'), {
              code: 'RequestAbortedError',
              retryable: false
            }));
          }
        },

        /**
         * @api private
         */
        validateBody: function validateBody() {
          var self = this;
          self.body = self.service.config.params.Body;

          if (typeof self.body === 'string') {
            self.body = AWS.util.buffer.toBuffer(self.body);
          } else if (!self.body) {
            throw new Error('params.Body is required');
          }

          self.sliceFn = AWS.util.arraySliceFn(self.body);
        },

        /**
         * @api private
         */
        bindServiceObject: function bindServiceObject(params) {
          params = params || {};
          var self = this; // bind parameters to new service object

          if (!self.service) {
            self.service = new AWS.S3({
              params: params
            });
          } else {
            var service = self.service;
            var config = AWS.util.copy(service._originalConfig || {});
            config.signatureVersion = service.getSignatureVersion();
            self.service = new service.constructor.__super__(config);
            self.service.config.params = AWS.util.merge(self.service.config.params || {}, params);
          }
        },

        /**
         * @api private
         */
        adjustTotalBytes: function adjustTotalBytes() {
          var self = this;

          try {
            // try to get totalBytes
            self.totalBytes = byteLength(self.body);
          } catch (e) {} // try to adjust partSize if we know payload length


          if (self.totalBytes) {
            var newPartSize = Math.ceil(self.totalBytes / self.maxTotalParts);
            if (newPartSize > self.partSize) self.partSize = newPartSize;
          } else {
            self.totalBytes = undefined;
          }
        },

        /**
         * @api private
         */
        isDoneChunking: false,

        /**
         * @api private
         */
        partPos: 0,

        /**
         * @api private
         */
        totalChunkedBytes: 0,

        /**
         * @api private
         */
        totalUploadedBytes: 0,

        /**
         * @api private
         */
        totalBytes: undefined,

        /**
         * @api private
         */
        numParts: 0,

        /**
         * @api private
         */
        totalPartNumbers: 0,

        /**
         * @api private
         */
        activeParts: 0,

        /**
         * @api private
         */
        doneParts: 0,

        /**
         * @api private
         */
        parts: null,

        /**
         * @api private
         */
        completeInfo: null,

        /**
         * @api private
         */
        failed: false,

        /**
         * @api private
         */
        multipartReq: null,

        /**
         * @api private
         */
        partBuffers: null,

        /**
         * @api private
         */
        partBufferLength: 0,

        /**
         * @api private
         */
        fillBuffer: function fillBuffer() {
          var self = this;
          var bodyLen = byteLength(self.body);

          if (bodyLen === 0) {
            self.isDoneChunking = true;
            self.numParts = 1;
            self.nextChunk(self.body);
            return;
          }

          while (self.activeParts < self.queueSize && self.partPos < bodyLen) {
            var endPos = Math.min(self.partPos + self.partSize, bodyLen);
            var buf = self.sliceFn.call(self.body, self.partPos, endPos);
            self.partPos += self.partSize;

            if (byteLength(buf) < self.partSize || self.partPos === bodyLen) {
              self.isDoneChunking = true;
              self.numParts = self.totalPartNumbers + 1;
            }

            self.nextChunk(buf);
          }
        },

        /**
         * @api private
         */
        fillStream: function fillStream() {
          var self = this;
          if (self.activeParts >= self.queueSize) return;
          var buf = self.body.read(self.partSize - self.partBufferLength) || self.body.read();

          if (buf) {
            self.partBuffers.push(buf);
            self.partBufferLength += buf.length;
            self.totalChunkedBytes += buf.length;
          }

          if (self.partBufferLength >= self.partSize) {
            // if we have single buffer we avoid copyfull concat
            var pbuf = self.partBuffers.length === 1 ? self.partBuffers[0] : Buffer.concat(self.partBuffers);
            self.partBuffers = [];
            self.partBufferLength = 0; // if we have more than partSize, push the rest back on the queue

            if (pbuf.length > self.partSize) {
              var rest = pbuf.slice(self.partSize);
              self.partBuffers.push(rest);
              self.partBufferLength += rest.length;
              pbuf = pbuf.slice(0, self.partSize);
            }

            self.nextChunk(pbuf);
          }

          if (self.isDoneChunking && !self.isDoneSending) {
            // if we have single buffer we avoid copyfull concat
            pbuf = self.partBuffers.length === 1 ? self.partBuffers[0] : Buffer.concat(self.partBuffers);
            self.partBuffers = [];
            self.partBufferLength = 0;
            self.totalBytes = self.totalChunkedBytes;
            self.isDoneSending = true;

            if (self.numParts === 0 || pbuf.length > 0) {
              self.numParts++;
              self.nextChunk(pbuf);
            }
          }

          self.body.read(0);
        },

        /**
         * @api private
         */
        nextChunk: function nextChunk(chunk) {
          var self = this;
          if (self.failed) return null;
          var partNumber = ++self.totalPartNumbers;

          if (self.isDoneChunking && partNumber === 1) {
            var params = {
              Body: chunk
            };

            if (this.tags) {
              params.Tagging = this.getTaggingHeader();
            }

            var req = self.service.putObject(params);
            req._managedUpload = self;
            req.on('httpUploadProgress', self.progress).send(self.finishSinglePart);
            self.singlePart = req; //save the single part request

            return null;
          } else if (self.service.config.params.ContentMD5) {
            var err = AWS.util.error(new Error('The Content-MD5 you specified is invalid for multi-part uploads.'), {
              code: 'InvalidDigest',
              retryable: false
            });
            self.cleanup(err);
            return null;
          }

          if (self.completeInfo[partNumber] && self.completeInfo[partNumber].ETag !== null) {
            return null; // Already uploaded this part.
          }

          self.activeParts++;

          if (!self.service.config.params.UploadId) {
            if (!self.multipartReq) {
              // create multipart
              self.multipartReq = self.service.createMultipartUpload();
              self.multipartReq.on('success', function (resp) {
                self.service.config.params.UploadId = resp.data.UploadId;
                self.multipartReq = null;
              });
              self.queueChunks(chunk, partNumber);
              self.multipartReq.on('error', function (err) {
                self.cleanup(err);
              });
              self.multipartReq.send();
            } else {
              self.queueChunks(chunk, partNumber);
            }
          } else {
            // multipart is created, just send
            self.uploadPart(chunk, partNumber);
          }
        },

        /**
         * @api private
         */
        getTaggingHeader: function getTaggingHeader() {
          var kvPairStrings = [];

          for (var i = 0; i < this.tags.length; i++) {
            kvPairStrings.push(AWS.util.uriEscape(this.tags[i].Key) + '=' + AWS.util.uriEscape(this.tags[i].Value));
          }

          return kvPairStrings.join('&');
        },

        /**
         * @api private
         */
        uploadPart: function uploadPart(chunk, partNumber) {
          var self = this;
          var partParams = {
            Body: chunk,
            ContentLength: AWS.util.string.byteLength(chunk),
            PartNumber: partNumber
          };
          var partInfo = {
            ETag: null,
            PartNumber: partNumber
          };
          self.completeInfo[partNumber] = partInfo;
          var req = self.service.uploadPart(partParams);
          self.parts[partNumber] = req;
          req._lastUploadedBytes = 0;
          req._managedUpload = self;
          req.on('httpUploadProgress', self.progress);
          req.send(function (err, data) {
            delete self.parts[partParams.PartNumber];
            self.activeParts--;

            if (!err && (!data || !data.ETag)) {
              var message = 'No access to ETag property on response.';

              if (AWS.util.isBrowser()) {
                message += ' Check CORS configuration to expose ETag header.';
              }

              err = AWS.util.error(new Error(message), {
                code: 'ETagMissing',
                retryable: false
              });
            }

            if (err) return self.cleanup(err); //prevent sending part being returned twice (https://github.com/aws/aws-sdk-js/issues/2304)

            if (self.completeInfo[partNumber] && self.completeInfo[partNumber].ETag !== null) return null;
            partInfo.ETag = data.ETag;
            self.doneParts++;

            if (self.isDoneChunking && self.doneParts === self.numParts) {
              self.finishMultiPart();
            } else {
              self.fillQueue.call(self);
            }
          });
        },

        /**
         * @api private
         */
        queueChunks: function queueChunks(chunk, partNumber) {
          var self = this;
          self.multipartReq.on('success', function () {
            self.uploadPart(chunk, partNumber);
          });
        },

        /**
         * @api private
         */
        cleanup: function cleanup(err) {
          var self = this;
          if (self.failed) return; // clean up stream

          if (typeof self.body.removeAllListeners === 'function' && typeof self.body.resume === 'function') {
            self.body.removeAllListeners('readable');
            self.body.removeAllListeners('end');
            self.body.resume();
          } // cleanup multipartReq listeners


          if (self.multipartReq) {
            self.multipartReq.removeAllListeners('success');
            self.multipartReq.removeAllListeners('error');
            self.multipartReq.removeAllListeners('complete');
            delete self.multipartReq;
          }

          if (self.service.config.params.UploadId && !self.leavePartsOnError) {
            self.service.abortMultipartUpload().send();
          } else if (self.leavePartsOnError) {
            self.isDoneChunking = false;
          }

          AWS.util.each(self.parts, function (partNumber, part) {
            part.removeAllListeners('complete');
            part.abort();
          });
          self.activeParts = 0;
          self.partPos = 0;
          self.numParts = 0;
          self.totalPartNumbers = 0;
          self.parts = {};
          self.failed = true;
          self.callback(err);
        },

        /**
         * @api private
         */
        finishMultiPart: function finishMultiPart() {
          var self = this;
          var completeParams = {
            MultipartUpload: {
              Parts: self.completeInfo.slice(1)
            }
          };
          self.service.completeMultipartUpload(completeParams, function (err, data) {
            if (err) {
              return self.cleanup(err);
            }

            if (data && typeof data.Location === 'string') {
              data.Location = data.Location.replace(/%2F/g, '/');
            }

            if (Array.isArray(self.tags)) {
              for (var i = 0; i < self.tags.length; i++) {
                self.tags[i].Value = String(self.tags[i].Value);
              }

              self.service.putObjectTagging({
                Tagging: {
                  TagSet: self.tags
                }
              }, function (e, d) {
                if (e) {
                  self.callback(e);
                } else {
                  self.callback(e, data);
                }
              });
            } else {
              self.callback(err, data);
            }
          });
        },

        /**
         * @api private
         */
        finishSinglePart: function finishSinglePart(err, data) {
          var upload = this.request._managedUpload;
          var httpReq = this.request.httpRequest;
          var endpoint = httpReq.endpoint;
          if (err) return upload.callback(err);
          data.Location = [endpoint.protocol, '//', endpoint.host, httpReq.path].join('');
          data.key = this.request.params.Key; // will stay undocumented

          data.Key = this.request.params.Key;
          data.Bucket = this.request.params.Bucket;
          upload.callback(err, data);
        },

        /**
         * @api private
         */
        progress: function progress(info) {
          var upload = this._managedUpload;

          if (this.operation === 'putObject') {
            info.part = 1;
            info.key = this.params.Key;
          } else {
            upload.totalUploadedBytes += info.loaded - this._lastUploadedBytes;
            this._lastUploadedBytes = info.loaded;
            info = {
              loaded: upload.totalUploadedBytes,
              total: upload.totalBytes,
              part: this.params.PartNumber,
              key: this.params.Key
            };
          }

          upload.emit('httpUploadProgress', [info]);
        }
      });
      AWS.util.mixin(AWS.S3.ManagedUpload, AWS.SequentialExecutor);
      /**
       * @api private
       */

      AWS.S3.ManagedUpload.addPromisesToClass = function addPromisesToClass(PromiseDependency) {
        this.prototype.promise = AWS.util.promisifyMethod('send', PromiseDependency);
      };
      /**
       * @api private
       */


      AWS.S3.ManagedUpload.deletePromisesFromClass = function deletePromisesFromClass() {
        delete this.prototype.promise;
      };

      AWS.util.addPromises(AWS.S3.ManagedUpload);
      /**
       * @api private
       */

      module.exports = AWS.S3.ManagedUpload;
      /***/
    },

    /***/
    "syX2":
    /*!**********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/timeoutWith.js ***!
      \**********************************************************************/

    /*! exports provided: timeoutWith */

    /***/
    function syX2(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "timeoutWith", function () {
        return timeoutWith;
      });
      /* harmony import */


      var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../scheduler/async */
      "D0XW");
      /* harmony import */


      var _util_isDate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/isDate */
      "mlxB");
      /* harmony import */


      var _innerSubscribe__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../innerSubscribe */
      "zx2A");

      function timeoutWith(due, withObservable) {
        var scheduler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"];
        return function (source) {
          var absoluteTimeout = Object(_util_isDate__WEBPACK_IMPORTED_MODULE_1__["isDate"])(due);
          var waitFor = absoluteTimeout ? +due - scheduler.now() : Math.abs(due);
          return source.lift(new TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler));
        };
      }

      var TimeoutWithOperator = /*#__PURE__*/function () {
        function TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler) {
          _classCallCheck2(this, TimeoutWithOperator);

          this.waitFor = waitFor;
          this.absoluteTimeout = absoluteTimeout;
          this.withObservable = withObservable;
          this.scheduler = scheduler;
        }

        _createClass2(TimeoutWithOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new TimeoutWithSubscriber(subscriber, this.absoluteTimeout, this.waitFor, this.withObservable, this.scheduler));
          }
        }]);

        return TimeoutWithOperator;
      }();

      var TimeoutWithSubscriber = /*#__PURE__*/function (_innerSubscribe__WEBP17) {
        _inherits2(TimeoutWithSubscriber, _innerSubscribe__WEBP17);

        var _super369 = _createSuper(TimeoutWithSubscriber);

        function TimeoutWithSubscriber(destination, absoluteTimeout, waitFor, withObservable, scheduler) {
          var _this878;

          _classCallCheck2(this, TimeoutWithSubscriber);

          _this878 = _super369.call(this, destination);
          _this878.absoluteTimeout = absoluteTimeout;
          _this878.waitFor = waitFor;
          _this878.withObservable = withObservable;
          _this878.scheduler = scheduler;

          _this878.scheduleTimeout();

          return _this878;
        }

        _createClass2(TimeoutWithSubscriber, [{
          key: "scheduleTimeout",
          value: function scheduleTimeout() {
            var action = this.action;

            if (action) {
              this.action = action.schedule(this, this.waitFor);
            } else {
              this.add(this.action = this.scheduler.schedule(TimeoutWithSubscriber.dispatchTimeout, this.waitFor, this));
            }
          }
        }, {
          key: "_next",
          value: function _next(value) {
            if (!this.absoluteTimeout) {
              this.scheduleTimeout();
            }

            _get2(_getPrototypeOf2(TimeoutWithSubscriber.prototype), "_next", this).call(this, value);
          }
        }, {
          key: "_unsubscribe",
          value: function _unsubscribe() {
            this.action = undefined;
            this.scheduler = null;
            this.withObservable = null;
          }
        }], [{
          key: "dispatchTimeout",
          value: function dispatchTimeout(subscriber) {
            var withObservable = subscriber.withObservable;

            subscriber._unsubscribeAndRecycle();

            subscriber.add(Object(_innerSubscribe__WEBPACK_IMPORTED_MODULE_2__["innerSubscribe"])(withObservable, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_2__["SimpleInnerSubscriber"](subscriber)));
          }
        }]);

        return TimeoutWithSubscriber;
      }(_innerSubscribe__WEBPACK_IMPORTED_MODULE_2__["SimpleOuterSubscriber"]); //# sourceMappingURL=timeoutWith.js.map

      /***/

    },

    /***/
    "t+mt":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/en-sg.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function tMt(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : English (Singapore) [en-sg]
      //! author : Matthew Castrillon-Madrigal : https://github.com/techdimension
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var enSg = moment.defineLocale('en-sg', {
          months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
          monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
          weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
          weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
          weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years'
          },
          dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
          ordinal: function ordinal(number) {
            var b = number % 10,
                output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';
            return number + output;
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return enSg;
      });
      /***/

    },

    /***/
    "t6tr":
    /*!*****************************************************!*\
      !*** ./node_modules/aws-sdk/lib/event_listeners.js ***!
      \*****************************************************/

    /*! no static exports found */

    /***/
    function t6tr(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ./core */
      "QsWE");

      var SequentialExecutor = __webpack_require__(
      /*! ./sequential_executor */
      "eLAQ");

      var DISCOVER_ENDPOINT = __webpack_require__(
      /*! ./discover_endpoint */
      "VT+K").discoverEndpoint;
      /**
       * The namespace used to register global event listeners for request building
       * and sending.
       */


      AWS.EventListeners = {
        /**
         * @!attribute VALIDATE_CREDENTIALS
         *   A request listener that validates whether the request is being
         *   sent with credentials.
         *   Handles the {AWS.Request~validate 'validate' Request event}
         *   @example Sending a request without validating credentials
         *     var listener = AWS.EventListeners.Core.VALIDATE_CREDENTIALS;
         *     request.removeListener('validate', listener);
         *   @readonly
         *   @return [Function]
         * @!attribute VALIDATE_REGION
         *   A request listener that validates whether the region is set
         *   for a request.
         *   Handles the {AWS.Request~validate 'validate' Request event}
         *   @example Sending a request without validating region configuration
         *     var listener = AWS.EventListeners.Core.VALIDATE_REGION;
         *     request.removeListener('validate', listener);
         *   @readonly
         *   @return [Function]
         * @!attribute VALIDATE_PARAMETERS
         *   A request listener that validates input parameters in a request.
         *   Handles the {AWS.Request~validate 'validate' Request event}
         *   @example Sending a request without validating parameters
         *     var listener = AWS.EventListeners.Core.VALIDATE_PARAMETERS;
         *     request.removeListener('validate', listener);
         *   @example Disable parameter validation globally
         *     AWS.EventListeners.Core.removeListener('validate',
         *       AWS.EventListeners.Core.VALIDATE_REGION);
         *   @readonly
         *   @return [Function]
         * @!attribute SEND
         *   A request listener that initiates the HTTP connection for a
         *   request being sent. Handles the {AWS.Request~send 'send' Request event}
         *   @example Replacing the HTTP handler
         *     var listener = AWS.EventListeners.Core.SEND;
         *     request.removeListener('send', listener);
         *     request.on('send', function(response) {
         *       customHandler.send(response);
         *     });
         *   @return [Function]
         *   @readonly
         * @!attribute HTTP_DATA
         *   A request listener that reads data from the HTTP connection in order
         *   to build the response data.
         *   Handles the {AWS.Request~httpData 'httpData' Request event}.
         *   Remove this handler if you are overriding the 'httpData' event and
         *   do not want extra data processing and buffering overhead.
         *   @example Disabling default data processing
         *     var listener = AWS.EventListeners.Core.HTTP_DATA;
         *     request.removeListener('httpData', listener);
         *   @return [Function]
         *   @readonly
         */
        Core: {}
        /* doc hack */

      };
      /**
       * @api private
       */

      function getOperationAuthtype(req) {
        if (!req.service.api.operations) {
          return '';
        }

        var operation = req.service.api.operations[req.operation];
        return operation ? operation.authtype : '';
      }

      AWS.EventListeners = {
        Core: new SequentialExecutor().addNamedListeners(function (add, addAsync) {
          addAsync('VALIDATE_CREDENTIALS', 'validate', function VALIDATE_CREDENTIALS(req, done) {
            if (!req.service.api.signatureVersion && !req.service.config.signatureVersion) return done(); // none

            req.service.config.getCredentials(function (err) {
              if (err) {
                req.response.error = AWS.util.error(err, {
                  code: 'CredentialsError',
                  message: 'Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1'
                });
              }

              done();
            });
          });
          add('VALIDATE_REGION', 'validate', function VALIDATE_REGION(req) {
            if (!req.service.isGlobalEndpoint) {
              var dnsHostRegex = new RegExp(/^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])$/);

              if (!req.service.config.region) {
                req.response.error = AWS.util.error(new Error(), {
                  code: 'ConfigError',
                  message: 'Missing region in config'
                });
              } else if (!dnsHostRegex.test(req.service.config.region)) {
                req.response.error = AWS.util.error(new Error(), {
                  code: 'ConfigError',
                  message: 'Invalid region in config'
                });
              }
            }
          });
          add('BUILD_IDEMPOTENCY_TOKENS', 'validate', function BUILD_IDEMPOTENCY_TOKENS(req) {
            if (!req.service.api.operations) {
              return;
            }

            var operation = req.service.api.operations[req.operation];

            if (!operation) {
              return;
            }

            var idempotentMembers = operation.idempotentMembers;

            if (!idempotentMembers.length) {
              return;
            } // creates a copy of params so user's param object isn't mutated


            var params = AWS.util.copy(req.params);

            for (var i = 0, iLen = idempotentMembers.length; i < iLen; i++) {
              if (!params[idempotentMembers[i]]) {
                // add the member
                params[idempotentMembers[i]] = AWS.util.uuid.v4();
              }
            }

            req.params = params;
          });
          add('VALIDATE_PARAMETERS', 'validate', function VALIDATE_PARAMETERS(req) {
            if (!req.service.api.operations) {
              return;
            }

            var rules = req.service.api.operations[req.operation].input;
            var validation = req.service.config.paramValidation;
            new AWS.ParamValidator(validation).validate(rules, req.params);
          });
          addAsync('COMPUTE_SHA256', 'afterBuild', function COMPUTE_SHA256(req, done) {
            req.haltHandlersOnError();

            if (!req.service.api.operations) {
              return;
            }

            var operation = req.service.api.operations[req.operation];
            var authtype = operation ? operation.authtype : '';
            if (!req.service.api.signatureVersion && !authtype && !req.service.config.signatureVersion) return done(); // none

            if (req.service.getSignerClass(req) === AWS.Signers.V4) {
              var body = req.httpRequest.body || '';

              if (authtype.indexOf('unsigned-body') >= 0) {
                req.httpRequest.headers['X-Amz-Content-Sha256'] = 'UNSIGNED-PAYLOAD';
                return done();
              }

              AWS.util.computeSha256(body, function (err, sha) {
                if (err) {
                  done(err);
                } else {
                  req.httpRequest.headers['X-Amz-Content-Sha256'] = sha;
                  done();
                }
              });
            } else {
              done();
            }
          });
          add('SET_CONTENT_LENGTH', 'afterBuild', function SET_CONTENT_LENGTH(req) {
            var authtype = getOperationAuthtype(req);
            var payloadMember = AWS.util.getRequestPayloadShape(req);

            if (req.httpRequest.headers['Content-Length'] === undefined) {
              try {
                var length = AWS.util.string.byteLength(req.httpRequest.body);
                req.httpRequest.headers['Content-Length'] = length;
              } catch (err) {
                if (payloadMember && payloadMember.isStreaming) {
                  if (payloadMember.requiresLength) {
                    //streaming payload requires length(s3, glacier)
                    throw err;
                  } else if (authtype.indexOf('unsigned-body') >= 0) {
                    //unbounded streaming payload(lex, mediastore)
                    req.httpRequest.headers['Transfer-Encoding'] = 'chunked';
                    return;
                  } else {
                    throw err;
                  }
                }

                throw err;
              }
            }
          });
          add('SET_HTTP_HOST', 'afterBuild', function SET_HTTP_HOST(req) {
            req.httpRequest.headers['Host'] = req.httpRequest.endpoint.host;
          });
          add('RESTART', 'restart', function RESTART() {
            var err = this.response.error;
            if (!err || !err.retryable) return;
            this.httpRequest = new AWS.HttpRequest(this.service.endpoint, this.service.region);

            if (this.response.retryCount < this.service.config.maxRetries) {
              this.response.retryCount++;
            } else {
              this.response.error = null;
            }
          });
          var addToHead = true;
          addAsync('DISCOVER_ENDPOINT', 'sign', DISCOVER_ENDPOINT, addToHead);
          addAsync('SIGN', 'sign', function SIGN(req, done) {
            var service = req.service;
            var operations = req.service.api.operations || {};
            var operation = operations[req.operation];
            var authtype = operation ? operation.authtype : '';
            if (!service.api.signatureVersion && !authtype && !service.config.signatureVersion) return done(); // none

            service.config.getCredentials(function (err, credentials) {
              if (err) {
                req.response.error = err;
                return done();
              }

              try {
                var date = service.getSkewCorrectedDate();
                var SignerClass = service.getSignerClass(req);
                var signer = new SignerClass(req.httpRequest, service.getSigningName(), {
                  signatureCache: service.config.signatureCache,
                  operation: operation,
                  signatureVersion: service.api.signatureVersion
                });
                signer.setServiceClientId(service._clientId); // clear old authorization headers

                delete req.httpRequest.headers['Authorization'];
                delete req.httpRequest.headers['Date'];
                delete req.httpRequest.headers['X-Amz-Date']; // add new authorization

                signer.addAuthorization(credentials, date);
                req.signedAt = date;
              } catch (e) {
                req.response.error = e;
              }

              done();
            });
          });
          add('VALIDATE_RESPONSE', 'validateResponse', function VALIDATE_RESPONSE(resp) {
            if (this.service.successfulResponse(resp, this)) {
              resp.data = {};
              resp.error = null;
            } else {
              resp.data = null;
              resp.error = AWS.util.error(new Error(), {
                code: 'UnknownError',
                message: 'An unknown error occurred.'
              });
            }
          });
          addAsync('SEND', 'send', function SEND(resp, done) {
            resp.httpResponse._abortCallback = done;
            resp.error = null;
            resp.data = null;

            function callback(httpResp) {
              resp.httpResponse.stream = httpResp;
              var stream = resp.request.httpRequest.stream;
              var service = resp.request.service;
              var api = service.api;
              var operationName = resp.request.operation;
              var operation = api.operations[operationName] || {};
              httpResp.on('headers', function onHeaders(statusCode, headers, statusMessage) {
                resp.request.emit('httpHeaders', [statusCode, headers, resp, statusMessage]);

                if (!resp.httpResponse.streaming) {
                  if (AWS.HttpClient.streamsApiVersion === 2) {
                    // streams2 API check
                    // if we detect event streams, we're going to have to
                    // return the stream immediately
                    if (operation.hasEventOutput && service.successfulResponse(resp)) {
                      // skip reading the IncomingStream
                      resp.request.emit('httpDone');
                      done();
                      return;
                    }

                    httpResp.on('readable', function onReadable() {
                      var data = httpResp.read();

                      if (data !== null) {
                        resp.request.emit('httpData', [data, resp]);
                      }
                    });
                  } else {
                    // legacy streams API
                    httpResp.on('data', function onData(data) {
                      resp.request.emit('httpData', [data, resp]);
                    });
                  }
                }
              });
              httpResp.on('end', function onEnd() {
                if (!stream || !stream.didCallback) {
                  if (AWS.HttpClient.streamsApiVersion === 2 && operation.hasEventOutput && service.successfulResponse(resp)) {
                    // don't concatenate response chunks when streaming event stream data when response is successful
                    return;
                  }

                  resp.request.emit('httpDone');
                  done();
                }
              });
            }

            function progress(httpResp) {
              httpResp.on('sendProgress', function onSendProgress(value) {
                resp.request.emit('httpUploadProgress', [value, resp]);
              });
              httpResp.on('receiveProgress', function onReceiveProgress(value) {
                resp.request.emit('httpDownloadProgress', [value, resp]);
              });
            }

            function error(err) {
              if (err.code !== 'RequestAbortedError') {
                var errCode = err.code === 'TimeoutError' ? err.code : 'NetworkingError';
                err = AWS.util.error(err, {
                  code: errCode,
                  region: resp.request.httpRequest.region,
                  hostname: resp.request.httpRequest.endpoint.hostname,
                  retryable: true
                });
              }

              resp.error = err;
              resp.request.emit('httpError', [resp.error, resp], function () {
                done();
              });
            }

            function executeSend() {
              var http = AWS.HttpClient.getInstance();
              var httpOptions = resp.request.service.config.httpOptions || {};

              try {
                var stream = http.handleRequest(resp.request.httpRequest, httpOptions, callback, error);
                progress(stream);
              } catch (err) {
                error(err);
              }
            }

            var timeDiff = (resp.request.service.getSkewCorrectedDate() - this.signedAt) / 1000;

            if (timeDiff >= 60 * 10) {
              // if we signed 10min ago, re-sign
              this.emit('sign', [this], function (err) {
                if (err) done(err);else executeSend();
              });
            } else {
              executeSend();
            }
          });
          add('HTTP_HEADERS', 'httpHeaders', function HTTP_HEADERS(statusCode, headers, resp, statusMessage) {
            resp.httpResponse.statusCode = statusCode;
            resp.httpResponse.statusMessage = statusMessage;
            resp.httpResponse.headers = headers;
            resp.httpResponse.body = AWS.util.buffer.toBuffer('');
            resp.httpResponse.buffers = [];
            resp.httpResponse.numBytes = 0;
            var dateHeader = headers.date || headers.Date;
            var service = resp.request.service;

            if (dateHeader) {
              var serverTime = Date.parse(dateHeader);

              if (service.config.correctClockSkew && service.isClockSkewed(serverTime)) {
                service.applyClockOffset(serverTime);
              }
            }
          });
          add('HTTP_DATA', 'httpData', function HTTP_DATA(chunk, resp) {
            if (chunk) {
              if (AWS.util.isNode()) {
                resp.httpResponse.numBytes += chunk.length;
                var total = resp.httpResponse.headers['content-length'];
                var progress = {
                  loaded: resp.httpResponse.numBytes,
                  total: total
                };
                resp.request.emit('httpDownloadProgress', [progress, resp]);
              }

              resp.httpResponse.buffers.push(AWS.util.buffer.toBuffer(chunk));
            }
          });
          add('HTTP_DONE', 'httpDone', function HTTP_DONE(resp) {
            // convert buffers array into single buffer
            if (resp.httpResponse.buffers && resp.httpResponse.buffers.length > 0) {
              var body = AWS.util.buffer.concat(resp.httpResponse.buffers);
              resp.httpResponse.body = body;
            }

            delete resp.httpResponse.numBytes;
            delete resp.httpResponse.buffers;
          });
          add('FINALIZE_ERROR', 'retry', function FINALIZE_ERROR(resp) {
            if (resp.httpResponse.statusCode) {
              resp.error.statusCode = resp.httpResponse.statusCode;

              if (resp.error.retryable === undefined) {
                resp.error.retryable = this.service.retryableError(resp.error, this);
              }
            }
          });
          add('INVALIDATE_CREDENTIALS', 'retry', function INVALIDATE_CREDENTIALS(resp) {
            if (!resp.error) return;

            switch (resp.error.code) {
              case 'RequestExpired': // EC2 only

              case 'ExpiredTokenException':
              case 'ExpiredToken':
                resp.error.retryable = true;
                resp.request.service.config.credentials.expired = true;
            }
          });
          add('EXPIRED_SIGNATURE', 'retry', function EXPIRED_SIGNATURE(resp) {
            var err = resp.error;
            if (!err) return;

            if (typeof err.code === 'string' && typeof err.message === 'string') {
              if (err.code.match(/Signature/) && err.message.match(/expired/)) {
                resp.error.retryable = true;
              }
            }
          });
          add('CLOCK_SKEWED', 'retry', function CLOCK_SKEWED(resp) {
            if (!resp.error) return;

            if (this.service.clockSkewError(resp.error) && this.service.config.correctClockSkew) {
              resp.error.retryable = true;
            }
          });
          add('REDIRECT', 'retry', function REDIRECT(resp) {
            if (resp.error && resp.error.statusCode >= 300 && resp.error.statusCode < 400 && resp.httpResponse.headers['location']) {
              this.httpRequest.endpoint = new AWS.Endpoint(resp.httpResponse.headers['location']);
              this.httpRequest.headers['Host'] = this.httpRequest.endpoint.host;
              resp.error.redirect = true;
              resp.error.retryable = true;
            }
          });
          add('RETRY_CHECK', 'retry', function RETRY_CHECK(resp) {
            if (resp.error) {
              if (resp.error.redirect && resp.redirectCount < resp.maxRedirects) {
                resp.error.retryDelay = 0;
              } else if (resp.retryCount < resp.maxRetries) {
                resp.error.retryDelay = this.service.retryDelays(resp.retryCount, resp.error) || 0;
              }
            }
          });
          addAsync('RESET_RETRY_STATE', 'afterRetry', function RESET_RETRY_STATE(resp, done) {
            var delay,
                willRetry = false;

            if (resp.error) {
              delay = resp.error.retryDelay || 0;

              if (resp.error.retryable && resp.retryCount < resp.maxRetries) {
                resp.retryCount++;
                willRetry = true;
              } else if (resp.error.redirect && resp.redirectCount < resp.maxRedirects) {
                resp.redirectCount++;
                willRetry = true;
              }
            } // delay < 0 is a signal from customBackoff to skip retries


            if (willRetry && delay >= 0) {
              resp.error = null;
              setTimeout(done, delay);
            } else {
              done();
            }
          });
        }),
        CorePost: new SequentialExecutor().addNamedListeners(function (add) {
          add('EXTRACT_REQUEST_ID', 'extractData', AWS.util.extractRequestId);
          add('EXTRACT_REQUEST_ID', 'extractError', AWS.util.extractRequestId);
          add('ENOTFOUND_ERROR', 'httpError', function ENOTFOUND_ERROR(err) {
            function isDNSError(err) {
              return err.errno === 'ENOTFOUND' || typeof err.errno === 'number' && typeof AWS.util.getSystemErrorName === 'function' && ['EAI_NONAME', 'EAI_NODATA'].indexOf(AWS.util.getSystemErrorName(err.errno) >= 0);
            }

            if (err.code === 'NetworkingError' && isDNSError(err)) {
              var message = 'Inaccessible host: `' + err.hostname + '\'. This service may not be available in the `' + err.region + '\' region.';
              this.response.error = AWS.util.error(new Error(message), {
                code: 'UnknownEndpoint',
                region: err.region,
                hostname: err.hostname,
                retryable: true,
                originalError: err
              });
            }
          });
        }),
        Logger: new SequentialExecutor().addNamedListeners(function (add) {
          add('LOG_REQUEST', 'complete', function LOG_REQUEST(resp) {
            var req = resp.request;
            var logger = req.service.config.logger;
            if (!logger) return;

            function filterSensitiveLog(inputShape, shape) {
              if (!shape) {
                return shape;
              }

              if (inputShape.isSensitive) {
                return '***SensitiveInformation***';
              }

              switch (inputShape.type) {
                case 'structure':
                  var struct = {};
                  AWS.util.each(shape, function (subShapeName, subShape) {
                    if (Object.prototype.hasOwnProperty.call(inputShape.members, subShapeName)) {
                      struct[subShapeName] = filterSensitiveLog(inputShape.members[subShapeName], subShape);
                    } else {
                      struct[subShapeName] = subShape;
                    }
                  });
                  return struct;

                case 'list':
                  var list = [];
                  AWS.util.arrayEach(shape, function (subShape, index) {
                    list.push(filterSensitiveLog(inputShape.member, subShape));
                  });
                  return list;

                case 'map':
                  var map = {};
                  AWS.util.each(shape, function (key, value) {
                    map[key] = filterSensitiveLog(inputShape.value, value);
                  });
                  return map;

                default:
                  return shape;
              }
            }

            function buildMessage() {
              var time = resp.request.service.getSkewCorrectedDate().getTime();
              var delta = (time - req.startTime.getTime()) / 1000;
              var ansi = logger.isTTY ? true : false;
              var status = resp.httpResponse.statusCode;
              var censoredParams = req.params;

              if (req.service.api.operations && req.service.api.operations[req.operation] && req.service.api.operations[req.operation].input) {
                var inputShape = req.service.api.operations[req.operation].input;
                censoredParams = filterSensitiveLog(inputShape, req.params);
              }

              var params = __webpack_require__(
              /*! util */
              "MCLT").inspect(censoredParams, true, null);

              var message = '';
              if (ansi) message += '\x1B[33m';
              message += '[AWS ' + req.service.serviceIdentifier + ' ' + status;
              message += ' ' + delta.toString() + 's ' + resp.retryCount + ' retries]';
              if (ansi) message += '\x1B[0;1m';
              message += ' ' + AWS.util.string.lowerFirst(req.operation);
              message += '(' + params + ')';
              if (ansi) message += '\x1B[0m';
              return message;
            }

            var line = buildMessage();

            if (typeof logger.log === 'function') {
              logger.log(line);
            } else if (typeof logger.write === 'function') {
              logger.write(line + '\n');
            }
          });
        }),
        Json: new SequentialExecutor().addNamedListeners(function (add) {
          var svc = __webpack_require__(
          /*! ./protocol/json */
          "BGYI");

          add('BUILD', 'build', svc.buildRequest);
          add('EXTRACT_DATA', 'extractData', svc.extractData);
          add('EXTRACT_ERROR', 'extractError', svc.extractError);
        }),
        Rest: new SequentialExecutor().addNamedListeners(function (add) {
          var svc = __webpack_require__(
          /*! ./protocol/rest */
          "KFai");

          add('BUILD', 'build', svc.buildRequest);
          add('EXTRACT_DATA', 'extractData', svc.extractData);
          add('EXTRACT_ERROR', 'extractError', svc.extractError);
        }),
        RestJson: new SequentialExecutor().addNamedListeners(function (add) {
          var svc = __webpack_require__(
          /*! ./protocol/rest_json */
          "9Gqe");

          add('BUILD', 'build', svc.buildRequest);
          add('EXTRACT_DATA', 'extractData', svc.extractData);
          add('EXTRACT_ERROR', 'extractError', svc.extractError);
        }),
        RestXml: new SequentialExecutor().addNamedListeners(function (add) {
          var svc = __webpack_require__(
          /*! ./protocol/rest_xml */
          "eFjS");

          add('BUILD', 'build', svc.buildRequest);
          add('EXTRACT_DATA', 'extractData', svc.extractData);
          add('EXTRACT_ERROR', 'extractError', svc.extractError);
        }),
        Query: new SequentialExecutor().addNamedListeners(function (add) {
          var svc = __webpack_require__(
          /*! ./protocol/query */
          "zfQR");

          add('BUILD', 'build', svc.buildRequest);
          add('EXTRACT_DATA', 'extractData', svc.extractData);
          add('EXTRACT_ERROR', 'extractError', svc.extractError);
        })
      };
      /***/
    },

    /***/
    "t9l1":
    /*!***************************************************************************!*\
      !*** ./node_modules/@angular/animations/__ivy_ngcc__/fesm2015/browser.js ***!
      \***************************************************************************/

    /*! exports provided: AnimationDriver, ɵAnimation, ɵAnimationEngine, ɵAnimationStyleNormalizer, ɵCssKeyframesDriver, ɵCssKeyframesPlayer, ɵNoopAnimationDriver, ɵNoopAnimationStyleNormalizer, ɵWebAnimationsDriver, ɵWebAnimationsPlayer, ɵWebAnimationsStyleNormalizer, ɵallowPreviousPlayerStylesMerge, ɵangular_packages_animations_browser_browser_a, ɵcontainsElement, ɵinvokeQuery, ɵmatchesElement, ɵsupportsWebAnimations, ɵvalidateStyleProperty */

    /***/
    function t9l1(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AnimationDriver", function () {
        return AnimationDriver;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵAnimation", function () {
        return Animation;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵAnimationEngine", function () {
        return AnimationEngine;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵAnimationStyleNormalizer", function () {
        return AnimationStyleNormalizer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵCssKeyframesDriver", function () {
        return CssKeyframesDriver;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵCssKeyframesPlayer", function () {
        return CssKeyframesPlayer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵNoopAnimationDriver", function () {
        return NoopAnimationDriver;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵNoopAnimationStyleNormalizer", function () {
        return NoopAnimationStyleNormalizer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵWebAnimationsDriver", function () {
        return WebAnimationsDriver;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵWebAnimationsPlayer", function () {
        return WebAnimationsPlayer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵWebAnimationsStyleNormalizer", function () {
        return WebAnimationsStyleNormalizer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵallowPreviousPlayerStylesMerge", function () {
        return allowPreviousPlayerStylesMerge;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_animations_browser_browser_a", function () {
        return SpecialCasedStyles;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵcontainsElement", function () {
        return _containsElement;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵinvokeQuery", function () {
        return invokeQuery;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵmatchesElement", function () {
        return _matchesElement;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵsupportsWebAnimations", function () {
        return supportsWebAnimations;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵvalidateStyleProperty", function () {
        return _validateStyleProperty;
      });
      /* harmony import */


      var _angular_animations__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/animations */
      "R0Ic");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /**
       * @license Angular v12.0.0-next.1
       * (c) 2010-2020 Google LLC. https://angular.io/
       * License: MIT
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function isBrowser() {
        return typeof window !== 'undefined' && typeof window.document !== 'undefined';
      }

      function isNode() {
        // Checking only for `process` isn't enough to identify whether or not we're in a Node
        // environment, because Webpack by default will polyfill the `process`. While we can discern
        // that Webpack polyfilled it by looking at `process.browser`, it's very Webpack-specific and
        // might not be future-proof. Instead we look at the stringified version of `process` which
        // is `[object process]` in Node and `[object Object]` when polyfilled.
        return typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';
      }

      function optimizeGroupPlayer(players) {
        switch (players.length) {
          case 0:
            return new _angular_animations__WEBPACK_IMPORTED_MODULE_0__["NoopAnimationPlayer"]();

          case 1:
            return players[0];

          default:
            return new _angular_animations__WEBPACK_IMPORTED_MODULE_0__["ɵAnimationGroupPlayer"](players);
        }
      }

      function normalizeKeyframes(driver, normalizer, element, keyframes) {
        var preStyles = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
        var postStyles = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
        var errors = [];
        var normalizedKeyframes = [];
        var previousOffset = -1;
        var previousKeyframe = null;
        keyframes.forEach(function (kf) {
          var offset = kf['offset'];
          var isSameOffset = offset == previousOffset;
          var normalizedKeyframe = isSameOffset && previousKeyframe || {};
          Object.keys(kf).forEach(function (prop) {
            var normalizedProp = prop;
            var normalizedValue = kf[prop];

            if (prop !== 'offset') {
              normalizedProp = normalizer.normalizePropertyName(normalizedProp, errors);

              switch (normalizedValue) {
                case _angular_animations__WEBPACK_IMPORTED_MODULE_0__["ɵPRE_STYLE"]:
                  normalizedValue = preStyles[prop];
                  break;

                case _angular_animations__WEBPACK_IMPORTED_MODULE_0__["AUTO_STYLE"]:
                  normalizedValue = postStyles[prop];
                  break;

                default:
                  normalizedValue = normalizer.normalizeStyleValue(prop, normalizedProp, normalizedValue, errors);
                  break;
              }
            }

            normalizedKeyframe[normalizedProp] = normalizedValue;
          });

          if (!isSameOffset) {
            normalizedKeyframes.push(normalizedKeyframe);
          }

          previousKeyframe = normalizedKeyframe;
          previousOffset = offset;
        });

        if (errors.length) {
          var LINE_START = '\n - ';
          throw new Error("Unable to animate due to the following errors:".concat(LINE_START).concat(errors.join(LINE_START)));
        }

        return normalizedKeyframes;
      }

      function listenOnPlayer(player, eventName, event, callback) {
        switch (eventName) {
          case 'start':
            player.onStart(function () {
              return callback(event && copyAnimationEvent(event, 'start', player));
            });
            break;

          case 'done':
            player.onDone(function () {
              return callback(event && copyAnimationEvent(event, 'done', player));
            });
            break;

          case 'destroy':
            player.onDestroy(function () {
              return callback(event && copyAnimationEvent(event, 'destroy', player));
            });
            break;
        }
      }

      function copyAnimationEvent(e, phaseName, player) {
        var totalTime = player.totalTime;
        var disabled = player.disabled ? true : false;
        var event = makeAnimationEvent(e.element, e.triggerName, e.fromState, e.toState, phaseName || e.phaseName, totalTime == undefined ? e.totalTime : totalTime, disabled);
        var data = e['_data'];

        if (data != null) {
          event['_data'] = data;
        }

        return event;
      }

      function makeAnimationEvent(element, triggerName, fromState, toState) {
        var phaseName = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '';
        var totalTime = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;
        var disabled = arguments.length > 6 ? arguments[6] : undefined;
        return {
          element: element,
          triggerName: triggerName,
          fromState: fromState,
          toState: toState,
          phaseName: phaseName,
          totalTime: totalTime,
          disabled: !!disabled
        };
      }

      function getOrSetAsInMap(map, key, defaultValue) {
        var value;

        if (map instanceof Map) {
          value = map.get(key);

          if (!value) {
            map.set(key, value = defaultValue);
          }
        } else {
          value = map[key];

          if (!value) {
            value = map[key] = defaultValue;
          }
        }

        return value;
      }

      function parseTimelineCommand(command) {
        var separatorPos = command.indexOf(':');
        var id = command.substring(1, separatorPos);
        var action = command.substr(separatorPos + 1);
        return [id, action];
      }

      var _contains = function _contains(elm1, elm2) {
        return false;
      };

      var ɵ0 = _contains;

      var _matches = function _matches(element, selector) {
        return false;
      };

      var ɵ1 = _matches;

      var _query = function _query(element, selector, multi) {
        return [];
      };

      var ɵ2 = _query; // Define utility methods for browsers and platform-server(domino) where Element
      // and utility methods exist.

      var _isNode = isNode();

      if (_isNode || typeof Element !== 'undefined') {
        // this is well supported in all browsers
        _contains = function _contains(elm1, elm2) {
          return elm1.contains(elm2);
        };

        _matches = function () {
          if (_isNode || Element.prototype.matches) {
            return function (element, selector) {
              return element.matches(selector);
            };
          } else {
            var proto = Element.prototype;
            var fn = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector || proto.oMatchesSelector || proto.webkitMatchesSelector;

            if (fn) {
              return function (element, selector) {
                return fn.apply(element, [selector]);
              };
            } else {
              return _matches;
            }
          }
        }();

        _query = function _query(element, selector, multi) {
          var results = [];

          if (multi) {
            // DO NOT REFACTOR TO USE SPREAD SYNTAX.
            // For element queries that return sufficiently large NodeList objects,
            // using spread syntax to populate the results array causes a RangeError
            // due to the call stack limit being reached. `Array.from` can not be used
            // as well, since NodeList is not iterable in IE 11, see
            // https://developer.mozilla.org/en-US/docs/Web/API/NodeList
            // More info is available in #38551.
            var elems = element.querySelectorAll(selector);

            for (var i = 0; i < elems.length; i++) {
              results.push(elems[i]);
            }
          } else {
            var elm = element.querySelector(selector);

            if (elm) {
              results.push(elm);
            }
          }

          return results;
        };
      }

      function containsVendorPrefix(prop) {
        // Webkit is the only real popular vendor prefix nowadays
        // cc: http://shouldiprefix.com/
        return prop.substring(1, 6) == 'ebkit'; // webkit or Webkit
      }

      var _CACHED_BODY = null;
      var _IS_WEBKIT = false;

      function _validateStyleProperty(prop) {
        if (!_CACHED_BODY) {
          _CACHED_BODY = getBodyNode() || {};
          _IS_WEBKIT = _CACHED_BODY.style ? 'WebkitAppearance' in _CACHED_BODY.style : false;
        }

        var result = true;

        if (_CACHED_BODY.style && !containsVendorPrefix(prop)) {
          result = prop in _CACHED_BODY.style;

          if (!result && _IS_WEBKIT) {
            var camelProp = 'Webkit' + prop.charAt(0).toUpperCase() + prop.substr(1);
            result = camelProp in _CACHED_BODY.style;
          }
        }

        return result;
      }

      function getBodyNode() {
        if (typeof document != 'undefined') {
          return document.body;
        }

        return null;
      }

      var _matchesElement = _matches;
      var _containsElement = _contains;
      var invokeQuery = _query;

      function hypenatePropsObject(object) {
        var newObj = {};
        Object.keys(object).forEach(function (prop) {
          var newProp = prop.replace(/([a-z])([A-Z])/g, '$1-$2');
          newObj[newProp] = object[prop];
        });
        return newObj;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @publicApi
       */


      var NoopAnimationDriver = /*#__PURE__*/function () {
        function NoopAnimationDriver() {
          _classCallCheck2(this, NoopAnimationDriver);
        }

        _createClass2(NoopAnimationDriver, [{
          key: "validateStyleProperty",
          value: function validateStyleProperty(prop) {
            return _validateStyleProperty(prop);
          }
        }, {
          key: "matchesElement",
          value: function matchesElement(element, selector) {
            return _matchesElement(element, selector);
          }
        }, {
          key: "containsElement",
          value: function containsElement(elm1, elm2) {
            return _containsElement(elm1, elm2);
          }
        }, {
          key: "query",
          value: function query(element, selector, multi) {
            return invokeQuery(element, selector, multi);
          }
        }, {
          key: "computeStyle",
          value: function computeStyle(element, prop, defaultValue) {
            return defaultValue || '';
          }
        }, {
          key: "animate",
          value: function animate(element, keyframes, duration, delay, easing) {
            var previousPlayers = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];
            var scrubberAccessRequested = arguments.length > 6 ? arguments[6] : undefined;
            return new _angular_animations__WEBPACK_IMPORTED_MODULE_0__["NoopAnimationPlayer"](duration, delay);
          }
        }]);

        return NoopAnimationDriver;
      }();

      NoopAnimationDriver.ɵfac = function NoopAnimationDriver_Factory(t) {
        return new (t || NoopAnimationDriver)();
      };

      NoopAnimationDriver.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({
        token: NoopAnimationDriver,
        factory: NoopAnimationDriver.ɵfac
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](NoopAnimationDriver, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
        }], null, null);
      })();
      /**
       * @publicApi
       */


      var AnimationDriver = function AnimationDriver() {
        _classCallCheck2(this, AnimationDriver);
      };

      AnimationDriver.NOOP = new NoopAnimationDriver();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var ONE_SECOND = 1000;
      var SUBSTITUTION_EXPR_START = '{{';
      var SUBSTITUTION_EXPR_END = '}}';
      var ENTER_CLASSNAME = 'ng-enter';
      var LEAVE_CLASSNAME = 'ng-leave';
      var ENTER_SELECTOR = '.ng-enter';
      var LEAVE_SELECTOR = '.ng-leave';
      var NG_TRIGGER_CLASSNAME = 'ng-trigger';
      var NG_TRIGGER_SELECTOR = '.ng-trigger';
      var NG_ANIMATING_CLASSNAME = 'ng-animating';
      var NG_ANIMATING_SELECTOR = '.ng-animating';

      function resolveTimingValue(value) {
        if (typeof value == 'number') return value;
        var matches = value.match(/^(-?[\.\d]+)(m?s)/);
        if (!matches || matches.length < 2) return 0;
        return _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);
      }

      function _convertTimeValueToMS(value, unit) {
        switch (unit) {
          case 's':
            return value * ONE_SECOND;

          default:
            // ms or something else
            return value;
        }
      }

      function resolveTiming(timings, errors, allowNegativeValues) {
        return timings.hasOwnProperty('duration') ? timings : parseTimeExpression(timings, errors, allowNegativeValues);
      }

      function parseTimeExpression(exp, errors, allowNegativeValues) {
        var regex = /^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i;
        var duration;
        var delay = 0;
        var easing = '';

        if (typeof exp === 'string') {
          var matches = exp.match(regex);

          if (matches === null) {
            errors.push("The provided timing value \"".concat(exp, "\" is invalid."));
            return {
              duration: 0,
              delay: 0,
              easing: ''
            };
          }

          duration = _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);
          var delayMatch = matches[3];

          if (delayMatch != null) {
            delay = _convertTimeValueToMS(parseFloat(delayMatch), matches[4]);
          }

          var easingVal = matches[5];

          if (easingVal) {
            easing = easingVal;
          }
        } else {
          duration = exp;
        }

        if (!allowNegativeValues) {
          var containsErrors = false;
          var startIndex = errors.length;

          if (duration < 0) {
            errors.push("Duration values below 0 are not allowed for this animation step.");
            containsErrors = true;
          }

          if (delay < 0) {
            errors.push("Delay values below 0 are not allowed for this animation step.");
            containsErrors = true;
          }

          if (containsErrors) {
            errors.splice(startIndex, 0, "The provided timing value \"".concat(exp, "\" is invalid."));
          }
        }

        return {
          duration: duration,
          delay: delay,
          easing: easing
        };
      }

      function copyObj(obj) {
        var destination = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
        Object.keys(obj).forEach(function (prop) {
          destination[prop] = obj[prop];
        });
        return destination;
      }

      function normalizeStyles(styles) {
        var normalizedStyles = {};

        if (Array.isArray(styles)) {
          styles.forEach(function (data) {
            return copyStyles(data, false, normalizedStyles);
          });
        } else {
          copyStyles(styles, false, normalizedStyles);
        }

        return normalizedStyles;
      }

      function copyStyles(styles, readPrototype) {
        var destination = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};

        if (readPrototype) {
          // we make use of a for-in loop so that the
          // prototypically inherited properties are
          // revealed from the backFill map
          for (var prop in styles) {
            destination[prop] = styles[prop];
          }
        } else {
          copyObj(styles, destination);
        }

        return destination;
      }

      function getStyleAttributeString(element, key, value) {
        // Return the key-value pair string to be added to the style attribute for the
        // given CSS style key.
        if (value) {
          return key + ':' + value + ';';
        } else {
          return '';
        }
      }

      function writeStyleAttribute(element) {
        // Read the style property of the element and manually reflect it to the
        // style attribute. This is needed because Domino on platform-server doesn't
        // understand the full set of allowed CSS properties and doesn't reflect some
        // of them automatically.
        var styleAttrValue = '';

        for (var i = 0; i < element.style.length; i++) {
          var key = element.style.item(i);
          styleAttrValue += getStyleAttributeString(element, key, element.style.getPropertyValue(key));
        }

        for (var _key66 in element.style) {
          // Skip internal Domino properties that don't need to be reflected.
          if (!element.style.hasOwnProperty(_key66) || _key66.startsWith('_')) {
            continue;
          }

          var dashKey = camelCaseToDashCase(_key66);
          styleAttrValue += getStyleAttributeString(element, dashKey, element.style[_key66]);
        }

        element.setAttribute('style', styleAttrValue);
      }

      function setStyles(element, styles, formerStyles) {
        if (element['style']) {
          Object.keys(styles).forEach(function (prop) {
            var camelProp = dashCaseToCamelCase(prop);

            if (formerStyles && !formerStyles.hasOwnProperty(prop)) {
              formerStyles[prop] = element.style[camelProp];
            }

            element.style[camelProp] = styles[prop];
          }); // On the server set the 'style' attribute since it's not automatically reflected.

          if (isNode()) {
            writeStyleAttribute(element);
          }
        }
      }

      function eraseStyles(element, styles) {
        if (element['style']) {
          Object.keys(styles).forEach(function (prop) {
            var camelProp = dashCaseToCamelCase(prop);
            element.style[camelProp] = '';
          }); // On the server set the 'style' attribute since it's not automatically reflected.

          if (isNode()) {
            writeStyleAttribute(element);
          }
        }
      }

      function normalizeAnimationEntry(steps) {
        if (Array.isArray(steps)) {
          if (steps.length == 1) return steps[0];
          return Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["sequence"])(steps);
        }

        return steps;
      }

      function validateStyleParams(value, options, errors) {
        var params = options.params || {};
        var matches = extractStyleParams(value);

        if (matches.length) {
          matches.forEach(function (varName) {
            if (!params.hasOwnProperty(varName)) {
              errors.push("Unable to resolve the local animation param ".concat(varName, " in the given list of values"));
            }
          });
        }
      }

      var PARAM_REGEX = new RegExp("".concat(SUBSTITUTION_EXPR_START, "\\s*(.+?)\\s*").concat(SUBSTITUTION_EXPR_END), 'g');

      function extractStyleParams(value) {
        var params = [];

        if (typeof value === 'string') {
          var match;

          while (match = PARAM_REGEX.exec(value)) {
            params.push(match[1]);
          }

          PARAM_REGEX.lastIndex = 0;
        }

        return params;
      }

      function interpolateParams(value, params, errors) {
        var original = value.toString();
        var str = original.replace(PARAM_REGEX, function (_, varName) {
          var localVal = params[varName]; // this means that the value was never overridden by the data passed in by the user

          if (!params.hasOwnProperty(varName)) {
            errors.push("Please provide a value for the animation param ".concat(varName));
            localVal = '';
          }

          return localVal.toString();
        }); // we do this to assert that numeric values stay as they are

        return str == original ? value : str;
      }

      function iteratorToArray(iterator) {
        var arr = [];
        var item = iterator.next();

        while (!item.done) {
          arr.push(item.value);
          item = iterator.next();
        }

        return arr;
      }

      var DASH_CASE_REGEXP = /-+([a-z0-9])/g;

      function dashCaseToCamelCase(input) {
        return input.replace(DASH_CASE_REGEXP, function () {
          for (var _len64 = arguments.length, m = new Array(_len64), _key67 = 0; _key67 < _len64; _key67++) {
            m[_key67] = arguments[_key67];
          }

          return m[1].toUpperCase();
        });
      }

      function camelCaseToDashCase(input) {
        return input.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
      }

      function allowPreviousPlayerStylesMerge(duration, delay) {
        return duration === 0 || delay === 0;
      }

      function balancePreviousStylesIntoKeyframes(element, keyframes, previousStyles) {
        var previousStyleProps = Object.keys(previousStyles);

        if (previousStyleProps.length && keyframes.length) {
          var startingKeyframe = keyframes[0];
          var missingStyleProps = [];
          previousStyleProps.forEach(function (prop) {
            if (!startingKeyframe.hasOwnProperty(prop)) {
              missingStyleProps.push(prop);
            }

            startingKeyframe[prop] = previousStyles[prop];
          });

          if (missingStyleProps.length) {
            var _loop13 = function _loop13() {
              var kf = keyframes[i];
              missingStyleProps.forEach(function (prop) {
                kf[prop] = computeStyle(element, prop);
              });
            };

            // tslint:disable-next-line
            for (var i = 1; i < keyframes.length; i++) {
              _loop13();
            }
          }
        }

        return keyframes;
      }

      function visitDslNode(visitor, node, context) {
        switch (node.type) {
          case 7
          /* Trigger */
          :
            return visitor.visitTrigger(node, context);

          case 0
          /* State */
          :
            return visitor.visitState(node, context);

          case 1
          /* Transition */
          :
            return visitor.visitTransition(node, context);

          case 2
          /* Sequence */
          :
            return visitor.visitSequence(node, context);

          case 3
          /* Group */
          :
            return visitor.visitGroup(node, context);

          case 4
          /* Animate */
          :
            return visitor.visitAnimate(node, context);

          case 5
          /* Keyframes */
          :
            return visitor.visitKeyframes(node, context);

          case 6
          /* Style */
          :
            return visitor.visitStyle(node, context);

          case 8
          /* Reference */
          :
            return visitor.visitReference(node, context);

          case 9
          /* AnimateChild */
          :
            return visitor.visitAnimateChild(node, context);

          case 10
          /* AnimateRef */
          :
            return visitor.visitAnimateRef(node, context);

          case 11
          /* Query */
          :
            return visitor.visitQuery(node, context);

          case 12
          /* Stagger */
          :
            return visitor.visitStagger(node, context);

          default:
            throw new Error("Unable to resolve animation metadata node #".concat(node.type));
        }
      }

      function computeStyle(element, prop) {
        return window.getComputedStyle(element)[prop];
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ANY_STATE = '*';

      function parseTransitionExpr(transitionValue, errors) {
        var expressions = [];

        if (typeof transitionValue == 'string') {
          transitionValue.split(/\s*,\s*/).forEach(function (str) {
            return parseInnerTransitionStr(str, expressions, errors);
          });
        } else {
          expressions.push(transitionValue);
        }

        return expressions;
      }

      function parseInnerTransitionStr(eventStr, expressions, errors) {
        if (eventStr[0] == ':') {
          var result = parseAnimationAlias(eventStr, errors);

          if (typeof result == 'function') {
            expressions.push(result);
            return;
          }

          eventStr = result;
        }

        var match = eventStr.match(/^(\*|[-\w]+)\s*(<?[=-]>)\s*(\*|[-\w]+)$/);

        if (match == null || match.length < 4) {
          errors.push("The provided transition expression \"".concat(eventStr, "\" is not supported"));
          return expressions;
        }

        var fromState = match[1];
        var separator = match[2];
        var toState = match[3];
        expressions.push(makeLambdaFromStates(fromState, toState));
        var isFullAnyStateExpr = fromState == ANY_STATE && toState == ANY_STATE;

        if (separator[0] == '<' && !isFullAnyStateExpr) {
          expressions.push(makeLambdaFromStates(toState, fromState));
        }
      }

      function parseAnimationAlias(alias, errors) {
        switch (alias) {
          case ':enter':
            return 'void => *';

          case ':leave':
            return '* => void';

          case ':increment':
            return function (fromState, toState) {
              return parseFloat(toState) > parseFloat(fromState);
            };

          case ':decrement':
            return function (fromState, toState) {
              return parseFloat(toState) < parseFloat(fromState);
            };

          default:
            errors.push("The transition alias value \"".concat(alias, "\" is not supported"));
            return '* => *';
        }
      } // DO NOT REFACTOR ... keep the follow set instantiations
      // with the values intact (closure compiler for some reason
      // removes follow-up lines that add the values outside of
      // the constructor...


      var TRUE_BOOLEAN_VALUES = new Set(['true', '1']);
      var FALSE_BOOLEAN_VALUES = new Set(['false', '0']);

      function makeLambdaFromStates(lhs, rhs) {
        var LHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(lhs) || FALSE_BOOLEAN_VALUES.has(lhs);
        var RHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(rhs) || FALSE_BOOLEAN_VALUES.has(rhs);
        return function (fromState, toState) {
          var lhsMatch = lhs == ANY_STATE || lhs == fromState;
          var rhsMatch = rhs == ANY_STATE || rhs == toState;

          if (!lhsMatch && LHS_MATCH_BOOLEAN && typeof fromState === 'boolean') {
            lhsMatch = fromState ? TRUE_BOOLEAN_VALUES.has(lhs) : FALSE_BOOLEAN_VALUES.has(lhs);
          }

          if (!rhsMatch && RHS_MATCH_BOOLEAN && typeof toState === 'boolean') {
            rhsMatch = toState ? TRUE_BOOLEAN_VALUES.has(rhs) : FALSE_BOOLEAN_VALUES.has(rhs);
          }

          return lhsMatch && rhsMatch;
        };
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var SELF_TOKEN = ':self';
      var SELF_TOKEN_REGEX = new RegExp("s*".concat(SELF_TOKEN, "s*,?"), 'g');
      /*
       * [Validation]
       * The visitor code below will traverse the animation AST generated by the animation verb functions
       * (the output is a tree of objects) and attempt to perform a series of validations on the data. The
       * following corner-cases will be validated:
       *
       * 1. Overlap of animations
       * Given that a CSS property cannot be animated in more than one place at the same time, it's
       * important that this behavior is detected and validated. The way in which this occurs is that
       * each time a style property is examined, a string-map containing the property will be updated with
       * the start and end times for when the property is used within an animation step.
       *
       * If there are two or more parallel animations that are currently running (these are invoked by the
       * group()) on the same element then the validator will throw an error. Since the start/end timing
       * values are collected for each property then if the current animation step is animating the same
       * property and its timing values fall anywhere into the window of time that the property is
       * currently being animated within then this is what causes an error.
       *
       * 2. Timing values
       * The validator will validate to see if a timing value of `duration delay easing` or
       * `durationNumber` is valid or not.
       *
       * (note that upon validation the code below will replace the timing data with an object containing
       * {duration,delay,easing}.
       *
       * 3. Offset Validation
       * Each of the style() calls are allowed to have an offset value when placed inside of keyframes().
       * Offsets within keyframes() are considered valid when:
       *
       *   - No offsets are used at all
       *   - Each style() entry contains an offset value
       *   - Each offset is between 0 and 1
       *   - Each offset is greater to or equal than the previous one
       *
       * Otherwise an error will be thrown.
       */

      function buildAnimationAst(driver, metadata, errors) {
        return new AnimationAstBuilderVisitor(driver).build(metadata, errors);
      }

      var ROOT_SELECTOR = '';

      var AnimationAstBuilderVisitor = /*#__PURE__*/function () {
        function AnimationAstBuilderVisitor(_driver) {
          _classCallCheck2(this, AnimationAstBuilderVisitor);

          this._driver = _driver;
        }

        _createClass2(AnimationAstBuilderVisitor, [{
          key: "build",
          value: function build(metadata, errors) {
            var context = new AnimationAstBuilderContext(errors);

            this._resetContextStyleTimingState(context);

            return visitDslNode(this, normalizeAnimationEntry(metadata), context);
          }
        }, {
          key: "_resetContextStyleTimingState",
          value: function _resetContextStyleTimingState(context) {
            context.currentQuerySelector = ROOT_SELECTOR;
            context.collectedStyles = {};
            context.collectedStyles[ROOT_SELECTOR] = {};
            context.currentTime = 0;
          }
        }, {
          key: "visitTrigger",
          value: function visitTrigger(metadata, context) {
            var _this879 = this;

            var queryCount = context.queryCount = 0;
            var depCount = context.depCount = 0;
            var states = [];
            var transitions = [];

            if (metadata.name.charAt(0) == '@') {
              context.errors.push('animation triggers cannot be prefixed with an `@` sign (e.g. trigger(\'@foo\', [...]))');
            }

            metadata.definitions.forEach(function (def) {
              _this879._resetContextStyleTimingState(context);

              if (def.type == 0
              /* State */
              ) {
                  var stateDef = def;
                  var name = stateDef.name;
                  name.toString().split(/\s*,\s*/).forEach(function (n) {
                    stateDef.name = n;
                    states.push(_this879.visitState(stateDef, context));
                  });
                  stateDef.name = name;
                } else if (def.type == 1
              /* Transition */
              ) {
                  var transition = _this879.visitTransition(def, context);

                  queryCount += transition.queryCount;
                  depCount += transition.depCount;
                  transitions.push(transition);
                } else {
                context.errors.push('only state() and transition() definitions can sit inside of a trigger()');
              }
            });
            return {
              type: 7
              /* Trigger */
              ,
              name: metadata.name,
              states: states,
              transitions: transitions,
              queryCount: queryCount,
              depCount: depCount,
              options: null
            };
          }
        }, {
          key: "visitState",
          value: function visitState(metadata, context) {
            var styleAst = this.visitStyle(metadata.styles, context);
            var astParams = metadata.options && metadata.options.params || null;

            if (styleAst.containsDynamicStyles) {
              var missingSubs = new Set();
              var params = astParams || {};
              styleAst.styles.forEach(function (value) {
                if (isObject(value)) {
                  var stylesObj = value;
                  Object.keys(stylesObj).forEach(function (prop) {
                    extractStyleParams(stylesObj[prop]).forEach(function (sub) {
                      if (!params.hasOwnProperty(sub)) {
                        missingSubs.add(sub);
                      }
                    });
                  });
                }
              });

              if (missingSubs.size) {
                var missingSubsArr = iteratorToArray(missingSubs.values());
                context.errors.push("state(\"".concat(metadata.name, "\", ...) must define default values for all the following style substitutions: ").concat(missingSubsArr.join(', ')));
              }
            }

            return {
              type: 0
              /* State */
              ,
              name: metadata.name,
              style: styleAst,
              options: astParams ? {
                params: astParams
              } : null
            };
          }
        }, {
          key: "visitTransition",
          value: function visitTransition(metadata, context) {
            context.queryCount = 0;
            context.depCount = 0;
            var animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);
            var matchers = parseTransitionExpr(metadata.expr, context.errors);
            return {
              type: 1
              /* Transition */
              ,
              matchers: matchers,
              animation: animation,
              queryCount: context.queryCount,
              depCount: context.depCount,
              options: normalizeAnimationOptions(metadata.options)
            };
          }
        }, {
          key: "visitSequence",
          value: function visitSequence(metadata, context) {
            var _this880 = this;

            return {
              type: 2
              /* Sequence */
              ,
              steps: metadata.steps.map(function (s) {
                return visitDslNode(_this880, s, context);
              }),
              options: normalizeAnimationOptions(metadata.options)
            };
          }
        }, {
          key: "visitGroup",
          value: function visitGroup(metadata, context) {
            var _this881 = this;

            var currentTime = context.currentTime;
            var furthestTime = 0;
            var steps = metadata.steps.map(function (step) {
              context.currentTime = currentTime;
              var innerAst = visitDslNode(_this881, step, context);
              furthestTime = Math.max(furthestTime, context.currentTime);
              return innerAst;
            });
            context.currentTime = furthestTime;
            return {
              type: 3
              /* Group */
              ,
              steps: steps,
              options: normalizeAnimationOptions(metadata.options)
            };
          }
        }, {
          key: "visitAnimate",
          value: function visitAnimate(metadata, context) {
            var timingAst = constructTimingAst(metadata.timings, context.errors);
            context.currentAnimateTimings = timingAst;
            var styleAst;
            var styleMetadata = metadata.styles ? metadata.styles : Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["style"])({});

            if (styleMetadata.type == 5
            /* Keyframes */
            ) {
                styleAst = this.visitKeyframes(styleMetadata, context);
              } else {
              var _styleMetadata = metadata.styles;
              var isEmpty = false;

              if (!_styleMetadata) {
                isEmpty = true;
                var newStyleData = {};

                if (timingAst.easing) {
                  newStyleData['easing'] = timingAst.easing;
                }

                _styleMetadata = Object(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["style"])(newStyleData);
              }

              context.currentTime += timingAst.duration + timingAst.delay;

              var _styleAst = this.visitStyle(_styleMetadata, context);

              _styleAst.isEmptyStep = isEmpty;
              styleAst = _styleAst;
            }

            context.currentAnimateTimings = null;
            return {
              type: 4
              /* Animate */
              ,
              timings: timingAst,
              style: styleAst,
              options: null
            };
          }
        }, {
          key: "visitStyle",
          value: function visitStyle(metadata, context) {
            var ast = this._makeStyleAst(metadata, context);

            this._validateStyleAst(ast, context);

            return ast;
          }
        }, {
          key: "_makeStyleAst",
          value: function _makeStyleAst(metadata, context) {
            var styles = [];

            if (Array.isArray(metadata.styles)) {
              metadata.styles.forEach(function (styleTuple) {
                if (typeof styleTuple == 'string') {
                  if (styleTuple == _angular_animations__WEBPACK_IMPORTED_MODULE_0__["AUTO_STYLE"]) {
                    styles.push(styleTuple);
                  } else {
                    context.errors.push("The provided style string value ".concat(styleTuple, " is not allowed."));
                  }
                } else {
                  styles.push(styleTuple);
                }
              });
            } else {
              styles.push(metadata.styles);
            }

            var containsDynamicStyles = false;
            var collectedEasing = null;
            styles.forEach(function (styleData) {
              if (isObject(styleData)) {
                var styleMap = styleData;
                var easing = styleMap['easing'];

                if (easing) {
                  collectedEasing = easing;
                  delete styleMap['easing'];
                }

                if (!containsDynamicStyles) {
                  for (var prop in styleMap) {
                    var value = styleMap[prop];

                    if (value.toString().indexOf(SUBSTITUTION_EXPR_START) >= 0) {
                      containsDynamicStyles = true;
                      break;
                    }
                  }
                }
              }
            });
            return {
              type: 6
              /* Style */
              ,
              styles: styles,
              easing: collectedEasing,
              offset: metadata.offset,
              containsDynamicStyles: containsDynamicStyles,
              options: null
            };
          }
        }, {
          key: "_validateStyleAst",
          value: function _validateStyleAst(ast, context) {
            var _this882 = this;

            var timings = context.currentAnimateTimings;
            var endTime = context.currentTime;
            var startTime = context.currentTime;

            if (timings && startTime > 0) {
              startTime -= timings.duration + timings.delay;
            }

            ast.styles.forEach(function (tuple) {
              if (typeof tuple == 'string') return;
              Object.keys(tuple).forEach(function (prop) {
                if (!_this882._driver.validateStyleProperty(prop)) {
                  context.errors.push("The provided animation property \"".concat(prop, "\" is not a supported CSS property for animations"));
                  return;
                }

                var collectedStyles = context.collectedStyles[context.currentQuerySelector];
                var collectedEntry = collectedStyles[prop];
                var updateCollectedStyle = true;

                if (collectedEntry) {
                  if (startTime != endTime && startTime >= collectedEntry.startTime && endTime <= collectedEntry.endTime) {
                    context.errors.push("The CSS property \"".concat(prop, "\" that exists between the times of \"").concat(collectedEntry.startTime, "ms\" and \"").concat(collectedEntry.endTime, "ms\" is also being animated in a parallel animation between the times of \"").concat(startTime, "ms\" and \"").concat(endTime, "ms\""));
                    updateCollectedStyle = false;
                  } // we always choose the smaller start time value since we
                  // want to have a record of the entire animation window where
                  // the style property is being animated in between


                  startTime = collectedEntry.startTime;
                }

                if (updateCollectedStyle) {
                  collectedStyles[prop] = {
                    startTime: startTime,
                    endTime: endTime
                  };
                }

                if (context.options) {
                  validateStyleParams(tuple[prop], context.options, context.errors);
                }
              });
            });
          }
        }, {
          key: "visitKeyframes",
          value: function visitKeyframes(metadata, context) {
            var _this883 = this;

            var ast = {
              type: 5
              /* Keyframes */
              ,
              styles: [],
              options: null
            };

            if (!context.currentAnimateTimings) {
              context.errors.push("keyframes() must be placed inside of a call to animate()");
              return ast;
            }

            var MAX_KEYFRAME_OFFSET = 1;
            var totalKeyframesWithOffsets = 0;
            var offsets = [];
            var offsetsOutOfOrder = false;
            var keyframesOutOfRange = false;
            var previousOffset = 0;
            var keyframes = metadata.steps.map(function (styles) {
              var style = _this883._makeStyleAst(styles, context);

              var offsetVal = style.offset != null ? style.offset : consumeOffset(style.styles);
              var offset = 0;

              if (offsetVal != null) {
                totalKeyframesWithOffsets++;
                offset = style.offset = offsetVal;
              }

              keyframesOutOfRange = keyframesOutOfRange || offset < 0 || offset > 1;
              offsetsOutOfOrder = offsetsOutOfOrder || offset < previousOffset;
              previousOffset = offset;
              offsets.push(offset);
              return style;
            });

            if (keyframesOutOfRange) {
              context.errors.push("Please ensure that all keyframe offsets are between 0 and 1");
            }

            if (offsetsOutOfOrder) {
              context.errors.push("Please ensure that all keyframe offsets are in order");
            }

            var length = metadata.steps.length;
            var generatedOffset = 0;

            if (totalKeyframesWithOffsets > 0 && totalKeyframesWithOffsets < length) {
              context.errors.push("Not all style() steps within the declared keyframes() contain offsets");
            } else if (totalKeyframesWithOffsets == 0) {
              generatedOffset = MAX_KEYFRAME_OFFSET / (length - 1);
            }

            var limit = length - 1;
            var currentTime = context.currentTime;
            var currentAnimateTimings = context.currentAnimateTimings;
            var animateDuration = currentAnimateTimings.duration;
            keyframes.forEach(function (kf, i) {
              var offset = generatedOffset > 0 ? i == limit ? 1 : generatedOffset * i : offsets[i];
              var durationUpToThisFrame = offset * animateDuration;
              context.currentTime = currentTime + currentAnimateTimings.delay + durationUpToThisFrame;
              currentAnimateTimings.duration = durationUpToThisFrame;

              _this883._validateStyleAst(kf, context);

              kf.offset = offset;
              ast.styles.push(kf);
            });
            return ast;
          }
        }, {
          key: "visitReference",
          value: function visitReference(metadata, context) {
            return {
              type: 8
              /* Reference */
              ,
              animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context),
              options: normalizeAnimationOptions(metadata.options)
            };
          }
        }, {
          key: "visitAnimateChild",
          value: function visitAnimateChild(metadata, context) {
            context.depCount++;
            return {
              type: 9
              /* AnimateChild */
              ,
              options: normalizeAnimationOptions(metadata.options)
            };
          }
        }, {
          key: "visitAnimateRef",
          value: function visitAnimateRef(metadata, context) {
            return {
              type: 10
              /* AnimateRef */
              ,
              animation: this.visitReference(metadata.animation, context),
              options: normalizeAnimationOptions(metadata.options)
            };
          }
        }, {
          key: "visitQuery",
          value: function visitQuery(metadata, context) {
            var parentSelector = context.currentQuerySelector;
            var options = metadata.options || {};
            context.queryCount++;
            context.currentQuery = metadata;

            var _normalizeSelector = normalizeSelector(metadata.selector),
                _normalizeSelector2 = _slicedToArray(_normalizeSelector, 2),
                selector = _normalizeSelector2[0],
                includeSelf = _normalizeSelector2[1];

            context.currentQuerySelector = parentSelector.length ? parentSelector + ' ' + selector : selector;
            getOrSetAsInMap(context.collectedStyles, context.currentQuerySelector, {});
            var animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);
            context.currentQuery = null;
            context.currentQuerySelector = parentSelector;
            return {
              type: 11
              /* Query */
              ,
              selector: selector,
              limit: options.limit || 0,
              optional: !!options.optional,
              includeSelf: includeSelf,
              animation: animation,
              originalSelector: metadata.selector,
              options: normalizeAnimationOptions(metadata.options)
            };
          }
        }, {
          key: "visitStagger",
          value: function visitStagger(metadata, context) {
            if (!context.currentQuery) {
              context.errors.push("stagger() can only be used inside of query()");
            }

            var timings = metadata.timings === 'full' ? {
              duration: 0,
              delay: 0,
              easing: 'full'
            } : resolveTiming(metadata.timings, context.errors, true);
            return {
              type: 12
              /* Stagger */
              ,
              animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context),
              timings: timings,
              options: null
            };
          }
        }]);

        return AnimationAstBuilderVisitor;
      }();

      function normalizeSelector(selector) {
        var hasAmpersand = selector.split(/\s*,\s*/).find(function (token) {
          return token == SELF_TOKEN;
        }) ? true : false;

        if (hasAmpersand) {
          selector = selector.replace(SELF_TOKEN_REGEX, '');
        } // the :enter and :leave selectors are filled in at runtime during timeline building


        selector = selector.replace(/@\*/g, NG_TRIGGER_SELECTOR).replace(/@\w+/g, function (match) {
          return NG_TRIGGER_SELECTOR + '-' + match.substr(1);
        }).replace(/:animating/g, NG_ANIMATING_SELECTOR);
        return [selector, hasAmpersand];
      }

      function normalizeParams(obj) {
        return obj ? copyObj(obj) : null;
      }

      var AnimationAstBuilderContext = function AnimationAstBuilderContext(errors) {
        _classCallCheck2(this, AnimationAstBuilderContext);

        this.errors = errors;
        this.queryCount = 0;
        this.depCount = 0;
        this.currentTransition = null;
        this.currentQuery = null;
        this.currentQuerySelector = null;
        this.currentAnimateTimings = null;
        this.currentTime = 0;
        this.collectedStyles = {};
        this.options = null;
      };

      function consumeOffset(styles) {
        if (typeof styles == 'string') return null;
        var offset = null;

        if (Array.isArray(styles)) {
          styles.forEach(function (styleTuple) {
            if (isObject(styleTuple) && styleTuple.hasOwnProperty('offset')) {
              var obj = styleTuple;
              offset = parseFloat(obj['offset']);
              delete obj['offset'];
            }
          });
        } else if (isObject(styles) && styles.hasOwnProperty('offset')) {
          var obj = styles;
          offset = parseFloat(obj['offset']);
          delete obj['offset'];
        }

        return offset;
      }

      function isObject(value) {
        return !Array.isArray(value) && typeof value == 'object';
      }

      function constructTimingAst(value, errors) {
        var timings = null;

        if (value.hasOwnProperty('duration')) {
          timings = value;
        } else if (typeof value == 'number') {
          var duration = resolveTiming(value, errors).duration;
          return makeTimingAst(duration, 0, '');
        }

        var strValue = value;
        var isDynamic = strValue.split(/\s+/).some(function (v) {
          return v.charAt(0) == '{' && v.charAt(1) == '{';
        });

        if (isDynamic) {
          var ast = makeTimingAst(0, 0, '');
          ast.dynamic = true;
          ast.strValue = strValue;
          return ast;
        }

        timings = timings || resolveTiming(strValue, errors);
        return makeTimingAst(timings.duration, timings.delay, timings.easing);
      }

      function normalizeAnimationOptions(options) {
        if (options) {
          options = copyObj(options);

          if (options['params']) {
            options['params'] = normalizeParams(options['params']);
          }
        } else {
          options = {};
        }

        return options;
      }

      function makeTimingAst(duration, delay, easing) {
        return {
          duration: duration,
          delay: delay,
          easing: easing
        };
      }

      function createTimelineInstruction(element, keyframes, preStyleProps, postStyleProps, duration, delay) {
        var easing = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null;
        var subTimeline = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : false;
        return {
          type: 1
          /* TimelineAnimation */
          ,
          element: element,
          keyframes: keyframes,
          preStyleProps: preStyleProps,
          postStyleProps: postStyleProps,
          duration: duration,
          delay: delay,
          totalTime: duration + delay,
          easing: easing,
          subTimeline: subTimeline
        };
      }

      var ElementInstructionMap = /*#__PURE__*/function () {
        function ElementInstructionMap() {
          _classCallCheck2(this, ElementInstructionMap);

          this._map = new Map();
        }

        _createClass2(ElementInstructionMap, [{
          key: "consume",
          value: function consume(element) {
            var instructions = this._map.get(element);

            if (instructions) {
              this._map["delete"](element);
            } else {
              instructions = [];
            }

            return instructions;
          }
        }, {
          key: "append",
          value: function append(element, instructions) {
            var _existingInstructions;

            var existingInstructions = this._map.get(element);

            if (!existingInstructions) {
              this._map.set(element, existingInstructions = []);
            }

            (_existingInstructions = existingInstructions).push.apply(_existingInstructions, _toConsumableArray(instructions));
          }
        }, {
          key: "has",
          value: function has(element) {
            return this._map.has(element);
          }
        }, {
          key: "clear",
          value: function clear() {
            this._map.clear();
          }
        }]);

        return ElementInstructionMap;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ONE_FRAME_IN_MILLISECONDS = 1;
      var ENTER_TOKEN = ':enter';
      var ENTER_TOKEN_REGEX = new RegExp(ENTER_TOKEN, 'g');
      var LEAVE_TOKEN = ':leave';
      var LEAVE_TOKEN_REGEX = new RegExp(LEAVE_TOKEN, 'g');
      /*
       * The code within this file aims to generate web-animations-compatible keyframes from Angular's
       * animation DSL code.
       *
       * The code below will be converted from:
       *
       * ```
       * sequence([
       *   style({ opacity: 0 }),
       *   animate(1000, style({ opacity: 0 }))
       * ])
       * ```
       *
       * To:
       * ```
       * keyframes = [{ opacity: 0, offset: 0 }, { opacity: 1, offset: 1 }]
       * duration = 1000
       * delay = 0
       * easing = ''
       * ```
       *
       * For this operation to cover the combination of animation verbs (style, animate, group, etc...) a
       * combination of prototypical inheritance, AST traversal and merge-sort-like algorithms are used.
       *
       * [AST Traversal]
       * Each of the animation verbs, when executed, will return an string-map object representing what
       * type of action it is (style, animate, group, etc...) and the data associated with it. This means
       * that when functional composition mix of these functions is evaluated (like in the example above)
       * then it will end up producing a tree of objects representing the animation itself.
       *
       * When this animation object tree is processed by the visitor code below it will visit each of the
       * verb statements within the visitor. And during each visit it will build the context of the
       * animation keyframes by interacting with the `TimelineBuilder`.
       *
       * [TimelineBuilder]
       * This class is responsible for tracking the styles and building a series of keyframe objects for a
       * timeline between a start and end time. The builder starts off with an initial timeline and each
       * time the AST comes across a `group()`, `keyframes()` or a combination of the two wihtin a
       * `sequence()` then it will generate a sub timeline for each step as well as a new one after
       * they are complete.
       *
       * As the AST is traversed, the timing state on each of the timelines will be incremented. If a sub
       * timeline was created (based on one of the cases above) then the parent timeline will attempt to
       * merge the styles used within the sub timelines into itself (only with group() this will happen).
       * This happens with a merge operation (much like how the merge works in mergesort) and it will only
       * copy the most recently used styles from the sub timelines into the parent timeline. This ensures
       * that if the styles are used later on in another phase of the animation then they will be the most
       * up-to-date values.
       *
       * [How Missing Styles Are Updated]
       * Each timeline has a `backFill` property which is responsible for filling in new styles into
       * already processed keyframes if a new style shows up later within the animation sequence.
       *
       * ```
       * sequence([
       *   style({ width: 0 }),
       *   animate(1000, style({ width: 100 })),
       *   animate(1000, style({ width: 200 })),
       *   animate(1000, style({ width: 300 }))
       *   animate(1000, style({ width: 400, height: 400 })) // notice how `height` doesn't exist anywhere
       * else
       * ])
       * ```
       *
       * What is happening here is that the `height` value is added later in the sequence, but is missing
       * from all previous animation steps. Therefore when a keyframe is created it would also be missing
       * from all previous keyframes up until where it is first used. For the timeline keyframe generation
       * to properly fill in the style it will place the previous value (the value from the parent
       * timeline) or a default value of `*` into the backFill object. Given that each of the keyframe
       * styles are objects that prototypically inhert from the backFill object, this means that if a
       * value is added into the backFill then it will automatically propagate any missing values to all
       * keyframes. Therefore the missing `height` value will be properly filled into the already
       * processed keyframes.
       *
       * When a sub-timeline is created it will have its own backFill property. This is done so that
       * styles present within the sub-timeline do not accidentally seep into the previous/future timeline
       * keyframes
       *
       * (For prototypically-inherited contents to be detected a `for(i in obj)` loop must be used.)
       *
       * [Validation]
       * The code in this file is not responsible for validation. That functionality happens with within
       * the `AnimationValidatorVisitor` code.
       */

      function buildAnimationTimelines(driver, rootElement, ast, enterClassName, leaveClassName) {
        var startingStyles = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
        var finalStyles = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {};
        var options = arguments.length > 7 ? arguments[7] : undefined;
        var subInstructions = arguments.length > 8 ? arguments[8] : undefined;
        var errors = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : [];
        return new AnimationTimelineBuilderVisitor().buildKeyframes(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors);
      }

      var AnimationTimelineBuilderVisitor = /*#__PURE__*/function () {
        function AnimationTimelineBuilderVisitor() {
          _classCallCheck2(this, AnimationTimelineBuilderVisitor);
        }

        _createClass2(AnimationTimelineBuilderVisitor, [{
          key: "buildKeyframes",
          value: function buildKeyframes(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions) {
            var errors = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : [];
            subInstructions = subInstructions || new ElementInstructionMap();
            var context = new AnimationTimelineContext(driver, rootElement, subInstructions, enterClassName, leaveClassName, errors, []);
            context.options = options;
            context.currentTimeline.setStyles([startingStyles], null, context.errors, options);
            visitDslNode(this, ast, context); // this checks to see if an actual animation happened

            var timelines = context.timelines.filter(function (timeline) {
              return timeline.containsAnimation();
            });

            if (timelines.length && Object.keys(finalStyles).length) {
              var tl = timelines[timelines.length - 1];

              if (!tl.allowOnlyTimelineStyles()) {
                tl.setStyles([finalStyles], null, context.errors, options);
              }
            }

            return timelines.length ? timelines.map(function (timeline) {
              return timeline.buildKeyframes();
            }) : [createTimelineInstruction(rootElement, [], [], [], 0, 0, '', false)];
          }
        }, {
          key: "visitTrigger",
          value: function visitTrigger(ast, context) {// these values are not visited in this AST
          }
        }, {
          key: "visitState",
          value: function visitState(ast, context) {// these values are not visited in this AST
          }
        }, {
          key: "visitTransition",
          value: function visitTransition(ast, context) {// these values are not visited in this AST
          }
        }, {
          key: "visitAnimateChild",
          value: function visitAnimateChild(ast, context) {
            var elementInstructions = context.subInstructions.consume(context.element);

            if (elementInstructions) {
              var innerContext = context.createSubContext(ast.options);
              var startTime = context.currentTimeline.currentTime;

              var endTime = this._visitSubInstructions(elementInstructions, innerContext, innerContext.options);

              if (startTime != endTime) {
                // we do this on the upper context because we created a sub context for
                // the sub child animations
                context.transformIntoNewTimeline(endTime);
              }
            }

            context.previousNode = ast;
          }
        }, {
          key: "visitAnimateRef",
          value: function visitAnimateRef(ast, context) {
            var innerContext = context.createSubContext(ast.options);
            innerContext.transformIntoNewTimeline();
            this.visitReference(ast.animation, innerContext);
            context.transformIntoNewTimeline(innerContext.currentTimeline.currentTime);
            context.previousNode = ast;
          }
        }, {
          key: "_visitSubInstructions",
          value: function _visitSubInstructions(instructions, context, options) {
            var startTime = context.currentTimeline.currentTime;
            var furthestTime = startTime; // this is a special-case for when a user wants to skip a sub
            // animation from being fired entirely.

            var duration = options.duration != null ? resolveTimingValue(options.duration) : null;
            var delay = options.delay != null ? resolveTimingValue(options.delay) : null;

            if (duration !== 0) {
              instructions.forEach(function (instruction) {
                var instructionTimings = context.appendInstructionToTimeline(instruction, duration, delay);
                furthestTime = Math.max(furthestTime, instructionTimings.duration + instructionTimings.delay);
              });
            }

            return furthestTime;
          }
        }, {
          key: "visitReference",
          value: function visitReference(ast, context) {
            context.updateOptions(ast.options, true);
            visitDslNode(this, ast.animation, context);
            context.previousNode = ast;
          }
        }, {
          key: "visitSequence",
          value: function visitSequence(ast, context) {
            var _this884 = this;

            var subContextCount = context.subContextCount;
            var ctx = context;
            var options = ast.options;

            if (options && (options.params || options.delay)) {
              ctx = context.createSubContext(options);
              ctx.transformIntoNewTimeline();

              if (options.delay != null) {
                if (ctx.previousNode.type == 6
                /* Style */
                ) {
                    ctx.currentTimeline.snapshotCurrentStyles();
                    ctx.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;
                  }

                var delay = resolveTimingValue(options.delay);
                ctx.delayNextStep(delay);
              }
            }

            if (ast.steps.length) {
              ast.steps.forEach(function (s) {
                return visitDslNode(_this884, s, ctx);
              }); // this is here just incase the inner steps only contain or end with a style() call

              ctx.currentTimeline.applyStylesToKeyframe(); // this means that some animation function within the sequence
              // ended up creating a sub timeline (which means the current
              // timeline cannot overlap with the contents of the sequence)

              if (ctx.subContextCount > subContextCount) {
                ctx.transformIntoNewTimeline();
              }
            }

            context.previousNode = ast;
          }
        }, {
          key: "visitGroup",
          value: function visitGroup(ast, context) {
            var _this885 = this;

            var innerTimelines = [];
            var furthestTime = context.currentTimeline.currentTime;
            var delay = ast.options && ast.options.delay ? resolveTimingValue(ast.options.delay) : 0;
            ast.steps.forEach(function (s) {
              var innerContext = context.createSubContext(ast.options);

              if (delay) {
                innerContext.delayNextStep(delay);
              }

              visitDslNode(_this885, s, innerContext);
              furthestTime = Math.max(furthestTime, innerContext.currentTimeline.currentTime);
              innerTimelines.push(innerContext.currentTimeline);
            }); // this operation is run after the AST loop because otherwise
            // if the parent timeline's collected styles were updated then
            // it would pass in invalid data into the new-to-be forked items

            innerTimelines.forEach(function (timeline) {
              return context.currentTimeline.mergeTimelineCollectedStyles(timeline);
            });
            context.transformIntoNewTimeline(furthestTime);
            context.previousNode = ast;
          }
        }, {
          key: "_visitTiming",
          value: function _visitTiming(ast, context) {
            if (ast.dynamic) {
              var strValue = ast.strValue;
              var timingValue = context.params ? interpolateParams(strValue, context.params, context.errors) : strValue;
              return resolveTiming(timingValue, context.errors);
            } else {
              return {
                duration: ast.duration,
                delay: ast.delay,
                easing: ast.easing
              };
            }
          }
        }, {
          key: "visitAnimate",
          value: function visitAnimate(ast, context) {
            var timings = context.currentAnimateTimings = this._visitTiming(ast.timings, context);

            var timeline = context.currentTimeline;

            if (timings.delay) {
              context.incrementTime(timings.delay);
              timeline.snapshotCurrentStyles();
            }

            var style = ast.style;

            if (style.type == 5
            /* Keyframes */
            ) {
                this.visitKeyframes(style, context);
              } else {
              context.incrementTime(timings.duration);
              this.visitStyle(style, context);
              timeline.applyStylesToKeyframe();
            }

            context.currentAnimateTimings = null;
            context.previousNode = ast;
          }
        }, {
          key: "visitStyle",
          value: function visitStyle(ast, context) {
            var timeline = context.currentTimeline;
            var timings = context.currentAnimateTimings; // this is a special case for when a style() call
            // directly follows  an animate() call (but not inside of an animate() call)

            if (!timings && timeline.getCurrentStyleProperties().length) {
              timeline.forwardFrame();
            }

            var easing = timings && timings.easing || ast.easing;

            if (ast.isEmptyStep) {
              timeline.applyEmptyStep(easing);
            } else {
              timeline.setStyles(ast.styles, easing, context.errors, context.options);
            }

            context.previousNode = ast;
          }
        }, {
          key: "visitKeyframes",
          value: function visitKeyframes(ast, context) {
            var currentAnimateTimings = context.currentAnimateTimings;
            var startTime = context.currentTimeline.duration;
            var duration = currentAnimateTimings.duration;
            var innerContext = context.createSubContext();
            var innerTimeline = innerContext.currentTimeline;
            innerTimeline.easing = currentAnimateTimings.easing;
            ast.styles.forEach(function (step) {
              var offset = step.offset || 0;
              innerTimeline.forwardTime(offset * duration);
              innerTimeline.setStyles(step.styles, step.easing, context.errors, context.options);
              innerTimeline.applyStylesToKeyframe();
            }); // this will ensure that the parent timeline gets all the styles from
            // the child even if the new timeline below is not used

            context.currentTimeline.mergeTimelineCollectedStyles(innerTimeline); // we do this because the window between this timeline and the sub timeline
            // should ensure that the styles within are exactly the same as they were before

            context.transformIntoNewTimeline(startTime + duration);
            context.previousNode = ast;
          }
        }, {
          key: "visitQuery",
          value: function visitQuery(ast, context) {
            var _this886 = this;

            // in the event that the first step before this is a style step we need
            // to ensure the styles are applied before the children are animated
            var startTime = context.currentTimeline.currentTime;
            var options = ast.options || {};
            var delay = options.delay ? resolveTimingValue(options.delay) : 0;

            if (delay && (context.previousNode.type === 6
            /* Style */
            || startTime == 0 && context.currentTimeline.getCurrentStyleProperties().length)) {
              context.currentTimeline.snapshotCurrentStyles();
              context.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;
            }

            var furthestTime = startTime;
            var elms = context.invokeQuery(ast.selector, ast.originalSelector, ast.limit, ast.includeSelf, options.optional ? true : false, context.errors);
            context.currentQueryTotal = elms.length;
            var sameElementTimeline = null;
            elms.forEach(function (element, i) {
              context.currentQueryIndex = i;
              var innerContext = context.createSubContext(ast.options, element);

              if (delay) {
                innerContext.delayNextStep(delay);
              }

              if (element === context.element) {
                sameElementTimeline = innerContext.currentTimeline;
              }

              visitDslNode(_this886, ast.animation, innerContext); // this is here just incase the inner steps only contain or end
              // with a style() call (which is here to signal that this is a preparatory
              // call to style an element before it is animated again)

              innerContext.currentTimeline.applyStylesToKeyframe();
              var endTime = innerContext.currentTimeline.currentTime;
              furthestTime = Math.max(furthestTime, endTime);
            });
            context.currentQueryIndex = 0;
            context.currentQueryTotal = 0;
            context.transformIntoNewTimeline(furthestTime);

            if (sameElementTimeline) {
              context.currentTimeline.mergeTimelineCollectedStyles(sameElementTimeline);
              context.currentTimeline.snapshotCurrentStyles();
            }

            context.previousNode = ast;
          }
        }, {
          key: "visitStagger",
          value: function visitStagger(ast, context) {
            var parentContext = context.parentContext;
            var tl = context.currentTimeline;
            var timings = ast.timings;
            var duration = Math.abs(timings.duration);
            var maxTime = duration * (context.currentQueryTotal - 1);
            var delay = duration * context.currentQueryIndex;
            var staggerTransformer = timings.duration < 0 ? 'reverse' : timings.easing;

            switch (staggerTransformer) {
              case 'reverse':
                delay = maxTime - delay;
                break;

              case 'full':
                delay = parentContext.currentStaggerTime;
                break;
            }

            var timeline = context.currentTimeline;

            if (delay) {
              timeline.delayNextStep(delay);
            }

            var startingTime = timeline.currentTime;
            visitDslNode(this, ast.animation, context);
            context.previousNode = ast; // time = duration + delay
            // the reason why this computation is so complex is because
            // the inner timeline may either have a delay value or a stretched
            // keyframe depending on if a subtimeline is not used or is used.

            parentContext.currentStaggerTime = tl.currentTime - startingTime + (tl.startTime - parentContext.currentTimeline.startTime);
          }
        }]);

        return AnimationTimelineBuilderVisitor;
      }();

      var DEFAULT_NOOP_PREVIOUS_NODE = {};

      var AnimationTimelineContext = /*#__PURE__*/function () {
        function AnimationTimelineContext(_driver, element, subInstructions, _enterClassName, _leaveClassName, errors, timelines, initialTimeline) {
          _classCallCheck2(this, AnimationTimelineContext);

          this._driver = _driver;
          this.element = element;
          this.subInstructions = subInstructions;
          this._enterClassName = _enterClassName;
          this._leaveClassName = _leaveClassName;
          this.errors = errors;
          this.timelines = timelines;
          this.parentContext = null;
          this.currentAnimateTimings = null;
          this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;
          this.subContextCount = 0;
          this.options = {};
          this.currentQueryIndex = 0;
          this.currentQueryTotal = 0;
          this.currentStaggerTime = 0;
          this.currentTimeline = initialTimeline || new TimelineBuilder(this._driver, element, 0);
          timelines.push(this.currentTimeline);
        }

        _createClass2(AnimationTimelineContext, [{
          key: "params",
          get: function get() {
            return this.options.params;
          }
        }, {
          key: "updateOptions",
          value: function updateOptions(options, skipIfExists) {
            var _this887 = this;

            if (!options) return;
            var newOptions = options;
            var optionsToUpdate = this.options; // NOTE: this will get patched up when other animation methods support duration overrides

            if (newOptions.duration != null) {
              optionsToUpdate.duration = resolveTimingValue(newOptions.duration);
            }

            if (newOptions.delay != null) {
              optionsToUpdate.delay = resolveTimingValue(newOptions.delay);
            }

            var newParams = newOptions.params;

            if (newParams) {
              var paramsToUpdate = optionsToUpdate.params;

              if (!paramsToUpdate) {
                paramsToUpdate = this.options.params = {};
              }

              Object.keys(newParams).forEach(function (name) {
                if (!skipIfExists || !paramsToUpdate.hasOwnProperty(name)) {
                  paramsToUpdate[name] = interpolateParams(newParams[name], paramsToUpdate, _this887.errors);
                }
              });
            }
          }
        }, {
          key: "_copyOptions",
          value: function _copyOptions() {
            var options = {};

            if (this.options) {
              var oldParams = this.options.params;

              if (oldParams) {
                var params = options['params'] = {};
                Object.keys(oldParams).forEach(function (name) {
                  params[name] = oldParams[name];
                });
              }
            }

            return options;
          }
        }, {
          key: "createSubContext",
          value: function createSubContext() {
            var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
            var element = arguments.length > 1 ? arguments[1] : undefined;
            var newTime = arguments.length > 2 ? arguments[2] : undefined;
            var target = element || this.element;
            var context = new AnimationTimelineContext(this._driver, target, this.subInstructions, this._enterClassName, this._leaveClassName, this.errors, this.timelines, this.currentTimeline.fork(target, newTime || 0));
            context.previousNode = this.previousNode;
            context.currentAnimateTimings = this.currentAnimateTimings;
            context.options = this._copyOptions();
            context.updateOptions(options);
            context.currentQueryIndex = this.currentQueryIndex;
            context.currentQueryTotal = this.currentQueryTotal;
            context.parentContext = this;
            this.subContextCount++;
            return context;
          }
        }, {
          key: "transformIntoNewTimeline",
          value: function transformIntoNewTimeline(newTime) {
            this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;
            this.currentTimeline = this.currentTimeline.fork(this.element, newTime);
            this.timelines.push(this.currentTimeline);
            return this.currentTimeline;
          }
        }, {
          key: "appendInstructionToTimeline",
          value: function appendInstructionToTimeline(instruction, duration, delay) {
            var updatedTimings = {
              duration: duration != null ? duration : instruction.duration,
              delay: this.currentTimeline.currentTime + (delay != null ? delay : 0) + instruction.delay,
              easing: ''
            };
            var builder = new SubTimelineBuilder(this._driver, instruction.element, instruction.keyframes, instruction.preStyleProps, instruction.postStyleProps, updatedTimings, instruction.stretchStartingKeyframe);
            this.timelines.push(builder);
            return updatedTimings;
          }
        }, {
          key: "incrementTime",
          value: function incrementTime(time) {
            this.currentTimeline.forwardTime(this.currentTimeline.duration + time);
          }
        }, {
          key: "delayNextStep",
          value: function delayNextStep(delay) {
            // negative delays are not yet supported
            if (delay > 0) {
              this.currentTimeline.delayNextStep(delay);
            }
          }
        }, {
          key: "invokeQuery",
          value: function invokeQuery(selector, originalSelector, limit, includeSelf, optional, errors) {
            var results = [];

            if (includeSelf) {
              results.push(this.element);
            }

            if (selector.length > 0) {
              // if :self is only used then the selector is empty
              selector = selector.replace(ENTER_TOKEN_REGEX, '.' + this._enterClassName);
              selector = selector.replace(LEAVE_TOKEN_REGEX, '.' + this._leaveClassName);
              var multi = limit != 1;

              var elements = this._driver.query(this.element, selector, multi);

              if (limit !== 0) {
                elements = limit < 0 ? elements.slice(elements.length + limit, elements.length) : elements.slice(0, limit);
              }

              results.push.apply(results, _toConsumableArray(elements));
            }

            if (!optional && results.length == 0) {
              errors.push("`query(\"".concat(originalSelector, "\")` returned zero elements. (Use `query(\"").concat(originalSelector, "\", { optional: true })` if you wish to allow this.)"));
            }

            return results;
          }
        }]);

        return AnimationTimelineContext;
      }();

      var TimelineBuilder = /*#__PURE__*/function () {
        function TimelineBuilder(_driver, element, startTime, _elementTimelineStylesLookup) {
          _classCallCheck2(this, TimelineBuilder);

          this._driver = _driver;
          this.element = element;
          this.startTime = startTime;
          this._elementTimelineStylesLookup = _elementTimelineStylesLookup;
          this.duration = 0;
          this._previousKeyframe = {};
          this._currentKeyframe = {};
          this._keyframes = new Map();
          this._styleSummary = {};
          this._pendingStyles = {};
          this._backFill = {};
          this._currentEmptyStepKeyframe = null;

          if (!this._elementTimelineStylesLookup) {
            this._elementTimelineStylesLookup = new Map();
          }

          this._localTimelineStyles = Object.create(this._backFill, {});
          this._globalTimelineStyles = this._elementTimelineStylesLookup.get(element);

          if (!this._globalTimelineStyles) {
            this._globalTimelineStyles = this._localTimelineStyles;

            this._elementTimelineStylesLookup.set(element, this._localTimelineStyles);
          }

          this._loadKeyframe();
        }

        _createClass2(TimelineBuilder, [{
          key: "containsAnimation",
          value: function containsAnimation() {
            switch (this._keyframes.size) {
              case 0:
                return false;

              case 1:
                return this.getCurrentStyleProperties().length > 0;

              default:
                return true;
            }
          }
        }, {
          key: "getCurrentStyleProperties",
          value: function getCurrentStyleProperties() {
            return Object.keys(this._currentKeyframe);
          }
        }, {
          key: "currentTime",
          get: function get() {
            return this.startTime + this.duration;
          }
        }, {
          key: "delayNextStep",
          value: function delayNextStep(delay) {
            // in the event that a style() step is placed right before a stagger()
            // and that style() step is the very first style() value in the animation
            // then we need to make a copy of the keyframe [0, copy, 1] so that the delay
            // properly applies the style() values to work with the stagger...
            var hasPreStyleStep = this._keyframes.size == 1 && Object.keys(this._pendingStyles).length;

            if (this.duration || hasPreStyleStep) {
              this.forwardTime(this.currentTime + delay);

              if (hasPreStyleStep) {
                this.snapshotCurrentStyles();
              }
            } else {
              this.startTime += delay;
            }
          }
        }, {
          key: "fork",
          value: function fork(element, currentTime) {
            this.applyStylesToKeyframe();
            return new TimelineBuilder(this._driver, element, currentTime || this.currentTime, this._elementTimelineStylesLookup);
          }
        }, {
          key: "_loadKeyframe",
          value: function _loadKeyframe() {
            if (this._currentKeyframe) {
              this._previousKeyframe = this._currentKeyframe;
            }

            this._currentKeyframe = this._keyframes.get(this.duration);

            if (!this._currentKeyframe) {
              this._currentKeyframe = Object.create(this._backFill, {});

              this._keyframes.set(this.duration, this._currentKeyframe);
            }
          }
        }, {
          key: "forwardFrame",
          value: function forwardFrame() {
            this.duration += ONE_FRAME_IN_MILLISECONDS;

            this._loadKeyframe();
          }
        }, {
          key: "forwardTime",
          value: function forwardTime(time) {
            this.applyStylesToKeyframe();
            this.duration = time;

            this._loadKeyframe();
          }
        }, {
          key: "_updateStyle",
          value: function _updateStyle(prop, value) {
            this._localTimelineStyles[prop] = value;
            this._globalTimelineStyles[prop] = value;
            this._styleSummary[prop] = {
              time: this.currentTime,
              value: value
            };
          }
        }, {
          key: "allowOnlyTimelineStyles",
          value: function allowOnlyTimelineStyles() {
            return this._currentEmptyStepKeyframe !== this._currentKeyframe;
          }
        }, {
          key: "applyEmptyStep",
          value: function applyEmptyStep(easing) {
            var _this888 = this;

            if (easing) {
              this._previousKeyframe['easing'] = easing;
            } // special case for animate(duration):
            // all missing styles are filled with a `*` value then
            // if any destination styles are filled in later on the same
            // keyframe then they will override the overridden styles
            // We use `_globalTimelineStyles` here because there may be
            // styles in previous keyframes that are not present in this timeline


            Object.keys(this._globalTimelineStyles).forEach(function (prop) {
              _this888._backFill[prop] = _this888._globalTimelineStyles[prop] || _angular_animations__WEBPACK_IMPORTED_MODULE_0__["AUTO_STYLE"];
              _this888._currentKeyframe[prop] = _angular_animations__WEBPACK_IMPORTED_MODULE_0__["AUTO_STYLE"];
            });
            this._currentEmptyStepKeyframe = this._currentKeyframe;
          }
        }, {
          key: "setStyles",
          value: function setStyles(input, easing, errors, options) {
            var _this889 = this;

            if (easing) {
              this._previousKeyframe['easing'] = easing;
            }

            var params = options && options.params || {};
            var styles = flattenStyles(input, this._globalTimelineStyles);
            Object.keys(styles).forEach(function (prop) {
              var val = interpolateParams(styles[prop], params, errors);
              _this889._pendingStyles[prop] = val;

              if (!_this889._localTimelineStyles.hasOwnProperty(prop)) {
                _this889._backFill[prop] = _this889._globalTimelineStyles.hasOwnProperty(prop) ? _this889._globalTimelineStyles[prop] : _angular_animations__WEBPACK_IMPORTED_MODULE_0__["AUTO_STYLE"];
              }

              _this889._updateStyle(prop, val);
            });
          }
        }, {
          key: "applyStylesToKeyframe",
          value: function applyStylesToKeyframe() {
            var _this890 = this;

            var styles = this._pendingStyles;
            var props = Object.keys(styles);
            if (props.length == 0) return;
            this._pendingStyles = {};
            props.forEach(function (prop) {
              var val = styles[prop];
              _this890._currentKeyframe[prop] = val;
            });
            Object.keys(this._localTimelineStyles).forEach(function (prop) {
              if (!_this890._currentKeyframe.hasOwnProperty(prop)) {
                _this890._currentKeyframe[prop] = _this890._localTimelineStyles[prop];
              }
            });
          }
        }, {
          key: "snapshotCurrentStyles",
          value: function snapshotCurrentStyles() {
            var _this891 = this;

            Object.keys(this._localTimelineStyles).forEach(function (prop) {
              var val = _this891._localTimelineStyles[prop];
              _this891._pendingStyles[prop] = val;

              _this891._updateStyle(prop, val);
            });
          }
        }, {
          key: "getFinalKeyframe",
          value: function getFinalKeyframe() {
            return this._keyframes.get(this.duration);
          }
        }, {
          key: "properties",
          get: function get() {
            var properties = [];

            for (var prop in this._currentKeyframe) {
              properties.push(prop);
            }

            return properties;
          }
        }, {
          key: "mergeTimelineCollectedStyles",
          value: function mergeTimelineCollectedStyles(timeline) {
            var _this892 = this;

            Object.keys(timeline._styleSummary).forEach(function (prop) {
              var details0 = _this892._styleSummary[prop];
              var details1 = timeline._styleSummary[prop];

              if (!details0 || details1.time > details0.time) {
                _this892._updateStyle(prop, details1.value);
              }
            });
          }
        }, {
          key: "buildKeyframes",
          value: function buildKeyframes() {
            var _this893 = this;

            this.applyStylesToKeyframe();
            var preStyleProps = new Set();
            var postStyleProps = new Set();
            var isEmpty = this._keyframes.size === 1 && this.duration === 0;
            var finalKeyframes = [];

            this._keyframes.forEach(function (keyframe, time) {
              var finalKeyframe = copyStyles(keyframe, true);
              Object.keys(finalKeyframe).forEach(function (prop) {
                var value = finalKeyframe[prop];

                if (value == _angular_animations__WEBPACK_IMPORTED_MODULE_0__["ɵPRE_STYLE"]) {
                  preStyleProps.add(prop);
                } else if (value == _angular_animations__WEBPACK_IMPORTED_MODULE_0__["AUTO_STYLE"]) {
                  postStyleProps.add(prop);
                }
              });

              if (!isEmpty) {
                finalKeyframe['offset'] = time / _this893.duration;
              }

              finalKeyframes.push(finalKeyframe);
            });

            var preProps = preStyleProps.size ? iteratorToArray(preStyleProps.values()) : [];
            var postProps = postStyleProps.size ? iteratorToArray(postStyleProps.values()) : []; // special case for a 0-second animation (which is designed just to place styles onscreen)

            if (isEmpty) {
              var kf0 = finalKeyframes[0];
              var kf1 = copyObj(kf0);
              kf0['offset'] = 0;
              kf1['offset'] = 1;
              finalKeyframes = [kf0, kf1];
            }

            return createTimelineInstruction(this.element, finalKeyframes, preProps, postProps, this.duration, this.startTime, this.easing, false);
          }
        }]);

        return TimelineBuilder;
      }();

      var SubTimelineBuilder = /*#__PURE__*/function (_TimelineBuilder) {
        _inherits2(SubTimelineBuilder, _TimelineBuilder);

        var _super370 = _createSuper(SubTimelineBuilder);

        function SubTimelineBuilder(driver, element, keyframes, preStyleProps, postStyleProps, timings) {
          var _this894;

          var _stretchStartingKeyframe = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false;

          _classCallCheck2(this, SubTimelineBuilder);

          _this894 = _super370.call(this, driver, element, timings.delay);
          _this894.element = element;
          _this894.keyframes = keyframes;
          _this894.preStyleProps = preStyleProps;
          _this894.postStyleProps = postStyleProps;
          _this894._stretchStartingKeyframe = _stretchStartingKeyframe;
          _this894.timings = {
            duration: timings.duration,
            delay: timings.delay,
            easing: timings.easing
          };
          return _this894;
        }

        _createClass2(SubTimelineBuilder, [{
          key: "containsAnimation",
          value: function containsAnimation() {
            return this.keyframes.length > 1;
          }
        }, {
          key: "buildKeyframes",
          value: function buildKeyframes() {
            var keyframes = this.keyframes;
            var _this$timings = this.timings,
                delay = _this$timings.delay,
                duration = _this$timings.duration,
                easing = _this$timings.easing;

            if (this._stretchStartingKeyframe && delay) {
              var newKeyframes = [];
              var totalTime = duration + delay;
              var startingGap = delay / totalTime; // the original starting keyframe now starts once the delay is done

              var newFirstKeyframe = copyStyles(keyframes[0], false);
              newFirstKeyframe['offset'] = 0;
              newKeyframes.push(newFirstKeyframe);
              var oldFirstKeyframe = copyStyles(keyframes[0], false);
              oldFirstKeyframe['offset'] = roundOffset(startingGap);
              newKeyframes.push(oldFirstKeyframe);
              /*
                When the keyframe is stretched then it means that the delay before the animation
                starts is gone. Instead the first keyframe is placed at the start of the animation
                and it is then copied to where it starts when the original delay is over. This basically
                means nothing animates during that delay, but the styles are still renderered. For this
                to work the original offset values that exist in the original keyframes must be "warped"
                so that they can take the new keyframe + delay into account.
                       delay=1000, duration=1000, keyframes = 0 .5 1
                       turns into
                       delay=0, duration=2000, keyframes = 0 .33 .66 1
               */
              // offsets between 1 ... n -1 are all warped by the keyframe stretch

              var limit = keyframes.length - 1;

              for (var i = 1; i <= limit; i++) {
                var kf = copyStyles(keyframes[i], false);
                var oldOffset = kf['offset'];
                var timeAtKeyframe = delay + oldOffset * duration;
                kf['offset'] = roundOffset(timeAtKeyframe / totalTime);
                newKeyframes.push(kf);
              } // the new starting keyframe should be added at the start


              duration = totalTime;
              delay = 0;
              easing = '';
              keyframes = newKeyframes;
            }

            return createTimelineInstruction(this.element, keyframes, this.preStyleProps, this.postStyleProps, duration, delay, easing, true);
          }
        }]);

        return SubTimelineBuilder;
      }(TimelineBuilder);

      function roundOffset(offset) {
        var decimalPoints = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 3;
        var mult = Math.pow(10, decimalPoints - 1);
        return Math.round(offset * mult) / mult;
      }

      function flattenStyles(input, allStyles) {
        var styles = {};
        var allProperties;
        input.forEach(function (token) {
          if (token === '*') {
            allProperties = allProperties || Object.keys(allStyles);
            allProperties.forEach(function (prop) {
              styles[prop] = _angular_animations__WEBPACK_IMPORTED_MODULE_0__["AUTO_STYLE"];
            });
          } else {
            copyStyles(token, false, styles);
          }
        });
        return styles;
      }

      var Animation = /*#__PURE__*/function () {
        function Animation(_driver, input) {
          _classCallCheck2(this, Animation);

          this._driver = _driver;
          var errors = [];
          var ast = buildAnimationAst(_driver, input, errors);

          if (errors.length) {
            var errorMessage = "animation validation failed:\n".concat(errors.join('\n'));
            throw new Error(errorMessage);
          }

          this._animationAst = ast;
        }

        _createClass2(Animation, [{
          key: "buildTimelines",
          value: function buildTimelines(element, startingStyles, destinationStyles, options, subInstructions) {
            var start = Array.isArray(startingStyles) ? normalizeStyles(startingStyles) : startingStyles;
            var dest = Array.isArray(destinationStyles) ? normalizeStyles(destinationStyles) : destinationStyles;
            var errors = [];
            subInstructions = subInstructions || new ElementInstructionMap();
            var result = buildAnimationTimelines(this._driver, element, this._animationAst, ENTER_CLASSNAME, LEAVE_CLASSNAME, start, dest, options, subInstructions, errors);

            if (errors.length) {
              var errorMessage = "animation building failed:\n".concat(errors.join('\n'));
              throw new Error(errorMessage);
            }

            return result;
          }
        }]);

        return Animation;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @publicApi
       */


      var AnimationStyleNormalizer = function AnimationStyleNormalizer() {
        _classCallCheck2(this, AnimationStyleNormalizer);
      };
      /**
       * @publicApi
       */


      var NoopAnimationStyleNormalizer = /*#__PURE__*/function () {
        function NoopAnimationStyleNormalizer() {
          _classCallCheck2(this, NoopAnimationStyleNormalizer);
        }

        _createClass2(NoopAnimationStyleNormalizer, [{
          key: "normalizePropertyName",
          value: function normalizePropertyName(propertyName, errors) {
            return propertyName;
          }
        }, {
          key: "normalizeStyleValue",
          value: function normalizeStyleValue(userProvidedProperty, normalizedProperty, value, errors) {
            return value;
          }
        }]);

        return NoopAnimationStyleNormalizer;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var WebAnimationsStyleNormalizer = /*#__PURE__*/function (_AnimationStyleNormal) {
        _inherits2(WebAnimationsStyleNormalizer, _AnimationStyleNormal);

        var _super371 = _createSuper(WebAnimationsStyleNormalizer);

        function WebAnimationsStyleNormalizer() {
          _classCallCheck2(this, WebAnimationsStyleNormalizer);

          return _super371.apply(this, arguments);
        }

        _createClass2(WebAnimationsStyleNormalizer, [{
          key: "normalizePropertyName",
          value: function normalizePropertyName(propertyName, errors) {
            return dashCaseToCamelCase(propertyName);
          }
        }, {
          key: "normalizeStyleValue",
          value: function normalizeStyleValue(userProvidedProperty, normalizedProperty, value, errors) {
            var unit = '';
            var strVal = value.toString().trim();

            if (DIMENSIONAL_PROP_MAP[normalizedProperty] && value !== 0 && value !== '0') {
              if (typeof value === 'number') {
                unit = 'px';
              } else {
                var valAndSuffixMatch = value.match(/^[+-]?[\d\.]+([a-z]*)$/);

                if (valAndSuffixMatch && valAndSuffixMatch[1].length == 0) {
                  errors.push("Please provide a CSS unit value for ".concat(userProvidedProperty, ":").concat(value));
                }
              }
            }

            return strVal + unit;
          }
        }]);

        return WebAnimationsStyleNormalizer;
      }(AnimationStyleNormalizer);

      var ɵ0$1 = function ɵ0$1() {
        return makeBooleanMap('width,height,minWidth,minHeight,maxWidth,maxHeight,left,top,bottom,right,fontSize,outlineWidth,outlineOffset,paddingTop,paddingLeft,paddingBottom,paddingRight,marginTop,marginLeft,marginBottom,marginRight,borderRadius,borderWidth,borderTopWidth,borderLeftWidth,borderRightWidth,borderBottomWidth,textIndent,perspective'.split(','));
      };

      var DIMENSIONAL_PROP_MAP = ɵ0$1();

      function makeBooleanMap(keys) {
        var map = {};
        keys.forEach(function (key) {
          return map[key] = true;
        });
        return map;
      }

      function createTransitionInstruction(element, triggerName, fromState, toState, isRemovalTransition, fromStyles, toStyles, timelines, queriedElements, preStyleProps, postStyleProps, totalTime, errors) {
        return {
          type: 0
          /* TransitionAnimation */
          ,
          element: element,
          triggerName: triggerName,
          isRemovalTransition: isRemovalTransition,
          fromState: fromState,
          fromStyles: fromStyles,
          toState: toState,
          toStyles: toStyles,
          timelines: timelines,
          queriedElements: queriedElements,
          preStyleProps: preStyleProps,
          postStyleProps: postStyleProps,
          totalTime: totalTime,
          errors: errors
        };
      }

      var EMPTY_OBJECT = {};

      var AnimationTransitionFactory = /*#__PURE__*/function () {
        function AnimationTransitionFactory(_triggerName, ast, _stateStyles) {
          _classCallCheck2(this, AnimationTransitionFactory);

          this._triggerName = _triggerName;
          this.ast = ast;
          this._stateStyles = _stateStyles;
        }

        _createClass2(AnimationTransitionFactory, [{
          key: "match",
          value: function match(currentState, nextState, element, params) {
            return oneOrMoreTransitionsMatch(this.ast.matchers, currentState, nextState, element, params);
          }
        }, {
          key: "buildStyles",
          value: function buildStyles(stateName, params, errors) {
            var backupStateStyler = this._stateStyles['*'];
            var stateStyler = this._stateStyles[stateName];
            var backupStyles = backupStateStyler ? backupStateStyler.buildStyles(params, errors) : {};
            return stateStyler ? stateStyler.buildStyles(params, errors) : backupStyles;
          }
        }, {
          key: "build",
          value: function build(driver, element, currentState, nextState, enterClassName, leaveClassName, currentOptions, nextOptions, subInstructions, skipAstBuild) {
            var errors = [];
            var transitionAnimationParams = this.ast.options && this.ast.options.params || EMPTY_OBJECT;
            var currentAnimationParams = currentOptions && currentOptions.params || EMPTY_OBJECT;
            var currentStateStyles = this.buildStyles(currentState, currentAnimationParams, errors);
            var nextAnimationParams = nextOptions && nextOptions.params || EMPTY_OBJECT;
            var nextStateStyles = this.buildStyles(nextState, nextAnimationParams, errors);
            var queriedElements = new Set();
            var preStyleMap = new Map();
            var postStyleMap = new Map();
            var isRemoval = nextState === 'void';
            var animationOptions = {
              params: Object.assign(Object.assign({}, transitionAnimationParams), nextAnimationParams)
            };
            var timelines = skipAstBuild ? [] : buildAnimationTimelines(driver, element, this.ast.animation, enterClassName, leaveClassName, currentStateStyles, nextStateStyles, animationOptions, subInstructions, errors);
            var totalTime = 0;
            timelines.forEach(function (tl) {
              totalTime = Math.max(tl.duration + tl.delay, totalTime);
            });

            if (errors.length) {
              return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, [], [], preStyleMap, postStyleMap, totalTime, errors);
            }

            timelines.forEach(function (tl) {
              var elm = tl.element;
              var preProps = getOrSetAsInMap(preStyleMap, elm, {});
              tl.preStyleProps.forEach(function (prop) {
                return preProps[prop] = true;
              });
              var postProps = getOrSetAsInMap(postStyleMap, elm, {});
              tl.postStyleProps.forEach(function (prop) {
                return postProps[prop] = true;
              });

              if (elm !== element) {
                queriedElements.add(elm);
              }
            });
            var queriedElementsList = iteratorToArray(queriedElements.values());
            return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, timelines, queriedElementsList, preStyleMap, postStyleMap, totalTime);
          }
        }]);

        return AnimationTransitionFactory;
      }();

      function oneOrMoreTransitionsMatch(matchFns, currentState, nextState, element, params) {
        return matchFns.some(function (fn) {
          return fn(currentState, nextState, element, params);
        });
      }

      var AnimationStateStyles = /*#__PURE__*/function () {
        function AnimationStateStyles(styles, defaultParams) {
          _classCallCheck2(this, AnimationStateStyles);

          this.styles = styles;
          this.defaultParams = defaultParams;
        }

        _createClass2(AnimationStateStyles, [{
          key: "buildStyles",
          value: function buildStyles(params, errors) {
            var finalStyles = {};
            var combinedParams = copyObj(this.defaultParams);
            Object.keys(params).forEach(function (key) {
              var value = params[key];

              if (value != null) {
                combinedParams[key] = value;
              }
            });
            this.styles.styles.forEach(function (value) {
              if (typeof value !== 'string') {
                var styleObj = value;
                Object.keys(styleObj).forEach(function (prop) {
                  var val = styleObj[prop];

                  if (val.length > 1) {
                    val = interpolateParams(val, combinedParams, errors);
                  }

                  finalStyles[prop] = val;
                });
              }
            });
            return finalStyles;
          }
        }]);

        return AnimationStateStyles;
      }();
      /**
       * @publicApi
       */


      function buildTrigger(name, ast) {
        return new AnimationTrigger(name, ast);
      }
      /**
       * @publicApi
       */


      var AnimationTrigger = /*#__PURE__*/function () {
        function AnimationTrigger(name, ast) {
          var _this895 = this;

          _classCallCheck2(this, AnimationTrigger);

          this.name = name;
          this.ast = ast;
          this.transitionFactories = [];
          this.states = {};
          ast.states.forEach(function (ast) {
            var defaultParams = ast.options && ast.options.params || {};
            _this895.states[ast.name] = new AnimationStateStyles(ast.style, defaultParams);
          });
          balanceProperties(this.states, 'true', '1');
          balanceProperties(this.states, 'false', '0');
          ast.transitions.forEach(function (ast) {
            _this895.transitionFactories.push(new AnimationTransitionFactory(name, ast, _this895.states));
          });
          this.fallbackTransition = createFallbackTransition(name, this.states);
        }

        _createClass2(AnimationTrigger, [{
          key: "containsQueries",
          get: function get() {
            return this.ast.queryCount > 0;
          }
        }, {
          key: "matchTransition",
          value: function matchTransition(currentState, nextState, element, params) {
            var entry = this.transitionFactories.find(function (f) {
              return f.match(currentState, nextState, element, params);
            });
            return entry || null;
          }
        }, {
          key: "matchStyles",
          value: function matchStyles(currentState, params, errors) {
            return this.fallbackTransition.buildStyles(currentState, params, errors);
          }
        }]);

        return AnimationTrigger;
      }();

      function createFallbackTransition(triggerName, states) {
        var matchers = [function (fromState, toState) {
          return true;
        }];
        var animation = {
          type: 2
          /* Sequence */
          ,
          steps: [],
          options: null
        };
        var transition = {
          type: 1
          /* Transition */
          ,
          animation: animation,
          matchers: matchers,
          options: null,
          queryCount: 0,
          depCount: 0
        };
        return new AnimationTransitionFactory(triggerName, transition, states);
      }

      function balanceProperties(obj, key1, key2) {
        if (obj.hasOwnProperty(key1)) {
          if (!obj.hasOwnProperty(key2)) {
            obj[key2] = obj[key1];
          }
        } else if (obj.hasOwnProperty(key2)) {
          obj[key1] = obj[key2];
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var EMPTY_INSTRUCTION_MAP = new ElementInstructionMap();

      var TimelineAnimationEngine = /*#__PURE__*/function () {
        function TimelineAnimationEngine(bodyNode, _driver, _normalizer) {
          _classCallCheck2(this, TimelineAnimationEngine);

          this.bodyNode = bodyNode;
          this._driver = _driver;
          this._normalizer = _normalizer;
          this._animations = {};
          this._playersById = {};
          this.players = [];
        }

        _createClass2(TimelineAnimationEngine, [{
          key: "register",
          value: function register(id, metadata) {
            var errors = [];
            var ast = buildAnimationAst(this._driver, metadata, errors);

            if (errors.length) {
              throw new Error("Unable to build the animation due to the following errors: ".concat(errors.join('\n')));
            } else {
              this._animations[id] = ast;
            }
          }
        }, {
          key: "_buildPlayer",
          value: function _buildPlayer(i, preStyles, postStyles) {
            var element = i.element;
            var keyframes = normalizeKeyframes(this._driver, this._normalizer, element, i.keyframes, preStyles, postStyles);
            return this._driver.animate(element, keyframes, i.duration, i.delay, i.easing, [], true);
          }
        }, {
          key: "create",
          value: function create(id, element) {
            var _this896 = this;

            var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
            var errors = [];
            var ast = this._animations[id];
            var instructions;
            var autoStylesMap = new Map();

            if (ast) {
              instructions = buildAnimationTimelines(this._driver, element, ast, ENTER_CLASSNAME, LEAVE_CLASSNAME, {}, {}, options, EMPTY_INSTRUCTION_MAP, errors);
              instructions.forEach(function (inst) {
                var styles = getOrSetAsInMap(autoStylesMap, inst.element, {});
                inst.postStyleProps.forEach(function (prop) {
                  return styles[prop] = null;
                });
              });
            } else {
              errors.push('The requested animation doesn\'t exist or has already been destroyed');
              instructions = [];
            }

            if (errors.length) {
              throw new Error("Unable to create the animation due to the following errors: ".concat(errors.join('\n')));
            }

            autoStylesMap.forEach(function (styles, element) {
              Object.keys(styles).forEach(function (prop) {
                styles[prop] = _this896._driver.computeStyle(element, prop, _angular_animations__WEBPACK_IMPORTED_MODULE_0__["AUTO_STYLE"]);
              });
            });
            var players = instructions.map(function (i) {
              var styles = autoStylesMap.get(i.element);
              return _this896._buildPlayer(i, {}, styles);
            });
            var player = optimizeGroupPlayer(players);
            this._playersById[id] = player;
            player.onDestroy(function () {
              return _this896.destroy(id);
            });
            this.players.push(player);
            return player;
          }
        }, {
          key: "destroy",
          value: function destroy(id) {
            var player = this._getPlayer(id);

            player.destroy();
            delete this._playersById[id];
            var index = this.players.indexOf(player);

            if (index >= 0) {
              this.players.splice(index, 1);
            }
          }
        }, {
          key: "_getPlayer",
          value: function _getPlayer(id) {
            var player = this._playersById[id];

            if (!player) {
              throw new Error("Unable to find the timeline player referenced by ".concat(id));
            }

            return player;
          }
        }, {
          key: "listen",
          value: function listen(id, element, eventName, callback) {
            // triggerName, fromState, toState are all ignored for timeline animations
            var baseEvent = makeAnimationEvent(element, '', '', '');
            listenOnPlayer(this._getPlayer(id), eventName, baseEvent, callback);
            return function () {};
          }
        }, {
          key: "command",
          value: function command(id, element, _command2, args) {
            if (_command2 == 'register') {
              this.register(id, args[0]);
              return;
            }

            if (_command2 == 'create') {
              var options = args[0] || {};
              this.create(id, element, options);
              return;
            }

            var player = this._getPlayer(id);

            switch (_command2) {
              case 'play':
                player.play();
                break;

              case 'pause':
                player.pause();
                break;

              case 'reset':
                player.reset();
                break;

              case 'restart':
                player.restart();
                break;

              case 'finish':
                player.finish();
                break;

              case 'init':
                player.init();
                break;

              case 'setPosition':
                player.setPosition(parseFloat(args[0]));
                break;

              case 'destroy':
                this.destroy(id);
                break;
            }
          }
        }]);

        return TimelineAnimationEngine;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var QUEUED_CLASSNAME = 'ng-animate-queued';
      var QUEUED_SELECTOR = '.ng-animate-queued';
      var DISABLED_CLASSNAME = 'ng-animate-disabled';
      var DISABLED_SELECTOR = '.ng-animate-disabled';
      var STAR_CLASSNAME = 'ng-star-inserted';
      var STAR_SELECTOR = '.ng-star-inserted';
      var EMPTY_PLAYER_ARRAY = [];
      var NULL_REMOVAL_STATE = {
        namespaceId: '',
        setForRemoval: false,
        setForMove: false,
        hasAnimation: false,
        removedBeforeQueried: false
      };
      var NULL_REMOVED_QUERIED_STATE = {
        namespaceId: '',
        setForMove: false,
        setForRemoval: false,
        hasAnimation: false,
        removedBeforeQueried: true
      };
      var REMOVAL_FLAG = '__ng_removed';

      var StateValue = /*#__PURE__*/function () {
        function StateValue(input) {
          var namespaceId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';

          _classCallCheck2(this, StateValue);

          this.namespaceId = namespaceId;
          var isObj = input && input.hasOwnProperty('value');
          var value = isObj ? input['value'] : input;
          this.value = normalizeTriggerValue(value);

          if (isObj) {
            var options = copyObj(input);
            delete options['value'];
            this.options = options;
          } else {
            this.options = {};
          }

          if (!this.options.params) {
            this.options.params = {};
          }
        }

        _createClass2(StateValue, [{
          key: "params",
          get: function get() {
            return this.options.params;
          }
        }, {
          key: "absorbOptions",
          value: function absorbOptions(options) {
            var newParams = options.params;

            if (newParams) {
              var oldParams = this.options.params;
              Object.keys(newParams).forEach(function (prop) {
                if (oldParams[prop] == null) {
                  oldParams[prop] = newParams[prop];
                }
              });
            }
          }
        }]);

        return StateValue;
      }();

      var VOID_VALUE = 'void';
      var DEFAULT_STATE_VALUE = new StateValue(VOID_VALUE);

      var AnimationTransitionNamespace = /*#__PURE__*/function () {
        function AnimationTransitionNamespace(id, hostElement, _engine) {
          _classCallCheck2(this, AnimationTransitionNamespace);

          this.id = id;
          this.hostElement = hostElement;
          this._engine = _engine;
          this.players = [];
          this._triggers = {};
          this._queue = [];
          this._elementListeners = new Map();
          this._hostClassName = 'ng-tns-' + id;
          addClass(hostElement, this._hostClassName);
        }

        _createClass2(AnimationTransitionNamespace, [{
          key: "listen",
          value: function listen(element, name, phase, callback) {
            var _this897 = this;

            if (!this._triggers.hasOwnProperty(name)) {
              throw new Error("Unable to listen on the animation trigger event \"".concat(phase, "\" because the animation trigger \"").concat(name, "\" doesn't exist!"));
            }

            if (phase == null || phase.length == 0) {
              throw new Error("Unable to listen on the animation trigger \"".concat(name, "\" because the provided event is undefined!"));
            }

            if (!isTriggerEventValid(phase)) {
              throw new Error("The provided animation trigger event \"".concat(phase, "\" for the animation trigger \"").concat(name, "\" is not supported!"));
            }

            var listeners = getOrSetAsInMap(this._elementListeners, element, []);
            var data = {
              name: name,
              phase: phase,
              callback: callback
            };
            listeners.push(data);
            var triggersWithStates = getOrSetAsInMap(this._engine.statesByElement, element, {});

            if (!triggersWithStates.hasOwnProperty(name)) {
              addClass(element, NG_TRIGGER_CLASSNAME);
              addClass(element, NG_TRIGGER_CLASSNAME + '-' + name);
              triggersWithStates[name] = DEFAULT_STATE_VALUE;
            }

            return function () {
              // the event listener is removed AFTER the flush has occurred such
              // that leave animations callbacks can fire (otherwise if the node
              // is removed in between then the listeners would be deregistered)
              _this897._engine.afterFlush(function () {
                var index = listeners.indexOf(data);

                if (index >= 0) {
                  listeners.splice(index, 1);
                }

                if (!_this897._triggers[name]) {
                  delete triggersWithStates[name];
                }
              });
            };
          }
        }, {
          key: "register",
          value: function register(name, ast) {
            if (this._triggers[name]) {
              // throw
              return false;
            } else {
              this._triggers[name] = ast;
              return true;
            }
          }
        }, {
          key: "_getTrigger",
          value: function _getTrigger(name) {
            var trigger = this._triggers[name];

            if (!trigger) {
              throw new Error("The provided animation trigger \"".concat(name, "\" has not been registered!"));
            }

            return trigger;
          }
        }, {
          key: "trigger",
          value: function trigger(element, triggerName, value) {
            var _this898 = this;

            var defaultToFallback = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;

            var trigger = this._getTrigger(triggerName);

            var player = new TransitionAnimationPlayer(this.id, triggerName, element);

            var triggersWithStates = this._engine.statesByElement.get(element);

            if (!triggersWithStates) {
              addClass(element, NG_TRIGGER_CLASSNAME);
              addClass(element, NG_TRIGGER_CLASSNAME + '-' + triggerName);

              this._engine.statesByElement.set(element, triggersWithStates = {});
            }

            var fromState = triggersWithStates[triggerName];
            var toState = new StateValue(value, this.id);
            var isObj = value && value.hasOwnProperty('value');

            if (!isObj && fromState) {
              toState.absorbOptions(fromState.options);
            }

            triggersWithStates[triggerName] = toState;

            if (!fromState) {
              fromState = DEFAULT_STATE_VALUE;
            }

            var isRemoval = toState.value === VOID_VALUE; // normally this isn't reached by here, however, if an object expression
            // is passed in then it may be a new object each time. Comparing the value
            // is important since that will stay the same despite there being a new object.
            // The removal arc here is special cased because the same element is triggered
            // twice in the event that it contains animations on the outer/inner portions
            // of the host container

            if (!isRemoval && fromState.value === toState.value) {
              // this means that despite the value not changing, some inner params
              // have changed which means that the animation final styles need to be applied
              if (!objEquals(fromState.params, toState.params)) {
                var errors = [];
                var fromStyles = trigger.matchStyles(fromState.value, fromState.params, errors);
                var toStyles = trigger.matchStyles(toState.value, toState.params, errors);

                if (errors.length) {
                  this._engine.reportError(errors);
                } else {
                  this._engine.afterFlush(function () {
                    eraseStyles(element, fromStyles);
                    setStyles(element, toStyles);
                  });
                }
              }

              return;
            }

            var playersOnElement = getOrSetAsInMap(this._engine.playersByElement, element, []);
            playersOnElement.forEach(function (player) {
              // only remove the player if it is queued on the EXACT same trigger/namespace
              // we only also deal with queued players here because if the animation has
              // started then we want to keep the player alive until the flush happens
              // (which is where the previousPlayers are passed into the new palyer)
              if (player.namespaceId == _this898.id && player.triggerName == triggerName && player.queued) {
                player.destroy();
              }
            });
            var transition = trigger.matchTransition(fromState.value, toState.value, element, toState.params);
            var isFallbackTransition = false;

            if (!transition) {
              if (!defaultToFallback) return;
              transition = trigger.fallbackTransition;
              isFallbackTransition = true;
            }

            this._engine.totalQueuedPlayers++;

            this._queue.push({
              element: element,
              triggerName: triggerName,
              transition: transition,
              fromState: fromState,
              toState: toState,
              player: player,
              isFallbackTransition: isFallbackTransition
            });

            if (!isFallbackTransition) {
              addClass(element, QUEUED_CLASSNAME);
              player.onStart(function () {
                removeClass(element, QUEUED_CLASSNAME);
              });
            }

            player.onDone(function () {
              var index = _this898.players.indexOf(player);

              if (index >= 0) {
                _this898.players.splice(index, 1);
              }

              var players = _this898._engine.playersByElement.get(element);

              if (players) {
                var _index6 = players.indexOf(player);

                if (_index6 >= 0) {
                  players.splice(_index6, 1);
                }
              }
            });
            this.players.push(player);
            playersOnElement.push(player);
            return player;
          }
        }, {
          key: "deregister",
          value: function deregister(name) {
            var _this899 = this;

            delete this._triggers[name];

            this._engine.statesByElement.forEach(function (stateMap, element) {
              delete stateMap[name];
            });

            this._elementListeners.forEach(function (listeners, element) {
              _this899._elementListeners.set(element, listeners.filter(function (entry) {
                return entry.name != name;
              }));
            });
          }
        }, {
          key: "clearElementCache",
          value: function clearElementCache(element) {
            this._engine.statesByElement["delete"](element);

            this._elementListeners["delete"](element);

            var elementPlayers = this._engine.playersByElement.get(element);

            if (elementPlayers) {
              elementPlayers.forEach(function (player) {
                return player.destroy();
              });

              this._engine.playersByElement["delete"](element);
            }
          }
        }, {
          key: "_signalRemovalForInnerTriggers",
          value: function _signalRemovalForInnerTriggers(rootElement, context) {
            var _this900 = this;

            var elements = this._engine.driver.query(rootElement, NG_TRIGGER_SELECTOR, true); // emulate a leave animation for all inner nodes within this node.
            // If there are no animations found for any of the nodes then clear the cache
            // for the element.


            elements.forEach(function (elm) {
              // this means that an inner remove() operation has already kicked off
              // the animation on this element...
              if (elm[REMOVAL_FLAG]) return;

              var namespaces = _this900._engine.fetchNamespacesByElement(elm);

              if (namespaces.size) {
                namespaces.forEach(function (ns) {
                  return ns.triggerLeaveAnimation(elm, context, false, true);
                });
              } else {
                _this900.clearElementCache(elm);
              }
            }); // If the child elements were removed along with the parent, their animations might not
            // have completed. Clear all the elements from the cache so we don't end up with a memory leak.

            this._engine.afterFlushAnimationsDone(function () {
              return elements.forEach(function (elm) {
                return _this900.clearElementCache(elm);
              });
            });
          }
        }, {
          key: "triggerLeaveAnimation",
          value: function triggerLeaveAnimation(element, context, destroyAfterComplete, defaultToFallback) {
            var _this901 = this;

            var triggerStates = this._engine.statesByElement.get(element);

            if (triggerStates) {
              var players = [];
              Object.keys(triggerStates).forEach(function (triggerName) {
                // this check is here in the event that an element is removed
                // twice (both on the host level and the component level)
                if (_this901._triggers[triggerName]) {
                  var player = _this901.trigger(element, triggerName, VOID_VALUE, defaultToFallback);

                  if (player) {
                    players.push(player);
                  }
                }
              });

              if (players.length) {
                this._engine.markElementAsRemoved(this.id, element, true, context);

                if (destroyAfterComplete) {
                  optimizeGroupPlayer(players).onDone(function () {
                    return _this901._engine.processLeaveNode(element);
                  });
                }

                return true;
              }
            }

            return false;
          }
        }, {
          key: "prepareLeaveAnimationListeners",
          value: function prepareLeaveAnimationListeners(element) {
            var _this902 = this;

            var listeners = this._elementListeners.get(element);

            var elementStates = this._engine.statesByElement.get(element); // if this statement fails then it means that the element was picked up
            // by an earlier flush (or there are no listeners at all to track the leave).


            if (listeners && elementStates) {
              var visitedTriggers = new Set();
              listeners.forEach(function (listener) {
                var triggerName = listener.name;
                if (visitedTriggers.has(triggerName)) return;
                visitedTriggers.add(triggerName);
                var trigger = _this902._triggers[triggerName];
                var transition = trigger.fallbackTransition;
                var fromState = elementStates[triggerName] || DEFAULT_STATE_VALUE;
                var toState = new StateValue(VOID_VALUE);
                var player = new TransitionAnimationPlayer(_this902.id, triggerName, element);
                _this902._engine.totalQueuedPlayers++;

                _this902._queue.push({
                  element: element,
                  triggerName: triggerName,
                  transition: transition,
                  fromState: fromState,
                  toState: toState,
                  player: player,
                  isFallbackTransition: true
                });
              });
            }
          }
        }, {
          key: "removeNode",
          value: function removeNode(element, context) {
            var _this903 = this;

            var engine = this._engine;

            if (element.childElementCount) {
              this._signalRemovalForInnerTriggers(element, context);
            } // this means that a * => VOID animation was detected and kicked off


            if (this.triggerLeaveAnimation(element, context, true)) return; // find the player that is animating and make sure that the
            // removal is delayed until that player has completed

            var containsPotentialParentTransition = false;

            if (engine.totalAnimations) {
              var currentPlayers = engine.players.length ? engine.playersByQueriedElement.get(element) : []; // when this `if statement` does not continue forward it means that
              // a previous animation query has selected the current element and
              // is animating it. In this situation want to continue forwards and
              // allow the element to be queued up for animation later.

              if (currentPlayers && currentPlayers.length) {
                containsPotentialParentTransition = true;
              } else {
                var parent = element;

                while (parent = parent.parentNode) {
                  var triggers = engine.statesByElement.get(parent);

                  if (triggers) {
                    containsPotentialParentTransition = true;
                    break;
                  }
                }
              }
            } // at this stage we know that the element will either get removed
            // during flush or will be picked up by a parent query. Either way
            // we need to fire the listeners for this element when it DOES get
            // removed (once the query parent animation is done or after flush)


            this.prepareLeaveAnimationListeners(element); // whether or not a parent has an animation we need to delay the deferral of the leave
            // operation until we have more information (which we do after flush() has been called)

            if (containsPotentialParentTransition) {
              engine.markElementAsRemoved(this.id, element, false, context);
            } else {
              var removalFlag = element[REMOVAL_FLAG];

              if (!removalFlag || removalFlag === NULL_REMOVAL_STATE) {
                // we do this after the flush has occurred such
                // that the callbacks can be fired
                engine.afterFlush(function () {
                  return _this903.clearElementCache(element);
                });
                engine.destroyInnerAnimations(element);

                engine._onRemovalComplete(element, context);
              }
            }
          }
        }, {
          key: "insertNode",
          value: function insertNode(element, parent) {
            addClass(element, this._hostClassName);
          }
        }, {
          key: "drainQueuedTransitions",
          value: function drainQueuedTransitions(microtaskId) {
            var _this904 = this;

            var instructions = [];

            this._queue.forEach(function (entry) {
              var player = entry.player;
              if (player.destroyed) return;
              var element = entry.element;

              var listeners = _this904._elementListeners.get(element);

              if (listeners) {
                listeners.forEach(function (listener) {
                  if (listener.name == entry.triggerName) {
                    var baseEvent = makeAnimationEvent(element, entry.triggerName, entry.fromState.value, entry.toState.value);
                    baseEvent['_data'] = microtaskId;
                    listenOnPlayer(entry.player, listener.phase, baseEvent, listener.callback);
                  }
                });
              }

              if (player.markedForDestroy) {
                _this904._engine.afterFlush(function () {
                  // now we can destroy the element properly since the event listeners have
                  // been bound to the player
                  player.destroy();
                });
              } else {
                instructions.push(entry);
              }
            });

            this._queue = [];
            return instructions.sort(function (a, b) {
              // if depCount == 0 them move to front
              // otherwise if a contains b then move back
              var d0 = a.transition.ast.depCount;
              var d1 = b.transition.ast.depCount;

              if (d0 == 0 || d1 == 0) {
                return d0 - d1;
              }

              return _this904._engine.driver.containsElement(a.element, b.element) ? 1 : -1;
            });
          }
        }, {
          key: "destroy",
          value: function destroy(context) {
            this.players.forEach(function (p) {
              return p.destroy();
            });

            this._signalRemovalForInnerTriggers(this.hostElement, context);
          }
        }, {
          key: "elementContainsData",
          value: function elementContainsData(element) {
            var containsData = false;
            if (this._elementListeners.has(element)) containsData = true;
            containsData = (this._queue.find(function (entry) {
              return entry.element === element;
            }) ? true : false) || containsData;
            return containsData;
          }
        }]);

        return AnimationTransitionNamespace;
      }();

      var TransitionAnimationEngine = /*#__PURE__*/function () {
        function TransitionAnimationEngine(bodyNode, driver, _normalizer) {
          _classCallCheck2(this, TransitionAnimationEngine);

          this.bodyNode = bodyNode;
          this.driver = driver;
          this._normalizer = _normalizer;
          this.players = [];
          this.newHostElements = new Map();
          this.playersByElement = new Map();
          this.playersByQueriedElement = new Map();
          this.statesByElement = new Map();
          this.disabledNodes = new Set();
          this.totalAnimations = 0;
          this.totalQueuedPlayers = 0;
          this._namespaceLookup = {};
          this._namespaceList = [];
          this._flushFns = [];
          this._whenQuietFns = [];
          this.namespacesByHostElement = new Map();
          this.collectedEnterElements = [];
          this.collectedLeaveElements = []; // this method is designed to be overridden by the code that uses this engine

          this.onRemovalComplete = function (element, context) {};
        }
        /** @internal */


        _createClass2(TransitionAnimationEngine, [{
          key: "_onRemovalComplete",
          value: function _onRemovalComplete(element, context) {
            this.onRemovalComplete(element, context);
          }
        }, {
          key: "queuedPlayers",
          get: function get() {
            var players = [];

            this._namespaceList.forEach(function (ns) {
              ns.players.forEach(function (player) {
                if (player.queued) {
                  players.push(player);
                }
              });
            });

            return players;
          }
        }, {
          key: "createNamespace",
          value: function createNamespace(namespaceId, hostElement) {
            var ns = new AnimationTransitionNamespace(namespaceId, hostElement, this);

            if (hostElement.parentNode) {
              this._balanceNamespaceList(ns, hostElement);
            } else {
              // defer this later until flush during when the host element has
              // been inserted so that we know exactly where to place it in
              // the namespace list
              this.newHostElements.set(hostElement, ns); // given that this host element is apart of the animation code, it
              // may or may not be inserted by a parent node that is an of an
              // animation renderer type. If this happens then we can still have
              // access to this item when we query for :enter nodes. If the parent
              // is a renderer then the set data-structure will normalize the entry

              this.collectEnterElement(hostElement);
            }

            return this._namespaceLookup[namespaceId] = ns;
          }
        }, {
          key: "_balanceNamespaceList",
          value: function _balanceNamespaceList(ns, hostElement) {
            var limit = this._namespaceList.length - 1;

            if (limit >= 0) {
              var found = false;

              for (var i = limit; i >= 0; i--) {
                var nextNamespace = this._namespaceList[i];

                if (this.driver.containsElement(nextNamespace.hostElement, hostElement)) {
                  this._namespaceList.splice(i + 1, 0, ns);

                  found = true;
                  break;
                }
              }

              if (!found) {
                this._namespaceList.splice(0, 0, ns);
              }
            } else {
              this._namespaceList.push(ns);
            }

            this.namespacesByHostElement.set(hostElement, ns);
            return ns;
          }
        }, {
          key: "register",
          value: function register(namespaceId, hostElement) {
            var ns = this._namespaceLookup[namespaceId];

            if (!ns) {
              ns = this.createNamespace(namespaceId, hostElement);
            }

            return ns;
          }
        }, {
          key: "registerTrigger",
          value: function registerTrigger(namespaceId, name, trigger) {
            var ns = this._namespaceLookup[namespaceId];

            if (ns && ns.register(name, trigger)) {
              this.totalAnimations++;
            }
          }
        }, {
          key: "destroy",
          value: function destroy(namespaceId, context) {
            var _this905 = this;

            if (!namespaceId) return;

            var ns = this._fetchNamespace(namespaceId);

            this.afterFlush(function () {
              _this905.namespacesByHostElement["delete"](ns.hostElement);

              delete _this905._namespaceLookup[namespaceId];

              var index = _this905._namespaceList.indexOf(ns);

              if (index >= 0) {
                _this905._namespaceList.splice(index, 1);
              }
            });
            this.afterFlushAnimationsDone(function () {
              return ns.destroy(context);
            });
          }
        }, {
          key: "_fetchNamespace",
          value: function _fetchNamespace(id) {
            return this._namespaceLookup[id];
          }
        }, {
          key: "fetchNamespacesByElement",
          value: function fetchNamespacesByElement(element) {
            // normally there should only be one namespace per element, however
            // if @triggers are placed on both the component element and then
            // its host element (within the component code) then there will be
            // two namespaces returned. We use a set here to simply the dedupe
            // of namespaces incase there are multiple triggers both the elm and host
            var namespaces = new Set();
            var elementStates = this.statesByElement.get(element);

            if (elementStates) {
              var keys = Object.keys(elementStates);

              for (var i = 0; i < keys.length; i++) {
                var nsId = elementStates[keys[i]].namespaceId;

                if (nsId) {
                  var ns = this._fetchNamespace(nsId);

                  if (ns) {
                    namespaces.add(ns);
                  }
                }
              }
            }

            return namespaces;
          }
        }, {
          key: "trigger",
          value: function trigger(namespaceId, element, name, value) {
            if (isElementNode(element)) {
              var ns = this._fetchNamespace(namespaceId);

              if (ns) {
                ns.trigger(element, name, value);
                return true;
              }
            }

            return false;
          }
        }, {
          key: "insertNode",
          value: function insertNode(namespaceId, element, parent, insertBefore) {
            if (!isElementNode(element)) return; // special case for when an element is removed and reinserted (move operation)
            // when this occurs we do not want to use the element for deletion later

            var details = element[REMOVAL_FLAG];

            if (details && details.setForRemoval) {
              details.setForRemoval = false;
              details.setForMove = true;
              var index = this.collectedLeaveElements.indexOf(element);

              if (index >= 0) {
                this.collectedLeaveElements.splice(index, 1);
              }
            } // in the event that the namespaceId is blank then the caller
            // code does not contain any animation code in it, but it is
            // just being called so that the node is marked as being inserted


            if (namespaceId) {
              var ns = this._fetchNamespace(namespaceId); // This if-statement is a workaround for router issue #21947.
              // The router sometimes hits a race condition where while a route
              // is being instantiated a new navigation arrives, triggering leave
              // animation of DOM that has not been fully initialized, until this
              // is resolved, we need to handle the scenario when DOM is not in a
              // consistent state during the animation.


              if (ns) {
                ns.insertNode(element, parent);
              }
            } // only *directives and host elements are inserted before


            if (insertBefore) {
              this.collectEnterElement(element);
            }
          }
        }, {
          key: "collectEnterElement",
          value: function collectEnterElement(element) {
            this.collectedEnterElements.push(element);
          }
        }, {
          key: "markElementAsDisabled",
          value: function markElementAsDisabled(element, value) {
            if (value) {
              if (!this.disabledNodes.has(element)) {
                this.disabledNodes.add(element);
                addClass(element, DISABLED_CLASSNAME);
              }
            } else if (this.disabledNodes.has(element)) {
              this.disabledNodes["delete"](element);
              removeClass(element, DISABLED_CLASSNAME);
            }
          }
        }, {
          key: "removeNode",
          value: function removeNode(namespaceId, element, isHostElement, context) {
            if (isElementNode(element)) {
              var ns = namespaceId ? this._fetchNamespace(namespaceId) : null;

              if (ns) {
                ns.removeNode(element, context);
              } else {
                this.markElementAsRemoved(namespaceId, element, false, context);
              }

              if (isHostElement) {
                var hostNS = this.namespacesByHostElement.get(element);

                if (hostNS && hostNS.id !== namespaceId) {
                  hostNS.removeNode(element, context);
                }
              }
            } else {
              this._onRemovalComplete(element, context);
            }
          }
        }, {
          key: "markElementAsRemoved",
          value: function markElementAsRemoved(namespaceId, element, hasAnimation, context) {
            this.collectedLeaveElements.push(element);
            element[REMOVAL_FLAG] = {
              namespaceId: namespaceId,
              setForRemoval: context,
              hasAnimation: hasAnimation,
              removedBeforeQueried: false
            };
          }
        }, {
          key: "listen",
          value: function listen(namespaceId, element, name, phase, callback) {
            if (isElementNode(element)) {
              return this._fetchNamespace(namespaceId).listen(element, name, phase, callback);
            }

            return function () {};
          }
        }, {
          key: "_buildInstruction",
          value: function _buildInstruction(entry, subTimelines, enterClassName, leaveClassName, skipBuildAst) {
            return entry.transition.build(this.driver, entry.element, entry.fromState.value, entry.toState.value, enterClassName, leaveClassName, entry.fromState.options, entry.toState.options, subTimelines, skipBuildAst);
          }
        }, {
          key: "destroyInnerAnimations",
          value: function destroyInnerAnimations(containerElement) {
            var _this906 = this;

            var elements = this.driver.query(containerElement, NG_TRIGGER_SELECTOR, true);
            elements.forEach(function (element) {
              return _this906.destroyActiveAnimationsForElement(element);
            });
            if (this.playersByQueriedElement.size == 0) return;
            elements = this.driver.query(containerElement, NG_ANIMATING_SELECTOR, true);
            elements.forEach(function (element) {
              return _this906.finishActiveQueriedAnimationOnElement(element);
            });
          }
        }, {
          key: "destroyActiveAnimationsForElement",
          value: function destroyActiveAnimationsForElement(element) {
            var players = this.playersByElement.get(element);

            if (players) {
              players.forEach(function (player) {
                // special case for when an element is set for destruction, but hasn't started.
                // in this situation we want to delay the destruction until the flush occurs
                // so that any event listeners attached to the player are triggered.
                if (player.queued) {
                  player.markedForDestroy = true;
                } else {
                  player.destroy();
                }
              });
            }
          }
        }, {
          key: "finishActiveQueriedAnimationOnElement",
          value: function finishActiveQueriedAnimationOnElement(element) {
            var players = this.playersByQueriedElement.get(element);

            if (players) {
              players.forEach(function (player) {
                return player.finish();
              });
            }
          }
        }, {
          key: "whenRenderingDone",
          value: function whenRenderingDone() {
            var _this907 = this;

            return new Promise(function (resolve) {
              if (_this907.players.length) {
                return optimizeGroupPlayer(_this907.players).onDone(function () {
                  return resolve();
                });
              } else {
                resolve();
              }
            });
          }
        }, {
          key: "processLeaveNode",
          value: function processLeaveNode(element) {
            var _this908 = this;

            var details = element[REMOVAL_FLAG];

            if (details && details.setForRemoval) {
              // this will prevent it from removing it twice
              element[REMOVAL_FLAG] = NULL_REMOVAL_STATE;

              if (details.namespaceId) {
                this.destroyInnerAnimations(element);

                var ns = this._fetchNamespace(details.namespaceId);

                if (ns) {
                  ns.clearElementCache(element);
                }
              }

              this._onRemovalComplete(element, details.setForRemoval);
            }

            if (this.driver.matchesElement(element, DISABLED_SELECTOR)) {
              this.markElementAsDisabled(element, false);
            }

            this.driver.query(element, DISABLED_SELECTOR, true).forEach(function (node) {
              _this908.markElementAsDisabled(node, false);
            });
          }
        }, {
          key: "flush",
          value: function flush() {
            var _this909 = this;

            var microtaskId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1;
            var players = [];

            if (this.newHostElements.size) {
              this.newHostElements.forEach(function (ns, element) {
                return _this909._balanceNamespaceList(ns, element);
              });
              this.newHostElements.clear();
            }

            if (this.totalAnimations && this.collectedEnterElements.length) {
              for (var i = 0; i < this.collectedEnterElements.length; i++) {
                var elm = this.collectedEnterElements[i];
                addClass(elm, STAR_CLASSNAME);
              }
            }

            if (this._namespaceList.length && (this.totalQueuedPlayers || this.collectedLeaveElements.length)) {
              var cleanupFns = [];

              try {
                players = this._flushAnimations(cleanupFns, microtaskId);
              } finally {
                for (var _i56 = 0; _i56 < cleanupFns.length; _i56++) {
                  cleanupFns[_i56]();
                }
              }
            } else {
              for (var _i57 = 0; _i57 < this.collectedLeaveElements.length; _i57++) {
                var element = this.collectedLeaveElements[_i57];
                this.processLeaveNode(element);
              }
            }

            this.totalQueuedPlayers = 0;
            this.collectedEnterElements.length = 0;
            this.collectedLeaveElements.length = 0;

            this._flushFns.forEach(function (fn) {
              return fn();
            });

            this._flushFns = [];

            if (this._whenQuietFns.length) {
              // we move these over to a variable so that
              // if any new callbacks are registered in another
              // flush they do not populate the existing set
              var quietFns = this._whenQuietFns;
              this._whenQuietFns = [];

              if (players.length) {
                optimizeGroupPlayer(players).onDone(function () {
                  quietFns.forEach(function (fn) {
                    return fn();
                  });
                });
              } else {
                quietFns.forEach(function (fn) {
                  return fn();
                });
              }
            }
          }
        }, {
          key: "reportError",
          value: function reportError(errors) {
            throw new Error("Unable to process animations due to the following failed trigger transitions\n ".concat(errors.join('\n')));
          }
        }, {
          key: "_flushAnimations",
          value: function _flushAnimations(cleanupFns, microtaskId) {
            var _this910 = this;

            var subTimelines = new ElementInstructionMap();
            var skippedPlayers = [];
            var skippedPlayersMap = new Map();
            var queuedInstructions = [];
            var queriedElements = new Map();
            var allPreStyleElements = new Map();
            var allPostStyleElements = new Map();
            var disabledElementsSet = new Set();
            this.disabledNodes.forEach(function (node) {
              disabledElementsSet.add(node);

              var nodesThatAreDisabled = _this910.driver.query(node, QUEUED_SELECTOR, true);

              for (var _i58 = 0; _i58 < nodesThatAreDisabled.length; _i58++) {
                disabledElementsSet.add(nodesThatAreDisabled[_i58]);
              }
            });
            var bodyNode = this.bodyNode;
            var allTriggerElements = Array.from(this.statesByElement.keys());
            var enterNodeMap = buildRootMap(allTriggerElements, this.collectedEnterElements); // this must occur before the instructions are built below such that
            // the :enter queries match the elements (since the timeline queries
            // are fired during instruction building).

            var enterNodeMapIds = new Map();
            var i = 0;
            enterNodeMap.forEach(function (nodes, root) {
              var className = ENTER_CLASSNAME + i++;
              enterNodeMapIds.set(root, className);
              nodes.forEach(function (node) {
                return addClass(node, className);
              });
            });
            var allLeaveNodes = [];
            var mergedLeaveNodes = new Set();
            var leaveNodesWithoutAnimations = new Set();

            for (var _i59 = 0; _i59 < this.collectedLeaveElements.length; _i59++) {
              var element = this.collectedLeaveElements[_i59];
              var details = element[REMOVAL_FLAG];

              if (details && details.setForRemoval) {
                allLeaveNodes.push(element);
                mergedLeaveNodes.add(element);

                if (details.hasAnimation) {
                  this.driver.query(element, STAR_SELECTOR, true).forEach(function (elm) {
                    return mergedLeaveNodes.add(elm);
                  });
                } else {
                  leaveNodesWithoutAnimations.add(element);
                }
              }
            }

            var leaveNodeMapIds = new Map();
            var leaveNodeMap = buildRootMap(allTriggerElements, Array.from(mergedLeaveNodes));
            leaveNodeMap.forEach(function (nodes, root) {
              var className = LEAVE_CLASSNAME + i++;
              leaveNodeMapIds.set(root, className);
              nodes.forEach(function (node) {
                return addClass(node, className);
              });
            });
            cleanupFns.push(function () {
              enterNodeMap.forEach(function (nodes, root) {
                var className = enterNodeMapIds.get(root);
                nodes.forEach(function (node) {
                  return removeClass(node, className);
                });
              });
              leaveNodeMap.forEach(function (nodes, root) {
                var className = leaveNodeMapIds.get(root);
                nodes.forEach(function (node) {
                  return removeClass(node, className);
                });
              });
              allLeaveNodes.forEach(function (element) {
                _this910.processLeaveNode(element);
              });
            });
            var allPlayers = [];
            var erroneousTransitions = [];

            for (var _i60 = this._namespaceList.length - 1; _i60 >= 0; _i60--) {
              var ns = this._namespaceList[_i60];
              ns.drainQueuedTransitions(microtaskId).forEach(function (entry) {
                var player = entry.player;
                var element = entry.element;
                allPlayers.push(player);

                if (_this910.collectedEnterElements.length) {
                  var _details = element[REMOVAL_FLAG]; // move animations are currently not supported...

                  if (_details && _details.setForMove) {
                    player.destroy();
                    return;
                  }
                }

                var nodeIsOrphaned = !bodyNode || !_this910.driver.containsElement(bodyNode, element);
                var leaveClassName = leaveNodeMapIds.get(element);
                var enterClassName = enterNodeMapIds.get(element);

                var instruction = _this910._buildInstruction(entry, subTimelines, enterClassName, leaveClassName, nodeIsOrphaned);

                if (instruction.errors && instruction.errors.length) {
                  erroneousTransitions.push(instruction);
                  return;
                } // even though the element may not be apart of the DOM, it may
                // still be added at a later point (due to the mechanics of content
                // projection and/or dynamic component insertion) therefore it's
                // important we still style the element.


                if (nodeIsOrphaned) {
                  player.onStart(function () {
                    return eraseStyles(element, instruction.fromStyles);
                  });
                  player.onDestroy(function () {
                    return setStyles(element, instruction.toStyles);
                  });
                  skippedPlayers.push(player);
                  return;
                } // if a unmatched transition is queued to go then it SHOULD NOT render
                // an animation and cancel the previously running animations.


                if (entry.isFallbackTransition) {
                  player.onStart(function () {
                    return eraseStyles(element, instruction.fromStyles);
                  });
                  player.onDestroy(function () {
                    return setStyles(element, instruction.toStyles);
                  });
                  skippedPlayers.push(player);
                  return;
                } // this means that if a parent animation uses this animation as a sub trigger
                // then it will instruct the timeline builder to not add a player delay, but
                // instead stretch the first keyframe gap up until the animation starts. The
                // reason this is important is to prevent extra initialization styles from being
                // required by the user in the animation.


                instruction.timelines.forEach(function (tl) {
                  return tl.stretchStartingKeyframe = true;
                });
                subTimelines.append(element, instruction.timelines);
                var tuple = {
                  instruction: instruction,
                  player: player,
                  element: element
                };
                queuedInstructions.push(tuple);
                instruction.queriedElements.forEach(function (element) {
                  return getOrSetAsInMap(queriedElements, element, []).push(player);
                });
                instruction.preStyleProps.forEach(function (stringMap, element) {
                  var props = Object.keys(stringMap);

                  if (props.length) {
                    var setVal = allPreStyleElements.get(element);

                    if (!setVal) {
                      allPreStyleElements.set(element, setVal = new Set());
                    }

                    props.forEach(function (prop) {
                      return setVal.add(prop);
                    });
                  }
                });
                instruction.postStyleProps.forEach(function (stringMap, element) {
                  var props = Object.keys(stringMap);
                  var setVal = allPostStyleElements.get(element);

                  if (!setVal) {
                    allPostStyleElements.set(element, setVal = new Set());
                  }

                  props.forEach(function (prop) {
                    return setVal.add(prop);
                  });
                });
              });
            }

            if (erroneousTransitions.length) {
              var errors = [];
              erroneousTransitions.forEach(function (instruction) {
                errors.push("@".concat(instruction.triggerName, " has failed due to:\n"));
                instruction.errors.forEach(function (error) {
                  return errors.push("- ".concat(error, "\n"));
                });
              });
              allPlayers.forEach(function (player) {
                return player.destroy();
              });
              this.reportError(errors);
            }

            var allPreviousPlayersMap = new Map(); // this map works to tell which element in the DOM tree is contained by
            // which animation. Further down below this map will get populated once
            // the players are built and in doing so it can efficiently figure out
            // if a sub player is skipped due to a parent player having priority.

            var animationElementMap = new Map();
            queuedInstructions.forEach(function (entry) {
              var element = entry.element;

              if (subTimelines.has(element)) {
                animationElementMap.set(element, element);

                _this910._beforeAnimationBuild(entry.player.namespaceId, entry.instruction, allPreviousPlayersMap);
              }
            });
            skippedPlayers.forEach(function (player) {
              var element = player.element;

              var previousPlayers = _this910._getPreviousPlayers(element, false, player.namespaceId, player.triggerName, null);

              previousPlayers.forEach(function (prevPlayer) {
                getOrSetAsInMap(allPreviousPlayersMap, element, []).push(prevPlayer);
                prevPlayer.destroy();
              });
            }); // this is a special case for nodes that will be removed (either by)
            // having their own leave animations or by being queried in a container
            // that will be removed once a parent animation is complete. The idea
            // here is that * styles must be identical to ! styles because of
            // backwards compatibility (* is also filled in by default in many places).
            // Otherwise * styles will return an empty value or auto since the element
            // that is being getComputedStyle'd will not be visible (since * = destination)

            var replaceNodes = allLeaveNodes.filter(function (node) {
              return replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements);
            }); // POST STAGE: fill the * styles

            var postStylesMap = new Map();
            var allLeaveQueriedNodes = cloakAndComputeStyles(postStylesMap, this.driver, leaveNodesWithoutAnimations, allPostStyleElements, _angular_animations__WEBPACK_IMPORTED_MODULE_0__["AUTO_STYLE"]);
            allLeaveQueriedNodes.forEach(function (node) {
              if (replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements)) {
                replaceNodes.push(node);
              }
            }); // PRE STAGE: fill the ! styles

            var preStylesMap = new Map();
            enterNodeMap.forEach(function (nodes, root) {
              cloakAndComputeStyles(preStylesMap, _this910.driver, new Set(nodes), allPreStyleElements, _angular_animations__WEBPACK_IMPORTED_MODULE_0__["ɵPRE_STYLE"]);
            });
            replaceNodes.forEach(function (node) {
              var post = postStylesMap.get(node);
              var pre = preStylesMap.get(node);
              postStylesMap.set(node, Object.assign(Object.assign({}, post), pre));
            });
            var rootPlayers = [];
            var subPlayers = [];
            var NO_PARENT_ANIMATION_ELEMENT_DETECTED = {};
            queuedInstructions.forEach(function (entry) {
              var element = entry.element,
                  player = entry.player,
                  instruction = entry.instruction; // this means that it was never consumed by a parent animation which
              // means that it is independent and therefore should be set for animation

              if (subTimelines.has(element)) {
                if (disabledElementsSet.has(element)) {
                  player.onDestroy(function () {
                    return setStyles(element, instruction.toStyles);
                  });
                  player.disabled = true;
                  player.overrideTotalTime(instruction.totalTime);
                  skippedPlayers.push(player);
                  return;
                } // this will flow up the DOM and query the map to figure out
                // if a parent animation has priority over it. In the situation
                // that a parent is detected then it will cancel the loop. If
                // nothing is detected, or it takes a few hops to find a parent,
                // then it will fill in the missing nodes and signal them as having
                // a detected parent (or a NO_PARENT value via a special constant).


                var parentWithAnimation = NO_PARENT_ANIMATION_ELEMENT_DETECTED;

                if (animationElementMap.size > 1) {
                  var elm = element;
                  var parentsToAdd = [];

                  while (elm = elm.parentNode) {
                    var detectedParent = animationElementMap.get(elm);

                    if (detectedParent) {
                      parentWithAnimation = detectedParent;
                      break;
                    }

                    parentsToAdd.push(elm);
                  }

                  parentsToAdd.forEach(function (parent) {
                    return animationElementMap.set(parent, parentWithAnimation);
                  });
                }

                var innerPlayer = _this910._buildAnimation(player.namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap);

                player.setRealPlayer(innerPlayer);

                if (parentWithAnimation === NO_PARENT_ANIMATION_ELEMENT_DETECTED) {
                  rootPlayers.push(player);
                } else {
                  var parentPlayers = _this910.playersByElement.get(parentWithAnimation);

                  if (parentPlayers && parentPlayers.length) {
                    player.parentPlayer = optimizeGroupPlayer(parentPlayers);
                  }

                  skippedPlayers.push(player);
                }
              } else {
                eraseStyles(element, instruction.fromStyles);
                player.onDestroy(function () {
                  return setStyles(element, instruction.toStyles);
                }); // there still might be a ancestor player animating this
                // element therefore we will still add it as a sub player
                // even if its animation may be disabled

                subPlayers.push(player);

                if (disabledElementsSet.has(element)) {
                  skippedPlayers.push(player);
                }
              }
            }); // find all of the sub players' corresponding inner animation player

            subPlayers.forEach(function (player) {
              // even if any players are not found for a sub animation then it
              // will still complete itself after the next tick since it's Noop
              var playersForElement = skippedPlayersMap.get(player.element);

              if (playersForElement && playersForElement.length) {
                var innerPlayer = optimizeGroupPlayer(playersForElement);
                player.setRealPlayer(innerPlayer);
              }
            }); // the reason why we don't actually play the animation is
            // because all that a skipped player is designed to do is to
            // fire the start/done transition callback events

            skippedPlayers.forEach(function (player) {
              if (player.parentPlayer) {
                player.syncPlayerEvents(player.parentPlayer);
              } else {
                player.destroy();
              }
            }); // run through all of the queued removals and see if they
            // were picked up by a query. If not then perform the removal
            // operation right away unless a parent animation is ongoing.

            for (var _i61 = 0; _i61 < allLeaveNodes.length; _i61++) {
              var _element2 = allLeaveNodes[_i61];
              var _details2 = _element2[REMOVAL_FLAG];
              removeClass(_element2, LEAVE_CLASSNAME); // this means the element has a removal animation that is being
              // taken care of and therefore the inner elements will hang around
              // until that animation is over (or the parent queried animation)

              if (_details2 && _details2.hasAnimation) continue;
              var players = []; // if this element is queried or if it contains queried children
              // then we want for the element not to be removed from the page
              // until the queried animations have finished

              if (queriedElements.size) {
                var queriedPlayerResults = queriedElements.get(_element2);

                if (queriedPlayerResults && queriedPlayerResults.length) {
                  players.push.apply(players, _toConsumableArray(queriedPlayerResults));
                }

                var queriedInnerElements = this.driver.query(_element2, NG_ANIMATING_SELECTOR, true);

                for (var j = 0; j < queriedInnerElements.length; j++) {
                  var queriedPlayers = queriedElements.get(queriedInnerElements[j]);

                  if (queriedPlayers && queriedPlayers.length) {
                    players.push.apply(players, _toConsumableArray(queriedPlayers));
                  }
                }
              }

              var activePlayers = players.filter(function (p) {
                return !p.destroyed;
              });

              if (activePlayers.length) {
                removeNodesAfterAnimationDone(this, _element2, activePlayers);
              } else {
                this.processLeaveNode(_element2);
              }
            } // this is required so the cleanup method doesn't remove them


            allLeaveNodes.length = 0;
            rootPlayers.forEach(function (player) {
              _this910.players.push(player);

              player.onDone(function () {
                player.destroy();

                var index = _this910.players.indexOf(player);

                _this910.players.splice(index, 1);
              });
              player.play();
            });
            return rootPlayers;
          }
        }, {
          key: "elementContainsData",
          value: function elementContainsData(namespaceId, element) {
            var containsData = false;
            var details = element[REMOVAL_FLAG];
            if (details && details.setForRemoval) containsData = true;
            if (this.playersByElement.has(element)) containsData = true;
            if (this.playersByQueriedElement.has(element)) containsData = true;
            if (this.statesByElement.has(element)) containsData = true;
            return this._fetchNamespace(namespaceId).elementContainsData(element) || containsData;
          }
        }, {
          key: "afterFlush",
          value: function afterFlush(callback) {
            this._flushFns.push(callback);
          }
        }, {
          key: "afterFlushAnimationsDone",
          value: function afterFlushAnimationsDone(callback) {
            this._whenQuietFns.push(callback);
          }
        }, {
          key: "_getPreviousPlayers",
          value: function _getPreviousPlayers(element, isQueriedElement, namespaceId, triggerName, toStateValue) {
            var players = [];

            if (isQueriedElement) {
              var queriedElementPlayers = this.playersByQueriedElement.get(element);

              if (queriedElementPlayers) {
                players = queriedElementPlayers;
              }
            } else {
              var elementPlayers = this.playersByElement.get(element);

              if (elementPlayers) {
                var isRemovalAnimation = !toStateValue || toStateValue == VOID_VALUE;
                elementPlayers.forEach(function (player) {
                  if (player.queued) return;
                  if (!isRemovalAnimation && player.triggerName != triggerName) return;
                  players.push(player);
                });
              }
            }

            if (namespaceId || triggerName) {
              players = players.filter(function (player) {
                if (namespaceId && namespaceId != player.namespaceId) return false;
                if (triggerName && triggerName != player.triggerName) return false;
                return true;
              });
            }

            return players;
          }
        }, {
          key: "_beforeAnimationBuild",
          value: function _beforeAnimationBuild(namespaceId, instruction, allPreviousPlayersMap) {
            var _this911 = this;

            var triggerName = instruction.triggerName;
            var rootElement = instruction.element; // when a removal animation occurs, ALL previous players are collected
            // and destroyed (even if they are outside of the current namespace)

            var targetNameSpaceId = instruction.isRemovalTransition ? undefined : namespaceId;
            var targetTriggerName = instruction.isRemovalTransition ? undefined : triggerName;

            var _iterator103 = _createForOfIteratorHelper(instruction.timelines),
                _step102;

            try {
              var _loop14 = function _loop14() {
                var timelineInstruction = _step102.value;
                var element = timelineInstruction.element;
                var isQueriedElement = element !== rootElement;
                var players = getOrSetAsInMap(allPreviousPlayersMap, element, []);

                var previousPlayers = _this911._getPreviousPlayers(element, isQueriedElement, targetNameSpaceId, targetTriggerName, instruction.toState);

                previousPlayers.forEach(function (player) {
                  var realPlayer = player.getRealPlayer();

                  if (realPlayer.beforeDestroy) {
                    realPlayer.beforeDestroy();
                  }

                  player.destroy();
                  players.push(player);
                });
              };

              for (_iterator103.s(); !(_step102 = _iterator103.n()).done;) {
                _loop14();
              } // this needs to be done so that the PRE/POST styles can be
              // computed properly without interfering with the previous animation

            } catch (err) {
              _iterator103.e(err);
            } finally {
              _iterator103.f();
            }

            eraseStyles(rootElement, instruction.fromStyles);
          }
        }, {
          key: "_buildAnimation",
          value: function _buildAnimation(namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap) {
            var _this912 = this;

            var triggerName = instruction.triggerName;
            var rootElement = instruction.element; // we first run this so that the previous animation player
            // data can be passed into the successive animation players

            var allQueriedPlayers = [];
            var allConsumedElements = new Set();
            var allSubElements = new Set();
            var allNewPlayers = instruction.timelines.map(function (timelineInstruction) {
              var element = timelineInstruction.element;
              allConsumedElements.add(element); // FIXME (matsko): make sure to-be-removed animations are removed properly

              var details = element[REMOVAL_FLAG];
              if (details && details.removedBeforeQueried) return new _angular_animations__WEBPACK_IMPORTED_MODULE_0__["NoopAnimationPlayer"](timelineInstruction.duration, timelineInstruction.delay);
              var isQueriedElement = element !== rootElement;
              var previousPlayers = flattenGroupPlayers((allPreviousPlayersMap.get(element) || EMPTY_PLAYER_ARRAY).map(function (p) {
                return p.getRealPlayer();
              })).filter(function (p) {
                // the `element` is not apart of the AnimationPlayer definition, but
                // Mock/WebAnimations
                // use the element within their implementation. This will be added in Angular5 to
                // AnimationPlayer
                var pp = p;
                return pp.element ? pp.element === element : false;
              });
              var preStyles = preStylesMap.get(element);
              var postStyles = postStylesMap.get(element);
              var keyframes = normalizeKeyframes(_this912.driver, _this912._normalizer, element, timelineInstruction.keyframes, preStyles, postStyles);

              var player = _this912._buildPlayer(timelineInstruction, keyframes, previousPlayers); // this means that this particular player belongs to a sub trigger. It is
              // important that we match this player up with the corresponding (@trigger.listener)


              if (timelineInstruction.subTimeline && skippedPlayersMap) {
                allSubElements.add(element);
              }

              if (isQueriedElement) {
                var wrappedPlayer = new TransitionAnimationPlayer(namespaceId, triggerName, element);
                wrappedPlayer.setRealPlayer(player);
                allQueriedPlayers.push(wrappedPlayer);
              }

              return player;
            });
            allQueriedPlayers.forEach(function (player) {
              getOrSetAsInMap(_this912.playersByQueriedElement, player.element, []).push(player);
              player.onDone(function () {
                return deleteOrUnsetInMap(_this912.playersByQueriedElement, player.element, player);
              });
            });
            allConsumedElements.forEach(function (element) {
              return addClass(element, NG_ANIMATING_CLASSNAME);
            });
            var player = optimizeGroupPlayer(allNewPlayers);
            player.onDestroy(function () {
              allConsumedElements.forEach(function (element) {
                return removeClass(element, NG_ANIMATING_CLASSNAME);
              });
              setStyles(rootElement, instruction.toStyles);
            }); // this basically makes all of the callbacks for sub element animations
            // be dependent on the upper players for when they finish

            allSubElements.forEach(function (element) {
              getOrSetAsInMap(skippedPlayersMap, element, []).push(player);
            });
            return player;
          }
        }, {
          key: "_buildPlayer",
          value: function _buildPlayer(instruction, keyframes, previousPlayers) {
            if (keyframes.length > 0) {
              return this.driver.animate(instruction.element, keyframes, instruction.duration, instruction.delay, instruction.easing, previousPlayers);
            } // special case for when an empty transition|definition is provided
            // ... there is no point in rendering an empty animation


            return new _angular_animations__WEBPACK_IMPORTED_MODULE_0__["NoopAnimationPlayer"](instruction.duration, instruction.delay);
          }
        }]);

        return TransitionAnimationEngine;
      }();

      var TransitionAnimationPlayer = /*#__PURE__*/function () {
        function TransitionAnimationPlayer(namespaceId, triggerName, element) {
          _classCallCheck2(this, TransitionAnimationPlayer);

          this.namespaceId = namespaceId;
          this.triggerName = triggerName;
          this.element = element;
          this._player = new _angular_animations__WEBPACK_IMPORTED_MODULE_0__["NoopAnimationPlayer"]();
          this._containsRealPlayer = false;
          this._queuedCallbacks = {};
          this.destroyed = false;
          this.markedForDestroy = false;
          this.disabled = false;
          this.queued = true;
          this.totalTime = 0;
        }

        _createClass2(TransitionAnimationPlayer, [{
          key: "setRealPlayer",
          value: function setRealPlayer(player) {
            var _this913 = this;

            if (this._containsRealPlayer) return;
            this._player = player;
            Object.keys(this._queuedCallbacks).forEach(function (phase) {
              _this913._queuedCallbacks[phase].forEach(function (callback) {
                return listenOnPlayer(player, phase, undefined, callback);
              });
            });
            this._queuedCallbacks = {};
            this._containsRealPlayer = true;
            this.overrideTotalTime(player.totalTime);
            this.queued = false;
          }
        }, {
          key: "getRealPlayer",
          value: function getRealPlayer() {
            return this._player;
          }
        }, {
          key: "overrideTotalTime",
          value: function overrideTotalTime(totalTime) {
            this.totalTime = totalTime;
          }
        }, {
          key: "syncPlayerEvents",
          value: function syncPlayerEvents(player) {
            var _this914 = this;

            var p = this._player;

            if (p.triggerCallback) {
              player.onStart(function () {
                return p.triggerCallback('start');
              });
            }

            player.onDone(function () {
              return _this914.finish();
            });
            player.onDestroy(function () {
              return _this914.destroy();
            });
          }
        }, {
          key: "_queueEvent",
          value: function _queueEvent(name, callback) {
            getOrSetAsInMap(this._queuedCallbacks, name, []).push(callback);
          }
        }, {
          key: "onDone",
          value: function onDone(fn) {
            if (this.queued) {
              this._queueEvent('done', fn);
            }

            this._player.onDone(fn);
          }
        }, {
          key: "onStart",
          value: function onStart(fn) {
            if (this.queued) {
              this._queueEvent('start', fn);
            }

            this._player.onStart(fn);
          }
        }, {
          key: "onDestroy",
          value: function onDestroy(fn) {
            if (this.queued) {
              this._queueEvent('destroy', fn);
            }

            this._player.onDestroy(fn);
          }
        }, {
          key: "init",
          value: function init() {
            this._player.init();
          }
        }, {
          key: "hasStarted",
          value: function hasStarted() {
            return this.queued ? false : this._player.hasStarted();
          }
        }, {
          key: "play",
          value: function play() {
            !this.queued && this._player.play();
          }
        }, {
          key: "pause",
          value: function pause() {
            !this.queued && this._player.pause();
          }
        }, {
          key: "restart",
          value: function restart() {
            !this.queued && this._player.restart();
          }
        }, {
          key: "finish",
          value: function finish() {
            this._player.finish();
          }
        }, {
          key: "destroy",
          value: function destroy() {
            this.destroyed = true;

            this._player.destroy();
          }
        }, {
          key: "reset",
          value: function reset() {
            !this.queued && this._player.reset();
          }
        }, {
          key: "setPosition",
          value: function setPosition(p) {
            if (!this.queued) {
              this._player.setPosition(p);
            }
          }
        }, {
          key: "getPosition",
          value: function getPosition() {
            return this.queued ? 0 : this._player.getPosition();
          }
          /** @internal */

        }, {
          key: "triggerCallback",
          value: function triggerCallback(phaseName) {
            var p = this._player;

            if (p.triggerCallback) {
              p.triggerCallback(phaseName);
            }
          }
        }]);

        return TransitionAnimationPlayer;
      }();

      function deleteOrUnsetInMap(map, key, value) {
        var currentValues;

        if (map instanceof Map) {
          currentValues = map.get(key);

          if (currentValues) {
            if (currentValues.length) {
              var index = currentValues.indexOf(value);
              currentValues.splice(index, 1);
            }

            if (currentValues.length == 0) {
              map["delete"](key);
            }
          }
        } else {
          currentValues = map[key];

          if (currentValues) {
            if (currentValues.length) {
              var _index7 = currentValues.indexOf(value);

              currentValues.splice(_index7, 1);
            }

            if (currentValues.length == 0) {
              delete map[key];
            }
          }
        }

        return currentValues;
      }

      function normalizeTriggerValue(value) {
        // we use `!= null` here because it's the most simple
        // way to test against a "falsy" value without mixing
        // in empty strings or a zero value. DO NOT OPTIMIZE.
        return value != null ? value : null;
      }

      function isElementNode(node) {
        return node && node['nodeType'] === 1;
      }

      function isTriggerEventValid(eventName) {
        return eventName == 'start' || eventName == 'done';
      }

      function cloakElement(element, value) {
        var oldValue = element.style.display;
        element.style.display = value != null ? value : 'none';
        return oldValue;
      }

      function cloakAndComputeStyles(valuesMap, driver, elements, elementPropsMap, defaultStyle) {
        var cloakVals = [];
        elements.forEach(function (element) {
          return cloakVals.push(cloakElement(element));
        });
        var failedElements = [];
        elementPropsMap.forEach(function (props, element) {
          var styles = {};
          props.forEach(function (prop) {
            var value = styles[prop] = driver.computeStyle(element, prop, defaultStyle); // there is no easy way to detect this because a sub element could be removed
            // by a parent animation element being detached.

            if (!value || value.length == 0) {
              element[REMOVAL_FLAG] = NULL_REMOVED_QUERIED_STATE;
              failedElements.push(element);
            }
          });
          valuesMap.set(element, styles);
        }); // we use a index variable here since Set.forEach(a, i) does not return
        // an index value for the closure (but instead just the value)

        var i = 0;
        elements.forEach(function (element) {
          return cloakElement(element, cloakVals[i++]);
        });
        return failedElements;
      }
      /*
      Since the Angular renderer code will return a collection of inserted
      nodes in all areas of a DOM tree, it's up to this algorithm to figure
      out which nodes are roots for each animation @trigger.
      
      By placing each inserted node into a Set and traversing upwards, it
      is possible to find the @trigger elements and well any direct *star
      insertion nodes, if a @trigger root is found then the enter element
      is placed into the Map[@trigger] spot.
       */


      function buildRootMap(roots, nodes) {
        var rootMap = new Map();
        roots.forEach(function (root) {
          return rootMap.set(root, []);
        });
        if (nodes.length == 0) return rootMap;
        var NULL_NODE = 1;
        var nodeSet = new Set(nodes);
        var localRootMap = new Map();

        function getRoot(node) {
          if (!node) return NULL_NODE;
          var root = localRootMap.get(node);
          if (root) return root;
          var parent = node.parentNode;

          if (rootMap.has(parent)) {
            // ngIf inside @trigger
            root = parent;
          } else if (nodeSet.has(parent)) {
            // ngIf inside ngIf
            root = NULL_NODE;
          } else {
            // recurse upwards
            root = getRoot(parent);
          }

          localRootMap.set(node, root);
          return root;
        }

        nodes.forEach(function (node) {
          var root = getRoot(node);

          if (root !== NULL_NODE) {
            rootMap.get(root).push(node);
          }
        });
        return rootMap;
      }

      var CLASSES_CACHE_KEY = '$$classes';

      function containsClass(element, className) {
        if (element.classList) {
          return element.classList.contains(className);
        } else {
          var classes = element[CLASSES_CACHE_KEY];
          return classes && classes[className];
        }
      }

      function addClass(element, className) {
        if (element.classList) {
          element.classList.add(className);
        } else {
          var classes = element[CLASSES_CACHE_KEY];

          if (!classes) {
            classes = element[CLASSES_CACHE_KEY] = {};
          }

          classes[className] = true;
        }
      }

      function removeClass(element, className) {
        if (element.classList) {
          element.classList.remove(className);
        } else {
          var classes = element[CLASSES_CACHE_KEY];

          if (classes) {
            delete classes[className];
          }
        }
      }

      function removeNodesAfterAnimationDone(engine, element, players) {
        optimizeGroupPlayer(players).onDone(function () {
          return engine.processLeaveNode(element);
        });
      }

      function flattenGroupPlayers(players) {
        var finalPlayers = [];

        _flattenGroupPlayersRecur(players, finalPlayers);

        return finalPlayers;
      }

      function _flattenGroupPlayersRecur(players, finalPlayers) {
        for (var i = 0; i < players.length; i++) {
          var player = players[i];

          if (player instanceof _angular_animations__WEBPACK_IMPORTED_MODULE_0__["ɵAnimationGroupPlayer"]) {
            _flattenGroupPlayersRecur(player.players, finalPlayers);
          } else {
            finalPlayers.push(player);
          }
        }
      }

      function objEquals(a, b) {
        var k1 = Object.keys(a);
        var k2 = Object.keys(b);
        if (k1.length != k2.length) return false;

        for (var i = 0; i < k1.length; i++) {
          var prop = k1[i];
          if (!b.hasOwnProperty(prop) || a[prop] !== b[prop]) return false;
        }

        return true;
      }

      function replacePostStylesAsPre(element, allPreStyleElements, allPostStyleElements) {
        var postEntry = allPostStyleElements.get(element);
        if (!postEntry) return false;
        var preEntry = allPreStyleElements.get(element);

        if (preEntry) {
          postEntry.forEach(function (data) {
            return preEntry.add(data);
          });
        } else {
          allPreStyleElements.set(element, postEntry);
        }

        allPostStyleElements["delete"](element);
        return true;
      }

      var AnimationEngine = /*#__PURE__*/function () {
        function AnimationEngine(bodyNode, _driver, normalizer) {
          var _this915 = this;

          _classCallCheck2(this, AnimationEngine);

          this.bodyNode = bodyNode;
          this._driver = _driver;
          this._triggerCache = {}; // this method is designed to be overridden by the code that uses this engine

          this.onRemovalComplete = function (element, context) {};

          this._transitionEngine = new TransitionAnimationEngine(bodyNode, _driver, normalizer);
          this._timelineEngine = new TimelineAnimationEngine(bodyNode, _driver, normalizer);

          this._transitionEngine.onRemovalComplete = function (element, context) {
            return _this915.onRemovalComplete(element, context);
          };
        }

        _createClass2(AnimationEngine, [{
          key: "registerTrigger",
          value: function registerTrigger(componentId, namespaceId, hostElement, name, metadata) {
            var cacheKey = componentId + '-' + name;
            var trigger = this._triggerCache[cacheKey];

            if (!trigger) {
              var errors = [];
              var ast = buildAnimationAst(this._driver, metadata, errors);

              if (errors.length) {
                throw new Error("The animation trigger \"".concat(name, "\" has failed to build due to the following errors:\n - ").concat(errors.join('\n - ')));
              }

              trigger = buildTrigger(name, ast);
              this._triggerCache[cacheKey] = trigger;
            }

            this._transitionEngine.registerTrigger(namespaceId, name, trigger);
          }
        }, {
          key: "register",
          value: function register(namespaceId, hostElement) {
            this._transitionEngine.register(namespaceId, hostElement);
          }
        }, {
          key: "destroy",
          value: function destroy(namespaceId, context) {
            this._transitionEngine.destroy(namespaceId, context);
          }
        }, {
          key: "onInsert",
          value: function onInsert(namespaceId, element, parent, insertBefore) {
            this._transitionEngine.insertNode(namespaceId, element, parent, insertBefore);
          }
        }, {
          key: "onRemove",
          value: function onRemove(namespaceId, element, context, isHostElement) {
            this._transitionEngine.removeNode(namespaceId, element, isHostElement || false, context);
          }
        }, {
          key: "disableAnimations",
          value: function disableAnimations(element, disable) {
            this._transitionEngine.markElementAsDisabled(element, disable);
          }
        }, {
          key: "process",
          value: function process(namespaceId, element, property, value) {
            if (property.charAt(0) == '@') {
              var _parseTimelineCommand = parseTimelineCommand(property),
                  _parseTimelineCommand2 = _slicedToArray(_parseTimelineCommand, 2),
                  id = _parseTimelineCommand2[0],
                  action = _parseTimelineCommand2[1];

              var args = value;

              this._timelineEngine.command(id, element, action, args);
            } else {
              this._transitionEngine.trigger(namespaceId, element, property, value);
            }
          }
        }, {
          key: "listen",
          value: function listen(namespaceId, element, eventName, eventPhase, callback) {
            // @@listen
            if (eventName.charAt(0) == '@') {
              var _parseTimelineCommand3 = parseTimelineCommand(eventName),
                  _parseTimelineCommand4 = _slicedToArray(_parseTimelineCommand3, 2),
                  id = _parseTimelineCommand4[0],
                  action = _parseTimelineCommand4[1];

              return this._timelineEngine.listen(id, element, action, callback);
            }

            return this._transitionEngine.listen(namespaceId, element, eventName, eventPhase, callback);
          }
        }, {
          key: "flush",
          value: function flush() {
            var microtaskId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1;

            this._transitionEngine.flush(microtaskId);
          }
        }, {
          key: "players",
          get: function get() {
            return this._transitionEngine.players.concat(this._timelineEngine.players);
          }
        }, {
          key: "whenRenderingDone",
          value: function whenRenderingDone() {
            return this._transitionEngine.whenRenderingDone();
          }
        }]);

        return AnimationEngine;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Returns an instance of `SpecialCasedStyles` if and when any special (non animateable) styles are
       * detected.
       *
       * In CSS there exist properties that cannot be animated within a keyframe animation
       * (whether it be via CSS keyframes or web-animations) and the animation implementation
       * will ignore them. This function is designed to detect those special cased styles and
       * return a container that will be executed at the start and end of the animation.
       *
       * @returns an instance of `SpecialCasedStyles` if any special styles are detected otherwise `null`
       */


      function packageNonAnimatableStyles(element, styles) {
        var startStyles = null;
        var endStyles = null;

        if (Array.isArray(styles) && styles.length) {
          startStyles = filterNonAnimatableStyles(styles[0]);

          if (styles.length > 1) {
            endStyles = filterNonAnimatableStyles(styles[styles.length - 1]);
          }
        } else if (styles) {
          startStyles = filterNonAnimatableStyles(styles);
        }

        return startStyles || endStyles ? new SpecialCasedStyles(element, startStyles, endStyles) : null;
      }
      /**
       * Designed to be executed during a keyframe-based animation to apply any special-cased styles.
       *
       * When started (when the `start()` method is run) then the provided `startStyles`
       * will be applied. When finished (when the `finish()` method is called) the
       * `endStyles` will be applied as well any any starting styles. Finally when
       * `destroy()` is called then all styles will be removed.
       */


      var SpecialCasedStyles = /*#__PURE__*/function () {
        function SpecialCasedStyles(_element, _startStyles, _endStyles) {
          _classCallCheck2(this, SpecialCasedStyles);

          this._element = _element;
          this._startStyles = _startStyles;
          this._endStyles = _endStyles;
          this._state = 0
          /* Pending */
          ;
          var initialStyles = SpecialCasedStyles.initialStylesByElement.get(_element);

          if (!initialStyles) {
            SpecialCasedStyles.initialStylesByElement.set(_element, initialStyles = {});
          }

          this._initialStyles = initialStyles;
        }

        _createClass2(SpecialCasedStyles, [{
          key: "start",
          value: function start() {
            if (this._state < 1
            /* Started */
            ) {
                if (this._startStyles) {
                  setStyles(this._element, this._startStyles, this._initialStyles);
                }

                this._state = 1
                /* Started */
                ;
              }
          }
        }, {
          key: "finish",
          value: function finish() {
            this.start();

            if (this._state < 2
            /* Finished */
            ) {
                setStyles(this._element, this._initialStyles);

                if (this._endStyles) {
                  setStyles(this._element, this._endStyles);
                  this._endStyles = null;
                }

                this._state = 1
                /* Started */
                ;
              }
          }
        }, {
          key: "destroy",
          value: function destroy() {
            this.finish();

            if (this._state < 3
            /* Destroyed */
            ) {
                SpecialCasedStyles.initialStylesByElement["delete"](this._element);

                if (this._startStyles) {
                  eraseStyles(this._element, this._startStyles);
                  this._endStyles = null;
                }

                if (this._endStyles) {
                  eraseStyles(this._element, this._endStyles);
                  this._endStyles = null;
                }

                setStyles(this._element, this._initialStyles);
                this._state = 3
                /* Destroyed */
                ;
              }
          }
        }]);

        return SpecialCasedStyles;
      }();

      SpecialCasedStyles.initialStylesByElement = new WeakMap();

      function filterNonAnimatableStyles(styles) {
        var result = null;
        var props = Object.keys(styles);

        for (var i = 0; i < props.length; i++) {
          var prop = props[i];

          if (isNonAnimatableStyle(prop)) {
            result = result || {};
            result[prop] = styles[prop];
          }
        }

        return result;
      }

      function isNonAnimatableStyle(prop) {
        return prop === 'display' || prop === 'position';
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ELAPSED_TIME_MAX_DECIMAL_PLACES = 3;
      var ANIMATION_PROP = 'animation';
      var ANIMATIONEND_EVENT = 'animationend';
      var ONE_SECOND$1 = 1000;

      var ElementAnimationStyleHandler = /*#__PURE__*/function () {
        function ElementAnimationStyleHandler(_element, _name, _duration, _delay, _easing, _fillMode, _onDoneFn) {
          var _this916 = this;

          _classCallCheck2(this, ElementAnimationStyleHandler);

          this._element = _element;
          this._name = _name;
          this._duration = _duration;
          this._delay = _delay;
          this._easing = _easing;
          this._fillMode = _fillMode;
          this._onDoneFn = _onDoneFn;
          this._finished = false;
          this._destroyed = false;
          this._startTime = 0;
          this._position = 0;

          this._eventFn = function (e) {
            return _this916._handleCallback(e);
          };
        }

        _createClass2(ElementAnimationStyleHandler, [{
          key: "apply",
          value: function apply() {
            applyKeyframeAnimation(this._element, "".concat(this._duration, "ms ").concat(this._easing, " ").concat(this._delay, "ms 1 normal ").concat(this._fillMode, " ").concat(this._name));
            addRemoveAnimationEvent(this._element, this._eventFn, false);
            this._startTime = Date.now();
          }
        }, {
          key: "pause",
          value: function pause() {
            playPauseAnimation(this._element, this._name, 'paused');
          }
        }, {
          key: "resume",
          value: function resume() {
            playPauseAnimation(this._element, this._name, 'running');
          }
        }, {
          key: "setPosition",
          value: function setPosition(position) {
            var index = findIndexForAnimation(this._element, this._name);
            this._position = position * this._duration;
            setAnimationStyle(this._element, 'Delay', "-".concat(this._position, "ms"), index);
          }
        }, {
          key: "getPosition",
          value: function getPosition() {
            return this._position;
          }
        }, {
          key: "_handleCallback",
          value: function _handleCallback(event) {
            var timestamp = event._ngTestManualTimestamp || Date.now();
            var elapsedTime = parseFloat(event.elapsedTime.toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES)) * ONE_SECOND$1;

            if (event.animationName == this._name && Math.max(timestamp - this._startTime, 0) >= this._delay && elapsedTime >= this._duration) {
              this.finish();
            }
          }
        }, {
          key: "finish",
          value: function finish() {
            if (this._finished) return;
            this._finished = true;

            this._onDoneFn();

            addRemoveAnimationEvent(this._element, this._eventFn, true);
          }
        }, {
          key: "destroy",
          value: function destroy() {
            if (this._destroyed) return;
            this._destroyed = true;
            this.finish();
            removeKeyframeAnimation(this._element, this._name);
          }
        }]);

        return ElementAnimationStyleHandler;
      }();

      function playPauseAnimation(element, name, status) {
        var index = findIndexForAnimation(element, name);
        setAnimationStyle(element, 'PlayState', status, index);
      }

      function applyKeyframeAnimation(element, value) {
        var anim = getAnimationStyle(element, '').trim();
        var index = 0;

        if (anim.length) {
          index = countChars(anim, ',') + 1;
          value = "".concat(anim, ", ").concat(value);
        }

        setAnimationStyle(element, '', value);
        return index;
      }

      function removeKeyframeAnimation(element, name) {
        var anim = getAnimationStyle(element, '');
        var tokens = anim.split(',');
        var index = findMatchingTokenIndex(tokens, name);

        if (index >= 0) {
          tokens.splice(index, 1);
          var newValue = tokens.join(',');
          setAnimationStyle(element, '', newValue);
        }
      }

      function findIndexForAnimation(element, value) {
        var anim = getAnimationStyle(element, '');

        if (anim.indexOf(',') > 0) {
          var tokens = anim.split(',');
          return findMatchingTokenIndex(tokens, value);
        }

        return findMatchingTokenIndex([anim], value);
      }

      function findMatchingTokenIndex(tokens, searchToken) {
        for (var i = 0; i < tokens.length; i++) {
          if (tokens[i].indexOf(searchToken) >= 0) {
            return i;
          }
        }

        return -1;
      }

      function addRemoveAnimationEvent(element, fn, doRemove) {
        doRemove ? element.removeEventListener(ANIMATIONEND_EVENT, fn) : element.addEventListener(ANIMATIONEND_EVENT, fn);
      }

      function setAnimationStyle(element, name, value, index) {
        var prop = ANIMATION_PROP + name;

        if (index != null) {
          var oldValue = element.style[prop];

          if (oldValue.length) {
            var tokens = oldValue.split(',');
            tokens[index] = value;
            value = tokens.join(',');
          }
        }

        element.style[prop] = value;
      }

      function getAnimationStyle(element, name) {
        return element.style[ANIMATION_PROP + name] || '';
      }

      function countChars(value, _char9) {
        var count = 0;

        for (var i = 0; i < value.length; i++) {
          var c = value.charAt(i);
          if (c === _char9) count++;
        }

        return count;
      }

      var DEFAULT_FILL_MODE = 'forwards';
      var DEFAULT_EASING = 'linear';

      var CssKeyframesPlayer = /*#__PURE__*/function () {
        function CssKeyframesPlayer(element, keyframes, animationName, _duration, _delay, easing, _finalStyles, _specialStyles) {
          _classCallCheck2(this, CssKeyframesPlayer);

          this.element = element;
          this.keyframes = keyframes;
          this.animationName = animationName;
          this._duration = _duration;
          this._delay = _delay;
          this._finalStyles = _finalStyles;
          this._specialStyles = _specialStyles;
          this._onDoneFns = [];
          this._onStartFns = [];
          this._onDestroyFns = [];
          this._started = false;
          this.currentSnapshot = {};
          this._state = 0;
          this.easing = easing || DEFAULT_EASING;
          this.totalTime = _duration + _delay;

          this._buildStyler();
        }

        _createClass2(CssKeyframesPlayer, [{
          key: "onStart",
          value: function onStart(fn) {
            this._onStartFns.push(fn);
          }
        }, {
          key: "onDone",
          value: function onDone(fn) {
            this._onDoneFns.push(fn);
          }
        }, {
          key: "onDestroy",
          value: function onDestroy(fn) {
            this._onDestroyFns.push(fn);
          }
        }, {
          key: "destroy",
          value: function destroy() {
            this.init();
            if (this._state >= 4
            /* DESTROYED */
            ) return;
            this._state = 4
            /* DESTROYED */
            ;

            this._styler.destroy();

            this._flushStartFns();

            this._flushDoneFns();

            if (this._specialStyles) {
              this._specialStyles.destroy();
            }

            this._onDestroyFns.forEach(function (fn) {
              return fn();
            });

            this._onDestroyFns = [];
          }
        }, {
          key: "_flushDoneFns",
          value: function _flushDoneFns() {
            this._onDoneFns.forEach(function (fn) {
              return fn();
            });

            this._onDoneFns = [];
          }
        }, {
          key: "_flushStartFns",
          value: function _flushStartFns() {
            this._onStartFns.forEach(function (fn) {
              return fn();
            });

            this._onStartFns = [];
          }
        }, {
          key: "finish",
          value: function finish() {
            this.init();
            if (this._state >= 3
            /* FINISHED */
            ) return;
            this._state = 3
            /* FINISHED */
            ;

            this._styler.finish();

            this._flushStartFns();

            if (this._specialStyles) {
              this._specialStyles.finish();
            }

            this._flushDoneFns();
          }
        }, {
          key: "setPosition",
          value: function setPosition(value) {
            this._styler.setPosition(value);
          }
        }, {
          key: "getPosition",
          value: function getPosition() {
            return this._styler.getPosition();
          }
        }, {
          key: "hasStarted",
          value: function hasStarted() {
            return this._state >= 2
            /* STARTED */
            ;
          }
        }, {
          key: "init",
          value: function init() {
            if (this._state >= 1
            /* INITIALIZED */
            ) return;
            this._state = 1
            /* INITIALIZED */
            ;
            var elm = this.element;

            this._styler.apply();

            if (this._delay) {
              this._styler.pause();
            }
          }
        }, {
          key: "play",
          value: function play() {
            this.init();

            if (!this.hasStarted()) {
              this._flushStartFns();

              this._state = 2
              /* STARTED */
              ;

              if (this._specialStyles) {
                this._specialStyles.start();
              }
            }

            this._styler.resume();
          }
        }, {
          key: "pause",
          value: function pause() {
            this.init();

            this._styler.pause();
          }
        }, {
          key: "restart",
          value: function restart() {
            this.reset();
            this.play();
          }
        }, {
          key: "reset",
          value: function reset() {
            this._styler.destroy();

            this._buildStyler();

            this._styler.apply();
          }
        }, {
          key: "_buildStyler",
          value: function _buildStyler() {
            var _this917 = this;

            this._styler = new ElementAnimationStyleHandler(this.element, this.animationName, this._duration, this._delay, this.easing, DEFAULT_FILL_MODE, function () {
              return _this917.finish();
            });
          }
          /** @internal */

        }, {
          key: "triggerCallback",
          value: function triggerCallback(phaseName) {
            var methods = phaseName == 'start' ? this._onStartFns : this._onDoneFns;
            methods.forEach(function (fn) {
              return fn();
            });
            methods.length = 0;
          }
        }, {
          key: "beforeDestroy",
          value: function beforeDestroy() {
            var _this918 = this;

            this.init();
            var styles = {};

            if (this.hasStarted()) {
              var finished = this._state >= 3
              /* FINISHED */
              ;
              Object.keys(this._finalStyles).forEach(function (prop) {
                if (prop != 'offset') {
                  styles[prop] = finished ? _this918._finalStyles[prop] : computeStyle(_this918.element, prop);
                }
              });
            }

            this.currentSnapshot = styles;
          }
        }]);

        return CssKeyframesPlayer;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var DirectStylePlayer = /*#__PURE__*/function (_angular_animations__3) {
        _inherits2(DirectStylePlayer, _angular_animations__3);

        var _super372 = _createSuper(DirectStylePlayer);

        function DirectStylePlayer(element, styles) {
          var _this919;

          _classCallCheck2(this, DirectStylePlayer);

          _this919 = _super372.call(this);
          _this919.element = element;
          _this919._startingStyles = {};
          _this919.__initialized = false;
          _this919._styles = hypenatePropsObject(styles);
          return _this919;
        }

        _createClass2(DirectStylePlayer, [{
          key: "init",
          value: function init() {
            var _this920 = this;

            if (this.__initialized || !this._startingStyles) return;
            this.__initialized = true;
            Object.keys(this._styles).forEach(function (prop) {
              _this920._startingStyles[prop] = _this920.element.style[prop];
            });

            _get2(_getPrototypeOf2(DirectStylePlayer.prototype), "init", this).call(this);
          }
        }, {
          key: "play",
          value: function play() {
            var _this921 = this;

            if (!this._startingStyles) return;
            this.init();
            Object.keys(this._styles).forEach(function (prop) {
              return _this921.element.style.setProperty(prop, _this921._styles[prop]);
            });

            _get2(_getPrototypeOf2(DirectStylePlayer.prototype), "play", this).call(this);
          }
        }, {
          key: "destroy",
          value: function destroy() {
            var _this922 = this;

            if (!this._startingStyles) return;
            Object.keys(this._startingStyles).forEach(function (prop) {
              var value = _this922._startingStyles[prop];

              if (value) {
                _this922.element.style.setProperty(prop, value);
              } else {
                _this922.element.style.removeProperty(prop);
              }
            });
            this._startingStyles = null;

            _get2(_getPrototypeOf2(DirectStylePlayer.prototype), "destroy", this).call(this);
          }
        }]);

        return DirectStylePlayer;
      }(_angular_animations__WEBPACK_IMPORTED_MODULE_0__["NoopAnimationPlayer"]);

      var KEYFRAMES_NAME_PREFIX = 'gen_css_kf_';
      var TAB_SPACE = ' ';

      var CssKeyframesDriver = /*#__PURE__*/function () {
        function CssKeyframesDriver() {
          _classCallCheck2(this, CssKeyframesDriver);

          this._count = 0;
          this._head = document.querySelector('head');
        }

        _createClass2(CssKeyframesDriver, [{
          key: "validateStyleProperty",
          value: function validateStyleProperty(prop) {
            return _validateStyleProperty(prop);
          }
        }, {
          key: "matchesElement",
          value: function matchesElement(element, selector) {
            return _matchesElement(element, selector);
          }
        }, {
          key: "containsElement",
          value: function containsElement(elm1, elm2) {
            return _containsElement(elm1, elm2);
          }
        }, {
          key: "query",
          value: function query(element, selector, multi) {
            return invokeQuery(element, selector, multi);
          }
        }, {
          key: "computeStyle",
          value: function computeStyle(element, prop, defaultValue) {
            return window.getComputedStyle(element)[prop];
          }
        }, {
          key: "buildKeyframeElement",
          value: function buildKeyframeElement(element, name, keyframes) {
            keyframes = keyframes.map(function (kf) {
              return hypenatePropsObject(kf);
            });
            var keyframeStr = "@keyframes ".concat(name, " {\n");
            var tab = '';
            keyframes.forEach(function (kf) {
              tab = TAB_SPACE;
              var offset = parseFloat(kf['offset']);
              keyframeStr += "".concat(tab).concat(offset * 100, "% {\n");
              tab += TAB_SPACE;
              Object.keys(kf).forEach(function (prop) {
                var value = kf[prop];

                switch (prop) {
                  case 'offset':
                    return;

                  case 'easing':
                    if (value) {
                      keyframeStr += "".concat(tab, "animation-timing-function: ").concat(value, ";\n");
                    }

                    return;

                  default:
                    keyframeStr += "".concat(tab).concat(prop, ": ").concat(value, ";\n");
                    return;
                }
              });
              keyframeStr += "".concat(tab, "}\n");
            });
            keyframeStr += "}\n";
            var kfElm = document.createElement('style');
            kfElm.textContent = keyframeStr;
            return kfElm;
          }
        }, {
          key: "animate",
          value: function animate(element, keyframes, duration, delay, easing) {
            var previousPlayers = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];
            var scrubberAccessRequested = arguments.length > 6 ? arguments[6] : undefined;

            if ((typeof ngDevMode === 'undefined' || ngDevMode) && scrubberAccessRequested) {
              notifyFaultyScrubber();
            }

            var previousCssKeyframePlayers = previousPlayers.filter(function (player) {
              return player instanceof CssKeyframesPlayer;
            });
            var previousStyles = {};

            if (allowPreviousPlayerStylesMerge(duration, delay)) {
              previousCssKeyframePlayers.forEach(function (player) {
                var styles = player.currentSnapshot;
                Object.keys(styles).forEach(function (prop) {
                  return previousStyles[prop] = styles[prop];
                });
              });
            }

            keyframes = balancePreviousStylesIntoKeyframes(element, keyframes, previousStyles);
            var finalStyles = flattenKeyframesIntoStyles(keyframes); // if there is no animation then there is no point in applying
            // styles and waiting for an event to get fired. This causes lag.
            // It's better to just directly apply the styles to the element
            // via the direct styling animation player.

            if (duration == 0) {
              return new DirectStylePlayer(element, finalStyles);
            }

            var animationName = "".concat(KEYFRAMES_NAME_PREFIX).concat(this._count++);
            var kfElm = this.buildKeyframeElement(element, animationName, keyframes);
            document.querySelector('head').appendChild(kfElm);
            var specialStyles = packageNonAnimatableStyles(element, keyframes);
            var player = new CssKeyframesPlayer(element, keyframes, animationName, duration, delay, easing, finalStyles, specialStyles);
            player.onDestroy(function () {
              return removeElement(kfElm);
            });
            return player;
          }
        }]);

        return CssKeyframesDriver;
      }();

      function flattenKeyframesIntoStyles(keyframes) {
        var flatKeyframes = {};

        if (keyframes) {
          var kfs = Array.isArray(keyframes) ? keyframes : [keyframes];
          kfs.forEach(function (kf) {
            Object.keys(kf).forEach(function (prop) {
              if (prop == 'offset' || prop == 'easing') return;
              flatKeyframes[prop] = kf[prop];
            });
          });
        }

        return flatKeyframes;
      }

      function removeElement(node) {
        node.parentNode.removeChild(node);
      }

      var warningIssued = false;

      function notifyFaultyScrubber() {
        if (warningIssued) return;
        console.warn('@angular/animations: please load the web-animations.js polyfill to allow programmatic access...\n', '  visit https://bit.ly/IWukam to learn more about using the web-animation-js polyfill.');
        warningIssued = true;
      }

      var WebAnimationsPlayer = /*#__PURE__*/function () {
        function WebAnimationsPlayer(element, keyframes, options, _specialStyles) {
          _classCallCheck2(this, WebAnimationsPlayer);

          this.element = element;
          this.keyframes = keyframes;
          this.options = options;
          this._specialStyles = _specialStyles;
          this._onDoneFns = [];
          this._onStartFns = [];
          this._onDestroyFns = [];
          this._initialized = false;
          this._finished = false;
          this._started = false;
          this._destroyed = false;
          this.time = 0;
          this.parentPlayer = null;
          this.currentSnapshot = {};
          this._duration = options['duration'];
          this._delay = options['delay'] || 0;
          this.time = this._duration + this._delay;
        }

        _createClass2(WebAnimationsPlayer, [{
          key: "_onFinish",
          value: function _onFinish() {
            if (!this._finished) {
              this._finished = true;

              this._onDoneFns.forEach(function (fn) {
                return fn();
              });

              this._onDoneFns = [];
            }
          }
        }, {
          key: "init",
          value: function init() {
            this._buildPlayer();

            this._preparePlayerBeforeStart();
          }
        }, {
          key: "_buildPlayer",
          value: function _buildPlayer() {
            var _this923 = this;

            if (this._initialized) return;
            this._initialized = true;
            var keyframes = this.keyframes;
            this.domPlayer = this._triggerWebAnimation(this.element, keyframes, this.options);
            this._finalKeyframe = keyframes.length ? keyframes[keyframes.length - 1] : {};
            this.domPlayer.addEventListener('finish', function () {
              return _this923._onFinish();
            });
          }
        }, {
          key: "_preparePlayerBeforeStart",
          value: function _preparePlayerBeforeStart() {
            // this is required so that the player doesn't start to animate right away
            if (this._delay) {
              this._resetDomPlayerState();
            } else {
              this.domPlayer.pause();
            }
          }
          /** @internal */

        }, {
          key: "_triggerWebAnimation",
          value: function _triggerWebAnimation(element, keyframes, options) {
            // jscompiler doesn't seem to know animate is a native property because it's not fully
            // supported yet across common browsers (we polyfill it for Edge/Safari) [CL #143630929]
            return element['animate'](keyframes, options);
          }
        }, {
          key: "onStart",
          value: function onStart(fn) {
            this._onStartFns.push(fn);
          }
        }, {
          key: "onDone",
          value: function onDone(fn) {
            this._onDoneFns.push(fn);
          }
        }, {
          key: "onDestroy",
          value: function onDestroy(fn) {
            this._onDestroyFns.push(fn);
          }
        }, {
          key: "play",
          value: function play() {
            this._buildPlayer();

            if (!this.hasStarted()) {
              this._onStartFns.forEach(function (fn) {
                return fn();
              });

              this._onStartFns = [];
              this._started = true;

              if (this._specialStyles) {
                this._specialStyles.start();
              }
            }

            this.domPlayer.play();
          }
        }, {
          key: "pause",
          value: function pause() {
            this.init();
            this.domPlayer.pause();
          }
        }, {
          key: "finish",
          value: function finish() {
            this.init();

            if (this._specialStyles) {
              this._specialStyles.finish();
            }

            this._onFinish();

            this.domPlayer.finish();
          }
        }, {
          key: "reset",
          value: function reset() {
            this._resetDomPlayerState();

            this._destroyed = false;
            this._finished = false;
            this._started = false;
          }
        }, {
          key: "_resetDomPlayerState",
          value: function _resetDomPlayerState() {
            if (this.domPlayer) {
              this.domPlayer.cancel();
            }
          }
        }, {
          key: "restart",
          value: function restart() {
            this.reset();
            this.play();
          }
        }, {
          key: "hasStarted",
          value: function hasStarted() {
            return this._started;
          }
        }, {
          key: "destroy",
          value: function destroy() {
            if (!this._destroyed) {
              this._destroyed = true;

              this._resetDomPlayerState();

              this._onFinish();

              if (this._specialStyles) {
                this._specialStyles.destroy();
              }

              this._onDestroyFns.forEach(function (fn) {
                return fn();
              });

              this._onDestroyFns = [];
            }
          }
        }, {
          key: "setPosition",
          value: function setPosition(p) {
            this.domPlayer.currentTime = p * this.time;
          }
        }, {
          key: "getPosition",
          value: function getPosition() {
            return this.domPlayer.currentTime / this.time;
          }
        }, {
          key: "totalTime",
          get: function get() {
            return this._delay + this._duration;
          }
        }, {
          key: "beforeDestroy",
          value: function beforeDestroy() {
            var _this924 = this;

            var styles = {};

            if (this.hasStarted()) {
              Object.keys(this._finalKeyframe).forEach(function (prop) {
                if (prop != 'offset') {
                  styles[prop] = _this924._finished ? _this924._finalKeyframe[prop] : computeStyle(_this924.element, prop);
                }
              });
            }

            this.currentSnapshot = styles;
          }
          /** @internal */

        }, {
          key: "triggerCallback",
          value: function triggerCallback(phaseName) {
            var methods = phaseName == 'start' ? this._onStartFns : this._onDoneFns;
            methods.forEach(function (fn) {
              return fn();
            });
            methods.length = 0;
          }
        }]);

        return WebAnimationsPlayer;
      }();

      var WebAnimationsDriver = /*#__PURE__*/function () {
        function WebAnimationsDriver() {
          _classCallCheck2(this, WebAnimationsDriver);

          this._isNativeImpl = /\{\s*\[native\s+code\]\s*\}/.test(getElementAnimateFn().toString());
          this._cssKeyframesDriver = new CssKeyframesDriver();
        }

        _createClass2(WebAnimationsDriver, [{
          key: "validateStyleProperty",
          value: function validateStyleProperty(prop) {
            return _validateStyleProperty(prop);
          }
        }, {
          key: "matchesElement",
          value: function matchesElement(element, selector) {
            return _matchesElement(element, selector);
          }
        }, {
          key: "containsElement",
          value: function containsElement(elm1, elm2) {
            return _containsElement(elm1, elm2);
          }
        }, {
          key: "query",
          value: function query(element, selector, multi) {
            return invokeQuery(element, selector, multi);
          }
        }, {
          key: "computeStyle",
          value: function computeStyle(element, prop, defaultValue) {
            return window.getComputedStyle(element)[prop];
          }
        }, {
          key: "overrideWebAnimationsSupport",
          value: function overrideWebAnimationsSupport(supported) {
            this._isNativeImpl = supported;
          }
        }, {
          key: "animate",
          value: function animate(element, keyframes, duration, delay, easing) {
            var previousPlayers = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];
            var scrubberAccessRequested = arguments.length > 6 ? arguments[6] : undefined;
            var useKeyframes = !scrubberAccessRequested && !this._isNativeImpl;

            if (useKeyframes) {
              return this._cssKeyframesDriver.animate(element, keyframes, duration, delay, easing, previousPlayers);
            }

            var fill = delay == 0 ? 'both' : 'forwards';
            var playerOptions = {
              duration: duration,
              delay: delay,
              fill: fill
            }; // we check for this to avoid having a null|undefined value be present
            // for the easing (which results in an error for certain browsers #9752)

            if (easing) {
              playerOptions['easing'] = easing;
            }

            var previousStyles = {};
            var previousWebAnimationPlayers = previousPlayers.filter(function (player) {
              return player instanceof WebAnimationsPlayer;
            });

            if (allowPreviousPlayerStylesMerge(duration, delay)) {
              previousWebAnimationPlayers.forEach(function (player) {
                var styles = player.currentSnapshot;
                Object.keys(styles).forEach(function (prop) {
                  return previousStyles[prop] = styles[prop];
                });
              });
            }

            keyframes = keyframes.map(function (styles) {
              return copyStyles(styles, false);
            });
            keyframes = balancePreviousStylesIntoKeyframes(element, keyframes, previousStyles);
            var specialStyles = packageNonAnimatableStyles(element, keyframes);
            return new WebAnimationsPlayer(element, keyframes, playerOptions, specialStyles);
          }
        }]);

        return WebAnimationsDriver;
      }();

      function supportsWebAnimations() {
        return typeof getElementAnimateFn() === 'function';
      }

      function getElementAnimateFn() {
        return isBrowser() && Element.prototype['animate'] || {};
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=browser.js.map

      /***/

    },

    /***/
    "tGlX":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/de.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function tGlX(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : German [de]
      //! author : lluchs : https://github.com/lluchs
      //! author: Menelion Elensúle: https://github.com/Oire
      //! author : Mikolaj Dadela : https://github.com/mik01aj
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        function processRelativeTime(number, withoutSuffix, key, isFuture) {
          var format = {
            m: ['eine Minute', 'einer Minute'],
            h: ['eine Stunde', 'einer Stunde'],
            d: ['ein Tag', 'einem Tag'],
            dd: [number + ' Tage', number + ' Tagen'],
            w: ['eine Woche', 'einer Woche'],
            M: ['ein Monat', 'einem Monat'],
            MM: [number + ' Monate', number + ' Monaten'],
            y: ['ein Jahr', 'einem Jahr'],
            yy: [number + ' Jahre', number + ' Jahren']
          };
          return withoutSuffix ? format[key][0] : format[key][1];
        }

        var de = moment.defineLocale('de', {
          months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
          monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),
          monthsParseExact: true,
          weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
          weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
          weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY HH:mm',
            LLLL: 'dddd, D. MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[heute um] LT [Uhr]',
            sameElse: 'L',
            nextDay: '[morgen um] LT [Uhr]',
            nextWeek: 'dddd [um] LT [Uhr]',
            lastDay: '[gestern um] LT [Uhr]',
            lastWeek: '[letzten] dddd [um] LT [Uhr]'
          },
          relativeTime: {
            future: 'in %s',
            past: 'vor %s',
            s: 'ein paar Sekunden',
            ss: '%d Sekunden',
            m: processRelativeTime,
            mm: '%d Minuten',
            h: processRelativeTime,
            hh: '%d Stunden',
            d: processRelativeTime,
            dd: processRelativeTime,
            w: processRelativeTime,
            ww: '%d Wochen',
            M: processRelativeTime,
            MM: processRelativeTime,
            y: processRelativeTime,
            yy: processRelativeTime
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return de;
      });
      /***/

    },

    /***/
    "tS1D":
    /*!******************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/timeout.js ***!
      \******************************************************************/

    /*! exports provided: timeout */

    /***/
    function tS1D(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "timeout", function () {
        return timeout;
      });
      /* harmony import */


      var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../scheduler/async */
      "D0XW");
      /* harmony import */


      var _util_TimeoutError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/TimeoutError */
      "Y6u4");
      /* harmony import */


      var _timeoutWith__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./timeoutWith */
      "syX2");
      /* harmony import */


      var _observable_throwError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ../observable/throwError */
      "z6cu");

      function timeout(due) {
        var scheduler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"];
        return Object(_timeoutWith__WEBPACK_IMPORTED_MODULE_2__["timeoutWith"])(due, Object(_observable_throwError__WEBPACK_IMPORTED_MODULE_3__["throwError"])(new _util_TimeoutError__WEBPACK_IMPORTED_MODULE_1__["TimeoutError"]()), scheduler);
      } //# sourceMappingURL=timeout.js.map

      /***/

    },

    /***/
    "tT3J":
    /*!************************************************!*\
      !*** ./node_modules/moment/locale/tzm-latn.js ***!
      \************************************************/

    /*! no static exports found */

    /***/
    function tT3J(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Central Atlas Tamazight Latin [tzm-latn]
      //! author : Abdel Said : https://github.com/abdelsaid
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var tzmLatn = moment.defineLocale('tzm-latn', {
          months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
          monthsShort: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
          weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
          weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
          weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[asdkh g] LT',
            nextDay: '[aska g] LT',
            nextWeek: 'dddd [g] LT',
            lastDay: '[assant g] LT',
            lastWeek: 'dddd [g] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'dadkh s yan %s',
            past: 'yan %s',
            s: 'imik',
            ss: '%d imik',
            m: 'minuḍ',
            mm: '%d minuḍ',
            h: 'saɛa',
            hh: '%d tassaɛin',
            d: 'ass',
            dd: '%d ossan',
            M: 'ayowr',
            MM: '%d iyyirn',
            y: 'asgas',
            yy: '%d isgasn'
          },
          week: {
            dow: 6,
            // Saturday is the first day of the week.
            doy: 12 // The week that contains Jan 12th is the first week of the year.

          }
        });
        return tzmLatn;
      });
      /***/

    },

    /***/
    "tUCv":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/jv.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function tUCv(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Javanese [jv]
      //! author : Rony Lantip : https://github.com/lantip
      //! reference: http://jv.wikipedia.org/wiki/Basa_Jawa
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var jv = moment.defineLocale('jv', {
          months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),
          monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),
          weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),
          weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),
          weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),
          longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [pukul] HH.mm',
            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm'
          },
          meridiemParse: /enjing|siyang|sonten|ndalu/,
          meridiemHour: function meridiemHour(hour, meridiem) {
            if (hour === 12) {
              hour = 0;
            }

            if (meridiem === 'enjing') {
              return hour;
            } else if (meridiem === 'siyang') {
              return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {
              return hour + 12;
            }
          },
          meridiem: function meridiem(hours, minutes, isLower) {
            if (hours < 11) {
              return 'enjing';
            } else if (hours < 15) {
              return 'siyang';
            } else if (hours < 19) {
              return 'sonten';
            } else {
              return 'ndalu';
            }
          },
          calendar: {
            sameDay: '[Dinten puniko pukul] LT',
            nextDay: '[Mbenjang pukul] LT',
            nextWeek: 'dddd [pukul] LT',
            lastDay: '[Kala wingi pukul] LT',
            lastWeek: 'dddd [kepengker pukul] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'wonten ing %s',
            past: '%s ingkang kepengker',
            s: 'sawetawis detik',
            ss: '%d detik',
            m: 'setunggal menit',
            mm: '%d menit',
            h: 'setunggal jam',
            hh: '%d jam',
            d: 'sedinten',
            dd: '%d dinten',
            M: 'sewulan',
            MM: '%d wulan',
            y: 'setaun',
            yy: '%d taun'
          },
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return jv;
      });
      /***/

    },

    /***/
    "tVRC":
    /*!*********************************************************************************!*\
      !*** ./node_modules/aws-sdk/lib/credentials/chainable_temporary_credentials.js ***!
      \*********************************************************************************/

    /*! no static exports found */

    /***/
    function tVRC(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ../core */
      "QsWE");

      var STS = __webpack_require__(
      /*! ../../clients/sts */
      "6Yqx");
      /**
       * Represents temporary credentials retrieved from {AWS.STS}. Without any
       * extra parameters, credentials will be fetched from the
       * {AWS.STS.getSessionToken} operation. If an IAM role is provided, the
       * {AWS.STS.assumeRole} operation will be used to fetch credentials for the
       * role instead.
       *
       * AWS.ChainableTemporaryCredentials differs from AWS.TemporaryCredentials in
       * the way masterCredentials and refreshes are handled.
       * AWS.ChainableTemporaryCredentials refreshes expired credentials using the
       * masterCredentials passed by the user to support chaining of STS credentials.
       * However, AWS.TemporaryCredentials recursively collapses the masterCredentials
       * during instantiation, precluding the ability to refresh credentials which
       * require intermediate, temporary credentials.
       *
       * For example, if the application should use RoleA, which must be assumed from
       * RoleB, and the environment provides credentials which can assume RoleB, then
       * AWS.ChainableTemporaryCredentials must be used to support refreshing the
       * temporary credentials for RoleA:
       *
       * ```javascript
       * var roleACreds = new AWS.ChainableTemporaryCredentials({
       *   params: {RoleArn: 'RoleA'},
       *   masterCredentials: new AWS.ChainableTemporaryCredentials({
       *     params: {RoleArn: 'RoleB'},
       *     masterCredentials: new AWS.EnvironmentCredentials('AWS')
       *   })
       * });
       * ```
       *
       * If AWS.TemporaryCredentials had been used in the previous example,
       * `roleACreds` would fail to refresh because `roleACreds` would
       * use the environment credentials for the AssumeRole request.
       *
       * Another difference is that AWS.ChainableTemporaryCredentials creates the STS
       * service instance during instantiation while AWS.TemporaryCredentials creates
       * the STS service instance during the first refresh. Creating the service
       * instance during instantiation effectively captures the master credentials
       * from the global config, so that subsequent changes to the global config do
       * not affect the master credentials used to refresh the temporary credentials.
       *
       * This allows an instance of AWS.ChainableTemporaryCredentials to be assigned
       * to AWS.config.credentials:
       *
       * ```javascript
       * var envCreds = new AWS.EnvironmentCredentials('AWS');
       * AWS.config.credentials = envCreds;
       * // masterCredentials will be envCreds
       * AWS.config.credentials = new AWS.ChainableTemporaryCredentials({
       *   params: {RoleArn: '...'}
       * });
       * ```
       *
       * Similarly, to use the CredentialProviderChain's default providers as the
       * master credentials, simply create a new instance of
       * AWS.ChainableTemporaryCredentials:
       *
       * ```javascript
       * AWS.config.credentials = new ChainableTemporaryCredentials({
       *   params: {RoleArn: '...'}
       * });
       * ```
       *
       * @!attribute service
       *   @return [AWS.STS] the STS service instance used to
       *     get and refresh temporary credentials from AWS STS.
       * @note (see constructor)
       */


      AWS.ChainableTemporaryCredentials = AWS.util.inherit(AWS.Credentials, {
        /**
         * Creates a new temporary credentials object.
         *
         * @param options [map] a set of options
         * @option options params [map] ({}) a map of options that are passed to the
         *   {AWS.STS.assumeRole} or {AWS.STS.getSessionToken} operations.
         *   If a `RoleArn` parameter is passed in, credentials will be based on the
         *   IAM role. If a `SerialNumber` parameter is passed in, {tokenCodeFn} must
         *   also be passed in or an error will be thrown.
         * @option options masterCredentials [AWS.Credentials] the master credentials
         *   used to get and refresh temporary credentials from AWS STS. By default,
         *   AWS.config.credentials or AWS.config.credentialProvider will be used.
         * @option options tokenCodeFn [Function] (null) Function to provide
         *   `TokenCode`, if `SerialNumber` is provided for profile in {params}. Function
         *   is called with value of `SerialNumber` and `callback`, and should provide
         *   the `TokenCode` or an error to the callback in the format
         *   `callback(err, token)`.
         * @example Creating a new credentials object for generic temporary credentials
         *   AWS.config.credentials = new AWS.ChainableTemporaryCredentials();
         * @example Creating a new credentials object for an IAM role
         *   AWS.config.credentials = new AWS.ChainableTemporaryCredentials({
         *     params: {
         *       RoleArn: 'arn:aws:iam::1234567890:role/TemporaryCredentials'
         *     }
         *   });
         * @see AWS.STS.assumeRole
         * @see AWS.STS.getSessionToken
         */
        constructor: function ChainableTemporaryCredentials(options) {
          AWS.Credentials.call(this);
          options = options || {};
          this.errorCode = 'ChainableTemporaryCredentialsProviderFailure';
          this.expired = true;
          this.tokenCodeFn = null;
          var params = AWS.util.copy(options.params) || {};

          if (params.RoleArn) {
            params.RoleSessionName = params.RoleSessionName || 'temporary-credentials';
          }

          if (params.SerialNumber) {
            if (!options.tokenCodeFn || typeof options.tokenCodeFn !== 'function') {
              throw new AWS.util.error(new Error('tokenCodeFn must be a function when params.SerialNumber is given'), {
                code: this.errorCode
              });
            } else {
              this.tokenCodeFn = options.tokenCodeFn;
            }
          }

          var config = AWS.util.merge({
            params: params,
            credentials: options.masterCredentials || AWS.config.credentials
          }, options.stsConfig || {});
          this.service = new STS(config);
        },

        /**
         * Refreshes credentials using {AWS.STS.assumeRole} or
         * {AWS.STS.getSessionToken}, depending on whether an IAM role ARN was passed
         * to the credentials {constructor}.
         *
         * @callback callback function(err)
         *   Called when the STS service responds (or fails). When
         *   this callback is called with no error, it means that the credentials
         *   information has been loaded into the object (as the `accessKeyId`,
         *   `secretAccessKey`, and `sessionToken` properties).
         *   @param err [Error] if an error occurred, this value will be filled
         * @see AWS.Credentials.get
         */
        refresh: function refresh(callback) {
          this.coalesceRefresh(callback || AWS.util.fn.callback);
        },

        /**
         * @api private
         * @param callback
         */
        load: function load(callback) {
          var self = this;
          var operation = self.service.config.params.RoleArn ? 'assumeRole' : 'getSessionToken';
          this.getTokenCode(function (err, tokenCode) {
            var params = {};

            if (err) {
              callback(err);
              return;
            }

            if (tokenCode) {
              params.TokenCode = tokenCode;
            }

            self.service[operation](params, function (err, data) {
              if (!err) {
                self.service.credentialsFrom(data, self);
              }

              callback(err);
            });
          });
        },

        /**
         * @api private
         */
        getTokenCode: function getTokenCode(callback) {
          var self = this;

          if (this.tokenCodeFn) {
            this.tokenCodeFn(this.service.config.params.SerialNumber, function (err, token) {
              if (err) {
                var message = err;

                if (err instanceof Error) {
                  message = err.message;
                }

                callback(AWS.util.error(new Error('Error fetching MFA token: ' + message), {
                  code: self.errorCode
                }));
                return;
              }

              callback(null, token);
            });
          } else {
            callback(null);
          }
        }
      });
      /***/
    },

    /***/
    "tbfe":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/es-mx.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function tbfe(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Spanish (Mexico) [es-mx]
      //! author : JC Franco : https://github.com/jcfranco
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),
            _monthsShort4 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
            monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i],
            monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

        var esMx = moment.defineLocale('es-mx', {
          months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
          monthsShort: function monthsShort(m, format) {
            if (!m) {
              return monthsShortDot;
            } else if (/-MMM-/.test(format)) {
              return _monthsShort4[m.month()];
            } else {
              return monthsShortDot[m.month()];
            }
          },
          monthsRegex: monthsRegex,
          monthsShortRegex: monthsRegex,
          monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
          monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
          monthsParse: monthsParse,
          longMonthsParse: monthsParse,
          shortMonthsParse: monthsParse,
          weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
          weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
          weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY H:mm',
            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm'
          },
          calendar: {
            sameDay: function sameDay() {
              return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextDay: function nextDay() {
              return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextWeek: function nextWeek() {
              return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastDay: function lastDay() {
              return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastWeek: function lastWeek() {
              return '[el] dddd [pasado a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: 'en %s',
            past: 'hace %s',
            s: 'unos segundos',
            ss: '%d segundos',
            m: 'un minuto',
            mm: '%d minutos',
            h: 'una hora',
            hh: '%d horas',
            d: 'un día',
            dd: '%d días',
            w: 'una semana',
            ww: '%d semanas',
            M: 'un mes',
            MM: '%d meses',
            y: 'un año',
            yy: '%d años'
          },
          dayOfMonthOrdinalParse: /\d{1,2}º/,
          ordinal: '%dº',
          week: {
            dow: 0,
            // Sunday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          },
          invalidDate: 'Fecha inválida'
        });
        return esMx;
      });
      /***/

    },

    /***/
    "tegk":
    /*!********************************************!*\
      !*** ./node_modules/aws-sdk/clients/s3.js ***!
      \********************************************/

    /*! no static exports found */

    /***/
    function tegk(module, exports, __webpack_require__) {
      __webpack_require__(
      /*! ../lib/node_loader */
      "md97");

      var AWS = __webpack_require__(
      /*! ../lib/core */
      "QsWE");

      var Service = AWS.Service;
      var apiLoader = AWS.apiLoader;
      apiLoader.services['s3'] = {};
      AWS.S3 = Service.defineService('s3', ['2006-03-01']);

      __webpack_require__(
      /*! ../lib/services/s3 */
      "UQFi");

      Object.defineProperty(apiLoader.services['s3'], '2006-03-01', {
        get: function get() {
          var model = __webpack_require__(
          /*! ../apis/s3-2006-03-01.min.json */
          "CaBw");

          model.paginators = __webpack_require__(
          /*! ../apis/s3-2006-03-01.paginators.json */
          "j/x2").pagination;
          model.waiters = __webpack_require__(
          /*! ../apis/s3-2006-03-01.waiters2.json */
          "DSSA").waiters;
          return model;
        },
        enumerable: true,
        configurable: true
      });
      module.exports = AWS.S3;
      /***/
    },

    /***/
    "tf+s":
    /*!**********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/subscribeOn.js ***!
      \**********************************************************************/

    /*! exports provided: subscribeOn */

    /***/
    function tfS(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "subscribeOn", function () {
        return subscribeOn;
      });
      /* harmony import */


      var _observable_SubscribeOnObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../observable/SubscribeOnObservable */
      "O4y0");

      function subscribeOn(scheduler) {
        var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
        return function subscribeOnOperatorFunction(source) {
          return source.lift(new SubscribeOnOperator(scheduler, delay));
        };
      }

      var SubscribeOnOperator = /*#__PURE__*/function () {
        function SubscribeOnOperator(scheduler, delay) {
          _classCallCheck2(this, SubscribeOnOperator);

          this.scheduler = scheduler;
          this.delay = delay;
        }

        _createClass2(SubscribeOnOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return new _observable_SubscribeOnObservable__WEBPACK_IMPORTED_MODULE_0__["SubscribeOnObservable"](source, this.delay, this.scheduler).subscribe(subscriber);
          }
        }]);

        return SubscribeOnOperator;
      }(); //# sourceMappingURL=subscribeOn.js.map

      /***/

    },

    /***/
    "tjlA":
    /*!**************************************!*\
      !*** ./node_modules/buffer/index.js ***!
      \**************************************/

    /*! no static exports found */

    /***/
    function tjlA(module, exports, __webpack_require__) {
      "use strict";
      /*!
       * The buffer module from node.js, for the browser.
       *
       * @author   Feross Aboukhadijeh <http://feross.org>
       * @license  MIT
       */

      /* eslint-disable no-proto */

      var base64 = __webpack_require__(
      /*! base64-js */
      "H7XF");

      var ieee754 = __webpack_require__(
      /*! ieee754 */
      "kVK+");

      var isArray = __webpack_require__(
      /*! isarray */
      "49sm");

      exports.Buffer = Buffer;
      exports.SlowBuffer = SlowBuffer;
      exports.INSPECT_MAX_BYTES = 50;
      /**
       * If `Buffer.TYPED_ARRAY_SUPPORT`:
       *   === true    Use Uint8Array implementation (fastest)
       *   === false   Use Object implementation (most compatible, even IE6)
       *
       * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
       * Opera 11.6+, iOS 4.2+.
       *
       * Due to various browser bugs, sometimes the Object implementation will be used even
       * when the browser supports typed arrays.
       *
       * Note:
       *
       *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
       *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
       *
       *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
       *
       *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
       *     incorrect length in some situations.
      
       * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
       * get the Object implementation, which is slower but behaves correctly.
       */

      Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined ? global.TYPED_ARRAY_SUPPORT : typedArraySupport();
      /*
       * Export kMaxLength after typed array support is determined.
       */

      exports.kMaxLength = kMaxLength();

      function typedArraySupport() {
        try {
          var arr = new Uint8Array(1);
          arr.__proto__ = {
            __proto__: Uint8Array.prototype,
            foo: function foo() {
              return 42;
            }
          };
          return arr.foo() === 42 && // typed array instances can be augmented
          typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
          arr.subarray(1, 1).byteLength === 0; // ie10 has broken `subarray`
        } catch (e) {
          return false;
        }
      }

      function kMaxLength() {
        return Buffer.TYPED_ARRAY_SUPPORT ? 0x7fffffff : 0x3fffffff;
      }

      function createBuffer(that, length) {
        if (kMaxLength() < length) {
          throw new RangeError('Invalid typed array length');
        }

        if (Buffer.TYPED_ARRAY_SUPPORT) {
          // Return an augmented `Uint8Array` instance, for best performance
          that = new Uint8Array(length);
          that.__proto__ = Buffer.prototype;
        } else {
          // Fallback: Return an object instance of the Buffer class
          if (that === null) {
            that = new Buffer(length);
          }

          that.length = length;
        }

        return that;
      }
      /**
       * The Buffer constructor returns instances of `Uint8Array` that have their
       * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
       * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
       * and the `Uint8Array` methods. Square bracket notation works as expected -- it
       * returns a single octet.
       *
       * The `Uint8Array` prototype remains unmodified.
       */


      function Buffer(arg, encodingOrOffset, length) {
        if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
          return new Buffer(arg, encodingOrOffset, length);
        } // Common case.


        if (typeof arg === 'number') {
          if (typeof encodingOrOffset === 'string') {
            throw new Error('If encoding is specified then the first argument must be a string');
          }

          return allocUnsafe(this, arg);
        }

        return from(this, arg, encodingOrOffset, length);
      }

      Buffer.poolSize = 8192; // not used by this implementation
      // TODO: Legacy, not needed anymore. Remove in next major version.

      Buffer._augment = function (arr) {
        arr.__proto__ = Buffer.prototype;
        return arr;
      };

      function from(that, value, encodingOrOffset, length) {
        if (typeof value === 'number') {
          throw new TypeError('"value" argument must not be a number');
        }

        if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
          return fromArrayBuffer(that, value, encodingOrOffset, length);
        }

        if (typeof value === 'string') {
          return fromString(that, value, encodingOrOffset);
        }

        return fromObject(that, value);
      }
      /**
       * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
       * if value is a number.
       * Buffer.from(str[, encoding])
       * Buffer.from(array)
       * Buffer.from(buffer)
       * Buffer.from(arrayBuffer[, byteOffset[, length]])
       **/


      Buffer.from = function (value, encodingOrOffset, length) {
        return from(null, value, encodingOrOffset, length);
      };

      if (Buffer.TYPED_ARRAY_SUPPORT) {
        Buffer.prototype.__proto__ = Uint8Array.prototype;
        Buffer.__proto__ = Uint8Array;

        if (typeof Symbol !== 'undefined' && Symbol.species && Buffer[Symbol.species] === Buffer) {
          // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
          Object.defineProperty(Buffer, Symbol.species, {
            value: null,
            configurable: true
          });
        }
      }

      function assertSize(size) {
        if (typeof size !== 'number') {
          throw new TypeError('"size" argument must be a number');
        } else if (size < 0) {
          throw new RangeError('"size" argument must not be negative');
        }
      }

      function alloc(that, size, fill, encoding) {
        assertSize(size);

        if (size <= 0) {
          return createBuffer(that, size);
        }

        if (fill !== undefined) {
          // Only pay attention to encoding if it's a string. This
          // prevents accidentally sending in a number that would
          // be interpretted as a start offset.
          return typeof encoding === 'string' ? createBuffer(that, size).fill(fill, encoding) : createBuffer(that, size).fill(fill);
        }

        return createBuffer(that, size);
      }
      /**
       * Creates a new filled Buffer instance.
       * alloc(size[, fill[, encoding]])
       **/


      Buffer.alloc = function (size, fill, encoding) {
        return alloc(null, size, fill, encoding);
      };

      function allocUnsafe(that, size) {
        assertSize(size);
        that = createBuffer(that, size < 0 ? 0 : checked(size) | 0);

        if (!Buffer.TYPED_ARRAY_SUPPORT) {
          for (var i = 0; i < size; ++i) {
            that[i] = 0;
          }
        }

        return that;
      }
      /**
       * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
       * */


      Buffer.allocUnsafe = function (size) {
        return allocUnsafe(null, size);
      };
      /**
       * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
       */


      Buffer.allocUnsafeSlow = function (size) {
        return allocUnsafe(null, size);
      };

      function fromString(that, string, encoding) {
        if (typeof encoding !== 'string' || encoding === '') {
          encoding = 'utf8';
        }

        if (!Buffer.isEncoding(encoding)) {
          throw new TypeError('"encoding" must be a valid string encoding');
        }

        var length = byteLength(string, encoding) | 0;
        that = createBuffer(that, length);
        var actual = that.write(string, encoding);

        if (actual !== length) {
          // Writing a hex string, for example, that contains invalid characters will
          // cause everything after the first invalid character to be ignored. (e.g.
          // 'abxxcd' will be treated as 'ab')
          that = that.slice(0, actual);
        }

        return that;
      }

      function fromArrayLike(that, array) {
        var length = array.length < 0 ? 0 : checked(array.length) | 0;
        that = createBuffer(that, length);

        for (var i = 0; i < length; i += 1) {
          that[i] = array[i] & 255;
        }

        return that;
      }

      function fromArrayBuffer(that, array, byteOffset, length) {
        array.byteLength; // this throws if `array` is not a valid ArrayBuffer

        if (byteOffset < 0 || array.byteLength < byteOffset) {
          throw new RangeError('\'offset\' is out of bounds');
        }

        if (array.byteLength < byteOffset + (length || 0)) {
          throw new RangeError('\'length\' is out of bounds');
        }

        if (byteOffset === undefined && length === undefined) {
          array = new Uint8Array(array);
        } else if (length === undefined) {
          array = new Uint8Array(array, byteOffset);
        } else {
          array = new Uint8Array(array, byteOffset, length);
        }

        if (Buffer.TYPED_ARRAY_SUPPORT) {
          // Return an augmented `Uint8Array` instance, for best performance
          that = array;
          that.__proto__ = Buffer.prototype;
        } else {
          // Fallback: Return an object instance of the Buffer class
          that = fromArrayLike(that, array);
        }

        return that;
      }

      function fromObject(that, obj) {
        if (Buffer.isBuffer(obj)) {
          var len = checked(obj.length) | 0;
          that = createBuffer(that, len);

          if (that.length === 0) {
            return that;
          }

          obj.copy(that, 0, 0, len);
          return that;
        }

        if (obj) {
          if (typeof ArrayBuffer !== 'undefined' && obj.buffer instanceof ArrayBuffer || 'length' in obj) {
            if (typeof obj.length !== 'number' || isnan(obj.length)) {
              return createBuffer(that, 0);
            }

            return fromArrayLike(that, obj);
          }

          if (obj.type === 'Buffer' && isArray(obj.data)) {
            return fromArrayLike(that, obj.data);
          }
        }

        throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.');
      }

      function checked(length) {
        // Note: cannot use `length < kMaxLength()` here because that fails when
        // length is NaN (which is otherwise coerced to zero.)
        if (length >= kMaxLength()) {
          throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + kMaxLength().toString(16) + ' bytes');
        }

        return length | 0;
      }

      function SlowBuffer(length) {
        if (+length != length) {
          // eslint-disable-line eqeqeq
          length = 0;
        }

        return Buffer.alloc(+length);
      }

      Buffer.isBuffer = function isBuffer(b) {
        return !!(b != null && b._isBuffer);
      };

      Buffer.compare = function compare(a, b) {
        if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
          throw new TypeError('Arguments must be Buffers');
        }

        if (a === b) return 0;
        var x = a.length;
        var y = b.length;

        for (var i = 0, len = Math.min(x, y); i < len; ++i) {
          if (a[i] !== b[i]) {
            x = a[i];
            y = b[i];
            break;
          }
        }

        if (x < y) return -1;
        if (y < x) return 1;
        return 0;
      };

      Buffer.isEncoding = function isEncoding(encoding) {
        switch (String(encoding).toLowerCase()) {
          case 'hex':
          case 'utf8':
          case 'utf-8':
          case 'ascii':
          case 'latin1':
          case 'binary':
          case 'base64':
          case 'ucs2':
          case 'ucs-2':
          case 'utf16le':
          case 'utf-16le':
            return true;

          default:
            return false;
        }
      };

      Buffer.concat = function concat(list, length) {
        if (!isArray(list)) {
          throw new TypeError('"list" argument must be an Array of Buffers');
        }

        if (list.length === 0) {
          return Buffer.alloc(0);
        }

        var i;

        if (length === undefined) {
          length = 0;

          for (i = 0; i < list.length; ++i) {
            length += list[i].length;
          }
        }

        var buffer = Buffer.allocUnsafe(length);
        var pos = 0;

        for (i = 0; i < list.length; ++i) {
          var buf = list[i];

          if (!Buffer.isBuffer(buf)) {
            throw new TypeError('"list" argument must be an Array of Buffers');
          }

          buf.copy(buffer, pos);
          pos += buf.length;
        }

        return buffer;
      };

      function byteLength(string, encoding) {
        if (Buffer.isBuffer(string)) {
          return string.length;
        }

        if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {
          return string.byteLength;
        }

        if (typeof string !== 'string') {
          string = '' + string;
        }

        var len = string.length;
        if (len === 0) return 0; // Use a for loop to avoid recursion

        var loweredCase = false;

        for (;;) {
          switch (encoding) {
            case 'ascii':
            case 'latin1':
            case 'binary':
              return len;

            case 'utf8':
            case 'utf-8':
            case undefined:
              return utf8ToBytes(string).length;

            case 'ucs2':
            case 'ucs-2':
            case 'utf16le':
            case 'utf-16le':
              return len * 2;

            case 'hex':
              return len >>> 1;

            case 'base64':
              return base64ToBytes(string).length;

            default:
              if (loweredCase) return utf8ToBytes(string).length; // assume utf8

              encoding = ('' + encoding).toLowerCase();
              loweredCase = true;
          }
        }
      }

      Buffer.byteLength = byteLength;

      function slowToString(encoding, start, end) {
        var loweredCase = false; // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
        // property of a typed array.
        // This behaves neither like String nor Uint8Array in that we set start/end
        // to their upper/lower bounds if the value passed is out of range.
        // undefined is handled specially as per ECMA-262 6th Edition,
        // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.

        if (start === undefined || start < 0) {
          start = 0;
        } // Return early if start > this.length. Done here to prevent potential uint32
        // coercion fail below.


        if (start > this.length) {
          return '';
        }

        if (end === undefined || end > this.length) {
          end = this.length;
        }

        if (end <= 0) {
          return '';
        } // Force coersion to uint32. This will also coerce falsey/NaN values to 0.


        end >>>= 0;
        start >>>= 0;

        if (end <= start) {
          return '';
        }

        if (!encoding) encoding = 'utf8';

        while (true) {
          switch (encoding) {
            case 'hex':
              return hexSlice(this, start, end);

            case 'utf8':
            case 'utf-8':
              return utf8Slice(this, start, end);

            case 'ascii':
              return asciiSlice(this, start, end);

            case 'latin1':
            case 'binary':
              return latin1Slice(this, start, end);

            case 'base64':
              return base64Slice(this, start, end);

            case 'ucs2':
            case 'ucs-2':
            case 'utf16le':
            case 'utf-16le':
              return utf16leSlice(this, start, end);

            default:
              if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);
              encoding = (encoding + '').toLowerCase();
              loweredCase = true;
          }
        }
      } // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect
      // Buffer instances.


      Buffer.prototype._isBuffer = true;

      function swap(b, n, m) {
        var i = b[n];
        b[n] = b[m];
        b[m] = i;
      }

      Buffer.prototype.swap16 = function swap16() {
        var len = this.length;

        if (len % 2 !== 0) {
          throw new RangeError('Buffer size must be a multiple of 16-bits');
        }

        for (var i = 0; i < len; i += 2) {
          swap(this, i, i + 1);
        }

        return this;
      };

      Buffer.prototype.swap32 = function swap32() {
        var len = this.length;

        if (len % 4 !== 0) {
          throw new RangeError('Buffer size must be a multiple of 32-bits');
        }

        for (var i = 0; i < len; i += 4) {
          swap(this, i, i + 3);
          swap(this, i + 1, i + 2);
        }

        return this;
      };

      Buffer.prototype.swap64 = function swap64() {
        var len = this.length;

        if (len % 8 !== 0) {
          throw new RangeError('Buffer size must be a multiple of 64-bits');
        }

        for (var i = 0; i < len; i += 8) {
          swap(this, i, i + 7);
          swap(this, i + 1, i + 6);
          swap(this, i + 2, i + 5);
          swap(this, i + 3, i + 4);
        }

        return this;
      };

      Buffer.prototype.toString = function toString() {
        var length = this.length | 0;
        if (length === 0) return '';
        if (arguments.length === 0) return utf8Slice(this, 0, length);
        return slowToString.apply(this, arguments);
      };

      Buffer.prototype.equals = function equals(b) {
        if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer');
        if (this === b) return true;
        return Buffer.compare(this, b) === 0;
      };

      Buffer.prototype.inspect = function inspect() {
        var str = '';
        var max = exports.INSPECT_MAX_BYTES;

        if (this.length > 0) {
          str = this.toString('hex', 0, max).match(/.{2}/g).join(' ');
          if (this.length > max) str += ' ... ';
        }

        return '<Buffer ' + str + '>';
      };

      Buffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {
        if (!Buffer.isBuffer(target)) {
          throw new TypeError('Argument must be a Buffer');
        }

        if (start === undefined) {
          start = 0;
        }

        if (end === undefined) {
          end = target ? target.length : 0;
        }

        if (thisStart === undefined) {
          thisStart = 0;
        }

        if (thisEnd === undefined) {
          thisEnd = this.length;
        }

        if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
          throw new RangeError('out of range index');
        }

        if (thisStart >= thisEnd && start >= end) {
          return 0;
        }

        if (thisStart >= thisEnd) {
          return -1;
        }

        if (start >= end) {
          return 1;
        }

        start >>>= 0;
        end >>>= 0;
        thisStart >>>= 0;
        thisEnd >>>= 0;
        if (this === target) return 0;
        var x = thisEnd - thisStart;
        var y = end - start;
        var len = Math.min(x, y);
        var thisCopy = this.slice(thisStart, thisEnd);
        var targetCopy = target.slice(start, end);

        for (var i = 0; i < len; ++i) {
          if (thisCopy[i] !== targetCopy[i]) {
            x = thisCopy[i];
            y = targetCopy[i];
            break;
          }
        }

        if (x < y) return -1;
        if (y < x) return 1;
        return 0;
      }; // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
      // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
      //
      // Arguments:
      // - buffer - a Buffer to search
      // - val - a string, Buffer, or number
      // - byteOffset - an index into `buffer`; will be clamped to an int32
      // - encoding - an optional encoding, relevant is val is a string
      // - dir - true for indexOf, false for lastIndexOf


      function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {
        // Empty buffer means no match
        if (buffer.length === 0) return -1; // Normalize byteOffset

        if (typeof byteOffset === 'string') {
          encoding = byteOffset;
          byteOffset = 0;
        } else if (byteOffset > 0x7fffffff) {
          byteOffset = 0x7fffffff;
        } else if (byteOffset < -0x80000000) {
          byteOffset = -0x80000000;
        }

        byteOffset = +byteOffset; // Coerce to Number.

        if (isNaN(byteOffset)) {
          // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
          byteOffset = dir ? 0 : buffer.length - 1;
        } // Normalize byteOffset: negative offsets start from the end of the buffer


        if (byteOffset < 0) byteOffset = buffer.length + byteOffset;

        if (byteOffset >= buffer.length) {
          if (dir) return -1;else byteOffset = buffer.length - 1;
        } else if (byteOffset < 0) {
          if (dir) byteOffset = 0;else return -1;
        } // Normalize val


        if (typeof val === 'string') {
          val = Buffer.from(val, encoding);
        } // Finally, search either indexOf (if dir is true) or lastIndexOf


        if (Buffer.isBuffer(val)) {
          // Special case: looking for empty string/buffer always fails
          if (val.length === 0) {
            return -1;
          }

          return arrayIndexOf(buffer, val, byteOffset, encoding, dir);
        } else if (typeof val === 'number') {
          val = val & 0xFF; // Search for a byte value [0-255]

          if (Buffer.TYPED_ARRAY_SUPPORT && typeof Uint8Array.prototype.indexOf === 'function') {
            if (dir) {
              return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);
            } else {
              return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);
            }
          }

          return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);
        }

        throw new TypeError('val must be string, number or Buffer');
      }

      function arrayIndexOf(arr, val, byteOffset, encoding, dir) {
        var indexSize = 1;
        var arrLength = arr.length;
        var valLength = val.length;

        if (encoding !== undefined) {
          encoding = String(encoding).toLowerCase();

          if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') {
            if (arr.length < 2 || val.length < 2) {
              return -1;
            }

            indexSize = 2;
            arrLength /= 2;
            valLength /= 2;
            byteOffset /= 2;
          }
        }

        function read(buf, i) {
          if (indexSize === 1) {
            return buf[i];
          } else {
            return buf.readUInt16BE(i * indexSize);
          }
        }

        var i;

        if (dir) {
          var foundIndex = -1;

          for (i = byteOffset; i < arrLength; i++) {
            if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
              if (foundIndex === -1) foundIndex = i;
              if (i - foundIndex + 1 === valLength) return foundIndex * indexSize;
            } else {
              if (foundIndex !== -1) i -= i - foundIndex;
              foundIndex = -1;
            }
          }
        } else {
          if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;

          for (i = byteOffset; i >= 0; i--) {
            var found = true;

            for (var j = 0; j < valLength; j++) {
              if (read(arr, i + j) !== read(val, j)) {
                found = false;
                break;
              }
            }

            if (found) return i;
          }
        }

        return -1;
      }

      Buffer.prototype.includes = function includes(val, byteOffset, encoding) {
        return this.indexOf(val, byteOffset, encoding) !== -1;
      };

      Buffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {
        return bidirectionalIndexOf(this, val, byteOffset, encoding, true);
      };

      Buffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {
        return bidirectionalIndexOf(this, val, byteOffset, encoding, false);
      };

      function hexWrite(buf, string, offset, length) {
        offset = Number(offset) || 0;
        var remaining = buf.length - offset;

        if (!length) {
          length = remaining;
        } else {
          length = Number(length);

          if (length > remaining) {
            length = remaining;
          }
        } // must be an even number of digits


        var strLen = string.length;
        if (strLen % 2 !== 0) throw new TypeError('Invalid hex string');

        if (length > strLen / 2) {
          length = strLen / 2;
        }

        for (var i = 0; i < length; ++i) {
          var parsed = parseInt(string.substr(i * 2, 2), 16);
          if (isNaN(parsed)) return i;
          buf[offset + i] = parsed;
        }

        return i;
      }

      function utf8Write(buf, string, offset, length) {
        return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length);
      }

      function asciiWrite(buf, string, offset, length) {
        return blitBuffer(asciiToBytes(string), buf, offset, length);
      }

      function latin1Write(buf, string, offset, length) {
        return asciiWrite(buf, string, offset, length);
      }

      function base64Write(buf, string, offset, length) {
        return blitBuffer(base64ToBytes(string), buf, offset, length);
      }

      function ucs2Write(buf, string, offset, length) {
        return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length);
      }

      Buffer.prototype.write = function write(string, offset, length, encoding) {
        // Buffer#write(string)
        if (offset === undefined) {
          encoding = 'utf8';
          length = this.length;
          offset = 0; // Buffer#write(string, encoding)
        } else if (length === undefined && typeof offset === 'string') {
          encoding = offset;
          length = this.length;
          offset = 0; // Buffer#write(string, offset[, length][, encoding])
        } else if (isFinite(offset)) {
          offset = offset | 0;

          if (isFinite(length)) {
            length = length | 0;
            if (encoding === undefined) encoding = 'utf8';
          } else {
            encoding = length;
            length = undefined;
          } // legacy write(string, encoding, offset, length) - remove in v0.13

        } else {
          throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported');
        }

        var remaining = this.length - offset;
        if (length === undefined || length > remaining) length = remaining;

        if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) {
          throw new RangeError('Attempt to write outside buffer bounds');
        }

        if (!encoding) encoding = 'utf8';
        var loweredCase = false;

        for (;;) {
          switch (encoding) {
            case 'hex':
              return hexWrite(this, string, offset, length);

            case 'utf8':
            case 'utf-8':
              return utf8Write(this, string, offset, length);

            case 'ascii':
              return asciiWrite(this, string, offset, length);

            case 'latin1':
            case 'binary':
              return latin1Write(this, string, offset, length);

            case 'base64':
              // Warning: maxLength not taken into account in base64Write
              return base64Write(this, string, offset, length);

            case 'ucs2':
            case 'ucs-2':
            case 'utf16le':
            case 'utf-16le':
              return ucs2Write(this, string, offset, length);

            default:
              if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);
              encoding = ('' + encoding).toLowerCase();
              loweredCase = true;
          }
        }
      };

      Buffer.prototype.toJSON = function toJSON() {
        return {
          type: 'Buffer',
          data: Array.prototype.slice.call(this._arr || this, 0)
        };
      };

      function base64Slice(buf, start, end) {
        if (start === 0 && end === buf.length) {
          return base64.fromByteArray(buf);
        } else {
          return base64.fromByteArray(buf.slice(start, end));
        }
      }

      function utf8Slice(buf, start, end) {
        end = Math.min(buf.length, end);
        var res = [];
        var i = start;

        while (i < end) {
          var firstByte = buf[i];
          var codePoint = null;
          var bytesPerSequence = firstByte > 0xEF ? 4 : firstByte > 0xDF ? 3 : firstByte > 0xBF ? 2 : 1;

          if (i + bytesPerSequence <= end) {
            var secondByte, thirdByte, fourthByte, tempCodePoint;

            switch (bytesPerSequence) {
              case 1:
                if (firstByte < 0x80) {
                  codePoint = firstByte;
                }

                break;

              case 2:
                secondByte = buf[i + 1];

                if ((secondByte & 0xC0) === 0x80) {
                  tempCodePoint = (firstByte & 0x1F) << 0x6 | secondByte & 0x3F;

                  if (tempCodePoint > 0x7F) {
                    codePoint = tempCodePoint;
                  }
                }

                break;

              case 3:
                secondByte = buf[i + 1];
                thirdByte = buf[i + 2];

                if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
                  tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | thirdByte & 0x3F;

                  if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
                    codePoint = tempCodePoint;
                  }
                }

                break;

              case 4:
                secondByte = buf[i + 1];
                thirdByte = buf[i + 2];
                fourthByte = buf[i + 3];

                if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
                  tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | fourthByte & 0x3F;

                  if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
                    codePoint = tempCodePoint;
                  }
                }

            }
          }

          if (codePoint === null) {
            // we did not generate a valid codePoint so insert a
            // replacement char (U+FFFD) and advance only 1 byte
            codePoint = 0xFFFD;
            bytesPerSequence = 1;
          } else if (codePoint > 0xFFFF) {
            // encode to utf16 (surrogate pair dance)
            codePoint -= 0x10000;
            res.push(codePoint >>> 10 & 0x3FF | 0xD800);
            codePoint = 0xDC00 | codePoint & 0x3FF;
          }

          res.push(codePoint);
          i += bytesPerSequence;
        }

        return decodeCodePointsArray(res);
      } // Based on http://stackoverflow.com/a/22747272/680742, the browser with
      // the lowest limit is Chrome, with 0x10000 args.
      // We go 1 magnitude less, for safety


      var MAX_ARGUMENTS_LENGTH = 0x1000;

      function decodeCodePointsArray(codePoints) {
        var len = codePoints.length;

        if (len <= MAX_ARGUMENTS_LENGTH) {
          return String.fromCharCode.apply(String, codePoints); // avoid extra slice()
        } // Decode in chunks to avoid "call stack size exceeded".


        var res = '';
        var i = 0;

        while (i < len) {
          res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));
        }

        return res;
      }

      function asciiSlice(buf, start, end) {
        var ret = '';
        end = Math.min(buf.length, end);

        for (var i = start; i < end; ++i) {
          ret += String.fromCharCode(buf[i] & 0x7F);
        }

        return ret;
      }

      function latin1Slice(buf, start, end) {
        var ret = '';
        end = Math.min(buf.length, end);

        for (var i = start; i < end; ++i) {
          ret += String.fromCharCode(buf[i]);
        }

        return ret;
      }

      function hexSlice(buf, start, end) {
        var len = buf.length;
        if (!start || start < 0) start = 0;
        if (!end || end < 0 || end > len) end = len;
        var out = '';

        for (var i = start; i < end; ++i) {
          out += toHex(buf[i]);
        }

        return out;
      }

      function utf16leSlice(buf, start, end) {
        var bytes = buf.slice(start, end);
        var res = '';

        for (var i = 0; i < bytes.length; i += 2) {
          res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);
        }

        return res;
      }

      Buffer.prototype.slice = function slice(start, end) {
        var len = this.length;
        start = ~~start;
        end = end === undefined ? len : ~~end;

        if (start < 0) {
          start += len;
          if (start < 0) start = 0;
        } else if (start > len) {
          start = len;
        }

        if (end < 0) {
          end += len;
          if (end < 0) end = 0;
        } else if (end > len) {
          end = len;
        }

        if (end < start) end = start;
        var newBuf;

        if (Buffer.TYPED_ARRAY_SUPPORT) {
          newBuf = this.subarray(start, end);
          newBuf.__proto__ = Buffer.prototype;
        } else {
          var sliceLen = end - start;
          newBuf = new Buffer(sliceLen, undefined);

          for (var i = 0; i < sliceLen; ++i) {
            newBuf[i] = this[i + start];
          }
        }

        return newBuf;
      };
      /*
       * Need to make sure that buffer isn't trying to write out of bounds.
       */


      function checkOffset(offset, ext, length) {
        if (offset % 1 !== 0 || offset < 0) throw new RangeError('offset is not uint');
        if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length');
      }

      Buffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) {
        offset = offset | 0;
        byteLength = byteLength | 0;
        if (!noAssert) checkOffset(offset, byteLength, this.length);
        var val = this[offset];
        var mul = 1;
        var i = 0;

        while (++i < byteLength && (mul *= 0x100)) {
          val += this[offset + i] * mul;
        }

        return val;
      };

      Buffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) {
        offset = offset | 0;
        byteLength = byteLength | 0;

        if (!noAssert) {
          checkOffset(offset, byteLength, this.length);
        }

        var val = this[offset + --byteLength];
        var mul = 1;

        while (byteLength > 0 && (mul *= 0x100)) {
          val += this[offset + --byteLength] * mul;
        }

        return val;
      };

      Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {
        if (!noAssert) checkOffset(offset, 1, this.length);
        return this[offset];
      };

      Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {
        if (!noAssert) checkOffset(offset, 2, this.length);
        return this[offset] | this[offset + 1] << 8;
      };

      Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {
        if (!noAssert) checkOffset(offset, 2, this.length);
        return this[offset] << 8 | this[offset + 1];
      };

      Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {
        if (!noAssert) checkOffset(offset, 4, this.length);
        return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 0x1000000;
      };

      Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {
        if (!noAssert) checkOffset(offset, 4, this.length);
        return this[offset] * 0x1000000 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);
      };

      Buffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) {
        offset = offset | 0;
        byteLength = byteLength | 0;
        if (!noAssert) checkOffset(offset, byteLength, this.length);
        var val = this[offset];
        var mul = 1;
        var i = 0;

        while (++i < byteLength && (mul *= 0x100)) {
          val += this[offset + i] * mul;
        }

        mul *= 0x80;
        if (val >= mul) val -= Math.pow(2, 8 * byteLength);
        return val;
      };

      Buffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) {
        offset = offset | 0;
        byteLength = byteLength | 0;
        if (!noAssert) checkOffset(offset, byteLength, this.length);
        var i = byteLength;
        var mul = 1;
        var val = this[offset + --i];

        while (i > 0 && (mul *= 0x100)) {
          val += this[offset + --i] * mul;
        }

        mul *= 0x80;
        if (val >= mul) val -= Math.pow(2, 8 * byteLength);
        return val;
      };

      Buffer.prototype.readInt8 = function readInt8(offset, noAssert) {
        if (!noAssert) checkOffset(offset, 1, this.length);
        if (!(this[offset] & 0x80)) return this[offset];
        return (0xff - this[offset] + 1) * -1;
      };

      Buffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {
        if (!noAssert) checkOffset(offset, 2, this.length);
        var val = this[offset] | this[offset + 1] << 8;
        return val & 0x8000 ? val | 0xFFFF0000 : val;
      };

      Buffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {
        if (!noAssert) checkOffset(offset, 2, this.length);
        var val = this[offset + 1] | this[offset] << 8;
        return val & 0x8000 ? val | 0xFFFF0000 : val;
      };

      Buffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {
        if (!noAssert) checkOffset(offset, 4, this.length);
        return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;
      };

      Buffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {
        if (!noAssert) checkOffset(offset, 4, this.length);
        return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];
      };

      Buffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {
        if (!noAssert) checkOffset(offset, 4, this.length);
        return ieee754.read(this, offset, true, 23, 4);
      };

      Buffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {
        if (!noAssert) checkOffset(offset, 4, this.length);
        return ieee754.read(this, offset, false, 23, 4);
      };

      Buffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {
        if (!noAssert) checkOffset(offset, 8, this.length);
        return ieee754.read(this, offset, true, 52, 8);
      };

      Buffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {
        if (!noAssert) checkOffset(offset, 8, this.length);
        return ieee754.read(this, offset, false, 52, 8);
      };

      function checkInt(buf, value, offset, ext, max, min) {
        if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance');
        if (value > max || value < min) throw new RangeError('"value" argument is out of bounds');
        if (offset + ext > buf.length) throw new RangeError('Index out of range');
      }

      Buffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) {
        value = +value;
        offset = offset | 0;
        byteLength = byteLength | 0;

        if (!noAssert) {
          var maxBytes = Math.pow(2, 8 * byteLength) - 1;
          checkInt(this, value, offset, byteLength, maxBytes, 0);
        }

        var mul = 1;
        var i = 0;
        this[offset] = value & 0xFF;

        while (++i < byteLength && (mul *= 0x100)) {
          this[offset + i] = value / mul & 0xFF;
        }

        return offset + byteLength;
      };

      Buffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) {
        value = +value;
        offset = offset | 0;
        byteLength = byteLength | 0;

        if (!noAssert) {
          var maxBytes = Math.pow(2, 8 * byteLength) - 1;
          checkInt(this, value, offset, byteLength, maxBytes, 0);
        }

        var i = byteLength - 1;
        var mul = 1;
        this[offset + i] = value & 0xFF;

        while (--i >= 0 && (mul *= 0x100)) {
          this[offset + i] = value / mul & 0xFF;
        }

        return offset + byteLength;
      };

      Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {
        value = +value;
        offset = offset | 0;
        if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);
        if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);
        this[offset] = value & 0xff;
        return offset + 1;
      };

      function objectWriteUInt16(buf, value, offset, littleEndian) {
        if (value < 0) value = 0xffff + value + 1;

        for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {
          buf[offset + i] = (value & 0xff << 8 * (littleEndian ? i : 1 - i)) >>> (littleEndian ? i : 1 - i) * 8;
        }
      }

      Buffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {
        value = +value;
        offset = offset | 0;
        if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);

        if (Buffer.TYPED_ARRAY_SUPPORT) {
          this[offset] = value & 0xff;
          this[offset + 1] = value >>> 8;
        } else {
          objectWriteUInt16(this, value, offset, true);
        }

        return offset + 2;
      };

      Buffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {
        value = +value;
        offset = offset | 0;
        if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);

        if (Buffer.TYPED_ARRAY_SUPPORT) {
          this[offset] = value >>> 8;
          this[offset + 1] = value & 0xff;
        } else {
          objectWriteUInt16(this, value, offset, false);
        }

        return offset + 2;
      };

      function objectWriteUInt32(buf, value, offset, littleEndian) {
        if (value < 0) value = 0xffffffff + value + 1;

        for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {
          buf[offset + i] = value >>> (littleEndian ? i : 3 - i) * 8 & 0xff;
        }
      }

      Buffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {
        value = +value;
        offset = offset | 0;
        if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);

        if (Buffer.TYPED_ARRAY_SUPPORT) {
          this[offset + 3] = value >>> 24;
          this[offset + 2] = value >>> 16;
          this[offset + 1] = value >>> 8;
          this[offset] = value & 0xff;
        } else {
          objectWriteUInt32(this, value, offset, true);
        }

        return offset + 4;
      };

      Buffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {
        value = +value;
        offset = offset | 0;
        if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);

        if (Buffer.TYPED_ARRAY_SUPPORT) {
          this[offset] = value >>> 24;
          this[offset + 1] = value >>> 16;
          this[offset + 2] = value >>> 8;
          this[offset + 3] = value & 0xff;
        } else {
          objectWriteUInt32(this, value, offset, false);
        }

        return offset + 4;
      };

      Buffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) {
        value = +value;
        offset = offset | 0;

        if (!noAssert) {
          var limit = Math.pow(2, 8 * byteLength - 1);
          checkInt(this, value, offset, byteLength, limit - 1, -limit);
        }

        var i = 0;
        var mul = 1;
        var sub = 0;
        this[offset] = value & 0xFF;

        while (++i < byteLength && (mul *= 0x100)) {
          if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
            sub = 1;
          }

          this[offset + i] = (value / mul >> 0) - sub & 0xFF;
        }

        return offset + byteLength;
      };

      Buffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) {
        value = +value;
        offset = offset | 0;

        if (!noAssert) {
          var limit = Math.pow(2, 8 * byteLength - 1);
          checkInt(this, value, offset, byteLength, limit - 1, -limit);
        }

        var i = byteLength - 1;
        var mul = 1;
        var sub = 0;
        this[offset + i] = value & 0xFF;

        while (--i >= 0 && (mul *= 0x100)) {
          if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
            sub = 1;
          }

          this[offset + i] = (value / mul >> 0) - sub & 0xFF;
        }

        return offset + byteLength;
      };

      Buffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {
        value = +value;
        offset = offset | 0;
        if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);
        if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);
        if (value < 0) value = 0xff + value + 1;
        this[offset] = value & 0xff;
        return offset + 1;
      };

      Buffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {
        value = +value;
        offset = offset | 0;
        if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);

        if (Buffer.TYPED_ARRAY_SUPPORT) {
          this[offset] = value & 0xff;
          this[offset + 1] = value >>> 8;
        } else {
          objectWriteUInt16(this, value, offset, true);
        }

        return offset + 2;
      };

      Buffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {
        value = +value;
        offset = offset | 0;
        if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);

        if (Buffer.TYPED_ARRAY_SUPPORT) {
          this[offset] = value >>> 8;
          this[offset + 1] = value & 0xff;
        } else {
          objectWriteUInt16(this, value, offset, false);
        }

        return offset + 2;
      };

      Buffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {
        value = +value;
        offset = offset | 0;
        if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);

        if (Buffer.TYPED_ARRAY_SUPPORT) {
          this[offset] = value & 0xff;
          this[offset + 1] = value >>> 8;
          this[offset + 2] = value >>> 16;
          this[offset + 3] = value >>> 24;
        } else {
          objectWriteUInt32(this, value, offset, true);
        }

        return offset + 4;
      };

      Buffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {
        value = +value;
        offset = offset | 0;
        if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);
        if (value < 0) value = 0xffffffff + value + 1;

        if (Buffer.TYPED_ARRAY_SUPPORT) {
          this[offset] = value >>> 24;
          this[offset + 1] = value >>> 16;
          this[offset + 2] = value >>> 8;
          this[offset + 3] = value & 0xff;
        } else {
          objectWriteUInt32(this, value, offset, false);
        }

        return offset + 4;
      };

      function checkIEEE754(buf, value, offset, ext, max, min) {
        if (offset + ext > buf.length) throw new RangeError('Index out of range');
        if (offset < 0) throw new RangeError('Index out of range');
      }

      function writeFloat(buf, value, offset, littleEndian, noAssert) {
        if (!noAssert) {
          checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38);
        }

        ieee754.write(buf, value, offset, littleEndian, 23, 4);
        return offset + 4;
      }

      Buffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {
        return writeFloat(this, value, offset, true, noAssert);
      };

      Buffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {
        return writeFloat(this, value, offset, false, noAssert);
      };

      function writeDouble(buf, value, offset, littleEndian, noAssert) {
        if (!noAssert) {
          checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308);
        }

        ieee754.write(buf, value, offset, littleEndian, 52, 8);
        return offset + 8;
      }

      Buffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {
        return writeDouble(this, value, offset, true, noAssert);
      };

      Buffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {
        return writeDouble(this, value, offset, false, noAssert);
      }; // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)


      Buffer.prototype.copy = function copy(target, targetStart, start, end) {
        if (!start) start = 0;
        if (!end && end !== 0) end = this.length;
        if (targetStart >= target.length) targetStart = target.length;
        if (!targetStart) targetStart = 0;
        if (end > 0 && end < start) end = start; // Copy 0 bytes; we're done

        if (end === start) return 0;
        if (target.length === 0 || this.length === 0) return 0; // Fatal error conditions

        if (targetStart < 0) {
          throw new RangeError('targetStart out of bounds');
        }

        if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds');
        if (end < 0) throw new RangeError('sourceEnd out of bounds'); // Are we oob?

        if (end > this.length) end = this.length;

        if (target.length - targetStart < end - start) {
          end = target.length - targetStart + start;
        }

        var len = end - start;
        var i;

        if (this === target && start < targetStart && targetStart < end) {
          // descending copy from end
          for (i = len - 1; i >= 0; --i) {
            target[i + targetStart] = this[i + start];
          }
        } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
          // ascending copy from start
          for (i = 0; i < len; ++i) {
            target[i + targetStart] = this[i + start];
          }
        } else {
          Uint8Array.prototype.set.call(target, this.subarray(start, start + len), targetStart);
        }

        return len;
      }; // Usage:
      //    buffer.fill(number[, offset[, end]])
      //    buffer.fill(buffer[, offset[, end]])
      //    buffer.fill(string[, offset[, end]][, encoding])


      Buffer.prototype.fill = function fill(val, start, end, encoding) {
        // Handle string cases:
        if (typeof val === 'string') {
          if (typeof start === 'string') {
            encoding = start;
            start = 0;
            end = this.length;
          } else if (typeof end === 'string') {
            encoding = end;
            end = this.length;
          }

          if (val.length === 1) {
            var code = val.charCodeAt(0);

            if (code < 256) {
              val = code;
            }
          }

          if (encoding !== undefined && typeof encoding !== 'string') {
            throw new TypeError('encoding must be a string');
          }

          if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
            throw new TypeError('Unknown encoding: ' + encoding);
          }
        } else if (typeof val === 'number') {
          val = val & 255;
        } // Invalid ranges are not set to a default, so can range check early.


        if (start < 0 || this.length < start || this.length < end) {
          throw new RangeError('Out of range index');
        }

        if (end <= start) {
          return this;
        }

        start = start >>> 0;
        end = end === undefined ? this.length : end >>> 0;
        if (!val) val = 0;
        var i;

        if (typeof val === 'number') {
          for (i = start; i < end; ++i) {
            this[i] = val;
          }
        } else {
          var bytes = Buffer.isBuffer(val) ? val : utf8ToBytes(new Buffer(val, encoding).toString());
          var len = bytes.length;

          for (i = 0; i < end - start; ++i) {
            this[i + start] = bytes[i % len];
          }
        }

        return this;
      }; // HELPER FUNCTIONS
      // ================


      var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g;

      function base64clean(str) {
        // Node strips out invalid characters like \n and \t from the string, base64-js does not
        str = stringtrim(str).replace(INVALID_BASE64_RE, ''); // Node converts strings with length < 2 to ''

        if (str.length < 2) return ''; // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not

        while (str.length % 4 !== 0) {
          str = str + '=';
        }

        return str;
      }

      function stringtrim(str) {
        if (str.trim) return str.trim();
        return str.replace(/^\s+|\s+$/g, '');
      }

      function toHex(n) {
        if (n < 16) return '0' + n.toString(16);
        return n.toString(16);
      }

      function utf8ToBytes(string, units) {
        units = units || Infinity;
        var codePoint;
        var length = string.length;
        var leadSurrogate = null;
        var bytes = [];

        for (var i = 0; i < length; ++i) {
          codePoint = string.charCodeAt(i); // is surrogate component

          if (codePoint > 0xD7FF && codePoint < 0xE000) {
            // last char was a lead
            if (!leadSurrogate) {
              // no lead yet
              if (codePoint > 0xDBFF) {
                // unexpected trail
                if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
                continue;
              } else if (i + 1 === length) {
                // unpaired lead
                if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
                continue;
              } // valid lead


              leadSurrogate = codePoint;
              continue;
            } // 2 leads in a row


            if (codePoint < 0xDC00) {
              if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
              leadSurrogate = codePoint;
              continue;
            } // valid surrogate pair


            codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;
          } else if (leadSurrogate) {
            // valid bmp char, but last char was a lead
            if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
          }

          leadSurrogate = null; // encode utf8

          if (codePoint < 0x80) {
            if ((units -= 1) < 0) break;
            bytes.push(codePoint);
          } else if (codePoint < 0x800) {
            if ((units -= 2) < 0) break;
            bytes.push(codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80);
          } else if (codePoint < 0x10000) {
            if ((units -= 3) < 0) break;
            bytes.push(codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);
          } else if (codePoint < 0x110000) {
            if ((units -= 4) < 0) break;
            bytes.push(codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);
          } else {
            throw new Error('Invalid code point');
          }
        }

        return bytes;
      }

      function asciiToBytes(str) {
        var byteArray = [];

        for (var i = 0; i < str.length; ++i) {
          // Node's code seems to be doing this and not & 0x7F..
          byteArray.push(str.charCodeAt(i) & 0xFF);
        }

        return byteArray;
      }

      function utf16leToBytes(str, units) {
        var c, hi, lo;
        var byteArray = [];

        for (var i = 0; i < str.length; ++i) {
          if ((units -= 2) < 0) break;
          c = str.charCodeAt(i);
          hi = c >> 8;
          lo = c % 256;
          byteArray.push(lo);
          byteArray.push(hi);
        }

        return byteArray;
      }

      function base64ToBytes(str) {
        return base64.toByteArray(base64clean(str));
      }

      function blitBuffer(src, dst, offset, length) {
        for (var i = 0; i < length; ++i) {
          if (i + offset >= dst.length || i >= src.length) break;
          dst[i + offset] = src[i];
        }

        return i;
      }

      function isnan(val) {
        return val !== val; // eslint-disable-line no-self-compare
      }
      /***/

    },

    /***/
    "tk/3":
    /*!********************************************************************!*\
      !*** ./node_modules/@angular/common/__ivy_ngcc__/fesm2015/http.js ***!
      \********************************************************************/

    /*! exports provided: HTTP_INTERCEPTORS, HttpBackend, HttpClient, HttpClientJsonpModule, HttpClientModule, HttpClientXsrfModule, HttpErrorResponse, HttpEventType, HttpHandler, HttpHeaderResponse, HttpHeaders, HttpParams, HttpRequest, HttpResponse, HttpResponseBase, HttpUrlEncodingCodec, HttpXhrBackend, HttpXsrfTokenExtractor, JsonpClientBackend, JsonpInterceptor, XhrFactory, ɵHttpInterceptingHandler, ɵangular_packages_common_http_http_a, ɵangular_packages_common_http_http_b, ɵangular_packages_common_http_http_c, ɵangular_packages_common_http_http_d, ɵangular_packages_common_http_http_e, ɵangular_packages_common_http_http_f, ɵangular_packages_common_http_http_g, ɵangular_packages_common_http_http_h */

    /***/
    function tk3(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HTTP_INTERCEPTORS", function () {
        return HTTP_INTERCEPTORS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HttpBackend", function () {
        return HttpBackend;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HttpClient", function () {
        return HttpClient;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HttpClientJsonpModule", function () {
        return HttpClientJsonpModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HttpClientModule", function () {
        return HttpClientModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HttpClientXsrfModule", function () {
        return HttpClientXsrfModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HttpErrorResponse", function () {
        return HttpErrorResponse;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HttpEventType", function () {
        return HttpEventType;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HttpHandler", function () {
        return HttpHandler;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HttpHeaderResponse", function () {
        return HttpHeaderResponse;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HttpHeaders", function () {
        return HttpHeaders;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HttpParams", function () {
        return HttpParams;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HttpRequest", function () {
        return HttpRequest;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HttpResponse", function () {
        return HttpResponse;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HttpResponseBase", function () {
        return HttpResponseBase;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HttpUrlEncodingCodec", function () {
        return HttpUrlEncodingCodec;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HttpXhrBackend", function () {
        return HttpXhrBackend;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HttpXsrfTokenExtractor", function () {
        return HttpXsrfTokenExtractor;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "JsonpClientBackend", function () {
        return JsonpClientBackend;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "JsonpInterceptor", function () {
        return JsonpInterceptor;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "XhrFactory", function () {
        return XhrFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵHttpInterceptingHandler", function () {
        return HttpInterceptingHandler;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_http_http_a", function () {
        return NoopInterceptor;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_http_http_b", function () {
        return JsonpCallbackContext;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_http_http_c", function () {
        return jsonpCallbackContext;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_http_http_d", function () {
        return BrowserXhr;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_http_http_e", function () {
        return XSRF_COOKIE_NAME;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_http_http_f", function () {
        return XSRF_HEADER_NAME;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_http_http_g", function () {
        return HttpXsrfCookieExtractor;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_common_http_http_h", function () {
        return HttpXsrfInterceptor;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /**
       * @license Angular v12.0.0-next.1
       * (c) 2010-2020 Google LLC. https://angular.io/
       * License: MIT
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Transforms an `HttpRequest` into a stream of `HttpEvent`s, one of which will likely be a
       * `HttpResponse`.
       *
       * `HttpHandler` is injectable. When injected, the handler instance dispatches requests to the
       * first interceptor in the chain, which dispatches to the second, etc, eventually reaching the
       * `HttpBackend`.
       *
       * In an `HttpInterceptor`, the `HttpHandler` parameter is the next interceptor in the chain.
       *
       * @publicApi
       */


      var HttpHandler = function HttpHandler() {
        _classCallCheck2(this, HttpHandler);
      };
      /**
       * A final `HttpHandler` which will dispatch the request via browser HTTP APIs to a backend.
       *
       * Interceptors sit between the `HttpClient` interface and the `HttpBackend`.
       *
       * When injected, `HttpBackend` dispatches requests directly to the backend, without going
       * through the interceptor chain.
       *
       * @publicApi
       */


      var HttpBackend = function HttpBackend() {
        _classCallCheck2(this, HttpBackend);
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Represents the header configuration options for an HTTP request.
       * Instances are immutable. Modifying methods return a cloned
       * instance with the change. The original object is never changed.
       *
       * @publicApi
       */


      var HttpHeaders = /*#__PURE__*/function () {
        /**  Constructs a new HTTP header object with the given values.*/
        function HttpHeaders(headers) {
          var _this925 = this;

          _classCallCheck2(this, HttpHeaders);

          /**
           * Internal map of lowercased header names to the normalized
           * form of the name (the form seen first).
           */
          this.normalizedNames = new Map();
          /**
           * Queued updates to be materialized the next initialization.
           */

          this.lazyUpdate = null;

          if (!headers) {
            this.headers = new Map();
          } else if (typeof headers === 'string') {
            this.lazyInit = function () {
              _this925.headers = new Map();
              headers.split('\n').forEach(function (line) {
                var index = line.indexOf(':');

                if (index > 0) {
                  var name = line.slice(0, index);
                  var key = name.toLowerCase();
                  var value = line.slice(index + 1).trim();

                  _this925.maybeSetNormalizedName(name, key);

                  if (_this925.headers.has(key)) {
                    _this925.headers.get(key).push(value);
                  } else {
                    _this925.headers.set(key, [value]);
                  }
                }
              });
            };
          } else {
            this.lazyInit = function () {
              _this925.headers = new Map();
              Object.keys(headers).forEach(function (name) {
                var values = headers[name];
                var key = name.toLowerCase();

                if (typeof values === 'string') {
                  values = [values];
                }

                if (values.length > 0) {
                  _this925.headers.set(key, values);

                  _this925.maybeSetNormalizedName(name, key);
                }
              });
            };
          }
        }
        /**
         * Checks for existence of a given header.
         *
         * @param name The header name to check for existence.
         *
         * @returns True if the header exists, false otherwise.
         */


        _createClass2(HttpHeaders, [{
          key: "has",
          value: function has(name) {
            this.init();
            return this.headers.has(name.toLowerCase());
          }
          /**
           * Retrieves the first value of a given header.
           *
           * @param name The header name.
           *
           * @returns The value string if the header exists, null otherwise
           */

        }, {
          key: "get",
          value: function get(name) {
            this.init();
            var values = this.headers.get(name.toLowerCase());
            return values && values.length > 0 ? values[0] : null;
          }
          /**
           * Retrieves the names of the headers.
           *
           * @returns A list of header names.
           */

        }, {
          key: "keys",
          value: function keys() {
            this.init();
            return Array.from(this.normalizedNames.values());
          }
          /**
           * Retrieves a list of values for a given header.
           *
           * @param name The header name from which to retrieve values.
           *
           * @returns A string of values if the header exists, null otherwise.
           */

        }, {
          key: "getAll",
          value: function getAll(name) {
            this.init();
            return this.headers.get(name.toLowerCase()) || null;
          }
          /**
           * Appends a new value to the existing set of values for a header
           * and returns them in a clone of the original instance.
           *
           * @param name The header name for which to append the values.
           * @param value The value to append.
           *
           * @returns A clone of the HTTP headers object with the value appended to the given header.
           */

        }, {
          key: "append",
          value: function append(name, value) {
            return this.clone({
              name: name,
              value: value,
              op: 'a'
            });
          }
          /**
           * Sets or modifies a value for a given header in a clone of the original instance.
           * If the header already exists, its value is replaced with the given value
           * in the returned object.
           *
           * @param name The header name.
           * @param value The value or values to set or overide for the given header.
           *
           * @returns A clone of the HTTP headers object with the newly set header value.
           */

        }, {
          key: "set",
          value: function set(name, value) {
            return this.clone({
              name: name,
              value: value,
              op: 's'
            });
          }
          /**
           * Deletes values for a given header in a clone of the original instance.
           *
           * @param name The header name.
           * @param value The value or values to delete for the given header.
           *
           * @returns A clone of the HTTP headers object with the given value deleted.
           */

        }, {
          key: "delete",
          value: function _delete(name, value) {
            return this.clone({
              name: name,
              value: value,
              op: 'd'
            });
          }
        }, {
          key: "maybeSetNormalizedName",
          value: function maybeSetNormalizedName(name, lcName) {
            if (!this.normalizedNames.has(lcName)) {
              this.normalizedNames.set(lcName, name);
            }
          }
        }, {
          key: "init",
          value: function init() {
            var _this926 = this;

            if (!!this.lazyInit) {
              if (this.lazyInit instanceof HttpHeaders) {
                this.copyFrom(this.lazyInit);
              } else {
                this.lazyInit();
              }

              this.lazyInit = null;

              if (!!this.lazyUpdate) {
                this.lazyUpdate.forEach(function (update) {
                  return _this926.applyUpdate(update);
                });
                this.lazyUpdate = null;
              }
            }
          }
        }, {
          key: "copyFrom",
          value: function copyFrom(other) {
            var _this927 = this;

            other.init();
            Array.from(other.headers.keys()).forEach(function (key) {
              _this927.headers.set(key, other.headers.get(key));

              _this927.normalizedNames.set(key, other.normalizedNames.get(key));
            });
          }
        }, {
          key: "clone",
          value: function clone(update) {
            var clone = new HttpHeaders();
            clone.lazyInit = !!this.lazyInit && this.lazyInit instanceof HttpHeaders ? this.lazyInit : this;
            clone.lazyUpdate = (this.lazyUpdate || []).concat([update]);
            return clone;
          }
        }, {
          key: "applyUpdate",
          value: function applyUpdate(update) {
            var key = update.name.toLowerCase();

            switch (update.op) {
              case 'a':
              case 's':
                var value = update.value;

                if (typeof value === 'string') {
                  value = [value];
                }

                if (value.length === 0) {
                  return;
                }

                this.maybeSetNormalizedName(update.name, key);
                var base = (update.op === 'a' ? this.headers.get(key) : undefined) || [];
                base.push.apply(base, _toConsumableArray(value));
                this.headers.set(key, base);
                break;

              case 'd':
                var toDelete = update.value;

                if (!toDelete) {
                  this.headers["delete"](key);
                  this.normalizedNames["delete"](key);
                } else {
                  var existing = this.headers.get(key);

                  if (!existing) {
                    return;
                  }

                  existing = existing.filter(function (value) {
                    return toDelete.indexOf(value) === -1;
                  });

                  if (existing.length === 0) {
                    this.headers["delete"](key);
                    this.normalizedNames["delete"](key);
                  } else {
                    this.headers.set(key, existing);
                  }
                }

                break;
            }
          }
          /**
           * @internal
           */

        }, {
          key: "forEach",
          value: function forEach(fn) {
            var _this928 = this;

            this.init();
            Array.from(this.normalizedNames.keys()).forEach(function (key) {
              return fn(_this928.normalizedNames.get(key), _this928.headers.get(key));
            });
          }
        }]);

        return HttpHeaders;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Provides encoding and decoding of URL parameter and query-string values.
       *
       * Serializes and parses URL parameter keys and values to encode and decode them.
       * If you pass URL query parameters without encoding,
       * the query parameters can be misinterpreted at the receiving end.
       *
       *
       * @publicApi
       */


      var HttpUrlEncodingCodec = /*#__PURE__*/function () {
        function HttpUrlEncodingCodec() {
          _classCallCheck2(this, HttpUrlEncodingCodec);
        }

        _createClass2(HttpUrlEncodingCodec, [{
          key: "encodeKey",
          value:
          /**
           * Encodes a key name for a URL parameter or query-string.
           * @param key The key name.
           * @returns The encoded key name.
           */
          function encodeKey(key) {
            return standardEncoding(key);
          }
          /**
           * Encodes the value of a URL parameter or query-string.
           * @param value The value.
           * @returns The encoded value.
           */

        }, {
          key: "encodeValue",
          value: function encodeValue(value) {
            return standardEncoding(value);
          }
          /**
           * Decodes an encoded URL parameter or query-string key.
           * @param key The encoded key name.
           * @returns The decoded key name.
           */

        }, {
          key: "decodeKey",
          value: function decodeKey(key) {
            return decodeURIComponent(key);
          }
          /**
           * Decodes an encoded URL parameter or query-string value.
           * @param value The encoded value.
           * @returns The decoded value.
           */

        }, {
          key: "decodeValue",
          value: function decodeValue(value) {
            return decodeURIComponent(value);
          }
        }]);

        return HttpUrlEncodingCodec;
      }();

      function paramParser(rawParams, codec) {
        var map = new Map();

        if (rawParams.length > 0) {
          var params = rawParams.split('&');
          params.forEach(function (param) {
            var eqIdx = param.indexOf('=');

            var _ref143 = eqIdx == -1 ? [codec.decodeKey(param), ''] : [codec.decodeKey(param.slice(0, eqIdx)), codec.decodeValue(param.slice(eqIdx + 1))],
                _ref144 = _slicedToArray(_ref143, 2),
                key = _ref144[0],
                val = _ref144[1];

            var list = map.get(key) || [];
            list.push(val);
            map.set(key, list);
          });
        }

        return map;
      }

      function standardEncoding(v) {
        return encodeURIComponent(v).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/gi, '$').replace(/%2C/gi, ',').replace(/%3B/gi, ';').replace(/%2B/gi, '+').replace(/%3D/gi, '=').replace(/%3F/gi, '?').replace(/%2F/gi, '/');
      }
      /**
       * An HTTP request/response body that represents serialized parameters,
       * per the MIME type `application/x-www-form-urlencoded`.
       *
       * This class is immutable; all mutation operations return a new instance.
       *
       * @publicApi
       */


      var HttpParams = /*#__PURE__*/function () {
        function HttpParams() {
          var _this929 = this;

          var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

          _classCallCheck2(this, HttpParams);

          this.updates = null;
          this.cloneFrom = null;
          this.encoder = options.encoder || new HttpUrlEncodingCodec();

          if (!!options.fromString) {
            if (!!options.fromObject) {
              throw new Error("Cannot specify both fromString and fromObject.");
            }

            this.map = paramParser(options.fromString, this.encoder);
          } else if (!!options.fromObject) {
            this.map = new Map();
            Object.keys(options.fromObject).forEach(function (key) {
              var value = options.fromObject[key];

              _this929.map.set(key, Array.isArray(value) ? value : [value]);
            });
          } else {
            this.map = null;
          }
        }
        /**
         * Reports whether the body includes one or more values for a given parameter.
         * @param param The parameter name.
         * @returns True if the parameter has one or more values,
         * false if it has no value or is not present.
         */


        _createClass2(HttpParams, [{
          key: "has",
          value: function has(param) {
            this.init();
            return this.map.has(param);
          }
          /**
           * Retrieves the first value for a parameter.
           * @param param The parameter name.
           * @returns The first value of the given parameter,
           * or `null` if the parameter is not present.
           */

        }, {
          key: "get",
          value: function get(param) {
            this.init();
            var res = this.map.get(param);
            return !!res ? res[0] : null;
          }
          /**
           * Retrieves all values for a  parameter.
           * @param param The parameter name.
           * @returns All values in a string array,
           * or `null` if the parameter not present.
           */

        }, {
          key: "getAll",
          value: function getAll(param) {
            this.init();
            return this.map.get(param) || null;
          }
          /**
           * Retrieves all the parameters for this body.
           * @returns The parameter names in a string array.
           */

        }, {
          key: "keys",
          value: function keys() {
            this.init();
            return Array.from(this.map.keys());
          }
          /**
           * Appends a new value to existing values for a parameter.
           * @param param The parameter name.
           * @param value The new value to add.
           * @return A new body with the appended value.
           */

        }, {
          key: "append",
          value: function append(param, value) {
            return this.clone({
              param: param,
              value: value,
              op: 'a'
            });
          }
          /**
           * Constructs a new body with appended values for the given parameter name.
           * @param params parameters and values
           * @return A new body with the new value.
           */

        }, {
          key: "appendAll",
          value: function appendAll(params) {
            var updates = [];
            Object.keys(params).forEach(function (param) {
              var value = params[param];

              if (Array.isArray(value)) {
                value.forEach(function (_value) {
                  updates.push({
                    param: param,
                    value: _value,
                    op: 'a'
                  });
                });
              } else {
                updates.push({
                  param: param,
                  value: value,
                  op: 'a'
                });
              }
            });
            return this.clone(updates);
          }
          /**
           * Replaces the value for a parameter.
           * @param param The parameter name.
           * @param value The new value.
           * @return A new body with the new value.
           */

        }, {
          key: "set",
          value: function set(param, value) {
            return this.clone({
              param: param,
              value: value,
              op: 's'
            });
          }
          /**
           * Removes a given value or all values from a parameter.
           * @param param The parameter name.
           * @param value The value to remove, if provided.
           * @return A new body with the given value removed, or with all values
           * removed if no value is specified.
           */

        }, {
          key: "delete",
          value: function _delete(param, value) {
            return this.clone({
              param: param,
              value: value,
              op: 'd'
            });
          }
          /**
           * Serializes the body to an encoded string, where key-value pairs (separated by `=`) are
           * separated by `&`s.
           */

        }, {
          key: "toString",
          value: function toString() {
            var _this930 = this;

            this.init();
            return this.keys().map(function (key) {
              var eKey = _this930.encoder.encodeKey(key); // `a: ['1']` produces `'a=1'`
              // `b: []` produces `''`
              // `c: ['1', '2']` produces `'c=1&c=2'`


              return _this930.map.get(key).map(function (value) {
                return eKey + '=' + _this930.encoder.encodeValue(value);
              }).join('&');
            }) // filter out empty values because `b: []` produces `''`
            // which results in `a=1&&c=1&c=2` instead of `a=1&c=1&c=2` if we don't
            .filter(function (param) {
              return param !== '';
            }).join('&');
          }
        }, {
          key: "clone",
          value: function clone(update) {
            var clone = new HttpParams({
              encoder: this.encoder
            });
            clone.cloneFrom = this.cloneFrom || this;
            clone.updates = (this.updates || []).concat(update);
            return clone;
          }
        }, {
          key: "init",
          value: function init() {
            var _this931 = this;

            if (this.map === null) {
              this.map = new Map();
            }

            if (this.cloneFrom !== null) {
              this.cloneFrom.init();
              this.cloneFrom.keys().forEach(function (key) {
                return _this931.map.set(key, _this931.cloneFrom.map.get(key));
              });
              this.updates.forEach(function (update) {
                switch (update.op) {
                  case 'a':
                  case 's':
                    var base = (update.op === 'a' ? _this931.map.get(update.param) : undefined) || [];
                    base.push(update.value);

                    _this931.map.set(update.param, base);

                    break;

                  case 'd':
                    if (update.value !== undefined) {
                      var _base8 = _this931.map.get(update.param) || [];

                      var idx = _base8.indexOf(update.value);

                      if (idx !== -1) {
                        _base8.splice(idx, 1);
                      }

                      if (_base8.length > 0) {
                        _this931.map.set(update.param, _base8);
                      } else {
                        _this931.map["delete"](update.param);
                      }
                    } else {
                      _this931.map["delete"](update.param);

                      break;
                    }

                }
              });
              this.cloneFrom = this.updates = null;
            }
          }
        }]);

        return HttpParams;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Determine whether the given HTTP method may include a body.
       */


      function mightHaveBody(method) {
        switch (method) {
          case 'DELETE':
          case 'GET':
          case 'HEAD':
          case 'OPTIONS':
          case 'JSONP':
            return false;

          default:
            return true;
        }
      }
      /**
       * Safely assert whether the given value is an ArrayBuffer.
       *
       * In some execution environments ArrayBuffer is not defined.
       */


      function isArrayBuffer(value) {
        return typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer;
      }
      /**
       * Safely assert whether the given value is a Blob.
       *
       * In some execution environments Blob is not defined.
       */


      function isBlob(value) {
        return typeof Blob !== 'undefined' && value instanceof Blob;
      }
      /**
       * Safely assert whether the given value is a FormData instance.
       *
       * In some execution environments FormData is not defined.
       */


      function isFormData(value) {
        return typeof FormData !== 'undefined' && value instanceof FormData;
      }
      /**
       * An outgoing HTTP request with an optional typed body.
       *
       * `HttpRequest` represents an outgoing request, including URL, method,
       * headers, body, and other request configuration options. Instances should be
       * assumed to be immutable. To modify a `HttpRequest`, the `clone`
       * method should be used.
       *
       * @publicApi
       */


      var HttpRequest = /*#__PURE__*/function () {
        function HttpRequest(method, url, third, fourth) {
          _classCallCheck2(this, HttpRequest);

          this.url = url;
          /**
           * The request body, or `null` if one isn't set.
           *
           * Bodies are not enforced to be immutable, as they can include a reference to any
           * user-defined data type. However, interceptors should take care to preserve
           * idempotence by treating them as such.
           */

          this.body = null;
          /**
           * Whether this request should be made in a way that exposes progress events.
           *
           * Progress events are expensive (change detection runs on each event) and so
           * they should only be requested if the consumer intends to monitor them.
           */

          this.reportProgress = false;
          /**
           * Whether this request should be sent with outgoing credentials (cookies).
           */

          this.withCredentials = false;
          /**
           * The expected response type of the server.
           *
           * This is used to parse the response appropriately before returning it to
           * the requestee.
           */

          this.responseType = 'json';
          this.method = method.toUpperCase(); // Next, need to figure out which argument holds the HttpRequestInit
          // options, if any.

          var options; // Check whether a body argument is expected. The only valid way to omit
          // the body argument is to use a known no-body method like GET.

          if (mightHaveBody(this.method) || !!fourth) {
            // Body is the third argument, options are the fourth.
            this.body = third !== undefined ? third : null;
            options = fourth;
          } else {
            // No body required, options are the third argument. The body stays null.
            options = third;
          } // If options have been passed, interpret them.


          if (options) {
            // Normalize reportProgress and withCredentials.
            this.reportProgress = !!options.reportProgress;
            this.withCredentials = !!options.withCredentials; // Override default response type of 'json' if one is provided.

            if (!!options.responseType) {
              this.responseType = options.responseType;
            } // Override headers if they're provided.


            if (!!options.headers) {
              this.headers = options.headers;
            }

            if (!!options.params) {
              this.params = options.params;
            }
          } // If no headers have been passed in, construct a new HttpHeaders instance.


          if (!this.headers) {
            this.headers = new HttpHeaders();
          } // If no parameters have been passed in, construct a new HttpUrlEncodedParams instance.


          if (!this.params) {
            this.params = new HttpParams();
            this.urlWithParams = url;
          } else {
            // Encode the parameters to a string in preparation for inclusion in the URL.
            var params = this.params.toString();

            if (params.length === 0) {
              // No parameters, the visible URL is just the URL given at creation time.
              this.urlWithParams = url;
            } else {
              // Does the URL already have query parameters? Look for '?'.
              var qIdx = url.indexOf('?'); // There are 3 cases to handle:
              // 1) No existing parameters -> append '?' followed by params.
              // 2) '?' exists and is followed by existing query string ->
              //    append '&' followed by params.
              // 3) '?' exists at the end of the url -> append params directly.
              // This basically amounts to determining the character, if any, with
              // which to join the URL and parameters.

              var sep = qIdx === -1 ? '?' : qIdx < url.length - 1 ? '&' : '';
              this.urlWithParams = url + sep + params;
            }
          }
        }
        /**
         * Transform the free-form body into a serialized format suitable for
         * transmission to the server.
         */


        _createClass2(HttpRequest, [{
          key: "serializeBody",
          value: function serializeBody() {
            // If no body is present, no need to serialize it.
            if (this.body === null) {
              return null;
            } // Check whether the body is already in a serialized form. If so,
            // it can just be returned directly.


            if (isArrayBuffer(this.body) || isBlob(this.body) || isFormData(this.body) || typeof this.body === 'string') {
              return this.body;
            } // Check whether the body is an instance of HttpUrlEncodedParams.


            if (this.body instanceof HttpParams) {
              return this.body.toString();
            } // Check whether the body is an object or array, and serialize with JSON if so.


            if (typeof this.body === 'object' || typeof this.body === 'boolean' || Array.isArray(this.body)) {
              return JSON.stringify(this.body);
            } // Fall back on toString() for everything else.


            return this.body.toString();
          }
          /**
           * Examine the body and attempt to infer an appropriate MIME type
           * for it.
           *
           * If no such type can be inferred, this method will return `null`.
           */

        }, {
          key: "detectContentTypeHeader",
          value: function detectContentTypeHeader() {
            // An empty body has no content type.
            if (this.body === null) {
              return null;
            } // FormData bodies rely on the browser's content type assignment.


            if (isFormData(this.body)) {
              return null;
            } // Blobs usually have their own content type. If it doesn't, then
            // no type can be inferred.


            if (isBlob(this.body)) {
              return this.body.type || null;
            } // Array buffers have unknown contents and thus no type can be inferred.


            if (isArrayBuffer(this.body)) {
              return null;
            } // Technically, strings could be a form of JSON data, but it's safe enough
            // to assume they're plain strings.


            if (typeof this.body === 'string') {
              return 'text/plain';
            } // `HttpUrlEncodedParams` has its own content-type.


            if (this.body instanceof HttpParams) {
              return 'application/x-www-form-urlencoded;charset=UTF-8';
            } // Arrays, objects, and numbers will be encoded as JSON.


            if (typeof this.body === 'object' || typeof this.body === 'number' || Array.isArray(this.body)) {
              return 'application/json';
            } // No type could be inferred.


            return null;
          }
        }, {
          key: "clone",
          value: function clone() {
            var update = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            // For method, url, and responseType, take the current value unless
            // it is overridden in the update hash.
            var method = update.method || this.method;
            var url = update.url || this.url;
            var responseType = update.responseType || this.responseType; // The body is somewhat special - a `null` value in update.body means
            // whatever current body is present is being overridden with an empty
            // body, whereas an `undefined` value in update.body implies no
            // override.

            var body = update.body !== undefined ? update.body : this.body; // Carefully handle the boolean options to differentiate between
            // `false` and `undefined` in the update args.

            var withCredentials = update.withCredentials !== undefined ? update.withCredentials : this.withCredentials;
            var reportProgress = update.reportProgress !== undefined ? update.reportProgress : this.reportProgress; // Headers and params may be appended to if `setHeaders` or
            // `setParams` are used.

            var headers = update.headers || this.headers;
            var params = update.params || this.params; // Check whether the caller has asked to add headers.

            if (update.setHeaders !== undefined) {
              // Set every requested header.
              headers = Object.keys(update.setHeaders).reduce(function (headers, name) {
                return headers.set(name, update.setHeaders[name]);
              }, headers);
            } // Check whether the caller has asked to set params.


            if (update.setParams) {
              // Set every requested param.
              params = Object.keys(update.setParams).reduce(function (params, param) {
                return params.set(param, update.setParams[param]);
              }, params);
            } // Finally, construct the new HttpRequest using the pieces from above.


            return new HttpRequest(method, url, body, {
              params: params,
              headers: headers,
              reportProgress: reportProgress,
              responseType: responseType,
              withCredentials: withCredentials
            });
          }
        }]);

        return HttpRequest;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Type enumeration for the different kinds of `HttpEvent`.
       *
       * @publicApi
       */


      var HttpEventType;

      (function (HttpEventType) {
        /**
         * The request was sent out over the wire.
         */
        HttpEventType[HttpEventType["Sent"] = 0] = "Sent";
        /**
         * An upload progress event was received.
         */

        HttpEventType[HttpEventType["UploadProgress"] = 1] = "UploadProgress";
        /**
         * The response status code and headers were received.
         */

        HttpEventType[HttpEventType["ResponseHeader"] = 2] = "ResponseHeader";
        /**
         * A download progress event was received.
         */

        HttpEventType[HttpEventType["DownloadProgress"] = 3] = "DownloadProgress";
        /**
         * The full response including the body was received.
         */

        HttpEventType[HttpEventType["Response"] = 4] = "Response";
        /**
         * A custom event from an interceptor or a backend.
         */

        HttpEventType[HttpEventType["User"] = 5] = "User";
      })(HttpEventType || (HttpEventType = {}));
      /**
       * Base class for both `HttpResponse` and `HttpHeaderResponse`.
       *
       * @publicApi
       */


      var HttpResponseBase =
      /**
       * Super-constructor for all responses.
       *
       * The single parameter accepted is an initialization hash. Any properties
       * of the response passed there will override the default values.
       */
      function HttpResponseBase(init) {
        var defaultStatus = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 200;
        var defaultStatusText = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'OK';

        _classCallCheck2(this, HttpResponseBase);

        // If the hash has values passed, use them to initialize the response.
        // Otherwise use the default values.
        this.headers = init.headers || new HttpHeaders();
        this.status = init.status !== undefined ? init.status : defaultStatus;
        this.statusText = init.statusText || defaultStatusText;
        this.url = init.url || null; // Cache the ok value to avoid defining a getter.

        this.ok = this.status >= 200 && this.status < 300;
      };
      /**
       * A partial HTTP response which only includes the status and header data,
       * but no response body.
       *
       * `HttpHeaderResponse` is a `HttpEvent` available on the response
       * event stream, only when progress events are requested.
       *
       * @publicApi
       */


      var HttpHeaderResponse = /*#__PURE__*/function (_HttpResponseBase) {
        _inherits2(HttpHeaderResponse, _HttpResponseBase);

        var _super373 = _createSuper(HttpHeaderResponse);

        /**
         * Create a new `HttpHeaderResponse` with the given parameters.
         */
        function HttpHeaderResponse() {
          var _this932;

          var init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

          _classCallCheck2(this, HttpHeaderResponse);

          _this932 = _super373.call(this, init);
          _this932.type = HttpEventType.ResponseHeader;
          return _this932;
        }
        /**
         * Copy this `HttpHeaderResponse`, overriding its contents with the
         * given parameter hash.
         */


        _createClass2(HttpHeaderResponse, [{
          key: "clone",
          value: function clone() {
            var update = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            // Perform a straightforward initialization of the new HttpHeaderResponse,
            // overriding the current parameters with new ones if given.
            return new HttpHeaderResponse({
              headers: update.headers || this.headers,
              status: update.status !== undefined ? update.status : this.status,
              statusText: update.statusText || this.statusText,
              url: update.url || this.url || undefined
            });
          }
        }]);

        return HttpHeaderResponse;
      }(HttpResponseBase);
      /**
       * A full HTTP response, including a typed response body (which may be `null`
       * if one was not returned).
       *
       * `HttpResponse` is a `HttpEvent` available on the response event
       * stream.
       *
       * @publicApi
       */


      var HttpResponse = /*#__PURE__*/function (_HttpResponseBase2) {
        _inherits2(HttpResponse, _HttpResponseBase2);

        var _super374 = _createSuper(HttpResponse);

        /**
         * Construct a new `HttpResponse`.
         */
        function HttpResponse() {
          var _this933;

          var init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

          _classCallCheck2(this, HttpResponse);

          _this933 = _super374.call(this, init);
          _this933.type = HttpEventType.Response;
          _this933.body = init.body !== undefined ? init.body : null;
          return _this933;
        }

        _createClass2(HttpResponse, [{
          key: "clone",
          value: function clone() {
            var update = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            return new HttpResponse({
              body: update.body !== undefined ? update.body : this.body,
              headers: update.headers || this.headers,
              status: update.status !== undefined ? update.status : this.status,
              statusText: update.statusText || this.statusText,
              url: update.url || this.url || undefined
            });
          }
        }]);

        return HttpResponse;
      }(HttpResponseBase);
      /**
       * A response that represents an error or failure, either from a
       * non-successful HTTP status, an error while executing the request,
       * or some other failure which occurred during the parsing of the response.
       *
       * Any error returned on the `Observable` response stream will be
       * wrapped in an `HttpErrorResponse` to provide additional context about
       * the state of the HTTP layer when the error occurred. The error property
       * will contain either a wrapped Error object or the error response returned
       * from the server.
       *
       * @publicApi
       */


      var HttpErrorResponse = /*#__PURE__*/function (_HttpResponseBase3) {
        _inherits2(HttpErrorResponse, _HttpResponseBase3);

        var _super375 = _createSuper(HttpErrorResponse);

        function HttpErrorResponse(init) {
          var _this934;

          _classCallCheck2(this, HttpErrorResponse);

          // Initialize with a default status of 0 / Unknown Error.
          _this934 = _super375.call(this, init, 0, 'Unknown Error');
          _this934.name = 'HttpErrorResponse';
          /**
           * Errors are never okay, even when the status code is in the 2xx success range.
           */

          _this934.ok = false; // If the response was successful, then this was a parse error. Otherwise, it was
          // a protocol-level failure of some sort. Either the request failed in transit
          // or the server returned an unsuccessful status code.

          if (_this934.status >= 200 && _this934.status < 300) {
            _this934.message = "Http failure during parsing for ".concat(init.url || '(unknown url)');
          } else {
            _this934.message = "Http failure response for ".concat(init.url || '(unknown url)', ": ").concat(init.status, " ").concat(init.statusText);
          }

          _this934.error = init.error || null;
          return _this934;
        }

        return HttpErrorResponse;
      }(HttpResponseBase);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Constructs an instance of `HttpRequestOptions<T>` from a source `HttpMethodOptions` and
       * the given `body`. This function clones the object and adds the body.
       *
       * Note that the `responseType` *options* value is a String that identifies the
       * single data type of the response.
       * A single overload version of the method handles each response type.
       * The value of `responseType` cannot be a union, as the combined signature could imply.
       *
       */


      function addBody(options, body) {
        return {
          body: body,
          headers: options.headers,
          observe: options.observe,
          params: options.params,
          reportProgress: options.reportProgress,
          responseType: options.responseType,
          withCredentials: options.withCredentials
        };
      }
      /**
       * Performs HTTP requests.
       * This service is available as an injectable class, with methods to perform HTTP requests.
       * Each request method has multiple signatures, and the return type varies based on
       * the signature that is called (mainly the values of `observe` and `responseType`).
       *
       * Note that the `responseType` *options* value is a String that identifies the
       * single data type of the response.
       * A single overload version of the method handles each response type.
       * The value of `responseType` cannot be a union, as the combined signature could imply.
      
       *
       * @usageNotes
       * Sample HTTP requests for the [Tour of Heroes](/tutorial/toh-pt0) application.
       *
       * ### HTTP Request Example
       *
       * ```
       *  // GET heroes whose name contains search term
       * searchHeroes(term: string): observable<Hero[]>{
       *
       *  const params = new HttpParams({fromString: 'name=term'});
       *    return this.httpClient.request('GET', this.heroesUrl, {responseType:'json', params});
       * }
       * ```
       * ### JSONP Example
       * ```
       * requestJsonp(url, callback = 'callback') {
       *  return this.httpClient.jsonp(this.heroesURL, callback);
       * }
       * ```
       *
       * ### PATCH Example
       * ```
       * // PATCH one of the heroes' name
       * patchHero (id: number, heroName: string): Observable<{}> {
       * const url = `${this.heroesUrl}/${id}`;   // PATCH api/heroes/42
       *  return this.httpClient.patch(url, {name: heroName}, httpOptions)
       *    .pipe(catchError(this.handleError('patchHero')));
       * }
       * ```
       *
       * @see [HTTP Guide](guide/http)
       *
       * @publicApi
       */


      var HttpClient = /*#__PURE__*/function () {
        function HttpClient(handler) {
          _classCallCheck2(this, HttpClient);

          this.handler = handler;
        }
        /**
         * Constructs an observable for a generic HTTP request that, when subscribed,
         * fires the request through the chain of registered interceptors and on to the
         * server.
         *
         * You can pass an `HttpRequest` directly as the only parameter. In this case,
         * the call returns an observable of the raw `HttpEvent` stream.
         *
         * Alternatively you can pass an HTTP method as the first parameter,
         * a URL string as the second, and an options hash containing the request body as the third.
         * See `addBody()`. In this case, the specified `responseType` and `observe` options determine the
         * type of returned observable.
         *   * The `responseType` value determines how a successful response body is parsed.
         *   * If `responseType` is the default `json`, you can pass a type interface for the resulting
         * object as a type parameter to the call.
         *
         * The `observe` value determines the return type, according to what you are interested in
         * observing.
         *   * An `observe` value of events returns an observable of the raw `HttpEvent` stream, including
         * progress events by default.
         *   * An `observe` value of response returns an observable of `HttpResponse<T>`,
         * where the `T` parameter depends on the `responseType` and any optionally provided type
         * parameter.
         *   * An `observe` value of body returns an observable of `<T>` with the same `T` body type.
         *
         */


        _createClass2(HttpClient, [{
          key: "request",
          value: function request(first, url) {
            var _this935 = this;

            var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
            var req; // First, check whether the primary argument is an instance of `HttpRequest`.

            if (first instanceof HttpRequest) {
              // It is. The other arguments must be undefined (per the signatures) and can be
              // ignored.
              req = first;
            } else {
              // It's a string, so it represents a URL. Construct a request based on it,
              // and incorporate the remaining arguments (assuming `GET` unless a method is
              // provided.
              // Figure out the headers.
              var headers = undefined;

              if (options.headers instanceof HttpHeaders) {
                headers = options.headers;
              } else {
                headers = new HttpHeaders(options.headers);
              } // Sort out parameters.


              var params = undefined;

              if (!!options.params) {
                if (options.params instanceof HttpParams) {
                  params = options.params;
                } else {
                  params = new HttpParams({
                    fromObject: options.params
                  });
                }
              } // Construct the request.


              req = new HttpRequest(first, url, options.body !== undefined ? options.body : null, {
                headers: headers,
                params: params,
                reportProgress: options.reportProgress,
                // By default, JSON is assumed to be returned for all calls.
                responseType: options.responseType || 'json',
                withCredentials: options.withCredentials
              });
            } // Start with an Observable.of() the initial request, and run the handler (which
            // includes all interceptors) inside a concatMap(). This way, the handler runs
            // inside an Observable chain, which causes interceptors to be re-run on every
            // subscription (this also makes retries re-run the handler, including interceptors).


            var events$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["of"])(req).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["concatMap"])(function (req) {
              return _this935.handler.handle(req);
            })); // If coming via the API signature which accepts a previously constructed HttpRequest,
            // the only option is to get the event stream. Otherwise, return the event stream if
            // that is what was requested.

            if (first instanceof HttpRequest || options.observe === 'events') {
              return events$;
            } // The requested stream contains either the full response or the body. In either
            // case, the first step is to filter the event stream to extract a stream of
            // responses(s).


            var res$ = events$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(function (event) {
              return event instanceof HttpResponse;
            })); // Decide which stream to return.

            switch (options.observe || 'body') {
              case 'body':
                // The requested stream is the body. Map the response stream to the response
                // body. This could be done more simply, but a misbehaving interceptor might
                // transform the response body into a different format and ignore the requested
                // responseType. Guard against this by validating that the response is of the
                // requested type.
                switch (req.responseType) {
                  case 'arraybuffer':
                    return res$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (res) {
                      // Validate that the body is an ArrayBuffer.
                      if (res.body !== null && !(res.body instanceof ArrayBuffer)) {
                        throw new Error('Response is not an ArrayBuffer.');
                      }

                      return res.body;
                    }));

                  case 'blob':
                    return res$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (res) {
                      // Validate that the body is a Blob.
                      if (res.body !== null && !(res.body instanceof Blob)) {
                        throw new Error('Response is not a Blob.');
                      }

                      return res.body;
                    }));

                  case 'text':
                    return res$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (res) {
                      // Validate that the body is a string.
                      if (res.body !== null && typeof res.body !== 'string') {
                        throw new Error('Response is not a string.');
                      }

                      return res.body;
                    }));

                  case 'json':
                  default:
                    // No validation needed for JSON responses, as they can be of any type.
                    return res$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (res) {
                      return res.body;
                    }));
                }

              case 'response':
                // The response stream was requested directly, so return it.
                return res$;

              default:
                // Guard against new future observe types being added.
                throw new Error("Unreachable: unhandled observe type ".concat(options.observe, "}"));
            }
          }
          /**
           * Constructs an observable that, when subscribed, causes the configured
           * `DELETE` request to execute on the server. See the individual overloads for
           * details on the return type.
           *
           * @param url     The endpoint URL.
           * @param options The HTTP options to send with the request.
           *
           */

        }, {
          key: "delete",
          value: function _delete(url) {
            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
            return this.request('DELETE', url, options);
          }
          /**
           * Constructs an observable that, when subscribed, causes the configured
           * `GET` request to execute on the server. See the individual overloads for
           * details on the return type.
           */

        }, {
          key: "get",
          value: function get(url) {
            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
            return this.request('GET', url, options);
          }
          /**
           * Constructs an observable that, when subscribed, causes the configured
           * `HEAD` request to execute on the server. The `HEAD` method returns
           * meta information about the resource without transferring the
           * resource itself. See the individual overloads for
           * details on the return type.
           */

        }, {
          key: "head",
          value: function head(url) {
            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
            return this.request('HEAD', url, options);
          }
          /**
           * Constructs an `Observable` that, when subscribed, causes a request with the special method
           * `JSONP` to be dispatched via the interceptor pipeline.
           * The [JSONP pattern](https://en.wikipedia.org/wiki/JSONP) works around limitations of certain
           * API endpoints that don't support newer,
           * and preferable [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) protocol.
           * JSONP treats the endpoint API as a JavaScript file and tricks the browser to process the
           * requests even if the API endpoint is not located on the same domain (origin) as the client-side
           * application making the request.
           * The endpoint API must support JSONP callback for JSONP requests to work.
           * The resource API returns the JSON response wrapped in a callback function.
           * You can pass the callback function name as one of the query parameters.
           * Note that JSONP requests can only be used with `GET` requests.
           *
           * @param url The resource URL.
           * @param callbackParam The callback function name.
           *
           */

        }, {
          key: "jsonp",
          value: function jsonp(url, callbackParam) {
            return this.request('JSONP', url, {
              params: new HttpParams().append(callbackParam, 'JSONP_CALLBACK'),
              observe: 'body',
              responseType: 'json'
            });
          }
          /**
           * Constructs an `Observable` that, when subscribed, causes the configured
           * `OPTIONS` request to execute on the server. This method allows the client
           * to determine the supported HTTP methods and other capabilites of an endpoint,
           * without implying a resource action. See the individual overloads for
           * details on the return type.
           */

        }, {
          key: "options",
          value: function options(url) {
            var _options4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};

            return this.request('OPTIONS', url, _options4);
          }
          /**
           * Constructs an observable that, when subscribed, causes the configured
           * `PATCH` request to execute on the server. See the individual overloads for
           * details on the return type.
           */

        }, {
          key: "patch",
          value: function patch(url, body) {
            var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
            return this.request('PATCH', url, addBody(options, body));
          }
          /**
           * Constructs an observable that, when subscribed, causes the configured
           * `POST` request to execute on the server. The server responds with the location of
           * the replaced resource. See the individual overloads for
           * details on the return type.
           */

        }, {
          key: "post",
          value: function post(url, body) {
            var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
            return this.request('POST', url, addBody(options, body));
          }
          /**
           * Constructs an observable that, when subscribed, causes the configured
           * `PUT` request to execute on the server. The `PUT` method replaces an existing resource
           * with a new set of values.
           * See the individual overloads for details on the return type.
           */

        }, {
          key: "put",
          value: function put(url, body) {
            var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
            return this.request('PUT', url, addBody(options, body));
          }
        }]);

        return HttpClient;
      }();

      HttpClient.ɵfac = function HttpClient_Factory(t) {
        return new (t || HttpClient)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](HttpHandler));
      };

      HttpClient.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: HttpClient,
        factory: HttpClient.ɵfac
      });

      HttpClient.ctorParameters = function () {
        return [{
          type: HttpHandler
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HttpClient, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: HttpHandler
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * `HttpHandler` which applies an `HttpInterceptor` to an `HttpRequest`.
       *
       *
       */


      var HttpInterceptorHandler = /*#__PURE__*/function () {
        function HttpInterceptorHandler(next, interceptor) {
          _classCallCheck2(this, HttpInterceptorHandler);

          this.next = next;
          this.interceptor = interceptor;
        }

        _createClass2(HttpInterceptorHandler, [{
          key: "handle",
          value: function handle(req) {
            return this.interceptor.intercept(req, this.next);
          }
        }]);

        return HttpInterceptorHandler;
      }();
      /**
       * A multi-provider token that represents the array of registered
       * `HttpInterceptor` objects.
       *
       * @publicApi
       */


      var HTTP_INTERCEPTORS = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('HTTP_INTERCEPTORS');

      var NoopInterceptor = /*#__PURE__*/function () {
        function NoopInterceptor() {
          _classCallCheck2(this, NoopInterceptor);
        }

        _createClass2(NoopInterceptor, [{
          key: "intercept",
          value: function intercept(req, next) {
            return next.handle(req);
          }
        }]);

        return NoopInterceptor;
      }();

      NoopInterceptor.ɵfac = function NoopInterceptor_Factory(t) {
        return new (t || NoopInterceptor)();
      };

      NoopInterceptor.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: NoopInterceptor,
        factory: NoopInterceptor.ɵfac
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](NoopInterceptor, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // Every request made through JSONP needs a callback name that's unique across the
      // whole page. Each request is assigned an id and the callback name is constructed
      // from that. The next id to be assigned is tracked in a global variable here that
      // is shared among all applications on the page.


      var nextRequestId = 0; // Error text given when a JSONP script is injected, but doesn't invoke the callback
      // passed in its URL.

      var JSONP_ERR_NO_CALLBACK = 'JSONP injected script did not invoke callback.'; // Error text given when a request is passed to the JsonpClientBackend that doesn't
      // have a request method JSONP.

      var JSONP_ERR_WRONG_METHOD = 'JSONP requests must use JSONP request method.';
      var JSONP_ERR_WRONG_RESPONSE_TYPE = 'JSONP requests must use Json response type.';
      /**
       * DI token/abstract type representing a map of JSONP callbacks.
       *
       * In the browser, this should always be the `window` object.
       *
       *
       */

      var JsonpCallbackContext = function JsonpCallbackContext() {
        _classCallCheck2(this, JsonpCallbackContext);
      };
      /**
       * Processes an `HttpRequest` with the JSONP method,
       * by performing JSONP style requests.
       * @see `HttpHandler`
       * @see `HttpXhrBackend`
       *
       * @publicApi
       */


      var JsonpClientBackend = /*#__PURE__*/function () {
        function JsonpClientBackend(callbackMap, document) {
          _classCallCheck2(this, JsonpClientBackend);

          this.callbackMap = callbackMap;
          this.document = document;
          /**
           * A resolved promise that can be used to schedule microtasks in the event handlers.
           */

          this.resolvedPromise = Promise.resolve();
        }
        /**
         * Get the name of the next callback method, by incrementing the global `nextRequestId`.
         */


        _createClass2(JsonpClientBackend, [{
          key: "nextCallback",
          value: function nextCallback() {
            return "ng_jsonp_callback_".concat(nextRequestId++);
          }
          /**
           * Processes a JSONP request and returns an event stream of the results.
           * @param req The request object.
           * @returns An observable of the response events.
           *
           */

        }, {
          key: "handle",
          value: function handle(req) {
            var _this936 = this;

            // Firstly, check both the method and response type. If either doesn't match
            // then the request was improperly routed here and cannot be handled.
            if (req.method !== 'JSONP') {
              throw new Error(JSONP_ERR_WRONG_METHOD);
            } else if (req.responseType !== 'json') {
              throw new Error(JSONP_ERR_WRONG_RESPONSE_TYPE);
            } // Everything else happens inside the Observable boundary.


            return new rxjs__WEBPACK_IMPORTED_MODULE_1__["Observable"](function (observer) {
              // The first step to make a request is to generate the callback name, and replace the
              // callback placeholder in the URL with the name. Care has to be taken here to ensure
              // a trailing &, if matched, gets inserted back into the URL in the correct place.
              var callback = _this936.nextCallback();

              var url = req.urlWithParams.replace(/=JSONP_CALLBACK(&|$)/, "=".concat(callback, "$1")); // Construct the <script> tag and point it at the URL.

              var node = _this936.document.createElement('script');

              node.src = url; // A JSONP request requires waiting for multiple callbacks. These variables
              // are closed over and track state across those callbacks.
              // The response object, if one has been received, or null otherwise.

              var body = null; // Whether the response callback has been called.

              var finished = false; // Whether the request has been cancelled (and thus any other callbacks)
              // should be ignored.

              var cancelled = false; // Set the response callback in this.callbackMap (which will be the window
              // object in the browser. The script being loaded via the <script> tag will
              // eventually call this callback.

              _this936.callbackMap[callback] = function (data) {
                // Data has been received from the JSONP script. Firstly, delete this callback.
                delete _this936.callbackMap[callback]; // Next, make sure the request wasn't cancelled in the meantime.

                if (cancelled) {
                  return;
                } // Set state to indicate data was received.


                body = data;
                finished = true;
              }; // cleanup() is a utility closure that removes the <script> from the page and
              // the response callback from the window. This logic is used in both the
              // success, error, and cancellation paths, so it's extracted out for convenience.


              var cleanup = function cleanup() {
                // Remove the <script> tag if it's still on the page.
                if (node.parentNode) {
                  node.parentNode.removeChild(node);
                } // Remove the response callback from the callbackMap (window object in the
                // browser).


                delete _this936.callbackMap[callback];
              }; // onLoad() is the success callback which runs after the response callback
              // if the JSONP script loads successfully. The event itself is unimportant.
              // If something went wrong, onLoad() may run without the response callback
              // having been invoked.


              var onLoad = function onLoad(event) {
                // Do nothing if the request has been cancelled.
                if (cancelled) {
                  return;
                } // We wrap it in an extra Promise, to ensure the microtask
                // is scheduled after the loaded endpoint has executed any potential microtask itself,
                // which is not guaranteed in Internet Explorer and EdgeHTML. See issue #39496


                _this936.resolvedPromise.then(function () {
                  // Cleanup the page.
                  cleanup(); // Check whether the response callback has run.

                  if (!finished) {
                    // It hasn't, something went wrong with the request. Return an error via
                    // the Observable error path. All JSONP errors have status 0.
                    observer.error(new HttpErrorResponse({
                      url: url,
                      status: 0,
                      statusText: 'JSONP Error',
                      error: new Error(JSONP_ERR_NO_CALLBACK)
                    }));
                    return;
                  } // Success. body either contains the response body or null if none was
                  // returned.


                  observer.next(new HttpResponse({
                    body: body,
                    status: 200
                    /* Ok */
                    ,
                    statusText: 'OK',
                    url: url
                  })); // Complete the stream, the response is over.

                  observer.complete();
                });
              }; // onError() is the error callback, which runs if the script returned generates
              // a Javascript error. It emits the error via the Observable error channel as
              // a HttpErrorResponse.


              var onError = function onError(error) {
                // If the request was already cancelled, no need to emit anything.
                if (cancelled) {
                  return;
                }

                cleanup(); // Wrap the error in a HttpErrorResponse.

                observer.error(new HttpErrorResponse({
                  error: error,
                  status: 0,
                  statusText: 'JSONP Error',
                  url: url
                }));
              }; // Subscribe to both the success (load) and error events on the <script> tag,
              // and add it to the page.


              node.addEventListener('load', onLoad);
              node.addEventListener('error', onError);

              _this936.document.body.appendChild(node); // The request has now been successfully sent.


              observer.next({
                type: HttpEventType.Sent
              }); // Cancellation handler.

              return function () {
                // Track the cancellation so event listeners won't do anything even if already scheduled.
                cancelled = true; // Remove the event listeners so they won't run if the events later fire.

                node.removeEventListener('load', onLoad);
                node.removeEventListener('error', onError); // And finally, clean up the page.

                cleanup();
              };
            });
          }
        }]);

        return JsonpClientBackend;
      }();

      JsonpClientBackend.ɵfac = function JsonpClientBackend_Factory(t) {
        return new (t || JsonpClientBackend)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](JsonpCallbackContext), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_3__["DOCUMENT"]));
      };

      JsonpClientBackend.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: JsonpClientBackend,
        factory: JsonpClientBackend.ɵfac
      });

      JsonpClientBackend.ctorParameters = function () {
        return [{
          type: JsonpCallbackContext
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_3__["DOCUMENT"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](JsonpClientBackend, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: JsonpCallbackContext
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_3__["DOCUMENT"]]
            }]
          }];
        }, null);
      })();
      /**
       * Identifies requests with the method JSONP and
       * shifts them to the `JsonpClientBackend`.
       *
       * @see `HttpInterceptor`
       *
       * @publicApi
       */


      var JsonpInterceptor = /*#__PURE__*/function () {
        function JsonpInterceptor(jsonp) {
          _classCallCheck2(this, JsonpInterceptor);

          this.jsonp = jsonp;
        }
        /**
         * Identifies and handles a given JSONP request.
         * @param req The outgoing request object to handle.
         * @param next The next interceptor in the chain, or the backend
         * if no interceptors remain in the chain.
         * @returns An observable of the event stream.
         */


        _createClass2(JsonpInterceptor, [{
          key: "intercept",
          value: function intercept(req, next) {
            if (req.method === 'JSONP') {
              return this.jsonp.handle(req);
            } // Fall through for normal HTTP requests.


            return next.handle(req);
          }
        }]);

        return JsonpInterceptor;
      }();

      JsonpInterceptor.ɵfac = function JsonpInterceptor_Factory(t) {
        return new (t || JsonpInterceptor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](JsonpClientBackend));
      };

      JsonpInterceptor.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: JsonpInterceptor,
        factory: JsonpInterceptor.ɵfac
      });

      JsonpInterceptor.ctorParameters = function () {
        return [{
          type: JsonpClientBackend
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](JsonpInterceptor, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: JsonpClientBackend
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var XSSI_PREFIX = /^\)\]\}',?\n/;
      /**
       * Determine an appropriate URL for the response, by checking either
       * XMLHttpRequest.responseURL or the X-Request-URL header.
       */

      function getResponseUrl(xhr) {
        if ('responseURL' in xhr && xhr.responseURL) {
          return xhr.responseURL;
        }

        if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {
          return xhr.getResponseHeader('X-Request-URL');
        }

        return null;
      }
      /**
       * A wrapper around the `XMLHttpRequest` constructor.
       *
       * @publicApi
       */


      var XhrFactory = function XhrFactory() {
        _classCallCheck2(this, XhrFactory);
      };
      /**
       * A factory for `HttpXhrBackend` that uses the `XMLHttpRequest` browser API.
       *
       */


      var BrowserXhr = /*#__PURE__*/function () {
        function BrowserXhr() {
          _classCallCheck2(this, BrowserXhr);
        }

        _createClass2(BrowserXhr, [{
          key: "build",
          value: function build() {
            return new XMLHttpRequest();
          }
        }]);

        return BrowserXhr;
      }();

      BrowserXhr.ɵfac = function BrowserXhr_Factory(t) {
        return new (t || BrowserXhr)();
      };

      BrowserXhr.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: BrowserXhr,
        factory: BrowserXhr.ɵfac
      });

      BrowserXhr.ctorParameters = function () {
        return [];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](BrowserXhr, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [];
        }, null);
      })();
      /**
       * Uses `XMLHttpRequest` to send requests to a backend server.
       * @see `HttpHandler`
       * @see `JsonpClientBackend`
       *
       * @publicApi
       */


      var HttpXhrBackend = /*#__PURE__*/function () {
        function HttpXhrBackend(xhrFactory) {
          _classCallCheck2(this, HttpXhrBackend);

          this.xhrFactory = xhrFactory;
        }
        /**
         * Processes a request and returns a stream of response events.
         * @param req The request object.
         * @returns An observable of the response events.
         */


        _createClass2(HttpXhrBackend, [{
          key: "handle",
          value: function handle(req) {
            var _this937 = this;

            // Quick check to give a better error message when a user attempts to use
            // HttpClient.jsonp() without installing the HttpClientJsonpModule
            if (req.method === 'JSONP') {
              throw new Error("Attempted to construct Jsonp request without HttpClientJsonpModule installed.");
            } // Everything happens on Observable subscription.


            return new rxjs__WEBPACK_IMPORTED_MODULE_1__["Observable"](function (observer) {
              // Start by setting up the XHR object with request method, URL, and withCredentials flag.
              var xhr = _this937.xhrFactory.build();

              xhr.open(req.method, req.urlWithParams);

              if (!!req.withCredentials) {
                xhr.withCredentials = true;
              } // Add all the requested headers.


              req.headers.forEach(function (name, values) {
                return xhr.setRequestHeader(name, values.join(','));
              }); // Add an Accept header if one isn't present already.

              if (!req.headers.has('Accept')) {
                xhr.setRequestHeader('Accept', 'application/json, text/plain, */*');
              } // Auto-detect the Content-Type header if one isn't present already.


              if (!req.headers.has('Content-Type')) {
                var detectedType = req.detectContentTypeHeader(); // Sometimes Content-Type detection fails.

                if (detectedType !== null) {
                  xhr.setRequestHeader('Content-Type', detectedType);
                }
              } // Set the responseType if one was requested.


              if (req.responseType) {
                var responseType = req.responseType.toLowerCase(); // JSON responses need to be processed as text. This is because if the server
                // returns an XSSI-prefixed JSON response, the browser will fail to parse it,
                // xhr.response will be null, and xhr.responseText cannot be accessed to
                // retrieve the prefixed JSON data in order to strip the prefix. Thus, all JSON
                // is parsed by first requesting text and then applying JSON.parse.

                xhr.responseType = responseType !== 'json' ? responseType : 'text';
              } // Serialize the request body if one is present. If not, this will be set to null.


              var reqBody = req.serializeBody(); // If progress events are enabled, response headers will be delivered
              // in two events - the HttpHeaderResponse event and the full HttpResponse
              // event. However, since response headers don't change in between these
              // two events, it doesn't make sense to parse them twice. So headerResponse
              // caches the data extracted from the response whenever it's first parsed,
              // to ensure parsing isn't duplicated.

              var headerResponse = null; // partialFromXhr extracts the HttpHeaderResponse from the current XMLHttpRequest
              // state, and memoizes it into headerResponse.

              var partialFromXhr = function partialFromXhr() {
                if (headerResponse !== null) {
                  return headerResponse;
                } // Read status and normalize an IE9 bug (https://bugs.jquery.com/ticket/1450).


                var status = xhr.status === 1223 ? 204
                /* NoContent */
                : xhr.status;
                var statusText = xhr.statusText || 'OK'; // Parse headers from XMLHttpRequest - this step is lazy.

                var headers = new HttpHeaders(xhr.getAllResponseHeaders()); // Read the response URL from the XMLHttpResponse instance and fall back on the
                // request URL.

                var url = getResponseUrl(xhr) || req.url; // Construct the HttpHeaderResponse and memoize it.

                headerResponse = new HttpHeaderResponse({
                  headers: headers,
                  status: status,
                  statusText: statusText,
                  url: url
                });
                return headerResponse;
              }; // Next, a few closures are defined for the various events which XMLHttpRequest can
              // emit. This allows them to be unregistered as event listeners later.
              // First up is the load event, which represents a response being fully available.


              var onLoad = function onLoad() {
                // Read response state from the memoized partial data.
                var _partialFromXhr = partialFromXhr(),
                    headers = _partialFromXhr.headers,
                    status = _partialFromXhr.status,
                    statusText = _partialFromXhr.statusText,
                    url = _partialFromXhr.url; // The body will be read out if present.


                var body = null;

                if (status !== 204
                /* NoContent */
                ) {
                    // Use XMLHttpRequest.response if set, responseText otherwise.
                    body = typeof xhr.response === 'undefined' ? xhr.responseText : xhr.response;
                  } // Normalize another potential bug (this one comes from CORS).


                if (status === 0) {
                  status = !!body ? 200
                  /* Ok */
                  : 0;
                } // ok determines whether the response will be transmitted on the event or
                // error channel. Unsuccessful status codes (not 2xx) will always be errors,
                // but a successful status code can still result in an error if the user
                // asked for JSON data and the body cannot be parsed as such.


                var ok = status >= 200 && status < 300; // Check whether the body needs to be parsed as JSON (in many cases the browser
                // will have done that already).

                if (req.responseType === 'json' && typeof body === 'string') {
                  // Save the original body, before attempting XSSI prefix stripping.
                  var originalBody = body;
                  body = body.replace(XSSI_PREFIX, '');

                  try {
                    // Attempt the parse. If it fails, a parse error should be delivered to the user.
                    body = body !== '' ? JSON.parse(body) : null;
                  } catch (error) {
                    // Since the JSON.parse failed, it's reasonable to assume this might not have been a
                    // JSON response. Restore the original body (including any XSSI prefix) to deliver
                    // a better error response.
                    body = originalBody; // If this was an error request to begin with, leave it as a string, it probably
                    // just isn't JSON. Otherwise, deliver the parsing error to the user.

                    if (ok) {
                      // Even though the response status was 2xx, this is still an error.
                      ok = false; // The parse error contains the text of the body that failed to parse.

                      body = {
                        error: error,
                        text: body
                      };
                    }
                  }
                }

                if (ok) {
                  // A successful response is delivered on the event stream.
                  observer.next(new HttpResponse({
                    body: body,
                    headers: headers,
                    status: status,
                    statusText: statusText,
                    url: url || undefined
                  })); // The full body has been received and delivered, no further events
                  // are possible. This request is complete.

                  observer.complete();
                } else {
                  // An unsuccessful request is delivered on the error channel.
                  observer.error(new HttpErrorResponse({
                    // The error in this case is the response body (error from the server).
                    error: body,
                    headers: headers,
                    status: status,
                    statusText: statusText,
                    url: url || undefined
                  }));
                }
              }; // The onError callback is called when something goes wrong at the network level.
              // Connection timeout, DNS error, offline, etc. These are actual errors, and are
              // transmitted on the error channel.


              var onError = function onError(error) {
                var _partialFromXhr2 = partialFromXhr(),
                    url = _partialFromXhr2.url;

                var res = new HttpErrorResponse({
                  error: error,
                  status: xhr.status || 0,
                  statusText: xhr.statusText || 'Unknown Error',
                  url: url || undefined
                });
                observer.error(res);
              }; // The sentHeaders flag tracks whether the HttpResponseHeaders event
              // has been sent on the stream. This is necessary to track if progress
              // is enabled since the event will be sent on only the first download
              // progerss event.


              var sentHeaders = false; // The download progress event handler, which is only registered if
              // progress events are enabled.

              var onDownProgress = function onDownProgress(event) {
                // Send the HttpResponseHeaders event if it hasn't been sent already.
                if (!sentHeaders) {
                  observer.next(partialFromXhr());
                  sentHeaders = true;
                } // Start building the download progress event to deliver on the response
                // event stream.


                var progressEvent = {
                  type: HttpEventType.DownloadProgress,
                  loaded: event.loaded
                }; // Set the total number of bytes in the event if it's available.

                if (event.lengthComputable) {
                  progressEvent.total = event.total;
                } // If the request was for text content and a partial response is
                // available on XMLHttpRequest, include it in the progress event
                // to allow for streaming reads.


                if (req.responseType === 'text' && !!xhr.responseText) {
                  progressEvent.partialText = xhr.responseText;
                } // Finally, fire the event.


                observer.next(progressEvent);
              }; // The upload progress event handler, which is only registered if
              // progress events are enabled.


              var onUpProgress = function onUpProgress(event) {
                // Upload progress events are simpler. Begin building the progress
                // event.
                var progress = {
                  type: HttpEventType.UploadProgress,
                  loaded: event.loaded
                }; // If the total number of bytes being uploaded is available, include
                // it.

                if (event.lengthComputable) {
                  progress.total = event.total;
                } // Send the event.


                observer.next(progress);
              }; // By default, register for load and error events.


              xhr.addEventListener('load', onLoad);
              xhr.addEventListener('error', onError);
              xhr.addEventListener('timeout', onError);
              xhr.addEventListener('abort', onError); // Progress events are only enabled if requested.

              if (req.reportProgress) {
                // Download progress is always enabled if requested.
                xhr.addEventListener('progress', onDownProgress); // Upload progress depends on whether there is a body to upload.

                if (reqBody !== null && xhr.upload) {
                  xhr.upload.addEventListener('progress', onUpProgress);
                }
              } // Fire the request, and notify the event stream that it was fired.


              xhr.send(reqBody);
              observer.next({
                type: HttpEventType.Sent
              }); // This is the return from the Observable function, which is the
              // request cancellation handler.

              return function () {
                // On a cancellation, remove all registered event listeners.
                xhr.removeEventListener('error', onError);
                xhr.removeEventListener('abort', onError);
                xhr.removeEventListener('load', onLoad);
                xhr.removeEventListener('timeout', onError);

                if (req.reportProgress) {
                  xhr.removeEventListener('progress', onDownProgress);

                  if (reqBody !== null && xhr.upload) {
                    xhr.upload.removeEventListener('progress', onUpProgress);
                  }
                } // Finally, abort the in-flight request.


                if (xhr.readyState !== xhr.DONE) {
                  xhr.abort();
                }
              };
            });
          }
        }]);

        return HttpXhrBackend;
      }();

      HttpXhrBackend.ɵfac = function HttpXhrBackend_Factory(t) {
        return new (t || HttpXhrBackend)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](XhrFactory));
      };

      HttpXhrBackend.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: HttpXhrBackend,
        factory: HttpXhrBackend.ɵfac
      });

      HttpXhrBackend.ctorParameters = function () {
        return [{
          type: XhrFactory
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HttpXhrBackend, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: XhrFactory
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var XSRF_COOKIE_NAME = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('XSRF_COOKIE_NAME');
      var XSRF_HEADER_NAME = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["InjectionToken"]('XSRF_HEADER_NAME');
      /**
       * Retrieves the current XSRF token to use with the next outgoing request.
       *
       * @publicApi
       */

      var HttpXsrfTokenExtractor = function HttpXsrfTokenExtractor() {
        _classCallCheck2(this, HttpXsrfTokenExtractor);
      };
      /**
       * `HttpXsrfTokenExtractor` which retrieves the token from a cookie.
       */


      var HttpXsrfCookieExtractor = /*#__PURE__*/function () {
        function HttpXsrfCookieExtractor(doc, platform, cookieName) {
          _classCallCheck2(this, HttpXsrfCookieExtractor);

          this.doc = doc;
          this.platform = platform;
          this.cookieName = cookieName;
          this.lastCookieString = '';
          this.lastToken = null;
          /**
           * @internal for testing
           */

          this.parseCount = 0;
        }

        _createClass2(HttpXsrfCookieExtractor, [{
          key: "getToken",
          value: function getToken() {
            if (this.platform === 'server') {
              return null;
            }

            var cookieString = this.doc.cookie || '';

            if (cookieString !== this.lastCookieString) {
              this.parseCount++;
              this.lastToken = Object(_angular_common__WEBPACK_IMPORTED_MODULE_3__["ɵparseCookieValue"])(cookieString, this.cookieName);
              this.lastCookieString = cookieString;
            }

            return this.lastToken;
          }
        }]);

        return HttpXsrfCookieExtractor;
      }();

      HttpXsrfCookieExtractor.ɵfac = function HttpXsrfCookieExtractor_Factory(t) {
        return new (t || HttpXsrfCookieExtractor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_3__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](XSRF_COOKIE_NAME));
      };

      HttpXsrfCookieExtractor.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: HttpXsrfCookieExtractor,
        factory: HttpXsrfCookieExtractor.ɵfac
      });

      HttpXsrfCookieExtractor.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_3__["DOCUMENT"]]
          }]
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]]
          }]
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [XSRF_COOKIE_NAME]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HttpXsrfCookieExtractor, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_3__["DOCUMENT"]]
            }]
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [_angular_core__WEBPACK_IMPORTED_MODULE_0__["PLATFORM_ID"]]
            }]
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [XSRF_COOKIE_NAME]
            }]
          }];
        }, null);
      })();
      /**
       * `HttpInterceptor` which adds an XSRF token to eligible outgoing requests.
       */


      var HttpXsrfInterceptor = /*#__PURE__*/function () {
        function HttpXsrfInterceptor(tokenService, headerName) {
          _classCallCheck2(this, HttpXsrfInterceptor);

          this.tokenService = tokenService;
          this.headerName = headerName;
        }

        _createClass2(HttpXsrfInterceptor, [{
          key: "intercept",
          value: function intercept(req, next) {
            var lcUrl = req.url.toLowerCase(); // Skip both non-mutating requests and absolute URLs.
            // Non-mutating requests don't require a token, and absolute URLs require special handling
            // anyway as the cookie set
            // on our origin is not the same as the token expected by another origin.

            if (req.method === 'GET' || req.method === 'HEAD' || lcUrl.startsWith('http://') || lcUrl.startsWith('https://')) {
              return next.handle(req);
            }

            var token = this.tokenService.getToken(); // Be careful not to overwrite an existing header of the same name.

            if (token !== null && !req.headers.has(this.headerName)) {
              req = req.clone({
                headers: req.headers.set(this.headerName, token)
              });
            }

            return next.handle(req);
          }
        }]);

        return HttpXsrfInterceptor;
      }();

      HttpXsrfInterceptor.ɵfac = function HttpXsrfInterceptor_Factory(t) {
        return new (t || HttpXsrfInterceptor)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](HttpXsrfTokenExtractor), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](XSRF_HEADER_NAME));
      };

      HttpXsrfInterceptor.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: HttpXsrfInterceptor,
        factory: HttpXsrfInterceptor.ɵfac
      });

      HttpXsrfInterceptor.ctorParameters = function () {
        return [{
          type: HttpXsrfTokenExtractor
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
            args: [XSRF_HEADER_NAME]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HttpXsrfInterceptor, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: HttpXsrfTokenExtractor
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Inject"],
              args: [XSRF_HEADER_NAME]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * An injectable `HttpHandler` that applies multiple interceptors
       * to a request before passing it to the given `HttpBackend`.
       *
       * The interceptors are loaded lazily from the injector, to allow
       * interceptors to themselves inject classes depending indirectly
       * on `HttpInterceptingHandler` itself.
       * @see `HttpInterceptor`
       */


      var HttpInterceptingHandler = /*#__PURE__*/function () {
        function HttpInterceptingHandler(backend, injector) {
          _classCallCheck2(this, HttpInterceptingHandler);

          this.backend = backend;
          this.injector = injector;
          this.chain = null;
        }

        _createClass2(HttpInterceptingHandler, [{
          key: "handle",
          value: function handle(req) {
            if (this.chain === null) {
              var interceptors = this.injector.get(HTTP_INTERCEPTORS, []);
              this.chain = interceptors.reduceRight(function (next, interceptor) {
                return new HttpInterceptorHandler(next, interceptor);
              }, this.backend);
            }

            return this.chain.handle(req);
          }
        }]);

        return HttpInterceptingHandler;
      }();

      HttpInterceptingHandler.ɵfac = function HttpInterceptingHandler_Factory(t) {
        return new (t || HttpInterceptingHandler)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](HttpBackend), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]));
      };

      HttpInterceptingHandler.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({
        token: HttpInterceptingHandler,
        factory: HttpInterceptingHandler.ɵfac
      });

      HttpInterceptingHandler.ctorParameters = function () {
        return [{
          type: HttpBackend
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HttpInterceptingHandler, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"]
        }], function () {
          return [{
            type: HttpBackend
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"]
          }];
        }, null);
      })();
      /**
       * Constructs an `HttpHandler` that applies interceptors
       * to a request before passing it to the given `HttpBackend`.
       *
       * Use as a factory function within `HttpClientModule`.
       *
       *
       */


      function interceptingHandler(backend) {
        var interceptors = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];

        if (!interceptors) {
          return backend;
        }

        return interceptors.reduceRight(function (next, interceptor) {
          return new HttpInterceptorHandler(next, interceptor);
        }, backend);
      }
      /**
       * Factory function that determines where to store JSONP callbacks.
       *
       * Ordinarily JSONP callbacks are stored on the `window` object, but this may not exist
       * in test environments. In that case, callbacks are stored on an anonymous object instead.
       *
       *
       */


      function jsonpCallbackContext() {
        if (typeof window === 'object') {
          return window;
        }

        return {};
      }
      /**
       * Configures XSRF protection support for outgoing requests.
       *
       * For a server that supports a cookie-based XSRF protection system,
       * use directly to configure XSRF protection with the correct
       * cookie and header names.
       *
       * If no names are supplied, the default cookie name is `XSRF-TOKEN`
       * and the default header name is `X-XSRF-TOKEN`.
       *
       * @publicApi
       */


      var HttpClientXsrfModule = /*#__PURE__*/function () {
        function HttpClientXsrfModule() {
          _classCallCheck2(this, HttpClientXsrfModule);
        }

        _createClass2(HttpClientXsrfModule, null, [{
          key: "disable",
          value:
          /**
           * Disable the default XSRF protection.
           */
          function disable() {
            return {
              ngModule: HttpClientXsrfModule,
              providers: [{
                provide: HttpXsrfInterceptor,
                useClass: NoopInterceptor
              }]
            };
          }
          /**
           * Configure XSRF protection.
           * @param options An object that can specify either or both
           * cookie name or header name.
           * - Cookie name default is `XSRF-TOKEN`.
           * - Header name default is `X-XSRF-TOKEN`.
           *
           */

        }, {
          key: "withOptions",
          value: function withOptions() {
            var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            return {
              ngModule: HttpClientXsrfModule,
              providers: [options.cookieName ? {
                provide: XSRF_COOKIE_NAME,
                useValue: options.cookieName
              } : [], options.headerName ? {
                provide: XSRF_HEADER_NAME,
                useValue: options.headerName
              } : []]
            };
          }
        }]);

        return HttpClientXsrfModule;
      }();

      HttpClientXsrfModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: HttpClientXsrfModule
      });
      HttpClientXsrfModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function HttpClientXsrfModule_Factory(t) {
          return new (t || HttpClientXsrfModule)();
        },
        providers: [HttpXsrfInterceptor, {
          provide: HTTP_INTERCEPTORS,
          useExisting: HttpXsrfInterceptor,
          multi: true
        }, {
          provide: HttpXsrfTokenExtractor,
          useClass: HttpXsrfCookieExtractor
        }, {
          provide: XSRF_COOKIE_NAME,
          useValue: 'XSRF-TOKEN'
        }, {
          provide: XSRF_HEADER_NAME,
          useValue: 'X-XSRF-TOKEN'
        }]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HttpClientXsrfModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            providers: [HttpXsrfInterceptor, {
              provide: HTTP_INTERCEPTORS,
              useExisting: HttpXsrfInterceptor,
              multi: true
            }, {
              provide: HttpXsrfTokenExtractor,
              useClass: HttpXsrfCookieExtractor
            }, {
              provide: XSRF_COOKIE_NAME,
              useValue: 'XSRF-TOKEN'
            }, {
              provide: XSRF_HEADER_NAME,
              useValue: 'X-XSRF-TOKEN'
            }]
          }]
        }], null, null);
      })();
      /**
       * Configures the [dependency injector](guide/glossary#injector) for `HttpClient`
       * with supporting services for XSRF. Automatically imported by `HttpClientModule`.
       *
       * You can add interceptors to the chain behind `HttpClient` by binding them to the
       * multiprovider for built-in [DI token](guide/glossary#di-token) `HTTP_INTERCEPTORS`.
       *
       * @publicApi
       */


      var HttpClientModule = function HttpClientModule() {
        _classCallCheck2(this, HttpClientModule);
      };

      HttpClientModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: HttpClientModule
      });
      HttpClientModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function HttpClientModule_Factory(t) {
          return new (t || HttpClientModule)();
        },
        providers: [HttpClient, {
          provide: HttpHandler,
          useClass: HttpInterceptingHandler
        }, HttpXhrBackend, {
          provide: HttpBackend,
          useExisting: HttpXhrBackend
        }, BrowserXhr, {
          provide: XhrFactory,
          useExisting: BrowserXhr
        }],
        imports: [[HttpClientXsrfModule.withOptions({
          cookieName: 'XSRF-TOKEN',
          headerName: 'X-XSRF-TOKEN'
        })]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](HttpClientModule, {
          imports: [HttpClientXsrfModule]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HttpClientModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            /**
             * Optional configuration for XSRF protection.
             */
            imports: [HttpClientXsrfModule.withOptions({
              cookieName: 'XSRF-TOKEN',
              headerName: 'X-XSRF-TOKEN'
            })],

            /**
             * Configures the [dependency injector](guide/glossary#injector) where it is imported
             * with supporting services for HTTP communications.
             */
            providers: [HttpClient, {
              provide: HttpHandler,
              useClass: HttpInterceptingHandler
            }, HttpXhrBackend, {
              provide: HttpBackend,
              useExisting: HttpXhrBackend
            }, BrowserXhr, {
              provide: XhrFactory,
              useExisting: BrowserXhr
            }]
          }]
        }], null, null);
      })();
      /**
       * Configures the [dependency injector](guide/glossary#injector) for `HttpClient`
       * with supporting services for JSONP.
       * Without this module, Jsonp requests reach the backend
       * with method JSONP, where they are rejected.
       *
       * You can add interceptors to the chain behind `HttpClient` by binding them to the
       * multiprovider for built-in [DI token](guide/glossary#di-token) `HTTP_INTERCEPTORS`.
       *
       * @publicApi
       */


      var HttpClientJsonpModule = function HttpClientJsonpModule() {
        _classCallCheck2(this, HttpClientJsonpModule);
      };

      HttpClientJsonpModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({
        type: HttpClientJsonpModule
      });
      HttpClientJsonpModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({
        factory: function HttpClientJsonpModule_Factory(t) {
          return new (t || HttpClientJsonpModule)();
        },
        providers: [JsonpClientBackend, {
          provide: JsonpCallbackContext,
          useFactory: jsonpCallbackContext
        }, {
          provide: HTTP_INTERCEPTORS,
          useClass: JsonpInterceptor,
          multi: true
        }]
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](HttpClientJsonpModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"],
          args: [{
            providers: [JsonpClientBackend, {
              provide: JsonpCallbackContext,
              useFactory: jsonpCallbackContext
            }, {
              provide: HTTP_INTERCEPTORS,
              useClass: JsonpInterceptor,
              multi: true
            }]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=http.js.map

      /***/

    },

    /***/
    "tnsW":
    /*!****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/audit.js ***!
      \****************************************************************/

    /*! exports provided: audit */

    /***/
    function tnsW(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "audit", function () {
        return audit;
      });
      /* harmony import */


      var _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../innerSubscribe */
      "zx2A");

      function audit(durationSelector) {
        return function auditOperatorFunction(source) {
          return source.lift(new AuditOperator(durationSelector));
        };
      }

      var AuditOperator = /*#__PURE__*/function () {
        function AuditOperator(durationSelector) {
          _classCallCheck2(this, AuditOperator);

          this.durationSelector = durationSelector;
        }

        _createClass2(AuditOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new AuditSubscriber(subscriber, this.durationSelector));
          }
        }]);

        return AuditOperator;
      }();

      var AuditSubscriber = /*#__PURE__*/function (_innerSubscribe__WEBP18) {
        _inherits2(AuditSubscriber, _innerSubscribe__WEBP18);

        var _super376 = _createSuper(AuditSubscriber);

        function AuditSubscriber(destination, durationSelector) {
          var _this938;

          _classCallCheck2(this, AuditSubscriber);

          _this938 = _super376.call(this, destination);
          _this938.durationSelector = durationSelector;
          _this938.hasValue = false;
          return _this938;
        }

        _createClass2(AuditSubscriber, [{
          key: "_next",
          value: function _next(value) {
            this.value = value;
            this.hasValue = true;

            if (!this.throttled) {
              var duration;

              try {
                var durationSelector = this.durationSelector;
                duration = durationSelector(value);
              } catch (err) {
                return this.destination.error(err);
              }

              var innerSubscription = Object(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["innerSubscribe"])(duration, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleInnerSubscriber"](this));

              if (!innerSubscription || innerSubscription.closed) {
                this.clearThrottle();
              } else {
                this.add(this.throttled = innerSubscription);
              }
            }
          }
        }, {
          key: "clearThrottle",
          value: function clearThrottle() {
            var value = this.value,
                hasValue = this.hasValue,
                throttled = this.throttled;

            if (throttled) {
              this.remove(throttled);
              this.throttled = undefined;
              throttled.unsubscribe();
            }

            if (hasValue) {
              this.value = undefined;
              this.hasValue = false;
              this.destination.next(value);
            }
          }
        }, {
          key: "notifyNext",
          value: function notifyNext() {
            this.clearThrottle();
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete() {
            this.clearThrottle();
          }
        }]);

        return AuditSubscriber;
      }(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleOuterSubscriber"]); //# sourceMappingURL=audit.js.map

      /***/

    },

    /***/
    "tyNb":
    /*!**********************************************************************!*\
      !*** ./node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js ***!
      \**********************************************************************/

    /*! exports provided: ActivatedRoute, ActivatedRouteSnapshot, ActivationEnd, ActivationStart, BaseRouteReuseStrategy, ChildActivationEnd, ChildActivationStart, ChildrenOutletContexts, DefaultUrlSerializer, GuardsCheckEnd, GuardsCheckStart, NavigationCancel, NavigationEnd, NavigationError, NavigationStart, NoPreloading, OutletContext, PRIMARY_OUTLET, PreloadAllModules, PreloadingStrategy, ROUTER_CONFIGURATION, ROUTER_INITIALIZER, ROUTES, ResolveEnd, ResolveStart, RouteConfigLoadEnd, RouteConfigLoadStart, RouteReuseStrategy, Router, RouterEvent, RouterLink, RouterLinkActive, RouterLinkWithHref, RouterModule, RouterOutlet, RouterPreloader, RouterState, RouterStateSnapshot, RoutesRecognized, Scroll, UrlHandlingStrategy, UrlSegment, UrlSegmentGroup, UrlSerializer, UrlTree, VERSION, convertToParamMap, provideRoutes, ɵEmptyOutletComponent, ɵROUTER_PROVIDERS, ɵangular_packages_router_router_a, ɵangular_packages_router_router_b, ɵangular_packages_router_router_c, ɵangular_packages_router_router_d, ɵangular_packages_router_router_e, ɵangular_packages_router_router_f, ɵangular_packages_router_router_g, ɵangular_packages_router_router_h, ɵangular_packages_router_router_i, ɵangular_packages_router_router_j, ɵangular_packages_router_router_k, ɵangular_packages_router_router_l, ɵangular_packages_router_router_m, ɵangular_packages_router_router_n, ɵangular_packages_router_router_o, ɵassignExtraOptionsToRouter, ɵflatten */

    /***/
    function tyNb(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ActivatedRoute", function () {
        return ActivatedRoute;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ActivatedRouteSnapshot", function () {
        return ActivatedRouteSnapshot;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ActivationEnd", function () {
        return ActivationEnd;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ActivationStart", function () {
        return ActivationStart;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "BaseRouteReuseStrategy", function () {
        return BaseRouteReuseStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ChildActivationEnd", function () {
        return ChildActivationEnd;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ChildActivationStart", function () {
        return ChildActivationStart;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ChildrenOutletContexts", function () {
        return ChildrenOutletContexts;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DefaultUrlSerializer", function () {
        return DefaultUrlSerializer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "GuardsCheckEnd", function () {
        return GuardsCheckEnd;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "GuardsCheckStart", function () {
        return GuardsCheckStart;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NavigationCancel", function () {
        return NavigationCancel;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NavigationEnd", function () {
        return NavigationEnd;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NavigationError", function () {
        return NavigationError;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NavigationStart", function () {
        return NavigationStart;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "NoPreloading", function () {
        return NoPreloading;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "OutletContext", function () {
        return OutletContext;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PRIMARY_OUTLET", function () {
        return PRIMARY_OUTLET;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PreloadAllModules", function () {
        return PreloadAllModules;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "PreloadingStrategy", function () {
        return PreloadingStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ROUTER_CONFIGURATION", function () {
        return ROUTER_CONFIGURATION;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ROUTER_INITIALIZER", function () {
        return ROUTER_INITIALIZER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ROUTES", function () {
        return ROUTES;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ResolveEnd", function () {
        return ResolveEnd;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ResolveStart", function () {
        return ResolveStart;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RouteConfigLoadEnd", function () {
        return RouteConfigLoadEnd;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RouteConfigLoadStart", function () {
        return RouteConfigLoadStart;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RouteReuseStrategy", function () {
        return RouteReuseStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Router", function () {
        return Router;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RouterEvent", function () {
        return RouterEvent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RouterLink", function () {
        return RouterLink;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RouterLinkActive", function () {
        return RouterLinkActive;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RouterLinkWithHref", function () {
        return RouterLinkWithHref;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RouterModule", function () {
        return RouterModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RouterOutlet", function () {
        return RouterOutlet;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RouterPreloader", function () {
        return RouterPreloader;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RouterState", function () {
        return RouterState;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RouterStateSnapshot", function () {
        return RouterStateSnapshot;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "RoutesRecognized", function () {
        return RoutesRecognized;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "Scroll", function () {
        return Scroll;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "UrlHandlingStrategy", function () {
        return UrlHandlingStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "UrlSegment", function () {
        return UrlSegment;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "UrlSegmentGroup", function () {
        return UrlSegmentGroup;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "UrlSerializer", function () {
        return UrlSerializer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "UrlTree", function () {
        return UrlTree;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "VERSION", function () {
        return VERSION;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "convertToParamMap", function () {
        return convertToParamMap;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "provideRoutes", function () {
        return provideRoutes;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵEmptyOutletComponent", function () {
        return ɵEmptyOutletComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵROUTER_PROVIDERS", function () {
        return ROUTER_PROVIDERS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_a", function () {
        return ROUTER_FORROOT_GUARD;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_b", function () {
        return routerNgProbeToken;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_c", function () {
        return createRouterScroller;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_d", function () {
        return provideLocationStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_e", function () {
        return provideForRootGuard;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_f", function () {
        return setupRouter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_g", function () {
        return rootRoute;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_h", function () {
        return RouterInitializer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_i", function () {
        return getAppInitializer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_j", function () {
        return getBootstrapListener;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_k", function () {
        return provideRouterInitializer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_l", function () {
        return ɵEmptyOutletComponent;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_m", function () {
        return Tree;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_n", function () {
        return TreeNode;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_packages_router_router_o", function () {
        return RouterScroller;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵassignExtraOptionsToRouter", function () {
        return assignExtraOptionsToRouter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵflatten", function () {
        return flatten;
      });
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /**
       * @license Angular v12.0.0-next.1
       * (c) 2010-2020 Google LLC. https://angular.io/
       * License: MIT
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Base for events the router goes through, as opposed to events tied to a specific
       * route. Fired one time for any given navigation.
       *
       * The following code shows how a class subscribes to router events.
       *
       * ```ts
       * class MyService {
       *   constructor(public router: Router, logger: Logger) {
       *     router.events.pipe(
       *        filter((e: Event): e is RouterEvent => e instanceof RouterEvent)
       *     ).subscribe((e: RouterEvent) => {
       *       logger.log(e.id, e.url);
       *     });
       *   }
       * }
       * ```
       *
       * @see `Event`
       * @see [Router events summary](guide/router#router-events)
       * @publicApi
       */


      var RouterEvent = function RouterEvent(
      /** A unique ID that the router assigns to every router navigation. */
      id,
      /** The URL that is the destination for this navigation. */
      url) {
        _classCallCheck2(this, RouterEvent);

        this.id = id;
        this.url = url;
      };
      /**
       * An event triggered when a navigation starts.
       *
       * @publicApi
       */


      var NavigationStart = /*#__PURE__*/function (_RouterEvent) {
        _inherits2(NavigationStart, _RouterEvent);

        var _super377 = _createSuper(NavigationStart);

        function NavigationStart(
        /** @docsNotRequired */
        id,
        /** @docsNotRequired */
        url) {
          var _this939;

          var navigationTrigger = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'imperative';
          var restoredState = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;

          _classCallCheck2(this, NavigationStart);

          _this939 = _super377.call(this, id, url);
          _this939.navigationTrigger = navigationTrigger;
          _this939.restoredState = restoredState;
          return _this939;
        }
        /** @docsNotRequired */


        _createClass2(NavigationStart, [{
          key: "toString",
          value: function toString() {
            return "NavigationStart(id: ".concat(this.id, ", url: '").concat(this.url, "')");
          }
        }]);

        return NavigationStart;
      }(RouterEvent);
      /**
       * An event triggered when a navigation ends successfully.
       *
       * @see `NavigationStart`
       * @see `NavigationCancel`
       * @see `NavigationError`
       *
       * @publicApi
       */


      var NavigationEnd = /*#__PURE__*/function (_RouterEvent2) {
        _inherits2(NavigationEnd, _RouterEvent2);

        var _super378 = _createSuper(NavigationEnd);

        function NavigationEnd(
        /** @docsNotRequired */
        id,
        /** @docsNotRequired */
        url,
        /** @docsNotRequired */
        urlAfterRedirects) {
          var _this940;

          _classCallCheck2(this, NavigationEnd);

          _this940 = _super378.call(this, id, url);
          _this940.urlAfterRedirects = urlAfterRedirects;
          return _this940;
        }
        /** @docsNotRequired */


        _createClass2(NavigationEnd, [{
          key: "toString",
          value: function toString() {
            return "NavigationEnd(id: ".concat(this.id, ", url: '").concat(this.url, "', urlAfterRedirects: '").concat(this.urlAfterRedirects, "')");
          }
        }]);

        return NavigationEnd;
      }(RouterEvent);
      /**
       * An event triggered when a navigation is canceled, directly or indirectly.
       * This can happen when a route guard
       * returns `false` or initiates a redirect by returning a `UrlTree`.
       *
       * @see `NavigationStart`
       * @see `NavigationEnd`
       * @see `NavigationError`
       *
       * @publicApi
       */


      var NavigationCancel = /*#__PURE__*/function (_RouterEvent3) {
        _inherits2(NavigationCancel, _RouterEvent3);

        var _super379 = _createSuper(NavigationCancel);

        function NavigationCancel(
        /** @docsNotRequired */
        id,
        /** @docsNotRequired */
        url,
        /** @docsNotRequired */
        reason) {
          var _this941;

          _classCallCheck2(this, NavigationCancel);

          _this941 = _super379.call(this, id, url);
          _this941.reason = reason;
          return _this941;
        }
        /** @docsNotRequired */


        _createClass2(NavigationCancel, [{
          key: "toString",
          value: function toString() {
            return "NavigationCancel(id: ".concat(this.id, ", url: '").concat(this.url, "')");
          }
        }]);

        return NavigationCancel;
      }(RouterEvent);
      /**
       * An event triggered when a navigation fails due to an unexpected error.
       *
       * @see `NavigationStart`
       * @see `NavigationEnd`
       * @see `NavigationCancel`
       *
       * @publicApi
       */


      var NavigationError = /*#__PURE__*/function (_RouterEvent4) {
        _inherits2(NavigationError, _RouterEvent4);

        var _super380 = _createSuper(NavigationError);

        function NavigationError(
        /** @docsNotRequired */
        id,
        /** @docsNotRequired */
        url,
        /** @docsNotRequired */
        error) {
          var _this942;

          _classCallCheck2(this, NavigationError);

          _this942 = _super380.call(this, id, url);
          _this942.error = error;
          return _this942;
        }
        /** @docsNotRequired */


        _createClass2(NavigationError, [{
          key: "toString",
          value: function toString() {
            return "NavigationError(id: ".concat(this.id, ", url: '").concat(this.url, "', error: ").concat(this.error, ")");
          }
        }]);

        return NavigationError;
      }(RouterEvent);
      /**
       * An event triggered when routes are recognized.
       *
       * @publicApi
       */


      var RoutesRecognized = /*#__PURE__*/function (_RouterEvent5) {
        _inherits2(RoutesRecognized, _RouterEvent5);

        var _super381 = _createSuper(RoutesRecognized);

        function RoutesRecognized(
        /** @docsNotRequired */
        id,
        /** @docsNotRequired */
        url,
        /** @docsNotRequired */
        urlAfterRedirects,
        /** @docsNotRequired */
        state) {
          var _this943;

          _classCallCheck2(this, RoutesRecognized);

          _this943 = _super381.call(this, id, url);
          _this943.urlAfterRedirects = urlAfterRedirects;
          _this943.state = state;
          return _this943;
        }
        /** @docsNotRequired */


        _createClass2(RoutesRecognized, [{
          key: "toString",
          value: function toString() {
            return "RoutesRecognized(id: ".concat(this.id, ", url: '").concat(this.url, "', urlAfterRedirects: '").concat(this.urlAfterRedirects, "', state: ").concat(this.state, ")");
          }
        }]);

        return RoutesRecognized;
      }(RouterEvent);
      /**
       * An event triggered at the start of the Guard phase of routing.
       *
       * @see `GuardsCheckEnd`
       *
       * @publicApi
       */


      var GuardsCheckStart = /*#__PURE__*/function (_RouterEvent6) {
        _inherits2(GuardsCheckStart, _RouterEvent6);

        var _super382 = _createSuper(GuardsCheckStart);

        function GuardsCheckStart(
        /** @docsNotRequired */
        id,
        /** @docsNotRequired */
        url,
        /** @docsNotRequired */
        urlAfterRedirects,
        /** @docsNotRequired */
        state) {
          var _this944;

          _classCallCheck2(this, GuardsCheckStart);

          _this944 = _super382.call(this, id, url);
          _this944.urlAfterRedirects = urlAfterRedirects;
          _this944.state = state;
          return _this944;
        }

        _createClass2(GuardsCheckStart, [{
          key: "toString",
          value: function toString() {
            return "GuardsCheckStart(id: ".concat(this.id, ", url: '").concat(this.url, "', urlAfterRedirects: '").concat(this.urlAfterRedirects, "', state: ").concat(this.state, ")");
          }
        }]);

        return GuardsCheckStart;
      }(RouterEvent);
      /**
       * An event triggered at the end of the Guard phase of routing.
       *
       * @see `GuardsCheckStart`
       *
       * @publicApi
       */


      var GuardsCheckEnd = /*#__PURE__*/function (_RouterEvent7) {
        _inherits2(GuardsCheckEnd, _RouterEvent7);

        var _super383 = _createSuper(GuardsCheckEnd);

        function GuardsCheckEnd(
        /** @docsNotRequired */
        id,
        /** @docsNotRequired */
        url,
        /** @docsNotRequired */
        urlAfterRedirects,
        /** @docsNotRequired */
        state,
        /** @docsNotRequired */
        shouldActivate) {
          var _this945;

          _classCallCheck2(this, GuardsCheckEnd);

          _this945 = _super383.call(this, id, url);
          _this945.urlAfterRedirects = urlAfterRedirects;
          _this945.state = state;
          _this945.shouldActivate = shouldActivate;
          return _this945;
        }

        _createClass2(GuardsCheckEnd, [{
          key: "toString",
          value: function toString() {
            return "GuardsCheckEnd(id: ".concat(this.id, ", url: '").concat(this.url, "', urlAfterRedirects: '").concat(this.urlAfterRedirects, "', state: ").concat(this.state, ", shouldActivate: ").concat(this.shouldActivate, ")");
          }
        }]);

        return GuardsCheckEnd;
      }(RouterEvent);
      /**
       * An event triggered at the start of the Resolve phase of routing.
       *
       * Runs in the "resolve" phase whether or not there is anything to resolve.
       * In future, may change to only run when there are things to be resolved.
       *
       * @see `ResolveEnd`
       *
       * @publicApi
       */


      var ResolveStart = /*#__PURE__*/function (_RouterEvent8) {
        _inherits2(ResolveStart, _RouterEvent8);

        var _super384 = _createSuper(ResolveStart);

        function ResolveStart(
        /** @docsNotRequired */
        id,
        /** @docsNotRequired */
        url,
        /** @docsNotRequired */
        urlAfterRedirects,
        /** @docsNotRequired */
        state) {
          var _this946;

          _classCallCheck2(this, ResolveStart);

          _this946 = _super384.call(this, id, url);
          _this946.urlAfterRedirects = urlAfterRedirects;
          _this946.state = state;
          return _this946;
        }

        _createClass2(ResolveStart, [{
          key: "toString",
          value: function toString() {
            return "ResolveStart(id: ".concat(this.id, ", url: '").concat(this.url, "', urlAfterRedirects: '").concat(this.urlAfterRedirects, "', state: ").concat(this.state, ")");
          }
        }]);

        return ResolveStart;
      }(RouterEvent);
      /**
       * An event triggered at the end of the Resolve phase of routing.
       * @see `ResolveStart`.
       *
       * @publicApi
       */


      var ResolveEnd = /*#__PURE__*/function (_RouterEvent9) {
        _inherits2(ResolveEnd, _RouterEvent9);

        var _super385 = _createSuper(ResolveEnd);

        function ResolveEnd(
        /** @docsNotRequired */
        id,
        /** @docsNotRequired */
        url,
        /** @docsNotRequired */
        urlAfterRedirects,
        /** @docsNotRequired */
        state) {
          var _this947;

          _classCallCheck2(this, ResolveEnd);

          _this947 = _super385.call(this, id, url);
          _this947.urlAfterRedirects = urlAfterRedirects;
          _this947.state = state;
          return _this947;
        }

        _createClass2(ResolveEnd, [{
          key: "toString",
          value: function toString() {
            return "ResolveEnd(id: ".concat(this.id, ", url: '").concat(this.url, "', urlAfterRedirects: '").concat(this.urlAfterRedirects, "', state: ").concat(this.state, ")");
          }
        }]);

        return ResolveEnd;
      }(RouterEvent);
      /**
       * An event triggered before lazy loading a route configuration.
       *
       * @see `RouteConfigLoadEnd`
       *
       * @publicApi
       */


      var RouteConfigLoadStart = /*#__PURE__*/function () {
        function RouteConfigLoadStart(
        /** @docsNotRequired */
        route) {
          _classCallCheck2(this, RouteConfigLoadStart);

          this.route = route;
        }

        _createClass2(RouteConfigLoadStart, [{
          key: "toString",
          value: function toString() {
            return "RouteConfigLoadStart(path: ".concat(this.route.path, ")");
          }
        }]);

        return RouteConfigLoadStart;
      }();
      /**
       * An event triggered when a route has been lazy loaded.
       *
       * @see `RouteConfigLoadStart`
       *
       * @publicApi
       */


      var RouteConfigLoadEnd = /*#__PURE__*/function () {
        function RouteConfigLoadEnd(
        /** @docsNotRequired */
        route) {
          _classCallCheck2(this, RouteConfigLoadEnd);

          this.route = route;
        }

        _createClass2(RouteConfigLoadEnd, [{
          key: "toString",
          value: function toString() {
            return "RouteConfigLoadEnd(path: ".concat(this.route.path, ")");
          }
        }]);

        return RouteConfigLoadEnd;
      }();
      /**
       * An event triggered at the start of the child-activation
       * part of the Resolve phase of routing.
       * @see  `ChildActivationEnd`
       * @see `ResolveStart`
       *
       * @publicApi
       */


      var ChildActivationStart = /*#__PURE__*/function () {
        function ChildActivationStart(
        /** @docsNotRequired */
        snapshot) {
          _classCallCheck2(this, ChildActivationStart);

          this.snapshot = snapshot;
        }

        _createClass2(ChildActivationStart, [{
          key: "toString",
          value: function toString() {
            var path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';
            return "ChildActivationStart(path: '".concat(path, "')");
          }
        }]);

        return ChildActivationStart;
      }();
      /**
       * An event triggered at the end of the child-activation part
       * of the Resolve phase of routing.
       * @see `ChildActivationStart`
       * @see `ResolveStart`
       * @publicApi
       */


      var ChildActivationEnd = /*#__PURE__*/function () {
        function ChildActivationEnd(
        /** @docsNotRequired */
        snapshot) {
          _classCallCheck2(this, ChildActivationEnd);

          this.snapshot = snapshot;
        }

        _createClass2(ChildActivationEnd, [{
          key: "toString",
          value: function toString() {
            var path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';
            return "ChildActivationEnd(path: '".concat(path, "')");
          }
        }]);

        return ChildActivationEnd;
      }();
      /**
       * An event triggered at the start of the activation part
       * of the Resolve phase of routing.
       * @see `ActivationEnd`
       * @see `ResolveStart`
       *
       * @publicApi
       */


      var ActivationStart = /*#__PURE__*/function () {
        function ActivationStart(
        /** @docsNotRequired */
        snapshot) {
          _classCallCheck2(this, ActivationStart);

          this.snapshot = snapshot;
        }

        _createClass2(ActivationStart, [{
          key: "toString",
          value: function toString() {
            var path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';
            return "ActivationStart(path: '".concat(path, "')");
          }
        }]);

        return ActivationStart;
      }();
      /**
       * An event triggered at the end of the activation part
       * of the Resolve phase of routing.
       * @see `ActivationStart`
       * @see `ResolveStart`
       *
       * @publicApi
       */


      var ActivationEnd = /*#__PURE__*/function () {
        function ActivationEnd(
        /** @docsNotRequired */
        snapshot) {
          _classCallCheck2(this, ActivationEnd);

          this.snapshot = snapshot;
        }

        _createClass2(ActivationEnd, [{
          key: "toString",
          value: function toString() {
            var path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';
            return "ActivationEnd(path: '".concat(path, "')");
          }
        }]);

        return ActivationEnd;
      }();
      /**
       * An event triggered by scrolling.
       *
       * @publicApi
       */


      var Scroll = /*#__PURE__*/function () {
        function Scroll(
        /** @docsNotRequired */
        routerEvent,
        /** @docsNotRequired */
        position,
        /** @docsNotRequired */
        anchor) {
          _classCallCheck2(this, Scroll);

          this.routerEvent = routerEvent;
          this.position = position;
          this.anchor = anchor;
        }

        _createClass2(Scroll, [{
          key: "toString",
          value: function toString() {
            var pos = this.position ? "".concat(this.position[0], ", ").concat(this.position[1]) : null;
            return "Scroll(anchor: '".concat(this.anchor, "', position: '").concat(pos, "')");
          }
        }]);

        return Scroll;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * The primary routing outlet.
       *
       * @publicApi
       */


      var PRIMARY_OUTLET = 'primary';

      var ParamsAsMap = /*#__PURE__*/function () {
        function ParamsAsMap(params) {
          _classCallCheck2(this, ParamsAsMap);

          this.params = params || {};
        }

        _createClass2(ParamsAsMap, [{
          key: "has",
          value: function has(name) {
            return Object.prototype.hasOwnProperty.call(this.params, name);
          }
        }, {
          key: "get",
          value: function get(name) {
            if (this.has(name)) {
              var v = this.params[name];
              return Array.isArray(v) ? v[0] : v;
            }

            return null;
          }
        }, {
          key: "getAll",
          value: function getAll(name) {
            if (this.has(name)) {
              var v = this.params[name];
              return Array.isArray(v) ? v : [v];
            }

            return [];
          }
        }, {
          key: "keys",
          get: function get() {
            return Object.keys(this.params);
          }
        }]);

        return ParamsAsMap;
      }();
      /**
       * Converts a `Params` instance to a `ParamMap`.
       * @param params The instance to convert.
       * @returns The new map instance.
       *
       * @publicApi
       */


      function convertToParamMap(params) {
        return new ParamsAsMap(params);
      }

      var NAVIGATION_CANCELING_ERROR = 'ngNavigationCancelingError';

      function navigationCancelingError(message) {
        var error = Error('NavigationCancelingError: ' + message);
        error[NAVIGATION_CANCELING_ERROR] = true;
        return error;
      }

      function isNavigationCancelingError(error) {
        return error && error[NAVIGATION_CANCELING_ERROR];
      } // Matches the route configuration (`route`) against the actual URL (`segments`).


      function defaultUrlMatcher(segments, segmentGroup, route) {
        var parts = route.path.split('/');

        if (parts.length > segments.length) {
          // The actual URL is shorter than the config, no match
          return null;
        }

        if (route.pathMatch === 'full' && (segmentGroup.hasChildren() || parts.length < segments.length)) {
          // The config is longer than the actual URL but we are looking for a full match, return null
          return null;
        }

        var posParams = {}; // Check each config part against the actual URL

        for (var index = 0; index < parts.length; index++) {
          var part = parts[index];
          var segment = segments[index];
          var isParameter = part.startsWith(':');

          if (isParameter) {
            posParams[part.substring(1)] = segment;
          } else if (part !== segment.path) {
            // The actual URL part does not match the config, no match
            return null;
          }
        }

        return {
          consumed: segments.slice(0, parts.length),
          posParams: posParams
        };
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function shallowEqualArrays(a, b) {
        if (a.length !== b.length) return false;

        for (var i = 0; i < a.length; ++i) {
          if (!shallowEqual(a[i], b[i])) return false;
        }

        return true;
      }

      function shallowEqual(a, b) {
        // While `undefined` should never be possible, it would sometimes be the case in IE 11
        // and pre-chromium Edge. The check below accounts for this edge case.
        var k1 = a ? Object.keys(a) : undefined;
        var k2 = b ? Object.keys(b) : undefined;

        if (!k1 || !k2 || k1.length != k2.length) {
          return false;
        }

        var key;

        for (var i = 0; i < k1.length; i++) {
          key = k1[i];

          if (!equalArraysOrString(a[key], b[key])) {
            return false;
          }
        }

        return true;
      }
      /**
       * Test equality for arrays of strings or a string.
       */


      function equalArraysOrString(a, b) {
        if (Array.isArray(a) && Array.isArray(b)) {
          if (a.length !== b.length) return false;

          var aSorted = _toConsumableArray(a).sort();

          var bSorted = _toConsumableArray(b).sort();

          return aSorted.every(function (val, index) {
            return bSorted[index] === val;
          });
        } else {
          return a === b;
        }
      }
      /**
       * Flattens single-level nested arrays.
       */


      function flatten(arr) {
        return Array.prototype.concat.apply([], arr);
      }
      /**
       * Return the last element of an array.
       */


      function last(a) {
        return a.length > 0 ? a[a.length - 1] : null;
      }
      /**
       * Verifys all booleans in an array are `true`.
       */


      function and(bools) {
        return !bools.some(function (v) {
          return !v;
        });
      }

      function forEach(map, callback) {
        for (var prop in map) {
          if (map.hasOwnProperty(prop)) {
            callback(map[prop], prop);
          }
        }
      }

      function wrapIntoObservable(value) {
        if (Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵisObservable"])(value)) {
          return value;
        }

        if (Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵisPromise"])(value)) {
          // Use `Promise.resolve()` to wrap promise-like instances.
          // Required ie when a Resolver returns a AngularJS `$q` promise to correctly trigger the
          // change detection.
          return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(Promise.resolve(value));
        }

        return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(value);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function createEmptyUrlTree() {
        return new UrlTree(new UrlSegmentGroup([], {}), {}, null);
      }

      function containsTree(container, containee, exact) {
        if (exact) {
          return equalQueryParams(container.queryParams, containee.queryParams) && equalSegmentGroups(container.root, containee.root);
        }

        return containsQueryParams(container.queryParams, containee.queryParams) && containsSegmentGroup(container.root, containee.root);
      }

      function equalQueryParams(container, containee) {
        // TODO: This does not handle array params correctly.
        return shallowEqual(container, containee);
      }

      function equalSegmentGroups(container, containee) {
        if (!equalPath(container.segments, containee.segments)) return false;
        if (container.numberOfChildren !== containee.numberOfChildren) return false;

        for (var c in containee.children) {
          if (!container.children[c]) return false;
          if (!equalSegmentGroups(container.children[c], containee.children[c])) return false;
        }

        return true;
      }

      function containsQueryParams(container, containee) {
        return Object.keys(containee).length <= Object.keys(container).length && Object.keys(containee).every(function (key) {
          return equalArraysOrString(container[key], containee[key]);
        });
      }

      function containsSegmentGroup(container, containee) {
        return containsSegmentGroupHelper(container, containee, containee.segments);
      }

      function containsSegmentGroupHelper(container, containee, containeePaths) {
        if (container.segments.length > containeePaths.length) {
          var current = container.segments.slice(0, containeePaths.length);
          if (!equalPath(current, containeePaths)) return false;
          if (containee.hasChildren()) return false;
          return true;
        } else if (container.segments.length === containeePaths.length) {
          if (!equalPath(container.segments, containeePaths)) return false;

          for (var c in containee.children) {
            if (!container.children[c]) return false;
            if (!containsSegmentGroup(container.children[c], containee.children[c])) return false;
          }

          return true;
        } else {
          var _current = containeePaths.slice(0, container.segments.length);

          var next = containeePaths.slice(container.segments.length);
          if (!equalPath(container.segments, _current)) return false;
          if (!container.children[PRIMARY_OUTLET]) return false;
          return containsSegmentGroupHelper(container.children[PRIMARY_OUTLET], containee, next);
        }
      }
      /**
       * @description
       *
       * Represents the parsed URL.
       *
       * Since a router state is a tree, and the URL is nothing but a serialized state, the URL is a
       * serialized tree.
       * UrlTree is a data structure that provides a lot of affordances in dealing with URLs
       *
       * @usageNotes
       * ### Example
       *
       * ```
       * @Component({templateUrl:'template.html'})
       * class MyComponent {
       *   constructor(router: Router) {
       *     const tree: UrlTree =
       *       router.parseUrl('/team/33/(user/victor//support:help)?debug=true#fragment');
       *     const f = tree.fragment; // return 'fragment'
       *     const q = tree.queryParams; // returns {debug: 'true'}
       *     const g: UrlSegmentGroup = tree.root.children[PRIMARY_OUTLET];
       *     const s: UrlSegment[] = g.segments; // returns 2 segments 'team' and '33'
       *     g.children[PRIMARY_OUTLET].segments; // returns 2 segments 'user' and 'victor'
       *     g.children['support'].segments; // return 1 segment 'help'
       *   }
       * }
       * ```
       *
       * @publicApi
       */


      var UrlTree = /*#__PURE__*/function () {
        /** @internal */
        function UrlTree(
        /** The root segment group of the URL tree */
        root,
        /** The query params of the URL */
        queryParams,
        /** The fragment of the URL */
        fragment) {
          _classCallCheck2(this, UrlTree);

          this.root = root;
          this.queryParams = queryParams;
          this.fragment = fragment;
        }

        _createClass2(UrlTree, [{
          key: "queryParamMap",
          get: function get() {
            if (!this._queryParamMap) {
              this._queryParamMap = convertToParamMap(this.queryParams);
            }

            return this._queryParamMap;
          }
          /** @docsNotRequired */

        }, {
          key: "toString",
          value: function toString() {
            return DEFAULT_SERIALIZER.serialize(this);
          }
        }]);

        return UrlTree;
      }();
      /**
       * @description
       *
       * Represents the parsed URL segment group.
       *
       * See `UrlTree` for more information.
       *
       * @publicApi
       */


      var UrlSegmentGroup = /*#__PURE__*/function () {
        function UrlSegmentGroup(
        /** The URL segments of this group. See `UrlSegment` for more information */
        segments,
        /** The list of children of this group */
        children) {
          var _this948 = this;

          _classCallCheck2(this, UrlSegmentGroup);

          this.segments = segments;
          this.children = children;
          /** The parent node in the url tree */

          this.parent = null;
          forEach(children, function (v, k) {
            return v.parent = _this948;
          });
        }
        /** Whether the segment has child segments */


        _createClass2(UrlSegmentGroup, [{
          key: "hasChildren",
          value: function hasChildren() {
            return this.numberOfChildren > 0;
          }
          /** Number of child segments */

        }, {
          key: "numberOfChildren",
          get: function get() {
            return Object.keys(this.children).length;
          }
          /** @docsNotRequired */

        }, {
          key: "toString",
          value: function toString() {
            return serializePaths(this);
          }
        }]);

        return UrlSegmentGroup;
      }();
      /**
       * @description
       *
       * Represents a single URL segment.
       *
       * A UrlSegment is a part of a URL between the two slashes. It contains a path and the matrix
       * parameters associated with the segment.
       *
       * @usageNotes
       * ### Example
       *
       * ```
       * @Component({templateUrl:'template.html'})
       * class MyComponent {
       *   constructor(router: Router) {
       *     const tree: UrlTree = router.parseUrl('/team;id=33');
       *     const g: UrlSegmentGroup = tree.root.children[PRIMARY_OUTLET];
       *     const s: UrlSegment[] = g.segments;
       *     s[0].path; // returns 'team'
       *     s[0].parameters; // returns {id: 33}
       *   }
       * }
       * ```
       *
       * @publicApi
       */


      var UrlSegment = /*#__PURE__*/function () {
        function UrlSegment(
        /** The path part of a URL segment */
        path,
        /** The matrix parameters associated with a segment */
        parameters) {
          _classCallCheck2(this, UrlSegment);

          this.path = path;
          this.parameters = parameters;
        }

        _createClass2(UrlSegment, [{
          key: "parameterMap",
          get: function get() {
            if (!this._parameterMap) {
              this._parameterMap = convertToParamMap(this.parameters);
            }

            return this._parameterMap;
          }
          /** @docsNotRequired */

        }, {
          key: "toString",
          value: function toString() {
            return serializePath(this);
          }
        }]);

        return UrlSegment;
      }();

      function equalSegments(as, bs) {
        return equalPath(as, bs) && as.every(function (a, i) {
          return shallowEqual(a.parameters, bs[i].parameters);
        });
      }

      function equalPath(as, bs) {
        if (as.length !== bs.length) return false;
        return as.every(function (a, i) {
          return a.path === bs[i].path;
        });
      }

      function mapChildrenIntoArray(segment, fn) {
        var res = [];
        forEach(segment.children, function (child, childOutlet) {
          if (childOutlet === PRIMARY_OUTLET) {
            res = res.concat(fn(child, childOutlet));
          }
        });
        forEach(segment.children, function (child, childOutlet) {
          if (childOutlet !== PRIMARY_OUTLET) {
            res = res.concat(fn(child, childOutlet));
          }
        });
        return res;
      }
      /**
       * @description
       *
       * Serializes and deserializes a URL string into a URL tree.
       *
       * The url serialization strategy is customizable. You can
       * make all URLs case insensitive by providing a custom UrlSerializer.
       *
       * See `DefaultUrlSerializer` for an example of a URL serializer.
       *
       * @publicApi
       */


      var UrlSerializer = function UrlSerializer() {
        _classCallCheck2(this, UrlSerializer);
      };
      /**
       * @description
       *
       * A default implementation of the `UrlSerializer`.
       *
       * Example URLs:
       *
       * ```
       * /inbox/33(popup:compose)
       * /inbox/33;open=true/messages/44
       * ```
       *
       * DefaultUrlSerializer uses parentheses to serialize secondary segments (e.g., popup:compose), the
       * colon syntax to specify the outlet, and the ';parameter=value' syntax (e.g., open=true) to
       * specify route specific parameters.
       *
       * @publicApi
       */


      var DefaultUrlSerializer = /*#__PURE__*/function () {
        function DefaultUrlSerializer() {
          _classCallCheck2(this, DefaultUrlSerializer);
        }

        _createClass2(DefaultUrlSerializer, [{
          key: "parse",
          value:
          /** Parses a url into a `UrlTree` */
          function parse(url) {
            var p = new UrlParser(url);
            return new UrlTree(p.parseRootSegment(), p.parseQueryParams(), p.parseFragment());
          }
          /** Converts a `UrlTree` into a url */

        }, {
          key: "serialize",
          value: function serialize(tree) {
            var segment = "/".concat(serializeSegment(tree.root, true));
            var query = serializeQueryParams(tree.queryParams);
            var fragment = typeof tree.fragment === "string" ? "#".concat(encodeUriFragment(tree.fragment)) : '';
            return "".concat(segment).concat(query).concat(fragment);
          }
        }]);

        return DefaultUrlSerializer;
      }();

      var DEFAULT_SERIALIZER = new DefaultUrlSerializer();

      function serializePaths(segment) {
        return segment.segments.map(function (p) {
          return serializePath(p);
        }).join('/');
      }

      function serializeSegment(segment, root) {
        if (!segment.hasChildren()) {
          return serializePaths(segment);
        }

        if (root) {
          var primary = segment.children[PRIMARY_OUTLET] ? serializeSegment(segment.children[PRIMARY_OUTLET], false) : '';
          var children = [];
          forEach(segment.children, function (v, k) {
            if (k !== PRIMARY_OUTLET) {
              children.push("".concat(k, ":").concat(serializeSegment(v, false)));
            }
          });
          return children.length > 0 ? "".concat(primary, "(").concat(children.join('//'), ")") : primary;
        } else {
          var _children = mapChildrenIntoArray(segment, function (v, k) {
            if (k === PRIMARY_OUTLET) {
              return [serializeSegment(segment.children[PRIMARY_OUTLET], false)];
            }

            return ["".concat(k, ":").concat(serializeSegment(v, false))];
          }); // use no parenthesis if the only child is a primary outlet route


          if (Object.keys(segment.children).length === 1 && segment.children[PRIMARY_OUTLET] != null) {
            return "".concat(serializePaths(segment), "/").concat(_children[0]);
          }

          return "".concat(serializePaths(segment), "/(").concat(_children.join('//'), ")");
        }
      }
      /**
       * Encodes a URI string with the default encoding. This function will only ever be called from
       * `encodeUriQuery` or `encodeUriSegment` as it's the base set of encodings to be used. We need
       * a custom encoding because encodeURIComponent is too aggressive and encodes stuff that doesn't
       * have to be encoded per https://url.spec.whatwg.org.
       */


      function encodeUriString(s) {
        return encodeURIComponent(s).replace(/%40/g, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',');
      }
      /**
       * This function should be used to encode both keys and values in a query string key/value. In
       * the following URL, you need to call encodeUriQuery on "k" and "v":
       *
       * http://www.site.org/html;mk=mv?k=v#f
       */


      function encodeUriQuery(s) {
        return encodeUriString(s).replace(/%3B/gi, ';');
      }
      /**
       * This function should be used to encode a URL fragment. In the following URL, you need to call
       * encodeUriFragment on "f":
       *
       * http://www.site.org/html;mk=mv?k=v#f
       */


      function encodeUriFragment(s) {
        return encodeURI(s);
      }
      /**
       * This function should be run on any URI segment as well as the key and value in a key/value
       * pair for matrix params. In the following URL, you need to call encodeUriSegment on "html",
       * "mk", and "mv":
       *
       * http://www.site.org/html;mk=mv?k=v#f
       */


      function encodeUriSegment(s) {
        return encodeUriString(s).replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/%26/gi, '&');
      }

      function decode(s) {
        return decodeURIComponent(s);
      } // Query keys/values should have the "+" replaced first, as "+" in a query string is " ".
      // decodeURIComponent function will not decode "+" as a space.


      function decodeQuery(s) {
        return decode(s.replace(/\+/g, '%20'));
      }

      function serializePath(path) {
        return "".concat(encodeUriSegment(path.path)).concat(serializeMatrixParams(path.parameters));
      }

      function serializeMatrixParams(params) {
        return Object.keys(params).map(function (key) {
          return ";".concat(encodeUriSegment(key), "=").concat(encodeUriSegment(params[key]));
        }).join('');
      }

      function serializeQueryParams(params) {
        var strParams = Object.keys(params).map(function (name) {
          var value = params[name];
          return Array.isArray(value) ? value.map(function (v) {
            return "".concat(encodeUriQuery(name), "=").concat(encodeUriQuery(v));
          }).join('&') : "".concat(encodeUriQuery(name), "=").concat(encodeUriQuery(value));
        });
        return strParams.length ? "?".concat(strParams.join('&')) : '';
      }

      var SEGMENT_RE = /^[^\/()?;=#]+/;

      function matchSegments(str) {
        var match = str.match(SEGMENT_RE);
        return match ? match[0] : '';
      }

      var QUERY_PARAM_RE = /^[^=?&#]+/; // Return the name of the query param at the start of the string or an empty string

      function matchQueryParams(str) {
        var match = str.match(QUERY_PARAM_RE);
        return match ? match[0] : '';
      }

      var QUERY_PARAM_VALUE_RE = /^[^?&#]+/; // Return the value of the query param at the start of the string or an empty string

      function matchUrlQueryParamValue(str) {
        var match = str.match(QUERY_PARAM_VALUE_RE);
        return match ? match[0] : '';
      }

      var UrlParser = /*#__PURE__*/function () {
        function UrlParser(url) {
          _classCallCheck2(this, UrlParser);

          this.url = url;
          this.remaining = url;
        }

        _createClass2(UrlParser, [{
          key: "parseRootSegment",
          value: function parseRootSegment() {
            this.consumeOptional('/');

            if (this.remaining === '' || this.peekStartsWith('?') || this.peekStartsWith('#')) {
              return new UrlSegmentGroup([], {});
            } // The root segment group never has segments


            return new UrlSegmentGroup([], this.parseChildren());
          }
        }, {
          key: "parseQueryParams",
          value: function parseQueryParams() {
            var params = {};

            if (this.consumeOptional('?')) {
              do {
                this.parseQueryParam(params);
              } while (this.consumeOptional('&'));
            }

            return params;
          }
        }, {
          key: "parseFragment",
          value: function parseFragment() {
            return this.consumeOptional('#') ? decodeURIComponent(this.remaining) : null;
          }
        }, {
          key: "parseChildren",
          value: function parseChildren() {
            if (this.remaining === '') {
              return {};
            }

            this.consumeOptional('/');
            var segments = [];

            if (!this.peekStartsWith('(')) {
              segments.push(this.parseSegment());
            }

            while (this.peekStartsWith('/') && !this.peekStartsWith('//') && !this.peekStartsWith('/(')) {
              this.capture('/');
              segments.push(this.parseSegment());
            }

            var children = {};

            if (this.peekStartsWith('/(')) {
              this.capture('/');
              children = this.parseParens(true);
            }

            var res = {};

            if (this.peekStartsWith('(')) {
              res = this.parseParens(false);
            }

            if (segments.length > 0 || Object.keys(children).length > 0) {
              res[PRIMARY_OUTLET] = new UrlSegmentGroup(segments, children);
            }

            return res;
          } // parse a segment with its matrix parameters
          // ie `name;k1=v1;k2`

        }, {
          key: "parseSegment",
          value: function parseSegment() {
            var path = matchSegments(this.remaining);

            if (path === '' && this.peekStartsWith(';')) {
              throw new Error("Empty path url segment cannot have parameters: '".concat(this.remaining, "'."));
            }

            this.capture(path);
            return new UrlSegment(decode(path), this.parseMatrixParams());
          }
        }, {
          key: "parseMatrixParams",
          value: function parseMatrixParams() {
            var params = {};

            while (this.consumeOptional(';')) {
              this.parseParam(params);
            }

            return params;
          }
        }, {
          key: "parseParam",
          value: function parseParam(params) {
            var key = matchSegments(this.remaining);

            if (!key) {
              return;
            }

            this.capture(key);
            var value = '';

            if (this.consumeOptional('=')) {
              var valueMatch = matchSegments(this.remaining);

              if (valueMatch) {
                value = valueMatch;
                this.capture(value);
              }
            }

            params[decode(key)] = decode(value);
          } // Parse a single query parameter `name[=value]`

        }, {
          key: "parseQueryParam",
          value: function parseQueryParam(params) {
            var key = matchQueryParams(this.remaining);

            if (!key) {
              return;
            }

            this.capture(key);
            var value = '';

            if (this.consumeOptional('=')) {
              var valueMatch = matchUrlQueryParamValue(this.remaining);

              if (valueMatch) {
                value = valueMatch;
                this.capture(value);
              }
            }

            var decodedKey = decodeQuery(key);
            var decodedVal = decodeQuery(value);

            if (params.hasOwnProperty(decodedKey)) {
              // Append to existing values
              var currentVal = params[decodedKey];

              if (!Array.isArray(currentVal)) {
                currentVal = [currentVal];
                params[decodedKey] = currentVal;
              }

              currentVal.push(decodedVal);
            } else {
              // Create a new value
              params[decodedKey] = decodedVal;
            }
          } // parse `(a/b//outlet_name:c/d)`

        }, {
          key: "parseParens",
          value: function parseParens(allowPrimary) {
            var segments = {};
            this.capture('(');

            while (!this.consumeOptional(')') && this.remaining.length > 0) {
              var path = matchSegments(this.remaining);
              var next = this.remaining[path.length]; // if is is not one of these characters, then the segment was unescaped
              // or the group was not closed

              if (next !== '/' && next !== ')' && next !== ';') {
                throw new Error("Cannot parse url '".concat(this.url, "'"));
              }

              var outletName = undefined;

              if (path.indexOf(':') > -1) {
                outletName = path.substr(0, path.indexOf(':'));
                this.capture(outletName);
                this.capture(':');
              } else if (allowPrimary) {
                outletName = PRIMARY_OUTLET;
              }

              var children = this.parseChildren();
              segments[outletName] = Object.keys(children).length === 1 ? children[PRIMARY_OUTLET] : new UrlSegmentGroup([], children);
              this.consumeOptional('//');
            }

            return segments;
          }
        }, {
          key: "peekStartsWith",
          value: function peekStartsWith(str) {
            return this.remaining.startsWith(str);
          } // Consumes the prefix when it is present and returns whether it has been consumed

        }, {
          key: "consumeOptional",
          value: function consumeOptional(str) {
            if (this.peekStartsWith(str)) {
              this.remaining = this.remaining.substring(str.length);
              return true;
            }

            return false;
          }
        }, {
          key: "capture",
          value: function capture(str) {
            if (!this.consumeOptional(str)) {
              throw new Error("Expected \"".concat(str, "\"."));
            }
          }
        }]);

        return UrlParser;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var Tree = /*#__PURE__*/function () {
        function Tree(root) {
          _classCallCheck2(this, Tree);

          this._root = root;
        }

        _createClass2(Tree, [{
          key: "root",
          get: function get() {
            return this._root.value;
          }
          /**
           * @internal
           */

        }, {
          key: "parent",
          value: function parent(t) {
            var p = this.pathFromRoot(t);
            return p.length > 1 ? p[p.length - 2] : null;
          }
          /**
           * @internal
           */

        }, {
          key: "children",
          value: function children(t) {
            var n = findNode(t, this._root);
            return n ? n.children.map(function (t) {
              return t.value;
            }) : [];
          }
          /**
           * @internal
           */

        }, {
          key: "firstChild",
          value: function firstChild(t) {
            var n = findNode(t, this._root);
            return n && n.children.length > 0 ? n.children[0].value : null;
          }
          /**
           * @internal
           */

        }, {
          key: "siblings",
          value: function siblings(t) {
            var p = findPath(t, this._root);
            if (p.length < 2) return [];
            var c = p[p.length - 2].children.map(function (c) {
              return c.value;
            });
            return c.filter(function (cc) {
              return cc !== t;
            });
          }
          /**
           * @internal
           */

        }, {
          key: "pathFromRoot",
          value: function pathFromRoot(t) {
            return findPath(t, this._root).map(function (s) {
              return s.value;
            });
          }
        }]);

        return Tree;
      }(); // DFS for the node matching the value


      function findNode(value, node) {
        if (value === node.value) return node;

        var _iterator104 = _createForOfIteratorHelper(node.children),
            _step103;

        try {
          for (_iterator104.s(); !(_step103 = _iterator104.n()).done;) {
            var child = _step103.value;

            var _node3 = findNode(value, child);

            if (_node3) return _node3;
          }
        } catch (err) {
          _iterator104.e(err);
        } finally {
          _iterator104.f();
        }

        return null;
      } // Return the path to the node with the given value using DFS


      function findPath(value, node) {
        if (value === node.value) return [node];

        var _iterator105 = _createForOfIteratorHelper(node.children),
            _step104;

        try {
          for (_iterator105.s(); !(_step104 = _iterator105.n()).done;) {
            var child = _step104.value;
            var path = findPath(value, child);

            if (path.length) {
              path.unshift(node);
              return path;
            }
          }
        } catch (err) {
          _iterator105.e(err);
        } finally {
          _iterator105.f();
        }

        return [];
      }

      var TreeNode = /*#__PURE__*/function () {
        function TreeNode(value, children) {
          _classCallCheck2(this, TreeNode);

          this.value = value;
          this.children = children;
        }

        _createClass2(TreeNode, [{
          key: "toString",
          value: function toString() {
            return "TreeNode(".concat(this.value, ")");
          }
        }]);

        return TreeNode;
      }(); // Return the list of T indexed by outlet name


      function nodeChildrenAsMap(node) {
        var map = {};

        if (node) {
          node.children.forEach(function (child) {
            return map[child.value.outlet] = child;
          });
        }

        return map;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Represents the state of the router as a tree of activated routes.
       *
       * @usageNotes
       *
       * Every node in the route tree is an `ActivatedRoute` instance
       * that knows about the "consumed" URL segments, the extracted parameters,
       * and the resolved data.
       * Use the `ActivatedRoute` properties to traverse the tree from any node.
       *
       * The following fragment shows how a component gets the root node
       * of the current state to establish its own route tree:
       *
       * ```
       * @Component({templateUrl:'template.html'})
       * class MyComponent {
       *   constructor(router: Router) {
       *     const state: RouterState = router.routerState;
       *     const root: ActivatedRoute = state.root;
       *     const child = root.firstChild;
       *     const id: Observable<string> = child.params.map(p => p.id);
       *     //...
       *   }
       * }
       * ```
       *
       * @see `ActivatedRoute`
       * @see [Getting route information](guide/router#getting-route-information)
       *
       * @publicApi
       */


      var RouterState = /*#__PURE__*/function (_Tree) {
        _inherits2(RouterState, _Tree);

        var _super386 = _createSuper(RouterState);

        /** @internal */
        function RouterState(root,
        /** The current snapshot of the router state */
        snapshot) {
          var _this949;

          _classCallCheck2(this, RouterState);

          _this949 = _super386.call(this, root);
          _this949.snapshot = snapshot;
          setRouterState(_assertThisInitialized2(_this949), root);
          return _this949;
        }

        _createClass2(RouterState, [{
          key: "toString",
          value: function toString() {
            return this.snapshot.toString();
          }
        }]);

        return RouterState;
      }(Tree);

      function createEmptyState(urlTree, rootComponent) {
        var snapshot = createEmptyStateSnapshot(urlTree, rootComponent);
        var emptyUrl = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"]([new UrlSegment('', {})]);
        var emptyParams = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"]({});
        var emptyData = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"]({});
        var emptyQueryParams = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"]({});
        var fragment = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"]('');
        var activated = new ActivatedRoute(emptyUrl, emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, snapshot.root);
        activated.snapshot = snapshot.root;
        return new RouterState(new TreeNode(activated, []), snapshot);
      }

      function createEmptyStateSnapshot(urlTree, rootComponent) {
        var emptyParams = {};
        var emptyData = {};
        var emptyQueryParams = {};
        var fragment = '';
        var activated = new ActivatedRouteSnapshot([], emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, null, urlTree.root, -1, {});
        return new RouterStateSnapshot('', new TreeNode(activated, []));
      }
      /**
       * Provides access to information about a route associated with a component
       * that is loaded in an outlet.
       * Use to traverse the `RouterState` tree and extract information from nodes.
       *
       * The following example shows how to construct a component using information from a
       * currently activated route.
       *
       * {@example router/activated-route/module.ts region="activated-route"
       *     header="activated-route.component.ts"}
       *
       * @see [Getting route information](guide/router#getting-route-information)
       *
       * @publicApi
       */


      var ActivatedRoute = /*#__PURE__*/function () {
        /** @internal */
        function ActivatedRoute(
        /** An observable of the URL segments matched by this route. */
        url,
        /** An observable of the matrix parameters scoped to this route. */
        params,
        /** An observable of the query parameters shared by all the routes. */
        queryParams,
        /** An observable of the URL fragment shared by all the routes. */
        fragment,
        /** An observable of the static and resolved data of this route. */
        data,
        /** The outlet name of the route, a constant. */
        outlet,
        /** The component of the route, a constant. */
        // TODO(vsavkin): remove |string
        component, futureSnapshot) {
          _classCallCheck2(this, ActivatedRoute);

          this.url = url;
          this.params = params;
          this.queryParams = queryParams;
          this.fragment = fragment;
          this.data = data;
          this.outlet = outlet;
          this.component = component;
          this._futureSnapshot = futureSnapshot;
        }
        /** The configuration used to match this route. */


        _createClass2(ActivatedRoute, [{
          key: "routeConfig",
          get: function get() {
            return this._futureSnapshot.routeConfig;
          }
          /** The root of the router state. */

        }, {
          key: "root",
          get: function get() {
            return this._routerState.root;
          }
          /** The parent of this route in the router state tree. */

        }, {
          key: "parent",
          get: function get() {
            return this._routerState.parent(this);
          }
          /** The first child of this route in the router state tree. */

        }, {
          key: "firstChild",
          get: function get() {
            return this._routerState.firstChild(this);
          }
          /** The children of this route in the router state tree. */

        }, {
          key: "children",
          get: function get() {
            return this._routerState.children(this);
          }
          /** The path from the root of the router state tree to this route. */

        }, {
          key: "pathFromRoot",
          get: function get() {
            return this._routerState.pathFromRoot(this);
          }
          /**
           * An Observable that contains a map of the required and optional parameters
           * specific to the route.
           * The map supports retrieving single and multiple values from the same parameter.
           */

        }, {
          key: "paramMap",
          get: function get() {
            if (!this._paramMap) {
              this._paramMap = this.params.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (p) {
                return convertToParamMap(p);
              }));
            }

            return this._paramMap;
          }
          /**
           * An Observable that contains a map of the query parameters available to all routes.
           * The map supports retrieving single and multiple values from the query parameter.
           */

        }, {
          key: "queryParamMap",
          get: function get() {
            if (!this._queryParamMap) {
              this._queryParamMap = this.queryParams.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (p) {
                return convertToParamMap(p);
              }));
            }

            return this._queryParamMap;
          }
        }, {
          key: "toString",
          value: function toString() {
            return this.snapshot ? this.snapshot.toString() : "Future(".concat(this._futureSnapshot, ")");
          }
        }]);

        return ActivatedRoute;
      }();
      /**
       * Returns the inherited params, data, and resolve for a given route.
       * By default, this only inherits values up to the nearest path-less or component-less route.
       * @internal
       */


      function inheritedParamsDataResolve(route) {
        var paramsInheritanceStrategy = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'emptyOnly';
        var pathFromRoot = route.pathFromRoot;
        var inheritingStartingFrom = 0;

        if (paramsInheritanceStrategy !== 'always') {
          inheritingStartingFrom = pathFromRoot.length - 1;

          while (inheritingStartingFrom >= 1) {
            var current = pathFromRoot[inheritingStartingFrom];
            var parent = pathFromRoot[inheritingStartingFrom - 1]; // current route is an empty path => inherits its parent's params and data

            if (current.routeConfig && current.routeConfig.path === '') {
              inheritingStartingFrom--; // parent is componentless => current route should inherit its params and data
            } else if (!parent.component) {
              inheritingStartingFrom--;
            } else {
              break;
            }
          }
        }

        return flattenInherited(pathFromRoot.slice(inheritingStartingFrom));
      }
      /** @internal */


      function flattenInherited(pathFromRoot) {
        return pathFromRoot.reduce(function (res, curr) {
          var params = Object.assign(Object.assign({}, res.params), curr.params);
          var data = Object.assign(Object.assign({}, res.data), curr.data);
          var resolve = Object.assign(Object.assign({}, res.resolve), curr._resolvedData);
          return {
            params: params,
            data: data,
            resolve: resolve
          };
        }, {
          params: {},
          data: {},
          resolve: {}
        });
      }
      /**
       * @description
       *
       * Contains the information about a route associated with a component loaded in an
       * outlet at a particular moment in time. ActivatedRouteSnapshot can also be used to
       * traverse the router state tree.
       *
       * The following example initializes a component with route information extracted
       * from the snapshot of the root node at the time of creation.
       *
       * ```
       * @Component({templateUrl:'./my-component.html'})
       * class MyComponent {
       *   constructor(route: ActivatedRoute) {
       *     const id: string = route.snapshot.params.id;
       *     const url: string = route.snapshot.url.join('');
       *     const user = route.snapshot.data.user;
       *   }
       * }
       * ```
       *
       * @publicApi
       */


      var ActivatedRouteSnapshot = /*#__PURE__*/function () {
        /** @internal */
        function ActivatedRouteSnapshot(
        /** The URL segments matched by this route */
        url,
        /**
         *  The matrix parameters scoped to this route.
         *
         *  You can compute all params (or data) in the router state or to get params outside
         *  of an activated component by traversing the `RouterState` tree as in the following
         *  example:
         *  ```
         *  collectRouteParams(router: Router) {
         *    let params = {};
         *    let stack: ActivatedRouteSnapshot[] = [router.routerState.snapshot.root];
         *    while (stack.length > 0) {
         *      const route = stack.pop()!;
         *      params = {...params, ...route.params};
         *      stack.push(...route.children);
         *    }
         *    return params;
         *  }
         *  ```
         */
        params,
        /** The query parameters shared by all the routes */
        queryParams,
        /** The URL fragment shared by all the routes */
        fragment,
        /** The static and resolved data of this route */
        data,
        /** The outlet name of the route */
        outlet,
        /** The component of the route */
        component, routeConfig, urlSegment, lastPathIndex, resolve) {
          _classCallCheck2(this, ActivatedRouteSnapshot);

          this.url = url;
          this.params = params;
          this.queryParams = queryParams;
          this.fragment = fragment;
          this.data = data;
          this.outlet = outlet;
          this.component = component;
          this.routeConfig = routeConfig;
          this._urlSegment = urlSegment;
          this._lastPathIndex = lastPathIndex;
          this._resolve = resolve;
        }
        /** The root of the router state */


        _createClass2(ActivatedRouteSnapshot, [{
          key: "root",
          get: function get() {
            return this._routerState.root;
          }
          /** The parent of this route in the router state tree */

        }, {
          key: "parent",
          get: function get() {
            return this._routerState.parent(this);
          }
          /** The first child of this route in the router state tree */

        }, {
          key: "firstChild",
          get: function get() {
            return this._routerState.firstChild(this);
          }
          /** The children of this route in the router state tree */

        }, {
          key: "children",
          get: function get() {
            return this._routerState.children(this);
          }
          /** The path from the root of the router state tree to this route */

        }, {
          key: "pathFromRoot",
          get: function get() {
            return this._routerState.pathFromRoot(this);
          }
        }, {
          key: "paramMap",
          get: function get() {
            if (!this._paramMap) {
              this._paramMap = convertToParamMap(this.params);
            }

            return this._paramMap;
          }
        }, {
          key: "queryParamMap",
          get: function get() {
            if (!this._queryParamMap) {
              this._queryParamMap = convertToParamMap(this.queryParams);
            }

            return this._queryParamMap;
          }
        }, {
          key: "toString",
          value: function toString() {
            var url = this.url.map(function (segment) {
              return segment.toString();
            }).join('/');
            var matched = this.routeConfig ? this.routeConfig.path : '';
            return "Route(url:'".concat(url, "', path:'").concat(matched, "')");
          }
        }]);

        return ActivatedRouteSnapshot;
      }();
      /**
       * @description
       *
       * Represents the state of the router at a moment in time.
       *
       * This is a tree of activated route snapshots. Every node in this tree knows about
       * the "consumed" URL segments, the extracted parameters, and the resolved data.
       *
       * The following example shows how a component is initialized with information
       * from the snapshot of the root node's state at the time of creation.
       *
       * ```
       * @Component({templateUrl:'template.html'})
       * class MyComponent {
       *   constructor(router: Router) {
       *     const state: RouterState = router.routerState;
       *     const snapshot: RouterStateSnapshot = state.snapshot;
       *     const root: ActivatedRouteSnapshot = snapshot.root;
       *     const child = root.firstChild;
       *     const id: Observable<string> = child.params.map(p => p.id);
       *     //...
       *   }
       * }
       * ```
       *
       * @publicApi
       */


      var RouterStateSnapshot = /*#__PURE__*/function (_Tree2) {
        _inherits2(RouterStateSnapshot, _Tree2);

        var _super387 = _createSuper(RouterStateSnapshot);

        /** @internal */
        function RouterStateSnapshot(
        /** The url from which this snapshot was created */
        url, root) {
          var _this950;

          _classCallCheck2(this, RouterStateSnapshot);

          _this950 = _super387.call(this, root);
          _this950.url = url;
          setRouterState(_assertThisInitialized2(_this950), root);
          return _this950;
        }

        _createClass2(RouterStateSnapshot, [{
          key: "toString",
          value: function toString() {
            return serializeNode(this._root);
          }
        }]);

        return RouterStateSnapshot;
      }(Tree);

      function setRouterState(state, node) {
        node.value._routerState = state;
        node.children.forEach(function (c) {
          return setRouterState(state, c);
        });
      }

      function serializeNode(node) {
        var c = node.children.length > 0 ? " { ".concat(node.children.map(serializeNode).join(', '), " } ") : '';
        return "".concat(node.value).concat(c);
      }
      /**
       * The expectation is that the activate route is created with the right set of parameters.
       * So we push new values into the observables only when they are not the initial values.
       * And we detect that by checking if the snapshot field is set.
       */


      function advanceActivatedRoute(route) {
        if (route.snapshot) {
          var currentSnapshot = route.snapshot;
          var nextSnapshot = route._futureSnapshot;
          route.snapshot = nextSnapshot;

          if (!shallowEqual(currentSnapshot.queryParams, nextSnapshot.queryParams)) {
            route.queryParams.next(nextSnapshot.queryParams);
          }

          if (currentSnapshot.fragment !== nextSnapshot.fragment) {
            route.fragment.next(nextSnapshot.fragment);
          }

          if (!shallowEqual(currentSnapshot.params, nextSnapshot.params)) {
            route.params.next(nextSnapshot.params);
          }

          if (!shallowEqualArrays(currentSnapshot.url, nextSnapshot.url)) {
            route.url.next(nextSnapshot.url);
          }

          if (!shallowEqual(currentSnapshot.data, nextSnapshot.data)) {
            route.data.next(nextSnapshot.data);
          }
        } else {
          route.snapshot = route._futureSnapshot; // this is for resolved data

          route.data.next(route._futureSnapshot.data);
        }
      }

      function equalParamsAndUrlSegments(a, b) {
        var equalUrlParams = shallowEqual(a.params, b.params) && equalSegments(a.url, b.url);
        var parentsMismatch = !a.parent !== !b.parent;
        return equalUrlParams && !parentsMismatch && (!a.parent || equalParamsAndUrlSegments(a.parent, b.parent));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function createRouterState(routeReuseStrategy, curr, prevState) {
        var root = createNode(routeReuseStrategy, curr._root, prevState ? prevState._root : undefined);
        return new RouterState(root, curr);
      }

      function createNode(routeReuseStrategy, curr, prevState) {
        // reuse an activated route that is currently displayed on the screen
        if (prevState && routeReuseStrategy.shouldReuseRoute(curr.value, prevState.value.snapshot)) {
          var value = prevState.value;
          value._futureSnapshot = curr.value;
          var children = createOrReuseChildren(routeReuseStrategy, curr, prevState);
          return new TreeNode(value, children); // retrieve an activated route that is used to be displayed, but is not currently displayed
        } else {
          var detachedRouteHandle = routeReuseStrategy.retrieve(curr.value);

          if (detachedRouteHandle) {
            var _tree = detachedRouteHandle.route;
            setFutureSnapshotsOfActivatedRoutes(curr, _tree);
            return _tree;
          } else {
            var _value12 = createActivatedRoute(curr.value);

            var _children2 = curr.children.map(function (c) {
              return createNode(routeReuseStrategy, c);
            });

            return new TreeNode(_value12, _children2);
          }
        }
      }

      function setFutureSnapshotsOfActivatedRoutes(curr, result) {
        if (curr.value.routeConfig !== result.value.routeConfig) {
          throw new Error('Cannot reattach ActivatedRouteSnapshot created from a different route');
        }

        if (curr.children.length !== result.children.length) {
          throw new Error('Cannot reattach ActivatedRouteSnapshot with a different number of children');
        }

        result.value._futureSnapshot = curr.value;

        for (var i = 0; i < curr.children.length; ++i) {
          setFutureSnapshotsOfActivatedRoutes(curr.children[i], result.children[i]);
        }
      }

      function createOrReuseChildren(routeReuseStrategy, curr, prevState) {
        return curr.children.map(function (child) {
          var _iterator106 = _createForOfIteratorHelper(prevState.children),
              _step105;

          try {
            for (_iterator106.s(); !(_step105 = _iterator106.n()).done;) {
              var p = _step105.value;

              if (routeReuseStrategy.shouldReuseRoute(child.value, p.value.snapshot)) {
                return createNode(routeReuseStrategy, child, p);
              }
            }
          } catch (err) {
            _iterator106.e(err);
          } finally {
            _iterator106.f();
          }

          return createNode(routeReuseStrategy, child);
        });
      }

      function createActivatedRoute(c) {
        return new ActivatedRoute(new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](c.url), new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](c.params), new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](c.queryParams), new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](c.fragment), new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"](c.data), c.outlet, c.component, c);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function _createUrlTree(route, urlTree, commands, queryParams, fragment) {
        if (commands.length === 0) {
          return tree(urlTree.root, urlTree.root, urlTree, queryParams, fragment);
        }

        var nav = computeNavigation(commands);

        if (nav.toRoot()) {
          return tree(urlTree.root, new UrlSegmentGroup([], {}), urlTree, queryParams, fragment);
        }

        var startingPosition = findStartingPosition(nav, urlTree, route);
        var segmentGroup = startingPosition.processChildren ? updateSegmentGroupChildren(startingPosition.segmentGroup, startingPosition.index, nav.commands) : updateSegmentGroup(startingPosition.segmentGroup, startingPosition.index, nav.commands);
        return tree(startingPosition.segmentGroup, segmentGroup, urlTree, queryParams, fragment);
      }

      function isMatrixParams(command) {
        return typeof command === 'object' && command != null && !command.outlets && !command.segmentPath;
      }
      /**
       * Determines if a given command has an `outlets` map. When we encounter a command
       * with an outlets k/v map, we need to apply each outlet individually to the existing segment.
       */


      function isCommandWithOutlets(command) {
        return typeof command === 'object' && command != null && command.outlets;
      }

      function tree(oldSegmentGroup, newSegmentGroup, urlTree, queryParams, fragment) {
        var qp = {};

        if (queryParams) {
          forEach(queryParams, function (value, name) {
            qp[name] = Array.isArray(value) ? value.map(function (v) {
              return "".concat(v);
            }) : "".concat(value);
          });
        }

        if (urlTree.root === oldSegmentGroup) {
          return new UrlTree(newSegmentGroup, qp, fragment);
        }

        return new UrlTree(replaceSegment(urlTree.root, oldSegmentGroup, newSegmentGroup), qp, fragment);
      }

      function replaceSegment(current, oldSegment, newSegment) {
        var children = {};
        forEach(current.children, function (c, outletName) {
          if (c === oldSegment) {
            children[outletName] = newSegment;
          } else {
            children[outletName] = replaceSegment(c, oldSegment, newSegment);
          }
        });
        return new UrlSegmentGroup(current.segments, children);
      }

      var Navigation = /*#__PURE__*/function () {
        function Navigation(isAbsolute, numberOfDoubleDots, commands) {
          _classCallCheck2(this, Navigation);

          this.isAbsolute = isAbsolute;
          this.numberOfDoubleDots = numberOfDoubleDots;
          this.commands = commands;

          if (isAbsolute && commands.length > 0 && isMatrixParams(commands[0])) {
            throw new Error('Root segment cannot have matrix parameters');
          }

          var cmdWithOutlet = commands.find(isCommandWithOutlets);

          if (cmdWithOutlet && cmdWithOutlet !== last(commands)) {
            throw new Error('{outlets:{}} has to be the last command');
          }
        }

        _createClass2(Navigation, [{
          key: "toRoot",
          value: function toRoot() {
            return this.isAbsolute && this.commands.length === 1 && this.commands[0] == '/';
          }
        }]);

        return Navigation;
      }();
      /** Transforms commands to a normalized `Navigation` */


      function computeNavigation(commands) {
        if (typeof commands[0] === 'string' && commands.length === 1 && commands[0] === '/') {
          return new Navigation(true, 0, commands);
        }

        var numberOfDoubleDots = 0;
        var isAbsolute = false;
        var res = commands.reduce(function (res, cmd, cmdIdx) {
          if (typeof cmd === 'object' && cmd != null) {
            if (cmd.outlets) {
              var outlets = {};
              forEach(cmd.outlets, function (commands, name) {
                outlets[name] = typeof commands === 'string' ? commands.split('/') : commands;
              });
              return [].concat(_toConsumableArray(res), [{
                outlets: outlets
              }]);
            }

            if (cmd.segmentPath) {
              return [].concat(_toConsumableArray(res), [cmd.segmentPath]);
            }
          }

          if (!(typeof cmd === 'string')) {
            return [].concat(_toConsumableArray(res), [cmd]);
          }

          if (cmdIdx === 0) {
            cmd.split('/').forEach(function (urlPart, partIndex) {
              if (partIndex == 0 && urlPart === '.') {// skip './a'
              } else if (partIndex == 0 && urlPart === '') {
                //  '/a'
                isAbsolute = true;
              } else if (urlPart === '..') {
                //  '../a'
                numberOfDoubleDots++;
              } else if (urlPart != '') {
                res.push(urlPart);
              }
            });
            return res;
          }

          return [].concat(_toConsumableArray(res), [cmd]);
        }, []);
        return new Navigation(isAbsolute, numberOfDoubleDots, res);
      }

      var Position = function Position(segmentGroup, processChildren, index) {
        _classCallCheck2(this, Position);

        this.segmentGroup = segmentGroup;
        this.processChildren = processChildren;
        this.index = index;
      };

      function findStartingPosition(nav, tree, route) {
        if (nav.isAbsolute) {
          return new Position(tree.root, true, 0);
        }

        if (route.snapshot._lastPathIndex === -1) {
          var segmentGroup = route.snapshot._urlSegment; // Pathless ActivatedRoute has _lastPathIndex === -1 but should not process children
          // see issue #26224, #13011, #35687
          // However, if the ActivatedRoute is the root we should process children like above.

          var processChildren = segmentGroup === tree.root;
          return new Position(segmentGroup, processChildren, 0);
        }

        var modifier = isMatrixParams(nav.commands[0]) ? 0 : 1;
        var index = route.snapshot._lastPathIndex + modifier;
        return createPositionApplyingDoubleDots(route.snapshot._urlSegment, index, nav.numberOfDoubleDots);
      }

      function createPositionApplyingDoubleDots(group, index, numberOfDoubleDots) {
        var g = group;
        var ci = index;
        var dd = numberOfDoubleDots;

        while (dd > ci) {
          dd -= ci;
          g = g.parent;

          if (!g) {
            throw new Error('Invalid number of \'../\'');
          }

          ci = g.segments.length;
        }

        return new Position(g, false, ci - dd);
      }

      function getOutlets(commands) {
        if (isCommandWithOutlets(commands[0])) {
          return commands[0].outlets;
        }

        return _defineProperty({}, PRIMARY_OUTLET, commands);
      }

      function updateSegmentGroup(segmentGroup, startIndex, commands) {
        if (!segmentGroup) {
          segmentGroup = new UrlSegmentGroup([], {});
        }

        if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {
          return updateSegmentGroupChildren(segmentGroup, startIndex, commands);
        }

        var m = prefixedWith(segmentGroup, startIndex, commands);
        var slicedCommands = commands.slice(m.commandIndex);

        if (m.match && m.pathIndex < segmentGroup.segments.length) {
          var g = new UrlSegmentGroup(segmentGroup.segments.slice(0, m.pathIndex), {});
          g.children[PRIMARY_OUTLET] = new UrlSegmentGroup(segmentGroup.segments.slice(m.pathIndex), segmentGroup.children);
          return updateSegmentGroupChildren(g, 0, slicedCommands);
        } else if (m.match && slicedCommands.length === 0) {
          return new UrlSegmentGroup(segmentGroup.segments, {});
        } else if (m.match && !segmentGroup.hasChildren()) {
          return createNewSegmentGroup(segmentGroup, startIndex, commands);
        } else if (m.match) {
          return updateSegmentGroupChildren(segmentGroup, 0, slicedCommands);
        } else {
          return createNewSegmentGroup(segmentGroup, startIndex, commands);
        }
      }

      function updateSegmentGroupChildren(segmentGroup, startIndex, commands) {
        if (commands.length === 0) {
          return new UrlSegmentGroup(segmentGroup.segments, {});
        } else {
          var outlets = getOutlets(commands);
          var children = {};
          forEach(outlets, function (commands, outlet) {
            if (typeof commands === 'string') {
              commands = [commands];
            }

            if (commands !== null) {
              children[outlet] = updateSegmentGroup(segmentGroup.children[outlet], startIndex, commands);
            }
          });
          forEach(segmentGroup.children, function (child, childOutlet) {
            if (outlets[childOutlet] === undefined) {
              children[childOutlet] = child;
            }
          });
          return new UrlSegmentGroup(segmentGroup.segments, children);
        }
      }

      function prefixedWith(segmentGroup, startIndex, commands) {
        var currentCommandIndex = 0;
        var currentPathIndex = startIndex;
        var noMatch = {
          match: false,
          pathIndex: 0,
          commandIndex: 0
        };

        while (currentPathIndex < segmentGroup.segments.length) {
          if (currentCommandIndex >= commands.length) return noMatch;
          var path = segmentGroup.segments[currentPathIndex];
          var command = commands[currentCommandIndex]; // Do not try to consume command as part of the prefixing if it has outlets because it can
          // contain outlets other than the one being processed. Consuming the outlets command would
          // result in other outlets being ignored.

          if (isCommandWithOutlets(command)) {
            break;
          }

          var curr = "".concat(command);
          var next = currentCommandIndex < commands.length - 1 ? commands[currentCommandIndex + 1] : null;
          if (currentPathIndex > 0 && curr === undefined) break;

          if (curr && next && typeof next === 'object' && next.outlets === undefined) {
            if (!compare(curr, next, path)) return noMatch;
            currentCommandIndex += 2;
          } else {
            if (!compare(curr, {}, path)) return noMatch;
            currentCommandIndex++;
          }

          currentPathIndex++;
        }

        return {
          match: true,
          pathIndex: currentPathIndex,
          commandIndex: currentCommandIndex
        };
      }

      function createNewSegmentGroup(segmentGroup, startIndex, commands) {
        var paths = segmentGroup.segments.slice(0, startIndex);
        var i = 0;

        while (i < commands.length) {
          var command = commands[i];

          if (isCommandWithOutlets(command)) {
            var children = createNewSegmentChildren(command.outlets);
            return new UrlSegmentGroup(paths, children);
          } // if we start with an object literal, we need to reuse the path part from the segment


          if (i === 0 && isMatrixParams(commands[0])) {
            var p = segmentGroup.segments[startIndex];
            paths.push(new UrlSegment(p.path, stringify(commands[0])));
            i++;
            continue;
          }

          var curr = isCommandWithOutlets(command) ? command.outlets[PRIMARY_OUTLET] : "".concat(command);
          var next = i < commands.length - 1 ? commands[i + 1] : null;

          if (curr && next && isMatrixParams(next)) {
            paths.push(new UrlSegment(curr, stringify(next)));
            i += 2;
          } else {
            paths.push(new UrlSegment(curr, {}));
            i++;
          }
        }

        return new UrlSegmentGroup(paths, {});
      }

      function createNewSegmentChildren(outlets) {
        var children = {};
        forEach(outlets, function (commands, outlet) {
          if (typeof commands === 'string') {
            commands = [commands];
          }

          if (commands !== null) {
            children[outlet] = createNewSegmentGroup(new UrlSegmentGroup([], {}), 0, commands);
          }
        });
        return children;
      }

      function stringify(params) {
        var res = {};
        forEach(params, function (v, k) {
          return res[k] = "".concat(v);
        });
        return res;
      }

      function compare(path, params, segment) {
        return path == segment.path && shallowEqual(params, segment.parameters);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var activateRoutes = function activateRoutes(rootContexts, routeReuseStrategy, forwardEvent) {
        return Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (t) {
          new ActivateRoutes(routeReuseStrategy, t.targetRouterState, t.currentRouterState, forwardEvent).activate(rootContexts);
          return t;
        });
      };

      var ActivateRoutes = /*#__PURE__*/function () {
        function ActivateRoutes(routeReuseStrategy, futureState, currState, forwardEvent) {
          _classCallCheck2(this, ActivateRoutes);

          this.routeReuseStrategy = routeReuseStrategy;
          this.futureState = futureState;
          this.currState = currState;
          this.forwardEvent = forwardEvent;
        }

        _createClass2(ActivateRoutes, [{
          key: "activate",
          value: function activate(parentContexts) {
            var futureRoot = this.futureState._root;
            var currRoot = this.currState ? this.currState._root : null;
            this.deactivateChildRoutes(futureRoot, currRoot, parentContexts);
            advanceActivatedRoute(this.futureState.root);
            this.activateChildRoutes(futureRoot, currRoot, parentContexts);
          } // De-activate the child route that are not re-used for the future state

        }, {
          key: "deactivateChildRoutes",
          value: function deactivateChildRoutes(futureNode, currNode, contexts) {
            var _this951 = this;

            var children = nodeChildrenAsMap(currNode); // Recurse on the routes active in the future state to de-activate deeper children

            futureNode.children.forEach(function (futureChild) {
              var childOutletName = futureChild.value.outlet;

              _this951.deactivateRoutes(futureChild, children[childOutletName], contexts);

              delete children[childOutletName];
            }); // De-activate the routes that will not be re-used

            forEach(children, function (v, childName) {
              _this951.deactivateRouteAndItsChildren(v, contexts);
            });
          }
        }, {
          key: "deactivateRoutes",
          value: function deactivateRoutes(futureNode, currNode, parentContext) {
            var future = futureNode.value;
            var curr = currNode ? currNode.value : null;

            if (future === curr) {
              // Reusing the node, check to see if the children need to be de-activated
              if (future.component) {
                // If we have a normal route, we need to go through an outlet.
                var context = parentContext.getContext(future.outlet);

                if (context) {
                  this.deactivateChildRoutes(futureNode, currNode, context.children);
                }
              } else {
                // if we have a componentless route, we recurse but keep the same outlet map.
                this.deactivateChildRoutes(futureNode, currNode, parentContext);
              }
            } else {
              if (curr) {
                // Deactivate the current route which will not be re-used
                this.deactivateRouteAndItsChildren(currNode, parentContext);
              }
            }
          }
        }, {
          key: "deactivateRouteAndItsChildren",
          value: function deactivateRouteAndItsChildren(route, parentContexts) {
            if (this.routeReuseStrategy.shouldDetach(route.value.snapshot)) {
              this.detachAndStoreRouteSubtree(route, parentContexts);
            } else {
              this.deactivateRouteAndOutlet(route, parentContexts);
            }
          }
        }, {
          key: "detachAndStoreRouteSubtree",
          value: function detachAndStoreRouteSubtree(route, parentContexts) {
            var context = parentContexts.getContext(route.value.outlet);

            if (context && context.outlet) {
              var componentRef = context.outlet.detach();
              var contexts = context.children.onOutletDeactivated();
              this.routeReuseStrategy.store(route.value.snapshot, {
                componentRef: componentRef,
                route: route,
                contexts: contexts
              });
            }
          }
        }, {
          key: "deactivateRouteAndOutlet",
          value: function deactivateRouteAndOutlet(route, parentContexts) {
            var context = parentContexts.getContext(route.value.outlet); // The context could be `null` if we are on a componentless route but there may still be
            // children that need deactivating.

            var contexts = context && route.value.component ? context.children : parentContexts;
            var children = nodeChildrenAsMap(route);

            for (var _i62 = 0, _Object$keys8 = Object.keys(children); _i62 < _Object$keys8.length; _i62++) {
              var childOutlet = _Object$keys8[_i62];
              this.deactivateRouteAndItsChildren(children[childOutlet], contexts);
            }

            if (context && context.outlet) {
              // Destroy the component
              context.outlet.deactivate(); // Destroy the contexts for all the outlets that were in the component

              context.children.onOutletDeactivated();
            }
          }
        }, {
          key: "activateChildRoutes",
          value: function activateChildRoutes(futureNode, currNode, contexts) {
            var _this952 = this;

            var children = nodeChildrenAsMap(currNode);
            futureNode.children.forEach(function (c) {
              _this952.activateRoutes(c, children[c.value.outlet], contexts);

              _this952.forwardEvent(new ActivationEnd(c.value.snapshot));
            });

            if (futureNode.children.length) {
              this.forwardEvent(new ChildActivationEnd(futureNode.value.snapshot));
            }
          }
        }, {
          key: "activateRoutes",
          value: function activateRoutes(futureNode, currNode, parentContexts) {
            var future = futureNode.value;
            var curr = currNode ? currNode.value : null;
            advanceActivatedRoute(future); // reusing the node

            if (future === curr) {
              if (future.component) {
                // If we have a normal route, we need to go through an outlet.
                var context = parentContexts.getOrCreateContext(future.outlet);
                this.activateChildRoutes(futureNode, currNode, context.children);
              } else {
                // if we have a componentless route, we recurse but keep the same outlet map.
                this.activateChildRoutes(futureNode, currNode, parentContexts);
              }
            } else {
              if (future.component) {
                // if we have a normal route, we need to place the component into the outlet and recurse.
                var _context7 = parentContexts.getOrCreateContext(future.outlet);

                if (this.routeReuseStrategy.shouldAttach(future.snapshot)) {
                  var stored = this.routeReuseStrategy.retrieve(future.snapshot);
                  this.routeReuseStrategy.store(future.snapshot, null);

                  _context7.children.onOutletReAttached(stored.contexts);

                  _context7.attachRef = stored.componentRef;
                  _context7.route = stored.route.value;

                  if (_context7.outlet) {
                    // Attach right away when the outlet has already been instantiated
                    // Otherwise attach from `RouterOutlet.ngOnInit` when it is instantiated
                    _context7.outlet.attach(stored.componentRef, stored.route.value);
                  }

                  advanceActivatedRouteNodeAndItsChildren(stored.route);
                } else {
                  var config = parentLoadedConfig(future.snapshot);
                  var cmpFactoryResolver = config ? config.module.componentFactoryResolver : null;
                  _context7.attachRef = null;
                  _context7.route = future;
                  _context7.resolver = cmpFactoryResolver;

                  if (_context7.outlet) {
                    // Activate the outlet when it has already been instantiated
                    // Otherwise it will get activated from its `ngOnInit` when instantiated
                    _context7.outlet.activateWith(future, cmpFactoryResolver);
                  }

                  this.activateChildRoutes(futureNode, null, _context7.children);
                }
              } else {
                // if we have a componentless route, we recurse but keep the same outlet map.
                this.activateChildRoutes(futureNode, null, parentContexts);
              }
            }
          }
        }]);

        return ActivateRoutes;
      }();

      function advanceActivatedRouteNodeAndItsChildren(node) {
        advanceActivatedRoute(node.value);
        node.children.forEach(advanceActivatedRouteNodeAndItsChildren);
      }

      function parentLoadedConfig(snapshot) {
        for (var s = snapshot.parent; s; s = s.parent) {
          var route = s.routeConfig;
          if (route && route._loadedConfig) return route._loadedConfig;
          if (route && route.component) return null;
        }

        return null;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var LoadedRouterConfig = function LoadedRouterConfig(routes, module) {
        _classCallCheck2(this, LoadedRouterConfig);

        this.routes = routes;
        this.module = module;
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Simple function check, but generic so type inference will flow. Example:
       *
       * function product(a: number, b: number) {
       *   return a * b;
       * }
       *
       * if (isFunction<product>(fn)) {
       *   return fn(1, 2);
       * } else {
       *   throw "Must provide the `product` function";
       * }
       */


      function isFunction(v) {
        return typeof v === 'function';
      }

      function isBoolean(v) {
        return typeof v === 'boolean';
      }

      function isUrlTree(v) {
        return v instanceof UrlTree;
      }

      function isCanLoad(guard) {
        return guard && isFunction(guard.canLoad);
      }

      function isCanActivate(guard) {
        return guard && isFunction(guard.canActivate);
      }

      function isCanActivateChild(guard) {
        return guard && isFunction(guard.canActivateChild);
      }

      function isCanDeactivate(guard) {
        return guard && isFunction(guard.canDeactivate);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var INITIAL_VALUE = Symbol('INITIAL_VALUE');

      function prioritizedGuardValue() {
        return Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(function (obs) {
          return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["combineLatest"])(obs.map(function (o) {
            return o.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["startWith"])(INITIAL_VALUE));
          })).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["scan"])(function (acc, list) {
            var isPending = false;
            return list.reduce(function (innerAcc, val, i) {
              if (innerAcc !== INITIAL_VALUE) return innerAcc; // Toggle pending flag if any values haven't been set yet

              if (val === INITIAL_VALUE) isPending = true; // Any other return values are only valid if we haven't yet hit a pending
              // call. This guarantees that in the case of a guard at the bottom of the
              // tree that returns a redirect, we will wait for the higher priority
              // guard at the top to finish before performing the redirect.

              if (!isPending) {
                // Early return when we hit a `false` value as that should always
                // cancel navigation
                if (val === false) return val;

                if (i === list.length - 1 || isUrlTree(val)) {
                  return val;
                }
              }

              return innerAcc;
            }, acc);
          }, INITIAL_VALUE), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(function (item) {
            return item !== INITIAL_VALUE;
          }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (item) {
            return isUrlTree(item) ? item : item === true;
          }), //
          Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1));
        });
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * This component is used internally within the router to be a placeholder when an empty
       * router-outlet is needed. For example, with a config such as:
       *
       * `{path: 'parent', outlet: 'nav', children: [...]}`
       *
       * In order to render, there needs to be a component on this config, which will default
       * to this `EmptyOutletComponent`.
       */


      var ɵEmptyOutletComponent = function ɵEmptyOutletComponent() {
        _classCallCheck2(this, ɵEmptyOutletComponent);
      };

      ɵEmptyOutletComponent.ɵfac = function ɵEmptyOutletComponent_Factory(t) {
        return new (t || ɵEmptyOutletComponent)();
      };

      ɵEmptyOutletComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({
        type: ɵEmptyOutletComponent,
        selectors: [["ng-component"]],
        decls: 1,
        vars: 0,
        template: function ɵEmptyOutletComponent_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](0, "router-outlet");
          }
        },
        directives: function directives() {
          return [RouterOutlet];
        },
        encapsulation: 2
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](ɵEmptyOutletComponent, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"],
          args: [{
            template: "<router-outlet></router-outlet>"
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function validateConfig(config) {
        var parentPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';

        // forEach doesn't iterate undefined values
        for (var i = 0; i < config.length; i++) {
          var route = config[i];
          var fullPath = getFullPath(parentPath, route);
          validateNode(route, fullPath);
        }
      }

      function validateNode(route, fullPath) {
        if (typeof ngDevMode === 'undefined' || ngDevMode) {
          if (!route) {
            throw new Error("\n      Invalid configuration of route '".concat(fullPath, "': Encountered undefined route.\n      The reason might be an extra comma.\n\n      Example:\n      const routes: Routes = [\n        { path: '', redirectTo: '/dashboard', pathMatch: 'full' },\n        { path: 'dashboard',  component: DashboardComponent },, << two commas\n        { path: 'detail/:id', component: HeroDetailComponent }\n      ];\n    "));
          }

          if (Array.isArray(route)) {
            throw new Error("Invalid configuration of route '".concat(fullPath, "': Array cannot be specified"));
          }

          if (!route.component && !route.children && !route.loadChildren && route.outlet && route.outlet !== PRIMARY_OUTLET) {
            throw new Error("Invalid configuration of route '".concat(fullPath, "': a componentless route without children or loadChildren cannot have a named outlet set"));
          }

          if (route.redirectTo && route.children) {
            throw new Error("Invalid configuration of route '".concat(fullPath, "': redirectTo and children cannot be used together"));
          }

          if (route.redirectTo && route.loadChildren) {
            throw new Error("Invalid configuration of route '".concat(fullPath, "': redirectTo and loadChildren cannot be used together"));
          }

          if (route.children && route.loadChildren) {
            throw new Error("Invalid configuration of route '".concat(fullPath, "': children and loadChildren cannot be used together"));
          }

          if (route.redirectTo && route.component) {
            throw new Error("Invalid configuration of route '".concat(fullPath, "': redirectTo and component cannot be used together"));
          }

          if (route.redirectTo && route.canActivate) {
            throw new Error("Invalid configuration of route '".concat(fullPath, "': redirectTo and canActivate cannot be used together. Redirects happen before activation ") + "so canActivate will never be executed.");
          }

          if (route.path && route.matcher) {
            throw new Error("Invalid configuration of route '".concat(fullPath, "': path and matcher cannot be used together"));
          }

          if (route.redirectTo === void 0 && !route.component && !route.children && !route.loadChildren) {
            throw new Error("Invalid configuration of route '".concat(fullPath, "'. One of the following must be provided: component, redirectTo, children or loadChildren"));
          }

          if (route.path === void 0 && route.matcher === void 0) {
            throw new Error("Invalid configuration of route '".concat(fullPath, "': routes must have either a path or a matcher specified"));
          }

          if (typeof route.path === 'string' && route.path.charAt(0) === '/') {
            throw new Error("Invalid configuration of route '".concat(fullPath, "': path cannot start with a slash"));
          }

          if (route.path === '' && route.redirectTo !== void 0 && route.pathMatch === void 0) {
            var exp = "The default value of 'pathMatch' is 'prefix', but often the intent is to use 'full'.";
            throw new Error("Invalid configuration of route '{path: \"".concat(fullPath, "\", redirectTo: \"").concat(route.redirectTo, "\"}': please provide 'pathMatch'. ").concat(exp));
          }

          if (route.pathMatch !== void 0 && route.pathMatch !== 'full' && route.pathMatch !== 'prefix') {
            throw new Error("Invalid configuration of route '".concat(fullPath, "': pathMatch can only be set to 'prefix' or 'full'"));
          }
        }

        if (route.children) {
          validateConfig(route.children, fullPath);
        }
      }

      function getFullPath(parentPath, currentRoute) {
        if (!currentRoute) {
          return parentPath;
        }

        if (!parentPath && !currentRoute.path) {
          return '';
        } else if (parentPath && !currentRoute.path) {
          return "".concat(parentPath, "/");
        } else if (!parentPath && currentRoute.path) {
          return currentRoute.path;
        } else {
          return "".concat(parentPath, "/").concat(currentRoute.path);
        }
      }
      /**
       * Makes a copy of the config and adds any default required properties.
       */


      function standardizeConfig(r) {
        var children = r.children && r.children.map(standardizeConfig);
        var c = children ? Object.assign(Object.assign({}, r), {
          children: children
        }) : Object.assign({}, r);

        if (!c.component && (children || c.loadChildren) && c.outlet && c.outlet !== PRIMARY_OUTLET) {
          c.component = ɵEmptyOutletComponent;
        }

        return c;
      }
      /** Returns the `route.outlet` or PRIMARY_OUTLET if none exists. */


      function getOutlet(route) {
        return route.outlet || PRIMARY_OUTLET;
      }
      /**
       * Sorts the `routes` such that the ones with an outlet matching `outletName` come first.
       * The order of the configs is otherwise preserved.
       */


      function sortByMatchingOutlets(routes, outletName) {
        var sortedConfig = routes.filter(function (r) {
          return getOutlet(r) === outletName;
        });
        sortedConfig.push.apply(sortedConfig, _toConsumableArray(routes.filter(function (r) {
          return getOutlet(r) !== outletName;
        })));
        return sortedConfig;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var noMatch = {
        matched: false,
        consumedSegments: [],
        lastChild: 0,
        parameters: {},
        positionalParamSegments: {}
      };

      function match(segmentGroup, route, segments) {
        var _a;

        if (route.path === '') {
          if (route.pathMatch === 'full' && (segmentGroup.hasChildren() || segments.length > 0)) {
            return Object.assign({}, noMatch);
          }

          return {
            matched: true,
            consumedSegments: [],
            lastChild: 0,
            parameters: {},
            positionalParamSegments: {}
          };
        }

        var matcher = route.matcher || defaultUrlMatcher;
        var res = matcher(segments, segmentGroup, route);
        if (!res) return Object.assign({}, noMatch);
        var posParams = {};
        forEach(res.posParams, function (v, k) {
          posParams[k] = v.path;
        });
        var parameters = res.consumed.length > 0 ? Object.assign(Object.assign({}, posParams), res.consumed[res.consumed.length - 1].parameters) : posParams;
        return {
          matched: true,
          consumedSegments: res.consumed,
          lastChild: res.consumed.length,
          // TODO(atscott): investigate combining parameters and positionalParamSegments
          parameters: parameters,
          positionalParamSegments: (_a = res.posParams) !== null && _a !== void 0 ? _a : {}
        };
      }

      function split(segmentGroup, consumedSegments, slicedSegments, config) {
        var relativeLinkResolution = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'corrected';

        if (slicedSegments.length > 0 && containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, config)) {
          var _s2 = new UrlSegmentGroup(consumedSegments, createChildrenForEmptyPaths(segmentGroup, consumedSegments, config, new UrlSegmentGroup(slicedSegments, segmentGroup.children)));

          _s2._sourceSegment = segmentGroup;
          _s2._segmentIndexShift = consumedSegments.length;
          return {
            segmentGroup: _s2,
            slicedSegments: []
          };
        }

        if (slicedSegments.length === 0 && containsEmptyPathMatches(segmentGroup, slicedSegments, config)) {
          var _s3 = new UrlSegmentGroup(segmentGroup.segments, addEmptyPathsToChildrenIfNeeded(segmentGroup, consumedSegments, slicedSegments, config, segmentGroup.children, relativeLinkResolution));

          _s3._sourceSegment = segmentGroup;
          _s3._segmentIndexShift = consumedSegments.length;
          return {
            segmentGroup: _s3,
            slicedSegments: slicedSegments
          };
        }

        var s = new UrlSegmentGroup(segmentGroup.segments, segmentGroup.children);
        s._sourceSegment = segmentGroup;
        s._segmentIndexShift = consumedSegments.length;
        return {
          segmentGroup: s,
          slicedSegments: slicedSegments
        };
      }

      function addEmptyPathsToChildrenIfNeeded(segmentGroup, consumedSegments, slicedSegments, routes, children, relativeLinkResolution) {
        var res = {};

        var _iterator107 = _createForOfIteratorHelper(routes),
            _step106;

        try {
          for (_iterator107.s(); !(_step106 = _iterator107.n()).done;) {
            var r = _step106.value;

            if (emptyPathMatch(segmentGroup, slicedSegments, r) && !children[getOutlet(r)]) {
              var s = new UrlSegmentGroup([], {});
              s._sourceSegment = segmentGroup;

              if (relativeLinkResolution === 'legacy') {
                s._segmentIndexShift = segmentGroup.segments.length;
              } else {
                s._segmentIndexShift = consumedSegments.length;
              }

              res[getOutlet(r)] = s;
            }
          }
        } catch (err) {
          _iterator107.e(err);
        } finally {
          _iterator107.f();
        }

        return Object.assign(Object.assign({}, children), res);
      }

      function createChildrenForEmptyPaths(segmentGroup, consumedSegments, routes, primarySegment) {
        var res = {};
        res[PRIMARY_OUTLET] = primarySegment;
        primarySegment._sourceSegment = segmentGroup;
        primarySegment._segmentIndexShift = consumedSegments.length;

        var _iterator108 = _createForOfIteratorHelper(routes),
            _step107;

        try {
          for (_iterator108.s(); !(_step107 = _iterator108.n()).done;) {
            var r = _step107.value;

            if (r.path === '' && getOutlet(r) !== PRIMARY_OUTLET) {
              var s = new UrlSegmentGroup([], {});
              s._sourceSegment = segmentGroup;
              s._segmentIndexShift = consumedSegments.length;
              res[getOutlet(r)] = s;
            }
          }
        } catch (err) {
          _iterator108.e(err);
        } finally {
          _iterator108.f();
        }

        return res;
      }

      function containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, routes) {
        return routes.some(function (r) {
          return emptyPathMatch(segmentGroup, slicedSegments, r) && getOutlet(r) !== PRIMARY_OUTLET;
        });
      }

      function containsEmptyPathMatches(segmentGroup, slicedSegments, routes) {
        return routes.some(function (r) {
          return emptyPathMatch(segmentGroup, slicedSegments, r);
        });
      }

      function emptyPathMatch(segmentGroup, slicedSegments, r) {
        if ((segmentGroup.hasChildren() || slicedSegments.length > 0) && r.pathMatch === 'full') {
          return false;
        }

        return r.path === '';
      }
      /**
       * Determines if `route` is a path match for the `rawSegment`, `segments`, and `outlet` without
       * verifying that its children are a full match for the remainder of the `rawSegment` children as
       * well.
       */


      function isImmediateMatch(route, rawSegment, segments, outlet) {
        // We allow matches to empty paths when the outlets differ so we can match a url like `/(b:b)` to
        // a config like
        // * `{path: '', children: [{path: 'b', outlet: 'b'}]}`
        // or even
        // * `{path: '', outlet: 'a', children: [{path: 'b', outlet: 'b'}]`
        //
        // The exception here is when the segment outlet is for the primary outlet. This would
        // result in a match inside the named outlet because all children there are written as primary
        // outlets. So we need to prevent child named outlet matches in a url like `/b` in a config like
        // * `{path: '', outlet: 'x' children: [{path: 'b'}]}`
        // This should only match if the url is `/(x:b)`.
        if (getOutlet(route) !== outlet && (outlet === PRIMARY_OUTLET || !emptyPathMatch(rawSegment, segments, route))) {
          return false;
        }

        if (route.path === '**') {
          return true;
        }

        return match(rawSegment, route, segments).matched;
      }

      function noLeftoversInUrl(segmentGroup, segments, outlet) {
        return segments.length === 0 && !segmentGroup.children[outlet];
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var NoMatch = function NoMatch(segmentGroup) {
        _classCallCheck2(this, NoMatch);

        this.segmentGroup = segmentGroup || null;
      };

      var AbsoluteRedirect = function AbsoluteRedirect(urlTree) {
        _classCallCheck2(this, AbsoluteRedirect);

        this.urlTree = urlTree;
      };

      function noMatch$1(segmentGroup) {
        return new rxjs__WEBPACK_IMPORTED_MODULE_2__["Observable"](function (obs) {
          return obs.error(new NoMatch(segmentGroup));
        });
      }

      function absoluteRedirect(newTree) {
        return new rxjs__WEBPACK_IMPORTED_MODULE_2__["Observable"](function (obs) {
          return obs.error(new AbsoluteRedirect(newTree));
        });
      }

      function namedOutletsRedirect(redirectTo) {
        return new rxjs__WEBPACK_IMPORTED_MODULE_2__["Observable"](function (obs) {
          return obs.error(new Error("Only absolute redirects can have named outlets. redirectTo: '".concat(redirectTo, "'")));
        });
      }

      function canLoadFails(route) {
        return new rxjs__WEBPACK_IMPORTED_MODULE_2__["Observable"](function (obs) {
          return obs.error(navigationCancelingError("Cannot load children because the guard of the route \"path: '".concat(route.path, "'\" returned false")));
        });
      }
      /**
       * Returns the `UrlTree` with the redirection applied.
       *
       * Lazy modules are loaded along the way.
       */


      function applyRedirects(moduleInjector, configLoader, urlSerializer, urlTree, config) {
        return new ApplyRedirects(moduleInjector, configLoader, urlSerializer, urlTree, config).apply();
      }

      var ApplyRedirects = /*#__PURE__*/function () {
        function ApplyRedirects(moduleInjector, configLoader, urlSerializer, urlTree, config) {
          _classCallCheck2(this, ApplyRedirects);

          this.configLoader = configLoader;
          this.urlSerializer = urlSerializer;
          this.urlTree = urlTree;
          this.config = config;
          this.allowRedirects = true;
          this.ngModule = moduleInjector.get(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleRef"]);
        }

        _createClass2(ApplyRedirects, [{
          key: "apply",
          value: function apply() {
            var _this953 = this;

            var splitGroup = split(this.urlTree.root, [], [], this.config).segmentGroup; // TODO(atscott): creating a new segment removes the _sourceSegment _segmentIndexShift, which is
            // only necessary to prevent failures in tests which assert exact object matches. The `split` is
            // now shared between `applyRedirects` and `recognize` but only the `recognize` step needs these
            // properties. Before the implementations were merged, the `applyRedirects` would not assign
            // them. We should be able to remove this logic as a "breaking change" but should do some more
            // investigation into the failures first.

            var rootSegmentGroup = new UrlSegmentGroup(splitGroup.segments, splitGroup.children);
            var expanded$ = this.expandSegmentGroup(this.ngModule, this.config, rootSegmentGroup, PRIMARY_OUTLET);
            var urlTrees$ = expanded$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (rootSegmentGroup) {
              return _this953.createUrlTree(squashSegmentGroup(rootSegmentGroup), _this953.urlTree.queryParams, _this953.urlTree.fragment);
            }));
            return urlTrees$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["catchError"])(function (e) {
              if (e instanceof AbsoluteRedirect) {
                // after an absolute redirect we do not apply any more redirects!
                _this953.allowRedirects = false; // we need to run matching, so we can fetch all lazy-loaded modules

                return _this953.match(e.urlTree);
              }

              if (e instanceof NoMatch) {
                throw _this953.noMatchError(e);
              }

              throw e;
            }));
          }
        }, {
          key: "match",
          value: function match(tree) {
            var _this954 = this;

            var expanded$ = this.expandSegmentGroup(this.ngModule, this.config, tree.root, PRIMARY_OUTLET);
            var mapped$ = expanded$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (rootSegmentGroup) {
              return _this954.createUrlTree(squashSegmentGroup(rootSegmentGroup), tree.queryParams, tree.fragment);
            }));
            return mapped$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["catchError"])(function (e) {
              if (e instanceof NoMatch) {
                throw _this954.noMatchError(e);
              }

              throw e;
            }));
          }
        }, {
          key: "noMatchError",
          value: function noMatchError(e) {
            return new Error("Cannot match any routes. URL Segment: '".concat(e.segmentGroup, "'"));
          }
        }, {
          key: "createUrlTree",
          value: function createUrlTree(rootCandidate, queryParams, fragment) {
            var root = rootCandidate.segments.length > 0 ? new UrlSegmentGroup([], _defineProperty({}, PRIMARY_OUTLET, rootCandidate)) : rootCandidate;
            return new UrlTree(root, queryParams, fragment);
          }
        }, {
          key: "expandSegmentGroup",
          value: function expandSegmentGroup(ngModule, routes, segmentGroup, outlet) {
            if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {
              return this.expandChildren(ngModule, routes, segmentGroup).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (children) {
                return new UrlSegmentGroup([], children);
              }));
            }

            return this.expandSegment(ngModule, segmentGroup, routes, segmentGroup.segments, outlet, true);
          } // Recursively expand segment groups for all the child outlets

        }, {
          key: "expandChildren",
          value: function expandChildren(ngModule, routes, segmentGroup) {
            var _this955 = this;

            // Expand outlets one at a time, starting with the primary outlet. We need to do it this way
            // because an absolute redirect from the primary outlet takes precedence.
            var childOutlets = [];

            for (var _i63 = 0, _Object$keys9 = Object.keys(segmentGroup.children); _i63 < _Object$keys9.length; _i63++) {
              var child = _Object$keys9[_i63];

              if (child === 'primary') {
                childOutlets.unshift(child);
              } else {
                childOutlets.push(child);
              }
            }

            return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(childOutlets).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["concatMap"])(function (childOutlet) {
              var child = segmentGroup.children[childOutlet]; // Sort the routes so routes with outlets that match the segment appear
              // first, followed by routes for other outlets, which might match if they have an
              // empty path.

              var sortedRoutes = sortByMatchingOutlets(routes, childOutlet);
              return _this955.expandSegmentGroup(ngModule, sortedRoutes, child, childOutlet).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (s) {
                return {
                  segment: s,
                  outlet: childOutlet
                };
              }));
            }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["scan"])(function (children, expandedChild) {
              children[expandedChild.outlet] = expandedChild.segment;
              return children;
            }, {}), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["last"])());
          }
        }, {
          key: "expandSegment",
          value: function expandSegment(ngModule, segmentGroup, routes, segments, outlet, allowRedirects) {
            var _this956 = this;

            return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(routes).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["concatMap"])(function (r) {
              var expanded$ = _this956.expandSegmentAgainstRoute(ngModule, segmentGroup, routes, r, segments, outlet, allowRedirects);

              return expanded$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["catchError"])(function (e) {
                if (e instanceof NoMatch) {
                  return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(null);
                }

                throw e;
              }));
            }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["first"])(function (s) {
              return !!s;
            }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["catchError"])(function (e, _) {
              if (e instanceof rxjs__WEBPACK_IMPORTED_MODULE_2__["EmptyError"] || e.name === 'EmptyError') {
                if (noLeftoversInUrl(segmentGroup, segments, outlet)) {
                  return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(new UrlSegmentGroup([], {}));
                }

                throw new NoMatch(segmentGroup);
              }

              throw e;
            }));
          }
        }, {
          key: "expandSegmentAgainstRoute",
          value: function expandSegmentAgainstRoute(ngModule, segmentGroup, routes, route, paths, outlet, allowRedirects) {
            if (!isImmediateMatch(route, segmentGroup, paths, outlet)) {
              return noMatch$1(segmentGroup);
            }

            if (route.redirectTo === undefined) {
              return this.matchSegmentAgainstRoute(ngModule, segmentGroup, route, paths, outlet);
            }

            if (allowRedirects && this.allowRedirects) {
              return this.expandSegmentAgainstRouteUsingRedirect(ngModule, segmentGroup, routes, route, paths, outlet);
            }

            return noMatch$1(segmentGroup);
          }
        }, {
          key: "expandSegmentAgainstRouteUsingRedirect",
          value: function expandSegmentAgainstRouteUsingRedirect(ngModule, segmentGroup, routes, route, segments, outlet) {
            if (route.path === '**') {
              return this.expandWildCardWithParamsAgainstRouteUsingRedirect(ngModule, routes, route, outlet);
            }

            return this.expandRegularSegmentAgainstRouteUsingRedirect(ngModule, segmentGroup, routes, route, segments, outlet);
          }
        }, {
          key: "expandWildCardWithParamsAgainstRouteUsingRedirect",
          value: function expandWildCardWithParamsAgainstRouteUsingRedirect(ngModule, routes, route, outlet) {
            var _this957 = this;

            var newTree = this.applyRedirectCommands([], route.redirectTo, {});

            if (route.redirectTo.startsWith('/')) {
              return absoluteRedirect(newTree);
            }

            return this.lineralizeSegments(route, newTree).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])(function (newSegments) {
              var group = new UrlSegmentGroup(newSegments, {});
              return _this957.expandSegment(ngModule, group, routes, newSegments, outlet, false);
            }));
          }
        }, {
          key: "expandRegularSegmentAgainstRouteUsingRedirect",
          value: function expandRegularSegmentAgainstRouteUsingRedirect(ngModule, segmentGroup, routes, route, segments, outlet) {
            var _this958 = this;

            var _match2 = match(segmentGroup, route, segments),
                matched = _match2.matched,
                consumedSegments = _match2.consumedSegments,
                lastChild = _match2.lastChild,
                positionalParamSegments = _match2.positionalParamSegments;

            if (!matched) return noMatch$1(segmentGroup);
            var newTree = this.applyRedirectCommands(consumedSegments, route.redirectTo, positionalParamSegments);

            if (route.redirectTo.startsWith('/')) {
              return absoluteRedirect(newTree);
            }

            return this.lineralizeSegments(route, newTree).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])(function (newSegments) {
              return _this958.expandSegment(ngModule, segmentGroup, routes, newSegments.concat(segments.slice(lastChild)), outlet, false);
            }));
          }
        }, {
          key: "matchSegmentAgainstRoute",
          value: function matchSegmentAgainstRoute(ngModule, rawSegmentGroup, route, segments, outlet) {
            var _this959 = this;

            if (route.path === '**') {
              if (route.loadChildren) {
                var loaded$ = route._loadedConfig ? Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(route._loadedConfig) : this.configLoader.load(ngModule.injector, route);
                return loaded$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (cfg) {
                  route._loadedConfig = cfg;
                  return new UrlSegmentGroup(segments, {});
                }));
              }

              return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(new UrlSegmentGroup(segments, {}));
            }

            var _match3 = match(rawSegmentGroup, route, segments),
                matched = _match3.matched,
                consumedSegments = _match3.consumedSegments,
                lastChild = _match3.lastChild;

            if (!matched) return noMatch$1(rawSegmentGroup);
            var rawSlicedSegments = segments.slice(lastChild);
            var childConfig$ = this.getChildConfig(ngModule, route, segments);
            return childConfig$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])(function (routerConfig) {
              var childModule = routerConfig.module;
              var childConfig = routerConfig.routes;

              var _split2 = split(rawSegmentGroup, consumedSegments, rawSlicedSegments, childConfig),
                  splitSegmentGroup = _split2.segmentGroup,
                  slicedSegments = _split2.slicedSegments; // See comment on the other call to `split` about why this is necessary.


              var segmentGroup = new UrlSegmentGroup(splitSegmentGroup.segments, splitSegmentGroup.children);

              if (slicedSegments.length === 0 && segmentGroup.hasChildren()) {
                var _expanded$ = _this959.expandChildren(childModule, childConfig, segmentGroup);

                return _expanded$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (children) {
                  return new UrlSegmentGroup(consumedSegments, children);
                }));
              }

              if (childConfig.length === 0 && slicedSegments.length === 0) {
                return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(new UrlSegmentGroup(consumedSegments, {}));
              }

              var matchedOnOutlet = getOutlet(route) === outlet;

              var expanded$ = _this959.expandSegment(childModule, segmentGroup, childConfig, slicedSegments, matchedOnOutlet ? PRIMARY_OUTLET : outlet, true);

              return expanded$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (cs) {
                return new UrlSegmentGroup(consumedSegments.concat(cs.segments), cs.children);
              }));
            }));
          }
        }, {
          key: "getChildConfig",
          value: function getChildConfig(ngModule, route, segments) {
            var _this960 = this;

            if (route.children) {
              // The children belong to the same module
              return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(new LoadedRouterConfig(route.children, ngModule));
            }

            if (route.loadChildren) {
              // lazy children belong to the loaded module
              if (route._loadedConfig !== undefined) {
                return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(route._loadedConfig);
              }

              return this.runCanLoadGuards(ngModule.injector, route, segments).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])(function (shouldLoadResult) {
                if (shouldLoadResult) {
                  return _this960.configLoader.load(ngModule.injector, route).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (cfg) {
                    route._loadedConfig = cfg;
                    return cfg;
                  }));
                }

                return canLoadFails(route);
              }));
            }

            return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(new LoadedRouterConfig([], ngModule));
          }
        }, {
          key: "runCanLoadGuards",
          value: function runCanLoadGuards(moduleInjector, route, segments) {
            var _this961 = this;

            var canLoad = route.canLoad;
            if (!canLoad || canLoad.length === 0) return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(true);
            var canLoadObservables = canLoad.map(function (injectionToken) {
              var guard = moduleInjector.get(injectionToken);
              var guardVal;

              if (isCanLoad(guard)) {
                guardVal = guard.canLoad(route, segments);
              } else if (isFunction(guard)) {
                guardVal = guard(route, segments);
              } else {
                throw new Error('Invalid CanLoad guard');
              }

              return wrapIntoObservable(guardVal);
            });
            return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(canLoadObservables).pipe(prioritizedGuardValue(), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (result) {
              if (!isUrlTree(result)) return;
              var error = navigationCancelingError("Redirecting to \"".concat(_this961.urlSerializer.serialize(result), "\""));
              error.url = result;
              throw error;
            }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (result) {
              return result === true;
            }));
          }
        }, {
          key: "lineralizeSegments",
          value: function lineralizeSegments(route, urlTree) {
            var res = [];
            var c = urlTree.root;

            while (true) {
              res = res.concat(c.segments);

              if (c.numberOfChildren === 0) {
                return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(res);
              }

              if (c.numberOfChildren > 1 || !c.children[PRIMARY_OUTLET]) {
                return namedOutletsRedirect(route.redirectTo);
              }

              c = c.children[PRIMARY_OUTLET];
            }
          }
        }, {
          key: "applyRedirectCommands",
          value: function applyRedirectCommands(segments, redirectTo, posParams) {
            return this.applyRedirectCreatreUrlTree(redirectTo, this.urlSerializer.parse(redirectTo), segments, posParams);
          }
        }, {
          key: "applyRedirectCreatreUrlTree",
          value: function applyRedirectCreatreUrlTree(redirectTo, urlTree, segments, posParams) {
            var newRoot = this.createSegmentGroup(redirectTo, urlTree.root, segments, posParams);
            return new UrlTree(newRoot, this.createQueryParams(urlTree.queryParams, this.urlTree.queryParams), urlTree.fragment);
          }
        }, {
          key: "createQueryParams",
          value: function createQueryParams(redirectToParams, actualParams) {
            var res = {};
            forEach(redirectToParams, function (v, k) {
              var copySourceValue = typeof v === 'string' && v.startsWith(':');

              if (copySourceValue) {
                var sourceName = v.substring(1);
                res[k] = actualParams[sourceName];
              } else {
                res[k] = v;
              }
            });
            return res;
          }
        }, {
          key: "createSegmentGroup",
          value: function createSegmentGroup(redirectTo, group, segments, posParams) {
            var _this962 = this;

            var updatedSegments = this.createSegments(redirectTo, group.segments, segments, posParams);
            var children = {};
            forEach(group.children, function (child, name) {
              children[name] = _this962.createSegmentGroup(redirectTo, child, segments, posParams);
            });
            return new UrlSegmentGroup(updatedSegments, children);
          }
        }, {
          key: "createSegments",
          value: function createSegments(redirectTo, redirectToSegments, actualSegments, posParams) {
            var _this963 = this;

            return redirectToSegments.map(function (s) {
              return s.path.startsWith(':') ? _this963.findPosParam(redirectTo, s, posParams) : _this963.findOrReturn(s, actualSegments);
            });
          }
        }, {
          key: "findPosParam",
          value: function findPosParam(redirectTo, redirectToUrlSegment, posParams) {
            var pos = posParams[redirectToUrlSegment.path.substring(1)];
            if (!pos) throw new Error("Cannot redirect to '".concat(redirectTo, "'. Cannot find '").concat(redirectToUrlSegment.path, "'."));
            return pos;
          }
        }, {
          key: "findOrReturn",
          value: function findOrReturn(redirectToUrlSegment, actualSegments) {
            var idx = 0;

            var _iterator109 = _createForOfIteratorHelper(actualSegments),
                _step108;

            try {
              for (_iterator109.s(); !(_step108 = _iterator109.n()).done;) {
                var s = _step108.value;

                if (s.path === redirectToUrlSegment.path) {
                  actualSegments.splice(idx);
                  return s;
                }

                idx++;
              }
            } catch (err) {
              _iterator109.e(err);
            } finally {
              _iterator109.f();
            }

            return redirectToUrlSegment;
          }
        }]);

        return ApplyRedirects;
      }();
      /**
       * When possible, merges the primary outlet child into the parent `UrlSegmentGroup`.
       *
       * When a segment group has only one child which is a primary outlet, merges that child into the
       * parent. That is, the child segment group's segments are merged into the `s` and the child's
       * children become the children of `s`. Think of this like a 'squash', merging the child segment
       * group into the parent.
       */


      function mergeTrivialChildren(s) {
        if (s.numberOfChildren === 1 && s.children[PRIMARY_OUTLET]) {
          var c = s.children[PRIMARY_OUTLET];
          return new UrlSegmentGroup(s.segments.concat(c.segments), c.children);
        }

        return s;
      }
      /**
       * Recursively merges primary segment children into their parents and also drops empty children
       * (those which have no segments and no children themselves). The latter prevents serializing a
       * group into something like `/a(aux:)`, where `aux` is an empty child segment.
       */


      function squashSegmentGroup(segmentGroup) {
        var newChildren = {};

        for (var _i64 = 0, _Object$keys10 = Object.keys(segmentGroup.children); _i64 < _Object$keys10.length; _i64++) {
          var childOutlet = _Object$keys10[_i64];
          var child = segmentGroup.children[childOutlet];
          var childCandidate = squashSegmentGroup(child); // don't add empty children

          if (childCandidate.segments.length > 0 || childCandidate.hasChildren()) {
            newChildren[childOutlet] = childCandidate;
          }
        }

        var s = new UrlSegmentGroup(segmentGroup.segments, newChildren);
        return mergeTrivialChildren(s);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function applyRedirects$1(moduleInjector, configLoader, urlSerializer, config) {
        return Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(function (t) {
          return applyRedirects(moduleInjector, configLoader, urlSerializer, t.extractedUrl, config).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (urlAfterRedirects) {
            return Object.assign(Object.assign({}, t), {
              urlAfterRedirects: urlAfterRedirects
            });
          }));
        });
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var CanActivate = function CanActivate(path) {
        _classCallCheck2(this, CanActivate);

        this.path = path;
        this.route = this.path[this.path.length - 1];
      };

      var CanDeactivate = function CanDeactivate(component, route) {
        _classCallCheck2(this, CanDeactivate);

        this.component = component;
        this.route = route;
      };

      function getAllRouteGuards(future, curr, parentContexts) {
        var futureRoot = future._root;
        var currRoot = curr ? curr._root : null;
        return getChildRouteGuards(futureRoot, currRoot, parentContexts, [futureRoot.value]);
      }

      function getCanActivateChild(p) {
        var canActivateChild = p.routeConfig ? p.routeConfig.canActivateChild : null;
        if (!canActivateChild || canActivateChild.length === 0) return null;
        return {
          node: p,
          guards: canActivateChild
        };
      }

      function getToken(token, snapshot, moduleInjector) {
        var config = getClosestLoadedConfig(snapshot);
        var injector = config ? config.module.injector : moduleInjector;
        return injector.get(token);
      }

      function getClosestLoadedConfig(snapshot) {
        if (!snapshot) return null;

        for (var s = snapshot.parent; s; s = s.parent) {
          var route = s.routeConfig;
          if (route && route._loadedConfig) return route._loadedConfig;
        }

        return null;
      }

      function getChildRouteGuards(futureNode, currNode, contexts, futurePath) {
        var checks = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {
          canDeactivateChecks: [],
          canActivateChecks: []
        };
        var prevChildren = nodeChildrenAsMap(currNode); // Process the children of the future route

        futureNode.children.forEach(function (c) {
          getRouteGuards(c, prevChildren[c.value.outlet], contexts, futurePath.concat([c.value]), checks);
          delete prevChildren[c.value.outlet];
        }); // Process any children left from the current route (not active for the future route)

        forEach(prevChildren, function (v, k) {
          return deactivateRouteAndItsChildren(v, contexts.getContext(k), checks);
        });
        return checks;
      }

      function getRouteGuards(futureNode, currNode, parentContexts, futurePath) {
        var checks = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {
          canDeactivateChecks: [],
          canActivateChecks: []
        };
        var future = futureNode.value;
        var curr = currNode ? currNode.value : null;
        var context = parentContexts ? parentContexts.getContext(futureNode.value.outlet) : null; // reusing the node

        if (curr && future.routeConfig === curr.routeConfig) {
          var shouldRun = shouldRunGuardsAndResolvers(curr, future, future.routeConfig.runGuardsAndResolvers);

          if (shouldRun) {
            checks.canActivateChecks.push(new CanActivate(futurePath));
          } else {
            // we need to set the data
            future.data = curr.data;
            future._resolvedData = curr._resolvedData;
          } // If we have a component, we need to go through an outlet.


          if (future.component) {
            getChildRouteGuards(futureNode, currNode, context ? context.children : null, futurePath, checks); // if we have a componentless route, we recurse but keep the same outlet map.
          } else {
            getChildRouteGuards(futureNode, currNode, parentContexts, futurePath, checks);
          }

          if (shouldRun && context && context.outlet && context.outlet.isActivated) {
            checks.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, curr));
          }
        } else {
          if (curr) {
            deactivateRouteAndItsChildren(currNode, context, checks);
          }

          checks.canActivateChecks.push(new CanActivate(futurePath)); // If we have a component, we need to go through an outlet.

          if (future.component) {
            getChildRouteGuards(futureNode, null, context ? context.children : null, futurePath, checks); // if we have a componentless route, we recurse but keep the same outlet map.
          } else {
            getChildRouteGuards(futureNode, null, parentContexts, futurePath, checks);
          }
        }

        return checks;
      }

      function shouldRunGuardsAndResolvers(curr, future, mode) {
        if (typeof mode === 'function') {
          return mode(curr, future);
        }

        switch (mode) {
          case 'pathParamsChange':
            return !equalPath(curr.url, future.url);

          case 'pathParamsOrQueryParamsChange':
            return !equalPath(curr.url, future.url) || !shallowEqual(curr.queryParams, future.queryParams);

          case 'always':
            return true;

          case 'paramsOrQueryParamsChange':
            return !equalParamsAndUrlSegments(curr, future) || !shallowEqual(curr.queryParams, future.queryParams);

          case 'paramsChange':
          default:
            return !equalParamsAndUrlSegments(curr, future);
        }
      }

      function deactivateRouteAndItsChildren(route, context, checks) {
        var children = nodeChildrenAsMap(route);
        var r = route.value;
        forEach(children, function (node, childName) {
          if (!r.component) {
            deactivateRouteAndItsChildren(node, context, checks);
          } else if (context) {
            deactivateRouteAndItsChildren(node, context.children.getContext(childName), checks);
          } else {
            deactivateRouteAndItsChildren(node, null, checks);
          }
        });

        if (!r.component) {
          checks.canDeactivateChecks.push(new CanDeactivate(null, r));
        } else if (context && context.outlet && context.outlet.isActivated) {
          checks.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, r));
        } else {
          checks.canDeactivateChecks.push(new CanDeactivate(null, r));
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function checkGuards(moduleInjector, forwardEvent) {
        return Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])(function (t) {
          var targetSnapshot = t.targetSnapshot,
              currentSnapshot = t.currentSnapshot,
              _t$guards = t.guards,
              canActivateChecks = _t$guards.canActivateChecks,
              canDeactivateChecks = _t$guards.canDeactivateChecks;

          if (canDeactivateChecks.length === 0 && canActivateChecks.length === 0) {
            return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(Object.assign(Object.assign({}, t), {
              guardsResult: true
            }));
          }

          return runCanDeactivateChecks(canDeactivateChecks, targetSnapshot, currentSnapshot, moduleInjector).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])(function (canDeactivate) {
            return canDeactivate && isBoolean(canDeactivate) ? runCanActivateChecks(targetSnapshot, canActivateChecks, moduleInjector, forwardEvent) : Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(canDeactivate);
          }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (guardsResult) {
            return Object.assign(Object.assign({}, t), {
              guardsResult: guardsResult
            });
          }));
        });
      }

      function runCanDeactivateChecks(checks, futureRSS, currRSS, moduleInjector) {
        return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(checks).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])(function (check) {
          return runCanDeactivate(check.component, check.route, currRSS, futureRSS, moduleInjector);
        }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["first"])(function (result) {
          return result !== true;
        }, true));
      }

      function runCanActivateChecks(futureSnapshot, checks, moduleInjector, forwardEvent) {
        return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(checks).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["concatMap"])(function (check) {
          return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["concat"])(fireChildActivationStart(check.route.parent, forwardEvent), fireActivationStart(check.route, forwardEvent), runCanActivateChild(futureSnapshot, check.path, moduleInjector), runCanActivate(futureSnapshot, check.route, moduleInjector));
        }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["first"])(function (result) {
          return result !== true;
        }, true));
      }
      /**
       * This should fire off `ActivationStart` events for each route being activated at this
       * level.
       * In other words, if you're activating `a` and `b` below, `path` will contain the
       * `ActivatedRouteSnapshot`s for both and we will fire `ActivationStart` for both. Always
       * return
       * `true` so checks continue to run.
       */


      function fireActivationStart(snapshot, forwardEvent) {
        if (snapshot !== null && forwardEvent) {
          forwardEvent(new ActivationStart(snapshot));
        }

        return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(true);
      }
      /**
       * This should fire off `ChildActivationStart` events for each route being activated at this
       * level.
       * In other words, if you're activating `a` and `b` below, `path` will contain the
       * `ActivatedRouteSnapshot`s for both and we will fire `ChildActivationStart` for both. Always
       * return
       * `true` so checks continue to run.
       */


      function fireChildActivationStart(snapshot, forwardEvent) {
        if (snapshot !== null && forwardEvent) {
          forwardEvent(new ChildActivationStart(snapshot));
        }

        return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(true);
      }

      function runCanActivate(futureRSS, futureARS, moduleInjector) {
        var canActivate = futureARS.routeConfig ? futureARS.routeConfig.canActivate : null;
        if (!canActivate || canActivate.length === 0) return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(true);
        var canActivateObservables = canActivate.map(function (c) {
          return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["defer"])(function () {
            var guard = getToken(c, futureARS, moduleInjector);
            var observable;

            if (isCanActivate(guard)) {
              observable = wrapIntoObservable(guard.canActivate(futureARS, futureRSS));
            } else if (isFunction(guard)) {
              observable = wrapIntoObservable(guard(futureARS, futureRSS));
            } else {
              throw new Error('Invalid CanActivate guard');
            }

            return observable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["first"])());
          });
        });
        return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(canActivateObservables).pipe(prioritizedGuardValue());
      }

      function runCanActivateChild(futureRSS, path, moduleInjector) {
        var futureARS = path[path.length - 1];
        var canActivateChildGuards = path.slice(0, path.length - 1).reverse().map(function (p) {
          return getCanActivateChild(p);
        }).filter(function (_) {
          return _ !== null;
        });
        var canActivateChildGuardsMapped = canActivateChildGuards.map(function (d) {
          return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["defer"])(function () {
            var guardsMapped = d.guards.map(function (c) {
              var guard = getToken(c, d.node, moduleInjector);
              var observable;

              if (isCanActivateChild(guard)) {
                observable = wrapIntoObservable(guard.canActivateChild(futureARS, futureRSS));
              } else if (isFunction(guard)) {
                observable = wrapIntoObservable(guard(futureARS, futureRSS));
              } else {
                throw new Error('Invalid CanActivateChild guard');
              }

              return observable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["first"])());
            });
            return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(guardsMapped).pipe(prioritizedGuardValue());
          });
        });
        return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(canActivateChildGuardsMapped).pipe(prioritizedGuardValue());
      }

      function runCanDeactivate(component, currARS, currRSS, futureRSS, moduleInjector) {
        var canDeactivate = currARS && currARS.routeConfig ? currARS.routeConfig.canDeactivate : null;
        if (!canDeactivate || canDeactivate.length === 0) return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(true);
        var canDeactivateObservables = canDeactivate.map(function (c) {
          var guard = getToken(c, currARS, moduleInjector);
          var observable;

          if (isCanDeactivate(guard)) {
            observable = wrapIntoObservable(guard.canDeactivate(component, currARS, currRSS, futureRSS));
          } else if (isFunction(guard)) {
            observable = wrapIntoObservable(guard(component, currARS, currRSS, futureRSS));
          } else {
            throw new Error('Invalid CanDeactivate guard');
          }

          return observable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["first"])());
        });
        return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(canDeactivateObservables).pipe(prioritizedGuardValue());
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var NoMatch$1 = function NoMatch$1() {
        _classCallCheck2(this, NoMatch$1);
      };

      function newObservableError(e) {
        // TODO(atscott): This pattern is used throughout the router code and can be `throwError` instead.
        return new rxjs__WEBPACK_IMPORTED_MODULE_2__["Observable"](function (obs) {
          return obs.error(e);
        });
      }

      function recognize(rootComponentType, config, urlTree, url) {
        var paramsInheritanceStrategy = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'emptyOnly';
        var relativeLinkResolution = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'legacy';

        try {
          var result = new Recognizer(rootComponentType, config, urlTree, url, paramsInheritanceStrategy, relativeLinkResolution).recognize();

          if (result === null) {
            return newObservableError(new NoMatch$1());
          } else {
            return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(result);
          }
        } catch (e) {
          // Catch the potential error from recognize due to duplicate outlet matches and return as an
          // `Observable` error instead.
          return newObservableError(e);
        }
      }

      var Recognizer = /*#__PURE__*/function () {
        function Recognizer(rootComponentType, config, urlTree, url, paramsInheritanceStrategy, relativeLinkResolution) {
          _classCallCheck2(this, Recognizer);

          this.rootComponentType = rootComponentType;
          this.config = config;
          this.urlTree = urlTree;
          this.url = url;
          this.paramsInheritanceStrategy = paramsInheritanceStrategy;
          this.relativeLinkResolution = relativeLinkResolution;
        }

        _createClass2(Recognizer, [{
          key: "recognize",
          value: function recognize() {
            var rootSegmentGroup = split(this.urlTree.root, [], [], this.config.filter(function (c) {
              return c.redirectTo === undefined;
            }), this.relativeLinkResolution).segmentGroup;
            var children = this.processSegmentGroup(this.config, rootSegmentGroup, PRIMARY_OUTLET);

            if (children === null) {
              return null;
            } // Use Object.freeze to prevent readers of the Router state from modifying it outside of a
            // navigation, resulting in the router being out of sync with the browser.


            var root = new ActivatedRouteSnapshot([], Object.freeze({}), Object.freeze(Object.assign({}, this.urlTree.queryParams)), this.urlTree.fragment, {}, PRIMARY_OUTLET, this.rootComponentType, null, this.urlTree.root, -1, {});
            var rootNode = new TreeNode(root, children);
            var routeState = new RouterStateSnapshot(this.url, rootNode);
            this.inheritParamsAndData(routeState._root);
            return routeState;
          }
        }, {
          key: "inheritParamsAndData",
          value: function inheritParamsAndData(routeNode) {
            var _this964 = this;

            var route = routeNode.value;
            var i = inheritedParamsDataResolve(route, this.paramsInheritanceStrategy);
            route.params = Object.freeze(i.params);
            route.data = Object.freeze(i.data);
            routeNode.children.forEach(function (n) {
              return _this964.inheritParamsAndData(n);
            });
          }
        }, {
          key: "processSegmentGroup",
          value: function processSegmentGroup(config, segmentGroup, outlet) {
            if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {
              return this.processChildren(config, segmentGroup);
            }

            return this.processSegment(config, segmentGroup, segmentGroup.segments, outlet);
          }
          /**
           * Matches every child outlet in the `segmentGroup` to a `Route` in the config. Returns `null` if
           * we cannot find a match for _any_ of the children.
           *
           * @param config - The `Routes` to match against
           * @param segmentGroup - The `UrlSegmentGroup` whose children need to be matched against the
           *     config.
           */

        }, {
          key: "processChildren",
          value: function processChildren(config, segmentGroup) {
            var children = [];

            for (var _i65 = 0, _Object$keys11 = Object.keys(segmentGroup.children); _i65 < _Object$keys11.length; _i65++) {
              var childOutlet = _Object$keys11[_i65];
              var child = segmentGroup.children[childOutlet]; // Sort the config so that routes with outlets that match the one being activated appear
              // first, followed by routes for other outlets, which might match if they have an empty path.

              var sortedConfig = sortByMatchingOutlets(config, childOutlet);
              var outletChildren = this.processSegmentGroup(sortedConfig, child, childOutlet);

              if (outletChildren === null) {
                // Configs must match all segment children so because we did not find a match for this
                // outlet, return `null`.
                return null;
              }

              children.push.apply(children, _toConsumableArray(outletChildren));
            } // Because we may have matched two outlets to the same empty path segment, we can have multiple
            // activated results for the same outlet. We should merge the children of these results so the
            // final return value is only one `TreeNode` per outlet.


            var mergedChildren = mergeEmptyPathMatches(children);

            if (typeof ngDevMode === 'undefined' || ngDevMode) {
              // This should really never happen - we are only taking the first match for each outlet and
              // merge the empty path matches.
              checkOutletNameUniqueness(mergedChildren);
            }

            sortActivatedRouteSnapshots(mergedChildren);
            return mergedChildren;
          }
        }, {
          key: "processSegment",
          value: function processSegment(config, segmentGroup, segments, outlet) {
            var _iterator110 = _createForOfIteratorHelper(config),
                _step109;

            try {
              for (_iterator110.s(); !(_step109 = _iterator110.n()).done;) {
                var r = _step109.value;
                var children = this.processSegmentAgainstRoute(r, segmentGroup, segments, outlet);

                if (children !== null) {
                  return children;
                }
              }
            } catch (err) {
              _iterator110.e(err);
            } finally {
              _iterator110.f();
            }

            if (noLeftoversInUrl(segmentGroup, segments, outlet)) {
              return [];
            }

            return null;
          }
        }, {
          key: "processSegmentAgainstRoute",
          value: function processSegmentAgainstRoute(route, rawSegment, segments, outlet) {
            if (route.redirectTo || !isImmediateMatch(route, rawSegment, segments, outlet)) return null;
            var snapshot;
            var consumedSegments = [];
            var rawSlicedSegments = [];

            if (route.path === '**') {
              var params = segments.length > 0 ? last(segments).parameters : {};
              snapshot = new ActivatedRouteSnapshot(segments, params, Object.freeze(Object.assign({}, this.urlTree.queryParams)), this.urlTree.fragment, getData(route), getOutlet(route), route.component, route, getSourceSegmentGroup(rawSegment), getPathIndexShift(rawSegment) + segments.length, getResolve(route));
            } else {
              var result = match(rawSegment, route, segments);

              if (!result.matched) {
                return null;
              }

              consumedSegments = result.consumedSegments;
              rawSlicedSegments = segments.slice(result.lastChild);
              snapshot = new ActivatedRouteSnapshot(consumedSegments, result.parameters, Object.freeze(Object.assign({}, this.urlTree.queryParams)), this.urlTree.fragment, getData(route), getOutlet(route), route.component, route, getSourceSegmentGroup(rawSegment), getPathIndexShift(rawSegment) + consumedSegments.length, getResolve(route));
            }

            var childConfig = getChildConfig(route);

            var _split3 = split(rawSegment, consumedSegments, rawSlicedSegments, // Filter out routes with redirectTo because we are trying to create activated route
            // snapshots and don't handle redirects here. That should have been done in
            // `applyRedirects`.
            childConfig.filter(function (c) {
              return c.redirectTo === undefined;
            }), this.relativeLinkResolution),
                segmentGroup = _split3.segmentGroup,
                slicedSegments = _split3.slicedSegments;

            if (slicedSegments.length === 0 && segmentGroup.hasChildren()) {
              var _children3 = this.processChildren(childConfig, segmentGroup);

              if (_children3 === null) {
                return null;
              }

              return [new TreeNode(snapshot, _children3)];
            }

            if (childConfig.length === 0 && slicedSegments.length === 0) {
              return [new TreeNode(snapshot, [])];
            }

            var matchedOnOutlet = getOutlet(route) === outlet; // If we matched a config due to empty path match on a different outlet, we need to continue
            // passing the current outlet for the segment rather than switch to PRIMARY.
            // Note that we switch to primary when we have a match because outlet configs look like this:
            // {path: 'a', outlet: 'a', children: [
            //  {path: 'b', component: B},
            //  {path: 'c', component: C},
            // ]}
            // Notice that the children of the named outlet are configured with the primary outlet

            var children = this.processSegment(childConfig, segmentGroup, slicedSegments, matchedOnOutlet ? PRIMARY_OUTLET : outlet);

            if (children === null) {
              return null;
            }

            return [new TreeNode(snapshot, children)];
          }
        }]);

        return Recognizer;
      }();

      function sortActivatedRouteSnapshots(nodes) {
        nodes.sort(function (a, b) {
          if (a.value.outlet === PRIMARY_OUTLET) return -1;
          if (b.value.outlet === PRIMARY_OUTLET) return 1;
          return a.value.outlet.localeCompare(b.value.outlet);
        });
      }

      function getChildConfig(route) {
        if (route.children) {
          return route.children;
        }

        if (route.loadChildren) {
          return route._loadedConfig.routes;
        }

        return [];
      }

      function hasEmptyPathConfig(node) {
        var config = node.value.routeConfig;
        return config && config.path === '' && config.redirectTo === undefined;
      }
      /**
       * Finds `TreeNode`s with matching empty path route configs and merges them into `TreeNode` with the
       * children from each duplicate. This is necessary because different outlets can match a single
       * empty path route config and the results need to then be merged.
       */


      function mergeEmptyPathMatches(nodes) {
        var result = [];

        var _iterator111 = _createForOfIteratorHelper(nodes),
            _step110;

        try {
          var _loop15 = function _loop15() {
            var node = _step110.value;

            if (!hasEmptyPathConfig(node)) {
              result.push(node);
              return "continue";
            }

            var duplicateEmptyPathNode = result.find(function (resultNode) {
              return node.value.routeConfig === resultNode.value.routeConfig;
            });

            if (duplicateEmptyPathNode !== undefined) {
              var _duplicateEmptyPathNo;

              (_duplicateEmptyPathNo = duplicateEmptyPathNode.children).push.apply(_duplicateEmptyPathNo, _toConsumableArray(node.children));
            } else {
              result.push(node);
            }
          };

          for (_iterator111.s(); !(_step110 = _iterator111.n()).done;) {
            var _ret2 = _loop15();

            if (_ret2 === "continue") continue;
          }
        } catch (err) {
          _iterator111.e(err);
        } finally {
          _iterator111.f();
        }

        return result;
      }

      function checkOutletNameUniqueness(nodes) {
        var names = {};
        nodes.forEach(function (n) {
          var routeWithSameOutletName = names[n.value.outlet];

          if (routeWithSameOutletName) {
            var p = routeWithSameOutletName.url.map(function (s) {
              return s.toString();
            }).join('/');
            var c = n.value.url.map(function (s) {
              return s.toString();
            }).join('/');
            throw new Error("Two segments cannot have the same outlet name: '".concat(p, "' and '").concat(c, "'."));
          }

          names[n.value.outlet] = n.value;
        });
      }

      function getSourceSegmentGroup(segmentGroup) {
        var s = segmentGroup;

        while (s._sourceSegment) {
          s = s._sourceSegment;
        }

        return s;
      }

      function getPathIndexShift(segmentGroup) {
        var s = segmentGroup;
        var res = s._segmentIndexShift ? s._segmentIndexShift : 0;

        while (s._sourceSegment) {
          s = s._sourceSegment;
          res += s._segmentIndexShift ? s._segmentIndexShift : 0;
        }

        return res - 1;
      }

      function getData(route) {
        return route.data || {};
      }

      function getResolve(route) {
        return route.resolve || {};
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function recognize$1(rootComponentType, config, serializer, paramsInheritanceStrategy, relativeLinkResolution) {
        return Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])(function (t) {
          return recognize(rootComponentType, config, t.urlAfterRedirects, serializer(t.urlAfterRedirects), paramsInheritanceStrategy, relativeLinkResolution).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (targetSnapshot) {
            return Object.assign(Object.assign({}, t), {
              targetSnapshot: targetSnapshot
            });
          }));
        });
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function resolveData(paramsInheritanceStrategy, moduleInjector) {
        return Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])(function (t) {
          var targetSnapshot = t.targetSnapshot,
              canActivateChecks = t.guards.canActivateChecks;

          if (!canActivateChecks.length) {
            return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(t);
          }

          var canActivateChecksResolved = 0;
          return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(canActivateChecks).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["concatMap"])(function (check) {
            return runResolve(check.route, targetSnapshot, paramsInheritanceStrategy, moduleInjector);
          }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function () {
            return canActivateChecksResolved++;
          }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeLast"])(1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])(function (_) {
            return canActivateChecksResolved === canActivateChecks.length ? Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(t) : rxjs__WEBPACK_IMPORTED_MODULE_2__["EMPTY"];
          }));
        });
      }

      function runResolve(futureARS, futureRSS, paramsInheritanceStrategy, moduleInjector) {
        var resolve = futureARS._resolve;
        return resolveNode(resolve, futureARS, futureRSS, moduleInjector).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (resolvedData) {
          futureARS._resolvedData = resolvedData;
          futureARS.data = Object.assign(Object.assign({}, futureARS.data), inheritedParamsDataResolve(futureARS, paramsInheritanceStrategy).resolve);
          return null;
        }));
      }

      function resolveNode(resolve, futureARS, futureRSS, moduleInjector) {
        var keys = Object.keys(resolve);

        if (keys.length === 0) {
          return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])({});
        }

        var data = {};
        return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(keys).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])(function (key) {
          return getResolver(resolve[key], futureARS, futureRSS, moduleInjector).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (value) {
            data[key] = value;
          }));
        }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeLast"])(1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])(function () {
          // Ensure all resolvers returned values, otherwise don't emit any "next" and just complete
          // the chain which will cancel navigation
          if (Object.keys(data).length === keys.length) {
            return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(data);
          }

          return rxjs__WEBPACK_IMPORTED_MODULE_2__["EMPTY"];
        }));
      }

      function getResolver(injectionToken, futureARS, futureRSS, moduleInjector) {
        var resolver = getToken(injectionToken, futureARS, moduleInjector);
        return resolver.resolve ? wrapIntoObservable(resolver.resolve(futureARS, futureRSS)) : wrapIntoObservable(resolver(futureARS, futureRSS));
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Perform a side effect through a switchMap for every emission on the source Observable,
       * but return an Observable that is identical to the source. It's essentially the same as
       * the `tap` operator, but if the side effectful `next` function returns an ObservableInput,
       * it will wait before continuing with the original value.
       */


      function switchTap(next) {
        return Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(function (v) {
          var nextResult = next(v);

          if (nextResult) {
            return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(nextResult).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function () {
              return v;
            }));
          }

          return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(v);
        });
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @description
       *
       * Provides a way to customize when activated routes get reused.
       *
       * @publicApi
       */


      var RouteReuseStrategy = function RouteReuseStrategy() {
        _classCallCheck2(this, RouteReuseStrategy);
      };
      /**
       * @description
       *
       * This base route reuse strategy only reuses routes when the matched router configs are
       * identical. This prevents components from being destroyed and recreated
       * when just the fragment or query parameters change
       * (that is, the existing component is _reused_).
       *
       * This strategy does not store any routes for later reuse.
       *
       * Angular uses this strategy by default.
       *
       *
       * It can be used as a base class for custom route reuse strategies, i.e. you can create your own
       * class that extends the `BaseRouteReuseStrategy` one.
       * @publicApi
       */


      var BaseRouteReuseStrategy = /*#__PURE__*/function () {
        function BaseRouteReuseStrategy() {
          _classCallCheck2(this, BaseRouteReuseStrategy);
        }

        _createClass2(BaseRouteReuseStrategy, [{
          key: "shouldDetach",
          value:
          /**
           * Whether the given route should detach for later reuse.
           * Always returns false for `BaseRouteReuseStrategy`.
           * */
          function shouldDetach(route) {
            return false;
          }
          /**
           * A no-op; the route is never stored since this strategy never detaches routes for later re-use.
           */

        }, {
          key: "store",
          value: function store(route, detachedTree) {}
          /** Returns `false`, meaning the route (and its subtree) is never reattached */

        }, {
          key: "shouldAttach",
          value: function shouldAttach(route) {
            return false;
          }
          /** Returns `null` because this strategy does not store routes for later re-use. */

        }, {
          key: "retrieve",
          value: function retrieve(route) {
            return null;
          }
          /**
           * Determines if a route should be reused.
           * This strategy returns `true` when the future route config and current route config are
           * identical.
           */

        }, {
          key: "shouldReuseRoute",
          value: function shouldReuseRoute(future, curr) {
            return future.routeConfig === curr.routeConfig;
          }
        }]);

        return BaseRouteReuseStrategy;
      }();

      var DefaultRouteReuseStrategy = /*#__PURE__*/function (_BaseRouteReuseStrate) {
        _inherits2(DefaultRouteReuseStrategy, _BaseRouteReuseStrate);

        var _super388 = _createSuper(DefaultRouteReuseStrategy);

        function DefaultRouteReuseStrategy() {
          _classCallCheck2(this, DefaultRouteReuseStrategy);

          return _super388.apply(this, arguments);
        }

        return DefaultRouteReuseStrategy;
      }(BaseRouteReuseStrategy);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * The [DI token](guide/glossary/#di-token) for a router configuration.
       * @see `ROUTES`
       * @publicApi
       */


      var ROUTES = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('ROUTES');

      var RouterConfigLoader = /*#__PURE__*/function () {
        function RouterConfigLoader(loader, compiler, onLoadStartListener, onLoadEndListener) {
          _classCallCheck2(this, RouterConfigLoader);

          this.loader = loader;
          this.compiler = compiler;
          this.onLoadStartListener = onLoadStartListener;
          this.onLoadEndListener = onLoadEndListener;
        }

        _createClass2(RouterConfigLoader, [{
          key: "load",
          value: function load(parentInjector, route) {
            var _this965 = this;

            if (route._loader$) {
              return route._loader$;
            }

            if (this.onLoadStartListener) {
              this.onLoadStartListener(route);
            }

            var moduleFactory$ = this.loadModuleFactory(route.loadChildren);
            var loadRunner = moduleFactory$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (factory) {
              if (_this965.onLoadEndListener) {
                _this965.onLoadEndListener(route);
              }

              var module = factory.create(parentInjector); // When loading a module that doesn't provide `RouterModule.forChild()` preloader
              // will get stuck in an infinite loop. The child module's Injector will look to
              // its parent `Injector` when it doesn't find any ROUTES so it will return routes
              // for it's parent module instead.

              return new LoadedRouterConfig(flatten(module.injector.get(ROUTES, undefined, _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectFlags"].Self | _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectFlags"].Optional)).map(standardizeConfig), module);
            }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["catchError"])(function (err) {
              route._loader$ = undefined;
              throw err;
            })); // Use custom ConnectableObservable as share in runners pipe increasing the bundle size too much

            route._loader$ = new rxjs__WEBPACK_IMPORTED_MODULE_2__["ConnectableObservable"](loadRunner, function () {
              return new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
            }).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["refCount"])());
            return route._loader$;
          }
        }, {
          key: "loadModuleFactory",
          value: function loadModuleFactory(loadChildren) {
            var _this966 = this;

            if (typeof loadChildren === 'string') {
              return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(this.loader.load(loadChildren));
            } else {
              return wrapIntoObservable(loadChildren()).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])(function (t) {
                if (t instanceof _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleFactory"]) {
                  return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(t);
                } else {
                  return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(_this966.compiler.compileModuleAsync(t));
                }
              }));
            }
          }
        }]);

        return RouterConfigLoader;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Store contextual information about a `RouterOutlet`
       *
       * @publicApi
       */


      var OutletContext = function OutletContext() {
        _classCallCheck2(this, OutletContext);

        this.outlet = null;
        this.route = null;
        this.resolver = null;
        this.children = new ChildrenOutletContexts();
        this.attachRef = null;
      };
      /**
       * Store contextual information about the children (= nested) `RouterOutlet`
       *
       * @publicApi
       */


      var ChildrenOutletContexts = /*#__PURE__*/function () {
        function ChildrenOutletContexts() {
          _classCallCheck2(this, ChildrenOutletContexts);

          // contexts for child outlets, by name.
          this.contexts = new Map();
        }
        /** Called when a `RouterOutlet` directive is instantiated */


        _createClass2(ChildrenOutletContexts, [{
          key: "onChildOutletCreated",
          value: function onChildOutletCreated(childName, outlet) {
            var context = this.getOrCreateContext(childName);
            context.outlet = outlet;
            this.contexts.set(childName, context);
          }
          /**
           * Called when a `RouterOutlet` directive is destroyed.
           * We need to keep the context as the outlet could be destroyed inside a NgIf and might be
           * re-created later.
           */

        }, {
          key: "onChildOutletDestroyed",
          value: function onChildOutletDestroyed(childName) {
            var context = this.getContext(childName);

            if (context) {
              context.outlet = null;
            }
          }
          /**
           * Called when the corresponding route is deactivated during navigation.
           * Because the component get destroyed, all children outlet are destroyed.
           */

        }, {
          key: "onOutletDeactivated",
          value: function onOutletDeactivated() {
            var contexts = this.contexts;
            this.contexts = new Map();
            return contexts;
          }
        }, {
          key: "onOutletReAttached",
          value: function onOutletReAttached(contexts) {
            this.contexts = contexts;
          }
        }, {
          key: "getOrCreateContext",
          value: function getOrCreateContext(childName) {
            var context = this.getContext(childName);

            if (!context) {
              context = new OutletContext();
              this.contexts.set(childName, context);
            }

            return context;
          }
        }, {
          key: "getContext",
          value: function getContext(childName) {
            return this.contexts.get(childName) || null;
          }
        }]);

        return ChildrenOutletContexts;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @description
       *
       * Provides a way to migrate AngularJS applications to Angular.
       *
       * @publicApi
       */


      var UrlHandlingStrategy = function UrlHandlingStrategy() {
        _classCallCheck2(this, UrlHandlingStrategy);
      };
      /**
       * @publicApi
       */


      var DefaultUrlHandlingStrategy = /*#__PURE__*/function () {
        function DefaultUrlHandlingStrategy() {
          _classCallCheck2(this, DefaultUrlHandlingStrategy);
        }

        _createClass2(DefaultUrlHandlingStrategy, [{
          key: "shouldProcessUrl",
          value: function shouldProcessUrl(url) {
            return true;
          }
        }, {
          key: "extract",
          value: function extract(url) {
            return url;
          }
        }, {
          key: "merge",
          value: function merge(newUrlPart, wholeUrl) {
            return newUrlPart;
          }
        }]);

        return DefaultUrlHandlingStrategy;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function defaultErrorHandler(error) {
        throw error;
      }

      function defaultMalformedUriErrorHandler(error, urlSerializer, url) {
        return urlSerializer.parse('/');
      }
      /**
       * @internal
       */


      function defaultRouterHook(snapshot, runExtras) {
        return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(null);
      }
      /**
       * @description
       *
       * A service that provides navigation among views and URL manipulation capabilities.
       *
       * @see `Route`.
       * @see [Routing and Navigation Guide](guide/router).
       *
       * @ngModule RouterModule
       *
       * @publicApi
       */


      var Router = /*#__PURE__*/function () {
        /**
         * Creates the router service.
         */
        // TODO: vsavkin make internal after the final is out.
        function Router(rootComponentType, urlSerializer, rootContexts, location, injector, loader, compiler, config) {
          var _this967 = this;

          _classCallCheck2(this, Router);

          this.rootComponentType = rootComponentType;
          this.urlSerializer = urlSerializer;
          this.rootContexts = rootContexts;
          this.location = location;
          this.config = config;
          this.lastSuccessfulNavigation = null;
          this.currentNavigation = null;
          this.disposed = false;
          /**
           * Tracks the previously seen location change from the location subscription so we can compare
           * the two latest to see if they are duplicates. See setUpLocationChangeListener.
           */

          this.lastLocationChangeInfo = null;
          this.navigationId = 0;
          this.isNgZoneEnabled = false;
          /**
           * An event stream for routing events in this NgModule.
           */

          this.events = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          /**
           * A handler for navigation errors in this NgModule.
           */

          this.errorHandler = defaultErrorHandler;
          /**
           * A handler for errors thrown by `Router.parseUrl(url)`
           * when `url` contains an invalid character.
           * The most common case is a `%` sign
           * that's not encoded and is not part of a percent encoded sequence.
           */

          this.malformedUriErrorHandler = defaultMalformedUriErrorHandler;
          /**
           * True if at least one navigation event has occurred,
           * false otherwise.
           */

          this.navigated = false;
          this.lastSuccessfulId = -1;
          /**
           * Hooks that enable you to pause navigation,
           * either before or after the preactivation phase.
           * Used by `RouterModule`.
           *
           * @internal
           */

          this.hooks = {
            beforePreactivation: defaultRouterHook,
            afterPreactivation: defaultRouterHook
          };
          /**
           * A strategy for extracting and merging URLs.
           * Used for AngularJS to Angular migrations.
           */

          this.urlHandlingStrategy = new DefaultUrlHandlingStrategy();
          /**
           * A strategy for re-using routes.
           */

          this.routeReuseStrategy = new DefaultRouteReuseStrategy();
          /**
           * How to handle a navigation request to the current URL. One of:
           * - `'ignore'` :  The router ignores the request.
           * - `'reload'` : The router reloads the URL. Use to implement a "refresh" feature.
           */

          this.onSameUrlNavigation = 'ignore';
          /**
           * How to merge parameters, data, and resolved data from parent to child
           * routes. One of:
           *
           * - `'emptyOnly'` : Inherit parent parameters, data, and resolved data
           * for path-less or component-less routes.
           * - `'always'` : Inherit parent parameters, data, and resolved data
           * for all child routes.
           */

          this.paramsInheritanceStrategy = 'emptyOnly';
          /**
           * Determines when the router updates the browser URL.
           * By default (`"deferred"`), updates the browser URL after navigation has finished.
           * Set to `'eager'` to update the browser URL at the beginning of navigation.
           * You can choose to update early so that, if navigation fails,
           * you can show an error message with the URL that failed.
           */

          this.urlUpdateStrategy = 'deferred';
          /**
           * Enables a bug fix that corrects relative link resolution in components with empty paths.
           * @see `RouterModule`
           */

          this.relativeLinkResolution = 'corrected';

          var onLoadStart = function onLoadStart(r) {
            return _this967.triggerEvent(new RouteConfigLoadStart(r));
          };

          var onLoadEnd = function onLoadEnd(r) {
            return _this967.triggerEvent(new RouteConfigLoadEnd(r));
          };

          this.ngModule = injector.get(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleRef"]);
          this.console = injector.get(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵConsole"]);
          var ngZone = injector.get(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]);
          this.isNgZoneEnabled = ngZone instanceof _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"] && _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"].isInAngularZone();
          this.resetConfig(config);
          this.currentUrlTree = createEmptyUrlTree();
          this.rawUrlTree = this.currentUrlTree;
          this.browserUrlTree = this.currentUrlTree;
          this.configLoader = new RouterConfigLoader(loader, compiler, onLoadStart, onLoadEnd);
          this.routerState = createEmptyState(this.currentUrlTree, this.rootComponentType);
          this.transitions = new rxjs__WEBPACK_IMPORTED_MODULE_2__["BehaviorSubject"]({
            id: 0,
            currentUrlTree: this.currentUrlTree,
            currentRawUrl: this.currentUrlTree,
            extractedUrl: this.urlHandlingStrategy.extract(this.currentUrlTree),
            urlAfterRedirects: this.urlHandlingStrategy.extract(this.currentUrlTree),
            rawUrl: this.currentUrlTree,
            extras: {},
            resolve: null,
            reject: null,
            promise: Promise.resolve(true),
            source: 'imperative',
            restoredState: null,
            currentSnapshot: this.routerState.snapshot,
            targetSnapshot: null,
            currentRouterState: this.routerState,
            targetRouterState: null,
            guards: {
              canActivateChecks: [],
              canDeactivateChecks: []
            },
            guardsResult: null
          });
          this.navigations = this.setupNavigations(this.transitions);
          this.processNavigations();
        }

        _createClass2(Router, [{
          key: "setupNavigations",
          value: function setupNavigations(transitions) {
            var _this968 = this;

            var eventsSubject = this.events;
            return transitions.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(function (t) {
              return t.id !== 0;
            }), // Extract URL
            Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (t) {
              return Object.assign(Object.assign({}, t), {
                extractedUrl: _this968.urlHandlingStrategy.extract(t.rawUrl)
              });
            }), // Using switchMap so we cancel executing navigations when a new one comes in
            Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(function (t) {
              var completed = false;
              var errored = false;
              return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(t).pipe( // Store the Navigation object
              Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (t) {
                _this968.currentNavigation = {
                  id: t.id,
                  initialUrl: t.currentRawUrl,
                  extractedUrl: t.extractedUrl,
                  trigger: t.source,
                  extras: t.extras,
                  previousNavigation: _this968.lastSuccessfulNavigation ? Object.assign(Object.assign({}, _this968.lastSuccessfulNavigation), {
                    previousNavigation: null
                  }) : null
                };
              }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(function (t) {
                var urlTransition = !_this968.navigated || t.extractedUrl.toString() !== _this968.browserUrlTree.toString();

                var processCurrentUrl = (_this968.onSameUrlNavigation === 'reload' ? true : urlTransition) && _this968.urlHandlingStrategy.shouldProcessUrl(t.rawUrl);

                if (processCurrentUrl) {
                  return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(t).pipe( // Fire NavigationStart event
                  Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(function (t) {
                    var transition = _this968.transitions.getValue();

                    eventsSubject.next(new NavigationStart(t.id, _this968.serializeUrl(t.extractedUrl), t.source, t.restoredState));

                    if (transition !== _this968.transitions.getValue()) {
                      return rxjs__WEBPACK_IMPORTED_MODULE_2__["EMPTY"];
                    } // This delay is required to match old behavior that forced
                    // navigation to always be async


                    return Promise.resolve(t);
                  }), // ApplyRedirects
                  applyRedirects$1(_this968.ngModule.injector, _this968.configLoader, _this968.urlSerializer, _this968.config), // Update the currentNavigation
                  Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (t) {
                    _this968.currentNavigation = Object.assign(Object.assign({}, _this968.currentNavigation), {
                      finalUrl: t.urlAfterRedirects
                    });
                  }), // Recognize
                  recognize$1(_this968.rootComponentType, _this968.config, function (url) {
                    return _this968.serializeUrl(url);
                  }, _this968.paramsInheritanceStrategy, _this968.relativeLinkResolution), // Update URL if in `eager` update mode
                  Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (t) {
                    if (_this968.urlUpdateStrategy === 'eager') {
                      if (!t.extras.skipLocationChange) {
                        _this968.setBrowserUrl(t.urlAfterRedirects, !!t.extras.replaceUrl, t.id, t.extras.state);
                      }

                      _this968.browserUrlTree = t.urlAfterRedirects;
                    } // Fire RoutesRecognized


                    var routesRecognized = new RoutesRecognized(t.id, _this968.serializeUrl(t.extractedUrl), _this968.serializeUrl(t.urlAfterRedirects), t.targetSnapshot);
                    eventsSubject.next(routesRecognized);
                  }));
                } else {
                  var processPreviousUrl = urlTransition && _this968.rawUrlTree && _this968.urlHandlingStrategy.shouldProcessUrl(_this968.rawUrlTree);
                  /* When the current URL shouldn't be processed, but the previous one was,
                   * we handle this "error condition" by navigating to the previously
                   * successful URL, but leaving the URL intact.*/


                  if (processPreviousUrl) {
                    var id = t.id,
                        extractedUrl = t.extractedUrl,
                        source = t.source,
                        restoredState = t.restoredState,
                        extras = t.extras;
                    var navStart = new NavigationStart(id, _this968.serializeUrl(extractedUrl), source, restoredState);
                    eventsSubject.next(navStart);
                    var targetSnapshot = createEmptyState(extractedUrl, _this968.rootComponentType).snapshot;
                    return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(Object.assign(Object.assign({}, t), {
                      targetSnapshot: targetSnapshot,
                      urlAfterRedirects: extractedUrl,
                      extras: Object.assign(Object.assign({}, extras), {
                        skipLocationChange: false,
                        replaceUrl: false
                      })
                    }));
                  } else {
                    /* When neither the current or previous URL can be processed, do nothing
                     * other than update router's internal reference to the current "settled"
                     * URL. This way the next navigation will be coming from the current URL
                     * in the browser.
                     */
                    _this968.rawUrlTree = t.rawUrl;
                    _this968.browserUrlTree = t.urlAfterRedirects;
                    t.resolve(null);
                    return rxjs__WEBPACK_IMPORTED_MODULE_2__["EMPTY"];
                  }
                }
              }), // Before Preactivation
              switchTap(function (t) {
                var targetSnapshot = t.targetSnapshot,
                    navigationId = t.id,
                    appliedUrlTree = t.extractedUrl,
                    rawUrlTree = t.rawUrl,
                    _t$extras = t.extras,
                    skipLocationChange = _t$extras.skipLocationChange,
                    replaceUrl = _t$extras.replaceUrl;
                return _this968.hooks.beforePreactivation(targetSnapshot, {
                  navigationId: navigationId,
                  appliedUrlTree: appliedUrlTree,
                  rawUrlTree: rawUrlTree,
                  skipLocationChange: !!skipLocationChange,
                  replaceUrl: !!replaceUrl
                });
              }), // --- GUARDS ---
              Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (t) {
                var guardsStart = new GuardsCheckStart(t.id, _this968.serializeUrl(t.extractedUrl), _this968.serializeUrl(t.urlAfterRedirects), t.targetSnapshot);

                _this968.triggerEvent(guardsStart);
              }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (t) {
                return Object.assign(Object.assign({}, t), {
                  guards: getAllRouteGuards(t.targetSnapshot, t.currentSnapshot, _this968.rootContexts)
                });
              }), checkGuards(_this968.ngModule.injector, function (evt) {
                return _this968.triggerEvent(evt);
              }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (t) {
                if (isUrlTree(t.guardsResult)) {
                  var error = navigationCancelingError("Redirecting to \"".concat(_this968.serializeUrl(t.guardsResult), "\""));
                  error.url = t.guardsResult;
                  throw error;
                }

                var guardsEnd = new GuardsCheckEnd(t.id, _this968.serializeUrl(t.extractedUrl), _this968.serializeUrl(t.urlAfterRedirects), t.targetSnapshot, !!t.guardsResult);

                _this968.triggerEvent(guardsEnd);
              }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(function (t) {
                if (!t.guardsResult) {
                  _this968.resetUrlToCurrentUrlTree();

                  var navCancel = new NavigationCancel(t.id, _this968.serializeUrl(t.extractedUrl), '');
                  eventsSubject.next(navCancel);
                  t.resolve(false);
                  return false;
                }

                return true;
              }), // --- RESOLVE ---
              switchTap(function (t) {
                if (t.guards.canActivateChecks.length) {
                  return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(t).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (t) {
                    var resolveStart = new ResolveStart(t.id, _this968.serializeUrl(t.extractedUrl), _this968.serializeUrl(t.urlAfterRedirects), t.targetSnapshot);

                    _this968.triggerEvent(resolveStart);
                  }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(function (t) {
                    var dataResolved = false;
                    return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(t).pipe(resolveData(_this968.paramsInheritanceStrategy, _this968.ngModule.injector), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])({
                      next: function next() {
                        return dataResolved = true;
                      },
                      complete: function complete() {
                        if (!dataResolved) {
                          var navCancel = new NavigationCancel(t.id, _this968.serializeUrl(t.extractedUrl), "At least one route resolver didn't emit any value.");
                          eventsSubject.next(navCancel);
                          t.resolve(false);
                        }
                      }
                    }));
                  }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (t) {
                    var resolveEnd = new ResolveEnd(t.id, _this968.serializeUrl(t.extractedUrl), _this968.serializeUrl(t.urlAfterRedirects), t.targetSnapshot);

                    _this968.triggerEvent(resolveEnd);
                  }));
                }

                return undefined;
              }), // --- AFTER PREACTIVATION ---
              switchTap(function (t) {
                var targetSnapshot = t.targetSnapshot,
                    navigationId = t.id,
                    appliedUrlTree = t.extractedUrl,
                    rawUrlTree = t.rawUrl,
                    _t$extras2 = t.extras,
                    skipLocationChange = _t$extras2.skipLocationChange,
                    replaceUrl = _t$extras2.replaceUrl;
                return _this968.hooks.afterPreactivation(targetSnapshot, {
                  navigationId: navigationId,
                  appliedUrlTree: appliedUrlTree,
                  rawUrlTree: rawUrlTree,
                  skipLocationChange: !!skipLocationChange,
                  replaceUrl: !!replaceUrl
                });
              }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (t) {
                var targetRouterState = createRouterState(_this968.routeReuseStrategy, t.targetSnapshot, t.currentRouterState);
                return Object.assign(Object.assign({}, t), {
                  targetRouterState: targetRouterState
                });
              }),
              /* Once here, we are about to activate syncronously. The assumption is this
                 will succeed, and user code may read from the Router service. Therefore
                 before activation, we need to update router properties storing the current
                 URL and the RouterState, as well as updated the browser URL. All this should
                 happen *before* activating. */
              Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (t) {
                _this968.currentUrlTree = t.urlAfterRedirects;
                _this968.rawUrlTree = _this968.urlHandlingStrategy.merge(_this968.currentUrlTree, t.rawUrl);
                _this968.routerState = t.targetRouterState;

                if (_this968.urlUpdateStrategy === 'deferred') {
                  if (!t.extras.skipLocationChange) {
                    _this968.setBrowserUrl(_this968.rawUrlTree, !!t.extras.replaceUrl, t.id, t.extras.state);
                  }

                  _this968.browserUrlTree = t.urlAfterRedirects;
                }
              }), activateRoutes(_this968.rootContexts, _this968.routeReuseStrategy, function (evt) {
                return _this968.triggerEvent(evt);
              }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])({
                next: function next() {
                  completed = true;
                },
                complete: function complete() {
                  completed = true;
                }
              }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["finalize"])(function () {
                /* When the navigation stream finishes either through error or success, we
                 * set the `completed` or `errored` flag. However, there are some situations
                 * where we could get here without either of those being set. For instance, a
                 * redirect during NavigationStart. Therefore, this is a catch-all to make
                 * sure the NavigationCancel
                 * event is fired when a navigation gets cancelled but not caught by other
                 * means. */
                if (!completed && !errored) {
                  // Must reset to current URL tree here to ensure history.state is set. On a
                  // fresh page load, if a new navigation comes in before a successful
                  // navigation completes, there will be nothing in
                  // history.state.navigationId. This can cause sync problems with AngularJS
                  // sync code which looks for a value here in order to determine whether or
                  // not to handle a given popstate event or to leave it to the Angular
                  // router.
                  _this968.resetUrlToCurrentUrlTree();

                  var navCancel = new NavigationCancel(t.id, _this968.serializeUrl(t.extractedUrl), "Navigation ID ".concat(t.id, " is not equal to the current navigation id ").concat(_this968.navigationId));
                  eventsSubject.next(navCancel);
                  t.resolve(false);
                } // currentNavigation should always be reset to null here. If navigation was
                // successful, lastSuccessfulTransition will have already been set. Therefore
                // we can safely set currentNavigation to null here.


                _this968.currentNavigation = null;
              }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["catchError"])(function (e) {
                errored = true;
                /* This error type is issued during Redirect, and is handled as a
                 * cancellation rather than an error. */

                if (isNavigationCancelingError(e)) {
                  var redirecting = isUrlTree(e.url);

                  if (!redirecting) {
                    // Set property only if we're not redirecting. If we landed on a page and
                    // redirect to `/` route, the new navigation is going to see the `/`
                    // isn't a change from the default currentUrlTree and won't navigate.
                    // This is only applicable with initial navigation, so setting
                    // `navigated` only when not redirecting resolves this scenario.
                    _this968.navigated = true;

                    _this968.resetStateAndUrl(t.currentRouterState, t.currentUrlTree, t.rawUrl);
                  }

                  var navCancel = new NavigationCancel(t.id, _this968.serializeUrl(t.extractedUrl), e.message);
                  eventsSubject.next(navCancel); // When redirecting, we need to delay resolving the navigation
                  // promise and push it to the redirect navigation

                  if (!redirecting) {
                    t.resolve(false);
                  } else {
                    // setTimeout is required so this navigation finishes with
                    // the return EMPTY below. If it isn't allowed to finish
                    // processing, there can be multiple navigations to the same
                    // URL.
                    setTimeout(function () {
                      var mergedTree = _this968.urlHandlingStrategy.merge(e.url, _this968.rawUrlTree);

                      var extras = {
                        skipLocationChange: t.extras.skipLocationChange,
                        replaceUrl: _this968.urlUpdateStrategy === 'eager'
                      };

                      _this968.scheduleNavigation(mergedTree, 'imperative', null, extras, {
                        resolve: t.resolve,
                        reject: t.reject,
                        promise: t.promise
                      });
                    }, 0);
                  }
                  /* All other errors should reset to the router's internal URL reference to
                   * the pre-error state. */

                } else {
                  _this968.resetStateAndUrl(t.currentRouterState, t.currentUrlTree, t.rawUrl);

                  var navError = new NavigationError(t.id, _this968.serializeUrl(t.extractedUrl), e);
                  eventsSubject.next(navError);

                  try {
                    t.resolve(_this968.errorHandler(e));
                  } catch (ee) {
                    t.reject(ee);
                  }
                }

                return rxjs__WEBPACK_IMPORTED_MODULE_2__["EMPTY"];
              })); // TODO(jasonaden): remove cast once g3 is on updated TypeScript
            }));
          }
          /**
           * @internal
           * TODO: this should be removed once the constructor of the router made internal
           */

        }, {
          key: "resetRootComponentType",
          value: function resetRootComponentType(rootComponentType) {
            this.rootComponentType = rootComponentType; // TODO: vsavkin router 4.0 should make the root component set to null
            // this will simplify the lifecycle of the router.

            this.routerState.root.component = this.rootComponentType;
          }
        }, {
          key: "getTransition",
          value: function getTransition() {
            var transition = this.transitions.value; // This value needs to be set. Other values such as extractedUrl are set on initial navigation
            // but the urlAfterRedirects may not get set if we aren't processing the new URL *and* not
            // processing the previous URL.

            transition.urlAfterRedirects = this.browserUrlTree;
            return transition;
          }
        }, {
          key: "setTransition",
          value: function setTransition(t) {
            this.transitions.next(Object.assign(Object.assign({}, this.getTransition()), t));
          }
          /**
           * Sets up the location change listener and performs the initial navigation.
           */

        }, {
          key: "initialNavigation",
          value: function initialNavigation() {
            this.setUpLocationChangeListener();

            if (this.navigationId === 0) {
              this.navigateByUrl(this.location.path(true), {
                replaceUrl: true
              });
            }
          }
          /**
           * Sets up the location change listener. This listener detects navigations triggered from outside
           * the Router (the browser back/forward buttons, for example) and schedules a corresponding Router
           * navigation so that the correct events, guards, etc. are triggered.
           */

        }, {
          key: "setUpLocationChangeListener",
          value: function setUpLocationChangeListener() {
            var _this969 = this;

            // Don't need to use Zone.wrap any more, because zone.js
            // already patch onPopState, so location change callback will
            // run into ngZone
            if (!this.locationSubscription) {
              this.locationSubscription = this.location.subscribe(function (event) {
                var currentChange = _this969.extractLocationChangeInfoFromEvent(event);

                if (_this969.shouldScheduleNavigation(_this969.lastLocationChangeInfo, currentChange)) {
                  // The `setTimeout` was added in #12160 and is likely to support Angular/AngularJS
                  // hybrid apps.
                  setTimeout(function () {
                    var source = currentChange.source,
                        state = currentChange.state,
                        urlTree = currentChange.urlTree;
                    var extras = {
                      replaceUrl: true
                    };

                    if (state) {
                      var stateCopy = Object.assign({}, state);
                      delete stateCopy.navigationId;

                      if (Object.keys(stateCopy).length !== 0) {
                        extras.state = stateCopy;
                      }
                    }

                    _this969.scheduleNavigation(urlTree, source, state, extras);
                  }, 0);
                }

                _this969.lastLocationChangeInfo = currentChange;
              });
            }
          }
          /** Extracts router-related information from a `PopStateEvent`. */

        }, {
          key: "extractLocationChangeInfoFromEvent",
          value: function extractLocationChangeInfoFromEvent(change) {
            var _a;

            return {
              source: change['type'] === 'popstate' ? 'popstate' : 'hashchange',
              urlTree: this.parseUrl(change['url']),
              // Navigations coming from Angular router have a navigationId state
              // property. When this exists, restore the state.
              state: ((_a = change.state) === null || _a === void 0 ? void 0 : _a.navigationId) ? change.state : null,
              transitionId: this.getTransition().id
            };
          }
          /**
           * Determines whether two events triggered by the Location subscription are due to the same
           * navigation. The location subscription can fire two events (popstate and hashchange) for a
           * single navigation. The second one should be ignored, that is, we should not schedule another
           * navigation in the Router.
           */

        }, {
          key: "shouldScheduleNavigation",
          value: function shouldScheduleNavigation(previous, current) {
            if (!previous) return true;
            var sameDestination = current.urlTree.toString() === previous.urlTree.toString();
            var eventsOccurredAtSameTime = current.transitionId === previous.transitionId;

            if (!eventsOccurredAtSameTime || !sameDestination) {
              return true;
            }

            if (current.source === 'hashchange' && previous.source === 'popstate' || current.source === 'popstate' && previous.source === 'hashchange') {
              return false;
            }

            return true;
          }
          /** The current URL. */

        }, {
          key: "url",
          get: function get() {
            return this.serializeUrl(this.currentUrlTree);
          }
          /** The current Navigation object if one exists */

        }, {
          key: "getCurrentNavigation",
          value: function getCurrentNavigation() {
            return this.currentNavigation;
          }
          /** @internal */

        }, {
          key: "triggerEvent",
          value: function triggerEvent(event) {
            this.events.next(event);
          }
          /**
           * Resets the route configuration used for navigation and generating links.
           *
           * @param config The route array for the new configuration.
           *
           * @usageNotes
           *
           * ```
           * router.resetConfig([
           *  { path: 'team/:id', component: TeamCmp, children: [
           *    { path: 'simple', component: SimpleCmp },
           *    { path: 'user/:name', component: UserCmp }
           *  ]}
           * ]);
           * ```
           */

        }, {
          key: "resetConfig",
          value: function resetConfig(config) {
            validateConfig(config);
            this.config = config.map(standardizeConfig);
            this.navigated = false;
            this.lastSuccessfulId = -1;
          }
          /** @nodoc */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.dispose();
          }
          /** Disposes of the router. */

        }, {
          key: "dispose",
          value: function dispose() {
            this.transitions.complete();

            if (this.locationSubscription) {
              this.locationSubscription.unsubscribe();
              this.locationSubscription = undefined;
            }

            this.disposed = true;
          }
          /**
           * Appends URL segments to the current URL tree to create a new URL tree.
           *
           * @param commands An array of URL fragments with which to construct the new URL tree.
           * If the path is static, can be the literal URL string. For a dynamic path, pass an array of path
           * segments, followed by the parameters for each segment.
           * The fragments are applied to the current URL tree or the one provided  in the `relativeTo`
           * property of the options object, if supplied.
           * @param navigationExtras Options that control the navigation strategy.
           * @returns The new URL tree.
           *
           * @usageNotes
           *
           * ```
           * // create /team/33/user/11
           * router.createUrlTree(['/team', 33, 'user', 11]);
           *
           * // create /team/33;expand=true/user/11
           * router.createUrlTree(['/team', 33, {expand: true}, 'user', 11]);
           *
           * // you can collapse static segments like this (this works only with the first passed-in value):
           * router.createUrlTree(['/team/33/user', userId]);
           *
           * // If the first segment can contain slashes, and you do not want the router to split it,
           * // you can do the following:
           * router.createUrlTree([{segmentPath: '/one/two'}]);
           *
           * // create /team/33/(user/11//right:chat)
           * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: 'chat'}}]);
           *
           * // remove the right secondary node
           * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: null}}]);
           *
           * // assuming the current url is `/team/33/user/11` and the route points to `user/11`
           *
           * // navigate to /team/33/user/11/details
           * router.createUrlTree(['details'], {relativeTo: route});
           *
           * // navigate to /team/33/user/22
           * router.createUrlTree(['../22'], {relativeTo: route});
           *
           * // navigate to /team/44/user/22
           * router.createUrlTree(['../../team/44/user/22'], {relativeTo: route});
           *
           * Note that a value of `null` or `undefined` for `relativeTo` indicates that the
           * tree should be created relative to the root.
           * ```
           */

        }, {
          key: "createUrlTree",
          value: function createUrlTree(commands) {
            var navigationExtras = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
            var relativeTo = navigationExtras.relativeTo,
                queryParams = navigationExtras.queryParams,
                fragment = navigationExtras.fragment,
                queryParamsHandling = navigationExtras.queryParamsHandling,
                preserveFragment = navigationExtras.preserveFragment;
            var a = relativeTo || this.routerState.root;
            var f = preserveFragment ? this.currentUrlTree.fragment : fragment;
            var q = null;

            switch (queryParamsHandling) {
              case 'merge':
                q = Object.assign(Object.assign({}, this.currentUrlTree.queryParams), queryParams);
                break;

              case 'preserve':
                q = this.currentUrlTree.queryParams;
                break;

              default:
                q = queryParams || null;
            }

            if (q !== null) {
              q = this.removeEmptyProps(q);
            }

            return _createUrlTree(a, this.currentUrlTree, commands, q, f);
          }
          /**
           * Navigates to a view using an absolute route path.
           *
           * @param url An absolute path for a defined route. The function does not apply any delta to the
           *     current URL.
           * @param extras An object containing properties that modify the navigation strategy.
           *
           * @returns A Promise that resolves to 'true' when navigation succeeds,
           * to 'false' when navigation fails, or is rejected on error.
           *
           * @usageNotes
           *
           * The following calls request navigation to an absolute path.
           *
           * ```
           * router.navigateByUrl("/team/33/user/11");
           *
           * // Navigate without updating the URL
           * router.navigateByUrl("/team/33/user/11", { skipLocationChange: true });
           * ```
           *
           * @see [Routing and Navigation guide](guide/router)
           *
           */

        }, {
          key: "navigateByUrl",
          value: function navigateByUrl(url) {
            var extras = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
              skipLocationChange: false
            };

            if (typeof ngDevMode === 'undefined' || ngDevMode && this.isNgZoneEnabled && !_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"].isInAngularZone()) {
              this.console.warn("Navigation triggered outside Angular zone, did you forget to call 'ngZone.run()'?");
            }

            var urlTree = isUrlTree(url) ? url : this.parseUrl(url);
            var mergedTree = this.urlHandlingStrategy.merge(urlTree, this.rawUrlTree);
            return this.scheduleNavigation(mergedTree, 'imperative', null, extras);
          }
          /**
           * Navigate based on the provided array of commands and a starting point.
           * If no starting route is provided, the navigation is absolute.
           *
           * @param commands An array of URL fragments with which to construct the target URL.
           * If the path is static, can be the literal URL string. For a dynamic path, pass an array of path
           * segments, followed by the parameters for each segment.
           * The fragments are applied to the current URL or the one provided  in the `relativeTo` property
           * of the options object, if supplied.
           * @param extras An options object that determines how the URL should be constructed or
           *     interpreted.
           *
           * @returns A Promise that resolves to `true` when navigation succeeds, to `false` when navigation
           *     fails,
           * or is rejected on error.
           *
           * @usageNotes
           *
           * The following calls request navigation to a dynamic route path relative to the current URL.
           *
           * ```
           * router.navigate(['team', 33, 'user', 11], {relativeTo: route});
           *
           * // Navigate without updating the URL, overriding the default behavior
           * router.navigate(['team', 33, 'user', 11], {relativeTo: route, skipLocationChange: true});
           * ```
           *
           * @see [Routing and Navigation guide](guide/router)
           *
           */

        }, {
          key: "navigate",
          value: function navigate(commands) {
            var extras = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
              skipLocationChange: false
            };
            validateCommands(commands);
            return this.navigateByUrl(this.createUrlTree(commands, extras), extras);
          }
          /** Serializes a `UrlTree` into a string */

        }, {
          key: "serializeUrl",
          value: function serializeUrl(url) {
            return this.urlSerializer.serialize(url);
          }
          /** Parses a string into a `UrlTree` */

        }, {
          key: "parseUrl",
          value: function parseUrl(url) {
            var urlTree;

            try {
              urlTree = this.urlSerializer.parse(url);
            } catch (e) {
              urlTree = this.malformedUriErrorHandler(e, this.urlSerializer, url);
            }

            return urlTree;
          }
          /** Returns whether the url is activated */

        }, {
          key: "isActive",
          value: function isActive(url, exact) {
            if (isUrlTree(url)) {
              return containsTree(this.currentUrlTree, url, exact);
            }

            var urlTree = this.parseUrl(url);
            return containsTree(this.currentUrlTree, urlTree, exact);
          }
        }, {
          key: "removeEmptyProps",
          value: function removeEmptyProps(params) {
            return Object.keys(params).reduce(function (result, key) {
              var value = params[key];

              if (value !== null && value !== undefined) {
                result[key] = value;
              }

              return result;
            }, {});
          }
        }, {
          key: "processNavigations",
          value: function processNavigations() {
            var _this970 = this;

            this.navigations.subscribe(function (t) {
              _this970.navigated = true;
              _this970.lastSuccessfulId = t.id;

              _this970.events.next(new NavigationEnd(t.id, _this970.serializeUrl(t.extractedUrl), _this970.serializeUrl(_this970.currentUrlTree)));

              _this970.lastSuccessfulNavigation = _this970.currentNavigation;
              _this970.currentNavigation = null;
              t.resolve(true);
            }, function (e) {
              _this970.console.warn("Unhandled Navigation Error: ");
            });
          }
        }, {
          key: "scheduleNavigation",
          value: function scheduleNavigation(rawUrl, source, restoredState, extras, priorPromise) {
            if (this.disposed) {
              return Promise.resolve(false);
            } // * Imperative navigations (router.navigate) might trigger additional navigations to the same
            //   URL via a popstate event and the locationChangeListener. We should skip these duplicate
            //   navs. Duplicates may also be triggered by attempts to sync AngularJS and Angular router
            //   states.
            // * Imperative navigations can be cancelled by router guards, meaning the URL won't change. If
            //   the user follows that with a navigation using the back/forward button or manual URL change,
            //   the destination may be the same as the previous imperative attempt. We should not skip
            //   these navigations because it's a separate case from the one above -- it's not a duplicate
            //   navigation.


            var lastNavigation = this.getTransition(); // We don't want to skip duplicate successful navs if they're imperative because
            // onSameUrlNavigation could be 'reload' (so the duplicate is intended).

            var browserNavPrecededByRouterNav = source !== 'imperative' && (lastNavigation === null || lastNavigation === void 0 ? void 0 : lastNavigation.source) === 'imperative';
            var lastNavigationSucceeded = this.lastSuccessfulId === lastNavigation.id; // If the last navigation succeeded or is in flight, we can use the rawUrl as the comparison.
            // However, if it failed, we should compare to the final result (urlAfterRedirects).

            var lastNavigationUrl = lastNavigationSucceeded || this.currentNavigation ? lastNavigation.rawUrl : lastNavigation.urlAfterRedirects;
            var duplicateNav = lastNavigationUrl.toString() === rawUrl.toString();

            if (browserNavPrecededByRouterNav && duplicateNav) {
              return Promise.resolve(true); // return value is not used
            }

            var resolve;
            var reject;
            var promise;

            if (priorPromise) {
              resolve = priorPromise.resolve;
              reject = priorPromise.reject;
              promise = priorPromise.promise;
            } else {
              promise = new Promise(function (res, rej) {
                resolve = res;
                reject = rej;
              });
            }

            var id = ++this.navigationId;
            this.setTransition({
              id: id,
              source: source,
              restoredState: restoredState,
              currentUrlTree: this.currentUrlTree,
              currentRawUrl: this.rawUrlTree,
              rawUrl: rawUrl,
              extras: extras,
              resolve: resolve,
              reject: reject,
              promise: promise,
              currentSnapshot: this.routerState.snapshot,
              currentRouterState: this.routerState
            }); // Make sure that the error is propagated even though `processNavigations` catch
            // handler does not rethrow

            return promise["catch"](function (e) {
              return Promise.reject(e);
            });
          }
        }, {
          key: "setBrowserUrl",
          value: function setBrowserUrl(url, replaceUrl, id, state) {
            var path = this.urlSerializer.serialize(url);
            state = state || {};

            if (this.location.isCurrentPathEqualTo(path) || replaceUrl) {
              // TODO(jasonaden): Remove first `navigationId` and rely on `ng` namespace.
              this.location.replaceState(path, '', Object.assign(Object.assign({}, state), {
                navigationId: id
              }));
            } else {
              this.location.go(path, '', Object.assign(Object.assign({}, state), {
                navigationId: id
              }));
            }
          }
        }, {
          key: "resetStateAndUrl",
          value: function resetStateAndUrl(storedState, storedUrl, rawUrl) {
            this.routerState = storedState;
            this.currentUrlTree = storedUrl;
            this.rawUrlTree = this.urlHandlingStrategy.merge(this.currentUrlTree, rawUrl);
            this.resetUrlToCurrentUrlTree();
          }
        }, {
          key: "resetUrlToCurrentUrlTree",
          value: function resetUrlToCurrentUrlTree() {
            this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree), '', {
              navigationId: this.lastSuccessfulId
            });
          }
        }]);

        return Router;
      }();

      Router.ɵfac = function Router_Factory(t) {
        return new (t || Router)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["Type"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](UrlSerializer), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](ChildrenOutletContexts), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["Location"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleFactoryLoader"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["Compiler"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](undefined));
      };

      Router.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({
        token: Router,
        factory: Router.ɵfac
      });

      Router.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Type"]
        }, {
          type: UrlSerializer
        }, {
          type: ChildrenOutletContexts
        }, {
          type: _angular_common__WEBPACK_IMPORTED_MODULE_0__["Location"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleFactoryLoader"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Compiler"]
        }, {
          type: undefined
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](Router, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Type"]
          }, {
            type: UrlSerializer
          }, {
            type: ChildrenOutletContexts
          }, {
            type: _angular_common__WEBPACK_IMPORTED_MODULE_0__["Location"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleFactoryLoader"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Compiler"]
          }, {
            type: undefined
          }];
        }, null);
      })();

      function validateCommands(commands) {
        for (var i = 0; i < commands.length; i++) {
          var cmd = commands[i];

          if (cmd == null) {
            throw new Error("The requested path contains ".concat(cmd, " segment at index ").concat(i));
          }
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @description
       *
       * When applied to an element in a template, makes that element a link
       * that initiates navigation to a route. Navigation opens one or more routed components
       * in one or more `<router-outlet>` locations on the page.
       *
       * Given a route configuration `[{ path: 'user/:name', component: UserCmp }]`,
       * the following creates a static link to the route:
       * `<a routerLink="/user/bob">link to user component</a>`
       *
       * You can use dynamic values to generate the link.
       * For a dynamic link, pass an array of path segments,
       * followed by the params for each segment.
       * For example, `['/team', teamId, 'user', userName, {details: true}]`
       * generates a link to `/team/11/user/bob;details=true`.
       *
       * Multiple static segments can be merged into one term and combined with dynamic segements.
       * For example, `['/team/11/user', userName, {details: true}]`
       *
       * The input that you provide to the link is treated as a delta to the current URL.
       * For instance, suppose the current URL is `/user/(box//aux:team)`.
       * The link `<a [routerLink]="['/user/jim']">Jim</a>` creates the URL
       * `/user/(jim//aux:team)`.
       * See {@link Router#createUrlTree createUrlTree} for more information.
       *
       * @usageNotes
       *
       * You can use absolute or relative paths in a link, set query parameters,
       * control how parameters are handled, and keep a history of navigation states.
       *
       * ### Relative link paths
       *
       * The first segment name can be prepended with `/`, `./`, or `../`.
       * * If the first segment begins with `/`, the router looks up the route from the root of the
       *   app.
       * * If the first segment begins with `./`, or doesn't begin with a slash, the router
       *   looks in the children of the current activated route.
       * * If the first segment begins with `../`, the router goes up one level in the route tree.
       *
       * ### Setting and handling query params and fragments
       *
       * The following link adds a query parameter and a fragment to the generated URL:
       *
       * ```
       * <a [routerLink]="['/user/bob']" [queryParams]="{debug: true}" fragment="education">
       *   link to user component
       * </a>
       * ```
       * By default, the directive constructs the new URL using the given query parameters.
       * The example generates the link: `/user/bob?debug=true#education`.
       *
       * You can instruct the directive to handle query parameters differently
       * by specifying the `queryParamsHandling` option in the link.
       * Allowed values are:
       *
       *  - `'merge'`: Merge the given `queryParams` into the current query params.
       *  - `'preserve'`: Preserve the current query params.
       *
       * For example:
       *
       * ```
       * <a [routerLink]="['/user/bob']" [queryParams]="{debug: true}" queryParamsHandling="merge">
       *   link to user component
       * </a>
       * ```
       *
       * See {@link UrlCreationOptions.queryParamsHandling UrlCreationOptions#queryParamsHandling}.
       *
       * ### Preserving navigation history
       *
       * You can provide a `state` value to be persisted to the browser's
       * [`History.state` property](https://developer.mozilla.org/en-US/docs/Web/API/History#Properties).
       * For example:
       *
       * ```
       * <a [routerLink]="['/user/bob']" [state]="{tracingId: 123}">
       *   link to user component
       * </a>
       * ```
       *
       * Use {@link Router.getCurrentNavigation() Router#getCurrentNavigation} to retrieve a saved
       * navigation-state value. For example, to capture the `tracingId` during the `NavigationStart`
       * event:
       *
       * ```
       * // Get NavigationStart events
       * router.events.pipe(filter(e => e instanceof NavigationStart)).subscribe(e => {
       *   const navigation = router.getCurrentNavigation();
       *   tracingService.trace({id: navigation.extras.state.tracingId});
       * });
       * ```
       *
       * @ngModule RouterModule
       *
       * @publicApi
       */


      var RouterLink = /*#__PURE__*/function () {
        function RouterLink(router, route, tabIndex, renderer, el) {
          _classCallCheck2(this, RouterLink);

          this.router = router;
          this.route = route;
          this.commands = [];
          /** @internal */

          this.onChanges = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();

          if (tabIndex == null) {
            renderer.setAttribute(el.nativeElement, 'tabindex', '0');
          }
        }
        /** @nodoc */


        _createClass2(RouterLink, [{
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            // This is subscribed to by `RouterLinkActive` so that it knows to update when there are changes
            // to the RouterLinks it's tracking.
            this.onChanges.next(this);
          }
          /**
           * Commands to pass to {@link Router#createUrlTree Router#createUrlTree}.
           *   - **array**: commands to pass to {@link Router#createUrlTree Router#createUrlTree}.
           *   - **string**: shorthand for array of commands with just the string, i.e. `['/route']`
           *   - **null|undefined**: shorthand for an empty array of commands, i.e. `[]`
           * @see {@link Router#createUrlTree Router#createUrlTree}
           */

        }, {
          key: "routerLink",
          set: function set(commands) {
            if (commands != null) {
              this.commands = Array.isArray(commands) ? commands : [commands];
            } else {
              this.commands = [];
            }
          }
          /** @nodoc */

        }, {
          key: "onClick",
          value: function onClick() {
            var extras = {
              skipLocationChange: attrBoolValue(this.skipLocationChange),
              replaceUrl: attrBoolValue(this.replaceUrl),
              state: this.state
            };
            this.router.navigateByUrl(this.urlTree, extras);
            return true;
          }
        }, {
          key: "urlTree",
          get: function get() {
            return this.router.createUrlTree(this.commands, {
              // If the `relativeTo` input is not defined, we want to use `this.route` by default.
              // Otherwise, we should use the value provided by the user in the input.
              relativeTo: this.relativeTo !== undefined ? this.relativeTo : this.route,
              queryParams: this.queryParams,
              fragment: this.fragment,
              queryParamsHandling: this.queryParamsHandling,
              preserveFragment: attrBoolValue(this.preserveFragment)
            });
          }
        }]);

        return RouterLink;
      }();

      RouterLink.ɵfac = function RouterLink_Factory(t) {
        return new (t || RouterLink)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](Router), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](ActivatedRoute), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinjectAttribute"]('tabindex'), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]));
      };

      RouterLink.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({
        type: RouterLink,
        selectors: [["", "routerLink", "", 5, "a", 5, "area"]],
        hostBindings: function RouterLink_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function RouterLink_click_HostBindingHandler() {
              return ctx.onClick();
            });
          }
        },
        inputs: {
          routerLink: "routerLink",
          queryParams: "queryParams",
          fragment: "fragment",
          queryParamsHandling: "queryParamsHandling",
          preserveFragment: "preserveFragment",
          skipLocationChange: "skipLocationChange",
          replaceUrl: "replaceUrl",
          state: "state",
          relativeTo: "relativeTo"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵNgOnChangesFeature"]]
      });

      RouterLink.ctorParameters = function () {
        return [{
          type: Router
        }, {
          type: ActivatedRoute
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Attribute"],
            args: ['tabindex']
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Renderer2"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
        }];
      };

      RouterLink.propDecorators = {
        queryParams: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        fragment: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        queryParamsHandling: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        preserveFragment: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        skipLocationChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        replaceUrl: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        state: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        relativeTo: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        routerLink: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        onClick: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"],
          args: ['click']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](RouterLink, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
          args: [{
            selector: ':not(a):not(area)[routerLink]'
          }]
        }], function () {
          return [{
            type: Router
          }, {
            type: ActivatedRoute
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Attribute"],
              args: ['tabindex']
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Renderer2"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
          }];
        }, {
          routerLink: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],

          /** @nodoc */
          onClick: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"],
            args: ['click']
          }],
          queryParams: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          fragment: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          queryParamsHandling: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          preserveFragment: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          skipLocationChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          replaceUrl: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          state: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          relativeTo: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }]
        });
      })();
      /**
       * @description
       *
       * Lets you link to specific routes in your app.
       *
       * See `RouterLink` for more information.
       *
       * @ngModule RouterModule
       *
       * @publicApi
       */


      var RouterLinkWithHref = /*#__PURE__*/function () {
        function RouterLinkWithHref(router, route, locationStrategy) {
          var _this971 = this;

          _classCallCheck2(this, RouterLinkWithHref);

          this.router = router;
          this.route = route;
          this.locationStrategy = locationStrategy;
          this.commands = [];
          /** @internal */

          this.onChanges = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          this.subscription = router.events.subscribe(function (s) {
            if (s instanceof NavigationEnd) {
              _this971.updateTargetUrlAndHref();
            }
          });
        }
        /**
         * Commands to pass to {@link Router#createUrlTree Router#createUrlTree}.
         *   - **array**: commands to pass to {@link Router#createUrlTree Router#createUrlTree}.
         *   - **string**: shorthand for array of commands with just the string, i.e. `['/route']`
         *   - **null|undefined**: shorthand for an empty array of commands, i.e. `[]`
         * @see {@link Router#createUrlTree Router#createUrlTree}
         */


        _createClass2(RouterLinkWithHref, [{
          key: "routerLink",
          set: function set(commands) {
            if (commands != null) {
              this.commands = Array.isArray(commands) ? commands : [commands];
            } else {
              this.commands = [];
            }
          }
          /** @nodoc */

        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            this.updateTargetUrlAndHref();
            this.onChanges.next(this);
          }
          /** @nodoc */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.subscription.unsubscribe();
          }
          /** @nodoc */

        }, {
          key: "onClick",
          value: function onClick(button, ctrlKey, shiftKey, altKey, metaKey) {
            if (button !== 0 || ctrlKey || shiftKey || altKey || metaKey) {
              return true;
            }

            if (typeof this.target === 'string' && this.target != '_self') {
              return true;
            }

            var extras = {
              skipLocationChange: attrBoolValue(this.skipLocationChange),
              replaceUrl: attrBoolValue(this.replaceUrl),
              state: this.state
            };
            this.router.navigateByUrl(this.urlTree, extras);
            return false;
          }
        }, {
          key: "updateTargetUrlAndHref",
          value: function updateTargetUrlAndHref() {
            this.href = this.locationStrategy.prepareExternalUrl(this.router.serializeUrl(this.urlTree));
          }
        }, {
          key: "urlTree",
          get: function get() {
            return this.router.createUrlTree(this.commands, {
              // If the `relativeTo` input is not defined, we want to use `this.route` by default.
              // Otherwise, we should use the value provided by the user in the input.
              relativeTo: this.relativeTo !== undefined ? this.relativeTo : this.route,
              queryParams: this.queryParams,
              fragment: this.fragment,
              queryParamsHandling: this.queryParamsHandling,
              preserveFragment: attrBoolValue(this.preserveFragment)
            });
          }
        }]);

        return RouterLinkWithHref;
      }();

      RouterLinkWithHref.ɵfac = function RouterLinkWithHref_Factory(t) {
        return new (t || RouterLinkWithHref)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](Router), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](ActivatedRoute), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["LocationStrategy"]));
      };

      RouterLinkWithHref.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({
        type: RouterLinkWithHref,
        selectors: [["a", "routerLink", ""], ["area", "routerLink", ""]],
        hostVars: 2,
        hostBindings: function RouterLinkWithHref_HostBindings(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function RouterLinkWithHref_click_HostBindingHandler($event) {
              return ctx.onClick($event.button, $event.ctrlKey, $event.shiftKey, $event.altKey, $event.metaKey);
            });
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵhostProperty"]("href", ctx.href, _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsanitizeUrl"]);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵattribute"]("target", ctx.target);
          }
        },
        inputs: {
          routerLink: "routerLink",
          target: "target",
          queryParams: "queryParams",
          fragment: "fragment",
          queryParamsHandling: "queryParamsHandling",
          preserveFragment: "preserveFragment",
          skipLocationChange: "skipLocationChange",
          replaceUrl: "replaceUrl",
          state: "state",
          relativeTo: "relativeTo"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵNgOnChangesFeature"]]
      });

      RouterLinkWithHref.ctorParameters = function () {
        return [{
          type: Router
        }, {
          type: ActivatedRoute
        }, {
          type: _angular_common__WEBPACK_IMPORTED_MODULE_0__["LocationStrategy"]
        }];
      };

      RouterLinkWithHref.propDecorators = {
        target: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostBinding"],
          args: ['attr.target']
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        queryParams: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        fragment: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        queryParamsHandling: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        preserveFragment: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        skipLocationChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        replaceUrl: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        state: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        relativeTo: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        href: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostBinding"]
        }],
        routerLink: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        onClick: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"],
          args: ['click', ['$event.button', '$event.ctrlKey', '$event.shiftKey', '$event.altKey', '$event.metaKey']]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](RouterLinkWithHref, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
          args: [{
            selector: 'a[routerLink],area[routerLink]'
          }]
        }], function () {
          return [{
            type: Router
          }, {
            type: ActivatedRoute
          }, {
            type: _angular_common__WEBPACK_IMPORTED_MODULE_0__["LocationStrategy"]
          }];
        }, {
          routerLink: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],

          /** @nodoc */
          onClick: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostListener"],
            args: ['click', ['$event.button', '$event.ctrlKey', '$event.shiftKey', '$event.altKey', '$event.metaKey']]
          }],
          href: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostBinding"]
          }],
          target: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["HostBinding"],
            args: ['attr.target']
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          queryParams: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          fragment: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          queryParamsHandling: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          preserveFragment: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          skipLocationChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          replaceUrl: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          state: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          relativeTo: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }]
        });
      })();

      function attrBoolValue(s) {
        return s === '' || !!s;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       *
       * @description
       *
       * Tracks whether the linked route of an element is currently active, and allows you
       * to specify one or more CSS classes to add to the element when the linked route
       * is active.
       *
       * Use this directive to create a visual distinction for elements associated with an active route.
       * For example, the following code highlights the word "Bob" when the router
       * activates the associated route:
       *
       * ```
       * <a routerLink="/user/bob" routerLinkActive="active-link">Bob</a>
       * ```
       *
       * Whenever the URL is either '/user' or '/user/bob', the "active-link" class is
       * added to the anchor tag. If the URL changes, the class is removed.
       *
       * You can set more than one class using a space-separated string or an array.
       * For example:
       *
       * ```
       * <a routerLink="/user/bob" routerLinkActive="class1 class2">Bob</a>
       * <a routerLink="/user/bob" [routerLinkActive]="['class1', 'class2']">Bob</a>
       * ```
       *
       * To add the classes only when the URL matches the link exactly, add the option `exact: true`:
       *
       * ```
       * <a routerLink="/user/bob" routerLinkActive="active-link" [routerLinkActiveOptions]="{exact:
       * true}">Bob</a>
       * ```
       *
       * To directly check the `isActive` status of the link, assign the `RouterLinkActive`
       * instance to a template variable.
       * For example, the following checks the status without assigning any CSS classes:
       *
       * ```
       * <a routerLink="/user/bob" routerLinkActive #rla="routerLinkActive">
       *   Bob {{ rla.isActive ? '(already open)' : ''}}
       * </a>
       * ```
       *
       * You can apply the `RouterLinkActive` directive to an ancestor of linked elements.
       * For example, the following sets the active-link class on the `<div>`  parent tag
       * when the URL is either '/user/jim' or '/user/bob'.
       *
       * ```
       * <div routerLinkActive="active-link" [routerLinkActiveOptions]="{exact: true}">
       *   <a routerLink="/user/jim">Jim</a>
       *   <a routerLink="/user/bob">Bob</a>
       * </div>
       * ```
       *
       * @ngModule RouterModule
       *
       * @publicApi
       */


      var RouterLinkActive = /*#__PURE__*/function () {
        function RouterLinkActive(router, element, renderer, cdr, link, linkWithHref) {
          var _this972 = this;

          _classCallCheck2(this, RouterLinkActive);

          this.router = router;
          this.element = element;
          this.renderer = renderer;
          this.cdr = cdr;
          this.link = link;
          this.linkWithHref = linkWithHref;
          this.classes = [];
          this.isActive = false;
          this.routerLinkActiveOptions = {
            exact: false
          };
          this.routerEventsSubscription = router.events.subscribe(function (s) {
            if (s instanceof NavigationEnd) {
              _this972.update();
            }
          });
        }
        /** @nodoc */


        _createClass2(RouterLinkActive, [{
          key: "ngAfterContentInit",
          value: function ngAfterContentInit() {
            var _this973 = this;

            // `of(null)` is used to force subscribe body to execute once immediately (like `startWith`).
            Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(this.links.changes, this.linksWithHrefs.changes, Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(null)).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeAll"])()).subscribe(function (_) {
              _this973.update();

              _this973.subscribeToEachLinkOnChanges();
            });
          }
        }, {
          key: "subscribeToEachLinkOnChanges",
          value: function subscribeToEachLinkOnChanges() {
            var _this974 = this;

            var _a;

            (_a = this.linkInputChangesSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
            var allLinkChanges = [].concat(_toConsumableArray(this.links.toArray()), _toConsumableArray(this.linksWithHrefs.toArray()), [this.link, this.linkWithHref]).filter(function (link) {
              return !!link;
            }).map(function (link) {
              return link.onChanges;
            });
            this.linkInputChangesSubscription = Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(allLinkChanges).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeAll"])()).subscribe(function (link) {
              if (_this974.isActive !== _this974.isLinkActive(_this974.router)(link)) {
                _this974.update();
              }
            });
          }
        }, {
          key: "routerLinkActive",
          set: function set(data) {
            var classes = Array.isArray(data) ? data : data.split(' ');
            this.classes = classes.filter(function (c) {
              return !!c;
            });
          }
          /** @nodoc */

        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            this.update();
          }
          /** @nodoc */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            var _a;

            this.routerEventsSubscription.unsubscribe();
            (_a = this.linkInputChangesSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
          }
        }, {
          key: "update",
          value: function update() {
            var _this975 = this;

            if (!this.links || !this.linksWithHrefs || !this.router.navigated) return;
            Promise.resolve().then(function () {
              var hasActiveLinks = _this975.hasActiveLinks();

              if (_this975.isActive !== hasActiveLinks) {
                _this975.isActive = hasActiveLinks;

                _this975.cdr.markForCheck();

                _this975.classes.forEach(function (c) {
                  if (hasActiveLinks) {
                    _this975.renderer.addClass(_this975.element.nativeElement, c);
                  } else {
                    _this975.renderer.removeClass(_this975.element.nativeElement, c);
                  }
                });
              }
            });
          }
        }, {
          key: "isLinkActive",
          value: function isLinkActive(router) {
            var _this976 = this;

            return function (link) {
              return router.isActive(link.urlTree, _this976.routerLinkActiveOptions.exact);
            };
          }
        }, {
          key: "hasActiveLinks",
          value: function hasActiveLinks() {
            var isActiveCheckFn = this.isLinkActive(this.router);
            return this.link && isActiveCheckFn(this.link) || this.linkWithHref && isActiveCheckFn(this.linkWithHref) || this.links.some(isActiveCheckFn) || this.linksWithHrefs.some(isActiveCheckFn);
          }
        }]);

        return RouterLinkActive;
      }();

      RouterLinkActive.ɵfac = function RouterLinkActive_Factory(t) {
        return new (t || RouterLinkActive)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](Router), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["Renderer2"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](RouterLink, 8), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](RouterLinkWithHref, 8));
      };

      RouterLinkActive.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({
        type: RouterLinkActive,
        selectors: [["", "routerLinkActive", ""]],
        contentQueries: function RouterLinkActive_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵcontentQuery"](dirIndex, RouterLink, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵcontentQuery"](dirIndex, RouterLinkWithHref, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx.links = _t);
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx.linksWithHrefs = _t);
          }
        },
        inputs: {
          routerLinkActiveOptions: "routerLinkActiveOptions",
          routerLinkActive: "routerLinkActive"
        },
        exportAs: ["routerLinkActive"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵNgOnChangesFeature"]]
      });

      RouterLinkActive.ctorParameters = function () {
        return [{
          type: Router
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Renderer2"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"]
        }, {
          type: RouterLink,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }]
        }, {
          type: RouterLinkWithHref,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }]
        }];
      };

      RouterLinkActive.propDecorators = {
        links: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ContentChildren"],
          args: [RouterLink, {
            descendants: true
          }]
        }],
        linksWithHrefs: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ContentChildren"],
          args: [RouterLinkWithHref, {
            descendants: true
          }]
        }],
        routerLinkActiveOptions: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        routerLinkActive: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](RouterLinkActive, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
          args: [{
            selector: '[routerLinkActive]',
            exportAs: 'routerLinkActive'
          }]
        }], function () {
          return [{
            type: Router
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Renderer2"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"]
          }, {
            type: RouterLink,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }]
          }, {
            type: RouterLinkWithHref,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }]
          }];
        }, {
          routerLinkActiveOptions: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          routerLinkActive: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          links: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ContentChildren"],
            args: [RouterLink, {
              descendants: true
            }]
          }],
          linksWithHrefs: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ContentChildren"],
            args: [RouterLinkWithHref, {
              descendants: true
            }]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @description
       *
       * Acts as a placeholder that Angular dynamically fills based on the current router state.
       *
       * Each outlet can have a unique name, determined by the optional `name` attribute.
       * The name cannot be set or changed dynamically. If not set, default value is "primary".
       *
       * ```
       * <router-outlet></router-outlet>
       * <router-outlet name='left'></router-outlet>
       * <router-outlet name='right'></router-outlet>
       * ```
       *
       * Named outlets can be the targets of secondary routes.
       * The `Route` object for a secondary route has an `outlet` property to identify the target outlet:
       *
       * `{path: <base-path>, component: <component>, outlet: <target_outlet_name>}`
       *
       * Using named outlets and secondary routes, you can target multiple outlets in
       * the same `RouterLink` directive.
       *
       * The router keeps track of separate branches in a navigation tree for each named outlet and
       * generates a representation of that tree in the URL.
       * The URL for a secondary route uses the following syntax to specify both the primary and secondary
       * routes at the same time:
       *
       * `http://base-path/primary-route-path(outlet-name:route-path)`
       *
       * A router outlet emits an activate event when a new component is instantiated,
       * and a deactivate event when a component is destroyed.
       *
       * ```
       * <router-outlet
       *   (activate)='onActivate($event)'
       *   (deactivate)='onDeactivate($event)'></router-outlet>
       * ```
       *
       * @see [Routing tutorial](guide/router-tutorial-toh#named-outlets "Example of a named
       * outlet and secondary route configuration").
       * @see `RouterLink`
       * @see `Route`
       * @ngModule RouterModule
       *
       * @publicApi
       */


      var RouterOutlet = /*#__PURE__*/function () {
        function RouterOutlet(parentContexts, location, resolver, name, changeDetector) {
          _classCallCheck2(this, RouterOutlet);

          this.parentContexts = parentContexts;
          this.location = location;
          this.resolver = resolver;
          this.changeDetector = changeDetector;
          this.activated = null;
          this._activatedRoute = null;
          this.activateEvents = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["EventEmitter"]();
          this.deactivateEvents = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["EventEmitter"]();
          this.name = name || PRIMARY_OUTLET;
          parentContexts.onChildOutletCreated(this.name, this);
        }
        /** @nodoc */


        _createClass2(RouterOutlet, [{
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.parentContexts.onChildOutletDestroyed(this.name);
          }
          /** @nodoc */

        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            if (!this.activated) {
              // If the outlet was not instantiated at the time the route got activated we need to populate
              // the outlet when it is initialized (ie inside a NgIf)
              var context = this.parentContexts.getContext(this.name);

              if (context && context.route) {
                if (context.attachRef) {
                  // `attachRef` is populated when there is an existing component to mount
                  this.attach(context.attachRef, context.route);
                } else {
                  // otherwise the component defined in the configuration is created
                  this.activateWith(context.route, context.resolver || null);
                }
              }
            }
          }
        }, {
          key: "isActivated",
          get: function get() {
            return !!this.activated;
          }
        }, {
          key: "component",
          get: function get() {
            if (!this.activated) throw new Error('Outlet is not activated');
            return this.activated.instance;
          }
        }, {
          key: "activatedRoute",
          get: function get() {
            if (!this.activated) throw new Error('Outlet is not activated');
            return this._activatedRoute;
          }
        }, {
          key: "activatedRouteData",
          get: function get() {
            if (this._activatedRoute) {
              return this._activatedRoute.snapshot.data;
            }

            return {};
          }
          /**
           * Called when the `RouteReuseStrategy` instructs to detach the subtree
           */

        }, {
          key: "detach",
          value: function detach() {
            if (!this.activated) throw new Error('Outlet is not activated');
            this.location.detach();
            var cmp = this.activated;
            this.activated = null;
            this._activatedRoute = null;
            return cmp;
          }
          /**
           * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree
           */

        }, {
          key: "attach",
          value: function attach(ref, activatedRoute) {
            this.activated = ref;
            this._activatedRoute = activatedRoute;
            this.location.insert(ref.hostView);
          }
        }, {
          key: "deactivate",
          value: function deactivate() {
            if (this.activated) {
              var c = this.component;
              this.activated.destroy();
              this.activated = null;
              this._activatedRoute = null;
              this.deactivateEvents.emit(c);
            }
          }
        }, {
          key: "activateWith",
          value: function activateWith(activatedRoute, resolver) {
            if (this.isActivated) {
              throw new Error('Cannot activate an already activated outlet');
            }

            this._activatedRoute = activatedRoute;
            var snapshot = activatedRoute._futureSnapshot;
            var component = snapshot.routeConfig.component;
            resolver = resolver || this.resolver;
            var factory = resolver.resolveComponentFactory(component);
            var childContexts = this.parentContexts.getOrCreateContext(this.name).children;
            var injector = new OutletInjector(activatedRoute, childContexts, this.location.injector);
            this.activated = this.location.createComponent(factory, this.location.length, injector); // Calling `markForCheck` to make sure we will run the change detection when the
            // `RouterOutlet` is inside a `ChangeDetectionStrategy.OnPush` component.

            this.changeDetector.markForCheck();
            this.activateEvents.emit(this.activated.instance);
          }
        }]);

        return RouterOutlet;
      }();

      RouterOutlet.ɵfac = function RouterOutlet_Factory(t) {
        return new (t || RouterOutlet)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](ChildrenOutletContexts), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentFactoryResolver"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinjectAttribute"]('name'), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"]));
      };

      RouterOutlet.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({
        type: RouterOutlet,
        selectors: [["router-outlet"]],
        outputs: {
          activateEvents: "activate",
          deactivateEvents: "deactivate"
        },
        exportAs: ["outlet"]
      });

      RouterOutlet.ctorParameters = function () {
        return [{
          type: ChildrenOutletContexts
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewContainerRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentFactoryResolver"]
        }, {
          type: String,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Attribute"],
            args: ['name']
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"]
        }];
      };

      RouterOutlet.propDecorators = {
        activateEvents: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"],
          args: ['activate']
        }],
        deactivateEvents: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"],
          args: ['deactivate']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](RouterOutlet, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
          args: [{
            selector: 'router-outlet',
            exportAs: 'outlet'
          }]
        }], function () {
          return [{
            type: ChildrenOutletContexts
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewContainerRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ComponentFactoryResolver"]
          }, {
            type: String,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Attribute"],
              args: ['name']
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"]
          }];
        }, {
          activateEvents: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"],
            args: ['activate']
          }],
          deactivateEvents: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"],
            args: ['deactivate']
          }]
        });
      })();

      var OutletInjector = /*#__PURE__*/function () {
        function OutletInjector(route, childContexts, parent) {
          _classCallCheck2(this, OutletInjector);

          this.route = route;
          this.childContexts = childContexts;
          this.parent = parent;
        }

        _createClass2(OutletInjector, [{
          key: "get",
          value: function get(token, notFoundValue) {
            if (token === ActivatedRoute) {
              return this.route;
            }

            if (token === ChildrenOutletContexts) {
              return this.childContexts;
            }

            return this.parent.get(token, notFoundValue);
          }
        }]);

        return OutletInjector;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @description
       *
       * Provides a preloading strategy.
       *
       * @publicApi
       */


      var PreloadingStrategy = function PreloadingStrategy() {
        _classCallCheck2(this, PreloadingStrategy);
      };
      /**
       * @description
       *
       * Provides a preloading strategy that preloads all modules as quickly as possible.
       *
       * ```
       * RouterModule.forRoot(ROUTES, {preloadingStrategy: PreloadAllModules})
       * ```
       *
       * @publicApi
       */


      var PreloadAllModules = /*#__PURE__*/function () {
        function PreloadAllModules() {
          _classCallCheck2(this, PreloadAllModules);
        }

        _createClass2(PreloadAllModules, [{
          key: "preload",
          value: function preload(route, fn) {
            return fn().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["catchError"])(function () {
              return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(null);
            }));
          }
        }]);

        return PreloadAllModules;
      }();
      /**
       * @description
       *
       * Provides a preloading strategy that does not preload any modules.
       *
       * This strategy is enabled by default.
       *
       * @publicApi
       */


      var NoPreloading = /*#__PURE__*/function () {
        function NoPreloading() {
          _classCallCheck2(this, NoPreloading);
        }

        _createClass2(NoPreloading, [{
          key: "preload",
          value: function preload(route, fn) {
            return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(null);
          }
        }]);

        return NoPreloading;
      }();
      /**
       * The preloader optimistically loads all router configurations to
       * make navigations into lazily-loaded sections of the application faster.
       *
       * The preloader runs in the background. When the router bootstraps, the preloader
       * starts listening to all navigation events. After every such event, the preloader
       * will check if any configurations can be loaded lazily.
       *
       * If a route is protected by `canLoad` guards, the preloaded will not load it.
       *
       * @publicApi
       */


      var RouterPreloader = /*#__PURE__*/function () {
        function RouterPreloader(router, moduleLoader, compiler, injector, preloadingStrategy) {
          _classCallCheck2(this, RouterPreloader);

          this.router = router;
          this.injector = injector;
          this.preloadingStrategy = preloadingStrategy;

          var onStartLoad = function onStartLoad(r) {
            return router.triggerEvent(new RouteConfigLoadStart(r));
          };

          var onEndLoad = function onEndLoad(r) {
            return router.triggerEvent(new RouteConfigLoadEnd(r));
          };

          this.loader = new RouterConfigLoader(moduleLoader, compiler, onStartLoad, onEndLoad);
        }

        _createClass2(RouterPreloader, [{
          key: "setUpPreloading",
          value: function setUpPreloading() {
            var _this977 = this;

            this.subscription = this.router.events.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(function (e) {
              return e instanceof NavigationEnd;
            }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["concatMap"])(function () {
              return _this977.preload();
            })).subscribe(function () {});
          }
        }, {
          key: "preload",
          value: function preload() {
            var ngModule = this.injector.get(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleRef"]);
            return this.processRoutes(ngModule, this.router.config);
          }
          /** @nodoc */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            if (this.subscription) {
              this.subscription.unsubscribe();
            }
          }
        }, {
          key: "processRoutes",
          value: function processRoutes(ngModule, routes) {
            var res = [];

            var _iterator112 = _createForOfIteratorHelper(routes),
                _step111;

            try {
              for (_iterator112.s(); !(_step111 = _iterator112.n()).done;) {
                var route = _step111.value;

                // we already have the config loaded, just recurse
                if (route.loadChildren && !route.canLoad && route._loadedConfig) {
                  var childConfig = route._loadedConfig;
                  res.push(this.processRoutes(childConfig.module, childConfig.routes)); // no config loaded, fetch the config
                } else if (route.loadChildren && !route.canLoad) {
                  res.push(this.preloadConfig(ngModule, route)); // recurse into children
                } else if (route.children) {
                  res.push(this.processRoutes(ngModule, route.children));
                }
              }
            } catch (err) {
              _iterator112.e(err);
            } finally {
              _iterator112.f();
            }

            return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["from"])(res).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeAll"])(), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_) {
              return void 0;
            }));
          }
        }, {
          key: "preloadConfig",
          value: function preloadConfig(ngModule, route) {
            var _this978 = this;

            return this.preloadingStrategy.preload(route, function () {
              var loaded$ = route._loadedConfig ? Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(route._loadedConfig) : _this978.loader.load(ngModule.injector, route);
              return loaded$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["mergeMap"])(function (config) {
                route._loadedConfig = config;
                return _this978.processRoutes(config.module, config.routes);
              }));
            });
          }
        }]);

        return RouterPreloader;
      }();

      RouterPreloader.ɵfac = function RouterPreloader_Factory(t) {
        return new (t || RouterPreloader)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](Router), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleFactoryLoader"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["Compiler"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](PreloadingStrategy));
      };

      RouterPreloader.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({
        token: RouterPreloader,
        factory: RouterPreloader.ɵfac
      });

      RouterPreloader.ctorParameters = function () {
        return [{
          type: Router
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleFactoryLoader"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Compiler"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]
        }, {
          type: PreloadingStrategy
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](RouterPreloader, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
        }], function () {
          return [{
            type: Router
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleFactoryLoader"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Compiler"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]
          }, {
            type: PreloadingStrategy
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var RouterScroller = /*#__PURE__*/function () {
        function RouterScroller(router,
        /** @docsNotRequired */
        viewportScroller) {
          var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};

          _classCallCheck2(this, RouterScroller);

          this.router = router;
          this.viewportScroller = viewportScroller;
          this.options = options;
          this.lastId = 0;
          this.lastSource = 'imperative';
          this.restoredId = 0;
          this.store = {}; // Default both options to 'disabled'

          options.scrollPositionRestoration = options.scrollPositionRestoration || 'disabled';
          options.anchorScrolling = options.anchorScrolling || 'disabled';
        }

        _createClass2(RouterScroller, [{
          key: "init",
          value: function init() {
            // we want to disable the automatic scrolling because having two places
            // responsible for scrolling results race conditions, especially given
            // that browser don't implement this behavior consistently
            if (this.options.scrollPositionRestoration !== 'disabled') {
              this.viewportScroller.setHistoryScrollRestoration('manual');
            }

            this.routerEventsSubscription = this.createScrollEvents();
            this.scrollEventsSubscription = this.consumeScrollEvents();
          }
        }, {
          key: "createScrollEvents",
          value: function createScrollEvents() {
            var _this979 = this;

            return this.router.events.subscribe(function (e) {
              if (e instanceof NavigationStart) {
                // store the scroll position of the current stable navigations.
                _this979.store[_this979.lastId] = _this979.viewportScroller.getScrollPosition();
                _this979.lastSource = e.navigationTrigger;
                _this979.restoredId = e.restoredState ? e.restoredState.navigationId : 0;
              } else if (e instanceof NavigationEnd) {
                _this979.lastId = e.id;

                _this979.scheduleScrollEvent(e, _this979.router.parseUrl(e.urlAfterRedirects).fragment);
              }
            });
          }
        }, {
          key: "consumeScrollEvents",
          value: function consumeScrollEvents() {
            var _this980 = this;

            return this.router.events.subscribe(function (e) {
              if (!(e instanceof Scroll)) return; // a popstate event. The pop state event will always ignore anchor scrolling.

              if (e.position) {
                if (_this980.options.scrollPositionRestoration === 'top') {
                  _this980.viewportScroller.scrollToPosition([0, 0]);
                } else if (_this980.options.scrollPositionRestoration === 'enabled') {
                  _this980.viewportScroller.scrollToPosition(e.position);
                } // imperative navigation "forward"

              } else {
                if (e.anchor && _this980.options.anchorScrolling === 'enabled') {
                  _this980.viewportScroller.scrollToAnchor(e.anchor);
                } else if (_this980.options.scrollPositionRestoration !== 'disabled') {
                  _this980.viewportScroller.scrollToPosition([0, 0]);
                }
              }
            });
          }
        }, {
          key: "scheduleScrollEvent",
          value: function scheduleScrollEvent(routerEvent, anchor) {
            this.router.triggerEvent(new Scroll(routerEvent, this.lastSource === 'popstate' ? this.store[this.restoredId] : null, anchor));
          }
          /** @nodoc */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            if (this.routerEventsSubscription) {
              this.routerEventsSubscription.unsubscribe();
            }

            if (this.scrollEventsSubscription) {
              this.scrollEventsSubscription.unsubscribe();
            }
          }
        }]);

        return RouterScroller;
      }();

      RouterScroller.ɵfac = function RouterScroller_Factory(t) {
        return new (t || RouterScroller)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](Router), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["ViewportScroller"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](undefined));
      };

      RouterScroller.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({
        token: RouterScroller,
        factory: RouterScroller.ɵfac
      });

      RouterScroller.ctorParameters = function () {
        return [{
          type: Router
        }, {
          type: _angular_common__WEBPACK_IMPORTED_MODULE_0__["ViewportScroller"]
        }, {
          type: undefined
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](RouterScroller, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
        }], function () {
          return [{
            type: Router
          }, {
            type: _angular_common__WEBPACK_IMPORTED_MODULE_0__["ViewportScroller"]
          }, {
            type: undefined
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * The directives defined in the `RouterModule`.
       */


      var ROUTER_DIRECTIVES = [RouterOutlet, RouterLink, RouterLinkWithHref, RouterLinkActive, ɵEmptyOutletComponent];
      /**
       * A [DI token](guide/glossary/#di-token) for the router service.
       *
       * @publicApi
       */

      var ROUTER_CONFIGURATION = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('ROUTER_CONFIGURATION');
      /**
       * @docsNotRequired
       */

      var ROUTER_FORROOT_GUARD = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('ROUTER_FORROOT_GUARD');
      var ɵ0 = {
        enableTracing: false
      };
      var ROUTER_PROVIDERS = [_angular_common__WEBPACK_IMPORTED_MODULE_0__["Location"], {
        provide: UrlSerializer,
        useClass: DefaultUrlSerializer
      }, {
        provide: Router,
        useFactory: setupRouter,
        deps: [UrlSerializer, ChildrenOutletContexts, _angular_common__WEBPACK_IMPORTED_MODULE_0__["Location"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleFactoryLoader"], _angular_core__WEBPACK_IMPORTED_MODULE_1__["Compiler"], ROUTES, ROUTER_CONFIGURATION, [UrlHandlingStrategy, new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]()], [RouteReuseStrategy, new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]()]]
      }, ChildrenOutletContexts, {
        provide: ActivatedRoute,
        useFactory: rootRoute,
        deps: [Router]
      }, {
        provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModuleFactoryLoader"],
        useClass: _angular_core__WEBPACK_IMPORTED_MODULE_1__["SystemJsNgModuleLoader"]
      }, RouterPreloader, NoPreloading, PreloadAllModules, {
        provide: ROUTER_CONFIGURATION,
        useValue: ɵ0
      }];

      function routerNgProbeToken() {
        return new _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgProbeToken"]('Router', Router);
      }
      /**
       * @description
       *
       * Adds directives and providers for in-app navigation among views defined in an application.
       * Use the Angular `Router` service to declaratively specify application states and manage state
       * transitions.
       *
       * You can import this NgModule multiple times, once for each lazy-loaded bundle.
       * However, only one `Router` service can be active.
       * To ensure this, there are two ways to register routes when importing this module:
       *
       * * The `forRoot()` method creates an `NgModule` that contains all the directives, the given
       * routes, and the `Router` service itself.
       * * The `forChild()` method creates an `NgModule` that contains all the directives and the given
       * routes, but does not include the `Router` service.
       *
       * @see [Routing and Navigation guide](guide/router) for an
       * overview of how the `Router` service should be used.
       *
       * @publicApi
       */


      var RouterModule = /*#__PURE__*/function () {
        // Note: We are injecting the Router so it gets created eagerly...
        function RouterModule(guard, router) {
          _classCallCheck2(this, RouterModule);
        }
        /**
         * Creates and configures a module with all the router providers and directives.
         * Optionally sets up an application listener to perform an initial navigation.
         *
         * When registering the NgModule at the root, import as follows:
         *
         * ```
         * @NgModule({
         *   imports: [RouterModule.forRoot(ROUTES)]
         * })
         * class MyNgModule {}
         * ```
         *
         * @param routes An array of `Route` objects that define the navigation paths for the application.
         * @param config An `ExtraOptions` configuration object that controls how navigation is performed.
         * @return The new `NgModule`.
         *
         */


        _createClass2(RouterModule, null, [{
          key: "forRoot",
          value: function forRoot(routes, config) {
            return {
              ngModule: RouterModule,
              providers: [ROUTER_PROVIDERS, provideRoutes(routes), {
                provide: ROUTER_FORROOT_GUARD,
                useFactory: provideForRootGuard,
                deps: [[Router, new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"](), new _angular_core__WEBPACK_IMPORTED_MODULE_1__["SkipSelf"]()]]
              }, {
                provide: ROUTER_CONFIGURATION,
                useValue: config ? config : {}
              }, {
                provide: _angular_common__WEBPACK_IMPORTED_MODULE_0__["LocationStrategy"],
                useFactory: provideLocationStrategy,
                deps: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["PlatformLocation"], [new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["APP_BASE_HREF"]), new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]()], ROUTER_CONFIGURATION]
              }, {
                provide: RouterScroller,
                useFactory: createRouterScroller,
                deps: [Router, _angular_common__WEBPACK_IMPORTED_MODULE_0__["ViewportScroller"], ROUTER_CONFIGURATION]
              }, {
                provide: PreloadingStrategy,
                useExisting: config && config.preloadingStrategy ? config.preloadingStrategy : NoPreloading
              }, {
                provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgProbeToken"],
                multi: true,
                useFactory: routerNgProbeToken
              }, provideRouterInitializer()]
            };
          }
          /**
           * Creates a module with all the router directives and a provider registering routes,
           * without creating a new Router service.
           * When registering for submodules and lazy-loaded submodules, create the NgModule as follows:
           *
           * ```
           * @NgModule({
           *   imports: [RouterModule.forChild(ROUTES)]
           * })
           * class MyNgModule {}
           * ```
           *
           * @param routes An array of `Route` objects that define the navigation paths for the submodule.
           * @return The new NgModule.
           *
           */

        }, {
          key: "forChild",
          value: function forChild(routes) {
            return {
              ngModule: RouterModule,
              providers: [provideRoutes(routes)]
            };
          }
        }]);

        return RouterModule;
      }();

      RouterModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({
        type: RouterModule
      });
      RouterModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({
        factory: function RouterModule_Factory(t) {
          return new (t || RouterModule)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](ROUTER_FORROOT_GUARD, 8), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](Router, 8));
        }
      });

      RouterModule.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [ROUTER_FORROOT_GUARD]
          }]
        }, {
          type: Router,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }]
        }];
      };

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](RouterModule, {
          declarations: [RouterOutlet, RouterLink, RouterLinkWithHref, RouterLinkActive, ɵEmptyOutletComponent],
          exports: [RouterOutlet, RouterLink, RouterLinkWithHref, RouterLinkActive, ɵEmptyOutletComponent]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](RouterModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
          args: [{
            declarations: ROUTER_DIRECTIVES,
            exports: ROUTER_DIRECTIVES,
            entryComponents: [ɵEmptyOutletComponent]
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [ROUTER_FORROOT_GUARD]
            }]
          }, {
            type: Router,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }]
          }];
        }, null);
      })();

      function createRouterScroller(router, viewportScroller, config) {
        if (config.scrollOffset) {
          viewportScroller.setOffset(config.scrollOffset);
        }

        return new RouterScroller(router, viewportScroller, config);
      }

      function provideLocationStrategy(platformLocationStrategy, baseHref) {
        var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
        return options.useHash ? new _angular_common__WEBPACK_IMPORTED_MODULE_0__["HashLocationStrategy"](platformLocationStrategy, baseHref) : new _angular_common__WEBPACK_IMPORTED_MODULE_0__["PathLocationStrategy"](platformLocationStrategy, baseHref);
      }

      function provideForRootGuard(router) {
        if ((typeof ngDevMode === 'undefined' || ngDevMode) && router) {
          throw new Error("RouterModule.forRoot() called twice. Lazy loaded modules should use RouterModule.forChild() instead.");
        }

        return 'guarded';
      }
      /**
       * Registers a [DI provider](guide/glossary#provider) for a set of routes.
       * @param routes The route configuration to provide.
       *
       * @usageNotes
       *
       * ```
       * @NgModule({
       *   imports: [RouterModule.forChild(ROUTES)],
       *   providers: [provideRoutes(EXTRA_ROUTES)]
       * })
       * class MyNgModule {}
       * ```
       *
       * @publicApi
       */


      function provideRoutes(routes) {
        return [{
          provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ANALYZE_FOR_ENTRY_COMPONENTS"],
          multi: true,
          useValue: routes
        }, {
          provide: ROUTES,
          multi: true,
          useValue: routes
        }];
      }

      function setupRouter(urlSerializer, contexts, location, injector, loader, compiler, config) {
        var opts = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : {};
        var urlHandlingStrategy = arguments.length > 8 ? arguments[8] : undefined;
        var routeReuseStrategy = arguments.length > 9 ? arguments[9] : undefined;
        var router = new Router(null, urlSerializer, contexts, location, injector, loader, compiler, flatten(config));

        if (urlHandlingStrategy) {
          router.urlHandlingStrategy = urlHandlingStrategy;
        }

        if (routeReuseStrategy) {
          router.routeReuseStrategy = routeReuseStrategy;
        }

        assignExtraOptionsToRouter(opts, router);

        if (opts.enableTracing) {
          var dom = Object(_angular_common__WEBPACK_IMPORTED_MODULE_0__["ɵgetDOM"])();
          router.events.subscribe(function (e) {
            dom.logGroup("Router Event: ".concat(e.constructor.name));
            dom.log(e.toString());
            dom.log(e);
            dom.logGroupEnd();
          });
        }

        return router;
      }

      function assignExtraOptionsToRouter(opts, router) {
        if (opts.errorHandler) {
          router.errorHandler = opts.errorHandler;
        }

        if (opts.malformedUriErrorHandler) {
          router.malformedUriErrorHandler = opts.malformedUriErrorHandler;
        }

        if (opts.onSameUrlNavigation) {
          router.onSameUrlNavigation = opts.onSameUrlNavigation;
        }

        if (opts.paramsInheritanceStrategy) {
          router.paramsInheritanceStrategy = opts.paramsInheritanceStrategy;
        }

        if (opts.relativeLinkResolution) {
          router.relativeLinkResolution = opts.relativeLinkResolution;
        }

        if (opts.urlUpdateStrategy) {
          router.urlUpdateStrategy = opts.urlUpdateStrategy;
        }
      }

      function rootRoute(router) {
        return router.routerState.root;
      }
      /**
       * Router initialization requires two steps:
       *
       * First, we start the navigation in a `APP_INITIALIZER` to block the bootstrap if
       * a resolver or a guard executes asynchronously.
       *
       * Next, we actually run activation in a `BOOTSTRAP_LISTENER`, using the
       * `afterPreactivation` hook provided by the router.
       * The router navigation starts, reaches the point when preactivation is done, and then
       * pauses. It waits for the hook to be resolved. We then resolve it only in a bootstrap listener.
       */


      var RouterInitializer = /*#__PURE__*/function () {
        function RouterInitializer(injector) {
          _classCallCheck2(this, RouterInitializer);

          this.injector = injector;
          this.initNavigation = false;
          this.resultOfPreactivationDone = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
        }

        _createClass2(RouterInitializer, [{
          key: "appInitializer",
          value: function appInitializer() {
            var _this981 = this;

            var p = this.injector.get(_angular_common__WEBPACK_IMPORTED_MODULE_0__["LOCATION_INITIALIZED"], Promise.resolve(null));
            return p.then(function () {
              var resolve = null;
              var res = new Promise(function (r) {
                return resolve = r;
              });

              var router = _this981.injector.get(Router);

              var opts = _this981.injector.get(ROUTER_CONFIGURATION);

              if (opts.initialNavigation === 'disabled') {
                router.setUpLocationChangeListener();
                resolve(true);
              } else if ( // TODO: enabled is deprecated as of v11, can be removed in v13
              opts.initialNavigation === 'enabled' || opts.initialNavigation === 'enabledBlocking') {
                router.hooks.afterPreactivation = function () {
                  // only the initial navigation should be delayed
                  if (!_this981.initNavigation) {
                    _this981.initNavigation = true;
                    resolve(true);
                    return _this981.resultOfPreactivationDone; // subsequent navigations should not be delayed
                  } else {
                    return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(null);
                  }
                };

                router.initialNavigation();
              } else {
                resolve(true);
              }

              return res;
            });
          }
        }, {
          key: "bootstrapListener",
          value: function bootstrapListener(bootstrappedComponentRef) {
            var opts = this.injector.get(ROUTER_CONFIGURATION);
            var preloader = this.injector.get(RouterPreloader);
            var routerScroller = this.injector.get(RouterScroller);
            var router = this.injector.get(Router);
            var ref = this.injector.get(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ApplicationRef"]);

            if (bootstrappedComponentRef !== ref.components[0]) {
              return;
            } // Default case


            if (opts.initialNavigation === 'enabledNonBlocking' || opts.initialNavigation === undefined) {
              router.initialNavigation();
            }

            preloader.setUpPreloading();
            routerScroller.init();
            router.resetRootComponentType(ref.componentTypes[0]);
            this.resultOfPreactivationDone.next(null);
            this.resultOfPreactivationDone.complete();
          }
        }]);

        return RouterInitializer;
      }();

      RouterInitializer.ɵfac = function RouterInitializer_Factory(t) {
        return new (t || RouterInitializer)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]));
      };

      RouterInitializer.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"]({
        token: RouterInitializer,
        factory: RouterInitializer.ɵfac
      });

      RouterInitializer.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](RouterInitializer, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injector"]
          }];
        }, null);
      })();

      function getAppInitializer(r) {
        return r.appInitializer.bind(r);
      }

      function getBootstrapListener(r) {
        return r.bootstrapListener.bind(r);
      }
      /**
       * A [DI token](guide/glossary/#di-token) for the router initializer that
       * is called after the app is bootstrapped.
       *
       * @publicApi
       */


      var ROUTER_INITIALIZER = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('Router Initializer');

      function provideRouterInitializer() {
        return [RouterInitializer, {
          provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_INITIALIZER"],
          multi: true,
          useFactory: getAppInitializer,
          deps: [RouterInitializer]
        }, {
          provide: ROUTER_INITIALIZER,
          useFactory: getBootstrapListener,
          deps: [RouterInitializer]
        }, {
          provide: _angular_core__WEBPACK_IMPORTED_MODULE_1__["APP_BOOTSTRAP_LISTENER"],
          multi: true,
          useExisting: ROUTER_INITIALIZER
        }];
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @publicApi
       */


      var VERSION = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Version"]('12.0.0-next.1');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // This file only reexports content of the `src` folder. Keep it that way.

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=router.js.map

      /***/
    },

    /***/
    "tzUe":
    /*!***********************************************************************!*\
      !*** ./node_modules/ngx-audio-player/node_modules/tslib/tslib.es6.js ***!
      \***********************************************************************/

    /*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __createBinding, __exportStar, __values, __read, __spread, __spreadArrays, __spreadArray, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault, __classPrivateFieldGet, __classPrivateFieldSet */

    /***/
    function tzUe(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__extends", function () {
        return __extends;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__assign", function () {
        return _assign3;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__rest", function () {
        return __rest;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__decorate", function () {
        return __decorate;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__param", function () {
        return __param;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__metadata", function () {
        return __metadata;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__awaiter", function () {
        return __awaiter;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__generator", function () {
        return __generator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__createBinding", function () {
        return __createBinding;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__exportStar", function () {
        return __exportStar;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__values", function () {
        return __values;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__read", function () {
        return __read;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__spread", function () {
        return __spread;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__spreadArrays", function () {
        return __spreadArrays;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__spreadArray", function () {
        return __spreadArray;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__await", function () {
        return __await;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__asyncGenerator", function () {
        return __asyncGenerator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__asyncDelegator", function () {
        return __asyncDelegator;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__asyncValues", function () {
        return __asyncValues;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__makeTemplateObject", function () {
        return __makeTemplateObject;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__importStar", function () {
        return __importStar;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__importDefault", function () {
        return __importDefault;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__classPrivateFieldGet", function () {
        return __classPrivateFieldGet;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "__classPrivateFieldSet", function () {
        return __classPrivateFieldSet;
      });
      /*! *****************************************************************************
      Copyright (c) Microsoft Corporation.
      
      Permission to use, copy, modify, and/or distribute this software for any
      purpose with or without fee is hereby granted.
      
      THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
      REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
      AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
      INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
      LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
      OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
      PERFORMANCE OF THIS SOFTWARE.
      ***************************************************************************** */

      /* global Reflect, Promise */


      var _extendStatics8 = function extendStatics(d, b) {
        _extendStatics8 = Object.setPrototypeOf || {
          __proto__: []
        } instanceof Array && function (d, b) {
          d.__proto__ = b;
        } || function (d, b) {
          for (var p in b) {
            if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
          }
        };

        return _extendStatics8(d, b);
      };

      function __extends(d, b) {
        if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");

        _extendStatics8(d, b);

        function __() {
          this.constructor = d;
        }

        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
      }

      var _assign3 = function __assign() {
        _assign3 = Object.assign || function __assign(t) {
          for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];

            for (var p in s) {
              if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
            }
          }

          return t;
        };

        return _assign3.apply(this, arguments);
      };

      function __rest(s, e) {
        var t = {};

        for (var p in s) {
          if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
        }

        if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
        }
        return t;
      }

      function __decorate(decorators, target, key, desc) {
        var c = arguments.length,
            r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
            d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
          if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        }
        return c > 3 && r && Object.defineProperty(target, key, r), r;
      }

      function __param(paramIndex, decorator) {
        return function (target, key) {
          decorator(target, key, paramIndex);
        };
      }

      function __metadata(metadataKey, metadataValue) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
      }

      function __awaiter(thisArg, _arguments, P, generator) {
        function adopt(value) {
          return value instanceof P ? value : new P(function (resolve) {
            resolve(value);
          });
        }

        return new (P || (P = Promise))(function (resolve, reject) {
          function fulfilled(value) {
            try {
              step(generator.next(value));
            } catch (e) {
              reject(e);
            }
          }

          function rejected(value) {
            try {
              step(generator["throw"](value));
            } catch (e) {
              reject(e);
            }
          }

          function step(result) {
            result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
          }

          step((generator = generator.apply(thisArg, _arguments || [])).next());
        });
      }

      function __generator(thisArg, body) {
        var _ = {
          label: 0,
          sent: function sent() {
            if (t[0] & 1) throw t[1];
            return t[1];
          },
          trys: [],
          ops: []
        },
            f,
            y,
            t,
            g;
        return g = {
          next: verb(0),
          "throw": verb(1),
          "return": verb(2)
        }, typeof Symbol === "function" && (g[Symbol.iterator] = function () {
          return this;
        }), g;

        function verb(n) {
          return function (v) {
            return step([n, v]);
          };
        }

        function step(op) {
          if (f) throw new TypeError("Generator is already executing.");

          while (_) {
            try {
              if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
              if (y = 0, t) op = [op[0] & 2, t.value];

              switch (op[0]) {
                case 0:
                case 1:
                  t = op;
                  break;

                case 4:
                  _.label++;
                  return {
                    value: op[1],
                    done: false
                  };

                case 5:
                  _.label++;
                  y = op[1];
                  op = [0];
                  continue;

                case 7:
                  op = _.ops.pop();

                  _.trys.pop();

                  continue;

                default:
                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
                    _ = 0;
                    continue;
                  }

                  if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
                    _.label = op[1];
                    break;
                  }

                  if (op[0] === 6 && _.label < t[1]) {
                    _.label = t[1];
                    t = op;
                    break;
                  }

                  if (t && _.label < t[2]) {
                    _.label = t[2];

                    _.ops.push(op);

                    break;
                  }

                  if (t[2]) _.ops.pop();

                  _.trys.pop();

                  continue;
              }

              op = body.call(thisArg, _);
            } catch (e) {
              op = [6, e];
              y = 0;
            } finally {
              f = t = 0;
            }
          }

          if (op[0] & 5) throw op[1];
          return {
            value: op[0] ? op[1] : void 0,
            done: true
          };
        }
      }

      var __createBinding = Object.create ? function (o, m, k, k2) {
        if (k2 === undefined) k2 = k;
        Object.defineProperty(o, k2, {
          enumerable: true,
          get: function get() {
            return m[k];
          }
        });
      } : function (o, m, k, k2) {
        if (k2 === undefined) k2 = k;
        o[k2] = m[k];
      };

      function __exportStar(m, o) {
        for (var p in m) {
          if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);
        }
      }

      function __values(o) {
        var s = typeof Symbol === "function" && Symbol.iterator,
            m = s && o[s],
            i = 0;
        if (m) return m.call(o);
        if (o && typeof o.length === "number") return {
          next: function next() {
            if (o && i >= o.length) o = void 0;
            return {
              value: o && o[i++],
              done: !o
            };
          }
        };
        throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
      }

      function __read(o, n) {
        var m = typeof Symbol === "function" && o[Symbol.iterator];
        if (!m) return o;
        var i = m.call(o),
            r,
            ar = [],
            e;

        try {
          while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
            ar.push(r.value);
          }
        } catch (error) {
          e = {
            error: error
          };
        } finally {
          try {
            if (r && !r.done && (m = i["return"])) m.call(i);
          } finally {
            if (e) throw e.error;
          }
        }

        return ar;
      }
      /** @deprecated */


      function __spread() {
        for (var ar = [], i = 0; i < arguments.length; i++) {
          ar = ar.concat(__read(arguments[i]));
        }

        return ar;
      }
      /** @deprecated */


      function __spreadArrays() {
        for (var s = 0, i = 0, il = arguments.length; i < il; i++) {
          s += arguments[i].length;
        }

        for (var r = Array(s), k = 0, i = 0; i < il; i++) {
          for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {
            r[k] = a[j];
          }
        }

        return r;
      }

      function __spreadArray(to, from) {
        for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) {
          to[j] = from[i];
        }

        return to;
      }

      function __await(v) {
        return this instanceof __await ? (this.v = v, this) : new __await(v);
      }

      function __asyncGenerator(thisArg, _arguments, generator) {
        if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
        var g = generator.apply(thisArg, _arguments || []),
            i,
            q = [];
        return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {
          return this;
        }, i;

        function verb(n) {
          if (g[n]) i[n] = function (v) {
            return new Promise(function (a, b) {
              q.push([n, v, a, b]) > 1 || resume(n, v);
            });
          };
        }

        function resume(n, v) {
          try {
            step(g[n](v));
          } catch (e) {
            settle(q[0][3], e);
          }
        }

        function step(r) {
          r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
        }

        function fulfill(value) {
          resume("next", value);
        }

        function reject(value) {
          resume("throw", value);
        }

        function settle(f, v) {
          if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);
        }
      }

      function __asyncDelegator(o) {
        var i, p;
        return i = {}, verb("next"), verb("throw", function (e) {
          throw e;
        }), verb("return"), i[Symbol.iterator] = function () {
          return this;
        }, i;

        function verb(n, f) {
          i[n] = o[n] ? function (v) {
            return (p = !p) ? {
              value: __await(o[n](v)),
              done: n === "return"
            } : f ? f(v) : v;
          } : f;
        }
      }

      function __asyncValues(o) {
        if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
        var m = o[Symbol.asyncIterator],
            i;
        return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {
          return this;
        }, i);

        function verb(n) {
          i[n] = o[n] && function (v) {
            return new Promise(function (resolve, reject) {
              v = o[n](v), settle(resolve, reject, v.done, v.value);
            });
          };
        }

        function settle(resolve, reject, d, v) {
          Promise.resolve(v).then(function (v) {
            resolve({
              value: v,
              done: d
            });
          }, reject);
        }
      }

      function __makeTemplateObject(cooked, raw) {
        if (Object.defineProperty) {
          Object.defineProperty(cooked, "raw", {
            value: raw
          });
        } else {
          cooked.raw = raw;
        }

        return cooked;
      }

      ;

      var __setModuleDefault = Object.create ? function (o, v) {
        Object.defineProperty(o, "default", {
          enumerable: true,
          value: v
        });
      } : function (o, v) {
        o["default"] = v;
      };

      function __importStar(mod) {
        if (mod && mod.__esModule) return mod;
        var result = {};
        if (mod != null) for (var k in mod) {
          if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
        }

        __setModuleDefault(result, mod);

        return result;
      }

      function __importDefault(mod) {
        return mod && mod.__esModule ? mod : {
          "default": mod
        };
      }

      function __classPrivateFieldGet(receiver, privateMap) {
        if (!privateMap.has(receiver)) {
          throw new TypeError("attempted to get private field on non-instance");
        }

        return privateMap.get(receiver);
      }

      function __classPrivateFieldSet(receiver, privateMap, value) {
        if (!privateMap.has(receiver)) {
          throw new TypeError("attempted to set private field on non-instance");
        }

        privateMap.set(receiver, value);
        return value;
      }
      /***/

    },

    /***/
    "u+tA":
    /*!*************************************************************!*\
      !*** ./node_modules/ng2-scroll-to-el/__ivy_ngcc__/index.js ***!
      \*************************************************************/

    /*! exports provided: ScrollToModule, ScrollToService, ScrollToDirective */

    /***/
    function uTA(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony import */


      var _scrollTo_module__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./scrollTo.module */
      "KkXm");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "ScrollToModule", function () {
        return _scrollTo_module__WEBPACK_IMPORTED_MODULE_0__["ScrollToModule"];
      });
      /* harmony import */


      var _scrollTo_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./scrollTo.service */
      "kizl");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "ScrollToService", function () {
        return _scrollTo_service__WEBPACK_IMPORTED_MODULE_1__["ScrollToService"];
      });
      /* harmony import */


      var _scrollTo_directive__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./scrollTo.directive */
      "QRdw");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "ScrollToDirective", function () {
        return _scrollTo_directive__WEBPACK_IMPORTED_MODULE_2__["ScrollToDirective"];
      }); //# sourceMappingURL=index.js.map

      /***/

    },

    /***/
    "u3GI":
    /*!*********************************************!*\
      !*** ./node_modules/moment/locale/de-ch.js ***!
      \*********************************************/

    /*! no static exports found */

    /***/
    function u3GI(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : German (Switzerland) [de-ch]
      //! author : sschueller : https://github.com/sschueller
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        function processRelativeTime(number, withoutSuffix, key, isFuture) {
          var format = {
            m: ['eine Minute', 'einer Minute'],
            h: ['eine Stunde', 'einer Stunde'],
            d: ['ein Tag', 'einem Tag'],
            dd: [number + ' Tage', number + ' Tagen'],
            w: ['eine Woche', 'einer Woche'],
            M: ['ein Monat', 'einem Monat'],
            MM: [number + ' Monate', number + ' Monaten'],
            y: ['ein Jahr', 'einem Jahr'],
            yy: [number + ' Jahre', number + ' Jahren']
          };
          return withoutSuffix ? format[key][0] : format[key][1];
        }

        var deCh = moment.defineLocale('de-ch', {
          months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
          monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),
          monthsParseExact: true,
          weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
          weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
          weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY HH:mm',
            LLLL: 'dddd, D. MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[heute um] LT [Uhr]',
            sameElse: 'L',
            nextDay: '[morgen um] LT [Uhr]',
            nextWeek: 'dddd [um] LT [Uhr]',
            lastDay: '[gestern um] LT [Uhr]',
            lastWeek: '[letzten] dddd [um] LT [Uhr]'
          },
          relativeTime: {
            future: 'in %s',
            past: 'vor %s',
            s: 'ein paar Sekunden',
            ss: '%d Sekunden',
            m: processRelativeTime,
            mm: '%d Minuten',
            h: processRelativeTime,
            hh: '%d Stunden',
            d: processRelativeTime,
            dd: processRelativeTime,
            w: processRelativeTime,
            ww: '%d Wochen',
            M: processRelativeTime,
            MM: processRelativeTime,
            y: processRelativeTime,
            yy: processRelativeTime
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return deCh;
      });
      /***/

    },

    /***/
    "u47x":
    /*!*****************************************************************!*\
      !*** ./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/a11y.js ***!
      \*****************************************************************/

    /*! exports provided: A11yModule, ActiveDescendantKeyManager, AriaDescriber, CDK_DESCRIBEDBY_HOST_ATTRIBUTE, CDK_DESCRIBEDBY_ID_PREFIX, CdkAriaLive, CdkMonitorFocus, CdkTrapFocus, ConfigurableFocusTrap, ConfigurableFocusTrapFactory, EventListenerFocusTrapInertStrategy, FOCUS_MONITOR_DEFAULT_OPTIONS, FOCUS_TRAP_INERT_STRATEGY, FocusKeyManager, FocusMonitor, FocusTrap, FocusTrapFactory, HighContrastModeDetector, InteractivityChecker, IsFocusableConfig, LIVE_ANNOUNCER_DEFAULT_OPTIONS, LIVE_ANNOUNCER_ELEMENT_TOKEN, LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY, ListKeyManager, LiveAnnouncer, MESSAGES_CONTAINER_ID, TOUCH_BUFFER_MS, isFakeMousedownFromScreenReader, ɵangular_material_src_cdk_a11y_a11y_a, ɵangular_material_src_cdk_a11y_a11y_b */

    /***/
    function u47x(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "A11yModule", function () {
        return A11yModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ActiveDescendantKeyManager", function () {
        return ActiveDescendantKeyManager;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AriaDescriber", function () {
        return AriaDescriber;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CDK_DESCRIBEDBY_HOST_ATTRIBUTE", function () {
        return CDK_DESCRIBEDBY_HOST_ATTRIBUTE;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CDK_DESCRIBEDBY_ID_PREFIX", function () {
        return CDK_DESCRIBEDBY_ID_PREFIX;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkAriaLive", function () {
        return CdkAriaLive;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkMonitorFocus", function () {
        return CdkMonitorFocus;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkTrapFocus", function () {
        return CdkTrapFocus;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ConfigurableFocusTrap", function () {
        return ConfigurableFocusTrap;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ConfigurableFocusTrapFactory", function () {
        return ConfigurableFocusTrapFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "EventListenerFocusTrapInertStrategy", function () {
        return EventListenerFocusTrapInertStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FOCUS_MONITOR_DEFAULT_OPTIONS", function () {
        return FOCUS_MONITOR_DEFAULT_OPTIONS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FOCUS_TRAP_INERT_STRATEGY", function () {
        return FOCUS_TRAP_INERT_STRATEGY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FocusKeyManager", function () {
        return FocusKeyManager;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FocusMonitor", function () {
        return FocusMonitor;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FocusTrap", function () {
        return FocusTrap;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FocusTrapFactory", function () {
        return FocusTrapFactory;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "HighContrastModeDetector", function () {
        return HighContrastModeDetector;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "InteractivityChecker", function () {
        return InteractivityChecker;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "IsFocusableConfig", function () {
        return IsFocusableConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LIVE_ANNOUNCER_DEFAULT_OPTIONS", function () {
        return LIVE_ANNOUNCER_DEFAULT_OPTIONS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LIVE_ANNOUNCER_ELEMENT_TOKEN", function () {
        return LIVE_ANNOUNCER_ELEMENT_TOKEN;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY", function () {
        return LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ListKeyManager", function () {
        return ListKeyManager;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "LiveAnnouncer", function () {
        return LiveAnnouncer;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MESSAGES_CONTAINER_ID", function () {
        return MESSAGES_CONTAINER_ID;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "TOUCH_BUFFER_MS", function () {
        return TOUCH_BUFFER_MS;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isFakeMousedownFromScreenReader", function () {
        return isFakeMousedownFromScreenReader;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_material_src_cdk_a11y_a11y_a", function () {
        return FocusTrapManager;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ɵangular_material_src_cdk_a11y_a11y_b", function () {
        return ConfigurableFocusTrapConfig;
      });
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/cdk/keycodes */
      "FtGj");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");
      /* harmony import */


      var _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! @angular/cdk/platform */
      "nLfN");
      /* harmony import */


      var _angular_cdk_observers__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! @angular/cdk/observers */
      "GU7r");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** IDs are delimited by an empty space, as per the spec. */


      var ID_DELIMITER = ' ';
      /**
       * Adds the given ID to the specified ARIA attribute on an element.
       * Used for attributes such as aria-labelledby, aria-owns, etc.
       */

      function addAriaReferencedId(el, attr, id) {
        var ids = getAriaReferenceIds(el, attr);

        if (ids.some(function (existingId) {
          return existingId.trim() == id.trim();
        })) {
          return;
        }

        ids.push(id.trim());
        el.setAttribute(attr, ids.join(ID_DELIMITER));
      }
      /**
       * Removes the given ID from the specified ARIA attribute on an element.
       * Used for attributes such as aria-labelledby, aria-owns, etc.
       */


      function removeAriaReferencedId(el, attr, id) {
        var ids = getAriaReferenceIds(el, attr);
        var filteredIds = ids.filter(function (val) {
          return val != id.trim();
        });

        if (filteredIds.length) {
          el.setAttribute(attr, filteredIds.join(ID_DELIMITER));
        } else {
          el.removeAttribute(attr);
        }
      }
      /**
       * Gets the list of IDs referenced by the given ARIA attribute on an element.
       * Used for attributes such as aria-labelledby, aria-owns, etc.
       */


      function getAriaReferenceIds(el, attr) {
        // Get string array of all individual ids (whitespace delimited) in the attribute value
        return (el.getAttribute(attr) || '').match(/\S+/g) || [];
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** ID used for the body container where all messages are appended. */


      var MESSAGES_CONTAINER_ID = 'cdk-describedby-message-container';
      /** ID prefix used for each created message element. */

      var CDK_DESCRIBEDBY_ID_PREFIX = 'cdk-describedby-message';
      /** Attribute given to each host element that is described by a message element. */

      var CDK_DESCRIBEDBY_HOST_ATTRIBUTE = 'cdk-describedby-host';
      /** Global incremental identifier for each registered message element. */

      var nextId = 0;
      /** Global map of all registered message elements that have been placed into the document. */

      var messageRegistry = new Map();
      /** Container for all registered messages. */

      var messagesContainer = null;
      /**
       * Utility that creates visually hidden elements with a message content. Useful for elements that
       * want to use aria-describedby to further describe themselves without adding additional visual
       * content.
       */

      var AriaDescriber = /*#__PURE__*/function () {
        function AriaDescriber(_document) {
          _classCallCheck2(this, AriaDescriber);

          this._document = _document;
        }

        _createClass2(AriaDescriber, [{
          key: "describe",
          value: function describe(hostElement, message, role) {
            if (!this._canBeDescribed(hostElement, message)) {
              return;
            }

            var key = getKey(message, role);

            if (typeof message !== 'string') {
              // We need to ensure that the element has an ID.
              setMessageId(message);
              messageRegistry.set(key, {
                messageElement: message,
                referenceCount: 0
              });
            } else if (!messageRegistry.has(key)) {
              this._createMessageElement(message, role);
            }

            if (!this._isElementDescribedByMessage(hostElement, key)) {
              this._addMessageReference(hostElement, key);
            }
          }
        }, {
          key: "removeDescription",
          value: function removeDescription(hostElement, message, role) {
            if (!message || !this._isElementNode(hostElement)) {
              return;
            }

            var key = getKey(message, role);

            if (this._isElementDescribedByMessage(hostElement, key)) {
              this._removeMessageReference(hostElement, key);
            } // If the message is a string, it means that it's one that we created for the
            // consumer so we can remove it safely, otherwise we should leave it in place.


            if (typeof message === 'string') {
              var registeredMessage = messageRegistry.get(key);

              if (registeredMessage && registeredMessage.referenceCount === 0) {
                this._deleteMessageElement(key);
              }
            }

            if (messagesContainer && messagesContainer.childNodes.length === 0) {
              this._deleteMessagesContainer();
            }
          }
          /** Unregisters all created message elements and removes the message container. */

        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            var describedElements = this._document.querySelectorAll("[".concat(CDK_DESCRIBEDBY_HOST_ATTRIBUTE, "]"));

            for (var i = 0; i < describedElements.length; i++) {
              this._removeCdkDescribedByReferenceIds(describedElements[i]);

              describedElements[i].removeAttribute(CDK_DESCRIBEDBY_HOST_ATTRIBUTE);
            }

            if (messagesContainer) {
              this._deleteMessagesContainer();
            }

            messageRegistry.clear();
          }
          /**
           * Creates a new element in the visually hidden message container element with the message
           * as its content and adds it to the message registry.
           */

        }, {
          key: "_createMessageElement",
          value: function _createMessageElement(message, role) {
            var messageElement = this._document.createElement('div');

            setMessageId(messageElement);
            messageElement.textContent = message;

            if (role) {
              messageElement.setAttribute('role', role);
            }

            this._createMessagesContainer();

            messagesContainer.appendChild(messageElement);
            messageRegistry.set(getKey(message, role), {
              messageElement: messageElement,
              referenceCount: 0
            });
          }
          /** Deletes the message element from the global messages container. */

        }, {
          key: "_deleteMessageElement",
          value: function _deleteMessageElement(key) {
            var registeredMessage = messageRegistry.get(key);
            var messageElement = registeredMessage && registeredMessage.messageElement;

            if (messagesContainer && messageElement) {
              messagesContainer.removeChild(messageElement);
            }

            messageRegistry["delete"](key);
          }
          /** Creates the global container for all aria-describedby messages. */

        }, {
          key: "_createMessagesContainer",
          value: function _createMessagesContainer() {
            if (!messagesContainer) {
              var preExistingContainer = this._document.getElementById(MESSAGES_CONTAINER_ID); // When going from the server to the client, we may end up in a situation where there's
              // already a container on the page, but we don't have a reference to it. Clear the
              // old container so we don't get duplicates. Doing this, instead of emptying the previous
              // container, should be slightly faster.


              if (preExistingContainer && preExistingContainer.parentNode) {
                preExistingContainer.parentNode.removeChild(preExistingContainer);
              }

              messagesContainer = this._document.createElement('div');
              messagesContainer.id = MESSAGES_CONTAINER_ID; // We add `visibility: hidden` in order to prevent text in this container from
              // being searchable by the browser's Ctrl + F functionality.
              // Screen-readers will still read the description for elements with aria-describedby even
              // when the description element is not visible.

              messagesContainer.style.visibility = 'hidden'; // Even though we use `visibility: hidden`, we still apply `cdk-visually-hidden` so that
              // the description element doesn't impact page layout.

              messagesContainer.classList.add('cdk-visually-hidden');

              this._document.body.appendChild(messagesContainer);
            }
          }
          /** Deletes the global messages container. */

        }, {
          key: "_deleteMessagesContainer",
          value: function _deleteMessagesContainer() {
            if (messagesContainer && messagesContainer.parentNode) {
              messagesContainer.parentNode.removeChild(messagesContainer);
              messagesContainer = null;
            }
          }
          /** Removes all cdk-describedby messages that are hosted through the element. */

        }, {
          key: "_removeCdkDescribedByReferenceIds",
          value: function _removeCdkDescribedByReferenceIds(element) {
            // Remove all aria-describedby reference IDs that are prefixed by CDK_DESCRIBEDBY_ID_PREFIX
            var originalReferenceIds = getAriaReferenceIds(element, 'aria-describedby').filter(function (id) {
              return id.indexOf(CDK_DESCRIBEDBY_ID_PREFIX) != 0;
            });
            element.setAttribute('aria-describedby', originalReferenceIds.join(' '));
          }
          /**
           * Adds a message reference to the element using aria-describedby and increments the registered
           * message's reference count.
           */

        }, {
          key: "_addMessageReference",
          value: function _addMessageReference(element, key) {
            var registeredMessage = messageRegistry.get(key); // Add the aria-describedby reference and set the
            // describedby_host attribute to mark the element.

            addAriaReferencedId(element, 'aria-describedby', registeredMessage.messageElement.id);
            element.setAttribute(CDK_DESCRIBEDBY_HOST_ATTRIBUTE, '');
            registeredMessage.referenceCount++;
          }
          /**
           * Removes a message reference from the element using aria-describedby
           * and decrements the registered message's reference count.
           */

        }, {
          key: "_removeMessageReference",
          value: function _removeMessageReference(element, key) {
            var registeredMessage = messageRegistry.get(key);
            registeredMessage.referenceCount--;
            removeAriaReferencedId(element, 'aria-describedby', registeredMessage.messageElement.id);
            element.removeAttribute(CDK_DESCRIBEDBY_HOST_ATTRIBUTE);
          }
          /** Returns true if the element has been described by the provided message ID. */

        }, {
          key: "_isElementDescribedByMessage",
          value: function _isElementDescribedByMessage(element, key) {
            var referenceIds = getAriaReferenceIds(element, 'aria-describedby');
            var registeredMessage = messageRegistry.get(key);
            var messageId = registeredMessage && registeredMessage.messageElement.id;
            return !!messageId && referenceIds.indexOf(messageId) != -1;
          }
          /** Determines whether a message can be described on a particular element. */

        }, {
          key: "_canBeDescribed",
          value: function _canBeDescribed(element, message) {
            if (!this._isElementNode(element)) {
              return false;
            }

            if (message && typeof message === 'object') {
              // We'd have to make some assumptions about the description element's text, if the consumer
              // passed in an element. Assume that if an element is passed in, the consumer has verified
              // that it can be used as a description.
              return true;
            }

            var trimmedMessage = message == null ? '' : "".concat(message).trim();
            var ariaLabel = element.getAttribute('aria-label'); // We shouldn't set descriptions if they're exactly the same as the `aria-label` of the
            // element, because screen readers will end up reading out the same text twice in a row.

            return trimmedMessage ? !ariaLabel || ariaLabel.trim() !== trimmedMessage : false;
          }
          /** Checks whether a node is an Element node. */

        }, {
          key: "_isElementNode",
          value: function _isElementNode(element) {
            return element.nodeType === this._document.ELEMENT_NODE;
          }
        }]);

        return AriaDescriber;
      }();

      AriaDescriber.ɵfac = function AriaDescriber_Factory(t) {
        return new (t || AriaDescriber)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]));
      };

      AriaDescriber.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function AriaDescriber_Factory() {
          return new AriaDescriber(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]));
        },
        token: AriaDescriber,
        providedIn: "root"
      });

      AriaDescriber.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](AriaDescriber, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
            }]
          }];
        }, null);
      })();
      /** Gets a key that can be used to look messages up in the registry. */


      function getKey(message, role) {
        return typeof message === 'string' ? "".concat(role || '', "/").concat(message) : message;
      }
      /** Assigns a unique ID to an element, if it doesn't have one already. */


      function setMessageId(element) {
        if (!element.id) {
          element.id = "".concat(CDK_DESCRIBEDBY_ID_PREFIX, "-").concat(nextId++);
        }
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * This class manages keyboard events for selectable lists. If you pass it a query list
       * of items, it will set the active item correctly when arrow events occur.
       */


      var ListKeyManager = /*#__PURE__*/function () {
        function ListKeyManager(_items) {
          var _this982 = this;

          _classCallCheck2(this, ListKeyManager);

          this._items = _items;
          this._activeItemIndex = -1;
          this._activeItem = null;
          this._wrap = false;
          this._letterKeyStream = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          this._typeaheadSubscription = rxjs__WEBPACK_IMPORTED_MODULE_2__["Subscription"].EMPTY;
          this._vertical = true;
          this._allowedModifierKeys = [];
          this._homeAndEnd = false;
          /**
           * Predicate function that can be used to check whether an item should be skipped
           * by the key manager. By default, disabled items are skipped.
           */

          this._skipPredicateFn = function (item) {
            return item.disabled;
          }; // Buffer for the letters that the user has pressed when the typeahead option is turned on.


          this._pressedLetters = [];
          /**
           * Stream that emits any time the TAB key is pressed, so components can react
           * when focus is shifted off of the list.
           */

          this.tabOut = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          /** Stream that emits whenever the active item of the list manager changes. */

          this.change = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"](); // We allow for the items to be an array because, in some cases, the consumer may
          // not have access to a QueryList of the items they want to manage (e.g. when the
          // items aren't being collected via `ViewChildren` or `ContentChildren`).

          if (_items instanceof _angular_core__WEBPACK_IMPORTED_MODULE_1__["QueryList"]) {
            _items.changes.subscribe(function (newItems) {
              if (_this982._activeItem) {
                var itemArray = newItems.toArray();
                var newIndex = itemArray.indexOf(_this982._activeItem);

                if (newIndex > -1 && newIndex !== _this982._activeItemIndex) {
                  _this982._activeItemIndex = newIndex;
                }
              }
            });
          }
        }
        /**
         * Sets the predicate function that determines which items should be skipped by the
         * list key manager.
         * @param predicate Function that determines whether the given item should be skipped.
         */


        _createClass2(ListKeyManager, [{
          key: "skipPredicate",
          value: function skipPredicate(predicate) {
            this._skipPredicateFn = predicate;
            return this;
          }
          /**
           * Configures wrapping mode, which determines whether the active item will wrap to
           * the other end of list when there are no more items in the given direction.
           * @param shouldWrap Whether the list should wrap when reaching the end.
           */

        }, {
          key: "withWrap",
          value: function withWrap() {
            var shouldWrap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
            this._wrap = shouldWrap;
            return this;
          }
          /**
           * Configures whether the key manager should be able to move the selection vertically.
           * @param enabled Whether vertical selection should be enabled.
           */

        }, {
          key: "withVerticalOrientation",
          value: function withVerticalOrientation() {
            var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
            this._vertical = enabled;
            return this;
          }
          /**
           * Configures the key manager to move the selection horizontally.
           * Passing in `null` will disable horizontal movement.
           * @param direction Direction in which the selection can be moved.
           */

        }, {
          key: "withHorizontalOrientation",
          value: function withHorizontalOrientation(direction) {
            this._horizontal = direction;
            return this;
          }
          /**
           * Modifier keys which are allowed to be held down and whose default actions will be prevented
           * as the user is pressing the arrow keys. Defaults to not allowing any modifier keys.
           */

        }, {
          key: "withAllowedModifierKeys",
          value: function withAllowedModifierKeys(keys) {
            this._allowedModifierKeys = keys;
            return this;
          }
          /**
           * Turns on typeahead mode which allows users to set the active item by typing.
           * @param debounceInterval Time to wait after the last keystroke before setting the active item.
           */

        }, {
          key: "withTypeAhead",
          value: function withTypeAhead() {
            var _this983 = this;

            var debounceInterval = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 200;

            if ((typeof ngDevMode === 'undefined' || ngDevMode) && this._items.length && this._items.some(function (item) {
              return typeof item.getLabel !== 'function';
            })) {
              throw Error('ListKeyManager items in typeahead mode must implement the `getLabel` method.');
            }

            this._typeaheadSubscription.unsubscribe(); // Debounce the presses of non-navigational keys, collect the ones that correspond to letters
            // and convert those letters back into a string. Afterwards find the first item that starts
            // with that string and select it.


            this._typeaheadSubscription = this._letterKeyStream.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["tap"])(function (letter) {
              return _this983._pressedLetters.push(letter);
            }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["debounceTime"])(debounceInterval), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["filter"])(function () {
              return _this983._pressedLetters.length > 0;
            }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["map"])(function () {
              return _this983._pressedLetters.join('');
            })).subscribe(function (inputString) {
              var items = _this983._getItemsArray(); // Start at 1 because we want to start searching at the item immediately
              // following the current active item.


              for (var i = 1; i < items.length + 1; i++) {
                var index = (_this983._activeItemIndex + i) % items.length;
                var item = items[index];

                if (!_this983._skipPredicateFn(item) && item.getLabel().toUpperCase().trim().indexOf(inputString) === 0) {
                  _this983.setActiveItem(index);

                  break;
                }
              }

              _this983._pressedLetters = [];
            });
            return this;
          }
          /**
           * Configures the key manager to activate the first and last items
           * respectively when the Home or End key is pressed.
           * @param enabled Whether pressing the Home or End key activates the first/last item.
           */

        }, {
          key: "withHomeAndEnd",
          value: function withHomeAndEnd() {
            var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
            this._homeAndEnd = enabled;
            return this;
          }
        }, {
          key: "setActiveItem",
          value: function setActiveItem(item) {
            var previousActiveItem = this._activeItem;
            this.updateActiveItem(item);

            if (this._activeItem !== previousActiveItem) {
              this.change.next(this._activeItemIndex);
            }
          }
          /**
           * Sets the active item depending on the key event passed in.
           * @param event Keyboard event to be used for determining which element should be active.
           */

        }, {
          key: "onKeydown",
          value: function onKeydown(event) {
            var _this984 = this;

            var keyCode = event.keyCode;
            var modifiers = ['altKey', 'ctrlKey', 'metaKey', 'shiftKey'];
            var isModifierAllowed = modifiers.every(function (modifier) {
              return !event[modifier] || _this984._allowedModifierKeys.indexOf(modifier) > -1;
            });

            switch (keyCode) {
              case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["TAB"]:
                this.tabOut.next();
                return;

              case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["DOWN_ARROW"]:
                if (this._vertical && isModifierAllowed) {
                  this.setNextItemActive();
                  break;
                } else {
                  return;
                }

              case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["UP_ARROW"]:
                if (this._vertical && isModifierAllowed) {
                  this.setPreviousItemActive();
                  break;
                } else {
                  return;
                }

              case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["RIGHT_ARROW"]:
                if (this._horizontal && isModifierAllowed) {
                  this._horizontal === 'rtl' ? this.setPreviousItemActive() : this.setNextItemActive();
                  break;
                } else {
                  return;
                }

              case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["LEFT_ARROW"]:
                if (this._horizontal && isModifierAllowed) {
                  this._horizontal === 'rtl' ? this.setNextItemActive() : this.setPreviousItemActive();
                  break;
                } else {
                  return;
                }

              case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["HOME"]:
                if (this._homeAndEnd && isModifierAllowed) {
                  this.setFirstItemActive();
                  break;
                } else {
                  return;
                }

              case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["END"]:
                if (this._homeAndEnd && isModifierAllowed) {
                  this.setLastItemActive();
                  break;
                } else {
                  return;
                }

              default:
                if (isModifierAllowed || Object(_angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["hasModifierKey"])(event, 'shiftKey')) {
                  // Attempt to use the `event.key` which also maps it to the user's keyboard language,
                  // otherwise fall back to resolving alphanumeric characters via the keyCode.
                  if (event.key && event.key.length === 1) {
                    this._letterKeyStream.next(event.key.toLocaleUpperCase());
                  } else if (keyCode >= _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["A"] && keyCode <= _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["Z"] || keyCode >= _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["ZERO"] && keyCode <= _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["NINE"]) {
                    this._letterKeyStream.next(String.fromCharCode(keyCode));
                  }
                } // Note that we return here, in order to avoid preventing
                // the default action of non-navigational keys.


                return;
            }

            this._pressedLetters = [];
            event.preventDefault();
          }
          /** Index of the currently active item. */

        }, {
          key: "activeItemIndex",
          get: function get() {
            return this._activeItemIndex;
          }
          /** The active item. */

        }, {
          key: "activeItem",
          get: function get() {
            return this._activeItem;
          }
          /** Gets whether the user is currently typing into the manager using the typeahead feature. */

        }, {
          key: "isTyping",
          value: function isTyping() {
            return this._pressedLetters.length > 0;
          }
          /** Sets the active item to the first enabled item in the list. */

        }, {
          key: "setFirstItemActive",
          value: function setFirstItemActive() {
            this._setActiveItemByIndex(0, 1);
          }
          /** Sets the active item to the last enabled item in the list. */

        }, {
          key: "setLastItemActive",
          value: function setLastItemActive() {
            this._setActiveItemByIndex(this._items.length - 1, -1);
          }
          /** Sets the active item to the next enabled item in the list. */

        }, {
          key: "setNextItemActive",
          value: function setNextItemActive() {
            this._activeItemIndex < 0 ? this.setFirstItemActive() : this._setActiveItemByDelta(1);
          }
          /** Sets the active item to a previous enabled item in the list. */

        }, {
          key: "setPreviousItemActive",
          value: function setPreviousItemActive() {
            this._activeItemIndex < 0 && this._wrap ? this.setLastItemActive() : this._setActiveItemByDelta(-1);
          }
        }, {
          key: "updateActiveItem",
          value: function updateActiveItem(item) {
            var itemArray = this._getItemsArray();

            var index = typeof item === 'number' ? item : itemArray.indexOf(item);
            var activeItem = itemArray[index]; // Explicitly check for `null` and `undefined` because other falsy values are valid.

            this._activeItem = activeItem == null ? null : activeItem;
            this._activeItemIndex = index;
          }
          /**
           * This method sets the active item, given a list of items and the delta between the
           * currently active item and the new active item. It will calculate differently
           * depending on whether wrap mode is turned on.
           */

        }, {
          key: "_setActiveItemByDelta",
          value: function _setActiveItemByDelta(delta) {
            this._wrap ? this._setActiveInWrapMode(delta) : this._setActiveInDefaultMode(delta);
          }
          /**
           * Sets the active item properly given "wrap" mode. In other words, it will continue to move
           * down the list until it finds an item that is not disabled, and it will wrap if it
           * encounters either end of the list.
           */

        }, {
          key: "_setActiveInWrapMode",
          value: function _setActiveInWrapMode(delta) {
            var items = this._getItemsArray();

            for (var i = 1; i <= items.length; i++) {
              var index = (this._activeItemIndex + delta * i + items.length) % items.length;
              var item = items[index];

              if (!this._skipPredicateFn(item)) {
                this.setActiveItem(index);
                return;
              }
            }
          }
          /**
           * Sets the active item properly given the default mode. In other words, it will
           * continue to move down the list until it finds an item that is not disabled. If
           * it encounters either end of the list, it will stop and not wrap.
           */

        }, {
          key: "_setActiveInDefaultMode",
          value: function _setActiveInDefaultMode(delta) {
            this._setActiveItemByIndex(this._activeItemIndex + delta, delta);
          }
          /**
           * Sets the active item to the first enabled item starting at the index specified. If the
           * item is disabled, it will move in the fallbackDelta direction until it either
           * finds an enabled item or encounters the end of the list.
           */

        }, {
          key: "_setActiveItemByIndex",
          value: function _setActiveItemByIndex(index, fallbackDelta) {
            var items = this._getItemsArray();

            if (!items[index]) {
              return;
            }

            while (this._skipPredicateFn(items[index])) {
              index += fallbackDelta;

              if (!items[index]) {
                return;
              }
            }

            this.setActiveItem(index);
          }
          /** Returns the items as an array. */

        }, {
          key: "_getItemsArray",
          value: function _getItemsArray() {
            return this._items instanceof _angular_core__WEBPACK_IMPORTED_MODULE_1__["QueryList"] ? this._items.toArray() : this._items;
          }
        }]);

        return ListKeyManager;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var ActiveDescendantKeyManager = /*#__PURE__*/function (_ListKeyManager) {
        _inherits2(ActiveDescendantKeyManager, _ListKeyManager);

        var _super389 = _createSuper(ActiveDescendantKeyManager);

        function ActiveDescendantKeyManager() {
          _classCallCheck2(this, ActiveDescendantKeyManager);

          return _super389.apply(this, arguments);
        }

        _createClass2(ActiveDescendantKeyManager, [{
          key: "setActiveItem",
          value: function setActiveItem(index) {
            if (this.activeItem) {
              this.activeItem.setInactiveStyles();
            }

            _get2(_getPrototypeOf2(ActiveDescendantKeyManager.prototype), "setActiveItem", this).call(this, index);

            if (this.activeItem) {
              this.activeItem.setActiveStyles();
            }
          }
        }]);

        return ActiveDescendantKeyManager;
      }(ListKeyManager);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var FocusKeyManager = /*#__PURE__*/function (_ListKeyManager2) {
        _inherits2(FocusKeyManager, _ListKeyManager2);

        var _super390 = _createSuper(FocusKeyManager);

        function FocusKeyManager() {
          var _this985;

          _classCallCheck2(this, FocusKeyManager);

          _this985 = _super390.apply(this, arguments);
          _this985._origin = 'program';
          return _this985;
        }
        /**
         * Sets the focus origin that will be passed in to the items for any subsequent `focus` calls.
         * @param origin Focus origin to be used when focusing items.
         */


        _createClass2(FocusKeyManager, [{
          key: "setFocusOrigin",
          value: function setFocusOrigin(origin) {
            this._origin = origin;
            return this;
          }
        }, {
          key: "setActiveItem",
          value: function setActiveItem(item) {
            _get2(_getPrototypeOf2(FocusKeyManager.prototype), "setActiveItem", this).call(this, item);

            if (this.activeItem) {
              this.activeItem.focus(this._origin);
            }
          }
        }]);

        return FocusKeyManager;
      }(ListKeyManager);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Configuration for the isFocusable method.
       */


      var IsFocusableConfig = function IsFocusableConfig() {
        _classCallCheck2(this, IsFocusableConfig);

        /**
         * Whether to count an element as focusable even if it is not currently visible.
         */
        this.ignoreVisibility = false;
      }; // The InteractivityChecker leans heavily on the ally.js accessibility utilities.
      // Methods like `isTabbable` are only covering specific edge-cases for the browsers which are
      // supported.

      /**
       * Utility for checking the interactivity of an element, such as whether is is focusable or
       * tabbable.
       */


      var InteractivityChecker = /*#__PURE__*/function () {
        function InteractivityChecker(_platform) {
          _classCallCheck2(this, InteractivityChecker);

          this._platform = _platform;
        }
        /**
         * Gets whether an element is disabled.
         *
         * @param element Element to be checked.
         * @returns Whether the element is disabled.
         */


        _createClass2(InteractivityChecker, [{
          key: "isDisabled",
          value: function isDisabled(element) {
            // This does not capture some cases, such as a non-form control with a disabled attribute or
            // a form control inside of a disabled form, but should capture the most common cases.
            return element.hasAttribute('disabled');
          }
          /**
           * Gets whether an element is visible for the purposes of interactivity.
           *
           * This will capture states like `display: none` and `visibility: hidden`, but not things like
           * being clipped by an `overflow: hidden` parent or being outside the viewport.
           *
           * @returns Whether the element is visible.
           */

        }, {
          key: "isVisible",
          value: function isVisible(element) {
            return hasGeometry(element) && getComputedStyle(element).visibility === 'visible';
          }
          /**
           * Gets whether an element can be reached via Tab key.
           * Assumes that the element has already been checked with isFocusable.
           *
           * @param element Element to be checked.
           * @returns Whether the element is tabbable.
           */

        }, {
          key: "isTabbable",
          value: function isTabbable(element) {
            // Nothing is tabbable on the server 😎
            if (!this._platform.isBrowser) {
              return false;
            }

            var frameElement = getFrameElement(getWindow(element));

            if (frameElement) {
              // Frame elements inherit their tabindex onto all child elements.
              if (getTabIndexValue(frameElement) === -1) {
                return false;
              } // Browsers disable tabbing to an element inside of an invisible frame.


              if (!this.isVisible(frameElement)) {
                return false;
              }
            }

            var nodeName = element.nodeName.toLowerCase();
            var tabIndexValue = getTabIndexValue(element);

            if (element.hasAttribute('contenteditable')) {
              return tabIndexValue !== -1;
            }

            if (nodeName === 'iframe' || nodeName === 'object') {
              // The frame or object's content may be tabbable depending on the content, but it's
              // not possibly to reliably detect the content of the frames. We always consider such
              // elements as non-tabbable.
              return false;
            } // In iOS, the browser only considers some specific elements as tabbable.


            if (this._platform.WEBKIT && this._platform.IOS && !isPotentiallyTabbableIOS(element)) {
              return false;
            }

            if (nodeName === 'audio') {
              // Audio elements without controls enabled are never tabbable, regardless
              // of the tabindex attribute explicitly being set.
              if (!element.hasAttribute('controls')) {
                return false;
              } // Audio elements with controls are by default tabbable unless the
              // tabindex attribute is set to `-1` explicitly.


              return tabIndexValue !== -1;
            }

            if (nodeName === 'video') {
              // For all video elements, if the tabindex attribute is set to `-1`, the video
              // is not tabbable. Note: We cannot rely on the default `HTMLElement.tabIndex`
              // property as that one is set to `-1` in Chrome, Edge and Safari v13.1. The
              // tabindex attribute is the source of truth here.
              if (tabIndexValue === -1) {
                return false;
              } // If the tabindex is explicitly set, and not `-1` (as per check before), the
              // video element is always tabbable (regardless of whether it has controls or not).


              if (tabIndexValue !== null) {
                return true;
              } // Otherwise (when no explicit tabindex is set), a video is only tabbable if it
              // has controls enabled. Firefox is special as videos are always tabbable regardless
              // of whether there are controls or not.


              return this._platform.FIREFOX || element.hasAttribute('controls');
            }

            return element.tabIndex >= 0;
          }
          /**
           * Gets whether an element can be focused by the user.
           *
           * @param element Element to be checked.
           * @param config The config object with options to customize this method's behavior
           * @returns Whether the element is focusable.
           */

        }, {
          key: "isFocusable",
          value: function isFocusable(element, config) {
            // Perform checks in order of left to most expensive.
            // Again, naive approach that does not capture many edge cases and browser quirks.
            return isPotentiallyFocusable(element) && !this.isDisabled(element) && ((config === null || config === void 0 ? void 0 : config.ignoreVisibility) || this.isVisible(element));
          }
        }]);

        return InteractivityChecker;
      }();

      InteractivityChecker.ɵfac = function InteractivityChecker_Factory(t) {
        return new (t || InteractivityChecker)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_6__["Platform"]));
      };

      InteractivityChecker.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function InteractivityChecker_Factory() {
          return new InteractivityChecker(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_6__["Platform"]));
        },
        token: InteractivityChecker,
        providedIn: "root"
      });

      InteractivityChecker.ctorParameters = function () {
        return [{
          type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_6__["Platform"]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](InteractivityChecker, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_6__["Platform"]
          }];
        }, null);
      })();
      /**
       * Returns the frame element from a window object. Since browsers like MS Edge throw errors if
       * the frameElement property is being accessed from a different host address, this property
       * should be accessed carefully.
       */


      function getFrameElement(window) {
        try {
          return window.frameElement;
        } catch (_a) {
          return null;
        }
      }
      /** Checks whether the specified element has any geometry / rectangles. */


      function hasGeometry(element) {
        // Use logic from jQuery to check for an invisible element.
        // See https://github.com/jquery/jquery/blob/master/src/css/hiddenVisibleSelectors.js#L12
        return !!(element.offsetWidth || element.offsetHeight || typeof element.getClientRects === 'function' && element.getClientRects().length);
      }
      /** Gets whether an element's  */


      function isNativeFormElement(element) {
        var nodeName = element.nodeName.toLowerCase();
        return nodeName === 'input' || nodeName === 'select' || nodeName === 'button' || nodeName === 'textarea';
      }
      /** Gets whether an element is an `<input type="hidden">`. */


      function isHiddenInput(element) {
        return isInputElement(element) && element.type == 'hidden';
      }
      /** Gets whether an element is an anchor that has an href attribute. */


      function isAnchorWithHref(element) {
        return isAnchorElement(element) && element.hasAttribute('href');
      }
      /** Gets whether an element is an input element. */


      function isInputElement(element) {
        return element.nodeName.toLowerCase() == 'input';
      }
      /** Gets whether an element is an anchor element. */


      function isAnchorElement(element) {
        return element.nodeName.toLowerCase() == 'a';
      }
      /** Gets whether an element has a valid tabindex. */


      function hasValidTabIndex(element) {
        if (!element.hasAttribute('tabindex') || element.tabIndex === undefined) {
          return false;
        }

        var tabIndex = element.getAttribute('tabindex'); // IE11 parses tabindex="" as the value "-32768"

        if (tabIndex == '-32768') {
          return false;
        }

        return !!(tabIndex && !isNaN(parseInt(tabIndex, 10)));
      }
      /**
       * Returns the parsed tabindex from the element attributes instead of returning the
       * evaluated tabindex from the browsers defaults.
       */


      function getTabIndexValue(element) {
        if (!hasValidTabIndex(element)) {
          return null;
        } // See browser issue in Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054


        var tabIndex = parseInt(element.getAttribute('tabindex') || '', 10);
        return isNaN(tabIndex) ? -1 : tabIndex;
      }
      /** Checks whether the specified element is potentially tabbable on iOS */


      function isPotentiallyTabbableIOS(element) {
        var nodeName = element.nodeName.toLowerCase();
        var inputType = nodeName === 'input' && element.type;
        return inputType === 'text' || inputType === 'password' || nodeName === 'select' || nodeName === 'textarea';
      }
      /**
       * Gets whether an element is potentially focusable without taking current visible/disabled state
       * into account.
       */


      function isPotentiallyFocusable(element) {
        // Inputs are potentially focusable *unless* they're type="hidden".
        if (isHiddenInput(element)) {
          return false;
        }

        return isNativeFormElement(element) || isAnchorWithHref(element) || element.hasAttribute('contenteditable') || hasValidTabIndex(element);
      }
      /** Gets the parent window of a DOM node with regards of being inside of an iframe. */


      function getWindow(node) {
        // ownerDocument is null if `node` itself *is* a document.
        return node.ownerDocument && node.ownerDocument.defaultView || window;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Class that allows for trapping focus within a DOM element.
       *
       * This class currently uses a relatively simple approach to focus trapping.
       * It assumes that the tab order is the same as DOM order, which is not necessarily true.
       * Things like `tabIndex > 0`, flex `order`, and shadow roots can cause the two to misalign.
       *
       * @deprecated Use `ConfigurableFocusTrap` instead.
       * @breaking-change for 11.0.0 Remove this class.
       */


      var FocusTrap = /*#__PURE__*/function () {
        function FocusTrap(_element, _checker, _ngZone, _document) {
          var _this986 = this;

          var deferAnchors = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;

          _classCallCheck2(this, FocusTrap);

          this._element = _element;
          this._checker = _checker;
          this._ngZone = _ngZone;
          this._document = _document;
          this._hasAttached = false; // Event listeners for the anchors. Need to be regular functions so that we can unbind them later.

          this.startAnchorListener = function () {
            return _this986.focusLastTabbableElement();
          };

          this.endAnchorListener = function () {
            return _this986.focusFirstTabbableElement();
          };

          this._enabled = true;

          if (!deferAnchors) {
            this.attachAnchors();
          }
        }
        /** Whether the focus trap is active. */


        _createClass2(FocusTrap, [{
          key: "enabled",
          get: function get() {
            return this._enabled;
          },
          set: function set(value) {
            this._enabled = value;

            if (this._startAnchor && this._endAnchor) {
              this._toggleAnchorTabIndex(value, this._startAnchor);

              this._toggleAnchorTabIndex(value, this._endAnchor);
            }
          }
          /** Destroys the focus trap by cleaning up the anchors. */

        }, {
          key: "destroy",
          value: function destroy() {
            var startAnchor = this._startAnchor;
            var endAnchor = this._endAnchor;

            if (startAnchor) {
              startAnchor.removeEventListener('focus', this.startAnchorListener);

              if (startAnchor.parentNode) {
                startAnchor.parentNode.removeChild(startAnchor);
              }
            }

            if (endAnchor) {
              endAnchor.removeEventListener('focus', this.endAnchorListener);

              if (endAnchor.parentNode) {
                endAnchor.parentNode.removeChild(endAnchor);
              }
            }

            this._startAnchor = this._endAnchor = null;
            this._hasAttached = false;
          }
          /**
           * Inserts the anchors into the DOM. This is usually done automatically
           * in the constructor, but can be deferred for cases like directives with `*ngIf`.
           * @returns Whether the focus trap managed to attach successfuly. This may not be the case
           * if the target element isn't currently in the DOM.
           */

        }, {
          key: "attachAnchors",
          value: function attachAnchors() {
            var _this987 = this;

            // If we're not on the browser, there can be no focus to trap.
            if (this._hasAttached) {
              return true;
            }

            this._ngZone.runOutsideAngular(function () {
              if (!_this987._startAnchor) {
                _this987._startAnchor = _this987._createAnchor();

                _this987._startAnchor.addEventListener('focus', _this987.startAnchorListener);
              }

              if (!_this987._endAnchor) {
                _this987._endAnchor = _this987._createAnchor();

                _this987._endAnchor.addEventListener('focus', _this987.endAnchorListener);
              }
            });

            if (this._element.parentNode) {
              this._element.parentNode.insertBefore(this._startAnchor, this._element);

              this._element.parentNode.insertBefore(this._endAnchor, this._element.nextSibling);

              this._hasAttached = true;
            }

            return this._hasAttached;
          }
          /**
           * Waits for the zone to stabilize, then either focuses the first element that the
           * user specified, or the first tabbable element.
           * @returns Returns a promise that resolves with a boolean, depending
           * on whether focus was moved successfully.
           */

        }, {
          key: "focusInitialElementWhenReady",
          value: function focusInitialElementWhenReady() {
            var _this988 = this;

            return new Promise(function (resolve) {
              _this988._executeOnStable(function () {
                return resolve(_this988.focusInitialElement());
              });
            });
          }
          /**
           * Waits for the zone to stabilize, then focuses
           * the first tabbable element within the focus trap region.
           * @returns Returns a promise that resolves with a boolean, depending
           * on whether focus was moved successfully.
           */

        }, {
          key: "focusFirstTabbableElementWhenReady",
          value: function focusFirstTabbableElementWhenReady() {
            var _this989 = this;

            return new Promise(function (resolve) {
              _this989._executeOnStable(function () {
                return resolve(_this989.focusFirstTabbableElement());
              });
            });
          }
          /**
           * Waits for the zone to stabilize, then focuses
           * the last tabbable element within the focus trap region.
           * @returns Returns a promise that resolves with a boolean, depending
           * on whether focus was moved successfully.
           */

        }, {
          key: "focusLastTabbableElementWhenReady",
          value: function focusLastTabbableElementWhenReady() {
            var _this990 = this;

            return new Promise(function (resolve) {
              _this990._executeOnStable(function () {
                return resolve(_this990.focusLastTabbableElement());
              });
            });
          }
          /**
           * Get the specified boundary element of the trapped region.
           * @param bound The boundary to get (start or end of trapped region).
           * @returns The boundary element.
           */

        }, {
          key: "_getRegionBoundary",
          value: function _getRegionBoundary(bound) {
            // Contains the deprecated version of selector, for temporary backwards comparability.
            var markers = this._element.querySelectorAll("[cdk-focus-region-".concat(bound, "], ") + "[cdkFocusRegion".concat(bound, "], ") + "[cdk-focus-".concat(bound, "]"));

            for (var i = 0; i < markers.length; i++) {
              // @breaking-change 8.0.0
              if (markers[i].hasAttribute("cdk-focus-".concat(bound))) {
                console.warn("Found use of deprecated attribute 'cdk-focus-".concat(bound, "', ") + "use 'cdkFocusRegion".concat(bound, "' instead. The deprecated ") + "attribute will be removed in 8.0.0.", markers[i]);
              } else if (markers[i].hasAttribute("cdk-focus-region-".concat(bound))) {
                console.warn("Found use of deprecated attribute 'cdk-focus-region-".concat(bound, "', ") + "use 'cdkFocusRegion".concat(bound, "' instead. The deprecated attribute ") + "will be removed in 8.0.0.", markers[i]);
              }
            }

            if (bound == 'start') {
              return markers.length ? markers[0] : this._getFirstTabbableElement(this._element);
            }

            return markers.length ? markers[markers.length - 1] : this._getLastTabbableElement(this._element);
          }
          /**
           * Focuses the element that should be focused when the focus trap is initialized.
           * @returns Whether focus was moved successfully.
           */

        }, {
          key: "focusInitialElement",
          value: function focusInitialElement() {
            // Contains the deprecated version of selector, for temporary backwards comparability.
            var redirectToElement = this._element.querySelector("[cdk-focus-initial], " + "[cdkFocusInitial]");

            if (redirectToElement) {
              // @breaking-change 8.0.0
              if (redirectToElement.hasAttribute("cdk-focus-initial")) {
                console.warn("Found use of deprecated attribute 'cdk-focus-initial', " + "use 'cdkFocusInitial' instead. The deprecated attribute " + "will be removed in 8.0.0", redirectToElement);
              } // Warn the consumer if the element they've pointed to
              // isn't focusable, when not in production mode.


              if ((typeof ngDevMode === 'undefined' || ngDevMode) && !this._checker.isFocusable(redirectToElement)) {
                console.warn("Element matching '[cdkFocusInitial]' is not focusable.", redirectToElement);
              }

              if (!this._checker.isFocusable(redirectToElement)) {
                var focusableChild = this._getFirstTabbableElement(redirectToElement);

                focusableChild === null || focusableChild === void 0 ? void 0 : focusableChild.focus();
                return !!focusableChild;
              }

              redirectToElement.focus();
              return true;
            }

            return this.focusFirstTabbableElement();
          }
          /**
           * Focuses the first tabbable element within the focus trap region.
           * @returns Whether focus was moved successfully.
           */

        }, {
          key: "focusFirstTabbableElement",
          value: function focusFirstTabbableElement() {
            var redirectToElement = this._getRegionBoundary('start');

            if (redirectToElement) {
              redirectToElement.focus();
            }

            return !!redirectToElement;
          }
          /**
           * Focuses the last tabbable element within the focus trap region.
           * @returns Whether focus was moved successfully.
           */

        }, {
          key: "focusLastTabbableElement",
          value: function focusLastTabbableElement() {
            var redirectToElement = this._getRegionBoundary('end');

            if (redirectToElement) {
              redirectToElement.focus();
            }

            return !!redirectToElement;
          }
          /**
           * Checks whether the focus trap has successfully been attached.
           */

        }, {
          key: "hasAttached",
          value: function hasAttached() {
            return this._hasAttached;
          }
          /** Get the first tabbable element from a DOM subtree (inclusive). */

        }, {
          key: "_getFirstTabbableElement",
          value: function _getFirstTabbableElement(root) {
            if (this._checker.isFocusable(root) && this._checker.isTabbable(root)) {
              return root;
            } // Iterate in DOM order. Note that IE doesn't have `children` for SVG so we fall
            // back to `childNodes` which includes text nodes, comments etc.


            var children = root.children || root.childNodes;

            for (var i = 0; i < children.length; i++) {
              var tabbableChild = children[i].nodeType === this._document.ELEMENT_NODE ? this._getFirstTabbableElement(children[i]) : null;

              if (tabbableChild) {
                return tabbableChild;
              }
            }

            return null;
          }
          /** Get the last tabbable element from a DOM subtree (inclusive). */

        }, {
          key: "_getLastTabbableElement",
          value: function _getLastTabbableElement(root) {
            if (this._checker.isFocusable(root) && this._checker.isTabbable(root)) {
              return root;
            } // Iterate in reverse DOM order.


            var children = root.children || root.childNodes;

            for (var i = children.length - 1; i >= 0; i--) {
              var tabbableChild = children[i].nodeType === this._document.ELEMENT_NODE ? this._getLastTabbableElement(children[i]) : null;

              if (tabbableChild) {
                return tabbableChild;
              }
            }

            return null;
          }
          /** Creates an anchor element. */

        }, {
          key: "_createAnchor",
          value: function _createAnchor() {
            var anchor = this._document.createElement('div');

            this._toggleAnchorTabIndex(this._enabled, anchor);

            anchor.classList.add('cdk-visually-hidden');
            anchor.classList.add('cdk-focus-trap-anchor');
            anchor.setAttribute('aria-hidden', 'true');
            return anchor;
          }
          /**
           * Toggles the `tabindex` of an anchor, based on the enabled state of the focus trap.
           * @param isEnabled Whether the focus trap is enabled.
           * @param anchor Anchor on which to toggle the tabindex.
           */

        }, {
          key: "_toggleAnchorTabIndex",
          value: function _toggleAnchorTabIndex(isEnabled, anchor) {
            // Remove the tabindex completely, rather than setting it to -1, because if the
            // element has a tabindex, the user might still hit it when navigating with the arrow keys.
            isEnabled ? anchor.setAttribute('tabindex', '0') : anchor.removeAttribute('tabindex');
          }
          /**
           * Toggles the`tabindex` of both anchors to either trap Tab focus or allow it to escape.
           * @param enabled: Whether the anchors should trap Tab.
           */

        }, {
          key: "toggleAnchors",
          value: function toggleAnchors(enabled) {
            if (this._startAnchor && this._endAnchor) {
              this._toggleAnchorTabIndex(enabled, this._startAnchor);

              this._toggleAnchorTabIndex(enabled, this._endAnchor);
            }
          }
          /** Executes a function when the zone is stable. */

        }, {
          key: "_executeOnStable",
          value: function _executeOnStable(fn) {
            if (this._ngZone.isStable) {
              fn();
            } else {
              this._ngZone.onStable.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["take"])(1)).subscribe(fn);
            }
          }
        }]);

        return FocusTrap;
      }();
      /**
       * Factory that allows easy instantiation of focus traps.
       * @deprecated Use `ConfigurableFocusTrapFactory` instead.
       * @breaking-change for 11.0.0 Remove this class.
       */


      var FocusTrapFactory = /*#__PURE__*/function () {
        function FocusTrapFactory(_checker, _ngZone, _document) {
          _classCallCheck2(this, FocusTrapFactory);

          this._checker = _checker;
          this._ngZone = _ngZone;
          this._document = _document;
        }
        /**
         * Creates a focus-trapped region around the given element.
         * @param element The element around which focus will be trapped.
         * @param deferCaptureElements Defers the creation of focus-capturing elements to be done
         *     manually by the user.
         * @returns The created focus trap instance.
         */


        _createClass2(FocusTrapFactory, [{
          key: "create",
          value: function create(element) {
            var deferCaptureElements = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
            return new FocusTrap(element, this._checker, this._ngZone, this._document, deferCaptureElements);
          }
        }]);

        return FocusTrapFactory;
      }();

      FocusTrapFactory.ɵfac = function FocusTrapFactory_Factory(t) {
        return new (t || FocusTrapFactory)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](InteractivityChecker), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]));
      };

      FocusTrapFactory.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function FocusTrapFactory_Factory() {
          return new FocusTrapFactory(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(InteractivityChecker), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]));
        },
        token: FocusTrapFactory,
        providedIn: "root"
      });

      FocusTrapFactory.ctorParameters = function () {
        return [{
          type: InteractivityChecker
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](FocusTrapFactory, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: InteractivityChecker
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
            }]
          }];
        }, null);
      })();
      /** Directive for trapping focus within a region. */


      var CdkTrapFocus = /*#__PURE__*/function () {
        function CdkTrapFocus(_elementRef, _focusTrapFactory, _document) {
          _classCallCheck2(this, CdkTrapFocus);

          this._elementRef = _elementRef;
          this._focusTrapFactory = _focusTrapFactory;
          /** Previously focused element to restore focus to upon destroy when using autoCapture. */

          this._previouslyFocusedElement = null;
          this._document = _document;
          this.focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement, true);
        }
        /** Whether the focus trap is active. */


        _createClass2(CdkTrapFocus, [{
          key: "enabled",
          get: function get() {
            return this.focusTrap.enabled;
          },
          set: function set(value) {
            this.focusTrap.enabled = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceBooleanProperty"])(value);
          }
          /**
           * Whether the directive should automatically move focus into the trapped region upon
           * initialization and return focus to the previous activeElement upon destruction.
           */

        }, {
          key: "autoCapture",
          get: function get() {
            return this._autoCapture;
          },
          set: function set(value) {
            this._autoCapture = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceBooleanProperty"])(value);
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.focusTrap.destroy(); // If we stored a previously focused element when using autoCapture, return focus to that
            // element now that the trapped region is being destroyed.

            if (this._previouslyFocusedElement) {
              this._previouslyFocusedElement.focus();

              this._previouslyFocusedElement = null;
            }
          }
        }, {
          key: "ngAfterContentInit",
          value: function ngAfterContentInit() {
            this.focusTrap.attachAnchors();

            if (this.autoCapture) {
              this._captureFocus();
            }
          }
        }, {
          key: "ngDoCheck",
          value: function ngDoCheck() {
            if (!this.focusTrap.hasAttached()) {
              this.focusTrap.attachAnchors();
            }
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges(changes) {
            var autoCaptureChange = changes['autoCapture'];

            if (autoCaptureChange && !autoCaptureChange.firstChange && this.autoCapture && this.focusTrap.hasAttached()) {
              this._captureFocus();
            }
          }
        }, {
          key: "_captureFocus",
          value: function _captureFocus() {
            this._previouslyFocusedElement = this._document.activeElement;
            this.focusTrap.focusInitialElementWhenReady();
          }
        }]);

        return CdkTrapFocus;
      }();

      CdkTrapFocus.ɵfac = function CdkTrapFocus_Factory(t) {
        return new (t || CdkTrapFocus)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](FocusTrapFactory), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]));
      };

      CdkTrapFocus.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({
        type: CdkTrapFocus,
        selectors: [["", "cdkTrapFocus", ""]],
        inputs: {
          enabled: ["cdkTrapFocus", "enabled"],
          autoCapture: ["cdkTrapFocusAutoCapture", "autoCapture"]
        },
        exportAs: ["cdkTrapFocus"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵNgOnChangesFeature"]]
      });

      CdkTrapFocus.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
        }, {
          type: FocusTrapFactory
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
          }]
        }];
      };

      CdkTrapFocus.propDecorators = {
        enabled: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkTrapFocus']
        }],
        autoCapture: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkTrapFocusAutoCapture']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkTrapFocus, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
          args: [{
            selector: '[cdkTrapFocus]',
            exportAs: 'cdkTrapFocus'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
          }, {
            type: FocusTrapFactory
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
            }]
          }];
        }, {
          enabled: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkTrapFocus']
          }],
          autoCapture: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkTrapFocusAutoCapture']
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Class that allows for trapping focus within a DOM element.
       *
       * This class uses a strategy pattern that determines how it traps focus.
       * See FocusTrapInertStrategy.
       */


      var ConfigurableFocusTrap = /*#__PURE__*/function (_FocusTrap) {
        _inherits2(ConfigurableFocusTrap, _FocusTrap);

        var _super391 = _createSuper(ConfigurableFocusTrap);

        function ConfigurableFocusTrap(_element, _checker, _ngZone, _document, _focusTrapManager, _inertStrategy, config) {
          var _this991;

          _classCallCheck2(this, ConfigurableFocusTrap);

          _this991 = _super391.call(this, _element, _checker, _ngZone, _document, config.defer);
          _this991._focusTrapManager = _focusTrapManager;
          _this991._inertStrategy = _inertStrategy;

          _this991._focusTrapManager.register(_assertThisInitialized2(_this991));

          return _this991;
        }
        /** Whether the FocusTrap is enabled. */


        _createClass2(ConfigurableFocusTrap, [{
          key: "enabled",
          get: function get() {
            return this._enabled;
          },
          set: function set(value) {
            this._enabled = value;

            if (this._enabled) {
              this._focusTrapManager.register(this);
            } else {
              this._focusTrapManager.deregister(this);
            }
          }
          /** Notifies the FocusTrapManager that this FocusTrap will be destroyed. */

        }, {
          key: "destroy",
          value: function destroy() {
            this._focusTrapManager.deregister(this);

            _get2(_getPrototypeOf2(ConfigurableFocusTrap.prototype), "destroy", this).call(this);
          }
          /** @docs-private Implemented as part of ManagedFocusTrap. */

        }, {
          key: "_enable",
          value: function _enable() {
            this._inertStrategy.preventFocus(this);

            this.toggleAnchors(true);
          }
          /** @docs-private Implemented as part of ManagedFocusTrap. */

        }, {
          key: "_disable",
          value: function _disable() {
            this._inertStrategy.allowFocus(this);

            this.toggleAnchors(false);
          }
        }]);

        return ConfigurableFocusTrap;
      }(FocusTrap);
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** IE 11 compatible closest implementation that is able to start from non-Element Nodes. */


      function closest(element, selector) {
        if (!(element instanceof Node)) {
          return null;
        }

        var curr = element;

        while (curr != null && !(curr instanceof Element)) {
          curr = curr.parentNode;
        }

        return curr && (hasNativeClosest ? curr.closest(selector) : polyfillClosest(curr, selector));
      }
      /** Polyfill for browsers without Element.closest. */


      function polyfillClosest(element, selector) {
        var curr = element;

        while (curr != null && !(curr instanceof Element && matches(curr, selector))) {
          curr = curr.parentNode;
        }

        return curr || null;
      }

      var hasNativeClosest = typeof Element != 'undefined' && !!Element.prototype.closest;
      /** IE 11 compatible matches implementation. */

      function matches(element, selector) {
        return element.matches ? element.matches(selector) : element['msMatchesSelector'](selector);
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Lightweight FocusTrapInertStrategy that adds a document focus event
       * listener to redirect focus back inside the FocusTrap.
       */


      var EventListenerFocusTrapInertStrategy = /*#__PURE__*/function () {
        function EventListenerFocusTrapInertStrategy() {
          _classCallCheck2(this, EventListenerFocusTrapInertStrategy);

          /** Focus event handler. */
          this._listener = null;
        }
        /** Adds a document event listener that keeps focus inside the FocusTrap. */


        _createClass2(EventListenerFocusTrapInertStrategy, [{
          key: "preventFocus",
          value: function preventFocus(focusTrap) {
            var _this992 = this;

            // Ensure there's only one listener per document
            if (this._listener) {
              focusTrap._document.removeEventListener('focus', this._listener, true);
            }

            this._listener = function (e) {
              return _this992._trapFocus(focusTrap, e);
            };

            focusTrap._ngZone.runOutsideAngular(function () {
              focusTrap._document.addEventListener('focus', _this992._listener, true);
            });
          }
          /** Removes the event listener added in preventFocus. */

        }, {
          key: "allowFocus",
          value: function allowFocus(focusTrap) {
            if (!this._listener) {
              return;
            }

            focusTrap._document.removeEventListener('focus', this._listener, true);

            this._listener = null;
          }
          /**
           * Refocuses the first element in the FocusTrap if the focus event target was outside
           * the FocusTrap.
           *
           * This is an event listener callback. The event listener is added in runOutsideAngular,
           * so all this code runs outside Angular as well.
           */

        }, {
          key: "_trapFocus",
          value: function _trapFocus(focusTrap, event) {
            var target = event.target;
            var focusTrapRoot = focusTrap._element; // Don't refocus if target was in an overlay, because the overlay might be associated
            // with an element inside the FocusTrap, ex. mat-select.

            if (!focusTrapRoot.contains(target) && closest(target, 'div.cdk-overlay-pane') === null) {
              // Some legacy FocusTrap usages have logic that focuses some element on the page
              // just before FocusTrap is destroyed. For backwards compatibility, wait
              // to be sure FocusTrap is still enabled before refocusing.
              setTimeout(function () {
                // Check whether focus wasn't put back into the focus trap while the timeout was pending.
                if (focusTrap.enabled && !focusTrapRoot.contains(focusTrap._document.activeElement)) {
                  focusTrap.focusFirstTabbableElement();
                }
              });
            }
          }
        }]);

        return EventListenerFocusTrapInertStrategy;
      }();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Configuration for creating a ConfigurableFocusTrap.
       */


      var ConfigurableFocusTrapConfig = function ConfigurableFocusTrapConfig() {
        _classCallCheck2(this, ConfigurableFocusTrapConfig);

        /**
         * Whether to defer the creation of FocusTrap elements to be
         * done manually by the user. Default is to create them
         * automatically.
         */
        this.defer = false;
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** The injection token used to specify the inert strategy. */


      var FOCUS_TRAP_INERT_STRATEGY = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('FOCUS_TRAP_INERT_STRATEGY');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Injectable that ensures only the most recently enabled FocusTrap is active. */

      var FocusTrapManager = /*#__PURE__*/function () {
        function FocusTrapManager() {
          _classCallCheck2(this, FocusTrapManager);

          // A stack of the FocusTraps on the page. Only the FocusTrap at the
          // top of the stack is active.
          this._focusTrapStack = [];
        }
        /**
         * Disables the FocusTrap at the top of the stack, and then pushes
         * the new FocusTrap onto the stack.
         */


        _createClass2(FocusTrapManager, [{
          key: "register",
          value: function register(focusTrap) {
            // Dedupe focusTraps that register multiple times.
            this._focusTrapStack = this._focusTrapStack.filter(function (ft) {
              return ft !== focusTrap;
            });
            var stack = this._focusTrapStack;

            if (stack.length) {
              stack[stack.length - 1]._disable();
            }

            stack.push(focusTrap);

            focusTrap._enable();
          }
          /**
           * Removes the FocusTrap from the stack, and activates the
           * FocusTrap that is the new top of the stack.
           */

        }, {
          key: "deregister",
          value: function deregister(focusTrap) {
            focusTrap._disable();

            var stack = this._focusTrapStack;
            var i = stack.indexOf(focusTrap);

            if (i !== -1) {
              stack.splice(i, 1);

              if (stack.length) {
                stack[stack.length - 1]._enable();
              }
            }
          }
        }]);

        return FocusTrapManager;
      }();

      FocusTrapManager.ɵfac = function FocusTrapManager_Factory(t) {
        return new (t || FocusTrapManager)();
      };

      FocusTrapManager.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function FocusTrapManager_Factory() {
          return new FocusTrapManager();
        },
        token: FocusTrapManager,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](FocusTrapManager, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Factory that allows easy instantiation of configurable focus traps. */


      var ConfigurableFocusTrapFactory = /*#__PURE__*/function () {
        function ConfigurableFocusTrapFactory(_checker, _ngZone, _focusTrapManager, _document, _inertStrategy) {
          _classCallCheck2(this, ConfigurableFocusTrapFactory);

          this._checker = _checker;
          this._ngZone = _ngZone;
          this._focusTrapManager = _focusTrapManager;
          this._document = _document; // TODO split up the strategies into different modules, similar to DateAdapter.

          this._inertStrategy = _inertStrategy || new EventListenerFocusTrapInertStrategy();
        }

        _createClass2(ConfigurableFocusTrapFactory, [{
          key: "create",
          value: function create(element) {
            var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new ConfigurableFocusTrapConfig();
            var configObject;

            if (typeof config === 'boolean') {
              configObject = new ConfigurableFocusTrapConfig();
              configObject.defer = config;
            } else {
              configObject = config;
            }

            return new ConfigurableFocusTrap(element, this._checker, this._ngZone, this._document, this._focusTrapManager, this._inertStrategy, configObject);
          }
        }]);

        return ConfigurableFocusTrapFactory;
      }();

      ConfigurableFocusTrapFactory.ɵfac = function ConfigurableFocusTrapFactory_Factory(t) {
        return new (t || ConfigurableFocusTrapFactory)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](InteractivityChecker), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](FocusTrapManager), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](FOCUS_TRAP_INERT_STRATEGY, 8));
      };

      ConfigurableFocusTrapFactory.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function ConfigurableFocusTrapFactory_Factory() {
          return new ConfigurableFocusTrapFactory(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(InteractivityChecker), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(FocusTrapManager), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(FOCUS_TRAP_INERT_STRATEGY, 8));
        },
        token: ConfigurableFocusTrapFactory,
        providedIn: "root"
      });

      ConfigurableFocusTrapFactory.ctorParameters = function () {
        return [{
          type: InteractivityChecker
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        }, {
          type: FocusTrapManager
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [FOCUS_TRAP_INERT_STRATEGY]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](ConfigurableFocusTrapFactory, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: InteractivityChecker
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
          }, {
            type: FocusTrapManager
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [FOCUS_TRAP_INERT_STRATEGY]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var LIVE_ANNOUNCER_ELEMENT_TOKEN = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('liveAnnouncerElement', {
        providedIn: 'root',
        factory: LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY
      });
      /** @docs-private */

      function LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY() {
        return null;
      }
      /** Injection token that can be used to configure the default options for the LiveAnnouncer. */


      var LIVE_ANNOUNCER_DEFAULT_OPTIONS = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('LIVE_ANNOUNCER_DEFAULT_OPTIONS');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      var LiveAnnouncer = /*#__PURE__*/function () {
        function LiveAnnouncer(elementToken, _ngZone, _document, _defaultOptions) {
          _classCallCheck2(this, LiveAnnouncer);

          this._ngZone = _ngZone;
          this._defaultOptions = _defaultOptions; // We inject the live element and document as `any` because the constructor signature cannot
          // reference browser globals (HTMLElement, Document) on non-browser environments, since having
          // a class decorator causes TypeScript to preserve the constructor signature types.

          this._document = _document;
          this._liveElement = elementToken || this._createLiveElement();
        }

        _createClass2(LiveAnnouncer, [{
          key: "announce",
          value: function announce(message) {
            var _this993 = this;

            var defaultOptions = this._defaultOptions;
            var politeness;
            var duration;

            for (var _len65 = arguments.length, args = new Array(_len65 > 1 ? _len65 - 1 : 0), _key68 = 1; _key68 < _len65; _key68++) {
              args[_key68 - 1] = arguments[_key68];
            }

            if (args.length === 1 && typeof args[0] === 'number') {
              duration = args[0];
            } else {
              politeness = args[0];
              duration = args[1];
            }

            this.clear();
            clearTimeout(this._previousTimeout);

            if (!politeness) {
              politeness = defaultOptions && defaultOptions.politeness ? defaultOptions.politeness : 'polite';
            }

            if (duration == null && defaultOptions) {
              duration = defaultOptions.duration;
            } // TODO: ensure changing the politeness works on all environments we support.


            this._liveElement.setAttribute('aria-live', politeness); // This 100ms timeout is necessary for some browser + screen-reader combinations:
            // - Both JAWS and NVDA over IE11 will not announce anything without a non-zero timeout.
            // - With Chrome and IE11 with NVDA or JAWS, a repeated (identical) message won't be read a
            //   second time without clearing and then using a non-zero delay.
            // (using JAWS 17 at time of this writing).


            return this._ngZone.runOutsideAngular(function () {
              return new Promise(function (resolve) {
                clearTimeout(_this993._previousTimeout);
                _this993._previousTimeout = setTimeout(function () {
                  _this993._liveElement.textContent = message;
                  resolve();

                  if (typeof duration === 'number') {
                    _this993._previousTimeout = setTimeout(function () {
                      return _this993.clear();
                    }, duration);
                  }
                }, 100);
              });
            });
          }
          /**
           * Clears the current text from the announcer element. Can be used to prevent
           * screen readers from reading the text out again while the user is going
           * through the page landmarks.
           */

        }, {
          key: "clear",
          value: function clear() {
            if (this._liveElement) {
              this._liveElement.textContent = '';
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            clearTimeout(this._previousTimeout);

            if (this._liveElement && this._liveElement.parentNode) {
              this._liveElement.parentNode.removeChild(this._liveElement);

              this._liveElement = null;
            }
          }
        }, {
          key: "_createLiveElement",
          value: function _createLiveElement() {
            var elementClass = 'cdk-live-announcer-element';

            var previousElements = this._document.getElementsByClassName(elementClass);

            var liveEl = this._document.createElement('div'); // Remove any old containers. This can happen when coming in from a server-side-rendered page.


            for (var i = 0; i < previousElements.length; i++) {
              previousElements[i].parentNode.removeChild(previousElements[i]);
            }

            liveEl.classList.add(elementClass);
            liveEl.classList.add('cdk-visually-hidden');
            liveEl.setAttribute('aria-atomic', 'true');
            liveEl.setAttribute('aria-live', 'polite');

            this._document.body.appendChild(liveEl);

            return liveEl;
          }
        }]);

        return LiveAnnouncer;
      }();

      LiveAnnouncer.ɵfac = function LiveAnnouncer_Factory(t) {
        return new (t || LiveAnnouncer)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](LIVE_ANNOUNCER_ELEMENT_TOKEN, 8), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](LIVE_ANNOUNCER_DEFAULT_OPTIONS, 8));
      };

      LiveAnnouncer.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function LiveAnnouncer_Factory() {
          return new LiveAnnouncer(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(LIVE_ANNOUNCER_ELEMENT_TOKEN, 8), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(LIVE_ANNOUNCER_DEFAULT_OPTIONS, 8));
        },
        token: LiveAnnouncer,
        providedIn: "root"
      });

      LiveAnnouncer.ctorParameters = function () {
        return [{
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [LIVE_ANNOUNCER_ELEMENT_TOKEN]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [LIVE_ANNOUNCER_DEFAULT_OPTIONS]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](LiveAnnouncer, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [LIVE_ANNOUNCER_ELEMENT_TOKEN]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [LIVE_ANNOUNCER_DEFAULT_OPTIONS]
            }]
          }];
        }, null);
      })();
      /**
       * A directive that works similarly to aria-live, but uses the LiveAnnouncer to ensure compatibility
       * with a wider range of browsers and screen readers.
       */


      var CdkAriaLive = /*#__PURE__*/function () {
        function CdkAriaLive(_elementRef, _liveAnnouncer, _contentObserver, _ngZone) {
          _classCallCheck2(this, CdkAriaLive);

          this._elementRef = _elementRef;
          this._liveAnnouncer = _liveAnnouncer;
          this._contentObserver = _contentObserver;
          this._ngZone = _ngZone;
          this._politeness = 'polite';
        }
        /** The aria-live politeness level to use when announcing messages. */


        _createClass2(CdkAriaLive, [{
          key: "politeness",
          get: function get() {
            return this._politeness;
          },
          set: function set(value) {
            var _this994 = this;

            this._politeness = value === 'off' || value === 'assertive' ? value : 'polite';

            if (this._politeness === 'off') {
              if (this._subscription) {
                this._subscription.unsubscribe();

                this._subscription = null;
              }
            } else if (!this._subscription) {
              this._subscription = this._ngZone.runOutsideAngular(function () {
                return _this994._contentObserver.observe(_this994._elementRef).subscribe(function () {
                  // Note that we use textContent here, rather than innerText, in order to avoid a reflow.
                  var elementText = _this994._elementRef.nativeElement.textContent; // The `MutationObserver` fires also for attribute
                  // changes which we don't want to announce.

                  if (elementText !== _this994._previousAnnouncedText) {
                    _this994._liveAnnouncer.announce(elementText, _this994._politeness);

                    _this994._previousAnnouncedText = elementText;
                  }
                });
              });
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            if (this._subscription) {
              this._subscription.unsubscribe();
            }
          }
        }]);

        return CdkAriaLive;
      }();

      CdkAriaLive.ɵfac = function CdkAriaLive_Factory(t) {
        return new (t || CdkAriaLive)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](LiveAnnouncer), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_cdk_observers__WEBPACK_IMPORTED_MODULE_7__["ContentObserver"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]));
      };

      CdkAriaLive.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({
        type: CdkAriaLive,
        selectors: [["", "cdkAriaLive", ""]],
        inputs: {
          politeness: ["cdkAriaLive", "politeness"]
        },
        exportAs: ["cdkAriaLive"]
      });

      CdkAriaLive.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
        }, {
          type: LiveAnnouncer
        }, {
          type: _angular_cdk_observers__WEBPACK_IMPORTED_MODULE_7__["ContentObserver"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        }];
      };

      CdkAriaLive.propDecorators = {
        politeness: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
          args: ['cdkAriaLive']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkAriaLive, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
          args: [{
            selector: '[cdkAriaLive]',
            exportAs: 'cdkAriaLive'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
          }, {
            type: LiveAnnouncer
          }, {
            type: _angular_cdk_observers__WEBPACK_IMPORTED_MODULE_7__["ContentObserver"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
          }];
        }, {
          politeness: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"],
            args: ['cdkAriaLive']
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Screenreaders will often fire fake mousedown events when a focusable element
       * is activated using the keyboard. We can typically distinguish between these faked
       * mousedown events and real mousedown events using the "buttons" property. While
       * real mousedowns will indicate the mouse button that was pressed (e.g. "1" for
       * the left mouse button), faked mousedowns will usually set the property value to 0.
       */


      function isFakeMousedownFromScreenReader(event) {
        return event.buttons === 0;
      }
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // This is the value used by AngularJS Material. Through trial and error (on iPhone 6S) they found
      // that a value of around 650ms seems appropriate.


      var TOUCH_BUFFER_MS = 650;
      /** InjectionToken for FocusMonitorOptions. */

      var FOCUS_MONITOR_DEFAULT_OPTIONS = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('cdk-focus-monitor-default-options');
      /**
       * Event listener options that enable capturing and also
       * mark the listener as passive if the browser supports it.
       */

      var captureEventListenerOptions = Object(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_6__["normalizePassiveListenerOptions"])({
        passive: true,
        capture: true
      });
      /** Monitors mouse and keyboard events to determine the cause of focus events. */

      var FocusMonitor = /*#__PURE__*/function () {
        function FocusMonitor(_ngZone, _platform,
        /** @breaking-change 11.0.0 make document required */
        document, options) {
          var _this995 = this;

          _classCallCheck2(this, FocusMonitor);

          this._ngZone = _ngZone;
          this._platform = _platform;
          /** The focus origin that the next focus event is a result of. */

          this._origin = null;
          /** Whether the window has just been focused. */

          this._windowFocused = false;
          /** Map of elements being monitored to their info. */

          this._elementInfo = new Map();
          /** The number of elements currently being monitored. */

          this._monitoredElementCount = 0;
          /**
           * Keeps track of the root nodes to which we've currently bound a focus/blur handler,
           * as well as the number of monitored elements that they contain. We have to treat focus/blur
           * handlers differently from the rest of the events, because the browser won't emit events
           * to the document when focus moves inside of a shadow root.
           */

          this._rootNodeFocusListenerCount = new Map();
          /**
           * Event listener for `keydown` events on the document.
           * Needs to be an arrow function in order to preserve the context when it gets bound.
           */

          this._documentKeydownListener = function () {
            // On keydown record the origin and clear any touch event that may be in progress.
            _this995._lastTouchTarget = null;

            _this995._setOriginForCurrentEventQueue('keyboard');
          };
          /**
           * Event listener for `mousedown` events on the document.
           * Needs to be an arrow function in order to preserve the context when it gets bound.
           */


          this._documentMousedownListener = function (event) {
            // On mousedown record the origin only if there is not touch
            // target, since a mousedown can happen as a result of a touch event.
            if (!_this995._lastTouchTarget) {
              // In some cases screen readers fire fake `mousedown` events instead of `keydown`.
              // Resolve the focus source to `keyboard` if we detect one of them.
              var source = isFakeMousedownFromScreenReader(event) ? 'keyboard' : 'mouse';

              _this995._setOriginForCurrentEventQueue(source);
            }
          };
          /**
           * Event listener for `touchstart` events on the document.
           * Needs to be an arrow function in order to preserve the context when it gets bound.
           */


          this._documentTouchstartListener = function (event) {
            // When the touchstart event fires the focus event is not yet in the event queue. This means
            // we can't rely on the trick used above (setting timeout of 1ms). Instead we wait 650ms to
            // see if a focus happens.
            if (_this995._touchTimeoutId != null) {
              clearTimeout(_this995._touchTimeoutId);
            }

            _this995._lastTouchTarget = getTarget(event);
            _this995._touchTimeoutId = setTimeout(function () {
              return _this995._lastTouchTarget = null;
            }, TOUCH_BUFFER_MS);
          };
          /**
           * Event listener for `focus` events on the window.
           * Needs to be an arrow function in order to preserve the context when it gets bound.
           */


          this._windowFocusListener = function () {
            // Make a note of when the window regains focus, so we can
            // restore the origin info for the focused element.
            _this995._windowFocused = true;
            _this995._windowFocusTimeoutId = setTimeout(function () {
              return _this995._windowFocused = false;
            });
          };
          /**
           * Event listener for `focus` and 'blur' events on the document.
           * Needs to be an arrow function in order to preserve the context when it gets bound.
           */


          this._rootNodeFocusAndBlurListener = function (event) {
            var target = getTarget(event);
            var handler = event.type === 'focus' ? _this995._onFocus : _this995._onBlur; // We need to walk up the ancestor chain in order to support `checkChildren`.

            for (var element = target; element; element = element.parentElement) {
              handler.call(_this995, event, element);
            }
          };

          this._document = document;
          this._detectionMode = (options === null || options === void 0 ? void 0 : options.detectionMode) || 0
          /* IMMEDIATE */
          ;
        }

        _createClass2(FocusMonitor, [{
          key: "monitor",
          value: function monitor(element) {
            var checkChildren = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
            var nativeElement = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceElement"])(element); // Do nothing if we're not on the browser platform or the passed in node isn't an element.

            if (!this._platform.isBrowser || nativeElement.nodeType !== 1) {
              return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])(null);
            } // If the element is inside the shadow DOM, we need to bind our focus/blur listeners to
            // the shadow root, rather than the `document`, because the browser won't emit focus events
            // to the `document`, if focus is moving within the same shadow root.


            var rootNode = Object(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_6__["_getShadowRoot"])(nativeElement) || this._getDocument();

            var cachedInfo = this._elementInfo.get(nativeElement); // Check if we're already monitoring this element.


            if (cachedInfo) {
              if (checkChildren) {
                // TODO(COMP-318): this can be problematic, because it'll turn all non-checkChildren
                // observers into ones that behave as if `checkChildren` was turned on. We need a more
                // robust solution.
                cachedInfo.checkChildren = true;
              }

              return cachedInfo.subject;
            } // Create monitored element info.


            var info = {
              checkChildren: checkChildren,
              subject: new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"](),
              rootNode: rootNode
            };

            this._elementInfo.set(nativeElement, info);

            this._registerGlobalListeners(info);

            return info.subject;
          }
        }, {
          key: "stopMonitoring",
          value: function stopMonitoring(element) {
            var nativeElement = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceElement"])(element);

            var elementInfo = this._elementInfo.get(nativeElement);

            if (elementInfo) {
              elementInfo.subject.complete();

              this._setClasses(nativeElement);

              this._elementInfo["delete"](nativeElement);

              this._removeGlobalListeners(elementInfo);
            }
          }
        }, {
          key: "focusVia",
          value: function focusVia(element, origin, options) {
            var _this996 = this;

            var nativeElement = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_5__["coerceElement"])(element);

            var focusedElement = this._getDocument().activeElement; // If the element is focused already, calling `focus` again won't trigger the event listener
            // which means that the focus classes won't be updated. If that's the case, update the classes
            // directly without waiting for an event.


            if (nativeElement === focusedElement) {
              this._getClosestElementsInfo(nativeElement).forEach(function (_ref146) {
                var _ref147 = _slicedToArray(_ref146, 2),
                    currentElement = _ref147[0],
                    info = _ref147[1];

                return _this996._originChanged(currentElement, origin, info);
              });
            } else {
              this._setOriginForCurrentEventQueue(origin); // `focus` isn't available on the server


              if (typeof nativeElement.focus === 'function') {
                nativeElement.focus(options);
              }
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            var _this997 = this;

            this._elementInfo.forEach(function (_info, element) {
              return _this997.stopMonitoring(element);
            });
          }
          /** Access injected document if available or fallback to global document reference */

        }, {
          key: "_getDocument",
          value: function _getDocument() {
            return this._document || document;
          }
          /** Use defaultView of injected document if available or fallback to global window reference */

        }, {
          key: "_getWindow",
          value: function _getWindow() {
            var doc = this._getDocument();

            return doc.defaultView || window;
          }
        }, {
          key: "_toggleClass",
          value: function _toggleClass(element, className, shouldSet) {
            if (shouldSet) {
              element.classList.add(className);
            } else {
              element.classList.remove(className);
            }
          }
        }, {
          key: "_getFocusOrigin",
          value: function _getFocusOrigin(event) {
            // If we couldn't detect a cause for the focus event, it's due to one of three reasons:
            // 1) The window has just regained focus, in which case we want to restore the focused state of
            //    the element from before the window blurred.
            // 2) It was caused by a touch event, in which case we mark the origin as 'touch'.
            // 3) The element was programmatically focused, in which case we should mark the origin as
            //    'program'.
            if (this._origin) {
              return this._origin;
            }

            if (this._windowFocused && this._lastFocusOrigin) {
              return this._lastFocusOrigin;
            } else if (this._wasCausedByTouch(event)) {
              return 'touch';
            } else {
              return 'program';
            }
          }
          /**
           * Sets the focus classes on the element based on the given focus origin.
           * @param element The element to update the classes on.
           * @param origin The focus origin.
           */

        }, {
          key: "_setClasses",
          value: function _setClasses(element, origin) {
            this._toggleClass(element, 'cdk-focused', !!origin);

            this._toggleClass(element, 'cdk-touch-focused', origin === 'touch');

            this._toggleClass(element, 'cdk-keyboard-focused', origin === 'keyboard');

            this._toggleClass(element, 'cdk-mouse-focused', origin === 'mouse');

            this._toggleClass(element, 'cdk-program-focused', origin === 'program');
          }
          /**
           * Sets the origin and schedules an async function to clear it at the end of the event queue.
           * If the detection mode is 'eventual', the origin is never cleared.
           * @param origin The origin to set.
           */

        }, {
          key: "_setOriginForCurrentEventQueue",
          value: function _setOriginForCurrentEventQueue(origin) {
            var _this998 = this;

            this._ngZone.runOutsideAngular(function () {
              _this998._origin = origin;

              if (_this998._detectionMode === 0
              /* IMMEDIATE */
              ) {
                  // Sometimes the focus origin won't be valid in Firefox because Firefox seems to focus *one*
                  // tick after the interaction event fired. To ensure the focus origin is always correct,
                  // the focus origin will be determined at the beginning of the next tick.
                  _this998._originTimeoutId = setTimeout(function () {
                    return _this998._origin = null;
                  }, 1);
                }
            });
          }
          /**
           * Checks whether the given focus event was caused by a touchstart event.
           * @param event The focus event to check.
           * @returns Whether the event was caused by a touch.
           */

        }, {
          key: "_wasCausedByTouch",
          value: function _wasCausedByTouch(event) {
            // Note(mmalerba): This implementation is not quite perfect, there is a small edge case.
            // Consider the following dom structure:
            //
            // <div #parent tabindex="0" cdkFocusClasses>
            //   <div #child (click)="#parent.focus()"></div>
            // </div>
            //
            // If the user touches the #child element and the #parent is programmatically focused as a
            // result, this code will still consider it to have been caused by the touch event and will
            // apply the cdk-touch-focused class rather than the cdk-program-focused class. This is a
            // relatively small edge-case that can be worked around by using
            // focusVia(parentEl, 'program') to focus the parent element.
            //
            // If we decide that we absolutely must handle this case correctly, we can do so by listening
            // for the first focus event after the touchstart, and then the first blur event after that
            // focus event. When that blur event fires we know that whatever follows is not a result of the
            // touchstart.
            var focusTarget = getTarget(event);
            return this._lastTouchTarget instanceof Node && focusTarget instanceof Node && (focusTarget === this._lastTouchTarget || focusTarget.contains(this._lastTouchTarget));
          }
          /**
           * Handles focus events on a registered element.
           * @param event The focus event.
           * @param element The monitored element.
           */

        }, {
          key: "_onFocus",
          value: function _onFocus(event, element) {
            // NOTE(mmalerba): We currently set the classes based on the focus origin of the most recent
            // focus event affecting the monitored element. If we want to use the origin of the first event
            // instead we should check for the cdk-focused class here and return if the element already has
            // it. (This only matters for elements that have includesChildren = true).
            // If we are not counting child-element-focus as focused, make sure that the event target is the
            // monitored element itself.
            var elementInfo = this._elementInfo.get(element);

            if (!elementInfo || !elementInfo.checkChildren && element !== getTarget(event)) {
              return;
            }

            this._originChanged(element, this._getFocusOrigin(event), elementInfo);
          }
          /**
           * Handles blur events on a registered element.
           * @param event The blur event.
           * @param element The monitored element.
           */

        }, {
          key: "_onBlur",
          value: function _onBlur(event, element) {
            // If we are counting child-element-focus as focused, make sure that we aren't just blurring in
            // order to focus another child of the monitored element.
            var elementInfo = this._elementInfo.get(element);

            if (!elementInfo || elementInfo.checkChildren && event.relatedTarget instanceof Node && element.contains(event.relatedTarget)) {
              return;
            }

            this._setClasses(element);

            this._emitOrigin(elementInfo.subject, null);
          }
        }, {
          key: "_emitOrigin",
          value: function _emitOrigin(subject, origin) {
            this._ngZone.run(function () {
              return subject.next(origin);
            });
          }
        }, {
          key: "_registerGlobalListeners",
          value: function _registerGlobalListeners(elementInfo) {
            var _this999 = this;

            if (!this._platform.isBrowser) {
              return;
            }

            var rootNode = elementInfo.rootNode;
            var rootNodeFocusListeners = this._rootNodeFocusListenerCount.get(rootNode) || 0;

            if (!rootNodeFocusListeners) {
              this._ngZone.runOutsideAngular(function () {
                rootNode.addEventListener('focus', _this999._rootNodeFocusAndBlurListener, captureEventListenerOptions);
                rootNode.addEventListener('blur', _this999._rootNodeFocusAndBlurListener, captureEventListenerOptions);
              });
            }

            this._rootNodeFocusListenerCount.set(rootNode, rootNodeFocusListeners + 1); // Register global listeners when first element is monitored.


            if (++this._monitoredElementCount === 1) {
              // Note: we listen to events in the capture phase so we
              // can detect them even if the user stops propagation.
              this._ngZone.runOutsideAngular(function () {
                var document = _this999._getDocument();

                var window = _this999._getWindow();

                document.addEventListener('keydown', _this999._documentKeydownListener, captureEventListenerOptions);
                document.addEventListener('mousedown', _this999._documentMousedownListener, captureEventListenerOptions);
                document.addEventListener('touchstart', _this999._documentTouchstartListener, captureEventListenerOptions);
                window.addEventListener('focus', _this999._windowFocusListener);
              });
            }
          }
        }, {
          key: "_removeGlobalListeners",
          value: function _removeGlobalListeners(elementInfo) {
            var rootNode = elementInfo.rootNode;

            if (this._rootNodeFocusListenerCount.has(rootNode)) {
              var rootNodeFocusListeners = this._rootNodeFocusListenerCount.get(rootNode);

              if (rootNodeFocusListeners > 1) {
                this._rootNodeFocusListenerCount.set(rootNode, rootNodeFocusListeners - 1);
              } else {
                rootNode.removeEventListener('focus', this._rootNodeFocusAndBlurListener, captureEventListenerOptions);
                rootNode.removeEventListener('blur', this._rootNodeFocusAndBlurListener, captureEventListenerOptions);

                this._rootNodeFocusListenerCount["delete"](rootNode);
              }
            } // Unregister global listeners when last element is unmonitored.


            if (! --this._monitoredElementCount) {
              var _document2 = this._getDocument();

              var _window5 = this._getWindow();

              _document2.removeEventListener('keydown', this._documentKeydownListener, captureEventListenerOptions);

              _document2.removeEventListener('mousedown', this._documentMousedownListener, captureEventListenerOptions);

              _document2.removeEventListener('touchstart', this._documentTouchstartListener, captureEventListenerOptions);

              _window5.removeEventListener('focus', this._windowFocusListener); // Clear timeouts for all potentially pending timeouts to prevent the leaks.


              clearTimeout(this._windowFocusTimeoutId);
              clearTimeout(this._touchTimeoutId);
              clearTimeout(this._originTimeoutId);
            }
          }
          /** Updates all the state on an element once its focus origin has changed. */

        }, {
          key: "_originChanged",
          value: function _originChanged(element, origin, elementInfo) {
            this._setClasses(element, origin);

            this._emitOrigin(elementInfo.subject, origin);

            this._lastFocusOrigin = origin;
          }
          /**
           * Collects the `MonitoredElementInfo` of a particular element and
           * all of its ancestors that have enabled `checkChildren`.
           * @param element Element from which to start the search.
           */

        }, {
          key: "_getClosestElementsInfo",
          value: function _getClosestElementsInfo(element) {
            var results = [];

            this._elementInfo.forEach(function (info, currentElement) {
              if (currentElement === element || info.checkChildren && currentElement.contains(element)) {
                results.push([currentElement, info]);
              }
            });

            return results;
          }
        }]);

        return FocusMonitor;
      }();

      FocusMonitor.ɵfac = function FocusMonitor_Factory(t) {
        return new (t || FocusMonitor)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_6__["Platform"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](FOCUS_MONITOR_DEFAULT_OPTIONS, 8));
      };

      FocusMonitor.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function FocusMonitor_Factory() {
          return new FocusMonitor(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_6__["Platform"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"], 8), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(FOCUS_MONITOR_DEFAULT_OPTIONS, 8));
        },
        token: FocusMonitor,
        providedIn: "root"
      });

      FocusMonitor.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        }, {
          type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_6__["Platform"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [FOCUS_MONITOR_DEFAULT_OPTIONS]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](FocusMonitor, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
          }, {
            type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_6__["Platform"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [FOCUS_MONITOR_DEFAULT_OPTIONS]
            }]
          }];
        }, null);
      })();
      /** Gets the target of an event, accounting for Shadow DOM. */


      function getTarget(event) {
        // If an event is bound outside the Shadow DOM, the `event.target` will
        // point to the shadow root so we have to use `composedPath` instead.
        return event.composedPath ? event.composedPath()[0] : event.target;
      }
      /**
       * Directive that determines how a particular element was focused (via keyboard, mouse, touch, or
       * programmatically) and adds corresponding classes to the element.
       *
       * There are two variants of this directive:
       * 1) cdkMonitorElementFocus: does not consider an element to be focused if one of its children is
       *    focused.
       * 2) cdkMonitorSubtreeFocus: considers an element focused if it or any of its children are focused.
       */


      var CdkMonitorFocus = /*#__PURE__*/function () {
        function CdkMonitorFocus(_elementRef, _focusMonitor) {
          _classCallCheck2(this, CdkMonitorFocus);

          this._elementRef = _elementRef;
          this._focusMonitor = _focusMonitor;
          this.cdkFocusChange = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["EventEmitter"]();
        }

        _createClass2(CdkMonitorFocus, [{
          key: "ngAfterViewInit",
          value: function ngAfterViewInit() {
            var _this1000 = this;

            var element = this._elementRef.nativeElement;
            this._monitorSubscription = this._focusMonitor.monitor(element, element.nodeType === 1 && element.hasAttribute('cdkMonitorSubtreeFocus')).subscribe(function (origin) {
              return _this1000.cdkFocusChange.emit(origin);
            });
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._focusMonitor.stopMonitoring(this._elementRef);

            if (this._monitorSubscription) {
              this._monitorSubscription.unsubscribe();
            }
          }
        }]);

        return CdkMonitorFocus;
      }();

      CdkMonitorFocus.ɵfac = function CdkMonitorFocus_Factory(t) {
        return new (t || CdkMonitorFocus)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](FocusMonitor));
      };

      CdkMonitorFocus.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({
        type: CdkMonitorFocus,
        selectors: [["", "cdkMonitorElementFocus", ""], ["", "cdkMonitorSubtreeFocus", ""]],
        outputs: {
          cdkFocusChange: "cdkFocusChange"
        }
      });

      CdkMonitorFocus.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
        }, {
          type: FocusMonitor
        }];
      };

      CdkMonitorFocus.propDecorators = {
        cdkFocusChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkMonitorFocus, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
          args: [{
            selector: '[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
          }, {
            type: FocusMonitor
          }];
        }, {
          cdkFocusChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** CSS class applied to the document body when in black-on-white high-contrast mode. */


      var BLACK_ON_WHITE_CSS_CLASS = 'cdk-high-contrast-black-on-white';
      /** CSS class applied to the document body when in white-on-black high-contrast mode. */

      var WHITE_ON_BLACK_CSS_CLASS = 'cdk-high-contrast-white-on-black';
      /** CSS class applied to the document body when in high-contrast mode. */

      var HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS = 'cdk-high-contrast-active';
      /**
       * Service to determine whether the browser is currently in a high-contrast-mode environment.
       *
       * Microsoft Windows supports an accessibility feature called "High Contrast Mode". This mode
       * changes the appearance of all applications, including web applications, to dramatically increase
       * contrast.
       *
       * IE, Edge, and Firefox currently support this mode. Chrome does not support Windows High Contrast
       * Mode. This service does not detect high-contrast mode as added by the Chrome "High Contrast"
       * browser extension.
       */

      var HighContrastModeDetector = /*#__PURE__*/function () {
        function HighContrastModeDetector(_platform, document) {
          _classCallCheck2(this, HighContrastModeDetector);

          this._platform = _platform;
          this._document = document;
        }
        /** Gets the current high-contrast-mode for the page. */


        _createClass2(HighContrastModeDetector, [{
          key: "getHighContrastMode",
          value: function getHighContrastMode() {
            if (!this._platform.isBrowser) {
              return 0
              /* NONE */
              ;
            } // Create a test element with an arbitrary background-color that is neither black nor
            // white; high-contrast mode will coerce the color to either black or white. Also ensure that
            // appending the test element to the DOM does not affect layout by absolutely positioning it


            var testElement = this._document.createElement('div');

            testElement.style.backgroundColor = 'rgb(1,2,3)';
            testElement.style.position = 'absolute';

            this._document.body.appendChild(testElement); // Get the computed style for the background color, collapsing spaces to normalize between
            // browsers. Once we get this color, we no longer need the test element. Access the `window`
            // via the document so we can fake it in tests. Note that we have extra null checks, because
            // this logic will likely run during app bootstrap and throwing can break the entire app.


            var documentWindow = this._document.defaultView || window;
            var computedStyle = documentWindow && documentWindow.getComputedStyle ? documentWindow.getComputedStyle(testElement) : null;
            var computedColor = (computedStyle && computedStyle.backgroundColor || '').replace(/ /g, '');

            this._document.body.removeChild(testElement);

            switch (computedColor) {
              case 'rgb(0,0,0)':
                return 2
                /* WHITE_ON_BLACK */
                ;

              case 'rgb(255,255,255)':
                return 1
                /* BLACK_ON_WHITE */
                ;
            }

            return 0
            /* NONE */
            ;
          }
          /** Applies CSS classes indicating high-contrast mode to document body (browser-only). */

        }, {
          key: "_applyBodyHighContrastModeCssClasses",
          value: function _applyBodyHighContrastModeCssClasses() {
            if (this._platform.isBrowser && this._document.body) {
              var bodyClasses = this._document.body.classList; // IE11 doesn't support `classList` operations with multiple arguments

              bodyClasses.remove(HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS);
              bodyClasses.remove(BLACK_ON_WHITE_CSS_CLASS);
              bodyClasses.remove(WHITE_ON_BLACK_CSS_CLASS);
              var mode = this.getHighContrastMode();

              if (mode === 1
              /* BLACK_ON_WHITE */
              ) {
                  bodyClasses.add(HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS);
                  bodyClasses.add(BLACK_ON_WHITE_CSS_CLASS);
                } else if (mode === 2
              /* WHITE_ON_BLACK */
              ) {
                  bodyClasses.add(HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS);
                  bodyClasses.add(WHITE_ON_BLACK_CSS_CLASS);
                }
            }
          }
        }]);

        return HighContrastModeDetector;
      }();

      HighContrastModeDetector.ɵfac = function HighContrastModeDetector_Factory(t) {
        return new (t || HighContrastModeDetector)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_6__["Platform"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]));
      };

      HighContrastModeDetector.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function HighContrastModeDetector_Factory() {
          return new HighContrastModeDetector(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_6__["Platform"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]));
        },
        token: HighContrastModeDetector,
        providedIn: "root"
      });

      HighContrastModeDetector.ctorParameters = function () {
        return [{
          type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_6__["Platform"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](HighContrastModeDetector, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_6__["Platform"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"]]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var A11yModule = function A11yModule(highContrastModeDetector) {
        _classCallCheck2(this, A11yModule);

        highContrastModeDetector._applyBodyHighContrastModeCssClasses();
      };

      A11yModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({
        type: A11yModule
      });
      A11yModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({
        factory: function A11yModule_Factory(t) {
          return new (t || A11yModule)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](HighContrastModeDetector));
        },
        imports: [[_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_6__["PlatformModule"], _angular_cdk_observers__WEBPACK_IMPORTED_MODULE_7__["ObserversModule"]]]
      });

      A11yModule.ctorParameters = function () {
        return [{
          type: HighContrastModeDetector
        }];
      };

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](A11yModule, {
          declarations: function declarations() {
            return [CdkAriaLive, CdkTrapFocus, CdkMonitorFocus];
          },
          imports: function imports() {
            return [_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_6__["PlatformModule"], _angular_cdk_observers__WEBPACK_IMPORTED_MODULE_7__["ObserversModule"]];
          },
          exports: function exports() {
            return [CdkAriaLive, CdkTrapFocus, CdkMonitorFocus];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](A11yModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
          args: [{
            imports: [_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_6__["PlatformModule"], _angular_cdk_observers__WEBPACK_IMPORTED_MODULE_7__["ObserversModule"]],
            declarations: [CdkAriaLive, CdkTrapFocus, CdkMonitorFocus],
            exports: [CdkAriaLive, CdkTrapFocus, CdkMonitorFocus]
          }]
        }], function () {
          return [{
            type: HighContrastModeDetector
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=a11y.js.map

      /***/

    },

    /***/
    "u8bp":
    /*!***************************************************************************!*\
      !*** ./node_modules/aws-sdk/lib/credentials/credential_provider_chain.js ***!
      \***************************************************************************/

    /*! no static exports found */

    /***/
    function u8bp(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ../core */
      "QsWE");
      /**
       * Creates a credential provider chain that searches for AWS credentials
       * in a list of credential providers specified by the {providers} property.
       *
       * By default, the chain will use the {defaultProviders} to resolve credentials.
       * These providers will look in the environment using the
       * {AWS.EnvironmentCredentials} class with the 'AWS' and 'AMAZON' prefixes.
       *
       * ## Setting Providers
       *
       * Each provider in the {providers} list should be a function that returns
       * a {AWS.Credentials} object, or a hardcoded credentials object. The function
       * form allows for delayed execution of the credential construction.
       *
       * ## Resolving Credentials from a Chain
       *
       * Call {resolve} to return the first valid credential object that can be
       * loaded by the provider chain.
       *
       * For example, to resolve a chain with a custom provider that checks a file
       * on disk after the set of {defaultProviders}:
       *
       * ```javascript
       * var diskProvider = new AWS.FileSystemCredentials('./creds.json');
       * var chain = new AWS.CredentialProviderChain();
       * chain.providers.push(diskProvider);
       * chain.resolve();
       * ```
       *
       * The above code will return the `diskProvider` object if the
       * file contains credentials and the `defaultProviders` do not contain
       * any credential settings.
       *
       * @!attribute providers
       *   @return [Array<AWS.Credentials, Function>]
       *     a list of credentials objects or functions that return credentials
       *     objects. If the provider is a function, the function will be
       *     executed lazily when the provider needs to be checked for valid
       *     credentials. By default, this object will be set to the
       *     {defaultProviders}.
       *   @see defaultProviders
       */


      AWS.CredentialProviderChain = AWS.util.inherit(AWS.Credentials, {
        /**
         * Creates a new CredentialProviderChain with a default set of providers
         * specified by {defaultProviders}.
         */
        constructor: function CredentialProviderChain(providers) {
          if (providers) {
            this.providers = providers;
          } else {
            this.providers = AWS.CredentialProviderChain.defaultProviders.slice(0);
          }

          this.resolveCallbacks = [];
        },

        /**
         * @!method  resolvePromise()
         *   Returns a 'thenable' promise.
         *   Resolves the provider chain by searching for the first set of
         *   credentials in {providers}.
         *
         *   Two callbacks can be provided to the `then` method on the returned promise.
         *   The first callback will be called if the promise is fulfilled, and the second
         *   callback will be called if the promise is rejected.
         *   @callback fulfilledCallback function(credentials)
         *     Called if the promise is fulfilled and the provider resolves the chain
         *     to a credentials object
         *     @param credentials [AWS.Credentials] the credentials object resolved
         *       by the provider chain.
         *   @callback rejectedCallback function(error)
         *     Called if the promise is rejected.
         *     @param err [Error] the error object returned if no credentials are found.
         *   @return [Promise] A promise that represents the state of the `resolve` method call.
         *   @example Calling the `resolvePromise` method.
         *     var promise = chain.resolvePromise();
         *     promise.then(function(credentials) { ... }, function(err) { ... });
         */

        /**
         * Resolves the provider chain by searching for the first set of
         * credentials in {providers}.
         *
         * @callback callback function(err, credentials)
         *   Called when the provider resolves the chain to a credentials object
         *   or null if no credentials can be found.
         *
         *   @param err [Error] the error object returned if no credentials are
         *     found.
         *   @param credentials [AWS.Credentials] the credentials object resolved
         *     by the provider chain.
         * @return [AWS.CredentialProviderChain] the provider, for chaining.
         */
        resolve: function resolve(callback) {
          var self = this;

          if (self.providers.length === 0) {
            callback(new Error('No providers'));
            return self;
          }

          if (self.resolveCallbacks.push(callback) === 1) {
            var resolveNext = function resolveNext(err, creds) {
              if (!err && creds || index === providers.length) {
                AWS.util.arrayEach(self.resolveCallbacks, function (callback) {
                  callback(err, creds);
                });
                self.resolveCallbacks.length = 0;
                return;
              }

              var provider = providers[index++];

              if (typeof provider === 'function') {
                creds = provider.call();
              } else {
                creds = provider;
              }

              if (creds.get) {
                creds.get(function (getErr) {
                  resolveNext(getErr, getErr ? null : creds);
                });
              } else {
                resolveNext(null, creds);
              }
            };

            var index = 0;
            var providers = self.providers.slice(0);
            resolveNext();
          }

          return self;
        }
      });
      /**
       * The default set of providers used by a vanilla CredentialProviderChain.
       *
       * In the browser:
       *
       * ```javascript
       * AWS.CredentialProviderChain.defaultProviders = []
       * ```
       *
       * In Node.js:
       *
       * ```javascript
       * AWS.CredentialProviderChain.defaultProviders = [
       *   function () { return new AWS.EnvironmentCredentials('AWS'); },
       *   function () { return new AWS.EnvironmentCredentials('AMAZON'); },
       *   function () { return new AWS.SharedIniFileCredentials(); },
       *   function () { return new AWS.ECSCredentials(); },
       *   function () { return new AWS.ProcessCredentials(); },
       *   function () { return new AWS.TokenFileWebIdentityCredentials(); },
       *   function () { return new AWS.EC2MetadataCredentials() }
       * ]
       * ```
       */

      AWS.CredentialProviderChain.defaultProviders = [];
      /**
       * @api private
       */

      AWS.CredentialProviderChain.addPromisesToClass = function addPromisesToClass(PromiseDependency) {
        this.prototype.resolvePromise = AWS.util.promisifyMethod('resolve', PromiseDependency);
      };
      /**
       * @api private
       */


      AWS.CredentialProviderChain.deletePromisesFromClass = function deletePromisesFromClass() {
        delete this.prototype.resolvePromise;
      };

      AWS.util.addPromises(AWS.CredentialProviderChain);
      /***/
    },

    /***/
    "uEye":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/nn.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function uEye(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Nynorsk [nn]
      //! authors : https://github.com/mechuwind
      //!           Stephen Ramthun : https://github.com/stephenramthun
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var nn = moment.defineLocale('nn', {
          months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
          monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),
          monthsParseExact: true,
          weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),
          weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'),
          weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY [kl.] H:mm',
            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm'
          },
          calendar: {
            sameDay: '[I dag klokka] LT',
            nextDay: '[I morgon klokka] LT',
            nextWeek: 'dddd [klokka] LT',
            lastDay: '[I går klokka] LT',
            lastWeek: '[Føregåande] dddd [klokka] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'om %s',
            past: '%s sidan',
            s: 'nokre sekund',
            ss: '%d sekund',
            m: 'eit minutt',
            mm: '%d minutt',
            h: 'ein time',
            hh: '%d timar',
            d: 'ein dag',
            dd: '%d dagar',
            w: 'ei veke',
            ww: '%d veker',
            M: 'ein månad',
            MM: '%d månader',
            y: 'eit år',
            yy: '%d år'
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return nn;
      });
      /***/

    },

    /***/
    "uTdr":
    /*!****************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/onErrorResumeNext.js ***!
      \****************************************************************************/

    /*! exports provided: onErrorResumeNext, onErrorResumeNextStatic */

    /***/
    function uTdr(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "onErrorResumeNext", function () {
        return onErrorResumeNext;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "onErrorResumeNextStatic", function () {
        return onErrorResumeNextStatic;
      });
      /* harmony import */


      var _observable_from__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../observable/from */
      "Cfvw");
      /* harmony import */


      var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/isArray */
      "DH7j");
      /* harmony import */


      var _innerSubscribe__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../innerSubscribe */
      "zx2A");

      function onErrorResumeNext() {
        for (var _len66 = arguments.length, nextSources = new Array(_len66), _key69 = 0; _key69 < _len66; _key69++) {
          nextSources[_key69] = arguments[_key69];
        }

        if (nextSources.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(nextSources[0])) {
          nextSources = nextSources[0];
        }

        return function (source) {
          return source.lift(new OnErrorResumeNextOperator(nextSources));
        };
      }

      function onErrorResumeNextStatic() {
        for (var _len67 = arguments.length, nextSources = new Array(_len67), _key70 = 0; _key70 < _len67; _key70++) {
          nextSources[_key70] = arguments[_key70];
        }

        var source = undefined;

        if (nextSources.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(nextSources[0])) {
          nextSources = nextSources[0];
        }

        source = nextSources.shift();
        return Object(_observable_from__WEBPACK_IMPORTED_MODULE_0__["from"])(source).lift(new OnErrorResumeNextOperator(nextSources));
      }

      var OnErrorResumeNextOperator = /*#__PURE__*/function () {
        function OnErrorResumeNextOperator(nextSources) {
          _classCallCheck2(this, OnErrorResumeNextOperator);

          this.nextSources = nextSources;
        }

        _createClass2(OnErrorResumeNextOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new OnErrorResumeNextSubscriber(subscriber, this.nextSources));
          }
        }]);

        return OnErrorResumeNextOperator;
      }();

      var OnErrorResumeNextSubscriber = /*#__PURE__*/function (_innerSubscribe__WEBP19) {
        _inherits2(OnErrorResumeNextSubscriber, _innerSubscribe__WEBP19);

        var _super392 = _createSuper(OnErrorResumeNextSubscriber);

        function OnErrorResumeNextSubscriber(destination, nextSources) {
          var _this1001;

          _classCallCheck2(this, OnErrorResumeNextSubscriber);

          _this1001 = _super392.call(this, destination);
          _this1001.destination = destination;
          _this1001.nextSources = nextSources;
          return _this1001;
        }

        _createClass2(OnErrorResumeNextSubscriber, [{
          key: "notifyError",
          value: function notifyError() {
            this.subscribeToNextSource();
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete() {
            this.subscribeToNextSource();
          }
        }, {
          key: "_error",
          value: function _error(err) {
            this.subscribeToNextSource();
            this.unsubscribe();
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.subscribeToNextSource();
            this.unsubscribe();
          }
        }, {
          key: "subscribeToNextSource",
          value: function subscribeToNextSource() {
            var next = this.nextSources.shift();

            if (!!next) {
              var innerSubscriber = new _innerSubscribe__WEBPACK_IMPORTED_MODULE_2__["SimpleInnerSubscriber"](this);
              var destination = this.destination;
              destination.add(innerSubscriber);
              var innerSubscription = Object(_innerSubscribe__WEBPACK_IMPORTED_MODULE_2__["innerSubscribe"])(next, innerSubscriber);

              if (innerSubscription !== innerSubscriber) {
                destination.add(innerSubscription);
              }
            } else {
              this.destination.complete();
            }
          }
        }]);

        return OnErrorResumeNextSubscriber;
      }(_innerSubscribe__WEBPACK_IMPORTED_MODULE_2__["SimpleOuterSubscriber"]); //# sourceMappingURL=onErrorResumeNext.js.map

      /***/

    },

    /***/
    "uXwI":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/lv.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function uXwI(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Latvian [lv]
      //! author : Kristaps Karlsons : https://github.com/skakri
      //! author : Jānis Elmeris : https://github.com/JanisE
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var units = {
          ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'),
          m: 'minūtes_minūtēm_minūte_minūtes'.split('_'),
          mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'),
          h: 'stundas_stundām_stunda_stundas'.split('_'),
          hh: 'stundas_stundām_stunda_stundas'.split('_'),
          d: 'dienas_dienām_diena_dienas'.split('_'),
          dd: 'dienas_dienām_diena_dienas'.split('_'),
          M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
          MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
          y: 'gada_gadiem_gads_gadi'.split('_'),
          yy: 'gada_gadiem_gads_gadi'.split('_')
        };
        /**
         * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.
         */

        function format(forms, number, withoutSuffix) {
          if (withoutSuffix) {
            // E.g. "21 minūte", "3 minūtes".
            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];
          } else {
            // E.g. "21 minūtes" as in "pēc 21 minūtes".
            // E.g. "3 minūtēm" as in "pēc 3 minūtēm".
            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];
          }
        }

        function relativeTimeWithPlural(number, withoutSuffix, key) {
          return number + ' ' + format(units[key], number, withoutSuffix);
        }

        function relativeTimeWithSingular(number, withoutSuffix, key) {
          return format(units[key], number, withoutSuffix);
        }

        function relativeSeconds(number, withoutSuffix) {
          return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';
        }

        var lv = moment.defineLocale('lv', {
          months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),
          monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),
          weekdays: 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),
          weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),
          weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY.',
            LL: 'YYYY. [gada] D. MMMM',
            LLL: 'YYYY. [gada] D. MMMM, HH:mm',
            LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm'
          },
          calendar: {
            sameDay: '[Šodien pulksten] LT',
            nextDay: '[Rīt pulksten] LT',
            nextWeek: 'dddd [pulksten] LT',
            lastDay: '[Vakar pulksten] LT',
            lastWeek: '[Pagājušā] dddd [pulksten] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'pēc %s',
            past: 'pirms %s',
            s: relativeSeconds,
            ss: relativeTimeWithPlural,
            m: relativeTimeWithSingular,
            mm: relativeTimeWithPlural,
            h: relativeTimeWithSingular,
            hh: relativeTimeWithPlural,
            d: relativeTimeWithSingular,
            dd: relativeTimeWithPlural,
            M: relativeTimeWithSingular,
            MM: relativeTimeWithPlural,
            y: relativeTimeWithSingular,
            yy: relativeTimeWithPlural
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return lv;
      });
      /***/

    },

    /***/
    "un/a":
    /*!****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/retry.js ***!
      \****************************************************************/

    /*! exports provided: retry */

    /***/
    function unA(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "retry", function () {
        return retry;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");

      function retry() {
        var count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1;
        return function (source) {
          return source.lift(new RetryOperator(count, source));
        };
      }

      var RetryOperator = /*#__PURE__*/function () {
        function RetryOperator(count, source) {
          _classCallCheck2(this, RetryOperator);

          this.count = count;
          this.source = source;
        }

        _createClass2(RetryOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new RetrySubscriber(subscriber, this.count, this.source));
          }
        }]);

        return RetryOperator;
      }();

      var RetrySubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_43) {
        _inherits2(RetrySubscriber, _Subscriber__WEBPACK_43);

        var _super393 = _createSuper(RetrySubscriber);

        function RetrySubscriber(destination, count, source) {
          var _this1002;

          _classCallCheck2(this, RetrySubscriber);

          _this1002 = _super393.call(this, destination);
          _this1002.count = count;
          _this1002.source = source;
          return _this1002;
        }

        _createClass2(RetrySubscriber, [{
          key: "error",
          value: function error(err) {
            if (!this.isStopped) {
              var source = this.source,
                  count = this.count;

              if (count === 0) {
                return _get2(_getPrototypeOf2(RetrySubscriber.prototype), "error", this).call(this, err);
              } else if (count > -1) {
                this.count = count - 1;
              }

              source.subscribe(this._unsubscribeAndRecycle());
            }
          }
        }]);

        return RetrySubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=retry.js.map

      /***/

    },

    /***/
    "vFq9":
    /*!******************************************************************!*\
      !*** ./node_modules/aws-sdk/lib/credentials/saml_credentials.js ***!
      \******************************************************************/

    /*! no static exports found */

    /***/
    function vFq9(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ../core */
      "QsWE");

      var STS = __webpack_require__(
      /*! ../../clients/sts */
      "6Yqx");
      /**
       * Represents credentials retrieved from STS SAML support.
       *
       * By default this provider gets credentials using the
       * {AWS.STS.assumeRoleWithSAML} service operation. This operation
       * requires a `RoleArn` containing the ARN of the IAM trust policy for the
       * application for which credentials will be given, as well as a `PrincipalArn`
       * representing the ARN for the SAML identity provider. In addition, the
       * `SAMLAssertion` must be set to the token provided by the identity
       * provider. See {constructor} for an example on creating a credentials
       * object with proper `RoleArn`, `PrincipalArn`, and `SAMLAssertion` values.
       *
       * ## Refreshing Credentials from Identity Service
       *
       * In addition to AWS credentials expiring after a given amount of time, the
       * login token from the identity provider will also expire. Once this token
       * expires, it will not be usable to refresh AWS credentials, and another
       * token will be needed. The SDK does not manage refreshing of the token value,
       * but this can be done through a "refresh token" supported by most identity
       * providers. Consult the documentation for the identity provider for refreshing
       * tokens. Once the refreshed token is acquired, you should make sure to update
       * this new token in the credentials object's {params} property. The following
       * code will update the SAMLAssertion, assuming you have retrieved an updated
       * token from the identity provider:
       *
       * ```javascript
       * AWS.config.credentials.params.SAMLAssertion = updatedToken;
       * ```
       *
       * Future calls to `credentials.refresh()` will now use the new token.
       *
       * @!attribute params
       *   @return [map] the map of params passed to
       *     {AWS.STS.assumeRoleWithSAML}. To update the token, set the
       *     `params.SAMLAssertion` property.
       */


      AWS.SAMLCredentials = AWS.util.inherit(AWS.Credentials, {
        /**
         * Creates a new credentials object.
         * @param (see AWS.STS.assumeRoleWithSAML)
         * @example Creating a new credentials object
         *   AWS.config.credentials = new AWS.SAMLCredentials({
         *     RoleArn: 'arn:aws:iam::1234567890:role/SAMLRole',
         *     PrincipalArn: 'arn:aws:iam::1234567890:role/SAMLPrincipal',
         *     SAMLAssertion: 'base64-token', // base64-encoded token from IdP
         *   });
         * @see AWS.STS.assumeRoleWithSAML
         */
        constructor: function SAMLCredentials(params) {
          AWS.Credentials.call(this);
          this.expired = true;
          this.params = params;
        },

        /**
         * Refreshes credentials using {AWS.STS.assumeRoleWithSAML}
         *
         * @callback callback function(err)
         *   Called when the STS service responds (or fails). When
         *   this callback is called with no error, it means that the credentials
         *   information has been loaded into the object (as the `accessKeyId`,
         *   `secretAccessKey`, and `sessionToken` properties).
         *   @param err [Error] if an error occurred, this value will be filled
         * @see get
         */
        refresh: function refresh(callback) {
          this.coalesceRefresh(callback || AWS.util.fn.callback);
        },

        /**
         * @api private
         */
        load: function load(callback) {
          var self = this;
          self.createClients();
          self.service.assumeRoleWithSAML(function (err, data) {
            if (!err) {
              self.service.credentialsFrom(data, self);
            }

            callback(err);
          });
        },

        /**
         * @api private
         */
        createClients: function createClients() {
          this.service = this.service || new STS({
            params: this.params
          });
        }
      });
      /***/
    },

    /***/
    "vkgz":
    /*!**************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/tap.js ***!
      \**************************************************************/

    /*! exports provided: tap */

    /***/
    function vkgz(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "tap", function () {
        return tap;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");
      /* harmony import */


      var _util_noop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/noop */
      "KqfI");
      /* harmony import */


      var _util_isFunction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../util/isFunction */
      "n6bG");

      function tap(nextOrObserver, error, complete) {
        return function tapOperatorFunction(source) {
          return source.lift(new DoOperator(nextOrObserver, error, complete));
        };
      }

      var DoOperator = /*#__PURE__*/function () {
        function DoOperator(nextOrObserver, error, complete) {
          _classCallCheck2(this, DoOperator);

          this.nextOrObserver = nextOrObserver;
          this.error = error;
          this.complete = complete;
        }

        _createClass2(DoOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new TapSubscriber(subscriber, this.nextOrObserver, this.error, this.complete));
          }
        }]);

        return DoOperator;
      }();

      var TapSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_44) {
        _inherits2(TapSubscriber, _Subscriber__WEBPACK_44);

        var _super394 = _createSuper(TapSubscriber);

        function TapSubscriber(destination, observerOrNext, error, complete) {
          var _this1003;

          _classCallCheck2(this, TapSubscriber);

          _this1003 = _super394.call(this, destination);
          _this1003._tapNext = _util_noop__WEBPACK_IMPORTED_MODULE_1__["noop"];
          _this1003._tapError = _util_noop__WEBPACK_IMPORTED_MODULE_1__["noop"];
          _this1003._tapComplete = _util_noop__WEBPACK_IMPORTED_MODULE_1__["noop"];
          _this1003._tapError = error || _util_noop__WEBPACK_IMPORTED_MODULE_1__["noop"];
          _this1003._tapComplete = complete || _util_noop__WEBPACK_IMPORTED_MODULE_1__["noop"];

          if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_2__["isFunction"])(observerOrNext)) {
            _this1003._context = _assertThisInitialized2(_this1003);
            _this1003._tapNext = observerOrNext;
          } else if (observerOrNext) {
            _this1003._context = observerOrNext;
            _this1003._tapNext = observerOrNext.next || _util_noop__WEBPACK_IMPORTED_MODULE_1__["noop"];
            _this1003._tapError = observerOrNext.error || _util_noop__WEBPACK_IMPORTED_MODULE_1__["noop"];
            _this1003._tapComplete = observerOrNext.complete || _util_noop__WEBPACK_IMPORTED_MODULE_1__["noop"];
          }

          return _this1003;
        }

        _createClass2(TapSubscriber, [{
          key: "_next",
          value: function _next(value) {
            try {
              this._tapNext.call(this._context, value);
            } catch (err) {
              this.destination.error(err);
              return;
            }

            this.destination.next(value);
          }
        }, {
          key: "_error",
          value: function _error(err) {
            try {
              this._tapError.call(this._context, err);
            } catch (err) {
              this.destination.error(err);
              return;
            }

            this.destination.error(err);
          }
        }, {
          key: "_complete",
          value: function _complete() {
            try {
              this._tapComplete.call(this._context);
            } catch (err) {
              this.destination.error(err);
              return;
            }

            return this.destination.complete();
          }
        }]);

        return TapSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=tap.js.map

      /***/

    },

    /***/
    "vqkR":
    /*!********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/skipUntil.js ***!
      \********************************************************************/

    /*! exports provided: skipUntil */

    /***/
    function vqkR(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "skipUntil", function () {
        return skipUntil;
      });
      /* harmony import */


      var _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../innerSubscribe */
      "zx2A");

      function skipUntil(notifier) {
        return function (source) {
          return source.lift(new SkipUntilOperator(notifier));
        };
      }

      var SkipUntilOperator = /*#__PURE__*/function () {
        function SkipUntilOperator(notifier) {
          _classCallCheck2(this, SkipUntilOperator);

          this.notifier = notifier;
        }

        _createClass2(SkipUntilOperator, [{
          key: "call",
          value: function call(destination, source) {
            return source.subscribe(new SkipUntilSubscriber(destination, this.notifier));
          }
        }]);

        return SkipUntilOperator;
      }();

      var SkipUntilSubscriber = /*#__PURE__*/function (_innerSubscribe__WEBP20) {
        _inherits2(SkipUntilSubscriber, _innerSubscribe__WEBP20);

        var _super395 = _createSuper(SkipUntilSubscriber);

        function SkipUntilSubscriber(destination, notifier) {
          var _this1004;

          _classCallCheck2(this, SkipUntilSubscriber);

          _this1004 = _super395.call(this, destination);
          _this1004.hasValue = false;
          var innerSubscriber = new _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleInnerSubscriber"](_assertThisInitialized2(_this1004));

          _this1004.add(innerSubscriber);

          _this1004.innerSubscription = innerSubscriber;
          var innerSubscription = Object(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["innerSubscribe"])(notifier, innerSubscriber);

          if (innerSubscription !== innerSubscriber) {
            _this1004.add(innerSubscription);

            _this1004.innerSubscription = innerSubscription;
          }

          return _this1004;
        }

        _createClass2(SkipUntilSubscriber, [{
          key: "_next",
          value: function _next(value) {
            if (this.hasValue) {
              _get2(_getPrototypeOf2(SkipUntilSubscriber.prototype), "_next", this).call(this, value);
            }
          }
        }, {
          key: "notifyNext",
          value: function notifyNext() {
            this.hasValue = true;

            if (this.innerSubscription) {
              this.innerSubscription.unsubscribe();
            }
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete() {}
        }]);

        return SkipUntilSubscriber;
      }(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleOuterSubscriber"]); //# sourceMappingURL=skipUntil.js.map

      /***/

    },

    /***/
    "vxfF":
    /*!**********************************************************************!*\
      !*** ./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/scrolling.js ***!
      \**********************************************************************/

    /*! exports provided: CdkFixedSizeVirtualScroll, CdkScrollable, CdkScrollableModule, CdkVirtualForOf, CdkVirtualScrollViewport, DEFAULT_RESIZE_TIME, DEFAULT_SCROLL_TIME, FixedSizeVirtualScrollStrategy, ScrollDispatcher, ScrollingModule, VIRTUAL_SCROLL_STRATEGY, ViewportRuler, _fixedSizeVirtualScrollStrategyFactory */

    /***/
    function vxfF(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkFixedSizeVirtualScroll", function () {
        return CdkFixedSizeVirtualScroll;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkScrollable", function () {
        return CdkScrollable;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkScrollableModule", function () {
        return CdkScrollableModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkVirtualForOf", function () {
        return CdkVirtualForOf;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "CdkVirtualScrollViewport", function () {
        return CdkVirtualScrollViewport;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DEFAULT_RESIZE_TIME", function () {
        return DEFAULT_RESIZE_TIME;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "DEFAULT_SCROLL_TIME", function () {
        return DEFAULT_SCROLL_TIME;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "FixedSizeVirtualScrollStrategy", function () {
        return FixedSizeVirtualScrollStrategy;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ScrollDispatcher", function () {
        return ScrollDispatcher;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ScrollingModule", function () {
        return ScrollingModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "VIRTUAL_SCROLL_STRATEGY", function () {
        return VIRTUAL_SCROLL_STRATEGY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ViewportRuler", function () {
        return ViewportRuler;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "_fixedSizeVirtualScrollStrategyFactory", function () {
        return _fixedSizeVirtualScrollStrategyFactory;
      });
      /* harmony import */


      var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/cdk/coercion */
      "8LU1");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/cdk/platform */
      "nLfN");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! @angular/cdk/bidi */
      "cH1L");
      /* harmony import */


      var _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! @angular/cdk/collections */
      "0EQZ");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** The injection token used to specify the virtual scrolling strategy. */


      var _c0 = ["contentWrapper"];
      var _c1 = ["*"];
      var VIRTUAL_SCROLL_STRATEGY = new _angular_core__WEBPACK_IMPORTED_MODULE_1__["InjectionToken"]('VIRTUAL_SCROLL_STRATEGY');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Virtual scrolling strategy for lists with items of known fixed size. */

      var FixedSizeVirtualScrollStrategy = /*#__PURE__*/function () {
        /**
         * @param itemSize The size of the items in the virtually scrolling list.
         * @param minBufferPx The minimum amount of buffer (in pixels) before needing to render more
         * @param maxBufferPx The amount of buffer (in pixels) to render when rendering more.
         */
        function FixedSizeVirtualScrollStrategy(itemSize, minBufferPx, maxBufferPx) {
          _classCallCheck2(this, FixedSizeVirtualScrollStrategy);

          this._scrolledIndexChange = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          /** @docs-private Implemented as part of VirtualScrollStrategy. */

          this.scrolledIndexChange = this._scrolledIndexChange.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["distinctUntilChanged"])());
          /** The attached viewport. */

          this._viewport = null;
          this._itemSize = itemSize;
          this._minBufferPx = minBufferPx;
          this._maxBufferPx = maxBufferPx;
        }
        /**
         * Attaches this scroll strategy to a viewport.
         * @param viewport The viewport to attach this strategy to.
         */


        _createClass2(FixedSizeVirtualScrollStrategy, [{
          key: "attach",
          value: function attach(viewport) {
            this._viewport = viewport;

            this._updateTotalContentSize();

            this._updateRenderedRange();
          }
          /** Detaches this scroll strategy from the currently attached viewport. */

        }, {
          key: "detach",
          value: function detach() {
            this._scrolledIndexChange.complete();

            this._viewport = null;
          }
          /**
           * Update the item size and buffer size.
           * @param itemSize The size of the items in the virtually scrolling list.
           * @param minBufferPx The minimum amount of buffer (in pixels) before needing to render more
           * @param maxBufferPx The amount of buffer (in pixels) to render when rendering more.
           */

        }, {
          key: "updateItemAndBufferSize",
          value: function updateItemAndBufferSize(itemSize, minBufferPx, maxBufferPx) {
            if (maxBufferPx < minBufferPx && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw Error('CDK virtual scroll: maxBufferPx must be greater than or equal to minBufferPx');
            }

            this._itemSize = itemSize;
            this._minBufferPx = minBufferPx;
            this._maxBufferPx = maxBufferPx;

            this._updateTotalContentSize();

            this._updateRenderedRange();
          }
          /** @docs-private Implemented as part of VirtualScrollStrategy. */

        }, {
          key: "onContentScrolled",
          value: function onContentScrolled() {
            this._updateRenderedRange();
          }
          /** @docs-private Implemented as part of VirtualScrollStrategy. */

        }, {
          key: "onDataLengthChanged",
          value: function onDataLengthChanged() {
            this._updateTotalContentSize();

            this._updateRenderedRange();
          }
          /** @docs-private Implemented as part of VirtualScrollStrategy. */

        }, {
          key: "onContentRendered",
          value: function onContentRendered() {}
          /** @docs-private Implemented as part of VirtualScrollStrategy. */

        }, {
          key: "onRenderedOffsetChanged",
          value: function onRenderedOffsetChanged() {}
          /**
           * Scroll to the offset for the given index.
           * @param index The index of the element to scroll to.
           * @param behavior The ScrollBehavior to use when scrolling.
           */

        }, {
          key: "scrollToIndex",
          value: function scrollToIndex(index, behavior) {
            if (this._viewport) {
              this._viewport.scrollToOffset(index * this._itemSize, behavior);
            }
          }
          /** Update the viewport's total content size. */

        }, {
          key: "_updateTotalContentSize",
          value: function _updateTotalContentSize() {
            if (!this._viewport) {
              return;
            }

            this._viewport.setTotalContentSize(this._viewport.getDataLength() * this._itemSize);
          }
          /** Update the viewport's rendered range. */

        }, {
          key: "_updateRenderedRange",
          value: function _updateRenderedRange() {
            if (!this._viewport) {
              return;
            }

            var renderedRange = this._viewport.getRenderedRange();

            var newRange = {
              start: renderedRange.start,
              end: renderedRange.end
            };

            var viewportSize = this._viewport.getViewportSize();

            var dataLength = this._viewport.getDataLength();

            var scrollOffset = this._viewport.measureScrollOffset(); // Prevent NaN as result when dividing by zero.


            var firstVisibleIndex = this._itemSize > 0 ? scrollOffset / this._itemSize : 0; // If user scrolls to the bottom of the list and data changes to a smaller list

            if (newRange.end > dataLength) {
              // We have to recalculate the first visible index based on new data length and viewport size.
              var maxVisibleItems = Math.ceil(viewportSize / this._itemSize);
              var newVisibleIndex = Math.max(0, Math.min(firstVisibleIndex, dataLength - maxVisibleItems)); // If first visible index changed we must update scroll offset to handle start/end buffers
              // Current range must also be adjusted to cover the new position (bottom of new list).

              if (firstVisibleIndex != newVisibleIndex) {
                firstVisibleIndex = newVisibleIndex;
                scrollOffset = newVisibleIndex * this._itemSize;
                newRange.start = Math.floor(firstVisibleIndex);
              }

              newRange.end = Math.max(0, Math.min(dataLength, newRange.start + maxVisibleItems));
            }

            var startBuffer = scrollOffset - newRange.start * this._itemSize;

            if (startBuffer < this._minBufferPx && newRange.start != 0) {
              var expandStart = Math.ceil((this._maxBufferPx - startBuffer) / this._itemSize);
              newRange.start = Math.max(0, newRange.start - expandStart);
              newRange.end = Math.min(dataLength, Math.ceil(firstVisibleIndex + (viewportSize + this._minBufferPx) / this._itemSize));
            } else {
              var endBuffer = newRange.end * this._itemSize - (scrollOffset + viewportSize);

              if (endBuffer < this._minBufferPx && newRange.end != dataLength) {
                var expandEnd = Math.ceil((this._maxBufferPx - endBuffer) / this._itemSize);

                if (expandEnd > 0) {
                  newRange.end = Math.min(dataLength, newRange.end + expandEnd);
                  newRange.start = Math.max(0, Math.floor(firstVisibleIndex - this._minBufferPx / this._itemSize));
                }
              }
            }

            this._viewport.setRenderedRange(newRange);

            this._viewport.setRenderedContentOffset(this._itemSize * newRange.start);

            this._scrolledIndexChange.next(Math.floor(firstVisibleIndex));
          }
        }]);

        return FixedSizeVirtualScrollStrategy;
      }();
      /**
       * Provider factory for `FixedSizeVirtualScrollStrategy` that simply extracts the already created
       * `FixedSizeVirtualScrollStrategy` from the given directive.
       * @param fixedSizeDir The instance of `CdkFixedSizeVirtualScroll` to extract the
       *     `FixedSizeVirtualScrollStrategy` from.
       */


      function _fixedSizeVirtualScrollStrategyFactory(fixedSizeDir) {
        return fixedSizeDir._scrollStrategy;
      }
      /** A virtual scroll strategy that supports fixed-size items. */


      var CdkFixedSizeVirtualScroll = /*#__PURE__*/function () {
        function CdkFixedSizeVirtualScroll() {
          _classCallCheck2(this, CdkFixedSizeVirtualScroll);

          this._itemSize = 20;
          this._minBufferPx = 100;
          this._maxBufferPx = 200;
          /** The scroll strategy used by this directive. */

          this._scrollStrategy = new FixedSizeVirtualScrollStrategy(this.itemSize, this.minBufferPx, this.maxBufferPx);
        }
        /** The size of the items in the list (in pixels). */


        _createClass2(CdkFixedSizeVirtualScroll, [{
          key: "itemSize",
          get: function get() {
            return this._itemSize;
          },
          set: function set(value) {
            this._itemSize = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_0__["coerceNumberProperty"])(value);
          }
          /**
           * The minimum amount of buffer rendered beyond the viewport (in pixels).
           * If the amount of buffer dips below this number, more items will be rendered. Defaults to 100px.
           */

        }, {
          key: "minBufferPx",
          get: function get() {
            return this._minBufferPx;
          },
          set: function set(value) {
            this._minBufferPx = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_0__["coerceNumberProperty"])(value);
          }
          /**
           * The number of pixels worth of buffer to render for when rendering new items. Defaults to 200px.
           */

        }, {
          key: "maxBufferPx",
          get: function get() {
            return this._maxBufferPx;
          },
          set: function set(value) {
            this._maxBufferPx = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_0__["coerceNumberProperty"])(value);
          }
        }, {
          key: "ngOnChanges",
          value: function ngOnChanges() {
            this._scrollStrategy.updateItemAndBufferSize(this.itemSize, this.minBufferPx, this.maxBufferPx);
          }
        }]);

        return CdkFixedSizeVirtualScroll;
      }();

      CdkFixedSizeVirtualScroll.ɵfac = function CdkFixedSizeVirtualScroll_Factory(t) {
        return new (t || CdkFixedSizeVirtualScroll)();
      };

      CdkFixedSizeVirtualScroll.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({
        type: CdkFixedSizeVirtualScroll,
        selectors: [["cdk-virtual-scroll-viewport", "itemSize", ""]],
        inputs: {
          itemSize: "itemSize",
          minBufferPx: "minBufferPx",
          maxBufferPx: "maxBufferPx"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵProvidersFeature"]([{
          provide: VIRTUAL_SCROLL_STRATEGY,
          useFactory: _fixedSizeVirtualScrollStrategyFactory,
          deps: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["forwardRef"])(function () {
            return CdkFixedSizeVirtualScroll;
          })]
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵNgOnChangesFeature"]]
      });
      CdkFixedSizeVirtualScroll.propDecorators = {
        itemSize: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        minBufferPx: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        maxBufferPx: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkFixedSizeVirtualScroll, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
          args: [{
            selector: 'cdk-virtual-scroll-viewport[itemSize]',
            providers: [{
              provide: VIRTUAL_SCROLL_STRATEGY,
              useFactory: _fixedSizeVirtualScrollStrategyFactory,
              deps: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["forwardRef"])(function () {
                return CdkFixedSizeVirtualScroll;
              })]
            }]
          }]
        }], function () {
          return [];
        }, {
          itemSize: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          minBufferPx: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          maxBufferPx: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Time in ms to throttle the scrolling events by default. */


      var DEFAULT_SCROLL_TIME = 20;
      /**
       * Service contained all registered Scrollable references and emits an event when any one of the
       * Scrollable references emit a scrolled event.
       */

      var ScrollDispatcher = /*#__PURE__*/function () {
        function ScrollDispatcher(_ngZone, _platform, document) {
          _classCallCheck2(this, ScrollDispatcher);

          this._ngZone = _ngZone;
          this._platform = _platform;
          /** Subject for notifying that a registered scrollable reference element has been scrolled. */

          this._scrolled = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          /** Keeps track of the global `scroll` and `resize` subscriptions. */

          this._globalSubscription = null;
          /** Keeps track of the amount of subscriptions to `scrolled`. Used for cleaning up afterwards. */

          this._scrolledCount = 0;
          /**
           * Map of all the scrollable references that are registered with the service and their
           * scroll event subscriptions.
           */

          this.scrollContainers = new Map();
          this._document = document;
        }
        /**
         * Registers a scrollable instance with the service and listens for its scrolled events. When the
         * scrollable is scrolled, the service emits the event to its scrolled observable.
         * @param scrollable Scrollable instance to be registered.
         */


        _createClass2(ScrollDispatcher, [{
          key: "register",
          value: function register(scrollable) {
            var _this1005 = this;

            if (!this.scrollContainers.has(scrollable)) {
              this.scrollContainers.set(scrollable, scrollable.elementScrolled().subscribe(function () {
                return _this1005._scrolled.next(scrollable);
              }));
            }
          }
          /**
           * Deregisters a Scrollable reference and unsubscribes from its scroll event observable.
           * @param scrollable Scrollable instance to be deregistered.
           */

        }, {
          key: "deregister",
          value: function deregister(scrollable) {
            var scrollableReference = this.scrollContainers.get(scrollable);

            if (scrollableReference) {
              scrollableReference.unsubscribe();
              this.scrollContainers["delete"](scrollable);
            }
          }
          /**
           * Returns an observable that emits an event whenever any of the registered Scrollable
           * references (or window, document, or body) fire a scrolled event. Can provide a time in ms
           * to override the default "throttle" time.
           *
           * **Note:** in order to avoid hitting change detection for every scroll event,
           * all of the events emitted from this stream will be run outside the Angular zone.
           * If you need to update any data bindings as a result of a scroll event, you have
           * to run the callback using `NgZone.run`.
           */

        }, {
          key: "scrolled",
          value: function scrolled() {
            var _this1006 = this;

            var auditTimeInMs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_SCROLL_TIME;

            if (!this._platform.isBrowser) {
              return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])();
            }

            return new rxjs__WEBPACK_IMPORTED_MODULE_2__["Observable"](function (observer) {
              if (!_this1006._globalSubscription) {
                _this1006._addGlobalListener();
              } // In the case of a 0ms delay, use an observable without auditTime
              // since it does add a perceptible delay in processing overhead.


              var subscription = auditTimeInMs > 0 ? _this1006._scrolled.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["auditTime"])(auditTimeInMs)).subscribe(observer) : _this1006._scrolled.subscribe(observer);
              _this1006._scrolledCount++;
              return function () {
                subscription.unsubscribe();
                _this1006._scrolledCount--;

                if (!_this1006._scrolledCount) {
                  _this1006._removeGlobalListener();
                }
              };
            });
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            var _this1007 = this;

            this._removeGlobalListener();

            this.scrollContainers.forEach(function (_, container) {
              return _this1007.deregister(container);
            });

            this._scrolled.complete();
          }
          /**
           * Returns an observable that emits whenever any of the
           * scrollable ancestors of an element are scrolled.
           * @param elementOrElementRef Element whose ancestors to listen for.
           * @param auditTimeInMs Time to throttle the scroll events.
           */

        }, {
          key: "ancestorScrolled",
          value: function ancestorScrolled(elementOrElementRef, auditTimeInMs) {
            var ancestors = this.getAncestorScrollContainers(elementOrElementRef);
            return this.scrolled(auditTimeInMs).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(function (target) {
              return !target || ancestors.indexOf(target) > -1;
            }));
          }
          /** Returns all registered Scrollables that contain the provided element. */

        }, {
          key: "getAncestorScrollContainers",
          value: function getAncestorScrollContainers(elementOrElementRef) {
            var _this1008 = this;

            var scrollingContainers = [];
            this.scrollContainers.forEach(function (_subscription, scrollable) {
              if (_this1008._scrollableContainsElement(scrollable, elementOrElementRef)) {
                scrollingContainers.push(scrollable);
              }
            });
            return scrollingContainers;
          }
          /** Use defaultView of injected document if available or fallback to global window reference */

        }, {
          key: "_getWindow",
          value: function _getWindow() {
            return this._document.defaultView || window;
          }
          /** Returns true if the element is contained within the provided Scrollable. */

        }, {
          key: "_scrollableContainsElement",
          value: function _scrollableContainsElement(scrollable, elementOrElementRef) {
            var element = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_0__["coerceElement"])(elementOrElementRef);
            var scrollableElement = scrollable.getElementRef().nativeElement; // Traverse through the element parents until we reach null, checking if any of the elements
            // are the scrollable's element.

            do {
              if (element == scrollableElement) {
                return true;
              }
            } while (element = element.parentElement);

            return false;
          }
          /** Sets up the global scroll listeners. */

        }, {
          key: "_addGlobalListener",
          value: function _addGlobalListener() {
            var _this1009 = this;

            this._globalSubscription = this._ngZone.runOutsideAngular(function () {
              var window = _this1009._getWindow();

              return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(window.document, 'scroll').subscribe(function () {
                return _this1009._scrolled.next();
              });
            });
          }
          /** Cleans up the global scroll listener. */

        }, {
          key: "_removeGlobalListener",
          value: function _removeGlobalListener() {
            if (this._globalSubscription) {
              this._globalSubscription.unsubscribe();

              this._globalSubscription = null;
            }
          }
        }]);

        return ScrollDispatcher;
      }();

      ScrollDispatcher.ɵfac = function ScrollDispatcher_Factory(t) {
        return new (t || ScrollDispatcher)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["Platform"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_5__["DOCUMENT"], 8));
      };

      ScrollDispatcher.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function ScrollDispatcher_Factory() {
          return new ScrollDispatcher(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["Platform"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_5__["DOCUMENT"], 8));
        },
        token: ScrollDispatcher,
        providedIn: "root"
      });

      ScrollDispatcher.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        }, {
          type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["Platform"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_5__["DOCUMENT"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](ScrollDispatcher, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
          }, {
            type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["Platform"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_5__["DOCUMENT"]]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Sends an event when the directive's element is scrolled. Registers itself with the
       * ScrollDispatcher service to include itself as part of its collection of scrolling events that it
       * can be listened to through the service.
       */


      var CdkScrollable = /*#__PURE__*/function () {
        function CdkScrollable(elementRef, scrollDispatcher, ngZone, dir) {
          var _this1010 = this;

          _classCallCheck2(this, CdkScrollable);

          this.elementRef = elementRef;
          this.scrollDispatcher = scrollDispatcher;
          this.ngZone = ngZone;
          this.dir = dir;
          this._destroyed = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          this._elementScrolled = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Observable"](function (observer) {
            return _this1010.ngZone.runOutsideAngular(function () {
              return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(_this1010.elementRef.nativeElement, 'scroll').pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(_this1010._destroyed)).subscribe(observer);
            });
          });
        }

        _createClass2(CdkScrollable, [{
          key: "ngOnInit",
          value: function ngOnInit() {
            this.scrollDispatcher.register(this);
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.scrollDispatcher.deregister(this);

            this._destroyed.next();

            this._destroyed.complete();
          }
          /** Returns observable that emits when a scroll event is fired on the host element. */

        }, {
          key: "elementScrolled",
          value: function elementScrolled() {
            return this._elementScrolled;
          }
          /** Gets the ElementRef for the viewport. */

        }, {
          key: "getElementRef",
          value: function getElementRef() {
            return this.elementRef;
          }
          /**
           * Scrolls to the specified offsets. This is a normalized version of the browser's native scrollTo
           * method, since browsers are not consistent about what scrollLeft means in RTL. For this method
           * left and right always refer to the left and right side of the scrolling container irrespective
           * of the layout direction. start and end refer to left and right in an LTR context and vice-versa
           * in an RTL context.
           * @param options specified the offsets to scroll to.
           */

        }, {
          key: "scrollTo",
          value: function scrollTo(options) {
            var el = this.elementRef.nativeElement;
            var isRtl = this.dir && this.dir.value == 'rtl'; // Rewrite start & end offsets as right or left offsets.

            if (options.left == null) {
              options.left = isRtl ? options.end : options.start;
            }

            if (options.right == null) {
              options.right = isRtl ? options.start : options.end;
            } // Rewrite the bottom offset as a top offset.


            if (options.bottom != null) {
              options.top = el.scrollHeight - el.clientHeight - options.bottom;
            } // Rewrite the right offset as a left offset.


            if (isRtl && Object(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["getRtlScrollAxisType"])() != 0
            /* NORMAL */
            ) {
                if (options.left != null) {
                  options.right = el.scrollWidth - el.clientWidth - options.left;
                }

                if (Object(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["getRtlScrollAxisType"])() == 2
                /* INVERTED */
                ) {
                    options.left = options.right;
                  } else if (Object(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["getRtlScrollAxisType"])() == 1
                /* NEGATED */
                ) {
                    options.left = options.right ? -options.right : options.right;
                  }
              } else {
              if (options.right != null) {
                options.left = el.scrollWidth - el.clientWidth - options.right;
              }
            }

            this._applyScrollToOptions(options);
          }
        }, {
          key: "_applyScrollToOptions",
          value: function _applyScrollToOptions(options) {
            var el = this.elementRef.nativeElement;

            if (Object(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["supportsScrollBehavior"])()) {
              el.scrollTo(options);
            } else {
              if (options.top != null) {
                el.scrollTop = options.top;
              }

              if (options.left != null) {
                el.scrollLeft = options.left;
              }
            }
          }
          /**
           * Measures the scroll offset relative to the specified edge of the viewport. This method can be
           * used instead of directly checking scrollLeft or scrollTop, since browsers are not consistent
           * about what scrollLeft means in RTL. The values returned by this method are normalized such that
           * left and right always refer to the left and right side of the scrolling container irrespective
           * of the layout direction. start and end refer to left and right in an LTR context and vice-versa
           * in an RTL context.
           * @param from The edge to measure from.
           */

        }, {
          key: "measureScrollOffset",
          value: function measureScrollOffset(from) {
            var LEFT = 'left';
            var RIGHT = 'right';
            var el = this.elementRef.nativeElement;

            if (from == 'top') {
              return el.scrollTop;
            }

            if (from == 'bottom') {
              return el.scrollHeight - el.clientHeight - el.scrollTop;
            } // Rewrite start & end as left or right offsets.


            var isRtl = this.dir && this.dir.value == 'rtl';

            if (from == 'start') {
              from = isRtl ? RIGHT : LEFT;
            } else if (from == 'end') {
              from = isRtl ? LEFT : RIGHT;
            }

            if (isRtl && Object(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["getRtlScrollAxisType"])() == 2
            /* INVERTED */
            ) {
                // For INVERTED, scrollLeft is (scrollWidth - clientWidth) when scrolled all the way left and
                // 0 when scrolled all the way right.
                if (from == LEFT) {
                  return el.scrollWidth - el.clientWidth - el.scrollLeft;
                } else {
                  return el.scrollLeft;
                }
              } else if (isRtl && Object(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["getRtlScrollAxisType"])() == 1
            /* NEGATED */
            ) {
                // For NEGATED, scrollLeft is -(scrollWidth - clientWidth) when scrolled all the way left and
                // 0 when scrolled all the way right.
                if (from == LEFT) {
                  return el.scrollLeft + el.scrollWidth - el.clientWidth;
                } else {
                  return -el.scrollLeft;
                }
              } else {
              // For NORMAL, as well as non-RTL contexts, scrollLeft is 0 when scrolled all the way left and
              // (scrollWidth - clientWidth) when scrolled all the way right.
              if (from == LEFT) {
                return el.scrollLeft;
              } else {
                return el.scrollWidth - el.clientWidth - el.scrollLeft;
              }
            }
          }
        }]);

        return CdkScrollable;
      }();

      CdkScrollable.ɵfac = function CdkScrollable_Factory(t) {
        return new (t || CdkScrollable)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](ScrollDispatcher), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_6__["Directionality"], 8));
      };

      CdkScrollable.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({
        type: CdkScrollable,
        selectors: [["", "cdk-scrollable", ""], ["", "cdkScrollable", ""]]
      });

      CdkScrollable.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
        }, {
          type: ScrollDispatcher
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        }, {
          type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_6__["Directionality"],
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkScrollable, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
          args: [{
            selector: '[cdk-scrollable], [cdkScrollable]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
          }, {
            type: ScrollDispatcher
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
          }, {
            type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_6__["Directionality"],
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Time in ms to throttle the resize events by default. */


      var DEFAULT_RESIZE_TIME = 20;
      /**
       * Simple utility for getting the bounds of the browser viewport.
       * @docs-private
       */

      var ViewportRuler = /*#__PURE__*/function () {
        function ViewportRuler(_platform, ngZone, document) {
          var _this1011 = this;

          _classCallCheck2(this, ViewportRuler);

          this._platform = _platform;
          /** Stream of viewport change events. */

          this._change = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          /** Event listener that will be used to handle the viewport change events. */

          this._changeListener = function (event) {
            _this1011._change.next(event);
          };

          this._document = document;
          ngZone.runOutsideAngular(function () {
            if (_platform.isBrowser) {
              var _window6 = _this1011._getWindow(); // Note that bind the events ourselves, rather than going through something like RxJS's
              // `fromEvent` so that we can ensure that they're bound outside of the NgZone.


              _window6.addEventListener('resize', _this1011._changeListener);

              _window6.addEventListener('orientationchange', _this1011._changeListener);
            } // We don't need to keep track of the subscription,
            // because we complete the `change` stream on destroy.


            _this1011.change().subscribe(function () {
              return _this1011._updateViewportSize();
            });
          });
        }

        _createClass2(ViewportRuler, [{
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            if (this._platform.isBrowser) {
              var _window7 = this._getWindow();

              _window7.removeEventListener('resize', this._changeListener);

              _window7.removeEventListener('orientationchange', this._changeListener);
            }

            this._change.complete();
          }
          /** Returns the viewport's width and height. */

        }, {
          key: "getViewportSize",
          value: function getViewportSize() {
            if (!this._viewportSize) {
              this._updateViewportSize();
            }

            var output = {
              width: this._viewportSize.width,
              height: this._viewportSize.height
            }; // If we're not on a browser, don't cache the size since it'll be mocked out anyway.

            if (!this._platform.isBrowser) {
              this._viewportSize = null;
            }

            return output;
          }
          /** Gets a ClientRect for the viewport's bounds. */

        }, {
          key: "getViewportRect",
          value: function getViewportRect() {
            // Use the document element's bounding rect rather than the window scroll properties
            // (e.g. pageYOffset, scrollY) due to in issue in Chrome and IE where window scroll
            // properties and client coordinates (boundingClientRect, clientX/Y, etc.) are in different
            // conceptual viewports. Under most circumstances these viewports are equivalent, but they
            // can disagree when the page is pinch-zoomed (on devices that support touch).
            // See https://bugs.chromium.org/p/chromium/issues/detail?id=489206#c4
            // We use the documentElement instead of the body because, by default (without a css reset)
            // browsers typically give the document body an 8px margin, which is not included in
            // getBoundingClientRect().
            var scrollPosition = this.getViewportScrollPosition();

            var _this$getViewportSize = this.getViewportSize(),
                width = _this$getViewportSize.width,
                height = _this$getViewportSize.height;

            return {
              top: scrollPosition.top,
              left: scrollPosition.left,
              bottom: scrollPosition.top + height,
              right: scrollPosition.left + width,
              height: height,
              width: width
            };
          }
          /** Gets the (top, left) scroll position of the viewport. */

        }, {
          key: "getViewportScrollPosition",
          value: function getViewportScrollPosition() {
            // While we can get a reference to the fake document
            // during SSR, it doesn't have getBoundingClientRect.
            if (!this._platform.isBrowser) {
              return {
                top: 0,
                left: 0
              };
            } // The top-left-corner of the viewport is determined by the scroll position of the document
            // body, normally just (scrollLeft, scrollTop). However, Chrome and Firefox disagree about
            // whether `document.body` or `document.documentElement` is the scrolled element, so reading
            // `scrollTop` and `scrollLeft` is inconsistent. However, using the bounding rect of
            // `document.documentElement` works consistently, where the `top` and `left` values will
            // equal negative the scroll position.


            var document = this._document;

            var window = this._getWindow();

            var documentElement = document.documentElement;
            var documentRect = documentElement.getBoundingClientRect();
            var top = -documentRect.top || document.body.scrollTop || window.scrollY || documentElement.scrollTop || 0;
            var left = -documentRect.left || document.body.scrollLeft || window.scrollX || documentElement.scrollLeft || 0;
            return {
              top: top,
              left: left
            };
          }
          /**
           * Returns a stream that emits whenever the size of the viewport changes.
           * @param throttleTime Time in milliseconds to throttle the stream.
           */

        }, {
          key: "change",
          value: function change() {
            var throttleTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_RESIZE_TIME;
            return throttleTime > 0 ? this._change.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["auditTime"])(throttleTime)) : this._change;
          }
          /** Use defaultView of injected document if available or fallback to global window reference */

        }, {
          key: "_getWindow",
          value: function _getWindow() {
            return this._document.defaultView || window;
          }
          /** Updates the cached viewport size. */

        }, {
          key: "_updateViewportSize",
          value: function _updateViewportSize() {
            var window = this._getWindow();

            this._viewportSize = this._platform.isBrowser ? {
              width: window.innerWidth,
              height: window.innerHeight
            } : {
              width: 0,
              height: 0
            };
          }
        }]);

        return ViewportRuler;
      }();

      ViewportRuler.ɵfac = function ViewportRuler_Factory(t) {
        return new (t || ViewportRuler)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["Platform"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"](_angular_common__WEBPACK_IMPORTED_MODULE_5__["DOCUMENT"], 8));
      };

      ViewportRuler.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjectable"])({
        factory: function ViewportRuler_Factory() {
          return new ViewportRuler(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["Platform"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵinject"])(_angular_common__WEBPACK_IMPORTED_MODULE_5__["DOCUMENT"], 8));
        },
        token: ViewportRuler,
        providedIn: "root"
      });

      ViewportRuler.ctorParameters = function () {
        return [{
          type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["Platform"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_5__["DOCUMENT"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](ViewportRuler, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [{
            type: _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["Platform"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_5__["DOCUMENT"]]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Checks if the given ranges are equal. */


      function rangesEqual(r1, r2) {
        return r1.start == r2.start && r1.end == r2.end;
      }
      /**
       * Scheduler to be used for scroll events. Needs to fall back to
       * something that doesn't rely on requestAnimationFrame on environments
       * that don't support it (e.g. server-side rendering).
       */


      var SCROLL_SCHEDULER = typeof requestAnimationFrame !== 'undefined' ? rxjs__WEBPACK_IMPORTED_MODULE_2__["animationFrameScheduler"] : rxjs__WEBPACK_IMPORTED_MODULE_2__["asapScheduler"];
      /** A viewport that virtualizes its scrolling with the help of `CdkVirtualForOf`. */

      var CdkVirtualScrollViewport = /*#__PURE__*/function (_CdkScrollable) {
        _inherits2(CdkVirtualScrollViewport, _CdkScrollable);

        var _super396 = _createSuper(CdkVirtualScrollViewport);

        function CdkVirtualScrollViewport(elementRef, _changeDetectorRef, ngZone, _scrollStrategy, dir, scrollDispatcher, viewportRuler) {
          var _this1012;

          _classCallCheck2(this, CdkVirtualScrollViewport);

          _this1012 = _super396.call(this, elementRef, scrollDispatcher, ngZone, dir);
          _this1012.elementRef = elementRef;
          _this1012._changeDetectorRef = _changeDetectorRef;
          _this1012._scrollStrategy = _scrollStrategy;
          /** Emits when the viewport is detached from a CdkVirtualForOf. */

          _this1012._detachedSubject = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          /** Emits when the rendered range changes. */

          _this1012._renderedRangeSubject = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          _this1012._orientation = 'vertical'; // Note: we don't use the typical EventEmitter here because we need to subscribe to the scroll
          // strategy lazily (i.e. only if the user is actually listening to the events). We do this because
          // depending on how the strategy calculates the scrolled index, it may come at a cost to
          // performance.

          /** Emits when the index of the first element visible in the viewport changes. */

          _this1012.scrolledIndexChange = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Observable"](function (observer) {
            return _this1012._scrollStrategy.scrolledIndexChange.subscribe(function (index) {
              return Promise.resolve().then(function () {
                return _this1012.ngZone.run(function () {
                  return observer.next(index);
                });
              });
            });
          });
          /** A stream that emits whenever the rendered range changes. */

          _this1012.renderedRangeStream = _this1012._renderedRangeSubject;
          /**
           * The total size of all content (in pixels), including content that is not currently rendered.
           */

          _this1012._totalContentSize = 0;
          /** A string representing the `style.width` property value to be used for the spacer element. */

          _this1012._totalContentWidth = '';
          /** A string representing the `style.height` property value to be used for the spacer element. */

          _this1012._totalContentHeight = '';
          /** The currently rendered range of indices. */

          _this1012._renderedRange = {
            start: 0,
            end: 0
          };
          /** The length of the data bound to this viewport (in number of items). */

          _this1012._dataLength = 0;
          /** The size of the viewport (in pixels). */

          _this1012._viewportSize = 0;
          /** The last rendered content offset that was set. */

          _this1012._renderedContentOffset = 0;
          /**
           * Whether the last rendered content offset was to the end of the content (and therefore needs to
           * be rewritten as an offset to the start of the content).
           */

          _this1012._renderedContentOffsetNeedsRewrite = false;
          /** Whether there is a pending change detection cycle. */

          _this1012._isChangeDetectionPending = false;
          /** A list of functions to run after the next change detection cycle. */

          _this1012._runAfterChangeDetection = [];
          /** Subscription to changes in the viewport size. */

          _this1012._viewportChanges = rxjs__WEBPACK_IMPORTED_MODULE_2__["Subscription"].EMPTY;

          if (!_scrollStrategy && (typeof ngDevMode === 'undefined' || ngDevMode)) {
            throw Error('Error: cdk-virtual-scroll-viewport requires the "itemSize" property to be set.');
          }

          _this1012._viewportChanges = viewportRuler.change().subscribe(function () {
            _this1012.checkViewportSize();
          });
          return _this1012;
        }
        /** The direction the viewport scrolls. */


        _createClass2(CdkVirtualScrollViewport, [{
          key: "orientation",
          get: function get() {
            return this._orientation;
          },
          set: function set(orientation) {
            if (this._orientation !== orientation) {
              this._orientation = orientation;

              this._calculateSpacerSize();
            }
          }
        }, {
          key: "ngOnInit",
          value: function ngOnInit() {
            var _this1013 = this;

            _get2(_getPrototypeOf2(CdkVirtualScrollViewport.prototype), "ngOnInit", this).call(this); // It's still too early to measure the viewport at this point. Deferring with a promise allows
            // the Viewport to be rendered with the correct size before we measure. We run this outside the
            // zone to avoid causing more change detection cycles. We handle the change detection loop
            // ourselves instead.


            this.ngZone.runOutsideAngular(function () {
              return Promise.resolve().then(function () {
                _this1013._measureViewportSize();

                _this1013._scrollStrategy.attach(_this1013);

                _this1013.elementScrolled().pipe( // Start off with a fake scroll event so we properly detect our initial position.
                Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["startWith"])(null), // Collect multiple events into one until the next animation frame. This way if
                // there are multiple scroll events in the same frame we only need to recheck
                // our layout once.
                Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["auditTime"])(0, SCROLL_SCHEDULER)).subscribe(function () {
                  return _this1013._scrollStrategy.onContentScrolled();
                });

                _this1013._markChangeDetectionNeeded();
              });
            });
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this.detach();

            this._scrollStrategy.detach(); // Complete all subjects


            this._renderedRangeSubject.complete();

            this._detachedSubject.complete();

            this._viewportChanges.unsubscribe();

            _get2(_getPrototypeOf2(CdkVirtualScrollViewport.prototype), "ngOnDestroy", this).call(this);
          }
          /** Attaches a `CdkVirtualScrollRepeater` to this viewport. */

        }, {
          key: "attach",
          value: function attach(forOf) {
            var _this1014 = this;

            if (this._forOf && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw Error('CdkVirtualScrollViewport is already attached.');
            } // Subscribe to the data stream of the CdkVirtualForOf to keep track of when the data length
            // changes. Run outside the zone to avoid triggering change detection, since we're managing the
            // change detection loop ourselves.


            this.ngZone.runOutsideAngular(function () {
              _this1014._forOf = forOf;

              _this1014._forOf.dataStream.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(_this1014._detachedSubject)).subscribe(function (data) {
                var newLength = data.length;

                if (newLength !== _this1014._dataLength) {
                  _this1014._dataLength = newLength;

                  _this1014._scrollStrategy.onDataLengthChanged();
                }

                _this1014._doChangeDetection();
              });
            });
          }
          /** Detaches the current `CdkVirtualForOf`. */

        }, {
          key: "detach",
          value: function detach() {
            this._forOf = null;

            this._detachedSubject.next();
          }
          /** Gets the length of the data bound to this viewport (in number of items). */

        }, {
          key: "getDataLength",
          value: function getDataLength() {
            return this._dataLength;
          }
          /** Gets the size of the viewport (in pixels). */

        }, {
          key: "getViewportSize",
          value: function getViewportSize() {
            return this._viewportSize;
          } // TODO(mmalerba): This is technically out of sync with what's really rendered until a render
          // cycle happens. I'm being careful to only call it after the render cycle is complete and before
          // setting it to something else, but its error prone and should probably be split into
          // `pendingRange` and `renderedRange`, the latter reflecting whats actually in the DOM.

          /** Get the current rendered range of items. */

        }, {
          key: "getRenderedRange",
          value: function getRenderedRange() {
            return this._renderedRange;
          }
          /**
           * Sets the total size of all content (in pixels), including content that is not currently
           * rendered.
           */

        }, {
          key: "setTotalContentSize",
          value: function setTotalContentSize(size) {
            if (this._totalContentSize !== size) {
              this._totalContentSize = size;

              this._calculateSpacerSize();

              this._markChangeDetectionNeeded();
            }
          }
          /** Sets the currently rendered range of indices. */

        }, {
          key: "setRenderedRange",
          value: function setRenderedRange(range) {
            var _this1015 = this;

            if (!rangesEqual(this._renderedRange, range)) {
              this._renderedRangeSubject.next(this._renderedRange = range);

              this._markChangeDetectionNeeded(function () {
                return _this1015._scrollStrategy.onContentRendered();
              });
            }
          }
          /**
           * Gets the offset from the start of the viewport to the start of the rendered data (in pixels).
           */

        }, {
          key: "getOffsetToRenderedContentStart",
          value: function getOffsetToRenderedContentStart() {
            return this._renderedContentOffsetNeedsRewrite ? null : this._renderedContentOffset;
          }
          /**
           * Sets the offset from the start of the viewport to either the start or end of the rendered data
           * (in pixels).
           */

        }, {
          key: "setRenderedContentOffset",
          value: function setRenderedContentOffset(offset) {
            var _this1016 = this;

            var to = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'to-start';
            // For a horizontal viewport in a right-to-left language we need to translate along the x-axis
            // in the negative direction.
            var isRtl = this.dir && this.dir.value == 'rtl';
            var isHorizontal = this.orientation == 'horizontal';
            var axis = isHorizontal ? 'X' : 'Y';
            var axisDirection = isHorizontal && isRtl ? -1 : 1;
            var transform = "translate".concat(axis, "(").concat(Number(axisDirection * offset), "px)");
            this._renderedContentOffset = offset;

            if (to === 'to-end') {
              transform += " translate".concat(axis, "(-100%)"); // The viewport should rewrite this as a `to-start` offset on the next render cycle. Otherwise
              // elements will appear to expand in the wrong direction (e.g. `mat-expansion-panel` would
              // expand upward).

              this._renderedContentOffsetNeedsRewrite = true;
            }

            if (this._renderedContentTransform != transform) {
              // We know this value is safe because we parse `offset` with `Number()` before passing it
              // into the string.
              this._renderedContentTransform = transform;

              this._markChangeDetectionNeeded(function () {
                if (_this1016._renderedContentOffsetNeedsRewrite) {
                  _this1016._renderedContentOffset -= _this1016.measureRenderedContentSize();
                  _this1016._renderedContentOffsetNeedsRewrite = false;

                  _this1016.setRenderedContentOffset(_this1016._renderedContentOffset);
                } else {
                  _this1016._scrollStrategy.onRenderedOffsetChanged();
                }
              });
            }
          }
          /**
           * Scrolls to the given offset from the start of the viewport. Please note that this is not always
           * the same as setting `scrollTop` or `scrollLeft`. In a horizontal viewport with right-to-left
           * direction, this would be the equivalent of setting a fictional `scrollRight` property.
           * @param offset The offset to scroll to.
           * @param behavior The ScrollBehavior to use when scrolling. Default is behavior is `auto`.
           */

        }, {
          key: "scrollToOffset",
          value: function scrollToOffset(offset) {
            var behavior = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'auto';
            var options = {
              behavior: behavior
            };

            if (this.orientation === 'horizontal') {
              options.start = offset;
            } else {
              options.top = offset;
            }

            this.scrollTo(options);
          }
          /**
           * Scrolls to the offset for the given index.
           * @param index The index of the element to scroll to.
           * @param behavior The ScrollBehavior to use when scrolling. Default is behavior is `auto`.
           */

        }, {
          key: "scrollToIndex",
          value: function scrollToIndex(index) {
            var behavior = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'auto';

            this._scrollStrategy.scrollToIndex(index, behavior);
          }
          /**
           * Gets the current scroll offset from the start of the viewport (in pixels).
           * @param from The edge to measure the offset from. Defaults to 'top' in vertical mode and 'start'
           *     in horizontal mode.
           */

        }, {
          key: "measureScrollOffset",
          value: function measureScrollOffset(from) {
            return from ? _get2(_getPrototypeOf2(CdkVirtualScrollViewport.prototype), "measureScrollOffset", this).call(this, from) : _get2(_getPrototypeOf2(CdkVirtualScrollViewport.prototype), "measureScrollOffset", this).call(this, this.orientation === 'horizontal' ? 'start' : 'top');
          }
          /** Measure the combined size of all of the rendered items. */

        }, {
          key: "measureRenderedContentSize",
          value: function measureRenderedContentSize() {
            var contentEl = this._contentWrapper.nativeElement;
            return this.orientation === 'horizontal' ? contentEl.offsetWidth : contentEl.offsetHeight;
          }
          /**
           * Measure the total combined size of the given range. Throws if the range includes items that are
           * not rendered.
           */

        }, {
          key: "measureRangeSize",
          value: function measureRangeSize(range) {
            if (!this._forOf) {
              return 0;
            }

            return this._forOf.measureRangeSize(range, this.orientation);
          }
          /** Update the viewport dimensions and re-render. */

        }, {
          key: "checkViewportSize",
          value: function checkViewportSize() {
            // TODO: Cleanup later when add logic for handling content resize
            this._measureViewportSize();

            this._scrollStrategy.onDataLengthChanged();
          }
          /** Measure the viewport size. */

        }, {
          key: "_measureViewportSize",
          value: function _measureViewportSize() {
            var viewportEl = this.elementRef.nativeElement;
            this._viewportSize = this.orientation === 'horizontal' ? viewportEl.clientWidth : viewportEl.clientHeight;
          }
          /** Queue up change detection to run. */

        }, {
          key: "_markChangeDetectionNeeded",
          value: function _markChangeDetectionNeeded(runAfter) {
            var _this1017 = this;

            if (runAfter) {
              this._runAfterChangeDetection.push(runAfter);
            } // Use a Promise to batch together calls to `_doChangeDetection`. This way if we set a bunch of
            // properties sequentially we only have to run `_doChangeDetection` once at the end.


            if (!this._isChangeDetectionPending) {
              this._isChangeDetectionPending = true;
              this.ngZone.runOutsideAngular(function () {
                return Promise.resolve().then(function () {
                  _this1017._doChangeDetection();
                });
              });
            }
          }
          /** Run change detection. */

        }, {
          key: "_doChangeDetection",
          value: function _doChangeDetection() {
            var _this1018 = this;

            this._isChangeDetectionPending = false; // Apply the content transform. The transform can't be set via an Angular binding because
            // bypassSecurityTrustStyle is banned in Google. However the value is safe, it's composed of
            // string literals, a variable that can only be 'X' or 'Y', and user input that is run through
            // the `Number` function first to coerce it to a numeric value.

            this._contentWrapper.nativeElement.style.transform = this._renderedContentTransform; // Apply changes to Angular bindings. Note: We must call `markForCheck` to run change detection
            // from the root, since the repeated items are content projected in. Calling `detectChanges`
            // instead does not properly check the projected content.

            this.ngZone.run(function () {
              return _this1018._changeDetectorRef.markForCheck();
            });
            var runAfterChangeDetection = this._runAfterChangeDetection;
            this._runAfterChangeDetection = [];

            var _iterator113 = _createForOfIteratorHelper(runAfterChangeDetection),
                _step112;

            try {
              for (_iterator113.s(); !(_step112 = _iterator113.n()).done;) {
                var fn = _step112.value;
                fn();
              }
            } catch (err) {
              _iterator113.e(err);
            } finally {
              _iterator113.f();
            }
          }
          /** Calculates the `style.width` and `style.height` for the spacer element. */

        }, {
          key: "_calculateSpacerSize",
          value: function _calculateSpacerSize() {
            this._totalContentHeight = this.orientation === 'horizontal' ? '' : "".concat(this._totalContentSize, "px");
            this._totalContentWidth = this.orientation === 'horizontal' ? "".concat(this._totalContentSize, "px") : '';
          }
        }]);

        return CdkVirtualScrollViewport;
      }(CdkScrollable);

      CdkVirtualScrollViewport.ɵfac = function CdkVirtualScrollViewport_Factory(t) {
        return new (t || CdkVirtualScrollViewport)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](VIRTUAL_SCROLL_STRATEGY, 8), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_6__["Directionality"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](ScrollDispatcher), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](ViewportRuler));
      };

      CdkVirtualScrollViewport.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({
        type: CdkVirtualScrollViewport,
        selectors: [["cdk-virtual-scroll-viewport"]],
        viewQuery: function CdkVirtualScrollViewport_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵviewQuery"](_c0, 3);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx._contentWrapper = _t.first);
          }
        },
        hostAttrs: [1, "cdk-virtual-scroll-viewport"],
        hostVars: 4,
        hostBindings: function CdkVirtualScrollViewport_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassProp"]("cdk-virtual-scroll-orientation-horizontal", ctx.orientation === "horizontal")("cdk-virtual-scroll-orientation-vertical", ctx.orientation !== "horizontal");
          }
        },
        inputs: {
          orientation: "orientation"
        },
        outputs: {
          scrolledIndexChange: "scrolledIndexChange"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵProvidersFeature"]([{
          provide: CdkScrollable,
          useExisting: CdkVirtualScrollViewport
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵInheritDefinitionFeature"]],
        ngContentSelectors: _c1,
        decls: 4,
        vars: 4,
        consts: [[1, "cdk-virtual-scroll-content-wrapper"], ["contentWrapper", ""], [1, "cdk-virtual-scroll-spacer"]],
        template: function CdkVirtualScrollViewport_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵprojectionDef"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div", 0, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵprojection"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](3, "div", 2);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](3);

            _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵstyleProp"]("width", ctx._totalContentWidth)("height", ctx._totalContentHeight);
          }
        },
        styles: ["cdk-virtual-scroll-viewport{display:block;position:relative;overflow:auto;contain:strict;transform:translateZ(0);will-change:scroll-position;-webkit-overflow-scrolling:touch}.cdk-virtual-scroll-content-wrapper{position:absolute;top:0;left:0;contain:content}[dir=rtl] .cdk-virtual-scroll-content-wrapper{right:0;left:auto}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper{min-height:100%}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-left:0;padding-right:0;margin-left:0;margin-right:0;border-left-width:0;border-right-width:0;outline:none}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{min-width:100%}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0;border-top-width:0;border-bottom-width:0;outline:none}.cdk-virtual-scroll-spacer{position:absolute;top:0;left:0;height:1px;width:1px;transform-origin:0 0}[dir=rtl] .cdk-virtual-scroll-spacer{right:0;left:auto;transform-origin:100% 0}\n"],
        encapsulation: 2,
        changeDetection: 0
      });

      CdkVirtualScrollViewport.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [VIRTUAL_SCROLL_STRATEGY]
          }]
        }, {
          type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_6__["Directionality"],
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
          }]
        }, {
          type: ScrollDispatcher
        }, {
          type: ViewportRuler
        }];
      };

      CdkVirtualScrollViewport.propDecorators = {
        orientation: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        scrolledIndexChange: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
        }],
        _contentWrapper: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewChild"],
          args: ['contentWrapper', {
            "static": true
          }]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkVirtualScrollViewport, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"],
          args: [{
            selector: 'cdk-virtual-scroll-viewport',
            template: "<!--\n  Wrap the rendered content in an element that will be used to offset it based on the scroll\n  position.\n-->\n<div #contentWrapper class=\"cdk-virtual-scroll-content-wrapper\">\n  <ng-content></ng-content>\n</div>\n<!--\n  Spacer used to force the scrolling container to the correct size for the *total* number of items\n  so that the scrollbar captures the size of the entire data set.\n-->\n<div class=\"cdk-virtual-scroll-spacer\"\n     [style.width]=\"_totalContentWidth\" [style.height]=\"_totalContentHeight\"></div>\n",
            host: {
              'class': 'cdk-virtual-scroll-viewport',
              '[class.cdk-virtual-scroll-orientation-horizontal]': 'orientation === "horizontal"',
              '[class.cdk-virtual-scroll-orientation-vertical]': 'orientation !== "horizontal"'
            },
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewEncapsulation"].None,
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectionStrategy"].OnPush,
            providers: [{
              provide: CdkScrollable,
              useExisting: CdkVirtualScrollViewport
            }],
            styles: ["cdk-virtual-scroll-viewport{display:block;position:relative;overflow:auto;contain:strict;transform:translateZ(0);will-change:scroll-position;-webkit-overflow-scrolling:touch}.cdk-virtual-scroll-content-wrapper{position:absolute;top:0;left:0;contain:content}[dir=rtl] .cdk-virtual-scroll-content-wrapper{right:0;left:auto}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper{min-height:100%}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-left:0;padding-right:0;margin-left:0;margin-right:0;border-left-width:0;border-right-width:0;outline:none}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{min-width:100%}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0;border-top-width:0;border-bottom-width:0;outline:none}.cdk-virtual-scroll-spacer{position:absolute;top:0;left:0;height:1px;width:1px;transform-origin:0 0}[dir=rtl] .cdk-virtual-scroll-spacer{right:0;left:auto;transform-origin:100% 0}\n"]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ChangeDetectorRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [VIRTUAL_SCROLL_STRATEGY]
            }]
          }, {
            type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_6__["Directionality"],
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"]
            }]
          }, {
            type: ScrollDispatcher
          }, {
            type: ViewportRuler
          }];
        }, {
          scrolledIndexChange: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Output"]
          }],
          orientation: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          _contentWrapper: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewChild"],
            args: ['contentWrapper', {
              "static": true
            }]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Helper to extract the offset of a DOM Node in a certain direction. */


      function getOffset(orientation, direction, node) {
        var el = node;

        if (!el.getBoundingClientRect) {
          return 0;
        }

        var rect = el.getBoundingClientRect();

        if (orientation === 'horizontal') {
          return direction === 'start' ? rect.left : rect.right;
        }

        return direction === 'start' ? rect.top : rect.bottom;
      }
      /**
       * A directive similar to `ngForOf` to be used for rendering data inside a virtual scrolling
       * container.
       */


      var CdkVirtualForOf = /*#__PURE__*/function () {
        function CdkVirtualForOf(
        /** The view container to add items to. */
        _viewContainerRef,
        /** The template to use when stamping out new items. */
        _template,
        /** The set of available differs. */
        _differs,
        /** The strategy used to render items in the virtual scroll viewport. */
        _viewRepeater,
        /** The virtual scrolling viewport that these items are being rendered in. */
        _viewport, ngZone) {
          var _this1019 = this;

          _classCallCheck2(this, CdkVirtualForOf);

          this._viewContainerRef = _viewContainerRef;
          this._template = _template;
          this._differs = _differs;
          this._viewRepeater = _viewRepeater;
          this._viewport = _viewport;
          /** Emits when the rendered view of the data changes. */

          this.viewChange = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          /** Subject that emits when a new DataSource instance is given. */

          this._dataSourceChanges = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          /** Emits whenever the data in the current DataSource changes. */

          this.dataStream = this._dataSourceChanges.pipe( // Start off with null `DataSource`.
          Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["startWith"])(null), // Bundle up the previous and current data sources so we can work with both.
          Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["pairwise"])(), // Use `_changeDataSource` to disconnect from the previous data source and connect to the
          // new one, passing back a stream of data changes which we run through `switchMap` to give
          // us a data stream that emits the latest data from whatever the current `DataSource` is.
          Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(function (_ref148) {
            var _ref149 = _slicedToArray(_ref148, 2),
                prev = _ref149[0],
                cur = _ref149[1];

            return _this1019._changeDataSource(prev, cur);
          }), // Replay the last emitted data when someone subscribes.
          Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["shareReplay"])(1));
          /** The differ used to calculate changes to the data. */

          this._differ = null;
          /** Whether the rendered data should be updated during the next ngDoCheck cycle. */

          this._needsUpdate = false;
          this._destroyed = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
          this.dataStream.subscribe(function (data) {
            _this1019._data = data;

            _this1019._onRenderedDataChange();
          });

          this._viewport.renderedRangeStream.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["takeUntil"])(this._destroyed)).subscribe(function (range) {
            _this1019._renderedRange = range;
            ngZone.run(function () {
              return _this1019.viewChange.next(_this1019._renderedRange);
            });

            _this1019._onRenderedDataChange();
          });

          this._viewport.attach(this);
        }
        /** The DataSource to display. */


        _createClass2(CdkVirtualForOf, [{
          key: "cdkVirtualForOf",
          get: function get() {
            return this._cdkVirtualForOf;
          },
          set: function set(value) {
            this._cdkVirtualForOf = value;

            if (Object(_angular_cdk_collections__WEBPACK_IMPORTED_MODULE_7__["isDataSource"])(value)) {
              this._dataSourceChanges.next(value);
            } else {
              // If value is an an NgIterable, convert it to an array.
              this._dataSourceChanges.next(new _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_7__["ArrayDataSource"](Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["isObservable"])(value) ? value : Array.from(value || [])));
            }
          }
          /**
           * The `TrackByFunction` to use for tracking changes. The `TrackByFunction` takes the index and
           * the item and produces a value to be used as the item's identity when tracking changes.
           */

        }, {
          key: "cdkVirtualForTrackBy",
          get: function get() {
            return this._cdkVirtualForTrackBy;
          },
          set: function set(fn) {
            var _this1020 = this;

            this._needsUpdate = true;
            this._cdkVirtualForTrackBy = fn ? function (index, item) {
              return fn(index + (_this1020._renderedRange ? _this1020._renderedRange.start : 0), item);
            } : undefined;
          }
          /** The template used to stamp out new elements. */

        }, {
          key: "cdkVirtualForTemplate",
          set: function set(value) {
            if (value) {
              this._needsUpdate = true;
              this._template = value;
            }
          }
          /**
           * The size of the cache used to store templates that are not being used for re-use later.
           * Setting the cache size to `0` will disable caching. Defaults to 20 templates.
           */

        }, {
          key: "cdkVirtualForTemplateCacheSize",
          get: function get() {
            return this._viewRepeater.viewCacheSize;
          },
          set: function set(size) {
            this._viewRepeater.viewCacheSize = Object(_angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_0__["coerceNumberProperty"])(size);
          }
          /**
           * Measures the combined size (width for horizontal orientation, height for vertical) of all items
           * in the specified range. Throws an error if the range includes items that are not currently
           * rendered.
           */

        }, {
          key: "measureRangeSize",
          value: function measureRangeSize(range, orientation) {
            if (range.start >= range.end) {
              return 0;
            }

            if ((range.start < this._renderedRange.start || range.end > this._renderedRange.end) && (typeof ngDevMode === 'undefined' || ngDevMode)) {
              throw Error("Error: attempted to measure an item that isn't rendered.");
            } // The index into the list of rendered views for the first item in the range.


            var renderedStartIndex = range.start - this._renderedRange.start; // The length of the range we're measuring.

            var rangeLen = range.end - range.start; // Loop over all the views, find the first and land node and compute the size by subtracting
            // the top of the first node from the bottom of the last one.

            var firstNode;
            var lastNode; // Find the first node by starting from the beginning and going forwards.

            for (var i = 0; i < rangeLen; i++) {
              var view = this._viewContainerRef.get(i + renderedStartIndex);

              if (view && view.rootNodes.length) {
                firstNode = lastNode = view.rootNodes[0];
                break;
              }
            } // Find the last node by starting from the end and going backwards.


            for (var _i66 = rangeLen - 1; _i66 > -1; _i66--) {
              var _view4 = this._viewContainerRef.get(_i66 + renderedStartIndex);

              if (_view4 && _view4.rootNodes.length) {
                lastNode = _view4.rootNodes[_view4.rootNodes.length - 1];
                break;
              }
            }

            return firstNode && lastNode ? getOffset(orientation, 'end', lastNode) - getOffset(orientation, 'start', firstNode) : 0;
          }
        }, {
          key: "ngDoCheck",
          value: function ngDoCheck() {
            if (this._differ && this._needsUpdate) {
              // TODO(mmalerba): We should differentiate needs update due to scrolling and a new portion of
              // this list being rendered (can use simpler algorithm) vs needs update due to data actually
              // changing (need to do this diff).
              var changes = this._differ.diff(this._renderedItems);

              if (!changes) {
                this._updateContext();
              } else {
                this._applyChanges(changes);
              }

              this._needsUpdate = false;
            }
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._viewport.detach();

            this._dataSourceChanges.next(undefined);

            this._dataSourceChanges.complete();

            this.viewChange.complete();

            this._destroyed.next();

            this._destroyed.complete();

            this._viewRepeater.detach();
          }
          /** React to scroll state changes in the viewport. */

        }, {
          key: "_onRenderedDataChange",
          value: function _onRenderedDataChange() {
            var _this1021 = this;

            if (!this._renderedRange) {
              return;
            }

            this._renderedItems = this._data.slice(this._renderedRange.start, this._renderedRange.end);

            if (!this._differ) {
              // Use a wrapper function for the `trackBy` so any new values are
              // picked up automatically without having to recreate the differ.
              this._differ = this._differs.find(this._renderedItems).create(function (index, item) {
                return _this1021.cdkVirtualForTrackBy ? _this1021.cdkVirtualForTrackBy(index, item) : item;
              });
            }

            this._needsUpdate = true;
          }
          /** Swap out one `DataSource` for another. */

        }, {
          key: "_changeDataSource",
          value: function _changeDataSource(oldDs, newDs) {
            if (oldDs) {
              oldDs.disconnect(this);
            }

            this._needsUpdate = true;
            return newDs ? newDs.connect(this) : Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["of"])();
          }
          /** Update the `CdkVirtualForOfContext` for all views. */

        }, {
          key: "_updateContext",
          value: function _updateContext() {
            var count = this._data.length;
            var i = this._viewContainerRef.length;

            while (i--) {
              var view = this._viewContainerRef.get(i);

              view.context.index = this._renderedRange.start + i;
              view.context.count = count;

              this._updateComputedContextProperties(view.context);

              view.detectChanges();
            }
          }
          /** Apply changes to the DOM. */

        }, {
          key: "_applyChanges",
          value: function _applyChanges(changes) {
            var _this1022 = this;

            this._viewRepeater.applyChanges(changes, this._viewContainerRef, function (record, _adjustedPreviousIndex, currentIndex) {
              return _this1022._getEmbeddedViewArgs(record, currentIndex);
            }, function (record) {
              return record.item;
            }); // Update $implicit for any items that had an identity change.


            changes.forEachIdentityChange(function (record) {
              var view = _this1022._viewContainerRef.get(record.currentIndex);

              view.context.$implicit = record.item;
            }); // Update the context variables on all items.

            var count = this._data.length;
            var i = this._viewContainerRef.length;

            while (i--) {
              var view = this._viewContainerRef.get(i);

              view.context.index = this._renderedRange.start + i;
              view.context.count = count;

              this._updateComputedContextProperties(view.context);
            }
          }
          /** Update the computed properties on the `CdkVirtualForOfContext`. */

        }, {
          key: "_updateComputedContextProperties",
          value: function _updateComputedContextProperties(context) {
            context.first = context.index === 0;
            context.last = context.index === context.count - 1;
            context.even = context.index % 2 === 0;
            context.odd = !context.even;
          }
        }, {
          key: "_getEmbeddedViewArgs",
          value: function _getEmbeddedViewArgs(record, index) {
            // Note that it's important that we insert the item directly at the proper index,
            // rather than inserting it and the moving it in place, because if there's a directive
            // on the same node that injects the `ViewContainerRef`, Angular will insert another
            // comment node which can throw off the move when it's being repeated for all items.
            return {
              templateRef: this._template,
              context: {
                $implicit: record.item,
                // It's guaranteed that the iterable is not "undefined" or "null" because we only
                // generate views for elements if the "cdkVirtualForOf" iterable has elements.
                cdkVirtualForOf: this._cdkVirtualForOf,
                index: -1,
                count: -1,
                first: false,
                last: false,
                odd: false,
                even: false
              },
              index: index
            };
          }
        }]);

        return CdkVirtualForOf;
      }();

      CdkVirtualForOf.ɵfac = function CdkVirtualForOf_Factory(t) {
        return new (t || CdkVirtualForOf)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewContainerRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["TemplateRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["IterableDiffers"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_cdk_collections__WEBPACK_IMPORTED_MODULE_7__["_VIEW_REPEATER_STRATEGY"]), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](CdkVirtualScrollViewport, 4), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]));
      };

      CdkVirtualForOf.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineDirective"]({
        type: CdkVirtualForOf,
        selectors: [["", "cdkVirtualFor", "", "cdkVirtualForOf", ""]],
        inputs: {
          cdkVirtualForOf: "cdkVirtualForOf",
          cdkVirtualForTrackBy: "cdkVirtualForTrackBy",
          cdkVirtualForTemplate: "cdkVirtualForTemplate",
          cdkVirtualForTemplateCacheSize: "cdkVirtualForTemplateCacheSize"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵProvidersFeature"]([{
          provide: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_7__["_VIEW_REPEATER_STRATEGY"],
          useClass: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_7__["_RecycleViewRepeaterStrategy"]
        }])]
      });

      CdkVirtualForOf.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewContainerRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["TemplateRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["IterableDiffers"]
        }, {
          type: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_7__["_RecycleViewRepeaterStrategy"],
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
            args: [_angular_cdk_collections__WEBPACK_IMPORTED_MODULE_7__["_VIEW_REPEATER_STRATEGY"]]
          }]
        }, {
          type: CdkVirtualScrollViewport,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["SkipSelf"]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
        }];
      };

      CdkVirtualForOf.propDecorators = {
        cdkVirtualForOf: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        cdkVirtualForTrackBy: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        cdkVirtualForTemplate: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }],
        cdkVirtualForTemplateCacheSize: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkVirtualForOf, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Directive"],
          args: [{
            selector: '[cdkVirtualFor][cdkVirtualForOf]',
            providers: [{
              provide: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_7__["_VIEW_REPEATER_STRATEGY"],
              useClass: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_7__["_RecycleViewRepeaterStrategy"]
            }]
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["ViewContainerRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["TemplateRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["IterableDiffers"]
          }, {
            type: _angular_cdk_collections__WEBPACK_IMPORTED_MODULE_7__["_RecycleViewRepeaterStrategy"],
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"],
              args: [_angular_cdk_collections__WEBPACK_IMPORTED_MODULE_7__["_VIEW_REPEATER_STRATEGY"]]
            }]
          }, {
            type: CdkVirtualScrollViewport,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["SkipSelf"]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgZone"]
          }];
        }, {
          cdkVirtualForOf: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          cdkVirtualForTrackBy: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          cdkVirtualForTemplate: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }],
          cdkVirtualForTemplateCacheSize: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Input"]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var CdkScrollableModule = function CdkScrollableModule() {
        _classCallCheck2(this, CdkScrollableModule);
      };

      CdkScrollableModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({
        type: CdkScrollableModule
      });
      CdkScrollableModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({
        factory: function CdkScrollableModule_Factory(t) {
          return new (t || CdkScrollableModule)();
        }
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](CdkScrollableModule, {
          declarations: [CdkScrollable],
          exports: [CdkScrollable]
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](CdkScrollableModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
          args: [{
            exports: [CdkScrollable],
            declarations: [CdkScrollable]
          }]
        }], null, null);
      })();
      /**
       * @docs-primary-export
       */


      var ScrollingModule = function ScrollingModule() {
        _classCallCheck2(this, ScrollingModule);
      };

      ScrollingModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({
        type: ScrollingModule
      });
      ScrollingModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({
        factory: function ScrollingModule_Factory(t) {
          return new (t || ScrollingModule)();
        },
        imports: [[_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_6__["BidiModule"], _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["PlatformModule"], CdkScrollableModule], _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_6__["BidiModule"], CdkScrollableModule]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](ScrollingModule, {
          declarations: function declarations() {
            return [CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport];
          },
          imports: function imports() {
            return [_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_6__["BidiModule"], _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["PlatformModule"], CdkScrollableModule];
          },
          exports: function exports() {
            return [_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_6__["BidiModule"], CdkScrollableModule, CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](ScrollingModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"],
          args: [{
            imports: [_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_6__["BidiModule"], _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_4__["PlatformModule"], CdkScrollableModule],
            exports: [_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_6__["BidiModule"], CdkScrollableModule, CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport],
            declarations: [CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=scrolling.js.map

      /***/

    },

    /***/
    "w1tV":
    /*!****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/share.js ***!
      \****************************************************************/

    /*! exports provided: share */

    /***/
    function w1tV(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "share", function () {
        return share;
      });
      /* harmony import */


      var _multicast__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./multicast */
      "oB13");
      /* harmony import */


      var _refCount__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./refCount */
      "x+ZX");
      /* harmony import */


      var _Subject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../Subject */
      "XNiG");

      function shareSubjectFactory() {
        return new _Subject__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
      }

      function share() {
        return function (source) {
          return Object(_refCount__WEBPACK_IMPORTED_MODULE_1__["refCount"])()(Object(_multicast__WEBPACK_IMPORTED_MODULE_0__["multicast"])(shareSubjectFactory)(source));
        };
      } //# sourceMappingURL=share.js.map

      /***/

    },

    /***/
    "w3cK":
    /*!*************************************************!*\
      !*** ./node_modules/aws-sdk/lib/browserSha1.js ***!
      \*************************************************/

    /*! no static exports found */

    /***/
    function w3cK(module, exports, __webpack_require__) {
      var Buffer = __webpack_require__(
      /*! buffer/ */
      "tjlA").Buffer;

      var hashUtils = __webpack_require__(
      /*! ./browserHashUtils */
      "oGmC");

      var BLOCK_SIZE = 64;
      var DIGEST_LENGTH = 20;
      var KEY = new Uint32Array([0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0]);
      var INIT = [0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19];
      var MAX_HASHABLE_LENGTH = Math.pow(2, 53) - 1;
      /**
       * @api private
       */

      function Sha1() {
        this.h0 = 0x67452301;
        this.h1 = 0xEFCDAB89;
        this.h2 = 0x98BADCFE;
        this.h3 = 0x10325476;
        this.h4 = 0xC3D2E1F0; // The first 64 bytes (16 words) is the data chunk

        this.block = new Uint32Array(80);
        this.offset = 0;
        this.shift = 24;
        this.totalLength = 0;
      }
      /**
       * @api private
       */


      module.exports = exports = Sha1;
      Sha1.BLOCK_SIZE = BLOCK_SIZE;

      Sha1.prototype.update = function (data) {
        if (this.finished) {
          throw new Error('Attempted to update an already finished hash.');
        }

        if (hashUtils.isEmptyData(data)) {
          return this;
        }

        data = hashUtils.convertToBuffer(data);
        var length = data.length;
        this.totalLength += length * 8;

        for (var i = 0; i < length; i++) {
          this.write(data[i]);
        }

        return this;
      };

      Sha1.prototype.write = function write(_byte) {
        this.block[this.offset] |= (_byte & 0xff) << this.shift;

        if (this.shift) {
          this.shift -= 8;
        } else {
          this.offset++;
          this.shift = 24;
        }

        if (this.offset === 16) this.processBlock();
      };

      Sha1.prototype.digest = function (encoding) {
        // Pad
        this.write(0x80);

        if (this.offset > 14 || this.offset === 14 && this.shift < 24) {
          this.processBlock();
        }

        this.offset = 14;
        this.shift = 24; // 64-bit length big-endian

        this.write(0x00); // numbers this big aren't accurate in javascript anyway

        this.write(0x00); // ..So just hard-code to zero.

        this.write(this.totalLength > 0xffffffffff ? this.totalLength / 0x10000000000 : 0x00);
        this.write(this.totalLength > 0xffffffff ? this.totalLength / 0x100000000 : 0x00);

        for (var s = 24; s >= 0; s -= 8) {
          this.write(this.totalLength >> s);
        } // The value in state is little-endian rather than big-endian, so flip
        // each word into a new Uint8Array


        var out = new Buffer(DIGEST_LENGTH);
        var outView = new DataView(out.buffer);
        outView.setUint32(0, this.h0, false);
        outView.setUint32(4, this.h1, false);
        outView.setUint32(8, this.h2, false);
        outView.setUint32(12, this.h3, false);
        outView.setUint32(16, this.h4, false);
        return encoding ? out.toString(encoding) : out;
      };

      Sha1.prototype.processBlock = function processBlock() {
        // Extend the sixteen 32-bit words into eighty 32-bit words:
        for (var i = 16; i < 80; i++) {
          var w = this.block[i - 3] ^ this.block[i - 8] ^ this.block[i - 14] ^ this.block[i - 16];
          this.block[i] = w << 1 | w >>> 31;
        } // Initialize hash value for this chunk:


        var a = this.h0;
        var b = this.h1;
        var c = this.h2;
        var d = this.h3;
        var e = this.h4;
        var f, k; // Main loop:

        for (i = 0; i < 80; i++) {
          if (i < 20) {
            f = d ^ b & (c ^ d);
            k = 0x5A827999;
          } else if (i < 40) {
            f = b ^ c ^ d;
            k = 0x6ED9EBA1;
          } else if (i < 60) {
            f = b & c | d & (b | c);
            k = 0x8F1BBCDC;
          } else {
            f = b ^ c ^ d;
            k = 0xCA62C1D6;
          }

          var temp = (a << 5 | a >>> 27) + f + e + k + (this.block[i] | 0);
          e = d;
          d = c;
          c = b << 30 | b >>> 2;
          b = a;
          a = temp;
        } // Add this chunk's hash to result so far:


        this.h0 = this.h0 + a | 0;
        this.h1 = this.h1 + b | 0;
        this.h2 = this.h2 + c | 0;
        this.h3 = this.h3 + d | 0;
        this.h4 = this.h4 + e | 0; // The block is now reusable.

        this.offset = 0;

        for (i = 0; i < 16; i++) {
          this.block[i] = 0;
        }
      };
      /***/

    },

    /***/
    "wO+i":
    /*!****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/pluck.js ***!
      \****************************************************************/

    /*! exports provided: pluck */

    /***/
    function wOI(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "pluck", function () {
        return pluck;
      });
      /* harmony import */


      var _map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./map */
      "lJxs");

      function pluck() {
        for (var _len68 = arguments.length, properties = new Array(_len68), _key71 = 0; _key71 < _len68; _key71++) {
          properties[_key71] = arguments[_key71];
        }

        var length = properties.length;

        if (length === 0) {
          throw new Error('list of properties cannot be empty.');
        }

        return function (source) {
          return Object(_map__WEBPACK_IMPORTED_MODULE_0__["map"])(plucker(properties, length))(source);
        };
      }

      function plucker(props, length) {
        var mapper = function mapper(x) {
          var currentProp = x;

          for (var i = 0; i < length; i++) {
            var p = currentProp != null ? currentProp[props[i]] : undefined;

            if (p !== void 0) {
              currentProp = p;
            } else {
              return undefined;
            }
          }

          return currentProp;
        };

        return mapper;
      } //# sourceMappingURL=pluck.js.map

      /***/

    },

    /***/
    "wQk9":
    /*!*******************************************!*\
      !*** ./node_modules/moment/locale/tzm.js ***!
      \*******************************************/

    /*! no static exports found */

    /***/
    function wQk9(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Central Atlas Tamazight [tzm]
      //! author : Abdel Said : https://github.com/abdelsaid
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var tzm = moment.defineLocale('tzm', {
          months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
          monthsShort: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
          weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
          weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
          weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',
            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',
            nextWeek: 'dddd [ⴴ] LT',
            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',
            lastWeek: 'dddd [ⴴ] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',
            past: 'ⵢⴰⵏ %s',
            s: 'ⵉⵎⵉⴽ',
            ss: '%d ⵉⵎⵉⴽ',
            m: 'ⵎⵉⵏⵓⴺ',
            mm: '%d ⵎⵉⵏⵓⴺ',
            h: 'ⵙⴰⵄⴰ',
            hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',
            d: 'ⴰⵙⵙ',
            dd: '%d oⵙⵙⴰⵏ',
            M: 'ⴰⵢoⵓⵔ',
            MM: '%d ⵉⵢⵢⵉⵔⵏ',
            y: 'ⴰⵙⴳⴰⵙ',
            yy: '%d ⵉⵙⴳⴰⵙⵏ'
          },
          week: {
            dow: 6,
            // Saturday is the first day of the week.
            doy: 12 // The week that contains Jan 12th is the first week of the year.

          }
        });
        return tzm;
      });
      /***/

    },

    /***/
    "wd/R":
    /*!***************************************!*\
      !*** ./node_modules/moment/moment.js ***!
      \***************************************/

    /*! no static exports found */

    /***/
    function wdR(module, exports, __webpack_require__) {
      /* WEBPACK VAR INJECTION */
      (function (module) {
        var require; //! moment.js
        //! version : 2.29.1
        //! authors : Tim Wood, Iskren Chernev, Moment.js contributors
        //! license : MIT
        //! momentjs.com


        ;

        (function (global, factory) {
          true ? module.exports = factory() : undefined;
        })(this, function () {
          'use strict';

          var hookCallback;

          function hooks() {
            return hookCallback.apply(null, arguments);
          } // This is done to register the method called with moment()
          // without creating circular dependencies.


          function setHookCallback(callback) {
            hookCallback = callback;
          }

          function isArray(input) {
            return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';
          }

          function isObject(input) {
            // IE8 will treat undefined and null as object if it wasn't for
            // input != null
            return input != null && Object.prototype.toString.call(input) === '[object Object]';
          }

          function hasOwnProp(a, b) {
            return Object.prototype.hasOwnProperty.call(a, b);
          }

          function isObjectEmpty(obj) {
            if (Object.getOwnPropertyNames) {
              return Object.getOwnPropertyNames(obj).length === 0;
            } else {
              var k;

              for (k in obj) {
                if (hasOwnProp(obj, k)) {
                  return false;
                }
              }

              return true;
            }
          }

          function isUndefined(input) {
            return input === void 0;
          }

          function isNumber(input) {
            return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';
          }

          function isDate(input) {
            return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';
          }

          function map(arr, fn) {
            var res = [],
                i;

            for (i = 0; i < arr.length; ++i) {
              res.push(fn(arr[i], i));
            }

            return res;
          }

          function extend(a, b) {
            for (var i in b) {
              if (hasOwnProp(b, i)) {
                a[i] = b[i];
              }
            }

            if (hasOwnProp(b, 'toString')) {
              a.toString = b.toString;
            }

            if (hasOwnProp(b, 'valueOf')) {
              a.valueOf = b.valueOf;
            }

            return a;
          }

          function createUTC(input, format, locale, strict) {
            return createLocalOrUTC(input, format, locale, strict, true).utc();
          }

          function defaultParsingFlags() {
            // We need to deep clone this object.
            return {
              empty: false,
              unusedTokens: [],
              unusedInput: [],
              overflow: -2,
              charsLeftOver: 0,
              nullInput: false,
              invalidEra: null,
              invalidMonth: null,
              invalidFormat: false,
              userInvalidated: false,
              iso: false,
              parsedDateParts: [],
              era: null,
              meridiem: null,
              rfc2822: false,
              weekdayMismatch: false
            };
          }

          function getParsingFlags(m) {
            if (m._pf == null) {
              m._pf = defaultParsingFlags();
            }

            return m._pf;
          }

          var some;

          if (Array.prototype.some) {
            some = Array.prototype.some;
          } else {
            some = function some(fun) {
              var t = Object(this),
                  len = t.length >>> 0,
                  i;

              for (i = 0; i < len; i++) {
                if (i in t && fun.call(this, t[i], i, t)) {
                  return true;
                }
              }

              return false;
            };
          }

          function isValid(m) {
            if (m._isValid == null) {
              var flags = getParsingFlags(m),
                  parsedParts = some.call(flags.parsedDateParts, function (i) {
                return i != null;
              }),
                  isNowValid = !isNaN(m._d.getTime()) && flags.overflow < 0 && !flags.empty && !flags.invalidEra && !flags.invalidMonth && !flags.invalidWeekday && !flags.weekdayMismatch && !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated && (!flags.meridiem || flags.meridiem && parsedParts);

              if (m._strict) {
                isNowValid = isNowValid && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0 && flags.bigHour === undefined;
              }

              if (Object.isFrozen == null || !Object.isFrozen(m)) {
                m._isValid = isNowValid;
              } else {
                return isNowValid;
              }
            }

            return m._isValid;
          }

          function createInvalid(flags) {
            var m = createUTC(NaN);

            if (flags != null) {
              extend(getParsingFlags(m), flags);
            } else {
              getParsingFlags(m).userInvalidated = true;
            }

            return m;
          } // Plugins that add properties should also add the key here (null value),
          // so we can properly clone ourselves.


          var momentProperties = hooks.momentProperties = [],
              updateInProgress = false;

          function copyConfig(to, from) {
            var i, prop, val;

            if (!isUndefined(from._isAMomentObject)) {
              to._isAMomentObject = from._isAMomentObject;
            }

            if (!isUndefined(from._i)) {
              to._i = from._i;
            }

            if (!isUndefined(from._f)) {
              to._f = from._f;
            }

            if (!isUndefined(from._l)) {
              to._l = from._l;
            }

            if (!isUndefined(from._strict)) {
              to._strict = from._strict;
            }

            if (!isUndefined(from._tzm)) {
              to._tzm = from._tzm;
            }

            if (!isUndefined(from._isUTC)) {
              to._isUTC = from._isUTC;
            }

            if (!isUndefined(from._offset)) {
              to._offset = from._offset;
            }

            if (!isUndefined(from._pf)) {
              to._pf = getParsingFlags(from);
            }

            if (!isUndefined(from._locale)) {
              to._locale = from._locale;
            }

            if (momentProperties.length > 0) {
              for (i = 0; i < momentProperties.length; i++) {
                prop = momentProperties[i];
                val = from[prop];

                if (!isUndefined(val)) {
                  to[prop] = val;
                }
              }
            }

            return to;
          } // Moment prototype object


          function Moment(config) {
            copyConfig(this, config);
            this._d = new Date(config._d != null ? config._d.getTime() : NaN);

            if (!this.isValid()) {
              this._d = new Date(NaN);
            } // Prevent infinite loop in case updateOffset creates new moment
            // objects.


            if (updateInProgress === false) {
              updateInProgress = true;
              hooks.updateOffset(this);
              updateInProgress = false;
            }
          }

          function isMoment(obj) {
            return obj instanceof Moment || obj != null && obj._isAMomentObject != null;
          }

          function warn(msg) {
            if (hooks.suppressDeprecationWarnings === false && typeof console !== 'undefined' && console.warn) {
              console.warn('Deprecation warning: ' + msg);
            }
          }

          function deprecate(msg, fn) {
            var firstTime = true;
            return extend(function () {
              if (hooks.deprecationHandler != null) {
                hooks.deprecationHandler(null, msg);
              }

              if (firstTime) {
                var args = [],
                    arg,
                    i,
                    key;

                for (i = 0; i < arguments.length; i++) {
                  arg = '';

                  if (typeof arguments[i] === 'object') {
                    arg += '\n[' + i + '] ';

                    for (key in arguments[0]) {
                      if (hasOwnProp(arguments[0], key)) {
                        arg += key + ': ' + arguments[0][key] + ', ';
                      }
                    }

                    arg = arg.slice(0, -2); // Remove trailing comma and space
                  } else {
                    arg = arguments[i];
                  }

                  args.push(arg);
                }

                warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + new Error().stack);
                firstTime = false;
              }

              return fn.apply(this, arguments);
            }, fn);
          }

          var deprecations = {};

          function deprecateSimple(name, msg) {
            if (hooks.deprecationHandler != null) {
              hooks.deprecationHandler(name, msg);
            }

            if (!deprecations[name]) {
              warn(msg);
              deprecations[name] = true;
            }
          }

          hooks.suppressDeprecationWarnings = false;
          hooks.deprecationHandler = null;

          function isFunction(input) {
            return typeof Function !== 'undefined' && input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';
          }

          function set(config) {
            var prop, i;

            for (i in config) {
              if (hasOwnProp(config, i)) {
                prop = config[i];

                if (isFunction(prop)) {
                  this[i] = prop;
                } else {
                  this['_' + i] = prop;
                }
              }
            }

            this._config = config; // Lenient ordinal parsing accepts just a number in addition to
            // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
            // TODO: Remove "ordinalParse" fallback in next major release.

            this._dayOfMonthOrdinalParseLenient = new RegExp((this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + '|' + /\d{1,2}/.source);
          }

          function mergeConfigs(parentConfig, childConfig) {
            var res = extend({}, parentConfig),
                prop;

            for (prop in childConfig) {
              if (hasOwnProp(childConfig, prop)) {
                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
                  res[prop] = {};
                  extend(res[prop], parentConfig[prop]);
                  extend(res[prop], childConfig[prop]);
                } else if (childConfig[prop] != null) {
                  res[prop] = childConfig[prop];
                } else {
                  delete res[prop];
                }
              }
            }

            for (prop in parentConfig) {
              if (hasOwnProp(parentConfig, prop) && !hasOwnProp(childConfig, prop) && isObject(parentConfig[prop])) {
                // make sure changes to properties don't modify parent config
                res[prop] = extend({}, res[prop]);
              }
            }

            return res;
          }

          function Locale(config) {
            if (config != null) {
              this.set(config);
            }
          }

          var keys;

          if (Object.keys) {
            keys = Object.keys;
          } else {
            keys = function keys(obj) {
              var i,
                  res = [];

              for (i in obj) {
                if (hasOwnProp(obj, i)) {
                  res.push(i);
                }
              }

              return res;
            };
          }

          var defaultCalendar = {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L'
          };

          function calendar(key, mom, now) {
            var output = this._calendar[key] || this._calendar['sameElse'];
            return isFunction(output) ? output.call(mom, now) : output;
          }

          function zeroFill(number, targetLength, forceSign) {
            var absNumber = '' + Math.abs(number),
                zerosToFill = targetLength - absNumber.length,
                sign = number >= 0;
            return (sign ? forceSign ? '+' : '' : '-') + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
          }

          var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,
              localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
              formatFunctions = {},
              formatTokenFunctions = {}; // token:    'M'
          // padded:   ['MM', 2]
          // ordinal:  'Mo'
          // callback: function () { this.month() + 1 }

          function addFormatToken(token, padded, ordinal, callback) {
            var func = callback;

            if (typeof callback === 'string') {
              func = function func() {
                return this[callback]();
              };
            }

            if (token) {
              formatTokenFunctions[token] = func;
            }

            if (padded) {
              formatTokenFunctions[padded[0]] = function () {
                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
              };
            }

            if (ordinal) {
              formatTokenFunctions[ordinal] = function () {
                return this.localeData().ordinal(func.apply(this, arguments), token);
              };
            }
          }

          function removeFormattingTokens(input) {
            if (input.match(/\[[\s\S]/)) {
              return input.replace(/^\[|\]$/g, '');
            }

            return input.replace(/\\/g, '');
          }

          function makeFormatFunction(format) {
            var array = format.match(formattingTokens),
                i,
                length;

            for (i = 0, length = array.length; i < length; i++) {
              if (formatTokenFunctions[array[i]]) {
                array[i] = formatTokenFunctions[array[i]];
              } else {
                array[i] = removeFormattingTokens(array[i]);
              }
            }

            return function (mom) {
              var output = '',
                  i;

              for (i = 0; i < length; i++) {
                output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];
              }

              return output;
            };
          } // format date using native date object


          function formatMoment(m, format) {
            if (!m.isValid()) {
              return m.localeData().invalidDate();
            }

            format = expandFormat(format, m.localeData());
            formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);
            return formatFunctions[format](m);
          }

          function expandFormat(format, locale) {
            var i = 5;

            function replaceLongDateFormatTokens(input) {
              return locale.longDateFormat(input) || input;
            }

            localFormattingTokens.lastIndex = 0;

            while (i >= 0 && localFormattingTokens.test(format)) {
              format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);
              localFormattingTokens.lastIndex = 0;
              i -= 1;
            }

            return format;
          }

          var defaultLongDateFormat = {
            LTS: 'h:mm:ss A',
            LT: 'h:mm A',
            L: 'MM/DD/YYYY',
            LL: 'MMMM D, YYYY',
            LLL: 'MMMM D, YYYY h:mm A',
            LLLL: 'dddd, MMMM D, YYYY h:mm A'
          };

          function longDateFormat(key) {
            var format = this._longDateFormat[key],
                formatUpper = this._longDateFormat[key.toUpperCase()];

            if (format || !formatUpper) {
              return format;
            }

            this._longDateFormat[key] = formatUpper.match(formattingTokens).map(function (tok) {
              if (tok === 'MMMM' || tok === 'MM' || tok === 'DD' || tok === 'dddd') {
                return tok.slice(1);
              }

              return tok;
            }).join('');
            return this._longDateFormat[key];
          }

          var defaultInvalidDate = 'Invalid date';

          function invalidDate() {
            return this._invalidDate;
          }

          var defaultOrdinal = '%d',
              defaultDayOfMonthOrdinalParse = /\d{1,2}/;

          function ordinal(number) {
            return this._ordinal.replace('%d', number);
          }

          var defaultRelativeTime = {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            w: 'a week',
            ww: '%d weeks',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years'
          };

          function relativeTime(number, withoutSuffix, string, isFuture) {
            var output = this._relativeTime[string];
            return isFunction(output) ? output(number, withoutSuffix, string, isFuture) : output.replace(/%d/i, number);
          }

          function pastFuture(diff, output) {
            var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
            return isFunction(format) ? format(output) : format.replace(/%s/i, output);
          }

          var aliases = {};

          function addUnitAlias(unit, shorthand) {
            var lowerCase = unit.toLowerCase();
            aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
          }

          function normalizeUnits(units) {
            return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;
          }

          function normalizeObjectUnits(inputObject) {
            var normalizedInput = {},
                normalizedProp,
                prop;

            for (prop in inputObject) {
              if (hasOwnProp(inputObject, prop)) {
                normalizedProp = normalizeUnits(prop);

                if (normalizedProp) {
                  normalizedInput[normalizedProp] = inputObject[prop];
                }
              }
            }

            return normalizedInput;
          }

          var priorities = {};

          function addUnitPriority(unit, priority) {
            priorities[unit] = priority;
          }

          function getPrioritizedUnits(unitsObj) {
            var units = [],
                u;

            for (u in unitsObj) {
              if (hasOwnProp(unitsObj, u)) {
                units.push({
                  unit: u,
                  priority: priorities[u]
                });
              }
            }

            units.sort(function (a, b) {
              return a.priority - b.priority;
            });
            return units;
          }

          function isLeapYear(year) {
            return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
          }

          function absFloor(number) {
            if (number < 0) {
              // -0 -> 0
              return Math.ceil(number) || 0;
            } else {
              return Math.floor(number);
            }
          }

          function toInt(argumentForCoercion) {
            var coercedNumber = +argumentForCoercion,
                value = 0;

            if (coercedNumber !== 0 && isFinite(coercedNumber)) {
              value = absFloor(coercedNumber);
            }

            return value;
          }

          function makeGetSet(unit, keepTime) {
            return function (value) {
              if (value != null) {
                set$1(this, unit, value);
                hooks.updateOffset(this, keepTime);
                return this;
              } else {
                return get(this, unit);
              }
            };
          }

          function get(mom, unit) {
            return mom.isValid() ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;
          }

          function set$1(mom, unit, value) {
            if (mom.isValid() && !isNaN(value)) {
              if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {
                value = toInt(value);

                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));
              } else {
                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
              }
            }
          } // MOMENTS


          function stringGet(units) {
            units = normalizeUnits(units);

            if (isFunction(this[units])) {
              return this[units]();
            }

            return this;
          }

          function stringSet(units, value) {
            if (typeof units === 'object') {
              units = normalizeObjectUnits(units);
              var prioritized = getPrioritizedUnits(units),
                  i;

              for (i = 0; i < prioritized.length; i++) {
                this[prioritized[i].unit](units[prioritized[i].unit]);
              }
            } else {
              units = normalizeUnits(units);

              if (isFunction(this[units])) {
                return this[units](value);
              }
            }

            return this;
          }

          var match1 = /\d/,
              //       0 - 9
          match2 = /\d\d/,
              //      00 - 99
          match3 = /\d{3}/,
              //     000 - 999
          match4 = /\d{4}/,
              //    0000 - 9999
          match6 = /[+-]?\d{6}/,
              // -999999 - 999999
          match1to2 = /\d\d?/,
              //       0 - 99
          match3to4 = /\d\d\d\d?/,
              //     999 - 9999
          match5to6 = /\d\d\d\d\d\d?/,
              //   99999 - 999999
          match1to3 = /\d{1,3}/,
              //       0 - 999
          match1to4 = /\d{1,4}/,
              //       0 - 9999
          match1to6 = /[+-]?\d{1,6}/,
              // -999999 - 999999
          matchUnsigned = /\d+/,
              //       0 - inf
          matchSigned = /[+-]?\d+/,
              //    -inf - inf
          matchOffset = /Z|[+-]\d\d:?\d\d/gi,
              // +00:00 -00:00 +0000 -0000 or Z
          matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi,
              // +00 -00 +00:00 -00:00 +0000 -0000 or Z
          matchTimestamp = /[+-]?\d+(\.\d{1,3})?/,
              // 123456789 123456789.123
          // any word (or two) characters or numbers including two/three word month in arabic.
          // includes scottish gaelic two word and hyphenated months
          matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,
              regexes;
          regexes = {};

          function addRegexToken(token, regex, strictRegex) {
            regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {
              return isStrict && strictRegex ? strictRegex : regex;
            };
          }

          function getParseRegexForToken(token, config) {
            if (!hasOwnProp(regexes, token)) {
              return new RegExp(unescapeFormat(token));
            }

            return regexes[token](config._strict, config._locale);
          } // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript


          function unescapeFormat(s) {
            return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
              return p1 || p2 || p3 || p4;
            }));
          }

          function regexEscape(s) {
            return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
          }

          var tokens = {};

          function addParseToken(token, callback) {
            var i,
                func = callback;

            if (typeof token === 'string') {
              token = [token];
            }

            if (isNumber(callback)) {
              func = function func(input, array) {
                array[callback] = toInt(input);
              };
            }

            for (i = 0; i < token.length; i++) {
              tokens[token[i]] = func;
            }
          }

          function addWeekParseToken(token, callback) {
            addParseToken(token, function (input, array, config, token) {
              config._w = config._w || {};
              callback(input, config._w, config, token);
            });
          }

          function addTimeToArrayFromToken(token, input, config) {
            if (input != null && hasOwnProp(tokens, token)) {
              tokens[token](input, config._a, config, token);
            }
          }

          var YEAR = 0,
              MONTH = 1,
              DATE = 2,
              HOUR = 3,
              MINUTE = 4,
              SECOND = 5,
              MILLISECOND = 6,
              WEEK = 7,
              WEEKDAY = 8;

          function mod(n, x) {
            return (n % x + x) % x;
          }

          var indexOf;

          if (Array.prototype.indexOf) {
            indexOf = Array.prototype.indexOf;
          } else {
            indexOf = function indexOf(o) {
              // I know
              var i;

              for (i = 0; i < this.length; ++i) {
                if (this[i] === o) {
                  return i;
                }
              }

              return -1;
            };
          }

          function daysInMonth(year, month) {
            if (isNaN(year) || isNaN(month)) {
              return NaN;
            }

            var modMonth = mod(month, 12);
            year += (month - modMonth) / 12;
            return modMonth === 1 ? isLeapYear(year) ? 29 : 28 : 31 - modMonth % 7 % 2;
          } // FORMATTING


          addFormatToken('M', ['MM', 2], 'Mo', function () {
            return this.month() + 1;
          });
          addFormatToken('MMM', 0, 0, function (format) {
            return this.localeData().monthsShort(this, format);
          });
          addFormatToken('MMMM', 0, 0, function (format) {
            return this.localeData().months(this, format);
          }); // ALIASES

          addUnitAlias('month', 'M'); // PRIORITY

          addUnitPriority('month', 8); // PARSING

          addRegexToken('M', match1to2);
          addRegexToken('MM', match1to2, match2);
          addRegexToken('MMM', function (isStrict, locale) {
            return locale.monthsShortRegex(isStrict);
          });
          addRegexToken('MMMM', function (isStrict, locale) {
            return locale.monthsRegex(isStrict);
          });
          addParseToken(['M', 'MM'], function (input, array) {
            array[MONTH] = toInt(input) - 1;
          });
          addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
            var month = config._locale.monthsParse(input, token, config._strict); // if we didn't find a month name, mark the date as invalid.


            if (month != null) {
              array[MONTH] = month;
            } else {
              getParsingFlags(config).invalidMonth = input;
            }
          }); // LOCALES

          var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
              defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
              MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,
              defaultMonthsShortRegex = matchWord,
              defaultMonthsRegex = matchWord;

          function localeMonths(m, format) {
            if (!m) {
              return isArray(this._months) ? this._months : this._months['standalone'];
            }

            return isArray(this._months) ? this._months[m.month()] : this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];
          }

          function localeMonthsShort(m, format) {
            if (!m) {
              return isArray(this._monthsShort) ? this._monthsShort : this._monthsShort['standalone'];
            }

            return isArray(this._monthsShort) ? this._monthsShort[m.month()] : this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];
          }

          function handleStrictParse(monthName, format, strict) {
            var i,
                ii,
                mom,
                llc = monthName.toLocaleLowerCase();

            if (!this._monthsParse) {
              // this is not used
              this._monthsParse = [];
              this._longMonthsParse = [];
              this._shortMonthsParse = [];

              for (i = 0; i < 12; ++i) {
                mom = createUTC([2000, i]);
                this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();
                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
              }
            }

            if (strict) {
              if (format === 'MMM') {
                ii = indexOf.call(this._shortMonthsParse, llc);
                return ii !== -1 ? ii : null;
              } else {
                ii = indexOf.call(this._longMonthsParse, llc);
                return ii !== -1 ? ii : null;
              }
            } else {
              if (format === 'MMM') {
                ii = indexOf.call(this._shortMonthsParse, llc);

                if (ii !== -1) {
                  return ii;
                }

                ii = indexOf.call(this._longMonthsParse, llc);
                return ii !== -1 ? ii : null;
              } else {
                ii = indexOf.call(this._longMonthsParse, llc);

                if (ii !== -1) {
                  return ii;
                }

                ii = indexOf.call(this._shortMonthsParse, llc);
                return ii !== -1 ? ii : null;
              }
            }
          }

          function localeMonthsParse(monthName, format, strict) {
            var i, mom, regex;

            if (this._monthsParseExact) {
              return handleStrictParse.call(this, monthName, format, strict);
            }

            if (!this._monthsParse) {
              this._monthsParse = [];
              this._longMonthsParse = [];
              this._shortMonthsParse = [];
            } // TODO: add sorting
            // Sorting makes sure if one month (or abbr) is a prefix of another
            // see sorting in computeMonthsParse


            for (i = 0; i < 12; i++) {
              // make the regex if we don't have it already
              mom = createUTC([2000, i]);

              if (strict && !this._longMonthsParse[i]) {
                this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');
                this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');
              }

              if (!strict && !this._monthsParse[i]) {
                regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
              } // test the regex


              if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {
                return i;
              } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {
                return i;
              } else if (!strict && this._monthsParse[i].test(monthName)) {
                return i;
              }
            }
          } // MOMENTS


          function setMonth(mom, value) {
            var dayOfMonth;

            if (!mom.isValid()) {
              // No op
              return mom;
            }

            if (typeof value === 'string') {
              if (/^\d+$/.test(value)) {
                value = toInt(value);
              } else {
                value = mom.localeData().monthsParse(value); // TODO: Another silent failure?

                if (!isNumber(value)) {
                  return mom;
                }
              }
            }

            dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));

            mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);

            return mom;
          }

          function getSetMonth(value) {
            if (value != null) {
              setMonth(this, value);
              hooks.updateOffset(this, true);
              return this;
            } else {
              return get(this, 'Month');
            }
          }

          function getDaysInMonth() {
            return daysInMonth(this.year(), this.month());
          }

          function monthsShortRegex(isStrict) {
            if (this._monthsParseExact) {
              if (!hasOwnProp(this, '_monthsRegex')) {
                computeMonthsParse.call(this);
              }

              if (isStrict) {
                return this._monthsShortStrictRegex;
              } else {
                return this._monthsShortRegex;
              }
            } else {
              if (!hasOwnProp(this, '_monthsShortRegex')) {
                this._monthsShortRegex = defaultMonthsShortRegex;
              }

              return this._monthsShortStrictRegex && isStrict ? this._monthsShortStrictRegex : this._monthsShortRegex;
            }
          }

          function monthsRegex(isStrict) {
            if (this._monthsParseExact) {
              if (!hasOwnProp(this, '_monthsRegex')) {
                computeMonthsParse.call(this);
              }

              if (isStrict) {
                return this._monthsStrictRegex;
              } else {
                return this._monthsRegex;
              }
            } else {
              if (!hasOwnProp(this, '_monthsRegex')) {
                this._monthsRegex = defaultMonthsRegex;
              }

              return this._monthsStrictRegex && isStrict ? this._monthsStrictRegex : this._monthsRegex;
            }
          }

          function computeMonthsParse() {
            function cmpLenRev(a, b) {
              return b.length - a.length;
            }

            var shortPieces = [],
                longPieces = [],
                mixedPieces = [],
                i,
                mom;

            for (i = 0; i < 12; i++) {
              // make the regex if we don't have it already
              mom = createUTC([2000, i]);
              shortPieces.push(this.monthsShort(mom, ''));
              longPieces.push(this.months(mom, ''));
              mixedPieces.push(this.months(mom, ''));
              mixedPieces.push(this.monthsShort(mom, ''));
            } // Sorting makes sure if one month (or abbr) is a prefix of another it
            // will match the longer piece.


            shortPieces.sort(cmpLenRev);
            longPieces.sort(cmpLenRev);
            mixedPieces.sort(cmpLenRev);

            for (i = 0; i < 12; i++) {
              shortPieces[i] = regexEscape(shortPieces[i]);
              longPieces[i] = regexEscape(longPieces[i]);
            }

            for (i = 0; i < 24; i++) {
              mixedPieces[i] = regexEscape(mixedPieces[i]);
            }

            this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
            this._monthsShortRegex = this._monthsRegex;
            this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
            this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
          } // FORMATTING


          addFormatToken('Y', 0, 0, function () {
            var y = this.year();
            return y <= 9999 ? zeroFill(y, 4) : '+' + y;
          });
          addFormatToken(0, ['YY', 2], 0, function () {
            return this.year() % 100;
          });
          addFormatToken(0, ['YYYY', 4], 0, 'year');
          addFormatToken(0, ['YYYYY', 5], 0, 'year');
          addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); // ALIASES

          addUnitAlias('year', 'y'); // PRIORITIES

          addUnitPriority('year', 1); // PARSING

          addRegexToken('Y', matchSigned);
          addRegexToken('YY', match1to2, match2);
          addRegexToken('YYYY', match1to4, match4);
          addRegexToken('YYYYY', match1to6, match6);
          addRegexToken('YYYYYY', match1to6, match6);
          addParseToken(['YYYYY', 'YYYYYY'], YEAR);
          addParseToken('YYYY', function (input, array) {
            array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
          });
          addParseToken('YY', function (input, array) {
            array[YEAR] = hooks.parseTwoDigitYear(input);
          });
          addParseToken('Y', function (input, array) {
            array[YEAR] = parseInt(input, 10);
          }); // HELPERS

          function daysInYear(year) {
            return isLeapYear(year) ? 366 : 365;
          } // HOOKS


          hooks.parseTwoDigitYear = function (input) {
            return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
          }; // MOMENTS


          var getSetYear = makeGetSet('FullYear', true);

          function getIsLeapYear() {
            return isLeapYear(this.year());
          }

          function createDate(y, m, d, h, M, s, ms) {
            // can't just apply() to create a date:
            // https://stackoverflow.com/q/181348
            var date; // the date constructor remaps years 0-99 to 1900-1999

            if (y < 100 && y >= 0) {
              // preserve leap years using a full 400 year cycle, then reset
              date = new Date(y + 400, m, d, h, M, s, ms);

              if (isFinite(date.getFullYear())) {
                date.setFullYear(y);
              }
            } else {
              date = new Date(y, m, d, h, M, s, ms);
            }

            return date;
          }

          function createUTCDate(y) {
            var date, args; // the Date.UTC function remaps years 0-99 to 1900-1999

            if (y < 100 && y >= 0) {
              args = Array.prototype.slice.call(arguments); // preserve leap years using a full 400 year cycle, then reset

              args[0] = y + 400;
              date = new Date(Date.UTC.apply(null, args));

              if (isFinite(date.getUTCFullYear())) {
                date.setUTCFullYear(y);
              }
            } else {
              date = new Date(Date.UTC.apply(null, arguments));
            }

            return date;
          } // start-of-first-week - start-of-year


          function firstWeekOffset(year, dow, doy) {
            var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
            fwd = 7 + dow - doy,
                // first-week day local weekday -- which local weekday is fwd
            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
            return -fwdlw + fwd - 1;
          } // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday


          function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
            var localWeekday = (7 + weekday - dow) % 7,
                weekOffset = firstWeekOffset(year, dow, doy),
                dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
                resYear,
                resDayOfYear;

            if (dayOfYear <= 0) {
              resYear = year - 1;
              resDayOfYear = daysInYear(resYear) + dayOfYear;
            } else if (dayOfYear > daysInYear(year)) {
              resYear = year + 1;
              resDayOfYear = dayOfYear - daysInYear(year);
            } else {
              resYear = year;
              resDayOfYear = dayOfYear;
            }

            return {
              year: resYear,
              dayOfYear: resDayOfYear
            };
          }

          function weekOfYear(mom, dow, doy) {
            var weekOffset = firstWeekOffset(mom.year(), dow, doy),
                week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
                resWeek,
                resYear;

            if (week < 1) {
              resYear = mom.year() - 1;
              resWeek = week + weeksInYear(resYear, dow, doy);
            } else if (week > weeksInYear(mom.year(), dow, doy)) {
              resWeek = week - weeksInYear(mom.year(), dow, doy);
              resYear = mom.year() + 1;
            } else {
              resYear = mom.year();
              resWeek = week;
            }

            return {
              week: resWeek,
              year: resYear
            };
          }

          function weeksInYear(year, dow, doy) {
            var weekOffset = firstWeekOffset(year, dow, doy),
                weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
            return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
          } // FORMATTING


          addFormatToken('w', ['ww', 2], 'wo', 'week');
          addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); // ALIASES

          addUnitAlias('week', 'w');
          addUnitAlias('isoWeek', 'W'); // PRIORITIES

          addUnitPriority('week', 5);
          addUnitPriority('isoWeek', 5); // PARSING

          addRegexToken('w', match1to2);
          addRegexToken('ww', match1to2, match2);
          addRegexToken('W', match1to2);
          addRegexToken('WW', match1to2, match2);
          addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {
            week[token.substr(0, 1)] = toInt(input);
          }); // HELPERS
          // LOCALES

          function localeWeek(mom) {
            return weekOfYear(mom, this._week.dow, this._week.doy).week;
          }

          var defaultLocaleWeek = {
            dow: 0,
            // Sunday is the first day of the week.
            doy: 6 // The week that contains Jan 6th is the first week of the year.

          };

          function localeFirstDayOfWeek() {
            return this._week.dow;
          }

          function localeFirstDayOfYear() {
            return this._week.doy;
          } // MOMENTS


          function getSetWeek(input) {
            var week = this.localeData().week(this);
            return input == null ? week : this.add((input - week) * 7, 'd');
          }

          function getSetISOWeek(input) {
            var week = weekOfYear(this, 1, 4).week;
            return input == null ? week : this.add((input - week) * 7, 'd');
          } // FORMATTING


          addFormatToken('d', 0, 'do', 'day');
          addFormatToken('dd', 0, 0, function (format) {
            return this.localeData().weekdaysMin(this, format);
          });
          addFormatToken('ddd', 0, 0, function (format) {
            return this.localeData().weekdaysShort(this, format);
          });
          addFormatToken('dddd', 0, 0, function (format) {
            return this.localeData().weekdays(this, format);
          });
          addFormatToken('e', 0, 0, 'weekday');
          addFormatToken('E', 0, 0, 'isoWeekday'); // ALIASES

          addUnitAlias('day', 'd');
          addUnitAlias('weekday', 'e');
          addUnitAlias('isoWeekday', 'E'); // PRIORITY

          addUnitPriority('day', 11);
          addUnitPriority('weekday', 11);
          addUnitPriority('isoWeekday', 11); // PARSING

          addRegexToken('d', match1to2);
          addRegexToken('e', match1to2);
          addRegexToken('E', match1to2);
          addRegexToken('dd', function (isStrict, locale) {
            return locale.weekdaysMinRegex(isStrict);
          });
          addRegexToken('ddd', function (isStrict, locale) {
            return locale.weekdaysShortRegex(isStrict);
          });
          addRegexToken('dddd', function (isStrict, locale) {
            return locale.weekdaysRegex(isStrict);
          });
          addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
            var weekday = config._locale.weekdaysParse(input, token, config._strict); // if we didn't get a weekday name, mark the date as invalid


            if (weekday != null) {
              week.d = weekday;
            } else {
              getParsingFlags(config).invalidWeekday = input;
            }
          });
          addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
            week[token] = toInt(input);
          }); // HELPERS

          function parseWeekday(input, locale) {
            if (typeof input !== 'string') {
              return input;
            }

            if (!isNaN(input)) {
              return parseInt(input, 10);
            }

            input = locale.weekdaysParse(input);

            if (typeof input === 'number') {
              return input;
            }

            return null;
          }

          function parseIsoWeekday(input, locale) {
            if (typeof input === 'string') {
              return locale.weekdaysParse(input) % 7 || 7;
            }

            return isNaN(input) ? null : input;
          } // LOCALES


          function shiftWeekdays(ws, n) {
            return ws.slice(n, 7).concat(ws.slice(0, n));
          }

          var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
              defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
              defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
              defaultWeekdaysRegex = matchWord,
              defaultWeekdaysShortRegex = matchWord,
              defaultWeekdaysMinRegex = matchWord;

          function localeWeekdays(m, format) {
            var weekdays = isArray(this._weekdays) ? this._weekdays : this._weekdays[m && m !== true && this._weekdays.isFormat.test(format) ? 'format' : 'standalone'];
            return m === true ? shiftWeekdays(weekdays, this._week.dow) : m ? weekdays[m.day()] : weekdays;
          }

          function localeWeekdaysShort(m) {
            return m === true ? shiftWeekdays(this._weekdaysShort, this._week.dow) : m ? this._weekdaysShort[m.day()] : this._weekdaysShort;
          }

          function localeWeekdaysMin(m) {
            return m === true ? shiftWeekdays(this._weekdaysMin, this._week.dow) : m ? this._weekdaysMin[m.day()] : this._weekdaysMin;
          }

          function handleStrictParse$1(weekdayName, format, strict) {
            var i,
                ii,
                mom,
                llc = weekdayName.toLocaleLowerCase();

            if (!this._weekdaysParse) {
              this._weekdaysParse = [];
              this._shortWeekdaysParse = [];
              this._minWeekdaysParse = [];

              for (i = 0; i < 7; ++i) {
                mom = createUTC([2000, 1]).day(i);
                this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();
                this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();
                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
              }
            }

            if (strict) {
              if (format === 'dddd') {
                ii = indexOf.call(this._weekdaysParse, llc);
                return ii !== -1 ? ii : null;
              } else if (format === 'ddd') {
                ii = indexOf.call(this._shortWeekdaysParse, llc);
                return ii !== -1 ? ii : null;
              } else {
                ii = indexOf.call(this._minWeekdaysParse, llc);
                return ii !== -1 ? ii : null;
              }
            } else {
              if (format === 'dddd') {
                ii = indexOf.call(this._weekdaysParse, llc);

                if (ii !== -1) {
                  return ii;
                }

                ii = indexOf.call(this._shortWeekdaysParse, llc);

                if (ii !== -1) {
                  return ii;
                }

                ii = indexOf.call(this._minWeekdaysParse, llc);
                return ii !== -1 ? ii : null;
              } else if (format === 'ddd') {
                ii = indexOf.call(this._shortWeekdaysParse, llc);

                if (ii !== -1) {
                  return ii;
                }

                ii = indexOf.call(this._weekdaysParse, llc);

                if (ii !== -1) {
                  return ii;
                }

                ii = indexOf.call(this._minWeekdaysParse, llc);
                return ii !== -1 ? ii : null;
              } else {
                ii = indexOf.call(this._minWeekdaysParse, llc);

                if (ii !== -1) {
                  return ii;
                }

                ii = indexOf.call(this._weekdaysParse, llc);

                if (ii !== -1) {
                  return ii;
                }

                ii = indexOf.call(this._shortWeekdaysParse, llc);
                return ii !== -1 ? ii : null;
              }
            }
          }

          function localeWeekdaysParse(weekdayName, format, strict) {
            var i, mom, regex;

            if (this._weekdaysParseExact) {
              return handleStrictParse$1.call(this, weekdayName, format, strict);
            }

            if (!this._weekdaysParse) {
              this._weekdaysParse = [];
              this._minWeekdaysParse = [];
              this._shortWeekdaysParse = [];
              this._fullWeekdaysParse = [];
            }

            for (i = 0; i < 7; i++) {
              // make the regex if we don't have it already
              mom = createUTC([2000, 1]).day(i);

              if (strict && !this._fullWeekdaysParse[i]) {
                this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', 'i');
                this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', 'i');
                this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', 'i');
              }

              if (!this._weekdaysParse[i]) {
                regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');
                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
              } // test the regex


              if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {
                return i;
              } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {
                return i;
              } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {
                return i;
              } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
                return i;
              }
            }
          } // MOMENTS


          function getSetDayOfWeek(input) {
            if (!this.isValid()) {
              return input != null ? this : NaN;
            }

            var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();

            if (input != null) {
              input = parseWeekday(input, this.localeData());
              return this.add(input - day, 'd');
            } else {
              return day;
            }
          }

          function getSetLocaleDayOfWeek(input) {
            if (!this.isValid()) {
              return input != null ? this : NaN;
            }

            var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
            return input == null ? weekday : this.add(input - weekday, 'd');
          }

          function getSetISODayOfWeek(input) {
            if (!this.isValid()) {
              return input != null ? this : NaN;
            } // behaves the same as moment#day except
            // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
            // as a setter, sunday should belong to the previous week.


            if (input != null) {
              var weekday = parseIsoWeekday(input, this.localeData());
              return this.day(this.day() % 7 ? weekday : weekday - 7);
            } else {
              return this.day() || 7;
            }
          }

          function weekdaysRegex(isStrict) {
            if (this._weekdaysParseExact) {
              if (!hasOwnProp(this, '_weekdaysRegex')) {
                computeWeekdaysParse.call(this);
              }

              if (isStrict) {
                return this._weekdaysStrictRegex;
              } else {
                return this._weekdaysRegex;
              }
            } else {
              if (!hasOwnProp(this, '_weekdaysRegex')) {
                this._weekdaysRegex = defaultWeekdaysRegex;
              }

              return this._weekdaysStrictRegex && isStrict ? this._weekdaysStrictRegex : this._weekdaysRegex;
            }
          }

          function weekdaysShortRegex(isStrict) {
            if (this._weekdaysParseExact) {
              if (!hasOwnProp(this, '_weekdaysRegex')) {
                computeWeekdaysParse.call(this);
              }

              if (isStrict) {
                return this._weekdaysShortStrictRegex;
              } else {
                return this._weekdaysShortRegex;
              }
            } else {
              if (!hasOwnProp(this, '_weekdaysShortRegex')) {
                this._weekdaysShortRegex = defaultWeekdaysShortRegex;
              }

              return this._weekdaysShortStrictRegex && isStrict ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex;
            }
          }

          function weekdaysMinRegex(isStrict) {
            if (this._weekdaysParseExact) {
              if (!hasOwnProp(this, '_weekdaysRegex')) {
                computeWeekdaysParse.call(this);
              }

              if (isStrict) {
                return this._weekdaysMinStrictRegex;
              } else {
                return this._weekdaysMinRegex;
              }
            } else {
              if (!hasOwnProp(this, '_weekdaysMinRegex')) {
                this._weekdaysMinRegex = defaultWeekdaysMinRegex;
              }

              return this._weekdaysMinStrictRegex && isStrict ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex;
            }
          }

          function computeWeekdaysParse() {
            function cmpLenRev(a, b) {
              return b.length - a.length;
            }

            var minPieces = [],
                shortPieces = [],
                longPieces = [],
                mixedPieces = [],
                i,
                mom,
                minp,
                shortp,
                longp;

            for (i = 0; i < 7; i++) {
              // make the regex if we don't have it already
              mom = createUTC([2000, 1]).day(i);
              minp = regexEscape(this.weekdaysMin(mom, ''));
              shortp = regexEscape(this.weekdaysShort(mom, ''));
              longp = regexEscape(this.weekdays(mom, ''));
              minPieces.push(minp);
              shortPieces.push(shortp);
              longPieces.push(longp);
              mixedPieces.push(minp);
              mixedPieces.push(shortp);
              mixedPieces.push(longp);
            } // Sorting makes sure if one weekday (or abbr) is a prefix of another it
            // will match the longer piece.


            minPieces.sort(cmpLenRev);
            shortPieces.sort(cmpLenRev);
            longPieces.sort(cmpLenRev);
            mixedPieces.sort(cmpLenRev);
            this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
            this._weekdaysShortRegex = this._weekdaysRegex;
            this._weekdaysMinRegex = this._weekdaysRegex;
            this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
            this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
            this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');
          } // FORMATTING


          function hFormat() {
            return this.hours() % 12 || 12;
          }

          function kFormat() {
            return this.hours() || 24;
          }

          addFormatToken('H', ['HH', 2], 0, 'hour');
          addFormatToken('h', ['hh', 2], 0, hFormat);
          addFormatToken('k', ['kk', 2], 0, kFormat);
          addFormatToken('hmm', 0, 0, function () {
            return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
          });
          addFormatToken('hmmss', 0, 0, function () {
            return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);
          });
          addFormatToken('Hmm', 0, 0, function () {
            return '' + this.hours() + zeroFill(this.minutes(), 2);
          });
          addFormatToken('Hmmss', 0, 0, function () {
            return '' + this.hours() + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);
          });

          function meridiem(token, lowercase) {
            addFormatToken(token, 0, 0, function () {
              return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);
            });
          }

          meridiem('a', true);
          meridiem('A', false); // ALIASES

          addUnitAlias('hour', 'h'); // PRIORITY

          addUnitPriority('hour', 13); // PARSING

          function matchMeridiem(isStrict, locale) {
            return locale._meridiemParse;
          }

          addRegexToken('a', matchMeridiem);
          addRegexToken('A', matchMeridiem);
          addRegexToken('H', match1to2);
          addRegexToken('h', match1to2);
          addRegexToken('k', match1to2);
          addRegexToken('HH', match1to2, match2);
          addRegexToken('hh', match1to2, match2);
          addRegexToken('kk', match1to2, match2);
          addRegexToken('hmm', match3to4);
          addRegexToken('hmmss', match5to6);
          addRegexToken('Hmm', match3to4);
          addRegexToken('Hmmss', match5to6);
          addParseToken(['H', 'HH'], HOUR);
          addParseToken(['k', 'kk'], function (input, array, config) {
            var kInput = toInt(input);
            array[HOUR] = kInput === 24 ? 0 : kInput;
          });
          addParseToken(['a', 'A'], function (input, array, config) {
            config._isPm = config._locale.isPM(input);
            config._meridiem = input;
          });
          addParseToken(['h', 'hh'], function (input, array, config) {
            array[HOUR] = toInt(input);
            getParsingFlags(config).bigHour = true;
          });
          addParseToken('hmm', function (input, array, config) {
            var pos = input.length - 2;
            array[HOUR] = toInt(input.substr(0, pos));
            array[MINUTE] = toInt(input.substr(pos));
            getParsingFlags(config).bigHour = true;
          });
          addParseToken('hmmss', function (input, array, config) {
            var pos1 = input.length - 4,
                pos2 = input.length - 2;
            array[HOUR] = toInt(input.substr(0, pos1));
            array[MINUTE] = toInt(input.substr(pos1, 2));
            array[SECOND] = toInt(input.substr(pos2));
            getParsingFlags(config).bigHour = true;
          });
          addParseToken('Hmm', function (input, array, config) {
            var pos = input.length - 2;
            array[HOUR] = toInt(input.substr(0, pos));
            array[MINUTE] = toInt(input.substr(pos));
          });
          addParseToken('Hmmss', function (input, array, config) {
            var pos1 = input.length - 4,
                pos2 = input.length - 2;
            array[HOUR] = toInt(input.substr(0, pos1));
            array[MINUTE] = toInt(input.substr(pos1, 2));
            array[SECOND] = toInt(input.substr(pos2));
          }); // LOCALES

          function localeIsPM(input) {
            // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
            // Using charAt should be more compatible.
            return (input + '').toLowerCase().charAt(0) === 'p';
          }

          var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i,
              // Setting the hour should keep the time, because the user explicitly
          // specified which hour they want. So trying to maintain the same hour (in
          // a new timezone) makes sense. Adding/subtracting hours does not follow
          // this rule.
          getSetHour = makeGetSet('Hours', true);

          function localeMeridiem(hours, minutes, isLower) {
            if (hours > 11) {
              return isLower ? 'pm' : 'PM';
            } else {
              return isLower ? 'am' : 'AM';
            }
          }

          var baseConfig = {
            calendar: defaultCalendar,
            longDateFormat: defaultLongDateFormat,
            invalidDate: defaultInvalidDate,
            ordinal: defaultOrdinal,
            dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
            relativeTime: defaultRelativeTime,
            months: defaultLocaleMonths,
            monthsShort: defaultLocaleMonthsShort,
            week: defaultLocaleWeek,
            weekdays: defaultLocaleWeekdays,
            weekdaysMin: defaultLocaleWeekdaysMin,
            weekdaysShort: defaultLocaleWeekdaysShort,
            meridiemParse: defaultLocaleMeridiemParse
          }; // internal storage for locale config files

          var locales = {},
              localeFamilies = {},
              globalLocale;

          function commonPrefix(arr1, arr2) {
            var i,
                minl = Math.min(arr1.length, arr2.length);

            for (i = 0; i < minl; i += 1) {
              if (arr1[i] !== arr2[i]) {
                return i;
              }
            }

            return minl;
          }

          function normalizeLocale(key) {
            return key ? key.toLowerCase().replace('_', '-') : key;
          } // pick the locale from the array
          // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
          // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root


          function chooseLocale(names) {
            var i = 0,
                j,
                next,
                locale,
                split;

            while (i < names.length) {
              split = normalizeLocale(names[i]).split('-');
              j = split.length;
              next = normalizeLocale(names[i + 1]);
              next = next ? next.split('-') : null;

              while (j > 0) {
                locale = loadLocale(split.slice(0, j).join('-'));

                if (locale) {
                  return locale;
                }

                if (next && next.length >= j && commonPrefix(split, next) >= j - 1) {
                  //the next array item is better than a shallower substring of this one
                  break;
                }

                j--;
              }

              i++;
            }

            return globalLocale;
          }

          function loadLocale(name) {
            var oldLocale = null,
                aliasedRequire; // TODO: Find a better way to register and load all the locales in Node

            if (locales[name] === undefined && typeof module !== 'undefined' && module && module.exports) {
              try {
                oldLocale = globalLocale._abbr;
                aliasedRequire = require;

                __webpack_require__("RnhZ")("./" + name);

                getSetGlobalLocale(oldLocale);
              } catch (e) {
                // mark as not found to avoid repeating expensive file require call causing high CPU
                // when trying to find en-US, en_US, en-us for every format call
                locales[name] = null; // null means not found
              }
            }

            return locales[name];
          } // This function will load locale and then set the global locale.  If
          // no arguments are passed in, it will simply return the current global
          // locale key.


          function getSetGlobalLocale(key, values) {
            var data;

            if (key) {
              if (isUndefined(values)) {
                data = getLocale(key);
              } else {
                data = defineLocale(key, values);
              }

              if (data) {
                // moment.duration._locale = moment._locale = data;
                globalLocale = data;
              } else {
                if (typeof console !== 'undefined' && console.warn) {
                  //warn user if arguments are passed but the locale could not be set
                  console.warn('Locale ' + key + ' not found. Did you forget to load it?');
                }
              }
            }

            return globalLocale._abbr;
          }

          function defineLocale(name, config) {
            if (config !== null) {
              var locale,
                  parentConfig = baseConfig;
              config.abbr = name;

              if (locales[name] != null) {
                deprecateSimple('defineLocaleOverride', 'use moment.updateLocale(localeName, config) to change ' + 'an existing locale. moment.defineLocale(localeName, ' + 'config) should only be used for creating a new locale ' + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');
                parentConfig = locales[name]._config;
              } else if (config.parentLocale != null) {
                if (locales[config.parentLocale] != null) {
                  parentConfig = locales[config.parentLocale]._config;
                } else {
                  locale = loadLocale(config.parentLocale);

                  if (locale != null) {
                    parentConfig = locale._config;
                  } else {
                    if (!localeFamilies[config.parentLocale]) {
                      localeFamilies[config.parentLocale] = [];
                    }

                    localeFamilies[config.parentLocale].push({
                      name: name,
                      config: config
                    });
                    return null;
                  }
                }
              }

              locales[name] = new Locale(mergeConfigs(parentConfig, config));

              if (localeFamilies[name]) {
                localeFamilies[name].forEach(function (x) {
                  defineLocale(x.name, x.config);
                });
              } // backwards compat for now: also set the locale
              // make sure we set the locale AFTER all child locales have been
              // created, so we won't end up with the child locale set.


              getSetGlobalLocale(name);
              return locales[name];
            } else {
              // useful for testing
              delete locales[name];
              return null;
            }
          }

          function updateLocale(name, config) {
            if (config != null) {
              var locale,
                  tmpLocale,
                  parentConfig = baseConfig;

              if (locales[name] != null && locales[name].parentLocale != null) {
                // Update existing child locale in-place to avoid memory-leaks
                locales[name].set(mergeConfigs(locales[name]._config, config));
              } else {
                // MERGE
                tmpLocale = loadLocale(name);

                if (tmpLocale != null) {
                  parentConfig = tmpLocale._config;
                }

                config = mergeConfigs(parentConfig, config);

                if (tmpLocale == null) {
                  // updateLocale is called for creating a new locale
                  // Set abbr so it will have a name (getters return
                  // undefined otherwise).
                  config.abbr = name;
                }

                locale = new Locale(config);
                locale.parentLocale = locales[name];
                locales[name] = locale;
              } // backwards compat for now: also set the locale


              getSetGlobalLocale(name);
            } else {
              // pass null for config to unupdate, useful for tests
              if (locales[name] != null) {
                if (locales[name].parentLocale != null) {
                  locales[name] = locales[name].parentLocale;

                  if (name === getSetGlobalLocale()) {
                    getSetGlobalLocale(name);
                  }
                } else if (locales[name] != null) {
                  delete locales[name];
                }
              }
            }

            return locales[name];
          } // returns locale data


          function getLocale(key) {
            var locale;

            if (key && key._locale && key._locale._abbr) {
              key = key._locale._abbr;
            }

            if (!key) {
              return globalLocale;
            }

            if (!isArray(key)) {
              //short-circuit everything else
              locale = loadLocale(key);

              if (locale) {
                return locale;
              }

              key = [key];
            }

            return chooseLocale(key);
          }

          function listLocales() {
            return keys(locales);
          }

          function checkOverflow(m) {
            var overflow,
                a = m._a;

            if (a && getParsingFlags(m).overflow === -2) {
              overflow = a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : a[HOUR] < 0 || a[HOUR] > 24 || a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0) ? HOUR : a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : -1;

              if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
                overflow = DATE;
              }

              if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
                overflow = WEEK;
              }

              if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
                overflow = WEEKDAY;
              }

              getParsingFlags(m).overflow = overflow;
            }

            return m;
          } // iso 8601 regex
          // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)


          var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
              basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
              tzRegex = /Z|[+-]\d\d(?::?\d\d)?/,
              isoDates = [['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], ['GGGG-[W]WW', /\d{4}-W\d\d/, false], ['YYYY-DDD', /\d{4}-\d{3}/], ['YYYY-MM', /\d{4}-\d\d/, false], ['YYYYYYMMDD', /[+-]\d{10}/], ['YYYYMMDD', /\d{8}/], ['GGGG[W]WWE', /\d{4}W\d{3}/], ['GGGG[W]WW', /\d{4}W\d{2}/, false], ['YYYYDDD', /\d{7}/], ['YYYYMM', /\d{6}/, false], ['YYYY', /\d{4}/, false]],
              // iso time formats and regexes
          isoTimes = [['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], ['HH:mm:ss', /\d\d:\d\d:\d\d/], ['HH:mm', /\d\d:\d\d/], ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], ['HHmmss', /\d\d\d\d\d\d/], ['HHmm', /\d\d\d\d/], ['HH', /\d\d/]],
              aspNetJsonRegex = /^\/?Date\((-?\d+)/i,
              // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
          rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,
              obsOffsets = {
            UT: 0,
            GMT: 0,
            EDT: -4 * 60,
            EST: -5 * 60,
            CDT: -5 * 60,
            CST: -6 * 60,
            MDT: -6 * 60,
            MST: -7 * 60,
            PDT: -7 * 60,
            PST: -8 * 60
          }; // date from iso format

          function configFromISO(config) {
            var i,
                l,
                string = config._i,
                match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
                allowTime,
                dateFormat,
                timeFormat,
                tzFormat;

            if (match) {
              getParsingFlags(config).iso = true;

              for (i = 0, l = isoDates.length; i < l; i++) {
                if (isoDates[i][1].exec(match[1])) {
                  dateFormat = isoDates[i][0];
                  allowTime = isoDates[i][2] !== false;
                  break;
                }
              }

              if (dateFormat == null) {
                config._isValid = false;
                return;
              }

              if (match[3]) {
                for (i = 0, l = isoTimes.length; i < l; i++) {
                  if (isoTimes[i][1].exec(match[3])) {
                    // match[2] should be 'T' or space
                    timeFormat = (match[2] || ' ') + isoTimes[i][0];
                    break;
                  }
                }

                if (timeFormat == null) {
                  config._isValid = false;
                  return;
                }
              }

              if (!allowTime && timeFormat != null) {
                config._isValid = false;
                return;
              }

              if (match[4]) {
                if (tzRegex.exec(match[4])) {
                  tzFormat = 'Z';
                } else {
                  config._isValid = false;
                  return;
                }
              }

              config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
              configFromStringAndFormat(config);
            } else {
              config._isValid = false;
            }
          }

          function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {
            var result = [untruncateYear(yearStr), defaultLocaleMonthsShort.indexOf(monthStr), parseInt(dayStr, 10), parseInt(hourStr, 10), parseInt(minuteStr, 10)];

            if (secondStr) {
              result.push(parseInt(secondStr, 10));
            }

            return result;
          }

          function untruncateYear(yearStr) {
            var year = parseInt(yearStr, 10);

            if (year <= 49) {
              return 2000 + year;
            } else if (year <= 999) {
              return 1900 + year;
            }

            return year;
          }

          function preprocessRFC2822(s) {
            // Remove comments and folding whitespace and replace multiple-spaces with a single space
            return s.replace(/\([^)]*\)|[\n\t]/g, ' ').replace(/(\s\s+)/g, ' ').replace(/^\s\s*/, '').replace(/\s\s*$/, '');
          }

          function checkWeekday(weekdayStr, parsedInput, config) {
            if (weekdayStr) {
              // TODO: Replace the vanilla JS Date object with an independent day-of-week check.
              var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
                  weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();

              if (weekdayProvided !== weekdayActual) {
                getParsingFlags(config).weekdayMismatch = true;
                config._isValid = false;
                return false;
              }
            }

            return true;
          }

          function calculateOffset(obsOffset, militaryOffset, numOffset) {
            if (obsOffset) {
              return obsOffsets[obsOffset];
            } else if (militaryOffset) {
              // the only allowed military tz is Z
              return 0;
            } else {
              var hm = parseInt(numOffset, 10),
                  m = hm % 100,
                  h = (hm - m) / 100;
              return h * 60 + m;
            }
          } // date and time from ref 2822 format


          function configFromRFC2822(config) {
            var match = rfc2822.exec(preprocessRFC2822(config._i)),
                parsedArray;

            if (match) {
              parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);

              if (!checkWeekday(match[1], parsedArray, config)) {
                return;
              }

              config._a = parsedArray;
              config._tzm = calculateOffset(match[8], match[9], match[10]);
              config._d = createUTCDate.apply(null, config._a);

              config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);

              getParsingFlags(config).rfc2822 = true;
            } else {
              config._isValid = false;
            }
          } // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict


          function configFromString(config) {
            var matched = aspNetJsonRegex.exec(config._i);

            if (matched !== null) {
              config._d = new Date(+matched[1]);
              return;
            }

            configFromISO(config);

            if (config._isValid === false) {
              delete config._isValid;
            } else {
              return;
            }

            configFromRFC2822(config);

            if (config._isValid === false) {
              delete config._isValid;
            } else {
              return;
            }

            if (config._strict) {
              config._isValid = false;
            } else {
              // Final attempt, use Input Fallback
              hooks.createFromInputFallback(config);
            }
          }

          hooks.createFromInputFallback = deprecate('value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.', function (config) {
            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
          }); // Pick the first defined of two or three arguments.

          function defaults(a, b, c) {
            if (a != null) {
              return a;
            }

            if (b != null) {
              return b;
            }

            return c;
          }

          function currentDateArray(config) {
            // hooks is actually the exported moment object
            var nowValue = new Date(hooks.now());

            if (config._useUTC) {
              return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];
            }

            return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
          } // convert an array to a date.
          // the array should mirror the parameters below
          // note: all values past the year are optional and will default to the lowest possible value.
          // [year, month, day , hour, minute, second, millisecond]


          function configFromArray(config) {
            var i,
                date,
                input = [],
                currentDate,
                expectedWeekday,
                yearToUse;

            if (config._d) {
              return;
            }

            currentDate = currentDateArray(config); //compute day of the year from weeks and weekdays

            if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
              dayOfYearFromWeekInfo(config);
            } //if the day of the year is set, figure out what it is


            if (config._dayOfYear != null) {
              yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);

              if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {
                getParsingFlags(config)._overflowDayOfYear = true;
              }

              date = createUTCDate(yearToUse, 0, config._dayOfYear);
              config._a[MONTH] = date.getUTCMonth();
              config._a[DATE] = date.getUTCDate();
            } // Default to current date.
            // * if no year, month, day of month are given, default to today
            // * if day of month is given, default month and year
            // * if month is given, default only year
            // * if year is given, don't default anything


            for (i = 0; i < 3 && config._a[i] == null; ++i) {
              config._a[i] = input[i] = currentDate[i];
            } // Zero out whatever was not defaulted, including time


            for (; i < 7; i++) {
              config._a[i] = input[i] = config._a[i] == null ? i === 2 ? 1 : 0 : config._a[i];
            } // Check for 24:00:00.000


            if (config._a[HOUR] === 24 && config._a[MINUTE] === 0 && config._a[SECOND] === 0 && config._a[MILLISECOND] === 0) {
              config._nextDay = true;
              config._a[HOUR] = 0;
            }

            config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);
            expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay(); // Apply timezone offset from input. The actual utcOffset can be changed
            // with parseZone.

            if (config._tzm != null) {
              config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
            }

            if (config._nextDay) {
              config._a[HOUR] = 24;
            } // check for mismatching day of week


            if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {
              getParsingFlags(config).weekdayMismatch = true;
            }
          }

          function dayOfYearFromWeekInfo(config) {
            var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;
            w = config._w;

            if (w.GG != null || w.W != null || w.E != null) {
              dow = 1;
              doy = 4; // TODO: We need to take the current isoWeekYear, but that depends on
              // how we interpret now (local, utc, fixed offset). So create
              // a now version of current config (take local/utc/offset flags, and
              // create now).

              weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);
              week = defaults(w.W, 1);
              weekday = defaults(w.E, 1);

              if (weekday < 1 || weekday > 7) {
                weekdayOverflow = true;
              }
            } else {
              dow = config._locale._week.dow;
              doy = config._locale._week.doy;
              curWeek = weekOfYear(createLocal(), dow, doy);
              weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); // Default to current week.

              week = defaults(w.w, curWeek.week);

              if (w.d != null) {
                // weekday -- low day numbers are considered next week
                weekday = w.d;

                if (weekday < 0 || weekday > 6) {
                  weekdayOverflow = true;
                }
              } else if (w.e != null) {
                // local weekday -- counting starts from beginning of week
                weekday = w.e + dow;

                if (w.e < 0 || w.e > 6) {
                  weekdayOverflow = true;
                }
              } else {
                // default to beginning of week
                weekday = dow;
              }
            }

            if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
              getParsingFlags(config)._overflowWeeks = true;
            } else if (weekdayOverflow != null) {
              getParsingFlags(config)._overflowWeekday = true;
            } else {
              temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
              config._a[YEAR] = temp.year;
              config._dayOfYear = temp.dayOfYear;
            }
          } // constant that refers to the ISO standard


          hooks.ISO_8601 = function () {}; // constant that refers to the RFC 2822 form


          hooks.RFC_2822 = function () {}; // date from string and format string


          function configFromStringAndFormat(config) {
            // TODO: Move this to another part of the creation flow to prevent circular deps
            if (config._f === hooks.ISO_8601) {
              configFromISO(config);
              return;
            }

            if (config._f === hooks.RFC_2822) {
              configFromRFC2822(config);
              return;
            }

            config._a = [];
            getParsingFlags(config).empty = true; // This array is used to make a Date, either with `new Date` or `Date.UTC`

            var string = '' + config._i,
                i,
                parsedInput,
                tokens,
                token,
                skipped,
                stringLength = string.length,
                totalParsedInputLength = 0,
                era;
            tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];

            for (i = 0; i < tokens.length; i++) {
              token = tokens[i];
              parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];

              if (parsedInput) {
                skipped = string.substr(0, string.indexOf(parsedInput));

                if (skipped.length > 0) {
                  getParsingFlags(config).unusedInput.push(skipped);
                }

                string = string.slice(string.indexOf(parsedInput) + parsedInput.length);
                totalParsedInputLength += parsedInput.length;
              } // don't parse if it's not a known token


              if (formatTokenFunctions[token]) {
                if (parsedInput) {
                  getParsingFlags(config).empty = false;
                } else {
                  getParsingFlags(config).unusedTokens.push(token);
                }

                addTimeToArrayFromToken(token, parsedInput, config);
              } else if (config._strict && !parsedInput) {
                getParsingFlags(config).unusedTokens.push(token);
              }
            } // add remaining unparsed input length to the string


            getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;

            if (string.length > 0) {
              getParsingFlags(config).unusedInput.push(string);
            } // clear _12h flag if hour is <= 12


            if (config._a[HOUR] <= 12 && getParsingFlags(config).bigHour === true && config._a[HOUR] > 0) {
              getParsingFlags(config).bigHour = undefined;
            }

            getParsingFlags(config).parsedDateParts = config._a.slice(0);
            getParsingFlags(config).meridiem = config._meridiem; // handle meridiem

            config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem); // handle era

            era = getParsingFlags(config).era;

            if (era !== null) {
              config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);
            }

            configFromArray(config);
            checkOverflow(config);
          }

          function meridiemFixWrap(locale, hour, meridiem) {
            var isPm;

            if (meridiem == null) {
              // nothing to do
              return hour;
            }

            if (locale.meridiemHour != null) {
              return locale.meridiemHour(hour, meridiem);
            } else if (locale.isPM != null) {
              // Fallback
              isPm = locale.isPM(meridiem);

              if (isPm && hour < 12) {
                hour += 12;
              }

              if (!isPm && hour === 12) {
                hour = 0;
              }

              return hour;
            } else {
              // this is not supposed to happen
              return hour;
            }
          } // date from string and array of format strings


          function configFromStringAndArray(config) {
            var tempConfig,
                bestMoment,
                scoreToBeat,
                i,
                currentScore,
                validFormatFound,
                bestFormatIsValid = false;

            if (config._f.length === 0) {
              getParsingFlags(config).invalidFormat = true;
              config._d = new Date(NaN);
              return;
            }

            for (i = 0; i < config._f.length; i++) {
              currentScore = 0;
              validFormatFound = false;
              tempConfig = copyConfig({}, config);

              if (config._useUTC != null) {
                tempConfig._useUTC = config._useUTC;
              }

              tempConfig._f = config._f[i];
              configFromStringAndFormat(tempConfig);

              if (isValid(tempConfig)) {
                validFormatFound = true;
              } // if there is any input that was not parsed add a penalty for that format


              currentScore += getParsingFlags(tempConfig).charsLeftOver; //or tokens

              currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
              getParsingFlags(tempConfig).score = currentScore;

              if (!bestFormatIsValid) {
                if (scoreToBeat == null || currentScore < scoreToBeat || validFormatFound) {
                  scoreToBeat = currentScore;
                  bestMoment = tempConfig;

                  if (validFormatFound) {
                    bestFormatIsValid = true;
                  }
                }
              } else {
                if (currentScore < scoreToBeat) {
                  scoreToBeat = currentScore;
                  bestMoment = tempConfig;
                }
              }
            }

            extend(config, bestMoment || tempConfig);
          }

          function configFromObject(config) {
            if (config._d) {
              return;
            }

            var i = normalizeObjectUnits(config._i),
                dayOrDate = i.day === undefined ? i.date : i.day;
            config._a = map([i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond], function (obj) {
              return obj && parseInt(obj, 10);
            });
            configFromArray(config);
          }

          function createFromConfig(config) {
            var res = new Moment(checkOverflow(prepareConfig(config)));

            if (res._nextDay) {
              // Adding is smart enough around DST
              res.add(1, 'd');
              res._nextDay = undefined;
            }

            return res;
          }

          function prepareConfig(config) {
            var input = config._i,
                format = config._f;
            config._locale = config._locale || getLocale(config._l);

            if (input === null || format === undefined && input === '') {
              return createInvalid({
                nullInput: true
              });
            }

            if (typeof input === 'string') {
              config._i = input = config._locale.preparse(input);
            }

            if (isMoment(input)) {
              return new Moment(checkOverflow(input));
            } else if (isDate(input)) {
              config._d = input;
            } else if (isArray(format)) {
              configFromStringAndArray(config);
            } else if (format) {
              configFromStringAndFormat(config);
            } else {
              configFromInput(config);
            }

            if (!isValid(config)) {
              config._d = null;
            }

            return config;
          }

          function configFromInput(config) {
            var input = config._i;

            if (isUndefined(input)) {
              config._d = new Date(hooks.now());
            } else if (isDate(input)) {
              config._d = new Date(input.valueOf());
            } else if (typeof input === 'string') {
              configFromString(config);
            } else if (isArray(input)) {
              config._a = map(input.slice(0), function (obj) {
                return parseInt(obj, 10);
              });
              configFromArray(config);
            } else if (isObject(input)) {
              configFromObject(config);
            } else if (isNumber(input)) {
              // from milliseconds
              config._d = new Date(input);
            } else {
              hooks.createFromInputFallback(config);
            }
          }

          function createLocalOrUTC(input, format, locale, strict, isUTC) {
            var c = {};

            if (format === true || format === false) {
              strict = format;
              format = undefined;
            }

            if (locale === true || locale === false) {
              strict = locale;
              locale = undefined;
            }

            if (isObject(input) && isObjectEmpty(input) || isArray(input) && input.length === 0) {
              input = undefined;
            } // object construction must be done this way.
            // https://github.com/moment/moment/issues/1423


            c._isAMomentObject = true;
            c._useUTC = c._isUTC = isUTC;
            c._l = locale;
            c._i = input;
            c._f = format;
            c._strict = strict;
            return createFromConfig(c);
          }

          function createLocal(input, format, locale, strict) {
            return createLocalOrUTC(input, format, locale, strict, false);
          }

          var prototypeMin = deprecate('moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', function () {
            var other = createLocal.apply(null, arguments);

            if (this.isValid() && other.isValid()) {
              return other < this ? this : other;
            } else {
              return createInvalid();
            }
          }),
              prototypeMax = deprecate('moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', function () {
            var other = createLocal.apply(null, arguments);

            if (this.isValid() && other.isValid()) {
              return other > this ? this : other;
            } else {
              return createInvalid();
            }
          }); // Pick a moment m from moments so that m[fn](other) is true for all
          // other. This relies on the function fn to be transitive.
          //
          // moments should either be an array of moment objects or an array, whose
          // first element is an array of moment objects.

          function pickBy(fn, moments) {
            var res, i;

            if (moments.length === 1 && isArray(moments[0])) {
              moments = moments[0];
            }

            if (!moments.length) {
              return createLocal();
            }

            res = moments[0];

            for (i = 1; i < moments.length; ++i) {
              if (!moments[i].isValid() || moments[i][fn](res)) {
                res = moments[i];
              }
            }

            return res;
          } // TODO: Use [].sort instead?


          function min() {
            var args = [].slice.call(arguments, 0);
            return pickBy('isBefore', args);
          }

          function max() {
            var args = [].slice.call(arguments, 0);
            return pickBy('isAfter', args);
          }

          var now = function now() {
            return Date.now ? Date.now() : +new Date();
          };

          var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];

          function isDurationValid(m) {
            var key,
                unitHasDecimal = false,
                i;

            for (key in m) {
              if (hasOwnProp(m, key) && !(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {
                return false;
              }
            }

            for (i = 0; i < ordering.length; ++i) {
              if (m[ordering[i]]) {
                if (unitHasDecimal) {
                  return false; // only allow non-integers for smallest unit
                }

                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
                  unitHasDecimal = true;
                }
              }
            }

            return true;
          }

          function isValid$1() {
            return this._isValid;
          }

          function createInvalid$1() {
            return createDuration(NaN);
          }

          function Duration(duration) {
            var normalizedInput = normalizeObjectUnits(duration),
                years = normalizedInput.year || 0,
                quarters = normalizedInput.quarter || 0,
                months = normalizedInput.month || 0,
                weeks = normalizedInput.week || normalizedInput.isoWeek || 0,
                days = normalizedInput.day || 0,
                hours = normalizedInput.hour || 0,
                minutes = normalizedInput.minute || 0,
                seconds = normalizedInput.second || 0,
                milliseconds = normalizedInput.millisecond || 0;
            this._isValid = isDurationValid(normalizedInput); // representation for dateAddRemove

            this._milliseconds = +milliseconds + seconds * 1e3 + // 1000
            minutes * 6e4 + // 1000 * 60
            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
            // Because of dateAddRemove treats 24 hours as different from a
            // day when working around DST, we need to store them separately

            this._days = +days + weeks * 7; // It is impossible to translate months into days without knowing
            // which months you are are talking about, so we have to store
            // it separately.

            this._months = +months + quarters * 3 + years * 12;
            this._data = {};
            this._locale = getLocale();

            this._bubble();
          }

          function isDuration(obj) {
            return obj instanceof Duration;
          }

          function absRound(number) {
            if (number < 0) {
              return Math.round(-1 * number) * -1;
            } else {
              return Math.round(number);
            }
          } // compare two arrays, return the number of differences


          function compareArrays(array1, array2, dontConvert) {
            var len = Math.min(array1.length, array2.length),
                lengthDiff = Math.abs(array1.length - array2.length),
                diffs = 0,
                i;

            for (i = 0; i < len; i++) {
              if (dontConvert && array1[i] !== array2[i] || !dontConvert && toInt(array1[i]) !== toInt(array2[i])) {
                diffs++;
              }
            }

            return diffs + lengthDiff;
          } // FORMATTING


          function offset(token, separator) {
            addFormatToken(token, 0, 0, function () {
              var offset = this.utcOffset(),
                  sign = '+';

              if (offset < 0) {
                offset = -offset;
                sign = '-';
              }

              return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~offset % 60, 2);
            });
          }

          offset('Z', ':');
          offset('ZZ', ''); // PARSING

          addRegexToken('Z', matchShortOffset);
          addRegexToken('ZZ', matchShortOffset);
          addParseToken(['Z', 'ZZ'], function (input, array, config) {
            config._useUTC = true;
            config._tzm = offsetFromString(matchShortOffset, input);
          }); // HELPERS
          // timezone chunker
          // '+10:00' > ['10',  '00']
          // '-1530'  > ['-15', '30']

          var chunkOffset = /([\+\-]|\d\d)/gi;

          function offsetFromString(matcher, string) {
            var matches = (string || '').match(matcher),
                chunk,
                parts,
                minutes;

            if (matches === null) {
              return null;
            }

            chunk = matches[matches.length - 1] || [];
            parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
            minutes = +(parts[1] * 60) + toInt(parts[2]);
            return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;
          } // Return a moment from input, that is local/utc/zone equivalent to model.


          function cloneWithOffset(input, model) {
            var res, diff;

            if (model._isUTC) {
              res = model.clone();
              diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf(); // Use low-level api, because this fn is low-level api.

              res._d.setTime(res._d.valueOf() + diff);

              hooks.updateOffset(res, false);
              return res;
            } else {
              return createLocal(input).local();
            }
          }

          function getDateOffset(m) {
            // On Firefox.24 Date#getTimezoneOffset returns a floating point.
            // https://github.com/moment/moment/pull/1871
            return -Math.round(m._d.getTimezoneOffset());
          } // HOOKS
          // This function will be called whenever a moment is mutated.
          // It is intended to keep the offset in sync with the timezone.


          hooks.updateOffset = function () {}; // MOMENTS
          // keepLocalTime = true means only change the timezone, without
          // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
          // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
          // +0200, so we adjust the time as needed, to be valid.
          //
          // Keeping the time actually adds/subtracts (one hour)
          // from the actual represented time. That is why we call updateOffset
          // a second time. In case it wants us to change the offset again
          // _changeInProgress == true case, then we have to adjust, because
          // there is no such time in the given timezone.


          function getSetOffset(input, keepLocalTime, keepMinutes) {
            var offset = this._offset || 0,
                localAdjust;

            if (!this.isValid()) {
              return input != null ? this : NaN;
            }

            if (input != null) {
              if (typeof input === 'string') {
                input = offsetFromString(matchShortOffset, input);

                if (input === null) {
                  return this;
                }
              } else if (Math.abs(input) < 16 && !keepMinutes) {
                input = input * 60;
              }

              if (!this._isUTC && keepLocalTime) {
                localAdjust = getDateOffset(this);
              }

              this._offset = input;
              this._isUTC = true;

              if (localAdjust != null) {
                this.add(localAdjust, 'm');
              }

              if (offset !== input) {
                if (!keepLocalTime || this._changeInProgress) {
                  addSubtract(this, createDuration(input - offset, 'm'), 1, false);
                } else if (!this._changeInProgress) {
                  this._changeInProgress = true;
                  hooks.updateOffset(this, true);
                  this._changeInProgress = null;
                }
              }

              return this;
            } else {
              return this._isUTC ? offset : getDateOffset(this);
            }
          }

          function getSetZone(input, keepLocalTime) {
            if (input != null) {
              if (typeof input !== 'string') {
                input = -input;
              }

              this.utcOffset(input, keepLocalTime);
              return this;
            } else {
              return -this.utcOffset();
            }
          }

          function setOffsetToUTC(keepLocalTime) {
            return this.utcOffset(0, keepLocalTime);
          }

          function setOffsetToLocal(keepLocalTime) {
            if (this._isUTC) {
              this.utcOffset(0, keepLocalTime);
              this._isUTC = false;

              if (keepLocalTime) {
                this.subtract(getDateOffset(this), 'm');
              }
            }

            return this;
          }

          function setOffsetToParsedOffset() {
            if (this._tzm != null) {
              this.utcOffset(this._tzm, false, true);
            } else if (typeof this._i === 'string') {
              var tZone = offsetFromString(matchOffset, this._i);

              if (tZone != null) {
                this.utcOffset(tZone);
              } else {
                this.utcOffset(0, true);
              }
            }

            return this;
          }

          function hasAlignedHourOffset(input) {
            if (!this.isValid()) {
              return false;
            }

            input = input ? createLocal(input).utcOffset() : 0;
            return (this.utcOffset() - input) % 60 === 0;
          }

          function isDaylightSavingTime() {
            return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset();
          }

          function isDaylightSavingTimeShifted() {
            if (!isUndefined(this._isDSTShifted)) {
              return this._isDSTShifted;
            }

            var c = {},
                other;
            copyConfig(c, this);
            c = prepareConfig(c);

            if (c._a) {
              other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
              this._isDSTShifted = this.isValid() && compareArrays(c._a, other.toArray()) > 0;
            } else {
              this._isDSTShifted = false;
            }

            return this._isDSTShifted;
          }

          function isLocal() {
            return this.isValid() ? !this._isUTC : false;
          }

          function isUtcOffset() {
            return this.isValid() ? this._isUTC : false;
          }

          function isUtc() {
            return this.isValid() ? this._isUTC && this._offset === 0 : false;
          } // ASP.NET json date format regex


          var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,
              // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
          // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
          // and further modified to allow for strings containing both week and day
          isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;

          function createDuration(input, key) {
            var duration = input,
                // matching against regexp is expensive, do it on demand
            match = null,
                sign,
                ret,
                diffRes;

            if (isDuration(input)) {
              duration = {
                ms: input._milliseconds,
                d: input._days,
                M: input._months
              };
            } else if (isNumber(input) || !isNaN(+input)) {
              duration = {};

              if (key) {
                duration[key] = +input;
              } else {
                duration.milliseconds = +input;
              }
            } else if (match = aspNetRegex.exec(input)) {
              sign = match[1] === '-' ? -1 : 1;
              duration = {
                y: 0,
                d: toInt(match[DATE]) * sign,
                h: toInt(match[HOUR]) * sign,
                m: toInt(match[MINUTE]) * sign,
                s: toInt(match[SECOND]) * sign,
                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match

              };
            } else if (match = isoRegex.exec(input)) {
              sign = match[1] === '-' ? -1 : 1;
              duration = {
                y: parseIso(match[2], sign),
                M: parseIso(match[3], sign),
                w: parseIso(match[4], sign),
                d: parseIso(match[5], sign),
                h: parseIso(match[6], sign),
                m: parseIso(match[7], sign),
                s: parseIso(match[8], sign)
              };
            } else if (duration == null) {
              // checks for null or undefined
              duration = {};
            } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {
              diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));
              duration = {};
              duration.ms = diffRes.milliseconds;
              duration.M = diffRes.months;
            }

            ret = new Duration(duration);

            if (isDuration(input) && hasOwnProp(input, '_locale')) {
              ret._locale = input._locale;
            }

            if (isDuration(input) && hasOwnProp(input, '_isValid')) {
              ret._isValid = input._isValid;
            }

            return ret;
          }

          createDuration.fn = Duration.prototype;
          createDuration.invalid = createInvalid$1;

          function parseIso(inp, sign) {
            // We'd normally use ~~inp for this, but unfortunately it also
            // converts floats to ints.
            // inp may be undefined, so careful calling replace on it.
            var res = inp && parseFloat(inp.replace(',', '.')); // apply sign while we're at it

            return (isNaN(res) ? 0 : res) * sign;
          }

          function positiveMomentsDifference(base, other) {
            var res = {};
            res.months = other.month() - base.month() + (other.year() - base.year()) * 12;

            if (base.clone().add(res.months, 'M').isAfter(other)) {
              --res.months;
            }

            res.milliseconds = +other - +base.clone().add(res.months, 'M');
            return res;
          }

          function momentsDifference(base, other) {
            var res;

            if (!(base.isValid() && other.isValid())) {
              return {
                milliseconds: 0,
                months: 0
              };
            }

            other = cloneWithOffset(other, base);

            if (base.isBefore(other)) {
              res = positiveMomentsDifference(base, other);
            } else {
              res = positiveMomentsDifference(other, base);
              res.milliseconds = -res.milliseconds;
              res.months = -res.months;
            }

            return res;
          } // TODO: remove 'name' arg after deprecation is removed


          function createAdder(direction, name) {
            return function (val, period) {
              var dur, tmp; //invert the arguments, but complain about it

              if (period !== null && !isNaN(+period)) {
                deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');
                tmp = val;
                val = period;
                period = tmp;
              }

              dur = createDuration(val, period);
              addSubtract(this, dur, direction);
              return this;
            };
          }

          function addSubtract(mom, duration, isAdding, updateOffset) {
            var milliseconds = duration._milliseconds,
                days = absRound(duration._days),
                months = absRound(duration._months);

            if (!mom.isValid()) {
              // No op
              return;
            }

            updateOffset = updateOffset == null ? true : updateOffset;

            if (months) {
              setMonth(mom, get(mom, 'Month') + months * isAdding);
            }

            if (days) {
              set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
            }

            if (milliseconds) {
              mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
            }

            if (updateOffset) {
              hooks.updateOffset(mom, days || months);
            }
          }

          var add = createAdder(1, 'add'),
              subtract = createAdder(-1, 'subtract');

          function isString(input) {
            return typeof input === 'string' || input instanceof String;
          } // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined


          function isMomentInput(input) {
            return isMoment(input) || isDate(input) || isString(input) || isNumber(input) || isNumberOrStringArray(input) || isMomentInputObject(input) || input === null || input === undefined;
          }

          function isMomentInputObject(input) {
            var objectTest = isObject(input) && !isObjectEmpty(input),
                propertyTest = false,
                properties = ['years', 'year', 'y', 'months', 'month', 'M', 'days', 'day', 'd', 'dates', 'date', 'D', 'hours', 'hour', 'h', 'minutes', 'minute', 'm', 'seconds', 'second', 's', 'milliseconds', 'millisecond', 'ms'],
                i,
                property;

            for (i = 0; i < properties.length; i += 1) {
              property = properties[i];
              propertyTest = propertyTest || hasOwnProp(input, property);
            }

            return objectTest && propertyTest;
          }

          function isNumberOrStringArray(input) {
            var arrayTest = isArray(input),
                dataTypeTest = false;

            if (arrayTest) {
              dataTypeTest = input.filter(function (item) {
                return !isNumber(item) && isString(input);
              }).length === 0;
            }

            return arrayTest && dataTypeTest;
          }

          function isCalendarSpec(input) {
            var objectTest = isObject(input) && !isObjectEmpty(input),
                propertyTest = false,
                properties = ['sameDay', 'nextDay', 'lastDay', 'nextWeek', 'lastWeek', 'sameElse'],
                i,
                property;

            for (i = 0; i < properties.length; i += 1) {
              property = properties[i];
              propertyTest = propertyTest || hasOwnProp(input, property);
            }

            return objectTest && propertyTest;
          }

          function getCalendarFormat(myMoment, now) {
            var diff = myMoment.diff(now, 'days', true);
            return diff < -6 ? 'sameElse' : diff < -1 ? 'lastWeek' : diff < 0 ? 'lastDay' : diff < 1 ? 'sameDay' : diff < 2 ? 'nextDay' : diff < 7 ? 'nextWeek' : 'sameElse';
          }

          function calendar$1(time, formats) {
            // Support for single parameter, formats only overload to the calendar function
            if (arguments.length === 1) {
              if (!arguments[0]) {
                time = undefined;
                formats = undefined;
              } else if (isMomentInput(arguments[0])) {
                time = arguments[0];
                formats = undefined;
              } else if (isCalendarSpec(arguments[0])) {
                formats = arguments[0];
                time = undefined;
              }
            } // We want to compare the start of today, vs this.
            // Getting start-of-today depends on whether we're local/utc/offset or not.


            var now = time || createLocal(),
                sod = cloneWithOffset(now, this).startOf('day'),
                format = hooks.calendarFormat(this, sod) || 'sameElse',
                output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);
            return this.format(output || this.localeData().calendar(format, this, createLocal(now)));
          }

          function clone() {
            return new Moment(this);
          }

          function isAfter(input, units) {
            var localInput = isMoment(input) ? input : createLocal(input);

            if (!(this.isValid() && localInput.isValid())) {
              return false;
            }

            units = normalizeUnits(units) || 'millisecond';

            if (units === 'millisecond') {
              return this.valueOf() > localInput.valueOf();
            } else {
              return localInput.valueOf() < this.clone().startOf(units).valueOf();
            }
          }

          function isBefore(input, units) {
            var localInput = isMoment(input) ? input : createLocal(input);

            if (!(this.isValid() && localInput.isValid())) {
              return false;
            }

            units = normalizeUnits(units) || 'millisecond';

            if (units === 'millisecond') {
              return this.valueOf() < localInput.valueOf();
            } else {
              return this.clone().endOf(units).valueOf() < localInput.valueOf();
            }
          }

          function isBetween(from, to, units, inclusivity) {
            var localFrom = isMoment(from) ? from : createLocal(from),
                localTo = isMoment(to) ? to : createLocal(to);

            if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
              return false;
            }

            inclusivity = inclusivity || '()';
            return (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) && (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));
          }

          function isSame(input, units) {
            var localInput = isMoment(input) ? input : createLocal(input),
                inputMs;

            if (!(this.isValid() && localInput.isValid())) {
              return false;
            }

            units = normalizeUnits(units) || 'millisecond';

            if (units === 'millisecond') {
              return this.valueOf() === localInput.valueOf();
            } else {
              inputMs = localInput.valueOf();
              return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();
            }
          }

          function isSameOrAfter(input, units) {
            return this.isSame(input, units) || this.isAfter(input, units);
          }

          function isSameOrBefore(input, units) {
            return this.isSame(input, units) || this.isBefore(input, units);
          }

          function diff(input, units, asFloat) {
            var that, zoneDelta, output;

            if (!this.isValid()) {
              return NaN;
            }

            that = cloneWithOffset(input, this);

            if (!that.isValid()) {
              return NaN;
            }

            zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
            units = normalizeUnits(units);

            switch (units) {
              case 'year':
                output = monthDiff(this, that) / 12;
                break;

              case 'month':
                output = monthDiff(this, that);
                break;

              case 'quarter':
                output = monthDiff(this, that) / 3;
                break;

              case 'second':
                output = (this - that) / 1e3;
                break;
              // 1000

              case 'minute':
                output = (this - that) / 6e4;
                break;
              // 1000 * 60

              case 'hour':
                output = (this - that) / 36e5;
                break;
              // 1000 * 60 * 60

              case 'day':
                output = (this - that - zoneDelta) / 864e5;
                break;
              // 1000 * 60 * 60 * 24, negate dst

              case 'week':
                output = (this - that - zoneDelta) / 6048e5;
                break;
              // 1000 * 60 * 60 * 24 * 7, negate dst

              default:
                output = this - that;
            }

            return asFloat ? output : absFloor(output);
          }

          function monthDiff(a, b) {
            if (a.date() < b.date()) {
              // end-of-month calculations work correct when the start month has more
              // days than the end month.
              return -monthDiff(b, a);
            } // difference in months


            var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),
                // b is in (anchor - 1 month, anchor + 1 month)
            anchor = a.clone().add(wholeMonthDiff, 'months'),
                anchor2,
                adjust;

            if (b - anchor < 0) {
              anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); // linear across the month

              adjust = (b - anchor) / (anchor - anchor2);
            } else {
              anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); // linear across the month

              adjust = (b - anchor) / (anchor2 - anchor);
            } //check for negative zero, return zero if negative zero


            return -(wholeMonthDiff + adjust) || 0;
          }

          hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
          hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';

          function toString() {
            return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
          }

          function toISOString(keepOffset) {
            if (!this.isValid()) {
              return null;
            }

            var utc = keepOffset !== true,
                m = utc ? this.clone().utc() : this;

            if (m.year() < 0 || m.year() > 9999) {
              return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');
            }

            if (isFunction(Date.prototype.toISOString)) {
              // native implementation is ~50x faster, use it when we can
              if (utc) {
                return this.toDate().toISOString();
              } else {
                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));
              }
            }

            return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');
          }
          /**
           * Return a human readable representation of a moment that can
           * also be evaluated to get a new moment which is the same
           *
           * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
           */


          function inspect() {
            if (!this.isValid()) {
              return 'moment.invalid(/* ' + this._i + ' */)';
            }

            var func = 'moment',
                zone = '',
                prefix,
                year,
                datetime,
                suffix;

            if (!this.isLocal()) {
              func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
              zone = 'Z';
            }

            prefix = '[' + func + '("]';
            year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';
            datetime = '-MM-DD[T]HH:mm:ss.SSS';
            suffix = zone + '[")]';
            return this.format(prefix + year + datetime + suffix);
          }

          function format(inputString) {
            if (!inputString) {
              inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;
            }

            var output = formatMoment(this, inputString);
            return this.localeData().postformat(output);
          }

          function from(time, withoutSuffix) {
            if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {
              return createDuration({
                to: this,
                from: time
              }).locale(this.locale()).humanize(!withoutSuffix);
            } else {
              return this.localeData().invalidDate();
            }
          }

          function fromNow(withoutSuffix) {
            return this.from(createLocal(), withoutSuffix);
          }

          function to(time, withoutSuffix) {
            if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {
              return createDuration({
                from: this,
                to: time
              }).locale(this.locale()).humanize(!withoutSuffix);
            } else {
              return this.localeData().invalidDate();
            }
          }

          function toNow(withoutSuffix) {
            return this.to(createLocal(), withoutSuffix);
          } // If passed a locale key, it will set the locale for this
          // instance.  Otherwise, it will return the locale configuration
          // variables for this instance.


          function locale(key) {
            var newLocaleData;

            if (key === undefined) {
              return this._locale._abbr;
            } else {
              newLocaleData = getLocale(key);

              if (newLocaleData != null) {
                this._locale = newLocaleData;
              }

              return this;
            }
          }

          var lang = deprecate('moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', function (key) {
            if (key === undefined) {
              return this.localeData();
            } else {
              return this.locale(key);
            }
          });

          function localeData() {
            return this._locale;
          }

          var MS_PER_SECOND = 1000,
              MS_PER_MINUTE = 60 * MS_PER_SECOND,
              MS_PER_HOUR = 60 * MS_PER_MINUTE,
              MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR; // actual modulo - handles negative numbers (for dates before 1970):

          function mod$1(dividend, divisor) {
            return (dividend % divisor + divisor) % divisor;
          }

          function localStartOfDate(y, m, d) {
            // the date constructor remaps years 0-99 to 1900-1999
            if (y < 100 && y >= 0) {
              // preserve leap years using a full 400 year cycle, then reset
              return new Date(y + 400, m, d) - MS_PER_400_YEARS;
            } else {
              return new Date(y, m, d).valueOf();
            }
          }

          function utcStartOfDate(y, m, d) {
            // Date.UTC remaps years 0-99 to 1900-1999
            if (y < 100 && y >= 0) {
              // preserve leap years using a full 400 year cycle, then reset
              return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
            } else {
              return Date.UTC(y, m, d);
            }
          }

          function startOf(units) {
            var time, startOfDate;
            units = normalizeUnits(units);

            if (units === undefined || units === 'millisecond' || !this.isValid()) {
              return this;
            }

            startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;

            switch (units) {
              case 'year':
                time = startOfDate(this.year(), 0, 1);
                break;

              case 'quarter':
                time = startOfDate(this.year(), this.month() - this.month() % 3, 1);
                break;

              case 'month':
                time = startOfDate(this.year(), this.month(), 1);
                break;

              case 'week':
                time = startOfDate(this.year(), this.month(), this.date() - this.weekday());
                break;

              case 'isoWeek':
                time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));
                break;

              case 'day':
              case 'date':
                time = startOfDate(this.year(), this.month(), this.date());
                break;

              case 'hour':
                time = this._d.valueOf();
                time -= mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);
                break;

              case 'minute':
                time = this._d.valueOf();
                time -= mod$1(time, MS_PER_MINUTE);
                break;

              case 'second':
                time = this._d.valueOf();
                time -= mod$1(time, MS_PER_SECOND);
                break;
            }

            this._d.setTime(time);

            hooks.updateOffset(this, true);
            return this;
          }

          function endOf(units) {
            var time, startOfDate;
            units = normalizeUnits(units);

            if (units === undefined || units === 'millisecond' || !this.isValid()) {
              return this;
            }

            startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;

            switch (units) {
              case 'year':
                time = startOfDate(this.year() + 1, 0, 1) - 1;
                break;

              case 'quarter':
                time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;
                break;

              case 'month':
                time = startOfDate(this.year(), this.month() + 1, 1) - 1;
                break;

              case 'week':
                time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;
                break;

              case 'isoWeek':
                time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1;
                break;

              case 'day':
              case 'date':
                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
                break;

              case 'hour':
                time = this._d.valueOf();
                time += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 1;
                break;

              case 'minute':
                time = this._d.valueOf();
                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;
                break;

              case 'second':
                time = this._d.valueOf();
                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;
                break;
            }

            this._d.setTime(time);

            hooks.updateOffset(this, true);
            return this;
          }

          function valueOf() {
            return this._d.valueOf() - (this._offset || 0) * 60000;
          }

          function unix() {
            return Math.floor(this.valueOf() / 1000);
          }

          function toDate() {
            return new Date(this.valueOf());
          }

          function toArray() {
            var m = this;
            return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];
          }

          function toObject() {
            var m = this;
            return {
              years: m.year(),
              months: m.month(),
              date: m.date(),
              hours: m.hours(),
              minutes: m.minutes(),
              seconds: m.seconds(),
              milliseconds: m.milliseconds()
            };
          }

          function toJSON() {
            // new Date(NaN).toJSON() === null
            return this.isValid() ? this.toISOString() : null;
          }

          function isValid$2() {
            return isValid(this);
          }

          function parsingFlags() {
            return extend({}, getParsingFlags(this));
          }

          function invalidAt() {
            return getParsingFlags(this).overflow;
          }

          function creationData() {
            return {
              input: this._i,
              format: this._f,
              locale: this._locale,
              isUTC: this._isUTC,
              strict: this._strict
            };
          }

          addFormatToken('N', 0, 0, 'eraAbbr');
          addFormatToken('NN', 0, 0, 'eraAbbr');
          addFormatToken('NNN', 0, 0, 'eraAbbr');
          addFormatToken('NNNN', 0, 0, 'eraName');
          addFormatToken('NNNNN', 0, 0, 'eraNarrow');
          addFormatToken('y', ['y', 1], 'yo', 'eraYear');
          addFormatToken('y', ['yy', 2], 0, 'eraYear');
          addFormatToken('y', ['yyy', 3], 0, 'eraYear');
          addFormatToken('y', ['yyyy', 4], 0, 'eraYear');
          addRegexToken('N', matchEraAbbr);
          addRegexToken('NN', matchEraAbbr);
          addRegexToken('NNN', matchEraAbbr);
          addRegexToken('NNNN', matchEraName);
          addRegexToken('NNNNN', matchEraNarrow);
          addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (input, array, config, token) {
            var era = config._locale.erasParse(input, token, config._strict);

            if (era) {
              getParsingFlags(config).era = era;
            } else {
              getParsingFlags(config).invalidEra = input;
            }
          });
          addRegexToken('y', matchUnsigned);
          addRegexToken('yy', matchUnsigned);
          addRegexToken('yyy', matchUnsigned);
          addRegexToken('yyyy', matchUnsigned);
          addRegexToken('yo', matchEraYearOrdinal);
          addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);
          addParseToken(['yo'], function (input, array, config, token) {
            var match;

            if (config._locale._eraYearOrdinalRegex) {
              match = input.match(config._locale._eraYearOrdinalRegex);
            }

            if (config._locale.eraYearOrdinalParse) {
              array[YEAR] = config._locale.eraYearOrdinalParse(input, match);
            } else {
              array[YEAR] = parseInt(input, 10);
            }
          });

          function localeEras(m, format) {
            var i,
                l,
                date,
                eras = this._eras || getLocale('en')._eras;

            for (i = 0, l = eras.length; i < l; ++i) {
              switch (typeof eras[i].since) {
                case 'string':
                  // truncate time
                  date = hooks(eras[i].since).startOf('day');
                  eras[i].since = date.valueOf();
                  break;
              }

              switch (typeof eras[i].until) {
                case 'undefined':
                  eras[i].until = +Infinity;
                  break;

                case 'string':
                  // truncate time
                  date = hooks(eras[i].until).startOf('day').valueOf();
                  eras[i].until = date.valueOf();
                  break;
              }
            }

            return eras;
          }

          function localeErasParse(eraName, format, strict) {
            var i,
                l,
                eras = this.eras(),
                name,
                abbr,
                narrow;
            eraName = eraName.toUpperCase();

            for (i = 0, l = eras.length; i < l; ++i) {
              name = eras[i].name.toUpperCase();
              abbr = eras[i].abbr.toUpperCase();
              narrow = eras[i].narrow.toUpperCase();

              if (strict) {
                switch (format) {
                  case 'N':
                  case 'NN':
                  case 'NNN':
                    if (abbr === eraName) {
                      return eras[i];
                    }

                    break;

                  case 'NNNN':
                    if (name === eraName) {
                      return eras[i];
                    }

                    break;

                  case 'NNNNN':
                    if (narrow === eraName) {
                      return eras[i];
                    }

                    break;
                }
              } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {
                return eras[i];
              }
            }
          }

          function localeErasConvertYear(era, year) {
            var dir = era.since <= era.until ? +1 : -1;

            if (year === undefined) {
              return hooks(era.since).year();
            } else {
              return hooks(era.since).year() + (year - era.offset) * dir;
            }
          }

          function getEraName() {
            var i,
                l,
                val,
                eras = this.localeData().eras();

            for (i = 0, l = eras.length; i < l; ++i) {
              // truncate time
              val = this.clone().startOf('day').valueOf();

              if (eras[i].since <= val && val <= eras[i].until) {
                return eras[i].name;
              }

              if (eras[i].until <= val && val <= eras[i].since) {
                return eras[i].name;
              }
            }

            return '';
          }

          function getEraNarrow() {
            var i,
                l,
                val,
                eras = this.localeData().eras();

            for (i = 0, l = eras.length; i < l; ++i) {
              // truncate time
              val = this.clone().startOf('day').valueOf();

              if (eras[i].since <= val && val <= eras[i].until) {
                return eras[i].narrow;
              }

              if (eras[i].until <= val && val <= eras[i].since) {
                return eras[i].narrow;
              }
            }

            return '';
          }

          function getEraAbbr() {
            var i,
                l,
                val,
                eras = this.localeData().eras();

            for (i = 0, l = eras.length; i < l; ++i) {
              // truncate time
              val = this.clone().startOf('day').valueOf();

              if (eras[i].since <= val && val <= eras[i].until) {
                return eras[i].abbr;
              }

              if (eras[i].until <= val && val <= eras[i].since) {
                return eras[i].abbr;
              }
            }

            return '';
          }

          function getEraYear() {
            var i,
                l,
                dir,
                val,
                eras = this.localeData().eras();

            for (i = 0, l = eras.length; i < l; ++i) {
              dir = eras[i].since <= eras[i].until ? +1 : -1; // truncate time

              val = this.clone().startOf('day').valueOf();

              if (eras[i].since <= val && val <= eras[i].until || eras[i].until <= val && val <= eras[i].since) {
                return (this.year() - hooks(eras[i].since).year()) * dir + eras[i].offset;
              }
            }

            return this.year();
          }

          function erasNameRegex(isStrict) {
            if (!hasOwnProp(this, '_erasNameRegex')) {
              computeErasParse.call(this);
            }

            return isStrict ? this._erasNameRegex : this._erasRegex;
          }

          function erasAbbrRegex(isStrict) {
            if (!hasOwnProp(this, '_erasAbbrRegex')) {
              computeErasParse.call(this);
            }

            return isStrict ? this._erasAbbrRegex : this._erasRegex;
          }

          function erasNarrowRegex(isStrict) {
            if (!hasOwnProp(this, '_erasNarrowRegex')) {
              computeErasParse.call(this);
            }

            return isStrict ? this._erasNarrowRegex : this._erasRegex;
          }

          function matchEraAbbr(isStrict, locale) {
            return locale.erasAbbrRegex(isStrict);
          }

          function matchEraName(isStrict, locale) {
            return locale.erasNameRegex(isStrict);
          }

          function matchEraNarrow(isStrict, locale) {
            return locale.erasNarrowRegex(isStrict);
          }

          function matchEraYearOrdinal(isStrict, locale) {
            return locale._eraYearOrdinalRegex || matchUnsigned;
          }

          function computeErasParse() {
            var abbrPieces = [],
                namePieces = [],
                narrowPieces = [],
                mixedPieces = [],
                i,
                l,
                eras = this.eras();

            for (i = 0, l = eras.length; i < l; ++i) {
              namePieces.push(regexEscape(eras[i].name));
              abbrPieces.push(regexEscape(eras[i].abbr));
              narrowPieces.push(regexEscape(eras[i].narrow));
              mixedPieces.push(regexEscape(eras[i].name));
              mixedPieces.push(regexEscape(eras[i].abbr));
              mixedPieces.push(regexEscape(eras[i].narrow));
            }

            this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
            this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');
            this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');
            this._erasNarrowRegex = new RegExp('^(' + narrowPieces.join('|') + ')', 'i');
          } // FORMATTING


          addFormatToken(0, ['gg', 2], 0, function () {
            return this.weekYear() % 100;
          });
          addFormatToken(0, ['GG', 2], 0, function () {
            return this.isoWeekYear() % 100;
          });

          function addWeekYearFormatToken(token, getter) {
            addFormatToken(0, [token, token.length], 0, getter);
          }

          addWeekYearFormatToken('gggg', 'weekYear');
          addWeekYearFormatToken('ggggg', 'weekYear');
          addWeekYearFormatToken('GGGG', 'isoWeekYear');
          addWeekYearFormatToken('GGGGG', 'isoWeekYear'); // ALIASES

          addUnitAlias('weekYear', 'gg');
          addUnitAlias('isoWeekYear', 'GG'); // PRIORITY

          addUnitPriority('weekYear', 1);
          addUnitPriority('isoWeekYear', 1); // PARSING

          addRegexToken('G', matchSigned);
          addRegexToken('g', matchSigned);
          addRegexToken('GG', match1to2, match2);
          addRegexToken('gg', match1to2, match2);
          addRegexToken('GGGG', match1to4, match4);
          addRegexToken('gggg', match1to4, match4);
          addRegexToken('GGGGG', match1to6, match6);
          addRegexToken('ggggg', match1to6, match6);
          addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {
            week[token.substr(0, 2)] = toInt(input);
          });
          addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
            week[token] = hooks.parseTwoDigitYear(input);
          }); // MOMENTS

          function getSetWeekYear(input) {
            return getSetWeekYearHelper.call(this, input, this.week(), this.weekday(), this.localeData()._week.dow, this.localeData()._week.doy);
          }

          function getSetISOWeekYear(input) {
            return getSetWeekYearHelper.call(this, input, this.isoWeek(), this.isoWeekday(), 1, 4);
          }

          function getISOWeeksInYear() {
            return weeksInYear(this.year(), 1, 4);
          }

          function getISOWeeksInISOWeekYear() {
            return weeksInYear(this.isoWeekYear(), 1, 4);
          }

          function getWeeksInYear() {
            var weekInfo = this.localeData()._week;

            return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
          }

          function getWeeksInWeekYear() {
            var weekInfo = this.localeData()._week;

            return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
          }

          function getSetWeekYearHelper(input, week, weekday, dow, doy) {
            var weeksTarget;

            if (input == null) {
              return weekOfYear(this, dow, doy).year;
            } else {
              weeksTarget = weeksInYear(input, dow, doy);

              if (week > weeksTarget) {
                week = weeksTarget;
              }

              return setWeekAll.call(this, input, week, weekday, dow, doy);
            }
          }

          function setWeekAll(weekYear, week, weekday, dow, doy) {
            var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
                date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
            this.year(date.getUTCFullYear());
            this.month(date.getUTCMonth());
            this.date(date.getUTCDate());
            return this;
          } // FORMATTING


          addFormatToken('Q', 0, 'Qo', 'quarter'); // ALIASES

          addUnitAlias('quarter', 'Q'); // PRIORITY

          addUnitPriority('quarter', 7); // PARSING

          addRegexToken('Q', match1);
          addParseToken('Q', function (input, array) {
            array[MONTH] = (toInt(input) - 1) * 3;
          }); // MOMENTS

          function getSetQuarter(input) {
            return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
          } // FORMATTING


          addFormatToken('D', ['DD', 2], 'Do', 'date'); // ALIASES

          addUnitAlias('date', 'D'); // PRIORITY

          addUnitPriority('date', 9); // PARSING

          addRegexToken('D', match1to2);
          addRegexToken('DD', match1to2, match2);
          addRegexToken('Do', function (isStrict, locale) {
            // TODO: Remove "ordinalParse" fallback in next major release.
            return isStrict ? locale._dayOfMonthOrdinalParse || locale._ordinalParse : locale._dayOfMonthOrdinalParseLenient;
          });
          addParseToken(['D', 'DD'], DATE);
          addParseToken('Do', function (input, array) {
            array[DATE] = toInt(input.match(match1to2)[0]);
          }); // MOMENTS

          var getSetDayOfMonth = makeGetSet('Date', true); // FORMATTING

          addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); // ALIASES

          addUnitAlias('dayOfYear', 'DDD'); // PRIORITY

          addUnitPriority('dayOfYear', 4); // PARSING

          addRegexToken('DDD', match1to3);
          addRegexToken('DDDD', match3);
          addParseToken(['DDD', 'DDDD'], function (input, array, config) {
            config._dayOfYear = toInt(input);
          }); // HELPERS
          // MOMENTS

          function getSetDayOfYear(input) {
            var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;
            return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');
          } // FORMATTING


          addFormatToken('m', ['mm', 2], 0, 'minute'); // ALIASES

          addUnitAlias('minute', 'm'); // PRIORITY

          addUnitPriority('minute', 14); // PARSING

          addRegexToken('m', match1to2);
          addRegexToken('mm', match1to2, match2);
          addParseToken(['m', 'mm'], MINUTE); // MOMENTS

          var getSetMinute = makeGetSet('Minutes', false); // FORMATTING

          addFormatToken('s', ['ss', 2], 0, 'second'); // ALIASES

          addUnitAlias('second', 's'); // PRIORITY

          addUnitPriority('second', 15); // PARSING

          addRegexToken('s', match1to2);
          addRegexToken('ss', match1to2, match2);
          addParseToken(['s', 'ss'], SECOND); // MOMENTS

          var getSetSecond = makeGetSet('Seconds', false); // FORMATTING

          addFormatToken('S', 0, 0, function () {
            return ~~(this.millisecond() / 100);
          });
          addFormatToken(0, ['SS', 2], 0, function () {
            return ~~(this.millisecond() / 10);
          });
          addFormatToken(0, ['SSS', 3], 0, 'millisecond');
          addFormatToken(0, ['SSSS', 4], 0, function () {
            return this.millisecond() * 10;
          });
          addFormatToken(0, ['SSSSS', 5], 0, function () {
            return this.millisecond() * 100;
          });
          addFormatToken(0, ['SSSSSS', 6], 0, function () {
            return this.millisecond() * 1000;
          });
          addFormatToken(0, ['SSSSSSS', 7], 0, function () {
            return this.millisecond() * 10000;
          });
          addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
            return this.millisecond() * 100000;
          });
          addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
            return this.millisecond() * 1000000;
          }); // ALIASES

          addUnitAlias('millisecond', 'ms'); // PRIORITY

          addUnitPriority('millisecond', 16); // PARSING

          addRegexToken('S', match1to3, match1);
          addRegexToken('SS', match1to3, match2);
          addRegexToken('SSS', match1to3, match3);
          var token, getSetMillisecond;

          for (token = 'SSSS'; token.length <= 9; token += 'S') {
            addRegexToken(token, matchUnsigned);
          }

          function parseMs(input, array) {
            array[MILLISECOND] = toInt(('0.' + input) * 1000);
          }

          for (token = 'S'; token.length <= 9; token += 'S') {
            addParseToken(token, parseMs);
          }

          getSetMillisecond = makeGetSet('Milliseconds', false); // FORMATTING

          addFormatToken('z', 0, 0, 'zoneAbbr');
          addFormatToken('zz', 0, 0, 'zoneName'); // MOMENTS

          function getZoneAbbr() {
            return this._isUTC ? 'UTC' : '';
          }

          function getZoneName() {
            return this._isUTC ? 'Coordinated Universal Time' : '';
          }

          var proto = Moment.prototype;
          proto.add = add;
          proto.calendar = calendar$1;
          proto.clone = clone;
          proto.diff = diff;
          proto.endOf = endOf;
          proto.format = format;
          proto.from = from;
          proto.fromNow = fromNow;
          proto.to = to;
          proto.toNow = toNow;
          proto.get = stringGet;
          proto.invalidAt = invalidAt;
          proto.isAfter = isAfter;
          proto.isBefore = isBefore;
          proto.isBetween = isBetween;
          proto.isSame = isSame;
          proto.isSameOrAfter = isSameOrAfter;
          proto.isSameOrBefore = isSameOrBefore;
          proto.isValid = isValid$2;
          proto.lang = lang;
          proto.locale = locale;
          proto.localeData = localeData;
          proto.max = prototypeMax;
          proto.min = prototypeMin;
          proto.parsingFlags = parsingFlags;
          proto.set = stringSet;
          proto.startOf = startOf;
          proto.subtract = subtract;
          proto.toArray = toArray;
          proto.toObject = toObject;
          proto.toDate = toDate;
          proto.toISOString = toISOString;
          proto.inspect = inspect;

          if (typeof Symbol !== 'undefined' && Symbol["for"] != null) {
            proto[Symbol["for"]('nodejs.util.inspect.custom')] = function () {
              return 'Moment<' + this.format() + '>';
            };
          }

          proto.toJSON = toJSON;
          proto.toString = toString;
          proto.unix = unix;
          proto.valueOf = valueOf;
          proto.creationData = creationData;
          proto.eraName = getEraName;
          proto.eraNarrow = getEraNarrow;
          proto.eraAbbr = getEraAbbr;
          proto.eraYear = getEraYear;
          proto.year = getSetYear;
          proto.isLeapYear = getIsLeapYear;
          proto.weekYear = getSetWeekYear;
          proto.isoWeekYear = getSetISOWeekYear;
          proto.quarter = proto.quarters = getSetQuarter;
          proto.month = getSetMonth;
          proto.daysInMonth = getDaysInMonth;
          proto.week = proto.weeks = getSetWeek;
          proto.isoWeek = proto.isoWeeks = getSetISOWeek;
          proto.weeksInYear = getWeeksInYear;
          proto.weeksInWeekYear = getWeeksInWeekYear;
          proto.isoWeeksInYear = getISOWeeksInYear;
          proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;
          proto.date = getSetDayOfMonth;
          proto.day = proto.days = getSetDayOfWeek;
          proto.weekday = getSetLocaleDayOfWeek;
          proto.isoWeekday = getSetISODayOfWeek;
          proto.dayOfYear = getSetDayOfYear;
          proto.hour = proto.hours = getSetHour;
          proto.minute = proto.minutes = getSetMinute;
          proto.second = proto.seconds = getSetSecond;
          proto.millisecond = proto.milliseconds = getSetMillisecond;
          proto.utcOffset = getSetOffset;
          proto.utc = setOffsetToUTC;
          proto.local = setOffsetToLocal;
          proto.parseZone = setOffsetToParsedOffset;
          proto.hasAlignedHourOffset = hasAlignedHourOffset;
          proto.isDST = isDaylightSavingTime;
          proto.isLocal = isLocal;
          proto.isUtcOffset = isUtcOffset;
          proto.isUtc = isUtc;
          proto.isUTC = isUtc;
          proto.zoneAbbr = getZoneAbbr;
          proto.zoneName = getZoneName;
          proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);
          proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);
          proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);
          proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);
          proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);

          function createUnix(input) {
            return createLocal(input * 1000);
          }

          function createInZone() {
            return createLocal.apply(null, arguments).parseZone();
          }

          function preParsePostFormat(string) {
            return string;
          }

          var proto$1 = Locale.prototype;
          proto$1.calendar = calendar;
          proto$1.longDateFormat = longDateFormat;
          proto$1.invalidDate = invalidDate;
          proto$1.ordinal = ordinal;
          proto$1.preparse = preParsePostFormat;
          proto$1.postformat = preParsePostFormat;
          proto$1.relativeTime = relativeTime;
          proto$1.pastFuture = pastFuture;
          proto$1.set = set;
          proto$1.eras = localeEras;
          proto$1.erasParse = localeErasParse;
          proto$1.erasConvertYear = localeErasConvertYear;
          proto$1.erasAbbrRegex = erasAbbrRegex;
          proto$1.erasNameRegex = erasNameRegex;
          proto$1.erasNarrowRegex = erasNarrowRegex;
          proto$1.months = localeMonths;
          proto$1.monthsShort = localeMonthsShort;
          proto$1.monthsParse = localeMonthsParse;
          proto$1.monthsRegex = monthsRegex;
          proto$1.monthsShortRegex = monthsShortRegex;
          proto$1.week = localeWeek;
          proto$1.firstDayOfYear = localeFirstDayOfYear;
          proto$1.firstDayOfWeek = localeFirstDayOfWeek;
          proto$1.weekdays = localeWeekdays;
          proto$1.weekdaysMin = localeWeekdaysMin;
          proto$1.weekdaysShort = localeWeekdaysShort;
          proto$1.weekdaysParse = localeWeekdaysParse;
          proto$1.weekdaysRegex = weekdaysRegex;
          proto$1.weekdaysShortRegex = weekdaysShortRegex;
          proto$1.weekdaysMinRegex = weekdaysMinRegex;
          proto$1.isPM = localeIsPM;
          proto$1.meridiem = localeMeridiem;

          function get$1(format, index, field, setter) {
            var locale = getLocale(),
                utc = createUTC().set(setter, index);
            return locale[field](utc, format);
          }

          function listMonthsImpl(format, index, field) {
            if (isNumber(format)) {
              index = format;
              format = undefined;
            }

            format = format || '';

            if (index != null) {
              return get$1(format, index, field, 'month');
            }

            var i,
                out = [];

            for (i = 0; i < 12; i++) {
              out[i] = get$1(format, i, field, 'month');
            }

            return out;
          } // ()
          // (5)
          // (fmt, 5)
          // (fmt)
          // (true)
          // (true, 5)
          // (true, fmt, 5)
          // (true, fmt)


          function listWeekdaysImpl(localeSorted, format, index, field) {
            if (typeof localeSorted === 'boolean') {
              if (isNumber(format)) {
                index = format;
                format = undefined;
              }

              format = format || '';
            } else {
              format = localeSorted;
              index = format;
              localeSorted = false;

              if (isNumber(format)) {
                index = format;
                format = undefined;
              }

              format = format || '';
            }

            var locale = getLocale(),
                shift = localeSorted ? locale._week.dow : 0,
                i,
                out = [];

            if (index != null) {
              return get$1(format, (index + shift) % 7, field, 'day');
            }

            for (i = 0; i < 7; i++) {
              out[i] = get$1(format, (i + shift) % 7, field, 'day');
            }

            return out;
          }

          function listMonths(format, index) {
            return listMonthsImpl(format, index, 'months');
          }

          function listMonthsShort(format, index) {
            return listMonthsImpl(format, index, 'monthsShort');
          }

          function listWeekdays(localeSorted, format, index) {
            return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
          }

          function listWeekdaysShort(localeSorted, format, index) {
            return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
          }

          function listWeekdaysMin(localeSorted, format, index) {
            return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
          }

          getSetGlobalLocale('en', {
            eras: [{
              since: '0001-01-01',
              until: +Infinity,
              offset: 1,
              name: 'Anno Domini',
              narrow: 'AD',
              abbr: 'AD'
            }, {
              since: '0000-12-31',
              until: -Infinity,
              offset: 1,
              name: 'Before Christ',
              narrow: 'BC',
              abbr: 'BC'
            }],
            dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
            ordinal: function ordinal(number) {
              var b = number % 10,
                  output = toInt(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';
              return number + output;
            }
          }); // Side effect imports

          hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);
          hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);
          var mathAbs = Math.abs;

          function abs() {
            var data = this._data;
            this._milliseconds = mathAbs(this._milliseconds);
            this._days = mathAbs(this._days);
            this._months = mathAbs(this._months);
            data.milliseconds = mathAbs(data.milliseconds);
            data.seconds = mathAbs(data.seconds);
            data.minutes = mathAbs(data.minutes);
            data.hours = mathAbs(data.hours);
            data.months = mathAbs(data.months);
            data.years = mathAbs(data.years);
            return this;
          }

          function addSubtract$1(duration, input, value, direction) {
            var other = createDuration(input, value);
            duration._milliseconds += direction * other._milliseconds;
            duration._days += direction * other._days;
            duration._months += direction * other._months;
            return duration._bubble();
          } // supports only 2.0-style add(1, 's') or add(duration)


          function add$1(input, value) {
            return addSubtract$1(this, input, value, 1);
          } // supports only 2.0-style subtract(1, 's') or subtract(duration)


          function subtract$1(input, value) {
            return addSubtract$1(this, input, value, -1);
          }

          function absCeil(number) {
            if (number < 0) {
              return Math.floor(number);
            } else {
              return Math.ceil(number);
            }
          }

          function bubble() {
            var milliseconds = this._milliseconds,
                days = this._days,
                months = this._months,
                data = this._data,
                seconds,
                minutes,
                hours,
                years,
                monthsFromDays; // if we have a mix of positive and negative values, bubble down first
            // check: https://github.com/moment/moment/issues/2166

            if (!(milliseconds >= 0 && days >= 0 && months >= 0 || milliseconds <= 0 && days <= 0 && months <= 0)) {
              milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
              days = 0;
              months = 0;
            } // The following code bubbles up values, see the tests for
            // examples of what that means.


            data.milliseconds = milliseconds % 1000;
            seconds = absFloor(milliseconds / 1000);
            data.seconds = seconds % 60;
            minutes = absFloor(seconds / 60);
            data.minutes = minutes % 60;
            hours = absFloor(minutes / 60);
            data.hours = hours % 24;
            days += absFloor(hours / 24); // convert days to months

            monthsFromDays = absFloor(daysToMonths(days));
            months += monthsFromDays;
            days -= absCeil(monthsToDays(monthsFromDays)); // 12 months -> 1 year

            years = absFloor(months / 12);
            months %= 12;
            data.days = days;
            data.months = months;
            data.years = years;
            return this;
          }

          function daysToMonths(days) {
            // 400 years have 146097 days (taking into account leap year rules)
            // 400 years have 12 months === 4800
            return days * 4800 / 146097;
          }

          function monthsToDays(months) {
            // the reverse of daysToMonths
            return months * 146097 / 4800;
          }

          function as(units) {
            if (!this.isValid()) {
              return NaN;
            }

            var days,
                months,
                milliseconds = this._milliseconds;
            units = normalizeUnits(units);

            if (units === 'month' || units === 'quarter' || units === 'year') {
              days = this._days + milliseconds / 864e5;
              months = this._months + daysToMonths(days);

              switch (units) {
                case 'month':
                  return months;

                case 'quarter':
                  return months / 3;

                case 'year':
                  return months / 12;
              }
            } else {
              // handle milliseconds separately because of floating point math errors (issue #1867)
              days = this._days + Math.round(monthsToDays(this._months));

              switch (units) {
                case 'week':
                  return days / 7 + milliseconds / 6048e5;

                case 'day':
                  return days + milliseconds / 864e5;

                case 'hour':
                  return days * 24 + milliseconds / 36e5;

                case 'minute':
                  return days * 1440 + milliseconds / 6e4;

                case 'second':
                  return days * 86400 + milliseconds / 1000;
                // Math.floor prevents floating point math errors here

                case 'millisecond':
                  return Math.floor(days * 864e5) + milliseconds;

                default:
                  throw new Error('Unknown unit ' + units);
              }
            }
          } // TODO: Use this.as('ms')?


          function valueOf$1() {
            if (!this.isValid()) {
              return NaN;
            }

            return this._milliseconds + this._days * 864e5 + this._months % 12 * 2592e6 + toInt(this._months / 12) * 31536e6;
          }

          function makeAs(alias) {
            return function () {
              return this.as(alias);
            };
          }

          var asMilliseconds = makeAs('ms'),
              asSeconds = makeAs('s'),
              asMinutes = makeAs('m'),
              asHours = makeAs('h'),
              asDays = makeAs('d'),
              asWeeks = makeAs('w'),
              asMonths = makeAs('M'),
              asQuarters = makeAs('Q'),
              asYears = makeAs('y');

          function clone$1() {
            return createDuration(this);
          }

          function get$2(units) {
            units = normalizeUnits(units);
            return this.isValid() ? this[units + 's']() : NaN;
          }

          function makeGetter(name) {
            return function () {
              return this.isValid() ? this._data[name] : NaN;
            };
          }

          var milliseconds = makeGetter('milliseconds'),
              seconds = makeGetter('seconds'),
              minutes = makeGetter('minutes'),
              hours = makeGetter('hours'),
              days = makeGetter('days'),
              months = makeGetter('months'),
              years = makeGetter('years');

          function weeks() {
            return absFloor(this.days() / 7);
          }

          var round = Math.round,
              thresholds = {
            ss: 44,
            // a few seconds to seconds
            s: 45,
            // seconds to minute
            m: 45,
            // minutes to hour
            h: 22,
            // hours to day
            d: 26,
            // days to month/week
            w: null,
            // weeks to month
            M: 11 // months to year

          }; // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize

          function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
            return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
          }

          function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {
            var duration = createDuration(posNegDuration).abs(),
                seconds = round(duration.as('s')),
                minutes = round(duration.as('m')),
                hours = round(duration.as('h')),
                days = round(duration.as('d')),
                months = round(duration.as('M')),
                weeks = round(duration.as('w')),
                years = round(duration.as('y')),
                a = seconds <= thresholds.ss && ['s', seconds] || seconds < thresholds.s && ['ss', seconds] || minutes <= 1 && ['m'] || minutes < thresholds.m && ['mm', minutes] || hours <= 1 && ['h'] || hours < thresholds.h && ['hh', hours] || days <= 1 && ['d'] || days < thresholds.d && ['dd', days];

            if (thresholds.w != null) {
              a = a || weeks <= 1 && ['w'] || weeks < thresholds.w && ['ww', weeks];
            }

            a = a || months <= 1 && ['M'] || months < thresholds.M && ['MM', months] || years <= 1 && ['y'] || ['yy', years];
            a[2] = withoutSuffix;
            a[3] = +posNegDuration > 0;
            a[4] = locale;
            return substituteTimeAgo.apply(null, a);
          } // This function allows you to set the rounding function for relative time strings


          function getSetRelativeTimeRounding(roundingFunction) {
            if (roundingFunction === undefined) {
              return round;
            }

            if (typeof roundingFunction === 'function') {
              round = roundingFunction;
              return true;
            }

            return false;
          } // This function allows you to set a threshold for relative time strings


          function getSetRelativeTimeThreshold(threshold, limit) {
            if (thresholds[threshold] === undefined) {
              return false;
            }

            if (limit === undefined) {
              return thresholds[threshold];
            }

            thresholds[threshold] = limit;

            if (threshold === 's') {
              thresholds.ss = limit - 1;
            }

            return true;
          }

          function humanize(argWithSuffix, argThresholds) {
            if (!this.isValid()) {
              return this.localeData().invalidDate();
            }

            var withSuffix = false,
                th = thresholds,
                locale,
                output;

            if (typeof argWithSuffix === 'object') {
              argThresholds = argWithSuffix;
              argWithSuffix = false;
            }

            if (typeof argWithSuffix === 'boolean') {
              withSuffix = argWithSuffix;
            }

            if (typeof argThresholds === 'object') {
              th = Object.assign({}, thresholds, argThresholds);

              if (argThresholds.s != null && argThresholds.ss == null) {
                th.ss = argThresholds.s - 1;
              }
            }

            locale = this.localeData();
            output = relativeTime$1(this, !withSuffix, th, locale);

            if (withSuffix) {
              output = locale.pastFuture(+this, output);
            }

            return locale.postformat(output);
          }

          var abs$1 = Math.abs;

          function sign(x) {
            return (x > 0) - (x < 0) || +x;
          }

          function toISOString$1() {
            // for ISO strings we do not use the normal bubbling rules:
            //  * milliseconds bubble up until they become hours
            //  * days do not bubble at all
            //  * months bubble up until they become years
            // This is because there is no context-free conversion between hours and days
            // (think of clock changes)
            // and also not between days and months (28-31 days per month)
            if (!this.isValid()) {
              return this.localeData().invalidDate();
            }

            var seconds = abs$1(this._milliseconds) / 1000,
                days = abs$1(this._days),
                months = abs$1(this._months),
                minutes,
                hours,
                years,
                s,
                total = this.asSeconds(),
                totalSign,
                ymSign,
                daysSign,
                hmsSign;

            if (!total) {
              // this is the same as C#'s (Noda) and python (isodate)...
              // but not other JS (goog.date)
              return 'P0D';
            } // 3600 seconds -> 60 minutes -> 1 hour


            minutes = absFloor(seconds / 60);
            hours = absFloor(minutes / 60);
            seconds %= 60;
            minutes %= 60; // 12 months -> 1 year

            years = absFloor(months / 12);
            months %= 12; // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js

            s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';
            totalSign = total < 0 ? '-' : '';
            ymSign = sign(this._months) !== sign(total) ? '-' : '';
            daysSign = sign(this._days) !== sign(total) ? '-' : '';
            hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';
            return totalSign + 'P' + (years ? ymSign + years + 'Y' : '') + (months ? ymSign + months + 'M' : '') + (days ? daysSign + days + 'D' : '') + (hours || minutes || seconds ? 'T' : '') + (hours ? hmsSign + hours + 'H' : '') + (minutes ? hmsSign + minutes + 'M' : '') + (seconds ? hmsSign + s + 'S' : '');
          }

          var proto$2 = Duration.prototype;
          proto$2.isValid = isValid$1;
          proto$2.abs = abs;
          proto$2.add = add$1;
          proto$2.subtract = subtract$1;
          proto$2.as = as;
          proto$2.asMilliseconds = asMilliseconds;
          proto$2.asSeconds = asSeconds;
          proto$2.asMinutes = asMinutes;
          proto$2.asHours = asHours;
          proto$2.asDays = asDays;
          proto$2.asWeeks = asWeeks;
          proto$2.asMonths = asMonths;
          proto$2.asQuarters = asQuarters;
          proto$2.asYears = asYears;
          proto$2.valueOf = valueOf$1;
          proto$2._bubble = bubble;
          proto$2.clone = clone$1;
          proto$2.get = get$2;
          proto$2.milliseconds = milliseconds;
          proto$2.seconds = seconds;
          proto$2.minutes = minutes;
          proto$2.hours = hours;
          proto$2.days = days;
          proto$2.weeks = weeks;
          proto$2.months = months;
          proto$2.years = years;
          proto$2.humanize = humanize;
          proto$2.toISOString = toISOString$1;
          proto$2.toString = toISOString$1;
          proto$2.toJSON = toISOString$1;
          proto$2.locale = locale;
          proto$2.localeData = localeData;
          proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);
          proto$2.lang = lang; // FORMATTING

          addFormatToken('X', 0, 0, 'unix');
          addFormatToken('x', 0, 0, 'valueOf'); // PARSING

          addRegexToken('x', matchSigned);
          addRegexToken('X', matchTimestamp);
          addParseToken('X', function (input, array, config) {
            config._d = new Date(parseFloat(input) * 1000);
          });
          addParseToken('x', function (input, array, config) {
            config._d = new Date(toInt(input));
          }); //! moment.js

          hooks.version = '2.29.1';
          setHookCallback(createLocal);
          hooks.fn = proto;
          hooks.min = min;
          hooks.max = max;
          hooks.now = now;
          hooks.utc = createUTC;
          hooks.unix = createUnix;
          hooks.months = listMonths;
          hooks.isDate = isDate;
          hooks.locale = getSetGlobalLocale;
          hooks.invalid = createInvalid;
          hooks.duration = createDuration;
          hooks.isMoment = isMoment;
          hooks.weekdays = listWeekdays;
          hooks.parseZone = createInZone;
          hooks.localeData = getLocale;
          hooks.isDuration = isDuration;
          hooks.monthsShort = listMonthsShort;
          hooks.weekdaysMin = listWeekdaysMin;
          hooks.defineLocale = defineLocale;
          hooks.updateLocale = updateLocale;
          hooks.locales = listLocales;
          hooks.weekdaysShort = listWeekdaysShort;
          hooks.normalizeUnits = normalizeUnits;
          hooks.relativeTimeRounding = getSetRelativeTimeRounding;
          hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
          hooks.calendarFormat = getCalendarFormat;
          hooks.prototype = proto; // currently HTML5 input type only supports 24-hour formats

          hooks.HTML5_FMT = {
            DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm',
            // <input type="datetime-local" />
            DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',
            // <input type="datetime-local" step="1" />
            DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',
            // <input type="datetime-local" step="0.001" />
            DATE: 'YYYY-MM-DD',
            // <input type="date" />
            TIME: 'HH:mm',
            // <input type="time" />
            TIME_SECONDS: 'HH:mm:ss',
            // <input type="time" step="1" />
            TIME_MS: 'HH:mm:ss.SSS',
            // <input type="time" step="0.001" />
            WEEK: 'GGGG-[W]WW',
            // <input type="week" />
            MONTH: 'YYYY-MM' // <input type="month" />

          };
          return hooks;
        });
        /* WEBPACK VAR INJECTION */

      }).call(this, __webpack_require__(
      /*! ./../webpack/buildin/module.js */
      "YuTi")(module));
      /***/
    },

    /***/
    "wk5b":
    /*!*************************************************!*\
      !*** ./node_modules/aws-sdk/lib/xml/builder.js ***!
      \*************************************************/

    /*! no static exports found */

    /***/
    function wk5b(module, exports, __webpack_require__) {
      var util = __webpack_require__(
      /*! ../util */
      "BaN1");

      var XmlNode = __webpack_require__(
      /*! ./xml-node */
      "ZJYt").XmlNode;

      var XmlText = __webpack_require__(
      /*! ./xml-text */
      "c8WW").XmlText;

      function XmlBuilder() {}

      XmlBuilder.prototype.toXML = function (params, shape, rootElement, noEmpty) {
        var xml = new XmlNode(rootElement);
        applyNamespaces(xml, shape, true);
        serialize(xml, params, shape);
        return xml.children.length > 0 || noEmpty ? xml.toString() : '';
      };

      function serialize(xml, value, shape) {
        switch (shape.type) {
          case 'structure':
            return serializeStructure(xml, value, shape);

          case 'map':
            return serializeMap(xml, value, shape);

          case 'list':
            return serializeList(xml, value, shape);

          default:
            return serializeScalar(xml, value, shape);
        }
      }

      function serializeStructure(xml, params, shape) {
        util.arrayEach(shape.memberNames, function (memberName) {
          var memberShape = shape.members[memberName];
          if (memberShape.location !== 'body') return;
          var value = params[memberName];
          var name = memberShape.name;

          if (value !== undefined && value !== null) {
            if (memberShape.isXmlAttribute) {
              xml.addAttribute(name, value);
            } else if (memberShape.flattened) {
              serialize(xml, value, memberShape);
            } else {
              var element = new XmlNode(name);
              xml.addChildNode(element);
              applyNamespaces(element, memberShape);
              serialize(element, value, memberShape);
            }
          }
        });
      }

      function serializeMap(xml, map, shape) {
        var xmlKey = shape.key.name || 'key';
        var xmlValue = shape.value.name || 'value';
        util.each(map, function (key, value) {
          var entry = new XmlNode(shape.flattened ? shape.name : 'entry');
          xml.addChildNode(entry);
          var entryKey = new XmlNode(xmlKey);
          var entryValue = new XmlNode(xmlValue);
          entry.addChildNode(entryKey);
          entry.addChildNode(entryValue);
          serialize(entryKey, key, shape.key);
          serialize(entryValue, value, shape.value);
        });
      }

      function serializeList(xml, list, shape) {
        if (shape.flattened) {
          util.arrayEach(list, function (value) {
            var name = shape.member.name || shape.name;
            var element = new XmlNode(name);
            xml.addChildNode(element);
            serialize(element, value, shape.member);
          });
        } else {
          util.arrayEach(list, function (value) {
            var name = shape.member.name || 'member';
            var element = new XmlNode(name);
            xml.addChildNode(element);
            serialize(element, value, shape.member);
          });
        }
      }

      function serializeScalar(xml, value, shape) {
        xml.addChildNode(new XmlText(shape.toWireFormat(value)));
      }

      function applyNamespaces(xml, shape, isRoot) {
        var uri,
            prefix = 'xmlns';

        if (shape.xmlNamespaceUri) {
          uri = shape.xmlNamespaceUri;
          if (shape.xmlNamespacePrefix) prefix += ':' + shape.xmlNamespacePrefix;
        } else if (isRoot && shape.api.xmlNamespaceUri) {
          uri = shape.api.xmlNamespaceUri;
        }

        if (uri) xml.addAttribute(prefix, uri);
      }
      /**
       * @api private
       */


      module.exports = XmlBuilder;
      /***/
    },

    /***/
    "x+ZX":
    /*!*******************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/refCount.js ***!
      \*******************************************************************/

    /*! exports provided: refCount */

    /***/
    function xZX(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "refCount", function () {
        return refCount;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");

      function refCount() {
        return function refCountOperatorFunction(source) {
          return source.lift(new RefCountOperator(source));
        };
      }

      var RefCountOperator = /*#__PURE__*/function () {
        function RefCountOperator(connectable) {
          _classCallCheck2(this, RefCountOperator);

          this.connectable = connectable;
        }

        _createClass2(RefCountOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            var connectable = this.connectable;
            connectable._refCount++;
            var refCounter = new RefCountSubscriber(subscriber, connectable);
            var subscription = source.subscribe(refCounter);

            if (!refCounter.closed) {
              refCounter.connection = connectable.connect();
            }

            return subscription;
          }
        }]);

        return RefCountOperator;
      }();

      var RefCountSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_45) {
        _inherits2(RefCountSubscriber, _Subscriber__WEBPACK_45);

        var _super397 = _createSuper(RefCountSubscriber);

        function RefCountSubscriber(destination, connectable) {
          var _this1023;

          _classCallCheck2(this, RefCountSubscriber);

          _this1023 = _super397.call(this, destination);
          _this1023.connectable = connectable;
          return _this1023;
        }

        _createClass2(RefCountSubscriber, [{
          key: "_unsubscribe",
          value: function _unsubscribe() {
            var connectable = this.connectable;

            if (!connectable) {
              this.connection = null;
              return;
            }

            this.connectable = null;
            var refCount = connectable._refCount;

            if (refCount <= 0) {
              this.connection = null;
              return;
            }

            connectable._refCount = refCount - 1;

            if (refCount > 1) {
              this.connection = null;
              return;
            }

            var connection = this.connection;
            var sharedConnection = connectable._connection;
            this.connection = null;

            if (sharedConnection && (!connection || sharedConnection === connection)) {
              sharedConnection.unsubscribe();
            }
          }
        }]);

        return RefCountSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=refCount.js.map

      /***/

    },

    /***/
    "x6pH":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/he.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function x6pH(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Hebrew [he]
      //! author : Tomer Cohen : https://github.com/tomer
      //! author : Moshe Simantov : https://github.com/DevelopmentIL
      //! author : Tal Ater : https://github.com/TalAter
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var he = moment.defineLocale('he', {
          months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),
          monthsShort: 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),
          weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),
          weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),
          weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [ב]MMMM YYYY',
            LLL: 'D [ב]MMMM YYYY HH:mm',
            LLLL: 'dddd, D [ב]MMMM YYYY HH:mm',
            l: 'D/M/YYYY',
            ll: 'D MMM YYYY',
            lll: 'D MMM YYYY HH:mm',
            llll: 'ddd, D MMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[היום ב־]LT',
            nextDay: '[מחר ב־]LT',
            nextWeek: 'dddd [בשעה] LT',
            lastDay: '[אתמול ב־]LT',
            lastWeek: '[ביום] dddd [האחרון בשעה] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'בעוד %s',
            past: 'לפני %s',
            s: 'מספר שניות',
            ss: '%d שניות',
            m: 'דקה',
            mm: '%d דקות',
            h: 'שעה',
            hh: function hh(number) {
              if (number === 2) {
                return 'שעתיים';
              }

              return number + ' שעות';
            },
            d: 'יום',
            dd: function dd(number) {
              if (number === 2) {
                return 'יומיים';
              }

              return number + ' ימים';
            },
            M: 'חודש',
            MM: function MM(number) {
              if (number === 2) {
                return 'חודשיים';
              }

              return number + ' חודשים';
            },
            y: 'שנה',
            yy: function yy(number) {
              if (number === 2) {
                return 'שנתיים';
              } else if (number % 10 === 0 && number !== 10) {
                return number + ' שנה';
              }

              return number + ' שנים';
            }
          },
          meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,
          isPM: function isPM(input) {
            return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input);
          },
          meridiem: function meridiem(hour, minute, isLower) {
            if (hour < 5) {
              return 'לפנות בוקר';
            } else if (hour < 10) {
              return 'בבוקר';
            } else if (hour < 12) {
              return isLower ? 'לפנה"צ' : 'לפני הצהריים';
            } else if (hour < 18) {
              return isLower ? 'אחה"צ' : 'אחרי הצהריים';
            } else {
              return 'בערב';
            }
          }
        });
        return he;
      });
      /***/

    },

    /***/
    "xHqg":
    /*!*************************************************************************!*\
      !*** ./node_modules/@angular/material/__ivy_ngcc__/fesm2015/stepper.js ***!
      \*************************************************************************/

    /*! exports provided: MAT_STEPPER_INTL_PROVIDER, MAT_STEPPER_INTL_PROVIDER_FACTORY, MatHorizontalStepper, MatStep, MatStepHeader, MatStepLabel, MatStepper, MatStepperIcon, MatStepperIntl, MatStepperModule, MatStepperNext, MatStepperPrevious, MatVerticalStepper, matStepperAnimations */

    /***/
    function xHqg(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_STEPPER_INTL_PROVIDER", function () {
        return MAT_STEPPER_INTL_PROVIDER;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MAT_STEPPER_INTL_PROVIDER_FACTORY", function () {
        return MAT_STEPPER_INTL_PROVIDER_FACTORY;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatHorizontalStepper", function () {
        return MatHorizontalStepper;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatStep", function () {
        return MatStep;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatStepHeader", function () {
        return MatStepHeader;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatStepLabel", function () {
        return MatStepLabel;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatStepper", function () {
        return MatStepper;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatStepperIcon", function () {
        return MatStepperIcon;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatStepperIntl", function () {
        return MatStepperIntl;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatStepperModule", function () {
        return MatStepperModule;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatStepperNext", function () {
        return MatStepperNext;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatStepperPrevious", function () {
        return MatStepperPrevious;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "MatVerticalStepper", function () {
        return MatVerticalStepper;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "matStepperAnimations", function () {
        return matStepperAnimations;
      });
      /* harmony import */


      var _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/cdk/portal */
      "+rOU");
      /* harmony import */


      var _angular_cdk_stepper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @angular/cdk/stepper */
      "B/XX");
      /* harmony import */


      var _angular_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @angular/common */
      "ofXK");
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /* harmony import */


      var _angular_material_button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! @angular/material/button */
      "bTqV");
      /* harmony import */


      var _angular_material_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! @angular/material/core */
      "FKr1");
      /* harmony import */


      var _angular_material_icon__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! @angular/material/icon */
      "NFeN");
      /* harmony import */


      var _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! @angular/cdk/a11y */
      "u47x");
      /* harmony import */


      var rxjs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(
      /*! rxjs */
      "qCKp");
      /* harmony import */


      var _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(
      /*! @angular/cdk/bidi */
      "cH1L");
      /* harmony import */


      var rxjs_operators__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(
      /*! rxjs/operators */
      "kU1M");
      /* harmony import */


      var _angular_animations__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(
      /*! @angular/animations */
      "R0Ic");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      function MatStepHeader_ng_container_3_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementContainer"](0, 8);
        }

        if (rf & 2) {
          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngTemplateOutlet", ctx_r0.iconOverrides[ctx_r0.state])("ngTemplateOutletContext", ctx_r0._getIconContext());
        }
      }

      function MatStepHeader_ng_container_4_span_1_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "span");

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate"](ctx_r6._getDefaultTextForState(ctx_r6.state));
        }
      }

      function MatStepHeader_ng_container_4_mat_icon_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "mat-icon");

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate"](ctx_r7._getDefaultTextForState(ctx_r7.state));
        }
      }

      function MatStepHeader_ng_container_4_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementContainerStart"](0, 9);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](1, MatStepHeader_ng_container_4_span_1_Template, 2, 1, "span", 10);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](2, MatStepHeader_ng_container_4_mat_icon_2_Template, 2, 1, "mat-icon", 11);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementContainerEnd"]();
        }

        if (rf & 2) {
          var ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngSwitch", ctx_r1.state);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngSwitchCase", "number");
        }
      }

      function MatStepHeader_div_6_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 12);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementContainer"](1, 13);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngTemplateOutlet", ctx_r2._templateLabel().template);
        }
      }

      function MatStepHeader_div_7_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 12);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate"](ctx_r3.label);
        }
      }

      function MatStepHeader_div_8_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 14);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate"](ctx_r4._intl.optionalLabel);
        }
      }

      function MatStepHeader_div_9_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 15);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var ctx_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate"](ctx_r5.errorMessage);
        }
      }

      function MatStep_ng_template_0_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵprojection"](0);
        }
      }

      var _c0 = ["*"];

      function MatHorizontalStepper_ng_container_1_div_2_Template(rf, ctx) {
        if (rf & 1) {
          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](0, "div", 6);
        }
      }

      function MatHorizontalStepper_ng_container_1_Template(rf, ctx) {
        if (rf & 1) {
          var _r8 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementContainerStart"](0);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](1, "mat-step-header", 4);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function MatHorizontalStepper_ng_container_1_Template_mat_step_header_click_1_listener() {
            var step_r2 = ctx.$implicit;
            return step_r2.select();
          })("keydown", function MatHorizontalStepper_ng_container_1_Template_mat_step_header_keydown_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r8);

            var ctx_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]();

            return ctx_r7._onKeydown($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](2, MatHorizontalStepper_ng_container_1_div_2_Template, 1, 0, "div", 5);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementContainerEnd"]();
        }

        if (rf & 2) {
          var step_r2 = ctx.$implicit;
          var i_r3 = ctx.index;
          var isLast_r4 = ctx.last;

          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("tabIndex", ctx_r0._getFocusIndex() === i_r3 ? 0 : -1)("id", ctx_r0._getStepLabelId(i_r3))("index", i_r3)("state", ctx_r0._getIndicatorType(i_r3, step_r2.state))("label", step_r2.stepLabel || step_r2.label)("selected", ctx_r0.selectedIndex === i_r3)("active", step_r2.completed || ctx_r0.selectedIndex === i_r3 || !ctx_r0.linear)("optional", step_r2.optional)("errorMessage", step_r2.errorMessage)("iconOverrides", ctx_r0._iconOverrides)("disableRipple", ctx_r0.disableRipple)("color", step_r2.color || ctx_r0.color);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵattribute"]("aria-posinset", i_r3 + 1)("aria-setsize", ctx_r0.steps.length)("aria-controls", ctx_r0._getStepContentId(i_r3))("aria-selected", ctx_r0.selectedIndex == i_r3)("aria-label", step_r2.ariaLabel || null)("aria-labelledby", !step_r2.ariaLabel && step_r2.ariaLabelledby ? step_r2.ariaLabelledby : null);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", !isLast_r4);
        }
      }

      function MatHorizontalStepper_div_3_Template(rf, ctx) {
        if (rf & 1) {
          var _r12 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 7);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("@stepTransition.done", function MatHorizontalStepper_div_3_Template_div_animation_stepTransition_done_0_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r12);

            var ctx_r11 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]();

            return ctx_r11._animationDone.next($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementContainer"](1, 8);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var step_r9 = ctx.$implicit;
          var i_r10 = ctx.index;

          var ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("@stepTransition", ctx_r1._getAnimationDirection(i_r10))("id", ctx_r1._getStepContentId(i_r10));

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵattribute"]("aria-labelledby", ctx_r1._getStepLabelId(i_r10))("aria-expanded", ctx_r1.selectedIndex === i_r10);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngTemplateOutlet", step_r9.content);
        }
      }

      function MatVerticalStepper_div_0_Template(rf, ctx) {
        if (rf & 1) {
          var _r6 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetCurrentView"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 1);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](1, "mat-step-header", 2);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function MatVerticalStepper_div_0_Template_mat_step_header_click_1_listener() {
            var step_r1 = ctx.$implicit;
            return step_r1.select();
          })("keydown", function MatVerticalStepper_div_0_Template_mat_step_header_keydown_1_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r6);

            var ctx_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]();

            return ctx_r5._onKeydown($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](2, "div", 3);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](3, "div", 4);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("@stepTransition.done", function MatVerticalStepper_div_0_Template_div_animation_stepTransition_done_3_listener($event) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r6);

            var ctx_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]();

            return ctx_r7._animationDone.next($event);
          });

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](4, "div", 5);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementContainer"](5, 6);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();
        }

        if (rf & 2) {
          var step_r1 = ctx.$implicit;
          var i_r2 = ctx.index;
          var isLast_r3 = ctx.last;

          var ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]();

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("tabIndex", ctx_r0._getFocusIndex() == i_r2 ? 0 : -1)("id", ctx_r0._getStepLabelId(i_r2))("index", i_r2)("state", ctx_r0._getIndicatorType(i_r2, step_r1.state))("label", step_r1.stepLabel || step_r1.label)("selected", ctx_r0.selectedIndex === i_r2)("active", step_r1.completed || ctx_r0.selectedIndex === i_r2 || !ctx_r0.linear)("optional", step_r1.optional)("errorMessage", step_r1.errorMessage)("iconOverrides", ctx_r0._iconOverrides)("disableRipple", ctx_r0.disableRipple)("color", step_r1.color || ctx_r0.color);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵattribute"]("aria-posinset", i_r2 + 1)("aria-setsize", ctx_r0.steps.length)("aria-controls", ctx_r0._getStepContentId(i_r2))("aria-selected", ctx_r0.selectedIndex === i_r2)("aria-label", step_r1.ariaLabel || null)("aria-labelledby", !step_r1.ariaLabel && step_r1.ariaLabelledby ? step_r1.ariaLabelledby : null);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵclassProp"]("mat-stepper-vertical-line", !isLast_r3);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("@stepTransition", ctx_r0._getAnimationDirection(i_r2))("id", ctx_r0._getStepContentId(i_r2));

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵattribute"]("aria-labelledby", ctx_r0._getStepLabelId(i_r2))("aria-expanded", ctx_r0.selectedIndex === i_r2);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](2);

          _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngTemplateOutlet", step_r1.content);
        }
      }

      var _c1 = ".mat-stepper-vertical,.mat-stepper-horizontal{display:block}.mat-horizontal-stepper-header-container{white-space:nowrap;display:flex;align-items:center}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header-container{align-items:flex-start}.mat-stepper-horizontal-line{border-top-width:1px;border-top-style:solid;flex:auto;height:0;margin:0 -16px;min-width:32px}.mat-stepper-label-position-bottom .mat-stepper-horizontal-line{margin:0;min-width:0;position:relative}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px)}.mat-horizontal-stepper-header{display:flex;height:72px;overflow:hidden;align-items:center;padding:0 24px}.mat-horizontal-stepper-header .mat-step-icon{margin-right:8px;flex:none}[dir=rtl] .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:8px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header{box-sizing:border-box;flex-direction:column;height:auto}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{right:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before{left:0}[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:last-child::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:first-child::after{display:none}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-label{padding:16px 0 0 0;text-align:center;width:100%}.mat-vertical-stepper-header{display:flex;align-items:center;height:24px}.mat-vertical-stepper-header .mat-step-icon{margin-right:12px}[dir=rtl] .mat-vertical-stepper-header .mat-step-icon{margin-right:0;margin-left:12px}.mat-horizontal-stepper-content{outline:0}.mat-horizontal-stepper-content[aria-expanded=false]{height:0;overflow:hidden}.mat-horizontal-content-container{overflow:hidden;padding:0 24px 24px 24px}.mat-vertical-content-container{margin-left:36px;border:0;position:relative}[dir=rtl] .mat-vertical-content-container{margin-left:0;margin-right:36px}.mat-stepper-vertical-line::before{content:\"\";position:absolute;left:0;border-left-width:1px;border-left-style:solid}[dir=rtl] .mat-stepper-vertical-line::before{left:auto;right:0}.mat-vertical-stepper-content{overflow:hidden;outline:0}.mat-vertical-content{padding:0 24px 24px 24px}.mat-step:last-child .mat-vertical-content-container{border:none}\n";

      var MatStepLabel = /*#__PURE__*/function (_angular_cdk_stepper_) {
        _inherits2(MatStepLabel, _angular_cdk_stepper_);

        var _super398 = _createSuper(MatStepLabel);

        function MatStepLabel() {
          _classCallCheck2(this, MatStepLabel);

          return _super398.apply(this, arguments);
        }

        return MatStepLabel;
      }(_angular_cdk_stepper__WEBPACK_IMPORTED_MODULE_1__["CdkStepLabel"]);

      MatStepLabel.ɵfac = function MatStepLabel_Factory(t) {
        return ɵMatStepLabel_BaseFactory(t || MatStepLabel);
      };

      MatStepLabel.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: MatStepLabel,
        selectors: [["", "matStepLabel", ""]],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵInheritDefinitionFeature"]]
      });

      var ɵMatStepLabel_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetInheritedFactory"](MatStepLabel);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](MatStepLabel, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: '[matStepLabel]'
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Stepper data that is required for internationalization. */


      var MatStepperIntl = function MatStepperIntl() {
        _classCallCheck2(this, MatStepperIntl);

        /**
         * Stream that emits whenever the labels here are changed. Use this to notify
         * components if the labels have changed after initialization.
         */
        this.changes = new rxjs__WEBPACK_IMPORTED_MODULE_8__["Subject"]();
        /** Label that is rendered below optional steps. */

        this.optionalLabel = 'Optional';
      };

      MatStepperIntl.ɵfac = function MatStepperIntl_Factory(t) {
        return new (t || MatStepperIntl)();
      };

      MatStepperIntl.ɵprov = Object(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineInjectable"])({
        factory: function MatStepperIntl_Factory() {
          return new MatStepperIntl();
        },
        token: MatStepperIntl,
        providedIn: "root"
      });

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](MatStepperIntl, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Injectable"],
          args: [{
            providedIn: 'root'
          }]
        }], function () {
          return [];
        }, null);
      })();
      /** @docs-private */


      function MAT_STEPPER_INTL_PROVIDER_FACTORY(parentIntl) {
        return parentIntl || new MatStepperIntl();
      }
      /** @docs-private */


      var MAT_STEPPER_INTL_PROVIDER = {
        provide: MatStepperIntl,
        deps: [[new _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"](), new _angular_core__WEBPACK_IMPORTED_MODULE_3__["SkipSelf"](), MatStepperIntl]],
        useFactory: MAT_STEPPER_INTL_PROVIDER_FACTORY
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      // Boilerplate for applying mixins to MatStepHeader.

      /** @docs-private */

      var MatStepHeaderBase = /*#__PURE__*/function (_angular_cdk_stepper_2) {
        _inherits2(MatStepHeaderBase, _angular_cdk_stepper_2);

        var _super399 = _createSuper(MatStepHeaderBase);

        function MatStepHeaderBase(elementRef) {
          _classCallCheck2(this, MatStepHeaderBase);

          return _super399.call(this, elementRef);
        }

        return MatStepHeaderBase;
      }(_angular_cdk_stepper__WEBPACK_IMPORTED_MODULE_1__["CdkStepHeader"]);

      var _MatStepHeaderMixinBase = Object(_angular_material_core__WEBPACK_IMPORTED_MODULE_5__["mixinColor"])(MatStepHeaderBase, 'primary');

      var MatStepHeader = /*#__PURE__*/function (_MatStepHeaderMixinBa) {
        _inherits2(MatStepHeader, _MatStepHeaderMixinBa);

        var _super400 = _createSuper(MatStepHeader);

        function MatStepHeader(_intl, _focusMonitor, _elementRef, changeDetectorRef) {
          var _this1024;

          _classCallCheck2(this, MatStepHeader);

          _this1024 = _super400.call(this, _elementRef);
          _this1024._intl = _intl;
          _this1024._focusMonitor = _focusMonitor;
          _this1024._intlSubscription = _intl.changes.subscribe(function () {
            return changeDetectorRef.markForCheck();
          });
          return _this1024;
        }

        _createClass2(MatStepHeader, [{
          key: "ngAfterViewInit",
          value: function ngAfterViewInit() {
            this._focusMonitor.monitor(this._elementRef, true);
          }
        }, {
          key: "ngOnDestroy",
          value: function ngOnDestroy() {
            this._intlSubscription.unsubscribe();

            this._focusMonitor.stopMonitoring(this._elementRef);
          }
          /** Focuses the step header. */

        }, {
          key: "focus",
          value: function focus(origin, options) {
            if (origin) {
              this._focusMonitor.focusVia(this._elementRef, origin, options);
            } else {
              this._elementRef.nativeElement.focus(options);
            }
          }
          /** Returns string label of given step if it is a text label. */

        }, {
          key: "_stringLabel",
          value: function _stringLabel() {
            return this.label instanceof MatStepLabel ? null : this.label;
          }
          /** Returns MatStepLabel if the label of given step is a template label. */

        }, {
          key: "_templateLabel",
          value: function _templateLabel() {
            return this.label instanceof MatStepLabel ? this.label : null;
          }
          /** Returns the host HTML element. */

        }, {
          key: "_getHostElement",
          value: function _getHostElement() {
            return this._elementRef.nativeElement;
          }
          /** Template context variables that are exposed to the `matStepperIcon` instances. */

        }, {
          key: "_getIconContext",
          value: function _getIconContext() {
            return {
              index: this.index,
              active: this.active,
              optional: this.optional
            };
          }
        }, {
          key: "_getDefaultTextForState",
          value: function _getDefaultTextForState(state) {
            if (state == 'number') {
              return "".concat(this.index + 1);
            }

            if (state == 'edit') {
              return 'create';
            }

            if (state == 'error') {
              return 'warning';
            }

            return state;
          }
        }]);

        return MatStepHeader;
      }(_MatStepHeaderMixinBase);

      MatStepHeader.ɵfac = function MatStepHeader_Factory(t) {
        return new (t || MatStepHeader)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](MatStepperIntl), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_7__["FocusMonitor"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"]));
      };

      MatStepHeader.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineComponent"]({
        type: MatStepHeader,
        selectors: [["mat-step-header"]],
        hostAttrs: ["role", "tab", 1, "mat-step-header", "mat-focus-indicator"],
        inputs: {
          color: "color",
          state: "state",
          label: "label",
          errorMessage: "errorMessage",
          iconOverrides: "iconOverrides",
          index: "index",
          selected: "selected",
          active: "active",
          optional: "optional",
          disableRipple: "disableRipple"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵInheritDefinitionFeature"]],
        decls: 10,
        vars: 19,
        consts: [["matRipple", "", 1, "mat-step-header-ripple", 3, "matRippleTrigger", "matRippleDisabled"], [1, "mat-step-icon-content", 3, "ngSwitch"], [3, "ngTemplateOutlet", "ngTemplateOutletContext", 4, "ngSwitchCase"], [3, "ngSwitch", 4, "ngSwitchDefault"], [1, "mat-step-label"], ["class", "mat-step-text-label", 4, "ngIf"], ["class", "mat-step-optional", 4, "ngIf"], ["class", "mat-step-sub-label-error", 4, "ngIf"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], [3, "ngSwitch"], [4, "ngSwitchCase"], [4, "ngSwitchDefault"], [1, "mat-step-text-label"], [3, "ngTemplateOutlet"], [1, "mat-step-optional"], [1, "mat-step-sub-label-error"]],
        template: function MatStepHeader_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](0, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](1, "div");

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](2, "div", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](3, MatStepHeader_ng_container_3_Template, 1, 2, "ng-container", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](4, MatStepHeader_ng_container_4_Template, 3, 2, "ng-container", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](5, "div", 4);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](6, MatStepHeader_div_6_Template, 2, 1, "div", 5);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](7, MatStepHeader_div_7_Template, 2, 1, "div", 5);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](8, MatStepHeader_div_8_Template, 2, 1, "div", 6);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](9, MatStepHeader_div_9_Template, 2, 1, "div", 7);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("matRippleTrigger", ctx._getHostElement())("matRippleDisabled", ctx.disableRipple);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵclassMapInterpolate1"]("mat-step-icon-state-", ctx.state, " mat-step-icon");

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵclassProp"]("mat-step-icon-selected", ctx.selected);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngSwitch", !!(ctx.iconOverrides && ctx.iconOverrides[ctx.state]));

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngSwitchCase", true);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵclassProp"]("mat-step-label-active", ctx.active)("mat-step-label-selected", ctx.selected)("mat-step-label-error", ctx.state == "error");

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", ctx._templateLabel());

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", ctx._stringLabel());

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", ctx.optional && ctx.state != "error");

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", ctx.state == "error");
          }
        },
        directives: [_angular_material_core__WEBPACK_IMPORTED_MODULE_5__["MatRipple"], _angular_common__WEBPACK_IMPORTED_MODULE_2__["NgSwitch"], _angular_common__WEBPACK_IMPORTED_MODULE_2__["NgSwitchCase"], _angular_common__WEBPACK_IMPORTED_MODULE_2__["NgSwitchDefault"], _angular_common__WEBPACK_IMPORTED_MODULE_2__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_2__["NgTemplateOutlet"], _angular_material_icon__WEBPACK_IMPORTED_MODULE_6__["MatIcon"]],
        styles: [".mat-step-header{overflow:hidden;outline:none;cursor:pointer;position:relative;box-sizing:content-box;-webkit-tap-highlight-color:transparent}.mat-step-optional,.mat-step-sub-label-error{font-size:12px}.mat-step-icon{border-radius:50%;height:24px;width:24px;flex-shrink:0;position:relative}.mat-step-icon-content,.mat-step-icon .mat-icon{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.mat-step-icon .mat-icon{font-size:16px;height:16px;width:16px}.mat-step-icon-state-error .mat-icon{font-size:24px;height:24px;width:24px}.mat-step-label{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:50px;vertical-align:middle}.mat-step-text-label{text-overflow:ellipsis;overflow:hidden}.mat-step-header .mat-step-header-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}\n"],
        encapsulation: 2,
        changeDetection: 0
      });

      MatStepHeader.ctorParameters = function () {
        return [{
          type: MatStepperIntl
        }, {
          type: _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_7__["FocusMonitor"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"]
        }];
      };

      MatStepHeader.propDecorators = {
        state: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }],
        label: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }],
        errorMessage: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }],
        iconOverrides: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }],
        index: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }],
        selected: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }],
        active: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }],
        optional: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }],
        disableRipple: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](MatStepHeader, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Component"],
          args: [{
            selector: 'mat-step-header',
            template: "<div class=\"mat-step-header-ripple\" matRipple\n     [matRippleTrigger]=\"_getHostElement()\"\n     [matRippleDisabled]=\"disableRipple\"></div>\n\n<div class=\"mat-step-icon-state-{{state}} mat-step-icon\" [class.mat-step-icon-selected]=\"selected\">\n  <div class=\"mat-step-icon-content\" [ngSwitch]=\"!!(iconOverrides && iconOverrides[state])\">\n    <ng-container\n      *ngSwitchCase=\"true\"\n      [ngTemplateOutlet]=\"iconOverrides[state]\"\n      [ngTemplateOutletContext]=\"_getIconContext()\"></ng-container>\n    <ng-container *ngSwitchDefault [ngSwitch]=\"state\">\n      <span *ngSwitchCase=\"'number'\">{{_getDefaultTextForState(state)}}</span>\n      <mat-icon *ngSwitchDefault>{{_getDefaultTextForState(state)}}</mat-icon>\n    </ng-container>\n  </div>\n</div>\n<div class=\"mat-step-label\"\n     [class.mat-step-label-active]=\"active\"\n     [class.mat-step-label-selected]=\"selected\"\n     [class.mat-step-label-error]=\"state == 'error'\">\n  <!-- If there is a label template, use it. -->\n  <div class=\"mat-step-text-label\" *ngIf=\"_templateLabel()\">\n    <ng-container [ngTemplateOutlet]=\"_templateLabel()!.template\"></ng-container>\n  </div>\n  <!-- If there is no label template, fall back to the text label. -->\n  <div class=\"mat-step-text-label\" *ngIf=\"_stringLabel()\">{{label}}</div>\n\n  <div class=\"mat-step-optional\" *ngIf=\"optional && state != 'error'\">{{_intl.optionalLabel}}</div>\n  <div class=\"mat-step-sub-label-error\" *ngIf=\"state == 'error'\">{{errorMessage}}</div>\n</div>\n\n",
            inputs: ['color'],
            host: {
              'class': 'mat-step-header mat-focus-indicator',
              'role': 'tab'
            },
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewEncapsulation"].None,
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectionStrategy"].OnPush,
            styles: [".mat-step-header{overflow:hidden;outline:none;cursor:pointer;position:relative;box-sizing:content-box;-webkit-tap-highlight-color:transparent}.mat-step-optional,.mat-step-sub-label-error{font-size:12px}.mat-step-icon{border-radius:50%;height:24px;width:24px;flex-shrink:0;position:relative}.mat-step-icon-content,.mat-step-icon .mat-icon{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.mat-step-icon .mat-icon{font-size:16px;height:16px;width:16px}.mat-step-icon-state-error .mat-icon{font-size:24px;height:24px;width:24px}.mat-step-label{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:50px;vertical-align:middle}.mat-step-text-label{text-overflow:ellipsis;overflow:hidden}.mat-step-header .mat-step-header-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}\n"]
          }]
        }], function () {
          return [{
            type: MatStepperIntl
          }, {
            type: _angular_cdk_a11y__WEBPACK_IMPORTED_MODULE_7__["FocusMonitor"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"]
          }];
        }, {
          state: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }],
          label: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }],
          errorMessage: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }],
          iconOverrides: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }],
          index: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }],
          selected: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }],
          active: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }],
          optional: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }],
          disableRipple: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Animations used by the Material steppers.
       * @docs-private
       */


      var matStepperAnimations = {
        /** Animation that transitions the step along the X axis in a horizontal stepper. */
        horizontalStepTransition: Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["trigger"])('stepTransition', [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["state"])('previous', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["style"])({
          transform: 'translate3d(-100%, 0, 0)',
          visibility: 'hidden'
        })), // Transition to '', rather than `visible`, because visibility on a child element overrides
        // the one from the parent, making this element focusable inside of a `hidden` element.
        Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["state"])('current', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["style"])({
          transform: 'none',
          visibility: ''
        })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["state"])('next', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["style"])({
          transform: 'translate3d(100%, 0, 0)',
          visibility: 'hidden'
        })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["transition"])('* => *', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["animate"])('500ms cubic-bezier(0.35, 0, 0.25, 1)'))]),

        /** Animation that transitions the step along the Y axis in a vertical stepper. */
        verticalStepTransition: Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["trigger"])('stepTransition', [Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["state"])('previous', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["style"])({
          height: '0px',
          visibility: 'hidden'
        })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["state"])('next', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["style"])({
          height: '0px',
          visibility: 'hidden'
        })), // Transition to '', rather than `visible`, because visibility on a child element overrides
        // the one from the parent, making this element focusable inside of a `hidden` element.
        Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["state"])('current', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["style"])({
          height: '*',
          visibility: ''
        })), Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["transition"])('* <=> current', Object(_angular_animations__WEBPACK_IMPORTED_MODULE_11__["animate"])('225ms cubic-bezier(0.4, 0.0, 0.2, 1)'))])
      };
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Template to be used to override the icons inside the step header.
       */

      var MatStepperIcon = function MatStepperIcon(templateRef) {
        _classCallCheck2(this, MatStepperIcon);

        this.templateRef = templateRef;
      };

      MatStepperIcon.ɵfac = function MatStepperIcon_Factory(t) {
        return new (t || MatStepperIcon)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]));
      };

      MatStepperIcon.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: MatStepperIcon,
        selectors: [["ng-template", "matStepperIcon", ""]],
        inputs: {
          name: ["matStepperIcon", "name"]
        }
      });

      MatStepperIcon.ctorParameters = function () {
        return [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]
        }];
      };

      MatStepperIcon.propDecorators = {
        name: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"],
          args: ['matStepperIcon']
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](MatStepperIcon, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: 'ng-template[matStepperIcon]'
          }]
        }], function () {
          return [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["TemplateRef"]
          }];
        }, {
          name: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"],
            args: ['matStepperIcon']
          }]
        });
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var MatStep = /*#__PURE__*/function (_angular_cdk_stepper_3) {
        _inherits2(MatStep, _angular_cdk_stepper_3);

        var _super401 = _createSuper(MatStep);

        /** @breaking-change 8.0.0 remove the `?` after `stepperOptions` */
        function MatStep(stepper, _errorStateMatcher, stepperOptions) {
          var _this1025;

          _classCallCheck2(this, MatStep);

          _this1025 = _super401.call(this, stepper, stepperOptions);
          _this1025._errorStateMatcher = _errorStateMatcher;
          return _this1025;
        }
        /** Custom error state matcher that additionally checks for validity of interacted form. */


        _createClass2(MatStep, [{
          key: "isErrorState",
          value: function isErrorState(control, form) {
            var originalErrorState = this._errorStateMatcher.isErrorState(control, form); // Custom error state checks for the validity of form that is not submitted or touched
            // since user can trigger a form change by calling for another step without directly
            // interacting with the current form.


            var customErrorState = !!(control && control.invalid && this.interacted);
            return originalErrorState || customErrorState;
          }
        }]);

        return MatStep;
      }(_angular_cdk_stepper__WEBPACK_IMPORTED_MODULE_1__["CdkStep"]);

      MatStep.ɵfac = function MatStep_Factory(t) {
        return new (t || MatStep)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](Object(_angular_core__WEBPACK_IMPORTED_MODULE_3__["forwardRef"])(function () {
          return MatStepper;
        })), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_material_core__WEBPACK_IMPORTED_MODULE_5__["ErrorStateMatcher"], 4), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_cdk_stepper__WEBPACK_IMPORTED_MODULE_1__["STEPPER_GLOBAL_OPTIONS"], 8));
      };

      MatStep.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineComponent"]({
        type: MatStep,
        selectors: [["mat-step"]],
        contentQueries: function MatStep_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵcontentQuery"](dirIndex, MatStepLabel, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx.stepLabel = _t.first);
          }
        },
        inputs: {
          color: "color"
        },
        exportAs: ["matStep"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵProvidersFeature"]([{
          provide: _angular_material_core__WEBPACK_IMPORTED_MODULE_5__["ErrorStateMatcher"],
          useExisting: MatStep
        }, {
          provide: _angular_cdk_stepper__WEBPACK_IMPORTED_MODULE_1__["CdkStep"],
          useExisting: MatStep
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵInheritDefinitionFeature"]],
        ngContentSelectors: _c0,
        decls: 1,
        vars: 0,
        template: function MatStep_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵprojectionDef"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](0, MatStep_ng_template_0_Template, 1, 0, "ng-template");
          }
        },
        encapsulation: 2,
        changeDetection: 0
      });

      MatStep.ctorParameters = function () {
        return [{
          type: MatStepper,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
            args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_3__["forwardRef"])(function () {
              return MatStepper;
            })]
          }]
        }, {
          type: _angular_material_core__WEBPACK_IMPORTED_MODULE_5__["ErrorStateMatcher"],
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["SkipSelf"]
          }]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
            args: [_angular_cdk_stepper__WEBPACK_IMPORTED_MODULE_1__["STEPPER_GLOBAL_OPTIONS"]]
          }]
        }];
      };

      MatStep.propDecorators = {
        stepLabel: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChild"],
          args: [MatStepLabel]
        }],
        color: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }]
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](MatStep, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Component"],
          args: [{
            selector: 'mat-step',
            template: "<ng-template><ng-content></ng-content></ng-template>\n",
            providers: [{
              provide: _angular_material_core__WEBPACK_IMPORTED_MODULE_5__["ErrorStateMatcher"],
              useExisting: MatStep
            }, {
              provide: _angular_cdk_stepper__WEBPACK_IMPORTED_MODULE_1__["CdkStep"],
              useExisting: MatStep
            }],
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewEncapsulation"].None,
            exportAs: 'matStep',
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectionStrategy"].OnPush
          }]
        }], function () {
          return [{
            type: MatStepper,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
              args: [Object(_angular_core__WEBPACK_IMPORTED_MODULE_3__["forwardRef"])(function () {
                return MatStepper;
              })]
            }]
          }, {
            type: _angular_material_core__WEBPACK_IMPORTED_MODULE_5__["ErrorStateMatcher"],
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["SkipSelf"]
            }]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
            }, {
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
              args: [_angular_cdk_stepper__WEBPACK_IMPORTED_MODULE_1__["STEPPER_GLOBAL_OPTIONS"]]
            }]
          }];
        }, {
          stepLabel: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChild"],
            args: [MatStepLabel]
          }],
          color: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }]
        });
      })();

      var MatStepper = /*#__PURE__*/function (_angular_cdk_stepper_4) {
        _inherits2(MatStepper, _angular_cdk_stepper_4);

        var _super402 = _createSuper(MatStepper);

        function MatStepper() {
          var _this1026;

          _classCallCheck2(this, MatStepper);

          _this1026 = _super402.apply(this, arguments);
          /** Steps that belong to the current stepper, excluding ones from nested steppers. */

          _this1026.steps = new _angular_core__WEBPACK_IMPORTED_MODULE_3__["QueryList"]();
          /** Event emitted when the current step is done transitioning in. */

          _this1026.animationDone = new _angular_core__WEBPACK_IMPORTED_MODULE_3__["EventEmitter"]();
          /** Consumer-specified template-refs to be used to override the header icons. */

          _this1026._iconOverrides = {};
          /** Stream of animation `done` events when the body expands/collapses. */

          _this1026._animationDone = new rxjs__WEBPACK_IMPORTED_MODULE_8__["Subject"]();
          return _this1026;
        }

        _createClass2(MatStepper, [{
          key: "ngAfterContentInit",
          value: function ngAfterContentInit() {
            var _this1027 = this;

            _get2(_getPrototypeOf2(MatStepper.prototype), "ngAfterContentInit", this).call(this);

            this._icons.forEach(function (_ref150) {
              var name = _ref150.name,
                  templateRef = _ref150.templateRef;
              return _this1027._iconOverrides[name] = templateRef;
            }); // Mark the component for change detection whenever the content children query changes


            this.steps.changes.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_10__["takeUntil"])(this._destroyed)).subscribe(function () {
              _this1027._stateChanged();
            });

            this._animationDone.pipe( // This needs a `distinctUntilChanged` in order to avoid emitting the same event twice due
            // to a bug in animations where the `.done` callback gets invoked twice on some browsers.
            // See https://github.com/angular/angular/issues/24084
            Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_10__["distinctUntilChanged"])(function (x, y) {
              return x.fromState === y.fromState && x.toState === y.toState;
            }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_10__["takeUntil"])(this._destroyed)).subscribe(function (event) {
              if (event.toState === 'current') {
                _this1027.animationDone.emit();
              }
            });
          }
        }]);

        return MatStepper;
      }(_angular_cdk_stepper__WEBPACK_IMPORTED_MODULE_1__["CdkStepper"]);

      MatStepper.ɵfac = function MatStepper_Factory(t) {
        return ɵMatStepper_BaseFactory(t || MatStepper);
      };

      MatStepper.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: MatStepper,
        selectors: [["", "matStepper", ""]],
        contentQueries: function MatStepper_ContentQueries(rf, ctx, dirIndex) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵcontentQuery"](dirIndex, MatStep, 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵcontentQuery"](dirIndex, MatStepperIcon, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx._steps = _t);
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx._icons = _t);
          }
        },
        viewQuery: function MatStepper_Query(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵviewQuery"](MatStepHeader, 1);
          }

          if (rf & 2) {
            var _t;

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵloadQuery"]()) && (ctx._stepHeader = _t);
          }
        },
        inputs: {
          disableRipple: "disableRipple",
          color: "color"
        },
        outputs: {
          animationDone: "animationDone"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵProvidersFeature"]([{
          provide: _angular_cdk_stepper__WEBPACK_IMPORTED_MODULE_1__["CdkStepper"],
          useExisting: MatStepper
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵInheritDefinitionFeature"]]
      });
      MatStepper.propDecorators = {
        _stepHeader: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChildren"],
          args: [MatStepHeader]
        }],
        _steps: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChildren"],
          args: [MatStep, {
            descendants: true
          }]
        }],
        _icons: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChildren"],
          args: [MatStepperIcon, {
            descendants: true
          }]
        }],
        animationDone: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Output"]
        }],
        disableRipple: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }],
        color: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }]
      };

      var ɵMatStepper_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetInheritedFactory"](MatStepper);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](MatStepper, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: '[matStepper]',
            providers: [{
              provide: _angular_cdk_stepper__WEBPACK_IMPORTED_MODULE_1__["CdkStepper"],
              useExisting: MatStepper
            }]
          }]
        }], null, {
          animationDone: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Output"]
          }],
          _stepHeader: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewChildren"],
            args: [MatStepHeader]
          }],
          _steps: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChildren"],
            args: [MatStep, {
              descendants: true
            }]
          }],
          _icons: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ContentChildren"],
            args: [MatStepperIcon, {
              descendants: true
            }]
          }],
          disableRipple: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }],
          color: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }]
        });
      })();

      var MatHorizontalStepper = /*#__PURE__*/function (_MatStepper) {
        _inherits2(MatHorizontalStepper, _MatStepper);

        var _super403 = _createSuper(MatHorizontalStepper);

        function MatHorizontalStepper() {
          var _this1028;

          _classCallCheck2(this, MatHorizontalStepper);

          _this1028 = _super403.apply(this, arguments);
          /** Whether the label should display in bottom or end position. */

          _this1028.labelPosition = 'end';
          return _this1028;
        }

        return MatHorizontalStepper;
      }(MatStepper);

      MatHorizontalStepper.ɵfac = function MatHorizontalStepper_Factory(t) {
        return ɵMatHorizontalStepper_BaseFactory(t || MatHorizontalStepper);
      };

      MatHorizontalStepper.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineComponent"]({
        type: MatHorizontalStepper,
        selectors: [["mat-horizontal-stepper"]],
        hostAttrs: ["aria-orientation", "horizontal", "role", "tablist", 1, "mat-stepper-horizontal"],
        hostVars: 4,
        hostBindings: function MatHorizontalStepper_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵclassProp"]("mat-stepper-label-position-end", ctx.labelPosition == "end")("mat-stepper-label-position-bottom", ctx.labelPosition == "bottom");
          }
        },
        inputs: {
          selectedIndex: "selectedIndex",
          labelPosition: "labelPosition"
        },
        exportAs: ["matHorizontalStepper"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵProvidersFeature"]([{
          provide: MatStepper,
          useExisting: MatHorizontalStepper
        }, {
          provide: _angular_cdk_stepper__WEBPACK_IMPORTED_MODULE_1__["CdkStepper"],
          useExisting: MatHorizontalStepper
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵInheritDefinitionFeature"]],
        decls: 4,
        vars: 2,
        consts: [[1, "mat-horizontal-stepper-header-container"], [4, "ngFor", "ngForOf"], [1, "mat-horizontal-content-container"], ["class", "mat-horizontal-stepper-content", "role", "tabpanel", 3, "id", 4, "ngFor", "ngForOf"], [1, "mat-horizontal-stepper-header", 3, "tabIndex", "id", "index", "state", "label", "selected", "active", "optional", "errorMessage", "iconOverrides", "disableRipple", "color", "click", "keydown"], ["class", "mat-stepper-horizontal-line", 4, "ngIf"], [1, "mat-stepper-horizontal-line"], ["role", "tabpanel", 1, "mat-horizontal-stepper-content", 3, "id"], [3, "ngTemplateOutlet"]],
        template: function MatHorizontalStepper_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 0);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](1, MatHorizontalStepper_ng_container_1_Template, 3, 19, "ng-container", 1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](2, "div", 2);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](3, MatHorizontalStepper_div_3_Template, 2, 5, "div", 3);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]();
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](1);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngForOf", ctx.steps);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](2);

            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngForOf", ctx.steps);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["NgForOf"], MatStepHeader, _angular_common__WEBPACK_IMPORTED_MODULE_2__["NgIf"], _angular_common__WEBPACK_IMPORTED_MODULE_2__["NgTemplateOutlet"]],
        styles: [_c1],
        encapsulation: 2,
        data: {
          animation: [matStepperAnimations.horizontalStepTransition]
        },
        changeDetection: 0
      });
      MatHorizontalStepper.propDecorators = {
        labelPosition: [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
        }]
      };

      var ɵMatHorizontalStepper_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetInheritedFactory"](MatHorizontalStepper);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](MatHorizontalStepper, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Component"],
          args: [{
            selector: 'mat-horizontal-stepper',
            exportAs: 'matHorizontalStepper',
            template: "<div class=\"mat-horizontal-stepper-header-container\">\n  <ng-container *ngFor=\"let step of steps; let i = index; let isLast = last\">\n    <mat-step-header class=\"mat-horizontal-stepper-header\"\n                     (click)=\"step.select()\"\n                     (keydown)=\"_onKeydown($event)\"\n                     [tabIndex]=\"_getFocusIndex() === i ? 0 : -1\"\n                     [id]=\"_getStepLabelId(i)\"\n                     [attr.aria-posinset]=\"i + 1\"\n                     [attr.aria-setsize]=\"steps.length\"\n                     [attr.aria-controls]=\"_getStepContentId(i)\"\n                     [attr.aria-selected]=\"selectedIndex == i\"\n                     [attr.aria-label]=\"step.ariaLabel || null\"\n                     [attr.aria-labelledby]=\"(!step.ariaLabel && step.ariaLabelledby) ? step.ariaLabelledby : null\"\n                     [index]=\"i\"\n                     [state]=\"_getIndicatorType(i, step.state)\"\n                     [label]=\"step.stepLabel || step.label\"\n                     [selected]=\"selectedIndex === i\"\n                     [active]=\"step.completed || selectedIndex === i || !linear\"\n                     [optional]=\"step.optional\"\n                     [errorMessage]=\"step.errorMessage\"\n                     [iconOverrides]=\"_iconOverrides\"\n                     [disableRipple]=\"disableRipple\"\n                     [color]=\"step.color || color\">\n    </mat-step-header>\n    <div *ngIf=\"!isLast\" class=\"mat-stepper-horizontal-line\"></div>\n  </ng-container>\n</div>\n\n<div class=\"mat-horizontal-content-container\">\n  <div *ngFor=\"let step of steps; let i = index\"\n       class=\"mat-horizontal-stepper-content\" role=\"tabpanel\"\n       [@stepTransition]=\"_getAnimationDirection(i)\"\n       (@stepTransition.done)=\"_animationDone.next($event)\"\n       [id]=\"_getStepContentId(i)\"\n       [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n       [attr.aria-expanded]=\"selectedIndex === i\">\n    <ng-container [ngTemplateOutlet]=\"step.content\"></ng-container>\n  </div>\n</div>\n",
            inputs: ['selectedIndex'],
            host: {
              'class': 'mat-stepper-horizontal',
              '[class.mat-stepper-label-position-end]': 'labelPosition == "end"',
              '[class.mat-stepper-label-position-bottom]': 'labelPosition == "bottom"',
              'aria-orientation': 'horizontal',
              'role': 'tablist'
            },
            animations: [matStepperAnimations.horizontalStepTransition],
            providers: [{
              provide: MatStepper,
              useExisting: MatHorizontalStepper
            }, {
              provide: _angular_cdk_stepper__WEBPACK_IMPORTED_MODULE_1__["CdkStepper"],
              useExisting: MatHorizontalStepper
            }],
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewEncapsulation"].None,
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectionStrategy"].OnPush,
            styles: [".mat-stepper-vertical,.mat-stepper-horizontal{display:block}.mat-horizontal-stepper-header-container{white-space:nowrap;display:flex;align-items:center}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header-container{align-items:flex-start}.mat-stepper-horizontal-line{border-top-width:1px;border-top-style:solid;flex:auto;height:0;margin:0 -16px;min-width:32px}.mat-stepper-label-position-bottom .mat-stepper-horizontal-line{margin:0;min-width:0;position:relative}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px)}.mat-horizontal-stepper-header{display:flex;height:72px;overflow:hidden;align-items:center;padding:0 24px}.mat-horizontal-stepper-header .mat-step-icon{margin-right:8px;flex:none}[dir=rtl] .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:8px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header{box-sizing:border-box;flex-direction:column;height:auto}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{right:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before{left:0}[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:last-child::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:first-child::after{display:none}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-label{padding:16px 0 0 0;text-align:center;width:100%}.mat-vertical-stepper-header{display:flex;align-items:center;height:24px}.mat-vertical-stepper-header .mat-step-icon{margin-right:12px}[dir=rtl] .mat-vertical-stepper-header .mat-step-icon{margin-right:0;margin-left:12px}.mat-horizontal-stepper-content{outline:0}.mat-horizontal-stepper-content[aria-expanded=false]{height:0;overflow:hidden}.mat-horizontal-content-container{overflow:hidden;padding:0 24px 24px 24px}.mat-vertical-content-container{margin-left:36px;border:0;position:relative}[dir=rtl] .mat-vertical-content-container{margin-left:0;margin-right:36px}.mat-stepper-vertical-line::before{content:\"\";position:absolute;left:0;border-left-width:1px;border-left-style:solid}[dir=rtl] .mat-stepper-vertical-line::before{left:auto;right:0}.mat-vertical-stepper-content{overflow:hidden;outline:0}.mat-vertical-content{padding:0 24px 24px 24px}.mat-step:last-child .mat-vertical-content-container{border:none}\n"]
          }]
        }], null, {
          labelPosition: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Input"]
          }]
        });
      })();

      var MatVerticalStepper = /*#__PURE__*/function (_MatStepper2) {
        _inherits2(MatVerticalStepper, _MatStepper2);

        var _super404 = _createSuper(MatVerticalStepper);

        function MatVerticalStepper(dir, changeDetectorRef, // @breaking-change 8.0.0 `elementRef` and `_document` parameters to become required.
        elementRef, _document) {
          var _this1029;

          _classCallCheck2(this, MatVerticalStepper);

          _this1029 = _super404.call(this, dir, changeDetectorRef, elementRef, _document);
          _this1029._orientation = 'vertical';
          return _this1029;
        }

        return MatVerticalStepper;
      }(MatStepper);

      MatVerticalStepper.ɵfac = function MatVerticalStepper_Factory(t) {
        return new (t || MatVerticalStepper)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_9__["Directionality"], 8), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_common__WEBPACK_IMPORTED_MODULE_2__["DOCUMENT"]));
      };

      MatVerticalStepper.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineComponent"]({
        type: MatVerticalStepper,
        selectors: [["mat-vertical-stepper"]],
        hostAttrs: ["aria-orientation", "vertical", "role", "tablist", 1, "mat-stepper-vertical"],
        inputs: {
          selectedIndex: "selectedIndex"
        },
        exportAs: ["matVerticalStepper"],
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵProvidersFeature"]([{
          provide: MatStepper,
          useExisting: MatVerticalStepper
        }, {
          provide: _angular_cdk_stepper__WEBPACK_IMPORTED_MODULE_1__["CdkStepper"],
          useExisting: MatVerticalStepper
        }]), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵInheritDefinitionFeature"]],
        decls: 1,
        vars: 1,
        consts: [["class", "mat-step", 4, "ngFor", "ngForOf"], [1, "mat-step"], [1, "mat-vertical-stepper-header", 3, "tabIndex", "id", "index", "state", "label", "selected", "active", "optional", "errorMessage", "iconOverrides", "disableRipple", "color", "click", "keydown"], [1, "mat-vertical-content-container"], ["role", "tabpanel", 1, "mat-vertical-stepper-content", 3, "id"], [1, "mat-vertical-content"], [3, "ngTemplateOutlet"]],
        template: function MatVerticalStepper_Template(rf, ctx) {
          if (rf & 1) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](0, MatVerticalStepper_div_0_Template, 6, 25, "div", 0);
          }

          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngForOf", ctx.steps);
          }
        },
        directives: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["NgForOf"], MatStepHeader, _angular_common__WEBPACK_IMPORTED_MODULE_2__["NgTemplateOutlet"]],
        styles: [_c1],
        encapsulation: 2,
        data: {
          animation: [matStepperAnimations.verticalStepTransition]
        },
        changeDetection: 0
      });

      MatVerticalStepper.ctorParameters = function () {
        return [{
          type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_9__["Directionality"],
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
          }]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"]
        }, {
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
        }, {
          type: undefined,
          decorators: [{
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
            args: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["DOCUMENT"]]
          }]
        }];
      };

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](MatVerticalStepper, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Component"],
          args: [{
            selector: 'mat-vertical-stepper',
            exportAs: 'matVerticalStepper',
            template: "<div class=\"mat-step\" *ngFor=\"let step of steps; let i = index; let isLast = last\">\n  <mat-step-header class=\"mat-vertical-stepper-header\"\n                   (click)=\"step.select()\"\n                   (keydown)=\"_onKeydown($event)\"\n                   [tabIndex]=\"_getFocusIndex() == i ? 0 : -1\"\n                   [id]=\"_getStepLabelId(i)\"\n                   [attr.aria-posinset]=\"i + 1\"\n                   [attr.aria-setsize]=\"steps.length\"\n                   [attr.aria-controls]=\"_getStepContentId(i)\"\n                   [attr.aria-selected]=\"selectedIndex === i\"\n                   [attr.aria-label]=\"step.ariaLabel || null\"\n                   [attr.aria-labelledby]=\"(!step.ariaLabel && step.ariaLabelledby) ? step.ariaLabelledby : null\"\n                   [index]=\"i\"\n                   [state]=\"_getIndicatorType(i, step.state)\"\n                   [label]=\"step.stepLabel || step.label\"\n                   [selected]=\"selectedIndex === i\"\n                   [active]=\"step.completed || selectedIndex === i || !linear\"\n                   [optional]=\"step.optional\"\n                   [errorMessage]=\"step.errorMessage\"\n                   [iconOverrides]=\"_iconOverrides\"\n                   [disableRipple]=\"disableRipple\"\n                   [color]=\"step.color || color\">\n  </mat-step-header>\n\n  <div class=\"mat-vertical-content-container\" [class.mat-stepper-vertical-line]=\"!isLast\">\n    <div class=\"mat-vertical-stepper-content\" role=\"tabpanel\"\n         [@stepTransition]=\"_getAnimationDirection(i)\"\n         (@stepTransition.done)=\"_animationDone.next($event)\"\n         [id]=\"_getStepContentId(i)\"\n         [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n         [attr.aria-expanded]=\"selectedIndex === i\">\n      <div class=\"mat-vertical-content\">\n        <ng-container [ngTemplateOutlet]=\"step.content\"></ng-container>\n      </div>\n    </div>\n  </div>\n</div>\n",
            inputs: ['selectedIndex'],
            host: {
              'class': 'mat-stepper-vertical',
              'aria-orientation': 'vertical',
              'role': 'tablist'
            },
            animations: [matStepperAnimations.verticalStepTransition],
            providers: [{
              provide: MatStepper,
              useExisting: MatVerticalStepper
            }, {
              provide: _angular_cdk_stepper__WEBPACK_IMPORTED_MODULE_1__["CdkStepper"],
              useExisting: MatVerticalStepper
            }],
            encapsulation: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ViewEncapsulation"].None,
            changeDetection: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectionStrategy"].OnPush,
            styles: [".mat-stepper-vertical,.mat-stepper-horizontal{display:block}.mat-horizontal-stepper-header-container{white-space:nowrap;display:flex;align-items:center}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header-container{align-items:flex-start}.mat-stepper-horizontal-line{border-top-width:1px;border-top-style:solid;flex:auto;height:0;margin:0 -16px;min-width:32px}.mat-stepper-label-position-bottom .mat-stepper-horizontal-line{margin:0;min-width:0;position:relative}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px)}.mat-horizontal-stepper-header{display:flex;height:72px;overflow:hidden;align-items:center;padding:0 24px}.mat-horizontal-stepper-header .mat-step-icon{margin-right:8px;flex:none}[dir=rtl] .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:8px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header{box-sizing:border-box;flex-direction:column;height:auto}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{right:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before{left:0}[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:last-child::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:first-child::after{display:none}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-label{padding:16px 0 0 0;text-align:center;width:100%}.mat-vertical-stepper-header{display:flex;align-items:center;height:24px}.mat-vertical-stepper-header .mat-step-icon{margin-right:12px}[dir=rtl] .mat-vertical-stepper-header .mat-step-icon{margin-right:0;margin-left:12px}.mat-horizontal-stepper-content{outline:0}.mat-horizontal-stepper-content[aria-expanded=false]{height:0;overflow:hidden}.mat-horizontal-content-container{overflow:hidden;padding:0 24px 24px 24px}.mat-vertical-content-container{margin-left:36px;border:0;position:relative}[dir=rtl] .mat-vertical-content-container{margin-left:0;margin-right:36px}.mat-stepper-vertical-line::before{content:\"\";position:absolute;left:0;border-left-width:1px;border-left-style:solid}[dir=rtl] .mat-stepper-vertical-line::before{left:auto;right:0}.mat-vertical-stepper-content{overflow:hidden;outline:0}.mat-vertical-content{padding:0 24px 24px 24px}.mat-step:last-child .mat-vertical-content-container{border:none}\n"]
          }]
        }], function () {
          return [{
            type: _angular_cdk_bidi__WEBPACK_IMPORTED_MODULE_9__["Directionality"],
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Optional"]
            }]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ChangeDetectorRef"]
          }, {
            type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["ElementRef"]
          }, {
            type: undefined,
            decorators: [{
              type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Inject"],
              args: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["DOCUMENT"]]
            }]
          }];
        }, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Button that moves to the next step in a stepper workflow. */


      var MatStepperNext = /*#__PURE__*/function (_angular_cdk_stepper_5) {
        _inherits2(MatStepperNext, _angular_cdk_stepper_5);

        var _super405 = _createSuper(MatStepperNext);

        function MatStepperNext() {
          _classCallCheck2(this, MatStepperNext);

          return _super405.apply(this, arguments);
        }

        return MatStepperNext;
      }(_angular_cdk_stepper__WEBPACK_IMPORTED_MODULE_1__["CdkStepperNext"]);

      MatStepperNext.ɵfac = function MatStepperNext_Factory(t) {
        return ɵMatStepperNext_BaseFactory(t || MatStepperNext);
      };

      MatStepperNext.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: MatStepperNext,
        selectors: [["button", "matStepperNext", ""]],
        hostAttrs: [1, "mat-stepper-next"],
        hostVars: 1,
        hostBindings: function MatStepperNext_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵhostProperty"]("type", ctx.type);
          }
        },
        inputs: {
          type: "type"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵInheritDefinitionFeature"]]
      });

      var ɵMatStepperNext_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetInheritedFactory"](MatStepperNext);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](MatStepperNext, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: 'button[matStepperNext]',
            host: {
              'class': 'mat-stepper-next',
              '[type]': 'type'
            },
            inputs: ['type']
          }]
        }], null, null);
      })();
      /** Button that moves to the previous step in a stepper workflow. */


      var MatStepperPrevious = /*#__PURE__*/function (_angular_cdk_stepper_6) {
        _inherits2(MatStepperPrevious, _angular_cdk_stepper_6);

        var _super406 = _createSuper(MatStepperPrevious);

        function MatStepperPrevious() {
          _classCallCheck2(this, MatStepperPrevious);

          return _super406.apply(this, arguments);
        }

        return MatStepperPrevious;
      }(_angular_cdk_stepper__WEBPACK_IMPORTED_MODULE_1__["CdkStepperPrevious"]);

      MatStepperPrevious.ɵfac = function MatStepperPrevious_Factory(t) {
        return ɵMatStepperPrevious_BaseFactory(t || MatStepperPrevious);
      };

      MatStepperPrevious.ɵdir = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({
        type: MatStepperPrevious,
        selectors: [["button", "matStepperPrevious", ""]],
        hostAttrs: [1, "mat-stepper-previous"],
        hostVars: 1,
        hostBindings: function MatStepperPrevious_HostBindings(rf, ctx) {
          if (rf & 2) {
            _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵhostProperty"]("type", ctx.type);
          }
        },
        inputs: {
          type: "type"
        },
        features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵInheritDefinitionFeature"]]
      });

      var ɵMatStepperPrevious_BaseFactory = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetInheritedFactory"](MatStepperPrevious);

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](MatStepperPrevious, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["Directive"],
          args: [{
            selector: 'button[matStepperPrevious]',
            host: {
              'class': 'mat-stepper-previous',
              '[type]': 'type'
            },
            inputs: ['type']
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */


      var MatStepperModule = function MatStepperModule() {
        _classCallCheck2(this, MatStepperModule);
      };

      MatStepperModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineNgModule"]({
        type: MatStepperModule
      });
      MatStepperModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineInjector"]({
        factory: function MatStepperModule_Factory(t) {
          return new (t || MatStepperModule)();
        },
        providers: [MAT_STEPPER_INTL_PROVIDER, _angular_material_core__WEBPACK_IMPORTED_MODULE_5__["ErrorStateMatcher"]],
        imports: [[_angular_material_core__WEBPACK_IMPORTED_MODULE_5__["MatCommonModule"], _angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"], _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_0__["PortalModule"], _angular_material_button__WEBPACK_IMPORTED_MODULE_4__["MatButtonModule"], _angular_cdk_stepper__WEBPACK_IMPORTED_MODULE_1__["CdkStepperModule"], _angular_material_icon__WEBPACK_IMPORTED_MODULE_6__["MatIconModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_5__["MatRippleModule"]], _angular_material_core__WEBPACK_IMPORTED_MODULE_5__["MatCommonModule"]]
      });

      (function () {
        (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵsetNgModuleScope"](MatStepperModule, {
          declarations: function declarations() {
            return [MatHorizontalStepper, MatVerticalStepper, MatStep, MatStepLabel, MatStepper, MatStepperNext, MatStepperPrevious, MatStepHeader, MatStepperIcon];
          },
          imports: function imports() {
            return [_angular_material_core__WEBPACK_IMPORTED_MODULE_5__["MatCommonModule"], _angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"], _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_0__["PortalModule"], _angular_material_button__WEBPACK_IMPORTED_MODULE_4__["MatButtonModule"], _angular_cdk_stepper__WEBPACK_IMPORTED_MODULE_1__["CdkStepperModule"], _angular_material_icon__WEBPACK_IMPORTED_MODULE_6__["MatIconModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_5__["MatRippleModule"]];
          },
          exports: function exports() {
            return [_angular_material_core__WEBPACK_IMPORTED_MODULE_5__["MatCommonModule"], MatHorizontalStepper, MatVerticalStepper, MatStep, MatStepLabel, MatStepper, MatStepperNext, MatStepperPrevious, MatStepHeader, MatStepperIcon];
          }
        });
      })();

      (function () {
        (typeof ngDevMode === "undefined" || ngDevMode) && _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵsetClassMetadata"](MatStepperModule, [{
          type: _angular_core__WEBPACK_IMPORTED_MODULE_3__["NgModule"],
          args: [{
            imports: [_angular_material_core__WEBPACK_IMPORTED_MODULE_5__["MatCommonModule"], _angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"], _angular_cdk_portal__WEBPACK_IMPORTED_MODULE_0__["PortalModule"], _angular_material_button__WEBPACK_IMPORTED_MODULE_4__["MatButtonModule"], _angular_cdk_stepper__WEBPACK_IMPORTED_MODULE_1__["CdkStepperModule"], _angular_material_icon__WEBPACK_IMPORTED_MODULE_6__["MatIconModule"], _angular_material_core__WEBPACK_IMPORTED_MODULE_5__["MatRippleModule"]],
            exports: [_angular_material_core__WEBPACK_IMPORTED_MODULE_5__["MatCommonModule"], MatHorizontalStepper, MatVerticalStepper, MatStep, MatStepLabel, MatStepper, MatStepperNext, MatStepperPrevious, MatStepHeader, MatStepperIcon],
            declarations: [MatHorizontalStepper, MatVerticalStepper, MatStep, MatStepLabel, MatStepper, MatStepperNext, MatStepperPrevious, MatStepHeader, MatStepperIcon],
            providers: [MAT_STEPPER_INTL_PROVIDER, _angular_material_core__WEBPACK_IMPORTED_MODULE_5__["ErrorStateMatcher"]]
          }]
        }], null, null);
      })();
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * Generated bundle index. Do not edit.
       */
      //# sourceMappingURL=stepper.js.map

      /***/

    },

    /***/
    "xWtM":
    /*!************************************************!*\
      !*** ./node_modules/aws-sdk/lib/browserMd5.js ***!
      \************************************************/

    /*! no static exports found */

    /***/
    function xWtM(module, exports, __webpack_require__) {
      var hashUtils = __webpack_require__(
      /*! ./browserHashUtils */
      "oGmC");

      var Buffer = __webpack_require__(
      /*! buffer/ */
      "tjlA").Buffer;

      var BLOCK_SIZE = 64;
      var DIGEST_LENGTH = 16;
      var INIT = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476];
      /**
       * @api private
       */

      function Md5() {
        this.state = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476];
        this.buffer = new DataView(new ArrayBuffer(BLOCK_SIZE));
        this.bufferLength = 0;
        this.bytesHashed = 0;
        this.finished = false;
      }
      /**
       * @api private
       */


      module.exports = exports = Md5;
      Md5.BLOCK_SIZE = BLOCK_SIZE;

      Md5.prototype.update = function (sourceData) {
        if (hashUtils.isEmptyData(sourceData)) {
          return this;
        } else if (this.finished) {
          throw new Error('Attempted to update an already finished hash.');
        }

        var data = hashUtils.convertToBuffer(sourceData);
        var position = 0;
        var byteLength = data.byteLength;
        this.bytesHashed += byteLength;

        while (byteLength > 0) {
          this.buffer.setUint8(this.bufferLength++, data[position++]);
          byteLength--;

          if (this.bufferLength === BLOCK_SIZE) {
            this.hashBuffer();
            this.bufferLength = 0;
          }
        }

        return this;
      };

      Md5.prototype.digest = function (encoding) {
        if (!this.finished) {
          var _a = this,
              buffer = _a.buffer,
              undecoratedLength = _a.bufferLength,
              bytesHashed = _a.bytesHashed;

          var bitsHashed = bytesHashed * 8;
          buffer.setUint8(this.bufferLength++, 128); // Ensure the final block has enough room for the hashed length

          if (undecoratedLength % BLOCK_SIZE >= BLOCK_SIZE - 8) {
            for (var i = this.bufferLength; i < BLOCK_SIZE; i++) {
              buffer.setUint8(i, 0);
            }

            this.hashBuffer();
            this.bufferLength = 0;
          }

          for (var i = this.bufferLength; i < BLOCK_SIZE - 8; i++) {
            buffer.setUint8(i, 0);
          }

          buffer.setUint32(BLOCK_SIZE - 8, bitsHashed >>> 0, true);
          buffer.setUint32(BLOCK_SIZE - 4, Math.floor(bitsHashed / 0x100000000), true);
          this.hashBuffer();
          this.finished = true;
        }

        var out = new DataView(new ArrayBuffer(DIGEST_LENGTH));

        for (var i = 0; i < 4; i++) {
          out.setUint32(i * 4, this.state[i], true);
        }

        var buff = new Buffer(out.buffer, out.byteOffset, out.byteLength);
        return encoding ? buff.toString(encoding) : buff;
      };

      Md5.prototype.hashBuffer = function () {
        var _a = this,
            buffer = _a.buffer,
            state = _a.state;

        var a = state[0],
            b = state[1],
            c = state[2],
            d = state[3];
        a = ff(a, b, c, d, buffer.getUint32(0, true), 7, 0xd76aa478);
        d = ff(d, a, b, c, buffer.getUint32(4, true), 12, 0xe8c7b756);
        c = ff(c, d, a, b, buffer.getUint32(8, true), 17, 0x242070db);
        b = ff(b, c, d, a, buffer.getUint32(12, true), 22, 0xc1bdceee);
        a = ff(a, b, c, d, buffer.getUint32(16, true), 7, 0xf57c0faf);
        d = ff(d, a, b, c, buffer.getUint32(20, true), 12, 0x4787c62a);
        c = ff(c, d, a, b, buffer.getUint32(24, true), 17, 0xa8304613);
        b = ff(b, c, d, a, buffer.getUint32(28, true), 22, 0xfd469501);
        a = ff(a, b, c, d, buffer.getUint32(32, true), 7, 0x698098d8);
        d = ff(d, a, b, c, buffer.getUint32(36, true), 12, 0x8b44f7af);
        c = ff(c, d, a, b, buffer.getUint32(40, true), 17, 0xffff5bb1);
        b = ff(b, c, d, a, buffer.getUint32(44, true), 22, 0x895cd7be);
        a = ff(a, b, c, d, buffer.getUint32(48, true), 7, 0x6b901122);
        d = ff(d, a, b, c, buffer.getUint32(52, true), 12, 0xfd987193);
        c = ff(c, d, a, b, buffer.getUint32(56, true), 17, 0xa679438e);
        b = ff(b, c, d, a, buffer.getUint32(60, true), 22, 0x49b40821);
        a = gg(a, b, c, d, buffer.getUint32(4, true), 5, 0xf61e2562);
        d = gg(d, a, b, c, buffer.getUint32(24, true), 9, 0xc040b340);
        c = gg(c, d, a, b, buffer.getUint32(44, true), 14, 0x265e5a51);
        b = gg(b, c, d, a, buffer.getUint32(0, true), 20, 0xe9b6c7aa);
        a = gg(a, b, c, d, buffer.getUint32(20, true), 5, 0xd62f105d);
        d = gg(d, a, b, c, buffer.getUint32(40, true), 9, 0x02441453);
        c = gg(c, d, a, b, buffer.getUint32(60, true), 14, 0xd8a1e681);
        b = gg(b, c, d, a, buffer.getUint32(16, true), 20, 0xe7d3fbc8);
        a = gg(a, b, c, d, buffer.getUint32(36, true), 5, 0x21e1cde6);
        d = gg(d, a, b, c, buffer.getUint32(56, true), 9, 0xc33707d6);
        c = gg(c, d, a, b, buffer.getUint32(12, true), 14, 0xf4d50d87);
        b = gg(b, c, d, a, buffer.getUint32(32, true), 20, 0x455a14ed);
        a = gg(a, b, c, d, buffer.getUint32(52, true), 5, 0xa9e3e905);
        d = gg(d, a, b, c, buffer.getUint32(8, true), 9, 0xfcefa3f8);
        c = gg(c, d, a, b, buffer.getUint32(28, true), 14, 0x676f02d9);
        b = gg(b, c, d, a, buffer.getUint32(48, true), 20, 0x8d2a4c8a);
        a = hh(a, b, c, d, buffer.getUint32(20, true), 4, 0xfffa3942);
        d = hh(d, a, b, c, buffer.getUint32(32, true), 11, 0x8771f681);
        c = hh(c, d, a, b, buffer.getUint32(44, true), 16, 0x6d9d6122);
        b = hh(b, c, d, a, buffer.getUint32(56, true), 23, 0xfde5380c);
        a = hh(a, b, c, d, buffer.getUint32(4, true), 4, 0xa4beea44);
        d = hh(d, a, b, c, buffer.getUint32(16, true), 11, 0x4bdecfa9);
        c = hh(c, d, a, b, buffer.getUint32(28, true), 16, 0xf6bb4b60);
        b = hh(b, c, d, a, buffer.getUint32(40, true), 23, 0xbebfbc70);
        a = hh(a, b, c, d, buffer.getUint32(52, true), 4, 0x289b7ec6);
        d = hh(d, a, b, c, buffer.getUint32(0, true), 11, 0xeaa127fa);
        c = hh(c, d, a, b, buffer.getUint32(12, true), 16, 0xd4ef3085);
        b = hh(b, c, d, a, buffer.getUint32(24, true), 23, 0x04881d05);
        a = hh(a, b, c, d, buffer.getUint32(36, true), 4, 0xd9d4d039);
        d = hh(d, a, b, c, buffer.getUint32(48, true), 11, 0xe6db99e5);
        c = hh(c, d, a, b, buffer.getUint32(60, true), 16, 0x1fa27cf8);
        b = hh(b, c, d, a, buffer.getUint32(8, true), 23, 0xc4ac5665);
        a = ii(a, b, c, d, buffer.getUint32(0, true), 6, 0xf4292244);
        d = ii(d, a, b, c, buffer.getUint32(28, true), 10, 0x432aff97);
        c = ii(c, d, a, b, buffer.getUint32(56, true), 15, 0xab9423a7);
        b = ii(b, c, d, a, buffer.getUint32(20, true), 21, 0xfc93a039);
        a = ii(a, b, c, d, buffer.getUint32(48, true), 6, 0x655b59c3);
        d = ii(d, a, b, c, buffer.getUint32(12, true), 10, 0x8f0ccc92);
        c = ii(c, d, a, b, buffer.getUint32(40, true), 15, 0xffeff47d);
        b = ii(b, c, d, a, buffer.getUint32(4, true), 21, 0x85845dd1);
        a = ii(a, b, c, d, buffer.getUint32(32, true), 6, 0x6fa87e4f);
        d = ii(d, a, b, c, buffer.getUint32(60, true), 10, 0xfe2ce6e0);
        c = ii(c, d, a, b, buffer.getUint32(24, true), 15, 0xa3014314);
        b = ii(b, c, d, a, buffer.getUint32(52, true), 21, 0x4e0811a1);
        a = ii(a, b, c, d, buffer.getUint32(16, true), 6, 0xf7537e82);
        d = ii(d, a, b, c, buffer.getUint32(44, true), 10, 0xbd3af235);
        c = ii(c, d, a, b, buffer.getUint32(8, true), 15, 0x2ad7d2bb);
        b = ii(b, c, d, a, buffer.getUint32(36, true), 21, 0xeb86d391);
        state[0] = a + state[0] & 0xFFFFFFFF;
        state[1] = b + state[1] & 0xFFFFFFFF;
        state[2] = c + state[2] & 0xFFFFFFFF;
        state[3] = d + state[3] & 0xFFFFFFFF;
      };

      function cmn(q, a, b, x, s, t) {
        a = (a + q & 0xFFFFFFFF) + (x + t & 0xFFFFFFFF) & 0xFFFFFFFF;
        return (a << s | a >>> 32 - s) + b & 0xFFFFFFFF;
      }

      function ff(a, b, c, d, x, s, t) {
        return cmn(b & c | ~b & d, a, b, x, s, t);
      }

      function gg(a, b, c, d, x, s, t) {
        return cmn(b & d | c & ~d, a, b, x, s, t);
      }

      function hh(a, b, c, d, x, s, t) {
        return cmn(b ^ c ^ d, a, b, x, s, t);
      }

      function ii(a, b, c, d, x, s, t) {
        return cmn(c ^ (b | ~d), a, b, x, s, t);
      }
      /***/

    },

    /***/
    "xbPD":
    /*!*************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/defaultIfEmpty.js ***!
      \*************************************************************************/

    /*! exports provided: defaultIfEmpty */

    /***/
    function xbPD(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "defaultIfEmpty", function () {
        return defaultIfEmpty;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");

      function defaultIfEmpty() {
        var defaultValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
        return function (source) {
          return source.lift(new DefaultIfEmptyOperator(defaultValue));
        };
      }

      var DefaultIfEmptyOperator = /*#__PURE__*/function () {
        function DefaultIfEmptyOperator(defaultValue) {
          _classCallCheck2(this, DefaultIfEmptyOperator);

          this.defaultValue = defaultValue;
        }

        _createClass2(DefaultIfEmptyOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new DefaultIfEmptySubscriber(subscriber, this.defaultValue));
          }
        }]);

        return DefaultIfEmptyOperator;
      }();

      var DefaultIfEmptySubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_46) {
        _inherits2(DefaultIfEmptySubscriber, _Subscriber__WEBPACK_46);

        var _super407 = _createSuper(DefaultIfEmptySubscriber);

        function DefaultIfEmptySubscriber(destination, defaultValue) {
          var _this1030;

          _classCallCheck2(this, DefaultIfEmptySubscriber);

          _this1030 = _super407.call(this, destination);
          _this1030.defaultValue = defaultValue;
          _this1030.isEmpty = true;
          return _this1030;
        }

        _createClass2(DefaultIfEmptySubscriber, [{
          key: "_next",
          value: function _next(value) {
            this.isEmpty = false;
            this.destination.next(value);
          }
        }, {
          key: "_complete",
          value: function _complete() {
            if (this.isEmpty) {
              this.destination.next(this.defaultValue);
            }

            this.destination.complete();
          }
        }]);

        return DefaultIfEmptySubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=defaultIfEmpty.js.map

      /***/

    },

    /***/
    "xgIS":
    /*!*********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/fromEvent.js ***!
      \*********************************************************************/

    /*! exports provided: fromEvent */

    /***/
    function xgIS(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "fromEvent", function () {
        return fromEvent;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/isArray */
      "DH7j");
      /* harmony import */


      var _util_isFunction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../util/isFunction */
      "n6bG");
      /* harmony import */


      var _operators_map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ../operators/map */
      "lJxs");

      var toString = function () {
        return Object.prototype.toString;
      }();

      function fromEvent(target, eventName, options, resultSelector) {
        if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_2__["isFunction"])(options)) {
          resultSelector = options;
          options = undefined;
        }

        if (resultSelector) {
          return fromEvent(target, eventName, options).pipe(Object(_operators_map__WEBPACK_IMPORTED_MODULE_3__["map"])(function (args) {
            return Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(args) ? resultSelector.apply(void 0, _toConsumableArray(args)) : resultSelector(args);
          }));
        }

        return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
          function handler(e) {
            if (arguments.length > 1) {
              subscriber.next(Array.prototype.slice.call(arguments));
            } else {
              subscriber.next(e);
            }
          }

          setupSubscription(target, eventName, handler, subscriber, options);
        });
      }

      function setupSubscription(sourceObj, eventName, handler, subscriber, options) {
        var unsubscribe;

        if (isEventTarget(sourceObj)) {
          var source = sourceObj;
          sourceObj.addEventListener(eventName, handler, options);

          unsubscribe = function unsubscribe() {
            return source.removeEventListener(eventName, handler, options);
          };
        } else if (isJQueryStyleEventEmitter(sourceObj)) {
          var _source = sourceObj;
          sourceObj.on(eventName, handler);

          unsubscribe = function unsubscribe() {
            return _source.off(eventName, handler);
          };
        } else if (isNodeStyleEventEmitter(sourceObj)) {
          var _source2 = sourceObj;
          sourceObj.addListener(eventName, handler);

          unsubscribe = function unsubscribe() {
            return _source2.removeListener(eventName, handler);
          };
        } else if (sourceObj && sourceObj.length) {
          for (var i = 0, len = sourceObj.length; i < len; i++) {
            setupSubscription(sourceObj[i], eventName, handler, subscriber, options);
          }
        } else {
          throw new TypeError('Invalid event target');
        }

        subscriber.add(unsubscribe);
      }

      function isNodeStyleEventEmitter(sourceObj) {
        return sourceObj && typeof sourceObj.addListener === 'function' && typeof sourceObj.removeListener === 'function';
      }

      function isJQueryStyleEventEmitter(sourceObj) {
        return sourceObj && typeof sourceObj.on === 'function' && typeof sourceObj.off === 'function';
      }

      function isEventTarget(sourceObj) {
        return sourceObj && typeof sourceObj.addEventListener === 'function' && typeof sourceObj.removeEventListener === 'function';
      } //# sourceMappingURL=fromEvent.js.map

      /***/

    },

    /***/
    "xn+8":
    /*!**************************************************!*\
      !*** ./node_modules/aws-sdk/lib/services/sts.js ***!
      \**************************************************/

    /*! no static exports found */

    /***/
    function xn8(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ../core */
      "QsWE");

      var resolveRegionalEndpointsFlag = __webpack_require__(
      /*! ../config_regional_endpoint */
      "ZHa6");

      var ENV_REGIONAL_ENDPOINT_ENABLED = 'AWS_STS_REGIONAL_ENDPOINTS';
      var CONFIG_REGIONAL_ENDPOINT_ENABLED = 'sts_regional_endpoints';
      AWS.util.update(AWS.STS.prototype, {
        /**
         * @overload credentialsFrom(data, credentials = null)
         *   Creates a credentials object from STS response data containing
         *   credentials information. Useful for quickly setting AWS credentials.
         *
         *   @note This is a low-level utility function. If you want to load temporary
         *     credentials into your process for subsequent requests to AWS resources,
         *     you should use {AWS.TemporaryCredentials} instead.
         *   @param data [map] data retrieved from a call to {getFederatedToken},
         *     {getSessionToken}, {assumeRole}, or {assumeRoleWithWebIdentity}.
         *   @param credentials [AWS.Credentials] an optional credentials object to
         *     fill instead of creating a new object. Useful when modifying an
         *     existing credentials object from a refresh call.
         *   @return [AWS.TemporaryCredentials] the set of temporary credentials
         *     loaded from a raw STS operation response.
         *   @example Using credentialsFrom to load global AWS credentials
         *     var sts = new AWS.STS();
         *     sts.getSessionToken(function (err, data) {
         *       if (err) console.log("Error getting credentials");
         *       else {
         *         AWS.config.credentials = sts.credentialsFrom(data);
         *       }
         *     });
         *   @see AWS.TemporaryCredentials
         */
        credentialsFrom: function credentialsFrom(data, credentials) {
          if (!data) return null;
          if (!credentials) credentials = new AWS.TemporaryCredentials();
          credentials.expired = false;
          credentials.accessKeyId = data.Credentials.AccessKeyId;
          credentials.secretAccessKey = data.Credentials.SecretAccessKey;
          credentials.sessionToken = data.Credentials.SessionToken;
          credentials.expireTime = data.Credentials.Expiration;
          return credentials;
        },
        assumeRoleWithWebIdentity: function assumeRoleWithWebIdentity(params, callback) {
          return this.makeUnauthenticatedRequest('assumeRoleWithWebIdentity', params, callback);
        },
        assumeRoleWithSAML: function assumeRoleWithSAML(params, callback) {
          return this.makeUnauthenticatedRequest('assumeRoleWithSAML', params, callback);
        },

        /**
         * @api private
         */
        setupRequestListeners: function setupRequestListeners(request) {
          request.addListener('validate', this.optInRegionalEndpoint, true);
        },

        /**
         * @api private
         */
        optInRegionalEndpoint: function optInRegionalEndpoint(req) {
          var service = req.service;
          var config = service.config;
          config.stsRegionalEndpoints = resolveRegionalEndpointsFlag(service._originalConfig, {
            env: ENV_REGIONAL_ENDPOINT_ENABLED,
            sharedConfig: CONFIG_REGIONAL_ENDPOINT_ENABLED,
            clientConfig: 'stsRegionalEndpoints'
          });

          if (config.stsRegionalEndpoints === 'regional' && service.isGlobalEndpoint) {
            //client will throw if region is not supplied; request will be signed with specified region
            if (!config.region) {
              throw AWS.util.error(new Error(), {
                code: 'ConfigError',
                message: 'Missing region in config'
              });
            }

            var insertPoint = config.endpoint.indexOf('.amazonaws.com');
            var regionalEndpoint = config.endpoint.substring(0, insertPoint) + '.' + config.region + config.endpoint.substring(insertPoint);
            req.httpRequest.updateEndpoint(regionalEndpoint);
            req.httpRequest.region = config.region;
          }
        }
      });
      /***/
    },

    /***/
    "xz+E":
    /*!***************************************************!*\
      !*** ./node_modules/@angular/cdk/fesm2015/cdk.js ***!
      \***************************************************/

    /*! exports provided: VERSION */

    /***/
    function xzE(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "VERSION", function () {
        return VERSION;
      });
      /* harmony import */


      var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! @angular/core */
      "fXoL");
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /** Current version of the Angular Component Development Kit. */


      var VERSION = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["Version"]('11.2.1');
      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */

      /**
       * @license
       * Copyright Google LLC All Rights Reserved.
       *
       * Use of this source code is governed by an MIT-style license that can be
       * found in the LICENSE file at https://angular.io/license
       */
      //# sourceMappingURL=cdk.js.map

      /***/
    },

    /***/
    "yCtX":
    /*!*********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/fromArray.js ***!
      \*********************************************************************/

    /*! exports provided: fromArray */

    /***/
    function yCtX(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "fromArray", function () {
        return fromArray;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");
      /* harmony import */


      var _util_subscribeToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/subscribeToArray */
      "ngJS");
      /* harmony import */


      var _scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ../scheduled/scheduleArray */
      "jZKg");

      function fromArray(input, scheduler) {
        if (!scheduler) {
          return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](Object(_util_subscribeToArray__WEBPACK_IMPORTED_MODULE_1__["subscribeToArray"])(input));
        } else {
          return Object(_scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__["scheduleArray"])(input, scheduler);
        }
      } //# sourceMappingURL=fromArray.js.map

      /***/

    },

    /***/
    "yI9Y":
    /*!**************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/max.js ***!
      \**************************************************************/

    /*! exports provided: max */

    /***/
    function yI9Y(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "max", function () {
        return max;
      });
      /* harmony import */


      var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./reduce */
      "128B");

      function max(comparer) {
        var max = typeof comparer === 'function' ? function (x, y) {
          return comparer(x, y) > 0 ? x : y;
        } : function (x, y) {
          return x > y ? x : y;
        };
        return Object(_reduce__WEBPACK_IMPORTED_MODULE_0__["reduce"])(max);
      } //# sourceMappingURL=max.js.map

      /***/

    },

    /***/
    "yPMs":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/sq.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function yPMs(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Albanian [sq]
      //! author : Flakërim Ismani : https://github.com/flakerimi
      //! author : Menelion Elensúle : https://github.com/Oire
      //! author : Oerd Cukalla : https://github.com/oerd
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var sq = moment.defineLocale('sq', {
          months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),
          monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),
          weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),
          weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),
          weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'),
          weekdaysParseExact: true,
          meridiemParse: /PD|MD/,
          isPM: function isPM(input) {
            return input.charAt(0) === 'M';
          },
          meridiem: function meridiem(hours, minutes, isLower) {
            return hours < 12 ? 'PD' : 'MD';
          },
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[Sot në] LT',
            nextDay: '[Nesër në] LT',
            nextWeek: 'dddd [në] LT',
            lastDay: '[Dje në] LT',
            lastWeek: 'dddd [e kaluar në] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'në %s',
            past: '%s më parë',
            s: 'disa sekonda',
            ss: '%d sekonda',
            m: 'një minutë',
            mm: '%d minuta',
            h: 'një orë',
            hh: '%d orë',
            d: 'një ditë',
            dd: '%d ditë',
            M: 'një muaj',
            MM: '%d muaj',
            y: 'një vit',
            yy: '%d vite'
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return sq;
      });
      /***/

    },

    /***/
    "ynUr":
    /*!***************************************************!*\
      !*** ./node_modules/aws-sdk/lib/browserSha256.js ***!
      \***************************************************/

    /*! no static exports found */

    /***/
    function ynUr(module, exports, __webpack_require__) {
      var Buffer = __webpack_require__(
      /*! buffer/ */
      "tjlA").Buffer;

      var hashUtils = __webpack_require__(
      /*! ./browserHashUtils */
      "oGmC");

      var BLOCK_SIZE = 64;
      var DIGEST_LENGTH = 32;
      var KEY = new Uint32Array([0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]);
      var INIT = [0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19];
      var MAX_HASHABLE_LENGTH = Math.pow(2, 53) - 1;
      /**
       * @private
       */

      function Sha256() {
        this.state = [0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19];
        this.temp = new Int32Array(64);
        this.buffer = new Uint8Array(64);
        this.bufferLength = 0;
        this.bytesHashed = 0;
        /**
         * @private
         */

        this.finished = false;
      }
      /**
       * @api private
       */


      module.exports = exports = Sha256;
      Sha256.BLOCK_SIZE = BLOCK_SIZE;

      Sha256.prototype.update = function (data) {
        if (this.finished) {
          throw new Error('Attempted to update an already finished hash.');
        }

        if (hashUtils.isEmptyData(data)) {
          return this;
        }

        data = hashUtils.convertToBuffer(data);
        var position = 0;
        var byteLength = data.byteLength;
        this.bytesHashed += byteLength;

        if (this.bytesHashed * 8 > MAX_HASHABLE_LENGTH) {
          throw new Error('Cannot hash more than 2^53 - 1 bits');
        }

        while (byteLength > 0) {
          this.buffer[this.bufferLength++] = data[position++];
          byteLength--;

          if (this.bufferLength === BLOCK_SIZE) {
            this.hashBuffer();
            this.bufferLength = 0;
          }
        }

        return this;
      };

      Sha256.prototype.digest = function (encoding) {
        if (!this.finished) {
          var bitsHashed = this.bytesHashed * 8;
          var bufferView = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);
          var undecoratedLength = this.bufferLength;
          bufferView.setUint8(this.bufferLength++, 0x80); // Ensure the final block has enough room for the hashed length

          if (undecoratedLength % BLOCK_SIZE >= BLOCK_SIZE - 8) {
            for (var i = this.bufferLength; i < BLOCK_SIZE; i++) {
              bufferView.setUint8(i, 0);
            }

            this.hashBuffer();
            this.bufferLength = 0;
          }

          for (var i = this.bufferLength; i < BLOCK_SIZE - 8; i++) {
            bufferView.setUint8(i, 0);
          }

          bufferView.setUint32(BLOCK_SIZE - 8, Math.floor(bitsHashed / 0x100000000), true);
          bufferView.setUint32(BLOCK_SIZE - 4, bitsHashed);
          this.hashBuffer();
          this.finished = true;
        } // The value in state is little-endian rather than big-endian, so flip
        // each word into a new Uint8Array


        var out = new Buffer(DIGEST_LENGTH);

        for (var i = 0; i < 8; i++) {
          out[i * 4] = this.state[i] >>> 24 & 0xff;
          out[i * 4 + 1] = this.state[i] >>> 16 & 0xff;
          out[i * 4 + 2] = this.state[i] >>> 8 & 0xff;
          out[i * 4 + 3] = this.state[i] >>> 0 & 0xff;
        }

        return encoding ? out.toString(encoding) : out;
      };

      Sha256.prototype.hashBuffer = function () {
        var _a = this,
            buffer = _a.buffer,
            state = _a.state;

        var state0 = state[0],
            state1 = state[1],
            state2 = state[2],
            state3 = state[3],
            state4 = state[4],
            state5 = state[5],
            state6 = state[6],
            state7 = state[7];

        for (var i = 0; i < BLOCK_SIZE; i++) {
          if (i < 16) {
            this.temp[i] = (buffer[i * 4] & 0xff) << 24 | (buffer[i * 4 + 1] & 0xff) << 16 | (buffer[i * 4 + 2] & 0xff) << 8 | buffer[i * 4 + 3] & 0xff;
          } else {
            var u = this.temp[i - 2];
            var t1_1 = (u >>> 17 | u << 15) ^ (u >>> 19 | u << 13) ^ u >>> 10;
            u = this.temp[i - 15];
            var t2_1 = (u >>> 7 | u << 25) ^ (u >>> 18 | u << 14) ^ u >>> 3;
            this.temp[i] = (t1_1 + this.temp[i - 7] | 0) + (t2_1 + this.temp[i - 16] | 0);
          }

          var t1 = (((state4 >>> 6 | state4 << 26) ^ (state4 >>> 11 | state4 << 21) ^ (state4 >>> 25 | state4 << 7)) + (state4 & state5 ^ ~state4 & state6) | 0) + (state7 + (KEY[i] + this.temp[i] | 0) | 0) | 0;
          var t2 = ((state0 >>> 2 | state0 << 30) ^ (state0 >>> 13 | state0 << 19) ^ (state0 >>> 22 | state0 << 10)) + (state0 & state1 ^ state0 & state2 ^ state1 & state2) | 0;
          state7 = state6;
          state6 = state5;
          state5 = state4;
          state4 = state3 + t1 | 0;
          state3 = state2;
          state2 = state1;
          state1 = state0;
          state0 = t1 + t2 | 0;
        }

        state[0] += state0;
        state[1] += state1;
        state[2] += state2;
        state[3] += state3;
        state[4] += state4;
        state[5] += state5;
        state[6] += state6;
        state[7] += state7;
      };
      /***/

    },

    /***/
    "yuhW":
    /*!*******************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/throttle.js ***!
      \*******************************************************************/

    /*! exports provided: defaultThrottleConfig, throttle */

    /***/
    function yuhW(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "defaultThrottleConfig", function () {
        return defaultThrottleConfig;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "throttle", function () {
        return throttle;
      });
      /* harmony import */


      var _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../innerSubscribe */
      "zx2A");

      var defaultThrottleConfig = {
        leading: true,
        trailing: false
      };

      function throttle(durationSelector) {
        var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultThrottleConfig;
        return function (source) {
          return source.lift(new ThrottleOperator(durationSelector, !!config.leading, !!config.trailing));
        };
      }

      var ThrottleOperator = /*#__PURE__*/function () {
        function ThrottleOperator(durationSelector, leading, trailing) {
          _classCallCheck2(this, ThrottleOperator);

          this.durationSelector = durationSelector;
          this.leading = leading;
          this.trailing = trailing;
        }

        _createClass2(ThrottleOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new ThrottleSubscriber(subscriber, this.durationSelector, this.leading, this.trailing));
          }
        }]);

        return ThrottleOperator;
      }();

      var ThrottleSubscriber = /*#__PURE__*/function (_innerSubscribe__WEBP21) {
        _inherits2(ThrottleSubscriber, _innerSubscribe__WEBP21);

        var _super408 = _createSuper(ThrottleSubscriber);

        function ThrottleSubscriber(destination, durationSelector, _leading, _trailing) {
          var _this1031;

          _classCallCheck2(this, ThrottleSubscriber);

          _this1031 = _super408.call(this, destination);
          _this1031.destination = destination;
          _this1031.durationSelector = durationSelector;
          _this1031._leading = _leading;
          _this1031._trailing = _trailing;
          _this1031._hasValue = false;
          return _this1031;
        }

        _createClass2(ThrottleSubscriber, [{
          key: "_next",
          value: function _next(value) {
            this._hasValue = true;
            this._sendValue = value;

            if (!this._throttled) {
              if (this._leading) {
                this.send();
              } else {
                this.throttle(value);
              }
            }
          }
        }, {
          key: "send",
          value: function send() {
            var _hasValue = this._hasValue,
                _sendValue = this._sendValue;

            if (_hasValue) {
              this.destination.next(_sendValue);
              this.throttle(_sendValue);
            }

            this._hasValue = false;
            this._sendValue = undefined;
          }
        }, {
          key: "throttle",
          value: function throttle(value) {
            var duration = this.tryDurationSelector(value);

            if (!!duration) {
              this.add(this._throttled = Object(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["innerSubscribe"])(duration, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleInnerSubscriber"](this)));
            }
          }
        }, {
          key: "tryDurationSelector",
          value: function tryDurationSelector(value) {
            try {
              return this.durationSelector(value);
            } catch (err) {
              this.destination.error(err);
              return null;
            }
          }
        }, {
          key: "throttlingDone",
          value: function throttlingDone() {
            var _throttled = this._throttled,
                _trailing = this._trailing;

            if (_throttled) {
              _throttled.unsubscribe();
            }

            this._throttled = undefined;

            if (_trailing) {
              this.send();
            }
          }
        }, {
          key: "notifyNext",
          value: function notifyNext() {
            this.throttlingDone();
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete() {
            this.throttlingDone();
          }
        }]);

        return ThrottleSubscriber;
      }(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleOuterSubscriber"]); //# sourceMappingURL=throttle.js.map

      /***/

    },

    /***/
    "z+Ro":
    /*!*****************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/util/isScheduler.js ***!
      \*****************************************************************/

    /*! exports provided: isScheduler */

    /***/
    function zRo(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "isScheduler", function () {
        return isScheduler;
      });

      function isScheduler(value) {
        return value && typeof value.schedule === 'function';
      } //# sourceMappingURL=isScheduler.js.map

      /***/

    },

    /***/
    "z17N":
    /*!**************************************************************!*\
      !*** ./node_modules/ng-pick-datetime/__ivy_ngcc__/picker.js ***!
      \**************************************************************/

    /*! exports provided: OwlDateTimeModule, OwlDateTimeIntl, OwlNativeDateTimeModule, OWL_DATE_TIME_LOCALE_PROVIDER, OWL_DATE_TIME_LOCALE, DateTimeAdapter, OWL_DATE_TIME_FORMATS, OwlDateTimeInlineComponent, OwlDateTimeComponent, OwlCalendarComponent, OwlTimerComponent, OwlDateTimeTriggerDirective, OwlDateTimeInputDirective, OwlMultiYearViewComponent, OwlYearViewComponent, OwlMonthViewComponent */

    /***/
    function z17N(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony import */


      var _date_time__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./date-time */
      "modA");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OwlDateTimeModule", function () {
        return _date_time__WEBPACK_IMPORTED_MODULE_0__["OwlDateTimeModule"];
      });
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OwlDateTimeIntl", function () {
        return _date_time__WEBPACK_IMPORTED_MODULE_0__["OwlDateTimeIntl"];
      });
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OwlNativeDateTimeModule", function () {
        return _date_time__WEBPACK_IMPORTED_MODULE_0__["OwlNativeDateTimeModule"];
      });
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OWL_DATE_TIME_LOCALE_PROVIDER", function () {
        return _date_time__WEBPACK_IMPORTED_MODULE_0__["OWL_DATE_TIME_LOCALE_PROVIDER"];
      });
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OWL_DATE_TIME_LOCALE", function () {
        return _date_time__WEBPACK_IMPORTED_MODULE_0__["OWL_DATE_TIME_LOCALE"];
      });
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "DateTimeAdapter", function () {
        return _date_time__WEBPACK_IMPORTED_MODULE_0__["DateTimeAdapter"];
      });
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OWL_DATE_TIME_FORMATS", function () {
        return _date_time__WEBPACK_IMPORTED_MODULE_0__["OWL_DATE_TIME_FORMATS"];
      });
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OwlDateTimeInlineComponent", function () {
        return _date_time__WEBPACK_IMPORTED_MODULE_0__["OwlDateTimeInlineComponent"];
      });
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OwlDateTimeComponent", function () {
        return _date_time__WEBPACK_IMPORTED_MODULE_0__["OwlDateTimeComponent"];
      });
      /* harmony import */


      var _date_time_calendar_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./date-time/calendar.component */
      "PPXK");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OwlCalendarComponent", function () {
        return _date_time_calendar_component__WEBPACK_IMPORTED_MODULE_1__["OwlCalendarComponent"];
      });
      /* harmony import */


      var _date_time_timer_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./date-time/timer.component */
      "341s");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OwlTimerComponent", function () {
        return _date_time_timer_component__WEBPACK_IMPORTED_MODULE_2__["OwlTimerComponent"];
      });
      /* harmony import */


      var _date_time_date_time_picker_trigger_directive__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! ./date-time/date-time-picker-trigger.directive */
      "bWWN");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OwlDateTimeTriggerDirective", function () {
        return _date_time_date_time_picker_trigger_directive__WEBPACK_IMPORTED_MODULE_3__["OwlDateTimeTriggerDirective"];
      });
      /* harmony import */


      var _date_time_date_time_picker_input_directive__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
      /*! ./date-time/date-time-picker-input.directive */
      "qbD1");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OwlDateTimeInputDirective", function () {
        return _date_time_date_time_picker_input_directive__WEBPACK_IMPORTED_MODULE_4__["OwlDateTimeInputDirective"];
      });
      /* harmony import */


      var _date_time_calendar_multi_year_view_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
      /*! ./date-time/calendar-multi-year-view.component */
      "Gmk6");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OwlMultiYearViewComponent", function () {
        return _date_time_calendar_multi_year_view_component__WEBPACK_IMPORTED_MODULE_5__["OwlMultiYearViewComponent"];
      });
      /* harmony import */


      var _date_time_calendar_year_view_component__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(
      /*! ./date-time/calendar-year-view.component */
      "I810");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OwlYearViewComponent", function () {
        return _date_time_calendar_year_view_component__WEBPACK_IMPORTED_MODULE_6__["OwlYearViewComponent"];
      });
      /* harmony import */


      var _date_time_calendar_month_view_component__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
      /*! ./date-time/calendar-month-view.component */
      "L56X");
      /* harmony reexport (safe) */


      __webpack_require__.d(__webpack_exports__, "OwlMonthViewComponent", function () {
        return _date_time_calendar_month_view_component__WEBPACK_IMPORTED_MODULE_7__["OwlMonthViewComponent"];
      }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2VyLmpzIiwic291cmNlcyI6WyJwaWNrZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RhdGUtdGltZSc7XG4iXX0=

      /***/

    },

    /***/
    "z1FC":
    /*!*******************************************!*\
      !*** ./node_modules/moment/locale/tzl.js ***!
      \*******************************************/

    /*! no static exports found */

    /***/
    function z1FC(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Talossan [tzl]
      //! author : Robin van der Vliet : https://github.com/robin0van0der0v
      //! author : Iustì Canun
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration
        // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.
        // This is currently too difficult (maybe even impossible) to add.

        var tzl = moment.defineLocale('tzl', {
          months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),
          monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),
          weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),
          weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),
          weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),
          longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM [dallas] YYYY',
            LLL: 'D. MMMM [dallas] YYYY HH.mm',
            LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'
          },
          meridiemParse: /d\'o|d\'a/i,
          isPM: function isPM(input) {
            return "d'o" === input.toLowerCase();
          },
          meridiem: function meridiem(hours, minutes, isLower) {
            if (hours > 11) {
              return isLower ? "d'o" : "D'O";
            } else {
              return isLower ? "d'a" : "D'A";
            }
          },
          calendar: {
            sameDay: '[oxhi à] LT',
            nextDay: '[demà à] LT',
            nextWeek: 'dddd [à] LT',
            lastDay: '[ieiri à] LT',
            lastWeek: '[sür el] dddd [lasteu à] LT',
            sameElse: 'L'
          },
          relativeTime: {
            future: 'osprei %s',
            past: 'ja%s',
            s: processRelativeTime,
            ss: processRelativeTime,
            m: processRelativeTime,
            mm: processRelativeTime,
            h: processRelativeTime,
            hh: processRelativeTime,
            d: processRelativeTime,
            dd: processRelativeTime,
            M: processRelativeTime,
            MM: processRelativeTime,
            y: processRelativeTime,
            yy: processRelativeTime
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });

        function processRelativeTime(number, withoutSuffix, key, isFuture) {
          var format = {
            s: ['viensas secunds', "'iensas secunds"],
            ss: [number + ' secunds', '' + number + ' secunds'],
            m: ["'n míut", "'iens míut"],
            mm: [number + ' míuts', '' + number + ' míuts'],
            h: ["'n þora", "'iensa þora"],
            hh: [number + ' þoras', '' + number + ' þoras'],
            d: ["'n ziua", "'iensa ziua"],
            dd: [number + ' ziuas', '' + number + ' ziuas'],
            M: ["'n mes", "'iens mes"],
            MM: [number + ' mesen', '' + number + ' mesen'],
            y: ["'n ar", "'iens ar"],
            yy: [number + ' ars', '' + number + ' ars']
          };
          return isFuture ? format[key][0] : withoutSuffix ? format[key][0] : format[key][1];
        }

        return tzl;
      });
      /***/

    },

    /***/
    "z3Vd":
    /*!*******************************************!*\
      !*** ./node_modules/moment/locale/tlh.js ***!
      \*******************************************/

    /*! no static exports found */

    /***/
    function z3Vd(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Klingon [tlh]
      //! author : Dominika Kruk : https://github.com/amaranthrose
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');

        function translateFuture(output) {
          var time = output;
          time = output.indexOf('jaj') !== -1 ? time.slice(0, -3) + 'leS' : output.indexOf('jar') !== -1 ? time.slice(0, -3) + 'waQ' : output.indexOf('DIS') !== -1 ? time.slice(0, -3) + 'nem' : time + ' pIq';
          return time;
        }

        function translatePast(output) {
          var time = output;
          time = output.indexOf('jaj') !== -1 ? time.slice(0, -3) + 'Hu’' : output.indexOf('jar') !== -1 ? time.slice(0, -3) + 'wen' : output.indexOf('DIS') !== -1 ? time.slice(0, -3) + 'ben' : time + ' ret';
          return time;
        }

        function translate(number, withoutSuffix, string, isFuture) {
          var numberNoun = numberAsNoun(number);

          switch (string) {
            case 'ss':
              return numberNoun + ' lup';

            case 'mm':
              return numberNoun + ' tup';

            case 'hh':
              return numberNoun + ' rep';

            case 'dd':
              return numberNoun + ' jaj';

            case 'MM':
              return numberNoun + ' jar';

            case 'yy':
              return numberNoun + ' DIS';
          }
        }

        function numberAsNoun(number) {
          var hundred = Math.floor(number % 1000 / 100),
              ten = Math.floor(number % 100 / 10),
              one = number % 10,
              word = '';

          if (hundred > 0) {
            word += numbersNouns[hundred] + 'vatlh';
          }

          if (ten > 0) {
            word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';
          }

          if (one > 0) {
            word += (word !== '' ? ' ' : '') + numbersNouns[one];
          }

          return word === '' ? 'pagh' : word;
        }

        var tlh = moment.defineLocale('tlh', {
          months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),
          monthsShort: 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),
          monthsParseExact: true,
          weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
          weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
          weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
          longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm'
          },
          calendar: {
            sameDay: '[DaHjaj] LT',
            nextDay: '[wa’leS] LT',
            nextWeek: 'LLL',
            lastDay: '[wa’Hu’] LT',
            lastWeek: 'LLL',
            sameElse: 'L'
          },
          relativeTime: {
            future: translateFuture,
            past: translatePast,
            s: 'puS lup',
            ss: translate,
            m: 'wa’ tup',
            mm: translate,
            h: 'wa’ rep',
            hh: translate,
            d: 'wa’ jaj',
            dd: translate,
            M: 'wa’ jar',
            MM: translate,
            y: 'wa’ DIS',
            yy: translate
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 4 // The week that contains Jan 4th is the first week of the year.

          }
        });
        return tlh;
      });
      /***/

    },

    /***/
    "z6cu":
    /*!**********************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/observable/throwError.js ***!
      \**********************************************************************/

    /*! exports provided: throwError */

    /***/
    function z6cu(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "throwError", function () {
        return throwError;
      });
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Observable */
      "HDdC");

      function throwError(error, scheduler) {
        if (!scheduler) {
          return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
            return subscriber.error(error);
          });
        } else {
          return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
            return scheduler.schedule(dispatch, 0, {
              error: error,
              subscriber: subscriber
            });
          });
        }
      }

      function dispatch(_ref151) {
        var error = _ref151.error,
            subscriber = _ref151.subscriber;
        subscriber.error(error);
      } //# sourceMappingURL=throwError.js.map

      /***/

    },

    /***/
    "zIRd":
    /*!******************************************************!*\
      !*** ./node_modules/@firebase/app/dist/index.esm.js ***!
      \******************************************************/

    /*! exports provided: default, firebase */

    /***/
    function zIRd(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "firebase", function () {
        return firebase$1;
      });
      /* harmony import */


      var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! tslib */
      "Tr+X");
      /* harmony import */


      var _firebase_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! @firebase/util */
      "qOnz");
      /* harmony import */


      var _firebase_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! @firebase/component */
      "/6Yf");
      /* harmony import */


      var _firebase_logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
      /*! @firebase/logger */
      "q/0M");
      /**
       * @license
       * Copyright 2019 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */


      var _a;

      var ERRORS = (_a = {}, _a["no-app"
      /* NO_APP */
      ] = "No Firebase App '{$appName}' has been created - " + 'call Firebase App.initializeApp()', _a["bad-app-name"
      /* BAD_APP_NAME */
      ] = "Illegal App name: '{$appName}", _a["duplicate-app"
      /* DUPLICATE_APP */
      ] = "Firebase App named '{$appName}' already exists", _a["app-deleted"
      /* APP_DELETED */
      ] = "Firebase App named '{$appName}' already deleted", _a["invalid-app-argument"
      /* INVALID_APP_ARGUMENT */
      ] = 'firebase.{$appName}() takes either no argument or a ' + 'Firebase App instance.', _a["invalid-log-argument"
      /* INVALID_LOG_ARGUMENT */
      ] = 'First argument to `onLog` must be null or a function.', _a);
      var ERROR_FACTORY = new _firebase_util__WEBPACK_IMPORTED_MODULE_1__["ErrorFactory"]('app', 'Firebase', ERRORS);
      var name = "@firebase/app";
      var version = "0.6.24";
      var name$1 = "@firebase/analytics";
      var name$2 = "@firebase/app-check";
      var name$3 = "@firebase/auth";
      var name$4 = "@firebase/database";
      var name$5 = "@firebase/functions";
      var name$6 = "@firebase/installations";
      var name$7 = "@firebase/messaging";
      var name$8 = "@firebase/performance";
      var name$9 = "@firebase/remote-config";
      var name$a = "@firebase/storage";
      var name$b = "@firebase/firestore";
      var name$c = "firebase-wrapper";
      /**
       * @license
       * Copyright 2019 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */

      var _a$1;

      var DEFAULT_ENTRY_NAME = '[DEFAULT]';
      var PLATFORM_LOG_STRING = (_a$1 = {}, _a$1[name] = 'fire-core', _a$1[name$1] = 'fire-analytics', _a$1[name$2] = 'fire-app-check', _a$1[name$3] = 'fire-auth', _a$1[name$4] = 'fire-rtdb', _a$1[name$5] = 'fire-fn', _a$1[name$6] = 'fire-iid', _a$1[name$7] = 'fire-fcm', _a$1[name$8] = 'fire-perf', _a$1[name$9] = 'fire-rc', _a$1[name$a] = 'fire-gcs', _a$1[name$b] = 'fire-fst', _a$1['fire-js'] = 'fire-js', _a$1[name$c] = 'fire-js-all', _a$1);
      /**
       * @license
       * Copyright 2019 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */

      var logger = new _firebase_logger__WEBPACK_IMPORTED_MODULE_3__["Logger"]('@firebase/app');
      /**
       * @license
       * Copyright 2017 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */

      /**
       * Global context object for a collection of services using
       * a shared authentication state.
       */

      var FirebaseAppImpl =
      /** @class */
      function () {
        function FirebaseAppImpl(options, config, firebase_) {
          var _this = this;

          this.firebase_ = firebase_;
          this.isDeleted_ = false;
          this.name_ = config.name;
          this.automaticDataCollectionEnabled_ = config.automaticDataCollectionEnabled || false;
          this.options_ = Object(_firebase_util__WEBPACK_IMPORTED_MODULE_1__["deepCopy"])(options);
          this.container = new _firebase_component__WEBPACK_IMPORTED_MODULE_2__["ComponentContainer"](config.name); // add itself to container

          this._addComponent(new _firebase_component__WEBPACK_IMPORTED_MODULE_2__["Component"]('app', function () {
            return _this;
          }, "PUBLIC"
          /* PUBLIC */
          )); // populate ComponentContainer with existing components


          this.firebase_.INTERNAL.components.forEach(function (component) {
            return _this._addComponent(component);
          });
        }

        Object.defineProperty(FirebaseAppImpl.prototype, "automaticDataCollectionEnabled", {
          get: function get() {
            this.checkDestroyed_();
            return this.automaticDataCollectionEnabled_;
          },
          set: function set(val) {
            this.checkDestroyed_();
            this.automaticDataCollectionEnabled_ = val;
          },
          enumerable: false,
          configurable: true
        });
        Object.defineProperty(FirebaseAppImpl.prototype, "name", {
          get: function get() {
            this.checkDestroyed_();
            return this.name_;
          },
          enumerable: false,
          configurable: true
        });
        Object.defineProperty(FirebaseAppImpl.prototype, "options", {
          get: function get() {
            this.checkDestroyed_();
            return this.options_;
          },
          enumerable: false,
          configurable: true
        });

        FirebaseAppImpl.prototype["delete"] = function () {
          var _this = this;

          return new Promise(function (resolve) {
            _this.checkDestroyed_();

            resolve();
          }).then(function () {
            _this.firebase_.INTERNAL.removeApp(_this.name_);

            return Promise.all(_this.container.getProviders().map(function (provider) {
              return provider["delete"]();
            }));
          }).then(function () {
            _this.isDeleted_ = true;
          });
        };
        /**
         * Return a service instance associated with this app (creating it
         * on demand), identified by the passed instanceIdentifier.
         *
         * NOTE: Currently storage and functions are the only ones that are leveraging this
         * functionality. They invoke it by calling:
         *
         * ```javascript
         * firebase.app().storage('STORAGE BUCKET ID')
         * ```
         *
         * The service name is passed to this already
         * @internal
         */


        FirebaseAppImpl.prototype._getService = function (name, instanceIdentifier) {
          var _a;

          if (instanceIdentifier === void 0) {
            instanceIdentifier = DEFAULT_ENTRY_NAME;
          }

          this.checkDestroyed_(); // Initialize instance if InstatiationMode is `EXPLICIT`.

          var provider = this.container.getProvider(name);

          if (!provider.isInitialized() && ((_a = provider.getComponent()) === null || _a === void 0 ? void 0 : _a.instantiationMode) === "EXPLICIT"
          /* EXPLICIT */
          ) {
              provider.initialize();
            } // getImmediate will always succeed because _getService is only called for registered components.


          return provider.getImmediate({
            identifier: instanceIdentifier
          });
        };
        /**
         * Remove a service instance from the cache, so we will create a new instance for this service
         * when people try to get this service again.
         *
         * NOTE: currently only firestore is using this functionality to support firestore shutdown.
         *
         * @param name The service name
         * @param instanceIdentifier instance identifier in case multiple instances are allowed
         * @internal
         */


        FirebaseAppImpl.prototype._removeServiceInstance = function (name, instanceIdentifier) {
          if (instanceIdentifier === void 0) {
            instanceIdentifier = DEFAULT_ENTRY_NAME;
          } // eslint-disable-next-line @typescript-eslint/no-explicit-any


          this.container.getProvider(name).clearInstance(instanceIdentifier);
        };
        /**
         * @param component the component being added to this app's container
         */


        FirebaseAppImpl.prototype._addComponent = function (component) {
          try {
            this.container.addComponent(component);
          } catch (e) {
            logger.debug("Component " + component.name + " failed to register with FirebaseApp " + this.name, e);
          }
        };

        FirebaseAppImpl.prototype._addOrOverwriteComponent = function (component) {
          this.container.addOrOverwriteComponent(component);
        };

        FirebaseAppImpl.prototype.toJSON = function () {
          return {
            name: this.name,
            automaticDataCollectionEnabled: this.automaticDataCollectionEnabled,
            options: this.options
          };
        };
        /**
         * This function will throw an Error if the App has already been deleted -
         * use before performing API actions on the App.
         */


        FirebaseAppImpl.prototype.checkDestroyed_ = function () {
          if (this.isDeleted_) {
            throw ERROR_FACTORY.create("app-deleted"
            /* APP_DELETED */
            , {
              appName: this.name_
            });
          }
        };

        return FirebaseAppImpl;
      }(); // Prevent dead-code elimination of these methods w/o invalid property
      // copying.


      FirebaseAppImpl.prototype.name && FirebaseAppImpl.prototype.options || FirebaseAppImpl.prototype["delete"] || console.log('dc');
      var version$1 = "8.6.5";
      /**
       * @license
       * Copyright 2019 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */

      /**
       * Because auth can't share code with other components, we attach the utility functions
       * in an internal namespace to share code.
       * This function return a firebase namespace object without
       * any utility functions, so it can be shared between the regular firebaseNamespace and
       * the lite version.
       */

      function createFirebaseNamespaceCore(firebaseAppImpl) {
        var apps = {}; // eslint-disable-next-line @typescript-eslint/no-explicit-any

        var components = new Map(); // A namespace is a plain JavaScript Object.

        var namespace = {
          // Hack to prevent Babel from modifying the object returned
          // as the firebase namespace.
          // @ts-ignore
          __esModule: true,
          initializeApp: initializeApp,
          // @ts-ignore
          app: app,
          registerVersion: registerVersion,
          setLogLevel: _firebase_logger__WEBPACK_IMPORTED_MODULE_3__["setLogLevel"],
          onLog: onLog,
          // @ts-ignore
          apps: null,
          SDK_VERSION: version$1,
          INTERNAL: {
            registerComponent: registerComponent,
            removeApp: removeApp,
            components: components,
            useAsService: useAsService
          }
        }; // Inject a circular default export to allow Babel users who were previously
        // using:
        //
        //   import firebase from 'firebase';
        //   which becomes: var firebase = require('firebase').default;
        //
        // instead of
        //
        //   import * as firebase from 'firebase';
        //   which becomes: var firebase = require('firebase');
        // eslint-disable-next-line @typescript-eslint/no-explicit-any

        namespace['default'] = namespace; // firebase.apps is a read-only getter.

        Object.defineProperty(namespace, 'apps', {
          get: getApps
        });
        /**
         * Called by App.delete() - but before any services associated with the App
         * are deleted.
         */

        function removeApp(name) {
          delete apps[name];
        }
        /**
         * Get the App object for a given name (or DEFAULT).
         */


        function app(name) {
          name = name || DEFAULT_ENTRY_NAME;

          if (!Object(_firebase_util__WEBPACK_IMPORTED_MODULE_1__["contains"])(apps, name)) {
            throw ERROR_FACTORY.create("no-app"
            /* NO_APP */
            , {
              appName: name
            });
          }

          return apps[name];
        } // @ts-ignore


        app['App'] = firebaseAppImpl;

        function initializeApp(options, rawConfig) {
          if (rawConfig === void 0) {
            rawConfig = {};
          }

          if (typeof rawConfig !== 'object' || rawConfig === null) {
            var name_1 = rawConfig;
            rawConfig = {
              name: name_1
            };
          }

          var config = rawConfig;

          if (config.name === undefined) {
            config.name = DEFAULT_ENTRY_NAME;
          }

          var name = config.name;

          if (typeof name !== 'string' || !name) {
            throw ERROR_FACTORY.create("bad-app-name"
            /* BAD_APP_NAME */
            , {
              appName: String(name)
            });
          }

          if (Object(_firebase_util__WEBPACK_IMPORTED_MODULE_1__["contains"])(apps, name)) {
            throw ERROR_FACTORY.create("duplicate-app"
            /* DUPLICATE_APP */
            , {
              appName: name
            });
          }

          var app = new firebaseAppImpl(options, config, namespace);
          apps[name] = app;
          return app;
        }
        /*
         * Return an array of all the non-deleted FirebaseApps.
         */


        function getApps() {
          // Make a copy so caller cannot mutate the apps list.
          return Object.keys(apps).map(function (name) {
            return apps[name];
          });
        }

        function registerComponent(component) {
          var componentName = component.name;

          if (components.has(componentName)) {
            logger.debug("There were multiple attempts to register component " + componentName + ".");
            return component.type === "PUBLIC"
            /* PUBLIC */
            ? // eslint-disable-next-line @typescript-eslint/no-explicit-any
            namespace[componentName] : null;
          }

          components.set(componentName, component); // create service namespace for public components

          if (component.type === "PUBLIC"
          /* PUBLIC */
          ) {
              // The Service namespace is an accessor function ...
              var serviceNamespace = function serviceNamespace(appArg) {
                if (appArg === void 0) {
                  appArg = app();
                } // eslint-disable-next-line @typescript-eslint/no-explicit-any


                if (typeof appArg[componentName] !== 'function') {
                  // Invalid argument.
                  // This happens in the following case: firebase.storage('gs:/')
                  throw ERROR_FACTORY.create("invalid-app-argument"
                  /* INVALID_APP_ARGUMENT */
                  , {
                    appName: componentName
                  });
                } // Forward service instance lookup to the FirebaseApp.
                // eslint-disable-next-line @typescript-eslint/no-explicit-any


                return appArg[componentName]();
              }; // ... and a container for service-level properties.


              if (component.serviceProps !== undefined) {
                Object(_firebase_util__WEBPACK_IMPORTED_MODULE_1__["deepExtend"])(serviceNamespace, component.serviceProps);
              } // eslint-disable-next-line @typescript-eslint/no-explicit-any


              namespace[componentName] = serviceNamespace; // Patch the FirebaseAppImpl prototype
              // eslint-disable-next-line @typescript-eslint/no-explicit-any

              firebaseAppImpl.prototype[componentName] = // TODO: The eslint disable can be removed and the 'ignoreRestArgs'
              // option added to the no-explicit-any rule when ESlint releases it.
              // eslint-disable-next-line @typescript-eslint/no-explicit-any
              function () {
                var args = [];

                for (var _i = 0; _i < arguments.length; _i++) {
                  args[_i] = arguments[_i];
                }

                var serviceFxn = this._getService.bind(this, componentName);

                return serviceFxn.apply(this, component.multipleInstances ? args : []);
              };
            } // add the component to existing app instances


          for (var _i = 0, _a = Object.keys(apps); _i < _a.length; _i++) {
            var appName = _a[_i];

            apps[appName]._addComponent(component);
          }

          return component.type === "PUBLIC"
          /* PUBLIC */
          ? // eslint-disable-next-line @typescript-eslint/no-explicit-any
          namespace[componentName] : null;
        }

        function registerVersion(libraryKeyOrName, version, variant) {
          var _a; // TODO: We can use this check to whitelist strings when/if we set up
          // a good whitelist system.


          var library = (_a = PLATFORM_LOG_STRING[libraryKeyOrName]) !== null && _a !== void 0 ? _a : libraryKeyOrName;

          if (variant) {
            library += "-" + variant;
          }

          var libraryMismatch = library.match(/\s|\//);
          var versionMismatch = version.match(/\s|\//);

          if (libraryMismatch || versionMismatch) {
            var warning = ["Unable to register library \"" + library + "\" with version \"" + version + "\":"];

            if (libraryMismatch) {
              warning.push("library name \"" + library + "\" contains illegal characters (whitespace or \"/\")");
            }

            if (libraryMismatch && versionMismatch) {
              warning.push('and');
            }

            if (versionMismatch) {
              warning.push("version name \"" + version + "\" contains illegal characters (whitespace or \"/\")");
            }

            logger.warn(warning.join(' '));
            return;
          }

          registerComponent(new _firebase_component__WEBPACK_IMPORTED_MODULE_2__["Component"](library + "-version", function () {
            return {
              library: library,
              version: version
            };
          }, "VERSION"
          /* VERSION */
          ));
        }

        function onLog(logCallback, options) {
          if (logCallback !== null && typeof logCallback !== 'function') {
            throw ERROR_FACTORY.create("invalid-log-argument"
            /* INVALID_LOG_ARGUMENT */
            );
          }

          Object(_firebase_logger__WEBPACK_IMPORTED_MODULE_3__["setUserLogHandler"])(logCallback, options);
        } // Map the requested service to a registered service name
        // (used to map auth to serverAuth service when needed).


        function useAsService(app, name) {
          if (name === 'serverAuth') {
            return null;
          }

          var useService = name;
          return useService;
        }

        return namespace;
      }
      /**
       * @license
       * Copyright 2019 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */

      /**
       * Return a firebase namespace object.
       *
       * In production, this will be called exactly once and the result
       * assigned to the 'firebase' global.  It may be called multiple times
       * in unit tests.
       */


      function createFirebaseNamespace() {
        var namespace = createFirebaseNamespaceCore(FirebaseAppImpl);
        namespace.INTERNAL = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({}, namespace.INTERNAL), {
          createFirebaseNamespace: createFirebaseNamespace,
          extendNamespace: extendNamespace,
          createSubscribe: _firebase_util__WEBPACK_IMPORTED_MODULE_1__["createSubscribe"],
          ErrorFactory: _firebase_util__WEBPACK_IMPORTED_MODULE_1__["ErrorFactory"],
          deepExtend: _firebase_util__WEBPACK_IMPORTED_MODULE_1__["deepExtend"]
        });
        /**
         * Patch the top-level firebase namespace with additional properties.
         *
         * firebase.INTERNAL.extendNamespace()
         */

        function extendNamespace(props) {
          Object(_firebase_util__WEBPACK_IMPORTED_MODULE_1__["deepExtend"])(namespace, props);
        }

        return namespace;
      }

      var firebase = createFirebaseNamespace();
      /**
       * @license
       * Copyright 2019 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */

      var PlatformLoggerService =
      /** @class */
      function () {
        function PlatformLoggerService(container) {
          this.container = container;
        } // In initial implementation, this will be called by installations on
        // auth token refresh, and installations will send this string.


        PlatformLoggerService.prototype.getPlatformInfoString = function () {
          var providers = this.container.getProviders(); // Loop through providers and get library/version pairs from any that are
          // version components.

          return providers.map(function (provider) {
            if (isVersionServiceProvider(provider)) {
              var service = provider.getImmediate();
              return service.library + "/" + service.version;
            } else {
              return null;
            }
          }).filter(function (logString) {
            return logString;
          }).join(' ');
        };

        return PlatformLoggerService;
      }();
      /**
       *
       * @param provider check if this provider provides a VersionService
       *
       * NOTE: Using Provider<'app-version'> is a hack to indicate that the provider
       * provides VersionService. The provider is not necessarily a 'app-version'
       * provider.
       */


      function isVersionServiceProvider(provider) {
        var component = provider.getComponent();
        return (component === null || component === void 0 ? void 0 : component.type) === "VERSION"
        /* VERSION */
        ;
      }
      /**
       * @license
       * Copyright 2019 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */


      function registerCoreComponents(firebase, variant) {
        firebase.INTERNAL.registerComponent(new _firebase_component__WEBPACK_IMPORTED_MODULE_2__["Component"]('platform-logger', function (container) {
          return new PlatformLoggerService(container);
        }, "PRIVATE"
        /* PRIVATE */
        )); // Register `app` package.

        firebase.registerVersion(name, version, variant); // Register platform SDK identifier (no version).

        firebase.registerVersion('fire-js', '');
      }
      /**
       * @license
       * Copyright 2017 Google LLC
       *
       * Licensed under the Apache License, Version 2.0 (the "License");
       * you may not use this file except in compliance with the License.
       * You may obtain a copy of the License at
       *
       *   http://www.apache.org/licenses/LICENSE-2.0
       *
       * Unless required by applicable law or agreed to in writing, software
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       */
      // Firebase Lite detection test
      // eslint-disable-next-line @typescript-eslint/no-explicit-any


      if (Object(_firebase_util__WEBPACK_IMPORTED_MODULE_1__["isBrowser"])() && self.firebase !== undefined) {
        logger.warn("\n    Warning: Firebase is already defined in the global scope. Please make sure\n    Firebase library is only loaded once.\n  "); // eslint-disable-next-line

        var sdkVersion = self.firebase.SDK_VERSION;

        if (sdkVersion && sdkVersion.indexOf('LITE') >= 0) {
          logger.warn("\n    Warning: You are trying to load Firebase while using Firebase Performance standalone script.\n    You should load Firebase Performance with this instance of Firebase to avoid loading duplicate code.\n    ");
        }
      }

      var initializeApp = firebase.initializeApp; // TODO: This disable can be removed and the 'ignoreRestArgs' option added to
      // the no-explicit-any rule when ESlint releases it.
      // eslint-disable-next-line @typescript-eslint/no-explicit-any

      firebase.initializeApp = function () {
        var args = [];

        for (var _i = 0; _i < arguments.length; _i++) {
          args[_i] = arguments[_i];
        } // Environment check before initializing app
        // Do the check in initializeApp, so people have a chance to disable it by setting logLevel
        // in @firebase/logger


        if (Object(_firebase_util__WEBPACK_IMPORTED_MODULE_1__["isNode"])()) {
          logger.warn("\n      Warning: This is a browser-targeted Firebase bundle but it appears it is being\n      run in a Node environment.  If running in a Node environment, make sure you\n      are using the bundle specified by the \"main\" field in package.json.\n      \n      If you are using Webpack, you can specify \"main\" as the first item in\n      \"resolve.mainFields\":\n      https://webpack.js.org/configuration/resolve/#resolvemainfields\n      \n      If using Rollup, use the @rollup/plugin-node-resolve plugin and specify \"main\"\n      as the first item in \"mainFields\", e.g. ['main', 'module'].\n      https://github.com/rollup/@rollup/plugin-node-resolve\n      ");
        }

        return initializeApp.apply(undefined, args);
      };

      var firebase$1 = firebase;
      registerCoreComponents(firebase$1);
      /* harmony default export */

      __webpack_exports__["default"] = firebase$1; //# sourceMappingURL=index.esm.js.map

      /***/
    },

    /***/
    "zP0r":
    /*!***************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/skip.js ***!
      \***************************************************************/

    /*! exports provided: skip */

    /***/
    function zP0r(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "skip", function () {
        return skip;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../Subscriber */
      "7o/Q");

      function skip(count) {
        return function (source) {
          return source.lift(new SkipOperator(count));
        };
      }

      var SkipOperator = /*#__PURE__*/function () {
        function SkipOperator(total) {
          _classCallCheck2(this, SkipOperator);

          this.total = total;
        }

        _createClass2(SkipOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new SkipSubscriber(subscriber, this.total));
          }
        }]);

        return SkipOperator;
      }();

      var SkipSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_47) {
        _inherits2(SkipSubscriber, _Subscriber__WEBPACK_47);

        var _super409 = _createSuper(SkipSubscriber);

        function SkipSubscriber(destination, total) {
          var _this1032;

          _classCallCheck2(this, SkipSubscriber);

          _this1032 = _super409.call(this, destination);
          _this1032.total = total;
          _this1032.count = 0;
          return _this1032;
        }

        _createClass2(SkipSubscriber, [{
          key: "_next",
          value: function _next(x) {
            if (++this.count > this.total) {
              this.destination.next(x);
            }
          }
        }]);

        return SkipSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]); //# sourceMappingURL=skip.js.map

      /***/

    },

    /***/
    "ze1m":
    /*!*****************************************************!*\
      !*** ./node_modules/aws-sdk/lib/services/s3util.js ***!
      \*****************************************************/

    /*! no static exports found */

    /***/
    function ze1m(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ../core */
      "QsWE");

      var regionUtil = __webpack_require__(
      /*! ../region_config */
      "3uhI");

      var s3util = {
        /**
         * @api private
         */
        isArnInParam: function isArnInParam(req, paramName) {
          var inputShape = (req.service.api.operations[req.operation] || {}).input || {};
          var inputMembers = inputShape.members || {};
          if (!req.params[paramName] || !inputMembers[paramName]) return false;
          return AWS.util.ARN.validate(req.params[paramName]);
        },

        /**
         * Validate service component from ARN supplied in Bucket parameter
         */
        validateArnService: function validateArnService(req) {
          var parsedArn = req.service._parsedArn;

          if (parsedArn.service !== 's3' && parsedArn.service !== 's3-outposts') {
            throw AWS.util.error(new Error(), {
              code: 'InvalidARN',
              message: 'expect \'s3\' or \'s3-outposts\' in ARN service component'
            });
          }
        },

        /**
         * Validate account ID from ARN supplied in Bucket parameter is a valid account
         */
        validateArnAccount: function validateArnAccount(req) {
          var parsedArn = req.service._parsedArn;

          if (!/[0-9]{12}/.exec(parsedArn.accountId)) {
            throw AWS.util.error(new Error(), {
              code: 'InvalidARN',
              message: 'ARN accountID does not match regex "[0-9]{12}"'
            });
          }
        },

        /**
         * Validate ARN supplied in Bucket parameter is a valid access point ARN
         */
        validateS3AccessPointArn: function validateS3AccessPointArn(req) {
          var parsedArn = req.service._parsedArn; //can be ':' or '/'

          var delimiter = parsedArn.resource['accesspoint'.length];

          if (parsedArn.resource.split(delimiter).length !== 2) {
            throw AWS.util.error(new Error(), {
              code: 'InvalidARN',
              message: 'Access Point ARN should have one resource accesspoint/{accesspointName}'
            });
          }

          var accessPoint = parsedArn.resource.split(delimiter)[1];
          var accessPointPrefix = accessPoint + '-' + parsedArn.accountId;

          if (!s3util.dnsCompatibleBucketName(accessPointPrefix) || accessPointPrefix.match(/\./)) {
            throw AWS.util.error(new Error(), {
              code: 'InvalidARN',
              message: 'Access point resource in ARN is not DNS compatible. Got ' + accessPoint
            });
          } //set parsed valid access point


          req.service._parsedArn.accessPoint = accessPoint;
        },

        /**
         * Validate Outposts ARN supplied in Bucket parameter is a valid outposts ARN
         */
        validateOutpostsArn: function validateOutpostsArn(req) {
          var parsedArn = req.service._parsedArn;

          if (parsedArn.resource.indexOf('outpost:') !== 0 && parsedArn.resource.indexOf('outpost/') !== 0) {
            throw AWS.util.error(new Error(), {
              code: 'InvalidARN',
              message: 'ARN resource should begin with \'outpost/\''
            });
          } //can be ':' or '/'


          var delimiter = parsedArn.resource['outpost'.length];
          var outpostId = parsedArn.resource.split(delimiter)[1];
          var dnsHostRegex = new RegExp(/^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])$/);

          if (!dnsHostRegex.test(outpostId)) {
            throw AWS.util.error(new Error(), {
              code: 'InvalidARN',
              message: 'Outpost resource in ARN is not DNS compatible. Got ' + outpostId
            });
          }

          req.service._parsedArn.outpostId = outpostId;
        },

        /**
         * Validate Outposts ARN supplied in Bucket parameter is a valid outposts ARN
         */
        validateOutpostsAccessPointArn: function validateOutpostsAccessPointArn(req) {
          var parsedArn = req.service._parsedArn; //can be ':' or '/'

          var delimiter = parsedArn.resource['outpost'.length];

          if (parsedArn.resource.split(delimiter).length !== 4) {
            throw AWS.util.error(new Error(), {
              code: 'InvalidARN',
              message: 'Outposts ARN should have two resources outpost/{outpostId}/accesspoint/{accesspointName}'
            });
          }

          var accessPoint = parsedArn.resource.split(delimiter)[3];
          var accessPointPrefix = accessPoint + '-' + parsedArn.accountId;

          if (!s3util.dnsCompatibleBucketName(accessPointPrefix) || accessPointPrefix.match(/\./)) {
            throw AWS.util.error(new Error(), {
              code: 'InvalidARN',
              message: 'Access point resource in ARN is not DNS compatible. Got ' + accessPoint
            });
          } //set parsed valid access point


          req.service._parsedArn.accessPoint = accessPoint;
        },

        /**
         * Validate region field in ARN supplied in Bucket parameter is a valid region
         */
        validateArnRegion: function validateArnRegion(req) {
          var useArnRegion = s3util.loadUseArnRegionConfig(req);
          var regionFromArn = req.service._parsedArn.region;
          var clientRegion = req.service.config.region;

          if (!regionFromArn) {
            throw AWS.util.error(new Error(), {
              code: 'InvalidARN',
              message: 'ARN region is empty'
            });
          }

          if (clientRegion.indexOf('fips') >= 0 || regionFromArn.indexOf('fips') >= 0) {
            throw AWS.util.error(new Error(), {
              code: 'InvalidConfiguration',
              message: 'ARN endpoint is not compatible with FIPS region'
            });
          }

          if (!useArnRegion && regionFromArn !== clientRegion) {
            throw AWS.util.error(new Error(), {
              code: 'InvalidConfiguration',
              message: 'Configured region conflicts with access point region'
            });
          } else if (useArnRegion && regionUtil.getEndpointSuffix(regionFromArn) !== regionUtil.getEndpointSuffix(clientRegion)) {
            throw AWS.util.error(new Error(), {
              code: 'InvalidConfiguration',
              message: 'Configured region and access point region not in same partition'
            });
          }

          if (req.service.config.useAccelerateEndpoint) {
            throw AWS.util.error(new Error(), {
              code: 'InvalidConfiguration',
              message: 'useAccelerateEndpoint config is not supported with access point ARN'
            });
          }

          if (req.service._parsedArn.service === 's3-outposts' && req.service.config.useDualstack) {
            throw AWS.util.error(new Error(), {
              code: 'InvalidConfiguration',
              message: 'useDualstack config is not supported with outposts access point ARN'
            });
          }
        },
        loadUseArnRegionConfig: function loadUseArnRegionConfig(req) {
          var envName = 'AWS_S3_USE_ARN_REGION';
          var configName = 's3_use_arn_region';
          var useArnRegion = true;
          var originalConfig = req.service._originalConfig || {};

          if (req.service.config.s3UseArnRegion !== undefined) {
            return req.service.config.s3UseArnRegion;
          } else if (originalConfig.s3UseArnRegion !== undefined) {
            useArnRegion = originalConfig.s3UseArnRegion === true;
          } else if (AWS.util.isNode()) {
            //load from environmental variable AWS_USE_ARN_REGION
            if (process.env[envName]) {
              var value = process.env[envName].trim().toLowerCase();

              if (['false', 'true'].indexOf(value) < 0) {
                throw AWS.util.error(new Error(), {
                  code: 'InvalidConfiguration',
                  message: envName + ' only accepts true or false. Got ' + process.env[envName],
                  retryable: false
                });
              }

              useArnRegion = value === 'true';
            } else {
              //load from shared config property use_arn_region
              var profiles = {};
              var profile = {};

              try {
                profiles = AWS.util.getProfilesFromSharedConfig(AWS.util.iniLoader);
                profile = profiles[process.env.AWS_PROFILE || AWS.util.defaultProfile];
              } catch (e) {}

              if (profile[configName]) {
                if (['false', 'true'].indexOf(profile[configName].trim().toLowerCase()) < 0) {
                  throw AWS.util.error(new Error(), {
                    code: 'InvalidConfiguration',
                    message: configName + ' only accepts true or false. Got ' + profile[configName],
                    retryable: false
                  });
                }

                useArnRegion = profile[configName].trim().toLowerCase() === 'true';
              }
            }
          }

          req.service.config.s3UseArnRegion = useArnRegion;
          return useArnRegion;
        },

        /**
         * Validations before URI can be populated
         */
        validatePopulateUriFromArn: function validatePopulateUriFromArn(req) {
          if (req.service._originalConfig && req.service._originalConfig.endpoint) {
            throw AWS.util.error(new Error(), {
              code: 'InvalidConfiguration',
              message: 'Custom endpoint is not compatible with access point ARN'
            });
          }

          if (req.service.config.s3ForcePathStyle) {
            throw AWS.util.error(new Error(), {
              code: 'InvalidConfiguration',
              message: 'Cannot construct path-style endpoint with access point'
            });
          }
        },

        /**
         * Returns true if the bucket name is DNS compatible.  Buckets created
         * outside of the classic region MUST be DNS compatible.
         *
         * @api private
         */
        dnsCompatibleBucketName: function dnsCompatibleBucketName(bucketName) {
          var b = bucketName;
          var domain = new RegExp(/^[a-z0-9][a-z0-9\.\-]{1,61}[a-z0-9]$/);
          var ipAddress = new RegExp(/(\d+\.){3}\d+/);
          var dots = new RegExp(/\.\./);
          return b.match(domain) && !b.match(ipAddress) && !b.match(dots) ? true : false;
        }
      };
      /**
       * @api private
       */

      module.exports = s3util;
      /***/
    },

    /***/
    "zfQR":
    /*!****************************************************!*\
      !*** ./node_modules/aws-sdk/lib/protocol/query.js ***!
      \****************************************************/

    /*! no static exports found */

    /***/
    function zfQR(module, exports, __webpack_require__) {
      var AWS = __webpack_require__(
      /*! ../core */
      "QsWE");

      var util = __webpack_require__(
      /*! ../util */
      "BaN1");

      var QueryParamSerializer = __webpack_require__(
      /*! ../query/query_param_serializer */
      "gaZ0");

      var Shape = __webpack_require__(
      /*! ../model/shape */
      "nyFZ");

      var populateHostPrefix = __webpack_require__(
      /*! ./helpers */
      "lSFX").populateHostPrefix;

      function buildRequest(req) {
        var operation = req.service.api.operations[req.operation];
        var httpRequest = req.httpRequest;
        httpRequest.headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8';
        httpRequest.params = {
          Version: req.service.api.apiVersion,
          Action: operation.name
        }; // convert the request parameters into a list of query params,
        // e.g. Deeply.NestedParam.0.Name=value

        var builder = new QueryParamSerializer();
        builder.serialize(req.params, operation.input, function (name, value) {
          httpRequest.params[name] = value;
        });
        httpRequest.body = util.queryParamsToString(httpRequest.params);
        populateHostPrefix(req);
      }

      function extractError(resp) {
        var data,
            body = resp.httpResponse.body.toString();

        if (body.match('<UnknownOperationException')) {
          data = {
            Code: 'UnknownOperation',
            Message: 'Unknown operation ' + resp.request.operation
          };
        } else {
          try {
            data = new AWS.XML.Parser().parse(body);
          } catch (e) {
            data = {
              Code: resp.httpResponse.statusCode,
              Message: resp.httpResponse.statusMessage
            };
          }
        }

        if (data.requestId && !resp.requestId) resp.requestId = data.requestId;
        if (data.Errors) data = data.Errors;
        if (data.Error) data = data.Error;

        if (data.Code) {
          resp.error = util.error(new Error(), {
            code: data.Code,
            message: data.Message
          });
        } else {
          resp.error = util.error(new Error(), {
            code: resp.httpResponse.statusCode,
            message: null
          });
        }
      }

      function extractData(resp) {
        var req = resp.request;
        var operation = req.service.api.operations[req.operation];
        var shape = operation.output || {};
        var origRules = shape;

        if (origRules.resultWrapper) {
          var tmp = Shape.create({
            type: 'structure'
          });
          tmp.members[origRules.resultWrapper] = shape;
          tmp.memberNames = [origRules.resultWrapper];
          util.property(shape, 'name', shape.resultWrapper);
          shape = tmp;
        }

        var parser = new AWS.XML.Parser(); // TODO: Refactor XML Parser to parse RequestId from response.

        if (shape && shape.members && !shape.members._XAMZRequestId) {
          var requestIdShape = Shape.create({
            type: 'string'
          }, {
            api: {
              protocol: 'query'
            }
          }, 'requestId');
          shape.members._XAMZRequestId = requestIdShape;
        }

        var data = parser.parse(resp.httpResponse.body.toString(), shape);
        resp.requestId = data._XAMZRequestId || data.requestId;
        if (data._XAMZRequestId) delete data._XAMZRequestId;

        if (origRules.resultWrapper) {
          if (data[origRules.resultWrapper]) {
            util.update(data, data[origRules.resultWrapper]);
            delete data[origRules.resultWrapper];
          }
        }

        resp.data = data;
      }
      /**
       * @api private
       */


      module.exports = {
        buildRequest: buildRequest,
        extractError: extractError,
        extractData: extractData
      };
      /***/
    },

    /***/
    "znLP":
    /*!**********************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/scheduler/AnimationFrameScheduler.js ***!
      \**********************************************************************************/

    /*! exports provided: AnimationFrameScheduler */

    /***/
    function znLP(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "AnimationFrameScheduler", function () {
        return AnimationFrameScheduler;
      });
      /* harmony import */


      var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./AsyncScheduler */
      "IjjT");

      var AnimationFrameScheduler = /*#__PURE__*/function (_AsyncScheduler__WEBP4) {
        _inherits2(AnimationFrameScheduler, _AsyncScheduler__WEBP4);

        var _super410 = _createSuper(AnimationFrameScheduler);

        function AnimationFrameScheduler() {
          _classCallCheck2(this, AnimationFrameScheduler);

          return _super410.apply(this, arguments);
        }

        _createClass2(AnimationFrameScheduler, [{
          key: "flush",
          value: function flush(action) {
            this.active = true;
            this.scheduled = undefined;
            var actions = this.actions;
            var error;
            var index = -1;
            var count = actions.length;
            action = action || actions.shift();

            do {
              if (error = action.execute(action.state, action.delay)) {
                break;
              }
            } while (++index < count && (action = actions.shift()));

            this.active = false;

            if (error) {
              while (++index < count && (action = actions.shift())) {
                action.unsubscribe();
              }

              throw error;
            }
          }
        }]);

        return AnimationFrameScheduler;
      }(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_0__["AsyncScheduler"]); //# sourceMappingURL=AnimationFrameScheduler.js.map

      /***/

    },

    /***/
    "zp1y":
    /*!*************************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/withLatestFrom.js ***!
      \*************************************************************************/

    /*! exports provided: withLatestFrom */

    /***/
    function zp1y(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "withLatestFrom", function () {
        return withLatestFrom;
      });
      /* harmony import */


      var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../OuterSubscriber */
      "l7GE");
      /* harmony import */


      var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ../util/subscribeToResult */
      "ZUHj");

      function withLatestFrom() {
        for (var _len69 = arguments.length, args = new Array(_len69), _key72 = 0; _key72 < _len69; _key72++) {
          args[_key72] = arguments[_key72];
        }

        return function (source) {
          var project;

          if (typeof args[args.length - 1] === 'function') {
            project = args.pop();
          }

          var observables = args;
          return source.lift(new WithLatestFromOperator(observables, project));
        };
      }

      var WithLatestFromOperator = /*#__PURE__*/function () {
        function WithLatestFromOperator(observables, project) {
          _classCallCheck2(this, WithLatestFromOperator);

          this.observables = observables;
          this.project = project;
        }

        _createClass2(WithLatestFromOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new WithLatestFromSubscriber(subscriber, this.observables, this.project));
          }
        }]);

        return WithLatestFromOperator;
      }();

      var WithLatestFromSubscriber = /*#__PURE__*/function (_OuterSubscriber__WEB7) {
        _inherits2(WithLatestFromSubscriber, _OuterSubscriber__WEB7);

        var _super411 = _createSuper(WithLatestFromSubscriber);

        function WithLatestFromSubscriber(destination, observables, project) {
          var _this1033;

          _classCallCheck2(this, WithLatestFromSubscriber);

          _this1033 = _super411.call(this, destination);
          _this1033.observables = observables;
          _this1033.project = project;
          _this1033.toRespond = [];
          var len = observables.length;
          _this1033.values = new Array(len);

          for (var i = 0; i < len; i++) {
            _this1033.toRespond.push(i);
          }

          for (var _i67 = 0; _i67 < len; _i67++) {
            var observable = observables[_i67];

            _this1033.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__["subscribeToResult"])(_assertThisInitialized2(_this1033), observable, undefined, _i67));
          }

          return _this1033;
        }

        _createClass2(WithLatestFromSubscriber, [{
          key: "notifyNext",
          value: function notifyNext(_outerValue, innerValue, outerIndex) {
            this.values[outerIndex] = innerValue;
            var toRespond = this.toRespond;

            if (toRespond.length > 0) {
              var found = toRespond.indexOf(outerIndex);

              if (found !== -1) {
                toRespond.splice(found, 1);
              }
            }
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete() {}
        }, {
          key: "_next",
          value: function _next(value) {
            if (this.toRespond.length === 0) {
              var args = [value].concat(_toConsumableArray(this.values));

              if (this.project) {
                this._tryProject(args);
              } else {
                this.destination.next(args);
              }
            }
          }
        }, {
          key: "_tryProject",
          value: function _tryProject(args) {
            var result;

            try {
              result = this.project.apply(this, args);
            } catch (err) {
              this.destination.error(err);
              return;
            }

            this.destination.next(result);
          }
        }]);

        return WithLatestFromSubscriber;
      }(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_0__["OuterSubscriber"]); //# sourceMappingURL=withLatestFrom.js.map

      /***/

    },

    /***/
    "zt7V":
    /*!******************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/operators/exhaust.js ***!
      \******************************************************************/

    /*! exports provided: exhaust */

    /***/
    function zt7V(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "exhaust", function () {
        return exhaust;
      });
      /* harmony import */


      var _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ../innerSubscribe */
      "zx2A");

      function exhaust() {
        return function (source) {
          return source.lift(new SwitchFirstOperator());
        };
      }

      var SwitchFirstOperator = /*#__PURE__*/function () {
        function SwitchFirstOperator() {
          _classCallCheck2(this, SwitchFirstOperator);
        }

        _createClass2(SwitchFirstOperator, [{
          key: "call",
          value: function call(subscriber, source) {
            return source.subscribe(new SwitchFirstSubscriber(subscriber));
          }
        }]);

        return SwitchFirstOperator;
      }();

      var SwitchFirstSubscriber = /*#__PURE__*/function (_innerSubscribe__WEBP22) {
        _inherits2(SwitchFirstSubscriber, _innerSubscribe__WEBP22);

        var _super412 = _createSuper(SwitchFirstSubscriber);

        function SwitchFirstSubscriber(destination) {
          var _this1034;

          _classCallCheck2(this, SwitchFirstSubscriber);

          _this1034 = _super412.call(this, destination);
          _this1034.hasCompleted = false;
          _this1034.hasSubscription = false;
          return _this1034;
        }

        _createClass2(SwitchFirstSubscriber, [{
          key: "_next",
          value: function _next(value) {
            if (!this.hasSubscription) {
              this.hasSubscription = true;
              this.add(Object(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["innerSubscribe"])(value, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleInnerSubscriber"](this)));
            }
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.hasCompleted = true;

            if (!this.hasSubscription) {
              this.destination.complete();
            }
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete() {
            this.hasSubscription = false;

            if (this.hasCompleted) {
              this.destination.complete();
            }
          }
        }]);

        return SwitchFirstSubscriber;
      }(_innerSubscribe__WEBPACK_IMPORTED_MODULE_0__["SimpleOuterSubscriber"]); //# sourceMappingURL=exhaust.js.map

      /***/

    },

    /***/
    "zx2A":
    /*!***************************************************************!*\
      !*** ./node_modules/rxjs/_esm2015/internal/innerSubscribe.js ***!
      \***************************************************************/

    /*! exports provided: SimpleInnerSubscriber, ComplexInnerSubscriber, SimpleOuterSubscriber, ComplexOuterSubscriber, innerSubscribe */

    /***/
    function zx2A(module, __webpack_exports__, __webpack_require__) {
      "use strict";

      __webpack_require__.r(__webpack_exports__);
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SimpleInnerSubscriber", function () {
        return SimpleInnerSubscriber;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ComplexInnerSubscriber", function () {
        return ComplexInnerSubscriber;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "SimpleOuterSubscriber", function () {
        return SimpleOuterSubscriber;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "ComplexOuterSubscriber", function () {
        return ComplexOuterSubscriber;
      });
      /* harmony export (binding) */


      __webpack_require__.d(__webpack_exports__, "innerSubscribe", function () {
        return innerSubscribe;
      });
      /* harmony import */


      var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
      /*! ./Subscriber */
      "7o/Q");
      /* harmony import */


      var _Observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
      /*! ./Observable */
      "HDdC");
      /* harmony import */


      var _util_subscribeTo__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
      /*! ./util/subscribeTo */
      "SeVD");

      var SimpleInnerSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_48) {
        _inherits2(SimpleInnerSubscriber, _Subscriber__WEBPACK_48);

        var _super413 = _createSuper(SimpleInnerSubscriber);

        function SimpleInnerSubscriber(parent) {
          var _this1035;

          _classCallCheck2(this, SimpleInnerSubscriber);

          _this1035 = _super413.call(this);
          _this1035.parent = parent;
          return _this1035;
        }

        _createClass2(SimpleInnerSubscriber, [{
          key: "_next",
          value: function _next(value) {
            this.parent.notifyNext(value);
          }
        }, {
          key: "_error",
          value: function _error(error) {
            this.parent.notifyError(error);
            this.unsubscribe();
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.parent.notifyComplete();
            this.unsubscribe();
          }
        }]);

        return SimpleInnerSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]);

      var ComplexInnerSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_49) {
        _inherits2(ComplexInnerSubscriber, _Subscriber__WEBPACK_49);

        var _super414 = _createSuper(ComplexInnerSubscriber);

        function ComplexInnerSubscriber(parent, outerValue, outerIndex) {
          var _this1036;

          _classCallCheck2(this, ComplexInnerSubscriber);

          _this1036 = _super414.call(this);
          _this1036.parent = parent;
          _this1036.outerValue = outerValue;
          _this1036.outerIndex = outerIndex;
          return _this1036;
        }

        _createClass2(ComplexInnerSubscriber, [{
          key: "_next",
          value: function _next(value) {
            this.parent.notifyNext(this.outerValue, value, this.outerIndex, this);
          }
        }, {
          key: "_error",
          value: function _error(error) {
            this.parent.notifyError(error);
            this.unsubscribe();
          }
        }, {
          key: "_complete",
          value: function _complete() {
            this.parent.notifyComplete(this);
            this.unsubscribe();
          }
        }]);

        return ComplexInnerSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]);

      var SimpleOuterSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_50) {
        _inherits2(SimpleOuterSubscriber, _Subscriber__WEBPACK_50);

        var _super415 = _createSuper(SimpleOuterSubscriber);

        function SimpleOuterSubscriber() {
          _classCallCheck2(this, SimpleOuterSubscriber);

          return _super415.apply(this, arguments);
        }

        _createClass2(SimpleOuterSubscriber, [{
          key: "notifyNext",
          value: function notifyNext(innerValue) {
            this.destination.next(innerValue);
          }
        }, {
          key: "notifyError",
          value: function notifyError(err) {
            this.destination.error(err);
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete() {
            this.destination.complete();
          }
        }]);

        return SimpleOuterSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]);

      var ComplexOuterSubscriber = /*#__PURE__*/function (_Subscriber__WEBPACK_51) {
        _inherits2(ComplexOuterSubscriber, _Subscriber__WEBPACK_51);

        var _super416 = _createSuper(ComplexOuterSubscriber);

        function ComplexOuterSubscriber() {
          _classCallCheck2(this, ComplexOuterSubscriber);

          return _super416.apply(this, arguments);
        }

        _createClass2(ComplexOuterSubscriber, [{
          key: "notifyNext",
          value: function notifyNext(_outerValue, innerValue, _outerIndex, _innerSub) {
            this.destination.next(innerValue);
          }
        }, {
          key: "notifyError",
          value: function notifyError(error) {
            this.destination.error(error);
          }
        }, {
          key: "notifyComplete",
          value: function notifyComplete(_innerSub) {
            this.destination.complete();
          }
        }]);

        return ComplexOuterSubscriber;
      }(_Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]);

      function innerSubscribe(result, innerSubscriber) {
        if (innerSubscriber.closed) {
          return undefined;
        }

        if (result instanceof _Observable__WEBPACK_IMPORTED_MODULE_1__["Observable"]) {
          return result.subscribe(innerSubscriber);
        }

        return Object(_util_subscribeTo__WEBPACK_IMPORTED_MODULE_2__["subscribeTo"])(result)(innerSubscriber);
      } //# sourceMappingURL=innerSubscribe.js.map

      /***/

    },

    /***/
    "zx6S":
    /*!******************************************!*\
      !*** ./node_modules/moment/locale/sr.js ***!
      \******************************************/

    /*! no static exports found */

    /***/
    function zx6S(module, exports, __webpack_require__) {
      //! moment.js locale configuration
      //! locale : Serbian [sr]
      //! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
      //! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic
      ;

      (function (global, factory) {
        true ? factory(__webpack_require__(
        /*! ../moment */
        "wd/R")) : undefined;
      })(this, function (moment) {
        'use strict'; //! moment.js locale configuration

        var translator = {
          words: {
            //Different grammatical cases
            ss: ['sekunda', 'sekunde', 'sekundi'],
            m: ['jedan minut', 'jedne minute'],
            mm: ['minut', 'minute', 'minuta'],
            h: ['jedan sat', 'jednog sata'],
            hh: ['sat', 'sata', 'sati'],
            dd: ['dan', 'dana', 'dana'],
            MM: ['mesec', 'meseca', 'meseci'],
            yy: ['godina', 'godine', 'godina']
          },
          correctGrammaticalCase: function correctGrammaticalCase(number, wordKey) {
            return number === 1 ? wordKey[0] : number >= 2 && number <= 4 ? wordKey[1] : wordKey[2];
          },
          translate: function translate(number, withoutSuffix, key) {
            var wordKey = translator.words[key];

            if (key.length === 1) {
              return withoutSuffix ? wordKey[0] : wordKey[1];
            } else {
              return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
            }
          }
        };
        var sr = moment.defineLocale('sr', {
          months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
          monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
          monthsParseExact: true,
          weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),
          weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),
          weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
          weekdaysParseExact: true,
          longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'D. M. YYYY.',
            LL: 'D. MMMM YYYY.',
            LLL: 'D. MMMM YYYY. H:mm',
            LLLL: 'dddd, D. MMMM YYYY. H:mm'
          },
          calendar: {
            sameDay: '[danas u] LT',
            nextDay: '[sutra u] LT',
            nextWeek: function nextWeek() {
              switch (this.day()) {
                case 0:
                  return '[u] [nedelju] [u] LT';

                case 3:
                  return '[u] [sredu] [u] LT';

                case 6:
                  return '[u] [subotu] [u] LT';

                case 1:
                case 2:
                case 4:
                case 5:
                  return '[u] dddd [u] LT';
              }
            },
            lastDay: '[juče u] LT',
            lastWeek: function lastWeek() {
              var lastWeekDays = ['[prošle] [nedelje] [u] LT', '[prošlog] [ponedeljka] [u] LT', '[prošlog] [utorka] [u] LT', '[prošle] [srede] [u] LT', '[prošlog] [četvrtka] [u] LT', '[prošlog] [petka] [u] LT', '[prošle] [subote] [u] LT'];
              return lastWeekDays[this.day()];
            },
            sameElse: 'L'
          },
          relativeTime: {
            future: 'za %s',
            past: 'pre %s',
            s: 'nekoliko sekundi',
            ss: translator.translate,
            m: translator.translate,
            mm: translator.translate,
            h: translator.translate,
            hh: translator.translate,
            d: 'dan',
            dd: translator.translate,
            M: 'mesec',
            MM: translator.translate,
            y: 'godinu',
            yy: translator.translate
          },
          dayOfMonthOrdinalParse: /\d{1,2}\./,
          ordinal: '%d.',
          week: {
            dow: 1,
            // Monday is the first day of the week.
            doy: 7 // The week that contains Jan 7th is the first week of the year.

          }
        });
        return sr;
      });
      /***/

    }
  }]);
})();
//# sourceMappingURL=vendor-es5.js.map